From c68adb3a72a9adb23e5a98a30fac0b640e848bb3 Mon Sep 17 00:00:00 2001 From: perak Date: Mon, 13 Mar 2023 00:40:49 +0100 Subject: [PATCH] Added gpi, gpi2, virtualZ and ms gates --- README.md | 230 ++- dist/quantum-circuit.js | 618 +++++--- dist/quantum-circuit.min.js | 2 +- dist/quantum-circuit.min.js.map | 2 +- lib/quantum-circuit.js | 638 +++++--- package-lock.json | 2513 ++++++++++++++++++++++++++++++- package.json | 2 +- 7 files changed, 3458 insertions(+), 547 deletions(-) diff --git a/README.md b/README.md index ac0c1ed..72c078f 100644 --- a/README.md +++ b/README.md @@ -225,18 +225,22 @@ console.log(quantumRandom()); | **t** | T | T | T | 1 | | PI/4 rotation over Z-axis (synonym for `r4`) | | **sdg** | PHASE(-pi/2) | u1(-pi/2) | | 1 | | (-PI/2) rotation over Z-axis | | **tdg** | PHASE(-pi/4) | u1(-pi/4) | | 1 | | (-PI/4) rotation over Z-axis | -| **swap** | SWAP | SWAP | SWAP | 2 | | Swaps the state of two qubits. | -| **srswap** | def srswap | SWAP**(1/2) | | 2 | | Square root of swap | -| **iswap** | ISWAP | ISWAP | | 2 | | Swaps the state of two qubits, applying a -i phase to q1 when it is in the 1 state and a -i phase to q2 when it is in the 0 state | -| **xy** | XY | def xy | | 2 | phi | XY gate | +| **gpi** | def gpi | gpi | | 1 | phi | GPi gate | +| **gpi2** | def gpi2 | gpi2 | | 1 | phi | GPi2 gate | +| **vz** | def vz | vz | | 1 | theta | VirtualZ gate | | **cx** | CNOT | CNOT | CNOT | 2 | | Controlled NOT (CNOT) gate | | **cy** | def cy | Y | Controlled Y | 2 | | Controlled Y gate (controlled rotation over Y-axis by PI) | | **cz** | CZ | CZ | Controlled Z | 2 | | Controlled Z gate (controlled rotation over Z-axis by PI) | | **ch** | def ch | H | Controlled H | 2 | | Controlled Hadamard gate | | **csrn** | def csrn | X**(1/2) | | 2 | | Controlled square root of NOT | -| **ms** | def ms | ms | | 2 | theta | Mølmer-Sørensen gate | +| **swap** | SWAP | SWAP | SWAP | 2 | | Swaps the state of two qubits. | +| **srswap** | def srswap | SWAP**(1/2) | | 2 | | Square root of swap | +| **iswap** | ISWAP | ISWAP | | 2 | | Swaps the state of two qubits, applying a -i phase to q1 when it is in the 1 state and a -i phase to q2 when it is in the 0 state | +| **xx** | def xx | xx | | 2 | theta | XX gate | | **yy** | def yy | YY | | 2 | theta | YY gate | | **zz** | def zz | | | 2 | theta | Parametric 2-qubit rotation about ZZ | +| **xy** | XY | def xy | | 2 | phi | XY gate | +| **ms** | def ms | ms | | 2 | phi0, phi1 | Mølmer-Sørensen gate | | **cr2** | CPHASE(pi/2) | cu1(pi/2) | | 2 | | Controlled PI/2 rotation over Z-axis | | **cr4** | CPHASE(pi/4) | cu1(pi/4) | | 2 | | Controlled PI/4 rotation over Z-axis | | **cr8** | CPHASE(pi/8) | cu1(pi/8) | | 2 | | Controlled PI/8 rotation over Z-axis | @@ -1719,99 +1723,89 @@ circuit.appendGate("sdg", 0); circuit.appendGate("tdg", 0); ``` -## swap - -Swaps the state of two qubits. +## gpi -**Qubits:** 2 +GPi gate -**Matrix:** -```javascript -[ - - [1,0,0,0], - [0,0,1,0], - [0,1,0,0], - [0,0,0,1] -] -``` - -**Example:** -```javascript -circuit.appendGate("swap", [0, 1]); -``` +**Qubits:** 1 -## srswap +**Parameters:** -Square root of swap +- phi -**Qubits:** 2 **Matrix:** ```javascript [ - [1,0,0,0], - [0,"0.5 * (1 + i)","0.5 * (1 - i)",0], - [0,"0.5 * (1 - i)","0.5 * (1 + i)",0], - [0,0,0,1] + [0,"exp(-i*phi)"], + ["exp(i*phi)",0] ] ``` **Example:** ```javascript -circuit.appendGate("srswap", [0, 1]); +circuit.appendGate("gpi", 0, { + params: { + phi: "pi/2" + } +}); ``` -## iswap +## gpi2 -Swaps the state of two qubits, applying a -i phase to q1 when it is in the 1 state and a -i phase to q2 when it is in the 0 state +GPi2 gate + +**Qubits:** 1 + +**Parameters:** + +- phi -**Qubits:** 2 **Matrix:** ```javascript [ - [1,0,0,0], - [0,0,"0+i",0], - [0,"0+i",0,0], - [0,0,0,1] + ["1/sqrt(2)","(-i*exp(-i*phi))/sqrt(2)"], + ["(-i*exp(i*phi))/sqrt(2)","1/sqrt(2)"] ] ``` **Example:** ```javascript -circuit.appendGate("iswap", [0, 1]); +circuit.appendGate("gpi2", 0, { + params: { + phi: "pi/2" + } +}); ``` -## xy +## vz -XY gate +VirtualZ gate -**Qubits:** 2 +**Qubits:** 1 **Parameters:** -- phi +- theta **Matrix:** ```javascript [ - [1,0,0,0], - [0,"cos(phi / 2)","i * sin(phi / 2)",0], - [0,"i * sin(phi / 2)","cos(phi / 2)",0], - [0,0,0,1] + ["exp(-i*theta/2)",0], + [0,"exp(i*theta/2)"] ] ``` **Example:** ```javascript -circuit.appendGate("xy", [0, 1], { +circuit.appendGate("vz", 0, { params: { - phi: "pi/2" + theta: "pi/2" } }); ``` @@ -1926,9 +1920,75 @@ Controlled square root of NOT circuit.appendGate("csrn", [0, 1]); ``` -## ms +## swap -Mølmer-Sørensen gate +Swaps the state of two qubits. + +**Qubits:** 2 + +**Matrix:** +```javascript +[ + + [1,0,0,0], + [0,0,1,0], + [0,1,0,0], + [0,0,0,1] +] +``` + +**Example:** +```javascript +circuit.appendGate("swap", [0, 1]); +``` + +## srswap + +Square root of swap + +**Qubits:** 2 + +**Matrix:** +```javascript +[ + + [1,0,0,0], + [0,"0.5 * (1 + i)","0.5 * (1 - i)",0], + [0,"0.5 * (1 - i)","0.5 * (1 + i)",0], + [0,0,0,1] +] +``` + +**Example:** +```javascript +circuit.appendGate("srswap", [0, 1]); +``` + +## iswap + +Swaps the state of two qubits, applying a -i phase to q1 when it is in the 1 state and a -i phase to q2 when it is in the 0 state + +**Qubits:** 2 + +**Matrix:** +```javascript +[ + + [1,0,0,0], + [0,0,"0+i",0], + [0,"0+i",0,0], + [0,0,0,1] +] +``` + +**Example:** +```javascript +circuit.appendGate("iswap", [0, 1]); +``` + +## xx + +XX gate **Qubits:** 2 @@ -1950,7 +2010,7 @@ Mølmer-Sørensen gate **Example:** ```javascript -circuit.appendGate("ms", [0, 1], { +circuit.appendGate("xx", [0, 1], { params: { theta: "pi/2" } @@ -2019,6 +2079,70 @@ circuit.appendGate("zz", [0, 1], { }); ``` +## xy + +XY gate + +**Qubits:** 2 + +**Parameters:** + +- phi + + +**Matrix:** +```javascript +[ + + [1,0,0,0], + [0,"cos(phi / 2)","i * sin(phi / 2)",0], + [0,"i * sin(phi / 2)","cos(phi / 2)",0], + [0,0,0,1] +] +``` + +**Example:** +```javascript +circuit.appendGate("xy", [0, 1], { + params: { + phi: "pi/2" + } +}); +``` + +## ms + +Mølmer-Sørensen gate + +**Qubits:** 2 + +**Parameters:** + +- phi0 +- phi1 + + +**Matrix:** +```javascript +[ + + ["1/sqrt(2)",0,0,"(-i*exp(-i*(phi0+phi1)))/sqrt(2)"], + [0,"1/sqrt(2)","(-i*exp(-i*(phi0-phi1)))/sqrt(2)",0], + [0,"(-i*exp(i*(phi0-phi1)))/sqrt(2)","1/sqrt(2)",0], + ["(-i*exp(i*(phi0+phi1)))/sqrt(2)",0,0,"1/sqrt(2)"] +] +``` + +**Example:** +```javascript +circuit.appendGate("ms", [0, 1], { + params: { + phi0: "pi/2", + phi1: "pi/2" + } +}); +``` + ## cr2 Controlled PI/2 rotation over Z-axis diff --git a/dist/quantum-circuit.js b/dist/quantum-circuit.js index 7d1d749..e08dd5f 100644 --- a/dist/quantum-circuit.js +++ b/dist/quantum-circuit.js @@ -4299,262 +4299,150 @@ var QuantumCircuit = function(numQubits) { } }, - swap: { - description: "Swaps the state of two qubits.", + gpi: { + description: "GPi gate", matrix: [ - [1,0,0,0], - [0,0,1,0], - [0,1,0,0], - [0,0,0,1] + [0, "exp(-i*phi)"], + ["exp(i*phi)", 0] ], - params: [], + params: ["phi"], drawingInfo: { - connectors: ["x","x"], - label: "SWP" + connectors: ["box"], + label: "GPi" }, + exportInfo: { quil: { - name: "SWAP" + name: "gpi", + params: ["phi"], + defgate: "DEFGATE gpi(%phi):\n 0, EXP(-i * %phi)\n EXP(i * %phi), 0" + }, + pyquil: { + name: "gpi", + params: ["phi"], + array: "[ [ 0, quil_exp(-1j*p_phi) ], [ quil_exp(1j*p_phi), 0 ] ]" }, cirq: { - name: "SWAP" + name: "gpi" }, quest: { - name: "swap", - func: "void swap(Qureg qubits, const int q1, const int q2) {\n"+ - " controlledNot(qubits, q1, q2);\n" + - " controlledNot(qubits, q2, q1);\n" + - " controlledNot(qubits, q1, q2);\n}" + name: "gpi", + //@TODO add function + func: "TODO" }, - qsharp: { - name: "SWAP" + qasm: { + name: "gpi" }, - quirk: { - name: "Swap" + qiskit: { + name: "gpi" }, braket: { - name: "swap" + name: "unitary", + params: ["phi"], + array: "[ [ 0, np.exp(-1j*p_phi) ], [ np.exp(1j*p_phi), 0 ] ]" }, aqasm: { - name: "SWAP" + matrix: [ [ 0, "exp(-i*phi)" ], [ "exp(i*phi)", 0] ], + array: "[ [ 0, np.exp(-1j*p_phi) ], [ np.exp(1j*p_phi), 0 ] ]", + params: ["phi"] } } }, - srswap: { - description: "Square root of swap", + gpi2: { + description: "GPi2 gate", matrix: [ - [1,0,0,0], - [0,"0.5 * (1 + i)","0.5 * (1 - i)",0], - [0,"0.5 * (1 - i)","0.5 * (1 + i)",0], - [0,0,0,1] + ["1/sqrt(2)", "(-i*exp(-i*phi))/sqrt(2)"], + ["(-i*exp(i*phi))/sqrt(2)", "1/sqrt(2)"] ], - params: [], + params: ["phi"], drawingInfo: { - connectors: ["box","box"], - label: "√SWP" + connectors: ["box"], + label: "GPi2" }, exportInfo: { quil: { - name: "srswap", - defgate: "DEFGATE srswap:\n 1, 0, 0, 0\n 0, 0.5+0.5i, 0.5-0.5i, 0\n 0, 0.5-0.5i, 0.5+0.5i, 0\n 0, 0, 0, 1" - }, - cirq: { - name: "SWAP**(1/2)" + name: "gpi2", + params: ["phi"], + defgate: "DEFGATE gpi2(%phi):\n 1/SQRT(2), (-i*EXP(-i * %phi)) / SQRT(2)\n (-i*EXP(i * %phi)) / SQRT(2), 1/SQRT(2)" }, pyquil: { - name: "srswap", - array: "[[1,0,0,0],[0,0.5 * (1 + 1j),0.5 * (1 - 1j),0],[0,0.5 * (1 - 1j),0.5 * (1 + 1j),0],[0,0,0,1]]" + name: "gpi2", + params: ["phi"], + array: "[ [ 1/quil_sqrt(2), (-1j*quil_exp(-1j*p_phi))/quil_sqrt(2) ], [ (-1j*quil_exp(1j*p_phi))/quil_sqrt(2), 1/quil_sqrt(2) ] ]" + }, + cirq: { + name: "gpi2" }, quest: { - name: "srswap", - func: "void srswap(Qureg qubits, const int q1, const int q2) {\n" + - " controlledNot(qubits, q2, q1);\n"+ - " rotateY(qubits, q2, M_PI/2);\n"+ - " rotateZ(qubits, q2, M_PI/16);\n"+ - " controlledNot(qubits, q1, q2);\n"+ - " rotateZ(qubits, q1, M_PI/8);\n"+ - " rotateZ(qubits, q2, -M_PI/8);\n"+ - " controlledNot(qubits, q1, q2);\n"+ - " rotateZ(qubits, q2, M_PI/16);\n"+ - " rotateY(qubits, q2, -M_PI/2);\n"+ - " controlledNot(qubits, q2, q1);\n}" + name: "gpi2", + //@TODO add function + func: "TODO" }, qasm: { - equivalent: [ - { name: "u3", params: { theta: "pi/2", phi: "pi/2", lambda: "-1*pi" }, wires: [0]}, - { name: "u3", params: { theta: "pi/2", phi: "-1*pi/2", lambda: "pi" }, wires: [1]}, - { name: "cx", wires: [0, 1]}, - { name: "u3", params: { theta: "pi/4", phi: "-1*pi/2", lambda: "-1*pi/2" }, wires: [0]}, - { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "7*pi/4" }, wires: [1]}, - { name: "cx", wires: [0, 1]}, - { name: "u3", params: { theta: "pi/4", phi: "-1*pi", lambda: "-1*pi/2" }, wires: [0]}, - { name: "u3", params: { theta: "pi/2", phi: "pi", lambda: "pi/2" }, wires: [1]}, - { name: "cx", wires: [0, 1]}, - { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "-3*pi/2" }, wires: [0]}, - { name: "u3", params: { theta: "pi/2", phi: "pi/2", lambda: "0" }, wires: [1]}, - ] + name: "gpi2" }, qiskit: { - equivalent: [ - { name: "u3", params: { theta: "pi/2", phi: "pi/2", lambda: "-1*pi" }, wires: [0]}, - { name: "u3", params: { theta: "pi/2", phi: "-1*pi/2", lambda: "pi" }, wires: [1]}, - { name: "cx", wires: [0, 1]}, - { name: "u3", params: { theta: "pi/4", phi: "-1*pi/2", lambda: "-1*pi/2" }, wires: [0]}, - { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "7*pi/4" }, wires: [1]}, - { name: "cx", wires: [0, 1]}, - { name: "u3", params: { theta: "pi/4", phi: "-1*pi", lambda: "-1*pi/2" }, wires: [0]}, - { name: "u3", params: { theta: "pi/2", phi: "pi", lambda: "pi/2" }, wires: [1]}, - { name: "cx", wires: [0, 1]}, - { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "-3*pi/2" }, wires: [0]}, - { name: "u3", params: { theta: "pi/2", phi: "pi/2", lambda: "0" }, wires: [1]}, - ] + name: "gpi2" }, braket: { name: "unitary", - array: "[[1,0,0,0],[0,0.5 * (1 + 1j),0.5 * (1 - 1j),0],[0,0.5 * (1 - 1j),0.5 * (1 + 1j),0],[0,0,0,1]]" + params: ["phi"], + array: "[ [ 1/np.sqrt(2), (-1j*np.exp(-1j*p_phi))/np.sqrt(2) ], [ (-1j*np.exp(1j*p_phi))/np.sqrt(2), 1/np.sqrt(2) ] ]" }, aqasm: { - name: "SQRTSWAP" + matrix: [ [ "1/sqrt(2)", "(-i*exp(-i*phi))/sqrt(2)" ], [ "(-i*exp(i*phi))/sqrt(2)", "1/sqrt(2)" ] ], + array: "[ [ 1/np.sqrt(2), (-1j*np.exp(-1j*p_phi))/np.sqrt(2) ], [ (-1j*np.exp(1j*p_phi))/np.sqrt(2), 1/np.sqrt(2) ] ]", + params: ["phi"] } } }, - iswap: { - description: "Swaps the state of two qubits, applying a -i phase to q1 when it is in the 1 state and a -i phase to q2 when it is in the 0 state", + vz: { + description: "VirtualZ gate", matrix: [ - [1,0,0,0], - [0,0,"0+i",0], - [0,"0+i",0,0], - [0,0,0,1] + ["exp(-i*theta/2)", 0], + [0, "exp(i*theta/2)"] ], - params: [], + params: ["theta"], drawingInfo: { - connectors: ["box","box"], - label: "iSWP" + connectors: ["box"], + label: "VrtZ" }, exportInfo: { quil: { - name: "ISWAP" - }, - cirq: { - name: "ISWAP" - }, - qasm: { - equivalent: [ - { name: "u3", params: { theta: "pi/2", phi: "-1*pi/2", lambda: "-1*pi" }, wires: [0]}, - { name: "u3", params: { theta: "pi/2", phi: "-1*pi/2", lambda: "pi" }, wires: [1]}, - { name: "cx", wires: [0, 1]}, - { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "3*pi/2" }, wires: [0]}, - { name: "u3", params: { theta: "pi/2", phi: "3*pi/2", lambda: "0" }, wires: [1]}, - { name: "cx", wires: [0, 1]}, - { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "0" }, wires: [0]}, - { name: "u3", params: { theta: "pi", phi: "pi/4", lambda: "-1*pi/4" }, wires: [1]} - ] + name: "vz", + params: ["theta"], + defgate: "DEFGATE vz(%theta):\n EXP(-i * %theta/2), 0\n 0, EXP(-i * %theta/2)" }, - qiskit: { - equivalent: [ - { name: "u3", params: { theta: "pi/2", phi: "-1*pi/2", lambda: "-1*pi" }, wires: [0]}, - { name: "u3", params: { theta: "pi/2", phi: "-1*pi/2", lambda: "pi" }, wires: [1]}, - { name: "cx", wires: [0, 1]}, - { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "3*pi/2" }, wires: [0]}, - { name: "u3", params: { theta: "pi/2", phi: "3*pi/2", lambda: "0" }, wires: [1]}, - { name: "cx", wires: [0, 1]}, - { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "0" }, wires: [0]}, - { name: "u3", params: { theta: "pi", phi: "pi/4", lambda: "-1*pi/4" }, wires: [1]} - ] + pyquil: { + name: "vz", + params: ["theta"], + array: "[ [ quil_exp(-1j*p_theta/2), 0 ], [ 0, quil_exp(1j*p_theta/2) ] ]" }, - braket: { - name: "iswap" + cirq: { + name: "vz" }, - aqasm: { - name: "ISWAP" - } - } - }, - - xy: { - description: "XY gate", - matrix: [ - [1, 0, 0, 0], - [0, "cos(phi / 2)", "i * sin(phi / 2)", 0], - [0, "i * sin(phi / 2)", "cos(phi / 2)", 0], - [0, 0, 0, 1] - ], - params: ["phi"], - drawingInfo: { - connectors: ["box","box"], - label: "XY" - }, - exportInfo: { - quil: { - name: "XY", - "params": [ - "phi" - ] + quest: { + name: "vz", + //@TODO add function + func: "TODO" }, qasm: { - equivalent: [ - { name: "rz", params: { phi: "3*pi/4"}, wires: [0] }, - { name: "rx", params: { theta: "pi/2"}, wires: [0] }, - { name: "rz", params: { phi: "-3*pi/4"}, wires: [1] }, - { name: "rx", params: { theta: "pi/2"}, wires: [1] }, - { name: "cz", wires: [1, 0] }, - { name: "rz", params: { phi: "-1*pi/2"}, wires: [0] }, - { name: "rx", params: { theta: "pi/2"}, wires: [0] }, - { name: "rz", params: { phi: "phi/2"}, wires: [0] }, - { name: "rx", params: { theta: "-1*pi/2"}, wires: [0] }, - { name: "rz", params: { phi: "pi/2"}, wires: [1] }, - { name: "rx", params: { theta: "pi/2"}, wires: [1] }, - { name: "rz", params: { phi: "phi/2"}, wires: [1] }, - { name: "rx", params: { theta: "-1*pi/2"}, wires: [1] }, - { name: "cz", wires: [1, 0] }, - { name: "rz", params: { phi: "-1*pi/2"}, wires: [0] }, - { name: "rx", params: { theta: "pi/2"}, wires: [0] }, - { name: "rz", params: { phi: "pi/4"}, wires: [0] }, - { name: "rz", params: { phi: "-1*pi/2"}, wires: [1] }, - { name: "rx", params: { theta: "-1*pi/2"}, wires: [1] }, - { name: "rz", params: { phi: "3*pi/4"}, wires: [1] }, - ] + name: "vz" }, qiskit: { - equivalent: [ - { name: "rz", params: { phi: "3*pi/4"}, wires: [0] }, - { name: "rx", params: { theta: "pi/2"}, wires: [0] }, - { name: "rz", params: { phi: "-3*pi/4"}, wires: [1] }, - { name: "rx", params: { theta: "pi/2"}, wires: [1] }, - { name: "cz", wires: [1, 0] }, - { name: "rz", params: { phi: "-1*pi/2"}, wires: [0] }, - { name: "rx", params: { theta: "pi/2"}, wires: [0] }, - { name: "rz", params: { phi: "phi/2"}, wires: [0] }, - { name: "rx", params: { theta: "-1*pi/2"}, wires: [0] }, - { name: "rz", params: { phi: "pi/2"}, wires: [1] }, - { name: "rx", params: { theta: "pi/2"}, wires: [1] }, - { name: "rz", params: { phi: "phi/2"}, wires: [1] }, - { name: "rx", params: { theta: "-1*pi/2"}, wires: [1] }, - { name: "cz", wires: [1, 0] }, - { name: "rz", params: { phi: "-1*pi/2"}, wires: [0] }, - { name: "rx", params: { theta: "pi/2"}, wires: [0] }, - { name: "rz", params: { phi: "pi/4"}, wires: [0] }, - { name: "rz", params: { phi: "-1*pi/2"}, wires: [1] }, - { name: "rx", params: { theta: "-1*pi/2"}, wires: [1] }, - { name: "rz", params: { phi: "3*pi/4"}, wires: [1] }, - ] - }, - cirq: { - name: "xy", - params: ["phi"], - array: "[[1, 0, 0, 0], [0, np.cos(p_phi/2), 1j*np.sin(p_phi/2), 0], [0, 1j*np.sin(p_phi/2), np.cos(p_phi/2), 0], [0, 0, 0, 1]]", - notTfqSupported: true + name: "vz" }, braket: { - name: "xy", - params: ["phi"] + name: "unitary", + params: ["theta"], + array: "[ [ np.exp(-1j*p_theta/2), 0 ], [ 0, np.exp(1j*p_theta/2) ] ]" }, aqasm: { - matrix: [[1, 0, 0, 0],[0, "cos(phi / 2)", "i * sin(phi / 2)", 0],[0, "i * sin(phi / 2)", "cos(phi / 2)", 0],[0, 0, 0, 1]], - array: "[[1, 0, 0, 0], [0, np.cos(p_phi/2), 1j*np.sin(p_phi/2), 0], [0, 1j*np.sin(p_phi/2), np.cos(p_phi/2), 0], [0, 0, 0, 1]]", - params: ["phi"] + matrix: [ [ "exp(-i*theta/2)", 0 ], [ 0, "exp(i*theta/2)"] ], + array: "[ [ np.exp(-1j*p_theta/2), 0 ], [ 0, np.exp(1j*p_theta/2) ] ]", + params: ["theta"] } } }, @@ -4795,8 +4683,182 @@ var QuantumCircuit = function(numQubits) { } }, - ms: { - description: "Mølmer-Sørensen gate", + swap: { + description: "Swaps the state of two qubits.", + matrix: [ + [1,0,0,0], + [0,0,1,0], + [0,1,0,0], + [0,0,0,1] + ], + params: [], + drawingInfo: { + connectors: ["x","x"], + label: "SWP" + }, + exportInfo: { + quil: { + name: "SWAP" + }, + cirq: { + name: "SWAP" + }, + quest: { + name: "swap", + func: "void swap(Qureg qubits, const int q1, const int q2) {\n"+ + " controlledNot(qubits, q1, q2);\n" + + " controlledNot(qubits, q2, q1);\n" + + " controlledNot(qubits, q1, q2);\n}" + }, + qsharp: { + name: "SWAP" + }, + quirk: { + name: "Swap" + }, + braket: { + name: "swap" + }, + aqasm: { + name: "SWAP" + } + } + }, + + srswap: { + description: "Square root of swap", + matrix: [ + [1,0,0,0], + [0,"0.5 * (1 + i)","0.5 * (1 - i)",0], + [0,"0.5 * (1 - i)","0.5 * (1 + i)",0], + [0,0,0,1] + ], + params: [], + drawingInfo: { + connectors: ["box","box"], + label: "√SWP" + }, + exportInfo: { + quil: { + name: "srswap", + defgate: "DEFGATE srswap:\n 1, 0, 0, 0\n 0, 0.5+0.5i, 0.5-0.5i, 0\n 0, 0.5-0.5i, 0.5+0.5i, 0\n 0, 0, 0, 1" + }, + cirq: { + name: "SWAP**(1/2)" + }, + pyquil: { + name: "srswap", + array: "[[1,0,0,0],[0,0.5 * (1 + 1j),0.5 * (1 - 1j),0],[0,0.5 * (1 - 1j),0.5 * (1 + 1j),0],[0,0,0,1]]" + }, + quest: { + name: "srswap", + func: "void srswap(Qureg qubits, const int q1, const int q2) {\n" + + " controlledNot(qubits, q2, q1);\n"+ + " rotateY(qubits, q2, M_PI/2);\n"+ + " rotateZ(qubits, q2, M_PI/16);\n"+ + " controlledNot(qubits, q1, q2);\n"+ + " rotateZ(qubits, q1, M_PI/8);\n"+ + " rotateZ(qubits, q2, -M_PI/8);\n"+ + " controlledNot(qubits, q1, q2);\n"+ + " rotateZ(qubits, q2, M_PI/16);\n"+ + " rotateY(qubits, q2, -M_PI/2);\n"+ + " controlledNot(qubits, q2, q1);\n}" + }, + qasm: { + equivalent: [ + { name: "u3", params: { theta: "pi/2", phi: "pi/2", lambda: "-1*pi" }, wires: [0]}, + { name: "u3", params: { theta: "pi/2", phi: "-1*pi/2", lambda: "pi" }, wires: [1]}, + { name: "cx", wires: [0, 1]}, + { name: "u3", params: { theta: "pi/4", phi: "-1*pi/2", lambda: "-1*pi/2" }, wires: [0]}, + { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "7*pi/4" }, wires: [1]}, + { name: "cx", wires: [0, 1]}, + { name: "u3", params: { theta: "pi/4", phi: "-1*pi", lambda: "-1*pi/2" }, wires: [0]}, + { name: "u3", params: { theta: "pi/2", phi: "pi", lambda: "pi/2" }, wires: [1]}, + { name: "cx", wires: [0, 1]}, + { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "-3*pi/2" }, wires: [0]}, + { name: "u3", params: { theta: "pi/2", phi: "pi/2", lambda: "0" }, wires: [1]}, + ] + }, + qiskit: { + equivalent: [ + { name: "u3", params: { theta: "pi/2", phi: "pi/2", lambda: "-1*pi" }, wires: [0]}, + { name: "u3", params: { theta: "pi/2", phi: "-1*pi/2", lambda: "pi" }, wires: [1]}, + { name: "cx", wires: [0, 1]}, + { name: "u3", params: { theta: "pi/4", phi: "-1*pi/2", lambda: "-1*pi/2" }, wires: [0]}, + { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "7*pi/4" }, wires: [1]}, + { name: "cx", wires: [0, 1]}, + { name: "u3", params: { theta: "pi/4", phi: "-1*pi", lambda: "-1*pi/2" }, wires: [0]}, + { name: "u3", params: { theta: "pi/2", phi: "pi", lambda: "pi/2" }, wires: [1]}, + { name: "cx", wires: [0, 1]}, + { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "-3*pi/2" }, wires: [0]}, + { name: "u3", params: { theta: "pi/2", phi: "pi/2", lambda: "0" }, wires: [1]}, + ] + }, + braket: { + name: "unitary", + array: "[[1,0,0,0],[0,0.5 * (1 + 1j),0.5 * (1 - 1j),0],[0,0.5 * (1 - 1j),0.5 * (1 + 1j),0],[0,0,0,1]]" + }, + aqasm: { + name: "SQRTSWAP" + } + } + }, + + iswap: { + description: "Swaps the state of two qubits, applying a -i phase to q1 when it is in the 1 state and a -i phase to q2 when it is in the 0 state", + matrix: [ + [1,0,0,0], + [0,0,"0+i",0], + [0,"0+i",0,0], + [0,0,0,1] + ], + params: [], + drawingInfo: { + connectors: ["box","box"], + label: "iSWP" + }, + exportInfo: { + quil: { + name: "ISWAP" + }, + cirq: { + name: "ISWAP" + }, + qasm: { + equivalent: [ + { name: "u3", params: { theta: "pi/2", phi: "-1*pi/2", lambda: "-1*pi" }, wires: [0]}, + { name: "u3", params: { theta: "pi/2", phi: "-1*pi/2", lambda: "pi" }, wires: [1]}, + { name: "cx", wires: [0, 1]}, + { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "3*pi/2" }, wires: [0]}, + { name: "u3", params: { theta: "pi/2", phi: "3*pi/2", lambda: "0" }, wires: [1]}, + { name: "cx", wires: [0, 1]}, + { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "0" }, wires: [0]}, + { name: "u3", params: { theta: "pi", phi: "pi/4", lambda: "-1*pi/4" }, wires: [1]} + ] + }, + qiskit: { + equivalent: [ + { name: "u3", params: { theta: "pi/2", phi: "-1*pi/2", lambda: "-1*pi" }, wires: [0]}, + { name: "u3", params: { theta: "pi/2", phi: "-1*pi/2", lambda: "pi" }, wires: [1]}, + { name: "cx", wires: [0, 1]}, + { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "3*pi/2" }, wires: [0]}, + { name: "u3", params: { theta: "pi/2", phi: "3*pi/2", lambda: "0" }, wires: [1]}, + { name: "cx", wires: [0, 1]}, + { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "0" }, wires: [0]}, + { name: "u3", params: { theta: "pi", phi: "pi/4", lambda: "-1*pi/4" }, wires: [1]} + ] + }, + braket: { + name: "iswap" + }, + aqasm: { + name: "ISWAP" + } + } + }, + + xx: { + description: "XX gate", matrix: [ ["cos(theta)", 0, 0, "-i*sin(theta)"], @@ -4808,25 +4870,25 @@ var QuantumCircuit = function(numQubits) { ], params: ["theta"], drawingInfo: { - connectors: ["circle","circle"], + connectors: ["box","box"], label: "XX" }, exportInfo: { quil: { - name: "ms", + name: "xx", params: ["theta"], - defgate: "DEFGATE ms(%theta):\n COS(%theta), 0, 0, -i*SIN(%theta)\n 0, COS(%theta), -i*SIN(%theta), 0\n 0, -i*SIN(%theta), COS(%theta), 0\n -i*SIN(%theta), 0, 0, COS(%theta)" + defgate: "DEFGATE xx(%theta):\n COS(%theta), 0, 0, -i*SIN(%theta)\n 0, COS(%theta), -i*SIN(%theta), 0\n 0, -i*SIN(%theta), COS(%theta), 0\n -i*SIN(%theta), 0, 0, COS(%theta)" }, pyquil: { - name: "ms", + name: "xx", params: ["theta"], array: "[ [quil_cos(p_theta), 0, 0, -1j*quil_sin(p_theta)], [0, quil_cos(p_theta), -1j*quil_sin(p_theta), 0], [0, -1j*quil_sin(p_theta), quil_cos(p_theta), 0], [-1j*quil_sin(p_theta), 0, 0, quil_cos(p_theta)] ]" }, cirq: { - name: "ms" + name: "xx" }, quest: { - name: "ms", + name: "xx", //@TODO add function func: "TODO" }, @@ -4862,7 +4924,7 @@ var QuantumCircuit = function(numQubits) { ], params: ["theta"], drawingInfo: { - connectors: ["circle","circle"], + connectors: ["box","box"], label: "YY" }, exportInfo: { @@ -4912,7 +4974,7 @@ var QuantumCircuit = function(numQubits) { ], params: ["theta"], drawingInfo: { - connectors: ["circle","circle"], + connectors: ["box","box"], label: "ZZ" }, exportInfo: { @@ -4935,6 +4997,146 @@ var QuantumCircuit = function(numQubits) { } }, + xy: { + description: "XY gate", + matrix: [ + [1, 0, 0, 0], + [0, "cos(phi / 2)", "i * sin(phi / 2)", 0], + [0, "i * sin(phi / 2)", "cos(phi / 2)", 0], + [0, 0, 0, 1] + ], + params: ["phi"], + drawingInfo: { + connectors: ["box","box"], + label: "XY" + }, + exportInfo: { + quil: { + name: "XY", + "params": [ + "phi" + ] + }, + qasm: { + equivalent: [ + { name: "rz", params: { phi: "3*pi/4"}, wires: [0] }, + { name: "rx", params: { theta: "pi/2"}, wires: [0] }, + { name: "rz", params: { phi: "-3*pi/4"}, wires: [1] }, + { name: "rx", params: { theta: "pi/2"}, wires: [1] }, + { name: "cz", wires: [1, 0] }, + { name: "rz", params: { phi: "-1*pi/2"}, wires: [0] }, + { name: "rx", params: { theta: "pi/2"}, wires: [0] }, + { name: "rz", params: { phi: "phi/2"}, wires: [0] }, + { name: "rx", params: { theta: "-1*pi/2"}, wires: [0] }, + { name: "rz", params: { phi: "pi/2"}, wires: [1] }, + { name: "rx", params: { theta: "pi/2"}, wires: [1] }, + { name: "rz", params: { phi: "phi/2"}, wires: [1] }, + { name: "rx", params: { theta: "-1*pi/2"}, wires: [1] }, + { name: "cz", wires: [1, 0] }, + { name: "rz", params: { phi: "-1*pi/2"}, wires: [0] }, + { name: "rx", params: { theta: "pi/2"}, wires: [0] }, + { name: "rz", params: { phi: "pi/4"}, wires: [0] }, + { name: "rz", params: { phi: "-1*pi/2"}, wires: [1] }, + { name: "rx", params: { theta: "-1*pi/2"}, wires: [1] }, + { name: "rz", params: { phi: "3*pi/4"}, wires: [1] }, + ] + }, + qiskit: { + equivalent: [ + { name: "rz", params: { phi: "3*pi/4"}, wires: [0] }, + { name: "rx", params: { theta: "pi/2"}, wires: [0] }, + { name: "rz", params: { phi: "-3*pi/4"}, wires: [1] }, + { name: "rx", params: { theta: "pi/2"}, wires: [1] }, + { name: "cz", wires: [1, 0] }, + { name: "rz", params: { phi: "-1*pi/2"}, wires: [0] }, + { name: "rx", params: { theta: "pi/2"}, wires: [0] }, + { name: "rz", params: { phi: "phi/2"}, wires: [0] }, + { name: "rx", params: { theta: "-1*pi/2"}, wires: [0] }, + { name: "rz", params: { phi: "pi/2"}, wires: [1] }, + { name: "rx", params: { theta: "pi/2"}, wires: [1] }, + { name: "rz", params: { phi: "phi/2"}, wires: [1] }, + { name: "rx", params: { theta: "-1*pi/2"}, wires: [1] }, + { name: "cz", wires: [1, 0] }, + { name: "rz", params: { phi: "-1*pi/2"}, wires: [0] }, + { name: "rx", params: { theta: "pi/2"}, wires: [0] }, + { name: "rz", params: { phi: "pi/4"}, wires: [0] }, + { name: "rz", params: { phi: "-1*pi/2"}, wires: [1] }, + { name: "rx", params: { theta: "-1*pi/2"}, wires: [1] }, + { name: "rz", params: { phi: "3*pi/4"}, wires: [1] }, + ] + }, + cirq: { + name: "xy", + params: ["phi"], + array: "[[1, 0, 0, 0], [0, np.cos(p_phi/2), 1j*np.sin(p_phi/2), 0], [0, 1j*np.sin(p_phi/2), np.cos(p_phi/2), 0], [0, 0, 0, 1]]", + notTfqSupported: true + }, + braket: { + name: "xy", + params: ["phi"] + }, + aqasm: { + matrix: [[1, 0, 0, 0],[0, "cos(phi / 2)", "i * sin(phi / 2)", 0],[0, "i * sin(phi / 2)", "cos(phi / 2)", 0],[0, 0, 0, 1]], + array: "[[1, 0, 0, 0], [0, np.cos(p_phi/2), 1j*np.sin(p_phi/2), 0], [0, 1j*np.sin(p_phi/2), np.cos(p_phi/2), 0], [0, 0, 0, 1]]", + params: ["phi"] + } + } + }, + + ms: { + description: "Mølmer-Sørensen gate", + matrix: [ + ["1/sqrt(2)", 0, 0, "(-i*exp(-i*(phi0+phi1)))/sqrt(2)"], + + [0, "1/sqrt(2)", "(-i*exp(-i*(phi0-phi1)))/sqrt(2)", 0], + + [0, "(-i*exp(i*(phi0-phi1)))/sqrt(2)", "1/sqrt(2)", 0], + + ["(-i*exp(i*(phi0+phi1)))/sqrt(2)", 0, 0, "1/sqrt(2)"] + ], + params: ["phi0", "phi1"], + drawingInfo: { + connectors: ["box","box"], + label: "MS" + }, + exportInfo: { + quil: { + name: "ms", + params: ["phi0", "phi1"], + defgate: "DEFGATE ms(%phi0, %phi1):\n 1/SQRT(2), 0, 0, (-i*EXP(-i*(%phi0+%phi1)))/SQRT(2)\n 0, 1/SQRT(2), (-i*EXP(-i*(%phi0-%phi1)))/SQRT(2), 0\n 0, (-i*EXP(i*(%phi0-%phi1)))/SQRT(2), 1/SQRT(2), 0\n (-i*EXP(i*(%phi0+%phi1)))/SQRT(2), 0, 0, 1/SQRT(2)" + }, + pyquil: { + name: "ms", + params: ["phi0", "phi1"], + array: "[ [ 1/quil_sqrt(2), 0, 0, (-1j*quil_exp(-1j*(p_phi0+p_phi1)))/quil_sqrt(2) ], [ 0, 1/quil_sqrt(2), (-1j*quil_exp(-1j*(p_phi0-p_phi1)))/quil_sqrt(2), 0 ], [ 0, (-1j*quil_exp(1j*(p_phi0-p_phi1)))/quil_sqrt(2), 1/quil_sqrt(2), 0 ], [ (-1j*quil_exp(1j*(p_phi0+p_phi1)))/quil_sqrt(2), 0, 0, 1/quil_sqrt(2) ] ]" + }, + cirq: { + name: "ms" + }, + quest: { + name: "ms", + //@TODO add function + func: "TODO" + }, + qasm: { + name: "ms" + }, + qiskit: { + name: "ms" + }, + braket: { + name: "unitary", + params: ["phi0", "phi1"], + array: "[ [ 1/np.sqrt(2), 0, 0, (-1j*np.exp(-1j*(p_phi0+p_phi1)))/np.sqrt(2) ], [ 0, 1/np.sqrt(2), (-1j*np.exp(-1j*(p_phi0-p_phi1)))/np.sqrt(2), 0 ], [ 0, (-1j*np.exp(1j*(p_phi0-p_phi1)))/np.sqrt(2), 1/np.sqrt(2), 0 ], [ (-1j*np.exp(1j*(p_phi0+p_phi1)))/np.sqrt(2), 0, 0, 1/np.sqrt(2) ] ]" + }, + aqasm: { + matrix: [["cos(theta)", 0, 0, "-i*sin(theta)"],[0, "cos(theta)", "-i*sin(theta)", 0],[0, "-i*sin(theta)", "cos(theta)", 0],["-i*sin(theta)", 0, 0, "cos(theta)"]], + array: "[ [ 1/np.sqrt(2), 0, 0, (-1j*np.exp(-1j*(p_phi0+p_phi1)))/np.sqrt(2) ], [ 0, 1/np.sqrt(2), (-1j*np.exp(-1j*(p_phi0-p_phi1)))/np.sqrt(2), 0 ], [ 0, (-1j*np.exp(1j*(p_phi0-p_phi1)))/np.sqrt(2), 1/np.sqrt(2), 0 ], [ (-1j*np.exp(1j*(p_phi0+p_phi1)))/np.sqrt(2), 0, 0, 1/np.sqrt(2) ] ]", + params: ["phi0", "phi1"] + } + } + }, + cr2: { description: "Controlled PI/2 rotation over Z-axis", matrix: [ @@ -11024,7 +11226,7 @@ QuantumCircuit.prototype.exportToSVG = function(options) { if(options.customGate) { initSymbol = qubitLetter(wire, numRows); } - svg += "|" + initSymbol + "⟩"; + svg += "|" + initSymbol + "⟩"; svg += ""; svg += "q" + wire + ""; } @@ -112291,4 +112493,4 @@ module.exports.TinyEmitter = E; },{}]},{},[5])(5) }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJsaWIvcWFzbV9pbXBvcnQvUUFTTUltcG9ydC5qcyIsImxpYi9xYXNtX2ltcG9ydC9RQVNNTGV4ZXIuanMiLCJsaWIvcWFzbV9pbXBvcnQvUUFTTUxpc3RlbmVyLmpzIiwibGliL3Fhc21faW1wb3J0L1FBU01QYXJzZXIuanMiLCJsaWIvcXVhbnR1bS1jaXJjdWl0LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9CdWZmZXJlZFRva2VuU3RyZWFtLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9DaGFyU3RyZWFtcy5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvQ29tbW9uVG9rZW5GYWN0b3J5LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9Db21tb25Ub2tlblN0cmVhbS5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvRmlsZVN0cmVhbS5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvSW5wdXRTdHJlYW0uanMiLCJub2RlX21vZHVsZXMvYW50bHI0L0ludGVydmFsU2V0LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9MTDFBbmFseXplci5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvTGV4ZXIuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L1BhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvUGFyc2VyUnVsZUNvbnRleHQuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L1ByZWRpY3Rpb25Db250ZXh0LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9SZWNvZ25pemVyLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9SdWxlQ29udGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvVG9rZW4uanMiLCJub2RlX21vZHVsZXMvYW50bHI0L1V0aWxzLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVROLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVROQ29uZmlnLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVROQ29uZmlnU2V0LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvYXRuL0FUTkRlc2VyaWFsaXplci5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvYXRuL0FUTlNpbXVsYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvYXRuL0FUTlN0YXRlLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVROVHlwZS5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvYXRuL0xleGVyQVROU2ltdWxhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vTGV4ZXJBY3Rpb24uanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2F0bi9MZXhlckFjdGlvbkV4ZWN1dG9yLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vUGFyc2VyQVROU2ltdWxhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vUHJlZGljdGlvbk1vZGUuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2F0bi9TZW1hbnRpY0NvbnRleHQuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2F0bi9UcmFuc2l0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vaW5kZXguanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2RmYS9ERkEuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2RmYS9ERkFTZXJpYWxpemVyLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9kZmEvREZBU3RhdGUuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2RmYS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvZXJyb3IvRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXIuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2Vycm9yL0Vycm9yTGlzdGVuZXIuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2Vycm9yL0Vycm9yU3RyYXRlZ3kuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2Vycm9yL0Vycm9ycy5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvZXJyb3IvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9wb2x5ZmlsbHMvY29kZXBvaW50YXQuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L3BvbHlmaWxscy9mcm9tY29kZXBvaW50LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC90cmVlL1RyZWUuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L3RyZWUvVHJlZXMuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L3RyZWUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9saWIvX2VtcHR5LmpzIiwibm9kZV9tb2R1bGVzL2NvbXBsZXguanMvY29tcGxleC5qcyIsIm5vZGVfbW9kdWxlcy9kZWNpbWFsLmpzL2RlY2ltYWwuanMiLCJub2RlX21vZHVsZXMvZXNjYXBlLWxhdGV4L2Rpc3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZnJhY3Rpb24uanMvZnJhY3Rpb24uanMiLCJub2RlX21vZHVsZXMvamF2YXNjcmlwdC1uYXR1cmFsLXNvcnQvbmF0dXJhbFNvcnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9jb3JlL2NvbmZpZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2NvcmUvY3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvY29yZS9mdW5jdGlvbi9jb25maWcuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9jb3JlL2Z1bmN0aW9uL2RlcHJlY2F0ZWRJbXBvcnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9jb3JlL2Z1bmN0aW9uL2ltcG9ydC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2NvcmUvZnVuY3Rpb24vdHlwZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9hbGxGYWN0b3JpZXNBbnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9jb25maWdSZWFkb25seS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWJzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBY2Nlc3Nvck5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3NoLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBY290LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBY290aC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWNzYy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWNzY2guZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBbmQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FwcGx5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBcHBseVRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXJnLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBcnJheU5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzZWMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzZWNoLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBc2luLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBc2luaC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXNzaWdubWVudE5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0F0YW4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0F0YW4yLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBdGFuaC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXRvbWljTWFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXZvZ2Fkcm8uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JlbGxOdW1iZXJzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCaXRBbmQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JpdE5vdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQml0T3IuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JpdFhvci5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQmxvY2tOb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCb2hyTWFnbmV0b24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JvaHJSYWRpdXMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JvbHR6bWFubi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQm9vbGVhbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2F0YWxhbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2JydC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2VpbC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2hhaW4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NoYWluQ2xhc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NsYXNzaWNhbEVsZWN0cm9uUmFkaXVzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDbG9uZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29sdW1uLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb2x1bW5UcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tYmluYXRpb25zV2l0aFJlcC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tcGFyZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBhcmVUZXh0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21waWxlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21wbGV4LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBvc2l0aW9uLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb25jYXQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbmNhdFRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29uZGl0aW9uYWxOb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb25kdWN0YW5jZVF1YW50dW0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbmouZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbnN0YW50Tm9kZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29zLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb3NoLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb3QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvdGguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvdWxvbWIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NyZWF0ZVVuaXQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Nyb3NzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDc2MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NzY2guZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0N0cmFuc3Bvc2UuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0N1YmUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlZXBFcXVhbC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGVwcmVjYXRlZEV2YWwuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRUeXBlb2YuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRWYXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Rlcml2YXRpdmUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RldC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGV1dGVyb25NYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEaWFnLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEaXN0YW5jZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGl2aWRlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RvdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRG90RGl2aWRlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEb3RNdWx0aXBseS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRG90UG93LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFZmltb3ZGYWN0b3IuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VpZ3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VsZWN0cmljQ29uc3RhbnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VsZWN0cm9uTWFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRWxlbWVudGFyeUNoYXJnZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXF1YWwuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFcXVhbFRleHQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VyZi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXZhbHVhdGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0V4cC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXhwbS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXhwbTEuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0V5ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmFjdG9yaWFsLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGYWxzZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmFyYWRheS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmVybWlDb3VwbGluZy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmlib25hY2NpSGVhcENsYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGaWx0ZXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpbHRlclRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmluZVN0cnVjdHVyZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmlyc3RSYWRpYXRpb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpeC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmxhdHRlbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmxvb3IuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZvckVhY2guZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZvckVhY2hUcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Zvcm1hdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRnJhY3Rpb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzR2FtbWEuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0dhc0NvbnN0YW50LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHY2QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0dldE1hdHJpeERhdGFUeXBlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHcmF2aXRhdGlvbkNvbnN0YW50LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHcmF2aXR5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNIYXJ0cmVlRW5lcmd5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNIYXNOdW1lcmljVmFsdWUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0hlbHAuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0hlbHBDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSHlwb3QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0kuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0lkZW50aXR5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW5kZXguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0luZGV4Tm9kZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW5kZXhUcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0luZmluaXR5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbnRlcnNlY3QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ludi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc05hTi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSXNOdW1lcmljLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1ByaW1lLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1plcm8uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0tsZGl2ZXJnZW5jZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzS2xpdHppbmcuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0tyb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xOMTAuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xOMi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTE9HMTBFLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMT0cyRS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTGFyZ2VyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMYXJnZXJFcS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTGNtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMZWZ0U2hpZnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvZy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTG9nMTAuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvZzFwLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMb2cyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMb3NjaG1pZHQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xzb2x2ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTHVwLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMdXNvbHZlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYWQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hZ25ldGljQ29uc3RhbnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hZ25ldGljRmx1eFF1YW50dW0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hcC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWFwVHJhbnNmb3JtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hdHJpeENsYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYXguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01heFRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWVhbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWVhblRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWVkaWFuLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNaW4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01pblRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTW9kLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2xhck1hc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01vbGFyTWFzc0MxMi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTW9sYXJQbGFuY2tDb25zdGFudC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTW9sYXJWb2x1bWUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc011bHRpbm9taWFsLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05hTi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTmV1dHJvbk1hc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05vcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05vdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnRoUm9vdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnRoUm9vdHMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc051Y2xlYXJNYWduZXRvbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnVsbC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnVtYmVyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOdW1lcmljLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPYmplY3ROb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPbmVzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPcGVyYXRvck5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc09yLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BhcnNlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJzZXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BhcnNlckNsYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJ0aXRpb25TZWxlY3QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Blcm11dGF0aW9ucy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGhpLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQaS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGlja1JhbmRvbS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrQ2hhcmdlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQbGFuY2tDb25zdGFudC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrTGVuZ3RoLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQbGFuY2tNYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQbGFuY2tUZW1wZXJhdHVyZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrVGltZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUG93LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQcmludC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUHJvZC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUHJvdG9uTWFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1F1YW50aWxlU2VxLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNRdWFudHVtT2ZDaXJjdWxhdGlvbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmFuZG9tLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5kb21JbnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JhbmdlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZUNsYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZU5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JhbmdlVHJhbnNmb3JtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYXRpb25hbGl6ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JlZHVjZWRQbGFuY2tDb25zdGFudC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmVsYXRpb25hbE5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JlcGxhY2VyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSZXNoYXBlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSZXNpemUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Jlc3VsdFNldC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmV2aXZlci5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmlnaHRBcml0aFNoaWZ0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSaWdodExvZ1NoaWZ0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSb3VuZC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUm93LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSb3dUcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1J5ZGJlcmcuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NRUlQxXzIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NRUlQyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTYWNrdXJUZXRyb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZWMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NlY2guZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NlY29uZFJhZGlhdGlvbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0Q2FydGVzaWFuLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXREaWZmZXJlbmNlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXREaXN0aW5jdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0SW50ZXJzZWN0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXRJc1N1YnNldC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0TXVsdGlwbGljaXR5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXRQb3dlcnNldC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0U2l6ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0U3ltRGlmZmVyZW5jZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0VW5pb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpZ24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpbXBsaWZ5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTaW4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpbmguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NsdS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU21hbGxlci5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU21hbGxlckVxLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTb3J0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGFDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3BhcnNlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3BlZWRPZkxpZ2h0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGxpdFVuaXQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NxcnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NxcnRtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcXVhcmUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NxdWVlemUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N0ZC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3RkVHJhbnNmb3JtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdGVmYW5Cb2x0em1hbm4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N0aXJsaW5nUzIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N0cmluZy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdWJzZXRUcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdW0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N1bVRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVGFuLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUYW5oLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUYXUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Rob21zb25Dcm9zc1NlY3Rpb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1RvLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUcmFjZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVHJhbnNwb3NlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUcnVlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUeXBlT2YuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVbmFyeVBsdXMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VuZXF1YWwuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVW5pdEZ1bmN0aW9uLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVcHBlcmNhc2VFLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVcHBlcmNhc2VQaS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVXNvbHZlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNWYWN1dW1JbXBlZGFuY2UuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1ZhcmlhbmNlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNWYXJpYW5jZVRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVmVyc2lvbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzV2Vha01peGluZ0FuZ2xlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNXaWVuRGlzcGxhY2VtZW50LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNYZ2NkLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNYb3IuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1plcm9zLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcHJlY2F0ZWRBbnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9pbXB1cmVGdW5jdGlvbnNBbnkuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvbWFpbkFueS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L3B1cmVGdW5jdGlvbnNBbnkuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvdHlwZUNoZWNrcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Vycm9yL0FyZ3VtZW50c0Vycm9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXJyb3IvRGltZW5zaW9uRXJyb3IuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lcnJvci9JbmRleEVycm9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9IZWxwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvSW5maW5pdHkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvTE4xMC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy9MTjIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvTE9HMTBFLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL0xPRzJFLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL05hTi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy9TUVJUMV8yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL1NRUlQyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvZmFsc2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvaS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy9udWxsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL3BoaS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy9waS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy90YXUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvdHJ1ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy92ZXJzaW9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RydWN0aW9uL2JpZ251bWJlci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9ib29sZWFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RydWN0aW9uL2NvbXBsZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdHJ1Y3Rpb24vY3JlYXRlVW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9mcmFjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9tYXRyaXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdHJ1Y3Rpb24vbnVtYmVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RydWN0aW9uL3NwYXJzZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9zcGxpdFVuaXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdHJ1Y3Rpb24vc3RyaW5nLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RydWN0aW9uL3VuaXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb3JlL2NvbmZpZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvcmUvaW1wb3J0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29yZS90eXBlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2VtYmVkZGVkRG9jcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FsZ2VicmEvZGVyaXZhdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FsZ2VicmEvbHNvbHZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYWxnZWJyYS9sdXAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hbGdlYnJhL2x1c29sdmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hbGdlYnJhL3FyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYWxnZWJyYS9yYXRpb25hbGl6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FsZ2VicmEvc2ltcGxpZnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hbGdlYnJhL3NsdS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FsZ2VicmEvdXNvbHZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9hYnMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2FkZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvY2JydC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvY2VpbC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvY3ViZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvZGl2aWRlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9kb3REaXZpZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2RvdE11bHRpcGx5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9kb3RQb3cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2V4cC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvZXhwbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvZXhwbTEuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2ZpeC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvZmxvb3IuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2djZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvaHlwb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2xjbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9sb2cxMC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMXAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2xvZzIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL21vZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvbXVsdGlwbHkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL25vcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3RzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9wb3cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL3JvdW5kLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9zaWduLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9zcXJ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9zcXJ0bS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvc3F1YXJlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9zdWJ0cmFjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvdW5hcnlNaW51cy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvdW5hcnlQbHVzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy94Z2NkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYml0d2lzZS9iaXRBbmQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9iaXR3aXNlL2JpdE5vdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2JpdHdpc2UvYml0T3IuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9iaXR3aXNlL2JpdFhvci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2JpdHdpc2UvbGVmdFNoaWZ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYml0d2lzZS9yaWdodEFyaXRoU2hpZnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9iaXR3aXNlL3JpZ2h0TG9nU2hpZnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL2JlbGxOdW1iZXJzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vY29tYmluYXRvcmljcy9jYXRhbGFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vY29tYmluYXRvcmljcy9jb21wb3NpdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2NvbWJpbmF0b3JpY3Mvc3RpcmxpbmdTMi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2NvbXBsZXgvYXJnLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vY29tcGxleC9jb25qLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vY29tcGxleC9pbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2NvbXBsZXgvcmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9leHByZXNzaW9uL2V2YWx1YXRlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vZXhwcmVzc2lvbi9oZWxwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vZ2VvbWV0cnkvZGlzdGFuY2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9nZW9tZXRyeS9pbnRlcnNlY3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9sb2dpY2FsL2FuZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2xvZ2ljYWwvbm90LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbG9naWNhbC9vci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2xvZ2ljYWwveG9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2NvbHVtbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9jb25jYXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvY3Jvc3MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvY3RyYW5zcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9kZXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvZGlhZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9kb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvZWlncy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9maWx0ZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvZmxhdHRlbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9mb3JFYWNoLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2dldE1hdHJpeERhdGFUeXBlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2lkZW50aXR5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2ludi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9rcm9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L21hcC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9vbmVzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3BhcnRpdGlvblNlbGVjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9yYW5nZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9yZXNoYXBlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3Jlc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9yb3cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9zb3J0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3NxdWVlemUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvc3Vic2V0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3RyYWNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3RyYW5zcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC96ZXJvcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9uc1dpdGhSZXAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9wcm9iYWJpbGl0eS9mYWN0b3JpYWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9wcm9iYWJpbGl0eS9nYW1tYS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2tsZGl2ZXJnZW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L211bHRpbm9taWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcHJvYmFiaWxpdHkvcGVybXV0YXRpb25zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcHJvYmFiaWxpdHkvcGlja1JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbUludC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZU5hdHVyYWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL2NvbXBhcmVUZXh0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcmVsYXRpb25hbC9kZWVwRXF1YWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcmVsYXRpb25hbC9lcXVhbFRleHQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL2xhcmdlci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3JlbGF0aW9uYWwvbGFyZ2VyRXEuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL3NtYWxsZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL3NtYWxsZXJFcS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3JlbGF0aW9uYWwvdW5lcXVhbC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NldC9zZXRDYXJ0ZXNpYW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zZXQvc2V0RGlmZmVyZW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NldC9zZXREaXN0aW5jdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NldC9zZXRJbnRlcnNlY3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zZXQvc2V0SXNTdWJzZXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zZXQvc2V0TXVsdGlwbGljaXR5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc2V0L3NldFBvd2Vyc2V0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc2V0L3NldFNpemUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zZXQvc2V0U3ltRGlmZmVyZW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NldC9zZXRVbmlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NwZWNpYWwvZXJmLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc3RhdGlzdGljcy9tYWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL21heC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWVhbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWVkaWFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc3RhdGlzdGljcy9taW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL21vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL3Byb2QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL3F1YW50aWxlU2VxLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc3RhdGlzdGljcy9zdGQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL3N1bS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3N0YXRpc3RpY3MvdmFyaWFuY2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY29zaC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY290LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3RoLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjc2MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNzY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXNlYy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2VjaC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2luLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzaW5oLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2F0YW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbjIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvY29zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Nvc2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvY290LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NvdGguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvY3NjLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NzY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2VjLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NlY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2luLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvdGFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi91bml0cy90by5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3V0aWxzL2Nsb25lLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvZm9ybWF0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaGFzTnVtZXJpY1ZhbHVlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaXNJbnRlZ2VyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaXNOYU4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi91dGlscy9pc05lZ2F0aXZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaXNOdW1lcmljLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaXNQb3NpdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3V0aWxzL2lzUHJpbWUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi91dGlscy9pc1plcm8uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi91dGlscy9udW1lcmljLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvdHlwZU9mLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9mdW5jdGlvbi9jb21waWxlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9mdW5jdGlvbi9ldmFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9mdW5jdGlvbi9ldmFsdWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZnVuY3Rpb24vaGVscC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZnVuY3Rpb24vcGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9rZXl3b3Jkcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS9BY2Nlc3Nvck5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvQXJyYXlOb2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL0Fzc2lnbm1lbnROb2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL0Jsb2NrTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS9Db25kaXRpb25hbE5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvQ29uc3RhbnROb2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL0Z1bmN0aW9uQXNzaWdubWVudE5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvRnVuY3Rpb25Ob2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL0luZGV4Tm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS9Ob2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL09iamVjdE5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvT3BlcmF0b3JOb2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL1BhcmVudGhlc2lzTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS9SYW5nZU5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvUmVsYXRpb25hbE5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvU3ltYm9sTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS91dGlscy9hY2Nlc3MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvdXRpbHMvYXNzaWduLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9vcGVyYXRvcnMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3BhcnNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vYXBwbHkudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vY29sdW1uLnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL2NvbmNhdC50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS9maWx0ZXIudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vZm9yRWFjaC50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS9pbmRleC50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS9tYXAudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vbWF4LnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL21lYW4udHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vbWluLnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL3JhbmdlLnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL3Jvdy50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS9zdGQudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vc3Vic2V0LnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL3N1bS50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS91dGlscy9jb21waWxlSW5saW5lRXhwcmVzc2lvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL3V0aWxzL2Vycm9yVHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vdmFyaWFuY2UudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZmFjdG9yaWVzQW55LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9kZWNvbXBvc2l0aW9uL2x1cC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvZGVjb21wb3NpdGlvbi9xci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvZGVjb21wb3NpdGlvbi9zbHUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL2Rlcml2YXRpdmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3JhdGlvbmFsaXplLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zaW1wbGlmeS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc2ltcGxpZnkvcmVzb2x2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc2ltcGxpZnkvc2ltcGxpZnlDb25zdGFudC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc2ltcGxpZnkvc2ltcGxpZnlDb3JlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zaW1wbGlmeS91dGlsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zb2x2ZXIvbHNvbHZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zb2x2ZXIvbHVzb2x2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc29sdmVyL3Vzb2x2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc29sdmVyL3V0aWxzL3NvbHZlVmFsaWRhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzQW1kLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zcGFyc2UvY3NDb3VudHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc0Rmcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzRXRyZWUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc0ZrZWVwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zcGFyc2UvY3NGbGlwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zcGFyc2UvY3NJcHZlYy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzTGVhZi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzTHUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc01hcmsuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc01hcmtlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzUGVybXV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzUG9zdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzUmVhY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc1Nwc29sdmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc1Nxci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzVGRmcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzVW5mbGlwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9hYnMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2FkZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvYWRkU2NhbGFyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9jYnJ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9jZWlsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9jdWJlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9kaXZpZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2RpdmlkZVNjYWxhci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90RGl2aWRlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9kb3RNdWx0aXBseS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90UG93LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9leHAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2V4cG0xLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9maXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2Zsb29yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9nY2QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2h5cG90LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9sY20uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2xvZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMTAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2xvZzFwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9sb2cyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9tb2QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL211bHRpcGx5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9tdWx0aXBseVNjYWxhci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvbm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvbnRoUm9vdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvbnRoUm9vdHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3Bvdy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvcm91bmQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3NpZ24uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3NxcnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3NxdWFyZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvc3VidHJhY3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3VuYXJ5TWludXMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3VuYXJ5UGx1cy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMveGdjZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2JpdHdpc2UvYml0QW5kLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYml0d2lzZS9iaXROb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9iaXR3aXNlL2JpdE9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYml0d2lzZS9iaXRYb3IuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9iaXR3aXNlL2xlZnRTaGlmdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2JpdHdpc2UvcmlnaHRBcml0aFNoaWZ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYml0d2lzZS9yaWdodExvZ1NoaWZ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vY29tYmluYXRvcmljcy9iZWxsTnVtYmVycy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2NvbWJpbmF0b3JpY3MvY2F0YWxhbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2NvbWJpbmF0b3JpY3MvY29tcG9zaXRpb24uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL3N0aXJsaW5nUzIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9jb21wbGV4L2FyZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2NvbXBsZXgvY29uai5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2NvbXBsZXgvaW0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9jb21wbGV4L3JlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vZ2VvbWV0cnkvZGlzdGFuY2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9nZW9tZXRyeS9pbnRlcnNlY3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9sb2dpY2FsL2FuZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2xvZ2ljYWwvbm90LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbG9naWNhbC9vci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2xvZ2ljYWwveG9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2FwcGx5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2NvbHVtbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9jb25jYXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvY3Jvc3MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvY3RyYW5zcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9kZXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvZGlhZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9kb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvZWlncy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9leHBtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2V5ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9maWx0ZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvZmxhdHRlbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9mb3JFYWNoLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2dldE1hdHJpeERhdGFUeXBlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2lkZW50aXR5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2ludi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9rcm9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L21hcC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9vbmVzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3BhcnRpdGlvblNlbGVjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9yYW5nZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9yZXNoYXBlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3Jlc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9yb3cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9zb3J0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3NxcnRtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3NxdWVlemUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvc3Vic2V0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3RyYWNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3RyYW5zcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC96ZXJvcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9uc1dpdGhSZXAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9mYWN0b3JpYWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9nYW1tYS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2tsZGl2ZXJnZW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L211bHRpbm9taWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcHJvYmFiaWxpdHkvcGVybXV0YXRpb25zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcHJvYmFiaWxpdHkvcGlja1JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbUludC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3V0aWwvcmFuZG9tTWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcHJvYmFiaWxpdHkvdXRpbC9zZWVkZWRSTkcuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9yZWxhdGlvbmFsL2NvbXBhcmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9yZWxhdGlvbmFsL2NvbXBhcmVOYXR1cmFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcmVsYXRpb25hbC9jb21wYXJlVGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZGVlcEVxdWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcmVsYXRpb25hbC9lcXVhbC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZXF1YWxTY2FsYXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsVGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvbGFyZ2VyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcmVsYXRpb25hbC9sYXJnZXJFcS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvc21hbGxlci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvc21hbGxlckVxLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcmVsYXRpb25hbC91bmVxdWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc2V0L3NldENhcnRlc2lhbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3NldC9zZXREaWZmZXJlbmNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc2V0L3NldERpc3RpbmN0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc2V0L3NldEludGVyc2VjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3NldC9zZXRJc1N1YnNldC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3NldC9zZXRNdWx0aXBsaWNpdHkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zZXQvc2V0UG93ZXJzZXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zZXQvc2V0U2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3NldC9zZXRTeW1EaWZmZXJlbmNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc2V0L3NldFVuaW9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3BlY2lhbC9lcmYuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zdGF0aXN0aWNzL21hZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWF4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3RhdGlzdGljcy9tZWFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3RhdGlzdGljcy9tZWRpYW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zdGF0aXN0aWNzL21pbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbW9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3MvcHJvZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3MvcXVhbnRpbGVTZXEuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zdGF0aXN0aWNzL3N0ZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3Mvc3VtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3RhdGlzdGljcy91dGlscy9pbXByb3ZlRXJyb3JNZXNzYWdlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3RhdGlzdGljcy92YXJpYW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0cmluZy9mb3JtYXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zdHJpbmcvcHJpbnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY29zaC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY290LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3RoLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjc2MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNzY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXNlYy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2VjaC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2luLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzaW5oLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2F0YW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbjIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvY29zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Nvc2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvY290LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NvdGguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvY3NjLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NzY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2VjLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NlY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2luLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvdGFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91bml0L3RvLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdXRpbHMvY2xvbmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9oYXNOdW1lcmljVmFsdWUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9pc0ludGVnZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9pc05hTi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3V0aWxzL2lzTmVnYXRpdmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9pc051bWVyaWMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9pc1Bvc2l0aXZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdXRpbHMvaXNQcmltZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3V0aWxzL2lzWmVyby5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3V0aWxzL251bWVyaWMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy90eXBlT2YuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9qc29uL3JlcGxhY2VyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvanNvbi9yZXZpdmVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvcGxhaW4vbnVtYmVyL2FyaXRobWV0aWMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvYml0d2lzZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3BsYWluL251bWJlci9jb21iaW5hdGlvbnMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvcGxhaW4vbnVtYmVyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvcGxhaW4vbnVtYmVyL2xvZ2ljYWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvcHJvYmFiaWxpdHkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvcmVsYXRpb25hbC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3BsYWluL251bWJlci90cmlnb25vbWV0cnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvdXRpbHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2JpZ251bWJlci9CaWdOdW1iZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2JpZ251bWJlci9mdW5jdGlvbi9iaWdudW1iZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2Jvb2xlYW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2NoYWluL0NoYWluLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9jaGFpbi9mdW5jdGlvbi9jaGFpbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvY29tcGxleC9Db21wbGV4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9jb21wbGV4L2Z1bmN0aW9uL2NvbXBsZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2ZyYWN0aW9uL0ZyYWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9mcmFjdGlvbi9mdW5jdGlvbi9mcmFjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L0RlbnNlTWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvRmlib25hY2NpSGVhcC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L0ltbXV0YWJsZURlbnNlTWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvTWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvTWF0cml4SW5kZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC9SYW5nZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L1NwYS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L1NwYXJzZU1hdHJpeC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L2Z1bmN0aW9uL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvZnVuY3Rpb24vbWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvZnVuY3Rpb24vc3BhcnNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDEuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA2LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDcuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wOC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbnVtYmVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9yZXN1bHRzZXQvUmVzdWx0U2V0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL3VuaXQvVW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvdW5pdC9mdW5jdGlvbi9jcmVhdGVVbml0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS91bml0L2Z1bmN0aW9uL3NwbGl0VW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvdW5pdC9mdW5jdGlvbi91bml0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS91bml0L3BoeXNpY2FsQ29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvYXJyYXkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9iaWdudW1iZXIvYml0d2lzZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL2JpZ251bWJlci9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9iaWdudW1iZXIvZm9ybWF0dGVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvYmlnbnVtYmVyL25lYXJseUVxdWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvY29sbGVjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL2NvbXBsZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9jdXN0b21zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvZW1pdHRlci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL2ZhY3RvcnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9mdW5jdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL2lzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvbGF0ZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9sb2cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9ub29wLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvbnVtYmVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvcG9seWZpbGxzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvcHJvZHVjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL3N0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3ZlcnNpb24uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL21haW4vZXM1L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NlZWQtcmFuZG9tL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3RpbnktZW1pdHRlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy90eXBlZC1mdW5jdGlvbi90eXBlZC1mdW5jdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcGtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNudEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwM1pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDanFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25KQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOWJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9LQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0VUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1bkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3V0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9yREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvaUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM1RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcHZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7O0FDQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNTNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN3dKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsMEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNVlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVpRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2puQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5c0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6MkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvVUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDek1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4UEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4UEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL1NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6ckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeFNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25VQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzE1RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcGFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25QQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNubkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2wzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdHpCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzduQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNTZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2YkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25UQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1UkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3REQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2phQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3NkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzWUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9RQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdlRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMVZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RnREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzNEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3ZUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25QQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25mQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbHJCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25jQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBOzs7QUNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUM3S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiJnZW5lcmF0ZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsIi8qKlxuICogQGxpY2Vuc2VcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFBldGFyIEtvcnBvbmFpxIcgPHBldGFyLmtvcnBvbmFpY0BnbWFpbC5jb20+XG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UsIGZvdW5kIGluXG4gKiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG52YXIgYW50bHI0ID0gcmVxdWlyZSgnYW50bHI0L2luZGV4Jyk7XG52YXIgUUFTTUxleGVyID0gcmVxdWlyZSgnLi9RQVNNTGV4ZXInKTtcbnZhciBRQVNNUGFyc2VyID0gcmVxdWlyZSgnLi9RQVNNUGFyc2VyJyk7XG52YXIgUUFTTUxpc3RlbmVyID0gcmVxdWlyZSgnLi9RQVNNTGlzdGVuZXInKS5RQVNNTGlzdGVuZXI7XG5cbnZhciBFcnJvckxpc3RlbmVyID0gZnVuY3Rpb24oZXJyb3JzKSB7XG4gIGFudGxyNC5lcnJvci5FcnJvckxpc3RlbmVyLmNhbGwodGhpcyk7XG4gIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkVycm9yTGlzdGVuZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShhbnRscjQuZXJyb3IuRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUpO1xuRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFcnJvckxpc3RlbmVyO1xuRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuc3ludGF4RXJyb3IgPSBmdW5jdGlvbihyZWMsIHN5bSwgbGluZSwgY29sLCBtc2csIGUpIHtcbiAgdGhpcy5lcnJvcnMucHVzaCh7XG4gIFx0bGluZTogbGluZSxcbiAgXHRjb2w6IGNvbCxcbiAgXHRtc2c6IG1zZ1xuICB9KTtcbn07XG5cbnZhciBRQ1FBU01MaXN0ZW5lciA9IGZ1bmN0aW9uKGNpcmN1aXQsIGNvbXBhdGliaWxpdHlNb2RlKSB7XG4gICAgdGhpcy5jaXJjdWl0ID0gY2lyY3VpdDtcbiAgICB0aGlzLnFyZWdNYXAgPSB7fTtcbiAgICB0aGlzLmNvbmRpdGlvbiA9IHt9O1xuICAgIHRoaXMuY29tcGF0aWJpbGl0eU1vZGUgPSBjb21wYXRpYmlsaXR5TW9kZTtcblxuICAgIFFBU01MaXN0ZW5lci5jYWxsKHRoaXMpOyAvLyBpbmhlcml0IGRlZmF1bHQgbGlzdGVuZXJcbiAgICByZXR1cm4gdGhpcztcbn07XG5cbnZhciBRQVNNSW1wb3J0ID0gZnVuY3Rpb24oY2lyY3VpdCwgaW5wdXQsIGVycm9yQ2FsbGJhY2ssIGNvbXBhdGliaWxpdHlNb2RlKSB7XG5cdHZhciBjaGFycyA9IG5ldyBhbnRscjQuSW5wdXRTdHJlYW0oaW5wdXQpO1xuXHR2YXIgbGV4ZXIgPSBuZXcgUUFTTUxleGVyLlFBU01MZXhlcihjaGFycyk7XG5cdHZhciB0b2tlbnMgID0gbmV3IGFudGxyNC5Db21tb25Ub2tlblN0cmVhbShsZXhlcik7XG5cdHZhciBwYXJzZXIgPSBuZXcgUUFTTVBhcnNlci5RQVNNUGFyc2VyKHRva2Vucyk7XG5cdHBhcnNlci5idWlsZFBhcnNlVHJlZXMgPSB0cnVlO1xuXG5cdHBhcnNlci5yZW1vdmVFcnJvckxpc3RlbmVycygpO1xuXHR2YXIgZXJyb3JzID0gW107XG5cdHZhciBlcnJvckxpc3RlbmVyID0gbmV3IEVycm9yTGlzdGVuZXIoZXJyb3JzKTtcblx0cGFyc2VyLmFkZEVycm9yTGlzdGVuZXIoZXJyb3JMaXN0ZW5lcik7XG5cblx0dmFyIHRyZWUgPSBwYXJzZXIubWFpbnByb2coKTsgICBcblx0dmFyIFFBU00gPSBuZXcgUUNRQVNNTGlzdGVuZXIoY2lyY3VpdCwgY29tcGF0aWJpbGl0eU1vZGUpO1xuXHRhbnRscjQudHJlZS5QYXJzZVRyZWVXYWxrZXIuREVGQVVMVC53YWxrKFFBU00sIHRyZWUpO1xuXHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0ZXJyb3JDYWxsYmFjayhlcnJvcnMpO1xuXHR9XG59O1xuXG4gXG4vLyBpbmhlcml0IGRlZmF1bHQgbGlzdGVuZXJcblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUUFTTUxpc3RlbmVyLnByb3RvdHlwZSk7XG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBRQ1FBU01MaXN0ZW5lcjtcblxuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUubnVtUWJpdCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgbnVtID0gMDtcblx0Zm9yKHZhciByZWcgaW4gdGhpcy5xcmVnTWFwKSB7XG5cdFx0bnVtICs9IHRoaXMucXJlZ01hcFtyZWddO1xuXHR9XG5cdHJldHVybiBudW07XG59O1xuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUucXJlZ0Jhc2UgPSBmdW5jdGlvbihxcmVnKSB7XG5cdHZhciBiYXNlID0gMDtcblx0Zm9yKHZhciByZWcgaW4gdGhpcy5xcmVnTWFwKSB7XG5cdFx0aWYocmVnID09IHFyZWcpIHtcblx0XHRcdHJldHVybiBiYXNlO1xuXHRcdH1cblx0XHRiYXNlICs9IHRoaXMucXJlZ01hcFtyZWddO1xuXHR9XG5cdHJldHVybiBiYXNlO1xufTtcblxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLnFyZWdMZW4gPSBmdW5jdGlvbihyZWcpIHtcblx0cmV0dXJuIHRoaXMucXJlZ01hcFtyZWddIHx8IDA7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI21haW5wcm9nLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyTWFpbnByb2cgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjbWFpbnByb2cuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdE1haW5wcm9nID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3N0YXRlbWVudC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclN0YXRlbWVudCA9IGZ1bmN0aW9uKGN0eCkge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0Ly8gY29uZGl0aW9uXG5cdHZhciBuYW1lID0gY3R4LmdldENoaWxkQ291bnQoKSA/IGN0eC5nZXRDaGlsZCgwKS5nZXRUZXh0KCkgOiBcIlwiO1xuXHRpZihuYW1lID09IFwiaWZcIikge1xuXHRcdHRoaXMuY29uZGl0aW9uID0ge1xuXHRcdFx0Y3JlZzogY3R4LklEKCkuZ2V0VGV4dCgpLFxuXHRcdFx0dmFsdWU6IHBhcnNlSW50KGN0eC5JTlQoKS5nZXRUZXh0KCkpXG5cdFx0fVxuXHR9XG5cblx0Ly8gc3Vicm91dGluZSAoZ2F0ZSBkZWNsYXJhdGlvbilcblx0aWYoY3R4LmdhdGVkZWNsKCkpIHtcblx0XHR2YXIgZ2F0ZWRlY2wgPSBjdHguZ2F0ZWRlY2woKTtcblx0XHR2YXIgYXJncyA9IFtdO1xuXHRcdHZhciBwYXJhbXMgPSBbXTtcblxuXHRcdHZhciBjY291bnQgPSBnYXRlZGVjbC5nZXRDaGlsZENvdW50KCk7XG5cdFx0aWYoY2NvdW50ID4gMiAmJiBnYXRlZGVjbC5nZXRDaGlsZCgyKS5JRCkge1xuXHRcdFx0Ly8gbm8gcGFyYW1zXG5cdFx0XHRhcmdzID0gZ2F0ZWRlY2wuZ2V0Q2hpbGQoMikuSUQoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYoY2NvdW50ID4gMyAmJiBnYXRlZGVjbC5nZXRDaGlsZCgzKS5JRCkge1xuXHRcdFx0XHRwYXJhbXMgPSBnYXRlZGVjbC5nZXRDaGlsZCgzKS5JRCgpO1xuXHRcdFx0fVxuXHRcdFx0aWYoY2NvdW50ID4gNSAmJiBnYXRlZGVjbC5nZXRDaGlsZCg1KS5JRCkge1xuXHRcdFx0XHQvLyBubyBwYXJhbXNcblx0XHRcdFx0YXJncyA9IGdhdGVkZWNsLmdldENoaWxkKDUpLklEKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMuY2lyY3VpdCk7XG5cdFx0dmFyIGN1c3RvbUdhdGUgPSBuZXcgcHJvdG8uY29uc3RydWN0b3IoYXJncy5sZW5ndGgpO1xuXHRcdHZhciBjdXN0b21HYXRlTmFtZSA9IGdhdGVkZWNsLklEKCkuZ2V0VGV4dCgpO1xuXHRcdHZhciBjdXN0b21HYXRlUmVncyA9IFtdO1xuXG5cdFx0YXJncy5tYXAoZnVuY3Rpb24ocmVnKSB7XG5cdFx0XHRjdXN0b21HYXRlUmVncy5wdXNoKHJlZy5nZXRUZXh0KCkpO1xuXHRcdH0pO1xuXG5cdFx0cGFyYW1zLm1hcChmdW5jdGlvbihwYXIpIHtcblx0XHRcdHZhciBwYXJOYW1lID0gcGFyLmdldFRleHQoKTtcblx0XHRcdGN1c3RvbUdhdGUucGFyYW1zLnB1c2gocGFyTmFtZSk7XG5cdFx0fSk7XG5cblx0XHRpZihjdHguZ29wbGlzdCgpKSB7XG5cdFx0XHR2YXIgZ29wbGlzdCA9IGN0eC5nb3BsaXN0KCk7XG5cdFx0XHRnb3BsaXN0LnVvcCgpLm1hcChmdW5jdGlvbih1b3ApIHtcblx0XHRcdFx0dmFyIGdhdGVOYW1lID0gdW9wLklEKCkgPyB1b3AuSUQoKS5nZXRUZXh0KCkgOiBcIlwiO1xuXHRcdFx0XHRpZihnYXRlTmFtZSkge1xuXHRcdFx0XHRcdHZhciBpZGxpc3QgPSB1b3AuYW55bGlzdCgpID8gdW9wLmFueWxpc3QoKS5pZGxpc3QoKSA6IG51bGw7XG5cdFx0XHRcdFx0dmFyIG1peGVkbGlzdCA9IHVvcC5hbnlsaXN0KCkgPyB1b3AuYW55bGlzdCgpLm1peGVkbGlzdCgpIDogbnVsbDtcblx0XHRcdFx0XHR2YXIgZXhwbGlzdCA9IHVvcC5leHBsaXN0KCk7XG5cblxuXHRcdFx0XHRcdHN3aXRjaChnYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBcIkNYXCI6IGdhdGVOYW1lID0gXCJjeFwiOyBicmVhaztcblx0XHRcdFx0XHRcdGNhc2UgXCJVXCI6IGdhdGVOYW1lID0gXCJ1M1wiOyBicmVhaztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZighc2VsZi5jaXJjdWl0LmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdICYmICFzZWxmLmNpcmN1aXQuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdKSB7XG5cdFx0XHRcdFx0XHQvLyBmaW5kIGdhdGUgYnkgcWFzbSBuYW1lXG5cdFx0XHRcdFx0XHRmb3IodmFyIHRtcE5hbWUgaW4gc2VsZi5jaXJjdWl0LmJhc2ljR2F0ZXMpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHRtcERlZiA9IHNlbGYuY2lyY3VpdC5iYXNpY0dhdGVzW3RtcE5hbWVdO1xuXHRcdFx0XHRcdFx0XHRpZih0bXBEZWYuZXhwb3J0SW5mbyAmJiB0bXBEZWYuZXhwb3J0SW5mby5xYXNtICYmIHRtcERlZi5leHBvcnRJbmZvLnFhc20ubmFtZSAmJiB0bXBEZWYuZXhwb3J0SW5mby5xYXNtLm5hbWUgPT0gZ2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRnYXRlTmFtZSA9IHRtcE5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Ly8gbmV3ZXIgdmVyc2lvbnMgb2YgcWlza2l0IGV4cG9ydHMgdG8gcWFzbSB3aXRoIGdhdGUgbmFtZXMgdW5kZWZpbmVkIGJ5IHFhc20gMi4wIGRlZmluaXRpb24uLi5cblx0XHRcdFx0XHRcdFx0aWYodG1wRGVmLmV4cG9ydEluZm8gJiYgdG1wRGVmLmV4cG9ydEluZm8ucWlza2l0ICYmIHRtcERlZi5leHBvcnRJbmZvLnFpc2tpdC5uYW1lICYmIHRtcERlZi5leHBvcnRJbmZvLnFpc2tpdC5uYW1lID09IGdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0Z2F0ZU5hbWUgPSB0bXBOYW1lO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cblx0XHRcdFx0XHR2YXIgcGFyYW1zID0ge307XG5cdFx0XHRcdFx0aWYoZXhwbGlzdCAmJiBleHBsaXN0LmV4cCgpKSB7XG5cdFx0XHRcdFx0XHR2YXIgZ2F0ZURlZiA9IHNlbGYuY2lyY3VpdC5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0XHRcdGlmKCFnYXRlRGVmKSB7XG5cdFx0XHRcdFx0XHRcdGdhdGVEZWYgPSBzZWxmLmNpcmN1aXQuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBwYXJhbUxpc3QgPSBleHBsaXN0LmV4cCgpO1xuXHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1EZWYgPSBnYXRlRGVmLnBhcmFtcyB8fCBbXTtcblx0XHRcdFx0XHRcdFx0cGFyYW1MaXN0Lm1hcChmdW5jdGlvbihwYXJhbUl0ZW0sIHBhcmFtSW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1WYWx1ZSA9IHBhcmFtSXRlbS5nZXRUZXh0KCk7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IHBhcmFtRGVmLmxlbmd0aCA+PSBwYXJhbUluZGV4ID8gcGFyYW1EZWZbcGFyYW1JbmRleF0gOiBcIlwiO1xuXHRcdFx0XHRcdFx0XHRcdGlmKHBhcmFtTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1zW3BhcmFtTmFtZV0gPSBwYXJhbVZhbHVlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIG9wdGlvbnMgPSB7IHBhcmFtczogcGFyYW1zIH07XG5cblxuXHRcdFx0XHRcdHZhciB3aXJlcyA9IFtdO1xuXG5cdFx0XHRcdFx0aWYoaWRsaXN0KSB7XG5cdFx0XHRcdFx0XHR2YXIgY291bnQgPSBpZGxpc3QuSUQoKS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuXHRcdFx0XHRcdFx0XHR3aXJlcy5wdXNoKGN1c3RvbUdhdGVSZWdzLmluZGV4T2YoaWRsaXN0LklEKClbaV0uZ2V0VGV4dCgpKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYobWl4ZWRsaXN0KSB7XG5cdFx0XHRcdFx0XHQvLyA/XG5cdFx0XHRcdFx0fVxuXG4vKlxuXHRcdFx0XHRcdGlmKCFzZWxmLmNvbXBhdGliaWxpdHlNb2RlKSB7XG5cdFx0XHRcdFx0XHRzd2l0Y2goZ2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcInJ6XCI6IHtcblx0XHRcdFx0XHRcdFx0XHRnYXRlTmFtZSA9IFwidTFcIjtcblx0XHRcdFx0XHRcdFx0XHRpZihvcHRpb25zICYmIG9wdGlvbnMucGFyYW1zICYmIG9wdGlvbnMucGFyYW1zLnBoaSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5wYXJhbXMubGFtYmRhID0gb3B0aW9ucy5wYXJhbXMucGhpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIG9wdGlvbnMucGFyYW1zLnBoaTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH07IGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cbiovXG5cdFx0XHRcdFx0dmFyIGV4dGVybmFsID0gc2VsZi5jaXJjdWl0LmN1c3RvbUdhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0XHRpZihleHRlcm5hbCkge1xuXHRcdFx0XHRcdFx0Y3VzdG9tR2F0ZS5yZWdpc3RlckdhdGUoZ2F0ZU5hbWUsIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZXh0ZXJuYWwpKSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y3VzdG9tR2F0ZS5hZGRHYXRlKGdhdGVOYW1lLCAtMSwgd2lyZXMsIG9wdGlvbnMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHR0aGlzLmNpcmN1aXQucmVnaXN0ZXJHYXRlKGN1c3RvbUdhdGVOYW1lLCBjdXN0b21HYXRlLnNhdmUoZmFsc2UpKTtcblx0fVxufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNzdGF0ZW1lbnQuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdFN0YXRlbWVudCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN2ZXJzaW9uLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyVmVyc2lvbiA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN2ZXJzaW9uLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRWZXJzaW9uID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2RlY2wuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJEZWNsID0gZnVuY3Rpb24oY3R4KSB7XG5cdHN3aXRjaChjdHguZ2V0Q2hpbGQoMCkuZ2V0VGV4dCgpKSB7XG5cdFx0Y2FzZSBcInFyZWdcIjogdGhpcy5xcmVnTWFwW2N0eC5nZXRDaGlsZCgxKS5nZXRUZXh0KCldID0gcGFyc2VJbnQoY3R4LmdldENoaWxkKDMpLmdldFRleHQoKSk7IGJyZWFrO1xuXHRcdGNhc2UgXCJjcmVnXCI6IHRoaXMuY2lyY3VpdC5jcmVhdGVDcmVnKGN0eC5nZXRDaGlsZCgxKS5nZXRUZXh0KCksIHBhcnNlSW50KGN0eC5nZXRDaGlsZCgzKS5nZXRUZXh0KCkpKTsgYnJlYWs7XG5cdH1cdFxufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNkZWNsLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXREZWNsID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2dhdGVkZWNsLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyR2F0ZWRlY2wgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZ2F0ZWRlY2wuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdEdhdGVkZWNsID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2dvcGxpc3QuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJHb3BsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2dvcGxpc3QuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdEdvcGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3FvcC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclFvcCA9IGZ1bmN0aW9uKGN0eCkge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cdHZhciBjb25kaXRpb24gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY29uZGl0aW9uKSk7XG5cdHRoaXMuY29uZGl0aW9uID0ge307XG5cblx0dmFyIG5hbWUgPSBjdHguZ2V0Q2hpbGRDb3VudCgpID8gY3R4LmdldENoaWxkKDApLmdldFRleHQoKSA6IFwiXCI7XG5cblx0aWYobmFtZSA9PSBcInJlc2V0XCIpIHtcblx0XHR2YXIgcXJlZyA9IFwiXCI7XG5cdFx0dmFyIHFiaXQgPSAtMTtcblx0XHR2YXIgY291bnQgPSBjdHguYXJndW1lbnQoKS5sZW5ndGg7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0XHRcdHZhciBhcmcgPSBjdHguYXJndW1lbnQoKVtpXTtcblx0XHRcdGlmKGkgPT0gMCkge1xuXHRcdFx0XHRxcmVnID0gYXJnLklEKCkuZ2V0VGV4dCgpO1xuXHRcdFx0XHRxYml0ID0gYXJnLklOVCgpID8gcGFyc2VJbnQoYXJnLklOVCgpLmdldFRleHQoKSkgOiAtMTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZihxcmVnKSB7XG5cdFx0XHR2YXIgbnVtQml0cyA9IHNlbGYucXJlZ0xlbihxcmVnKTtcblx0XHRcdGlmKHFiaXQgPCAwKSB7XG5cdFx0XHRcdC8vXG5cdFx0XHRcdC8vIGFyZ3VtZW50IGlzIGVudGlyZSByZWdpc3RlclxuXHRcdFx0XHQvL1xuXHRcdFx0XHRmb3IodmFyIHggPSAwOyB4IDwgbnVtQml0czsgeCsrKSB7XG5cdFx0XHRcdFx0c2VsZi5jaXJjdWl0LmFkZEdhdGUoXCJyZXNldFwiLCAtMSwgeCArIHNlbGYucXJlZ0Jhc2UocXJlZyksIHsgY29uZGl0aW9uOiBjb25kaXRpb24gfHwge30gfSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vXG5cdFx0XHRcdC8vIGJvdGggYXJndW1lbnRzIGFyZSBzaW5nbGUgYml0c1xuXHRcdFx0XHQvL1xuXHRcdFx0XHRzZWxmLmNpcmN1aXQuYWRkR2F0ZShcInJlc2V0XCIsIC0xLCBxYml0ICsgc2VsZi5xcmVnQmFzZShxcmVnKSwgeyBjb25kaXRpb246IGNvbmRpdGlvbiB8fCB7fSB9ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYobmFtZSA9PSBcIm1lYXN1cmVcIikge1xuXHRcdHZhciBxcmVnID0gXCJcIjtcblx0XHR2YXIgcWJpdCA9IC0xO1xuXHRcdHZhciBjcmVnID0gXCJcIjtcblx0XHR2YXIgY2JpdCA9IC0xO1xuXHRcdHZhciBjb3VudCA9IGN0eC5hcmd1bWVudCgpLmxlbmd0aDtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGN0eC5hcmd1bWVudCgpW2ldO1xuXHRcdFx0aWYoaSA9PSAwKSB7XG5cdFx0XHRcdHFyZWcgPSBhcmcuSUQoKS5nZXRUZXh0KCk7XG5cdFx0XHRcdHFiaXQgPSBhcmcuSU5UKCkgPyBwYXJzZUludChhcmcuSU5UKCkuZ2V0VGV4dCgpKSA6IC0xO1xuXHRcdFx0fVxuXHRcdFx0aWYoaSA9PSAxKSB7XG5cdFx0XHRcdGNyZWcgPSBhcmcuSUQoKS5nZXRUZXh0KCk7XG5cdFx0XHRcdGNiaXQgPSBhcmcuSU5UKCkgPyBwYXJzZUludChhcmcuSU5UKCkuZ2V0VGV4dCgpKSA6IC0xO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmKHFyZWcgJiYgY3JlZykge1xuXHRcdFx0dmFyIG51bUJpdHMgPSBzZWxmLnFyZWdMZW4ocXJlZyk7XG5cdFx0XHRpZihxYml0IDwgMCAmJiBjYml0IDwgMCkge1xuXHRcdFx0XHQvL1xuXHRcdFx0XHQvLyBib3RoIGFyZ3VtZW50cyBhcmUgZW50aXJlIHJlZ2lzdGVyc1xuXHRcdFx0XHQvL1xuXHRcdFx0XHRmb3IodmFyIHggPSAwOyB4IDwgbnVtQml0czsgeCsrKSB7XG5cdFx0XHRcdFx0c2VsZi5jaXJjdWl0LmFkZEdhdGUoXCJtZWFzdXJlXCIsIC0xLCB4ICsgc2VsZi5xcmVnQmFzZShxcmVnKSwgeyBjcmVnOiB7IG5hbWU6IGNyZWcsIGJpdDogeCB9LCBjb25kaXRpb246IGNvbmRpdGlvbiB8fCB7fSB9ICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYocWJpdCA+PSAwICYmIGNiaXQgPj0gMCkge1xuXHRcdFx0XHRcdC8vXG5cdFx0XHRcdFx0Ly8gYm90aCBhcmd1bWVudHMgYXJlIHNpbmdsZSBiaXRzXG5cdFx0XHRcdFx0Ly9cblx0XHRcdFx0XHRzZWxmLmNpcmN1aXQuYWRkR2F0ZShcIm1lYXN1cmVcIiwgLTEsIHFiaXQgKyBzZWxmLnFyZWdCYXNlKHFyZWcpLCB7IGNyZWc6IHsgbmFtZTogY3JlZywgYml0OiBjYml0IH0sIGNvbmRpdGlvbjogY29uZGl0aW9uIHx8IHt9IH0gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZihxYml0ID49IDAgJiYgY2JpdCA8IDApIHtcblx0XHRcdFx0XHRcdC8vXG5cdFx0XHRcdFx0XHQvLyBxYml0IGlzIHNpbmdsZSwgY3JlZyBpcyBlbnRpcmUgcmVnaXN0ZXJcblx0XHRcdFx0XHRcdC8vXG5cdFx0XHRcdFx0XHRmb3IodmFyIHggPSAwOyB4IDwgbnVtQml0czsgeCsrKSB7XG5cdFx0XHRcdFx0XHRcdHNlbGYuY2lyY3VpdC5hZGRHYXRlKFwibWVhc3VyZVwiLCAtMSwgcWJpdCArIHNlbGYucXJlZ0Jhc2UocXJlZyksIHsgY3JlZzogeyBuYW1lOiBjcmVnLCBiaXQ6IHggfSwgY29uZGl0aW9uOiBjb25kaXRpb24gfHwge30gfSApO1xuXHRcdFx0XHRcdFx0fVx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHQvL1xuXHRcdFx0XHRcdFx0Ly8gcWJpdCBpcyBlbnRpcmUgcmVnaXN0ZXIsIGNyZWcgaXMgc2luZ2xlIGJpdFxuXHRcdFx0XHRcdFx0Ly9cblx0XHRcdFx0XHRcdGZvcih2YXIgeCA9IDA7IHggPCBudW1CaXRzOyB4KyspIHtcblx0XHRcdFx0XHRcdFx0c2VsZi5jaXJjdWl0LmFkZEdhdGUoXCJtZWFzdXJlXCIsIC0xLCB4ICsgc2VsZi5xcmVnQmFzZShxcmVnKSwgeyBjcmVnOiB7IG5hbWU6IGNyZWcsIGJpdDogY2JpdCB9LCBjb25kaXRpb246IGNvbmRpdGlvbiB8fCB7fSB9ICk7XG5cdFx0XHRcdFx0XHR9XHRcdFx0XHRcdFx0XG5cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR2YXIgdW9wID0gY3R4LnVvcCgpO1xuXHRpZih1b3AgJiYgdW9wLklEKCkpIHtcblx0XHR2YXIgZ2F0ZU5hbWUgPSB1b3AuSUQoKS5nZXRUZXh0KCk7XG5cdFx0dmFyIGlkbGlzdCA9IHVvcC5hbnlsaXN0KCkgPyB1b3AuYW55bGlzdCgpLmlkbGlzdCgpIDogbnVsbDtcblx0XHR2YXIgbWl4ZWRsaXN0ID0gdW9wLmFueWxpc3QoKSA/IHVvcC5hbnlsaXN0KCkubWl4ZWRsaXN0KCkgOiBudWxsO1xuXHRcdHZhciBleHBsaXN0ID0gdW9wLmV4cGxpc3QoKTtcblxuXHRcdHN3aXRjaChnYXRlTmFtZSkge1xuXHRcdFx0Y2FzZSBcIkNYXCI6IGdhdGVOYW1lID0gXCJjeFwiOyBicmVhaztcblx0XHRcdGNhc2UgXCJVXCI6IGdhdGVOYW1lID0gXCJ1M1wiOyBicmVhaztcblx0XHR9XG5cblx0XHRpZighc2VsZi5jaXJjdWl0LmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdICYmICFzZWxmLmNpcmN1aXQuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdKSB7XG5cdFx0XHQvLyBmaW5kIGdhdGUgYnkgcWFzbSBuYW1lXG5cdFx0XHRmb3IodmFyIHRtcE5hbWUgaW4gc2VsZi5jaXJjdWl0LmJhc2ljR2F0ZXMpIHtcblx0XHRcdFx0dmFyIHRtcERlZiA9IHNlbGYuY2lyY3VpdC5iYXNpY0dhdGVzW3RtcE5hbWVdO1xuXHRcdFx0XHRpZih0bXBEZWYuZXhwb3J0SW5mbyAmJiB0bXBEZWYuZXhwb3J0SW5mby5xYXNtICYmIHRtcERlZi5leHBvcnRJbmZvLnFhc20ubmFtZSAmJiB0bXBEZWYuZXhwb3J0SW5mby5xYXNtLm5hbWUgPT0gZ2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRnYXRlTmFtZSA9IHRtcE5hbWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gbmV3ZXIgdmVyc2lvbnMgb2YgcWlza2l0IGV4cG9ydHMgdG8gcWFzbSB3aXRoIGdhdGUgbmFtZXMgdW5kZWZpbmVkIGJ5IHFhc20gMi4wIGRlZmluaXRpb24uLi5cblx0XHRcdFx0aWYodG1wRGVmLmV4cG9ydEluZm8gJiYgdG1wRGVmLmV4cG9ydEluZm8ucWlza2l0ICYmIHRtcERlZi5leHBvcnRJbmZvLnFpc2tpdC5uYW1lICYmIHRtcERlZi5leHBvcnRJbmZvLnFpc2tpdC5uYW1lID09IGdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0Z2F0ZU5hbWUgPSB0bXBOYW1lO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIHBhcmFtcyA9IHt9O1xuXHRcdGlmKGV4cGxpc3QgJiYgZXhwbGlzdC5leHAoKSkge1xuXHRcdFx0dmFyIGdhdGVEZWYgPSBzZWxmLmNpcmN1aXQuYmFzaWNHYXRlc1tnYXRlTmFtZV07XG5cdFx0XHRpZighZ2F0ZURlZikge1xuXHRcdFx0XHRnYXRlRGVmID0gc2VsZi5jaXJjdWl0LmN1c3RvbUdhdGVzW2dhdGVOYW1lXTtcblx0XHRcdH1cblx0XHRcdGlmKGdhdGVEZWYpIHtcblx0XHRcdFx0dmFyIHBhcmFtTGlzdCA9IGV4cGxpc3QuZXhwKCk7XG5cdFx0XHRcdHZhciBwYXJhbURlZiA9IGdhdGVEZWYucGFyYW1zIHx8IFtdO1xuXHRcdFx0XHRwYXJhbUxpc3QubWFwKGZ1bmN0aW9uKHBhcmFtSXRlbSwgcGFyYW1JbmRleCkge1xuXHRcdFx0XHRcdHZhciBwYXJhbVZhbHVlID0gcGFyYW1JdGVtLmdldFRleHQoKTtcblx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gcGFyYW1EZWYubGVuZ3RoID49IHBhcmFtSW5kZXggPyBwYXJhbURlZltwYXJhbUluZGV4XSA6IFwiXCI7XG5cdFx0XHRcdFx0aWYocGFyYW1OYW1lKSB7XG5cdFx0XHRcdFx0XHRwYXJhbXNbcGFyYW1OYW1lXSA9IHBhcmFtVmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgb3B0aW9ucyA9IHsgcGFyYW1zOiBwYXJhbXMsIGNvbmRpdGlvbjogY29uZGl0aW9uIHx8IHt9IH07XG5cblx0XHRpZihpZGxpc3QpIHtcblx0XHRcdC8vXG5cdFx0XHQvLyBhcmd1bWVudHMgYXJlIGVudGlyZSByZWdpc3RlcnNcblx0XHRcdC8vICAgZXhhbXBsZTogY3ggcSxyO1xuXHRcdFx0Ly9cblx0XHRcdHZhciBudW1CaXRzID0gc2VsZi5xcmVnTGVuKGlkbGlzdC5JRCgpWzBdLmdldFRleHQoKSk7XG5cdFx0XHRmb3IodmFyIHggPSAwOyB4IDwgbnVtQml0czsgeCsrKSB7XG5cdFx0XHRcdHZhciBhcmdzID0gW107XG5cdFx0XHRcdHZhciBjb3VudCA9IGlkbGlzdC5JRCgpLmxlbmd0aDtcblx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0XHRcdFx0XHRhcmdzLnB1c2goeyByZWc6IGlkbGlzdC5JRCgpW2ldLmdldFRleHQoKSwgYml0OiB4IH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIHdpcmVzID0gW107XG5cdFx0XHRcdGFyZ3MubWFwKGZ1bmN0aW9uKGEpIHtcblx0XHRcdFx0XHR3aXJlcy5wdXNoKGEuYml0ICsgc2VsZi5xcmVnQmFzZShhLnJlZykpO1xuXHRcdFx0XHR9KTtcbi8qXG5cdFx0XHRcdGlmKCFzZWxmLmNvbXBhdGliaWxpdHlNb2RlKSB7XG5cdFx0XHRcdFx0c3dpdGNoKGdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwicnpcIjoge1xuXHRcdFx0XHRcdFx0XHRnYXRlTmFtZSA9IFwidTFcIjtcblx0XHRcdFx0XHRcdFx0aWYob3B0aW9ucyAmJiBvcHRpb25zLnBhcmFtcyAmJiBvcHRpb25zLnBhcmFtcy5waGkpIHtcblx0XHRcdFx0XHRcdFx0XHRvcHRpb25zLnBhcmFtcy5sYW1iZGEgPSBvcHRpb25zLnBhcmFtcy5waGk7XG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIG9wdGlvbnMucGFyYW1zLnBoaTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG4qL1xuXHRcdFx0XHRzZWxmLmNpcmN1aXQuYWRkR2F0ZShnYXRlTmFtZSwgLTEsIHdpcmVzLCBvcHRpb25zKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBhcmd1bWVudHMgYXJlIHFiaXRzIG9yIG1peGVkXG5cdFx0aWYobWl4ZWRsaXN0KSB7XG5cdFx0XHRpZihtaXhlZGxpc3QuSUQoKS5sZW5ndGggIT0gbWl4ZWRsaXN0LklOVCgpLmxlbmd0aCkge1xuXHRcdFx0XHQvLyBcblx0XHRcdFx0Ly8gVE9ETzogbWl4ZWQgcWJpdHMgYW5kIGVudGlyZSByZWdpc3RlcnNcblx0XHRcdFx0Ly8gICAgICAgZXhhbXBsZTogY3ggcSxyWzBdO1xuXHRcdFx0XHQvL1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly9cblx0XHRcdFx0Ly8gcWJpdHMsIGZvciBleGFtcGxlOiBjeCBxWzBdLHJbMF07XG5cdFx0XHRcdC8vXG5cdFx0XHRcdHZhciBhcmdzID0gW107XG5cdFx0XHRcdHZhciBjb3VudCA9IG1peGVkbGlzdC5JRCgpLmxlbmd0aDtcblx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNvdW50OyBpKyspIHtcblx0XHRcdFx0XHRhcmdzLnB1c2goeyByZWc6IG1peGVkbGlzdC5JRCgpW2ldLmdldFRleHQoKSwgYml0OiBwYXJzZUludChtaXhlZGxpc3QuSU5UKClbaV0uZ2V0VGV4dCgpKSB9KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciB3aXJlcyA9IFtdO1xuXHRcdFx0XHRhcmdzLm1hcChmdW5jdGlvbihhKSB7XG5cdFx0XHRcdFx0d2lyZXMucHVzaChhLmJpdCArIHNlbGYucXJlZ0Jhc2UoYS5yZWcpKTtcblx0XHRcdFx0fSk7XG4vKlxuXHRcdFx0XHRpZighc2VsZi5jb21wYXRpYmlsaXR5TW9kZSkge1xuXHRcdFx0XHRcdHN3aXRjaChnYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0Y2FzZSBcInJ6XCI6IHtcblx0XHRcdFx0XHRcdFx0Z2F0ZU5hbWUgPSBcInUxXCI7XG5cdFx0XHRcdFx0XHRcdGlmKG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJhbXMgJiYgb3B0aW9ucy5wYXJhbXMucGhpKSB7XG5cdFx0XHRcdFx0XHRcdFx0b3B0aW9ucy5wYXJhbXMubGFtYmRhID0gb3B0aW9ucy5wYXJhbXMucGhpO1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBvcHRpb25zLnBhcmFtcy5waGk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07IGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuKi9cblx0XHRcdFx0c2VsZi5jaXJjdWl0LmFkZEdhdGUoZ2F0ZU5hbWUsIC0xLCB3aXJlcywgb3B0aW9ucyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3FvcC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0UW9wID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3VvcC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclVvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN1b3AuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdFVvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNhbnlsaXN0LlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyQW55bGlzdCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNhbnlsaXN0LlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRBbnlsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2lkbGlzdC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlcklkbGlzdCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNpZGxpc3QuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdElkbGlzdCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNtaXhlZGxpc3QuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJNaXhlZGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjbWl4ZWRsaXN0LlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRNaXhlZGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjYXJndW1lbnQuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJBcmd1bWVudCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNhcmd1bWVudC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0QXJndW1lbnQgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZXhwbGlzdC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckV4cGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZXhwbGlzdC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0RXhwbGlzdCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNleHAuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJFeHAgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZXhwLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRFeHAgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjdW5hcnlvcC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclVuYXJ5b3AgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjdW5hcnlvcC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0VW5hcnlvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRQVNNSW1wb3J0O1xuIiwiLy8gR2VuZXJhdGVkIGZyb20gUUFTTS5nNCBieSBBTlRMUiA0LjcuMVxuLy8ganNoaW50IGlnbm9yZTogc3RhcnRcbnZhciBhbnRscjQgPSByZXF1aXJlKCdhbnRscjQvaW5kZXgnKTtcblxuXG52YXIgc2VyaWFsaXplZEFUTiA9IFtcIlxcdTAwMDNcXHU2MDhiXFx1YTcyYVxcdTgxMzNcXHViOWVkXFx1NDE3Y1xcdTNiZTdcXHU3Nzg2XFx1NTk2NFwiLFxuICAgIFwiXFx1MDAwMi1cXHUwMTI0XFxiXFx1MDAwMVxcdTAwMDRcXHUwMDAyXFx0XFx1MDAwMlxcdTAwMDRcXHUwMDAzXFx0XFx1MDAwM1xcdTAwMDRcIixcbiAgICBcIlxcdTAwMDRcXHRcXHUwMDA0XFx1MDAwNFxcdTAwMDVcXHRcXHUwMDA1XFx1MDAwNFxcdTAwMDZcXHRcXHUwMDA2XFx1MDAwNFxcdTAwMDdcXHRcIixcbiAgICBcIlxcdTAwMDdcXHUwMDA0XFxiXFx0XFxiXFx1MDAwNFxcdFxcdFxcdFxcdTAwMDRcXG5cXHRcXG5cXHUwMDA0XFx1MDAwYlxcdFxcdTAwMGJcXHUwMDA0XCIsXG4gICAgXCJcXGZcXHRcXGZcXHUwMDA0XFxyXFx0XFxyXFx1MDAwNFxcdTAwMGVcXHRcXHUwMDBlXFx1MDAwNFxcdTAwMGZcXHRcXHUwMDBmXFx1MDAwNFxcdTAwMTBcIixcbiAgICBcIlxcdFxcdTAwMTBcXHUwMDA0XFx1MDAxMVxcdFxcdTAwMTFcXHUwMDA0XFx1MDAxMlxcdFxcdTAwMTJcXHUwMDA0XFx1MDAxM1xcdFxcdTAwMTNcIixcbiAgICBcIlxcdTAwMDRcXHUwMDE0XFx0XFx1MDAxNFxcdTAwMDRcXHUwMDE1XFx0XFx1MDAxNVxcdTAwMDRcXHUwMDE2XFx0XFx1MDAxNlxcdTAwMDRcXHUwMDE3XCIsXG4gICAgXCJcXHRcXHUwMDE3XFx1MDAwNFxcdTAwMThcXHRcXHUwMDE4XFx1MDAwNFxcdTAwMTlcXHRcXHUwMDE5XFx1MDAwNFxcdTAwMWFcXHRcXHUwMDFhXCIsXG4gICAgXCJcXHUwMDA0XFx1MDAxYlxcdFxcdTAwMWJcXHUwMDA0XFx1MDAxY1xcdFxcdTAwMWNcXHUwMDA0XFx1MDAxZFxcdFxcdTAwMWRcXHUwMDA0XFx1MDAxZVwiLFxuICAgIFwiXFx0XFx1MDAxZVxcdTAwMDRcXHUwMDFmXFx0XFx1MDAxZlxcdTAwMDQgXFx0IFxcdTAwMDQhXFx0IVxcdTAwMDRcXFwiXFx0XFxcIlxcdTAwMDQjXCIsXG4gICAgXCJcXHQjXFx1MDAwNCRcXHQkXFx1MDAwNCVcXHQlXFx1MDAwNCZcXHQmXFx1MDAwNFxcJ1xcdFxcJ1xcdTAwMDQoXFx0KFxcdTAwMDQpXFx0KVxcdTAwMDRcIixcbiAgICBcIipcXHQqXFx1MDAwNCtcXHQrXFx1MDAwNCxcXHQsXFx1MDAwM1xcdTAwMDJcXHUwMDAzXFx1MDAwMlxcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwNFwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDRcXHUwMDAzXFx1MDAwNVxcdTAwMDNcXHUwMDA1XFx1MDAwM1xcdTAwMDZcXHUwMDAzXFx1MDAwNlxcdTAwMDNcXHUwMDA3XCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwN1xcdTAwMDNcXHUwMDA3XFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcdFxcdTAwMDNcXHRcXHUwMDAzXCIsXG4gICAgXCJcXHRcXHUwMDAzXFx0XFx1MDAwM1xcdFxcdTAwMDNcXHRcXHUwMDAzXFx0XFx1MDAwM1xcdFxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcblxcdTAwMDNcIixcbiAgICBcIlxcblxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcblxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcIixcbiAgICBcIlxcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1wiLFxuICAgIFwiXFxmXFx1MDAwM1xcZlxcdTAwMDNcXGZcXHUwMDAzXFxmXFx1MDAwM1xcZlxcdTAwMDNcXHJcXHUwMDAzXFxyXFx1MDAwM1xcdTAwMGVcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDBlXFx1MDAwM1xcdTAwMGZcXHUwMDAzXFx1MDAwZlxcdTAwMDNcXHUwMDBmXFx1MDAwM1xcdTAwMGZcXHUwMDAzXFx1MDAwZlxcdTAwMDNcIixcbiAgICBcIlxcdTAwMTBcXHUwMDAzXFx1MDAxMFxcdTAwMDNcXHUwMDEwXFx1MDAwM1xcdTAwMTBcXHUwMDAzXFx1MDAxMFxcdTAwMDNcXHUwMDExXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAxMVxcdTAwMDNcXHUwMDEyXFx1MDAwM1xcdTAwMTJcXHUwMDAzXFx1MDAxMlxcdTAwMDNcXHUwMDEyXFx1MDAwM1xcdTAwMTJcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDEyXFx1MDAwM1xcdTAwMTJcXHUwMDAzXFx1MDAxMlxcdTAwMDNcXHUwMDEzXFx1MDAwM1xcdTAwMTNcXHUwMDAzXFx1MDAxM1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMTRcXHUwMDAzXFx1MDAxNFxcdTAwMDNcXHUwMDE0XFx1MDAwM1xcdTAwMTRcXHUwMDAzXFx1MDAxNFxcdTAwMDNcXHUwMDE0XFx1MDAwM1wiLFxuICAgIFwiXFx1MDAxNVxcdTAwMDNcXHUwMDE1XFx1MDAwM1xcdTAwMTZcXHUwMDAzXFx1MDAxNlxcdTAwMDNcXHUwMDE2XFx1MDAwM1xcdTAwMTdcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDE3XFx1MDAwM1xcdTAwMThcXHUwMDAzXFx1MDAxOFxcdTAwMDNcXHUwMDE5XFx1MDAwM1xcdTAwMTlcXHUwMDAzXFx1MDAxYVxcdTAwMDNcIixcbiAgICBcIlxcdTAwMWFcXHUwMDAzXFx1MDAxYlxcdTAwMDNcXHUwMDFiXFx1MDAwM1xcdTAwMWNcXHUwMDAzXFx1MDAxY1xcdTAwMDNcXHUwMDFkXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAxZFxcdTAwMDNcXHUwMDFkXFx1MDAwM1xcdTAwMWRcXHUwMDAzXFx1MDAxZVxcdTAwMDNcXHUwMDFlXFx1MDAwM1xcdTAwMWVcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDFlXFx1MDAwM1xcdTAwMWZcXHUwMDAzXFx1MDAxZlxcdTAwMDNcXHUwMDFmXFx1MDAwM1xcdTAwMWZcXHUwMDAzIFxcdTAwMDNcIixcbiAgICBcIiBcXHUwMDAzIFxcdTAwMDMgXFx1MDAwMyFcXHUwMDAzIVxcdTAwMDMhXFx1MDAwM1xcXCJcXHUwMDAzXFxcIlxcdTAwMDNcXFwiXFx1MDAwM1xcXCJcIixcbiAgICBcIlxcdTAwMDNcXFwiXFx1MDAwMyNcXHUwMDAzI1xcdTAwMDMjXFx1MDAwMyRcXHUwMDAzJFxcdTAwMDMkXFx1MDAwMyRcXHUwMDAzJFxcdTAwMDNcIixcbiAgICBcIiRcXHUwMDAzJFxcdTAwMDUkXFx1MDBlMVxcbiRcXHUwMDAzJVxcdTAwMDMlXFx1MDAwMyVcXHUwMDA2JVxcdTAwZTZcXG4lXFxyJVxcdTAwMGVcIixcbiAgICBcIiVcXHUwMGU3XFx1MDAwMyZcXHUwMDAzJlxcdTAwMDMmXFx1MDAwNiZcXHUwMGVkXFxuJlxcciZcXHUwMDBlJlxcdTAwZWVcXHUwMDAzXFwnXCIsXG4gICAgXCJcXHUwMDA2XFwnXFx1MDBmMlxcblxcJ1xcclxcJ1xcdTAwMGVcXCdcXHUwMGYzXFx1MDAwMyhcXHUwMDAzKFxcdTAwMDcoXFx1MDBmOFxcbihcXGZcIixcbiAgICBcIihcXHUwMDBlKFxcdTAwZmJcXHUwMDBiKFxcdTAwMDMpXFx1MDAwNilcXHUwMGZlXFxuKVxccilcXHUwMDBlKVxcdTAwZmZcXHUwMDAzKVwiLFxuICAgIFwiXFx1MDAwMylcXHUwMDAzKlxcdTAwMDMqXFx1MDAwNipcXHUwMTA2XFxuKlxccipcXHUwMDBlKlxcdTAxMDdcXHUwMDAzKlxcdTAwMDMqXCIsXG4gICAgXCJcXHUwMDAzK1xcdTAwMDMrXFx1MDAwMytcXHUwMDAzK1xcdTAwMDcrXFx1MDExMFxcbitcXGYrXFx1MDAwZStcXHUwMTEzXFx1MDAwYitcIixcbiAgICBcIlxcdTAwMDMrXFx1MDAwMytcXHUwMDAzK1xcdTAwMDMrXFx1MDAwMytcXHUwMDAzLFxcdTAwMDMsXFx1MDAwMyxcXHUwMDAzLFxcdTAwMDdcIixcbiAgICBcIixcXHUwMTFlXFxuLFxcZixcXHUwMDBlLFxcdTAxMjFcXHUwMDBiLFxcdTAwMDMsXFx1MDAwMyxcXHUwMDAzXFx1MDExMVxcdTAwMDItXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDVcXHUwMDA0XFx1MDAwN1xcdTAwMDVcXHRcXHUwMDA2XFx1MDAwYlxcdTAwMDdcXHJcXGJcXHUwMDBmXFx0XFx1MDAxMVwiLFxuICAgIFwiXFxuXFx1MDAxM1xcdTAwMGJcXHUwMDE1XFxmXFx1MDAxN1xcclxcdTAwMTlcXHUwMDBlXFx1MDAxYlxcdTAwMGZcXHUwMDFkXFx1MDAxMFxcdTAwMWZcIixcbiAgICBcIlxcdTAwMTEhXFx1MDAxMiNcXHUwMDEzJVxcdTAwMTRcXCdcXHUwMDE1KVxcdTAwMTYrXFx1MDAxNy1cXHUwMDE4L1xcdTAwMTkxXFx1MDAxYVwiLFxuICAgIFwiM1xcdTAwMWI1XFx1MDAxYzdcXHUwMDFkOVxcdTAwMWU7XFx1MDAxZj0gPyFBXFxcIkMjRSRHJUkmS1xcJ00oTylRKlMrVSxXLVxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXG5cXHUwMDAzXFx1MDAwMjI7XFx1MDAwNFxcdTAwMDJHR2dnXFx1MDAwNFxcdTAwMDItLS8vXFx1MDAwM1xcdTAwMDJjXCIsXG4gICAgXCJ8XFx1MDAwNlxcdTAwMDIyO0NcXFxcYWFjfFxcdTAwMDVcXHUwMDAyXFx1MDAwYlxcZlxcdTAwMGVcXHUwMDBmXFxcIlxcXCJcXHUwMDA3XFx1MDAwMlwiLFxuICAgIFwiLzAyO0NcXFxcYWFjfFxcdTAwMDRcXHUwMDAyXFxmXFxmXFx1MDAwZlxcdTAwMGZcXHUwMDAyXFx1MDEyZFxcdTAwMDJcXHUwMDAzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDdcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx0XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDBiXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcclxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwZlxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDExXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDEzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTdcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxOVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxYlxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDFkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDFmXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMiFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMiNcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyJVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFwnXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMilcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMitcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyLVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyL1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCIxXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDIzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDI1XFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMjdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMjlcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyO1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyPVxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDI/XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJBXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMkNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMkVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiR1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAySVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyS1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJNXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJPXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyVVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyV1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDNZXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDVbXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDdcIixcbiAgICBcImJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx0ZFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDBiZlxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxccmhcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwZmtcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDExblxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDEzdlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDE1XCIsXG4gICAgXCJcXHUwMDdmXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTdcXHUwMDg3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTlcIixcbiAgICBcIlxcdTAwOGNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxYlxcdTAwOGVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxZFwiLFxuICAgIFwiXFx1MDA5MFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDFmXFx1MDA5NVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDIhXCIsXG4gICAgXCJcXHUwMDlhXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMiNcXHUwMDljXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMiVcXHUwMGE0XCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFwnXFx1MDBhN1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDIpXFx1MDBhZFxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMitcXHUwMGFmXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMi1cXHUwMGIyXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyL1xcdTAwYjRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyMVxcdTAwYjZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDIzXFx1MDBiOFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDI1XFx1MDBiYVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIjdcXHUwMGJjXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMjlcXHUwMGJlXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMjtcXHUwMGMyXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyPVxcdTAwYzZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyP1xcdTAwY2FcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJBXFx1MDBjZVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJDXFx1MDBkMVxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMkVcXHUwMGQ2XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMkdcXHUwMGUwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAySVxcdTAwZTJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyS1xcdTAwZTlcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJNXFx1MDBmMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJPXFx1MDBmNVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJRXFx1MDBmZFwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlNcXHUwMTAzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlVcXHUwMTBiXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyV1xcdTAxMTlcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyWVpcXHUwMDA3XFx1MDA3ZlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJaXFx1MDAwNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJbXFxcXFxcdTAwMDdxXFx1MDAwMlxcdTAwMDJcXFxcXVxcdTAwMDdcIixcbiAgICBcInJcXHUwMDAyXFx1MDAwMl1eXFx1MDAwN2NcXHUwMDAyXFx1MDAwMl5fXFx1MDAwN3NcXHUwMDAyXFx1MDAwMl9gXFx1MDAwN3dcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyYGFcXHUwMDA3Z1xcdTAwMDJcXHUwMDAyYVxcdTAwMDZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyYmNcXHUwMDA3PVwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJjXFxiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMmRlXFx1MDAwNypcXHUwMDAyXFx1MDAwMmVcXG5cXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJmZ1xcdTAwMDcrXFx1MDAwMlxcdTAwMDJnXFxmXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMmhcIixcbiAgICBcImlcXHUwMDA3a1xcdTAwMDJcXHUwMDAyaWpcXHUwMDA3aFxcdTAwMDJcXHUwMDAyalxcdTAwMGVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJrbFxcdTAwMDc/XFx1MDAwMlxcdTAwMDJsbVxcdTAwMDc/XFx1MDAwMlxcdTAwMDJtXFx1MDAxMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMm5vXFx1MDAwN2RcXHUwMDAyXFx1MDAwMm9wXFx1MDAwN2NcXHUwMDAyXFx1MDAwMnBxXFx1MDAwN3RcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwicXJcXHUwMDA3dFxcdTAwMDJcXHUwMDAycnNcXHUwMDA3a1xcdTAwMDJcXHUwMDAyc3RcXHUwMDA3Z1xcdTAwMDJcXHUwMDAydHVcXHUwMDA3XCIsXG4gICAgXCJ0XFx1MDAwMlxcdTAwMDJ1XFx1MDAxMlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJ2d1xcdTAwMDdRXFx1MDAwMlxcdTAwMDJ3eFwiLFxuICAgIFwiXFx1MDAwN1JcXHUwMDAyXFx1MDAwMnh5XFx1MDAwN0dcXHUwMDAyXFx1MDAwMnl6XFx1MDAwN1BcXHUwMDAyXFx1MDAwMnp7XFx1MDAwN1wiLFxuICAgIFwiU1xcdTAwMDJcXHUwMDAye3xcXHUwMDA3Q1xcdTAwMDJcXHUwMDAyfH1cXHUwMDA3VVxcdTAwMDJcXHUwMDAyfX5cXHUwMDA3T1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJ+XFx1MDAxNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDdmXFx1MDA4MFxcdTAwMDdrXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwODBcXHUwMDgxXFx1MDAwN3BcXHUwMDAyXFx1MDAwMlxcdTAwODFcXHUwMDgyXFx1MDAwN2VcXHUwMDAyXFx1MDAwMlxcdTAwODJcIixcbiAgICBcIlxcdTAwODNcXHUwMDA3blxcdTAwMDJcXHUwMDAyXFx1MDA4M1xcdTAwODRcXHUwMDA3d1xcdTAwMDJcXHUwMDAyXFx1MDA4NFxcdTAwODVcIixcbiAgICBcIlxcdTAwMDdmXFx1MDAwMlxcdTAwMDJcXHUwMDg1XFx1MDA4NlxcdTAwMDdnXFx1MDAwMlxcdTAwMDJcXHUwMDg2XFx1MDAxNlxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwODdcXHUwMDg4XFx1MDAwN3NcXHUwMDAyXFx1MDAwMlxcdTAwODhcXHUwMDg5XFx1MDAwN1wiLFxuICAgIFwidFxcdTAwMDJcXHUwMDAyXFx1MDA4OVxcdTAwOGFcXHUwMDA3Z1xcdTAwMDJcXHUwMDAyXFx1MDA4YVxcdTAwOGJcXHUwMDA3aVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDhiXFx1MDAxOFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDhjXFx1MDA4ZFxcdTAwMDddXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOGRcXHUwMDFhXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwOGVcXHUwMDhmXFx1MDAwN19cXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA4ZlxcdTAwMWNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDA5MFxcdTAwOTFcXHUwMDA3ZVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDkxXFx1MDA5MlxcdTAwMDd0XFx1MDAwMlxcdTAwMDJcXHUwMDkyXFx1MDA5M1xcdTAwMDdnXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwOTNcXHUwMDk0XFx1MDAwN2lcXHUwMDAyXFx1MDAwMlxcdTAwOTRcXHUwMDFlXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDA5NVxcdTAwOTZcXHUwMDA3aVxcdTAwMDJcXHUwMDAyXFx1MDA5NlxcdTAwOTdcXHUwMDA3Y1xcdTAwMDJcXHUwMDAyXFx1MDA5N1wiLFxuICAgIFwiXFx1MDA5OFxcdTAwMDd2XFx1MDAwMlxcdTAwMDJcXHUwMDk4XFx1MDA5OVxcdTAwMDdnXFx1MDAwMlxcdTAwMDJcXHUwMDk5IFxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwOWFcXHUwMDliXFx1MDAwN31cXHUwMDAyXFx1MDAwMlxcdTAwOWJcXFwiXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDA5Y1xcdTAwOWRcXHUwMDA3b1xcdTAwMDJcXHUwMDAyXFx1MDA5ZFxcdTAwOWVcXHUwMDA3Z1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDllXFx1MDA5ZlxcdTAwMDdjXFx1MDAwMlxcdTAwMDJcXHUwMDlmXFx1MDBhMFxcdTAwMDd1XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwYTBcXHUwMGExXFx1MDAwN3dcXHUwMDAyXFx1MDAwMlxcdTAwYTFcXHUwMGEyXFx1MDAwN3RcXHUwMDAyXFx1MDAwMlxcdTAwYTJcIixcbiAgICBcIlxcdTAwYTNcXHUwMDA3Z1xcdTAwMDJcXHUwMDAyXFx1MDBhMyRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBhNFxcdTAwYTVcIixcbiAgICBcIlxcdTAwMDcvXFx1MDAwMlxcdTAwMDJcXHUwMGE1XFx1MDBhNlxcdTAwMDdAXFx1MDAwMlxcdTAwMDJcXHUwMGE2JlxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwYTdcXHUwMGE4XFx1MDAwN3RcXHUwMDAyXFx1MDAwMlxcdTAwYThcXHUwMGE5XFx1MDAwN2dcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBhOVxcdTAwYWFcXHUwMDA3dVxcdTAwMDJcXHUwMDAyXFx1MDBhYVxcdTAwYWJcXHUwMDA3Z1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGFiXFx1MDBhY1xcdTAwMDd2XFx1MDAwMlxcdTAwMDJcXHUwMGFjKFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGFkXCIsXG4gICAgXCJcXHUwMGFlXFx1MDAwN1dcXHUwMDAyXFx1MDAwMlxcdTAwYWUqXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYWZcXHUwMGIwXCIsXG4gICAgXCJcXHUwMDA3RVxcdTAwMDJcXHUwMDAyXFx1MDBiMFxcdTAwYjFcXHUwMDA3WlxcdTAwMDJcXHUwMDAyXFx1MDBiMSxcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMGIyXFx1MDBiM1xcdTAwMDcuXFx1MDAwMlxcdTAwMDJcXHUwMGIzLlxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYjRcXHUwMGI1XFx1MDAwN2BcXHUwMDAyXFx1MDAwMlxcdTAwYjUwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBiNlxcdTAwYjdcXHUwMDA3LFxcdTAwMDJcXHUwMDAyXFx1MDBiNzJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBiOFwiLFxuICAgIFwiXFx1MDBiOVxcdTAwMDcxXFx1MDAwMlxcdTAwMDJcXHUwMGI5NFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGJhXFx1MDBiYlwiLFxuICAgIFwiXFx1MDAwNy1cXHUwMDAyXFx1MDAwMlxcdTAwYmI2XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYmNcXHUwMGJkXFx1MDAwN1wiLFxuICAgIFwiL1xcdTAwMDJcXHUwMDAyXFx1MDBiZDhcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBiZVxcdTAwYmZcXHUwMDA3dVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGJmXFx1MDBjMFxcdTAwMDdrXFx1MDAwMlxcdTAwMDJcXHUwMGMwXFx1MDBjMVxcdTAwMDdwXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwYzE6XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYzJcXHUwMGMzXFx1MDAwN2VcXHUwMDAyXFx1MDAwMlxcdTAwYzNcIixcbiAgICBcIlxcdTAwYzRcXHUwMDA3cVxcdTAwMDJcXHUwMDAyXFx1MDBjNFxcdTAwYzVcXHUwMDA3dVxcdTAwMDJcXHUwMDAyXFx1MDBjNTxcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGM2XFx1MDBjN1xcdTAwMDd2XFx1MDAwMlxcdTAwMDJcXHUwMGM3XFx1MDBjOFxcdTAwMDdcIixcbiAgICBcImNcXHUwMDAyXFx1MDAwMlxcdTAwYzhcXHUwMGM5XFx1MDAwN3BcXHUwMDAyXFx1MDAwMlxcdTAwYzk+XFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBjYVxcdTAwY2JcXHUwMDA3Z1xcdTAwMDJcXHUwMDAyXFx1MDBjYlxcdTAwY2NcXHUwMDA3elxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGNjXFx1MDBjZFxcdTAwMDdyXFx1MDAwMlxcdTAwMDJcXHUwMGNkQFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGNlXCIsXG4gICAgXCJcXHUwMGNmXFx1MDAwN25cXHUwMDAyXFx1MDAwMlxcdTAwY2ZcXHUwMGQwXFx1MDAwN3BcXHUwMDAyXFx1MDAwMlxcdTAwZDBCXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBkMVxcdTAwZDJcXHUwMDA3dVxcdTAwMDJcXHUwMDAyXFx1MDBkMlxcdTAwZDNcXHUwMDA3XCIsXG4gICAgXCJzXFx1MDAwMlxcdTAwMDJcXHUwMGQzXFx1MDBkNFxcdTAwMDd0XFx1MDAwMlxcdTAwMDJcXHUwMGQ0XFx1MDBkNVxcdTAwMDd2XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwZDVEXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZDZcXHUwMGQ3XFx1MDAwN3JcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBkN1xcdTAwZDhcXHUwMDA3a1xcdTAwMDJcXHUwMDAyXFx1MDBkOEZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBkOVwiLFxuICAgIFwiXFx1MDBkYVxcdTAwMDVJJVxcdTAwMDJcXHUwMGRhXFx1MDBkYlxcdTAwMDVLJlxcdTAwMDJcXHUwMGRiXFx1MDBlMVxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwZGNcXHUwMGRkXFx1MDAwNU1cXCdcXHUwMDAyXFx1MDBkZFxcdTAwZGVcXHUwMDA1SyZcXHUwMDAyXFx1MDBkZVwiLFxuICAgIFwiXFx1MDBlMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGRmXFx1MDBlMVxcdTAwMDVJJVxcdTAwMDJcXHUwMGUwXFx1MDBkOVwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZTBcXHUwMGRjXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZTBcXHUwMGRmXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlMUhcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlMlxcdTAwZTNcIixcbiAgICBcIlxcdTAwMDVNXFwnXFx1MDAwMlxcdTAwZTNcXHUwMGU1XFx1MDAwNzBcXHUwMDAyXFx1MDAwMlxcdTAwZTRcXHUwMGU2XFx0XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGU1XFx1MDBlNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGU2XFx1MDBlN1xcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwZTdcXHUwMGU1XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZTdcXHUwMGU4XFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBlOEpcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlOVxcdTAwZWFcXHRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZWFcXHUwMGVjXFx0XFx1MDAwNFxcdTAwMDJcXHUwMDAyXFx1MDBlYlxcdTAwZWRcXHRcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGVjXCIsXG4gICAgXCJcXHUwMGViXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZWRcXHUwMGVlXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZWVcIixcbiAgICBcIlxcdTAwZWNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlZVxcdTAwZWZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlZlwiLFxuICAgIFwiTFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGYwXFx1MDBmMlxcdFxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZjFcXHUwMGYwXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmMlxcdTAwZjNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmM1xcdTAwZjFcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGYzXFx1MDBmNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGY0TlwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZjVcXHUwMGY5XFx0XFx1MDAwNVxcdTAwMDJcXHUwMDAyXFx1MDBmNlxcdTAwZjhcIixcbiAgICBcIlxcdFxcdTAwMDZcXHUwMDAyXFx1MDAwMlxcdTAwZjdcXHUwMGY2XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZjhcXHUwMGZiXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmOVxcdTAwZjdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmOVxcdTAwZmFcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZhUFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZiXFx1MDBmOVwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZmNcXHUwMGZlXFx0XFx1MDAwN1xcdTAwMDJcXHUwMDAyXFx1MDBmZFxcdTAwZmNcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZlXFx1MDBmZlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZmXFx1MDBmZFwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZmZcXHUwMTAwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMDBcXHUwMTAxXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwMVxcdTAxMDJcXGIpXFx1MDAwMlxcdTAwMDJcXHUwMTAyUlxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAxMDNcXHUwMTA1XFx1MDAwNyRcXHUwMDAyXFx1MDAwMlxcdTAxMDRcXHUwMTA2XFx0XFxiXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAxMDVcXHUwMTA0XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMDZcXHUwMTA3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDEwN1xcdTAxMDVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwN1xcdTAxMDhcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMTA4XFx1MDEwOVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTA5XFx1MDEwYVxcdTAwMDckXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAxMGFUXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMGJcXHUwMTBjXFx1MDAwNzFcXHUwMDAyXFx1MDAwMlxcdTAxMGNcIixcbiAgICBcIlxcdTAxMGRcXHUwMDA3LFxcdTAwMDJcXHUwMDAyXFx1MDEwZFxcdTAxMTFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwZVwiLFxuICAgIFwiXFx1MDExMFxcdTAwMGJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTBmXFx1MDEwZVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTEwXCIsXG4gICAgXCJcXHUwMTEzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMTFcXHUwMTEyXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMTFcIixcbiAgICBcIlxcdTAxMGZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExMlxcdTAxMTRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExM1wiLFxuICAgIFwiXFx1MDExMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTE0XFx1MDExNVxcdTAwMDcsXFx1MDAwMlxcdTAwMDJcXHUwMTE1XCIsXG4gICAgXCJcXHUwMTE2XFx1MDAwNzFcXHUwMDAyXFx1MDAwMlxcdTAxMTZcXHUwMTE3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMTdcIixcbiAgICBcIlxcdTAxMThcXGIrXFx1MDAwMlxcdTAwMDJcXHUwMTE4VlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTE5XFx1MDExYVxcdTAwMDdcIixcbiAgICBcIjFcXHUwMDAyXFx1MDAwMlxcdTAxMWFcXHUwMTFiXFx1MDAwNzFcXHUwMDAyXFx1MDAwMlxcdTAxMWJcXHUwMTFmXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDExY1xcdTAxMWVcXG5cXHRcXHUwMDAyXFx1MDAwMlxcdTAxMWRcXHUwMTFjXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDExZVxcdTAxMjFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExZlxcdTAxMWRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMTFmXFx1MDEyMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTIwXFx1MDEyMlxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAxMjFcXHUwMTFmXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMjJcXHUwMTIzXFxiLFxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMTIzWFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXGZcXHUwMDAyXFx1MDBlMFxcdTAwZTdcXHUwMGVlXFx1MDBmM1xcdTAwZjlcIixcbiAgICBcIlxcdTAwZmZcXHUwMTA3XFx1MDExMVxcdTAxMWZcXHUwMDAzXFxiXFx1MDAwMlxcdTAwMDJcIl0uam9pbihcIlwiKTtcblxuXG52YXIgYXRuID0gbmV3IGFudGxyNC5hdG4uQVRORGVzZXJpYWxpemVyKCkuZGVzZXJpYWxpemUoc2VyaWFsaXplZEFUTik7XG5cbnZhciBkZWNpc2lvbnNUb0RGQSA9IGF0bi5kZWNpc2lvblRvU3RhdGUubWFwKCBmdW5jdGlvbihkcywgaW5kZXgpIHsgcmV0dXJuIG5ldyBhbnRscjQuZGZhLkRGQShkcywgaW5kZXgpOyB9KTtcblxuZnVuY3Rpb24gUUFTTUxleGVyKGlucHV0KSB7XG5cdGFudGxyNC5MZXhlci5jYWxsKHRoaXMsIGlucHV0KTtcbiAgICB0aGlzLl9pbnRlcnAgPSBuZXcgYW50bHI0LmF0bi5MZXhlckFUTlNpbXVsYXRvcih0aGlzLCBhdG4sIGRlY2lzaW9uc1RvREZBLCBuZXcgYW50bHI0LlByZWRpY3Rpb25Db250ZXh0Q2FjaGUoKSk7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblFBU01MZXhlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5MZXhlci5wcm90b3R5cGUpO1xuUUFTTUxleGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFFBU01MZXhlcjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFFBU01MZXhlci5wcm90b3R5cGUsIFwiYXRuXCIsIHtcbiAgICAgICAgZ2V0IDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGF0bjtcbiAgICAgICAgfVxufSk7XG5cblFBU01MZXhlci5FT0YgPSBhbnRscjQuVG9rZW4uRU9GO1xuUUFTTUxleGVyLlRfXzAgPSAxO1xuUUFTTUxleGVyLlRfXzEgPSAyO1xuUUFTTUxleGVyLlRfXzIgPSAzO1xuUUFTTUxleGVyLlRfXzMgPSA0O1xuUUFTTUxleGVyLlRfXzQgPSA1O1xuUUFTTUxleGVyLlRfXzUgPSA2O1xuUUFTTUxleGVyLlRfXzYgPSA3O1xuUUFTTUxleGVyLlRfXzcgPSA4O1xuUUFTTUxleGVyLlRfXzggPSA5O1xuUUFTTUxleGVyLlRfXzkgPSAxMDtcblFBU01MZXhlci5UX18xMCA9IDExO1xuUUFTTUxleGVyLlRfXzExID0gMTI7XG5RQVNNTGV4ZXIuVF9fMTIgPSAxMztcblFBU01MZXhlci5UX18xMyA9IDE0O1xuUUFTTUxleGVyLlRfXzE0ID0gMTU7XG5RQVNNTGV4ZXIuVF9fMTUgPSAxNjtcblFBU01MZXhlci5UX18xNiA9IDE3O1xuUUFTTUxleGVyLlRfXzE3ID0gMTg7XG5RQVNNTGV4ZXIuVF9fMTggPSAxOTtcblFBU01MZXhlci5UX18xOSA9IDIwO1xuUUFTTUxleGVyLlRfXzIwID0gMjE7XG5RQVNNTGV4ZXIuVF9fMjEgPSAyMjtcblFBU01MZXhlci5UX18yMiA9IDIzO1xuUUFTTUxleGVyLlRfXzIzID0gMjQ7XG5RQVNNTGV4ZXIuVF9fMjQgPSAyNTtcblFBU01MZXhlci5UX18yNSA9IDI2O1xuUUFTTUxleGVyLlRfXzI2ID0gMjc7XG5RQVNNTGV4ZXIuVF9fMjcgPSAyODtcblFBU01MZXhlci5UX18yOCA9IDI5O1xuUUFTTUxleGVyLlRfXzI5ID0gMzA7XG5RQVNNTGV4ZXIuVF9fMzAgPSAzMTtcblFBU01MZXhlci5UX18zMSA9IDMyO1xuUUFTTUxleGVyLlRfXzMyID0gMzM7XG5RQVNNTGV4ZXIuUEkgPSAzNDtcblFBU01MZXhlci5SRUFMID0gMzU7XG5RQVNNTGV4ZXIuU1VCUkVBTCA9IDM2O1xuUUFTTUxleGVyLkVYUFJFQUwgPSAzNztcblFBU01MZXhlci5JTlQgPSAzODtcblFBU01MZXhlci5JRCA9IDM5O1xuUUFTTUxleGVyLldTID0gNDA7XG5RQVNNTGV4ZXIuRklMRU5BTUUgPSA0MTtcblFBU01MZXhlci5DT01NRU5UID0gNDI7XG5RQVNNTGV4ZXIuTElORV9DT01NRU5UID0gNDM7XG5cblFBU01MZXhlci5wcm90b3R5cGUuY2hhbm5lbE5hbWVzID0gWyBcIkRFRkFVTFRfVE9LRU5fQ0hBTk5FTFwiLCBcIkhJRERFTlwiIF07XG5cblFBU01MZXhlci5wcm90b3R5cGUubW9kZU5hbWVzID0gWyBcIkRFRkFVTFRfTU9ERVwiIF07XG5cblFBU01MZXhlci5wcm90b3R5cGUubGl0ZXJhbE5hbWVzID0gWyBudWxsLCBcIid9J1wiLCBcIidvcGFxdWUnXCIsIFwiJzsnXCIsIFwiJygnXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJyknXCIsIFwiJ2lmJ1wiLCBcIic9PSdcIiwgXCInYmFycmllcidcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCInT1BFTlFBU00nXCIsIFwiJ2luY2x1ZGUnXCIsIFwiJ3FyZWcnXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJ1snXCIsIFwiJ10nXCIsIFwiJ2NyZWcnXCIsIFwiJ2dhdGUnXCIsIFwiJ3snXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJ21lYXN1cmUnXCIsIFwiJy0+J1wiLCBcIidyZXNldCdcIiwgXCInVSdcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCInQ1gnXCIsIFwiJywnXCIsIFwiJ14nXCIsIFwiJyonXCIsIFwiJy8nXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJysnXCIsIFwiJy0nXCIsIFwiJ3NpbidcIiwgXCInY29zJ1wiLCBcIid0YW4nXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiJ2V4cCdcIiwgXCInbG4nXCIsIFwiJ3NxcnQnXCIsIFwiJ3BpJ1wiIF07XG5cblFBU01MZXhlci5wcm90b3R5cGUuc3ltYm9saWNOYW1lcyA9IFsgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCBudWxsLCBudWxsLCBudWxsLCBcIlBJXCIsIFwiUkVBTFwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTVUJSRUFMXCIsIFwiRVhQUkVBTFwiLCBcIklOVFwiLCBcIklEXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIldTXCIsIFwiRklMRU5BTUVcIiwgXCJDT01NRU5UXCIsIFwiTElORV9DT01NRU5UXCIgXTtcblxuUUFTTUxleGVyLnByb3RvdHlwZS5ydWxlTmFtZXMgPSBbIFwiVF9fMFwiLCBcIlRfXzFcIiwgXCJUX18yXCIsIFwiVF9fM1wiLCBcIlRfXzRcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUX181XCIsIFwiVF9fNlwiLCBcIlRfXzdcIiwgXCJUX184XCIsIFwiVF9fOVwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRfXzEwXCIsIFwiVF9fMTFcIiwgXCJUX18xMlwiLCBcIlRfXzEzXCIsIFwiVF9fMTRcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUX18xNVwiLCBcIlRfXzE2XCIsIFwiVF9fMTdcIiwgXCJUX18xOFwiLCBcIlRfXzE5XCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVF9fMjBcIiwgXCJUX18yMVwiLCBcIlRfXzIyXCIsIFwiVF9fMjNcIiwgXCJUX18yNFwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRfXzI1XCIsIFwiVF9fMjZcIiwgXCJUX18yN1wiLCBcIlRfXzI4XCIsIFwiVF9fMjlcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUX18zMFwiLCBcIlRfXzMxXCIsIFwiVF9fMzJcIiwgXCJQSVwiLCBcIlJFQUxcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJTVUJSRUFMXCIsIFwiRVhQUkVBTFwiLCBcIklOVFwiLCBcIklEXCIsIFwiV1NcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJGSUxFTkFNRVwiLCBcIkNPTU1FTlRcIiwgXCJMSU5FX0NPTU1FTlRcIiBdO1xuXG5RQVNNTGV4ZXIucHJvdG90eXBlLmdyYW1tYXJGaWxlTmFtZSA9IFwiUUFTTS5nNFwiO1xuXG5cblxuZXhwb3J0cy5RQVNNTGV4ZXIgPSBRQVNNTGV4ZXI7XG5cbiIsIi8vIEdlbmVyYXRlZCBmcm9tIFFBU00uZzQgYnkgQU5UTFIgNC43LjFcbi8vIGpzaGludCBpZ25vcmU6IHN0YXJ0XG52YXIgYW50bHI0ID0gcmVxdWlyZSgnYW50bHI0L2luZGV4Jyk7XG5cbi8vIFRoaXMgY2xhc3MgZGVmaW5lcyBhIGNvbXBsZXRlIGxpc3RlbmVyIGZvciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlci5cbmZ1bmN0aW9uIFFBU01MaXN0ZW5lcigpIHtcblx0YW50bHI0LnRyZWUuUGFyc2VUcmVlTGlzdGVuZXIuY2FsbCh0aGlzKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC50cmVlLlBhcnNlVHJlZUxpc3RlbmVyLnByb3RvdHlwZSk7XG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUUFTTUxpc3RlbmVyO1xuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNtYWlucHJvZy5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJNYWlucHJvZyA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNtYWlucHJvZy5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdE1haW5wcm9nID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3N0YXRlbWVudC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJTdGF0ZW1lbnQgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjc3RhdGVtZW50LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0U3RhdGVtZW50ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3ZlcnNpb24uXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyVmVyc2lvbiA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN2ZXJzaW9uLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0VmVyc2lvbiA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNpbmNsdWRlLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckluY2x1ZGUgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjaW5jbHVkZS5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdEluY2x1ZGUgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZmlsZW5hbWUuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyRmlsZW5hbWUgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZmlsZW5hbWUuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRGaWxlbmFtZSA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNkZWNsLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckRlY2wgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZGVjbC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdERlY2wgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZ2F0ZWRlY2wuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyR2F0ZWRlY2wgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZ2F0ZWRlY2wuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRHYXRlZGVjbCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNnb3BsaXN0LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckdvcGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZ29wbGlzdC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdEdvcGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjcW9wLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclFvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNxb3AuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRRb3AgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjdW9wLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclVvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN1b3AuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRVb3AgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjYW55bGlzdC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJBbnlsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2FueWxpc3QuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRBbnlsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2lkbGlzdC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJJZGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjaWRsaXN0LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0SWRsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI21peGVkbGlzdC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJNaXhlZGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjbWl4ZWRsaXN0LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0TWl4ZWRsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2FyZ3VtZW50LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckFyZ3VtZW50ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2FyZ3VtZW50LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0QXJndW1lbnQgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZXhwbGlzdC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJFeHBsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2V4cGxpc3QuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRFeHBsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2V4cC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJFeHAgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZXhwLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0RXhwID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2F0b20uXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyQXRvbSA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNhdG9tLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0QXRvbSA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN1bmFyeW9wLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclVuYXJ5b3AgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjdW5hcnlvcC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdFVuYXJ5b3AgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuXG5leHBvcnRzLlFBU01MaXN0ZW5lciA9IFFBU01MaXN0ZW5lcjsiLCIvLyBHZW5lcmF0ZWQgZnJvbSBRQVNNLmc0IGJ5IEFOVExSIDQuNy4xXG4vLyBqc2hpbnQgaWdub3JlOiBzdGFydFxudmFyIGFudGxyNCA9IHJlcXVpcmUoJ2FudGxyNC9pbmRleCcpO1xudmFyIFFBU01MaXN0ZW5lciA9IHJlcXVpcmUoJy4vUUFTTUxpc3RlbmVyJykuUUFTTUxpc3RlbmVyO1xudmFyIGdyYW1tYXJGaWxlTmFtZSA9IFwiUUFTTS5nNFwiO1xuXG52YXIgc2VyaWFsaXplZEFUTiA9IFtcIlxcdTAwMDNcXHU2MDhiXFx1YTcyYVxcdTgxMzNcXHViOWVkXFx1NDE3Y1xcdTNiZTdcXHU3Nzg2XFx1NTk2NFwiLFxuICAgIFwiXFx1MDAwMy1cXHUwMTMwXFx1MDAwNFxcdTAwMDJcXHRcXHUwMDAyXFx1MDAwNFxcdTAwMDNcXHRcXHUwMDAzXFx1MDAwNFxcdTAwMDRcXHRcIixcbiAgICBcIlxcdTAwMDRcXHUwMDA0XFx1MDAwNVxcdFxcdTAwMDVcXHUwMDA0XFx1MDAwNlxcdFxcdTAwMDZcXHUwMDA0XFx1MDAwN1xcdFxcdTAwMDdcXHUwMDA0XCIsXG4gICAgXCJcXGJcXHRcXGJcXHUwMDA0XFx0XFx0XFx0XFx1MDAwNFxcblxcdFxcblxcdTAwMDRcXHUwMDBiXFx0XFx1MDAwYlxcdTAwMDRcXGZcXHRcXGZcXHUwMDA0XCIsXG4gICAgXCJcXHJcXHRcXHJcXHUwMDA0XFx1MDAwZVxcdFxcdTAwMGVcXHUwMDA0XFx1MDAwZlxcdFxcdTAwMGZcXHUwMDA0XFx1MDAxMFxcdFxcdTAwMTBcXHUwMDA0XCIsXG4gICAgXCJcXHUwMDExXFx0XFx1MDAxMVxcdTAwMDRcXHUwMDEyXFx0XFx1MDAxMlxcdTAwMDRcXHUwMDEzXFx0XFx1MDAxM1xcdTAwMDNcXHUwMDAyXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDdcXHUwMDAyKVxcblxcdTAwMDJcXGZcXHUwMDAyXFx1MDAwZVxcdTAwMDIsXFx1MDAwYlxcdTAwMDJcXHUwMDAzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDA1XFx1MDAwM1dcXG5cXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwNFxcdTAwMDNcXHUwMDA0XFx1MDAwM1xcdTAwMDRcXHUwMDAzXFx1MDAwNFxcdTAwMDNcXHUwMDA1XFx1MDAwM1xcdTAwMDVcIixcbiAgICBcIlxcdTAwMDNcXHUwMDA1XFx1MDAwM1xcdTAwMDVcXHUwMDAzXFx1MDAwNlxcdTAwMDNcXHUwMDA2XFx1MDAwM1xcdTAwMDdcXHUwMDAzXFx1MDAwN1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDdcXHUwMDAzXFx1MDAwN1xcdTAwMDNcXHUwMDA3XFx1MDAwM1xcdTAwMDdcXHUwMDAzXFx1MDAwN1xcdTAwMDNcXHUwMDA3XCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwN1xcdTAwMDNcXHUwMDA3XFx1MDAwM1xcdTAwMDdcXHUwMDAzXFx1MDAwN1xcdTAwMDVcXHUwMDA3b1xcblxcdTAwMDdcIixcbiAgICBcIlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1wiLFxuICAgIFwiXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXCIsXG4gICAgXCJcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDVcXGJcXHUwMDg1XFxuXFxiXFx1MDAwM1xcdFxcdTAwMDNcXHRcXHUwMDAzXFx0XFx1MDAwM1xcdFwiLFxuICAgIFwiXFx1MDAwM1xcdFxcdTAwMDZcXHRcXHUwMDhjXFxuXFx0XFxyXFx0XFx1MDAwZVxcdFxcdTAwOGRcXHUwMDAzXFxuXFx1MDAwM1xcblxcdTAwMDNcXG5cIixcbiAgICBcIlxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcblxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcblxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwNVwiLFxuICAgIFwiXFxuXFx1MDA5YlxcblxcblxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcIixcbiAgICBcIlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcIixcbiAgICBcIlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMGJcXHUwMDA1XFx1MDAwYlxcdTAwYmJcXG5cXHUwMDBiXFx1MDAwM1xcZlxcdTAwMDNcXGZcXHUwMDA1XFxmXFx1MDBiZlwiLFxuICAgIFwiXFxuXFxmXFx1MDAwM1xcclxcdTAwMDNcXHJcXHUwMDA3XFxyXFx1MDBjM1xcblxcclxcZlxcclxcdTAwMGVcXHJcXHUwMGM2XFx1MDAwYlxcclxcdTAwMDNcIixcbiAgICBcIlxcclxcdTAwMDNcXHJcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXCIsXG4gICAgXCJcXHUwMDA3XFx1MDAwZVxcdTAwY2ZcXG5cXHUwMDBlXFxmXFx1MDAwZVxcdTAwMGVcXHUwMDBlXFx1MDBkMlxcdTAwMGJcXHUwMDBlXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDA3XCIsXG4gICAgXCJcXHUwMDBlXFx1MDBkYVxcblxcdTAwMGVcXGZcXHUwMDBlXFx1MDAwZVxcdTAwMGVcXHUwMGRkXFx1MDAwYlxcdTAwMGVcXHUwMDAzXFx1MDAwZVwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDdcXHUwMDBlXCIsXG4gICAgXCJcXHUwMGU1XFxuXFx1MDAwZVxcZlxcdTAwMGVcXHUwMDBlXFx1MDAwZVxcdTAwZThcXHUwMDBiXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwZVxcdTAwMDdcXHUwMDBlXFx1MDBlY1xcblxcdTAwMGVcXGZcXHUwMDBlXFx1MDAwZVxcdTAwMGVcXHUwMGVmXFx1MDAwYlxcdTAwMGVcIixcbiAgICBcIlxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwNVxcdTAwMGVcXHUwMGY1XFxuXCIsXG4gICAgXCJcXHUwMDBlXFx1MDAwM1xcdTAwMGZcXHUwMDAzXFx1MDAwZlxcdTAwMDNcXHUwMDBmXFx1MDAwM1xcdTAwMGZcXHUwMDAzXFx1MDAwZlxcdTAwMDVcIixcbiAgICBcIlxcdTAwMGZcXHUwMGZjXFxuXFx1MDAwZlxcdTAwMDNcXHUwMDEwXFx1MDAwM1xcdTAwMTBcXHUwMDAzXFx1MDAxMFxcdTAwMDdcXHUwMDEwXCIsXG4gICAgXCJcXHUwMTAxXFxuXFx1MDAxMFxcZlxcdTAwMTBcXHUwMDBlXFx1MDAxMFxcdTAxMDRcXHUwMDBiXFx1MDAxMFxcdTAwMDNcXHUwMDEwXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAxMFxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDA1XFx1MDAxMVxcdTAxMGFcXG5cXHUwMDExXFx1MDAwM1xcdTAwMTFcIixcbiAgICBcIlxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDNcXHUwMDExXFx1MDAwNVxcdTAwMTFcXHUwMTExXFxuXCIsXG4gICAgXCJcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDNcIixcbiAgICBcIlxcdTAwMTFcXHUwMDA1XFx1MDAxMVxcdTAxMTlcXG5cXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDA1XFx1MDAxMVxcdTAxMWNcXG5cXHUwMDExXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAxMVxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcIixcbiAgICBcIlxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDdcXHUwMDExXFx1MDEyN1xcblxcdTAwMTFcXGZcXHUwMDExXCIsXG4gICAgXCJcXHUwMDBlXFx1MDAxMVxcdTAxMmFcXHUwMDBiXFx1MDAxMVxcdTAwMDNcXHUwMDEyXFx1MDAwM1xcdTAwMTJcXHUwMDAzXFx1MDAxM1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMTNcXHUwMDAzXFx1MDAxM1xcdTAwMDJcXHUwMDAzIFxcdTAwMTRcXHUwMDAyXFx1MDAwNFxcdTAwMDZcXGJcXG5cXGZcXHUwMDBlXCIsXG4gICAgXCJcXHUwMDEwXFx1MDAxMlxcdTAwMTRcXHUwMDE2XFx1MDAxOFxcdTAwMWFcXHUwMDFjXFx1MDAxZSBcXFwiJFxcdTAwMDJcXHUwMDA2XFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMWNcXHUwMDFkXFx1MDAwM1xcdTAwMDJcXHUwMDFhXFx1MDAxYlxcdTAwMDRcXHUwMDAyJCUoKVxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDFlI1xcdTAwMDJcXHUwMTQ0XFx1MDAwMiZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwNFZcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDA2WFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXGJcXFxcXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFxuYFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXGZuXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMGVcXHUwMDg0XFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxMFxcdTAwOGJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxMlxcdTAwOWFcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDE0XFx1MDBiYVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDE2XFx1MDBiZVxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMThcXHUwMGM0XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMWFcXHUwMGY0XFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxY1xcdTAwZmJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxZVxcdTAxMDJcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDIgXFx1MDExYlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXFwiXFx1MDEyYlxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMiRcXHUwMTJkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMiYqXFx1MDAwNVxcdTAwMDZcXHUwMDA0XFx1MDAwMlwiLFxuICAgIFwiXFwnKVxcdTAwMDVcXHUwMDA0XFx1MDAwM1xcdTAwMDIoXFwnXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMiksXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyKihcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyKitcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyK1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDIsKlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDItV1xcdTAwMDVcXGZcXHUwMDA3XFx1MDAwMlwiLFxuICAgIFwiLi9cXHUwMDA1XFx1MDAwZVxcYlxcdTAwMDIvMFxcdTAwMDVcXHUwMDEwXFx0XFx1MDAwMjAxXFx1MDAwN1xcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiMVdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyMjNcXHUwMDA1XFx1MDAwZVxcYlxcdTAwMDIzNFxcdTAwMDdcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMjRXXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMjU2XFx1MDAwN1xcdTAwMDRcXHUwMDAyXFx1MDAwMjY3XFx1MDAwNylcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyNzhcXHUwMDA1XFx1MDAxOFxcclxcdTAwMDI4OVxcdTAwMDdcXHUwMDA1XFx1MDAwMlxcdTAwMDI5V1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMjo7XFx1MDAwN1xcdTAwMDRcXHUwMDAyXFx1MDAwMjs8XFx1MDAwNylcXHUwMDAyXFx1MDAwMjw9XCIsXG4gICAgXCJcXHUwMDA3XFx1MDAwNlxcdTAwMDJcXHUwMDAyPT5cXHUwMDA3XFx1MDAwN1xcdTAwMDJcXHUwMDAyPj9cXHUwMDA1XFx1MDAxOFxcclxcdTAwMDJcIixcbiAgICBcIj9AXFx1MDAwN1xcdTAwMDVcXHUwMDAyXFx1MDAwMkBXXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMkFCXFx1MDAwN1xcdTAwMDRcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyQkNcXHUwMDA3KVxcdTAwMDJcXHUwMDAyQ0RcXHUwMDA3XFx1MDAwNlxcdTAwMDJcXHUwMDAyREVcXHUwMDA1XFx1MDAxOFwiLFxuICAgIFwiXFxyXFx1MDAwMkVGXFx1MDAwN1xcdTAwMDdcXHUwMDAyXFx1MDAwMkZHXFx1MDAwNVxcdTAwMThcXHJcXHUwMDAyR0hcXHUwMDA3XFx1MDAwNVwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJIV1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJJV1xcdTAwMDVcXHUwMDEyXFxuXFx1MDAwMkpLXFx1MDAwN1wiLFxuICAgIFwiXFxiXFx1MDAwMlxcdTAwMDJLTFxcdTAwMDdcXHUwMDA2XFx1MDAwMlxcdTAwMDJMTVxcdTAwMDcpXFx1MDAwMlxcdTAwMDJNTlxcdTAwMDdcIixcbiAgICBcIlxcdFxcdTAwMDJcXHUwMDAyTk9cXHUwMDA3KFxcdTAwMDJcXHUwMDAyT1BcXHUwMDA3XFx1MDAwN1xcdTAwMDJcXHUwMDAyUFdcXHUwMDA1XCIsXG4gICAgXCJcXHUwMDEyXFxuXFx1MDAwMlFSXFx1MDAwN1xcblxcdTAwMDJcXHUwMDAyUlNcXHUwMDA1XFx1MDAxNlxcZlxcdTAwMDJTVFxcdTAwMDdcXHUwMDA1XCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlRXXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlVXXFx1MDAwNVxcYlxcdTAwMDVcXHUwMDAyVi1cXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJWLlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJWMlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlY1XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlY6XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlZBXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyVklcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyVkpcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyVlFcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJWVVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJXXFx1MDAwNVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlhZXFx1MDAwN1xcdTAwMGJcXHUwMDAyXFx1MDAwMllaXFx1MDAwNyVcXHUwMDAyXFx1MDAwMlpbXFx1MDAwN1xcdTAwMDVcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyW1xcdTAwMDdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFxcXF1cXHUwMDA3XFxmXFx1MDAwMlxcdTAwMDJdXlxcdTAwMDVcIixcbiAgICBcIlxcblxcdTAwMDZcXHUwMDAyXl9cXHUwMDA3XFx1MDAwNVxcdTAwMDJcXHUwMDAyX1xcdFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcImBhXFx1MDAwNytcXHUwMDAyXFx1MDAwMmFcXHUwMDBiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMmJjXFx1MDAwN1xcclxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJjZFxcdTAwMDcpXFx1MDAwMlxcdTAwMDJkZVxcdTAwMDdcXHUwMDBlXFx1MDAwMlxcdTAwMDJlZlxcdTAwMDcoXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMmZnXFx1MDAwN1xcdTAwMGZcXHUwMDAyXFx1MDAwMmdvXFx1MDAwN1xcdTAwMDVcXHUwMDAyXFx1MDAwMmhpXFx1MDAwN1xcdTAwMTBcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyaWpcXHUwMDA3KVxcdTAwMDJcXHUwMDAyamtcXHUwMDA3XFx1MDAwZVxcdTAwMDJcXHUwMDAya2xcXHUwMDA3XCIsXG4gICAgXCIoXFx1MDAwMlxcdTAwMDJsbVxcdTAwMDdcXHUwMDBmXFx1MDAwMlxcdTAwMDJtb1xcdTAwMDdcXHUwMDA1XFx1MDAwMlxcdTAwMDJuYlwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMm5oXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMm9cXHJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJwcVxcdTAwMDdcXHUwMDExXFx1MDAwMlxcdTAwMDJxclxcdTAwMDcpXFx1MDAwMlxcdTAwMDJyc1xcdTAwMDVcXHUwMDE4XCIsXG4gICAgXCJcXHJcXHUwMDAyc3RcXHUwMDA3XFx1MDAxMlxcdTAwMDJcXHUwMDAydFxcdTAwODVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAydXZcIixcbiAgICBcIlxcdTAwMDdcXHUwMDExXFx1MDAwMlxcdTAwMDJ2d1xcdTAwMDcpXFx1MDAwMlxcdTAwMDJ3eFxcdTAwMDdcXHUwMDA2XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcInh5XFx1MDAwN1xcdTAwMDdcXHUwMDAyXFx1MDAwMnl6XFx1MDAwNVxcdTAwMThcXHJcXHUwMDAyentcXHUwMDA3XFx1MDAxMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJ7XFx1MDA4NVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJ8fVxcdTAwMDdcXHUwMDExXFx1MDAwMlxcdTAwMDJ9flxcdTAwMDdcIixcbiAgICBcIilcXHUwMDAyXFx1MDAwMn5cXHUwMDdmXFx1MDAwN1xcdTAwMDZcXHUwMDAyXFx1MDAwMlxcdTAwN2ZcXHUwMDgwXFx1MDAwNVxcdTAwMThcIixcbiAgICBcIlxcclxcdTAwMDJcXHUwMDgwXFx1MDA4MVxcdTAwMDdcXHUwMDA3XFx1MDAwMlxcdTAwMDJcXHUwMDgxXFx1MDA4MlxcdTAwMDVcXHUwMDE4XCIsXG4gICAgXCJcXHJcXHUwMDAyXFx1MDA4MlxcdTAwODNcXHUwMDA3XFx1MDAxMlxcdTAwMDJcXHUwMDAyXFx1MDA4M1xcdTAwODVcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDg0cFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDg0dVxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwODR8XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwODVcXHUwMDBmXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA4NlxcdTAwOGNcXHUwMDA1XFx1MDAxNFxcdTAwMGJcXHUwMDAyXFx1MDA4N1xcdTAwODhcXHUwMDA3XFxuXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwODhcXHUwMDg5XFx1MDAwNVxcdTAwMThcXHJcXHUwMDAyXFx1MDA4OVxcdTAwOGFcXHUwMDA3XFx1MDAwNVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDhhXFx1MDA4Y1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDhiXFx1MDA4NlxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOGJcXHUwMDg3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwOGNcXHUwMDhkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA4ZFxcdTAwOGJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDA4ZFxcdTAwOGVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDhlXFx1MDAxMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDhmXFx1MDA5YlxcdTAwMDVcXHUwMDE0XFx1MDAwYlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOTBcXHUwMDkxXFx1MDAwN1xcdTAwMTNcXHUwMDAyXFx1MDAwMlxcdTAwOTFcXHUwMDkyXFx1MDAwNVxcdTAwMWNcXHUwMDBmXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA5MlxcdTAwOTNcXHUwMDA3XFx1MDAxNFxcdTAwMDJcXHUwMDAyXFx1MDA5M1xcdTAwOTRcXHUwMDA1XFx1MDAxY1xcdTAwMGZcIixcbiAgICBcIlxcdTAwMDJcXHUwMDk0XFx1MDA5NVxcdTAwMDdcXHUwMDA1XFx1MDAwMlxcdTAwMDJcXHUwMDk1XFx1MDA5YlxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOTZcXHUwMDk3XFx1MDAwN1xcdTAwMTVcXHUwMDAyXFx1MDAwMlxcdTAwOTdcXHUwMDk4XFx1MDAwNVxcdTAwMWNcXHUwMDBmXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA5OFxcdTAwOTlcXHUwMDA3XFx1MDAwNVxcdTAwMDJcXHUwMDAyXFx1MDA5OVxcdTAwOWJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDlhXFx1MDA4ZlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDlhXFx1MDA5MFxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOWFcXHUwMDk2XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwOWJcXHUwMDEzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA5Y1xcdTAwOWRcXHUwMDA3XFx1MDAxNlxcdTAwMDJcXHUwMDAyXFx1MDA5ZFxcdTAwOWVcXHUwMDA3XFx1MDAwNlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDllXFx1MDA5ZlxcdTAwMDVcXHUwMDFlXFx1MDAxMFxcdTAwMDJcXHUwMDlmXFx1MDBhMFxcdTAwMDdcXHUwMDA3XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYTBcXHUwMGExXFx1MDAwNVxcdTAwMWNcXHUwMDBmXFx1MDAwMlxcdTAwYTFcXHUwMGEyXFx1MDAwN1xcdTAwMDVcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBhMlxcdTAwYmJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBhM1xcdTAwYTRcXHUwMDA3XFx1MDAxN1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGE0XFx1MDBhNVxcdTAwMDVcXHUwMDFjXFx1MDAwZlxcdTAwMDJcXHUwMGE1XFx1MDBhNlxcdTAwMDdcXHUwMDE4XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYTZcXHUwMGE3XFx1MDAwNVxcdTAwMWNcXHUwMDBmXFx1MDAwMlxcdTAwYTdcXHUwMGE4XFx1MDAwN1xcdTAwMDVcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBhOFxcdTAwYmJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBhOVxcdTAwYWFcXHUwMDA3KVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGFhXFx1MDBhYlxcdTAwMDVcXHUwMDE2XFxmXFx1MDAwMlxcdTAwYWJcXHUwMGFjXFx1MDAwN1xcdTAwMDVcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBhY1xcdTAwYmJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBhZFxcdTAwYWVcXHUwMDA3KVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGFlXFx1MDBhZlxcdTAwMDdcXHUwMDA2XFx1MDAwMlxcdTAwMDJcXHUwMGFmXFx1MDBiMFxcdTAwMDdcXHUwMDA3XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYjBcXHUwMGIxXFx1MDAwNVxcdTAwMTZcXGZcXHUwMDAyXFx1MDBiMVxcdTAwYjJcXHUwMDA3XFx1MDAwNVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGIyXFx1MDBiYlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGIzXFx1MDBiNFxcdTAwMDcpXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYjRcXHUwMGI1XFx1MDAwN1xcdTAwMDZcXHUwMDAyXFx1MDAwMlxcdTAwYjVcXHUwMGI2XFx1MDAwNVxcdTAwMWVcXHUwMDEwXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBiNlxcdTAwYjdcXHUwMDA3XFx1MDAwN1xcdTAwMDJcXHUwMDAyXFx1MDBiN1xcdTAwYjhcXHUwMDA1XFx1MDAxNlxcZlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYjhcXHUwMGI5XFx1MDAwN1xcdTAwMDVcXHUwMDAyXFx1MDAwMlxcdTAwYjlcXHUwMGJiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBiYVxcdTAwOWNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBiYVxcdTAwYTNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGJhXFx1MDBhOVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGJhXFx1MDBhZFxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYmFcXHUwMGIzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYmJcXHUwMDE1XFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBiY1xcdTAwYmZcXHUwMDA1XFx1MDAxOFxcclxcdTAwMDJcXHUwMGJkXFx1MDBiZlxcdTAwMDVcXHUwMDFhXFx1MDAwZVwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYmVcXHUwMGJjXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYmVcXHUwMGJkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBiZlxcdTAwMTdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBjMFxcdTAwYzFcXHUwMDA3KVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGMxXFx1MDBjM1xcdTAwMDdcXHUwMDE4XFx1MDAwMlxcdTAwMDJcXHUwMGMyXFx1MDBjMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYzNcXHUwMGM2XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYzRcXHUwMGMyXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBjNFxcdTAwYzVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBjNVxcdTAwYzdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGM2XFx1MDBjNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGM3XFx1MDBjOFxcdTAwMDcpXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYzhcXHUwMDE5XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYzlcXHUwMGNhXFx1MDAwNylcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBjYVxcdTAwY2JcXHUwMDA3XFx1MDAwZVxcdTAwMDJcXHUwMDAyXFx1MDBjYlxcdTAwY2NcXHUwMDA3KFxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGNjXFx1MDBjZFxcdTAwMDdcXHUwMDBmXFx1MDAwMlxcdTAwMDJcXHUwMGNkXFx1MDBjZlxcdTAwMDdcXHUwMDE4XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwY2VcXHUwMGM5XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwY2ZcXHUwMGQyXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBkMFxcdTAwY2VcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBkMFxcdTAwZDFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGQxXFx1MDBkM1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGQyXFx1MDBkMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwZDNcXHUwMGY1XFx1MDAwNylcXHUwMDAyXFx1MDAwMlxcdTAwZDRcXHUwMGQ1XFx1MDAwNylcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBkNVxcdTAwZDZcXHUwMDA3XFx1MDAwZVxcdTAwMDJcXHUwMDAyXFx1MDBkNlxcdTAwZDdcXHUwMDA3KFxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGQ3XFx1MDBkOFxcdTAwMDdcXHUwMDBmXFx1MDAwMlxcdTAwMDJcXHUwMGQ4XFx1MDBkYVxcdTAwMDdcXHUwMDE4XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZDlcXHUwMGQ0XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZGFcXHUwMGRkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBkYlxcdTAwZDlcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBkYlxcdTAwZGNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGRjXFx1MDBkZVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGRkXFx1MDBkYlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZGVcXHUwMGRmXFx1MDAwNylcXHUwMDAyXFx1MDAwMlxcdTAwZGZcXHUwMGUwXFx1MDAwN1xcdTAwMGVcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBlMFxcdTAwZTFcXHUwMDA3KFxcdTAwMDJcXHUwMDAyXFx1MDBlMVxcdTAwZjVcXHUwMDA3XFx1MDAwZlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGUyXFx1MDBlM1xcdTAwMDcpXFx1MDAwMlxcdTAwMDJcXHUwMGUzXFx1MDBlNVxcdTAwMDdcXHUwMDE4XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZTRcXHUwMGUyXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZTVcXHUwMGU4XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBlNlxcdTAwZTRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlNlxcdTAwZTdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGU3XFx1MDBlOVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGU4XFx1MDBlNlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZTlcXHUwMGVhXFx1MDAwNylcXHUwMDAyXFx1MDAwMlxcdTAwZWFcXHUwMGVjXFx1MDAwN1xcdTAwMThcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBlYlxcdTAwZTZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlY1xcdTAwZWZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGVkXFx1MDBlYlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGVkXFx1MDBlZVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZWVcXHUwMGYwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZWZcXHUwMGVkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBmMFxcdTAwZjFcXHUwMDA3KVxcdTAwMDJcXHUwMDAyXFx1MDBmMVxcdTAwZjJcXHUwMDA3XFx1MDAwZVxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGYyXFx1MDBmM1xcdTAwMDcoXFx1MDAwMlxcdTAwMDJcXHUwMGYzXFx1MDBmNVxcdTAwMDdcXHUwMDBmXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZjRcXHUwMGQwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZjRcXHUwMGRiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBmNFxcdTAwZWRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmNVxcdTAwMWJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGY2XFx1MDBmY1xcdTAwMDcpXFx1MDAwMlxcdTAwMDJcXHUwMGY3XFx1MDBmOFxcdTAwMDcpXFx1MDAwMlxcdTAwMDJcXHUwMGY4XCIsXG4gICAgXCJcXHUwMGY5XFx1MDAwN1xcdTAwMGVcXHUwMDAyXFx1MDAwMlxcdTAwZjlcXHUwMGZhXFx1MDAwNyhcXHUwMDAyXFx1MDAwMlxcdTAwZmFcIixcbiAgICBcIlxcdTAwZmNcXHUwMDA3XFx1MDAwZlxcdTAwMDJcXHUwMDAyXFx1MDBmYlxcdTAwZjZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmYlwiLFxuICAgIFwiXFx1MDBmN1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZjXFx1MDAxZFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZkXCIsXG4gICAgXCJcXHUwMGZlXFx1MDAwNSBcXHUwMDExXFx1MDAwMlxcdTAwZmVcXHUwMGZmXFx1MDAwN1xcdTAwMThcXHUwMDAyXFx1MDAwMlxcdTAwZmZcIixcbiAgICBcIlxcdTAxMDFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwMFxcdTAwZmRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwMVwiLFxuICAgIFwiXFx1MDEwNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTAyXFx1MDEwMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTAyXCIsXG4gICAgXCJcXHUwMTAzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMDNcXHUwMTA1XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMDRcIixcbiAgICBcIlxcdTAxMDJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwNVxcdTAxMDZcXHUwMDA1IFxcdTAwMTFcXHUwMDAyXFx1MDEwNlwiLFxuICAgIFwiXFx1MDAxZlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTA3XFx1MDEwOVxcYlxcdTAwMTFcXHUwMDAxXFx1MDAwMlxcdTAxMDhcIixcbiAgICBcIlxcdTAxMGFcXHRcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTA5XFx1MDEwOFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTA5XCIsXG4gICAgXCJcXHUwMTBhXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMGFcXHUwMTBiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMGJcIixcbiAgICBcIlxcdTAxMGNcXHUwMDA3XFx1MDAwNlxcdTAwMDJcXHUwMDAyXFx1MDEwY1xcdTAxMGRcXHUwMDA1IFxcdTAwMTFcXHUwMDAyXFx1MDEwZFwiLFxuICAgIFwiXFx1MDEwZVxcdTAwMDdcXHUwMDA3XFx1MDAwMlxcdTAwMDJcXHUwMTBlXFx1MDExY1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTBmXCIsXG4gICAgXCJcXHUwMTExXFx0XFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExMFxcdTAxMGZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExMFwiLFxuICAgIFwiXFx1MDExMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTExXFx1MDExMlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTEyXCIsXG4gICAgXCJcXHUwMTEzXFx1MDAwNSRcXHUwMDEzXFx1MDAwMlxcdTAxMTNcXHUwMTE0XFx1MDAwN1xcdTAwMDZcXHUwMDAyXFx1MDAwMlxcdTAxMTRcIixcbiAgICBcIlxcdTAxMTVcXHUwMDA1IFxcdTAwMTFcXHUwMDAyXFx1MDExNVxcdTAxMTZcXHUwMDA3XFx1MDAwN1xcdTAwMDJcXHUwMDAyXFx1MDExNlwiLFxuICAgIFwiXFx1MDExY1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTE3XFx1MDExOVxcdFxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMThcIixcbiAgICBcIlxcdTAxMTdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExOFxcdTAxMTlcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExOVwiLFxuICAgIFwiXFx1MDExYVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTFhXFx1MDExY1xcdTAwMDVcXFwiXFx1MDAxMlxcdTAwMDJcXHUwMTFiXCIsXG4gICAgXCJcXHUwMTA3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMWJcXHUwMTEwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMWJcIixcbiAgICBcIlxcdTAxMThcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExY1xcdTAxMjhcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExZFwiLFxuICAgIFwiXFx1MDExZVxcZlxcYlxcdTAwMDJcXHUwMDAyXFx1MDExZVxcdTAxMWZcXHUwMDA3XFx1MDAxOVxcdTAwMDJcXHUwMDAyXFx1MDExZlxcdTAxMjdcIixcbiAgICBcIlxcdTAwMDUgXFx1MDAxMVxcdFxcdTAxMjBcXHUwMTIxXFxmXFx1MDAwN1xcdTAwMDJcXHUwMDAyXFx1MDEyMVxcdTAxMjJcXHRcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAxMjJcXHUwMTI3XFx1MDAwNSBcXHUwMDExXFxiXFx1MDEyM1xcdTAxMjRcXGZcXHUwMDA2XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAxMjRcXHUwMTI1XFx0XFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEyNVxcdTAxMjdcXHUwMDA1IFxcdTAwMTFcXHUwMDA3XFx1MDEyNlwiLFxuICAgIFwiXFx1MDExZFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTI2XFx1MDEyMFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTI2XCIsXG4gICAgXCJcXHUwMTIzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMjdcXHUwMTJhXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMjhcIixcbiAgICBcIlxcdTAxMjZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEyOFxcdTAxMjlcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEyOVwiLFxuICAgIFwiIVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTJhXFx1MDEyOFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTJiXCIsXG4gICAgXCJcXHUwMTJjXFx0XFx1MDAwNFxcdTAwMDJcXHUwMDAyXFx1MDEyYyNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEyZFxcdTAxMmVcIixcbiAgICBcIlxcdFxcdTAwMDVcXHUwMDAyXFx1MDAwMlxcdTAxMmUlXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTkqVm5cXHUwMDg0XFx1MDA4YlwiLFxuICAgIFwiXFx1MDA4ZFxcdTAwOWFcXHUwMGJhXFx1MDBiZVxcdTAwYzRcXHUwMGQwXFx1MDBkYlxcdTAwZTZcXHUwMGVkXFx1MDBmNFxcdTAwZmJcXHUwMTAyXCIsXG4gICAgXCJcXHUwMTA5XFx1MDExMFxcdTAxMThcXHUwMTFiXFx1MDEyNlxcdTAxMjhcIl0uam9pbihcIlwiKTtcblxuXG52YXIgYXRuID0gbmV3IGFudGxyNC5hdG4uQVRORGVzZXJpYWxpemVyKCkuZGVzZXJpYWxpemUoc2VyaWFsaXplZEFUTik7XG5cbnZhciBkZWNpc2lvbnNUb0RGQSA9IGF0bi5kZWNpc2lvblRvU3RhdGUubWFwKCBmdW5jdGlvbihkcywgaW5kZXgpIHsgcmV0dXJuIG5ldyBhbnRscjQuZGZhLkRGQShkcywgaW5kZXgpOyB9KTtcblxudmFyIHNoYXJlZENvbnRleHRDYWNoZSA9IG5ldyBhbnRscjQuUHJlZGljdGlvbkNvbnRleHRDYWNoZSgpO1xuXG52YXIgbGl0ZXJhbE5hbWVzID0gWyBudWxsLCBcIid9J1wiLCBcIidvcGFxdWUnXCIsIFwiJzsnXCIsIFwiJygnXCIsIFwiJyknXCIsIFwiJ2lmJ1wiLCBcbiAgICAgICAgICAgICAgICAgICAgIFwiJz09J1wiLCBcIidiYXJyaWVyJ1wiLCBcIidPUEVOUUFTTSdcIiwgXCInaW5jbHVkZSdcIiwgXCIncXJlZydcIiwgXG4gICAgICAgICAgICAgICAgICAgICBcIidbJ1wiLCBcIiddJ1wiLCBcIidjcmVnJ1wiLCBcIidnYXRlJ1wiLCBcIid7J1wiLCBcIidtZWFzdXJlJ1wiLCBcbiAgICAgICAgICAgICAgICAgICAgIFwiJy0+J1wiLCBcIidyZXNldCdcIiwgXCInVSdcIiwgXCInQ1gnXCIsIFwiJywnXCIsIFwiJ14nXCIsIFwiJyonXCIsIFxuICAgICAgICAgICAgICAgICAgICAgXCInLydcIiwgXCInKydcIiwgXCInLSdcIiwgXCInc2luJ1wiLCBcIidjb3MnXCIsIFwiJ3RhbidcIiwgXCInZXhwJ1wiLCBcbiAgICAgICAgICAgICAgICAgICAgIFwiJ2xuJ1wiLCBcIidzcXJ0J1wiLCBcIidwaSdcIiBdO1xuXG52YXIgc3ltYm9saWNOYW1lcyA9IFsgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXG4gICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXCJQSVwiLCBcIlJFQUxcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgXCJTVUJSRUFMXCIsIFwiRVhQUkVBTFwiLCBcIklOVFwiLCBcIklEXCIsIFwiV1NcIiwgXCJGSUxFTkFNRVwiLCBcbiAgICAgICAgICAgICAgICAgICAgICBcIkNPTU1FTlRcIiwgXCJMSU5FX0NPTU1FTlRcIiBdO1xuXG52YXIgcnVsZU5hbWVzID0gIFsgXCJtYWlucHJvZ1wiLCBcInN0YXRlbWVudFwiLCBcInZlcnNpb25cIiwgXCJpbmNsdWRlXCIsIFwiZmlsZW5hbWVcIiwgXG4gICAgICAgICAgICAgICAgICAgXCJkZWNsXCIsIFwiZ2F0ZWRlY2xcIiwgXCJnb3BsaXN0XCIsIFwicW9wXCIsIFwidW9wXCIsIFwiYW55bGlzdFwiLCBcbiAgICAgICAgICAgICAgICAgICBcImlkbGlzdFwiLCBcIm1peGVkbGlzdFwiLCBcImFyZ3VtZW50XCIsIFwiZXhwbGlzdFwiLCBcImV4cFwiLCBcbiAgICAgICAgICAgICAgICAgICBcImF0b21cIiwgXCJ1bmFyeW9wXCIgXTtcblxuZnVuY3Rpb24gUUFTTVBhcnNlciAoaW5wdXQpIHtcblx0YW50bHI0LlBhcnNlci5jYWxsKHRoaXMsIGlucHV0KTtcbiAgICB0aGlzLl9pbnRlcnAgPSBuZXcgYW50bHI0LmF0bi5QYXJzZXJBVE5TaW11bGF0b3IodGhpcywgYXRuLCBkZWNpc2lvbnNUb0RGQSwgc2hhcmVkQ29udGV4dENhY2hlKTtcbiAgICB0aGlzLnJ1bGVOYW1lcyA9IHJ1bGVOYW1lcztcbiAgICB0aGlzLmxpdGVyYWxOYW1lcyA9IGxpdGVyYWxOYW1lcztcbiAgICB0aGlzLnN5bWJvbGljTmFtZXMgPSBzeW1ib2xpY05hbWVzO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5RQVNNUGFyc2VyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlci5wcm90b3R5cGUpO1xuUUFTTVBhcnNlci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBRQVNNUGFyc2VyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUUFTTVBhcnNlci5wcm90b3R5cGUsIFwiYXRuXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGF0bjtcblx0fVxufSk7XG5cblFBU01QYXJzZXIuRU9GID0gYW50bHI0LlRva2VuLkVPRjtcblFBU01QYXJzZXIuVF9fMCA9IDE7XG5RQVNNUGFyc2VyLlRfXzEgPSAyO1xuUUFTTVBhcnNlci5UX18yID0gMztcblFBU01QYXJzZXIuVF9fMyA9IDQ7XG5RQVNNUGFyc2VyLlRfXzQgPSA1O1xuUUFTTVBhcnNlci5UX181ID0gNjtcblFBU01QYXJzZXIuVF9fNiA9IDc7XG5RQVNNUGFyc2VyLlRfXzcgPSA4O1xuUUFTTVBhcnNlci5UX184ID0gOTtcblFBU01QYXJzZXIuVF9fOSA9IDEwO1xuUUFTTVBhcnNlci5UX18xMCA9IDExO1xuUUFTTVBhcnNlci5UX18xMSA9IDEyO1xuUUFTTVBhcnNlci5UX18xMiA9IDEzO1xuUUFTTVBhcnNlci5UX18xMyA9IDE0O1xuUUFTTVBhcnNlci5UX18xNCA9IDE1O1xuUUFTTVBhcnNlci5UX18xNSA9IDE2O1xuUUFTTVBhcnNlci5UX18xNiA9IDE3O1xuUUFTTVBhcnNlci5UX18xNyA9IDE4O1xuUUFTTVBhcnNlci5UX18xOCA9IDE5O1xuUUFTTVBhcnNlci5UX18xOSA9IDIwO1xuUUFTTVBhcnNlci5UX18yMCA9IDIxO1xuUUFTTVBhcnNlci5UX18yMSA9IDIyO1xuUUFTTVBhcnNlci5UX18yMiA9IDIzO1xuUUFTTVBhcnNlci5UX18yMyA9IDI0O1xuUUFTTVBhcnNlci5UX18yNCA9IDI1O1xuUUFTTVBhcnNlci5UX18yNSA9IDI2O1xuUUFTTVBhcnNlci5UX18yNiA9IDI3O1xuUUFTTVBhcnNlci5UX18yNyA9IDI4O1xuUUFTTVBhcnNlci5UX18yOCA9IDI5O1xuUUFTTVBhcnNlci5UX18yOSA9IDMwO1xuUUFTTVBhcnNlci5UX18zMCA9IDMxO1xuUUFTTVBhcnNlci5UX18zMSA9IDMyO1xuUUFTTVBhcnNlci5UX18zMiA9IDMzO1xuUUFTTVBhcnNlci5QSSA9IDM0O1xuUUFTTVBhcnNlci5SRUFMID0gMzU7XG5RQVNNUGFyc2VyLlNVQlJFQUwgPSAzNjtcblFBU01QYXJzZXIuRVhQUkVBTCA9IDM3O1xuUUFTTVBhcnNlci5JTlQgPSAzODtcblFBU01QYXJzZXIuSUQgPSAzOTtcblFBU01QYXJzZXIuV1MgPSA0MDtcblFBU01QYXJzZXIuRklMRU5BTUUgPSA0MTtcblFBU01QYXJzZXIuQ09NTUVOVCA9IDQyO1xuUUFTTVBhcnNlci5MSU5FX0NPTU1FTlQgPSA0MztcblxuUUFTTVBhcnNlci5SVUxFX21haW5wcm9nID0gMDtcblFBU01QYXJzZXIuUlVMRV9zdGF0ZW1lbnQgPSAxO1xuUUFTTVBhcnNlci5SVUxFX3ZlcnNpb24gPSAyO1xuUUFTTVBhcnNlci5SVUxFX2luY2x1ZGUgPSAzO1xuUUFTTVBhcnNlci5SVUxFX2ZpbGVuYW1lID0gNDtcblFBU01QYXJzZXIuUlVMRV9kZWNsID0gNTtcblFBU01QYXJzZXIuUlVMRV9nYXRlZGVjbCA9IDY7XG5RQVNNUGFyc2VyLlJVTEVfZ29wbGlzdCA9IDc7XG5RQVNNUGFyc2VyLlJVTEVfcW9wID0gODtcblFBU01QYXJzZXIuUlVMRV91b3AgPSA5O1xuUUFTTVBhcnNlci5SVUxFX2FueWxpc3QgPSAxMDtcblFBU01QYXJzZXIuUlVMRV9pZGxpc3QgPSAxMTtcblFBU01QYXJzZXIuUlVMRV9taXhlZGxpc3QgPSAxMjtcblFBU01QYXJzZXIuUlVMRV9hcmd1bWVudCA9IDEzO1xuUUFTTVBhcnNlci5SVUxFX2V4cGxpc3QgPSAxNDtcblFBU01QYXJzZXIuUlVMRV9leHAgPSAxNTtcblFBU01QYXJzZXIuUlVMRV9hdG9tID0gMTY7XG5RQVNNUGFyc2VyLlJVTEVfdW5hcnlvcCA9IDE3O1xuXG5mdW5jdGlvbiBNYWlucHJvZ0NvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV9tYWlucHJvZztcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTWFpbnByb2dDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5NYWlucHJvZ0NvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTWFpbnByb2dDb250ZXh0O1xuXG5NYWlucHJvZ0NvbnRleHQucHJvdG90eXBlLnZlcnNpb24gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KFZlcnNpb25Db250ZXh0LDApO1xufTtcblxuTWFpbnByb2dDb250ZXh0LnByb3RvdHlwZS5zdGF0ZW1lbnQgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYoaT09PXVuZGVmaW5lZCkge1xuICAgICAgICBpID0gbnVsbDtcbiAgICB9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dHMoU3RhdGVtZW50Q29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChTdGF0ZW1lbnRDb250ZXh0LGkpO1xuICAgIH1cbn07XG5cbk1haW5wcm9nQ29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJNYWlucHJvZyh0aGlzKTtcblx0fVxufTtcblxuTWFpbnByb2dDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRNYWlucHJvZyh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5NYWlucHJvZ0NvbnRleHQgPSBNYWlucHJvZ0NvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLm1haW5wcm9nID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgTWFpbnByb2dDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDAsIFFBU01QYXJzZXIuUlVMRV9tYWlucHJvZyk7XG4gICAgdmFyIF9sYSA9IDA7IC8vIFRva2VuIHR5cGVcbiAgICB0cnkge1xuICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gMzY7XG4gICAgICAgIHRoaXMudmVyc2lvbigpO1xuICAgICAgICB0aGlzLnN0YXRlID0gNDA7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgX2xhID0gdGhpcy5faW5wdXQuTEEoMSk7XG4gICAgICAgIHdoaWxlKCgoKF9sYSkgJiB+MHgxZikgPT0gMCAmJiAoKDEgPDwgX2xhKSAmICgoMSA8PCBRQVNNUGFyc2VyLlRfXzEpIHwgKDEgPDwgUUFTTVBhcnNlci5UX181KSB8ICgxIDw8IFFBU01QYXJzZXIuVF9fNykgfCAoMSA8PCBRQVNNUGFyc2VyLlRfXzkpIHwgKDEgPDwgUUFTTVBhcnNlci5UX18xMCkgfCAoMSA8PCBRQVNNUGFyc2VyLlRfXzEzKSB8ICgxIDw8IFFBU01QYXJzZXIuVF9fMTQpIHwgKDEgPDwgUUFTTVBhcnNlci5UX18xNikgfCAoMSA8PCBRQVNNUGFyc2VyLlRfXzE4KSB8ICgxIDw8IFFBU01QYXJzZXIuVF9fMTkpIHwgKDEgPDwgUUFTTVBhcnNlci5UX18yMCkpKSAhPT0gMCkgfHwgX2xhPT09UUFTTVBhcnNlci5JRCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDM3O1xuICAgICAgICAgICAgdGhpcy5zdGF0ZW1lbnQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0MjtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gU3RhdGVtZW50Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX3N0YXRlbWVudDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuU3RhdGVtZW50Q29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuU3RhdGVtZW50Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTdGF0ZW1lbnRDb250ZXh0O1xuXG5TdGF0ZW1lbnRDb250ZXh0LnByb3RvdHlwZS5kZWNsID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChEZWNsQ29udGV4dCwwKTtcbn07XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLmdhdGVkZWNsID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChHYXRlZGVjbENvbnRleHQsMCk7XG59O1xuXG5TdGF0ZW1lbnRDb250ZXh0LnByb3RvdHlwZS5nb3BsaXN0ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChHb3BsaXN0Q29udGV4dCwwKTtcbn07XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLklEID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW4oUUFTTVBhcnNlci5JRCwgMCk7XG59O1xuXG5TdGF0ZW1lbnRDb250ZXh0LnByb3RvdHlwZS5pZGxpc3QgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYoaT09PXVuZGVmaW5lZCkge1xuICAgICAgICBpID0gbnVsbDtcbiAgICB9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dHMoSWRsaXN0Q29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChJZGxpc3RDb250ZXh0LGkpO1xuICAgIH1cbn07XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLnFvcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHQoUW9wQ29udGV4dCwwKTtcbn07XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLklOVCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSU5ULCAwKTtcbn07XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLmFueWxpc3QgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KEFueWxpc3RDb250ZXh0LDApO1xufTtcblxuU3RhdGVtZW50Q29udGV4dC5wcm90b3R5cGUuaW5jbHVkZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHQoSW5jbHVkZUNvbnRleHQsMCk7XG59O1xuXG5TdGF0ZW1lbnRDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlclN0YXRlbWVudCh0aGlzKTtcblx0fVxufTtcblxuU3RhdGVtZW50Q29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0U3RhdGVtZW50KHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLlN0YXRlbWVudENvbnRleHQgPSBTdGF0ZW1lbnRDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5zdGF0ZW1lbnQgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBTdGF0ZW1lbnRDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDIsIFFBU01QYXJzZXIuUlVMRV9zdGF0ZW1lbnQpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSA4NDtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICB2YXIgbGFfID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxLHRoaXMuX2N0eCk7XG4gICAgICAgIHN3aXRjaChsYV8pIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0MztcbiAgICAgICAgICAgIHRoaXMuZGVjbCgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAyKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0NDtcbiAgICAgICAgICAgIHRoaXMuZ2F0ZWRlY2woKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0NTtcbiAgICAgICAgICAgIHRoaXMuZ29wbGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDQ2O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAzKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0ODtcbiAgICAgICAgICAgIHRoaXMuZ2F0ZWRlY2woKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA0OTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18wKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNTE7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNTI7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDUzO1xuICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA1NDtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgNSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNTY7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNTc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDU4O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzMpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDU5O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDYwO1xuICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA2MTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgNik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNjM7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNjQ7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDY1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzMpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDY2O1xuICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA2NztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX180KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA2ODtcbiAgICAgICAgICAgIHRoaXMuaWRsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNjk7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDcpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDcxO1xuICAgICAgICAgICAgdGhpcy5xb3AoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgOCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNzI7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNzM7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNzQ7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDc1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzYpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDc2O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklOVCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNzc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNzg7XG4gICAgICAgICAgICB0aGlzLnFvcCgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCA5KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA3OTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX183KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA4MDtcbiAgICAgICAgICAgIHRoaXMuYW55bGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDgxO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMTApO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDgzO1xuICAgICAgICAgICAgdGhpcy5pbmNsdWRlKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gVmVyc2lvbkNvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV92ZXJzaW9uO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5WZXJzaW9uQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuVmVyc2lvbkNvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVmVyc2lvbkNvbnRleHQ7XG5cblZlcnNpb25Db250ZXh0LnByb3RvdHlwZS5SRUFMID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW4oUUFTTVBhcnNlci5SRUFMLCAwKTtcbn07XG5cblZlcnNpb25Db250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlclZlcnNpb24odGhpcyk7XG5cdH1cbn07XG5cblZlcnNpb25Db250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRWZXJzaW9uKHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLlZlcnNpb25Db250ZXh0ID0gVmVyc2lvbkNvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLnZlcnNpb24gPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBWZXJzaW9uQ29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCA0LCBRQVNNUGFyc2VyLlJVTEVfdmVyc2lvbik7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDg2O1xuICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fOCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSA4NztcbiAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlJFQUwpO1xuICAgICAgICB0aGlzLnN0YXRlID0gODg7XG4gICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBJbmNsdWRlQ29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX2luY2x1ZGU7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkluY2x1ZGVDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5JbmNsdWRlQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbmNsdWRlQ29udGV4dDtcblxuSW5jbHVkZUNvbnRleHQucHJvdG90eXBlLmZpbGVuYW1lID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChGaWxlbmFtZUNvbnRleHQsMCk7XG59O1xuXG5JbmNsdWRlQ29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJJbmNsdWRlKHRoaXMpO1xuXHR9XG59O1xuXG5JbmNsdWRlQ29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0SW5jbHVkZSh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5JbmNsdWRlQ29udGV4dCA9IEluY2x1ZGVDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5pbmNsdWRlID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgSW5jbHVkZUNvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgNiwgUUFTTVBhcnNlci5SVUxFX2luY2x1ZGUpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSA5MDtcbiAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzkpO1xuICAgICAgICB0aGlzLnN0YXRlID0gOTE7XG4gICAgICAgIHRoaXMuZmlsZW5hbWUoKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDkyO1xuICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMik7XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gRmlsZW5hbWVDb250ZXh0KHBhcnNlciwgcGFyZW50LCBpbnZva2luZ1N0YXRlKSB7XG5cdGlmKHBhcmVudD09PXVuZGVmaW5lZCkge1xuXHQgICAgcGFyZW50ID0gbnVsbDtcblx0fVxuXHRpZihpbnZva2luZ1N0YXRlPT09dW5kZWZpbmVkIHx8IGludm9raW5nU3RhdGU9PT1udWxsKSB7XG5cdFx0aW52b2tpbmdTdGF0ZSA9IC0xO1xuXHR9XG5cdGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5jYWxsKHRoaXMsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBRQVNNUGFyc2VyLlJVTEVfZmlsZW5hbWU7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkZpbGVuYW1lQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuRmlsZW5hbWVDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbGVuYW1lQ29udGV4dDtcblxuRmlsZW5hbWVDb250ZXh0LnByb3RvdHlwZS5GSUxFTkFNRSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuRklMRU5BTUUsIDApO1xufTtcblxuRmlsZW5hbWVDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlckZpbGVuYW1lKHRoaXMpO1xuXHR9XG59O1xuXG5GaWxlbmFtZUNvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdEZpbGVuYW1lKHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLkZpbGVuYW1lQ29udGV4dCA9IEZpbGVuYW1lQ29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuZmlsZW5hbWUgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBGaWxlbmFtZUNvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgOCwgUUFTTVBhcnNlci5SVUxFX2ZpbGVuYW1lKTtcbiAgICB0cnkge1xuICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gOTQ7XG4gICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5GSUxFTkFNRSk7XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gRGVjbENvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV9kZWNsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5EZWNsQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuRGVjbENvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGVjbENvbnRleHQ7XG5cbkRlY2xDb250ZXh0LnByb3RvdHlwZS5JRCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSUQsIDApO1xufTtcblxuRGVjbENvbnRleHQucHJvdG90eXBlLklOVCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSU5ULCAwKTtcbn07XG5cbkRlY2xDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlckRlY2wodGhpcyk7XG5cdH1cbn07XG5cbkRlY2xDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXREZWNsKHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLkRlY2xDb250ZXh0ID0gRGVjbENvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLmRlY2wgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBEZWNsQ29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCAxMCwgUUFTTVBhcnNlci5SVUxFX2RlY2wpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAxMDg7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgc3dpdGNoKHRoaXMuX2lucHV0LkxBKDEpKSB7XG4gICAgICAgIGNhc2UgUUFTTVBhcnNlci5UX18xMDpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gOTY7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTApO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDk3O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA5ODtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gOTk7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSU5UKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMDA7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTIpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEwMTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFFBU01QYXJzZXIuVF9fMTM6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDIpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEwMjtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTAzO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMDQ7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEwNTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JTlQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEwNjtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTA3O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgYW50bHI0LmVycm9yLk5vVmlhYmxlQWx0RXhjZXB0aW9uKHRoaXMpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gR2F0ZWRlY2xDb250ZXh0KHBhcnNlciwgcGFyZW50LCBpbnZva2luZ1N0YXRlKSB7XG5cdGlmKHBhcmVudD09PXVuZGVmaW5lZCkge1xuXHQgICAgcGFyZW50ID0gbnVsbDtcblx0fVxuXHRpZihpbnZva2luZ1N0YXRlPT09dW5kZWZpbmVkIHx8IGludm9raW5nU3RhdGU9PT1udWxsKSB7XG5cdFx0aW52b2tpbmdTdGF0ZSA9IC0xO1xuXHR9XG5cdGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5jYWxsKHRoaXMsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBRQVNNUGFyc2VyLlJVTEVfZ2F0ZWRlY2w7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkdhdGVkZWNsQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuR2F0ZWRlY2xDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdhdGVkZWNsQ29udGV4dDtcblxuR2F0ZWRlY2xDb250ZXh0LnByb3RvdHlwZS5JRCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSUQsIDApO1xufTtcblxuR2F0ZWRlY2xDb250ZXh0LnByb3RvdHlwZS5pZGxpc3QgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYoaT09PXVuZGVmaW5lZCkge1xuICAgICAgICBpID0gbnVsbDtcbiAgICB9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dHMoSWRsaXN0Q29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChJZGxpc3RDb250ZXh0LGkpO1xuICAgIH1cbn07XG5cbkdhdGVkZWNsQ29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJHYXRlZGVjbCh0aGlzKTtcblx0fVxufTtcblxuR2F0ZWRlY2xDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRHYXRlZGVjbCh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5HYXRlZGVjbENvbnRleHQgPSBHYXRlZGVjbENvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLmdhdGVkZWNsID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgR2F0ZWRlY2xDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDEyLCBRQVNNUGFyc2VyLlJVTEVfZ2F0ZWRlY2wpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAxMzA7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgdmFyIGxhXyA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMyx0aGlzLl9jdHgpO1xuICAgICAgICBzd2l0Y2gobGFfKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTEwO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE0KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMTE7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDExMjtcbiAgICAgICAgICAgIHRoaXMuaWRsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTEzO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE1KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTE1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE0KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMTY7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDExNztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18zKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMTg7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTE5O1xuICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMjA7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAzKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMjI7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEyMztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTI0O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzMpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEyNTtcbiAgICAgICAgICAgIHRoaXMuaWRsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTI2O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEyNztcbiAgICAgICAgICAgIHRoaXMuaWRsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTI4O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE1KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBHb3BsaXN0Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX2dvcGxpc3Q7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkdvcGxpc3RDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5Hb3BsaXN0Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBHb3BsaXN0Q29udGV4dDtcblxuR29wbGlzdENvbnRleHQucHJvdG90eXBlLnVvcCA9IGZ1bmN0aW9uKGkpIHtcbiAgICBpZihpPT09dW5kZWZpbmVkKSB7XG4gICAgICAgIGkgPSBudWxsO1xuICAgIH1cbiAgICBpZihpPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0cyhVb3BDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KFVvcENvbnRleHQsaSk7XG4gICAgfVxufTtcblxuR29wbGlzdENvbnRleHQucHJvdG90eXBlLmlkbGlzdCA9IGZ1bmN0aW9uKGkpIHtcbiAgICBpZihpPT09dW5kZWZpbmVkKSB7XG4gICAgICAgIGkgPSBudWxsO1xuICAgIH1cbiAgICBpZihpPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0cyhJZGxpc3RDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KElkbGlzdENvbnRleHQsaSk7XG4gICAgfVxufTtcblxuR29wbGlzdENvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmVudGVyR29wbGlzdCh0aGlzKTtcblx0fVxufTtcblxuR29wbGlzdENvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdEdvcGxpc3QodGhpcyk7XG5cdH1cbn07XG5cblxuXG5cblFBU01QYXJzZXIuR29wbGlzdENvbnRleHQgPSBHb3BsaXN0Q29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuZ29wbGlzdCA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIGxvY2FsY3R4ID0gbmV3IEdvcGxpc3RDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDE0LCBRQVNNUGFyc2VyLlJVTEVfZ29wbGlzdCk7XG4gICAgdmFyIF9sYSA9IDA7IC8vIFRva2VuIHR5cGVcbiAgICB0cnkge1xuICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gMTM3OyBcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgZG8ge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEzNztcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIHN3aXRjaCh0aGlzLl9pbnB1dC5MQSgxKSkge1xuICAgICAgICAgICAgY2FzZSBRQVNNUGFyc2VyLlRfXzE5OlxuICAgICAgICAgICAgY2FzZSBRQVNNUGFyc2VyLlRfXzIwOlxuICAgICAgICAgICAgY2FzZSBRQVNNUGFyc2VyLklEOlxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMzI7XG4gICAgICAgICAgICAgICAgdGhpcy51b3AoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgUUFTTVBhcnNlci5UX183OlxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMzM7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzcpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMzQ7XG4gICAgICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMTM1O1xuICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IGFudGxyNC5lcnJvci5Ob1ZpYWJsZUFsdEV4Y2VwdGlvbih0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMzk7IFxuICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICAgICAgX2xhID0gdGhpcy5faW5wdXQuTEEoMSk7XG4gICAgICAgIH0gd2hpbGUoKCgoKF9sYSAtIDgpKSAmIH4weDFmKSA9PSAwICYmICgoMSA8PCAoX2xhIC0gOCkpICYgKCgxIDw8IChRQVNNUGFyc2VyLlRfXzcgLSA4KSkgfCAoMSA8PCAoUUFTTVBhcnNlci5UX18xOSAtIDgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzIwIC0gOCkpIHwgKDEgPDwgKFFBU01QYXJzZXIuSUQgLSA4KSkpKSAhPT0gMCkpO1xuICAgIH0gY2F0Y2ggKHJlKSB7XG4gICAgXHRpZihyZSBpbnN0YW5jZW9mIGFudGxyNC5lcnJvci5SZWNvZ25pdGlvbkV4Y2VwdGlvbikge1xuXHQgICAgICAgIGxvY2FsY3R4LmV4Y2VwdGlvbiA9IHJlO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgXHR0aHJvdyByZTtcblx0ICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmV4aXRSdWxlKCk7XG4gICAgfVxuICAgIHJldHVybiBsb2NhbGN0eDtcbn07XG5cbmZ1bmN0aW9uIFFvcENvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV9xb3A7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblFvcENvbnRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlKTtcblFvcENvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUW9wQ29udGV4dDtcblxuUW9wQ29udGV4dC5wcm90b3R5cGUudW9wID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChVb3BDb250ZXh0LDApO1xufTtcblxuUW9wQ29udGV4dC5wcm90b3R5cGUuYXJndW1lbnQgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYoaT09PXVuZGVmaW5lZCkge1xuICAgICAgICBpID0gbnVsbDtcbiAgICB9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dHMoQXJndW1lbnRDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KEFyZ3VtZW50Q29udGV4dCxpKTtcbiAgICB9XG59O1xuXG5Rb3BDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlclFvcCh0aGlzKTtcblx0fVxufTtcblxuUW9wQ29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0UW9wKHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLlFvcENvbnRleHQgPSBRb3BDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5xb3AgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBRb3BDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDE2LCBRQVNNUGFyc2VyLlJVTEVfcW9wKTtcbiAgICB0cnkge1xuICAgICAgICB0aGlzLnN0YXRlID0gMTUyO1xuICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgIHN3aXRjaCh0aGlzLl9pbnB1dC5MQSgxKSkge1xuICAgICAgICBjYXNlIFFBU01QYXJzZXIuVF9fMTk6XG4gICAgICAgIGNhc2UgUUFTTVBhcnNlci5UX18yMDpcbiAgICAgICAgY2FzZSBRQVNNUGFyc2VyLklEOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNDE7XG4gICAgICAgICAgICB0aGlzLnVvcCgpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgUUFTTVBhcnNlci5UX18xNjpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTQyO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE2KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNDM7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTQ0O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE3KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNDU7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTQ2O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgUUFTTVBhcnNlci5UX18xODpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTQ4O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzE4KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNDk7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTUwO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgYW50bHI0LmVycm9yLk5vVmlhYmxlQWx0RXhjZXB0aW9uKHRoaXMpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gVW9wQ29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX3VvcDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuVW9wQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuVW9wQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBVb3BDb250ZXh0O1xuXG5Vb3BDb250ZXh0LnByb3RvdHlwZS5leHBsaXN0ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChFeHBsaXN0Q29udGV4dCwwKTtcbn07XG5cblVvcENvbnRleHQucHJvdG90eXBlLmFyZ3VtZW50ID0gZnVuY3Rpb24oaSkge1xuICAgIGlmKGk9PT11bmRlZmluZWQpIHtcbiAgICAgICAgaSA9IG51bGw7XG4gICAgfVxuICAgIGlmKGk9PT1udWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHRzKEFyZ3VtZW50Q29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChBcmd1bWVudENvbnRleHQsaSk7XG4gICAgfVxufTtcblxuVW9wQ29udGV4dC5wcm90b3R5cGUuSUQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUb2tlbihRQVNNUGFyc2VyLklELCAwKTtcbn07XG5cblVvcENvbnRleHQucHJvdG90eXBlLmFueWxpc3QgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KEFueWxpc3RDb250ZXh0LDApO1xufTtcblxuVW9wQ29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJVb3AodGhpcyk7XG5cdH1cbn07XG5cblVvcENvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdFVvcCh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5Vb3BDb250ZXh0ID0gVW9wQ29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUudW9wID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgVW9wQ29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCAxOCwgUUFTTVBhcnNlci5SVUxFX3VvcCk7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDE4NDtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICB2YXIgbGFfID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCw3LHRoaXMuX2N0eCk7XG4gICAgICAgIHN3aXRjaChsYV8pIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNTQ7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTkpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE1NTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18zKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNTY7XG4gICAgICAgICAgICB0aGlzLmV4cGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNTc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTU4O1xuICAgICAgICAgICAgdGhpcy5hcmd1bWVudCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE1OTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTYxO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIwKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNjI7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTYzO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNjQ7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTY1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAzKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNjc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE2ODtcbiAgICAgICAgICAgIHRoaXMuYW55bGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE2OTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTcxO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNzI7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTczO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE3NDtcbiAgICAgICAgICAgIHRoaXMuYW55bGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE3NTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgNSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTc3O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNzg7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTc5O1xuICAgICAgICAgICAgdGhpcy5leHBsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTgwO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE4MTtcbiAgICAgICAgICAgIHRoaXMuYW55bGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE4MjtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBBbnlsaXN0Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX2FueWxpc3Q7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkFueWxpc3RDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5BbnlsaXN0Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBbnlsaXN0Q29udGV4dDtcblxuQW55bGlzdENvbnRleHQucHJvdG90eXBlLmlkbGlzdCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHQoSWRsaXN0Q29udGV4dCwwKTtcbn07XG5cbkFueWxpc3RDb250ZXh0LnByb3RvdHlwZS5taXhlZGxpc3QgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KE1peGVkbGlzdENvbnRleHQsMCk7XG59O1xuXG5BbnlsaXN0Q29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJBbnlsaXN0KHRoaXMpO1xuXHR9XG59O1xuXG5BbnlsaXN0Q29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0QW55bGlzdCh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5BbnlsaXN0Q29udGV4dCA9IEFueWxpc3RDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5hbnlsaXN0ID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgQW55bGlzdENvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgMjAsIFFBU01QYXJzZXIuUlVMRV9hbnlsaXN0KTtcbiAgICB0cnkge1xuICAgICAgICB0aGlzLnN0YXRlID0gMTg4O1xuICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgIHZhciBsYV8gPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDgsdGhpcy5fY3R4KTtcbiAgICAgICAgc3dpdGNoKGxhXykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE4NjtcbiAgICAgICAgICAgIHRoaXMuaWRsaXN0KCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDIpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE4NztcbiAgICAgICAgICAgIHRoaXMubWl4ZWRsaXN0KCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gSWRsaXN0Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX2lkbGlzdDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuSWRsaXN0Q29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuSWRsaXN0Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJZGxpc3RDb250ZXh0O1xuXG5JZGxpc3RDb250ZXh0LnByb3RvdHlwZS5JRCA9IGZ1bmN0aW9uKGkpIHtcblx0aWYoaT09PXVuZGVmaW5lZCkge1xuXHRcdGkgPSBudWxsO1xuXHR9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5zKFFBU01QYXJzZXIuSUQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSUQsIGkpO1xuICAgIH1cbn07XG5cblxuSWRsaXN0Q29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJJZGxpc3QodGhpcyk7XG5cdH1cbn07XG5cbklkbGlzdENvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdElkbGlzdCh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5JZGxpc3RDb250ZXh0ID0gSWRsaXN0Q29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuaWRsaXN0ID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgSWRsaXN0Q29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCAyMiwgUUFTTVBhcnNlci5SVUxFX2lkbGlzdCk7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDE5NDtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICB2YXIgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsOSx0aGlzLl9jdHgpXG4gICAgICAgIHdoaWxlKF9hbHQhPTIgJiYgX2FsdCE9YW50bHI0LmF0bi5BVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICBpZihfYWx0PT09MSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxOTA7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMTkxO1xuICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yMSk7IFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE5NjtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDksdGhpcy5fY3R4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhdGUgPSAxOTc7XG4gICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gTWl4ZWRsaXN0Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX21peGVkbGlzdDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTWl4ZWRsaXN0Q29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuTWl4ZWRsaXN0Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNaXhlZGxpc3RDb250ZXh0O1xuXG5NaXhlZGxpc3RDb250ZXh0LnByb3RvdHlwZS5JRCA9IGZ1bmN0aW9uKGkpIHtcblx0aWYoaT09PXVuZGVmaW5lZCkge1xuXHRcdGkgPSBudWxsO1xuXHR9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5zKFFBU01QYXJzZXIuSUQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSUQsIGkpO1xuICAgIH1cbn07XG5cblxuTWl4ZWRsaXN0Q29udGV4dC5wcm90b3R5cGUuSU5UID0gZnVuY3Rpb24oaSkge1xuXHRpZihpPT09dW5kZWZpbmVkKSB7XG5cdFx0aSA9IG51bGw7XG5cdH1cbiAgICBpZihpPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUb2tlbnMoUUFTTVBhcnNlci5JTlQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSU5ULCBpKTtcbiAgICB9XG59O1xuXG5cbk1peGVkbGlzdENvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmVudGVyTWl4ZWRsaXN0KHRoaXMpO1xuXHR9XG59O1xuXG5NaXhlZGxpc3RDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRNaXhlZGxpc3QodGhpcyk7XG5cdH1cbn07XG5cblxuXG5cblFBU01QYXJzZXIuTWl4ZWRsaXN0Q29udGV4dCA9IE1peGVkbGlzdENvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLm1peGVkbGlzdCA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIGxvY2FsY3R4ID0gbmV3IE1peGVkbGlzdENvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgMjQsIFFBU01QYXJzZXIuUlVMRV9taXhlZGxpc3QpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAyNDI7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgdmFyIGxhXyA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMTQsdGhpcy5fY3R4KTtcbiAgICAgICAgc3dpdGNoKGxhXykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIwNjtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIHZhciBfYWx0ID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxMCx0aGlzLl9jdHgpXG4gICAgICAgICAgICB3aGlsZShfYWx0IT0yICYmIF9hbHQhPWFudGxyNC5hdG4uQVROLklOVkFMSURfQUxUX05VTUJFUikge1xuICAgICAgICAgICAgICAgIGlmKF9hbHQ9PT0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxOTk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMDA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMDE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JTlQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjAyO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjAzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMjEpOyBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIwODtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICAgICAgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMTAsdGhpcy5fY3R4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIwOTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDIpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIxNztcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIHZhciBfYWx0ID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxMSx0aGlzLl9jdHgpXG4gICAgICAgICAgICB3aGlsZShfYWx0IT0yICYmIF9hbHQhPWFudGxyNC5hdG4uQVROLklOVkFMSURfQUxUX05VTUJFUikge1xuICAgICAgICAgICAgICAgIGlmKF9hbHQ9PT0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMTA7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMTE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMTI7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JTlQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjEzO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjE0O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMjEpOyBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIxOTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICAgICAgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMTEsdGhpcy5fY3R4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIyMDtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjIxO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzExKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMjI7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSU5UKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMjM7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAzKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMzU7XG4gICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICB2YXIgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMTMsdGhpcy5fY3R4KVxuICAgICAgICAgICAgd2hpbGUoX2FsdCE9MiAmJiBfYWx0IT1hbnRscjQuYXRuLkFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgICAgICAgICBpZihfYWx0PT09MSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjI4O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfYWx0ID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxMix0aGlzLl9jdHgpXG4gICAgICAgICAgICAgICAgICAgIHdoaWxlKF9hbHQhPTIgJiYgX2FsdCE9YW50bHI0LmF0bi5BVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZihfYWx0PT09MSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMjQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjI1O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yMSk7IFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIzMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDEyLHRoaXMuX2N0eCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjMxO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjMyO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMjEpOyBcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIzNztcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICAgICAgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMTMsdGhpcy5fY3R4KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIzODtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjM5O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzExKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNDA7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSU5UKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNDE7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKHJlKSB7XG4gICAgXHRpZihyZSBpbnN0YW5jZW9mIGFudGxyNC5lcnJvci5SZWNvZ25pdGlvbkV4Y2VwdGlvbikge1xuXHQgICAgICAgIGxvY2FsY3R4LmV4Y2VwdGlvbiA9IHJlO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgXHR0aHJvdyByZTtcblx0ICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmV4aXRSdWxlKCk7XG4gICAgfVxuICAgIHJldHVybiBsb2NhbGN0eDtcbn07XG5cbmZ1bmN0aW9uIEFyZ3VtZW50Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX2FyZ3VtZW50O1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5Bcmd1bWVudENvbnRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlKTtcbkFyZ3VtZW50Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBcmd1bWVudENvbnRleHQ7XG5cbkFyZ3VtZW50Q29udGV4dC5wcm90b3R5cGUuSUQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUb2tlbihRQVNNUGFyc2VyLklELCAwKTtcbn07XG5cbkFyZ3VtZW50Q29udGV4dC5wcm90b3R5cGUuSU5UID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW4oUUFTTVBhcnNlci5JTlQsIDApO1xufTtcblxuQXJndW1lbnRDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlckFyZ3VtZW50KHRoaXMpO1xuXHR9XG59O1xuXG5Bcmd1bWVudENvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdEFyZ3VtZW50KHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLkFyZ3VtZW50Q29udGV4dCA9IEFyZ3VtZW50Q29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuYXJndW1lbnQgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBBcmd1bWVudENvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgMjYsIFFBU01QYXJzZXIuUlVMRV9hcmd1bWVudCk7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDI0OTtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICB2YXIgbGFfID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxNSx0aGlzLl9jdHgpO1xuICAgICAgICBzd2l0Y2gobGFfKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjQ0O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjQ1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNDY7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI0NztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JTlQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI0ODtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gRXhwbGlzdENvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV9leHBsaXN0O1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5FeHBsaXN0Q29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuRXhwbGlzdENvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRXhwbGlzdENvbnRleHQ7XG5cbkV4cGxpc3RDb250ZXh0LnByb3RvdHlwZS5leHAgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYoaT09PXVuZGVmaW5lZCkge1xuICAgICAgICBpID0gbnVsbDtcbiAgICB9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dHMoRXhwQ29udGV4dCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChFeHBDb250ZXh0LGkpO1xuICAgIH1cbn07XG5cbkV4cGxpc3RDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlckV4cGxpc3QodGhpcyk7XG5cdH1cbn07XG5cbkV4cGxpc3RDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRFeHBsaXN0KHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLkV4cGxpc3RDb250ZXh0ID0gRXhwbGlzdENvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLmV4cGxpc3QgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBFeHBsaXN0Q29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCAyOCwgUUFTTVBhcnNlci5SVUxFX2V4cGxpc3QpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAyNTY7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgdmFyIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDE2LHRoaXMuX2N0eClcbiAgICAgICAgd2hpbGUoX2FsdCE9MiAmJiBfYWx0IT1hbnRscjQuYXRuLkFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgICAgIGlmKF9hbHQ9PT0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI1MTtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cCgwKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjUyO1xuICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yMSk7IFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI1ODtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDE2LHRoaXMuX2N0eCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXRlID0gMjU5O1xuICAgICAgICB0aGlzLmV4cCgwKTtcbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBFeHBDb250ZXh0KHBhcnNlciwgcGFyZW50LCBpbnZva2luZ1N0YXRlKSB7XG5cdGlmKHBhcmVudD09PXVuZGVmaW5lZCkge1xuXHQgICAgcGFyZW50ID0gbnVsbDtcblx0fVxuXHRpZihpbnZva2luZ1N0YXRlPT09dW5kZWZpbmVkIHx8IGludm9raW5nU3RhdGU9PT1udWxsKSB7XG5cdFx0aW52b2tpbmdTdGF0ZSA9IC0xO1xuXHR9XG5cdGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5jYWxsKHRoaXMsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBRQVNNUGFyc2VyLlJVTEVfZXhwO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5FeHBDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5FeHBDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEV4cENvbnRleHQ7XG5cbkV4cENvbnRleHQucHJvdG90eXBlLmV4cCA9IGZ1bmN0aW9uKGkpIHtcbiAgICBpZihpPT09dW5kZWZpbmVkKSB7XG4gICAgICAgIGkgPSBudWxsO1xuICAgIH1cbiAgICBpZihpPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0cyhFeHBDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KEV4cENvbnRleHQsaSk7XG4gICAgfVxufTtcblxuRXhwQ29udGV4dC5wcm90b3R5cGUudW5hcnlvcCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHQoVW5hcnlvcENvbnRleHQsMCk7XG59O1xuXG5FeHBDb250ZXh0LnByb3RvdHlwZS5hdG9tID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChBdG9tQ29udGV4dCwwKTtcbn07XG5cbkV4cENvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmVudGVyRXhwKHRoaXMpO1xuXHR9XG59O1xuXG5FeHBDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRFeHAodGhpcyk7XG5cdH1cbn07XG5cblxuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5leHAgPSBmdW5jdGlvbihfcCkge1xuXHRpZihfcD09PXVuZGVmaW5lZCkge1xuXHQgICAgX3AgPSAwO1xuXHR9XG4gICAgdmFyIF9wYXJlbnRjdHggPSB0aGlzLl9jdHg7XG4gICAgdmFyIF9wYXJlbnRTdGF0ZSA9IHRoaXMuc3RhdGU7XG4gICAgdmFyIGxvY2FsY3R4ID0gbmV3IEV4cENvbnRleHQodGhpcywgdGhpcy5fY3R4LCBfcGFyZW50U3RhdGUpO1xuICAgIHZhciBfcHJldmN0eCA9IGxvY2FsY3R4O1xuICAgIHZhciBfc3RhcnRTdGF0ZSA9IDMwO1xuICAgIHRoaXMuZW50ZXJSZWN1cnNpb25SdWxlKGxvY2FsY3R4LCAzMCwgUUFTTVBhcnNlci5SVUxFX2V4cCwgX3ApO1xuICAgIHZhciBfbGEgPSAwOyAvLyBUb2tlbiB0eXBlXG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDI4MTtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICB2YXIgbGFfID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwyMCx0aGlzLl9jdHgpO1xuICAgICAgICBzd2l0Y2gobGFfKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNjM7XG4gICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgICAgIGlmKF9sYT09PVFBU01QYXJzZXIuVF9fMjUgfHwgX2xhPT09UUFTTVBhcnNlci5UX18yNikge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNjI7XG4gICAgICAgICAgICAgICAgX2xhID0gdGhpcy5faW5wdXQuTEEoMSk7XG4gICAgICAgICAgICAgICAgaWYoIShfbGE9PT1RQVNNUGFyc2VyLlRfXzI1IHx8IF9sYT09PVFBU01QYXJzZXIuVF9fMjYpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBcdHRoaXMuX2VyckhhbmRsZXIucmVwb3J0TWF0Y2godGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI2NTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18zKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNjY7XG4gICAgICAgICAgICB0aGlzLmV4cCgwKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNjc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjcwO1xuICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICAgICAgX2xhID0gdGhpcy5faW5wdXQuTEEoMSk7XG4gICAgICAgICAgICBpZihfbGE9PT1RQVNNUGFyc2VyLlRfXzI1IHx8IF9sYT09PVFBU01QYXJzZXIuVF9fMjYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjY5O1xuICAgICAgICAgICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICAgICAgICAgIGlmKCEoX2xhPT09UUFTTVBhcnNlci5UX18yNSB8fCBfbGE9PT1RQVNNUGFyc2VyLlRfXzI2KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgXHR0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydE1hdGNoKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNzI7XG4gICAgICAgICAgICB0aGlzLnVuYXJ5b3AoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNzM7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjc0O1xuICAgICAgICAgICAgdGhpcy5leHAoMCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjc1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzQpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI3ODtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICAgICAgaWYoX2xhPT09UUFTTVBhcnNlci5UX18yNSB8fCBfbGE9PT1RQVNNUGFyc2VyLlRfXzI2KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI3NztcbiAgICAgICAgICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgICAgICAgICBpZighKF9sYT09PVFBU01QYXJzZXIuVF9fMjUgfHwgX2xhPT09UUFTTVBhcnNlci5UX18yNikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIFx0dGhpcy5fZXJySGFuZGxlci5yZXBvcnRNYXRjaCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjgwO1xuICAgICAgICAgICAgdGhpcy5hdG9tKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2N0eC5zdG9wID0gdGhpcy5faW5wdXQuTFQoLTEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gMjk0O1xuICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgIHZhciBfYWx0ID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwyMix0aGlzLl9jdHgpXG4gICAgICAgIHdoaWxlKF9hbHQhPTIgJiYgX2FsdCE9YW50bHI0LmF0bi5BVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICBpZihfYWx0PT09MSkge1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuX3BhcnNlTGlzdGVuZXJzIT09bnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnRyaWdnZXJFeGl0UnVsZUV2ZW50KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF9wcmV2Y3R4ID0gbG9jYWxjdHg7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI5MjtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICAgICAgdmFyIGxhXyA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMjEsdGhpcy5fY3R4KTtcbiAgICAgICAgICAgICAgICBzd2l0Y2gobGFfKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBsb2NhbGN0eCA9IG5ldyBFeHBDb250ZXh0KHRoaXMsIF9wYXJlbnRjdHgsIF9wYXJlbnRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaE5ld1JlY3Vyc2lvbkNvbnRleHQobG9jYWxjdHgsIF9zdGFydFN0YXRlLCBRQVNNUGFyc2VyLlJVTEVfZXhwKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI4MztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoIHRoaXMucHJlY3ByZWQodGhpcy5fY3R4LCA2KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBhbnRscjQuZXJyb3IuRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uKHRoaXMsIFwidGhpcy5wcmVjcHJlZCh0aGlzLl9jdHgsIDYpXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyODQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yMik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyODU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwKDcpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgbG9jYWxjdHggPSBuZXcgRXhwQ29udGV4dCh0aGlzLCBfcGFyZW50Y3R4LCBfcGFyZW50U3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnB1c2hOZXdSZWN1cnNpb25Db250ZXh0KGxvY2FsY3R4LCBfc3RhcnRTdGF0ZSwgUUFTTVBhcnNlci5SVUxFX2V4cCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyODY7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKCB0aGlzLnByZWNwcmVkKHRoaXMuX2N0eCwgNSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgYW50bHI0LmVycm9yLkZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbih0aGlzLCBcInRoaXMucHJlY3ByZWQodGhpcy5fY3R4LCA1KVwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjg3O1xuICAgICAgICAgICAgICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgICAgICAgICAgICAgaWYoIShfbGE9PT1RQVNNUGFyc2VyLlRfXzIzIHx8IF9sYT09PVFBU01QYXJzZXIuVF9fMjQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgXHR0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydE1hdGNoKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI4ODtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leHAoNik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICBsb2NhbGN0eCA9IG5ldyBFeHBDb250ZXh0KHRoaXMsIF9wYXJlbnRjdHgsIF9wYXJlbnRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaE5ld1JlY3Vyc2lvbkNvbnRleHQobG9jYWxjdHgsIF9zdGFydFN0YXRlLCBRQVNNUGFyc2VyLlJVTEVfZXhwKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI4OTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoIHRoaXMucHJlY3ByZWQodGhpcy5fY3R4LCA0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBhbnRscjQuZXJyb3IuRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uKHRoaXMsIFwidGhpcy5wcmVjcHJlZCh0aGlzLl9jdHgsIDQpXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyOTA7XG4gICAgICAgICAgICAgICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICAgICAgICAgICAgICBpZighKF9sYT09PVFBU01QYXJzZXIuVF9fMjUgfHwgX2xhPT09UUFTTVBhcnNlci5UX18yNikpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBcdHRoaXMuX2VyckhhbmRsZXIucmVwb3J0TWF0Y2godGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjkxO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cCg1KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI5NjtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDIyLHRoaXMuX2N0eCk7XG4gICAgICAgIH1cblxuICAgIH0gY2F0Y2goIGVycm9yKSB7XG4gICAgICAgIGlmKGVycm9yIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gZXJyb3I7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCBlcnJvcik7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIGVycm9yKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IGVycm9yO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5yb2xsUmVjdXJzaW9uQ29udGV4dHMoX3BhcmVudGN0eClcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gQXRvbUNvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV9hdG9tO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5BdG9tQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuQXRvbUNvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXRvbUNvbnRleHQ7XG5cbkF0b21Db250ZXh0LnByb3RvdHlwZS5JTlQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUb2tlbihRQVNNUGFyc2VyLklOVCwgMCk7XG59O1xuXG5BdG9tQ29udGV4dC5wcm90b3R5cGUuUkVBTCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuUkVBTCwgMCk7XG59O1xuXG5BdG9tQ29udGV4dC5wcm90b3R5cGUuUEkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUb2tlbihRQVNNUGFyc2VyLlBJLCAwKTtcbn07XG5cbkF0b21Db250ZXh0LnByb3RvdHlwZS5JRCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSUQsIDApO1xufTtcblxuQXRvbUNvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmVudGVyQXRvbSh0aGlzKTtcblx0fVxufTtcblxuQXRvbUNvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdEF0b20odGhpcyk7XG5cdH1cbn07XG5cblxuXG5cblFBU01QYXJzZXIuQXRvbUNvbnRleHQgPSBBdG9tQ29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuYXRvbSA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIGxvY2FsY3R4ID0gbmV3IEF0b21Db250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDMyLCBRQVNNUGFyc2VyLlJVTEVfYXRvbSk7XG4gICAgdmFyIF9sYSA9IDA7IC8vIFRva2VuIHR5cGVcbiAgICB0cnkge1xuICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gMjk3O1xuICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgaWYoISgoKCgoX2xhIC0gMzQpKSAmIH4weDFmKSA9PSAwICYmICgoMSA8PCAoX2xhIC0gMzQpKSAmICgoMSA8PCAoUUFTTVBhcnNlci5QSSAtIDM0KSkgfCAoMSA8PCAoUUFTTVBhcnNlci5SRUFMIC0gMzQpKSB8ICgxIDw8IChRQVNNUGFyc2VyLklOVCAtIDM0KSkgfCAoMSA8PCAoUUFTTVBhcnNlci5JRCAtIDM0KSkpKSAhPT0gMCkpKSB7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgXHR0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydE1hdGNoKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBVbmFyeW9wQ29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX3VuYXJ5b3A7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblVuYXJ5b3BDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5VbmFyeW9wQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBVbmFyeW9wQ29udGV4dDtcblxuXG5VbmFyeW9wQ29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJVbmFyeW9wKHRoaXMpO1xuXHR9XG59O1xuXG5VbmFyeW9wQ29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0VW5hcnlvcCh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5VbmFyeW9wQ29udGV4dCA9IFVuYXJ5b3BDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS51bmFyeW9wID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgVW5hcnlvcENvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgMzQsIFFBU01QYXJzZXIuUlVMRV91bmFyeW9wKTtcbiAgICB2YXIgX2xhID0gMDsgLy8gVG9rZW4gdHlwZVxuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAyOTk7XG4gICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICBpZighKCgoKChfbGEgLSAyOCkpICYgfjB4MWYpID09IDAgJiYgKCgxIDw8IChfbGEgLSAyOCkpICYgKCgxIDw8IChRQVNNUGFyc2VyLlRfXzI3IC0gMjgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzI4IC0gMjgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzI5IC0gMjgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzMwIC0gMjgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzMxIC0gMjgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzMyIC0gMjgpKSkpICE9PSAwKSkpIHtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICBcdHRoaXMuX2VyckhhbmRsZXIucmVwb3J0TWF0Y2godGhpcyk7XG4gICAgICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKHJlKSB7XG4gICAgXHRpZihyZSBpbnN0YW5jZW9mIGFudGxyNC5lcnJvci5SZWNvZ25pdGlvbkV4Y2VwdGlvbikge1xuXHQgICAgICAgIGxvY2FsY3R4LmV4Y2VwdGlvbiA9IHJlO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgXHR0aHJvdyByZTtcblx0ICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmV4aXRSdWxlKCk7XG4gICAgfVxuICAgIHJldHVybiBsb2NhbGN0eDtcbn07XG5cblxuUUFTTVBhcnNlci5wcm90b3R5cGUuc2VtcHJlZCA9IGZ1bmN0aW9uKGxvY2FsY3R4LCBydWxlSW5kZXgsIHByZWRJbmRleCkge1xuXHRzd2l0Y2gocnVsZUluZGV4KSB7XG5cdGNhc2UgMTU6XG5cdFx0XHRyZXR1cm4gdGhpcy5leHBfc2VtcHJlZChsb2NhbGN0eCwgcHJlZEluZGV4KTtcbiAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBcIk5vIHByZWRpY2F0ZSB3aXRoIGluZGV4OlwiICsgcnVsZUluZGV4O1xuICAgfVxufTtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuZXhwX3NlbXByZWQgPSBmdW5jdGlvbihsb2NhbGN0eCwgcHJlZEluZGV4KSB7XG5cdHN3aXRjaChwcmVkSW5kZXgpIHtcblx0XHRjYXNlIDA6XG5cdFx0XHRyZXR1cm4gdGhpcy5wcmVjcHJlZCh0aGlzLl9jdHgsIDYpO1xuXHRcdGNhc2UgMTpcblx0XHRcdHJldHVybiB0aGlzLnByZWNwcmVkKHRoaXMuX2N0eCwgNSk7XG5cdFx0Y2FzZSAyOlxuXHRcdFx0cmV0dXJuIHRoaXMucHJlY3ByZWQodGhpcy5fY3R4LCA0KTtcblx0XHRkZWZhdWx0OlxuXHRcdFx0dGhyb3cgXCJObyBwcmVkaWNhdGUgd2l0aCBpbmRleDpcIiArIHByZWRJbmRleDtcblx0fVxufTtcblxuXG5leHBvcnRzLlFBU01QYXJzZXIgPSBRQVNNUGFyc2VyO1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNiwgUGV0YXIgS29ycG9uYWnEhyA8cGV0YXIua29ycG9uYWljQGdtYWlsLmNvbT5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSwgZm91bmQgaW5cbiAqIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbnZhciBtYXRoID0gcmVxdWlyZShcIm1hdGhqc1wiKTtcblxudmFyIFFBU01JbXBvcnQgPSByZXF1aXJlKFwiLi9xYXNtX2ltcG9ydC9RQVNNSW1wb3J0LmpzXCIpO1xuXG5cbnZhciBmb3JtYXRDb21wbGV4MiA9IGZ1bmN0aW9uKHJlLCBpbSwgb3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgc3JlID0gZm9ybWF0RmxvYXQocmUsIG9wdGlvbnMpO1xuXG5cdHZhciBvcHQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpKTtcblx0b3B0LnBsdXNDaGFyID0gXCIrXCI7XG5cdHZhciBzaW0gPSBmb3JtYXRGbG9hdChpbSwgb3B0KTtcblx0cmV0dXJuIHNyZSArIHNpbSArIChvcHRpb25zLmlvdGFDaGFyID8gb3B0aW9ucy5pb3RhQ2hhciA6IFwiaVwiKTtcbn07XG5cbnZhciBmb3JtYXRGbG9hdCA9IGZ1bmN0aW9uKGYsIG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0aWYob3B0aW9ucy5kZWNpbWFsUGxhY2VzKSB7XG5cdFx0ZiA9IG1hdGgucm91bmQoZiwgb3B0aW9ucy5kZWNpbWFsUGxhY2VzKTtcblx0fVxuXG5cdHZhciBzID0gZiArIFwiXCI7XG5cblx0aWYob3B0aW9ucy5maXhlZFdpZHRoKSB7XG5cdFx0cyA9IGYudG9GaXhlZChvcHRpb25zLmRlY2ltYWxQbGFjZXMgfHwgMTQpO1xuXHR9XG5cblx0dmFyIHBsdXNDaGFyID0gb3B0aW9ucy5wbHVzQ2hhcjtcblx0aWYob3B0aW9ucy5maXhlZFdpZHRoICYmICFwbHVzQ2hhcikge1xuXHRcdHBsdXNDaGFyID0gXCIgXCI7XG5cdH1cblxuXHRpZihwbHVzQ2hhciAmJiBmID49IDApIHtcblx0XHRzID0gcGx1c0NoYXIgKyBzO1xuXHR9XG5cblx0cmV0dXJuIHM7XG59O1xuXG52YXIgemVyb2VzTWF0cml4ID0gZnVuY3Rpb24obikge1xuXHR2YXIgbWF0cml4ID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcblx0XHRtYXRyaXhbaV0gPSBbXTtcblx0XHRmb3IodmFyIGogPSAwOyBqIDwgbjsgaisrKSB7XG5cdFx0XHRtYXRyaXhbaV1bal0gPSAwO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbWF0cml4O1xufTtcblxudmFyIGlkZW50aXR5TWF0cml4ID0gZnVuY3Rpb24obikge1xuXHR2YXIgbWF0cml4ID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcblx0XHRtYXRyaXhbaV0gPSBbXTtcblx0XHRmb3IodmFyIGogPSAwOyBqIDwgbjsgaisrKSB7XG5cdFx0XHRtYXRyaXhbaV1bal0gPSBqID09IGkgPyAxIDogMDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG1hdHJpeDtcbn07XG5cblxudmFyIG1ha2VDb250cm9sbGVkID0gZnVuY3Rpb24oVSkge1xuXHR2YXIgbSA9IFUubGVuZ3RoO1xuXHR2YXIgQyA9IGlkZW50aXR5TWF0cml4KG0gKiAyKTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtOyBpKyspIHtcblx0XHRmb3IgKHZhciBqID0gMDsgaiA8IG07IGorKykge1xuXHRcdFx0Q1tpICsgbV1baiArIG1dID0gVVtpXVtqXTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIEM7XG59O1xuXG52YXIgdW5pcXVlQXJyYXkgPSBmdW5jdGlvbihhcnJheSkge1xuICByZXR1cm4gYXJyYXkuZmlsdGVyKGZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgc2VsZikge1xuXHRyZXR1cm4gc2VsZi5pbmRleE9mKHZhbHVlKSA9PT0gaW5kZXg7XG4gIH0pO1xufTtcblxudmFyIHF1Yml0TGV0dGVyID0gZnVuY3Rpb24obiwgbWF4KSB7XG5cdG1heE4gPSBtYXggfHwgKG4gKyAxKTtcblxuXHRpZihtYXhOID4gMCkge1xuXHRcdG1heE4gPSBtYXhOIC0gMTtcblx0fVxuXG5cdG1heExlbiA9IG1heE4udG9TdHJpbmcoMjYpLmxlbmd0aDtcblxuXHR2YXIgblN0ciA9IG4udG9TdHJpbmcoMjYpO1xuXHR3aGlsZShuU3RyLmxlbmd0aCA8IG1heExlbikge1xuXHRcdG5TdHIgPSBcIjBcIiArIG5TdHI7XG5cdH1cblxuXHR2YXIgcmVzID0gXCJcIjtcblx0Zm9yKHZhciBpID0gMDsgaSA8IG5TdHIubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgY29kZSA9IG5TdHIuY2hhckNvZGVBdChpKTtcblx0XHRyZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlIDwgOTcgPyBjb2RlICsgNDkgOiBjb2RlICsgMTApO1xuXHR9XG5cblx0cmV0dXJuIHJlcztcbn07XG5cbnZhciBRdWFudHVtQ2lyY3VpdCA9IGZ1bmN0aW9uKG51bVF1Yml0cykge1xuXHR0aGlzLmJhc2ljR2F0ZXMgPSB7XG5cdFx0aWQ6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlNpbmdsZSBxdWJpdCBpZGVudGl0eSBnYXRlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsIDBdLFxuXHRcdFx0XHRbMCwgMV1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJJRFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJJXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiSVwiLFxuXHRcdFx0XHRcdG5vdFRmcVN1cHBvcnRlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29tcGFjdFVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IHsgYWxwaGE6IFwiKENvbXBsZXgpIHsgLnJlYWwgPSAxLCAuaW1hZyA9IDAgfVwiLFxuXHRcdFx0XHRcdFx0XHRiZXRhOiBcIihDb21wbGV4KSB7LnJlYWwgPSAwLCAuaW1hZyA9IDB9XCJ9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiSVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiaWRcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImlcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiSVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0eDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUGF1bGkgWCAoUEkgcm90YXRpb24gb3ZlciBYLWF4aXMpIGFrYSBcXFwiTk9UXFxcIiBnYXRlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzAsMV0sXG5cdFx0XHRcdFsxLDBdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiWFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJYXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiWFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJwYXVsaVhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwieFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJYXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR5OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJQYXVsaSBZIChQSSByb3RhdGlvbiBvdmVyIFktYXhpcylcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMCxcIi1pXCJdLFxuXHRcdFx0XHRbXCJpXCIsMF1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJZXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIllcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJZXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInBhdWxpWVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJZXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ5XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIllcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHo6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlBhdWxpIFogKFBJIHJvdGF0aW9uIG92ZXIgWi1heGlzKVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDBdLFxuXHRcdFx0XHRbMCwtMV1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJaXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJaXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInBhdWxpWlwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWlwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJaXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ6XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGg6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkhhZGFtYXJkIGdhdGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbXCIxIC8gc3FydCgyKVwiLFwiMSAvIHNxcnQoMilcIl0sXG5cdFx0XHRcdFtcIjEgLyBzcXJ0KDIpXCIsXCItMSAvIHNxcnQoMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJIXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJIXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImhhZGFtYXJkXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJIXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiSFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0c3JuOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJTcXVhcmUgcm9vdCBvZiBOT1RcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbXCIwLjUrMC41aVwiLFwiMC41LTAuNWlcIl0sXG5cdFx0XHRcdFtcIjAuNS0wLjVpXCIsXCIwLjUrMC41aVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIiYjeDIyMUE7WFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzcm5cIixcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgc3JuOlxcbiAgICAwLjUrMC41aSwgMC41LTAuNWlcXG4gICAgMC41LTAuNWksIDAuNSswLjVpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzcm5cIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzAuNSswLjVqLCAwLjUtMC41al0sIFswLjUtMC41aiwgMC41KzAuNWpdXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlgqKigxLzIpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRtYXRyaXg6IFtbW1wiMC41XCIsIFwiMC41XCJdLCBbXCIwLjVcIiwgXCItMC41XCJdXSxcblx0XHRcdFx0XHRcdFtbXCIwLjVcIiwgXCItMC41XCJdLFtcIjAuNVwiLCBcIjAuNVwiXV1dXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcInN4XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzeFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidlwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bWF0cml4OiBbW1wiMC41KzAuNWlcIixcIjAuNS0wLjVpXCJdLFtcIjAuNS0wLjVpXCIsXCIwLjUrMC41aVwiXV0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1swLjUrMC41aiwgMC41LTAuNWpdLCBbMC41LTAuNWosIDAuNSswLjVqXV1cIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHNybmRnOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJJbnZlcnNlIHNxdWFyZSByb290IG9mIE5PVFwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFtcIjAuNS0wLjVpXCIsXCIwLjUrMC41aVwiXSxcblx0XHRcdFx0W1wiMC41KzAuNWlcIixcIjAuNS0wLjVpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiJiN4MjIxQTtYJiM4MjI0O1wiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzcm5kZ1wiLFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSBzcm5kZzpcXG4gICAgMC41LTAuNWksIDAuNSswLjVpXFxuICAgIDAuNSswLjVpLCAwLjUtMC41aVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic3JuZGdcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzAuNS0wLjVqLCAwLjUrMC41al0sIFswLjUrMC41aiwgMC41LTAuNWpdXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlgqKigtMS8yKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0bWF0cml4OiBbW1tcIjAuNVwiLCBcIi0wLjVcIl0sIFtcIjAuNVwiLCBcIjAuNVwiXV0sXG5cdFx0XHRcdFx0XHRbW1wiMC41XCIsIFwiMC41XCJdLFtcIjAuNVwiLCBcIi0wLjVcIl1dXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzeGRnXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzeGRnXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ2aVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bWF0cml4OiBbW1wiMC41LTAuNWlcIixcIjAuNSswLjVpXCJdLFtcIjAuNSswLjVpXCIsXCIwLjUtMC41aVwiXV0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1swLjUtMC41aiwgMC41KzAuNWpdLCBbMC41KzAuNWosIDAuNS0wLjVqXV1cIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHIyOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJQSS8yIHJvdGF0aW9uIG92ZXIgWi1heGlzIGFrYSBcXFwiUGhhc2UgUEkvMlxcXCJcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwXSxcblx0XHRcdFx0WzAsXCJleHAoaSAqIHBpIC8gMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJaJiN4MUQ2RDE7LzJcIlxuXHRcdFx0fSxcblxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwic1wiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwic1wiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic0dhdGVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJzXCIsXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJzXCIsIHBhcmFtczoge30gfVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwic1wiLCBwYXJhbXM6IHt9IH1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRyNDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUEkvNCByb3RhdGlvbiBvdmVyIFotYXhpcyBha2EgXFxcIlBoYXNlIFBJLzRcXFwiXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMF0sXG5cdFx0XHRcdFswLFwiZXhwKGkgKiBwaSAvIDQpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiWiYjeDFENkQxOy80XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ0XCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ0XCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ0R2F0ZVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInRcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidFwiLCBwYXJhbXM6IHt9IH1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInRcIiwgcGFyYW1zOiB7fSB9XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpewrxcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInRcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiVFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0cjg6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlBJLzggcm90YXRpb24gb3ZlciBaLWF4aXMgYWthIFxcXCJQaGFzZSBQSS84XFxcIlwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDBdLFxuXHRcdFx0XHRbMCxcImV4cChpICogcGkgLyA4KVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlomI3gxRDZEMTsvOFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwidTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvOFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwidTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvOFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicGhhc2VTaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczoge3RoZXRhOiBcIk1fUEkvOFwifVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS84XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvOFwiIH0gfVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTFcIiwgcGFyYW1zOiB7IGxhbWJkYTogXCJwaS84XCIgfSB9XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpe4oWbXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJwaGFzZXNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiB7dGhldGE6IFwicGkvOFwifVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sxLDBdLFswLFwiZXhwKGkgKiBwaSAvIDgpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMF0sWzAsbnAuZXhwKDFqICogbnAucGkgLyA4KV1dXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRyeDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUm90YXRpb24gYXJvdW5kIHRoZSBYLWF4aXMgYnkgZ2l2ZW4gYW5nbGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbXCJjb3ModGhldGEgLyAyKVwiLCBcIi1pICogc2luKHRoZXRhIC8gMilcIl0sXG5cdFx0XHRcdFtcIi1pICogc2luKHRoZXRhIC8gMilcIiwgXCJjb3ModGhldGEgLyAyKVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlJYXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJYXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyeFwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJvdGF0ZVhcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiUnhcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicnhcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJSWFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0cnk6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlJvdGF0aW9uIGFyb3VuZCB0aGUgWS1heGlzIGJ5IGdpdmVuIGFuZ2xlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0W1wiY29zKHRoZXRhIC8gMilcIiwgXCItMSAqIHNpbih0aGV0YSAvIDIpXCJdLFxuXHRcdFx0XHRbXCJzaW4odGhldGEgLyAyKVwiLCBcImNvcyh0aGV0YSAvIDIpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiUllcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiUllcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicm90YXRlWVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJSeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJZXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRyejoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUm90YXRpb24gYXJvdW5kIHRoZSBaLWF4aXMgYnkgZ2l2ZW4gYW5nbGVcIixcblx0XHRcdFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFtcImNvcyhwaGkgLyAyKSAtIGkgKiBzaW4ocGhpIC8gMilcIiwgMF0sXG5cdFx0XHRcdFswLCBcImNvcyhwaGkgLyAyKSArIGkgKiBzaW4ocGhpIC8gMilcIl1cblx0XHRcdF0sXG5cblx0XHRcdHBhcmFtczogW1wicGhpXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJSWlwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJSWlwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ6XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJ6XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ6XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJaXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR1MToge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiU2luZ2xlLXF1Yml0IHJvdGF0aW9uIGFib3V0IHRoZSBaIGF4aXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwXSxcblx0XHRcdFx0WzAsXCJleHAoaSAqIGxhbWJkYSlcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcImxhbWJkYVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiVTFcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiUEhBU0VcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcImxhbWJkYVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwgMF0sIFswLCBucC5leHAoMWoqcF9sYW1iZGEpXV1cIixcblx0XHRcdFx0XHRub3RUZnFTdXBwb3J0ZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInBoYXNlU2hpZnRcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcImxhbWJkYVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInBoYXNlc2hpZnRcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcImxhbWJkYVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiUEhcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHUyOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJTaW5nbGUtcXViaXQgcm90YXRpb24gYWJvdXQgdGhlIFgrWiBheGlzXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0W1wiMSAvIHNxcnQoMilcIiwgXCItZXhwKGkgKiBsYW1iZGEpICogMSAvIHNxcnQoMilcIl0sXG5cdFx0XHRcdFtcImV4cChpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCIsIFwiZXhwKGkgKiBsYW1iZGEgKyBpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlUyXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcInUyXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIHUyKCVwaGksICVsYW1iZGEpOlxcbiAgICAxL1NRUlQoMiksIC0xKkVYUChpKiVsYW1iZGEpKjEvU1FSVCgyKVxcbiAgICBFWFAoaSolcGhpKSoxL1NRUlQoMiksIEVYUChpKiVsYW1iZGEgKyBpKiVwaGkpKjEvU1FSVCgyKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidTJcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEvcXVpbF9zcXJ0KDIpLC1xdWlsX2V4cCgxaipwX2xhbWJkYSkqMS9xdWlsX3NxcnQoMildLFtxdWlsX2V4cCgxaipwX3BoaSkqMS9xdWlsX3NxcnQoMikscXVpbF9leHAoMWoqcF9sYW1iZGErMWoqcF9waGkpKjEvcXVpbF9zcXJ0KDIpXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1MlwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMS9ucC5zcXJ0KDIpLCAtbnAuZXhwKDFqKnBfbGFtYmRhKSoxL25wLnNxcnQoMildLCBbbnAuZXhwKDFqKnBfcGhpKSoxL25wLnNxcnQoMiksIG5wLmV4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqMS9ucC5zcXJ0KDIpXV1cIixcblx0XHRcdFx0XHRub3RUZnFTdXBwb3J0ZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRtYXRyaXg6IFtbW1wiMS9zcXJ0KDIpXCIsIFwiMFwiXSwgW1wiLWNvcyhsYW1iZGEpL3NxcnQoMilcIiwgXCItc2luKGxhbWJkYSkvc3FydCgyKVwiXV0sXG5cdFx0XHRcdFx0XHRcdCBbW1wiY29zKHBoaSkvc3FydCgyKVwiLCBcInNpbihwaGkpL3NxcnQoMilcIl0sIFtcImNvcyhsYW1iZGErcGhpKS9zcXJ0KDIpXCIsIFwic2luKGxhbWJkYStwaGkpL3NxcnQoMilcIl1dXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEvbnAuc3FydCgyKSwgLW5wLmV4cCgxaipwX2xhbWJkYSkqMS9ucC5zcXJ0KDIpXSwgW25wLmV4cCgxaipwX3BoaSkqMS9ucC5zcXJ0KDIpLCBucC5leHAoMWoqcF9sYW1iZGErMWoqcF9waGkpKjEvbnAuc3FydCgyKV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRtYXRyaXg6IFtbXCIxIC8gc3FydCgyKVwiLCBcIi1leHAoaSAqIGxhbWJkYSkgKiAxIC8gc3FydCgyKVwiXSxbXCJleHAoaSAqIHBoaSkgKiAxIC8gc3FydCgyKVwiLCBcImV4cChpICogbGFtYmRhICsgaSAqIHBoaSkgKiAxIC8gc3FydCgyKVwiXV0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxL25wLnNxcnQoMiksIC1ucC5leHAoMWoqcF9sYW1iZGEpKjEvbnAuc3FydCgyKV0sIFtucC5leHAoMWoqcF9waGkpKjEvbnAuc3FydCgyKSwgbnAuZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSoxL25wLnNxcnQoMildXVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcInBoaVwiLCBsYW1iZGE6IFwibGFtYmRhXCIgfSB9XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR1Mzoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiR2VuZXJpYyBzaW5nbGUtcXViaXQgcm90YXRpb24gZ2F0ZSB3aXRoIDMgRXVsZXIgYW5nbGVzXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WyBcImNvcyh0aGV0YS8yKVwiLCBcIi1leHAoaSAqIGxhbWJkYSkgKiBzaW4odGhldGEgLyAyKVwiIF0sXG5cdFx0XHRcdFsgXCJleHAoaSAqIHBoaSkgKiBzaW4odGhldGEgLyAyKVwiLCBcImV4cChpICogbGFtYmRhICsgaSAqIHBoaSkgKiBjb3ModGhldGEgLyAyKVwiIF1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJVM1wiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1M1wiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIHUzKCV0aGV0YSwgJXBoaSwgJWxhbWJkYSk6XFxuICAgIENPUygldGhldGEvMiksIC0xKkVYUChpKiVsYW1iZGEpKlNJTigldGhldGEvMilcXG4gICAgRVhQKGkqJXBoaSkqU0lOKCV0aGV0YS8yKSwgRVhQKGkqJWxhbWJkYSArIGkqJXBoaSkqQ09TKCV0aGV0YS8yKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidTNcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbcXVpbF9jb3MocF90aGV0YS8yKSwtcXVpbF9leHAoMWoqcF9sYW1iZGEpKnF1aWxfc2luKHBfdGhldGEvMildLFtxdWlsX2V4cCgxaipwX3BoaSkqcXVpbF9zaW4ocF90aGV0YS8yKSxxdWlsX2V4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqcXVpbF9jb3MocF90aGV0YS8yKV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwidTNcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbbnAuY29zKHBfdGhldGEvMiksIC1ucC5leHAoMWoqcF9sYW1iZGEpKm5wLnNpbihwX3RoZXRhLzIpXSwgW25wLmV4cCgxaipwX3BoaSkqbnAuc2luKHBfdGhldGEvMiksIG5wLmV4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqbnAuY29zKHBfdGhldGEvMildXVwiLFxuXHRcdFx0XHRcdG5vdFRmcVN1cHBvcnRlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0bWF0cml4OiBbW1tcImNvcyh0aGV0YS8yKVwiLCBcIjBcIl0sIFtcIi1jb3MobGFtYmRhKSpzaW4odGhldGEvMilcIiwgXCItc2luKGxhbWJkYSkqc2luKHRoZXRhLzIpXCJdXSxcblx0XHRcdFx0XHRcdFx0IFtbXCJjb3MocGhpKSpzaW4odGhldGEvMilcIiwgXCJzaW4ocGhpKSpzaW4odGhldGEvMilcIl0sIFtcImNvcyhsYW1iZGErcGhpKSpjb3ModGhldGEvMilcIiwgXCJzaW4obGFtYmRhK3BoaSkqY29zKHRoZXRhLzIpXCJdXV1cblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiLCBcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbW25wLmNvcyhwX3RoZXRhLzIpLCAtbnAuZXhwKDFqKnBfbGFtYmRhKSpucC5zaW4ocF90aGV0YS8yKV0sIFtucC5leHAoMWoqcF9waGkpKm5wLnNpbihwX3RoZXRhLzIpLCBucC5leHAoMWoqcF9sYW1iZGErMWoqcF9waGkpKm5wLmNvcyhwX3RoZXRhLzIpXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sgXCJjb3ModGhldGEvMilcIiwgXCItZXhwKGkgKiBsYW1iZGEpICogc2luKHRoZXRhIC8gMilcIiBdLFsgXCJleHAoaSAqIHBoaSkgKiBzaW4odGhldGEgLyAyKVwiLCBcImV4cChpICogbGFtYmRhICsgaSAqIHBoaSkgKiBjb3ModGhldGEgLyAyKVwiIF1dLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbbnAuY29zKHBfdGhldGEvMiksIC1ucC5leHAoMWoqcF9sYW1iZGEpKm5wLnNpbihwX3RoZXRhLzIpXSwgW25wLmV4cCgxaipwX3BoaSkqbnAuc2luKHBfdGhldGEvMiksIG5wLmV4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqbnAuY29zKHBfdGhldGEvMildXVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJQSS8yIHJvdGF0aW9uIG92ZXIgWi1heGlzIChzeW5vbnltIGZvciBgcjJgKVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDBdLFxuXHRcdFx0XHRbMCxcImV4cChpICogcGkgLyAyKVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlNcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiU1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic0dhdGVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR0OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJQSS80IHJvdGF0aW9uIG92ZXIgWi1heGlzIChzeW5vbnltIGZvciBgcjRgKVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDBdLFxuXHRcdFx0XHRbMCxcImV4cChpICogcGkgLyA0KVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlRcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiVFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlRcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidEdhdGVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlRcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJUXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzZGc6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIigtUEkvMikgcm90YXRpb24gb3ZlciBaLWF4aXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwXSxcblx0XHRcdFx0WzAsXCJleHAoLWkgKiBwaSAvIDIpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiUyYjODIyNDtcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInUxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcIi1waS8yXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvMlwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicGhhc2VTaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczogeyB0aGV0YTogXCItTV9QSS8yXCIgfVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvMlwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl4twr1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInNpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIixcblx0XHRcdFx0XHRkYWdnZXI6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR0ZGc6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIigtUEkvNCkgcm90YXRpb24gb3ZlciBaLWF4aXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwXSxcblx0XHRcdFx0WzAsXCJleHAoLWkgKiBwaSAvIDQpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiVCYjODIyNDtcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInUxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcIi1waS80XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvNFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicGhhc2VTaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczogeyB0aGV0YTogXCItTV9QSS80XCIgfVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvNFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl4twrxcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInRpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlRcIixcblx0XHRcdFx0XHRkYWdnZXI6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzd2FwOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJTd2FwcyB0aGUgc3RhdGUgb2YgdHdvIHF1Yml0cy5cIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMSwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMV1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wieFwiLFwieFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiU1dQXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNXQVBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTV0FQXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInN3YXBcIixcblx0XHRcdFx0XHRmdW5jOiBcInZvaWQgc3dhcChRdXJlZyBxdWJpdHMsIGNvbnN0IGludCBxMSwgY29uc3QgaW50IHEyKSB7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMSwgcTIpO1xcblwiICtcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHEyLCBxMSk7XFxuXCIgK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEyKTtcXG59XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTV0FQXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlN3YXBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInN3YXBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiU1dBUFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0c3Jzd2FwOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJTcXVhcmUgcm9vdCBvZiBzd2FwXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCxcIjAuNSAqICgxICsgaSlcIixcIjAuNSAqICgxIC0gaSlcIiwwXSxcblx0XHRcdFx0WzAsXCIwLjUgKiAoMSAtIGkpXCIsXCIwLjUgKiAoMSArIGkpXCIsMF0sXG5cdFx0XHRcdFswLDAsMCwxXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiJiN4MjIxQTtTV1BcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic3Jzd2FwXCIsXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIHNyc3dhcDpcXG4gICAgMSwgMCwgMCwgMFxcbiAgICAwLCAwLjUrMC41aSwgMC41LTAuNWksIDBcXG4gICAgMCwgMC41LTAuNWksIDAuNSswLjVpLCAwXFxuICAgIDAsIDAsIDAsIDFcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTV0FQKiooMS8yKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic3Jzd2FwXCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwwLjUgKiAoMSArIDFqKSwwLjUgKiAoMSAtIDFqKSwwXSxbMCwwLjUgKiAoMSAtIDFqKSwwLjUgKiAoMSArIDFqKSwwXSxbMCwwLDAsMV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInNyc3dhcFwiLFxuXHRcdFx0XHRcdGZ1bmM6IFwidm9pZCBzcnN3YXAoUXVyZWcgcXViaXRzLCBjb25zdCBpbnQgcTEsIGNvbnN0IGludCBxMikge1xcblwiICtcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHEyLCBxMSk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHJvdGF0ZVkocXViaXRzLCBxMiwgTV9QSS8yKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgcm90YXRlWihxdWJpdHMsIHEyLCBNX1BJLzE2KTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHExLCBxMik7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHJvdGF0ZVoocXViaXRzLCBxMSwgTV9QSS84KTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgcm90YXRlWihxdWJpdHMsIHEyLCAtTV9QSS84KTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHExLCBxMik7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHJvdGF0ZVoocXViaXRzLCBxMiwgTV9QSS8xNik7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHJvdGF0ZVkocXViaXRzLCBxMiwgLU1fUEkvMik7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMiwgcTEpO1xcbn1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0ZXF1aXZhbGVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCJwaS8yXCIsIGxhbWJkYTogXCItMSpwaVwiIH0sIHdpcmVzOiBbMF19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCItMSpwaS8yXCIsIGxhbWJkYTogXCJwaVwiIH0sIHdpcmVzOiBbMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN4XCIsIHdpcmVzOiBbMCwgMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS80XCIsIHBoaTogXCItMSpwaS8yXCIsIGxhbWJkYTogXCItMSpwaS8yXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjcqcGkvNFwiIH0sIHdpcmVzOiBbMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN4XCIsIHdpcmVzOiBbMCwgMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS80XCIsIHBoaTogXCItMSpwaVwiLCBsYW1iZGE6IFwiLTEqcGkvMlwiIH0sIHdpcmVzOiBbMF19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCJwaVwiLCBsYW1iZGE6IFwicGkvMlwiIH0sIHdpcmVzOiBbMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN4XCIsIHdpcmVzOiBbMCwgMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCIwXCIsIGxhbWJkYTogXCItMypwaS8yXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcInBpLzJcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdfSxcblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRlcXVpdmFsZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcInBpLzJcIiwgbGFtYmRhOiBcIi0xKnBpXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIi0xKnBpLzJcIiwgbGFtYmRhOiBcInBpXCIgfSwgd2lyZXM6IFsxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzRcIiwgcGhpOiBcIi0xKnBpLzJcIiwgbGFtYmRhOiBcIi0xKnBpLzJcIiB9LCB3aXJlczogWzBdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiMFwiLCBsYW1iZGE6IFwiNypwaS80XCIgfSwgd2lyZXM6IFsxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzRcIiwgcGhpOiBcIi0xKnBpXCIsIGxhbWJkYTogXCItMSpwaS8yXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcInBpXCIsIGxhbWJkYTogXCJwaS8yXCIgfSwgd2lyZXM6IFsxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIi0zKnBpLzJcIiB9LCB3aXJlczogWzBdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwicGkvMlwiLCBsYW1iZGE6IFwiMFwiIH0sIHdpcmVzOiBbMV19LFxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMC41ICogKDEgKyAxaiksMC41ICogKDEgLSAxaiksMF0sWzAsMC41ICogKDEgLSAxaiksMC41ICogKDEgKyAxaiksMF0sWzAsMCwwLDFdXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTUVJUU1dBUFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0aXN3YXA6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlN3YXBzIHRoZSBzdGF0ZSBvZiB0d28gcXViaXRzLCBhcHBseWluZyBhIC1pIHBoYXNlIHRvIHExIHdoZW4gaXQgaXMgaW4gdGhlIDEgc3RhdGUgYW5kIGEgLWkgcGhhc2UgdG8gcTIgd2hlbiBpdCBpcyBpbiB0aGUgMCBzdGF0ZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMCxcIjAraVwiLDBdLFxuXHRcdFx0XHRbMCxcIjAraVwiLDAsMF0sXG5cdFx0XHRcdFswLDAsMCwxXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiaVNXUFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJJU1dBUFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIklTV0FQXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdGVxdWl2YWxlbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiLTEqcGkvMlwiLCBsYW1iZGE6IFwiLTEqcGlcIiB9LCB3aXJlczogWzBdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiLTEqcGkvMlwiLCBsYW1iZGE6IFwicGlcIiB9LCB3aXJlczogWzFdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjeFwiLCB3aXJlczogWzAsIDFdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiMFwiLCBsYW1iZGE6IFwiMypwaS8yXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIjMqcGkvMlwiLCBsYW1iZGE6IFwiMFwiIH0sIHdpcmVzOiBbMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN4XCIsIHdpcmVzOiBbMCwgMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCIwXCIsIGxhbWJkYTogXCIwXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpXCIsIHBoaTogXCJwaS80XCIsIGxhbWJkYTogXCItMSpwaS80XCIgfSwgd2lyZXM6IFsxXX1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRlcXVpdmFsZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIi0xKnBpLzJcIiwgbGFtYmRhOiBcIi0xKnBpXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIi0xKnBpLzJcIiwgbGFtYmRhOiBcInBpXCIgfSwgd2lyZXM6IFsxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjMqcGkvMlwiIH0sIHdpcmVzOiBbMF19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCIzKnBpLzJcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjeFwiLCB3aXJlczogWzAsIDFdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiMFwiLCBsYW1iZGE6IFwiMFwiIH0sIHdpcmVzOiBbMF19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaVwiLCBwaGk6IFwicGkvNFwiLCBsYW1iZGE6IFwiLTEqcGkvNFwiIH0sIHdpcmVzOiBbMV19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJpc3dhcFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJJU1dBUFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0eHk6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlhZIGdhdGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwgMCwgMCwgMF0sXG5cdFx0XHRcdFswLCBcImNvcyhwaGkgLyAyKVwiLCBcImkgKiBzaW4ocGhpIC8gMilcIiwgMF0sXG5cdFx0XHRcdFswLCBcImkgKiBzaW4ocGhpIC8gMilcIiwgXCJjb3MocGhpIC8gMilcIiwgMF0sXG5cdFx0XHRcdFswLCAwLCAwLCAxXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW1wicGhpXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlhZXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlhZXCIsXG5cdFx0XHRcdFx0XCJwYXJhbXNcIjogW1xuXHRcdFx0XHRcdFx0XCJwaGlcIlxuXHRcdFx0XHRcdF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdGVxdWl2YWxlbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcIjMqcGkvNFwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCItMypwaS80XCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjelwiLCB3aXJlczogWzEsIDBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCItMSpwaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcInBoaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcIi0xKnBpLzJcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcInBpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwicGhpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwiLTEqcGkvMlwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN6XCIsIHdpcmVzOiBbMSwgMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcIi0xKnBpLzJcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwicGkvNFwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwiLTEqcGkvMlwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCItMSpwaS8yXCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCIzKnBpLzRcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRlcXVpdmFsZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCIzKnBpLzRcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwiLTMqcGkvNFwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3pcIiwgd2lyZXM6IFsxLCAwXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwiLTEqcGkvMlwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCJwaGkvMlwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCItMSpwaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCJwaS8yXCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcInBoaS8yXCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcIi0xKnBpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjelwiLCB3aXJlczogWzEsIDBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCItMSpwaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcInBpLzRcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcIi0xKnBpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwiLTEqcGkvMlwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwiMypwaS80XCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwieHlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgbnAuY29zKHBfcGhpLzIpLCAxaipucC5zaW4ocF9waGkvMiksIDBdLCBbMCwgMWoqbnAuc2luKHBfcGhpLzIpLCBucC5jb3MocF9waGkvMiksIDBdLCBbMCwgMCwgMCwgMV1dXCIsXG5cdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwieHlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sxLCAwLCAwLCAwXSxbMCwgXCJjb3MocGhpIC8gMilcIiwgXCJpICogc2luKHBoaSAvIDIpXCIsIDBdLFswLCBcImkgKiBzaW4ocGhpIC8gMilcIiwgXCJjb3MocGhpIC8gMilcIiwgMF0sWzAsIDAsIDAsIDFdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgbnAuY29zKHBfcGhpLzIpLCAxaipucC5zaW4ocF9waGkvMiksIDBdLCBbMCwgMWoqbnAuc2luKHBfcGhpLzIpLCBucC5jb3MocF9waGkvMiksIDBdLCBbMCwgMCwgMCwgMV1dXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIl1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjeDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCBOT1QgKENOT1QpIGdhdGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDFdLFxuXHRcdFx0XHRbMCwwLDEsMF1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJub3RcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlhcIixcblx0XHRcdFx0cm9vdDogXCJ4XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNOT1RcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDTk9UXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWROb3RcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNOT1RcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjbm90XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNOT1RcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGN5OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIFkgZ2F0ZSAoY29udHJvbGxlZCByb3RhdGlvbiBvdmVyIFktYXhpcyBieSBQSSlcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwwLFwiLWlcIl0sXG5cdFx0XHRcdFswLDAsXCJpXCIsMF1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIllcIixcblx0XHRcdFx0cm9vdDogXCJ5XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkUGF1bGlZXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInlcIixcblx0XHRcdFx0XHRcdHR5cGU6IFwiY29udHJvbGxlZFwiLFxuXHRcdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjeVwiLFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSBjeTpcXG4gICAgMSwgMCwgMCwgMFxcbiAgICAwLCAxLCAwLCAwXFxuICAgIDAsIDAsIDAsIC1pXFxuICAgIDAsIDAsIGksIDBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsMCwwLC0xal0sWzAsMCwxaiwwXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNvbnRyb2xsZWQgWVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJZXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN5XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIllcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3o6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgWiBnYXRlIChjb250cm9sbGVkIHJvdGF0aW9uIG92ZXIgWi1heGlzIGJ5IFBJKVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDEsMF0sXG5cdFx0XHRcdFswLDAsMCwtMV1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJkb3RcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlpcIixcblx0XHRcdFx0cm9vdDogXCJ6XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNaXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ1pcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udHJvbGxlZFBoYXNlRmxpcFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ29udHJvbGxlZCBaXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3pcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ1NJR05cIlxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y2g6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgSGFkYW1hcmQgZ2F0ZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLFwiMSAvIHNxcnQoMilcIixcIjEgLyBzcXJ0KDIpXCJdLFxuXHRcdFx0XHRbMCwwLFwiMSAvIHNxcnQoMilcIixcIi0xIC8gc3FydCgyKVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJkb3RcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiSFwiLFxuXHRcdFx0XHRyb290OiBcImhcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRVbml0YXJ5XCIsXG5cdFx0XHRcdFx0bWF0cml4OiBbW1tcIjEvc3FydCgyKVwiLCBcIjBcIl0sIFtcIjEvc3FydCgyKVwiLCBcIjBcIl1dLFxuXHRcdFx0XHRcdFx0XHQgW1tcIjEvc3FydCgyKVwiLCBcIjBcIl0sIFtcIi0xL3NxcnQoMilcIiwgXCIwXCJdXV1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImhcIixcblx0XHRcdFx0XHRcdHR5cGU6IFwiY29udHJvbGxlZFwiLFxuXHRcdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjaFwiLFx0XHRcdFx0XHRcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgY2g6XFxuICAgIDEsIDAsIDAsIDBcXG4gICAgMCwgMSwgMCwgMFxcbiAgICAwLCAwLCAwLjcwNzEwNjc4MTE4NjU0NzUsIDAuNzA3MTA2NzgxMTg2NTQ3NVxcbiAgICAwLCAwLCAwLjcwNzEwNjc4MTE4NjU0NzUsIC0wLjcwNzEwNjc4MTE4NjU0NzVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNoXCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsMCwxL25wLnNxcnQoMiksMS9ucC5zcXJ0KDIpXSxbMCwwLDEvbnAuc3FydCgyKSwtMS9ucC5zcXJ0KDIpXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNvbnRyb2xsZWQgSFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJIXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDEvbnAuc3FydCgyKSwxL25wLnNxcnQoMildLFswLDAsMS9ucC5zcXJ0KDIpLC0xL25wLnNxcnQoMildXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJIXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNzcm46IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgc3F1YXJlIHJvb3Qgb2YgTk9UXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLDAsXCIwLjUrMC41aVwiLFwiMC41LTAuNWlcIl0sXG5cdFx0XHRcdFswLDAsXCIwLjUtMC41aVwiLFwiMC41KzAuNWlcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIiYjeDIyMUE7WFwiLFxuXHRcdFx0XHRyb290OiBcInNyblwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udHJvbGxlZFVuaXRhcnlcIixcblx0XHRcdFx0XHRtYXRyaXg6IFtbW1wiLTEvc3FydCgyKVwiLCBcIjBcIl0sIFtcIi0xL3NxcnQoMilcIiwgXCIwXCJdXSxcblx0XHRcdFx0XHRcdFx0IFtbXCItMS9zcXJ0KDIpXCIsIFwiMFwiXSwgW1wiMS9zcXJ0KDIpXCIsIFwiMFwiXV1dXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJzcm5cIixcblx0XHRcdFx0XHRcdHR5cGU6IFwiY29udHJvbGxlZFwiLFxuXHRcdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjc3JuXCIsXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIGNzcm46XFxuICAgIDEsIDAsIDAsIDBcXG4gICAgMCwgMSwgMCwgMFxcbiAgICAwLCAwLCAwLjUrMC41aSwgMC41LTAuNWlcXG4gICAgMCwgMCwgMC41LTAuNWksIDAuNSswLjVpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3N4XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjc3hcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNzcm5cIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDAuNSswLjVqLDAuNS0wLjVqXSxbMCwwLDAuNS0wLjVqLDAuNSswLjVqXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDAuNSswLjVqLDAuNS0wLjVqXSxbMCwwLDAuNS0wLjVqLDAuNSswLjVqXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsMCxcIjAuNSswLjVpXCIsXCIwLjUtMC41aVwiXSxbMCwwLFwiMC41LTAuNWlcIixcIjAuNSswLjVpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDAuNSswLjVqLDAuNS0wLjVqXSxbMCwwLDAuNS0wLjVqLDAuNSswLjVqXV1cIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdG1zOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJNw7hsbWVyLVPDuHJlbnNlbiBnYXRlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0W1wiY29zKHRoZXRhKVwiLCAwLCAwLCBcIi1pKnNpbih0aGV0YSlcIl0sXG5cblx0XHRcdFx0WzAsIFwiY29zKHRoZXRhKVwiLCBcIi1pKnNpbih0aGV0YSlcIiwgMF0sXG5cblx0XHRcdFx0WzAsIFwiLWkqc2luKHRoZXRhKVwiLCBcImNvcyh0aGV0YSlcIiwgMF0sXG5cblx0XHRcdFx0W1wiLWkqc2luKHRoZXRhKVwiLCAwLCAwLCBcImNvcyh0aGV0YSlcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiY2lyY2xlXCIsXCJjaXJjbGVcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlhYXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIm1zXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgbXMoJXRoZXRhKTpcXG4gICAgQ09TKCV0aGV0YSksIDAsIDAsIC1pKlNJTigldGhldGEpXFxuICAgIDAsIENPUygldGhldGEpLCAtaSpTSU4oJXRoZXRhKSwgMFxcbiAgICAwLCAtaSpTSU4oJXRoZXRhKSwgQ09TKCV0aGV0YSksIDBcXG4gICAgLWkqU0lOKCV0aGV0YSksIDAsIDAsIENPUygldGhldGEpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJtc1wiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiWyBbcXVpbF9jb3MocF90aGV0YSksIDAsIDAsIC0xaipxdWlsX3NpbihwX3RoZXRhKV0sIFswLCBxdWlsX2NvcyhwX3RoZXRhKSwgLTFqKnF1aWxfc2luKHBfdGhldGEpLCAwXSwgWzAsIC0xaipxdWlsX3NpbihwX3RoZXRhKSwgcXVpbF9jb3MocF90aGV0YSksIDBdLCBbLTFqKnF1aWxfc2luKHBfdGhldGEpLCAwLCAwLCBxdWlsX2NvcyhwX3RoZXRhKV0gXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIm1zXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcIm1zXCIsXG5cdFx0XHRcdFx0Ly9AVE9ETyBhZGQgZnVuY3Rpb25cblx0XHRcdFx0XHRmdW5jOiBcIlRPRE9cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyeHhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ4eFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1tucC5jb3MocF90aGV0YSksIDAsIDAsIC0xaipucC5zaW4ocF90aGV0YSldLCBbMCwgbnAuY29zKHBfdGhldGEpLCAtMWoqbnAuc2luKHBfdGhldGEpLCAwXSwgWzAsIC0xaipucC5zaW4ocF90aGV0YSksIG5wLmNvcyhwX3RoZXRhKSwgMF0sIFstMWoqbnAuc2luKHBfdGhldGEpLCAwLCAwLCBucC5jb3MocF90aGV0YSldIF1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1tcImNvcyh0aGV0YSlcIiwgMCwgMCwgXCItaSpzaW4odGhldGEpXCJdLFswLCBcImNvcyh0aGV0YSlcIiwgXCItaSpzaW4odGhldGEpXCIsIDBdLFswLCBcIi1pKnNpbih0aGV0YSlcIiwgXCJjb3ModGhldGEpXCIsIDBdLFtcIi1pKnNpbih0aGV0YSlcIiwgMCwgMCwgXCJjb3ModGhldGEpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbW25wLmNvcyhwX3RoZXRhKSwgMCwgMCwgLTFqKm5wLnNpbihwX3RoZXRhKV0sIFswLCBucC5jb3MocF90aGV0YSksIC0xaipucC5zaW4ocF90aGV0YSksIDBdLCBbMCwgLTFqKm5wLnNpbihwX3RoZXRhKSwgbnAuY29zKHBfdGhldGEpLCAwXSwgWy0xaipucC5zaW4ocF90aGV0YSksIDAsIDAsIG5wLmNvcyhwX3RoZXRhKV0gXVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0XG5cdFx0eXk6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIllZIGdhdGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbXCJjb3ModGhldGEpXCIsIDAsIDAsIFwiaSpzaW4odGhldGEpXCJdLFxuXG5cdFx0XHRcdFswLCBcImNvcyh0aGV0YSlcIiwgXCItaSpzaW4odGhldGEpXCIsIDBdLFxuXG5cdFx0XHRcdFswLCBcIi1pKnNpbih0aGV0YSlcIiwgXCJjb3ModGhldGEpXCIsIDBdLFxuXG5cdFx0XHRcdFtcImkqc2luKHRoZXRhKVwiLCAwLCAwLCBcImNvcyh0aGV0YSlcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiY2lyY2xlXCIsXCJjaXJjbGVcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIllZXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcInl5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgeXkoJXRoZXRhKTpcXG4gICAgQ09TKCV0aGV0YSksIDAsIDAsIGkqU0lOKCV0aGV0YSlcXG4gICAgMCwgQ09TKCV0aGV0YSksIC1pKlNJTigldGhldGEpLCAwXFxuICAgIDAsIC1pKlNJTigldGhldGEpLCBDT1MoJXRoZXRhKSwgMFxcbiAgICBpKlNJTigldGhldGEpLCAwLCAwLCBDT1MoJXRoZXRhKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIllZXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ5eVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiWyBbcXVpbF9jb3MocF90aGV0YSksIDAsIDAsIDFqKnF1aWxfc2luKHBfdGhldGEpXSwgWzAsIHF1aWxfY29zKHBfdGhldGEpLCAtMWoqcXVpbF9zaW4ocF90aGV0YSksIDBdLCBbMCwgLTFqKnF1aWxfc2luKHBfdGhldGEpLCBxdWlsX2NvcyhwX3RoZXRhKSwgMF0sIFsxaipxdWlsX3NpbihwX3RoZXRhKSwgMCwgMCwgcXVpbF9jb3MocF90aGV0YSldIF1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwieXlcIixcblx0XHRcdFx0XHQvL0BUT0RPIGFkZCBmdW5jdGlvblxuXHRcdFx0XHRcdGZ1bmM6IFwiVE9ET1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwieXlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bWF0cml4OiBbW1wiY29zKHRoZXRhKVwiLCAwLCAwLCBcImkqc2luKHRoZXRhKVwiXSxbMCwgXCJjb3ModGhldGEpXCIsIFwiLWkqc2luKHRoZXRhKVwiLCAwXSxbMCwgXCItaSpzaW4odGhldGEpXCIsIFwiY29zKHRoZXRhKVwiLCAwXSxbXCJpKnNpbih0aGV0YSlcIiwgMCwgMCwgXCJjb3ModGhldGEpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbW25wLmNvcyhwX3RoZXRhKSwgMCwgMCwgMWoqbnAuc2luKHBfdGhldGEpXSwgWzAsIG5wLmNvcyhwX3RoZXRhKSwgLTFqKm5wLnNpbihwX3RoZXRhKSwgMF0sIFswLCAtMWoqbnAuc2luKHBfdGhldGEpLCBucC5jb3MocF90aGV0YSksIDBdLCBbMWoqbnAuc2luKHBfdGhldGEpLCAwLCAwLCBucC5jb3MocF90aGV0YSldIF1cIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ5eVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicnl5XCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR6ejoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUGFyYW1ldHJpYyAyLXF1Yml0IHJvdGF0aW9uIGFib3V0IFpaXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WyBcImV4cCgtaSAqIHRoZXRhIC8gMilcIiwgMCwgMCwgMCBdLFxuXHRcdFx0XHRbIDAsIFwiZXhwKGkgKiB0aGV0YSAvIDIpXCIsIDAsIDAgIF0sXG5cdFx0XHRcdFsgMCwgMCwgXCJleHAoaSAqIHRoZXRhIC8gMilcIiwgMCAgXSxcblx0XHRcdFx0WyAwLCAwLCAwLCBcImV4cCgtaSAqIHRoZXRhIC8gMilcIiBdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImNpcmNsZVwiLFwiY2lyY2xlXCJdLFxuXHRcdFx0XHRsYWJlbDogXCJaWlwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ6elwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIHp6KCV0aGV0YSk6XFxuICAgIEVYUCgtaSAqICV0aGV0YSAvIDIpLCAwLCAwLCAwXFxuICAgIDAsIEVYUChpICogJXRoZXRhIC8gMiksIDAsIDBcXG4gICAgMCwgMCwgRVhQKGkgKiAldGhldGEgLyAyKSwgMFxcbiAgICAwLCAwLCAwLCBFWFAoLWkgKiAldGhldGEgLyAyKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwienpcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIlsgWyBxdWlsX2V4cCgtMWogKiBwX3RoZXRhIC8gMiksIDAsIDAsIDAgXSwgWyAwLCBxdWlsX2V4cCgxaiAqIHBfdGhldGEgLyAyKSwgMCwgMF0sIFsgMCwgMCwgcXVpbF9leHAoMWogKiBwX3RoZXRhIC8gMiksIDAgXSwgWyAwLCAwLCAwLCBxdWlsX2V4cCgtMWogKiBwX3RoZXRhIC8gMikgXSBdXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwicnp6XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyenpcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNyMjoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCBQSS8yIHJvdGF0aW9uIG92ZXIgWi1heGlzXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLDAsMSwwXSxcblx0XHRcdFx0WzAsMCwwLFwiZXhwKGkgKiBwaSAvIDIpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJaJiN4MUQ2RDE7LzJcIixcblx0XHRcdFx0cm9vdDogXCJyMlwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzJcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS8yXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkUGhhc2VTaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczoge3RoZXRhOlwiTV9QSS8yXCJ9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS8yXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1MVwiLCBwYXJhbXM6IHsgbGFtYmRhOiBcInBpLzJcIiB9fVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvMlwiIH19XG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvVwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLCAwLCAwLCAwXSwgWzAsIDEsIDAsIDBdLCBbMCwgMCwgMSwgMF0sIFswLCAwLCAwLCBucC5leHAoMWogKiBucC5waSAvIDIpXSBdXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3I0OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIFBJLzQgcm90YXRpb24gb3ZlciBaLWF4aXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwxLDBdLFxuXHRcdFx0XHRbMCwwLDAsXCJleHAoaSAqIHBpIC8gNClcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlomI3gxRDZEMTsvNFwiLFxuXHRcdFx0XHRyb290OiBcInI0XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvNFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzRcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRQaGFzZVNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiB7dGhldGE6XCJNX1BJLzRcIn1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzRcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvNFwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjdTFcIiwgcGFyYW1zOiB7IGxhbWJkYTogXCJwaS80XCIgfX1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLCAwLCAwLCAwXSwgWzAsIDEsIDAsIDBdLCBbMCwgMCwgMSwgMF0sIFswLCAwLCAwLCBucC5leHAoMWogKiBucC5waSAvIDQpXSBdXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlRcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3I4OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIFBJLzggcm90YXRpb24gb3ZlciBaLWF4aXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwxLDBdLFxuXHRcdFx0XHRbMCwwLDAsXCJleHAoaSAqIHBpIC8gOClcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlomI3gxRDZEMTsvOFwiLFxuXHRcdFx0XHRyb290OiBcInI4XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvOFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzhcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRQaGFzZVNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiB7dGhldGE6XCJNX1BJLzhcIn1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzhcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvOFwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjdTFcIiwgcGFyYW1zOiB7IGxhbWJkYTogXCJwaS84XCIgfX1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7ihZtcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwgMCwgMCwgMF0sIFswLCAxLCAwLCAwXSwgWzAsIDAsIDEsIDBdLCBbMCwgMCwgMCwgbnAuZXhwKDFqICogbnAucGkgLyA4KV0gXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bWF0cml4OiBbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDEsMF0sWzAsMCwwLFwiZXhwKGkgKiBwaSAvIDgpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgMSwgMCwgMF0sIFswLCAwLCAxLCAwXSwgWzAsIDAsIDAsIG5wLmV4cCgxaiAqIG5wLnBpIC8gOCldIF1cIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNyeDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCByb3RhdGlvbiBhcm91bmQgdGhlIFgtYXhpcyBieSBnaXZlbiBhbmdsZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsgMSwgMCwgMCwgMCBdLFxuXHRcdFx0XHRbIDAsIDEsIDAsIDAgXSxcblx0XHRcdFx0WyAwLCAwLCBcImNvcyh0aGV0YSAvIDIpXCIsIFwiLWkgKiBzaW4odGhldGEgLyAyKVwiIF0sXG5cdFx0XHRcdFsgMCwgMCwgXCItaSAqIHNpbih0aGV0YSAvIDIpXCIsIFwiY29zKHRoZXRhIC8gMilcIiBdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJSWFwiLFxuXHRcdFx0XHRyb290OiBcInJ4XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNyeFwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIGNyeCgldGhldGEpOlxcbiAgICAxLCAwLCAwLCAwXFxuICAgIDAsIDEsIDAsIDBcXG4gICAgMCwgMCwgQ09TKCV0aGV0YS8yKSwgLWkqU0lOKCV0aGV0YS8yKVxcbiAgICAwLCAwLCAtaSpTSU4oJXRoZXRhLzIpLCBDT1MoJXRoZXRhLzIpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInJ4XCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHsgdGhldGE6IFwidGhldGFcIiB9LFxuXHRcdFx0XHRcdFx0dHlwZTogXCJjb250cm9sbGVkXCIsXG5cdFx0XHRcdFx0XHRub3RUZnFTdXBwb3J0ZWQ6IHRydWVcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3J4XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWyAxLCAwLCAwLCAwIF0sIFsgMCwgMSwgMCwgMCBdLCBbIDAsIDAsIHF1aWxfY29zKHBfdGhldGEgLyAyKSwgLTFqKnF1aWxfc2luKHBfdGhldGEgLyAyKSBdLCBbIDAsIDAsIC0xaipxdWlsX3NpbihwX3RoZXRhIC8gMiksIHF1aWxfY29zKHBfdGhldGEgLyAyKSBdXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkVW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0bWF0cml4OiBbW1tcImNvcyh0aGV0YS8yKVwiLCBcIjBcIl0sIFtcIjBcIiwgXCItc2luKHRoZXRhLzIpXCJdXSxcblx0XHRcdFx0XHRcdFx0IFtbXCIwXCIsIFwiLXNpbih0aGV0YS8yKVwiXSwgW1wiY29zKHRoZXRhLzIpXCIsIFwiMFwiXV1dXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ29udHJvbGxlZCBSeFwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UzXCIsIHBhcmFtczogeyB0aGV0YTogXCJ0aGV0YVwiLCBwaGk6IFwiLTEqcGkvMlwiLCBsYW1iZGE6IFwicGkvMlwiIH19LFxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UzXCIsIHBhcmFtczogeyB0aGV0YTogXCJ0aGV0YVwiLCBwaGk6IFwiLTEqcGkvMlwiLCBsYW1iZGE6IFwicGkvMlwiIH19LFxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sgMSwgMCwgMCwgMCBdLCBbIDAsIDEsIDAsIDAgXSwgWyAwLCAwLCBucC5jb3MocF90aGV0YSAvIDIpLCAtMWoqbnAuc2luKHBfdGhldGEgLyAyKSBdLCBbIDAsIDAsIC0xaipucC5zaW4ocF90aGV0YSAvIDIpLCBucC5jb3MocF90aGV0YSAvIDIpIF1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJYXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNyeToge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCByb3RhdGlvbiBhcm91bmQgdGhlIFktYXhpcyBieSBnaXZlbiBhbmdsZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsgMSwgMCwgMCwgMCBdLFxuXHRcdFx0XHRbIDAsIDEsIDAsIDAgXSxcblx0XHRcdFx0WyAwLCAwLCBcImNvcyh0aGV0YSAvIDIpXCIsIFwiLTEgKiBzaW4odGhldGEgLyAyKVwiIF0sXG5cdFx0XHRcdFsgMCwgMCwgXCJzaW4odGhldGEgLyAyKVwiLCBcImNvcyh0aGV0YSAvIDIpXCIgXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJkb3RcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiUllcIixcblx0XHRcdFx0cm9vdDogXCJyeVwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSBjcnkoJXRoZXRhKTpcXG4gICAgMSwgMCwgMCwgMFxcbiAgICAwLCAxLCAwLCAwXFxuICAgIDAsIDAsIENPUygldGhldGEvMiksIC0xKlNJTigldGhldGEvMilcXG4gICAgMCwgMCwgU0lOKCV0aGV0YS8yKSwgQ09TKCV0aGV0YS8yKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJyeVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7IHRoZXRhOiBcInRoZXRhXCIgfSxcblx0XHRcdFx0XHRcdHR5cGU6IFwiY29udHJvbGxlZFwiLFxuXHRcdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sgMSwgMCwgMCwgMCBdLFsgMCwgMSwgMCwgMCBdLFsgMCwgMCwgcXVpbF9jb3MocF90aGV0YSAvIDIpLCAtMSpxdWlsX3NpbihwX3RoZXRhIC8gMikgXSxbIDAsIDAsIHF1aWxfc2luKHBfdGhldGEgLyAyKSwgcXVpbF9jb3MocF90aGV0YSAvIDIpIF1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRVbml0YXJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdFx0XHRtYXRyaXg6IFtbW1wiY29zKHRoZXRhLzIpXCIsIFwiMFwiXSwgW1wiLXNpbih0aGV0YS8yKVwiLCBcIjBcIl1dLFxuXHRcdFx0XHRcdFx0XHQgW1tcInNpbih0aGV0YS8yKVwiLCBcIjBcIl0sIFtcImNvcyh0aGV0YS8yKVwiLCBcIjBcIl1dXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNvbnRyb2xsZWQgUnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRlcXVpdmFsZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInRoZXRhLzJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCItMSp0aGV0YSAvIDJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXSB9XG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRlcXVpdmFsZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInRoZXRhLzJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCItMSp0aGV0YSAvIDJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXSB9XG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbIDEsIDAsIDAsIDAgXSxbIDAsIDEsIDAsIDAgXSxbIDAsIDAsIG5wLmNvcyhwX3RoZXRhIC8gMiksIC0xKm5wLnNpbihwX3RoZXRhIC8gMikgXSxbIDAsIDAsIG5wLnNpbihwX3RoZXRhIC8gMiksIG5wLmNvcyhwX3RoZXRhIC8gMikgXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiUllcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3J6OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIHJvdGF0aW9uIGFyb3VuZCB0aGUgWi1heGlzIGJ5IGdpdmVuIGFuZ2xlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLCAwLCBcImNvcyhwaGkgLyAyKSAtIGkgKiBzaW4ocGhpIC8gMilcIiwgMF0sXG5cdFx0XHRcdFswLCAwLCAwLCBcImNvcyhwaGkgLyAyKSArIGkgKiBzaW4ocGhpIC8gMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcInBoaVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiZG90XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJSWlwiLFxuXHRcdFx0XHRyb290OiBcInJ6XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNyelwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCJdLFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSBjcnooJXBoaSk6XFxuICAgIDEsIDAsIDAsIDBcXG4gICAgMCwgMSwgMCwgMFxcbiAgICAwLCAwLCBDT1MoJXBoaSAvIDIpIC0gaSAqIFNJTiglcGhpIC8gMiksIDBcXG4gICAgMCwgMCwgMCwgQ09TKCVwaGkgLyAyKSArIGkgKiBTSU4oJXBoaSAvIDIpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjcnpcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgMSwgMCwgMF0sIFswLCAwLCBxdWlsX2NvcyhwX3BoaSAvIDIpIC0gMWogKiBxdWlsX3NpbihwX3BoaSAvIDIpLCAwXSwgWzAsIDAsIDAsIHF1aWxfY29zKHBfcGhpIC8gMikgKyAxaiAqIHF1aWxfc2luKHBfcGhpIC8gMildXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJyelwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7IHBoaTogXCJwaGlcIiB9LFxuXHRcdFx0XHRcdFx0dHlwZTogXCJjb250cm9sbGVkXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkUm90YXRlWlwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDb250cm9sbGVkIFJ6XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLCAwLCAwLCAwXSwgWzAsIDEsIDAsIDBdLCBbMCwgMCwgbnAuY29zKHBfcGhpIC8gMikgLSAxaiAqIG5wLnNpbihwX3BoaSAvIDIpLCAwXSwgWzAsIDAsIDAsIG5wLmNvcyhwX3BoaSAvIDIpICsgMWogKiBucC5zaW4ocF9waGkgLyAyKV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJaXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGN1MToge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCByb3RhdGlvbiBhYm91dCB0aGUgWiBheGlzXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLDAsMSwwXSxcblx0XHRcdFx0WzAsMCwwLFwiZXhwKGkgKiBsYW1iZGEpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJsYW1iZGFcIl0sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJkb3RcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiQ1UxXCIsXG5cdFx0XHRcdHJvb3Q6IFwidTFcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ1BIQVNFXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJsYW1iZGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLCAwLCAwLCAwXSwgWzAsIDEsIDAsIDBdLCBbMCwgMCwgMSwgMF0sIFswLCAwLCAwLCBucC5leHAoMWoqcF9sYW1iZGEpXV1cIixcblx0XHRcdFx0XHRub3RUZnFTdXBwb3J0ZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRQaGFzZVNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgMSwgMCwgMF0sIFswLCAwLCAxLCAwXSwgWzAsIDAsIDAsIG5wLmV4cCgxaipwX2xhbWJkYSldXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJQSFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjcFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3UyOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIHJvdGF0aW9uIGFib3V0IHRoZSBYK1ogYXhpc1wiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsgMSwgMCwgMCwgMCBdLFxuXHRcdFx0XHRbIDAsIDEsIDAsIDAgXSxcblx0XHRcdFx0WyAwLCAwLCBcIjEgLyBzcXJ0KDIpXCIsIFwiLWV4cChpICogbGFtYmRhKSAqIDEgLyBzcXJ0KDIpXCIgXSxcblx0XHRcdFx0WyAwLCAwLCBcImV4cChpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCIsIFwiZXhwKGkgKiBsYW1iZGEgKyBpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCIgXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIkNVMlwiLFxuXHRcdFx0XHRyb290OiBcInUyXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN1MlwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSBjdTIoJXBoaSwgJWxhbWJkYSk6XFxuICAgIDEsIDAsIDAsIDBcXG4gICAgMCwgMSwgMCwgMFxcbiAgICAwLCAwLCAxL1NRUlQoMiksIC0xKkVYUChpKiVsYW1iZGEpKjEvU1FSVCgyKVxcbiAgICAwLCAwLCBFWFAoaSolcGhpKSoxL1NRUlQoMiksIEVYUChpKiVsYW1iZGEgKyBpKiVwaGkpKjEvU1FSVCgyKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3UyXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsIDAsIDEvcXVpbF9zcXJ0KDIpLCAtcXVpbF9leHAoMWoqcF9sYW1iZGEpKjEvcXVpbF9zcXJ0KDIpXSxbMCwgMCwgcXVpbF9leHAoMWoqcF9waGkpKjEvcXVpbF9zcXJ0KDIpLCBxdWlsX2V4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqMS9xdWlsX3NxcnQoMildXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN1MlwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCAxL25wLnNxcnQoMiksIC1ucC5leHAoMWoqcF9sYW1iZGEpKjEvbnAuc3FydCgyKV0sWzAsIDAsIG5wLmV4cCgxaipwX3BoaSkqMS9ucC5zcXJ0KDIpLCBucC5leHAoMWoqcF9sYW1iZGErMWoqcF9waGkpKjEvbnAuc3FydCgyKV1dXCIsXG5cdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkVW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdG1hdHJpeDogW1tbXCIxL3NxcnQoMilcIiwgXCIwXCJdLCBbXCItY29zKGxhbWJkYSkvc3FydCgyKVwiLCBcIi1zaW4obGFtYmRhKS9zcXJ0KDIpXCJdXSxcblx0XHRcdFx0XHRcdFx0IFtbXCJjb3MocGhpKS9zcXJ0KDIpXCIsIFwic2luKHBoaSkvc3FydCgyKVwiXSwgW1wiY29zKGxhbWJkYStwaGkpL3NxcnQoMilcIiwgXCJzaW4obGFtYmRhK3BoaSkvc3FydCgyKVwiXV1dXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwicGhpXCIsIGxhbWJkYTogXCJsYW1iZGFcIiB9IH1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwicGhpXCIsIGxhbWJkYTogXCJsYW1iZGFcIiB9IH1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwgMCwgMS9ucC5zcXJ0KDIpLCAtbnAuZXhwKDFqKnBfbGFtYmRhKSoxL25wLnNxcnQoMildLFswLCAwLCBucC5leHAoMWoqcF9waGkpKjEvbnAuc3FydCgyKSwgbnAuZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSoxL25wLnNxcnQoMildXVwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sgMSwgMCwgMCwgMCBdLFsgMCwgMSwgMCwgMCBdLFsgMCwgMCwgXCIxIC8gc3FydCgyKVwiLCBcIi1leHAoaSAqIGxhbWJkYSkgKiAxIC8gc3FydCgyKVwiIF0sWyAwLCAwLCBcImV4cChpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCIsIFwiZXhwKGkgKiBsYW1iZGEgKyBpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCIgXV0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsIDAsIDEvbnAuc3FydCgyKSwgLW5wLmV4cCgxaipwX2xhbWJkYSkqMS9ucC5zcXJ0KDIpXSxbMCwgMCwgbnAuZXhwKDFqKnBfcGhpKSoxL25wLnNxcnQoMiksIG5wLmV4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqMS9ucC5zcXJ0KDIpXV1cIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiLCBcImxhbWJkYVwiXVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGN1Mzoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCByb3RhdGlvbiBnYXRlIHdpdGggMyBFdWxlciBhbmdsZXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbIDEsIDAsIDAsIDAgXSxcblx0XHRcdFx0WyAwLCAxLCAwLCAwIF0sXG5cdFx0XHRcdFsgMCwgMCwgXCJjb3ModGhldGEvMilcIiwgXCItZXhwKGkgKiBsYW1iZGEpICogc2luKHRoZXRhIC8gMilcIiBdLFxuXHRcdFx0XHRbIDAsIDAsIFwiZXhwKGkgKiBwaGkpICogc2luKHRoZXRhIC8gMilcIiwgXCJleHAoaSAqIGxhbWJkYSArIGkgKiBwaGkpICogY29zKHRoZXRhIC8gMilcIiBdXG5cdFx0XHRdLFxuXG5cdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIkNVM1wiLFxuXHRcdFx0XHRyb290OiBcInUzXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN1M1wiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIGN1MygldGhldGEsICVwaGksICVsYW1iZGEpOlxcbiAgICAxLCAwLCAwLCAwXFxuICAgIDAsIDEsIDAsIDBcXG4gICAgMCwgMCwgQ09TKCV0aGV0YS8yKSwgLTEqRVhQKGkqJWxhbWJkYSkqU0lOKCV0aGV0YS8yKVxcbiAgICAwLCAwLCBFWFAoaSolcGhpKSpTSU4oJXRoZXRhLzIpLCBFWFAoaSolbGFtYmRhICsgaSolcGhpKSpDT1MoJXRoZXRhLzIpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjdTNcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCBxdWlsX2NvcyhwX3RoZXRhLzIpLC1xdWlsX2V4cCgxaipwX2xhbWJkYSkqcXVpbF9zaW4ocF90aGV0YS8yKV0sWzAsIDAsIHF1aWxfZXhwKDFqKnBfcGhpKSpxdWlsX3NpbihwX3RoZXRhLzIpLHF1aWxfZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSpxdWlsX2NvcyhwX3RoZXRhLzIpXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjdTNcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCBucC5jb3MocF90aGV0YS8yKSwtbnAuZXhwKDFqKnBfbGFtYmRhKSpucC5zaW4ocF90aGV0YS8yKV0sWzAsIDAsIG5wLmV4cCgxaipwX3BoaSkqbnAuc2luKHBfdGhldGEvMiksbnAuZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSpucC5jb3MocF90aGV0YS8yKV1dXCIsXG5cdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkVW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0bWF0cml4OiBbW1tcImNvcyh0aGV0YS8yKVwiLCBcIjBcIl0sIFtcIi1jb3MobGFtYmRhKSpzaW4odGhldGEvMilcIiwgXCItc2luKGxhbWJkYSkqc2luKHRoZXRhLzIpXCJdXSxcblx0XHRcdFx0XHRcdFx0IFtbXCJjb3MocGhpKSpzaW4odGhldGEvMilcIiwgXCJzaW4ocGhpKSpzaW4odGhldGEvMilcIl0sIFtcImNvcyhsYW1iZGErcGhpKSpjb3ModGhldGEvMilcIiwgXCJzaW4obGFtYmRhK3BoaSkqY29zKHRoZXRhLzIpXCJdXV1cblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiLCBcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwgMCwgbnAuY29zKHBfdGhldGEvMiksLW5wLmV4cCgxaipwX2xhbWJkYSkqbnAuc2luKHBfdGhldGEvMildLFswLCAwLCBucC5leHAoMWoqcF9waGkpKm5wLnNpbihwX3RoZXRhLzIpLG5wLmV4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqbnAuY29zKHBfdGhldGEvMildXVwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sgMSwgMCwgMCwgMCBdLFsgMCwgMSwgMCwgMCBdLFsgMCwgMCwgXCJjb3ModGhldGEvMilcIiwgXCItZXhwKGkgKiBsYW1iZGEpICogc2luKHRoZXRhIC8gMilcIiBdLFsgMCwgMCwgXCJleHAoaSAqIHBoaSkgKiBzaW4odGhldGEgLyAyKVwiLCBcImV4cChpICogbGFtYmRhICsgaSAqIHBoaSkgKiBjb3ModGhldGEgLyAyKVwiIF1dLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCBucC5jb3MocF90aGV0YS8yKSwtbnAuZXhwKDFqKnBfbGFtYmRhKSpucC5zaW4ocF90aGV0YS8yKV0sWzAsIDAsIG5wLmV4cCgxaipwX3BoaSkqbnAuc2luKHBfdGhldGEvMiksbnAuZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSpucC5jb3MocF90aGV0YS8yKV1dXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiLCBcInBoaVwiLCBcImxhbWJkYVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN1XCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjczoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCBQSS8yIHJvdGF0aW9uIG92ZXIgWi1heGlzIChzeW5vbnltIGZvciBgY3IyYClcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwxLDBdLFxuXHRcdFx0XHRbMCwwLDAsXCJleHAoaSAqIHBpIC8gMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlNcIixcblx0XHRcdFx0cm9vdDogXCJzXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvMlwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzJcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRQaGFzZVNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiB7dGhldGE6XCJNX1BJLzJcIn1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzJcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvMlwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjdTFcIiwgcGFyYW1zOiB7IGxhbWJkYTogXCJwaS8yXCIgfX1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvVwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsIDAsIDEsIDBdLFswLCAwLCAwLCBucC5leHAoMWogKiBucC5waSAvIDIpXV1cIixcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3Q6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgUEkvNCByb3RhdGlvbiBvdmVyIFotYXhpcyAoc3lub255bSBmb3IgYGNyNGApXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLDAsMSwwXSxcblx0XHRcdFx0WzAsMCwwLFwiZXhwKGkgKiBwaSAvIDQpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJUXCIsXG5cdFx0XHRcdHJvb3Q6IFwidFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzRcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS80XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkUGhhc2VTaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczoge3RoZXRhOlwiTV9QSS80XCJ9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS80XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1MVwiLCBwYXJhbXM6IHsgbGFtYmRhOiBcInBpLzRcIiB9fVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvNFwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpewrxcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCAxLCAwXSxbMCwgMCwgMCwgbnAuZXhwKDFqICogbnAucGkgLyA0KV1dXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJUXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNzZGc6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgKC1QSS8yKSByb3RhdGlvbiBvdmVyIFotYXhpc1wiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDEsMF0sXG5cdFx0XHRcdFswLDAsMCxcImV4cCgtaSAqIHBpIC8gMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlMmIzgyMjQ7XCIsXG5cdFx0XHRcdHJvb3Q6IFwic2RnXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwiLXBpLzJcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvMlwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udHJvbGxlZFBoYXNlU2hpZnRcIixcblx0XHRcdFx0XHRwYXJhbXM6IHt0aGV0YTpcIi1NX1BJLzJcIn1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcIi1waS8yXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1MVwiLCBwYXJhbXM6IHsgbGFtYmRhOiBcIi0xKnBpLzJcIiB9fVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwiLTEqcGkvMlwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpeLcK9XCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwgMCwgMSwgMF0sWzAsIDAsIDAsIG5wLmV4cCgtMWogKiBucC5waSAvIDIpXV1cIixcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlLFxuXHRcdFx0XHRcdGRhZ2dlcjogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGN0ZGc6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgKC1QSS80KSByb3RhdGlvbiBvdmVyIFotYXhpc1wiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDEsMF0sXG5cdFx0XHRcdFswLDAsMCxcImV4cCgtaSAqIHBpIC8gNClcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlQmIzgyMjQ7XCIsXG5cdFx0XHRcdHJvb3Q6IFwidGRnXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwiLXBpLzRcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvNFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udHJvbGxlZFBoYXNlU2hpZnRcIixcblx0XHRcdFx0XHRwYXJhbXM6IHt0aGV0YTpcIi1NX1BJLzRcIn1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcIi1waS80XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1MVwiLCBwYXJhbXM6IHsgbGFtYmRhOiBcIi0xKnBpLzRcIiB9fVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwiLTEqcGkvNFwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpeLcK8XCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwgMCwgMSwgMF0sWzAsIDAsIDAsIG5wLmV4cCgtMWogKiBucC5waSAvIDQpXV1cIixcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlRcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlLFxuXHRcdFx0XHRcdGRhZ2dlcjogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNjeDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiVG9mZm9saSBha2EgXFxcIkNDTk9UXFxcIiBnYXRlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDAsMCwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwLDAsMCwwLDBdLFxuXHRcdFx0XHRbMCwwLDEsMCwwLDAsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDEsMCwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMCwwLDEsMCwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMCwwLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDAsMCwwLDAsMV0sXG5cdFx0XHRcdFswLDAsMCwwLDAsMCwxLDBdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiZG90XCIsXCJub3RcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIkNDTk9UXCIsXG5cdFx0XHRcdHJvb3Q6IFwieFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDQ05PVFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNDWFwiLFxuXHRcdFx0XHRcdG5vdFRmcVN1cHBvcnRlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY2N4XCIsXG5cdFx0XHRcdFx0ZnVuYzogXCJ2b2lkIGNjeChRdXJlZyBxdWJpdHMsIGNvbnN0IGludCBxMSwgY29uc3QgaW50IHEyLCBjb25zdCBpbnQgcTMpIHtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgaGFkYW1hcmQocXViaXRzLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMiwgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBwaGFzZVNoaWZ0KHF1Yml0cywgcTMsIC1NX1BJLzQpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEzKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgdEdhdGUocXViaXRzLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMiwgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBwaGFzZVNoaWZ0KHF1Yml0cywgcTMsIC1NX1BJLzQpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEzKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgdEdhdGUocXViaXRzLCBxMik7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHRHYXRlKHF1Yml0cywgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEyKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgaGFkYW1hcmQocXViaXRzLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHRHYXRlKHF1Yml0cywgcTEpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBwaGFzZVNoaWZ0KHF1Yml0cywgcTIsIC1NX1BJLzQpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEyKTtcXG59XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDQ05PVFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJYXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNjbm90XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNDTk9UXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjc3dhcDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCBzd2FwIGFrYSBcXFwiRnJlZGtpblxcXCIgZ2F0ZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwLDAsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMCwwLDAsMCwwXSxcblx0XHRcdFx0WzAsMCwxLDAsMCwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMCwxLDAsMCwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMCwxLDAsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDAsMCwwLDEsMF0sXG5cdFx0XHRcdFswLDAsMCwwLDAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMCwwLDAsMCwxXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJkb3RcIixcInhcIixcInhcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlNXUFwiLFxuXHRcdFx0XHRyb290OiBcInN3YXBcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ1NXQVBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3N3YXBcIixcblx0XHRcdFx0XHRmdW5jOiBcInZvaWQgY3N3YXAoUXVyZWcgcXViaXRzLCBjb25zdCBpbnQgcTEsIGNvbnN0IGludCBxMiwgY29uc3QgaW50IHEzKSB7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMywgcTIpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBoYWRhbWFyZChxdWJpdHMsIHEzKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHEyLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHBoYXNlU2hpZnQocXViaXRzLCBxMywgLU1fUEkvNCk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMSwgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICB0R2F0ZShxdWJpdHMsIHEzKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHEyLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHBoYXNlU2hpZnQocXViaXRzLCBxMywgLU1fUEkvNCk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMSwgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICB0R2F0ZShxdWJpdHMsIHEyKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgdEdhdGUocXViaXRzLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGhhZGFtYXJkKHF1Yml0cywgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEyKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgdEdhdGUocXViaXRzLCBxMSk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHBoYXNlU2hpZnQocXViaXRzLCBxMiwgLU1fUEkvNCk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMiwgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTMsIHEyKTtcXG59XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDb250cm9sbGVkIFNXQVBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDU1dBUFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ1NXQVBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiU3dhcFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwLDAsMCwwLDBdLCBbMCwxLDAsMCwwLDAsMCwwXSwgWzAsMCwxLDAsMCwwLDAsMF0sIFswLDAsMCwxLDAsMCwwLDBdLCBbMCwwLDAsMCwxLDAsMCwwXSwgWzAsMCwwLDAsMCwwLDEsMF0sIFswLDAsMCwwLDAsMSwwLDBdLCBbMCwwLDAsMCwwLDAsMCwxXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiU1dBUFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjc3Jzd2FwOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIHNxdWFyZSByb290IG9mIHN3YXBcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMCwwLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDAsMCwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMSwwLDAsMCwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMSwwLDAsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDAsMSwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMCwwLDAsXCIwLjUgKiAoMSArIGkpXCIsXCIwLjUgKiAoMSAtIGkpXCIsMF0sXG5cdFx0XHRcdFswLDAsMCwwLDAsXCIwLjUgKiAoMSAtIGkpXCIsXCIwLjUgKiAoMSArIGkpXCIsMF0sXG5cdFx0XHRcdFswLDAsMCwwLDAsMCwwLDFdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiYm94XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIiYjeDIyMUE7U1dQXCIsXG5cdFx0XHRcdHJvb3Q6IFwic3Jzd2FwXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjc3Jzd2FwXCIsXG5cdFx0XHRcdFx0Ly9AVE9ETyBhZGQgZnVuY3Rpb25cblx0XHRcdFx0XHRmdW5jOiBcIlRPRE9cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwic3Jzd2FwXCIsXG5cdFx0XHRcdFx0XHR0eXBlOiBcImNvbnRyb2xsZWRcIixcblx0XHRcdFx0XHRcdG5vdFRmcVN1cHBvcnRlZDogdHJ1ZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3Nyc3dhcFwiLFx0XHRcdFx0XHRcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgY3Nyc3dhcDpcXG4gICAgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMFxcbiAgICAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwXFxuICAgIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDBcXG4gICAgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMFxcbiAgICAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwXFxuICAgIDAsIDAsIDAsIDAsIDAsIDAuNSswLjVpLCAwLjUtMC41aSwgMFxcbiAgICAwLCAwLCAwLCAwLCAwLCAwLjUtMC41aSwgMC41KzAuNWksIDBcXG4gICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3Nyc3dhcFwiLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMCwwLDAsMCwwXSxbMCwxLDAsMCwwLDAsMCwwXSxbMCwwLDEsMCwwLDAsMCwwXSxbMCwwLDAsMSwwLDAsMCwwXSxbMCwwLDAsMCwxLDAsMCwwXSxbMCwwLDAsMCwwLDAuNSAqICgxICsgMWopLDAuNSAqICgxIC0gMWopLDBdLFswLDAsMCwwLDAsMC41ICogKDEgLSAxaiksMC41ICogKDEgKyAxaiksMF0sWzAsMCwwLDAsMCwwLDAsMV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwLDAsMCwwLDBdLFswLDEsMCwwLDAsMCwwLDBdLFswLDAsMSwwLDAsMCwwLDBdLFswLDAsMCwxLDAsMCwwLDBdLFswLDAsMCwwLDEsMCwwLDBdLFswLDAsMCwwLDAsMC41ICogKDEgKyAxaiksMC41ICogKDEgLSAxaiksMF0sWzAsMCwwLDAsMCwwLjUgKiAoMSAtIDFqKSwwLjUgKiAoMSArIDFqKSwwXSxbMCwwLDAsMCwwLDAsMCwxXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiU1FSVFNXQVBcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0cmVzZXQ6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlJlc2V0cyBxdWJpdFwiLFxuXHRcdFx0bWF0cml4OiBbXSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlJTVFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJSRVNFVFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJlc2V0XCIsXG5cdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyZXNldFwiLFxuXHRcdFx0XHRcdC8vQFRPRE8gYWRkIGZ1bmN0aW9uXG5cdFx0XHRcdFx0ZnVuYzogXCJUT0RPXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJSZXNldFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0bWVhc3VyZToge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiTWVhc3VyZXMgcXViaXQgYW5kIHN0b3JlcyBjaGFuY2UgKDAgb3IgMSkgaW50byBjbGFzc2ljYWwgYml0XCIsXG5cdFx0XHRtYXRyaXg6IFtdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImdhdWdlXCJdLFxuXHRcdFx0XHRsYWJlbDogXCJcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiTUVBU1VSRVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIm1lYXN1cmVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwibWVhc3VyZVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiTVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dGhpcy5pbml0KG51bVF1Yml0cyk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZGVmYXVsdEh5YnJpZE9wdGlvbnMgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHtcblx0XHRvcHRpbWl6ZXI6IFwiUG93ZWxsXCIsXG5cdFx0dG9sZXJhbmNlOiAwLjAwMSxcblx0XHRjb3N0RnVuY3Rpb246IHtcblx0XHRcdHB5dGhvbjogXCJcIixcblx0XHRcdGphdmFzY3JpcHQ6IFwiXCJcblx0XHR9XG5cdH07XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaW5pdCA9IGZ1bmN0aW9uKG51bVF1Yml0cywgb3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR0aGlzLm51bVF1Yml0cyA9IG51bVF1Yml0cyB8fCAxO1xuXHR0aGlzLmdhdGVzID0gW107XG5cdHRoaXMucGFydGl0aW9uTWFwID0gW107XG5cdHRoaXMucGFydGl0aW9uQ291bnQgPSAwO1xuXHR0aGlzLnBhcnRpdGlvbkluZm8gPSB7fTtcblxuXHR0aGlzLnBhcmFtcyA9IFtdO1xuXHR0aGlzLm9wdGlvbnMgPSB7XG5cdFx0cGFyYW1zOiB7fSxcblxuXHRcdGh5YnJpZDogZmFsc2UsXG5cdFx0aHlicmlkT3B0aW9uczogdGhpcy5kZWZhdWx0SHlicmlkT3B0aW9ucygpXG5cdH07XG5cblx0aWYoIW9wdGlvbnMua2VlcEN1c3RvbUdhdGVzKSB7XG5cdFx0dGhpcy5jdXN0b21HYXRlcyA9IHt9O1xuXHR9XG5cblx0dGhpcy5jcmVncyA9IHt9O1xuXHR0aGlzLmNvbGxhcHNlZCA9IFtdO1xuXHR0aGlzLnByb2IgPSBbXTtcblx0dGhpcy5tZWFzdXJlUmVzZXRzUXViaXQgPSBmYWxzZTtcblx0dGhpcy5yZXZlcnNlQml0T3JkZXIgPSBmYWxzZTtcblxuXHR0aGlzLmNsZWFyKCk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuY2xlYXJHYXRlcyA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLmdhdGVzID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLm51bVF1Yml0czsgaSsrKSB7XG5cdFx0dGhpcy5nYXRlcy5wdXNoKFtdKTtcblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuY2xlYXJHYXRlcygpO1xuXHR0aGlzLmluaXRTdGF0ZSgpO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVzZXRTdGF0ZSA9IGZ1bmN0aW9uKCkge1xuXHQvLyByZXNldCBzdGF0ZVxuXHR0aGlzLnN0YXRlID0ge307XG5cdHRoaXMuc3RhdGVCaXRzID0gMDtcblx0dGhpcy5wYXJ0aXRpb25DYWNoZSA9IHt9O1xuXG5cdC8vIHJlc2V0IGNyZWdzXG5cdGZvcih2YXIgY3JlZyBpbiB0aGlzLmNyZWdzKSB7XG5cdFx0dmFyIGxlbiA9IHRoaXMuY3JlZ3NbY3JlZ10ubGVuZ3RoIHx8IDA7XG5cdFx0dGhpcy5jcmVnc1tjcmVnXSA9IFtdO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0dGhpcy5jcmVnc1tjcmVnXS5wdXNoKDApO1xuXHRcdH1cblx0fVxuXG5cdC8vIHJlc2V0IG1lYXN1cmVtZW50XG5cdHRoaXMuY29sbGFwc2VkID0gW107XG5cdHRoaXMucHJvYiA9IFtdO1xuXG5cdC8vIHJlc2V0IHN0YXRpc3RpY3Ncblx0dGhpcy5zdGF0cyA9IHtcblx0XHRkdXJhdGlvbjogMFxuXHR9O1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmluaXRTdGF0ZSA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnJlc2V0U3RhdGUoKTtcblx0dGhpcy5zdGF0ZVtcIjBcIl0gPSBtYXRoLmNvbXBsZXgoMSwgMCk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZm9ybWF0Q29tcGxleCA9IGZ1bmN0aW9uKGNvbXBsZXgsIG9wdGlvbnMpIHtcblx0cmV0dXJuIGZvcm1hdENvbXBsZXgyKGNvbXBsZXgucmUsIGNvbXBsZXguaW0sIG9wdGlvbnMpO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm11bHRpcGx5U3F1YXJlTWF0cmljZXMgPSBmdW5jdGlvbihtMSwgbTIpIHtcblx0dmFyIGxlbiA9IG0xLmxlbmd0aDtcblxuXHR2YXIgYyA9IGxlbjtcblx0dmFyIGQgPSBsZW47XG5cdHZhciBrID0gbGVuO1xuXG5cdHZhciByZXMgPSBbXTtcblx0d2hpbGUoYy0tKSB7XG5cdFx0cmVzW2NdID0gW107XG5cdFx0ZCA9IGxlbjtcblx0XHR3aGlsZShkLS0pIHtcblx0XHRcdHJlc1tjXVtkXSA9IDA7XG5cdFx0XHRrID0gbGVuO1xuXHRcdFx0d2hpbGUoay0tKSB7XG5cdFx0XHRcdGlmKG0xW2NdW2tdICYmIG0yW2tdW2RdKSB7XG5cdFx0XHRcdFx0aWYocmVzW2NdW2RdKSB7XG5cdFx0XHRcdFx0XHRyZXNbY11bZF0gPSBtYXRoLmFkZChyZXNbY11bZF0sIG1hdGgubXVsdGlwbHkobTFbY11ba10sIG0yW2tdW2RdKSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJlc1tjXVtkXSA9IG1hdGgubXVsdGlwbHkobTFbY11ba10sIG0yW2tdW2RdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIHJlcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5pc0lkZW50aXR5TWF0cml4ID0gZnVuY3Rpb24obSwgcHJlY2lzaW9uKSB7XG5cdGlmKHR5cGVvZiBwcmVjaXNpb24gPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdHByZWNpc2lvbiA9IDE0O1xuXHR9XG5cblx0Zm9yKHZhciBpID0gMDsgaSA8IG0ubGVuZ3RoOyBpKyspIHtcblx0XHRmb3IodmFyIGogPSAwOyBqIDwgbS5sZW5ndGg7IGorKykge1xuXHRcdFx0aWYobWF0aC5yb3VuZChtW2ldW2pdLCBwcmVjaXNpb24pICE9IChpID09IGogPyAxIDogMCkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmlzVW5pdGFyeU1hdHJpeCA9IGZ1bmN0aW9uKFUsIHByZWNpc2lvbikge1xuXHRyZXR1cm4gdGhpcy5pc0lkZW50aXR5TWF0cml4KG1hdGgubXVsdGlwbHkoVSwgbWF0aC5jdHJhbnNwb3NlKFUpKSwgcHJlY2lzaW9uKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmlzSGVybWl0aWFuTWF0cml4ID0gZnVuY3Rpb24oSCwgcHJlY2lzaW9uKSB7XG5cdHZhciBkaWZmID0gdGhpcy5tYXRyaXhEaWZmKEgsIG1hdGguY3RyYW5zcG9zZShIKSlcblxuXHRyZXR1cm4gZGlmZiA8PSBtYXRoLnBvdygxMCwgLTEgKiAocHJlY2lzaW9uIHx8IDE0KSk7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5tYXRyaXhEaWZmID0gZnVuY3Rpb24obWF0cml4MSwgbWF0cml4Mikge1xuXHR2YXIgdG90YWwgPSAwO1xuXHR2YXIgY291bnQgPSAwO1xuXHRmb3IodmFyIHIgPSAwOyByIDwgbWF0cml4MS5sZW5ndGg7IHIrKykge1xuXHRcdHZhciByb3cxID0gbWF0cml4MVtyXTtcblx0XHR2YXIgcm93MiA9IG1hdHJpeDJbcl07XG5cdFx0Zm9yKHZhciBjID0gMDsgYyA8IHJvdzEubGVuZ3RoOyBjKyspIHtcblx0XHRcdHZhciBpdGVtMSA9IHJvdzFbY107XG5cdFx0XHR2YXIgaXRlbTIgPSByb3cyW2NdO1xuXG5cdFx0XHR2YXIgaTEgPSAodHlwZW9mIGl0ZW0xID09IFwib2JqZWN0XCIpID8gaXRlbTEgOiBtYXRoLmNvbXBsZXgoaXRlbTEpO1xuXHRcdFx0dmFyIGkyID0gKHR5cGVvZiBpdGVtMiA9PSBcIm9iamVjdFwiKSA/IGl0ZW0yIDogbWF0aC5jb21wbGV4KGl0ZW0yKTtcblxuXHRcdFx0Ly8gZGlzdGFuY2UgaW4gdGhlIGNvbXBsZXggcGxhbmVcblx0XHRcdHZhciBkaXN0YW5jZSA9IG1hdGguYWJzKG1hdGguc3VidHJhY3QoaTEsIGkyKSk7XG5cblx0XHRcdHRvdGFsICs9IGRpc3RhbmNlO1xuXG5cdFx0XHRjb3VudCsrO1xuXHRcdH1cblx0fVxuXG5cdHZhciBkaWZmID0gY291bnQgPyAodG90YWwgLyBjb3VudCkgOiAwO1xuXG5cdHJldHVybiBkaWZmO1xufTtcblxuXG4vL1xuLy8gRXh0cmFjdCB2YXJpYWJsZXMgZnJvbSBleHByZXNzaW9uIHN0cmluZyBhbmQgcmV0dXJucyBvYmplY3Qgd2l0aCBleHByZXNzaW9uIHN0cmluZyBhbmQgYXJyYXkgb2YgdmFyaWFibGUgbmFtZXNcbi8vIE5vdGUgdGhhdCBzeW1ib2wgXCJqXCIgaXMgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQgdG8gXCJpXCIgKGltYWdpbmFyeSB1bml0IHVzZWQgaW4gcHl0aG9uIGlzIFwialwiIGJ1dCB3ZSBuZWVkIFwiaVwiKVxuLy9cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5wYXJzZU1hdGhTdHJpbmcgPSBmdW5jdGlvbihzdHIpIHtcblx0dmFyIHZhcmlhYmxlcyA9IFtdO1xuXG5cdC8vIGNvbnZlcnQgaW1hZ2luYXJ5IHVuaXQgXCJqXCIgdG8gXCJpXCJcblx0dmFyIG1hdGhUb1N0cmluZ0hhbmRsZXIgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zKSB7XG5cdFx0aWYobm9kZS5pc1N5bWJvbE5vZGUpIHtcblx0XHRcdGlmKG5vZGUubmFtZSA9PSBcImpcIikge1xuXHRcdFx0XHRyZXR1cm4gXCJpXCI7XG5cdFx0XHR9XG5cblx0XHRcdGlmKHZhcmlhYmxlcy5pbmRleE9mKG5vZGUubmFtZSkgPCAwKSB7XG5cdFx0XHRcdHZhcmlhYmxlcy5wdXNoKG5vZGUubmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBub2RlID0gbWF0aC5wYXJzZShzdHIucmVwbGFjZSgvW1xcdFxcblxccl0vZ20sIFwiXCIpKTtcblxuXHR2YXIgZXhwcmVzc2lvbiA9IG5vZGUudG9TdHJpbmcoeyBoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyIH0pO1xuXG5cdHJldHVybiB7XG5cdFx0ZXhwcmVzc2lvbjogZXhwcmVzc2lvbixcblx0XHR2YXJpYWJsZXM6IHZhcmlhYmxlcyxcblx0XHRub2RlOiBub2RlXG5cdH07XG59O1xuXG4vL1xuLy8gRXZhbHVhdGUgZXhwcmVzc2lvblxuLy9cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5ldmFsTWF0aFN0cmluZyA9IGZ1bmN0aW9uKHN0ciwgdmFycykge1xuXHR2YXJzID0gdmFycyB8fCB7fTtcblxuXHR2YXIgcGFyc2VkID0gdGhpcy5wYXJzZU1hdGhTdHJpbmcoc3RyKTtcblxuXHR2YXIgcmVzID0gbWF0aC5ldmFsdWF0ZShwYXJzZWQuZXhwcmVzc2lvbiwgdmFycyk7XG5cdGlmKHJlcyBpbnN0YW5jZW9mIG1hdGguTWF0cml4KSB7XG5cdFx0cmV0dXJuIHJlcy50b0FycmF5KCk7XG5cdH1cblxuXHRyZXR1cm4gcmVzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnBhcnNlTWF0cml4ID0gZnVuY3Rpb24oTSwgdmFycykge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0dmFyIEEgPSBudWxsO1xuXHRpZih0eXBlb2YgTSA9PSBcInN0cmluZ1wiKSB7XG5cdFx0QSA9IHNlbGYuZXZhbE1hdGhTdHJpbmcoTSwgdmFycyk7XG5cdH0gZWxzZSB7XG5cdFx0QSA9IE07XG5cdH1cblxuXHR2YXIgcmVzID0gW107XG5cblx0QS5tYXAoZnVuY3Rpb24ocm93LCByb3dJbmRleCkge1xuXHRcdGlmKEFycmF5LmlzQXJyYXkocm93KSkge1xuXHRcdFx0cmVzLnB1c2goW10pO1xuXHRcdFx0cm93Lm1hcChmdW5jdGlvbih2YWwsIGNvbEluZGV4KSB7XG5cdFx0XHRcdGlmKHR5cGVvZiB2YWwgPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdHJlc1tyb3dJbmRleF0ucHVzaChzZWxmLmV2YWxNYXRoU3RyaW5nKHZhbCwgdmFycykpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlc1tyb3dJbmRleF0ucHVzaCh2YWwpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYodHlwZW9mIHJvdyA9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdHJlcy5wdXNoKHNlbGYuZXZhbE1hdGhTdHJpbmcocm93LCB2YXJzKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXMucHVzaChyb3cpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0cmV0dXJuIHJlcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5tYXRyaXhIYXNDb21wbGV4RWxlbWVudCA9IGZ1bmN0aW9uKE0pIHtcblx0Zm9yKHZhciByID0gMDsgciA8IE0ubGVuZ3RoOyByKyspIHtcblx0XHR2YXIgcm93ID0gTVtyXTtcblxuXHRcdGlmKHJvdyBpbnN0YW5jZW9mIEFycmF5KSB7XG5cdFx0XHRmb3IodmFyIGMgPSAwOyBjIDwgcm93Lmxlbmd0aDsgYysrKSB7XG5cdFx0XHRcdHZhciBjZWxsID0gcm93W2NdO1xuXG5cdFx0XHRcdGlmKGNlbGwgaW5zdGFuY2VvZiBtYXRoLkNvbXBsZXggfHwgKCh0eXBlb2YgY2VsbCA9PSBcIm9iamVjdFwiKSAmJiAoKGNlbGwubWF0aGpzICYmIGNlbGwubWF0aGpzID09IFwiQ29tcGxleFwiKSB8fCAoY2VsbC50eXBlICYmIGNlbGwudHlwZSA9PSBcIkNvbXBsZXhcIikpKSkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmKHJvdyBpbnN0YW5jZW9mIG1hdGguQ29tcGxleCB8fCAoKHR5cGVvZiByb3cgPT0gXCJvYmplY3RcIikgJiYgKChyb3cubWF0aGpzICYmIHJvdy5tYXRoanMgPT0gXCJDb21wbGV4XCIpIHx8IChyb3cudHlwZSAmJiByb3cudHlwZSA9PSBcIkNvbXBsZXhcIikpKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxuXG4vL1xuLy8gT3B0aW9uczoge1xuLy8gICAgIG1pbmlmeTogICAgICAgICBmYWxzZVxuLy9cdCAgIGZpeGVkV2lkdGg6ICAgICBmYWxzZVxuLy8gICAgIGRlY2ltYWxQbGFjZXM6ICAxNCxcbi8vICAgICBpb3RhQ2hhcjogICAgICAgXCJpXCJcbi8vIH1cbi8vXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuc3RyaW5naWZ5TWF0cml4ID0gZnVuY3Rpb24oTSwgb3B0aW9ucykge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0Ly8gbWF0aGpzIE1hdHJpeCB0byBhcnJheVxuXHR2YXIgQSA9IE0udG9BcnJheSA/IE0udG9BcnJheSgpIDogTTtcblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgZm9yY2VDb21wbGV4ID0gZmFsc2U7XG5cdGlmKG9wdGlvbnMuZml4ZWRXaWR0aCkge1xuXHRcdC8vIGZvcmNlQ29tcGxleCBpZiBtYXRyaXggaGFzIGF0IGxlYXN0IG9uZSBjb21wbGV4IGVsZW1lbnRcblx0XHRmb3JjZUNvbXBsZXggPSB0aGlzLm1hdHJpeEhhc0NvbXBsZXhFbGVtZW50KEEpO1xuXHR9XG5cblx0dmFyIHN0ciA9IFwiXCI7XG5cdHN0ciArPSBcIltcIjtcblx0QS5tYXAoZnVuY3Rpb24ocm93LCByb3dJbmRleCkge1xuXHRcdGlmKHJvd0luZGV4ID4gMCkge1xuXHRcdFx0c3RyICs9IFwiLFwiO1xuXHRcdH1cblx0XHRpZighb3B0aW9ucy5taW5pZnkpIHtcblx0XHRcdHN0ciArPSBcIlxcbiAgXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN0ciArPSBcIiBcIjtcblx0XHR9XG5cblx0XHRpZihyb3cgaW5zdGFuY2VvZiBBcnJheSkge1xuXHRcdFx0c3RyICs9IFwiW1wiO1xuXHRcdFx0cm93Lm1hcChmdW5jdGlvbihlbCwgZWxJbmRleCkge1xuXHRcdFx0XHRpZihlbEluZGV4ID4gMCkge1xuXHRcdFx0XHRcdHN0ciArPSBcIiwgXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoZWwgaW5zdGFuY2VvZiBtYXRoLkNvbXBsZXgpIHtcblx0XHRcdFx0XHRzdHIgKz0gc2VsZi5mb3JtYXRDb21wbGV4KGVsLCBvcHRpb25zKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZigodHlwZW9mIGVsID09IFwib2JqZWN0XCIpICYmICgoZWwubWF0aGpzICYmIGVsLm1hdGhqcyA9PSBcIkNvbXBsZXhcIikgfHwgKGVsLnR5cGUgJiYgZWwudHlwZSA9PSBcIkNvbXBsZXhcIikpKSB7XG5cdFx0XHRcdFx0XHRzdHIgKz0gZm9ybWF0Q29tcGxleDIoZWwucmUsIGVsLmltLCBvcHRpb25zKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYodHlwZW9mIGVsID09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRcdFx0Ly8gZXhwcmVzc2lvblxuXHRcdFx0XHRcdFx0XHRzdHIgKz0gZWw7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRpZihmb3JjZUNvbXBsZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRzdHIgKz0gZm9ybWF0Q29tcGxleDIoZWwsIDAsIG9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHN0ciArPSBmb3JtYXRGbG9hdChlbCwgb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0c3RyICs9IFwiXVwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZihyb3cgaW5zdGFuY2VvZiBtYXRoLkNvbXBsZXgpIHtcblx0XHRcdFx0c3RyICs9IHNlbGYuZm9ybWF0Q29tcGxleChyb3csIG9wdGlvbnMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYoKHR5cGVvZiByb3cgPT0gXCJvYmplY3RcIikgJiYgKChyb3cubWF0aGpzICYmIHJvdy5tYXRoanMgPT0gXCJDb21wbGV4XCIpIHx8IChyb3cudHlwZSAmJiByb3cudHlwZSA9PSBcIkNvbXBsZXhcIikpKSB7XG5cdFx0XHRcdFx0c3RyICs9IGZvcm1hdENvbXBsZXgyKGVsLnJlLCBlbC5pbSwgb3B0aW9ucyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYodHlwZW9mIHJvdyA9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0XHQvLyBleHByZXNzaW9uXG5cdFx0XHRcdFx0XHRzdHIgKz0gcm93O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZihmb3JjZUNvbXBsZXgpIHtcblx0XHRcdFx0XHRcdFx0c3RyICs9IGZvcm1hdENvbXBsZXgyKHJvdywgMCwgb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRzdHIgKz0gZm9ybWF0RmxvYXQocm93LCBvcHRpb25zKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRpZihBLmxlbmd0aCkge1xuXHRcdGlmKCFvcHRpb25zLm1pbmlmeSkge1xuXHRcdFx0c3RyICs9IFwiXFxuXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHN0ciArPSBcIiBcIjtcblx0XHR9XG5cdH1cblx0c3RyICs9IFwiXVwiO1xuXG5cdHJldHVybiBzdHI7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5tYXRyaXhSZSA9IGZ1bmN0aW9uKFUpIHtcblx0dmFyIHJlcyA9IFtdO1xuXHRmb3IodmFyIHIgPSAwOyByIDwgVS5sZW5ndGg7IHIrKykge1xuXHRcdHZhciByb3cgPSBVW3JdO1xuXHRcdGlmKEFycmF5LmlzQXJyYXkocm93KSkge1xuXHRcdFx0dmFyIG5ld1JvdyA9IFtdO1xuXHRcdFx0Zm9yKHZhciBjID0gMDsgYyA8IHJvdy5sZW5ndGg7IGMrKykge1xuXHRcdFx0XHRpZih0eXBlb2Ygcm93W2NdID09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRuZXdSb3cucHVzaChyb3dbY10ucmUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG5ld1Jvdy5wdXNoKHJvd1tjXSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJlcy5wdXNoKG5ld1Jvdyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmKHR5cGVvZiByb3cgPT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRuZXdSb3cucHVzaChyb3cucmUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmV3Um93LnB1c2gocm93KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm1hdHJpeEltID0gZnVuY3Rpb24oVSkge1xuXHR2YXIgcmVzID0gW107XG5cdGZvcih2YXIgciA9IDA7IHIgPCBVLmxlbmd0aDsgcisrKSB7XG5cdFx0dmFyIHJvdyA9IFVbcl07XG5cdFx0aWYoQXJyYXkuaXNBcnJheShyb3cpKSB7XG5cdFx0XHR2YXIgbmV3Um93ID0gW107XG5cdFx0XHRmb3IodmFyIGMgPSAwOyBjIDwgcm93Lmxlbmd0aDsgYysrKSB7XG5cdFx0XHRcdGlmKHR5cGVvZiByb3dbY10gPT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdG5ld1Jvdy5wdXNoKHJvd1tjXS5pbSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bmV3Um93LnB1c2goMCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJlcy5wdXNoKG5ld1Jvdyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmKHR5cGVvZiByb3cgPT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRuZXdSb3cucHVzaChyb3cuaW0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmV3Um93LnB1c2goMCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5tYXRyaXhBYnMgPSBmdW5jdGlvbihVKSB7XG5cdHZhciByZXMgPSBbXTtcblx0Zm9yKHZhciByID0gMDsgciA8IFUubGVuZ3RoOyByKyspIHtcblx0XHR2YXIgcm93ID0gVVtyXTtcblx0XHRpZihBcnJheS5pc0FycmF5KHJvdykpIHtcblx0XHRcdHZhciBuZXdSb3cgPSBbXTtcblx0XHRcdGZvcih2YXIgYyA9IDA7IGMgPCByb3cubGVuZ3RoOyBjKyspIHtcblx0XHRcdFx0bmV3Um93LnB1c2gobWF0aC5hYnMocm93W2NdKSk7XG5cdFx0XHR9XG5cdFx0XHRyZXMucHVzaChuZXdSb3cpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXMucHVzaChtYXRoLmFicyhyb3cpKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm1hdHJpeEFyZyA9IGZ1bmN0aW9uKFUpIHtcblx0dmFyIHJlcyA9IFtdO1xuXHRmb3IodmFyIHIgPSAwOyByIDwgVS5sZW5ndGg7IHIrKykge1xuXHRcdHZhciByb3cgPSBVW3JdO1xuXHRcdGlmKEFycmF5LmlzQXJyYXkocm93KSkge1xuXHRcdFx0dmFyIG5ld1JvdyA9IFtdO1xuXHRcdFx0Zm9yKHZhciBjID0gMDsgYyA8IHJvdy5sZW5ndGg7IGMrKykge1xuXHRcdFx0XHRuZXdSb3cucHVzaChtYXRoLmFyZyhyb3dbY10pKTtcblx0XHRcdH1cblx0XHRcdHJlcy5wdXNoKG5ld1Jvdyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlcy5wdXNoKG1hdGguYXJnKHJvdykpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXM7XG59O1xuXG5cbi8vXG4vLyBjb21iaW5lTGlzdCBpcyBhcnJheSBvZiBvYmplY3RzOlxuLy9cbi8vIHtcbi8vICAgICBjaXJjdWl0OiA8UXVhbnR1bUNpcmN1aXQ+XG4vLyAgICAgd2lyZXM6IFswLCAxLCAyXSAvLyBhcnJheSBvZiBkZXN0aW5hdGlvbiBxdWJpdHMgKGZvciBlYWNoIHdpcmUgaW4gZ2l2ZW4gY2lyY3VpdClcbi8vIH1cbi8vXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5zZXRDb21iaW5lZFN0YXRlID0gZnVuY3Rpb24oY29tYmluZUxpc3QpIHtcblx0dmFyIG5ld1N0YXRlID0ge307XG5cdHZhciBuZXdTdGF0ZUJpdHMgPSAwO1xuXHR2YXIgdG90YWxRdWJpdHMgPSAwO1xuXHRmb3IodmFyIGl0ZW1JbmRleCA9IDA7IGl0ZW1JbmRleCA8IGNvbWJpbmVMaXN0Lmxlbmd0aDsgaXRlbUluZGV4KyspIHtcblx0XHR2YXIgaXRlbSA9IGNvbWJpbmVMaXN0W2l0ZW1JbmRleF07XG5cdFx0Ly8gY2FsY3VsYXRlIG51bWJlciBvZiBxdWJpdHMgYmFzZWQgb24gd2lyZU1hcFxuXHRcdGl0ZW0ud2lyZXMubWFwKGZ1bmN0aW9uKGRlc3QpIHtcblx0XHRcdGlmKGRlc3QgKyAxID4gdG90YWxRdWJpdHMpIHtcblx0XHRcdFx0dG90YWxRdWJpdHMgPSBkZXN0ICsgMTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHZhciBiaXRNYXBzID0gW107XG5cdGZvcih2YXIgaXRlbUluZGV4ID0gMDsgaXRlbUluZGV4IDwgY29tYmluZUxpc3QubGVuZ3RoOyBpdGVtSW5kZXgrKykge1xuXHRcdHZhciBpdGVtID0gY29tYmluZUxpc3RbaXRlbUluZGV4XTtcblxuXHRcdHZhciBjbWFwID0gW107XG5cdFx0aXRlbS53aXJlcy5tYXAoZnVuY3Rpb24oZGVzdCwgc291cmNlKSB7XG5cdFx0XHRjbWFwLnB1c2goe1xuXHRcdFx0XHRhbmQ6IDEgPDwgKCh0b3RhbFF1Yml0cyAtIDEpIC0gZGVzdCksXG5cdFx0XHRcdG9yOiAxIDw8ICgoaXRlbS5jaXJjdWl0Lm51bVF1Yml0cyAtIDEpIC0gc291cmNlKVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRiaXRNYXBzLnB1c2goY21hcCk7XG5cdH1cblxuXHR2YXIgbjMgPSAxIDw8IHRvdGFsUXViaXRzO1xuXHRmb3IodmFyIGEzID0gMDsgYTMgPCBuMzsgYTMrKykge1xuXHRcdHZhciBzMyA9IG51bGw7XG5cdFx0Zm9yKHZhciBpdGVtSW5kZXggPSAwOyBpdGVtSW5kZXggPCBjb21iaW5lTGlzdC5sZW5ndGg7IGl0ZW1JbmRleCsrKSB7XG5cdFx0XHR2YXIgbWFwID0gYml0TWFwc1tpdGVtSW5kZXhdO1xuXG5cdFx0XHR2YXIgYTEgPSAwO1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IG1hcC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZihhMyAmIG1hcFtpXS5hbmQpIHtcblx0XHRcdFx0XHRhMSB8PSBtYXBbaV0ub3I7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dmFyIGl0ZW0gPSBjb21iaW5lTGlzdFtpdGVtSW5kZXhdO1xuXHRcdFx0dmFyIHMxID0gaXRlbS5jaXJjdWl0LnN0YXRlW2ExXTtcblx0XHRcdGlmKHMxKSB7XG5cdFx0XHRcdGlmKHMzID09IG51bGwpIHtcblx0XHRcdFx0XHRzMyA9IHMxO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHMzID0gbWF0aC5tdWx0aXBseShzMSwgczMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzMyA9IG1hdGguY29tcGxleCgwLCAwKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZihzMyAmJiAoczMucmUgfHwgczMuaW0pKSB7XG5cdFx0XHRuZXdTdGF0ZVthM10gPSBzMztcblx0XHRcdG5ld1N0YXRlQml0cyB8PSBhMztcblx0XHR9XG5cdH1cblxuXHR0aGlzLnJlc2V0U3RhdGUoKTtcblx0Ly8gZXhwYW5kIGNpcmN1aXQgaWYgbmVlZGVkXG5cdGlmKHRoaXMubnVtUXViaXRzIDwgdG90YWxRdWJpdHMpIHtcblx0XHR0aGlzLm51bVF1Yml0cyA9IHRvdGFsUXViaXRzO1xuXG5cdFx0d2hpbGUodGhpcy5nYXRlcy5sZW5ndGggPCB0aGlzLm51bVF1Yml0cykge1xuXHRcdFx0dGhpcy5nYXRlcy5wdXNoKFtdKTtcblx0XHR9XG5cblx0XHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmdhdGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR3aGlsZSh0aGlzLmdhdGVzW2ldLmxlbmd0aCA8IG51bUNvbHMpIHtcblx0XHRcdFx0dGhpcy5nYXRlc1tpXS5wdXNoKG51bGwpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHRoaXMuc3RhdGUgPSBuZXdTdGF0ZTtcblx0dGhpcy5zdGF0ZUJpdHMgPSBuZXdTdGF0ZUJpdHM7XG5cblx0aWYodGhpcy5zdGF0ZUJpdHMgPT0gMCAmJiBPYmplY3Qua2V5cyh0aGlzLnN0YXRlKS5sZW5ndGggPT0gMCkge1xuXHRcdHRoaXMuc3RhdGVbXCIwXCJdID0gbWF0aC5jb21wbGV4KDEsIDApO1xuXHR9XG59O1xuXG4vL1xuLy8gQ29tYmluZXMgc3RhdGUgdmVjdG9ycyBvZiB0d28gZXZhbHVhdGVkIGNpcmN1aXRzIGFuZCBzdG9yZXMgcmVzdWx0aW5nIHZlY3RvciBpbnRvIHRoaXMuXG4vL1xuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLl9zZXRDb21iaW5lZFN0YXRlID0gZnVuY3Rpb24oYzEsIGMyLCBvcHRpb25zKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBxMSA9IGMxLm51bVF1Yml0cztcblx0dmFyIHEyID0gYzIubnVtUXViaXRzO1xuXG5cdC8vIGNyZWF0ZSB3aXJlTWFwIGlmIG5vdCBwcm92aWRlZFxuXHRpZighb3B0aW9ucy53aXJlTWFwKSB7XG5cdFx0b3B0aW9ucy53aXJlTWFwID0ge1xuXHRcdFx0YzE6IFtdLFxuXHRcdFx0YzI6IFtdXG5cdFx0fVxuXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHExOyBpKyspIHtcblx0XHRcdG9wdGlvbnMud2lyZU1hcC5jMS5wdXNoKGkpO1xuXHRcdH1cblxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBxMjsgaSsrKSB7XG5cdFx0XHRvcHRpb25zLndpcmVNYXAuYzIucHVzaChpICsgcTEpO1xuXHRcdH1cblx0fVxuXG5cdC8vIGNhbGN1bGF0ZSBudW1iZXIgb2YgcXViaXRzIGJhc2VkIG9uIHdpcmVNYXBcblx0dmFyIHEzID0gMDtcblx0b3B0aW9ucy53aXJlTWFwLmMxLm1hcChmdW5jdGlvbihkZXN0KSB7XG5cdFx0aWYoZGVzdCArIDEgPiBxMykge1xuXHRcdFx0cTMgPSBkZXN0ICsgMTtcblx0XHR9XG5cdH0pO1xuXHRvcHRpb25zLndpcmVNYXAuYzIubWFwKGZ1bmN0aW9uKGRlc3QpIHtcblx0XHRpZihkZXN0ICsgMSA+IHEzKSB7XG5cdFx0XHRxMyA9IGRlc3QgKyAxO1xuXHRcdH1cblx0fSk7XG5cblx0Ly8gY3JlYXRlIGJpdCBtYXAgZm9yIGNpcmN1aXQgMVxuXHR2YXIgYzFtYXAgPSBbXTtcblx0b3B0aW9ucy53aXJlTWFwLmMxLm1hcChmdW5jdGlvbihkZXN0LCBzb3VyY2UpIHtcblx0XHRjMW1hcC5wdXNoKHsgYW5kOiAxIDw8ICgocTMgLSAxKSAtIGRlc3QpLCBvcjogMSA8PCAoKHExIC0gMSkgLSBzb3VyY2UpIH0pO1xuXHR9KTtcblxuXHQvLyBjcmVhdGUgYml0IG1hcCBmb3IgY2lyY3VpdCAyXG5cdHZhciBjMm1hcCA9IFtdO1xuXHRvcHRpb25zLndpcmVNYXAuYzIubWFwKGZ1bmN0aW9uKGRlc3QsIHNvdXJjZSkge1xuXHRcdGMybWFwLnB1c2goeyBhbmQ6IDEgPDwgKChxMyAtIDEpIC0gZGVzdCksIG9yOiAxIDw8ICgocTIgLSAxKSAtIHNvdXJjZSkgfSk7XG5cdH0pO1xuXG5cdHZhciB1bnVzZWQgPSAwO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgcTM7IGkrKykge1xuXHRcdGlmKG9wdGlvbnMud2lyZU1hcC5jMS5pbmRleE9mKGkpIDwgMCAmJiBvcHRpb25zLndpcmVNYXAuYzIuaW5kZXhPZihpKSA8IDApIHtcblx0XHRcdHVudXNlZCB8PSAxIDw8ICgocTMgLSAxKSAtIGkpO1xuXHRcdH1cblx0fVxuXG5cdHZhciBuZXdTdGF0ZSA9IHt9O1xuXHR2YXIgbmV3U3RhdGVCaXRzID0gMDtcblxuXHR2YXIgbjMgPSAxIDw8IHEzO1xuXHRmb3IodmFyIGEzID0gMDsgYTMgPCBuMzsgYTMrKykge1xuXHRcdGlmKCEoYTMgJiB1bnVzZWQpKSB7XG5cdFx0XHR2YXIgYTEgPSAwO1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGMxbWFwLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmKGEzICYgYzFtYXBbaV0uYW5kKSBhMSB8PSBjMW1hcFtpXS5vcjtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGEyID0gMDtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjMm1hcC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZihhMyAmIGMybWFwW2ldLmFuZCkgYTIgfD0gYzJtYXBbaV0ub3I7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBzMSA9IGMxLnN0YXRlW2ExXTtcblx0XHRcdGlmKHMxKSB7XG5cdFx0XHRcdHZhciBzMiA9IGMyLnN0YXRlW2EyXTtcblx0XHRcdFx0aWYoczIpIHtcblx0XHRcdFx0XHR2YXIgczMgPSBtYXRoLm11bHRpcGx5KHMxLCBzMik7XG5cdFx0XHRcdFx0aWYoczMucmUgfHwgczMuaW0pIHtcblx0XHRcdFx0XHRcdG5ld1N0YXRlW2EzXSA9IHMzO1xuXHRcdFx0XHRcdFx0bmV3U3RhdGVCaXRzIHw9IGEzO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHRoaXMucmVzZXRTdGF0ZSgpO1xuXHQvLyBleHBhbmQgY2lyY3VpdCBpZiBuZWVkZWRcblx0aWYodGhpcy5udW1RdWJpdHMgPCBxMykge1xuXHRcdHRoaXMubnVtUXViaXRzID0gcTM7XG5cblx0XHR3aGlsZSh0aGlzLmdhdGVzLmxlbmd0aCA8IHRoaXMubnVtUXViaXRzKSB7XG5cdFx0XHR0aGlzLmdhdGVzLnB1c2goW10pO1xuXHRcdH1cblx0XHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLmdhdGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR3aGlsZSh0aGlzLmdhdGVzW2ldLmxlbmd0aCA8IG51bUNvbHMpIHtcblx0XHRcdFx0dGhpcy5nYXRlc1tpXS5wdXNoKG51bGwpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHRoaXMuc3RhdGUgPSBuZXdTdGF0ZTtcblx0dGhpcy5zdGF0ZUJpdHMgPSBuZXdTdGF0ZUJpdHM7XG5cblx0aWYodGhpcy5zdGF0ZUJpdHMgPT0gMCAmJiBPYmplY3Qua2V5cyh0aGlzLnN0YXRlKS5sZW5ndGggPT0gMCkge1xuXHRcdHRoaXMuc3RhdGVbXCIwXCJdID0gbWF0aC5jb21wbGV4KDEsIDApO1xuXHR9XG59O1xuXG4vLyBBZGQgcXViaXRzIHByZXNlcnZpbmcgc3RhdGVcblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5hcHBlbmRRdWJpdHMgPSBmdW5jdGlvbihudW1RdWJpdHMpIHtcblx0dmFyIGMgPSBuZXcgUXVhbnR1bUNpcmN1aXQobnVtUXViaXRzKTtcblx0dGhpcy5fc2V0Q29tYmluZWRTdGF0ZSh0aGlzLCBjKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5udW1BbXBsaXR1ZGVzID0gZnVuY3Rpb24ob25seVBvc3NpYmxlKSB7XG5cdGlmKG9ubHlQb3NzaWJsZSkge1xuXHRcdHZhciBwb3NzaWJsZUNvdW50ID0gMDtcblx0XHRmb3IodmFyIGlzIGluIHRoaXMuc3RhdGUpIHtcblx0XHRcdHZhciBzdGF0ZSA9IG1hdGgucm91bmQodGhpcy5zdGF0ZVtpc10sIDE0KTtcblx0XHRcdGlmKHN0YXRlLnJlIHx8IHN0YXRlLmltKSB7XG5cdFx0XHRcdHBvc3NpYmxlQ291bnQrKztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHBvc3NpYmxlQ291bnQ7XG5cdH1cblxuXHRyZXR1cm4gbWF0aC5wb3coMiwgdGhpcy5udW1RdWJpdHMpO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm51bUNvbHMgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuZ2F0ZXMubGVuZ3RoID8gdGhpcy5nYXRlc1swXS5sZW5ndGggOiAwO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm51bUdhdGVzID0gZnVuY3Rpb24oZGVjb21wb3NlKSB7XG5cdHZhciBjaXJjdWl0ID0gbnVsbDtcblx0aWYoZGVjb21wb3NlKSB7XG5cdFx0Y2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdGNpcmN1aXQubG9hZCh0aGlzLnNhdmUodHJ1ZSkpO1xuXHR9IGVsc2Uge1xuXHRcdGNpcmN1aXQgPSB0aGlzO1xuXHR9XG5cblx0dmFyIG51bUdhdGVzID0gMDtcblx0dmFyIG51bUNvbHMgPSBjaXJjdWl0Lm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0bnVtR2F0ZXMrKztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbnVtR2F0ZXM7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaXNFbXB0eUNlbGwgPSBmdW5jdGlvbihjb2wsIHdpcmUpIHtcblx0aWYodGhpcy5nYXRlc1t3aXJlXSAmJiB0aGlzLmdhdGVzW3dpcmVdW2NvbF0pIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRmb3IodmFyIHcgPSAwOyB3IDwgdGhpcy5udW1RdWJpdHM7IHcrKykge1xuXHRcdHZhciBnYXRlID0gdGhpcy5nZXRHYXRlQXQoY29sLCB3KTtcblx0XHRpZihnYXRlKSB7XG5cdFx0XHRpZihnYXRlLm5hbWUgPT0gXCJtZWFzdXJlXCIgfHwgKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZykgfHwgKE1hdGgubWluLmFwcGx5KG51bGwsIGdhdGUud2lyZXMpIDwgd2lyZSAmJiBNYXRoLm1heC5hcHBseShudWxsLCBnYXRlLndpcmVzKSA+IHdpcmUpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdHJ1ZTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5pc0VtcHR5UGxhY2UgPSBmdW5jdGlvbihjb2wsIHdpcmVzLCB1c2luZ0NyZWdzKSB7XG5cdHZhciBtaW5XaXJlID0gTWF0aC5taW4uYXBwbHkobnVsbCwgd2lyZXMpO1xuXHR2YXIgbWF4V2lyZSA9IE1hdGgubWF4LmFwcGx5KG51bGwsIHdpcmVzKTtcblxuXHRpZih1c2luZ0NyZWdzKSB7XG5cdFx0dmFyIG14ID0gdGhpcy5udW1RdWJpdHMgLSAxO1xuXHRcdGlmKG14ID4gbWF4V2lyZSkge1xuXHRcdFx0bWF4V2lyZSA9IG14O1xuXHRcdH1cblx0fVxuXG5cdHZhciBhbGxFbXB0eSA9IHRydWU7XG5cdGZvcih2YXIgd2lyZSA9IG1pbldpcmU7IHdpcmUgPD0gbWF4V2lyZTsgd2lyZSsrKSB7XG5cdFx0aWYoIXRoaXMuaXNFbXB0eUNlbGwoY29sLCB3aXJlKSkge1xuXHRcdFx0YWxsRW1wdHkgPSBmYWxzZTtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBhbGxFbXB0eTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5sYXN0Tm9uRW1wdHlQbGFjZSA9IGZ1bmN0aW9uKHdpcmVzLCB1c2luZ0NyZWdzKSB7XG5cdHZhciBjb2wgPSB0aGlzLm51bUNvbHMoKTtcblx0dmFyIGFsbEVtcHR5ID0gdHJ1ZTtcblxuXHR2YXIgbWluV2lyZSA9IE1hdGgubWluLmFwcGx5KG51bGwsIHdpcmVzKTtcblx0dmFyIG1heFdpcmUgPSBNYXRoLm1heC5hcHBseShudWxsLCB3aXJlcyk7XG5cblx0aWYodXNpbmdDcmVncykge1xuXHRcdHZhciBteCA9IHRoaXMubnVtUXViaXRzIC0gMTtcblx0XHRpZihteCA+IG1heFdpcmUpIHtcblx0XHRcdG1heFdpcmUgPSBteDtcblx0XHR9XG5cdH1cblxuXHR3aGlsZShhbGxFbXB0eSAmJiBjb2wtLSkge1xuXHRcdGZvcih2YXIgd2lyZSA9IG1pbldpcmU7IHdpcmUgPD0gbWF4V2lyZTsgd2lyZSsrKSB7XG5cdFx0XHRpZighdGhpcy5pc0VtcHR5Q2VsbChjb2wsIHdpcmUpKSB7XG5cdFx0XHRcdGFsbEVtcHR5ID0gZmFsc2U7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjb2w7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaW5zZXJ0Q29sdW1uID0gZnVuY3Rpb24oY29sSW5kZXgpIHtcblx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMubnVtUXViaXRzOyBpKyspIHtcblx0XHR0aGlzLmdhdGVzW2ldLnNwbGljZShjb2xJbmRleCB8fCAwLCAwLCBudWxsKTtcblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJhbmRvbVN0cmluZyA9IGZ1bmN0aW9uKGxlbikge1xuXHRsZW4gPSBsZW4gfHwgMTc7XG5cblx0dmFyIHRleHQgPSBcIlwiO1xuXHQvLyBsZXQgZmlyc3QgY2hhciB0byBiZSBsZXR0ZXJcblx0dmFyIGNoYXJzZXQgPSBcIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXpcIjtcblx0dGV4dCArPSBjaGFyc2V0LmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyc2V0Lmxlbmd0aCkpO1xuXG5cdC8vIG90aGVyIGNoYXJzIGNhbiBiZSBsZXR0ZXJzIGFuZCBudW1iZXJzXG5cdGNoYXJzZXQgKz0gXCIwMTIzNDU2Nzg5XCI7XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdHRleHQgKz0gY2hhcnNldC5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcnNldC5sZW5ndGgpKTtcblx0fVxuXG5cdHJldHVybiB0ZXh0O1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuYWRkR2F0ZSA9IGZ1bmN0aW9uKGdhdGVOYW1lLCBjb2x1bW4sIHdpcmVzLCBvcHRpb25zKSB7XG5cdHZhciB3aXJlTGlzdCA9IFtdO1xuXHRpZihBcnJheS5pc0FycmF5KHdpcmVzKSkge1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB3aXJlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0d2lyZUxpc3QucHVzaCh3aXJlc1tpXSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHdpcmVMaXN0LnB1c2god2lyZXMpO1xuXHR9XG5cblx0aWYoY29sdW1uIDwgMCkge1xuXHRcdGNvbHVtbiA9IHRoaXMubGFzdE5vbkVtcHR5UGxhY2Uod2lyZUxpc3QsIGdhdGVOYW1lID09IFwibWVhc3VyZVwiIHx8IChvcHRpb25zICYmIG9wdGlvbnMuY29uZGl0aW9uICYmIG9wdGlvbnMuY29uZGl0aW9uLmNyZWcpKSArIDE7XG5cdH1cblxuXHR2YXIgbnVtQ29ubmVjdG9ycyA9IHdpcmVMaXN0Lmxlbmd0aDtcblx0dmFyIGlkID0gdGhpcy5yYW5kb21TdHJpbmcoKTtcblx0Zm9yKHZhciBjb25uZWN0b3IgPSAwOyBjb25uZWN0b3IgPCBudW1Db25uZWN0b3JzOyBjb25uZWN0b3IrKykge1xuXHRcdHZhciB3aXJlID0gd2lyZUxpc3RbY29ubmVjdG9yXTtcblxuXHRcdGlmKCh3aXJlICsgMSkgPiB0aGlzLm51bVF1Yml0cykge1xuXHRcdFx0dGhpcy5udW1RdWJpdHMgPSB3aXJlICsgMTtcblx0XHR9XG5cblx0XHR3aGlsZSh0aGlzLmdhdGVzLmxlbmd0aCA8IHRoaXMubnVtUXViaXRzKSB7XG5cdFx0XHR0aGlzLmdhdGVzLnB1c2goW10pO1xuXHRcdH1cblxuXHRcdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdFx0aWYoKGNvbHVtbiArIDEpID4gbnVtQ29scykge1xuXHRcdFx0bnVtQ29scyA9IGNvbHVtbiArIDE7XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMuZ2F0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHdoaWxlKHRoaXMuZ2F0ZXNbaV0ubGVuZ3RoIDwgbnVtQ29scykge1xuXHRcdFx0XHR0aGlzLmdhdGVzW2ldLnB1c2gobnVsbCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIGdhdGUgPSB7XG5cdFx0XHRpZDogaWQsXG5cdFx0XHRuYW1lOiBnYXRlTmFtZSxcblx0XHRcdGNvbm5lY3RvcjogY29ubmVjdG9yLFxuXHRcdFx0b3B0aW9uczoge31cblx0XHR9XG5cblx0XHRpZihvcHRpb25zKSB7XG5cdFx0XHRnYXRlLm9wdGlvbnMgPSBvcHRpb25zO1xuXG5cdFx0XHQvLyBleHRlbmQgY3JlZyBpZiByZXF1aXJlZFxuXHRcdFx0aWYob3B0aW9ucy5jcmVnICYmIG9wdGlvbnMuY3JlZ1tcIm5hbWVcIl0gJiYgdHlwZW9mIG9wdGlvbnMuY3JlZ1tcImJpdFwiXSAhPSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdHZhciBjcmVnQml0ID0gcGFyc2VJbnQob3B0aW9ucy5jcmVnLmJpdCB8fCAwKTtcblx0XHRcdFx0aWYoaXNOYU4oY3JlZ0JpdCkpIHtcblx0XHRcdFx0XHRjcmVnQml0ID0gMDtcblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgZXhpc3RpbmdDcmVnID0gdGhpcy5jcmVnc1tvcHRpb25zLmNyZWcubmFtZV0gfHwgW107XG5cdFx0XHRcdHZhciBjdXJyZW50VmFsdWUgPSAoZXhpc3RpbmdDcmVnLmxlbmd0aCA+IGNyZWdCaXQpID8gZXhpc3RpbmdDcmVnW29wdGlvbnMuY3JlZy5iaXRdIDogMDtcblx0XHRcdFx0dGhpcy5zZXRDcmVnQml0KG9wdGlvbnMuY3JlZy5uYW1lLCBjcmVnQml0LCBjdXJyZW50VmFsdWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXSA9IGdhdGU7XG5cdH1cblx0cmV0dXJuIGlkO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmFwcGVuZEdhdGUgPSBmdW5jdGlvbihnYXRlTmFtZSwgd2lyZXMsIG9wdGlvbnMpIHtcblx0cmV0dXJuIHRoaXMuYWRkR2F0ZShnYXRlTmFtZSwgLTEsIHdpcmVzLCBvcHRpb25zKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmluc2VydEdhdGUgPSBmdW5jdGlvbihnYXRlTmFtZSwgY29sdW1uLCB3aXJlcywgb3B0aW9ucykge1xuXHR2YXIgd2lyZUxpc3QgPSBbXTtcblx0aWYoQXJyYXkuaXNBcnJheSh3aXJlcykpIHtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgd2lyZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHdpcmVMaXN0LnB1c2god2lyZXNbaV0pO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHR3aXJlTGlzdC5wdXNoKHdpcmVzKTtcblx0fVxuXG5cdGlmKGNvbHVtbiA8IDApIHtcblx0XHRjb2x1bW4gPSB0aGlzLmxhc3ROb25FbXB0eVBsYWNlKHdpcmVMaXN0LCAoISFnYXRlTmFtZSAmJiBnYXRlTmFtZSA9PSBcIm1lYXN1cmVcIikgfHwgKG9wdGlvbnMgJiYgb3B0aW9ucy5jb25kaXRpb24gJiYgb3B0aW9ucy5jb25kaXRpb24uY3JlZykpICsgMTtcblx0fVxuXG5cdHZhciBzcGFjZUlzRW1wdHkgPSB0cnVlO1xuXHR2YXIgbnVtQ29ubmVjdG9ycyA9IHdpcmVMaXN0Lmxlbmd0aDtcblx0Zm9yKHZhciBjb25uZWN0b3IgPSAwOyBjb25uZWN0b3IgPCBudW1Db25uZWN0b3JzOyBjb25uZWN0b3IrKykge1xuXHRcdHZhciB3aXJlID0gd2lyZUxpc3RbY29ubmVjdG9yXTtcblxuXHRcdGlmKCh3aXJlICsgMSkgPiB0aGlzLm51bVF1Yml0cykge1xuXHRcdFx0dGhpcy5udW1RdWJpdHMgPSB3aXJlICsgMTtcblx0XHR9XG5cblx0XHR3aGlsZSh0aGlzLmdhdGVzLmxlbmd0aCA8IHRoaXMubnVtUXViaXRzKSB7XG5cdFx0XHR0aGlzLmdhdGVzLnB1c2goW10pO1xuXHRcdH1cblxuXHRcdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdFx0aWYoKGNvbHVtbiArIDEpID4gbnVtQ29scykge1xuXHRcdFx0bnVtQ29scyA9IGNvbHVtbiArIDE7XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMuZ2F0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHdoaWxlKHRoaXMuZ2F0ZXNbaV0ubGVuZ3RoIDwgbnVtQ29scykge1xuXHRcdFx0XHR0aGlzLmdhdGVzW2ldLnB1c2gobnVsbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYoIXRoaXMuaXNFbXB0eVBsYWNlKGNvbHVtbiwgd2lyZUxpc3QsICghIWdhdGVOYW1lICYmIGdhdGVOYW1lID09IFwibWVhc3VyZVwiKSB8fCAob3B0aW9ucyAmJiBvcHRpb25zLmNvbmRpdGlvbiAmJiBvcHRpb25zLmNvbmRpdGlvbi5jcmVnKSkpIHtcblx0XHR0aGlzLmluc2VydENvbHVtbihjb2x1bW4pO1xuXHR9XG5cblx0dmFyIGlkID0gbnVsbDtcblx0aWYoZ2F0ZU5hbWUpIHtcblx0XHRpZCA9IHRoaXMuYWRkR2F0ZShnYXRlTmFtZSwgY29sdW1uLCB3aXJlTGlzdCwgb3B0aW9ucyk7XG5cdH1cblx0cmV0dXJuIGlkO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmluc2VydFNwYWNlID0gZnVuY3Rpb24oY29sdW1uLCB3aXJlcykge1xuXHRyZXR1cm4gdGhpcy5pbnNlcnRHYXRlKG51bGwsIGNvbHVtbiwgd2lyZXMsIG51bGwpO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVtb3ZlR2F0ZUF0ID0gZnVuY3Rpb24oY29sdW1uLCB3aXJlKSB7XG5cdGlmKCF0aGlzLmdhdGVzW3dpcmVdKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dmFyIGdhdGUgPSB0aGlzLmdhdGVzW3dpcmVdW2NvbHVtbl07XG5cdGlmKCFnYXRlKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dmFyIGlkID0gZ2F0ZS5pZDtcblxuXHR2YXIgbnVtV2lyZXMgPSB0aGlzLmdhdGVzLmxlbmd0aDtcblx0Zm9yKHZhciB3ID0gMDsgdyA8IG51bVdpcmVzOyB3KyspIHtcblx0XHR2YXIgY2VsbCA9IHRoaXMuZ2F0ZXNbd11bY29sdW1uXTtcblx0XHRpZihjZWxsICYmIGNlbGwuaWQgPT0gaWQpIHtcblx0XHRcdHRoaXMuZ2F0ZXNbd11bY29sdW1uXSA9IG51bGw7XG5cdFx0fVxuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVtb3ZlR2F0ZSA9IGZ1bmN0aW9uKGdhdGVJZCkge1xuXHR2YXIgZ2F0ZVBvcyA9IHRoaXMuZ2V0R2F0ZVBvc0J5SWQoZ2F0ZUlkKTtcblx0aWYoIWdhdGVQb3MgfHwgZ2F0ZVBvcy5jb2wgPCAwIHx8ICFnYXRlUG9zLndpcmVzLmxlbmd0aCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMucmVtb3ZlR2F0ZUF0KGdhdGVQb3MuY29sLCBnYXRlUG9zLndpcmVzWzBdKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmFkZE1lYXN1cmUgPSBmdW5jdGlvbih3aXJlLCBjcmVnLCBjYml0KSB7XG5cdHRoaXMuYWRkR2F0ZShcIm1lYXN1cmVcIiwgLTEsIHdpcmUsIHsgY3JlZzogeyBuYW1lOiBjcmVnLCBiaXQ6IGNiaXQgfSB9KTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5hcHBlbmRDaXJjdWl0ID0gZnVuY3Rpb24oY2lyY3VpdCwgcGFjaykge1xuXHR2YXIgY29sT2Zmc2V0ID0gdGhpcy5udW1Db2xzKCk7XG5cblx0dmFyIG51bUNvbHMgPSBjaXJjdWl0Lm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblxuXHRcdFx0XHRpZighdGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV0gJiYgY2lyY3VpdC5jdXN0b21HYXRlc1tnYXRlLm5hbWVdKSB7XG5cdFx0XHRcdFx0dGhpcy5yZWdpc3RlckdhdGUoZ2F0ZS5uYW1lLCBjaXJjdWl0LmN1c3RvbUdhdGVzW2dhdGUubmFtZV0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5hZGRHYXRlKGdhdGUubmFtZSwgY29sdW1uICsgY29sT2Zmc2V0LCBnYXRlLndpcmVzLCBnYXRlLm9wdGlvbnMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuXG5cblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVtb3ZlVHJhaWxpbmdDb2x1bW5zID0gZnVuY3Rpb24oKSB7XG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gbnVtQ29scyAtIDE7IGNvbHVtbiA+PSAwOyBjb2x1bW4tLSkge1xuXHRcdHZhciBpc0VtcHR5Q29sID0gdHJ1ZTtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdhdGVzW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRpZihnYXRlKSB7XG5cdFx0XHRcdGlzRW1wdHlDb2wgPSBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYoIWlzRW1wdHlDb2wpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dGhpcy5nYXRlc1t3aXJlXS5wb3AoKTtcblx0XHR9XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yZW1vdmVMZWFkaW5nQ29sdW1ucyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgZW1wdHlDb3VudCA9IDA7XG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHR2YXIgaXNFbXB0eUNvbCA9IHRydWU7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gdGhpcy5nYXRlc1t3aXJlXVtjb2x1bW5dO1xuXHRcdFx0aWYoZ2F0ZSkge1xuXHRcdFx0XHRpc0VtcHR5Q29sID0gZmFsc2U7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmKCFpc0VtcHR5Q29sKSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cblx0XHRlbXB0eUNvdW50Kys7XG5cdH1cblxuXHRmb3IodmFyIGkgPSAwOyBpIDwgZW1wdHlDb3VudDsgaSsrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHRoaXMuZ2F0ZXNbd2lyZV0uc2hpZnQoKTtcblx0XHR9XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yZW1vdmVUcmFpbGluZ1Jvd3MgPSBmdW5jdGlvbigpIHtcblx0dmFyIG51bUNvbHMgPSB0aGlzLm51bUNvbHMoKTtcblx0Zm9yKHZhciB3aXJlID0gdGhpcy5udW1RdWJpdHMgLSAxOyB3aXJlID49IDA7IHdpcmUtLSkge1xuXHRcdHZhciBpc0VtcHR5Um93ID0gdHJ1ZTtcblx0XHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXTtcblx0XHRcdGlmKGdhdGUpIHtcblx0XHRcdFx0aXNFbXB0eVJvdyA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZighaXNFbXB0eVJvdykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmdhdGVzLnBvcCgpO1xuXHRcdHRoaXMubnVtUXViaXRzLS07XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yZW1vdmVRdWJpdCA9IGZ1bmN0aW9uKHdpcmUpIHtcblx0aWYoIXRoaXMuZ2F0ZXNbd2lyZV0pIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR0aGlzLnJlc2V0U3RhdGUoKTtcblxuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbCA9IDA7IGNvbCA8IG51bUNvbHM7IGNvbCsrKSB7XG5cdFx0dGhpcy5yZW1vdmVHYXRlQXQoY29sLCB3aXJlKTtcblx0fVxuXG5cdGZvcih2YXIgdyA9IHdpcmUgKyAxOyB3IDwgdGhpcy5udW1RdWJpdHM7IHcrKykge1xuXHRcdGZvcih2YXIgY29sID0gMDsgY29sIDwgbnVtQ29sczsgY29sKyspIHtcblx0XHRcdHRoaXMuZ2F0ZXNbdyAtIDFdW2NvbF0gPSB0aGlzLmdhdGVzW3ddW2NvbF07XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5nYXRlcy5wb3AoKTtcblx0dGhpcy5udW1RdWJpdHMtLTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmZsaXBWZXJ0aWNhbGx5ID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMucmVzZXRTdGF0ZSgpO1xuXG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdHZhciBsYXN0UXViaXQgPSB0aGlzLm51bVF1Yml0cyAtIDE7XG5cdGZvcih2YXIgdyA9IDA7IHcgPCB0aGlzLm51bVF1Yml0cyAvIDI7IHcrKykge1xuXHRcdGZvcih2YXIgY29sID0gMDsgY29sIDwgbnVtQ29sczsgY29sKyspIHtcblx0XHRcdHZhciB0bXAgPSB0aGlzLmdhdGVzW3ddW2NvbF07XG5cdFx0XHR0aGlzLmdhdGVzW3ddW2NvbF0gPSB0aGlzLmdhdGVzW2xhc3RRdWJpdCAtIHddW2NvbF07XG5cdFx0XHR0aGlzLmdhdGVzW2xhc3RRdWJpdCAtIHddW2NvbF0gPSB0bXA7XG5cdFx0fVxuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZmxpcEhvcml6b250YWxseSA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnJlc2V0U3RhdGUoKTtcblxuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHR2YXIgbGFzdENvbCA9IG51bUNvbHMgLSAxO1xuXHRmb3IodmFyIHcgPSAwOyB3IDwgdGhpcy5udW1RdWJpdHM7IHcrKykge1xuXHRcdGZvcih2YXIgY29sID0gMDsgY29sIDwgbnVtQ29scyAvIDI7IGNvbCsrKSB7XG5cdFx0XHR2YXIgdG1wID0gdGhpcy5nYXRlc1t3XVtjb2xdO1xuXHRcdFx0dGhpcy5nYXRlc1t3XVtjb2xdID0gdGhpcy5nYXRlc1t3XVtsYXN0Q29sIC0gY29sXTtcblx0XHRcdHRoaXMuZ2F0ZXNbd11bbGFzdENvbCAtIGNvbF0gPSB0bXA7XG5cdFx0fVxuXHR9XG59O1xuXG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmFwcGx5VHJhbnNmb3JtID0gZnVuY3Rpb24oVSwgcXViaXRzKSB7XG5cdHZhciBuZXdTdGF0ZSA9IHt9O1xuXHR2YXIgbmV3U3RhdGVCaXRzID0gMDtcblxuXHQvLyBjbG9uZSBsaXN0IG9mIHdpcmVzIHRvIGl0c2VsZiAocmVtb3ZlIHJlZmVyZW5jZSB0byBvcmlnaW5hbCBhcnJheSlcblx0cXViaXRzID0gcXViaXRzLnNsaWNlKDApO1xuXG5cdC8vIHJldmVyc2UgYml0IG9yZGVyXG5cdGlmKHRoaXMucmV2ZXJzZUJpdE9yZGVyKSB7XG5cdFx0Ly8gY29udmVydCBpbmRleCBmcm9tIDAtYmFzZWQgdG8gZW5kLWJhc2VkXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHF1Yml0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0cXViaXRzW2ldID0gKHRoaXMubnVtUXViaXRzIC0gMSkgLSBxdWJpdHNbaV07XG5cdFx0fVxuXHR9XG5cblx0cXViaXRzLnJldmVyc2UoKTtcblxuXHQvLyBsaXN0IG9mIHdpcmVzIG5vdCB1c2VkIGJ5IHRoaXMgZ2F0ZVxuXHR2YXIgdW51c2VkID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLm51bVF1Yml0czsgaSsrKSB7XG5cdFx0aWYocXViaXRzLmluZGV4T2YoaSkgPCAwKSB7XG5cdFx0XHR1bnVzZWQucHVzaChpKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgdW51c2VkQ291bnQgPSB1bnVzZWQubGVuZ3RoO1xuXHR2YXIgdW51c2VkU3BhY2UgPSAoMSA8PCB1bnVzZWRDb3VudCk7XG5cblx0ZnVuY3Rpb24gZ2V0RWxNYXNrKGVsKSB7XG5cdFx0dmFyIHJlcyA9IDA7XG5cdFx0cXViaXRzLm1hcChmdW5jdGlvbihxdWJpdCwgaW5kZXgpIHtcblx0XHRcdGlmKGVsICYgKDEgPDwgaW5kZXgpKSB7XG5cdFx0XHRcdHJlcyB8PSAoMSA8PCBxdWJpdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHJlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGdldEluY01hc2soKSB7XG5cdFx0dmFyIHJlcyA9IDA7XG5cdFx0cXViaXRzLm1hcChmdW5jdGlvbihxdWJpdCwgaW5kZXgpIHtcblx0XHRcdHJlcyB8PSAoMSA8PCBxdWJpdCk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHJlcyArIDE7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXROb3RNYXNrKCkge1xuXHRcdHZhciByZXMgPSAwO1xuXHRcdHVudXNlZC5tYXAoZnVuY3Rpb24ocXViaXQsIGluZGV4KSB7XG5cdFx0XHRyZXMgfD0gKDEgPDwgcXViaXQpO1xuXHRcdH0pO1xuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXHR2YXIgWkVSTyA9IG1hdGguY29tcGxleCgwLCAwKTtcblxuXHRmb3IodmFyIGVscm93ID0gMDsgZWxyb3cgPCBVLmxlbmd0aDsgZWxyb3crKykge1xuXG5cdFx0dmFyIHJvd21hc2sgPSBnZXRFbE1hc2soZWxyb3cpO1xuXG5cdFx0Zm9yKHZhciBlbGNvbCA9IDA7IGVsY29sIDwgVVtlbHJvd10ubGVuZ3RoOyBlbGNvbCsrKSB7XG5cblx0XHRcdHZhciBjb2xtYXNrID0gZ2V0RWxNYXNrKGVsY29sKTtcblxuXHRcdFx0aWYoKHRoaXMuc3RhdGVCaXRzICYgY29sbWFzaykgPT0gY29sbWFzaykge1xuXG5cdFx0XHRcdHZhciB1dmFsID0gVVtlbHJvd11bZWxjb2xdO1xuXHRcdFx0XHRpZih1dmFsKSB7XG5cdFx0XHRcdFx0dmFyIHJvdyA9IHJvd21hc2s7XG5cdFx0XHRcdFx0dmFyIGNvbCA9IGNvbG1hc2s7XG5cblx0XHRcdFx0XHR2YXIgY291bnRlciA9IHVudXNlZFNwYWNlO1xuXHRcdFx0XHRcdHZhciBjb3VudGVybWFzayA9IGdldEVsTWFzaygwKTtcblx0XHRcdFx0XHR2YXIgaW5jbWFzayA9IGdldEluY01hc2soKTtcblx0XHRcdFx0XHR2YXIgbm90bWFzayA9IGdldE5vdE1hc2soKTtcblx0XHRcdFx0XHR2YXIgdG9vdGhsZXNzID0gY291bnRlcm1hc2s7XG5cdFx0XHRcdFx0d2hpbGUoY291bnRlci0tKSB7XG5cdFx0XHRcdFx0XHR2YXIgc3RhdGUgPSB0aGlzLnN0YXRlW2NvbF07XG5cdFx0XHRcdFx0XHRpZihzdGF0ZSkge1xuXHRcdFx0XHRcdFx0XHRyb3cgPSB0b290aGxlc3MgfCByb3dtYXNrO1xuXG5cdFx0XHRcdFx0XHRcdGlmKHV2YWwgPT0gMSkge1xuXHRcdFx0XHRcdFx0XHRcdG5ld1N0YXRlW3Jvd10gPSBtYXRoLmFkZChuZXdTdGF0ZVtyb3ddIHx8IFpFUk8sIHN0YXRlKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRuZXdTdGF0ZVtyb3ddID0gbWF0aC5hZGQobmV3U3RhdGVbcm93XSB8fCBaRVJPLCBtYXRoLm11bHRpcGx5KHV2YWwsIHN0YXRlKSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0bmV3U3RhdGVCaXRzIHw9IHJvdztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dG9vdGhsZXNzID0gKHRvb3RobGVzcyArIGluY21hc2spICYgbm90bWFzaztcblx0XHRcdFx0XHRcdGNvbCA9IHRvb3RobGVzcyB8IGNvbG1hc2s7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdC8vIHJlcGxhY2UgY3VycmVudCBzdGF0ZSB3aXRoIG5ldyBzdGF0ZVxuXHR0aGlzLnN0YXRlID0gbmV3U3RhdGU7XG5cdHRoaXMuc3RhdGVCaXRzID0gbmV3U3RhdGVCaXRzO1xuXG5cdGlmKHRoaXMuc3RhdGVCaXRzID09IDAgJiYgT2JqZWN0LmtleXModGhpcy5zdGF0ZSkubGVuZ3RoID09IDApIHtcblx0XHR0aGlzLnN0YXRlW1wiMFwiXSA9IG1hdGguY29tcGxleCgxLCAwKTtcblx0fVxufTtcblxuLy9cbi8vIGBlbmRpYW5uZXNzYCBjYW4gYmU6XG4vLyAgICAgbnVsbCAtIHRoaXMgaXMgZGVmYXVsdCBhbmQgZGVwZW5kcyBvbiB0aGlzLnJldmVyc2VCaXRPcmRlclxuLy8gICAgIFwiYmlnXCIgLSBiaWcgZW5kaWFuIChsaWtlIFJpZ2V0dGkvcHlRdWlsKVxuLy8gICAgIFwibGl0dGxlXCIgLSBsaXR0bGUgZW5kaWFuIChsaWtlIElCTS9RaXNraXQpXG4vL1xuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnRyYW5zZm9ybU1hdHJpeCA9IGZ1bmN0aW9uKHRvdGFsUXViaXRzLCBVLCB0YXJnZXRRdWJpdHMsIGVuZGlhbm5lc3MpIHtcblx0Ly8gY2xvbmUgbGlzdCBvZiB3aXJlcyB0byBpdHNlbGYgKHJlbW92ZSByZWZlcmVuY2UgdG8gb3JpZ2luYWwgYXJyYXkpXG5cdHRhcmdldFF1Yml0cyA9IHRhcmdldFF1Yml0cy5zbGljZSgwKTtcblxuXHR2YXIgcmV2ZXJzZUJpdHMgPSBmYWxzZTtcblx0aWYoIWVuZGlhbm5lc3MpIHtcblx0XHRyZXZlcnNlQml0cyA9ICF0aGlzLnJldmVyc2VCaXRPcmRlcjtcblx0fSBlbHNlIHtcblx0XHRyZXZlcnNlQml0cyA9IGVuZGlhbm5lc3MgPT0gXCJiaWdcIjtcblx0fVxuXG5cdC8vIHJldmVyc2UgYml0IG9yZGVyXG5cdGlmKHJldmVyc2VCaXRzKSB7XG5cdFx0Ly8gY29udmVydCBpbmRleCBmcm9tIDAtYmFzZWQgdG8gZW5kLWJhc2VkXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRhcmdldFF1Yml0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dGFyZ2V0UXViaXRzW2ldID0gKHRvdGFsUXViaXRzIC0gMSkgLSB0YXJnZXRRdWJpdHNbaV07XG5cdFx0fVxuXHR9XG5cblx0dGFyZ2V0UXViaXRzLnJldmVyc2UoKTtcblxuXHQvLyBsaXN0IG9mIHdpcmVzIG5vdCB1c2VkIGJ5IHRoaXMgZ2F0ZVxuXHR2YXIgdW51c2VkID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCB0b3RhbFF1Yml0czsgaSsrKSB7XG5cdFx0aWYodGFyZ2V0UXViaXRzLmluZGV4T2YoaSkgPCAwKSB7XG5cdFx0XHR1bnVzZWQucHVzaChpKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgdW51c2VkQ291bnQgPSB1bnVzZWQubGVuZ3RoO1xuXHR2YXIgdW51c2VkU3BhY2UgPSAoMSA8PCB1bnVzZWRDb3VudCk7XG5cblx0ZnVuY3Rpb24gZ2V0RWxNYXNrKGVsKSB7XG5cdFx0dmFyIHJlcyA9IDA7XG5cdFx0dGFyZ2V0UXViaXRzLm1hcChmdW5jdGlvbihxdWJpdCwgaW5kZXgpIHtcblx0XHRcdGlmKGVsICYgKDEgPDwgaW5kZXgpKSB7XG5cdFx0XHRcdHJlcyB8PSAoMSA8PCBxdWJpdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHJlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGdldEluY01hc2soKSB7XG5cdFx0dmFyIHJlcyA9IDA7XG5cdFx0dGFyZ2V0UXViaXRzLm1hcChmdW5jdGlvbihxdWJpdCwgaW5kZXgpIHtcblx0XHRcdHJlcyB8PSAoMSA8PCBxdWJpdCk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHJlcyArIDE7XG5cdH1cblxuXHRmdW5jdGlvbiBnZXROb3RNYXNrKCkge1xuXHRcdHZhciByZXMgPSAwO1xuXHRcdHVudXNlZC5tYXAoZnVuY3Rpb24ocXViaXQsIGluZGV4KSB7XG5cdFx0XHRyZXMgfD0gKDEgPDwgcXViaXQpO1xuXHRcdH0pO1xuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXHR2YXIgVCA9IG1hdGguemVyb3MoWyAxIDw8IHRvdGFsUXViaXRzLCAxIDw8IHRvdGFsUXViaXRzIF0pO1xuXG5cdGZvcih2YXIgZWxyb3cgPSAwOyBlbHJvdyA8IFUubGVuZ3RoOyBlbHJvdysrKSB7XG5cblx0XHR2YXIgcm93bWFzayA9IGdldEVsTWFzayhlbHJvdyk7XG5cblx0XHRmb3IodmFyIGVsY29sID0gMDsgZWxjb2wgPCBVW2Vscm93XS5sZW5ndGg7IGVsY29sKyspIHtcblxuXHRcdFx0dmFyIGNvbG1hc2sgPSBnZXRFbE1hc2soZWxjb2wpO1xuXG5cdFx0XHR2YXIgdXZhbCA9IFVbZWxyb3ddW2VsY29sXTtcblx0XHRcdGlmKHV2YWwpIHtcblx0XHRcdFx0dmFyIHJvdyA9IHJvd21hc2s7XG5cdFx0XHRcdHZhciBjb2wgPSBjb2xtYXNrO1xuXG5cdFx0XHRcdHZhciBjb3VudGVyID0gdW51c2VkU3BhY2U7XG5cdFx0XHRcdHZhciBjb3VudGVybWFzayA9IGdldEVsTWFzaygwKTtcblx0XHRcdFx0dmFyIGluY21hc2sgPSBnZXRJbmNNYXNrKCk7XG5cdFx0XHRcdHZhciBub3RtYXNrID0gZ2V0Tm90TWFzaygpO1xuXHRcdFx0XHR2YXIgdG9vdGhsZXNzID0gY291bnRlcm1hc2s7XG5cdFx0XHRcdHdoaWxlKGNvdW50ZXItLSkge1xuXHRcdFx0XHRcdHJvdyA9IHRvb3RobGVzcyB8IHJvd21hc2s7XG5cblx0XHRcdFx0XHRUW3Jvd11bY29sXSA9IHV2YWw7XG5cblx0XHRcdFx0XHR0b290aGxlc3MgPSAodG9vdGhsZXNzICsgaW5jbWFzaykgJiBub3RtYXNrO1xuXHRcdFx0XHRcdGNvbCA9IHRvb3RobGVzcyB8IGNvbG1hc2s7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIFQ7XG59O1xuXG4vL1xuLy8gRnVuY3Rpb24gcmV0dXJucyB1bml0YXJ5IG9mIHRoZSB3aG9sZSBjaXJjdWl0XG4vL1xuLy8gYGVuZGlhbm5lc3NgIGNhbiBiZTpcbi8vICAgICBudWxsIC0gdGhpcyBpcyBkZWZhdWx0IGFuZCBkZXBlbmRzIG9uIHRoaXMucmV2ZXJzZUJpdE9yZGVyXG4vLyAgICAgXCJiaWdcIiAtIGJpZyBlbmRpYW4gKGxpa2UgUmlnZXR0aS9weVF1aWwpXG4vLyAgICAgXCJsaXR0bGVcIiAtIGxpdHRsZSBlbmRpYW4gKGxpa2UgSUJNL1Fpc2tpdClcbi8vXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuY2lyY3VpdE1hdHJpeCA9IGZ1bmN0aW9uKGVuZGlhbm5lc3MpIHtcblx0dmFyIGRlY29tcG9zZWQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0ZGVjb21wb3NlZC5sb2FkKHRoaXMuc2F2ZSh0cnVlKSk7XG5cblx0aWYoZGVjb21wb3NlZC5nb3RDbGFzc2ljYWxDb250cm9sKCkpIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblxuXHR2YXIgbWF0cml4ID0gW107XG5cdGZvcih2YXIgY29sID0gZGVjb21wb3NlZC5udW1Db2xzKCkgLSAxOyBjb2wgPj0gMDsgY29sLS0pIHtcblx0XHRmb3IodmFyIHdpcmUgPSBkZWNvbXBvc2VkLm51bVF1Yml0cyAtIDE7IHdpcmUgPj0gMDsgd2lyZS0tKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGRlY29tcG9zZWQuZ2V0R2F0ZUF0KGNvbCwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0dmFyIGdhdGVEZWYgPSBkZWNvbXBvc2VkLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXTtcblx0XHRcdFx0aWYoIWdhdGVEZWYpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGdhdGUgXFxcIlwiICsgZ2F0ZS5uYW1lICsgXCJcXFwiXCIpO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZihnYXRlRGVmLm1hdHJpeCAmJiBnYXRlRGVmLm1hdHJpeC5sZW5ndGgpIHtcblx0XHRcdFx0XHR2YXIgcmF3R2F0ZSA9IGRlY29tcG9zZWQuZ2V0UmF3R2F0ZShnYXRlRGVmLCBnYXRlLm9wdGlvbnMpO1xuXG5cdFx0XHRcdFx0dmFyIFUgPSBkZWNvbXBvc2VkLnRyYW5zZm9ybU1hdHJpeChkZWNvbXBvc2VkLm51bVF1Yml0cywgcmF3R2F0ZSwgZ2F0ZS53aXJlcywgZW5kaWFubmVzcyk7XG5cblx0XHRcdFx0XHRpZighbWF0cml4IHx8ICFtYXRyaXgubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRtYXRyaXggPSBVO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRtYXRyaXggPSB0aGlzLm11bHRpcGx5U3F1YXJlTWF0cmljZXMobWF0cml4LCBVKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbWF0cml4O1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZWlnZW52YWx1ZXMyeDIgPSBmdW5jdGlvbihBKSB7XG5cdHZhciBNID0gdGhpcy5wYXJzZU1hdHJpeChBKTtcblxuXHR2YXIgZWlnZW4gPSBbMCwgMF07XG5cblx0dmFyIHggPSBtYXRoLmFkZChNWzBdWzBdLCBNWzFdWzFdKTtcblxuXHRlaWdlblswXSA9IG1hdGguZGl2aWRlKG1hdGguYWRkKHgsIG1hdGguc3FydCggbWF0aC5hZGQobWF0aC5tdWx0aXBseShtYXRoLm11bHRpcGx5KDQsIE1bMF1bMV0pLCBNWzFdWzBdKSwgbWF0aC5wb3coIG1hdGguc3VidHJhY3QoTVswXVswXSwgTVsxXVsxXSksIDIpKSkpLCAyKTtcblx0ZWlnZW5bMV0gPSBtYXRoLmRpdmlkZShtYXRoLnN1YnRyYWN0KHgsIG1hdGguc3FydCggbWF0aC5hZGQobWF0aC5tdWx0aXBseShtYXRoLm11bHRpcGx5KDQsIE1bMF1bMV0pLCBNWzFdWzBdKSwgbWF0aC5wb3coIG1hdGguc3VidHJhY3QoTVswXVswXSwgTVsxXVsxXSksIDIpKSkpLCAyKTtcblxuXHRyZXR1cm4gZWlnZW47XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ2V0QmlwYXJ0aXRlU3RhdGUgPSBmdW5jdGlvbihxMSwgcTIpIHtcblx0dmFyIGJpcGFydGl0ZVN0YXRlID0ge307XG5cdHZhciBhbXBDb3VudCA9IDA7XG5cblx0ZnVuY3Rpb24gc3BlY1N1bUNvbXBsZXgoYSwgYikge1xuXHRcdHZhciByYXdTdW0gPSBtYXRoLmFkZChhLCBiKTtcblx0XHR2YXIgYXJnID0gcmF3U3VtLmFyZygpO1xuXHRcdHJldHVybiBtYXRoLmNvbXBsZXgoeyBhYnM6IG1hdGguc3FydChtYXRoLnBvdyhtYXRoLmFicyhhKSwgMikgKyBtYXRoLnBvdyhtYXRoLmFicyhiKSwgMikpLCBhcmc6IGFyZyB9KTtcblx0fVxuXG5cdGZvcih2YXIgaXMgaW4gdGhpcy5zdGF0ZSkge1xuXHRcdHZhciBpID0gcGFyc2VJbnQoaXMpO1xuXHRcdHZhciBpbmRleCA9IDA7XG5cdFx0dmFyIGJpdDEgPSAoaSAmICgxIDw8IHExKSkgPyAxIDogMDtcblx0XHR2YXIgYml0MiA9IChpICYgKDEgPDwgcTIpKSA/IDIgOiAwO1xuXG5cdFx0aW5kZXggfD0gYml0MTtcblx0XHRpbmRleCB8PSBiaXQyO1xuXG5cdFx0aWYodHlwZW9mIGJpcGFydGl0ZVN0YXRlW2luZGV4XSAhPSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRiaXBhcnRpdGVTdGF0ZVtpbmRleF0gPSBzcGVjU3VtQ29tcGxleChiaXBhcnRpdGVTdGF0ZVtpbmRleF0sIHRoaXMuc3RhdGVbaXNdKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0YmlwYXJ0aXRlU3RhdGVbaW5kZXhdID0gdGhpcy5zdGF0ZVtpc107XG5cdFx0fVxuXG5cdFx0YW1wQ291bnQrKztcblx0fVxuXG5cdGlmKCFhbXBDb3VudCkge1xuXHRcdGJpcGFydGl0ZVN0YXRlW1wiMFwiXSA9IG1hdGguY29tcGxleCgxLCAwKTtcblx0fVxuXG5cdHJldHVybiBiaXBhcnRpdGVTdGF0ZTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNoYW5jZU1hcCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblxuXHR2YXIgbWFwID0ge307XG5cdGZvcih2YXIgc291ciA9IDA7IHNvdXIgPCB0aGlzLm51bVF1Yml0czsgc291cisrKSB7XG5cdFx0Zm9yKHZhciBkZXN0ID0gMDsgZGVzdCA8IHRoaXMubnVtUXViaXRzOyBkZXN0KyspIHtcblx0XHRcdGlmKCFtYXBbc291cl0pIHtcblx0XHRcdFx0bWFwW3NvdXJdID0ge307XG5cdFx0XHR9XG5cdFx0XHRpZihkZXN0ID09IHNvdXIpIHtcblx0XHRcdFx0bWFwW3NvdXJdW2Rlc3RdID0gbnVsbDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1hcFtzb3VyXVtkZXN0XSA9IHt9O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZvcih2YXIgc291ciA9IDA7IHNvdXIgPCB0aGlzLm51bVF1Yml0czsgc291cisrKSB7XG5cdFx0Zm9yKHZhciBkZXN0ID0gc291ciArIDE7IGRlc3QgPCB0aGlzLm51bVF1Yml0czsgZGVzdCsrKSB7XG5cdFx0XHR2YXIgcmVkdWNlZFN0YXRlID0gdGhpcy5nZXRCaXBhcnRpdGVTdGF0ZShzb3VyLCBkZXN0KTtcblxuXHRcdFx0dmFyIGNpcmMgPSBuZXcgUXVhbnR1bUNpcmN1aXQoMik7XG5cdFx0XHRjaXJjLnN0YXRlID0gcmVkdWNlZFN0YXRlO1xuXG5cdFx0XHR2YXIgcmFkaXVzID0gbWF0aC5hYnMoY2lyYy5hbmdsZXMoKVswXS5yYWRpdXMpO1xuXG5cdFx0XHR2YXIgY29uY3VyZW5jZSA9IG1hdGgucm91bmQoMSAtIG1hdGgucG93KHJhZGl1cywgMiksIDcpO1xuXG5cdFx0XHRtYXBbc291cl1bZGVzdF0uZW50YW5nbGVkID0gY29uY3VyZW5jZSA+IDA7XG5cdFx0XHRtYXBbc291cl1bZGVzdF0uY29uY3VyZW5jZSA9IGNvbmN1cmVuY2U7XG5cdFx0XHRtYXBbc291cl1bZGVzdF0uY29uY3VyZW5jZVBlcmNlbnQgPSBtYXRoLnJvdW5kKGNvbmN1cmVuY2UgKiAxMDAsIDIpO1xuXG5cblx0XHRcdG1hcFtkZXN0XVtzb3VyXS5lbnRhbmdsZWQgPSBjb25jdXJlbmNlID4gMDtcblx0XHRcdG1hcFtkZXN0XVtzb3VyXS5jb25jdXJlbmNlID0gY29uY3VyZW5jZTtcblx0XHRcdG1hcFtkZXN0XVtzb3VyXS5jb25jdXJlbmNlUGVyY2VudCA9IG1hdGgucm91bmQoY29uY3VyZW5jZSAqIDEwMCwgMik7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1hcDtcbn07XG5cblxuZnVuY3Rpb24gYmluU3RyKG4sIGxlbikge1xuXHR2YXIgYmluID0gbi50b1N0cmluZygyKTtcblx0d2hpbGUoYmluLmxlbmd0aCA8IGxlbikge1xuXHRcdGJpbiA9IFwiMFwiICsgYmluO1xuXHR9XG5cdHJldHVybiBiaW47XG59XG5cblxuZnVuY3Rpb24gcmV2ZXJzZUJpdHdpc2UobiwgbGVuKSB7XG5cdHJldHVybiBwYXJzZUludChiaW5TdHIobiwgbGVuKS5zcGxpdChcIlwiKS5yZXZlcnNlKCkuam9pbihcIlwiKSwgMik7XG59XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlc2V0UXViaXQgPSBmdW5jdGlvbih3aXJlLCB2YWx1ZSkge1xuXHR2YXIgVSA9IFtcblx0XHRbMCwgMF0sXG5cdFx0WzAsIDBdXG5cdF07XG5cblx0dmFyIGJpdCA9IG51bGw7XG5cdGlmKHRoaXMucmV2ZXJzZUJpdE9yZGVyKSB7XG5cdFx0Yml0ID0gbWF0aC5wb3coMiwgKHRoaXMubnVtUXViaXRzIC0gMSkgLSB3aXJlKTtcblx0fSBlbHNlIHtcblx0XHRiaXQgPSBtYXRoLnBvdygyLCB3aXJlKTtcblx0fVxuXG5cdHZhciBwcm9iID0gMDtcblx0Zm9yKHZhciBpcyBpbiB0aGlzLnN0YXRlKSB7XG5cdFx0dmFyIGkgPSBwYXJzZUludChpcyk7XG5cdFx0aWYodmFsdWUgPyAhIShpICYgYml0KSA6ICEoaSAmIGJpdCkpIHtcblx0XHRcdHByb2IgKz0gbWF0aC5wb3cobWF0aC5hYnModGhpcy5zdGF0ZVtpc10pLCAyKTtcblx0XHR9XG5cdH1cblxuXHRwcm9iID0gbWF0aC5yb3VuZChwcm9iLCAxNCk7XG5cblx0aWYocHJvYiA9PSAxKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYodmFsdWUpIHtcblx0XHRpZihwcm9iID09IDApIHtcblx0XHRcdFVbMV1bMF0gPSAxO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRVWzFdWzFdID0gbWF0aC5zcXJ0KDEgLyBwcm9iKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0aWYocHJvYiA9PSAwKSB7XG5cdFx0XHRVWzBdWzFdID0gMTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0VVswXVswXSA9IG1hdGguc3FydCgxIC8gcHJvYik7XG5cdFx0fVxuXHR9O1xuXG5cdHRoaXMuY29sbGFwc2VkID0gW107XG5cdHRoaXMucHJvYiA9IFtdO1xuXHR0aGlzLmFwcGx5VHJhbnNmb3JtKFUsIFt3aXJlXSk7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5hcHBseUdhdGUgPSBmdW5jdGlvbihnYXRlTmFtZSwgY29sdW1uLCB3aXJlcywgb3B0aW9ucykge1xuXHRpZihnYXRlTmFtZSA9PSBcIm1lYXN1cmVcIikge1xuXHRcdGlmKCFvcHRpb25zLmNyZWcpIHtcblx0XHRcdHRocm93IFwiRXJyb3I6IFxcXCJtZWFzdXJlXFxcIiBnYXRlIHJlcXVpcmVzIGRlc3RpbmF0aW9uLlwiO1xuXHRcdH1cblxuXHRcdHZhciB2YWx1ZSA9IHRoaXMubWVhc3VyZSh3aXJlc1swXSwgb3B0aW9ucy5jcmVnLm5hbWUsIG9wdGlvbnMuY3JlZy5iaXQpO1xuXG5cdFx0dmFyIGRvUmVzZXQgPSB0aGlzLm1lYXN1cmVSZXNldHNRdWJpdDtcblx0XHRpZighZG9SZXNldCkge1xuXHRcdFx0Zm9yKHZhciBjb2wgPSBjb2x1bW47IGNvbCA8IHRoaXMubnVtQ29scygpOyBjb2wrKykge1xuXHRcdFx0XHR2YXIgZnJvbVJvdyA9IGNvbCA9PSBjb2x1bW4gPyB3aXJlc1swXSA6IDA7XG5cdFx0XHRcdGZvcih2YXIgcm93ID0gZnJvbVJvdzsgcm93IDwgdGhpcy5udW1RdWJpdHM7IHJvdysrKSB7XG5cdFx0XHRcdFx0dmFyIGcgPSB0aGlzLmdhdGVzW3Jvd11bY29sXTtcblx0XHRcdFx0XHRpZihnICYmIGcubmFtZSAhPSBcIm1lYXN1cmVcIikge1xuXHRcdFx0XHRcdFx0ZG9SZXNldCA9IHRydWU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoZG9SZXNldCkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYoZG9SZXNldCkge1xuXHRcdFx0dGhpcy5yZXNldFF1Yml0KHdpcmVzWzBdLCB2YWx1ZSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYoZ2F0ZU5hbWUgPT0gXCJyZXNldFwiKSB7XG5cdFx0dGhpcy5yZXNldFF1Yml0KHdpcmVzWzBdLCAwKTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR2YXIgZ2F0ZSA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV07XG5cdGlmKCFnYXRlKSB7XG5cdFx0Y29uc29sZS5sb2coXCJVbmtub3duIGdhdGUgXFxcIlwiICsgZ2F0ZU5hbWUgKyBcIlxcXCIuXCIpO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHZhciByYXdHYXRlID0gdGhpcy5nZXRSYXdHYXRlKGdhdGUsIG9wdGlvbnMpO1xuXG5cdHRoaXMuY29sbGFwc2VkID0gW107XG5cdHRoaXMucHJvYiA9IFtdO1xuXG5cdHRoaXMuYXBwbHlUcmFuc2Zvcm0ocmF3R2F0ZSwgd2lyZXMpO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldFJhd0dhdGUgPSBmdW5jdGlvbihnYXRlLCBnYXRlT3B0aW9ucywgZ2xvYmFsT3B0aW9ucykge1xuXHR2YXIgZ2xvYmFsUGFyYW1zID0gZ2xvYmFsT3B0aW9ucyAmJiBnbG9iYWxPcHRpb25zLnBhcmFtcyA/IGdsb2JhbE9wdGlvbnMucGFyYW1zIDogKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucGFyYW1zID8gdGhpcy5vcHRpb25zLnBhcmFtcyA6IHt9KTtcblxuXHR2YXIgZ2xvYmFsUGFyYW1zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShnbG9iYWxQYXJhbXMpKTtcblx0Zm9yKHZhciBnbG9iYWxQYXJhbU5hbWUgaW4gZ2xvYmFsUGFyYW1zKSB7XG5cdFx0Z2xvYmFsUGFyYW1zW2dsb2JhbFBhcmFtTmFtZV0gPSBtYXRoLmV2YWx1YXRlKGdsb2JhbFBhcmFtc1tnbG9iYWxQYXJhbU5hbWVdKTtcblx0fVxuXG5cdHZhciByYXdHYXRlID0gW107XG5cdGdhdGUubWF0cml4Lm1hcChmdW5jdGlvbihyb3cpIHtcblx0XHR2YXIgcmF3R2F0ZVJvdyA9IFtdO1xuXHRcdHJvdy5tYXAoZnVuY3Rpb24oaXRlbSkge1xuXHRcdFx0aWYodHlwZW9mIGl0ZW0gPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHR2YXIgcGFyYW1zID0gZ2F0ZU9wdGlvbnMgPyBnYXRlT3B0aW9ucy5wYXJhbXMgfHwge30gOiB7fTtcblxuXHRcdFx0XHR2YXIgdmFycyA9IHt9O1xuXHRcdFx0XHRnYXRlLnBhcmFtcy5tYXAoZnVuY3Rpb24odmFyTmFtZSwgdmFySW5kZXgpIHtcblx0XHRcdFx0XHRpZihBcnJheS5pc0FycmF5KHBhcmFtcykpIHtcblx0XHRcdFx0XHRcdC8vIERlcHJlY2F0ZWQuIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IG9ubHkuIFwicGFyYW1zXCIgc2hvdWxkIGJlIG9iamVjdCAtIG5vdCBhcnJheS5cblx0XHRcdFx0XHRcdHZhcnNbdmFyTmFtZV0gPSBwYXJhbXMubGVuZ3RoID4gdmFySW5kZXggPyBtYXRoLmV2YWx1YXRlKHBhcmFtc1t2YXJJbmRleF0sIGdsb2JhbFBhcmFtcykgOiBudWxsO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR2YXJzW3Zhck5hbWVdID0gbWF0aC5ldmFsdWF0ZShwYXJhbXNbdmFyTmFtZV0sIGdsb2JhbFBhcmFtcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR2YXIgZXYgPSBtYXRoLmV2YWx1YXRlKGl0ZW0sIHZhcnMpO1xuXHRcdFx0XHRyYXdHYXRlUm93LnB1c2goZXYpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmF3R2F0ZVJvdy5wdXNoKGl0ZW0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJhd0dhdGUucHVzaChyYXdHYXRlUm93KTtcblx0fSk7XG5cdHJldHVybiByYXdHYXRlO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmZpbmRHbG9iYWxQYXJhbXMgPSBmdW5jdGlvbigpIHtcblx0dmFyIHJlcyA9IHtcblx0XHRnbG9iYWxQYXJhbXM6IFtdLFxuXHRcdGNlbGxzOiBbXVxuXHR9O1xuXG5cdHZhciBleHRyYWN0VmFyaWFibGVzID0gZnVuY3Rpb24ocykge1xuXHRcdHZhciB2YXJzID0gW107XG5cblx0XHR2YXIgbWF0aFRvU3RyaW5nSGFuZGxlciA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMpIHtcblx0XHRcdGlmKG5vZGUuaXNTeW1ib2xOb2RlICYmICFub2RlLmlzRnVuY3Rpb25Ob2RlICYmICFtYXRoW25vZGUubmFtZV0pIHtcblx0XHRcdFx0dmFycy5wdXNoKG5vZGUubmFtZSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShzKTtcblx0XHRub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblxuXHRcdHJldHVybiB2YXJzO1xuXHR9O1xuXG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0dmFyIGNlbGxBZGRlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdGZvcih2YXIgZ2F0ZVBhcmFtTmFtZSBpbiBnYXRlLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHR2YXIgZ2F0ZVBhcmFtVmFsdWUgPSBnYXRlLm9wdGlvbnMucGFyYW1zW2dhdGVQYXJhbU5hbWVdO1xuXHRcdFx0XHRcdFx0aWYodHlwZW9mIGdhdGVQYXJhbVZhbHVlID09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRcdFx0dmFyIGdsb2JhbHMgPSBleHRyYWN0VmFyaWFibGVzKGdhdGVQYXJhbVZhbHVlKTtcblxuXHRcdFx0XHRcdFx0XHRpZihnbG9iYWxzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZyA9IDA7IGcgPCBnbG9iYWxzLmxlbmd0aDsgZysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihyZXMuZ2xvYmFsUGFyYW1zLmluZGV4T2YoZ2xvYmFsc1tnXSkgPCAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJlcy5nbG9iYWxQYXJhbXMucHVzaChnbG9iYWxzW2ddKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZighY2VsbEFkZGVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgbWF4V2lyZSA9IE1hdGgubWF4LmFwcGx5KG51bGwsIGdhdGUud2lyZXMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVzLmNlbGxzLnB1c2goW2NvbHVtbiwgbWF4V2lyZV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2VsbEFkZGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldEdsb2JhbFBhcmFtcyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5maW5kR2xvYmFsUGFyYW1zKCkuZ2xvYmFsUGFyYW1zO1xuXHRyZXR1cm4gZ2xvYmFsUGFyYW1zO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdvdEdsb2JhbFBhcmFtcyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5nZXRHbG9iYWxQYXJhbXMoKTtcblxuXHRyZXR1cm4gZ2xvYmFsUGFyYW1zLmxlbmd0aCA+IDA7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUudXBkYXRlR2xvYmFsUGFyYW1zID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMucGFyYW1zID0gdGhpcy5nZXRHbG9iYWxQYXJhbXMoKTtcblxuXHR0aGlzLm9wdGlvbnMgPSB0aGlzLm9wdGlvbnMgfHwge307XG5cdHRoaXMub3B0aW9ucy5wYXJhbXMgPSB0aGlzLm9wdGlvbnMucGFyYW1zIHx8IHt9O1xuXG5cdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBwYXJhbU5hbWUgPSB0aGlzLnBhcmFtc1tpXTtcblx0XHRpZih0eXBlb2YgdGhpcy5vcHRpb25zLnBhcmFtc1twYXJhbU5hbWVdID09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdHRoaXMub3B0aW9ucy5wYXJhbXNbcGFyYW1OYW1lXSA9IDA7XG5cdFx0fVxuXHR9XG5cblx0Zm9yKHZhciBwYXJhbU5hbWUgaW4gdGhpcy5vcHRpb25zLnBhcmFtcykge1xuXHRcdGlmKHRoaXMucGFyYW1zLmluZGV4T2YocGFyYW1OYW1lKSA8IDApIHtcblx0XHRcdGRlbGV0ZSB0aGlzLm9wdGlvbnMucGFyYW1zW3BhcmFtTmFtZV07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXMucGFyYW1zO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmRlY29tcG9zZSA9IGZ1bmN0aW9uKG9iaikge1xuXHRpZighb2JqLmdhdGVzLmxlbmd0aCkge1xuXHRcdHJldHVybiBvYmo7XG5cdH1cblxuXHR0aGlzLnVwZGF0ZUdsb2JhbFBhcmFtcygpO1xuXG5cdGZ1bmN0aW9uIGluamVjdEFycmF5KGExLCBhMiwgcG9zKSB7XG5cdFx0cmV0dXJuIGExLnNsaWNlKCAwLCBwb3MgKS5jb25jYXQoIGEyICkuY29uY2F0KCBhMS5zbGljZSggcG9zICkgKTtcblx0fVxuXG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgb2JqLmdhdGVzWzBdLmxlbmd0aDsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgb2JqLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IG9iai5nYXRlc1t3aXJlXVtjb2x1bW5dO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwICYmICF0aGlzLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXSkge1xuXHRcdFx0XHR2YXIgdG1wID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdHZhciBjdXN0b20gPSBvYmouY3VzdG9tR2F0ZXNbZ2F0ZS5uYW1lXTtcblx0XHRcdFx0aWYoY3VzdG9tKSB7XG5cdFx0XHRcdFx0dG1wLmxvYWQoY3VzdG9tKTtcblx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHQvLyBjaXJjdWl0IHdpdGggcGFyYW1zXG5cdFx0XHRcdFx0aWYodG1wLnBhcmFtcy5sZW5ndGggJiYgZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdHZhciBnbG9iYWxQYXJhbXMgPSBnYXRlLm9wdGlvbnMucGFyYW1zO1xuXHRcdFx0XHRcdFx0Zm9yKHZhciBjYyA9IDA7IGNjIDwgdG1wLmdhdGVzWzBdLmxlbmd0aDsgY2MrKykge1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIHd3ID0gMDsgd3cgPCB0bXAubnVtUXViaXRzOyB3dysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGdnID0gdG1wLmdhdGVzW3d3XVtjY107XG5cdFx0XHRcdFx0XHRcdFx0aWYoZ2cgJiYgZ2cuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGdnLm9wdGlvbnMgJiYgZ2cub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBkZXN0UGFyYW0gaW4gZ2cub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBwYXJzZSBwYXJhbSwgcmVwbGFjZSB2YXJpYWJsZSB3aXRoIGdsb2JhbCBwYXJhbSBhbmQgYXNzZW1ibGUgaXQgYmFja1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnZy5vcHRpb25zLnBhcmFtc1tkZXN0UGFyYW1dKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgdHJhbnNmb3JtZWQgPSBub2RlLnRyYW5zZm9ybShmdW5jdGlvbiAobm9kZSwgcGF0aCwgcGFyZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihub2RlLmlzU3ltYm9sTm9kZSAmJiBnbG9iYWxQYXJhbXMuaGFzT3duUHJvcGVydHkobm9kZS5uYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gbWF0aC5wYXJzZShcIihcIiArIGdsb2JhbFBhcmFtc1tub2RlLm5hbWVdICsgXCIpXCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIG5vZGU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Z2cub3B0aW9ucy5wYXJhbXNbZGVzdFBhcmFtXSA9IHRyYW5zZm9ybWVkLnRvU3RyaW5nKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbikge1xuXHRcdFx0XHRcdFx0Zm9yKHZhciBjYyA9IDA7IGNjIDwgdG1wLmdhdGVzWzBdLmxlbmd0aDsgY2MrKykge1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIHd3ID0gMDsgd3cgPCB0bXAubnVtUXViaXRzOyB3dysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGdnID0gdG1wLmdhdGVzW3d3XVtjY107XG5cdFx0XHRcdFx0XHRcdFx0aWYoZ2cpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGdnLm9wdGlvbnMgPSBnZy5vcHRpb25zIHx8IHt9O1xuXHRcdFx0XHRcdFx0XHRcdFx0Z2cub3B0aW9ucy5jb25kaXRpb24gPSBnYXRlLm9wdGlvbnMuY29uZGl0aW9uO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyAtLS1cblxuXHRcdFx0XHRcdHZhciBkZWNvbXBvc2VkID0gdG1wLnNhdmUodHJ1ZSk7XG5cdFx0XHRcdFx0aWYoIWRlY29tcG9zZWQuZ2F0ZXNbMF0ubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRmb3IodmFyIHRtcHEgPSAwOyB0bXBxIDwgZGVjb21wb3NlZC5nYXRlcy5sZW5ndGg7IHRtcHErKykge1xuXHRcdFx0XHRcdFx0XHRkZWNvbXBvc2VkLmdhdGVzW3RtcHFdLnB1c2gobnVsbCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIGVtcHR5ID0gW107XG5cdFx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGRlY29tcG9zZWQuZ2F0ZXNbMF0ubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0XHRcdFx0XHRlbXB0eS5wdXNoKG51bGwpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIHNoaWZ0IGNvbHVtbnMgcmlnaHRcblx0XHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgb2JqLm51bVF1Yml0czsgdysrKSB7XG5cdFx0XHRcdFx0XHR2YXIgZyA9IG9iai5nYXRlc1t3XVtjb2x1bW5dO1xuXHRcdFx0XHRcdFx0aWYoZyAmJiBnLmlkID09IGdhdGUuaWQpIHtcblx0XHRcdFx0XHRcdFx0b2JqLmdhdGVzW3ddLnNwbGljZShjb2x1bW4sIDEpO1xuXHRcdFx0XHRcdFx0XHR2YXIgaW5zZXJ0R2F0ZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGVjb21wb3NlZC5nYXRlc1tnLmNvbm5lY3Rvcl0pKTtcblx0XHRcdFx0XHRcdFx0Ly8gdW5pcXVlIGlkXG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgdG1wcSA9IDA7IHRtcHEgPCBpbnNlcnRHYXRlLmxlbmd0aDsgdG1wcSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYoaW5zZXJ0R2F0ZVt0bXBxXSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aW5zZXJ0R2F0ZVt0bXBxXS5pZCA9IGluc2VydEdhdGVbdG1wcV0uaWQgKyBcIl9cIiArIGdhdGUuaWQ7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdG9iai5nYXRlc1t3XSA9IGluamVjdEFycmF5KG9iai5nYXRlc1t3XSwgaW5zZXJ0R2F0ZSwgY29sdW1uKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdG9iai5nYXRlc1t3XSA9IGluamVjdEFycmF5KG9iai5nYXRlc1t3XSwgZW1wdHksIGNvbHVtbiArIDEpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdG9iai5jdXN0b21HYXRlcyA9IHt9O1xuXG5cdHJldHVybiBvYmo7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZGVjb21wb3NlR2F0ZUF0ID0gZnVuY3Rpb24oY29sdW1uLCB3aXJlKSB7XG5cdHZhciBzZWxmID0gdGhpcztcblxuXHQvLyBpZiB0aGVyZSBpcyBubyBnYXRlIC0gcmV0dXJuXG5cdHZhciBnYXRlID0gdGhpcy5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0aWYoIWdhdGUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBpZiBnYXRlIGlzIG5vdCBjb21wb3NpdGUgLSByZXR1cm5cblx0aWYoIXRoaXMuY3VzdG9tR2F0ZXNbZ2F0ZS5uYW1lXSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIGNvcHkgY2lyY3VpdFxuXHR2YXIgb2JqID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdG9iai5sb2FkKHRoaXMuc2F2ZSgpKTtcblxuXHQvLyByZW1vdmUgYWxsIGdhdGVzIGV4Y2VwdCB0aGlzXG5cdGZvcih2YXIgY29sID0gMDsgY29sIDwgb2JqLmdhdGVzWzBdLmxlbmd0aDsgY29sKyspIHtcblx0XHRmb3IodmFyIHJvdyA9IDA7IHJvdyA8IG9iai5udW1RdWJpdHM7IHJvdysrKSB7XG5cdFx0XHR2YXIgZyA9IG9iai5nYXRlc1tyb3ddW2NvbF07XG5cdFx0XHRpZihnICYmIGcuaWQgIT0gZ2F0ZS5pZCkge1xuXHRcdFx0XHRvYmoucmVtb3ZlR2F0ZUF0KGNvbCwgcm93KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBkZWNvbXBvc2UgY2lyY3VpdFxuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRjaXJjdWl0LmxvYWQob2JqLnNhdmUodHJ1ZSkpO1xuXHRjaXJjdWl0LnJlbW92ZUxlYWRpbmdDb2x1bW5zKCk7XG5cdGNpcmN1aXQucmVtb3ZlVHJhaWxpbmdDb2x1bW5zKCk7XG5cblx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQuZ2F0ZXNbMF0ubGVuZ3RoIC0gMTsgaSsrKSB7XG5cdFx0dGhpcy5pbnNlcnRTcGFjZShjb2x1bW4gKyBpLCBnYXRlLndpcmVzKTtcblx0fVxuXHR0aGlzLnJlbW92ZUdhdGUoZ2F0ZS5pZCk7XG5cblx0dmFyIGRlc3RDb2wgPSBjb2x1bW47XG5cdGZvcih2YXIgY29sID0gMDsgY29sIDwgY2lyY3VpdC5nYXRlc1swXS5sZW5ndGg7IGNvbCsrKSB7XG5cdFx0dmFyIGdhdGVzID0gY2lyY3VpdC5nZXRHYXRlc0F0Q29sdW1uKGNvbCk7XG5cdFx0Z2F0ZXMubWFwKGZ1bmN0aW9uKGcpIHtcblx0XHRcdHNlbGYuYWRkR2F0ZShnLm5hbWUsIGRlc3RDb2wsIGcud2lyZXMsIGcub3B0aW9ucyk7XG5cdFx0fSk7XG5cdFx0ZGVzdENvbCsrO1xuXHR9XG5cblx0cmV0dXJuIGNpcmN1aXQ7XG59O1xuXG5cbi8vXG4vLyBDb252ZXJ0IHRoaXMgY2lyY3VpdCB0byBjdXN0b20gZ2F0ZVxuLy9cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNvbnZlcnRUb0N1c3RvbUdhdGUgPSBmdW5jdGlvbihnYXRlTmFtZSwgZGVjb21wb3NlLCBhZGRUb0NpcmN1aXQpIHtcblx0Ly8gcmVtb3ZlIG1lYXN1cmVtZW50IGFuZCBjbGFzc2ljYWwgY29udHJvbFxuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gdGhpcy5nYXRlc1t3aXJlXVtjb2x1bW5dO1xuXHRcdFx0aWYoZ2F0ZSkge1xuXHRcdFx0XHQvLyByZW1vdmUgbWVhc3VyZW1lbnRcblx0XHRcdFx0aWYoZ2F0ZS5uYW1lID09IFwibWVhc3VyZVwiKSB7XG5cdFx0XHRcdFx0dGhpcy5nYXRlc1t3aXJlXVtjb2x1bW5dID0gbnVsbDtcblx0XHRcdFx0XHRnYXRlID0gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZihnYXRlKSB7XG5cdFx0XHRcdC8vIHJlbW92ZSBjb25kaXRpb25zXG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uKSB7XG5cdFx0XHRcdFx0ZGVsZXRlIHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXS5vcHRpb25zLmNvbmRpdGlvbjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIHJlbW92ZSBjcmVnc1xuXHR0aGlzLmNyZWdzID0ge307XG5cblx0dmFyIHNvdXJjZSA9IHRoaXMuc2F2ZShkZWNvbXBvc2UpO1xuXHRpZihzb3VyY2Uub3B0aW9ucykge1xuXHRcdHNvdXJjZS5vcHRpb25zLmh5YnJpZCA9IGZhbHNlO1xuXHRcdGlmKHNvdXJjZS5vcHRpb25zLmh5YnJpZE9wdGlvbnMpIHtcblx0XHRcdGRlbGV0ZSBzb3VyY2Uub3B0aW9ucy5oeWJyaWRPcHRpb25zO1xuXHRcdH1cblx0fVxuXG5cdHRoaXMuY2xlYXIoKTtcblx0dGhpcy5jdXN0b21HYXRlc1tnYXRlTmFtZV0gPSBzb3VyY2U7XG5cblx0aWYoYWRkVG9DaXJjdWl0KSB7XG5cdFx0dmFyIHdpcmVzID0gW107XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMubnVtUXViaXRzOyBpKyspIHtcblx0XHRcdHdpcmVzLnB1c2goaSk7XG5cdFx0fVxuXG5cdFx0dmFyIGdhdGVPcHRpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmN1c3RvbUdhdGVzW2dhdGVOYW1lXS5vcHRpb25zKSk7XG5cblx0XHR0aGlzLmFkZEdhdGUoZ2F0ZU5hbWUsIC0xLCB3aXJlcywgZ2F0ZU9wdGlvbnMpO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXMucmVtb3ZlVHJhaWxpbmdSb3dzKCk7XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS52YWxpZEN1c3RvbUdhdGVOYW1lID0gZnVuY3Rpb24oYmFzZU5hbWUpIHtcblx0YmFzZU5hbWUgPSAoYmFzZU5hbWUgfHwgXCJzdWJcIikgKyBcIlwiO1xuXG5cdHZhciBjdXN0b21HYXRlTmFtZXMgPSBbXTtcblx0aWYodGhpcy5jdXN0b21HYXRlcykge1xuXHRcdGlmKCF0aGlzLmJhc2ljR2F0ZXNbYmFzZU5hbWVdKSB7XG5cdFx0XHRpZighdGhpcy5jdXN0b21HYXRlc1tiYXNlTmFtZV0pIHtcblx0XHRcdFx0cmV0dXJuIGJhc2VOYW1lO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvcih2YXIgZ2F0ZU5hbWUgaW4gdGhpcy5iYXNpY0dhdGVzKSB7XG5cdFx0XHRjdXN0b21HYXRlTmFtZXMucHVzaChnYXRlTmFtZSk7XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciBnYXRlTmFtZSBpbiB0aGlzLmN1c3RvbUdhdGVzKSB7XG5cdFx0XHRjdXN0b21HYXRlTmFtZXMucHVzaChnYXRlTmFtZSk7XG5cdFx0fVxuXHR9XG5cblx0dmFyIGluZGV4ID0gMDtcblx0dmFyIHZhbGlkTmFtZSA9IFwiXCI7XG5cdGRvIHtcblx0XHRpbmRleCsrO1xuXHRcdHZhbGlkTmFtZSA9IGJhc2VOYW1lICsgaW5kZXg7XG5cdH0gd2hpbGUoY3VzdG9tR2F0ZU5hbWVzLmluZGV4T2YodmFsaWROYW1lKSA+PSAwKTtcblxuXHRyZXR1cm4gdmFsaWROYW1lO1xufTtcblxuXG4vL1xuLy8gU3BsaXQgY2lyY3VpdCBpbnRvIGNvbXBvc2l0ZSBnYXRlcywgZWFjaCBvZiBcImJsb2NrU2l6ZVwiIHF1Yml0c1xuLy9cbi8vIE9wdGlvbnM6XG4vLyAgIHtcbi8vICAgICAgZmxleGlibGVCbG9ja1NpemU6IGJvb2wgLy8gQWxsb3cgbGFyZ2VyIGJsb2NrcyBmb3IgZ2F0ZXMgd2l0aCBtb3JlIHF1Yml0cyB0aGFuIGJsb2NrIHNpemVcbi8vICAgICAgdmVydGljYWxPbmx5OiBib29sIC8vIERvbid0IGV4dGVuZCBibG9ja3MgaG9yaXpvbnRhbGx5XG4vLyAgIH1cbi8vXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5zcGxpdEludG9CbG9ja3MgPSBmdW5jdGlvbihibG9ja1NpemUsIG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGJsb2NrcyA9IFtdO1xuXHR2YXIgcHJldkNvbmRpdGlvbiA9IFwie31cIjtcblx0dmFyIHByZXZJc1VuaXRhcnkgPSB0cnVlO1xuXG5cdHZhciBjdXJyZW50QmxvY2sgPSBudWxsO1xuXG5cdHZhciBkZWNvbXBvc2VkID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGRlY29tcG9zZWQubG9hZCh0aGlzLnNhdmUodHJ1ZSkpO1xuXG5cdHZhciBudW1Db2xzID0gZGVjb21wb3NlZC5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgZGVjb21wb3NlZC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBkZWNvbXBvc2VkLmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwICYmICFnYXRlLmFkZGVkVG9CbG9jaykge1xuXHRcdFx0XHR2YXIgZ2F0ZURlZiA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlLm5hbWVdO1xuXHRcdFx0XHR2YXIgY3VycmVudENvbmRpdGlvbiA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uID8gSlNPTi5zdHJpbmdpZnkoZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbikgOiBcInt9XCI7XG5cdFx0XHRcdHZhciBjdXJyZW50SXNVbml0YXJ5ID0gZ2F0ZURlZiAmJiAhIShnYXRlRGVmLm1hdHJpeCAmJiBnYXRlRGVmLm1hdHJpeC5sZW5ndGgpO1xuXG5cdFx0XHRcdHZhciBuZXdXaXJlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY3VycmVudEJsb2NrID8gY3VycmVudEJsb2NrLndpcmVzIDogW10pKTtcblx0XHRcdFx0Z2F0ZS53aXJlcy5tYXAoZnVuY3Rpb24od2lyZSkge1xuXHRcdFx0XHRcdGlmKG5ld1dpcmVzLmluZGV4T2Yod2lyZSkgPCAwKSB7XG5cdFx0XHRcdFx0XHRuZXdXaXJlcy5wdXNoKHdpcmUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aWYoXG5cdFx0XHRcdFx0IWJsb2Nrcy5sZW5ndGggfHxcblx0XHRcdFx0XHQhKGN1cnJlbnRDb25kaXRpb24gPT0gcHJldkNvbmRpdGlvbikgfHxcblx0XHRcdFx0XHQhY3VycmVudElzVW5pdGFyeSB8fFxuXHRcdFx0XHRcdCFwcmV2SXNVbml0YXJ5IHx8XG5cdFx0XHRcdFx0IShuZXdXaXJlcy5sZW5ndGggPD0gYmxvY2tTaXplKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRjdXJyZW50QmxvY2sgPSB7XG5cdFx0XHRcdFx0XHR3aXJlczogZ2F0ZS53aXJlcyxcblx0XHRcdFx0XHRcdGdhdGVzOiBbZ2F0ZV1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGJsb2Nrcy5wdXNoKGN1cnJlbnRCbG9jayk7XG5cblx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbikge1xuXHRcdFx0XHRcdFx0Y3VycmVudEJsb2NrLmNvbmRpdGlvbiA9IGdhdGUub3B0aW9ucy5jb25kaXRpb247XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGN1cnJlbnRCbG9jay53aXJlcyA9IG5ld1dpcmVzO1xuXHRcdFx0XHRcdGN1cnJlbnRCbG9jay5nYXRlcy5wdXNoKGdhdGUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Z2F0ZS53aXJlcy5tYXAoZnVuY3Rpb24od3cpIHtcblx0XHRcdFx0XHRkZWNvbXBvc2VkLmdhdGVzW3d3XVtjb2x1bW5dLmFkZGVkVG9CbG9jayA9IHRydWU7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHByZXZDb25kaXRpb24gPSBjdXJyZW50Q29uZGl0aW9uO1xuXHRcdFx0XHRwcmV2SXNVbml0YXJ5ID0gY3VycmVudElzVW5pdGFyeTtcblxuXHRcdFx0XHRpZighb3B0aW9ucy52ZXJ0aWNhbE9ubHkpIHtcblx0XHRcdFx0XHQvLyB0cnkgdG8gZXh0ZW5kIHRoZSBibG9jayBob3Jpem9udGFsbHlcblx0XHRcdFx0XHR2YXIgZXh0Q29sdW1uID0gY29sdW1uICsgMTtcblx0XHRcdFx0XHR2YXIgZXh0V2lyZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGN1cnJlbnRCbG9jay53aXJlcykpO1xuXHRcdFx0XHRcdGV4dFdpcmVzLnNvcnQoKTtcblx0XHRcdFx0XHR3aGlsZShleHRDb2x1bW4gPCBudW1Db2xzICYmIGV4dFdpcmVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0ZXh0V2lyZSA9IGV4dFdpcmVzWzBdO1xuXG5cdFx0XHRcdFx0XHR3aGlsZShleHRXaXJlcy5sZW5ndGggJiYgZXh0V2lyZSA8PSBleHRXaXJlc1tleHRXaXJlcy5sZW5ndGggLSAxXSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgZXh0R2F0ZSA9IGRlY29tcG9zZWQuZ2V0R2F0ZUF0KGV4dENvbHVtbiwgZXh0V2lyZSk7XG5cdFx0XHRcdFx0XHRcdGlmKGV4dEdhdGUgJiYgIWV4dEdhdGUuYWRkZWRUb0Jsb2NrKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGV4dEdhdGVEZWYgPSB0aGlzLmJhc2ljR2F0ZXNbZXh0R2F0ZS5uYW1lXTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZXh0Q29uZGl0aW9uID0gZXh0R2F0ZS5vcHRpb25zICYmIGV4dEdhdGUub3B0aW9ucy5jb25kaXRpb24gPyBKU09OLnN0cmluZ2lmeShleHRHYXRlLm9wdGlvbnMuY29uZGl0aW9uKSA6IFwie31cIjtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZXh0SXNVbml0YXJ5ID0gZXh0R2F0ZURlZiAmJiAhIShleHRHYXRlRGVmLm1hdHJpeCAmJiBleHRHYXRlRGVmLm1hdHJpeC5sZW5ndGgpO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly9cblx0XHRcdFx0XHRcdFx0XHQvLyBDaGVjayBpZiBnYXRlIGlzIHZhbGlkIGZvciBibG9ja1xuXHRcdFx0XHRcdFx0XHRcdC8vXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVWYWxpZCA9IGV4dElzVW5pdGFyeSAmJiAoZXh0Q29uZGl0aW9uID09IGN1cnJlbnRDb25kaXRpb24pO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2hlY2sgaWYgYWxsIGdhdGUncyB3aXJlcyBhcmUgaW5zaWRlIGJsb2NrXG5cdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZVZhbGlkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIHd3ID0gMDsgd3cgPCBleHRHYXRlLndpcmVzLmxlbmd0aDsgd3crKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihleHRXaXJlcy5pbmRleE9mKGV4dEdhdGUud2lyZXNbd3ddKSA8IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRnYXRlVmFsaWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGVWYWxpZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gYWRkIGdhdGUgdG8gYmxvY2tcblx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnRCbG9jay5nYXRlcy5wdXNoKGV4dEdhdGUpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRleHRHYXRlLndpcmVzLm1hcChmdW5jdGlvbih3dykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRkZWNvbXBvc2VkLmdhdGVzW3d3XVtleHRDb2x1bW5dLmFkZGVkVG9CbG9jayA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gcmVtb3ZlIGdhdGUncyB3aXJlcyBmcm9tIHNjYW5cblx0XHRcdFx0XHRcdFx0XHRcdHZhciB2YWxpZEV4dFdpcmVzID0gW107XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIHd3ID0gMDsgd3cgPCBleHRXaXJlcy5sZW5ndGg7IHd3KyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGV4dFcgPSBleHRXaXJlc1t3d107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGV4dEdhdGUud2lyZXMuaW5kZXhPZihleHRXKSA8IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWxpZEV4dFdpcmVzLnB1c2goZXh0Vyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGV4dFdpcmVzID0gdmFsaWRFeHRXaXJlcztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Ly8gZ290byBuZXh0IHZhbGlkIHdpcmVcblx0XHRcdFx0XHRcdFx0aWYoZXh0V2lyZXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG5ld0V4dFdpcmUgPSBleHRXaXJlc1tleHRXaXJlcy5sZW5ndGggLSAxXSArIDE7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciB3dyA9IGV4dFdpcmVzLmxlbmd0aCAtIDE7IHd3ID49IDA7IHd3LS0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBleHRXID0gZXh0V2lyZXNbd3ddO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZXh0VyA+IGV4dFdpcmUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bmV3RXh0V2lyZSA9IGV4dFc7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGV4dFdpcmUgPSBuZXdFeHRXaXJlO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGV4dENvbHVtbisrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHZhciBjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cblx0dmFyIGJsb2NrQ291bnRlciA9IDA7XG5cdGZvcih2YXIgYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBibG9ja3MubGVuZ3RoOyBibG9ja0luZGV4KyspIHtcblx0XHR2YXIgYmxvY2sgPSBibG9ja3NbYmxvY2tJbmRleF07XG5cblx0XHR2YXIgaXNCbG9jayA9IGZhbHNlO1xuXHRcdGlmKGJsb2NrLndpcmVzLmxlbmd0aCA8PSBibG9ja1NpemUgfHwgISFvcHRpb25zLmZsZXhpYmxlQmxvY2tTaXplKSB7XG5cdFx0XHRmb3IodmFyIHggPSAwOyB4IDwgYmxvY2suZ2F0ZXMubGVuZ3RoOyB4KyspIHtcblx0XHRcdFx0dmFyIGdhdGUgPSBibG9jay5nYXRlc1t4XTtcblx0XHRcdFx0dmFyIGdhdGVEZWYgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXTtcblxuXHRcdFx0XHRpZihnYXRlRGVmLm1hdHJpeCAmJiBnYXRlRGVmLm1hdHJpeC5sZW5ndGgpIHtcblx0XHRcdFx0XHRpc0Jsb2NrID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmKGlzQmxvY2spIHtcblx0XHRcdGJsb2NrQ291bnRlcisrO1xuXG5cdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0Zm9yKHZhciB4ID0gMDsgeCA8IGJsb2NrLmdhdGVzLmxlbmd0aDsgeCsrKSB7XG5cdFx0XHRcdHZhciBnYXRlID0gYmxvY2suZ2F0ZXNbeF07XG5cblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbikge1xuXHRcdFx0XHRcdGRlbGV0ZSBnYXRlLm9wdGlvbnMuY29uZGl0aW9uO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVXBkYXRlIGdhdGUgd2lyZXNcblx0XHRcdFx0dmFyIHdpcmVzID0gW107XG5cdFx0XHRcdGdhdGUud2lyZXMubWFwKGZ1bmN0aW9uKHdpcmUpIHtcblx0XHRcdFx0XHR3aXJlcy5wdXNoKGJsb2NrLndpcmVzLmluZGV4T2Yod2lyZSkpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0Z2F0ZS53aXJlcyA9IHdpcmVzO1xuXG5cdFx0XHRcdC8vIGFkZCBnYXRlIHRvIGN1c3RvbSBnYXRlXG5cdFx0XHRcdGN1c3RvbUdhdGUuYXBwZW5kR2F0ZShnYXRlLm5hbWUsIHdpcmVzLCBnYXRlLm9wdGlvbnMpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyByZWdpc3RlciBjdXN0b20gZ2F0ZVxuXHRcdFx0dmFyIGN1c3RvbUdhdGVOYW1lID0gXCJibG9ja1wiICsgYmxvY2tDb3VudGVyO1xuXHRcdFx0Y2lyY3VpdC5yZWdpc3RlckdhdGUoY3VzdG9tR2F0ZU5hbWUsIGN1c3RvbUdhdGUpO1xuXG5cdFx0XHQvLyBhZGQgY3VzdG9tIGdhdGUgdG8gY2lyY3VpdFxuXHRcdFx0dmFyIGN1c3RvbUdhdGVPcHRpb25zID0ge307XG5cdFx0XHRpZihibG9jay5jb25kaXRpb24pIHtcblx0XHRcdFx0Y3VzdG9tR2F0ZU9wdGlvbnMuY29uZGl0aW9uID0gYmxvY2suY29uZGl0aW9uO1xuXHRcdFx0fVxuXHRcdFx0Y2lyY3VpdC5hcHBlbmRHYXRlKGN1c3RvbUdhdGVOYW1lLCBibG9jay53aXJlcywgY3VzdG9tR2F0ZU9wdGlvbnMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyAtLS1cblx0XHRcdC8vIGFkZCBvcmlnaW5hbCBnYXRlIChub24tdW5pdGFyeSBnYXRlcyBbYW5kIGdhdGVzIHdpdGggbW9yZSB0aGFuIGJsb2NrU2l6ZSB3aXJlcyBpZiBhbGxvd0ZsZXhpYmxlQmxvY2tTaXplID0gZmFsc2VdKVxuXHRcdFx0Ly8gLS0tXG5cdFx0XHRibG9jay5nYXRlcy5tYXAoZnVuY3Rpb24oZ2F0ZSkge1xuXHRcdFx0XHRjaXJjdWl0LmFwcGVuZEdhdGUoZ2F0ZS5uYW1lLCBnYXRlLndpcmVzLCBnYXRlLm9wdGlvbnMpO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5sb2FkKGNpcmN1aXQuc2F2ZShmYWxzZSkpO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUudXNlZEdhdGVzID0gZnVuY3Rpb24ob3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgZGVjb21wb3NlZCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRkZWNvbXBvc2VkLmxvYWQodGhpcy5zYXZlKHRydWUpKTtcblx0dmFyIHVzZWQgPSBbXTtcblx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGRlY29tcG9zZWQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRmb3IodmFyIGNvbCA9IDA7IGNvbCA8IGRlY29tcG9zZWQubnVtQ29scygpOyBjb2wrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBkZWNvbXBvc2VkLmdhdGVzW3dpcmVdW2NvbF07XG5cdFx0XHRpZihnYXRlICYmIHVzZWQuaW5kZXhPZihnYXRlLm5hbWUpIDwgMCkge1xuXHRcdFx0XHR2YXIgc2tpcEdhdGUgPSBmYWxzZTtcblxuXHRcdFx0XHRpZihvcHRpb25zLnVuaXRhcmllc09ubHkpIHtcblx0XHRcdFx0XHR2YXIgYmFzaWNHYXRlID0gZGVjb21wb3NlZC5iYXNpY0dhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdFx0aWYoIWJhc2ljR2F0ZSB8fCAhYmFzaWNHYXRlLm1hdHJpeCB8fCAhYmFzaWNHYXRlLm1hdHJpeC5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHNraXBHYXRlID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZighc2tpcEdhdGUpIHtcblx0XHRcdFx0XHR1c2VkLnB1c2goZ2F0ZS5uYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEN1c3RvbSBnYXRlc1xuXHRpZighb3B0aW9ucy5ub0N1c3RvbUdhdGVzKSB7XG5cdFx0Zm9yKHZhciBjdXN0b21HYXRlTmFtZSBpbiB0aGlzLmN1c3RvbUdhdGVzKSB7XG5cdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHRoaXMuY3VzdG9tR2F0ZXNbY3VzdG9tR2F0ZU5hbWVdO1xuXG5cdFx0XHRpZih1c2VkLmluZGV4T2YoY3VzdG9tR2F0ZU5hbWUpIDwgMCkge1xuXHRcdFx0XHR1c2VkLnB1c2goY3VzdG9tR2F0ZU5hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB1c2VkO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuY291bnRPcHMgPSBmdW5jdGlvbihvYmosIG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cdG9wdGlvbnMuc2hhbGxvdyA9IG9wdGlvbnMuc2hhbGxvdyB8fCBmYWxzZTtcblxuXHRpZighb2JqKSB7XG5cdFx0b2JqID0gdGhpcztcblx0fVxuXG5cdHZhciBvcHMgPSB7fTtcblx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IG9iai5nYXRlcy5sZW5ndGg7IHdpcmUrKykge1xuXHRcdGZvcih2YXIgY29sID0gMDsgY29sIDwgb2JqLmdhdGVzW3dpcmVdLmxlbmd0aDsgY29sKyspIHtcblx0XHRcdHZhciBnYXRlID0gb2JqLmdhdGVzW3dpcmVdW2NvbF07XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlLm5hbWVdO1xuXHRcdFx0XHRpZihiYXNpY0dhdGUpIHtcblx0XHRcdFx0XHRpZihvcHNbZ2F0ZS5uYW1lXSkge1xuXHRcdFx0XHRcdFx0b3BzW2dhdGUubmFtZV0rKztcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0b3BzW2dhdGUubmFtZV0gPSAxO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHRoaXMuY3VzdG9tR2F0ZXNbZ2F0ZS5uYW1lXTtcblx0XHRcdFx0XHRpZihjdXN0b21HYXRlKSB7XG5cdFx0XHRcdFx0XHRpZihvcHNbZ2F0ZS5uYW1lXSkge1xuXHRcdFx0XHRcdFx0XHRvcHNbZ2F0ZS5uYW1lXSsrO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0b3BzW2dhdGUubmFtZV0gPSAxO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZighb3B0aW9ucy5zaGFsbG93KSB7XG5cdFx0XHRcdFx0XHRcdHZhciBzdWJPcHMgPSB0aGlzLmNvdW50T3BzKGN1c3RvbUdhdGUsIG9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0XHRmb3Ioc3ViTmFtZSBpbiBzdWJPcHMpIHtcblx0XHRcdFx0XHRcdFx0XHRpZihvcHNbc3ViTmFtZV0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9wc1tzdWJOYW1lXSArPSBzdWJPcHNbc3ViTmFtZV07XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9wc1tzdWJOYW1lXSA9IHN1Yk9wc1tzdWJOYW1lXTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gb3BzO1xufTtcblxuXG4vL1xuLy8gUmV0dXJucyBhcnJheXMgb2YgcXViaXRzIHdoZXJlIGdhdGVzIGFyZSBwcmVzZW50XG4vL1xuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldENvdXBsaW5nTWFwID0gZnVuY3Rpb24ob3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgY291cGxpbmdNYXAgPSBcIlwiO1xuXG5cdHZhciBkZWNvbXBvc2VkID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGRlY29tcG9zZWQubG9hZCh0aGlzLnNhdmUodHJ1ZSkpO1xuXG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBkZWNvbXBvc2VkLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0Zm9yKHZhciBjb2wgPSAwOyBjb2wgPCBkZWNvbXBvc2VkLm51bUNvbHMoKTsgY29sKyspIHtcblx0XHRcdHZhciBnYXRlID0gZGVjb21wb3NlZC5nZXRHYXRlQXQoY29sLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHR2YXIgc2tpcEdhdGUgPSBmYWxzZTtcblxuXHRcdFx0XHRpZihvcHRpb25zLnVuaXRhcmllc09ubHkpIHtcblx0XHRcdFx0XHR2YXIgYmFzaWNHYXRlID0gZGVjb21wb3NlZC5iYXNpY0dhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdFx0aWYoIWJhc2ljR2F0ZSB8fCAhYmFzaWNHYXRlLm1hdHJpeCB8fCAhYmFzaWNHYXRlLm1hdHJpeC5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHNraXBHYXRlID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZighc2tpcEdhdGUpIHtcblx0XHRcdFx0XHR2YXIgd2lyZXNTdHIgPSBKU09OLnN0cmluZ2lmeShnYXRlLndpcmVzKTtcblx0XHRcdFx0XHRpZihjb3VwbGluZ01hcC5pbmRleE9mKHdpcmVzU3RyKSA8IDApIHtcblx0XHRcdFx0XHRcdGlmKGNvdXBsaW5nTWFwKSB7XG5cdFx0XHRcdFx0XHRcdGNvdXBsaW5nTWFwICs9IFwiLFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y291cGxpbmdNYXAgKz0gd2lyZXNTdHI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIEpTT04ucGFyc2UoXCJbXCIgKyBjb3VwbGluZ01hcCArIFwiXVwiKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRHYXRlRGVmID0gZnVuY3Rpb24obmFtZSkge1xuXHR2YXIgZ2F0ZURlZiA9IHRoaXMuYmFzaWNHYXRlc1tuYW1lXTtcblx0aWYoIWdhdGVEZWYpIHtcblx0XHRnYXRlRGVmID0gdGhpcy5jdXN0b21HYXRlc1tuYW1lXTtcblx0fVxuXHRyZXR1cm4gZ2F0ZURlZjtcbn07XG5cbi8vIC0tLVxuLy8gSW1wb3J0IGZyb20gUXViaXQgVG9hc3RlclxuLy8gLS0tXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaW1wb3J0UmF3ID0gZnVuY3Rpb24oZGF0YSwgZXJyb3JDYWxsYmFjaykge1xuXHR2YXIgbnVtUXViaXRzID0gZGF0YSA/IChkYXRhLnF1Yml0cyB8fCAwKSA6IDA7XG5cblx0dGhpcy5pbml0KG51bVF1Yml0cyk7XG5cblx0aWYoIWRhdGEpIHtcblx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRlcnJvckNhbGxiYWNrKFtdKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0fVxuXG5cdC8vIGltcG9ydCBjbGFzc2ljYWwgcmVnaXN0ZXJzXG5cdGlmKGRhdGEuY3JlZ3MpIHtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgZGF0YS5jcmVncy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGNyZWcgPSBkYXRhLmNyZWdzW2ldO1xuXG5cdFx0XHRpZighY3JlZy5uYW1lKSB7XG5cdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkNsYXNzaWNhbCByZWdpc3RlciBcIiArIGkgKyBcIiBkb2Vzbid0IGhhdmUgYSBcXFwibmFtZVxcXCIuXCI7XG5cdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSwgbGluZTogMCwgY29sOiAwIH0gXSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHRoaXMuY3JlYXRlQ3JlZyhjcmVnLm5hbWUsIGNyZWcubGVuIHx8IDApO1xuXHRcdH1cblx0fVxuXG5cdC8vIGltcG9ydCBwcm9ncmFtXG5cdGlmKGRhdGEucHJvZ3JhbSkge1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBkYXRhLnByb2dyYW0ubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBnYXRlID0gZGF0YS5wcm9ncmFtW2ldO1xuXG5cdFx0XHQvLyBJbXBvcnQgZnJvbSBtYXRyaXggaXMgbm90IGltcGxlbWVudGVkIHlldCwgc28gYmVzdCB3ZSBoYXZlIGlzIGdhdGUgbmFtZVxuXHRcdFx0Ly8gQ2hlY2sgaWYgZ2F0ZSBoYXMgbmFtZVxuXHRcdFx0aWYoIWdhdGUubmFtZSkge1xuXHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJHYXRlIFwiICsgaSArIFwiIGRvZXNuJ3QgaGF2ZSBhIFxcXCJuYW1lXFxcIi4gTmFtZSBpcyBvcHRpb25hbCBhbmQgdGhpcyBpcyBPSyBmb3IgUXViaXRUb2FzdGVyIGJ1dCB3ZSBjYW5ub3QgaW1wb3J0IGdhdGUgZnJvbSBtYXRyaXguIE5vdCBpbXBsZW1lbnRlZCB5ZXQuXCI7XG5cdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSwgbGluZTogMCwgY29sOiAwIH0gXSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIGlmIGdhdGUgbmFtZSBleGlzdHMgaW4gdGhpcy5iYXNpY0dhdGVzXG5cdFx0XHR2YXIgYmFzaWNHYXRlID0gdGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRpZighYmFzaWNHYXRlKSB7XG5cdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIlVua25vd24gZ2F0ZSBcXFwiXCIgKyBnYXRlLm5hbWUgKyBcIlxcXCIuIE5hbWUgaXMgb3B0aW9uYWwgYW5kIHRoaXMgaXMgT0sgZm9yIFF1Yml0VG9hc3RlciBidXQgd2UgY2Fubm90IGltcG9ydCBnYXRlIGZyb20gbWF0cml4LiBXZSBjYW4gaW1wb3J0IG9ubHkgZ2F0ZXMgYnkgbmFtZSBmcm9tIHNldCBvZiBrbm93biBnYXRlcy5cIjtcblx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlLCBsaW5lOiAwLCBjb2w6IDAgfSBdKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXG5cdFx0XHR2YXIgd2lyZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdhdGUud2lyZXMgfHwgW10pKTtcblx0XHRcdHZhciBvcHRpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShnYXRlLm9wdGlvbnMgfHwge30pKTtcblxuXHRcdFx0Ly8gY2hlY2sgaWYgbnVtYmVyIG9mIHdpcmVzIGlzIGNvcnJlY3Rcblx0XHRcdHZhciBiYXNpY0dhdGVRdWJpdHMgPSBiYXNpY0dhdGUubWF0cml4ICYmIGJhc2ljR2F0ZS5tYXRyaXgubGVuZ3RoID8gbWF0aC5sb2cyKGJhc2ljR2F0ZS5tYXRyaXgubGVuZ3RoKSA6IDE7XG5cdFx0XHRpZih3aXJlcy5sZW5ndGggIT0gYmFzaWNHYXRlUXViaXRzKSB7XG5cdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkdhdGUgXFxcIlwiICsgZ2F0ZS5uYW1lICsgXCJcXFwiIGhhcyBcIiArIHdpcmVzLmxlbmd0aCArIFwiIHdpcmVzIGJ1dCBzaG91bGQgaGF2ZSBcIiArIGJhc2ljR2F0ZVF1Yml0cyArIFwiIHdpcmVzLlwiO1xuXHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IDAsIGNvbDogMCB9IF0pO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBDaGVjayBpZiBhbGwgcGFyYW1ldGVycyBhcmUgcHJlc2VudFxuXHRcdFx0aWYoYmFzaWNHYXRlLnBhcmFtcyAmJiBiYXNpY0dhdGUucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0XHRpZighb3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJNaXNzaW5nIHBhcmFtZXRlcnMgZm9yIGdhdGUgXFxcIlwiICsgZ2F0ZS5uYW1lICsgXCJcXFwiLiBFeHBlY3RpbmcgXCIgKyBiYXNpY0dhdGUucGFyYW1zLmxlbmd0aCArIFwiIHBhcmFtZXRlcnMuXCI7XG5cdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IDAsIGNvbDogMCB9IF0pO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IodmFyIHAgPSAwOyBwIDwgYmFzaWNHYXRlLnBhcmFtcy5sZW5ndGg7IHArKykge1xuXHRcdFx0XHRcdHZhciBwYXJhbU5hbWUgPSBiYXNpY0dhdGUucGFyYW1zW3BdO1xuXG5cdFx0XHRcdFx0aWYodHlwZW9mIG9wdGlvbnMucGFyYW1zW3BhcmFtTmFtZV0gPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiTWlzc2luZyBwYXJhbWV0ZXIgXFxcIlwiICsgcGFyYW1OYW1lICsgXCJcXFwiIGZvciBnYXRlIFxcXCJcIiArIGdhdGUubmFtZSArIFwiXFxcIi5cIjtcblx0XHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IDAsIGNvbDogMCB9IF0pO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0dGhpcy5hcHBlbmRHYXRlKGdhdGUubmFtZSwgd2lyZXMsIG9wdGlvbnMpO1xuXHRcdH1cblx0fVxuXG5cdC8vIFRoaXMgZXJyb3IgaGFuZGxpbmcgaXMgY3IqcCBidXQgbGV0J3MgYmUgY29uc2lzdGVudCB3aXRoIGltcG9ydFFBU00oKSBmb3Igbm93XG5cdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRlcnJvckNhbGxiYWNrKFtdKTtcblx0fVxufTtcblxuLy8gLS0tXG4vLyBFeHBvcnQgdG8gUXViaXQgVG9hc3RlclxuLy8gLS0tXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0UmF3ID0gZnVuY3Rpb24oKSB7XG5cdHZhciBnbG9iYWxQYXJhbXMgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnBhcmFtcyA/IHRoaXMub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0dmFyIGdsb2JhbFBhcmFtcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ2xvYmFsUGFyYW1zKSk7XG5cdGZvcih2YXIgZ2xvYmFsUGFyYW1OYW1lIGluIGdsb2JhbFBhcmFtcykge1xuXHRcdGdsb2JhbFBhcmFtc1tnbG9iYWxQYXJhbU5hbWVdID0gbWF0aC5ldmFsdWF0ZShnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSk7XG5cdH1cblxuXHR2YXIgZGVjb21wb3NlZCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRkZWNvbXBvc2VkLmxvYWQodGhpcy5zYXZlKHRydWUpKTtcblxuXHR2YXIgbnVtQ29scyA9IGRlY29tcG9zZWQubnVtQ29scygpO1xuXHR2YXIgc2VxdWVuY2UgPSBbXTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBkZWNvbXBvc2VkLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGRlY29tcG9zZWQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0dmFyIGd0ID0gZGVjb21wb3NlZC5iYXNpY0dhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdGlmKCFndCkge1xuXHRcdFx0XHRcdGNvbnNvbGUubG9nKFwiVW5rbm93biBnYXRlIFxcXCJcIiArIGdhdGUubmFtZSArIFwiXFxcIi5cIik7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIHJhd0dhdGUgPSBkZWNvbXBvc2VkLmdldFJhd0dhdGUoZ3QsIGdhdGUub3B0aW9ucyk7XG5cblx0XHRcdFx0dmFyIHJhd01hdHJpeCA9IFtdO1xuXHRcdFx0XHRyYXdHYXRlLm1hcChmdW5jdGlvbihyb3cpIHtcblx0XHRcdFx0XHR2YXIgcmF3Um93ID0gW107XG5cdFx0XHRcdFx0cm93Lm1hcChmdW5jdGlvbihjZWxsKSB7XG5cdFx0XHRcdFx0XHRjZWxsID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjZWxsKSk7XG5cdFx0XHRcdFx0XHRpZih0eXBlb2YgY2VsbCA9PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0XHRcdGlmKGNlbGxbXCJtYXRoanNcIl0gJiYgdHlwZW9mIGNlbGxbXCJtYXRoanNcIl0gPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdFx0XHRcdGNlbGxbXCJ0eXBlXCJdID0gY2VsbFtcIm1hdGhqc1wiXS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBjZWxsLm1hdGhqcztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmF3Um93LnB1c2goY2VsbCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0cmF3TWF0cml4LnB1c2gocmF3Um93KTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0dmFyIG9wdGlvbnMgPSB7fTtcblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zKSB7XG5cdFx0XHRcdFx0b3B0aW9ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ2F0ZS5vcHRpb25zKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihvcHRpb25zLnBhcmFtcykge1xuXHRcdFx0XHRcdGZvcih2YXIgcGFyYW1OYW1lIGluIG9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRvcHRpb25zLnBhcmFtc1twYXJhbU5hbWVdID0gbWF0aC5ldmFsdWF0ZShvcHRpb25zLnBhcmFtc1twYXJhbU5hbWVdLCBnbG9iYWxQYXJhbXMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHNlcXVlbmNlLnB1c2goe1xuXHRcdFx0XHRcdG5hbWU6IGdhdGUubmFtZSxcblx0XHRcdFx0XHRtYXRyaXg6IHJhd01hdHJpeCxcblx0XHRcdFx0XHR3aXJlczogZ2F0ZS53aXJlcyxcblx0XHRcdFx0XHRvcHRpb25zOiBvcHRpb25zXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHZhciBjcmVncyA9IFtdO1xuXHRmb3IodmFyIGNyZWcgaW4gZGVjb21wb3NlZC5jcmVncykge1xuXHRcdGNyZWdzLnB1c2goe1xuXHRcdFx0bmFtZTogY3JlZyxcblx0XHRcdGxlbjogZGVjb21wb3NlZC5jcmVnc1tjcmVnXS5sZW5ndGggfHwgMFxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRxdWJpdHM6IGRlY29tcG9zZWQubnVtUXViaXRzLFxuXHRcdGNyZWdzOiBjcmVncyxcblx0XHRwcm9ncmFtOiBzZXF1ZW5jZVxuXHR9O1xufTtcblxuLy9cbi8vIFJldHVybnMgaW5wdXQgZmlsZSBmb3IgUXVhbnR1bSBHZW5lcmF0b3Jcbi8vXG4vLyBvcHRpb25zOiB7IFxuLy8gICAgIG5vVmVjdG9yczogYm9vbCAoZGVmYXVsdDogZmFsc2UpIC8vIHNldCB0cnVlIGZvciB0cmFuc3BpbGluZyB3aXRoIFwicmVwbGFjZV9ibG9ja3NcIiAmIFwicmVwbGFjZV9nYXRlc1wiIG1ldGhvZHMgdG8gYXZvaWQgZ2VuZXJhdGluZyAobGFyZ2UpIHZlY3RvcnNcbi8vICAgICBmcm9tTWF0cml4OiBib29sIChkZWZhdWx0OiBmYWxzZSkgLy8gZGlyZWN0bHkgc2VuZCBtYXRyaXggdG8gZ2VuZXJhdG9yIChpbnN0ZWFkIHZlY3RvcnMpXG4vLyAgICAgbnVtU2FtcGxlczogaW50IChkZWZhdWx0OiBhdXRvKSAvLyBudW1iZXIgb2YgcmFuZG9tIHZlY3RvcnNcbi8vICAgICB1c2VHYXRlczogYXJyYXkgb2Ygc3RyaW5nIChkZWZhdWx0OiBbXCJ1MywgXCJjeFwiXSkgLy8gZ2F0ZXMgdG8gdXNlIHdoZW4gZ2VuZXJhdGluZyByYW5kb20gdmVjdG9yc1xuLy8gfVxuLy9cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvR2VuZXJhdG9yID0gZnVuY3Rpb24ob3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgcWFzbSA9IHRoaXMuZXhwb3J0UUFTTShudWxsLCBmYWxzZSwgbnVsbCwgZmFsc2UsIHRydWUpO1xuXHR2YXIgdXNlZEdhdGVzID0gdGhpcy51c2VkR2F0ZXMoeyBub0N1c3RvbUdhdGVzOiB0cnVlLCB1bml0YXJpZXNPbmx5OiB0cnVlIH0pO1xuXHR2YXIgY291cGxpbmdNYXAgPSB0aGlzLmdldENvdXBsaW5nTWFwKHsgdW5pdGFyaWVzT25seTogdHJ1ZSB9KTtcblxuXHR2YXIgb3V0cHV0ID0ge1xuXHRcdHNvdXJjZTogeyBcblx0XHRcdGNpcmN1aXQ6IHsgXG5cdFx0XHRcdHFhc206IHFhc21cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0cHJvYmxlbTogW10sXG5cblx0XHR0eXBlOiBcImNpcmN1aXRcIixcblxuXHRcdHNldHRpbmdzOiB7XG5cdFx0XHRhbGxvd2VkX2dhdGVzOiB1c2VkR2F0ZXMuam9pbihcIixcIiksXG5cdFx0XHRjb3VwbGluZ19tYXA6IGNvdXBsaW5nTWFwXG5cdFx0fVxuXHR9O1xuXG5cdHZhciBjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmN1aXQubG9hZCh0aGlzLnNhdmUodHJ1ZSkpO1xuXG5cdGlmKG9wdGlvbnMuZnJvbU1hdHJpeCkge1xuXHRcdHZhciBtYXRyaXggPSBjaXJjdWl0LmNpcmN1aXRNYXRyaXgoKTtcblx0XHR2YXIgdW5pdGFyeSA9IFtdO1xuXG5cdFx0bWF0cml4Lm1hcChmdW5jdGlvbihyb3cpIHtcblx0XHRcdHJvdy5tYXAoZnVuY3Rpb24odmFsdWUpIHtcblx0XHRcdFx0aWYodHlwZW9mIHZhbHVlID09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHR1bml0YXJ5LnB1c2goW3ZhbHVlLnJlLCB2YWx1ZS5pbV0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHVuaXRhcnkucHVzaCh2YWx1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0b3V0cHV0LnByb2JsZW0ucHVzaCh7XG5cdFx0XHR1bml0YXJ5OiB1bml0YXJ5XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0aWYoIW9wdGlvbnMubm9WZWN0b3JzKSB7XG5cdFx0dmFyIHN0YXRlQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXG5cdFx0dmFyIG51bVNhbXBsZXMgPSBvcHRpb25zLm51bVNhbXBsZXMgfHwgKHRoaXMubnVtUXViaXRzIDwgMyA/IDggOiAodGhpcy5udW1RdWJpdHMgPCA1ID8gKCgxIDw8IHRoaXMubnVtUXViaXRzKSArIDEpIDogKHRoaXMubnVtUXViaXRzIDwgOSA/ICh0aGlzLm51bVF1Yml0cyAqIDQpIDogdGhpcy5udW1RdWJpdHMpKSk7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IG51bVNhbXBsZXMgKyAxOyBpKyspIHtcblxuXHRcdFx0dmFyIHNldCA9IHsgaW5wdXQ6IFtdLCBvdXRwdXQ6IFtdIH07XG5cblx0XHRcdHZhciBpbml0aWFsVmVjdG9yID0gW107XG5cblx0XHRcdGlmKGkgPiAwKSB7XG5cdFx0XHRcdHN0YXRlQ2lyY3VpdC5yYW5kb21DaXJjdWl0KHRoaXMubnVtUXViaXRzLCAyMCwgeyB1c2VHYXRlczogb3B0aW9ucy51c2VHYXRlcyB8fCBbXCJ1M1wiLCBcImN4XCJdLCBub0NsYXNzaWNDb250cm9sOiB0cnVlLCBub01lYXN1cmU6IHRydWUsIG5vUmVzZXQ6IHRydWUgfSk7XG5cdFx0XHRcdHN0YXRlQ2lyY3VpdC5ydW4oKTtcblxuXHRcdFx0XHRzdGF0ZUNpcmN1aXQuc3RhdGVBc0FycmF5KCkubWFwKGZ1bmN0aW9uKHN0YXRlKSB7XG5cdFx0XHRcdFx0c2V0LmlucHV0LnB1c2goWyBzdGF0ZS5hbXBsaXR1ZGUucmUsIHN0YXRlLmFtcGxpdHVkZS5pbSBdKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0aW5pdGlhbFZlY3RvciA9IHN0YXRlQ2lyY3VpdC5zdGF0ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNpcmN1aXQuaW5pdFN0YXRlKCk7XG5cblx0XHRcdFx0Y2lyY3VpdC5zdGF0ZUFzQXJyYXkoKS5tYXAoZnVuY3Rpb24oc3RhdGUpIHtcblx0XHRcdFx0XHRzZXQuaW5wdXQucHVzaChbIHN0YXRlLmFtcGxpdHVkZS5yZSwgc3RhdGUuYW1wbGl0dWRlLmltIF0pO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpbml0aWFsVmVjdG9yID0gY2lyY3VpdC5zdGF0ZTtcblx0XHRcdH1cblxuXHRcdFx0Y2lyY3VpdC5ydW4obnVsbCwgeyBpbml0aWFsU3RhdGU6IGluaXRpYWxWZWN0b3IgfSk7XG5cblx0XHRcdGNpcmN1aXQuc3RhdGVBc0FycmF5KCkubWFwKGZ1bmN0aW9uKHN0YXRlKSB7XG5cdFx0XHRcdHNldC5vdXRwdXQucHVzaChbIHN0YXRlLmFtcGxpdHVkZS5yZSwgc3RhdGUuYW1wbGl0dWRlLmltIF0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdG91dHB1dC5wcm9ibGVtLnB1c2goc2V0KTtcblx0XHR9XG5cdFx0cmV0dXJuIG91dHB1dDtcblx0fVxuXG5cdHJldHVybiBvdXRwdXQ7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5zYXZlID0gZnVuY3Rpb24oZGVjb21wb3NlLCBsaWdodHdlaWdodCkge1xuXHR0aGlzLnVwZGF0ZUdsb2JhbFBhcmFtcygpO1xuXG5cdHZhciBkYXRhID0ge1xuXHRcdG51bVF1Yml0czogdGhpcy5udW1RdWJpdHMsXG5cdFx0cGFyYW1zOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMucGFyYW1zKSksXG5cdFx0b3B0aW9uczogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLm9wdGlvbnMpKSxcblx0XHRnYXRlczogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmdhdGVzKSksXG5cdFx0Y3VzdG9tR2F0ZXM6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jdXN0b21HYXRlcykpLFxuXHRcdGNyZWdzOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY3JlZ3MpKVxuXHR9XG5cblx0dmFyIHJlcyA9IG51bGw7XG5cdGlmKGRlY29tcG9zZSkge1xuXHRcdHJlcyA9IHRoaXMuZGVjb21wb3NlKGRhdGEpO1xuXHR9IGVsc2Uge1xuXHRcdHJlcyA9IGRhdGE7XG5cdH1cblxuXHQvLyAtLS1cblx0Ly8gcmVtb3ZlIElkIGZyb20gZ2F0ZXM/XG5cdC8vIC0tLVxuXHRpZihsaWdodHdlaWdodCkge1xuXHRcdGlmKHJlcy5nYXRlcykge1xuXHRcdFx0cmVzLmdhdGVzLm1hcChmdW5jdGlvbihyb3cpIHtcblx0XHRcdFx0aWYocm93KSB7XG5cdFx0XHRcdFx0cm93Lm1hcChmdW5jdGlvbihjZWxsKSB7XG5cdFx0XHRcdFx0XHRpZihjZWxsICYmIGNlbGwuaWQpIHtcblx0XHRcdFx0XHRcdFx0ZGVsZXRlIGNlbGwuaWQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGlmKHJlcy5jdXN0b21HYXRlcykge1xuXHRcdFx0Zm9yKHZhciBjdXN0b21HYXRlTmFtZSBpbiByZXMuY3VzdG9tR2F0ZXMpIHtcblx0XHRcdFx0dmFyIGN1c3RvbUdhdGUgPSByZXMuY3VzdG9tR2F0ZXNbY3VzdG9tR2F0ZU5hbWVdO1xuXHRcdFx0XHRpZihjdXN0b21HYXRlICYmIGN1c3RvbUdhdGUuZ2F0ZXMpIHtcblx0XHRcdFx0XHRjdXN0b21HYXRlLmdhdGVzLm1hcChmdW5jdGlvbihyb3cpIHtcblx0XHRcdFx0XHRcdGlmKHJvdykge1xuXHRcdFx0XHRcdFx0XHRyb3cubWFwKGZ1bmN0aW9uKGNlbGwpIHtcblx0XHRcdFx0XHRcdFx0XHRpZihjZWxsICYmIGNlbGwuaWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBjZWxsLmlkO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Ly8gLS0tXG5cblx0cmV0dXJuIHJlcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5sb2FkID0gZnVuY3Rpb24ob2JqKSB7XG5cdHRoaXMubnVtUXViaXRzID0gb2JqLm51bVF1Yml0cyB8fCAxO1xuXHR0aGlzLmNsZWFyKCk7XG5cdHRoaXMucGFyYW1zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmoucGFyYW1zIHx8IFtdKSk7XG5cdHRoaXMub3B0aW9ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqLm9wdGlvbnMgfHwge30pKTtcblx0dGhpcy5nYXRlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqLmdhdGVzIHx8IFtdKSk7XG5cdHRoaXMuY3VzdG9tR2F0ZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iai5jdXN0b21HYXRlcyB8fCB7fSkpO1xuXHR0aGlzLmNyZWdzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmouY3JlZ3MgfHwge30pKTtcblx0Ly8gZGVmYXVsdCBvcHRpb25zXG5cdHRoaXMub3B0aW9ucy5wYXJhbXMgPSB0aGlzLm9wdGlvbnMucGFyYW1zIHx8IHt9O1xuXHR0aGlzLm9wdGlvbnMuaHlicmlkID0gdGhpcy5vcHRpb25zLmh5YnJpZCB8fCBmYWxzZTtcblx0aWYoIXRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zKSB7XG5cdFx0dGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgPSB0aGlzLmRlZmF1bHRIeWJyaWRPcHRpb25zKCk7XG5cdH1cbn07XG5cblxudmFyIGdlbmVyYXRlR3JheUNvZGUgPSBmdW5jdGlvbihudW1CaXRzKSB7XG5cdGlmKG51bUJpdHMgPD0gMCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBnZW5lcmF0ZSB0aGUgZ3JheSBjb2RlIGZvciBsZXNzIHRoYW4gMSBiaXQuXCIpO1xuXHR9XG5cblx0dmFyIHJlc3VsdCA9IFswXTtcblx0Zm9yKGkgPSAwOyBpIDwgbnVtQml0czsgaSsrKSB7XG5cdFx0dmFyIHJldmVyc2VkID0gW10uY29uY2F0KHJlc3VsdCkucmV2ZXJzZSgpO1xuXHRcdHJldmVyc2VkLm1hcChmdW5jdGlvbih4KSB7XG5cdFx0XHRyZXN1bHQucHVzaCh4ICsgbWF0aC5wb3coMiwgaSkpO1xuXHRcdH0pO1xuXHR9XG5cblx0dmFyIGdyYXkgPSBbXTtcblx0cmVzdWx0Lm1hcChmdW5jdGlvbihkZWMpIHtcblx0XHRncmF5LnB1c2goYmluU3RyKGRlYywgbnVtQml0cykpO1xuXHR9KTtcblxuXHRyZXR1cm4gZ3JheTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdyYXlDb2RlQ2hhaW4gPSBmdW5jdGlvbihudW1DdHJsUXViaXRzLCBnYXRlTmFtZSwgZ2F0ZU9wdGlvbnMpIHtcblxuXHRmdW5jdGlvbiBjb21wYXJlU3RyaW5ncyhzMSwgczIpIHtcblx0XHR2YXIgY29tcCA9IFtdO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBzMS5sZW5ndGg7IGkrKykge1xuXHRcdFx0Y29tcC5wdXNoKHMxW2ldICE9IHMyW2ldKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbXA7XG5cdH1cblxuXHRmdW5jdGlvbiBpbmRpY2VzT2ZDaGFyKHMsIGNoKSB7XG5cdFx0dmFyIGluZGljZXMgPSBbXTtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYoc1tpXSA9PSBjaCkge1xuXHRcdFx0XHRpbmRpY2VzLnB1c2goaSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBpbmRpY2VzO1xuXHR9XG5cblx0ZnVuY3Rpb24gY291bnRDaGFyKHMsIGNoKSB7XG5cdFx0dmFyIGNvdW50ID0gMDtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYoc1tpXSA9PSBjaCkge1xuXHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY291bnQ7XG5cdH1cblxuXHR2YXIgcUNvbnRyb2xzID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBudW1DdHJsUXViaXRzOyBpKyspIHtcblx0XHRxQ29udHJvbHMucHVzaChpKTtcblx0fVxuXG5cdHZhciBxVGFyZ2V0ID0gbnVtQ3RybFF1Yml0cztcblx0dmFyIGdyYXlDb2RlID0gZ2VuZXJhdGVHcmF5Q29kZShudW1DdHJsUXViaXRzKTtcblx0dmFyIGxhc3RQYXR0ZXJuID0gbnVsbDtcblxuXHR2YXIgcnVsZXMgPSBbXTtcblx0Z3JheUNvZGUubWFwKGZ1bmN0aW9uKHBhdHRlcm4pIHtcblx0XHR2YXIgbG1Qb3MgPSBwYXR0ZXJuLmluZGV4T2YoXCIxXCIpO1xuXHRcdGlmKGxtUG9zID49IDApIHtcblx0XHRcdGlmKCFsYXN0UGF0dGVybikge1xuXHRcdFx0XHRsYXN0UGF0dGVybiA9IHBhdHRlcm47XG5cdFx0XHR9XG5cblx0XHRcdHZhciBjb21wID0gY29tcGFyZVN0cmluZ3MocGF0dGVybiwgbGFzdFBhdHRlcm4pO1xuXHRcdFx0dmFyIHBvcyA9IGNvbXAuaW5kZXhPZih0cnVlKTtcblx0XHRcdGlmKHBvcyA+PSAwKSB7XG5cdFx0XHRcdGlmKHBvcyAhPSBsbVBvcykge1xuXHRcdFx0XHRcdHJ1bGVzLnB1c2goeyBnYXRlTmFtZTogXCJjeFwiLCB3aXJlczogWyBxQ29udHJvbHNbcG9zXSwgcUNvbnRyb2xzW2xtUG9zXSBdLCBvcHRpb25zOiBudWxsIH0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhciBpbmRpY2VzID0gaW5kaWNlc09mQ2hhcihwYXR0ZXJuLCBcIjFcIik7XG5cdFx0XHRcdFx0Zm9yKHZhciBpZHggPSAxOyBpZHggPCBpbmRpY2VzLmxlbmd0aDsgaWR4KyspIHtcblx0XHRcdFx0XHRcdHJ1bGVzLnB1c2goeyBnYXRlTmFtZTogXCJjeFwiLCB3aXJlczogWyBxQ29udHJvbHNbaW5kaWNlc1tpZHhdXSwgcUNvbnRyb2xzW2xtUG9zXSBdLCBvcHRpb25zOiBudWxsIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZighKGNvdW50Q2hhcihwYXR0ZXJuLCBcIjFcIikgJSAyKSkge1xuXHRcdFx0XHQvLyBpbnZlcnNlXG5cdFx0XHRcdC8vICEhIVxuXHRcdFx0XHQvLyBXYXJuaW5nIC0gdGhpcyB3b3JrcyBvbmx5IHdpdGggZ2F0ZSB3aGljaCBpcyBvd24gaW52ZXJzZVxuXHRcdFx0XHQvLyBUT0RPOiBpbXBsZW1lbnQgcHJvcGVyIGludmVyc2UgZm9yIGFsbCBnYXRlc1xuXHRcdFx0XHQvLyAhISFcblx0XHRcdFx0dmFyIGludmVyc2VPcHRpb25zID0gbnVsbDtcblx0XHRcdFx0aWYoZ2F0ZU9wdGlvbnMpIHtcblx0XHRcdFx0XHRpbnZlcnNlT3B0aW9ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ2F0ZU9wdGlvbnMpKTtcblx0XHRcdFx0XHRpZihpbnZlcnNlT3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdGZvcihrZXkgaW4gaW52ZXJzZU9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB2YWwgPSBpbnZlcnNlT3B0aW9ucy5wYXJhbXNba2V5XTtcblx0XHRcdFx0XHRcdFx0aWYodHlwZW9mIHZhbCA9PSBcIm51bWJlclwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFsID0gMCAtIHZhbDtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR2YWwgPSBcIi0oXCIgKyB2YWwgKyBcIilcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpbnZlcnNlT3B0aW9ucy5wYXJhbXNba2V5XSA9IHZhbDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cnVsZXMucHVzaCh7IGdhdGVOYW1lOiBnYXRlTmFtZSwgd2lyZXM6IFsgcUNvbnRyb2xzW2xtUG9zXSwgcVRhcmdldCBdLCBvcHRpb25zOiBpbnZlcnNlT3B0aW9ucyB9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJ1bGVzLnB1c2goeyBnYXRlTmFtZTogZ2F0ZU5hbWUsIHdpcmVzOiBbIHFDb250cm9sc1tsbVBvc10sIHFUYXJnZXQgXSwgb3B0aW9uczogZ2F0ZU9wdGlvbnMgfSk7XG5cdFx0XHR9XG5cdFx0XHRsYXN0UGF0dGVybiA9IHBhdHRlcm47XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gcnVsZXM7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5NQ1UxQ2lyY3VpdCA9IGZ1bmN0aW9uKGN0cmxRdWJpdHMpIHtcblx0dmFyIG51bUN0cmxRdWJpdHMgPSAwO1xuXHR2YXIgaW52ZXJ0Q29udHJvbHMgPSBbXTtcblx0aWYodHlwZW9mIGN0cmxRdWJpdHMgPT0gXCJudW1iZXJcIikge1xuXHRcdG51bUN0cmxRdWJpdHMgPSBjdHJsUXViaXRzO1xuXHR9IGVsc2Uge1xuXHRcdG51bUN0cmxRdWJpdHMgPSBjdHJsUXViaXRzLmxlbmd0aCB8fCAwO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBudW1DdHJsUXViaXRzOyBpKyspIHtcblx0XHRcdGlmKCFjdHJsUXViaXRzW2ldIHx8ICh0eXBlb2YgY3RybFF1Yml0c1tpXSA9PSBcIm51bWJlclwiICYmIGN0cmxRdWJpdHNbaV0gPCAwKSkge1xuXHRcdFx0XHRpbnZlcnRDb250cm9scy5wdXNoKGkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKG51bUN0cmxRdWJpdHMgPT0gMCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjcmVhdGUgbXVsdGktY29udHJvbGxlZCBnYXRlIHdpdGggemVybyBjb250cm9sIHF1Yml0cy5cIik7XG5cdH1cblxuXHRmdW5jdGlvbiBhZGRYKGNpcmN1aXQsIHdpcmVzKSB7XG5cdFx0d2lyZXMubWFwKGZ1bmN0aW9uKHdpcmUpIHtcblx0XHRcdGNpcmN1aXQuYXBwZW5kR2F0ZShcInhcIiwgd2lyZSk7XG5cdFx0fSk7XG5cdH1cblxuXHR2YXIgc2NhbGVkTGFtYmRhID0gXCJsYW1iZGEgLyBcIiArIG1hdGgucG93KDIsIG51bUN0cmxRdWJpdHMgLSAxKTtcblx0dmFyIGdhdGVPcHRpb25zID0geyBwYXJhbXM6IHsgbGFtYmRhOiBzY2FsZWRMYW1iZGEgfSB9O1xuXG5cdHZhciBxYyA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXG5cdGlmKG51bUN0cmxRdWJpdHMgPT0gMSkge1xuXHRcdGFkZFgocWMsIGludmVydENvbnRyb2xzKTtcblx0XHRxYy5hcHBlbmRHYXRlKFwiY3UxXCIsIFswLCAxXSwgZ2F0ZU9wdGlvbnMpO1xuXHRcdGFkZFgocWMsIGludmVydENvbnRyb2xzKTtcblx0XHRyZXR1cm4gcWM7XG5cdH1cblxuXHRhZGRYKHFjLCBpbnZlcnRDb250cm9scyk7XG5cdHZhciBydWxlcyA9IHRoaXMuZ3JheUNvZGVDaGFpbihudW1DdHJsUXViaXRzLCBcImN1MVwiLCBnYXRlT3B0aW9ucyk7XG5cdHJ1bGVzLm1hcChmdW5jdGlvbihydWxlKSB7XG5cdFx0cWMuYXBwZW5kR2F0ZShydWxlLmdhdGVOYW1lLCBydWxlLndpcmVzLCBydWxlLm9wdGlvbnMpO1xuXHR9KTtcblx0YWRkWChxYywgaW52ZXJ0Q29udHJvbHMpO1xuXG5cdHJldHVybiBxYztcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLk1DWENpcmN1aXQgPSBmdW5jdGlvbihjdHJsUXViaXRzKSB7XG5cdHZhciBudW1DdHJsUXViaXRzID0gMDtcblx0dmFyIGludmVydENvbnRyb2xzID0gW107XG5cdGlmKHR5cGVvZiBjdHJsUXViaXRzID09IFwibnVtYmVyXCIpIHtcblx0XHRudW1DdHJsUXViaXRzID0gY3RybFF1Yml0cztcblx0fSBlbHNlIHtcblx0XHRudW1DdHJsUXViaXRzID0gY3RybFF1Yml0cy5sZW5ndGggfHwgMDtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgbnVtQ3RybFF1Yml0czsgaSsrKSB7XG5cdFx0XHRpZighY3RybFF1Yml0c1tpXSB8fCAodHlwZW9mIGN0cmxRdWJpdHNbaV0gPT0gXCJudW1iZXJcIiAmJiBjdHJsUXViaXRzW2ldIDwgMCkpIHtcblx0XHRcdFx0aW52ZXJ0Q29udHJvbHMucHVzaChpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR2YXIgcWMgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0aWYobnVtQ3RybFF1Yml0cyA9PSAwKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNyZWF0ZSBtdWx0aS1jb250cm9sbGVkIGdhdGUgd2l0aCB6ZXJvIGNvbnRyb2wgcXViaXRzLlwiKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFkZFgoY2lyY3VpdCwgd2lyZXMpIHtcblx0XHR3aXJlcy5tYXAoZnVuY3Rpb24od2lyZSkge1xuXHRcdFx0Y2lyY3VpdC5hcHBlbmRHYXRlKFwieFwiLCB3aXJlKTtcblx0XHR9KTtcblx0fVxuXG5cdGlmKG51bUN0cmxRdWJpdHMgPT0gMSkge1xuXHRcdGFkZFgocWMsIGludmVydENvbnRyb2xzKTtcblx0XHRxYy5hcHBlbmRHYXRlKFwiY3hcIiwgWzAsIDFdKTtcblx0XHRhZGRYKHFjLCBpbnZlcnRDb250cm9scyk7XG5cdFx0cmV0dXJuIHFjO1xuXHR9XG5cblx0aWYobnVtQ3RybFF1Yml0cyA9PSAyKSB7XG5cdFx0YWRkWChxYywgaW52ZXJ0Q29udHJvbHMpO1xuXHRcdHFjLmFwcGVuZEdhdGUoXCJjY3hcIiwgWzAsIDEsIDJdKTtcblx0XHRhZGRYKHFjLCBpbnZlcnRDb250cm9scyk7XG5cdFx0cmV0dXJuIHFjO1xuXHR9XG5cblx0dmFyIG1jdTEgPSBxYy5NQ1UxQ2lyY3VpdChudW1DdHJsUXViaXRzKTtcblx0dmFyIG1jdTFuYW1lID0gXCJtY3UxX1wiICsgbnVtQ3RybFF1Yml0cztcblx0dmFyIG1jdTF3aXJlcyA9IFtdO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgbnVtQ3RybFF1Yml0cyArIDE7IGkrKykge1xuXHRcdG1jdTF3aXJlcy5wdXNoKGkpO1xuXHR9XG5cblx0cWMucmVnaXN0ZXJHYXRlKG1jdTFuYW1lLCBtY3UxKTtcblx0YWRkWChxYywgaW52ZXJ0Q29udHJvbHMpO1xuXHRxYy5hcHBlbmRHYXRlKFwiaFwiLCBudW1DdHJsUXViaXRzKTtcblx0cWMuYXBwZW5kR2F0ZShtY3UxbmFtZSwgbWN1MXdpcmVzLCB7IHBhcmFtczogeyBsYW1iZGE6IFwicGlcIiB9fSk7XG5cdGFkZFgocWMsIGludmVydENvbnRyb2xzKTtcblx0cWMuYXBwZW5kR2F0ZShcImhcIiwgbnVtQ3RybFF1Yml0cyk7XG5cblx0cmV0dXJuIHFjO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVnaXN0ZXJHYXRlID0gZnVuY3Rpb24obmFtZSwgb2JqKSB7XG5cdGlmKG9iaiBpbnN0YW5jZW9mIFF1YW50dW1DaXJjdWl0KSB7XG5cdFx0dGhpcy5jdXN0b21HYXRlc1tuYW1lXSA9IG9iai5zYXZlKCk7XG5cdH0gZWxzZSB7XG5cdFx0dGhpcy5jdXN0b21HYXRlc1tuYW1lXSA9IG9iajtcblx0fVxuXG5cdGlmKHRoaXMuaXNNdWx0aUNvbnRyb2xsZWRHYXRlKG5hbWUpKSB7XG5cdFx0dmFyIG1jSW5mbyA9IHRoaXMuZGVjb2RlTXVsdGlDb250cm9sbGVkR2F0ZU5hbWUobmFtZSk7XG5cdFx0aWYobWNJbmZvLm51bUN0cmxRdWJpdHMgIT0gdGhpcy5jdXN0b21HYXRlc1tuYW1lXS5udW1RdWJpdHMgLSAxKSB7XG5cdFx0XHRtY0luZm8ubnVtQ3RybFF1Yml0cyA9IHRoaXMuY3VzdG9tR2F0ZXNbbmFtZV0ubnVtUXViaXRzIC0gMTtcblx0XHRcdHZhciBjdHJsUXViaXRzID0gW107XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgbWNJbmZvLm51bUN0cmxRdWJpdHM7IGkrKykge1xuXHRcdFx0XHRjdHJsUXViaXRzLnB1c2godHlwZW9mIG1jSW5mby5jdHJsUXViaXRzW2ldID09IFwidW5kZWZpbmVkXCIgPyB0cnVlIDogbWNJbmZvLmN0cmxRdWJpdHNbaV0pO1xuXHRcdFx0fVxuXHRcdFx0bWNJbmZvLmN0cmxRdWJpdHMgPSBjdHJsUXViaXRzO1xuXHRcdH1cblxuXHRcdHZhciByb290R2F0ZSA9IHRoaXMuYmFzaWNHYXRlc1ttY0luZm8ucm9vdE5hbWVdO1xuXHRcdGlmKHJvb3RHYXRlICYmIHJvb3RHYXRlLmRyYXdpbmdJbmZvICYmIHJvb3RHYXRlLmRyYXdpbmdJbmZvLmNvbm5lY3RvcnMpIHtcblx0XHRcdGlmKCF0aGlzLmN1c3RvbUdhdGVzW25hbWVdLmRyYXdpbmdJbmZvKSB7XG5cdFx0XHRcdHRoaXMuY3VzdG9tR2F0ZXNbbmFtZV0uZHJhd2luZ0luZm8gPSB7fTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGNvbm5lY3RvcnMgPSBbXTtcblx0XHRcdG1jSW5mby5jdHJsUXViaXRzLm1hcChmdW5jdGlvbihjdHJsUXViaXQpIHtcblx0XHRcdFx0aWYoY3RybFF1Yml0KSB7XG5cdFx0XHRcdFx0Y29ubmVjdG9ycy5wdXNoKFwiZG90XCIpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbm5lY3RvcnMucHVzaChcIm5kb3RcIik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29ubmVjdG9ycy5wdXNoKHJvb3RHYXRlLmRyYXdpbmdJbmZvLmNvbm5lY3RvcnNbcm9vdEdhdGUuZHJhd2luZ0luZm8uY29ubmVjdG9ycy5sZW5ndGggLSAxXSk7XG5cblx0XHRcdHRoaXMuY3VzdG9tR2F0ZXNbbmFtZV0uZHJhd2luZ0luZm8uY29ubmVjdG9ycyA9IGNvbm5lY3RvcnM7XG5cdFx0XHR0aGlzLmN1c3RvbUdhdGVzW25hbWVdLmRyYXdpbmdJbmZvLnJvb3QgPSByb290R2F0ZS5kcmF3aW5nSW5mby5yb290O1xuXHRcdH1cblx0fVxufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVnaXN0ZXJNQ1hHYXRlID0gZnVuY3Rpb24oY3RybFF1Yml0cykge1xuXHR2YXIgZ2F0ZU5hbWUgPSB0aGlzLm11bHRpQ29udHJvbGxlZEdhdGVOYW1lKFwibWN4XCIsIGN0cmxRdWJpdHMpO1xuXHR0aGlzLnJlZ2lzdGVyR2F0ZShnYXRlTmFtZSwgdGhpcy5NQ1hDaXJjdWl0KGN0cmxRdWJpdHMpLnNhdmUodHJ1ZSkpO1xuXHRyZXR1cm4gZ2F0ZU5hbWU7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yZWdpc3Rlck1DVTFHYXRlID0gZnVuY3Rpb24oY3RybFF1Yml0cykge1xuXHR2YXIgZ2F0ZU5hbWUgPSB0aGlzLm11bHRpQ29udHJvbGxlZEdhdGVOYW1lKFwibWN1MVwiLCBjdHJsUXViaXRzKTtcblx0dGhpcy5yZWdpc3RlckdhdGUoZ2F0ZU5hbWUsIHRoaXMuTUNVMUNpcmN1aXQoY3RybFF1Yml0cykuc2F2ZSh0cnVlKSk7XG5cdHJldHVybiBnYXRlTmFtZTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlZ2lzdGVyTXVsdGlDb250cm9sbGVkR2F0ZSA9IGZ1bmN0aW9uKHJvb3ROYW1lLCBjdHJsUXViaXRzKSB7XG5cdHN3aXRjaChyb290TmFtZSkge1xuXHRcdGNhc2UgXCJjeFwiOiByZXR1cm4gdGhpcy5yZWdpc3Rlck1DWEdhdGUoY3RybFF1Yml0cyk7IGJyZWFrO1xuXHRcdGNhc2UgXCJjdTFcIjogcmV0dXJuIHRoaXMucmVnaXN0ZXJNQ1UxR2F0ZShjdHJsUXViaXRzKTsgYnJlYWs7XG5cdH1cblxuXHRyZXR1cm4gXCJcIjtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRPclJlZ2lzdGVyTXVsdGlDb250cm9sbGVkRXF1aXZhbGVudCA9IGZ1bmN0aW9uKGdhdGVOYW1lLCBpbnZlcnNlQ29udHJvbCkge1xuXHR2YXIgZ2F0ZURlZiA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV07XG5cdGlmKGdhdGVEZWYpIHtcblx0XHRpZihnYXRlRGVmLmRyYXdpbmdJbmZvKSB7XG5cdFx0XHQvLyBCYXNpYyBnYXRlIHdpdGggbXVsdGktY29udHJvbGxlZC9pbnZlcnNlIGNvbnRyb2xsZWQgaW1wbGVtZW50YXRpb25cblx0XHRcdGlmKGdhdGVOYW1lID09IFwieFwiIHx8IGdhdGVOYW1lID09IFwidTFcIiB8fCBnYXRlRGVmLmRyYXdpbmdJbmZvLnJvb3QgPT0gXCJ4XCIgfHwgZ2F0ZURlZi5kcmF3aW5nSW5mby5yb290ID09IFwidTFcIikge1xuXHRcdFx0XHRpZighdGhpcy5iYXNpY0dhdGVzW1wiY1wiICsgZ2F0ZU5hbWVdIHx8IGludmVyc2VDb250cm9sKSB7XG5cdFx0XHRcdFx0Ly8gY3JlYXRlIG11bHRpIGNvbnRyb2xsZWQgdmVyc2lvbiBhbmQgcmV0dXJuIGl0cyBuYW1lXG5cdFx0XHRcdFx0dmFyIHJvb3ROYW1lID0gXCJjXCIgKyAoZ2F0ZURlZi5kcmF3aW5nSW5mby5yb290IHx8IGdhdGVOYW1lKTtcblx0XHRcdFx0XHR2YXIgbnVtQ3RybFF1Yml0cyA9IG1hdGgubG9nMihnYXRlRGVmLm1hdHJpeC5sZW5ndGgpO1xuXHRcdFx0XHRcdHZhciBjdHJsUXViaXRzID0gW107XG5cdFx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IG51bUN0cmxRdWJpdHMgLSAxOyBpKyspIHtcblx0XHRcdFx0XHRcdGN0cmxRdWJpdHMucHVzaCh0cnVlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y3RybFF1Yml0cy51bnNoaWZ0KCFpbnZlcnNlQ29udHJvbCk7XG5cblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZWdpc3Rlck11bHRpQ29udHJvbGxlZEdhdGUocm9vdE5hbWUsIGN0cmxRdWJpdHMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHRoZXJlIGlzIGJhc2ljIGdhdGUgd2l0aCBhZGRpdGlvbmFsIGNvbnRyb2xcblx0XHRcdFx0XHRyZXR1cm4gXCJjXCIgKyBnYXRlTmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEJhc2ljIGdhdGUgZm9yIHdoaWNoIHdlIGRvbid0IGhhdmUgbXVsdGktY29udHJvbGxlZCBvciBpbnZlcnNlIGNvbnRyb2xsZWQgaW1wbGVtZW50YXRpb25cblx0XHQvLyBidXQgbWF5YmUgd2UgaGF2ZSBiYXNpYyBnYXRlIHdpdGggYWRkaXRpb25hbCBjb250cm9sXG5cdFx0Zm9yKHZhciBnbiBpbiB0aGlzLmJhc2ljR2F0ZXMpIHtcblx0XHRcdHZhciB0bXBHYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2duXTtcblx0XHRcdGlmKHRtcEdhdGVEZWYgJiYgdG1wR2F0ZURlZi5kcmF3aW5nSW5mbyAmJiB0bXBHYXRlRGVmLmRyYXdpbmdJbmZvLnJvb3QgJiYgdG1wR2F0ZURlZi5kcmF3aW5nSW5mby5yb290ID09IGdhdGVOYW1lKSB7XG5cdFx0XHRcdGlmKCFpbnZlcnNlQ29udHJvbCkge1xuXHRcdFx0XHRcdC8vIHRoZXJlIGlzIGJhc2ljIGdhdGUgd2l0aCBhZGRpdGlvbmFsIGNvbnRyb2xcblx0XHRcdFx0XHRyZXR1cm4gZ247XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRpZih0aGlzLmN1c3RvbUdhdGVzW2dhdGVOYW1lXSkge1xuXHRcdHZhciBtY0luZm8gPSB0aGlzLmRlY29kZU11bHRpQ29udHJvbGxlZEdhdGVOYW1lKGdhdGVOYW1lKTtcblx0XHRpZighbWNJbmZvIHx8ICFtY0luZm8ubnVtQ3RybFF1Yml0cykge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0aWYobWNJbmZvLnJvb3ROYW1lID09IFwiY3hcIiB8fCBtY0luZm8ucm9vdE5hbWUgPT0gXCJjdTFcIikge1xuXHRcdFx0Ly8gY3JlYXRlIG11bHRpIGNvbnRyb2xsZWQgdmVyc2lvbiBhbmQgcmV0dXJuIGl0cyBuYW1lXG5cdFx0XHRtY0luZm8uY3RybFF1Yml0cy51bnNoaWZ0KCFpbnZlcnNlQ29udHJvbCk7XG5cdFx0XHRyZXR1cm4gdGhpcy5yZWdpc3Rlck11bHRpQ29udHJvbGxlZEdhdGUobWNJbmZvLnJvb3ROYW1lLCBtY0luZm8uY3RybFF1Yml0cyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlbW92ZVVudXNlZE11bHRpQ29udHJvbGxlZEdhdGVzID0gZnVuY3Rpb24oKSB7XG5cdHZhciBvcHMgPSB0aGlzLmNvdW50T3BzKG51bGwsIHsgc2hhbGxvdzogZmFsc2UgfSk7XG5cblx0Zm9yKGdhdGVOYW1lIGluIHRoaXMuY3VzdG9tR2F0ZXMpIHtcblx0XHRpZighb3BzW2dhdGVOYW1lXSkge1xuXHRcdFx0aWYodGhpcy5pc011bHRpQ29udHJvbGxlZEdhdGUoZ2F0ZU5hbWUpKSB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLmN1c3RvbUdhdGVzW2dhdGVOYW1lXTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmRlY29kZU11bHRpQ29udHJvbGxlZEdhdGVOYW1lID0gZnVuY3Rpb24oZ2F0ZU5hbWUpIHtcblx0aWYoIWdhdGVOYW1lKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHR2YXIgbWNJbmZvID0ge307XG5cdHZhciBzcGxpdHRlZCA9IGdhdGVOYW1lLnNwbGl0KFwiX1wiKTtcblxuXHQvLyBuYW1lXG5cdGlmKHNwbGl0dGVkLmxlbmd0aCA+IDApIHtcblx0XHRtY0luZm8ubmFtZSA9IHNwbGl0dGVkWzBdO1xuXHRcdG1jSW5mby5yb290TmFtZSA9IG1jSW5mby5uYW1lLnN1YnN0cmluZygxKTtcblx0fVxuXG5cdC8vIG51bUN0cmxRdWJpdHNcblx0aWYoc3BsaXR0ZWQubGVuZ3RoID4gMSkge1xuXHRcdHZhciBudW1DdHJsUXViaXRzID0gcGFyc2VJbnQoc3BsaXR0ZWRbMV0pO1xuXHRcdGlmKCFpc05hTihudW1DdHJsUXViaXRzKSkge1xuXHRcdFx0bWNJbmZvLm51bUN0cmxRdWJpdHMgPSBudW1DdHJsUXViaXRzO1xuXHRcdH1cblx0fVxuXG5cdC8vIGN0cmxRdWJpdHNcblx0aWYobWNJbmZvLm51bUN0cmxRdWJpdHMpIHtcblx0XHR2YXIgY3RybFF1Yml0cyA9IFtdO1xuXHRcdGlmKHNwbGl0dGVkLmxlbmd0aCA+IDIpIHtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBzcGxpdHRlZFsyXS5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZihzcGxpdHRlZFsyXVtpXSA9PSBcIjBcIikge1xuXHRcdFx0XHRcdGN0cmxRdWJpdHMucHVzaChmYWxzZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoc3BsaXR0ZWRbMl1baV0gPT0gXCIxXCIpIHtcblx0XHRcdFx0XHRjdHJsUXViaXRzLnB1c2godHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZighY3RybFF1Yml0cy5sZW5ndGgpIHtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBudW1DdHJsUXViaXRzOyBpKyspIHtcblx0XHRcdFx0Y3RybFF1Yml0cy5wdXNoKHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRtY0luZm8uY3RybFF1Yml0cyA9IGN0cmxRdWJpdHM7XG5cdH1cblxuXHRyZXR1cm4gbWNJbmZvO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUubXVsdGlDb250cm9sbGVkR2F0ZU5hbWUgPSBmdW5jdGlvbihuYW1lUHJlZml4LCBjdHJsUXViaXRzKSB7XG5cdHZhciBnYXRlTmFtZSA9IG5hbWVQcmVmaXggKyBcIl9cIjtcblx0aWYodHlwZW9mIGN0cmxRdWJpdHMgPT0gXCJudW1iZXJcIikge1xuXHRcdGdhdGVOYW1lICs9IGN0cmxRdWJpdHM7XG5cdH0gZWxzZSB7XG5cdFx0Z2F0ZU5hbWUgKz0gKGN0cmxRdWJpdHMubGVuZ3RoIHx8IDApO1xuXG5cdFx0dmFyIHdpcmVzID0gXCJcIjtcblx0XHRjdHJsUXViaXRzLm1hcChmdW5jdGlvbih3aXJlKSB7XG5cdFx0XHRpZighd2lyZSB8fCAodHlwZW9mIHdpcmUgPT0gXCJudW1iZXJcIiAmJiB3aXJlIDwgMCkpIHtcblx0XHRcdFx0d2lyZXMgKz0gXCIwXCI7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aXJlcyArPSBcIjFcIjtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRpZih3aXJlcy5pbmRleE9mKFwiMFwiKSA8IDApIHtcblx0XHRcdHdpcmVzID0gXCJcIjtcblx0XHR9XG5cdFx0aWYod2lyZXMpIHtcblx0XHRcdGdhdGVOYW1lICs9IFwiX1wiICsgd2lyZXM7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBnYXRlTmFtZTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmlzTXVsdGlDb250cm9sbGVkR2F0ZSA9IGZ1bmN0aW9uKGdhdGVOYW1lKSB7XG5cdHZhciBtY0luZm8gPSB0aGlzLmRlY29kZU11bHRpQ29udHJvbGxlZEdhdGVOYW1lKGdhdGVOYW1lKTtcblx0cmV0dXJuICEhdGhpcy5jdXN0b21HYXRlc1tnYXRlTmFtZV0gJiYgISFtY0luZm8gJiYgISFtY0luZm8ubnVtQ3RybFF1Yml0cztcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmlzQ29udHJvbGxhYmxlR2F0ZSA9IGZ1bmN0aW9uKGdhdGVOYW1lKSB7XG5cdHZhciBnYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblx0aWYoZ2F0ZURlZikge1xuXHRcdGlmKGdhdGVEZWYuZHJhd2luZ0luZm8pIHtcblx0XHRcdGlmKGdhdGVEZWYuZHJhd2luZ0luZm8ucm9vdCA9PSBcInhcIiB8fCBnYXRlRGVmLmRyYXdpbmdJbmZvLnJvb3QgPT0gXCJ1MVwiKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRmb3IodmFyIGduIGluIHRoaXMuYmFzaWNHYXRlcykge1xuXHRcdFx0dmFyIGdhdGVEZWYgPSB0aGlzLmJhc2ljR2F0ZXNbZ25dO1xuXHRcdFx0aWYoZ2F0ZURlZiAmJiBnYXRlRGVmLmRyYXdpbmdJbmZvICYmIGdhdGVEZWYuZHJhd2luZ0luZm8ucm9vdCAmJiBnYXRlRGVmLmRyYXdpbmdJbmZvLnJvb3QgPT0gZ2F0ZU5hbWUpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRoaXMuaXNNdWx0aUNvbnRyb2xsZWRHYXRlKGdhdGVOYW1lKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRHYXRlUG9zQnlJZCA9IGZ1bmN0aW9uKGdhdGVJZCkge1xuXHR2YXIgY2lyY3VpdCA9IHRoaXM7XG5cblx0dmFyIG51bUNvbHMgPSBjaXJjdWl0Lm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuaWQgPT0gZ2F0ZUlkKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0d2lyZXM6IGdhdGUud2lyZXMsXG5cdFx0XHRcdFx0Y29sOiBjb2x1bW5cblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdHdpcmVzOiBbXSxcblx0XHRjb2w6IC0xXG5cdH07XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ2V0R2F0ZUJ5SWQgPSBmdW5jdGlvbihnYXRlSWQpIHtcblx0dmFyIGNpcmN1aXQgPSB0aGlzO1xuXG5cdHZhciBudW1Db2xzID0gY2lyY3VpdC5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgY2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmlkID09IGdhdGVJZCkge1xuXHRcdFx0XHRyZXR1cm4gZ2F0ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbnVsbDtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldEdhdGVCZWZvcmUgPSBmdW5jdGlvbihjb2x1bW4sIHdpcmUpIHtcblx0dmFyIGdhdGUgPSBudWxsO1xuXHR2YXIgY29sID0gY29sdW1uIC0gMTtcblx0d2hpbGUoY29sID49IDAgJiYgIWdhdGUpIHtcblx0XHRnYXRlID0gdGhpcy5nZXRHYXRlQXQoY29sLCB3aXJlKTtcblx0XHRjb2wtLTtcblx0fVxuXHRyZXR1cm4gZ2F0ZTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRHYXRlQXQgPSBmdW5jdGlvbihjb2x1bW4sIHdpcmUpIHtcblx0aWYoIXRoaXMuZ2F0ZXNbd2lyZV0gfHwgIXRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXSkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0dmFyIGdhdGUgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXSkpO1xuXHRpZighZ2F0ZSkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Z2F0ZS5jb2x1bW4gPSBjb2x1bW47XG5cdGdhdGUud2lyZXMgPSBbXTtcblxuXHR2YXIgaWQgPSBnYXRlLmlkO1xuXHR2YXIgbnVtV2lyZXMgPSB0aGlzLmdhdGVzLmxlbmd0aDtcblx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IG51bVdpcmVzOyB3aXJlKyspIHtcblx0XHR2YXIgZyA9IHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXTtcblx0XHRpZihnICYmIGcuaWQgPT0gaWQpIHtcblx0XHRcdGdhdGUud2lyZXNbZy5jb25uZWN0b3JdID0gd2lyZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGdhdGU7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ2V0R2F0ZXNBdENvbHVtbiA9IGZ1bmN0aW9uKGNvbHVtbikge1xuXHR2YXIgZ2F0ZXMgPSBbXTtcblx0dmFyIG51bVdpcmVzID0gdGhpcy5nYXRlcy5sZW5ndGg7XG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBudW1XaXJlczsgd2lyZSsrKSB7XG5cdFx0dmFyIGdhdGUgPSB0aGlzLmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0Z2F0ZXMucHVzaChnYXRlKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGdhdGVzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldENvbnRyb2xsYWJsZUdhdGVzQXRDb2x1bW4gPSBmdW5jdGlvbihjb2x1bW4pIHtcblx0dmFyIGdhdGVzID0gdGhpcy5nZXRHYXRlc0F0Q29sdW1uKGNvbHVtbik7XG5cdHZhciBjb250cm9sbGFibGVHYXRlcyA9IFtdO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgZ2F0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgZ2F0ZSA9IGdhdGVzW2ldO1xuXHRcdGlmKHRoaXMuaXNDb250cm9sbGFibGVHYXRlKGdhdGUubmFtZSkpIHtcblx0XHRcdGNvbnRyb2xsYWJsZUdhdGVzLnB1c2goZ2F0ZSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBjb250cm9sbGFibGVHYXRlcztcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydEphdmFTY3JpcHQgPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGV4cG9ydEFzR2F0ZU5hbWUsIGFzSnVweXRlcikge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0dmFyIGNpcmN1aXQgPSBudWxsO1xuXG5cdC8vIGRlY29tcG9zZVxuXHRpZihkZWNvbXBvc2UpIHtcblx0XHRjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZSh0cnVlKSk7XG5cdH0gZWxzZSB7XG5cdFx0Y2lyY3VpdCA9IHRoaXM7XG5cdH1cblxuXHR2YXIganMgPSBcIlwiO1xuXG5cdC8vIGNvbW1lbnRcblx0aWYoY29tbWVudCkge1xuXHRcdHZhciBjb21tID0gKGNvbW1lbnQgfHwgXCJcIikuc3BsaXQoXCJcXG5cIik7XG5cdFx0Y29tbS5tYXAoZnVuY3Rpb24oY2xpbmUpIHtcblx0XHRcdGlmKGNsaW5lLmxlbmd0aCA+PSAyICYmIGNsaW5lWzBdICE9IFwiL1wiICYmIGNsaW5lWzFdICE9IFwiL1wiKSB7XG5cdFx0XHRcdGpzICs9IFwiLy8gXCI7XG5cdFx0XHR9XG5cdFx0XHRqcyArPSBjbGluZTtcblx0XHRcdGpzICs9IFwiXFxuXCI7XG5cdFx0fSk7XG5cdH1cblxuXHR2YXIgaW5kZW50ID0gXCJcIjtcblx0dmFyIGNpcmN1aXRWYXIgPSBcIlwiO1xuXG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRpbmRlbnQgPSBcIiAgICBcIjtcblx0XHRjaXJjdWl0VmFyID0gXCJjaXJjXCI7XG5cblx0XHRqcyArPSBcImNvbnN0IFwiICsgZXhwb3J0QXNHYXRlTmFtZSArIFwiID0gZnVuY3Rpb24oKSB7XFxuXCI7XG5cblx0XHRqcyArPSBpbmRlbnQgKyBcImNvbnN0IFwiICsgY2lyY3VpdFZhciArIFwiID0gbmV3IFF1YW50dW1DaXJjdWl0KFwiICsgY2lyY3VpdC5udW1RdWJpdHMgKyBcIik7XFxuXFxuXCI7XG5cdFx0aWYoY2lyY3VpdC5wYXJhbXMgJiYgY2lyY3VpdC5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRqcyArPSBpbmRlbnQgKyBjaXJjdWl0VmFyICsgXCIucGFyYW1zID0gXCIgKyBKU09OLnN0cmluZ2lmeShjaXJjdWl0LnBhcmFtcykgKyBcIlxcblxcblwiO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRpbmRlbnQgPSBcIlwiO1xuXHRcdGNpcmN1aXRWYXIgPSBcImNpcmN1aXRcIjtcblxuXHRcdGpzICs9IGluZGVudCArIFwiY29uc3QgUXVhbnR1bUNpcmN1aXQgPSByZXF1aXJlKFxcXCJxdWFudHVtLWNpcmN1aXRcXFwiKTtcXG5cXG5cIjtcblxuXHRcdGpzICs9IGluZGVudCArIFwiY29uc3QgXCIgKyBjaXJjdWl0VmFyICsgXCIgPSBuZXcgUXVhbnR1bUNpcmN1aXQoXCIgKyBjaXJjdWl0Lm51bVF1Yml0cyArIFwiKTtcXG5cXG5cIjtcblxuXHRcdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHRcdGlmKCFkZWNvbXBvc2UpIHtcblx0XHRcdHZhciBjdXN0b21HYXRlc0FkZGVkID0gW107XG5cdFx0XHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdFx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdGlmKCFiYXNpY0dhdGUpIHtcblx0XHRcdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHNlbGYuY3VzdG9tR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0XHRpZihjdXN0b21HYXRlKSB7XG5cdFx0XHRcdFx0XHR2YXIgY3VzdG9tQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0Y3VzdG9tQ2lyY3VpdC5sb2FkKGN1c3RvbUdhdGUpO1xuXHRcdFx0XHRcdFx0anMgKz0gY3VzdG9tQ2lyY3VpdC5leHBvcnRKYXZhU2NyaXB0KFwiXCIsIHRydWUsIHVzZWRHYXRlTmFtZSk7XG5cdFx0XHRcdFx0XHRjdXN0b21HYXRlc0FkZGVkLnB1c2godXNlZEdhdGVOYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRjdXN0b21HYXRlc0FkZGVkLm1hcChmdW5jdGlvbihjdXN0b21HYXRlTmFtZSkge1xuXHRcdFx0XHRqcyArPSBpbmRlbnQgKyBjaXJjdWl0VmFyICsgXCIucmVnaXN0ZXJHYXRlKFxcXCJcIiArIGN1c3RvbUdhdGVOYW1lICsgXCJcXFwiLCBcIiArIGN1c3RvbUdhdGVOYW1lICsgXCIoKSk7XFxuXCI7XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYoY3VzdG9tR2F0ZXNBZGRlZC5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGpzICs9IFwiXFxuXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dmFyIGNyZWdDb3VudCA9IDA7XG5cdGZvcih2YXIgY3JlZ05hbWUgaW4gdGhpcy5jcmVncykge1xuXHRcdGpzICs9IGluZGVudCArIGNpcmN1aXRWYXIgKyBcIi5jcmVhdGVDcmVnKFxcXCJcIiArIGNyZWdOYW1lICsgXCJcXFwiLCBcIiArICh0aGlzLmNyZWdzW2NyZWdOYW1lXS5sZW5ndGggfHwgMSkgKyBcIik7XFxuXCI7XG5cdFx0Y3JlZ0NvdW50Kys7XG5cdH1cblx0aWYoY3JlZ0NvdW50ID4gMCkge1xuXHRcdGpzICs9IFwiXFxuXCI7XG5cdH1cblxuXHR2YXIgbnVtQ29scyA9IGNpcmN1aXQubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHR2YXIgZ2F0ZU5hbWUgPSBnYXRlLm5hbWU7XG5cblx0XHRcdFx0aWYoZ2F0ZU5hbWUgPT0gXCJtZWFzdXJlXCIgJiYgZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jcmVnKSB7XG5cdFx0XHRcdFx0anMgKz0gaW5kZW50ICsgY2lyY3VpdFZhciArIFwiLmFkZE1lYXN1cmUoXCIgKyB3aXJlICsgXCIsIFxcXCJcIiArIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgKyBcIlxcXCIsIFwiICsgZ2F0ZS5vcHRpb25zLmNyZWcuYml0ICsgXCIpO1xcblwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGpzICs9IGluZGVudCArIGNpcmN1aXRWYXIgKyBcIi5hcHBlbmRHYXRlKFxcXCJcIiArIGdhdGUubmFtZSArIFwiXFxcIlwiO1xuXG5cdFx0XHRcdFx0aWYoZ2F0ZS53aXJlcy5sZW5ndGggPT0gMSkge1xuXHRcdFx0XHRcdFx0anMgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0anMgKz0gZ2F0ZS53aXJlc1swXTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0anMgKz0gXCIsIFtcIjtcblx0XHRcdFx0XHRcdGZvcih2YXIgdyA9IDA7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKSB7XG5cdFx0XHRcdFx0XHRcdGlmKHcgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0anMgKz0gXCIsXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0anMgKz0gZ2F0ZS53aXJlc1t3XTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGpzICs9IFwiXVwiO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucykge1xuXHRcdFx0XHRcdFx0dmFyIG9wdCA9IHt9O1xuXHRcdFx0XHRcdFx0Zm9yKHZhciBvcHRLZXkgaW4gZ2F0ZS5vcHRpb25zKSB7XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9uc1tvcHRLZXldKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG9iaiA9IGdhdGUub3B0aW9uc1tvcHRLZXldO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBza2lwID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0aWYodHlwZW9mIG9iaiA9PSBcIm9iamVjdFwiICYmIE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRza2lwID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZighc2tpcCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b3B0W29wdEtleV0gPSBvYmo7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRqcyArPSBcIiwgXCIgKyBKU09OLnN0cmluZ2lmeShvcHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRqcyArPSBcIik7XFxuXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRqcyArPSBcIlxcblwiO1xuXHRcdGpzICs9IGluZGVudCArIFwicmV0dXJuIFwiICsgY2lyY3VpdFZhciArIFwiO1xcblwiO1xuXHRcdGpzICs9IFwifTtcXG5cXG5cIjtcblx0fSBlbHNlIHtcblx0XHRqcyArPSBcIlxcblwiO1xuXG5cdFx0anMgKz0gaW5kZW50ICsgY2lyY3VpdFZhciArIFwiLnJ1bigpO1xcblxcblwiO1xuXG5cdFx0anMgKz0gaW5kZW50ICsgXCJjb25zb2xlLmxvZyhcXFwiUHJvYmFiaWxpdGllczpcXFwiKTtcXG5cIjtcblx0XHRqcyArPSBpbmRlbnQgKyBcImNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGNpcmN1aXQucHJvYmFiaWxpdGllcygpKSk7XFxuXFxuXCI7XG5cdFx0anMgKz0gaW5kZW50ICsgXCJjb25zb2xlLmxvZyhcXFwiTWVhc3VyZSBhbGw6XFxcIik7XFxuXCI7XG5cdFx0anMgKz0gaW5kZW50ICsgXCJjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShjaXJjdWl0Lm1lYXN1cmVBbGwoKSkpO1xcblxcblwiO1xuXHRcdGlmKGNpcmN1aXQuY3JlZ0NvdW50KCkpIHtcblx0XHRcdGpzICs9IGluZGVudCArIFwiY29uc29sZS5sb2coXFxcIkNsYXNzaWNhbCByZWdpc3RlcnM6XFxcIik7XFxuXCI7XG5cdFx0XHRqcyArPSBpbmRlbnQgKyBcImNvbnNvbGUubG9nKGNpcmN1aXQuY3JlZ3NBc1N0cmluZygpKTtcXG5cXG5cIjtcblx0XHR9XG5cdH1cblxuXG5cdGlmKGFzSnVweXRlcikge1xuXHRcdHZhciBub3RlYm9vayA9IHtcblx0XHRcdFwibWV0YWRhdGFcIjoge1xuXHRcdFx0XHRcImtlcm5lbHNwZWNcIjoge1xuXHRcdFx0XHRcdFwiZGlzcGxheV9uYW1lXCI6IFwiSmF2YXNjcmlwdCAoTm9kZS5qcylcIixcblx0XHRcdFx0XHRcImxhbmd1YWdlXCI6IFwiamF2YXNjcmlwdFwiLFxuXHRcdFx0XHRcdFwibmFtZVwiOiBcImphdmFzY3JpcHRcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImxhbmd1YWdlX2luZm9cIjoge1xuXHRcdFx0XHRcdFwiZmlsZV9leHRlbnNpb25cIjogXCIuanNcIixcblx0XHRcdFx0XHRcIm1pbWV0eXBlXCI6IFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiLFxuXHRcdFx0XHRcdFwibmFtZVwiOiBcImphdmFzY3JpcHRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0bmJmb3JtYXQ6IDQsXG5cdFx0XHRuYmZvcm1hdF9taW5vcjogMCxcblx0XHRcdGNlbGxzOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjZWxsX3R5cGU6IFwiY29kZVwiLFxuXHRcdFx0XHRcdHNvdXJjZToganMsXG5cdFx0XHRcdFx0bWV0YWRhdGE6IHtcblxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b3V0cHV0czogW10sXG5cdFx0XHRcdFx0ZXhlY3V0aW9uX2NvdW50OiBudWxsXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShub3RlYm9vayk7XG5cdH1cblxuXHRyZXR1cm4ganM7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRRaXNraXQgPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGV4cG9ydEFzR2F0ZU5hbWUsIHZlcnNpb25TdHIsIHByb3ZpZGVyTmFtZSwgYmFja2VuZE5hbWUsIGFzSnVweXRlciwgc2hvdHMsIGNpcmN1aXRSZXBsYWNlbWVudCwgaW5zaWRlU3VibW9kdWxlLCBoeWJyaWQpIHtcblx0dmFyIG9wdGlvbnMgPSB7XG5cdFx0Y29tbWVudDogY29tbWVudCxcblx0XHRkZWNvbXBvc2U6IGRlY29tcG9zZSxcblx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyLFxuXHRcdHByb3ZpZGVyTmFtZTogcHJvdmlkZXJOYW1lLFxuXHRcdGJhY2tlbmROYW1lOiBiYWNrZW5kTmFtZSxcblx0XHRhc0p1cHl0ZXI6IGFzSnVweXRlcixcblx0XHRzaG90czogc2hvdHMsXG5cdFx0aHlicmlkOiBoeWJyaWRcblx0fTtcblx0XG5cdHJldHVybiB0aGlzLmV4cG9ydFRvUWlza2l0KG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUsIGNpcmN1aXRSZXBsYWNlbWVudCwgaW5zaWRlU3VibW9kdWxlKVxufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0UXVFU1QgPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGV4cG9ydEFzR2F0ZU5hbWUsIGRlZmluZWRGdW5jKSB7XG5cdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdGNvbW1lbnQ6IGNvbW1lbnQsXG5cdFx0ZGVjb21wb3NlOiBkZWNvbXBvc2Vcblx0fTtcblxuXHRyZXR1cm4gdGhpcy5leHBvcnRUb1F1RVNUKG5ld09wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUsIGRlZmluZWRGdW5jKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFFBU00gPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGV4cG9ydEFzR2F0ZU5hbWUsIGNpcmN1aXRSZXBsYWNlbWVudCwgY29tcGF0aWJpbGl0eU1vZGUsIGluc2lkZVN1Ym1vZHVsZSkge1xuXHR2YXIgb3B0aW9ucyA9IHtcblx0XHRjb21tZW50OiBjb21tZW50LFxuXHRcdGRlY29tcG9zZTogZGVjb21wb3NlLFxuXHRcdGNvbXBhdGliaWxpdHlNb2RlOiBjb21wYXRpYmlsaXR5TW9kZVxuXHR9O1xuXHRcblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9RQVNNKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUsIGNpcmN1aXRSZXBsYWNlbWVudCwgaW5zaWRlU3VibW9kdWxlKVx0XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5pbXBvcnRRQVNNID0gZnVuY3Rpb24oaW5wdXQsIGVycm9yQ2FsbGJhY2ssIGNvbXBhdGliaWxpdHlNb2RlKSB7XG5cdHRoaXMuaW5pdCgpO1xuXHRRQVNNSW1wb3J0KHRoaXMsIGlucHV0LCBlcnJvckNhbGxiYWNrLCBjb21wYXRpYmlsaXR5TW9kZSk7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRQeXF1aWwgPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGV4cG9ydEFzR2F0ZU5hbWUsIHZlcnNpb25TdHIsIGxhdHRpY2UsIGFzUVZNLCBhc0p1cHl0ZXIsIHNob3RzLCBoeWJyaWQpIHtcblx0dmFyIG9wdGlvbnMgPSB7XG5cdFx0Y29tbWVudDogY29tbWVudCxcblx0XHRkZWNvbXBvc2U6IGRlY29tcG9zZSxcblx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyLFxuXHRcdGxhdHRpY2U6IGxhdHRpY2UsXG5cdFx0YXNRVk06IGFzUVZNLFxuXHRcdGFzSnVweXRlcjogYXNKdXB5dGVyLFxuXHRcdHNob3RzOiBzaG90cyxcblx0XHRoeWJyaWQ6IGh5YnJpZFxuXHR9O1xuXHRyZXR1cm4gdGhpcy5leHBvcnRUb1B5cXVpbChvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKTtcbn1cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFF1aWwgPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGV4cG9ydEFzR2F0ZU5hbWUsIHZlcnNpb25TdHIpIHtcblx0dmFyIG9wdGlvbnMgPSB7XG5cdFx0Y29tbWVudDogY29tbWVudCxcblx0XHRkZWNvbXBvc2U6IGRlY29tcG9zZSxcblx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyXG5cdH07XG5cblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9RdWlsKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaW1wb3J0UXVpbCA9IGZ1bmN0aW9uKHF1aWwsIGVycm9yQ2FsbGJhY2ssIG9wdGlvbnMsIHF1Yml0TmFtZXMsIHJlbmFtZWRHYXRlcywgbGluZU9mZnNldCkge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0c2VsZi5pbml0KCk7XG5cblx0cmVuYW1lZEdhdGVzID0gcmVuYW1lZEdhdGVzIHx8IHt9O1xuXHRsaW5lT2Zmc2V0ID0gbGluZU9mZnNldCB8fCAwO1xuXG5cdGZ1bmN0aW9uIGdldEdhdGVJbmZvKGdhdGVOYW1lKSB7XG5cdFx0aWYoc2VsZi5jdXN0b21HYXRlcyAmJiBzZWxmLmN1c3RvbUdhdGVzW2dhdGVOYW1lXSkge1xuXHRcdFx0cmV0dXJuIHsgbmFtZTogZ2F0ZU5hbWUsIGN1c3RvbUdhdGU6IHNlbGYuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdIH07XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciBnbmFtZSBpbiBzZWxmLmJhc2ljR2F0ZXMpIHtcblx0XHRcdHZhciBnZGVmID0gc2VsZi5iYXNpY0dhdGVzW2duYW1lXTtcblx0XHRcdGlmKGdkZWYuZXhwb3J0SW5mbykge1xuXHRcdFx0XHRpZihnZGVmLmV4cG9ydEluZm8ucXVpbCAmJiBnZGVmLmV4cG9ydEluZm8ucXVpbC5uYW1lID09IGdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgbmFtZTogZ25hbWUsIGdhdGVEZWY6IGdkZWYsIHF1aWxEZWY6IGdkZWYuZXhwb3J0SW5mby5xdWlsIH07XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoZ2RlZi5leHBvcnRJbmZvLnB5cXVpbCAmJiBnZGVmLmV4cG9ydEluZm8ucHlxdWlsLm5hbWUgPT0gZ2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRyZXR1cm4geyBuYW1lOiBnbmFtZSwgZ2F0ZURlZjogZ2RlZiwgcXVpbERlZjogZ2RlZi5leHBvcnRJbmZvLnB5cXVpbCB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXG5cdHZhciBsaW5lcyA9IHF1aWwuc3BsaXQoXCJcXG5cIik7XG5cblx0dmFyIGNvbW1hbmRzID0gW107XG5cdHZhciBtdWx0aWxpbmUgPSBmYWxzZTtcblx0bGluZXMubWFwKGZ1bmN0aW9uKGxpbmUsIGxpbmVJbmRleCkge1xuXHRcdC8vIHJlbW92ZSBjb21tZW50c1xuXHRcdGxpbmUgPSBsaW5lLnNwbGl0KFwiI1wiKVswXTtcblxuXHRcdGlmKCFsaW5lLmxlbmd0aCkge1xuXHRcdFx0bXVsdGlsaW5lID0gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIHJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBzcGFjZXNcblx0XHRcdGxpbmUgPSBsaW5lLnRyaW0oKTtcblx0XHR9XG5cblx0XHRpZighbXVsdGlsaW5lKSB7XG5cdFx0XHRpZihsaW5lLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgY2xpbmVzID0gbGluZS5zcGxpdChcIjtcIik7XG5cdFx0XHRcdHZhciBjb2RlbGluZXMgPSBbXTtcblx0XHRcdFx0Y2xpbmVzLm1hcChmdW5jdGlvbihjbGluZSkge1xuXHRcdFx0XHRcdGlmKGNsaW5lLnRyaW0oKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGNvZGVsaW5lcy5wdXNoKGNsaW5lLnRyaW0oKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRjb2RlbGluZXMubWFwKGZ1bmN0aW9uKGNvZGVsaW5lKSB7XG5cblx0XHRcdFx0XHR2YXIgdG9rZW5zID0gY29kZWxpbmUuc3BsaXQoXCIgXCIpO1xuXHRcdFx0XHRcdHZhciBsYXN0VG9rZW4gPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdO1xuXHRcdFx0XHRcdGlmKGxhc3RUb2tlbi5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGlmKGxhc3RUb2tlbltsYXN0VG9rZW4ubGVuZ3RoIC0gMV0gPT0gXCI6XCIpIHtcblx0XHRcdFx0XHRcdFx0bXVsdGlsaW5lID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0Ly8gcmVtb3ZlIFwiOlwiXG5cdFx0XHRcdFx0XHRcdGxhc3RUb2tlbiA9IGxhc3RUb2tlbi5zdWJzdHJpbmcoMCwgbGFzdFRva2VuLmxlbmd0aCAtIDEpO1xuXHRcdFx0XHRcdFx0XHR0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdID0gbGFzdFRva2VuO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZih0b2tlbnMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0eXBlID0gXCJHQVRFXCI7XG5cdFx0XHRcdFx0XHRcdGlmKHRva2Vuc1swXSA9PSBcIkRFRkdBVEVcIiB8fCB0b2tlbnNbMF0gPT0gXCJERUZDSVJDVUlUXCIpIHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlID0gdG9rZW5zWzBdO1xuXHRcdFx0XHRcdFx0XHRcdHRva2Vucy5zcGxpY2UoMCwgMSk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHR2YXIgbmFtZSA9IHRva2Vucy5qb2luKFwiIFwiKTtcblxuXHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1zID0gW107XG5cdFx0XHRcdFx0XHRcdHZhciBwYXJhbVN0YXJ0ID0gbmFtZS5pbmRleE9mKFwiKFwiKTtcblx0XHRcdFx0XHRcdFx0aWYocGFyYW1TdGFydCA+PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtRW5kID0gbmFtZS5pbmRleE9mKFwiKVwiKTtcblx0XHRcdFx0XHRcdFx0XHRpZihwYXJhbUVuZCA+IHBhcmFtU3RhcnQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtcyA9IG5hbWUuc3Vic3RyaW5nKHBhcmFtU3RhcnQgKyAxLCBwYXJhbUVuZCkuc3BsaXQoXCIsXCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1zLm1hcChmdW5jdGlvbihwYXIsIG5keCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXIgPSBwYXIudHJpbSgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR3aGlsZShwYXIubGVuZ3RoICYmIHBhclswXSA9PSBcIiVcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhciA9IHBhci5zbGljZSgxKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbXNbbmR4XSA9IHBhcjtcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRpZigocGFyYW1FbmQgKyAxKSA8PSBuYW1lLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0b2sgPSBuYW1lLnN1YnN0cmluZyhwYXJhbUVuZCArIDEsIG5hbWUubGVuZ3RoKS5zcGxpdChcIiBcIik7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0dG9rZW5zID0gW107XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRvay5tYXAoZnVuY3Rpb24odGspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ayA9IHRrLnRyaW0oKTsgXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYodGsubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b2tlbnMucHVzaCh0ayk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRva2VucyA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lID0gbmFtZS5zdWJzdHJpbmcoMCwgcGFyYW1TdGFydCkudHJpbSgpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRuYW1lID0gdG9rZW5zLnNwbGljZSgwLCAxKVswXS50cmltKCk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHR2YXIgYXJncyA9IFtdO1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIHQgPSAwOyB0IDwgdG9rZW5zLmxlbmd0aDsgdCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHRva2VuID0gdG9rZW5zW3RdO1xuXHRcdFx0XHRcdFx0XHRcdGlmKHF1Yml0TmFtZXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBxaW5kZXggPSBxdWJpdE5hbWVzLmluZGV4T2YodG9rZW4pO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYocWluZGV4ID49IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5wdXNoKHFpbmRleCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnB1c2godG9rZW4pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnB1c2godG9rZW4pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGNvbW1hbmRzLnB1c2goeyB0eXBlOiB0eXBlLCBuYW1lOiBuYW1lLCBwYXJhbXM6IHBhcmFtcywgYXJnczogYXJncywgYm9keTogW10sIGxpbmU6IGxpbmVJbmRleCwgY29sOiAwIH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciBjb2RlbGluZXMgPSBsaW5lLnNwbGl0KFwiO1wiKTtcblx0XHRcdGNvZGVsaW5lcy5tYXAoZnVuY3Rpb24oY29kZWxpbmUpIHtcblx0XHRcdFx0aWYoY29kZWxpbmUudHJpbSgpLmxlbmd0aCkge1xuXHRcdFx0XHRcdGNvbW1hbmRzW2NvbW1hbmRzLmxlbmd0aCAtIDFdLmJvZHkucHVzaChjb2RlbGluZS50cmltKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0pO1xuXG5cdHZhciBjb21tYW5kQ291bnQgPSBjb21tYW5kcy5sZW5ndGg7XG5cdGZvcih2YXIgY29tbWFuZEluZGV4ID0gMDsgY29tbWFuZEluZGV4IDwgY29tbWFuZENvdW50OyBjb21tYW5kSW5kZXgrKykge1xuXHRcdHZhciBjb21tYW5kID0gY29tbWFuZHNbY29tbWFuZEluZGV4XTtcblxuXHRcdGlmKHJlbmFtZWRHYXRlc1tjb21tYW5kLm5hbWVdKSB7XG5cdFx0XHRjb21tYW5kLm5hbWUgPSByZW5hbWVkR2F0ZXNbY29tbWFuZC5uYW1lXTtcblx0XHR9XG5cblx0XHRzd2l0Y2goY29tbWFuZC50eXBlKSB7XG5cdFx0XHRjYXNlIFwiREVGR0FURVwiOiB7XG5cdFx0XHRcdGlmKGNvbW1hbmQubmFtZSA9PSBjb21tYW5kLm5hbWUudG9VcHBlckNhc2UoKSkge1xuXHRcdFx0XHRcdHZhciBuZXdOYW1lID0gY29tbWFuZC5uYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0cmVuYW1lZEdhdGVzW2NvbW1hbmQubmFtZV0gPSBuZXdOYW1lO1xuXHRcdFx0XHRcdGNvbW1hbmQubmFtZSA9IG5ld05hbWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBOT1QgSU1QTEVNRU5URUQgWUVUICEhIVxuXG5cdFx0XHR9OyBicmVhaztcblxuXHRcdFx0Y2FzZSBcIkRFRkNJUkNVSVRcIjoge1xuXHRcdFx0XHRpZihjb21tYW5kLm5hbWUgPT0gY29tbWFuZC5uYW1lLnRvVXBwZXJDYXNlKCkpIHtcblx0XHRcdFx0XHR2YXIgbmV3TmFtZSA9IGNvbW1hbmQubmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdHJlbmFtZWRHYXRlc1tjb21tYW5kLm5hbWVdID0gbmV3TmFtZTtcblx0XHRcdFx0XHRjb21tYW5kLm5hbWUgPSBuZXdOYW1lO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIHN1YlF1aWwgPSBjb21tYW5kLmJvZHkuam9pbihcIlxcblwiKTtcblx0XHRcdFx0dmFyIHN1YlF1Yml0TmFtZXMgPSBjb21tYW5kLmFyZ3M7XG5cdFx0XHRcdHZhciBzdWJDaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cblx0XHRcdFx0c3ViQ2lyY3VpdC5pbXBvcnRRdWlsKHN1YlF1aWwsIGVycm9yQ2FsbGJhY2ssIG9wdGlvbnMsIHN1YlF1Yml0TmFtZXMsIHJlbmFtZWRHYXRlcywgY29tbWFuZC5saW5lICsgMSk7XG5cblx0XHRcdFx0c3ViQ2lyY3VpdC5wYXJhbXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNvbW1hbmQucGFyYW1zKSk7XG5cblx0XHRcdFx0c2VsZi5yZWdpc3RlckdhdGUoY29tbWFuZC5uYW1lLCBzdWJDaXJjdWl0LnNhdmUoKSk7XG5cdFx0XHR9OyBicmVhaztcblxuXHRcdFx0Y2FzZSBcIkdBVEVcIjoge1xuXHRcdFx0XHRzd2l0Y2goY29tbWFuZC5uYW1lKSB7XG5cdFx0XHRcdFx0Y2FzZSBcIkRFQ0xBUkVcIjoge1xuXHRcdFx0XHRcdFx0Ly8gTk9UIElNUExFTUVOVEVEIFlFVCAhISFcblxuXHRcdFx0XHRcdH07IGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSBcIkhBTFRcIjoge1xuXHRcdFx0XHRcdFx0Ly8gV2hhdCE/XG5cblx0XHRcdFx0XHR9OyBicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgXCJQUkFHTUFcIjoge1xuXHRcdFx0XHRcdFx0Ly8gV2hhdCE/XG5cblx0XHRcdFx0XHR9OyBicmVhaztcblxuXHRcdFx0XHRcdGRlZmF1bHQ6IHtcblx0XHRcdFx0XHRcdHZhciBnYXRlSW5mbyA9IGdldEdhdGVJbmZvKGNvbW1hbmQubmFtZSk7XG5cdFx0XHRcdFx0XHRpZighZ2F0ZUluZm8pIHtcblx0XHRcdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiQ2Fubm90IHJlY29nbml6ZSBcXFwiXCIgKyBjb21tYW5kLm5hbWUgKyBcIlxcXCIuXCI7XG5cdFx0XHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSwgbGluZTogbGluZU9mZnNldCArIGNvbW1hbmQubGluZSwgY29sOiBjb21tYW5kLmNvbCB9IF0pO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtcyA9IHt9O1xuXG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVJbmZvLmdhdGVEZWYpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZ2F0ZURlZiA9IGdhdGVJbmZvLmdhdGVEZWY7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHF1aWxEZWYgPSBnYXRlSW5mby5xdWlsRGVmO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYoKHF1aWxEZWYucGFyYW1zIHx8IFtdKS5sZW5ndGggIT0gKGNvbW1hbmQucGFyYW1zIHx8IFtdKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgbnVtYmVyIG9mIHBhcmFtcy4gRXhwZWN0ZWQgXCIgKyAocXVpbERlZi5wYXJhbXMgfHwgW10pLmxlbmd0aCArIFwiIGdvdCBcIiArIChjb21tYW5kLnBhcmFtcyB8fCBbXSkubGVuZ3RoICsgXCIuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlLCBsaW5lOiBsaW5lT2Zmc2V0ICsgY29tbWFuZC5saW5lLCBjb2w6IGNvbW1hbmQuY29sIH0gXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBnYXRlRGVmLnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gZ2F0ZURlZi5wYXJhbXNbaV07XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtSW5kZXggPSBxdWlsRGVmLnBhcmFtcy5pbmRleE9mKHBhcmFtTmFtZSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYocGFyYW1JbmRleCA8IDAgfHwgcGFyYW1JbmRleCA+PSBjb21tYW5kLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJJbnRlcm5hbCBlcnJvcjogUVVJTCBkZWZpbml0aW9uIGZvciBnYXRlIFxcXCJcIiArIGNvbW1hbmQubmFtZSArIFwiIGlzIGludmFsaWQuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IGxpbmVPZmZzZXQgKyBjb21tYW5kLmxpbmUsIGNvbDogY29tbWFuZC5jb2wgfSBdKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtc1twYXJhbU5hbWVdID0gY29tbWFuZC5wYXJhbXNbcGFyYW1JbmRleF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVEZWYgPSBnYXRlSW5mby5jdXN0b21HYXRlO1xuXHRcdFx0XHRcdFx0XHRcdGlmKChnYXRlRGVmLnBhcmFtcyB8fCBbXSkubGVuZ3RoICE9IChjb21tYW5kLnBhcmFtcyB8fCBbXSkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIG51bWJlciBvZiBwYXJhbXMuIEV4cGVjdGVkIFwiICsgKGdhdGVEZWYucGFyYW1zIHx8IFtdKS5sZW5ndGggKyBcIiBnb3QgXCIgKyAoY29tbWFuZC5wYXJhbXMgfHwgW10pLmxlbmd0aCArIFwiLlwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSwgbGluZTogbGluZU9mZnNldCArIGNvbW1hbmQubGluZSwgY29sOiBjb21tYW5kLmNvbCB9IF0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGdhdGVEZWYucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbU5hbWUgPSBnYXRlRGVmLnBhcmFtc1tpXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1zW3BhcmFtTmFtZV0gPSBjb21tYW5kLnBhcmFtc1tpXTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyBDaGVjayBpZiBudW1iZXIgb2YgYXJndW1lbnRzIG1hdGNoIGdhdGVEZWZcblx0XHRcdFx0XHRcdFx0aWYoY29tbWFuZC5uYW1lID09IFwiTUVBU1VSRVwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYoY29tbWFuZC5hcmdzLmxlbmd0aCAhPSAyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJFeHBlY3RpbmcgMiBhcmd1bWVudHMgKHF1Yml0IGFuZCB0YXJnZXQgcmVnaXN0ZXIpIGJ1dCBmb3VuZCBcIiArIGNvbW1hbmQuYXJncy5sZW5ndGggKyBcIi5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IGxpbmVPZmZzZXQgKyBjb21tYW5kLmxpbmUsIGNvbDogY29tbWFuZC5jb2wgfSBdKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBxdWJpdENvdW50ID0gMTtcblx0XHRcdFx0XHRcdFx0XHRpZihnYXRlRGVmLm51bVF1Yml0cykge1xuXHRcdFx0XHRcdFx0XHRcdFx0cXViaXRDb3VudCA9IGdhdGVEZWYubnVtUXViaXRzO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihnYXRlRGVmLm1hdHJpeCAmJiBnYXRlRGVmLm1hdHJpeC5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cXViaXRDb3VudCA9IG1hdGgubG9nMihnYXRlRGVmLm1hdHJpeC5sZW5ndGgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmKGNvbW1hbmQuYXJncy5sZW5ndGggIT0gcXViaXRDb3VudCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiRXhwZWN0aW5nIFwiICsgcXViaXRDb3VudCArIFwiIGFyZ3VtZW50cyBidXQgZm91bmQgXCIgKyBjb21tYW5kLmFyZ3MubGVuZ3RoICsgXCIuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlLCBsaW5lOiBsaW5lT2Zmc2V0ICsgY29tbWFuZC5saW5lLCBjb2w6IGNvbW1hbmQuY29sIH0gXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHZhciBhcmdzID0gW107XG5cdFx0XHRcdFx0XHRcdHZhciBjcmVnID0ge307XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjb21tYW5kLmFyZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgYXJnID0gY29tbWFuZC5hcmdzW2ldO1xuXHRcdFx0XHRcdFx0XHRcdGlmKGNvbW1hbmQubmFtZSA9PSBcIk1FQVNVUkVcIikge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgY3JlZ1N0YXJ0ID0gYXJnLmluZGV4T2YoXCJbXCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoY3JlZ1N0YXJ0ID49IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGNyZWdFbmQgPSBhcmcuaW5kZXhPZihcIl1cIik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGNyZWdFbmQgPiBjcmVnU3RhcnQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjcmVnQml0ID0gYXJnLnN1YnN0cmluZyhjcmVnU3RhcnQgKyAxLCBjcmVnRW5kKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjcmVnTmFtZSA9IGFyZy5zdWJzdHJpbmcoMCwgY3JlZ1N0YXJ0KTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNyZWcgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRiaXQ6IGNyZWdCaXQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lOiBjcmVnTmFtZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBhcmdJbnQgPSBwYXJzZUludChhcmcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihpc05hTihhcmdJbnQpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoaSA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MucHVzaChhcmcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGFyZ3VtZW50IFxcXCJcIiArIGFyZyArIFwiXFxcIlwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSwgbGluZTogbGluZU9mZnNldCArIGNvbW1hbmQubGluZSwgY29sOiBjb21tYW5kLmNvbCB9IF0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5wdXNoKGFyZ0ludCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBhcmdJbnQgPSBwYXJzZUludChhcmcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoaXNOYU4oYXJnSW50KSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGFyZ3VtZW50IFxcXCJcIiArIGFyZyArIFwiXFxcIlwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IGxpbmVPZmZzZXQgKyBjb21tYW5kLmxpbmUsIGNvbDogY29tbWFuZC5jb2wgfSBdKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MucHVzaChhcmdJbnQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHNlbGYuYXBwZW5kR2F0ZShnYXRlSW5mby5uYW1lLCBhcmdzLCB7IHBhcmFtczogcGFyYW1zLCBjcmVnOiBjcmVnIH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHR9OyBicmVhaztcblx0XHR9XG5cdH1cblxuXHQvLyBUaGlzIGVycm9yIGhhbmRsaW5nIGlzIGNyKnAgYnV0IGxldCdzIGJlIGNvbnNpc3RlbnQgd2l0aCBpbXBvcnRRQVNNKCkgZm9yIG5vd1xuXHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0ZXJyb3JDYWxsYmFjayhbXSk7XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRRdWlyayA9IGZ1bmN0aW9uKGRlY29tcG9zZSkge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0dmFyIGNpcmN1aXQgPSBudWxsO1xuXG5cdGZ1bmN0aW9uIHJhbmdlKG4pIHtcblx0XHR2YXIgYXJyID0gW107XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuXHRcdFx0YXJyLnB1c2goaSk7XG5cdFx0fVxuXHRcdHJldHVybiBhcnI7XG5cdH1cblxuXHRmdW5jdGlvbiBpc1dpcmVJblJhbmdlKHdpcmUsIHdpcmVSYW5nZSl7XG5cdFx0aWYod2lyZVJhbmdlLmluZGV4T2Yod2lyZSkgPiAtMSl7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0Ly8gZm9yY2UgZGVjb21wb3NlXG5cdGRlY29tcG9zZSA9IHRydWU7XG5cdHZhciBvYmogPSB0aGlzLnNhdmUoZGVjb21wb3NlKTtcblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0dmFyIHRlbXBDaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmN1aXQubG9hZChvYmopO1xuXHR0ZW1wQ2lyY3VpdC5sb2FkKG9iaik7XG5cblx0dmFyIHF1aXJrID0ge1xuXHRcdGNvbHM6IFtdLFxuXHRcdGdhdGVzOiBbXVxuXHR9O1xuXG5cdHZhciBnYXRlTWF0cml4ID0gbnVsbDtcblxuXHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wYXJhbXMgPyB0aGlzLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFxuXHR2YXIgZ2F0ZUxvY2F0aW9ucyA9IHt9O1xuXHR2YXIgY3VzdG9tR2F0ZUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblxuXHRcblx0XG5cdHZhciBnYXRlc1RvQmVBZGRlZCA9IFtdO1xuXHRcblx0dmFyIGdhdGVJbmZvcm1hdGlvbiA9IHt9O1xuXG5cdGlmKCFkZWNvbXBvc2UpIHtcblx0XHR2YXIgbnVtQ29scyA9IHRlbXBDaXJjdWl0Lm51bUNvbHMoKTtcblx0XHRmb3IodmFyIGNvbHVtbiA9IG51bUNvbHMgLSAxOyBjb2x1bW4gPj0gMDsgY29sdW1uLS0pIHtcblx0XHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0ZW1wQ2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0XHR2YXIgZ2F0ZSA9IHRlbXBDaXJjdWl0LmdhdGVzW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCAmJiAhdGVtcENpcmN1aXQuYmFzaWNHYXRlc1tnYXRlLm5hbWVdKSB7XG5cdFx0XHRcdFx0Y3VzdG9tRGVjb21wb3NlZENpcmN1aXQgPSB0ZW1wQ2lyY3VpdC5kZWNvbXBvc2VHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdFx0XHR2YXIgaXNEZWNvbXBvc2VDdXN0b21DaXJjdWl0ID0gZmFsc2U7XG5cdFx0XHRcdFx0Z2F0ZUluZm9ybWF0aW9uW2dhdGUubmFtZV0gPSB7aW5mbzpbXSwgaXNEZWNvbXBvc2VDdXN0b21DaXJjdWl0Om51bGx9O1xuXHRcdFx0XHRcdGZvcih2YXIgZGVjb21wb3NlZENvbHVtbiA9IDA7IGRlY29tcG9zZWRDb2x1bW4gPCBjdXN0b21EZWNvbXBvc2VkQ2lyY3VpdC5udW1Db2xzKCk7IGRlY29tcG9zZWRDb2x1bW4rKykge1xuXHRcdFx0XHRcdFx0Zm9yKHZhciBkZWNvbXBvc2VkV2lyZSA9IDA7IGRlY29tcG9zZWRXaXJlIDwgY3VzdG9tRGVjb21wb3NlZENpcmN1aXQubnVtUXViaXRzOyBkZWNvbXBvc2VkV2lyZSsrKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBnYXRlSW5DdXN0b21DaXJjdWl0ID0gY3VzdG9tRGVjb21wb3NlZENpcmN1aXQuZ2V0R2F0ZUF0KGRlY29tcG9zZWRDb2x1bW4sIGRlY29tcG9zZWRXaXJlKTtcblxuXHRcdFx0XHRcdFx0XHRpZihnYXRlSW5DdXN0b21DaXJjdWl0KXtcblx0XHRcdFx0XHRcdFx0XHR2YXIgYmFzaWNHYXRlSW5DdXN0b21DaXJjdWl0ID0gY3VzdG9tRGVjb21wb3NlZENpcmN1aXQuYmFzaWNHYXRlc1tnYXRlSW5DdXN0b21DaXJjdWl0Lm5hbWVdO1xuXHRcdFx0XHRcdFx0XHRcdGlmKGJhc2ljR2F0ZUluQ3VzdG9tQ2lyY3VpdC5leHBvcnRJbmZvICYmICFiYXNpY0dhdGVJbkN1c3RvbUNpcmN1aXQuZXhwb3J0SW5mby5xdWlyayl7XG5cdFx0XHRcdFx0XHRcdFx0XHRpc0RlY29tcG9zZUN1c3RvbUNpcmN1aXQgPSBpc0RlY29tcG9zZUN1c3RvbUNpcmN1aXQgfHwgdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZUluQ3VzdG9tQ2lyY3VpdC5jb25uZWN0b3IgPT0gMCl7XHRcblx0XHRcdFx0XHRcdFx0XHRcdGdhdGVJbmZvcm1hdGlvbltnYXRlLm5hbWVdLmluZm8ucHVzaCh7Z2F0ZUluQ3VzdG9tQ2lyY3VpdDpnYXRlSW5DdXN0b21DaXJjdWl0LCBjb2x1bW46Y29sdW1ufSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRnYXRlc1RvQmVBZGRlZC5wdXNoKGdhdGVJbmZvcm1hdGlvbik7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGdhdGVJbmZvcm1hdGlvbltnYXRlLm5hbWVdLmlzRGVjb21wb3NlQ3VzdG9tQ2lyY3VpdD0gaXNEZWNvbXBvc2VDdXN0b21DaXJjdWl0O1xuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0aWYoaXNEZWNvbXBvc2VDdXN0b21DaXJjdWl0KXtcblx0XHRcdFx0XHRcdGNpcmN1aXQuZ2F0ZXMubWFwKGZ1bmN0aW9uKGNpcmN1aXRHYXRlLCBpbmRleCl7XG5cdFx0XHRcdFx0XHRcdGNpcmN1aXRHYXRlLm1hcChmdW5jdGlvbihnYXRlVG9SZW1vdmUpe1xuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGVUb1JlbW92ZSAmJiBnYXRlVG9SZW1vdmUubmFtZSA9PSBnYXRlLm5hbWUpe1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2lyY3VpdC5yZW1vdmVHYXRlKGdhdGVUb1JlbW92ZS5pZCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRnYXRlS2V5cyA9IE9iamVjdC5rZXlzKGdhdGVJbmZvcm1hdGlvbik7XG5cdGZvcih2YXIgZ2F0ZU51bWJlciA9ICAwOyBnYXRlTnVtYmVyIDwgZ2F0ZUtleXMubGVuZ3RoOyBnYXRlTnVtYmVyKyspe1xuXHRcdGdhdGVLZXkgPSBnYXRlS2V5c1tnYXRlTnVtYmVyXTtcblx0XHRpZihnYXRlSW5mb3JtYXRpb25bZ2F0ZUtleV0uaXNEZWNvbXBvc2VDdXN0b21DaXJjdWl0KXtcblx0XHRcdGZvcih2YXIgaSA9IGdhdGVJbmZvcm1hdGlvbltnYXRlS2V5XS5pbmZvLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKXtcblx0XHRcdFx0dmFyIGdhdGVJbmZvID0gZ2F0ZUluZm9ybWF0aW9uW2dhdGVLZXldLmluZm9baV07XG5cdFx0XHRcdHZhciBnYXRlVG9BZGQgPSBnYXRlSW5mby5nYXRlSW5DdXN0b21DaXJjdWl0O1xuXHRcdFx0XHRjaXJjdWl0Lmluc2VydEdhdGUoZ2F0ZVRvQWRkLm5hbWUsIGdhdGVJbmZvLmNvbHVtbiwgZ2F0ZVRvQWRkLndpcmVzLCBnYXRlVG9BZGQub3B0aW9ucyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dmFyIHByZXZpb3VzQ29sdW1uID0gbnVsbDtcblx0dmFyIHByZXZpb3VzR2F0ZSA9IG51bGw7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgY2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSl7XG5cdFx0XHRcdGlmKHByZXZpb3VzR2F0ZSAmJiBwcmV2aW91c0dhdGUubmFtZSAhPSBnYXRlLm5hbWUgJiYgcHJldmlvdXNHYXRlLmNvbm5lY3RvciAhPSAwICYmIHByZXZpb3VzQ29sdW1uID09IGNvbHVtbil7XG5cdFx0XHRcdFx0Y2lyY3VpdC5yZW1vdmVHYXRlKGdhdGUuaWQpO1xuXHRcdFx0XHRcdGNpcmN1aXQuaW5zZXJ0R2F0ZShnYXRlLm5hbWUsIGdhdGUuY29sdW1uICsgMSwgZ2F0ZS53aXJlcywgZ2F0ZS5vcHRpb25zKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRwcmV2aW91c0dhdGUgPSBnYXRlO1xuXHRcdFx0XHRwcmV2aW91c0NvbHVtbiA9IGNvbHVtbjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR2YXIgbnVtQ29scyA9IGNpcmN1aXQubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0dmFyIHF1aXJrQ29sdW1uID0gW107XG5cdFx0dmFyIHdpcmVSYW5nZSA9IFtdO1xuXHRcdHZhciBpc0Jhc2ljR2F0ZSA9IGZhbHNlO1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZighZ2F0ZSB8fCBnYXRlLm5hbWUgPT0gXCJtZWFzdXJlXCIgfHwgZ2F0ZS5uYW1lID09IFwicmVzZXRcIikge1xuXHRcdFx0XHRpZihpc0Jhc2ljR2F0ZSB8fCAhaXNXaXJlSW5SYW5nZSh3aXJlLCB3aXJlUmFuZ2UpKXtcblx0XHRcdFx0XHRxdWlya0NvbHVtbi5wdXNoKDEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdHZhciBtYXhXaXJlID0gbWF0aC5tYXgoZ2F0ZS53aXJlcyk7XG5cdFx0XHRcdHZhciBtaW5XaXJlID0gbWF0aC5taW4oZ2F0ZS53aXJlcyk7XG5cdFx0XHRcdHZhciBnYXRlV2lyZXMgPSBnYXRlLndpcmVzLnNsaWNlKCk7XG5cdFx0XHRcdHZhciB3aXJlUmFuZ2UgPSByYW5nZShtYXhXaXJlKTtcblx0XHRcdFx0aWYoYmFzaWNHYXRlKSB7XG5cdFx0XHRcdFx0dmFyIHF1aXJrTmFtZSA9IFwiXCI7XG5cdFx0XHRcdFx0dmFyIGNvbnRyb2xsZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRpc0Jhc2ljR2F0ZSA9IHRydWU7XG5cdFx0XHRcdFx0aWYoYmFzaWNHYXRlLmV4cG9ydEluZm8gJiYgYmFzaWNHYXRlLmV4cG9ydEluZm8ucXVpcmspe1xuXHRcdFx0XHRcdFx0cXVpcmtOYW1lID0gYmFzaWNHYXRlLmV4cG9ydEluZm8ucXVpcmsubmFtZTtcblx0XHRcdFx0XHRcdGNvbnRyb2xsZWQgPSBiYXNpY0dhdGUuZXhwb3J0SW5mby5xdWlyay5jb250cm9sbGVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyB0d28tcXViaXQgZ2F0ZVxuXHRcdFx0XHRcdGlmKGJhc2ljR2F0ZS5tYXRyaXgubGVuZ3RoID09IDQpIHtcblx0XHRcdFx0XHRcdC8vIGtub3duIGdhdGUsIGJ1dCB0aGlzIGlzIGNvbnRyb2wgYml0XG5cdFx0XHRcdFx0XHRpZihxdWlya05hbWUgJiYgKGdhdGUubmFtZSA9PSBcInN3YXBcIiAmJiBnYXRlLmNvbm5lY3RvciA8IGdhdGUud2lyZXMubGVuZ3RoIC0gMiAmJiBjb250cm9sbGVkKSB8fCAoZ2F0ZS5uYW1lICE9IFwic3dhcFwiICYmIGdhdGUuY29ubmVjdG9yIDwgZ2F0ZS53aXJlcy5sZW5ndGggLSAxICYmIGNvbnRyb2xsZWQpKSB7XG5cdFx0XHRcdFx0XHRcdHF1aXJrTmFtZSA9IFwi4oCiXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gdGhyZWUtcXViaXQgZ2F0ZVxuXHRcdFx0XHRcdGlmKGJhc2ljR2F0ZS5tYXRyaXgubGVuZ3RoID09IDgpIHtcblx0XHRcdFx0XHRcdC8vIGtub3duIGdhdGUsIGJ1dCB0aGlzIGlzIGNvbnRyb2wgYml0XG5cdFx0XHRcdFx0XHRpZihxdWlya05hbWUgJiYgKGdhdGUubmFtZSA9PSBcImNzd2FwXCIgJiYgZ2F0ZS5jb25uZWN0b3IgPCBnYXRlLndpcmVzLmxlbmd0aCAtIDIgJiYgY29udHJvbGxlZCkgfHwgKGdhdGUubmFtZSAhPSBcImNzd2FwXCIgJiYgZ2F0ZS5jb25uZWN0b3IgPCBnYXRlLndpcmVzLmxlbmd0aCAtIDEgJiYgY29udHJvbGxlZCkpIHtcblx0XHRcdFx0XHRcdFx0cXVpcmtOYW1lID0gXCLigKJcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihxdWlya05hbWUpIHtcblx0XHRcdFx0XHRcdC8vIGFkZCBnYXRlIHRvIGNvbHVtblxuXHRcdFx0XHRcdFx0cXVpcmtDb2x1bW4ucHVzaChxdWlya05hbWUpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE5vdCBkaXJlY3RseSBzdXBwb3J0ZWQgYnkgcXVpcmtcblx0XHRcdFx0XHRpZighcXVpcmtOYW1lKSB7XG5cdFx0XHRcdFx0XHRxdWlya05hbWUgPSBcIn5cIiArIGdhdGUubmFtZTtcblxuXHRcdFx0XHRcdFx0aWYoYmFzaWNHYXRlLnBhcmFtcy5sZW5ndGggJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRiYXNpY0dhdGUucGFyYW1zLm1hcChmdW5jdGlvbihwYXJhbSl7XG5cdFx0XHRcdFx0XHRcdFx0YW5nbGUgPSBtYXRoLnJvdW5kKG1hdGguZXZhbHVhdGUoZ2F0ZS5vcHRpb25zLnBhcmFtc1twYXJhbV0sIGdsb2JhbFBhcmFtcyksIDMpO1xuXHRcdFx0XHRcdFx0XHRcdHF1aXJrTmFtZSArPSBcIl9cIiArIGFuZ2xlO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dmFyIG1hdHJpeCA9IFwiXCI7XG5cdFx0XHRcdFx0XHRtYXRyaXggKz0gXCJ7XCI7XG5cblx0XHRcdFx0XHRcdHZhciByYXdNYXRyaXggPSBzZWxmLmdldFJhd0dhdGUoYmFzaWNHYXRlLCBnYXRlLm9wdGlvbnMpO1xuXG5cdFx0XHRcdFx0XHR2YXIgdGFyZ2V0V2lyZXNTb3J0ZWQgPSBnYXRlV2lyZXMuc29ydCgpO1xuXHRcdFx0XHRcdFx0dmFyIHRhcmdldFdpcmVzID0gW107XG5cdFx0XHRcdFx0XHRnYXRlLndpcmVzLm1hcChmdW5jdGlvbih0V2lyZSkge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXRXaXJlcy5wdXNoKHRhcmdldFdpcmVzU29ydGVkLmluZGV4T2YodFdpcmUpKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0aWYobWF4V2lyZSAtIG1pbldpcmUgKyAxID4gZ2F0ZS53aXJlcy5sZW5ndGggfHwgZ2F0ZS53aXJlc1swXSA+IGdhdGUud2lyZXNbMV0pIHtcblx0XHRcdFx0XHRcdFx0Z2F0ZU1hdHJpeCA9IGNpcmN1aXQudHJhbnNmb3JtTWF0cml4KG1heFdpcmUgLSBtaW5XaXJlICsgMSwgcmF3TWF0cml4LCB0YXJnZXRXaXJlcyk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRnYXRlTWF0cml4ID0gcmF3TWF0cml4O1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRnYXRlTWF0cml4Lm1hcChmdW5jdGlvbihyb3csIHJvd0luZGV4KSB7XG5cdFx0XHRcdFx0XHRcdGlmKHJvd0luZGV4ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdG1hdHJpeCArPSBcIixcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRtYXRyaXggKz0gXCJ7XCI7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRyb3cubWFwKGZ1bmN0aW9uKGNvbCwgY29sSW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRpZihjb2xJbmRleCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdG1hdHJpeCArPSBcIixcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZih0eXBlb2YgY29sICE9IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbCA9IG1hdGguY29tcGxleChjb2wpLnRvU3RyaW5nKCk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbCA9IGNvbC50b1N0cmluZygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdG1hdHJpeCArPSBjb2w7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRtYXRyaXggKz0gXCJ9XCI7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdG1hdHJpeCArPSBcIn1cIjtcblx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0aWYoZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1x0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR2YXIgYWxyZWFkeURlZmluZWQgPSBxdWlyay5nYXRlcy5maW5kKGZ1bmN0aW9uKGd0KSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGd0LmlkID09IHF1aXJrTmFtZTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRpZighYWxyZWFkeURlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRxdWlyay5nYXRlcy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdGlkOiBxdWlya05hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRtYXRyaXg6IG1hdHJpeFxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR2YXIgZ2F0ZVByZXNlbnRJbkNvbCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIGNvbHVtbkVsZW1lbnQgPSAwOyBjb2x1bW5FbGVtZW50IDwgcXVpcmtDb2x1bW4ubGVuZ3RoOyBjb2x1bW5FbGVtZW50Kyspe1xuXHRcdFx0XHRcdFx0XHRcdGlmKHF1aXJrQ29sdW1uW2NvbHVtbkVsZW1lbnRdID09IHF1aXJrTmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRnYXRlUHJlc2VudEluQ29sID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdGlmKCFnYXRlUHJlc2VudEluQ29sKXtcblx0XHRcdFx0XHRcdFx0XHRxdWlya0NvbHVtbi5wdXNoKHF1aXJrTmFtZSk7XG5cdFx0XHRcdFx0XHRcdH1lbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRxdWlya0NvbHVtbi5wdXNoKDEpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRpZih3aXJlIDwgZ2F0ZS53aXJlc1swXSl7XG5cdFx0XHRcdFx0XHRcdFx0cXVpcmsuZ2F0ZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZDogcXVpcmtOYW1lLFxuXHRcdFx0XHRcdFx0XHRcdFx0bWF0cml4OiBtYXRyaXhcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgYWxyZWFkeURlZmluZWQgPSBxdWlyay5nYXRlcy5maW5kKGZ1bmN0aW9uKGd0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZ3QuaWQgPT0gcXVpcmtOYW1lO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdGlmKCFhbHJlYWR5RGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpcmsuZ2F0ZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkOiBxdWlya05hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1hdHJpeDogbWF0cml4XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVQcmVzZW50SW5Db2wgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGNvbHVtbkVsZW1lbnQgPSAwOyBjb2x1bW5FbGVtZW50IDwgcXVpcmtDb2x1bW4ubGVuZ3RoOyBjb2x1bW5FbGVtZW50Kyspe1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYocXVpcmtDb2x1bW5bY29sdW1uRWxlbWVudF0gPT0gcXVpcmtOYW1lKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Z2F0ZVByZXNlbnRJbkNvbCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdGlmKCFnYXRlUHJlc2VudEluQ29sKXtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aXJrQ29sdW1uLnB1c2gocXVpcmtOYW1lKTtcblx0XHRcdFx0XHRcdFx0XHR9ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlya0NvbHVtbi5wdXNoKDEpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgY3VzdG9tR2F0ZVdpcmVzID0gW107XG5cdFx0XHRcdFx0aXNCYXNpY0dhdGUgPSBmYWxzZTtcblx0XHRcdFx0XHRpZihnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdFx0XHR2YXIgY3VzdG9tR2F0ZUV4aXN0cyA9IGN1c3RvbUdhdGVDaXJjdWl0LmdhdGVzLmZpbmQoZnVuY3Rpb24oY3VzdG9tR2F0ZSl7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBjdXN0b21HYXRlICYmIGN1c3RvbUdhdGVbMF0gJiYgY3VzdG9tR2F0ZVswXVtcIm5hbWVcIl0gPT0gZ2F0ZS5uYW1lO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRpZighY3VzdG9tR2F0ZUV4aXN0cyl7XG5cdFx0XHRcdFx0XHRcdHZhciB3aXJlT2Zmc2V0ID0gZ2F0ZS53aXJlc1swXTtcblx0XHRcdFx0XHRcdFx0Z2F0ZS53aXJlcy5tYXAoZnVuY3Rpb24oZ2F0ZVdpcmUpe1xuXHRcdFx0XHRcdFx0XHRcdGN1c3RvbUdhdGVXaXJlcy5wdXNoKGdhdGVXaXJlIC0gd2lyZU9mZnNldCk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRjdXN0b21HYXRlQ2lyY3VpdC5yZWdpc3RlckdhdGUoZ2F0ZS5uYW1lLCBzZWxmLmN1c3RvbUdhdGVzW2dhdGUubmFtZV0pO1xuXHRcdFx0XHRcdFx0XHRjdXN0b21HYXRlQ2lyY3VpdC5hcHBlbmRHYXRlKGdhdGUubmFtZSwgY3VzdG9tR2F0ZVdpcmVzKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHF1aXJrQ29sdW1uLnB1c2goXCJ+XCIgKyBnYXRlLm5hbWUpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRxdWlya0NvbHVtbi5wdXNoKDEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRxdWlyay5jb2xzLnB1c2gocXVpcmtDb2x1bW4pO1xuXHR9XHRcdFxuXHRcblx0XG5cdC8vIHVzZXIgZGVmaW5lZCBnYXRlc1xuXHRpZighZGVjb21wb3NlKSB7XG5cdFx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdFx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpIHtcblx0XHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdGlmKCFiYXNpY0dhdGUpIHtcblx0XHRcdFx0dmFyIGN1c3RvbUdhdGUgPSBzZWxmLmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdGlmKGN1c3RvbUdhdGUpIHtcblx0XHRcdFx0XHR2YXIgY3VzdG9tQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdGZvcihjdXN0b21Db2wgPSAwOyBjdXN0b21Db2wgPCBjdXN0b21HYXRlQ2lyY3VpdC5udW1Db2xzKCk7IGN1c3RvbUNvbCsrKXtcblx0XHRcdFx0XHRcdGZvcihjdXN0b21XaXJlID0gMDsgY3VzdG9tV2lyZSA8IGN1c3RvbUdhdGVDaXJjdWl0Lm51bUdhdGVzKCk7IGN1c3RvbVdpcmUrKyl7XG5cdFx0XHRcdFx0XHRcdHZhciBjaXJjdWl0R2F0ZSA9IGN1c3RvbUdhdGVDaXJjdWl0LmdldEdhdGVBdChjdXN0b21Db2wsIGN1c3RvbVdpcmUpO1xuXHRcdFx0XHRcdFx0XHRpZihjaXJjdWl0R2F0ZSAmJiBjaXJjdWl0R2F0ZS5uYW1lID09IHVzZWRHYXRlTmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0Y3VzdG9tR2F0ZU9iaiA9IGN1c3RvbUdhdGVDaXJjdWl0LmRlY29tcG9zZUdhdGVBdChjdXN0b21Db2wsIGN1c3RvbVdpcmUpO1xuXHRcdFx0XHRcdFx0XHRcdGN1c3RvbUNpcmN1aXQubG9hZChjdXN0b21HYXRlT2JqKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRxdWlyay5nYXRlcy5wdXNoKHtcblx0XHRcdFx0XHRcdGlkOiBcIn5cIiArIHVzZWRHYXRlTmFtZSxcblx0XHRcdFx0XHRcdGNpcmN1aXQ6IGN1c3RvbUNpcmN1aXQuZXhwb3J0UXVpcmsodHJ1ZSlcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIHF1aXJrO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0Q2lycSA9IGZ1bmN0aW9uKGNvbW1lbnQsIGRlY29tcG9zZSwgZXhwb3J0QXNHYXRlTmFtZSwgdmVyc2lvblN0ciwgYXNKdXB5dGVyLCBzaG90cywgZXhwb3J0VGZxKSB7XG5cdHZhciBvcHRpb25zID0ge1xuXHRcdGNvbW1lbnQ6IGNvbW1lbnQsXG5cdFx0ZGVjb21wb3NlOiBkZWNvbXBvc2UsXG5cdFx0dmVyc2lvblN0cjogdmVyc2lvblN0cixcblx0XHRhc0p1cHl0ZXI6IGFzSnVweXRlcixcblx0XHRzaG90czogc2hvdHMsXG5cdFx0ZXhwb3J0VGZxOiBleHBvcnRUZnFcblx0fTtcblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9DaXJxKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpO1xufVxuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRRU2hhcnAgPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGV4cG9ydEFzR2F0ZU5hbWUsIHZlcnNpb25TdHIsIGFzSnVweXRlciwgY2lyY3VpdE5hbWUsIGluZGVudERlcHRoKSB7XG5cdHZhciBvcHRpb25zID0ge1xuXHRcdGNvbW1lbnQ6IGNvbW1lbnQsXG5cdFx0ZGVjb21wb3NlOiBkZWNvbXBvc2UsXG5cdFx0dmVyc2lvblN0cjogdmVyc2lvblN0cixcblx0XHRhc0p1cHl0ZXI6IGFzSnVweXRlcixcblx0XHRjaXJjdWl0TmFtZTogY2lyY3VpdE5hbWUsXG5cdFx0aW5kZW50RGVwdGg6IGluZGVudERlcHRoXG5cdH07XG5cdHJldHVybiB0aGlzLmV4cG9ydFRvUVNoYXJwKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpO1xufVxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0UW9iaiA9IGZ1bmN0aW9uKGNpcmN1aXROYW1lLCBleHBlcmltZW50TmFtZSwgbnVtU2hvdHMsIGNpcmN1aXRSZXBsYWNlbWVudCkge1xuXHR2YXIgb3B0aW9ucyA9IHtcblx0XHRjaXJjdWl0TmFtZTogY2lyY3VpdE5hbWUsXG5cdFx0ZXhwZXJpbWVudE5hbWU6IGV4cGVyaW1lbnROYW1lLFxuXHRcdG51bVNob3RzOiBudW1TaG90c1xuXHR9O1xuXHRcblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9Rb2JqKG9wdGlvbnMsIGNpcmN1aXRSZXBsYWNlbWVudClcdFxufVxuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5pbXBvcnRRb2JqID0gZnVuY3Rpb24ocW9iaiwgZXJyb3JDYWxsYmFjaykge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0dGhpcy5pbml0KCk7XG5cblx0aWYoIXFvYmogfHwgIXFvYmouZXhwZXJpbWVudHMgfHwgIXFvYmouZXhwZXJpbWVudHMubGVuZ3RoKSB7XG5cdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBcIkludmFsaWQgaW5wdXQgZmlsZTogbm8gZXhwZXJpbWVudHMgZm91bmQuXCIgfSBdKTtcblx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dmFyIGV4cGVyaW1lbnQgPSBxb2JqLmV4cGVyaW1lbnRzWzBdO1xuXG5cdHZhciBoZWFkZXIgPSBleHBlcmltZW50LmhlYWRlciB8fCB7fTtcblxuXHQvLyBBZGQgcXViaXRzXG5cdHRoaXMuaW5pdChwYXJzZUludChoZWFkZXIubl9xdWJpdHMgfHwgMCkpO1xuXG5cdC8vIENsYXNzaWNhbCByZWdpc3RlcnNcblx0dmFyIGNyZWdEYXRhID0ge307XG5cdGlmKGhlYWRlci5jcmVnX3NpemVzICYmIGhlYWRlci5jcmVnX3NpemVzLmxlbmd0aCkge1xuXHRcdHZhciB0b3RhbEJpdHMgPSAwO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBoZWFkZXIuY3JlZ19zaXplcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGNyZWdEZWYgPSBoZWFkZXIuY3JlZ19zaXplc1tpXTtcblx0XHRcdGlmKGNyZWdEZWYubGVuZ3RoID4gMSkge1xuXHRcdFx0XHR2YXIgY3JlZ05hbWUgPSBjcmVnRGVmWzBdICsgXCJcIjtcblx0XHRcdFx0dmFyIGNyZWdMZW4gPSBwYXJzZUludChjcmVnRGVmWzFdKTtcblx0XHRcdFx0dGhpcy5jcmVhdGVDcmVnKGNyZWdOYW1lLCBjcmVnTGVuKTtcblxuXHRcdFx0XHR2YXIgY3JlZ01hc2sgPSAoKDEgPDwgKHRvdGFsQml0cyArIGNyZWdMZW4pKSAtICgxIDw8IHRvdGFsQml0cykpO1xuXG5cdFx0XHRcdGNyZWdEYXRhW2NyZWdOYW1lXSA9IHtcblx0XHRcdFx0XHRtYXNrOiBjcmVnTWFzayxcblx0XHRcdFx0XHRvZmZzZXQ6IHRvdGFsQml0c1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdHRvdGFsQml0cyArPSBjcmVnTGVuO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiBjbGFzc2ljYWwgY29uZGl0aW9uIGFyZ3VtZW50IGZvciBnYXRlIGZyb20gYmZ1bmMgbWFzayBhbmQgdmFsdWVcblx0ZnVuY3Rpb24gY29uZGl0aW9uRnJvbU1hc2tBbmRWYWx1ZShtYXNrLCB2YWx1ZSkge1xuXHRcdGZvcih2YXIgY3JlZ05hbWUgaW4gY3JlZ0RhdGEpIHtcblx0XHRcdHZhciBkYXRhID0gY3JlZ0RhdGFbY3JlZ05hbWVdO1xuXG5cdFx0XHRpZihkYXRhLm1hc2sgPT0gbWFzaykge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGNyZWc6IGNyZWdOYW1lLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZSA+PiBkYXRhLm9mZnNldFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gT2J0YWluIGNsYXNzaWNhbCByZWdpc3RlciBuYW1lIGFuZCBsb2NhbCBiaXQgbnVtYmVyIGZyb20gZ2xvYmFsIGJpdCBudW1iZXJcblx0ZnVuY3Rpb24gbWVtb3J5VG9DcmVnKG1lbW9yeSkge1xuXHRcdHZhciB0b3RhbEJpdHMgPSAwO1xuXHRcdGZvcih2YXIgY3JlZ05hbWUgaW4gc2VsZi5jcmVncykge1xuXHRcdFx0dmFyIGNyZWcgPSBzZWxmLmNyZWdzW2NyZWdOYW1lXTtcblx0XHRcdGlmKCh0b3RhbEJpdHMgKyBjcmVnLmxlbmd0aCkgPiBtZW1vcnkpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRuYW1lOiBjcmVnTmFtZSxcblx0XHRcdFx0XHRiaXQ6IG1lbW9yeSAtIHRvdGFsQml0c1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdFx0dG90YWxCaXRzICs9IGNyZWcubGVuZ3RoO1xuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIEFkZCBnYXRlc1xuXHR2YXIgaW5zdHJ1Y3Rpb25zID0gZXhwZXJpbWVudC5pbnN0cnVjdGlvbnMgfHwgW107XG5cdHZhciBjb25kaXRpb25zID0ge307XG5cdGZvcih2YXIgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgZXhwZXJpbWVudC5pbnN0cnVjdGlvbnMubGVuZ3RoOyBpbnN0SW5kZXgrKykge1xuXHRcdHZhciBpbnN0ID0gZXhwZXJpbWVudC5pbnN0cnVjdGlvbnNbaW5zdEluZGV4XTtcblxuXHRcdHN3aXRjaChpbnN0Lm5hbWUpIHtcblx0XHRcdC8vIGNsYXNzaWNhbCBjb250cm9sXG5cdFx0XHRjYXNlIFwiYmZ1bmNcIjoge1xuXHRcdFx0XHR2YXIgY29uZGl0aW9uID0gY29uZGl0aW9uRnJvbU1hc2tBbmRWYWx1ZShwYXJzZUludChpbnN0Lm1hc2spLCBwYXJzZUludChpbnN0LnZhbCkpO1xuXG5cdFx0XHRcdGlmKCFjb25kaXRpb24pIHtcblx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGNsYXNzaWNhbCBjb25kaXRpb24uXCI7XG5cdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UgfSBdKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uZGl0aW9uc1tpbnN0LnJlZ2lzdGVyXSA9IGNvbmRpdGlvbjtcblx0XHRcdH07IGJyZWFrO1xuXG5cdFx0XHQvLyBNZWFzdXJlbWVudFxuXHRcdFx0Y2FzZSBcIm1lYXN1cmVcIjoge1xuXHRcdFx0XHRmb3IodmFyIHFJbmRleCA9IDA7IHFJbmRleCA8IGluc3QucXViaXRzLmxlbmd0aDsgcUluZGV4KyspIHtcblx0XHRcdFx0XHR2YXIgcXViaXQgPSBpbnN0LnF1Yml0c1txSW5kZXhdO1xuXHRcdFx0XHRcdHZhciBtZW1vcnkgPSBpbnN0Lm1lbW9yeVtxSW5kZXhdO1xuXHRcdFx0XHRcdHZhciBjcmVnID0gbWVtb3J5VG9DcmVnKG1lbW9yeSk7XG5cdFx0XHRcdFx0aWYoIWNyZWcpIHtcblx0XHRcdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgbWVhc3VyZW1lbnQgZGVzdGluYXRpb24uXCI7XG5cdFx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlIH0gXSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0fVx0XHRcdFx0XHRcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgb3B0aW9ucyA9IHsgY3JlZzogY3JlZyB9O1xuXG5cdFx0XHRcdFx0dGhpcy5hcHBlbmRHYXRlKFwibWVhc3VyZVwiLCBxdWJpdCwgb3B0aW9ucyk7XG5cdFx0XHRcdH1cblx0XHRcdH07IGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiYmFycmllclwiOiB7XG5cdFx0XHRcdC8vICEhISBOb3QgaW1wbGVtZW50ZWQgeWV0LiBJZ25vcmUgZm9yIG5vdy5cblx0XHRcdH07IGJyZWFrO1xuXG5cdFx0XHQvLyBOb3JtYWwgZ2F0ZVxuXHRcdFx0ZGVmYXVsdDoge1xuXHRcdFx0XHR2YXIgb3B0aW9ucyA9IHtcblx0XHRcdFx0XHRwYXJhbXM6IHt9LFxuXHRcdFx0XHRcdGNvbmRpdGlvbjoge31cblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBGaW5kIGdhdGUgZGVmaW5pdGlvblxuXHRcdFx0XHR2YXIgZ2F0ZU5hbWUgPSBpbnN0Lm5hbWU7XG5cdFx0XHRcdHN3aXRjaChnYXRlTmFtZSkge1xuXHRcdFx0XHRcdGNhc2UgXCJpZGVuXCI6IGdhdGVOYW1lID0gXCJpZFwiOyBicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBnYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0aWYoIWdhdGVEZWYpIHtcblx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJVbmtub3duIGdhdGUgXFxcIlwiICsgaW5zdC5uYW1lICsgXCJcXFwiLlwiO1xuXHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlIH0gXSk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEdhdGUgcGFyYW1zIChpZiBhbnkpXG5cdFx0XHRcdGlmKGdhdGVEZWYucGFyYW1zICYmIGdhdGVEZWYucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0XHRcdGlmKCFpbnN0LnBhcmFtcyB8fCAhaW5zdC5wYXJhbXMubGVuZ3RoIHx8IGluc3QucGFyYW1zLmxlbmd0aCAhPSBnYXRlRGVmLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgbnVtYmVyIG9mIHBhcmFtcyBmb3IgZ2F0ZSBcXFwiXCIgKyBpbnN0Lm5hbWUgKyBcIlxcXCIuXCI7XG5cdFx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlIH0gXSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGZvcih2YXIgcGFySW5kZXggPSAwOyBwYXJJbmRleCA8IGdhdGVEZWYucGFyYW1zLmxlbmd0aDsgcGFySW5kZXgrKykge1xuXHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IGdhdGVEZWYucGFyYW1zW3BhckluZGV4XTtcblx0XHRcdFx0XHRcdG9wdGlvbnMucGFyYW1zW3BhcmFtTmFtZV0gPSBpbnN0LnBhcmFtc1twYXJJbmRleF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2xhc3NpY2FsIGNvbnRyb2wgKGlmIGFueSlcblx0XHRcdFx0aWYodHlwZW9mIGluc3QuY29uZGl0aW9uYWwgIT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRcdHZhciBjb25kaXRpb24gPSBjb25kaXRpb25zW2luc3QuY29uZGl0aW9uYWxdO1xuXHRcdFx0XHRcdGlmKCFjb25kaXRpb24pIHtcblx0XHRcdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgY2xhc3NpY2FsIGNvbmRpdGlvbi5cIjtcblx0XHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UgfSBdKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG9wdGlvbnMuY29uZGl0aW9uID0gY29uZGl0aW9uO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQWRkIGdhdGUgdG8gY2lyY3VpdFxuXHRcdFx0XHR0aGlzLmFwcGVuZEdhdGUoZ2F0ZU5hbWUsIGluc3QucXViaXRzLCBvcHRpb25zKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBUaGlzIGVycm9yIGhhbmRsaW5nIGlzIGNyKnAgYnV0IGxldCdzIGJlIGNvbnNpc3RlbnQgd2l0aCBpbXBvcnRRQVNNKCkgZm9yIG5vd1xuXHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0ZXJyb3JDYWxsYmFjayhbXSk7XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRURlEgPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGV4cG9ydEFzR2F0ZU5hbWUsIHZlcnNpb25TdHIsIGFzSnVweXRlciwgc2hvdHMpIHtcblx0dmFyIG9wdGlvbnMgPSB7XG5cdFx0Y29tbWVudDogY29tbWVudCxcblx0XHRkZWNvbXBvc2U6IGRlY29tcG9zZSxcblx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyLFxuXHRcdGFzSnVweXRlcjogYXNKdXB5dGVyLFxuXHRcdHNob3RzOiBzaG90c1xuXHR9O1xuXHRyZXR1cm4gdGhpcy5leHBvcnRUb1RGUShvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKTtcbn1cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydEJyYWtldCA9IGZ1bmN0aW9uKGNvbW1lbnQsIGRlY29tcG9zZSwgZXhwb3J0QXNHYXRlTmFtZSwgdmVyc2lvblN0ciwgYXNKdXB5dGVyLCBzaG90cywgaHlicmlkLCBpbmRlbnREZXB0aCkge1xuXHR2YXIgb3B0aW9ucyA9IHtcblx0XHRjb21tZW50OiBjb21tZW50LFxuXHRcdGRlY29tcG9zZTogZGVjb21wb3NlLFxuXHRcdHZlcnNpb25TdHI6IHZlcnNpb25TdHIsXG5cdFx0YXNKdXB5dGVyOiBhc0p1cHl0ZXIsXG5cdFx0c2hvdHM6IHNob3RzLFxuXHRcdGh5YnJpZDogaHlicmlkLFxuXHRcdGluZGVudERlcHRoOiBpbmRlbnREZXB0aFxuXHR9O1xuXG5cdHJldHVybiB0aGlzLmV4cG9ydFRvQnJha2V0KG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpO1xufVxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0U1ZHID0gZnVuY3Rpb24oZW1iZWRkZWQsIG9wdGlvbnMpIHtcblx0dmFyIG5ld09wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXHRuZXdPcHRpb25zLmVtYmVkZGVkID0gISFlbWJlZGRlZDtcblxuXHRyZXR1cm4gdGhpcy5leHBvcnRUb1NWRyhuZXdPcHRpb25zKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb1NWRyA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXHR2YXIgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0b3B0aW9ucy5lbWJlZGRlZCA9IG9wdGlvbnMuZW1iZWRkZWQgfHwgZmFsc2U7XG5cdG9wdGlvbnMuY2VsbFdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGggfHwgNDA7XG5cdG9wdGlvbnMuY2VsbEhlaWdodCA9IG9wdGlvbnMuY2VsbEhlaWdodCB8fCA0MDtcblx0b3B0aW9ucy5oU3BhY2luZyA9IG9wdGlvbnMuaFNwYWNpbmcgfHwgMjg7XG5cdG9wdGlvbnMudlNwYWNpbmcgPSBvcHRpb25zLnZTcGFjaW5nIHx8IDM0O1xuXHRvcHRpb25zLmJsYWNrYm94UGFkZGluZ1ggPSBvcHRpb25zLmJsYWNrYm94UGFkZGluZ1ggfHwgMjtcblx0b3B0aW9ucy5ibGFja2JveFBhZGRpbmdZID0gb3B0aW9ucy5ibGFja2JveFBhZGRpbmdZIHx8IDI7XG5cdG9wdGlvbnMuYmxhY2tib3hMaW5lQ29sb3IgPSBvcHRpb25zLmJsYWNrYm94TGluZUNvbG9yIHx8IFwiYmxhY2tcIjtcblx0b3B0aW9ucy5ibGFja2JveFNlbGVjdGVkTGluZUNvbG9yID0gb3B0aW9ucy5ibGFja2JveFNlbGVjdGVkTGluZUNvbG9yIHx8IFwiYmxhY2tcIjtcblx0b3B0aW9ucy53aXJlQ29sb3IgPSBvcHRpb25zLndpcmVDb2xvciB8fCBcImJsYWNrXCI7XG5cdG9wdGlvbnMuZ2F0ZUxpbmVDb2xvciA9IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvciB8fCBcImJsYWNrXCI7XG5cdG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yID0gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgfHwgXCJibGFja1wiO1xuXHRvcHRpb25zLmNXaXJlQ29sb3IgPSBvcHRpb25zLmNXaXJlQ29sb3IgfHwgXCJzaWx2ZXJcIjtcblx0b3B0aW9ucy5jV2lyZVNlbGVjdGVkQ29sb3IgPSBvcHRpb25zLmNXaXJlU2VsZWN0ZWRDb2xvciB8fCBcInNpbHZlclwiO1xuXHRvcHRpb25zLmNBcnJvd1NpemUgPSBvcHRpb25zLmNBcnJvd1NpemUgfHwgMTA7XG5cdG9wdGlvbnMuaFdpcmVDb2xvciA9IG9wdGlvbnMuaFdpcmVDb2xvciB8fCBcImJsYWNrXCI7XG5cdG9wdGlvbnMud2lyZVdpZHRoID0gb3B0aW9ucy53aXJlV2lkdGggfHwgMTtcblx0b3B0aW9ucy53aXJlVGV4dEhlaWdodCA9IG9wdGlvbnMud2lyZVRleHRIZWlnaHQgfHwgODtcblx0b3B0aW9ucy53aXJlVGV4dERvd24gPSBvcHRpb25zLndpcmVUZXh0RG93biB8fCAxNjtcblx0b3B0aW9ucy53aXJlTWFyZ2luID0gb3B0aW9ucy53aXJlTWFyZ2luIHx8IDIwO1xuXHRvcHRpb25zLndpcmVMYWJlbFdpZHRoID0gb3B0aW9ucy53aXJlTGFiZWxXaWR0aCB8fCA0MDtcblx0b3B0aW9ucy5kb3RSYWRpdXMgPSBvcHRpb25zLmRvdFJhZGl1cyB8fCA1O1xuXHRvcHRpb25zLnBhcmFtVGV4dEhlaWdodCA9IG9wdGlvbnMucGFyYW1UZXh0SGVpZ2h0IHx8IDY7XG5cdG9wdGlvbnMuc2VsZWN0aW9uUGFkZGluZ1ggPSBvcHRpb25zLnNlbGVjdGlvblBhZGRpbmdYIHx8IDQ7XG5cdG9wdGlvbnMuc2VsZWN0aW9uUGFkZGluZ1kgPSBvcHRpb25zLnNlbGVjdGlvblBhZGRpbmdZIHx8IDQ7XG5cdG9wdGlvbnMuc2VsZWN0aW9uTGluZUNvbG9yID0gb3B0aW9ucy5zZWxlY3Rpb25MaW5lQ29sb3IgfHwgXCIjMjE4NUQwXCI7XG5cdG9wdGlvbnMuZHJhd0Jsb2NoU3BoZXJlcyA9IG9wdGlvbnMuZHJhd0Jsb2NoU3BoZXJlcyB8fCBmYWxzZTtcblxuXHRpZih0eXBlb2Ygb3B0aW9ucy5kcmF3SHlicmlkID09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRvcHRpb25zLmRyYXdIeWJyaWQgPSB0aGlzLm9wdGlvbnMgPyAhIXRoaXMub3B0aW9ucy5oeWJyaWQgOiBmYWxzZTtcblx0fVxuXG5cdHZhciBnZXRDcmVnSW5kZXggPSBmdW5jdGlvbihuYW1lKSB7XG5cdFx0dmFyIGNyZWdJbmRleCA9IDA7XG5cdFx0Zm9yKHZhciBjcmVnTmFtZSBpbiBzZWxmLmNyZWdzKSB7XG5cdFx0XHRpZihjcmVnTmFtZSA9PSBuYW1lKSB7XG5cdFx0XHRcdHJldHVybiBjcmVnSW5kZXg7XG5cdFx0XHR9XG5cdFx0XHRjcmVnSW5kZXgrKztcblx0XHR9XG5cdFx0cmV0dXJuIGNyZWdJbmRleDtcblx0fTtcblxuXHR2YXIgZ2V0Q2VsbFggPSBmdW5jdGlvbihjb2wpIHtcblx0XHRyZXR1cm4gb3B0aW9ucy53aXJlTGFiZWxXaWR0aCArICgob3B0aW9ucy5jZWxsV2lkdGggKyBvcHRpb25zLmhTcGFjaW5nKSAqIGNvbCkgKyBvcHRpb25zLmhTcGFjaW5nO1xuXHR9O1xuXG5cdHZhciBnZXRDZWxsWSA9IGZ1bmN0aW9uKHdpcmUpIHtcblx0XHRyZXR1cm4gKChvcHRpb25zLmNlbGxIZWlnaHQgKyBvcHRpb25zLnZTcGFjaW5nKSAqIHdpcmUpICsgb3B0aW9ucy52U3BhY2luZztcblx0fTtcblxuXHR2YXIgbnVtUm93cyA9IHRoaXMubnVtUXViaXRzO1xuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHR2YXIgbnVtQ3JlZ3MgPSB0aGlzLmNyZWdDb3VudCgpO1xuXG5cdHZhciB0b3RhbENvbHMgPSBudW1Db2xzO1xuXHQvLyByZXNlcnZlIGNvbCBmb3IgYmxvY2ggc3BoZXJlc1xuXHRpZihvcHRpb25zLmRyYXdCbG9jaFNwaGVyZXMpIHtcblx0XHR0b3RhbENvbHMrKztcblx0fVxuXG5cdHZhciB0b3RhbFdpcmVDb2xzID0gdG90YWxDb2xzO1xuXG5cdC8vIHJlc2VydmUgMiBjb2xzIGZvciBoeWJyaWQgcXVhbnR1bS1jbGFzc2ljYWwgY29ubmVjdG9yXG5cdGlmKG9wdGlvbnMuZHJhd0h5YnJpZCkge1xuXHRcdHRvdGFsQ29scyArPSAyO1xuXHR9XG5cblx0dmFyIHRvdGFsV2lkdGggPSBnZXRDZWxsWCh0b3RhbENvbHMpO1xuXHR2YXIgdG90YWxXaXJlV2lkdGggPSBnZXRDZWxsWCh0b3RhbFdpcmVDb2xzKTtcblx0dmFyIHRvdGFsSGVpZ2h0ID0gKChvcHRpb25zLmNlbGxIZWlnaHQgKyBvcHRpb25zLnZTcGFjaW5nKSAqIChudW1Sb3dzICsgbnVtQ3JlZ3MgKyAob3B0aW9ucy5kcmF3SHlicmlkID8gMSA6IDApKSkgKyBvcHRpb25zLnZTcGFjaW5nO1xuXG5cdHZhciBoeWJyaWRZID0gKChvcHRpb25zLmNlbGxIZWlnaHQgKyBvcHRpb25zLnZTcGFjaW5nKSAqIChudW1Sb3dzICsgbnVtQ3JlZ3MpKSArIG9wdGlvbnMudlNwYWNpbmc7XG5cdHZhciBoeWJyaWRXaXJlWSA9ICgob3B0aW9ucy5jZWxsSGVpZ2h0ICsgb3B0aW9ucy52U3BhY2luZykgKiAobnVtUm93cyArIG51bUNyZWdzKSkgKyAob3B0aW9ucy52U3BhY2luZyArIChvcHRpb25zLmNlbGxIZWlnaHQgLyAyKSk7XG5cblx0ZnVuY3Rpb24gcG9sYXJUb0NhcnRlc2lhbihjZW50ZXJYLCBjZW50ZXJZLCByYWRpdXMsIGFuZ2xlSW5EZWdyZWVzKSB7XG5cdFx0dmFyIGFuZ2xlSW5SYWRpYW5zID0gKGFuZ2xlSW5EZWdyZWVzIC0gOTApICogTWF0aC5QSSAvIDE4MC4wO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdFx0eDogY2VudGVyWCArIChyYWRpdXMgKiBNYXRoLmNvcyhhbmdsZUluUmFkaWFucykpLFxuXHRcdFx0XHR5OiBjZW50ZXJZICsgKHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlSW5SYWRpYW5zKSlcblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gZGVzY3JpYmVBcmMoeCwgeSwgcmFkaXVzLCBzdGFydEFuZ2xlLCBlbmRBbmdsZSl7XG5cblx0XHR2YXIgc3RhcnQgPSBwb2xhclRvQ2FydGVzaWFuKHgsIHksIHJhZGl1cywgZW5kQW5nbGUpO1xuXHRcdHZhciBlbmQgPSBwb2xhclRvQ2FydGVzaWFuKHgsIHksIHJhZGl1cywgc3RhcnRBbmdsZSk7XG5cblx0XHR2YXIgbGFyZ2VBcmNGbGFnID0gZW5kQW5nbGUgLSBzdGFydEFuZ2xlIDw9IDE4MCA/IFwiMFwiIDogXCIxXCI7XG5cblx0XHR2YXIgZCA9IFtcblx0XHRcdFwiTVwiLCBzdGFydC54LCBzdGFydC55LFxuXHRcdFx0XCJBXCIsIHJhZGl1cywgcmFkaXVzLCAwLCBsYXJnZUFyY0ZsYWcsIDAsIGVuZC54LCBlbmQueVxuXHRcdF0uam9pbihcIiBcIik7XG5cblx0XHRyZXR1cm4gZDtcblx0fVxuXG5cdHZhciBxV2lyZVkgPSBmdW5jdGlvbih3aXJlKSB7XG5cdFx0cmV0dXJuICgob3B0aW9ucy5jZWxsSGVpZ2h0ICsgb3B0aW9ucy52U3BhY2luZykgKiB3aXJlKSArIChvcHRpb25zLnZTcGFjaW5nICsgKG9wdGlvbnMuY2VsbEhlaWdodCAvIDIpKTtcblx0fTtcblxuXHR2YXIgcUdhdGVZID0gZnVuY3Rpb24od2lyZSkge1xuXHRcdHJldHVybiAoKG9wdGlvbnMuY2VsbEhlaWdodCArIG9wdGlvbnMudlNwYWNpbmcpICogd2lyZSkgKyBvcHRpb25zLnZTcGFjaW5nO1xuXHR9O1xuXG5cdHZhciBjV2lyZVkgPSBmdW5jdGlvbihjcmVnTmFtZSkge1xuXHRcdHJldHVybiAoKG9wdGlvbnMuY2VsbEhlaWdodCArIG9wdGlvbnMudlNwYWNpbmcpICogKG51bVJvd3MgKyBnZXRDcmVnSW5kZXgoY3JlZ05hbWUpKSkgKyAob3B0aW9ucy52U3BhY2luZyArIChvcHRpb25zLmNlbGxIZWlnaHQgLyAyKSk7XG5cdH07XG5cblxuXHRmdW5jdGlvbiBnYXRlQm94U1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIGdhdGVMYWJlbCwgc2VsZWN0ZWQpIHtcblxuXHRcdHZhciBnYXRlV2lkdGggPSBvcHRpb25zLmNlbGxXaWR0aDtcblx0XHR2YXIgZ2F0ZUhlaWdodCA9IG9wdGlvbnMuY2VsbEhlaWdodDtcblxuXHRcdHZhciByZXMgPSBcIlwiO1xuXG5cdFx0cmVzICs9IFwiPHJlY3QgY2xhc3M9XFxcInFjLWdhdGUtYm94XFxcIiB4PVxcXCJcIiArIGdhdGVYICsgXCJcXFwiIHk9XFxcIlwiICsgZ2F0ZVkgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgZ2F0ZVdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBnYXRlSGVpZ2h0ICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvcikgKyBcIlxcXCIgZmlsbD1cXFwid2hpdGVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRpZihnYXRlTGFiZWwpIHtcblx0XHRcdHJlcyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy1nYXRlLWxhYmVsXFxcIiB4PVxcXCJcIiArIChnYXRlWCArIChnYXRlV2lkdGggLyAyKSkgKyBcIlxcXCIgeT1cXFwiXCIgKyAoZ2F0ZVkgKyAoZ2F0ZUhlaWdodCAvIDIpKSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwibWlkZGxlXFxcIiB0ZXh0LWFuY2hvcj1cXFwibWlkZGxlXFxcIiBmaWxsPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy5nYXRlTGluZUNvbG9yKSArIFwiXFxcIj5cIiArIGdhdGVMYWJlbCArIFwiPC90ZXh0PlwiO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBnYXRlUmVjdFNWRyhnYXRlWCwgZ2F0ZVksIGdhdGVOYW1lLCBnYXRlTGFiZWwsIHNlbGVjdGVkKSB7XG5cblx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGggKiAyO1xuXHRcdHZhciBnYXRlSGVpZ2h0ID0gb3B0aW9ucy5jZWxsSGVpZ2h0O1xuXG5cdFx0dmFyIHJlcyA9IFwiXCI7XG5cblx0XHRyZXMgKz0gXCI8cmVjdCBjbGFzcz1cXFwicWMtZ2F0ZS1yZWN0XFxcIiB4PVxcXCJcIiArIGdhdGVYICsgXCJcXFwiIHk9XFxcIlwiICsgZ2F0ZVkgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgZ2F0ZVdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBnYXRlSGVpZ2h0ICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvcikgKyBcIlxcXCIgZmlsbD1cXFwid2hpdGVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRpZihnYXRlTGFiZWwpIHtcblx0XHRcdHJlcyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy1nYXRlLWxhYmVsXFxcIiB4PVxcXCJcIiArIChnYXRlWCArIChnYXRlV2lkdGggLyAyKSkgKyBcIlxcXCIgeT1cXFwiXCIgKyAoZ2F0ZVkgKyAoZ2F0ZUhlaWdodCAvIDIpKSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwibWlkZGxlXFxcIiB0ZXh0LWFuY2hvcj1cXFwibWlkZGxlXFxcIj5cIiArIGdhdGVMYWJlbCArIFwiPC90ZXh0PlwiO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBnYXRlQ2lyY2xlU1ZHKGNlbGxYLCBjZWxsWSwgZ2F0ZU5hbWUsIGdhdGVMYWJlbCwgc2VsZWN0ZWQpIHtcblx0XHR2YXIgY2VudGVyWCA9IGNlbGxYICsgKG9wdGlvbnMuY2VsbFdpZHRoIC8gMik7XG5cdFx0dmFyIGNlbnRlclkgPSBjZWxsWSArIChvcHRpb25zLmNlbGxIZWlnaHQgLyAyKTtcblxuXHRcdHZhciBnYXRlV2lkdGggPSBvcHRpb25zLmNlbGxXaWR0aCAqIDAuODtcblx0XHR2YXIgZ2F0ZUhlaWdodCA9IG9wdGlvbnMuY2VsbEhlaWdodCAqIDAuODtcblx0XHR2YXIgZ2F0ZVggPSBjZWxsWCArICgob3B0aW9ucy5jZWxsV2lkdGggLSBnYXRlV2lkdGgpIC8gMik7XG5cdFx0dmFyIGdhdGVZID0gY2VsbFkgKyAoKG9wdGlvbnMuY2VsbEhlaWdodCAtIGdhdGVIZWlnaHQpIC8gMik7XG5cblx0XHR2YXIgcmVzID0gXCJcIjtcblxuXHRcdHJlcyArPSBcIjxlbGxpcHNlIGNsYXNzPVxcXCJxYy1nYXRlLW5vdFxcXCIgY3g9XFxcIlwiICsgY2VudGVyWCArIFwiXFxcIiBjeT1cXFwiXCIgKyBjZW50ZXJZICsgXCJcXFwiIHJ4PVxcXCJcIiArIChnYXRlV2lkdGggLyAyKSArIFwiXFxcIiByeT1cXFwiXCIgKyAoZ2F0ZUhlaWdodCAvIDIpICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvcikgKyBcIlxcXCIgZmlsbD1cXFwid2hpdGVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRpZihnYXRlTGFiZWwpIHtcblx0XHRcdHJlcyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy1nYXRlLWxhYmVsXFxcIiB4PVxcXCJcIiArIChnYXRlWCArIChnYXRlV2lkdGggLyAyKSkgKyBcIlxcXCIgeT1cXFwiXCIgKyAoZ2F0ZVkgKyAoZ2F0ZUhlaWdodCAvIDIpKSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwibWlkZGxlXFxcIiB0ZXh0LWFuY2hvcj1cXFwibWlkZGxlXFxcIj5cIiArIGdhdGVMYWJlbCArIFwiPC90ZXh0PlwiO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBnYXRlTm90U1ZHKGNlbGxYLCBjZWxsWSwgZ2F0ZU5hbWUsIHNlbGVjdGVkKSB7XG5cdFx0dmFyIGNlbnRlclggPSBjZWxsWCArIChvcHRpb25zLmNlbGxXaWR0aCAvIDIpO1xuXHRcdHZhciBjZW50ZXJZID0gY2VsbFkgKyAob3B0aW9ucy5jZWxsSGVpZ2h0IC8gMik7XG5cblx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGggKiAwLjg7XG5cdFx0dmFyIGdhdGVIZWlnaHQgPSBvcHRpb25zLmNlbGxIZWlnaHQgKiAwLjg7XG5cdFx0dmFyIGdhdGVYID0gY2VsbFggKyAoKG9wdGlvbnMuY2VsbFdpZHRoIC0gZ2F0ZVdpZHRoKSAvIDIpO1xuXHRcdHZhciBnYXRlWSA9IGNlbGxZICsgKChvcHRpb25zLmNlbGxIZWlnaHQgLSBnYXRlSGVpZ2h0KSAvIDIpO1xuXG5cblx0XHR2YXIgcmVzID0gXCJcIjtcblxuXHRcdHJlcyArPSBcIjxlbGxpcHNlIGNsYXNzPVxcXCJxYy1nYXRlLW5vdFxcXCIgY3g9XFxcIlwiICsgY2VudGVyWCArIFwiXFxcIiBjeT1cXFwiXCIgKyBjZW50ZXJZICsgXCJcXFwiIHJ4PVxcXCJcIiArIChnYXRlV2lkdGggLyAyKSArIFwiXFxcIiByeT1cXFwiXCIgKyAoZ2F0ZUhlaWdodCAvIDIpICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvcikgKyBcIlxcXCIgZmlsbD1cXFwid2hpdGVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRyZXMgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtZ2F0ZS1ub3QtbGluZVxcXCIgeDE9XFxcIlwiICsgY2VudGVyWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyBjZW50ZXJYICsgXCJcXFwiIHkxPVxcXCJcIiArIGdhdGVZICtcIlxcXCIgeTI9XFxcIlwiICsgKGdhdGVZICsgZ2F0ZUhlaWdodCkgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy5nYXRlTGluZUNvbG9yKSArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0cmVzICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLWdhdGUtbm90LWxpbmVcXFwiIHgxPVxcXCJcIiArIGdhdGVYICsgXCJcXFwiIHgyPVxcXCJcIiArIChnYXRlWCArIGdhdGVXaWR0aCkgKyBcIlxcXCIgeTE9XFxcIlwiICsgY2VudGVyWSArXCJcXFwiIHkyPVxcXCJcIiArIGNlbnRlclkgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy5nYXRlTGluZUNvbG9yKSArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2F0ZUdhdWdlU1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIHNlbGVjdGVkKSB7XG5cdFx0dmFyIGdhdGVXaWR0aCA9IG9wdGlvbnMuY2VsbFdpZHRoO1xuXHRcdHZhciBnYXRlSGVpZ2h0ID0gb3B0aW9ucy5jZWxsSGVpZ2h0O1xuXHRcdHZhciBjZW50ZXJYID0gZ2F0ZVggKyAoZ2F0ZVdpZHRoIC8gMik7XG5cdFx0dmFyIGNlbnRlclkgPSBnYXRlWSArIChnYXRlSGVpZ2h0IC8gMik7XG5cdFx0dmFyIG1vdmVkb3duID0gZ2F0ZUhlaWdodCAvIDU7XG5cblx0XHR2YXIgcmVzID0gXCJcIjtcblxuXHRcdHJlcyArPSBcIjxyZWN0IGNsYXNzPVxcXCJxYy1nYXRlLWJveFxcXCIgeD1cXFwiXCIgKyBnYXRlWCArIFwiXFxcIiB5PVxcXCJcIiArIGdhdGVZICsgXCJcXFwiIHdpZHRoPVxcXCJcIiArIGdhdGVXaWR0aCArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgZ2F0ZUhlaWdodCArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLmdhdGVMaW5lQ29sb3IpICsgXCJcXFwiIGZpbGw9XFxcIndoaXRlXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0cmVzICs9IFwiPHBhdGggY2xhc3M9XFxcImdjLWdhdGUtZ2F1Z2UtYXJjXFxcIiBkPVxcXCJcIiArIGRlc2NyaWJlQXJjKGNlbnRlclgsIGNlbnRlclkgKyBtb3ZlZG93biwgZ2F0ZVdpZHRoIC8gMi4zLCAzMDAsIDYwKSArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLmdhdGVMaW5lQ29sb3IpICsgXCJcXFwiIGZpbGw9XFxcIm5vbmVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRyZXMgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtZ2F0ZS1nYXVnZS1zY2FsZVxcXCIgeDE9XFxcIlwiICsgY2VudGVyWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyAoKGdhdGVYICsgZ2F0ZVdpZHRoKSAtIG1vdmVkb3duKSArIFwiXFxcIiB5MT1cXFwiXCIgKyAoY2VudGVyWSArIG1vdmVkb3duKSArIFwiXFxcIiB5Mj1cXFwiXCIgKyAoZ2F0ZVkgKyBtb3ZlZG93bikgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy5nYXRlTGluZUNvbG9yKSArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2F0ZVhTVkcoY2VsbFgsIGNlbGxZLCBnYXRlTmFtZSwgc2VsZWN0ZWQpIHtcblx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGggKiAwLjQ7XG5cdFx0dmFyIGdhdGVIZWlnaHQgPSBvcHRpb25zLmNlbGxIZWlnaHQgKiAwLjQ7XG5cdFx0dmFyIGdhdGVYID0gY2VsbFggKyAoKG9wdGlvbnMuY2VsbFdpZHRoIC0gZ2F0ZVdpZHRoKSAvIDIpO1xuXHRcdHZhciBnYXRlWSA9IGNlbGxZICsgKChvcHRpb25zLmNlbGxIZWlnaHQgLSBnYXRlSGVpZ2h0KSAvIDIpO1xuXG5cdFx0dmFyIHJlcyA9IFwiXCI7XG5cdFx0cmVzICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLWdhdGUteFxcXCIgeDE9XFxcIlwiICsgZ2F0ZVggKyBcIlxcXCIgeDI9XFxcIlwiICsgKGdhdGVYICsgZ2F0ZVdpZHRoKSArIFwiXFxcIiB5MT1cXFwiXCIgKyBnYXRlWSArXCJcXFwiIHkyPVxcXCJcIiArIChnYXRlWSArIGdhdGVIZWlnaHQpICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvcikgKyBcIlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXHRcdHJlcyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy1nYXRlLXhcXFwiIHgxPVxcXCJcIiArIGdhdGVYICsgXCJcXFwiIHgyPVxcXCJcIiArIChnYXRlWCArIGdhdGVXaWR0aCkgKyBcIlxcXCIgeTE9XFxcIlwiICsgKGdhdGVZICsgZ2F0ZUhlaWdodCkgK1wiXFxcIiB5Mj1cXFwiXCIgKyBnYXRlWSArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLmdhdGVMaW5lQ29sb3IpICsgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2F0ZURvdFNWRyhjZWxsWCwgY2VsbFksIGdhdGVOYW1lLCBzZWxlY3RlZCkge1xuXHRcdHZhciBnYXRlV2lkdGggPSBvcHRpb25zLmNlbGxXaWR0aDtcblx0XHR2YXIgZ2F0ZUhlaWdodCA9IG9wdGlvbnMuY2VsbEhlaWdodDtcblx0XHR2YXIgY2VudGVyWCA9IGNlbGxYICsgKGdhdGVXaWR0aCAvIDIpO1xuXHRcdHZhciBjZW50ZXJZID0gY2VsbFkgKyAoZ2F0ZUhlaWdodCAvIDIpO1xuXG5cdFx0dmFyIHJlcyA9IFwiXCI7XG5cdFx0cmVzICs9IFwiPGNpcmNsZSBjbGFzcz1cXFwicWMtZ2F0ZS1kb3RcXFwiIGN4PVxcXCJcIiArIGNlbnRlclggKyBcIlxcXCIgY3k9XFxcIlwiICsgY2VudGVyWSArIFwiXFxcIiByPVxcXCJcIiArIG9wdGlvbnMuZG90UmFkaXVzICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMud2lyZUNvbG9yKSArIFwiXFxcIiBmaWxsPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy53aXJlQ29sb3IpICsgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2F0ZUludmVydGVkRG90U1ZHKGNlbGxYLCBjZWxsWSwgZ2F0ZU5hbWUsIHNlbGVjdGVkKSB7XG5cdFx0dmFyIGdhdGVXaWR0aCA9IG9wdGlvbnMuY2VsbFdpZHRoO1xuXHRcdHZhciBnYXRlSGVpZ2h0ID0gb3B0aW9ucy5jZWxsSGVpZ2h0O1xuXHRcdHZhciBjZW50ZXJYID0gY2VsbFggKyAoZ2F0ZVdpZHRoIC8gMik7XG5cdFx0dmFyIGNlbnRlclkgPSBjZWxsWSArIChnYXRlSGVpZ2h0IC8gMik7XG5cblx0XHR2YXIgcmVzID0gXCJcIjtcblx0XHRyZXMgKz0gXCI8Y2lyY2xlIGNsYXNzPVxcXCJxYy1nYXRlLW5kb3RcXFwiIGN4PVxcXCJcIiArIGNlbnRlclggKyBcIlxcXCIgY3k9XFxcIlwiICsgY2VudGVyWSArIFwiXFxcIiByPVxcXCJcIiArIG9wdGlvbnMuZG90UmFkaXVzICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMud2lyZUNvbG9yKSArIFwiXFxcIiBmaWxsPVxcXCJ3aGl0ZVxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBnYXRlU1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIGdhdGVMYWJlbCwgY29ubmVjdG9yLCBkcmF3Qm94LCBzZWxlY3RlZCkge1xuXHRcdHZhciByZXMgPSBcIlwiO1xuXG5cdFx0aWYoY29ubmVjdG9yICE9IFwiYm94XCIgJiYgZHJhd0JveCkge1xuXHRcdFx0cmVzICs9IGdhdGVCb3hTVkcoZ2F0ZVgsIGdhdGVZLCBnYXRlTmFtZSwgXCJcIiwgc2VsZWN0ZWQpO1xuXHRcdH1cblxuXHRcdHN3aXRjaChjb25uZWN0b3IpIHtcblx0XHRcdGNhc2UgXCJib3hcIjogcmVzICs9IGdhdGVCb3hTVkcoZ2F0ZVgsIGdhdGVZLCBnYXRlTmFtZSwgZ2F0ZUxhYmVsLCBzZWxlY3RlZCk7IGJyZWFrO1xuXHRcdFx0Y2FzZSBcInJlY3RcIjogcmVzICs9IGdhdGVSZWN0U1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIGdhdGVMYWJlbCwgc2VsZWN0ZWQpOyBicmVhaztcblx0XHRcdGNhc2UgXCJjaXJjbGVcIjogcmVzICs9IGdhdGVDaXJjbGVTVkcoZ2F0ZVgsIGdhdGVZLCBnYXRlTmFtZSwgZ2F0ZUxhYmVsLCBzZWxlY3RlZCk7IGJyZWFrO1xuXHRcdFx0Y2FzZSBcIm5vdFwiOiByZXMgKz0gZ2F0ZU5vdFNWRyhnYXRlWCwgZ2F0ZVksIGdhdGVOYW1lLCBzZWxlY3RlZCk7IGJyZWFrO1xuXHRcdFx0Y2FzZSBcInhcIjogcmVzICs9IGdhdGVYU1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIHNlbGVjdGVkKTsgYnJlYWs7XG5cdFx0XHRjYXNlIFwiZG90XCI6IHJlcyArPSBnYXRlRG90U1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIHNlbGVjdGVkKTsgYnJlYWs7XG5cdFx0XHRjYXNlIFwibmRvdFwiOiByZXMgKz0gZ2F0ZUludmVydGVkRG90U1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIHNlbGVjdGVkKTsgYnJlYWs7XG5cdFx0XHRjYXNlIFwiZ2F1Z2VcIjogcmVzICs9IGdhdGVHYXVnZVNWRyhnYXRlWCwgZ2F0ZVksIGdhdGVOYW1lLCBzZWxlY3RlZCk7IGJyZWFrO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXG5cdGZ1bmN0aW9uIGRyYXdHYXRlKGdhdGUsIGNvbEluZGV4LCByb3dJbmRleCkge1xuXHRcdHZhciBkaW5mbyA9IHNlbGYuYmFzaWNHYXRlc1tnYXRlLm5hbWVdID8gc2VsZi5iYXNpY0dhdGVzW2dhdGUubmFtZV0uZHJhd2luZ0luZm8gOiBudWxsO1xuXHRcdGlmKCFkaW5mbykge1xuXHRcdFx0ZGluZm8gPSBzZWxmLmN1c3RvbUdhdGVzW2dhdGUubmFtZV0gPyBzZWxmLmN1c3RvbUdhdGVzW2dhdGUubmFtZV0uZHJhd2luZ0luZm8gOiBudWxsO1xuXHRcdH1cblxuXHRcdHZhciBibGFja2JveCA9IGZhbHNlO1xuXHRcdHZhciBzZWxlY3RlZCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5zZWxlY3Rpb24gJiYgb3B0aW9ucy5zZWxlY3Rpb24uaW5kZXhPZihnYXRlLmlkKSA+PSAwO1xuXHRcdGlmKCFkaW5mbykge1xuXHRcdFx0aWYoZ2F0ZS53aXJlcy5sZW5ndGggPT0gMSkge1xuXHRcdFx0XHRkaW5mbyA9IHsgY29ubmVjdG9yczogW1wiYm94XCJdIH07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkaW5mbyA9IHsgY29ubmVjdG9yczogW10gfTtcblx0XHRcdFx0YmxhY2tib3ggPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR3aGlsZShkaW5mby5jb25uZWN0b3JzLmxlbmd0aCA8IGdhdGUud2lyZXMubGVuZ3RoKSB7XG5cdFx0XHRkaW5mby5jb25uZWN0b3JzLnB1c2goXCJib3hcIik7XG5cdFx0fVxuXG5cdFx0dmFyIHRvcFdpcmUgPSBNYXRoLm1pbi5hcHBseShudWxsLCBnYXRlLndpcmVzKTtcblx0XHR2YXIgYm90dG9tV2lyZSA9IE1hdGgubWF4LmFwcGx5KG51bGwsIGdhdGUud2lyZXMpO1xuXHRcdHZhciBjTGlua1RvcFkgPSBjV2lyZVkoYm90dG9tV2lyZSk7XG5cblx0XHR2YXIgc3ZnID0gXCJcIjtcblx0XHRzdmcgKz0gXCI8ZyBjbGFzcz1cXFwicWMtZ2F0ZS1ncm91cFxcXCIgZGF0YS1pZD1cXFwiXCIgKyBnYXRlLmlkICsgXCJcXFwiIGRhdGEtZ2F0ZT1cXFwiXCIgKyBnYXRlLm5hbWUgKyBcIlxcXCI+XCI7XG5cdFx0aWYoYmxhY2tib3gpIHtcblx0XHRcdHZhciBnYXRlWCA9IGdldENlbGxYKGNvbEluZGV4KSAtIG9wdGlvbnMuYmxhY2tib3hQYWRkaW5nWDtcblx0XHRcdHZhciBnYXRlWSA9IHFHYXRlWSh0b3BXaXJlKSAtIG9wdGlvbnMuYmxhY2tib3hQYWRkaW5nWTtcblx0XHRcdHZhciBnYXRlV2lkdGggPSBvcHRpb25zLmNlbGxXaWR0aCArICgyICogb3B0aW9ucy5ibGFja2JveFBhZGRpbmdYKTtcblx0XHRcdHZhciBnYXRlSGVpZ2h0ID0gKChxR2F0ZVkoYm90dG9tV2lyZSkgKyBvcHRpb25zLmNlbGxIZWlnaHQpIC0gZ2F0ZVkpICsgb3B0aW9ucy5ibGFja2JveFBhZGRpbmdZO1xuXG5cdFx0XHR2YXIgY2VudGVyWCA9IGdhdGVYICsgKGdhdGVXaWR0aCAvIDIpO1xuXG5cdFx0XHRjTGlua1RvcFkgPSBnYXRlWSArIGdhdGVIZWlnaHQ7XG5cblx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy1ibGFja2JveC1sYWJlbFxcXCIgeD1cXFwiXCIgKyBjZW50ZXJYICsgXCJcXFwiIHk9XFxcIlwiICsgKGdhdGVZIC0gb3B0aW9ucy53aXJlVGV4dEhlaWdodCAtIChvcHRpb25zLmJsYWNrYm94UGFkZGluZ1kgKiAyKSkgKyBcIlxcXCIgZG9taW5hbnQtYmFzZWxpbmU9XFxcImhhbmdpbmdcXFwiIHRleHQtYW5jaG9yPVxcXCJtaWRkbGVcXFwiIGZvbnQtc2l6ZT1cXFwiNzUlXFxcIj5cIiArIChkaW5mby5sYWJlbCB8fCBnYXRlLm5hbWUpICsgXCI8L3RleHQ+XCI7XG5cdFx0XHRzdmcgKz0gXCI8cmVjdCBjbGFzcz1cXFwicWMtZ2F0ZS1ibGFja2JveFxcXCIgeD1cXFwiXCIgKyBnYXRlWCArIFwiXFxcIiB5PVxcXCJcIiArIGdhdGVZICsgXCJcXFwiIHdpZHRoPVxcXCJcIiArIGdhdGVXaWR0aCArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgZ2F0ZUhlaWdodCArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5ibGFja2JveFNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy5ibGFja2JveExpbmVDb2xvcikgKyBcIlxcXCIgZmlsbD1cXFwidHJhbnNwYXJlbnRcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHR9XG5cblx0XHRpZihzZWxlY3RlZCkge1xuXHRcdFx0dmFyIGdhdGVYID0gZ2V0Q2VsbFgoY29sSW5kZXgpIC0gb3B0aW9ucy5zZWxlY3Rpb25QYWRkaW5nWDtcblx0XHRcdHZhciBnYXRlWSA9IHFHYXRlWSh0b3BXaXJlKSAtIG9wdGlvbnMuc2VsZWN0aW9uUGFkZGluZ1k7XG5cdFx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGggKyAoMiAqIG9wdGlvbnMuc2VsZWN0aW9uUGFkZGluZ1gpO1xuXHRcdFx0dmFyIGdhdGVIZWlnaHQgPSAoKHFHYXRlWShib3R0b21XaXJlKSArIG9wdGlvbnMuY2VsbEhlaWdodCkgLSBnYXRlWSkgKyBvcHRpb25zLnNlbGVjdGlvblBhZGRpbmdZO1xuXG5cdFx0XHR2YXIgY2VudGVyWCA9IGdhdGVYICsgKGdhdGVXaWR0aCAvIDIpO1xuXG5cdFx0XHRjTGlua1RvcFkgPSBnYXRlWSArIGdhdGVIZWlnaHQ7XG5cblx0XHRcdHN2ZyArPSBcIjxyZWN0IGNsYXNzPVxcXCJxYy1nYXRlLXNlbGVjdGlvblxcXCIgeD1cXFwiXCIgKyBnYXRlWCArIFwiXFxcIiB5PVxcXCJcIiArIGdhdGVZICsgXCJcXFwiIHdpZHRoPVxcXCJcIiArIGdhdGVXaWR0aCArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgZ2F0ZUhlaWdodCArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgb3B0aW9ucy5zZWxlY3Rpb25MaW5lQ29sb3IgKyBcIlxcXCIgZmlsbD1cXFwidHJhbnNwYXJlbnRcXFwiIHN0cm9rZS1kYXNoYXJyYXk9XFxcIjRcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHR9XG5cblx0XHQvLyBsaW5rXG5cdFx0aWYodG9wV2lyZSAhPSBib3R0b21XaXJlICYmICFibGFja2JveCkge1xuXHRcdFx0dmFyIGxpbmtYID0gZ2V0Q2VsbFgoY29sSW5kZXgpICsgKG9wdGlvbnMuY2VsbFdpZHRoIC8gMik7XG5cdFx0XHR2YXIgbGlua1kxID0gZ2V0Q2VsbFkodG9wV2lyZSkgKyAob3B0aW9ucy5jZWxsSGVpZ2h0IC8gMik7XG5cdFx0XHR2YXIgbGlua1kyID0gZ2V0Q2VsbFkoYm90dG9tV2lyZSkgKyAob3B0aW9ucy5jZWxsSGVpZ2h0IC8gMik7XG5cdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtZ2F0ZS1saW5rXFxcIiB4MT1cXFwiXCIgKyBsaW5rWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyBsaW5rWCArIFwiXFxcIiB5MT1cXFwiXCIgKyBsaW5rWTEgK1wiXFxcIiB5Mj1cXFwiXCIgKyBsaW5rWTIgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy53aXJlQ29sb3IpICsgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHR9XG5cblx0XHQvLyBjb25uZWN0b3JzXG5cdFx0dmFyIG1heFdpcmUgPSBNYXRoLm1heC5hcHBseShudWxsLCBnYXRlLndpcmVzKTtcblx0XHRnYXRlLndpcmVzLm1hcChmdW5jdGlvbih3aXJlLCBjb25uZWN0b3IpIHtcblxuXHRcdFx0c3dpdGNoKGRpbmZvLmNvbm5lY3RvcnNbY29ubmVjdG9yXSkge1xuXHRcdFx0XHRjYXNlIFwiYm94XCI6IHtcblx0XHRcdFx0XHR2YXIgZ2F0ZVggPSBnZXRDZWxsWChjb2xJbmRleCk7XG5cdFx0XHRcdFx0dmFyIGdhdGVZID0gZ2V0Q2VsbFkod2lyZSk7XG5cblx0XHRcdFx0XHRzdmcgPSBzdmcgKyBnYXRlQm94U1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZS5uYW1lLCAoYmxhY2tib3ggPyBxdWJpdExldHRlcihjb25uZWN0b3IsIG51bVJvd3MpIDogKGRpbmZvLmxhYmVsIHx8IGdhdGUubmFtZSkpLCBzZWxlY3RlZCk7XG5cblx0XHRcdFx0XHRpZighYmxhY2tib3ggJiYgd2lyZSA9PSBib3R0b21XaXJlKSB7XG5cdFx0XHRcdFx0XHRjTGlua1RvcFkgPSBnYXRlWSArIG9wdGlvbnMuY2VsbEhlaWdodDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07IGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJjaXJjbGVcIjoge1xuXHRcdFx0XHRcdHZhciBnYXRlWCA9IGdldENlbGxYKGNvbEluZGV4KTtcblx0XHRcdFx0XHR2YXIgZ2F0ZVkgPSBnZXRDZWxsWSh3aXJlKTtcblxuXHRcdFx0XHRcdHN2ZyA9IHN2ZyArIGdhdGVDaXJjbGVTVkcoZ2F0ZVgsIGdhdGVZLCBnYXRlLm5hbWUsIChibGFja2JveCA/IHF1Yml0TGV0dGVyKGNvbm5lY3RvciwgbnVtUm93cykgOiAoZGluZm8ubGFiZWwgfHwgZ2F0ZS5uYW1lKSksIHNlbGVjdGVkKTtcblxuXHRcdFx0XHRcdGlmKCFibGFja2JveCAmJiB3aXJlID09IGJvdHRvbVdpcmUpIHtcblx0XHRcdFx0XHRcdHZhciBnYXRlSGVpZ2h0ID0gKG9wdGlvbnMuY2VsbEhlaWdodCAqIDAuOCk7XG5cdFx0XHRcdFx0XHRjTGlua1RvcFkgPSBnYXRlWSArIGdhdGVIZWlnaHQgKyAoKG9wdGlvbnMuY2VsbEhlaWdodCAtIGdhdGVIZWlnaHQpIC8gMik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9OyBicmVhaztcblxuXHRcdFx0XHRjYXNlIFwibm90XCI6IHtcblx0XHRcdFx0XHR2YXIgY2VsbFggPSBnZXRDZWxsWChjb2xJbmRleCk7XG5cdFx0XHRcdFx0dmFyIGNlbGxZID0gZ2V0Q2VsbFkod2lyZSk7XG5cblx0XHRcdFx0XHRzdmcgPSBzdmcgKyBnYXRlTm90U1ZHKGNlbGxYLCBjZWxsWSwgZ2F0ZS5uYW1lLCBzZWxlY3RlZCk7XG5cblx0XHRcdFx0XHRpZighYmxhY2tib3ggJiYgd2lyZSA9PSBib3R0b21XaXJlKSB7XG5cdFx0XHRcdFx0XHR2YXIgZ2F0ZUhlaWdodCA9IChvcHRpb25zLmNlbGxIZWlnaHQgKiAwLjgpO1xuXHRcdFx0XHRcdFx0Y0xpbmtUb3BZID0gY2VsbFkgKyBnYXRlSGVpZ2h0ICsgKChvcHRpb25zLmNlbGxIZWlnaHQgLSBnYXRlSGVpZ2h0KSAvIDIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTsgYnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcInhcIjoge1xuXHRcdFx0XHRcdHZhciBjZWxsWCA9IGdldENlbGxYKGNvbEluZGV4KTtcblx0XHRcdFx0XHR2YXIgY2VsbFkgPSBnZXRDZWxsWSh3aXJlKTtcblxuXHRcdFx0XHRcdHN2ZyA9IHN2ZyArIGdhdGVYU1ZHKGNlbGxYLCBjZWxsWSwgZ2F0ZS5uYW1lLCBzZWxlY3RlZCk7XG5cblx0XHRcdFx0XHRpZighYmxhY2tib3ggJiYgd2lyZSA9PSBib3R0b21XaXJlKSB7XG5cdFx0XHRcdFx0XHRjTGlua1RvcFkgPSBxV2lyZVkoYm90dG9tV2lyZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdH07IGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJkb3RcIjoge1xuXHRcdFx0XHRcdHZhciBjZWxsWCA9IGdldENlbGxYKGNvbEluZGV4KTtcblx0XHRcdFx0XHR2YXIgY2VsbFkgPSBnZXRDZWxsWSh3aXJlKTtcblxuXHRcdFx0XHRcdHN2ZyA9IHN2ZyArIGdhdGVEb3RTVkcoY2VsbFgsIGNlbGxZLCBnYXRlLm5hbWUsIHNlbGVjdGVkKTtcblxuXHRcdFx0XHRcdGlmKCFibGFja2JveCAmJiB3aXJlID09IGJvdHRvbVdpcmUpIHtcblx0XHRcdFx0XHRcdGNMaW5rVG9wWSA9IHFXaXJlWShib3R0b21XaXJlKSArIG9wdGlvbnMuZG90UmFkaXVzO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTsgYnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcIm5kb3RcIjoge1xuXHRcdFx0XHRcdHZhciBjZWxsWCA9IGdldENlbGxYKGNvbEluZGV4KTtcblx0XHRcdFx0XHR2YXIgY2VsbFkgPSBnZXRDZWxsWSh3aXJlKTtcblxuXHRcdFx0XHRcdHN2ZyA9IHN2ZyArIGdhdGVJbnZlcnRlZERvdFNWRyhjZWxsWCwgY2VsbFksIGdhdGUubmFtZSwgc2VsZWN0ZWQpO1xuXG5cdFx0XHRcdFx0aWYoIWJsYWNrYm94ICYmIHdpcmUgPT0gYm90dG9tV2lyZSkge1xuXHRcdFx0XHRcdFx0Y0xpbmtUb3BZID0gcVdpcmVZKGJvdHRvbVdpcmUpICsgb3B0aW9ucy5kb3RSYWRpdXM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9OyBicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiZ2F1Z2VcIjoge1xuXHRcdFx0XHRcdHZhciBnYXRlWCA9IGdldENlbGxYKGNvbEluZGV4KTtcblx0XHRcdFx0XHR2YXIgZ2F0ZVkgPSBnZXRDZWxsWSh3aXJlKTtcblxuXHRcdFx0XHRcdHN2ZyA9IHN2ZyArIGdhdGVHYXVnZVNWRyhnYXRlWCwgZ2F0ZVksIGdhdGUubmFtZSwgc2VsZWN0ZWQpO1xuXG5cdFx0XHRcdFx0aWYoIWJsYWNrYm94ICYmIHdpcmUgPT0gYm90dG9tV2lyZSkge1xuXHRcdFx0XHRcdFx0Y0xpbmtUb3BZID0gZ2F0ZVkgKyBvcHRpb25zLmNlbGxIZWlnaHQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9OyBicmVhaztcblx0XHRcdH1cblxuXHRcdFx0Ly8gcGFyYW1zXG5cdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcyAmJiB3aXJlID09IG1heFdpcmUpIHtcblx0XHRcdFx0dmFyIGdhdGVYID0gZ2V0Q2VsbFgoY29sSW5kZXgpO1xuXHRcdFx0XHR2YXIgZ2F0ZVkgPSBnZXRDZWxsWSh3aXJlKTtcblx0XHRcdFx0dmFyIGNlbnRlclggPSBnYXRlWCArIChvcHRpb25zLmNlbGxXaWR0aCAvIDIpO1xuXG5cdFx0XHRcdHZhciBwYXJhbXNTdHIgPSBcIlwiO1xuXHRcdFx0XHR2YXIgcGFyYW1zQ291bnQgPSAwO1xuXHRcdFx0XHRmb3IodmFyIHBhcmFtTmFtZSBpbiBnYXRlLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0aWYocGFyYW1zU3RyKSB7XG5cdFx0XHRcdFx0XHRwYXJhbXNTdHIgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHZhciBwYXJhbVZhbCA9IGdhdGUub3B0aW9ucy5wYXJhbXNbcGFyYW1OYW1lXTtcblx0XHRcdFx0XHRpZih0eXBlb2YgcGFyYW1WYWwgPT0gXCJzdHJpbmdcIiAmJiBwYXJhbVZhbC5tYXRjaCgvXltcXCtcXC1dP1xcZCpcXC4/XFxkKyg/OltFZV1bXFwrXFwtXT9cXGQrKT8kLykpIHtcblx0XHRcdFx0XHRcdHBhcmFtVmFsID0gcGFyc2VGbG9hdChwYXJhbVZhbCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYodHlwZW9mIHBhcmFtVmFsID09IFwibnVtYmVyXCIpIHtcblx0XHRcdFx0XHRcdHBhcmFtVmFsID0gbWF0aC5yb3VuZChwYXJhbVZhbCwgMyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cGFyYW1zU3RyICs9IHBhcmFtVmFsO1xuXHRcdFx0XHRcdHBhcmFtc0NvdW50Kys7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihwYXJhbXNTdHIubGVuZ3RoID4gMjYpIHtcblx0XHRcdFx0XHRwYXJhbXNTdHIgPSBcIihcIiArIHBhcmFtc0NvdW50ICsgXCIgcGFyYW1zKVwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy1nYXRlLXBhcmFtc1xcXCIgeD1cXFwiXCIgKyBjZW50ZXJYICsgXCJcXFwiIHk9XFxcIlwiICsgKGdhdGVZICsgb3B0aW9ucy5jZWxsSGVpZ2h0ICsgb3B0aW9ucy5wYXJhbVRleHRIZWlnaHQpICsgXCJcXFwiIGRvbWluYW50LWJhc2VsaW5lPVxcXCJoYW5naW5nXFxcIiB0ZXh0LWFuY2hvcj1cXFwibWlkZGxlXFxcIiBmb250LXNpemU9XFxcIjc1JVxcXCI+XCIgKyBwYXJhbXNTdHIgKyBcIjwvdGV4dD5cIjtcblx0XHRcdH1cblxuXHRcdH0pO1xuXG5cdFx0Ly8gbWVhc3VyZVxuXHRcdGlmKGdhdGUubmFtZSA9PSBcIm1lYXN1cmVcIiAmJiBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNyZWcgJiYgZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSkge1xuXHRcdFx0dmFyIGxpbmtYID0gZ2V0Q2VsbFgoY29sSW5kZXgpICsgKG9wdGlvbnMuY2VsbFdpZHRoIC8gMik7XG5cdFx0XHR2YXIgbGlua1kxID0gY0xpbmtUb3BZO1xuXHRcdFx0dmFyIGxpbmtZMiA9IGNXaXJlWShnYXRlLm9wdGlvbnMuY3JlZy5uYW1lKTtcblxuXHRcdFx0c3ZnICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLWdhdGUtbGluay1jXFxcIiB4MT1cXFwiXCIgKyBsaW5rWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyBsaW5rWCArIFwiXFxcIiB5MT1cXFwiXCIgKyBsaW5rWTEgK1wiXFxcIiB5Mj1cXFwiXCIgKyBsaW5rWTIgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuY1dpcmVTZWxlY3RlZENvbG9yIDogb3B0aW9ucy5jV2lyZUNvbG9yKSArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cblx0XHRcdHN2ZyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy1nYXRlLWxpbmstY1xcXCIgeDI9XFxcIlwiICsgbGlua1ggKyBcIlxcXCIgeDE9XFxcIlwiICsgKGxpbmtYIC0gKG9wdGlvbnMuY0Fycm93U2l6ZSAvIDIpKSArIFwiXFxcIiB5MT1cXFwiXCIgKyAobGlua1kyIC0gb3B0aW9ucy5jQXJyb3dTaXplKSArXCJcXFwiIHkyPVxcXCJcIiArIGxpbmtZMiArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5jV2lyZVNlbGVjdGVkQ29sb3IgOiBvcHRpb25zLmNXaXJlQ29sb3IpICsgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRcdHN2ZyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy1nYXRlLWxpbmstY1xcXCIgeDI9XFxcIlwiICsgbGlua1ggKyBcIlxcXCIgeDE9XFxcIlwiICsgKGxpbmtYICsgKG9wdGlvbnMuY0Fycm93U2l6ZSAvIDIpKSArIFwiXFxcIiB5MT1cXFwiXCIgKyAobGlua1kyIC0gb3B0aW9ucy5jQXJyb3dTaXplKSArXCJcXFwiIHkyPVxcXCJcIiArIGxpbmtZMiArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5jV2lyZVNlbGVjdGVkQ29sb3IgOiBvcHRpb25zLmNXaXJlQ29sb3IpICsgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblxuXHRcdFx0c3ZnICs9IFwiPHRleHQgY2xhc3M9XFxcInFjLXdpcmUtbGFiZWxcXFwiIHg9XFxcIlwiICsgbGlua1ggKyBcIlxcXCIgeT1cXFwiXCIgKyAobGlua1kyICsgb3B0aW9ucy53aXJlVGV4dEhlaWdodCkgKyBcIlxcXCIgZG9taW5hbnQtYmFzZWxpbmU9XFxcImhhbmdpbmdcXFwiIHRleHQtYW5jaG9yPVxcXCJtaWRkbGVcXFwiIGZvbnQtc2l6ZT1cXFwiNzUlXFxcIj5cIiArIGdhdGUub3B0aW9ucy5jcmVnLmJpdCArIFwiPC90ZXh0PlwiO1xuXHRcdH1cblxuXHRcdC8vIGNvbnRyb2xsZWQgYnkgY2xhc3NpYyByZWdpc3RlclxuXHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZykge1xuXHRcdFx0dmFyIGxpbmtYID0gZ2V0Q2VsbFgoY29sSW5kZXgpICsgKG9wdGlvbnMuY2VsbFdpZHRoIC8gMik7XG5cdFx0XHR2YXIgbGlua1kxID0gY0xpbmtUb3BZO1xuXHRcdFx0dmFyIGxpbmtZMiA9IGNXaXJlWShnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpO1xuXG5cdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtZ2F0ZS1saW5rLWNcXFwiIHgxPVxcXCJcIiArIGxpbmtYICsgXCJcXFwiIHgyPVxcXCJcIiArIGxpbmtYICsgXCJcXFwiIHkxPVxcXCJcIiArIGxpbmtZMSArXCJcXFwiIHkyPVxcXCJcIiArIGxpbmtZMiArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5jV2lyZVNlbGVjdGVkQ29sb3IgOiBvcHRpb25zLmNXaXJlQ29sb3IpICsgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblxuXHRcdFx0c3ZnICs9IFwiPGNpcmNsZSBjbGFzcz1cXFwicWMtZ2F0ZS1kb3QtY1xcXCIgY3g9XFxcIlwiICsgbGlua1ggKyBcIlxcXCIgY3k9XFxcIlwiICsgbGlua1kyICsgXCJcXFwiIHI9XFxcIlwiICsgb3B0aW9ucy5kb3RSYWRpdXMgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuY1dpcmVTZWxlY3RlZENvbG9yIDogb3B0aW9ucy5jV2lyZUNvbG9yKSArIFwiXFxcIiBmaWxsPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuY1dpcmVTZWxlY3RlZENvbG9yIDogb3B0aW9ucy5jV2lyZUNvbG9yKSArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cblx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy13aXJlLWxhYmVsXFxcIiB4PVxcXCJcIiArIGxpbmtYICsgXCJcXFwiIHk9XFxcIlwiICsgKGxpbmtZMiArIG9wdGlvbnMud2lyZVRleHRIZWlnaHQpICsgXCJcXFwiIGRvbWluYW50LWJhc2VsaW5lPVxcXCJoYW5naW5nXFxcIiB0ZXh0LWFuY2hvcj1cXFwibWlkZGxlXFxcIiBmb250LXNpemU9XFxcIjc1JVxcXCI+PT0gXCIgKyBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLnZhbHVlICsgXCI8L3RleHQ+XCI7XG5cdFx0fVxuXG5cdFx0c3ZnICs9IFwiPC9nPlwiO1xuXG5cdFx0cmV0dXJuIHN2Zztcblx0fVxuXG5cdGZ1bmN0aW9uIGRyYXdHYXRlUGxhY2Vob2xkZXIoY29sSW5kZXgsIHdpcmUpIHtcblx0XHR2YXIgc3ZnID0gXCJcIjtcblxuXHRcdHZhciBnYXRlV2lkdGggPSBvcHRpb25zLmNlbGxXaWR0aCArIG9wdGlvbnMuaFNwYWNpbmc7XG5cdFx0dmFyIGdhdGVIZWlnaHQgPSBvcHRpb25zLmNlbGxIZWlnaHQgKyBvcHRpb25zLnZTcGFjaW5nO1xuXHRcdHZhciBnYXRlWCA9IGdldENlbGxYKGNvbEluZGV4KSAtIG9wdGlvbnMuaFNwYWNpbmc7XG5cdFx0dmFyIGdhdGVZID0gZ2V0Q2VsbFkod2lyZSkgLSBvcHRpb25zLnZTcGFjaW5nO1xuXG5cdFx0aWYod2lyZSA9PSBudW1Sb3dzKSB7XG5cdFx0XHRnYXRlSGVpZ2h0ID0gb3B0aW9ucy52U3BhY2luZztcblx0XHR9XG5cblx0XHRpZihjb2xJbmRleCA9PSBudW1Db2xzKSB7XG5cdFx0XHRnYXRlV2lkdGggPSBvcHRpb25zLmhTcGFjaW5nO1xuXHRcdH1cblxuXHRcdHN2ZyArPSBcIjxyZWN0IGNsYXNzPVxcXCJxYy1nYXRlLXBsYWNlaG9sZGVyXFxcIiBkYXRhLXJvdz1cXFwiXCIgKyB3aXJlICsgXCJcXFwiIGRhdGEtY29sPVxcXCJcIiArIGNvbEluZGV4ICsgXCJcXFwiIHg9XFxcIlwiICsgZ2F0ZVggKyBcIlxcXCIgeT1cXFwiXCIgKyBnYXRlWSArIFwiXFxcIiB3aWR0aD1cXFwiXCIgKyBnYXRlV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIGdhdGVIZWlnaHQgKyBcIlxcXCIgc3Ryb2tlPVxcXCJub25lXFxcIiBmaWxsPVxcXCJ0cmFuc3BhcmVudFxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIwXFxcIiAvPlwiO1xuXG5cdFx0cmV0dXJuIHN2Zztcblx0fVxuXG5cdGZ1bmN0aW9uIGRyYXdHYXRlSGFuZGxlKGdhdGUsIGNvbEluZGV4LCB3aXJlKSB7XG5cdFx0dmFyIHN2ZyA9IFwiXCI7XG5cblx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGg7XG5cdFx0dmFyIGdhdGVIZWlnaHQgPSBvcHRpb25zLmNlbGxIZWlnaHQ7XG5cdFx0dmFyIGdhdGVYID0gZ2V0Q2VsbFgoY29sSW5kZXgpO1xuXHRcdHZhciBnYXRlWSA9IGdldENlbGxZKHdpcmUpO1xuXG5cdFx0c3ZnICs9IFwiPHJlY3QgY2xhc3M9XFxcInFjLWdhdGUtaGFuZGxlXFxcIiBkYXRhLWlkPVxcXCJcIiArIGdhdGUuaWQgKyBcIlxcXCIgZGF0YS1nYXRlPVxcXCJcIiArIGdhdGUubmFtZSArIFwiXFxcIiBkYXRhLXJvdz1cXFwiXCIgKyB3aXJlICsgXCJcXFwiIGRhdGEtY29sPVxcXCJcIiArIGNvbEluZGV4ICsgXCJcXFwiIHg9XFxcIlwiICsgZ2F0ZVggKyBcIlxcXCIgeT1cXFwiXCIgKyBnYXRlWSArIFwiXFxcIiB3aWR0aD1cXFwiXCIgKyBnYXRlV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIGdhdGVIZWlnaHQgKyBcIlxcXCIgc3Ryb2tlPVxcXCJub25lXFxcIiBmaWxsPVxcXCJ0cmFuc3BhcmVudFxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIwXFxcIiAvPlwiO1xuXG5cdFx0cmV0dXJuIHN2Zztcblx0fVxuXG5cdGZ1bmN0aW9uIGRyYXdHYXRlQ2FudmFzKGNvbEluZGV4LCB3aXJlLCBjbGFzc05hbWUsIGNhbnZhc0lkKSB7XG5cdFx0dmFyIHN2ZyA9IFwiXCI7XG5cblx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGg7XG5cdFx0dmFyIGdhdGVIZWlnaHQgPSBvcHRpb25zLmNlbGxIZWlnaHQ7XG5cdFx0dmFyIGdhdGVYID0gZ2V0Q2VsbFgoY29sSW5kZXgpO1xuXHRcdHZhciBnYXRlWSA9IGdldENlbGxZKHdpcmUpO1xuXG5cblx0XHRzdmcgKz0gXCI8ZyBjbGFzcz1cXFwiXCIgKyAoY2xhc3NOYW1lIHx8IFwicWMtY2FudmFzLWdyb3VwXCIpICsgXCJcXFwiIGRhdGEtcm93PVxcXCJcIiArIHdpcmUgKyBcIlxcXCI+XCI7XG5cdFx0c3ZnICs9IFwiPHJlY3QgY2xhc3M9XFxcInFjLWNhbnZhcy1ib3hcXFwiIHg9XFxcIlwiICsgZ2F0ZVggKyBcIlxcXCIgeT1cXFwiXCIgKyBnYXRlWSArIFwiXFxcIiB3aWR0aD1cXFwiXCIgKyBnYXRlV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIGdhdGVIZWlnaHQgKyBcIlxcXCIgc3Ryb2tlPVxcXCJ0cmFuc3BhcmVudFxcXCIgZmlsbD1cXFwid2hpdGVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRzdmcgKz0gXCI8Zm9yZWlnbk9iamVjdCBjbGFzcz1cXFwicWMtY2FudmFzLW9iamVjdFxcXCIgeD1cXFwiXCIgKyBnYXRlWCArIFwiXFxcIiB5PVxcXCJcIiArIGdhdGVZICsgXCJcXFwiIHdpZHRoPVxcXCJcIiArIGdhdGVXaWR0aCArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgZ2F0ZUhlaWdodCArIFwiXFxcIj5cIjtcblx0XHRzdmcgKz0gXCI8ZGl2IHN0eWxlPVxcXCJwb3NpdGlvbjpyZWxhdGl2ZTtcXFwiPlwiO1xuXHRcdHN2ZyArPSBcIjxjYW52YXMgaWQ9XFxcIlwiICsgY2FudmFzSWQgKyBcIi1cIiArIHdpcmUgKyBcIlxcXCIgY2xhc3M9XFxcIlwiICsgY2FudmFzSWQgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgZ2F0ZVdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBnYXRlSGVpZ2h0ICsgXCJcXFwiPlwiO1xuXHRcdHN2ZyArPSBcIjwvY2FudmFzPlwiO1xuXHRcdHN2ZyArPSBcIjwvZGl2PlwiO1xuXHRcdHN2ZyArPSBcIjwvZm9yZWlnbk9iamVjdD5cIjtcblx0XHRzdmcgKz0gXCI8L2c+XCI7XG5cblx0XHRyZXR1cm4gc3ZnO1xuXHR9XG5cblxuXHRmdW5jdGlvbiBlc2NhcGVIdG1sKHN0cikge1xuXHRcdHJldHVybiBzdHJcblx0XHRcdC5yZXBsYWNlKC8mL2csIFwiJmFtcDtcIilcblx0XHRcdC5yZXBsYWNlKC88L2csIFwiJmx0O1wiKVxuXHRcdFx0LnJlcGxhY2UoLz4vZywgXCImZ3Q7XCIpXG5cdFx0XHQucmVwbGFjZSgvXCIvZywgXCImcXVvdDtcIilcblx0XHRcdC5yZXBsYWNlKC8nL2csIFwiJiMwMzk7XCIpO1xuXHR9XG5cblx0Ly8gXG5cdC8vIC0gZ2F0ZUdhbGxlcnkgYW5kIGN1c3RvbUdhdGVHYWxsZXJ5IGlzIHVzZWQgZm9yIHRvb2xib3ggcGFsZXR0ZSBpbiBkcmFnICYgZHJvcCBlZGl0b3IuXG5cdC8vIC0gZ2F0ZUdhbGxlcnlSYXcgaXMgdXNlZCB0byBnZW5lcmF0ZSBsaXN0IG9mIGFsbCBnYXRlIHN5bWJvbHMgdGhhdCBsb29rIHRoZSBzYW1lIGFzIGluIGRpYWdyYW1cblx0Ly8gICAoZ2F0ZSBzeW1ib2wgb25seSB3aXRob3V0IGNvbnRyb2xsaW5nIHdpcmUpLiBVc2VmdWwgdG8gZ2VuZXJhdGUgdHJhaW5pbmcgc2V0IGZvciBjaXJjdWl0IGltYWdlIHJlY29nbml0aW9uLlxuXHQvL1xuXHRpZihvcHRpb25zLmdhdGVHYWxsZXJ5IHx8IG9wdGlvbnMuZ2F0ZUdhbGxlcnlSYXcgfHwgb3B0aW9ucy5jdXN0b21HYXRlR2FsbGVyeSkge1xuXHRcdHZhciBnYXRlTGlzdCA9IFtdO1xuXG5cdFx0Ly8gYmFzaWMgZ2F0ZXNcblx0XHRpZihvcHRpb25zLmdhdGVHYWxsZXJ5IHx8IG9wdGlvbnMuZ2F0ZUdhbGxlcnlSYXcpIHtcblxuXHRcdFx0dmFyIHVuaXEgPSBbXTtcblx0XHRcdGZvcih2YXIgZ2F0ZU5hbWUgaW4gdGhpcy5iYXNpY0dhdGVzKSB7XG5cdFx0XHRcdHZhciBnYXRlID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0dmFyIGRpbmZvID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShnYXRlLmRyYXdpbmdJbmZvIHx8IHsgY29ubmVjdG9yczogW1wiYm94XCJdIH0pKTtcblx0XHRcdFx0aWYoZGluZm8uY29ubmVjdG9ycykge1xuXHRcdFx0XHRcdHZhciBnYXRlTGFiZWwgPSBkaW5mby5sYWJlbCB8fCBnYXRlTmFtZTtcblx0XHRcdFx0XHR2YXIgY29ubmVjdG9yID0gZGluZm8uY29ubmVjdG9ycyA/IGRpbmZvLmNvbm5lY3RvcnNbZGluZm8uY29ubmVjdG9ycy5sZW5ndGggLSAxXSA6IFwiYm94XCI7XG5cblx0XHRcdFx0XHRpZihvcHRpb25zLmdhdGVHYWxsZXJ5KSB7XG5cdFx0XHRcdFx0XHQvLyBEcmF3IFwic3dhcFwiLCBcImN1MVwiIGFuZCBcImN6XCIgZ2F0ZXMgYXMgYm94XG5cdFx0XHRcdFx0XHRpZihjb25uZWN0b3IgPT0gXCJ4XCIgfHwgY29ubmVjdG9yID09IFwiZG90XCIpIHtcblx0XHRcdFx0XHRcdFx0Y29ubmVjdG9yID0gXCJib3hcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgdW5pcVN0ciA9IGdhdGVMYWJlbCArIFwifFwiICsgY29ubmVjdG9yO1xuXG5cdFx0XHRcdFx0aWYodW5pcS5pbmRleE9mKHVuaXFTdHIpIDwgMCAmJiBnYXRlTmFtZSAhPSBcImNjeFwiKSB7XG5cdFx0XHRcdFx0XHR1bmlxLnB1c2godW5pcVN0cik7XG5cblx0XHRcdFx0XHRcdHZhciBzdmcgPSBcIlwiO1xuXHRcdFx0XHRcdFx0aWYoIW9wdGlvbnMuZW1iZWRkZWQpIHtcblx0XHRcdFx0XHRcdFx0c3ZnICs9IFwiPD94bWwgdmVyc2lvbj1cXFwiMS4wXFxcIj8+XCI7XG5cdFx0XHRcdFx0XHRcdHN2ZyArPVwiPCFET0NUWVBFIHN2ZyBQVUJMSUMgXFxcIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOXFxcIiBcXFwiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkXFxcIj5cIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHN2ZyArPSBcIjxzdmcgY2xhc3M9XFxcInFjLWdhdGUtZ2FsbGVyeS1pdGVtXFxcIiBkYXRhLWdhdGU9XFxcIlwiICsgZXNjYXBlSHRtbChnYXRlTmFtZSkgKyBcIlxcXCIgZGF0YS1jb250ZW50PVxcXCJcIiArIGVzY2FwZUh0bWwoZ2F0ZS5kZXNjcmlwdGlvbikgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgb3B0aW9ucy5jZWxsV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIG9wdGlvbnMuY2VsbEhlaWdodCArIFwiXFxcIiB2ZXJzaW9uPVxcXCIxLjFcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+XCI7XG5cdFx0XHRcdFx0XHRzdmcgPSBzdmcgKyBnYXRlU1ZHKDAsIDAsIGdhdGVOYW1lLCBnYXRlTGFiZWwsIGNvbm5lY3RvciwgISFvcHRpb25zLmdhdGVHYWxsZXJ5LCBmYWxzZSk7XG5cdFx0XHRcdFx0XHRzdmcgKz0gXCI8L3N2Zz5cIjtcblxuXHRcdFx0XHRcdFx0aWYob3B0aW9ucy5nYXRlR2FsbGVyeSkge1xuXHRcdFx0XHRcdFx0XHRnYXRlTGlzdC5wdXNoKHN2Zyk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRnYXRlTGlzdC5wdXNoKHsgbmFtZTogZ2F0ZU5hbWUsIHN2Zzogc3ZnIH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBzcGVjaWFsIGl0ZW06IGRvdFxuXHRcdFx0dmFyIGRvdHN2ZyA9IFwiXCI7XG5cdFx0XHRpZighb3B0aW9ucy5lbWJlZGRlZCkge1xuXHRcdFx0XHRkb3RzdmcgKz0gXCI8P3htbCB2ZXJzaW9uPVxcXCIxLjBcXFwiPz5cIjtcblx0XHRcdFx0ZG90c3ZnICs9XCI8IURPQ1RZUEUgc3ZnIFBVQkxJQyBcXFwiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU5cXFwiIFxcXCJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGRcXFwiPlwiO1xuXHRcdFx0fVxuXHRcdFx0ZG90c3ZnICs9IFwiPHN2ZyBjbGFzcz1cXFwicWMtZ2F0ZS1nYWxsZXJ5LWl0ZW1cXFwiIGRhdGEtZ2F0ZT1cXFwiZG90XFxcIiBkYXRhLWNvbnRlbnQ9XFxcIkNvbnRyb2xcXFwiIHdpZHRoPVxcXCJcIiArIG9wdGlvbnMuY2VsbFdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBvcHRpb25zLmNlbGxIZWlnaHQgKyBcIlxcXCIgdmVyc2lvbj1cXFwiMS4xXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPlwiO1xuXHRcdFx0ZG90c3ZnID0gZG90c3ZnICsgZ2F0ZVNWRygwLCAwLCBcImRvdFwiLCBcImRvdFwiLCBcImRvdFwiLCAhIW9wdGlvbnMuZ2F0ZUdhbGxlcnksIGZhbHNlKTtcblx0XHRcdGRvdHN2ZyArPSBcIjwvc3ZnPlwiO1xuXG5cdFx0XHRpZihvcHRpb25zLmdhdGVHYWxsZXJ5KSB7XG5cdFx0XHRcdGdhdGVMaXN0LnB1c2goZG90c3ZnKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGdhdGVMaXN0LnB1c2goeyBuYW1lOiBcImRvdFwiLCBzdmc6IGRvdHN2ZyB9KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gc3BlY2lhbCBpdGVtOiBpbnZlcnRlZCBkb3Rcblx0XHRcdHZhciBuZG90c3ZnID0gXCJcIjtcblx0XHRcdGlmKCFvcHRpb25zLmVtYmVkZGVkKSB7XG5cdFx0XHRcdG5kb3RzdmcgKz0gXCI8P3htbCB2ZXJzaW9uPVxcXCIxLjBcXFwiPz5cIjtcblx0XHRcdFx0bmRvdHN2ZyArPVwiPCFET0NUWVBFIHN2ZyBQVUJMSUMgXFxcIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOXFxcIiBcXFwiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkXFxcIj5cIjtcblx0XHRcdH1cblx0XHRcdG5kb3RzdmcgKz0gXCI8c3ZnIGNsYXNzPVxcXCJxYy1nYXRlLWdhbGxlcnktaXRlbVxcXCIgZGF0YS1nYXRlPVxcXCJuZG90XFxcIiBkYXRhLWNvbnRlbnQ9XFxcIkNvbnRyb2xcXFwiIHdpZHRoPVxcXCJcIiArIG9wdGlvbnMuY2VsbFdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBvcHRpb25zLmNlbGxIZWlnaHQgKyBcIlxcXCIgdmVyc2lvbj1cXFwiMS4xXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPlwiO1xuXHRcdFx0bmRvdHN2ZyA9IG5kb3RzdmcgKyBnYXRlU1ZHKDAsIDAsIFwibmRvdFwiLCBcIm5kb3RcIiwgXCJuZG90XCIsICEhb3B0aW9ucy5nYXRlR2FsbGVyeSwgZmFsc2UpO1xuXHRcdFx0bmRvdHN2ZyArPSBcIjwvc3ZnPlwiO1xuXG5cdFx0XHRpZihvcHRpb25zLmdhdGVHYWxsZXJ5KSB7XG5cdFx0XHRcdGdhdGVMaXN0LnB1c2gobmRvdHN2Zyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRnYXRlTGlzdC5wdXNoKHsgbmFtZTogXCJkb3RcIiwgc3ZnOiBuZG90c3ZnIH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIGN1c3RvbSBnYXRlc1xuXHRcdGlmKG9wdGlvbnMuY3VzdG9tR2F0ZUdhbGxlcnkpIHtcblx0XHRcdGZvcih2YXIgZ2F0ZU5hbWUgaW4gdGhpcy5jdXN0b21HYXRlcykge1xuXHRcdFx0XHR2YXIgc3ZnID0gXCJcIjtcblx0XHRcdFx0aWYoIW9wdGlvbnMuZW1iZWRkZWQpIHtcblx0XHRcdFx0XHRzdmcgKz0gXCI8P3htbCB2ZXJzaW9uPVxcXCIxLjBcXFwiPz5cIjtcblx0XHRcdFx0XHRzdmcgKz1cIjwhRE9DVFlQRSBzdmcgUFVCTElDIFxcXCItLy9XM0MvL0RURCBTVkcgMS4xLy9FTlxcXCIgXFxcImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZFxcXCI+XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3ZnICs9IFwiPHN2ZyBjbGFzcz1cXFwicWMtY3VzdG9tLWdhdGUtZ2FsbGVyeS1pdGVtXFxcIiBkYXRhLWdhdGU9XFxcIlwiICsgZ2F0ZU5hbWUgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgKG9wdGlvbnMuY2VsbFdpZHRoICogMikgKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIG9wdGlvbnMuY2VsbEhlaWdodCArIFwiXFxcIiB2ZXJzaW9uPVxcXCIxLjFcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+XCI7XG5cdFx0XHRcdHN2ZyA9IHN2ZyArIGdhdGVTVkcoMCwgMCwgZ2F0ZU5hbWUsIGdhdGVOYW1lLCBcInJlY3RcIiwgZmFsc2UsIGZhbHNlKTtcblx0XHRcdFx0c3ZnICs9IFwiPC9zdmc+XCI7XG5cdFx0XHRcdGdhdGVMaXN0LnB1c2goc3ZnKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZ2F0ZUxpc3Q7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIHN2ZyA9IFwiXCI7XG5cdFx0aWYoIW9wdGlvbnMuZW1iZWRkZWQpIHtcblx0XHRcdHN2ZyArPSBcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCI/PlwiO1xuXHRcdFx0c3ZnICs9XCI8IURPQ1RZUEUgc3ZnIFBVQkxJQyBcXFwiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU5cXFwiIFxcXCJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGRcXFwiPlwiO1xuXHRcdH1cblxuXHRcdHN2ZyArPSBcIjxzdmcgY2xhc3M9XFxcInFjLWNpcmN1aXRcXFwiIHdpZHRoPVxcXCJcIiArIHRvdGFsV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIHRvdGFsSGVpZ2h0ICsgXCJcXFwiIHZlcnNpb249XFxcIjEuMVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj5cIjtcblxuXHRcdGlmKG9wdGlvbnMucGxhY2Vob2xkZXJzKSB7XG5cdFx0XHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8PSBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdFx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDw9IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdFx0XHRzdmcgKz0gZHJhd0dhdGVQbGFjZWhvbGRlcihjb2x1bW4sIHdpcmUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUXVhbnR1bSB3aXJlc1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBudW1Sb3dzOyB3aXJlKyspIHtcblx0XHRcdHZhciB3aXJlWSA9IHFXaXJlWSh3aXJlKTtcblx0XHRcdHZhciBpbml0U3ltYm9sID0gXCIwXCI7XG5cdFx0XHRpZihvcHRpb25zLmN1c3RvbUdhdGUpIHtcblx0XHRcdFx0aW5pdFN5bWJvbCA9IHF1Yml0TGV0dGVyKHdpcmUsIG51bVJvd3MpO1xuXHRcdFx0fVxuXHRcdFx0c3ZnICs9IFwiPHRleHQgY2xhc3M9XFxcInFjLXdpcmUtaW5pdFxcXCIgeD1cXFwiMFxcXCIgeT1cXFwiXCIgKyB3aXJlWSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwibWlkZGxlXFxcIiB0ZXh0LWFuY2hvcj1cXFwic3RhcnRcXFwiPnxcIiArIGluaXRTeW1ib2wgKyBcIuKfqTwvdGV4dD5cIjtcblx0XHRcdHN2ZyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy13aXJlXFxcIiB4MT1cXFwiXCIgKyBvcHRpb25zLndpcmVNYXJnaW4gKyBcIlxcXCIgeDI9XFxcIlwiICsgdG90YWxXaXJlV2lkdGggKyBcIlxcXCIgeTE9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgeTI9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIG9wdGlvbnMud2lyZUNvbG9yICsgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiXCIgKyBvcHRpb25zLndpcmVXaWR0aCArIFwiXFxcIiAvPlwiO1xuXHRcdFx0c3ZnICs9IFwiPHRleHQgY2xhc3M9XFxcInFjLXdpcmUtbGFiZWxcXFwiIHg9XFxcIlwiICsgb3B0aW9ucy53aXJlTWFyZ2luICsgXCJcXFwiIHk9XFxcIlwiICsgKHdpcmVZIC0gKG9wdGlvbnMud2lyZVRleHRIZWlnaHQqMikpICsgXCJcXFwiIGRvbWluYW50LWJhc2VsaW5lPVxcXCJoYW5naW5nXFxcIiB0ZXh0LWFuY2hvcj1cXFwic3RhcnRcXFwiIGZvbnQtc2l6ZT1cXFwiNzUlXFxcIj5xXCIgKyB3aXJlICsgXCI8L3RleHQ+XCI7XG5cdFx0fVxuXG5cdFx0Ly8gQ2xhc3NpY2FsIHdpcmVzXG5cdFx0Zm9yKHZhciBjcmVnTmFtZSBpbiB0aGlzLmNyZWdzKSB7XG5cdFx0XHR2YXIgd2lyZVkgPSBjV2lyZVkoY3JlZ05hbWUpO1xuXHRcdFx0c3ZnICs9IFwiPHRleHQgY2xhc3M9XFxcInFjLXdpcmUtaW5pdFxcXCIgeD1cXFwiMFxcXCIgeT1cXFwiXCIgKyB3aXJlWSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwibWlkZGxlXFxcIiB0ZXh0LWFuY2hvcj1cXFwic3RhcnRcXFwiPjA8L3RleHQ+XCI7XG5cdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtd2lyZS1jXFxcIiB4MT1cXFwiXCIgKyBvcHRpb25zLndpcmVNYXJnaW4gKyBcIlxcXCIgeDI9XFxcIlwiICsgdG90YWxXaXJlV2lkdGggKyBcIlxcXCIgeTE9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgeTI9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIG9wdGlvbnMuY1dpcmVDb2xvciArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIlwiICsgb3B0aW9ucy53aXJlV2lkdGggKyBcIlxcXCIgLz5cIjtcblx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy13aXJlLWxhYmVsXFxcIiB4PVxcXCJcIiArIG9wdGlvbnMud2lyZU1hcmdpbiArIFwiXFxcIiB5PVxcXCJcIiArICh3aXJlWSAtIChvcHRpb25zLndpcmVUZXh0SGVpZ2h0ICogMikpICsgXCJcXFwiIGRvbWluYW50LWJhc2VsaW5lPVxcXCJoYW5naW5nXFxcIiB0ZXh0LWFuY2hvcj1cXFwic3RhcnRcXFwiIGZvbnQtc2l6ZT1cXFwiNzUlXFxcIj5cIiArIGNyZWdOYW1lICsgXCI8L3RleHQ+XCI7XG5cdFx0fVxuXG5cdFx0Ly8gR2F0ZXNcblx0XHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRcdGlmKGdhdGUpIHtcblx0XHRcdFx0XHRpZihnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdFx0XHRzdmcgKz0gZHJhd0dhdGUoZ2F0ZSwgY29sdW1uLCB3aXJlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBHYXRlIGhhbmRsZXMgKGZvciBkcmFnICYgZHJvcCBlZGl0b3IpXG5cdFx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0XHRpZihnYXRlKSB7XG5cdFx0XHRcdFx0aWYob3B0aW9ucy5wbGFjZWhvbGRlcnMpIHtcblx0XHRcdFx0XHRcdHN2ZyArPSBkcmF3R2F0ZUhhbmRsZShnYXRlLCBjb2x1bW4sIHdpcmUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFBsYWNlIGZvciBibG9jaCBzcGhlcmUgb24gZWFjaCBxdWFudHVtIHdpcmVcblx0XHRpZihvcHRpb25zLmRyYXdCbG9jaFNwaGVyZXMpIHtcblx0XHRcdHZhciBjdXJyZW50Q29sID0gdG90YWxDb2xzIC0gMTtcblx0XHRcdGlmKG9wdGlvbnMuZHJhd0h5YnJpZCkge1xuXHRcdFx0XHRjdXJyZW50Q29sIC09IDI7XG5cdFx0XHR9XG5cdFx0XHRcblx0XHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHRcdHN2ZyArPSBkcmF3R2F0ZUNhbnZhcyhjdXJyZW50Q29sLCB3aXJlLCBcInFjLWJsb2NoLWdyb3VwXCIsIFwicWMtYmxvY2gtY2FudmFzXCIpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIGh5YnJpZCBxdWFudHVtLWNsYXNzaWNhbFxuXHRcdGlmKG9wdGlvbnMuZHJhd0h5YnJpZCkge1xuXHRcdFx0dmFyIGN1cnJlbnRDb2wgPSB0b3RhbENvbHMgLSAyO1xuXHRcdFx0Ly8gY29ubmVjdG9yXG5cdFx0XHR2YXIgY29sSW5kZXggPSBjdXJyZW50Q29sO1xuXG5cdFx0XHR2YXIgZ2F0ZVggPSBnZXRDZWxsWChjb2xJbmRleCkgKyBvcHRpb25zLmJsYWNrYm94UGFkZGluZ1g7XG5cdFx0XHR2YXIgZ2F0ZVkgPSBxR2F0ZVkoMCkgKyBvcHRpb25zLmJsYWNrYm94UGFkZGluZ1k7XG5cdFx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGggLSAoMiAqIG9wdGlvbnMuYmxhY2tib3hQYWRkaW5nWCk7XG5cdFx0XHR2YXIgZ2F0ZUhlaWdodCA9ICgocUdhdGVZKG51bVJvd3MgKyBudW1DcmVncyAtIDEpICsgb3B0aW9ucy5jZWxsSGVpZ2h0KSAtIGdhdGVZKSAtIG9wdGlvbnMuYmxhY2tib3hQYWRkaW5nWTtcblxuXHRcdFx0dmFyIGNlbnRlclggPSBnYXRlWCArIChnYXRlV2lkdGggLyAyKTtcblx0XHRcdHZhciBjZW50ZXJZID0gZ2F0ZVkgKyAoZ2F0ZUhlaWdodCAvIDIpO1xuXG5cdFx0XHRjTGlua1RvcFkgPSBnYXRlWSArIGdhdGVIZWlnaHQ7XG5cblx0XHRcdC8vIGNvc3Rcblx0XHRcdHN2ZyArPSBcIjxyZWN0IGNsYXNzPVxcXCJxYy1jb3N0LWhcXFwiIHg9XFxcIlwiICsgZ2F0ZVggKyBcIlxcXCIgeT1cXFwiXCIgKyBnYXRlWSArIFwiXFxcIiB3aWR0aD1cXFwiXCIgKyBnYXRlV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIGdhdGVIZWlnaHQgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIG9wdGlvbnMuaFdpcmVDb2xvciArIFwiXFxcIiBmaWxsPVxcXCJ3aGl0ZVxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiByeD1cXFwiOFxcXCIgLz5cIjtcblx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy1sYWJlbC1oXFxcIiB4PVxcXCJcIiArIGNlbnRlclggKyBcIlxcXCIgeT1cXFwiXCIgKyBjZW50ZXJZICsgXCJcXFwiIGRvbWluYW50LWJhc2VsaW5lPVxcXCJtaWRkbGVcXFwiIHRleHQtYW5jaG9yPVxcXCJtaWRkbGVcXFwiIGZpbGw9XFxcIlwiICsgb3B0aW9ucy5oV2lyZUNvbG9yICsgXCJcXFwiIHRyYW5zZm9ybT1cXFwicm90YXRlKC05MCwgXCIgKyBjZW50ZXJYICsgXCIsIFwiICsgY2VudGVyWSArIFwiKVxcXCI+Q29zdDwvdGV4dD5cIjtcblxuXG5cdFx0XHR2YXIgZ2F0ZTJYID0gZ2V0Q2VsbFgoY29sSW5kZXggKyAxKSArIG9wdGlvbnMuYmxhY2tib3hQYWRkaW5nWDtcblx0XHRcdHZhciBjZW50ZXIyWCA9IGdhdGUyWCArIChnYXRlV2lkdGggLyAyKTtcblxuXHRcdFx0Ly8gYXJyb3dcblx0XHRcdHN2ZyArPSBcIjxtYXJrZXIgaWQ9XFxcInFjLWFycm93LWhlYWRcXFwiIG9yaWVudD1cXFwiYXV0b1xcXCIgbWFya2VyV2lkdGg9XFxcIjhcXFwiIG1hcmtlckhlaWdodD1cXFwiMTBcXFwiIHJlZlg9XFxcIjhcXFwiIHJlZlk9XFxcIjVcXFwiPjxwYXRoIGQ9XFxcIk0wLDAgVjEwIEw4LDUgWlxcXCIgZmlsbD1cXFwiXCIgKyBvcHRpb25zLmhXaXJlQ29sb3IgKyBcIlxcXCIvPjwvbWFya2VyPlwiO1xuXHRcdFx0c3ZnICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLWxpbmstaFxcXCIgeDE9XFxcIlwiICsgKGdhdGVYICsgZ2F0ZVdpZHRoKSArIFwiXFxcIiB4Mj1cXFwiXCIgKyBnYXRlMlggKyBcIlxcXCIgeTE9XFxcIlwiICsgY2VudGVyWSArXCJcXFwiIHkyPVxcXCJcIiArIGNlbnRlclkgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIG9wdGlvbnMuaFdpcmVDb2xvciArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIlwiICsgb3B0aW9ucy53aXJlV2lkdGggKyBcIlxcXCIgbWFya2VyLWVuZD1cXFwidXJsKCNxYy1hcnJvdy1oZWFkKVxcXCIgLz5cIjtcblxuXG5cdFx0XHQvLyBvcHRpbWl6ZXJcblx0XHRcdHN2ZyArPSBcIjxyZWN0IGNsYXNzPVxcXCJxYy1vcHRpbWl6ZXItaFxcXCIgeD1cXFwiXCIgKyBnYXRlMlggKyBcIlxcXCIgeT1cXFwiXCIgKyBnYXRlWSArIFwiXFxcIiB3aWR0aD1cXFwiXCIgKyBnYXRlV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIGdhdGVIZWlnaHQgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIG9wdGlvbnMuaFdpcmVDb2xvciArIFwiXFxcIiBmaWxsPVxcXCJ3aGl0ZVxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiByeD1cXFwiOFxcXCIgLz5cIjtcblx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy1sYWJlbC1oXFxcIiB4PVxcXCJcIiArIGNlbnRlcjJYICsgXCJcXFwiIHk9XFxcIlwiICsgY2VudGVyWSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwibWlkZGxlXFxcIiB0ZXh0LWFuY2hvcj1cXFwibWlkZGxlXFxcIiBmaWxsPVxcXCJcIiArIG9wdGlvbnMuaFdpcmVDb2xvciArIFwiXFxcIiB0cmFuc2Zvcm09XFxcInJvdGF0ZSgtOTAsIFwiICsgY2VudGVyMlggKyBcIiwgXCIgKyBjZW50ZXJZICsgXCIpXFxcIj5PcHRpbWl6ZXI8L3RleHQ+XCI7XG5cblx0XHRcdC8vIGxpbmtcblx0XHRcdHZhciBsaW5rWCA9IGNlbnRlcjJYO1xuXHRcdFx0dmFyIGxpbmtZMSA9IGNMaW5rVG9wWTtcblx0XHRcdHZhciBsaW5rWTIgPSBoeWJyaWRXaXJlWTtcblx0XHRcdHN2ZyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy13aXJlLWhcXFwiIHgxPVxcXCJcIiArIGxpbmtYICsgXCJcXFwiIHgyPVxcXCJcIiArIGxpbmtYICsgXCJcXFwiIHkxPVxcXCJcIiArIGxpbmtZMSArXCJcXFwiIHkyPVxcXCJcIiArIGxpbmtZMiArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgb3B0aW9ucy5oV2lyZUNvbG9yICsgXCJcXFwiIHN0cm9rZS1kYXNoYXJyYXk9XFxcIjRcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblxuXHRcdFx0Ly8gQ29ubmVjdCBhbGwgZ2xvYmFsbHkgcGFyYW1ldHJpemVkIGdhdGVzXG5cdFx0XHR2YXIgaFdpcmVYID0gMDtcblx0XHRcdHZhciBnbG9iYWxQYXJhbXNJbmZvID0gdGhpcy5maW5kR2xvYmFsUGFyYW1zKCk7XG5cdFx0XHRpZihnbG9iYWxQYXJhbXNJbmZvLmdsb2JhbFBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdFx0aFdpcmVYID0gZ2V0Q2VsbFgoZ2xvYmFsUGFyYW1zSW5mby5jZWxsc1swXVswXSkgKyBvcHRpb25zLmNlbGxXaWR0aCArIChvcHRpb25zLmhTcGFjaW5nIC8gMik7XG5cdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBnbG9iYWxQYXJhbXNJbmZvLmNlbGxzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFyIGNlbGwgPSBnbG9iYWxQYXJhbXNJbmZvLmNlbGxzW2ldO1xuXG5cdFx0XHRcdFx0dmFyIGxpbmsyWCA9IGdldENlbGxYKGNlbGxbMF0pICsgb3B0aW9ucy5jZWxsV2lkdGggKyAob3B0aW9ucy5oU3BhY2luZyAvIDIpO1xuXHRcdFx0XHRcdHZhciBsaW5rMlkyID0gZ2V0Q2VsbFkoY2VsbFsxXSkgKyBvcHRpb25zLmNlbGxIZWlnaHQgKyBvcHRpb25zLnZTcGFjaW5nIC0gKG9wdGlvbnMucGFyYW1UZXh0SGVpZ2h0IC8gMik7XG5cdFx0XHRcdFx0dmFyIGxpbmsyWTEgPSBoeWJyaWRXaXJlWTtcblx0XHRcdFx0XHR2YXIgY2VsbEJvdHRvbVJpZ2h0WCA9IGdldENlbGxYKGNlbGxbMF0pICsgb3B0aW9ucy5jZWxsV2lkdGg7XG5cdFx0XHRcdFx0dmFyIGNlbGxCb3R0b21SaWdodFkgPSBnZXRDZWxsWShjZWxsWzFdKSArIG9wdGlvbnMuY2VsbEhlaWdodCArIChvcHRpb25zLnBhcmFtVGV4dEhlaWdodCAqIDIpICsgNDtcblx0XHRcdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtd2lyZS1oXFxcIiB4MT1cXFwiXCIgKyBsaW5rMlggKyBcIlxcXCIgeDI9XFxcIlwiICsgbGluazJYICsgXCJcXFwiIHkxPVxcXCJcIiArIGxpbmsyWTEgK1wiXFxcIiB5Mj1cXFwiXCIgKyBsaW5rMlkyICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyBvcHRpb25zLmhXaXJlQ29sb3IgKyBcIlxcXCIgc3Ryb2tlLWRhc2hhcnJheT1cXFwiNFxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXHRcdFx0XHRcdHN2ZyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy13aXJlLWhcXFwiIHgxPVxcXCJcIiArIGxpbmsyWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyBjZWxsQm90dG9tUmlnaHRYICsgXCJcXFwiIHkxPVxcXCJcIiArIGxpbmsyWTIgK1wiXFxcIiB5Mj1cXFwiXCIgKyBjZWxsQm90dG9tUmlnaHRZICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyBvcHRpb25zLmhXaXJlQ29sb3IgKyBcIlxcXCIgc3Ryb2tlLWRhc2hhcnJheT1cXFwiNFxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiBtYXJrZXItZW5kPVxcXCJ1cmwoI3FjLWFycm93LWhlYWQpXFxcIiAvPlwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIHdpcmVZID0gaHlicmlkV2lyZVk7XG5cdFx0XHRcdHN2ZyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy13aXJlLWhcXFwiIHgxPVxcXCJcIiArIGhXaXJlWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyBjZW50ZXIyWCArIFwiXFxcIiB5MT1cXFwiXCIgKyB3aXJlWSArIFwiXFxcIiB5Mj1cXFwiXCIgKyB3aXJlWSArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgb3B0aW9ucy5oV2lyZUNvbG9yICsgXCJcXFwiIHN0cm9rZS1kYXNoYXJyYXk9XFxcIjRcXFwiIHN0cm9rZS13aWR0aD1cXFwiXCIgKyBvcHRpb25zLndpcmVXaWR0aCArIFwiXFxcIiAvPlwiO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBObyBnYXRlcyB3aXRoIGdsb2JhbCBwYXJhbXNcblx0XHRcdFx0aFdpcmVYID0gZ2V0Q2VsbFgodG90YWxXaXJlQ29scyk7XG5cblx0XHRcdFx0dmFyIHdpcmVZID0gaHlicmlkV2lyZVk7XG5cdFx0XHRcdHN2ZyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy13aXJlLWhcXFwiIHgxPVxcXCJcIiArIGNlbnRlcjJYICsgXCJcXFwiIHgyPVxcXCJcIiArIGhXaXJlWCArIFwiXFxcIiB5MT1cXFwiXCIgKyB3aXJlWSArIFwiXFxcIiB5Mj1cXFwiXCIgKyB3aXJlWSArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgb3B0aW9ucy5oV2lyZUNvbG9yICsgXCJcXFwiIHN0cm9rZS1kYXNoYXJyYXk9XFxcIjRcXFwiIHN0cm9rZS13aWR0aD1cXFwiXCIgKyBvcHRpb25zLndpcmVXaWR0aCArIFwiXFxcIiAgbWFya2VyLWVuZD1cXFwidXJsKCNxYy1hcnJvdy1oZWFkKVxcXCIgLz5cIjtcblx0XHRcdFx0c3ZnICs9IFwiPHRleHQgY2xhc3M9XFxcInFjLXdhcm5pbmctaFxcXCIgeD1cXFwiXCIgKyAoaFdpcmVYIC0gNSkgKyBcIlxcXCIgeT1cXFwiXCIgKyB3aXJlWSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwibWlkZGxlXFxcIiB0ZXh0LWFuY2hvcj1cXFwiZW5kXFxcIj4/PC90ZXh0PlwiO1xuXHRcdFx0fVxuXG5cdFx0fVxuXG5cdFx0c3ZnICs9IFwiPC9zdmc+XCI7XG5cdH1cblxuXHRyZXR1cm4gc3ZnO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvUWlza2l0ID0gZnVuY3Rpb24ob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSwgY2lyY3VpdFJlcGxhY2VtZW50LCBpbnNpZGVTdWJtb2R1bGUpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGNvbW1lbnQgPSBvcHRpb25zLmNvbW1lbnQ7XG5cdHZhciBkZWNvbXBvc2UgPSBvcHRpb25zLmRlY29tcG9zZTtcblx0dmFyIHZlcnNpb25TdHIgPSBvcHRpb25zLnZlcnNpb25TdHI7XG5cdHZhciBwcm92aWRlck5hbWUgPSBvcHRpb25zLnByb3ZpZGVyTmFtZTtcblx0dmFyIGJhY2tlbmROYW1lID0gb3B0aW9ucy5iYWNrZW5kTmFtZTtcblx0dmFyIGFzSnVweXRlciA9IG9wdGlvbnMuYXNKdXB5dGVyO1xuXHR2YXIgc2hvdHMgPSBvcHRpb25zLnNob3RzO1xuXHR2YXIgaHlicmlkID0gb3B0aW9ucy5oeWJyaWQ7XG5cblx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdHByb3ZpZGVyTmFtZSA9IHByb3ZpZGVyTmFtZSB8fCBcIkFlclwiO1xuXG5cdGJhY2tlbmROYW1lID0gYmFja2VuZE5hbWUgfHwgXCJcIjtcblx0aWYoIWJhY2tlbmROYW1lICYmIHByb3ZpZGVyTmFtZSA9PSBcIkFlclwiKSB7XG5cdFx0YmFja2VuZE5hbWUgPSBcInFhc21fc2ltdWxhdG9yXCI7XG5cdH1cblxuXHRzaG90cyA9IHNob3RzIHx8IDEwMjQ7XG5cblx0dmFyIHZlcnNpb24gPSBwYXJzZUZsb2F0KHZlcnNpb25TdHIgfHwgXCIwLjdcIik7XG5cdGlmKGlzTmFOKHZlcnNpb24pKSB7XG5cdFx0dmVyc2lvbiA9IDAuNztcblx0fVxuXG5cdGlmKHR5cGVvZiBoeWJyaWQgPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdGh5YnJpZCA9IHRoaXMub3B0aW9ucyA/ICEhdGhpcy5vcHRpb25zLmh5YnJpZCA6IGZhbHNlO1xuXHR9XG5cblx0Ly8gZGVjb21wb3NlID9cblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZShkZWNvbXBvc2UpKTtcblxuXHR2YXIgcWlza2l0ID0gXCJcIjtcblxuXHQvLyBjb21tZW50XG5cdGlmKGNvbW1lbnQpIHtcblx0XHR2YXIgY29tbSA9IChjb21tZW50IHx8IFwiXCIpLnNwbGl0KFwiXFxuXCIpO1xuXHRcdGNvbW0ubWFwKGZ1bmN0aW9uKGNsaW5lKSB7XG5cdFx0XHRpZihjbGluZS5sZW5ndGggPj0gMSAmJiBjbGluZVswXSAhPSBcIiNcIikge1xuXHRcdFx0XHRxaXNraXQgKz0gXCIjIFwiO1xuXHRcdFx0fVxuXHRcdFx0cWlza2l0ICs9IGNsaW5lO1xuXHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cdFx0fSk7XG5cdH1cblxuXHR2YXIgbWF0aFRvU3RyaW5nSGFuZGxlciA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMpIHtcblx0XHRpZihub2RlLmlzU3ltYm9sTm9kZSkge1xuXHRcdFx0dmFyIG51bXB5cyA9IFtcInBpXCIsIFwic2luXCIsIFwiY29zXCIsIFwidGFuXCIsIFwiYXNpblwiLCBcImFjb3NcIiwgXCJhdGFuXCJdO1xuXHRcdFx0aWYobnVtcHlzLmluZGV4T2Yobm9kZS5uYW1lKSA+PSAwKSB7XG5cdFx0XHRcdHJldHVybiBcIm5wLlwiICsgbm9kZS5uYW1lO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihzZWxmLnBhcmFtcy5pbmRleE9mKG5vZGUubmFtZSkgPj0gMCAmJiBoeWJyaWQpIHtcblx0XHRcdFx0cmV0dXJuIFwicGFyYW1zW1wiICsgc2VsZi5wYXJhbXMuaW5kZXhPZihub2RlLm5hbWUpICsgXCJdXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBhZGp1c3RJZGVudGF0aW9uID0gZnVuY3Rpb24oYWRkU3RyLCBpZGVudCkge1xuXHRcdHZhciBzdHIgPSBcIlwiO1xuXG5cdFx0Ly8gYWRkIHVzZXIgZGVmaW5lZCBjb3N0IGZ1bmN0aW9uIHdpdGggcHJvcGVyIGlkZW50YXRpb25cblx0XHR2YXIgY2ZMaW5lcyA9IGFkZFN0ci5zcGxpdChcIlxcblwiKTtcblx0XHR2YXIgbWluSWRlbnQgPSAtMTtcblx0XHRjZkxpbmVzLm1hcChmdW5jdGlvbihjZkxpbmUpIHtcblx0XHRcdHZhciB0bXBJZGVudCA9IGNmTGluZS5zZWFyY2goL1xcUy8pO1xuXHRcdFx0aWYodG1wSWRlbnQgPj0gMCAmJiAobWluSWRlbnQgPCAwIHx8IHRtcElkZW50IDwgbWluSWRlbnQpKSB7XG5cdFx0XHRcdG1pbklkZW50ID0gdG1wSWRlbnQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRpZihtaW5JZGVudCA8IDApIHtcblx0XHRcdG1pbklkZW50ID0gMDtcblx0XHR9XG5cblx0XHR2YXIgYWRkSWRlbnQgPSBcIlwiO1xuXHRcdGlmKG1pbklkZW50IDwgaWRlbnQubGVuZ3RoKSB7XG5cdFx0XHRmb3IodmFyIHRtcCA9IDA7IHRtcCA8IChpZGVudC5sZW5ndGggLSBtaW5JZGVudCk7IHRtcCsrKSB7XG5cdFx0XHRcdGFkZElkZW50ICs9IFwiIFwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNmTGluZXMubWFwKGZ1bmN0aW9uKGNmTGluZSkge1xuXHRcdFx0c3RyICs9IGFkZElkZW50ICsgY2ZMaW5lICsgXCJcXG5cIjtcblx0XHR9KTtcblxuXHRcdHJldHVybiBzdHI7XG5cdH07XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHFpc2tpdCArPSBcImRlZiBcIiArIGV4cG9ydEFzR2F0ZU5hbWUgKyBcIihxY1wiO1xuXG5cdFx0dmFyIGFyZ2MgPSAwO1xuXHRcdGlmKGNpcmN1aXQucGFyYW1zICYmIGNpcmN1aXQucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0Zm9yKHZhciBwYyA9IDA7IHBjIDwgY2lyY3VpdC5wYXJhbXMubGVuZ3RoOyBwYysrKSB7XG5cdFx0XHRcdHFpc2tpdCArPSBcIiwgXCI7XG5cdFx0XHRcdGFyZ2MrKztcblx0XHRcdFx0cWlza2l0ICs9IGNpcmN1aXQucGFyYW1zW3BjXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY2lyY3VpdC5udW1RdWJpdHM7IGkrKykge1xuXHRcdFx0cWlza2l0ICs9IFwiLCBcIjtcblx0XHRcdGFyZ2MrKztcblx0XHRcdHFpc2tpdCArPSBxdWJpdExldHRlcihpLCBjaXJjdWl0Lm51bVF1Yml0cyk7XG5cdFx0fVxuXHRcdHFpc2tpdCArPSBcIik6XFxuXCI7XG5cdH0gZWxzZSB7XG5cdFx0aWYoIWNpcmN1aXRSZXBsYWNlbWVudCkge1xuXHRcdFx0cWlza2l0ICs9IFwiZnJvbSBxaXNraXQgaW1wb3J0IFF1YW50dW1SZWdpc3RlciwgQ2xhc3NpY2FsUmVnaXN0ZXJcXG5cIjtcblx0XHRcdHFpc2tpdCArPSBcImZyb20gcWlza2l0IGltcG9ydCBRdWFudHVtQ2lyY3VpdCwgZXhlY3V0ZSwgXCIgKyBwcm92aWRlck5hbWUgKyBcIlxcblwiO1xuXG5cdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0cWlza2l0ICs9IFwiZnJvbSBzY2lweS5vcHRpbWl6ZSBpbXBvcnQgbWluaW1pemVcXG5cIjtcblx0XHRcdFx0cWlza2l0ICs9IFwiZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlclxcblwiO1xuXHRcdFx0fVxuXG5cdFx0XHRxaXNraXQgKz0gXCJpbXBvcnQgbnVtcHkgYXMgbnBcXG5cIjtcblx0XHRcdHFpc2tpdCArPSBcIlxcblwiO1xuXG5cdFx0XHRpZihzaG90cykge1xuXHRcdFx0XHRxaXNraXQgKz0gXCJzaG90cyA9IFwiICsgc2hvdHMgKyBcIlxcblwiO1xuXHRcdFx0XHRxaXNraXQgKz0gXCJcXG5cIjtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGdsb2JhbFBhcmFtcyA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucGFyYW1zID8gdGhpcy5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXHRcdFx0aWYodGhpcy5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciBnbG9iYWxQYXJhbU5hbWUgPSB0aGlzLnBhcmFtc1tpXTtcblxuXHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtVmFsdWUgPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblxuXHRcdFx0XHRcdHFpc2tpdCArPSBnbG9iYWxQYXJhbU5hbWUgKyBcIiA9IFwiICsgZ2xvYmFsUGFyYW1WYWx1ZSArIFwiXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cdFx0XHR9XG5cblx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRxaXNraXQgKz0gXCJ0b2xlcmFuY2UgPSBcIiArICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMudG9sZXJhbmNlID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMudG9sZXJhbmNlIHx8IFwiMC4wMDFcIiA6IFwiMC4wMDFcIikgKyBcIlxcblwiO1xuXHRcdFx0XHRxaXNraXQgKz0gXCJcXG5cIjtcblx0XHRcdH1cblxuXHRcdFx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdFx0XHRpZighZGVjb21wb3NlKSB7XG5cdFx0XHRcdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRcdGlmKCFiYXNpY0dhdGUpIHtcblx0XHRcdFx0XHRcdHZhciBjdXN0b21HYXRlID0gc2VsZi5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRcdFx0aWYoY3VzdG9tR2F0ZSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgY3VzdG9tQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0XHRjdXN0b21DaXJjdWl0LmxvYWQoY3VzdG9tR2F0ZSk7XG5cdFx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbW1lbnQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdHZlcnNpb25TdHI6IHZlcnNpb25TdHIsXG5cdFx0XHRcdFx0XHRcdFx0cHJvdmlkZXJOYW1lOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdGJhY2tlbmROYW1lOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRhc0p1cHl0ZXI6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdHNob3RzOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRoeWJyaWQ6IG51bGxcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0cWlza2l0ICs9IGN1c3RvbUNpcmN1aXQuZXhwb3J0VG9RaXNraXQobmV3T3B0aW9ucywgdXNlZEdhdGVOYW1lLCBjaXJjdWl0UmVwbGFjZW1lbnQsIGluc2lkZVN1Ym1vZHVsZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGlkZW50YXRpb24gPSBcIlwiO1xuXHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdGlkZW50YXRpb24gPSBcIiAgXCI7XG5cblx0XHRcdFx0cWlza2l0ICs9IFwiZGVmIG9iamVjdGl2ZV9mdW5jdGlvbihwYXJhbXMpOlxcblwiXG5cdFx0XHR9XG5cblx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJxYyA9IFF1YW50dW1DaXJjdWl0KClcXG5cIjtcblx0XHRcdHFpc2tpdCArPSBcIlxcblwiO1xuXG5cdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwicSA9IFF1YW50dW1SZWdpc3RlcihcIiArIGNpcmN1aXQubnVtUXViaXRzICsgXCIsICdxJylcXG5cIjtcblx0XHRcdGZvcih2YXIgY3JlZ05hbWUgaW4gdGhpcy5jcmVncykge1xuXHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIGNyZWdOYW1lICsgXCIgPSBDbGFzc2ljYWxSZWdpc3RlcihcIiArICh0aGlzLmNyZWdzW2NyZWdOYW1lXS5sZW5ndGggfHwgMSkgKyBcIiwgJ1wiICsgY3JlZ05hbWUgKyBcIicpXFxuXCI7XG5cdFx0XHR9XG5cdFx0XHRxaXNraXQgKz0gXCJcXG5cIjtcblxuXHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcInFjLmFkZF9yZWdpc3RlcihxKVxcblwiO1xuXHRcdFx0Zm9yKHZhciBjcmVnTmFtZSBpbiB0aGlzLmNyZWdzKSB7XG5cdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJxYy5hZGRfcmVnaXN0ZXIoXCIgKyBjcmVnTmFtZSArIFwiKVxcblwiO1xuXHRcdFx0fVxuXHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cdFx0fVxuXHR9XG5cblx0dmFyIG51bUNvbHMgPSBjaXJjdWl0Lm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XHRcblx0XHRcdHZhciBxaXNraXRSZXBsYWNlbWVudCA9IG51bGw7XG5cdFx0XHR2YXIgcWlza2l0RXF1aXZhbGVudCA9IG51bGw7XG5cdFx0XHR2YXIgcWlza2l0Q29uZGl0aW9uID0gbnVsbDtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHRcblx0XHRcdFx0cWlza2l0Q29uZGl0aW9uID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnID8gZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiA6IG51bGw7XG5cblx0XHRcdFx0dmFyIGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZS5uYW1lKTtcblx0XHRcdFx0aWYoZ2F0ZURlZil7XG5cdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvKSB7XG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8ucWlza2l0ICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xaXNraXQucmVwbGFjZW1lbnQpe1xuXHRcdFx0XHRcdFx0XHRxaXNraXRSZXBsYWNlbWVudCA9IGdhdGVEZWYuZXhwb3J0SW5mby5xaXNraXQucmVwbGFjZW1lbnQ7XG5cdFx0XHRcdFx0XHRcdHFpc2tpdFJlcGxhY2VtZW50Lm1hcChmdW5jdGlvbihyZXBsYWNlbWVudCl7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJlcGxhY2VtZW50Q2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zKXtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbXMgPSBPYmplY3Qua2V5cyhnYXRlLm9wdGlvbnMucGFyYW1zKTtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXBsYWNlbWVudFBhcmFtcyA9IE9iamVjdC5rZXlzKHJlcGxhY2VtZW50LnBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbXMubWFwKGZ1bmN0aW9uKHBhcmFtKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYocmVwbGFjZW1lbnRQYXJhbXMuaW5kZXhPZihwYXJhbSkgPiAtMSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVwbGFjZW1lbnQucGFyYW1zW3BhcmFtXSA9IGdhdGUub3B0aW9ucy5wYXJhbXNbcGFyYW1dO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRyZXBsYWNlbWVudENpcmN1aXQuYWRkR2F0ZShyZXBsYWNlbWVudC5uYW1lLCBjb2x1bW4sIGdhdGUud2lyZXMsIHtwYXJhbXM6IHJlcGxhY2VtZW50LnBhcmFtcywgY29uZGl0aW9uOiBxaXNraXRDb25kaXRpb259KTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbW1lbnQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRkZWNvbXBvc2U6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0dmVyc2lvblN0cjogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRwcm92aWRlck5hbWU6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0YmFja2VuZE5hbWU6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0YXNKdXB5dGVyOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdHNob3RzOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdGh5YnJpZDogbnVsbFxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0cWlza2l0ICs9IHJlcGxhY2VtZW50Q2lyY3VpdC5leHBvcnRUb1Fpc2tpdChuZXdPcHRpb25zLCBmYWxzZSwgdHJ1ZSwgISFleHBvcnRBc0dhdGVOYW1lIHx8IGluc2lkZVN1Ym1vZHVsZSk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xaXNraXQgJiYgZ2F0ZURlZi5leHBvcnRJbmZvLnFpc2tpdC5lcXVpdmFsZW50KXtcblx0XHRcdFx0XHRcdFx0cWlza2l0RXF1aXZhbGVudCA9IGdhdGVEZWYuZXhwb3J0SW5mby5xaXNraXQuZXF1aXZhbGVudDtcblx0XHRcdFx0XHRcdFx0cWlza2l0RXF1aXZhbGVudC5tYXAoZnVuY3Rpb24oZXF1aXZhbGVudCl7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGVxdWl2YWxlbnRDaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVXaXJlcyA9IGVxdWl2YWxlbnQud2lyZXMubGVuZ3RoID4gMSA/IGdhdGUud2lyZXMgOiBnYXRlLndpcmVzW2VxdWl2YWxlbnQud2lyZXNbMF1dO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBlcVBhcmFtcyA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdGlmKGVxdWl2YWxlbnQucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZ2F0ZVBhcmFtcyA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBnYXRlUGFyYW1OYW1lIGluIGdhdGUub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRnYXRlUGFyYW1zW2dhdGVQYXJhbU5hbWVdID0gbWF0aC5ldmFsdWF0ZShnYXRlLm9wdGlvbnMucGFyYW1zW2dhdGVQYXJhbU5hbWVdKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGVxUGFyYW1OYW1lIGluIGVxdWl2YWxlbnQucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVxUGFyYW1zW2VxUGFyYW1OYW1lXSA9IG1hdGguZXZhbHVhdGUoZXF1aXZhbGVudC5wYXJhbXNbZXFQYXJhbU5hbWVdLCBnYXRlUGFyYW1zKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRlcXVpdmFsZW50Q2lyY3VpdC5hZGRHYXRlKGVxdWl2YWxlbnQubmFtZSwgY29sdW1uLCBnYXRlV2lyZXMsIHsgcGFyYW1zOiBlcVBhcmFtcywgY29uZGl0aW9uOiBxaXNraXRDb25kaXRpb24gfSk7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21tZW50OiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdHZlcnNpb25TdHI6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0cHJvdmlkZXJOYW1lOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdGJhY2tlbmROYW1lOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdGFzSnVweXRlcjogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRzaG90czogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRoeWJyaWQ6IG51bGxcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdHFpc2tpdCArPSBlcXVpdmFsZW50Q2lyY3VpdC5leHBvcnRUb1Fpc2tpdChuZXdPcHRpb25zLCBmYWxzZSwgdHJ1ZSwgISFleHBvcnRBc0dhdGVOYW1lIHx8IGluc2lkZVN1Ym1vZHVsZSk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKCFxaXNraXRSZXBsYWNlbWVudCAmJiAhcWlza2l0RXF1aXZhbGVudCkge1xuXHRcdFx0XHRcdGlmKGV4cG9ydEFzR2F0ZU5hbWUgfHwgaW5zaWRlU3VibW9kdWxlIHx8IGh5YnJpZCkge1xuXHRcdFx0XHRcdFx0cWlza2l0ICs9IFwiICBcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZighcWlza2l0UmVwbGFjZW1lbnQgJiYgIXFpc2tpdEVxdWl2YWxlbnQpIHtcblxuXHRcdFx0XHRcdHZhciBnYXRlTmFtZSA9IGdhdGUubmFtZTtcblxuXHRcdFx0XHRcdHZhciBnYXRlUGFyYW1zID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMgPyBnYXRlLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0aWYodGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXSkge1xuXHRcdFx0XHRcdFx0cWlza2l0ICs9IFwicWMuXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGlmKGdhdGVEZWYgJiYgZ2F0ZURlZi5leHBvcnRJbmZvICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xaXNraXQgJiYgZ2F0ZURlZi5leHBvcnRJbmZvLnFpc2tpdC5uYW1lKXtcblx0XHRcdFx0XHRcdGdhdGVOYW1lID0gZ2F0ZURlZi5leHBvcnRJbmZvLnFpc2tpdC5uYW1lO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRnYXRlTmFtZSA9IGdhdGUubmFtZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0cWlza2l0ICs9IGdhdGVOYW1lICsgXCIoXCI7XG5cblx0XHRcdFx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdFx0XHRcdGlmKGdhdGVQYXJhbXMpIHtcblx0XHRcdFx0XHRcdHZhciBnYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdFx0XHRpZighZ2F0ZURlZikge1xuXHRcdFx0XHRcdFx0XHRnYXRlRGVmID0gdGhpcy5jdXN0b21HYXRlc1tnYXRlLm5hbWVdO1xuXG5cdFx0XHRcdFx0XHRcdHFpc2tpdCArPSBcInFjXCI7XG5cdFx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGdhdGVEZWYpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtRGVmID0gZ2F0ZURlZi5wYXJhbXMgfHwgW107XG5cdFx0XHRcdFx0XHRcdHZhciBwYXJhbUNvdW50ID0gcGFyYW1EZWYubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRpZihwYXJhbUNvdW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IHBhcmFtQ291bnQ7IHArKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHFpc2tpdCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gcGFyYW1EZWZbcF07XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gcHJlcGVuZCAnbnAnIHRvIG1hdGggY29uc3RhbnRzXG5cdFx0XHRcdFx0XHRcdFx0XHRpZihnYXRlUGFyYW1zW3BhcmFtTmFtZV0gfHwgZ2F0ZVBhcmFtc1twYXJhbU5hbWVdLnRvU3RyaW5nKCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbcGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHFpc2tpdCArPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGVOYW1lID09IFwiY3VcIiAmJiAhZ2F0ZVBhcmFtc1tcImdhbW1hXCJdKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRxaXNraXQgKz0gXCIsIDBcIjtcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdHFpc2tpdCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lIHx8IGluc2lkZVN1Ym1vZHVsZSkge1xuXHRcdFx0XHRcdFx0XHRxaXNraXQgKz0gcXViaXRMZXR0ZXIoZ2F0ZS53aXJlc1t3XSwgY2lyY3VpdC5udW1RdWJpdHMpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cWlza2l0ICs9IFwicVtcIiArIGdhdGUud2lyZXNbd10gKyBcIl1cIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoZ2F0ZU5hbWUgPT0gXCJtZWFzdXJlXCIgJiYgZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jcmVnKSB7XG5cdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0cWlza2l0ICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cWlza2l0ICs9IGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgKyBcIltcIiArIGdhdGUub3B0aW9ucy5jcmVnLmJpdCArIFwiXVwiO1xuXHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRxaXNraXQgKz0gXCIpXCI7XHRcdFx0XHRcdFxuXG5cdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKSB7XG5cdFx0XHRcdFx0XHRxaXNraXQgKz0gXCIuY19pZihcIiArIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyArIFwiLCBcIiArIGdhdGUub3B0aW9ucy5jb25kaXRpb24udmFsdWUgKyBcIilcIjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRxaXNraXQgKz0gXCJcXG5cIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKCFjaXJjdWl0UmVwbGFjZW1lbnQpIHtcblx0XHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0XHRxaXNraXQgKz0gXCJcXG5cIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cblx0XHRcdHZhciBpZGVudGF0aW9uID0gXCJcIjtcblx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRpZGVudGF0aW9uID0gXCIgIFwiO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihwcm92aWRlck5hbWUgPT0gXCJBZXJcIikge1xuXHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwiYmFja2VuZCA9IEFlci5nZXRfYmFja2VuZCgnXCIgKyBiYWNrZW5kTmFtZSArIFwiJylcXG5cIjtcblx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcImpvYiA9IGV4ZWN1dGUocWMsIGJhY2tlbmQ9YmFja2VuZFwiO1xuXHRcdFx0XHRpZihzaG90cykge1xuXHRcdFx0XHRcdHFpc2tpdCArPSBcIiwgc2hvdHM9c2hvdHNcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRxaXNraXQgKz0gXCIpXFxuXCI7XG5cdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJqb2JfcmVzdWx0ID0gam9iLnJlc3VsdCgpXFxuXCI7XG5cblx0XHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcImNvdW50cyA9IENvdW50ZXIoam9iX3Jlc3VsdC5nZXRfY291bnRzKHFjKSlcXG5cIjtcblx0XHRcdFx0XHRxaXNraXQgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCIjIENBTENVTEFURSBDT1NUIEhFUkVcXG5cIjtcblxuXHRcdFx0XHRcdHZhciBjb3N0RnVuY3Rpb24gPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uLnB5dGhvbiB8fCBcIlwiIDogXCJcIjtcblx0XHRcdFx0XHRpZighY29zdEZ1bmN0aW9uLnRyaW0oKSkge1xuXHRcdFx0XHRcdFx0Y29zdEZ1bmN0aW9uID0gXCJjb3N0ID0gMFwiO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHFpc2tpdCArPSBhZGp1c3RJZGVudGF0aW9uKGNvc3RGdW5jdGlvbiwgaWRlbnRhdGlvbik7XG5cblx0XHRcdFx0XHRxaXNraXQgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJyZXR1cm4gY29zdFxcblwiXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcInByaW50KGpvYl9yZXN1bHQuZ2V0X2NvdW50cyhxYykpXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYocHJvdmlkZXJOYW1lID09IFwiSUJNUVwiKSB7XG5cdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJJQk1RLmxvYWRfYWNjb3VudCgpXFxuXCI7XG5cdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJwcm92aWRlciA9IElCTVEuZ2V0X3Byb3ZpZGVyKGh1Yj1cXFwiaWJtLXFcXFwiLCBncm91cD1cXFwib3BlblxcXCIsIHByb2plY3Q9XFxcIm1haW5cXFwiKVxcblwiO1xuXHRcdFx0XHRpZihiYWNrZW5kTmFtZSkge1xuXHRcdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJiYWNrZW5kID0gcHJvdmlkZXIuZ2V0X2JhY2tlbmQoXFxcIlwiICsgYmFja2VuZE5hbWUgKyBcIlxcXCIpXFxuXCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdCAgcWlza2l0ICs9IGlkZW50YXRpb24gKyBcImJhY2tlbmRzID0gcHJvdmlkZXIuYmFja2VuZHMoKVxcblwiO1xuXHRcdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJiYWNrZW5kID0gbGVhc3RfYnVzeShiYWNrZW5kcylcXG5cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwiam9iID0gZXhlY3V0ZShxYywgYmFja2VuZD1iYWNrZW5kXCI7XG5cdFx0XHRcdGlmKHNob3RzKSB7XG5cdFx0XHRcdFx0cWlza2l0ICs9IFwiLCBzaG90cz1zaG90c1wiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHFpc2tpdCArPSBcIilcXG5cIjtcblx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcImpvYl9yZXN1bHQgPSBqb2IucmVzdWx0KClcXG5cIjtcblxuXHRcdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwiY291bnRzID0gQ291bnRlcihqb2JfcmVzdWx0LmdldF9jb3VudHMocWMpKVxcblwiO1xuXHRcdFx0XHRcdHFpc2tpdCArPSBcIlxcblwiXG5cdFx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcIiMgQ0FMQ1VMQVRFIENPU1QgSEVSRVxcblwiO1xuXG5cdFx0XHRcdFx0dmFyIGNvc3RGdW5jdGlvbiA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24gPyB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24ucHl0aG9uIHx8IFwiXCIgOiBcIlwiO1xuXHRcdFx0XHRcdGlmKCFjb3N0RnVuY3Rpb24udHJpbSgpKSB7XG5cdFx0XHRcdFx0XHRjb3N0RnVuY3Rpb24gPSBcImNvc3QgPSAwXCI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cWlza2l0ICs9IGFkanVzdElkZW50YXRpb24oY29zdEZ1bmN0aW9uLCBpZGVudGF0aW9uKTtcblxuXHRcdFx0XHRcdHFpc2tpdCArPSBcIlxcblwiXG5cdFx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcInJldHVybiBjb3N0XFxuXCJcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwicHJpbnQoam9iX3Jlc3VsdC5nZXRfY291bnRzKHFjKSlcXG5cIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtTGlzdCA9IFwiXCI7XG5cdFx0XHRcdHRoaXMucGFyYW1zLm1hcChmdW5jdGlvbihnbG9iYWxQYXJhbU5hbWUsIGdsb2JhbFBhcmFtSW5kZXgpIHtcblx0XHRcdFx0XHRpZihnbG9iYWxQYXJhbUluZGV4ID4gMCkge1xuXHRcdFx0XHRcdFx0Z2xvYmFsUGFyYW1MaXN0ICs9IFwiLCBcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Z2xvYmFsUGFyYW1MaXN0ICs9IGdsb2JhbFBhcmFtTmFtZTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cdFx0XHRcdHFpc2tpdCArPSBcInBhcmFtcyA9IG5wLmFycmF5KFtcIiArIGdsb2JhbFBhcmFtTGlzdCArIFwiXSlcXG5cIjtcblx0XHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cdFx0XHRcdHFpc2tpdCArPSBcIm1pbmltdW0gPSBtaW5pbWl6ZShvYmplY3RpdmVfZnVuY3Rpb24sIHBhcmFtcywgbWV0aG9kPVxcXCJcIiArICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMub3B0aW1pemVyID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMub3B0aW1pemVyIDogXCJQb3dlbGxcIikgKyBcIlxcXCIsIHRvbD10b2xlcmFuY2UpXFxuXCI7XG5cdFx0XHRcdHFpc2tpdCArPSBcInByaW50KFxcXCJjb3N0OlxcXCIsIG1pbmltdW0uZnVuLCBcXFwicGFyYW1zOlxcXCIsIG1pbmltdW0ueClcXG5cIjtcblx0XHRcdH1cblx0XHR9XG5cblxuXHRcdGlmKGFzSnVweXRlcikge1xuXHRcdFx0dmFyIG5vdGVib29rID0ge1xuXHRcdFx0XHRtZXRhZGF0YToge1xuXHRcdFx0XHRcdGtlcm5lbHNwZWM6IHtcblx0XHRcdFx0XHRcdGRpc3BsYXlfbmFtZTogXCJQeXRob24gM1wiLFxuXHRcdFx0XHRcdFx0bGFuZ3VhZ2U6IFwicHl0aG9uXCIsXG5cdFx0XHRcdFx0XHRuYW1lOiBcInB5dGhvbjNcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0bmJmb3JtYXQ6IDQsXG5cdFx0XHRcdG5iZm9ybWF0X21pbm9yOiAwLFxuXHRcdFx0XHRjZWxsczogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGNlbGxfdHlwZTogXCJjb2RlXCIsXG5cdFx0XHRcdFx0XHRzb3VyY2U6IHFpc2tpdCxcblx0XHRcdFx0XHRcdG1ldGFkYXRhOiB7XG5cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRvdXRwdXRzOiBbXSxcblx0XHRcdFx0XHRcdGV4ZWN1dGlvbl9jb3VudDogbnVsbFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XVxuXHRcdFx0fTtcblx0XHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShub3RlYm9vayk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHFpc2tpdDtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb1F1RVNUID0gZnVuY3Rpb24ob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSwgZGVmaW5lZEZ1bmMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGNvbW1lbnQgPSBvcHRpb25zLmNvbW1lbnQ7XG5cdHZhciBkZWNvbXBvc2UgPSBvcHRpb25zLmRlY29tcG9zZTtcblxuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0ZGVmaW5lZEZ1bmMgPSBkZWZpbmVkRnVuYyB8fCBbXTtcblxuXHR2YXIgY2lyY3VpdCA9IG51bGw7XG5cdHZhciBmdW5jdGlvbnMgPSBbXCJ1bml0YXJ5XCIsXCJjb250cm9sbGVkVW5pdGFyeVwiXTtcblxuXHQvLyBkZWNvbXBvc2UgP1xuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRjaXJjdWl0LmxvYWQodGhpcy5zYXZlKGRlY29tcG9zZSkpO1xuXG5cdHZhciBxdWVzdCA9IFwiXCI7XG5cblx0Ly8gY29tbWVudFxuXHRpZihjb21tZW50KSB7XG5cdFx0dmFyIGNvbW0gPSAoY29tbWVudCB8fCBcIlwiKS5zcGxpdChcIlxcblwiKTtcblx0XHRjb21tLm1hcChmdW5jdGlvbihjbGluZSkge1xuXHRcdFx0aWYoY2xpbmUubGVuZ3RoID49IDIgJiYgY2xpbmVbMF0gIT0gXCIvXCIgJiYgY2xpbmVbMV0gIT0gXCIvXCIpIHtcblx0XHRcdFx0cXVlc3QgKz0gXCIvLyBcIjtcblx0XHRcdH1cblx0XHRcdHF1ZXN0ICs9IGNsaW5lO1xuXHRcdFx0cXVlc3QgKz0gXCJcXG5cIjtcblx0XHR9KTtcblx0fVxuXG5cdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLm51bVF1Yml0czsgaSsrKSB7XG5cdFx0dmFyIGdhdGVzID0gdGhpcy5nYXRlc1tpXTtcblx0XHRmb3IodmFyIGogPSAwOyBqIDwgZ2F0ZXMubGVuZ3RoOyBqKyspIHtcblx0XHRcdHZhciBnYXRlID0gZ2F0ZXNbal07XG5cdFx0XHRpZighZ2F0ZSB8fCAhdGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV0pe1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0aWYodGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV0uZXhwb3J0SW5mbyAmJiB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXS5leHBvcnRJbmZvLnF1ZXN0KSB7XG5cdFx0XHRcdHZhciBxdWVzdE5hbWUgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXS5leHBvcnRJbmZvLnF1ZXN0Lm5hbWU7XG5cdFx0XHRcdGlmKGRlZmluZWRGdW5jLmluY2x1ZGVzKGdhdGUubmFtZSkpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZihmdW5jdGlvbnMuaW5jbHVkZXMocXVlc3ROYW1lKSB8fCB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXS5leHBvcnRJbmZvLnF1ZXN0LmZ1bmMgKSB7XG5cdFx0XHRcdFx0ZGVmaW5lZEZ1bmMucHVzaChnYXRlLm5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHF1ZXN0ICs9IFwiUXVyZWcgXCIgKyBleHBvcnRBc0dhdGVOYW1lICsgXCIoUXVyZWcgcXViaXRzXCI7XG5cblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY2lyY3VpdC5udW1RdWJpdHM7IGkrKykge1xuXHRcdFx0cXVlc3QgKz0gXCIsIGNvbnN0IGludCBxXCI7XG5cdFx0XHRxdWVzdCArPSBpO1xuXHRcdH1cblxuXHRcdGlmKGNpcmN1aXQucGFyYW1zICYmIGNpcmN1aXQucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHF1ZXN0ICs9IFwiLCBkb3VibGUgXCIgKyBjaXJjdWl0LnBhcmFtc1tpXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cXVlc3QgKz0gXCIpIHtcXG5cIjtcblx0fSBlbHNlIHtcblx0XHRxdWVzdCArPSBcIiNpbmNsdWRlIDxtYXRoLmg+XFxuI2luY2x1ZGUgXFxcIlF1RVNULmhcXFwiXFxuXFxuXCI7XG5cdFx0cXVlc3QgKz0gXCIjaWZuZGVmIE1fUElcXG4jZGVmaW5lIE1fUEkgMy4xNDE1OTI2NVxcbiNlbmRpZlxcblxcblwiO1xuXG5cdFx0dmFyIGN1c3RvbVF1RVNUID0gW107XG5cblxuXHRcdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHRcdGlmKCFkZWNvbXBvc2UpIHtcblx0XHRcdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0XHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0aWYoIWJhc2ljR2F0ZSkge1xuXHRcdFx0XHRcdHZhciBjdXN0b21HYXRlID0gc2VsZi5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRcdGlmKGN1c3RvbUdhdGUpIHtcblx0XHRcdFx0XHRcdHZhciBjdXN0b21DaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRjdXN0b21DaXJjdWl0LmxvYWQoY3VzdG9tR2F0ZSk7XG5cdFx0XHRcdFx0XHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRcdFx0XHRcdFx0Y29tbWVudDogXCJcIixcblx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlOiBmYWxzZVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdGN1c3RvbVF1RVNULnB1c2goY3VzdG9tQ2lyY3VpdC5leHBvcnRUb1F1RVNUKG5ld09wdGlvbnMsIHVzZWRHYXRlTmFtZSwgZGVmaW5lZEZ1bmMpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBkZWZpbmVkRnVuYy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGdhdGVOYW1lID0gZGVmaW5lZEZ1bmNbaV07XG5cdFx0XHR2YXIgcXVlc3ROYW1lID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXS5leHBvcnRJbmZvLnF1ZXN0Lm5hbWU7XG5cdFx0XHRzd2l0Y2gocXVlc3ROYW1lKSB7XG5cdFx0XHRcdGNhc2UgXCJ1bml0YXJ5XCI6XG5cdFx0XHRcdGNhc2UgXCJjb250cm9sbGVkVW5pdGFyeVwiOiB7XG5cdFx0XHRcdFx0bWF0cml4ID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXS5leHBvcnRJbmZvLnF1ZXN0Lm1hdHJpeDtcblx0XHRcdFx0XHR2YXIgcXVlc3RQYXJhbXMgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdLmV4cG9ydEluZm8ucXVlc3QucGFyYW1zO1xuXHRcdFx0XHRcdHF1ZXN0ICs9IFwidm9pZCBcIiArIGdhdGVOYW1lICsgXCIoUXVyZWcgcXViaXRzLCBjb25zdCBpbnQgcVwiO1xuXHRcdFx0XHRcdGlmKHF1ZXN0TmFtZSA9PSBcImNvbnRyb2xsZWRVbml0YXJ5XCIpIHtcblx0XHRcdFx0XHRcdHF1ZXN0ICs9IFwiMSwgY29uc3QgaW50IHEyXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChxdWVzdFBhcmFtcykge1xuXHRcdFx0XHRcdFx0Zm9yKHZhciBqPTA7IGogPCBxdWVzdFBhcmFtcy5sZW5ndGg7IGorKykge1xuXHRcdFx0XHRcdFx0XHRxdWVzdCArPSBcIiwgZG91YmxlIFwiICsgcXVlc3RQYXJhbXNbal07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHF1ZXN0ICs9IFwiKSB7XFxuXCI7XG5cdFx0XHRcdFx0cXVlc3QgKz0gXCIgICAgQ29tcGxleE1hdHJpeDIgdTtcXG5cIjtcblx0XHRcdFx0XHRxdWVzdCArPSBcIiAgICB1LnIwYzAgPSAoQ29tcGxleCkgey5yZWFsPVwiICsgbWF0cml4WzBdWzBdWzBdICsgXCIsIC5pbWFnPSBcIiArIG1hdHJpeFswXVswXVsxXSArIFwifTtcXG5cIjtcblx0XHRcdFx0XHRxdWVzdCArPSBcIiAgICB1LnIwYzEgPSAoQ29tcGxleCkgey5yZWFsPVwiICsgbWF0cml4WzBdWzFdWzBdICsgXCIsIC5pbWFnPSBcIiArIG1hdHJpeFswXVsxXVsxXSArIFwifTtcXG5cIjtcblx0XHRcdFx0XHRxdWVzdCArPSBcIiAgICB1LnIxYzAgPSAoQ29tcGxleCkgey5yZWFsPVwiICsgbWF0cml4WzFdWzBdWzBdICsgXCIsIC5pbWFnPSBcIiArIG1hdHJpeFsxXVswXVsxXSArIFwifTtcXG5cIjtcblx0XHRcdFx0XHRxdWVzdCArPSBcIiAgICB1LnIxYzEgPSAoQ29tcGxleCkgey5yZWFsPVwiICsgbWF0cml4WzFdWzFdWzBdICsgXCIsIC5pbWFnPSBcIiArIG1hdHJpeFsxXVsxXVsxXSArIFwifTtcXG5cIjtcblx0XHRcdFx0XHRxdWVzdCArPSBcIiAgICBcIiArIHF1ZXN0TmFtZSArIFwiKHF1Yml0cywgcVwiXG5cdFx0XHRcdFx0aWYocXVlc3ROYW1lID09IFwiY29udHJvbGxlZFVuaXRhcnlcIikge1xuXHRcdFx0XHRcdFx0cXVlc3QgKz0gXCIxLCBxMlwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRxdWVzdCArPSBcIiwgdSk7XFxufVxcblxcblwiO1xuXHRcdFx0XHR9IGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OiB7IHF1ZXN0ICs9IHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV0uZXhwb3J0SW5mby5xdWVzdC5mdW5jICsgXCJcXG5cXG5cIjsgfSBicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY3VzdG9tUXVFU1QubGVuZ3RoOyBpKyspIHtcblx0XHRcdHF1ZXN0ICs9IGN1c3RvbVF1RVNUW2ldO1xuXHRcdH1cblxuXHRcdHF1ZXN0ICs9IFwiaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkge1xcblwiO1xuXHRcdHF1ZXN0ICs9IFwiICAgIFF1RVNURW52IGVudiA9IGNyZWF0ZVF1RVNURW52KCk7XFxuXCI7XG5cdFx0cXVlc3QgKz0gXCIgICAgUXVyZWcgcXViaXRzID0gY3JlYXRlUXVyZWcoXCIgKyBjaXJjdWl0Lm51bVF1Yml0cyArXCIsIGVudik7XFxuXCI7XG5cdFx0cXVlc3QgKz0gXCIgICAgaW50IG1lYXN1cmVkW1wiICsgY2lyY3VpdC5udW1RdWJpdHMgK1wiXTtcXG5cXG5cIjtcblx0fVxuXG5cdHF1ZXN0ICs9IFwiXFxuXCI7XG5cblx0dmFyIG51bUNvbHMgPSBjaXJjdWl0Lm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblxuXHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpIHtcblx0XHRcdFx0XHRxdWVzdCArPSBcImlmKFwiICsgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnICsgXCI9PVwiICsgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi52YWx1ZSArIFwiKSB7XFxuXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgZ2F0ZU5hbWUgPSBnYXRlLm5hbWU7XG5cdFx0XHRcdHZhciBnYXRlUGFyYW1zID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMgPyBnYXRlLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0XHRcdHZhciBnYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblxuXHRcdFx0XHRpZihnYXRlTmFtZSA9PSBcIm1lYXN1cmVcIikge1xuXHRcdFx0XHRcdHF1ZXN0ICs9IFwiICAgIG1lYXN1cmVkW1wiICsgZ2F0ZS53aXJlc1swXSArIFwiXSA9IG1lYXN1cmUocXViaXRzLCBcIiArIGdhdGUud2lyZXNbMF07XG5cdFx0XHRcdH0gZWxzZSBpZihnYXRlRGVmKSB7XG5cdFx0XHRcdFx0dmFyIHF1ZXN0TmFtZSA9IGdhdGVEZWYuZXhwb3J0SW5mby5xdWVzdC5uYW1lO1xuXHRcdFx0XHRcdHZhciBxdWVzdFBhcmFtcyA9IGdhdGVEZWYuZXhwb3J0SW5mby5xdWVzdC5wYXJhbXM7XG5cblx0XHRcdFx0XHRpZihmdW5jdGlvbnMuaW5jbHVkZXMocXVlc3ROYW1lKSkge1xuXHRcdFx0XHRcdFx0cXVlc3QgKz0gXCIgICAgXCIgKyBnYXRlTmFtZSArIFwiKHF1Yml0c1wiO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRxdWVzdCArPSBcIiAgICBcIiArIHF1ZXN0TmFtZSArIFwiKHF1Yml0c1wiO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGZvcih2YXIgdyA9IDA7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKSB7XG5cdFx0XHRcdFx0XHRcdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRxdWVzdCArPSBcIiwgcVwiICsgZ2F0ZS53aXJlc1t3XTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRxdWVzdCArPSBcIiwgXCIgKyBnYXRlLndpcmVzW3ddO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYocXVlc3RQYXJhbXMpIHtcblx0XHRcdFx0XHRcdHN3aXRjaChxdWVzdE5hbWUpe1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwiY29tcGFjdFVuaXRhcnlcIjoge1xuXHRcdFx0XHRcdFx0XHRcdHF1ZXN0ICs9IFwiLCBcIiArIHF1ZXN0UGFyYW1zLmFscGhhO1xuXHRcdFx0XHRcdFx0XHRcdHF1ZXN0ICs9IFwiLCBcIiArIHF1ZXN0UGFyYW1zLmJldGE7XG5cdFx0XHRcdFx0XHRcdH0gYnJlYWs7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJwaGFzZVNoaWZ0XCI6XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJjb250cm9sbGVkUGhhc2VTaGlmdFwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYocXVlc3RQYXJhbXMudGhldGEpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHF1ZXN0ICs9IFwiLCBcIiArIHF1ZXN0UGFyYW1zLnRoZXRhO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Z2F0ZURlZiA9IHRoaXMuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0XHRcdHF1ZXN0ICs9IFwiICAgIHF1Yml0cyA9IFwiICsgZ2F0ZU5hbWUgKyBcIihxdWJpdHNcIjtcblxuXHRcdFx0XHRcdGZvcih2YXIgdyA9IDA7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKSB7XG5cdFx0XHRcdFx0XHRcdHF1ZXN0ICs9IFwiLCBcIiArIGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoZ2F0ZVBhcmFtcykge1xuXHRcdFx0XHRcdHZhciBnYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0XHRpZighZ2F0ZURlZikge1xuXHRcdFx0XHRcdFx0Z2F0ZURlZiA9IHRoaXMuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGdhdGVEZWYpIHtcblx0XHRcdFx0XHRcdHZhciBwYXJhbURlZiA9IGdhdGVEZWYucGFyYW1zIHx8IFtdO1xuXHRcdFx0XHRcdFx0dmFyIHBhcmFtQ291bnQgPSBwYXJhbURlZi5sZW5ndGg7XG5cblx0XHRcdFx0XHRcdGlmKHBhcmFtQ291bnQpIHtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IHBhcmFtQ291bnQ7IHArKykge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbU5hbWUgPSBwYXJhbURlZltwXTtcblx0XHRcdFx0XHRcdFx0XHRxdWVzdCArPSBcIiwgXCIgKyBnYXRlUGFyYW1zW3BhcmFtTmFtZV07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRxdWVzdCArPSBcIik7XFxuXCI7XG5cblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKSB7XG5cdFx0XHRcdFx0cXVlc3QgKz0gXCJ9XFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0cXVlc3QgKz0gXCJcXG4gICAgcmV0dXJuIHF1Yml0cztcXG59XFxuXFxuXCI7XG5cdH0gZWxzZSB7XG5cdFx0cXVlc3QgKz0gXCJcXG4gICAgZGVzdHJveVF1cmVnKHF1Yml0cywgZW52KTtcXG5cIjtcblx0XHRxdWVzdCArPSBcIiAgICBkZXN0cm95UXVFU1RFbnYoZW52KTtcXG5cIjtcblx0XHRxdWVzdCArPSBcIiAgICByZXR1cm4gMDtcXG59XFxuXCI7XG5cdH1cblxuXHRyZXR1cm4gcXVlc3Q7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb1FBU00gPSBmdW5jdGlvbihvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lLCBjaXJjdWl0UmVwbGFjZW1lbnQsIGluc2lkZVN1Ym1vZHVsZSkge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgY29tbWVudCA9IG9wdGlvbnMuY29tbWVudDtcblx0dmFyIGRlY29tcG9zZSA9IG9wdGlvbnMuZGVjb21wb3NlO1xuXHR2YXIgY29tcGF0aWJpbGl0eU1vZGUgPSBvcHRpb25zLmNvbXBhdGliaWxpdHlNb2RlO1xuXG5cdHZhciBzZWxmID0gdGhpcztcblxuXHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wYXJhbXMgPyB0aGlzLm9wdGlvbnMucGFyYW1zIDoge307XG5cblx0dmFyIG1hdGhUb1N0cmluZ0hhbmRsZXIgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zKSB7XG5cdFx0aWYobm9kZS5pc1N5bWJvbE5vZGUpIHtcblx0XHRcdGlmKCFjb21wYXRpYmlsaXR5TW9kZSAmJiBzZWxmLnBhcmFtcy5pbmRleE9mKG5vZGUubmFtZSkgPj0gMCkge1xuXHRcdFx0XHRyZXR1cm4gZ2xvYmFsUGFyYW1zW25vZGUubmFtZV07XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBjaXJjdWl0ID0gbnVsbDtcblxuXHQvLyBkZWNvbXBvc2UgP1xuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRjaXJjdWl0LmxvYWQodGhpcy5zYXZlKGRlY29tcG9zZSkpO1xuXG5cdHZhciBxYXNtID0gXCJcIjtcblxuXHQvLyBjb21tZW50XG5cdGlmKGNvbW1lbnQpIHtcblx0XHR2YXIgY29tbSA9IChjb21tZW50IHx8IFwiXCIpLnNwbGl0KFwiXFxuXCIpO1xuXHRcdGNvbW0ubWFwKGZ1bmN0aW9uKGNsaW5lKSB7XG5cdFx0XHRpZihjbGluZS5sZW5ndGggPj0gMiAmJiBjbGluZVswXSAhPSBcIi9cIiAmJiBjbGluZVsxXSAhPSBcIi9cIikge1xuXHRcdFx0XHRxYXNtICs9IFwiLy8gXCI7XG5cdFx0XHR9XG5cdFx0XHRxYXNtICs9IGNsaW5lO1xuXHRcdFx0cWFzbSArPSBcIlxcblwiO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHFhc20gKz0gXCJnYXRlIFwiICsgZXhwb3J0QXNHYXRlTmFtZTtcblxuXHRcdGlmKGNpcmN1aXQucGFyYW1zICYmIGNpcmN1aXQucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0cWFzbSArPSBcIihcIjtcblx0XHRcdGZvcih2YXIgcGMgPSAwOyBwYyA8IGNpcmN1aXQucGFyYW1zLmxlbmd0aDsgcGMrKykge1xuXHRcdFx0XHRpZihwYyA+IDApIHtcblx0XHRcdFx0XHRxYXNtICs9IFwiLCBcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRxYXNtICs9IGNpcmN1aXQucGFyYW1zW3BjXTtcblx0XHRcdH1cblx0XHRcdHFhc20gKz0gXCIpXCI7XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQubnVtUXViaXRzOyBpKyspIHtcblx0XHRcdGlmKGkgPT0gMCkge1xuXHRcdFx0XHRxYXNtICs9IFwiIFwiO1xuXHRcdFx0fVxuXHRcdFx0aWYoaSA+IDApIHtcblx0XHRcdFx0cWFzbSArPSBcIiwgXCI7XG5cdFx0XHR9XG5cdFx0XHRxYXNtICs9IHF1Yml0TGV0dGVyKGksIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHR9XG5cdFx0cWFzbSArPSBcIlxcbntcXG5cIjtcblx0fSBlbHNlIHtcblx0XHRpZighY2lyY3VpdFJlcGxhY2VtZW50KXtcblx0XHRcdHFhc20gKz0gXCJPUEVOUUFTTSAyLjA7XFxuXCI7XG5cdFx0XHRxYXNtICs9IFwiaW5jbHVkZSBcXFwicWVsaWIxLmluY1xcXCI7XFxuXCI7XG5cdFx0XHRxYXNtICs9IFwicXJlZyBxW1wiICsgY2lyY3VpdC5udW1RdWJpdHMgKyBcIl07XFxuXCI7XG5cblx0XHRcdGZvcih2YXIgY3JlZ05hbWUgaW4gY2lyY3VpdC5jcmVncykge1xuXHRcdFx0XHRxYXNtICs9IFwiY3JlZyBcIiArIGNyZWdOYW1lICsgXCJbXCIgKyAoY2lyY3VpdC5jcmVnc1tjcmVnTmFtZV0ubGVuZ3RoIHx8IDEpICsgXCJdO1xcblwiO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgdXNlZEdhdGVzID0gY2lyY3VpdC51c2VkR2F0ZXMoKTtcblx0XHRcdGlmKCFkZWNvbXBvc2UpIHtcblx0XHRcdFx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpIHtcblx0XHRcdFx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdFx0aWYoIWJhc2ljR2F0ZSkge1xuXHRcdFx0XHRcdFx0dmFyIGN1c3RvbUdhdGUgPSBzZWxmLmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdFx0XHRpZihjdXN0b21HYXRlKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBjdXN0b21DaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRcdGN1c3RvbUNpcmN1aXQubG9hZChjdXN0b21HYXRlKTtcblx0XHRcdFx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29tbWVudDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRkZWNvbXBvc2U6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdGNvbXBhdGliaWxpdHlNb2RlOiBjb21wYXRpYmlsaXR5TW9kZVxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRxYXNtICs9IGN1c3RvbUNpcmN1aXQuZXhwb3J0VG9RQVNNKG5ld09wdGlvbnMsIHVzZWRHYXRlTmFtZSwgZmFsc2UsIGZhbHNlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHZhciBudW1Db2xzID0gY2lyY3VpdC5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgY2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0dmFyIHFhc21SZXBsYWNlbWVudCA9IG51bGw7XG5cdFx0XHR2YXIgcWFzbUVxdWl2YWxlbnQgPSBudWxsO1xuXHRcdFx0XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0dmFyIHFhc21OYW1lID0gZ2F0ZS5uYW1lO1xuXHRcdFx0XHRpZighY29tcGF0aWJpbGl0eU1vZGUpIHtcblx0XHRcdFx0XHR2YXIgZ2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihnYXRlLm5hbWUpO1xuXHRcdFx0XHRcdGlmKGdhdGVEZWYpe1xuXHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvKXtcblx0XHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20gJiYgZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20ubmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdHFhc21OYW1lID0gZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20ubmFtZTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtLnJlcGxhY2VtZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0cWFzbVJlcGxhY2VtZW50ID0gZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20ucmVwbGFjZW1lbnQ7XG5cdFx0XHRcdFx0XHRcdFx0cWFzbVJlcGxhY2VtZW50Lm1hcChmdW5jdGlvbihyZXBsYWNlbWVudCl7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmVwbGFjZW1lbnRDaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXBsYWNlbWVudENpcmN1aXQuY3JlZ3MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNlbGYuY3JlZ3MpKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1zID0gT2JqZWN0LmtleXMoZ2F0ZS5vcHRpb25zLnBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXBsYWNlbWVudFBhcmFtcyA9IE9iamVjdC5rZXlzKHJlcGxhY2VtZW50LnBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtcy5tYXAoZnVuY3Rpb24ocGFyYW0pe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHJlcGxhY2VtZW50UGFyYW1zLmluZGV4T2YocGFyYW0pID49IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlcGxhY2VtZW50LnBhcmFtc1twYXJhbV0gPSBnYXRlLm9wdGlvbnMucGFyYW1zW3BhcmFtXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmVwbGFjZW1lbnRDb25kaXRpb24gPSBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiA/IGdhdGUub3B0aW9ucy5jb25kaXRpb24gOiB7fTtcblx0XHRcdFx0XHRcdFx0XHRcdHJlcGxhY2VtZW50Q2lyY3VpdC5hZGRHYXRlKHJlcGxhY2VtZW50Lm5hbWUsIGNvbHVtbiwgZ2F0ZS53aXJlcywgeyBwYXJhbXM6IHJlcGxhY2VtZW50LnBhcmFtcywgY29uZGl0aW9uOiByZXBsYWNlbWVudENvbmRpdGlvbiB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb21tZW50OiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkZWNvbXBvc2U6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb21wYXRpYmlsaXR5TW9kZTogY29tcGF0aWJpbGl0eU1vZGVcblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XHRxYXNtICs9IHJlcGxhY2VtZW50Q2lyY3VpdC5leHBvcnRUb1FBU00obmV3T3B0aW9ucywgZmFsc2UsIHRydWUsICEhZXhwb3J0QXNHYXRlTmFtZSB8fCBpbnNpZGVTdWJtb2R1bGUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYoZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20gJiYgZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20uZXF1aXZhbGVudCl7XG5cdFx0XHRcdFx0XHRcdFx0cWFzbUVxdWl2YWxlbnQgPSBnYXRlRGVmLmV4cG9ydEluZm8ucWFzbS5lcXVpdmFsZW50O1xuXHRcdFx0XHRcdFx0XHRcdHFhc21FcXVpdmFsZW50Lm1hcChmdW5jdGlvbihlcXVpdmFsZW50KXtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBlcXVpdmFsZW50Q2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXF1aXZhbGVudENpcmN1aXQuY3JlZ3MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNlbGYuY3JlZ3MpKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVXaXJlcyA9IGVxdWl2YWxlbnQud2lyZXMubGVuZ3RoID4gMSA/IGdhdGUud2lyZXMgOiBnYXRlLndpcmVzW2VxdWl2YWxlbnQud2lyZXNbMF1dO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGVxUGFyYW1zID0ge307XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihlcXVpdmFsZW50LnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gZXF1aXZhbGVudCBnYXRlIHBhcmFtcyBjYW4gY29udGFpbiB2YXJpYWJsZSBmcm9tIGdhdGUgcGFyYW1zXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEV2YWx1YXRlIGdhdGUncyBwYXJhbXNcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVQYXJhbXMgPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGdhdGVQYXJhbU5hbWUgaW4gZ2F0ZS5vcHRpb25zLnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Z2F0ZVBhcmFtc1tnYXRlUGFyYW1OYW1lXSA9IG1hdGguZXZhbHVhdGUoZ2F0ZS5vcHRpb25zLnBhcmFtc1tnYXRlUGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRXZhbHVhdGUgZXF1aXZhbGVudCBnYXRlJ3MgcGFyYW1zXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZXFQYXJhbU5hbWUgaW4gZXF1aXZhbGVudC5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlcVBhcmFtc1tlcVBhcmFtTmFtZV0gPSBtYXRoLmV2YWx1YXRlKGVxdWl2YWxlbnQucGFyYW1zW2VxUGFyYW1OYW1lXSwgZ2F0ZVBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGVxQ29uZGl0aW9uID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gPyBnYXRlLm9wdGlvbnMuY29uZGl0aW9uIDoge307XG5cblx0XHRcdFx0XHRcdFx0XHRcdGVxdWl2YWxlbnRDaXJjdWl0LmFkZEdhdGUoZXF1aXZhbGVudC5uYW1lLCBjb2x1bW4sIGdhdGVXaXJlcywgeyBwYXJhbXM6IGVxUGFyYW1zLCBjb25kaXRpb246IGVxQ29uZGl0aW9uIH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbW1lbnQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRlY29tcG9zZTogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvbXBhdGliaWxpdHlNb2RlOiBjb21wYXRpYmlsaXR5TW9kZVxuXHRcdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRcdHFhc20gKz0gZXF1aXZhbGVudENpcmN1aXQuZXhwb3J0VG9RQVNNKG5ld09wdGlvbnMsIFwiXCIsIHRydWUsICEhZXhwb3J0QXNHYXRlTmFtZSB8fCBpbnNpZGVTdWJtb2R1bGUpO1xuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoIXFhc21SZXBsYWNlbWVudCAmJiAhcWFzbUVxdWl2YWxlbnQpIHtcblx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lIHx8IGluc2lkZVN1Ym1vZHVsZSkge1xuXHRcdFx0XHRcdFx0cWFzbSArPSBcIiAgXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZykge1xuXHRcdFx0XHRcdFx0cWFzbSArPSBcImlmKFwiICsgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnICsgXCI9PVwiICsgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi52YWx1ZSArIFwiKSBcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZigoIXFhc21SZXBsYWNlbWVudCAmJiAhcWFzbUVxdWl2YWxlbnQpIHx8IGNvbXBhdGliaWxpdHlNb2RlKSB7XG5cdFx0XHRcdFx0dmFyIGdhdGVOYW1lID0gZ2F0ZS5uYW1lO1xuXHRcdFx0XHRcdHZhciBnYXRlUGFyYW1zID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMgPyBnYXRlLm9wdGlvbnMucGFyYW1zIDoge307XG5cblx0XHRcdFx0XHRxYXNtICs9IGNvbXBhdGliaWxpdHlNb2RlID8gZ2F0ZS5uYW1lIDogcWFzbU5hbWU7XG5cblx0XHRcdFx0XHRpZihnYXRlUGFyYW1zKSB7XG5cdFx0XHRcdFx0XHR2YXIgZ2F0ZURlZiA9IGNpcmN1aXQuYmFzaWNHYXRlc1tnYXRlTmFtZV07XG5cdFx0XHRcdFx0XHRpZighZ2F0ZURlZikge1xuXHRcdFx0XHRcdFx0XHRnYXRlRGVmID0gY2lyY3VpdC5jdXN0b21HYXRlc1tnYXRlTmFtZV07XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGdhdGVEZWYpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtRGVmID0gZ2F0ZURlZi5wYXJhbXMgfHwgW107XG5cdFx0XHRcdFx0XHRcdHZhciBwYXJhbUNvdW50ID0gcGFyYW1EZWYubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRpZihwYXJhbUNvdW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0cWFzbSArPSBcIiAoXCI7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IHBhcmFtQ291bnQ7IHArKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYocCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cWFzbSArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gcGFyYW1EZWZbcF07XG5cblx0XHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbVZhbHVlID0gZ2F0ZVBhcmFtc1twYXJhbU5hbWVdO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoIWV4cG9ydEFzR2F0ZU5hbWUgJiYgIWluc2lkZVN1Ym1vZHVsZSAmJiAhY29tcGF0aWJpbGl0eU1vZGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbcGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtVmFsdWUgPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHFhc20gKz0gcGFyYW1WYWx1ZTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cWFzbSArPSBcIilcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVx0XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Zm9yKHZhciB3ID0gMDsgdyA8IGdhdGUud2lyZXMubGVuZ3RoOyB3KyspIHtcblx0XHRcdFx0XHRcdGlmKHcgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdHFhc20gKz0gXCIsXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lIHx8IGluc2lkZVN1Ym1vZHVsZSkge1xuXHRcdFx0XHRcdFx0XHRxYXNtICs9IFwiIFwiICsgcXViaXRMZXR0ZXIoZ2F0ZS53aXJlc1t3XSwgY2lyY3VpdC5udW1RdWJpdHMpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cWFzbSArPSBcIiBxW1wiICsgZ2F0ZS53aXJlc1t3XSArIFwiXVwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGdhdGVOYW1lID09IFwibWVhc3VyZVwiICYmIGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY3JlZykge1xuXHRcdFx0XHRcdFx0cWFzbSArPSBcIiAtPiBcIjtcblx0XHRcdFx0XHRcdHFhc20gKz0gZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSArIFwiW1wiICsgZ2F0ZS5vcHRpb25zLmNyZWcuYml0ICsgXCJdXCI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cWFzbSArPSBcIjtcXG5cIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRxYXNtICs9IFwifVxcblxcblwiO1xuXHR9XG5cblx0cmV0dXJuIHFhc207XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0VG9QeXF1aWwgPSBmdW5jdGlvbihvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBjb21tZW50ID0gb3B0aW9ucy5jb21tZW50O1xuXHR2YXIgZGVjb21wb3NlID0gb3B0aW9ucy5kZWNvbXBvc2U7XG5cdHZhciB2ZXJzaW9uU3RyID0gb3B0aW9ucy52ZXJzaW9uU3RyO1xuXHR2YXIgbGF0dGljZSA9IG9wdGlvbnMubGF0dGljZTtcblx0dmFyIGFzUVZNID0gb3B0aW9ucy5hc1FWTTtcblx0dmFyIGFzSnVweXRlciA9IG9wdGlvbnMuYXNKdXB5dGVyO1xuXHR2YXIgc2hvdHMgPSBvcHRpb25zLnNob3RzO1xuXHR2YXIgaHlicmlkID0gb3B0aW9ucy5oeWJyaWQ7XG5cblx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdHZhciB2ZXJzaW9uID0gcGFyc2VGbG9hdCh2ZXJzaW9uU3RyIHx8IFwiMi4xMlwiKTtcblx0aWYoaXNOYU4odmVyc2lvbikpIHtcblx0XHR2ZXJzaW9uID0gMi4xO1xuXHR9XG5cblx0aWYoIXNob3RzKSB7XG5cdFx0c2hvdHMgPSAxMDI0O1xuXHR9XG5cblx0aWYodHlwZW9mIGh5YnJpZCA9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0aHlicmlkID0gdGhpcy5vcHRpb25zID8gISF0aGlzLm9wdGlvbnMuaHlicmlkIDogZmFsc2U7XG5cdH1cblxuXHQvLyBkZWNvbXBvc2UgP1xuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRjaXJjdWl0LmxvYWQodGhpcy5zYXZlKGRlY29tcG9zZSkpO1xuXG5cdHZhciBtYXRoVG9TdHJpbmdIYW5kbGVyID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucykge1xuXHRcdGlmKG5vZGUuaXNTeW1ib2xOb2RlKSB7XG5cdFx0XHR2YXIgbnVtcHlzID0gW1wicGlcIiwgXCJzaW5cIiwgXCJjb3NcIiwgXCJ0YW5cIiwgXCJhc2luXCIsIFwiYWNvc1wiLCBcImF0YW5cIl07XG5cdFx0XHRpZihudW1weXMuaW5kZXhPZihub2RlLm5hbWUpID49IDApIHtcblx0XHRcdFx0cmV0dXJuIFwibnAuXCIgKyBub2RlLm5hbWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmKHNlbGYucGFyYW1zLmluZGV4T2Yobm9kZS5uYW1lKSA+PSAwICYmIGh5YnJpZCkge1xuXHRcdFx0XHRyZXR1cm4gXCJwYXJhbXNbXCIgKyBzZWxmLnBhcmFtcy5pbmRleE9mKG5vZGUubmFtZSkgKyBcIl1cIjtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dmFyIGFkanVzdElkZW50YXRpb24gPSBmdW5jdGlvbihhZGRTdHIsIGlkZW50KSB7XG5cdFx0dmFyIHN0ciA9IFwiXCI7XG5cblx0XHQvLyBhZGQgdXNlciBkZWZpbmVkIGNvc3QgZnVuY3Rpb24gd2l0aCBwcm9wZXIgaWRlbnRhdGlvblxuXHRcdHZhciBjZkxpbmVzID0gYWRkU3RyLnNwbGl0KFwiXFxuXCIpO1xuXHRcdHZhciBtaW5JZGVudCA9IC0xO1xuXHRcdGNmTGluZXMubWFwKGZ1bmN0aW9uKGNmTGluZSkge1xuXHRcdFx0dmFyIHRtcElkZW50ID0gY2ZMaW5lLnNlYXJjaCgvXFxTLyk7XG5cdFx0XHRpZih0bXBJZGVudCA+PSAwICYmIChtaW5JZGVudCA8IDAgfHwgdG1wSWRlbnQgPCBtaW5JZGVudCkpIHtcblx0XHRcdFx0bWluSWRlbnQgPSB0bXBJZGVudDtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGlmKG1pbklkZW50IDwgMCkge1xuXHRcdFx0bWluSWRlbnQgPSAwO1xuXHRcdH1cblxuXHRcdHZhciBhZGRJZGVudCA9IFwiXCI7XG5cdFx0aWYobWluSWRlbnQgPCBpZGVudC5sZW5ndGgpIHtcblx0XHRcdGZvcih2YXIgdG1wID0gMDsgdG1wIDwgKGlkZW50Lmxlbmd0aCAtIG1pbklkZW50KTsgdG1wKyspIHtcblx0XHRcdFx0YWRkSWRlbnQgKz0gXCIgXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y2ZMaW5lcy5tYXAoZnVuY3Rpb24oY2ZMaW5lKSB7XG5cdFx0XHRzdHIgKz0gYWRkSWRlbnQgKyBjZkxpbmUgKyBcIlxcblwiO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHN0cjtcblx0fTtcblxuXHR2YXIgaW1wb3J0R2F0ZXMgPSBcIlwiO1xuXHR2YXIgZGVmUGFyYW1zID0gW107XG5cdHZhciBkZWZHYXRlcyA9IFwiXCI7XG5cdHZhciBkZWZSdW4gPSBcIlwiO1xuXHR2YXIgZGVmQXJyYXlzID0gXCJcIjtcblx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdHZhciBnb3RNZWFzdXJlbWVudCA9IGNpcmN1aXQuZ290TWVhc3VyZW1lbnQoKTtcblxuXHR2YXIgZGVmR2F0ZU5hbWVzID0gW107XG5cdHZhciBkZWZDaXJjTmFtZXMgPSBbXTtcblx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpIHtcblx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0aWYoYmFzaWNHYXRlKSB7XG5cdFx0XHRpZihiYXNpY0dhdGUuZXhwb3J0SW5mbyAmJiBiYXNpY0dhdGUuZXhwb3J0SW5mby5weXF1aWwpIHtcblx0XHRcdFx0dmFyIHF1aWxJbmZvID0gYmFzaWNHYXRlLmV4cG9ydEluZm8ucHlxdWlsO1xuXHRcdFx0XHRpZihxdWlsSW5mby5hcnJheSkge1xuXG5cdFx0XHRcdFx0Ly8gZGVmZ2F0ZVxuXG5cdFx0XHRcdFx0dmFyIHBhcmFtTGlzdCA9IFwiXCI7XG5cdFx0XHRcdFx0aWYocXVpbEluZm8ucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRwYXJhbUxpc3QgKz0gXCIsIFtcIjtcblx0XHRcdFx0XHRcdHF1aWxJbmZvLnBhcmFtcy5tYXAoZnVuY3Rpb24ocGFyYW1OYW1lLCBwYXJhbUluZGV4KSB7XG5cdFx0XHRcdFx0XHRcdGlmKHBhcmFtSW5kZXggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0cGFyYW1MaXN0ICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRwYXJhbUxpc3QgKz0gXCJwX1wiICsgcGFyYW1OYW1lO1xuXHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1UZXh0ID0gXCJwX1wiICsgcGFyYW1OYW1lICsgXCIgPSBQYXJhbWV0ZXIoXFwnXCIgKyBwYXJhbU5hbWUgKyBcIlxcJylcIjtcblx0XHRcdFx0XHRcdFx0aWYoZGVmUGFyYW1zLmluZGV4T2YocGFyYW1UZXh0KSA8IDApIHtcblx0XHRcdFx0XHRcdFx0XHRkZWZQYXJhbXMucHVzaChwYXJhbVRleHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHBhcmFtTGlzdCArPSBcIl1cIjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRkZWZSdW4gKz0gXCJwLmluc3QoXCIgKyBxdWlsSW5mby5uYW1lICsgXCJfZGVmZ2F0ZSlcXG5cIjtcblx0XHRcdFx0XHRkZWZBcnJheXMgKz0gcXVpbEluZm8ubmFtZSArIFwiX2FycmF5ID0gbnAuYXJyYXkoXCIgKyBxdWlsSW5mby5hcnJheSArIFwiKVxcblwiO1xuXHRcdFx0XHRcdGRlZkdhdGVzICs9IHF1aWxJbmZvLm5hbWUgKyBcIl9kZWZnYXRlID0gRGVmR2F0ZShcXCdcIiArIHF1aWxJbmZvLm5hbWUgKyBcIlxcJywgXCIgKyBxdWlsSW5mby5uYW1lICsgXCJfYXJyYXlcIiArIHBhcmFtTGlzdCArIFwiKVxcblwiO1xuXHRcdFx0XHRcdGRlZkdhdGVzICs9IHF1aWxJbmZvLm5hbWUgKyBcIiA9IFwiICsgcXVpbEluZm8ubmFtZSArIFwiX2RlZmdhdGUuZ2V0X2NvbnN0cnVjdG9yKClcXG5cIjtcblxuXHRcdFx0XHRcdGRlZkdhdGVOYW1lcy5wdXNoKHF1aWxJbmZvLm5hbWUpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhciBpbXBvcnROYW1lID0gXCJcIjtcblx0XHRcdFx0XHRpZihxdWlsSW5mby5yZXBsYWNlbWVudCkge1xuXHRcdFx0XHRcdFx0dmFyIGJnID0gY2lyY3VpdC5iYXNpY0dhdGVzW3F1aWxJbmZvLnJlcGxhY2VtZW50Lm5hbWVdO1xuXHRcdFx0XHRcdFx0aWYoYmcpIHtcblx0XHRcdFx0XHRcdFx0aWYoYmcuZXhwb3J0SW5mbykge1xuXHRcdFx0XHRcdFx0XHRcdGlmKGJnLmV4cG9ydEluZm8ucHlxdWlsKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpbXBvcnROYW1lID0gYmcuZXhwb3J0SW5mby5weXF1aWwubmFtZTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoYmcuZXhwb3J0SW5mby5xdWlsKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGltcG9ydE5hbWUgPSBiZy5leHBvcnRJbmZvLnF1aWwubmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aW1wb3J0TmFtZSA9IHF1aWxJbmZvLm5hbWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoaW1wb3J0TmFtZSkge1xuXHRcdFx0XHRcdFx0aWYoaW1wb3J0R2F0ZXMpIHtcblx0XHRcdFx0XHRcdFx0aW1wb3J0R2F0ZXMgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aW1wb3J0R2F0ZXMgKz0gaW1wb3J0TmFtZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmKGJhc2ljR2F0ZS5leHBvcnRJbmZvICYmIGJhc2ljR2F0ZS5leHBvcnRJbmZvLnF1aWwpIHtcblx0XHRcdFx0XHR2YXIgcXVpbEluZm8gPSBiYXNpY0dhdGUuZXhwb3J0SW5mby5xdWlsO1xuXG5cdFx0XHRcdFx0aWYoIXF1aWxJbmZvLmRlZmdhdGUpIHtcblxuXHRcdFx0XHRcdFx0dmFyIGltcG9ydE5hbWUgPSBcIlwiO1xuXHRcdFx0XHRcdFx0aWYocXVpbEluZm8ucmVwbGFjZW1lbnQpIHtcblx0XHRcdFx0XHRcdFx0dmFyIGJnID0gY2lyY3VpdC5iYXNpY0dhdGVzW3F1aWxJbmZvLnJlcGxhY2VtZW50Lm5hbWVdO1xuXHRcdFx0XHRcdFx0XHRpZihiZykge1xuXHRcdFx0XHRcdFx0XHRcdGlmKGJnLmV4cG9ydEluZm8pIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGJnLmV4cG9ydEluZm8ucHlxdWlsKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGltcG9ydE5hbWUgPSBiZy5leHBvcnRJbmZvLnB5cXVpbC5uYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYmcuZXhwb3J0SW5mby5xdWlsKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aW1wb3J0TmFtZSA9IGJnLmV4cG9ydEluZm8ucXVpbC5uYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRpbXBvcnROYW1lID0gcXVpbEluZm8ubmFtZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoaW1wb3J0TmFtZSkge1xuXHRcdFx0XHRcdFx0XHRpZihpbXBvcnRHYXRlcykge1xuXHRcdFx0XHRcdFx0XHRcdGltcG9ydEdhdGVzICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpbXBvcnRHYXRlcyArPSBpbXBvcnROYW1lO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIGJhc2ljIGdhdGUgbm90IHN1cHBvcnRlZCBieSBweXF1aWxcblx0XHRcdFx0XHQvLyBUT0RPOiBhZGQgcHlxdWlsIGRlZmluZSBnYXRlIGNvZGVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0Ly8gaW1wb3J0IE1PVkUsIEFORCwgT1IgaWYgY2lyY3VpdCBoYXMgY29uZGl0aW9uc1xuXHR2YXIgZ290Q29uZGl0aW9ucyA9IGNpcmN1aXQuZ290Q2xhc3NpY2FsQ29udHJvbCgpO1xuXHRpZihnb3RDb25kaXRpb25zKSB7XG5cdFx0aWYoaW1wb3J0R2F0ZXMpIHtcblx0XHRcdGltcG9ydEdhdGVzICs9IFwiLCBcIjtcblx0XHR9XG5cdFx0aWYodmVyc2lvbiA8IDIpIHtcblx0XHRcdGltcG9ydEdhdGVzICs9IFwiRkFMU0UsIE5PVCwgT1IsIEFORFwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbXBvcnRHYXRlcyArPSBcIk1PVkUsIE5PVCwgSU9SLCBBTkRcIjtcblx0XHR9XG5cdH1cblxuXHR2YXIgaW1wb3J0c0ZvckRlZmdhdGUgPSBcIlwiO1xuXHRpZihkZWZHYXRlcykge1xuXHRcdGlmKHZlcnNpb24gPCAyLjEyKSB7XG5cdFx0XHRpbXBvcnRzRm9yRGVmZ2F0ZSA9IFwiZnJvbSBweXF1aWwucGFyYW1ldGVycyBpbXBvcnQgUGFyYW1ldGVyLCBxdWlsX3NpbiwgcXVpbF9jb3MsIHF1aWxfc3FydCwgcXVpbF9leHAsIHF1aWxfY2lzXFxuZnJvbSBweXF1aWwucXVpbGJhc2UgaW1wb3J0IERlZkdhdGVcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aW1wb3J0c0ZvckRlZmdhdGUgPSBcImZyb20gcHlxdWlsLnF1aWxhdG9tIGltcG9ydCBQYXJhbWV0ZXIsIHF1aWxfc2luLCBxdWlsX2NvcywgcXVpbF9zcXJ0LCBxdWlsX2V4cCwgcXVpbF9jaXNcXG5mcm9tIHB5cXVpbC5xdWlsYmFzZSBpbXBvcnQgRGVmR2F0ZVwiO1x0XHRcdFxuXHRcdH1cblx0fVxuXG5cdHZhciBweXF1aWwgPSBcIlwiO1xuXG5cdC8vIGNvbW1lbnRcblx0aWYoY29tbWVudCkge1xuXHRcdHZhciBjb21tID0gKGNvbW1lbnQgfHwgXCJcIikuc3BsaXQoXCJcXG5cIik7XG5cdFx0Y29tbS5tYXAoZnVuY3Rpb24oY2xpbmUpIHtcblx0XHRcdGlmKGNsaW5lLmxlbmd0aCA+PSAxICYmIGNsaW5lWzBdICE9IFwiI1wiKSB7XG5cdFx0XHRcdHB5cXVpbCArPSBcIiMgXCI7XG5cdFx0XHR9XG5cdFx0XHRweXF1aWwgKz0gY2xpbmU7XG5cdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHR9KTtcblx0fVxuXG5cdHZhciBpbmRlbnQgPSBcIlwiO1xuXHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0dmFyIGFyZ3MgPSBcIlwiO1xuXHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0YXJncyArPSBcIiwgXCI7XG5cdFx0XHR9XG5cdFx0XHRhcmdzICs9IGNpcmN1aXQucGFyYW1zW2ldO1xuXHRcdFx0YXJnQ291bnQrKztcblx0XHR9XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQubnVtUXViaXRzOyBpKyspIHtcblx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRhcmdzICs9IFwiLCBcIjtcblx0XHRcdH1cblx0XHRcdGFyZ3MgKz0gXCJxXCIgKyBpO1xuXHRcdFx0YXJnQ291bnQrKztcblx0XHR9XG5cdFx0cHlxdWlsICs9IFwiZGVmIFwiICsgZXhwb3J0QXNHYXRlTmFtZSArIChhcmdzID8gXCIoXCIgKyBhcmdzICsgXCIpXCIgOiBcIlwiKSArIFwiOlxcblwiO1xuXHRcdGluZGVudCA9IFwiICBcIjtcblx0fSBlbHNlIHtcblx0XHRpZih2ZXJzaW9uIDwgMikge1xuXHRcdFx0cHlxdWlsICs9IFwiZnJvbSBweXF1aWwuYXBpIGltcG9ydCBRVk1Db25uZWN0aW9uXFxuXCI7XG5cdFx0XHRweXF1aWwgKz0gXCJmcm9tIHB5cXVpbC5xdWlsIGltcG9ydCBQcm9ncmFtXFxuXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHB5cXVpbCArPSBcImZyb20gcHlxdWlsIGltcG9ydCBQcm9ncmFtLCBnZXRfcWNcXG5cIjtcblx0XHR9XG5cblx0XHRpZihpbXBvcnRHYXRlcykge1xuXHRcdFx0cHlxdWlsICs9IFwiZnJvbSBweXF1aWwuZ2F0ZXMgaW1wb3J0IFwiICsgaW1wb3J0R2F0ZXMgKyBcIlxcblwiO1xuXHRcdH1cblx0XHRpZihpbXBvcnRzRm9yRGVmZ2F0ZSkge1xuXHRcdFx0cHlxdWlsICs9IGltcG9ydHNGb3JEZWZnYXRlICsgXCJcXG5cIjtcblx0XHR9XG5cblx0XHRweXF1aWwgKz0gXCJmcm9tIGZ1bmN0b29scyBpbXBvcnQgcmVkdWNlXFxuXCI7XG5cblx0XHRpZihoeWJyaWQpIHtcblx0XHRcdHB5cXVpbCArPSBcImZyb20gc2NpcHkub3B0aW1pemUgaW1wb3J0IG1pbmltaXplXFxuXCI7XG5cdFx0XHRweXF1aWwgKz0gXCJmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyXFxuXCI7XG5cblx0XHR9XG5cblx0XHRweXF1aWwgKz0gXCJpbXBvcnQgbnVtcHkgYXMgbnBcXG5cIjtcblxuXG5cdFx0aWYoc2hvdHMpIHtcblx0XHRcdHB5cXVpbCArPSBcIlxcblwiO1xuXHRcdFx0cHlxdWlsICs9IFwic2hvdHMgPSBcIiArIHNob3RzICsgXCJcXG5cIjtcblx0XHR9XG5cblx0XHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wYXJhbXMgPyB0aGlzLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0aWYodGhpcy5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YXIgZ2xvYmFsUGFyYW1OYW1lID0gdGhpcy5wYXJhbXNbaV07XG5cblx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdsb2JhbFBhcmFtc1tnbG9iYWxQYXJhbU5hbWVdKTtcblx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtVmFsdWUgPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblxuXHRcdFx0XHRweXF1aWwgKz0gZ2xvYmFsUGFyYW1OYW1lICsgXCIgPSBcIiArIGdsb2JhbFBhcmFtVmFsdWUgKyBcIlxcblwiO1xuXHRcdFx0fVxuXHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0fVxuXG5cdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRweXF1aWwgKz0gXCJ0b2xlcmFuY2UgPSBcIiArICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMudG9sZXJhbmNlID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMudG9sZXJhbmNlIHx8IFwiMC4wMDFcIiA6IFwiMC4wMDFcIikgKyBcIlxcblwiO1xuXHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0fVxuXG5cdFx0aWYoZGVmR2F0ZXMpIHtcblx0XHRcdGRlZlBhcmFtcy5tYXAoZnVuY3Rpb24oZGVmUGFyYW1JdGVtLCBkZWZJbmRleCkge1xuXHRcdFx0XHRpZihkZWZJbmRleCA9PSAwKSB7XG5cdFx0XHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cHlxdWlsICs9IGRlZlBhcmFtSXRlbSArIFwiXFxuXCI7XG5cdFx0XHR9KTtcblx0XHRcdHB5cXVpbCArPSBcIlxcblwiO1xuXHRcdFx0cHlxdWlsICs9IGRlZkFycmF5cyArIFwiXFxuXCI7XG5cdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdHB5cXVpbCArPSBkZWZHYXRlcyArIFwiXFxuXCI7XG5cdFx0fVxuXHRcdHB5cXVpbCArPSBcIlxcblwiO1xuXG5cdFx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdFx0aWYoIWRlY29tcG9zZSkge1xuXHRcdFx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpIHtcblx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRpZighYmFzaWNHYXRlKSB7XG5cdFx0XHRcdFx0dmFyIGN1c3RvbUdhdGUgPSBzZWxmLmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdFx0aWYoY3VzdG9tR2F0ZSkge1xuXHRcdFx0XHRcdFx0dmFyIGN1c3RvbUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0XHRcdGN1c3RvbUNpcmN1aXQubG9hZChjdXN0b21HYXRlKTtcblx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRjb21tZW50OiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRkZWNvbXBvc2U6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyLFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBjdXN0b21DaXJjdWl0LmV4cG9ydFRvUHlxdWlsKG5ld09wdGlvbnMsIHVzZWRHYXRlTmFtZSk7XG5cdFx0XHRcdFx0XHRkZWZDaXJjTmFtZXMucHVzaCh1c2VkR2F0ZU5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0aWYoaHlicmlkKSB7XG5cdFx0aW5kZW50ICs9IFwiICBcIjtcblxuXHRcdHB5cXVpbCArPSBcImRlZiBvYmplY3RpdmVfZnVuY3Rpb24ocGFyYW1zKTpcXG5cIlxuXHR9XG5cblx0aWYodmVyc2lvbiA+PSAyICYmICFleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0aWYoYXNRVk0gfHwgbGF0dGljZSkge1xuXHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicCA9IFByb2dyYW0oJ1BSQUdNQSBJTklUSUFMX1JFV0lSSU5HIFxcXCJQQVJUSUFMXFxcIicpXFxuXFxuXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAgPSBQcm9ncmFtKClcXG5cXG5cIjtcblx0XHR9XG5cblx0XHR2YXIgdG90YWxCaXRzID0gY2lyY3VpdC5jcmVnVG90YWxCaXRzKCk7XG5cdFx0aWYoZ290Q29uZGl0aW9ucykge1xuXHRcdFx0dG90YWxCaXRzICs9IDE7XG5cdFx0fTtcblx0XHRpZih0b3RhbEJpdHMpIHtcblx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInJvID0gcC5kZWNsYXJlKCdybycsIG1lbW9yeV90eXBlPSdCSVQnLCBtZW1vcnlfc2l6ZT1cIiArIHRvdGFsQml0cyArIFwiKVxcblwiO1xuXHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAgPSBQcm9ncmFtKClcXG5cXG5cIjtcblx0fVxuXG5cdHB5cXVpbCArPSBkZWZSdW4gPyAoaW5kZW50ICsgZGVmUnVuICsgXCJcXG5cIikgOiBcIlwiO1xuXG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgY2lyY3VpdC5udW1Db2xzKCk7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGNpcmN1aXQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHR2YXIgZ2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihnYXRlLm5hbWUpO1xuXHRcdFx0XHR2YXIgZ2F0ZVBhcmFtcyA9IGdhdGVQYXJhbXMgPSBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcyA/IGdhdGUub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0XHRcdFx0dmFyIHF1aWxJbmZvID0gbnVsbDtcblx0XHRcdFx0aWYoZ2F0ZURlZikge1xuXHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mbykge1xuXHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLnB5cXVpbCAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucHlxdWlsLnJlcGxhY2VtZW50KSB7XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5weXF1aWwucmVwbGFjZW1lbnQucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0Z2F0ZVBhcmFtcyA9IGdhdGVEZWYuZXhwb3J0SW5mby5weXF1aWwucmVwbGFjZW1lbnQucGFyYW1zO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZURlZi5leHBvcnRJbmZvLnB5cXVpbC5yZXBsYWNlbWVudC5uYW1lKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsLnJlcGxhY2VtZW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLnF1aWwucmVwbGFjZW1lbnQucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRnYXRlUGFyYW1zID0gZ2F0ZURlZi5leHBvcnRJbmZvLnF1aWwucmVwbGFjZW1lbnQucGFyYW1zO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRnYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsLnJlcGxhY2VtZW50Lm5hbWUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGdhdGVEZWYgJiYgZ2F0ZURlZi5leHBvcnRJbmZvKSB7XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5weXF1aWwpIHtcblx0XHRcdFx0XHRcdFx0XHRxdWlsSW5mbyA9IGdhdGVEZWYuZXhwb3J0SW5mby5weXF1aWw7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLnF1aWwpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWxJbmZvID0gZ2F0ZURlZi5leHBvcnRJbmZvLnF1aWw7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIGlzRGVmR2F0ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdHZhciBpc0RlZkNpcmMgPSBmYWxzZTtcblx0XHRcdFx0XHRpZihxdWlsSW5mbykge1xuXHRcdFx0XHRcdFx0aXNEZWZHYXRlID0gZGVmR2F0ZU5hbWVzLmluZGV4T2YocXVpbEluZm8ubmFtZSkgPj0gMDtcblx0XHRcdFx0XHRcdGlzRGVmQ2lyYyA9IGRlZkNpcmNOYW1lcy5pbmRleE9mKHF1aWxJbmZvLm5hbWUpID49IDA7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlzRGVmR2F0ZSA9IGRlZkdhdGVOYW1lcy5pbmRleE9mKGdhdGUubmFtZSkgPj0gMDtcblx0XHRcdFx0XHRcdGlzRGVmQ2lyYyA9IGRlZkNpcmNOYW1lcy5pbmRleE9mKGdhdGUubmFtZSkgPj0gMDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgaW5zaWRlQ29udHJvbCA9IGZhbHNlO1xuXHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZykge1xuXHRcdFx0XHRcdFx0Ly8gLS0tXG5cdFx0XHRcdFx0XHQvLyBGbG93IGNvbnRyb2xcblx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0aW5zaWRlQ29udHJvbCA9IHRydWU7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblxuXHRcdFx0XHRcdFx0dmFyIHRlc3RCaXQgPSBzZWxmLmNyZWdUb3RhbEJpdHMoKTtcblx0XHRcdFx0XHRcdHZhciBjb25kaXRpb24gPSBnYXRlLm9wdGlvbnMuY29uZGl0aW9uO1xuXHRcdFx0XHRcdFx0dmFyIGNvbmRpdGlvblZhbHVlID0gY29uZGl0aW9uLnZhbHVlIHx8IDA7XG5cdFx0XHRcdFx0XHR2YXIgY3JlZ0Jhc2UgPSBzZWxmLmNyZWdCYXNlKGNvbmRpdGlvbi5jcmVnKTtcblxuXHRcdFx0XHRcdFx0aWYoY29uZGl0aW9uVmFsdWUgPT0gMCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgY3JlZ1NpemUgPSBzZWxmLmNyZWdzW2NvbmRpdGlvbi5jcmVnXS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdGlmKHZlcnNpb24gPCAyKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KEZBTFNFKFwiICsgdGVzdEJpdCArIFwiKSlcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGJpdEluZGV4ID0gMDsgYml0SW5kZXggPCBjcmVnU2l6ZTsgYml0SW5kZXgrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KE9SKFwiICsgKGJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCIsIFwiICsgdGVzdEJpdCArIFwiKSlcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KE5PVChcIiArIHRlc3RCaXQgKyBcIikpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pZl90aGVuKFwiICsgdGVzdEJpdCArIFwiLCBQcm9ncmFtKFwiO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChNT1ZFKHJvW1wiICsgdGVzdEJpdCArIFwiXSwgMCkpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBiaXRJbmRleCA9IDA7IGJpdEluZGV4IDwgY3JlZ1NpemU7IGJpdEluZGV4KyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChJT1Iocm9bXCIgKyB0ZXN0Qml0ICsgXCJdLCByb1tcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiXSkpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChOT1Qocm9bXCIgKyB0ZXN0Qml0ICsgXCJdKSlcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwLmlmX3RoZW4ocm9bXCIgKyB0ZXN0Qml0ICsgXCJdLCBQcm9ncmFtKFwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR2YXIgYml0U3RyID0gY29uZGl0aW9uVmFsdWUudG9TdHJpbmcoMikuc3BsaXQoXCJcIikucmV2ZXJzZSgpO1xuXHRcdFx0XHRcdFx0XHR2YXIgYml0Q291bnQgPSAwO1xuXHRcdFx0XHRcdFx0XHR2YXIgc2luZ2xlQml0SW5kZXggPSAwO1xuXHRcdFx0XHRcdFx0XHRiaXRTdHIubWFwKGZ1bmN0aW9uKGJpdFZhbHVlLCBiaXRJbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBiaXRWYWwgPSBwYXJzZUludChiaXRWYWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0Yml0U3RyW2JpdEluZGV4XSA9IGJpdFZhbDtcblx0XHRcdFx0XHRcdFx0XHRpZihiaXRWYWwpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGJpdENvdW50Kys7XG5cdFx0XHRcdFx0XHRcdFx0XHRzaW5nbGVCaXRJbmRleCA9IGJpdEluZGV4O1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0aWYoYml0Q291bnQgPT0gMSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmKHZlcnNpb24gPCAyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwLmlmX3RoZW4oXCIgKyAoc2luZ2xlQml0SW5kZXggKyBjcmVnQmFzZSkgKyBcIiwgUHJvZ3JhbShcIjtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pZl90aGVuKHJvW1wiICsgKHNpbmdsZUJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdLCBQcm9ncmFtKFwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRpZih2ZXJzaW9uIDwgMikge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KEZBTFNFKFwiICsgdGVzdEJpdCArIFwiKSlcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBmaXJzdFNldCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRiaXRTdHIubWFwKGZ1bmN0aW9uKGJpdFZhbHVlLCBiaXRJbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihiaXRWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGZpcnN0U2V0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaXJzdFNldCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KE9SKFwiICsgKGJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCIsIFwiICsgdGVzdEJpdCArIFwiKSlcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KEFORChcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiLCBcIiArIHRlc3RCaXQgKyBcIikpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaWZfdGhlbihcIiArIHRlc3RCaXQgKyBcIiwgUHJvZ3JhbShcIjtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KE1PVkUocm9bXCIgKyB0ZXN0Qml0ICsgXCJdLCAwKSlcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBmaXJzdFNldCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRiaXRTdHIubWFwKGZ1bmN0aW9uKGJpdFZhbHVlLCBiaXRJbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihiaXRWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGZpcnN0U2V0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaXJzdFNldCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KElPUihyb1tcIiArIHRlc3RCaXQgKyBcIl0sIHJvW1wiICsgKGJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdKSlcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KEFORChyb1tcIiArIHRlc3RCaXQgKyBcIl0sIHJvW1wiICsgKGJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdKSlcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pZl90aGVuKHJvW1wiICsgdGVzdEJpdCArIFwiXSwgUHJvZ3JhbShcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwLmluc3QoXCI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYocXVpbEluZm8pIHtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBxdWlsSW5mby5uYW1lO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gZ2F0ZS5uYW1lO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHZhciBnb3RPcGVuQnJhY2UgPSBmYWxzZTtcblx0XHRcdFx0XHRpZihxdWlsSW5mbyAmJiBxdWlsSW5mby5wYXJhbXMgJiYgcXVpbEluZm8ucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIihcIjtcblx0XHRcdFx0XHRcdGdvdE9wZW5CcmFjZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRmb3IodmFyIHAgPSAwOyBwIDwgcXVpbEluZm8ucGFyYW1zLmxlbmd0aDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0Ly8gcHJlcGVuZCAnbnAnIHRvIG1hdGggY29uc3RhbnRzXG5cdFx0XHRcdFx0XHRcdGlmKHR5cGVvZiBnYXRlUGFyYW1zW3F1aWxJbmZvLnBhcmFtc1twXV0gIT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW3F1aWxJbmZvLnBhcmFtc1twXV0pO1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQvLyAtLS1cblxuXHRcdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYodmVyc2lvbiA8IDIgfHwgaXNEZWZHYXRlKSB7XG5cdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIilcIjtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmKGdhdGVEZWYgJiYgZ2F0ZURlZi5wYXJhbXMgJiYgZ2F0ZURlZi5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIihcIjtcblx0XHRcdFx0XHRcdFx0Z290T3BlbkJyYWNlID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IGdhdGVEZWYucGFyYW1zLmxlbmd0aDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0XHRcdC8vIHByZXBlbmQgJ25wJyB0byBtYXRoIGNvbnN0YW50c1xuXHRcdFx0XHRcdFx0XHRcdGlmKHR5cGVvZiBnYXRlUGFyYW1zW2dhdGVEZWYucGFyYW1zW3BdXSAhPSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgbm9kZSA9IG1hdGgucGFyc2UoZ2F0ZVBhcmFtc1tnYXRlRGVmLnBhcmFtc1twXV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IG5vZGUudG9TdHJpbmcoeyBoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyIH0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblxuXHRcdFx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYodmVyc2lvbiA8IDIgfHwgaXNEZWZHYXRlKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiKVwiO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihnYXRlLndpcmVzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRcdFx0XHRcdGlmKHZlcnNpb24gPCAyIHx8ICFnb3RPcGVuQnJhY2UgfHwgaXNEZWZHYXRlKSB7XG5cdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIihcIjtcblx0XHRcdFx0XHRcdFx0Z290T3BlbkJyYWNlID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGZvcih2YXIgdyA9IDA7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKSB7XG5cdFx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IFwicVwiICsgZ2F0ZS53aXJlc1t3XTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCJcIiArIGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihnYXRlLm5hbWUgPT0gXCJtZWFzdXJlXCIgJiYgZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jcmVnKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0YXJnZXRCaXQgPSBwYXJzZUludChnYXRlLm9wdGlvbnMuY3JlZy5iaXQpIHx8IDA7XG5cdFx0XHRcdFx0XHRcdGlmKGlzTmFOKHRhcmdldEJpdCkpIHtcblx0XHRcdFx0XHRcdFx0XHR0YXJnZXRCaXQgPSAwO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmKHZlcnNpb24gPCAyKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9ICh0YXJnZXRCaXQgKyBzZWxmLmNyZWdCYXNlKGdhdGUub3B0aW9ucy5jcmVnLm5hbWUpKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCJyb1tcIiArICh0YXJnZXRCaXQgKyBzZWxmLmNyZWdCYXNlKGdhdGUub3B0aW9ucy5jcmVnLm5hbWUpKSArIFwiXVwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIilcIjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRweXF1aWwgKz0gXCIpXCI7XG5cdFx0XHRcdFx0aWYoaW5zaWRlQ29udHJvbCkge1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiKVxcblwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bmtub3duIGdhdGU/XG5cdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwiIyBFeHBvcnQgdG8gcHlxdWlsIFdBUk5JTkc6IHVua25vd24gZ2F0ZSBcXFwiXCIgKyBnYXRlLm5hbWUgKyBcIlxcXCIuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0cHlxdWlsICs9IGluZGVudCArIFwicmV0dXJuIHBcXG5cIjtcblx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0fSBlbHNlIHtcblx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHRpZih2ZXJzaW9uIDwgMikge1xuXHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicXZtID0gUVZNQ29ubmVjdGlvbigpXFxuXCI7XG5cblx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIlxuXG5cdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcIiMgQ0FMQ1VMQVRFIENPU1QgSEVSRVxcblwiO1xuXG5cdFx0XHRcdHZhciBjb3N0RnVuY3Rpb24gPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uLnB5dGhvbiB8fCBcIlwiIDogXCJcIjtcblx0XHRcdFx0aWYoIWNvc3RGdW5jdGlvbi50cmltKCkpIHtcblx0XHRcdFx0XHRjb3N0RnVuY3Rpb24gPSBcImNvc3QgPSAwXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRweXF1aWwgKz0gYWRqdXN0SWRlbnRhdGlvbihjb3N0RnVuY3Rpb24sIGluZGVudCk7XG5cblx0XHRcdFx0cHlxdWlsICs9IFwiXFxuXCJcblx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicmV0dXJuIGNvc3RcXG5cIlxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicHJpbnQocXZtLnJ1bihwKSlcXG5cIjtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYoc2hvdHMpIHtcblx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC53cmFwX2luX251bXNob3RzX2xvb3Aoc2hvdHMpXFxuXCI7XG5cdFx0XHRcdHB5cXVpbCArPSBcIlxcblwiO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgbGF0dGljZU5hbWUgPSBsYXR0aWNlO1xuXHRcdFx0aWYoIWxhdHRpY2VOYW1lKSB7XG5cdFx0XHRcdGlmKHZlcnNpb24gPCAyLjEpIHtcblx0XHRcdFx0XHRsYXR0aWNlTmFtZSA9IHRoaXMubnVtUXViaXRzICsgXCJxLWdlbmVyaWMtcXZtXCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bGF0dGljZU5hbWUgPSB0aGlzLm51bVF1Yml0cyArIFwicS1xdm1cIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJxYyA9IGdldF9xYygnXCIgKyBsYXR0aWNlTmFtZSArIFwiJ1wiICsgKGxhdHRpY2UgPyAoXCIsIGFzX3F2bT1cIiArIChhc1FWTSA/IFwiVHJ1ZVwiIDogXCJGYWxzZVwiKSkgOiBcIlwiKSArIFwiKVxcblwiO1xuXG5cdFx0XHRpZihsYXR0aWNlKSB7XG5cdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcImVwID0gcWMuY29tcGlsZShwKVxcblwiO1xuXG5cdFx0XHRcdGlmKGdvdE1lYXN1cmVtZW50KSB7XG5cblx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJyZXN1bHRzX2xpc3QgPSBxYy5ydW4oZXApLnJlYWRvdXRfZGF0YS5nZXQoXFxcInJvXFxcIilcXG5cIjtcblx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJyZXN1bHRzID0gbGlzdChtYXAobGFtYmRhIGFycjogcmVkdWNlKGxhbWJkYSB4LCB5OiBzdHIoeCkgKyBzdHIoeSksIGFycls6Oi0xXSwgXFxcIlxcXCIpLCByZXN1bHRzX2xpc3QpKVxcblwiO1xuXG5cdFx0XHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJjb3VudHMgPSBDb3VudGVyKGRpY3QoemlwKHJlc3VsdHMsW3Jlc3VsdHMuY291bnQoaSkgZm9yIGkgaW4gcmVzdWx0c10pKSlcXG5cIjtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIlxcblwiXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCIjIENBTENVTEFURSBDT1NUIEhFUkVcXG5cIjtcblxuXHRcdFx0XHRcdFx0dmFyIGNvc3RGdW5jdGlvbiA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24gPyB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24ucHl0aG9uIHx8IFwiXCIgOiBcIlwiO1xuXHRcdFx0XHRcdFx0aWYoIWNvc3RGdW5jdGlvbi50cmltKCkpIHtcblx0XHRcdFx0XHRcdFx0Y29zdEZ1bmN0aW9uID0gXCJjb3N0ID0gMFwiO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gYWRqdXN0SWRlbnRhdGlvbihjb3N0RnVuY3Rpb24sIGluZGVudCk7XG5cblx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIlxcblwiXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJyZXR1cm4gY29zdFxcblwiXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcImNvdW50cyA9IGRpY3QoemlwKHJlc3VsdHMsW3Jlc3VsdHMuY291bnQoaSkgZm9yIGkgaW4gcmVzdWx0c10pKVxcblwiO1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicHJpbnQoY291bnRzKVxcblwiO1x0XHRcdFx0XHRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJjb3VudHMgPSBDb3VudGVyKGRpY3QoemlwKHJlc3VsdHMsW3Jlc3VsdHMuY291bnQoaSkgZm9yIGkgaW4gcmVzdWx0c10pKSlcXG5cIjtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIlxcblwiXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCIjIENBTENVTEFURSBDT1NUIEhFUkVcXG5cIjtcblxuXHRcdFx0XHRcdFx0dmFyIGNvc3RGdW5jdGlvbiA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24gPyB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24ucHl0aG9uIHx8IFwiXCIgOiBcIlwiO1xuXHRcdFx0XHRcdFx0aWYoIWNvc3RGdW5jdGlvbi50cmltKCkpIHtcblx0XHRcdFx0XHRcdFx0Y29zdEZ1bmN0aW9uID0gXCJjb3N0ID0gMFwiO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gYWRqdXN0SWRlbnRhdGlvbihjb3N0RnVuY3Rpb24sIGluZGVudCk7XG5cblx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIlxcblwiXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJyZXR1cm4gY29zdFxcblwiXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInByaW50KHFjLnJ1bihlcCkucmVhZG91dF9kYXRhLmdldChcXFwicm9cXFwiKSlcXG5cIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmKGdvdE1lYXN1cmVtZW50KSB7XG5cdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicmVzdWx0c19saXN0ID0gcWMucnVuKHApLnJlYWRvdXRfZGF0YS5nZXQoXFxcInJvXFxcIilcXG5cIjtcblx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJyZXN1bHRzID0gbGlzdChtYXAobGFtYmRhIGFycjogcmVkdWNlKGxhbWJkYSB4LCB5OiBzdHIoeCkgKyBzdHIoeSksIGFycls6Oi0xXSwgXFxcIlxcXCIpLCByZXN1bHRzX2xpc3QpKVxcblwiO1xuXHRcdFx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwiY291bnRzID0gQ291bnRlcihkaWN0KHppcChyZXN1bHRzLFtyZXN1bHRzLmNvdW50KGkpIGZvciBpIGluIHJlc3VsdHNdKSkpXFxuXCI7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwiIyBDQUxDVUxBVEUgQ09TVCBIRVJFXFxuXCI7XG5cblx0XHRcdFx0XHRcdHZhciBjb3N0RnVuY3Rpb24gPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uLnB5dGhvbiB8fCBcIlwiIDogXCJcIjtcblx0XHRcdFx0XHRcdGlmKCFjb3N0RnVuY3Rpb24udHJpbSgpKSB7XG5cdFx0XHRcdFx0XHRcdGNvc3RGdW5jdGlvbiA9IFwiY29zdCA9IDBcIjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGFkanVzdElkZW50YXRpb24oY29zdEZ1bmN0aW9uLCBpbmRlbnQpO1xuXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicmV0dXJuIGNvc3RcXG5cIlxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJjb3VudHMgPSBkaWN0KHppcChyZXN1bHRzLFtyZXN1bHRzLmNvdW50KGkpIGZvciBpIGluIHJlc3VsdHNdKSlcXG5cIjtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInByaW50KGNvdW50cylcXG5cIjtcdFx0XHRcdFx0XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInJlc3VsdHNfbGlzdCA9IHFjLnJ1bihwKS5yZWFkb3V0X2RhdGEuZ2V0KFxcXCJyb1xcXCIpXFxuXCI7XG5cdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicmVzdWx0cyA9IGxpc3QobWFwKGxhbWJkYSBhcnI6IHJlZHVjZShsYW1iZGEgeCwgeTogc3RyKHgpICsgc3RyKHkpLCBhcnJbOjotMV0sIFxcXCJcXFwiKSwgcmVzdWx0c19saXN0KSlcXG5cIjtcblx0XHRcdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcImNvdW50cyA9IENvdW50ZXIoZGljdCh6aXAocmVzdWx0cyxbcmVzdWx0cy5jb3VudChpKSBmb3IgaSBpbiByZXN1bHRzXSkpKVxcblwiO1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiXFxuXCJcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcIiMgQ0FMQ1VMQVRFIENPU1QgSEVSRVxcblwiO1xuXG5cdFx0XHRcdFx0XHR2YXIgY29zdEZ1bmN0aW9uID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbiA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbi5weXRob24gfHwgXCJcIiA6IFwiXCI7XG5cdFx0XHRcdFx0XHRpZighY29zdEZ1bmN0aW9uLnRyaW0oKSkge1xuXHRcdFx0XHRcdFx0XHRjb3N0RnVuY3Rpb24gPSBcImNvc3QgPSAwXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHB5cXVpbCArPSBhZGp1c3RJZGVudGF0aW9uKGNvc3RGdW5jdGlvbiwgaW5kZW50KTtcblxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiXFxuXCJcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInJldHVybiBjb3N0XFxuXCJcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicHJpbnQocmVzdWx0cylcXG5cIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZihoeWJyaWQpIHtcblx0XHRcdHZhciBnbG9iYWxQYXJhbUxpc3QgPSBcIlwiO1xuXHRcdFx0dGhpcy5wYXJhbXMubWFwKGZ1bmN0aW9uKGdsb2JhbFBhcmFtTmFtZSwgZ2xvYmFsUGFyYW1JbmRleCkge1xuXHRcdFx0XHRpZihnbG9iYWxQYXJhbUluZGV4ID4gMCkge1xuXHRcdFx0XHRcdGdsb2JhbFBhcmFtTGlzdCArPSBcIiwgXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0Z2xvYmFsUGFyYW1MaXN0ICs9IGdsb2JhbFBhcmFtTmFtZTtcblx0XHRcdH0pO1xuXG5cdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdHB5cXVpbCArPSBcInBhcmFtcyA9IG5wLmFycmF5KFtcIiArIGdsb2JhbFBhcmFtTGlzdCArIFwiXSlcXG5cIjtcblx0XHRcdHB5cXVpbCArPSBcIlxcblwiO1xuXHRcdFx0cHlxdWlsICs9IFwibWluaW11bSA9IG1pbmltaXplKG9iamVjdGl2ZV9mdW5jdGlvbiwgcGFyYW1zLCBtZXRob2Q9XFxcIlwiICsgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5vcHRpbWl6ZXIgPyB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5vcHRpbWl6ZXIgOiBcIlBvd2VsbFwiKSArIFwiXFxcIiwgdG9sPXRvbGVyYW5jZSlcXG5cIjtcblx0XHRcdHB5cXVpbCArPSBcInByaW50KFxcXCJjb3N0OlxcXCIsIG1pbmltdW0uZnVuLCBcXFwicGFyYW1zOlxcXCIsIG1pbmltdW0ueClcXG5cIjtcblx0XHR9XG5cdH1cblxuXHRpZihhc0p1cHl0ZXIpIHtcblx0XHR2YXIgbm90ZWJvb2sgPSB7XG5cdFx0XHRtZXRhZGF0YToge1xuXHRcdFx0XHRrZXJuZWxzcGVjOiB7XG5cdFx0XHRcdFx0ZGlzcGxheV9uYW1lOiBcIlB5dGhvbiAzXCIsXG5cdFx0XHRcdFx0bGFuZ3VhZ2U6IFwicHl0aG9uXCIsXG5cdFx0XHRcdFx0bmFtZTogXCJweXRob24zXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG5iZm9ybWF0OiA0LFxuXHRcdFx0bmJmb3JtYXRfbWlub3I6IDAsXG5cdFx0XHRjZWxsczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2VsbF90eXBlOiBcImNvZGVcIixcblx0XHRcdFx0XHRzb3VyY2U6IHB5cXVpbCxcblx0XHRcdFx0XHRtZXRhZGF0YToge1xuXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRvdXRwdXRzOiBbXSxcblx0XHRcdFx0XHRleGVjdXRpb25fY291bnQ6IG51bGxcblx0XHRcdFx0fVxuXHRcdFx0XVxuXHRcdH07XG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KG5vdGVib29rKTtcblx0fVxuXG5cdHJldHVybiBweXF1aWw7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0VG9RdWlsID0gZnVuY3Rpb24ob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgY29tbWVudCA9IG9wdGlvbnMuY29tbWVudDtcblxuXHQvLyBRVUlMIFN1Ym1vZHVsZXMgbm90IHN1cHBvcnRlZFxuXHR2YXIgZGVjb21wb3NlID0gdHJ1ZTsgLy8gb3B0aW9ucy5kZWNvbXBvc2U7XG5cdHZhciB2ZXJzaW9uU3RyID0gb3B0aW9ucy52ZXJzaW9uU3RyO1xuXG5cdHZhciBzZWxmID0gdGhpcztcblxuXHR2YXIgdmVyc2lvbiA9IHBhcnNlRmxvYXQodmVyc2lvblN0ciB8fCBcIjIuMFwiKTtcblx0aWYoaXNOYU4odmVyc2lvbikpIHtcblx0XHR2ZXJzaW9uID0gMi4wO1xuXHR9XG5cblx0Ly8gZGVjb21wb3NlID9cblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZShkZWNvbXBvc2UpKTtcblxuXHR2YXIgcXVpbCA9IFwiXCI7XG5cblx0Ly8gY29tbWVudFxuXHRpZihjb21tZW50KSB7XG5cdFx0dmFyIGNvbW0gPSAoY29tbWVudCB8fCBcIlwiKS5zcGxpdChcIlxcblwiKTtcblx0XHRjb21tLm1hcChmdW5jdGlvbihjbGluZSkge1xuXHRcdFx0aWYoY2xpbmUubGVuZ3RoID49IDEgJiYgY2xpbmVbMF0gIT0gXCIjXCIpIHtcblx0XHRcdFx0cXVpbCArPSBcIiMgXCI7XG5cdFx0XHR9XG5cdFx0XHRxdWlsICs9IGNsaW5lO1xuXHRcdFx0cXVpbCArPSBcIlxcblwiO1xuXHRcdH0pO1xuXHR9XG5cblx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdGlmKGJhc2ljR2F0ZSkge1xuXHRcdFx0aWYoYmFzaWNHYXRlLmV4cG9ydEluZm8gJiYgYmFzaWNHYXRlLmV4cG9ydEluZm8ucXVpbCkge1xuXHRcdFx0XHRpZihiYXNpY0dhdGUuZXhwb3J0SW5mby5xdWlsLmRlZmdhdGUpIHtcblx0XHRcdFx0XHRxdWlsICs9IGJhc2ljR2F0ZS5leHBvcnRJbmZvLnF1aWwuZGVmZ2F0ZTtcblx0XHRcdFx0XHRxdWlsICs9IFwiXFxuXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIGJhc2ljIGdhdGUgbm90IHN1cHBvcnRlZCBieSBxdWlsXG5cdFx0XHRcdC8vIFRPRE86IGFkZCBxdWlsIGRlZmluZSBnYXRlIGNvZGVcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdHZhciBnb3RDb25kaXRpb25zID0gdGhpcy5nb3RDbGFzc2ljYWxDb250cm9sKCk7XG5cdHZhciBpbmRlbnQgPSBcIlwiO1xuXHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0dmFyIHBhcmFtcyA9IFwiXCI7XG5cdFx0aWYoY2lyY3VpdC5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRwYXJhbXMgKz0gXCIoXCI7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY2lyY3VpdC5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYoaSA+IDApIHtcblx0XHRcdFx0XHRwYXJhbXMgKz0gXCIsIFwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHBhcmFtcyArPSBcIiVcIiArIGNpcmN1aXQucGFyYW1zW2ldO1xuXHRcdFx0fVxuXHRcdFx0cGFyYW1zICs9IFwiKVwiO1xuXHRcdH1cblxuXHRcdHZhciBhcmdzID0gXCJcIjtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY2lyY3VpdC5udW1RdWJpdHM7IGkrKykge1xuXHRcdFx0aWYoaSA+IDApIHtcblx0XHRcdFx0YXJncyArPSBcIiBcIjtcblx0XHRcdH1cblx0XHRcdGFyZ3MgKz0gXCJxXCIgKyBpO1xuXHRcdH1cblx0XHRxdWlsICs9IFwiREVGQ0lSQ1VJVCBcIiArIGV4cG9ydEFzR2F0ZU5hbWUgKyAocGFyYW1zID8gXCIgXCIgKyBwYXJhbXMgOiBcIlwiKSArIChhcmdzID8gXCIgXCIgKyBhcmdzIDogXCJcIikgKyBcIjpcXG5cIjtcblx0XHRpbmRlbnQgPSBcIiAgICBcIjtcblx0fSBlbHNlIHtcblx0XHRxdWlsICs9IFwiXFxuXCI7XG5cblx0XHRpZih2ZXJzaW9uID49IDIpIHtcblx0XHRcdHZhciB0b3RhbEJpdHMgPSBjaXJjdWl0LmNyZWdUb3RhbEJpdHMoKTtcblx0XHRcdGlmKGdvdENvbmRpdGlvbnMpIHtcblx0XHRcdFx0dG90YWxCaXRzICs9IDE7XG5cdFx0XHR9O1xuXHRcdFx0aWYodG90YWxCaXRzKSB7XG5cdFx0XHRcdHF1aWwgKz0gXCJERUNMQVJFIHJvIEJJVFtcIiArIHRvdGFsQml0cyArIFwiXVxcblwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBnbG9iYWxQYXJhbXMgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnBhcmFtcyA/IHRoaXMub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0XHRpZih0aGlzLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdHF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YXIgZ2xvYmFsUGFyYW1OYW1lID0gdGhpcy5wYXJhbXNbaV07XG5cblx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdsb2JhbFBhcmFtc1tnbG9iYWxQYXJhbU5hbWVdKTtcblx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtVmFsdWUgPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblxuXHRcdFx0XHRxdWlsICs9IFwiREVDTEFSRSBcIiArIGdsb2JhbFBhcmFtTmFtZSArIFwiIFJFQUxbMV1cXG5cIjtcblx0XHRcdH1cblx0XHRcdHF1aWwgKz0gXCJcXG5cIjtcblx0XHR9XG5cblx0XHR2YXIgdXNlZEdhdGVzID0gY2lyY3VpdC51c2VkR2F0ZXMoKTtcblx0XHRpZighZGVjb21wb3NlKSB7XG5cdFx0XHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdFx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdGlmKCFiYXNpY0dhdGUpIHtcblx0XHRcdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHNlbGYuY3VzdG9tR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0XHRpZihjdXN0b21HYXRlKSB7XG5cdFx0XHRcdFx0XHR2YXIgY3VzdG9tQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0Y3VzdG9tQ2lyY3VpdC5sb2FkKGN1c3RvbUdhdGUpO1xuXHRcdFx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdGNvbW1lbnQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdGRlY29tcG9zZTogZmFsc2Vcblx0XHRcdFx0XHRcdH07XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0cXVpbCArPSBjdXN0b21DaXJjdWl0LmV4cG9ydFRvUXVpbChuZXdPcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHZhciBtYXRoVG9TdHJpbmdIYW5kbGVyID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucykge1xuXHRcdGlmKG5vZGUuaXNTeW1ib2xOb2RlICYmIGNpcmN1aXQucGFyYW1zLmluZGV4T2Yobm9kZS5uYW1lKSA+PSAwKSB7XG5cdFx0XHRyZXR1cm4gXCIlXCIgKyBub2RlLm5hbWU7XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBsYWJlbENvdW50ZXIgPSAxO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IGNpcmN1aXQubnVtQ29scygpOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0dmFyIGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZS5uYW1lKTtcblx0XHRcdFx0dmFyIGdhdGVQYXJhbXMgPSBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcyA/IGdhdGUub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0XHRcdFx0dmFyIHF1aWxJbmZvID0gbnVsbDtcblx0XHRcdFx0aWYoZ2F0ZURlZikge1xuXHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mbykge1xuXHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLnF1aWwgJiYgZ2F0ZURlZi5leHBvcnRJbmZvLnF1aWwucmVwbGFjZW1lbnQpIHtcblx0XHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLnF1aWwucmVwbGFjZW1lbnQucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0Z2F0ZVBhcmFtcyA9IGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsLnJlcGxhY2VtZW50LnBhcmFtcztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRnYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsLnJlcGxhY2VtZW50Lm5hbWUpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRxdWlsSW5mbyA9IChnYXRlRGVmICYmIGdhdGVEZWYuZXhwb3J0SW5mbyAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucXVpbCkgPyBnYXRlRGVmLmV4cG9ydEluZm8ucXVpbCA6IG51bGw7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIGluc2lkZUNvbnRyb2wgPSBmYWxzZTtcblx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpIHtcblx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0Ly8gRmxvdyBjb250cm9sXG5cdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdGluc2lkZUNvbnRyb2wgPSB0cnVlO1xuXHRcdFx0XHRcdFx0cXVpbCArPSBcIlxcblwiO1xuXG5cdFx0XHRcdFx0XHR2YXIgdGVzdEJpdCA9IHNlbGYuY3JlZ1RvdGFsQml0cygpO1xuXHRcdFx0XHRcdFx0dmFyIGNvbmRpdGlvbiA9IGdhdGUub3B0aW9ucy5jb25kaXRpb247XG5cdFx0XHRcdFx0XHR2YXIgY29uZGl0aW9uVmFsdWUgPSBjb25kaXRpb24udmFsdWUgfHwgMDtcblx0XHRcdFx0XHRcdHZhciBjcmVnQmFzZSA9IHNlbGYuY3JlZ0Jhc2UoY29uZGl0aW9uLmNyZWcpO1xuXG5cdFx0XHRcdFx0XHRpZihjb25kaXRpb25WYWx1ZSA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBjcmVnU2l6ZSA9IHNlbGYuY3JlZ3NbY29uZGl0aW9uLmNyZWddLmxlbmd0aDtcblx0XHRcdFx0XHRcdFx0aWYodmVyc2lvbiA8IDIpIHtcblx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IGluZGVudCArIFwiRkFMU0UgW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgYml0SW5kZXggPSAwOyBiaXRJbmRleCA8IGNyZWdTaXplOyBiaXRJbmRleCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IGluZGVudCArIFwiT1IgW1wiICsgKGJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdIFtcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBcIk5PVCBbXCIgKyB0ZXN0Qml0ICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkpVTVAtV0hFTiBAVEhFTlwiICsgbGFiZWxDb3VudGVyICsgXCIgW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QIEBFTkRcIiArIChsYWJlbENvdW50ZXIgKyAxKSArIFwiXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkxBQkVMIEBUSEVOXCIgKyBsYWJlbENvdW50ZXIgKyBcIlxcblwiO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gaW5kZW50ICsgXCJGQUxTRSByb1tcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGJpdEluZGV4ID0gMDsgYml0SW5kZXggPCBjcmVnU2l6ZTsgYml0SW5kZXgrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBcIk9SIHJvW1wiICsgKGJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdIHJvW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IGluZGVudCArIFwiTk9UIHJvW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QLVdIRU4gQFRIRU5cIiArIGxhYmVsQ291bnRlciArIFwiIHJvW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QIEBFTkRcIiArIChsYWJlbENvdW50ZXIgKyAxKSArIFwiXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkxBQkVMIEBUSEVOXCIgKyBsYWJlbENvdW50ZXIgKyBcIlxcblwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR2YXIgYml0U3RyID0gY29uZGl0aW9uVmFsdWUudG9TdHJpbmcoMikuc3BsaXQoXCJcIikucmV2ZXJzZSgpO1xuXHRcdFx0XHRcdFx0XHR2YXIgYml0Q291bnQgPSAwO1xuXHRcdFx0XHRcdFx0XHR2YXIgc2luZ2xlQml0SW5kZXggPSAwO1xuXHRcdFx0XHRcdFx0XHRiaXRTdHIubWFwKGZ1bmN0aW9uKGJpdFZhbHVlLCBiaXRJbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBiaXRWYWwgPSBwYXJzZUludChiaXRWYWx1ZSk7XG5cdFx0XHRcdFx0XHRcdFx0Yml0U3RyW2JpdEluZGV4XSA9IGJpdFZhbDtcblx0XHRcdFx0XHRcdFx0XHRpZihiaXRWYWwpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGJpdENvdW50Kys7XG5cdFx0XHRcdFx0XHRcdFx0XHRzaW5nbGVCaXRJbmRleCA9IGJpdEluZGV4O1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0aWYoYml0Q291bnQgPT0gMSkge1xuXHRcdFx0XHRcdFx0XHRcdGlmKHZlcnNpb24gPCAyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiSlVNUC1XSEVOIEBUSEVOXCIgKyBsYWJlbENvdW50ZXIgKyBcIiBbXCIgKyAoc2luZ2xlQml0SW5kZXggKyBjcmVnQmFzZSkgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QIEBFTkRcIiArIChsYWJlbENvdW50ZXIgKyAxKSArIFwiXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiTEFCRUwgQFRIRU5cIiArIGxhYmVsQ291bnRlciArIFwiXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QLVdIRU4gQFRIRU5cIiArIGxhYmVsQ291bnRlciArIFwiIHJvW1wiICsgKHNpbmdsZUJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiSlVNUCBARU5EXCIgKyAobGFiZWxDb3VudGVyICsgMSkgKyBcIlxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkxBQkVMIEBUSEVOXCIgKyBsYWJlbENvdW50ZXIgKyBcIlxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRpZih2ZXJzaW9uIDwgMikge1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBcIkZBTFNFIFtcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBmaXJzdFNldCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRiaXRTdHIubWFwKGZ1bmN0aW9uKGJpdFZhbHVlLCBiaXRJbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihiaXRWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGZpcnN0U2V0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaXJzdFNldCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBcIk9SIFtcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiXSBbXCIgKyB0ZXN0Qml0ICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gaW5kZW50ICsgXCJBTkQgW1wiICsgKGJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdIFtcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkpVTVAtV0hFTiBAVEhFTlwiICsgbGFiZWxDb3VudGVyICsgXCIgW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkpVTVAgQEVORFwiICsgKGxhYmVsQ291bnRlciArIDEpICsgXCJcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJMQUJFTCBAVEhFTlwiICsgbGFiZWxDb3VudGVyICsgXCJcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBcIkZBTFNFIHJvW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGZpcnN0U2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdGJpdFN0ci5tYXAoZnVuY3Rpb24oYml0VmFsdWUsIGJpdEluZGV4KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGJpdFZhbHVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoZmlyc3RTZXQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGZpcnN0U2V0ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IGluZGVudCArIFwiT1Igcm9bXCIgKyAoYml0SW5kZXggKyBjcmVnQmFzZSkgKyBcIl0gcm9bXCIgKyB0ZXN0Qml0ICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gaW5kZW50ICsgXCJBTkQgcm9bXCIgKyAoYml0SW5kZXggKyBjcmVnQmFzZSkgKyBcIl0gcm9bXCIgKyB0ZXN0Qml0ICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QLVdIRU4gQFRIRU5cIiArIGxhYmVsQ291bnRlciArIFwiIHJvW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkpVTVAgQEVORFwiICsgKGxhYmVsQ291bnRlciArIDEpICsgXCJcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJMQUJFTCBAVEhFTlwiICsgbGFiZWxDb3VudGVyICsgXCJcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKHF1aWxJbmZvKSB7XG5cdFx0XHRcdFx0XHRxdWlsICs9IGluZGVudCArIHF1aWxJbmZvLm5hbWU7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHF1aWwgKz0gaW5kZW50ICsgZ2F0ZS5uYW1lO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHF1aWwgKz0gXCIgXCI7XG5cdFx0XHRcdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRcdFx0XHRpZihxdWlsSW5mbyAmJiBxdWlsSW5mby5wYXJhbXMgJiYgcXVpbEluZm8ucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0cXVpbCArPSBcIihcIjtcblx0XHRcdFx0XHRcdGZvcih2YXIgcCA9IDA7IHAgPCBxdWlsSW5mby5wYXJhbXMubGVuZ3RoOyBwKyspIHtcblx0XHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0Ly8gcHJlcGVuZCAnJScgdG8gZ2xvYmFsIHBhcmFtc1xuXHRcdFx0XHRcdFx0XHRpZih0eXBlb2YgZ2F0ZVBhcmFtc1txdWlsSW5mby5wYXJhbXNbcF1dICE9IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbm9kZSA9IG1hdGgucGFyc2UoZ2F0ZVBhcmFtc1txdWlsSW5mby5wYXJhbXNbcF1dKTtcblx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IG5vZGUudG9TdHJpbmcoeyBoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyIH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdC8vIC0tLVxuXG5cdFx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRxdWlsICs9IFwiKVwiO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmICYmIGdhdGVEZWYucGFyYW1zICYmIGdhdGVEZWYucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiKFwiO1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIHAgPSAwOyBwIDwgZ2F0ZURlZi5wYXJhbXMubGVuZ3RoOyBwKyspIHtcblx0XHRcdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0XHRcdC8vIHByZXBlbmQgJyUnIHRvIGdsb2JhbCBwYXJhbXNcblx0XHRcdFx0XHRcdFx0XHRpZih0eXBlb2YgZ2F0ZVBhcmFtc1tnYXRlRGVmLnBhcmFtc1twXV0gIT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbZ2F0ZURlZi5wYXJhbXNbcF1dKTtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXG5cdFx0XHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiKVwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGZvcih2YXIgdyA9IDA7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKSB7XG5cdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIiBcIjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRxdWlsICs9IFwicVwiICsgZ2F0ZS53aXJlc1t3XTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJcIiArIGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoZ2F0ZS5uYW1lID09IFwibWVhc3VyZVwiICYmIGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY3JlZykge1xuXHRcdFx0XHRcdFx0dmFyIHRhcmdldEJpdCA9IHBhcnNlSW50KGdhdGUub3B0aW9ucy5jcmVnLmJpdCkgfHwgMDtcblx0XHRcdFx0XHRcdGlmKGlzTmFOKHRhcmdldEJpdCkpIHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0Qml0ID0gMDtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCIgXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKHZlcnNpb24gPCAyKSB7XG5cdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJbXCIgKyAodGFyZ2V0Qml0ICsgc2VsZi5jcmVnQmFzZShnYXRlLm9wdGlvbnMuY3JlZy5uYW1lKSkgKyBcIl1cIjtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJyb1tcIiArICh0YXJnZXRCaXQgKyBzZWxmLmNyZWdCYXNlKGdhdGUub3B0aW9ucy5jcmVnLm5hbWUpKSArIFwiXVwiO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHF1aWwgKz0gXCJcXG5cIjtcblxuXHRcdFx0XHRcdGlmKGluc2lkZUNvbnRyb2wpIHtcblx0XHRcdFx0XHRcdHF1aWwgKz0gXCJMQUJFTCBARU5EXCIgKyAobGFiZWxDb3VudGVyICsgMSkgKyBcIlxcblwiO1xuXHRcdFx0XHRcdFx0cXVpbCArPSBcIlxcblwiO1xuXHRcdFx0XHRcdFx0bGFiZWxDb3VudGVyICs9IDI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHVua25vd24gZ2F0ZT9cblx0XHRcdFx0XHRjb25zb2xlLmxvZyhcInVua25vd24gZ2F0ZVwiLCBnYXRlLm5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHF1aWwgKz0gXCJcXG5cIjtcblx0fVxuXG5cdHJldHVybiBxdWlsO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvQVFBU00gPSBmdW5jdGlvbihvcHRpb25zLCBpc0V4cG9ydFB5QVFBU00sIGV4cG9ydEFzR2F0ZU5hbWUsIGluZGVudERlcHRoKSB7XG5cdHZhciBzZWxmID0gdGhpcztcblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgY29tbWVudCA9IG9wdGlvbnMuY29tbWVudDtcblx0dmFyIGRlY29tcG9zZSA9IG9wdGlvbnMuZGVjb21wb3NlO1xuXHR2YXIgYXNKdXB5dGVyID0gb3B0aW9ucy5hc0p1cHl0ZXI7XG5cdHZhciBzaG90cyA9IG9wdGlvbnMuc2hvdHM7XG5cdHZhciBoeWJyaWQgPSAhIWlzRXhwb3J0UHlBUUFTTSA/IG9wdGlvbnMuaHlicmlkIDogZmFsc2U7XG5cblx0dmFyIGNpcmN1aXQgPSBudWxsO1xuXHR2YXIgdGVtcENpcmN1aXQgPSBudWxsO1xuXG5cdHNob3RzID0gc2hvdHMgfHwgMTAyNDtcblxuXHRpZih0eXBlb2YgaHlicmlkID09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRoeWJyaWQgPSB0aGlzLm9wdGlvbnMgPyAhIXRoaXMub3B0aW9ucy5oeWJyaWQgOiBmYWxzZTtcblx0fVxuXG5cdHZhciBvYmogPSB0aGlzLnNhdmUoISFkZWNvbXBvc2UpO1xuXG5cdGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0dGVtcENpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKG9iaik7XG5cdHRlbXBDaXJjdWl0LmxvYWQob2JqKTtcblxuXHR2YXIgbWF0aFRvU3RyaW5nSGFuZGxlciA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMpIHtcblx0XHRcblx0XHRpZihub2RlLmlzU3ltYm9sTm9kZSkge1xuXHRcdFx0dmFyIG51bXB5cyA9IFtcInBpXCJdO1xuXHRcdFx0aWYobnVtcHlzLmluZGV4T2Yobm9kZS5uYW1lKSA+PSAwKSB7XG5cdFx0XHRcdHJldHVybiBcIm5wLlwiICsgbm9kZS5uYW1lO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR2YXIgYWRqdXN0SWRlbnRhdGlvbiA9IGZ1bmN0aW9uKGFkZFN0ciwgaWRlbnQpIHtcblx0XHR2YXIgc3RyID0gXCJcIjtcblxuXHRcdC8vIGFkZCB1c2VyIGRlZmluZWQgY29zdCBmdW5jdGlvbiB3aXRoIHByb3BlciBpZGVudGF0aW9uXG5cdFx0dmFyIGNmTGluZXMgPSBhZGRTdHIuc3BsaXQoXCJcXG5cIik7XG5cdFx0dmFyIG1pbklkZW50ID0gLTE7XG5cdFx0Y2ZMaW5lcy5tYXAoZnVuY3Rpb24oY2ZMaW5lKSB7XG5cdFx0XHR2YXIgdG1wSWRlbnQgPSBjZkxpbmUuc2VhcmNoKC9cXFMvKTtcblx0XHRcdGlmKHRtcElkZW50ID49IDAgJiYgKG1pbklkZW50IDwgMCB8fCB0bXBJZGVudCA8IG1pbklkZW50KSkge1xuXHRcdFx0XHRtaW5JZGVudCA9IHRtcElkZW50O1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aWYobWluSWRlbnQgPCAwKSB7XG5cdFx0XHRtaW5JZGVudCA9IDA7XG5cdFx0fVxuXG5cdFx0dmFyIGFkZElkZW50ID0gXCJcIjtcblx0XHRpZihtaW5JZGVudCA8IGlkZW50Lmxlbmd0aCkge1xuXHRcdFx0Zm9yKHZhciB0bXAgPSAwOyB0bXAgPCAoaWRlbnQubGVuZ3RoIC0gbWluSWRlbnQpOyB0bXArKykge1xuXHRcdFx0XHRhZGRJZGVudCArPSBcIiBcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjZkxpbmVzLm1hcChmdW5jdGlvbihjZkxpbmUpIHtcblx0XHRcdHN0ciArPSBhZGRJZGVudCArIGNmTGluZSArIFwiXFxuXCI7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gc3RyO1xuXHR9O1xuXG5cdHZhciBnZXRJbmRlbnQgPSBmdW5jdGlvbihkZXB0aCkge1xuXHRcdHZhciBpbmRlbnQgPSBcIlwiO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBkZXB0aDsgaSsrKSB7XG5cdFx0XHRpbmRlbnQgKz0gXCIgICAgXCI7XG5cdFx0fVxuXHRcdHJldHVybiBpbmRlbnQ7XG5cdH1cblxuXHRpbmRlbnREZXB0aCA9IGluZGVudERlcHRoIHx8IDA7XG5cblx0dmFyIGdhdGVzVG9CZUFkZGVkID0gW107XG5cdGlmKCFpc0V4cG9ydFB5QVFBU00pe1xuXHRcdGlmKCFkZWNvbXBvc2UpIHtcblx0XHRcdHZhciBudW1Db2xzID0gdGVtcENpcmN1aXQubnVtQ29scygpO1xuXHRcdFx0Zm9yKHZhciBjb2x1bW4gPSBudW1Db2xzIC0gMTsgY29sdW1uID49IDA7IGNvbHVtbi0tKSB7XG5cdFx0XHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0ZW1wQ2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0XHRcdHZhciBnYXRlID0gdGVtcENpcmN1aXQuZ2F0ZXNbd2lyZV1bY29sdW1uXTtcblx0XHRcdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDAgJiYgIXRlbXBDaXJjdWl0LmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXSkge1xuXHRcdFx0XHRcdFx0Y3VzdG9tRGVjb21wb3NlZENpcmN1aXQgPSB0ZW1wQ2lyY3VpdC5kZWNvbXBvc2VHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdFx0XHRcdHZhciBpc0RlY29tcG9zZUN1c3RvbUNpcmN1aXQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGZvcih2YXIgZGVjb21wb3NlZENvbHVtbiA9IDA7IGRlY29tcG9zZWRDb2x1bW4gPCBjdXN0b21EZWNvbXBvc2VkQ2lyY3VpdC5udW1Db2xzKCk7IGRlY29tcG9zZWRDb2x1bW4rKykge1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIGRlY29tcG9zZWRXaXJlID0gMDsgZGVjb21wb3NlZFdpcmUgPCBjdXN0b21EZWNvbXBvc2VkQ2lyY3VpdC5udW1RdWJpdHM7IGRlY29tcG9zZWRXaXJlKyspIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZ2F0ZUluQ3VzdG9tQ2lyY3VpdCA9IGN1c3RvbURlY29tcG9zZWRDaXJjdWl0LmdldEdhdGVBdChkZWNvbXBvc2VkQ29sdW1uLCBkZWNvbXBvc2VkV2lyZSk7XG5cblx0XHRcdFx0XHRcdFx0XHRpZihnYXRlSW5DdXN0b21DaXJjdWl0ICYmIGdhdGVJbkN1c3RvbUNpcmN1aXQuY29ubmVjdG9yID09IDApe1xuXHRcdFx0XHRcdFx0XHRcdFx0Z2F0ZXNUb0JlQWRkZWQucHVzaChnYXRlSW5DdXN0b21DaXJjdWl0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0Y2lyY3VpdC5nYXRlcy5tYXAoZnVuY3Rpb24oY2lyY3VpdEdhdGUsIGluZGV4KXtcblx0XHRcdFx0XHRcdFx0XHRcdGNpcmN1aXRHYXRlLm1hcChmdW5jdGlvbihnYXRlVG9SZW1vdmUpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihnYXRlVG9SZW1vdmUgJiYgZ2F0ZVRvUmVtb3ZlLm5hbWUgPT0gZ2F0ZS5uYW1lKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjaXJjdWl0LnJlbW92ZUdhdGUoZ2F0ZVRvUmVtb3ZlLmlkKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdH0pO1x0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0Z2F0ZXNUb0JlQWRkZWQubWFwKGZ1bmN0aW9uKGdhdGVUb0FkZCl7XG5cdFx0XHRpZihnYXRlVG9BZGQpe1xuXHRcdFx0XHRjaXJjdWl0Lmluc2VydEdhdGUoZ2F0ZVRvQWRkLm5hbWUsIGdhdGVUb0FkZC5jb2x1bW4sIGdhdGVUb0FkZC53aXJlcywgZ2F0ZVRvQWRkLm9wdGlvbnMpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0dmFyIGFxYXNtID0gXCJcIjtcblx0dmFyIGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHR2YXIgbnVtUXViaXRzID0gY2lyY3VpdC5udW1RdWJpdHM7XG5cdFxuXHRpZighaXNFeHBvcnRQeUFRQVNNKXtcblx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCJCRUdJTlxcblwiO1xuXHRcdGFxYXNtICs9IGluZGVudCArICBcInF1Yml0cyBcIiArIG51bVF1Yml0cyArIFwiXFxuXCI7XG5cblx0XHRpZiAoY2lyY3VpdC5jcmVncyl7XG5cdFx0XHR2YXIgY3JlZ0xlbmd0aCA9IDA7XG5cdFx0XHRmb3IodmFyIGNyZWcgaW4gY2lyY3VpdC5jcmVncyl7XG5cdFx0XHRcdGNyZWdMZW5ndGggKz0gY2lyY3VpdC5jcmVnc1tjcmVnXS5sZW5ndGg7XG5cdFx0XHR9XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyBcImNiaXRzIFwiICsgY3JlZ0xlbmd0aCArIFwiXFxuXCI7XG5cdFx0fVxuXHR9ZWxzZSB7XG5cdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSl7XG5cdFx0XHR2YXIgYXJncyA9IFwiXCI7XG5cdFx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdGFyZ3MgKz0gXCIsIFwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFyZ3MgKz0gY2lyY3VpdC5wYXJhbXNbaV07XG5cdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHR9XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY2lyY3VpdC5udW1RdWJpdHM7IGkrKykge1xuXHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRhcmdzICs9IFwiLCBcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRhcmdzICs9IHF1Yml0TGV0dGVyKGksIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdH1cblx0XHR9ZWxzZSB7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyBcImZyb20gcWF0LmxhbmcuQVFBU00gaW1wb3J0ICpcXG5cIjtcblx0XHRcdGFxYXNtICs9IGluZGVudCArIFwiZnJvbSBxYXQucXB1cyBpbXBvcnQgZ2V0X2RlZmF1bHRfcXB1XFxuXCI7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyBcImZyb20gY29sbGVjdGlvbnMgaW1wb3J0IENvdW50ZXJcXG5cIjtcblxuXHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdGFxYXNtICs9IGluZGVudCArIFwiZnJvbSBzY2lweS5vcHRpbWl6ZSBpbXBvcnQgbWluaW1pemVcXG5cIjtcblx0XHRcdH1cblx0XHRcdFxuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgIFwiaW1wb3J0IG51bXB5IGFzIG5wXFxuXCI7XG5cblx0XHRcdGFxYXNtICs9IFwiXFxuXCI7XG5cblx0XHRcdHZhciB1bnN1cHBvcnRlZEdhdGVEZWZpbml0aW9uID0gXCJcIjtcblx0XHRcdHZhciBzdWJtb2R1bGVDb3VudCA9IDA7XG5cdFx0XHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdFx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdGlmKGJhc2ljR2F0ZSkge1xuXHRcdFx0XHRcdGlmKCFkZWNvbXBvc2Upe1xuXHRcdFx0XHRcdFx0aWYoY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV0uZXhwb3J0SW5mby5hcWFzbSAmJiBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXS5leHBvcnRJbmZvLmFxYXNtLmFycmF5KSB7XG5cdFx0XHRcdFx0XHRcdHVuc3VwcG9ydGVkQXFhc21JbmZvID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV0uZXhwb3J0SW5mby5hcWFzbTtcblx0XHRcdFxuXHRcdFx0XHRcdFx0XHRnYXRlVW5pdGFyeSA9IHVzZWRHYXRlTmFtZSArIFwiX2dhdGVcIjtcblx0XHRcdFx0XHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCJkZWYgXCIgKyBnYXRlVW5pdGFyeSArXCIoXCI7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRpZih1bnN1cHBvcnRlZEFxYXNtSW5mby5wYXJhbXMgJiYgdW5zdXBwb3J0ZWRBcWFzbUluZm8ucGFyYW1zLmxlbmd0aCl7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRcdFx0XHRcdFx0XHR1bnN1cHBvcnRlZEFxYXNtSW5mby5wYXJhbXMubWFwKGZ1bmN0aW9uKHBhcmFtTmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YXFhc20gKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCJwX1wiICsgcGFyYW1OYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRhcWFzbSArPSBcIik6XFxuXCI7XG5cdFx0XHRcdFx0XHRcdGFxYXNtICs9IGdldEluZGVudChpbmRlbnREZXB0aCArIDEpICsgXCJyZXR1cm4gbnAuYXJyYXkoXCIgKyAgdW5zdXBwb3J0ZWRBcWFzbUluZm8uYXJyYXkgKyBcIilcXG5cXG5cIjtcdFx0XHRcdFx0XHRcdFxuXG5cdFx0XHRcdFx0XHRcdHVuc3VwcG9ydGVkR2F0ZURlZmluaXRpb24gKz0gdXNlZEdhdGVOYW1lICsgXCIgPSBBYnN0cmFjdEdhdGUoXFxcIlwiICsgdXNlZEdhdGVOYW1lICsgXCJcXFwiLCBbXCI7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR2YXIgY291bnQgPSAwO1xuXG5cdFx0XHRcdFx0XHRcdGlmKHVuc3VwcG9ydGVkQXFhc21JbmZvLnBhcmFtcyl7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IHVuc3VwcG9ydGVkQXFhc21JbmZvLnBhcmFtcy5sZW5ndGg7IGkrKyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihjb3VudCA+IDApe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR1bnN1cHBvcnRlZEdhdGVEZWZpbml0aW9uICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHVuc3VwcG9ydGVkR2F0ZURlZmluaXRpb24gKz0gXCJmbG9hdFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0Y291bnQrKztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZihiYXNpY0dhdGUubWF0cml4KXtcblx0XHRcdFx0XHRcdFx0XHRhcml0eSA9IG1hdGgubG9nMihiYXNpY0dhdGUubWF0cml4Lmxlbmd0aCk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHR1bnN1cHBvcnRlZEdhdGVEZWZpbml0aW9uICs9IFwiXSwgbWF0cml4X2dlbmVyYXRvcj1cIiArIGdhdGVVbml0YXJ5ICsgXCIsIGFyaXR5PVwiICsgYXJpdHkgK1wiKVxcblwiO1xuXHRcdFx0XHRcdFx0fVx0XHRcdFx0XHRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFyIGN1c3RvbUdhdGUgPSBzZWxmLmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdFx0aWYoY3VzdG9tR2F0ZSkge1xuXHRcdFx0XHRcdFx0dmFyIGN1c3RvbUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0XHRcdGN1c3RvbUNpcmN1aXQubG9hZChjdXN0b21HYXRlKTtcblxuXHRcdFx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdGNvbW1lbnQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdGRlY29tcG9zZTogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0YXNKdXB5dGVyOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0c2hvdHM6IG51bGwsXG5cdFx0XHRcdFx0XHRcdGh5YnJpZDogZmFsc2Vcblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdGFxYXNtICs9IGN1c3RvbUNpcmN1aXQuZXhwb3J0VG9BUUFTTShuZXdPcHRpb25zLCBpc0V4cG9ydFB5QVFBU00sIHVzZWRHYXRlTmFtZSwgaW5kZW50RGVwdGgpO1xuXHRcdFx0XHRcdFx0c3VibW9kdWxlQ291bnQrKztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRhcWFzbSArPSB1bnN1cHBvcnRlZEdhdGVEZWZpbml0aW9uO1xuXG5cdFx0XHRhcWFzbSArPSBcIlxcblwiO1xuXG5cdFx0XHRpZihzaG90cykge1xuXHRcdFx0XHRhcWFzbSArPSBpbmRlbnQgKyBcInNob3RzID0gXCIgKyBzaG90cyArIFwiXFxuXCI7XG5cdFx0XHRcdGFxYXNtICs9IFwiXFxuXCI7XG5cdFx0XHR9XG5cblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcInByb2dyYW0gPSBQcm9ncmFtKClcXG5cIjtcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcInF1Yml0c19yZWcgPSBwcm9ncmFtLnFhbGxvYyhcIisgY2lyY3VpdC5udW1RdWJpdHMgK1wiKVxcblwiO1x0XG5cdFx0XHRcblx0XHRcdGZvcih2YXIgY3JlZ05hbWUgaW4gY2lyY3VpdC5jcmVncyl7XG5cdFx0XHRcdGFxYXNtICs9IGluZGVudCArIGNyZWdOYW1lICsgXCIgPSBwcm9ncmFtLmNhbGxvYyhcIiArIGNpcmN1aXQuY3JlZ3NbY3JlZ05hbWVdLmxlbmd0aCArIFwiKVxcblwiO1xuXHRcdFx0fVxuXG5cdFx0XHRhcWFzbSArPSBcIlxcblwiO1xuXG5cdFx0XHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wYXJhbXMgPyB0aGlzLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0XHRpZih0aGlzLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtTmFtZSA9IHRoaXMucGFyYW1zW2ldO1xuXG5cdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdsb2JhbFBhcmFtc1tnbG9iYWxQYXJhbU5hbWVdKTtcblx0XHRcdFx0XHR2YXIgZ2xvYmFsUGFyYW1WYWx1ZSA9IG5vZGUudG9TdHJpbmcoeyBoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyIH0pO1xuXG5cdFx0XHRcdFx0YXFhc20gKz0gZ2xvYmFsUGFyYW1OYW1lICsgXCIgPSBcIiArIGdsb2JhbFBhcmFtVmFsdWUgKyBcIlxcblwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGFxYXNtICs9IFwiXFxuXCI7XG5cdFx0XHR9XG5cblx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRhcWFzbSArPSBpbmRlbnQgKyBcInRvbGVyYW5jZSA9IFwiICsgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy50b2xlcmFuY2UgPyB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy50b2xlcmFuY2UgfHwgXCIwLjAwMVwiIDogXCIwLjAwMVwiKSArIFwiXFxuXCI7XG5cdFx0XHRcdGFxYXNtICs9IFwiXFxuXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSl7XG5cdFx0YXFhc20gKz0gXCJkZWYgXCIgKyBleHBvcnRBc0dhdGVOYW1lICsgKGFyZ3MgPyBcIihcIiArIGFyZ3MgKyBcIilcIiA6IFwiXCIpICsgXCI6XFxuXCI7XG5cdFx0aW5kZW50RGVwdGgrKztcblx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHRcdGFxYXNtICs9IGluZGVudCArIFwiY2lyY3VpdCA9IFFSb3V0aW5lKClcXG5cIlx0XG5cdH0gZWxzZSB7XG5cdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRhcWFzbSArPSBcImRlZiBvYmplY3RpdmVfZnVuY3Rpb24ocGFyYW1zKTpcXG5cIlxuXHRcdFx0aW5kZW50RGVwdGgrKztcblx0XHRcdGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cdFx0fVxuXHR9XG5cblx0aWYoIWV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRpZihzdWJtb2R1bGVDb3VudCkge1xuXHRcdFx0YXFhc20gKz0gXCJcXG5cIjtcblx0XHRcdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0XHRcdGlmKCFjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXSAmJiBjaXJjdWl0LmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV0pIHtcblx0XHRcdFx0XHRhcWFzbSArPSBpbmRlbnQgKyB1c2VkR2F0ZU5hbWUgKyBcIihcIjtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBjaXJjdWl0Lm51bUNvbHMoKTsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgY2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdHZhciBnYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGdhdGUubmFtZSk7XG5cdFx0XHRcdHZhciBuYW1lID0gXCJcIjtcblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMpe1xuXHRcdFx0XHRcdGdhdGVQYXJhbXMgPSBnYXRlLm9wdGlvbnMucGFyYW1zO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoZ2F0ZS5uYW1lID09IFwibWVhc3VyZVwiKXtcblx0XHRcdFx0XHRpZighaXNFeHBvcnRQeUFRQVNNKSB7XG5cdFx0XHRcdFx0XHRuYW1lICs9IFwiTUVBU1wiXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG5hbWUgKz0gXCJwcm9ncmFtLm1lYXN1cmVcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihnYXRlLm5hbWUgPT0gXCJyZXNldFwiKXtcblx0XHRcdFx0XHRpZighaXNFeHBvcnRQeUFRQVNNKSB7XG5cdFx0XHRcdFx0XHRuYW1lICs9IFwiUkVTRVRcIlxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRuYW1lICs9IFwicHJvZ3JhbS5yZXNldFwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKGdhdGVEZWYgJiYgZ2F0ZURlZi5leHBvcnRJbmZvKXtcblx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8uYXFhc20pe1xuXHRcdFx0XHRcdFx0dmFyIGFxYXNtSW5mbyA9IGdhdGVEZWYuZXhwb3J0SW5mby5hcWFzbTtcblx0XHRcdFx0XHRcdHZhciBhcWFzbUluZm9OYW1lID0gXCJcIjtcblx0XHRcdFx0XHRcdGlmKGFxYXNtSW5mby5uYW1lKXtcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYucGFyYW1zLmxlbmd0aCl7XG5cdFx0XHRcdFx0XHRcdFx0Z2F0ZURlZi5wYXJhbXMubWFwKGZ1bmN0aW9uKHBhcmFtKXtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW3BhcmFtXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1WYWx1ZSA9IG5vZGUudG9TdHJpbmcoe2hhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXJ9KTtcblx0XHRcdFx0XHRcdFx0XHRcdGFxYXNtSW5mb05hbWUgPSBhcWFzbUluZm8ubmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKCFpc0V4cG9ydFB5QVFBU00pe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhcWFzbUluZm9OYW1lICs9IFwiW1wiICsgcGFyYW1WYWx1ZSArIFwiXVwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFxYXNtSW5mb05hbWUgKz0gXCIoXCIgKyBwYXJhbVZhbHVlICsgXCIpXCI7XHRcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGFxYXNtSW5mb05hbWUgKz0gYXFhc21JbmZvLm5hbWU7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZihhcWFzbUluZm8uY29udHJvbGxlZCAmJiBhcWFzbUluZm8uZGFnZ2VyKXtcblx0XHRcdFx0XHRcdFx0XHRpZighaXNFeHBvcnRQeUFRQVNNKXtcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gXCJDVFJMKERBRyhcIiArIGFxYXNtSW5mb05hbWUgKyBcIikpXCI7XG5cdFx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZSArPSBhcWFzbUluZm9OYW1lICsgXCIuZGFnKCkuY3RybCgpXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ZWxzZSBpZihhcWFzbUluZm8uY29udHJvbGxlZCl7XG5cdFx0XHRcdFx0XHRcdFx0aWYoIWlzRXhwb3J0UHlBUUFTTSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IFwiQ1RSTChcIiArIGFxYXNtSW5mb05hbWUgKyBcIilcIjtcblx0XHRcdFx0XHRcdFx0XHR9ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IGFxYXNtSW5mb05hbWUgKyBcIi5jdHJsKClcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1lbHNlIGlmKGFxYXNtSW5mby5kYWdnZXIpe1xuXHRcdFx0XHRcdFx0XHRcdGlmKCFpc0V4cG9ydFB5QVFBU00pe1xuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZSArPSBcIkRBRyhcIiArIGFxYXNtSW5mb05hbWUgKyBcIilcIjtcblx0XHRcdFx0XHRcdFx0XHR9ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IGFxYXNtSW5mb05hbWUgKyBcIi5kYWcoKVwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gYXFhc21JbmZvTmFtZTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9ZWxzZSBpZihhcWFzbUluZm8ubWF0cml4KXtcblx0XHRcdFx0XHRcdFx0aWYoIWlzRXhwb3J0UHlBUUFTTSl7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZSA9IFwiW1wiO1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgayA9IDAgOyBrIDwgYXFhc21JbmZvLm1hdHJpeC5sZW5ndGg7IGsrKyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRyb3cgPSBhcWFzbUluZm8ubWF0cml4W2tdO1xuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZSArPSBcIltcIjtcblx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCByb3cubGVuZ3RoOyBpKyspe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IFwiKFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyb3dfZWxlbWVudCA9IHJvd1tpXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYXFhc21JbmZvLnBhcmFtcyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXFhc21JbmZvLnBhcmFtcy5tYXAoZnVuY3Rpb24ocGFyYW1OYW1lKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbSA9IGdhdGVQYXJhbXNbcGFyYW1OYW1lXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHJvd19lbGVtZW50LnRvU3RyaW5nKCkuaW5kZXhPZihwYXJhbU5hbWUpID4gMCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJvd19lbGVtZW50ID0gcm93X2VsZW1lbnQucmVwbGFjZShwYXJhbU5hbWUsIHBhcmFtKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRldmFsdWF0ZWRfZXhwcmVzc2lvbiA9IG1hdGguZXZhbHVhdGUocm93X2VsZW1lbnQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRtYXRyaXhfZWxlbWVudCA9IG1hdGguY29tcGxleChldmFsdWF0ZWRfZXhwcmVzc2lvbik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1hdHJpeF9lbGVtZW50X3JlYWwgPSBtYXRyaXhfZWxlbWVudFtcInJlXCJdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRtYXRyaXhfZWxlbWVudF9pbSA9IG1hdHJpeF9lbGVtZW50W1wiaW1cIl07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gbWF0cml4X2VsZW1lbnRfcmVhbCArIFwiLCBcIiArIG1hdHJpeF9lbGVtZW50X2ltICsgXCIpXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChpIDwgcm93Lmxlbmd0aCAtIDEpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gXCIgXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gXCJdXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoayA8IGFxYXNtSW5mby5tYXRyaXgubGVuZ3RoIC0gMSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gXCIgXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gXCJdXCI7XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR9ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZSArPSBnYXRlLm5hbWUgKyBcIihcIjtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1Db3VudCA9IDA7XG5cdFx0XHRcdFx0XHRcdFx0Z2F0ZURlZi5wYXJhbXMubWFwKGZ1bmN0aW9uKHBhcmFtTmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihwYXJhbUNvdW50ID4gMCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbcGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1WYWx1ZSA9IG5vZGUudG9TdHJpbmcoe2hhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXJ9KTtcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gcGFyYW1WYWx1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtQ291bnQrKztcblx0XHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gXCIpXCI7XG5cdFx0XHRcdFx0XHRcdH1cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGFxYXNtICs9IGluZGVudCArICBuYW1lO1xuXG5cdFx0XHRcdFx0aWYoIWlzRXhwb3J0UHlBUUFTTSl7XG5cdFx0XHRcdFx0XHRhcWFzbSArPSBcIiBcIjtcblx0XHRcdFx0XHR9ZWxzZSB7XG5cdFx0XHRcdFx0XHRhcWFzbSArPSBcIihcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0XG5cdFx0XHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0XHRcdGZvcih2YXIgdyA9IDA7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKXtcblx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApe1xuXHRcdFx0XHRcdFx0YXFhc20gKz0gIFwiLCBcIjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZighaXNFeHBvcnRQeUFRQVNNKXtcblx0XHRcdFx0XHRcdGFxYXNtICs9IFwicVtcIiArIGdhdGUud2lyZXNbd10gKyBcIl1cIjtcblx0XHRcdFx0XHR9ZWxzZSB7XG5cdFx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdGFxYXNtICs9IHF1Yml0TGV0dGVyKGdhdGUud2lyZXNbd10sIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGFxYXNtICs9IFwicXViaXRzX3JlZ1tcIiArIGdhdGUud2lyZXNbd10gKyBcIl1cIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRhcmdDb3VudCA9IGFyZ0NvdW50ICsgMTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY3JlZyl7XG5cdFx0XHRcdFx0YXFhc20gKz0gXCIsIFwiICsgZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSArIFwiW1wiICsgZ2F0ZS5vcHRpb25zLmNyZWcuYml0ICsgXCJdXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihpc0V4cG9ydFB5QVFBU00pe1xuXHRcdFx0XHRcdGFxYXNtICs9IFwiKVwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YXFhc20gKz0gXCJcXG5cIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0YXFhc20gKz0gaW5kZW50ICsgXCJyZXR1cm4gY2lyY3VpdFxcblxcblwiO1xuXHR9XG5cblx0aWYoIWlzRXhwb3J0UHlBUUFTTSkge1xuXHRcdGFxYXNtICs9IFwiRU5EXCI7XG5cdH0gZWxzZSB7XG5cdFx0aWYoIWV4cG9ydEFzR2F0ZU5hbWUpe1x0XHRcdFxuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgIFwiXFxuXCI7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCJjaXJjdWl0ID0gcHJvZ3JhbS50b19jaXJjKClcXG5cIjtcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcImpvYiA9IGNpcmN1aXQudG9fam9iKG5ic2hvdHM9c2hvdHMsIGFnZ3JlZ2F0ZV9kYXRhPUZhbHNlKVxcblwiO1xuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgIFwicXB1ID0gZ2V0X2RlZmF1bHRfcXB1KClcXG5cIjtcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcImpvYl9yZXN1bHQgPSBxcHUuc3VibWl0KGpvYilcXG5cIjtcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcImNvdW50cyA9IENvdW50ZXIoKVxcblxcblwiO1xuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgIFwiZm9yIHN0YXRlIGluIGpvYl9yZXN1bHQ6XFxuXCI7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCIgICAgc3RyaW5nX3N0YXRlID0gc3RyKHN0YXRlLnN0YXRlKVxcblwiO1xuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgIFwiICAgIHN0cmluZ19zdGF0ZSA9IHN0cmluZ19zdGF0ZVtzdHJpbmdfc3RhdGUuZmluZCgnfCcpICsgMTogc3RyaW5nX3N0YXRlLmZpbmQoJz4nKV1cXG5cIjtcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcIiAgICBzdHJpbmdfc3RhdGUgPSBzdHJpbmdfc3RhdGVbOjotMV1cXG5cIlxuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgIFwiICAgIGNvdW50c1tzdHJpbmdfc3RhdGVdICs9IDFcXG5cXG5cIlxuXG5cdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCIjIENBTENVTEFURSBDT1NUIEhFUkVcXG5cIjtcblx0XG5cdFx0XHRcdHZhciBjb3N0RnVuY3Rpb24gPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uLnB5dGhvbiB8fCBcIlwiIDogXCJcIjtcblx0XHRcdFx0aWYoIWNvc3RGdW5jdGlvbi50cmltKCkpIHtcblx0XHRcdFx0XHRjb3N0RnVuY3Rpb24gPSBcImNvc3QgPSAwXCI7XG5cdFx0XHRcdH1cblx0XG5cdFx0XHRcdGFxYXNtICs9IGFkanVzdElkZW50YXRpb24oY29zdEZ1bmN0aW9uLCBpbmRlbnQpO1xuXHRcblx0XHRcdFx0YXFhc20gKz0gXCJcXG5cIlxuXHRcdFx0XHRhcWFzbSArPSBpbmRlbnQgKyBcInJldHVybiBjb3N0XFxuXCI7XHRcblx0XG5cdFx0XHRcdGluZGVudERlcHRoLS07XG5cdFx0XHRcdGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cdFx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRcdHZhciBnbG9iYWxQYXJhbUxpc3QgPSBcIlwiO1xuXHRcdFx0XHRcdHRoaXMucGFyYW1zLm1hcChmdW5jdGlvbihnbG9iYWxQYXJhbU5hbWUsIGdsb2JhbFBhcmFtSW5kZXgpIHtcblx0XHRcdFx0XHRcdGlmKGdsb2JhbFBhcmFtSW5kZXggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGdsb2JhbFBhcmFtTGlzdCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRnbG9iYWxQYXJhbUxpc3QgKz0gZ2xvYmFsUGFyYW1OYW1lO1xuXHRcdFx0XHRcdH0pO1xuXHRcblx0XHRcdFx0XHRhcWFzbSArPSBcIlxcblwiO1xuXHRcdFx0XHRcdGFxYXNtICs9IFwicGFyYW1zID0gbnAuYXJyYXkoW1wiICsgZ2xvYmFsUGFyYW1MaXN0ICsgXCJdKVxcblwiO1xuXHRcdFx0XHRcdGFxYXNtICs9IFwiXFxuXCI7XG5cdFx0XHRcdFx0YXFhc20gKz0gXCJtaW5pbXVtID0gbWluaW1pemUob2JqZWN0aXZlX2Z1bmN0aW9uLCBwYXJhbXMsIG1ldGhvZD1cXFwiXCIgKyAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLm9wdGltaXplciA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLm9wdGltaXplciA6IFwiUG93ZWxsXCIpICsgXCJcXFwiLCB0b2w9dG9sZXJhbmNlKVxcblwiO1xuXHRcdFx0XHRcdGFxYXNtICs9IFwicHJpbnQoXFxcImNvc3Q6XFxcIiwgbWluaW11bS5mdW4sIFxcXCJwYXJhbXM6XFxcIiwgbWluaW11bS54KVxcblwiO1xuXHRcdFx0XHR9XG5cdFxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCJwcmludChjb3VudHMpXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYoYXNKdXB5dGVyICYmIGlzRXhwb3J0UHlBUUFTTSkge1xuXHRcdHZhciBub3RlYm9vayA9IHtcblx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdGtlcm5lbHNwZWM6IHtcblx0XHRcdFx0XHRkaXNwbGF5X25hbWU6IFwiUHl0aG9uIDNcIixcblx0XHRcdFx0XHRsYW5ndWFnZTogXCJweXRob25cIixcblx0XHRcdFx0XHRuYW1lOiBcInB5dGhvbjNcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0bmJmb3JtYXQ6IDQsXG5cdFx0XHRuYmZvcm1hdF9taW5vcjogMCxcblx0XHRcdGNlbGxzOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjZWxsX3R5cGU6IFwiY29kZVwiLFxuXHRcdFx0XHRcdHNvdXJjZTogYXFhc20sXG5cdFx0XHRcdFx0bWV0YWRhdGE6IHtcblxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b3V0cHV0czogW10sXG5cdFx0XHRcdFx0ZXhlY3V0aW9uX2NvdW50OiBudWxsXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShub3RlYm9vayk7XG5cdH1cblxuXHRyZXR1cm4gYXFhc21cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRBUUFTTSA9IGZ1bmN0aW9uKGNvbW1lbnQsIGRlY29tcG9zZSwgaXNFeHBvcnRQeUFRQVNNLCBleHBvcnRBc0dhdGVOYW1lLCBhc0p1cHl0ZXIsIHNob3RzLCBoeWJyaWQsIGluZGVudERlcHRoKSB7XG5cdHZhciBvcHRpb25zID0ge1xuXHRcdGNvbW1lbnQ6IGNvbW1lbnQsXG5cdFx0ZGVjb21wb3NlOiBkZWNvbXBvc2UsXG5cdFx0YXNKdXB5dGVyOiBhc0p1cHl0ZXIsXG5cdFx0c2hvdHM6IHNob3RzLFxuXHRcdGh5YnJpZDogaHlicmlkXG5cdH07XG5cblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9BUUFTTShvcHRpb25zLCBpc0V4cG9ydFB5QVFBU00sIGV4cG9ydEFzR2F0ZU5hbWUsIGluZGVudERlcHRoKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvUHlBUUFTTSA9IGZ1bmN0aW9uKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9BUUFTTShvcHRpb25zLCB0cnVlLCBleHBvcnRBc0dhdGVOYW1lKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRQeUFRQVNNID0gZnVuY3Rpb24oY29tbWVudCwgZGVjb21wb3NlLCBleHBvcnRBc0dhdGVOYW1lLCBhc0p1cHl0ZXIsIHNob3RzLCBoeWJyaWQpIHtcblx0dmFyIG9wdGlvbnMgPSB7XG5cdFx0Y29tbWVudDogY29tbWVudCxcblx0XHRkZWNvbXBvc2U6IGRlY29tcG9zZSxcblx0XHRhc0p1cHl0ZXI6IGFzSnVweXRlcixcblx0XHRzaG90czogc2hvdHMsXG5cdFx0aHlicmlkOiBoeWJyaWRcblx0fTtcblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9QeUFRQVNNKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvQ2lycSA9IGZ1bmN0aW9uKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGNvbW1lbnQgPSBvcHRpb25zLmNvbW1lbnQ7XG5cdHZhciBkZWNvbXBvc2UgPSBvcHRpb25zLmRlY29tcG9zZTtcblx0dmFyIHZlcnNpb25TdHIgPSBvcHRpb25zLnZlcnNpb25TdHI7XG5cdHZhciBhc0p1cHl0ZXIgPSBvcHRpb25zLmFzSnVweXRlcjtcblx0dmFyIHNob3RzID0gb3B0aW9ucy5zaG90cztcblx0dmFyIGV4cG9ydFRmcSA9IG9wdGlvbnMuZXhwb3J0VGZxO1xuXG5cdHZhciBzZWxmID0gdGhpcztcblxuXHR2YXIgcGxhdGZvcm0gPSBcIlwiO1xuXHRpZihleHBvcnRUZnEpIHtcblx0XHRwbGF0Zm9ybSA9IFwiVEZRXCI7XG5cdH0gZWxzZSB7XG5cdFx0cGxhdGZvcm0gPSBcImNpcnFcIjtcblx0fVxuXG5cdHZhciB2ZXJzaW9uID0gcGFyc2VGbG9hdCh2ZXJzaW9uU3RyIHx8IFwiMC43XCIpO1xuXHRpZihpc05hTih2ZXJzaW9uKSkge1xuXHRcdHZlcnNpb24gPSAwLjc7XG5cdH1cblxuXHRpZih0eXBlb2Ygc2hvdHMgPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdHNob3RzID0gMTAyNDtcblx0fVxuXG5cdC8vIGRlY29tcG9zZSA/XG5cdHZhciBjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmN1aXQubG9hZCh0aGlzLnNhdmUoZGVjb21wb3NlKSk7XG5cblx0dmFyIGNpcnEgPSBcIlwiO1xuXHR2YXIgaW5kZW50ID0gXCJcIjtcblxuXHQvLyBjb21tZW50XG5cdGlmKGNvbW1lbnQpIHtcblx0XHR2YXIgY29tbSA9IChjb21tZW50IHx8IFwiXCIpLnNwbGl0KFwiXFxuXCIpO1xuXHRcdGNvbW0ubWFwKGZ1bmN0aW9uKGNsaW5lKSB7XG5cdFx0XHRpZihjbGluZS5sZW5ndGggPj0gMSAmJiBjbGluZVswXSAhPSBcIiNcIikge1xuXHRcdFx0XHRjaXJxICs9IFwiIyBcIjtcblx0XHRcdH1cblx0XHRcdGNpcnEgKz0gY2xpbmU7XG5cdFx0XHRjaXJxICs9IFwiXFxuXCI7XG5cdFx0fSk7XG5cdH1cblxuXHR2YXIgbWF0aFRvU3RyaW5nSGFuZGxlciA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMpIHtcblx0XHRpZihub2RlLmlzU3ltYm9sTm9kZSkge1xuXHRcdFx0dmFyIG51bXB5cyA9IFtcInBpXCIsIFwic2luXCIsIFwiY29zXCIsIFwidGFuXCIsIFwiYXNpblwiLCBcImFjb3NcIiwgXCJhdGFuXCJdO1xuXHRcdFx0aWYobnVtcHlzLmluZGV4T2Yobm9kZS5uYW1lKSA+PSAwKSB7XG5cdFx0XHRcdHJldHVybiBcIm5wLlwiICsgbm9kZS5uYW1lO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR2YXIgcGFyYW1zVG9BcmcgPSBmdW5jdGlvbihnYXRlTmFtZSwgZ2F0ZVBhcmFtcykge1xuXHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0aWYoZ2F0ZVBhcmFtcykge1xuXHRcdFx0dmFyIGdhdGVEZWYgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0aWYoIWdhdGVEZWYpIHtcblx0XHRcdFx0Z2F0ZURlZiA9IHRoaXMuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihnYXRlRGVmKSB7XG5cdFx0XHRcdHZhciBwYXJhbURlZiA9IGdhdGVEZWYucGFyYW1zIHx8IFtdO1xuXHRcdFx0XHR2YXIgcGFyYW1Db3VudCA9IHBhcmFtRGVmLmxlbmd0aDtcblx0XHRcdFx0aWYocGFyYW1Db3VudCkge1x0XHRcblx0XHRcdFx0XHRmb3IodmFyIHAgPSAwOyBwIDwgcGFyYW1Db3VudDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0Y2lycSArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gcGFyYW1EZWZbcF07XG5cblx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0Ly8gcHJlcGVuZCAnbnAnIHRvIG1hdGggY29uc3RhbnRzXG5cdFx0XHRcdFx0XHRpZihnYXRlUGFyYW1zW3BhcmFtTmFtZV0pIHtcblx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbcGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdGNpcnEgKz0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvLyAtLS1cblxuXHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHZhciBhcmdzID0gXCJcIjtcblx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0LnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdGFyZ3MgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0YXJncyArPSBjaXJjdWl0LnBhcmFtc1tpXTtcblx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0fVxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0Lm51bVF1Yml0czsgaSsrKSB7XG5cdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0YXJncyArPSBcIiwgXCI7XG5cdFx0XHR9XG5cdFx0XHRhcmdzICs9IHF1Yml0TGV0dGVyKGksIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0fVxuXHRcdGNpcnEgKz0gXCJkZWYgXCIgKyBleHBvcnRBc0dhdGVOYW1lICsgKGFyZ3MgPyBcIihcIiArIGFyZ3MgKyBcIilcIiA6IFwiXCIpICsgXCI6XFxuXCI7XG5cdFx0Y2lycSArPSBcIiAgICByZXR1cm4gW1xcblwiO1xuXHRcdGluZGVudCA9IFwiICAgICAgICBcIjtcblx0fSBlbHNlIHtcblx0XHRpZihleHBvcnRUZnEpe1xuXHRcdFx0Y2lycSArPSBcImltcG9ydCB0ZW5zb3JmbG93X3F1YW50dW0gYXMgdGZxXFxuXCJcblx0XHR9XG5cblx0XHRjaXJxICs9IFwiaW1wb3J0IGNpcnFcXG5cIjtcblx0XHRjaXJxICs9IFwiaW1wb3J0IG51bXB5IGFzIG5wXFxuXCI7XG5cdFx0Y2lycSArPSBcImZyb20gZnVuY3Rvb2xzIGltcG9ydCByZWR1Y2VcXG5cIjtcblx0XHRjaXJxICs9IFwiXFxuXCI7XG5cblx0XHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wYXJhbXMgPyB0aGlzLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0aWYodGhpcy5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtTmFtZSA9IHRoaXMucGFyYW1zW2ldO1xuXG5cdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSk7XG5cdFx0XHRcdHZhciBnbG9iYWxQYXJhbVZhbHVlID0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cblx0XHRcdFx0Y2lycSArPSBnbG9iYWxQYXJhbU5hbWUgKyBcIiA9IFwiICsgZ2xvYmFsUGFyYW1WYWx1ZSArIFwiXFxuXCI7XG5cdFx0XHR9XG5cdFx0XHRjaXJxICs9IFwiXFxuXCI7XG5cdFx0fVxuXG5cdFx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdFx0aWYoIWRlY29tcG9zZSkge1xuXHRcdFx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpIHtcblx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRpZighYmFzaWNHYXRlKSB7XG5cdFx0XHRcdFx0dmFyIGN1c3RvbUdhdGUgPSBzZWxmLmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdFx0aWYoY3VzdG9tR2F0ZSkge1xuXHRcdFx0XHRcdFx0dmFyIGN1c3RvbUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0XHRcdGN1c3RvbUNpcmN1aXQubG9hZChjdXN0b21HYXRlKTtcblx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRjb21tZW50OiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRkZWNvbXBvc2U6IHRydWUsXG5cdFx0XHRcdFx0XHRcdHZlcnNpb25TdHI6IHZlcnNpb25TdHJcblx0XHRcdFx0XHRcdH07XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRjaXJxICs9IGN1c3RvbUNpcmN1aXQuZXhwb3J0VG9DaXJxKG5ld09wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0dmFyIGRlZkdhdGVzID0gXCJcIjtcblx0XHR2YXIgdXNlZEdhdGVzID0gY2lyY3VpdC51c2VkR2F0ZXMoKTtcblx0XHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0aWYoYmFzaWNHYXRlKSB7XG5cdFx0XHRcdGlmKGJhc2ljR2F0ZS5leHBvcnRJbmZvICYmIGJhc2ljR2F0ZS5leHBvcnRJbmZvLmNpcnEpIHtcblx0XHRcdFx0XHR2YXIgY2lycUluZm8gPSBiYXNpY0dhdGUuZXhwb3J0SW5mby5jaXJxO1xuXHRcdFx0XHRcdHZhciBpc1JlcGxhY2VkID0gZmFsc2U7XG5cdFx0XHRcdFx0aWYgKGNpcnFJbmZvLnJlcGxhY2VtZW50KSB7XG5cdFx0XHRcdFx0XHR2YXIgcmVwbGFjZW1lbnRHYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGNpcnFJbmZvLnJlcGxhY2VtZW50Lm5hbWUpXG5cdFx0XHRcdFx0XHRjaXJxSW5mbyA9IHJlcGxhY2VtZW50R2F0ZURlZi5leHBvcnRJbmZvLmNpcnFcblx0XHRcdFx0XHRcdGlzUmVwbGFjZWQgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZihjaXJxSW5mby5hcnJheSkge1xuXHRcdFx0XHRcdFx0aWYoIWV4cG9ydFRmcSl7XG5cdFx0XHRcdFx0XHRcdC8vIGRlZmdhdGVcblx0XHRcdFx0XHRcdFx0dmFyIGRlZk5hbWUgPSBpc1JlcGxhY2VkID8gY2lycUluZm8ubmFtZSA6IHVzZWRHYXRlTmFtZVxuXHRcdFx0XHRcdFx0XHRpZiAoZGVmR2F0ZXMuaW5kZXhPZihkZWZOYW1lKSA8IDApIHtcblx0XHRcdFx0XHRcdFx0XHRkZWZHYXRlcyArPSBcImRlZiBcIiArIGRlZk5hbWUgKyBcIihcIjtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1MaXN0ID0gXCJcIjtcblx0XHRcdFx0XHRcdFx0XHRpZihjaXJxSW5mby5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtTGlzdCArPSBcIiwgW1wiO1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2lycUluZm8ucGFyYW1zLm1hcChmdW5jdGlvbihwYXJhbU5hbWUsIHBhcmFtSW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYocGFyYW1JbmRleCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZHYXRlcyArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmR2F0ZXMgKz0gXCJwX1wiICsgcGFyYW1OYW1lO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbUxpc3QgKz0gXCJdXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGRlZkdhdGVzICs9IFwiKTpcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRpZihiYXNpY0dhdGUubWF0cml4ICYmIGJhc2ljR2F0ZS5tYXRyaXgubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZih2ZXJzaW9uIDwgMC43KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHN3aXRjaChiYXNpY0dhdGUubWF0cml4Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgMjogZGVmR2F0ZXMgKz0gXCIgICAgcmV0dXJuIGNpcnEuU2luZ2xlUXViaXRNYXRyaXhHYXRlKG5wLmFycmF5KFwiICsgY2lycUluZm8uYXJyYXkgKyBcIikpXFxuXCI7IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgNDogZGVmR2F0ZXMgKz0gXCIgICAgcmV0dXJuIGNpcnEuVHdvUXViaXRNYXRyaXhHYXRlKG5wLmFycmF5KFwiICsgY2lycUluZm8uYXJyYXkgKyBcIikpXFxuXCI7IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6IGRlZkdhdGVzICs9IFwiICAgICMgRXhwb3J0IHRvIFwiICsgcGxhdGZvcm0gKyBcIiBXQVJOSU5HOiBDYW5ub3QgZGVmaW5lIFwiICsgYmFzaWNHYXRlLm1hdHJpeC5sZW5ndGggKyBcIiB4IFwiICsgYmFzaWNHYXRlLm1hdHJpeC5sZW5ndGggKyBcIiBtYXRyaXggZ2F0ZVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZHYXRlcyArPSBcIiAgICByZXR1cm4gY2lycS5NYXRyaXhHYXRlKG5wLmFycmF5KFwiICsgY2lycUluZm8uYXJyYXkgKyBcIikpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGRlZkdhdGVzICs9IFwiXFxuXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRjaXJxICs9IGRlZkdhdGVzO1xuXG5cdFx0aWYoZXhwb3J0VGZxKXtcblx0XHRcdGNpcnEgKz0gXCJxID0gY2lycS5HcmlkUXViaXQucmVjdCgxLCBcIiArIGNpcmN1aXQubnVtUXViaXRzICsgXCIpXFxuXCI7XG5cdFx0fWVsc2V7XG5cdFx0XHRjaXJxICs9IFwicSA9IFtjaXJxLk5hbWVkUXViaXQoJ3EnICsgc3RyKGkpKSBmb3IgaSBpbiByYW5nZShcIiArIGNpcmN1aXQubnVtUXViaXRzICsgXCIpXVxcblwiO1xuXHRcdH1cblxuXHRcdGNpcnEgKz0gXCJcXG5cIjtcblxuXHRcdGlmKHZlcnNpb24gPCAwLjcpIHtcblx0XHRcdGNpcnEgKz0gXCJjaXJjdWl0ID0gY2lycS5DaXJjdWl0LmZyb21fb3BzKFxcblwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjaXJxICs9IFwiY2lyY3VpdCA9IGNpcnEuQ2lyY3VpdChcXG5cIjtcblx0XHR9XG5cdFx0aW5kZW50ID0gXCIgICAgXCI7XG5cdH1cblx0XG5cdHZhciBudW1Db2xzID0gY2lyY3VpdC5udW1Db2xzKCk7XG5cdHZhciBnYXRlQ291bnRlciA9IDA7XG5cdHZhciBtdWx0aXNob3RLZXlzID0gJyc7XG5cdHZhciB0ZW1wR2F0ZURlZiA9IG51bGw7XG5cdHZhciBub1RmcVN1cHBvcnQgPSBmYWxzZTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0aWYoZ2F0ZUNvdW50ZXIgPiAwKXtcblx0XHRcdFx0XHRjaXJxICs9IFwiLFwiO1xuXHRcdFx0XHRcdGlmKGV4cG9ydFRmcSAmJiBub1RmcVN1cHBvcnQpe1xuXHRcdFx0XHRcdFx0Y2lycSArPSBpbmRlbnQgKyBcIiMgRXhwb3J0IHRvIFRGUSBXQVJOSU5HOiBHYXRlIG5vdCB5ZXQgc3VwcG9ydGVkIGJ5IFRlbnNvcmZsb3cgUXVhbnR1bVwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjaXJxICs9IFwiXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZS5uYW1lKTtcblx0XHRcdFx0dmFyIGdhdGVQYXJhbXMgPSBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcyA/IGdhdGUub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0XHRcdFx0dmFyIGNpcnFJbmZvID0gbnVsbDtcblx0XHRcdFx0dmFyIGlzQ29udHJvbGxlZEdhdGUgPSBmYWxzZTtcblx0XHRcdFx0dmFyIGlzQmFzaWNHYXRlID0gISFjaXJjdWl0LmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXTtcblx0XHRcdFx0aWYoZ2F0ZURlZikge1xuXHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mbykge1xuXHRcdFx0XHRcdFx0XHRub1RmcVN1cHBvcnQgPSBnYXRlRGVmLmV4cG9ydEluZm8uY2lycS5ub3RUZnFTdXBwb3J0ZWQgPyB0cnVlIDogZmFsc2U7XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5jaXJxICYmIGdhdGVEZWYuZXhwb3J0SW5mby5jaXJxLnJlcGxhY2VtZW50KSB7XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5jaXJxLnJlcGxhY2VtZW50LnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdGdhdGVQYXJhbXMgPSBnYXRlRGVmLmV4cG9ydEluZm8uY2lycS5yZXBsYWNlbWVudC5wYXJhbXM7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aXNDb250cm9sbGVkR2F0ZSA9IChnYXRlRGVmLmV4cG9ydEluZm8uY2lycS5yZXBsYWNlbWVudC50eXBlICYmIChnYXRlRGVmLmV4cG9ydEluZm8uY2lycS5yZXBsYWNlbWVudC50eXBlID09IFwiY29udHJvbGxlZFwiKSkgPyB0cnVlIDogZmFsc2U7XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0bm9UZnFTdXBwb3J0ID0gZ2F0ZURlZi5leHBvcnRJbmZvLmNpcnEucmVwbGFjZW1lbnQubm90VGZxU3VwcG9ydGVkID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRnYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGdhdGVEZWYuZXhwb3J0SW5mby5jaXJxLnJlcGxhY2VtZW50Lm5hbWUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y2lycUluZm8gPSAoZ2F0ZURlZiAmJiBnYXRlRGVmLmV4cG9ydEluZm8gJiYgZ2F0ZURlZi5leHBvcnRJbmZvLmNpcnEpID8gZ2F0ZURlZi5leHBvcnRJbmZvLmNpcnEgOiBudWxsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHRnYXRlQ291bnRlcisrO1xuXG5cdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKSB7XG5cdFx0XHRcdFx0XHRjaXJxICs9IGluZGVudCArIFwiIyBFeHBvcnQgdG8gXCIgKyBwbGF0Zm9ybSArXCIgV0FSTklORzogY2xhc3NpY2FsIGNvbnRyb2wgbm90IGltcGxlbWVudGVkIHlldC5cXG5cIjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgdG1wUGFyYW1Db3VudCA9IDA7XG5cdFx0XHRcdFx0dmFyIHBhcmFtU3RyaW5nID0gXCJcIjtcblxuXG5cdFx0XHRcdFx0aWYoZ2F0ZVBhcmFtcykge1xuXHRcdFx0XHRcdFx0dmFyIHBhcmFtRGVmID0gZ2F0ZURlZi5wYXJhbXMgfHwgW107XG5cdFx0XHRcdFx0XHRpZihnYXRlLm5hbWUgPT0gXCJ5eVwiKXtcblx0XHRcdFx0XHRcdFx0cGFyYW1EZWYgPSBbXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHZhciBwYXJhbUNvdW50ID0gcGFyYW1EZWYubGVuZ3RoO1xuXHRcdFx0XHRcdFx0aWYocGFyYW1Db3VudCkge1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIHAgPSAwOyBwIDwgcGFyYW1Db3VudDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYodG1wUGFyYW1Db3VudCA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbVN0cmluZyArPSBcIihcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0aWYodG1wUGFyYW1Db3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtU3RyaW5nICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IHBhcmFtRGVmW3BdO1xuXHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0XHRcdC8vIHByZXBlbmQgJ25wJyB0byBtYXRoIGNvbnN0YW50c1xuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGVQYXJhbXNbcGFyYW1OYW1lXSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbcGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZighbm9kZS5hcmdzKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBwYXJhbSBpbiBnYXRlLm9wdGlvbnMucGFyYW1zKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlID0gbWF0aC5wYXJzZShnYXRlLm9wdGlvbnMucGFyYW1zW3BhcmFtXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtU3RyaW5nICs9IG5vZGUudG9TdHJpbmcoeyBoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyIH0pO1x0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0XHRpZih0bXBQYXJhbUNvdW50ID09IHBhcmFtQ291bnQgLSAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihpc0Jhc2ljR2F0ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbVN0cmluZyArPSBcIilcIjtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtU3RyaW5nICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0dG1wUGFyYW1Db3VudCsrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoY2lycUluZm8pIHtcblx0XHRcdFx0XHRcdHZhciBhZGRCcmFjZXMgPSBjaXJxSW5mby5uYW1lLmluZGV4T2YoXCIqKlwiKSA+PSAwO1xuXG5cdFx0XHRcdFx0XHRjaXJxICs9IGluZGVudDtcblxuXHRcdFx0XHRcdFx0aWYoYWRkQnJhY2VzKSB7XG5cdFx0XHRcdFx0XHRcdGNpcnEgKz0gXCIoXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKCFjaXJxSW5mby5hcnJheSkge1xuXHRcdFx0XHRcdFx0XHRjaXJxICs9IFwiY2lycS5cIjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoZXhwb3J0VGZxICYmIGNpcnFJbmZvLnRmcVJlcGxhY2VtZW50ICYmIGNpcnFJbmZvLnRmcVJlcGxhY2VtZW50Lm5hbWUpe1xuXHRcdFx0XHRcdFx0XHRjaXJxICs9IFwiY2lycS5cIiArIGNpcnFJbmZvLnRmcVJlcGxhY2VtZW50Lm5hbWVcblx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHRjaXJxICs9IGNpcnFJbmZvLm5hbWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGFkZEJyYWNlcykge1xuXHRcdFx0XHRcdFx0XHRjaXJxICs9IFwiKVwiO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNpcnEgKz0gaW5kZW50ICsgZ2F0ZS5uYW1lO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNpcnEgKz0gcGFyYW1TdHJpbmc7XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFxuXG5cdFx0XHRcdFx0aWYoaXNDb250cm9sbGVkR2F0ZSkge1xuXHRcdFx0XHRcdFx0Y2lycSArPSBcIi5jb250cm9sbGVkKCkub24oXCJcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYoaXNCYXNpY0dhdGUpIHtcblx0XHRcdFx0XHRcdFx0Y2lycSArPSBcIihcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdFx0XHRcdGZvcih2YXIgdyA9IDA7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKSB7XG5cdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0Y2lycSArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdGNpcnEgKz0gcXViaXRMZXR0ZXIoZ2F0ZS53aXJlc1t3XSwgY2lyY3VpdC5udW1RdWJpdHMpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y2lycSArPSBcInFbXCIgKyBnYXRlLndpcmVzW3ddICsgXCJdXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGdhdGUubmFtZSA9PSBcIm1lYXN1cmVcIiAmJiBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNyZWcpIHtcblx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRjaXJxICs9IFwiLCBrZXk9XCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNpcnEgKz0gXCInXCIgKyBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lICsgZ2F0ZS5vcHRpb25zLmNyZWcuYml0ICsgXCInXCI7XG5cblx0XHRcdFx0XHRcdGlmKGNvbHVtbiA9PSBudW1Db2xzIC0gMSAmJiB3aXJlID09IHRoaXMubnVtUXViaXRzIC0gMSl7XG5cdFx0XHRcdFx0XHRcdG11bHRpc2hvdEtleXMgKz0gXCInXCIgKyBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lICsgZ2F0ZS5vcHRpb25zLmNyZWcuYml0ICsgXCInXCI7XG5cdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0bXVsdGlzaG90S2V5cyArPSBcIidcIiArIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgKyBnYXRlLm9wdGlvbnMuY3JlZy5iaXQgKyBcIicsIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjaXJxICs9IFwiKVwiO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y2lycSArPSBpbmRlbnQgKyBcIiMgRXhwb3J0IHRvIFwiICsgcGxhdGZvcm0gKyBcIiBXQVJOSU5HOiB1bmtub3duIGdhdGUgXFxcIlwiICsgZ2F0ZS5uYW1lICsgXCJcXFwiLlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYoZXhwb3J0VGZxICYmIG5vVGZxU3VwcG9ydCl7XG5cdFx0Y2lycSArPSBpbmRlbnQgKyBcIiMgRXhwb3J0IHRvIFRGUSBXQVJOSU5HOiBHYXRlIG5vdCB5ZXQgc3VwcG9ydGVkIGJ5IFRlbnNvcmZsb3cgUXVhbnR1XCI7XG5cdH1cblxuXHRpZighZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdGNpcnEgKz0gXCJcXG4pXFxuXCI7XG5cdFx0Y2lycSArPSBcIlxcblwiO1xuXHRcdGlmKCFleHBvcnRUZnEpe1xuXHRcdFx0Y2lycSArPSBcInNpbXVsYXRvciA9IGNpcnEuU2ltdWxhdG9yKClcXG5cIjtcblx0XHRcdGNpcnEgKz0gXCJyZXN1bHQgPSBzaW11bGF0b3IucnVuKGNpcmN1aXQsIHJlcGV0aXRpb25zPVwiKyBzaG90cyArXCIpXFxuXCI7XG5cdFx0XHRjaXJxICs9IFwicmVzdWx0X2RpY3QgPSBkaWN0KHJlc3VsdC5tdWx0aV9tZWFzdXJlbWVudF9oaXN0b2dyYW0oa2V5cz1bXCIgKyBtdWx0aXNob3RLZXlzICsgXCJdKSlcXG5cIjtcblx0XHRcdGNpcnEgKz0gXCJrZXlzID0gbGlzdChtYXAobGFtYmRhIGFycjogcmVkdWNlKGxhbWJkYSB4LCB5OiBzdHIoeCkgKyBzdHIoeSksIGFycls6Oi0xXSksIHJlc3VsdF9kaWN0LmtleXMoKSkpXFxuXCI7XG5cdFx0XHRjaXJxICs9IFwiY291bnRzID0gZGljdCh6aXAoa2V5cyxbdmFsdWUgZm9yIHZhbHVlIGluIHJlc3VsdF9kaWN0LnZhbHVlcygpXSkpXFxuXCI7XG5cdFx0XHRjaXJxICs9IFwicHJpbnQoY291bnRzKVwiO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRjaXJxICs9IFwiXFxuICAgIF1cXG5cIjtcblx0XHRjaXJxICs9IFwiXFxuXCI7XG5cdH1cblxuXHRpZihhc0p1cHl0ZXIpIHtcblx0XHR2YXIgbm90ZWJvb2sgPSB7XG5cdFx0XHRtZXRhZGF0YToge1xuXHRcdFx0XHRrZXJuZWxzcGVjOiB7XG5cdFx0XHRcdFx0ZGlzcGxheV9uYW1lOiBcIlB5dGhvbiAzXCIsXG5cdFx0XHRcdFx0bGFuZ3VhZ2U6IFwicHl0aG9uXCIsXG5cdFx0XHRcdFx0bmFtZTogXCJweXRob24zXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG5iZm9ybWF0OiA0LFxuXHRcdFx0bmJmb3JtYXRfbWlub3I6IDAsXG5cdFx0XHRjZWxsczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2VsbF90eXBlOiBcImNvZGVcIixcblx0XHRcdFx0XHRzb3VyY2U6IGNpcnEsXG5cdFx0XHRcdFx0bWV0YWRhdGE6IHtcblxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b3V0cHV0czogW10sXG5cdFx0XHRcdFx0ZXhlY3V0aW9uX2NvdW50OiBudWxsXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShub3RlYm9vayk7XG5cdH1cblxuXHRyZXR1cm4gY2lycTtcbn1cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvVEZRID0gZnVuY3Rpb24ob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgY29tbWVudCA9IG9wdGlvbnMuY29tbWVudDtcblx0dmFyIGRlY29tcG9zZSA9IG9wdGlvbnMuZGVjb21wb3NlO1xuXHR2YXIgdmVyc2lvblN0ciA9IG9wdGlvbnMudmVyc2lvblN0cjtcblx0dmFyIGFzSnVweXRlciA9IG9wdGlvbnMuYXNKdXB5dGVyO1xuXHR2YXIgc2hvdHMgPSBvcHRpb25zLnNob3RzO1xuXHRcblx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdGlmKHR5cGVvZiBzaG90cyA9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0c2hvdHMgPSAxMDI0O1xuXHR9XG5cblx0Ly8gZGVjb21wb3NlID9cblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZShkZWNvbXBvc2UpKTtcblxuXHR2YXIgdGZxID0gXCJcIjtcblx0dmFyIGluZGVudCA9IFwiXCI7XG5cblx0Ly8gY29tbWVudFxuXHRpZihjb21tZW50KSB7XG5cdFx0dmFyIGNvbW0gPSAoY29tbWVudCB8fCBcIlwiKS5zcGxpdChcIlxcblwiKTtcblx0XHRjb21tLm1hcChmdW5jdGlvbihjbGluZSkge1xuXHRcdFx0aWYoY2xpbmUubGVuZ3RoID49IDEgJiYgY2xpbmVbMF0gIT0gXCIjXCIpIHtcblx0XHRcdFx0Y2lycSArPSBcIiMgXCI7XG5cdFx0XHR9XG5cdFx0XHRjaXJxICs9IGNsaW5lO1xuXHRcdFx0Y2lycSArPSBcIlxcblwiO1xuXHRcdH0pO1xuXHR9XG5cblx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0Y29tbWVudDogY29tbWVudCxcblx0XHRkZWNvbXBvc2U6IGRlY29tcG9zZSxcblx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyLFxuXHRcdGFzSnVweXRlcjogZmFsc2UsXG5cdFx0c2hvdHM6IHNob3RzLFxuXHRcdGV4cG9ydFRmcTogdHJ1ZVxuXHR9O1x0XHRcdFx0XHRcdFxuXHR0ZnEgKz0gY2lyY3VpdC5leHBvcnRUb0NpcnEobmV3T3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSk7XG5cdHRmcSArPSBcInJlc3VsdHNfbGlzdCA9IHRmcS5sYXllcnMuU2FtcGxlKCkoY2lyY3VpdCwgcmVwZXRpdGlvbnM9XCIrc2hvdHMrXCIpLnRvX2xpc3QoKVswXVxcblwiO1xuXHR0ZnEgKz0gXCJyZXN1bHRzID0gbGlzdChtYXAobGFtYmRhIGFycjogcmVkdWNlKGxhbWJkYSB4LCB5OiBzdHIoeCkgKyBzdHIoeSksIGFycls6Oi0xXSksIHJlc3VsdHNfbGlzdCkpXFxuXCI7XG5cdHRmcSArPSBcImNvdW50cyA9IGRpY3QoemlwKHJlc3VsdHMsW3Jlc3VsdHMuY291bnQoaSkgZm9yIGkgaW4gcmVzdWx0c10pKVxcblwiO1xuXHR0ZnEgKz0gXCJwcmludChjb3VudHMpXCI7XG5cblx0aWYoYXNKdXB5dGVyKSB7XG5cdFx0dmFyIG5vdGVib29rID0ge1xuXHRcdFx0bWV0YWRhdGE6IHtcblx0XHRcdFx0a2VybmVsc3BlYzoge1xuXHRcdFx0XHRcdGRpc3BsYXlfbmFtZTogXCJQeXRob24gM1wiLFxuXHRcdFx0XHRcdGxhbmd1YWdlOiBcInB5dGhvblwiLFxuXHRcdFx0XHRcdG5hbWU6IFwicHl0aG9uM1wiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRuYmZvcm1hdDogNCxcblx0XHRcdG5iZm9ybWF0X21pbm9yOiAwLFxuXHRcdFx0Y2VsbHM6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNlbGxfdHlwZTogXCJjb2RlXCIsXG5cdFx0XHRcdFx0c291cmNlOiB0ZnEsXG5cdFx0XHRcdFx0bWV0YWRhdGE6IHtcblxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b3V0cHV0czogW10sXG5cdFx0XHRcdFx0ZXhlY3V0aW9uX2NvdW50OiBudWxsXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShub3RlYm9vayk7XG5cdH1cblxuXHRyZXR1cm4gdGZxO1xufVxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0VG9RU2hhcnAgPSBmdW5jdGlvbihvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBjb21tZW50ID0gb3B0aW9ucy5jb21tZW50O1xuXHR2YXIgZGVjb21wb3NlID0gb3B0aW9ucy5kZWNvbXBvc2U7XG5cdHZhciB2ZXJzaW9uU3RyID0gb3B0aW9ucy52ZXJzaW9uU3RyO1xuXHR2YXIgYXNKdXB5dGVyID0gb3B0aW9ucy5hc0p1cHl0ZXI7XG5cdHZhciBjaXJjdWl0TmFtZSA9IG9wdGlvbnMuY2lyY3VpdE5hbWU7XG5cdHZhciBpbmRlbnREZXB0aCA9IG9wdGlvbnMuaW5kZW50RGVwdGg7XG5cblx0dmFyIHNlbGYgPSB0aGlzO1xuXHRcblx0dmFyIG1hdGhUb1N0cmluZ0hhbmRsZXIgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zKSB7XG5cblx0XHQvLyBzeW1ib2xzXG5cdFx0aWYobm9kZS5pc1N5bWJvbE5vZGUpIHtcblx0XHRcdHZhciBwYXJhbWV0ZXJKc29uID0geyBcInBpXCI6IFwiUEkoKVwiIH07XG5cdFx0XHRpZihwYXJhbWV0ZXJKc29uW25vZGUubmFtZV0pe1xuXHRcdFx0XHRyZXR1cm4gcGFyYW1ldGVySnNvbltub2RlLm5hbWVdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIGNvbnN0YW50XG5cdFx0aWYobm9kZS5pc0NvbnN0YW50Tm9kZSkge1xuXHRcdFx0Ly8gY29udmVydCBpbnRlZ2VyIHRvIGZsb2F0XG5cdFx0XHRpZihOdW1iZXIuaXNJbnRlZ2VyKG5vZGUudmFsdWUpKSB7XG5cdFx0XHRcdHJldHVybiAobm9kZS52YWx1ZSkudG9GaXhlZCgxKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dmFyIG9wZXJhdGlvbk5hbWUgPSBjaXJjdWl0TmFtZSB8fCBcIkNpcmN1aXRcIjtcblxuXHRpbmRlbnREZXB0aCA9IGluZGVudERlcHRoIHx8IDA7XG5cblx0ZnVuY3Rpb24gZ2V0SW5kZW50KGRlcHRoKSB7XG5cdFx0dmFyIGluZGVudCA9IFwiXCI7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGRlcHRoOyBpKyspIHtcblx0XHRcdGluZGVudCArPSBcIiAgICBcIjtcblx0XHR9XG5cdFx0cmV0dXJuIGluZGVudDtcblx0fVxuXG5cdC8vIGRlY29tcG9zZSA/XG5cdHZhciBjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmN1aXQubG9hZCh0aGlzLnNhdmUoZGVjb21wb3NlKSk7XG5cblx0dmFyIHFzaGFycCA9IFwiXCI7XG5cdHZhciBpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXG5cdGlmKCFleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0aWYoIWFzSnVweXRlcikge1xuXHRcdFx0Ly8gb3BlbmluZyBuYW1lc3BhY2Vcblx0XHRcdHFzaGFycCArPSBcIm5hbWVzcGFjZSBRdWFudHVtIHtcXG5cIjtcblx0XHRcdGluZGVudERlcHRoKys7XG5cdFx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHRcdH1cblxuXHRcdHFzaGFycCArPSBpbmRlbnQrXCJvcGVuIE1pY3Jvc29mdC5RdWFudHVtLkludHJpbnNpYztcXG5cIjtcblx0XHRxc2hhcnAgKz0gaW5kZW50K1wib3BlbiBNaWNyb3NvZnQuUXVhbnR1bS5DYW5vbjtcXG5cIjtcblx0XHRxc2hhcnAgKz0gaW5kZW50K1wib3BlbiBNaWNyb3NvZnQuUXVhbnR1bS5NYXRoO1xcblwiO1xuXHRcdHFzaGFycCArPSBpbmRlbnQrXCJvcGVuIE1pY3Jvc29mdC5RdWFudHVtLkNvbnZlcnQ7XFxuXCI7XG5cblx0XHRxc2hhcnAgKz0gXCJcXG5cIjtcblxuXHRcdHFzaGFycCArPSBpbmRlbnQrXCJmdW5jdGlvbiBTZXRCaXRWYWx1ZShyZWc6IEludCwgYml0OiBJbnQsIHZhbHVlOiBCb29sKTogSW50IHtcXG5cIjtcblx0XHRxc2hhcnAgKz0gaW5kZW50K1wiICAgIGlmKHZhbHVlKSB7XFxuXCI7XG5cdFx0cXNoYXJwICs9IGluZGVudCtcIiAgICAgICAgcmV0dXJuIHJlZyB8fHwgKDEgPDw8IGJpdCk7XFxuXCI7XG5cdFx0cXNoYXJwICs9IGluZGVudCtcIiAgICB9IGVsc2Uge1xcblwiO1xuXHRcdHFzaGFycCArPSBpbmRlbnQrXCIgICAgICAgIHJldHVybiByZWcgJiYmIH5+figxIDw8PCBiaXQpO1xcblwiO1xuXHRcdHFzaGFycCArPSBpbmRlbnQrXCIgICAgfVxcblwiO1xuXHRcdHFzaGFycCArPSBpbmRlbnQrXCJ9XFxuXCI7XG5cblx0XHRxc2hhcnAgKz0gaW5kZW50K1wiXFxuXCI7XG5cdH1cblxuXHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0dmFyIGFyZ3MgPSBcIlwiO1xuXHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0YXJncyArPSBcIiwgXCI7XG5cdFx0XHR9XG5cdFx0XHRhcmdzICs9IGNpcmN1aXQucGFyYW1zW2ldO1xuXHRcdFx0YXJnQ291bnQrKztcblx0XHR9XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQubnVtUXViaXRzOyBpKyspIHtcblx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRhcmdzICs9IFwiLCBcIjtcblx0XHRcdH1cblx0XHRcdGFyZ3MgKz0gcXViaXRMZXR0ZXIoaSwgY2lyY3VpdC5udW1RdWJpdHMpICsgXCI6IFF1Yml0XCI7XG5cdFx0XHRhcmdDb3VudCsrO1xuXHRcdH1cblx0XHRxc2hhcnAgKz0gaW5kZW50ICsgXCJvcGVyYXRpb24gXCIgKyBleHBvcnRBc0dhdGVOYW1lICsgKGFyZ3MgPyBcIihcIiArIGFyZ3MgKyBcIilcIiA6IFwiXCIpO1xuXHRcdC8vIHFzaGFycCArPSBcIiAgICByZXR1cm4gW1xcblwiO1xuXHRcdC8vIGluZGVudCA9IFwiICAgICAgICBcIjtcblx0fSBlbHNle1xuXHRcdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHRcdGlmKCFkZWNvbXBvc2UpIHtcblx0XHRcdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0XHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0aWYoIWJhc2ljR2F0ZSkge1xuXHRcdFx0XHRcdHZhciBjdXN0b21HYXRlID0gc2VsZi5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRcdGlmKGN1c3RvbUdhdGUpIHtcblx0XHRcdFx0XHRcdHZhciBjdXN0b21DaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRjdXN0b21DaXJjdWl0LmxvYWQoY3VzdG9tR2F0ZSk7XG5cdFx0XHRcdFx0XHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRcdFx0XHRcdFx0Y29tbWVudDogXCJcIixcblx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyLFxuXHRcdFx0XHRcdFx0XHRhc0p1cHl0ZXI6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRjaXJjdWl0TmFtZTogbnVsbCxcblx0XHRcdFx0XHRcdFx0aW5kZW50RGVwdGg6IGluZGVudERlcHRoXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0cXNoYXJwICs9IGN1c3RvbUNpcmN1aXQuZXhwb3J0VG9RU2hhcnAobmV3T3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRxc2hhcnAgKz0gaW5kZW50K1wib3BlcmF0aW9uIFwiICsgb3BlcmF0aW9uTmFtZSArIFwiKClcIjtcblx0fVxuXG5cdGluZGVudERlcHRoKys7XG5cdGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cblx0dmFyIGNyZWdDb3VudCA9IDA7XG5cdGZvcihjcmVnTmFtZSBpbiBjaXJjdWl0LmNyZWdzKSB7XG5cdFx0Y3JlZ0NvdW50Kys7XG5cdH1cblxuXHR2YXIgY3JlZ0xpc3QgPSBcIlwiO1xuXHRpZihjcmVnQ291bnQpIHtcblx0XHRxc2hhcnAgKz0gXCIgOiAoXCJcblx0XHRmb3IoY3JlZ05hbWUgaW4gY2lyY3VpdC5jcmVncykge1xuXHRcdFx0aWYoY3JlZ0xpc3QpIHtcblx0XHRcdFx0cXNoYXJwICs9IFwiLCBcIjtcblx0XHRcdFx0Y3JlZ0xpc3QgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0cXNoYXJwICs9IFwiSW50XCI7XG5cdFx0XHRjcmVnTGlzdCArPSBjcmVnTmFtZTtcblx0XHR9XG5cdFx0cXNoYXJwICs9IFwiKVwiO1xuXHR9IGVsc2Uge1xuXHRcdHFzaGFycCArPSBcIiA6IFVuaXRcIjtcblx0fVxuXHRxc2hhcnAgKz0gXCIge1xcblwiO1xuXHQvLyAtLS1cblxuXHQvLyBkZWNsYXJlIGNyZWdzXG5cdGlmKGNyZWdDb3VudCkge1xuXHRcdGZvcihjcmVnTmFtZSBpbiBjaXJjdWl0LmNyZWdzKSB7XG5cdFx0XHRxc2hhcnAgKz0gaW5kZW50ICsgXCJtdXRhYmxlIFwiICsgY3JlZ05hbWUgKyBcIiA9IDA7XFxuXCI7XG5cdFx0fVxuXHR9XG5cblx0cXJlZ19uYW1lID0gXCJxdWJpdHNcIjtcblxuXHRpZighZXhwb3J0QXNHYXRlTmFtZSl7XG5cdFx0cXNoYXJwICs9IGluZGVudCtcInVzaW5nKFwiO1xuXHRcdHFzaGFycCArPSBxcmVnX25hbWUgKyBcIiA9IFF1Yml0W1wiICsgY2lyY3VpdC5udW1RdWJpdHMgKyBcIl1cIjtcblx0XHRxc2hhcnAgKz0gXCIpIHtcXG5cIjtcblx0XHRpbmRlbnREZXB0aCsrO1xuXHRcdGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cdH1cblxuXHR2YXIgZGVmR2F0ZXMgPSBcIlwiO1xuXHR2YXIgdXNlZEdhdGVzID0gY2lyY3VpdC51c2VkR2F0ZXMoKTtcblxuXHR2YXIgbnVtQ29scyA9IGNpcmN1aXQubnVtQ29scygpO1xuXHR2YXIgZ2F0ZUNvdW50ZXIgPSAwO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGNpcmN1aXQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHR2YXIgZ2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihnYXRlLm5hbWUpO1xuXG5cdFx0XHRcdGlmKCFnYXRlRGVmKSB7XG5cdFx0XHRcdFx0Z2F0ZURlZiA9IGNpcmN1aXQuY3VzdG9tR2F0ZXNbZ2F0ZS5uYW1lXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBnYXRlUGFyYW1zID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMgPyBnYXRlLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0XHRcdHZhciBxc2hhcnBJbmZvID0gbnVsbDtcblx0XHRcdFx0dmFyIGlzQ29udHJvbGxlZEdhdGUgPSBmYWxzZTtcblx0XHRcdFx0dmFyIHdpcmVJZHggPSAwO1xuXHRcdFx0XHRpZihnYXRlRGVmKSB7XG5cdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvKSB7XG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8ucXNoYXJwICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xc2hhcnAucmVwbGFjZW1lbnQpIHtcblx0XHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLnFzaGFycC5yZXBsYWNlbWVudC5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRnYXRlUGFyYW1zID0gZ2F0ZURlZi5leHBvcnRJbmZvLnFzaGFycC5yZXBsYWNlbWVudC5wYXJhbXM7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Z2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihnYXRlRGVmLmV4cG9ydEluZm8ucXNoYXJwLnJlcGxhY2VtZW50Lm5hbWUpO1xuXHRcdFx0XHRcdFx0fVx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0cXNoYXJwSW5mbyA9IChnYXRlRGVmICYmIGdhdGVEZWYuZXhwb3J0SW5mbyAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucXNoYXJwKSA/IGdhdGVEZWYuZXhwb3J0SW5mby5xc2hhcnAgOiBudWxsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGdhdGVEZWYuZHJhd2luZ0luZm8gJiYgZ2F0ZURlZi5kcmF3aW5nSW5mby5yb290ICYmIGdhdGUubmFtZSAhPSBcImN4XCIgJiYgZ2F0ZS5uYW1lICE9IFwiY2N4XCIpIHtcblx0XHRcdFx0XHRcdGlzQ29udHJvbGxlZEdhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblxuXG5cdFx0XHRcdFx0dmFyIHRtcFBhcmFtQ291bnQgPSAwO1xuXHRcdFx0XHRcdHZhciBwYXJhbVN0cmluZyA9IFwiXCI7XG5cdFx0XHRcdFx0aWYoZ2F0ZVBhcmFtcykge1xuXHRcdFx0XHRcdFx0dmFyIHBhcmFtRGVmID0gZ2F0ZURlZi5wYXJhbXMgfHwgW107XG5cdFx0XHRcdFx0XHR2YXIgcGFyYW1Db3VudCA9IHBhcmFtRGVmLmxlbmd0aDtcblx0XHRcdFx0XHRcdGlmKHBhcmFtQ291bnQpIHtcdFx0XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgcCA9IDA7IHAgPCBwYXJhbUNvdW50OyBwKyspIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBpZih0bXBQYXJhbUNvdW50ID09IDApIHtcblx0XHRcdFx0XHRcdFx0XHQvLyBcdHBhcmFtU3RyaW5nICs9IFwiKFwiO1xuXHRcdFx0XHRcdFx0XHRcdC8vIH1cblx0XHRcdFx0XHRcdFx0XHRpZih0bXBQYXJhbUNvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1TdHJpbmcgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gcGFyYW1EZWZbcF07XHRcblxuXHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0XHRcdC8vIHByZXBlbmQgJ25wJyB0byBtYXRoIGNvbnN0YW50c1xuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGVQYXJhbXNbcGFyYW1OYW1lXSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbcGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbVN0cmluZyArPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0Ly8gLS0tXG5cblx0XHRcdFx0XHRcdFx0XHQvLyBpZih0bXBQYXJhbUNvdW50ID09IHBhcmFtQ291bnQgLSAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gXHRwYXJhbVN0cmluZyArPSBcIilcIjtcblx0XHRcdFx0XHRcdFx0XHQvLyB9XG5cdFx0XHRcdFx0XHRcdFx0dG1wUGFyYW1Db3VudCsrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdGlmKGdhdGUubmFtZSA9PSBcIm1lYXN1cmVcIikge1xuXHRcdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jcmVnKSB7XG5cdFx0XHRcdFx0XHRcdHFzaGFycCArPSBpbmRlbnQgKyBcInNldCBcIiArIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgKyBcIiA9IFNldEJpdFZhbHVlKFwiICsgZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSArIFwiLCBcIiArIGdhdGUub3B0aW9ucy5jcmVnLmJpdCArIFwiLCBSZXN1bHRBc0Jvb2woTShcIjtcblx0XHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdHFzaGFycCArPSBxdWJpdExldHRlcihnYXRlLndpcmVzWzBdLCBjaXJjdWl0Lm51bVF1Yml0cykgKyBcIikpKTtcXG5cIjtcblx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHFzaGFycCArPSBxcmVnX25hbWUgKyBcIltcIiArIGdhdGUud2lyZXNbMF0gKyBcIl0pKSk7XFxuXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHFzaGFycCArPSBpbmRlbnQgKyBcIi8vIEV4cG9ydCB0byBxc2hhcnAgV0FSTklORzogbWlzc2luZyBkZXN0aW5hdGlvbiByZWdpc3RlclxcblwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRxc2hhcnAgKz0gaW5kZW50O1xuXG5cdFx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpIHtcblx0XHRcdFx0XHRcdFx0cXNoYXJwICs9IFwiaWYoXCIgKyBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcgKyBcIiA9PSBcIiArIGdhdGUub3B0aW9ucy5jb25kaXRpb24udmFsdWUgKyBcIikge1xcblwiO1xuXHRcdFx0XHRcdFx0XHRpbmRlbnREZXB0aCsrO1xuXHRcdFx0XHRcdFx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gaW5kZW50O1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihxc2hhcnBJbmZvKSB7XG5cdFx0XHRcdFx0XHRcdHFzaGFycCArPSBxc2hhcnBJbmZvLm5hbWUgKyBcIihcIjtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHFzaGFycCArPSBnYXRlLm5hbWUgKyBcIihcIjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoaXNDb250cm9sbGVkR2F0ZSkge1xuXHRcdFx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0cXNoYXJwICs9IFwiW1wiICsgcXViaXRMZXR0ZXIoZ2F0ZS53aXJlc1swXSwgY2lyY3VpdC5udW1RdWJpdHMpICsgXCJdLCAoXCI7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cXNoYXJwICs9IFwiW1wiICsgcXJlZ19uYW1lICsgXCJbXCIgKyBnYXRlLndpcmVzWzBdICsgXCJdXSwgKFwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHdpcmVJZHggPSAxO1xuXHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRcdHdpcmVJZHggPSAwO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihwYXJhbVN0cmluZyl7XG5cdFx0XHRcdFx0XHRcdHFzaGFycCArPSBwYXJhbVN0cmluZyArIFwiLCBcIjtcblx0XHRcdFx0XHRcdH0gXG5cdFx0XHRcdFx0XHQvLyBlbHNlIHtcblx0XHRcdFx0XHRcdC8vIFx0cXNoYXJwICs9IHBhcmFtU3RyaW5nICsgXCIoXCI7XG5cdFx0XHRcdFx0XHQvLyB9XG5cdFx0XHRcdFx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdFx0XHRcdFx0Zm9yKHZhciB3ID0gd2lyZUlkeDsgdyA8IGdhdGUud2lyZXMubGVuZ3RoOyB3KyspIHtcblx0XHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0cXNoYXJwICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0cXNoYXJwICs9IHF1Yml0TGV0dGVyKGdhdGUud2lyZXNbd10sIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHFzaGFycCArPSBxcmVnX25hbWUgKyBcIltcIiArIGdhdGUud2lyZXNbd10gKyBcIl1cIjtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGlzQ29udHJvbGxlZEdhdGUpe1xuXHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gXCIpXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHFzaGFycCArPSBcIik7XFxuXCI7XG5cblx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZykge1xuXHRcdFx0XHRcdFx0XHQvLyBlbmQgaWZcblx0XHRcdFx0XHRcdFx0aW5kZW50RGVwdGgtLTtcblx0XHRcdFx0XHRcdFx0aW5kZW50ID0gZ2V0SW5kZW50KGluZGVudERlcHRoKTtcblx0XHRcdFx0XHRcdFx0cXNoYXJwICs9IGluZGVudCArIFwifVxcblwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRpZighZXhwb3J0QXNHYXRlTmFtZSl7XG5cdFx0cXNoYXJwICs9IGluZGVudCArIFwiUmVzZXRBbGwoXCIgKyBxcmVnX25hbWUgKyBcIik7XFxuXCI7XG5cblx0XHRpbmRlbnREZXB0aC0tO1xuXHRcdGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cblx0XHRxc2hhcnAgKz0gaW5kZW50ICsgXCJ9XFxuXCI7XG5cdH1cblxuXHRpZihjcmVnQ291bnQpIHtcblx0XHRxc2hhcnAgKz0gaW5kZW50ICsgXCJyZXR1cm4gKFwiICsgY3JlZ0xpc3QgKyBcIik7XFxuXCI7XG5cdH1cblxuXHRpbmRlbnREZXB0aC0tO1xuXHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHRxc2hhcnAgKz0gaW5kZW50ICsgXCJ9XFxuXCI7XG5cblx0aWYoIWV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRpZighYXNKdXB5dGVyKSB7XG5cdFx0XHQvLyBjbG9zaW5nIG5hbWVzcGFjZVxuXHRcdFx0cXNoYXJwICs9IFwifVxcblwiO1xuXG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHFzaGFycCArPSBcIlxcblwiO1xuXHR9XG5cblx0aWYoYXNKdXB5dGVyKSB7XG5cdFx0dmFyIG5vdGVib29rID0ge1xuXHRcdFx0XCJtZXRhZGF0YVwiOiB7XG5cdFx0XHRcdFwia2VybmVsc3BlY1wiOiB7XG5cdFx0XHRcdFx0XCJkaXNwbGF5X25hbWVcIjogXCJRI1wiLFxuXHRcdFx0XHRcdFwibGFuZ3VhZ2VcIjogXCJxc2hhcnBcIixcblx0XHRcdFx0XHRcIm5hbWVcIjogXCJpcXNoYXJwXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJsYW5ndWFnZV9pbmZvXCI6IHtcblx0XHRcdFx0XHRcIm5hbWVcIjogXCJcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0bmJmb3JtYXQ6IDQsXG5cdFx0XHRuYmZvcm1hdF9taW5vcjogMCxcblx0XHRcdGNlbGxzOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjZWxsX3R5cGU6IFwiY29kZVwiLFxuXHRcdFx0XHRcdHNvdXJjZTogcXNoYXJwLFxuXHRcdFx0XHRcdG1ldGFkYXRhOiB7XG5cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG91dHB1dHM6IFtdLFxuXHRcdFx0XHRcdGV4ZWN1dGlvbl9jb3VudDogbnVsbFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2VsbF90eXBlOiBcImNvZGVcIixcblx0XHRcdFx0XHRzb3VyY2U6IFwiJXNpbXVsYXRlIFwiICsgb3BlcmF0aW9uTmFtZSxcblx0XHRcdFx0XHRtZXRhZGF0YToge1xuXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRvdXRwdXRzOiBbXSxcblx0XHRcdFx0XHRleGVjdXRpb25fY291bnQ6IG51bGxcblx0XHRcdFx0fVxuXHRcdFx0XVxuXHRcdH07XG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KG5vdGVib29rKTtcblx0fVxuXG5cdHJldHVybiBxc2hhcnA7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0VG9CcmFrZXQgPSBmdW5jdGlvbihvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBjb21tZW50ID0gb3B0aW9ucy5jb21tZW50O1xuXHR2YXIgZGVjb21wb3NlID0gb3B0aW9ucy5kZWNvbXBvc2U7XG5cdHZhciB2ZXJzaW9uU3RyID0gb3B0aW9ucy52ZXJzaW9uU3RyO1xuXHR2YXIgYXNKdXB5dGVyID0gb3B0aW9ucy5hc0p1cHl0ZXI7XG5cdHZhciBzaG90cyA9IG9wdGlvbnMuc2hvdHM7XG5cdHZhciBoeWJyaWQgPSBvcHRpb25zLmh5YnJpZDtcblx0dmFyIGluZGVudERlcHRoID0gb3B0aW9ucy5pbmRlbnREZXB0aDtcblxuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblxuXHRzaG90cyA9IHNob3RzIHx8IDEwMjQ7XG5cblx0dmFyIHZlcnNpb24gPSBwYXJzZUZsb2F0KHZlcnNpb25TdHIgfHwgXCIxLjBcIik7XG5cdGlmKGlzTmFOKHZlcnNpb24pKSB7XG5cdFx0dmVyc2lvbiA9IDEuMDtcblx0fVxuXG5cdGlmKHR5cGVvZiBoeWJyaWQgPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdGh5YnJpZCA9IHRoaXMub3B0aW9ucyA/ICEhdGhpcy5vcHRpb25zLmh5YnJpZCA6IGZhbHNlO1xuXHR9XG5cblx0Ly8gZGVjb21wb3NlID9cblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZShkZWNvbXBvc2UpKTtcblxuXHR2YXIgbWF0aFRvU3RyaW5nSGFuZGxlciA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMpIHtcblx0XHRpZihub2RlLmlzU3ltYm9sTm9kZSkge1xuXHRcdFx0dmFyIG51bXB5cyA9IFtcInBpXCIsIFwic2luXCIsIFwiY29zXCIsIFwidGFuXCIsIFwiYXNpblwiLCBcImFjb3NcIiwgXCJhdGFuXCJdO1xuXHRcdFx0aWYobnVtcHlzLmluZGV4T2Yobm9kZS5uYW1lKSA+PSAwKSB7XG5cdFx0XHRcdHJldHVybiBcIm5wLlwiICsgbm9kZS5uYW1lO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihzZWxmLnBhcmFtcy5pbmRleE9mKG5vZGUubmFtZSkgPj0gMCAmJiBoeWJyaWQpIHtcblx0XHRcdFx0cmV0dXJuIFwicGFyYW1zW1wiICsgc2VsZi5wYXJhbXMuaW5kZXhPZihub2RlLm5hbWUpICsgXCJdXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBhZGp1c3RJZGVudGF0aW9uID0gZnVuY3Rpb24oYWRkU3RyLCBpZGVudCkge1xuXHRcdHZhciBzdHIgPSBcIlwiO1xuXG5cdFx0Ly8gYWRkIHVzZXIgZGVmaW5lZCBjb3N0IGZ1bmN0aW9uIHdpdGggcHJvcGVyIGlkZW50YXRpb25cblx0XHR2YXIgY2ZMaW5lcyA9IGFkZFN0ci5zcGxpdChcIlxcblwiKTtcblx0XHR2YXIgbWluSWRlbnQgPSAtMTtcblx0XHRjZkxpbmVzLm1hcChmdW5jdGlvbihjZkxpbmUpIHtcblx0XHRcdHZhciB0bXBJZGVudCA9IGNmTGluZS5zZWFyY2goL1xcUy8pO1xuXHRcdFx0aWYodG1wSWRlbnQgPj0gMCAmJiAobWluSWRlbnQgPCAwIHx8IHRtcElkZW50IDwgbWluSWRlbnQpKSB7XG5cdFx0XHRcdG1pbklkZW50ID0gdG1wSWRlbnQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRpZihtaW5JZGVudCA8IDApIHtcblx0XHRcdG1pbklkZW50ID0gMDtcblx0XHR9XG5cblx0XHR2YXIgYWRkSWRlbnQgPSBcIlwiO1xuXHRcdGlmKG1pbklkZW50IDwgaWRlbnQubGVuZ3RoKSB7XG5cdFx0XHRmb3IodmFyIHRtcCA9IDA7IHRtcCA8IChpZGVudC5sZW5ndGggLSBtaW5JZGVudCk7IHRtcCsrKSB7XG5cdFx0XHRcdGFkZElkZW50ICs9IFwiIFwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNmTGluZXMubWFwKGZ1bmN0aW9uKGNmTGluZSkge1xuXHRcdFx0c3RyICs9IGFkZElkZW50ICsgY2ZMaW5lICsgXCJcXG5cIjtcblx0XHR9KTtcblxuXHRcdHJldHVybiBzdHI7XG5cdH07XG5cblx0dmFyIGdldEluZGVudCA9IGZ1bmN0aW9uKGRlcHRoKSB7XG5cdFx0dmFyIGluZGVudCA9IFwiXCI7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGRlcHRoOyBpKyspIHtcblx0XHRcdGluZGVudCArPSBcIiAgICBcIjtcblx0XHR9XG5cdFx0cmV0dXJuIGluZGVudDtcblx0fVxuXG5cdGluZGVudERlcHRoID0gaW5kZW50RGVwdGggfHwgMDtcblxuXHR2YXIgYnJha2V0ID0gXCJcIjtcblx0dmFyIGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cblx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdHZhciBpc1N1Yk1vZHVsZSA9IGZhbHNlO1xuXHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSl7XG5cdFx0aWYoIWNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdKXtcblx0XHRcdGlzU3ViTW9kdWxlID0gdHJ1ZTtcblx0XHR9XG5cdH0pO1xuXG5cdHZhciBhcmdzID0gXCJcIjtcblx0dmFyIGFyZ0NvdW50ID0gMDtcblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0Lm51bVF1Yml0czsgaSsrKSB7XG5cdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0YXJncyArPSBcIiwgXCI7XG5cdFx0XHR9XG5cdFx0XHRhcmdzICs9IHF1Yml0TGV0dGVyKGksIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0fVxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0LnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdGFyZ3MgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0YXJncyArPSBjaXJjdWl0LnBhcmFtc1tpXTtcblx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGJyYWtldCArPSBpbmRlbnQgKyBcImltcG9ydCBudW1weSBhcyBucFxcblwiO1xuXHRcdGJyYWtldCArPSBpbmRlbnQgKyBcImZyb20gYnJha2V0LmRldmljZXMgaW1wb3J0IExvY2FsU2ltdWxhdG9yXFxuXCI7XG5cdFx0YnJha2V0ICs9IGluZGVudCArIFwiZnJvbSBicmFrZXQuY2lyY3VpdHMgaW1wb3J0IENpcmN1aXRcXG5cIjtcblx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyXFxuXCI7XG5cblx0XHRpZihoeWJyaWQpIHtcblx0XHRcdGJyYWtldCArPSBpbmRlbnQgKyBcImZyb20gc2NpcHkub3B0aW1pemUgaW1wb3J0IG1pbmltaXplXFxuXCI7XG5cdFx0fVxuXG5cdFx0YnJha2V0ICs9IFwiXFxuXCI7XG5cblx0XHRpZihzaG90cykge1xuXHRcdFx0YnJha2V0ICs9IGluZGVudCArIFwic2hvdHMgPSBcIiArIHNob3RzICsgXCJcXG5cIjtcblx0XHRcdGJyYWtldCArPSBcIlxcblwiO1xuXHRcdH1cblxuXHRcdHZhciBnbG9iYWxQYXJhbXMgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnBhcmFtcyA/IHRoaXMub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0XHRpZih0aGlzLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHR2YXIgZ2xvYmFsUGFyYW1OYW1lID0gdGhpcy5wYXJhbXNbaV07XG5cblx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdsb2JhbFBhcmFtc1tnbG9iYWxQYXJhbU5hbWVdKTtcblx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtVmFsdWUgPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblxuXHRcdFx0XHRicmFrZXQgKz0gZ2xvYmFsUGFyYW1OYW1lICsgXCIgPSBcIiArIGdsb2JhbFBhcmFtVmFsdWUgKyBcIlxcblwiO1xuXHRcdFx0fVxuXHRcdFx0YnJha2V0ICs9IFwiXFxuXCI7XG5cdFx0fVxuXG5cdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJ0b2xlcmFuY2UgPSBcIiArICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMudG9sZXJhbmNlID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMudG9sZXJhbmNlIHx8IFwiMC4wMDFcIiA6IFwiMC4wMDFcIikgKyBcIlxcblwiO1xuXHRcdFx0YnJha2V0ICs9IFwiXFxuXCI7XG5cdFx0fVxuXHR9XG5cblx0dmFyIHVuc3VwcG9ydGVkQnJha2V0SW5mbyA9IG51bGw7XG5cdHZhciBnYXRlVW5pdGFyeSA9IG51bGw7XG5cdHZhciBzdWJtb2R1bGVDb3VudCA9IDA7XG5cdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdGlmKGJhc2ljR2F0ZSkge1xuXHRcdFx0aWYoIWRlY29tcG9zZSl7XG5cdFx0XHRcdGlmKGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdLmV4cG9ydEluZm8uYnJha2V0ICYmIGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdLmV4cG9ydEluZm8uYnJha2V0LmFycmF5KSB7XG5cdFx0XHRcdFx0dW5zdXBwb3J0ZWRCcmFrZXRJbmZvID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV0uZXhwb3J0SW5mby5icmFrZXQ7XG5cdFxuXHRcdFx0XHRcdGlmKHVuc3VwcG9ydGVkQnJha2V0SW5mby5uYW1lID09IFwidW5pdGFyeVwiKXtcblx0XHRcdFx0XHRcdGdhdGVVbml0YXJ5ID0gdXNlZEdhdGVOYW1lICsgXCJfdW5pdGFyeVwiO1xuXHRcdFx0XHRcdFx0YnJha2V0ICs9IGluZGVudCArIFwiZGVmIFwiICsgZ2F0ZVVuaXRhcnkgK1wiKFwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHRpZih1bnN1cHBvcnRlZEJyYWtldEluZm8ucGFyYW1zICYmIHVuc3VwcG9ydGVkQnJha2V0SW5mby5wYXJhbXMubGVuZ3RoKXtcblx0XHRcdFx0XHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0XHRcdFx0XHR1bnN1cHBvcnRlZEJyYWtldEluZm8ucGFyYW1zLm1hcChmdW5jdGlvbihwYXJhbU5hbWUpe1xuXHRcdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRicmFrZXQgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGJyYWtldCArPSBpbmRlbnQgKyBcInBfXCIgKyBwYXJhbU5hbWU7XG5cdFx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcblx0XHRcdFx0XHRicmFrZXQgKz0gXCIpOlxcblwiO1xuXHRcdFx0XHRcdGJyYWtldCArPSBnZXRJbmRlbnQoaW5kZW50RGVwdGggKyAxKSArIFwicmV0dXJuIG5wLmFycmF5KFwiICsgIHVuc3VwcG9ydGVkQnJha2V0SW5mby5hcnJheSArIFwiKTtcXG5cXG5cIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHNlbGYuY3VzdG9tR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdGlmKGN1c3RvbUdhdGUpIHtcblx0XHRcdFx0dmFyIGN1c3RvbUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0Y3VzdG9tQ2lyY3VpdC5sb2FkKGN1c3RvbUdhdGUpO1xuXHRcdFx0XHRicmFrZXQgKz0gY3VzdG9tQ2lyY3VpdC5leHBvcnRCcmFrZXQoXCJcIiwgdHJ1ZSwgdXNlZEdhdGVOYW1lLCB2ZXJzaW9uU3RyLCBmYWxzZSwgbnVsbCwgZmFsc2UsIGluZGVudERlcHRoKTtcblx0XHRcdFx0c3VibW9kdWxlQ291bnQrKztcblx0XHRcdH1cblx0XHR9XG5cdH0pO1x0XG5cdFx0XHRcdFx0XG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpe1xuXHRcdGJyYWtldCArPSBcImRlZiBcIiArIGV4cG9ydEFzR2F0ZU5hbWUgKyAoYXJncyA/IFwiKFwiICsgYXJncyArIFwiKVwiIDogXCJcIikgKyBcIjpcXG5cIjtcblx0XHRpbmRlbnREZXB0aCsrO1xuXHRcdGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cdH0gZWxzZSB7XG5cdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRicmFrZXQgKz0gXCJkZWYgb2JqZWN0aXZlX2Z1bmN0aW9uKHBhcmFtcyk6XFxuXCJcblx0XHRcdGluZGVudERlcHRoKys7XG5cdFx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHRcdH1cblx0fVxuXG5cdGJyYWtldCArPSBpbmRlbnQgKyBcImNpcmN1aXQgPSBDaXJjdWl0KClcXG5cIjtcblxuXHRpZighZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdGlmKHN1Ym1vZHVsZUNvdW50KSB7XG5cdFx0XHRicmFrZXQgKz0gXCJcXG5cIjtcblx0XHRcdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0XHRcdGlmKCFjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXSAmJiBjaXJjdWl0LmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV0pIHtcblx0XHRcdFx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJjaXJjdWl0LnJlZ2lzdGVyX3N1YnJvdXRpbmUoXCIgKyB1c2VkR2F0ZU5hbWUgKyBcIilcXG5cIjtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRicmFrZXQgKz0gXCJcXG5cIjtcblx0XHR9XG5cdH1cblxuXHR2YXIgbnVtQ29scyA9IGNpcmN1aXQubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGNpcmN1aXQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHR2YXIgZ2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihnYXRlLm5hbWUpO1xuXHRcdFx0XHR2YXIgZ2F0ZVBhcmFtcyA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zID8gZ2F0ZS5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXHRcdFx0XHR2YXIgcGFyYW1EZWYgPSBnYXRlRGVmLnBhcmFtcyB8fCBbXTtcblx0XHRcdFx0dmFyIGJyYWtldEluZm8gPSBudWxsO1xuXG5cdFx0XHRcdHZhciBnYXRlTmFtZSA9IGdhdGUubmFtZTtcblx0XHRcdFx0dmFyIHBhcmFtU3RyaW5nID0gXCJcIjtcblx0XHRcdFx0dmFyIGlzVW5pdGFyeSA9IGZhbHNlO1xuXG5cdFx0XHRcdGlmKGdhdGVEZWYpIHtcblx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8gJiYgZ2F0ZURlZi5leHBvcnRJbmZvLmJyYWtldCkge1xuXHRcdFx0XHRcdFx0YnJha2V0SW5mbyA9IGdhdGVEZWYuZXhwb3J0SW5mby5icmFrZXQ7XG5cblx0XHRcdFx0XHRcdGlmKGJyYWtldEluZm8ucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdGlmKEFycmF5LmlzQXJyYXkoYnJha2V0SW5mby5wYXJhbXMpKSB7XG5cdFx0XHRcdFx0XHRcdFx0cGFyYW1EZWYgPSBicmFrZXRJbmZvLnBhcmFtcztcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRnYXRlUGFyYW1zID0gYnJha2V0SW5mby5wYXJhbXM7XG5cdFx0XHRcdFx0XHRcdFx0cGFyYW1EZWYgPSBPYmplY3Qua2V5cyhnYXRlUGFyYW1zKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihicmFrZXRJbmZvLm5hbWUgPT0gXCJ1bml0YXJ5XCIpIHtcblx0XHRcdFx0XHRcdFx0aXNVbml0YXJ5ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGdhdGVOYW1lID0gYnJha2V0SW5mby5uYW1lO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKCFicmFrZXRJbmZvICYmICFjaXJjdWl0LmN1c3RvbUdhdGVzW2dhdGUubmFtZV0pIHtcblx0XHRcdFx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCIjIFVuc3VwcG9ydGVkIGdhdGUgXFxcIlwiICsgZ2F0ZS5uYW1lICsgXCJcXFwiLlxcblwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhciB0bXBQYXJhbUNvdW50ID0gMDtcblx0XHRcdFx0XHRpZihnYXRlUGFyYW1zKSB7XG5cdFx0XHRcdFx0XHR2YXIgcGFyYW1Db3VudCA9IHBhcmFtRGVmLmxlbmd0aDtcblx0XHRcdFx0XHRcdGlmKHBhcmFtQ291bnQpIHtcdFx0XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgcCA9IDA7IHAgPCBwYXJhbUNvdW50OyBwKyspIHtcblx0XHRcdFx0XHRcdFx0XHRpZih0bXBQYXJhbUNvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1TdHJpbmcgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gcGFyYW1EZWZbcF07XHRcblxuXHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0XHRcdC8vIHByZXBlbmQgJ25wJyB0byBtYXRoIGNvbnN0YW50c1xuXHRcdFx0XHRcdFx0XHRcdGlmKHR5cGVvZiBnYXRlUGFyYW1zW3BhcmFtTmFtZV0gIT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbcGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbVN0cmluZyArPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0dG1wUGFyYW1Db3VudCsrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJha2V0ICs9IGluZGVudCArIFwiY2lyY3VpdC5cIjtcblxuXHRcdFx0XHRcdGlmKGlzVW5pdGFyeSkge1xuXHRcdFx0XHRcdFx0YnJha2V0ICs9IFwidW5pdGFyeShtYXRyaXg9XCIgKyBnYXRlTmFtZSArIFwiX3VuaXRhcnkoXCIgKyBwYXJhbVN0cmluZyArIFwiKSwgdGFyZ2V0cz1bXCI7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGJyYWtldCArPSBnYXRlTmFtZSArIFwiKFwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdFx0XHRcdGZvcih3ID0gMDsgdyA8IGdhdGUud2lyZXMubGVuZ3RoOyB3KyspIHtcblx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRicmFrZXQgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRicmFrZXQgKz0gcXViaXRMZXR0ZXIoZ2F0ZS53aXJlc1t3XSwgY2lyY3VpdC5udW1RdWJpdHMpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YnJha2V0ICs9IGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGlzVW5pdGFyeSkge1xuXHRcdFx0XHRcdFx0YnJha2V0ICs9IFwiXVwiO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZihwYXJhbVN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRicmFrZXQgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRicmFrZXQgKz0gcGFyYW1TdHJpbmc7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGJyYWtldCArPSBcIilcIjtcblx0XHRcdFx0XHRicmFrZXQgKz0gXCJcXG5cIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRcblx0aWYoZXhwb3J0QXNHYXRlTmFtZSl7XG5cdFx0YnJha2V0ICs9IGluZGVudCArIFwicmV0dXJuIGNpcmN1aXRcIjtcblx0fVxuXG5cdGJyYWtldCArPSBcIlxcblxcblwiO1xuXHRcblx0aWYoIWV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJsb2NhbF9zaW0gPSBMb2NhbFNpbXVsYXRvcigpXFxuXCI7XG5cdFx0YnJha2V0ICs9IGluZGVudCArIFwicmVzdWx0ID0gbG9jYWxfc2ltLnJ1bihjaXJjdWl0LCBzaG90cz1zaG90cykucmVzdWx0KClcXG5cIjtcblx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJjb3VudHMgPSBDb3VudGVyKHsgXFxcIlxcXCIuam9pbihyZXZlcnNlZChrKSk6IHYgZm9yIGssIHYgaW4gcmVzdWx0Lm1lYXN1cmVtZW50X2NvdW50cy5pdGVtcygpIH0pXFxuXCI7XG5cdFx0YnJha2V0ICs9IFwiXFxuXCI7XG5cblx0XHRpZihoeWJyaWQpIHtcblx0XHRcdGJyYWtldCArPSBpbmRlbnQgKyBcIiMgQ0FMQ1VMQVRFIENPU1QgSEVSRVxcblwiO1xuXG5cdFx0XHR2YXIgY29zdEZ1bmN0aW9uID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbiA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbi5weXRob24gfHwgXCJcIiA6IFwiXCI7XG5cdFx0XHRpZighY29zdEZ1bmN0aW9uLnRyaW0oKSkge1xuXHRcdFx0XHRjb3N0RnVuY3Rpb24gPSBcImNvc3QgPSAwXCI7XG5cdFx0XHR9XG5cblx0XHRcdGJyYWtldCArPSBhZGp1c3RJZGVudGF0aW9uKGNvc3RGdW5jdGlvbiwgaW5kZW50KTtcblxuXHRcdFx0YnJha2V0ICs9IFwiXFxuXCJcblx0XHRcdGJyYWtldCArPSBpbmRlbnQgKyBcInJldHVybiBjb3N0XFxuXCI7XG5cblxuXHRcdFx0aW5kZW50RGVwdGgtLTtcblx0XHRcdGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtTGlzdCA9IFwiXCI7XG5cdFx0XHRcdHRoaXMucGFyYW1zLm1hcChmdW5jdGlvbihnbG9iYWxQYXJhbU5hbWUsIGdsb2JhbFBhcmFtSW5kZXgpIHtcblx0XHRcdFx0XHRpZihnbG9iYWxQYXJhbUluZGV4ID4gMCkge1xuXHRcdFx0XHRcdFx0Z2xvYmFsUGFyYW1MaXN0ICs9IFwiLCBcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Z2xvYmFsUGFyYW1MaXN0ICs9IGdsb2JhbFBhcmFtTmFtZTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0YnJha2V0ICs9IFwiXFxuXCI7XG5cdFx0XHRcdGJyYWtldCArPSBcInBhcmFtcyA9IG5wLmFycmF5KFtcIiArIGdsb2JhbFBhcmFtTGlzdCArIFwiXSlcXG5cIjtcblx0XHRcdFx0YnJha2V0ICs9IFwiXFxuXCI7XG5cdFx0XHRcdGJyYWtldCArPSBcIm1pbmltdW0gPSBtaW5pbWl6ZShvYmplY3RpdmVfZnVuY3Rpb24sIHBhcmFtcywgbWV0aG9kPVxcXCJcIiArICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMub3B0aW1pemVyID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMub3B0aW1pemVyIDogXCJQb3dlbGxcIikgKyBcIlxcXCIsIHRvbD10b2xlcmFuY2UpXFxuXCI7XG5cdFx0XHRcdGJyYWtldCArPSBcInByaW50KFxcXCJjb3N0OlxcXCIsIG1pbmltdW0uZnVuLCBcXFwicGFyYW1zOlxcXCIsIG1pbmltdW0ueClcXG5cIjtcblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJwcmludChjb3VudHMpXCI7XG5cdFx0fVxuXHR9XG5cblx0aWYoYXNKdXB5dGVyKSB7XG5cdFx0dmFyIG5vdGVib29rID0ge1xuXHRcdFx0bWV0YWRhdGE6IHtcblx0XHRcdFx0a2VybmVsc3BlYzoge1xuXHRcdFx0XHRcdGRpc3BsYXlfbmFtZTogXCJQeXRob24gM1wiLFxuXHRcdFx0XHRcdGxhbmd1YWdlOiBcInB5dGhvblwiLFxuXHRcdFx0XHRcdG5hbWU6IFwicHl0aG9uM1wiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRuYmZvcm1hdDogNCxcblx0XHRcdG5iZm9ybWF0X21pbm9yOiAwLFxuXHRcdFx0Y2VsbHM6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNlbGxfdHlwZTogXCJjb2RlXCIsXG5cdFx0XHRcdFx0c291cmNlOiBicmFrZXQsXG5cdFx0XHRcdFx0bWV0YWRhdGE6IHtcblxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b3V0cHV0czogW10sXG5cdFx0XHRcdFx0ZXhlY3V0aW9uX2NvdW50OiBudWxsXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShub3RlYm9vayk7XG5cdH1cblxuXHRyZXR1cm4gYnJha2V0O1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvUW9iaiA9IGZ1bmN0aW9uKG9wdGlvbnMsIGNpcmN1aXRSZXBsYWNlbWVudCkge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgY2lyY3VpdE5hbWUgPSBvcHRpb25zLmNpcmN1aXROYW1lO1xuXHR2YXIgZXhwZXJpbWVudE5hbWUgPSBvcHRpb25zLmV4cGVyaW1lbnROYW1lO1xuXHR2YXIgbnVtU2hvdHMgPSBvcHRpb25zLm51bVNob3RzO1xuXG5cdHZhciBzZWxmID0gdGhpcztcblx0XG5cdHZhciBnbG9iYWxQYXJhbXMgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnBhcmFtcyA/IHRoaXMub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0dmFyIGdsb2JhbFBhcmFtcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ2xvYmFsUGFyYW1zKSk7XG5cdGZvcih2YXIgZ2xvYmFsUGFyYW1OYW1lIGluIGdsb2JhbFBhcmFtcykge1xuXHRcdGdsb2JhbFBhcmFtc1tnbG9iYWxQYXJhbU5hbWVdID0gbWF0aC5ldmFsdWF0ZShnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSk7XG5cdH1cblxuXHRjaXJjdWl0TmFtZSA9IGNpcmN1aXROYW1lIHx8IFwiXCI7XG5cdGV4cGVyaW1lbnROYW1lID0gZXhwZXJpbWVudE5hbWUgfHwgXCJcIjtcblx0bnVtU2hvdHMgPSBudW1TaG90cyB8fCAxO1xuXG5cdC8vIC0tLVxuXHQvLyBkZWNvbXBvc2UgY2lyY3VpdFxuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRjaXJjdWl0LmxvYWQodGhpcy5zYXZlKHRydWUpKTtcblx0Ly8gLS0tXG5cblx0dmFyIGlkID0gdGhpcy5yYW5kb21TdHJpbmcoKTtcblx0dmFyIHBhcmVudFFvYmogPSB7cW9ial9pZDogXCJxb2JqX1wiICsgaWQsIHR5cGU6IFwiUUFTTVwiLCBzY2hlbWFfdmVyc2lvbjogXCIxLjBcIiwgZXhwZXJpbWVudHM6IFtdLCBoZWFkZXI6IHtkZXNjcmlwdGlvbjogY2lyY3VpdE5hbWV9LCBjb25maWc6e3Nob3RzOiBudW1TaG90cywgbWVtb3J5X3Nsb3RzOiAwfX07XG5cdHZhciBxb2JqID0ge2hlYWRlcjoge21lbW9yeV9zbG90czogMCwgbl9xdWJpdHM6IDAsIHFyZWdfc2l6ZXM6IFtdLCBxdWJpdF9sYWJlbHM6IFtdLCBjcmVnX3NpemVzOiBbXSwgY2xiaXRfbGFiZWxzOiBbXSwgbmFtZTogXCJjaXJjdWl0MFwifSwgY29uZmlnOiB7bl9xdWJpdHM6IDAsIG1lbW9yeV9zbG90czogMH0sIGluc3RydWN0aW9uczogW119O1xuXHR2YXIgY3JlZ05hbWVzID0gT2JqZWN0LmtleXMoY2lyY3VpdC5jcmVncyk7XG5cblx0dmFyIGludFRvRG91YmxlID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucykge1xuXHRcdGlmKE51bWJlci5pc0ludGVnZXIobm9kZSkpIHtcblx0XHRcdHJldHVybiBub2RlLnRvRml4ZWQoMSk7XG5cdFx0fVxuXHRcdHJldHVybiBub2RlO1xuXHR9O1xuXG5cdGlmKCFjaXJjdWl0UmVwbGFjZW1lbnQpe1xuXHRcdGlmKGV4cGVyaW1lbnROYW1lKXtcblx0XHRcdHFvYmouaGVhZGVyLmRlc2NyaXB0aW9uID0gZXhwZXJpbWVudE5hbWU7XG5cdFx0fVxuXHRcdGZvcihjcmVnTmFtZSBpbiBjaXJjdWl0LmNyZWdzKXtcblx0XHRcdHZhciBjcmVnTGVuZ3RoID0gY2lyY3VpdC5jcmVnc1tjcmVnTmFtZV0ubGVuZ3RoO1xuXHRcdFx0cGFyZW50UW9iai5jb25maWcubWVtb3J5X3Nsb3RzICs9IGNyZWdMZW5ndGg7XG5cdFx0XHRxb2JqLmhlYWRlci5jcmVnX3NpemVzLnB1c2goW2NyZWdOYW1lLCBjcmVnTGVuZ3RoXSk7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY3JlZ0xlbmd0aDsgaSsrKXtcblx0XHRcdFx0cW9iai5oZWFkZXIuY2xiaXRfbGFiZWxzLnB1c2goW2NyZWdOYW1lLCBpXSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHFvYmouaGVhZGVyLm1lbW9yeV9zbG90cyA9IHBhcmVudFFvYmouY29uZmlnLm1lbW9yeV9zbG90cztcblx0XHRxb2JqLmhlYWRlci5uX3F1Yml0cyA9IGNpcmN1aXQubnVtUXViaXRzO1xuXHRcdHFvYmouY29uZmlnLm1lbW9yeV9zbG90cyA9IHBhcmVudFFvYmouY29uZmlnLm1lbW9yeV9zbG90cztcblx0XHRxb2JqLmNvbmZpZy5uX3F1Yml0cyA9IGNpcmN1aXQubnVtUXViaXRzO1xuXHRcdHFvYmouaGVhZGVyLnFyZWdfc2l6ZXMucHVzaChbXCJxXCIsIGNpcmN1aXQubnVtUXViaXRzXSk7XG5cdH1cblxuXHR2YXIgcmVnaXN0ZXJTbG90cyA9IHBhcmVudFFvYmouY29uZmlnLm1lbW9yeV9zbG90cztcblxuXHR2YXIgdXNlZEdhdGVzID0gY2lyY3VpdC51c2VkR2F0ZXMoKTtcblx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpe1xuXHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRpZighYmFzaWNHYXRlKXtcblx0XHRcdHZhciBjdXN0b21HYXRlID0gc2VsZi5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0aWYoY3VzdG9tR2F0ZSl7XG5cdFx0XHRcdGN1c3RvbUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0Y3VzdG9tQ2lyY3VpdC5sb2FkKGN1c3RvbUdhdGUpO1xuXHRcdFx0XHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRcdFx0XHRjaXJjdWl0TmFtZTogY2lyY3VpdE5hbWUsXG5cdFx0XHRcdFx0ZXhwZXJpbWVudE5hbWU6IGV4cGVyaW1lbnROYW1lLFxuXHRcdFx0XHRcdG51bVNob3RzOiBudW1TaG90c1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRwYXJlbnRRb2JqICs9IGN1c3RvbUNpcmN1aXQuZXhwb3J0VG9Rb2JqKG5ld09wdGlvbnMsIGZhbHNlKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdHZhciBudW1Db2xzID0gY2lyY3VpdC5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspe1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKXtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdHZhciBxb2JqSW5zdHJ1Y3Rpb24gPSB7bmFtZSA6IFwiXCIsIHF1Yml0czogW119O1xuXHRcdFx0dmFyIHFvYmpSZXBsYWNlbWVudCA9IG51bGw7XG5cdFx0XHR2YXIgcW9iakVxdWl2YWxlbnQgPSBudWxsO1xuXHRcdFx0aWYoY29sdW1uID09IDApe1xuXHRcdFx0XHRxb2JqLmhlYWRlci5xdWJpdF9sYWJlbHMucHVzaChbXCJxXCIsIHdpcmVdKTtcblx0XHRcdH1cblxuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKXtcblx0XHRcdFx0dmFyIGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZS5uYW1lKTtcblx0XHRcdFx0aWYoZ2F0ZURlZil7XG5cdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvKXtcblx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtLnJlcGxhY2VtZW50KXtcblx0XHRcdFx0XHRcdFx0cW9ialJlcGxhY2VtZW50ID0gZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20ucmVwbGFjZW1lbnQ7XG5cdFx0XHRcdFx0XHRcdHFvYmpSZXBsYWNlbWVudC5tYXAoZnVuY3Rpb24ocmVwbGFjZW1lbnQpe1xuXHRcdFx0XHRcdFx0XHRcdHZhciByZXBsYWNlbWVudENpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0XHRcdFx0XHRyZXBsYWNlbWVudENpcmN1aXQuY3JlZ3MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNlbGYuY3JlZ3MpKTtcblxuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zKXtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbXMgPSBPYmplY3Qua2V5cyhnYXRlLm9wdGlvbnMucGFyYW1zKTtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXBsYWNlbWVudFBhcmFtcyA9IE9iamVjdC5rZXlzKHJlcGxhY2VtZW50LnBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbXMubWFwKGZ1bmN0aW9uKHBhcmFtKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYocmVwbGFjZW1lbnRQYXJhbXMuaW5kZXhPZihwYXJhbSkgPiAtMSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVwbGFjZW1lbnQucGFyYW1zW3BhcmFtXSA9IGdhdGUub3B0aW9ucy5wYXJhbXNbcGFyYW1dO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJlcGxhY2VtZW50Q29uZGl0aW9uID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gPyBnYXRlLm9wdGlvbnMuY29uZGl0aW9uIDoge307XG5cdFx0XHRcdFx0XHRcdFx0cmVwbGFjZW1lbnRDaXJjdWl0LmFkZEdhdGUocmVwbGFjZW1lbnQubmFtZSwgY29sdW1uLCBnYXRlLndpcmVzLCB7IHBhcmFtczogcmVwbGFjZW1lbnQucGFyYW1zLCBjb25kaXRpb246IHJlcGxhY2VtZW50Q29uZGl0aW9uIH0pO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2lyY3VpdE5hbWU6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRleHBlcmltZW50TmFtZTogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdG51bVNob3RzOiBcIlwiXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRxb2JqLmluc3RydWN0aW9ucyA9IHFvYmouaW5zdHJ1Y3Rpb25zLmNvbmNhdChyZXBsYWNlbWVudENpcmN1aXQuZXhwb3J0VG9Rb2JqKG5ld09wdGlvbnMsIHRydWUpKTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9ZWxzZSBpZihnYXRlRGVmLmV4cG9ydEluZm8ucWFzbSAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucWFzbS5lcXVpdmFsZW50KXtcblx0XHRcdFx0XHRcdFx0cW9iakVxdWl2YWxlbnQgPSBnYXRlRGVmLmV4cG9ydEluZm8ucWFzbS5lcXVpdmFsZW50O1xuXHRcdFx0XHRcdFx0XHRxb2JqRXF1aXZhbGVudC5tYXAoZnVuY3Rpb24oZXF1aXZhbGVudCl7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGVxdWl2YWxlbnRDaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRcdFx0ZXF1aXZhbGVudENpcmN1aXQuY3JlZ3MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHNlbGYuY3JlZ3MpKTtcblxuXHRcdFx0XHRcdFx0XHRcdHZhciBnYXRlV2lyZXMgPSBlcXVpdmFsZW50LndpcmVzLmxlbmd0aCA+IDEgPyBnYXRlLndpcmVzIDogZ2F0ZS53aXJlc1tlcXVpdmFsZW50LndpcmVzWzBdXTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZXFQYXJhbXMgPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRpZihlcXVpdmFsZW50LnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gLS0tXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBlcXVpdmFsZW50IGdhdGUgcGFyYW1zIGNhbiBjb250YWluIHZhcmlhYmxlIGZyb20gZ2F0ZSBwYXJhbXNcblx0XHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBFdmFsdWF0ZSBnYXRlJ3MgcGFyYW1zXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZ2F0ZVBhcmFtcyA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBnYXRlUGFyYW1OYW1lIGluIGdhdGUub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRnYXRlUGFyYW1zW2dhdGVQYXJhbU5hbWVdID0gbWF0aC5ldmFsdWF0ZShnYXRlLm9wdGlvbnMucGFyYW1zW2dhdGVQYXJhbU5hbWVdKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBFdmFsdWF0ZSBlcXVpdmFsZW50IGdhdGUncyBwYXJhbXNcblx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZXFQYXJhbU5hbWUgaW4gZXF1aXZhbGVudC5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZXFQYXJhbXNbZXFQYXJhbU5hbWVdID0gbWF0aC5ldmFsdWF0ZShlcXVpdmFsZW50LnBhcmFtc1tlcVBhcmFtTmFtZV0sIGdhdGVQYXJhbXMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdHZhciBlcUNvbmRpdGlvbiA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uID8gZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiA6IHt9O1xuXG5cdFx0XHRcdFx0XHRcdFx0ZXF1aXZhbGVudENpcmN1aXQuYWRkR2F0ZShlcXVpdmFsZW50Lm5hbWUsIGNvbHVtbiwgZ2F0ZVdpcmVzLCB7IHBhcmFtczogZXFQYXJhbXMsIGNvbmRpdGlvbjogZXFDb25kaXRpb24gfSk7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjaXJjdWl0TmFtZTogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdGV4cGVyaW1lbnROYW1lOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0bnVtU2hvdHM6IFwiXCJcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdHFvYmouaW5zdHJ1Y3Rpb25zID0gcW9iai5pbnN0cnVjdGlvbnMuY29uY2F0KGVxdWl2YWxlbnRDaXJjdWl0LmV4cG9ydFRvUW9iaihuZXdPcHRpb25zLCB0cnVlKSk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKCFxb2JqUmVwbGFjZW1lbnQgJiYgIXFvYmpFcXVpdmFsZW50KXtcblx0XHRcdFx0XHR2YXIgZ2F0ZU5hbWUgPSBnYXRlLm5hbWU7XG5cdFx0XHRcdFx0dmFyIGdhdGVQYXJhbXMgPSBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcyA/IGdhdGUub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0XHRcdFx0XHRpZih0aGlzLmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdKXtcblx0XHRcdFx0XHRcdHN3aXRjaChnYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwiaWRcIjoge1xuXHRcdFx0XHRcdFx0XHRcdGdhdGVOYW1lID0gXCJpZGVuXCI7XG5cdFx0XHRcdFx0XHRcdH07IGJyZWFrO1xuXHRcdFxuXHRcdFx0XHRcdFx0XHQvLyBjYXNlIFwicjJcIjoge1xuXHRcdFx0XHRcdFx0XHQvLyBcdGdhdGVOYW1lID0gXCJ1MVwiO1xuXHRcdFx0XHRcdFx0XHQvLyBcdGdhdGVQYXJhbXMgPSB7IGxhbWJkYTogXCJwaS8yXCIgfTtcblx0XHRcdFx0XHRcdFx0Ly8gfTsgYnJlYWs7XG5cdFx0XG5cdFx0XHRcdFx0XHRcdC8vIGNhc2UgXCJyNFwiOiB7XG5cdFx0XHRcdFx0XHRcdC8vIFx0Z2F0ZU5hbWUgPSBcInUxXCI7XG5cdFx0XHRcdFx0XHRcdC8vIFx0Z2F0ZVBhcmFtcyA9IHsgbGFtYmRhOiBcInBpLzRcIiB9O1xuXHRcdFx0XHRcdFx0XHQvLyB9OyBicmVhaztcblx0XHRcblx0XHRcdFx0XHRcdFx0Ly8gY2FzZSBcInI4XCI6IHtcblx0XHRcdFx0XHRcdFx0Ly8gXHRnYXRlTmFtZSA9IFwidTFcIjtcblx0XHRcdFx0XHRcdFx0Ly8gXHRnYXRlUGFyYW1zID0geyBsYW1iZGE6IFwicGkvOFwiIH07XG5cdFx0XHRcdFx0XHRcdC8vIH07IGJyZWFrO1xuXHRcdFxuXHRcdFx0XHRcdFx0XHQvLyBjYXNlIFwiY3IyXCI6IHtcblx0XHRcdFx0XHRcdFx0Ly8gXHRnYXRlTmFtZSA9IFwiY3UxXCI7XG5cdFx0XHRcdFx0XHRcdC8vIFx0Z2F0ZVBhcmFtcyA9IHsgbGFtYmRhOiBcInBpLzJcIiB9O1xuXHRcdFx0XHRcdFx0XHQvLyB9OyBicmVhaztcblx0XHRcblx0XHRcdFx0XHRcdFx0Ly8gY2FzZSBcImNyNFwiOiB7XG5cdFx0XHRcdFx0XHRcdC8vIFx0Z2F0ZU5hbWUgPSBcImN1MVwiO1xuXHRcdFx0XHRcdFx0XHQvLyBcdGdhdGVQYXJhbXMgPSB7IGxhbWJkYTogXCJwaS80XCIgfTtcblx0XHRcdFx0XHRcdFx0Ly8gfTsgYnJlYWs7XG5cdFx0XG5cdFx0XHRcdFx0XHRcdC8vIGNhc2UgXCJjcjhcIjoge1xuXHRcdFx0XHRcdFx0XHQvLyBcdGdhdGVOYW1lID0gXCJjdTFcIjtcblx0XHRcdFx0XHRcdFx0Ly8gXHRnYXRlUGFyYW1zID0geyBsYW1iZGE6IFwicGkvOFwiIH07XG5cdFx0XHRcdFx0XHRcdC8vIH07IGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0cW9iakluc3RydWN0aW9uLm5hbWUgPSBnYXRlTmFtZTtcdFx0XHRcdFxuXHRcdFx0XHRcdFx0cW9iakluc3RydWN0aW9uLnF1Yml0cyA9IGdhdGUud2lyZXM7XG5cblx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyl7XG5cdFx0XHRcdFx0XHRcdHZhciBib29sZWFuSW5zdHJ1Y3Rpb24gPSB7bmFtZTogXCJcIiwgcmVnaXN0ZXI6IHJlZ2lzdGVyU2xvdHMsIHJlbGF0aW9uOiBcIj09XCIsIG1hc2s6IFwiXCIsIHZhbDogXCJcIn07XG5cdFx0XHRcdFx0XHRcdHZhciBjcmVnU2l6ZSA9IGNpcmN1aXQuY3JlZ3NbZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnXS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdHZhciBudW1iZXJPZkJpdHNTaGlmdCA9IDA7XG5cdFx0XHRcdFx0XHRcdHZhciBtYXNrVmFsdWUgPSAwO1xuXHRcdFx0XHRcdFx0XHR2YXIgbWFzayA9IFwiXCI7XG5cdFx0XHRcdFx0XHRcdHZhciB2YWwgPSBcIlwiO1xuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0dmFyIGluZGV4T2ZSZWdpc3RlciA9IGNyZWdOYW1lcy5pbmRleE9mKGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyk7XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBpbmRleE9mUmVnaXN0ZXI7IGkrKyl7XG5cdFx0XHRcdFx0XHRcdFx0bnVtYmVyT2ZCaXRzU2hpZnQgKz0gY2lyY3VpdC5jcmVnc1tjcmVnTmFtZXNbaV1dLmxlbmd0aDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHZhciB2YWx1ZSA9IChnYXRlLm9wdGlvbnMuY29uZGl0aW9uLnZhbHVlICUgTWF0aC5wb3coMiwgY3JlZ1NpemUpKSpNYXRoLnBvdygyLCBudW1iZXJPZkJpdHNTaGlmdCk7XG5cdFx0XHRcdFx0XHRcdHZhbCA9IFwiMHhcIiArIHZhbHVlLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXG5cdFx0XHRcdFx0XHRcdGlmKG51bWJlck9mQml0c1NoaWZ0ID4gMCl7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGV4cG9uZW50ID0gTWF0aC5wb3coMiwgbnVtYmVyT2ZCaXRzU2hpZnQpO1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgYml0ID0gMDsgYml0IDwgY3JlZ1NpemU7IGJpdCsrKXtcdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0XHRtYXNrVmFsdWUgKz0gZXhwb25lbnQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRleHBvbmVudCAqPSAyO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRtYXNrID0gXCIweFwiICsgbWFza1ZhbHVlLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0XHR9ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0bWFzayA9IFwiMHhcIiArIChNYXRoLnBvdygyLCBjcmVnU2l6ZSkgLSAxKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRib29sZWFuSW5zdHJ1Y3Rpb24ubmFtZSA9IFwiYmZ1bmNcIjtcblx0XHRcdFx0XHRcdFx0cW9iakluc3RydWN0aW9uLmNvbmRpdGlvbmFsID0gcmVnaXN0ZXJTbG90cztcblx0XHRcdFx0XHRcdFx0Ym9vbGVhbkluc3RydWN0aW9uLm1hc2sgPSBtYXNrO1xuXHRcdFx0XHRcdFx0XHRib29sZWFuSW5zdHJ1Y3Rpb24udmFsID0gdmFsO1xuXHRcdFx0XHRcdFx0XHRxb2JqLmluc3RydWN0aW9ucy5wdXNoKGJvb2xlYW5JbnN0cnVjdGlvbik7XG5cdFx0XHRcdFx0XHRcdHJlZ2lzdGVyU2xvdHMgKz0gMTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoZ2F0ZU5hbWUgPT0gXCJtZWFzdXJlXCIgJiYgZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jcmVnKXtcblx0XHRcdFx0XHRcdFx0cW9iakluc3RydWN0aW9uLm1lbW9yeSA9IFtdO1xuXHRcdFx0XHRcdFx0XHRxb2JqSW5zdHJ1Y3Rpb24ucmVnaXN0ZXIgPSBbXTtcblx0XHRcdFx0XHRcdFx0dmFyIHByZXZSZWdpc3Rlckxlbmd0aCA9IDA7XG5cdFx0XHRcdFx0XHRcdHZhciBpbmRleE9mUmVnaXN0ZXIgPSBjcmVnTmFtZXMuaW5kZXhPZihnYXRlLm9wdGlvbnMuY3JlZy5uYW1lKTtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGluZGV4T2ZSZWdpc3RlcjsgaSsrKXtcblx0XHRcdFx0XHRcdFx0XHRwcmV2UmVnaXN0ZXJMZW5ndGggKz0gY2lyY3VpdC5jcmVnc1tjcmVnTmFtZXNbaV1dLmxlbmd0aDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR2YXIgY3JlZ0JpdCA9IHByZXZSZWdpc3Rlckxlbmd0aCArIGdhdGUub3B0aW9ucy5jcmVnLmJpdDtcblx0XHRcdFx0XHRcdFx0cW9iakluc3RydWN0aW9uLm1lbW9yeS5wdXNoKGNyZWdCaXQpO1xuXHRcdFx0XHRcdFx0XHRxb2JqSW5zdHJ1Y3Rpb24ucmVnaXN0ZXIucHVzaChjcmVnQml0KTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoZ2F0ZVBhcmFtcyl7XG5cdFx0XHRcdFx0XHRcdGdhdGVEZWYgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0XHRcdFx0XHRpZighZ2F0ZURlZikge1xuXHRcdFx0XHRcdFx0XHRcdGdhdGVEZWYgPSB0aGlzLmN1c3RvbUdhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpZihnYXRlRGVmKXtcblx0XHRcdFx0XHRcdFx0XHRwYXJhbURlZiA9IGdhdGVEZWYucGFyYW1zIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdHBhcmFtQ291bnQgPSBwYXJhbURlZi5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdFx0aWYocGFyYW1Db3VudCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRxb2JqSW5zdHJ1Y3Rpb24ucGFyYW1zID0gW107XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIHAgPSAwOyBwIDwgcGFyYW1Db3VudDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtTmFtZSA9IHBhcmFtRGVmW3BdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihnYXRlUGFyYW1zW3BhcmFtTmFtZV0gfHwgZ2F0ZVBhcmFtc1twYXJhbU5hbWVdLnRvU3RyaW5nKCkpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5ldmFsdWF0ZShnYXRlUGFyYW1zW3BhcmFtTmFtZV0sIGdsb2JhbFBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cW9iakluc3RydWN0aW9uLnBhcmFtcy5wdXNoKG5vZGUpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdHFvYmouaW5zdHJ1Y3Rpb25zLnB1c2gocW9iakluc3RydWN0aW9uKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0XG5cdGlmKGNpcmN1aXRSZXBsYWNlbWVudCl7XG5cdFx0cmV0dXJuIHFvYmouaW5zdHJ1Y3Rpb25zO1xuXHR9XG5cblx0aWYocW9iai5pbnN0cnVjdGlvbnMubGVuZ3RoKXtcblx0XHRwYXJlbnRRb2JqLmV4cGVyaW1lbnRzLnB1c2gocW9iaik7XG5cdH1cblxuXHRyZXR1cm4gcGFyZW50UW9iajtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNsZWFyUGFydGl0aW9ucyA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnBhcnRpdGlvbk1hcCA9IFtdO1xuXHR0aGlzLnBhcnRpdGlvbkNvdW50ID0gMDtcblx0dGhpcy5wYXJ0aXRpb25JbmZvID0ge307XG5cblx0dmFyIG51bUNvbHMgPSB0aGlzLm51bUNvbHMoKTtcblx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHR0aGlzLnBhcnRpdGlvbk1hcC5wdXNoKFtdKTtcblx0XHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0XHR0aGlzLnBhcnRpdGlvbk1hcFt3aXJlXS5wdXNoKC0xKTtcblx0XHR9XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5jcmVhdGVQYXJ0aXRpb25zID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuY2xlYXJQYXJ0aXRpb25zKCk7XG5cblx0dmFyIHdpcmVQYXJ0aXRpb25zID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLm51bVF1Yml0czsgaSsrKSB7XG5cdFx0d2lyZVBhcnRpdGlvbnMucHVzaCgtMSk7XG5cdH1cblxuXHR2YXIgcGFydGl0aW9uQ291bnRlciA9IDA7XG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLndpcmVzKSB7XG5cdFx0XHRcdHZhciBwcmV2UGFydGl0aW9ucyA9IFtdO1xuXHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdHZhciB3ciA9IGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0dmFyIHByZXZQYXJ0aXRpb24gPSB3aXJlUGFydGl0aW9uc1t3cl07XG5cdFx0XHRcdFx0aWYocHJldlBhcnRpdGlvbnMuaW5kZXhPZihwcmV2UGFydGl0aW9uKSA8IDApIHtcblx0XHRcdFx0XHRcdHByZXZQYXJ0aXRpb25zLnB1c2gocHJldlBhcnRpdGlvbik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBwYXJ0aXRpb24gPSAtMTtcblx0XHRcdFx0aWYocHJldlBhcnRpdGlvbnMubGVuZ3RoICE9IDEgfHwgcHJldlBhcnRpdGlvbnNbMF0gPT0gLTEpIHtcblx0XHRcdFx0XHRwYXJ0aXRpb24gPSBwYXJ0aXRpb25Db3VudGVyKys7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cGFydGl0aW9uID0gcHJldlBhcnRpdGlvbnNbMF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdHZhciB3ciA9IGdhdGUud2lyZXNbd107XG5cblx0XHRcdFx0XHRvbGRQYXJ0aXRpb24gPSB3aXJlUGFydGl0aW9uc1t3cl07XG5cdFx0XHRcdFx0aWYob2xkUGFydGl0aW9uID09IC0xKSB7XG5cdFx0XHRcdFx0XHR3aXJlUGFydGl0aW9uc1t3cl0gPSBwYXJ0aXRpb247XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLm51bVF1Yml0czsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdGlmKHdpcmVQYXJ0aXRpb25zW2ldID09IG9sZFBhcnRpdGlvbikge1xuXHRcdFx0XHRcdFx0XHRcdHdpcmVQYXJ0aXRpb25zW2ldID0gcGFydGl0aW9uO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHRoaXMucGFydGl0aW9uTWFwW3dpcmVdW2NvbHVtbl0gPSB3aXJlUGFydGl0aW9uc1t3aXJlXTtcblx0XHR9XG5cdH1cblxuXHR0aGlzLnBhcnRpdGlvbkNvdW50ID0gcGFydGl0aW9uQ291bnRlcjtcblxuXHRmb3IodmFyIHBhcnRpdGlvbiA9IDA7IHBhcnRpdGlvbiA8IHBhcnRpdGlvbkNvdW50ZXI7IHBhcnRpdGlvbisrKSB7XG5cdFx0dGhpcy5wYXJ0aXRpb25JbmZvW3BhcnRpdGlvbl0gPSB0aGlzLnBhcnRpdGlvbkJvdW5kcyhwYXJ0aXRpb24pO1xuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucHJpbnRQYXJ0aXRpb25zID0gZnVuY3Rpb24oKSB7XG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0dmFyIHJvdyA9IFwiXCI7XG5cdFx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdFx0dmFyIHBhcnQgPSB0aGlzLnBhcnRpdGlvbk1hcFt3aXJlXVtjb2x1bW5dO1xuXHRcdFx0aWYocGFydCA9PSAtMSkgcGFydCA9IFwiIFwiO1xuXHRcdFx0aWYodGhpcy5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKSkge1xuXHRcdFx0XHRwYXJ0ID0gcGFydCArIFwiKlwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cGFydCA9IHBhcnQgKyBcIiBcIjtcblx0XHRcdH1cblx0XHRcdHdoaWxlKHBhcnQubGVuZ3RoIDwgNCkge1xuXHRcdFx0XHRwYXJ0ID0gXCIgXCIgKyBwYXJ0O1xuXHRcdFx0fVxuXHRcdFx0cm93ICs9IHBhcnQ7XG5cdFx0fVxuXHRcdHZhciB3ID0gd2lyZSArIFwiXCI7XG5cdFx0d2hpbGUody5sZW5ndGggPCAyKSB7XG5cdFx0XHR3ID0gXCIwXCIgKyB3O1xuXHRcdH1cblx0XHRyb3cgPSBcInFcIiArIHcgKyByb3c7XG5cdFx0Y29uc29sZS5sb2cocm93KTtcblx0fVxufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucGFydGl0aW9uQm91bmRzID0gZnVuY3Rpb24ocGFydGl0aW9uSW5kZXgpIHtcblx0dmFyIGJvdW5kcyA9IHtcblx0XHR3aXJlOiB7XG5cdFx0XHR0b3A6IC0xLFxuXHRcdFx0Ym90dG9tOiAtMVxuXHRcdH0sXG5cdFx0Y29sdW1uOiB7XG5cdFx0XHRsZWZ0OiAtMSxcblx0XHRcdHJpZ2h0OiAtMVxuXHRcdH0sXG5cdFx0d2lyZU1hcDoge1xuXG5cdFx0fSxcblx0XHRwYXJlbnRzOiB7XG5cblx0XHR9XG5cdH07XG5cblx0dmFyIGZvdW5kID0gZmFsc2U7XG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIHBhcnRpdGlvbiA9IHRoaXMucGFydGl0aW9uTWFwW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRpZihwYXJ0aXRpb24gPT0gcGFydGl0aW9uSW5kZXgpIHtcblx0XHRcdFx0Zm91bmQgPSB0cnVlO1xuXG5cdFx0XHRcdGlmKGJvdW5kcy53aXJlLnRvcCA8IDApIHtcblx0XHRcdFx0XHRib3VuZHMud2lyZS50b3AgPSB3aXJlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKGJvdW5kcy53aXJlLmJvdHRvbSA8IHdpcmUpIHtcblx0XHRcdFx0XHRib3VuZHMud2lyZS5ib3R0b20gPSB3aXJlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoYm91bmRzLmNvbHVtbi5sZWZ0IDwgMCkge1xuXHRcdFx0XHRcdGJvdW5kcy5jb2x1bW4ubGVmdCA9IGNvbHVtbjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZihib3VuZHMuY29sdW1uLnJpZ2h0IDwgY29sdW1uKSB7XG5cdFx0XHRcdFx0Ym91bmRzLmNvbHVtbi5yaWdodCA9IGNvbHVtbjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKCFmb3VuZCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0dmFyIHBhcnRpdGlvbldpcmUgPSAwO1xuXHRmb3IodmFyIHdpcmUgPSBib3VuZHMud2lyZS50b3A7IHdpcmUgPD0gYm91bmRzLndpcmUuYm90dG9tOyB3aXJlKyspIHtcblx0XHR2YXIgcGFydGl0aW9uID0gdGhpcy5wYXJ0aXRpb25NYXBbd2lyZV1bYm91bmRzLmNvbHVtbi5sZWZ0XTtcblx0XHRpZihwYXJ0aXRpb24gPT0gcGFydGl0aW9uSW5kZXgpIHtcblx0XHRcdGJvdW5kcy53aXJlTWFwW3dpcmVdID0gcGFydGl0aW9uV2lyZTtcblxuXHRcdFx0cGFydGl0aW9uV2lyZSsrO1xuXHRcdH1cblx0fVxuXHRib3VuZHMubnVtUXViaXRzID0gcGFydGl0aW9uV2lyZTtcblxuXHRpZihib3VuZHMuY29sdW1uLmxlZnQgPiAwKSB7XG5cdFx0Zm9yKHZhciB3aXJlIGluIGJvdW5kcy53aXJlTWFwKSB7XG5cdFx0XHR2YXIgcGFyZW50UGFydGl0aW9uID0gdGhpcy5wYXJ0aXRpb25NYXBbd2lyZV1bYm91bmRzLmNvbHVtbi5sZWZ0IC0gMV07XG5cdFx0XHRpZihwYXJlbnRQYXJ0aXRpb24gPj0gMCkge1xuXHRcdFx0XHRpZighYm91bmRzLnBhcmVudHNbcGFyZW50UGFydGl0aW9uXSkge1xuXHRcdFx0XHRcdGJvdW5kcy5wYXJlbnRzW3BhcmVudFBhcnRpdGlvbl0gPSB7fTtcblx0XHRcdFx0XHRib3VuZHMucGFyZW50c1twYXJlbnRQYXJ0aXRpb25dLmxpbmtzID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0dmFyIHBhcmVudEJvdW5kcyA9IHRoaXMucGFydGl0aW9uSW5mb1twYXJlbnRQYXJ0aXRpb25dO1xuXHRcdFx0XHRmb3IodmFyIHB3aXJlIGluIHBhcmVudEJvdW5kcy53aXJlTWFwKSB7XG5cdFx0XHRcdFx0aWYocHdpcmUgPT0gd2lyZSkge1xuXHRcdFx0XHRcdFx0Ym91bmRzLnBhcmVudHNbcGFyZW50UGFydGl0aW9uXS5saW5rcy5wdXNoKGJvdW5kcy53aXJlTWFwW3dpcmVdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYm91bmRzO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucGFydGl0aW9uQ2lyY3VpdCA9IGZ1bmN0aW9uKHBhcnRpdGlvbkluZGV4KSB7XG5cdHZhciBib3VuZHMgPSB0aGlzLnBhcnRpdGlvbkluZm9bcGFydGl0aW9uSW5kZXhdO1xuXHRpZighYm91bmRzKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHR2YXIgY29tYmluZUxpc3QgPSBbXTtcblx0dmFyIHVzZWRXaXJlcyA9IFtdO1xuXHRmb3IodmFyIHBhcmVudFBhcnRpdGlvbiBpbiBib3VuZHMucGFyZW50cykge1xuXHRcdHZhciBjb21iaW5lSXRlbSA9IHt9O1xuXG5cdFx0Y29tYmluZUl0ZW0uY2lyY3VpdCA9IHRoaXMucGFydGl0aW9uQ2FjaGVbcGFyZW50UGFydGl0aW9uXTtcblx0XHRjb21iaW5lSXRlbS53aXJlcyA9IFtdO1xuXHRcdGNvbWJpbmVJdGVtLndpcmVzID0gYm91bmRzLnBhcmVudHNbcGFyZW50UGFydGl0aW9uXS5saW5rcztcblxuXHRcdHVzZWRXaXJlcyA9IHVzZWRXaXJlcy5jb25jYXQoY29tYmluZUl0ZW0ud2lyZXMpO1xuXG5cdFx0Y29tYmluZUxpc3QucHVzaChjb21iaW5lSXRlbSk7XG5cdH1cblxuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXG5cdC8vIGNvbWJpbmUgc3RhdGUgZnJvbSBwYXJlbnQgcGFydGl0aW9uc1xuXHRpZihjb21iaW5lTGlzdC5sZW5ndGggPiAwKSB7XG5cdFx0aWYoYm91bmRzLm51bVF1Yml0cyA+IHVzZWRXaXJlcy5sZW5ndGgpIHtcblx0XHRcdHZhciBjb21iaW5lSXRlbSA9IHt9O1xuXHRcdFx0Y29tYmluZUl0ZW0uY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdChib3VuZHMubnVtUXViaXRzIC0gdXNlZFdpcmVzLmxlbmd0aCk7XG5cdFx0XHRjb21iaW5lSXRlbS53aXJlcyA9IFtdO1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGJvdW5kcy5udW1RdWJpdHM7IGkrKykge1xuXHRcdFx0XHRpZih1c2VkV2lyZXMuaW5kZXhPZihpKSA8IDApIHtcblx0XHRcdFx0XHRjb21iaW5lSXRlbS53aXJlcy5wdXNoKGkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb21iaW5lTGlzdC5wdXNoKGNvbWJpbmVJdGVtKTtcblx0XHR9XG5cdFx0Y2lyY3VpdC5zZXRDb21iaW5lZFN0YXRlKGNvbWJpbmVMaXN0KTtcblx0fVxuXG5cdC8vIGFkZCBnYXRlcyB0byB0aGUgY2lyY3VpdFxuXHRmb3IodmFyIGNvbHVtbiA9IGJvdW5kcy5jb2x1bW4ubGVmdDsgY29sdW1uIDw9IGJvdW5kcy5jb2x1bW4ucmlnaHQ7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gYm91bmRzLndpcmUudG9wOyB3aXJlIDw9IGJvdW5kcy53aXJlLmJvdHRvbTsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgcGFydGl0aW9uID0gdGhpcy5wYXJ0aXRpb25NYXBbd2lyZV1bY29sdW1uXTtcblx0XHRcdGlmKHBhcnRpdGlvbiA9PSBwYXJ0aXRpb25JbmRleCkge1xuXHRcdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHRcdHZhciBnYXRlV2lyZXMgPSBbXTtcblx0XHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdFx0dmFyIHdyID0gZ2F0ZS53aXJlc1t3XTtcblx0XHRcdFx0XHRcdGdhdGVXaXJlcy5wdXNoKGJvdW5kcy53aXJlTWFwW3dyXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNpcmN1aXQuYWRkR2F0ZShnYXRlLm5hbWUsIGNvbHVtbiAtIGJvdW5kcy5jb2x1bW4ubGVmdCwgZ2F0ZVdpcmVzLCBnYXRlLm9wdGlvbnMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNpcmN1aXQ7XG59O1xuXG4vL1xuLy8gT3B0aW9uczpcbi8vICAge1xuLy8gICAgIHN0cmljdE1vZGU6IGJvb2wsXG4vLyAgICAgcGFydGl0aW9uaW5nOiBib29sLFxuLy8gICAgIGNvbnRpbnVlOiBib29sLFxuLy8gICAgIGluaXRpYWxTdGF0ZTogQXJyYXlcbi8vICAgICBvbkdhdGU6IGZ1bmN0aW9uKGNvbHVtbiwgd2lyZSwgZ2F0ZUNvdW50ZXIpIHsgLi4uIH0sXG4vLyAgICAgb25Db2x1bW46IGZ1bmN0aW9uKGNvbHVtbikgeyAuLi4gfVxuLy8gICB9XG4vL1xuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uKGluaXRpYWxWYWx1ZXMsIG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dGhpcy5tZWFzdXJlUmVzZXRzUXViaXQgPSAhIW9wdGlvbnMuc3RyaWN0TW9kZTtcblxuXHRpZighb3B0aW9ucy5jb250aW51ZSkge1xuXHRcdHRoaXMuaW5pdFN0YXRlKCk7XG5cdFx0dGhpcy5zdGF0cy5kdXJhdGlvbiA9IDA7XG5cdH1cblxuXHRpZihvcHRpb25zLmluaXRpYWxTdGF0ZSkge1xuXHRcdGlmKEFycmF5LmlzQXJyYXkob3B0aW9ucy5pbml0aWFsU3RhdGUpKSB7XG5cdFx0XHR0aGlzLnN0YXRlID0ge307XG5cdFx0XHRmb3IodmFyIHZhbEluZGV4ID0gMDsgdmFsSW5kZXggPCBvcHRpb25zLmluaXRpYWxTdGF0ZS5sZW5ndGg7IHZhbEluZGV4KyspIHtcblx0XHRcdFx0dmFyIHZhbCA9IG9wdGlvbnMuaW5pdGlhbFN0YXRlW3ZhbEluZGV4XTtcblxuXHRcdFx0XHRpZihBcnJheS5pc0FycmF5KHZhbCkgJiYgdmFsLmxlbmd0aCA9PSAyKSB7XG5cdFx0XHRcdFx0dmFsID0gbWF0aC5jb21wbGV4KHZhbFswXSwgdmFsWzFdKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKHR5cGVvZiB2YWwgPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdHZhbCA9IHRoaXMuZXZhbE1hdGhTdHJpbmcodmFsKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZih0eXBlb2YgdmFsID09IFwibnVtYmVyXCIpIHtcblx0XHRcdFx0XHR2YWwgPSBtYXRoLmNvbXBsZXgodmFsLCAwKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLnN0YXRlW3ZhbEluZGV4ICsgXCJcIl0gPSB2YWw7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc3RhdGUgPSBvcHRpb25zLmluaXRpYWxTdGF0ZTtcblx0XHR9XG5cblx0XHR0aGlzLnN0YXRlQml0cyA9IDA7XG5cdFx0Zm9yKHZhciBhaW5kZXggaW4gdGhpcy5zdGF0ZSkge1xuXHRcdFx0dGhpcy5zdGF0ZUJpdHMgfD0gcGFyc2VJbnQoYWluZGV4KTtcblx0XHR9XG5cdH1cblxuXHR0aGlzLnN0YXRzLnN0YXJ0ID0gbmV3IERhdGUoKTtcblxuXHR2YXIgZGVjb21wb3NlZCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRkZWNvbXBvc2VkLmxvYWQodGhpcy5zYXZlKHRydWUpKTtcblxuXHRpZihpbml0aWFsVmFsdWVzKSB7XG5cdFx0ZGVjb21wb3NlZC5pbnNlcnRDb2x1bW4oMCk7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGRlY29tcG9zZWQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdGlmKGluaXRpYWxWYWx1ZXNbd2lyZV0pIHtcblx0XHRcdFx0ZGVjb21wb3NlZC5hZGRHYXRlKFwieFwiLCAwLCB3aXJlLCB7fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dmFyIHBhcnRpdGlvbmluZyA9IG9wdGlvbnMucGFydGl0aW9uaW5nO1xuXG5cdGlmKHBhcnRpdGlvbmluZykge1xuXHRcdGRlY29tcG9zZWQuY3JlYXRlUGFydGl0aW9ucygpO1xuLy9cdFx0ZGVjb21wb3NlZC5wcmludFBhcnRpdGlvbnMoKTtcblx0fVxuXG5cdHZhciBudW1Db2xzID0gZGVjb21wb3NlZC5udW1Db2xzKCk7XG5cdHZhciBnYXRlQ291bnRlciA9IDA7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgZGVjb21wb3NlZC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBkZWNvbXBvc2VkLmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdGdhdGVDb3VudGVyKys7XG5cblx0XHRcdFx0dmFyIGV4ZWN1dGVHYXRlID0gdHJ1ZTtcblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKSB7XG5cdFx0XHRcdFx0dmFyIGNyZWdWYWx1ZSA9IHRoaXMuZ2V0Q3JlZ1ZhbHVlKGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyk7XG5cdFx0XHRcdFx0ZXhlY3V0ZUdhdGUgPSBjcmVnVmFsdWUgPT09IGdhdGUub3B0aW9ucy5jb25kaXRpb24udmFsdWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihleGVjdXRlR2F0ZSkge1xuXG5cdFx0XHRcdFx0aWYocGFydGl0aW9uaW5nKSB7XG5cdFx0XHRcdFx0XHR2YXIgcGFydGl0aW9uID0gZGVjb21wb3NlZC5wYXJ0aXRpb25NYXBbd2lyZV1bY29sdW1uXTtcblx0XHRcdFx0XHRcdGlmKCFkZWNvbXBvc2VkLnBhcnRpdGlvbkNhY2hlW3BhcnRpdGlvbl0pIHtcblx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlZC5wYXJ0aXRpb25DYWNoZVtwYXJ0aXRpb25dID0gZGVjb21wb3NlZC5wYXJ0aXRpb25DaXJjdWl0KHBhcnRpdGlvbik7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHZhciBwY2lyYyA9IGRlY29tcG9zZWQucGFydGl0aW9uQ2FjaGVbcGFydGl0aW9uXTtcblx0XHRcdFx0XHRcdHZhciBib3VuZHMgPSBkZWNvbXBvc2VkLnBhcnRpdGlvbkluZm9bcGFydGl0aW9uXTtcblxuXHRcdFx0XHRcdFx0dmFyIHBjb2x1bW4gPSBjb2x1bW4gLSBib3VuZHMuY29sdW1uLmxlZnQ7XG5cblx0XHRcdFx0XHRcdHZhciBwZ2F0ZSA9IHBjaXJjLmdldEdhdGVBdChwY29sdW1uLCBib3VuZHMud2lyZU1hcFt3aXJlXSk7XG5cblx0XHRcdFx0XHRcdHBjaXJjLmNyZWdzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNyZWdzKSk7XG5cdFx0XHRcdFx0XHRwY2lyYy5hcHBseUdhdGUocGdhdGUubmFtZSwgcGNvbHVtbiwgcGdhdGUud2lyZXMsIHBnYXRlLm9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0dGhpcy5jcmVncyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocGNpcmMuY3JlZ3MpKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5hcHBseUdhdGUoZ2F0ZS5uYW1lLCBjb2x1bW4sIGdhdGUud2lyZXMsIGdhdGUub3B0aW9ucyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gY2FsbGJhY2sgYWZ0ZXIgZ2F0ZSBpcyBmaW5pc2hlZFxuXHRcdFx0XHRpZihvcHRpb25zICYmIG9wdGlvbnMub25HYXRlKSB7XG5cdFx0XHRcdFx0b3B0aW9ucy5vbkdhdGUoY29sdW1uLCB3aXJlLCBnYXRlQ291bnRlcik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0Ly8gY2FsbGJhY2sgYWZ0ZXIgY29sdW1uIGlzIGZpbmlzaGVkXG5cdFx0aWYob3B0aW9ucyAmJiBvcHRpb25zLm9uQ29sdW1uKSB7XG5cdFx0XHRvcHRpb25zLm9uQ29sdW1uKGNvbHVtbik7XG5cdFx0fVxuXHR9XG5cblx0aWYocGFydGl0aW9uaW5nKSB7XG5cdFx0dmFyIGxhc3RQYXJ0aXRpb25zID0gW107XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGRlY29tcG9zZWQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBwYXJ0aXRpb24gPSBkZWNvbXBvc2VkLnBhcnRpdGlvbk1hcFt3aXJlXVtudW1Db2xzIC0gMV07XG5cdFx0XHRpZihwYXJ0aXRpb24gPj0gMCAmJiBsYXN0UGFydGl0aW9ucy5pbmRleE9mKHBhcnRpdGlvbikgPCAwKSB7XG5cdFx0XHRcdGxhc3RQYXJ0aXRpb25zLnB1c2gocGFydGl0aW9uKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYobGFzdFBhcnRpdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRpZihsYXN0UGFydGl0aW9ucy5sZW5ndGggPT0gMSkge1xuXHRcdFx0XHR0aGlzLnN0YXRlID0gZGVjb21wb3NlZC5wYXJ0aXRpb25DYWNoZVtsYXN0UGFydGl0aW9uc1swXV0uc3RhdGU7XG5cdFx0XHRcdHRoaXMuc3RhdGVCaXRzID0gZGVjb21wb3NlZC5wYXJ0aXRpb25DYWNoZVtsYXN0UGFydGl0aW9uc1swXV0uc3RhdGVCaXRzO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFyIHN0YXJ0VGltZSA9IHRoaXMuc3RhdHMuc3RhcnQ7XG5cdFx0XHRcdHZhciBjb21iaW5lTGlzdCA9IFtdO1xuXHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgbGFzdFBhcnRpdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgbGFzdFBhcnRpdGlvbiA9IGxhc3RQYXJ0aXRpb25zW2ldO1xuXG5cdFx0XHRcdFx0dmFyIGNvbWJpbmVJdGVtID0ge307XG5cblx0XHRcdFx0XHRjb21iaW5lSXRlbS5jaXJjdWl0ID0gZGVjb21wb3NlZC5wYXJ0aXRpb25DYWNoZVtsYXN0UGFydGl0aW9uXTtcblx0XHRcdFx0XHRjb21iaW5lSXRlbS53aXJlcyA9IFtdO1xuXG5cdFx0XHRcdFx0dmFyIGxhc3RCb3VuZHMgPSBkZWNvbXBvc2VkLnBhcnRpdGlvbkluZm9bbGFzdFBhcnRpdGlvbl07XG5cdFx0XHRcdFx0Zm9yKHZhciB3aXJlIGluIGxhc3RCb3VuZHMud2lyZU1hcCkge1xuXHRcdFx0XHRcdFx0Y29tYmluZUl0ZW0ud2lyZXMucHVzaChwYXJzZUludCh3aXJlKSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29tYmluZUxpc3QucHVzaChjb21iaW5lSXRlbSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5zZXRDb21iaW5lZFN0YXRlKGNvbWJpbmVMaXN0KTtcblx0XHRcdFx0dGhpcy5zdGF0cy5zdGFydCA9IHN0YXJ0VGltZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR0aGlzLnN0YXRzLmVuZCA9IG5ldyBEYXRlKCk7XG5cdHRoaXMuc3RhdHMuZHVyYXRpb24gKz0gdGhpcy5zdGF0cy5lbmQgLSB0aGlzLnN0YXRzLnN0YXJ0O1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNvbnRpbnVlID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMucnVuKG51bGwsIHtcblx0XHRjb250aW51ZTogdHJ1ZVxuXHR9KTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5zdGF0ZUFzQXJyYXkgPSBmdW5jdGlvbihvbmx5UG9zc2libGUsIHNraXBJdGVtcywgYmxvY2tTaXplLCByZXZlcnNlQml0cykge1xuXHR2YXIgc3RhdGUgPSBbXTtcblxuXHR2YXIgbnVtQW1wbGl0dWRlcyA9IHRoaXMubnVtQW1wbGl0dWRlcygpO1xuXG5cdHNraXBJdGVtcyA9IHNraXBJdGVtcyB8fCAwO1xuXHRibG9ja1NpemUgPSBibG9ja1NpemUgfHwgKG9ubHlQb3NzaWJsZSA/IHRoaXMubnVtQW1wbGl0dWRlcyhvbmx5UG9zc2libGUpIDogbnVtQW1wbGl0dWRlcyk7XG5cblx0dmFyIGNvdW50ID0gMDtcblx0Zm9yKHZhciBpID0gMDsgaSA8IG51bUFtcGxpdHVkZXM7IGkrKykge1xuXHRcdHZhciBhbXBJbmRleCA9IGk7XG5cdFx0aWYocmV2ZXJzZUJpdHMpIHtcblx0XHRcdGFtcEluZGV4ID0gcmV2ZXJzZUJpdHdpc2UoaSwgdGhpcy5udW1RdWJpdHMpO1xuXHRcdH1cblxuXHRcdHZhciBhbXBsaXR1ZGUgPSBtYXRoLnJvdW5kKHRoaXMuc3RhdGVbYW1wSW5kZXhdIHx8IG1hdGguY29tcGxleCgwLCAwKSwgMTQpO1xuXG5cdFx0aWYoIW9ubHlQb3NzaWJsZSB8fCAoYW1wbGl0dWRlLnJlIHx8IGFtcGxpdHVkZS5pbSkpIHtcblx0XHRcdGlmKGNvdW50ID49IHNraXBJdGVtcykge1xuXHRcdFx0XHR2YXIgaW5kZXhCaW5TdHIgPSBpLnRvU3RyaW5nKDIpO1xuXHRcdFx0XHR3aGlsZShpbmRleEJpblN0ci5sZW5ndGggPCB0aGlzLm51bVF1Yml0cykge1xuXHRcdFx0XHRcdGluZGV4QmluU3RyID0gXCIwXCIgKyBpbmRleEJpblN0cjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBhbXBsaXR1ZGVTdHIgPSB0aGlzLmZvcm1hdENvbXBsZXgoYW1wbGl0dWRlLCB7IGZpeGVkV2lkdGg6IHRydWUsIGRlY2ltYWxQbGFjZXM6IDgsIGlvdGFDaGFyOiBcImlcIiB9KTtcblx0XHRcdFx0dmFyIG1hZ25pdHVkZSA9IG1hdGgucG93KG1hdGguYWJzKGFtcGxpdHVkZSksIDIpO1xuXHRcdFx0XHR2YXIgY2hhbmNlID0gbWFnbml0dWRlICogMTAwO1xuXHRcdFx0XHR2YXIgY2hhbmNlU3RyID0gY2hhbmNlLnRvRml4ZWQoNSk7XG5cdFx0XHRcdHZhciBwaGFzZSA9IG1hdGguYXJnKGFtcGxpdHVkZSk7XG5cdFx0XHRcdHZhciBwaGFzZVN0ciA9IHBoYXNlLnRvRml4ZWQoNSk7XG5cblx0XHRcdFx0c3RhdGUucHVzaCh7XG5cdFx0XHRcdFx0aW5kZXg6IGksXG5cdFx0XHRcdFx0aW5kZXhCaW5TdHI6IGluZGV4QmluU3RyLFxuXHRcdFx0XHRcdGFtcGxpdHVkZTogYW1wbGl0dWRlLFxuXHRcdFx0XHRcdGFtcGxpdHVkZVN0cjogYW1wbGl0dWRlU3RyLFxuXHRcdFx0XHRcdG1hZ25pdHVkZTogbWFnbml0dWRlLFxuXHRcdFx0XHRcdGNoYW5jZTogY2hhbmNlLFxuXHRcdFx0XHRcdGNoYW5jZVN0cjogY2hhbmNlU3RyLFxuXHRcdFx0XHRcdHBoYXNlOiBwaGFzZSxcblx0XHRcdFx0XHRwaGFzZVN0cjogcGhhc2VTdHJcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdGNvdW50Kys7XG5cblx0XHRcdGlmKHN0YXRlLmxlbmd0aCA9PSBibG9ja1NpemUpIHtcblx0XHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBzdGF0ZTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5zdGF0ZUFzU2ltcGxlQXJyYXkgPSBmdW5jdGlvbihyZXZlcnNlQml0cykge1xuXG5cdHZhciBudW1BbXBsaXR1ZGVzID0gdGhpcy5udW1BbXBsaXR1ZGVzKCk7XG5cdGlmKCF0aGlzLnN0YXRlKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0dmFyIHN0YXRlID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBudW1BbXBsaXR1ZGVzOyBpKyspIHtcblx0XHR2YXIgYW1wSW5kZXggPSBpO1xuXHRcdGlmKHJldmVyc2VCaXRzKSB7XG5cdFx0XHRhbXBJbmRleCA9IHJldmVyc2VCaXR3aXNlKGksIHRoaXMubnVtUXViaXRzKTtcblx0XHR9XG5cblx0XHRzdGF0ZS5wdXNoKG1hdGgucm91bmQodGhpcy5zdGF0ZVthbXBJbmRleF0gfHwgbWF0aC5jb21wbGV4KDAsIDApLCAxNCkpO1xuXHR9XG5cdHJldHVybiBzdGF0ZTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnN0YXRlQXNTdHJpbmcgPSBmdW5jdGlvbihvbmx5UG9zc2libGUpIHtcblxuXHR2YXIgbnVtQW1wbGl0dWRlcyA9IHRoaXMubnVtQW1wbGl0dWRlcygpO1xuXHRpZighdGhpcy5zdGF0ZSkge1xuXHRcdHJldHVybiBcIkVycm9yOiBjaXJjdWl0IGlzIG5vdCBpbml0aWFsaXplZC4gUGxlYXNlIGNhbGwgaW5pdFN0YXRlKCkgb3IgcnVuKCkgbWV0aG9kLlwiO1xuXHR9XG5cblx0dmFyIHMgPSBcIlwiO1xuXHR2YXIgY291bnQgPSAwO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgbnVtQW1wbGl0dWRlczsgaSsrKSB7XG5cdFx0dmFyIHN0YXRlID0gbWF0aC5yb3VuZCh0aGlzLnN0YXRlW2ldIHx8IG1hdGguY29tcGxleCgwLCAwKSwgMTQpO1xuXHRcdGlmKCFvbmx5UG9zc2libGUgfHwgKHN0YXRlLnJlIHx8IHN0YXRlLmltKSkge1xuXHRcdFx0dmFyIG0gPSBtYXRoLnBvdyhtYXRoLmFicyhzdGF0ZSksIDIpICogMTAwO1xuXG5cdFx0XHQvLyBiaW5hcnkgc3RyaW5nXG5cdFx0XHR2YXIgYmluID0gaS50b1N0cmluZygyKTtcblx0XHRcdHdoaWxlKGJpbi5sZW5ndGggPCB0aGlzLm51bVF1Yml0cykge1xuXHRcdFx0XHRiaW4gPSBcIjBcIiArIGJpbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gcmlnaHQgYWxpZ25lZCBwZXJjZW50XG5cdFx0XHR2YXIgcGVyYyA9IG0udG9GaXhlZCg1KTtcblx0XHRcdHdoaWxlKHBlcmMubGVuZ3RoIDwgOSkge1xuXHRcdFx0XHRwZXJjID0gXCIgXCIgKyBwZXJjO1xuXHRcdFx0fVxuXG5cdFx0XHRzICs9IHRoaXMuZm9ybWF0Q29tcGxleChzdGF0ZSwgeyBmaXhlZFdpZHRoOiB0cnVlLCBkZWNpbWFsUGxhY2VzOiA4LCBpb3RhQ2hhcjogXCJpXCIgfSkgKyBcInxcIiArIGJpbiArIFwiPlxcdFwiICsgcGVyYyArIFwiJVxcblwiO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5wcmludCA9IGZ1bmN0aW9uKG9ubHlQb3NzaWJsZSkge1xuXHRjb25zb2xlLmxvZyh0aGlzLnN0YXRlQXNTdHJpbmcob25seVBvc3NpYmxlKSk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ290Q2xhc3NpY2FsQ29udHJvbCA9IGZ1bmN0aW9uKCkge1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IHRoaXMubnVtQ29scygpOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdvdE1lYXN1cmVtZW50ID0gZnVuY3Rpb24oKSB7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgdGhpcy5udW1Db2xzKCk7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gdGhpcy5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHRpZihnYXRlLm5hbWUgPT0gXCJtZWFzdXJlXCIpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuY3JlZ0NvdW50ID0gZnVuY3Rpb24oKSB7XG5cdHZhciBjcmVnQ291bnQgPSAwO1xuXHRmb3IodmFyIGNyZWdOYW1lIGluIHRoaXMuY3JlZ3MpIHtcblx0XHRjcmVnQ291bnQrKztcblx0fVxuXHRyZXR1cm4gY3JlZ0NvdW50O1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldENyZWdzID0gZnVuY3Rpb24oKSB7XG5cdHZhciByZXMgPSB7fTtcblx0Zm9yKHZhciBjcmVnIGluIHRoaXMuY3JlZ3MpIHtcblx0XHRyZXNbY3JlZ10gPSB0aGlzLmdldENyZWdWYWx1ZShjcmVnKTtcblx0fVxuXHRyZXR1cm4gcmVzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNyZWdzQXNTdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0dmFyIHMgPSBcInJlZ1xcdGJpblxcdGRlY1xcblwiO1xuXHRmb3IodmFyIGNyZWcgaW4gdGhpcy5jcmVncykge1xuXHRcdHZhciB2YWx1ZSA9IHRoaXMuZ2V0Q3JlZ1ZhbHVlKGNyZWcpO1xuXG5cdFx0Ly8gYmluYXJ5IHN0cmluZ1xuXHRcdHZhciBiaW4gPSB2YWx1ZS50b1N0cmluZygyKTtcblx0XHR2YXIgbGVuID0gdGhpcy5jcmVnc1tjcmVnXSA/IHRoaXMuY3JlZ3NbY3JlZ10ubGVuZ3RoIHx8IDEgOiAxO1xuXHRcdHdoaWxlKGJpbi5sZW5ndGggPCBsZW4pIHtcblx0XHRcdGJpbiA9IFwiMFwiICsgYmluO1xuXHRcdH1cblxuXHRcdHMgKz0gY3JlZyArIFwiXFx0XCIgKyBiaW4gKyBcIlxcdFwiICsgdmFsdWUgKyBcIlxcblwiO1xuXHR9XG5cdHJldHVybiBzO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuY3JlYXRlQ3JlZyA9IGZ1bmN0aW9uKGNyZWcsIGxlbikge1xuXHR0aGlzLmNyZWdzW2NyZWddID0gW107XG5cblx0Ly8gZXh0ZW5kIHJlZ2lzdGVyXG5cdHdoaWxlKHRoaXMuY3JlZ3NbY3JlZ10ubGVuZ3RoIDwgKGxlbiB8fCAxKSkge1xuXHRcdHRoaXMuY3JlZ3NbY3JlZ10ucHVzaCgwKTtcblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlbW92ZUNyZWcgPSBmdW5jdGlvbihjcmVnKSB7XG5cdC8vIHJlbW92ZSByZWZlcmVuY2UgdG8gY3JlZ1xuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHR2YXIgcmVtb3ZlR2F0ZXMgPSBbXTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5vcHRpb25zKSB7XG5cdFx0XHRcdC8vIGdhdGUgd3JpdGluZyB0byBjcmVnXG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucy5jcmVnICYmIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgJiYgZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSA9PSBjcmVnKSB7XG5cdFx0XHRcdFx0aWYocmVtb3ZlR2F0ZXMuaW5kZXhPZihnYXRlLmlkKSA8IDApIHtcblx0XHRcdFx0XHRcdHJlbW92ZUdhdGVzLnB1c2goZ2F0ZS5pZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gZ2F0ZSBjb250cm9sbGVkIGJ5IGNyZWdcblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnID09IGNyZWcpIHtcblx0XHRcdFx0XHRkZWxldGUgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIGRlbGV0ZSByZWdpc3RlclxuXHRkZWxldGUgdGhpcy5jcmVnc1tjcmVnXTtcblxuXHRmb3IodmFyIGkgPSAwOyBpIDwgcmVtb3ZlR2F0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHR0aGlzLnJlbW92ZUdhdGUocmVtb3ZlR2F0ZXNbaV0pO1xuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVuYW1lQ3JlZyA9IGZ1bmN0aW9uKG9sZE5hbWUsIG5ld05hbWUpIHtcblx0Ly8gcmVuYW1lIHJlZmVyZW5jZVxuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gdGhpcy5nYXRlc1t3aXJlXVtjb2x1bW5dO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLm9wdGlvbnMpIHtcblx0XHRcdFx0Ly8gZ2F0ZSB3cml0aW5nIHRvIGNyZWdcblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zLmNyZWcgJiYgZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSAmJiBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lID09IG9sZE5hbWUpIHtcblx0XHRcdFx0XHRnYXRlLm9wdGlvbnMuY3JlZy5uYW1lID0gbmV3TmFtZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGdhdGUgY29udHJvbGxlZCBieSBjcmVnXG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyA9PSBvbGROYW1lKSB7XG5cdFx0XHRcdFx0Z2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnID0gbmV3TmFtZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIHJlbmFtZSByZWdpc3RlclxuXHR0aGlzLmNyZWdzW25ld05hbWVdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmNyZWdzW29sZE5hbWVdKSk7XG5cdGRlbGV0ZSB0aGlzLmNyZWdzW29sZE5hbWVdO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm1pbkNyZWdTaXplID0gZnVuY3Rpb24oY3JlZykge1xuXHR2YXIgbGFyZ2VzdEJpdCA9IDA7XG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdhdGVzW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRpZihnYXRlICYmIGdhdGUub3B0aW9ucykge1xuXHRcdFx0XHQvLyBnYXRlIHdyaXRpbmcgdG8gY3JlZ1xuXHRcdFx0XHRpZihnYXRlLm9wdGlvbnMuY3JlZyAmJiBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lICYmIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgPT0gY3JlZykge1xuXHRcdFx0XHRcdHZhciB0YXJnZXRCaXQgPSBwYXJzZUludChnYXRlLm9wdGlvbnMuY3JlZy5iaXQgfHwgMCk7XG5cdFx0XHRcdFx0aWYoaXNOYU4odGFyZ2V0Qml0KSkge1xuXHRcdFx0XHRcdFx0dGFyZ2V0Qml0ID0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYodGFyZ2V0Qml0ID4gbGFyZ2VzdEJpdCkge1xuXHRcdFx0XHRcdFx0bGFyZ2VzdEJpdCA9IHRhcmdldEJpdDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBnYXRlIGNvbnRyb2xsZWQgYnkgY3JlZ1xuXHRcdFx0XHRpZihnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcgPT0gY3JlZykge1xuXHRcdFx0XHRcdHZhciBsYiA9IE1hdGguZmxvb3IoTWF0aC5sb2cyKGdhdGUub3B0aW9ucy5jb25kaXRpb24udmFsdWUpKTtcblx0XHRcdFx0XHRpZihsYiA+IGxhcmdlc3RCaXQpIHtcblx0XHRcdFx0XHRcdGxhcmdlc3RCaXQgPSBsYjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbGFyZ2VzdEJpdCArIDE7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVzaXplQ3JlZyA9IGZ1bmN0aW9uKGNyZWcsIHNpemUpIHtcblx0aWYoc2l6ZSA8IHRoaXMubWluQ3JlZ1NpemUoY3JlZykpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR3aGlsZSh0aGlzLmNyZWdzW2NyZWddLmxlbmd0aCA8IHNpemUpIHtcblx0XHR0aGlzLmNyZWdzW2NyZWddLnB1c2goMCk7XG5cdH1cblxuXHR3aGlsZSh0aGlzLmNyZWdzW2NyZWddLmxlbmd0aCA+IHNpemUpIHtcblx0XHR0aGlzLmNyZWdzW2NyZWddLnBvcCgpO1xuXHR9XG5cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRDcmVnID0gZnVuY3Rpb24oY3JlZykge1xuXHRyZXR1cm4gdGhpcy5jcmVnc1tjcmVnXTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5zZXRDcmVnQml0ID0gZnVuY3Rpb24oY3JlZywgY2JpdCwgdmFsdWUpIHtcblx0Ly8gc2VlIGlmIGNiaXQgaXMgaW50ZWdlclxuXHR2YXIgYml0ID0gcGFyc2VJbnQoY2JpdCk7XG5cdGlmKGlzTmFOKGJpdCkpIHtcblx0XHR0aHJvdyBcIkVycm9yOiBpbnZhbGlkIFxcXCJjYml0XFxcIiBhcmd1bWVudCB0byBcXFwic2V0Q3JlZ0JpdFxcXCIgbWV0aG9kOiBleHBlY3RlZCBcXFwiaW50ZWdlclxcXCIgZ290IFxcXCJcIiArIHR5cGVvZiBjYml0ICsgXCJcXFwiLlwiO1xuXHR9XG5cblx0Ly8gY3JlYXRlIHJlZ2lzdGVyIGlmIGRvZXMgbm90IGV4aXN0XG5cdGlmKCF0aGlzLmNyZWdzW2NyZWddKSB7XG5cdFx0dGhpcy5jcmVnc1tjcmVnXSA9IFtdO1xuXHR9XG5cblx0Ly8gZXh0ZW5kIHJlZ2lzdGVyIGlmIG5lZWRlZFxuXHR3aGlsZShiaXQgPj0gdGhpcy5jcmVnc1tjcmVnXS5sZW5ndGgpIHtcblx0XHR0aGlzLmNyZWdzW2NyZWddLnB1c2goMCk7XG5cdH1cblxuXHQvLyBzZXQgYml0XG5cdHRoaXMuY3JlZ3NbY3JlZ11bYml0XSA9IHZhbHVlID8gMSA6IDA7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ2V0Q3JlZ0JpdCA9IGZ1bmN0aW9uKGNyZWcsIGNiaXQpIHtcblx0aWYoIXRoaXMuY3JlZ3NbY3JlZ10pIHtcblx0XHR0aHJvdyBcIkVycm9yOiBcXFwiZ2V0Q3JlZ0JpdFxcXCI6IHVua25vd24gcmVnaXN0ZXIgXFxcIlwiICsgY3JlZyArIFwiXFxcIi5cIjtcblx0fVxuXG5cdHZhciBiaXQgPSBwYXJzZUludChjYml0KTtcblx0aWYoaXNOYU4oYml0KSB8fCBiaXQgPj0gdGhpcy5jcmVnc1tjcmVnXS5sZW5ndGgpIHtcblx0XHR0aHJvdyBcIkVycm9yOiBcXFwiZ2V0Q3JlZ0JpdFxcXCI6IGJpdCBcXFwiXCIgKyBjYml0ICsgXCJcXFwiIG5vdCBmb3VuZC5cIjtcblx0fVxuXHRyZXR1cm4gdGhpcy5jcmVnc1tjcmVnXVtiaXRdO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNyZWdCYXNlID0gZnVuY3Rpb24oY3JlZykge1xuXHRpZighdGhpcy5jcmVnc1tjcmVnXSkge1xuXHRcdHRocm93IFwiRXJyb3I6IFxcXCJnZXRDcmVnQml0XFxcIjogdW5rbm93biByZWdpc3RlciBcXFwiXCIgKyBjcmVnICsgXCJcXFwiLlwiO1xuXHR9XG5cblx0dmFyIGJhc2UgPSAwO1xuXHRmb3IodmFyIHJlZ05hbWUgaW4gdGhpcy5jcmVncykge1xuXHRcdGlmKHJlZ05hbWUgPT0gY3JlZykge1xuXHRcdFx0cmV0dXJuIGJhc2U7XG5cdFx0fVxuXHRcdGJhc2UgKz0gdGhpcy5jcmVnc1tyZWdOYW1lXS5sZW5ndGg7XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5jcmVnVG90YWxCaXRzID0gZnVuY3Rpb24oKSB7XG5cdHZhciBiaXRzID0gMDtcblx0Zm9yKHZhciByZWdOYW1lIGluIHRoaXMuY3JlZ3MpIHtcblx0XHRiaXRzICs9IHRoaXMuY3JlZ3NbcmVnTmFtZV0ubGVuZ3RoO1xuXHR9XG5cdHJldHVybiBiaXRzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldENyZWdWYWx1ZSA9IGZ1bmN0aW9uKGNyZWcpIHtcblx0aWYoIXRoaXMuY3JlZ3NbY3JlZ10pIHtcblx0XHR0aHJvdyBcIkVycm9yOiBcXFwiZ2V0Q3JlZ0JpdFxcXCI6IHVua25vd24gcmVnaXN0ZXIgXFxcIlwiICsgY3JlZyArIFwiXFxcIi5cIjtcblx0fVxuXG5cdHZhciBsZW4gPSB0aGlzLmNyZWdzW2NyZWddLmxlbmd0aDtcblx0dmFyIHZhbHVlID0gMDtcblx0Zm9yKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0aWYodGhpcy5jcmVnc1tjcmVnXVtpXSkge1xuXHRcdFx0dmFsdWUgKz0gbWF0aC5wb3coMiwgaSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIHNpbXVsYXRlcyBtZWFzdXJlbWVudCBvZiBhbGwgcXViaXRzIG9uIGN1cnJlbnQgc3RhdGUgdmVjdG9yLCB3aXRob3V0IG1vZGlmeWluZyBzdGF0ZVxuLy8gICBSZXR1cm5zIGFycmF5IG9mIDBzIGFuZCAxcyBmb3IgZWFjaCBxdWJpdC4gXG4vLyAgIEZvciBleGFtcGxlLCBiZWxsIHN0YXRlIHdpbGwgcmV0dXJuOiBbMCwgMF0gb3IgWzEsIDFdXG4vLyAgIElmIHlvdSBuZWVkIG11bHRpcGxlIHNob3RzIHRoZW4gdXNlIFwibWVhc3VyZUFsbE11bHRpc2hvdFwiIG1ldGhvZCAoaXQgcnVucyBtdWNoIGZhc3RlcikuXG4vL1xuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm1lYXN1cmVBbGwgPSBmdW5jdGlvbihmb3JjZSkge1xuXHRpZih0aGlzLmNvbGxhcHNlZCAmJiB0aGlzLmNvbGxhcHNlZC5sZW5ndGggPT0gdGhpcy5udW1RdWJpdHMgJiYgIWZvcmNlKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29sbGFwc2VkO1xuXHR9XG5cblx0dGhpcy5jb2xsYXBzZWQgPSBbXTtcblxuXHR2YXIgcmFuZG9tV2VpZ2h0ID0gTWF0aC5yYW5kb20oKTtcblx0Zm9yKHZhciBpcyBpbiB0aGlzLnN0YXRlKSB7XG5cdFx0dmFyIHN0YXRlID0gbWF0aC5yb3VuZCh0aGlzLnN0YXRlW2lzXSwgMTQpO1xuXHRcdGlmKHN0YXRlLnJlIHx8IHN0YXRlLmltKSB7XG5cdFx0XHR2YXIgY2hhbmNlID0gbWF0aC5yb3VuZChtYXRoLnBvdyhtYXRoLmFicyhzdGF0ZSksIDIpLCAxNCk7XG5cdFx0XHRyYW5kb21XZWlnaHQgLT0gY2hhbmNlO1xuXHRcdFx0aWYocmFuZG9tV2VpZ2h0IDw9IDApIHtcblx0XHRcdFx0dmFyIGkgPSBwYXJzZUludChpcyk7XG5cdFx0XHRcdGlmKHRoaXMucmV2ZXJzZUJpdE9yZGVyKSB7XG5cdFx0XHRcdFx0Zm9yKHZhciBxID0gdGhpcy5udW1RdWJpdHMgLSAxOyBxID49IDA7IHEtLSkge1xuXHRcdFx0XHRcdFx0dGhpcy5jb2xsYXBzZWQucHVzaCgxIDw8IHEgJiBpID8gMSA6IDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRmb3IodmFyIHEgPSAwOyBxIDwgdGhpcy5udW1RdWJpdHM7IHErKykge1xuXHRcdFx0XHRcdFx0dGhpcy5jb2xsYXBzZWQucHVzaCgxIDw8IHEgJiBpID8gMSA6IDApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb2xsYXBzZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gVGhpcyBzaG9sZCBuZXZlciBoYXBwZW4sIGJ1dCBcIm5hdHVyZSBpcyBub3QgY2xhc3NpY2FsXCIgOilcblx0aWYoIXRoaXMuY29sbGFwc2VkLmxlbmd0aCkge1xuXHRcdHdoaWxlKHRoaXMuY29sbGFwc2VkLmxlbmd0aCA8IHRoaXMubnVtUXViaXRzKSB7XG5cdFx0XHR0aGlzLmNvbGxhcHNlZC5wdXNoKDApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdGhpcy5jb2xsYXBzZWQ7XG59O1xuXG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIHNpbXVsYXRlcyBtZWFzdXJlbWVudCBvZiBhbGwgcXViaXRzIG9uIGN1cnJlbnQgc3RhdGUgdmVjdG9yLCB3aXRob3V0IG1vZGlmeWluZyBzdGF0ZSwgbXVsdGlwbGUgdGltZXNcbi8vICAgUmV0dXJucyBvYmplY3QgKGRpY3Rpb25hcnkpIHdpdGggbWVhc3VyZWQgdmFsdWVzIChiaW5hcnkpIGFzIGtleXMgYW5kIGNvdW50cyBhcyB2YWx1ZXNcbi8vICAgRm9yIGV4YW1wbGUsIDEwMjQgc2hvdHMgb24gYmVsbCBzdGF0ZSB3aWxsIHJldHVybiBzb21ldGhpbmcgbGlrZTogeyBcIjAwXCI6IDUxNCwgXCIxMVwiOiA1MTAgfVxuLy9cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5tZWFzdXJlQWxsTXVsdGlzaG90ID0gZnVuY3Rpb24oc2hvdHMpIHtcblx0c2hvdHMgPSBzaG90cyB8fCAxO1xuXG5cdHZhciBjb3VudHMgPSB7fTtcblxuXHR2YXIgcmFuZG9tV2VpZ2h0cyA9IFtdO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgc2hvdHM7IGkrKykge1xuXHRcdHJhbmRvbVdlaWdodHMucHVzaChNYXRoLnJhbmRvbSgpKTtcblx0fVxuXG5cdHZhciBzaG90Q291bnQgPSAwO1xuXHRkbyB7XG5cdFx0Zm9yKHZhciBpcyBpbiB0aGlzLnN0YXRlKSB7XG5cdFx0XHR2YXIgc3RhdGUgPSBtYXRoLnJvdW5kKHRoaXMuc3RhdGVbaXNdLCAxNCk7XG5cdFx0XHRpZihzdGF0ZS5yZSB8fCBzdGF0ZS5pbSkge1xuXHRcdFx0XHR2YXIgY2hhbmNlID0gbWF0aC5yb3VuZChtYXRoLnBvdyhtYXRoLmFicyhzdGF0ZSksIDIpLCAxNCk7XG5cblx0XHRcdFx0Zm9yKHZhciBzaCA9IDA7IHNoIDwgc2hvdHM7IHNoKyspIHtcblx0XHRcdFx0XHRpZihyYW5kb21XZWlnaHRzW3NoXSA+IDApIHtcblx0XHRcdFx0XHRcdHJhbmRvbVdlaWdodHNbc2hdIC09IGNoYW5jZTtcblxuXHRcdFx0XHRcdFx0aWYocmFuZG9tV2VpZ2h0c1tzaF0gPD0gMCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgYmluID0gcGFyc2VJbnQoaXMpLnRvU3RyaW5nKDIpO1xuXHRcdFx0XHRcdFx0XHR3aGlsZShiaW4ubGVuZ3RoIDwgdGhpcy5udW1RdWJpdHMpIHtcblx0XHRcdFx0XHRcdFx0XHRiaW4gPSBcIjBcIiArIGJpbjtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmKGNvdW50c1tiaW5dKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y291bnRzW2Jpbl0rKztcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRjb3VudHNbYmluXSA9IDE7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRzaG90Q291bnQrKztcblxuXHRcdFx0XHRcdFx0XHRpZihzaG90Q291bnQgPT0gc2hvdHMpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gY291bnRzO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9IHdoaWxlKHNob3RDb3VudCA8IHNob3RzKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm1lYXN1cmUgPSBmdW5jdGlvbih3aXJlLCBjcmVnLCBjYml0LCBmb3JjZSkge1xuXHRpZihmb3JjZSB8fCAhdGhpcy5jb2xsYXBzZWQgfHwgdGhpcy5jb2xsYXBzZWQubGVuZ3RoICE9IHRoaXMubnVtUXViaXRzKSB7XG5cdFx0dGhpcy5tZWFzdXJlQWxsKGZvcmNlKTtcblx0fVxuXG5cdHZhciB2YWwgPSB0aGlzLmNvbGxhcHNlZFt3aXJlXTtcblxuXHRpZihjcmVnICYmIHR5cGVvZiBjYml0ICE9IFwidW5kZWZpbmVkXCIpIHtcblx0XHR0aGlzLnNldENyZWdCaXQoY3JlZywgY2JpdCwgdmFsKTtcblx0fVxuXG5cdHJldHVybiB2YWw7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucHJvYmFiaWxpdGllcyA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnByb2IgPSBbXTtcblxuXHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdHRoaXMucHJvYi5wdXNoKDApO1xuXHR9XG5cblx0Zm9yKHZhciBpcyBpbiB0aGlzLnN0YXRlKSB7XG5cdFx0dmFyIGkgPSBwYXJzZUludChpcyk7XG5cblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGJpdCA9IG51bGw7XG5cblx0XHRcdGlmKHRoaXMucmV2ZXJzZUJpdE9yZGVyKSB7XG5cdFx0XHRcdGJpdCA9IG1hdGgucG93KDIsICh0aGlzLm51bVF1Yml0cyAtIDEpIC0gd2lyZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRiaXQgPSBtYXRoLnBvdygyLCB3aXJlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYoaSAmIGJpdCkge1xuXHRcdFx0XHR2YXIgc3RhdGUgPSB0aGlzLnN0YXRlW2lzXTtcblx0XHRcdFx0aWYoc3RhdGUucmUgfHwgc3RhdGUuaW0pIHtcblx0XHRcdFx0XHR0aGlzLnByb2Jbd2lyZV0gKz0gbWF0aC5wb3cobWF0aC5hYnMoc3RhdGUpLCAyKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0dGhpcy5wcm9iW3dpcmVdID0gbWF0aC5yb3VuZCh0aGlzLnByb2Jbd2lyZV0sIDE0KTtcblx0fVxuXG5cdHJldHVybiB0aGlzLnByb2I7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucHJvYmFiaWxpdHkgPSBmdW5jdGlvbih3aXJlKSB7XG5cdGlmKCF0aGlzLnByb2IgfHwgdGhpcy5wcm9iLmxlbmd0aCAhPSB0aGlzLm51bVF1Yml0cykge1xuXHRcdHRoaXMucHJvYmFiaWxpdGllcygpO1xuXHR9XG5cblx0cmV0dXJuIHRoaXMucHJvYlt3aXJlXTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5kZW5zaXR5TWF0cml4ID0gZnVuY3Rpb24oKSB7XG5cdHZhciBkZW5zaXR5ID0gW107XG5cdHZhciBudW1BbXBsaXR1ZGVzID0gdGhpcy5udW1BbXBsaXR1ZGVzKCk7XG5cdGZvcihyb3cgPSAwOyByb3cgPCBudW1BbXBsaXR1ZGVzOyByb3crKykge1xuXHRcdHZhciByID0gW107XG5cdFx0dmFyIHJvd1ZhbCA9IHRoaXMuc3RhdGVbcm93XSB8fCBtYXRoLmNvbXBsZXgoMCwgMCk7XG5cdFx0Zm9yKHZhciBjb2wgPSAwOyBjb2wgPCBudW1BbXBsaXR1ZGVzOyBjb2wrKykge1xuXHRcdFx0dmFyIGNvbFZhbCA9IHRoaXMuc3RhdGVbY29sXSB8fCBtYXRoLmNvbXBsZXgoMCwgMCk7XG5cdFx0XHRpZihjb2xWYWwucmUgfHwgY29sVmFsLmltKSB7XG5cdFx0XHRcdGNvbFZhbCA9IG1hdGguY29uaihjb2xWYWwpO1xuXHRcdFx0fVxuXHRcdFx0ci5wdXNoKG1hdGgubXVsdGlwbHkocm93VmFsLCBjb2xWYWwpKTtcblx0XHR9XG5cdFx0ZGVuc2l0eS5wdXNoKHIpO1xuXHR9XG5cdHJldHVybiBkZW5zaXR5O1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnBhcnRpYWxUcmFjZSA9IGZ1bmN0aW9uKHF1Yml0KSB7XG5cblx0ZnVuY3Rpb24gaW5zZXJ0Qml0KGlucHV0LCBwb3MsIGJpdCkge1xuXHRcdHZhciBvdXQgPSBpbnB1dCA8PCAxO1xuXHRcdHZhciBtID0gKDIgPDwgcG9zKSAtIDE7XG5cdFx0dmFyIHBvc0JpdCA9IDEgPDwgcG9zO1xuXHRcdHZhciBvdXQgPSAob3V0IF4gKChvdXQgXiBpbnB1dCkgJiBtKSkgfCBwb3NCaXQ7XG5cdFx0aWYoIWJpdCkge1xuXHRcdFx0b3V0ID0gb3V0IF4gcG9zQml0O1xuXHRcdH1cblx0XHRyZXR1cm4gb3V0O1xuXHR9XG5cblx0dmFyIHRyYWNlID0gW107XG5cblx0dmFyIHVudXNlZENvdW50ID0gdGhpcy5udW1RdWJpdHMgLSAxO1xuXHR2YXIgdW51c2VkTGVuID0gbWF0aC5wb3coMiwgdW51c2VkQ291bnQpO1xuXG5cdHZhciBxcG9zID0gbnVsbDtcblx0aWYodGhpcy5yZXZlcnNlQml0T3JkZXIpIHtcblx0XHRxcG9zID0gKHRoaXMubnVtUXViaXRzIC0gMSkgLSBxdWJpdDtcblx0fSBlbHNlIHtcblx0XHRxcG9zID0gcXViaXQ7XG5cdH1cblxuXHRmb3IodmFyIGVsID0gMDsgZWwgPCA0OyBlbCsrKSB7XG5cdFx0dHJhY2UucHVzaChtYXRoLmNvbXBsZXgoMCwgMCkpO1xuXHRcdHZhciBiYXNlID0gdW51c2VkTGVuO1xuXHRcdHdoaWxlKGJhc2UtLSkge1xuXHRcdFx0dmFyIHJvdyA9IGluc2VydEJpdChiYXNlLCBxcG9zLCBlbCAmIDIgPyAxIDogMCk7XG5cdFx0XHRpZih0aGlzLnN0YXRlW3Jvd10pIHtcblx0XHRcdFx0dmFyIGNvbCA9IGluc2VydEJpdChiYXNlLCBxcG9zLCBlbCAmIDEgPyAxIDogMCk7XG5cdFx0XHRcdGlmKHRoaXMuc3RhdGVbY29sXSkge1xuXHRcdFx0XHRcdHRyYWNlW2VsXSA9IG1hdGguYWRkKHRyYWNlW2VsXSwgbWF0aC5tdWx0aXBseSh0aGlzLnN0YXRlW3Jvd10sIG1hdGguY29uaih0aGlzLnN0YXRlW2NvbF0pKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIFtcblx0XHRbIHRyYWNlWzBdLCB0cmFjZVsxXSBdLFxuXHRcdFsgdHJhY2VbMl0sIHRyYWNlWzNdIF1cblx0XTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmFuZ2xlcyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgYW5nbGVzID0gW107XG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0YW5nbGVzLnB1c2goeyB0aGV0YTogMCwgcGhpOiAwIH0pO1xuXHR9XG5cblx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHR2YXIgdHJhY2UgPSB0aGlzLnBhcnRpYWxUcmFjZSh3aXJlKTtcblx0XHR2YXIgYWxwaGEgPSBtYXRoLnJvdW5kKG1hdGguc3FydCh0cmFjZVswXVswXSksIDEyKTtcblx0XHR2YXIgYmV0YSA9IG1hdGgucm91bmQobWF0aC5tdWx0aXBseSh0cmFjZVsxXVswXSwgbWF0aC5zcXJ0KDIpKSwgMTIpO1xuXHRcdHZhciByYWRpdXMgPSBtYXRoLnJvdW5kKG1hdGguYWJzKG1hdGguc3FydCgyKm1hdGguYWJzKG1hdGgudHJhY2UobWF0aC5wb3codHJhY2UsIDIpKSktMSkpLCAxMik7XG5cblx0XHR2YXIgdGhldGEgPSBtYXRoLm11bHRpcGx5KDIsIG1hdGguYWNvcyhhbHBoYSkpO1xuXHRcdHZhciBwaGkgPSAwO1xuXG5cdFx0aWYoIShtYXRoLnJvdW5kKGJldGEucmUsIDgpID09IDAgJiYgbWF0aC5yb3VuZChiZXRhLmltLCA4KSA9PSAwKSkge1xuXHRcdFx0cGhpID0gbWF0aC5tdWx0aXBseShtYXRoLmNvbXBsZXgoMCwgLTEpLCBtYXRoLmxvZyhtYXRoLm11bHRpcGx5KGJldGEsIG1hdGguY3NjKG1hdGguZGl2aWRlKHRoZXRhLCAyKSkpKSkucmU7XG5cdFx0XHRpZihpc05hTihwaGkpKSB7XG5cdFx0XHRcdHBoaSA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0YW5nbGVzW3dpcmVdLnRoZXRhID0gbWF0aC5yb3VuZChtYXRoLmFicyh0aGV0YSksIDEyKTtcblx0XHRhbmdsZXNbd2lyZV0ucGhpID0gbWF0aC5yb3VuZChwaGksIDEyKTtcblx0XHRhbmdsZXNbd2lyZV0udGhldGFEZWcgPSBtYXRoLnJvdW5kKG1hdGgubXVsdGlwbHkobWF0aC5hYnModGhldGEpLCAoMTgwIC8gbWF0aC5waSkpLCA3KTtcblx0XHRhbmdsZXNbd2lyZV0ucGhpRGVnID0gbWF0aC5yb3VuZChtYXRoLm11bHRpcGx5KHBoaSwgKDE4MCAvIG1hdGgucGkpKSwgNyk7XG5cdFx0YW5nbGVzW3dpcmVdLnJhZGl1cyA9IG1hdGgucm91bmQocmFkaXVzLCA3KTtcblx0fVxuXG5cdHJldHVybiBhbmdsZXM7XG59O1xuXG5cbi8vXG4vLyBPcHRpb25zOiBcbi8vICB7IFxuLy9cdFx0dXNlR2F0ZXM6IFsgXCJyeVwiLCBcInJ6XCIsIFwiY3J6XCIsIC4uLiBdLFxuLy8gIFx0bm9NZWFzdXJlOiBmYWxzZVxuLy8gICAgICBub1Jlc2V0OiBmYWxzZVxuLy8gICAgICBub0NsYXNzaWNDb250cm9sOiBmYWxzZVxuLy8gIH1cbi8vXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yYW5kb21DaXJjdWl0ID0gZnVuY3Rpb24obnVtUXViaXRzLCBudW1HYXRlcywgb3B0aW9ucykge1xuXHR0aGlzLmluaXQobnVtUXViaXRzKTtcblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgZ2F0ZXMgPSAob3B0aW9ucy51c2VHYXRlcyAmJiBvcHRpb25zLnVzZUdhdGVzLmxlbmd0aCkgPyBvcHRpb25zLnVzZUdhdGVzIDogT2JqZWN0LmtleXModGhpcy5iYXNpY0dhdGVzKTtcblxuXHRpZihvcHRpb25zLm5vTWVhc3VyZSAmJiBnYXRlcy5pbmRleE9mKFwibWVhc3VyZVwiKSA+PSAwKSB7XG5cdFx0Z2F0ZXMuc3BsaWNlKGdhdGVzLmluZGV4T2YoXCJtZWFzdXJlXCIpLCAxKTtcblx0fVxuXG5cdGlmKG9wdGlvbnMubm9SZXNldCAmJiBnYXRlcy5pbmRleE9mKFwicmVzZXRcIikgPj0gMCkge1xuXHRcdGdhdGVzLnNwbGljZShnYXRlcy5pbmRleE9mKFwicmVzZXRcIiksIDEpO1xuXHR9XG5cblx0dmFyIGdhdGVDb3VudCA9IDA7XG5cdHdoaWxlKGdhdGVDb3VudCA8IG51bUdhdGVzKSB7XG5cdFx0dmFyIGdhdGVOYW1lID0gZ2F0ZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogZ2F0ZXMubGVuZ3RoKV07XG5cdFx0dmFyIGdhdGUgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdGlmKGdhdGUpIHtcblx0XHRcdHZhciBnYXRlUXViaXRzID0gZ2F0ZS5tYXRyaXggJiYgZ2F0ZS5tYXRyaXgubGVuZ3RoID8gbWF0aC5sb2cyKGdhdGUubWF0cml4Lmxlbmd0aCkgOiAxO1xuXG5cdFx0XHRpZihnYXRlUXViaXRzIDw9IG51bVF1Yml0cykge1xuXHRcdFx0XHQvLyBnYXRlIHdpcmVzXG5cdFx0XHRcdHZhciBnYXRlV2lyZXMgPSBbXTtcblx0XHRcdFx0d2hpbGUoZ2F0ZVdpcmVzLmxlbmd0aCA8IGdhdGVRdWJpdHMpIHtcblx0XHRcdFx0XHR2YXIgZ2F0ZVdpcmUgPSAtMTtcblx0XHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0XHRnYXRlV2lyZSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIG51bVF1Yml0cyk7XG5cdFx0XHRcdFx0fSB3aGlsZShnYXRlV2lyZXMuaW5kZXhPZihnYXRlV2lyZSkgPj0gMCk7XG5cdFx0XHRcdFx0Z2F0ZVdpcmVzLnB1c2goZ2F0ZVdpcmUpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIG9wdCA9IHt9O1xuXG5cdFx0XHRcdC8vIGdhdGUgcGFyYW1zXG5cdFx0XHRcdGlmKGdhdGUucGFyYW1zICYmIGdhdGUucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0XHRcdHZhciBwYXJhbXMgPSB7fTtcblx0XHRcdFx0XHRnYXRlLnBhcmFtcy5tYXAoZnVuY3Rpb24ocGFyYW1OYW1lKSB7XG5cdFx0XHRcdFx0XHRwYXJhbXNbcGFyYW1OYW1lXSA9IE1hdGguUEkgKiAyICogTWF0aC5yYW5kb20oKTtcblxuXHRcdFx0XHRcdFx0Ly8gLVBJLi5QSVxuXHRcdFx0XHRcdFx0aWYocGFyYW1zW3BhcmFtTmFtZV0gPiBNYXRoLlBJKSB7XG5cdFx0XHRcdFx0XHRcdHBhcmFtc1twYXJhbU5hbWVdID0gTWF0aC5QSSAtIHBhcmFtc1twYXJhbU5hbWVdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdG9wdC5wYXJhbXMgPSBwYXJhbXM7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihnYXRlTmFtZSA9PSBcIm1lYXN1cmVcIikge1xuXHRcdFx0XHRcdC8vIG1lYXN1cmVtZW50IGRlc3RpbmF0aW9uXG5cdFx0XHRcdFx0b3B0LmNyZWcgPSB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImNcIixcblx0XHRcdFx0XHRcdGJpdDogZ2F0ZVdpcmVzWzBdXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZighb3B0aW9ucy5ub0NsYXNzaWNDb250cm9sKSB7XG5cdFx0XHRcdFx0XHQvLyBtYXliZSBhZGQgY29uZGl0aW9uXG5cdFx0XHRcdFx0XHRpZihNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA0KSA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBjcmVnQml0cyA9IHRoaXMuY3JlZ1RvdGFsQml0cygpO1xuXHRcdFx0XHRcdFx0XHRpZihjcmVnQml0cykge1xuXHRcdFx0XHRcdFx0XHRcdG9wdC5jb25kaXRpb24gPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjcmVnOiBcImNcIixcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF0aC5wb3coMiwgY3JlZ0JpdHMpKSlcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dGhpcy5hcHBlbmRHYXRlKGdhdGVOYW1lLCBnYXRlV2lyZXMsIG9wdCk7XG5cdFx0XHRcdGdhdGVDb3VudCsrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJhbmRvbVVuaXRhcnkgPSBmdW5jdGlvbihudW1RdWJpdHMpIHtcblx0dmFyIGNpcmMgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyYy5yYW5kb21DaXJjdWl0KChudW1RdWJpdHMgfHwgMSksIChudW1RdWJpdHMgfHwgMSkgKiA4LCB7XG5cdFx0dXNlR2F0ZXM6IFsgXCJyeFwiLCBcInJ6XCIsIFwiY3pcIiBdLFxuXHRcdG5vTWVhc3VyZTogdHJ1ZSxcblx0XHRub1Jlc2V0OiB0cnVlLFxuXHRcdG5vQ2xhc3NpY0NvbnRyb2w6IHRydWVcblx0fSk7XG5cdHJldHVybiBjaXJjLmNpcmN1aXRNYXRyaXgoKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5ldWxlckFuZ2xlc1pZWiA9IGZ1bmN0aW9uKGlucHV0TWF0cml4KSB7XG5cdHZhciBldWxlckFuZ2xlcyA9IHt0aGV0YTogbnVsbCwgcGhpOiBudWxsLCBsYW1iZGE6IG51bGwsIHBoYXNlOiBudWxsfTtcblx0dmFyIGNvZWZmID0gbWF0aC5wb3cobWF0aC5kZXQoaW5wdXRNYXRyaXgpLCAtMC41KTtcblx0ZXVsZXJBbmdsZXMucGhhc2UgPSAtMSAqIG1hdGguY29tcGxleChjb2VmZikudG9Qb2xhcigpLnBoaTtcblx0dmFyIHN1X21hdCA9IG1hdGgubXVsdGlwbHkoY29lZmYsIGlucHV0TWF0cml4KTtcblx0ZXVsZXJBbmdsZXMudGhldGEgPSAyICogbWF0aC5hdGFuMihtYXRoLmFicyhzdV9tYXRbMV1bMF0pLCBtYXRoLmFicyhzdV9tYXRbMF1bMF0pKTtcblx0dmFyIHBoaXBsYW1iZGEgPSAyICogbWF0aC5jb21wbGV4KHN1X21hdFsxXVsxXSkudG9Qb2xhcigpLnBoaTtcblx0dmFyIHBoaW1sYW1kYSA9IDIgKiBtYXRoLmNvbXBsZXgoc3VfbWF0WzFdWzBdKS50b1BvbGFyKCkucGhpO1xuXHRldWxlckFuZ2xlcy5waGkgPSAocGhpcGxhbWJkYSArIHBoaW1sYW1kYSkgLyAyLjA7XG5cdGV1bGVyQW5nbGVzLmxhbWJkYSA9IChwaGlwbGFtYmRhIC0gcGhpbWxhbWRhKSAvIDIuMDtcblx0cmV0dXJuIGV1bGVyQW5nbGVzO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBRdWFudHVtQ2lyY3VpdDtcbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbi8vIFRoaXMgaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIFRva2VuU3RyZWFtfSBsb2FkcyB0b2tlbnMgZnJvbSBhXG4vLyB7QGxpbmsgVG9rZW5Tb3VyY2V9IG9uLWRlbWFuZCwgYW5kIHBsYWNlcyB0aGUgdG9rZW5zIGluIGEgYnVmZmVyIHRvIHByb3ZpZGVcbi8vIGFjY2VzcyB0byBhbnkgcHJldmlvdXMgdG9rZW4gYnkgaW5kZXguXG4vL1xuLy8gPHA+XG4vLyBUaGlzIHRva2VuIHN0cmVhbSBpZ25vcmVzIHRoZSB2YWx1ZSBvZiB7QGxpbmsgVG9rZW4vL2dldENoYW5uZWx9LiBJZiB5b3VyXG4vLyBwYXJzZXIgcmVxdWlyZXMgdGhlIHRva2VuIHN0cmVhbSBmaWx0ZXIgdG9rZW5zIHRvIG9ubHkgdGhvc2Ugb24gYSBwYXJ0aWN1bGFyXG4vLyBjaGFubmVsLCBzdWNoIGFzIHtAbGluayBUb2tlbi8vREVGQVVMVF9DSEFOTkVMfSBvclxuLy8ge0BsaW5rIFRva2VuLy9ISURERU5fQ0hBTk5FTH0sIHVzZSBhIGZpbHRlcmluZyB0b2tlbiBzdHJlYW0gc3VjaCBhXG4vLyB7QGxpbmsgQ29tbW9uVG9rZW5TdHJlYW19LjwvcD5cblxudmFyIFRva2VuID0gcmVxdWlyZSgnLi9Ub2tlbicpLlRva2VuO1xudmFyIExleGVyID0gcmVxdWlyZSgnLi9MZXhlcicpLkxleGVyO1xudmFyIEludGVydmFsID0gcmVxdWlyZSgnLi9JbnRlcnZhbFNldCcpLkludGVydmFsO1xuXG4vLyB0aGlzIGlzIGp1c3QgdG8ga2VlcCBtZWFuaW5nZnVsIHBhcmFtZXRlciB0eXBlcyB0byBQYXJzZXJcbmZ1bmN0aW9uIFRva2VuU3RyZWFtKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gQnVmZmVyZWRUb2tlblN0cmVhbSh0b2tlblNvdXJjZSkge1xuXG5cdFRva2VuU3RyZWFtLmNhbGwodGhpcyk7XG5cdC8vIFRoZSB7QGxpbmsgVG9rZW5Tb3VyY2V9IGZyb20gd2hpY2ggdG9rZW5zIGZvciB0aGlzIHN0cmVhbSBhcmUgZmV0Y2hlZC5cblx0dGhpcy50b2tlblNvdXJjZSA9IHRva2VuU291cmNlO1xuXG5cdC8vIEEgY29sbGVjdGlvbiBvZiBhbGwgdG9rZW5zIGZldGNoZWQgZnJvbSB0aGUgdG9rZW4gc291cmNlLiBUaGUgbGlzdCBpc1xuXHQvLyBjb25zaWRlcmVkIGEgY29tcGxldGUgdmlldyBvZiB0aGUgaW5wdXQgb25jZSB7QGxpbmsgLy9mZXRjaGVkRU9GfSBpcyBzZXRcblx0Ly8gdG8ge0Bjb2RlIHRydWV9LlxuXHR0aGlzLnRva2VucyA9IFtdO1xuXG5cdC8vIFRoZSBpbmRleCBpbnRvIHtAbGluayAvL3Rva2Vuc30gb2YgdGhlIGN1cnJlbnQgdG9rZW4gKG5leHQgdG9rZW4gdG9cblx0Ly8ge0BsaW5rIC8vY29uc3VtZX0pLiB7QGxpbmsgLy90b2tlbnN9e0Bjb2RlIFt9e0BsaW5rIC8vcH17QGNvZGUgXX0gc2hvdWxkXG5cdC8vIGJlXG5cdC8vIHtAbGluayAvL0xUIExUKDEpfS5cblx0Ly9cblx0Ly8gPHA+VGhpcyBmaWVsZCBpcyBzZXQgdG8gLTEgd2hlbiB0aGUgc3RyZWFtIGlzIGZpcnN0IGNvbnN0cnVjdGVkIG9yIHdoZW5cblx0Ly8ge0BsaW5rIC8vc2V0VG9rZW5Tb3VyY2V9IGlzIGNhbGxlZCwgaW5kaWNhdGluZyB0aGF0IHRoZSBmaXJzdCB0b2tlbiBoYXNcblx0Ly8gbm90IHlldCBiZWVuIGZldGNoZWQgZnJvbSB0aGUgdG9rZW4gc291cmNlLiBGb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbixcblx0Ly8gc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIHtAbGluayBJbnRTdHJlYW19IGZvciBhIGRlc2NyaXB0aW9uIG9mXG5cdC8vIEluaXRpYWxpemluZyBNZXRob2RzLjwvcD5cblx0dGhpcy5pbmRleCA9IC0xO1xuXG5cdC8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSB7QGxpbmsgVG9rZW4vL0VPRn0gdG9rZW4gaGFzIGJlZW4gZmV0Y2hlZCBmcm9tXG5cdC8vIHtAbGluayAvL3Rva2VuU291cmNlfSBhbmQgYWRkZWQgdG8ge0BsaW5rIC8vdG9rZW5zfS4gVGhpcyBmaWVsZCBpbXByb3Zlc1xuXHQvLyBwZXJmb3JtYW5jZSBmb3IgdGhlIGZvbGxvd2luZyBjYXNlczpcblx0Ly9cblx0Ly8gPHVsPlxuXHQvLyA8bGk+e0BsaW5rIC8vY29uc3VtZX06IFRoZSBsb29rYWhlYWQgY2hlY2sgaW4ge0BsaW5rIC8vY29uc3VtZX0gdG9cblx0Ly8gcHJldmVudFxuXHQvLyBjb25zdW1pbmcgdGhlIEVPRiBzeW1ib2wgaXMgb3B0aW1pemVkIGJ5IGNoZWNraW5nIHRoZSB2YWx1ZXMgb2Zcblx0Ly8ge0BsaW5rIC8vZmV0Y2hlZEVPRn0gYW5kIHtAbGluayAvL3B9IGluc3RlYWQgb2YgY2FsbGluZyB7QGxpbmtcblx0Ly8gLy9MQX0uPC9saT5cblx0Ly8gPGxpPntAbGluayAvL2ZldGNofTogVGhlIGNoZWNrIHRvIHByZXZlbnQgYWRkaW5nIG11bHRpcGxlIEVPRiBzeW1ib2xzXG5cdC8vIGludG9cblx0Ly8ge0BsaW5rIC8vdG9rZW5zfSBpcyB0cml2aWFsIHdpdGggdGhpcyBmaWVsZC48L2xpPlxuXHQvLyA8dWw+XG5cdHRoaXMuZmV0Y2hlZEVPRiA9IGZhbHNlO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRva2VuU3RyZWFtLnByb3RvdHlwZSk7XG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJ1ZmZlcmVkVG9rZW5TdHJlYW07XG5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLm1hcmsgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIDA7XG59O1xuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5yZWxlYXNlID0gZnVuY3Rpb24obWFya2VyKSB7XG5cdC8vIG5vIHJlc291cmNlcyB0byByZWxlYXNlXG59O1xuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnNlZWsoMCk7XG59O1xuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5zZWVrID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0dGhpcy5sYXp5SW5pdCgpO1xuXHR0aGlzLmluZGV4ID0gdGhpcy5hZGp1c3RTZWVrSW5kZXgoaW5kZXgpO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0dGhpcy5sYXp5SW5pdCgpO1xuXHRyZXR1cm4gdGhpcy50b2tlbnNbaW5kZXhdO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuY29uc3VtZSA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgc2tpcEVvZkNoZWNrID0gZmFsc2U7XG5cdGlmICh0aGlzLmluZGV4ID49IDApIHtcblx0XHRpZiAodGhpcy5mZXRjaGVkRU9GKSB7XG5cdFx0XHQvLyB0aGUgbGFzdCB0b2tlbiBpbiB0b2tlbnMgaXMgRU9GLiBza2lwIGNoZWNrIGlmIHAgaW5kZXhlcyBhbnlcblx0XHRcdC8vIGZldGNoZWQgdG9rZW4gZXhjZXB0IHRoZSBsYXN0LlxuXHRcdFx0c2tpcEVvZkNoZWNrID0gdGhpcy5pbmRleCA8IHRoaXMudG9rZW5zLmxlbmd0aCAtIDE7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIG5vIEVPRiB0b2tlbiBpbiB0b2tlbnMuIHNraXAgY2hlY2sgaWYgcCBpbmRleGVzIGEgZmV0Y2hlZCB0b2tlbi5cblx0XHRcdHNraXBFb2ZDaGVjayA9IHRoaXMuaW5kZXggPCB0aGlzLnRva2Vucy5sZW5ndGg7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIG5vdCB5ZXQgaW5pdGlhbGl6ZWRcblx0XHRza2lwRW9mQ2hlY2sgPSBmYWxzZTtcblx0fVxuXHRpZiAoIXNraXBFb2ZDaGVjayAmJiB0aGlzLkxBKDEpID09PSBUb2tlbi5FT0YpIHtcblx0XHR0aHJvdyBcImNhbm5vdCBjb25zdW1lIEVPRlwiO1xuXHR9XG5cdGlmICh0aGlzLnN5bmModGhpcy5pbmRleCArIDEpKSB7XG5cdFx0dGhpcy5pbmRleCA9IHRoaXMuYWRqdXN0U2Vla0luZGV4KHRoaXMuaW5kZXggKyAxKTtcblx0fVxufTtcblxuLy8gTWFrZSBzdXJlIGluZGV4IHtAY29kZSBpfSBpbiB0b2tlbnMgaGFzIGEgdG9rZW4uXG4vL1xuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgYSB0b2tlbiBpcyBsb2NhdGVkIGF0IGluZGV4IHtAY29kZSBpfSwgb3RoZXJ3aXNlXG4vLyB7QGNvZGUgZmFsc2V9LlxuLy8gQHNlZSAvL2dldChpbnQgaSlcbi8vIC9cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbihpKSB7XG5cdHZhciBuID0gaSAtIHRoaXMudG9rZW5zLmxlbmd0aCArIDE7IC8vIGhvdyBtYW55IG1vcmUgZWxlbWVudHMgd2UgbmVlZD9cblx0aWYgKG4gPiAwKSB7XG5cdFx0dmFyIGZldGNoZWQgPSB0aGlzLmZldGNoKG4pO1xuXHRcdHJldHVybiBmZXRjaGVkID49IG47XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuXG4vLyBBZGQge0Bjb2RlIG59IGVsZW1lbnRzIHRvIGJ1ZmZlci5cbi8vXG4vLyBAcmV0dXJuIFRoZSBhY3R1YWwgbnVtYmVyIG9mIGVsZW1lbnRzIGFkZGVkIHRvIHRoZSBidWZmZXIuXG4vLyAvXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5mZXRjaCA9IGZ1bmN0aW9uKG4pIHtcblx0aWYgKHRoaXMuZmV0Y2hlZEVPRikge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG5cdFx0dmFyIHQgPSB0aGlzLnRva2VuU291cmNlLm5leHRUb2tlbigpO1xuXHRcdHQudG9rZW5JbmRleCA9IHRoaXMudG9rZW5zLmxlbmd0aDtcblx0XHR0aGlzLnRva2Vucy5wdXNoKHQpO1xuXHRcdGlmICh0LnR5cGUgPT09IFRva2VuLkVPRikge1xuXHRcdFx0dGhpcy5mZXRjaGVkRU9GID0gdHJ1ZTtcblx0XHRcdHJldHVybiBpICsgMTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG47XG59O1xuXG4vLyBHZXQgYWxsIHRva2VucyBmcm9tIHN0YXJ0Li5zdG9wIGluY2x1c2l2ZWx5Ly8vXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5nZXRUb2tlbnMgPSBmdW5jdGlvbihzdGFydCwgc3RvcCwgdHlwZXMpIHtcblx0aWYgKHR5cGVzID09PSB1bmRlZmluZWQpIHtcblx0XHR0eXBlcyA9IG51bGw7XG5cdH1cblx0aWYgKHN0YXJ0IDwgMCB8fCBzdG9wIDwgMCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdHRoaXMubGF6eUluaXQoKTtcblx0dmFyIHN1YnNldCA9IFtdO1xuXHRpZiAoc3RvcCA+PSB0aGlzLnRva2Vucy5sZW5ndGgpIHtcblx0XHRzdG9wID0gdGhpcy50b2tlbnMubGVuZ3RoIC0gMTtcblx0fVxuXHRmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBzdG9wOyBpKyspIHtcblx0XHR2YXIgdCA9IHRoaXMudG9rZW5zW2ldO1xuXHRcdGlmICh0LnR5cGUgPT09IFRva2VuLkVPRikge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdGlmICh0eXBlcyA9PT0gbnVsbCB8fCB0eXBlcy5jb250YWlucyh0LnR5cGUpKSB7XG5cdFx0XHRzdWJzZXQucHVzaCh0KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHN1YnNldDtcbn07XG5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLkxBID0gZnVuY3Rpb24oaSkge1xuXHRyZXR1cm4gdGhpcy5MVChpKS50eXBlO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuTEIgPSBmdW5jdGlvbihrKSB7XG5cdGlmICh0aGlzLmluZGV4IC0gayA8IDApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRyZXR1cm4gdGhpcy50b2tlbnNbdGhpcy5pbmRleCAtIGtdO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuTFQgPSBmdW5jdGlvbihrKSB7XG5cdHRoaXMubGF6eUluaXQoKTtcblx0aWYgKGsgPT09IDApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRpZiAoayA8IDApIHtcblx0XHRyZXR1cm4gdGhpcy5MQigtayk7XG5cdH1cblx0dmFyIGkgPSB0aGlzLmluZGV4ICsgayAtIDE7XG5cdHRoaXMuc3luYyhpKTtcblx0aWYgKGkgPj0gdGhpcy50b2tlbnMubGVuZ3RoKSB7IC8vIHJldHVybiBFT0YgdG9rZW5cblx0XHQvLyBFT0YgbXVzdCBiZSBsYXN0IHRva2VuXG5cdFx0cmV0dXJuIHRoaXMudG9rZW5zW3RoaXMudG9rZW5zLmxlbmd0aCAtIDFdO1xuXHR9XG5cdHJldHVybiB0aGlzLnRva2Vuc1tpXTtcbn07XG5cbi8vIEFsbG93ZWQgZGVyaXZlZCBjbGFzc2VzIHRvIG1vZGlmeSB0aGUgYmVoYXZpb3Igb2Ygb3BlcmF0aW9ucyB3aGljaCBjaGFuZ2Vcbi8vIHRoZSBjdXJyZW50IHN0cmVhbSBwb3NpdGlvbiBieSBhZGp1c3RpbmcgdGhlIHRhcmdldCB0b2tlbiBpbmRleCBvZiBhIHNlZWtcbi8vIG9wZXJhdGlvbi4gVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2ltcGx5IHJldHVybnMge0Bjb2RlIGl9LiBJZiBhblxuLy8gZXhjZXB0aW9uIGlzIHRocm93biBpbiB0aGlzIG1ldGhvZCwgdGhlIGN1cnJlbnQgc3RyZWFtIGluZGV4IHNob3VsZCBub3QgYmVcbi8vIGNoYW5nZWQuXG4vL1xuLy8gPHA+Rm9yIGV4YW1wbGUsIHtAbGluayBDb21tb25Ub2tlblN0cmVhbX0gb3ZlcnJpZGVzIHRoaXMgbWV0aG9kIHRvIGVuc3VyZVxuLy8gdGhhdFxuLy8gdGhlIHNlZWsgdGFyZ2V0IGlzIGFsd2F5cyBhbiBvbi1jaGFubmVsIHRva2VuLjwvcD5cbi8vXG4vLyBAcGFyYW0gaSBUaGUgdGFyZ2V0IHRva2VuIGluZGV4LlxuLy8gQHJldHVybiBUaGUgYWRqdXN0ZWQgdGFyZ2V0IHRva2VuIGluZGV4LlxuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5hZGp1c3RTZWVrSW5kZXggPSBmdW5jdGlvbihpKSB7XG5cdHJldHVybiBpO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUubGF6eUluaXQgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuaW5kZXggPT09IC0xKSB7XG5cdFx0dGhpcy5zZXR1cCgpO1xuXHR9XG59O1xuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5zZXR1cCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnN5bmMoMCk7XG5cdHRoaXMuaW5kZXggPSB0aGlzLmFkanVzdFNlZWtJbmRleCgwKTtcbn07XG5cbi8vIFJlc2V0IHRoaXMgdG9rZW4gc3RyZWFtIGJ5IHNldHRpbmcgaXRzIHRva2VuIHNvdXJjZS4vLy9cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLnNldFRva2VuU291cmNlID0gZnVuY3Rpb24odG9rZW5Tb3VyY2UpIHtcblx0dGhpcy50b2tlblNvdXJjZSA9IHRva2VuU291cmNlO1xuXHR0aGlzLnRva2VucyA9IFtdO1xuXHR0aGlzLmluZGV4ID0gLTE7XG5cdHRoaXMuZmV0Y2hlZEVPRiA9IGZhbHNlO1xufTtcblxuXG4vLyBHaXZlbiBhIHN0YXJ0aW5nIGluZGV4LCByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBuZXh0IHRva2VuIG9uIGNoYW5uZWwuXG4vLyBSZXR1cm4gaSBpZiB0b2tlbnNbaV0gaXMgb24gY2hhbm5lbC4gUmV0dXJuIC0xIGlmIHRoZXJlIGFyZSBubyB0b2tlbnNcbi8vIG9uIGNoYW5uZWwgYmV0d2VlbiBpIGFuZCBFT0YuXG4vLyAvXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5uZXh0VG9rZW5PbkNoYW5uZWwgPSBmdW5jdGlvbihpLCBjaGFubmVsKSB7XG5cdHRoaXMuc3luYyhpKTtcblx0aWYgKGkgPj0gdGhpcy50b2tlbnMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIC0xO1xuXHR9XG5cdHZhciB0b2tlbiA9IHRoaXMudG9rZW5zW2ldO1xuXHR3aGlsZSAodG9rZW4uY2hhbm5lbCAhPT0gdGhpcy5jaGFubmVsKSB7XG5cdFx0aWYgKHRva2VuLnR5cGUgPT09IFRva2VuLkVPRikge1xuXHRcdFx0cmV0dXJuIC0xO1xuXHRcdH1cblx0XHRpICs9IDE7XG5cdFx0dGhpcy5zeW5jKGkpO1xuXHRcdHRva2VuID0gdGhpcy50b2tlbnNbaV07XG5cdH1cblx0cmV0dXJuIGk7XG59O1xuXG4vLyBHaXZlbiBhIHN0YXJ0aW5nIGluZGV4LCByZXR1cm4gdGhlIGluZGV4IG9mIHRoZSBwcmV2aW91cyB0b2tlbiBvbiBjaGFubmVsLlxuLy8gUmV0dXJuIGkgaWYgdG9rZW5zW2ldIGlzIG9uIGNoYW5uZWwuIFJldHVybiAtMSBpZiB0aGVyZSBhcmUgbm8gdG9rZW5zXG4vLyBvbiBjaGFubmVsIGJldHdlZW4gaSBhbmQgMC5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLnByZXZpb3VzVG9rZW5PbkNoYW5uZWwgPSBmdW5jdGlvbihpLCBjaGFubmVsKSB7XG5cdHdoaWxlIChpID49IDAgJiYgdGhpcy50b2tlbnNbaV0uY2hhbm5lbCAhPT0gY2hhbm5lbCkge1xuXHRcdGkgLT0gMTtcblx0fVxuXHRyZXR1cm4gaTtcbn07XG5cbi8vIENvbGxlY3QgYWxsIHRva2VucyBvbiBzcGVjaWZpZWQgY2hhbm5lbCB0byB0aGUgcmlnaHQgb2Zcbi8vIHRoZSBjdXJyZW50IHRva2VuIHVwIHVudGlsIHdlIHNlZSBhIHRva2VuIG9uIERFRkFVTFRfVE9LRU5fQ0hBTk5FTCBvclxuLy8gRU9GLiBJZiBjaGFubmVsIGlzIC0xLCBmaW5kIGFueSBub24gZGVmYXVsdCBjaGFubmVsIHRva2VuLlxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuZ2V0SGlkZGVuVG9rZW5zVG9SaWdodCA9IGZ1bmN0aW9uKHRva2VuSW5kZXgsXG5cdFx0Y2hhbm5lbCkge1xuXHRpZiAoY2hhbm5lbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y2hhbm5lbCA9IC0xO1xuXHR9XG5cdHRoaXMubGF6eUluaXQoKTtcblx0aWYgKHRva2VuSW5kZXggPCAwIHx8IHRva2VuSW5kZXggPj0gdGhpcy50b2tlbnMubGVuZ3RoKSB7XG5cdFx0dGhyb3cgXCJcIiArIHRva2VuSW5kZXggKyBcIiBub3QgaW4gMC4uXCIgKyB0aGlzLnRva2Vucy5sZW5ndGggLSAxO1xuXHR9XG5cdHZhciBuZXh0T25DaGFubmVsID0gdGhpcy5uZXh0VG9rZW5PbkNoYW5uZWwodG9rZW5JbmRleCArIDEsIExleGVyLkRFRkFVTFRfVE9LRU5fQ0hBTk5FTCk7XG5cdHZhciBmcm9tXyA9IHRva2VuSW5kZXggKyAxO1xuXHQvLyBpZiBub25lIG9uY2hhbm5lbCB0byByaWdodCwgbmV4dE9uQ2hhbm5lbD0tMSBzbyBzZXQgdG8gPSBsYXN0IHRva2VuXG5cdHZhciB0byA9IG5leHRPbkNoYW5uZWwgPT09IC0xID8gdGhpcy50b2tlbnMubGVuZ3RoIC0gMSA6IG5leHRPbkNoYW5uZWw7XG5cdHJldHVybiB0aGlzLmZpbHRlckZvckNoYW5uZWwoZnJvbV8sIHRvLCBjaGFubmVsKTtcbn07XG5cbi8vIENvbGxlY3QgYWxsIHRva2VucyBvbiBzcGVjaWZpZWQgY2hhbm5lbCB0byB0aGUgbGVmdCBvZlxuLy8gdGhlIGN1cnJlbnQgdG9rZW4gdXAgdW50aWwgd2Ugc2VlIGEgdG9rZW4gb24gREVGQVVMVF9UT0tFTl9DSEFOTkVMLlxuLy8gSWYgY2hhbm5lbCBpcyAtMSwgZmluZCBhbnkgbm9uIGRlZmF1bHQgY2hhbm5lbCB0b2tlbi5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLmdldEhpZGRlblRva2Vuc1RvTGVmdCA9IGZ1bmN0aW9uKHRva2VuSW5kZXgsXG5cdFx0Y2hhbm5lbCkge1xuXHRpZiAoY2hhbm5lbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0Y2hhbm5lbCA9IC0xO1xuXHR9XG5cdHRoaXMubGF6eUluaXQoKTtcblx0aWYgKHRva2VuSW5kZXggPCAwIHx8IHRva2VuSW5kZXggPj0gdGhpcy50b2tlbnMubGVuZ3RoKSB7XG5cdFx0dGhyb3cgXCJcIiArIHRva2VuSW5kZXggKyBcIiBub3QgaW4gMC4uXCIgKyB0aGlzLnRva2Vucy5sZW5ndGggLSAxO1xuXHR9XG5cdHZhciBwcmV2T25DaGFubmVsID0gdGhpcy5wcmV2aW91c1Rva2VuT25DaGFubmVsKHRva2VuSW5kZXggLSAxLCBMZXhlci5ERUZBVUxUX1RPS0VOX0NIQU5ORUwpO1xuXHRpZiAocHJldk9uQ2hhbm5lbCA9PT0gdG9rZW5JbmRleCAtIDEpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHQvLyBpZiBub25lIG9uIGNoYW5uZWwgdG8gbGVmdCwgcHJldk9uQ2hhbm5lbD0tMSB0aGVuIGZyb209MFxuXHR2YXIgZnJvbV8gPSBwcmV2T25DaGFubmVsICsgMTtcblx0dmFyIHRvID0gdG9rZW5JbmRleCAtIDE7XG5cdHJldHVybiB0aGlzLmZpbHRlckZvckNoYW5uZWwoZnJvbV8sIHRvLCBjaGFubmVsKTtcbn07XG5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLmZpbHRlckZvckNoYW5uZWwgPSBmdW5jdGlvbihsZWZ0LCByaWdodCwgY2hhbm5lbCkge1xuXHR2YXIgaGlkZGVuID0gW107XG5cdGZvciAodmFyIGkgPSBsZWZ0OyBpIDwgcmlnaHQgKyAxOyBpKyspIHtcblx0XHR2YXIgdCA9IHRoaXMudG9rZW5zW2ldO1xuXHRcdGlmIChjaGFubmVsID09PSAtMSkge1xuXHRcdFx0aWYgKHQuY2hhbm5lbCAhPT0gTGV4ZXIuREVGQVVMVF9UT0tFTl9DSEFOTkVMKSB7XG5cdFx0XHRcdGhpZGRlbi5wdXNoKHQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAodC5jaGFubmVsID09PSBjaGFubmVsKSB7XG5cdFx0XHRoaWRkZW4ucHVzaCh0KTtcblx0XHR9XG5cdH1cblx0aWYgKGhpZGRlbi5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRyZXR1cm4gaGlkZGVuO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuZ2V0U291cmNlTmFtZSA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy50b2tlblNvdXJjZS5nZXRTb3VyY2VOYW1lKCk7XG59O1xuXG4vLyBHZXQgdGhlIHRleHQgb2YgYWxsIHRva2VucyBpbiB0aGlzIGJ1ZmZlci4vLy9cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLmdldFRleHQgPSBmdW5jdGlvbihpbnRlcnZhbCkge1xuXHR0aGlzLmxhenlJbml0KCk7XG5cdHRoaXMuZmlsbCgpO1xuXHRpZiAoaW50ZXJ2YWwgPT09IHVuZGVmaW5lZCB8fCBpbnRlcnZhbCA9PT0gbnVsbCkge1xuXHRcdGludGVydmFsID0gbmV3IEludGVydmFsKDAsIHRoaXMudG9rZW5zLmxlbmd0aCAtIDEpO1xuXHR9XG5cdHZhciBzdGFydCA9IGludGVydmFsLnN0YXJ0O1xuXHRpZiAoc3RhcnQgaW5zdGFuY2VvZiBUb2tlbikge1xuXHRcdHN0YXJ0ID0gc3RhcnQudG9rZW5JbmRleDtcblx0fVxuXHR2YXIgc3RvcCA9IGludGVydmFsLnN0b3A7XG5cdGlmIChzdG9wIGluc3RhbmNlb2YgVG9rZW4pIHtcblx0XHRzdG9wID0gc3RvcC50b2tlbkluZGV4O1xuXHR9XG5cdGlmIChzdGFydCA9PT0gbnVsbCB8fCBzdG9wID09PSBudWxsIHx8IHN0YXJ0IDwgMCB8fCBzdG9wIDwgMCkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdGlmIChzdG9wID49IHRoaXMudG9rZW5zLmxlbmd0aCkge1xuXHRcdHN0b3AgPSB0aGlzLnRva2Vucy5sZW5ndGggLSAxO1xuXHR9XG5cdHZhciBzID0gXCJcIjtcblx0Zm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgc3RvcCArIDE7IGkrKykge1xuXHRcdHZhciB0ID0gdGhpcy50b2tlbnNbaV07XG5cdFx0aWYgKHQudHlwZSA9PT0gVG9rZW4uRU9GKSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cyA9IHMgKyB0LnRleHQ7XG5cdH1cblx0cmV0dXJuIHM7XG59O1xuXG4vLyBHZXQgYWxsIHRva2VucyBmcm9tIGxleGVyIHVudGlsIEVPRi8vL1xuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLmxhenlJbml0KCk7XG5cdHdoaWxlICh0aGlzLmZldGNoKDEwMDApID09PSAxMDAwKSB7XG5cdFx0Y29udGludWU7XG5cdH1cbn07XG5cbmV4cG9ydHMuQnVmZmVyZWRUb2tlblN0cmVhbSA9IEJ1ZmZlcmVkVG9rZW5TdHJlYW07XG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cblxudmFyIElucHV0U3RyZWFtID0gcmVxdWlyZSgnLi9JbnB1dFN0cmVhbScpLklucHV0U3RyZWFtO1xuXG52YXIgaXNOb2RlSnMgPSB0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgaW1wb3J0U2NyaXB0cyA9PT0gJ3VuZGVmaW5lZCc7XG52YXIgZnMgPSBpc05vZGVKcyA/IHJlcXVpcmUoXCJmc1wiKSA6IG51bGw7XG5cbi8vIFV0aWxpdHkgZnVuY3Rpb25zIHRvIGNyZWF0ZSBJbnB1dFN0cmVhbXMgZnJvbSB2YXJpb3VzIHNvdXJjZXMuXG4vL1xuLy8gQWxsIHJldHVybmVkIElucHV0U3RyZWFtcyBzdXBwb3J0IHRoZSBmdWxsIHJhbmdlIG9mIFVuaWNvZGVcbi8vIHVwIHRvIFUrMTBGRkZGICh0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBJbnB1dFN0cmVhbSBvbmx5IHN1cHBvcnRzXG4vLyBjb2RlIHBvaW50cyB1cCB0byBVK0ZGRkYpLlxudmFyIENoYXJTdHJlYW1zID0ge1xuICAvLyBDcmVhdGVzIGFuIElucHV0U3RyZWFtIGZyb20gYSBzdHJpbmcuXG4gIGZyb21TdHJpbmc6IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiBuZXcgSW5wdXRTdHJlYW0oc3RyLCB0cnVlKTtcbiAgfSxcblxuICAvLyBBc3luY2hyb25vdXNseSBjcmVhdGVzIGFuIElucHV0U3RyZWFtIGZyb20gYSBibG9iIGdpdmVuIHRoZVxuICAvLyBlbmNvZGluZyBvZiB0aGUgYnl0ZXMgaW4gdGhhdCBibG9iIChkZWZhdWx0cyB0byAndXRmOCcgaWZcbiAgLy8gZW5jb2RpbmcgaXMgbnVsbCkuXG4gIC8vXG4gIC8vIEludm9rZXMgb25Mb2FkKHJlc3VsdCkgb24gc3VjY2Vzcywgb25FcnJvcihlcnJvcikgb25cbiAgLy8gZmFpbHVyZS5cbiAgZnJvbUJsb2I6IGZ1bmN0aW9uKGJsb2IsIGVuY29kaW5nLCBvbkxvYWQsIG9uRXJyb3IpIHtcbiAgICB2YXIgcmVhZGVyID0gRmlsZVJlYWRlcigpO1xuICAgIHJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbihlKSB7XG4gICAgICB2YXIgaXMgPSBuZXcgSW5wdXRTdHJlYW0oZS50YXJnZXQucmVzdWx0LCB0cnVlKTtcbiAgICAgIG9uTG9hZChpcyk7XG4gICAgfTtcbiAgICByZWFkZXIub25lcnJvciA9IG9uRXJyb3I7XG4gICAgcmVhZGVyLnJlYWRBc1RleHQoYmxvYiwgZW5jb2RpbmcpO1xuICB9LFxuXG4gIC8vIENyZWF0ZXMgYW4gSW5wdXRTdHJlYW0gZnJvbSBhIEJ1ZmZlciBnaXZlbiB0aGVcbiAgLy8gZW5jb2Rpbmcgb2YgdGhlIGJ5dGVzIGluIHRoYXQgYnVmZmVyIChkZWZhdWx0cyB0byAndXRmOCcgaWZcbiAgLy8gZW5jb2RpbmcgaXMgbnVsbCkuXG4gIGZyb21CdWZmZXI6IGZ1bmN0aW9uKGJ1ZmZlciwgZW5jb2RpbmcpIHtcbiAgICByZXR1cm4gbmV3IElucHV0U3RyZWFtKGJ1ZmZlci50b1N0cmluZyhlbmNvZGluZyksIHRydWUpO1xuICB9LFxuXG4gIC8vIEFzeW5jaHJvbm91c2x5IGNyZWF0ZXMgYW4gSW5wdXRTdHJlYW0gZnJvbSBhIGZpbGUgb24gZGlzayBnaXZlblxuICAvLyB0aGUgZW5jb2Rpbmcgb2YgdGhlIGJ5dGVzIGluIHRoYXQgZmlsZSAoZGVmYXVsdHMgdG8gJ3V0ZjgnIGlmXG4gIC8vIGVuY29kaW5nIGlzIG51bGwpLlxuICAvL1xuICAvLyBJbnZva2VzIGNhbGxiYWNrKGVycm9yLCByZXN1bHQpIG9uIGNvbXBsZXRpb24uXG4gIGZyb21QYXRoOiBmdW5jdGlvbihwYXRoLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICBmcy5yZWFkRmlsZShwYXRoLCBlbmNvZGluZywgZnVuY3Rpb24oZXJyLCBkYXRhKSB7XG4gICAgICB2YXIgaXMgPSBudWxsO1xuICAgICAgaWYgKGRhdGEgIT09IG51bGwpIHtcbiAgICAgICAgaXMgPSBuZXcgSW5wdXRTdHJlYW0oZGF0YSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgICBjYWxsYmFjayhlcnIsIGlzKTtcbiAgICB9KTtcbiAgfSxcblxuICAvLyBTeW5jaHJvbm91c2x5IGNyZWF0ZXMgYW4gSW5wdXRTdHJlYW0gZ2l2ZW4gYSBwYXRoIHRvIGEgZmlsZVxuICAvLyBvbiBkaXNrIGFuZCB0aGUgZW5jb2Rpbmcgb2YgdGhlIGJ5dGVzIGluIHRoYXQgZmlsZSAoZGVmYXVsdHMgdG9cbiAgLy8gJ3V0ZjgnIGlmIGVuY29kaW5nIGlzIG51bGwpLlxuICBmcm9tUGF0aFN5bmM6IGZ1bmN0aW9uKHBhdGgsIGVuY29kaW5nKSB7XG4gICAgdmFyIGRhdGEgPSBmcy5yZWFkRmlsZVN5bmMocGF0aCwgZW5jb2RpbmcpO1xuICAgIHJldHVybiBuZXcgSW5wdXRTdHJlYW0oZGF0YSwgdHJ1ZSk7XG4gIH1cbn07XG5cbmV4cG9ydHMuQ2hhclN0cmVhbXMgPSBDaGFyU3RyZWFtcztcbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vL1xuXG4vL1xuLy8gVGhpcyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBUb2tlbkZhY3Rvcnl9IGNyZWF0ZXNcbi8vIHtAbGluayBDb21tb25Ub2tlbn0gb2JqZWN0cy5cbi8vXG5cbnZhciBDb21tb25Ub2tlbiA9IHJlcXVpcmUoJy4vVG9rZW4nKS5Db21tb25Ub2tlbjtcblxuZnVuY3Rpb24gVG9rZW5GYWN0b3J5KCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gQ29tbW9uVG9rZW5GYWN0b3J5KGNvcHlUZXh0KSB7XG5cdFRva2VuRmFjdG9yeS5jYWxsKHRoaXMpO1xuICAgIC8vIEluZGljYXRlcyB3aGV0aGVyIHtAbGluayBDb21tb25Ub2tlbi8vc2V0VGV4dH0gc2hvdWxkIGJlIGNhbGxlZCBhZnRlclxuICAgIC8vIGNvbnN0cnVjdGluZyB0b2tlbnMgdG8gZXhwbGljaXRseSBzZXQgdGhlIHRleHQuIFRoaXMgaXMgdXNlZnVsIGZvciBjYXNlc1xuICAgIC8vIHdoZXJlIHRoZSBpbnB1dCBzdHJlYW0gbWlnaHQgbm90IGJlIGFibGUgdG8gcHJvdmlkZSBhcmJpdHJhcnkgc3Vic3RyaW5nc1xuICAgIC8vIG9mIHRleHQgZnJvbSB0aGUgaW5wdXQgYWZ0ZXIgdGhlIGxleGVyIGNyZWF0ZXMgYSB0b2tlbiAoZS5nLiB0aGVcbiAgICAvLyBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgQ2hhclN0cmVhbS8vZ2V0VGV4dH0gaW5cbiAgICAvLyB7QGxpbmsgVW5idWZmZXJlZENoYXJTdHJlYW19IHRocm93cyBhblxuICAgIC8vIHtAbGluayBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbn0pLiBFeHBsaWNpdGx5IHNldHRpbmcgdGhlIHRva2VuIHRleHRcbiAgICAvLyBhbGxvd3Mge0BsaW5rIFRva2VuLy9nZXRUZXh0fSB0byBiZSBjYWxsZWQgYXQgYW55IHRpbWUgcmVnYXJkbGVzcyBvZiB0aGVcbiAgICAvLyBpbnB1dCBzdHJlYW0gaW1wbGVtZW50YXRpb24uXG4gICAgLy9cbiAgICAvLyA8cD5cbiAgICAvLyBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB7QGNvZGUgZmFsc2V9IHRvIGF2b2lkIHRoZSBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5XG4gICAgLy8gb3ZlcmhlYWQgb2YgY29weWluZyB0ZXh0IGZvciBldmVyeSB0b2tlbiB1bmxlc3MgZXhwbGljaXRseSByZXF1ZXN0ZWQuPC9wPlxuICAgIC8vXG4gICAgdGhpcy5jb3B5VGV4dCA9IGNvcHlUZXh0PT09dW5kZWZpbmVkID8gZmFsc2UgOiBjb3B5VGV4dDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkNvbW1vblRva2VuRmFjdG9yeS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRva2VuRmFjdG9yeS5wcm90b3R5cGUpO1xuQ29tbW9uVG9rZW5GYWN0b3J5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbW1vblRva2VuRmFjdG9yeTtcblxuLy9cbi8vIFRoZSBkZWZhdWx0IHtAbGluayBDb21tb25Ub2tlbkZhY3Rvcnl9IGluc3RhbmNlLlxuLy9cbi8vIDxwPlxuLy8gVGhpcyB0b2tlbiBmYWN0b3J5IGRvZXMgbm90IGV4cGxpY2l0bHkgY29weSB0b2tlbiB0ZXh0IHdoZW4gY29uc3RydWN0aW5nXG4vLyB0b2tlbnMuPC9wPlxuLy9cbkNvbW1vblRva2VuRmFjdG9yeS5ERUZBVUxUID0gbmV3IENvbW1vblRva2VuRmFjdG9yeSgpO1xuXG5Db21tb25Ub2tlbkZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uKHNvdXJjZSwgdHlwZSwgdGV4dCwgY2hhbm5lbCwgc3RhcnQsIHN0b3AsIGxpbmUsIGNvbHVtbikge1xuICAgIHZhciB0ID0gbmV3IENvbW1vblRva2VuKHNvdXJjZSwgdHlwZSwgY2hhbm5lbCwgc3RhcnQsIHN0b3ApO1xuICAgIHQubGluZSA9IGxpbmU7XG4gICAgdC5jb2x1bW4gPSBjb2x1bW47XG4gICAgaWYgKHRleHQgIT09bnVsbCkge1xuICAgICAgICB0LnRleHQgPSB0ZXh0O1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb3B5VGV4dCAmJiBzb3VyY2VbMV0gIT09bnVsbCkge1xuICAgICAgICB0LnRleHQgPSBzb3VyY2VbMV0uZ2V0VGV4dChzdGFydCxzdG9wKTtcbiAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuXG5Db21tb25Ub2tlbkZhY3RvcnkucHJvdG90eXBlLmNyZWF0ZVRoaW4gPSBmdW5jdGlvbih0eXBlLCB0ZXh0KSB7XG4gICAgdmFyIHQgPSBuZXcgQ29tbW9uVG9rZW4obnVsbCwgdHlwZSk7XG4gICAgdC50ZXh0ID0gdGV4dDtcbiAgICByZXR1cm4gdDtcbn07XG5cbmV4cG9ydHMuQ29tbW9uVG9rZW5GYWN0b3J5ID0gQ29tbW9uVG9rZW5GYWN0b3J5O1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vL1xuXG4vL1xuLy8gVGhpcyBjbGFzcyBleHRlbmRzIHtAbGluayBCdWZmZXJlZFRva2VuU3RyZWFtfSB3aXRoIGZ1bmN0aW9uYWxpdHkgdG8gZmlsdGVyXG4vLyB0b2tlbiBzdHJlYW1zIHRvIHRva2VucyBvbiBhIHBhcnRpY3VsYXIgY2hhbm5lbCAodG9rZW5zIHdoZXJlXG4vLyB7QGxpbmsgVG9rZW4vL2dldENoYW5uZWx9IHJldHVybnMgYSBwYXJ0aWN1bGFyIHZhbHVlKS5cbi8vXG4vLyA8cD5cbi8vIFRoaXMgdG9rZW4gc3RyZWFtIHByb3ZpZGVzIGFjY2VzcyB0byBhbGwgdG9rZW5zIGJ5IGluZGV4IG9yIHdoZW4gY2FsbGluZ1xuLy8gbWV0aG9kcyBsaWtlIHtAbGluayAvL2dldFRleHR9LiBUaGUgY2hhbm5lbCBmaWx0ZXJpbmcgaXMgb25seSB1c2VkIGZvciBjb2RlXG4vLyBhY2Nlc3NpbmcgdG9rZW5zIHZpYSB0aGUgbG9va2FoZWFkIG1ldGhvZHMge0BsaW5rIC8vTEF9LCB7QGxpbmsgLy9MVH0sIGFuZFxuLy8ge0BsaW5rIC8vTEJ9LjwvcD5cbi8vXG4vLyA8cD5cbi8vIEJ5IGRlZmF1bHQsIHRva2VucyBhcmUgcGxhY2VkIG9uIHRoZSBkZWZhdWx0IGNoYW5uZWxcbi8vICh7QGxpbmsgVG9rZW4vL0RFRkFVTFRfQ0hBTk5FTH0pLCBidXQgbWF5IGJlIHJlYXNzaWduZWQgYnkgdXNpbmcgdGhlXG4vLyB7QGNvZGUgLT5jaGFubmVsKEhJRERFTil9IGxleGVyIGNvbW1hbmQsIG9yIGJ5IHVzaW5nIGFuIGVtYmVkZGVkIGFjdGlvbiB0b1xuLy8gY2FsbCB7QGxpbmsgTGV4ZXIvL3NldENoYW5uZWx9LlxuLy8gPC9wPlxuLy9cbi8vIDxwPlxuLy8gTm90ZTogbGV4ZXIgcnVsZXMgd2hpY2ggdXNlIHRoZSB7QGNvZGUgLT5za2lwfSBsZXhlciBjb21tYW5kIG9yIGNhbGxcbi8vIHtAbGluayBMZXhlci8vc2tpcH0gZG8gbm90IHByb2R1Y2UgdG9rZW5zIGF0IGFsbCwgc28gaW5wdXQgdGV4dCBtYXRjaGVkIGJ5XG4vLyBzdWNoIGEgcnVsZSB3aWxsIG5vdCBiZSBhdmFpbGFibGUgYXMgcGFydCBvZiB0aGUgdG9rZW4gc3RyZWFtLCByZWdhcmRsZXNzIG9mXG4vLyBjaGFubmVsLjwvcD5cbi8vL1xuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuL1Rva2VuJykuVG9rZW47XG52YXIgQnVmZmVyZWRUb2tlblN0cmVhbSA9IHJlcXVpcmUoJy4vQnVmZmVyZWRUb2tlblN0cmVhbScpLkJ1ZmZlcmVkVG9rZW5TdHJlYW07XG5cbmZ1bmN0aW9uIENvbW1vblRva2VuU3RyZWFtKGxleGVyLCBjaGFubmVsKSB7XG5cdEJ1ZmZlcmVkVG9rZW5TdHJlYW0uY2FsbCh0aGlzLCBsZXhlcik7XG4gICAgdGhpcy5jaGFubmVsID0gY2hhbm5lbD09PXVuZGVmaW5lZCA/IFRva2VuLkRFRkFVTFRfQ0hBTk5FTCA6IGNoYW5uZWw7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkNvbW1vblRva2VuU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUpO1xuQ29tbW9uVG9rZW5TdHJlYW0ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29tbW9uVG9rZW5TdHJlYW07XG5cbkNvbW1vblRva2VuU3RyZWFtLnByb3RvdHlwZS5hZGp1c3RTZWVrSW5kZXggPSBmdW5jdGlvbihpKSB7XG4gICAgcmV0dXJuIHRoaXMubmV4dFRva2VuT25DaGFubmVsKGksIHRoaXMuY2hhbm5lbCk7XG59O1xuXG5Db21tb25Ub2tlblN0cmVhbS5wcm90b3R5cGUuTEIgPSBmdW5jdGlvbihrKSB7XG4gICAgaWYgKGs9PT0wIHx8IHRoaXMuaW5kZXgtazwwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgaSA9IHRoaXMuaW5kZXg7XG4gICAgdmFyIG4gPSAxO1xuICAgIC8vIGZpbmQgayBnb29kIHRva2VucyBsb29raW5nIGJhY2t3YXJkc1xuICAgIHdoaWxlIChuIDw9IGspIHtcbiAgICAgICAgLy8gc2tpcCBvZmYtY2hhbm5lbCB0b2tlbnNcbiAgICAgICAgaSA9IHRoaXMucHJldmlvdXNUb2tlbk9uQ2hhbm5lbChpIC0gMSwgdGhpcy5jaGFubmVsKTtcbiAgICAgICAgbiArPSAxO1xuICAgIH1cbiAgICBpZiAoaSA8IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRva2Vuc1tpXTtcbn07XG5cbkNvbW1vblRva2VuU3RyZWFtLnByb3RvdHlwZS5MVCA9IGZ1bmN0aW9uKGspIHtcbiAgICB0aGlzLmxhenlJbml0KCk7XG4gICAgaWYgKGsgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChrIDwgMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5MQigtayk7XG4gICAgfVxuICAgIHZhciBpID0gdGhpcy5pbmRleDtcbiAgICB2YXIgbiA9IDE7IC8vIHdlIGtub3cgdG9rZW5zW3Bvc10gaXMgYSBnb29kIG9uZVxuICAgIC8vIGZpbmQgayBnb29kIHRva2Vuc1xuICAgIHdoaWxlIChuIDwgaykge1xuICAgICAgICAvLyBza2lwIG9mZi1jaGFubmVsIHRva2VucywgYnV0IG1ha2Ugc3VyZSB0byBub3QgbG9vayBwYXN0IEVPRlxuICAgICAgICBpZiAodGhpcy5zeW5jKGkgKyAxKSkge1xuICAgICAgICAgICAgaSA9IHRoaXMubmV4dFRva2VuT25DaGFubmVsKGkgKyAxLCB0aGlzLmNoYW5uZWwpO1xuICAgICAgICB9XG4gICAgICAgIG4gKz0gMTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zW2ldO1xufTtcblxuLy8gQ291bnQgRU9GIGp1c3Qgb25jZS4vLy9cbkNvbW1vblRva2VuU3RyZWFtLnByb3RvdHlwZS5nZXROdW1iZXJPZk9uQ2hhbm5lbFRva2VucyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBuID0gMDtcbiAgICB0aGlzLmZpbGwoKTtcbiAgICBmb3IgKHZhciBpID0wOyBpPCB0aGlzLnRva2Vucy5sZW5ndGg7aSsrKSB7XG4gICAgICAgIHZhciB0ID0gdGhpcy50b2tlbnNbaV07XG4gICAgICAgIGlmKCB0LmNoYW5uZWw9PT10aGlzLmNoYW5uZWwpIHtcbiAgICAgICAgICAgIG4gKz0gMTtcbiAgICAgICAgfVxuICAgICAgICBpZiggdC50eXBlPT09VG9rZW4uRU9GKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbjtcbn07XG5cbmV4cG9ydHMuQ29tbW9uVG9rZW5TdHJlYW0gPSBDb21tb25Ub2tlblN0cmVhbTsiLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cblxuLy9cbi8vICBUaGlzIGlzIGFuIElucHV0U3RyZWFtIHRoYXQgaXMgbG9hZGVkIGZyb20gYSBmaWxlIGFsbCBhdCBvbmNlXG4vLyAgd2hlbiB5b3UgY29uc3RydWN0IHRoZSBvYmplY3QuXG4vL1xudmFyIElucHV0U3RyZWFtID0gcmVxdWlyZSgnLi9JbnB1dFN0cmVhbScpLklucHV0U3RyZWFtO1xudmFyIGlzTm9kZUpzID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGltcG9ydFNjcmlwdHMgPT09ICd1bmRlZmluZWQnO1xudmFyIGZzID0gaXNOb2RlSnMgPyByZXF1aXJlKFwiZnNcIikgOiBudWxsO1xuXG5mdW5jdGlvbiBGaWxlU3RyZWFtKGZpbGVOYW1lLCBkZWNvZGVUb1VuaWNvZGVDb2RlUG9pbnRzKSB7XG5cdHZhciBkYXRhID0gZnMucmVhZEZpbGVTeW5jKGZpbGVOYW1lLCBcInV0ZjhcIik7XG5cdElucHV0U3RyZWFtLmNhbGwodGhpcywgZGF0YSwgZGVjb2RlVG9Vbmljb2RlQ29kZVBvaW50cyk7XG5cdHRoaXMuZmlsZU5hbWUgPSBmaWxlTmFtZTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkZpbGVTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShJbnB1dFN0cmVhbS5wcm90b3R5cGUpO1xuRmlsZVN0cmVhbS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGaWxlU3RyZWFtO1xuXG5leHBvcnRzLkZpbGVTdHJlYW0gPSBGaWxlU3RyZWFtO1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vXG5cbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vVG9rZW4nKS5Ub2tlbjtcbnJlcXVpcmUoJy4vcG9seWZpbGxzL2NvZGVwb2ludGF0Jyk7XG5yZXF1aXJlKCcuL3BvbHlmaWxscy9mcm9tY29kZXBvaW50Jyk7XG5cbi8vIFZhY3V1bSBhbGwgaW5wdXQgZnJvbSBhIHN0cmluZyBhbmQgdGhlbiB0cmVhdCBpdCBsaWtlIGEgYnVmZmVyLlxuXG5mdW5jdGlvbiBfbG9hZFN0cmluZyhzdHJlYW0pIHtcblx0c3RyZWFtLl9pbmRleCA9IDA7XG5cdHN0cmVhbS5kYXRhID0gW107XG5cdGlmIChzdHJlYW0uZGVjb2RlVG9Vbmljb2RlQ29kZVBvaW50cykge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3RyZWFtLnN0cmRhdGEubGVuZ3RoOyApIHtcblx0XHRcdHZhciBjb2RlUG9pbnQgPSBzdHJlYW0uc3RyZGF0YS5jb2RlUG9pbnRBdChpKTtcblx0XHRcdHN0cmVhbS5kYXRhLnB1c2goY29kZVBvaW50KTtcblx0XHRcdGkgKz0gY29kZVBvaW50IDw9IDB4RkZGRiA/IDEgOiAyO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN0cmVhbS5zdHJkYXRhLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgY29kZVVuaXQgPSBzdHJlYW0uc3RyZGF0YS5jaGFyQ29kZUF0KGkpO1xuXHRcdFx0c3RyZWFtLmRhdGEucHVzaChjb2RlVW5pdCk7XG5cdFx0fVxuXHR9XG5cdHN0cmVhbS5fc2l6ZSA9IHN0cmVhbS5kYXRhLmxlbmd0aDtcbn1cblxuLy8gSWYgZGVjb2RlVG9Vbmljb2RlQ29kZVBvaW50cyBpcyB0cnVlLCB0aGUgaW5wdXQgaXMgdHJlYXRlZFxuLy8gYXMgYSBzZXJpZXMgb2YgVW5pY29kZSBjb2RlIHBvaW50cy5cbi8vXG4vLyBPdGhlcndpc2UsIHRoZSBpbnB1dCBpcyB0cmVhdGVkIGFzIGEgc2VyaWVzIG9mIDE2LWJpdCBVVEYtMTYgY29kZVxuLy8gdW5pdHMuXG5mdW5jdGlvbiBJbnB1dFN0cmVhbShkYXRhLCBkZWNvZGVUb1VuaWNvZGVDb2RlUG9pbnRzKSB7XG5cdHRoaXMubmFtZSA9IFwiPGVtcHR5PlwiO1xuXHR0aGlzLnN0cmRhdGEgPSBkYXRhO1xuXHR0aGlzLmRlY29kZVRvVW5pY29kZUNvZGVQb2ludHMgPSBkZWNvZGVUb1VuaWNvZGVDb2RlUG9pbnRzIHx8IGZhbHNlO1xuXHRfbG9hZFN0cmluZyh0aGlzKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShJbnB1dFN0cmVhbS5wcm90b3R5cGUsIFwiaW5kZXhcIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5kZXg7XG5cdH1cbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSW5wdXRTdHJlYW0ucHJvdG90eXBlLCBcInNpemVcIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5fc2l6ZTtcblx0fVxufSk7XG5cbi8vIFJlc2V0IHRoZSBzdHJlYW0gc28gdGhhdCBpdCdzIGluIHRoZSBzYW1lIHN0YXRlIGl0IHdhc1xuLy8gd2hlbiB0aGUgb2JqZWN0IHdhcyBjcmVhdGVkICpleGNlcHQqIHRoZSBkYXRhIGFycmF5IGlzIG5vdFxuLy8gdG91Y2hlZC5cbi8vXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5faW5kZXggPSAwO1xufTtcblxuSW5wdXRTdHJlYW0ucHJvdG90eXBlLmNvbnN1bWUgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuX2luZGV4ID49IHRoaXMuX3NpemUpIHtcblx0XHQvLyBhc3NlcnQgdGhpcy5MQSgxKSA9PSBUb2tlbi5FT0Zcblx0XHR0aHJvdyAoXCJjYW5ub3QgY29uc3VtZSBFT0ZcIik7XG5cdH1cblx0dGhpcy5faW5kZXggKz0gMTtcbn07XG5cbklucHV0U3RyZWFtLnByb3RvdHlwZS5MQSA9IGZ1bmN0aW9uKG9mZnNldCkge1xuXHRpZiAob2Zmc2V0ID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7IC8vIHVuZGVmaW5lZFxuXHR9XG5cdGlmIChvZmZzZXQgPCAwKSB7XG5cdFx0b2Zmc2V0ICs9IDE7IC8vIGUuZy4sIHRyYW5zbGF0ZSBMQSgtMSkgdG8gdXNlIG9mZnNldD0wXG5cdH1cblx0dmFyIHBvcyA9IHRoaXMuX2luZGV4ICsgb2Zmc2V0IC0gMTtcblx0aWYgKHBvcyA8IDAgfHwgcG9zID49IHRoaXMuX3NpemUpIHsgLy8gaW52YWxpZFxuXHRcdHJldHVybiBUb2tlbi5FT0Y7XG5cdH1cblx0cmV0dXJuIHRoaXMuZGF0YVtwb3NdO1xufTtcblxuSW5wdXRTdHJlYW0ucHJvdG90eXBlLkxUID0gZnVuY3Rpb24ob2Zmc2V0KSB7XG5cdHJldHVybiB0aGlzLkxBKG9mZnNldCk7XG59O1xuXG4vLyBtYXJrL3JlbGVhc2UgZG8gbm90aGluZzsgd2UgaGF2ZSBlbnRpcmUgYnVmZmVyXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUubWFyayA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gLTE7XG59O1xuXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUucmVsZWFzZSA9IGZ1bmN0aW9uKG1hcmtlcikge1xufTtcblxuLy8gY29uc3VtZSgpIGFoZWFkIHVudGlsIHA9PV9pbmRleDsgY2FuJ3QganVzdCBzZXQgcD1faW5kZXggYXMgd2UgbXVzdFxuLy8gdXBkYXRlIGxpbmUgYW5kIGNvbHVtbi4gSWYgd2Ugc2VlayBiYWNrd2FyZHMsIGp1c3Qgc2V0IHBcbi8vXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUuc2VlayA9IGZ1bmN0aW9uKF9pbmRleCkge1xuXHRpZiAoX2luZGV4IDw9IHRoaXMuX2luZGV4KSB7XG5cdFx0dGhpcy5faW5kZXggPSBfaW5kZXg7IC8vIGp1c3QganVtcDsgZG9uJ3QgdXBkYXRlIHN0cmVhbSBzdGF0ZSAobGluZSxcblx0XHRcdFx0XHRcdFx0XHQvLyAuLi4pXG5cdFx0cmV0dXJuO1xuXHR9XG5cdC8vIHNlZWsgZm9yd2FyZFxuXHR0aGlzLl9pbmRleCA9IE1hdGgubWluKF9pbmRleCwgdGhpcy5fc2l6ZSk7XG59O1xuXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wKSB7XG5cdGlmIChzdG9wID49IHRoaXMuX3NpemUpIHtcblx0XHRzdG9wID0gdGhpcy5fc2l6ZSAtIDE7XG5cdH1cblx0aWYgKHN0YXJ0ID49IHRoaXMuX3NpemUpIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fSBlbHNlIHtcblx0XHRpZiAodGhpcy5kZWNvZGVUb1VuaWNvZGVDb2RlUG9pbnRzKSB7XG5cdFx0XHR2YXIgcmVzdWx0ID0gXCJcIjtcblx0XHRcdGZvciAodmFyIGkgPSBzdGFydDsgaSA8PSBzdG9wOyBpKyspIHtcblx0XHRcdFx0cmVzdWx0ICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KHRoaXMuZGF0YVtpXSk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5zdHJkYXRhLnNsaWNlKHN0YXJ0LCBzdG9wICsgMSk7XG5cdFx0fVxuXHR9XG59O1xuXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuc3RyZGF0YTtcbn07XG5cbmV4cG9ydHMuSW5wdXRTdHJlYW0gPSBJbnB1dFN0cmVhbTtcbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxuLypqc2xpbnQgc21hcnR0YWJzOnRydWUgKi9cblxudmFyIFRva2VuID0gcmVxdWlyZSgnLi9Ub2tlbicpLlRva2VuO1xuXG4vKiBzdG9wIGlzIG5vdCBpbmNsdWRlZCEgKi9cbmZ1bmN0aW9uIEludGVydmFsKHN0YXJ0LCBzdG9wKSB7XG5cdHRoaXMuc3RhcnQgPSBzdGFydDtcblx0dGhpcy5zdG9wID0gc3RvcDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkludGVydmFsLnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKGl0ZW0pIHtcblx0cmV0dXJuIGl0ZW0gPj0gdGhpcy5zdGFydCAmJiBpdGVtIDwgdGhpcy5zdG9wO1xufTtcblxuSW50ZXJ2YWwucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdGlmKHRoaXMuc3RhcnQ9PT10aGlzLnN0b3AtMSkge1xuXHRcdHJldHVybiB0aGlzLnN0YXJ0LnRvU3RyaW5nKCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMuc3RhcnQudG9TdHJpbmcoKSArIFwiLi5cIiArICh0aGlzLnN0b3AtMSkudG9TdHJpbmcoKTtcblx0fVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSW50ZXJ2YWwucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnN0b3AgLSB0aGlzLnN0YXJ0O1xuXHR9XG59KTtcblxuZnVuY3Rpb24gSW50ZXJ2YWxTZXQoKSB7XG5cdHRoaXMuaW50ZXJ2YWxzID0gbnVsbDtcblx0dGhpcy5yZWFkT25seSA9IGZhbHNlO1xufVxuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuZmlyc3QgPSBmdW5jdGlvbih2KSB7XG5cdGlmICh0aGlzLmludGVydmFscyA9PT0gbnVsbCB8fCB0aGlzLmludGVydmFscy5sZW5ndGg9PT0wKSB7XG5cdFx0cmV0dXJuIFRva2VuLklOVkFMSURfVFlQRTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5pbnRlcnZhbHNbMF0uc3RhcnQ7XG5cdH1cbn07XG5cbkludGVydmFsU2V0LnByb3RvdHlwZS5hZGRPbmUgPSBmdW5jdGlvbih2KSB7XG5cdHRoaXMuYWRkSW50ZXJ2YWwobmV3IEludGVydmFsKHYsIHYgKyAxKSk7XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuYWRkUmFuZ2UgPSBmdW5jdGlvbihsLCBoKSB7XG5cdHRoaXMuYWRkSW50ZXJ2YWwobmV3IEludGVydmFsKGwsIGggKyAxKSk7XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuYWRkSW50ZXJ2YWwgPSBmdW5jdGlvbih2KSB7XG5cdGlmICh0aGlzLmludGVydmFscyA9PT0gbnVsbCkge1xuXHRcdHRoaXMuaW50ZXJ2YWxzID0gW107XG5cdFx0dGhpcy5pbnRlcnZhbHMucHVzaCh2KTtcblx0fSBlbHNlIHtcblx0XHQvLyBmaW5kIGluc2VydCBwb3Ncblx0XHRmb3IgKHZhciBrID0gMDsgayA8IHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHR2YXIgaSA9IHRoaXMuaW50ZXJ2YWxzW2tdO1xuXHRcdFx0Ly8gZGlzdGluY3QgcmFuZ2UgLT4gaW5zZXJ0XG5cdFx0XHRpZiAodi5zdG9wIDwgaS5zdGFydCkge1xuXHRcdFx0XHR0aGlzLmludGVydmFscy5zcGxpY2UoaywgMCwgdik7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIGNvbnRpZ3VvdXMgcmFuZ2UgLT4gYWRqdXN0XG5cdFx0XHRlbHNlIGlmICh2LnN0b3AgPT09IGkuc3RhcnQpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbHNba10uc3RhcnQgPSB2LnN0YXJ0O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBvdmVybGFwcGluZyByYW5nZSAtPiBhZGp1c3QgYW5kIHJlZHVjZVxuXHRcdFx0ZWxzZSBpZiAodi5zdGFydCA8PSBpLnN0b3ApIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbHNba10gPSBuZXcgSW50ZXJ2YWwoTWF0aC5taW4oaS5zdGFydCwgdi5zdGFydCksIE1hdGgubWF4KGkuc3RvcCwgdi5zdG9wKSk7XG5cdFx0XHRcdHRoaXMucmVkdWNlKGspO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGdyZWF0ZXIgdGhhbiBhbnkgZXhpc3Rpbmdcblx0XHR0aGlzLmludGVydmFscy5wdXNoKHYpO1xuXHR9XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuYWRkU2V0ID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0aWYgKG90aGVyLmludGVydmFscyAhPT0gbnVsbCkge1xuXHRcdGZvciAodmFyIGsgPSAwOyBrIDwgb3RoZXIuaW50ZXJ2YWxzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHR2YXIgaSA9IG90aGVyLmludGVydmFsc1trXTtcblx0XHRcdHRoaXMuYWRkSW50ZXJ2YWwobmV3IEludGVydmFsKGkuc3RhcnQsIGkuc3RvcCkpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdGhpcztcbn07XG5cbkludGVydmFsU2V0LnByb3RvdHlwZS5yZWR1Y2UgPSBmdW5jdGlvbihrKSB7XG5cdC8vIG9ubHkgbmVlZCB0byByZWR1Y2UgaWYgayBpcyBub3QgdGhlIGxhc3Rcblx0aWYgKGsgPCB0aGlzLmludGVydmFsc2xlbmd0aCAtIDEpIHtcblx0XHR2YXIgbCA9IHRoaXMuaW50ZXJ2YWxzW2tdO1xuXHRcdHZhciByID0gdGhpcy5pbnRlcnZhbHNbayArIDFdO1xuXHRcdC8vIGlmIHIgY29udGFpbmVkIGluIGxcblx0XHRpZiAobC5zdG9wID49IHIuc3RvcCkge1xuXHRcdFx0dGhpcy5pbnRlcnZhbHMucG9wKGsgKyAxKTtcblx0XHRcdHRoaXMucmVkdWNlKGspO1xuXHRcdH0gZWxzZSBpZiAobC5zdG9wID49IHIuc3RhcnQpIHtcblx0XHRcdHRoaXMuaW50ZXJ2YWxzW2tdID0gbmV3IEludGVydmFsKGwuc3RhcnQsIHIuc3RvcCk7XG5cdFx0XHR0aGlzLmludGVydmFscy5wb3AoayArIDEpO1xuXHRcdH1cblx0fVxufTtcblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLmNvbXBsZW1lbnQgPSBmdW5jdGlvbihzdGFydCwgc3RvcCkge1xuICAgIHZhciByZXN1bHQgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICByZXN1bHQuYWRkSW50ZXJ2YWwobmV3IEludGVydmFsKHN0YXJ0LHN0b3ArMSkpO1xuICAgIGZvcih2YXIgaT0wOyBpPHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlc3VsdC5yZW1vdmVSYW5nZSh0aGlzLmludGVydmFsc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbihpdGVtKSB7XG5cdGlmICh0aGlzLmludGVydmFscyA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRmb3IgKHZhciBrID0gMDsgayA8IHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgaysrKSB7XG5cdFx0XHRpZih0aGlzLmludGVydmFsc1trXS5jb250YWlucyhpdGVtKSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSW50ZXJ2YWxTZXQucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBsZW4gPSAwO1xuXHRcdHRoaXMuaW50ZXJ2YWxzLm1hcChmdW5jdGlvbihpKSB7bGVuICs9IGkubGVuZ3RoO30pO1xuXHRcdHJldHVybiBsZW47XG5cdH1cbn0pO1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUucmVtb3ZlUmFuZ2UgPSBmdW5jdGlvbih2KSB7XG4gICAgaWYodi5zdGFydD09PXYuc3RvcC0xKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlT25lKHYuc3RhcnQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5pbnRlcnZhbHMhPT1udWxsKSB7XG4gICAgICAgIHZhciBrID0gMDtcbiAgICAgICAgZm9yKHZhciBuPTA7IG48dGhpcy5pbnRlcnZhbHMubGVuZ3RoOyBuKyspIHtcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5pbnRlcnZhbHNba107XG4gICAgICAgICAgICAvLyBpbnRlcnZhbHMgYXJlIG9yZGVyZWRcbiAgICAgICAgICAgIGlmICh2LnN0b3A8PWkuc3RhcnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjaGVjayBmb3IgaW5jbHVkaW5nIHJhbmdlLCBzcGxpdCBpdFxuICAgICAgICAgICAgZWxzZSBpZih2LnN0YXJ0Pmkuc3RhcnQgJiYgdi5zdG9wPGkuc3RvcCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWxzW2tdID0gbmV3IEludGVydmFsKGkuc3RhcnQsIHYuc3RhcnQpO1xuICAgICAgICAgICAgICAgIHZhciB4ID0gbmV3IEludGVydmFsKHYuc3RvcCwgaS5zdG9wKTtcbiAgICAgICAgICAgICAgICB0aGlzLmludGVydmFscy5zcGxpY2UoaywgMCwgeCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIGluY2x1ZGVkIHJhbmdlLCByZW1vdmUgaXRcbiAgICAgICAgICAgIGVsc2UgaWYodi5zdGFydDw9aS5zdGFydCAmJiB2LnN0b3A+PWkuc3RvcCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWxzLnNwbGljZShrLCAxKTtcbiAgICAgICAgICAgICAgICBrID0gayAtIDE7IC8vIG5lZWQgYW5vdGhlciBwYXNzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjaGVjayBmb3IgbG93ZXIgYm91bmRhcnlcbiAgICAgICAgICAgIGVsc2UgaWYodi5zdGFydDxpLnN0b3ApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmludGVydmFsc1trXSA9IG5ldyBJbnRlcnZhbChpLnN0YXJ0LCB2LnN0YXJ0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciB1cHBlciBib3VuZGFyeVxuICAgICAgICAgICAgZWxzZSBpZih2LnN0b3A8aS5zdG9wKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcnZhbHNba10gPSBuZXcgSW50ZXJ2YWwodi5zdG9wLCBpLnN0b3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgayArPSAxO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLnJlbW92ZU9uZSA9IGZ1bmN0aW9uKHYpIHtcblx0aWYgKHRoaXMuaW50ZXJ2YWxzICE9PSBudWxsKSB7XG5cdFx0Zm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmludGVydmFscy5sZW5ndGg7IGsrKykge1xuXHRcdFx0dmFyIGkgPSB0aGlzLmludGVydmFsc1trXTtcblx0XHRcdC8vIGludGVydmFscyBpcyBvcmRlcmVkXG5cdFx0XHRpZiAodiA8IGkuc3RhcnQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Ly8gY2hlY2sgZm9yIHNpbmdsZSB2YWx1ZSByYW5nZVxuXHRcdFx0ZWxzZSBpZiAodiA9PT0gaS5zdGFydCAmJiB2ID09PSBpLnN0b3AgLSAxKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxzLnNwbGljZShrLCAxKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Ly8gY2hlY2sgZm9yIGxvd2VyIGJvdW5kYXJ5XG5cdFx0XHRlbHNlIGlmICh2ID09PSBpLnN0YXJ0KSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxzW2tdID0gbmV3IEludGVydmFsKGkuc3RhcnQgKyAxLCBpLnN0b3ApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBjaGVjayBmb3IgdXBwZXIgYm91bmRhcnlcblx0XHRcdGVsc2UgaWYgKHYgPT09IGkuc3RvcCAtIDEpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbHNba10gPSBuZXcgSW50ZXJ2YWwoaS5zdGFydCwgaS5zdG9wIC0gMSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIHNwbGl0IGV4aXN0aW5nIHJhbmdlXG5cdFx0XHRlbHNlIGlmICh2IDwgaS5zdG9wIC0gMSkge1xuXHRcdFx0XHR2YXIgeCA9IG5ldyBJbnRlcnZhbChpLnN0YXJ0LCB2KTtcblx0XHRcdFx0aS5zdGFydCA9IHYgKyAxO1xuXHRcdFx0XHR0aGlzLmludGVydmFscy5zcGxpY2UoaywgMCwgeCk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbkludGVydmFsU2V0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKGxpdGVyYWxOYW1lcywgc3ltYm9saWNOYW1lcywgZWxlbXNBcmVDaGFyKSB7XG5cdGxpdGVyYWxOYW1lcyA9IGxpdGVyYWxOYW1lcyB8fCBudWxsO1xuXHRzeW1ib2xpY05hbWVzID0gc3ltYm9saWNOYW1lcyB8fCBudWxsO1xuXHRlbGVtc0FyZUNoYXIgPSBlbGVtc0FyZUNoYXIgfHwgZmFsc2U7XG5cdGlmICh0aGlzLmludGVydmFscyA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBcInt9XCI7XG5cdH0gZWxzZSBpZihsaXRlcmFsTmFtZXMhPT1udWxsIHx8IHN5bWJvbGljTmFtZXMhPT1udWxsKSB7XG5cdFx0cmV0dXJuIHRoaXMudG9Ub2tlblN0cmluZyhsaXRlcmFsTmFtZXMsIHN5bWJvbGljTmFtZXMpO1xuXHR9IGVsc2UgaWYoZWxlbXNBcmVDaGFyKSB7XG5cdFx0cmV0dXJuIHRoaXMudG9DaGFyU3RyaW5nKCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMudG9JbmRleFN0cmluZygpO1xuXHR9XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUudG9DaGFyU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHZhciBuYW1lcyA9IFtdO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIHYgPSB0aGlzLmludGVydmFsc1tpXTtcblx0XHRpZih2LnN0b3A9PT12LnN0YXJ0KzEpIHtcblx0XHRcdGlmICggdi5zdGFydD09PVRva2VuLkVPRiApIHtcblx0XHRcdFx0bmFtZXMucHVzaChcIjxFT0Y+XCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmFtZXMucHVzaChcIidcIiArIFN0cmluZy5mcm9tQ2hhckNvZGUodi5zdGFydCkgKyBcIidcIik7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5hbWVzLnB1c2goXCInXCIgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKHYuc3RhcnQpICsgXCInLi4nXCIgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKHYuc3RvcC0xKSArIFwiJ1wiKTtcblx0XHR9XG5cdH1cblx0aWYgKG5hbWVzLmxlbmd0aCA+IDEpIHtcblx0XHRyZXR1cm4gXCJ7XCIgKyBuYW1lcy5qb2luKFwiLCBcIikgKyBcIn1cIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmFtZXNbMF07XG5cdH1cbn07XG5cblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLnRvSW5kZXhTdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0dmFyIG5hbWVzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbnRlcnZhbHMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgdiA9IHRoaXMuaW50ZXJ2YWxzW2ldO1xuXHRcdGlmKHYuc3RvcD09PXYuc3RhcnQrMSkge1xuXHRcdFx0aWYgKCB2LnN0YXJ0PT09VG9rZW4uRU9GICkge1xuXHRcdFx0XHRuYW1lcy5wdXNoKFwiPEVPRj5cIik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRuYW1lcy5wdXNoKHYuc3RhcnQudG9TdHJpbmcoKSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5hbWVzLnB1c2godi5zdGFydC50b1N0cmluZygpICsgXCIuLlwiICsgKHYuc3RvcC0xKS50b1N0cmluZygpKTtcblx0XHR9XG5cdH1cblx0aWYgKG5hbWVzLmxlbmd0aCA+IDEpIHtcblx0XHRyZXR1cm4gXCJ7XCIgKyBuYW1lcy5qb2luKFwiLCBcIikgKyBcIn1cIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmFtZXNbMF07XG5cdH1cbn07XG5cblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLnRvVG9rZW5TdHJpbmcgPSBmdW5jdGlvbihsaXRlcmFsTmFtZXMsIHN5bWJvbGljTmFtZXMpIHtcblx0dmFyIG5hbWVzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbnRlcnZhbHMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgdiA9IHRoaXMuaW50ZXJ2YWxzW2ldO1xuXHRcdGZvciAodmFyIGogPSB2LnN0YXJ0OyBqIDwgdi5zdG9wOyBqKyspIHtcblx0XHRcdG5hbWVzLnB1c2godGhpcy5lbGVtZW50TmFtZShsaXRlcmFsTmFtZXMsIHN5bWJvbGljTmFtZXMsIGopKTtcblx0XHR9XG5cdH1cblx0aWYgKG5hbWVzLmxlbmd0aCA+IDEpIHtcblx0XHRyZXR1cm4gXCJ7XCIgKyBuYW1lcy5qb2luKFwiLCBcIikgKyBcIn1cIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbmFtZXNbMF07XG5cdH1cbn07XG5cbkludGVydmFsU2V0LnByb3RvdHlwZS5lbGVtZW50TmFtZSA9IGZ1bmN0aW9uKGxpdGVyYWxOYW1lcywgc3ltYm9saWNOYW1lcywgYSkge1xuXHRpZiAoYSA9PT0gVG9rZW4uRU9GKSB7XG5cdFx0cmV0dXJuIFwiPEVPRj5cIjtcblx0fSBlbHNlIGlmIChhID09PSBUb2tlbi5FUFNJTE9OKSB7XG5cdFx0cmV0dXJuIFwiPEVQU0lMT04+XCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGxpdGVyYWxOYW1lc1thXSB8fCBzeW1ib2xpY05hbWVzW2FdO1xuXHR9XG59O1xuXG5leHBvcnRzLkludGVydmFsID0gSW50ZXJ2YWw7XG5leHBvcnRzLkludGVydmFsU2V0ID0gSW50ZXJ2YWxTZXQ7XG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy8vXG5cbnZhciBTZXQgPSByZXF1aXJlKCcuL1V0aWxzJykuU2V0O1xudmFyIEJpdFNldCA9IHJlcXVpcmUoJy4vVXRpbHMnKS5CaXRTZXQ7XG52YXIgVG9rZW4gPSByZXF1aXJlKCcuL1Rva2VuJykuVG9rZW47XG52YXIgQVROQ29uZmlnID0gcmVxdWlyZSgnLi9hdG4vQVROQ29uZmlnJykuQVROQ29uZmlnO1xudmFyIEludGVydmFsID0gcmVxdWlyZSgnLi9JbnRlcnZhbFNldCcpLkludGVydmFsO1xudmFyIEludGVydmFsU2V0ID0gcmVxdWlyZSgnLi9JbnRlcnZhbFNldCcpLkludGVydmFsU2V0O1xudmFyIFJ1bGVTdG9wU3RhdGUgPSByZXF1aXJlKCcuL2F0bi9BVE5TdGF0ZScpLlJ1bGVTdG9wU3RhdGU7XG52YXIgUnVsZVRyYW5zaXRpb24gPSByZXF1aXJlKCcuL2F0bi9UcmFuc2l0aW9uJykuUnVsZVRyYW5zaXRpb247XG52YXIgTm90U2V0VHJhbnNpdGlvbiA9IHJlcXVpcmUoJy4vYXRuL1RyYW5zaXRpb24nKS5Ob3RTZXRUcmFuc2l0aW9uO1xudmFyIFdpbGRjYXJkVHJhbnNpdGlvbiA9IHJlcXVpcmUoJy4vYXRuL1RyYW5zaXRpb24nKS5XaWxkY2FyZFRyYW5zaXRpb247XG52YXIgQWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uID0gcmVxdWlyZSgnLi9hdG4vVHJhbnNpdGlvbicpLkFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbjtcblxudmFyIHBjID0gcmVxdWlyZSgnLi9QcmVkaWN0aW9uQ29udGV4dCcpO1xudmFyIHByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0ID0gcGMucHJlZGljdGlvbkNvbnRleHRGcm9tUnVsZUNvbnRleHQ7XG52YXIgUHJlZGljdGlvbkNvbnRleHQgPSBwYy5QcmVkaWN0aW9uQ29udGV4dDtcbnZhciBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dCA9IHBjLlNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0O1xuXG5mdW5jdGlvbiBMTDFBbmFseXplciAoYXRuKSB7XG4gICAgdGhpcy5hdG4gPSBhdG47XG59XG5cbi8vKiBTcGVjaWFsIHZhbHVlIGFkZGVkIHRvIHRoZSBsb29rYWhlYWQgc2V0cyB0byBpbmRpY2F0ZSB0aGF0IHdlIGhpdFxuLy8gIGEgcHJlZGljYXRlIGR1cmluZyBhbmFseXNpcyBpZiB7QGNvZGUgc2VlVGhydVByZWRzPT1mYWxzZX0uXG4vLy9cbkxMMUFuYWx5emVyLkhJVF9QUkVEID0gVG9rZW4uSU5WQUxJRF9UWVBFO1xuXG5cbi8vKlxuLy8gQ2FsY3VsYXRlcyB0aGUgU0xMKDEpIGV4cGVjdGVkIGxvb2thaGVhZCBzZXQgZm9yIGVhY2ggb3V0Z29pbmcgdHJhbnNpdGlvblxuLy8gb2YgYW4ge0BsaW5rIEFUTlN0YXRlfS4gVGhlIHJldHVybmVkIGFycmF5IGhhcyBvbmUgZWxlbWVudCBmb3IgZWFjaFxuLy8gb3V0Z29pbmcgdHJhbnNpdGlvbiBpbiB7QGNvZGUgc30uIElmIHRoZSBjbG9zdXJlIGZyb20gdHJhbnNpdGlvblxuLy8gPGVtPmk8L2VtPiBsZWFkcyB0byBhIHNlbWFudGljIHByZWRpY2F0ZSBiZWZvcmUgbWF0Y2hpbmcgYSBzeW1ib2wsIHRoZVxuLy8gZWxlbWVudCBhdCBpbmRleCA8ZW0+aTwvZW0+IG9mIHRoZSByZXN1bHQgd2lsbCBiZSB7QGNvZGUgbnVsbH0uXG4vL1xuLy8gQHBhcmFtIHMgdGhlIEFUTiBzdGF0ZVxuLy8gQHJldHVybiB0aGUgZXhwZWN0ZWQgc3ltYm9scyBmb3IgZWFjaCBvdXRnb2luZyB0cmFuc2l0aW9uIG9mIHtAY29kZSBzfS5cbi8vL1xuTEwxQW5hbHl6ZXIucHJvdG90eXBlLmdldERlY2lzaW9uTG9va2FoZWFkID0gZnVuY3Rpb24ocykge1xuICAgIGlmIChzID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB2YXIgY291bnQgPSBzLnRyYW5zaXRpb25zLmxlbmd0aDtcbiAgICB2YXIgbG9vayA9IFtdO1xuICAgIGZvcih2YXIgYWx0PTA7IGFsdDwgY291bnQ7IGFsdCsrKSB7XG4gICAgICAgIGxvb2tbYWx0XSA9IG5ldyBJbnRlcnZhbFNldCgpO1xuICAgICAgICB2YXIgbG9va0J1c3kgPSBuZXcgU2V0KCk7XG4gICAgICAgIHZhciBzZWVUaHJ1UHJlZHMgPSBmYWxzZTsgLy8gZmFpbCB0byBnZXQgbG9va2FoZWFkIHVwb24gcHJlZFxuICAgICAgICB0aGlzLl9MT09LKHMudHJhbnNpdGlvbihhbHQpLnRhcmdldCwgbnVsbCwgUHJlZGljdGlvbkNvbnRleHQuRU1QVFksXG4gICAgICAgICAgICAgIGxvb2tbYWx0XSwgbG9va0J1c3ksIG5ldyBCaXRTZXQoKSwgc2VlVGhydVByZWRzLCBmYWxzZSk7XG4gICAgICAgIC8vIFdpcGUgb3V0IGxvb2thaGVhZCBmb3IgdGhpcyBhbHRlcm5hdGl2ZSBpZiB3ZSBmb3VuZCBub3RoaW5nXG4gICAgICAgIC8vIG9yIHdlIGhhZCBhIHByZWRpY2F0ZSB3aGVuIHdlICFzZWVUaHJ1UHJlZHNcbiAgICAgICAgaWYgKGxvb2tbYWx0XS5sZW5ndGg9PT0wIHx8IGxvb2tbYWx0XS5jb250YWlucyhMTDFBbmFseXplci5ISVRfUFJFRCkpIHtcbiAgICAgICAgICAgIGxvb2tbYWx0XSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGxvb2s7XG59O1xuXG4vLypcbi8vIENvbXB1dGUgc2V0IG9mIHRva2VucyB0aGF0IGNhbiBmb2xsb3cge0Bjb2RlIHN9IGluIHRoZSBBVE4gaW4gdGhlXG4vLyBzcGVjaWZpZWQge0Bjb2RlIGN0eH0uXG4vL1xuLy8gPHA+SWYge0Bjb2RlIGN0eH0gaXMge0Bjb2RlIG51bGx9IGFuZCB0aGUgZW5kIG9mIHRoZSBydWxlIGNvbnRhaW5pbmdcbi8vIHtAY29kZSBzfSBpcyByZWFjaGVkLCB7QGxpbmsgVG9rZW4vL0VQU0lMT059IGlzIGFkZGVkIHRvIHRoZSByZXN1bHQgc2V0LlxuLy8gSWYge0Bjb2RlIGN0eH0gaXMgbm90IHtAY29kZSBudWxsfSBhbmQgdGhlIGVuZCBvZiB0aGUgb3V0ZXJtb3N0IHJ1bGUgaXNcbi8vIHJlYWNoZWQsIHtAbGluayBUb2tlbi8vRU9GfSBpcyBhZGRlZCB0byB0aGUgcmVzdWx0IHNldC48L3A+XG4vL1xuLy8gQHBhcmFtIHMgdGhlIEFUTiBzdGF0ZVxuLy8gQHBhcmFtIHN0b3BTdGF0ZSB0aGUgQVROIHN0YXRlIHRvIHN0b3AgYXQuIFRoaXMgY2FuIGJlIGFcbi8vIHtAbGluayBCbG9ja0VuZFN0YXRlfSB0byBkZXRlY3QgZXBzaWxvbiBwYXRocyB0aHJvdWdoIGEgY2xvc3VyZS5cbi8vIEBwYXJhbSBjdHggdGhlIGNvbXBsZXRlIHBhcnNlciBjb250ZXh0LCBvciB7QGNvZGUgbnVsbH0gaWYgdGhlIGNvbnRleHRcbi8vIHNob3VsZCBiZSBpZ25vcmVkXG4vL1xuLy8gQHJldHVybiBUaGUgc2V0IG9mIHRva2VucyB0aGF0IGNhbiBmb2xsb3cge0Bjb2RlIHN9IGluIHRoZSBBVE4gaW4gdGhlXG4vLyBzcGVjaWZpZWQge0Bjb2RlIGN0eH0uXG4vLy9cbkxMMUFuYWx5emVyLnByb3RvdHlwZS5MT09LID0gZnVuY3Rpb24ocywgc3RvcFN0YXRlLCBjdHgpIHtcbiAgICB2YXIgciA9IG5ldyBJbnRlcnZhbFNldCgpO1xuICAgIHZhciBzZWVUaHJ1UHJlZHMgPSB0cnVlOyAvLyBpZ25vcmUgcHJlZHM7IGdldCBhbGwgbG9va2FoZWFkXG5cdGN0eCA9IGN0eCB8fCBudWxsO1xuICAgIHZhciBsb29rQ29udGV4dCA9IGN0eCE9PW51bGwgPyBwcmVkaWN0aW9uQ29udGV4dEZyb21SdWxlQ29udGV4dChzLmF0biwgY3R4KSA6IG51bGw7XG4gICAgdGhpcy5fTE9PSyhzLCBzdG9wU3RhdGUsIGxvb2tDb250ZXh0LCByLCBuZXcgU2V0KCksIG5ldyBCaXRTZXQoKSwgc2VlVGhydVByZWRzLCB0cnVlKTtcbiAgICByZXR1cm4gcjtcbn07XG5cbi8vKlxuLy8gQ29tcHV0ZSBzZXQgb2YgdG9rZW5zIHRoYXQgY2FuIGZvbGxvdyB7QGNvZGUgc30gaW4gdGhlIEFUTiBpbiB0aGVcbi8vIHNwZWNpZmllZCB7QGNvZGUgY3R4fS5cbi8vXG4vLyA8cD5JZiB7QGNvZGUgY3R4fSBpcyB7QGNvZGUgbnVsbH0gYW5kIHtAY29kZSBzdG9wU3RhdGV9IG9yIHRoZSBlbmQgb2YgdGhlXG4vLyBydWxlIGNvbnRhaW5pbmcge0Bjb2RlIHN9IGlzIHJlYWNoZWQsIHtAbGluayBUb2tlbi8vRVBTSUxPTn0gaXMgYWRkZWQgdG9cbi8vIHRoZSByZXN1bHQgc2V0LiBJZiB7QGNvZGUgY3R4fSBpcyBub3Qge0Bjb2RlIG51bGx9IGFuZCB7QGNvZGUgYWRkRU9GfSBpc1xuLy8ge0Bjb2RlIHRydWV9IGFuZCB7QGNvZGUgc3RvcFN0YXRlfSBvciB0aGUgZW5kIG9mIHRoZSBvdXRlcm1vc3QgcnVsZSBpc1xuLy8gcmVhY2hlZCwge0BsaW5rIFRva2VuLy9FT0Z9IGlzIGFkZGVkIHRvIHRoZSByZXN1bHQgc2V0LjwvcD5cbi8vXG4vLyBAcGFyYW0gcyB0aGUgQVROIHN0YXRlLlxuLy8gQHBhcmFtIHN0b3BTdGF0ZSB0aGUgQVROIHN0YXRlIHRvIHN0b3AgYXQuIFRoaXMgY2FuIGJlIGFcbi8vIHtAbGluayBCbG9ja0VuZFN0YXRlfSB0byBkZXRlY3QgZXBzaWxvbiBwYXRocyB0aHJvdWdoIGEgY2xvc3VyZS5cbi8vIEBwYXJhbSBjdHggVGhlIG91dGVyIGNvbnRleHQsIG9yIHtAY29kZSBudWxsfSBpZiB0aGUgb3V0ZXIgY29udGV4dCBzaG91bGRcbi8vIG5vdCBiZSB1c2VkLlxuLy8gQHBhcmFtIGxvb2sgVGhlIHJlc3VsdCBsb29rYWhlYWQgc2V0LlxuLy8gQHBhcmFtIGxvb2tCdXN5IEEgc2V0IHVzZWQgZm9yIHByZXZlbnRpbmcgZXBzaWxvbiBjbG9zdXJlcyBpbiB0aGUgQVROXG4vLyBmcm9tIGNhdXNpbmcgYSBzdGFjayBvdmVyZmxvdy4gT3V0c2lkZSBjb2RlIHNob3VsZCBwYXNzXG4vLyB7QGNvZGUgbmV3IFNldDxBVE5Db25maWc+fSBmb3IgdGhpcyBhcmd1bWVudC5cbi8vIEBwYXJhbSBjYWxsZWRSdWxlU3RhY2sgQSBzZXQgdXNlZCBmb3IgcHJldmVudGluZyBsZWZ0IHJlY3Vyc2lvbiBpbiB0aGVcbi8vIEFUTiBmcm9tIGNhdXNpbmcgYSBzdGFjayBvdmVyZmxvdy4gT3V0c2lkZSBjb2RlIHNob3VsZCBwYXNzXG4vLyB7QGNvZGUgbmV3IEJpdFNldCgpfSBmb3IgdGhpcyBhcmd1bWVudC5cbi8vIEBwYXJhbSBzZWVUaHJ1UHJlZHMge0Bjb2RlIHRydWV9IHRvIHRydWUgc2VtYW50aWMgcHJlZGljYXRlcyBhc1xuLy8gaW1wbGljaXRseSB7QGNvZGUgdHJ1ZX0gYW5kIFwic2VlIHRocm91Z2ggdGhlbVwiLCBvdGhlcndpc2Uge0Bjb2RlIGZhbHNlfVxuLy8gdG8gdHJlYXQgc2VtYW50aWMgcHJlZGljYXRlcyBhcyBvcGFxdWUgYW5kIGFkZCB7QGxpbmsgLy9ISVRfUFJFRH0gdG8gdGhlXG4vLyByZXN1bHQgaWYgb25lIGlzIGVuY291bnRlcmVkLlxuLy8gQHBhcmFtIGFkZEVPRiBBZGQge0BsaW5rIFRva2VuLy9FT0Z9IHRvIHRoZSByZXN1bHQgaWYgdGhlIGVuZCBvZiB0aGVcbi8vIG91dGVybW9zdCBjb250ZXh0IGlzIHJlYWNoZWQuIFRoaXMgcGFyYW1ldGVyIGhhcyBubyBlZmZlY3QgaWYge0Bjb2RlIGN0eH1cbi8vIGlzIHtAY29kZSBudWxsfS5cbi8vL1xuTEwxQW5hbHl6ZXIucHJvdG90eXBlLl9MT09LID0gZnVuY3Rpb24ocywgc3RvcFN0YXRlICwgY3R4LCBsb29rLCBsb29rQnVzeSwgY2FsbGVkUnVsZVN0YWNrLCBzZWVUaHJ1UHJlZHMsIGFkZEVPRikge1xuICAgIHZhciBjID0gbmV3IEFUTkNvbmZpZyh7c3RhdGU6cywgYWx0OjAsIGNvbnRleHQ6IGN0eH0sIG51bGwpO1xuICAgIGlmIChsb29rQnVzeS5jb250YWlucyhjKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGxvb2tCdXN5LmFkZChjKTtcbiAgICBpZiAocyA9PT0gc3RvcFN0YXRlKSB7XG4gICAgICAgIGlmIChjdHggPT09bnVsbCkge1xuICAgICAgICAgICAgbG9vay5hZGRPbmUoVG9rZW4uRVBTSUxPTik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiAoY3R4LmlzRW1wdHkoKSAmJiBhZGRFT0YpIHtcbiAgICAgICAgICAgIGxvb2suYWRkT25lKFRva2VuLkVPRik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKHMgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlICkge1xuICAgICAgICBpZiAoY3R4ID09PW51bGwpIHtcbiAgICAgICAgICAgIGxvb2suYWRkT25lKFRva2VuLkVQU0lMT04pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKGN0eC5pc0VtcHR5KCkgJiYgYWRkRU9GKSB7XG4gICAgICAgICAgICBsb29rLmFkZE9uZShUb2tlbi5FT0YpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdHggIT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZKSB7XG4gICAgICAgICAgICAvLyBydW4gdGhydSBhbGwgcG9zc2libGUgc3RhY2sgdG9wcyBpbiBjdHhcbiAgICAgICAgICAgIGZvcih2YXIgaT0wOyBpPGN0eC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciByZXR1cm5TdGF0ZSA9IHRoaXMuYXRuLnN0YXRlc1tjdHguZ2V0UmV0dXJuU3RhdGUoaSldO1xuICAgICAgICAgICAgICAgIHZhciByZW1vdmVkID0gY2FsbGVkUnVsZVN0YWNrLmNvbnRhaW5zKHJldHVyblN0YXRlLnJ1bGVJbmRleCk7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGVkUnVsZVN0YWNrLnJlbW92ZShyZXR1cm5TdGF0ZS5ydWxlSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9MT09LKHJldHVyblN0YXRlLCBzdG9wU3RhdGUsIGN0eC5nZXRQYXJlbnQoaSksIGxvb2ssIGxvb2tCdXN5LCBjYWxsZWRSdWxlU3RhY2ssIHNlZVRocnVQcmVkcywgYWRkRU9GKTtcbiAgICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVtb3ZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGVkUnVsZVN0YWNrLmFkZChyZXR1cm5TdGF0ZS5ydWxlSW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvcih2YXIgaj0wOyBqPHMudHJhbnNpdGlvbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdmFyIHQgPSBzLnRyYW5zaXRpb25zW2pdO1xuICAgICAgICBpZiAodC5jb25zdHJ1Y3RvciA9PT0gUnVsZVRyYW5zaXRpb24pIHtcbiAgICAgICAgICAgIGlmIChjYWxsZWRSdWxlU3RhY2suY29udGFpbnModC50YXJnZXQucnVsZUluZGV4KSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIG5ld0NvbnRleHQgPSBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5jcmVhdGUoY3R4LCB0LmZvbGxvd1N0YXRlLnN0YXRlTnVtYmVyKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY2FsbGVkUnVsZVN0YWNrLmFkZCh0LnRhcmdldC5ydWxlSW5kZXgpO1xuICAgICAgICAgICAgICAgIHRoaXMuX0xPT0sodC50YXJnZXQsIHN0b3BTdGF0ZSwgbmV3Q29udGV4dCwgbG9vaywgbG9va0J1c3ksIGNhbGxlZFJ1bGVTdGFjaywgc2VlVGhydVByZWRzLCBhZGRFT0YpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICBjYWxsZWRSdWxlU3RhY2sucmVtb3ZlKHQudGFyZ2V0LnJ1bGVJbmRleCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodCBpbnN0YW5jZW9mIEFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbiApIHtcbiAgICAgICAgICAgIGlmIChzZWVUaHJ1UHJlZHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9MT09LKHQudGFyZ2V0LCBzdG9wU3RhdGUsIGN0eCwgbG9vaywgbG9va0J1c3ksIGNhbGxlZFJ1bGVTdGFjaywgc2VlVGhydVByZWRzLCBhZGRFT0YpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsb29rLmFkZE9uZShMTDFBbmFseXplci5ISVRfUFJFRCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiggdC5pc0Vwc2lsb24pIHtcbiAgICAgICAgICAgIHRoaXMuX0xPT0sodC50YXJnZXQsIHN0b3BTdGF0ZSwgY3R4LCBsb29rLCBsb29rQnVzeSwgY2FsbGVkUnVsZVN0YWNrLCBzZWVUaHJ1UHJlZHMsIGFkZEVPRik7XG4gICAgICAgIH0gZWxzZSBpZiAodC5jb25zdHJ1Y3RvciA9PT0gV2lsZGNhcmRUcmFuc2l0aW9uKSB7XG4gICAgICAgICAgICBsb29rLmFkZFJhbmdlKCBUb2tlbi5NSU5fVVNFUl9UT0tFTl9UWVBFLCB0aGlzLmF0bi5tYXhUb2tlblR5cGUgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBzZXQgPSB0LmxhYmVsO1xuICAgICAgICAgICAgaWYgKHNldCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmICh0IGluc3RhbmNlb2YgTm90U2V0VHJhbnNpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBzZXQgPSBzZXQuY29tcGxlbWVudChUb2tlbi5NSU5fVVNFUl9UT0tFTl9UWVBFLCB0aGlzLmF0bi5tYXhUb2tlblR5cGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsb29rLmFkZFNldChzZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuZXhwb3J0cy5MTDFBbmFseXplciA9IExMMUFuYWx5emVyO1xuXG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxuLy8gQSBsZXhlciBpcyByZWNvZ25pemVyIHRoYXQgZHJhd3MgaW5wdXQgc3ltYm9scyBmcm9tIGEgY2hhcmFjdGVyIHN0cmVhbS5cbi8vICBsZXhlciBncmFtbWFycyByZXN1bHQgaW4gYSBzdWJjbGFzcyBvZiB0aGlzIG9iamVjdC4gQSBMZXhlciBvYmplY3Rcbi8vICB1c2VzIHNpbXBsaWZpZWQgbWF0Y2goKSBhbmQgZXJyb3IgcmVjb3ZlcnkgbWVjaGFuaXNtcyBpbiB0aGUgaW50ZXJlc3Qgb2Ygc3BlZWQuXG5cbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vVG9rZW4nKS5Ub2tlbjtcbnZhciBSZWNvZ25pemVyID0gcmVxdWlyZSgnLi9SZWNvZ25pemVyJykuUmVjb2duaXplcjtcbnZhciBDb21tb25Ub2tlbkZhY3RvcnkgPSByZXF1aXJlKCcuL0NvbW1vblRva2VuRmFjdG9yeScpLkNvbW1vblRva2VuRmFjdG9yeTtcbnZhciBSZWNvZ25pdGlvbkV4Y2VwdGlvbiAgPSByZXF1aXJlKCcuL2Vycm9yL0Vycm9ycycpLlJlY29nbml0aW9uRXhjZXB0aW9uO1xudmFyIExleGVyTm9WaWFibGVBbHRFeGNlcHRpb24gPSByZXF1aXJlKCcuL2Vycm9yL0Vycm9ycycpLkxleGVyTm9WaWFibGVBbHRFeGNlcHRpb247XG5cbmZ1bmN0aW9uIFRva2VuU291cmNlKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gTGV4ZXIoaW5wdXQpIHtcblx0UmVjb2duaXplci5jYWxsKHRoaXMpO1xuXHR0aGlzLl9pbnB1dCA9IGlucHV0O1xuXHR0aGlzLl9mYWN0b3J5ID0gQ29tbW9uVG9rZW5GYWN0b3J5LkRFRkFVTFQ7XG5cdHRoaXMuX3Rva2VuRmFjdG9yeVNvdXJjZVBhaXIgPSBbIHRoaXMsIGlucHV0IF07XG5cblx0dGhpcy5faW50ZXJwID0gbnVsbDsgLy8gY2hpbGQgY2xhc3NlcyBtdXN0IHBvcHVsYXRlIHRoaXNcblxuXHQvLyBUaGUgZ29hbCBvZiBhbGwgbGV4ZXIgcnVsZXMvbWV0aG9kcyBpcyB0byBjcmVhdGUgYSB0b2tlbiBvYmplY3QuXG5cdC8vIHRoaXMgaXMgYW4gaW5zdGFuY2UgdmFyaWFibGUgYXMgbXVsdGlwbGUgcnVsZXMgbWF5IGNvbGxhYm9yYXRlIHRvXG5cdC8vIGNyZWF0ZSBhIHNpbmdsZSB0b2tlbi4gbmV4dFRva2VuIHdpbGwgcmV0dXJuIHRoaXMgb2JqZWN0IGFmdGVyXG5cdC8vIG1hdGNoaW5nIGxleGVyIHJ1bGUocykuIElmIHlvdSBzdWJjbGFzcyB0byBhbGxvdyBtdWx0aXBsZSB0b2tlblxuXHQvLyBlbWlzc2lvbnMsIHRoZW4gc2V0IHRoaXMgdG8gdGhlIGxhc3QgdG9rZW4gdG8gYmUgbWF0Y2hlZCBvclxuXHQvLyBzb21ldGhpbmcgbm9ubnVsbCBzbyB0aGF0IHRoZSBhdXRvIHRva2VuIGVtaXQgbWVjaGFuaXNtIHdpbGwgbm90XG5cdC8vIGVtaXQgYW5vdGhlciB0b2tlbi5cblx0dGhpcy5fdG9rZW4gPSBudWxsO1xuXG5cdC8vIFdoYXQgY2hhcmFjdGVyIGluZGV4IGluIHRoZSBzdHJlYW0gZGlkIHRoZSBjdXJyZW50IHRva2VuIHN0YXJ0IGF0P1xuXHQvLyBOZWVkZWQsIGZvciBleGFtcGxlLCB0byBnZXQgdGhlIHRleHQgZm9yIGN1cnJlbnQgdG9rZW4uIFNldCBhdFxuXHQvLyB0aGUgc3RhcnQgb2YgbmV4dFRva2VuLlxuXHR0aGlzLl90b2tlblN0YXJ0Q2hhckluZGV4ID0gLTE7XG5cblx0Ly8gVGhlIGxpbmUgb24gd2hpY2ggdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgdG9rZW4gcmVzaWRlcy8vL1xuXHR0aGlzLl90b2tlblN0YXJ0TGluZSA9IC0xO1xuXG5cdC8vIFRoZSBjaGFyYWN0ZXIgcG9zaXRpb24gb2YgZmlyc3QgY2hhcmFjdGVyIHdpdGhpbiB0aGUgbGluZS8vL1xuXHR0aGlzLl90b2tlblN0YXJ0Q29sdW1uID0gLTE7XG5cblx0Ly8gT25jZSB3ZSBzZWUgRU9GIG9uIGNoYXIgc3RyZWFtLCBuZXh0IHRva2VuIHdpbGwgYmUgRU9GLlxuXHQvLyBJZiB5b3UgaGF2ZSBET05FIDogRU9GIDsgdGhlbiB5b3Ugc2VlIERPTkUgRU9GLlxuXHR0aGlzLl9oaXRFT0YgPSBmYWxzZTtcblxuXHQvLyBUaGUgY2hhbm5lbCBudW1iZXIgZm9yIHRoZSBjdXJyZW50IHRva2VuLy8vXG5cdHRoaXMuX2NoYW5uZWwgPSBUb2tlbi5ERUZBVUxUX0NIQU5ORUw7XG5cblx0Ly8gVGhlIHRva2VuIHR5cGUgZm9yIHRoZSBjdXJyZW50IHRva2VuLy8vXG5cdHRoaXMuX3R5cGUgPSBUb2tlbi5JTlZBTElEX1RZUEU7XG5cblx0dGhpcy5fbW9kZVN0YWNrID0gW107XG5cdHRoaXMuX21vZGUgPSBMZXhlci5ERUZBVUxUX01PREU7XG5cblx0Ly8gWW91IGNhbiBzZXQgdGhlIHRleHQgZm9yIHRoZSBjdXJyZW50IHRva2VuIHRvIG92ZXJyaWRlIHdoYXQgaXMgaW5cblx0Ly8gdGhlIGlucHV0IGNoYXIgYnVmZmVyLiBVc2Ugc2V0VGV4dCgpIG9yIGNhbiBzZXQgdGhpcyBpbnN0YW5jZSB2YXIuXG5cdC8vIC9cblx0dGhpcy5fdGV4dCA9IG51bGw7XG5cblx0cmV0dXJuIHRoaXM7XG59XG5cbkxleGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUmVjb2duaXplci5wcm90b3R5cGUpO1xuTGV4ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGV4ZXI7XG5cbkxleGVyLkRFRkFVTFRfTU9ERSA9IDA7XG5MZXhlci5NT1JFID0gLTI7XG5MZXhlci5TS0lQID0gLTM7XG5cbkxleGVyLkRFRkFVTFRfVE9LRU5fQ0hBTk5FTCA9IFRva2VuLkRFRkFVTFRfQ0hBTk5FTDtcbkxleGVyLkhJRERFTiA9IFRva2VuLkhJRERFTl9DSEFOTkVMO1xuTGV4ZXIuTUlOX0NIQVJfVkFMVUUgPSAweDAwMDA7XG5MZXhlci5NQVhfQ0hBUl9WQUxVRSA9IDB4MTBGRkZGO1xuXG5MZXhlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHtcblx0Ly8gd2FjayBMZXhlciBzdGF0ZSB2YXJpYWJsZXNcblx0aWYgKHRoaXMuX2lucHV0ICE9PSBudWxsKSB7XG5cdFx0dGhpcy5faW5wdXQuc2VlaygwKTsgLy8gcmV3aW5kIHRoZSBpbnB1dFxuXHR9XG5cdHRoaXMuX3Rva2VuID0gbnVsbDtcblx0dGhpcy5fdHlwZSA9IFRva2VuLklOVkFMSURfVFlQRTtcblx0dGhpcy5fY2hhbm5lbCA9IFRva2VuLkRFRkFVTFRfQ0hBTk5FTDtcblx0dGhpcy5fdG9rZW5TdGFydENoYXJJbmRleCA9IC0xO1xuXHR0aGlzLl90b2tlblN0YXJ0Q29sdW1uID0gLTE7XG5cdHRoaXMuX3Rva2VuU3RhcnRMaW5lID0gLTE7XG5cdHRoaXMuX3RleHQgPSBudWxsO1xuXG5cdHRoaXMuX2hpdEVPRiA9IGZhbHNlO1xuXHR0aGlzLl9tb2RlID0gTGV4ZXIuREVGQVVMVF9NT0RFO1xuXHR0aGlzLl9tb2RlU3RhY2sgPSBbXTtcblxuXHR0aGlzLl9pbnRlcnAucmVzZXQoKTtcbn07XG5cbi8vIFJldHVybiBhIHRva2VuIGZyb20gdGhpcyBzb3VyY2U7IGkuZS4sIG1hdGNoIGEgdG9rZW4gb24gdGhlIGNoYXIgc3RyZWFtLlxuTGV4ZXIucHJvdG90eXBlLm5leHRUb2tlbiA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5faW5wdXQgPT09IG51bGwpIHtcblx0XHR0aHJvdyBcIm5leHRUb2tlbiByZXF1aXJlcyBhIG5vbi1udWxsIGlucHV0IHN0cmVhbS5cIjtcblx0fVxuXG5cdC8vIE1hcmsgc3RhcnQgbG9jYXRpb24gaW4gY2hhciBzdHJlYW0gc28gdW5idWZmZXJlZCBzdHJlYW1zIGFyZVxuXHQvLyBndWFyYW50ZWVkIGF0IGxlYXN0IGhhdmUgdGV4dCBvZiBjdXJyZW50IHRva2VuXG5cdHZhciB0b2tlblN0YXJ0TWFya2VyID0gdGhpcy5faW5wdXQubWFyaygpO1xuXHR0cnkge1xuXHRcdHdoaWxlICh0cnVlKSB7XG5cdFx0XHRpZiAodGhpcy5faGl0RU9GKSB7XG5cdFx0XHRcdHRoaXMuZW1pdEVPRigpO1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fdG9rZW47XG5cdFx0XHR9XG5cdFx0XHR0aGlzLl90b2tlbiA9IG51bGw7XG5cdFx0XHR0aGlzLl9jaGFubmVsID0gVG9rZW4uREVGQVVMVF9DSEFOTkVMO1xuXHRcdFx0dGhpcy5fdG9rZW5TdGFydENoYXJJbmRleCA9IHRoaXMuX2lucHV0LmluZGV4O1xuXHRcdFx0dGhpcy5fdG9rZW5TdGFydENvbHVtbiA9IHRoaXMuX2ludGVycC5jb2x1bW47XG5cdFx0XHR0aGlzLl90b2tlblN0YXJ0TGluZSA9IHRoaXMuX2ludGVycC5saW5lO1xuXHRcdFx0dGhpcy5fdGV4dCA9IG51bGw7XG5cdFx0XHR2YXIgY29udGludWVPdXRlciA9IGZhbHNlO1xuXHRcdFx0d2hpbGUgKHRydWUpIHtcblx0XHRcdFx0dGhpcy5fdHlwZSA9IFRva2VuLklOVkFMSURfVFlQRTtcblx0XHRcdFx0dmFyIHR0eXBlID0gTGV4ZXIuU0tJUDtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHR0dHlwZSA9IHRoaXMuX2ludGVycC5tYXRjaCh0aGlzLl9pbnB1dCwgdGhpcy5fbW9kZSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0ICAgIGlmKGUgaW5zdGFuY2VvZiBSZWNvZ25pdGlvbkV4Y2VwdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlMaXN0ZW5lcnMoZSk7IC8vIHJlcG9ydCBlcnJvclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWNvdmVyKGUpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZS5zdGFjayk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuX2lucHV0LkxBKDEpID09PSBUb2tlbi5FT0YpIHtcblx0XHRcdFx0XHR0aGlzLl9oaXRFT0YgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLl90eXBlID09PSBUb2tlbi5JTlZBTElEX1RZUEUpIHtcblx0XHRcdFx0XHR0aGlzLl90eXBlID0gdHR5cGU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuX3R5cGUgPT09IExleGVyLlNLSVApIHtcblx0XHRcdFx0XHRjb250aW51ZU91dGVyID0gdHJ1ZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy5fdHlwZSAhPT0gTGV4ZXIuTU9SRSkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoY29udGludWVPdXRlcikge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblx0XHRcdGlmICh0aGlzLl90b2tlbiA9PT0gbnVsbCkge1xuXHRcdFx0XHR0aGlzLmVtaXQoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLl90b2tlbjtcblx0XHR9XG5cdH0gZmluYWxseSB7XG5cdFx0Ly8gbWFrZSBzdXJlIHdlIHJlbGVhc2UgbWFya2VyIGFmdGVyIG1hdGNoIG9yXG5cdFx0Ly8gdW5idWZmZXJlZCBjaGFyIHN0cmVhbSB3aWxsIGtlZXAgYnVmZmVyaW5nXG5cdFx0dGhpcy5faW5wdXQucmVsZWFzZSh0b2tlblN0YXJ0TWFya2VyKTtcblx0fVxufTtcblxuLy8gSW5zdHJ1Y3QgdGhlIGxleGVyIHRvIHNraXAgY3JlYXRpbmcgYSB0b2tlbiBmb3IgY3VycmVudCBsZXhlciBydWxlXG4vLyBhbmQgbG9vayBmb3IgYW5vdGhlciB0b2tlbi4gbmV4dFRva2VuKCkga25vd3MgdG8ga2VlcCBsb29raW5nIHdoZW5cbi8vIGEgbGV4ZXIgcnVsZSBmaW5pc2hlcyB3aXRoIHRva2VuIHNldCB0byBTS0lQX1RPS0VOLiBSZWNhbGwgdGhhdFxuLy8gaWYgdG9rZW49PW51bGwgYXQgZW5kIG9mIGFueSB0b2tlbiBydWxlLCBpdCBjcmVhdGVzIG9uZSBmb3IgeW91XG4vLyBhbmQgZW1pdHMgaXQuXG4vLyAvXG5MZXhlci5wcm90b3R5cGUuc2tpcCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLl90eXBlID0gTGV4ZXIuU0tJUDtcbn07XG5cbkxleGVyLnByb3RvdHlwZS5tb3JlID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuX3R5cGUgPSBMZXhlci5NT1JFO1xufTtcblxuTGV4ZXIucHJvdG90eXBlLm1vZGUgPSBmdW5jdGlvbihtKSB7XG5cdHRoaXMuX21vZGUgPSBtO1xufTtcblxuTGV4ZXIucHJvdG90eXBlLnB1c2hNb2RlID0gZnVuY3Rpb24obSkge1xuXHRpZiAodGhpcy5faW50ZXJwLmRlYnVnKSB7XG5cdFx0Y29uc29sZS5sb2coXCJwdXNoTW9kZSBcIiArIG0pO1xuXHR9XG5cdHRoaXMuX21vZGVTdGFjay5wdXNoKHRoaXMuX21vZGUpO1xuXHR0aGlzLm1vZGUobSk7XG59O1xuXG5MZXhlci5wcm90b3R5cGUucG9wTW9kZSA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5fbW9kZVN0YWNrLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IFwiRW1wdHkgU3RhY2tcIjtcblx0fVxuXHRpZiAodGhpcy5faW50ZXJwLmRlYnVnKSB7XG5cdFx0Y29uc29sZS5sb2coXCJwb3BNb2RlIGJhY2sgdG8gXCIgKyB0aGlzLl9tb2RlU3RhY2suc2xpY2UoMCwgLTEpKTtcblx0fVxuXHR0aGlzLm1vZGUodGhpcy5fbW9kZVN0YWNrLnBvcCgpKTtcblx0cmV0dXJuIHRoaXMuX21vZGU7XG59O1xuXG4vLyBTZXQgdGhlIGNoYXIgc3RyZWFtIGFuZCByZXNldCB0aGUgbGV4ZXJcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMZXhlci5wcm90b3R5cGUsIFwiaW5wdXRTdHJlYW1cIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5faW5wdXQ7XG5cdH0sXG5cdHNldCA6IGZ1bmN0aW9uKGlucHV0KSB7XG5cdFx0dGhpcy5faW5wdXQgPSBudWxsO1xuXHRcdHRoaXMuX3Rva2VuRmFjdG9yeVNvdXJjZVBhaXIgPSBbIHRoaXMsIHRoaXMuX2lucHV0IF07XG5cdFx0dGhpcy5yZXNldCgpO1xuXHRcdHRoaXMuX2lucHV0ID0gaW5wdXQ7XG5cdFx0dGhpcy5fdG9rZW5GYWN0b3J5U291cmNlUGFpciA9IFsgdGhpcywgdGhpcy5faW5wdXQgXTtcblx0fVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMZXhlci5wcm90b3R5cGUsIFwic291cmNlTmFtZVwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uIHNvdXJjZU5hbWUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2lucHV0LnNvdXJjZU5hbWU7XG5cdH1cbn0pO1xuXG4vLyBCeSBkZWZhdWx0IGRvZXMgbm90IHN1cHBvcnQgbXVsdGlwbGUgZW1pdHMgcGVyIG5leHRUb2tlbiBpbnZvY2F0aW9uXG4vLyBmb3IgZWZmaWNpZW5jeSByZWFzb25zLiBTdWJjbGFzcyBhbmQgb3ZlcnJpZGUgdGhpcyBtZXRob2QsIG5leHRUb2tlbixcbi8vIGFuZCBnZXRUb2tlbiAodG8gcHVzaCB0b2tlbnMgaW50byBhIGxpc3QgYW5kIHB1bGwgZnJvbSB0aGF0IGxpc3Rcbi8vIHJhdGhlciB0aGFuIGEgc2luZ2xlIHZhcmlhYmxlIGFzIHRoaXMgaW1wbGVtZW50YXRpb24gZG9lcykuXG4vLyAvXG5MZXhlci5wcm90b3R5cGUuZW1pdFRva2VuID0gZnVuY3Rpb24odG9rZW4pIHtcblx0dGhpcy5fdG9rZW4gPSB0b2tlbjtcbn07XG5cbi8vIFRoZSBzdGFuZGFyZCBtZXRob2QgY2FsbGVkIHRvIGF1dG9tYXRpY2FsbHkgZW1pdCBhIHRva2VuIGF0IHRoZVxuLy8gb3V0ZXJtb3N0IGxleGljYWwgcnVsZS4gVGhlIHRva2VuIG9iamVjdCBzaG91bGQgcG9pbnQgaW50byB0aGVcbi8vIGNoYXIgYnVmZmVyIHN0YXJ0Li5zdG9wLiBJZiB0aGVyZSBpcyBhIHRleHQgb3ZlcnJpZGUgaW4gJ3RleHQnLFxuLy8gdXNlIHRoYXQgdG8gc2V0IHRoZSB0b2tlbidzIHRleHQuIE92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGVtaXRcbi8vIGN1c3RvbSBUb2tlbiBvYmplY3RzIG9yIHByb3ZpZGUgYSBuZXcgZmFjdG9yeS5cbi8vIC9cbkxleGVyLnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0ID0gdGhpcy5fZmFjdG9yeS5jcmVhdGUodGhpcy5fdG9rZW5GYWN0b3J5U291cmNlUGFpciwgdGhpcy5fdHlwZSxcblx0XHRcdHRoaXMuX3RleHQsIHRoaXMuX2NoYW5uZWwsIHRoaXMuX3Rva2VuU3RhcnRDaGFySW5kZXgsIHRoaXNcblx0XHRcdFx0XHQuZ2V0Q2hhckluZGV4KCkgLSAxLCB0aGlzLl90b2tlblN0YXJ0TGluZSxcblx0XHRcdHRoaXMuX3Rva2VuU3RhcnRDb2x1bW4pO1xuXHR0aGlzLmVtaXRUb2tlbih0KTtcblx0cmV0dXJuIHQ7XG59O1xuXG5MZXhlci5wcm90b3R5cGUuZW1pdEVPRiA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgY3BvcyA9IHRoaXMuY29sdW1uO1xuXHR2YXIgbHBvcyA9IHRoaXMubGluZTtcblx0dmFyIGVvZiA9IHRoaXMuX2ZhY3RvcnkuY3JlYXRlKHRoaXMuX3Rva2VuRmFjdG9yeVNvdXJjZVBhaXIsIFRva2VuLkVPRixcblx0XHRcdG51bGwsIFRva2VuLkRFRkFVTFRfQ0hBTk5FTCwgdGhpcy5faW5wdXQuaW5kZXgsXG5cdFx0XHR0aGlzLl9pbnB1dC5pbmRleCAtIDEsIGxwb3MsIGNwb3MpO1xuXHR0aGlzLmVtaXRUb2tlbihlb2YpO1xuXHRyZXR1cm4gZW9mO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExleGVyLnByb3RvdHlwZSwgXCJ0eXBlXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMudHlwZTtcblx0fSxcblx0c2V0IDogZnVuY3Rpb24odHlwZSkge1xuXHRcdHRoaXMuX3R5cGUgPSB0eXBlO1xuXHR9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExleGVyLnByb3RvdHlwZSwgXCJsaW5lXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2ludGVycC5saW5lO1xuXHR9LFxuXHRzZXQgOiBmdW5jdGlvbihsaW5lKSB7XG5cdFx0dGhpcy5faW50ZXJwLmxpbmUgPSBsaW5lO1xuXHR9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExleGVyLnByb3RvdHlwZSwgXCJjb2x1bW5cIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5faW50ZXJwLmNvbHVtbjtcblx0fSxcblx0c2V0IDogZnVuY3Rpb24oY29sdW1uKSB7XG5cdFx0dGhpcy5faW50ZXJwLmNvbHVtbiA9IGNvbHVtbjtcblx0fVxufSk7XG5cblxuLy8gV2hhdCBpcyB0aGUgaW5kZXggb2YgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIG9mIGxvb2thaGVhZD8vLy9cbkxleGVyLnByb3RvdHlwZS5nZXRDaGFySW5kZXggPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuX2lucHV0LmluZGV4O1xufTtcblxuLy8gUmV0dXJuIHRoZSB0ZXh0IG1hdGNoZWQgc28gZmFyIGZvciB0aGUgY3VycmVudCB0b2tlbiBvciBhbnkgdGV4dCBvdmVycmlkZS5cbi8vU2V0IHRoZSBjb21wbGV0ZSB0ZXh0IG9mIHRoaXMgdG9rZW47IGl0IHdpcGVzIGFueSBwcmV2aW91cyBjaGFuZ2VzIHRvIHRoZSB0ZXh0LlxuT2JqZWN0LmRlZmluZVByb3BlcnR5KExleGVyLnByb3RvdHlwZSwgXCJ0ZXh0XCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKHRoaXMuX3RleHQgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiB0aGlzLl90ZXh0O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5faW50ZXJwLmdldFRleHQodGhpcy5faW5wdXQpO1xuXHRcdH1cblx0fSxcblx0c2V0IDogZnVuY3Rpb24odGV4dCkge1xuXHRcdHRoaXMuX3RleHQgPSB0ZXh0O1xuXHR9XG59KTtcbi8vIFJldHVybiBhIGxpc3Qgb2YgYWxsIFRva2VuIG9iamVjdHMgaW4gaW5wdXQgY2hhciBzdHJlYW0uXG4vLyBGb3JjZXMgbG9hZCBvZiBhbGwgdG9rZW5zLiBEb2VzIG5vdCBpbmNsdWRlIEVPRiB0b2tlbi5cbi8vIC9cbkxleGVyLnByb3RvdHlwZS5nZXRBbGxUb2tlbnMgPSBmdW5jdGlvbigpIHtcblx0dmFyIHRva2VucyA9IFtdO1xuXHR2YXIgdCA9IHRoaXMubmV4dFRva2VuKCk7XG5cdHdoaWxlICh0LnR5cGUgIT09IFRva2VuLkVPRikge1xuXHRcdHRva2Vucy5wdXNoKHQpO1xuXHRcdHQgPSB0aGlzLm5leHRUb2tlbigpO1xuXHR9XG5cdHJldHVybiB0b2tlbnM7XG59O1xuXG5MZXhlci5wcm90b3R5cGUubm90aWZ5TGlzdGVuZXJzID0gZnVuY3Rpb24oZSkge1xuXHR2YXIgc3RhcnQgPSB0aGlzLl90b2tlblN0YXJ0Q2hhckluZGV4O1xuXHR2YXIgc3RvcCA9IHRoaXMuX2lucHV0LmluZGV4O1xuXHR2YXIgdGV4dCA9IHRoaXMuX2lucHV0LmdldFRleHQoc3RhcnQsIHN0b3ApO1xuXHR2YXIgbXNnID0gXCJ0b2tlbiByZWNvZ25pdGlvbiBlcnJvciBhdDogJ1wiICsgdGhpcy5nZXRFcnJvckRpc3BsYXkodGV4dCkgKyBcIidcIjtcblx0dmFyIGxpc3RlbmVyID0gdGhpcy5nZXRFcnJvckxpc3RlbmVyRGlzcGF0Y2goKTtcblx0bGlzdGVuZXIuc3ludGF4RXJyb3IodGhpcywgbnVsbCwgdGhpcy5fdG9rZW5TdGFydExpbmUsXG5cdFx0XHR0aGlzLl90b2tlblN0YXJ0Q29sdW1uLCBtc2csIGUpO1xufTtcblxuTGV4ZXIucHJvdG90eXBlLmdldEVycm9yRGlzcGxheSA9IGZ1bmN0aW9uKHMpIHtcblx0dmFyIGQgPSBbXTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XG5cdFx0ZC5wdXNoKHNbaV0pO1xuXHR9XG5cdHJldHVybiBkLmpvaW4oJycpO1xufTtcblxuTGV4ZXIucHJvdG90eXBlLmdldEVycm9yRGlzcGxheUZvckNoYXIgPSBmdW5jdGlvbihjKSB7XG5cdGlmIChjLmNoYXJDb2RlQXQoMCkgPT09IFRva2VuLkVPRikge1xuXHRcdHJldHVybiBcIjxFT0Y+XCI7XG5cdH0gZWxzZSBpZiAoYyA9PT0gJ1xcbicpIHtcblx0XHRyZXR1cm4gXCJcXFxcblwiO1xuXHR9IGVsc2UgaWYgKGMgPT09ICdcXHQnKSB7XG5cdFx0cmV0dXJuIFwiXFxcXHRcIjtcblx0fSBlbHNlIGlmIChjID09PSAnXFxyJykge1xuXHRcdHJldHVybiBcIlxcXFxyXCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGM7XG5cdH1cbn07XG5cbkxleGVyLnByb3RvdHlwZS5nZXRDaGFyRXJyb3JEaXNwbGF5ID0gZnVuY3Rpb24oYykge1xuXHRyZXR1cm4gXCInXCIgKyB0aGlzLmdldEVycm9yRGlzcGxheUZvckNoYXIoYykgKyBcIidcIjtcbn07XG5cbi8vIExleGVycyBjYW4gbm9ybWFsbHkgbWF0Y2ggYW55IGNoYXIgaW4gaXQncyB2b2NhYnVsYXJ5IGFmdGVyIG1hdGNoaW5nXG4vLyBhIHRva2VuLCBzbyBkbyB0aGUgZWFzeSB0aGluZyBhbmQganVzdCBraWxsIGEgY2hhcmFjdGVyIGFuZCBob3BlXG4vLyBpdCBhbGwgd29ya3Mgb3V0LiBZb3UgY2FuIGluc3RlYWQgdXNlIHRoZSBydWxlIGludm9jYXRpb24gc3RhY2tcbi8vIHRvIGRvIHNvcGhpc3RpY2F0ZWQgZXJyb3IgcmVjb3ZlcnkgaWYgeW91IGFyZSBpbiBhIGZyYWdtZW50IHJ1bGUuXG4vLyAvXG5MZXhlci5wcm90b3R5cGUucmVjb3ZlciA9IGZ1bmN0aW9uKHJlKSB7XG5cdGlmICh0aGlzLl9pbnB1dC5MQSgxKSAhPT0gVG9rZW4uRU9GKSB7XG5cdFx0aWYgKHJlIGluc3RhbmNlb2YgTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbikge1xuXHRcdFx0Ly8gc2tpcCBhIGNoYXIgYW5kIHRyeSBhZ2FpblxuXHRcdFx0dGhpcy5faW50ZXJwLmNvbnN1bWUodGhpcy5faW5wdXQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBUT0RPOiBEbyB3ZSBsb3NlIGNoYXJhY3RlciBvciBsaW5lIHBvc2l0aW9uIGluZm9ybWF0aW9uP1xuXHRcdFx0dGhpcy5faW5wdXQuY29uc3VtZSgpO1xuXHRcdH1cblx0fVxufTtcblxuZXhwb3J0cy5MZXhlciA9IExleGVyO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuL1Rva2VuJykuVG9rZW47XG52YXIgUGFyc2VUcmVlTGlzdGVuZXIgPSByZXF1aXJlKCcuL3RyZWUvVHJlZScpLlBhcnNlVHJlZUxpc3RlbmVyO1xudmFyIFJlY29nbml6ZXIgPSByZXF1aXJlKCcuL1JlY29nbml6ZXInKS5SZWNvZ25pemVyO1xudmFyIERlZmF1bHRFcnJvclN0cmF0ZWd5ID0gcmVxdWlyZSgnLi9lcnJvci9FcnJvclN0cmF0ZWd5JykuRGVmYXVsdEVycm9yU3RyYXRlZ3k7XG52YXIgQVRORGVzZXJpYWxpemVyID0gcmVxdWlyZSgnLi9hdG4vQVRORGVzZXJpYWxpemVyJykuQVRORGVzZXJpYWxpemVyO1xudmFyIEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMgPSByZXF1aXJlKCcuL2F0bi9BVE5EZXNlcmlhbGl6YXRpb25PcHRpb25zJykuQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucztcbnZhciBUZXJtaW5hbE5vZGUgPSByZXF1aXJlKCcuL3RyZWUvVHJlZScpLlRlcm1pbmFsTm9kZTtcbnZhciBFcnJvck5vZGUgPSByZXF1aXJlKCcuL3RyZWUvVHJlZScpLkVycm9yTm9kZTtcblxuZnVuY3Rpb24gVHJhY2VMaXN0ZW5lcihwYXJzZXIpIHtcblx0UGFyc2VUcmVlTGlzdGVuZXIuY2FsbCh0aGlzKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcblx0cmV0dXJuIHRoaXM7XG59XG5cblRyYWNlTGlzdGVuZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQYXJzZVRyZWVMaXN0ZW5lci5wcm90b3R5cGUpO1xuVHJhY2VMaXN0ZW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUcmFjZUxpc3RlbmVyO1xuXG5UcmFjZUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckV2ZXJ5UnVsZSA9IGZ1bmN0aW9uKGN0eCkge1xuXHRjb25zb2xlLmxvZyhcImVudGVyICAgXCIgKyB0aGlzLnBhcnNlci5ydWxlTmFtZXNbY3R4LnJ1bGVJbmRleF0gKyBcIiwgTFQoMSk9XCIgKyB0aGlzLnBhcnNlci5faW5wdXQuTFQoMSkudGV4dCk7XG59O1xuXG5UcmFjZUxpc3RlbmVyLnByb3RvdHlwZS52aXNpdFRlcm1pbmFsID0gZnVuY3Rpb24oIG5vZGUpIHtcblx0Y29uc29sZS5sb2coXCJjb25zdW1lIFwiICsgbm9kZS5zeW1ib2wgKyBcIiBydWxlIFwiICsgdGhpcy5wYXJzZXIucnVsZU5hbWVzW3RoaXMucGFyc2VyLl9jdHgucnVsZUluZGV4XSk7XG59O1xuXG5UcmFjZUxpc3RlbmVyLnByb3RvdHlwZS5leGl0RXZlcnlSdWxlID0gZnVuY3Rpb24oY3R4KSB7XG5cdGNvbnNvbGUubG9nKFwiZXhpdCAgICBcIiArIHRoaXMucGFyc2VyLnJ1bGVOYW1lc1tjdHgucnVsZUluZGV4XSArIFwiLCBMVCgxKT1cIiArIHRoaXMucGFyc2VyLl9pbnB1dC5MVCgxKS50ZXh0KTtcbn07XG5cbi8vIHRoaXMgaXMgYWxsIHRoZSBwYXJzaW5nIHN1cHBvcnQgY29kZSBlc3NlbnRpYWxseTsgbW9zdCBvZiBpdCBpcyBlcnJvclxuLy8gcmVjb3Zlcnkgc3R1ZmYuLy9cbmZ1bmN0aW9uIFBhcnNlcihpbnB1dCkge1xuXHRSZWNvZ25pemVyLmNhbGwodGhpcyk7XG5cdC8vIFRoZSBpbnB1dCBzdHJlYW0uXG5cdHRoaXMuX2lucHV0ID0gbnVsbDtcblx0Ly8gVGhlIGVycm9yIGhhbmRsaW5nIHN0cmF0ZWd5IGZvciB0aGUgcGFyc2VyLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyBhIG5ld1xuXHQvLyBpbnN0YW5jZSBvZiB7QGxpbmsgRGVmYXVsdEVycm9yU3RyYXRlZ3l9LlxuXHR0aGlzLl9lcnJIYW5kbGVyID0gbmV3IERlZmF1bHRFcnJvclN0cmF0ZWd5KCk7XG5cdHRoaXMuX3ByZWNlZGVuY2VTdGFjayA9IFtdO1xuXHR0aGlzLl9wcmVjZWRlbmNlU3RhY2sucHVzaCgwKTtcblx0Ly8gVGhlIHtAbGluayBQYXJzZXJSdWxlQ29udGV4dH0gb2JqZWN0IGZvciB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBydWxlLlxuXHQvLyB0aGlzIGlzIGFsd2F5cyBub24tbnVsbCBkdXJpbmcgdGhlIHBhcnNpbmcgcHJvY2Vzcy5cblx0dGhpcy5fY3R4ID0gbnVsbDtcblx0Ly8gU3BlY2lmaWVzIHdoZXRoZXIgb3Igbm90IHRoZSBwYXJzZXIgc2hvdWxkIGNvbnN0cnVjdCBhIHBhcnNlIHRyZWUgZHVyaW5nXG5cdC8vIHRoZSBwYXJzaW5nIHByb2Nlc3MuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHtAY29kZSB0cnVlfS5cblx0dGhpcy5idWlsZFBhcnNlVHJlZXMgPSB0cnVlO1xuXHQvLyBXaGVuIHtAbGluayAvL3NldFRyYWNlfXtAY29kZSAodHJ1ZSl9IGlzIGNhbGxlZCwgYSByZWZlcmVuY2UgdG8gdGhlXG5cdC8vIHtAbGluayBUcmFjZUxpc3RlbmVyfSBpcyBzdG9yZWQgaGVyZSBzbyBpdCBjYW4gYmUgZWFzaWx5IHJlbW92ZWQgaW4gYVxuXHQvLyBsYXRlciBjYWxsIHRvIHtAbGluayAvL3NldFRyYWNlfXtAY29kZSAoZmFsc2UpfS4gVGhlIGxpc3RlbmVyIGl0c2VsZiBpc1xuXHQvLyBpbXBsZW1lbnRlZCBhcyBhIHBhcnNlciBsaXN0ZW5lciBzbyB0aGlzIGZpZWxkIGlzIG5vdCBkaXJlY3RseSB1c2VkIGJ5XG5cdC8vIG90aGVyIHBhcnNlciBtZXRob2RzLlxuXHR0aGlzLl90cmFjZXIgPSBudWxsO1xuXHQvLyBUaGUgbGlzdCBvZiB7QGxpbmsgUGFyc2VUcmVlTGlzdGVuZXJ9IGxpc3RlbmVycyByZWdpc3RlcmVkIHRvIHJlY2VpdmVcblx0Ly8gZXZlbnRzIGR1cmluZyB0aGUgcGFyc2UuXG5cdHRoaXMuX3BhcnNlTGlzdGVuZXJzID0gbnVsbDtcblx0Ly8gVGhlIG51bWJlciBvZiBzeW50YXggZXJyb3JzIHJlcG9ydGVkIGR1cmluZyBwYXJzaW5nLiB0aGlzIHZhbHVlIGlzXG5cdC8vIGluY3JlbWVudGVkIGVhY2ggdGltZSB7QGxpbmsgLy9ub3RpZnlFcnJvckxpc3RlbmVyc30gaXMgY2FsbGVkLlxuXHR0aGlzLl9zeW50YXhFcnJvcnMgPSAwO1xuXHR0aGlzLnNldElucHV0U3RyZWFtKGlucHV0KTtcblx0cmV0dXJuIHRoaXM7XG59XG5cblBhcnNlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlY29nbml6ZXIucHJvdG90eXBlKTtcblBhcnNlci5wcm90b3R5cGUuY29udHJ1Y3RvciA9IFBhcnNlcjtcblxuLy8gdGhpcyBmaWVsZCBtYXBzIGZyb20gdGhlIHNlcmlhbGl6ZWQgQVROIHN0cmluZyB0byB0aGUgZGVzZXJpYWxpemVkIHtAbGlua1xuLy8gQVROfSB3aXRoXG4vLyBieXBhc3MgYWx0ZXJuYXRpdmVzLlxuLy9cbi8vIEBzZWUgQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucy8vaXNHZW5lcmF0ZVJ1bGVCeXBhc3NUcmFuc2l0aW9ucygpXG4vL1xuUGFyc2VyLmJ5cGFzc0FsdHNBdG5DYWNoZSA9IHt9O1xuXG4vLyByZXNldCB0aGUgcGFyc2VyJ3Mgc3RhdGUvL1xuUGFyc2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5faW5wdXQgIT09IG51bGwpIHtcblx0XHR0aGlzLl9pbnB1dC5zZWVrKDApO1xuXHR9XG5cdHRoaXMuX2VyckhhbmRsZXIucmVzZXQodGhpcyk7XG5cdHRoaXMuX2N0eCA9IG51bGw7XG5cdHRoaXMuX3N5bnRheEVycm9ycyA9IDA7XG5cdHRoaXMuc2V0VHJhY2UoZmFsc2UpO1xuXHR0aGlzLl9wcmVjZWRlbmNlU3RhY2sgPSBbXTtcblx0dGhpcy5fcHJlY2VkZW5jZVN0YWNrLnB1c2goMCk7XG5cdGlmICh0aGlzLl9pbnRlcnAgIT09IG51bGwpIHtcblx0XHR0aGlzLl9pbnRlcnAucmVzZXQoKTtcblx0fVxufTtcblxuLy8gTWF0Y2ggY3VycmVudCBpbnB1dCBzeW1ib2wgYWdhaW5zdCB7QGNvZGUgdHR5cGV9LiBJZiB0aGUgc3ltYm9sIHR5cGVcbi8vIG1hdGNoZXMsIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3kvL3JlcG9ydE1hdGNofSBhbmQge0BsaW5rIC8vY29uc3VtZX0gYXJlXG4vLyBjYWxsZWQgdG8gY29tcGxldGUgdGhlIG1hdGNoIHByb2Nlc3MuXG4vL1xuLy8gPHA+SWYgdGhlIHN5bWJvbCB0eXBlIGRvZXMgbm90IG1hdGNoLFxuLy8ge0BsaW5rIEFOVExSRXJyb3JTdHJhdGVneS8vcmVjb3ZlcklubGluZX0gaXMgY2FsbGVkIG9uIHRoZSBjdXJyZW50IGVycm9yXG4vLyBzdHJhdGVneSB0byBhdHRlbXB0IHJlY292ZXJ5LiBJZiB7QGxpbmsgLy9nZXRCdWlsZFBhcnNlVHJlZX0gaXNcbi8vIHtAY29kZSB0cnVlfSBhbmQgdGhlIHRva2VuIGluZGV4IG9mIHRoZSBzeW1ib2wgcmV0dXJuZWQgYnlcbi8vIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3kvL3JlY292ZXJJbmxpbmV9IGlzIC0xLCB0aGUgc3ltYm9sIGlzIGFkZGVkIHRvXG4vLyB0aGUgcGFyc2UgdHJlZSBieSBjYWxsaW5nIHtAbGluayBQYXJzZXJSdWxlQ29udGV4dC8vYWRkRXJyb3JOb2RlfS48L3A+XG4vL1xuLy8gQHBhcmFtIHR0eXBlIHRoZSB0b2tlbiB0eXBlIHRvIG1hdGNoXG4vLyBAcmV0dXJuIHRoZSBtYXRjaGVkIHN5bWJvbFxuLy8gQHRocm93cyBSZWNvZ25pdGlvbkV4Y2VwdGlvbiBpZiB0aGUgY3VycmVudCBpbnB1dCBzeW1ib2wgZGlkIG5vdCBtYXRjaFxuLy8ge0Bjb2RlIHR0eXBlfSBhbmQgdGhlIGVycm9yIHN0cmF0ZWd5IGNvdWxkIG5vdCByZWNvdmVyIGZyb20gdGhlXG4vLyBtaXNtYXRjaGVkIHN5bWJvbFxuXG5QYXJzZXIucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24odHR5cGUpIHtcblx0dmFyIHQgPSB0aGlzLmdldEN1cnJlbnRUb2tlbigpO1xuXHRpZiAodC50eXBlID09PSB0dHlwZSkge1xuXHRcdHRoaXMuX2VyckhhbmRsZXIucmVwb3J0TWF0Y2godGhpcyk7XG5cdFx0dGhpcy5jb25zdW1lKCk7XG5cdH0gZWxzZSB7XG5cdFx0dCA9IHRoaXMuX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTtcblx0XHRpZiAodGhpcy5idWlsZFBhcnNlVHJlZXMgJiYgdC50b2tlbkluZGV4ID09PSAtMSkge1xuXHRcdFx0Ly8gd2UgbXVzdCBoYXZlIGNvbmp1cmVkIHVwIGEgbmV3IHRva2VuIGR1cmluZyBzaW5nbGUgdG9rZW5cblx0XHRcdC8vIGluc2VydGlvblxuXHRcdFx0Ly8gaWYgaXQncyBub3QgdGhlIGN1cnJlbnQgc3ltYm9sXG5cdFx0XHR0aGlzLl9jdHguYWRkRXJyb3JOb2RlKHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdDtcbn07XG4vLyBNYXRjaCBjdXJyZW50IGlucHV0IHN5bWJvbCBhcyBhIHdpbGRjYXJkLiBJZiB0aGUgc3ltYm9sIHR5cGUgbWF0Y2hlc1xuLy8gKGkuZS4gaGFzIGEgdmFsdWUgZ3JlYXRlciB0aGFuIDApLCB7QGxpbmsgQU5UTFJFcnJvclN0cmF0ZWd5Ly9yZXBvcnRNYXRjaH1cbi8vIGFuZCB7QGxpbmsgLy9jb25zdW1lfSBhcmUgY2FsbGVkIHRvIGNvbXBsZXRlIHRoZSBtYXRjaCBwcm9jZXNzLlxuLy9cbi8vIDxwPklmIHRoZSBzeW1ib2wgdHlwZSBkb2VzIG5vdCBtYXRjaCxcbi8vIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3kvL3JlY292ZXJJbmxpbmV9IGlzIGNhbGxlZCBvbiB0aGUgY3VycmVudCBlcnJvclxuLy8gc3RyYXRlZ3kgdG8gYXR0ZW1wdCByZWNvdmVyeS4gSWYge0BsaW5rIC8vZ2V0QnVpbGRQYXJzZVRyZWV9IGlzXG4vLyB7QGNvZGUgdHJ1ZX0gYW5kIHRoZSB0b2tlbiBpbmRleCBvZiB0aGUgc3ltYm9sIHJldHVybmVkIGJ5XG4vLyB7QGxpbmsgQU5UTFJFcnJvclN0cmF0ZWd5Ly9yZWNvdmVySW5saW5lfSBpcyAtMSwgdGhlIHN5bWJvbCBpcyBhZGRlZCB0b1xuLy8gdGhlIHBhcnNlIHRyZWUgYnkgY2FsbGluZyB7QGxpbmsgUGFyc2VyUnVsZUNvbnRleHQvL2FkZEVycm9yTm9kZX0uPC9wPlxuLy9cbi8vIEByZXR1cm4gdGhlIG1hdGNoZWQgc3ltYm9sXG4vLyBAdGhyb3dzIFJlY29nbml0aW9uRXhjZXB0aW9uIGlmIHRoZSBjdXJyZW50IGlucHV0IHN5bWJvbCBkaWQgbm90IG1hdGNoXG4vLyBhIHdpbGRjYXJkIGFuZCB0aGUgZXJyb3Igc3RyYXRlZ3kgY291bGQgbm90IHJlY292ZXIgZnJvbSB0aGUgbWlzbWF0Y2hlZFxuLy8gc3ltYm9sXG5cblBhcnNlci5wcm90b3R5cGUubWF0Y2hXaWxkY2FyZCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgdCA9IHRoaXMuZ2V0Q3VycmVudFRva2VuKCk7XG5cdGlmICh0LnR5cGUgPiAwKSB7XG5cdFx0dGhpcy5fZXJySGFuZGxlci5yZXBvcnRNYXRjaCh0aGlzKTtcblx0XHR0aGlzLmNvbnN1bWUoKTtcblx0fSBlbHNlIHtcblx0XHR0ID0gdGhpcy5fZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpO1xuXHRcdGlmICh0aGlzLl9idWlsZFBhcnNlVHJlZXMgJiYgdC50b2tlbkluZGV4ID09PSAtMSkge1xuXHRcdFx0Ly8gd2UgbXVzdCBoYXZlIGNvbmp1cmVkIHVwIGEgbmV3IHRva2VuIGR1cmluZyBzaW5nbGUgdG9rZW5cblx0XHRcdC8vIGluc2VydGlvblxuXHRcdFx0Ly8gaWYgaXQncyBub3QgdGhlIGN1cnJlbnQgc3ltYm9sXG5cdFx0XHR0aGlzLl9jdHguYWRkRXJyb3JOb2RlKHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdDtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuZ2V0UGFyc2VMaXN0ZW5lcnMgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuX3BhcnNlTGlzdGVuZXJzIHx8IFtdO1xufTtcblxuLy8gUmVnaXN0ZXJzIHtAY29kZSBsaXN0ZW5lcn0gdG8gcmVjZWl2ZSBldmVudHMgZHVyaW5nIHRoZSBwYXJzaW5nIHByb2Nlc3MuXG4vL1xuLy8gPHA+VG8gc3VwcG9ydCBvdXRwdXQtcHJlc2VydmluZyBncmFtbWFyIHRyYW5zZm9ybWF0aW9ucyAoaW5jbHVkaW5nIGJ1dCBub3Rcbi8vIGxpbWl0ZWQgdG8gbGVmdC1yZWN1cnNpb24gcmVtb3ZhbCwgYXV0b21hdGVkIGxlZnQtZmFjdG9yaW5nLCBhbmRcbi8vIG9wdGltaXplZCBjb2RlIGdlbmVyYXRpb24pLCBjYWxscyB0byBsaXN0ZW5lciBtZXRob2RzIGR1cmluZyB0aGUgcGFyc2Vcbi8vIG1heSBkaWZmZXIgc3Vic3RhbnRpYWxseSBmcm9tIGNhbGxzIG1hZGUgYnlcbi8vIHtAbGluayBQYXJzZVRyZWVXYWxrZXIvL0RFRkFVTFR9IHVzZWQgYWZ0ZXIgdGhlIHBhcnNlIGlzIGNvbXBsZXRlLiBJblxuLy8gcGFydGljdWxhciwgcnVsZSBlbnRyeSBhbmQgZXhpdCBldmVudHMgbWF5IG9jY3VyIGluIGEgZGlmZmVyZW50IG9yZGVyXG4vLyBkdXJpbmcgdGhlIHBhcnNlIHRoYW4gYWZ0ZXIgdGhlIHBhcnNlci4gSW4gYWRkaXRpb24sIGNhbGxzIHRvIGNlcnRhaW5cbi8vIHJ1bGUgZW50cnkgbWV0aG9kcyBtYXkgYmUgb21pdHRlZC48L3A+XG4vL1xuLy8gPHA+V2l0aCB0aGUgZm9sbG93aW5nIHNwZWNpZmljIGV4Y2VwdGlvbnMsIGNhbGxzIHRvIGxpc3RlbmVyIGV2ZW50cyBhcmVcbi8vIDxlbT5kZXRlcm1pbmlzdGljPC9lbT4sIGkuZS4gZm9yIGlkZW50aWNhbCBpbnB1dCB0aGUgY2FsbHMgdG8gbGlzdGVuZXJcbi8vIG1ldGhvZHMgd2lsbCBiZSB0aGUgc2FtZS48L3A+XG4vL1xuLy8gPHVsPlxuLy8gPGxpPkFsdGVyYXRpb25zIHRvIHRoZSBncmFtbWFyIHVzZWQgdG8gZ2VuZXJhdGUgY29kZSBtYXkgY2hhbmdlIHRoZVxuLy8gYmVoYXZpb3Igb2YgdGhlIGxpc3RlbmVyIGNhbGxzLjwvbGk+XG4vLyA8bGk+QWx0ZXJhdGlvbnMgdG8gdGhlIGNvbW1hbmQgbGluZSBvcHRpb25zIHBhc3NlZCB0byBBTlRMUiA0IHdoZW5cbi8vIGdlbmVyYXRpbmcgdGhlIHBhcnNlciBtYXkgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGUgbGlzdGVuZXIgY2FsbHMuPC9saT5cbi8vIDxsaT5DaGFuZ2luZyB0aGUgdmVyc2lvbiBvZiB0aGUgQU5UTFIgVG9vbCB1c2VkIHRvIGdlbmVyYXRlIHRoZSBwYXJzZXJcbi8vIG1heSBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBsaXN0ZW5lciBjYWxscy48L2xpPlxuLy8gPC91bD5cbi8vXG4vLyBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyIHRvIGFkZFxuLy9cbi8vIEB0aHJvd3MgTnVsbFBvaW50ZXJFeGNlcHRpb24gaWYge0Bjb2RlfSBsaXN0ZW5lciBpcyB7QGNvZGUgbnVsbH1cbi8vXG5QYXJzZXIucHJvdG90eXBlLmFkZFBhcnNlTGlzdGVuZXIgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuXHRpZiAobGlzdGVuZXIgPT09IG51bGwpIHtcblx0XHR0aHJvdyBcImxpc3RlbmVyXCI7XG5cdH1cblx0aWYgKHRoaXMuX3BhcnNlTGlzdGVuZXJzID09PSBudWxsKSB7XG5cdFx0dGhpcy5fcGFyc2VMaXN0ZW5lcnMgPSBbXTtcblx0fVxuXHR0aGlzLl9wYXJzZUxpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbn07XG5cbi8vXG4vLyBSZW1vdmUge0Bjb2RlIGxpc3RlbmVyfSBmcm9tIHRoZSBsaXN0IG9mIHBhcnNlIGxpc3RlbmVycy5cbi8vXG4vLyA8cD5JZiB7QGNvZGUgbGlzdGVuZXJ9IGlzIHtAY29kZSBudWxsfSBvciBoYXMgbm90IGJlZW4gYWRkZWQgYXMgYSBwYXJzZVxuLy8gbGlzdGVuZXIsIHRoaXMgbWV0aG9kIGRvZXMgbm90aGluZy48L3A+XG4vLyBAcGFyYW0gbGlzdGVuZXIgdGhlIGxpc3RlbmVyIHRvIHJlbW92ZVxuLy9cblBhcnNlci5wcm90b3R5cGUucmVtb3ZlUGFyc2VMaXN0ZW5lciA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG5cdGlmICh0aGlzLl9wYXJzZUxpc3RlbmVycyAhPT0gbnVsbCkge1xuXHRcdHZhciBpZHggPSB0aGlzLl9wYXJzZUxpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcblx0XHRpZiAoaWR4ID49IDApIHtcblx0XHRcdHRoaXMuX3BhcnNlTGlzdGVuZXJzLnNwbGljZShpZHgsIDEpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0aGlzLl9wYXJzZUxpc3RlbmVycyA9IG51bGw7XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBSZW1vdmUgYWxsIHBhcnNlIGxpc3RlbmVycy5cblBhcnNlci5wcm90b3R5cGUucmVtb3ZlUGFyc2VMaXN0ZW5lcnMgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5fcGFyc2VMaXN0ZW5lcnMgPSBudWxsO1xufTtcblxuLy8gTm90aWZ5IGFueSBwYXJzZSBsaXN0ZW5lcnMgb2YgYW4gZW50ZXIgcnVsZSBldmVudC5cblBhcnNlci5wcm90b3R5cGUudHJpZ2dlckVudGVyUnVsZUV2ZW50ID0gZnVuY3Rpb24oKSB7XG5cdGlmICh0aGlzLl9wYXJzZUxpc3RlbmVycyAhPT0gbnVsbCkge1xuICAgICAgICB2YXIgY3R4ID0gdGhpcy5fY3R4O1xuXHRcdHRoaXMuX3BhcnNlTGlzdGVuZXJzLm1hcChmdW5jdGlvbihsaXN0ZW5lcikge1xuXHRcdFx0bGlzdGVuZXIuZW50ZXJFdmVyeVJ1bGUoY3R4KTtcblx0XHRcdGN0eC5lbnRlclJ1bGUobGlzdGVuZXIpO1xuXHRcdH0pO1xuXHR9XG59O1xuXG4vL1xuLy8gTm90aWZ5IGFueSBwYXJzZSBsaXN0ZW5lcnMgb2YgYW4gZXhpdCBydWxlIGV2ZW50LlxuLy9cbi8vIEBzZWUgLy9hZGRQYXJzZUxpc3RlbmVyXG4vL1xuUGFyc2VyLnByb3RvdHlwZS50cmlnZ2VyRXhpdFJ1bGVFdmVudCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwpIHtcblx0XHQvLyByZXZlcnNlIG9yZGVyIHdhbGsgb2YgbGlzdGVuZXJzXG4gICAgICAgIHZhciBjdHggPSB0aGlzLl9jdHg7XG5cdFx0dGhpcy5fcGFyc2VMaXN0ZW5lcnMuc2xpY2UoMCkucmV2ZXJzZSgpLm1hcChmdW5jdGlvbihsaXN0ZW5lcikge1xuXHRcdFx0Y3R4LmV4aXRSdWxlKGxpc3RlbmVyKTtcblx0XHRcdGxpc3RlbmVyLmV4aXRFdmVyeVJ1bGUoY3R4KTtcblx0XHR9KTtcblx0fVxufTtcblxuUGFyc2VyLnByb3RvdHlwZS5nZXRUb2tlbkZhY3RvcnkgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuX2lucHV0LnRva2VuU291cmNlLl9mYWN0b3J5O1xufTtcblxuLy8gVGVsbCBvdXIgdG9rZW4gc291cmNlIGFuZCBlcnJvciBzdHJhdGVneSBhYm91dCBhIG5ldyB3YXkgdG8gY3JlYXRlIHRva2Vucy4vL1xuUGFyc2VyLnByb3RvdHlwZS5zZXRUb2tlbkZhY3RvcnkgPSBmdW5jdGlvbihmYWN0b3J5KSB7XG5cdHRoaXMuX2lucHV0LnRva2VuU291cmNlLl9mYWN0b3J5ID0gZmFjdG9yeTtcbn07XG5cbi8vIFRoZSBBVE4gd2l0aCBieXBhc3MgYWx0ZXJuYXRpdmVzIGlzIGV4cGVuc2l2ZSB0byBjcmVhdGUgc28gd2UgY3JlYXRlIGl0XG4vLyBsYXppbHkuXG4vL1xuLy8gQHRocm93cyBVbnN1cHBvcnRlZE9wZXJhdGlvbkV4Y2VwdGlvbiBpZiB0aGUgY3VycmVudCBwYXJzZXIgZG9lcyBub3Rcbi8vIGltcGxlbWVudCB0aGUge0BsaW5rIC8vZ2V0U2VyaWFsaXplZEFUTigpfSBtZXRob2QuXG4vL1xuUGFyc2VyLnByb3RvdHlwZS5nZXRBVE5XaXRoQnlwYXNzQWx0cyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgc2VyaWFsaXplZEF0biA9IHRoaXMuZ2V0U2VyaWFsaXplZEFUTigpO1xuXHRpZiAoc2VyaWFsaXplZEF0biA9PT0gbnVsbCkge1xuXHRcdHRocm93IFwiVGhlIGN1cnJlbnQgcGFyc2VyIGRvZXMgbm90IHN1cHBvcnQgYW4gQVROIHdpdGggYnlwYXNzIGFsdGVybmF0aXZlcy5cIjtcblx0fVxuXHR2YXIgcmVzdWx0ID0gdGhpcy5ieXBhc3NBbHRzQXRuQ2FjaGVbc2VyaWFsaXplZEF0bl07XG5cdGlmIChyZXN1bHQgPT09IG51bGwpIHtcblx0XHR2YXIgZGVzZXJpYWxpemF0aW9uT3B0aW9ucyA9IG5ldyBBVE5EZXNlcmlhbGl6YXRpb25PcHRpb25zKCk7XG5cdFx0ZGVzZXJpYWxpemF0aW9uT3B0aW9ucy5nZW5lcmF0ZVJ1bGVCeXBhc3NUcmFuc2l0aW9ucyA9IHRydWU7XG5cdFx0cmVzdWx0ID0gbmV3IEFUTkRlc2VyaWFsaXplcihkZXNlcmlhbGl6YXRpb25PcHRpb25zKVxuXHRcdFx0XHQuZGVzZXJpYWxpemUoc2VyaWFsaXplZEF0bik7XG5cdFx0dGhpcy5ieXBhc3NBbHRzQXRuQ2FjaGVbc2VyaWFsaXplZEF0bl0gPSByZXN1bHQ7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIFRoZSBwcmVmZXJyZWQgbWV0aG9kIG9mIGdldHRpbmcgYSB0cmVlIHBhdHRlcm4uIEZvciBleGFtcGxlLCBoZXJlJ3MgYVxuLy8gc2FtcGxlIHVzZTpcbi8vXG4vLyA8cHJlPlxuLy8gUGFyc2VUcmVlIHQgPSBwYXJzZXIuZXhwcigpO1xuLy8gUGFyc2VUcmVlUGF0dGVybiBwID0gcGFyc2VyLmNvbXBpbGVQYXJzZVRyZWVQYXR0ZXJuKFwiJmx0O0lEJmd0OyswXCIsXG4vLyBNeVBhcnNlci5SVUxFX2V4cHIpO1xuLy8gUGFyc2VUcmVlTWF0Y2ggbSA9IHAubWF0Y2godCk7XG4vLyBTdHJpbmcgaWQgPSBtLmdldChcIklEXCIpO1xuLy8gPC9wcmU+XG5cbnZhciBMZXhlciA9IHJlcXVpcmUoJy4vTGV4ZXInKS5MZXhlcjtcblxuUGFyc2VyLnByb3RvdHlwZS5jb21waWxlUGFyc2VUcmVlUGF0dGVybiA9IGZ1bmN0aW9uKHBhdHRlcm4sIHBhdHRlcm5SdWxlSW5kZXgsIGxleGVyKSB7XG5cdGxleGVyID0gbGV4ZXIgfHwgbnVsbDtcblx0aWYgKGxleGVyID09PSBudWxsKSB7XG5cdFx0aWYgKHRoaXMuZ2V0VG9rZW5TdHJlYW0oKSAhPT0gbnVsbCkge1xuXHRcdFx0dmFyIHRva2VuU291cmNlID0gdGhpcy5nZXRUb2tlblN0cmVhbSgpLnRva2VuU291cmNlO1xuXHRcdFx0aWYgKHRva2VuU291cmNlIGluc3RhbmNlb2YgTGV4ZXIpIHtcblx0XHRcdFx0bGV4ZXIgPSB0b2tlblNvdXJjZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYgKGxleGVyID09PSBudWxsKSB7XG5cdFx0dGhyb3cgXCJQYXJzZXIgY2FuJ3QgZGlzY292ZXIgYSBsZXhlciB0byB1c2VcIjtcblx0fVxuXHR2YXIgbSA9IG5ldyBQYXJzZVRyZWVQYXR0ZXJuTWF0Y2hlcihsZXhlciwgdGhpcyk7XG5cdHJldHVybiBtLmNvbXBpbGUocGF0dGVybiwgcGF0dGVyblJ1bGVJbmRleCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLmdldElucHV0U3RyZWFtID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLmdldFRva2VuU3RyZWFtKCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLnNldElucHV0U3RyZWFtID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0dGhpcy5zZXRUb2tlblN0cmVhbShpbnB1dCk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLmdldFRva2VuU3RyZWFtID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLl9pbnB1dDtcbn07XG5cbi8vIFNldCB0aGUgdG9rZW4gc3RyZWFtIGFuZCByZXNldCB0aGUgcGFyc2VyLi8vXG5QYXJzZXIucHJvdG90eXBlLnNldFRva2VuU3RyZWFtID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0dGhpcy5faW5wdXQgPSBudWxsO1xuXHR0aGlzLnJlc2V0KCk7XG5cdHRoaXMuX2lucHV0ID0gaW5wdXQ7XG59O1xuXG4vLyBNYXRjaCBuZWVkcyB0byByZXR1cm4gdGhlIGN1cnJlbnQgaW5wdXQgc3ltYm9sLCB3aGljaCBnZXRzIHB1dFxuLy8gaW50byB0aGUgbGFiZWwgZm9yIHRoZSBhc3NvY2lhdGVkIHRva2VuIHJlZjsgZS5nLiwgeD1JRC5cbi8vXG5QYXJzZXIucHJvdG90eXBlLmdldEN1cnJlbnRUb2tlbiA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5faW5wdXQuTFQoMSk7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLm5vdGlmeUVycm9yTGlzdGVuZXJzID0gZnVuY3Rpb24obXNnLCBvZmZlbmRpbmdUb2tlbiwgZXJyKSB7XG5cdG9mZmVuZGluZ1Rva2VuID0gb2ZmZW5kaW5nVG9rZW4gfHwgbnVsbDtcblx0ZXJyID0gZXJyIHx8IG51bGw7XG5cdGlmIChvZmZlbmRpbmdUb2tlbiA9PT0gbnVsbCkge1xuXHRcdG9mZmVuZGluZ1Rva2VuID0gdGhpcy5nZXRDdXJyZW50VG9rZW4oKTtcblx0fVxuXHR0aGlzLl9zeW50YXhFcnJvcnMgKz0gMTtcblx0dmFyIGxpbmUgPSBvZmZlbmRpbmdUb2tlbi5saW5lO1xuXHR2YXIgY29sdW1uID0gb2ZmZW5kaW5nVG9rZW4uY29sdW1uO1xuXHR2YXIgbGlzdGVuZXIgPSB0aGlzLmdldEVycm9yTGlzdGVuZXJEaXNwYXRjaCgpO1xuXHRsaXN0ZW5lci5zeW50YXhFcnJvcih0aGlzLCBvZmZlbmRpbmdUb2tlbiwgbGluZSwgY29sdW1uLCBtc2csIGVycik7XG59O1xuXG4vL1xuLy8gQ29uc3VtZSBhbmQgcmV0dXJuIHRoZSB7QGxpbmtwbGFpbiAvL2dldEN1cnJlbnRUb2tlbiBjdXJyZW50IHN5bWJvbH0uXG4vL1xuLy8gPHA+RS5nLiwgZ2l2ZW4gdGhlIGZvbGxvd2luZyBpbnB1dCB3aXRoIHtAY29kZSBBfSBiZWluZyB0aGUgY3VycmVudFxuLy8gbG9va2FoZWFkIHN5bWJvbCwgdGhpcyBmdW5jdGlvbiBtb3ZlcyB0aGUgY3Vyc29yIHRvIHtAY29kZSBCfSBhbmQgcmV0dXJuc1xuLy8ge0Bjb2RlIEF9LjwvcD5cbi8vXG4vLyA8cHJlPlxuLy8gQSBCXG4vLyBeXG4vLyA8L3ByZT5cbi8vXG4vLyBJZiB0aGUgcGFyc2VyIGlzIG5vdCBpbiBlcnJvciByZWNvdmVyeSBtb2RlLCB0aGUgY29uc3VtZWQgc3ltYm9sIGlzIGFkZGVkXG4vLyB0byB0aGUgcGFyc2UgdHJlZSB1c2luZyB7QGxpbmsgUGFyc2VyUnVsZUNvbnRleHQvL2FkZENoaWxkKFRva2VuKX0sIGFuZFxuLy8ge0BsaW5rIFBhcnNlVHJlZUxpc3RlbmVyLy92aXNpdFRlcm1pbmFsfSBpcyBjYWxsZWQgb24gYW55IHBhcnNlIGxpc3RlbmVycy5cbi8vIElmIHRoZSBwYXJzZXIgPGVtPmlzPC9lbT4gaW4gZXJyb3IgcmVjb3ZlcnkgbW9kZSwgdGhlIGNvbnN1bWVkIHN5bWJvbCBpc1xuLy8gYWRkZWQgdG8gdGhlIHBhcnNlIHRyZWUgdXNpbmdcbi8vIHtAbGluayBQYXJzZXJSdWxlQ29udGV4dC8vYWRkRXJyb3JOb2RlKFRva2VuKX0sIGFuZFxuLy8ge0BsaW5rIFBhcnNlVHJlZUxpc3RlbmVyLy92aXNpdEVycm9yTm9kZX0gaXMgY2FsbGVkIG9uIGFueSBwYXJzZVxuLy8gbGlzdGVuZXJzLlxuLy9cblBhcnNlci5wcm90b3R5cGUuY29uc3VtZSA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgbyA9IHRoaXMuZ2V0Q3VycmVudFRva2VuKCk7XG5cdGlmIChvLnR5cGUgIT09IFRva2VuLkVPRikge1xuXHRcdHRoaXMuZ2V0SW5wdXRTdHJlYW0oKS5jb25zdW1lKCk7XG5cdH1cblx0dmFyIGhhc0xpc3RlbmVyID0gdGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwgJiYgdGhpcy5fcGFyc2VMaXN0ZW5lcnMubGVuZ3RoID4gMDtcblx0aWYgKHRoaXMuYnVpbGRQYXJzZVRyZWVzIHx8IGhhc0xpc3RlbmVyKSB7XG5cdFx0dmFyIG5vZGU7XG5cdFx0aWYgKHRoaXMuX2VyckhhbmRsZXIuaW5FcnJvclJlY292ZXJ5TW9kZSh0aGlzKSkge1xuXHRcdFx0bm9kZSA9IHRoaXMuX2N0eC5hZGRFcnJvck5vZGUobyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5vZGUgPSB0aGlzLl9jdHguYWRkVG9rZW5Ob2RlKG8pO1xuXHRcdH1cbiAgICAgICAgbm9kZS5pbnZva2luZ1N0YXRlID0gdGhpcy5zdGF0ZTtcblx0XHRpZiAoaGFzTGlzdGVuZXIpIHtcblx0XHRcdHRoaXMuX3BhcnNlTGlzdGVuZXJzLm1hcChmdW5jdGlvbihsaXN0ZW5lcikge1xuXHRcdFx0XHRpZiAobm9kZSBpbnN0YW5jZW9mIEVycm9yTm9kZSB8fCAobm9kZS5pc0Vycm9yTm9kZSAhPT0gdW5kZWZpbmVkICYmIG5vZGUuaXNFcnJvck5vZGUoKSkpIHtcblx0XHRcdFx0XHRsaXN0ZW5lci52aXNpdEVycm9yTm9kZShub2RlKTtcblx0XHRcdFx0fSBlbHNlIGlmIChub2RlIGluc3RhbmNlb2YgVGVybWluYWxOb2RlKSB7XG5cdFx0XHRcdFx0bGlzdGVuZXIudmlzaXRUZXJtaW5hbChub2RlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5hZGRDb250ZXh0VG9QYXJzZVRyZWUgPSBmdW5jdGlvbigpIHtcblx0Ly8gYWRkIGN1cnJlbnQgY29udGV4dCB0byBwYXJlbnQgaWYgd2UgaGF2ZSBhIHBhcmVudFxuXHRpZiAodGhpcy5fY3R4LnBhcmVudEN0eCAhPT0gbnVsbCkge1xuXHRcdHRoaXMuX2N0eC5wYXJlbnRDdHguYWRkQ2hpbGQodGhpcy5fY3R4KTtcblx0fVxufTtcblxuLy8gQWx3YXlzIGNhbGxlZCBieSBnZW5lcmF0ZWQgcGFyc2VycyB1cG9uIGVudHJ5IHRvIGEgcnVsZS4gQWNjZXNzIGZpZWxkXG4vLyB7QGxpbmsgLy9fY3R4fSBnZXQgdGhlIGN1cnJlbnQgY29udGV4dC5cblxuUGFyc2VyLnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsb2NhbGN0eCwgc3RhdGUsIHJ1bGVJbmRleCkge1xuXHR0aGlzLnN0YXRlID0gc3RhdGU7XG5cdHRoaXMuX2N0eCA9IGxvY2FsY3R4O1xuXHR0aGlzLl9jdHguc3RhcnQgPSB0aGlzLl9pbnB1dC5MVCgxKTtcblx0aWYgKHRoaXMuYnVpbGRQYXJzZVRyZWVzKSB7XG5cdFx0dGhpcy5hZGRDb250ZXh0VG9QYXJzZVRyZWUoKTtcblx0fVxuXHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwpIHtcblx0XHR0aGlzLnRyaWdnZXJFbnRlclJ1bGVFdmVudCgpO1xuXHR9XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuX2N0eC5zdG9wID0gdGhpcy5faW5wdXQuTFQoLTEpO1xuXHQvLyB0cmlnZ2VyIGV2ZW50IG9uIF9jdHgsIGJlZm9yZSBpdCByZXZlcnRzIHRvIHBhcmVudFxuXHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwpIHtcblx0XHR0aGlzLnRyaWdnZXJFeGl0UnVsZUV2ZW50KCk7XG5cdH1cblx0dGhpcy5zdGF0ZSA9IHRoaXMuX2N0eC5pbnZva2luZ1N0YXRlO1xuXHR0aGlzLl9jdHggPSB0aGlzLl9jdHgucGFyZW50Q3R4O1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5lbnRlck91dGVyQWx0ID0gZnVuY3Rpb24obG9jYWxjdHgsIGFsdE51bSkge1xuICAgXHRsb2NhbGN0eC5zZXRBbHROdW1iZXIoYWx0TnVtKTtcblx0Ly8gaWYgd2UgaGF2ZSBuZXcgbG9jYWxjdHgsIG1ha2Ugc3VyZSB3ZSByZXBsYWNlIGV4aXN0aW5nIGN0eFxuXHQvLyB0aGF0IGlzIHByZXZpb3VzIGNoaWxkIG9mIHBhcnNlIHRyZWVcblx0aWYgKHRoaXMuYnVpbGRQYXJzZVRyZWVzICYmIHRoaXMuX2N0eCAhPT0gbG9jYWxjdHgpIHtcblx0XHRpZiAodGhpcy5fY3R4LnBhcmVudEN0eCAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5fY3R4LnBhcmVudEN0eC5yZW1vdmVMYXN0Q2hpbGQoKTtcblx0XHRcdHRoaXMuX2N0eC5wYXJlbnRDdHguYWRkQ2hpbGQobG9jYWxjdHgpO1xuXHRcdH1cblx0fVxuXHR0aGlzLl9jdHggPSBsb2NhbGN0eDtcbn07XG5cbi8vIEdldCB0aGUgcHJlY2VkZW5jZSBsZXZlbCBmb3IgdGhlIHRvcC1tb3N0IHByZWNlZGVuY2UgcnVsZS5cbi8vXG4vLyBAcmV0dXJuIFRoZSBwcmVjZWRlbmNlIGxldmVsIGZvciB0aGUgdG9wLW1vc3QgcHJlY2VkZW5jZSBydWxlLCBvciAtMSBpZlxuLy8gdGhlIHBhcnNlciBjb250ZXh0IGlzIG5vdCBuZXN0ZWQgd2l0aGluIGEgcHJlY2VkZW5jZSBydWxlLlxuXG5QYXJzZXIucHJvdG90eXBlLmdldFByZWNlZGVuY2UgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuX3ByZWNlZGVuY2VTdGFjay5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gLTE7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMuX3ByZWNlZGVuY2VTdGFja1t0aGlzLl9wcmVjZWRlbmNlU3RhY2subGVuZ3RoLTFdO1xuXHR9XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLmVudGVyUmVjdXJzaW9uUnVsZSA9IGZ1bmN0aW9uKGxvY2FsY3R4LCBzdGF0ZSwgcnVsZUluZGV4LFxuXHRcdHByZWNlZGVuY2UpIHtcblx0dGhpcy5zdGF0ZSA9IHN0YXRlO1xuXHR0aGlzLl9wcmVjZWRlbmNlU3RhY2sucHVzaChwcmVjZWRlbmNlKTtcblx0dGhpcy5fY3R4ID0gbG9jYWxjdHg7XG5cdHRoaXMuX2N0eC5zdGFydCA9IHRoaXMuX2lucHV0LkxUKDEpO1xuXHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwpIHtcblx0XHR0aGlzLnRyaWdnZXJFbnRlclJ1bGVFdmVudCgpOyAvLyBzaW11bGF0ZXMgcnVsZSBlbnRyeSBmb3Jcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gbGVmdC1yZWN1cnNpdmUgcnVsZXNcblx0fVxufTtcblxuLy9cbi8vIExpa2Uge0BsaW5rIC8vZW50ZXJSdWxlfSBidXQgZm9yIHJlY3Vyc2l2ZSBydWxlcy5cblxuUGFyc2VyLnByb3RvdHlwZS5wdXNoTmV3UmVjdXJzaW9uQ29udGV4dCA9IGZ1bmN0aW9uKGxvY2FsY3R4LCBzdGF0ZSwgcnVsZUluZGV4KSB7XG5cdHZhciBwcmV2aW91cyA9IHRoaXMuX2N0eDtcblx0cHJldmlvdXMucGFyZW50Q3R4ID0gbG9jYWxjdHg7XG5cdHByZXZpb3VzLmludm9raW5nU3RhdGUgPSBzdGF0ZTtcblx0cHJldmlvdXMuc3RvcCA9IHRoaXMuX2lucHV0LkxUKC0xKTtcblxuXHR0aGlzLl9jdHggPSBsb2NhbGN0eDtcblx0dGhpcy5fY3R4LnN0YXJ0ID0gcHJldmlvdXMuc3RhcnQ7XG5cdGlmICh0aGlzLmJ1aWxkUGFyc2VUcmVlcykge1xuXHRcdHRoaXMuX2N0eC5hZGRDaGlsZChwcmV2aW91cyk7XG5cdH1cblx0aWYgKHRoaXMuX3BhcnNlTGlzdGVuZXJzICE9PSBudWxsKSB7XG5cdFx0dGhpcy50cmlnZ2VyRW50ZXJSdWxlRXZlbnQoKTsgLy8gc2ltdWxhdGVzIHJ1bGUgZW50cnkgZm9yXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGxlZnQtcmVjdXJzaXZlIHJ1bGVzXG5cdH1cbn07XG5cblBhcnNlci5wcm90b3R5cGUudW5yb2xsUmVjdXJzaW9uQ29udGV4dHMgPSBmdW5jdGlvbihwYXJlbnRDdHgpIHtcblx0dGhpcy5fcHJlY2VkZW5jZVN0YWNrLnBvcCgpO1xuXHR0aGlzLl9jdHguc3RvcCA9IHRoaXMuX2lucHV0LkxUKC0xKTtcblx0dmFyIHJldEN0eCA9IHRoaXMuX2N0eDsgLy8gc2F2ZSBjdXJyZW50IGN0eCAocmV0dXJuIHZhbHVlKVxuXHQvLyB1bnJvbGwgc28gX2N0eCBpcyBhcyBpdCB3YXMgYmVmb3JlIGNhbGwgdG8gcmVjdXJzaXZlIG1ldGhvZFxuXHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwpIHtcblx0XHR3aGlsZSAodGhpcy5fY3R4ICE9PSBwYXJlbnRDdHgpIHtcblx0XHRcdHRoaXMudHJpZ2dlckV4aXRSdWxlRXZlbnQoKTtcblx0XHRcdHRoaXMuX2N0eCA9IHRoaXMuX2N0eC5wYXJlbnRDdHg7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHRoaXMuX2N0eCA9IHBhcmVudEN0eDtcblx0fVxuXHQvLyBob29rIGludG8gdHJlZVxuXHRyZXRDdHgucGFyZW50Q3R4ID0gcGFyZW50Q3R4O1xuXHRpZiAodGhpcy5idWlsZFBhcnNlVHJlZXMgJiYgcGFyZW50Q3R4ICE9PSBudWxsKSB7XG5cdFx0Ly8gYWRkIHJldHVybiBjdHggaW50byBpbnZva2luZyBydWxlJ3MgdHJlZVxuXHRcdHBhcmVudEN0eC5hZGRDaGlsZChyZXRDdHgpO1xuXHR9XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLmdldEludm9raW5nQ29udGV4dCA9IGZ1bmN0aW9uKHJ1bGVJbmRleCkge1xuXHR2YXIgY3R4ID0gdGhpcy5fY3R4O1xuXHR3aGlsZSAoY3R4ICE9PSBudWxsKSB7XG5cdFx0aWYgKGN0eC5ydWxlSW5kZXggPT09IHJ1bGVJbmRleCkge1xuXHRcdFx0cmV0dXJuIGN0eDtcblx0XHR9XG5cdFx0Y3R4ID0gY3R4LnBhcmVudEN0eDtcblx0fVxuXHRyZXR1cm4gbnVsbDtcbn07XG5cblBhcnNlci5wcm90b3R5cGUucHJlY3ByZWQgPSBmdW5jdGlvbihsb2NhbGN0eCwgcHJlY2VkZW5jZSkge1xuXHRyZXR1cm4gcHJlY2VkZW5jZSA+PSB0aGlzLl9wcmVjZWRlbmNlU3RhY2tbdGhpcy5fcHJlY2VkZW5jZVN0YWNrLmxlbmd0aC0xXTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuaW5Db250ZXh0ID0gZnVuY3Rpb24oY29udGV4dCkge1xuXHQvLyBUT0RPOiB1c2VmdWwgaW4gcGFyc2VyP1xuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG4vL1xuLy8gQ2hlY2tzIHdoZXRoZXIgb3Igbm90IHtAY29kZSBzeW1ib2x9IGNhbiBmb2xsb3cgdGhlIGN1cnJlbnQgc3RhdGUgaW4gdGhlXG4vLyBBVE4uIFRoZSBiZWhhdmlvciBvZiB0aGlzIG1ldGhvZCBpcyBlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmcsIGJ1dCBpc1xuLy8gaW1wbGVtZW50ZWQgc3VjaCB0aGF0IHRoZSBjb21wbGV0ZSBjb250ZXh0LXNlbnNpdGl2ZSBmb2xsb3cgc2V0IGRvZXMgbm90XG4vLyBuZWVkIHRvIGJlIGV4cGxpY2l0bHkgY29uc3RydWN0ZWQuXG4vL1xuLy8gPHByZT5cbi8vIHJldHVybiBnZXRFeHBlY3RlZFRva2VucygpLmNvbnRhaW5zKHN5bWJvbCk7XG4vLyA8L3ByZT5cbi8vXG4vLyBAcGFyYW0gc3ltYm9sIHRoZSBzeW1ib2wgdHlwZSB0byBjaGVja1xuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYge0Bjb2RlIHN5bWJvbH0gY2FuIGZvbGxvdyB0aGUgY3VycmVudCBzdGF0ZSBpblxuLy8gdGhlIEFUTiwgb3RoZXJ3aXNlIHtAY29kZSBmYWxzZX0uXG5cblBhcnNlci5wcm90b3R5cGUuaXNFeHBlY3RlZFRva2VuID0gZnVuY3Rpb24oc3ltYm9sKSB7XG5cdHZhciBhdG4gPSB0aGlzLl9pbnRlcnAuYXRuO1xuXHR2YXIgY3R4ID0gdGhpcy5fY3R4O1xuXHR2YXIgcyA9IGF0bi5zdGF0ZXNbdGhpcy5zdGF0ZV07XG5cdHZhciBmb2xsb3dpbmcgPSBhdG4ubmV4dFRva2VucyhzKTtcblx0aWYgKGZvbGxvd2luZy5jb250YWlucyhzeW1ib2wpKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0aWYgKCFmb2xsb3dpbmcuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0d2hpbGUgKGN0eCAhPT0gbnVsbCAmJiBjdHguaW52b2tpbmdTdGF0ZSA+PSAwICYmIGZvbGxvd2luZy5jb250YWlucyhUb2tlbi5FUFNJTE9OKSkge1xuXHRcdHZhciBpbnZva2luZ1N0YXRlID0gYXRuLnN0YXRlc1tjdHguaW52b2tpbmdTdGF0ZV07XG5cdFx0dmFyIHJ0ID0gaW52b2tpbmdTdGF0ZS50cmFuc2l0aW9uc1swXTtcblx0XHRmb2xsb3dpbmcgPSBhdG4ubmV4dFRva2VucyhydC5mb2xsb3dTdGF0ZSk7XG5cdFx0aWYgKGZvbGxvd2luZy5jb250YWlucyhzeW1ib2wpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0Y3R4ID0gY3R4LnBhcmVudEN0eDtcblx0fVxuXHRpZiAoZm9sbG93aW5nLmNvbnRhaW5zKFRva2VuLkVQU0lMT04pICYmIHN5bWJvbCA9PT0gVG9rZW4uRU9GKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59O1xuXG4vLyBDb21wdXRlcyB0aGUgc2V0IG9mIGlucHV0IHN5bWJvbHMgd2hpY2ggY291bGQgZm9sbG93IHRoZSBjdXJyZW50IHBhcnNlclxuLy8gc3RhdGUgYW5kIGNvbnRleHQsIGFzIGdpdmVuIGJ5IHtAbGluayAvL2dldFN0YXRlfSBhbmQge0BsaW5rIC8vZ2V0Q29udGV4dH0sXG4vLyByZXNwZWN0aXZlbHkuXG4vL1xuLy8gQHNlZSBBVE4vL2dldEV4cGVjdGVkVG9rZW5zKGludCwgUnVsZUNvbnRleHQpXG4vL1xuUGFyc2VyLnByb3RvdHlwZS5nZXRFeHBlY3RlZFRva2VucyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5faW50ZXJwLmF0bi5nZXRFeHBlY3RlZFRva2Vucyh0aGlzLnN0YXRlLCB0aGlzLl9jdHgpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5nZXRFeHBlY3RlZFRva2Vuc1dpdGhpbkN1cnJlbnRSdWxlID0gZnVuY3Rpb24oKSB7XG5cdHZhciBhdG4gPSB0aGlzLl9pbnRlcnAuYXRuO1xuXHR2YXIgcyA9IGF0bi5zdGF0ZXNbdGhpcy5zdGF0ZV07XG5cdHJldHVybiBhdG4ubmV4dFRva2VucyhzKTtcbn07XG5cbi8vIEdldCBhIHJ1bGUncyBpbmRleCAoaS5lLiwge0Bjb2RlIFJVTEVfcnVsZU5hbWV9IGZpZWxkKSBvciAtMSBpZiBub3QgZm91bmQuLy9cblBhcnNlci5wcm90b3R5cGUuZ2V0UnVsZUluZGV4ID0gZnVuY3Rpb24ocnVsZU5hbWUpIHtcblx0dmFyIHJ1bGVJbmRleCA9IHRoaXMuZ2V0UnVsZUluZGV4TWFwKClbcnVsZU5hbWVdO1xuXHRpZiAocnVsZUluZGV4ICE9PSBudWxsKSB7XG5cdFx0cmV0dXJuIHJ1bGVJbmRleDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gLTE7XG5cdH1cbn07XG5cbi8vIFJldHVybiBMaXN0Jmx0O1N0cmluZyZndDsgb2YgdGhlIHJ1bGUgbmFtZXMgaW4geW91ciBwYXJzZXIgaW5zdGFuY2Vcbi8vIGxlYWRpbmcgdXAgdG8gYSBjYWxsIHRvIHRoZSBjdXJyZW50IHJ1bGUuIFlvdSBjb3VsZCBvdmVycmlkZSBpZlxuLy8geW91IHdhbnQgbW9yZSBkZXRhaWxzIHN1Y2ggYXMgdGhlIGZpbGUvbGluZSBpbmZvIG9mIHdoZXJlXG4vLyBpbiB0aGUgQVROIGEgcnVsZSBpcyBpbnZva2VkLlxuLy9cbi8vIHRoaXMgaXMgdmVyeSB1c2VmdWwgZm9yIGVycm9yIG1lc3NhZ2VzLlxuLy9cblBhcnNlci5wcm90b3R5cGUuZ2V0UnVsZUludm9jYXRpb25TdGFjayA9IGZ1bmN0aW9uKHApIHtcblx0cCA9IHAgfHwgbnVsbDtcblx0aWYgKHAgPT09IG51bGwpIHtcblx0XHRwID0gdGhpcy5fY3R4O1xuXHR9XG5cdHZhciBzdGFjayA9IFtdO1xuXHR3aGlsZSAocCAhPT0gbnVsbCkge1xuXHRcdC8vIGNvbXB1dGUgd2hhdCBmb2xsb3dzIHdobyBpbnZva2VkIHVzXG5cdFx0dmFyIHJ1bGVJbmRleCA9IHAucnVsZUluZGV4O1xuXHRcdGlmIChydWxlSW5kZXggPCAwKSB7XG5cdFx0XHRzdGFjay5wdXNoKFwibi9hXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzdGFjay5wdXNoKHRoaXMucnVsZU5hbWVzW3J1bGVJbmRleF0pO1xuXHRcdH1cblx0XHRwID0gcC5wYXJlbnRDdHg7XG5cdH1cblx0cmV0dXJuIHN0YWNrO1xufTtcblxuLy8gRm9yIGRlYnVnZ2luZyBhbmQgb3RoZXIgcHVycG9zZXMuLy9cblBhcnNlci5wcm90b3R5cGUuZ2V0REZBU3RyaW5ncyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5faW50ZXJwLmRlY2lzaW9uVG9ERkEudG9TdHJpbmcoKTtcbn07XG4vLyBGb3IgZGVidWdnaW5nIGFuZCBvdGhlciBwdXJwb3Nlcy4vL1xuUGFyc2VyLnByb3RvdHlwZS5kdW1wREZBID0gZnVuY3Rpb24oKSB7XG5cdHZhciBzZWVuT25lID0gZmFsc2U7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5faW50ZXJwLmRlY2lzaW9uVG9ERkEubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgZGZhID0gdGhpcy5faW50ZXJwLmRlY2lzaW9uVG9ERkFbaV07XG5cdFx0aWYgKGRmYS5zdGF0ZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0aWYgKHNlZW5PbmUpIHtcblx0XHRcdFx0Y29uc29sZS5sb2coKTtcblx0XHRcdH1cblx0XHRcdHRoaXMucHJpbnRlci5wcmludGxuKFwiRGVjaXNpb24gXCIgKyBkZmEuZGVjaXNpb24gKyBcIjpcIik7XG5cdFx0XHR0aGlzLnByaW50ZXIucHJpbnQoZGZhLnRvU3RyaW5nKHRoaXMubGl0ZXJhbE5hbWVzLCB0aGlzLnN5bWJvbGljTmFtZXMpKTtcblx0XHRcdHNlZW5PbmUgPSB0cnVlO1xuXHRcdH1cblx0fVxufTtcblxuLypcblwiXHRcdFx0cHJpbnRlciA9IGZ1bmN0aW9uKCkge1xcclxcblwiICtcblwiXHRcdFx0XHR0aGlzLnByaW50bG4gPSBmdW5jdGlvbihzKSB7IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdvdXRwdXQnKSArPSBzICsgJ1xcXFxuJzsgfVxcclxcblwiICtcblwiXHRcdFx0XHR0aGlzLnByaW50ID0gZnVuY3Rpb24ocykgeyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3V0cHV0JykgKz0gczsgfVxcclxcblwiICtcblwiXHRcdFx0fTtcXHJcXG5cIiArXG4qL1xuXG5QYXJzZXIucHJvdG90eXBlLmdldFNvdXJjZU5hbWUgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuX2lucHV0LnNvdXJjZU5hbWU7XG59O1xuXG4vLyBEdXJpbmcgYSBwYXJzZSBpcyBzb21ldGltZXMgdXNlZnVsIHRvIGxpc3RlbiBpbiBvbiB0aGUgcnVsZSBlbnRyeSBhbmQgZXhpdFxuLy8gZXZlbnRzIGFzIHdlbGwgYXMgdG9rZW4gbWF0Y2hlcy4gdGhpcyBpcyBmb3IgcXVpY2sgYW5kIGRpcnR5IGRlYnVnZ2luZy5cbi8vXG5QYXJzZXIucHJvdG90eXBlLnNldFRyYWNlID0gZnVuY3Rpb24odHJhY2UpIHtcblx0aWYgKCF0cmFjZSkge1xuXHRcdHRoaXMucmVtb3ZlUGFyc2VMaXN0ZW5lcih0aGlzLl90cmFjZXIpO1xuXHRcdHRoaXMuX3RyYWNlciA9IG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0aWYgKHRoaXMuX3RyYWNlciAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5yZW1vdmVQYXJzZUxpc3RlbmVyKHRoaXMuX3RyYWNlcik7XG5cdFx0fVxuXHRcdHRoaXMuX3RyYWNlciA9IG5ldyBUcmFjZUxpc3RlbmVyKHRoaXMpO1xuXHRcdHRoaXMuYWRkUGFyc2VMaXN0ZW5lcih0aGlzLl90cmFjZXIpO1xuXHR9XG59O1xuXG5leHBvcnRzLlBhcnNlciA9IFBhcnNlcjsiLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbi8vKiBBIHJ1bGUgaW52b2NhdGlvbiByZWNvcmQgZm9yIHBhcnNpbmcuXG4vL1xuLy8gIENvbnRhaW5zIGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgcnVsZSBub3Qgc3RvcmVkIGluIHRoZVxuLy8gIFJ1bGVDb250ZXh0LiBJdCBoYW5kbGVzIHBhcnNlIHRyZWUgY2hpbGRyZW4gbGlzdCwgQW55IEFUTiBzdGF0ZVxuLy8gIHRyYWNpbmcsIGFuZCB0aGUgZGVmYXVsdCB2YWx1ZXMgYXZhaWxhYmxlIGZvciBydWxlIGluZGljYXRpb25zOlxuLy8gIHN0YXJ0LCBzdG9wLCBydWxlIGluZGV4LCBjdXJyZW50IGFsdCBudW1iZXIsIGN1cnJlbnRcbi8vICBBVE4gc3RhdGUuXG4vL1xuLy8gIFN1YmNsYXNzZXMgbWFkZSBmb3IgZWFjaCBydWxlIGFuZCBncmFtbWFyIHRyYWNrIHRoZSBwYXJhbWV0ZXJzLFxuLy8gIHJldHVybiB2YWx1ZXMsIGxvY2FscywgYW5kIGxhYmVscyBzcGVjaWZpYyB0byB0aGF0IHJ1bGUuIFRoZXNlXG4vLyAgYXJlIHRoZSBvYmplY3RzIHRoYXQgYXJlIHJldHVybmVkIGZyb20gcnVsZXMuXG4vL1xuLy8gIE5vdGUgdGV4dCBpcyBub3QgYW4gYWN0dWFsIGZpZWxkIG9mIGEgcnVsZSByZXR1cm4gdmFsdWU7IGl0IGlzIGNvbXB1dGVkXG4vLyAgZnJvbSBzdGFydCBhbmQgc3RvcCB1c2luZyB0aGUgaW5wdXQgc3RyZWFtJ3MgdG9TdHJpbmcoKSBtZXRob2QuICBJXG4vLyAgY291bGQgYWRkIGEgY3RvciB0byB0aGlzIHNvIHRoYXQgd2UgY2FuIHBhc3MgaW4gYW5kIHN0b3JlIHRoZSBpbnB1dFxuLy8gIHN0cmVhbSwgYnV0IEknbSBub3Qgc3VyZSB3ZSB3YW50IHRvIGRvIHRoYXQuICBJdCB3b3VsZCBzZWVtIHRvIGJlIHVuZGVmaW5lZFxuLy8gIHRvIGdldCB0aGUgLnRleHQgcHJvcGVydHkgYW55d2F5IGlmIHRoZSBydWxlIG1hdGNoZXMgdG9rZW5zIGZyb20gbXVsdGlwbGVcbi8vICBpbnB1dCBzdHJlYW1zLlxuLy9cbi8vICBJIGRvIG5vdCB1c2UgZ2V0dGVycyBmb3IgZmllbGRzIG9mIG9iamVjdHMgdGhhdCBhcmUgdXNlZCBzaW1wbHkgdG9cbi8vICBncm91cCB2YWx1ZXMgc3VjaCBhcyB0aGlzIGFnZ3JlZ2F0ZS4gIFRoZSBnZXR0ZXJzL3NldHRlcnMgYXJlIHRoZXJlIHRvXG4vLyAgc2F0aXNmeSB0aGUgc3VwZXJjbGFzcyBpbnRlcmZhY2UuXG5cbnZhciBSdWxlQ29udGV4dCA9IHJlcXVpcmUoJy4vUnVsZUNvbnRleHQnKS5SdWxlQ29udGV4dDtcbnZhciBUcmVlID0gcmVxdWlyZSgnLi90cmVlL1RyZWUnKTtcbnZhciBJTlZBTElEX0lOVEVSVkFMID0gVHJlZS5JTlZBTElEX0lOVEVSVkFMO1xudmFyIFRlcm1pbmFsTm9kZSA9IFRyZWUuVGVybWluYWxOb2RlO1xudmFyIFRlcm1pbmFsTm9kZUltcGwgPSBUcmVlLlRlcm1pbmFsTm9kZUltcGw7XG52YXIgRXJyb3JOb2RlSW1wbCA9IFRyZWUuRXJyb3JOb2RlSW1wbDtcbnZhciBJbnRlcnZhbCA9IHJlcXVpcmUoXCIuL0ludGVydmFsU2V0XCIpLkludGVydmFsO1xuXG5mdW5jdGlvbiBQYXJzZXJSdWxlQ29udGV4dChwYXJlbnQsIGludm9raW5nU3RhdGVOdW1iZXIpIHtcblx0cGFyZW50ID0gcGFyZW50IHx8IG51bGw7XG5cdGludm9raW5nU3RhdGVOdW1iZXIgPSBpbnZva2luZ1N0YXRlTnVtYmVyIHx8IG51bGw7XG5cdFJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlTnVtYmVyKTtcblx0dGhpcy5ydWxlSW5kZXggPSAtMTtcbiAgICAvLyAqIElmIHdlIGFyZSBkZWJ1Z2dpbmcgb3IgYnVpbGRpbmcgYSBwYXJzZSB0cmVlIGZvciBhIHZpc2l0b3IsXG4gICAgLy8gd2UgbmVlZCB0byB0cmFjayBhbGwgb2YgdGhlIHRva2VucyBhbmQgcnVsZSBpbnZvY2F0aW9ucyBhc3NvY2lhdGVkXG4gICAgLy8gd2l0aCB0aGlzIHJ1bGUncyBjb250ZXh0LiBUaGlzIGlzIGVtcHR5IGZvciBwYXJzaW5nIHcvbyB0cmVlIGNvbnN0ci5cbiAgICAvLyBvcGVyYXRpb24gYmVjYXVzZSB3ZSBkb24ndCB0aGUgbmVlZCB0byB0cmFjayB0aGUgZGV0YWlscyBhYm91dFxuICAgIC8vIGhvdyB3ZSBwYXJzZSB0aGlzIHJ1bGUuXG4gICAgLy8gL1xuICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xuICAgIHRoaXMuc3RhcnQgPSBudWxsO1xuICAgIHRoaXMuc3RvcCA9IG51bGw7XG4gICAgLy8gVGhlIGV4Y2VwdGlvbiB0aGF0IGZvcmNlZCB0aGlzIHJ1bGUgdG8gcmV0dXJuLiBJZiB0aGUgcnVsZSBzdWNjZXNzZnVsbHlcbiAgICAvLyBjb21wbGV0ZWQsIHRoaXMgaXMge0Bjb2RlIG51bGx9LlxuICAgIHRoaXMuZXhjZXB0aW9uID0gbnVsbDtcbn1cblxuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFyc2VyUnVsZUNvbnRleHQ7XG5cbi8vICogQ09QWSBhIGN0eCAoSSdtIGRlbGliZXJhdGVseSBub3QgdXNpbmcgY29weSBjb25zdHJ1Y3RvcikvLy9cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5jb3B5RnJvbSA9IGZ1bmN0aW9uKGN0eCkge1xuICAgIC8vIGZyb20gUnVsZUNvbnRleHRcbiAgICB0aGlzLnBhcmVudEN0eCA9IGN0eC5wYXJlbnRDdHg7XG4gICAgdGhpcy5pbnZva2luZ1N0YXRlID0gY3R4Lmludm9raW5nU3RhdGU7XG4gICAgdGhpcy5jaGlsZHJlbiA9IG51bGw7XG4gICAgdGhpcy5zdGFydCA9IGN0eC5zdGFydDtcbiAgICB0aGlzLnN0b3AgPSBjdHguc3RvcDtcbiAgICAvLyBjb3B5IGFueSBlcnJvciBub2RlcyB0byBhbHQgbGFiZWwgbm9kZVxuICAgIGlmKGN0eC5jaGlsZHJlbikge1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gW107XG4gICAgICAgIC8vIHJlc2V0IHBhcmVudCBwb2ludGVyIGZvciBhbnkgZXJyb3Igbm9kZXNcbiAgICBcdGN0eC5jaGlsZHJlbi5tYXAoZnVuY3Rpb24oY2hpbGQpIHtcbiAgICBcdFx0aWYgKGNoaWxkIGluc3RhbmNlb2YgRXJyb3JOb2RlSW1wbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgICAgICAgICAgY2hpbGQucGFyZW50Q3R4ID0gdGhpcztcbiAgICAgICAgICAgIH1cblx0XHR9LCB0aGlzKTtcblx0fVxufTtcblxuLy8gRG91YmxlIGRpc3BhdGNoIG1ldGhvZHMgZm9yIGxpc3RlbmVyc1xuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG59O1xuXG5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xufTtcblxuLy8gKiBEb2VzIG5vdCBzZXQgcGFyZW50IGxpbms7IG90aGVyIGFkZCBtZXRob2RzIGRvIHRoYXQvLy9cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5hZGRDaGlsZCA9IGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW4gPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgIHJldHVybiBjaGlsZDtcbn07XG5cbi8vICogVXNlZCBieSBlbnRlck91dGVyQWx0IHRvIHRvc3Mgb3V0IGEgUnVsZUNvbnRleHQgcHJldmlvdXNseSBhZGRlZCBhc1xuLy8gd2UgZW50ZXJlZCBhIHJ1bGUuIElmIHdlIGhhdmUgLy8gbGFiZWwsIHdlIHdpbGwgbmVlZCB0byByZW1vdmVcbi8vIGdlbmVyaWMgcnVsZUNvbnRleHQgb2JqZWN0LlxuLy8gL1xuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlLnJlbW92ZUxhc3RDaGlsZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4ucG9wKCk7XG4gICAgfVxufTtcblxuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlLmFkZFRva2VuTm9kZSA9IGZ1bmN0aW9uKHRva2VuKSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgVGVybWluYWxOb2RlSW1wbCh0b2tlbik7XG4gICAgdGhpcy5hZGRDaGlsZChub2RlKTtcbiAgICBub2RlLnBhcmVudEN0eCA9IHRoaXM7XG4gICAgcmV0dXJuIG5vZGU7XG59O1xuXG5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUuYWRkRXJyb3JOb2RlID0gZnVuY3Rpb24oYmFkVG9rZW4pIHtcbiAgICB2YXIgbm9kZSA9IG5ldyBFcnJvck5vZGVJbXBsKGJhZFRva2VuKTtcbiAgICB0aGlzLmFkZENoaWxkKG5vZGUpO1xuICAgIG5vZGUucGFyZW50Q3R4ID0gdGhpcztcbiAgICByZXR1cm4gbm9kZTtcbn07XG5cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRDaGlsZCA9IGZ1bmN0aW9uKGksIHR5cGUpIHtcblx0dHlwZSA9IHR5cGUgfHwgbnVsbDtcblx0aWYgKHRoaXMuY2hpbGRyZW4gPT09IG51bGwgfHwgaSA8IDAgfHwgaSA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGlmICh0eXBlID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIHRoaXMuY2hpbGRyZW5baV07XG5cdH0gZWxzZSB7XG5cdFx0Zm9yKHZhciBqPTA7IGo8dGhpcy5jaGlsZHJlbi5sZW5ndGg7IGorKykge1xuXHRcdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltqXTtcblx0XHRcdGlmKGNoaWxkIGluc3RhbmNlb2YgdHlwZSkge1xuXHRcdFx0XHRpZihpPT09MCkge1xuXHRcdFx0XHRcdHJldHVybiBjaGlsZDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpIC09IDE7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG4gICAgfVxufTtcblxuXG5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0VG9rZW4gPSBmdW5jdGlvbih0dHlwZSwgaSkge1xuXHRpZiAodGhpcy5jaGlsZHJlbiA9PT0gbnVsbCB8fCBpIDwgMCB8fCBpID49IHRoaXMuY2hpbGRyZW4ubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0Zm9yKHZhciBqPTA7IGo8dGhpcy5jaGlsZHJlbi5sZW5ndGg7IGorKykge1xuXHRcdHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5bal07XG5cdFx0aWYgKGNoaWxkIGluc3RhbmNlb2YgVGVybWluYWxOb2RlKSB7XG5cdFx0XHRpZiAoY2hpbGQuc3ltYm9sLnR5cGUgPT09IHR0eXBlKSB7XG5cdFx0XHRcdGlmKGk9PT0wKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNoaWxkO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGkgLT0gMTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuICAgICAgICB9XG5cdH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRUb2tlbnMgPSBmdW5jdGlvbih0dHlwZSApIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbj09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9IGVsc2Uge1xuXHRcdHZhciB0b2tlbnMgPSBbXTtcblx0XHRmb3IodmFyIGo9MDsgajx0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XG5cdFx0XHR2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2pdO1xuXHRcdFx0aWYgKGNoaWxkIGluc3RhbmNlb2YgVGVybWluYWxOb2RlKSB7XG5cdFx0XHRcdGlmIChjaGlsZC5zeW1ib2wudHlwZSA9PT0gdHR5cGUpIHtcblx0XHRcdFx0XHR0b2tlbnMucHVzaChjaGlsZCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRva2VucztcbiAgICB9XG59O1xuXG5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0VHlwZWRSdWxlQ29udGV4dCA9IGZ1bmN0aW9uKGN0eFR5cGUsIGkpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRDaGlsZChpLCBjdHhUeXBlKTtcbn07XG5cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRUeXBlZFJ1bGVDb250ZXh0cyA9IGZ1bmN0aW9uKGN0eFR5cGUpIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbj09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9IGVsc2Uge1xuXHRcdHZhciBjb250ZXh0cyA9IFtdO1xuXHRcdGZvcih2YXIgaj0wOyBqPHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBqKyspIHtcblx0XHRcdHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5bal07XG5cdFx0XHRpZiAoY2hpbGQgaW5zdGFuY2VvZiBjdHhUeXBlKSB7XG5cdFx0XHRcdGNvbnRleHRzLnB1c2goY2hpbGQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY29udGV4dHM7XG5cdH1cbn07XG5cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRDaGlsZENvdW50ID0gZnVuY3Rpb24oKSB7XG5cdGlmICh0aGlzLmNoaWxkcmVuPT09IG51bGwpIHtcblx0XHRyZXR1cm4gMDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg7XG5cdH1cbn07XG5cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRTb3VyY2VJbnRlcnZhbCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmKCB0aGlzLnN0YXJ0ID09PSBudWxsIHx8IHRoaXMuc3RvcCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gSU5WQUxJRF9JTlRFUlZBTDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IEludGVydmFsKHRoaXMuc3RhcnQudG9rZW5JbmRleCwgdGhpcy5zdG9wLnRva2VuSW5kZXgpO1xuICAgIH1cbn07XG5cblJ1bGVDb250ZXh0LkVNUFRZID0gbmV3IFBhcnNlclJ1bGVDb250ZXh0KCk7XG5cbmZ1bmN0aW9uIEludGVycHJldGVyUnVsZUNvbnRleHQocGFyZW50LCBpbnZva2luZ1N0YXRlTnVtYmVyLCBydWxlSW5kZXgpIHtcblx0UGFyc2VyUnVsZUNvbnRleHQuY2FsbChwYXJlbnQsIGludm9raW5nU3RhdGVOdW1iZXIpO1xuICAgIHRoaXMucnVsZUluZGV4ID0gcnVsZUluZGV4O1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5JbnRlcnByZXRlclJ1bGVDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlKTtcbkludGVycHJldGVyUnVsZUNvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW50ZXJwcmV0ZXJSdWxlQ29udGV4dDtcblxuZXhwb3J0cy5QYXJzZXJSdWxlQ29udGV4dCA9IFBhcnNlclJ1bGVDb250ZXh0OyIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxudmFyIFJ1bGVDb250ZXh0ID0gcmVxdWlyZSgnLi9SdWxlQ29udGV4dCcpLlJ1bGVDb250ZXh0O1xudmFyIEhhc2ggPSByZXF1aXJlKCcuL1V0aWxzJykuSGFzaDtcblxuZnVuY3Rpb24gUHJlZGljdGlvbkNvbnRleHQoY2FjaGVkSGFzaENvZGUpIHtcblx0dGhpcy5jYWNoZWRIYXNoQ29kZSA9IGNhY2hlZEhhc2hDb2RlO1xufVxuXG4vLyBSZXByZXNlbnRzIHtAY29kZSAkfSBpbiBsb2NhbCBjb250ZXh0IHByZWRpY3Rpb24sIHdoaWNoIG1lYW5zIHdpbGRjYXJkLlxuLy8ge0Bjb2RlLy8reCA9Ly99LlxuLy8gL1xuUHJlZGljdGlvbkNvbnRleHQuRU1QVFkgPSBudWxsO1xuXG4vLyBSZXByZXNlbnRzIHtAY29kZSAkfSBpbiBhbiBhcnJheSBpbiBmdWxsIGNvbnRleHQgbW9kZSwgd2hlbiB7QGNvZGUgJH1cbi8vIGRvZXNuJ3QgbWVhbiB3aWxkY2FyZDoge0Bjb2RlICQgKyB4ID0gWyQseF19LiBIZXJlLFxuLy8ge0Bjb2RlICR9ID0ge0BsaW5rIC8vRU1QVFlfUkVUVVJOX1NUQVRFfS5cbi8vIC9cblByZWRpY3Rpb25Db250ZXh0LkVNUFRZX1JFVFVSTl9TVEFURSA9IDB4N0ZGRkZGRkY7XG5cblByZWRpY3Rpb25Db250ZXh0Lmdsb2JhbE5vZGVDb3VudCA9IDE7XG5QcmVkaWN0aW9uQ29udGV4dC5pZCA9IFByZWRpY3Rpb25Db250ZXh0Lmdsb2JhbE5vZGVDb3VudDtcblxuLy8gU3RvcmVzIHRoZSBjb21wdXRlZCBoYXNoIGNvZGUgb2YgdGhpcyB7QGxpbmsgUHJlZGljdGlvbkNvbnRleHR9LiBUaGUgaGFzaFxuLy8gY29kZSBpcyBjb21wdXRlZCBpbiBwYXJ0cyB0byBtYXRjaCB0aGUgZm9sbG93aW5nIHJlZmVyZW5jZSBhbGdvcml0aG0uXG4vL1xuLy8gPHByZT5cbi8vIHByaXZhdGUgaW50IHJlZmVyZW5jZUhhc2hDb2RlKCkge1xuLy8gaW50IGhhc2ggPSB7QGxpbmsgTXVybXVySGFzaC8vaW5pdGlhbGl6ZSBNdXJtdXJIYXNoLmluaXRpYWxpemV9KHtAbGlua1xuLy8gLy9JTklUSUFMX0hBU0h9KTtcbi8vXG4vLyBmb3IgKGludCBpID0gMDsgaSAmbHQ7IHtAbGluayAvL3NpemUoKX07IGkrKykge1xuLy8gaGFzaCA9IHtAbGluayBNdXJtdXJIYXNoLy91cGRhdGUgTXVybXVySGFzaC51cGRhdGV9KGhhc2gsIHtAbGluayAvL2dldFBhcmVudFxuLy8gZ2V0UGFyZW50fShpKSk7XG4vLyB9XG4vL1xuLy8gZm9yIChpbnQgaSA9IDA7IGkgJmx0OyB7QGxpbmsgLy9zaXplKCl9OyBpKyspIHtcbi8vIGhhc2ggPSB7QGxpbmsgTXVybXVySGFzaC8vdXBkYXRlIE11cm11ckhhc2gudXBkYXRlfShoYXNoLCB7QGxpbmtcbi8vIC8vZ2V0UmV0dXJuU3RhdGUgZ2V0UmV0dXJuU3RhdGV9KGkpKTtcbi8vIH1cbi8vXG4vLyBoYXNoID0ge0BsaW5rIE11cm11ckhhc2gvL2ZpbmlzaCBNdXJtdXJIYXNoLmZpbmlzaH0oaGFzaCwgMi8vIHtAbGlua1xuLy8gLy9zaXplKCl9KTtcbi8vIHJldHVybiBoYXNoO1xuLy8gfVxuLy8gPC9wcmU+XG4vLyAvXG5cbi8vIFRoaXMgbWVhbnMgb25seSB0aGUge0BsaW5rIC8vRU1QVFl9IGNvbnRleHQgaXMgaW4gc2V0LlxuUHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMgPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZO1xufTtcblxuUHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmhhc0VtcHR5UGF0aCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5nZXRSZXR1cm5TdGF0ZSh0aGlzLmxlbmd0aCAtIDEpID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEU7XG59O1xuXG5QcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuaGFzaENvZGUgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuY2FjaGVkSGFzaENvZGU7XG59O1xuXG5cblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLmNhY2hlZEhhc2hDb2RlKTtcbn07XG4vKlxuZnVuY3Rpb24gY2FsY3VsYXRlSGFzaFN0cmluZyhwYXJlbnQsIHJldHVyblN0YXRlKSB7XG5cdHJldHVybiBcIlwiICsgcGFyZW50ICsgcmV0dXJuU3RhdGU7XG59XG4qL1xuXG4vLyBVc2VkIHRvIGNhY2hlIHtAbGluayBQcmVkaWN0aW9uQ29udGV4dH0gb2JqZWN0cy4gSXRzIHVzZWQgZm9yIHRoZSBzaGFyZWRcbi8vIGNvbnRleHQgY2FzaCBhc3NvY2lhdGVkIHdpdGggY29udGV4dHMgaW4gREZBIHN0YXRlcy4gVGhpcyBjYWNoZVxuLy8gY2FuIGJlIHVzZWQgZm9yIGJvdGggbGV4ZXJzIGFuZCBwYXJzZXJzLlxuXG5mdW5jdGlvbiBQcmVkaWN0aW9uQ29udGV4dENhY2hlKCkge1xuXHR0aGlzLmNhY2hlID0ge307XG5cdHJldHVybiB0aGlzO1xufVxuXG4vLyBBZGQgYSBjb250ZXh0IHRvIHRoZSBjYWNoZSBhbmQgcmV0dXJuIGl0LiBJZiB0aGUgY29udGV4dCBhbHJlYWR5IGV4aXN0cyxcbi8vIHJldHVybiB0aGF0IG9uZSBpbnN0ZWFkIGFuZCBkbyBub3QgYWRkIGEgbmV3IGNvbnRleHQgdG8gdGhlIGNhY2hlLlxuLy8gUHJvdGVjdCBzaGFyZWQgY2FjaGUgZnJvbSB1bnNhZmUgdGhyZWFkIGFjY2Vzcy5cbi8vXG5QcmVkaWN0aW9uQ29udGV4dENhY2hlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihjdHgpIHtcblx0aWYgKGN0eCA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFkpIHtcblx0XHRyZXR1cm4gUHJlZGljdGlvbkNvbnRleHQuRU1QVFk7XG5cdH1cblx0dmFyIGV4aXN0aW5nID0gdGhpcy5jYWNoZVtjdHhdIHx8IG51bGw7XG5cdGlmIChleGlzdGluZyAhPT0gbnVsbCkge1xuXHRcdHJldHVybiBleGlzdGluZztcblx0fVxuXHR0aGlzLmNhY2hlW2N0eF0gPSBjdHg7XG5cdHJldHVybiBjdHg7XG59O1xuXG5QcmVkaWN0aW9uQ29udGV4dENhY2hlLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihjdHgpIHtcblx0cmV0dXJuIHRoaXMuY2FjaGVbY3R4XSB8fCBudWxsO1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFByZWRpY3Rpb25Db250ZXh0Q2FjaGUucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmNhY2hlLmxlbmd0aDtcblx0fVxufSk7XG5cbmZ1bmN0aW9uIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0KHBhcmVudCwgcmV0dXJuU3RhdGUpIHtcblx0dmFyIGhhc2hDb2RlID0gMDtcblx0aWYocGFyZW50ICE9PSBudWxsKSB7XG5cdFx0dmFyIGhhc2ggPSBuZXcgSGFzaCgpO1xuXHRcdGhhc2gudXBkYXRlKHBhcmVudCwgcmV0dXJuU3RhdGUpO1xuICAgICAgICBoYXNoQ29kZSA9IGhhc2guZmluaXNoKCk7XG5cdH1cblx0UHJlZGljdGlvbkNvbnRleHQuY2FsbCh0aGlzLCBoYXNoQ29kZSk7XG5cdHRoaXMucGFyZW50Q3R4ID0gcGFyZW50O1xuXHR0aGlzLnJldHVyblN0YXRlID0gcmV0dXJuU3RhdGU7XG59XG5cblNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlKTtcblNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5jb250cnVjdG9yID0gU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQ7XG5cblNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LmNyZWF0ZSA9IGZ1bmN0aW9uKHBhcmVudCwgcmV0dXJuU3RhdGUpIHtcblx0aWYgKHJldHVyblN0YXRlID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEUgJiYgcGFyZW50ID09PSBudWxsKSB7XG5cdFx0Ly8gc29tZW9uZSBjYW4gcGFzcyBpbiB0aGUgYml0cyBvZiBhbiBhcnJheSBjdHggdGhhdCBtZWFuICRcblx0XHRyZXR1cm4gUHJlZGljdGlvbkNvbnRleHQuRU1QVFk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG5ldyBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dChwYXJlbnQsIHJldHVyblN0YXRlKTtcblx0fVxufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZSwgXCJsZW5ndGhcIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gMTtcblx0fVxufSk7XG5cblNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5nZXRQYXJlbnQgPSBmdW5jdGlvbihpbmRleCkge1xuXHRyZXR1cm4gdGhpcy5wYXJlbnRDdHg7XG59O1xuXG5TaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuZ2V0UmV0dXJuU3RhdGUgPSBmdW5jdGlvbihpbmRleCkge1xuXHRyZXR1cm4gdGhpcy5yZXR1cm5TdGF0ZTtcbn07XG5cblNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuXHRpZiAodGhpcyA9PT0gb3RoZXIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIGlmICghKG90aGVyIGluc3RhbmNlb2YgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGVsc2UgaWYgKHRoaXMuaGFzaENvZGUoKSAhPT0gb3RoZXIuaGFzaENvZGUoKSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gY2FuJ3QgYmUgc2FtZSBpZiBoYXNoIGlzIGRpZmZlcmVudFxuXHR9IGVsc2Uge1xuXHRcdGlmKHRoaXMucmV0dXJuU3RhdGUgIT09IG90aGVyLnJldHVyblN0YXRlKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBlbHNlIGlmKHRoaXMucGFyZW50Q3R4PT1udWxsKVxuICAgICAgICAgICAgcmV0dXJuIG90aGVyLnBhcmVudEN0eD09bnVsbFxuXHRcdGVsc2VcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudEN0eC5lcXVhbHMob3RoZXIucGFyZW50Q3R4KTtcblx0fVxufTtcblxuU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHZhciB1cCA9IHRoaXMucGFyZW50Q3R4ID09PSBudWxsID8gXCJcIiA6IHRoaXMucGFyZW50Q3R4LnRvU3RyaW5nKCk7XG5cdGlmICh1cC5sZW5ndGggPT09IDApIHtcblx0XHRpZiAodGhpcy5yZXR1cm5TdGF0ZSA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFlfUkVUVVJOX1NUQVRFKSB7XG5cdFx0XHRyZXR1cm4gXCIkXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIlwiICsgdGhpcy5yZXR1cm5TdGF0ZTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiXCIgKyB0aGlzLnJldHVyblN0YXRlICsgXCIgXCIgKyB1cDtcblx0fVxufTtcblxuZnVuY3Rpb24gRW1wdHlQcmVkaWN0aW9uQ29udGV4dCgpIHtcblx0U2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQuY2FsbCh0aGlzLCBudWxsLCBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEUpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuRW1wdHlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZSk7XG5FbXB0eVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVtcHR5UHJlZGljdGlvbkNvbnRleHQ7XG5cbkVtcHR5UHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRydWU7XG59O1xuXG5FbXB0eVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5nZXRQYXJlbnQgPSBmdW5jdGlvbihpbmRleCkge1xuXHRyZXR1cm4gbnVsbDtcbn07XG5cbkVtcHR5UHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmdldFJldHVyblN0YXRlID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0cmV0dXJuIHRoaXMucmV0dXJuU3RhdGU7XG59O1xuXG5FbXB0eVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuXHRyZXR1cm4gdGhpcyA9PT0gb3RoZXI7XG59O1xuXG5FbXB0eVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCIkXCI7XG59O1xuXG5QcmVkaWN0aW9uQ29udGV4dC5FTVBUWSA9IG5ldyBFbXB0eVByZWRpY3Rpb25Db250ZXh0KCk7XG5cbmZ1bmN0aW9uIEFycmF5UHJlZGljdGlvbkNvbnRleHQocGFyZW50cywgcmV0dXJuU3RhdGVzKSB7XG5cdC8vIFBhcmVudCBjYW4gYmUgbnVsbCBvbmx5IGlmIGZ1bGwgY3R4IG1vZGUgYW5kIHdlIG1ha2UgYW4gYXJyYXlcblx0Ly8gZnJvbSB7QGxpbmsgLy9FTVBUWX0gYW5kIG5vbi1lbXB0eS4gV2UgbWVyZ2Uge0BsaW5rIC8vRU1QVFl9IGJ5IHVzaW5nXG5cdC8vIG51bGwgcGFyZW50IGFuZFxuXHQvLyByZXR1cm5TdGF0ZSA9PSB7QGxpbmsgLy9FTVBUWV9SRVRVUk5fU1RBVEV9LlxuXHR2YXIgaCA9IG5ldyBIYXNoKCk7XG5cdGgudXBkYXRlKHBhcmVudHMsIHJldHVyblN0YXRlcyk7XG5cdHZhciBoYXNoQ29kZSA9IGguZmluaXNoKCk7XG5cdFByZWRpY3Rpb25Db250ZXh0LmNhbGwodGhpcywgaGFzaENvZGUpO1xuXHR0aGlzLnBhcmVudHMgPSBwYXJlbnRzO1xuXHR0aGlzLnJldHVyblN0YXRlcyA9IHJldHVyblN0YXRlcztcblx0cmV0dXJuIHRoaXM7XG59XG5cbkFycmF5UHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUpO1xuQXJyYXlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBcnJheVByZWRpY3Rpb25Db250ZXh0O1xuXG5BcnJheVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7XG5cdC8vIHNpbmNlIEVNUFRZX1JFVFVSTl9TVEFURSBjYW4gb25seSBhcHBlYXIgaW4gdGhlIGxhc3QgcG9zaXRpb24sIHdlXG5cdC8vIGRvbid0IG5lZWQgdG8gdmVyaWZ5IHRoYXQgc2l6ZT09MVxuXHRyZXR1cm4gdGhpcy5yZXR1cm5TdGF0ZXNbMF0gPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZX1JFVFVSTl9TVEFURTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBcnJheVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZSwgXCJsZW5ndGhcIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5yZXR1cm5TdGF0ZXMubGVuZ3RoO1xuXHR9XG59KTtcblxuQXJyYXlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuZ2V0UGFyZW50ID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0cmV0dXJuIHRoaXMucGFyZW50c1tpbmRleF07XG59O1xuXG5BcnJheVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5nZXRSZXR1cm5TdGF0ZSA9IGZ1bmN0aW9uKGluZGV4KSB7XG5cdHJldHVybiB0aGlzLnJldHVyblN0YXRlc1tpbmRleF07XG59O1xuXG5BcnJheVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuXHRpZiAodGhpcyA9PT0gb3RoZXIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIGlmICghKG90aGVyIGluc3RhbmNlb2YgQXJyYXlQcmVkaWN0aW9uQ29udGV4dCkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSBpZiAodGhpcy5oYXNoQ29kZSgpICE9PSBvdGhlci5oYXNoQ29kZSgpKSB7XG5cdFx0cmV0dXJuIGZhbHNlOyAvLyBjYW4ndCBiZSBzYW1lIGlmIGhhc2ggaXMgZGlmZmVyZW50XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMucmV0dXJuU3RhdGVzID09PSBvdGhlci5yZXR1cm5TdGF0ZXMgJiZcblx0XHRcdFx0dGhpcy5wYXJlbnRzID09PSBvdGhlci5wYXJlbnRzO1xuXHR9XG59O1xuXG5BcnJheVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5pc0VtcHR5KCkpIHtcblx0XHRyZXR1cm4gXCJbXVwiO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBzID0gXCJbXCI7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnJldHVyblN0YXRlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYgKGkgPiAwKSB7XG5cdFx0XHRcdHMgPSBzICsgXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMucmV0dXJuU3RhdGVzW2ldID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEUpIHtcblx0XHRcdFx0cyA9IHMgKyBcIiRcIjtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRzID0gcyArIHRoaXMucmV0dXJuU3RhdGVzW2ldO1xuXHRcdFx0aWYgKHRoaXMucGFyZW50c1tpXSAhPT0gbnVsbCkge1xuXHRcdFx0XHRzID0gcyArIFwiIFwiICsgdGhpcy5wYXJlbnRzW2ldO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cyA9IHMgKyBcIm51bGxcIjtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHMgKyBcIl1cIjtcblx0fVxufTtcblxuLy8gQ29udmVydCBhIHtAbGluayBSdWxlQ29udGV4dH0gdHJlZSB0byBhIHtAbGluayBQcmVkaWN0aW9uQ29udGV4dH0gZ3JhcGguXG4vLyBSZXR1cm4ge0BsaW5rIC8vRU1QVFl9IGlmIHtAY29kZSBvdXRlckNvbnRleHR9IGlzIGVtcHR5IG9yIG51bGwuXG4vLyAvXG5mdW5jdGlvbiBwcmVkaWN0aW9uQ29udGV4dEZyb21SdWxlQ29udGV4dChhdG4sIG91dGVyQ29udGV4dCkge1xuXHRpZiAob3V0ZXJDb250ZXh0ID09PSB1bmRlZmluZWQgfHwgb3V0ZXJDb250ZXh0ID09PSBudWxsKSB7XG5cdFx0b3V0ZXJDb250ZXh0ID0gUnVsZUNvbnRleHQuRU1QVFk7XG5cdH1cblx0Ly8gaWYgd2UgYXJlIGluIFJ1bGVDb250ZXh0IG9mIHN0YXJ0IHJ1bGUsIHMsIHRoZW4gUHJlZGljdGlvbkNvbnRleHRcblx0Ly8gaXMgRU1QVFkuIE5vYm9keSBjYWxsZWQgdXMuIChpZiB3ZSBhcmUgZW1wdHksIHJldHVybiBlbXB0eSlcblx0aWYgKG91dGVyQ29udGV4dC5wYXJlbnRDdHggPT09IG51bGwgfHwgb3V0ZXJDb250ZXh0ID09PSBSdWxlQ29udGV4dC5FTVBUWSkge1xuXHRcdHJldHVybiBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWTtcblx0fVxuXHQvLyBJZiB3ZSBoYXZlIGEgcGFyZW50LCBjb252ZXJ0IGl0IHRvIGEgUHJlZGljdGlvbkNvbnRleHQgZ3JhcGhcblx0dmFyIHBhcmVudCA9IHByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0KGF0biwgb3V0ZXJDb250ZXh0LnBhcmVudEN0eCk7XG5cdHZhciBzdGF0ZSA9IGF0bi5zdGF0ZXNbb3V0ZXJDb250ZXh0Lmludm9raW5nU3RhdGVdO1xuXHR2YXIgdHJhbnNpdGlvbiA9IHN0YXRlLnRyYW5zaXRpb25zWzBdO1xuXHRyZXR1cm4gU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQuY3JlYXRlKHBhcmVudCwgdHJhbnNpdGlvbi5mb2xsb3dTdGF0ZS5zdGF0ZU51bWJlcik7XG59XG4vKlxuZnVuY3Rpb24gY2FsY3VsYXRlTGlzdHNIYXNoU3RyaW5nKHBhcmVudHMsIHJldHVyblN0YXRlcykge1xuXHR2YXIgcyA9IFwiXCI7XG5cdHBhcmVudHMubWFwKGZ1bmN0aW9uKHApIHtcblx0XHRzID0gcyArIHA7XG5cdH0pO1xuXHRyZXR1cm5TdGF0ZXMubWFwKGZ1bmN0aW9uKHIpIHtcblx0XHRzID0gcyArIHI7XG5cdH0pO1xuXHRyZXR1cm4gcztcbn1cbiovXG5mdW5jdGlvbiBtZXJnZShhLCBiLCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSkge1xuXHQvLyBzaGFyZSBzYW1lIGdyYXBoIGlmIGJvdGggc2FtZVxuXHRpZiAoYSA9PT0gYikge1xuXHRcdHJldHVybiBhO1xuXHR9XG5cdGlmIChhIGluc3RhbmNlb2YgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQgJiYgYiBpbnN0YW5jZW9mIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0KSB7XG5cdFx0cmV0dXJuIG1lcmdlU2luZ2xldG9ucyhhLCBiLCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSk7XG5cdH1cblx0Ly8gQXQgbGVhc3Qgb25lIG9mIGEgb3IgYiBpcyBhcnJheVxuXHQvLyBJZiBvbmUgaXMgJCBhbmQgcm9vdElzV2lsZGNhcmQsIHJldHVybiAkIGFzLy8gd2lsZGNhcmRcblx0aWYgKHJvb3RJc1dpbGRjYXJkKSB7XG5cdFx0aWYgKGEgaW5zdGFuY2VvZiBFbXB0eVByZWRpY3Rpb25Db250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gYTtcblx0XHR9XG5cdFx0aWYgKGIgaW5zdGFuY2VvZiBFbXB0eVByZWRpY3Rpb25Db250ZXh0KSB7XG5cdFx0XHRyZXR1cm4gYjtcblx0XHR9XG5cdH1cblx0Ly8gY29udmVydCBzaW5nbGV0b24gc28gYm90aCBhcmUgYXJyYXlzIHRvIG5vcm1hbGl6ZVxuXHRpZiAoYSBpbnN0YW5jZW9mIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0KSB7XG5cdFx0YSA9IG5ldyBBcnJheVByZWRpY3Rpb25Db250ZXh0KFthLmdldFBhcmVudCgpXSwgW2EucmV0dXJuU3RhdGVdKTtcblx0fVxuXHRpZiAoYiBpbnN0YW5jZW9mIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0KSB7XG5cdFx0YiA9IG5ldyBBcnJheVByZWRpY3Rpb25Db250ZXh0KFtiLmdldFBhcmVudCgpXSwgW2IucmV0dXJuU3RhdGVdKTtcblx0fVxuXHRyZXR1cm4gbWVyZ2VBcnJheXMoYSwgYiwgcm9vdElzV2lsZGNhcmQsIG1lcmdlQ2FjaGUpO1xufVxuXG4vL1xuLy8gTWVyZ2UgdHdvIHtAbGluayBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dH0gaW5zdGFuY2VzLlxuLy9cbi8vIDxwPlN0YWNrIHRvcHMgZXF1YWwsIHBhcmVudHMgbWVyZ2UgaXMgc2FtZTsgcmV0dXJuIGxlZnQgZ3JhcGguPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9TaW5nbGV0b25NZXJnZV9TYW1lUm9vdFNhbWVQYXIuc3ZnXCJcbi8vIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5TYW1lIHN0YWNrIHRvcCwgcGFyZW50cyBkaWZmZXI7IG1lcmdlIHBhcmVudHMgZ2l2aW5nIGFycmF5IG5vZGUsIHRoZW5cbi8vIHJlbWFpbmRlcnMgb2YgdGhvc2UgZ3JhcGhzLiBBIG5ldyByb290IG5vZGUgaXMgY3JlYXRlZCB0byBwb2ludCB0byB0aGVcbi8vIG1lcmdlZCBwYXJlbnRzLjxicj5cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvU2luZ2xldG9uTWVyZ2VfU2FtZVJvb3REaWZmUGFyLnN2Z1wiXG4vLyB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gPHA+RGlmZmVyZW50IHN0YWNrIHRvcHMgcG9pbnRpbmcgdG8gc2FtZSBwYXJlbnQuIE1ha2UgYXJyYXkgbm9kZSBmb3IgdGhlXG4vLyByb290IHdoZXJlIGJvdGggZWxlbWVudCBpbiB0aGUgcm9vdCBwb2ludCB0byB0aGUgc2FtZSAob3JpZ2luYWwpXG4vLyBwYXJlbnQuPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9TaW5nbGV0b25NZXJnZV9EaWZmUm9vdFNhbWVQYXIuc3ZnXCJcbi8vIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5EaWZmZXJlbnQgc3RhY2sgdG9wcyBwb2ludGluZyB0byBkaWZmZXJlbnQgcGFyZW50cy4gTWFrZSBhcnJheSBub2RlIGZvclxuLy8gdGhlIHJvb3Qgd2hlcmUgZWFjaCBlbGVtZW50IHBvaW50cyB0byB0aGUgY29ycmVzcG9uZGluZyBvcmlnaW5hbFxuLy8gcGFyZW50Ljxicj5cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvU2luZ2xldG9uTWVyZ2VfRGlmZlJvb3REaWZmUGFyLnN2Z1wiXG4vLyB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gQHBhcmFtIGEgdGhlIGZpcnN0IHtAbGluayBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dH1cbi8vIEBwYXJhbSBiIHRoZSBzZWNvbmQge0BsaW5rIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0fVxuLy8gQHBhcmFtIHJvb3RJc1dpbGRjYXJkIHtAY29kZSB0cnVlfSBpZiB0aGlzIGlzIGEgbG9jYWwtY29udGV4dCBtZXJnZSxcbi8vIG90aGVyd2lzZSBmYWxzZSB0byBpbmRpY2F0ZSBhIGZ1bGwtY29udGV4dCBtZXJnZVxuLy8gQHBhcmFtIG1lcmdlQ2FjaGVcbi8vIC9cbmZ1bmN0aW9uIG1lcmdlU2luZ2xldG9ucyhhLCBiLCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSkge1xuXHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdHZhciBwcmV2aW91cyA9IG1lcmdlQ2FjaGUuZ2V0KGEsIGIpO1xuXHRcdGlmIChwcmV2aW91cyAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIHByZXZpb3VzO1xuXHRcdH1cblx0XHRwcmV2aW91cyA9IG1lcmdlQ2FjaGUuZ2V0KGIsIGEpO1xuXHRcdGlmIChwcmV2aW91cyAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIHByZXZpb3VzO1xuXHRcdH1cblx0fVxuXG5cdHZhciByb290TWVyZ2UgPSBtZXJnZVJvb3QoYSwgYiwgcm9vdElzV2lsZGNhcmQpO1xuXHRpZiAocm9vdE1lcmdlICE9PSBudWxsKSB7XG5cdFx0aWYgKG1lcmdlQ2FjaGUgIT09IG51bGwpIHtcblx0XHRcdG1lcmdlQ2FjaGUuc2V0KGEsIGIsIHJvb3RNZXJnZSk7XG5cdFx0fVxuXHRcdHJldHVybiByb290TWVyZ2U7XG5cdH1cblx0aWYgKGEucmV0dXJuU3RhdGUgPT09IGIucmV0dXJuU3RhdGUpIHtcblx0XHR2YXIgcGFyZW50ID0gbWVyZ2UoYS5wYXJlbnRDdHgsIGIucGFyZW50Q3R4LCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSk7XG5cdFx0Ly8gaWYgcGFyZW50IGlzIHNhbWUgYXMgZXhpc3RpbmcgYSBvciBiIHBhcmVudCBvciByZWR1Y2VkIHRvIGEgcGFyZW50LFxuXHRcdC8vIHJldHVybiBpdFxuXHRcdGlmIChwYXJlbnQgPT09IGEucGFyZW50Q3R4KSB7XG5cdFx0XHRyZXR1cm4gYTsgLy8gYXggKyBieCA9IGF4LCBpZiBhPWJcblx0XHR9XG5cdFx0aWYgKHBhcmVudCA9PT0gYi5wYXJlbnRDdHgpIHtcblx0XHRcdHJldHVybiBiOyAvLyBheCArIGJ4ID0gYngsIGlmIGE9YlxuXHRcdH1cblx0XHQvLyBlbHNlOiBheCArIGF5ID0gYSdbeCx5XVxuXHRcdC8vIG1lcmdlIHBhcmVudHMgeCBhbmQgeSwgZ2l2aW5nIGFycmF5IG5vZGUgd2l0aCB4LHkgdGhlbiByZW1haW5kZXJzXG5cdFx0Ly8gb2YgdGhvc2UgZ3JhcGhzLiBkdXAgYSwgYScgcG9pbnRzIGF0IG1lcmdlZCBhcnJheVxuXHRcdC8vIG5ldyBqb2luZWQgcGFyZW50IHNvIGNyZWF0ZSBuZXcgc2luZ2xldG9uIHBvaW50aW5nIHRvIGl0LCBhJ1xuXHRcdHZhciBzcGMgPSBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5jcmVhdGUocGFyZW50LCBhLnJldHVyblN0YXRlKTtcblx0XHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdFx0bWVyZ2VDYWNoZS5zZXQoYSwgYiwgc3BjKTtcblx0XHR9XG5cdFx0cmV0dXJuIHNwYztcblx0fSBlbHNlIHsgLy8gYSAhPSBiIHBheWxvYWRzIGRpZmZlclxuXHRcdC8vIHNlZSBpZiB3ZSBjYW4gY29sbGFwc2UgcGFyZW50cyBkdWUgdG8gJCt4IHBhcmVudHMgaWYgbG9jYWwgY3R4XG5cdFx0dmFyIHNpbmdsZVBhcmVudCA9IG51bGw7XG5cdFx0aWYgKGEgPT09IGIgfHwgKGEucGFyZW50Q3R4ICE9PSBudWxsICYmIGEucGFyZW50Q3R4ID09PSBiLnBhcmVudEN0eCkpIHsgLy8gYXggK1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGJ4ID1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBbYSxiXXhcblx0XHRcdHNpbmdsZVBhcmVudCA9IGEucGFyZW50Q3R4O1xuXHRcdH1cblx0XHRpZiAoc2luZ2xlUGFyZW50ICE9PSBudWxsKSB7IC8vIHBhcmVudHMgYXJlIHNhbWVcblx0XHRcdC8vIHNvcnQgcGF5bG9hZHMgYW5kIHVzZSBzYW1lIHBhcmVudFxuXHRcdFx0dmFyIHBheWxvYWRzID0gWyBhLnJldHVyblN0YXRlLCBiLnJldHVyblN0YXRlIF07XG5cdFx0XHRpZiAoYS5yZXR1cm5TdGF0ZSA+IGIucmV0dXJuU3RhdGUpIHtcblx0XHRcdFx0cGF5bG9hZHNbMF0gPSBiLnJldHVyblN0YXRlO1xuXHRcdFx0XHRwYXlsb2Fkc1sxXSA9IGEucmV0dXJuU3RhdGU7XG5cdFx0XHR9XG5cdFx0XHR2YXIgcGFyZW50cyA9IFsgc2luZ2xlUGFyZW50LCBzaW5nbGVQYXJlbnQgXTtcblx0XHRcdHZhciBhcGMgPSBuZXcgQXJyYXlQcmVkaWN0aW9uQ29udGV4dChwYXJlbnRzLCBwYXlsb2Fkcyk7XG5cdFx0XHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRtZXJnZUNhY2hlLnNldChhLCBiLCBhcGMpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFwYztcblx0XHR9XG5cdFx0Ly8gcGFyZW50cyBkaWZmZXIgYW5kIGNhbid0IG1lcmdlIHRoZW0uIEp1c3QgcGFjayB0b2dldGhlclxuXHRcdC8vIGludG8gYXJyYXk7IGNhbid0IG1lcmdlLlxuXHRcdC8vIGF4ICsgYnkgPSBbYXgsYnldXG5cdFx0dmFyIHBheWxvYWRzID0gWyBhLnJldHVyblN0YXRlLCBiLnJldHVyblN0YXRlIF07XG5cdFx0dmFyIHBhcmVudHMgPSBbIGEucGFyZW50Q3R4LCBiLnBhcmVudEN0eCBdO1xuXHRcdGlmIChhLnJldHVyblN0YXRlID4gYi5yZXR1cm5TdGF0ZSkgeyAvLyBzb3J0IGJ5IHBheWxvYWRcblx0XHRcdHBheWxvYWRzWzBdID0gYi5yZXR1cm5TdGF0ZTtcblx0XHRcdHBheWxvYWRzWzFdID0gYS5yZXR1cm5TdGF0ZTtcblx0XHRcdHBhcmVudHMgPSBbIGIucGFyZW50Q3R4LCBhLnBhcmVudEN0eCBdO1xuXHRcdH1cblx0XHR2YXIgYV8gPSBuZXcgQXJyYXlQcmVkaWN0aW9uQ29udGV4dChwYXJlbnRzLCBwYXlsb2Fkcyk7XG5cdFx0aWYgKG1lcmdlQ2FjaGUgIT09IG51bGwpIHtcblx0XHRcdG1lcmdlQ2FjaGUuc2V0KGEsIGIsIGFfKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFfO1xuXHR9XG59XG5cbi8vXG4vLyBIYW5kbGUgY2FzZSB3aGVyZSBhdCBsZWFzdCBvbmUgb2Yge0Bjb2RlIGF9IG9yIHtAY29kZSBifSBpc1xuLy8ge0BsaW5rIC8vRU1QVFl9LiBJbiB0aGUgZm9sbG93aW5nIGRpYWdyYW1zLCB0aGUgc3ltYm9sIHtAY29kZSAkfSBpcyB1c2VkXG4vLyB0byByZXByZXNlbnQge0BsaW5rIC8vRU1QVFl9LlxuLy9cbi8vIDxoMj5Mb2NhbC1Db250ZXh0IE1lcmdlczwvaDI+XG4vL1xuLy8gPHA+VGhlc2UgbG9jYWwtY29udGV4dCBtZXJnZSBvcGVyYXRpb25zIGFyZSB1c2VkIHdoZW4ge0Bjb2RlIHJvb3RJc1dpbGRjYXJkfVxuLy8gaXMgdHJ1ZS48L3A+XG4vL1xuLy8gPHA+e0BsaW5rIC8vRU1QVFl9IGlzIHN1cGVyc2V0IG9mIGFueSBncmFwaDsgcmV0dXJuIHtAbGluayAvL0VNUFRZfS48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0xvY2FsTWVyZ2VfRW1wdHlSb290LnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD57QGxpbmsgLy9FTVBUWX0gYW5kIGFueXRoaW5nIGlzIHtAY29kZSAvL0VNUFRZfSwgc28gbWVyZ2VkIHBhcmVudCBpc1xuLy8ge0Bjb2RlIC8vRU1QVFl9OyByZXR1cm4gbGVmdCBncmFwaC48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0xvY2FsTWVyZ2VfRW1wdHlQYXJlbnQuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy9cbi8vIDxwPlNwZWNpYWwgY2FzZSBvZiBsYXN0IG1lcmdlIGlmIGxvY2FsIGNvbnRleHQuPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9Mb2NhbE1lcmdlX0RpZmZSb290cy5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gPGgyPkZ1bGwtQ29udGV4dCBNZXJnZXM8L2gyPlxuLy9cbi8vIDxwPlRoZXNlIGZ1bGwtY29udGV4dCBtZXJnZSBvcGVyYXRpb25zIGFyZSB1c2VkIHdoZW4ge0Bjb2RlIHJvb3RJc1dpbGRjYXJkfVxuLy8gaXMgZmFsc2UuPC9wPlxuLy9cbi8vIDxwPjxlbWJlZCBzcmM9XCJpbWFnZXMvRnVsbE1lcmdlX0VtcHR5Um9vdHMuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy9cbi8vIDxwPk11c3Qga2VlcCBhbGwgY29udGV4dHM7IHtAbGluayAvL0VNUFRZfSBpbiBhcnJheSBpcyBhIHNwZWNpYWwgdmFsdWUgKGFuZFxuLy8gbnVsbCBwYXJlbnQpLjxicj5cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvRnVsbE1lcmdlX0VtcHR5Um9vdC5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gPHA+PGVtYmVkIHNyYz1cImltYWdlcy9GdWxsTWVyZ2VfU2FtZVJvb3Quc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy9cbi8vIEBwYXJhbSBhIHRoZSBmaXJzdCB7QGxpbmsgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHR9XG4vLyBAcGFyYW0gYiB0aGUgc2Vjb25kIHtAbGluayBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dH1cbi8vIEBwYXJhbSByb290SXNXaWxkY2FyZCB7QGNvZGUgdHJ1ZX0gaWYgdGhpcyBpcyBhIGxvY2FsLWNvbnRleHQgbWVyZ2UsXG4vLyBvdGhlcndpc2UgZmFsc2UgdG8gaW5kaWNhdGUgYSBmdWxsLWNvbnRleHQgbWVyZ2Vcbi8vIC9cbmZ1bmN0aW9uIG1lcmdlUm9vdChhLCBiLCByb290SXNXaWxkY2FyZCkge1xuXHRpZiAocm9vdElzV2lsZGNhcmQpIHtcblx0XHRpZiAoYSA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFkpIHtcblx0XHRcdHJldHVybiBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWTsgLy8gLy8gKyBiID0vL1xuXHRcdH1cblx0XHRpZiAoYiA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFkpIHtcblx0XHRcdHJldHVybiBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWTsgLy8gYSArLy8gPS8vXG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGlmIChhID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWSAmJiBiID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWSkge1xuXHRcdFx0cmV0dXJuIFByZWRpY3Rpb25Db250ZXh0LkVNUFRZOyAvLyAkICsgJCA9ICRcblx0XHR9IGVsc2UgaWYgKGEgPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZKSB7IC8vICQgKyB4ID0gWyQseF1cblx0XHRcdHZhciBwYXlsb2FkcyA9IFsgYi5yZXR1cm5TdGF0ZSxcblx0XHRcdFx0XHRQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEUgXTtcblx0XHRcdHZhciBwYXJlbnRzID0gWyBiLnBhcmVudEN0eCwgbnVsbCBdO1xuXHRcdFx0cmV0dXJuIG5ldyBBcnJheVByZWRpY3Rpb25Db250ZXh0KHBhcmVudHMsIHBheWxvYWRzKTtcblx0XHR9IGVsc2UgaWYgKGIgPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZKSB7IC8vIHggKyAkID0gWyQseF0gKCQgaXMgYWx3YXlzIGZpcnN0IGlmIHByZXNlbnQpXG5cdFx0XHR2YXIgcGF5bG9hZHMgPSBbIGEucmV0dXJuU3RhdGUsIFByZWRpY3Rpb25Db250ZXh0LkVNUFRZX1JFVFVSTl9TVEFURSBdO1xuXHRcdFx0dmFyIHBhcmVudHMgPSBbIGEucGFyZW50Q3R4LCBudWxsIF07XG5cdFx0XHRyZXR1cm4gbmV3IEFycmF5UHJlZGljdGlvbkNvbnRleHQocGFyZW50cywgcGF5bG9hZHMpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbnVsbDtcbn1cblxuLy9cbi8vIE1lcmdlIHR3byB7QGxpbmsgQXJyYXlQcmVkaWN0aW9uQ29udGV4dH0gaW5zdGFuY2VzLlxuLy9cbi8vIDxwPkRpZmZlcmVudCB0b3BzLCBkaWZmZXJlbnQgcGFyZW50cy48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0FycmF5TWVyZ2VfRGlmZlRvcERpZmZQYXIuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy9cbi8vIDxwPlNoYXJlZCB0b3AsIHNhbWUgcGFyZW50cy48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0FycmF5TWVyZ2VfU2hhcmVUb3BTYW1lUGFyLnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5TaGFyZWQgdG9wLCBkaWZmZXJlbnQgcGFyZW50cy48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0FycmF5TWVyZ2VfU2hhcmVUb3BEaWZmUGFyLnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5TaGFyZWQgdG9wLCBhbGwgc2hhcmVkIHBhcmVudHMuPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9BcnJheU1lcmdlX1NoYXJlVG9wU2hhcmVQYXIuc3ZnXCJcbi8vIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5FcXVhbCB0b3BzLCBtZXJnZSBwYXJlbnRzIGFuZCByZWR1Y2UgdG9wIHRvXG4vLyB7QGxpbmsgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHR9Ljxicj5cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvQXJyYXlNZXJnZV9FcXVhbFRvcC5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vLyAvXG5mdW5jdGlvbiBtZXJnZUFycmF5cyhhLCBiLCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSkge1xuXHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdHZhciBwcmV2aW91cyA9IG1lcmdlQ2FjaGUuZ2V0KGEsIGIpO1xuXHRcdGlmIChwcmV2aW91cyAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIHByZXZpb3VzO1xuXHRcdH1cblx0XHRwcmV2aW91cyA9IG1lcmdlQ2FjaGUuZ2V0KGIsIGEpO1xuXHRcdGlmIChwcmV2aW91cyAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIHByZXZpb3VzO1xuXHRcdH1cblx0fVxuXHQvLyBtZXJnZSBzb3J0ZWQgcGF5bG9hZHMgYSArIGIgPT4gTVxuXHR2YXIgaSA9IDA7IC8vIHdhbGtzIGFcblx0dmFyIGogPSAwOyAvLyB3YWxrcyBiXG5cdHZhciBrID0gMDsgLy8gd2Fsa3MgdGFyZ2V0IE0gYXJyYXlcblxuXHR2YXIgbWVyZ2VkUmV0dXJuU3RhdGVzID0gW107XG5cdHZhciBtZXJnZWRQYXJlbnRzID0gW107XG5cdC8vIHdhbGsgYW5kIG1lcmdlIHRvIHlpZWxkIG1lcmdlZFBhcmVudHMsIG1lcmdlZFJldHVyblN0YXRlc1xuXHR3aGlsZSAoaSA8IGEucmV0dXJuU3RhdGVzLmxlbmd0aCAmJiBqIDwgYi5yZXR1cm5TdGF0ZXMubGVuZ3RoKSB7XG5cdFx0dmFyIGFfcGFyZW50ID0gYS5wYXJlbnRzW2ldO1xuXHRcdHZhciBiX3BhcmVudCA9IGIucGFyZW50c1tqXTtcblx0XHRpZiAoYS5yZXR1cm5TdGF0ZXNbaV0gPT09IGIucmV0dXJuU3RhdGVzW2pdKSB7XG5cdFx0XHQvLyBzYW1lIHBheWxvYWQgKHN0YWNrIHRvcHMgYXJlIGVxdWFsKSwgbXVzdCB5aWVsZCBtZXJnZWQgc2luZ2xldG9uXG5cdFx0XHR2YXIgcGF5bG9hZCA9IGEucmV0dXJuU3RhdGVzW2ldO1xuXHRcdFx0Ly8gJCskID0gJFxuXHRcdFx0dmFyIGJvdGhEb2xsYXJzID0gcGF5bG9hZCA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFlfUkVUVVJOX1NUQVRFICYmXG5cdFx0XHRcdFx0YV9wYXJlbnQgPT09IG51bGwgJiYgYl9wYXJlbnQgPT09IG51bGw7XG5cdFx0XHR2YXIgYXhfYXggPSAoYV9wYXJlbnQgIT09IG51bGwgJiYgYl9wYXJlbnQgIT09IG51bGwgJiYgYV9wYXJlbnQgPT09IGJfcGFyZW50KTsgLy8gYXgrYXhcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAtPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGF4XG5cdFx0XHRpZiAoYm90aERvbGxhcnMgfHwgYXhfYXgpIHtcblx0XHRcdFx0bWVyZ2VkUGFyZW50c1trXSA9IGFfcGFyZW50OyAvLyBjaG9vc2UgbGVmdFxuXHRcdFx0XHRtZXJnZWRSZXR1cm5TdGF0ZXNba10gPSBwYXlsb2FkO1xuXHRcdFx0fSBlbHNlIHsgLy8gYXgrYXkgLT4gYSdbeCx5XVxuXHRcdFx0XHR2YXIgbWVyZ2VkUGFyZW50ID0gbWVyZ2UoYV9wYXJlbnQsIGJfcGFyZW50LCByb290SXNXaWxkY2FyZCwgbWVyZ2VDYWNoZSk7XG5cdFx0XHRcdG1lcmdlZFBhcmVudHNba10gPSBtZXJnZWRQYXJlbnQ7XG5cdFx0XHRcdG1lcmdlZFJldHVyblN0YXRlc1trXSA9IHBheWxvYWQ7XG5cdFx0XHR9XG5cdFx0XHRpICs9IDE7IC8vIGhvcCBvdmVyIGxlZnQgb25lIGFzIHVzdWFsXG5cdFx0XHRqICs9IDE7IC8vIGJ1dCBhbHNvIHNraXAgb25lIGluIHJpZ2h0IHNpZGUgc2luY2Ugd2UgbWVyZ2Vcblx0XHR9IGVsc2UgaWYgKGEucmV0dXJuU3RhdGVzW2ldIDwgYi5yZXR1cm5TdGF0ZXNbal0pIHsgLy8gY29weSBhW2ldIHRvIE1cblx0XHRcdG1lcmdlZFBhcmVudHNba10gPSBhX3BhcmVudDtcblx0XHRcdG1lcmdlZFJldHVyblN0YXRlc1trXSA9IGEucmV0dXJuU3RhdGVzW2ldO1xuXHRcdFx0aSArPSAxO1xuXHRcdH0gZWxzZSB7IC8vIGIgPiBhLCBjb3B5IGJbal0gdG8gTVxuXHRcdFx0bWVyZ2VkUGFyZW50c1trXSA9IGJfcGFyZW50O1xuXHRcdFx0bWVyZ2VkUmV0dXJuU3RhdGVzW2tdID0gYi5yZXR1cm5TdGF0ZXNbal07XG5cdFx0XHRqICs9IDE7XG5cdFx0fVxuXHRcdGsgKz0gMTtcblx0fVxuXHQvLyBjb3B5IG92ZXIgYW55IHBheWxvYWRzIHJlbWFpbmluZyBpbiBlaXRoZXIgYXJyYXlcblx0aWYgKGkgPCBhLnJldHVyblN0YXRlcy5sZW5ndGgpIHtcblx0XHRmb3IgKHZhciBwID0gaTsgcCA8IGEucmV0dXJuU3RhdGVzLmxlbmd0aDsgcCsrKSB7XG5cdFx0XHRtZXJnZWRQYXJlbnRzW2tdID0gYS5wYXJlbnRzW3BdO1xuXHRcdFx0bWVyZ2VkUmV0dXJuU3RhdGVzW2tdID0gYS5yZXR1cm5TdGF0ZXNbcF07XG5cdFx0XHRrICs9IDE7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGZvciAodmFyIHAgPSBqOyBwIDwgYi5yZXR1cm5TdGF0ZXMubGVuZ3RoOyBwKyspIHtcblx0XHRcdG1lcmdlZFBhcmVudHNba10gPSBiLnBhcmVudHNbcF07XG5cdFx0XHRtZXJnZWRSZXR1cm5TdGF0ZXNba10gPSBiLnJldHVyblN0YXRlc1twXTtcblx0XHRcdGsgKz0gMTtcblx0XHR9XG5cdH1cblx0Ly8gdHJpbSBtZXJnZWQgaWYgd2UgY29tYmluZWQgYSBmZXcgdGhhdCBoYWQgc2FtZSBzdGFjayB0b3BzXG5cdGlmIChrIDwgbWVyZ2VkUGFyZW50cy5sZW5ndGgpIHsgLy8gd3JpdGUgaW5kZXggPCBsYXN0IHBvc2l0aW9uOyB0cmltXG5cdFx0aWYgKGsgPT09IDEpIHsgLy8gZm9yIGp1c3Qgb25lIG1lcmdlZCBlbGVtZW50LCByZXR1cm4gc2luZ2xldG9uIHRvcFxuXHRcdFx0dmFyIGFfID0gU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQuY3JlYXRlKG1lcmdlZFBhcmVudHNbMF0sXG5cdFx0XHRcdFx0bWVyZ2VkUmV0dXJuU3RhdGVzWzBdKTtcblx0XHRcdGlmIChtZXJnZUNhY2hlICE9PSBudWxsKSB7XG5cdFx0XHRcdG1lcmdlQ2FjaGUuc2V0KGEsIGIsIGFfKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhXztcblx0XHR9XG5cdFx0bWVyZ2VkUGFyZW50cyA9IG1lcmdlZFBhcmVudHMuc2xpY2UoMCwgayk7XG5cdFx0bWVyZ2VkUmV0dXJuU3RhdGVzID0gbWVyZ2VkUmV0dXJuU3RhdGVzLnNsaWNlKDAsIGspO1xuXHR9XG5cblx0dmFyIE0gPSBuZXcgQXJyYXlQcmVkaWN0aW9uQ29udGV4dChtZXJnZWRQYXJlbnRzLCBtZXJnZWRSZXR1cm5TdGF0ZXMpO1xuXG5cdC8vIGlmIHdlIGNyZWF0ZWQgc2FtZSBhcnJheSBhcyBhIG9yIGIsIHJldHVybiB0aGF0IGluc3RlYWRcblx0Ly8gVE9ETzogdHJhY2sgd2hldGhlciB0aGlzIGlzIHBvc3NpYmxlIGFib3ZlIGR1cmluZyBtZXJnZSBzb3J0IGZvciBzcGVlZFxuXHRpZiAoTSA9PT0gYSkge1xuXHRcdGlmIChtZXJnZUNhY2hlICE9PSBudWxsKSB7XG5cdFx0XHRtZXJnZUNhY2hlLnNldChhLCBiLCBhKTtcblx0XHR9XG5cdFx0cmV0dXJuIGE7XG5cdH1cblx0aWYgKE0gPT09IGIpIHtcblx0XHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdFx0bWVyZ2VDYWNoZS5zZXQoYSwgYiwgYik7XG5cdFx0fVxuXHRcdHJldHVybiBiO1xuXHR9XG5cdGNvbWJpbmVDb21tb25QYXJlbnRzKG1lcmdlZFBhcmVudHMpO1xuXG5cdGlmIChtZXJnZUNhY2hlICE9PSBudWxsKSB7XG5cdFx0bWVyZ2VDYWNoZS5zZXQoYSwgYiwgTSk7XG5cdH1cblx0cmV0dXJuIE07XG59XG5cbi8vXG4vLyBNYWtlIHBhc3Mgb3ZlciBhbGwgPGVtPk08L2VtPiB7QGNvZGUgcGFyZW50c307IG1lcmdlIGFueSB7QGNvZGUgZXF1YWxzKCl9XG4vLyBvbmVzLlxuLy8gL1xuZnVuY3Rpb24gY29tYmluZUNvbW1vblBhcmVudHMocGFyZW50cykge1xuXHR2YXIgdW5pcXVlUGFyZW50cyA9IHt9O1xuXG5cdGZvciAodmFyIHAgPSAwOyBwIDwgcGFyZW50cy5sZW5ndGg7IHArKykge1xuXHRcdHZhciBwYXJlbnQgPSBwYXJlbnRzW3BdO1xuXHRcdGlmICghKHBhcmVudCBpbiB1bmlxdWVQYXJlbnRzKSkge1xuXHRcdFx0dW5pcXVlUGFyZW50c1twYXJlbnRdID0gcGFyZW50O1xuXHRcdH1cblx0fVxuXHRmb3IgKHZhciBxID0gMDsgcSA8IHBhcmVudHMubGVuZ3RoOyBxKyspIHtcblx0XHRwYXJlbnRzW3FdID0gdW5pcXVlUGFyZW50c1twYXJlbnRzW3FdXTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRDYWNoZWRQcmVkaWN0aW9uQ29udGV4dChjb250ZXh0LCBjb250ZXh0Q2FjaGUsIHZpc2l0ZWQpIHtcblx0aWYgKGNvbnRleHQuaXNFbXB0eSgpKSB7XG5cdFx0cmV0dXJuIGNvbnRleHQ7XG5cdH1cblx0dmFyIGV4aXN0aW5nID0gdmlzaXRlZFtjb250ZXh0XSB8fCBudWxsO1xuXHRpZiAoZXhpc3RpbmcgIT09IG51bGwpIHtcblx0XHRyZXR1cm4gZXhpc3Rpbmc7XG5cdH1cblx0ZXhpc3RpbmcgPSBjb250ZXh0Q2FjaGUuZ2V0KGNvbnRleHQpO1xuXHRpZiAoZXhpc3RpbmcgIT09IG51bGwpIHtcblx0XHR2aXNpdGVkW2NvbnRleHRdID0gZXhpc3Rpbmc7XG5cdFx0cmV0dXJuIGV4aXN0aW5nO1xuXHR9XG5cdHZhciBjaGFuZ2VkID0gZmFsc2U7XG5cdHZhciBwYXJlbnRzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgcGFyZW50cy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBwYXJlbnQgPSBnZXRDYWNoZWRQcmVkaWN0aW9uQ29udGV4dChjb250ZXh0LmdldFBhcmVudChpKSwgY29udGV4dENhY2hlLCB2aXNpdGVkKTtcblx0XHRpZiAoY2hhbmdlZCB8fCBwYXJlbnQgIT09IGNvbnRleHQuZ2V0UGFyZW50KGkpKSB7XG5cdFx0XHRpZiAoIWNoYW5nZWQpIHtcblx0XHRcdFx0cGFyZW50cyA9IFtdO1xuXHRcdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGNvbnRleHQubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRwYXJlbnRzW2pdID0gY29udGV4dC5nZXRQYXJlbnQoaik7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y2hhbmdlZCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0XHRwYXJlbnRzW2ldID0gcGFyZW50O1xuXHRcdH1cblx0fVxuXHRpZiAoIWNoYW5nZWQpIHtcblx0XHRjb250ZXh0Q2FjaGUuYWRkKGNvbnRleHQpO1xuXHRcdHZpc2l0ZWRbY29udGV4dF0gPSBjb250ZXh0O1xuXHRcdHJldHVybiBjb250ZXh0O1xuXHR9XG5cdHZhciB1cGRhdGVkID0gbnVsbDtcblx0aWYgKHBhcmVudHMubGVuZ3RoID09PSAwKSB7XG5cdFx0dXBkYXRlZCA9IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZO1xuXHR9IGVsc2UgaWYgKHBhcmVudHMubGVuZ3RoID09PSAxKSB7XG5cdFx0dXBkYXRlZCA9IFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LmNyZWF0ZShwYXJlbnRzWzBdLCBjb250ZXh0XG5cdFx0XHRcdC5nZXRSZXR1cm5TdGF0ZSgwKSk7XG5cdH0gZWxzZSB7XG5cdFx0dXBkYXRlZCA9IG5ldyBBcnJheVByZWRpY3Rpb25Db250ZXh0KHBhcmVudHMsIGNvbnRleHQucmV0dXJuU3RhdGVzKTtcblx0fVxuXHRjb250ZXh0Q2FjaGUuYWRkKHVwZGF0ZWQpO1xuXHR2aXNpdGVkW3VwZGF0ZWRdID0gdXBkYXRlZDtcblx0dmlzaXRlZFtjb250ZXh0XSA9IHVwZGF0ZWQ7XG5cblx0cmV0dXJuIHVwZGF0ZWQ7XG59XG5cbi8vIHRlcidzIHJlY3Vyc2l2ZSB2ZXJzaW9uIG9mIFNhbSdzIGdldEFsbE5vZGVzKClcbmZ1bmN0aW9uIGdldEFsbENvbnRleHROb2Rlcyhjb250ZXh0LCBub2RlcywgdmlzaXRlZCkge1xuXHRpZiAobm9kZXMgPT09IG51bGwpIHtcblx0XHRub2RlcyA9IFtdO1xuXHRcdHJldHVybiBnZXRBbGxDb250ZXh0Tm9kZXMoY29udGV4dCwgbm9kZXMsIHZpc2l0ZWQpO1xuXHR9IGVsc2UgaWYgKHZpc2l0ZWQgPT09IG51bGwpIHtcblx0XHR2aXNpdGVkID0ge307XG5cdFx0cmV0dXJuIGdldEFsbENvbnRleHROb2Rlcyhjb250ZXh0LCBub2RlcywgdmlzaXRlZCk7XG5cdH0gZWxzZSB7XG5cdFx0aWYgKGNvbnRleHQgPT09IG51bGwgfHwgdmlzaXRlZFtjb250ZXh0XSAhPT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIG5vZGVzO1xuXHRcdH1cblx0XHR2aXNpdGVkW2NvbnRleHRdID0gY29udGV4dDtcblx0XHRub2Rlcy5wdXNoKGNvbnRleHQpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgY29udGV4dC5sZW5ndGg7IGkrKykge1xuXHRcdFx0Z2V0QWxsQ29udGV4dE5vZGVzKGNvbnRleHQuZ2V0UGFyZW50KGkpLCBub2RlcywgdmlzaXRlZCk7XG5cdFx0fVxuXHRcdHJldHVybiBub2Rlcztcblx0fVxufVxuXG5leHBvcnRzLm1lcmdlID0gbWVyZ2U7XG5leHBvcnRzLlByZWRpY3Rpb25Db250ZXh0ID0gUHJlZGljdGlvbkNvbnRleHQ7XG5leHBvcnRzLlByZWRpY3Rpb25Db250ZXh0Q2FjaGUgPSBQcmVkaWN0aW9uQ29udGV4dENhY2hlO1xuZXhwb3J0cy5TaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dCA9IFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0O1xuZXhwb3J0cy5wcmVkaWN0aW9uQ29udGV4dEZyb21SdWxlQ29udGV4dCA9IHByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0O1xuZXhwb3J0cy5nZXRDYWNoZWRQcmVkaWN0aW9uQ29udGV4dCA9IGdldENhY2hlZFByZWRpY3Rpb25Db250ZXh0O1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vXG5cbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vVG9rZW4nKS5Ub2tlbjtcbnZhciBDb25zb2xlRXJyb3JMaXN0ZW5lciA9IHJlcXVpcmUoJy4vZXJyb3IvRXJyb3JMaXN0ZW5lcicpLkNvbnNvbGVFcnJvckxpc3RlbmVyO1xudmFyIFByb3h5RXJyb3JMaXN0ZW5lciA9IHJlcXVpcmUoJy4vZXJyb3IvRXJyb3JMaXN0ZW5lcicpLlByb3h5RXJyb3JMaXN0ZW5lcjtcblxuZnVuY3Rpb24gUmVjb2duaXplcigpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSBbIENvbnNvbGVFcnJvckxpc3RlbmVyLklOU1RBTkNFIF07XG4gICAgdGhpcy5faW50ZXJwID0gbnVsbDtcbiAgICB0aGlzLl9zdGF0ZU51bWJlciA9IC0xO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5SZWNvZ25pemVyLnRva2VuVHlwZU1hcENhY2hlID0ge307XG5SZWNvZ25pemVyLnJ1bGVJbmRleE1hcENhY2hlID0ge307XG5cblxuUmVjb2duaXplci5wcm90b3R5cGUuY2hlY2tWZXJzaW9uID0gZnVuY3Rpb24odG9vbFZlcnNpb24pIHtcbiAgICB2YXIgcnVudGltZVZlcnNpb24gPSBcIjQuNy4yXCI7XG4gICAgaWYgKHJ1bnRpbWVWZXJzaW9uIT09dG9vbFZlcnNpb24pIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJBTlRMUiBydW50aW1lIGFuZCBnZW5lcmF0ZWQgY29kZSB2ZXJzaW9ucyBkaXNhZ3JlZTogXCIrcnVudGltZVZlcnNpb24rXCIhPVwiK3Rvb2xWZXJzaW9uKTtcbiAgICB9XG59O1xuXG5SZWNvZ25pemVyLnByb3RvdHlwZS5hZGRFcnJvckxpc3RlbmVyID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG59O1xuXG5SZWNvZ25pemVyLnByb3RvdHlwZS5yZW1vdmVFcnJvckxpc3RlbmVycyA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpc3RlbmVycyA9IFtdO1xufTtcblxuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG9rZW5UeXBlTWFwID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHRva2VuTmFtZXMgPSB0aGlzLmdldFRva2VuTmFtZXMoKTtcbiAgICBpZiAodG9rZW5OYW1lcz09PW51bGwpIHtcbiAgICAgICAgdGhyb3coXCJUaGUgY3VycmVudCByZWNvZ25pemVyIGRvZXMgbm90IHByb3ZpZGUgYSBsaXN0IG9mIHRva2VuIG5hbWVzLlwiKTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMudG9rZW5UeXBlTWFwQ2FjaGVbdG9rZW5OYW1lc107XG4gICAgaWYocmVzdWx0PT09dW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdCA9IHRva2VuTmFtZXMucmVkdWNlKGZ1bmN0aW9uKG8sIGssIGkpIHsgb1trXSA9IGk7IH0pO1xuICAgICAgICByZXN1bHQuRU9GID0gVG9rZW4uRU9GO1xuICAgICAgICB0aGlzLnRva2VuVHlwZU1hcENhY2hlW3Rva2VuTmFtZXNdID0gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLy8gR2V0IGEgbWFwIGZyb20gcnVsZSBuYW1lcyB0byBydWxlIGluZGV4ZXMuXG4vL1xuLy8gPHA+VXNlZCBmb3IgWFBhdGggYW5kIHRyZWUgcGF0dGVybiBjb21waWxhdGlvbi48L3A+XG4vL1xuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0UnVsZUluZGV4TWFwID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJ1bGVOYW1lcyA9IHRoaXMucnVsZU5hbWVzO1xuICAgIGlmIChydWxlTmFtZXM9PT1udWxsKSB7XG4gICAgICAgIHRocm93KFwiVGhlIGN1cnJlbnQgcmVjb2duaXplciBkb2VzIG5vdCBwcm92aWRlIGEgbGlzdCBvZiBydWxlIG5hbWVzLlwiKTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IHRoaXMucnVsZUluZGV4TWFwQ2FjaGVbcnVsZU5hbWVzXTtcbiAgICBpZihyZXN1bHQ9PT11bmRlZmluZWQpIHtcbiAgICAgICAgcmVzdWx0ID0gcnVsZU5hbWVzLnJlZHVjZShmdW5jdGlvbihvLCBrLCBpKSB7IG9ba10gPSBpOyB9KTtcbiAgICAgICAgdGhpcy5ydWxlSW5kZXhNYXBDYWNoZVtydWxlTmFtZXNdID0gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG9rZW5UeXBlID0gZnVuY3Rpb24odG9rZW5OYW1lKSB7XG4gICAgdmFyIHR0eXBlID0gdGhpcy5nZXRUb2tlblR5cGVNYXAoKVt0b2tlbk5hbWVdO1xuICAgIGlmICh0dHlwZSAhPT11bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHR0eXBlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBUb2tlbi5JTlZBTElEX1RZUEU7XG4gICAgfVxufTtcblxuXG4vLyBXaGF0IGlzIHRoZSBlcnJvciBoZWFkZXIsIG5vcm1hbGx5IGxpbmUvY2hhcmFjdGVyIHBvc2l0aW9uIGluZm9ybWF0aW9uPy8vXG5SZWNvZ25pemVyLnByb3RvdHlwZS5nZXRFcnJvckhlYWRlciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbGluZSA9IGUuZ2V0T2ZmZW5kaW5nVG9rZW4oKS5saW5lO1xuICAgIHZhciBjb2x1bW4gPSBlLmdldE9mZmVuZGluZ1Rva2VuKCkuY29sdW1uO1xuICAgIHJldHVybiBcImxpbmUgXCIgKyBsaW5lICsgXCI6XCIgKyBjb2x1bW47XG59O1xuXG5cbi8vIEhvdyBzaG91bGQgYSB0b2tlbiBiZSBkaXNwbGF5ZWQgaW4gYW4gZXJyb3IgbWVzc2FnZT8gVGhlIGRlZmF1bHRcbi8vICBpcyB0byBkaXNwbGF5IGp1c3QgdGhlIHRleHQsIGJ1dCBkdXJpbmcgZGV2ZWxvcG1lbnQgeW91IG1pZ2h0XG4vLyAgd2FudCB0byBoYXZlIGEgbG90IG9mIGluZm9ybWF0aW9uIHNwaXQgb3V0LiAgT3ZlcnJpZGUgaW4gdGhhdCBjYXNlXG4vLyAgdG8gdXNlIHQudG9TdHJpbmcoKSAod2hpY2gsIGZvciBDb21tb25Ub2tlbiwgZHVtcHMgZXZlcnl0aGluZyBhYm91dFxuLy8gIHRoZSB0b2tlbikuIFRoaXMgaXMgYmV0dGVyIHRoYW4gZm9yY2luZyB5b3UgdG8gb3ZlcnJpZGUgYSBtZXRob2QgaW5cbi8vICB5b3VyIHRva2VuIG9iamVjdHMgYmVjYXVzZSB5b3UgZG9uJ3QgaGF2ZSB0byBnbyBtb2RpZnkgeW91ciBsZXhlclxuLy8gIHNvIHRoYXQgaXQgY3JlYXRlcyBhIG5ldyBKYXZhIHR5cGUuXG4vL1xuLy8gQGRlcHJlY2F0ZWQgVGhpcyBtZXRob2QgaXMgbm90IGNhbGxlZCBieSB0aGUgQU5UTFIgNCBSdW50aW1lLiBTcGVjaWZpY1xuLy8gaW1wbGVtZW50YXRpb25zIG9mIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3l9IG1heSBwcm92aWRlIGEgc2ltaWxhclxuLy8gZmVhdHVyZSB3aGVuIG5lY2Vzc2FyeS4gRm9yIGV4YW1wbGUsIHNlZVxuLy8ge0BsaW5rIERlZmF1bHRFcnJvclN0cmF0ZWd5Ly9nZXRUb2tlbkVycm9yRGlzcGxheX0uXG4vL1xuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0VG9rZW5FcnJvckRpc3BsYXkgPSBmdW5jdGlvbih0KSB7XG4gICAgaWYgKHQ9PT1udWxsKSB7XG4gICAgICAgIHJldHVybiBcIjxubyB0b2tlbj5cIjtcbiAgICB9XG4gICAgdmFyIHMgPSB0LnRleHQ7XG4gICAgaWYgKHM9PT1udWxsKSB7XG4gICAgICAgIGlmICh0LnR5cGU9PT1Ub2tlbi5FT0YpIHtcbiAgICAgICAgICAgIHMgPSBcIjxFT0Y+XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzID0gXCI8XCIgKyB0LnR5cGUgKyBcIj5cIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzID0gcy5yZXBsYWNlKFwiXFxuXCIsXCJcXFxcblwiKS5yZXBsYWNlKFwiXFxyXCIsXCJcXFxcclwiKS5yZXBsYWNlKFwiXFx0XCIsXCJcXFxcdFwiKTtcbiAgICByZXR1cm4gXCInXCIgKyBzICsgXCInXCI7XG59O1xuXG5SZWNvZ25pemVyLnByb3RvdHlwZS5nZXRFcnJvckxpc3RlbmVyRGlzcGF0Y2ggPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IFByb3h5RXJyb3JMaXN0ZW5lcih0aGlzLl9saXN0ZW5lcnMpO1xufTtcblxuLy8gc3ViY2xhc3MgbmVlZHMgdG8gb3ZlcnJpZGUgdGhlc2UgaWYgdGhlcmUgYXJlIHNlbXByZWRzIG9yIGFjdGlvbnNcbi8vIHRoYXQgdGhlIEFUTiBpbnRlcnAgbmVlZHMgdG8gZXhlY3V0ZVxuUmVjb2duaXplci5wcm90b3R5cGUuc2VtcHJlZCA9IGZ1bmN0aW9uKGxvY2FsY3R4LCBydWxlSW5kZXgsIGFjdGlvbkluZGV4KSB7XG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5SZWNvZ25pemVyLnByb3RvdHlwZS5wcmVjcHJlZCA9IGZ1bmN0aW9uKGxvY2FsY3R4ICwgcHJlY2VkZW5jZSkge1xuICAgIHJldHVybiB0cnVlO1xufTtcblxuLy9JbmRpY2F0ZSB0aGF0IHRoZSByZWNvZ25pemVyIGhhcyBjaGFuZ2VkIGludGVybmFsIHN0YXRlIHRoYXQgaXNcbi8vY29uc2lzdGVudCB3aXRoIHRoZSBBVE4gc3RhdGUgcGFzc2VkIGluLiAgVGhpcyB3YXkgd2UgYWx3YXlzIGtub3dcbi8vd2hlcmUgd2UgYXJlIGluIHRoZSBBVE4gYXMgdGhlIHBhcnNlciBnb2VzIGFsb25nLiBUaGUgcnVsZVxuLy9jb250ZXh0IG9iamVjdHMgZm9ybSBhIHN0YWNrIHRoYXQgbGV0cyB1cyBzZWUgdGhlIHN0YWNrIG9mXG4vL2ludm9raW5nIHJ1bGVzLiBDb21iaW5lIHRoaXMgYW5kIHdlIGhhdmUgY29tcGxldGUgQVROXG4vL2NvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24uXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWNvZ25pemVyLnByb3RvdHlwZSwgXCJzdGF0ZVwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl9zdGF0ZU51bWJlcjtcblx0fSxcblx0c2V0IDogZnVuY3Rpb24oc3RhdGUpIHtcblx0XHR0aGlzLl9zdGF0ZU51bWJlciA9IHN0YXRlO1xuXHR9XG59KTtcblxuXG5leHBvcnRzLlJlY29nbml6ZXIgPSBSZWNvZ25pemVyO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy8vXG5cbi8vICBBIHJ1bGUgY29udGV4dCBpcyBhIHJlY29yZCBvZiBhIHNpbmdsZSBydWxlIGludm9jYXRpb24uIEl0IGtub3dzXG4vLyAgd2hpY2ggY29udGV4dCBpbnZva2VkIGl0LCBpZiBhbnkuIElmIHRoZXJlIGlzIG5vIHBhcmVudCBjb250ZXh0LCB0aGVuXG4vLyAgbmF0dXJhbGx5IHRoZSBpbnZva2luZyBzdGF0ZSBpcyBub3QgdmFsaWQuICBUaGUgcGFyZW50IGxpbmtcbi8vICBwcm92aWRlcyBhIGNoYWluIHVwd2FyZHMgZnJvbSB0aGUgY3VycmVudCBydWxlIGludm9jYXRpb24gdG8gdGhlIHJvb3Rcbi8vICBvZiB0aGUgaW52b2NhdGlvbiB0cmVlLCBmb3JtaW5nIGEgc3RhY2suIFdlIGFjdHVhbGx5IGNhcnJ5IG5vXG4vLyAgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJ1bGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29udGV4dCAoZXhjZXB0XG4vLyAgd2hlbiBwYXJzaW5nKS4gV2Uga2VlcCBvbmx5IHRoZSBzdGF0ZSBudW1iZXIgb2YgdGhlIGludm9raW5nIHN0YXRlIGZyb21cbi8vICB0aGUgQVROIHN1Ym1hY2hpbmUgdGhhdCBpbnZva2VkIHRoaXMuIENvbnRyYXN0IHRoaXMgd2l0aCB0aGUgc1xuLy8gIHBvaW50ZXIgaW5zaWRlIFBhcnNlclJ1bGVDb250ZXh0IHRoYXQgdHJhY2tzIHRoZSBjdXJyZW50IHN0YXRlXG4vLyAgYmVpbmcgXCJleGVjdXRlZFwiIGZvciB0aGUgY3VycmVudCBydWxlLlxuLy9cbi8vICBUaGUgcGFyZW50IGNvbnRleHRzIGFyZSB1c2VmdWwgZm9yIGNvbXB1dGluZyBsb29rYWhlYWQgc2V0cyBhbmRcbi8vICBnZXR0aW5nIGVycm9yIGluZm9ybWF0aW9uLlxuLy9cbi8vICBUaGVzZSBvYmplY3RzIGFyZSB1c2VkIGR1cmluZyBwYXJzaW5nIGFuZCBwcmVkaWN0aW9uLlxuLy8gIEZvciB0aGUgc3BlY2lhbCBjYXNlIG9mIHBhcnNlcnMsIHdlIHVzZSB0aGUgc3ViY2xhc3Ncbi8vICBQYXJzZXJSdWxlQ29udGV4dC5cbi8vXG4vLyAgQHNlZSBQYXJzZXJSdWxlQ29udGV4dFxuLy8vXG5cbnZhciBSdWxlTm9kZSA9IHJlcXVpcmUoJy4vdHJlZS9UcmVlJykuUnVsZU5vZGU7XG52YXIgSU5WQUxJRF9JTlRFUlZBTCA9IHJlcXVpcmUoJy4vdHJlZS9UcmVlJykuSU5WQUxJRF9JTlRFUlZBTDtcbnZhciBJTlZBTElEX0FMVF9OVU1CRVIgPSByZXF1aXJlKCcuL2F0bi9BVE4nKS5JTlZBTElEX0FMVF9OVU1CRVI7XG5cbmZ1bmN0aW9uIFJ1bGVDb250ZXh0KHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRSdWxlTm9kZS5jYWxsKHRoaXMpO1xuXHQvLyBXaGF0IGNvbnRleHQgaW52b2tlZCB0aGlzIHJ1bGU/XG5cdHRoaXMucGFyZW50Q3R4ID0gcGFyZW50IHx8IG51bGw7XG5cdC8vIFdoYXQgc3RhdGUgaW52b2tlZCB0aGUgcnVsZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb250ZXh0P1xuXHQvLyBUaGUgXCJyZXR1cm4gYWRkcmVzc1wiIGlzIHRoZSBmb2xsb3dTdGF0ZSBvZiBpbnZva2luZ1N0YXRlXG5cdC8vIElmIHBhcmVudCBpcyBudWxsLCB0aGlzIHNob3VsZCBiZSAtMS5cblx0dGhpcy5pbnZva2luZ1N0YXRlID0gaW52b2tpbmdTdGF0ZSB8fCAtMTtcblx0cmV0dXJuIHRoaXM7XG59XG5cblJ1bGVDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUnVsZU5vZGUucHJvdG90eXBlKTtcblJ1bGVDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJ1bGVDb250ZXh0O1xuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZGVwdGggPSBmdW5jdGlvbigpIHtcblx0dmFyIG4gPSAwO1xuXHR2YXIgcCA9IHRoaXM7XG5cdHdoaWxlIChwICE9PSBudWxsKSB7XG5cdFx0cCA9IHAucGFyZW50Q3R4O1xuXHRcdG4gKz0gMTtcblx0fVxuXHRyZXR1cm4gbjtcbn07XG5cbi8vIEEgY29udGV4dCBpcyBlbXB0eSBpZiB0aGVyZSBpcyBubyBpbnZva2luZyBzdGF0ZTsgbWVhbmluZyBub2JvZHkgY2FsbFxuLy8gY3VycmVudCBjb250ZXh0LlxuUnVsZUNvbnRleHQucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuaW52b2tpbmdTdGF0ZSA9PT0gLTE7XG59O1xuXG4vLyBzYXRpc2Z5IHRoZSBQYXJzZVRyZWUgLyBTeW50YXhUcmVlIGludGVyZmFjZVxuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0U291cmNlSW50ZXJ2YWwgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIElOVkFMSURfSU5URVJWQUw7XG59O1xuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0UnVsZUNvbnRleHQgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0UGF5bG9hZCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcztcbn07XG5cbi8vIFJldHVybiB0aGUgY29tYmluZWQgdGV4dCBvZiBhbGwgY2hpbGQgbm9kZXMuIFRoaXMgbWV0aG9kIG9ubHkgY29uc2lkZXJzXG4vLyB0b2tlbnMgd2hpY2ggaGF2ZSBiZWVuIGFkZGVkIHRvIHRoZSBwYXJzZSB0cmVlLlxuLy8gPHA+XG4vLyBTaW5jZSB0b2tlbnMgb24gaGlkZGVuIGNoYW5uZWxzIChlLmcuIHdoaXRlc3BhY2Ugb3IgY29tbWVudHMpIGFyZSBub3Rcbi8vIGFkZGVkIHRvIHRoZSBwYXJzZSB0cmVlcywgdGhleSB3aWxsIG5vdCBhcHBlYXIgaW4gdGhlIG91dHB1dCBvZiB0aGlzXG4vLyBtZXRob2QuXG4vLyAvXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5nZXRDaGlsZENvdW50KCkgPT09IDApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5jaGlsZHJlbi5tYXAoZnVuY3Rpb24oY2hpbGQpIHtcblx0XHRcdHJldHVybiBjaGlsZC5nZXRUZXh0KCk7XG5cdFx0fSkuam9pbihcIlwiKTtcblx0fVxufTtcblxuLy8gRm9yIHJ1bGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcGFyc2UgdHJlZSBpbnRlcm5hbCBub2RlLCByZXR1cm5cbi8vIHRoZSBvdXRlciBhbHRlcm5hdGl2ZSBudW1iZXIgdXNlZCB0byBtYXRjaCB0aGUgaW5wdXQuIERlZmF1bHRcbi8vIGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGNvbXB1dGUgbm9yIHN0b3JlIHRoaXMgYWx0IG51bS4gQ3JlYXRlXG4vLyBhIHN1YmNsYXNzIG9mIFBhcnNlclJ1bGVDb250ZXh0IHdpdGggYmFja2luZyBmaWVsZCBhbmQgc2V0XG4vLyBvcHRpb24gY29udGV4dFN1cGVyQ2xhc3MuXG4vLyB0byBzZXQgaXQuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0QWx0TnVtYmVyID0gZnVuY3Rpb24oKSB7IHJldHVybiBJTlZBTElEX0FMVF9OVU1CRVI7IH1cblxuLy8gU2V0IHRoZSBvdXRlciBhbHRlcm5hdGl2ZSBudW1iZXIgZm9yIHRoaXMgY29udGV4dCBub2RlLiBEZWZhdWx0XG4vLyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdGhpbmcgdG8gYXZvaWQgYmFja2luZyBmaWVsZCBvdmVyaGVhZCBmb3Jcbi8vIHRyZWVzIHRoYXQgZG9uJ3QgbmVlZCBpdC4gIENyZWF0ZVxuLy8gYSBzdWJjbGFzcyBvZiBQYXJzZXJSdWxlQ29udGV4dCB3aXRoIGJhY2tpbmcgZmllbGQgYW5kIHNldFxuLy8gb3B0aW9uIGNvbnRleHRTdXBlckNsYXNzLlxuUnVsZUNvbnRleHQucHJvdG90eXBlLnNldEFsdE51bWJlciA9IGZ1bmN0aW9uKGFsdE51bWJlcikgeyB9XG5cblJ1bGVDb250ZXh0LnByb3RvdHlwZS5nZXRDaGlsZCA9IGZ1bmN0aW9uKGkpIHtcblx0cmV0dXJuIG51bGw7XG59O1xuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0Q2hpbGRDb3VudCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gMDtcbn07XG5cblJ1bGVDb250ZXh0LnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbih2aXNpdG9yKSB7XG5cdHJldHVybiB2aXNpdG9yLnZpc2l0Q2hpbGRyZW4odGhpcyk7XG59O1xuXG4vL25lZWQgdG8gbWFuYWdlIGNpcmN1bGFyIGRlcGVuZGVuY2llcywgc28gZXhwb3J0IG5vd1xuZXhwb3J0cy5SdWxlQ29udGV4dCA9IFJ1bGVDb250ZXh0O1xudmFyIFRyZWVzID0gcmVxdWlyZSgnLi90cmVlL1RyZWVzJykuVHJlZXM7XG5cblxuLy8gUHJpbnQgb3V0IGEgd2hvbGUgdHJlZSwgbm90IGp1c3QgYSBub2RlLCBpbiBMSVNQIGZvcm1hdFxuLy8gKHJvb3QgY2hpbGQxIC4uIGNoaWxkTikuIFByaW50IGp1c3QgYSBub2RlIGlmIHRoaXMgaXMgYSBsZWFmLlxuLy9cblxuUnVsZUNvbnRleHQucHJvdG90eXBlLnRvU3RyaW5nVHJlZSA9IGZ1bmN0aW9uKHJ1bGVOYW1lcywgcmVjb2cpIHtcblx0cmV0dXJuIFRyZWVzLnRvU3RyaW5nVHJlZSh0aGlzLCBydWxlTmFtZXMsIHJlY29nKTtcbn07XG5cblJ1bGVDb250ZXh0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKHJ1bGVOYW1lcywgc3RvcCkge1xuXHRydWxlTmFtZXMgPSBydWxlTmFtZXMgfHwgbnVsbDtcblx0c3RvcCA9IHN0b3AgfHwgbnVsbDtcblx0dmFyIHAgPSB0aGlzO1xuXHR2YXIgcyA9IFwiW1wiO1xuXHR3aGlsZSAocCAhPT0gbnVsbCAmJiBwICE9PSBzdG9wKSB7XG5cdFx0aWYgKHJ1bGVOYW1lcyA9PT0gbnVsbCkge1xuXHRcdFx0aWYgKCFwLmlzRW1wdHkoKSkge1xuXHRcdFx0XHRzICs9IHAuaW52b2tpbmdTdGF0ZTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIHJpID0gcC5ydWxlSW5kZXg7XG5cdFx0XHR2YXIgcnVsZU5hbWUgPSAocmkgPj0gMCAmJiByaSA8IHJ1bGVOYW1lcy5sZW5ndGgpID8gcnVsZU5hbWVzW3JpXVxuXHRcdFx0XHRcdDogXCJcIiArIHJpO1xuXHRcdFx0cyArPSBydWxlTmFtZTtcblx0XHR9XG5cdFx0aWYgKHAucGFyZW50Q3R4ICE9PSBudWxsICYmIChydWxlTmFtZXMgIT09IG51bGwgfHwgIXAucGFyZW50Q3R4LmlzRW1wdHkoKSkpIHtcblx0XHRcdHMgKz0gXCIgXCI7XG5cdFx0fVxuXHRcdHAgPSBwLnBhcmVudEN0eDtcblx0fVxuXHRzICs9IFwiXVwiO1xuXHRyZXR1cm4gcztcbn07XG5cbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vXG5cbi8vIEEgdG9rZW4gaGFzIHByb3BlcnRpZXM6IHRleHQsIHR5cGUsIGxpbmUsIGNoYXJhY3RlciBwb3NpdGlvbiBpbiB0aGUgbGluZVxuLy8gKHNvIHdlIGNhbiBpZ25vcmUgdGFicyksIHRva2VuIGNoYW5uZWwsIGluZGV4LCBhbmQgc291cmNlIGZyb20gd2hpY2hcbi8vIHdlIG9idGFpbmVkIHRoaXMgdG9rZW4uXG5cbmZ1bmN0aW9uIFRva2VuKCkge1xuXHR0aGlzLnNvdXJjZSA9IG51bGw7XG5cdHRoaXMudHlwZSA9IG51bGw7IC8vIHRva2VuIHR5cGUgb2YgdGhlIHRva2VuXG5cdHRoaXMuY2hhbm5lbCA9IG51bGw7IC8vIFRoZSBwYXJzZXIgaWdub3JlcyBldmVyeXRoaW5nIG5vdCBvbiBERUZBVUxUX0NIQU5ORUxcblx0dGhpcy5zdGFydCA9IG51bGw7IC8vIG9wdGlvbmFsOyByZXR1cm4gLTEgaWYgbm90IGltcGxlbWVudGVkLlxuXHR0aGlzLnN0b3AgPSBudWxsOyAvLyBvcHRpb25hbDsgcmV0dXJuIC0xIGlmIG5vdCBpbXBsZW1lbnRlZC5cblx0dGhpcy50b2tlbkluZGV4ID0gbnVsbDsgLy8gZnJvbSAwLi5uLTEgb2YgdGhlIHRva2VuIG9iamVjdCBpbiB0aGUgaW5wdXQgc3RyZWFtXG5cdHRoaXMubGluZSA9IG51bGw7IC8vIGxpbmU9MS4ubiBvZiB0aGUgMXN0IGNoYXJhY3RlclxuXHR0aGlzLmNvbHVtbiA9IG51bGw7IC8vIGJlZ2lubmluZyBvZiB0aGUgbGluZSBhdCB3aGljaCBpdCBvY2N1cnMsIDAuLm4tMVxuXHR0aGlzLl90ZXh0ID0gbnVsbDsgLy8gdGV4dCBvZiB0aGUgdG9rZW4uXG5cdHJldHVybiB0aGlzO1xufVxuXG5Ub2tlbi5JTlZBTElEX1RZUEUgPSAwO1xuXG4vLyBEdXJpbmcgbG9va2FoZWFkIG9wZXJhdGlvbnMsIHRoaXMgXCJ0b2tlblwiIHNpZ25pZmllcyB3ZSBoaXQgcnVsZSBlbmQgQVROIHN0YXRlXG4vLyBhbmQgZGlkIG5vdCBmb2xsb3cgaXQgZGVzcGl0ZSBuZWVkaW5nIHRvLlxuVG9rZW4uRVBTSUxPTiA9IC0yO1xuXG5Ub2tlbi5NSU5fVVNFUl9UT0tFTl9UWVBFID0gMTtcblxuVG9rZW4uRU9GID0gLTE7XG5cbi8vIEFsbCB0b2tlbnMgZ28gdG8gdGhlIHBhcnNlciAodW5sZXNzIHNraXAoKSBpcyBjYWxsZWQgaW4gdGhhdCBydWxlKVxuLy8gb24gYSBwYXJ0aWN1bGFyIFwiY2hhbm5lbFwiLiBUaGUgcGFyc2VyIHR1bmVzIHRvIGEgcGFydGljdWxhciBjaGFubmVsXG4vLyBzbyB0aGF0IHdoaXRlc3BhY2UgZXRjLi4uIGNhbiBnbyB0byB0aGUgcGFyc2VyIG9uIGEgXCJoaWRkZW5cIiBjaGFubmVsLlxuXG5Ub2tlbi5ERUZBVUxUX0NIQU5ORUwgPSAwO1xuXG4vLyBBbnl0aGluZyBvbiBkaWZmZXJlbnQgY2hhbm5lbCB0aGFuIERFRkFVTFRfQ0hBTk5FTCBpcyBub3QgcGFyc2VkXG4vLyBieSBwYXJzZXIuXG5cblRva2VuLkhJRERFTl9DSEFOTkVMID0gMTtcblxuLy8gRXhwbGljaXRseSBzZXQgdGhlIHRleHQgZm9yIHRoaXMgdG9rZW4uIElmIHtjb2RlIHRleHR9IGlzIG5vdFxuLy8ge0Bjb2RlIG51bGx9LCB0aGVuIHtAbGluayAvL2dldFRleHR9IHdpbGwgcmV0dXJuIHRoaXMgdmFsdWUgcmF0aGVyIHRoYW5cbi8vIGV4dHJhY3RpbmcgdGhlIHRleHQgZnJvbSB0aGUgaW5wdXQuXG4vL1xuLy8gQHBhcmFtIHRleHQgVGhlIGV4cGxpY2l0IHRleHQgb2YgdGhlIHRva2VuLCBvciB7QGNvZGUgbnVsbH0gaWYgdGhlIHRleHRcbi8vIHNob3VsZCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBpbnB1dCBhbG9uZyB3aXRoIHRoZSBzdGFydCBhbmQgc3RvcCBpbmRleGVzXG4vLyBvZiB0aGUgdG9rZW4uXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShUb2tlbi5wcm90b3R5cGUsIFwidGV4dFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl90ZXh0O1xuXHR9LFxuXHRzZXQgOiBmdW5jdGlvbih0ZXh0KSB7XG5cdFx0dGhpcy5fdGV4dCA9IHRleHQ7XG5cdH1cbn0pO1xuXG5Ub2tlbi5wcm90b3R5cGUuZ2V0VG9rZW5Tb3VyY2UgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuc291cmNlWzBdO1xufTtcblxuVG9rZW4ucHJvdG90eXBlLmdldElucHV0U3RyZWFtID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnNvdXJjZVsxXTtcbn07XG5cbmZ1bmN0aW9uIENvbW1vblRva2VuKHNvdXJjZSwgdHlwZSwgY2hhbm5lbCwgc3RhcnQsIHN0b3ApIHtcblx0VG9rZW4uY2FsbCh0aGlzKTtcblx0dGhpcy5zb3VyY2UgPSBzb3VyY2UgIT09IHVuZGVmaW5lZCA/IHNvdXJjZSA6IENvbW1vblRva2VuLkVNUFRZX1NPVVJDRTtcblx0dGhpcy50eXBlID0gdHlwZSAhPT0gdW5kZWZpbmVkID8gdHlwZSA6IG51bGw7XG5cdHRoaXMuY2hhbm5lbCA9IGNoYW5uZWwgIT09IHVuZGVmaW5lZCA/IGNoYW5uZWwgOiBUb2tlbi5ERUZBVUxUX0NIQU5ORUw7XG5cdHRoaXMuc3RhcnQgPSBzdGFydCAhPT0gdW5kZWZpbmVkID8gc3RhcnQgOiAtMTtcblx0dGhpcy5zdG9wID0gc3RvcCAhPT0gdW5kZWZpbmVkID8gc3RvcCA6IC0xO1xuXHR0aGlzLnRva2VuSW5kZXggPSAtMTtcblx0aWYgKHRoaXMuc291cmNlWzBdICE9PSBudWxsKSB7XG5cdFx0dGhpcy5saW5lID0gc291cmNlWzBdLmxpbmU7XG5cdFx0dGhpcy5jb2x1bW4gPSBzb3VyY2VbMF0uY29sdW1uO1xuXHR9IGVsc2Uge1xuXHRcdHRoaXMuY29sdW1uID0gLTE7XG5cdH1cblx0cmV0dXJuIHRoaXM7XG59XG5cbkNvbW1vblRva2VuLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVG9rZW4ucHJvdG90eXBlKTtcbkNvbW1vblRva2VuLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbW1vblRva2VuO1xuXG4vLyBBbiBlbXB0eSB7QGxpbmsgUGFpcn0gd2hpY2ggaXMgdXNlZCBhcyB0aGUgZGVmYXVsdCB2YWx1ZSBvZlxuLy8ge0BsaW5rIC8vc291cmNlfSBmb3IgdG9rZW5zIHRoYXQgZG8gbm90IGhhdmUgYSBzb3VyY2UuXG5Db21tb25Ub2tlbi5FTVBUWV9TT1VSQ0UgPSBbIG51bGwsIG51bGwgXTtcblxuLy8gQ29uc3RydWN0cyBhIG5ldyB7QGxpbmsgQ29tbW9uVG9rZW59IGFzIGEgY29weSBvZiBhbm90aGVyIHtAbGluayBUb2tlbn0uXG4vL1xuLy8gPHA+XG4vLyBJZiB7QGNvZGUgb2xkVG9rZW59IGlzIGFsc28gYSB7QGxpbmsgQ29tbW9uVG9rZW59IGluc3RhbmNlLCB0aGUgbmV3bHlcbi8vIGNvbnN0cnVjdGVkIHRva2VuIHdpbGwgc2hhcmUgYSByZWZlcmVuY2UgdG8gdGhlIHtAbGluayAvL3RleHR9IGZpZWxkIGFuZFxuLy8gdGhlIHtAbGluayBQYWlyfSBzdG9yZWQgaW4ge0BsaW5rIC8vc291cmNlfS4gT3RoZXJ3aXNlLCB7QGxpbmsgLy90ZXh0fSB3aWxsXG4vLyBiZSBhc3NpZ25lZCB0aGUgcmVzdWx0IG9mIGNhbGxpbmcge0BsaW5rIC8vZ2V0VGV4dH0sIGFuZCB7QGxpbmsgLy9zb3VyY2V9XG4vLyB3aWxsIGJlIGNvbnN0cnVjdGVkIGZyb20gdGhlIHJlc3VsdCBvZiB7QGxpbmsgVG9rZW4vL2dldFRva2VuU291cmNlfSBhbmRcbi8vIHtAbGluayBUb2tlbi8vZ2V0SW5wdXRTdHJlYW19LjwvcD5cbi8vXG4vLyBAcGFyYW0gb2xkVG9rZW4gVGhlIHRva2VuIHRvIGNvcHkuXG4vL1xuQ29tbW9uVG9rZW4ucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0ID0gbmV3IENvbW1vblRva2VuKHRoaXMuc291cmNlLCB0aGlzLnR5cGUsIHRoaXMuY2hhbm5lbCwgdGhpcy5zdGFydCxcblx0XHRcdHRoaXMuc3RvcCk7XG5cdHQudG9rZW5JbmRleCA9IHRoaXMudG9rZW5JbmRleDtcblx0dC5saW5lID0gdGhpcy5saW5lO1xuXHR0LmNvbHVtbiA9IHRoaXMuY29sdW1uO1xuXHR0LnRleHQgPSB0aGlzLnRleHQ7XG5cdHJldHVybiB0O1xufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KENvbW1vblRva2VuLnByb3RvdHlwZSwgXCJ0ZXh0XCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKHRoaXMuX3RleHQgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiB0aGlzLl90ZXh0O1xuXHRcdH1cblx0XHR2YXIgaW5wdXQgPSB0aGlzLmdldElucHV0U3RyZWFtKCk7XG5cdFx0aWYgKGlucHV0ID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cdFx0dmFyIG4gPSBpbnB1dC5zaXplO1xuXHRcdGlmICh0aGlzLnN0YXJ0IDwgbiAmJiB0aGlzLnN0b3AgPCBuKSB7XG5cdFx0XHRyZXR1cm4gaW5wdXQuZ2V0VGV4dCh0aGlzLnN0YXJ0LCB0aGlzLnN0b3ApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCI8RU9GPlwiO1xuXHRcdH1cblx0fSxcblx0c2V0IDogZnVuY3Rpb24odGV4dCkge1xuXHRcdHRoaXMuX3RleHQgPSB0ZXh0O1xuXHR9XG59KTtcblxuQ29tbW9uVG9rZW4ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0eHQgPSB0aGlzLnRleHQ7XG5cdGlmICh0eHQgIT09IG51bGwpIHtcblx0XHR0eHQgPSB0eHQucmVwbGFjZSgvXFxuL2csIFwiXFxcXG5cIikucmVwbGFjZSgvXFxyL2csIFwiXFxcXHJcIikucmVwbGFjZSgvXFx0L2csIFwiXFxcXHRcIik7XG5cdH0gZWxzZSB7XG5cdFx0dHh0ID0gXCI8bm8gdGV4dD5cIjtcblx0fVxuXHRyZXR1cm4gXCJbQFwiICsgdGhpcy50b2tlbkluZGV4ICsgXCIsXCIgKyB0aGlzLnN0YXJ0ICsgXCI6XCIgKyB0aGlzLnN0b3AgKyBcIj0nXCIgK1xuXHRcdFx0dHh0ICsgXCInLDxcIiArIHRoaXMudHlwZSArIFwiPlwiICtcblx0XHRcdCh0aGlzLmNoYW5uZWwgPiAwID8gXCIsY2hhbm5lbD1cIiArIHRoaXMuY2hhbm5lbCA6IFwiXCIpICsgXCIsXCIgK1xuXHRcdFx0dGhpcy5saW5lICsgXCI6XCIgKyB0aGlzLmNvbHVtbiArIFwiXVwiO1xufTtcblxuZXhwb3J0cy5Ub2tlbiA9IFRva2VuO1xuZXhwb3J0cy5Db21tb25Ub2tlbiA9IENvbW1vblRva2VuO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG5mdW5jdGlvbiBhcnJheVRvU3RyaW5nKGEpIHtcbiAgICByZXR1cm4gXCJbXCIgKyBhLmpvaW4oXCIsIFwiKSArIFwiXVwiO1xufVxuXG5TdHJpbmcucHJvdG90eXBlLnNlZWQgPSBTdHJpbmcucHJvdG90eXBlLnNlZWQgfHwgTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogTWF0aC5wb3coMiwgMzIpKTtcblxuU3RyaW5nLnByb3RvdHlwZS5oYXNoQ29kZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVtYWluZGVyLCBieXRlcywgaDEsIGgxYiwgYzEsIGMxYiwgYzIsIGMyYiwgazEsIGksXG4gICAgICAgIGtleSA9IHRoaXMudG9TdHJpbmcoKTtcblxuICAgIHJlbWFpbmRlciA9IGtleS5sZW5ndGggJiAzOyAvLyBrZXkubGVuZ3RoICUgNFxuICAgIGJ5dGVzID0ga2V5Lmxlbmd0aCAtIHJlbWFpbmRlcjtcbiAgICBoMSA9IFN0cmluZy5wcm90b3R5cGUuc2VlZDtcbiAgICBjMSA9IDB4Y2M5ZTJkNTE7XG4gICAgYzIgPSAweDFiODczNTkzO1xuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBieXRlcykge1xuICAgICAgICBrMSA9XG4gICAgICAgICAgICAoKGtleS5jaGFyQ29kZUF0KGkpICYgMHhmZikpIHxcbiAgICAgICAgICAgICgoa2V5LmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDgpIHxcbiAgICAgICAgICAgICgoa2V5LmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDE2KSB8XG4gICAgICAgICAgICAoKGtleS5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAyNCk7XG4gICAgICAgICsraTtcblxuICAgICAgICBrMSA9ICgoKChrMSAmIDB4ZmZmZikgKiBjMSkgKyAoKCgoazEgPj4+IDE2KSAqIGMxKSAmIDB4ZmZmZikgPDwgMTYpKSkgJiAweGZmZmZmZmZmO1xuICAgICAgICBrMSA9IChrMSA8PCAxNSkgfCAoazEgPj4+IDE3KTtcbiAgICAgICAgazEgPSAoKCgoazEgJiAweGZmZmYpICogYzIpICsgKCgoKGsxID4+PiAxNikgKiBjMikgJiAweGZmZmYpIDw8IDE2KSkpICYgMHhmZmZmZmZmZjtcblxuICAgICAgICBoMSBePSBrMTtcbiAgICAgICAgaDEgPSAoaDEgPDwgMTMpIHwgKGgxID4+PiAxOSk7XG4gICAgICAgIGgxYiA9ICgoKChoMSAmIDB4ZmZmZikgKiA1KSArICgoKChoMSA+Pj4gMTYpICogNSkgJiAweGZmZmYpIDw8IDE2KSkpICYgMHhmZmZmZmZmZjtcbiAgICAgICAgaDEgPSAoKChoMWIgJiAweGZmZmYpICsgMHg2YjY0KSArICgoKChoMWIgPj4+IDE2KSArIDB4ZTY1NCkgJiAweGZmZmYpIDw8IDE2KSk7XG4gICAgfVxuXG4gICAgazEgPSAwO1xuXG4gICAgc3dpdGNoIChyZW1haW5kZXIpIHtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgazEgXj0gKGtleS5jaGFyQ29kZUF0KGkgKyAyKSAmIDB4ZmYpIDw8IDE2O1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICBrMSBePSAoa2V5LmNoYXJDb2RlQXQoaSArIDEpICYgMHhmZikgPDwgODtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgazEgXj0gKGtleS5jaGFyQ29kZUF0KGkpICYgMHhmZik7XG5cbiAgICAgICAgICAgIGsxID0gKCgoazEgJiAweGZmZmYpICogYzEpICsgKCgoKGsxID4+PiAxNikgKiBjMSkgJiAweGZmZmYpIDw8IDE2KSkgJiAweGZmZmZmZmZmO1xuICAgICAgICAgICAgazEgPSAoazEgPDwgMTUpIHwgKGsxID4+PiAxNyk7XG4gICAgICAgICAgICBrMSA9ICgoKGsxICYgMHhmZmZmKSAqIGMyKSArICgoKChrMSA+Pj4gMTYpICogYzIpICYgMHhmZmZmKSA8PCAxNikpICYgMHhmZmZmZmZmZjtcbiAgICAgICAgICAgIGgxIF49IGsxO1xuICAgIH1cblxuICAgIGgxIF49IGtleS5sZW5ndGg7XG5cbiAgICBoMSBePSBoMSA+Pj4gMTY7XG4gICAgaDEgPSAoKChoMSAmIDB4ZmZmZikgKiAweDg1ZWJjYTZiKSArICgoKChoMSA+Pj4gMTYpICogMHg4NWViY2E2YikgJiAweGZmZmYpIDw8IDE2KSkgJiAweGZmZmZmZmZmO1xuICAgIGgxIF49IGgxID4+PiAxMztcbiAgICBoMSA9ICgoKChoMSAmIDB4ZmZmZikgKiAweGMyYjJhZTM1KSArICgoKChoMSA+Pj4gMTYpICogMHhjMmIyYWUzNSkgJiAweGZmZmYpIDw8IDE2KSkpICYgMHhmZmZmZmZmZjtcbiAgICBoMSBePSBoMSA+Pj4gMTY7XG5cbiAgICByZXR1cm4gaDEgPj4+IDA7XG59O1xuXG5mdW5jdGlvbiBzdGFuZGFyZEVxdWFsc0Z1bmN0aW9uKGEsIGIpIHtcbiAgICByZXR1cm4gYS5lcXVhbHMoYik7XG59XG5cbmZ1bmN0aW9uIHN0YW5kYXJkSGFzaENvZGVGdW5jdGlvbihhKSB7XG4gICAgcmV0dXJuIGEuaGFzaENvZGUoKTtcbn1cblxuZnVuY3Rpb24gU2V0KGhhc2hGdW5jdGlvbiwgZXF1YWxzRnVuY3Rpb24pIHtcbiAgICB0aGlzLmRhdGEgPSB7fTtcbiAgICB0aGlzLmhhc2hGdW5jdGlvbiA9IGhhc2hGdW5jdGlvbiB8fCBzdGFuZGFyZEhhc2hDb2RlRnVuY3Rpb247XG4gICAgdGhpcy5lcXVhbHNGdW5jdGlvbiA9IGVxdWFsc0Z1bmN0aW9uIHx8IHN0YW5kYXJkRXF1YWxzRnVuY3Rpb247XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShTZXQucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsID0gMDtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIHRoaXMuZGF0YSkge1xuICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKFwiaGFzaF9cIikgPT09IDApIHtcbiAgICAgICAgICAgICAgICBsID0gbCArIHRoaXMuZGF0YVtrZXldLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbDtcbiAgICB9XG59KTtcblxuU2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICB2YXIgaGFzaCA9IHRoaXMuaGFzaEZ1bmN0aW9uKHZhbHVlKTtcbiAgICB2YXIga2V5ID0gXCJoYXNoX1wiICsgaGFzaDtcbiAgICBpZiAoa2V5IGluIHRoaXMuZGF0YSkge1xuICAgICAgICB2YXIgdmFsdWVzID0gdGhpcy5kYXRhW2tleV07XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5lcXVhbHNGdW5jdGlvbih2YWx1ZSwgdmFsdWVzW2ldKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZXNbaV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kYXRhW2tleV0gPSBbdmFsdWVdO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufTtcblxuU2V0LnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiB0aGlzLmdldCh2YWx1ZSkgIT0gbnVsbDtcbn07XG5cblNldC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgdmFyIGhhc2ggPSB0aGlzLmhhc2hGdW5jdGlvbih2YWx1ZSk7XG4gICAgdmFyIGtleSA9IFwiaGFzaF9cIiArIGhhc2g7XG4gICAgaWYgKGtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgdmFyIHZhbHVlcyA9IHRoaXMuZGF0YVtrZXldO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZXF1YWxzRnVuY3Rpb24odmFsdWUsIHZhbHVlc1tpXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuU2V0LnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGwgPSBbXTtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgIGlmIChrZXkuaW5kZXhPZihcImhhc2hfXCIpID09PSAwKSB7XG4gICAgICAgICAgICBsID0gbC5jb25jYXQodGhpcy5kYXRhW2tleV0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsO1xufTtcblxuU2V0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gYXJyYXlUb1N0cmluZyh0aGlzLnZhbHVlcygpKTtcbn07XG5cbmZ1bmN0aW9uIEJpdFNldCgpIHtcbiAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuQml0U2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICB0aGlzLmRhdGFbdmFsdWVdID0gdHJ1ZTtcbn07XG5cbkJpdFNldC5wcm90b3R5cGUub3IgPSBmdW5jdGlvbiAoc2V0KSB7XG4gICAgdmFyIGJpdHMgPSB0aGlzO1xuICAgIE9iamVjdC5rZXlzKHNldC5kYXRhKS5tYXAoZnVuY3Rpb24gKGFsdCkge1xuICAgICAgICBiaXRzLmFkZChhbHQpO1xuICAgIH0pO1xufTtcblxuQml0U2V0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBkZWxldGUgdGhpcy5kYXRhW3ZhbHVlXTtcbn07XG5cbkJpdFNldC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhW3ZhbHVlXSA9PT0gdHJ1ZTtcbn07XG5cbkJpdFNldC5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLmRhdGEpO1xufTtcblxuQml0U2V0LnByb3RvdHlwZS5taW5WYWx1ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gTWF0aC5taW4uYXBwbHkobnVsbCwgdGhpcy52YWx1ZXMoKSk7XG59O1xuXG5CaXRTZXQucHJvdG90eXBlLmhhc2hDb2RlID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBoYXNoID0gbmV3IEhhc2goKTtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLnZhbHVlcygpKTtcbiAgICByZXR1cm4gaGFzaC5maW5pc2goKTtcbn07XG5cbkJpdFNldC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBCaXRTZXQpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaGFzaENvZGUoKSA9PT0gb3RoZXIuaGFzaENvZGUoKTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCaXRTZXQucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcygpLmxlbmd0aDtcbiAgICB9XG59KTtcblxuQml0U2V0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gXCJ7XCIgKyB0aGlzLnZhbHVlcygpLmpvaW4oXCIsIFwiKSArIFwifVwiO1xufTtcblxuZnVuY3Rpb24gTWFwKGhhc2hGdW5jdGlvbiwgZXF1YWxzRnVuY3Rpb24pIHtcbiAgICB0aGlzLmRhdGEgPSB7fTtcbiAgICB0aGlzLmhhc2hGdW5jdGlvbiA9IGhhc2hGdW5jdGlvbiB8fCBzdGFuZGFyZEhhc2hDb2RlRnVuY3Rpb247XG4gICAgdGhpcy5lcXVhbHNGdW5jdGlvbiA9IGVxdWFsc0Z1bmN0aW9uIHx8IHN0YW5kYXJkRXF1YWxzRnVuY3Rpb247XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShNYXAucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBsID0gMDtcbiAgICAgICAgZm9yICh2YXIgaGFzaEtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIGlmIChoYXNoS2V5LmluZGV4T2YoXCJoYXNoX1wiKSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGwgPSBsICsgdGhpcy5kYXRhW2hhc2hLZXldLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbDtcbiAgICB9XG59KTtcblxuTWFwLnByb3RvdHlwZS5wdXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBoYXNoS2V5ID0gXCJoYXNoX1wiICsgdGhpcy5oYXNoRnVuY3Rpb24oa2V5KTtcbiAgICBpZiAoaGFzaEtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgdmFyIGVudHJpZXMgPSB0aGlzLmRhdGFbaGFzaEtleV07XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZW50cmllcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmVxdWFsc0Z1bmN0aW9uKGtleSwgZW50cnkua2V5KSkge1xuICAgICAgICAgICAgICAgIHZhciBvbGRWYWx1ZSA9IGVudHJ5LnZhbHVlO1xuICAgICAgICAgICAgICAgIGVudHJ5LnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG9sZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVudHJpZXMucHVzaCh7a2V5OmtleSwgdmFsdWU6dmFsdWV9KTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YVtoYXNoS2V5XSA9IFt7a2V5OmtleSwgdmFsdWU6dmFsdWV9XTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbn07XG5cbk1hcC5wcm90b3R5cGUuY29udGFpbnNLZXkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGhhc2hLZXkgPSBcImhhc2hfXCIgKyB0aGlzLmhhc2hGdW5jdGlvbihrZXkpO1xuICAgIGlmKGhhc2hLZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgIHZhciBlbnRyaWVzID0gdGhpcy5kYXRhW2hhc2hLZXldO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaV07XG4gICAgICAgICAgICBpZiAodGhpcy5lcXVhbHNGdW5jdGlvbihrZXksIGVudHJ5LmtleSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuTWFwLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGhhc2hLZXkgPSBcImhhc2hfXCIgKyB0aGlzLmhhc2hGdW5jdGlvbihrZXkpO1xuICAgIGlmKGhhc2hLZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgIHZhciBlbnRyaWVzID0gdGhpcy5kYXRhW2hhc2hLZXldO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaV07XG4gICAgICAgICAgICBpZiAodGhpcy5lcXVhbHNGdW5jdGlvbihrZXksIGVudHJ5LmtleSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVudHJ5LnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xufTtcblxuTWFwLnByb3RvdHlwZS5lbnRyaWVzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMuZGF0YSkge1xuICAgICAgICBpZiAoa2V5LmluZGV4T2YoXCJoYXNoX1wiKSA9PT0gMCkge1xuICAgICAgICAgICAgbCA9IGwuY29uY2F0KHRoaXMuZGF0YVtrZXldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbDtcbn07XG5cblxuTWFwLnByb3RvdHlwZS5nZXRLZXlzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmVudHJpZXMoKS5tYXAoZnVuY3Rpb24oZSkge1xuICAgICAgICByZXR1cm4gZS5rZXk7XG4gICAgfSk7XG59O1xuXG5cbk1hcC5wcm90b3R5cGUuZ2V0VmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmVudHJpZXMoKS5tYXAoZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGUudmFsdWU7XG4gICAgfSk7XG59O1xuXG5cbk1hcC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNzID0gdGhpcy5lbnRyaWVzKCkubWFwKGZ1bmN0aW9uKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiAneycgKyBlbnRyeS5rZXkgKyAnOicgKyBlbnRyeS52YWx1ZSArICd9JztcbiAgICB9KTtcbiAgICByZXR1cm4gJ1snICsgc3Muam9pbihcIiwgXCIpICsgJ10nO1xufTtcblxuXG5mdW5jdGlvbiBBbHREaWN0KCkge1xuICAgIHRoaXMuZGF0YSA9IHt9O1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5cbkFsdERpY3QucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICBrZXkgPSBcImstXCIgKyBrZXk7XG4gICAgaWYgKGtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YVtrZXldO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn07XG5cbkFsdERpY3QucHJvdG90eXBlLnB1dCA9IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAga2V5ID0gXCJrLVwiICsga2V5O1xuICAgIHRoaXMuZGF0YVtrZXldID0gdmFsdWU7XG59O1xuXG5BbHREaWN0LnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGRhdGEgPSB0aGlzLmRhdGE7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmRhdGEpO1xuICAgIHJldHVybiBrZXlzLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBkYXRhW2tleV07XG4gICAgfSk7XG59O1xuXG5mdW5jdGlvbiBEb3VibGVEaWN0KCkge1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5mdW5jdGlvbiBIYXNoKCkge1xuICAgIHRoaXMuY291bnQgPSAwO1xuICAgIHRoaXMuaGFzaCA9IDA7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkhhc2gucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IodmFyIGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgaWYgKHZhbHVlID09IG51bGwpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgaWYoQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZS5hcHBseSh2YWx1ZSk7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGsgPSAwO1xuICAgICAgICAgICAgc3dpdGNoICh0eXBlb2YodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgICAgICAgICAgICAgIGsgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgICAgICAgayA9IHZhbHVlLmhhc2hDb2RlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlLnVwZGF0ZUhhc2hDb2RlKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGsgPSBrICogMHhDQzlFMkQ1MTtcbiAgICAgICAgICAgIGsgPSAoayA8PCAxNSkgfCAoayA+Pj4gKDMyIC0gMTUpKTtcbiAgICAgICAgICAgIGsgPSBrICogMHgxQjg3MzU5MztcbiAgICAgICAgICAgIHRoaXMuY291bnQgPSB0aGlzLmNvdW50ICsgMTtcbiAgICAgICAgICAgIHZhciBoYXNoID0gdGhpcy5oYXNoIF4gaztcbiAgICAgICAgICAgIGhhc2ggPSAoaGFzaCA8PCAxMykgfCAoaGFzaCA+Pj4gKDMyIC0gMTMpKTtcbiAgICAgICAgICAgIGhhc2ggPSBoYXNoICogNSArIDB4RTY1NDZCNjQ7XG4gICAgICAgICAgICB0aGlzLmhhc2ggPSBoYXNoO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5IYXNoLnByb3RvdHlwZS5maW5pc2ggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGhhc2ggPSB0aGlzLmhhc2ggXiAodGhpcy5jb3VudCAqIDQpO1xuICAgIGhhc2ggPSBoYXNoIF4gKGhhc2ggPj4+IDE2KTtcbiAgICBoYXNoID0gaGFzaCAqIDB4ODVFQkNBNkI7XG4gICAgaGFzaCA9IGhhc2ggXiAoaGFzaCA+Pj4gMTMpO1xuICAgIGhhc2ggPSBoYXNoICogMHhDMkIyQUUzNTtcbiAgICBoYXNoID0gaGFzaCBeIChoYXNoID4+PiAxNik7XG4gICAgcmV0dXJuIGhhc2g7XG59XG5cbmZ1bmN0aW9uIGhhc2hTdHVmZigpIHtcbiAgICB2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG4gICAgaGFzaC51cGRhdGUuYXBwbHkoYXJndW1lbnRzKTtcbiAgICByZXR1cm4gaGFzaC5maW5pc2goKTtcbn1cblxuRG91YmxlRGljdC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICB2YXIgZCA9IHRoaXNbYV0gfHwgbnVsbDtcbiAgICByZXR1cm4gZCA9PT0gbnVsbCA/IG51bGwgOiAoZFtiXSB8fCBudWxsKTtcbn07XG5cbkRvdWJsZURpY3QucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChhLCBiLCBvKSB7XG4gICAgdmFyIGQgPSB0aGlzW2FdIHx8IG51bGw7XG4gICAgaWYgKGQgPT09IG51bGwpIHtcbiAgICAgICAgZCA9IHt9O1xuICAgICAgICB0aGlzW2FdID0gZDtcbiAgICB9XG4gICAgZFtiXSA9IG87XG59O1xuXG5cbmZ1bmN0aW9uIGVzY2FwZVdoaXRlc3BhY2UocywgZXNjYXBlU3BhY2VzKSB7XG4gICAgcyA9IHMucmVwbGFjZSgvXFx0L2csIFwiXFxcXHRcIilcbiAgICAgICAgIC5yZXBsYWNlKC9cXG4vZywgXCJcXFxcblwiKVxuICAgICAgICAgLnJlcGxhY2UoL1xcci9nLCBcIlxcXFxyXCIpO1xuICAgIGlmIChlc2NhcGVTcGFjZXMpIHtcbiAgICAgICAgcyA9IHMucmVwbGFjZSgvIC9nLCBcIlxcdTAwQjdcIik7XG4gICAgfVxuICAgIHJldHVybiBzO1xufVxuXG5mdW5jdGlvbiB0aXRsZUNhc2Uoc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXHdcXFMqL2csIGZ1bmN0aW9uICh0eHQpIHtcbiAgICAgICAgcmV0dXJuIHR4dC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHR4dC5zdWJzdHIoMSk7XG4gICAgfSk7XG59O1xuXG5mdW5jdGlvbiBlcXVhbEFycmF5cyhhLCBiKVxue1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhKSB8fCAhQXJyYXkuaXNBcnJheShiKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGlmIChhID09IGIpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aClcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYVtpXSA9PSBiW2ldKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmICghYVtpXS5lcXVhbHMoYltpXSkpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0cy5IYXNoID0gSGFzaDtcbmV4cG9ydHMuU2V0ID0gU2V0O1xuZXhwb3J0cy5NYXAgPSBNYXA7XG5leHBvcnRzLkJpdFNldCA9IEJpdFNldDtcbmV4cG9ydHMuQWx0RGljdCA9IEFsdERpY3Q7XG5leHBvcnRzLkRvdWJsZURpY3QgPSBEb3VibGVEaWN0O1xuZXhwb3J0cy5oYXNoU3R1ZmYgPSBoYXNoU3R1ZmY7XG5leHBvcnRzLmVzY2FwZVdoaXRlc3BhY2UgPSBlc2NhcGVXaGl0ZXNwYWNlO1xuZXhwb3J0cy5hcnJheVRvU3RyaW5nID0gYXJyYXlUb1N0cmluZztcbmV4cG9ydHMudGl0bGVDYXNlID0gdGl0bGVDYXNlO1xuZXhwb3J0cy5lcXVhbEFycmF5cyA9IGVxdWFsQXJyYXlzO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG52YXIgTEwxQW5hbHl6ZXIgPSByZXF1aXJlKCcuLy4uL0xMMUFuYWx5emVyJykuTEwxQW5hbHl6ZXI7XG52YXIgSW50ZXJ2YWxTZXQgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWxTZXQ7XG5cbmZ1bmN0aW9uIEFUTihncmFtbWFyVHlwZSAsIG1heFRva2VuVHlwZSkge1xuXG4gICAgLy8gVXNlZCBmb3IgcnVudGltZSBkZXNlcmlhbGl6YXRpb24gb2YgQVROcyBmcm9tIHN0cmluZ3MvLy9cbiAgICAvLyBUaGUgdHlwZSBvZiB0aGUgQVROLlxuICAgIHRoaXMuZ3JhbW1hclR5cGUgPSBncmFtbWFyVHlwZTtcbiAgICAvLyBUaGUgbWF4aW11bSB2YWx1ZSBmb3IgYW55IHN5bWJvbCByZWNvZ25pemVkIGJ5IGEgdHJhbnNpdGlvbiBpbiB0aGUgQVROLlxuICAgIHRoaXMubWF4VG9rZW5UeXBlID0gbWF4VG9rZW5UeXBlO1xuICAgIHRoaXMuc3RhdGVzID0gW107XG4gICAgLy8gRWFjaCBzdWJydWxlL3J1bGUgaXMgYSBkZWNpc2lvbiBwb2ludCBhbmQgd2UgbXVzdCB0cmFjayB0aGVtIHNvIHdlXG4gICAgLy8gIGNhbiBnbyBiYWNrIGxhdGVyIGFuZCBidWlsZCBERkEgcHJlZGljdG9ycyBmb3IgdGhlbS4gIFRoaXMgaW5jbHVkZXNcbiAgICAvLyAgYWxsIHRoZSBydWxlcywgc3VicnVsZXMsIG9wdGlvbmFsIGJsb2NrcywgKCkrLCAoKSogZXRjLi4uXG4gICAgdGhpcy5kZWNpc2lvblRvU3RhdGUgPSBbXTtcbiAgICAvLyBNYXBzIGZyb20gcnVsZSBpbmRleCB0byBzdGFydGluZyBzdGF0ZSBudW1iZXIuXG4gICAgdGhpcy5ydWxlVG9TdGFydFN0YXRlID0gW107XG4gICAgLy8gTWFwcyBmcm9tIHJ1bGUgaW5kZXggdG8gc3RvcCBzdGF0ZSBudW1iZXIuXG4gICAgdGhpcy5ydWxlVG9TdG9wU3RhdGUgPSBudWxsO1xuICAgIHRoaXMubW9kZU5hbWVUb1N0YXJ0U3RhdGUgPSB7fTtcbiAgICAvLyBGb3IgbGV4ZXIgQVROcywgdGhpcyBtYXBzIHRoZSBydWxlIGluZGV4IHRvIHRoZSByZXN1bHRpbmcgdG9rZW4gdHlwZS5cbiAgICAvLyBGb3IgcGFyc2VyIEFUTnMsIHRoaXMgbWFwcyB0aGUgcnVsZSBpbmRleCB0byB0aGUgZ2VuZXJhdGVkIGJ5cGFzcyB0b2tlblxuICAgIC8vIHR5cGUgaWYgdGhlXG4gICAgLy8ge0BsaW5rIEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMvL2lzR2VuZXJhdGVSdWxlQnlwYXNzVHJhbnNpdGlvbnN9XG4gICAgLy8gZGVzZXJpYWxpemF0aW9uIG9wdGlvbiB3YXMgc3BlY2lmaWVkOyBvdGhlcndpc2UsIHRoaXMgaXMge0Bjb2RlIG51bGx9LlxuICAgIHRoaXMucnVsZVRvVG9rZW5UeXBlID0gbnVsbDtcbiAgICAvLyBGb3IgbGV4ZXIgQVROcywgdGhpcyBpcyBhbiBhcnJheSBvZiB7QGxpbmsgTGV4ZXJBY3Rpb259IG9iamVjdHMgd2hpY2ggbWF5XG4gICAgLy8gYmUgcmVmZXJlbmNlZCBieSBhY3Rpb24gdHJhbnNpdGlvbnMgaW4gdGhlIEFUTi5cbiAgICB0aGlzLmxleGVyQWN0aW9ucyA9IG51bGw7XG4gICAgdGhpcy5tb2RlVG9TdGFydFN0YXRlID0gW107XG5cbiAgICByZXR1cm4gdGhpcztcbn1cblxuLy8gQ29tcHV0ZSB0aGUgc2V0IG9mIHZhbGlkIHRva2VucyB0aGF0IGNhbiBvY2N1ciBzdGFydGluZyBpbiBzdGF0ZSB7QGNvZGUgc30uXG4vLyAgSWYge0Bjb2RlIGN0eH0gaXMgbnVsbCwgdGhlIHNldCBvZiB0b2tlbnMgd2lsbCBub3QgaW5jbHVkZSB3aGF0IGNhbiBmb2xsb3dcbi8vICB0aGUgcnVsZSBzdXJyb3VuZGluZyB7QGNvZGUgc30uIEluIG90aGVyIHdvcmRzLCB0aGUgc2V0IHdpbGwgYmVcbi8vICByZXN0cmljdGVkIHRvIHRva2VucyByZWFjaGFibGUgc3RheWluZyB3aXRoaW4ge0Bjb2RlIHN9J3MgcnVsZS5cbkFUTi5wcm90b3R5cGUubmV4dFRva2Vuc0luQ29udGV4dCA9IGZ1bmN0aW9uKHMsIGN0eCkge1xuICAgIHZhciBhbmFsID0gbmV3IExMMUFuYWx5emVyKHRoaXMpO1xuICAgIHJldHVybiBhbmFsLkxPT0socywgbnVsbCwgY3R4KTtcbn07XG5cbi8vIENvbXB1dGUgdGhlIHNldCBvZiB2YWxpZCB0b2tlbnMgdGhhdCBjYW4gb2NjdXIgc3RhcnRpbmcgaW4ge0Bjb2RlIHN9IGFuZFxuLy8gc3RheWluZyBpbiBzYW1lIHJ1bGUuIHtAbGluayBUb2tlbi8vRVBTSUxPTn0gaXMgaW4gc2V0IGlmIHdlIHJlYWNoIGVuZCBvZlxuLy8gcnVsZS5cbkFUTi5wcm90b3R5cGUubmV4dFRva2Vuc05vQ29udGV4dCA9IGZ1bmN0aW9uKHMpIHtcbiAgICBpZiAocy5uZXh0VG9rZW5XaXRoaW5SdWxlICE9PSBudWxsICkge1xuICAgICAgICByZXR1cm4gcy5uZXh0VG9rZW5XaXRoaW5SdWxlO1xuICAgIH1cbiAgICBzLm5leHRUb2tlbldpdGhpblJ1bGUgPSB0aGlzLm5leHRUb2tlbnNJbkNvbnRleHQocywgbnVsbCk7XG4gICAgcy5uZXh0VG9rZW5XaXRoaW5SdWxlLnJlYWRPbmx5ID0gdHJ1ZTtcbiAgICByZXR1cm4gcy5uZXh0VG9rZW5XaXRoaW5SdWxlO1xufTtcblxuQVROLnByb3RvdHlwZS5uZXh0VG9rZW5zID0gZnVuY3Rpb24ocywgY3R4KSB7XG4gICAgaWYgKCBjdHg9PT11bmRlZmluZWQgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHRUb2tlbnNOb0NvbnRleHQocyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dFRva2Vuc0luQ29udGV4dChzLCBjdHgpO1xuICAgIH1cbn07XG5cbkFUTi5wcm90b3R5cGUuYWRkU3RhdGUgPSBmdW5jdGlvbiggc3RhdGUpIHtcbiAgICBpZiAoIHN0YXRlICE9PSBudWxsICkge1xuICAgICAgICBzdGF0ZS5hdG4gPSB0aGlzO1xuICAgICAgICBzdGF0ZS5zdGF0ZU51bWJlciA9IHRoaXMuc3RhdGVzLmxlbmd0aDtcbiAgICB9XG4gICAgdGhpcy5zdGF0ZXMucHVzaChzdGF0ZSk7XG59O1xuXG5BVE4ucHJvdG90eXBlLnJlbW92ZVN0YXRlID0gZnVuY3Rpb24oIHN0YXRlKSB7XG4gICAgdGhpcy5zdGF0ZXNbc3RhdGUuc3RhdGVOdW1iZXJdID0gbnVsbDsgLy8ganVzdCBmcmVlIG1lbSwgZG9uJ3Qgc2hpZnQgc3RhdGVzIGluIGxpc3Rcbn07XG5cbkFUTi5wcm90b3R5cGUuZGVmaW5lRGVjaXNpb25TdGF0ZSA9IGZ1bmN0aW9uKCBzKSB7XG4gICAgdGhpcy5kZWNpc2lvblRvU3RhdGUucHVzaChzKTtcbiAgICBzLmRlY2lzaW9uID0gdGhpcy5kZWNpc2lvblRvU3RhdGUubGVuZ3RoLTE7XG4gICAgcmV0dXJuIHMuZGVjaXNpb247XG59O1xuXG5BVE4ucHJvdG90eXBlLmdldERlY2lzaW9uU3RhdGUgPSBmdW5jdGlvbiggZGVjaXNpb24pIHtcbiAgICBpZiAodGhpcy5kZWNpc2lvblRvU3RhdGUubGVuZ3RoPT09MCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWNpc2lvblRvU3RhdGVbZGVjaXNpb25dO1xuICAgIH1cbn07XG5cbi8vIENvbXB1dGVzIHRoZSBzZXQgb2YgaW5wdXQgc3ltYm9scyB3aGljaCBjb3VsZCBmb2xsb3cgQVROIHN0YXRlIG51bWJlclxuLy8ge0Bjb2RlIHN0YXRlTnVtYmVyfSBpbiB0aGUgc3BlY2lmaWVkIGZ1bGwge0Bjb2RlIGNvbnRleHR9LiBUaGlzIG1ldGhvZFxuLy8gY29uc2lkZXJzIHRoZSBjb21wbGV0ZSBwYXJzZXIgY29udGV4dCwgYnV0IGRvZXMgbm90IGV2YWx1YXRlIHNlbWFudGljXG4vLyBwcmVkaWNhdGVzIChpLmUuIGFsbCBwcmVkaWNhdGVzIGVuY291bnRlcmVkIGR1cmluZyB0aGUgY2FsY3VsYXRpb24gYXJlXG4vLyBhc3N1bWVkIHRydWUpLiBJZiBhIHBhdGggaW4gdGhlIEFUTiBleGlzdHMgZnJvbSB0aGUgc3RhcnRpbmcgc3RhdGUgdG8gdGhlXG4vLyB7QGxpbmsgUnVsZVN0b3BTdGF0ZX0gb2YgdGhlIG91dGVybW9zdCBjb250ZXh0IHdpdGhvdXQgbWF0Y2hpbmcgYW55XG4vLyBzeW1ib2xzLCB7QGxpbmsgVG9rZW4vL0VPRn0gaXMgYWRkZWQgdG8gdGhlIHJldHVybmVkIHNldC5cbi8vXG4vLyA8cD5JZiB7QGNvZGUgY29udGV4dH0gaXMge0Bjb2RlIG51bGx9LCBpdCBpcyB0cmVhdGVkIGFzXG4vLyB7QGxpbmsgUGFyc2VyUnVsZUNvbnRleHQvL0VNUFRZfS48L3A+XG4vL1xuLy8gQHBhcmFtIHN0YXRlTnVtYmVyIHRoZSBBVE4gc3RhdGUgbnVtYmVyXG4vLyBAcGFyYW0gY29udGV4dCB0aGUgZnVsbCBwYXJzZSBjb250ZXh0XG4vLyBAcmV0dXJuIFRoZSBzZXQgb2YgcG90ZW50aWFsbHkgdmFsaWQgaW5wdXQgc3ltYm9scyB3aGljaCBjb3VsZCBmb2xsb3cgdGhlXG4vLyBzcGVjaWZpZWQgc3RhdGUgaW4gdGhlIHNwZWNpZmllZCBjb250ZXh0LlxuLy8gQHRocm93cyBJbGxlZ2FsQXJndW1lbnRFeGNlcHRpb24gaWYgdGhlIEFUTiBkb2VzIG5vdCBjb250YWluIGEgc3RhdGUgd2l0aFxuLy8gbnVtYmVyIHtAY29kZSBzdGF0ZU51bWJlcn1cbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vLi4vVG9rZW4nKS5Ub2tlbjtcblxuQVROLnByb3RvdHlwZS5nZXRFeHBlY3RlZFRva2VucyA9IGZ1bmN0aW9uKCBzdGF0ZU51bWJlciwgY3R4ICkge1xuICAgIGlmICggc3RhdGVOdW1iZXIgPCAwIHx8IHN0YXRlTnVtYmVyID49IHRoaXMuc3RhdGVzLmxlbmd0aCApIHtcbiAgICAgICAgdGhyb3coXCJJbnZhbGlkIHN0YXRlIG51bWJlci5cIik7XG4gICAgfVxuICAgIHZhciBzID0gdGhpcy5zdGF0ZXNbc3RhdGVOdW1iZXJdO1xuICAgIHZhciBmb2xsb3dpbmcgPSB0aGlzLm5leHRUb2tlbnMocyk7XG4gICAgaWYgKCFmb2xsb3dpbmcuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcbiAgICAgICAgcmV0dXJuIGZvbGxvd2luZztcbiAgICB9XG4gICAgdmFyIGV4cGVjdGVkID0gbmV3IEludGVydmFsU2V0KCk7XG4gICAgZXhwZWN0ZWQuYWRkU2V0KGZvbGxvd2luZyk7XG4gICAgZXhwZWN0ZWQucmVtb3ZlT25lKFRva2VuLkVQU0lMT04pO1xuICAgIHdoaWxlIChjdHggIT09IG51bGwgJiYgY3R4Lmludm9raW5nU3RhdGUgPj0gMCAmJiBmb2xsb3dpbmcuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcbiAgICAgICAgdmFyIGludm9raW5nU3RhdGUgPSB0aGlzLnN0YXRlc1tjdHguaW52b2tpbmdTdGF0ZV07XG4gICAgICAgIHZhciBydCA9IGludm9raW5nU3RhdGUudHJhbnNpdGlvbnNbMF07XG4gICAgICAgIGZvbGxvd2luZyA9IHRoaXMubmV4dFRva2VucyhydC5mb2xsb3dTdGF0ZSk7XG4gICAgICAgIGV4cGVjdGVkLmFkZFNldChmb2xsb3dpbmcpO1xuICAgICAgICBleHBlY3RlZC5yZW1vdmVPbmUoVG9rZW4uRVBTSUxPTik7XG4gICAgICAgIGN0eCA9IGN0eC5wYXJlbnRDdHg7XG4gICAgfVxuICAgIGlmIChmb2xsb3dpbmcuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcbiAgICAgICAgZXhwZWN0ZWQuYWRkT25lKFRva2VuLkVPRik7XG4gICAgfVxuICAgIHJldHVybiBleHBlY3RlZDtcbn07XG5cbkFUTi5JTlZBTElEX0FMVF9OVU1CRVIgPSAwO1xuXG5leHBvcnRzLkFUTiA9IEFUTjsiLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy8vXG5cbi8vIEEgdHVwbGU6IChBVE4gc3RhdGUsIHByZWRpY3RlZCBhbHQsIHN5bnRhY3RpYywgc2VtYW50aWMgY29udGV4dCkuXG4vLyAgVGhlIHN5bnRhY3RpYyBjb250ZXh0IGlzIGEgZ3JhcGgtc3RydWN0dXJlZCBzdGFjayBub2RlIHdob3NlXG4vLyAgcGF0aChzKSB0byB0aGUgcm9vdCBpcyB0aGUgcnVsZSBpbnZvY2F0aW9uKHMpXG4vLyAgY2hhaW4gdXNlZCB0byBhcnJpdmUgYXQgdGhlIHN0YXRlLiAgVGhlIHNlbWFudGljIGNvbnRleHQgaXNcbi8vICB0aGUgdHJlZSBvZiBzZW1hbnRpYyBwcmVkaWNhdGVzIGVuY291bnRlcmVkIGJlZm9yZSByZWFjaGluZ1xuLy8gIGFuIEFUTiBzdGF0ZS5cbi8vL1xuXG52YXIgRGVjaXNpb25TdGF0ZSA9IHJlcXVpcmUoJy4vQVROU3RhdGUnKS5EZWNpc2lvblN0YXRlO1xudmFyIFNlbWFudGljQ29udGV4dCA9IHJlcXVpcmUoJy4vU2VtYW50aWNDb250ZXh0JykuU2VtYW50aWNDb250ZXh0O1xudmFyIEhhc2ggPSByZXF1aXJlKFwiLi4vVXRpbHNcIikuSGFzaDtcblxuXG5mdW5jdGlvbiBjaGVja1BhcmFtcyhwYXJhbXMsIGlzQ2ZnKSB7XG5cdGlmKHBhcmFtcz09PW51bGwpIHtcblx0XHR2YXIgcmVzdWx0ID0geyBzdGF0ZTpudWxsLCBhbHQ6bnVsbCwgY29udGV4dDpudWxsLCBzZW1hbnRpY0NvbnRleHQ6bnVsbCB9O1xuXHRcdGlmKGlzQ2ZnKSB7XG5cdFx0XHRyZXN1bHQucmVhY2hlc0ludG9PdXRlckNvbnRleHQgPSAwO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9IGVsc2Uge1xuXHRcdHZhciBwcm9wcyA9IHt9O1xuXHRcdHByb3BzLnN0YXRlID0gcGFyYW1zLnN0YXRlIHx8IG51bGw7XG5cdFx0cHJvcHMuYWx0ID0gKHBhcmFtcy5hbHQgPT09IHVuZGVmaW5lZCkgPyBudWxsIDogcGFyYW1zLmFsdDtcblx0XHRwcm9wcy5jb250ZXh0ID0gcGFyYW1zLmNvbnRleHQgfHwgbnVsbDtcblx0XHRwcm9wcy5zZW1hbnRpY0NvbnRleHQgPSBwYXJhbXMuc2VtYW50aWNDb250ZXh0IHx8IG51bGw7XG5cdFx0aWYoaXNDZmcpIHtcblx0XHRcdHByb3BzLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0ID0gcGFyYW1zLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0IHx8IDA7XG5cdFx0XHRwcm9wcy5wcmVjZWRlbmNlRmlsdGVyU3VwcHJlc3NlZCA9IHBhcmFtcy5wcmVjZWRlbmNlRmlsdGVyU3VwcHJlc3NlZCB8fCBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHByb3BzO1xuXHR9XG59XG5cbmZ1bmN0aW9uIEFUTkNvbmZpZyhwYXJhbXMsIGNvbmZpZykge1xuXHR0aGlzLmNoZWNrQ29udGV4dChwYXJhbXMsIGNvbmZpZyk7XG5cdHBhcmFtcyA9IGNoZWNrUGFyYW1zKHBhcmFtcyk7XG5cdGNvbmZpZyA9IGNoZWNrUGFyYW1zKGNvbmZpZywgdHJ1ZSk7XG4gICAgLy8gVGhlIEFUTiBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhpcyBjb25maWd1cmF0aW9uLy8vXG4gICAgdGhpcy5zdGF0ZSA9IHBhcmFtcy5zdGF0ZSE9PW51bGwgPyBwYXJhbXMuc3RhdGUgOiBjb25maWcuc3RhdGU7XG4gICAgLy8gV2hhdCBhbHQgKG9yIGxleGVyIHJ1bGUpIGlzIHByZWRpY3RlZCBieSB0aGlzIGNvbmZpZ3VyYXRpb24vLy9cbiAgICB0aGlzLmFsdCA9IHBhcmFtcy5hbHQhPT1udWxsID8gcGFyYW1zLmFsdCA6IGNvbmZpZy5hbHQ7XG4gICAgLy8gVGhlIHN0YWNrIG9mIGludm9raW5nIHN0YXRlcyBsZWFkaW5nIHRvIHRoZSBydWxlL3N0YXRlcyBhc3NvY2lhdGVkXG4gICAgLy8gIHdpdGggdGhpcyBjb25maWcuICBXZSB0cmFjayBvbmx5IHRob3NlIGNvbnRleHRzIHB1c2hlZCBkdXJpbmdcbiAgICAvLyAgZXhlY3V0aW9uIG9mIHRoZSBBVE4gc2ltdWxhdG9yLlxuICAgIHRoaXMuY29udGV4dCA9IHBhcmFtcy5jb250ZXh0IT09bnVsbCA/IHBhcmFtcy5jb250ZXh0IDogY29uZmlnLmNvbnRleHQ7XG4gICAgdGhpcy5zZW1hbnRpY0NvbnRleHQgPSBwYXJhbXMuc2VtYW50aWNDb250ZXh0IT09bnVsbCA/IHBhcmFtcy5zZW1hbnRpY0NvbnRleHQgOlxuICAgICAgICAoY29uZmlnLnNlbWFudGljQ29udGV4dCE9PW51bGwgPyBjb25maWcuc2VtYW50aWNDb250ZXh0IDogU2VtYW50aWNDb250ZXh0Lk5PTkUpO1xuICAgIC8vIFdlIGNhbm5vdCBleGVjdXRlIHByZWRpY2F0ZXMgZGVwZW5kZW50IHVwb24gbG9jYWwgY29udGV4dCB1bmxlc3NcbiAgICAvLyB3ZSBrbm93IGZvciBzdXJlIHdlIGFyZSBpbiB0aGUgY29ycmVjdCBjb250ZXh0LiBCZWNhdXNlIHRoZXJlIGlzXG4gICAgLy8gbm8gd2F5IHRvIGRvIHRoaXMgZWZmaWNpZW50bHksIHdlIHNpbXBseSBjYW5ub3QgZXZhbHVhdGVcbiAgICAvLyBkZXBlbmRlbnQgcHJlZGljYXRlcyB1bmxlc3Mgd2UgYXJlIGluIHRoZSBydWxlIHRoYXQgaW5pdGlhbGx5XG4gICAgLy8gaW52b2tlcyB0aGUgQVROIHNpbXVsYXRvci5cbiAgICAvL1xuICAgIC8vIGNsb3N1cmUoKSB0cmFja3MgdGhlIGRlcHRoIG9mIGhvdyBmYXIgd2UgZGlwIGludG8gdGhlXG4gICAgLy8gb3V0ZXIgY29udGV4dDogZGVwdGggJmd0OyAwLiAgTm90ZSB0aGF0IGl0IG1heSBub3QgYmUgdG90YWxseVxuICAgIC8vIGFjY3VyYXRlIGRlcHRoIHNpbmNlIEkgZG9uJ3QgZXZlciBkZWNyZW1lbnQuIFRPRE86IG1ha2UgaXQgYSBib29sZWFuIHRoZW5cbiAgICB0aGlzLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0ID0gY29uZmlnLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0O1xuICAgIHRoaXMucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQgPSBjb25maWcucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQ7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkFUTkNvbmZpZy5wcm90b3R5cGUuY2hlY2tDb250ZXh0ID0gZnVuY3Rpb24ocGFyYW1zLCBjb25maWcpIHtcblx0aWYoKHBhcmFtcy5jb250ZXh0PT09bnVsbCB8fCBwYXJhbXMuY29udGV4dD09PXVuZGVmaW5lZCkgJiZcblx0XHRcdChjb25maWc9PT1udWxsIHx8IGNvbmZpZy5jb250ZXh0PT09bnVsbCB8fCBjb25maWcuY29udGV4dD09PXVuZGVmaW5lZCkpIHtcblx0XHR0aGlzLmNvbnRleHQgPSBudWxsO1xuXHR9XG59O1xuXG5cbkFUTkNvbmZpZy5wcm90b3R5cGUuaGFzaENvZGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG4gICAgdGhpcy51cGRhdGVIYXNoQ29kZShoYXNoKTtcbiAgICByZXR1cm4gaGFzaC5maW5pc2goKTtcbn07XG5cblxuQVROQ29uZmlnLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLnN0YXRlLnN0YXRlTnVtYmVyLCB0aGlzLmFsdCwgdGhpcy5jb250ZXh0LCB0aGlzLnNlbWFudGljQ29udGV4dCk7XG59O1xuXG4vLyBBbiBBVE4gY29uZmlndXJhdGlvbiBpcyBlcXVhbCB0byBhbm90aGVyIGlmIGJvdGggaGF2ZVxuLy8gIHRoZSBzYW1lIHN0YXRlLCB0aGV5IHByZWRpY3QgdGhlIHNhbWUgYWx0ZXJuYXRpdmUsIGFuZFxuLy8gIHN5bnRhY3RpYy9zZW1hbnRpYyBjb250ZXh0cyBhcmUgdGhlIHNhbWUuXG5cbkFUTkNvbmZpZy5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBpZiAodGhpcyA9PT0gb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghIChvdGhlciBpbnN0YW5jZW9mIEFUTkNvbmZpZykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnN0YXRlTnVtYmVyPT09b3RoZXIuc3RhdGUuc3RhdGVOdW1iZXIgJiZcbiAgICAgICAgICAgIHRoaXMuYWx0PT09b3RoZXIuYWx0ICYmXG4gICAgICAgICAgICAodGhpcy5jb250ZXh0PT09bnVsbCA/IG90aGVyLmNvbnRleHQ9PT1udWxsIDogdGhpcy5jb250ZXh0LmVxdWFscyhvdGhlci5jb250ZXh0KSkgJiZcbiAgICAgICAgICAgIHRoaXMuc2VtYW50aWNDb250ZXh0LmVxdWFscyhvdGhlci5zZW1hbnRpY0NvbnRleHQpICYmXG4gICAgICAgICAgICB0aGlzLnByZWNlZGVuY2VGaWx0ZXJTdXBwcmVzc2VkPT09b3RoZXIucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQ7XG4gICAgfVxufTtcblxuXG5BVE5Db25maWcucHJvdG90eXBlLmhhc2hDb2RlRm9yQ29uZmlnU2V0ID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGhhc2ggPSBuZXcgSGFzaCgpO1xuICAgIGhhc2gudXBkYXRlKHRoaXMuc3RhdGUuc3RhdGVOdW1iZXIsIHRoaXMuYWx0LCB0aGlzLnNlbWFudGljQ29udGV4dCk7XG4gICAgcmV0dXJuIGhhc2guZmluaXNoKCk7XG59O1xuXG5cbkFUTkNvbmZpZy5wcm90b3R5cGUuZXF1YWxzRm9yQ29uZmlnU2V0ID0gZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBpZiAodGhpcyA9PT0gb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghIChvdGhlciBpbnN0YW5jZW9mIEFUTkNvbmZpZykpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlLnN0YXRlTnVtYmVyPT09b3RoZXIuc3RhdGUuc3RhdGVOdW1iZXIgJiZcbiAgICAgICAgICAgIHRoaXMuYWx0PT09b3RoZXIuYWx0ICYmXG4gICAgICAgICAgICB0aGlzLnNlbWFudGljQ29udGV4dC5lcXVhbHMob3RoZXIuc2VtYW50aWNDb250ZXh0KTtcbiAgICB9XG59O1xuXG5cbkFUTkNvbmZpZy5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCIoXCIgKyB0aGlzLnN0YXRlICsgXCIsXCIgKyB0aGlzLmFsdCArXG4gICAgICAgICh0aGlzLmNvbnRleHQhPT1udWxsID8gXCIsW1wiICsgdGhpcy5jb250ZXh0LnRvU3RyaW5nKCkgKyBcIl1cIiA6IFwiXCIpICtcbiAgICAgICAgKHRoaXMuc2VtYW50aWNDb250ZXh0ICE9PSBTZW1hbnRpY0NvbnRleHQuTk9ORSA/XG4gICAgICAgICAgICAgICAgKFwiLFwiICsgdGhpcy5zZW1hbnRpY0NvbnRleHQudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICA6IFwiXCIpICtcbiAgICAgICAgKHRoaXMucmVhY2hlc0ludG9PdXRlckNvbnRleHQ+MCA/XG4gICAgICAgICAgICAgICAgKFwiLHVwPVwiICsgdGhpcy5yZWFjaGVzSW50b091dGVyQ29udGV4dClcbiAgICAgICAgICAgICAgICA6IFwiXCIpICsgXCIpXCI7XG59O1xuXG5cbmZ1bmN0aW9uIExleGVyQVROQ29uZmlnKHBhcmFtcywgY29uZmlnKSB7XG5cdEFUTkNvbmZpZy5jYWxsKHRoaXMsIHBhcmFtcywgY29uZmlnKTtcblxuICAgIC8vIFRoaXMgaXMgdGhlIGJhY2tpbmcgZmllbGQgZm9yIHtAbGluayAvL2dldExleGVyQWN0aW9uRXhlY3V0b3J9LlxuXHR2YXIgbGV4ZXJBY3Rpb25FeGVjdXRvciA9IHBhcmFtcy5sZXhlckFjdGlvbkV4ZWN1dG9yIHx8IG51bGw7XG4gICAgdGhpcy5sZXhlckFjdGlvbkV4ZWN1dG9yID0gbGV4ZXJBY3Rpb25FeGVjdXRvciB8fCAoY29uZmlnIT09bnVsbCA/IGNvbmZpZy5sZXhlckFjdGlvbkV4ZWN1dG9yIDogbnVsbCk7XG4gICAgdGhpcy5wYXNzZWRUaHJvdWdoTm9uR3JlZWR5RGVjaXNpb24gPSBjb25maWchPT1udWxsID8gdGhpcy5jaGVja05vbkdyZWVkeURlY2lzaW9uKGNvbmZpZywgdGhpcy5zdGF0ZSkgOiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJBVE5Db25maWcucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBVE5Db25maWcucHJvdG90eXBlKTtcbkxleGVyQVROQ29uZmlnLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExleGVyQVROQ29uZmlnO1xuXG5MZXhlckFUTkNvbmZpZy5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5zdGF0ZS5zdGF0ZU51bWJlciwgdGhpcy5hbHQsIHRoaXMuY29udGV4dCwgdGhpcy5zZW1hbnRpY0NvbnRleHQsIHRoaXMucGFzc2VkVGhyb3VnaE5vbkdyZWVkeURlY2lzaW9uLCB0aGlzLmxleGVyQWN0aW9uRXhlY3V0b3IpO1xufTtcblxuTGV4ZXJBVE5Db25maWcucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgcmV0dXJuIHRoaXMgPT09IG90aGVyIHx8XG4gICAgICAgICAgICAob3RoZXIgaW5zdGFuY2VvZiBMZXhlckFUTkNvbmZpZyAmJlxuICAgICAgICAgICAgdGhpcy5wYXNzZWRUaHJvdWdoTm9uR3JlZWR5RGVjaXNpb24gPT0gb3RoZXIucGFzc2VkVGhyb3VnaE5vbkdyZWVkeURlY2lzaW9uICYmXG4gICAgICAgICAgICAodGhpcy5sZXhlckFjdGlvbkV4ZWN1dG9yID8gdGhpcy5sZXhlckFjdGlvbkV4ZWN1dG9yLmVxdWFscyhvdGhlci5sZXhlckFjdGlvbkV4ZWN1dG9yKSA6ICFvdGhlci5sZXhlckFjdGlvbkV4ZWN1dG9yKSAmJlxuICAgICAgICAgICAgQVROQ29uZmlnLnByb3RvdHlwZS5lcXVhbHMuY2FsbCh0aGlzLCBvdGhlcikpO1xufTtcblxuTGV4ZXJBVE5Db25maWcucHJvdG90eXBlLmhhc2hDb2RlRm9yQ29uZmlnU2V0ID0gTGV4ZXJBVE5Db25maWcucHJvdG90eXBlLmhhc2hDb2RlO1xuXG5MZXhlckFUTkNvbmZpZy5wcm90b3R5cGUuZXF1YWxzRm9yQ29uZmlnU2V0ID0gTGV4ZXJBVE5Db25maWcucHJvdG90eXBlLmVxdWFscztcblxuXG5MZXhlckFUTkNvbmZpZy5wcm90b3R5cGUuY2hlY2tOb25HcmVlZHlEZWNpc2lvbiA9IGZ1bmN0aW9uKHNvdXJjZSwgdGFyZ2V0KSB7XG4gICAgcmV0dXJuIHNvdXJjZS5wYXNzZWRUaHJvdWdoTm9uR3JlZWR5RGVjaXNpb24gfHxcbiAgICAgICAgKHRhcmdldCBpbnN0YW5jZW9mIERlY2lzaW9uU3RhdGUpICYmIHRhcmdldC5ub25HcmVlZHk7XG59O1xuXG5leHBvcnRzLkFUTkNvbmZpZyA9IEFUTkNvbmZpZztcbmV4cG9ydHMuTGV4ZXJBVE5Db25maWcgPSBMZXhlckFUTkNvbmZpZzsiLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG4vL1xuLy8gU3BlY2lhbGl6ZWQge0BsaW5rIFNldH17QGNvZGUgPH17QGxpbmsgQVROQ29uZmlnfXtAY29kZSA+fSB0aGF0IGNhbiB0cmFja1xuLy8gaW5mbyBhYm91dCB0aGUgc2V0LCB3aXRoIHN1cHBvcnQgZm9yIGNvbWJpbmluZyBzaW1pbGFyIGNvbmZpZ3VyYXRpb25zIHVzaW5nIGFcbi8vIGdyYXBoLXN0cnVjdHVyZWQgc3RhY2suXG4vLy9cblxudmFyIEFUTiA9IHJlcXVpcmUoJy4vQVROJykuQVROO1xudmFyIFV0aWxzID0gcmVxdWlyZSgnLi8uLi9VdGlscycpO1xudmFyIEhhc2ggPSBVdGlscy5IYXNoO1xudmFyIFNldCA9IFV0aWxzLlNldDtcbnZhciBTZW1hbnRpY0NvbnRleHQgPSByZXF1aXJlKCcuL1NlbWFudGljQ29udGV4dCcpLlNlbWFudGljQ29udGV4dDtcbnZhciBtZXJnZSA9IHJlcXVpcmUoJy4vLi4vUHJlZGljdGlvbkNvbnRleHQnKS5tZXJnZTtcblxuZnVuY3Rpb24gaGFzaEFUTkNvbmZpZyhjKSB7XG5cdHJldHVybiBjLmhhc2hDb2RlRm9yQ29uZmlnU2V0KCk7XG59XG5cbmZ1bmN0aW9uIGVxdWFsQVROQ29uZmlncyhhLCBiKSB7XG5cdGlmICggYT09PWIgKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoIGE9PT1udWxsIHx8IGI9PT1udWxsICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlXG4gICAgICAgcmV0dXJuIGEuZXF1YWxzRm9yQ29uZmlnU2V0KGIpO1xuIH1cblxuXG5mdW5jdGlvbiBBVE5Db25maWdTZXQoZnVsbEN0eCkge1xuXHQvL1xuXHQvLyBUaGUgcmVhc29uIHRoYXQgd2UgbmVlZCB0aGlzIGlzIGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0aGUgaGFzaCBtYXAgdG8gdXNlXG5cdC8vIHRoZSBzdGFuZGFyZCBoYXNoIGNvZGUgYW5kIGVxdWFscy4gV2UgbmVlZCBhbGwgY29uZmlndXJhdGlvbnMgd2l0aCB0aGVcblx0Ly8gc2FtZVxuXHQvLyB7QGNvZGUgKHMsaSxfLHNlbWN0eCl9IHRvIGJlIGVxdWFsLiBVbmZvcnR1bmF0ZWx5LCB0aGlzIGtleSBlZmZlY3RpdmVseVxuXHQvLyBkb3VibGVzXG5cdC8vIHRoZSBudW1iZXIgb2Ygb2JqZWN0cyBhc3NvY2lhdGVkIHdpdGggQVROQ29uZmlncy4gVGhlIG90aGVyIHNvbHV0aW9uIGlzXG5cdC8vIHRvXG5cdC8vIHVzZSBhIGhhc2ggdGFibGUgdGhhdCBsZXRzIHVzIHNwZWNpZnkgdGhlIGVxdWFscy9oYXNoY29kZSBvcGVyYXRpb24uXG5cdC8vIEFsbCBjb25maWdzIGJ1dCBoYXNoZWQgYnkgKHMsIGksIF8sIHBpKSBub3QgaW5jbHVkaW5nIGNvbnRleHQuIFdpcGVkIG91dFxuXHQvLyB3aGVuIHdlIGdvIHJlYWRvbmx5IGFzIHRoaXMgc2V0IGJlY29tZXMgYSBERkEgc3RhdGUuXG5cdHRoaXMuY29uZmlnTG9va3VwID0gbmV3IFNldChoYXNoQVROQ29uZmlnLCBlcXVhbEFUTkNvbmZpZ3MpO1xuXHQvLyBJbmRpY2F0ZXMgdGhhdCB0aGlzIGNvbmZpZ3VyYXRpb24gc2V0IGlzIHBhcnQgb2YgYSBmdWxsIGNvbnRleHRcblx0Ly8gTEwgcHJlZGljdGlvbi4gSXQgd2lsbCBiZSB1c2VkIHRvIGRldGVybWluZSBob3cgdG8gbWVyZ2UgJC4gV2l0aCBTTExcblx0Ly8gaXQncyBhIHdpbGRjYXJkIHdoZXJlYXMgaXQgaXMgbm90IGZvciBMTCBjb250ZXh0IG1lcmdlLlxuXHR0aGlzLmZ1bGxDdHggPSBmdWxsQ3R4ID09PSB1bmRlZmluZWQgPyB0cnVlIDogZnVsbEN0eDtcblx0Ly8gSW5kaWNhdGVzIHRoYXQgdGhlIHNldCBvZiBjb25maWd1cmF0aW9ucyBpcyByZWFkLW9ubHkuIERvIG5vdFxuXHQvLyBhbGxvdyBhbnkgY29kZSB0byBtYW5pcHVsYXRlIHRoZSBzZXQ7IERGQSBzdGF0ZXMgd2lsbCBwb2ludCBhdFxuXHQvLyB0aGUgc2V0cyBhbmQgdGhleSBtdXN0IG5vdCBjaGFuZ2UuIFRoaXMgZG9lcyBub3QgcHJvdGVjdCB0aGUgb3RoZXJcblx0Ly8gZmllbGRzOyBpbiBwYXJ0aWN1bGFyLCBjb25mbGljdGluZ0FsdHMgaXMgc2V0IGFmdGVyXG5cdC8vIHdlJ3ZlIG1hZGUgdGhpcyByZWFkb25seS5cblx0dGhpcy5yZWFkT25seSA9IGZhbHNlO1xuXHQvLyBUcmFjayB0aGUgZWxlbWVudHMgYXMgdGhleSBhcmUgYWRkZWQgdG8gdGhlIHNldDsgc3VwcG9ydHMgZ2V0KGkpLy8vXG5cdHRoaXMuY29uZmlncyA9IFtdO1xuXG5cdC8vIFRPRE86IHRoZXNlIGZpZWxkcyBtYWtlIG1lIHByZXR0eSB1bmNvbWZvcnRhYmxlIGJ1dCBuaWNlIHRvIHBhY2sgdXAgaW5mb1xuXHQvLyB0b2dldGhlciwgc2F2ZXMgcmVjb21wdXRhdGlvblxuXHQvLyBUT0RPOiBjYW4gd2UgdHJhY2sgY29uZmxpY3RzIGFzIHRoZXkgYXJlIGFkZGVkIHRvIHNhdmUgc2Nhbm5pbmcgY29uZmlnc1xuXHQvLyBsYXRlcj9cblx0dGhpcy51bmlxdWVBbHQgPSAwO1xuXHR0aGlzLmNvbmZsaWN0aW5nQWx0cyA9IG51bGw7XG5cblx0Ly8gVXNlZCBpbiBwYXJzZXIgYW5kIGxleGVyLiBJbiBsZXhlciwgaXQgaW5kaWNhdGVzIHdlIGhpdCBhIHByZWRcblx0Ly8gd2hpbGUgY29tcHV0aW5nIGEgY2xvc3VyZSBvcGVyYXRpb24uIERvbid0IG1ha2UgYSBERkEgc3RhdGUgZnJvbSB0aGlzLlxuXHR0aGlzLmhhc1NlbWFudGljQ29udGV4dCA9IGZhbHNlO1xuXHR0aGlzLmRpcHNJbnRvT3V0ZXJDb250ZXh0ID0gZmFsc2U7XG5cblx0dGhpcy5jYWNoZWRIYXNoQ29kZSA9IC0xO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG4vLyBBZGRpbmcgYSBuZXcgY29uZmlnIG1lYW5zIG1lcmdpbmcgY29udGV4dHMgd2l0aCBleGlzdGluZyBjb25maWdzIGZvclxuLy8ge0Bjb2RlIChzLCBpLCBwaSwgXyl9LCB3aGVyZSB7QGNvZGUgc30gaXMgdGhlXG4vLyB7QGxpbmsgQVROQ29uZmlnLy9zdGF0ZX0sIHtAY29kZSBpfSBpcyB0aGUge0BsaW5rIEFUTkNvbmZpZy8vYWx0fSwgYW5kXG4vLyB7QGNvZGUgcGl9IGlzIHRoZSB7QGxpbmsgQVROQ29uZmlnLy9zZW1hbnRpY0NvbnRleHR9LiBXZSB1c2Vcbi8vIHtAY29kZSAocyxpLHBpKX0gYXMga2V5LlxuLy9cbi8vIDxwPlRoaXMgbWV0aG9kIHVwZGF0ZXMge0BsaW5rIC8vZGlwc0ludG9PdXRlckNvbnRleHR9IGFuZFxuLy8ge0BsaW5rIC8vaGFzU2VtYW50aWNDb250ZXh0fSB3aGVuIG5lY2Vzc2FyeS48L3A+XG4vLyAvXG5BVE5Db25maWdTZXQucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKGNvbmZpZywgbWVyZ2VDYWNoZSkge1xuXHRpZiAobWVyZ2VDYWNoZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0bWVyZ2VDYWNoZSA9IG51bGw7XG5cdH1cblx0aWYgKHRoaXMucmVhZE9ubHkpIHtcblx0XHR0aHJvdyBcIlRoaXMgc2V0IGlzIHJlYWRvbmx5XCI7XG5cdH1cblx0aWYgKGNvbmZpZy5zZW1hbnRpY0NvbnRleHQgIT09IFNlbWFudGljQ29udGV4dC5OT05FKSB7XG5cdFx0dGhpcy5oYXNTZW1hbnRpY0NvbnRleHQgPSB0cnVlO1xuXHR9XG5cdGlmIChjb25maWcucmVhY2hlc0ludG9PdXRlckNvbnRleHQgPiAwKSB7XG5cdFx0dGhpcy5kaXBzSW50b091dGVyQ29udGV4dCA9IHRydWU7XG5cdH1cblx0dmFyIGV4aXN0aW5nID0gdGhpcy5jb25maWdMb29rdXAuYWRkKGNvbmZpZyk7XG5cdGlmIChleGlzdGluZyA9PT0gY29uZmlnKSB7XG5cdFx0dGhpcy5jYWNoZWRIYXNoQ29kZSA9IC0xO1xuXHRcdHRoaXMuY29uZmlncy5wdXNoKGNvbmZpZyk7IC8vIHRyYWNrIG9yZGVyIGhlcmVcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHQvLyBhIHByZXZpb3VzIChzLGkscGksXyksIG1lcmdlIHdpdGggaXQgYW5kIHNhdmUgcmVzdWx0XG5cdHZhciByb290SXNXaWxkY2FyZCA9ICF0aGlzLmZ1bGxDdHg7XG5cdHZhciBtZXJnZWQgPSBtZXJnZShleGlzdGluZy5jb250ZXh0LCBjb25maWcuY29udGV4dCwgcm9vdElzV2lsZGNhcmQsIG1lcmdlQ2FjaGUpO1xuXHQvLyBubyBuZWVkIHRvIGNoZWNrIGZvciBleGlzdGluZy5jb250ZXh0LCBjb25maWcuY29udGV4dCBpbiBjYWNoZVxuXHQvLyBzaW5jZSBvbmx5IHdheSB0byBjcmVhdGUgbmV3IGdyYXBocyBpcyBcImNhbGwgcnVsZVwiIGFuZCBoZXJlLiBXZVxuXHQvLyBjYWNoZSBhdCBib3RoIHBsYWNlcy5cblx0ZXhpc3RpbmcucmVhY2hlc0ludG9PdXRlckNvbnRleHQgPSBNYXRoLm1heCggZXhpc3RpbmcucmVhY2hlc0ludG9PdXRlckNvbnRleHQsIGNvbmZpZy5yZWFjaGVzSW50b091dGVyQ29udGV4dCk7XG5cdC8vIG1ha2Ugc3VyZSB0byBwcmVzZXJ2ZSB0aGUgcHJlY2VkZW5jZSBmaWx0ZXIgc3VwcHJlc3Npb24gZHVyaW5nIHRoZSBtZXJnZVxuXHRpZiAoY29uZmlnLnByZWNlZGVuY2VGaWx0ZXJTdXBwcmVzc2VkKSB7XG5cdFx0ZXhpc3RpbmcucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQgPSB0cnVlO1xuXHR9XG5cdGV4aXN0aW5nLmNvbnRleHQgPSBtZXJnZWQ7IC8vIHJlcGxhY2UgY29udGV4dDsgbm8gbmVlZCB0byBhbHQgbWFwcGluZ1xuXHRyZXR1cm4gdHJ1ZTtcbn07XG5cbkFUTkNvbmZpZ1NldC5wcm90b3R5cGUuZ2V0U3RhdGVzID0gZnVuY3Rpb24oKSB7XG5cdHZhciBzdGF0ZXMgPSBuZXcgU2V0KCk7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb25maWdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0c3RhdGVzLmFkZCh0aGlzLmNvbmZpZ3NbaV0uc3RhdGUpO1xuXHR9XG5cdHJldHVybiBzdGF0ZXM7XG59O1xuXG5BVE5Db25maWdTZXQucHJvdG90eXBlLmdldFByZWRpY2F0ZXMgPSBmdW5jdGlvbigpIHtcblx0dmFyIHByZWRzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb25maWdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGMgPSB0aGlzLmNvbmZpZ3NbaV0uc2VtYW50aWNDb250ZXh0O1xuXHRcdGlmIChjICE9PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdFx0cHJlZHMucHVzaChjLnNlbWFudGljQ29udGV4dCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBwcmVkcztcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBVE5Db25maWdTZXQucHJvdG90eXBlLCBcIml0ZW1zXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuY29uZmlncztcblx0fVxufSk7XG5cbkFUTkNvbmZpZ1NldC5wcm90b3R5cGUub3B0aW1pemVDb25maWdzID0gZnVuY3Rpb24oaW50ZXJwcmV0ZXIpIHtcblx0aWYgKHRoaXMucmVhZE9ubHkpIHtcblx0XHR0aHJvdyBcIlRoaXMgc2V0IGlzIHJlYWRvbmx5XCI7XG5cdH1cblx0aWYgKHRoaXMuY29uZmlnTG9va3VwLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybjtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29uZmlncy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBjb25maWcgPSB0aGlzLmNvbmZpZ3NbaV07XG5cdFx0Y29uZmlnLmNvbnRleHQgPSBpbnRlcnByZXRlci5nZXRDYWNoZWRDb250ZXh0KGNvbmZpZy5jb250ZXh0KTtcblx0fVxufTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5hZGRBbGwgPSBmdW5jdGlvbihjb2xsKSB7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgY29sbC5sZW5ndGg7IGkrKykge1xuXHRcdHRoaXMuYWRkKGNvbGxbaV0pO1xuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbkFUTkNvbmZpZ1NldC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0cmV0dXJuIHRoaXMgPT09IG90aGVyIHx8XG5cdFx0KG90aGVyIGluc3RhbmNlb2YgQVROQ29uZmlnU2V0ICYmXG5cdFx0VXRpbHMuZXF1YWxBcnJheXModGhpcy5jb25maWdzLCBvdGhlci5jb25maWdzKSAmJlxuXHRcdHRoaXMuZnVsbEN0eCA9PT0gb3RoZXIuZnVsbEN0eCAmJlxuXHRcdHRoaXMudW5pcXVlQWx0ID09PSBvdGhlci51bmlxdWVBbHQgJiZcblx0XHR0aGlzLmNvbmZsaWN0aW5nQWx0cyA9PT0gb3RoZXIuY29uZmxpY3RpbmdBbHRzICYmXG5cdFx0dGhpcy5oYXNTZW1hbnRpY0NvbnRleHQgPT09IG90aGVyLmhhc1NlbWFudGljQ29udGV4dCAmJlxuXHRcdHRoaXMuZGlwc0ludG9PdXRlckNvbnRleHQgPT09IG90aGVyLmRpcHNJbnRvT3V0ZXJDb250ZXh0KTtcbn07XG5cbkFUTkNvbmZpZ1NldC5wcm90b3R5cGUuaGFzaENvZGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG4gICAgdGhpcy51cGRhdGVIYXNoQ29kZShoYXNoKTtcbiAgICByZXR1cm4gaGFzaC5maW5pc2goKTtcbn07XG5cblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcblx0aWYgKHRoaXMucmVhZE9ubHkpIHtcblx0XHRpZiAodGhpcy5jYWNoZWRIYXNoQ29kZSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHZhciBoYXNoID0gbmV3IEhhc2goKTtcbiAgICAgICAgICAgIGhhc2gudXBkYXRlKHRoaXMuY29uZmlncyk7XG5cdFx0XHR0aGlzLmNhY2hlZEhhc2hDb2RlID0gaGFzaC5maW5pc2goKTtcblx0XHR9XG4gICAgICAgIGhhc2gudXBkYXRlKHRoaXMuY2FjaGVkSGFzaENvZGUpO1xuXHR9IGVsc2Uge1xuICAgICAgICBoYXNoLnVwZGF0ZSh0aGlzLmNvbmZpZ3MpO1xuXHR9XG59O1xuXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShBVE5Db25maWdTZXQucHJvdG90eXBlLCBcImxlbmd0aFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmNvbmZpZ3MubGVuZ3RoO1xuXHR9XG59KTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLmNvbmZpZ3MubGVuZ3RoID09PSAwO1xufTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKGl0ZW0pIHtcblx0aWYgKHRoaXMuY29uZmlnTG9va3VwID09PSBudWxsKSB7XG5cdFx0dGhyb3cgXCJUaGlzIG1ldGhvZCBpcyBub3QgaW1wbGVtZW50ZWQgZm9yIHJlYWRvbmx5IHNldHMuXCI7XG5cdH1cblx0cmV0dXJuIHRoaXMuY29uZmlnTG9va3VwLmNvbnRhaW5zKGl0ZW0pO1xufTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5jb250YWluc0Zhc3QgPSBmdW5jdGlvbihpdGVtKSB7XG5cdGlmICh0aGlzLmNvbmZpZ0xvb2t1cCA9PT0gbnVsbCkge1xuXHRcdHRocm93IFwiVGhpcyBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkIGZvciByZWFkb25seSBzZXRzLlwiO1xuXHR9XG5cdHJldHVybiB0aGlzLmNvbmZpZ0xvb2t1cC5jb250YWluc0Zhc3QoaXRlbSk7XG59O1xuXG5BVE5Db25maWdTZXQucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24oKSB7XG5cdGlmICh0aGlzLnJlYWRPbmx5KSB7XG5cdFx0dGhyb3cgXCJUaGlzIHNldCBpcyByZWFkb25seVwiO1xuXHR9XG5cdHRoaXMuY29uZmlncyA9IFtdO1xuXHR0aGlzLmNhY2hlZEhhc2hDb2RlID0gLTE7XG5cdHRoaXMuY29uZmlnTG9va3VwID0gbmV3IFNldCgpO1xufTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5zZXRSZWFkb25seSA9IGZ1bmN0aW9uKHJlYWRPbmx5KSB7XG5cdHRoaXMucmVhZE9ubHkgPSByZWFkT25seTtcblx0aWYgKHJlYWRPbmx5KSB7XG5cdFx0dGhpcy5jb25maWdMb29rdXAgPSBudWxsOyAvLyBjYW4ndCBtb2QsIG5vIG5lZWQgZm9yIGxvb2t1cCBjYWNoZVxuXHR9XG59O1xuXG5BVE5Db25maWdTZXQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBVdGlscy5hcnJheVRvU3RyaW5nKHRoaXMuY29uZmlncykgK1xuXHRcdCh0aGlzLmhhc1NlbWFudGljQ29udGV4dCA/IFwiLGhhc1NlbWFudGljQ29udGV4dD1cIiArIHRoaXMuaGFzU2VtYW50aWNDb250ZXh0IDogXCJcIikgK1xuXHRcdCh0aGlzLnVuaXF1ZUFsdCAhPT0gQVROLklOVkFMSURfQUxUX05VTUJFUiA/IFwiLHVuaXF1ZUFsdD1cIiArIHRoaXMudW5pcXVlQWx0IDogXCJcIikgK1xuXHRcdCh0aGlzLmNvbmZsaWN0aW5nQWx0cyAhPT0gbnVsbCA/IFwiLGNvbmZsaWN0aW5nQWx0cz1cIiArIHRoaXMuY29uZmxpY3RpbmdBbHRzIDogXCJcIikgK1xuXHRcdCh0aGlzLmRpcHNJbnRvT3V0ZXJDb250ZXh0ID8gXCIsZGlwc0ludG9PdXRlckNvbnRleHRcIiA6IFwiXCIpO1xufTtcblxuZnVuY3Rpb24gT3JkZXJlZEFUTkNvbmZpZ1NldCgpIHtcblx0QVROQ29uZmlnU2V0LmNhbGwodGhpcyk7XG5cdHRoaXMuY29uZmlnTG9va3VwID0gbmV3IFNldCgpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuT3JkZXJlZEFUTkNvbmZpZ1NldC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFUTkNvbmZpZ1NldC5wcm90b3R5cGUpO1xuT3JkZXJlZEFUTkNvbmZpZ1NldC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPcmRlcmVkQVROQ29uZmlnU2V0O1xuXG5leHBvcnRzLkFUTkNvbmZpZ1NldCA9IEFUTkNvbmZpZ1NldDtcbmV4cG9ydHMuT3JkZXJlZEFUTkNvbmZpZ1NldCA9IE9yZGVyZWRBVE5Db25maWdTZXQ7XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbmZ1bmN0aW9uIEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMoY29weUZyb20pIHtcblx0aWYoY29weUZyb209PT11bmRlZmluZWQpIHtcblx0XHRjb3B5RnJvbSA9IG51bGw7XG5cdH1cblx0dGhpcy5yZWFkT25seSA9IGZhbHNlO1xuICAgIHRoaXMudmVyaWZ5QVROID0gY29weUZyb209PT1udWxsID8gdHJ1ZSA6IGNvcHlGcm9tLnZlcmlmeUFUTjtcbiAgICB0aGlzLmdlbmVyYXRlUnVsZUJ5cGFzc1RyYW5zaXRpb25zID0gY29weUZyb209PT1udWxsID8gZmFsc2UgOiBjb3B5RnJvbS5nZW5lcmF0ZVJ1bGVCeXBhc3NUcmFuc2l0aW9ucztcblxuICAgIHJldHVybiB0aGlzO1xufVxuXG5BVE5EZXNlcmlhbGl6YXRpb25PcHRpb25zLmRlZmF1bHRPcHRpb25zID0gbmV3IEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMoKTtcbkFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMuZGVmYXVsdE9wdGlvbnMucmVhZE9ubHkgPSB0cnVlO1xuXG4vLyAgICBkZWYgX19zZXRhdHRyX18oc2VsZiwga2V5LCB2YWx1ZSk6XG4vLyAgICAgICAgaWYga2V5IT1cInJlYWRPbmx5XCIgYW5kIHNlbGYucmVhZE9ubHk6XG4vLyAgICAgICAgICAgIHJhaXNlIEV4Y2VwdGlvbihcIlRoZSBvYmplY3QgaXMgcmVhZCBvbmx5LlwiKVxuLy8gICAgICAgIHN1cGVyKHR5cGUoc2VsZiksIHNlbGYpLl9fc2V0YXR0cl9fKGtleSx2YWx1ZSlcblxuZXhwb3J0cy5BVE5EZXNlcmlhbGl6YXRpb25PcHRpb25zID0gQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucztcbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxudmFyIFRva2VuID0gcmVxdWlyZSgnLi8uLi9Ub2tlbicpLlRva2VuO1xudmFyIEFUTiA9IHJlcXVpcmUoJy4vQVROJykuQVROO1xudmFyIEFUTlR5cGUgPSByZXF1aXJlKCcuL0FUTlR5cGUnKS5BVE5UeXBlO1xudmFyIEFUTlN0YXRlcyA9IHJlcXVpcmUoJy4vQVROU3RhdGUnKTtcbnZhciBBVE5TdGF0ZSA9IEFUTlN0YXRlcy5BVE5TdGF0ZTtcbnZhciBCYXNpY1N0YXRlID0gQVROU3RhdGVzLkJhc2ljU3RhdGU7XG52YXIgRGVjaXNpb25TdGF0ZSA9IEFUTlN0YXRlcy5EZWNpc2lvblN0YXRlO1xudmFyIEJsb2NrU3RhcnRTdGF0ZSA9IEFUTlN0YXRlcy5CbG9ja1N0YXJ0U3RhdGU7XG52YXIgQmxvY2tFbmRTdGF0ZSA9IEFUTlN0YXRlcy5CbG9ja0VuZFN0YXRlO1xudmFyIExvb3BFbmRTdGF0ZSA9IEFUTlN0YXRlcy5Mb29wRW5kU3RhdGU7XG52YXIgUnVsZVN0YXJ0U3RhdGUgPSBBVE5TdGF0ZXMuUnVsZVN0YXJ0U3RhdGU7XG52YXIgUnVsZVN0b3BTdGF0ZSA9IEFUTlN0YXRlcy5SdWxlU3RvcFN0YXRlO1xudmFyIFRva2Vuc1N0YXJ0U3RhdGUgPSBBVE5TdGF0ZXMuVG9rZW5zU3RhcnRTdGF0ZTtcbnZhciBQbHVzTG9vcGJhY2tTdGF0ZSA9IEFUTlN0YXRlcy5QbHVzTG9vcGJhY2tTdGF0ZTtcbnZhciBTdGFyTG9vcGJhY2tTdGF0ZSA9IEFUTlN0YXRlcy5TdGFyTG9vcGJhY2tTdGF0ZTtcbnZhciBTdGFyTG9vcEVudHJ5U3RhdGUgPSBBVE5TdGF0ZXMuU3Rhckxvb3BFbnRyeVN0YXRlO1xudmFyIFBsdXNCbG9ja1N0YXJ0U3RhdGUgPSBBVE5TdGF0ZXMuUGx1c0Jsb2NrU3RhcnRTdGF0ZTtcbnZhciBTdGFyQmxvY2tTdGFydFN0YXRlID0gQVROU3RhdGVzLlN0YXJCbG9ja1N0YXJ0U3RhdGU7XG52YXIgQmFzaWNCbG9ja1N0YXJ0U3RhdGUgPSBBVE5TdGF0ZXMuQmFzaWNCbG9ja1N0YXJ0U3RhdGU7XG52YXIgVHJhbnNpdGlvbnMgPSByZXF1aXJlKCcuL1RyYW5zaXRpb24nKTtcbnZhciBUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuVHJhbnNpdGlvbjtcbnZhciBBdG9tVHJhbnNpdGlvbiA9IFRyYW5zaXRpb25zLkF0b21UcmFuc2l0aW9uO1xudmFyIFNldFRyYW5zaXRpb24gPSBUcmFuc2l0aW9ucy5TZXRUcmFuc2l0aW9uO1xudmFyIE5vdFNldFRyYW5zaXRpb24gPSBUcmFuc2l0aW9ucy5Ob3RTZXRUcmFuc2l0aW9uO1xudmFyIFJ1bGVUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuUnVsZVRyYW5zaXRpb247XG52YXIgUmFuZ2VUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuUmFuZ2VUcmFuc2l0aW9uO1xudmFyIEFjdGlvblRyYW5zaXRpb24gPSBUcmFuc2l0aW9ucy5BY3Rpb25UcmFuc2l0aW9uO1xudmFyIEVwc2lsb25UcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuRXBzaWxvblRyYW5zaXRpb247XG52YXIgV2lsZGNhcmRUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuV2lsZGNhcmRUcmFuc2l0aW9uO1xudmFyIFByZWRpY2F0ZVRyYW5zaXRpb24gPSBUcmFuc2l0aW9ucy5QcmVkaWNhdGVUcmFuc2l0aW9uO1xudmFyIFByZWNlZGVuY2VQcmVkaWNhdGVUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuUHJlY2VkZW5jZVByZWRpY2F0ZVRyYW5zaXRpb247XG52YXIgSW50ZXJ2YWxTZXQgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWxTZXQ7XG52YXIgSW50ZXJ2YWwgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG52YXIgQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucyA9IHJlcXVpcmUoJy4vQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucycpLkFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnM7XG52YXIgTGV4ZXJBY3Rpb25zID0gcmVxdWlyZSgnLi9MZXhlckFjdGlvbicpO1xudmFyIExleGVyQWN0aW9uVHlwZSA9IExleGVyQWN0aW9ucy5MZXhlckFjdGlvblR5cGU7XG52YXIgTGV4ZXJTa2lwQWN0aW9uID0gTGV4ZXJBY3Rpb25zLkxleGVyU2tpcEFjdGlvbjtcbnZhciBMZXhlckNoYW5uZWxBY3Rpb24gPSBMZXhlckFjdGlvbnMuTGV4ZXJDaGFubmVsQWN0aW9uO1xudmFyIExleGVyQ3VzdG9tQWN0aW9uID0gTGV4ZXJBY3Rpb25zLkxleGVyQ3VzdG9tQWN0aW9uO1xudmFyIExleGVyTW9yZUFjdGlvbiA9IExleGVyQWN0aW9ucy5MZXhlck1vcmVBY3Rpb247XG52YXIgTGV4ZXJUeXBlQWN0aW9uID0gTGV4ZXJBY3Rpb25zLkxleGVyVHlwZUFjdGlvbjtcbnZhciBMZXhlclB1c2hNb2RlQWN0aW9uID0gTGV4ZXJBY3Rpb25zLkxleGVyUHVzaE1vZGVBY3Rpb247XG52YXIgTGV4ZXJQb3BNb2RlQWN0aW9uID0gTGV4ZXJBY3Rpb25zLkxleGVyUG9wTW9kZUFjdGlvbjtcbnZhciBMZXhlck1vZGVBY3Rpb24gPSBMZXhlckFjdGlvbnMuTGV4ZXJNb2RlQWN0aW9uO1xuLy8gVGhpcyBpcyB0aGUgZWFybGllc3Qgc3VwcG9ydGVkIHNlcmlhbGl6ZWQgVVVJRC5cbi8vIHN0aWNrIHRvIHNlcmlhbGl6ZWQgdmVyc2lvbiBmb3Igbm93LCB3ZSBkb24ndCBuZWVkIGEgVVVJRCBpbnN0YW5jZVxudmFyIEJBU0VfU0VSSUFMSVpFRF9VVUlEID0gXCJBQURCOEQ3RS1BRUVGLTQ0MTUtQUQyQi04MjA0RDZDRjA0MkVcIjtcblxuLy9cbi8vIFRoaXMgVVVJRCBpbmRpY2F0ZXMgdGhlIHNlcmlhbGl6ZWQgQVROIGNvbnRhaW5zIHR3byBzZXRzIG9mXG4vLyBJbnRlcnZhbFNldHMsIHdoZXJlIHRoZSBzZWNvbmQgc2V0J3MgdmFsdWVzIGFyZSBlbmNvZGVkIGFzXG4vLyAzMi1iaXQgaW50ZWdlcnMgdG8gc3VwcG9ydCB0aGUgZnVsbCBVbmljb2RlIFNNUCByYW5nZSB1cCB0byBVKzEwRkZGRi5cbi8vXG52YXIgQURERURfVU5JQ09ERV9TTVAgPSBcIjU5NjI3Nzg0LTNCRTUtNDE3QS1COUVCLTgxMzFBNzI4NjA4OVwiO1xuXG4vLyBUaGlzIGxpc3QgY29udGFpbnMgYWxsIG9mIHRoZSBjdXJyZW50bHkgc3VwcG9ydGVkIFVVSURzLCBvcmRlcmVkIGJ5IHdoZW5cbi8vIHRoZSBmZWF0dXJlIGZpcnN0IGFwcGVhcmVkIGluIHRoaXMgYnJhbmNoLlxudmFyIFNVUFBPUlRFRF9VVUlEUyA9IFsgQkFTRV9TRVJJQUxJWkVEX1VVSUQsIEFEREVEX1VOSUNPREVfU01QIF07XG5cbnZhciBTRVJJQUxJWkVEX1ZFUlNJT04gPSAzO1xuXG4vLyBUaGlzIGlzIHRoZSBjdXJyZW50IHNlcmlhbGl6ZWQgVVVJRC5cbnZhciBTRVJJQUxJWkVEX1VVSUQgPSBBRERFRF9VTklDT0RFX1NNUDtcblxuZnVuY3Rpb24gaW5pdEFycmF5KCBsZW5ndGgsIHZhbHVlKSB7XG5cdHZhciB0bXAgPSBbXTtcblx0dG1wW2xlbmd0aC0xXSA9IHZhbHVlO1xuXHRyZXR1cm4gdG1wLm1hcChmdW5jdGlvbihpKSB7cmV0dXJuIHZhbHVlO30pO1xufVxuXG5mdW5jdGlvbiBBVE5EZXNlcmlhbGl6ZXIgKG9wdGlvbnMpIHtcblxuICAgIGlmICggb3B0aW9ucz09PSB1bmRlZmluZWQgfHwgb3B0aW9ucyA9PT0gbnVsbCApIHtcbiAgICAgICAgb3B0aW9ucyA9IEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMuZGVmYXVsdE9wdGlvbnM7XG4gICAgfVxuICAgIHRoaXMuZGVzZXJpYWxpemF0aW9uT3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5zdGF0ZUZhY3RvcmllcyA9IG51bGw7XG4gICAgdGhpcy5hY3Rpb25GYWN0b3JpZXMgPSBudWxsO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIERldGVybWluZXMgaWYgYSBwYXJ0aWN1bGFyIHNlcmlhbGl6ZWQgcmVwcmVzZW50YXRpb24gb2YgYW4gQVROIHN1cHBvcnRzXG4vLyBhIHBhcnRpY3VsYXIgZmVhdHVyZSwgaWRlbnRpZmllZCBieSB0aGUge0BsaW5rIFVVSUR9IHVzZWQgZm9yIHNlcmlhbGl6aW5nXG4vLyB0aGUgQVROIGF0IHRoZSB0aW1lIHRoZSBmZWF0dXJlIHdhcyBmaXJzdCBpbnRyb2R1Y2VkLlxuLy9cbi8vIEBwYXJhbSBmZWF0dXJlIFRoZSB7QGxpbmsgVVVJRH0gbWFya2luZyB0aGUgZmlyc3QgdGltZSB0aGUgZmVhdHVyZSB3YXNcbi8vIHN1cHBvcnRlZCBpbiB0aGUgc2VyaWFsaXplZCBBVE4uXG4vLyBAcGFyYW0gYWN0dWFsVXVpZCBUaGUge0BsaW5rIFVVSUR9IG9mIHRoZSBhY3R1YWwgc2VyaWFsaXplZCBBVE4gd2hpY2ggaXNcbi8vIGN1cnJlbnRseSBiZWluZyBkZXNlcmlhbGl6ZWQuXG4vLyBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB0aGUge0Bjb2RlIGFjdHVhbFV1aWR9IHZhbHVlIHJlcHJlc2VudHMgYVxuLy8gc2VyaWFsaXplZCBBVE4gYXQgb3IgYWZ0ZXIgdGhlIGZlYXR1cmUgaWRlbnRpZmllZCBieSB7QGNvZGUgZmVhdHVyZX0gd2FzXG4vLyBpbnRyb2R1Y2VkOyBvdGhlcndpc2UsIHtAY29kZSBmYWxzZX0uXG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUuaXNGZWF0dXJlU3VwcG9ydGVkID0gZnVuY3Rpb24oZmVhdHVyZSwgYWN0dWFsVXVpZCkge1xuICAgIHZhciBpZHgxID0gU1VQUE9SVEVEX1VVSURTLmluZGV4T2YoZmVhdHVyZSk7XG4gICAgaWYgKGlkeDE8MCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHZhciBpZHgyID0gU1VQUE9SVEVEX1VVSURTLmluZGV4T2YoYWN0dWFsVXVpZCk7XG4gICAgcmV0dXJuIGlkeDIgPj0gaWR4MTtcbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUuZGVzZXJpYWxpemUgPSBmdW5jdGlvbihkYXRhKSB7XG4gICAgdGhpcy5yZXNldChkYXRhKTtcbiAgICB0aGlzLmNoZWNrVmVyc2lvbigpO1xuICAgIHRoaXMuY2hlY2tVVUlEKCk7XG4gICAgdmFyIGF0biA9IHRoaXMucmVhZEFUTigpO1xuICAgIHRoaXMucmVhZFN0YXRlcyhhdG4pO1xuICAgIHRoaXMucmVhZFJ1bGVzKGF0bik7XG4gICAgdGhpcy5yZWFkTW9kZXMoYXRuKTtcbiAgICB2YXIgc2V0cyA9IFtdO1xuICAgIC8vIEZpcnN0LCBkZXNlcmlhbGl6ZSBzZXRzIHdpdGggMTYtYml0IGFyZ3VtZW50cyA8PSBVK0ZGRkYuXG4gICAgdGhpcy5yZWFkU2V0cyhhdG4sIHNldHMsIHRoaXMucmVhZEludC5iaW5kKHRoaXMpKTtcbiAgICAvLyBOZXh0LCBpZiB0aGUgQVROIHdhcyBzZXJpYWxpemVkIHdpdGggdGhlIFVuaWNvZGUgU01QIGZlYXR1cmUsXG4gICAgLy8gZGVzZXJpYWxpemUgc2V0cyB3aXRoIDMyLWJpdCBhcmd1bWVudHMgPD0gVSsxMEZGRkYuXG4gICAgaWYgKHRoaXMuaXNGZWF0dXJlU3VwcG9ydGVkKEFEREVEX1VOSUNPREVfU01QLCB0aGlzLnV1aWQpKSB7XG4gICAgICAgIHRoaXMucmVhZFNldHMoYXRuLCBzZXRzLCB0aGlzLnJlYWRJbnQzMi5iaW5kKHRoaXMpKTtcbiAgICB9XG4gICAgdGhpcy5yZWFkRWRnZXMoYXRuLCBzZXRzKTtcbiAgICB0aGlzLnJlYWREZWNpc2lvbnMoYXRuKTtcbiAgICB0aGlzLnJlYWRMZXhlckFjdGlvbnMoYXRuKTtcbiAgICB0aGlzLm1hcmtQcmVjZWRlbmNlRGVjaXNpb25zKGF0bik7XG4gICAgdGhpcy52ZXJpZnlBVE4oYXRuKTtcbiAgICBpZiAodGhpcy5kZXNlcmlhbGl6YXRpb25PcHRpb25zLmdlbmVyYXRlUnVsZUJ5cGFzc1RyYW5zaXRpb25zICYmIGF0bi5ncmFtbWFyVHlwZSA9PT0gQVROVHlwZS5QQVJTRVIgKSB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVSdWxlQnlwYXNzVHJhbnNpdGlvbnMoYXRuKTtcbiAgICAgICAgLy8gcmUtdmVyaWZ5IGFmdGVyIG1vZGlmaWNhdGlvblxuICAgICAgICB0aGlzLnZlcmlmeUFUTihhdG4pO1xuICAgIH1cbiAgICByZXR1cm4gYXRuO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKGRhdGEpIHtcblx0dmFyIGFkanVzdCA9IGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgdmFyIHYgPSBjLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgIHJldHVybiB2PjEgID8gdi0yIDogdiArIDY1NTMzO1xuXHR9O1xuICAgIHZhciB0ZW1wID0gZGF0YS5zcGxpdChcIlwiKS5tYXAoYWRqdXN0KTtcbiAgICAvLyBkb24ndCBhZGp1c3QgdGhlIGZpcnN0IHZhbHVlIHNpbmNlIHRoYXQncyB0aGUgdmVyc2lvbiBudW1iZXJcbiAgICB0ZW1wWzBdID0gZGF0YS5jaGFyQ29kZUF0KDApO1xuICAgIHRoaXMuZGF0YSA9IHRlbXA7XG4gICAgdGhpcy5wb3MgPSAwO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5jaGVja1ZlcnNpb24gPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgdmVyc2lvbiA9IHRoaXMucmVhZEludCgpO1xuICAgIGlmICggdmVyc2lvbiAhPT0gU0VSSUFMSVpFRF9WRVJTSU9OICkge1xuICAgICAgICB0aHJvdyAoXCJDb3VsZCBub3QgZGVzZXJpYWxpemUgQVROIHdpdGggdmVyc2lvbiBcIiArIHZlcnNpb24gKyBcIiAoZXhwZWN0ZWQgXCIgKyBTRVJJQUxJWkVEX1ZFUlNJT04gKyBcIikuXCIpO1xuICAgIH1cbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUuY2hlY2tVVUlEID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHV1aWQgPSB0aGlzLnJlYWRVVUlEKCk7XG4gICAgaWYgKFNVUFBPUlRFRF9VVUlEUy5pbmRleE9mKHV1aWQpPDApIHtcbiAgICAgICAgdGhyb3cgKFwiQ291bGQgbm90IGRlc2VyaWFsaXplIEFUTiB3aXRoIFVVSUQ6IFwiICsgdXVpZCArXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiAoZXhwZWN0ZWQgXCIgKyBTRVJJQUxJWkVEX1VVSUQgKyBcIiBvciBhIGxlZ2FjeSBVVUlEKS5cIiwgdXVpZCwgU0VSSUFMSVpFRF9VVUlEKTtcbiAgICB9XG4gICAgdGhpcy51dWlkID0gdXVpZDtcbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUucmVhZEFUTiA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBncmFtbWFyVHlwZSA9IHRoaXMucmVhZEludCgpO1xuICAgIHZhciBtYXhUb2tlblR5cGUgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICByZXR1cm4gbmV3IEFUTihncmFtbWFyVHlwZSwgbWF4VG9rZW5UeXBlKTtcbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUucmVhZFN0YXRlcyA9IGZ1bmN0aW9uKGF0bikge1xuXHR2YXIgaiwgcGFpciwgc3RhdGVOdW1iZXI7XG4gICAgdmFyIGxvb3BCYWNrU3RhdGVOdW1iZXJzID0gW107XG4gICAgdmFyIGVuZFN0YXRlTnVtYmVycyA9IFtdO1xuICAgIHZhciBuc3RhdGVzID0gdGhpcy5yZWFkSW50KCk7XG4gICAgZm9yKHZhciBpPTA7IGk8bnN0YXRlczsgaSsrKSB7XG4gICAgICAgIHZhciBzdHlwZSA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICAvLyBpZ25vcmUgYmFkIHR5cGUgb2Ygc3RhdGVzXG4gICAgICAgIGlmIChzdHlwZT09PUFUTlN0YXRlLklOVkFMSURfVFlQRSkge1xuICAgICAgICAgICAgYXRuLmFkZFN0YXRlKG51bGwpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHJ1bGVJbmRleCA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICBpZiAocnVsZUluZGV4ID09PSAweEZGRkYpIHtcbiAgICAgICAgICAgIHJ1bGVJbmRleCA9IC0xO1xuICAgICAgICB9XG4gICAgICAgIHZhciBzID0gdGhpcy5zdGF0ZUZhY3Rvcnkoc3R5cGUsIHJ1bGVJbmRleCk7XG4gICAgICAgIGlmIChzdHlwZSA9PT0gQVROU3RhdGUuTE9PUF9FTkQpIHsgLy8gc3BlY2lhbCBjYXNlXG4gICAgICAgICAgICB2YXIgbG9vcEJhY2tTdGF0ZU51bWJlciA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICAgICAgbG9vcEJhY2tTdGF0ZU51bWJlcnMucHVzaChbcywgbG9vcEJhY2tTdGF0ZU51bWJlcl0pO1xuICAgICAgICB9IGVsc2UgaWYocyBpbnN0YW5jZW9mIEJsb2NrU3RhcnRTdGF0ZSkge1xuICAgICAgICAgICAgdmFyIGVuZFN0YXRlTnVtYmVyID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgICAgICBlbmRTdGF0ZU51bWJlcnMucHVzaChbcywgZW5kU3RhdGVOdW1iZXJdKTtcbiAgICAgICAgfVxuICAgICAgICBhdG4uYWRkU3RhdGUocyk7XG4gICAgfVxuICAgIC8vIGRlbGF5IHRoZSBhc3NpZ25tZW50IG9mIGxvb3AgYmFjayBhbmQgZW5kIHN0YXRlcyB1bnRpbCB3ZSBrbm93IGFsbCB0aGVcblx0Ly8gc3RhdGUgaW5zdGFuY2VzIGhhdmUgYmVlbiBpbml0aWFsaXplZFxuICAgIGZvciAoaj0wOyBqPGxvb3BCYWNrU3RhdGVOdW1iZXJzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHBhaXIgPSBsb29wQmFja1N0YXRlTnVtYmVyc1tqXTtcbiAgICAgICAgcGFpclswXS5sb29wQmFja1N0YXRlID0gYXRuLnN0YXRlc1twYWlyWzFdXTtcbiAgICB9XG5cbiAgICBmb3IgKGo9MDsgajxlbmRTdGF0ZU51bWJlcnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgcGFpciA9IGVuZFN0YXRlTnVtYmVyc1tqXTtcbiAgICAgICAgcGFpclswXS5lbmRTdGF0ZSA9IGF0bi5zdGF0ZXNbcGFpclsxXV07XG4gICAgfVxuXG4gICAgdmFyIG51bU5vbkdyZWVkeVN0YXRlcyA9IHRoaXMucmVhZEludCgpO1xuICAgIGZvciAoaj0wOyBqPG51bU5vbkdyZWVkeVN0YXRlczsgaisrKSB7XG4gICAgICAgIHN0YXRlTnVtYmVyID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIGF0bi5zdGF0ZXNbc3RhdGVOdW1iZXJdLm5vbkdyZWVkeSA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIG51bVByZWNlZGVuY2VTdGF0ZXMgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICBmb3IgKGo9MDsgajxudW1QcmVjZWRlbmNlU3RhdGVzOyBqKyspIHtcbiAgICAgICAgc3RhdGVOdW1iZXIgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgYXRuLnN0YXRlc1tzdGF0ZU51bWJlcl0uaXNQcmVjZWRlbmNlUnVsZSA9IHRydWU7XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkUnVsZXMgPSBmdW5jdGlvbihhdG4pIHtcbiAgICB2YXIgaTtcbiAgICB2YXIgbnJ1bGVzID0gdGhpcy5yZWFkSW50KCk7XG4gICAgaWYgKGF0bi5ncmFtbWFyVHlwZSA9PT0gQVROVHlwZS5MRVhFUiApIHtcbiAgICAgICAgYXRuLnJ1bGVUb1Rva2VuVHlwZSA9IGluaXRBcnJheShucnVsZXMsIDApO1xuICAgIH1cbiAgICBhdG4ucnVsZVRvU3RhcnRTdGF0ZSA9IGluaXRBcnJheShucnVsZXMsIDApO1xuICAgIGZvciAoaT0wOyBpPG5ydWxlczsgaSsrKSB7XG4gICAgICAgIHZhciBzID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHZhciBzdGFydFN0YXRlID0gYXRuLnN0YXRlc1tzXTtcbiAgICAgICAgYXRuLnJ1bGVUb1N0YXJ0U3RhdGVbaV0gPSBzdGFydFN0YXRlO1xuICAgICAgICBpZiAoIGF0bi5ncmFtbWFyVHlwZSA9PT0gQVROVHlwZS5MRVhFUiApIHtcbiAgICAgICAgICAgIHZhciB0b2tlblR5cGUgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgICAgIGlmICh0b2tlblR5cGUgPT09IDB4RkZGRikge1xuICAgICAgICAgICAgICAgIHRva2VuVHlwZSA9IFRva2VuLkVPRjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGF0bi5ydWxlVG9Ub2tlblR5cGVbaV0gPSB0b2tlblR5cGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgYXRuLnJ1bGVUb1N0b3BTdGF0ZSA9IGluaXRBcnJheShucnVsZXMsIDApO1xuICAgIGZvciAoaT0wOyBpPGF0bi5zdGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHN0YXRlID0gYXRuLnN0YXRlc1tpXTtcbiAgICAgICAgaWYgKCEoc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgYXRuLnJ1bGVUb1N0b3BTdGF0ZVtzdGF0ZS5ydWxlSW5kZXhdID0gc3RhdGU7XG4gICAgICAgIGF0bi5ydWxlVG9TdGFydFN0YXRlW3N0YXRlLnJ1bGVJbmRleF0uc3RvcFN0YXRlID0gc3RhdGU7XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkTW9kZXMgPSBmdW5jdGlvbihhdG4pIHtcbiAgICB2YXIgbm1vZGVzID0gdGhpcy5yZWFkSW50KCk7XG4gICAgZm9yICh2YXIgaT0wOyBpPG5tb2RlczsgaSsrKSB7XG4gICAgICAgIHZhciBzID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIGF0bi5tb2RlVG9TdGFydFN0YXRlLnB1c2goYXRuLnN0YXRlc1tzXSk7XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkU2V0cyA9IGZ1bmN0aW9uKGF0biwgc2V0cywgcmVhZFVuaWNvZGUpIHtcbiAgICB2YXIgbSA9IHRoaXMucmVhZEludCgpO1xuICAgIGZvciAodmFyIGk9MDsgaTxtOyBpKyspIHtcbiAgICAgICAgdmFyIGlzZXQgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICAgICAgc2V0cy5wdXNoKGlzZXQpO1xuICAgICAgICB2YXIgbiA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICB2YXIgY29udGFpbnNFb2YgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgaWYgKGNvbnRhaW5zRW9mIT09MCkge1xuICAgICAgICAgICAgaXNldC5hZGRPbmUoLTEpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAodmFyIGo9MDsgajxuOyBqKyspIHtcbiAgICAgICAgICAgIHZhciBpMSA9IHJlYWRVbmljb2RlKCk7XG4gICAgICAgICAgICB2YXIgaTIgPSByZWFkVW5pY29kZSgpO1xuICAgICAgICAgICAgaXNldC5hZGRSYW5nZShpMSwgaTIpO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkRWRnZXMgPSBmdW5jdGlvbihhdG4sIHNldHMpIHtcblx0dmFyIGksIGosIHN0YXRlLCB0cmFucywgdGFyZ2V0O1xuICAgIHZhciBuZWRnZXMgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICBmb3IgKGk9MDsgaTxuZWRnZXM7IGkrKykge1xuICAgICAgICB2YXIgc3JjID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHZhciB0cmcgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgdmFyIHR0eXBlID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHZhciBhcmcxID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHZhciBhcmcyID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHZhciBhcmczID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHRyYW5zID0gdGhpcy5lZGdlRmFjdG9yeShhdG4sIHR0eXBlLCBzcmMsIHRyZywgYXJnMSwgYXJnMiwgYXJnMywgc2V0cyk7XG4gICAgICAgIHZhciBzcmNTdGF0ZSA9IGF0bi5zdGF0ZXNbc3JjXTtcbiAgICAgICAgc3JjU3RhdGUuYWRkVHJhbnNpdGlvbih0cmFucyk7XG4gICAgfVxuICAgIC8vIGVkZ2VzIGZvciBydWxlIHN0b3Agc3RhdGVzIGNhbiBiZSBkZXJpdmVkLCBzbyB0aGV5IGFyZW4ndCBzZXJpYWxpemVkXG4gICAgZm9yIChpPTA7IGk8YXRuLnN0YXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBzdGF0ZSA9IGF0bi5zdGF0ZXNbaV07XG4gICAgICAgIGZvciAoaj0wOyBqPHN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICB2YXIgdCA9IHN0YXRlLnRyYW5zaXRpb25zW2pdO1xuICAgICAgICAgICAgaWYgKCEodCBpbnN0YW5jZW9mIFJ1bGVUcmFuc2l0aW9uKSkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXHRcdFx0dmFyIG91dGVybW9zdFByZWNlZGVuY2VSZXR1cm4gPSAtMTtcblx0XHRcdGlmIChhdG4ucnVsZVRvU3RhcnRTdGF0ZVt0LnRhcmdldC5ydWxlSW5kZXhdLmlzUHJlY2VkZW5jZVJ1bGUpIHtcblx0XHRcdFx0aWYgKHQucHJlY2VkZW5jZSA9PT0gMCkge1xuXHRcdFx0XHRcdG91dGVybW9zdFByZWNlZGVuY2VSZXR1cm4gPSB0LnRhcmdldC5ydWxlSW5kZXg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dHJhbnMgPSBuZXcgRXBzaWxvblRyYW5zaXRpb24odC5mb2xsb3dTdGF0ZSwgb3V0ZXJtb3N0UHJlY2VkZW5jZVJldHVybik7XG4gICAgICAgICAgICBhdG4ucnVsZVRvU3RvcFN0YXRlW3QudGFyZ2V0LnJ1bGVJbmRleF0uYWRkVHJhbnNpdGlvbih0cmFucyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKGk9MDsgaTxhdG4uc3RhdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHN0YXRlID0gYXRuLnN0YXRlc1tpXTtcbiAgICAgICAgaWYgKHN0YXRlIGluc3RhbmNlb2YgQmxvY2tTdGFydFN0YXRlKSB7XG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGtub3cgdGhlIGVuZCBzdGF0ZSB0byBzZXQgaXRzIHN0YXJ0IHN0YXRlXG4gICAgICAgICAgICBpZiAoc3RhdGUuZW5kU3RhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyAoXCJJbGxlZ2FsU3RhdGVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBibG9jayBlbmQgc3RhdGVzIGNhbiBvbmx5IGJlIGFzc29jaWF0ZWQgdG8gYSBzaW5nbGUgYmxvY2sgc3RhcnRcblx0XHRcdC8vIHN0YXRlXG4gICAgICAgICAgICBpZiAoIHN0YXRlLmVuZFN0YXRlLnN0YXJ0U3RhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyAoXCJJbGxlZ2FsU3RhdGVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0ZS5lbmRTdGF0ZS5zdGFydFN0YXRlID0gc3RhdGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0YXRlIGluc3RhbmNlb2YgUGx1c0xvb3BiYWNrU3RhdGUpIHtcbiAgICAgICAgICAgIGZvciAoaj0wOyBqPHN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gc3RhdGUudHJhbnNpdGlvbnNbal0udGFyZ2V0O1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBQbHVzQmxvY2tTdGFydFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5sb29wQmFja1N0YXRlID0gc3RhdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlIGluc3RhbmNlb2YgU3Rhckxvb3BiYWNrU3RhdGUpIHtcbiAgICAgICAgICAgIGZvciAoaj0wOyBqPHN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gc3RhdGUudHJhbnNpdGlvbnNbal0udGFyZ2V0O1xuICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBTdGFyTG9vcEVudHJ5U3RhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0Lmxvb3BCYWNrU3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLnJlYWREZWNpc2lvbnMgPSBmdW5jdGlvbihhdG4pIHtcbiAgICB2YXIgbmRlY2lzaW9ucyA9IHRoaXMucmVhZEludCgpO1xuICAgIGZvciAodmFyIGk9MDsgaTxuZGVjaXNpb25zOyBpKyspIHtcbiAgICAgICAgdmFyIHMgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgdmFyIGRlY1N0YXRlID0gYXRuLnN0YXRlc1tzXTtcbiAgICAgICAgYXRuLmRlY2lzaW9uVG9TdGF0ZS5wdXNoKGRlY1N0YXRlKTtcbiAgICAgICAgZGVjU3RhdGUuZGVjaXNpb24gPSBpO1xuICAgIH1cbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUucmVhZExleGVyQWN0aW9ucyA9IGZ1bmN0aW9uKGF0bikge1xuICAgIGlmIChhdG4uZ3JhbW1hclR5cGUgPT09IEFUTlR5cGUuTEVYRVIpIHtcbiAgICAgICAgdmFyIGNvdW50ID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIGF0bi5sZXhlckFjdGlvbnMgPSBpbml0QXJyYXkoY291bnQsIG51bGwpO1xuICAgICAgICBmb3IgKHZhciBpPTA7IGk8Y291bnQ7IGkrKykge1xuICAgICAgICAgICAgdmFyIGFjdGlvblR5cGUgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgICAgIHZhciBkYXRhMSA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICAgICAgaWYgKGRhdGExID09PSAweEZGRkYpIHtcbiAgICAgICAgICAgICAgICBkYXRhMSA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGRhdGEyID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgICAgICBpZiAoZGF0YTIgPT09IDB4RkZGRikge1xuICAgICAgICAgICAgICAgIGRhdGEyID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbGV4ZXJBY3Rpb24gPSB0aGlzLmxleGVyQWN0aW9uRmFjdG9yeShhY3Rpb25UeXBlLCBkYXRhMSwgZGF0YTIpO1xuICAgICAgICAgICAgYXRuLmxleGVyQWN0aW9uc1tpXSA9IGxleGVyQWN0aW9uO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5nZW5lcmF0ZVJ1bGVCeXBhc3NUcmFuc2l0aW9ucyA9IGZ1bmN0aW9uKGF0bikge1xuXHR2YXIgaTtcbiAgICB2YXIgY291bnQgPSBhdG4ucnVsZVRvU3RhcnRTdGF0ZS5sZW5ndGg7XG4gICAgZm9yKGk9MDsgaTxjb3VudDsgaSsrKSB7XG4gICAgICAgIGF0bi5ydWxlVG9Ub2tlblR5cGVbaV0gPSBhdG4ubWF4VG9rZW5UeXBlICsgaSArIDE7XG4gICAgfVxuICAgIGZvcihpPTA7IGk8Y291bnQ7IGkrKykge1xuICAgICAgICB0aGlzLmdlbmVyYXRlUnVsZUJ5cGFzc1RyYW5zaXRpb24oYXRuLCBpKTtcbiAgICB9XG59O1xuXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLmdlbmVyYXRlUnVsZUJ5cGFzc1RyYW5zaXRpb24gPSBmdW5jdGlvbihhdG4sIGlkeCkge1xuXHR2YXIgaSwgc3RhdGU7XG4gICAgdmFyIGJ5cGFzc1N0YXJ0ID0gbmV3IEJhc2ljQmxvY2tTdGFydFN0YXRlKCk7XG4gICAgYnlwYXNzU3RhcnQucnVsZUluZGV4ID0gaWR4O1xuICAgIGF0bi5hZGRTdGF0ZShieXBhc3NTdGFydCk7XG5cbiAgICB2YXIgYnlwYXNzU3RvcCA9IG5ldyBCbG9ja0VuZFN0YXRlKCk7XG4gICAgYnlwYXNzU3RvcC5ydWxlSW5kZXggPSBpZHg7XG4gICAgYXRuLmFkZFN0YXRlKGJ5cGFzc1N0b3ApO1xuXG4gICAgYnlwYXNzU3RhcnQuZW5kU3RhdGUgPSBieXBhc3NTdG9wO1xuICAgIGF0bi5kZWZpbmVEZWNpc2lvblN0YXRlKGJ5cGFzc1N0YXJ0KTtcblxuICAgIGJ5cGFzc1N0b3Auc3RhcnRTdGF0ZSA9IGJ5cGFzc1N0YXJ0O1xuXG4gICAgdmFyIGV4Y2x1ZGVUcmFuc2l0aW9uID0gbnVsbDtcbiAgICB2YXIgZW5kU3RhdGUgPSBudWxsO1xuXG4gICAgaWYgKGF0bi5ydWxlVG9TdGFydFN0YXRlW2lkeF0uaXNQcmVjZWRlbmNlUnVsZSkge1xuICAgICAgICAvLyB3cmFwIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgcnVsZSB0byB0aGUgU3Rhckxvb3BFbnRyeVN0YXRlXG4gICAgICAgIGVuZFN0YXRlID0gbnVsbDtcbiAgICAgICAgZm9yKGk9MDsgaTxhdG4uc3RhdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IGF0bi5zdGF0ZXNbaV07XG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0ZUlzRW5kU3RhdGVGb3Ioc3RhdGUsIGlkeCkpIHtcbiAgICAgICAgICAgICAgICBlbmRTdGF0ZSA9IHN0YXRlO1xuICAgICAgICAgICAgICAgIGV4Y2x1ZGVUcmFuc2l0aW9uID0gc3RhdGUubG9vcEJhY2tTdGF0ZS50cmFuc2l0aW9uc1swXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZXhjbHVkZVRyYW5zaXRpb24gPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IChcIkNvdWxkbid0IGlkZW50aWZ5IGZpbmFsIHN0YXRlIG9mIHRoZSBwcmVjZWRlbmNlIHJ1bGUgcHJlZml4IHNlY3Rpb24uXCIpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZW5kU3RhdGUgPSBhdG4ucnVsZVRvU3RvcFN0YXRlW2lkeF07XG4gICAgfVxuXG4gICAgLy8gYWxsIG5vbi1leGNsdWRlZCB0cmFuc2l0aW9ucyB0aGF0IGN1cnJlbnRseSB0YXJnZXQgZW5kIHN0YXRlIG5lZWQgdG9cblx0Ly8gdGFyZ2V0IGJsb2NrRW5kIGluc3RlYWRcbiAgICBmb3IoaT0wOyBpPGF0bi5zdGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgc3RhdGUgPSBhdG4uc3RhdGVzW2ldO1xuICAgICAgICBmb3IodmFyIGo9MDsgajxzdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgdmFyIHRyYW5zaXRpb24gPSBzdGF0ZS50cmFuc2l0aW9uc1tqXTtcbiAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uID09PSBleGNsdWRlVHJhbnNpdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24udGFyZ2V0ID09PSBlbmRTdGF0ZSkge1xuICAgICAgICAgICAgICAgIHRyYW5zaXRpb24udGFyZ2V0ID0gYnlwYXNzU3RvcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFsbCB0cmFuc2l0aW9ucyBsZWF2aW5nIHRoZSBydWxlIHN0YXJ0IHN0YXRlIG5lZWQgdG8gbGVhdmUgYmxvY2tTdGFydFxuXHQvLyBpbnN0ZWFkXG4gICAgdmFyIHJ1bGVUb1N0YXJ0U3RhdGUgPSBhdG4ucnVsZVRvU3RhcnRTdGF0ZVtpZHhdO1xuICAgIHZhciBjb3VudCA9IHJ1bGVUb1N0YXJ0U3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoO1xuICAgIHdoaWxlICggY291bnQgPiAwKSB7XG4gICAgICAgIGJ5cGFzc1N0YXJ0LmFkZFRyYW5zaXRpb24ocnVsZVRvU3RhcnRTdGF0ZS50cmFuc2l0aW9uc1tjb3VudC0xXSk7XG4gICAgICAgIHJ1bGVUb1N0YXJ0U3RhdGUudHJhbnNpdGlvbnMgPSBydWxlVG9TdGFydFN0YXRlLnRyYW5zaXRpb25zLnNsaWNlKC0xKTtcbiAgICB9XG4gICAgLy8gbGluayB0aGUgbmV3IHN0YXRlc1xuICAgIGF0bi5ydWxlVG9TdGFydFN0YXRlW2lkeF0uYWRkVHJhbnNpdGlvbihuZXcgRXBzaWxvblRyYW5zaXRpb24oYnlwYXNzU3RhcnQpKTtcbiAgICBieXBhc3NTdG9wLmFkZFRyYW5zaXRpb24obmV3IEVwc2lsb25UcmFuc2l0aW9uKGVuZFN0YXRlKSk7XG5cbiAgICB2YXIgbWF0Y2hTdGF0ZSA9IG5ldyBCYXNpY1N0YXRlKCk7XG4gICAgYXRuLmFkZFN0YXRlKG1hdGNoU3RhdGUpO1xuICAgIG1hdGNoU3RhdGUuYWRkVHJhbnNpdGlvbihuZXcgQXRvbVRyYW5zaXRpb24oYnlwYXNzU3RvcCwgYXRuLnJ1bGVUb1Rva2VuVHlwZVtpZHhdKSk7XG4gICAgYnlwYXNzU3RhcnQuYWRkVHJhbnNpdGlvbihuZXcgRXBzaWxvblRyYW5zaXRpb24obWF0Y2hTdGF0ZSkpO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5zdGF0ZUlzRW5kU3RhdGVGb3IgPSBmdW5jdGlvbihzdGF0ZSwgaWR4KSB7XG4gICAgaWYgKCBzdGF0ZS5ydWxlSW5kZXggIT09IGlkeCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKCEoIHN0YXRlIGluc3RhbmNlb2YgU3Rhckxvb3BFbnRyeVN0YXRlKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIG1heWJlTG9vcEVuZFN0YXRlID0gc3RhdGUudHJhbnNpdGlvbnNbc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoIC0gMV0udGFyZ2V0O1xuICAgIGlmICghKCBtYXliZUxvb3BFbmRTdGF0ZSBpbnN0YW5jZW9mIExvb3BFbmRTdGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmIChtYXliZUxvb3BFbmRTdGF0ZS5lcHNpbG9uT25seVRyYW5zaXRpb25zICYmXG4gICAgICAgIChtYXliZUxvb3BFbmRTdGF0ZS50cmFuc2l0aW9uc1swXS50YXJnZXQgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSkge1xuICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufTtcblxuLy9cbi8vIEFuYWx5emUgdGhlIHtAbGluayBTdGFyTG9vcEVudHJ5U3RhdGV9IHN0YXRlcyBpbiB0aGUgc3BlY2lmaWVkIEFUTiB0byBzZXRcbi8vIHRoZSB7QGxpbmsgU3Rhckxvb3BFbnRyeVN0YXRlLy9pc1ByZWNlZGVuY2VEZWNpc2lvbn0gZmllbGQgdG8gdGhlXG4vLyBjb3JyZWN0IHZhbHVlLlxuLy9cbi8vIEBwYXJhbSBhdG4gVGhlIEFUTi5cbi8vXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLm1hcmtQcmVjZWRlbmNlRGVjaXNpb25zID0gZnVuY3Rpb24oYXRuKSB7XG5cdGZvcih2YXIgaT0wOyBpPGF0bi5zdGF0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgc3RhdGUgPSBhdG4uc3RhdGVzW2ldO1xuXHRcdGlmICghKCBzdGF0ZSBpbnN0YW5jZW9mIFN0YXJMb29wRW50cnlTdGF0ZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdlIGFuYWx5emUgdGhlIEFUTiB0byBkZXRlcm1pbmUgaWYgdGhpcyBBVE4gZGVjaXNpb24gc3RhdGUgaXMgdGhlXG4gICAgICAgIC8vIGRlY2lzaW9uIGZvciB0aGUgY2xvc3VyZSBibG9jayB0aGF0IGRldGVybWluZXMgd2hldGhlciBhXG4gICAgICAgIC8vIHByZWNlZGVuY2UgcnVsZSBzaG91bGQgY29udGludWUgb3IgY29tcGxldGUuXG4gICAgICAgIC8vXG4gICAgICAgIGlmICggYXRuLnJ1bGVUb1N0YXJ0U3RhdGVbc3RhdGUucnVsZUluZGV4XS5pc1ByZWNlZGVuY2VSdWxlKSB7XG4gICAgICAgICAgICB2YXIgbWF5YmVMb29wRW5kU3RhdGUgPSBzdGF0ZS50cmFuc2l0aW9uc1tzdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGggLSAxXS50YXJnZXQ7XG4gICAgICAgICAgICBpZiAobWF5YmVMb29wRW5kU3RhdGUgaW5zdGFuY2VvZiBMb29wRW5kU3RhdGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoIG1heWJlTG9vcEVuZFN0YXRlLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnMgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChtYXliZUxvb3BFbmRTdGF0ZS50cmFuc2l0aW9uc1swXS50YXJnZXQgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSkge1xuICAgICAgICAgICAgICAgICAgICBzdGF0ZS5pc1ByZWNlZGVuY2VEZWNpc2lvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cdH1cbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUudmVyaWZ5QVROID0gZnVuY3Rpb24oYXRuKSB7XG4gICAgaWYgKCF0aGlzLmRlc2VyaWFsaXphdGlvbk9wdGlvbnMudmVyaWZ5QVROKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gdmVyaWZ5IGFzc3VtcHRpb25zXG5cdGZvcih2YXIgaT0wOyBpPGF0bi5zdGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHN0YXRlID0gYXRuLnN0YXRlc1tpXTtcbiAgICAgICAgaWYgKHN0YXRlID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnMgfHwgc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoIDw9IDEpO1xuICAgICAgICBpZiAoc3RhdGUgaW5zdGFuY2VvZiBQbHVzQmxvY2tTdGFydFN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLmxvb3BCYWNrU3RhdGUgIT09IG51bGwpO1xuICAgICAgICB9IGVsc2UgIGlmIChzdGF0ZSBpbnN0YW5jZW9mIFN0YXJMb29wRW50cnlTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS5sb29wQmFja1N0YXRlICE9PSBudWxsKTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoID09PSAyKTtcbiAgICAgICAgICAgIGlmIChzdGF0ZS50cmFuc2l0aW9uc1swXS50YXJnZXQgaW5zdGFuY2VvZiBTdGFyQmxvY2tTdGFydFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS50cmFuc2l0aW9uc1sxXS50YXJnZXQgaW5zdGFuY2VvZiBMb29wRW5kU3RhdGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oIXN0YXRlLm5vbkdyZWVkeSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnRyYW5zaXRpb25zWzBdLnRhcmdldCBpbnN0YW5jZW9mIExvb3BFbmRTdGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oc3RhdGUudHJhbnNpdGlvbnNbMV0udGFyZ2V0IGluc3RhbmNlb2YgU3RhckJsb2NrU3RhcnRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS5ub25HcmVlZHkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyhcIklsbGVnYWxTdGF0ZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSBpbnN0YW5jZW9mIFN0YXJMb29wYmFja1N0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aCA9PT0gMSk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLnRyYW5zaXRpb25zWzBdLnRhcmdldCBpbnN0YW5jZW9mIFN0YXJMb29wRW50cnlTdGF0ZSk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgaW5zdGFuY2VvZiBMb29wRW5kU3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oc3RhdGUubG9vcEJhY2tTdGF0ZSAhPT0gbnVsbCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RhcnRTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS5zdG9wU3RhdGUgIT09IG51bGwpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlIGluc3RhbmNlb2YgQmxvY2tTdGFydFN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLmVuZFN0YXRlICE9PSBudWxsKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSBpbnN0YW5jZW9mIEJsb2NrRW5kU3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oc3RhdGUuc3RhcnRTdGF0ZSAhPT0gbnVsbCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgaW5zdGFuY2VvZiBEZWNpc2lvblN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aCA8PSAxIHx8IHN0YXRlLmRlY2lzaW9uID49IDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGggPD0gMSB8fCAoc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSk7XG4gICAgICAgIH1cblx0fVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5jaGVja0NvbmRpdGlvbiA9IGZ1bmN0aW9uKGNvbmRpdGlvbiwgbWVzc2FnZSkge1xuICAgIGlmICghY29uZGl0aW9uKSB7XG4gICAgICAgIGlmIChtZXNzYWdlID09PSB1bmRlZmluZWQgfHwgbWVzc2FnZT09PW51bGwpIHtcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBcIklsbGVnYWxTdGF0ZVwiO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IChtZXNzYWdlKTtcbiAgICB9XG59O1xuXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLnJlYWRJbnQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5kYXRhW3RoaXMucG9zKytdO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkSW50MzIgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbG93ID0gdGhpcy5yZWFkSW50KCk7XG4gICAgdmFyIGhpZ2ggPSB0aGlzLnJlYWRJbnQoKTtcbiAgICByZXR1cm4gbG93IHwgKGhpZ2ggPDwgMTYpO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkTG9uZyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBsb3cgPSB0aGlzLnJlYWRJbnQzMigpO1xuICAgIHZhciBoaWdoID0gdGhpcy5yZWFkSW50MzIoKTtcbiAgICByZXR1cm4gKGxvdyAmIDB4MDAwMDAwMDBGRkZGRkZGRikgfCAoaGlnaCA8PCAzMik7XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVCeXRlVG9IZXgoKSB7XG5cdHZhciBidGggPSBbXTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuXHRcdGJ0aFtpXSA9IChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zdWJzdHIoMSkudG9VcHBlckNhc2UoKTtcblx0fVxuXHRyZXR1cm4gYnRoO1xufVxuXG52YXIgYnl0ZVRvSGV4ID0gY3JlYXRlQnl0ZVRvSGV4KCk7XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUucmVhZFVVSUQgPSBmdW5jdGlvbigpIHtcblx0dmFyIGJiID0gW107XG5cdGZvcih2YXIgaT03O2k+PTA7aS0tKSB7XG5cdFx0dmFyIGludCA9IHRoaXMucmVhZEludCgpO1xuXHRcdC8qIGpzaGludCBiaXR3aXNlOiBmYWxzZSAqL1xuXHRcdGJiWygyKmkpKzFdID0gaW50ICYgMHhGRjtcblx0XHRiYlsyKmldID0gKGludCA+PiA4KSAmIDB4RkY7XG5cdH1cbiAgICByZXR1cm4gYnl0ZVRvSGV4W2JiWzBdXSArIGJ5dGVUb0hleFtiYlsxXV0gK1xuICAgIGJ5dGVUb0hleFtiYlsyXV0gKyBieXRlVG9IZXhbYmJbM11dICsgJy0nICtcbiAgICBieXRlVG9IZXhbYmJbNF1dICsgYnl0ZVRvSGV4W2JiWzVdXSArICctJyArXG4gICAgYnl0ZVRvSGV4W2JiWzZdXSArIGJ5dGVUb0hleFtiYls3XV0gKyAnLScgK1xuICAgIGJ5dGVUb0hleFtiYls4XV0gKyBieXRlVG9IZXhbYmJbOV1dICsgJy0nICtcbiAgICBieXRlVG9IZXhbYmJbMTBdXSArIGJ5dGVUb0hleFtiYlsxMV1dICtcbiAgICBieXRlVG9IZXhbYmJbMTJdXSArIGJ5dGVUb0hleFtiYlsxM11dICtcbiAgICBieXRlVG9IZXhbYmJbMTRdXSArIGJ5dGVUb0hleFtiYlsxNV1dO1xufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5lZGdlRmFjdG9yeSA9IGZ1bmN0aW9uKGF0biwgdHlwZSwgc3JjLCB0cmcsIGFyZzEsIGFyZzIsIGFyZzMsIHNldHMpIHtcbiAgICB2YXIgdGFyZ2V0ID0gYXRuLnN0YXRlc1t0cmddO1xuICAgIHN3aXRjaCh0eXBlKSB7XG4gICAgY2FzZSBUcmFuc2l0aW9uLkVQU0lMT046XG4gICAgICAgIHJldHVybiBuZXcgRXBzaWxvblRyYW5zaXRpb24odGFyZ2V0KTtcbiAgICBjYXNlIFRyYW5zaXRpb24uUkFOR0U6XG4gICAgICAgIHJldHVybiBhcmczICE9PSAwID8gbmV3IFJhbmdlVHJhbnNpdGlvbih0YXJnZXQsIFRva2VuLkVPRiwgYXJnMikgOiBuZXcgUmFuZ2VUcmFuc2l0aW9uKHRhcmdldCwgYXJnMSwgYXJnMik7XG4gICAgY2FzZSBUcmFuc2l0aW9uLlJVTEU6XG4gICAgICAgIHJldHVybiBuZXcgUnVsZVRyYW5zaXRpb24oYXRuLnN0YXRlc1thcmcxXSwgYXJnMiwgYXJnMywgdGFyZ2V0KTtcbiAgICBjYXNlIFRyYW5zaXRpb24uUFJFRElDQVRFOlxuICAgICAgICByZXR1cm4gbmV3IFByZWRpY2F0ZVRyYW5zaXRpb24odGFyZ2V0LCBhcmcxLCBhcmcyLCBhcmczICE9PSAwKTtcbiAgICBjYXNlIFRyYW5zaXRpb24uUFJFQ0VERU5DRTpcbiAgICAgICAgcmV0dXJuIG5ldyBQcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbih0YXJnZXQsIGFyZzEpO1xuICAgIGNhc2UgVHJhbnNpdGlvbi5BVE9NOlxuICAgICAgICByZXR1cm4gYXJnMyAhPT0gMCA/IG5ldyBBdG9tVHJhbnNpdGlvbih0YXJnZXQsIFRva2VuLkVPRikgOiBuZXcgQXRvbVRyYW5zaXRpb24odGFyZ2V0LCBhcmcxKTtcbiAgICBjYXNlIFRyYW5zaXRpb24uQUNUSU9OOlxuICAgICAgICByZXR1cm4gbmV3IEFjdGlvblRyYW5zaXRpb24odGFyZ2V0LCBhcmcxLCBhcmcyLCBhcmczICE9PSAwKTtcbiAgICBjYXNlIFRyYW5zaXRpb24uU0VUOlxuICAgICAgICByZXR1cm4gbmV3IFNldFRyYW5zaXRpb24odGFyZ2V0LCBzZXRzW2FyZzFdKTtcbiAgICBjYXNlIFRyYW5zaXRpb24uTk9UX1NFVDpcbiAgICAgICAgcmV0dXJuIG5ldyBOb3RTZXRUcmFuc2l0aW9uKHRhcmdldCwgc2V0c1thcmcxXSk7XG4gICAgY2FzZSBUcmFuc2l0aW9uLldJTERDQVJEOlxuICAgICAgICByZXR1cm4gbmV3IFdpbGRjYXJkVHJhbnNpdGlvbih0YXJnZXQpO1xuICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IFwiVGhlIHNwZWNpZmllZCB0cmFuc2l0aW9uIHR5cGU6IFwiICsgdHlwZSArIFwiIGlzIG5vdCB2YWxpZC5cIjtcbiAgICB9XG59O1xuXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLnN0YXRlRmFjdG9yeSA9IGZ1bmN0aW9uKHR5cGUsIHJ1bGVJbmRleCkge1xuICAgIGlmICh0aGlzLnN0YXRlRmFjdG9yaWVzID09PSBudWxsKSB7XG4gICAgICAgIHZhciBzZiA9IFtdO1xuICAgICAgICBzZltBVE5TdGF0ZS5JTlZBTElEX1RZUEVdID0gbnVsbDtcbiAgICAgICAgc2ZbQVROU3RhdGUuQkFTSUNdID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgQmFzaWNTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5SVUxFX1NUQVJUXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IFJ1bGVTdGFydFN0YXRlKCk7IH07XG4gICAgICAgIHNmW0FUTlN0YXRlLkJMT0NLX1NUQVJUXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IEJhc2ljQmxvY2tTdGFydFN0YXRlKCk7IH07XG4gICAgICAgIHNmW0FUTlN0YXRlLlBMVVNfQkxPQ0tfU1RBUlRdID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgUGx1c0Jsb2NrU3RhcnRTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5TVEFSX0JMT0NLX1NUQVJUXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IFN0YXJCbG9ja1N0YXJ0U3RhdGUoKTsgfTtcbiAgICAgICAgc2ZbQVROU3RhdGUuVE9LRU5fU1RBUlRdID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgVG9rZW5zU3RhcnRTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5SVUxFX1NUT1BdID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgUnVsZVN0b3BTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5CTE9DS19FTkRdID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgQmxvY2tFbmRTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5TVEFSX0xPT1BfQkFDS10gPSBmdW5jdGlvbigpIHsgcmV0dXJuIG5ldyBTdGFyTG9vcGJhY2tTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5TVEFSX0xPT1BfRU5UUlldID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgU3Rhckxvb3BFbnRyeVN0YXRlKCk7IH07XG4gICAgICAgIHNmW0FUTlN0YXRlLlBMVVNfTE9PUF9CQUNLXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IFBsdXNMb29wYmFja1N0YXRlKCk7IH07XG4gICAgICAgIHNmW0FUTlN0YXRlLkxPT1BfRU5EXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IExvb3BFbmRTdGF0ZSgpOyB9O1xuICAgICAgICB0aGlzLnN0YXRlRmFjdG9yaWVzID0gc2Y7XG4gICAgfVxuICAgIGlmICh0eXBlPnRoaXMuc3RhdGVGYWN0b3JpZXMubGVuZ3RoIHx8IHRoaXMuc3RhdGVGYWN0b3JpZXNbdHlwZV0gPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3coXCJUaGUgc3BlY2lmaWVkIHN0YXRlIHR5cGUgXCIgKyB0eXBlICsgXCIgaXMgbm90IHZhbGlkLlwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcyA9IHRoaXMuc3RhdGVGYWN0b3JpZXNbdHlwZV0oKTtcbiAgICAgICAgaWYgKHMhPT1udWxsKSB7XG4gICAgICAgICAgICBzLnJ1bGVJbmRleCA9IHJ1bGVJbmRleDtcbiAgICAgICAgICAgIHJldHVybiBzO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5sZXhlckFjdGlvbkZhY3RvcnkgPSBmdW5jdGlvbih0eXBlLCBkYXRhMSwgZGF0YTIpIHtcbiAgICBpZiAodGhpcy5hY3Rpb25GYWN0b3JpZXMgPT09IG51bGwpIHtcbiAgICAgICAgdmFyIGFmID0gW107XG4gICAgICAgIGFmW0xleGVyQWN0aW9uVHlwZS5DSEFOTkVMXSA9IGZ1bmN0aW9uKGRhdGExLCBkYXRhMikgeyByZXR1cm4gbmV3IExleGVyQ2hhbm5lbEFjdGlvbihkYXRhMSk7IH07XG4gICAgICAgIGFmW0xleGVyQWN0aW9uVHlwZS5DVVNUT01dID0gZnVuY3Rpb24oZGF0YTEsIGRhdGEyKSB7IHJldHVybiBuZXcgTGV4ZXJDdXN0b21BY3Rpb24oZGF0YTEsIGRhdGEyKTsgfTtcbiAgICAgICAgYWZbTGV4ZXJBY3Rpb25UeXBlLk1PREVdID0gZnVuY3Rpb24oZGF0YTEsIGRhdGEyKSB7IHJldHVybiBuZXcgTGV4ZXJNb2RlQWN0aW9uKGRhdGExKTsgfTtcbiAgICAgICAgYWZbTGV4ZXJBY3Rpb25UeXBlLk1PUkVdID0gZnVuY3Rpb24oZGF0YTEsIGRhdGEyKSB7IHJldHVybiBMZXhlck1vcmVBY3Rpb24uSU5TVEFOQ0U7IH07XG4gICAgICAgIGFmW0xleGVyQWN0aW9uVHlwZS5QT1BfTU9ERV0gPSBmdW5jdGlvbihkYXRhMSwgZGF0YTIpIHsgcmV0dXJuIExleGVyUG9wTW9kZUFjdGlvbi5JTlNUQU5DRTsgfTtcbiAgICAgICAgYWZbTGV4ZXJBY3Rpb25UeXBlLlBVU0hfTU9ERV0gPSBmdW5jdGlvbihkYXRhMSwgZGF0YTIpIHsgcmV0dXJuIG5ldyBMZXhlclB1c2hNb2RlQWN0aW9uKGRhdGExKTsgfTtcbiAgICAgICAgYWZbTGV4ZXJBY3Rpb25UeXBlLlNLSVBdID0gZnVuY3Rpb24oZGF0YTEsIGRhdGEyKSB7IHJldHVybiBMZXhlclNraXBBY3Rpb24uSU5TVEFOQ0U7IH07XG4gICAgICAgIGFmW0xleGVyQWN0aW9uVHlwZS5UWVBFXSA9IGZ1bmN0aW9uKGRhdGExLCBkYXRhMikgeyByZXR1cm4gbmV3IExleGVyVHlwZUFjdGlvbihkYXRhMSk7IH07XG4gICAgICAgIHRoaXMuYWN0aW9uRmFjdG9yaWVzID0gYWY7XG4gICAgfVxuICAgIGlmICh0eXBlPnRoaXMuYWN0aW9uRmFjdG9yaWVzLmxlbmd0aCB8fCB0aGlzLmFjdGlvbkZhY3Rvcmllc1t0eXBlXSA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyhcIlRoZSBzcGVjaWZpZWQgbGV4ZXIgYWN0aW9uIHR5cGUgXCIgKyB0eXBlICsgXCIgaXMgbm90IHZhbGlkLlwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3Rpb25GYWN0b3JpZXNbdHlwZV0oZGF0YTEsIGRhdGEyKTtcbiAgICB9XG59O1xuXG5cbmV4cG9ydHMuQVRORGVzZXJpYWxpemVyID0gQVRORGVzZXJpYWxpemVyOyIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxudmFyIERGQVN0YXRlID0gcmVxdWlyZSgnLi8uLi9kZmEvREZBU3RhdGUnKS5ERkFTdGF0ZTtcbnZhciBBVE5Db25maWdTZXQgPSByZXF1aXJlKCcuL0FUTkNvbmZpZ1NldCcpLkFUTkNvbmZpZ1NldDtcbnZhciBnZXRDYWNoZWRQcmVkaWN0aW9uQ29udGV4dCA9IHJlcXVpcmUoJy4vLi4vUHJlZGljdGlvbkNvbnRleHQnKS5nZXRDYWNoZWRQcmVkaWN0aW9uQ29udGV4dDtcblxuZnVuY3Rpb24gQVROU2ltdWxhdG9yKGF0biwgc2hhcmVkQ29udGV4dENhY2hlKSB7XG5cbiAgICAvLyBUaGUgY29udGV4dCBjYWNoZSBtYXBzIGFsbCBQcmVkaWN0aW9uQ29udGV4dCBvYmplY3RzIHRoYXQgYXJlID09XG4gICAgLy8gIHRvIGEgc2luZ2xlIGNhY2hlZCBjb3B5LiBUaGlzIGNhY2hlIGlzIHNoYXJlZCBhY3Jvc3MgYWxsIGNvbnRleHRzXG4gICAgLy8gIGluIGFsbCBBVE5Db25maWdzIGluIGFsbCBERkEgc3RhdGVzLiAgV2UgcmVidWlsZCBlYWNoIEFUTkNvbmZpZ1NldFxuICAgIC8vICB0byB1c2Ugb25seSBjYWNoZWQgbm9kZXMvZ3JhcGhzIGluIGFkZERGQVN0YXRlKCkuIFdlIGRvbid0IHdhbnQgdG9cbiAgICAvLyAgZmlsbCB0aGlzIGR1cmluZyBjbG9zdXJlKCkgc2luY2UgdGhlcmUgYXJlIGxvdHMgb2YgY29udGV4dHMgdGhhdFxuICAgIC8vICBwb3AgdXAgYnV0IGFyZSBub3QgdXNlZCBldmVyIGFnYWluLiBJdCBhbHNvIGdyZWF0bHkgc2xvd3MgZG93biBjbG9zdXJlKCkuXG4gICAgLy9cbiAgICAvLyAgPHA+VGhpcyBjYWNoZSBtYWtlcyBhIGh1Z2UgZGlmZmVyZW5jZSBpbiBtZW1vcnkgYW5kIGEgbGl0dGxlIGJpdCBpbiBzcGVlZC5cbiAgICAvLyAgRm9yIHRoZSBKYXZhIGdyYW1tYXIgb24gamF2YS4qLCBpdCBkcm9wcGVkIHRoZSBtZW1vcnkgcmVxdWlyZW1lbnRzXG4gICAgLy8gIGF0IHRoZSBlbmQgZnJvbSAyNU0gdG8gMTZNLiBXZSBkb24ndCBzdG9yZSBhbnkgb2YgdGhlIGZ1bGwgY29udGV4dFxuICAgIC8vICBncmFwaHMgaW4gdGhlIERGQSBiZWNhdXNlIHRoZXkgYXJlIGxpbWl0ZWQgdG8gbG9jYWwgY29udGV4dCBvbmx5LFxuICAgIC8vICBidXQgYXBwYXJlbnRseSB0aGVyZSdzIGEgbG90IG9mIHJlcGV0aXRpb24gdGhlcmUgYXMgd2VsbC4gV2Ugb3B0aW1pemVcbiAgICAvLyAgdGhlIGNvbmZpZyBjb250ZXh0cyBiZWZvcmUgc3RvcmluZyB0aGUgY29uZmlnIHNldCBpbiB0aGUgREZBIHN0YXRlc1xuICAgIC8vICBieSBsaXRlcmFsbHkgcmVidWlsZGluZyB0aGVtIHdpdGggY2FjaGVkIHN1YmdyYXBocyBvbmx5LjwvcD5cbiAgICAvL1xuICAgIC8vICA8cD5JIHRyaWVkIGEgY2FjaGUgZm9yIHVzZSBkdXJpbmcgY2xvc3VyZSBvcGVyYXRpb25zLCB0aGF0IHdhc1xuICAgIC8vICB3aGFja2VkIGFmdGVyIGVhY2ggYWRhcHRpdmVQcmVkaWN0KCkuIEl0IGNvc3QgYSBsaXR0bGUgYml0XG4gICAgLy8gIG1vcmUgdGltZSBJIHRoaW5rIGFuZCBkb2Vzbid0IHNhdmUgb24gdGhlIG92ZXJhbGwgZm9vdHByaW50XG4gICAgLy8gIHNvIGl0J3Mgbm90IHdvcnRoIHRoZSBjb21wbGV4aXR5LjwvcD5cbiAgICAvLy9cbiAgICB0aGlzLmF0biA9IGF0bjtcbiAgICB0aGlzLnNoYXJlZENvbnRleHRDYWNoZSA9IHNoYXJlZENvbnRleHRDYWNoZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuLy8gTXVzdCBkaXN0aW5ndWlzaCBiZXR3ZWVuIG1pc3NpbmcgZWRnZSBhbmQgZWRnZSB3ZSBrbm93IGxlYWRzIG5vd2hlcmUvLy9cbkFUTlNpbXVsYXRvci5FUlJPUiA9IG5ldyBERkFTdGF0ZSgweDdGRkZGRkZGLCBuZXcgQVROQ29uZmlnU2V0KCkpO1xuXG5cbkFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0Q2FjaGVkQ29udGV4dCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgICBpZiAodGhpcy5zaGFyZWRDb250ZXh0Q2FjaGUgPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICB9XG4gICAgdmFyIHZpc2l0ZWQgPSB7fTtcbiAgICByZXR1cm4gZ2V0Q2FjaGVkUHJlZGljdGlvbkNvbnRleHQoY29udGV4dCwgdGhpcy5zaGFyZWRDb250ZXh0Q2FjaGUsIHZpc2l0ZWQpO1xufTtcblxuZXhwb3J0cy5BVE5TaW11bGF0b3IgPSBBVE5TaW11bGF0b3I7XG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cblxuLy8gVGhlIGZvbGxvd2luZyBpbWFnZXMgc2hvdyB0aGUgcmVsYXRpb24gb2Ygc3RhdGVzIGFuZFxuLy8ge0BsaW5rIEFUTlN0YXRlLy90cmFuc2l0aW9uc30gZm9yIHZhcmlvdXMgZ3JhbW1hciBjb25zdHJ1Y3RzLlxuLy9cbi8vIDx1bD5cbi8vXG4vLyA8bGk+U29saWQgZWRnZXMgbWFya2VkIHdpdGggYW4gJi8vMDk0OTsgaW5kaWNhdGUgYSByZXF1aXJlZFxuLy8ge0BsaW5rIEVwc2lsb25UcmFuc2l0aW9ufS48L2xpPlxuLy9cbi8vIDxsaT5EYXNoZWQgZWRnZXMgaW5kaWNhdGUgbG9jYXRpb25zIHdoZXJlIGFueSB0cmFuc2l0aW9uIGRlcml2ZWQgZnJvbVxuLy8ge0BsaW5rIFRyYW5zaXRpb259IG1pZ2h0IGFwcGVhci48L2xpPlxuLy9cbi8vIDxsaT5EYXNoZWQgbm9kZXMgYXJlIHBsYWNlIGhvbGRlcnMgZm9yIGVpdGhlciBhIHNlcXVlbmNlIG9mIGxpbmtlZFxuLy8ge0BsaW5rIEJhc2ljU3RhdGV9IHN0YXRlcyBvciB0aGUgaW5jbHVzaW9uIG9mIGEgYmxvY2sgcmVwcmVzZW50aW5nIGEgbmVzdGVkXG4vLyBjb25zdHJ1Y3QgaW4gb25lIG9mIHRoZSBmb3JtcyBiZWxvdy48L2xpPlxuLy9cbi8vIDxsaT5Ob2RlcyBzaG93aW5nIG11bHRpcGxlIG91dGdvaW5nIGFsdGVybmF0aXZlcyB3aXRoIGEge0Bjb2RlIC4uLn0gc3VwcG9ydFxuLy8gYW55IG51bWJlciBvZiBhbHRlcm5hdGl2ZXMgKG9uZSBvciBtb3JlKS4gTm9kZXMgd2l0aG91dCB0aGUge0Bjb2RlIC4uLn0gb25seVxuLy8gc3VwcG9ydCB0aGUgZXhhY3QgbnVtYmVyIG9mIGFsdGVybmF0aXZlcyBzaG93biBpbiB0aGUgZGlhZ3JhbS48L2xpPlxuLy9cbi8vIDwvdWw+XG4vL1xuLy8gPGgyPkJhc2ljIEJsb2NrczwvaDI+XG4vL1xuLy8gPGgzPlJ1bGU8L2gzPlxuLy9cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvUnVsZS5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz5cbi8vXG4vLyA8aDM+QmxvY2sgb2YgMSBvciBtb3JlIGFsdGVybmF0aXZlczwvaDM+XG4vL1xuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9CbG9jay5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz5cbi8vXG4vLyA8aDI+R3JlZWR5IExvb3BzPC9oMj5cbi8vXG4vLyA8aDM+R3JlZWR5IENsb3N1cmU6IHtAY29kZSAoLi4uKSp9PC9oMz5cbi8vXG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0Nsb3N1cmVHcmVlZHkuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+XG4vL1xuLy8gPGgzPkdyZWVkeSBQb3NpdGl2ZSBDbG9zdXJlOiB7QGNvZGUgKC4uLikrfTwvaDM+XG4vL1xuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9Qb3NpdGl2ZUNsb3N1cmVHcmVlZHkuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+XG4vL1xuLy8gPGgzPkdyZWVkeSBPcHRpb25hbDoge0Bjb2RlICguLi4pP308L2gzPlxuLy9cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvT3B0aW9uYWxHcmVlZHkuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+XG4vL1xuLy8gPGgyPk5vbi1HcmVlZHkgTG9vcHM8L2gyPlxuLy9cbi8vIDxoMz5Ob24tR3JlZWR5IENsb3N1cmU6IHtAY29kZSAoLi4uKSo/fTwvaDM+XG4vL1xuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9DbG9zdXJlTm9uR3JlZWR5LnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPlxuLy9cbi8vIDxoMz5Ob24tR3JlZWR5IFBvc2l0aXZlIENsb3N1cmU6IHtAY29kZSAoLi4uKSs/fTwvaDM+XG4vL1xuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9Qb3NpdGl2ZUNsb3N1cmVOb25HcmVlZHkuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+XG4vL1xuLy8gPGgzPk5vbi1HcmVlZHkgT3B0aW9uYWw6IHtAY29kZSAoLi4uKT8/fTwvaDM+XG4vL1xuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9PcHRpb25hbE5vbkdyZWVkeS5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz5cbi8vXG5cbnZhciBJTklUSUFMX05VTV9UUkFOU0lUSU9OUyA9IDQ7XG5cbmZ1bmN0aW9uIEFUTlN0YXRlKCkge1xuICAgIC8vIFdoaWNoIEFUTiBhcmUgd2UgaW4/XG4gICAgdGhpcy5hdG4gPSBudWxsO1xuICAgIHRoaXMuc3RhdGVOdW1iZXIgPSBBVE5TdGF0ZS5JTlZBTElEX1NUQVRFX05VTUJFUjtcbiAgICB0aGlzLnN0YXRlVHlwZSA9IG51bGw7XG4gICAgdGhpcy5ydWxlSW5kZXggPSAwOyAvLyBhdCBydW50aW1lLCB3ZSBkb24ndCBoYXZlIFJ1bGUgb2JqZWN0c1xuICAgIHRoaXMuZXBzaWxvbk9ubHlUcmFuc2l0aW9ucyA9IGZhbHNlO1xuICAgIC8vIFRyYWNrIHRoZSB0cmFuc2l0aW9ucyBlbWFuYXRpbmcgZnJvbSB0aGlzIEFUTiBzdGF0ZS5cbiAgICB0aGlzLnRyYW5zaXRpb25zID0gW107XG4gICAgLy8gVXNlZCB0byBjYWNoZSBsb29rYWhlYWQgZHVyaW5nIHBhcnNpbmcsIG5vdCB1c2VkIGR1cmluZyBjb25zdHJ1Y3Rpb25cbiAgICB0aGlzLm5leHRUb2tlbldpdGhpblJ1bGUgPSBudWxsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG4vLyBjb25zdGFudHMgZm9yIHNlcmlhbGl6YXRpb25cbkFUTlN0YXRlLklOVkFMSURfVFlQRSA9IDA7XG5BVE5TdGF0ZS5CQVNJQyA9IDE7XG5BVE5TdGF0ZS5SVUxFX1NUQVJUID0gMjtcbkFUTlN0YXRlLkJMT0NLX1NUQVJUID0gMztcbkFUTlN0YXRlLlBMVVNfQkxPQ0tfU1RBUlQgPSA0O1xuQVROU3RhdGUuU1RBUl9CTE9DS19TVEFSVCA9IDU7XG5BVE5TdGF0ZS5UT0tFTl9TVEFSVCA9IDY7XG5BVE5TdGF0ZS5SVUxFX1NUT1AgPSA3O1xuQVROU3RhdGUuQkxPQ0tfRU5EID0gODtcbkFUTlN0YXRlLlNUQVJfTE9PUF9CQUNLID0gOTtcbkFUTlN0YXRlLlNUQVJfTE9PUF9FTlRSWSA9IDEwO1xuQVROU3RhdGUuUExVU19MT09QX0JBQ0sgPSAxMTtcbkFUTlN0YXRlLkxPT1BfRU5EID0gMTI7XG5cbkFUTlN0YXRlLnNlcmlhbGl6YXRpb25OYW1lcyA9IFtcbiAgICAgICAgICAgIFwiSU5WQUxJRFwiLFxuICAgICAgICAgICAgXCJCQVNJQ1wiLFxuICAgICAgICAgICAgXCJSVUxFX1NUQVJUXCIsXG4gICAgICAgICAgICBcIkJMT0NLX1NUQVJUXCIsXG4gICAgICAgICAgICBcIlBMVVNfQkxPQ0tfU1RBUlRcIixcbiAgICAgICAgICAgIFwiU1RBUl9CTE9DS19TVEFSVFwiLFxuICAgICAgICAgICAgXCJUT0tFTl9TVEFSVFwiLFxuICAgICAgICAgICAgXCJSVUxFX1NUT1BcIixcbiAgICAgICAgICAgIFwiQkxPQ0tfRU5EXCIsXG4gICAgICAgICAgICBcIlNUQVJfTE9PUF9CQUNLXCIsXG4gICAgICAgICAgICBcIlNUQVJfTE9PUF9FTlRSWVwiLFxuICAgICAgICAgICAgXCJQTFVTX0xPT1BfQkFDS1wiLFxuICAgICAgICAgICAgXCJMT09QX0VORFwiIF07XG5cbkFUTlN0YXRlLklOVkFMSURfU1RBVEVfTlVNQkVSID0gLTE7XG5cbkFUTlN0YXRlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5zdGF0ZU51bWJlcjtcbn07XG5cbkFUTlN0YXRlLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIGlmIChvdGhlciBpbnN0YW5jZW9mIEFUTlN0YXRlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlTnVtYmVyPT09b3RoZXIuc3RhdGVOdW1iZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn07XG5cbkFUTlN0YXRlLnByb3RvdHlwZS5pc05vbkdyZWVkeUV4aXRTdGF0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmYWxzZTtcbn07XG5cblxuQVROU3RhdGUucHJvdG90eXBlLmFkZFRyYW5zaXRpb24gPSBmdW5jdGlvbih0cmFucywgaW5kZXgpIHtcblx0aWYoaW5kZXg9PT11bmRlZmluZWQpIHtcblx0XHRpbmRleCA9IC0xO1xuXHR9XG4gICAgaWYgKHRoaXMudHJhbnNpdGlvbnMubGVuZ3RoPT09MCkge1xuICAgICAgICB0aGlzLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnMgPSB0cmFucy5pc0Vwc2lsb247XG4gICAgfSBlbHNlIGlmKHRoaXMuZXBzaWxvbk9ubHlUcmFuc2l0aW9ucyAhPT0gdHJhbnMuaXNFcHNpbG9uKSB7XG4gICAgICAgIHRoaXMuZXBzaWxvbk9ubHlUcmFuc2l0aW9ucyA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaW5kZXg9PT0tMSkge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25zLnB1c2godHJhbnMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudHJhbnNpdGlvbnMuc3BsaWNlKGluZGV4LCAxLCB0cmFucyk7XG4gICAgfVxufTtcblxuZnVuY3Rpb24gQmFzaWNTdGF0ZSgpIHtcblx0QVROU3RhdGUuY2FsbCh0aGlzKTtcbiAgICB0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLkJBU0lDO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5CYXNpY1N0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQVROU3RhdGUucHJvdG90eXBlKTtcbkJhc2ljU3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzaWNTdGF0ZTtcblxuXG5mdW5jdGlvbiBEZWNpc2lvblN0YXRlKCkge1xuXHRBVE5TdGF0ZS5jYWxsKHRoaXMpO1xuICAgIHRoaXMuZGVjaXNpb24gPSAtMTtcbiAgICB0aGlzLm5vbkdyZWVkeSA9IGZhbHNlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5EZWNpc2lvblN0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQVROU3RhdGUucHJvdG90eXBlKTtcbkRlY2lzaW9uU3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGVjaXNpb25TdGF0ZTtcblxuXG4vLyAgVGhlIHN0YXJ0IG9mIGEgcmVndWxhciB7QGNvZGUgKC4uLil9IGJsb2NrLlxuZnVuY3Rpb24gQmxvY2tTdGFydFN0YXRlKCkge1xuXHREZWNpc2lvblN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuZW5kU3RhdGUgPSBudWxsO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuQmxvY2tTdGFydFN0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRGVjaXNpb25TdGF0ZS5wcm90b3R5cGUpO1xuQmxvY2tTdGFydFN0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsb2NrU3RhcnRTdGF0ZTtcblxuXG5mdW5jdGlvbiBCYXNpY0Jsb2NrU3RhcnRTdGF0ZSgpIHtcblx0QmxvY2tTdGFydFN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuc3RhdGVUeXBlID0gQVROU3RhdGUuQkxPQ0tfU1RBUlQ7XG5cdHJldHVybiB0aGlzO1xufVxuXG5CYXNpY0Jsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUpO1xuQmFzaWNCbG9ja1N0YXJ0U3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFzaWNCbG9ja1N0YXJ0U3RhdGU7XG5cblxuLy8gVGVybWluYWwgbm9kZSBvZiBhIHNpbXBsZSB7QGNvZGUgKGF8YnxjKX0gYmxvY2suXG5mdW5jdGlvbiBCbG9ja0VuZFN0YXRlKCkge1xuXHRBVE5TdGF0ZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLkJMT0NLX0VORDtcbiAgICB0aGlzLnN0YXJ0U3RhdGUgPSBudWxsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5CbG9ja0VuZFN0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQVROU3RhdGUucHJvdG90eXBlKTtcbkJsb2NrRW5kU3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmxvY2tFbmRTdGF0ZTtcblxuXG4vLyBUaGUgbGFzdCBub2RlIGluIHRoZSBBVE4gZm9yIGEgcnVsZSwgdW5sZXNzIHRoYXQgcnVsZSBpcyB0aGUgc3RhcnQgc3ltYm9sLlxuLy8gIEluIHRoYXQgY2FzZSwgdGhlcmUgaXMgb25lIHRyYW5zaXRpb24gdG8gRU9GLiBMYXRlciwgd2UgbWlnaHQgZW5jb2RlXG4vLyAgcmVmZXJlbmNlcyB0byBhbGwgY2FsbHMgdG8gdGhpcyBydWxlIHRvIGNvbXB1dGUgRk9MTE9XIHNldHMgZm9yXG4vLyAgZXJyb3IgaGFuZGxpbmcuXG4vL1xuZnVuY3Rpb24gUnVsZVN0b3BTdGF0ZSgpIHtcblx0QVROU3RhdGUuY2FsbCh0aGlzKTtcbiAgICB0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLlJVTEVfU1RPUDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuUnVsZVN0b3BTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFUTlN0YXRlLnByb3RvdHlwZSk7XG5SdWxlU3RvcFN0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJ1bGVTdG9wU3RhdGU7XG5cbmZ1bmN0aW9uIFJ1bGVTdGFydFN0YXRlKCkge1xuXHRBVE5TdGF0ZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLlJVTEVfU1RBUlQ7XG5cdHRoaXMuc3RvcFN0YXRlID0gbnVsbDtcblx0dGhpcy5pc1ByZWNlZGVuY2VSdWxlID0gZmFsc2U7XG5cdHJldHVybiB0aGlzO1xufVxuXG5SdWxlU3RhcnRTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFUTlN0YXRlLnByb3RvdHlwZSk7XG5SdWxlU3RhcnRTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSdWxlU3RhcnRTdGF0ZTtcblxuLy8gRGVjaXNpb24gc3RhdGUgZm9yIHtAY29kZSBBK30gYW5kIHtAY29kZSAoQXxCKSt9LiAgSXQgaGFzIHR3byB0cmFuc2l0aW9uczpcbi8vICBvbmUgdG8gdGhlIGxvb3AgYmFjayB0byBzdGFydCBvZiB0aGUgYmxvY2sgYW5kIG9uZSB0byBleGl0LlxuLy9cbmZ1bmN0aW9uIFBsdXNMb29wYmFja1N0YXRlKCkge1xuXHREZWNpc2lvblN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuc3RhdGVUeXBlID0gQVROU3RhdGUuUExVU19MT09QX0JBQ0s7XG5cdHJldHVybiB0aGlzO1xufVxuXG5QbHVzTG9vcGJhY2tTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlY2lzaW9uU3RhdGUucHJvdG90eXBlKTtcblBsdXNMb29wYmFja1N0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBsdXNMb29wYmFja1N0YXRlO1xuXG5cbi8vIFN0YXJ0IG9mIHtAY29kZSAoQXxCfC4uLikrfSBsb29wLiBUZWNobmljYWxseSBhIGRlY2lzaW9uIHN0YXRlLCBidXRcbi8vICB3ZSBkb24ndCB1c2UgZm9yIGNvZGUgZ2VuZXJhdGlvbjsgc29tZWJvZHkgbWlnaHQgbmVlZCBpdCwgc28gSSdtIGRlZmluaW5nXG4vLyAgaXQgZm9yIGNvbXBsZXRlbmVzcy4gSW4gcmVhbGl0eSwgdGhlIHtAbGluayBQbHVzTG9vcGJhY2tTdGF0ZX0gbm9kZSBpcyB0aGVcbi8vICByZWFsIGRlY2lzaW9uLW1ha2luZyBub3RlIGZvciB7QGNvZGUgQSt9LlxuLy9cbmZ1bmN0aW9uIFBsdXNCbG9ja1N0YXJ0U3RhdGUoKSB7XG5cdEJsb2NrU3RhcnRTdGF0ZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLlBMVVNfQkxPQ0tfU1RBUlQ7XG4gICAgdGhpcy5sb29wQmFja1N0YXRlID0gbnVsbDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuUGx1c0Jsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUpO1xuUGx1c0Jsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQbHVzQmxvY2tTdGFydFN0YXRlO1xuXG4vLyBUaGUgYmxvY2sgdGhhdCBiZWdpbnMgYSBjbG9zdXJlIGxvb3AuXG5mdW5jdGlvbiBTdGFyQmxvY2tTdGFydFN0YXRlKCkge1xuXHRCbG9ja1N0YXJ0U3RhdGUuY2FsbCh0aGlzKTtcblx0dGhpcy5zdGF0ZVR5cGUgPSBBVE5TdGF0ZS5TVEFSX0JMT0NLX1NUQVJUO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuU3RhckJsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUpO1xuU3RhckJsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTdGFyQmxvY2tTdGFydFN0YXRlO1xuXG5cbmZ1bmN0aW9uIFN0YXJMb29wYmFja1N0YXRlKCkge1xuXHRBVE5TdGF0ZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLlNUQVJfTE9PUF9CQUNLO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuU3Rhckxvb3BiYWNrU3RhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBVE5TdGF0ZS5wcm90b3R5cGUpO1xuU3Rhckxvb3BiYWNrU3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3Rhckxvb3BiYWNrU3RhdGU7XG5cblxuZnVuY3Rpb24gU3Rhckxvb3BFbnRyeVN0YXRlKCkge1xuXHREZWNpc2lvblN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuc3RhdGVUeXBlID0gQVROU3RhdGUuU1RBUl9MT09QX0VOVFJZO1xuICAgIHRoaXMubG9vcEJhY2tTdGF0ZSA9IG51bGw7XG4gICAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBzdGF0ZSBjYW4gYmVuZWZpdCBmcm9tIGEgcHJlY2VkZW5jZSBERkEgZHVyaW5nIFNMTCBkZWNpc2lvbiBtYWtpbmcuXG4gICAgdGhpcy5pc1ByZWNlZGVuY2VEZWNpc2lvbiA9IG51bGw7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblN0YXJMb29wRW50cnlTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlY2lzaW9uU3RhdGUucHJvdG90eXBlKTtcblN0YXJMb29wRW50cnlTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTdGFyTG9vcEVudHJ5U3RhdGU7XG5cblxuLy8gTWFyayB0aGUgZW5kIG9mIGEgKiBvciArIGxvb3AuXG5mdW5jdGlvbiBMb29wRW5kU3RhdGUoKSB7XG5cdEFUTlN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuc3RhdGVUeXBlID0gQVROU3RhdGUuTE9PUF9FTkQ7XG5cdHRoaXMubG9vcEJhY2tTdGF0ZSA9IG51bGw7XG5cdHJldHVybiB0aGlzO1xufVxuXG5Mb29wRW5kU3RhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBVE5TdGF0ZS5wcm90b3R5cGUpO1xuTG9vcEVuZFN0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExvb3BFbmRTdGF0ZTtcblxuXG4vLyBUaGUgVG9rZW5zIHJ1bGUgc3RhcnQgc3RhdGUgbGlua2luZyB0byBlYWNoIGxleGVyIHJ1bGUgc3RhcnQgc3RhdGUgKi9cbmZ1bmN0aW9uIFRva2Vuc1N0YXJ0U3RhdGUoKSB7XG5cdERlY2lzaW9uU3RhdGUuY2FsbCh0aGlzKTtcblx0dGhpcy5zdGF0ZVR5cGUgPSBBVE5TdGF0ZS5UT0tFTl9TVEFSVDtcblx0cmV0dXJuIHRoaXM7XG59XG5cblRva2Vuc1N0YXJ0U3RhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEZWNpc2lvblN0YXRlLnByb3RvdHlwZSk7XG5Ub2tlbnNTdGFydFN0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFRva2Vuc1N0YXJ0U3RhdGU7XG5cbmV4cG9ydHMuQVROU3RhdGUgPSBBVE5TdGF0ZTtcbmV4cG9ydHMuQmFzaWNTdGF0ZSA9IEJhc2ljU3RhdGU7XG5leHBvcnRzLkRlY2lzaW9uU3RhdGUgPSBEZWNpc2lvblN0YXRlO1xuZXhwb3J0cy5CbG9ja1N0YXJ0U3RhdGUgPSBCbG9ja1N0YXJ0U3RhdGU7XG5leHBvcnRzLkJsb2NrRW5kU3RhdGUgPSBCbG9ja0VuZFN0YXRlO1xuZXhwb3J0cy5Mb29wRW5kU3RhdGUgPSBMb29wRW5kU3RhdGU7XG5leHBvcnRzLlJ1bGVTdGFydFN0YXRlID0gUnVsZVN0YXJ0U3RhdGU7XG5leHBvcnRzLlJ1bGVTdG9wU3RhdGUgPSBSdWxlU3RvcFN0YXRlO1xuZXhwb3J0cy5Ub2tlbnNTdGFydFN0YXRlID0gVG9rZW5zU3RhcnRTdGF0ZTtcbmV4cG9ydHMuUGx1c0xvb3BiYWNrU3RhdGUgPSBQbHVzTG9vcGJhY2tTdGF0ZTtcbmV4cG9ydHMuU3Rhckxvb3BiYWNrU3RhdGUgPSBTdGFyTG9vcGJhY2tTdGF0ZTtcbmV4cG9ydHMuU3Rhckxvb3BFbnRyeVN0YXRlID0gU3Rhckxvb3BFbnRyeVN0YXRlO1xuZXhwb3J0cy5QbHVzQmxvY2tTdGFydFN0YXRlID0gUGx1c0Jsb2NrU3RhcnRTdGF0ZTtcbmV4cG9ydHMuU3RhckJsb2NrU3RhcnRTdGF0ZSA9IFN0YXJCbG9ja1N0YXJ0U3RhdGU7XG5leHBvcnRzLkJhc2ljQmxvY2tTdGFydFN0YXRlID0gQmFzaWNCbG9ja1N0YXJ0U3RhdGU7XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxuLy8gUmVwcmVzZW50cyB0aGUgdHlwZSBvZiByZWNvZ25pemVyIGFuIEFUTiBhcHBsaWVzIHRvLlxuXG5mdW5jdGlvbiBBVE5UeXBlKCkge1xuXG59XG5cbkFUTlR5cGUuTEVYRVIgPSAwO1xuQVROVHlwZS5QQVJTRVIgPSAxO1xuXG5leHBvcnRzLkFUTlR5cGUgPSBBVE5UeXBlO1xuXG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy8vXG5cbi8vIFdoZW4gd2UgaGl0IGFuIGFjY2VwdCBzdGF0ZSBpbiBlaXRoZXIgdGhlIERGQSBvciB0aGUgQVROLCB3ZVxuLy8gIGhhdmUgdG8gbm90aWZ5IHRoZSBjaGFyYWN0ZXIgc3RyZWFtIHRvIHN0YXJ0IGJ1ZmZlcmluZyBjaGFyYWN0ZXJzXG4vLyAgdmlhIHtAbGluayBJbnRTdHJlYW0vL21hcmt9IGFuZCByZWNvcmQgdGhlIGN1cnJlbnQgc3RhdGUuIFRoZSBjdXJyZW50IHNpbSBzdGF0ZVxuLy8gIGluY2x1ZGVzIHRoZSBjdXJyZW50IGluZGV4IGludG8gdGhlIGlucHV0LCB0aGUgY3VycmVudCBsaW5lLFxuLy8gIGFuZCBjdXJyZW50IGNoYXJhY3RlciBwb3NpdGlvbiBpbiB0aGF0IGxpbmUuIE5vdGUgdGhhdCB0aGUgTGV4ZXIgaXNcbi8vICB0cmFja2luZyB0aGUgc3RhcnRpbmcgbGluZSBhbmQgY2hhcmFjdGVyaXphdGlvbiBvZiB0aGUgdG9rZW4uIFRoZXNlXG4vLyAgdmFyaWFibGVzIHRyYWNrIHRoZSBcInN0YXRlXCIgb2YgdGhlIHNpbXVsYXRvciB3aGVuIGl0IGhpdHMgYW4gYWNjZXB0IHN0YXRlLlxuLy9cbi8vICA8cD5XZSB0cmFjayB0aGVzZSB2YXJpYWJsZXMgc2VwYXJhdGVseSBmb3IgdGhlIERGQSBhbmQgQVROIHNpbXVsYXRpb25cbi8vICBiZWNhdXNlIHRoZSBERkEgc2ltdWxhdGlvbiBvZnRlbiBoYXMgdG8gZmFpbCBvdmVyIHRvIHRoZSBBVE5cbi8vICBzaW11bGF0aW9uLiBJZiB0aGUgQVROIHNpbXVsYXRpb24gZmFpbHMsIHdlIG5lZWQgdGhlIERGQSB0byBmYWxsXG4vLyAgYmFjayB0byBpdHMgcHJldmlvdXNseSBhY2NlcHRlZCBzdGF0ZSwgaWYgYW55LiBJZiB0aGUgQVROIHN1Y2NlZWRzLFxuLy8gIHRoZW4gdGhlIEFUTiBkb2VzIHRoZSBhY2NlcHQgYW5kIHRoZSBERkEgc2ltdWxhdG9yIHRoYXQgaW52b2tlZCBpdFxuLy8gIGNhbiBzaW1wbHkgcmV0dXJuIHRoZSBwcmVkaWN0ZWQgdG9rZW4gdHlwZS48L3A+XG4vLy9cblxudmFyIFRva2VuID0gcmVxdWlyZSgnLi8uLi9Ub2tlbicpLlRva2VuO1xudmFyIExleGVyID0gcmVxdWlyZSgnLi8uLi9MZXhlcicpLkxleGVyO1xudmFyIEFUTiA9IHJlcXVpcmUoJy4vQVROJykuQVROO1xudmFyIEFUTlNpbXVsYXRvciA9IHJlcXVpcmUoJy4vQVROU2ltdWxhdG9yJykuQVROU2ltdWxhdG9yO1xudmFyIERGQVN0YXRlID0gcmVxdWlyZSgnLi8uLi9kZmEvREZBU3RhdGUnKS5ERkFTdGF0ZTtcbnZhciBBVE5Db25maWdTZXQgPSByZXF1aXJlKCcuL0FUTkNvbmZpZ1NldCcpLkFUTkNvbmZpZ1NldDtcbnZhciBPcmRlcmVkQVROQ29uZmlnU2V0ID0gcmVxdWlyZSgnLi9BVE5Db25maWdTZXQnKS5PcmRlcmVkQVROQ29uZmlnU2V0O1xudmFyIFByZWRpY3Rpb25Db250ZXh0ID0gcmVxdWlyZSgnLi8uLi9QcmVkaWN0aW9uQ29udGV4dCcpLlByZWRpY3Rpb25Db250ZXh0O1xudmFyIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0ID0gcmVxdWlyZSgnLi8uLi9QcmVkaWN0aW9uQ29udGV4dCcpLlNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0O1xudmFyIFJ1bGVTdG9wU3RhdGUgPSByZXF1aXJlKCcuL0FUTlN0YXRlJykuUnVsZVN0b3BTdGF0ZTtcbnZhciBMZXhlckFUTkNvbmZpZyA9IHJlcXVpcmUoJy4vQVROQ29uZmlnJykuTGV4ZXJBVE5Db25maWc7XG52YXIgVHJhbnNpdGlvbiA9IHJlcXVpcmUoJy4vVHJhbnNpdGlvbicpLlRyYW5zaXRpb247XG52YXIgTGV4ZXJBY3Rpb25FeGVjdXRvciA9IHJlcXVpcmUoJy4vTGV4ZXJBY3Rpb25FeGVjdXRvcicpLkxleGVyQWN0aW9uRXhlY3V0b3I7XG52YXIgTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbiA9IHJlcXVpcmUoJy4vLi4vZXJyb3IvRXJyb3JzJykuTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbjtcblxuZnVuY3Rpb24gcmVzZXRTaW1TdGF0ZShzaW0pIHtcblx0c2ltLmluZGV4ID0gLTE7XG5cdHNpbS5saW5lID0gMDtcblx0c2ltLmNvbHVtbiA9IC0xO1xuXHRzaW0uZGZhU3RhdGUgPSBudWxsO1xufVxuXG5mdW5jdGlvbiBTaW1TdGF0ZSgpIHtcblx0cmVzZXRTaW1TdGF0ZSh0aGlzKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cblNpbVN0YXRlLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuXHRyZXNldFNpbVN0YXRlKHRoaXMpO1xufTtcblxuZnVuY3Rpb24gTGV4ZXJBVE5TaW11bGF0b3IocmVjb2csIGF0biwgZGVjaXNpb25Ub0RGQSwgc2hhcmVkQ29udGV4dENhY2hlKSB7XG5cdEFUTlNpbXVsYXRvci5jYWxsKHRoaXMsIGF0biwgc2hhcmVkQ29udGV4dENhY2hlKTtcblx0dGhpcy5kZWNpc2lvblRvREZBID0gZGVjaXNpb25Ub0RGQTtcblx0dGhpcy5yZWNvZyA9IHJlY29nO1xuXHQvLyBUaGUgY3VycmVudCB0b2tlbidzIHN0YXJ0aW5nIGluZGV4IGludG8gdGhlIGNoYXJhY3RlciBzdHJlYW0uXG5cdC8vIFNoYXJlZCBhY3Jvc3MgREZBIHRvIEFUTiBzaW11bGF0aW9uIGluIGNhc2UgdGhlIEFUTiBmYWlscyBhbmQgdGhlXG5cdC8vIERGQSBkaWQgbm90IGhhdmUgYSBwcmV2aW91cyBhY2NlcHQgc3RhdGUuIEluIHRoaXMgY2FzZSwgd2UgdXNlIHRoZVxuXHQvLyBBVE4tZ2VuZXJhdGVkIGV4Y2VwdGlvbiBvYmplY3QuXG5cdHRoaXMuc3RhcnRJbmRleCA9IC0xO1xuXHQvLyBsaW5lIG51bWJlciAxLi5uIHdpdGhpbiB0aGUgaW5wdXQvLy9cblx0dGhpcy5saW5lID0gMTtcblx0Ly8gVGhlIGluZGV4IG9mIHRoZSBjaGFyYWN0ZXIgcmVsYXRpdmUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGluZVxuXHQvLyAwLi5uLTEvLy9cblx0dGhpcy5jb2x1bW4gPSAwO1xuXHR0aGlzLm1vZGUgPSBMZXhlci5ERUZBVUxUX01PREU7XG5cdC8vIFVzZWQgZHVyaW5nIERGQS9BVE4gZXhlYyB0byByZWNvcmQgdGhlIG1vc3QgcmVjZW50IGFjY2VwdCBjb25maWd1cmF0aW9uXG5cdC8vIGluZm9cblx0dGhpcy5wcmV2QWNjZXB0ID0gbmV3IFNpbVN0YXRlKCk7XG5cdC8vIGRvbmVcblx0cmV0dXJuIHRoaXM7XG59XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQVROU2ltdWxhdG9yLnByb3RvdHlwZSk7XG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlckFUTlNpbXVsYXRvcjtcblxuTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcgPSBmYWxzZTtcbkxleGVyQVROU2ltdWxhdG9yLmRmYV9kZWJ1ZyA9IGZhbHNlO1xuXG5MZXhlckFUTlNpbXVsYXRvci5NSU5fREZBX0VER0UgPSAwO1xuTGV4ZXJBVE5TaW11bGF0b3IuTUFYX0RGQV9FREdFID0gMTI3OyAvLyBmb3JjZXMgdW5pY29kZSB0byBzdGF5IGluIEFUTlxuXG5MZXhlckFUTlNpbXVsYXRvci5tYXRjaF9jYWxscyA9IDA7XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jb3B5U3RhdGUgPSBmdW5jdGlvbihzaW11bGF0b3IpIHtcblx0dGhpcy5jb2x1bW4gPSBzaW11bGF0b3IuY29sdW1uO1xuXHR0aGlzLmxpbmUgPSBzaW11bGF0b3IubGluZTtcblx0dGhpcy5tb2RlID0gc2ltdWxhdG9yLm1vZGU7XG5cdHRoaXMuc3RhcnRJbmRleCA9IHNpbXVsYXRvci5zdGFydEluZGV4O1xufTtcblxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24oaW5wdXQsIG1vZGUpIHtcblx0dGhpcy5tYXRjaF9jYWxscyArPSAxO1xuXHR0aGlzLm1vZGUgPSBtb2RlO1xuXHR2YXIgbWFyayA9IGlucHV0Lm1hcmsoKTtcblx0dHJ5IHtcblx0XHR0aGlzLnN0YXJ0SW5kZXggPSBpbnB1dC5pbmRleDtcblx0XHR0aGlzLnByZXZBY2NlcHQucmVzZXQoKTtcblx0XHR2YXIgZGZhID0gdGhpcy5kZWNpc2lvblRvREZBW21vZGVdO1xuXHRcdGlmIChkZmEuczAgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiB0aGlzLm1hdGNoQVROKGlucHV0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuZXhlY0FUTihpbnB1dCwgZGZhLnMwKTtcblx0XHR9XG5cdH0gZmluYWxseSB7XG5cdFx0aW5wdXQucmVsZWFzZShtYXJrKTtcblx0fVxufTtcblxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMucHJldkFjY2VwdC5yZXNldCgpO1xuXHR0aGlzLnN0YXJ0SW5kZXggPSAtMTtcblx0dGhpcy5saW5lID0gMTtcblx0dGhpcy5jb2x1bW4gPSAwO1xuXHR0aGlzLm1vZGUgPSBMZXhlci5ERUZBVUxUX01PREU7XG59O1xuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUubWF0Y2hBVE4gPSBmdW5jdGlvbihpbnB1dCkge1xuXHR2YXIgc3RhcnRTdGF0ZSA9IHRoaXMuYXRuLm1vZGVUb1N0YXJ0U3RhdGVbdGhpcy5tb2RlXTtcblxuXHRpZiAoTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcpIHtcblx0XHRjb25zb2xlLmxvZyhcIm1hdGNoQVROIG1vZGUgXCIgKyB0aGlzLm1vZGUgKyBcIiBzdGFydDogXCIgKyBzdGFydFN0YXRlKTtcblx0fVxuXHR2YXIgb2xkX21vZGUgPSB0aGlzLm1vZGU7XG5cdHZhciBzMF9jbG9zdXJlID0gdGhpcy5jb21wdXRlU3RhcnRTdGF0ZShpbnB1dCwgc3RhcnRTdGF0ZSk7XG5cdHZhciBzdXBwcmVzc0VkZ2UgPSBzMF9jbG9zdXJlLmhhc1NlbWFudGljQ29udGV4dDtcblx0czBfY2xvc3VyZS5oYXNTZW1hbnRpY0NvbnRleHQgPSBmYWxzZTtcblxuXHR2YXIgbmV4dCA9IHRoaXMuYWRkREZBU3RhdGUoczBfY2xvc3VyZSk7XG5cdGlmICghc3VwcHJlc3NFZGdlKSB7XG5cdFx0dGhpcy5kZWNpc2lvblRvREZBW3RoaXMubW9kZV0uczAgPSBuZXh0O1xuXHR9XG5cblx0dmFyIHByZWRpY3QgPSB0aGlzLmV4ZWNBVE4oaW5wdXQsIG5leHQpO1xuXG5cdGlmIChMZXhlckFUTlNpbXVsYXRvci5kZWJ1Zykge1xuXHRcdGNvbnNvbGUubG9nKFwiREZBIGFmdGVyIG1hdGNoQVROOiBcIiArIHRoaXMuZGVjaXNpb25Ub0RGQVtvbGRfbW9kZV0udG9MZXhlclN0cmluZygpKTtcblx0fVxuXHRyZXR1cm4gcHJlZGljdDtcbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5leGVjQVROID0gZnVuY3Rpb24oaW5wdXQsIGRzMCkge1xuXHRpZiAoTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcpIHtcblx0XHRjb25zb2xlLmxvZyhcInN0YXJ0IHN0YXRlIGNsb3N1cmU9XCIgKyBkczAuY29uZmlncyk7XG5cdH1cblx0aWYgKGRzMC5pc0FjY2VwdFN0YXRlKSB7XG5cdFx0Ly8gYWxsb3cgemVyby1sZW5ndGggdG9rZW5zXG5cdFx0dGhpcy5jYXB0dXJlU2ltU3RhdGUodGhpcy5wcmV2QWNjZXB0LCBpbnB1dCwgZHMwKTtcblx0fVxuXHR2YXIgdCA9IGlucHV0LkxBKDEpO1xuXHR2YXIgcyA9IGRzMDsgLy8gcyBpcyBjdXJyZW50L2Zyb20gREZBIHN0YXRlXG5cblx0d2hpbGUgKHRydWUpIHsgLy8gd2hpbGUgbW9yZSB3b3JrXG5cdFx0aWYgKExleGVyQVROU2ltdWxhdG9yLmRlYnVnKSB7XG5cdFx0XHRjb25zb2xlLmxvZyhcImV4ZWNBVE4gbG9vcCBzdGFydGluZyBjbG9zdXJlOiBcIiArIHMuY29uZmlncyk7XG5cdFx0fVxuXG5cdFx0Ly8gQXMgd2UgbW92ZSBzcmMtPnRyZywgc3JjLT50cmcsIHdlIGtlZXAgdHJhY2sgb2YgdGhlIHByZXZpb3VzIHRyZyB0b1xuXHRcdC8vIGF2b2lkIGxvb2tpbmcgdXAgdGhlIERGQSBzdGF0ZSBhZ2Fpbiwgd2hpY2ggaXMgZXhwZW5zaXZlLlxuXHRcdC8vIElmIHRoZSBwcmV2aW91cyB0YXJnZXQgd2FzIGFscmVhZHkgcGFydCBvZiB0aGUgREZBLCB3ZSBtaWdodFxuXHRcdC8vIGJlIGFibGUgdG8gYXZvaWQgZG9pbmcgYSByZWFjaCBvcGVyYXRpb24gdXBvbiB0LiBJZiBzIT1udWxsLFxuXHRcdC8vIGl0IG1lYW5zIHRoYXQgc2VtYW50aWMgcHJlZGljYXRlcyBkaWRuJ3QgcHJldmVudCB1cyBmcm9tXG5cdFx0Ly8gY3JlYXRpbmcgYSBERkEgc3RhdGUuIE9uY2Ugd2Uga25vdyBzIT1udWxsLCB3ZSBjaGVjayB0byBzZWUgaWZcblx0XHQvLyB0aGUgREZBIHN0YXRlIGhhcyBhbiBlZGdlIGFscmVhZHkgZm9yIHQuIElmIHNvLCB3ZSBjYW4ganVzdCByZXVzZVxuXHRcdC8vIGl0J3MgY29uZmlndXJhdGlvbiBzZXQ7IHRoZXJlJ3Mgbm8gcG9pbnQgaW4gcmUtY29tcHV0aW5nIGl0LlxuXHRcdC8vIFRoaXMgaXMga2luZCBvZiBsaWtlIGRvaW5nIERGQSBzaW11bGF0aW9uIHdpdGhpbiB0aGUgQVROXG5cdFx0Ly8gc2ltdWxhdGlvbiBiZWNhdXNlIERGQSBzaW11bGF0aW9uIGlzIHJlYWxseSBqdXN0IGEgd2F5IHRvIGF2b2lkXG5cdFx0Ly8gY29tcHV0aW5nIHJlYWNoL2Nsb3N1cmUgc2V0cy4gVGVjaG5pY2FsbHksIG9uY2Ugd2Uga25vdyB0aGF0XG5cdFx0Ly8gd2UgaGF2ZSBhIHByZXZpb3VzbHkgYWRkZWQgREZBIHN0YXRlLCB3ZSBjb3VsZCBqdW1wIG92ZXIgdG9cblx0XHQvLyB0aGUgREZBIHNpbXVsYXRvci4gQnV0LCB0aGF0IHdvdWxkIG1lYW4gcG9wcGluZyBiYWNrIGFuZCBmb3J0aFxuXHRcdC8vIGEgbG90IGFuZCBtYWtpbmcgdGhpbmdzIG1vcmUgY29tcGxpY2F0ZWQgYWxnb3JpdGhtaWNhbGx5LlxuXHRcdC8vIFRoaXMgb3B0aW1pemF0aW9uIG1ha2VzIGEgbG90IG9mIHNlbnNlIGZvciBsb29wcyB3aXRoaW4gREZBLlxuXHRcdC8vIEEgY2hhcmFjdGVyIHdpbGwgdGFrZSB1cyBiYWNrIHRvIGFuIGV4aXN0aW5nIERGQSBzdGF0ZVxuXHRcdC8vIHRoYXQgYWxyZWFkeSBoYXMgbG90cyBvZiBlZGdlcyBvdXQgb2YgaXQuIGUuZy4sIC4qIGluIGNvbW1lbnRzLlxuXHRcdC8vIHByaW50KFwiVGFyZ2V0IGZvcjpcIiArIHN0cihzKSArIFwiIGFuZDpcIiArIHN0cih0KSlcblx0XHR2YXIgdGFyZ2V0ID0gdGhpcy5nZXRFeGlzdGluZ1RhcmdldFN0YXRlKHMsIHQpO1xuXHRcdC8vIHByaW50KFwiRXhpc3Rpbmc6XCIgKyBzdHIodGFyZ2V0KSlcblx0XHRpZiAodGFyZ2V0ID09PSBudWxsKSB7XG5cdFx0XHR0YXJnZXQgPSB0aGlzLmNvbXB1dGVUYXJnZXRTdGF0ZShpbnB1dCwgcywgdCk7XG5cdFx0XHQvLyBwcmludChcIkNvbXB1dGVkOlwiICsgc3RyKHRhcmdldCkpXG5cdFx0fVxuXHRcdGlmICh0YXJnZXQgPT09IEFUTlNpbXVsYXRvci5FUlJPUikge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdC8vIElmIHRoaXMgaXMgYSBjb25zdW1hYmxlIGlucHV0IGVsZW1lbnQsIG1ha2Ugc3VyZSB0byBjb25zdW1lIGJlZm9yZVxuXHRcdC8vIGNhcHR1cmluZyB0aGUgYWNjZXB0IHN0YXRlIHNvIHRoZSBpbnB1dCBpbmRleCwgbGluZSwgYW5kIGNoYXJcblx0XHQvLyBwb3NpdGlvbiBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhlIHN0YXRlIG9mIHRoZSBpbnRlcnByZXRlciBhdCB0aGVcblx0XHQvLyBlbmQgb2YgdGhlIHRva2VuLlxuXHRcdGlmICh0ICE9PSBUb2tlbi5FT0YpIHtcblx0XHRcdHRoaXMuY29uc3VtZShpbnB1dCk7XG5cdFx0fVxuXHRcdGlmICh0YXJnZXQuaXNBY2NlcHRTdGF0ZSkge1xuXHRcdFx0dGhpcy5jYXB0dXJlU2ltU3RhdGUodGhpcy5wcmV2QWNjZXB0LCBpbnB1dCwgdGFyZ2V0KTtcblx0XHRcdGlmICh0ID09PSBUb2tlbi5FT0YpIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHQgPSBpbnB1dC5MQSgxKTtcblx0XHRzID0gdGFyZ2V0OyAvLyBmbGlwOyBjdXJyZW50IERGQSB0YXJnZXQgYmVjb21lcyBuZXcgc3JjL2Zyb20gc3RhdGVcblx0fVxuXHRyZXR1cm4gdGhpcy5mYWlsT3JBY2NlcHQodGhpcy5wcmV2QWNjZXB0LCBpbnB1dCwgcy5jb25maWdzLCB0KTtcbn07XG5cbi8vIEdldCBhbiBleGlzdGluZyB0YXJnZXQgc3RhdGUgZm9yIGFuIGVkZ2UgaW4gdGhlIERGQS4gSWYgdGhlIHRhcmdldCBzdGF0ZVxuLy8gZm9yIHRoZSBlZGdlIGhhcyBub3QgeWV0IGJlZW4gY29tcHV0ZWQgb3IgaXMgb3RoZXJ3aXNlIG5vdCBhdmFpbGFibGUsXG4vLyB0aGlzIG1ldGhvZCByZXR1cm5zIHtAY29kZSBudWxsfS5cbi8vXG4vLyBAcGFyYW0gcyBUaGUgY3VycmVudCBERkEgc3RhdGVcbi8vIEBwYXJhbSB0IFRoZSBuZXh0IGlucHV0IHN5bWJvbFxuLy8gQHJldHVybiBUaGUgZXhpc3RpbmcgdGFyZ2V0IERGQSBzdGF0ZSBmb3IgdGhlIGdpdmVuIGlucHV0IHN5bWJvbFxuLy8ge0Bjb2RlIHR9LCBvciB7QGNvZGUgbnVsbH0gaWYgdGhlIHRhcmdldCBzdGF0ZSBmb3IgdGhpcyBlZGdlIGlzIG5vdFxuLy8gYWxyZWFkeSBjYWNoZWRcbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRFeGlzdGluZ1RhcmdldFN0YXRlID0gZnVuY3Rpb24ocywgdCkge1xuXHRpZiAocy5lZGdlcyA9PT0gbnVsbCB8fCB0IDwgTGV4ZXJBVE5TaW11bGF0b3IuTUlOX0RGQV9FREdFIHx8IHQgPiBMZXhlckFUTlNpbXVsYXRvci5NQVhfREZBX0VER0UpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHZhciB0YXJnZXQgPSBzLmVkZ2VzW3QgLSBMZXhlckFUTlNpbXVsYXRvci5NSU5fREZBX0VER0VdO1xuXHRpZih0YXJnZXQ9PT11bmRlZmluZWQpIHtcblx0XHR0YXJnZXQgPSBudWxsO1xuXHR9XG5cdGlmIChMZXhlckFUTlNpbXVsYXRvci5kZWJ1ZyAmJiB0YXJnZXQgIT09IG51bGwpIHtcblx0XHRjb25zb2xlLmxvZyhcInJldXNlIHN0YXRlIFwiICsgcy5zdGF0ZU51bWJlciArIFwiIGVkZ2UgdG8gXCIgKyB0YXJnZXQuc3RhdGVOdW1iZXIpO1xuXHR9XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG4vLyBDb21wdXRlIGEgdGFyZ2V0IHN0YXRlIGZvciBhbiBlZGdlIGluIHRoZSBERkEsIGFuZCBhdHRlbXB0IHRvIGFkZCB0aGVcbi8vIGNvbXB1dGVkIHN0YXRlIGFuZCBjb3JyZXNwb25kaW5nIGVkZ2UgdG8gdGhlIERGQS5cbi8vXG4vLyBAcGFyYW0gaW5wdXQgVGhlIGlucHV0IHN0cmVhbVxuLy8gQHBhcmFtIHMgVGhlIGN1cnJlbnQgREZBIHN0YXRlXG4vLyBAcGFyYW0gdCBUaGUgbmV4dCBpbnB1dCBzeW1ib2xcbi8vXG4vLyBAcmV0dXJuIFRoZSBjb21wdXRlZCB0YXJnZXQgREZBIHN0YXRlIGZvciB0aGUgZ2l2ZW4gaW5wdXQgc3ltYm9sXG4vLyB7QGNvZGUgdH0uIElmIHtAY29kZSB0fSBkb2VzIG5vdCBsZWFkIHRvIGEgdmFsaWQgREZBIHN0YXRlLCB0aGlzIG1ldGhvZFxuLy8gcmV0dXJucyB7QGxpbmsgLy9FUlJPUn0uXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY29tcHV0ZVRhcmdldFN0YXRlID0gZnVuY3Rpb24oaW5wdXQsIHMsIHQpIHtcblx0dmFyIHJlYWNoID0gbmV3IE9yZGVyZWRBVE5Db25maWdTZXQoKTtcblx0Ly8gaWYgd2UgZG9uJ3QgZmluZCBhbiBleGlzdGluZyBERkEgc3RhdGVcblx0Ly8gRmlsbCByZWFjaCBzdGFydGluZyBmcm9tIGNsb3N1cmUsIGZvbGxvd2luZyB0IHRyYW5zaXRpb25zXG5cdHRoaXMuZ2V0UmVhY2hhYmxlQ29uZmlnU2V0KGlucHV0LCBzLmNvbmZpZ3MsIHJlYWNoLCB0KTtcblxuXHRpZiAocmVhY2guaXRlbXMubGVuZ3RoID09PSAwKSB7IC8vIHdlIGdvdCBub3doZXJlIG9uIHQgZnJvbSBzXG5cdFx0aWYgKCFyZWFjaC5oYXNTZW1hbnRpY0NvbnRleHQpIHtcblx0XHRcdC8vIHdlIGdvdCBub3doZXJlIG9uIHQsIGRvbid0IHRocm93IG91dCB0aGlzIGtub3dsZWRnZTsgaXQnZFxuXHRcdFx0Ly8gY2F1c2UgYSBmYWlsb3ZlciBmcm9tIERGQSBsYXRlci5cblx0XHRcdHRoaXMuYWRkREZBRWRnZShzLCB0LCBBVE5TaW11bGF0b3IuRVJST1IpO1xuXHRcdH1cblx0XHQvLyBzdG9wIHdoZW4gd2UgY2FuJ3QgbWF0Y2ggYW55IG1vcmUgY2hhclxuXHRcdHJldHVybiBBVE5TaW11bGF0b3IuRVJST1I7XG5cdH1cblx0Ly8gQWRkIGFuIGVkZ2UgZnJvbSBzIHRvIHRhcmdldCBERkEgZm91bmQvY3JlYXRlZCBmb3IgcmVhY2hcblx0cmV0dXJuIHRoaXMuYWRkREZBRWRnZShzLCB0LCBudWxsLCByZWFjaCk7XG59O1xuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZmFpbE9yQWNjZXB0ID0gZnVuY3Rpb24ocHJldkFjY2VwdCwgaW5wdXQsIHJlYWNoLCB0KSB7XG5cdGlmICh0aGlzLnByZXZBY2NlcHQuZGZhU3RhdGUgIT09IG51bGwpIHtcblx0XHR2YXIgbGV4ZXJBY3Rpb25FeGVjdXRvciA9IHByZXZBY2NlcHQuZGZhU3RhdGUubGV4ZXJBY3Rpb25FeGVjdXRvcjtcblx0XHR0aGlzLmFjY2VwdChpbnB1dCwgbGV4ZXJBY3Rpb25FeGVjdXRvciwgdGhpcy5zdGFydEluZGV4LFxuXHRcdFx0XHRwcmV2QWNjZXB0LmluZGV4LCBwcmV2QWNjZXB0LmxpbmUsIHByZXZBY2NlcHQuY29sdW1uKTtcblx0XHRyZXR1cm4gcHJldkFjY2VwdC5kZmFTdGF0ZS5wcmVkaWN0aW9uO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGlmIG5vIGFjY2VwdCBhbmQgRU9GIGlzIGZpcnN0IGNoYXIsIHJldHVybiBFT0Zcblx0XHRpZiAodCA9PT0gVG9rZW4uRU9GICYmIGlucHV0LmluZGV4ID09PSB0aGlzLnN0YXJ0SW5kZXgpIHtcblx0XHRcdHJldHVybiBUb2tlbi5FT0Y7XG5cdFx0fVxuXHRcdHRocm93IG5ldyBMZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uKHRoaXMucmVjb2csIGlucHV0LCB0aGlzLnN0YXJ0SW5kZXgsIHJlYWNoKTtcblx0fVxufTtcblxuLy8gR2l2ZW4gYSBzdGFydGluZyBjb25maWd1cmF0aW9uIHNldCwgZmlndXJlIG91dCBhbGwgQVROIGNvbmZpZ3VyYXRpb25zXG4vLyB3ZSBjYW4gcmVhY2ggdXBvbiBpbnB1dCB7QGNvZGUgdH0uIFBhcmFtZXRlciB7QGNvZGUgcmVhY2h9IGlzIGEgcmV0dXJuXG4vLyBwYXJhbWV0ZXIuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0UmVhY2hhYmxlQ29uZmlnU2V0ID0gZnVuY3Rpb24oaW5wdXQsIGNsb3N1cmUsXG5cdFx0cmVhY2gsIHQpIHtcblx0Ly8gdGhpcyBpcyB1c2VkIHRvIHNraXAgcHJvY2Vzc2luZyBmb3IgY29uZmlncyB3aGljaCBoYXZlIGEgbG93ZXIgcHJpb3JpdHlcblx0Ly8gdGhhbiBhIGNvbmZpZyB0aGF0IGFscmVhZHkgcmVhY2hlZCBhbiBhY2NlcHQgc3RhdGUgZm9yIHRoZSBzYW1lIHJ1bGVcblx0dmFyIHNraXBBbHQgPSBBVE4uSU5WQUxJRF9BTFRfTlVNQkVSO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGNsb3N1cmUuaXRlbXMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgY2ZnID0gY2xvc3VyZS5pdGVtc1tpXTtcblx0XHR2YXIgY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZSA9IChjZmcuYWx0ID09PSBza2lwQWx0KTtcblx0XHRpZiAoY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZSAmJiBjZmcucGFzc2VkVGhyb3VnaE5vbkdyZWVkeURlY2lzaW9uKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cdFx0aWYgKExleGVyQVROU2ltdWxhdG9yLmRlYnVnKSB7XG5cdFx0XHRjb25zb2xlLmxvZyhcInRlc3RpbmcgJXMgYXQgJXNcXG5cIiwgdGhpcy5nZXRUb2tlbk5hbWUodCksIGNmZ1xuXHRcdFx0XHRcdC50b1N0cmluZyh0aGlzLnJlY29nLCB0cnVlKSk7XG5cdFx0fVxuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgY2ZnLnN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDsgaisrKSB7XG5cdFx0XHR2YXIgdHJhbnMgPSBjZmcuc3RhdGUudHJhbnNpdGlvbnNbal07IC8vIGZvciBlYWNoIHRyYW5zaXRpb25cblx0XHRcdHZhciB0YXJnZXQgPSB0aGlzLmdldFJlYWNoYWJsZVRhcmdldCh0cmFucywgdCk7XG5cdFx0XHRpZiAodGFyZ2V0ICE9PSBudWxsKSB7XG5cdFx0XHRcdHZhciBsZXhlckFjdGlvbkV4ZWN1dG9yID0gY2ZnLmxleGVyQWN0aW9uRXhlY3V0b3I7XG5cdFx0XHRcdGlmIChsZXhlckFjdGlvbkV4ZWN1dG9yICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0bGV4ZXJBY3Rpb25FeGVjdXRvciA9IGxleGVyQWN0aW9uRXhlY3V0b3IuZml4T2Zmc2V0QmVmb3JlTWF0Y2goaW5wdXQuaW5kZXggLSB0aGlzLnN0YXJ0SW5kZXgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciB0cmVhdEVvZkFzRXBzaWxvbiA9ICh0ID09PSBUb2tlbi5FT0YpO1xuXHRcdFx0XHR2YXIgY29uZmlnID0gbmV3IExleGVyQVROQ29uZmlnKHtzdGF0ZTp0YXJnZXQsIGxleGVyQWN0aW9uRXhlY3V0b3I6bGV4ZXJBY3Rpb25FeGVjdXRvcn0sIGNmZyk7XG5cdFx0XHRcdGlmICh0aGlzLmNsb3N1cmUoaW5wdXQsIGNvbmZpZywgcmVhY2gsXG5cdFx0XHRcdFx0XHRjdXJyZW50QWx0UmVhY2hlZEFjY2VwdFN0YXRlLCB0cnVlLCB0cmVhdEVvZkFzRXBzaWxvbikpIHtcblx0XHRcdFx0XHQvLyBhbnkgcmVtYWluaW5nIGNvbmZpZ3MgZm9yIHRoaXMgYWx0IGhhdmUgYSBsb3dlciBwcmlvcml0eVxuXHRcdFx0XHRcdC8vIHRoYW4gdGhlIG9uZSB0aGF0IGp1c3QgcmVhY2hlZCBhbiBhY2NlcHQgc3RhdGUuXG5cdFx0XHRcdFx0c2tpcEFsdCA9IGNmZy5hbHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbihpbnB1dCwgbGV4ZXJBY3Rpb25FeGVjdXRvcixcblx0XHRzdGFydEluZGV4LCBpbmRleCwgbGluZSwgY2hhclBvcykge1xuXHRpZiAoTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcpIHtcblx0XHRjb25zb2xlLmxvZyhcIkFDVElPTiAlc1xcblwiLCBsZXhlckFjdGlvbkV4ZWN1dG9yKTtcblx0fVxuXHQvLyBzZWVrIHRvIGFmdGVyIGxhc3QgY2hhciBpbiB0b2tlblxuXHRpbnB1dC5zZWVrKGluZGV4KTtcblx0dGhpcy5saW5lID0gbGluZTtcblx0dGhpcy5jb2x1bW4gPSBjaGFyUG9zO1xuXHRpZiAobGV4ZXJBY3Rpb25FeGVjdXRvciAhPT0gbnVsbCAmJiB0aGlzLnJlY29nICE9PSBudWxsKSB7XG5cdFx0bGV4ZXJBY3Rpb25FeGVjdXRvci5leGVjdXRlKHRoaXMucmVjb2csIGlucHV0LCBzdGFydEluZGV4KTtcblx0fVxufTtcblxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmdldFJlYWNoYWJsZVRhcmdldCA9IGZ1bmN0aW9uKHRyYW5zLCB0KSB7XG5cdGlmICh0cmFucy5tYXRjaGVzKHQsIDAsIExleGVyLk1BWF9DSEFSX1ZBTFVFKSkge1xuXHRcdHJldHVybiB0cmFucy50YXJnZXQ7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jb21wdXRlU3RhcnRTdGF0ZSA9IGZ1bmN0aW9uKGlucHV0LCBwKSB7XG5cdHZhciBpbml0aWFsQ29udGV4dCA9IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZO1xuXHR2YXIgY29uZmlncyA9IG5ldyBPcmRlcmVkQVROQ29uZmlnU2V0KCk7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgcC50cmFuc2l0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciB0YXJnZXQgPSBwLnRyYW5zaXRpb25zW2ldLnRhcmdldDtcbiAgICAgICAgdmFyIGNmZyA9IG5ldyBMZXhlckFUTkNvbmZpZyh7c3RhdGU6dGFyZ2V0LCBhbHQ6aSsxLCBjb250ZXh0OmluaXRpYWxDb250ZXh0fSwgbnVsbCk7XG5cdFx0dGhpcy5jbG9zdXJlKGlucHV0LCBjZmcsIGNvbmZpZ3MsIGZhbHNlLCBmYWxzZSwgZmFsc2UpO1xuXHR9XG5cdHJldHVybiBjb25maWdzO1xufTtcblxuLy8gU2luY2UgdGhlIGFsdGVybmF0aXZlcyB3aXRoaW4gYW55IGxleGVyIGRlY2lzaW9uIGFyZSBvcmRlcmVkIGJ5XG4vLyBwcmVmZXJlbmNlLCB0aGlzIG1ldGhvZCBzdG9wcyBwdXJzdWluZyB0aGUgY2xvc3VyZSBhcyBzb29uIGFzIGFuIGFjY2VwdFxuLy8gc3RhdGUgaXMgcmVhY2hlZC4gQWZ0ZXIgdGhlIGZpcnN0IGFjY2VwdCBzdGF0ZSBpcyByZWFjaGVkIGJ5IGRlcHRoLWZpcnN0XG4vLyBzZWFyY2ggZnJvbSB7QGNvZGUgY29uZmlnfSwgYWxsIG90aGVyIChwb3RlbnRpYWxseSByZWFjaGFibGUpIHN0YXRlcyBmb3Jcbi8vIHRoaXMgcnVsZSB3b3VsZCBoYXZlIGEgbG93ZXIgcHJpb3JpdHkuXG4vL1xuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgYW4gYWNjZXB0IHN0YXRlIGlzIHJlYWNoZWQsIG90aGVyd2lzZVxuLy8ge0Bjb2RlIGZhbHNlfS5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jbG9zdXJlID0gZnVuY3Rpb24oaW5wdXQsIGNvbmZpZywgY29uZmlncyxcblx0XHRjdXJyZW50QWx0UmVhY2hlZEFjY2VwdFN0YXRlLCBzcGVjdWxhdGl2ZSwgdHJlYXRFb2ZBc0Vwc2lsb24pIHtcblx0dmFyIGNmZyA9IG51bGw7XG5cdGlmIChMZXhlckFUTlNpbXVsYXRvci5kZWJ1Zykge1xuXHRcdGNvbnNvbGUubG9nKFwiY2xvc3VyZShcIiArIGNvbmZpZy50b1N0cmluZyh0aGlzLnJlY29nLCB0cnVlKSArIFwiKVwiKTtcblx0fVxuXHRpZiAoY29uZmlnLnN0YXRlIGluc3RhbmNlb2YgUnVsZVN0b3BTdGF0ZSkge1xuXHRcdGlmIChMZXhlckFUTlNpbXVsYXRvci5kZWJ1Zykge1xuXHRcdFx0aWYgKHRoaXMucmVjb2cgIT09IG51bGwpIHtcblx0XHRcdFx0Y29uc29sZS5sb2coXCJjbG9zdXJlIGF0ICVzIHJ1bGUgc3RvcCAlc1xcblwiLCB0aGlzLnJlY29nLnJ1bGVOYW1lc1tjb25maWcuc3RhdGUucnVsZUluZGV4XSwgY29uZmlnKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKFwiY2xvc3VyZSBhdCBydWxlIHN0b3AgJXNcXG5cIiwgY29uZmlnKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGNvbmZpZy5jb250ZXh0ID09PSBudWxsIHx8IGNvbmZpZy5jb250ZXh0Lmhhc0VtcHR5UGF0aCgpKSB7XG5cdFx0XHRpZiAoY29uZmlnLmNvbnRleHQgPT09IG51bGwgfHwgY29uZmlnLmNvbnRleHQuaXNFbXB0eSgpKSB7XG5cdFx0XHRcdGNvbmZpZ3MuYWRkKGNvbmZpZyk7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uZmlncy5hZGQobmV3IExleGVyQVROQ29uZmlnKHsgc3RhdGU6Y29uZmlnLnN0YXRlLCBjb250ZXh0OlByZWRpY3Rpb25Db250ZXh0LkVNUFRZfSwgY29uZmlnKSk7XG5cdFx0XHRcdGN1cnJlbnRBbHRSZWFjaGVkQWNjZXB0U3RhdGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoY29uZmlnLmNvbnRleHQgIT09IG51bGwgJiYgIWNvbmZpZy5jb250ZXh0LmlzRW1wdHkoKSkge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjb25maWcuY29udGV4dC5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAoY29uZmlnLmNvbnRleHQuZ2V0UmV0dXJuU3RhdGUoaSkgIT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZX1JFVFVSTl9TVEFURSkge1xuXHRcdFx0XHRcdHZhciBuZXdDb250ZXh0ID0gY29uZmlnLmNvbnRleHQuZ2V0UGFyZW50KGkpOyAvLyBcInBvcFwiIHJldHVybiBzdGF0ZVxuXHRcdFx0XHRcdHZhciByZXR1cm5TdGF0ZSA9IHRoaXMuYXRuLnN0YXRlc1tjb25maWcuY29udGV4dC5nZXRSZXR1cm5TdGF0ZShpKV07XG5cdFx0XHRcdFx0Y2ZnID0gbmV3IExleGVyQVROQ29uZmlnKHsgc3RhdGU6cmV0dXJuU3RhdGUsIGNvbnRleHQ6bmV3Q29udGV4dCB9LCBjb25maWcpO1xuXHRcdFx0XHRcdGN1cnJlbnRBbHRSZWFjaGVkQWNjZXB0U3RhdGUgPSB0aGlzLmNsb3N1cmUoaW5wdXQsIGNmZyxcblx0XHRcdFx0XHRcdFx0Y29uZmlncywgY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZSwgc3BlY3VsYXRpdmUsXG5cdFx0XHRcdFx0XHRcdHRyZWF0RW9mQXNFcHNpbG9uKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZTtcblx0fVxuXHQvLyBvcHRpbWl6YXRpb25cblx0aWYgKCFjb25maWcuc3RhdGUuZXBzaWxvbk9ubHlUcmFuc2l0aW9ucykge1xuXHRcdGlmICghY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZSB8fCAhY29uZmlnLnBhc3NlZFRocm91Z2hOb25HcmVlZHlEZWNpc2lvbikge1xuXHRcdFx0Y29uZmlncy5hZGQoY29uZmlnKTtcblx0XHR9XG5cdH1cblx0Zm9yICh2YXIgaiA9IDA7IGogPCBjb25maWcuc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoOyBqKyspIHtcblx0XHR2YXIgdHJhbnMgPSBjb25maWcuc3RhdGUudHJhbnNpdGlvbnNbal07XG5cdFx0Y2ZnID0gdGhpcy5nZXRFcHNpbG9uVGFyZ2V0KGlucHV0LCBjb25maWcsIHRyYW5zLCBjb25maWdzLCBzcGVjdWxhdGl2ZSwgdHJlYXRFb2ZBc0Vwc2lsb24pO1xuXHRcdGlmIChjZmcgIT09IG51bGwpIHtcblx0XHRcdGN1cnJlbnRBbHRSZWFjaGVkQWNjZXB0U3RhdGUgPSB0aGlzLmNsb3N1cmUoaW5wdXQsIGNmZywgY29uZmlncyxcblx0XHRcdFx0XHRjdXJyZW50QWx0UmVhY2hlZEFjY2VwdFN0YXRlLCBzcGVjdWxhdGl2ZSwgdHJlYXRFb2ZBc0Vwc2lsb24pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gY3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZTtcbn07XG5cbi8vIHNpZGUtZWZmZWN0OiBjYW4gYWx0ZXIgY29uZmlncy5oYXNTZW1hbnRpY0NvbnRleHRcbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRFcHNpbG9uVGFyZ2V0ID0gZnVuY3Rpb24oaW5wdXQsIGNvbmZpZywgdHJhbnMsXG5cdFx0Y29uZmlncywgc3BlY3VsYXRpdmUsIHRyZWF0RW9mQXNFcHNpbG9uKSB7XG5cdHZhciBjZmcgPSBudWxsO1xuXHRpZiAodHJhbnMuc2VyaWFsaXphdGlvblR5cGUgPT09IFRyYW5zaXRpb24uUlVMRSkge1xuXHRcdHZhciBuZXdDb250ZXh0ID0gU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQuY3JlYXRlKGNvbmZpZy5jb250ZXh0LCB0cmFucy5mb2xsb3dTdGF0ZS5zdGF0ZU51bWJlcik7XG5cdFx0Y2ZnID0gbmV3IExleGVyQVROQ29uZmlnKCB7IHN0YXRlOnRyYW5zLnRhcmdldCwgY29udGV4dDpuZXdDb250ZXh0fSwgY29uZmlnKTtcblx0fSBlbHNlIGlmICh0cmFucy5zZXJpYWxpemF0aW9uVHlwZSA9PT0gVHJhbnNpdGlvbi5QUkVDRURFTkNFKSB7XG5cdFx0dGhyb3cgXCJQcmVjZWRlbmNlIHByZWRpY2F0ZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gbGV4ZXJzLlwiO1xuXHR9IGVsc2UgaWYgKHRyYW5zLnNlcmlhbGl6YXRpb25UeXBlID09PSBUcmFuc2l0aW9uLlBSRURJQ0FURSkge1xuXHRcdC8vIFRyYWNrIHRyYXZlcnNpbmcgc2VtYW50aWMgcHJlZGljYXRlcy4gSWYgd2UgdHJhdmVyc2UsXG5cdFx0Ly8gd2UgY2Fubm90IGFkZCBhIERGQSBzdGF0ZSBmb3IgdGhpcyBcInJlYWNoXCIgY29tcHV0YXRpb25cblx0XHQvLyBiZWNhdXNlIHRoZSBERkEgd291bGQgbm90IHRlc3QgdGhlIHByZWRpY2F0ZSBhZ2FpbiBpbiB0aGVcblx0XHQvLyBmdXR1cmUuIFJhdGhlciB0aGFuIGNyZWF0aW5nIGNvbGxlY3Rpb25zIG9mIHNlbWFudGljIHByZWRpY2F0ZXNcblx0XHQvLyBsaWtlIHYzIGFuZCB0ZXN0aW5nIHRoZW0gb24gcHJlZGljdGlvbiwgdjQgd2lsbCB0ZXN0IHRoZW0gb24gdGhlXG5cdFx0Ly8gZmx5IGFsbCB0aGUgdGltZSB1c2luZyB0aGUgQVROIG5vdCB0aGUgREZBLiBUaGlzIGlzIHNsb3dlciBidXRcblx0XHQvLyBzZW1hbnRpY2FsbHkgaXQncyBub3QgdXNlZCB0aGF0IG9mdGVuLiBPbmUgb2YgdGhlIGtleSBlbGVtZW50cyB0b1xuXHRcdC8vIHRoaXMgcHJlZGljYXRlIG1lY2hhbmlzbSBpcyBub3QgYWRkaW5nIERGQSBzdGF0ZXMgdGhhdCBzZWVcblx0XHQvLyBwcmVkaWNhdGVzIGltbWVkaWF0ZWx5IGFmdGVyd2FyZHMgaW4gdGhlIEFUTi4gRm9yIGV4YW1wbGUsXG5cblx0XHQvLyBhIDogSUQge3AxfT8gfCBJRCB7cDJ9PyA7XG5cblx0XHQvLyBzaG91bGQgY3JlYXRlIHRoZSBzdGFydCBzdGF0ZSBmb3IgcnVsZSAnYScgKHRvIHNhdmUgc3RhcnQgc3RhdGVcblx0XHQvLyBjb21wZXRpdGlvbiksIGJ1dCBzaG91bGQgbm90IGNyZWF0ZSB0YXJnZXQgb2YgSUQgc3RhdGUuIFRoZVxuXHRcdC8vIGNvbGxlY3Rpb24gb2YgQVROIHN0YXRlcyB0aGUgZm9sbG93aW5nIElEIHJlZmVyZW5jZXMgaW5jbHVkZXNcblx0XHQvLyBzdGF0ZXMgcmVhY2hlZCBieSB0cmF2ZXJzaW5nIHByZWRpY2F0ZXMuIFNpbmNlIHRoaXMgaXMgd2hlbiB3ZVxuXHRcdC8vIHRlc3QgdGhlbSwgd2UgY2Fubm90IGNhc2ggdGhlIERGQSBzdGF0ZSB0YXJnZXQgb2YgSUQuXG5cblx0XHRpZiAoTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcpIHtcblx0XHRcdGNvbnNvbGUubG9nKFwiRVZBTCBydWxlIFwiICsgdHJhbnMucnVsZUluZGV4ICsgXCI6XCIgKyB0cmFucy5wcmVkSW5kZXgpO1xuXHRcdH1cblx0XHRjb25maWdzLmhhc1NlbWFudGljQ29udGV4dCA9IHRydWU7XG5cdFx0aWYgKHRoaXMuZXZhbHVhdGVQcmVkaWNhdGUoaW5wdXQsIHRyYW5zLnJ1bGVJbmRleCwgdHJhbnMucHJlZEluZGV4LCBzcGVjdWxhdGl2ZSkpIHtcblx0XHRcdGNmZyA9IG5ldyBMZXhlckFUTkNvbmZpZyh7IHN0YXRlOnRyYW5zLnRhcmdldH0sIGNvbmZpZyk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKHRyYW5zLnNlcmlhbGl6YXRpb25UeXBlID09PSBUcmFuc2l0aW9uLkFDVElPTikge1xuXHRcdGlmIChjb25maWcuY29udGV4dCA9PT0gbnVsbCB8fCBjb25maWcuY29udGV4dC5oYXNFbXB0eVBhdGgoKSkge1xuXHRcdFx0Ly8gZXhlY3V0ZSBhY3Rpb25zIGFueXdoZXJlIGluIHRoZSBzdGFydCBydWxlIGZvciBhIHRva2VuLlxuXHRcdFx0Ly9cblx0XHRcdC8vIFRPRE86IGlmIHRoZSBlbnRyeSBydWxlIGlzIGludm9rZWQgcmVjdXJzaXZlbHksIHNvbWVcblx0XHRcdC8vIGFjdGlvbnMgbWF5IGJlIGV4ZWN1dGVkIGR1cmluZyB0aGUgcmVjdXJzaXZlIGNhbGwuIFRoZVxuXHRcdFx0Ly8gcHJvYmxlbSBjYW4gYXBwZWFyIHdoZW4gaGFzRW1wdHlQYXRoKCkgaXMgdHJ1ZSBidXRcblx0XHRcdC8vIGlzRW1wdHkoKSBpcyBmYWxzZS4gSW4gdGhpcyBjYXNlLCB0aGUgY29uZmlnIG5lZWRzIHRvIGJlXG5cdFx0XHQvLyBzcGxpdCBpbnRvIHR3byBjb250ZXh0cyAtIG9uZSB3aXRoIGp1c3QgdGhlIGVtcHR5IHBhdGhcblx0XHRcdC8vIGFuZCBhbm90aGVyIHdpdGggZXZlcnl0aGluZyBidXQgdGhlIGVtcHR5IHBhdGguXG5cdFx0XHQvLyBVbmZvcnR1bmF0ZWx5LCB0aGUgY3VycmVudCBhbGdvcml0aG0gZG9lcyBub3QgYWxsb3dcblx0XHRcdC8vIGdldEVwc2lsb25UYXJnZXQgdG8gcmV0dXJuIHR3byBjb25maWd1cmF0aW9ucywgc29cblx0XHRcdC8vIGFkZGl0aW9uYWwgbW9kaWZpY2F0aW9ucyBhcmUgbmVlZGVkIGJlZm9yZSB3ZSBjYW4gc3VwcG9ydFxuXHRcdFx0Ly8gdGhlIHNwbGl0IG9wZXJhdGlvbi5cblx0XHRcdHZhciBsZXhlckFjdGlvbkV4ZWN1dG9yID0gTGV4ZXJBY3Rpb25FeGVjdXRvci5hcHBlbmQoY29uZmlnLmxleGVyQWN0aW9uRXhlY3V0b3IsXG5cdFx0XHRcdFx0dGhpcy5hdG4ubGV4ZXJBY3Rpb25zW3RyYW5zLmFjdGlvbkluZGV4XSk7XG5cdFx0XHRjZmcgPSBuZXcgTGV4ZXJBVE5Db25maWcoeyBzdGF0ZTp0cmFucy50YXJnZXQsIGxleGVyQWN0aW9uRXhlY3V0b3I6bGV4ZXJBY3Rpb25FeGVjdXRvciB9LCBjb25maWcpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpZ25vcmUgYWN0aW9ucyBpbiByZWZlcmVuY2VkIHJ1bGVzXG5cdFx0XHRjZmcgPSBuZXcgTGV4ZXJBVE5Db25maWcoIHsgc3RhdGU6dHJhbnMudGFyZ2V0fSwgY29uZmlnKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAodHJhbnMuc2VyaWFsaXphdGlvblR5cGUgPT09IFRyYW5zaXRpb24uRVBTSUxPTikge1xuXHRcdGNmZyA9IG5ldyBMZXhlckFUTkNvbmZpZyh7IHN0YXRlOnRyYW5zLnRhcmdldH0sIGNvbmZpZyk7XG5cdH0gZWxzZSBpZiAodHJhbnMuc2VyaWFsaXphdGlvblR5cGUgPT09IFRyYW5zaXRpb24uQVRPTSB8fFxuXHRcdFx0XHR0cmFucy5zZXJpYWxpemF0aW9uVHlwZSA9PT0gVHJhbnNpdGlvbi5SQU5HRSB8fFxuXHRcdFx0XHR0cmFucy5zZXJpYWxpemF0aW9uVHlwZSA9PT0gVHJhbnNpdGlvbi5TRVQpIHtcblx0XHRpZiAodHJlYXRFb2ZBc0Vwc2lsb24pIHtcblx0XHRcdGlmICh0cmFucy5tYXRjaGVzKFRva2VuLkVPRiwgMCwgTGV4ZXIuTUFYX0NIQVJfVkFMVUUpKSB7XG5cdFx0XHRcdGNmZyA9IG5ldyBMZXhlckFUTkNvbmZpZyggeyBzdGF0ZTp0cmFucy50YXJnZXQgfSwgY29uZmlnKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGNmZztcbn07XG5cbi8vIEV2YWx1YXRlIGEgcHJlZGljYXRlIHNwZWNpZmllZCBpbiB0aGUgbGV4ZXIuXG4vL1xuLy8gPHA+SWYge0Bjb2RlIHNwZWN1bGF0aXZlfSBpcyB7QGNvZGUgdHJ1ZX0sIHRoaXMgbWV0aG9kIHdhcyBjYWxsZWQgYmVmb3JlXG4vLyB7QGxpbmsgLy9jb25zdW1lfSBmb3IgdGhlIG1hdGNoZWQgY2hhcmFjdGVyLiBUaGlzIG1ldGhvZCBzaG91bGQgY2FsbFxuLy8ge0BsaW5rIC8vY29uc3VtZX0gYmVmb3JlIGV2YWx1YXRpbmcgdGhlIHByZWRpY2F0ZSB0byBlbnN1cmUgcG9zaXRpb25cbi8vIHNlbnNpdGl2ZSB2YWx1ZXMsIGluY2x1ZGluZyB7QGxpbmsgTGV4ZXIvL2dldFRleHR9LCB7QGxpbmsgTGV4ZXIvL2dldExpbmV9LFxuLy8gYW5kIHtAbGluayBMZXhlci8vZ2V0Y29sdW1ufSwgcHJvcGVybHkgcmVmbGVjdCB0aGUgY3VycmVudFxuLy8gbGV4ZXIgc3RhdGUuIFRoaXMgbWV0aG9kIHNob3VsZCByZXN0b3JlIHtAY29kZSBpbnB1dH0gYW5kIHRoZSBzaW11bGF0b3Jcbi8vIHRvIHRoZSBvcmlnaW5hbCBzdGF0ZSBiZWZvcmUgcmV0dXJuaW5nIChpLmUuIHVuZG8gdGhlIGFjdGlvbnMgbWFkZSBieSB0aGVcbi8vIGNhbGwgdG8ge0BsaW5rIC8vY29uc3VtZX0uPC9wPlxuLy9cbi8vIEBwYXJhbSBpbnB1dCBUaGUgaW5wdXQgc3RyZWFtLlxuLy8gQHBhcmFtIHJ1bGVJbmRleCBUaGUgcnVsZSBjb250YWluaW5nIHRoZSBwcmVkaWNhdGUuXG4vLyBAcGFyYW0gcHJlZEluZGV4IFRoZSBpbmRleCBvZiB0aGUgcHJlZGljYXRlIHdpdGhpbiB0aGUgcnVsZS5cbi8vIEBwYXJhbSBzcGVjdWxhdGl2ZSB7QGNvZGUgdHJ1ZX0gaWYgdGhlIGN1cnJlbnQgaW5kZXggaW4ge0Bjb2RlIGlucHV0fSBpc1xuLy8gb25lIGNoYXJhY3RlciBiZWZvcmUgdGhlIHByZWRpY2F0ZSdzIGxvY2F0aW9uLlxuLy9cbi8vIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHRoZSBzcGVjaWZpZWQgcHJlZGljYXRlIGV2YWx1YXRlcyB0b1xuLy8ge0Bjb2RlIHRydWV9LlxuLy8gL1xuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmV2YWx1YXRlUHJlZGljYXRlID0gZnVuY3Rpb24oaW5wdXQsIHJ1bGVJbmRleCxcblx0XHRwcmVkSW5kZXgsIHNwZWN1bGF0aXZlKSB7XG5cdC8vIGFzc3VtZSB0cnVlIGlmIG5vIHJlY29nbml6ZXIgd2FzIHByb3ZpZGVkXG5cdGlmICh0aGlzLnJlY29nID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0aWYgKCFzcGVjdWxhdGl2ZSkge1xuXHRcdHJldHVybiB0aGlzLnJlY29nLnNlbXByZWQobnVsbCwgcnVsZUluZGV4LCBwcmVkSW5kZXgpO1xuXHR9XG5cdHZhciBzYXZlZGNvbHVtbiA9IHRoaXMuY29sdW1uO1xuXHR2YXIgc2F2ZWRMaW5lID0gdGhpcy5saW5lO1xuXHR2YXIgaW5kZXggPSBpbnB1dC5pbmRleDtcblx0dmFyIG1hcmtlciA9IGlucHV0Lm1hcmsoKTtcblx0dHJ5IHtcblx0XHR0aGlzLmNvbnN1bWUoaW5wdXQpO1xuXHRcdHJldHVybiB0aGlzLnJlY29nLnNlbXByZWQobnVsbCwgcnVsZUluZGV4LCBwcmVkSW5kZXgpO1xuXHR9IGZpbmFsbHkge1xuXHRcdHRoaXMuY29sdW1uID0gc2F2ZWRjb2x1bW47XG5cdFx0dGhpcy5saW5lID0gc2F2ZWRMaW5lO1xuXHRcdGlucHV0LnNlZWsoaW5kZXgpO1xuXHRcdGlucHV0LnJlbGVhc2UobWFya2VyKTtcblx0fVxufTtcblxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmNhcHR1cmVTaW1TdGF0ZSA9IGZ1bmN0aW9uKHNldHRpbmdzLCBpbnB1dCwgZGZhU3RhdGUpIHtcblx0c2V0dGluZ3MuaW5kZXggPSBpbnB1dC5pbmRleDtcblx0c2V0dGluZ3MubGluZSA9IHRoaXMubGluZTtcblx0c2V0dGluZ3MuY29sdW1uID0gdGhpcy5jb2x1bW47XG5cdHNldHRpbmdzLmRmYVN0YXRlID0gZGZhU3RhdGU7XG59O1xuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuYWRkREZBRWRnZSA9IGZ1bmN0aW9uKGZyb21fLCB0aywgdG8sIGNmZ3MpIHtcblx0aWYgKHRvID09PSB1bmRlZmluZWQpIHtcblx0XHR0byA9IG51bGw7XG5cdH1cblx0aWYgKGNmZ3MgPT09IHVuZGVmaW5lZCkge1xuXHRcdGNmZ3MgPSBudWxsO1xuXHR9XG5cdGlmICh0byA9PT0gbnVsbCAmJiBjZmdzICE9PSBudWxsKSB7XG5cdFx0Ly8gbGVhZGluZyB0byB0aGlzIGNhbGwsIEFUTkNvbmZpZ1NldC5oYXNTZW1hbnRpY0NvbnRleHQgaXMgdXNlZCBhcyBhXG5cdFx0Ly8gbWFya2VyIGluZGljYXRpbmcgZHluYW1pYyBwcmVkaWNhdGUgZXZhbHVhdGlvbiBtYWtlcyB0aGlzIGVkZ2Vcblx0XHQvLyBkZXBlbmRlbnQgb24gdGhlIHNwZWNpZmljIGlucHV0IHNlcXVlbmNlLCBzbyB0aGUgc3RhdGljIGVkZ2UgaW4gdGhlXG5cdFx0Ly8gREZBIHNob3VsZCBiZSBvbWl0dGVkLiBUaGUgdGFyZ2V0IERGQVN0YXRlIGlzIHN0aWxsIGNyZWF0ZWQgc2luY2Vcblx0XHQvLyBleGVjQVROIGhhcyB0aGUgYWJpbGl0eSB0byByZXN5bmNocm9uaXplIHdpdGggdGhlIERGQSBzdGF0ZSBjYWNoZVxuXHRcdC8vIGZvbGxvd2luZyB0aGUgcHJlZGljYXRlIGV2YWx1YXRpb24gc3RlcC5cblx0XHQvL1xuXHRcdC8vIFRKUCBub3RlczogbmV4dCB0aW1lIHRocm91Z2ggdGhlIERGQSwgd2Ugc2VlIGEgcHJlZCBhZ2FpbiBhbmQgZXZhbC5cblx0XHQvLyBJZiB0aGF0IGdldHMgdXMgdG8gYSBwcmV2aW91c2x5IGNyZWF0ZWQgKGJ1dCBkYW5nbGluZykgREZBXG5cdFx0Ly8gc3RhdGUsIHdlIGNhbiBjb250aW51ZSBpbiBwdXJlIERGQSBtb2RlIGZyb20gdGhlcmUuXG5cdFx0Ly8gL1xuXHRcdHZhciBzdXBwcmVzc0VkZ2UgPSBjZmdzLmhhc1NlbWFudGljQ29udGV4dDtcblx0XHRjZmdzLmhhc1NlbWFudGljQ29udGV4dCA9IGZhbHNlO1xuXG5cdFx0dG8gPSB0aGlzLmFkZERGQVN0YXRlKGNmZ3MpO1xuXG5cdFx0aWYgKHN1cHByZXNzRWRnZSkge1xuXHRcdFx0cmV0dXJuIHRvO1xuXHRcdH1cblx0fVxuXHQvLyBhZGQgdGhlIGVkZ2Vcblx0aWYgKHRrIDwgTGV4ZXJBVE5TaW11bGF0b3IuTUlOX0RGQV9FREdFIHx8IHRrID4gTGV4ZXJBVE5TaW11bGF0b3IuTUFYX0RGQV9FREdFKSB7XG5cdFx0Ly8gT25seSB0cmFjayBlZGdlcyB3aXRoaW4gdGhlIERGQSBib3VuZHNcblx0XHRyZXR1cm4gdG87XG5cdH1cblx0aWYgKExleGVyQVROU2ltdWxhdG9yLmRlYnVnKSB7XG5cdFx0Y29uc29sZS5sb2coXCJFREdFIFwiICsgZnJvbV8gKyBcIiAtPiBcIiArIHRvICsgXCIgdXBvbiBcIiArIHRrKTtcblx0fVxuXHRpZiAoZnJvbV8uZWRnZXMgPT09IG51bGwpIHtcblx0XHQvLyBtYWtlIHJvb20gZm9yIHRva2VucyAxLi5uIGFuZCAtMSBtYXNxdWVyYWRpbmcgYXMgaW5kZXggMFxuXHRcdGZyb21fLmVkZ2VzID0gW107XG5cdH1cblx0ZnJvbV8uZWRnZXNbdGsgLSBMZXhlckFUTlNpbXVsYXRvci5NSU5fREZBX0VER0VdID0gdG87IC8vIGNvbm5lY3RcblxuXHRyZXR1cm4gdG87XG59O1xuXG4vLyBBZGQgYSBuZXcgREZBIHN0YXRlIGlmIHRoZXJlIGlzbid0IG9uZSB3aXRoIHRoaXMgc2V0IG9mXG4vLyBjb25maWd1cmF0aW9ucyBhbHJlYWR5LiBUaGlzIG1ldGhvZCBhbHNvIGRldGVjdHMgdGhlIGZpcnN0XG4vLyBjb25maWd1cmF0aW9uIGNvbnRhaW5pbmcgYW4gQVROIHJ1bGUgc3RvcCBzdGF0ZS4gTGF0ZXIsIHdoZW5cbi8vIHRyYXZlcnNpbmcgdGhlIERGQSwgd2Ugd2lsbCBrbm93IHdoaWNoIHJ1bGUgdG8gYWNjZXB0LlxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmFkZERGQVN0YXRlID0gZnVuY3Rpb24oY29uZmlncykge1xuXHR2YXIgcHJvcG9zZWQgPSBuZXcgREZBU3RhdGUobnVsbCwgY29uZmlncyk7XG5cdHZhciBmaXJzdENvbmZpZ1dpdGhSdWxlU3RvcFN0YXRlID0gbnVsbDtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjb25maWdzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGNmZyA9IGNvbmZpZ3MuaXRlbXNbaV07XG5cdFx0aWYgKGNmZy5zdGF0ZSBpbnN0YW5jZW9mIFJ1bGVTdG9wU3RhdGUpIHtcblx0XHRcdGZpcnN0Q29uZmlnV2l0aFJ1bGVTdG9wU3RhdGUgPSBjZmc7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblx0aWYgKGZpcnN0Q29uZmlnV2l0aFJ1bGVTdG9wU3RhdGUgIT09IG51bGwpIHtcblx0XHRwcm9wb3NlZC5pc0FjY2VwdFN0YXRlID0gdHJ1ZTtcblx0XHRwcm9wb3NlZC5sZXhlckFjdGlvbkV4ZWN1dG9yID0gZmlyc3RDb25maWdXaXRoUnVsZVN0b3BTdGF0ZS5sZXhlckFjdGlvbkV4ZWN1dG9yO1xuXHRcdHByb3Bvc2VkLnByZWRpY3Rpb24gPSB0aGlzLmF0bi5ydWxlVG9Ub2tlblR5cGVbZmlyc3RDb25maWdXaXRoUnVsZVN0b3BTdGF0ZS5zdGF0ZS5ydWxlSW5kZXhdO1xuXHR9XG5cdHZhciBkZmEgPSB0aGlzLmRlY2lzaW9uVG9ERkFbdGhpcy5tb2RlXTtcblx0dmFyIGV4aXN0aW5nID0gZGZhLnN0YXRlcy5nZXQocHJvcG9zZWQpO1xuXHRpZiAoZXhpc3RpbmchPT1udWxsKSB7XG5cdFx0cmV0dXJuIGV4aXN0aW5nO1xuXHR9XG5cdHZhciBuZXdTdGF0ZSA9IHByb3Bvc2VkO1xuXHRuZXdTdGF0ZS5zdGF0ZU51bWJlciA9IGRmYS5zdGF0ZXMubGVuZ3RoO1xuXHRjb25maWdzLnNldFJlYWRvbmx5KHRydWUpO1xuXHRuZXdTdGF0ZS5jb25maWdzID0gY29uZmlncztcblx0ZGZhLnN0YXRlcy5hZGQobmV3U3RhdGUpO1xuXHRyZXR1cm4gbmV3U3RhdGU7XG59O1xuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0REZBID0gZnVuY3Rpb24obW9kZSkge1xuXHRyZXR1cm4gdGhpcy5kZWNpc2lvblRvREZBW21vZGVdO1xufTtcblxuLy8gR2V0IHRoZSB0ZXh0IG1hdGNoZWQgc28gZmFyIGZvciB0aGUgY3VycmVudCB0b2tlbi5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRUZXh0ID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0Ly8gaW5kZXggaXMgZmlyc3QgbG9va2FoZWFkIGNoYXIsIGRvbid0IGluY2x1ZGUuXG5cdHJldHVybiBpbnB1dC5nZXRUZXh0KHRoaXMuc3RhcnRJbmRleCwgaW5wdXQuaW5kZXggLSAxKTtcbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jb25zdW1lID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0dmFyIGN1ckNoYXIgPSBpbnB1dC5MQSgxKTtcblx0aWYgKGN1ckNoYXIgPT09IFwiXFxuXCIuY2hhckNvZGVBdCgwKSkge1xuXHRcdHRoaXMubGluZSArPSAxO1xuXHRcdHRoaXMuY29sdW1uID0gMDtcblx0fSBlbHNlIHtcblx0XHR0aGlzLmNvbHVtbiArPSAxO1xuXHR9XG5cdGlucHV0LmNvbnN1bWUoKTtcbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRUb2tlbk5hbWUgPSBmdW5jdGlvbih0dCkge1xuXHRpZiAodHQgPT09IC0xKSB7XG5cdFx0cmV0dXJuIFwiRU9GXCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiJ1wiICsgU3RyaW5nLmZyb21DaGFyQ29kZSh0dCkgKyBcIidcIjtcblx0fVxufTtcblxuZXhwb3J0cy5MZXhlckFUTlNpbXVsYXRvciA9IExleGVyQVROU2ltdWxhdG9yO1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbiAvL1xuXG5mdW5jdGlvbiBMZXhlckFjdGlvblR5cGUoKSB7XG59XG5cbkxleGVyQWN0aW9uVHlwZS5DSEFOTkVMID0gMDsgICAgIC8vVGhlIHR5cGUgb2YgYSB7QGxpbmsgTGV4ZXJDaGFubmVsQWN0aW9ufSBhY3Rpb24uXG5MZXhlckFjdGlvblR5cGUuQ1VTVE9NID0gMTsgICAgICAvL1RoZSB0eXBlIG9mIGEge0BsaW5rIExleGVyQ3VzdG9tQWN0aW9ufSBhY3Rpb24uXG5MZXhlckFjdGlvblR5cGUuTU9ERSA9IDI7ICAgICAgICAvL1RoZSB0eXBlIG9mIGEge0BsaW5rIExleGVyTW9kZUFjdGlvbn0gYWN0aW9uLlxuTGV4ZXJBY3Rpb25UeXBlLk1PUkUgPSAzOyAgICAgICAgLy9UaGUgdHlwZSBvZiBhIHtAbGluayBMZXhlck1vcmVBY3Rpb259IGFjdGlvbi5cbkxleGVyQWN0aW9uVHlwZS5QT1BfTU9ERSA9IDQ7ICAgIC8vVGhlIHR5cGUgb2YgYSB7QGxpbmsgTGV4ZXJQb3BNb2RlQWN0aW9ufSBhY3Rpb24uXG5MZXhlckFjdGlvblR5cGUuUFVTSF9NT0RFID0gNTsgICAvL1RoZSB0eXBlIG9mIGEge0BsaW5rIExleGVyUHVzaE1vZGVBY3Rpb259IGFjdGlvbi5cbkxleGVyQWN0aW9uVHlwZS5TS0lQID0gNjsgICAgICAgIC8vVGhlIHR5cGUgb2YgYSB7QGxpbmsgTGV4ZXJTa2lwQWN0aW9ufSBhY3Rpb24uXG5MZXhlckFjdGlvblR5cGUuVFlQRSA9IDc7ICAgICAgICAvL1RoZSB0eXBlIG9mIGEge0BsaW5rIExleGVyVHlwZUFjdGlvbn0gYWN0aW9uLlxuXG5mdW5jdGlvbiBMZXhlckFjdGlvbihhY3Rpb24pIHtcbiAgICB0aGlzLmFjdGlvblR5cGUgPSBhY3Rpb247XG4gICAgdGhpcy5pc1Bvc2l0aW9uRGVwZW5kZW50ID0gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkxleGVyQWN0aW9uLnByb3RvdHlwZS5oYXNoQ29kZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBoYXNoID0gbmV3IEhhc2goKTtcbiAgICB0aGlzLnVwZGF0ZUhhc2hDb2RlKGhhc2gpO1xuICAgIHJldHVybiBoYXNoLmZpbmlzaCgpXG59O1xuXG5MZXhlckFjdGlvbi5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5hY3Rpb25UeXBlKTtcbn07XG5cbkxleGVyQWN0aW9uLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIHJldHVybiB0aGlzID09PSBvdGhlcjtcbn07XG5cblxuXG4vL1xuLy8gSW1wbGVtZW50cyB0aGUge0Bjb2RlIHNraXB9IGxleGVyIGFjdGlvbiBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vc2tpcH0uXG4vL1xuLy8gPHA+VGhlIHtAY29kZSBza2lwfSBjb21tYW5kIGRvZXMgbm90IGhhdmUgYW55IHBhcmFtZXRlcnMsIHNvIHRoaXMgYWN0aW9uIGlzXG4vLyBpbXBsZW1lbnRlZCBhcyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBleHBvc2VkIGJ5IHtAbGluayAvL0lOU1RBTkNFfS48L3A+XG5mdW5jdGlvbiBMZXhlclNraXBBY3Rpb24oKSB7XG5cdExleGVyQWN0aW9uLmNhbGwodGhpcywgTGV4ZXJBY3Rpb25UeXBlLlNLSVApO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJTa2lwQWN0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTGV4ZXJBY3Rpb24ucHJvdG90eXBlKTtcbkxleGVyU2tpcEFjdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlclNraXBBY3Rpb247XG5cbi8vIFByb3ZpZGVzIGEgc2luZ2xldG9uIGluc3RhbmNlIG9mIHRoaXMgcGFyYW1ldGVybGVzcyBsZXhlciBhY3Rpb24uXG5MZXhlclNraXBBY3Rpb24uSU5TVEFOQ0UgPSBuZXcgTGV4ZXJTa2lwQWN0aW9uKCk7XG5cbkxleGVyU2tpcEFjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGxleGVyKSB7XG4gICAgbGV4ZXIuc2tpcCgpO1xufTtcblxuTGV4ZXJTa2lwQWN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJza2lwXCI7XG59O1xuXG4vLyAgSW1wbGVtZW50cyB0aGUge0Bjb2RlIHR5cGV9IGxleGVyIGFjdGlvbiBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vc2V0VHlwZX1cbi8vIHdpdGggdGhlIGFzc2lnbmVkIHR5cGUuXG5mdW5jdGlvbiBMZXhlclR5cGVBY3Rpb24odHlwZSkge1xuXHRMZXhlckFjdGlvbi5jYWxsKHRoaXMsIExleGVyQWN0aW9uVHlwZS5UWVBFKTtcblx0dGhpcy50eXBlID0gdHlwZTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkxleGVyVHlwZUFjdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKExleGVyQWN0aW9uLnByb3RvdHlwZSk7XG5MZXhlclR5cGVBY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGV4ZXJUeXBlQWN0aW9uO1xuXG5MZXhlclR5cGVBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihsZXhlcikge1xuICAgIGxleGVyLnR5cGUgPSB0aGlzLnR5cGU7XG59O1xuXG5MZXhlclR5cGVBY3Rpb24ucHJvdG90eXBlLnVwZGF0ZUhhc2hDb2RlID0gZnVuY3Rpb24oaGFzaCkge1xuICAgIGhhc2gudXBkYXRlKHRoaXMuYWN0aW9uVHlwZSwgdGhpcy50eXBlKTtcbn07XG5cblxuTGV4ZXJUeXBlQWN0aW9uLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIGlmKHRoaXMgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoISAob3RoZXIgaW5zdGFuY2VvZiBMZXhlclR5cGVBY3Rpb24pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSBvdGhlci50eXBlO1xuICAgIH1cbn07XG5cbkxleGVyVHlwZUFjdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJ0eXBlKFwiICsgdGhpcy50eXBlICsgXCIpXCI7XG59O1xuXG4vLyBJbXBsZW1lbnRzIHRoZSB7QGNvZGUgcHVzaE1vZGV9IGxleGVyIGFjdGlvbiBieSBjYWxsaW5nXG4vLyB7QGxpbmsgTGV4ZXIvL3B1c2hNb2RlfSB3aXRoIHRoZSBhc3NpZ25lZCBtb2RlLlxuZnVuY3Rpb24gTGV4ZXJQdXNoTW9kZUFjdGlvbihtb2RlKSB7XG5cdExleGVyQWN0aW9uLmNhbGwodGhpcywgTGV4ZXJBY3Rpb25UeXBlLlBVU0hfTU9ERSk7XG4gICAgdGhpcy5tb2RlID0gbW9kZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJQdXNoTW9kZUFjdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKExleGVyQWN0aW9uLnByb3RvdHlwZSk7XG5MZXhlclB1c2hNb2RlQWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExleGVyUHVzaE1vZGVBY3Rpb247XG5cbi8vIDxwPlRoaXMgYWN0aW9uIGlzIGltcGxlbWVudGVkIGJ5IGNhbGxpbmcge0BsaW5rIExleGVyLy9wdXNoTW9kZX0gd2l0aCB0aGVcbi8vIHZhbHVlIHByb3ZpZGVkIGJ5IHtAbGluayAvL2dldE1vZGV9LjwvcD5cbkxleGVyUHVzaE1vZGVBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihsZXhlcikge1xuICAgIGxleGVyLnB1c2hNb2RlKHRoaXMubW9kZSk7XG59O1xuXG5MZXhlclB1c2hNb2RlQWN0aW9uLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLmFjdGlvblR5cGUsIHRoaXMubW9kZSk7XG59O1xuXG5MZXhlclB1c2hNb2RlQWN0aW9uLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIGlmICh0aGlzID09PSBvdGhlcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCEgKG90aGVyIGluc3RhbmNlb2YgTGV4ZXJQdXNoTW9kZUFjdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZGUgPT09IG90aGVyLm1vZGU7XG4gICAgfVxufTtcblxuTGV4ZXJQdXNoTW9kZUFjdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIFwicHVzaE1vZGUoXCIgKyB0aGlzLm1vZGUgKyBcIilcIjtcbn07XG5cblxuLy8gSW1wbGVtZW50cyB0aGUge0Bjb2RlIHBvcE1vZGV9IGxleGVyIGFjdGlvbiBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vcG9wTW9kZX0uXG4vL1xuLy8gPHA+VGhlIHtAY29kZSBwb3BNb2RlfSBjb21tYW5kIGRvZXMgbm90IGhhdmUgYW55IHBhcmFtZXRlcnMsIHNvIHRoaXMgYWN0aW9uIGlzXG4vLyBpbXBsZW1lbnRlZCBhcyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBleHBvc2VkIGJ5IHtAbGluayAvL0lOU1RBTkNFfS48L3A+XG5mdW5jdGlvbiBMZXhlclBvcE1vZGVBY3Rpb24oKSB7XG5cdExleGVyQWN0aW9uLmNhbGwodGhpcyxMZXhlckFjdGlvblR5cGUuUE9QX01PREUpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJQb3BNb2RlQWN0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTGV4ZXJBY3Rpb24ucHJvdG90eXBlKTtcbkxleGVyUG9wTW9kZUFjdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlclBvcE1vZGVBY3Rpb247XG5cbkxleGVyUG9wTW9kZUFjdGlvbi5JTlNUQU5DRSA9IG5ldyBMZXhlclBvcE1vZGVBY3Rpb24oKTtcblxuLy8gPHA+VGhpcyBhY3Rpb24gaXMgaW1wbGVtZW50ZWQgYnkgY2FsbGluZyB7QGxpbmsgTGV4ZXIvL3BvcE1vZGV9LjwvcD5cbkxleGVyUG9wTW9kZUFjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGxleGVyKSB7XG4gICAgbGV4ZXIucG9wTW9kZSgpO1xufTtcblxuTGV4ZXJQb3BNb2RlQWN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJwb3BNb2RlXCI7XG59O1xuXG4vLyBJbXBsZW1lbnRzIHRoZSB7QGNvZGUgbW9yZX0gbGV4ZXIgYWN0aW9uIGJ5IGNhbGxpbmcge0BsaW5rIExleGVyLy9tb3JlfS5cbi8vXG4vLyA8cD5UaGUge0Bjb2RlIG1vcmV9IGNvbW1hbmQgZG9lcyBub3QgaGF2ZSBhbnkgcGFyYW1ldGVycywgc28gdGhpcyBhY3Rpb24gaXNcbi8vIGltcGxlbWVudGVkIGFzIGEgc2luZ2xldG9uIGluc3RhbmNlIGV4cG9zZWQgYnkge0BsaW5rIC8vSU5TVEFOQ0V9LjwvcD5cbmZ1bmN0aW9uIExleGVyTW9yZUFjdGlvbigpIHtcblx0TGV4ZXJBY3Rpb24uY2FsbCh0aGlzLCBMZXhlckFjdGlvblR5cGUuTU9SRSk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5MZXhlck1vcmVBY3Rpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMZXhlckFjdGlvbi5wcm90b3R5cGUpO1xuTGV4ZXJNb3JlQWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExleGVyTW9yZUFjdGlvbjtcblxuTGV4ZXJNb3JlQWN0aW9uLklOU1RBTkNFID0gbmV3IExleGVyTW9yZUFjdGlvbigpO1xuXG4vLyA8cD5UaGlzIGFjdGlvbiBpcyBpbXBsZW1lbnRlZCBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vcG9wTW9kZX0uPC9wPlxuTGV4ZXJNb3JlQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24obGV4ZXIpIHtcbiAgICBsZXhlci5tb3JlKCk7XG59O1xuXG5MZXhlck1vcmVBY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwibW9yZVwiO1xufTtcblxuXG4vLyBJbXBsZW1lbnRzIHRoZSB7QGNvZGUgbW9kZX0gbGV4ZXIgYWN0aW9uIGJ5IGNhbGxpbmcge0BsaW5rIExleGVyLy9tb2RlfSB3aXRoXG4vLyB0aGUgYXNzaWduZWQgbW9kZS5cbmZ1bmN0aW9uIExleGVyTW9kZUFjdGlvbihtb2RlKSB7XG5cdExleGVyQWN0aW9uLmNhbGwodGhpcywgTGV4ZXJBY3Rpb25UeXBlLk1PREUpO1xuICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkxleGVyTW9kZUFjdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKExleGVyQWN0aW9uLnByb3RvdHlwZSk7XG5MZXhlck1vZGVBY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGV4ZXJNb2RlQWN0aW9uO1xuXG4vLyA8cD5UaGlzIGFjdGlvbiBpcyBpbXBsZW1lbnRlZCBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vbW9kZX0gd2l0aCB0aGVcbi8vIHZhbHVlIHByb3ZpZGVkIGJ5IHtAbGluayAvL2dldE1vZGV9LjwvcD5cbkxleGVyTW9kZUFjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGxleGVyKSB7XG4gICAgbGV4ZXIubW9kZSh0aGlzLm1vZGUpO1xufTtcblxuTGV4ZXJNb2RlQWN0aW9uLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLmFjdGlvblR5cGUsIHRoaXMubW9kZSk7XG59O1xuXG5MZXhlck1vZGVBY3Rpb24ucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgaWYgKHRoaXMgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoISAob3RoZXIgaW5zdGFuY2VvZiBMZXhlck1vZGVBY3Rpb24pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlID09PSBvdGhlci5tb2RlO1xuICAgIH1cbn07XG5cbkxleGVyTW9kZUFjdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJtb2RlKFwiICsgdGhpcy5tb2RlICsgXCIpXCI7XG59O1xuXG4vLyBFeGVjdXRlcyBhIGN1c3RvbSBsZXhlciBhY3Rpb24gYnkgY2FsbGluZyB7QGxpbmsgUmVjb2duaXplci8vYWN0aW9ufSB3aXRoIHRoZVxuLy8gcnVsZSBhbmQgYWN0aW9uIGluZGV4ZXMgYXNzaWduZWQgdG8gdGhlIGN1c3RvbSBhY3Rpb24uIFRoZSBpbXBsZW1lbnRhdGlvbiBvZlxuLy8gYSBjdXN0b20gYWN0aW9uIGlzIGFkZGVkIHRvIHRoZSBnZW5lcmF0ZWQgY29kZSBmb3IgdGhlIGxleGVyIGluIGFuIG92ZXJyaWRlXG4vLyBvZiB7QGxpbmsgUmVjb2duaXplci8vYWN0aW9ufSB3aGVuIHRoZSBncmFtbWFyIGlzIGNvbXBpbGVkLlxuLy9cbi8vIDxwPlRoaXMgY2xhc3MgbWF5IHJlcHJlc2VudCBlbWJlZGRlZCBhY3Rpb25zIGNyZWF0ZWQgd2l0aCB0aGUgPGNvZGU+ey4uLn08L2NvZGU+XG4vLyBzeW50YXggaW4gQU5UTFIgNCwgYXMgd2VsbCBhcyBhY3Rpb25zIGNyZWF0ZWQgZm9yIGxleGVyIGNvbW1hbmRzIHdoZXJlIHRoZVxuLy8gY29tbWFuZCBhcmd1bWVudCBjb3VsZCBub3QgYmUgZXZhbHVhdGVkIHdoZW4gdGhlIGdyYW1tYXIgd2FzIGNvbXBpbGVkLjwvcD5cblxuXG4gICAgLy8gQ29uc3RydWN0cyBhIGN1c3RvbSBsZXhlciBhY3Rpb24gd2l0aCB0aGUgc3BlY2lmaWVkIHJ1bGUgYW5kIGFjdGlvblxuICAgIC8vIGluZGV4ZXMuXG4gICAgLy9cbiAgICAvLyBAcGFyYW0gcnVsZUluZGV4IFRoZSBydWxlIGluZGV4IHRvIHVzZSBmb3IgY2FsbHMgdG9cbiAgICAvLyB7QGxpbmsgUmVjb2duaXplci8vYWN0aW9ufS5cbiAgICAvLyBAcGFyYW0gYWN0aW9uSW5kZXggVGhlIGFjdGlvbiBpbmRleCB0byB1c2UgZm9yIGNhbGxzIHRvXG4gICAgLy8ge0BsaW5rIFJlY29nbml6ZXIvL2FjdGlvbn0uXG5cbmZ1bmN0aW9uIExleGVyQ3VzdG9tQWN0aW9uKHJ1bGVJbmRleCwgYWN0aW9uSW5kZXgpIHtcblx0TGV4ZXJBY3Rpb24uY2FsbCh0aGlzLCBMZXhlckFjdGlvblR5cGUuQ1VTVE9NKTtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IHJ1bGVJbmRleDtcbiAgICB0aGlzLmFjdGlvbkluZGV4ID0gYWN0aW9uSW5kZXg7XG4gICAgdGhpcy5pc1Bvc2l0aW9uRGVwZW5kZW50ID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJDdXN0b21BY3Rpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMZXhlckFjdGlvbi5wcm90b3R5cGUpO1xuTGV4ZXJDdXN0b21BY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGV4ZXJDdXN0b21BY3Rpb247XG5cbi8vIDxwPkN1c3RvbSBhY3Rpb25zIGFyZSBpbXBsZW1lbnRlZCBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vYWN0aW9ufSB3aXRoIHRoZVxuLy8gYXBwcm9wcmlhdGUgcnVsZSBhbmQgYWN0aW9uIGluZGV4ZXMuPC9wPlxuTGV4ZXJDdXN0b21BY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihsZXhlcikge1xuICAgIGxleGVyLmFjdGlvbihudWxsLCB0aGlzLnJ1bGVJbmRleCwgdGhpcy5hY3Rpb25JbmRleCk7XG59O1xuXG5MZXhlckN1c3RvbUFjdGlvbi5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5hY3Rpb25UeXBlLCB0aGlzLnJ1bGVJbmRleCwgdGhpcy5hY3Rpb25JbmRleCk7XG59O1xuXG5MZXhlckN1c3RvbUFjdGlvbi5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBpZiAodGhpcyA9PT0gb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghIChvdGhlciBpbnN0YW5jZW9mIExleGVyQ3VzdG9tQWN0aW9uKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucnVsZUluZGV4ID09PSBvdGhlci5ydWxlSW5kZXggJiYgdGhpcy5hY3Rpb25JbmRleCA9PT0gb3RoZXIuYWN0aW9uSW5kZXg7XG4gICAgfVxufTtcblxuLy8gSW1wbGVtZW50cyB0aGUge0Bjb2RlIGNoYW5uZWx9IGxleGVyIGFjdGlvbiBieSBjYWxsaW5nXG4vLyB7QGxpbmsgTGV4ZXIvL3NldENoYW5uZWx9IHdpdGggdGhlIGFzc2lnbmVkIGNoYW5uZWwuXG4vLyBDb25zdHJ1Y3RzIGEgbmV3IHtAY29kZSBjaGFubmVsfSBhY3Rpb24gd2l0aCB0aGUgc3BlY2lmaWVkIGNoYW5uZWwgdmFsdWUuXG4vLyBAcGFyYW0gY2hhbm5lbCBUaGUgY2hhbm5lbCB2YWx1ZSB0byBwYXNzIHRvIHtAbGluayBMZXhlci8vc2V0Q2hhbm5lbH0uXG5mdW5jdGlvbiBMZXhlckNoYW5uZWxBY3Rpb24oY2hhbm5lbCkge1xuXHRMZXhlckFjdGlvbi5jYWxsKHRoaXMsIExleGVyQWN0aW9uVHlwZS5DSEFOTkVMKTtcbiAgICB0aGlzLmNoYW5uZWwgPSBjaGFubmVsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5MZXhlckNoYW5uZWxBY3Rpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMZXhlckFjdGlvbi5wcm90b3R5cGUpO1xuTGV4ZXJDaGFubmVsQWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExleGVyQ2hhbm5lbEFjdGlvbjtcblxuLy8gPHA+VGhpcyBhY3Rpb24gaXMgaW1wbGVtZW50ZWQgYnkgY2FsbGluZyB7QGxpbmsgTGV4ZXIvL3NldENoYW5uZWx9IHdpdGggdGhlXG4vLyB2YWx1ZSBwcm92aWRlZCBieSB7QGxpbmsgLy9nZXRDaGFubmVsfS48L3A+XG5MZXhlckNoYW5uZWxBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihsZXhlcikge1xuICAgIGxleGVyLl9jaGFubmVsID0gdGhpcy5jaGFubmVsO1xufTtcblxuTGV4ZXJDaGFubmVsQWN0aW9uLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLmFjdGlvblR5cGUsIHRoaXMuY2hhbm5lbCk7XG59O1xuXG5MZXhlckNoYW5uZWxBY3Rpb24ucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgaWYgKHRoaXMgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoISAob3RoZXIgaW5zdGFuY2VvZiBMZXhlckNoYW5uZWxBY3Rpb24pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5jaGFubmVsID09PSBvdGhlci5jaGFubmVsO1xuICAgIH1cbn07XG5cbkxleGVyQ2hhbm5lbEFjdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJjaGFubmVsKFwiICsgdGhpcy5jaGFubmVsICsgXCIpXCI7XG59O1xuXG4vLyBUaGlzIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBMZXhlckFjdGlvbn0gaXMgdXNlZCBmb3IgdHJhY2tpbmcgaW5wdXQgb2Zmc2V0c1xuLy8gZm9yIHBvc2l0aW9uLWRlcGVuZGVudCBhY3Rpb25zIHdpdGhpbiBhIHtAbGluayBMZXhlckFjdGlvbkV4ZWN1dG9yfS5cbi8vXG4vLyA8cD5UaGlzIGFjdGlvbiBpcyBub3Qgc2VyaWFsaXplZCBhcyBwYXJ0IG9mIHRoZSBBVE4sIGFuZCBpcyBvbmx5IHJlcXVpcmVkIGZvclxuLy8gcG9zaXRpb24tZGVwZW5kZW50IGxleGVyIGFjdGlvbnMgd2hpY2ggYXBwZWFyIGF0IGEgbG9jYXRpb24gb3RoZXIgdGhhbiB0aGVcbi8vIGVuZCBvZiBhIHJ1bGUuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IERGQSBvcHRpbWl6YXRpb25zIGVtcGxveWVkIGZvclxuLy8gbGV4ZXIgYWN0aW9ucywgc2VlIHtAbGluayBMZXhlckFjdGlvbkV4ZWN1dG9yLy9hcHBlbmR9IGFuZFxuLy8ge0BsaW5rIExleGVyQWN0aW9uRXhlY3V0b3IvL2ZpeE9mZnNldEJlZm9yZU1hdGNofS48L3A+XG5cbi8vIENvbnN0cnVjdHMgYSBuZXcgaW5kZXhlZCBjdXN0b20gYWN0aW9uIGJ5IGFzc29jaWF0aW5nIGEgY2hhcmFjdGVyIG9mZnNldFxuLy8gd2l0aCBhIHtAbGluayBMZXhlckFjdGlvbn0uXG4vL1xuLy8gPHA+Tm90ZTogVGhpcyBjbGFzcyBpcyBvbmx5IHJlcXVpcmVkIGZvciBsZXhlciBhY3Rpb25zIGZvciB3aGljaFxuLy8ge0BsaW5rIExleGVyQWN0aW9uLy9pc1Bvc2l0aW9uRGVwZW5kZW50fSByZXR1cm5zIHtAY29kZSB0cnVlfS48L3A+XG4vL1xuLy8gQHBhcmFtIG9mZnNldCBUaGUgb2Zmc2V0IGludG8gdGhlIGlucHV0IHtAbGluayBDaGFyU3RyZWFtfSwgcmVsYXRpdmUgdG9cbi8vIHRoZSB0b2tlbiBzdGFydCBpbmRleCwgYXQgd2hpY2ggdGhlIHNwZWNpZmllZCBsZXhlciBhY3Rpb24gc2hvdWxkIGJlXG4vLyBleGVjdXRlZC5cbi8vIEBwYXJhbSBhY3Rpb24gVGhlIGxleGVyIGFjdGlvbiB0byBleGVjdXRlIGF0IGEgcGFydGljdWxhciBvZmZzZXQgaW4gdGhlXG4vLyBpbnB1dCB7QGxpbmsgQ2hhclN0cmVhbX0uXG5mdW5jdGlvbiBMZXhlckluZGV4ZWRDdXN0b21BY3Rpb24ob2Zmc2V0LCBhY3Rpb24pIHtcblx0TGV4ZXJBY3Rpb24uY2FsbCh0aGlzLCBhY3Rpb24uYWN0aW9uVHlwZSk7XG4gICAgdGhpcy5vZmZzZXQgPSBvZmZzZXQ7XG4gICAgdGhpcy5hY3Rpb24gPSBhY3Rpb247XG4gICAgdGhpcy5pc1Bvc2l0aW9uRGVwZW5kZW50ID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTGV4ZXJBY3Rpb24ucHJvdG90eXBlKTtcbkxleGVySW5kZXhlZEN1c3RvbUFjdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlckluZGV4ZWRDdXN0b21BY3Rpb247XG5cbi8vIDxwPlRoaXMgbWV0aG9kIGNhbGxzIHtAbGluayAvL2V4ZWN1dGV9IG9uIHRoZSByZXN1bHQgb2Yge0BsaW5rIC8vZ2V0QWN0aW9ufVxuLy8gdXNpbmcgdGhlIHByb3ZpZGVkIHtAY29kZSBsZXhlcn0uPC9wPlxuTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24obGV4ZXIpIHtcbiAgICAvLyBhc3N1bWUgdGhlIGlucHV0IHN0cmVhbSBwb3NpdGlvbiB3YXMgcHJvcGVybHkgc2V0IGJ5IHRoZSBjYWxsaW5nIGNvZGVcbiAgICB0aGlzLmFjdGlvbi5leGVjdXRlKGxleGVyKTtcbn07XG5cbkxleGVySW5kZXhlZEN1c3RvbUFjdGlvbi5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5hY3Rpb25UeXBlLCB0aGlzLm9mZnNldCwgdGhpcy5hY3Rpb24pO1xufTtcblxuTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIGlmICh0aGlzID09PSBvdGhlcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCEgKG90aGVyIGluc3RhbmNlb2YgTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub2Zmc2V0ID09PSBvdGhlci5vZmZzZXQgJiYgdGhpcy5hY3Rpb24gPT09IG90aGVyLmFjdGlvbjtcbiAgICB9XG59O1xuXG5cbmV4cG9ydHMuTGV4ZXJBY3Rpb25UeXBlID0gTGV4ZXJBY3Rpb25UeXBlO1xuZXhwb3J0cy5MZXhlclNraXBBY3Rpb24gPSBMZXhlclNraXBBY3Rpb247XG5leHBvcnRzLkxleGVyQ2hhbm5lbEFjdGlvbiA9IExleGVyQ2hhbm5lbEFjdGlvbjtcbmV4cG9ydHMuTGV4ZXJDdXN0b21BY3Rpb24gPSBMZXhlckN1c3RvbUFjdGlvbjtcbmV4cG9ydHMuTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uID0gTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uO1xuZXhwb3J0cy5MZXhlck1vcmVBY3Rpb24gPSBMZXhlck1vcmVBY3Rpb247XG5leHBvcnRzLkxleGVyVHlwZUFjdGlvbiA9IExleGVyVHlwZUFjdGlvbjtcbmV4cG9ydHMuTGV4ZXJQdXNoTW9kZUFjdGlvbiA9IExleGVyUHVzaE1vZGVBY3Rpb247XG5leHBvcnRzLkxleGVyUG9wTW9kZUFjdGlvbiA9IExleGVyUG9wTW9kZUFjdGlvbjtcbmV4cG9ydHMuTGV4ZXJNb2RlQWN0aW9uID0gTGV4ZXJNb2RlQWN0aW9uOyIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxuLy8gUmVwcmVzZW50cyBhbiBleGVjdXRvciBmb3IgYSBzZXF1ZW5jZSBvZiBsZXhlciBhY3Rpb25zIHdoaWNoIHRyYXZlcnNlZCBkdXJpbmdcbi8vIHRoZSBtYXRjaGluZyBvcGVyYXRpb24gb2YgYSBsZXhlciBydWxlICh0b2tlbikuXG4vL1xuLy8gPHA+VGhlIGV4ZWN1dG9yIHRyYWNrcyBwb3NpdGlvbiBpbmZvcm1hdGlvbiBmb3IgcG9zaXRpb24tZGVwZW5kZW50IGxleGVyIGFjdGlvbnNcbi8vIGVmZmljaWVudGx5LCBlbnN1cmluZyB0aGF0IGFjdGlvbnMgYXBwZWFyaW5nIG9ubHkgYXQgdGhlIGVuZCBvZiB0aGUgcnVsZSBkb1xuLy8gbm90IGNhdXNlIGJsb2F0aW5nIG9mIHRoZSB7QGxpbmsgREZBfSBjcmVhdGVkIGZvciB0aGUgbGV4ZXIuPC9wPlxuXG52YXIgaGFzaFN0dWZmID0gcmVxdWlyZShcIi4uL1V0aWxzXCIpLmhhc2hTdHVmZjtcbnZhciBMZXhlckluZGV4ZWRDdXN0b21BY3Rpb24gPSByZXF1aXJlKCcuL0xleGVyQWN0aW9uJykuTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uO1xuXG5mdW5jdGlvbiBMZXhlckFjdGlvbkV4ZWN1dG9yKGxleGVyQWN0aW9ucykge1xuXHR0aGlzLmxleGVyQWN0aW9ucyA9IGxleGVyQWN0aW9ucyA9PT0gbnVsbCA/IFtdIDogbGV4ZXJBY3Rpb25zO1xuXHQvLyBDYWNoZXMgdGhlIHJlc3VsdCBvZiB7QGxpbmsgLy9oYXNoQ29kZX0gc2luY2UgdGhlIGhhc2ggY29kZSBpcyBhbiBlbGVtZW50XG5cdC8vIG9mIHRoZSBwZXJmb3JtYW5jZS1jcml0aWNhbCB7QGxpbmsgTGV4ZXJBVE5Db25maWcvL2hhc2hDb2RlfSBvcGVyYXRpb24uXG5cdHRoaXMuY2FjaGVkSGFzaENvZGUgPSBoYXNoU3R1ZmYobGV4ZXJBY3Rpb25zKTsgLy8gXCJcIi5qb2luKFtzdHIobGEpIGZvciBsYSBpblxuXHQvLyBsZXhlckFjdGlvbnNdKSlcblx0cmV0dXJuIHRoaXM7XG59XG5cbi8vIENyZWF0ZXMgYSB7QGxpbmsgTGV4ZXJBY3Rpb25FeGVjdXRvcn0gd2hpY2ggZXhlY3V0ZXMgdGhlIGFjdGlvbnMgZm9yXG4vLyB0aGUgaW5wdXQge0Bjb2RlIGxleGVyQWN0aW9uRXhlY3V0b3J9IGZvbGxvd2VkIGJ5IGEgc3BlY2lmaWVkXG4vLyB7QGNvZGUgbGV4ZXJBY3Rpb259LlxuLy9cbi8vIEBwYXJhbSBsZXhlckFjdGlvbkV4ZWN1dG9yIFRoZSBleGVjdXRvciBmb3IgYWN0aW9ucyBhbHJlYWR5IHRyYXZlcnNlZCBieVxuLy8gdGhlIGxleGVyIHdoaWxlIG1hdGNoaW5nIGEgdG9rZW4gd2l0aGluIGEgcGFydGljdWxhclxuLy8ge0BsaW5rIExleGVyQVROQ29uZmlnfS4gSWYgdGhpcyBpcyB7QGNvZGUgbnVsbH0sIHRoZSBtZXRob2QgYmVoYXZlcyBhc1xuLy8gdGhvdWdoIGl0IHdlcmUgYW4gZW1wdHkgZXhlY3V0b3IuXG4vLyBAcGFyYW0gbGV4ZXJBY3Rpb24gVGhlIGxleGVyIGFjdGlvbiB0byBleGVjdXRlIGFmdGVyIHRoZSBhY3Rpb25zXG4vLyBzcGVjaWZpZWQgaW4ge0Bjb2RlIGxleGVyQWN0aW9uRXhlY3V0b3J9LlxuLy9cbi8vIEByZXR1cm4gQSB7QGxpbmsgTGV4ZXJBY3Rpb25FeGVjdXRvcn0gZm9yIGV4ZWN1dGluZyB0aGUgY29tYmluZSBhY3Rpb25zXG4vLyBvZiB7QGNvZGUgbGV4ZXJBY3Rpb25FeGVjdXRvcn0gYW5kIHtAY29kZSBsZXhlckFjdGlvbn0uXG5MZXhlckFjdGlvbkV4ZWN1dG9yLmFwcGVuZCA9IGZ1bmN0aW9uKGxleGVyQWN0aW9uRXhlY3V0b3IsIGxleGVyQWN0aW9uKSB7XG5cdGlmIChsZXhlckFjdGlvbkV4ZWN1dG9yID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIG5ldyBMZXhlckFjdGlvbkV4ZWN1dG9yKFsgbGV4ZXJBY3Rpb24gXSk7XG5cdH1cblx0dmFyIGxleGVyQWN0aW9ucyA9IGxleGVyQWN0aW9uRXhlY3V0b3IubGV4ZXJBY3Rpb25zLmNvbmNhdChbIGxleGVyQWN0aW9uIF0pO1xuXHRyZXR1cm4gbmV3IExleGVyQWN0aW9uRXhlY3V0b3IobGV4ZXJBY3Rpb25zKTtcbn07XG5cbi8vIENyZWF0ZXMgYSB7QGxpbmsgTGV4ZXJBY3Rpb25FeGVjdXRvcn0gd2hpY2ggZW5jb2RlcyB0aGUgY3VycmVudCBvZmZzZXRcbi8vIGZvciBwb3NpdGlvbi1kZXBlbmRlbnQgbGV4ZXIgYWN0aW9ucy5cbi8vXG4vLyA8cD5Ob3JtYWxseSwgd2hlbiB0aGUgZXhlY3V0b3IgZW5jb3VudGVycyBsZXhlciBhY3Rpb25zIHdoZXJlXG4vLyB7QGxpbmsgTGV4ZXJBY3Rpb24vL2lzUG9zaXRpb25EZXBlbmRlbnR9IHJldHVybnMge0Bjb2RlIHRydWV9LCBpdCBjYWxsc1xuLy8ge0BsaW5rIEludFN0cmVhbS8vc2Vla30gb24gdGhlIGlucHV0IHtAbGluayBDaGFyU3RyZWFtfSB0byBzZXQgdGhlIGlucHV0XG4vLyBwb3NpdGlvbiB0byB0aGUgPGVtPmVuZDwvZW0+IG9mIHRoZSBjdXJyZW50IHRva2VuLiBUaGlzIGJlaGF2aW9yIHByb3ZpZGVzXG4vLyBmb3IgZWZmaWNpZW50IERGQSByZXByZXNlbnRhdGlvbiBvZiBsZXhlciBhY3Rpb25zIHdoaWNoIGFwcGVhciBhdCB0aGUgZW5kXG4vLyBvZiBhIGxleGVyIHJ1bGUsIGV2ZW4gd2hlbiB0aGUgbGV4ZXIgcnVsZSBtYXRjaGVzIGEgdmFyaWFibGUgbnVtYmVyIG9mXG4vLyBjaGFyYWN0ZXJzLjwvcD5cbi8vXG4vLyA8cD5QcmlvciB0byB0cmF2ZXJzaW5nIGEgbWF0Y2ggdHJhbnNpdGlvbiBpbiB0aGUgQVROLCB0aGUgY3VycmVudCBvZmZzZXRcbi8vIGZyb20gdGhlIHRva2VuIHN0YXJ0IGluZGV4IGlzIGFzc2lnbmVkIHRvIGFsbCBwb3NpdGlvbi1kZXBlbmRlbnQgbGV4ZXJcbi8vIGFjdGlvbnMgd2hpY2ggaGF2ZSBub3QgYWxyZWFkeSBiZWVuIGFzc2lnbmVkIGEgZml4ZWQgb2Zmc2V0LiBCeSBzdG9yaW5nXG4vLyB0aGUgb2Zmc2V0cyByZWxhdGl2ZSB0byB0aGUgdG9rZW4gc3RhcnQgaW5kZXgsIHRoZSBERkEgcmVwcmVzZW50YXRpb24gb2Zcbi8vIGxleGVyIGFjdGlvbnMgd2hpY2ggYXBwZWFyIGluIHRoZSBtaWRkbGUgb2YgdG9rZW5zIHJlbWFpbnMgZWZmaWNpZW50IGR1ZVxuLy8gdG8gc2hhcmluZyBhbW9uZyB0b2tlbnMgb2YgdGhlIHNhbWUgbGVuZ3RoLCByZWdhcmRsZXNzIG9mIHRoZWlyIGFic29sdXRlXG4vLyBwb3NpdGlvbiBpbiB0aGUgaW5wdXQgc3RyZWFtLjwvcD5cbi8vXG4vLyA8cD5JZiB0aGUgY3VycmVudCBleGVjdXRvciBhbHJlYWR5IGhhcyBvZmZzZXRzIGFzc2lnbmVkIHRvIGFsbFxuLy8gcG9zaXRpb24tZGVwZW5kZW50IGxleGVyIGFjdGlvbnMsIHRoZSBtZXRob2QgcmV0dXJucyB7QGNvZGUgdGhpc30uPC9wPlxuLy9cbi8vIEBwYXJhbSBvZmZzZXQgVGhlIGN1cnJlbnQgb2Zmc2V0IHRvIGFzc2lnbiB0byBhbGwgcG9zaXRpb24tZGVwZW5kZW50XG4vLyBsZXhlciBhY3Rpb25zIHdoaWNoIGRvIG5vdCBhbHJlYWR5IGhhdmUgb2Zmc2V0cyBhc3NpZ25lZC5cbi8vXG4vLyBAcmV0dXJuIEEge0BsaW5rIExleGVyQWN0aW9uRXhlY3V0b3J9IHdoaWNoIHN0b3JlcyBpbnB1dCBzdHJlYW0gb2Zmc2V0c1xuLy8gZm9yIGFsbCBwb3NpdGlvbi1kZXBlbmRlbnQgbGV4ZXIgYWN0aW9ucy5cbi8vIC9cbkxleGVyQWN0aW9uRXhlY3V0b3IucHJvdG90eXBlLmZpeE9mZnNldEJlZm9yZU1hdGNoID0gZnVuY3Rpb24ob2Zmc2V0KSB7XG5cdHZhciB1cGRhdGVkTGV4ZXJBY3Rpb25zID0gbnVsbDtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmxleGVyQWN0aW9ucy5sZW5ndGg7IGkrKykge1xuXHRcdGlmICh0aGlzLmxleGVyQWN0aW9uc1tpXS5pc1Bvc2l0aW9uRGVwZW5kZW50ICYmXG5cdFx0XHRcdCEodGhpcy5sZXhlckFjdGlvbnNbaV0gaW5zdGFuY2VvZiBMZXhlckluZGV4ZWRDdXN0b21BY3Rpb24pKSB7XG5cdFx0XHRpZiAodXBkYXRlZExleGVyQWN0aW9ucyA9PT0gbnVsbCkge1xuXHRcdFx0XHR1cGRhdGVkTGV4ZXJBY3Rpb25zID0gdGhpcy5sZXhlckFjdGlvbnMuY29uY2F0KFtdKTtcblx0XHRcdH1cblx0XHRcdHVwZGF0ZWRMZXhlckFjdGlvbnNbaV0gPSBuZXcgTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uKG9mZnNldCxcblx0XHRcdFx0XHR0aGlzLmxleGVyQWN0aW9uc1tpXSk7XG5cdFx0fVxuXHR9XG5cdGlmICh1cGRhdGVkTGV4ZXJBY3Rpb25zID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG5ldyBMZXhlckFjdGlvbkV4ZWN1dG9yKHVwZGF0ZWRMZXhlckFjdGlvbnMpO1xuXHR9XG59O1xuXG4vLyBFeGVjdXRlIHRoZSBhY3Rpb25zIGVuY2Fwc3VsYXRlZCBieSB0aGlzIGV4ZWN1dG9yIHdpdGhpbiB0aGUgY29udGV4dCBvZiBhXG4vLyBwYXJ0aWN1bGFyIHtAbGluayBMZXhlcn0uXG4vL1xuLy8gPHA+VGhpcyBtZXRob2QgY2FsbHMge0BsaW5rIEludFN0cmVhbS8vc2Vla30gdG8gc2V0IHRoZSBwb3NpdGlvbiBvZiB0aGVcbi8vIHtAY29kZSBpbnB1dH0ge0BsaW5rIENoYXJTdHJlYW19IHByaW9yIHRvIGNhbGxpbmdcbi8vIHtAbGluayBMZXhlckFjdGlvbi8vZXhlY3V0ZX0gb24gYSBwb3NpdGlvbi1kZXBlbmRlbnQgYWN0aW9uLiBCZWZvcmUgdGhlXG4vLyBtZXRob2QgcmV0dXJucywgdGhlIGlucHV0IHBvc2l0aW9uIHdpbGwgYmUgcmVzdG9yZWQgdG8gdGhlIHNhbWUgcG9zaXRpb25cbi8vIGl0IHdhcyBpbiB3aGVuIHRoZSBtZXRob2Qgd2FzIGludm9rZWQuPC9wPlxuLy9cbi8vIEBwYXJhbSBsZXhlciBUaGUgbGV4ZXIgaW5zdGFuY2UuXG4vLyBAcGFyYW0gaW5wdXQgVGhlIGlucHV0IHN0cmVhbSB3aGljaCBpcyB0aGUgc291cmNlIGZvciB0aGUgY3VycmVudCB0b2tlbi5cbi8vIFdoZW4gdGhpcyBtZXRob2QgaXMgY2FsbGVkLCB0aGUgY3VycmVudCB7QGxpbmsgSW50U3RyZWFtLy9pbmRleH0gZm9yXG4vLyB7QGNvZGUgaW5wdXR9IHNob3VsZCBiZSB0aGUgc3RhcnQgb2YgdGhlIGZvbGxvd2luZyB0b2tlbiwgaS5lLiAxXG4vLyBjaGFyYWN0ZXIgcGFzdCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IHRva2VuLlxuLy8gQHBhcmFtIHN0YXJ0SW5kZXggVGhlIHRva2VuIHN0YXJ0IGluZGV4LiBUaGlzIHZhbHVlIG1heSBiZSBwYXNzZWQgdG9cbi8vIHtAbGluayBJbnRTdHJlYW0vL3NlZWt9IHRvIHNldCB0aGUge0Bjb2RlIGlucHV0fSBwb3NpdGlvbiB0byB0aGUgYmVnaW5uaW5nXG4vLyBvZiB0aGUgdG9rZW4uXG4vLyAvXG5MZXhlckFjdGlvbkV4ZWN1dG9yLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24obGV4ZXIsIGlucHV0LCBzdGFydEluZGV4KSB7XG5cdHZhciByZXF1aXJlc1NlZWsgPSBmYWxzZTtcblx0dmFyIHN0b3BJbmRleCA9IGlucHV0LmluZGV4O1xuXHR0cnkge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZXhlckFjdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBsZXhlckFjdGlvbiA9IHRoaXMubGV4ZXJBY3Rpb25zW2ldO1xuXHRcdFx0aWYgKGxleGVyQWN0aW9uIGluc3RhbmNlb2YgTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uKSB7XG5cdFx0XHRcdHZhciBvZmZzZXQgPSBsZXhlckFjdGlvbi5vZmZzZXQ7XG5cdFx0XHRcdGlucHV0LnNlZWsoc3RhcnRJbmRleCArIG9mZnNldCk7XG5cdFx0XHRcdGxleGVyQWN0aW9uID0gbGV4ZXJBY3Rpb24uYWN0aW9uO1xuXHRcdFx0XHRyZXF1aXJlc1NlZWsgPSAoc3RhcnRJbmRleCArIG9mZnNldCkgIT09IHN0b3BJbmRleDtcblx0XHRcdH0gZWxzZSBpZiAobGV4ZXJBY3Rpb24uaXNQb3NpdGlvbkRlcGVuZGVudCkge1xuXHRcdFx0XHRpbnB1dC5zZWVrKHN0b3BJbmRleCk7XG5cdFx0XHRcdHJlcXVpcmVzU2VlayA9IGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0bGV4ZXJBY3Rpb24uZXhlY3V0ZShsZXhlcik7XG5cdFx0fVxuXHR9IGZpbmFsbHkge1xuXHRcdGlmIChyZXF1aXJlc1NlZWspIHtcblx0XHRcdGlucHV0LnNlZWsoc3RvcEluZGV4KTtcblx0XHR9XG5cdH1cbn07XG5cbkxleGVyQWN0aW9uRXhlY3V0b3IucHJvdG90eXBlLmhhc2hDb2RlID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLmNhY2hlZEhhc2hDb2RlO1xufTtcblxuTGV4ZXJBY3Rpb25FeGVjdXRvci5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5jYWNoZWRIYXNoQ29kZSk7XG59O1xuXG5cbkxleGVyQWN0aW9uRXhlY3V0b3IucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG5cdGlmICh0aGlzID09PSBvdGhlcikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2UgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBMZXhlckFjdGlvbkV4ZWN1dG9yKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIGlmICh0aGlzLmNhY2hlZEhhc2hDb2RlICE9IG90aGVyLmNhY2hlZEhhc2hDb2RlKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGVsc2UgaWYgKHRoaXMubGV4ZXJBY3Rpb25zLmxlbmd0aCAhPSBvdGhlci5sZXhlckFjdGlvbnMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGVsc2Uge1xuXHRcdHZhciBudW1BY3Rpb25zID0gdGhpcy5sZXhlckFjdGlvbnMubGVuZ3RoXG5cdFx0Zm9yICh2YXIgaWR4ID0gMDsgaWR4IDwgbnVtQWN0aW9uczsgKytpZHgpIHtcblx0XHRcdGlmICghdGhpcy5sZXhlckFjdGlvbnNbaWR4XS5lcXVhbHMob3RoZXIubGV4ZXJBY3Rpb25zW2lkeF0pKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn07XG5cbmV4cG9ydHMuTGV4ZXJBY3Rpb25FeGVjdXRvciA9IExleGVyQWN0aW9uRXhlY3V0b3I7XG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cblxuLy9cbi8vIFRoZSBlbWJvZGltZW50IG9mIHRoZSBhZGFwdGl2ZSBMTCgqKSwgQUxMKCopLCBwYXJzaW5nIHN0cmF0ZWd5LlxuLy9cbi8vIDxwPlxuLy8gVGhlIGJhc2ljIGNvbXBsZXhpdHkgb2YgdGhlIGFkYXB0aXZlIHN0cmF0ZWd5IG1ha2VzIGl0IGhhcmRlciB0byB1bmRlcnN0YW5kLlxuLy8gV2UgYmVnaW4gd2l0aCBBVE4gc2ltdWxhdGlvbiB0byBidWlsZCBwYXRocyBpbiBhIERGQS4gU3Vic2VxdWVudCBwcmVkaWN0aW9uXG4vLyByZXF1ZXN0cyBnbyB0aHJvdWdoIHRoZSBERkEgZmlyc3QuIElmIHRoZXkgcmVhY2ggYSBzdGF0ZSB3aXRob3V0IGFuIGVkZ2UgZm9yXG4vLyB0aGUgY3VycmVudCBzeW1ib2wsIHRoZSBhbGdvcml0aG0gZmFpbHMgb3ZlciB0byB0aGUgQVROIHNpbXVsYXRpb24gdG9cbi8vIGNvbXBsZXRlIHRoZSBERkEgcGF0aCBmb3IgdGhlIGN1cnJlbnQgaW5wdXQgKHVudGlsIGl0IGZpbmRzIGEgY29uZmxpY3Qgc3RhdGVcbi8vIG9yIHVuaXF1ZWx5IHByZWRpY3Rpbmcgc3RhdGUpLjwvcD5cbi8vXG4vLyA8cD5cbi8vIEFsbCBvZiB0aGF0IGlzIGRvbmUgd2l0aG91dCB1c2luZyB0aGUgb3V0ZXIgY29udGV4dCBiZWNhdXNlIHdlIHdhbnQgdG8gY3JlYXRlXG4vLyBhIERGQSB0aGF0IGlzIG5vdCBkZXBlbmRlbnQgdXBvbiB0aGUgcnVsZSBpbnZvY2F0aW9uIHN0YWNrIHdoZW4gd2UgZG8gYVxuLy8gcHJlZGljdGlvbi4gT25lIERGQSB3b3JrcyBpbiBhbGwgY29udGV4dHMuIFdlIGF2b2lkIHVzaW5nIGNvbnRleHQgbm90XG4vLyBuZWNlc3NhcmlseSBiZWNhdXNlIGl0J3Mgc2xvd2VyLCBhbHRob3VnaCBpdCBjYW4gYmUsIGJ1dCBiZWNhdXNlIG9mIHRoZSBERkFcbi8vIGNhY2hpbmcgcHJvYmxlbS4gVGhlIGNsb3N1cmUgcm91dGluZSBvbmx5IGNvbnNpZGVycyB0aGUgcnVsZSBpbnZvY2F0aW9uIHN0YWNrXG4vLyBjcmVhdGVkIGR1cmluZyBwcmVkaWN0aW9uIGJlZ2lubmluZyBpbiB0aGUgZGVjaXNpb24gcnVsZS4gRm9yIGV4YW1wbGUsIGlmXG4vLyBwcmVkaWN0aW9uIG9jY3VycyB3aXRob3V0IGludm9raW5nIGFub3RoZXIgcnVsZSdzIEFUTiwgdGhlcmUgYXJlIG5vIGNvbnRleHRcbi8vIHN0YWNrcyBpbiB0aGUgY29uZmlndXJhdGlvbnMuIFdoZW4gbGFjayBvZiBjb250ZXh0IGxlYWRzIHRvIGEgY29uZmxpY3QsIHdlXG4vLyBkb24ndCBrbm93IGlmIGl0J3MgYW4gYW1iaWd1aXR5IG9yIGEgd2Vha25lc3MgaW4gdGhlIHN0cm9uZyBMTCgqKSBwYXJzaW5nXG4vLyBzdHJhdGVneSAodmVyc3VzIGZ1bGwgTEwoKikpLjwvcD5cbi8vXG4vLyA8cD5cbi8vIFdoZW4gU0xMIHlpZWxkcyBhIGNvbmZpZ3VyYXRpb24gc2V0IHdpdGggY29uZmxpY3QsIHdlIHJld2luZCB0aGUgaW5wdXQgYW5kXG4vLyByZXRyeSB0aGUgQVROIHNpbXVsYXRpb24sIHRoaXMgdGltZSB1c2luZyBmdWxsIG91dGVyIGNvbnRleHQgd2l0aG91dCBhZGRpbmdcbi8vIHRvIHRoZSBERkEuIENvbmZpZ3VyYXRpb24gY29udGV4dCBzdGFja3Mgd2lsbCBiZSB0aGUgZnVsbCBpbnZvY2F0aW9uIHN0YWNrc1xuLy8gZnJvbSB0aGUgc3RhcnQgcnVsZS4gSWYgd2UgZ2V0IGEgY29uZmxpY3QgdXNpbmcgZnVsbCBjb250ZXh0LCB0aGVuIHdlIGNhblxuLy8gZGVmaW5pdGl2ZWx5IHNheSB3ZSBoYXZlIGEgdHJ1ZSBhbWJpZ3VpdHkgZm9yIHRoYXQgaW5wdXQgc2VxdWVuY2UuIElmIHdlXG4vLyBkb24ndCBnZXQgYSBjb25mbGljdCwgaXQgaW1wbGllcyB0aGF0IHRoZSBkZWNpc2lvbiBpcyBzZW5zaXRpdmUgdG8gdGhlIG91dGVyXG4vLyBjb250ZXh0LiAoSXQgaXMgbm90IGNvbnRleHQtc2Vuc2l0aXZlIGluIHRoZSBzZW5zZSBvZiBjb250ZXh0LXNlbnNpdGl2ZVxuLy8gZ3JhbW1hcnMuKTwvcD5cbi8vXG4vLyA8cD5cbi8vIFRoZSBuZXh0IHRpbWUgd2UgcmVhY2ggdGhpcyBERkEgc3RhdGUgd2l0aCBhbiBTTEwgY29uZmxpY3QsIHRocm91Z2ggREZBXG4vLyBzaW11bGF0aW9uLCB3ZSB3aWxsIGFnYWluIHJldHJ5IHRoZSBBVE4gc2ltdWxhdGlvbiB1c2luZyBmdWxsIGNvbnRleHQgbW9kZS5cbi8vIFRoaXMgaXMgc2xvdyBiZWNhdXNlIHdlIGNhbid0IHNhdmUgdGhlIHJlc3VsdHMgYW5kIGhhdmUgdG8gXCJpbnRlcnByZXRcIiB0aGVcbi8vIEFUTiBlYWNoIHRpbWUgd2UgZ2V0IHRoYXQgaW5wdXQuPC9wPlxuLy9cbi8vIDxwPlxuLy8gPHN0cm9uZz5DQUNISU5HIEZVTEwgQ09OVEVYVCBQUkVESUNUSU9OUzwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5cbi8vIFdlIGNvdWxkIGNhY2hlIHJlc3VsdHMgZnJvbSBmdWxsIGNvbnRleHQgdG8gcHJlZGljdGVkIGFsdGVybmF0aXZlIGVhc2lseSBhbmRcbi8vIHRoYXQgc2F2ZXMgYSBsb3Qgb2YgdGltZSBidXQgZG9lc24ndCB3b3JrIGluIHByZXNlbmNlIG9mIHByZWRpY2F0ZXMuIFRoZSBzZXRcbi8vIG9mIHZpc2libGUgcHJlZGljYXRlcyBmcm9tIHRoZSBBVE4gc3RhcnQgc3RhdGUgY2hhbmdlcyBkZXBlbmRpbmcgb24gdGhlXG4vLyBjb250ZXh0LCBiZWNhdXNlIGNsb3N1cmUgY2FuIGZhbGwgb2ZmIHRoZSBlbmQgb2YgYSBydWxlLiBJIHRyaWVkIHRvIGNhY2hlXG4vLyB0dXBsZXMgKHN0YWNrIGNvbnRleHQsIHNlbWFudGljIGNvbnRleHQsIHByZWRpY3RlZCBhbHQpIGJ1dCBpdCB3YXMgc2xvd2VyXG4vLyB0aGFuIGludGVycHJldGluZyBhbmQgbXVjaCBtb3JlIGNvbXBsaWNhdGVkLiBBbHNvIHJlcXVpcmVkIGEgaHVnZSBhbW91bnQgb2Zcbi8vIG1lbW9yeS4gVGhlIGdvYWwgaXMgbm90IHRvIGNyZWF0ZSB0aGUgd29ybGQncyBmYXN0ZXN0IHBhcnNlciBhbnl3YXkuIEknZCBsaWtlXG4vLyB0byBrZWVwIHRoaXMgYWxnb3JpdGhtIHNpbXBsZS4gQnkgbGF1bmNoaW5nIG11bHRpcGxlIHRocmVhZHMsIHdlIGNhbiBpbXByb3ZlXG4vLyB0aGUgc3BlZWQgb2YgcGFyc2luZyBhY3Jvc3MgYSBsYXJnZSBudW1iZXIgb2YgZmlsZXMuPC9wPlxuLy9cbi8vIDxwPlxuLy8gVGhlcmUgaXMgbm8gc3RyaWN0IG9yZGVyaW5nIGJldHdlZW4gdGhlIGFtb3VudCBvZiBpbnB1dCB1c2VkIGJ5IFNMTCB2cyBMTCxcbi8vIHdoaWNoIG1ha2VzIGl0IHJlYWxseSBoYXJkIHRvIGJ1aWxkIGEgY2FjaGUgZm9yIGZ1bGwgY29udGV4dC4gTGV0J3Mgc2F5IHRoYXRcbi8vIHdlIGhhdmUgaW5wdXQgQSBCIEMgdGhhdCBsZWFkcyB0byBhbiBTTEwgY29uZmxpY3Qgd2l0aCBmdWxsIGNvbnRleHQgWC4gVGhhdFxuLy8gaW1wbGllcyB0aGF0IHVzaW5nIFggd2UgbWlnaHQgb25seSB1c2UgQSBCIGJ1dCB3ZSBjb3VsZCBhbHNvIHVzZSBBIEIgQyBEIHRvXG4vLyByZXNvbHZlIGNvbmZsaWN0LiBJbnB1dCBBIEIgQyBEIGNvdWxkIHByZWRpY3QgYWx0ZXJuYXRpdmUgMSBpbiBvbmUgcG9zaXRpb25cbi8vIGluIHRoZSBpbnB1dCBhbmQgQSBCIEMgRSBjb3VsZCBwcmVkaWN0IGFsdGVybmF0aXZlIDIgaW4gYW5vdGhlciBwb3NpdGlvbiBpblxuLy8gaW5wdXQuIFRoZSBjb25mbGljdGluZyBTTEwgY29uZmlndXJhdGlvbnMgY291bGQgc3RpbGwgYmUgbm9uLXVuaXF1ZSBpbiB0aGVcbi8vIGZ1bGwgY29udGV4dCBwcmVkaWN0aW9uLCB3aGljaCB3b3VsZCBsZWFkIHVzIHRvIHJlcXVpcmluZyBtb3JlIGlucHV0IHRoYW4gdGhlXG4vLyBvcmlnaW5hbCBBIEIgQy5cdFRvIG1ha2UgYVx0cHJlZGljdGlvbiBjYWNoZSB3b3JrLCB3ZSBoYXZlIHRvIHRyYWNrXHR0aGUgZXhhY3Rcbi8vIGlucHV0XHR1c2VkIGR1cmluZyB0aGUgcHJldmlvdXMgcHJlZGljdGlvbi4gVGhhdCBhbW91bnRzIHRvIGEgY2FjaGUgdGhhdCBtYXBzXG4vLyBYIHRvIGEgc3BlY2lmaWMgREZBIGZvciB0aGF0IGNvbnRleHQuPC9wPlxuLy9cbi8vIDxwPlxuLy8gU29tZXRoaW5nIHNob3VsZCBiZSBkb25lIGZvciBsZWZ0LXJlY3Vyc2l2ZSBleHByZXNzaW9uIHByZWRpY3Rpb25zLiBUaGV5IGFyZVxuLy8gbGlrZWx5IExMKDEpICsgcHJlZCBldmFsLiBFYXNpZXIgdG8gZG8gdGhlIHdob2xlIFNMTCB1bmxlc3MgZXJyb3IgYW5kIHJldHJ5XG4vLyB3aXRoIGZ1bGwgTEwgdGhpbmcgU2FtIGRvZXMuPC9wPlxuLy9cbi8vIDxwPlxuLy8gPHN0cm9uZz5BVk9JRElORyBGVUxMIENPTlRFWFQgUFJFRElDVElPTjwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5cbi8vIFdlIGF2b2lkIGRvaW5nIGZ1bGwgY29udGV4dCByZXRyeSB3aGVuIHRoZSBvdXRlciBjb250ZXh0IGlzIGVtcHR5LCB3ZSBkaWQgbm90XG4vLyBkaXAgaW50byB0aGUgb3V0ZXIgY29udGV4dCBieSBmYWxsaW5nIG9mZiB0aGUgZW5kIG9mIHRoZSBkZWNpc2lvbiBzdGF0ZSBydWxlLFxuLy8gb3Igd2hlbiB3ZSBmb3JjZSBTTEwgbW9kZS48L3A+XG4vL1xuLy8gPHA+XG4vLyBBcyBhbiBleGFtcGxlIG9mIHRoZSBub3QgZGlwIGludG8gb3V0ZXIgY29udGV4dCBjYXNlLCBjb25zaWRlciBhcyBzdXBlclxuLy8gY29uc3RydWN0b3IgY2FsbHMgdmVyc3VzIGZ1bmN0aW9uIGNhbGxzLiBPbmUgZ3JhbW1hciBtaWdodCBsb29rIGxpa2Vcbi8vIHRoaXM6PC9wPlxuLy9cbi8vIDxwcmU+XG4vLyBjdG9yQm9keVxuLy8gICA6ICd7JyBzdXBlckNhbGw/IHN0YXQqICd9J1xuLy8gICA7XG4vLyA8L3ByZT5cbi8vXG4vLyA8cD5cbi8vIE9yLCB5b3UgbWlnaHQgc2VlIHNvbWV0aGluZyBsaWtlPC9wPlxuLy9cbi8vIDxwcmU+XG4vLyBzdGF0XG4vLyAgIDogc3VwZXJDYWxsICc7J1xuLy8gICB8IGV4cHJlc3Npb24gJzsnXG4vLyAgIHwgLi4uXG4vLyAgIDtcbi8vIDwvcHJlPlxuLy9cbi8vIDxwPlxuLy8gSW4gYm90aCBjYXNlcyBJIGJlbGlldmUgdGhhdCBubyBjbG9zdXJlIG9wZXJhdGlvbnMgd2lsbCBkaXAgaW50byB0aGUgb3V0ZXJcbi8vIGNvbnRleHQuIEluIHRoZSBmaXJzdCBjYXNlIGN0b3JCb2R5IGluIHRoZSB3b3JzdCBjYXNlIHdpbGwgc3RvcCBhdCB0aGUgJ30nLlxuLy8gSW4gdGhlIDJuZCBjYXNlIGl0IHNob3VsZCBzdG9wIGF0IHRoZSAnOycuIEJvdGggY2FzZXMgc2hvdWxkIHN0YXkgd2l0aGluIHRoZVxuLy8gZW50cnkgcnVsZSBhbmQgbm90IGRpcCBpbnRvIHRoZSBvdXRlciBjb250ZXh0LjwvcD5cbi8vXG4vLyA8cD5cbi8vIDxzdHJvbmc+UFJFRElDQVRFUzwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5cbi8vIFByZWRpY2F0ZXMgYXJlIGFsd2F5cyBldmFsdWF0ZWQgaWYgcHJlc2VudCBpbiBlaXRoZXIgU0xMIG9yIExMIGJvdGguIFNMTCBhbmRcbi8vIExMIHNpbXVsYXRpb24gZGVhbHMgd2l0aCBwcmVkaWNhdGVzIGRpZmZlcmVudGx5LiBTTEwgY29sbGVjdHMgcHJlZGljYXRlcyBhc1xuLy8gaXQgcGVyZm9ybXMgY2xvc3VyZSBvcGVyYXRpb25zIGxpa2UgQU5UTFIgdjMgZGlkLiBJdCBkZWxheXMgcHJlZGljYXRlXG4vLyBldmFsdWF0aW9uIHVudGlsIGl0IHJlYWNoZXMgYW5kIGFjY2VwdCBzdGF0ZS4gVGhpcyBhbGxvd3MgdXMgdG8gY2FjaGUgdGhlIFNMTFxuLy8gQVROIHNpbXVsYXRpb24gd2hlcmVhcywgaWYgd2UgaGFkIGV2YWx1YXRlZCBwcmVkaWNhdGVzIG9uLXRoZS1mbHkgZHVyaW5nXG4vLyBjbG9zdXJlLCB0aGUgREZBIHN0YXRlIGNvbmZpZ3VyYXRpb24gc2V0cyB3b3VsZCBiZSBkaWZmZXJlbnQgYW5kIHdlIGNvdWxkbid0XG4vLyBidWlsZCB1cCBhIHN1aXRhYmxlIERGQS48L3A+XG4vL1xuLy8gPHA+XG4vLyBXaGVuIGJ1aWxkaW5nIGEgREZBIGFjY2VwdCBzdGF0ZSBkdXJpbmcgQVROIHNpbXVsYXRpb24sIHdlIGV2YWx1YXRlIGFueVxuLy8gcHJlZGljYXRlcyBhbmQgcmV0dXJuIHRoZSBzb2xlIHNlbWFudGljYWxseSB2YWxpZCBhbHRlcm5hdGl2ZS4gSWYgdGhlcmUgaXNcbi8vIG1vcmUgdGhhbiAxIGFsdGVybmF0aXZlLCB3ZSByZXBvcnQgYW4gYW1iaWd1aXR5LiBJZiB0aGVyZSBhcmUgMCBhbHRlcm5hdGl2ZXMsXG4vLyB3ZSB0aHJvdyBhbiBleGNlcHRpb24uIEFsdGVybmF0aXZlcyB3aXRob3V0IHByZWRpY2F0ZXMgYWN0IGxpa2UgdGhleSBoYXZlXG4vLyB0cnVlIHByZWRpY2F0ZXMuIFRoZSBzaW1wbGUgd2F5IHRvIHRoaW5rIGFib3V0IGl0IGlzIHRvIHN0cmlwIGF3YXkgYWxsXG4vLyBhbHRlcm5hdGl2ZXMgd2l0aCBmYWxzZSBwcmVkaWNhdGVzIGFuZCBjaG9vc2UgdGhlIG1pbmltdW0gYWx0ZXJuYXRpdmUgdGhhdFxuLy8gcmVtYWlucy48L3A+XG4vL1xuLy8gPHA+XG4vLyBXaGVuIHdlIHN0YXJ0IGluIHRoZSBERkEgYW5kIHJlYWNoIGFuIGFjY2VwdCBzdGF0ZSB0aGF0J3MgcHJlZGljYXRlZCwgd2UgdGVzdFxuLy8gdGhvc2UgYW5kIHJldHVybiB0aGUgbWluaW11bSBzZW1hbnRpY2FsbHkgdmlhYmxlIGFsdGVybmF0aXZlLiBJZiBub1xuLy8gYWx0ZXJuYXRpdmVzIGFyZSB2aWFibGUsIHdlIHRocm93IGFuIGV4Y2VwdGlvbi48L3A+XG4vL1xuLy8gPHA+XG4vLyBEdXJpbmcgZnVsbCBMTCBBVE4gc2ltdWxhdGlvbiwgY2xvc3VyZSBhbHdheXMgZXZhbHVhdGVzIHByZWRpY2F0ZXMgYW5kXG4vLyBvbi10aGUtZmx5LiBUaGlzIGlzIGNydWNpYWwgdG8gcmVkdWNpbmcgdGhlIGNvbmZpZ3VyYXRpb24gc2V0IHNpemUgZHVyaW5nXG4vLyBjbG9zdXJlLiBJdCBoaXRzIGEgbGFuZG1pbmUgd2hlbiBwYXJzaW5nIHdpdGggdGhlIEphdmEgZ3JhbW1hciwgZm9yIGV4YW1wbGUsXG4vLyB3aXRob3V0IHRoaXMgb24tdGhlLWZseSBldmFsdWF0aW9uLjwvcD5cbi8vXG4vLyA8cD5cbi8vIDxzdHJvbmc+U0hBUklORyBERkE8L3N0cm9uZz48L3A+XG4vL1xuLy8gPHA+XG4vLyBBbGwgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIHBhcnNlciBzaGFyZSB0aGUgc2FtZSBkZWNpc2lvbiBERkFzIHRocm91Z2ggYVxuLy8gc3RhdGljIGZpZWxkLiBFYWNoIGluc3RhbmNlIGdldHMgaXRzIG93biBBVE4gc2ltdWxhdG9yIGJ1dCB0aGV5IHNoYXJlIHRoZVxuLy8gc2FtZSB7QGxpbmsgLy9kZWNpc2lvblRvREZBfSBmaWVsZC4gVGhleSBhbHNvIHNoYXJlIGFcbi8vIHtAbGluayBQcmVkaWN0aW9uQ29udGV4dENhY2hlfSBvYmplY3QgdGhhdCBtYWtlcyBzdXJlIHRoYXQgYWxsXG4vLyB7QGxpbmsgUHJlZGljdGlvbkNvbnRleHR9IG9iamVjdHMgYXJlIHNoYXJlZCBhbW9uZyB0aGUgREZBIHN0YXRlcy4gVGhpcyBtYWtlc1xuLy8gYSBiaWcgc2l6ZSBkaWZmZXJlbmNlLjwvcD5cbi8vXG4vLyA8cD5cbi8vIDxzdHJvbmc+VEhSRUFEIFNBRkVUWTwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5cbi8vIFRoZSB7QGxpbmsgUGFyc2VyQVROU2ltdWxhdG9yfSBsb2NrcyBvbiB0aGUge0BsaW5rIC8vZGVjaXNpb25Ub0RGQX0gZmllbGQgd2hlblxuLy8gaXQgYWRkcyBhIG5ldyBERkEgb2JqZWN0IHRvIHRoYXQgYXJyYXkuIHtAbGluayAvL2FkZERGQUVkZ2V9XG4vLyBsb2NrcyBvbiB0aGUgREZBIGZvciB0aGUgY3VycmVudCBkZWNpc2lvbiB3aGVuIHNldHRpbmcgdGhlXG4vLyB7QGxpbmsgREZBU3RhdGUvL2VkZ2VzfSBmaWVsZC4ge0BsaW5rIC8vYWRkREZBU3RhdGV9IGxvY2tzIG9uXG4vLyB0aGUgREZBIGZvciB0aGUgY3VycmVudCBkZWNpc2lvbiB3aGVuIGxvb2tpbmcgdXAgYSBERkEgc3RhdGUgdG8gc2VlIGlmIGl0XG4vLyBhbHJlYWR5IGV4aXN0cy4gV2UgbXVzdCBtYWtlIHN1cmUgdGhhdCBhbGwgcmVxdWVzdHMgdG8gYWRkIERGQSBzdGF0ZXMgdGhhdFxuLy8gYXJlIGVxdWl2YWxlbnQgcmVzdWx0IGluIHRoZSBzYW1lIHNoYXJlZCBERkEgb2JqZWN0LiBUaGlzIGlzIGJlY2F1c2UgbG90cyBvZlxuLy8gdGhyZWFkcyB3aWxsIGJlIHRyeWluZyB0byB1cGRhdGUgdGhlIERGQSBhdCBvbmNlLiBUaGVcbi8vIHtAbGluayAvL2FkZERGQVN0YXRlfSBtZXRob2QgYWxzbyBsb2NrcyBpbnNpZGUgdGhlIERGQSBsb2NrXG4vLyBidXQgdGhpcyB0aW1lIG9uIHRoZSBzaGFyZWQgY29udGV4dCBjYWNoZSB3aGVuIGl0IHJlYnVpbGRzIHRoZVxuLy8gY29uZmlndXJhdGlvbnMnIHtAbGluayBQcmVkaWN0aW9uQ29udGV4dH0gb2JqZWN0cyB1c2luZyBjYWNoZWRcbi8vIHN1YmdyYXBocy9ub2Rlcy4gTm8gb3RoZXIgbG9ja2luZyBvY2N1cnMsIGV2ZW4gZHVyaW5nIERGQSBzaW11bGF0aW9uLiBUaGlzIGlzXG4vLyBzYWZlIGFzIGxvbmcgYXMgd2UgY2FuIGd1YXJhbnRlZSB0aGF0IGFsbCB0aHJlYWRzIHJlZmVyZW5jaW5nXG4vLyB7QGNvZGUgcy5lZGdlW3RdfSBnZXQgdGhlIHNhbWUgcGh5c2ljYWwgdGFyZ2V0IHtAbGluayBERkFTdGF0ZX0sIG9yXG4vLyB7QGNvZGUgbnVsbH0uIE9uY2UgaW50byB0aGUgREZBLCB0aGUgREZBIHNpbXVsYXRpb24gZG9lcyBub3QgcmVmZXJlbmNlIHRoZVxuLy8ge0BsaW5rIERGQS8vc3RhdGVzfSBtYXAuIEl0IGZvbGxvd3MgdGhlIHtAbGluayBERkFTdGF0ZS8vZWRnZXN9IGZpZWxkIHRvIG5ld1xuLy8gdGFyZ2V0cy4gVGhlIERGQSBzaW11bGF0b3Igd2lsbCBlaXRoZXIgZmluZCB7QGxpbmsgREZBU3RhdGUvL2VkZ2VzfSB0byBiZVxuLy8ge0Bjb2RlIG51bGx9LCB0byBiZSBub24te0Bjb2RlIG51bGx9IGFuZCB7QGNvZGUgZGZhLmVkZ2VzW3RdfSBudWxsLCBvclxuLy8ge0Bjb2RlIGRmYS5lZGdlc1t0XX0gdG8gYmUgbm9uLW51bGwuIFRoZVxuLy8ge0BsaW5rIC8vYWRkREZBRWRnZX0gbWV0aG9kIGNvdWxkIGJlIHJhY2luZyB0byBzZXQgdGhlIGZpZWxkXG4vLyBidXQgaW4gZWl0aGVyIGNhc2UgdGhlIERGQSBzaW11bGF0b3Igd29ya3M7IGlmIHtAY29kZSBudWxsfSwgYW5kIHJlcXVlc3RzIEFUTlxuLy8gc2ltdWxhdGlvbi4gSXQgY291bGQgYWxzbyByYWNlIHRyeWluZyB0byBnZXQge0Bjb2RlIGRmYS5lZGdlc1t0XX0sIGJ1dCBlaXRoZXJcbi8vIHdheSBpdCB3aWxsIHdvcmsgYmVjYXVzZSBpdCdzIG5vdCBkb2luZyBhIHRlc3QgYW5kIHNldCBvcGVyYXRpb24uPC9wPlxuLy9cbi8vIDxwPlxuLy8gPHN0cm9uZz5TdGFydGluZyB3aXRoIFNMTCB0aGVuIGZhaWxpbmcgdG8gY29tYmluZWQgU0xML0xMIChUd28tU3RhZ2Vcbi8vIFBhcnNpbmcpPC9zdHJvbmc+PC9wPlxuLy9cbi8vIDxwPlxuLy8gU2FtIHBvaW50ZWQgb3V0IHRoYXQgaWYgU0xMIGRvZXMgbm90IGdpdmUgYSBzeW50YXggZXJyb3IsIHRoZW4gdGhlcmUgaXMgbm9cbi8vIHBvaW50IGluIGRvaW5nIGZ1bGwgTEwsIHdoaWNoIGlzIHNsb3dlci4gV2Ugb25seSBoYXZlIHRvIHRyeSBMTCBpZiB3ZSBnZXQgYVxuLy8gc3ludGF4IGVycm9yLiBGb3IgbWF4aW11bSBzcGVlZCwgU2FtIHN0YXJ0cyB0aGUgcGFyc2VyIHNldCB0byBwdXJlIFNMTFxuLy8gbW9kZSB3aXRoIHRoZSB7QGxpbmsgQmFpbEVycm9yU3RyYXRlZ3l9OjwvcD5cbi8vXG4vLyA8cHJlPlxuLy8gcGFyc2VyLntAbGluayBQYXJzZXIvL2dldEludGVycHJldGVyKCkgZ2V0SW50ZXJwcmV0ZXIoKX0ue0BsaW5rIC8vc2V0UHJlZGljdGlvbk1vZGUgc2V0UHJlZGljdGlvbk1vZGV9e0Bjb2RlICh9e0BsaW5rIFByZWRpY3Rpb25Nb2RlLy9TTEx9e0Bjb2RlICl9O1xuLy8gcGFyc2VyLntAbGluayBQYXJzZXIvL3NldEVycm9ySGFuZGxlciBzZXRFcnJvckhhbmRsZXJ9KG5ldyB7QGxpbmsgQmFpbEVycm9yU3RyYXRlZ3l9KCkpO1xuLy8gPC9wcmU+XG4vL1xuLy8gPHA+XG4vLyBJZiBpdCBkb2VzIG5vdCBnZXQgYSBzeW50YXggZXJyb3IsIHRoZW4gd2UncmUgZG9uZS4gSWYgaXQgZG9lcyBnZXQgYSBzeW50YXhcbi8vIGVycm9yLCB3ZSBuZWVkIHRvIHJldHJ5IHdpdGggdGhlIGNvbWJpbmVkIFNMTC9MTCBzdHJhdGVneS48L3A+XG4vL1xuLy8gPHA+XG4vLyBUaGUgcmVhc29uIHRoaXMgd29ya3MgaXMgYXMgZm9sbG93cy4gSWYgdGhlcmUgYXJlIG5vIFNMTCBjb25mbGljdHMsIHRoZW4gdGhlXG4vLyBncmFtbWFyIGlzIFNMTCAoYXQgbGVhc3QgZm9yIHRoYXQgaW5wdXQgc2V0KS4gSWYgdGhlcmUgaXMgYW4gU0xMIGNvbmZsaWN0LFxuLy8gdGhlIGZ1bGwgTEwgYW5hbHlzaXMgbXVzdCB5aWVsZCBhIHNldCBvZiB2aWFibGUgYWx0ZXJuYXRpdmVzIHdoaWNoIGlzIGFcbi8vIHN1YnNldCBvZiB0aGUgYWx0ZXJuYXRpdmVzIHJlcG9ydGVkIGJ5IFNMTC4gSWYgdGhlIExMIHNldCBpcyBhIHNpbmdsZXRvbixcbi8vIHRoZW4gdGhlIGdyYW1tYXIgaXMgTEwgYnV0IG5vdCBTTEwuIElmIHRoZSBMTCBzZXQgaXMgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgU0xMXG4vLyBzZXQsIHRoZSBkZWNpc2lvbiBpcyBTTEwuIElmIHRoZSBMTCBzZXQgaGFzIHNpemUgJmd0OyAxLCB0aGVuIHRoYXQgZGVjaXNpb25cbi8vIGlzIHRydWx5IGFtYmlndW91cyBvbiB0aGUgY3VycmVudCBpbnB1dC4gSWYgdGhlIExMIHNldCBpcyBzbWFsbGVyLCB0aGVuIHRoZVxuLy8gU0xMIGNvbmZsaWN0IHJlc29sdXRpb24gbWlnaHQgY2hvb3NlIGFuIGFsdGVybmF0aXZlIHRoYXQgdGhlIGZ1bGwgTEwgd291bGRcbi8vIHJ1bGUgb3V0IGFzIGEgcG9zc2liaWxpdHkgYmFzZWQgdXBvbiBiZXR0ZXIgY29udGV4dCBpbmZvcm1hdGlvbi4gSWYgdGhhdCdzXG4vLyB0aGUgY2FzZSwgdGhlbiB0aGUgU0xMIHBhcnNlIHdpbGwgZGVmaW5pdGVseSBnZXQgYW4gZXJyb3IgYmVjYXVzZSB0aGUgZnVsbCBMTFxuLy8gYW5hbHlzaXMgc2F5cyBpdCdzIG5vdCB2aWFibGUuIElmIFNMTCBjb25mbGljdCByZXNvbHV0aW9uIGNob29zZXMgYW5cbi8vIGFsdGVybmF0aXZlIHdpdGhpbiB0aGUgTEwgc2V0LCB0aGVtIGJvdGggU0xMIGFuZCBMTCB3b3VsZCBjaG9vc2UgdGhlIHNhbWVcbi8vIGFsdGVybmF0aXZlIGJlY2F1c2UgdGhleSBib3RoIGNob29zZSB0aGUgbWluaW11bSBvZiBtdWx0aXBsZSBjb25mbGljdGluZ1xuLy8gYWx0ZXJuYXRpdmVzLjwvcD5cbi8vXG4vLyA8cD5cbi8vIExldCdzIHNheSB3ZSBoYXZlIGEgc2V0IG9mIFNMTCBjb25mbGljdGluZyBhbHRlcm5hdGl2ZXMge0Bjb2RlIHsxLCAyLCAzfX0gYW5kXG4vLyBhIHNtYWxsZXIgTEwgc2V0IGNhbGxlZCA8ZW0+czwvZW0+LiBJZiA8ZW0+czwvZW0+IGlzIHtAY29kZSB7MiwgM319LCB0aGVuIFNMTFxuLy8gcGFyc2luZyB3aWxsIGdldCBhbiBlcnJvciBiZWNhdXNlIFNMTCB3aWxsIHB1cnN1ZSBhbHRlcm5hdGl2ZSAxLiBJZlxuLy8gPGVtPnM8L2VtPiBpcyB7QGNvZGUgezEsIDJ9fSBvciB7QGNvZGUgezEsIDN9fSB0aGVuIGJvdGggU0xMIGFuZCBMTCB3aWxsXG4vLyBjaG9vc2UgdGhlIHNhbWUgYWx0ZXJuYXRpdmUgYmVjYXVzZSBhbHRlcm5hdGl2ZSBvbmUgaXMgdGhlIG1pbmltdW0gb2YgZWl0aGVyXG4vLyBzZXQuIElmIDxlbT5zPC9lbT4gaXMge0Bjb2RlIHsyfX0gb3Ige0Bjb2RlIHszfX0gdGhlbiBTTEwgd2lsbCBnZXQgYSBzeW50YXhcbi8vIGVycm9yLiBJZiA8ZW0+czwvZW0+IGlzIHtAY29kZSB7MX19IHRoZW4gU0xMIHdpbGwgc3VjY2VlZC48L3A+XG4vL1xuLy8gPHA+XG4vLyBPZiBjb3Vyc2UsIGlmIHRoZSBpbnB1dCBpcyBpbnZhbGlkLCB0aGVuIHdlIHdpbGwgZ2V0IGFuIGVycm9yIGZvciBzdXJlIGluXG4vLyBib3RoIFNMTCBhbmQgTEwgcGFyc2luZy4gRXJyb25lb3VzIGlucHV0IHdpbGwgdGhlcmVmb3JlIHJlcXVpcmUgMiBwYXNzZXMgb3ZlclxuLy8gdGhlIGlucHV0LjwvcD5cbi8vXG5cbnZhciBVdGlscyA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKTtcbnZhciBTZXQgPSBVdGlscy5TZXQ7XG52YXIgQml0U2V0ID0gVXRpbHMuQml0U2V0O1xudmFyIERvdWJsZURpY3QgPSBVdGlscy5Eb3VibGVEaWN0O1xudmFyIEFUTiA9IHJlcXVpcmUoJy4vQVROJykuQVROO1xudmFyIEFUTlN0YXRlID0gcmVxdWlyZSgnLi9BVE5TdGF0ZScpLkFUTlN0YXRlO1xudmFyIEFUTkNvbmZpZyA9IHJlcXVpcmUoJy4vQVROQ29uZmlnJykuQVROQ29uZmlnO1xudmFyIEFUTkNvbmZpZ1NldCA9IHJlcXVpcmUoJy4vQVROQ29uZmlnU2V0JykuQVROQ29uZmlnU2V0O1xudmFyIFRva2VuID0gcmVxdWlyZSgnLi8uLi9Ub2tlbicpLlRva2VuO1xudmFyIERGQVN0YXRlID0gcmVxdWlyZSgnLi8uLi9kZmEvREZBU3RhdGUnKS5ERkFTdGF0ZTtcbnZhciBQcmVkUHJlZGljdGlvbiA9IHJlcXVpcmUoJy4vLi4vZGZhL0RGQVN0YXRlJykuUHJlZFByZWRpY3Rpb247XG52YXIgQVROU2ltdWxhdG9yID0gcmVxdWlyZSgnLi9BVE5TaW11bGF0b3InKS5BVE5TaW11bGF0b3I7XG52YXIgUHJlZGljdGlvbk1vZGUgPSByZXF1aXJlKCcuL1ByZWRpY3Rpb25Nb2RlJykuUHJlZGljdGlvbk1vZGU7XG52YXIgUnVsZUNvbnRleHQgPSByZXF1aXJlKCcuLy4uL1J1bGVDb250ZXh0JykuUnVsZUNvbnRleHQ7XG52YXIgUGFyc2VyUnVsZUNvbnRleHQgPSByZXF1aXJlKCcuLy4uL1BhcnNlclJ1bGVDb250ZXh0JykuUGFyc2VyUnVsZUNvbnRleHQ7XG52YXIgU2VtYW50aWNDb250ZXh0ID0gcmVxdWlyZSgnLi9TZW1hbnRpY0NvbnRleHQnKS5TZW1hbnRpY0NvbnRleHQ7XG52YXIgU3Rhckxvb3BFbnRyeVN0YXRlID0gcmVxdWlyZSgnLi9BVE5TdGF0ZScpLlN0YXJMb29wRW50cnlTdGF0ZTtcbnZhciBSdWxlU3RvcFN0YXRlID0gcmVxdWlyZSgnLi9BVE5TdGF0ZScpLlJ1bGVTdG9wU3RhdGU7XG52YXIgUHJlZGljdGlvbkNvbnRleHQgPSByZXF1aXJlKCcuLy4uL1ByZWRpY3Rpb25Db250ZXh0JykuUHJlZGljdGlvbkNvbnRleHQ7XG52YXIgSW50ZXJ2YWwgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG52YXIgVHJhbnNpdGlvbnMgPSByZXF1aXJlKCcuL1RyYW5zaXRpb24nKTtcbnZhciBUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuVHJhbnNpdGlvbjtcbnZhciBTZXRUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuU2V0VHJhbnNpdGlvbjtcbnZhciBOb3RTZXRUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuTm90U2V0VHJhbnNpdGlvbjtcbnZhciBSdWxlVHJhbnNpdGlvbiA9IFRyYW5zaXRpb25zLlJ1bGVUcmFuc2l0aW9uO1xudmFyIEFjdGlvblRyYW5zaXRpb24gPSBUcmFuc2l0aW9ucy5BY3Rpb25UcmFuc2l0aW9uO1xudmFyIE5vVmlhYmxlQWx0RXhjZXB0aW9uID0gcmVxdWlyZSgnLi8uLi9lcnJvci9FcnJvcnMnKS5Ob1ZpYWJsZUFsdEV4Y2VwdGlvbjtcblxudmFyIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0ID0gcmVxdWlyZSgnLi8uLi9QcmVkaWN0aW9uQ29udGV4dCcpLlNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0O1xudmFyIHByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0ID0gcmVxdWlyZSgnLi8uLi9QcmVkaWN0aW9uQ29udGV4dCcpLnByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0O1xuXG5mdW5jdGlvbiBQYXJzZXJBVE5TaW11bGF0b3IocGFyc2VyLCBhdG4sIGRlY2lzaW9uVG9ERkEsIHNoYXJlZENvbnRleHRDYWNoZSkge1xuXHRBVE5TaW11bGF0b3IuY2FsbCh0aGlzLCBhdG4sIHNoYXJlZENvbnRleHRDYWNoZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5kZWNpc2lvblRvREZBID0gZGVjaXNpb25Ub0RGQTtcbiAgICAvLyBTTEwsIExMLCBvciBMTCArIGV4YWN0IGFtYmlnIGRldGVjdGlvbj8vL1xuICAgIHRoaXMucHJlZGljdGlvbk1vZGUgPSBQcmVkaWN0aW9uTW9kZS5MTDtcbiAgICAvLyBMQU1FIGdsb2JhbHMgdG8gYXZvaWQgcGFyYW1ldGVycyEhISEhIEkgbmVlZCB0aGVzZSBkb3duIGRlZXAgaW4gcHJlZFRyYW5zaXRpb25cbiAgICB0aGlzLl9pbnB1dCA9IG51bGw7XG4gICAgdGhpcy5fc3RhcnRJbmRleCA9IDA7XG4gICAgdGhpcy5fb3V0ZXJDb250ZXh0ID0gbnVsbDtcbiAgICB0aGlzLl9kZmEgPSBudWxsO1xuICAgIC8vIEVhY2ggcHJlZGljdGlvbiBvcGVyYXRpb24gdXNlcyBhIGNhY2hlIGZvciBtZXJnZSBvZiBwcmVkaWN0aW9uIGNvbnRleHRzLlxuICAgIC8vICBEb24ndCBrZWVwIGFyb3VuZCBhcyBpdCB3YXN0ZXMgaHVnZSBhbW91bnRzIG9mIG1lbW9yeS4gRG91YmxlS2V5TWFwXG4gICAgLy8gIGlzbid0IHN5bmNocm9uaXplZCBidXQgd2UncmUgb2sgc2luY2UgdHdvIHRocmVhZHMgc2hvdWxkbid0IHJldXNlIHNhbWVcbiAgICAvLyAgcGFyc2VyL2F0bnNpbSBvYmplY3QgYmVjYXVzZSBpdCBjYW4gb25seSBoYW5kbGUgb25lIGlucHV0IGF0IGEgdGltZS5cbiAgICAvLyAgVGhpcyBtYXBzIGdyYXBocyBhIGFuZCBiIHRvIG1lcmdlZCByZXN1bHQgYy4gKGEsYikmcmFycjtjLiBXZSBjYW4gYXZvaWRcbiAgICAvLyAgdGhlIG1lcmdlIGlmIHdlIGV2ZXIgc2VlIGEgYW5kIGIgYWdhaW4uICBOb3RlIHRoYXQgKGIsYSkmcmFycjtjIHNob3VsZFxuICAgIC8vICBhbHNvIGJlIGV4YW1pbmVkIGR1cmluZyBjYWNoZSBsb29rdXAuXG4gICAgLy9cbiAgICB0aGlzLm1lcmdlQ2FjaGUgPSBudWxsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBVE5TaW11bGF0b3IucHJvdG90eXBlKTtcblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJzZXJBVE5TaW11bGF0b3I7XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZGVidWcgPSBmYWxzZTtcblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZGVidWdfY2xvc3VyZSA9IGZhbHNlO1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5kZWJ1Z19hZGQgPSBmYWxzZTtcblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZGVidWdfbGlzdF9hdG5fZGVjaXNpb25zID0gZmFsc2U7XG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmRmYV9kZWJ1ZyA9IGZhbHNlO1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5yZXRyeV9kZWJ1ZyA9IGZhbHNlO1xuXG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuYWRhcHRpdmVQcmVkaWN0ID0gZnVuY3Rpb24oaW5wdXQsIGRlY2lzaW9uLCBvdXRlckNvbnRleHQpIHtcbiAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLmRlYnVnX2xpc3RfYXRuX2RlY2lzaW9ucykge1xuICAgICAgICBjb25zb2xlLmxvZyhcImFkYXB0aXZlUHJlZGljdCBkZWNpc2lvbiBcIiArIGRlY2lzaW9uICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBleGVjIExBKDEpPT1cIiArIHRoaXMuZ2V0TG9va2FoZWFkTmFtZShpbnB1dCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGxpbmUgXCIgKyBpbnB1dC5MVCgxKS5saW5lICsgXCI6XCIgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LkxUKDEpLmNvbHVtbik7XG4gICAgfVxuICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgdGhpcy5fc3RhcnRJbmRleCA9IGlucHV0LmluZGV4O1xuICAgIHRoaXMuX291dGVyQ29udGV4dCA9IG91dGVyQ29udGV4dDtcblxuICAgIHZhciBkZmEgPSB0aGlzLmRlY2lzaW9uVG9ERkFbZGVjaXNpb25dO1xuICAgIHRoaXMuX2RmYSA9IGRmYTtcbiAgICB2YXIgbSA9IGlucHV0Lm1hcmsoKTtcbiAgICB2YXIgaW5kZXggPSBpbnB1dC5pbmRleDtcblxuICAgIC8vIE5vdyB3ZSBhcmUgY2VydGFpbiB0byBoYXZlIGEgc3BlY2lmaWMgZGVjaXNpb24ncyBERkFcbiAgICAvLyBCdXQsIGRvIHdlIHN0aWxsIG5lZWQgYW4gaW5pdGlhbCBzdGF0ZT9cbiAgICB0cnkge1xuICAgICAgICB2YXIgczA7XG4gICAgICAgIGlmIChkZmEucHJlY2VkZW5jZURmYSkge1xuICAgICAgICAgICAgLy8gdGhlIHN0YXJ0IHN0YXRlIGZvciBhIHByZWNlZGVuY2UgREZBIGRlcGVuZHMgb24gdGhlIGN1cnJlbnRcbiAgICAgICAgICAgIC8vIHBhcnNlciBwcmVjZWRlbmNlLCBhbmQgaXMgcHJvdmlkZWQgYnkgYSBERkEgbWV0aG9kLlxuICAgICAgICAgICAgczAgPSBkZmEuZ2V0UHJlY2VkZW5jZVN0YXJ0U3RhdGUodGhpcy5wYXJzZXIuZ2V0UHJlY2VkZW5jZSgpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHRoZSBzdGFydCBzdGF0ZSBmb3IgYSBcInJlZ3VsYXJcIiBERkEgaXMganVzdCBzMFxuICAgICAgICAgICAgczAgPSBkZmEuczA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHMwPT09bnVsbCkge1xuICAgICAgICAgICAgaWYgKG91dGVyQ29udGV4dD09PW51bGwpIHtcbiAgICAgICAgICAgICAgICBvdXRlckNvbnRleHQgPSBSdWxlQ29udGV4dC5FTVBUWTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnIHx8IHRoaXMuZGVidWdfbGlzdF9hdG5fZGVjaXNpb25zKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJwcmVkaWN0QVROIGRlY2lzaW9uIFwiICsgZGZhLmRlY2lzaW9uICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgZXhlYyBMQSgxKT09XCIgKyB0aGlzLmdldExvb2thaGVhZE5hbWUoaW5wdXQpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIsIG91dGVyQ29udGV4dD1cIiArIG91dGVyQ29udGV4dC50b1N0cmluZyh0aGlzLnBhcnNlci5ydWxlTmFtZXMpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIGZ1bGxDdHggPSBmYWxzZTtcbiAgICAgICAgICAgIHZhciBzMF9jbG9zdXJlID0gdGhpcy5jb21wdXRlU3RhcnRTdGF0ZShkZmEuYXRuU3RhcnRTdGF0ZSwgUnVsZUNvbnRleHQuRU1QVFksIGZ1bGxDdHgpO1xuXG4gICAgICAgICAgICBpZiggZGZhLnByZWNlZGVuY2VEZmEpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgcHJlY2VkZW5jZSBERkEsIHdlIHVzZSBhcHBseVByZWNlZGVuY2VGaWx0ZXJcbiAgICAgICAgICAgICAgICAvLyB0byBjb252ZXJ0IHRoZSBjb21wdXRlZCBzdGFydCBzdGF0ZSB0byBhIHByZWNlZGVuY2Ugc3RhcnRcbiAgICAgICAgICAgICAgICAvLyBzdGF0ZS4gV2UgdGhlbiB1c2UgREZBLnNldFByZWNlZGVuY2VTdGFydFN0YXRlIHRvIHNldCB0aGVcbiAgICAgICAgICAgICAgICAvLyBhcHByb3ByaWF0ZSBzdGFydCBzdGF0ZSBmb3IgdGhlIHByZWNlZGVuY2UgbGV2ZWwgcmF0aGVyXG4gICAgICAgICAgICAgICAgLy8gdGhhbiBzaW1wbHkgc2V0dGluZyBERkEuczAuXG4gICAgICAgICAgICAgICAgLy9cbiAgICAgICAgICAgICAgICBkZmEuczAuY29uZmlncyA9IHMwX2Nsb3N1cmU7IC8vIG5vdCB1c2VkIGZvciBwcmVkaWN0aW9uIGJ1dCB1c2VmdWwgdG8ga25vdyBzdGFydCBjb25maWdzIGFueXdheVxuICAgICAgICAgICAgICAgIHMwX2Nsb3N1cmUgPSB0aGlzLmFwcGx5UHJlY2VkZW5jZUZpbHRlcihzMF9jbG9zdXJlKTtcbiAgICAgICAgICAgICAgICBzMCA9IHRoaXMuYWRkREZBU3RhdGUoZGZhLCBuZXcgREZBU3RhdGUobnVsbCwgczBfY2xvc3VyZSkpO1xuICAgICAgICAgICAgICAgIGRmYS5zZXRQcmVjZWRlbmNlU3RhcnRTdGF0ZSh0aGlzLnBhcnNlci5nZXRQcmVjZWRlbmNlKCksIHMwKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgczAgPSB0aGlzLmFkZERGQVN0YXRlKGRmYSwgbmV3IERGQVN0YXRlKG51bGwsIHMwX2Nsb3N1cmUpKTtcbiAgICAgICAgICAgICAgICBkZmEuczAgPSBzMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgYWx0ID0gdGhpcy5leGVjQVROKGRmYSwgczAsIGlucHV0LCBpbmRleCwgb3V0ZXJDb250ZXh0KTtcbiAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiREZBIGFmdGVyIHByZWRpY3RBVE46IFwiICsgZGZhLnRvU3RyaW5nKHRoaXMucGFyc2VyLmxpdGVyYWxOYW1lcykpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbHQ7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5fZGZhID0gbnVsbDtcbiAgICAgICAgdGhpcy5tZXJnZUNhY2hlID0gbnVsbDsgLy8gd2FjayBjYWNoZSBhZnRlciBlYWNoIHByZWRpY3Rpb25cbiAgICAgICAgaW5wdXQuc2VlayhpbmRleCk7XG4gICAgICAgIGlucHV0LnJlbGVhc2UobSk7XG4gICAgfVxufTtcbi8vIFBlcmZvcm1zIEFUTiBzaW11bGF0aW9uIHRvIGNvbXB1dGUgYSBwcmVkaWN0ZWQgYWx0ZXJuYXRpdmUgYmFzZWRcbi8vICB1cG9uIHRoZSByZW1haW5pbmcgaW5wdXQsIGJ1dCBhbHNvIHVwZGF0ZXMgdGhlIERGQSBjYWNoZSB0byBhdm9pZFxuLy8gIGhhdmluZyB0byB0cmF2ZXJzZSB0aGUgQVROIGFnYWluIGZvciB0aGUgc2FtZSBpbnB1dCBzZXF1ZW5jZS5cblxuLy8gVGhlcmUgYXJlIHNvbWUga2V5IGNvbmRpdGlvbnMgd2UncmUgbG9va2luZyBmb3IgYWZ0ZXIgY29tcHV0aW5nIGEgbmV3XG4vLyBzZXQgb2YgQVROIGNvbmZpZ3MgKHByb3Bvc2VkIERGQSBzdGF0ZSk6XG4gICAgICAvLyBpZiB0aGUgc2V0IGlzIGVtcHR5LCB0aGVyZSBpcyBubyB2aWFibGUgYWx0ZXJuYXRpdmUgZm9yIGN1cnJlbnQgc3ltYm9sXG4gICAgICAvLyBkb2VzIHRoZSBzdGF0ZSB1bmlxdWVseSBwcmVkaWN0IGFuIGFsdGVybmF0aXZlP1xuICAgICAgLy8gZG9lcyB0aGUgc3RhdGUgaGF2ZSBhIGNvbmZsaWN0IHRoYXQgd291bGQgcHJldmVudCB1cyBmcm9tXG4gICAgICAvLyAgIHB1dHRpbmcgaXQgb24gdGhlIHdvcmsgbGlzdD9cblxuLy8gV2UgYWxzbyBoYXZlIHNvbWUga2V5IG9wZXJhdGlvbnMgdG8gZG86XG4gICAgICAvLyBhZGQgYW4gZWRnZSBmcm9tIHByZXZpb3VzIERGQSBzdGF0ZSB0byBwb3RlbnRpYWxseSBuZXcgREZBIHN0YXRlLCBELFxuICAgICAgLy8gICB1cG9uIGN1cnJlbnQgc3ltYm9sIGJ1dCBvbmx5IGlmIGFkZGluZyB0byB3b3JrIGxpc3QsIHdoaWNoIG1lYW5zIGluIGFsbFxuICAgICAgLy8gICBjYXNlcyBleGNlcHQgbm8gdmlhYmxlIGFsdGVybmF0aXZlIChhbmQgcG9zc2libHkgbm9uLWdyZWVkeSBkZWNpc2lvbnM/KVxuICAgICAgLy8gY29sbGVjdGluZyBwcmVkaWNhdGVzIGFuZCBhZGRpbmcgc2VtYW50aWMgY29udGV4dCB0byBERkEgYWNjZXB0IHN0YXRlc1xuICAgICAgLy8gYWRkaW5nIHJ1bGUgY29udGV4dCB0byBjb250ZXh0LXNlbnNpdGl2ZSBERkEgYWNjZXB0IHN0YXRlc1xuICAgICAgLy8gY29uc3VtaW5nIGFuIGlucHV0IHN5bWJvbFxuICAgICAgLy8gcmVwb3J0aW5nIGEgY29uZmxpY3RcbiAgICAgIC8vIHJlcG9ydGluZyBhbiBhbWJpZ3VpdHlcbiAgICAgIC8vIHJlcG9ydGluZyBhIGNvbnRleHQgc2Vuc2l0aXZpdHlcbiAgICAgIC8vIHJlcG9ydGluZyBpbnN1ZmZpY2llbnQgcHJlZGljYXRlc1xuXG4vLyBjb3ZlciB0aGVzZSBjYXNlczpcbi8vICAgIGRlYWQgZW5kXG4vLyAgICBzaW5nbGUgYWx0XG4vLyAgICBzaW5nbGUgYWx0ICsgcHJlZHNcbi8vICAgIGNvbmZsaWN0XG4vLyAgICBjb25mbGljdCArIHByZWRzXG4vL1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5leGVjQVROID0gZnVuY3Rpb24oZGZhLCBzMCwgaW5wdXQsIHN0YXJ0SW5kZXgsIG91dGVyQ29udGV4dCApIHtcbiAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLmRlYnVnX2xpc3RfYXRuX2RlY2lzaW9ucykge1xuICAgICAgICBjb25zb2xlLmxvZyhcImV4ZWNBVE4gZGVjaXNpb24gXCIgKyBkZmEuZGVjaXNpb24gK1xuICAgICAgICAgICAgICAgIFwiIGV4ZWMgTEEoMSk9PVwiICsgdGhpcy5nZXRMb29rYWhlYWROYW1lKGlucHV0KSArXG4gICAgICAgICAgICAgICAgXCIgbGluZSBcIiArIGlucHV0LkxUKDEpLmxpbmUgKyBcIjpcIiArIGlucHV0LkxUKDEpLmNvbHVtbik7XG4gICAgfVxuICAgIHZhciBhbHQ7XG4gICAgdmFyIHByZXZpb3VzRCA9IHMwO1xuXG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJzMCA9IFwiICsgczApO1xuICAgIH1cbiAgICB2YXIgdCA9IGlucHV0LkxBKDEpO1xuICAgIHdoaWxlKHRydWUpIHsgLy8gd2hpbGUgbW9yZSB3b3JrXG4gICAgICAgIHZhciBEID0gdGhpcy5nZXRFeGlzdGluZ1RhcmdldFN0YXRlKHByZXZpb3VzRCwgdCk7XG4gICAgICAgIGlmKEQ9PT1udWxsKSB7XG4gICAgICAgICAgICBEID0gdGhpcy5jb21wdXRlVGFyZ2V0U3RhdGUoZGZhLCBwcmV2aW91c0QsIHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmKEQ9PT1BVE5TaW11bGF0b3IuRVJST1IpIHtcbiAgICAgICAgICAgIC8vIGlmIGFueSBjb25maWdzIGluIHByZXZpb3VzIGRpcHBlZCBpbnRvIG91dGVyIGNvbnRleHQsIHRoYXRcbiAgICAgICAgICAgIC8vIG1lYW5zIHRoYXQgaW5wdXQgdXAgdG8gdCBhY3R1YWxseSBmaW5pc2hlZCBlbnRyeSBydWxlXG4gICAgICAgICAgICAvLyBhdCBsZWFzdCBmb3IgU0xMIGRlY2lzaW9uLiBGdWxsIExMIGRvZXNuJ3QgZGlwIGludG8gb3V0ZXJcbiAgICAgICAgICAgIC8vIHNvIGRvbid0IG5lZWQgc3BlY2lhbCBjYXNlLlxuICAgICAgICAgICAgLy8gV2Ugd2lsbCBnZXQgYW4gZXJyb3Igbm8gbWF0dGVyIHdoYXQgc28gZGVsYXkgdW50aWwgYWZ0ZXJcbiAgICAgICAgICAgIC8vIGRlY2lzaW9uOyBiZXR0ZXIgZXJyb3IgbWVzc2FnZS4gQWxzbywgbm8gcmVhY2hhYmxlIHRhcmdldFxuICAgICAgICAgICAgLy8gQVROIHN0YXRlcyBpbiBTTEwgaW1wbGllcyBMTCB3aWxsIGFsc28gZ2V0IG5vd2hlcmUuXG4gICAgICAgICAgICAvLyBJZiBjb25mbGljdCBpbiBzdGF0ZXMgdGhhdCBkaXAgb3V0LCBjaG9vc2UgbWluIHNpbmNlIHdlXG4gICAgICAgICAgICAvLyB3aWxsIGdldCBlcnJvciBubyBtYXR0ZXIgd2hhdC5cbiAgICAgICAgICAgIHZhciBlID0gdGhpcy5ub1ZpYWJsZUFsdChpbnB1dCwgb3V0ZXJDb250ZXh0LCBwcmV2aW91c0QuY29uZmlncywgc3RhcnRJbmRleCk7XG4gICAgICAgICAgICBpbnB1dC5zZWVrKHN0YXJ0SW5kZXgpO1xuICAgICAgICAgICAgYWx0ID0gdGhpcy5nZXRTeW5WYWxpZE9yU2VtSW52YWxpZEFsdFRoYXRGaW5pc2hlZERlY2lzaW9uRW50cnlSdWxlKHByZXZpb3VzRC5jb25maWdzLCBvdXRlckNvbnRleHQpO1xuICAgICAgICAgICAgaWYoYWx0IT09QVROLklOVkFMSURfQUxUX05VTUJFUikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhbHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYoRC5yZXF1aXJlc0Z1bGxDb250ZXh0ICYmIHRoaXMucHJlZGljdGlvbk1vZGUgIT09IFByZWRpY3Rpb25Nb2RlLlNMTCkge1xuICAgICAgICAgICAgLy8gSUYgUFJFRFMsIE1JR0hUIFJFU09MVkUgVE8gU0lOR0xFIEFMVCA9PiBTTEwgKG9yIHN5bnRheCBlcnJvcilcbiAgICAgICAgICAgIHZhciBjb25mbGljdGluZ0FsdHMgPSBudWxsO1xuICAgICAgICAgICAgaWYgKEQucHJlZGljYXRlcyE9PW51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkRGQSBzdGF0ZSBoYXMgcHJlZHMgaW4gREZBIHNpbSBMTCBmYWlsb3ZlclwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGNvbmZsaWN0SW5kZXggPSBpbnB1dC5pbmRleDtcbiAgICAgICAgICAgICAgICBpZihjb25mbGljdEluZGV4ICE9PSBzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGlucHV0LnNlZWsoc3RhcnRJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbmZsaWN0aW5nQWx0cyA9IHRoaXMuZXZhbFNlbWFudGljQ29udGV4dChELnByZWRpY2F0ZXMsIG91dGVyQ29udGV4dCwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZsaWN0aW5nQWx0cy5sZW5ndGg9PT0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRnVsbCBMTCBhdm9pZGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25mbGljdGluZ0FsdHMubWluVmFsdWUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbmZsaWN0SW5kZXggIT09IHN0YXJ0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVzdG9yZSB0aGUgaW5kZXggc28gcmVwb3J0aW5nIHRoZSBmYWxsYmFjayB0byBmdWxsXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnRleHQgb2NjdXJzIHdpdGggdGhlIGluZGV4IGF0IHRoZSBjb3JyZWN0IHNwb3RcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQuc2Vlayhjb25mbGljdEluZGV4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5kZmFfZGVidWcpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImN0eCBzZW5zaXRpdmUgc3RhdGUgXCIgKyBvdXRlckNvbnRleHQgK1wiIGluIFwiICsgRCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgZnVsbEN0eCA9IHRydWU7XG4gICAgICAgICAgICB2YXIgczBfY2xvc3VyZSA9IHRoaXMuY29tcHV0ZVN0YXJ0U3RhdGUoZGZhLmF0blN0YXJ0U3RhdGUsIG91dGVyQ29udGV4dCwgZnVsbEN0eCk7XG4gICAgICAgICAgICB0aGlzLnJlcG9ydEF0dGVtcHRpbmdGdWxsQ29udGV4dChkZmEsIGNvbmZsaWN0aW5nQWx0cywgRC5jb25maWdzLCBzdGFydEluZGV4LCBpbnB1dC5pbmRleCk7XG4gICAgICAgICAgICBhbHQgPSB0aGlzLmV4ZWNBVE5XaXRoRnVsbENvbnRleHQoZGZhLCBELCBzMF9jbG9zdXJlLCBpbnB1dCwgc3RhcnRJbmRleCwgb3V0ZXJDb250ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiBhbHQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKEQuaXNBY2NlcHRTdGF0ZSkge1xuICAgICAgICAgICAgaWYgKEQucHJlZGljYXRlcz09PW51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gRC5wcmVkaWN0aW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHN0b3BJbmRleCA9IGlucHV0LmluZGV4O1xuICAgICAgICAgICAgaW5wdXQuc2VlayhzdGFydEluZGV4KTtcbiAgICAgICAgICAgIHZhciBhbHRzID0gdGhpcy5ldmFsU2VtYW50aWNDb250ZXh0KEQucHJlZGljYXRlcywgb3V0ZXJDb250ZXh0LCB0cnVlKTtcbiAgICAgICAgICAgIGlmIChhbHRzLmxlbmd0aD09PTApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyB0aGlzLm5vVmlhYmxlQWx0KGlucHV0LCBvdXRlckNvbnRleHQsIEQuY29uZmlncywgc3RhcnRJbmRleCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFsdHMubGVuZ3RoPT09MSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhbHRzLm1pblZhbHVlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHJlcG9ydCBhbWJpZ3VpdHkgYWZ0ZXIgcHJlZGljYXRlIGV2YWx1YXRpb24gdG8gbWFrZSBzdXJlIHRoZSBjb3JyZWN0IHNldCBvZiBhbWJpZyBhbHRzIGlzIHJlcG9ydGVkLlxuICAgICAgICAgICAgICAgIHRoaXMucmVwb3J0QW1iaWd1aXR5KGRmYSwgRCwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBmYWxzZSwgYWx0cywgRC5jb25maWdzKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWx0cy5taW5WYWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHByZXZpb3VzRCA9IEQ7XG5cbiAgICAgICAgaWYgKHQgIT09IFRva2VuLkVPRikge1xuICAgICAgICAgICAgaW5wdXQuY29uc3VtZSgpO1xuICAgICAgICAgICAgdCA9IGlucHV0LkxBKDEpO1xuICAgICAgICB9XG4gICAgfVxufTtcbi8vXG4vLyBHZXQgYW4gZXhpc3RpbmcgdGFyZ2V0IHN0YXRlIGZvciBhbiBlZGdlIGluIHRoZSBERkEuIElmIHRoZSB0YXJnZXQgc3RhdGVcbi8vIGZvciB0aGUgZWRnZSBoYXMgbm90IHlldCBiZWVuIGNvbXB1dGVkIG9yIGlzIG90aGVyd2lzZSBub3QgYXZhaWxhYmxlLFxuLy8gdGhpcyBtZXRob2QgcmV0dXJucyB7QGNvZGUgbnVsbH0uXG4vL1xuLy8gQHBhcmFtIHByZXZpb3VzRCBUaGUgY3VycmVudCBERkEgc3RhdGVcbi8vIEBwYXJhbSB0IFRoZSBuZXh0IGlucHV0IHN5bWJvbFxuLy8gQHJldHVybiBUaGUgZXhpc3RpbmcgdGFyZ2V0IERGQSBzdGF0ZSBmb3IgdGhlIGdpdmVuIGlucHV0IHN5bWJvbFxuLy8ge0Bjb2RlIHR9LCBvciB7QGNvZGUgbnVsbH0gaWYgdGhlIHRhcmdldCBzdGF0ZSBmb3IgdGhpcyBlZGdlIGlzIG5vdFxuLy8gYWxyZWFkeSBjYWNoZWRcbi8vXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmdldEV4aXN0aW5nVGFyZ2V0U3RhdGUgPSBmdW5jdGlvbihwcmV2aW91c0QsIHQpIHtcbiAgICB2YXIgZWRnZXMgPSBwcmV2aW91c0QuZWRnZXM7XG4gICAgaWYgKGVkZ2VzPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZWRnZXNbdCArIDFdIHx8IG51bGw7XG4gICAgfVxufTtcbi8vXG4vLyBDb21wdXRlIGEgdGFyZ2V0IHN0YXRlIGZvciBhbiBlZGdlIGluIHRoZSBERkEsIGFuZCBhdHRlbXB0IHRvIGFkZCB0aGVcbi8vIGNvbXB1dGVkIHN0YXRlIGFuZCBjb3JyZXNwb25kaW5nIGVkZ2UgdG8gdGhlIERGQS5cbi8vXG4vLyBAcGFyYW0gZGZhIFRoZSBERkFcbi8vIEBwYXJhbSBwcmV2aW91c0QgVGhlIGN1cnJlbnQgREZBIHN0YXRlXG4vLyBAcGFyYW0gdCBUaGUgbmV4dCBpbnB1dCBzeW1ib2xcbi8vXG4vLyBAcmV0dXJuIFRoZSBjb21wdXRlZCB0YXJnZXQgREZBIHN0YXRlIGZvciB0aGUgZ2l2ZW4gaW5wdXQgc3ltYm9sXG4vLyB7QGNvZGUgdH0uIElmIHtAY29kZSB0fSBkb2VzIG5vdCBsZWFkIHRvIGEgdmFsaWQgREZBIHN0YXRlLCB0aGlzIG1ldGhvZFxuLy8gcmV0dXJucyB7QGxpbmsgLy9FUlJPUn0uXG4vL1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jb21wdXRlVGFyZ2V0U3RhdGUgPSBmdW5jdGlvbihkZmEsIHByZXZpb3VzRCwgdCkge1xuICAgdmFyIHJlYWNoID0gdGhpcy5jb21wdXRlUmVhY2hTZXQocHJldmlvdXNELmNvbmZpZ3MsIHQsIGZhbHNlKTtcbiAgICBpZihyZWFjaD09PW51bGwpIHtcbiAgICAgICAgdGhpcy5hZGRERkFFZGdlKGRmYSwgcHJldmlvdXNELCB0LCBBVE5TaW11bGF0b3IuRVJST1IpO1xuICAgICAgICByZXR1cm4gQVROU2ltdWxhdG9yLkVSUk9SO1xuICAgIH1cbiAgICAvLyBjcmVhdGUgbmV3IHRhcmdldCBzdGF0ZTsgd2UnbGwgYWRkIHRvIERGQSBhZnRlciBpdCdzIGNvbXBsZXRlXG4gICAgdmFyIEQgPSBuZXcgREZBU3RhdGUobnVsbCwgcmVhY2gpO1xuXG4gICAgdmFyIHByZWRpY3RlZEFsdCA9IHRoaXMuZ2V0VW5pcXVlQWx0KHJlYWNoKTtcblxuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIHZhciBhbHRTdWJTZXRzID0gUHJlZGljdGlvbk1vZGUuZ2V0Q29uZmxpY3RpbmdBbHRTdWJzZXRzKHJlYWNoKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJTTEwgYWx0U3ViU2V0cz1cIiArIFV0aWxzLmFycmF5VG9TdHJpbmcoYWx0U3ViU2V0cykgK1xuICAgICAgICAgICAgICAgICAgICBcIiwgcHJldmlvdXM9XCIgKyBwcmV2aW91c0QuY29uZmlncyArXG4gICAgICAgICAgICAgICAgICAgIFwiLCBjb25maWdzPVwiICsgcmVhY2ggK1xuICAgICAgICAgICAgICAgICAgICBcIiwgcHJlZGljdD1cIiArIHByZWRpY3RlZEFsdCArXG4gICAgICAgICAgICAgICAgICAgIFwiLCBhbGxTdWJzZXRzQ29uZmxpY3Q9XCIgK1xuICAgICAgICAgICAgICAgICAgICBQcmVkaWN0aW9uTW9kZS5hbGxTdWJzZXRzQ29uZmxpY3QoYWx0U3ViU2V0cykgKyBcIiwgY29uZmxpY3RpbmdBbHRzPVwiICtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRDb25mbGljdGluZ0FsdHMocmVhY2gpKTtcbiAgICB9XG4gICAgaWYgKHByZWRpY3RlZEFsdCE9PUFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgLy8gTk8gQ09ORkxJQ1QsIFVOSVFVRUxZIFBSRURJQ1RFRCBBTFRcbiAgICAgICAgRC5pc0FjY2VwdFN0YXRlID0gdHJ1ZTtcbiAgICAgICAgRC5jb25maWdzLnVuaXF1ZUFsdCA9IHByZWRpY3RlZEFsdDtcbiAgICAgICAgRC5wcmVkaWN0aW9uID0gcHJlZGljdGVkQWx0O1xuICAgIH0gZWxzZSBpZiAoUHJlZGljdGlvbk1vZGUuaGFzU0xMQ29uZmxpY3RUZXJtaW5hdGluZ1ByZWRpY3Rpb24odGhpcy5wcmVkaWN0aW9uTW9kZSwgcmVhY2gpKSB7XG4gICAgICAgIC8vIE1PUkUgVEhBTiBPTkUgVklBQkxFIEFMVEVSTkFUSVZFXG4gICAgICAgIEQuY29uZmlncy5jb25mbGljdGluZ0FsdHMgPSB0aGlzLmdldENvbmZsaWN0aW5nQWx0cyhyZWFjaCk7XG4gICAgICAgIEQucmVxdWlyZXNGdWxsQ29udGV4dCA9IHRydWU7XG4gICAgICAgIC8vIGluIFNMTC1vbmx5IG1vZGUsIHdlIHdpbGwgc3RvcCBhdCB0aGlzIHN0YXRlIGFuZCByZXR1cm4gdGhlIG1pbmltdW0gYWx0XG4gICAgICAgIEQuaXNBY2NlcHRTdGF0ZSA9IHRydWU7XG4gICAgICAgIEQucHJlZGljdGlvbiA9IEQuY29uZmlncy5jb25mbGljdGluZ0FsdHMubWluVmFsdWUoKTtcbiAgICB9XG4gICAgaWYgKEQuaXNBY2NlcHRTdGF0ZSAmJiBELmNvbmZpZ3MuaGFzU2VtYW50aWNDb250ZXh0KSB7XG4gICAgICAgIHRoaXMucHJlZGljYXRlREZBU3RhdGUoRCwgdGhpcy5hdG4uZ2V0RGVjaXNpb25TdGF0ZShkZmEuZGVjaXNpb24pKTtcbiAgICAgICAgaWYoIEQucHJlZGljYXRlcyE9PW51bGwpIHtcbiAgICAgICAgICAgIEQucHJlZGljdGlvbiA9IEFUTi5JTlZBTElEX0FMVF9OVU1CRVI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gYWxsIGFkZHMgdG8gZGZhIGFyZSBkb25lIGFmdGVyIHdlJ3ZlIGNyZWF0ZWQgZnVsbCBEIHN0YXRlXG4gICAgRCA9IHRoaXMuYWRkREZBRWRnZShkZmEsIHByZXZpb3VzRCwgdCwgRCk7XG4gICAgcmV0dXJuIEQ7XG59O1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLnByZWRpY2F0ZURGQVN0YXRlID0gZnVuY3Rpb24oZGZhU3RhdGUsIGRlY2lzaW9uU3RhdGUpIHtcbiAgICAvLyBXZSBuZWVkIHRvIHRlc3QgYWxsIHByZWRpY2F0ZXMsIGV2ZW4gaW4gREZBIHN0YXRlcyB0aGF0XG4gICAgLy8gdW5pcXVlbHkgcHJlZGljdCBhbHRlcm5hdGl2ZS5cbiAgICB2YXIgbmFsdHMgPSBkZWNpc2lvblN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDtcbiAgICAvLyBVcGRhdGUgREZBIHNvIHJlYWNoIGJlY29tZXMgYWNjZXB0IHN0YXRlIHdpdGggKHByZWRpY2F0ZSxhbHQpXG4gICAgLy8gcGFpcnMgaWYgcHJlZHMgZm91bmQgZm9yIGNvbmZsaWN0aW5nIGFsdHNcbiAgICB2YXIgYWx0c1RvQ29sbGVjdFByZWRzRnJvbSA9IHRoaXMuZ2V0Q29uZmxpY3RpbmdBbHRzT3JVbmlxdWVBbHQoZGZhU3RhdGUuY29uZmlncyk7XG4gICAgdmFyIGFsdFRvUHJlZCA9IHRoaXMuZ2V0UHJlZHNGb3JBbWJpZ0FsdHMoYWx0c1RvQ29sbGVjdFByZWRzRnJvbSwgZGZhU3RhdGUuY29uZmlncywgbmFsdHMpO1xuICAgIGlmIChhbHRUb1ByZWQhPT1udWxsKSB7XG4gICAgICAgIGRmYVN0YXRlLnByZWRpY2F0ZXMgPSB0aGlzLmdldFByZWRpY2F0ZVByZWRpY3Rpb25zKGFsdHNUb0NvbGxlY3RQcmVkc0Zyb20sIGFsdFRvUHJlZCk7XG4gICAgICAgIGRmYVN0YXRlLnByZWRpY3Rpb24gPSBBVE4uSU5WQUxJRF9BTFRfTlVNQkVSOyAvLyBtYWtlIHN1cmUgd2UgdXNlIHByZWRzXG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhlcmUgYXJlIHByZWRzIGluIGNvbmZpZ3MgYnV0IHRoZXkgbWlnaHQgZ28gYXdheVxuICAgICAgICAvLyB3aGVuIE9SJ2QgdG9nZXRoZXIgbGlrZSB7cH0/IHx8IE5PTkUgPT0gTk9ORS4gSWYgbmVpdGhlclxuICAgICAgICAvLyBhbHQgaGFzIHByZWRzLCByZXNvbHZlIHRvIG1pbiBhbHRcbiAgICAgICAgZGZhU3RhdGUucHJlZGljdGlvbiA9IGFsdHNUb0NvbGxlY3RQcmVkc0Zyb20ubWluVmFsdWUoKTtcbiAgICB9XG59O1xuXG4vLyBjb21lcyBiYWNrIHdpdGggcmVhY2gudW5pcXVlQWx0IHNldCB0byBhIHZhbGlkIGFsdFxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5leGVjQVROV2l0aEZ1bGxDb250ZXh0ID0gZnVuY3Rpb24oZGZhLCBELCAvLyBob3cgZmFyIHdlIGdvdCBiZWZvcmUgZmFpbGluZyBvdmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRlckNvbnRleHQpIHtcbiAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLmRlYnVnX2xpc3RfYXRuX2RlY2lzaW9ucykge1xuICAgICAgICBjb25zb2xlLmxvZyhcImV4ZWNBVE5XaXRoRnVsbENvbnRleHQgXCIrczApO1xuICAgIH1cbiAgICB2YXIgZnVsbEN0eCA9IHRydWU7XG4gICAgdmFyIGZvdW5kRXhhY3RBbWJpZyA9IGZhbHNlO1xuICAgIHZhciByZWFjaCA9IG51bGw7XG4gICAgdmFyIHByZXZpb3VzID0gczA7XG4gICAgaW5wdXQuc2VlayhzdGFydEluZGV4KTtcbiAgICB2YXIgdCA9IGlucHV0LkxBKDEpO1xuICAgIHZhciBwcmVkaWN0ZWRBbHQgPSAtMTtcbiAgICB3aGlsZSAodHJ1ZSkgeyAvLyB3aGlsZSBtb3JlIHdvcmtcbiAgICAgICAgcmVhY2ggPSB0aGlzLmNvbXB1dGVSZWFjaFNldChwcmV2aW91cywgdCwgZnVsbEN0eCk7XG4gICAgICAgIGlmIChyZWFjaD09PW51bGwpIHtcbiAgICAgICAgICAgIC8vIGlmIGFueSBjb25maWdzIGluIHByZXZpb3VzIGRpcHBlZCBpbnRvIG91dGVyIGNvbnRleHQsIHRoYXRcbiAgICAgICAgICAgIC8vIG1lYW5zIHRoYXQgaW5wdXQgdXAgdG8gdCBhY3R1YWxseSBmaW5pc2hlZCBlbnRyeSBydWxlXG4gICAgICAgICAgICAvLyBhdCBsZWFzdCBmb3IgTEwgZGVjaXNpb24uIEZ1bGwgTEwgZG9lc24ndCBkaXAgaW50byBvdXRlclxuICAgICAgICAgICAgLy8gc28gZG9uJ3QgbmVlZCBzcGVjaWFsIGNhc2UuXG4gICAgICAgICAgICAvLyBXZSB3aWxsIGdldCBhbiBlcnJvciBubyBtYXR0ZXIgd2hhdCBzbyBkZWxheSB1bnRpbCBhZnRlclxuICAgICAgICAgICAgLy8gZGVjaXNpb247IGJldHRlciBlcnJvciBtZXNzYWdlLiBBbHNvLCBubyByZWFjaGFibGUgdGFyZ2V0XG4gICAgICAgICAgICAvLyBBVE4gc3RhdGVzIGluIFNMTCBpbXBsaWVzIExMIHdpbGwgYWxzbyBnZXQgbm93aGVyZS5cbiAgICAgICAgICAgIC8vIElmIGNvbmZsaWN0IGluIHN0YXRlcyB0aGF0IGRpcCBvdXQsIGNob29zZSBtaW4gc2luY2Ugd2VcbiAgICAgICAgICAgIC8vIHdpbGwgZ2V0IGVycm9yIG5vIG1hdHRlciB3aGF0LlxuICAgICAgICAgICAgdmFyIGUgPSB0aGlzLm5vVmlhYmxlQWx0KGlucHV0LCBvdXRlckNvbnRleHQsIHByZXZpb3VzLCBzdGFydEluZGV4KTtcbiAgICAgICAgICAgIGlucHV0LnNlZWsoc3RhcnRJbmRleCk7XG4gICAgICAgICAgICB2YXIgYWx0ID0gdGhpcy5nZXRTeW5WYWxpZE9yU2VtSW52YWxpZEFsdFRoYXRGaW5pc2hlZERlY2lzaW9uRW50cnlSdWxlKHByZXZpb3VzLCBvdXRlckNvbnRleHQpO1xuICAgICAgICAgICAgaWYoYWx0IT09QVROLklOVkFMSURfQUxUX05VTUJFUikge1xuICAgICAgICAgICAgICAgIHJldHVybiBhbHQ7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGFsdFN1YlNldHMgPSBQcmVkaWN0aW9uTW9kZS5nZXRDb25mbGljdGluZ0FsdFN1YnNldHMocmVhY2gpO1xuICAgICAgICBpZih0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkxMIGFsdFN1YlNldHM9XCIgKyBhbHRTdWJTZXRzICsgXCIsIHByZWRpY3Q9XCIgK1xuICAgICAgICAgICAgICAgICAgUHJlZGljdGlvbk1vZGUuZ2V0VW5pcXVlQWx0KGFsdFN1YlNldHMpICsgXCIsIHJlc29sdmVzVG9KdXN0T25lVmlhYmxlQWx0PVwiICtcbiAgICAgICAgICAgICAgICAgIFByZWRpY3Rpb25Nb2RlLnJlc29sdmVzVG9KdXN0T25lVmlhYmxlQWx0KGFsdFN1YlNldHMpKTtcbiAgICAgICAgfVxuICAgICAgICByZWFjaC51bmlxdWVBbHQgPSB0aGlzLmdldFVuaXF1ZUFsdChyZWFjaCk7XG4gICAgICAgIC8vIHVuaXF1ZSBwcmVkaWN0aW9uP1xuICAgICAgICBpZihyZWFjaC51bmlxdWVBbHQhPT1BVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICBwcmVkaWN0ZWRBbHQgPSByZWFjaC51bmlxdWVBbHQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZWRpY3Rpb25Nb2RlICE9PSBQcmVkaWN0aW9uTW9kZS5MTF9FWEFDVF9BTUJJR19ERVRFQ1RJT04pIHtcbiAgICAgICAgICAgIHByZWRpY3RlZEFsdCA9IFByZWRpY3Rpb25Nb2RlLnJlc29sdmVzVG9KdXN0T25lVmlhYmxlQWx0KGFsdFN1YlNldHMpO1xuICAgICAgICAgICAgaWYocHJlZGljdGVkQWx0ICE9PSBBVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBJbiBleGFjdCBhbWJpZ3VpdHkgbW9kZSwgd2UgbmV2ZXIgdHJ5IHRvIHRlcm1pbmF0ZSBlYXJseS5cbiAgICAgICAgICAgIC8vIEp1c3Qga2VlcHMgc2NhcmZpbmcgdW50aWwgd2Uga25vdyB3aGF0IHRoZSBjb25mbGljdCBpc1xuICAgICAgICAgICAgaWYgKFByZWRpY3Rpb25Nb2RlLmFsbFN1YnNldHNDb25mbGljdChhbHRTdWJTZXRzKSAmJiBQcmVkaWN0aW9uTW9kZS5hbGxTdWJzZXRzRXF1YWwoYWx0U3ViU2V0cykpIHtcbiAgICAgICAgICAgICAgICBmb3VuZEV4YWN0QW1iaWcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHByZWRpY3RlZEFsdCA9IFByZWRpY3Rpb25Nb2RlLmdldFNpbmdsZVZpYWJsZUFsdChhbHRTdWJTZXRzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGVsc2UgdGhlcmUgYXJlIG11bHRpcGxlIG5vbi1jb25mbGljdGluZyBzdWJzZXRzIG9yXG4gICAgICAgICAgICAvLyB3ZSdyZSBub3Qgc3VyZSB3aGF0IHRoZSBhbWJpZ3VpdHkgaXMgeWV0LlxuICAgICAgICAgICAgLy8gU28sIGtlZXAgZ29pbmcuXG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXMgPSByZWFjaDtcbiAgICAgICAgaWYoIHQgIT09IFRva2VuLkVPRikge1xuICAgICAgICAgICAgaW5wdXQuY29uc3VtZSgpO1xuICAgICAgICAgICAgdCA9IGlucHV0LkxBKDEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIHRoZSBjb25maWd1cmF0aW9uIHNldCB1bmlxdWVseSBwcmVkaWN0cyBhbiBhbHRlcm5hdGl2ZSxcbiAgICAvLyB3aXRob3V0IGNvbmZsaWN0LCB0aGVuIHdlIGtub3cgdGhhdCBpdCdzIGEgZnVsbCBMTCBkZWNpc2lvblxuICAgIC8vIG5vdCBTTEwuXG4gICAgaWYgKHJlYWNoLnVuaXF1ZUFsdCAhPT0gQVROLklOVkFMSURfQUxUX05VTUJFUiApIHtcbiAgICAgICAgdGhpcy5yZXBvcnRDb250ZXh0U2Vuc2l0aXZpdHkoZGZhLCBwcmVkaWN0ZWRBbHQsIHJlYWNoLCBzdGFydEluZGV4LCBpbnB1dC5pbmRleCk7XG4gICAgICAgIHJldHVybiBwcmVkaWN0ZWRBbHQ7XG4gICAgfVxuICAgIC8vIFdlIGRvIG5vdCBjaGVjayBwcmVkaWNhdGVzIGhlcmUgYmVjYXVzZSB3ZSBoYXZlIGNoZWNrZWQgdGhlbVxuICAgIC8vIG9uLXRoZS1mbHkgd2hlbiBkb2luZyBmdWxsIGNvbnRleHQgcHJlZGljdGlvbi5cblxuICAgIC8vXG4gICAgLy8gSW4gbm9uLWV4YWN0IGFtYmlndWl0eSBkZXRlY3Rpb24gbW9kZSwgd2UgbWlnaHRcdGFjdHVhbGx5IGJlIGFibGUgdG9cbiAgICAvLyBkZXRlY3QgYW4gZXhhY3QgYW1iaWd1aXR5LCBidXQgSSdtIG5vdCBnb2luZyB0byBzcGVuZCB0aGUgY3ljbGVzXG4gICAgLy8gbmVlZGVkIHRvIGNoZWNrLiBXZSBvbmx5IGVtaXQgYW1iaWd1aXR5IHdhcm5pbmdzIGluIGV4YWN0IGFtYmlndWl0eVxuICAgIC8vIG1vZGUuXG4gICAgLy9cbiAgICAvLyBGb3IgZXhhbXBsZSwgd2UgbWlnaHQga25vdyB0aGF0IHdlIGhhdmUgY29uZmxpY3RpbmcgY29uZmlndXJhdGlvbnMuXG4gICAgLy8gQnV0LCB0aGF0IGRvZXMgbm90IG1lYW4gdGhhdCB0aGVyZSBpcyBubyB3YXkgZm9yd2FyZCB3aXRob3V0IGFcbiAgICAvLyBjb25mbGljdC4gSXQncyBwb3NzaWJsZSB0byBoYXZlIG5vbmNvbmZsaWN0aW5nIGFsdCBzdWJzZXRzIGFzIGluOlxuXG4gICAgLy8gYWx0U3ViU2V0cz1bezEsIDJ9LCB7MSwgMn0sIHsxfSwgezEsIDJ9XVxuXG4gICAgLy8gZnJvbVxuICAgIC8vXG4gICAgLy8gICAgWygxNywxLFs1ICRdKSwgKDEzLDEsWzUgMTAgJF0pLCAoMjEsMSxbNSAxMCAkXSksICgxMSwxLFskXSksXG4gICAgLy8gICAgICgxMywyLFs1IDEwICRdKSwgKDIxLDIsWzUgMTAgJF0pLCAoMTEsMixbJF0pXVxuICAgIC8vXG4gICAgLy8gSW4gdGhpcyBjYXNlLCAoMTcsMSxbNSAkXSkgaW5kaWNhdGVzIHRoZXJlIGlzIHNvbWUgbmV4dCBzZXF1ZW5jZSB0aGF0XG4gICAgLy8gd291bGQgcmVzb2x2ZSB0aGlzIHdpdGhvdXQgY29uZmxpY3QgdG8gYWx0ZXJuYXRpdmUgMS4gQW55IG90aGVyIHZpYWJsZVxuICAgIC8vIG5leHQgc2VxdWVuY2UsIGhvd2V2ZXIsIGlzIGFzc29jaWF0ZWQgd2l0aCBhIGNvbmZsaWN0LiAgV2Ugc3RvcFxuICAgIC8vIGxvb2tpbmcgZm9yIGlucHV0IGJlY2F1c2Ugbm8gYW1vdW50IG9mIGZ1cnRoZXIgbG9va2FoZWFkIHdpbGwgYWx0ZXJcbiAgICAvLyB0aGUgZmFjdCB0aGF0IHdlIHNob3VsZCBwcmVkaWN0IGFsdGVybmF0aXZlIDEuICBXZSBqdXN0IGNhbid0IHNheSBmb3JcbiAgICAvLyBzdXJlIHRoYXQgdGhlcmUgaXMgYW4gYW1iaWd1aXR5IHdpdGhvdXQgbG9va2luZyBmdXJ0aGVyLlxuXG4gICAgdGhpcy5yZXBvcnRBbWJpZ3VpdHkoZGZhLCBELCBzdGFydEluZGV4LCBpbnB1dC5pbmRleCwgZm91bmRFeGFjdEFtYmlnLCBudWxsLCByZWFjaCk7XG5cbiAgICByZXR1cm4gcHJlZGljdGVkQWx0O1xufTtcblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jb21wdXRlUmVhY2hTZXQgPSBmdW5jdGlvbihjbG9zdXJlLCB0LCBmdWxsQ3R4KSB7XG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJpbiBjb21wdXRlUmVhY2hTZXQsIHN0YXJ0aW5nIGNsb3N1cmU6IFwiICsgY2xvc3VyZSk7XG4gICAgfVxuICAgIGlmKCB0aGlzLm1lcmdlQ2FjaGU9PT1udWxsKSB7XG4gICAgICAgIHRoaXMubWVyZ2VDYWNoZSA9IG5ldyBEb3VibGVEaWN0KCk7XG4gICAgfVxuICAgIHZhciBpbnRlcm1lZGlhdGUgPSBuZXcgQVROQ29uZmlnU2V0KGZ1bGxDdHgpO1xuXG4gICAgLy8gQ29uZmlndXJhdGlvbnMgYWxyZWFkeSBpbiBhIHJ1bGUgc3RvcCBzdGF0ZSBpbmRpY2F0ZSByZWFjaGluZyB0aGUgZW5kXG4gICAgLy8gb2YgdGhlIGRlY2lzaW9uIHJ1bGUgKGxvY2FsIGNvbnRleHQpIG9yIGVuZCBvZiB0aGUgc3RhcnQgcnVsZSAoZnVsbFxuICAgIC8vIGNvbnRleHQpLiBPbmNlIHJlYWNoZWQsIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSBuZXZlciB1cGRhdGVkIGJ5IGFcbiAgICAvLyBjbG9zdXJlIG9wZXJhdGlvbiwgc28gdGhleSBhcmUgaGFuZGxlZCBzZXBhcmF0ZWx5IGZvciB0aGUgcGVyZm9ybWFuY2VcbiAgICAvLyBhZHZhbnRhZ2Ugb2YgaGF2aW5nIGEgc21hbGxlciBpbnRlcm1lZGlhdGUgc2V0IHdoZW4gY2FsbGluZyBjbG9zdXJlLlxuICAgIC8vXG4gICAgLy8gRm9yIGZ1bGwtY29udGV4dCByZWFjaCBvcGVyYXRpb25zLCBzZXBhcmF0ZSBoYW5kbGluZyBpcyByZXF1aXJlZCB0b1xuICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBhbHRlcm5hdGl2ZSBtYXRjaGluZyB0aGUgbG9uZ2VzdCBvdmVyYWxsIHNlcXVlbmNlIGlzXG4gICAgLy8gY2hvc2VuIHdoZW4gbXVsdGlwbGUgc3VjaCBjb25maWd1cmF0aW9ucyBjYW4gbWF0Y2ggdGhlIGlucHV0LlxuXG4gICAgdmFyIHNraXBwZWRTdG9wU3RhdGVzID0gbnVsbDtcblxuICAgIC8vIEZpcnN0IGZpZ3VyZSBvdXQgd2hlcmUgd2UgY2FuIHJlYWNoIG9uIGlucHV0IHRcbiAgICBmb3IgKHZhciBpPTA7IGk8Y2xvc3VyZS5pdGVtcy5sZW5ndGg7aSsrKSB7XG4gICAgICAgIHZhciBjID0gY2xvc3VyZS5pdGVtc1tpXTtcbiAgICAgICAgaWYodGhpcy5kZWJ1Z19hZGQpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwidGVzdGluZyBcIiArIHRoaXMuZ2V0VG9rZW5OYW1lKHQpICsgXCIgYXQgXCIgKyBjKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYy5zdGF0ZSBpbnN0YW5jZW9mIFJ1bGVTdG9wU3RhdGUpIHtcbiAgICAgICAgICAgIGlmIChmdWxsQ3R4IHx8IHQgPT09IFRva2VuLkVPRikge1xuICAgICAgICAgICAgICAgIGlmIChza2lwcGVkU3RvcFN0YXRlcz09PW51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgc2tpcHBlZFN0b3BTdGF0ZXMgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2tpcHBlZFN0b3BTdGF0ZXMucHVzaChjKTtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmRlYnVnX2FkZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImFkZGVkIFwiICsgYyArIFwiIHRvIHNraXBwZWRTdG9wU3RhdGVzXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGZvcih2YXIgaj0wO2o8Yy5zdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGg7aisrKSB7XG4gICAgICAgICAgICB2YXIgdHJhbnMgPSBjLnN0YXRlLnRyYW5zaXRpb25zW2pdO1xuICAgICAgICAgICAgdmFyIHRhcmdldCA9IHRoaXMuZ2V0UmVhY2hhYmxlVGFyZ2V0KHRyYW5zLCB0KTtcbiAgICAgICAgICAgIGlmICh0YXJnZXQhPT1udWxsKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNmZyA9IG5ldyBBVE5Db25maWcoe3N0YXRlOnRhcmdldH0sIGMpO1xuICAgICAgICAgICAgICAgIGludGVybWVkaWF0ZS5hZGQoY2ZnLCB0aGlzLm1lcmdlQ2FjaGUpO1xuICAgICAgICAgICAgICAgIGlmKHRoaXMuZGVidWdfYWRkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiYWRkZWQgXCIgKyBjZmcgKyBcIiB0byBpbnRlcm1lZGlhdGVcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIE5vdyBmaWd1cmUgb3V0IHdoZXJlIHRoZSByZWFjaCBvcGVyYXRpb24gY2FuIHRha2UgdXMuLi5cbiAgICB2YXIgcmVhY2ggPSBudWxsO1xuXG4gICAgLy8gVGhpcyBibG9jayBvcHRpbWl6ZXMgdGhlIHJlYWNoIG9wZXJhdGlvbiBmb3IgaW50ZXJtZWRpYXRlIHNldHMgd2hpY2hcbiAgICAvLyB0cml2aWFsbHkgaW5kaWNhdGUgYSB0ZXJtaW5hdGlvbiBzdGF0ZSBmb3IgdGhlIG92ZXJhbGxcbiAgICAvLyBhZGFwdGl2ZVByZWRpY3Qgb3BlcmF0aW9uLlxuICAgIC8vXG4gICAgLy8gVGhlIGNvbmRpdGlvbnMgYXNzdW1lIHRoYXQgaW50ZXJtZWRpYXRlXG4gICAgLy8gY29udGFpbnMgYWxsIGNvbmZpZ3VyYXRpb25zIHJlbGV2YW50IHRvIHRoZSByZWFjaCBzZXQsIGJ1dCB0aGlzXG4gICAgLy8gY29uZGl0aW9uIGlzIG5vdCB0cnVlIHdoZW4gb25lIG9yIG1vcmUgY29uZmlndXJhdGlvbnMgaGF2ZSBiZWVuXG4gICAgLy8gd2l0aGhlbGQgaW4gc2tpcHBlZFN0b3BTdGF0ZXMsIG9yIHdoZW4gdGhlIGN1cnJlbnQgc3ltYm9sIGlzIEVPRi5cbiAgICAvL1xuICAgIGlmIChza2lwcGVkU3RvcFN0YXRlcz09PW51bGwgJiYgdCE9PVRva2VuLkVPRikge1xuICAgICAgICBpZiAoaW50ZXJtZWRpYXRlLml0ZW1zLmxlbmd0aD09PTEpIHtcbiAgICAgICAgICAgIC8vIERvbid0IHB1cnN1ZSB0aGUgY2xvc3VyZSBpZiB0aGVyZSBpcyBqdXN0IG9uZSBzdGF0ZS5cbiAgICAgICAgICAgIC8vIEl0IGNhbiBvbmx5IGhhdmUgb25lIGFsdGVybmF0aXZlOyBqdXN0IGFkZCB0byByZXN1bHRcbiAgICAgICAgICAgIC8vIEFsc28gZG9uJ3QgcHVyc3VlIHRoZSBjbG9zdXJlIGlmIHRoZXJlIGlzIHVuaXF1ZSBhbHRlcm5hdGl2ZVxuICAgICAgICAgICAgLy8gYW1vbmcgdGhlIGNvbmZpZ3VyYXRpb25zLlxuICAgICAgICAgICAgcmVhY2ggPSBpbnRlcm1lZGlhdGU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5nZXRVbmlxdWVBbHQoaW50ZXJtZWRpYXRlKSE9PUFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgICAgIC8vIEFsc28gZG9uJ3QgcHVyc3VlIHRoZSBjbG9zdXJlIGlmIHRoZXJlIGlzIHVuaXF1ZSBhbHRlcm5hdGl2ZVxuICAgICAgICAgICAgLy8gYW1vbmcgdGhlIGNvbmZpZ3VyYXRpb25zLlxuICAgICAgICAgICAgcmVhY2ggPSBpbnRlcm1lZGlhdGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSWYgdGhlIHJlYWNoIHNldCBjb3VsZCBub3QgYmUgdHJpdmlhbGx5IGRldGVybWluZWQsIHBlcmZvcm0gYSBjbG9zdXJlXG4gICAgLy8gb3BlcmF0aW9uIG9uIHRoZSBpbnRlcm1lZGlhdGUgc2V0IHRvIGNvbXB1dGUgaXRzIGluaXRpYWwgdmFsdWUuXG4gICAgLy9cbiAgICBpZiAocmVhY2g9PT1udWxsKSB7XG4gICAgICAgIHJlYWNoID0gbmV3IEFUTkNvbmZpZ1NldChmdWxsQ3R4KTtcbiAgICAgICAgdmFyIGNsb3N1cmVCdXN5ID0gbmV3IFNldCgpO1xuICAgICAgICB2YXIgdHJlYXRFb2ZBc0Vwc2lsb24gPSB0ID09PSBUb2tlbi5FT0Y7XG4gICAgICAgIGZvciAodmFyIGs9MDsgazxpbnRlcm1lZGlhdGUuaXRlbXMubGVuZ3RoO2srKykge1xuICAgICAgICAgICAgdGhpcy5jbG9zdXJlKGludGVybWVkaWF0ZS5pdGVtc1trXSwgcmVhY2gsIGNsb3N1cmVCdXN5LCBmYWxzZSwgZnVsbEN0eCwgdHJlYXRFb2ZBc0Vwc2lsb24pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0ID09PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgLy8gQWZ0ZXIgY29uc3VtaW5nIEVPRiBubyBhZGRpdGlvbmFsIGlucHV0IGlzIHBvc3NpYmxlLCBzbyB3ZSBhcmVcbiAgICAgICAgLy8gb25seSBpbnRlcmVzdGVkIGluIGNvbmZpZ3VyYXRpb25zIHdoaWNoIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGVcbiAgICAgICAgLy8gZGVjaXNpb24gcnVsZSAobG9jYWwgY29udGV4dCkgb3IgZW5kIG9mIHRoZSBzdGFydCBydWxlIChmdWxsXG4gICAgICAgIC8vIGNvbnRleHQpLiBVcGRhdGUgcmVhY2ggdG8gY29udGFpbiBvbmx5IHRoZXNlIGNvbmZpZ3VyYXRpb25zLiBUaGlzXG4gICAgICAgIC8vIGhhbmRsZXMgYm90aCBleHBsaWNpdCBFT0YgdHJhbnNpdGlvbnMgaW4gdGhlIGdyYW1tYXIgYW5kIGltcGxpY2l0XG4gICAgICAgIC8vIEVPRiB0cmFuc2l0aW9ucyBmb2xsb3dpbmcgdGhlIGVuZCBvZiB0aGUgZGVjaXNpb24gb3Igc3RhcnQgcnVsZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gV2hlbiByZWFjaD09aW50ZXJtZWRpYXRlLCBubyBjbG9zdXJlIG9wZXJhdGlvbiB3YXMgcGVyZm9ybWVkLiBJblxuICAgICAgICAvLyB0aGlzIGNhc2UsIHJlbW92ZUFsbENvbmZpZ3NOb3RJblJ1bGVTdG9wU3RhdGUgbmVlZHMgdG8gY2hlY2sgZm9yXG4gICAgICAgIC8vIHJlYWNoYWJsZSBydWxlIHN0b3Agc3RhdGVzIGFzIHdlbGwgYXMgY29uZmlndXJhdGlvbnMgYWxyZWFkeSBpblxuICAgICAgICAvLyBhIHJ1bGUgc3RvcCBzdGF0ZS5cbiAgICAgICAgLy9cbiAgICAgICAgLy8gVGhpcyBpcyBoYW5kbGVkIGJlZm9yZSB0aGUgY29uZmlndXJhdGlvbnMgaW4gc2tpcHBlZFN0b3BTdGF0ZXMsXG4gICAgICAgIC8vIGJlY2F1c2UgYW55IGNvbmZpZ3VyYXRpb25zIHBvdGVudGlhbGx5IGFkZGVkIGZyb20gdGhhdCBsaXN0IGFyZVxuICAgICAgICAvLyBhbHJlYWR5IGd1YXJhbnRlZWQgdG8gbWVldCB0aGlzIGNvbmRpdGlvbiB3aGV0aGVyIG9yIG5vdCBpdCdzXG4gICAgICAgIC8vIHJlcXVpcmVkLlxuICAgICAgICAvL1xuICAgICAgICByZWFjaCA9IHRoaXMucmVtb3ZlQWxsQ29uZmlnc05vdEluUnVsZVN0b3BTdGF0ZShyZWFjaCwgcmVhY2ggPT09IGludGVybWVkaWF0ZSk7XG4gICAgfVxuICAgIC8vIElmIHNraXBwZWRTdG9wU3RhdGVzIT09bnVsbCwgdGhlbiBpdCBjb250YWlucyBhdCBsZWFzdCBvbmVcbiAgICAvLyBjb25maWd1cmF0aW9uLiBGb3IgZnVsbC1jb250ZXh0IHJlYWNoIG9wZXJhdGlvbnMsIHRoZXNlXG4gICAgLy8gY29uZmlndXJhdGlvbnMgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBzdGFydCBydWxlLCBpbiB3aGljaCBjYXNlIHdlXG4gICAgLy8gb25seSBhZGQgdGhlbSBiYWNrIHRvIHJlYWNoIGlmIG5vIGNvbmZpZ3VyYXRpb24gZHVyaW5nIHRoZSBjdXJyZW50XG4gICAgLy8gY2xvc3VyZSBvcGVyYXRpb24gcmVhY2hlZCBzdWNoIGEgc3RhdGUuIFRoaXMgZW5zdXJlcyBhZGFwdGl2ZVByZWRpY3RcbiAgICAvLyBjaG9vc2VzIGFuIGFsdGVybmF0aXZlIG1hdGNoaW5nIHRoZSBsb25nZXN0IG92ZXJhbGwgc2VxdWVuY2Ugd2hlblxuICAgIC8vIG11bHRpcGxlIGFsdGVybmF0aXZlcyBhcmUgdmlhYmxlLlxuICAgIC8vXG4gICAgaWYgKHNraXBwZWRTdG9wU3RhdGVzIT09bnVsbCAmJiAoICghIGZ1bGxDdHgpIHx8ICghIFByZWRpY3Rpb25Nb2RlLmhhc0NvbmZpZ0luUnVsZVN0b3BTdGF0ZShyZWFjaCkpKSkge1xuICAgICAgICBmb3IgKHZhciBsPTA7IGw8c2tpcHBlZFN0b3BTdGF0ZXMubGVuZ3RoO2wrKykge1xuICAgICAgICAgICAgcmVhY2guYWRkKHNraXBwZWRTdG9wU3RhdGVzW2xdLCB0aGlzLm1lcmdlQ2FjaGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChyZWFjaC5pdGVtcy5sZW5ndGg9PT0wKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiByZWFjaDtcbiAgICB9XG59O1xuLy9cbi8vIFJldHVybiBhIGNvbmZpZ3VyYXRpb24gc2V0IGNvbnRhaW5pbmcgb25seSB0aGUgY29uZmlndXJhdGlvbnMgZnJvbVxuLy8ge0Bjb2RlIGNvbmZpZ3N9IHdoaWNoIGFyZSBpbiBhIHtAbGluayBSdWxlU3RvcFN0YXRlfS4gSWYgYWxsXG4vLyBjb25maWd1cmF0aW9ucyBpbiB7QGNvZGUgY29uZmlnc30gYXJlIGFscmVhZHkgaW4gYSBydWxlIHN0b3Agc3RhdGUsIHRoaXNcbi8vIG1ldGhvZCBzaW1wbHkgcmV0dXJucyB7QGNvZGUgY29uZmlnc30uXG4vL1xuLy8gPHA+V2hlbiB7QGNvZGUgbG9va1RvRW5kT2ZSdWxlfSBpcyB0cnVlLCB0aGlzIG1ldGhvZCB1c2VzXG4vLyB7QGxpbmsgQVROLy9uZXh0VG9rZW5zfSBmb3IgZWFjaCBjb25maWd1cmF0aW9uIGluIHtAY29kZSBjb25maWdzfSB3aGljaCBpc1xuLy8gbm90IGFscmVhZHkgaW4gYSBydWxlIHN0b3Agc3RhdGUgdG8gc2VlIGlmIGEgcnVsZSBzdG9wIHN0YXRlIGlzIHJlYWNoYWJsZVxuLy8gZnJvbSB0aGUgY29uZmlndXJhdGlvbiB2aWEgZXBzaWxvbi1vbmx5IHRyYW5zaXRpb25zLjwvcD5cbi8vXG4vLyBAcGFyYW0gY29uZmlncyB0aGUgY29uZmlndXJhdGlvbiBzZXQgdG8gdXBkYXRlXG4vLyBAcGFyYW0gbG9va1RvRW5kT2ZSdWxlIHdoZW4gdHJ1ZSwgdGhpcyBtZXRob2QgY2hlY2tzIGZvciBydWxlIHN0b3Agc3RhdGVzXG4vLyByZWFjaGFibGUgYnkgZXBzaWxvbi1vbmx5IHRyYW5zaXRpb25zIGZyb20gZWFjaCBjb25maWd1cmF0aW9uIGluXG4vLyB7QGNvZGUgY29uZmlnc30uXG4vL1xuLy8gQHJldHVybiB7QGNvZGUgY29uZmlnc30gaWYgYWxsIGNvbmZpZ3VyYXRpb25zIGluIHtAY29kZSBjb25maWdzfSBhcmUgaW4gYVxuLy8gcnVsZSBzdG9wIHN0YXRlLCBvdGhlcndpc2UgcmV0dXJuIGEgbmV3IGNvbmZpZ3VyYXRpb24gc2V0IGNvbnRhaW5pbmcgb25seVxuLy8gdGhlIGNvbmZpZ3VyYXRpb25zIGZyb20ge0Bjb2RlIGNvbmZpZ3N9IHdoaWNoIGFyZSBpbiBhIHJ1bGUgc3RvcCBzdGF0ZVxuLy9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucmVtb3ZlQWxsQ29uZmlnc05vdEluUnVsZVN0b3BTdGF0ZSA9IGZ1bmN0aW9uKGNvbmZpZ3MsIGxvb2tUb0VuZE9mUnVsZSkge1xuICAgIGlmIChQcmVkaWN0aW9uTW9kZS5hbGxDb25maWdzSW5SdWxlU3RvcFN0YXRlcyhjb25maWdzKSkge1xuICAgICAgICByZXR1cm4gY29uZmlncztcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IG5ldyBBVE5Db25maWdTZXQoY29uZmlncy5mdWxsQ3R4KTtcbiAgICBmb3IodmFyIGk9MDsgaTxjb25maWdzLml0ZW1zLmxlbmd0aDtpKyspIHtcbiAgICAgICAgdmFyIGNvbmZpZyA9IGNvbmZpZ3MuaXRlbXNbaV07XG4gICAgICAgIGlmIChjb25maWcuc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSB7XG4gICAgICAgICAgICByZXN1bHQuYWRkKGNvbmZpZywgdGhpcy5tZXJnZUNhY2hlKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChsb29rVG9FbmRPZlJ1bGUgJiYgY29uZmlnLnN0YXRlLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnMpIHtcbiAgICAgICAgICAgIHZhciBuZXh0VG9rZW5zID0gdGhpcy5hdG4ubmV4dFRva2Vucyhjb25maWcuc3RhdGUpO1xuICAgICAgICAgICAgaWYgKG5leHRUb2tlbnMuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcbiAgICAgICAgICAgICAgICB2YXIgZW5kT2ZSdWxlU3RhdGUgPSB0aGlzLmF0bi5ydWxlVG9TdG9wU3RhdGVbY29uZmlnLnN0YXRlLnJ1bGVJbmRleF07XG4gICAgICAgICAgICAgICAgcmVzdWx0LmFkZChuZXcgQVROQ29uZmlnKHtzdGF0ZTplbmRPZlJ1bGVTdGF0ZX0sIGNvbmZpZyksIHRoaXMubWVyZ2VDYWNoZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY29tcHV0ZVN0YXJ0U3RhdGUgPSBmdW5jdGlvbihwLCBjdHgsIGZ1bGxDdHgpIHtcbiAgICAvLyBhbHdheXMgYXQgbGVhc3QgdGhlIGltcGxpY2l0IGNhbGwgdG8gc3RhcnQgcnVsZVxuICAgIHZhciBpbml0aWFsQ29udGV4dCA9IHByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0KHRoaXMuYXRuLCBjdHgpO1xuICAgIHZhciBjb25maWdzID0gbmV3IEFUTkNvbmZpZ1NldChmdWxsQ3R4KTtcbiAgICBmb3IodmFyIGk9MDtpPHAudHJhbnNpdGlvbnMubGVuZ3RoO2krKykge1xuICAgICAgICB2YXIgdGFyZ2V0ID0gcC50cmFuc2l0aW9uc1tpXS50YXJnZXQ7XG4gICAgICAgIHZhciBjID0gbmV3IEFUTkNvbmZpZyh7IHN0YXRlOnRhcmdldCwgYWx0OmkrMSwgY29udGV4dDppbml0aWFsQ29udGV4dCB9LCBudWxsKTtcbiAgICAgICAgdmFyIGNsb3N1cmVCdXN5ID0gbmV3IFNldCgpO1xuICAgICAgICB0aGlzLmNsb3N1cmUoYywgY29uZmlncywgY2xvc3VyZUJ1c3ksIHRydWUsIGZ1bGxDdHgsIGZhbHNlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZ3M7XG59O1xuXG4vL1xuLy8gVGhpcyBtZXRob2QgdHJhbnNmb3JtcyB0aGUgc3RhcnQgc3RhdGUgY29tcHV0ZWQgYnlcbi8vIHtAbGluayAvL2NvbXB1dGVTdGFydFN0YXRlfSB0byB0aGUgc3BlY2lhbCBzdGFydCBzdGF0ZSB1c2VkIGJ5IGFcbi8vIHByZWNlZGVuY2UgREZBIGZvciBhIHBhcnRpY3VsYXIgcHJlY2VkZW5jZSB2YWx1ZS4gVGhlIHRyYW5zZm9ybWF0aW9uXG4vLyBwcm9jZXNzIGFwcGxpZXMgdGhlIGZvbGxvd2luZyBjaGFuZ2VzIHRvIHRoZSBzdGFydCBzdGF0ZSdzIGNvbmZpZ3VyYXRpb25cbi8vIHNldC5cbi8vXG4vLyA8b2w+XG4vLyA8bGk+RXZhbHVhdGUgdGhlIHByZWNlZGVuY2UgcHJlZGljYXRlcyBmb3IgZWFjaCBjb25maWd1cmF0aW9uIHVzaW5nXG4vLyB7QGxpbmsgU2VtYW50aWNDb250ZXh0Ly9ldmFsUHJlY2VkZW5jZX0uPC9saT5cbi8vIDxsaT5SZW1vdmUgYWxsIGNvbmZpZ3VyYXRpb25zIHdoaWNoIHByZWRpY3QgYW4gYWx0ZXJuYXRpdmUgZ3JlYXRlciB0aGFuXG4vLyAxLCBmb3Igd2hpY2ggYW5vdGhlciBjb25maWd1cmF0aW9uIHRoYXQgcHJlZGljdHMgYWx0ZXJuYXRpdmUgMSBpcyBpbiB0aGVcbi8vIHNhbWUgQVROIHN0YXRlIHdpdGggdGhlIHNhbWUgcHJlZGljdGlvbiBjb250ZXh0LiBUaGlzIHRyYW5zZm9ybWF0aW9uIGlzXG4vLyB2YWxpZCBmb3IgdGhlIGZvbGxvd2luZyByZWFzb25zOlxuLy8gPHVsPlxuLy8gPGxpPlRoZSBjbG9zdXJlIGJsb2NrIGNhbm5vdCBjb250YWluIGFueSBlcHNpbG9uIHRyYW5zaXRpb25zIHdoaWNoIGJ5cGFzc1xuLy8gdGhlIGJvZHkgb2YgdGhlIGNsb3N1cmUsIHNvIGFsbCBzdGF0ZXMgcmVhY2hhYmxlIHZpYSBhbHRlcm5hdGl2ZSAxIGFyZVxuLy8gcGFydCBvZiB0aGUgcHJlY2VkZW5jZSBhbHRlcm5hdGl2ZXMgb2YgdGhlIHRyYW5zZm9ybWVkIGxlZnQtcmVjdXJzaXZlXG4vLyBydWxlLjwvbGk+XG4vLyA8bGk+VGhlIFwicHJpbWFyeVwiIHBvcnRpb24gb2YgYSBsZWZ0IHJlY3Vyc2l2ZSBydWxlIGNhbm5vdCBjb250YWluIGFuXG4vLyBlcHNpbG9uIHRyYW5zaXRpb24sIHNvIHRoZSBvbmx5IHdheSBhbiBhbHRlcm5hdGl2ZSBvdGhlciB0aGFuIDEgY2FuIGV4aXN0XG4vLyBpbiBhIHN0YXRlIHRoYXQgaXMgYWxzbyByZWFjaGFibGUgdmlhIGFsdGVybmF0aXZlIDEgaXMgYnkgbmVzdGluZyBjYWxsc1xuLy8gdG8gdGhlIGxlZnQtcmVjdXJzaXZlIHJ1bGUsIHdpdGggdGhlIG91dGVyIGNhbGxzIG5vdCBiZWluZyBhdCB0aGVcbi8vIHByZWZlcnJlZCBwcmVjZWRlbmNlIGxldmVsLjwvbGk+XG4vLyA8L3VsPlxuLy8gPC9saT5cbi8vIDwvb2w+XG4vL1xuLy8gPHA+XG4vLyBUaGUgcHJlZGljdGlvbiBjb250ZXh0IG11c3QgYmUgY29uc2lkZXJlZCBieSB0aGlzIGZpbHRlciB0byBhZGRyZXNzXG4vLyBzaXR1YXRpb25zIGxpa2UgdGhlIGZvbGxvd2luZy5cbi8vIDwvcD5cbi8vIDxjb2RlPlxuLy8gPHByZT5cbi8vIGdyYW1tYXIgVEE7XG4vLyBwcm9nOiBzdGF0ZW1lbnQqIEVPRjtcbi8vIHN0YXRlbWVudDogbGV0dGVyQSB8IHN0YXRlbWVudCBsZXR0ZXJBICdiJyA7XG4vLyBsZXR0ZXJBOiAnYSc7XG4vLyA8L3ByZT5cbi8vIDwvY29kZT5cbi8vIDxwPlxuLy8gSWYgdGhlIGFib3ZlIGdyYW1tYXIsIHRoZSBBVE4gc3RhdGUgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSB0b2tlblxuLy8gcmVmZXJlbmNlIHtAY29kZSAnYSd9IGluIHtAY29kZSBsZXR0ZXJBfSBpcyByZWFjaGFibGUgZnJvbSB0aGUgbGVmdCBlZGdlXG4vLyBvZiBib3RoIHRoZSBwcmltYXJ5IGFuZCBjbG9zdXJlIGJsb2NrcyBvZiB0aGUgbGVmdC1yZWN1cnNpdmUgcnVsZVxuLy8ge0Bjb2RlIHN0YXRlbWVudH0uIFRoZSBwcmVkaWN0aW9uIGNvbnRleHQgYXNzb2NpYXRlZCB3aXRoIGVhY2ggb2YgdGhlc2Vcbi8vIGNvbmZpZ3VyYXRpb25zIGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiB0aGVtLCBhbmQgcHJldmVudHMgdGhlIGFsdGVybmF0aXZlXG4vLyB3aGljaCBzdGVwcGVkIG91dCB0byB7QGNvZGUgcHJvZ30gKGFuZCB0aGVuIGJhY2sgaW4gdG8ge0Bjb2RlIHN0YXRlbWVudH1cbi8vIGZyb20gYmVpbmcgZWxpbWluYXRlZCBieSB0aGUgZmlsdGVyLlxuLy8gPC9wPlxuLy9cbi8vIEBwYXJhbSBjb25maWdzIFRoZSBjb25maWd1cmF0aW9uIHNldCBjb21wdXRlZCBieVxuLy8ge0BsaW5rIC8vY29tcHV0ZVN0YXJ0U3RhdGV9IGFzIHRoZSBzdGFydCBzdGF0ZSBmb3IgdGhlIERGQS5cbi8vIEByZXR1cm4gVGhlIHRyYW5zZm9ybWVkIGNvbmZpZ3VyYXRpb24gc2V0IHJlcHJlc2VudGluZyB0aGUgc3RhcnQgc3RhdGVcbi8vIGZvciBhIHByZWNlZGVuY2UgREZBIGF0IGEgcGFydGljdWxhciBwcmVjZWRlbmNlIGxldmVsIChkZXRlcm1pbmVkIGJ5XG4vLyBjYWxsaW5nIHtAbGluayBQYXJzZXIvL2dldFByZWNlZGVuY2V9KS5cbi8vXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmFwcGx5UHJlY2VkZW5jZUZpbHRlciA9IGZ1bmN0aW9uKGNvbmZpZ3MpIHtcblx0dmFyIGNvbmZpZztcblx0dmFyIHN0YXRlc0Zyb21BbHQxID0gW107XG4gICAgdmFyIGNvbmZpZ1NldCA9IG5ldyBBVE5Db25maWdTZXQoY29uZmlncy5mdWxsQ3R4KTtcbiAgICBmb3IodmFyIGk9MDsgaTxjb25maWdzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbmZpZyA9IGNvbmZpZ3MuaXRlbXNbaV07XG4gICAgICAgIC8vIGhhbmRsZSBhbHQgMSBmaXJzdFxuICAgICAgICBpZiAoY29uZmlnLmFsdCAhPT0gMSkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHVwZGF0ZWRDb250ZXh0ID0gY29uZmlnLnNlbWFudGljQ29udGV4dC5ldmFsUHJlY2VkZW5jZSh0aGlzLnBhcnNlciwgdGhpcy5fb3V0ZXJDb250ZXh0KTtcbiAgICAgICAgaWYgKHVwZGF0ZWRDb250ZXh0PT09bnVsbCkge1xuICAgICAgICAgICAgLy8gdGhlIGNvbmZpZ3VyYXRpb24gd2FzIGVsaW1pbmF0ZWRcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlc0Zyb21BbHQxW2NvbmZpZy5zdGF0ZS5zdGF0ZU51bWJlcl0gPSBjb25maWcuY29udGV4dDtcbiAgICAgICAgaWYgKHVwZGF0ZWRDb250ZXh0ICE9PSBjb25maWcuc2VtYW50aWNDb250ZXh0KSB7XG4gICAgICAgICAgICBjb25maWdTZXQuYWRkKG5ldyBBVE5Db25maWcoe3NlbWFudGljQ29udGV4dDp1cGRhdGVkQ29udGV4dH0sIGNvbmZpZyksIHRoaXMubWVyZ2VDYWNoZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWdTZXQuYWRkKGNvbmZpZywgdGhpcy5tZXJnZUNhY2hlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IoaT0wOyBpPGNvbmZpZ3MuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uZmlnID0gY29uZmlncy5pdGVtc1tpXTtcbiAgICAgICAgaWYgKGNvbmZpZy5hbHQgPT09IDEpIHtcbiAgICAgICAgICAgIC8vIGFscmVhZHkgaGFuZGxlZFxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSW4gdGhlIGZ1dHVyZSwgdGhpcyBlbGltaW5hdGlvbiBzdGVwIGNvdWxkIGJlIHVwZGF0ZWQgdG8gYWxzb1xuICAgICAgICAvLyBmaWx0ZXIgdGhlIHByZWRpY3Rpb24gY29udGV4dCBmb3IgYWx0ZXJuYXRpdmVzIHByZWRpY3RpbmcgYWx0PjFcbiAgICAgICAgLy8gKGJhc2ljYWxseSBhIGdyYXBoIHN1YnRyYWN0aW9uIGFsZ29yaXRobSkuXG5cdFx0aWYgKCFjb25maWcucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQpIHtcbiAgICAgICAgICAgIHZhciBjb250ZXh0ID0gc3RhdGVzRnJvbUFsdDFbY29uZmlnLnN0YXRlLnN0YXRlTnVtYmVyXSB8fCBudWxsO1xuICAgICAgICAgICAgaWYgKGNvbnRleHQhPT1udWxsICYmIGNvbnRleHQuZXF1YWxzKGNvbmZpZy5jb250ZXh0KSkge1xuICAgICAgICAgICAgICAgIC8vIGVsaW1pbmF0ZWRcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblx0XHR9XG4gICAgICAgIGNvbmZpZ1NldC5hZGQoY29uZmlnLCB0aGlzLm1lcmdlQ2FjaGUpO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnU2V0O1xufTtcblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRSZWFjaGFibGVUYXJnZXQgPSBmdW5jdGlvbih0cmFucywgdHR5cGUpIHtcbiAgICBpZiAodHJhbnMubWF0Y2hlcyh0dHlwZSwgMCwgdGhpcy5hdG4ubWF4VG9rZW5UeXBlKSkge1xuICAgICAgICByZXR1cm4gdHJhbnMudGFyZ2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0UHJlZHNGb3JBbWJpZ0FsdHMgPSBmdW5jdGlvbihhbWJpZ0FsdHMsIGNvbmZpZ3MsIG5hbHRzKSB7XG4gICAgLy8gUkVBQ0g9WzF8MXxbXXwwOjAsIDF8MnxbXXwwOjFdXG4gICAgLy8gYWx0VG9QcmVkIHN0YXJ0cyBhcyBhbiBhcnJheSBvZiBhbGwgbnVsbCBjb250ZXh0cy4gVGhlIGVudHJ5IGF0IGluZGV4IGlcbiAgICAvLyBjb3JyZXNwb25kcyB0byBhbHRlcm5hdGl2ZSBpLiBhbHRUb1ByZWRbaV0gbWF5IGhhdmUgb25lIG9mIHRocmVlIHZhbHVlczpcbiAgICAvLyAgIDEuIG51bGw6IG5vIEFUTkNvbmZpZyBjIGlzIGZvdW5kIHN1Y2ggdGhhdCBjLmFsdD09aVxuICAgIC8vICAgMi4gU2VtYW50aWNDb250ZXh0Lk5PTkU6IEF0IGxlYXN0IG9uZSBBVE5Db25maWcgYyBleGlzdHMgc3VjaCB0aGF0XG4gICAgLy8gICAgICBjLmFsdD09aSBhbmQgYy5zZW1hbnRpY0NvbnRleHQ9PVNlbWFudGljQ29udGV4dC5OT05FLiBJbiBvdGhlciB3b3JkcyxcbiAgICAvLyAgICAgIGFsdCBpIGhhcyBhdCBsZWFzdCBvbmUgdW5wcmVkaWNhdGVkIGNvbmZpZy5cbiAgICAvLyAgIDMuIE5vbi1OT05FIFNlbWFudGljIENvbnRleHQ6IFRoZXJlIGV4aXN0cyBhdCBsZWFzdCBvbmUsIGFuZCBmb3IgYWxsXG4gICAgLy8gICAgICBBVE5Db25maWcgYyBzdWNoIHRoYXQgYy5hbHQ9PWksIGMuc2VtYW50aWNDb250ZXh0IT1TZW1hbnRpY0NvbnRleHQuTk9ORS5cbiAgICAvL1xuICAgIC8vIEZyb20gdGhpcywgaXQgaXMgY2xlYXIgdGhhdCBOT05FfHxhbnl0aGluZz09Tk9ORS5cbiAgICAvL1xuICAgIHZhciBhbHRUb1ByZWQgPSBbXTtcbiAgICBmb3IodmFyIGk9MDtpPGNvbmZpZ3MuaXRlbXMubGVuZ3RoO2krKykge1xuICAgICAgICB2YXIgYyA9IGNvbmZpZ3MuaXRlbXNbaV07XG4gICAgICAgIGlmKGFtYmlnQWx0cy5jb250YWlucyggYy5hbHQgKSkge1xuICAgICAgICAgICAgYWx0VG9QcmVkW2MuYWx0XSA9IFNlbWFudGljQ29udGV4dC5vckNvbnRleHQoYWx0VG9QcmVkW2MuYWx0XSB8fCBudWxsLCBjLnNlbWFudGljQ29udGV4dCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIG5QcmVkQWx0cyA9IDA7XG4gICAgZm9yIChpID0xO2k8IG5hbHRzKzE7aSsrKSB7XG4gICAgICAgIHZhciBwcmVkID0gYWx0VG9QcmVkW2ldIHx8IG51bGw7XG4gICAgICAgIGlmIChwcmVkPT09bnVsbCkge1xuICAgICAgICAgICAgYWx0VG9QcmVkW2ldID0gU2VtYW50aWNDb250ZXh0Lk5PTkU7XG4gICAgICAgIH0gZWxzZSBpZiAocHJlZCAhPT0gU2VtYW50aWNDb250ZXh0Lk5PTkUpIHtcbiAgICAgICAgICAgIG5QcmVkQWx0cyArPSAxO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIG5vbmFtYmlnIGFsdHMgYXJlIG51bGwgaW4gYWx0VG9QcmVkXG4gICAgaWYgKG5QcmVkQWx0cz09PTApIHtcbiAgICAgICAgYWx0VG9QcmVkID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJnZXRQcmVkc0ZvckFtYmlnQWx0cyByZXN1bHQgXCIgKyBVdGlscy5hcnJheVRvU3RyaW5nKGFsdFRvUHJlZCkpO1xuICAgIH1cbiAgICByZXR1cm4gYWx0VG9QcmVkO1xufTtcblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRQcmVkaWNhdGVQcmVkaWN0aW9ucyA9IGZ1bmN0aW9uKGFtYmlnQWx0cywgYWx0VG9QcmVkKSB7XG4gICAgdmFyIHBhaXJzID0gW107XG4gICAgdmFyIGNvbnRhaW5zUHJlZGljYXRlID0gZmFsc2U7XG4gICAgZm9yICh2YXIgaT0xOyBpPGFsdFRvUHJlZC5sZW5ndGg7aSsrKSB7XG4gICAgICAgIHZhciBwcmVkID0gYWx0VG9QcmVkW2ldO1xuICAgICAgICAvLyB1bnByZWRpY2F0ZWQgaXMgaW5kaWNhdGVkIGJ5IFNlbWFudGljQ29udGV4dC5OT05FXG4gICAgICAgIGlmKCBhbWJpZ0FsdHMhPT1udWxsICYmIGFtYmlnQWx0cy5jb250YWlucyggaSApKSB7XG4gICAgICAgICAgICBwYWlycy5wdXNoKG5ldyBQcmVkUHJlZGljdGlvbihwcmVkLCBpKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZWQgIT09IFNlbWFudGljQ29udGV4dC5OT05FKSB7XG4gICAgICAgICAgICBjb250YWluc1ByZWRpY2F0ZSA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKCEgY29udGFpbnNQcmVkaWNhdGUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiBwYWlycztcbn07XG5cbi8vXG4vLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGltcHJvdmUgdGhlIGxvY2FsaXphdGlvbiBvZiBlcnJvciBtZXNzYWdlcyBieVxuLy8gY2hvb3NpbmcgYW4gYWx0ZXJuYXRpdmUgcmF0aGVyIHRoYW4gdGhyb3dpbmcgYVxuLy8ge0BsaW5rIE5vVmlhYmxlQWx0RXhjZXB0aW9ufSBpbiBwYXJ0aWN1bGFyIHByZWRpY3Rpb24gc2NlbmFyaW9zIHdoZXJlIHRoZVxuLy8ge0BsaW5rIC8vRVJST1J9IHN0YXRlIHdhcyByZWFjaGVkIGR1cmluZyBBVE4gc2ltdWxhdGlvbi5cbi8vXG4vLyA8cD5cbi8vIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHRoaXMgbWV0aG9kIHVzZXMgdGhlIGZvbGxvd2luZ1xuLy8gYWxnb3JpdGhtIHRvIGlkZW50aWZ5IGFuIEFUTiBjb25maWd1cmF0aW9uIHdoaWNoIHN1Y2Nlc3NmdWxseSBwYXJzZWQgdGhlXG4vLyBkZWNpc2lvbiBlbnRyeSBydWxlLiBDaG9vc2luZyBzdWNoIGFuIGFsdGVybmF0aXZlIGVuc3VyZXMgdGhhdCB0aGVcbi8vIHtAbGluayBQYXJzZXJSdWxlQ29udGV4dH0gcmV0dXJuZWQgYnkgdGhlIGNhbGxpbmcgcnVsZSB3aWxsIGJlIGNvbXBsZXRlXG4vLyBhbmQgdmFsaWQsIGFuZCB0aGUgc3ludGF4IGVycm9yIHdpbGwgYmUgcmVwb3J0ZWQgbGF0ZXIgYXQgYSBtb3JlXG4vLyBsb2NhbGl6ZWQgbG9jYXRpb24uPC9wPlxuLy9cbi8vIDx1bD5cbi8vIDxsaT5JZiBhIHN5bnRhY3RpY2FsbHkgdmFsaWQgcGF0aCBvciBwYXRocyByZWFjaCB0aGUgZW5kIG9mIHRoZSBkZWNpc2lvbiBydWxlIGFuZFxuLy8gdGhleSBhcmUgc2VtYW50aWNhbGx5IHZhbGlkIGlmIHByZWRpY2F0ZWQsIHJldHVybiB0aGUgbWluIGFzc29jaWF0ZWQgYWx0LjwvbGk+XG4vLyA8bGk+RWxzZSwgaWYgYSBzZW1hbnRpY2FsbHkgaW52YWxpZCBidXQgc3ludGFjdGljYWxseSB2YWxpZCBwYXRoIGV4aXN0XG4vLyBvciBwYXRocyBleGlzdCwgcmV0dXJuIHRoZSBtaW5pbXVtIGFzc29jaWF0ZWQgYWx0LlxuLy8gPC9saT5cbi8vIDxsaT5PdGhlcndpc2UsIHJldHVybiB7QGxpbmsgQVROLy9JTlZBTElEX0FMVF9OVU1CRVJ9LjwvbGk+XG4vLyA8L3VsPlxuLy9cbi8vIDxwPlxuLy8gSW4gc29tZSBzY2VuYXJpb3MsIHRoZSBhbGdvcml0aG0gZGVzY3JpYmVkIGFib3ZlIGNvdWxkIHByZWRpY3QgYW5cbi8vIGFsdGVybmF0aXZlIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEge0BsaW5rIEZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbn0gaW5cbi8vIHRoZSBwYXJzZXIuIFNwZWNpZmljYWxseSwgdGhpcyBjb3VsZCBvY2N1ciBpZiB0aGUgPGVtPm9ubHk8L2VtPiBjb25maWd1cmF0aW9uXG4vLyBjYXBhYmxlIG9mIHN1Y2Nlc3NmdWxseSBwYXJzaW5nIHRvIHRoZSBlbmQgb2YgdGhlIGRlY2lzaW9uIHJ1bGUgaXNcbi8vIGJsb2NrZWQgYnkgYSBzZW1hbnRpYyBwcmVkaWNhdGUuIEJ5IGNob29zaW5nIHRoaXMgYWx0ZXJuYXRpdmUgd2l0aGluXG4vLyB7QGxpbmsgLy9hZGFwdGl2ZVByZWRpY3R9IGluc3RlYWQgb2YgdGhyb3dpbmcgYVxuLy8ge0BsaW5rIE5vVmlhYmxlQWx0RXhjZXB0aW9ufSwgdGhlIHJlc3VsdGluZ1xuLy8ge0BsaW5rIEZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbn0gaW4gdGhlIHBhcnNlciB3aWxsIGlkZW50aWZ5IHRoZSBzcGVjaWZpY1xuLy8gcHJlZGljYXRlIHdoaWNoIGlzIHByZXZlbnRpbmcgdGhlIHBhcnNlciBmcm9tIHN1Y2Nlc3NmdWxseSBwYXJzaW5nIHRoZVxuLy8gZGVjaXNpb24gcnVsZSwgd2hpY2ggaGVscHMgZGV2ZWxvcGVycyBpZGVudGlmeSBhbmQgY29ycmVjdCBsb2dpYyBlcnJvcnNcbi8vIGluIHNlbWFudGljIHByZWRpY2F0ZXMuXG4vLyA8L3A+XG4vL1xuLy8gQHBhcmFtIGNvbmZpZ3MgVGhlIEFUTiBjb25maWd1cmF0aW9ucyB3aGljaCB3ZXJlIHZhbGlkIGltbWVkaWF0ZWx5IGJlZm9yZVxuLy8gdGhlIHtAbGluayAvL0VSUk9SfSBzdGF0ZSB3YXMgcmVhY2hlZFxuLy8gQHBhcmFtIG91dGVyQ29udGV4dCBUaGUgaXMgdGhlIFxcZ2FtbWFfMCBpbml0aWFsIHBhcnNlciBjb250ZXh0IGZyb20gdGhlIHBhcGVyXG4vLyBvciB0aGUgcGFyc2VyIHN0YWNrIGF0IHRoZSBpbnN0YW50IGJlZm9yZSBwcmVkaWN0aW9uIGNvbW1lbmNlcy5cbi8vXG4vLyBAcmV0dXJuIFRoZSB2YWx1ZSB0byByZXR1cm4gZnJvbSB7QGxpbmsgLy9hZGFwdGl2ZVByZWRpY3R9LCBvclxuLy8ge0BsaW5rIEFUTi8vSU5WQUxJRF9BTFRfTlVNQkVSfSBpZiBhIHN1aXRhYmxlIGFsdGVybmF0aXZlIHdhcyBub3Rcbi8vIGlkZW50aWZpZWQgYW5kIHtAbGluayAvL2FkYXB0aXZlUHJlZGljdH0gc2hvdWxkIHJlcG9ydCBhbiBlcnJvciBpbnN0ZWFkLlxuLy9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0U3luVmFsaWRPclNlbUludmFsaWRBbHRUaGF0RmluaXNoZWREZWNpc2lvbkVudHJ5UnVsZSA9IGZ1bmN0aW9uKGNvbmZpZ3MsIG91dGVyQ29udGV4dCkge1xuICAgIHZhciBjZmdzID0gdGhpcy5zcGxpdEFjY29yZGluZ1RvU2VtYW50aWNWYWxpZGl0eShjb25maWdzLCBvdXRlckNvbnRleHQpO1xuICAgIHZhciBzZW1WYWxpZENvbmZpZ3MgPSBjZmdzWzBdO1xuICAgIHZhciBzZW1JbnZhbGlkQ29uZmlncyA9IGNmZ3NbMV07XG4gICAgdmFyIGFsdCA9IHRoaXMuZ2V0QWx0VGhhdEZpbmlzaGVkRGVjaXNpb25FbnRyeVJ1bGUoc2VtVmFsaWRDb25maWdzKTtcbiAgICBpZiAoYWx0IT09QVROLklOVkFMSURfQUxUX05VTUJFUikgeyAvLyBzZW1hbnRpY2FsbHkvc3ludGFjdGljYWxseSB2aWFibGUgcGF0aCBleGlzdHNcbiAgICAgICAgcmV0dXJuIGFsdDtcbiAgICB9XG4gICAgLy8gSXMgdGhlcmUgYSBzeW50YWN0aWNhbGx5IHZhbGlkIHBhdGggd2l0aCBhIGZhaWxlZCBwcmVkP1xuICAgIGlmIChzZW1JbnZhbGlkQ29uZmlncy5pdGVtcy5sZW5ndGg+MCkge1xuICAgICAgICBhbHQgPSB0aGlzLmdldEFsdFRoYXRGaW5pc2hlZERlY2lzaW9uRW50cnlSdWxlKHNlbUludmFsaWRDb25maWdzKTtcbiAgICAgICAgaWYgKGFsdCE9PUFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHsgLy8gc3ludGFjdGljYWxseSB2aWFibGUgcGF0aCBleGlzdHNcbiAgICAgICAgICAgIHJldHVybiBhbHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIEFUTi5JTlZBTElEX0FMVF9OVU1CRVI7XG59O1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmdldEFsdFRoYXRGaW5pc2hlZERlY2lzaW9uRW50cnlSdWxlID0gZnVuY3Rpb24oY29uZmlncykge1xuICAgIHZhciBhbHRzID0gW107XG4gICAgZm9yKHZhciBpPTA7aTxjb25maWdzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gY29uZmlncy5pdGVtc1tpXTtcbiAgICAgICAgaWYgKGMucmVhY2hlc0ludG9PdXRlckNvbnRleHQ+MCB8fCAoKGMuc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSAmJiBjLmNvbnRleHQuaGFzRW1wdHlQYXRoKCkpKSB7XG4gICAgICAgICAgICBpZihhbHRzLmluZGV4T2YoYy5hbHQpPDApIHtcbiAgICAgICAgICAgICAgICBhbHRzLnB1c2goYy5hbHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChhbHRzLmxlbmd0aD09PTApIHtcbiAgICAgICAgcmV0dXJuIEFUTi5JTlZBTElEX0FMVF9OVU1CRVI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWluLmFwcGx5KG51bGwsIGFsdHMpO1xuICAgIH1cbn07XG4vLyBXYWxrIHRoZSBsaXN0IG9mIGNvbmZpZ3VyYXRpb25zIGFuZCBzcGxpdCB0aGVtIGFjY29yZGluZyB0b1xuLy8gIHRob3NlIHRoYXQgaGF2ZSBwcmVkcyBldmFsdWF0aW5nIHRvIHRydWUvZmFsc2UuICBJZiBubyBwcmVkLCBhc3N1bWVcbi8vICB0cnVlIHByZWQgYW5kIGluY2x1ZGUgaW4gc3VjY2VlZGVkIHNldC4gIFJldHVybnMgUGFpciBvZiBzZXRzLlxuLy9cbi8vICBDcmVhdGUgYSBuZXcgc2V0IHNvIGFzIG5vdCB0byBhbHRlciB0aGUgaW5jb21pbmcgcGFyYW1ldGVyLlxuLy9cbi8vICBBc3N1bXB0aW9uOiB0aGUgaW5wdXQgc3RyZWFtIGhhcyBiZWVuIHJlc3RvcmVkIHRvIHRoZSBzdGFydGluZyBwb2ludFxuLy8gIHByZWRpY3Rpb24sIHdoaWNoIGlzIHdoZXJlIHByZWRpY2F0ZXMgbmVlZCB0byBldmFsdWF0ZS5cbi8vXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLnNwbGl0QWNjb3JkaW5nVG9TZW1hbnRpY1ZhbGlkaXR5ID0gZnVuY3Rpb24oIGNvbmZpZ3MsIG91dGVyQ29udGV4dCkge1xuICAgIHZhciBzdWNjZWVkZWQgPSBuZXcgQVROQ29uZmlnU2V0KGNvbmZpZ3MuZnVsbEN0eCk7XG4gICAgdmFyIGZhaWxlZCA9IG5ldyBBVE5Db25maWdTZXQoY29uZmlncy5mdWxsQ3R4KTtcbiAgICBmb3IodmFyIGk9MDtpPGNvbmZpZ3MuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGMgPSBjb25maWdzLml0ZW1zW2ldO1xuICAgICAgICBpZiAoYy5zZW1hbnRpY0NvbnRleHQgIT09IFNlbWFudGljQ29udGV4dC5OT05FKSB7XG4gICAgICAgICAgICB2YXIgcHJlZGljYXRlRXZhbHVhdGlvblJlc3VsdCA9IGMuc2VtYW50aWNDb250ZXh0LmV2YWx1YXRlKHRoaXMucGFyc2VyLCBvdXRlckNvbnRleHQpO1xuICAgICAgICAgICAgaWYgKHByZWRpY2F0ZUV2YWx1YXRpb25SZXN1bHQpIHtcbiAgICAgICAgICAgICAgICBzdWNjZWVkZWQuYWRkKGMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmYWlsZWQuYWRkKGMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VjY2VlZGVkLmFkZChjKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gW3N1Y2NlZWRlZCwgZmFpbGVkXTtcbn07XG5cbi8vIExvb2sgdGhyb3VnaCBhIGxpc3Qgb2YgcHJlZGljYXRlL2FsdCBwYWlycywgcmV0dXJuaW5nIGFsdHMgZm9yIHRoZVxuLy8gIHBhaXJzIHRoYXQgd2luLiBBIHtAY29kZSBOT05FfSBwcmVkaWNhdGUgaW5kaWNhdGVzIGFuIGFsdCBjb250YWluaW5nIGFuXG4vLyAgdW5wcmVkaWNhdGVkIGNvbmZpZyB3aGljaCBiZWhhdmVzIGFzIFwiYWx3YXlzIHRydWUuXCIgSWYgIWNvbXBsZXRlXG4vLyAgdGhlbiB3ZSBzdG9wIGF0IHRoZSBmaXJzdCBwcmVkaWNhdGUgdGhhdCBldmFsdWF0ZXMgdG8gdHJ1ZS4gVGhpc1xuLy8gIGluY2x1ZGVzIHBhaXJzIHdpdGggbnVsbCBwcmVkaWNhdGVzLlxuLy9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZXZhbFNlbWFudGljQ29udGV4dCA9IGZ1bmN0aW9uKHByZWRQcmVkaWN0aW9ucywgb3V0ZXJDb250ZXh0LCBjb21wbGV0ZSkge1xuICAgIHZhciBwcmVkaWN0aW9ucyA9IG5ldyBCaXRTZXQoKTtcbiAgICBmb3IodmFyIGk9MDtpPHByZWRQcmVkaWN0aW9ucy5sZW5ndGg7aSsrKSB7XG4gICAgXHR2YXIgcGFpciA9IHByZWRQcmVkaWN0aW9uc1tpXTtcbiAgICAgICAgaWYgKHBhaXIucHJlZCA9PT0gU2VtYW50aWNDb250ZXh0Lk5PTkUpIHtcbiAgICAgICAgICAgIHByZWRpY3Rpb25zLmFkZChwYWlyLmFsdCk7XG4gICAgICAgICAgICBpZiAoISBjb21wbGV0ZSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByZWRpY2F0ZUV2YWx1YXRpb25SZXN1bHQgPSBwYWlyLnByZWQuZXZhbHVhdGUodGhpcy5wYXJzZXIsIG91dGVyQ29udGV4dCk7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnIHx8IHRoaXMuZGZhX2RlYnVnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImV2YWwgcHJlZCBcIiArIHBhaXIgKyBcIj1cIiArIHByZWRpY2F0ZUV2YWx1YXRpb25SZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmVkaWNhdGVFdmFsdWF0aW9uUmVzdWx0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLmRmYV9kZWJ1Zykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiUFJFRElDVCBcIiArIHBhaXIuYWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByZWRpY3Rpb25zLmFkZChwYWlyLmFsdCk7XG4gICAgICAgICAgICBpZiAoISBjb21wbGV0ZSkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwcmVkaWN0aW9ucztcbn07XG5cbi8vIFRPRE86IElmIHdlIGFyZSBkb2luZyBwcmVkaWNhdGVzLCB0aGVyZSBpcyBubyBwb2ludCBpbiBwdXJzdWluZ1xuLy8gICAgIGNsb3N1cmUgb3BlcmF0aW9ucyBpZiB3ZSByZWFjaCBhIERGQSBzdGF0ZSB0aGF0IHVuaXF1ZWx5IHByZWRpY3RzXG4vLyAgICAgYWx0ZXJuYXRpdmUuIFdlIHdpbGwgbm90IGJlIGNhY2hpbmcgdGhhdCBERkEgc3RhdGUgYW5kIGl0IGlzIGFcbi8vICAgICB3YXN0ZSB0byBwdXJzdWUgdGhlIGNsb3N1cmUuIE1pZ2h0IGhhdmUgdG8gYWR2YW5jZSB3aGVuIHdlIGRvXG4vLyAgICAgYW1iaWcgZGV0ZWN0aW9uIHRob3VnaHQgOihcbi8vXG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY2xvc3VyZSA9IGZ1bmN0aW9uKGNvbmZpZywgY29uZmlncywgY2xvc3VyZUJ1c3ksIGNvbGxlY3RQcmVkaWNhdGVzLCBmdWxsQ3R4LCB0cmVhdEVvZkFzRXBzaWxvbikge1xuICAgIHZhciBpbml0aWFsRGVwdGggPSAwO1xuICAgIHRoaXMuY2xvc3VyZUNoZWNraW5nU3RvcFN0YXRlKGNvbmZpZywgY29uZmlncywgY2xvc3VyZUJ1c3ksIGNvbGxlY3RQcmVkaWNhdGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdWxsQ3R4LCBpbml0aWFsRGVwdGgsIHRyZWF0RW9mQXNFcHNpbG9uKTtcbn07XG5cblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jbG9zdXJlQ2hlY2tpbmdTdG9wU3RhdGUgPSBmdW5jdGlvbihjb25maWcsIGNvbmZpZ3MsIGNsb3N1cmVCdXN5LCBjb2xsZWN0UHJlZGljYXRlcywgZnVsbEN0eCwgZGVwdGgsIHRyZWF0RW9mQXNFcHNpbG9uKSB7XG4gICAgaWYgKHRoaXMuZGVidWcgfHwgdGhpcy5kZWJ1Z19jbG9zdXJlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiY2xvc3VyZShcIiArIGNvbmZpZy50b1N0cmluZyh0aGlzLnBhcnNlcix0cnVlKSArIFwiKVwiKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJjb25maWdzKFwiICsgY29uZmlncy50b1N0cmluZygpICsgXCIpXCIpO1xuICAgICAgICBpZihjb25maWcucmVhY2hlc0ludG9PdXRlckNvbnRleHQ+NTApIHtcbiAgICAgICAgICAgIHRocm93IFwicHJvYmxlbVwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChjb25maWcuc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSB7XG4gICAgICAgIC8vIFdlIGhpdCBydWxlIGVuZC4gSWYgd2UgaGF2ZSBjb250ZXh0IGluZm8sIHVzZSBpdFxuICAgICAgICAvLyBydW4gdGhydSBhbGwgcG9zc2libGUgc3RhY2sgdG9wcyBpbiBjdHhcbiAgICAgICAgaWYgKCEgY29uZmlnLmNvbnRleHQuaXNFbXB0eSgpKSB7XG4gICAgICAgICAgICBmb3IgKCB2YXIgaSA9MDsgaTxjb25maWcuY29udGV4dC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChjb25maWcuY29udGV4dC5nZXRSZXR1cm5TdGF0ZShpKSA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFlfUkVUVVJOX1NUQVRFKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmdWxsQ3R4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWdzLmFkZChuZXcgQVROQ29uZmlnKHtzdGF0ZTpjb25maWcuc3RhdGUsIGNvbnRleHQ6UHJlZGljdGlvbkNvbnRleHQuRU1QVFl9LCBjb25maWcpLCB0aGlzLm1lcmdlQ2FjaGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBoYXZlIG5vIGNvbnRleHQgaW5mbywganVzdCBjaGFzZSBmb2xsb3cgbGlua3MgKGlmIGdyZWVkeSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJGQUxMSU5HIG9mZiBydWxlIFwiICsgdGhpcy5nZXRSdWxlTmFtZShjb25maWcuc3RhdGUucnVsZUluZGV4KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNsb3N1cmVfKGNvbmZpZywgY29uZmlncywgY2xvc3VyZUJ1c3ksIGNvbGxlY3RQcmVkaWNhdGVzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbEN0eCwgZGVwdGgsIHRyZWF0RW9mQXNFcHNpbG9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHJldHVyblN0YXRlID0gdGhpcy5hdG4uc3RhdGVzW2NvbmZpZy5jb250ZXh0LmdldFJldHVyblN0YXRlKGkpXTtcbiAgICAgICAgICAgICAgICB2YXIgbmV3Q29udGV4dCA9IGNvbmZpZy5jb250ZXh0LmdldFBhcmVudChpKTsgLy8gXCJwb3BcIiByZXR1cm4gc3RhdGVcbiAgICAgICAgICAgICAgICB2YXIgcGFybXMgPSB7c3RhdGU6cmV0dXJuU3RhdGUsIGFsdDpjb25maWcuYWx0LCBjb250ZXh0Om5ld0NvbnRleHQsIHNlbWFudGljQ29udGV4dDpjb25maWcuc2VtYW50aWNDb250ZXh0fTtcbiAgICAgICAgICAgICAgICB2YXIgYyA9IG5ldyBBVE5Db25maWcocGFybXMsIG51bGwpO1xuICAgICAgICAgICAgICAgIC8vIFdoaWxlIHdlIGhhdmUgY29udGV4dCB0byBwb3AgYmFjayBmcm9tLCB3ZSBtYXkgaGF2ZVxuICAgICAgICAgICAgICAgIC8vIGdvdHRlbiB0aGF0IGNvbnRleHQgQUZURVIgaGF2aW5nIGZhbGxpbmcgb2ZmIGEgcnVsZS5cbiAgICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgd2UgdHJhY2sgdGhhdCB3ZSBhcmUgbm93IG91dCBvZiBjb250ZXh0LlxuICAgICAgICAgICAgICAgIGMucmVhY2hlc0ludG9PdXRlckNvbnRleHQgPSBjb25maWcucmVhY2hlc0ludG9PdXRlckNvbnRleHQ7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zdXJlQ2hlY2tpbmdTdG9wU3RhdGUoYywgY29uZmlncywgY2xvc3VyZUJ1c3ksIGNvbGxlY3RQcmVkaWNhdGVzLCBmdWxsQ3R4LCBkZXB0aCAtIDEsIHRyZWF0RW9mQXNFcHNpbG9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmKCBmdWxsQ3R4KSB7XG4gICAgICAgICAgICAvLyByZWFjaGVkIGVuZCBvZiBzdGFydCBydWxlXG4gICAgICAgICAgICBjb25maWdzLmFkZChjb25maWcsIHRoaXMubWVyZ2VDYWNoZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBlbHNlIGlmIHdlIGhhdmUgbm8gY29udGV4dCBpbmZvLCBqdXN0IGNoYXNlIGZvbGxvdyBsaW5rcyAoaWYgZ3JlZWR5KVxuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkZBTExJTkcgb2ZmIHJ1bGUgXCIgKyB0aGlzLmdldFJ1bGVOYW1lKGNvbmZpZy5zdGF0ZS5ydWxlSW5kZXgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICB0aGlzLmNsb3N1cmVfKGNvbmZpZywgY29uZmlncywgY2xvc3VyZUJ1c3ksIGNvbGxlY3RQcmVkaWNhdGVzLCBmdWxsQ3R4LCBkZXB0aCwgdHJlYXRFb2ZBc0Vwc2lsb24pO1xufTtcblxuXG4vLyBEbyB0aGUgYWN0dWFsIHdvcmsgb2Ygd2Fsa2luZyBlcHNpbG9uIGVkZ2VzLy9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY2xvc3VyZV8gPSBmdW5jdGlvbihjb25maWcsIGNvbmZpZ3MsIGNsb3N1cmVCdXN5LCBjb2xsZWN0UHJlZGljYXRlcywgZnVsbEN0eCwgZGVwdGgsIHRyZWF0RW9mQXNFcHNpbG9uKSB7XG4gICAgdmFyIHAgPSBjb25maWcuc3RhdGU7XG4gICAgLy8gb3B0aW1pemF0aW9uXG4gICAgaWYgKCEgcC5lcHNpbG9uT25seVRyYW5zaXRpb25zKSB7XG4gICAgICAgIGNvbmZpZ3MuYWRkKGNvbmZpZywgdGhpcy5tZXJnZUNhY2hlKTtcbiAgICAgICAgLy8gbWFrZSBzdXJlIHRvIG5vdCByZXR1cm4gaGVyZSwgYmVjYXVzZSBFT0YgdHJhbnNpdGlvbnMgY2FuIGFjdCBhc1xuICAgICAgICAvLyBib3RoIGVwc2lsb24gdHJhbnNpdGlvbnMgYW5kIG5vbi1lcHNpbG9uIHRyYW5zaXRpb25zLlxuICAgIH1cbiAgICBmb3IodmFyIGkgPSAwO2k8cC50cmFuc2l0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZihpPT0wICYmIHRoaXMuY2FuRHJvcExvb3BFbnRyeUVkZ2VJbkxlZnRSZWN1cnNpdmVSdWxlKGNvbmZpZykpXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICB2YXIgdCA9IHAudHJhbnNpdGlvbnNbaV07XG4gICAgICAgIHZhciBjb250aW51ZUNvbGxlY3RpbmcgPSBjb2xsZWN0UHJlZGljYXRlcyAmJiAhKHQgaW5zdGFuY2VvZiBBY3Rpb25UcmFuc2l0aW9uKTtcbiAgICAgICAgdmFyIGMgPSB0aGlzLmdldEVwc2lsb25UYXJnZXQoY29uZmlnLCB0LCBjb250aW51ZUNvbGxlY3RpbmcsIGRlcHRoID09PSAwLCBmdWxsQ3R4LCB0cmVhdEVvZkFzRXBzaWxvbik7XG4gICAgICAgIGlmIChjIT09bnVsbCkge1xuICAgICAgICAgICAgdmFyIG5ld0RlcHRoID0gZGVwdGg7XG4gICAgICAgICAgICBpZiAoIGNvbmZpZy5zdGF0ZSBpbnN0YW5jZW9mIFJ1bGVTdG9wU3RhdGUpIHtcbiAgICAgICAgICAgICAgICAvLyB0YXJnZXQgZmVsbCBvZmYgZW5kIG9mIHJ1bGU7IG1hcmsgcmVzdWx0aW5nIGMgYXMgaGF2aW5nIGRpcHBlZCBpbnRvIG91dGVyIGNvbnRleHRcbiAgICAgICAgICAgICAgICAvLyBXZSBjYW4ndCBnZXQgaGVyZSBpZiBpbmNvbWluZyBjb25maWcgd2FzIHJ1bGUgc3RvcCBhbmQgd2UgaGFkIGNvbnRleHRcbiAgICAgICAgICAgICAgICAvLyB0cmFjayBob3cgZmFyIHdlIGRpcCBpbnRvIG91dGVyIGNvbnRleHQuICBNaWdodFxuICAgICAgICAgICAgICAgIC8vIGNvbWUgaW4gaGFuZHkgYW5kIHdlIGF2b2lkIGV2YWx1YXRpbmcgY29udGV4dCBkZXBlbmRlbnRcbiAgICAgICAgICAgICAgICAvLyBwcmVkcyBpZiB0aGlzIGlzID4gMC5cblx0XHRcdFx0aWYgKHRoaXMuX2RmYSAhPT0gbnVsbCAmJiB0aGlzLl9kZmEucHJlY2VkZW5jZURmYSkge1xuXHRcdFx0XHRcdGlmICh0Lm91dGVybW9zdFByZWNlZGVuY2VSZXR1cm4gPT09IHRoaXMuX2RmYS5hdG5TdGFydFN0YXRlLnJ1bGVJbmRleCkge1xuXHRcdFx0XHRcdFx0Yy5wcmVjZWRlbmNlRmlsdGVyU3VwcHJlc3NlZCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cbiAgICAgICAgICAgICAgICBjLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0ICs9IDE7XG4gICAgICAgICAgICAgICAgaWYgKGNsb3N1cmVCdXN5LmFkZChjKSE9PWMpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uIGZvciByaWdodC1yZWN1cnNpdmUgcnVsZXNcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbmZpZ3MuZGlwc0ludG9PdXRlckNvbnRleHQgPSB0cnVlOyAvLyBUT0RPOiBjYW4gcmVtb3ZlPyBvbmx5IGNhcmUgd2hlbiB3ZSBhZGQgdG8gc2V0IHBlciBtaWRkbGUgb2YgdGhpcyBtZXRob2RcbiAgICAgICAgICAgICAgICBuZXdEZXB0aCAtPSAxO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZGlwcyBpbnRvIG91dGVyIGN0eDogXCIgKyBjKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICghdC5pc0Vwc2lsb24gJiYgY2xvc3VyZUJ1c3kuYWRkKGMpIT09Yyl7XG4gICAgICAgICAgICAgICAgICAgIC8vIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbiBmb3IgRU9GKiBhbmQgRU9GK1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHQgaW5zdGFuY2VvZiBSdWxlVHJhbnNpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAvLyBsYXRjaCB3aGVuIG5ld0RlcHRoIGdvZXMgbmVnYXRpdmUgLSBvbmNlIHdlIHN0ZXAgb3V0IG9mIHRoZSBlbnRyeSBjb250ZXh0IHdlIGNhbid0IHJldHVyblxuICAgICAgICAgICAgICAgICAgICBpZiAobmV3RGVwdGggPj0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3RGVwdGggKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY2xvc3VyZUNoZWNraW5nU3RvcFN0YXRlKGMsIGNvbmZpZ3MsIGNsb3N1cmVCdXN5LCBjb250aW51ZUNvbGxlY3RpbmcsIGZ1bGxDdHgsIG5ld0RlcHRoLCB0cmVhdEVvZkFzRXBzaWxvbik7XG4gICAgICAgIH1cbiAgICB9XG59O1xuXG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY2FuRHJvcExvb3BFbnRyeUVkZ2VJbkxlZnRSZWN1cnNpdmVSdWxlID0gZnVuY3Rpb24oY29uZmlnKSB7XG4gICAgLy8gcmV0dXJuIEZhbHNlXG4gICAgdmFyIHAgPSBjb25maWcuc3RhdGU7XG4gICAgLy8gRmlyc3QgY2hlY2sgdG8gc2VlIGlmIHdlIGFyZSBpbiBTdGFyTG9vcEVudHJ5U3RhdGUgZ2VuZXJhdGVkIGR1cmluZ1xuICAgIC8vIGxlZnQtcmVjdXJzaW9uIGVsaW1pbmF0aW9uLiBGb3IgZWZmaWNpZW5jeSwgYWxzbyBjaGVjayBpZlxuICAgIC8vIHRoZSBjb250ZXh0IGhhcyBhbiBlbXB0eSBzdGFjayBjYXNlLiBJZiBzbywgaXQgd291bGQgbWVhblxuICAgIC8vIGdsb2JhbCBGT0xMT1cgc28gd2UgY2FuJ3QgcGVyZm9ybSBvcHRpbWl6YXRpb25cbiAgICAvLyBBcmUgd2UgdGhlIHNwZWNpYWwgbG9vcCBlbnRyeS9leGl0IHN0YXRlPyBvciBTTEwgd2lsZGNhcmRcbiAgICBpZihwLnN0YXRlVHlwZSAhPSBBVE5TdGF0ZS5TVEFSX0xPT1BfRU5UUlkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZihwLnN0YXRlVHlwZSAhPSBBVE5TdGF0ZS5TVEFSX0xPT1BfRU5UUlkgfHwgIXAuaXNQcmVjZWRlbmNlRGVjaXNpb24gfHxcbiAgICAgICAgICAgY29uZmlnLmNvbnRleHQuaXNFbXB0eSgpIHx8IGNvbmZpZy5jb250ZXh0Lmhhc0VtcHR5UGF0aCgpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBSZXF1aXJlIGFsbCByZXR1cm4gc3RhdGVzIHRvIHJldHVybiBiYWNrIHRvIHRoZSBzYW1lIHJ1bGUgdGhhdCBwIGlzIGluLlxuICAgIHZhciBudW1DdHhzID0gY29uZmlnLmNvbnRleHQubGVuZ3RoO1xuICAgIGZvcih2YXIgaT0wOyBpPG51bUN0eHM7IGkrKykgeyAvLyBmb3IgZWFjaCBzdGFjayBjb250ZXh0XG4gICAgICAgIHZhciByZXR1cm5TdGF0ZSA9IHRoaXMuYXRuLnN0YXRlc1tjb25maWcuY29udGV4dC5nZXRSZXR1cm5TdGF0ZShpKV07XG4gICAgICAgIGlmIChyZXR1cm5TdGF0ZS5ydWxlSW5kZXggIT0gcC5ydWxlSW5kZXgpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIGRlY2lzaW9uU3RhcnRTdGF0ZSA9IHAudHJhbnNpdGlvbnNbMF0udGFyZ2V0O1xuICAgIHZhciBibG9ja0VuZFN0YXRlTnVtID0gZGVjaXNpb25TdGFydFN0YXRlLmVuZFN0YXRlLnN0YXRlTnVtYmVyO1xuICAgIHZhciBibG9ja0VuZFN0YXRlID0gdGhpcy5hdG4uc3RhdGVzW2Jsb2NrRW5kU3RhdGVOdW1dO1xuXG4gICAgLy8gVmVyaWZ5IHRoYXQgdGhlIHRvcCBvZiBlYWNoIHN0YWNrIGNvbnRleHQgbGVhZHMgdG8gbG9vcCBlbnRyeS9leGl0XG4gICAgLy8gc3RhdGUgdGhyb3VnaCBlcHNpbG9uIGVkZ2VzIGFuZCB3L28gbGVhdmluZyBydWxlLlxuICAgIGZvcih2YXIgaT0wOyBpPG51bUN0eHM7IGkrKykgeyAvLyBmb3IgZWFjaCBzdGFjayBjb250ZXh0XG4gICAgICAgIHZhciByZXR1cm5TdGF0ZU51bWJlciA9IGNvbmZpZy5jb250ZXh0LmdldFJldHVyblN0YXRlKGkpO1xuICAgICAgICB2YXIgcmV0dXJuU3RhdGUgPSB0aGlzLmF0bi5zdGF0ZXNbcmV0dXJuU3RhdGVOdW1iZXJdO1xuICAgICAgICAvLyBhbGwgc3RhdGVzIG11c3QgaGF2ZSBzaW5nbGUgb3V0Z29pbmcgZXBzaWxvbiBlZGdlXG4gICAgICAgIGlmIChyZXR1cm5TdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGggIT0gMSB8fCAhcmV0dXJuU3RhdGUudHJhbnNpdGlvbnNbMF0uaXNFcHNpbG9uKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIC8vIExvb2sgZm9yIHByZWZpeCBvcCBjYXNlIGxpa2UgJ25vdCBleHByJywgKCcgdHlwZSAnKScgZXhwclxuICAgICAgICB2YXIgcmV0dXJuU3RhdGVUYXJnZXQgPSByZXR1cm5TdGF0ZS50cmFuc2l0aW9uc1swXS50YXJnZXQ7XG4gICAgICAgIGlmICggcmV0dXJuU3RhdGUuc3RhdGVUeXBlID09IEFUTlN0YXRlLkJMT0NLX0VORCAmJiByZXR1cm5TdGF0ZVRhcmdldCA9PSBwIClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIExvb2sgZm9yICdleHByIG9wIGV4cHInIG9yIGNhc2Ugd2hlcmUgZXhwcidzIHJldHVybiBzdGF0ZSBpcyBibG9jayBlbmRcbiAgICAgICAgLy8gb2YgKC4uLikqIGludGVybmFsIGJsb2NrOyB0aGUgYmxvY2sgZW5kIHBvaW50cyB0byBsb29wIGJhY2tcbiAgICAgICAgLy8gd2hpY2ggcG9pbnRzIHRvIHAgYnV0IHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdGhhdFxuICAgICAgICBpZiAoIHJldHVyblN0YXRlID09IGJsb2NrRW5kU3RhdGUgKVxuICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgLy8gTG9vayBmb3IgdGVybmFyeSBleHByID8gZXhwciA6IGV4cHIuIFRoZSByZXR1cm4gc3RhdGUgcG9pbnRzIGF0IGJsb2NrIGVuZCxcbiAgICAgICAgLy8gd2hpY2ggcG9pbnRzIGF0IGxvb3AgZW50cnkgc3RhdGVcbiAgICAgICAgaWYgKCByZXR1cm5TdGF0ZVRhcmdldCA9PSBibG9ja0VuZFN0YXRlIClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIExvb2sgZm9yIGNvbXBsZXggcHJlZml4ICdiZXR3ZWVuIGV4cHIgYW5kIGV4cHInIGNhc2Ugd2hlcmUgMm5kIGV4cHInc1xuICAgICAgICAvLyByZXR1cm4gc3RhdGUgcG9pbnRzIGF0IGJsb2NrIGVuZCBzdGF0ZSBvZiAoLi4uKSogaW50ZXJuYWwgYmxvY2tcbiAgICAgICAgaWYgKHJldHVyblN0YXRlVGFyZ2V0LnN0YXRlVHlwZSA9PSBBVE5TdGF0ZS5CTE9DS19FTkQgJiYgcmV0dXJuU3RhdGVUYXJnZXQudHJhbnNpdGlvbnMubGVuZ3RoID09IDFcbiAgICAgICAgICAgICAgICAmJiByZXR1cm5TdGF0ZVRhcmdldC50cmFuc2l0aW9uc1swXS5pc0Vwc2lsb24gJiYgcmV0dXJuU3RhdGVUYXJnZXQudHJhbnNpdGlvbnNbMF0udGFyZ2V0ID09IHApXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAvLyBhbnl0aGluZyBlbHNlIGFpbid0IGNvbmZvcm1pbmdcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRSdWxlTmFtZSA9IGZ1bmN0aW9uKCBpbmRleCkge1xuICAgIGlmICh0aGlzLnBhcnNlciE9PW51bGwgJiYgaW5kZXg+PTApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VyLnJ1bGVOYW1lc1tpbmRleF07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFwiPHJ1bGUgXCIgKyBpbmRleCArIFwiPlwiO1xuICAgIH1cbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0RXBzaWxvblRhcmdldCA9IGZ1bmN0aW9uKGNvbmZpZywgdCwgY29sbGVjdFByZWRpY2F0ZXMsIGluQ29udGV4dCwgZnVsbEN0eCwgdHJlYXRFb2ZBc0Vwc2lsb24pIHtcbiAgICBzd2l0Y2godC5zZXJpYWxpemF0aW9uVHlwZSkge1xuICAgIGNhc2UgVHJhbnNpdGlvbi5SVUxFOlxuICAgICAgICByZXR1cm4gdGhpcy5ydWxlVHJhbnNpdGlvbihjb25maWcsIHQpO1xuICAgIGNhc2UgVHJhbnNpdGlvbi5QUkVDRURFTkNFOlxuICAgICAgICByZXR1cm4gdGhpcy5wcmVjZWRlbmNlVHJhbnNpdGlvbihjb25maWcsIHQsIGNvbGxlY3RQcmVkaWNhdGVzLCBpbkNvbnRleHQsIGZ1bGxDdHgpO1xuICAgIGNhc2UgVHJhbnNpdGlvbi5QUkVESUNBVEU6XG4gICAgICAgIHJldHVybiB0aGlzLnByZWRUcmFuc2l0aW9uKGNvbmZpZywgdCwgY29sbGVjdFByZWRpY2F0ZXMsIGluQ29udGV4dCwgZnVsbEN0eCk7XG4gICAgY2FzZSBUcmFuc2l0aW9uLkFDVElPTjpcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aW9uVHJhbnNpdGlvbihjb25maWcsIHQpO1xuICAgIGNhc2UgVHJhbnNpdGlvbi5FUFNJTE9OOlxuICAgICAgICByZXR1cm4gbmV3IEFUTkNvbmZpZyh7c3RhdGU6dC50YXJnZXR9LCBjb25maWcpO1xuICAgIGNhc2UgVHJhbnNpdGlvbi5BVE9NOlxuICAgIGNhc2UgVHJhbnNpdGlvbi5SQU5HRTpcbiAgICBjYXNlIFRyYW5zaXRpb24uU0VUOlxuICAgICAgICAvLyBFT0YgdHJhbnNpdGlvbnMgYWN0IGxpa2UgZXBzaWxvbiB0cmFuc2l0aW9ucyBhZnRlciB0aGUgZmlyc3QgRU9GXG4gICAgICAgIC8vIHRyYW5zaXRpb24gaXMgdHJhdmVyc2VkXG4gICAgICAgIGlmICh0cmVhdEVvZkFzRXBzaWxvbikge1xuICAgICAgICAgICAgaWYgKHQubWF0Y2hlcyhUb2tlbi5FT0YsIDAsIDEpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBBVE5Db25maWcoe3N0YXRlOiB0LnRhcmdldH0sIGNvbmZpZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgZGVmYXVsdDpcbiAgICBcdHJldHVybiBudWxsO1xuICAgIH1cbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuYWN0aW9uVHJhbnNpdGlvbiA9IGZ1bmN0aW9uKGNvbmZpZywgdCkge1xuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIHZhciBpbmRleCA9IHQuYWN0aW9uSW5kZXg9PS0xID8gNjU1MzUgOiB0LmFjdGlvbkluZGV4O1xuICAgICAgICBjb25zb2xlLmxvZyhcIkFDVElPTiBlZGdlIFwiICsgdC5ydWxlSW5kZXggKyBcIjpcIiArIGluZGV4KTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBBVE5Db25maWcoe3N0YXRlOnQudGFyZ2V0fSwgY29uZmlnKTtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucHJlY2VkZW5jZVRyYW5zaXRpb24gPSBmdW5jdGlvbihjb25maWcsIHB0LCAgY29sbGVjdFByZWRpY2F0ZXMsIGluQ29udGV4dCwgZnVsbEN0eCkge1xuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiUFJFRCAoY29sbGVjdFByZWRpY2F0ZXM9XCIgKyBjb2xsZWN0UHJlZGljYXRlcyArIFwiKSBcIiArXG4gICAgICAgICAgICAgICAgcHQucHJlY2VkZW5jZSArIFwiPj1fcCwgY3R4IGRlcGVuZGVudD10cnVlXCIpO1xuICAgICAgICBpZiAodGhpcy5wYXJzZXIhPT1udWxsKSB7XG4gICAgICAgIFx0Y29uc29sZS5sb2coXCJjb250ZXh0IHN1cnJvdW5kaW5nIHByZWQgaXMgXCIgKyBVdGlscy5hcnJheVRvU3RyaW5nKHRoaXMucGFyc2VyLmdldFJ1bGVJbnZvY2F0aW9uU3RhY2soKSkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBjID0gbnVsbDtcbiAgICBpZiAoY29sbGVjdFByZWRpY2F0ZXMgJiYgaW5Db250ZXh0KSB7XG4gICAgICAgIGlmIChmdWxsQ3R4KSB7XG4gICAgICAgICAgICAvLyBJbiBmdWxsIGNvbnRleHQgbW9kZSwgd2UgY2FuIGV2YWx1YXRlIHByZWRpY2F0ZXMgb24tdGhlLWZseVxuICAgICAgICAgICAgLy8gZHVyaW5nIGNsb3N1cmUsIHdoaWNoIGRyYW1hdGljYWxseSByZWR1Y2VzIHRoZSBzaXplIG9mXG4gICAgICAgICAgICAvLyB0aGUgY29uZmlnIHNldHMuIEl0IGFsc28gb2J2aWF0ZXMgdGhlIG5lZWQgdG8gdGVzdCBwcmVkaWNhdGVzXG4gICAgICAgICAgICAvLyBsYXRlciBkdXJpbmcgY29uZmxpY3QgcmVzb2x1dGlvbi5cbiAgICAgICAgICAgIHZhciBjdXJyZW50UG9zaXRpb24gPSB0aGlzLl9pbnB1dC5pbmRleDtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0LnNlZWsodGhpcy5fc3RhcnRJbmRleCk7XG4gICAgICAgICAgICB2YXIgcHJlZFN1Y2NlZWRzID0gcHQuZ2V0UHJlZGljYXRlKCkuZXZhbHVhdGUodGhpcy5wYXJzZXIsIHRoaXMuX291dGVyQ29udGV4dCk7XG4gICAgICAgICAgICB0aGlzLl9pbnB1dC5zZWVrKGN1cnJlbnRQb3NpdGlvbik7XG4gICAgICAgICAgICBpZiAocHJlZFN1Y2NlZWRzKSB7XG4gICAgICAgICAgICAgICAgYyA9IG5ldyBBVE5Db25maWcoe3N0YXRlOnB0LnRhcmdldH0sIGNvbmZpZyk7IC8vIG5vIHByZWQgY29udGV4dFxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFyIG5ld1NlbUN0eCA9IFNlbWFudGljQ29udGV4dC5hbmRDb250ZXh0KGNvbmZpZy5zZW1hbnRpY0NvbnRleHQsIHB0LmdldFByZWRpY2F0ZSgpKTtcbiAgICAgICAgICAgIGMgPSBuZXcgQVROQ29uZmlnKHtzdGF0ZTpwdC50YXJnZXQsIHNlbWFudGljQ29udGV4dDpuZXdTZW1DdHh9LCBjb25maWcpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYyA9IG5ldyBBVE5Db25maWcoe3N0YXRlOnB0LnRhcmdldH0sIGNvbmZpZyk7XG4gICAgfVxuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiY29uZmlnIGZyb20gcHJlZCB0cmFuc2l0aW9uPVwiICsgYyk7XG4gICAgfVxuICAgIHJldHVybiBjO1xufTtcblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5wcmVkVHJhbnNpdGlvbiA9IGZ1bmN0aW9uKGNvbmZpZywgcHQsIGNvbGxlY3RQcmVkaWNhdGVzLCBpbkNvbnRleHQsIGZ1bGxDdHgpIHtcbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlBSRUQgKGNvbGxlY3RQcmVkaWNhdGVzPVwiICsgY29sbGVjdFByZWRpY2F0ZXMgKyBcIikgXCIgKyBwdC5ydWxlSW5kZXggK1xuICAgICAgICAgICAgICAgIFwiOlwiICsgcHQucHJlZEluZGV4ICsgXCIsIGN0eCBkZXBlbmRlbnQ9XCIgKyBwdC5pc0N0eERlcGVuZGVudCk7XG4gICAgICAgIGlmICh0aGlzLnBhcnNlciE9PW51bGwpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY29udGV4dCBzdXJyb3VuZGluZyBwcmVkIGlzIFwiICsgVXRpbHMuYXJyYXlUb1N0cmluZyh0aGlzLnBhcnNlci5nZXRSdWxlSW52b2NhdGlvblN0YWNrKCkpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgYyA9IG51bGw7XG4gICAgaWYgKGNvbGxlY3RQcmVkaWNhdGVzICYmICgocHQuaXNDdHhEZXBlbmRlbnQgJiYgaW5Db250ZXh0KSB8fCAhIHB0LmlzQ3R4RGVwZW5kZW50KSkge1xuICAgICAgICBpZiAoZnVsbEN0eCkge1xuICAgICAgICAgICAgLy8gSW4gZnVsbCBjb250ZXh0IG1vZGUsIHdlIGNhbiBldmFsdWF0ZSBwcmVkaWNhdGVzIG9uLXRoZS1mbHlcbiAgICAgICAgICAgIC8vIGR1cmluZyBjbG9zdXJlLCB3aGljaCBkcmFtYXRpY2FsbHkgcmVkdWNlcyB0aGUgc2l6ZSBvZlxuICAgICAgICAgICAgLy8gdGhlIGNvbmZpZyBzZXRzLiBJdCBhbHNvIG9idmlhdGVzIHRoZSBuZWVkIHRvIHRlc3QgcHJlZGljYXRlc1xuICAgICAgICAgICAgLy8gbGF0ZXIgZHVyaW5nIGNvbmZsaWN0IHJlc29sdXRpb24uXG4gICAgICAgICAgICB2YXIgY3VycmVudFBvc2l0aW9uID0gdGhpcy5faW5wdXQuaW5kZXg7XG4gICAgICAgICAgICB0aGlzLl9pbnB1dC5zZWVrKHRoaXMuX3N0YXJ0SW5kZXgpO1xuICAgICAgICAgICAgdmFyIHByZWRTdWNjZWVkcyA9IHB0LmdldFByZWRpY2F0ZSgpLmV2YWx1YXRlKHRoaXMucGFyc2VyLCB0aGlzLl9vdXRlckNvbnRleHQpO1xuICAgICAgICAgICAgdGhpcy5faW5wdXQuc2VlayhjdXJyZW50UG9zaXRpb24pO1xuICAgICAgICAgICAgaWYgKHByZWRTdWNjZWVkcykge1xuICAgICAgICAgICAgICAgIGMgPSBuZXcgQVROQ29uZmlnKHtzdGF0ZTpwdC50YXJnZXR9LCBjb25maWcpOyAvLyBubyBwcmVkIGNvbnRleHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBuZXdTZW1DdHggPSBTZW1hbnRpY0NvbnRleHQuYW5kQ29udGV4dChjb25maWcuc2VtYW50aWNDb250ZXh0LCBwdC5nZXRQcmVkaWNhdGUoKSk7XG4gICAgICAgICAgICBjID0gbmV3IEFUTkNvbmZpZyh7c3RhdGU6cHQudGFyZ2V0LCBzZW1hbnRpY0NvbnRleHQ6bmV3U2VtQ3R4fSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGMgPSBuZXcgQVROQ29uZmlnKHtzdGF0ZTpwdC50YXJnZXR9LCBjb25maWcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhcImNvbmZpZyBmcm9tIHByZWQgdHJhbnNpdGlvbj1cIiArIGMpO1xuICAgIH1cbiAgICByZXR1cm4gYztcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucnVsZVRyYW5zaXRpb24gPSBmdW5jdGlvbihjb25maWcsIHQpIHtcbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkNBTEwgcnVsZSBcIiArIHRoaXMuZ2V0UnVsZU5hbWUodC50YXJnZXQucnVsZUluZGV4KSArIFwiLCBjdHg9XCIgKyBjb25maWcuY29udGV4dCk7XG4gICAgfVxuICAgIHZhciByZXR1cm5TdGF0ZSA9IHQuZm9sbG93U3RhdGU7XG4gICAgdmFyIG5ld0NvbnRleHQgPSBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5jcmVhdGUoY29uZmlnLmNvbnRleHQsIHJldHVyblN0YXRlLnN0YXRlTnVtYmVyKTtcbiAgICByZXR1cm4gbmV3IEFUTkNvbmZpZyh7c3RhdGU6dC50YXJnZXQsIGNvbnRleHQ6bmV3Q29udGV4dH0sIGNvbmZpZyApO1xufTtcblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRDb25mbGljdGluZ0FsdHMgPSBmdW5jdGlvbihjb25maWdzKSB7XG4gICAgdmFyIGFsdHNldHMgPSBQcmVkaWN0aW9uTW9kZS5nZXRDb25mbGljdGluZ0FsdFN1YnNldHMoY29uZmlncyk7XG4gICAgcmV0dXJuIFByZWRpY3Rpb25Nb2RlLmdldEFsdHMoYWx0c2V0cyk7XG59O1xuXG4gLy8gU2FtIHBvaW50ZWQgb3V0IGEgcHJvYmxlbSB3aXRoIHRoZSBwcmV2aW91cyBkZWZpbml0aW9uLCB2Mywgb2ZcbiAvLyBhbWJpZ3VvdXMgc3RhdGVzLiBJZiB3ZSBoYXZlIGFub3RoZXIgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIGNvbmZsaWN0aW5nXG4gLy8gYWx0ZXJuYXRpdmVzLCB3ZSBzaG91bGQga2VlcCBnb2luZy4gRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgZ3JhbW1hclxuIC8vXG4gLy8gcyA6IChJRCB8IElEIElEPykgJzsnIDtcbiAvL1xuIC8vIFdoZW4gdGhlIEFUTiBzaW11bGF0aW9uIHJlYWNoZXMgdGhlIHN0YXRlIGJlZm9yZSAnOycsIGl0IGhhcyBhIERGQVxuIC8vIHN0YXRlIHRoYXQgbG9va3MgbGlrZTogWzEyfDF8W10sIDZ8MnxbXSwgMTJ8MnxbXV0uIE5hdHVyYWxseVxuIC8vIDEyfDF8W10gYW5kIDEyfDJ8W10gY29uZmxpY3QsIGJ1dCB3ZSBjYW5ub3Qgc3RvcCBwcm9jZXNzaW5nIHRoaXMgbm9kZVxuIC8vIGJlY2F1c2UgYWx0ZXJuYXRpdmUgdG8gaGFzIGFub3RoZXIgd2F5IHRvIGNvbnRpbnVlLCB2aWEgWzZ8MnxbXV0uXG4gLy8gVGhlIGtleSBpcyB0aGF0IHdlIGhhdmUgYSBzaW5nbGUgc3RhdGUgdGhhdCBoYXMgY29uZmlnJ3Mgb25seSBhc3NvY2lhdGVkXG4gLy8gd2l0aCBhIHNpbmdsZSBhbHRlcm5hdGl2ZSwgMiwgYW5kIGNydWNpYWxseSB0aGUgc3RhdGUgdHJhbnNpdGlvbnNcbiAvLyBhbW9uZyB0aGUgY29uZmlndXJhdGlvbnMgYXJlIGFsbCBub24tZXBzaWxvbiB0cmFuc2l0aW9ucy4gVGhhdCBtZWFuc1xuIC8vIHdlIGRvbid0IGNvbnNpZGVyIGFueSBjb25mbGljdHMgdGhhdCBpbmNsdWRlIGFsdGVybmF0aXZlIDIuIFNvLCB3ZVxuIC8vIGlnbm9yZSB0aGUgY29uZmxpY3QgYmV0d2VlbiBhbHRzIDEgYW5kIDIuIFdlIGlnbm9yZSBhIHNldCBvZlxuIC8vIGNvbmZsaWN0aW5nIGFsdHMgd2hlbiB0aGVyZSBpcyBhbiBpbnRlcnNlY3Rpb24gd2l0aCBhbiBhbHRlcm5hdGl2ZVxuIC8vIGFzc29jaWF0ZWQgd2l0aCBhIHNpbmdsZSBhbHQgc3RhdGUgaW4gdGhlIHN0YXRlJnJhcnI7Y29uZmlnLWxpc3QgbWFwLlxuIC8vXG4gLy8gSXQncyBhbHNvIHRoZSBjYXNlIHRoYXQgd2UgbWlnaHQgaGF2ZSB0d28gY29uZmxpY3RpbmcgY29uZmlndXJhdGlvbnMgYnV0XG4gLy8gYWxzbyBhIDNyZCBub25jb25mbGljdGluZyBjb25maWd1cmF0aW9uIGZvciBhIGRpZmZlcmVudCBhbHRlcm5hdGl2ZTpcbiAvLyBbMXwxfFtdLCAxfDJ8W10sIDh8M3xbXV0uIFRoaXMgY2FuIGNvbWUgYWJvdXQgZnJvbSBncmFtbWFyOlxuIC8vXG4gLy8gYSA6IEEgfCBBIHwgQSBCIDtcbiAvL1xuIC8vIEFmdGVyIG1hdGNoaW5nIGlucHV0IEEsIHdlIHJlYWNoIHRoZSBzdG9wIHN0YXRlIGZvciBydWxlIEEsIHN0YXRlIDEuXG4gLy8gU3RhdGUgOCBpcyB0aGUgc3RhdGUgcmlnaHQgYmVmb3JlIEIuIENsZWFybHkgYWx0ZXJuYXRpdmVzIDEgYW5kIDJcbiAvLyBjb25mbGljdCBhbmQgbm8gYW1vdW50IG9mIGZ1cnRoZXIgbG9va2FoZWFkIHdpbGwgc2VwYXJhdGUgdGhlIHR3by5cbiAvLyBIb3dldmVyLCBhbHRlcm5hdGl2ZSAzIHdpbGwgYmUgYWJsZSB0byBjb250aW51ZSBhbmQgc28gd2UgZG8gbm90XG4gLy8gc3RvcCB3b3JraW5nIG9uIHRoaXMgc3RhdGUuIEluIHRoZSBwcmV2aW91cyBleGFtcGxlLCB3ZSdyZSBjb25jZXJuZWRcbiAvLyB3aXRoIHN0YXRlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbmZsaWN0aW5nIGFsdGVybmF0aXZlcy4gSGVyZSBhbHRcbiAvLyAzIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbmZsaWN0aW5nIGNvbmZpZ3MsIGJ1dCBzaW5jZSB3ZSBjYW4gY29udGludWVcbiAvLyBsb29raW5nIGZvciBpbnB1dCByZWFzb25hYmx5LCBJIGRvbid0IGRlY2xhcmUgdGhlIHN0YXRlIGRvbmUuIFdlXG4gLy8gaWdub3JlIGEgc2V0IG9mIGNvbmZsaWN0aW5nIGFsdHMgd2hlbiB3ZSBoYXZlIGFuIGFsdGVybmF0aXZlXG4gLy8gdGhhdCB3ZSBzdGlsbCBuZWVkIHRvIHB1cnN1ZS5cbi8vXG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0Q29uZmxpY3RpbmdBbHRzT3JVbmlxdWVBbHQgPSBmdW5jdGlvbihjb25maWdzKSB7XG4gICAgdmFyIGNvbmZsaWN0aW5nQWx0cyA9IG51bGw7XG4gICAgaWYgKGNvbmZpZ3MudW5pcXVlQWx0IT09IEFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgY29uZmxpY3RpbmdBbHRzID0gbmV3IEJpdFNldCgpO1xuICAgICAgICBjb25mbGljdGluZ0FsdHMuYWRkKGNvbmZpZ3MudW5pcXVlQWx0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25mbGljdGluZ0FsdHMgPSBjb25maWdzLmNvbmZsaWN0aW5nQWx0cztcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZsaWN0aW5nQWx0cztcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0VG9rZW5OYW1lID0gZnVuY3Rpb24oIHQpIHtcbiAgICBpZiAodD09PVRva2VuLkVPRikge1xuICAgICAgICByZXR1cm4gXCJFT0ZcIjtcbiAgICB9XG4gICAgaWYoIHRoaXMucGFyc2VyIT09bnVsbCAmJiB0aGlzLnBhcnNlci5saXRlcmFsTmFtZXMhPT1udWxsKSB7XG4gICAgICAgIGlmICh0ID49IHRoaXMucGFyc2VyLmxpdGVyYWxOYW1lcy5sZW5ndGggJiYgdCA+PSB0aGlzLnBhcnNlci5zeW1ib2xpY05hbWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJcIiArIHQgKyBcIiB0dHlwZSBvdXQgb2YgcmFuZ2U6IFwiICsgdGhpcy5wYXJzZXIubGl0ZXJhbE5hbWVzKTtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiXCIgKyB0aGlzLnBhcnNlci5nZXRJbnB1dFN0cmVhbSgpLmdldFRva2VucygpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gdGhpcy5wYXJzZXIubGl0ZXJhbE5hbWVzW3RdIHx8IHRoaXMucGFyc2VyLnN5bWJvbGljTmFtZXNbdF07XG4gICAgICAgICAgICByZXR1cm4gbmFtZSArIFwiPFwiICsgdCArIFwiPlwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBcIlwiICsgdDtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0TG9va2FoZWFkTmFtZSA9IGZ1bmN0aW9uKGlucHV0KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5OYW1lKGlucHV0LkxBKDEpKTtcbn07XG5cbi8vIFVzZWQgZm9yIGRlYnVnZ2luZyBpbiBhZGFwdGl2ZVByZWRpY3QgYXJvdW5kIGV4ZWNBVE4gYnV0IEkgY3V0XG4vLyAgaXQgb3V0IGZvciBjbGFyaXR5IG5vdyB0aGF0IGFsZy4gd29ya3Mgd2VsbC4gV2UgY2FuIGxlYXZlIHRoaXNcbi8vICBcImRlYWRcIiBjb2RlIGZvciBhIGJpdC5cbi8vXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmR1bXBEZWFkRW5kQ29uZmlncyA9IGZ1bmN0aW9uKG52YWUpIHtcbiAgICBjb25zb2xlLmxvZyhcImRlYWQgZW5kIGNvbmZpZ3M6IFwiKTtcbiAgICB2YXIgZGVjcyA9IG52YWUuZ2V0RGVhZEVuZENvbmZpZ3MoKTtcbiAgICBmb3IodmFyIGk9MDsgaTxkZWNzLmxlbmd0aDsgaSsrKSB7XG4gICAgXHR2YXIgYyA9IGRlY3NbaV07XG4gICAgICAgIHZhciB0cmFucyA9IFwibm8gZWRnZXNcIjtcbiAgICAgICAgaWYgKGMuc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoPjApIHtcbiAgICAgICAgICAgIHZhciB0ID0gYy5zdGF0ZS50cmFuc2l0aW9uc1swXTtcbiAgICAgICAgICAgIGlmICh0IGluc3RhbmNlb2YgQXRvbVRyYW5zaXRpb24pIHtcbiAgICAgICAgICAgICAgICB0cmFucyA9IFwiQXRvbSBcIisgdGhpcy5nZXRUb2tlbk5hbWUodC5sYWJlbCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHQgaW5zdGFuY2VvZiBTZXRUcmFuc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5lZyA9ICh0IGluc3RhbmNlb2YgTm90U2V0VHJhbnNpdGlvbik7XG4gICAgICAgICAgICAgICAgdHJhbnMgPSAobmVnID8gXCJ+XCIgOiBcIlwiKSArIFwiU2V0IFwiICsgdC5zZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc29sZS5lcnJvcihjLnRvU3RyaW5nKHRoaXMucGFyc2VyLCB0cnVlKSArIFwiOlwiICsgdHJhbnMpO1xuICAgIH1cbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUubm9WaWFibGVBbHQgPSBmdW5jdGlvbihpbnB1dCwgb3V0ZXJDb250ZXh0LCBjb25maWdzLCBzdGFydEluZGV4KSB7XG4gICAgcmV0dXJuIG5ldyBOb1ZpYWJsZUFsdEV4Y2VwdGlvbih0aGlzLnBhcnNlciwgaW5wdXQsIGlucHV0LmdldChzdGFydEluZGV4KSwgaW5wdXQuTFQoMSksIGNvbmZpZ3MsIG91dGVyQ29udGV4dCk7XG59O1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmdldFVuaXF1ZUFsdCA9IGZ1bmN0aW9uKGNvbmZpZ3MpIHtcbiAgICB2YXIgYWx0ID0gQVROLklOVkFMSURfQUxUX05VTUJFUjtcbiAgICBmb3IodmFyIGk9MDtpPGNvbmZpZ3MuaXRlbXMubGVuZ3RoO2krKykge1xuICAgIFx0dmFyIGMgPSBjb25maWdzLml0ZW1zW2ldO1xuICAgICAgICBpZiAoYWx0ID09PSBBVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICBhbHQgPSBjLmFsdCAvLyBmb3VuZCBmaXJzdCBhbHRcbiAgICAgICAgfSBlbHNlIGlmKCBjLmFsdCE9PWFsdCkge1xuICAgICAgICAgICAgcmV0dXJuIEFUTi5JTlZBTElEX0FMVF9OVU1CRVI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFsdDtcbn07XG5cbi8vXG4vLyBBZGQgYW4gZWRnZSB0byB0aGUgREZBLCBpZiBwb3NzaWJsZS4gVGhpcyBtZXRob2QgY2FsbHNcbi8vIHtAbGluayAvL2FkZERGQVN0YXRlfSB0byBlbnN1cmUgdGhlIHtAY29kZSB0b30gc3RhdGUgaXMgcHJlc2VudCBpbiB0aGVcbi8vIERGQS4gSWYge0Bjb2RlIGZyb219IGlzIHtAY29kZSBudWxsfSwgb3IgaWYge0Bjb2RlIHR9IGlzIG91dHNpZGUgdGhlXG4vLyByYW5nZSBvZiBlZGdlcyB0aGF0IGNhbiBiZSByZXByZXNlbnRlZCBpbiB0aGUgREZBIHRhYmxlcywgdGhpcyBtZXRob2Rcbi8vIHJldHVybnMgd2l0aG91dCBhZGRpbmcgdGhlIGVkZ2UgdG8gdGhlIERGQS5cbi8vXG4vLyA8cD5JZiB7QGNvZGUgdG99IGlzIHtAY29kZSBudWxsfSwgdGhpcyBtZXRob2QgcmV0dXJucyB7QGNvZGUgbnVsbH0uXG4vLyBPdGhlcndpc2UsIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHtAbGluayBERkFTdGF0ZX0gcmV0dXJuZWQgYnkgY2FsbGluZ1xuLy8ge0BsaW5rIC8vYWRkREZBU3RhdGV9IGZvciB0aGUge0Bjb2RlIHRvfSBzdGF0ZS48L3A+XG4vL1xuLy8gQHBhcmFtIGRmYSBUaGUgREZBXG4vLyBAcGFyYW0gZnJvbSBUaGUgc291cmNlIHN0YXRlIGZvciB0aGUgZWRnZVxuLy8gQHBhcmFtIHQgVGhlIGlucHV0IHN5bWJvbFxuLy8gQHBhcmFtIHRvIFRoZSB0YXJnZXQgc3RhdGUgZm9yIHRoZSBlZGdlXG4vL1xuLy8gQHJldHVybiBJZiB7QGNvZGUgdG99IGlzIHtAY29kZSBudWxsfSwgdGhpcyBtZXRob2QgcmV0dXJucyB7QGNvZGUgbnVsbH07XG4vLyBvdGhlcndpc2UgdGhpcyBtZXRob2QgcmV0dXJucyB0aGUgcmVzdWx0IG9mIGNhbGxpbmcge0BsaW5rIC8vYWRkREZBU3RhdGV9XG4vLyBvbiB7QGNvZGUgdG99XG4vL1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5hZGRERkFFZGdlID0gZnVuY3Rpb24oZGZhLCBmcm9tXywgdCwgdG8pIHtcbiAgICBpZiggdGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhcIkVER0UgXCIgKyBmcm9tXyArIFwiIC0+IFwiICsgdG8gKyBcIiB1cG9uIFwiICsgdGhpcy5nZXRUb2tlbk5hbWUodCkpO1xuICAgIH1cbiAgICBpZiAodG89PT1udWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB0byA9IHRoaXMuYWRkREZBU3RhdGUoZGZhLCB0byk7IC8vIHVzZWQgZXhpc3RpbmcgaWYgcG9zc2libGUgbm90IGluY29taW5nXG4gICAgaWYgKGZyb21fPT09bnVsbCB8fCB0IDwgLTEgfHwgdCA+IHRoaXMuYXRuLm1heFRva2VuVHlwZSkge1xuICAgICAgICByZXR1cm4gdG87XG4gICAgfVxuICAgIGlmIChmcm9tXy5lZGdlcz09PW51bGwpIHtcbiAgICAgICAgZnJvbV8uZWRnZXMgPSBbXTtcbiAgICB9XG4gICAgZnJvbV8uZWRnZXNbdCsxXSA9IHRvOyAvLyBjb25uZWN0XG5cbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICB2YXIgbGl0ZXJhbE5hbWVzID0gdGhpcy5wYXJzZXI9PT1udWxsID8gbnVsbCA6IHRoaXMucGFyc2VyLmxpdGVyYWxOYW1lcztcbiAgICAgICAgdmFyIHN5bWJvbGljTmFtZXMgPSB0aGlzLnBhcnNlcj09PW51bGwgPyBudWxsIDogdGhpcy5wYXJzZXIuc3ltYm9saWNOYW1lcztcbiAgICAgICAgY29uc29sZS5sb2coXCJERkE9XFxuXCIgKyBkZmEudG9TdHJpbmcobGl0ZXJhbE5hbWVzLCBzeW1ib2xpY05hbWVzKSk7XG4gICAgfVxuICAgIHJldHVybiB0bztcbn07XG4vL1xuLy8gQWRkIHN0YXRlIHtAY29kZSBEfSB0byB0aGUgREZBIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHByZXNlbnQsIGFuZCByZXR1cm5cbi8vIHRoZSBhY3R1YWwgaW5zdGFuY2Ugc3RvcmVkIGluIHRoZSBERkEuIElmIGEgc3RhdGUgZXF1aXZhbGVudCB0byB7QGNvZGUgRH1cbi8vIGlzIGFscmVhZHkgaW4gdGhlIERGQSwgdGhlIGV4aXN0aW5nIHN0YXRlIGlzIHJldHVybmVkLiBPdGhlcndpc2UgdGhpc1xuLy8gbWV0aG9kIHJldHVybnMge0Bjb2RlIER9IGFmdGVyIGFkZGluZyBpdCB0byB0aGUgREZBLlxuLy9cbi8vIDxwPklmIHtAY29kZSBEfSBpcyB7QGxpbmsgLy9FUlJPUn0sIHRoaXMgbWV0aG9kIHJldHVybnMge0BsaW5rIC8vRVJST1J9IGFuZFxuLy8gZG9lcyBub3QgY2hhbmdlIHRoZSBERkEuPC9wPlxuLy9cbi8vIEBwYXJhbSBkZmEgVGhlIGRmYVxuLy8gQHBhcmFtIEQgVGhlIERGQSBzdGF0ZSB0byBhZGRcbi8vIEByZXR1cm4gVGhlIHN0YXRlIHN0b3JlZCBpbiB0aGUgREZBLiBUaGlzIHdpbGwgYmUgZWl0aGVyIHRoZSBleGlzdGluZ1xuLy8gc3RhdGUgaWYge0Bjb2RlIER9IGlzIGFscmVhZHkgaW4gdGhlIERGQSwgb3Ige0Bjb2RlIER9IGl0c2VsZiBpZiB0aGVcbi8vIHN0YXRlIHdhcyBub3QgYWxyZWFkeSBwcmVzZW50LlxuLy9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuYWRkREZBU3RhdGUgPSBmdW5jdGlvbihkZmEsIEQpIHtcbiAgICBpZiAoRCA9PSBBVE5TaW11bGF0b3IuRVJST1IpIHtcbiAgICAgICAgcmV0dXJuIEQ7XG4gICAgfVxuICAgIHZhciBleGlzdGluZyA9IGRmYS5zdGF0ZXMuZ2V0KEQpO1xuICAgIGlmKGV4aXN0aW5nIT09bnVsbCkge1xuICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgfVxuICAgIEQuc3RhdGVOdW1iZXIgPSBkZmEuc3RhdGVzLmxlbmd0aDtcbiAgICBpZiAoISBELmNvbmZpZ3MucmVhZE9ubHkpIHtcbiAgICAgICAgRC5jb25maWdzLm9wdGltaXplQ29uZmlncyh0aGlzKTtcbiAgICAgICAgRC5jb25maWdzLnNldFJlYWRvbmx5KHRydWUpO1xuICAgIH1cbiAgICBkZmEuc3RhdGVzLmFkZChEKTtcbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhcImFkZGluZyBuZXcgREZBIHN0YXRlOiBcIiArIEQpO1xuICAgIH1cbiAgICByZXR1cm4gRDtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucmVwb3J0QXR0ZW1wdGluZ0Z1bGxDb250ZXh0ID0gZnVuY3Rpb24oZGZhLCBjb25mbGljdGluZ0FsdHMsIGNvbmZpZ3MsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCkge1xuICAgIGlmICh0aGlzLmRlYnVnIHx8IHRoaXMucmV0cnlfZGVidWcpIHtcbiAgICAgICAgdmFyIGludGVydmFsID0gbmV3IEludGVydmFsKHN0YXJ0SW5kZXgsIHN0b3BJbmRleCArIDEpO1xuICAgICAgICBjb25zb2xlLmxvZyhcInJlcG9ydEF0dGVtcHRpbmdGdWxsQ29udGV4dCBkZWNpc2lvbj1cIiArIGRmYS5kZWNpc2lvbiArIFwiOlwiICsgY29uZmlncyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBcIiwgaW5wdXQ9XCIgKyB0aGlzLnBhcnNlci5nZXRUb2tlblN0cmVhbSgpLmdldFRleHQoaW50ZXJ2YWwpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucGFyc2VyIT09bnVsbCkge1xuICAgICAgICB0aGlzLnBhcnNlci5nZXRFcnJvckxpc3RlbmVyRGlzcGF0Y2goKS5yZXBvcnRBdHRlbXB0aW5nRnVsbENvbnRleHQodGhpcy5wYXJzZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBjb25mbGljdGluZ0FsdHMsIGNvbmZpZ3MpO1xuICAgIH1cbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucmVwb3J0Q29udGV4dFNlbnNpdGl2aXR5ID0gZnVuY3Rpb24oZGZhLCBwcmVkaWN0aW9uLCBjb25maWdzLCBzdGFydEluZGV4LCBzdG9wSW5kZXgpIHtcbiAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLnJldHJ5X2RlYnVnKSB7XG4gICAgICAgIHZhciBpbnRlcnZhbCA9IG5ldyBJbnRlcnZhbChzdGFydEluZGV4LCBzdG9wSW5kZXggKyAxKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJyZXBvcnRDb250ZXh0U2Vuc2l0aXZpdHkgZGVjaXNpb249XCIgKyBkZmEuZGVjaXNpb24gKyBcIjpcIiArIGNvbmZpZ3MgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIsIGlucHV0PVwiICsgdGhpcy5wYXJzZXIuZ2V0VG9rZW5TdHJlYW0oKS5nZXRUZXh0KGludGVydmFsKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnBhcnNlciE9PW51bGwpIHtcbiAgICAgICAgdGhpcy5wYXJzZXIuZ2V0RXJyb3JMaXN0ZW5lckRpc3BhdGNoKCkucmVwb3J0Q29udGV4dFNlbnNpdGl2aXR5KHRoaXMucGFyc2VyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgcHJlZGljdGlvbiwgY29uZmlncyk7XG4gICAgfVxufTtcblxuLy8gSWYgY29udGV4dCBzZW5zaXRpdmUgcGFyc2luZywgd2Uga25vdyBpdCdzIGFtYmlndWl0eSBub3QgY29uZmxpY3QvL1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5yZXBvcnRBbWJpZ3VpdHkgPSBmdW5jdGlvbihkZmEsIEQsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdCwgYW1iaWdBbHRzLCBjb25maWdzICkge1xuICAgIGlmICh0aGlzLmRlYnVnIHx8IHRoaXMucmV0cnlfZGVidWcpIHtcbiAgICAgICAgdmFyIGludGVydmFsID0gbmV3IEludGVydmFsKHN0YXJ0SW5kZXgsIHN0b3BJbmRleCArIDEpO1xuICAgICAgICBjb25zb2xlLmxvZyhcInJlcG9ydEFtYmlndWl0eSBcIiArIGFtYmlnQWx0cyArIFwiOlwiICsgY29uZmlncyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBcIiwgaW5wdXQ9XCIgKyB0aGlzLnBhcnNlci5nZXRUb2tlblN0cmVhbSgpLmdldFRleHQoaW50ZXJ2YWwpKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucGFyc2VyIT09bnVsbCkge1xuICAgICAgICB0aGlzLnBhcnNlci5nZXRFcnJvckxpc3RlbmVyRGlzcGF0Y2goKS5yZXBvcnRBbWJpZ3VpdHkodGhpcy5wYXJzZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBleGFjdCwgYW1iaWdBbHRzLCBjb25maWdzKTtcbiAgICB9XG59O1xuXG5leHBvcnRzLlBhcnNlckFUTlNpbXVsYXRvciA9IFBhcnNlckFUTlNpbXVsYXRvcjsiLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cbi8vXG4vLyBUaGlzIGVudW1lcmF0aW9uIGRlZmluZXMgdGhlIHByZWRpY3Rpb24gbW9kZXMgYXZhaWxhYmxlIGluIEFOVExSIDQgYWxvbmcgd2l0aFxuLy8gdXRpbGl0eSBtZXRob2RzIGZvciBhbmFseXppbmcgY29uZmlndXJhdGlvbiBzZXRzIGZvciBjb25mbGljdHMgYW5kL29yXG4vLyBhbWJpZ3VpdGllcy5cblxudmFyIFNldCA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKS5TZXQ7XG52YXIgTWFwID0gcmVxdWlyZSgnLi8uLi9VdGlscycpLk1hcDtcbnZhciBCaXRTZXQgPSByZXF1aXJlKCcuLy4uL1V0aWxzJykuQml0U2V0O1xudmFyIEFsdERpY3QgPSByZXF1aXJlKCcuLy4uL1V0aWxzJykuQWx0RGljdDtcbnZhciBBVE4gPSByZXF1aXJlKCcuL0FUTicpLkFUTjtcbnZhciBSdWxlU3RvcFN0YXRlID0gcmVxdWlyZSgnLi9BVE5TdGF0ZScpLlJ1bGVTdG9wU3RhdGU7XG52YXIgQVROQ29uZmlnU2V0ID0gcmVxdWlyZSgnLi9BVE5Db25maWdTZXQnKS5BVE5Db25maWdTZXQ7XG52YXIgQVROQ29uZmlnID0gcmVxdWlyZSgnLi9BVE5Db25maWcnKS5BVE5Db25maWc7XG52YXIgU2VtYW50aWNDb250ZXh0ID0gcmVxdWlyZSgnLi9TZW1hbnRpY0NvbnRleHQnKS5TZW1hbnRpY0NvbnRleHQ7XG52YXIgSGFzaCA9IHJlcXVpcmUoXCIuLi9VdGlsc1wiKS5IYXNoO1xudmFyIGhhc2hTdHVmZiA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKS5oYXNoU3R1ZmY7XG52YXIgZXF1YWxBcnJheXMgPSByZXF1aXJlKCcuLy4uL1V0aWxzJykuZXF1YWxBcnJheXM7XG5cbmZ1bmN0aW9uIFByZWRpY3Rpb25Nb2RlKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuLy9cbi8vIFRoZSBTTEwoKikgcHJlZGljdGlvbiBtb2RlLiBUaGlzIHByZWRpY3Rpb24gbW9kZSBpZ25vcmVzIHRoZSBjdXJyZW50XG4vLyBwYXJzZXIgY29udGV4dCB3aGVuIG1ha2luZyBwcmVkaWN0aW9ucy4gVGhpcyBpcyB0aGUgZmFzdGVzdCBwcmVkaWN0aW9uXG4vLyBtb2RlLCBhbmQgcHJvdmlkZXMgY29ycmVjdCByZXN1bHRzIGZvciBtYW55IGdyYW1tYXJzLiBUaGlzIHByZWRpY3Rpb25cbi8vIG1vZGUgaXMgbW9yZSBwb3dlcmZ1bCB0aGFuIHRoZSBwcmVkaWN0aW9uIG1vZGUgcHJvdmlkZWQgYnkgQU5UTFIgMywgYnV0XG4vLyBtYXkgcmVzdWx0IGluIHN5bnRheCBlcnJvcnMgZm9yIGdyYW1tYXIgYW5kIGlucHV0IGNvbWJpbmF0aW9ucyB3aGljaCBhcmVcbi8vIG5vdCBTTEwuXG4vL1xuLy8gPHA+XG4vLyBXaGVuIHVzaW5nIHRoaXMgcHJlZGljdGlvbiBtb2RlLCB0aGUgcGFyc2VyIHdpbGwgZWl0aGVyIHJldHVybiBhIGNvcnJlY3Rcbi8vIHBhcnNlIHRyZWUgKGkuZS4gdGhlIHNhbWUgcGFyc2UgdHJlZSB0aGF0IHdvdWxkIGJlIHJldHVybmVkIHdpdGggdGhlXG4vLyB7QGxpbmsgLy9MTH0gcHJlZGljdGlvbiBtb2RlKSwgb3IgaXQgd2lsbCByZXBvcnQgYSBzeW50YXggZXJyb3IuIElmIGFcbi8vIHN5bnRheCBlcnJvciBpcyBlbmNvdW50ZXJlZCB3aGVuIHVzaW5nIHRoZSB7QGxpbmsgLy9TTEx9IHByZWRpY3Rpb24gbW9kZSxcbi8vIGl0IG1heSBiZSBkdWUgdG8gZWl0aGVyIGFuIGFjdHVhbCBzeW50YXggZXJyb3IgaW4gdGhlIGlucHV0IG9yIGluZGljYXRlXG4vLyB0aGF0IHRoZSBwYXJ0aWN1bGFyIGNvbWJpbmF0aW9uIG9mIGdyYW1tYXIgYW5kIGlucHV0IHJlcXVpcmVzIHRoZSBtb3JlXG4vLyBwb3dlcmZ1bCB7QGxpbmsgLy9MTH0gcHJlZGljdGlvbiBhYmlsaXRpZXMgdG8gY29tcGxldGUgc3VjY2Vzc2Z1bGx5LjwvcD5cbi8vXG4vLyA8cD5cbi8vIFRoaXMgcHJlZGljdGlvbiBtb2RlIGRvZXMgbm90IHByb3ZpZGUgYW55IGd1YXJhbnRlZXMgZm9yIHByZWRpY3Rpb25cbi8vIGJlaGF2aW9yIGZvciBzeW50YWN0aWNhbGx5LWluY29ycmVjdCBpbnB1dHMuPC9wPlxuLy9cblByZWRpY3Rpb25Nb2RlLlNMTCA9IDA7XG4vL1xuLy8gVGhlIExMKCopIHByZWRpY3Rpb24gbW9kZS4gVGhpcyBwcmVkaWN0aW9uIG1vZGUgYWxsb3dzIHRoZSBjdXJyZW50IHBhcnNlclxuLy8gY29udGV4dCB0byBiZSB1c2VkIGZvciByZXNvbHZpbmcgU0xMIGNvbmZsaWN0cyB0aGF0IG9jY3VyIGR1cmluZ1xuLy8gcHJlZGljdGlvbi4gVGhpcyBpcyB0aGUgZmFzdGVzdCBwcmVkaWN0aW9uIG1vZGUgdGhhdCBndWFyYW50ZWVzIGNvcnJlY3Rcbi8vIHBhcnNlIHJlc3VsdHMgZm9yIGFsbCBjb21iaW5hdGlvbnMgb2YgZ3JhbW1hcnMgd2l0aCBzeW50YWN0aWNhbGx5IGNvcnJlY3Rcbi8vIGlucHV0cy5cbi8vXG4vLyA8cD5cbi8vIFdoZW4gdXNpbmcgdGhpcyBwcmVkaWN0aW9uIG1vZGUsIHRoZSBwYXJzZXIgd2lsbCBtYWtlIGNvcnJlY3QgZGVjaXNpb25zXG4vLyBmb3IgYWxsIHN5bnRhY3RpY2FsbHktY29ycmVjdCBncmFtbWFyIGFuZCBpbnB1dCBjb21iaW5hdGlvbnMuIEhvd2V2ZXIsIGluXG4vLyBjYXNlcyB3aGVyZSB0aGUgZ3JhbW1hciBpcyB0cnVseSBhbWJpZ3VvdXMgdGhpcyBwcmVkaWN0aW9uIG1vZGUgbWlnaHQgbm90XG4vLyByZXBvcnQgYSBwcmVjaXNlIGFuc3dlciBmb3IgPGVtPmV4YWN0bHkgd2hpY2g8L2VtPiBhbHRlcm5hdGl2ZXMgYXJlXG4vLyBhbWJpZ3VvdXMuPC9wPlxuLy9cbi8vIDxwPlxuLy8gVGhpcyBwcmVkaWN0aW9uIG1vZGUgZG9lcyBub3QgcHJvdmlkZSBhbnkgZ3VhcmFudGVlcyBmb3IgcHJlZGljdGlvblxuLy8gYmVoYXZpb3IgZm9yIHN5bnRhY3RpY2FsbHktaW5jb3JyZWN0IGlucHV0cy48L3A+XG4vL1xuUHJlZGljdGlvbk1vZGUuTEwgPSAxO1xuLy9cbi8vIFRoZSBMTCgqKSBwcmVkaWN0aW9uIG1vZGUgd2l0aCBleGFjdCBhbWJpZ3VpdHkgZGV0ZWN0aW9uLiBJbiBhZGRpdGlvbiB0b1xuLy8gdGhlIGNvcnJlY3RuZXNzIGd1YXJhbnRlZXMgcHJvdmlkZWQgYnkgdGhlIHtAbGluayAvL0xMfSBwcmVkaWN0aW9uIG1vZGUsXG4vLyB0aGlzIHByZWRpY3Rpb24gbW9kZSBpbnN0cnVjdHMgdGhlIHByZWRpY3Rpb24gYWxnb3JpdGhtIHRvIGRldGVybWluZSB0aGVcbi8vIGNvbXBsZXRlIGFuZCBleGFjdCBzZXQgb2YgYW1iaWd1b3VzIGFsdGVybmF0aXZlcyBmb3IgZXZlcnkgYW1iaWd1b3VzXG4vLyBkZWNpc2lvbiBlbmNvdW50ZXJlZCB3aGlsZSBwYXJzaW5nLlxuLy9cbi8vIDxwPlxuLy8gVGhpcyBwcmVkaWN0aW9uIG1vZGUgbWF5IGJlIHVzZWQgZm9yIGRpYWdub3NpbmcgYW1iaWd1aXRpZXMgZHVyaW5nXG4vLyBncmFtbWFyIGRldmVsb3BtZW50LiBEdWUgdG8gdGhlIHBlcmZvcm1hbmNlIG92ZXJoZWFkIG9mIGNhbGN1bGF0aW5nIHNldHNcbi8vIG9mIGFtYmlndW91cyBhbHRlcm5hdGl2ZXMsIHRoaXMgcHJlZGljdGlvbiBtb2RlIHNob3VsZCBiZSBhdm9pZGVkIHdoZW5cbi8vIHRoZSBleGFjdCByZXN1bHRzIGFyZSBub3QgbmVjZXNzYXJ5LjwvcD5cbi8vXG4vLyA8cD5cbi8vIFRoaXMgcHJlZGljdGlvbiBtb2RlIGRvZXMgbm90IHByb3ZpZGUgYW55IGd1YXJhbnRlZXMgZm9yIHByZWRpY3Rpb25cbi8vIGJlaGF2aW9yIGZvciBzeW50YWN0aWNhbGx5LWluY29ycmVjdCBpbnB1dHMuPC9wPlxuLy9cblByZWRpY3Rpb25Nb2RlLkxMX0VYQUNUX0FNQklHX0RFVEVDVElPTiA9IDI7XG5cblxuLy9cbi8vIENvbXB1dGVzIHRoZSBTTEwgcHJlZGljdGlvbiB0ZXJtaW5hdGlvbiBjb25kaXRpb24uXG4vL1xuLy8gPHA+XG4vLyBUaGlzIG1ldGhvZCBjb21wdXRlcyB0aGUgU0xMIHByZWRpY3Rpb24gdGVybWluYXRpb24gY29uZGl0aW9uIGZvciBib3RoIG9mXG4vLyB0aGUgZm9sbG93aW5nIGNhc2VzLjwvcD5cbi8vXG4vLyA8dWw+XG4vLyA8bGk+VGhlIHVzdWFsIFNMTCtMTCBmYWxsYmFjayB1cG9uIFNMTCBjb25mbGljdDwvbGk+XG4vLyA8bGk+UHVyZSBTTEwgd2l0aG91dCBMTCBmYWxsYmFjazwvbGk+XG4vLyA8L3VsPlxuLy9cbi8vIDxwPjxzdHJvbmc+Q09NQklORUQgU0xMK0xMIFBBUlNJTkc8L3N0cm9uZz48L3A+XG4vL1xuLy8gPHA+V2hlbiBMTC1mYWxsYmFjayBpcyBlbmFibGVkIHVwb24gU0xMIGNvbmZsaWN0LCBjb3JyZWN0IHByZWRpY3Rpb25zIGFyZVxuLy8gZW5zdXJlZCByZWdhcmRsZXNzIG9mIGhvdyB0aGUgdGVybWluYXRpb24gY29uZGl0aW9uIGlzIGNvbXB1dGVkIGJ5IHRoaXNcbi8vIG1ldGhvZC4gRHVlIHRvIHRoZSBzdWJzdGFudGlhbGx5IGhpZ2hlciBjb3N0IG9mIExMIHByZWRpY3Rpb24sIHRoZVxuLy8gcHJlZGljdGlvbiBzaG91bGQgb25seSBmYWxsIGJhY2sgdG8gTEwgd2hlbiB0aGUgYWRkaXRpb25hbCBsb29rYWhlYWRcbi8vIGNhbm5vdCBsZWFkIHRvIGEgdW5pcXVlIFNMTCBwcmVkaWN0aW9uLjwvcD5cbi8vXG4vLyA8cD5Bc3N1bWluZyBjb21iaW5lZCBTTEwrTEwgcGFyc2luZywgYW4gU0xMIGNvbmZpZ3VyYXRpb24gc2V0IHdpdGggb25seVxuLy8gY29uZmxpY3Rpbmcgc3Vic2V0cyBzaG91bGQgZmFsbCBiYWNrIHRvIGZ1bGwgTEwsIGV2ZW4gaWYgdGhlXG4vLyBjb25maWd1cmF0aW9uIHNldHMgZG9uJ3QgcmVzb2x2ZSB0byB0aGUgc2FtZSBhbHRlcm5hdGl2ZSAoZS5nLlxuLy8ge0Bjb2RlIHsxLDJ9fSBhbmQge0Bjb2RlIHszLDR9fS4gSWYgdGhlcmUgaXMgYXQgbGVhc3Qgb25lIG5vbi1jb25mbGljdGluZ1xuLy8gY29uZmlndXJhdGlvbiwgU0xMIGNvdWxkIGNvbnRpbnVlIHdpdGggdGhlIGhvcGVzIHRoYXQgbW9yZSBsb29rYWhlYWQgd2lsbFxuLy8gcmVzb2x2ZSB2aWEgb25lIG9mIHRob3NlIG5vbi1jb25mbGljdGluZyBjb25maWd1cmF0aW9ucy48L3A+XG4vL1xuLy8gPHA+SGVyZSdzIHRoZSBwcmVkaWN0aW9uIHRlcm1pbmF0aW9uIHJ1bGUgdGhlbTogU0xMIChmb3IgU0xMK0xMIHBhcnNpbmcpXG4vLyBzdG9wcyB3aGVuIGl0IHNlZXMgb25seSBjb25mbGljdGluZyBjb25maWd1cmF0aW9uIHN1YnNldHMuIEluIGNvbnRyYXN0LFxuLy8gZnVsbCBMTCBrZWVwcyBnb2luZyB3aGVuIHRoZXJlIGlzIHVuY2VydGFpbnR5LjwvcD5cbi8vXG4vLyA8cD48c3Ryb25nPkhFVVJJU1RJQzwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5BcyBhIGhldXJpc3RpYywgd2Ugc3RvcCBwcmVkaWN0aW9uIHdoZW4gd2Ugc2VlIGFueSBjb25mbGljdGluZyBzdWJzZXRcbi8vIHVubGVzcyB3ZSBzZWUgYSBzdGF0ZSB0aGF0IG9ubHkgaGFzIG9uZSBhbHRlcm5hdGl2ZSBhc3NvY2lhdGVkIHdpdGggaXQuXG4vLyBUaGUgc2luZ2xlLWFsdC1zdGF0ZSB0aGluZyBsZXRzIHByZWRpY3Rpb24gY29udGludWUgdXBvbiBydWxlcyBsaWtlXG4vLyAob3RoZXJ3aXNlLCBpdCB3b3VsZCBhZG1pdCBkZWZlYXQgdG9vIHNvb24pOjwvcD5cbi8vXG4vLyA8cD57QGNvZGUgWzEyfDF8W10sIDZ8MnxbXSwgMTJ8MnxbXV0uIHMgOiAoSUQgfCBJRCBJRD8pICc7JyA7fTwvcD5cbi8vXG4vLyA8cD5XaGVuIHRoZSBBVE4gc2ltdWxhdGlvbiByZWFjaGVzIHRoZSBzdGF0ZSBiZWZvcmUge0Bjb2RlICc7J30sIGl0IGhhcyBhXG4vLyBERkEgc3RhdGUgdGhhdCBsb29rcyBsaWtlOiB7QGNvZGUgWzEyfDF8W10sIDZ8MnxbXSwgMTJ8MnxbXV19LiBOYXR1cmFsbHlcbi8vIHtAY29kZSAxMnwxfFtdfSBhbmQge0Bjb2RlIDEyfDJ8W119IGNvbmZsaWN0LCBidXQgd2UgY2Fubm90IHN0b3Bcbi8vIHByb2Nlc3NpbmcgdGhpcyBub2RlIGJlY2F1c2UgYWx0ZXJuYXRpdmUgdG8gaGFzIGFub3RoZXIgd2F5IHRvIGNvbnRpbnVlLFxuLy8gdmlhIHtAY29kZSBbNnwyfFtdXX0uPC9wPlxuLy9cbi8vIDxwPkl0IGFsc28gbGV0J3MgdXMgY29udGludWUgZm9yIHRoaXMgcnVsZTo8L3A+XG4vL1xuLy8gPHA+e0Bjb2RlIFsxfDF8W10sIDF8MnxbXSwgOHwzfFtdXSBhIDogQSB8IEEgfCBBIEIgO308L3A+XG4vL1xuLy8gPHA+QWZ0ZXIgbWF0Y2hpbmcgaW5wdXQgQSwgd2UgcmVhY2ggdGhlIHN0b3Agc3RhdGUgZm9yIHJ1bGUgQSwgc3RhdGUgMS5cbi8vIFN0YXRlIDggaXMgdGhlIHN0YXRlIHJpZ2h0IGJlZm9yZSBCLiBDbGVhcmx5IGFsdGVybmF0aXZlcyAxIGFuZCAyXG4vLyBjb25mbGljdCBhbmQgbm8gYW1vdW50IG9mIGZ1cnRoZXIgbG9va2FoZWFkIHdpbGwgc2VwYXJhdGUgdGhlIHR3by5cbi8vIEhvd2V2ZXIsIGFsdGVybmF0aXZlIDMgd2lsbCBiZSBhYmxlIHRvIGNvbnRpbnVlIGFuZCBzbyB3ZSBkbyBub3Qgc3RvcFxuLy8gd29ya2luZyBvbiB0aGlzIHN0YXRlLiBJbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgd2UncmUgY29uY2VybmVkIHdpdGhcbi8vIHN0YXRlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbmZsaWN0aW5nIGFsdGVybmF0aXZlcy4gSGVyZSBhbHQgMyBpcyBub3Rcbi8vIGFzc29jaWF0ZWQgd2l0aCB0aGUgY29uZmxpY3RpbmcgY29uZmlncywgYnV0IHNpbmNlIHdlIGNhbiBjb250aW51ZVxuLy8gbG9va2luZyBmb3IgaW5wdXQgcmVhc29uYWJseSwgZG9uJ3QgZGVjbGFyZSB0aGUgc3RhdGUgZG9uZS48L3A+XG4vL1xuLy8gPHA+PHN0cm9uZz5QVVJFIFNMTCBQQVJTSU5HPC9zdHJvbmc+PC9wPlxuLy9cbi8vIDxwPlRvIGhhbmRsZSBwdXJlIFNMTCBwYXJzaW5nLCBhbGwgd2UgaGF2ZSB0byBkbyBpcyBtYWtlIHN1cmUgdGhhdCB3ZVxuLy8gY29tYmluZSBzdGFjayBjb250ZXh0cyBmb3IgY29uZmlndXJhdGlvbnMgdGhhdCBkaWZmZXIgb25seSBieSBzZW1hbnRpY1xuLy8gcHJlZGljYXRlLiBGcm9tIHRoZXJlLCB3ZSBjYW4gZG8gdGhlIHVzdWFsIFNMTCB0ZXJtaW5hdGlvbiBoZXVyaXN0aWMuPC9wPlxuLy9cbi8vIDxwPjxzdHJvbmc+UFJFRElDQVRFUyBJTiBTTEwrTEwgUEFSU0lORzwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5TTEwgZGVjaXNpb25zIGRvbid0IGV2YWx1YXRlIHByZWRpY2F0ZXMgdW50aWwgYWZ0ZXIgdGhleSByZWFjaCBERkEgc3RvcFxuLy8gc3RhdGVzIGJlY2F1c2UgdGhleSBuZWVkIHRvIGNyZWF0ZSB0aGUgREZBIGNhY2hlIHRoYXQgd29ya3MgaW4gYWxsXG4vLyBzZW1hbnRpYyBzaXR1YXRpb25zLiBJbiBjb250cmFzdCwgZnVsbCBMTCBldmFsdWF0ZXMgcHJlZGljYXRlcyBjb2xsZWN0ZWRcbi8vIGR1cmluZyBzdGFydCBzdGF0ZSBjb21wdXRhdGlvbiBzbyBpdCBjYW4gaWdub3JlIHByZWRpY2F0ZXMgdGhlcmVhZnRlci5cbi8vIFRoaXMgbWVhbnMgdGhhdCBTTEwgdGVybWluYXRpb24gZGV0ZWN0aW9uIGNhbiB0b3RhbGx5IGlnbm9yZSBzZW1hbnRpY1xuLy8gcHJlZGljYXRlcy48L3A+XG4vL1xuLy8gPHA+SW1wbGVtZW50YXRpb24td2lzZSwge0BsaW5rIEFUTkNvbmZpZ1NldH0gY29tYmluZXMgc3RhY2sgY29udGV4dHMgYnV0IG5vdFxuLy8gc2VtYW50aWMgcHJlZGljYXRlIGNvbnRleHRzIHNvIHdlIG1pZ2h0IHNlZSB0d28gY29uZmlndXJhdGlvbnMgbGlrZSB0aGVcbi8vIGZvbGxvd2luZy48L3A+XG4vL1xuLy8gPHA+e0Bjb2RlIChzLCAxLCB4LCB7fSksIChzLCAxLCB4Jywge3B9KX08L3A+XG4vL1xuLy8gPHA+QmVmb3JlIHRlc3RpbmcgdGhlc2UgY29uZmlndXJhdGlvbnMgYWdhaW5zdCBvdGhlcnMsIHdlIGhhdmUgdG8gbWVyZ2Vcbi8vIHtAY29kZSB4fSBhbmQge0Bjb2RlIHgnfSAod2l0aG91dCBtb2RpZnlpbmcgdGhlIGV4aXN0aW5nIGNvbmZpZ3VyYXRpb25zKS5cbi8vIEZvciBleGFtcGxlLCB3ZSB0ZXN0IHtAY29kZSAoeCt4Jyk9PXgnJ30gd2hlbiBsb29raW5nIGZvciBjb25mbGljdHMgaW5cbi8vIHRoZSBmb2xsb3dpbmcgY29uZmlndXJhdGlvbnMuPC9wPlxuLy9cbi8vIDxwPntAY29kZSAocywgMSwgeCwge30pLCAocywgMSwgeCcsIHtwfSksIChzLCAyLCB4JycsIHt9KX08L3A+XG4vL1xuLy8gPHA+SWYgdGhlIGNvbmZpZ3VyYXRpb24gc2V0IGhhcyBwcmVkaWNhdGVzIChhcyBpbmRpY2F0ZWQgYnlcbi8vIHtAbGluayBBVE5Db25maWdTZXQvL2hhc1NlbWFudGljQ29udGV4dH0pLCB0aGlzIGFsZ29yaXRobSBtYWtlcyBhIGNvcHkgb2Zcbi8vIHRoZSBjb25maWd1cmF0aW9ucyB0byBzdHJpcCBvdXQgYWxsIG9mIHRoZSBwcmVkaWNhdGVzIHNvIHRoYXQgYSBzdGFuZGFyZFxuLy8ge0BsaW5rIEFUTkNvbmZpZ1NldH0gd2lsbCBtZXJnZSBldmVyeXRoaW5nIGlnbm9yaW5nIHByZWRpY2F0ZXMuPC9wPlxuLy9cblByZWRpY3Rpb25Nb2RlLmhhc1NMTENvbmZsaWN0VGVybWluYXRpbmdQcmVkaWN0aW9uID0gZnVuY3Rpb24oIG1vZGUsIGNvbmZpZ3MpIHtcbiAgICAvLyBDb25maWdzIGluIHJ1bGUgc3RvcCBzdGF0ZXMgaW5kaWNhdGUgcmVhY2hpbmcgdGhlIGVuZCBvZiB0aGUgZGVjaXNpb25cbiAgICAvLyBydWxlIChsb2NhbCBjb250ZXh0KSBvciBlbmQgb2Ygc3RhcnQgcnVsZSAoZnVsbCBjb250ZXh0KS4gSWYgYWxsXG4gICAgLy8gY29uZmlncyBtZWV0IHRoaXMgY29uZGl0aW9uLCB0aGVuIG5vbmUgb2YgdGhlIGNvbmZpZ3VyYXRpb25zIGlzIGFibGVcbiAgICAvLyB0byBtYXRjaCBhZGRpdGlvbmFsIGlucHV0IHNvIHdlIHRlcm1pbmF0ZSBwcmVkaWN0aW9uLlxuICAgIC8vXG4gICAgaWYgKFByZWRpY3Rpb25Nb2RlLmFsbENvbmZpZ3NJblJ1bGVTdG9wU3RhdGVzKGNvbmZpZ3MpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICAvLyBwdXJlIFNMTCBtb2RlIHBhcnNpbmdcbiAgICBpZiAobW9kZSA9PT0gUHJlZGljdGlvbk1vZGUuU0xMKSB7XG4gICAgICAgIC8vIERvbid0IGJvdGhlciB3aXRoIGNvbWJpbmluZyBjb25maWdzIGZyb20gZGlmZmVyZW50IHNlbWFudGljXG4gICAgICAgIC8vIGNvbnRleHRzIGlmIHdlIGNhbiBmYWlsIG92ZXIgdG8gZnVsbCBMTDsgY29zdHMgbW9yZSB0aW1lXG4gICAgICAgIC8vIHNpbmNlIHdlJ2xsIG9mdGVuIGZhaWwgb3ZlciBhbnl3YXkuXG4gICAgICAgIGlmIChjb25maWdzLmhhc1NlbWFudGljQ29udGV4dCkge1xuICAgICAgICAgICAgLy8gZHVwIGNvbmZpZ3MsIHRvc3Npbmcgb3V0IHNlbWFudGljIHByZWRpY2F0ZXNcbiAgICAgICAgICAgIHZhciBkdXAgPSBuZXcgQVROQ29uZmlnU2V0KCk7XG4gICAgICAgICAgICBmb3IodmFyIGk9MDtpPGNvbmZpZ3MuaXRlbXMubGVuZ3RoO2krKykge1xuICAgICAgICAgICAgXHR2YXIgYyA9IGNvbmZpZ3MuaXRlbXNbaV07XG4gICAgICAgICAgICAgICAgYyA9IG5ldyBBVE5Db25maWcoe3NlbWFudGljQ29udGV4dDpTZW1hbnRpY0NvbnRleHQuTk9ORX0sIGMpO1xuICAgICAgICAgICAgICAgIGR1cC5hZGQoYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25maWdzID0gZHVwO1xuICAgICAgICB9XG4gICAgICAgIC8vIG5vdyB3ZSBoYXZlIGNvbWJpbmVkIGNvbnRleHRzIGZvciBjb25maWdzIHdpdGggZGlzc2ltaWxhciBwcmVkc1xuICAgIH1cbiAgICAvLyBwdXJlIFNMTCBvciBjb21iaW5lZCBTTEwrTEwgbW9kZSBwYXJzaW5nXG4gICAgdmFyIGFsdHNldHMgPSBQcmVkaWN0aW9uTW9kZS5nZXRDb25mbGljdGluZ0FsdFN1YnNldHMoY29uZmlncyk7XG4gICAgcmV0dXJuIFByZWRpY3Rpb25Nb2RlLmhhc0NvbmZsaWN0aW5nQWx0U2V0KGFsdHNldHMpICYmICFQcmVkaWN0aW9uTW9kZS5oYXNTdGF0ZUFzc29jaWF0ZWRXaXRoT25lQWx0KGNvbmZpZ3MpO1xufTtcblxuLy8gQ2hlY2tzIGlmIGFueSBjb25maWd1cmF0aW9uIGluIHtAY29kZSBjb25maWdzfSBpcyBpbiBhXG4vLyB7QGxpbmsgUnVsZVN0b3BTdGF0ZX0uIENvbmZpZ3VyYXRpb25zIG1lZXRpbmcgdGhpcyBjb25kaXRpb24gaGF2ZSByZWFjaGVkXG4vLyB0aGUgZW5kIG9mIHRoZSBkZWNpc2lvbiBydWxlIChsb2NhbCBjb250ZXh0KSBvciBlbmQgb2Ygc3RhcnQgcnVsZSAoZnVsbFxuLy8gY29udGV4dCkuXG4vL1xuLy8gQHBhcmFtIGNvbmZpZ3MgdGhlIGNvbmZpZ3VyYXRpb24gc2V0IHRvIHRlc3Rcbi8vIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIGFueSBjb25maWd1cmF0aW9uIGluIHtAY29kZSBjb25maWdzfSBpcyBpbiBhXG4vLyB7QGxpbmsgUnVsZVN0b3BTdGF0ZX0sIG90aGVyd2lzZSB7QGNvZGUgZmFsc2V9XG5QcmVkaWN0aW9uTW9kZS5oYXNDb25maWdJblJ1bGVTdG9wU3RhdGUgPSBmdW5jdGlvbihjb25maWdzKSB7XG5cdGZvcih2YXIgaT0wO2k8Y29uZmlncy5pdGVtcy5sZW5ndGg7aSsrKSB7XG5cdFx0dmFyIGMgPSBjb25maWdzLml0ZW1zW2ldO1xuICAgICAgICBpZiAoYy5zdGF0ZSBpbnN0YW5jZW9mIFJ1bGVTdG9wU3RhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cdH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vLyBDaGVja3MgaWYgYWxsIGNvbmZpZ3VyYXRpb25zIGluIHtAY29kZSBjb25maWdzfSBhcmUgaW4gYVxuLy8ge0BsaW5rIFJ1bGVTdG9wU3RhdGV9LiBDb25maWd1cmF0aW9ucyBtZWV0aW5nIHRoaXMgY29uZGl0aW9uIGhhdmUgcmVhY2hlZFxuLy8gdGhlIGVuZCBvZiB0aGUgZGVjaXNpb24gcnVsZSAobG9jYWwgY29udGV4dCkgb3IgZW5kIG9mIHN0YXJ0IHJ1bGUgKGZ1bGxcbi8vIGNvbnRleHQpLlxuLy9cbi8vIEBwYXJhbSBjb25maWdzIHRoZSBjb25maWd1cmF0aW9uIHNldCB0byB0ZXN0XG4vLyBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiBhbGwgY29uZmlndXJhdGlvbnMgaW4ge0Bjb2RlIGNvbmZpZ3N9IGFyZSBpbiBhXG4vLyB7QGxpbmsgUnVsZVN0b3BTdGF0ZX0sIG90aGVyd2lzZSB7QGNvZGUgZmFsc2V9XG5QcmVkaWN0aW9uTW9kZS5hbGxDb25maWdzSW5SdWxlU3RvcFN0YXRlcyA9IGZ1bmN0aW9uKGNvbmZpZ3MpIHtcblx0Zm9yKHZhciBpPTA7aTxjb25maWdzLml0ZW1zLmxlbmd0aDtpKyspIHtcblx0XHR2YXIgYyA9IGNvbmZpZ3MuaXRlbXNbaV07XG4gICAgICAgIGlmICghKGMuc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cdH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8vXG4vLyBGdWxsIExMIHByZWRpY3Rpb24gdGVybWluYXRpb24uXG4vL1xuLy8gPHA+Q2FuIHdlIHN0b3AgbG9va2luZyBhaGVhZCBkdXJpbmcgQVROIHNpbXVsYXRpb24gb3IgaXMgdGhlcmUgc29tZVxuLy8gdW5jZXJ0YWludHkgYXMgdG8gd2hpY2ggYWx0ZXJuYXRpdmUgd2Ugd2lsbCB1bHRpbWF0ZWx5IHBpY2ssIGFmdGVyXG4vLyBjb25zdW1pbmcgbW9yZSBpbnB1dD8gRXZlbiBpZiB0aGVyZSBhcmUgcGFydGlhbCBjb25mbGljdHMsIHdlIG1pZ2h0IGtub3dcbi8vIHRoYXQgZXZlcnl0aGluZyBpcyBnb2luZyB0byByZXNvbHZlIHRvIHRoZSBzYW1lIG1pbmltdW0gYWx0ZXJuYXRpdmUuIFRoYXRcbi8vIG1lYW5zIHdlIGNhbiBzdG9wIHNpbmNlIG5vIG1vcmUgbG9va2FoZWFkIHdpbGwgY2hhbmdlIHRoYXQgZmFjdC4gT24gdGhlXG4vLyBvdGhlciBoYW5kLCB0aGVyZSBtaWdodCBiZSBtdWx0aXBsZSBjb25mbGljdHMgdGhhdCByZXNvbHZlIHRvIGRpZmZlcmVudFxuLy8gbWluaW11bXMuIFRoYXQgbWVhbnMgd2UgbmVlZCBtb3JlIGxvb2sgYWhlYWQgdG8gZGVjaWRlIHdoaWNoIG9mIHRob3NlXG4vLyBhbHRlcm5hdGl2ZXMgd2Ugc2hvdWxkIHByZWRpY3QuPC9wPlxuLy9cbi8vIDxwPlRoZSBiYXNpYyBpZGVhIGlzIHRvIHNwbGl0IHRoZSBzZXQgb2YgY29uZmlndXJhdGlvbnMge0Bjb2RlIEN9LCBpbnRvXG4vLyBjb25mbGljdGluZyBzdWJzZXRzIHtAY29kZSAocywgXywgY3R4LCBfKX0gYW5kIHNpbmdsZXRvbiBzdWJzZXRzIHdpdGhcbi8vIG5vbi1jb25mbGljdGluZyBjb25maWd1cmF0aW9ucy4gVHdvIGNvbmZpZ3VyYXRpb25zIGNvbmZsaWN0IGlmIHRoZXkgaGF2ZVxuLy8gaWRlbnRpY2FsIHtAbGluayBBVE5Db25maWcvL3N0YXRlfSBhbmQge0BsaW5rIEFUTkNvbmZpZy8vY29udGV4dH0gdmFsdWVzXG4vLyBidXQgZGlmZmVyZW50IHtAbGluayBBVE5Db25maWcvL2FsdH0gdmFsdWUsIGUuZy4ge0Bjb2RlIChzLCBpLCBjdHgsIF8pfVxuLy8gYW5kIHtAY29kZSAocywgaiwgY3R4LCBfKX0gZm9yIHtAY29kZSBpIT1qfS48L3A+XG4vL1xuLy8gPHA+UmVkdWNlIHRoZXNlIGNvbmZpZ3VyYXRpb24gc3Vic2V0cyB0byB0aGUgc2V0IG9mIHBvc3NpYmxlIGFsdGVybmF0aXZlcy5cbi8vIFlvdSBjYW4gY29tcHV0ZSB0aGUgYWx0ZXJuYXRpdmUgc3Vic2V0cyBpbiBvbmUgcGFzcyBhcyBmb2xsb3dzOjwvcD5cbi8vXG4vLyA8cD57QGNvZGUgQV9zLGN0eCA9IHtpIHwgKHMsIGksIGN0eCwgXyl9fSBmb3IgZWFjaCBjb25maWd1cmF0aW9uIGluXG4vLyB7QGNvZGUgQ30gaG9sZGluZyB7QGNvZGUgc30gYW5kIHtAY29kZSBjdHh9IGZpeGVkLjwvcD5cbi8vXG4vLyA8cD5PciBpbiBwc2V1ZG8tY29kZSwgZm9yIGVhY2ggY29uZmlndXJhdGlvbiB7QGNvZGUgY30gaW4ge0Bjb2RlIEN9OjwvcD5cbi8vXG4vLyA8cHJlPlxuLy8gbWFwW2NdIFU9IGMue0BsaW5rIEFUTkNvbmZpZy8vYWx0IGFsdH0gLy8gbWFwIGhhc2gvZXF1YWxzIHVzZXMgcyBhbmQgeCwgbm90XG4vLyBhbHQgYW5kIG5vdCBwcmVkXG4vLyA8L3ByZT5cbi8vXG4vLyA8cD5UaGUgdmFsdWVzIGluIHtAY29kZSBtYXB9IGFyZSB0aGUgc2V0IG9mIHtAY29kZSBBX3MsY3R4fSBzZXRzLjwvcD5cbi8vXG4vLyA8cD5JZiB7QGNvZGUgfEFfcyxjdHh8PTF9IHRoZW4gdGhlcmUgaXMgbm8gY29uZmxpY3QgYXNzb2NpYXRlZCB3aXRoXG4vLyB7QGNvZGUgc30gYW5kIHtAY29kZSBjdHh9LjwvcD5cbi8vXG4vLyA8cD5SZWR1Y2UgdGhlIHN1YnNldHMgdG8gc2luZ2xldG9ucyBieSBjaG9vc2luZyBhIG1pbmltdW0gb2YgZWFjaCBzdWJzZXQuIElmXG4vLyB0aGUgdW5pb24gb2YgdGhlc2UgYWx0ZXJuYXRpdmUgc3Vic2V0cyBpcyBhIHNpbmdsZXRvbiwgdGhlbiBubyBhbW91bnQgb2Zcbi8vIG1vcmUgbG9va2FoZWFkIHdpbGwgaGVscCB1cy4gV2Ugd2lsbCBhbHdheXMgcGljayB0aGF0IGFsdGVybmF0aXZlLiBJZixcbi8vIGhvd2V2ZXIsIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgYWx0ZXJuYXRpdmUsIHRoZW4gd2UgYXJlIHVuY2VydGFpbiB3aGljaFxuLy8gYWx0ZXJuYXRpdmUgdG8gcHJlZGljdCBhbmQgbXVzdCBjb250aW51ZSBsb29raW5nIGZvciByZXNvbHV0aW9uLiBXZSBtYXlcbi8vIG9yIG1heSBub3QgZGlzY292ZXIgYW4gYW1iaWd1aXR5IGluIHRoZSBmdXR1cmUsIGV2ZW4gaWYgdGhlcmUgYXJlIG5vXG4vLyBjb25mbGljdGluZyBzdWJzZXRzIHRoaXMgcm91bmQuPC9wPlxuLy9cbi8vIDxwPlRoZSBiaWdnZXN0IHNpbiBpcyB0byB0ZXJtaW5hdGUgZWFybHkgYmVjYXVzZSBpdCBtZWFucyB3ZSd2ZSBtYWRlIGFcbi8vIGRlY2lzaW9uIGJ1dCB3ZXJlIHVuY2VydGFpbiBhcyB0byB0aGUgZXZlbnR1YWwgb3V0Y29tZS4gV2UgaGF2ZW4ndCB1c2VkXG4vLyBlbm91Z2ggbG9va2FoZWFkLiBPbiB0aGUgb3RoZXIgaGFuZCwgYW5ub3VuY2luZyBhIGNvbmZsaWN0IHRvbyBsYXRlIGlzIG5vXG4vLyBiaWcgZGVhbDsgeW91IHdpbGwgc3RpbGwgaGF2ZSB0aGUgY29uZmxpY3QuIEl0J3MganVzdCBpbmVmZmljaWVudC4gSXRcbi8vIG1pZ2h0IGV2ZW4gbG9vayB1bnRpbCB0aGUgZW5kIG9mIGZpbGUuPC9wPlxuLy9cbi8vIDxwPk5vIHNwZWNpYWwgY29uc2lkZXJhdGlvbiBmb3Igc2VtYW50aWMgcHJlZGljYXRlcyBpcyByZXF1aXJlZCBiZWNhdXNlXG4vLyBwcmVkaWNhdGVzIGFyZSBldmFsdWF0ZWQgb24tdGhlLWZseSBmb3IgZnVsbCBMTCBwcmVkaWN0aW9uLCBlbnN1cmluZyB0aGF0XG4vLyBubyBjb25maWd1cmF0aW9uIGNvbnRhaW5zIGEgc2VtYW50aWMgY29udGV4dCBkdXJpbmcgdGhlIHRlcm1pbmF0aW9uXG4vLyBjaGVjay48L3A+XG4vL1xuLy8gPHA+PHN0cm9uZz5DT05GTElDVElORyBDT05GSUdTPC9zdHJvbmc+PC9wPlxuLy9cbi8vIDxwPlR3byBjb25maWd1cmF0aW9ucyB7QGNvZGUgKHMsIGksIHgpfSBhbmQge0Bjb2RlIChzLCBqLCB4Jyl9LCBjb25mbGljdFxuLy8gd2hlbiB7QGNvZGUgaSE9an0gYnV0IHtAY29kZSB4PXgnfS4gQmVjYXVzZSB3ZSBtZXJnZSBhbGxcbi8vIHtAY29kZSAocywgaSwgXyl9IGNvbmZpZ3VyYXRpb25zIHRvZ2V0aGVyLCB0aGF0IG1lYW5zIHRoYXQgdGhlcmUgYXJlIGF0XG4vLyBtb3N0IHtAY29kZSBufSBjb25maWd1cmF0aW9ucyBhc3NvY2lhdGVkIHdpdGggc3RhdGUge0Bjb2RlIHN9IGZvclxuLy8ge0Bjb2RlIG59IHBvc3NpYmxlIGFsdGVybmF0aXZlcyBpbiB0aGUgZGVjaXNpb24uIFRoZSBtZXJnZWQgc3RhY2tzXG4vLyBjb21wbGljYXRlIHRoZSBjb21wYXJpc29uIG9mIGNvbmZpZ3VyYXRpb24gY29udGV4dHMge0Bjb2RlIHh9IGFuZFxuLy8ge0Bjb2RlIHgnfS4gU2FtIGNoZWNrcyB0byBzZWUgaWYgb25lIGlzIGEgc3Vic2V0IG9mIHRoZSBvdGhlciBieSBjYWxsaW5nXG4vLyBtZXJnZSBhbmQgY2hlY2tpbmcgdG8gc2VlIGlmIHRoZSBtZXJnZWQgcmVzdWx0IGlzIGVpdGhlciB7QGNvZGUgeH0gb3Jcbi8vIHtAY29kZSB4J30uIElmIHRoZSB7QGNvZGUgeH0gYXNzb2NpYXRlZCB3aXRoIGxvd2VzdCBhbHRlcm5hdGl2ZSB7QGNvZGUgaX1cbi8vIGlzIHRoZSBzdXBlcnNldCwgdGhlbiB7QGNvZGUgaX0gaXMgdGhlIG9ubHkgcG9zc2libGUgcHJlZGljdGlvbiBzaW5jZSB0aGVcbi8vIG90aGVycyByZXNvbHZlIHRvIHtAY29kZSBtaW4oaSl9IGFzIHdlbGwuIEhvd2V2ZXIsIGlmIHtAY29kZSB4fSBpc1xuLy8gYXNzb2NpYXRlZCB3aXRoIHtAY29kZSBqPml9IHRoZW4gYXQgbGVhc3Qgb25lIHN0YWNrIGNvbmZpZ3VyYXRpb24gZm9yXG4vLyB7QGNvZGUgan0gaXMgbm90IGluIGNvbmZsaWN0IHdpdGggYWx0ZXJuYXRpdmUge0Bjb2RlIGl9LiBUaGUgYWxnb3JpdGhtXG4vLyBzaG91bGQga2VlcCBnb2luZywgbG9va2luZyBmb3IgbW9yZSBsb29rYWhlYWQgZHVlIHRvIHRoZSB1bmNlcnRhaW50eS48L3A+XG4vL1xuLy8gPHA+Rm9yIHNpbXBsaWNpdHksIEknbSBkb2luZyBhIGVxdWFsaXR5IGNoZWNrIGJldHdlZW4ge0Bjb2RlIHh9IGFuZFxuLy8ge0Bjb2RlIHgnfSB0aGF0IGxldHMgdGhlIGFsZ29yaXRobSBjb250aW51ZSB0byBjb25zdW1lIGxvb2thaGVhZCBsb25nZXJcbi8vIHRoYW4gbmVjZXNzYXJ5LiBUaGUgcmVhc29uIEkgbGlrZSB0aGUgZXF1YWxpdHkgaXMgb2YgY291cnNlIHRoZVxuLy8gc2ltcGxpY2l0eSBidXQgYWxzbyBiZWNhdXNlIHRoYXQgaXMgdGhlIHRlc3QgeW91IG5lZWQgdG8gZGV0ZWN0IHRoZVxuLy8gYWx0ZXJuYXRpdmVzIHRoYXQgYXJlIGFjdHVhbGx5IGluIGNvbmZsaWN0LjwvcD5cbi8vXG4vLyA8cD48c3Ryb25nPkNPTlRJTlVFL1NUT1AgUlVMRTwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5Db250aW51ZSBpZiB1bmlvbiBvZiByZXNvbHZlZCBhbHRlcm5hdGl2ZSBzZXRzIGZyb20gbm9uLWNvbmZsaWN0aW5nIGFuZFxuLy8gY29uZmxpY3RpbmcgYWx0ZXJuYXRpdmUgc3Vic2V0cyBoYXMgbW9yZSB0aGFuIG9uZSBhbHRlcm5hdGl2ZS4gV2UgYXJlXG4vLyB1bmNlcnRhaW4gYWJvdXQgd2hpY2ggYWx0ZXJuYXRpdmUgdG8gcHJlZGljdC48L3A+XG4vL1xuLy8gPHA+VGhlIGNvbXBsZXRlIHNldCBvZiBhbHRlcm5hdGl2ZXMsIHtAY29kZSBbaSBmb3IgKF8saSxfKV19LCB0ZWxscyB1cyB3aGljaFxuLy8gYWx0ZXJuYXRpdmVzIGFyZSBzdGlsbCBpbiB0aGUgcnVubmluZyBmb3IgdGhlIGFtb3VudCBvZiBpbnB1dCB3ZSd2ZVxuLy8gY29uc3VtZWQgYXQgdGhpcyBwb2ludC4gVGhlIGNvbmZsaWN0aW5nIHNldHMgbGV0IHVzIHRvIHN0cmlwIGF3YXlcbi8vIGNvbmZpZ3VyYXRpb25zIHRoYXQgd29uJ3QgbGVhZCB0byBtb3JlIHN0YXRlcyBiZWNhdXNlIHdlIHJlc29sdmVcbi8vIGNvbmZsaWN0cyB0byB0aGUgY29uZmlndXJhdGlvbiB3aXRoIGEgbWluaW11bSBhbHRlcm5hdGUgZm9yIHRoZVxuLy8gY29uZmxpY3Rpbmcgc2V0LjwvcD5cbi8vXG4vLyA8cD48c3Ryb25nPkNBU0VTPC9zdHJvbmc+PC9wPlxuLy9cbi8vIDx1bD5cbi8vXG4vLyA8bGk+bm8gY29uZmxpY3RzIGFuZCBtb3JlIHRoYW4gMSBhbHRlcm5hdGl2ZSBpbiBzZXQgPSZndDsgY29udGludWU8L2xpPlxuLy9cbi8vIDxsaT4ge0Bjb2RlIChzLCAxLCB4KX0sIHtAY29kZSAocywgMiwgeCl9LCB7QGNvZGUgKHMsIDMsIHopfSxcbi8vIHtAY29kZSAocycsIDEsIHkpfSwge0Bjb2RlIChzJywgMiwgeSl9IHlpZWxkcyBub24tY29uZmxpY3Rpbmcgc2V0XG4vLyB7QGNvZGUgezN9fSBVIGNvbmZsaWN0aW5nIHNldHMge0Bjb2RlIG1pbih7MSwyfSl9IFUge0Bjb2RlIG1pbih7MSwyfSl9ID1cbi8vIHtAY29kZSB7MSwzfX0gPSZndDsgY29udGludWVcbi8vIDwvbGk+XG4vL1xuLy8gPGxpPntAY29kZSAocywgMSwgeCl9LCB7QGNvZGUgKHMsIDIsIHgpfSwge0Bjb2RlIChzJywgMSwgeSl9LFxuLy8ge0Bjb2RlIChzJywgMiwgeSl9LCB7QGNvZGUgKHMnJywgMSwgeil9IHlpZWxkcyBub24tY29uZmxpY3Rpbmcgc2V0XG4vLyB7QGNvZGUgezF9fSBVIGNvbmZsaWN0aW5nIHNldHMge0Bjb2RlIG1pbih7MSwyfSl9IFUge0Bjb2RlIG1pbih7MSwyfSl9ID1cbi8vIHtAY29kZSB7MX19ID0mZ3Q7IHN0b3AgYW5kIHByZWRpY3QgMTwvbGk+XG4vL1xuLy8gPGxpPntAY29kZSAocywgMSwgeCl9LCB7QGNvZGUgKHMsIDIsIHgpfSwge0Bjb2RlIChzJywgMSwgeSl9LFxuLy8ge0Bjb2RlIChzJywgMiwgeSl9IHlpZWxkcyBjb25mbGljdGluZywgcmVkdWNlZCBzZXRzIHtAY29kZSB7MX19IFVcbi8vIHtAY29kZSB7MX19ID0ge0Bjb2RlIHsxfX0gPSZndDsgc3RvcCBhbmQgcHJlZGljdCAxLCBjYW4gYW5ub3VuY2Vcbi8vIGFtYmlndWl0eSB7QGNvZGUgezEsMn19PC9saT5cbi8vXG4vLyA8bGk+e0Bjb2RlIChzLCAxLCB4KX0sIHtAY29kZSAocywgMiwgeCl9LCB7QGNvZGUgKHMnLCAyLCB5KX0sXG4vLyB7QGNvZGUgKHMnLCAzLCB5KX0geWllbGRzIGNvbmZsaWN0aW5nLCByZWR1Y2VkIHNldHMge0Bjb2RlIHsxfX0gVVxuLy8ge0Bjb2RlIHsyfX0gPSB7QGNvZGUgezEsMn19ID0mZ3Q7IGNvbnRpbnVlPC9saT5cbi8vXG4vLyA8bGk+e0Bjb2RlIChzLCAxLCB4KX0sIHtAY29kZSAocywgMiwgeCl9LCB7QGNvZGUgKHMnLCAzLCB5KX0sXG4vLyB7QGNvZGUgKHMnLCA0LCB5KX0geWllbGRzIGNvbmZsaWN0aW5nLCByZWR1Y2VkIHNldHMge0Bjb2RlIHsxfX0gVVxuLy8ge0Bjb2RlIHszfX0gPSB7QGNvZGUgezEsM319ID0mZ3Q7IGNvbnRpbnVlPC9saT5cbi8vXG4vLyA8L3VsPlxuLy9cbi8vIDxwPjxzdHJvbmc+RVhBQ1QgQU1CSUdVSVRZIERFVEVDVElPTjwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5JZiBhbGwgc3RhdGVzIHJlcG9ydCB0aGUgc2FtZSBjb25mbGljdGluZyBzZXQgb2YgYWx0ZXJuYXRpdmVzLCB0aGVuIHdlXG4vLyBrbm93IHdlIGhhdmUgdGhlIGV4YWN0IGFtYmlndWl0eSBzZXQuPC9wPlxuLy9cbi8vIDxwPjxjb2RlPnxBXzxlbT5pPC9lbT58Jmd0OzE8L2NvZGU+IGFuZFxuLy8gPGNvZGU+QV88ZW0+aTwvZW0+ID0gQV88ZW0+ajwvZW0+PC9jb2RlPiBmb3IgYWxsIDxlbT5pPC9lbT4sIDxlbT5qPC9lbT4uPC9wPlxuLy9cbi8vIDxwPkluIG90aGVyIHdvcmRzLCB3ZSBjb250aW51ZSBleGFtaW5pbmcgbG9va2FoZWFkIHVudGlsIGFsbCB7QGNvZGUgQV9pfVxuLy8gaGF2ZSBtb3JlIHRoYW4gb25lIGFsdGVybmF0aXZlIGFuZCBhbGwge0Bjb2RlIEFfaX0gYXJlIHRoZSBzYW1lLiBJZlxuLy8ge0Bjb2RlIEE9e3sxLDJ9LCB7MSwzfX19LCB0aGVuIHJlZ3VsYXIgTEwgcHJlZGljdGlvbiB3b3VsZCB0ZXJtaW5hdGVcbi8vIGJlY2F1c2UgdGhlIHJlc29sdmVkIHNldCBpcyB7QGNvZGUgezF9fS4gVG8gZGV0ZXJtaW5lIHdoYXQgdGhlIHJlYWxcbi8vIGFtYmlndWl0eSBpcywgd2UgaGF2ZSB0byBrbm93IHdoZXRoZXIgdGhlIGFtYmlndWl0eSBpcyBiZXR3ZWVuIG9uZSBhbmRcbi8vIHR3byBvciBvbmUgYW5kIHRocmVlIHNvIHdlIGtlZXAgZ29pbmcuIFdlIGNhbiBvbmx5IHN0b3AgcHJlZGljdGlvbiB3aGVuXG4vLyB3ZSBuZWVkIGV4YWN0IGFtYmlndWl0eSBkZXRlY3Rpb24gd2hlbiB0aGUgc2V0cyBsb29rIGxpa2Vcbi8vIHtAY29kZSBBPXt7MSwyfX19IG9yIHtAY29kZSB7ezEsMn0sezEsMn19fSwgZXRjLi4uPC9wPlxuLy9cblByZWRpY3Rpb25Nb2RlLnJlc29sdmVzVG9KdXN0T25lVmlhYmxlQWx0ID0gZnVuY3Rpb24oYWx0c2V0cykge1xuICAgIHJldHVybiBQcmVkaWN0aW9uTW9kZS5nZXRTaW5nbGVWaWFibGVBbHQoYWx0c2V0cyk7XG59O1xuXG4vL1xuLy8gRGV0ZXJtaW5lcyBpZiBldmVyeSBhbHRlcm5hdGl2ZSBzdWJzZXQgaW4ge0Bjb2RlIGFsdHNldHN9IGNvbnRhaW5zIG1vcmVcbi8vIHRoYW4gb25lIGFsdGVybmF0aXZlLlxuLy9cbi8vIEBwYXJhbSBhbHRzZXRzIGEgY29sbGVjdGlvbiBvZiBhbHRlcm5hdGl2ZSBzdWJzZXRzXG4vLyBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiBldmVyeSB7QGxpbmsgQml0U2V0fSBpbiB7QGNvZGUgYWx0c2V0c30gaGFzXG4vLyB7QGxpbmsgQml0U2V0Ly9jYXJkaW5hbGl0eSBjYXJkaW5hbGl0eX0gJmd0OyAxLCBvdGhlcndpc2Uge0Bjb2RlIGZhbHNlfVxuLy9cblByZWRpY3Rpb25Nb2RlLmFsbFN1YnNldHNDb25mbGljdCA9IGZ1bmN0aW9uKGFsdHNldHMpIHtcbiAgICByZXR1cm4gISBQcmVkaWN0aW9uTW9kZS5oYXNOb25Db25mbGljdGluZ0FsdFNldChhbHRzZXRzKTtcbn07XG4vL1xuLy8gRGV0ZXJtaW5lcyBpZiBhbnkgc2luZ2xlIGFsdGVybmF0aXZlIHN1YnNldCBpbiB7QGNvZGUgYWx0c2V0c30gY29udGFpbnNcbi8vIGV4YWN0bHkgb25lIGFsdGVybmF0aXZlLlxuLy9cbi8vIEBwYXJhbSBhbHRzZXRzIGEgY29sbGVjdGlvbiBvZiBhbHRlcm5hdGl2ZSBzdWJzZXRzXG4vLyBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB7QGNvZGUgYWx0c2V0c30gY29udGFpbnMgYSB7QGxpbmsgQml0U2V0fSB3aXRoXG4vLyB7QGxpbmsgQml0U2V0Ly9jYXJkaW5hbGl0eSBjYXJkaW5hbGl0eX0gMSwgb3RoZXJ3aXNlIHtAY29kZSBmYWxzZX1cbi8vXG5QcmVkaWN0aW9uTW9kZS5oYXNOb25Db25mbGljdGluZ0FsdFNldCA9IGZ1bmN0aW9uKGFsdHNldHMpIHtcblx0Zm9yKHZhciBpPTA7aTxhbHRzZXRzLmxlbmd0aDtpKyspIHtcblx0XHR2YXIgYWx0cyA9IGFsdHNldHNbaV07XG4gICAgICAgIGlmIChhbHRzLmxlbmd0aD09PTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cdH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vL1xuLy8gRGV0ZXJtaW5lcyBpZiBhbnkgc2luZ2xlIGFsdGVybmF0aXZlIHN1YnNldCBpbiB7QGNvZGUgYWx0c2V0c30gY29udGFpbnNcbi8vIG1vcmUgdGhhbiBvbmUgYWx0ZXJuYXRpdmUuXG4vL1xuLy8gQHBhcmFtIGFsdHNldHMgYSBjb2xsZWN0aW9uIG9mIGFsdGVybmF0aXZlIHN1YnNldHNcbi8vIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHtAY29kZSBhbHRzZXRzfSBjb250YWlucyBhIHtAbGluayBCaXRTZXR9IHdpdGhcbi8vIHtAbGluayBCaXRTZXQvL2NhcmRpbmFsaXR5IGNhcmRpbmFsaXR5fSAmZ3Q7IDEsIG90aGVyd2lzZSB7QGNvZGUgZmFsc2V9XG4vL1xuUHJlZGljdGlvbk1vZGUuaGFzQ29uZmxpY3RpbmdBbHRTZXQgPSBmdW5jdGlvbihhbHRzZXRzKSB7XG5cdGZvcih2YXIgaT0wO2k8YWx0c2V0cy5sZW5ndGg7aSsrKSB7XG5cdFx0dmFyIGFsdHMgPSBhbHRzZXRzW2ldO1xuICAgICAgICBpZiAoYWx0cy5sZW5ndGg+MSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblx0fVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbi8vXG4vLyBEZXRlcm1pbmVzIGlmIGV2ZXJ5IGFsdGVybmF0aXZlIHN1YnNldCBpbiB7QGNvZGUgYWx0c2V0c30gaXMgZXF1aXZhbGVudC5cbi8vXG4vLyBAcGFyYW0gYWx0c2V0cyBhIGNvbGxlY3Rpb24gb2YgYWx0ZXJuYXRpdmUgc3Vic2V0c1xuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgZXZlcnkgbWVtYmVyIG9mIHtAY29kZSBhbHRzZXRzfSBpcyBlcXVhbCB0byB0aGVcbi8vIG90aGVycywgb3RoZXJ3aXNlIHtAY29kZSBmYWxzZX1cbi8vXG5QcmVkaWN0aW9uTW9kZS5hbGxTdWJzZXRzRXF1YWwgPSBmdW5jdGlvbihhbHRzZXRzKSB7XG4gICAgdmFyIGZpcnN0ID0gbnVsbDtcblx0Zm9yKHZhciBpPTA7aTxhbHRzZXRzLmxlbmd0aDtpKyspIHtcblx0XHR2YXIgYWx0cyA9IGFsdHNldHNbaV07XG4gICAgICAgIGlmIChmaXJzdCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgZmlyc3QgPSBhbHRzO1xuICAgICAgICB9IGVsc2UgaWYgKGFsdHMhPT1maXJzdCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cdH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8vXG4vLyBSZXR1cm5zIHRoZSB1bmlxdWUgYWx0ZXJuYXRpdmUgcHJlZGljdGVkIGJ5IGFsbCBhbHRlcm5hdGl2ZSBzdWJzZXRzIGluXG4vLyB7QGNvZGUgYWx0c2V0c30uIElmIG5vIHN1Y2ggYWx0ZXJuYXRpdmUgZXhpc3RzLCB0aGlzIG1ldGhvZCByZXR1cm5zXG4vLyB7QGxpbmsgQVROLy9JTlZBTElEX0FMVF9OVU1CRVJ9LlxuLy9cbi8vIEBwYXJhbSBhbHRzZXRzIGEgY29sbGVjdGlvbiBvZiBhbHRlcm5hdGl2ZSBzdWJzZXRzXG4vL1xuUHJlZGljdGlvbk1vZGUuZ2V0VW5pcXVlQWx0ID0gZnVuY3Rpb24oYWx0c2V0cykge1xuICAgIHZhciBhbGwgPSBQcmVkaWN0aW9uTW9kZS5nZXRBbHRzKGFsdHNldHMpO1xuICAgIGlmIChhbGwubGVuZ3RoPT09MSkge1xuICAgICAgICByZXR1cm4gYWxsLm1pblZhbHVlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIEFUTi5JTlZBTElEX0FMVF9OVU1CRVI7XG4gICAgfVxufTtcblxuLy8gR2V0cyB0aGUgY29tcGxldGUgc2V0IG9mIHJlcHJlc2VudGVkIGFsdGVybmF0aXZlcyBmb3IgYSBjb2xsZWN0aW9uIG9mXG4vLyBhbHRlcm5hdGl2ZSBzdWJzZXRzLiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSB1bmlvbiBvZiBlYWNoIHtAbGluayBCaXRTZXR9XG4vLyBpbiB7QGNvZGUgYWx0c2V0c30uXG4vL1xuLy8gQHBhcmFtIGFsdHNldHMgYSBjb2xsZWN0aW9uIG9mIGFsdGVybmF0aXZlIHN1YnNldHNcbi8vIEByZXR1cm4gdGhlIHNldCBvZiByZXByZXNlbnRlZCBhbHRlcm5hdGl2ZXMgaW4ge0Bjb2RlIGFsdHNldHN9XG4vL1xuUHJlZGljdGlvbk1vZGUuZ2V0QWx0cyA9IGZ1bmN0aW9uKGFsdHNldHMpIHtcbiAgICB2YXIgYWxsID0gbmV3IEJpdFNldCgpO1xuICAgIGFsdHNldHMubWFwKCBmdW5jdGlvbihhbHRzKSB7IGFsbC5vcihhbHRzKTsgfSk7XG4gICAgcmV0dXJuIGFsbDtcbn07XG5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGdldHMgdGhlIGNvbmZsaWN0aW5nIGFsdCBzdWJzZXRzIGZyb20gYSBjb25maWd1cmF0aW9uIHNldC5cbi8vIEZvciBlYWNoIGNvbmZpZ3VyYXRpb24ge0Bjb2RlIGN9IGluIHtAY29kZSBjb25maWdzfTpcbi8vXG4vLyA8cHJlPlxuLy8gbWFwW2NdIFU9IGMue0BsaW5rIEFUTkNvbmZpZy8vYWx0IGFsdH0gLy8gbWFwIGhhc2gvZXF1YWxzIHVzZXMgcyBhbmQgeCwgbm90XG4vLyBhbHQgYW5kIG5vdCBwcmVkXG4vLyA8L3ByZT5cblxuUHJlZGljdGlvbk1vZGUuZ2V0Q29uZmxpY3RpbmdBbHRTdWJzZXRzID0gZnVuY3Rpb24oY29uZmlncykge1xuICAgIHZhciBjb25maWdUb0FsdHMgPSBuZXcgTWFwKCk7XG4gICAgY29uZmlnVG9BbHRzLmhhc2hGdW5jdGlvbiA9IGZ1bmN0aW9uKGNmZykgeyBoYXNoU3R1ZmYoY2ZnLnN0YXRlLnN0YXRlTnVtYmVyLCBjZmcuY29udGV4dCk7IH07XG4gICAgY29uZmlnVG9BbHRzLmVxdWFsc0Z1bmN0aW9uID0gZnVuY3Rpb24oYzEsIGMyKSB7IHJldHVybiBjMS5zdGF0ZS5zdGF0ZU51bWJlcj09YzIuc3RhdGUuc3RhdGVOdW1iZXIgJiYgYzEuY29udGV4dC5lcXVhbHMoYzIuY29udGV4dCk7fVxuICAgIGNvbmZpZ3MuaXRlbXMubWFwKGZ1bmN0aW9uKGNmZykge1xuICAgICAgICB2YXIgYWx0cyA9IGNvbmZpZ1RvQWx0cy5nZXQoY2ZnKTtcbiAgICAgICAgaWYgKGFsdHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGFsdHMgPSBuZXcgQml0U2V0KCk7XG4gICAgICAgICAgICBjb25maWdUb0FsdHMucHV0KGNmZywgYWx0cyk7XG4gICAgICAgIH1cbiAgICAgICAgYWx0cy5hZGQoY2ZnLmFsdCk7XG5cdH0pO1xuICAgIHJldHVybiBjb25maWdUb0FsdHMuZ2V0VmFsdWVzKCk7XG59O1xuXG4vL1xuLy8gR2V0IGEgbWFwIGZyb20gc3RhdGUgdG8gYWx0IHN1YnNldCBmcm9tIGEgY29uZmlndXJhdGlvbiBzZXQuIEZvciBlYWNoXG4vLyBjb25maWd1cmF0aW9uIHtAY29kZSBjfSBpbiB7QGNvZGUgY29uZmlnc306XG4vL1xuLy8gPHByZT5cbi8vIG1hcFtjLntAbGluayBBVE5Db25maWcvL3N0YXRlIHN0YXRlfV0gVT0gYy57QGxpbmsgQVROQ29uZmlnLy9hbHQgYWx0fVxuLy8gPC9wcmU+XG4vL1xuUHJlZGljdGlvbk1vZGUuZ2V0U3RhdGVUb0FsdE1hcCA9IGZ1bmN0aW9uKGNvbmZpZ3MpIHtcbiAgICB2YXIgbSA9IG5ldyBBbHREaWN0KCk7XG4gICAgY29uZmlncy5pdGVtcy5tYXAoZnVuY3Rpb24oYykge1xuICAgICAgICB2YXIgYWx0cyA9IG0uZ2V0KGMuc3RhdGUpO1xuICAgICAgICBpZiAoYWx0cyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgYWx0cyA9IG5ldyBCaXRTZXQoKTtcbiAgICAgICAgICAgIG0ucHV0KGMuc3RhdGUsIGFsdHMpO1xuICAgICAgICB9XG4gICAgICAgIGFsdHMuYWRkKGMuYWx0KTtcbiAgICB9KTtcbiAgICByZXR1cm4gbTtcbn07XG5cblByZWRpY3Rpb25Nb2RlLmhhc1N0YXRlQXNzb2NpYXRlZFdpdGhPbmVBbHQgPSBmdW5jdGlvbihjb25maWdzKSB7XG4gICAgdmFyIHZhbHVlcyA9IFByZWRpY3Rpb25Nb2RlLmdldFN0YXRlVG9BbHRNYXAoY29uZmlncykudmFsdWVzKCk7XG4gICAgZm9yKHZhciBpPTA7aTx2YWx1ZXMubGVuZ3RoO2krKykge1xuICAgICAgICBpZiAodmFsdWVzW2ldLmxlbmd0aD09PTEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cblByZWRpY3Rpb25Nb2RlLmdldFNpbmdsZVZpYWJsZUFsdCA9IGZ1bmN0aW9uKGFsdHNldHMpIHtcbiAgICB2YXIgcmVzdWx0ID0gbnVsbDtcblx0Zm9yKHZhciBpPTA7aTxhbHRzZXRzLmxlbmd0aDtpKyspIHtcblx0XHR2YXIgYWx0cyA9IGFsdHNldHNbaV07XG4gICAgICAgIHZhciBtaW5BbHQgPSBhbHRzLm1pblZhbHVlKCk7XG4gICAgICAgIGlmKHJlc3VsdD09PW51bGwpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG1pbkFsdDtcbiAgICAgICAgfSBlbHNlIGlmKHJlc3VsdCE9PW1pbkFsdCkgeyAvLyBtb3JlIHRoYW4gMSB2aWFibGUgYWx0XG4gICAgICAgICAgICByZXR1cm4gQVROLklOVkFMSURfQUxUX05VTUJFUjtcbiAgICAgICAgfVxuXHR9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydHMuUHJlZGljdGlvbk1vZGUgPSBQcmVkaWN0aW9uTW9kZTtcbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vL1xuXG4vLyBBIHRyZWUgc3RydWN0dXJlIHVzZWQgdG8gcmVjb3JkIHRoZSBzZW1hbnRpYyBjb250ZXh0IGluIHdoaWNoXG4vLyAgYW4gQVROIGNvbmZpZ3VyYXRpb24gaXMgdmFsaWQuICBJdCdzIGVpdGhlciBhIHNpbmdsZSBwcmVkaWNhdGUsXG4vLyAgYSBjb25qdW5jdGlvbiB7QGNvZGUgcDEmJnAyfSwgb3IgYSBzdW0gb2YgcHJvZHVjdHMge0Bjb2RlIHAxfHxwMn0uXG4vL1xuLy8gIDxwPkkgaGF2ZSBzY29wZWQgdGhlIHtAbGluayBBTkR9LCB7QGxpbmsgT1J9LCBhbmQge0BsaW5rIFByZWRpY2F0ZX0gc3ViY2xhc3NlcyBvZlxuLy8gIHtAbGluayBTZW1hbnRpY0NvbnRleHR9IHdpdGhpbiB0aGUgc2NvcGUgb2YgdGhpcyBvdXRlciBjbGFzcy48L3A+XG4vL1xuXG52YXIgU2V0ID0gcmVxdWlyZSgnLi8uLi9VdGlscycpLlNldDtcbnZhciBIYXNoID0gcmVxdWlyZSgnLi8uLi9VdGlscycpLkhhc2g7XG5cbmZ1bmN0aW9uIFNlbWFudGljQ29udGV4dCgpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cblNlbWFudGljQ29udGV4dC5wcm90b3R5cGUuaGFzaENvZGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG4gICAgdGhpcy51cGRhdGVIYXNoQ29kZShoYXNoKTtcbiAgICByZXR1cm4gaGFzaC5maW5pc2goKTtcbn07XG5cbi8vIEZvciBjb250ZXh0IGluZGVwZW5kZW50IHByZWRpY2F0ZXMsIHdlIGV2YWx1YXRlIHRoZW0gd2l0aG91dCBhIGxvY2FsXG4vLyBjb250ZXh0IChpLmUuLCBudWxsIGNvbnRleHQpLiBUaGF0IHdheSwgd2UgY2FuIGV2YWx1YXRlIHRoZW0gd2l0aG91dFxuLy8gaGF2aW5nIHRvIGNyZWF0ZSBwcm9wZXIgcnVsZS1zcGVjaWZpYyBjb250ZXh0IGR1cmluZyBwcmVkaWN0aW9uIChhc1xuLy8gb3Bwb3NlZCB0byB0aGUgcGFyc2VyLCB3aGljaCBjcmVhdGVzIHRoZW0gbmF0dXJhbGx5KS4gSW4gYSBwcmFjdGljYWxcbi8vIHNlbnNlLCB0aGlzIGF2b2lkcyBhIGNhc3QgZXhjZXB0aW9uIGZyb20gUnVsZUNvbnRleHQgdG8gbXlydWxlQ29udGV4dC5cbi8vXG4vLyA8cD5Gb3IgY29udGV4dCBkZXBlbmRlbnQgcHJlZGljYXRlcywgd2UgbXVzdCBwYXNzIGluIGEgbG9jYWwgY29udGV4dCBzbyB0aGF0XG4vLyByZWZlcmVuY2VzIHN1Y2ggYXMgJGFyZyBldmFsdWF0ZSBwcm9wZXJseSBhcyBfbG9jYWxjdHguYXJnLiBXZSBvbmx5XG4vLyBjYXB0dXJlIGNvbnRleHQgZGVwZW5kZW50IHByZWRpY2F0ZXMgaW4gdGhlIGNvbnRleHQgaW4gd2hpY2ggd2UgYmVnaW5cbi8vIHByZWRpY3Rpb24sIHNvIHdlIHBhc3NlZCBpbiB0aGUgb3V0ZXIgY29udGV4dCBoZXJlIGluIGNhc2Ugb2YgY29udGV4dFxuLy8gZGVwZW5kZW50IHByZWRpY2F0ZSBldmFsdWF0aW9uLjwvcD5cbi8vXG5TZW1hbnRpY0NvbnRleHQucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcbn07XG5cbi8vXG4vLyBFdmFsdWF0ZSB0aGUgcHJlY2VkZW5jZSBwcmVkaWNhdGVzIGZvciB0aGUgY29udGV4dCBhbmQgcmVkdWNlIHRoZSByZXN1bHQuXG4vL1xuLy8gQHBhcmFtIHBhcnNlciBUaGUgcGFyc2VyIGluc3RhbmNlLlxuLy8gQHBhcmFtIG91dGVyQ29udGV4dCBUaGUgY3VycmVudCBwYXJzZXIgY29udGV4dCBvYmplY3QuXG4vLyBAcmV0dXJuIFRoZSBzaW1wbGlmaWVkIHNlbWFudGljIGNvbnRleHQgYWZ0ZXIgcHJlY2VkZW5jZSBwcmVkaWNhdGVzIGFyZVxuLy8gZXZhbHVhdGVkLCB3aGljaCB3aWxsIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlcy5cbi8vIDx1bD5cbi8vIDxsaT57QGxpbmsgLy9OT05FfTogaWYgdGhlIHByZWRpY2F0ZSBzaW1wbGlmaWVzIHRvIHtAY29kZSB0cnVlfSBhZnRlclxuLy8gcHJlY2VkZW5jZSBwcmVkaWNhdGVzIGFyZSBldmFsdWF0ZWQuPC9saT5cbi8vIDxsaT57QGNvZGUgbnVsbH06IGlmIHRoZSBwcmVkaWNhdGUgc2ltcGxpZmllcyB0byB7QGNvZGUgZmFsc2V9IGFmdGVyXG4vLyBwcmVjZWRlbmNlIHByZWRpY2F0ZXMgYXJlIGV2YWx1YXRlZC48L2xpPlxuLy8gPGxpPntAY29kZSB0aGlzfTogaWYgdGhlIHNlbWFudGljIGNvbnRleHQgaXMgbm90IGNoYW5nZWQgYXMgYSByZXN1bHQgb2Zcbi8vIHByZWNlZGVuY2UgcHJlZGljYXRlIGV2YWx1YXRpb24uPC9saT5cbi8vIDxsaT5BIG5vbi17QGNvZGUgbnVsbH0ge0BsaW5rIFNlbWFudGljQ29udGV4dH06IHRoZSBuZXcgc2ltcGxpZmllZFxuLy8gc2VtYW50aWMgY29udGV4dCBhZnRlciBwcmVjZWRlbmNlIHByZWRpY2F0ZXMgYXJlIGV2YWx1YXRlZC48L2xpPlxuLy8gPC91bD5cbi8vXG5TZW1hbnRpY0NvbnRleHQucHJvdG90eXBlLmV2YWxQcmVjZWRlbmNlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG5TZW1hbnRpY0NvbnRleHQuYW5kQ29udGV4dCA9IGZ1bmN0aW9uKGEsIGIpIHtcblx0aWYgKGEgPT09IG51bGwgfHwgYSA9PT0gU2VtYW50aWNDb250ZXh0Lk5PTkUpIHtcblx0XHRyZXR1cm4gYjtcblx0fVxuXHRpZiAoYiA9PT0gbnVsbCB8fCBiID09PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdHJldHVybiBhO1xuXHR9XG5cdHZhciByZXN1bHQgPSBuZXcgQU5EKGEsIGIpO1xuXHRpZiAocmVzdWx0Lm9wbmRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiByZXN1bHQub3BuZHNbMF07XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufTtcblxuU2VtYW50aWNDb250ZXh0Lm9yQ29udGV4dCA9IGZ1bmN0aW9uKGEsIGIpIHtcblx0aWYgKGEgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gYjtcblx0fVxuXHRpZiAoYiA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBhO1xuXHR9XG5cdGlmIChhID09PSBTZW1hbnRpY0NvbnRleHQuTk9ORSB8fCBiID09PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdHJldHVybiBTZW1hbnRpY0NvbnRleHQuTk9ORTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gbmV3IE9SKGEsIGIpO1xuXHRpZiAocmVzdWx0Lm9wbmRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiByZXN1bHQub3BuZHNbMF07XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxufTtcblxuZnVuY3Rpb24gUHJlZGljYXRlKHJ1bGVJbmRleCwgcHJlZEluZGV4LCBpc0N0eERlcGVuZGVudCkge1xuXHRTZW1hbnRpY0NvbnRleHQuY2FsbCh0aGlzKTtcblx0dGhpcy5ydWxlSW5kZXggPSBydWxlSW5kZXggPT09IHVuZGVmaW5lZCA/IC0xIDogcnVsZUluZGV4O1xuXHR0aGlzLnByZWRJbmRleCA9IHByZWRJbmRleCA9PT0gdW5kZWZpbmVkID8gLTEgOiBwcmVkSW5kZXg7XG5cdHRoaXMuaXNDdHhEZXBlbmRlbnQgPSBpc0N0eERlcGVuZGVudCA9PT0gdW5kZWZpbmVkID8gZmFsc2UgOiBpc0N0eERlcGVuZGVudDsgLy8gZS5nLiwgJGkgcmVmIGluIHByZWRcblx0cmV0dXJuIHRoaXM7XG59XG5cblByZWRpY2F0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNlbWFudGljQ29udGV4dC5wcm90b3R5cGUpO1xuUHJlZGljYXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByZWRpY2F0ZTtcblxuLy9UaGUgZGVmYXVsdCB7QGxpbmsgU2VtYW50aWNDb250ZXh0fSwgd2hpY2ggaXMgc2VtYW50aWNhbGx5IGVxdWl2YWxlbnQgdG9cbi8vYSBwcmVkaWNhdGUgb2YgdGhlIGZvcm0ge0Bjb2RlIHt0cnVlfT99LlxuLy9cblNlbWFudGljQ29udGV4dC5OT05FID0gbmV3IFByZWRpY2F0ZSgpO1xuXG5cblByZWRpY2F0ZS5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbihwYXJzZXIsIG91dGVyQ29udGV4dCkge1xuXHR2YXIgbG9jYWxjdHggPSB0aGlzLmlzQ3R4RGVwZW5kZW50ID8gb3V0ZXJDb250ZXh0IDogbnVsbDtcblx0cmV0dXJuIHBhcnNlci5zZW1wcmVkKGxvY2FsY3R4LCB0aGlzLnJ1bGVJbmRleCwgdGhpcy5wcmVkSW5kZXgpO1xufTtcblxuUHJlZGljYXRlLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcblx0aGFzaC51cGRhdGUodGhpcy5ydWxlSW5kZXgsIHRoaXMucHJlZEluZGV4LCB0aGlzLmlzQ3R4RGVwZW5kZW50KTtcbn07XG5cblByZWRpY2F0ZS5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0aWYgKHRoaXMgPT09IG90aGVyKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFByZWRpY2F0ZSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMucnVsZUluZGV4ID09PSBvdGhlci5ydWxlSW5kZXggJiZcblx0XHRcdFx0dGhpcy5wcmVkSW5kZXggPT09IG90aGVyLnByZWRJbmRleCAmJlxuXHRcdFx0XHR0aGlzLmlzQ3R4RGVwZW5kZW50ID09PSBvdGhlci5pc0N0eERlcGVuZGVudDtcblx0fVxufTtcblxuUHJlZGljYXRlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJ7XCIgKyB0aGlzLnJ1bGVJbmRleCArIFwiOlwiICsgdGhpcy5wcmVkSW5kZXggKyBcIn0/XCI7XG59O1xuXG5mdW5jdGlvbiBQcmVjZWRlbmNlUHJlZGljYXRlKHByZWNlZGVuY2UpIHtcblx0U2VtYW50aWNDb250ZXh0LmNhbGwodGhpcyk7XG5cdHRoaXMucHJlY2VkZW5jZSA9IHByZWNlZGVuY2UgPT09IHVuZGVmaW5lZCA/IDAgOiBwcmVjZWRlbmNlO1xufVxuXG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2VtYW50aWNDb250ZXh0LnByb3RvdHlwZSk7XG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByZWNlZGVuY2VQcmVkaWNhdGU7XG5cblByZWNlZGVuY2VQcmVkaWNhdGUucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0cmV0dXJuIHBhcnNlci5wcmVjcHJlZChvdXRlckNvbnRleHQsIHRoaXMucHJlY2VkZW5jZSk7XG59O1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZS5ldmFsUHJlY2VkZW5jZSA9IGZ1bmN0aW9uKHBhcnNlciwgb3V0ZXJDb250ZXh0KSB7XG5cdGlmIChwYXJzZXIucHJlY3ByZWQob3V0ZXJDb250ZXh0LCB0aGlzLnByZWNlZGVuY2UpKSB7XG5cdFx0cmV0dXJuIFNlbWFudGljQ29udGV4dC5OT05FO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG59O1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZS5jb21wYXJlVG8gPSBmdW5jdGlvbihvdGhlcikge1xuXHRyZXR1cm4gdGhpcy5wcmVjZWRlbmNlIC0gb3RoZXIucHJlY2VkZW5jZTtcbn07XG5cblByZWNlZGVuY2VQcmVkaWNhdGUucHJvdG90eXBlLnVwZGF0ZUhhc2hDb2RlID0gZnVuY3Rpb24oaGFzaCkge1xuICAgIGhhc2gudXBkYXRlKDMxKTtcbn07XG5cblByZWNlZGVuY2VQcmVkaWNhdGUucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG5cdGlmICh0aGlzID09PSBvdGhlcikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2UgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBQcmVjZWRlbmNlUHJlZGljYXRlKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5wcmVjZWRlbmNlID09PSBvdGhlci5wcmVjZWRlbmNlO1xuXHR9XG59O1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJ7XCIrdGhpcy5wcmVjZWRlbmNlK1wiPj1wcmVjfT9cIjtcbn07XG5cblxuXG5QcmVjZWRlbmNlUHJlZGljYXRlLmZpbHRlclByZWNlZGVuY2VQcmVkaWNhdGVzID0gZnVuY3Rpb24oc2V0KSB7XG5cdHZhciByZXN1bHQgPSBbXTtcblx0c2V0LnZhbHVlcygpLm1hcCggZnVuY3Rpb24oY29udGV4dCkge1xuXHRcdGlmIChjb250ZXh0IGluc3RhbmNlb2YgUHJlY2VkZW5jZVByZWRpY2F0ZSkge1xuXHRcdFx0cmVzdWx0LnB1c2goY29udGV4dCk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cblxuLy8gQSBzZW1hbnRpYyBjb250ZXh0IHdoaWNoIGlzIHRydWUgd2hlbmV2ZXIgbm9uZSBvZiB0aGUgY29udGFpbmVkIGNvbnRleHRzXG4vLyBpcyBmYWxzZS5cbi8vXG5mdW5jdGlvbiBBTkQoYSwgYikge1xuXHRTZW1hbnRpY0NvbnRleHQuY2FsbCh0aGlzKTtcblx0dmFyIG9wZXJhbmRzID0gbmV3IFNldCgpO1xuXHRpZiAoYSBpbnN0YW5jZW9mIEFORCkge1xuXHRcdGEub3BuZHMubWFwKGZ1bmN0aW9uKG8pIHtcblx0XHRcdG9wZXJhbmRzLmFkZChvKTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvcGVyYW5kcy5hZGQoYSk7XG5cdH1cblx0aWYgKGIgaW5zdGFuY2VvZiBBTkQpIHtcblx0XHRiLm9wbmRzLm1hcChmdW5jdGlvbihvKSB7XG5cdFx0XHRvcGVyYW5kcy5hZGQobyk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b3BlcmFuZHMuYWRkKGIpO1xuXHR9XG5cdHZhciBwcmVjZWRlbmNlUHJlZGljYXRlcyA9IFByZWNlZGVuY2VQcmVkaWNhdGUuZmlsdGVyUHJlY2VkZW5jZVByZWRpY2F0ZXMob3BlcmFuZHMpO1xuXHRpZiAocHJlY2VkZW5jZVByZWRpY2F0ZXMubGVuZ3RoID4gMCkge1xuXHRcdC8vIGludGVyZXN0ZWQgaW4gdGhlIHRyYW5zaXRpb24gd2l0aCB0aGUgbG93ZXN0IHByZWNlZGVuY2Vcblx0XHR2YXIgcmVkdWNlZCA9IG51bGw7XG5cdFx0cHJlY2VkZW5jZVByZWRpY2F0ZXMubWFwKCBmdW5jdGlvbihwKSB7XG5cdFx0XHRpZihyZWR1Y2VkPT09bnVsbCB8fCBwLnByZWNlZGVuY2U8cmVkdWNlZC5wcmVjZWRlbmNlKSB7XG5cdFx0XHRcdHJlZHVjZWQgPSBwO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdG9wZXJhbmRzLmFkZChyZWR1Y2VkKTtcblx0fVxuXHR0aGlzLm9wbmRzID0gb3BlcmFuZHMudmFsdWVzKCk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5BTkQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTZW1hbnRpY0NvbnRleHQucHJvdG90eXBlKTtcbkFORC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBTkQ7XG5cbkFORC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0aWYgKHRoaXMgPT09IG90aGVyKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoIShvdGhlciBpbnN0YW5jZW9mIEFORCkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMub3BuZHMgPT09IG90aGVyLm9wbmRzO1xuXHR9XG59O1xuXG5BTkQucHJvdG90eXBlLnVwZGF0ZUhhc2hDb2RlID0gZnVuY3Rpb24oaGFzaCkge1xuICAgIGhhc2gudXBkYXRlKHRoaXMub3BuZHMsIFwiQU5EXCIpO1xufTtcbi8vXG4vLyB7QGluaGVyaXREb2N9XG4vL1xuLy8gPHA+XG4vLyBUaGUgZXZhbHVhdGlvbiBvZiBwcmVkaWNhdGVzIGJ5IHRoaXMgY29udGV4dCBpcyBzaG9ydC1jaXJjdWl0aW5nLCBidXRcbi8vIHVub3JkZXJlZC48L3A+XG4vL1xuQU5ELnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uKHBhcnNlciwgb3V0ZXJDb250ZXh0KSB7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vcG5kcy5sZW5ndGg7IGkrKykge1xuXHRcdGlmICghdGhpcy5vcG5kc1tpXS5ldmFsdWF0ZShwYXJzZXIsIG91dGVyQ29udGV4dCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHRydWU7XG59O1xuXG5BTkQucHJvdG90eXBlLmV2YWxQcmVjZWRlbmNlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0dmFyIGRpZmZlcnMgPSBmYWxzZTtcblx0dmFyIG9wZXJhbmRzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vcG5kcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBjb250ZXh0ID0gdGhpcy5vcG5kc1tpXTtcblx0XHR2YXIgZXZhbHVhdGVkID0gY29udGV4dC5ldmFsUHJlY2VkZW5jZShwYXJzZXIsIG91dGVyQ29udGV4dCk7XG5cdFx0ZGlmZmVycyB8PSAoZXZhbHVhdGVkICE9PSBjb250ZXh0KTtcblx0XHRpZiAoZXZhbHVhdGVkID09PSBudWxsKSB7XG5cdFx0XHQvLyBUaGUgQU5EIGNvbnRleHQgaXMgZmFsc2UgaWYgYW55IGVsZW1lbnQgaXMgZmFsc2Vcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0gZWxzZSBpZiAoZXZhbHVhdGVkICE9PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdFx0Ly8gUmVkdWNlIHRoZSByZXN1bHQgYnkgc2tpcHBpbmcgdHJ1ZSBlbGVtZW50c1xuXHRcdFx0b3BlcmFuZHMucHVzaChldmFsdWF0ZWQpO1xuXHRcdH1cblx0fVxuXHRpZiAoIWRpZmZlcnMpIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRpZiAob3BlcmFuZHMubGVuZ3RoID09PSAwKSB7XG5cdFx0Ly8gYWxsIGVsZW1lbnRzIHdlcmUgdHJ1ZSwgc28gdGhlIEFORCBjb250ZXh0IGlzIHRydWVcblx0XHRyZXR1cm4gU2VtYW50aWNDb250ZXh0Lk5PTkU7XG5cdH1cblx0dmFyIHJlc3VsdCA9IG51bGw7XG5cdG9wZXJhbmRzLm1hcChmdW5jdGlvbihvKSB7XG5cdFx0cmVzdWx0ID0gcmVzdWx0ID09PSBudWxsID8gbyA6IFNlbWFudGljQ29udGV4dC5hbmRDb250ZXh0KHJlc3VsdCwgbyk7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuQU5ELnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgcyA9IFwiXCI7XG5cdHRoaXMub3BuZHMubWFwKGZ1bmN0aW9uKG8pIHtcblx0XHRzICs9IFwiJiYgXCIgKyBvLnRvU3RyaW5nKCk7XG5cdH0pO1xuXHRyZXR1cm4gcy5sZW5ndGggPiAzID8gcy5zbGljZSgzKSA6IHM7XG59O1xuXG4vL1xuLy8gQSBzZW1hbnRpYyBjb250ZXh0IHdoaWNoIGlzIHRydWUgd2hlbmV2ZXIgYXQgbGVhc3Qgb25lIG9mIHRoZSBjb250YWluZWRcbi8vIGNvbnRleHRzIGlzIHRydWUuXG4vL1xuZnVuY3Rpb24gT1IoYSwgYikge1xuXHRTZW1hbnRpY0NvbnRleHQuY2FsbCh0aGlzKTtcblx0dmFyIG9wZXJhbmRzID0gbmV3IFNldCgpO1xuXHRpZiAoYSBpbnN0YW5jZW9mIE9SKSB7XG5cdFx0YS5vcG5kcy5tYXAoZnVuY3Rpb24obykge1xuXHRcdFx0b3BlcmFuZHMuYWRkKG8pO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9wZXJhbmRzLmFkZChhKTtcblx0fVxuXHRpZiAoYiBpbnN0YW5jZW9mIE9SKSB7XG5cdFx0Yi5vcG5kcy5tYXAoZnVuY3Rpb24obykge1xuXHRcdFx0b3BlcmFuZHMuYWRkKG8pO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9wZXJhbmRzLmFkZChiKTtcblx0fVxuXG5cdHZhciBwcmVjZWRlbmNlUHJlZGljYXRlcyA9IFByZWNlZGVuY2VQcmVkaWNhdGUuZmlsdGVyUHJlY2VkZW5jZVByZWRpY2F0ZXMob3BlcmFuZHMpO1xuXHRpZiAocHJlY2VkZW5jZVByZWRpY2F0ZXMubGVuZ3RoID4gMCkge1xuXHRcdC8vIGludGVyZXN0ZWQgaW4gdGhlIHRyYW5zaXRpb24gd2l0aCB0aGUgaGlnaGVzdCBwcmVjZWRlbmNlXG5cdFx0dmFyIHMgPSBwcmVjZWRlbmNlUHJlZGljYXRlcy5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRcdHJldHVybiBhLmNvbXBhcmVUbyhiKTtcblx0XHR9KTtcblx0XHR2YXIgcmVkdWNlZCA9IHNbcy5sZW5ndGgtMV07XG5cdFx0b3BlcmFuZHMuYWRkKHJlZHVjZWQpO1xuXHR9XG5cdHRoaXMub3BuZHMgPSBvcGVyYW5kcy52YWx1ZXMoKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbk9SLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2VtYW50aWNDb250ZXh0LnByb3RvdHlwZSk7XG5PUi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBPUjtcblxuT1IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0aWYgKHRoaXMgPT09IG90aGVyKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoIShvdGhlciBpbnN0YW5jZW9mIE9SKSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5vcG5kcyA9PT0gb3RoZXIub3BuZHM7XG5cdH1cbn07XG5cbk9SLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLm9wbmRzLCBcIk9SXCIpO1xufTtcblxuLy8gPHA+XG4vLyBUaGUgZXZhbHVhdGlvbiBvZiBwcmVkaWNhdGVzIGJ5IHRoaXMgY29udGV4dCBpcyBzaG9ydC1jaXJjdWl0aW5nLCBidXRcbi8vIHVub3JkZXJlZC48L3A+XG4vL1xuT1IucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm9wbmRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKHRoaXMub3BuZHNbaV0uZXZhbHVhdGUocGFyc2VyLCBvdXRlckNvbnRleHQpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxuT1IucHJvdG90eXBlLmV2YWxQcmVjZWRlbmNlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0dmFyIGRpZmZlcnMgPSBmYWxzZTtcblx0dmFyIG9wZXJhbmRzID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vcG5kcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBjb250ZXh0ID0gdGhpcy5vcG5kc1tpXTtcblx0XHR2YXIgZXZhbHVhdGVkID0gY29udGV4dC5ldmFsUHJlY2VkZW5jZShwYXJzZXIsIG91dGVyQ29udGV4dCk7XG5cdFx0ZGlmZmVycyB8PSAoZXZhbHVhdGVkICE9PSBjb250ZXh0KTtcblx0XHRpZiAoZXZhbHVhdGVkID09PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdFx0Ly8gVGhlIE9SIGNvbnRleHQgaXMgdHJ1ZSBpZiBhbnkgZWxlbWVudCBpcyB0cnVlXG5cdFx0XHRyZXR1cm4gU2VtYW50aWNDb250ZXh0Lk5PTkU7XG5cdFx0fSBlbHNlIGlmIChldmFsdWF0ZWQgIT09IG51bGwpIHtcblx0XHRcdC8vIFJlZHVjZSB0aGUgcmVzdWx0IGJ5IHNraXBwaW5nIGZhbHNlIGVsZW1lbnRzXG5cdFx0XHRvcGVyYW5kcy5wdXNoKGV2YWx1YXRlZCk7XG5cdFx0fVxuXHR9XG5cdGlmICghZGlmZmVycykge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGlmIChvcGVyYW5kcy5sZW5ndGggPT09IDApIHtcblx0XHQvLyBhbGwgZWxlbWVudHMgd2VyZSBmYWxzZSwgc28gdGhlIE9SIGNvbnRleHQgaXMgZmFsc2Vcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHR2YXIgcmVzdWx0ID0gbnVsbDtcblx0b3BlcmFuZHMubWFwKGZ1bmN0aW9uKG8pIHtcblx0XHRyZXR1cm4gcmVzdWx0ID09PSBudWxsID8gbyA6IFNlbWFudGljQ29udGV4dC5vckNvbnRleHQocmVzdWx0LCBvKTtcblx0fSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5PUi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0dmFyIHMgPSBcIlwiO1xuXHR0aGlzLm9wbmRzLm1hcChmdW5jdGlvbihvKSB7XG5cdFx0cyArPSBcInx8IFwiICsgby50b1N0cmluZygpO1xuXHR9KTtcblx0cmV0dXJuIHMubGVuZ3RoID4gMyA/IHMuc2xpY2UoMykgOiBzO1xufTtcblxuZXhwb3J0cy5TZW1hbnRpY0NvbnRleHQgPSBTZW1hbnRpY0NvbnRleHQ7XG5leHBvcnRzLlByZWNlZGVuY2VQcmVkaWNhdGUgPSBQcmVjZWRlbmNlUHJlZGljYXRlO1xuZXhwb3J0cy5QcmVkaWNhdGUgPSBQcmVkaWNhdGU7XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vL1xuXG4vLyAgQW4gQVROIHRyYW5zaXRpb24gYmV0d2VlbiBhbnkgdHdvIEFUTiBzdGF0ZXMuICBTdWJjbGFzc2VzIGRlZmluZVxuLy8gIGF0b20sIHNldCwgZXBzaWxvbiwgYWN0aW9uLCBwcmVkaWNhdGUsIHJ1bGUgdHJhbnNpdGlvbnMuXG4vL1xuLy8gIDxwPlRoaXMgaXMgYSBvbmUgd2F5IGxpbmsuICBJdCBlbWFuYXRlcyBmcm9tIGEgc3RhdGUgKHVzdWFsbHkgdmlhIGEgbGlzdCBvZlxuLy8gIHRyYW5zaXRpb25zKSBhbmQgaGFzIGEgdGFyZ2V0IHN0YXRlLjwvcD5cbi8vXG4vLyAgPHA+U2luY2Ugd2UgbmV2ZXIgaGF2ZSB0byBjaGFuZ2UgdGhlIEFUTiB0cmFuc2l0aW9ucyBvbmNlIHdlIGNvbnN0cnVjdCBpdCxcbi8vICB3ZSBjYW4gZml4IHRoZXNlIHRyYW5zaXRpb25zIGFzIHNwZWNpZmljIGNsYXNzZXMuIFRoZSBERkEgdHJhbnNpdGlvbnNcbi8vICBvbiB0aGUgb3RoZXIgaGFuZCBuZWVkIHRvIHVwZGF0ZSB0aGUgbGFiZWxzIGFzIGl0IGFkZHMgdHJhbnNpdGlvbnMgdG9cbi8vICB0aGUgc3RhdGVzLiBXZSdsbCB1c2UgdGhlIHRlcm0gRWRnZSBmb3IgdGhlIERGQSB0byBkaXN0aW5ndWlzaCB0aGVtIGZyb21cbi8vICBBVE4gdHJhbnNpdGlvbnMuPC9wPlxuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuLy4uL1Rva2VuJykuVG9rZW47XG52YXIgSW50ZXJ2YWwgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG52YXIgSW50ZXJ2YWxTZXQgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWxTZXQ7XG52YXIgUHJlZGljYXRlID0gcmVxdWlyZSgnLi9TZW1hbnRpY0NvbnRleHQnKS5QcmVkaWNhdGU7XG52YXIgUHJlY2VkZW5jZVByZWRpY2F0ZSA9IHJlcXVpcmUoJy4vU2VtYW50aWNDb250ZXh0JykuUHJlY2VkZW5jZVByZWRpY2F0ZTtcblxuZnVuY3Rpb24gVHJhbnNpdGlvbiAodGFyZ2V0KSB7XG4gICAgLy8gVGhlIHRhcmdldCBvZiB0aGlzIHRyYW5zaXRpb24uXG4gICAgaWYgKHRhcmdldD09PXVuZGVmaW5lZCB8fCB0YXJnZXQ9PT1udWxsKSB7XG4gICAgICAgIHRocm93IFwidGFyZ2V0IGNhbm5vdCBiZSBudWxsLlwiO1xuICAgIH1cbiAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICAvLyBBcmUgd2UgZXBzaWxvbiwgYWN0aW9uLCBzZW1wcmVkP1xuICAgIHRoaXMuaXNFcHNpbG9uID0gZmFsc2U7XG4gICAgdGhpcy5sYWJlbCA9IG51bGw7XG4gICAgcmV0dXJuIHRoaXM7XG59XG4gICAgLy8gY29uc3RhbnRzIGZvciBzZXJpYWxpemF0aW9uXG5UcmFuc2l0aW9uLkVQU0lMT04gPSAxO1xuVHJhbnNpdGlvbi5SQU5HRSA9IDI7XG5UcmFuc2l0aW9uLlJVTEUgPSAzO1xuVHJhbnNpdGlvbi5QUkVESUNBVEUgPSA0OyAvLyBlLmcuLCB7aXNUeXBlKGlucHV0LkxUKDEpKX0/XG5UcmFuc2l0aW9uLkFUT00gPSA1O1xuVHJhbnNpdGlvbi5BQ1RJT04gPSA2O1xuVHJhbnNpdGlvbi5TRVQgPSA3OyAvLyB+KEF8Qikgb3IgfmF0b20sIHdpbGRjYXJkLCB3aGljaCBjb252ZXJ0IHRvIG5leHQgMlxuVHJhbnNpdGlvbi5OT1RfU0VUID0gODtcblRyYW5zaXRpb24uV0lMRENBUkQgPSA5O1xuVHJhbnNpdGlvbi5QUkVDRURFTkNFID0gMTA7XG5cblRyYW5zaXRpb24uc2VyaWFsaXphdGlvbk5hbWVzID0gW1xuICAgICAgICAgICAgXCJJTlZBTElEXCIsXG4gICAgICAgICAgICBcIkVQU0lMT05cIixcbiAgICAgICAgICAgIFwiUkFOR0VcIixcbiAgICAgICAgICAgIFwiUlVMRVwiLFxuICAgICAgICAgICAgXCJQUkVESUNBVEVcIixcbiAgICAgICAgICAgIFwiQVRPTVwiLFxuICAgICAgICAgICAgXCJBQ1RJT05cIixcbiAgICAgICAgICAgIFwiU0VUXCIsXG4gICAgICAgICAgICBcIk5PVF9TRVRcIixcbiAgICAgICAgICAgIFwiV0lMRENBUkRcIixcbiAgICAgICAgICAgIFwiUFJFQ0VERU5DRVwiXG4gICAgICAgIF07XG5cblRyYW5zaXRpb24uc2VyaWFsaXphdGlvblR5cGVzID0ge1xuICAgICAgICBFcHNpbG9uVHJhbnNpdGlvbjogVHJhbnNpdGlvbi5FUFNJTE9OLFxuICAgICAgICBSYW5nZVRyYW5zaXRpb246IFRyYW5zaXRpb24uUkFOR0UsXG4gICAgICAgIFJ1bGVUcmFuc2l0aW9uOiBUcmFuc2l0aW9uLlJVTEUsXG4gICAgICAgIFByZWRpY2F0ZVRyYW5zaXRpb246IFRyYW5zaXRpb24uUFJFRElDQVRFLFxuICAgICAgICBBdG9tVHJhbnNpdGlvbjogVHJhbnNpdGlvbi5BVE9NLFxuICAgICAgICBBY3Rpb25UcmFuc2l0aW9uOiBUcmFuc2l0aW9uLkFDVElPTixcbiAgICAgICAgU2V0VHJhbnNpdGlvbjogVHJhbnNpdGlvbi5TRVQsXG4gICAgICAgIE5vdFNldFRyYW5zaXRpb246IFRyYW5zaXRpb24uTk9UX1NFVCxcbiAgICAgICAgV2lsZGNhcmRUcmFuc2l0aW9uOiBUcmFuc2l0aW9uLldJTERDQVJELFxuICAgICAgICBQcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbjogVHJhbnNpdGlvbi5QUkVDRURFTkNFXG4gICAgfTtcblxuXG4vLyBUT0RPOiBtYWtlIGFsbCB0cmFuc2l0aW9ucyBzZXRzPyBubywgc2hvdWxkIHJlbW92ZSBzZXQgZWRnZXNcbmZ1bmN0aW9uIEF0b21UcmFuc2l0aW9uKHRhcmdldCwgbGFiZWwpIHtcblx0VHJhbnNpdGlvbi5jYWxsKHRoaXMsIHRhcmdldCk7XG5cdHRoaXMubGFiZWxfID0gbGFiZWw7IC8vIFRoZSB0b2tlbiB0eXBlIG9yIGNoYXJhY3RlciB2YWx1ZTsgb3IsIHNpZ25pZmllcyBzcGVjaWFsIGxhYmVsLlxuICAgIHRoaXMubGFiZWwgPSB0aGlzLm1ha2VMYWJlbCgpO1xuICAgIHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLkFUT007XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkF0b21UcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuQXRvbVRyYW5zaXRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXRvbVRyYW5zaXRpb247XG5cbkF0b21UcmFuc2l0aW9uLnByb3RvdHlwZS5tYWtlTGFiZWwgPSBmdW5jdGlvbigpIHtcblx0dmFyIHMgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICBzLmFkZE9uZSh0aGlzLmxhYmVsXyk7XG4gICAgcmV0dXJuIHM7XG59O1xuXG5BdG9tVHJhbnNpdGlvbi5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcbiAgICByZXR1cm4gdGhpcy5sYWJlbF8gPT09IHN5bWJvbDtcbn07XG5cbkF0b21UcmFuc2l0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5sYWJlbF87XG59O1xuXG5mdW5jdGlvbiBSdWxlVHJhbnNpdGlvbihydWxlU3RhcnQsIHJ1bGVJbmRleCwgcHJlY2VkZW5jZSwgZm9sbG93U3RhdGUpIHtcblx0VHJhbnNpdGlvbi5jYWxsKHRoaXMsIHJ1bGVTdGFydCk7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBydWxlSW5kZXg7IC8vIHB0ciB0byB0aGUgcnVsZSBkZWZpbml0aW9uIG9iamVjdCBmb3IgdGhpcyBydWxlIHJlZlxuICAgIHRoaXMucHJlY2VkZW5jZSA9IHByZWNlZGVuY2U7XG4gICAgdGhpcy5mb2xsb3dTdGF0ZSA9IGZvbGxvd1N0YXRlOyAvLyB3aGF0IG5vZGUgdG8gYmVnaW4gY29tcHV0YXRpb25zIGZvbGxvd2luZyByZWYgdG8gcnVsZVxuICAgIHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLlJVTEU7XG4gICAgdGhpcy5pc0Vwc2lsb24gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5SdWxlVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyYW5zaXRpb24ucHJvdG90eXBlKTtcblJ1bGVUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJ1bGVUcmFuc2l0aW9uO1xuXG5SdWxlVHJhbnNpdGlvbi5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKHN5bWJvbCwgbWluVm9jYWJTeW1ib2wsICBtYXhWb2NhYlN5bWJvbCkge1xuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5cbmZ1bmN0aW9uIEVwc2lsb25UcmFuc2l0aW9uKHRhcmdldCwgb3V0ZXJtb3N0UHJlY2VkZW5jZVJldHVybikge1xuXHRUcmFuc2l0aW9uLmNhbGwodGhpcywgdGFyZ2V0KTtcbiAgICB0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5FUFNJTE9OO1xuICAgIHRoaXMuaXNFcHNpbG9uID0gdHJ1ZTtcbiAgICB0aGlzLm91dGVybW9zdFByZWNlZGVuY2VSZXR1cm4gPSBvdXRlcm1vc3RQcmVjZWRlbmNlUmV0dXJuO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5FcHNpbG9uVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyYW5zaXRpb24ucHJvdG90eXBlKTtcbkVwc2lsb25UcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVwc2lsb25UcmFuc2l0aW9uO1xuXG5FcHNpbG9uVHJhbnNpdGlvbi5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIGZhbHNlO1xufTtcblxuRXBzaWxvblRyYW5zaXRpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBcImVwc2lsb25cIjtcbn07XG5cbmZ1bmN0aW9uIFJhbmdlVHJhbnNpdGlvbih0YXJnZXQsIHN0YXJ0LCBzdG9wKSB7XG5cdFRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuXHR0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5SQU5HRTtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7XG4gICAgdGhpcy5zdG9wID0gc3RvcDtcbiAgICB0aGlzLmxhYmVsID0gdGhpcy5tYWtlTGFiZWwoKTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuUmFuZ2VUcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuUmFuZ2VUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJhbmdlVHJhbnNpdGlvbjtcblxuUmFuZ2VUcmFuc2l0aW9uLnByb3RvdHlwZS5tYWtlTGFiZWwgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcyA9IG5ldyBJbnRlcnZhbFNldCgpO1xuICAgIHMuYWRkUmFuZ2UodGhpcy5zdGFydCwgdGhpcy5zdG9wKTtcbiAgICByZXR1cm4gcztcbn07XG5cblJhbmdlVHJhbnNpdGlvbi5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKHN5bWJvbCwgbWluVm9jYWJTeW1ib2wsICBtYXhWb2NhYlN5bWJvbCkge1xuXHRyZXR1cm4gc3ltYm9sID49IHRoaXMuc3RhcnQgJiYgc3ltYm9sIDw9IHRoaXMuc3RvcDtcbn07XG5cblJhbmdlVHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIFwiJ1wiICsgU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLnN0YXJ0KSArIFwiJy4uJ1wiICsgU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLnN0b3ApICsgXCInXCI7XG59O1xuXG5mdW5jdGlvbiBBYnN0cmFjdFByZWRpY2F0ZVRyYW5zaXRpb24odGFyZ2V0KSB7XG5cdFRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuQWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuQWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbjtcblxuZnVuY3Rpb24gUHJlZGljYXRlVHJhbnNpdGlvbih0YXJnZXQsIHJ1bGVJbmRleCwgcHJlZEluZGV4LCBpc0N0eERlcGVuZGVudCkge1xuXHRBYnN0cmFjdFByZWRpY2F0ZVRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuICAgIHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLlBSRURJQ0FURTtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IHJ1bGVJbmRleDtcbiAgICB0aGlzLnByZWRJbmRleCA9IHByZWRJbmRleDtcbiAgICB0aGlzLmlzQ3R4RGVwZW5kZW50ID0gaXNDdHhEZXBlbmRlbnQ7IC8vIGUuZy4sICRpIHJlZiBpbiBwcmVkXG4gICAgdGhpcy5pc0Vwc2lsb24gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5QcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZSk7XG5QcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByZWRpY2F0ZVRyYW5zaXRpb247XG5cblByZWRpY2F0ZVRyYW5zaXRpb24ucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbihzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIGZhbHNlO1xufTtcblxuUHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUuZ2V0UHJlZGljYXRlID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBuZXcgUHJlZGljYXRlKHRoaXMucnVsZUluZGV4LCB0aGlzLnByZWRJbmRleCwgdGhpcy5pc0N0eERlcGVuZGVudCk7XG59O1xuXG5QcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJwcmVkX1wiICsgdGhpcy5ydWxlSW5kZXggKyBcIjpcIiArIHRoaXMucHJlZEluZGV4O1xufTtcblxuZnVuY3Rpb24gQWN0aW9uVHJhbnNpdGlvbih0YXJnZXQsIHJ1bGVJbmRleCwgYWN0aW9uSW5kZXgsIGlzQ3R4RGVwZW5kZW50KSB7XG5cdFRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuICAgIHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLkFDVElPTjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IHJ1bGVJbmRleDtcbiAgICB0aGlzLmFjdGlvbkluZGV4ID0gYWN0aW9uSW5kZXg9PT11bmRlZmluZWQgPyAtMSA6IGFjdGlvbkluZGV4O1xuICAgIHRoaXMuaXNDdHhEZXBlbmRlbnQgPSBpc0N0eERlcGVuZGVudD09PXVuZGVmaW5lZCA/IGZhbHNlIDogaXNDdHhEZXBlbmRlbnQ7IC8vIGUuZy4sICRpIHJlZiBpbiBwcmVkXG4gICAgdGhpcy5pc0Vwc2lsb24gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5BY3Rpb25UcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuQWN0aW9uVHJhbnNpdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBY3Rpb25UcmFuc2l0aW9uO1xuXG5cbkFjdGlvblRyYW5zaXRpb24ucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbihzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIGZhbHNlO1xufTtcblxuQWN0aW9uVHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIFwiYWN0aW9uX1wiICsgdGhpcy5ydWxlSW5kZXggKyBcIjpcIiArIHRoaXMuYWN0aW9uSW5kZXg7XG59O1xuXG5cbi8vIEEgdHJhbnNpdGlvbiBjb250YWluaW5nIGEgc2V0IG9mIHZhbHVlcy5cbmZ1bmN0aW9uIFNldFRyYW5zaXRpb24odGFyZ2V0LCBzZXQpIHtcblx0VHJhbnNpdGlvbi5jYWxsKHRoaXMsIHRhcmdldCk7XG5cdHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLlNFVDtcbiAgICBpZiAoc2V0ICE9PXVuZGVmaW5lZCAmJiBzZXQgIT09bnVsbCkge1xuICAgICAgICB0aGlzLmxhYmVsID0gc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGFiZWwgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICAgICAgdGhpcy5sYWJlbC5hZGRPbmUoVG9rZW4uSU5WQUxJRF9UWVBFKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblNldFRyYW5zaXRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUcmFuc2l0aW9uLnByb3RvdHlwZSk7XG5TZXRUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFNldFRyYW5zaXRpb247XG5cblNldFRyYW5zaXRpb24ucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbihzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIHRoaXMubGFiZWwuY29udGFpbnMoc3ltYm9sKTtcbn07XG5cblxuU2V0VHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMubGFiZWwudG9TdHJpbmcoKTtcbn07XG5cbmZ1bmN0aW9uIE5vdFNldFRyYW5zaXRpb24odGFyZ2V0LCBzZXQpIHtcblx0U2V0VHJhbnNpdGlvbi5jYWxsKHRoaXMsIHRhcmdldCwgc2V0KTtcblx0dGhpcy5zZXJpYWxpemF0aW9uVHlwZSA9IFRyYW5zaXRpb24uTk9UX1NFVDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbk5vdFNldFRyYW5zaXRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTZXRUcmFuc2l0aW9uLnByb3RvdHlwZSk7XG5Ob3RTZXRUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE5vdFNldFRyYW5zaXRpb247XG5cbk5vdFNldFRyYW5zaXRpb24ucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbihzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIHN5bWJvbCA+PSBtaW5Wb2NhYlN5bWJvbCAmJiBzeW1ib2wgPD0gbWF4Vm9jYWJTeW1ib2wgJiZcblx0XHRcdCFTZXRUcmFuc2l0aW9uLnByb3RvdHlwZS5tYXRjaGVzLmNhbGwodGhpcywgc3ltYm9sLCBtaW5Wb2NhYlN5bWJvbCwgbWF4Vm9jYWJTeW1ib2wpO1xufTtcblxuTm90U2V0VHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuICd+JyArIFNldFRyYW5zaXRpb24ucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcyk7XG59O1xuXG5mdW5jdGlvbiBXaWxkY2FyZFRyYW5zaXRpb24odGFyZ2V0KSB7XG5cdFRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuXHR0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5XSUxEQ0FSRDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbldpbGRjYXJkVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyYW5zaXRpb24ucHJvdG90eXBlKTtcbldpbGRjYXJkVHJhbnNpdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBXaWxkY2FyZFRyYW5zaXRpb247XG5cblxuV2lsZGNhcmRUcmFuc2l0aW9uLnByb3RvdHlwZS5tYXRjaGVzID0gZnVuY3Rpb24oc3ltYm9sLCBtaW5Wb2NhYlN5bWJvbCwgIG1heFZvY2FiU3ltYm9sKSB7XG5cdHJldHVybiBzeW1ib2wgPj0gbWluVm9jYWJTeW1ib2wgJiYgc3ltYm9sIDw9IG1heFZvY2FiU3ltYm9sO1xufTtcblxuV2lsZGNhcmRUcmFuc2l0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCIuXCI7XG59O1xuXG5mdW5jdGlvbiBQcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbih0YXJnZXQsIHByZWNlZGVuY2UpIHtcblx0QWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uLmNhbGwodGhpcywgdGFyZ2V0KTtcbiAgICB0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5QUkVDRURFTkNFO1xuICAgIHRoaXMucHJlY2VkZW5jZSA9IHByZWNlZGVuY2U7XG4gICAgdGhpcy5pc0Vwc2lsb24gPSB0cnVlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5QcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuUHJlY2VkZW5jZVByZWRpY2F0ZVRyYW5zaXRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHJlY2VkZW5jZVByZWRpY2F0ZVRyYW5zaXRpb247XG5cblByZWNlZGVuY2VQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS5tYXRjaGVzID0gZnVuY3Rpb24oc3ltYm9sLCBtaW5Wb2NhYlN5bWJvbCwgIG1heFZvY2FiU3ltYm9sKSB7XG5cdHJldHVybiBmYWxzZTtcbn07XG5cblByZWNlZGVuY2VQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS5nZXRQcmVkaWNhdGUgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIG5ldyBQcmVjZWRlbmNlUHJlZGljYXRlKHRoaXMucHJlY2VkZW5jZSk7XG59O1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMucHJlY2VkZW5jZSArIFwiID49IF9wXCI7XG59O1xuXG5leHBvcnRzLlRyYW5zaXRpb24gPSBUcmFuc2l0aW9uO1xuZXhwb3J0cy5BdG9tVHJhbnNpdGlvbiA9IEF0b21UcmFuc2l0aW9uO1xuZXhwb3J0cy5TZXRUcmFuc2l0aW9uID0gU2V0VHJhbnNpdGlvbjtcbmV4cG9ydHMuTm90U2V0VHJhbnNpdGlvbiA9IE5vdFNldFRyYW5zaXRpb247XG5leHBvcnRzLlJ1bGVUcmFuc2l0aW9uID0gUnVsZVRyYW5zaXRpb247XG5leHBvcnRzLkFjdGlvblRyYW5zaXRpb24gPSBBY3Rpb25UcmFuc2l0aW9uO1xuZXhwb3J0cy5FcHNpbG9uVHJhbnNpdGlvbiA9IEVwc2lsb25UcmFuc2l0aW9uO1xuZXhwb3J0cy5SYW5nZVRyYW5zaXRpb24gPSBSYW5nZVRyYW5zaXRpb247XG5leHBvcnRzLldpbGRjYXJkVHJhbnNpdGlvbiA9IFdpbGRjYXJkVHJhbnNpdGlvbjtcbmV4cG9ydHMuUHJlZGljYXRlVHJhbnNpdGlvbiA9IFByZWRpY2F0ZVRyYW5zaXRpb247XG5leHBvcnRzLlByZWNlZGVuY2VQcmVkaWNhdGVUcmFuc2l0aW9uID0gUHJlY2VkZW5jZVByZWRpY2F0ZVRyYW5zaXRpb247XG5leHBvcnRzLkFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbiA9IEFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbjsiLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbmV4cG9ydHMuQVROID0gcmVxdWlyZSgnLi9BVE4nKS5BVE47XG5leHBvcnRzLkFUTkRlc2VyaWFsaXplciA9IHJlcXVpcmUoJy4vQVRORGVzZXJpYWxpemVyJykuQVRORGVzZXJpYWxpemVyO1xuZXhwb3J0cy5MZXhlckFUTlNpbXVsYXRvciA9IHJlcXVpcmUoJy4vTGV4ZXJBVE5TaW11bGF0b3InKS5MZXhlckFUTlNpbXVsYXRvcjtcbmV4cG9ydHMuUGFyc2VyQVROU2ltdWxhdG9yID0gcmVxdWlyZSgnLi9QYXJzZXJBVE5TaW11bGF0b3InKS5QYXJzZXJBVE5TaW11bGF0b3I7XG5leHBvcnRzLlByZWRpY3Rpb25Nb2RlID0gcmVxdWlyZSgnLi9QcmVkaWN0aW9uTW9kZScpLlByZWRpY3Rpb25Nb2RlO1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxudmFyIFNldCA9IHJlcXVpcmUoXCIuLi9VdGlsc1wiKS5TZXQ7XG52YXIgREZBU3RhdGUgPSByZXF1aXJlKCcuL0RGQVN0YXRlJykuREZBU3RhdGU7XG52YXIgU3Rhckxvb3BFbnRyeVN0YXRlID0gcmVxdWlyZSgnLi4vYXRuL0FUTlN0YXRlJykuU3Rhckxvb3BFbnRyeVN0YXRlO1xudmFyIEFUTkNvbmZpZ1NldCA9IHJlcXVpcmUoJy4vLi4vYXRuL0FUTkNvbmZpZ1NldCcpLkFUTkNvbmZpZ1NldDtcbnZhciBERkFTZXJpYWxpemVyID0gcmVxdWlyZSgnLi9ERkFTZXJpYWxpemVyJykuREZBU2VyaWFsaXplcjtcbnZhciBMZXhlckRGQVNlcmlhbGl6ZXIgPSByZXF1aXJlKCcuL0RGQVNlcmlhbGl6ZXInKS5MZXhlckRGQVNlcmlhbGl6ZXI7XG5cblxuXG5mdW5jdGlvbiBERkEoYXRuU3RhcnRTdGF0ZSwgZGVjaXNpb24pIHtcblx0aWYgKGRlY2lzaW9uID09PSB1bmRlZmluZWQpIHtcblx0XHRkZWNpc2lvbiA9IDA7XG5cdH1cblx0Ly8gRnJvbSB3aGljaCBBVE4gc3RhdGUgZGlkIHdlIGNyZWF0ZSB0aGlzIERGQT9cblx0dGhpcy5hdG5TdGFydFN0YXRlID0gYXRuU3RhcnRTdGF0ZTtcblx0dGhpcy5kZWNpc2lvbiA9IGRlY2lzaW9uO1xuXHQvLyBBIHNldCBvZiBhbGwgREZBIHN0YXRlcy4gVXNlIHtAbGluayBNYXB9IHNvIHdlIGNhbiBnZXQgb2xkIHN0YXRlIGJhY2tcblx0Ly8gKHtAbGluayBTZXR9IG9ubHkgYWxsb3dzIHlvdSB0byBzZWUgaWYgaXQncyB0aGVyZSkuXG5cdHRoaXMuX3N0YXRlcyA9IG5ldyBTZXQoKTtcblx0dGhpcy5zMCA9IG51bGw7XG5cdC8vIHtAY29kZSB0cnVlfSBpZiB0aGlzIERGQSBpcyBmb3IgYSBwcmVjZWRlbmNlIGRlY2lzaW9uOyBvdGhlcndpc2UsXG5cdC8vIHtAY29kZSBmYWxzZX0uIFRoaXMgaXMgdGhlIGJhY2tpbmcgZmllbGQgZm9yIHtAbGluayAvL2lzUHJlY2VkZW5jZURmYX0sXG5cdC8vIHtAbGluayAvL3NldFByZWNlZGVuY2VEZmF9LlxuXHR0aGlzLnByZWNlZGVuY2VEZmEgPSBmYWxzZTtcbiAgICBpZiAoYXRuU3RhcnRTdGF0ZSBpbnN0YW5jZW9mIFN0YXJMb29wRW50cnlTdGF0ZSlcbiAgICB7XG4gICAgICAgIGlmIChhdG5TdGFydFN0YXRlLmlzUHJlY2VkZW5jZURlY2lzaW9uKSB7XG4gICAgICAgICAgICB0aGlzLnByZWNlZGVuY2VEZmEgPSB0cnVlO1xuICAgICAgICAgICAgdmFyIHByZWNlZGVuY2VTdGF0ZSA9IG5ldyBERkFTdGF0ZShudWxsLCBuZXcgQVROQ29uZmlnU2V0KCkpO1xuICAgICAgICAgICAgcHJlY2VkZW5jZVN0YXRlLmVkZ2VzID0gW107XG4gICAgICAgICAgICBwcmVjZWRlbmNlU3RhdGUuaXNBY2NlcHRTdGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgcHJlY2VkZW5jZVN0YXRlLnJlcXVpcmVzRnVsbENvbnRleHQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuczAgPSBwcmVjZWRlbmNlU3RhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cdHJldHVybiB0aGlzO1xufVxuXG4vLyBHZXQgdGhlIHN0YXJ0IHN0YXRlIGZvciBhIHNwZWNpZmljIHByZWNlZGVuY2UgdmFsdWUuXG4vL1xuLy8gQHBhcmFtIHByZWNlZGVuY2UgVGhlIGN1cnJlbnQgcHJlY2VkZW5jZS5cbi8vIEByZXR1cm4gVGhlIHN0YXJ0IHN0YXRlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHNwZWNpZmllZCBwcmVjZWRlbmNlLCBvclxuLy8ge0Bjb2RlIG51bGx9IGlmIG5vIHN0YXJ0IHN0YXRlIGV4aXN0cyBmb3IgdGhlIHNwZWNpZmllZCBwcmVjZWRlbmNlLlxuLy9cbi8vIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoaXMgaXMgbm90IGEgcHJlY2VkZW5jZSBERkEuXG4vLyBAc2VlIC8vaXNQcmVjZWRlbmNlRGZhKClcblxuREZBLnByb3RvdHlwZS5nZXRQcmVjZWRlbmNlU3RhcnRTdGF0ZSA9IGZ1bmN0aW9uKHByZWNlZGVuY2UpIHtcblx0aWYgKCEodGhpcy5wcmVjZWRlbmNlRGZhKSkge1xuXHRcdHRocm93IChcIk9ubHkgcHJlY2VkZW5jZSBERkFzIG1heSBjb250YWluIGEgcHJlY2VkZW5jZSBzdGFydCBzdGF0ZS5cIik7XG5cdH1cblx0Ly8gczAuZWRnZXMgaXMgbmV2ZXIgbnVsbCBmb3IgYSBwcmVjZWRlbmNlIERGQVxuXHRpZiAocHJlY2VkZW5jZSA8IDAgfHwgcHJlY2VkZW5jZSA+PSB0aGlzLnMwLmVkZ2VzLmxlbmd0aCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdHJldHVybiB0aGlzLnMwLmVkZ2VzW3ByZWNlZGVuY2VdIHx8IG51bGw7XG59O1xuXG4vLyBTZXQgdGhlIHN0YXJ0IHN0YXRlIGZvciBhIHNwZWNpZmljIHByZWNlZGVuY2UgdmFsdWUuXG4vL1xuLy8gQHBhcmFtIHByZWNlZGVuY2UgVGhlIGN1cnJlbnQgcHJlY2VkZW5jZS5cbi8vIEBwYXJhbSBzdGFydFN0YXRlIFRoZSBzdGFydCBzdGF0ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBzcGVjaWZpZWRcbi8vIHByZWNlZGVuY2UuXG4vL1xuLy8gQHRocm93cyBJbGxlZ2FsU3RhdGVFeGNlcHRpb24gaWYgdGhpcyBpcyBub3QgYSBwcmVjZWRlbmNlIERGQS5cbi8vIEBzZWUgLy9pc1ByZWNlZGVuY2VEZmEoKVxuLy9cbkRGQS5wcm90b3R5cGUuc2V0UHJlY2VkZW5jZVN0YXJ0U3RhdGUgPSBmdW5jdGlvbihwcmVjZWRlbmNlLCBzdGFydFN0YXRlKSB7XG5cdGlmICghKHRoaXMucHJlY2VkZW5jZURmYSkpIHtcblx0XHR0aHJvdyAoXCJPbmx5IHByZWNlZGVuY2UgREZBcyBtYXkgY29udGFpbiBhIHByZWNlZGVuY2Ugc3RhcnQgc3RhdGUuXCIpO1xuXHR9XG5cdGlmIChwcmVjZWRlbmNlIDwgMCkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIHN5bmNocm9uaXphdGlvbiBvbiBzMCBoZXJlIGlzIG9rLiB3aGVuIHRoZSBERkEgaXMgdHVybmVkIGludG8gYVxuXHQvLyBwcmVjZWRlbmNlIERGQSwgczAgd2lsbCBiZSBpbml0aWFsaXplZCBvbmNlIGFuZCBub3QgdXBkYXRlZCBhZ2FpblxuXHQvLyBzMC5lZGdlcyBpcyBuZXZlciBudWxsIGZvciBhIHByZWNlZGVuY2UgREZBXG5cdHRoaXMuczAuZWRnZXNbcHJlY2VkZW5jZV0gPSBzdGFydFN0YXRlO1xufTtcblxuLy9cbi8vIFNldHMgd2hldGhlciB0aGlzIGlzIGEgcHJlY2VkZW5jZSBERkEuIElmIHRoZSBzcGVjaWZpZWQgdmFsdWUgZGlmZmVyc1xuLy8gZnJvbSB0aGUgY3VycmVudCBERkEgY29uZmlndXJhdGlvbiwgdGhlIGZvbGxvd2luZyBhY3Rpb25zIGFyZSB0YWtlbjtcbi8vIG90aGVyd2lzZSBubyBjaGFuZ2VzIGFyZSBtYWRlIHRvIHRoZSBjdXJyZW50IERGQS5cbi8vXG4vLyA8dWw+XG4vLyA8bGk+VGhlIHtAbGluayAvL3N0YXRlc30gbWFwIGlzIGNsZWFyZWQ8L2xpPlxuLy8gPGxpPklmIHtAY29kZSBwcmVjZWRlbmNlRGZhfSBpcyB7QGNvZGUgZmFsc2V9LCB0aGUgaW5pdGlhbCBzdGF0ZVxuLy8ge0BsaW5rIC8vczB9IGlzIHNldCB0byB7QGNvZGUgbnVsbH07IG90aGVyd2lzZSwgaXQgaXMgaW5pdGlhbGl6ZWQgdG8gYSBuZXdcbi8vIHtAbGluayBERkFTdGF0ZX0gd2l0aCBhbiBlbXB0eSBvdXRnb2luZyB7QGxpbmsgREZBU3RhdGUvL2VkZ2VzfSBhcnJheSB0b1xuLy8gc3RvcmUgdGhlIHN0YXJ0IHN0YXRlcyBmb3IgaW5kaXZpZHVhbCBwcmVjZWRlbmNlIHZhbHVlcy48L2xpPlxuLy8gPGxpPlRoZSB7QGxpbmsgLy9wcmVjZWRlbmNlRGZhfSBmaWVsZCBpcyB1cGRhdGVkPC9saT5cbi8vIDwvdWw+XG4vL1xuLy8gQHBhcmFtIHByZWNlZGVuY2VEZmEge0Bjb2RlIHRydWV9IGlmIHRoaXMgaXMgYSBwcmVjZWRlbmNlIERGQTsgb3RoZXJ3aXNlLFxuLy8ge0Bjb2RlIGZhbHNlfVxuXG5ERkEucHJvdG90eXBlLnNldFByZWNlZGVuY2VEZmEgPSBmdW5jdGlvbihwcmVjZWRlbmNlRGZhKSB7XG5cdGlmICh0aGlzLnByZWNlZGVuY2VEZmEhPT1wcmVjZWRlbmNlRGZhKSB7XG5cdFx0dGhpcy5fc3RhdGVzID0gbmV3IERGQVN0YXRlc1NldCgpO1xuXHRcdGlmIChwcmVjZWRlbmNlRGZhKSB7XG5cdFx0XHR2YXIgcHJlY2VkZW5jZVN0YXRlID0gbmV3IERGQVN0YXRlKG51bGwsIG5ldyBBVE5Db25maWdTZXQoKSk7XG5cdFx0XHRwcmVjZWRlbmNlU3RhdGUuZWRnZXMgPSBbXTtcblx0XHRcdHByZWNlZGVuY2VTdGF0ZS5pc0FjY2VwdFN0YXRlID0gZmFsc2U7XG5cdFx0XHRwcmVjZWRlbmNlU3RhdGUucmVxdWlyZXNGdWxsQ29udGV4dCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5zMCA9IHByZWNlZGVuY2VTdGF0ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zMCA9IG51bGw7XG5cdFx0fVxuXHRcdHRoaXMucHJlY2VkZW5jZURmYSA9IHByZWNlZGVuY2VEZmE7XG5cdH1cbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShERkEucHJvdG90eXBlLCBcInN0YXRlc1wiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl9zdGF0ZXM7XG5cdH1cbn0pO1xuXG4vLyBSZXR1cm4gYSBsaXN0IG9mIGFsbCBzdGF0ZXMgaW4gdGhpcyBERkEsIG9yZGVyZWQgYnkgc3RhdGUgbnVtYmVyLlxuREZBLnByb3RvdHlwZS5zb3J0ZWRTdGF0ZXMgPSBmdW5jdGlvbigpIHtcblx0dmFyIGxpc3QgPSB0aGlzLl9zdGF0ZXMudmFsdWVzKCk7XG5cdHJldHVybiBsaXN0LnNvcnQoZnVuY3Rpb24oYSwgYikge1xuXHRcdHJldHVybiBhLnN0YXRlTnVtYmVyIC0gYi5zdGF0ZU51bWJlcjtcblx0fSk7XG59O1xuXG5ERkEucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24obGl0ZXJhbE5hbWVzLCBzeW1ib2xpY05hbWVzKSB7XG5cdGxpdGVyYWxOYW1lcyA9IGxpdGVyYWxOYW1lcyB8fCBudWxsO1xuXHRzeW1ib2xpY05hbWVzID0gc3ltYm9saWNOYW1lcyB8fCBudWxsO1xuXHRpZiAodGhpcy5zMCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdHZhciBzZXJpYWxpemVyID0gbmV3IERGQVNlcmlhbGl6ZXIodGhpcywgbGl0ZXJhbE5hbWVzLCBzeW1ib2xpY05hbWVzKTtcblx0cmV0dXJuIHNlcmlhbGl6ZXIudG9TdHJpbmcoKTtcbn07XG5cbkRGQS5wcm90b3R5cGUudG9MZXhlclN0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5zMCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cdHZhciBzZXJpYWxpemVyID0gbmV3IExleGVyREZBU2VyaWFsaXplcih0aGlzKTtcblx0cmV0dXJuIHNlcmlhbGl6ZXIudG9TdHJpbmcoKTtcbn07XG5cbmV4cG9ydHMuREZBID0gREZBO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG4vLyBBIERGQSB3YWxrZXIgdGhhdCBrbm93cyBob3cgdG8gZHVtcCB0aGVtIHRvIHNlcmlhbGl6ZWQgc3RyaW5ncy4jL1xuXG5cbmZ1bmN0aW9uIERGQVNlcmlhbGl6ZXIoZGZhLCBsaXRlcmFsTmFtZXMsIHN5bWJvbGljTmFtZXMpIHtcblx0dGhpcy5kZmEgPSBkZmE7XG5cdHRoaXMubGl0ZXJhbE5hbWVzID0gbGl0ZXJhbE5hbWVzIHx8IFtdO1xuXHR0aGlzLnN5bWJvbGljTmFtZXMgPSBzeW1ib2xpY05hbWVzIHx8IFtdO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuREZBU2VyaWFsaXplci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgIGlmKHRoaXMuZGZhLnMwID09PSBudWxsKSB7XG4gICAgICAgcmV0dXJuIG51bGw7XG4gICB9XG4gICB2YXIgYnVmID0gXCJcIjtcbiAgIHZhciBzdGF0ZXMgPSB0aGlzLmRmYS5zb3J0ZWRTdGF0ZXMoKTtcbiAgIGZvcih2YXIgaT0wO2k8c3RhdGVzLmxlbmd0aDtpKyspIHtcbiAgICAgICB2YXIgcyA9IHN0YXRlc1tpXTtcbiAgICAgICBpZihzLmVkZ2VzIT09bnVsbCkge1xuICAgICAgICAgICAgdmFyIG4gPSBzLmVkZ2VzLmxlbmd0aDtcbiAgICAgICAgICAgIGZvcih2YXIgaj0wO2o8bjtqKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgdCA9IHMuZWRnZXNbal0gfHwgbnVsbDtcbiAgICAgICAgICAgICAgICBpZih0IT09bnVsbCAmJiB0LnN0YXRlTnVtYmVyICE9PSAweDdGRkZGRkZGKSB7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGJ1Zi5jb25jYXQodGhpcy5nZXRTdGF0ZVN0cmluZyhzKSk7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGJ1Zi5jb25jYXQoXCItXCIpO1xuICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYuY29uY2F0KHRoaXMuZ2V0RWRnZUxhYmVsKGopKTtcbiAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmLmNvbmNhdChcIi0+XCIpO1xuICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYuY29uY2F0KHRoaXMuZ2V0U3RhdGVTdHJpbmcodCkpO1xuICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYuY29uY2F0KCdcXG4nKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgfVxuICAgfVxuICAgcmV0dXJuIGJ1Zi5sZW5ndGg9PT0wID8gbnVsbCA6IGJ1Zjtcbn07XG5cbkRGQVNlcmlhbGl6ZXIucHJvdG90eXBlLmdldEVkZ2VMYWJlbCA9IGZ1bmN0aW9uKGkpIHtcbiAgICBpZiAoaT09PTApIHtcbiAgICAgICAgcmV0dXJuIFwiRU9GXCI7XG4gICAgfSBlbHNlIGlmKHRoaXMubGl0ZXJhbE5hbWVzICE9PW51bGwgfHwgdGhpcy5zeW1ib2xpY05hbWVzIT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5saXRlcmFsTmFtZXNbaS0xXSB8fCB0aGlzLnN5bWJvbGljTmFtZXNbaS0xXTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShpLTEpO1xuICAgIH1cbn07XG5cbkRGQVNlcmlhbGl6ZXIucHJvdG90eXBlLmdldFN0YXRlU3RyaW5nID0gZnVuY3Rpb24ocykge1xuICAgIHZhciBiYXNlU3RhdGVTdHIgPSAoIHMuaXNBY2NlcHRTdGF0ZSA/IFwiOlwiIDogXCJcIikgKyBcInNcIiArIHMuc3RhdGVOdW1iZXIgKyAoIHMucmVxdWlyZXNGdWxsQ29udGV4dCA/IFwiXlwiIDogXCJcIik7XG4gICAgaWYocy5pc0FjY2VwdFN0YXRlKSB7XG4gICAgICAgIGlmIChzLnByZWRpY2F0ZXMgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBiYXNlU3RhdGVTdHIgKyBcIj0+XCIgKyBzLnByZWRpY2F0ZXMudG9TdHJpbmcoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBiYXNlU3RhdGVTdHIgKyBcIj0+XCIgKyBzLnByZWRpY3Rpb24udG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBiYXNlU3RhdGVTdHI7XG4gICAgfVxufTtcblxuZnVuY3Rpb24gTGV4ZXJERkFTZXJpYWxpemVyKGRmYSkge1xuXHRERkFTZXJpYWxpemVyLmNhbGwodGhpcywgZGZhLCBudWxsKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkxleGVyREZBU2VyaWFsaXplci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERGQVNlcmlhbGl6ZXIucHJvdG90eXBlKTtcbkxleGVyREZBU2VyaWFsaXplci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlckRGQVNlcmlhbGl6ZXI7XG5cbkxleGVyREZBU2VyaWFsaXplci5wcm90b3R5cGUuZ2V0RWRnZUxhYmVsID0gZnVuY3Rpb24oaSkge1xuXHRyZXR1cm4gXCInXCIgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpICsgXCInXCI7XG59O1xuXG5leHBvcnRzLkRGQVNlcmlhbGl6ZXIgPSBERkFTZXJpYWxpemVyO1xuZXhwb3J0cy5MZXhlckRGQVNlcmlhbGl6ZXIgPSBMZXhlckRGQVNlcmlhbGl6ZXI7XG5cbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxudmFyIEFUTkNvbmZpZ1NldCA9IHJlcXVpcmUoJy4vLi4vYXRuL0FUTkNvbmZpZ1NldCcpLkFUTkNvbmZpZ1NldDtcbnZhciBVdGlscyA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKTtcbnZhciBIYXNoID0gVXRpbHMuSGFzaDtcbnZhciBTZXQgPSBVdGlscy5TZXQ7XG5cbi8vIE1hcCBhIHByZWRpY2F0ZSB0byBhIHByZWRpY3RlZCBhbHRlcm5hdGl2ZS4vLy9cblxuZnVuY3Rpb24gUHJlZFByZWRpY3Rpb24ocHJlZCwgYWx0KSB7XG5cdHRoaXMuYWx0ID0gYWx0O1xuXHR0aGlzLnByZWQgPSBwcmVkO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuUHJlZFByZWRpY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBcIihcIiArIHRoaXMucHJlZCArIFwiLCBcIiArIHRoaXMuYWx0ICsgXCIpXCI7XG59O1xuXG4vLyBBIERGQSBzdGF0ZSByZXByZXNlbnRzIGEgc2V0IG9mIHBvc3NpYmxlIEFUTiBjb25maWd1cmF0aW9ucy5cbi8vIEFzIEFobywgU2V0aGksIFVsbG1hbiBwLiAxMTcgc2F5cyBcIlRoZSBERkEgdXNlcyBpdHMgc3RhdGVcbi8vIHRvIGtlZXAgdHJhY2sgb2YgYWxsIHBvc3NpYmxlIHN0YXRlcyB0aGUgQVROIGNhbiBiZSBpbiBhZnRlclxuLy8gcmVhZGluZyBlYWNoIGlucHV0IHN5bWJvbC4gVGhhdCBpcyB0byBzYXksIGFmdGVyIHJlYWRpbmdcbi8vIGlucHV0IGExYTIuLmFuLCB0aGUgREZBIGlzIGluIGEgc3RhdGUgdGhhdCByZXByZXNlbnRzIHRoZVxuLy8gc3Vic2V0IFQgb2YgdGhlIHN0YXRlcyBvZiB0aGUgQVROIHRoYXQgYXJlIHJlYWNoYWJsZSBmcm9tIHRoZVxuLy8gQVROJ3Mgc3RhcnQgc3RhdGUgYWxvbmcgc29tZSBwYXRoIGxhYmVsZWQgYTFhMi4uYW4uXCJcbi8vIEluIGNvbnZlbnRpb25hbCBORkEmcmFycjtERkEgY29udmVyc2lvbiwgdGhlcmVmb3JlLCB0aGUgc3Vic2V0IFRcbi8vIHdvdWxkIGJlIGEgYml0c2V0IHJlcHJlc2VudGluZyB0aGUgc2V0IG9mIHN0YXRlcyB0aGVcbi8vIEFUTiBjb3VsZCBiZSBpbi4gV2UgbmVlZCB0byB0cmFjayB0aGUgYWx0IHByZWRpY3RlZCBieSBlYWNoXG4vLyBzdGF0ZSBhcyB3ZWxsLCBob3dldmVyLiBNb3JlIGltcG9ydGFudGx5LCB3ZSBuZWVkIHRvIG1haW50YWluXG4vLyBhIHN0YWNrIG9mIHN0YXRlcywgdHJhY2tpbmcgdGhlIGNsb3N1cmUgb3BlcmF0aW9ucyBhcyB0aGV5XG4vLyBqdW1wIGZyb20gcnVsZSB0byBydWxlLCBlbXVsYXRpbmcgcnVsZSBpbnZvY2F0aW9ucyAobWV0aG9kIGNhbGxzKS5cbi8vIEkgaGF2ZSB0byBhZGQgYSBzdGFjayB0byBzaW11bGF0ZSB0aGUgcHJvcGVyIGxvb2thaGVhZCBzZXF1ZW5jZXMgZm9yXG4vLyB0aGUgdW5kZXJseWluZyBMTCBncmFtbWFyIGZyb20gd2hpY2ggdGhlIEFUTiB3YXMgZGVyaXZlZC5cbi8vXG4vLyA8cD5JIHVzZSBhIHNldCBvZiBBVE5Db25maWcgb2JqZWN0cyBub3Qgc2ltcGxlIHN0YXRlcy4gQW4gQVROQ29uZmlnXG4vLyBpcyBib3RoIGEgc3RhdGUgKGFsYSBub3JtYWwgY29udmVyc2lvbikgYW5kIGEgUnVsZUNvbnRleHQgZGVzY3JpYmluZ1xuLy8gdGhlIGNoYWluIG9mIHJ1bGVzIChpZiBhbnkpIGZvbGxvd2VkIHRvIGFycml2ZSBhdCB0aGF0IHN0YXRlLjwvcD5cbi8vXG4vLyA8cD5BIERGQSBzdGF0ZSBtYXkgaGF2ZSBtdWx0aXBsZSByZWZlcmVuY2VzIHRvIGEgcGFydGljdWxhciBzdGF0ZSxcbi8vIGJ1dCB3aXRoIGRpZmZlcmVudCBBVE4gY29udGV4dHMgKHdpdGggc2FtZSBvciBkaWZmZXJlbnQgYWx0cylcbi8vIG1lYW5pbmcgdGhhdCBzdGF0ZSB3YXMgcmVhY2hlZCB2aWEgYSBkaWZmZXJlbnQgc2V0IG9mIHJ1bGUgaW52b2NhdGlvbnMuPC9wPlxuLy8gL1xuXG5mdW5jdGlvbiBERkFTdGF0ZShzdGF0ZU51bWJlciwgY29uZmlncykge1xuXHRpZiAoc3RhdGVOdW1iZXIgPT09IG51bGwpIHtcblx0XHRzdGF0ZU51bWJlciA9IC0xO1xuXHR9XG5cdGlmIChjb25maWdzID09PSBudWxsKSB7XG5cdFx0Y29uZmlncyA9IG5ldyBBVE5Db25maWdTZXQoKTtcblx0fVxuXHR0aGlzLnN0YXRlTnVtYmVyID0gc3RhdGVOdW1iZXI7XG5cdHRoaXMuY29uZmlncyA9IGNvbmZpZ3M7XG5cdC8vIHtAY29kZSBlZGdlc1tzeW1ib2xdfSBwb2ludHMgdG8gdGFyZ2V0IG9mIHN5bWJvbC4gU2hpZnQgdXAgYnkgMSBzbyAoLTEpXG5cdC8vIHtAbGluayBUb2tlbi8vRU9GfSBtYXBzIHRvIHtAY29kZSBlZGdlc1swXX0uXG5cdHRoaXMuZWRnZXMgPSBudWxsO1xuXHR0aGlzLmlzQWNjZXB0U3RhdGUgPSBmYWxzZTtcblx0Ly8gaWYgYWNjZXB0IHN0YXRlLCB3aGF0IHR0eXBlIGRvIHdlIG1hdGNoIG9yIGFsdCBkbyB3ZSBwcmVkaWN0P1xuXHQvLyBUaGlzIGlzIHNldCB0byB7QGxpbmsgQVROLy9JTlZBTElEX0FMVF9OVU1CRVJ9IHdoZW4ge0BsaW5rXG5cdC8vIC8vcHJlZGljYXRlc317QGNvZGUgIT1udWxsfSBvclxuXHQvLyB7QGxpbmsgLy9yZXF1aXJlc0Z1bGxDb250ZXh0fS5cblx0dGhpcy5wcmVkaWN0aW9uID0gMDtcblx0dGhpcy5sZXhlckFjdGlvbkV4ZWN1dG9yID0gbnVsbDtcblx0Ly8gSW5kaWNhdGVzIHRoYXQgdGhpcyBzdGF0ZSB3YXMgY3JlYXRlZCBkdXJpbmcgU0xMIHByZWRpY3Rpb24gdGhhdFxuXHQvLyBkaXNjb3ZlcmVkIGEgY29uZmxpY3QgYmV0d2VlbiB0aGUgY29uZmlndXJhdGlvbnMgaW4gdGhlIHN0YXRlLiBGdXR1cmVcblx0Ly8ge0BsaW5rIFBhcnNlckFUTlNpbXVsYXRvci8vZXhlY0FUTn0gaW52b2NhdGlvbnMgaW1tZWRpYXRlbHkganVtcGVkIGRvaW5nXG5cdC8vIGZ1bGwgY29udGV4dCBwcmVkaWN0aW9uIGlmIHRoaXMgZmllbGQgaXMgdHJ1ZS5cblx0dGhpcy5yZXF1aXJlc0Z1bGxDb250ZXh0ID0gZmFsc2U7XG5cdC8vIER1cmluZyBTTEwgcGFyc2luZywgdGhpcyBpcyBhIGxpc3Qgb2YgcHJlZGljYXRlcyBhc3NvY2lhdGVkIHdpdGggdGhlXG5cdC8vIEFUTiBjb25maWd1cmF0aW9ucyBvZiB0aGUgREZBIHN0YXRlLiBXaGVuIHdlIGhhdmUgcHJlZGljYXRlcyxcblx0Ly8ge0BsaW5rIC8vcmVxdWlyZXNGdWxsQ29udGV4dH0gaXMge0Bjb2RlIGZhbHNlfSBzaW5jZSBmdWxsIGNvbnRleHRcblx0Ly8gcHJlZGljdGlvbiBldmFsdWF0ZXMgcHJlZGljYXRlc1xuXHQvLyBvbi10aGUtZmx5LiBJZiB0aGlzIGlzIG5vdCBudWxsLCB0aGVuIHtAbGluayAvL3ByZWRpY3Rpb259IGlzXG5cdC8vIHtAbGluayBBVE4vL0lOVkFMSURfQUxUX05VTUJFUn0uXG5cdC8vXG5cdC8vIDxwPldlIG9ubHkgdXNlIHRoZXNlIGZvciBub24te0BsaW5rIC8vcmVxdWlyZXNGdWxsQ29udGV4dH0gYnV0XG5cdC8vIGNvbmZsaWN0aW5nIHN0YXRlcy4gVGhhdFxuXHQvLyBtZWFucyB3ZSBrbm93IGZyb20gdGhlIGNvbnRleHQgKGl0J3MgJCBvciB3ZSBkb24ndCBkaXAgaW50byBvdXRlclxuXHQvLyBjb250ZXh0KSB0aGF0IGl0J3MgYW4gYW1iaWd1aXR5IG5vdCBhIGNvbmZsaWN0LjwvcD5cblx0Ly9cblx0Ly8gPHA+VGhpcyBsaXN0IGlzIGNvbXB1dGVkIGJ5IHtAbGlua1xuXHQvLyBQYXJzZXJBVE5TaW11bGF0b3IvL3ByZWRpY2F0ZURGQVN0YXRlfS48L3A+XG5cdHRoaXMucHJlZGljYXRlcyA9IG51bGw7XG5cdHJldHVybiB0aGlzO1xufVxuXG4vLyBHZXQgdGhlIHNldCBvZiBhbGwgYWx0cyBtZW50aW9uZWQgYnkgYWxsIEFUTiBjb25maWd1cmF0aW9ucyBpbiB0aGlzXG4vLyBERkEgc3RhdGUuXG5ERkFTdGF0ZS5wcm90b3R5cGUuZ2V0QWx0U2V0ID0gZnVuY3Rpb24oKSB7XG5cdHZhciBhbHRzID0gbmV3IFNldCgpO1xuXHRpZiAodGhpcy5jb25maWdzICE9PSBudWxsKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbmZpZ3MubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBjID0gdGhpcy5jb25maWdzW2ldO1xuXHRcdFx0YWx0cy5hZGQoYy5hbHQpO1xuXHRcdH1cblx0fVxuXHRpZiAoYWx0cy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYWx0cztcblx0fVxufTtcblxuLy8gVHdvIHtAbGluayBERkFTdGF0ZX0gaW5zdGFuY2VzIGFyZSBlcXVhbCBpZiB0aGVpciBBVE4gY29uZmlndXJhdGlvbiBzZXRzXG4vLyBhcmUgdGhlIHNhbWUuIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gc2VlIGlmIGEgc3RhdGUgYWxyZWFkeSBleGlzdHMuXG4vL1xuLy8gPHA+QmVjYXVzZSB0aGUgbnVtYmVyIG9mIGFsdGVybmF0aXZlcyBhbmQgbnVtYmVyIG9mIEFUTiBjb25maWd1cmF0aW9ucyBhcmVcbi8vIGZpbml0ZSwgdGhlcmUgaXMgYSBmaW5pdGUgbnVtYmVyIG9mIERGQSBzdGF0ZXMgdGhhdCBjYW4gYmUgcHJvY2Vzc2VkLlxuLy8gVGhpcyBpcyBuZWNlc3NhcnkgdG8gc2hvdyB0aGF0IHRoZSBhbGdvcml0aG0gdGVybWluYXRlcy48L3A+XG4vL1xuLy8gPHA+Q2Fubm90IHRlc3QgdGhlIERGQSBzdGF0ZSBudW1iZXJzIGhlcmUgYmVjYXVzZSBpblxuLy8ge0BsaW5rIFBhcnNlckFUTlNpbXVsYXRvci8vYWRkREZBU3RhdGV9IHdlIG5lZWQgdG8ga25vdyBpZiBhbnkgb3RoZXIgc3RhdGVcbi8vIGV4aXN0cyB0aGF0IGhhcyB0aGlzIGV4YWN0IHNldCBvZiBBVE4gY29uZmlndXJhdGlvbnMuIFRoZVxuLy8ge0BsaW5rIC8vc3RhdGVOdW1iZXJ9IGlzIGlycmVsZXZhbnQuPC9wPlxuREZBU3RhdGUucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG5cdC8vIGNvbXBhcmUgc2V0IG9mIEFUTiBjb25maWd1cmF0aW9ucyBpbiB0aGlzIHNldCB3aXRoIG90aGVyXG5cdHJldHVybiB0aGlzID09PSBvdGhlciB8fFxuXHRcdFx0KG90aGVyIGluc3RhbmNlb2YgREZBU3RhdGUgJiZcblx0XHRcdFx0dGhpcy5jb25maWdzLmVxdWFscyhvdGhlci5jb25maWdzKSk7XG59O1xuXG5ERkFTdGF0ZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0dmFyIHMgPSBcIlwiICsgdGhpcy5zdGF0ZU51bWJlciArIFwiOlwiICsgdGhpcy5jb25maWdzO1xuXHRpZih0aGlzLmlzQWNjZXB0U3RhdGUpIHtcbiAgICAgICAgcyA9IHMgKyBcIj0+XCI7XG4gICAgICAgIGlmICh0aGlzLnByZWRpY2F0ZXMgIT09IG51bGwpXG4gICAgICAgICAgICBzID0gcyArIHRoaXMucHJlZGljYXRlcztcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgcyA9IHMgKyB0aGlzLnByZWRpY3Rpb247XG4gICAgfVxuXHRyZXR1cm4gcztcbn07XG5cbkRGQVN0YXRlLnByb3RvdHlwZS5oYXNoQ29kZSA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG5cdGhhc2gudXBkYXRlKHRoaXMuY29uZmlncyk7XG5cdGlmKHRoaXMuaXNBY2NlcHRTdGF0ZSkge1xuICAgICAgICBpZiAodGhpcy5wcmVkaWNhdGVzICE9PSBudWxsKVxuICAgICAgICAgICAgaGFzaC51cGRhdGUodGhpcy5wcmVkaWNhdGVzKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgaGFzaC51cGRhdGUodGhpcy5wcmVkaWN0aW9uKTtcbiAgICB9XG4gICAgcmV0dXJuIGhhc2guZmluaXNoKCk7XG59O1xuXG5leHBvcnRzLkRGQVN0YXRlID0gREZBU3RhdGU7XG5leHBvcnRzLlByZWRQcmVkaWN0aW9uID0gUHJlZFByZWRpY3Rpb247XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbmV4cG9ydHMuREZBID0gcmVxdWlyZSgnLi9ERkEnKS5ERkE7XG5leHBvcnRzLkRGQVNlcmlhbGl6ZXIgPSByZXF1aXJlKCcuL0RGQVNlcmlhbGl6ZXInKS5ERkFTZXJpYWxpemVyO1xuZXhwb3J0cy5MZXhlckRGQVNlcmlhbGl6ZXIgPSByZXF1aXJlKCcuL0RGQVNlcmlhbGl6ZXInKS5MZXhlckRGQVNlcmlhbGl6ZXI7XG5leHBvcnRzLlByZWRQcmVkaWN0aW9uID0gcmVxdWlyZSgnLi9ERkFTdGF0ZScpLlByZWRQcmVkaWN0aW9uO1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vXG5cbi8vXG4vLyBUaGlzIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBBTlRMUkVycm9yTGlzdGVuZXJ9IGNhbiBiZSB1c2VkIHRvIGlkZW50aWZ5XG4vLyBjZXJ0YWluIHBvdGVudGlhbCBjb3JyZWN0bmVzcyBhbmQgcGVyZm9ybWFuY2UgcHJvYmxlbXMgaW4gZ3JhbW1hcnMuIFwiUmVwb3J0c1wiXG4vLyBhcmUgbWFkZSBieSBjYWxsaW5nIHtAbGluayBQYXJzZXIvL25vdGlmeUVycm9yTGlzdGVuZXJzfSB3aXRoIHRoZSBhcHByb3ByaWF0ZVxuLy8gbWVzc2FnZS5cbi8vXG4vLyA8dWw+XG4vLyA8bGk+PGI+QW1iaWd1aXRpZXM8L2I+OiBUaGVzZSBhcmUgY2FzZXMgd2hlcmUgbW9yZSB0aGFuIG9uZSBwYXRoIHRocm91Z2ggdGhlXG4vLyBncmFtbWFyIGNhbiBtYXRjaCB0aGUgaW5wdXQuPC9saT5cbi8vIDxsaT48Yj5XZWFrIGNvbnRleHQgc2Vuc2l0aXZpdHk8L2I+OiBUaGVzZSBhcmUgY2FzZXMgd2hlcmUgZnVsbC1jb250ZXh0XG4vLyBwcmVkaWN0aW9uIHJlc29sdmVkIGFuIFNMTCBjb25mbGljdCB0byBhIHVuaXF1ZSBhbHRlcm5hdGl2ZSB3aGljaCBlcXVhbGVkIHRoZVxuLy8gbWluaW11bSBhbHRlcm5hdGl2ZSBvZiB0aGUgU0xMIGNvbmZsaWN0LjwvbGk+XG4vLyA8bGk+PGI+U3Ryb25nIChmb3JjZWQpIGNvbnRleHQgc2Vuc2l0aXZpdHk8L2I+OiBUaGVzZSBhcmUgY2FzZXMgd2hlcmUgdGhlXG4vLyBmdWxsLWNvbnRleHQgcHJlZGljdGlvbiByZXNvbHZlZCBhbiBTTEwgY29uZmxpY3QgdG8gYSB1bmlxdWUgYWx0ZXJuYXRpdmUsXG4vLyA8ZW0+YW5kPC9lbT4gdGhlIG1pbmltdW0gYWx0ZXJuYXRpdmUgb2YgdGhlIFNMTCBjb25mbGljdCB3YXMgZm91bmQgdG8gbm90IGJlXG4vLyBhIHRydWx5IHZpYWJsZSBhbHRlcm5hdGl2ZS4gVHdvLXN0YWdlIHBhcnNpbmcgY2Fubm90IGJlIHVzZWQgZm9yIGlucHV0cyB3aGVyZVxuLy8gdGhpcyBzaXR1YXRpb24gb2NjdXJzLjwvbGk+XG4vLyA8L3VsPlxuXG52YXIgQml0U2V0ID0gcmVxdWlyZSgnLi8uLi9VdGlscycpLkJpdFNldDtcbnZhciBFcnJvckxpc3RlbmVyID0gcmVxdWlyZSgnLi9FcnJvckxpc3RlbmVyJykuRXJyb3JMaXN0ZW5lcjtcbnZhciBJbnRlcnZhbCA9IHJlcXVpcmUoJy4vLi4vSW50ZXJ2YWxTZXQnKS5JbnRlcnZhbDtcblxuZnVuY3Rpb24gRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXIoZXhhY3RPbmx5KSB7XG5cdEVycm9yTGlzdGVuZXIuY2FsbCh0aGlzKTtcblx0ZXhhY3RPbmx5ID0gZXhhY3RPbmx5IHx8IHRydWU7XG5cdC8vIHdoZXRoZXIgYWxsIGFtYmlndWl0aWVzIG9yIG9ubHkgZXhhY3QgYW1iaWd1aXRpZXMgYXJlIHJlcG9ydGVkLlxuXHR0aGlzLmV4YWN0T25seSA9IGV4YWN0T25seTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkRpYWdub3N0aWNFcnJvckxpc3RlbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUpO1xuRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXI7XG5cbkRpYWdub3N0aWNFcnJvckxpc3RlbmVyLnByb3RvdHlwZS5yZXBvcnRBbWJpZ3VpdHkgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBkZmEsXG5cdFx0c3RhcnRJbmRleCwgc3RvcEluZGV4LCBleGFjdCwgYW1iaWdBbHRzLCBjb25maWdzKSB7XG5cdGlmICh0aGlzLmV4YWN0T25seSAmJiAhZXhhY3QpIHtcblx0XHRyZXR1cm47XG5cdH1cblx0dmFyIG1zZyA9IFwicmVwb3J0QW1iaWd1aXR5IGQ9XCIgK1xuXHRcdFx0dGhpcy5nZXREZWNpc2lvbkRlc2NyaXB0aW9uKHJlY29nbml6ZXIsIGRmYSkgK1xuXHRcdFx0XCI6IGFtYmlnQWx0cz1cIiArXG5cdFx0XHR0aGlzLmdldENvbmZsaWN0aW5nQWx0cyhhbWJpZ0FsdHMsIGNvbmZpZ3MpICtcblx0XHRcdFwiLCBpbnB1dD0nXCIgK1xuXHRcdFx0cmVjb2duaXplci5nZXRUb2tlblN0cmVhbSgpLmdldFRleHQobmV3IEludGVydmFsKHN0YXJ0SW5kZXgsIHN0b3BJbmRleCkpICsgXCInXCI7XG5cdHJlY29nbml6ZXIubm90aWZ5RXJyb3JMaXN0ZW5lcnMobXNnKTtcbn07XG5cbkRpYWdub3N0aWNFcnJvckxpc3RlbmVyLnByb3RvdHlwZS5yZXBvcnRBdHRlbXB0aW5nRnVsbENvbnRleHQgPSBmdW5jdGlvbihcblx0XHRyZWNvZ25pemVyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgY29uZmxpY3RpbmdBbHRzLCBjb25maWdzKSB7XG5cdHZhciBtc2cgPSBcInJlcG9ydEF0dGVtcHRpbmdGdWxsQ29udGV4dCBkPVwiICtcblx0XHRcdHRoaXMuZ2V0RGVjaXNpb25EZXNjcmlwdGlvbihyZWNvZ25pemVyLCBkZmEpICtcblx0XHRcdFwiLCBpbnB1dD0nXCIgK1xuXHRcdFx0cmVjb2duaXplci5nZXRUb2tlblN0cmVhbSgpLmdldFRleHQobmV3IEludGVydmFsKHN0YXJ0SW5kZXgsIHN0b3BJbmRleCkpICsgXCInXCI7XG5cdHJlY29nbml6ZXIubm90aWZ5RXJyb3JMaXN0ZW5lcnMobXNnKTtcbn07XG5cbkRpYWdub3N0aWNFcnJvckxpc3RlbmVyLnByb3RvdHlwZS5yZXBvcnRDb250ZXh0U2Vuc2l0aXZpdHkgPSBmdW5jdGlvbihcblx0XHRyZWNvZ25pemVyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgcHJlZGljdGlvbiwgY29uZmlncykge1xuXHR2YXIgbXNnID0gXCJyZXBvcnRDb250ZXh0U2Vuc2l0aXZpdHkgZD1cIiArXG5cdFx0XHR0aGlzLmdldERlY2lzaW9uRGVzY3JpcHRpb24ocmVjb2duaXplciwgZGZhKSArXG5cdFx0XHRcIiwgaW5wdXQ9J1wiICtcblx0XHRcdHJlY29nbml6ZXIuZ2V0VG9rZW5TdHJlYW0oKS5nZXRUZXh0KG5ldyBJbnRlcnZhbChzdGFydEluZGV4LCBzdG9wSW5kZXgpKSArIFwiJ1wiO1xuXHRyZWNvZ25pemVyLm5vdGlmeUVycm9yTGlzdGVuZXJzKG1zZyk7XG59O1xuXG5EaWFnbm9zdGljRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuZ2V0RGVjaXNpb25EZXNjcmlwdGlvbiA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSkge1xuXHR2YXIgZGVjaXNpb24gPSBkZmEuZGVjaXNpb247XG5cdHZhciBydWxlSW5kZXggPSBkZmEuYXRuU3RhcnRTdGF0ZS5ydWxlSW5kZXg7XG5cblx0dmFyIHJ1bGVOYW1lcyA9IHJlY29nbml6ZXIucnVsZU5hbWVzO1xuXHRpZiAocnVsZUluZGV4IDwgMCB8fCBydWxlSW5kZXggPj0gcnVsZU5hbWVzLmxlbmd0aCkge1xuXHRcdHJldHVybiBcIlwiICsgZGVjaXNpb247XG5cdH1cblx0dmFyIHJ1bGVOYW1lID0gcnVsZU5hbWVzW3J1bGVJbmRleF0gfHwgbnVsbDtcblx0aWYgKHJ1bGVOYW1lID09PSBudWxsIHx8IHJ1bGVOYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBcIlwiICsgZGVjaXNpb247XG5cdH1cblx0cmV0dXJuIFwiXCIgKyBkZWNpc2lvbiArIFwiIChcIiArIHJ1bGVOYW1lICsgXCIpXCI7XG59O1xuXG4vL1xuLy8gQ29tcHV0ZXMgdGhlIHNldCBvZiBjb25mbGljdGluZyBvciBhbWJpZ3VvdXMgYWx0ZXJuYXRpdmVzIGZyb20gYVxuLy8gY29uZmlndXJhdGlvbiBzZXQsIGlmIHRoYXQgaW5mb3JtYXRpb24gd2FzIG5vdCBhbHJlYWR5IHByb3ZpZGVkIGJ5IHRoZVxuLy8gcGFyc2VyLlxuLy9cbi8vIEBwYXJhbSByZXBvcnRlZEFsdHMgVGhlIHNldCBvZiBjb25mbGljdGluZyBvciBhbWJpZ3VvdXMgYWx0ZXJuYXRpdmVzLCBhc1xuLy8gcmVwb3J0ZWQgYnkgdGhlIHBhcnNlci5cbi8vIEBwYXJhbSBjb25maWdzIFRoZSBjb25mbGljdGluZyBvciBhbWJpZ3VvdXMgY29uZmlndXJhdGlvbiBzZXQuXG4vLyBAcmV0dXJuIFJldHVybnMge0Bjb2RlIHJlcG9ydGVkQWx0c30gaWYgaXQgaXMgbm90IHtAY29kZSBudWxsfSwgb3RoZXJ3aXNlXG4vLyByZXR1cm5zIHRoZSBzZXQgb2YgYWx0ZXJuYXRpdmVzIHJlcHJlc2VudGVkIGluIHtAY29kZSBjb25maWdzfS5cbi8vXG5EaWFnbm9zdGljRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuZ2V0Q29uZmxpY3RpbmdBbHRzID0gZnVuY3Rpb24ocmVwb3J0ZWRBbHRzLCBjb25maWdzKSB7XG5cdGlmIChyZXBvcnRlZEFsdHMgIT09IG51bGwpIHtcblx0XHRyZXR1cm4gcmVwb3J0ZWRBbHRzO1xuXHR9XG5cdHZhciByZXN1bHQgPSBuZXcgQml0U2V0KCk7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgY29uZmlncy5pdGVtcy5sZW5ndGg7IGkrKykge1xuXHRcdHJlc3VsdC5hZGQoY29uZmlncy5pdGVtc1tpXS5hbHQpO1xuXHR9XG5cdHJldHVybiBcIntcIiArIHJlc3VsdC52YWx1ZXMoKS5qb2luKFwiLCBcIikgKyBcIn1cIjtcbn07XG5cbmV4cG9ydHMuRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXIgPSBEaWFnbm9zdGljRXJyb3JMaXN0ZW5lcjsiLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG4vLyBQcm92aWRlcyBhbiBlbXB0eSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBBTlRMUkVycm9yTGlzdGVuZXJ9LiBUaGVcbi8vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgZWFjaCBtZXRob2QgZG9lcyBub3RoaW5nLCBidXQgY2FuIGJlIG92ZXJyaWRkZW4gYXNcbi8vIG5lY2Vzc2FyeS5cblxuZnVuY3Rpb24gRXJyb3JMaXN0ZW5lcigpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkVycm9yTGlzdGVuZXIucHJvdG90eXBlLnN5bnRheEVycm9yID0gZnVuY3Rpb24ocmVjb2duaXplciwgb2ZmZW5kaW5nU3ltYm9sLCBsaW5lLCBjb2x1bW4sIG1zZywgZSkge1xufTtcblxuRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUucmVwb3J0QW1iaWd1aXR5ID0gZnVuY3Rpb24ocmVjb2duaXplciwgZGZhLCBzdGFydEluZGV4LCBzdG9wSW5kZXgsIGV4YWN0LCBhbWJpZ0FsdHMsIGNvbmZpZ3MpIHtcbn07XG5cbkVycm9yTGlzdGVuZXIucHJvdG90eXBlLnJlcG9ydEF0dGVtcHRpbmdGdWxsQ29udGV4dCA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBjb25mbGljdGluZ0FsdHMsIGNvbmZpZ3MpIHtcbn07XG5cbkVycm9yTGlzdGVuZXIucHJvdG90eXBlLnJlcG9ydENvbnRleHRTZW5zaXRpdml0eSA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBwcmVkaWN0aW9uLCBjb25maWdzKSB7XG59O1xuXG5mdW5jdGlvbiBDb25zb2xlRXJyb3JMaXN0ZW5lcigpIHtcblx0RXJyb3JMaXN0ZW5lci5jYWxsKHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuQ29uc29sZUVycm9yTGlzdGVuZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvckxpc3RlbmVyLnByb3RvdHlwZSk7XG5Db25zb2xlRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb25zb2xlRXJyb3JMaXN0ZW5lcjtcblxuLy9cbi8vIFByb3ZpZGVzIGEgZGVmYXVsdCBpbnN0YW5jZSBvZiB7QGxpbmsgQ29uc29sZUVycm9yTGlzdGVuZXJ9LlxuLy9cbkNvbnNvbGVFcnJvckxpc3RlbmVyLklOU1RBTkNFID0gbmV3IENvbnNvbGVFcnJvckxpc3RlbmVyKCk7XG5cbi8vXG4vLyB7QGluaGVyaXREb2N9XG4vL1xuLy8gPHA+XG4vLyBUaGlzIGltcGxlbWVudGF0aW9uIHByaW50cyBtZXNzYWdlcyB0byB7QGxpbmsgU3lzdGVtLy9lcnJ9IGNvbnRhaW5pbmcgdGhlXG4vLyB2YWx1ZXMgb2Yge0Bjb2RlIGxpbmV9LCB7QGNvZGUgY2hhclBvc2l0aW9uSW5MaW5lfSwgYW5kIHtAY29kZSBtc2d9IHVzaW5nXG4vLyB0aGUgZm9sbG93aW5nIGZvcm1hdC48L3A+XG4vL1xuLy8gPHByZT5cbi8vIGxpbmUgPGVtPmxpbmU8L2VtPjo8ZW0+Y2hhclBvc2l0aW9uSW5MaW5lPC9lbT4gPGVtPm1zZzwvZW0+XG4vLyA8L3ByZT5cbi8vXG5Db25zb2xlRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuc3ludGF4RXJyb3IgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBvZmZlbmRpbmdTeW1ib2wsIGxpbmUsIGNvbHVtbiwgbXNnLCBlKSB7XG4gICAgY29uc29sZS5lcnJvcihcImxpbmUgXCIgKyBsaW5lICsgXCI6XCIgKyBjb2x1bW4gKyBcIiBcIiArIG1zZyk7XG59O1xuXG5mdW5jdGlvbiBQcm94eUVycm9yTGlzdGVuZXIoZGVsZWdhdGVzKSB7XG5cdEVycm9yTGlzdGVuZXIuY2FsbCh0aGlzKTtcbiAgICBpZiAoZGVsZWdhdGVzPT09bnVsbCkge1xuICAgICAgICB0aHJvdyBcImRlbGVnYXRlc1wiO1xuICAgIH1cbiAgICB0aGlzLmRlbGVnYXRlcyA9IGRlbGVnYXRlcztcblx0cmV0dXJuIHRoaXM7XG59XG5cblByb3h5RXJyb3JMaXN0ZW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yTGlzdGVuZXIucHJvdG90eXBlKTtcblByb3h5RXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcm94eUVycm9yTGlzdGVuZXI7XG5cblByb3h5RXJyb3JMaXN0ZW5lci5wcm90b3R5cGUuc3ludGF4RXJyb3IgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBvZmZlbmRpbmdTeW1ib2wsIGxpbmUsIGNvbHVtbiwgbXNnLCBlKSB7XG4gICAgdGhpcy5kZWxlZ2F0ZXMubWFwKGZ1bmN0aW9uKGQpIHsgZC5zeW50YXhFcnJvcihyZWNvZ25pemVyLCBvZmZlbmRpbmdTeW1ib2wsIGxpbmUsIGNvbHVtbiwgbXNnLCBlKTsgfSk7XG59O1xuXG5Qcm94eUVycm9yTGlzdGVuZXIucHJvdG90eXBlLnJlcG9ydEFtYmlndWl0eSA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBleGFjdCwgYW1iaWdBbHRzLCBjb25maWdzKSB7XG4gICAgdGhpcy5kZWxlZ2F0ZXMubWFwKGZ1bmN0aW9uKGQpIHsgZC5yZXBvcnRBbWJpZ3VpdHkocmVjb2duaXplciwgZGZhLCBzdGFydEluZGV4LCBzdG9wSW5kZXgsIGV4YWN0LCBhbWJpZ0FsdHMsIGNvbmZpZ3MpOyB9KTtcbn07XG5cblByb3h5RXJyb3JMaXN0ZW5lci5wcm90b3R5cGUucmVwb3J0QXR0ZW1wdGluZ0Z1bGxDb250ZXh0ID0gZnVuY3Rpb24ocmVjb2duaXplciwgZGZhLCBzdGFydEluZGV4LCBzdG9wSW5kZXgsIGNvbmZsaWN0aW5nQWx0cywgY29uZmlncykge1xuXHR0aGlzLmRlbGVnYXRlcy5tYXAoZnVuY3Rpb24oZCkgeyBkLnJlcG9ydEF0dGVtcHRpbmdGdWxsQ29udGV4dChyZWNvZ25pemVyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgY29uZmxpY3RpbmdBbHRzLCBjb25maWdzKTsgfSk7XG59O1xuXG5Qcm94eUVycm9yTGlzdGVuZXIucHJvdG90eXBlLnJlcG9ydENvbnRleHRTZW5zaXRpdml0eSA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBwcmVkaWN0aW9uLCBjb25maWdzKSB7XG5cdHRoaXMuZGVsZWdhdGVzLm1hcChmdW5jdGlvbihkKSB7IGQucmVwb3J0Q29udGV4dFNlbnNpdGl2aXR5KHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBwcmVkaWN0aW9uLCBjb25maWdzKTsgfSk7XG59O1xuXG5leHBvcnRzLkVycm9yTGlzdGVuZXIgPSBFcnJvckxpc3RlbmVyO1xuZXhwb3J0cy5Db25zb2xlRXJyb3JMaXN0ZW5lciA9IENvbnNvbGVFcnJvckxpc3RlbmVyO1xuZXhwb3J0cy5Qcm94eUVycm9yTGlzdGVuZXIgPSBQcm94eUVycm9yTGlzdGVuZXI7XG5cbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vL1xuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuLy4uL1Rva2VuJykuVG9rZW47XG52YXIgRXJyb3JzID0gcmVxdWlyZSgnLi9FcnJvcnMnKTtcbnZhciBOb1ZpYWJsZUFsdEV4Y2VwdGlvbiA9IEVycm9ycy5Ob1ZpYWJsZUFsdEV4Y2VwdGlvbjtcbnZhciBJbnB1dE1pc21hdGNoRXhjZXB0aW9uID0gRXJyb3JzLklucHV0TWlzbWF0Y2hFeGNlcHRpb247XG52YXIgRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uID0gRXJyb3JzLkZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbjtcbnZhciBQYXJzZUNhbmNlbGxhdGlvbkV4Y2VwdGlvbiA9IEVycm9ycy5QYXJzZUNhbmNlbGxhdGlvbkV4Y2VwdGlvbjtcbnZhciBBVE5TdGF0ZSA9IHJlcXVpcmUoJy4vLi4vYXRuL0FUTlN0YXRlJykuQVROU3RhdGU7XG52YXIgSW50ZXJ2YWwgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG52YXIgSW50ZXJ2YWxTZXQgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWxTZXQ7XG5cbmZ1bmN0aW9uIEVycm9yU3RyYXRlZ3koKSB7XG5cbn1cblxuRXJyb3JTdHJhdGVneS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbihyZWNvZ25pemVyKXtcbn07XG5cbkVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlY292ZXJJbmxpbmUgPSBmdW5jdGlvbihyZWNvZ25pemVyKXtcbn07XG5cbkVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlY292ZXIgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBlKXtcbn07XG5cbkVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbihyZWNvZ25pemVyKXtcbn07XG5cbkVycm9yU3RyYXRlZ3kucHJvdG90eXBlLmluRXJyb3JSZWNvdmVyeU1vZGUgPSBmdW5jdGlvbihyZWNvZ25pemVyKXtcbn07XG5cbkVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydEVycm9yID0gZnVuY3Rpb24ocmVjb2duaXplcil7XG59O1xuXG5cblxuLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgQU5UTFJFcnJvclN0cmF0ZWd5fSB1c2VkIGZvclxuLy8gZXJyb3IgcmVwb3J0aW5nIGFuZCByZWNvdmVyeSBpbiBBTlRMUiBwYXJzZXJzLlxuLy9cbmZ1bmN0aW9uIERlZmF1bHRFcnJvclN0cmF0ZWd5KCkge1xuXHRFcnJvclN0cmF0ZWd5LmNhbGwodGhpcyk7XG4gICAgLy8gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGVycm9yIHN0cmF0ZWd5IGlzIGN1cnJlbnRseSBcInJlY292ZXJpbmcgZnJvbSBhblxuICAgIC8vIGVycm9yXCIuIFRoaXMgaXMgdXNlZCB0byBzdXBwcmVzcyByZXBvcnRpbmcgbXVsdGlwbGUgZXJyb3IgbWVzc2FnZXMgd2hpbGVcbiAgICAvLyBhdHRlbXB0aW5nIHRvIHJlY292ZXIgZnJvbSBhIGRldGVjdGVkIHN5bnRheCBlcnJvci5cbiAgICAvL1xuICAgIC8vIEBzZWUgLy9pbkVycm9yUmVjb3ZlcnlNb2RlXG4gICAgLy9cbiAgICB0aGlzLmVycm9yUmVjb3ZlcnlNb2RlID0gZmFsc2U7XG5cbiAgICAvLyBUaGUgaW5kZXggaW50byB0aGUgaW5wdXQgc3RyZWFtIHdoZXJlIHRoZSBsYXN0IGVycm9yIG9jY3VycmVkLlxuICAgIC8vIFRoaXMgaXMgdXNlZCB0byBwcmV2ZW50IGluZmluaXRlIGxvb3BzIHdoZXJlIGFuIGVycm9yIGlzIGZvdW5kXG4gICAgLy8gYnV0IG5vIHRva2VuIGlzIGNvbnN1bWVkIGR1cmluZyByZWNvdmVyeS4uLmFub3RoZXIgZXJyb3IgaXMgZm91bmQsXG4gICAgLy8gYWQgbmF1c2V1bS4gVGhpcyBpcyBhIGZhaWxzYWZlIG1lY2hhbmlzbSB0byBndWFyYW50ZWUgdGhhdCBhdCBsZWFzdFxuICAgIC8vIG9uZSB0b2tlbi90cmVlIG5vZGUgaXMgY29uc3VtZWQgZm9yIHR3byBlcnJvcnMuXG4gICAgLy9cbiAgICB0aGlzLmxhc3RFcnJvckluZGV4ID0gLTE7XG4gICAgdGhpcy5sYXN0RXJyb3JTdGF0ZXMgPSBudWxsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yU3RyYXRlZ3kucHJvdG90eXBlKTtcbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERlZmF1bHRFcnJvclN0cmF0ZWd5O1xuXG4vLyA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzaW1wbHkgY2FsbHMge0BsaW5rIC8vZW5kRXJyb3JDb25kaXRpb259IHRvXG4vLyBlbnN1cmUgdGhhdCB0aGUgaGFuZGxlciBpcyBub3QgaW4gZXJyb3IgcmVjb3ZlcnkgbW9kZS48L3A+XG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgdGhpcy5lbmRFcnJvckNvbmRpdGlvbihyZWNvZ25pemVyKTtcbn07XG5cbi8vXG4vLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gZW50ZXIgZXJyb3IgcmVjb3ZlcnkgbW9kZSB3aGVuIGEgcmVjb2duaXRpb25cbi8vIGV4Y2VwdGlvbiBpcyByZXBvcnRlZC5cbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLmJlZ2luRXJyb3JDb25kaXRpb24gPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgdGhpcy5lcnJvclJlY292ZXJ5TW9kZSA9IHRydWU7XG59O1xuXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUuaW5FcnJvclJlY292ZXJ5TW9kZSA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvclJlY292ZXJ5TW9kZTtcbn07XG5cbi8vXG4vLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gbGVhdmUgZXJyb3IgcmVjb3ZlcnkgbW9kZSBhZnRlciByZWNvdmVyaW5nIGZyb21cbi8vIGEgcmVjb2duaXRpb24gZXhjZXB0aW9uLlxuLy9cbi8vIEBwYXJhbSByZWNvZ25pemVyXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLmVuZEVycm9yQ29uZGl0aW9uID0gZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgIHRoaXMuZXJyb3JSZWNvdmVyeU1vZGUgPSBmYWxzZTtcbiAgICB0aGlzLmxhc3RFcnJvclN0YXRlcyA9IG51bGw7XG4gICAgdGhpcy5sYXN0RXJyb3JJbmRleCA9IC0xO1xufTtcblxuLy9cbi8vIHtAaW5oZXJpdERvY31cbi8vXG4vLyA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBzaW1wbHkgY2FsbHMge0BsaW5rIC8vZW5kRXJyb3JDb25kaXRpb259LjwvcD5cbi8vXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUucmVwb3J0TWF0Y2ggPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgdGhpcy5lbmRFcnJvckNvbmRpdGlvbihyZWNvZ25pemVyKTtcbn07XG5cbi8vXG4vLyB7QGluaGVyaXREb2N9XG4vL1xuLy8gPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBpbW1lZGlhdGVseSBpZiB0aGUgaGFuZGxlciBpcyBhbHJlYWR5XG4vLyBpbiBlcnJvciByZWNvdmVyeSBtb2RlLiBPdGhlcndpc2UsIGl0IGNhbGxzIHtAbGluayAvL2JlZ2luRXJyb3JDb25kaXRpb259XG4vLyBhbmQgZGlzcGF0Y2hlcyB0aGUgcmVwb3J0aW5nIHRhc2sgYmFzZWQgb24gdGhlIHJ1bnRpbWUgdHlwZSBvZiB7QGNvZGUgZX1cbi8vIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHRhYmxlLjwvcD5cbi8vXG4vLyA8dWw+XG4vLyA8bGk+e0BsaW5rIE5vVmlhYmxlQWx0RXhjZXB0aW9ufTogRGlzcGF0Y2hlcyB0aGUgY2FsbCB0b1xuLy8ge0BsaW5rIC8vcmVwb3J0Tm9WaWFibGVBbHRlcm5hdGl2ZX08L2xpPlxuLy8gPGxpPntAbGluayBJbnB1dE1pc21hdGNoRXhjZXB0aW9ufTogRGlzcGF0Y2hlcyB0aGUgY2FsbCB0b1xuLy8ge0BsaW5rIC8vcmVwb3J0SW5wdXRNaXNtYXRjaH08L2xpPlxuLy8gPGxpPntAbGluayBGYWlsZWRQcmVkaWNhdGVFeGNlcHRpb259OiBEaXNwYXRjaGVzIHRoZSBjYWxsIHRvXG4vLyB7QGxpbmsgLy9yZXBvcnRGYWlsZWRQcmVkaWNhdGV9PC9saT5cbi8vIDxsaT5BbGwgb3RoZXIgdHlwZXM6IGNhbGxzIHtAbGluayBQYXJzZXIvL25vdGlmeUVycm9yTGlzdGVuZXJzfSB0byByZXBvcnRcbi8vIHRoZSBleGNlcHRpb248L2xpPlxuLy8gPC91bD5cbi8vXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUucmVwb3J0RXJyb3IgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBlKSB7XG4gICAvLyBpZiB3ZSd2ZSBhbHJlYWR5IHJlcG9ydGVkIGFuIGVycm9yIGFuZCBoYXZlIG5vdCBtYXRjaGVkIGEgdG9rZW5cbiAgIC8vIHlldCBzdWNjZXNzZnVsbHksIGRvbid0IHJlcG9ydCBhbnkgZXJyb3JzLlxuICAgIGlmKHRoaXMuaW5FcnJvclJlY292ZXJ5TW9kZShyZWNvZ25pemVyKSkge1xuICAgICAgICByZXR1cm47IC8vIGRvbid0IHJlcG9ydCBzcHVyaW91cyBlcnJvcnNcbiAgICB9XG4gICAgdGhpcy5iZWdpbkVycm9yQ29uZGl0aW9uKHJlY29nbml6ZXIpO1xuICAgIGlmICggZSBpbnN0YW5jZW9mIE5vVmlhYmxlQWx0RXhjZXB0aW9uICkge1xuICAgICAgICB0aGlzLnJlcG9ydE5vVmlhYmxlQWx0ZXJuYXRpdmUocmVjb2duaXplciwgZSk7XG4gICAgfSBlbHNlIGlmICggZSBpbnN0YW5jZW9mIElucHV0TWlzbWF0Y2hFeGNlcHRpb24gKSB7XG4gICAgICAgIHRoaXMucmVwb3J0SW5wdXRNaXNtYXRjaChyZWNvZ25pemVyLCBlKTtcbiAgICB9IGVsc2UgaWYgKCBlIGluc3RhbmNlb2YgRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uICkge1xuICAgICAgICB0aGlzLnJlcG9ydEZhaWxlZFByZWRpY2F0ZShyZWNvZ25pemVyLCBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcInVua25vd24gcmVjb2duaXRpb24gZXJyb3IgdHlwZTogXCIgKyBlLmNvbnN0cnVjdG9yLm5hbWUpO1xuICAgICAgICBjb25zb2xlLmxvZyhlLnN0YWNrKTtcbiAgICAgICAgcmVjb2duaXplci5ub3RpZnlFcnJvckxpc3RlbmVycyhlLmdldE9mZmVuZGluZ1Rva2VuKCksIGUuZ2V0TWVzc2FnZSgpLCBlKTtcbiAgICB9XG59O1xuLy9cbi8vIHtAaW5oZXJpdERvY31cbi8vXG4vLyA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiByZXN5bmNocm9uaXplcyB0aGUgcGFyc2VyIGJ5IGNvbnN1bWluZyB0b2tlbnNcbi8vIHVudGlsIHdlIGZpbmQgb25lIGluIHRoZSByZXN5bmNocm9uaXphdGlvbiBzZXQtLWxvb3NlbHkgdGhlIHNldCBvZiB0b2tlbnNcbi8vIHRoYXQgY2FuIGZvbGxvdyB0aGUgY3VycmVudCBydWxlLjwvcD5cbi8vXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUucmVjb3ZlciA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGUpIHtcbiAgICBpZiAodGhpcy5sYXN0RXJyb3JJbmRleD09PXJlY29nbml6ZXIuZ2V0SW5wdXRTdHJlYW0oKS5pbmRleCAmJlxuICAgICAgICB0aGlzLmxhc3RFcnJvclN0YXRlcyAhPT0gbnVsbCAmJiB0aGlzLmxhc3RFcnJvclN0YXRlcy5pbmRleE9mKHJlY29nbml6ZXIuc3RhdGUpPj0wKSB7XG5cdFx0Ly8gdWggb2gsIGFub3RoZXIgZXJyb3IgYXQgc2FtZSB0b2tlbiBpbmRleCBhbmQgcHJldmlvdXNseS12aXNpdGVkXG5cdFx0Ly8gc3RhdGUgaW4gQVROOyBtdXN0IGJlIGEgY2FzZSB3aGVyZSBMVCgxKSBpcyBpbiB0aGUgcmVjb3Zlcnlcblx0XHQvLyB0b2tlbiBzZXQgc28gbm90aGluZyBnb3QgY29uc3VtZWQuIENvbnN1bWUgYSBzaW5nbGUgdG9rZW5cblx0XHQvLyBhdCBsZWFzdCB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3A7IHRoaXMgaXMgYSBmYWlsc2FmZS5cblx0XHRyZWNvZ25pemVyLmNvbnN1bWUoKTtcbiAgICB9XG4gICAgdGhpcy5sYXN0RXJyb3JJbmRleCA9IHJlY29nbml6ZXIuX2lucHV0LmluZGV4O1xuICAgIGlmICh0aGlzLmxhc3RFcnJvclN0YXRlcyA9PT0gbnVsbCkge1xuICAgICAgICB0aGlzLmxhc3RFcnJvclN0YXRlcyA9IFtdO1xuICAgIH1cbiAgICB0aGlzLmxhc3RFcnJvclN0YXRlcy5wdXNoKHJlY29nbml6ZXIuc3RhdGUpO1xuICAgIHZhciBmb2xsb3dTZXQgPSB0aGlzLmdldEVycm9yUmVjb3ZlcnlTZXQocmVjb2duaXplcik7XG4gICAgdGhpcy5jb25zdW1lVW50aWwocmVjb2duaXplciwgZm9sbG93U2V0KTtcbn07XG5cbi8vIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3kvL3N5bmN9IG1ha2VzIHN1cmVcbi8vIHRoYXQgdGhlIGN1cnJlbnQgbG9va2FoZWFkIHN5bWJvbCBpcyBjb25zaXN0ZW50IHdpdGggd2hhdCB3ZXJlIGV4cGVjdGluZ1xuLy8gYXQgdGhpcyBwb2ludCBpbiB0aGUgQVROLiBZb3UgY2FuIGNhbGwgdGhpcyBhbnl0aW1lIGJ1dCBBTlRMUiBvbmx5XG4vLyBnZW5lcmF0ZXMgY29kZSB0byBjaGVjayBiZWZvcmUgc3VicnVsZXMvbG9vcHMgYW5kIGVhY2ggaXRlcmF0aW9uLlxuLy9cbi8vIDxwPkltcGxlbWVudHMgSmltIElkbGUncyBtYWdpYyBzeW5jIG1lY2hhbmlzbSBpbiBjbG9zdXJlcyBhbmQgb3B0aW9uYWxcbi8vIHN1YnJ1bGVzLiBFLmcuLDwvcD5cbi8vXG4vLyA8cHJlPlxuLy8gYSA6IHN5bmMgKCBzdHVmZiBzeW5jICkqIDtcbi8vIHN5bmMgOiB7Y29uc3VtZSB0byB3aGF0IGNhbiBmb2xsb3cgc3luY30gO1xuLy8gPC9wcmU+XG4vL1xuLy8gQXQgdGhlIHN0YXJ0IG9mIGEgc3ViIHJ1bGUgdXBvbiBlcnJvciwge0BsaW5rIC8vc3luY30gcGVyZm9ybXMgc2luZ2xlXG4vLyB0b2tlbiBkZWxldGlvbiwgaWYgcG9zc2libGUuIElmIGl0IGNhbid0IGRvIHRoYXQsIGl0IGJhaWxzIG9uIHRoZSBjdXJyZW50XG4vLyBydWxlIGFuZCB1c2VzIHRoZSBkZWZhdWx0IGVycm9yIHJlY292ZXJ5LCB3aGljaCBjb25zdW1lcyB1bnRpbCB0aGVcbi8vIHJlc3luY2hyb25pemF0aW9uIHNldCBvZiB0aGUgY3VycmVudCBydWxlLlxuLy9cbi8vIDxwPklmIHRoZSBzdWIgcnVsZSBpcyBvcHRpb25hbCAoe0Bjb2RlICguLi4pP30sIHtAY29kZSAoLi4uKSp9LCBvciBibG9ja1xuLy8gd2l0aCBhbiBlbXB0eSBhbHRlcm5hdGl2ZSksIHRoZW4gdGhlIGV4cGVjdGVkIHNldCBpbmNsdWRlcyB3aGF0IGZvbGxvd3Ncbi8vIHRoZSBzdWJydWxlLjwvcD5cbi8vXG4vLyA8cD5EdXJpbmcgbG9vcCBpdGVyYXRpb24sIGl0IGNvbnN1bWVzIHVudGlsIGl0IHNlZXMgYSB0b2tlbiB0aGF0IGNhbiBzdGFydCBhXG4vLyBzdWIgcnVsZSBvciB3aGF0IGZvbGxvd3MgbG9vcC4gWWVzLCB0aGF0IGlzIHByZXR0eSBhZ2dyZXNzaXZlLiBXZSBvcHQgdG9cbi8vIHN0YXkgaW4gdGhlIGxvb3AgYXMgbG9uZyBhcyBwb3NzaWJsZS48L3A+XG4vL1xuLy8gPHA+PHN0cm9uZz5PUklHSU5TPC9zdHJvbmc+PC9wPlxuLy9cbi8vIDxwPlByZXZpb3VzIHZlcnNpb25zIG9mIEFOVExSIGRpZCBhIHBvb3Igam9iIG9mIHRoZWlyIHJlY292ZXJ5IHdpdGhpbiBsb29wcy5cbi8vIEEgc2luZ2xlIG1pc21hdGNoIHRva2VuIG9yIG1pc3NpbmcgdG9rZW4gd291bGQgZm9yY2UgdGhlIHBhcnNlciB0byBiYWlsXG4vLyBvdXQgb2YgdGhlIGVudGlyZSBydWxlcyBzdXJyb3VuZGluZyB0aGUgbG9vcC4gU28sIGZvciBydWxlPC9wPlxuLy9cbi8vIDxwcmU+XG4vLyBjbGFzc0RlZiA6ICdjbGFzcycgSUQgJ3snIG1lbWJlciogJ30nXG4vLyA8L3ByZT5cbi8vXG4vLyBpbnB1dCB3aXRoIGFuIGV4dHJhIHRva2VuIGJldHdlZW4gbWVtYmVycyB3b3VsZCBmb3JjZSB0aGUgcGFyc2VyIHRvXG4vLyBjb25zdW1lIHVudGlsIGl0IGZvdW5kIHRoZSBuZXh0IGNsYXNzIGRlZmluaXRpb24gcmF0aGVyIHRoYW4gdGhlIG5leHRcbi8vIG1lbWJlciBkZWZpbml0aW9uIG9mIHRoZSBjdXJyZW50IGNsYXNzLlxuLy9cbi8vIDxwPlRoaXMgZnVuY3Rpb25hbGl0eSBjb3N0IGEgbGl0dGxlIGJpdCBvZiBlZmZvcnQgYmVjYXVzZSB0aGUgcGFyc2VyIGhhcyB0b1xuLy8gY29tcGFyZSB0b2tlbiBzZXQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsb29wIGFuZCBhdCBlYWNoIGl0ZXJhdGlvbi4gSWYgZm9yXG4vLyBzb21lIHJlYXNvbiBzcGVlZCBpcyBzdWZmZXJpbmcgZm9yIHlvdSwgeW91IGNhbiB0dXJuIG9mZiB0aGlzXG4vLyBmdW5jdGlvbmFsaXR5IGJ5IHNpbXBseSBvdmVycmlkaW5nIHRoaXMgbWV0aG9kIGFzIGEgYmxhbmsgeyB9LjwvcD5cbi8vXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUuc3luYyA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICAvLyBJZiBhbHJlYWR5IHJlY292ZXJpbmcsIGRvbid0IHRyeSB0byBzeW5jXG4gICAgaWYgKHRoaXMuaW5FcnJvclJlY292ZXJ5TW9kZShyZWNvZ25pemVyKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBzID0gcmVjb2duaXplci5faW50ZXJwLmF0bi5zdGF0ZXNbcmVjb2duaXplci5zdGF0ZV07XG4gICAgdmFyIGxhID0gcmVjb2duaXplci5nZXRUb2tlblN0cmVhbSgpLkxBKDEpO1xuICAgIC8vIHRyeSBjaGVhcGVyIHN1YnNldCBmaXJzdDsgbWlnaHQgZ2V0IGx1Y2t5LiBzZWVtcyB0byBzaGF2ZSBhIHdlZSBiaXQgb2ZmXG4gICAgdmFyIG5leHRUb2tlbnMgPSByZWNvZ25pemVyLmF0bi5uZXh0VG9rZW5zKHMpO1xuICAgIGlmIChuZXh0VG9rZW5zLmNvbnRhaW5zKFRva2VuLkVQU0lMT04pIHx8IG5leHRUb2tlbnMuY29udGFpbnMobGEpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc3dpdGNoIChzLnN0YXRlVHlwZSkge1xuICAgIGNhc2UgQVROU3RhdGUuQkxPQ0tfU1RBUlQ6XG4gICAgY2FzZSBBVE5TdGF0ZS5TVEFSX0JMT0NLX1NUQVJUOlxuICAgIGNhc2UgQVROU3RhdGUuUExVU19CTE9DS19TVEFSVDpcbiAgICBjYXNlIEFUTlN0YXRlLlNUQVJfTE9PUF9FTlRSWTpcbiAgICAgICAvLyByZXBvcnQgZXJyb3IgYW5kIHJlY292ZXIgaWYgcG9zc2libGVcbiAgICAgICAgaWYoIHRoaXMuc2luZ2xlVG9rZW5EZWxldGlvbihyZWNvZ25pemVyKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IElucHV0TWlzbWF0Y2hFeGNlcHRpb24ocmVjb2duaXplcik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgY2FzZSBBVE5TdGF0ZS5QTFVTX0xPT1BfQkFDSzpcbiAgICBjYXNlIEFUTlN0YXRlLlNUQVJfTE9PUF9CQUNLOlxuICAgICAgICB0aGlzLnJlcG9ydFVud2FudGVkVG9rZW4ocmVjb2duaXplcik7XG4gICAgICAgIHZhciBleHBlY3RpbmcgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICAgICAgZXhwZWN0aW5nLmFkZFNldChyZWNvZ25pemVyLmdldEV4cGVjdGVkVG9rZW5zKCkpO1xuICAgICAgICB2YXIgd2hhdEZvbGxvd3NMb29wSXRlcmF0aW9uT3JSdWxlID0gZXhwZWN0aW5nLmFkZFNldCh0aGlzLmdldEVycm9yUmVjb3ZlcnlTZXQocmVjb2duaXplcikpO1xuICAgICAgICB0aGlzLmNvbnN1bWVVbnRpbChyZWNvZ25pemVyLCB3aGF0Rm9sbG93c0xvb3BJdGVyYXRpb25PclJ1bGUpO1xuICAgICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgICAvLyBkbyBub3RoaW5nIGlmIHdlIGNhbid0IGlkZW50aWZ5IHRoZSBleGFjdCBraW5kIG9mIEFUTiBzdGF0ZVxuICAgIH1cbn07XG5cbi8vIFRoaXMgaXMgY2FsbGVkIGJ5IHtAbGluayAvL3JlcG9ydEVycm9yfSB3aGVuIHRoZSBleGNlcHRpb24gaXMgYVxuLy8ge0BsaW5rIE5vVmlhYmxlQWx0RXhjZXB0aW9ufS5cbi8vXG4vLyBAc2VlIC8vcmVwb3J0RXJyb3Jcbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vLyBAcGFyYW0gZSB0aGUgcmVjb2duaXRpb24gZXhjZXB0aW9uXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydE5vVmlhYmxlQWx0ZXJuYXRpdmUgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBlKSB7XG4gICAgdmFyIHRva2VucyA9IHJlY29nbml6ZXIuZ2V0VG9rZW5TdHJlYW0oKTtcbiAgICB2YXIgaW5wdXQ7XG4gICAgaWYodG9rZW5zICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChlLnN0YXJ0VG9rZW4udHlwZT09PVRva2VuLkVPRikge1xuICAgICAgICAgICAgaW5wdXQgPSBcIjxFT0Y+XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpbnB1dCA9IHRva2Vucy5nZXRUZXh0KG5ldyBJbnRlcnZhbChlLnN0YXJ0VG9rZW4udG9rZW5JbmRleCwgZS5vZmZlbmRpbmdUb2tlbi50b2tlbkluZGV4KSk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBpbnB1dCA9IFwiPHVua25vd24gaW5wdXQ+XCI7XG4gICAgfVxuICAgIHZhciBtc2cgPSBcIm5vIHZpYWJsZSBhbHRlcm5hdGl2ZSBhdCBpbnB1dCBcIiArIHRoaXMuZXNjYXBlV1NBbmRRdW90ZShpbnB1dCk7XG4gICAgcmVjb2duaXplci5ub3RpZnlFcnJvckxpc3RlbmVycyhtc2csIGUub2ZmZW5kaW5nVG9rZW4sIGUpO1xufTtcblxuLy9cbi8vIFRoaXMgaXMgY2FsbGVkIGJ5IHtAbGluayAvL3JlcG9ydEVycm9yfSB3aGVuIHRoZSBleGNlcHRpb24gaXMgYW5cbi8vIHtAbGluayBJbnB1dE1pc21hdGNoRXhjZXB0aW9ufS5cbi8vXG4vLyBAc2VlIC8vcmVwb3J0RXJyb3Jcbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vLyBAcGFyYW0gZSB0aGUgcmVjb2duaXRpb24gZXhjZXB0aW9uXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydElucHV0TWlzbWF0Y2ggPSBmdW5jdGlvbihyZWNvZ25pemVyLCBlKSB7XG4gICAgdmFyIG1zZyA9IFwibWlzbWF0Y2hlZCBpbnB1dCBcIiArIHRoaXMuZ2V0VG9rZW5FcnJvckRpc3BsYXkoZS5vZmZlbmRpbmdUb2tlbikgK1xuICAgICAgICAgIFwiIGV4cGVjdGluZyBcIiArIGUuZ2V0RXhwZWN0ZWRUb2tlbnMoKS50b1N0cmluZyhyZWNvZ25pemVyLmxpdGVyYWxOYW1lcywgcmVjb2duaXplci5zeW1ib2xpY05hbWVzKTtcbiAgICByZWNvZ25pemVyLm5vdGlmeUVycm9yTGlzdGVuZXJzKG1zZywgZS5vZmZlbmRpbmdUb2tlbiwgZSk7XG59O1xuXG4vL1xuLy8gVGhpcyBpcyBjYWxsZWQgYnkge0BsaW5rIC8vcmVwb3J0RXJyb3J9IHdoZW4gdGhlIGV4Y2VwdGlvbiBpcyBhXG4vLyB7QGxpbmsgRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9ufS5cbi8vXG4vLyBAc2VlIC8vcmVwb3J0RXJyb3Jcbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vLyBAcGFyYW0gZSB0aGUgcmVjb2duaXRpb24gZXhjZXB0aW9uXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydEZhaWxlZFByZWRpY2F0ZSA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGUpIHtcbiAgICB2YXIgcnVsZU5hbWUgPSByZWNvZ25pemVyLnJ1bGVOYW1lc1tyZWNvZ25pemVyLl9jdHgucnVsZUluZGV4XTtcbiAgICB2YXIgbXNnID0gXCJydWxlIFwiICsgcnVsZU5hbWUgKyBcIiBcIiArIGUubWVzc2FnZTtcbiAgICByZWNvZ25pemVyLm5vdGlmeUVycm9yTGlzdGVuZXJzKG1zZywgZS5vZmZlbmRpbmdUb2tlbiwgZSk7XG59O1xuXG4vLyBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gcmVwb3J0IGEgc3ludGF4IGVycm9yIHdoaWNoIHJlcXVpcmVzIHRoZSByZW1vdmFsXG4vLyBvZiBhIHRva2VuIGZyb20gdGhlIGlucHV0IHN0cmVhbS4gQXQgdGhlIHRpbWUgdGhpcyBtZXRob2QgaXMgY2FsbGVkLCB0aGVcbi8vIGVycm9uZW91cyBzeW1ib2wgaXMgY3VycmVudCB7QGNvZGUgTFQoMSl9IHN5bWJvbCBhbmQgaGFzIG5vdCB5ZXQgYmVlblxuLy8gcmVtb3ZlZCBmcm9tIHRoZSBpbnB1dCBzdHJlYW0uIFdoZW4gdGhpcyBtZXRob2QgcmV0dXJucyxcbi8vIHtAY29kZSByZWNvZ25pemVyfSBpcyBpbiBlcnJvciByZWNvdmVyeSBtb2RlLlxuLy9cbi8vIDxwPlRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHtAbGluayAvL3NpbmdsZVRva2VuRGVsZXRpb259IGlkZW50aWZpZXNcbi8vIHNpbmdsZS10b2tlbiBkZWxldGlvbiBhcyBhIHZpYWJsZSByZWNvdmVyeSBzdHJhdGVneSBmb3IgYSBtaXNtYXRjaGVkXG4vLyBpbnB1dCBlcnJvci48L3A+XG4vL1xuLy8gPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2ltcGx5IHJldHVybnMgaWYgdGhlIGhhbmRsZXIgaXMgYWxyZWFkeSBpblxuLy8gZXJyb3IgcmVjb3ZlcnkgbW9kZS4gT3RoZXJ3aXNlLCBpdCBjYWxscyB7QGxpbmsgLy9iZWdpbkVycm9yQ29uZGl0aW9ufSB0b1xuLy8gZW50ZXIgZXJyb3IgcmVjb3ZlcnkgbW9kZSwgZm9sbG93ZWQgYnkgY2FsbGluZ1xuLy8ge0BsaW5rIFBhcnNlci8vbm90aWZ5RXJyb3JMaXN0ZW5lcnN9LjwvcD5cbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydFVud2FudGVkVG9rZW4gPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgaWYgKHRoaXMuaW5FcnJvclJlY292ZXJ5TW9kZShyZWNvZ25pemVyKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYmVnaW5FcnJvckNvbmRpdGlvbihyZWNvZ25pemVyKTtcbiAgICB2YXIgdCA9IHJlY29nbml6ZXIuZ2V0Q3VycmVudFRva2VuKCk7XG4gICAgdmFyIHRva2VuTmFtZSA9IHRoaXMuZ2V0VG9rZW5FcnJvckRpc3BsYXkodCk7XG4gICAgdmFyIGV4cGVjdGluZyA9IHRoaXMuZ2V0RXhwZWN0ZWRUb2tlbnMocmVjb2duaXplcik7XG4gICAgdmFyIG1zZyA9IFwiZXh0cmFuZW91cyBpbnB1dCBcIiArIHRva2VuTmFtZSArIFwiIGV4cGVjdGluZyBcIiArXG4gICAgICAgIGV4cGVjdGluZy50b1N0cmluZyhyZWNvZ25pemVyLmxpdGVyYWxOYW1lcywgcmVjb2duaXplci5zeW1ib2xpY05hbWVzKTtcbiAgICByZWNvZ25pemVyLm5vdGlmeUVycm9yTGlzdGVuZXJzKG1zZywgdCwgbnVsbCk7XG59O1xuLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIHJlcG9ydCBhIHN5bnRheCBlcnJvciB3aGljaCByZXF1aXJlcyB0aGVcbi8vIGluc2VydGlvbiBvZiBhIG1pc3NpbmcgdG9rZW4gaW50byB0aGUgaW5wdXQgc3RyZWFtLiBBdCB0aGUgdGltZSB0aGlzXG4vLyBtZXRob2QgaXMgY2FsbGVkLCB0aGUgbWlzc2luZyB0b2tlbiBoYXMgbm90IHlldCBiZWVuIGluc2VydGVkLiBXaGVuIHRoaXNcbi8vIG1ldGhvZCByZXR1cm5zLCB7QGNvZGUgcmVjb2duaXplcn0gaXMgaW4gZXJyb3IgcmVjb3ZlcnkgbW9kZS5cbi8vXG4vLyA8cD5UaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB7QGxpbmsgLy9zaW5nbGVUb2tlbkluc2VydGlvbn0gaWRlbnRpZmllc1xuLy8gc2luZ2xlLXRva2VuIGluc2VydGlvbiBhcyBhIHZpYWJsZSByZWNvdmVyeSBzdHJhdGVneSBmb3IgYSBtaXNtYXRjaGVkXG4vLyBpbnB1dCBlcnJvci48L3A+XG4vL1xuLy8gPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2ltcGx5IHJldHVybnMgaWYgdGhlIGhhbmRsZXIgaXMgYWxyZWFkeSBpblxuLy8gZXJyb3IgcmVjb3ZlcnkgbW9kZS4gT3RoZXJ3aXNlLCBpdCBjYWxscyB7QGxpbmsgLy9iZWdpbkVycm9yQ29uZGl0aW9ufSB0b1xuLy8gZW50ZXIgZXJyb3IgcmVjb3ZlcnkgbW9kZSwgZm9sbG93ZWQgYnkgY2FsbGluZ1xuLy8ge0BsaW5rIFBhcnNlci8vbm90aWZ5RXJyb3JMaXN0ZW5lcnN9LjwvcD5cbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplciB0aGUgcGFyc2VyIGluc3RhbmNlXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydE1pc3NpbmdUb2tlbiA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICBpZiAoIHRoaXMuaW5FcnJvclJlY292ZXJ5TW9kZShyZWNvZ25pemVyKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuYmVnaW5FcnJvckNvbmRpdGlvbihyZWNvZ25pemVyKTtcbiAgICB2YXIgdCA9IHJlY29nbml6ZXIuZ2V0Q3VycmVudFRva2VuKCk7XG4gICAgdmFyIGV4cGVjdGluZyA9IHRoaXMuZ2V0RXhwZWN0ZWRUb2tlbnMocmVjb2duaXplcik7XG4gICAgdmFyIG1zZyA9IFwibWlzc2luZyBcIiArIGV4cGVjdGluZy50b1N0cmluZyhyZWNvZ25pemVyLmxpdGVyYWxOYW1lcywgcmVjb2duaXplci5zeW1ib2xpY05hbWVzKSArXG4gICAgICAgICAgXCIgYXQgXCIgKyB0aGlzLmdldFRva2VuRXJyb3JEaXNwbGF5KHQpO1xuICAgIHJlY29nbml6ZXIubm90aWZ5RXJyb3JMaXN0ZW5lcnMobXNnLCB0LCBudWxsKTtcbn07XG5cbi8vIDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGF0dGVtcHRzIHRvIHJlY292ZXIgZnJvbSB0aGUgbWlzbWF0Y2hlZCBpbnB1dFxuLy8gYnkgdXNpbmcgc2luZ2xlIHRva2VuIGluc2VydGlvbiBhbmQgZGVsZXRpb24gYXMgZGVzY3JpYmVkIGJlbG93LiBJZiB0aGVcbi8vIHJlY292ZXJ5IGF0dGVtcHQgZmFpbHMsIHRoaXMgbWV0aG9kIHRocm93cyBhblxuLy8ge0BsaW5rIElucHV0TWlzbWF0Y2hFeGNlcHRpb259LjwvcD5cbi8vXG4vLyA8cD48c3Ryb25nPkVYVFJBIFRPS0VOPC9zdHJvbmc+IChzaW5nbGUgdG9rZW4gZGVsZXRpb24pPC9wPlxuLy9cbi8vIDxwPntAY29kZSBMQSgxKX0gaXMgbm90IHdoYXQgd2UgYXJlIGxvb2tpbmcgZm9yLiBJZiB7QGNvZGUgTEEoMil9IGhhcyB0aGVcbi8vIHJpZ2h0IHRva2VuLCBob3dldmVyLCB0aGVuIGFzc3VtZSB7QGNvZGUgTEEoMSl9IGlzIHNvbWUgZXh0cmEgc3B1cmlvdXNcbi8vIHRva2VuIGFuZCBkZWxldGUgaXQuIFRoZW4gY29uc3VtZSBhbmQgcmV0dXJuIHRoZSBuZXh0IHRva2VuICh3aGljaCB3YXNcbi8vIHRoZSB7QGNvZGUgTEEoMil9IHRva2VuKSBhcyB0aGUgc3VjY2Vzc2Z1bCByZXN1bHQgb2YgdGhlIG1hdGNoIG9wZXJhdGlvbi48L3A+XG4vL1xuLy8gPHA+VGhpcyByZWNvdmVyeSBzdHJhdGVneSBpcyBpbXBsZW1lbnRlZCBieSB7QGxpbmtcbi8vIC8vc2luZ2xlVG9rZW5EZWxldGlvbn0uPC9wPlxuLy9cbi8vIDxwPjxzdHJvbmc+TUlTU0lORyBUT0tFTjwvc3Ryb25nPiAoc2luZ2xlIHRva2VuIGluc2VydGlvbik8L3A+XG4vL1xuLy8gPHA+SWYgY3VycmVudCB0b2tlbiAoYXQge0Bjb2RlIExBKDEpfSkgaXMgY29uc2lzdGVudCB3aXRoIHdoYXQgY291bGQgY29tZVxuLy8gYWZ0ZXIgdGhlIGV4cGVjdGVkIHtAY29kZSBMQSgxKX0gdG9rZW4sIHRoZW4gYXNzdW1lIHRoZSB0b2tlbiBpcyBtaXNzaW5nXG4vLyBhbmQgdXNlIHRoZSBwYXJzZXIncyB7QGxpbmsgVG9rZW5GYWN0b3J5fSB0byBjcmVhdGUgaXQgb24gdGhlIGZseS4gVGhlXG4vLyBcImluc2VydGlvblwiIGlzIHBlcmZvcm1lZCBieSByZXR1cm5pbmcgdGhlIGNyZWF0ZWQgdG9rZW4gYXMgdGhlIHN1Y2Nlc3NmdWxcbi8vIHJlc3VsdCBvZiB0aGUgbWF0Y2ggb3BlcmF0aW9uLjwvcD5cbi8vXG4vLyA8cD5UaGlzIHJlY292ZXJ5IHN0cmF0ZWd5IGlzIGltcGxlbWVudGVkIGJ5IHtAbGlua1xuLy8gLy9zaW5nbGVUb2tlbkluc2VydGlvbn0uPC9wPlxuLy9cbi8vIDxwPjxzdHJvbmc+RVhBTVBMRTwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5Gb3IgZXhhbXBsZSwgSW5wdXQge0Bjb2RlIGk9KDM7fSBpcyBjbGVhcmx5IG1pc3NpbmcgdGhlIHtAY29kZSAnKSd9LiBXaGVuXG4vLyB0aGUgcGFyc2VyIHJldHVybnMgZnJvbSB0aGUgbmVzdGVkIGNhbGwgdG8ge0Bjb2RlIGV4cHJ9LCBpdCB3aWxsIGhhdmVcbi8vIGNhbGwgY2hhaW46PC9wPlxuLy9cbi8vIDxwcmU+XG4vLyBzdGF0ICZyYXJyOyBleHByICZyYXJyOyBhdG9tXG4vLyA8L3ByZT5cbi8vXG4vLyBhbmQgaXQgd2lsbCBiZSB0cnlpbmcgdG8gbWF0Y2ggdGhlIHtAY29kZSAnKSd9IGF0IHRoaXMgcG9pbnQgaW4gdGhlXG4vLyBkZXJpdmF0aW9uOlxuLy9cbi8vIDxwcmU+XG4vLyA9Jmd0OyBJRCAnPScgJygnIElOVCAnKScgKCcrJyBhdG9tKSogJzsnXG4vLyBeXG4vLyA8L3ByZT5cbi8vXG4vLyBUaGUgYXR0ZW1wdCB0byBtYXRjaCB7QGNvZGUgJyknfSB3aWxsIGZhaWwgd2hlbiBpdCBzZWVzIHtAY29kZSAnOyd9IGFuZFxuLy8gY2FsbCB7QGxpbmsgLy9yZWNvdmVySW5saW5lfS4gVG8gcmVjb3ZlciwgaXQgc2VlcyB0aGF0IHtAY29kZSBMQSgxKT09JzsnfVxuLy8gaXMgaW4gdGhlIHNldCBvZiB0b2tlbnMgdGhhdCBjYW4gZm9sbG93IHRoZSB7QGNvZGUgJyknfSB0b2tlbiByZWZlcmVuY2Vcbi8vIGluIHJ1bGUge0Bjb2RlIGF0b219LiBJdCBjYW4gYXNzdW1lIHRoYXQgeW91IGZvcmdvdCB0aGUge0Bjb2RlICcpJ30uXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlY292ZXJJbmxpbmUgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgLy8gU0lOR0xFIFRPS0VOIERFTEVUSU9OXG4gICAgdmFyIG1hdGNoZWRTeW1ib2wgPSB0aGlzLnNpbmdsZVRva2VuRGVsZXRpb24ocmVjb2duaXplcik7XG4gICAgaWYgKG1hdGNoZWRTeW1ib2wgIT09IG51bGwpIHtcbiAgICAgICAgLy8gd2UgaGF2ZSBkZWxldGVkIHRoZSBleHRyYSB0b2tlbi5cbiAgICAgICAgLy8gbm93LCBtb3ZlIHBhc3QgdHR5cGUgdG9rZW4gYXMgaWYgYWxsIHdlcmUgb2tcbiAgICAgICAgcmVjb2duaXplci5jb25zdW1lKCk7XG4gICAgICAgIHJldHVybiBtYXRjaGVkU3ltYm9sO1xuICAgIH1cbiAgICAvLyBTSU5HTEUgVE9LRU4gSU5TRVJUSU9OXG4gICAgaWYgKHRoaXMuc2luZ2xlVG9rZW5JbnNlcnRpb24ocmVjb2duaXplcikpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWlzc2luZ1N5bWJvbChyZWNvZ25pemVyKTtcbiAgICB9XG4gICAgLy8gZXZlbiB0aGF0IGRpZG4ndCB3b3JrOyBtdXN0IHRocm93IHRoZSBleGNlcHRpb25cbiAgICB0aHJvdyBuZXcgSW5wdXRNaXNtYXRjaEV4Y2VwdGlvbihyZWNvZ25pemVyKTtcbn07XG5cbi8vXG4vLyBUaGlzIG1ldGhvZCBpbXBsZW1lbnRzIHRoZSBzaW5nbGUtdG9rZW4gaW5zZXJ0aW9uIGlubGluZSBlcnJvciByZWNvdmVyeVxuLy8gc3RyYXRlZ3kuIEl0IGlzIGNhbGxlZCBieSB7QGxpbmsgLy9yZWNvdmVySW5saW5lfSBpZiB0aGUgc2luZ2xlLXRva2VuXG4vLyBkZWxldGlvbiBzdHJhdGVneSBmYWlscyB0byByZWNvdmVyIGZyb20gdGhlIG1pc21hdGNoZWQgaW5wdXQuIElmIHRoaXNcbi8vIG1ldGhvZCByZXR1cm5zIHtAY29kZSB0cnVlfSwge0Bjb2RlIHJlY29nbml6ZXJ9IHdpbGwgYmUgaW4gZXJyb3IgcmVjb3Zlcnlcbi8vIG1vZGUuXG4vL1xuLy8gPHA+VGhpcyBtZXRob2QgZGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCBzaW5nbGUtdG9rZW4gaW5zZXJ0aW9uIGlzIHZpYWJsZSBieVxuLy8gY2hlY2tpbmcgaWYgdGhlIHtAY29kZSBMQSgxKX0gaW5wdXQgc3ltYm9sIGNvdWxkIGJlIHN1Y2Nlc3NmdWxseSBtYXRjaGVkXG4vLyBpZiBpdCB3ZXJlIGluc3RlYWQgdGhlIHtAY29kZSBMQSgyKX0gc3ltYm9sLiBJZiB0aGlzIG1ldGhvZCByZXR1cm5zXG4vLyB7QGNvZGUgdHJ1ZX0sIHRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGNyZWF0aW5nIGFuZCBpbnNlcnRpbmcgYVxuLy8gdG9rZW4gd2l0aCB0aGUgY29ycmVjdCB0eXBlIHRvIHByb2R1Y2UgdGhpcyBiZWhhdmlvci48L3A+XG4vL1xuLy8gQHBhcmFtIHJlY29nbml6ZXIgdGhlIHBhcnNlciBpbnN0YW5jZVxuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgc2luZ2xlLXRva2VuIGluc2VydGlvbiBpcyBhIHZpYWJsZSByZWNvdmVyeVxuLy8gc3RyYXRlZ3kgZm9yIHRoZSBjdXJyZW50IG1pc21hdGNoZWQgaW5wdXQsIG90aGVyd2lzZSB7QGNvZGUgZmFsc2V9XG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnNpbmdsZVRva2VuSW5zZXJ0aW9uID0gZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgIHZhciBjdXJyZW50U3ltYm9sVHlwZSA9IHJlY29nbml6ZXIuZ2V0VG9rZW5TdHJlYW0oKS5MQSgxKTtcbiAgICAvLyBpZiBjdXJyZW50IHRva2VuIGlzIGNvbnNpc3RlbnQgd2l0aCB3aGF0IGNvdWxkIGNvbWUgYWZ0ZXIgY3VycmVudFxuICAgIC8vIEFUTiBzdGF0ZSwgdGhlbiB3ZSBrbm93IHdlJ3JlIG1pc3NpbmcgYSB0b2tlbjsgZXJyb3IgcmVjb3ZlcnlcbiAgICAvLyBpcyBmcmVlIHRvIGNvbmp1cmUgdXAgYW5kIGluc2VydCB0aGUgbWlzc2luZyB0b2tlblxuICAgIHZhciBhdG4gPSByZWNvZ25pemVyLl9pbnRlcnAuYXRuO1xuICAgIHZhciBjdXJyZW50U3RhdGUgPSBhdG4uc3RhdGVzW3JlY29nbml6ZXIuc3RhdGVdO1xuICAgIHZhciBuZXh0ID0gY3VycmVudFN0YXRlLnRyYW5zaXRpb25zWzBdLnRhcmdldDtcbiAgICB2YXIgZXhwZWN0aW5nQXRMTDIgPSBhdG4ubmV4dFRva2VucyhuZXh0LCByZWNvZ25pemVyLl9jdHgpO1xuICAgIGlmIChleHBlY3RpbmdBdExMMi5jb250YWlucyhjdXJyZW50U3ltYm9sVHlwZSkgKXtcbiAgICAgICAgdGhpcy5yZXBvcnRNaXNzaW5nVG9rZW4ocmVjb2duaXplcik7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59O1xuXG4vLyBUaGlzIG1ldGhvZCBpbXBsZW1lbnRzIHRoZSBzaW5nbGUtdG9rZW4gZGVsZXRpb24gaW5saW5lIGVycm9yIHJlY292ZXJ5XG4vLyBzdHJhdGVneS4gSXQgaXMgY2FsbGVkIGJ5IHtAbGluayAvL3JlY292ZXJJbmxpbmV9IHRvIGF0dGVtcHQgdG8gcmVjb3ZlclxuLy8gZnJvbSBtaXNtYXRjaGVkIGlucHV0LiBJZiB0aGlzIG1ldGhvZCByZXR1cm5zIG51bGwsIHRoZSBwYXJzZXIgYW5kIGVycm9yXG4vLyBoYW5kbGVyIHN0YXRlIHdpbGwgbm90IGhhdmUgY2hhbmdlZC4gSWYgdGhpcyBtZXRob2QgcmV0dXJucyBub24tbnVsbCxcbi8vIHtAY29kZSByZWNvZ25pemVyfSB3aWxsIDxlbT5ub3Q8L2VtPiBiZSBpbiBlcnJvciByZWNvdmVyeSBtb2RlIHNpbmNlIHRoZVxuLy8gcmV0dXJuZWQgdG9rZW4gd2FzIGEgc3VjY2Vzc2Z1bCBtYXRjaC5cbi8vXG4vLyA8cD5JZiB0aGUgc2luZ2xlLXRva2VuIGRlbGV0aW9uIGlzIHN1Y2Nlc3NmdWwsIHRoaXMgbWV0aG9kIGNhbGxzXG4vLyB7QGxpbmsgLy9yZXBvcnRVbndhbnRlZFRva2VufSB0byByZXBvcnQgdGhlIGVycm9yLCBmb2xsb3dlZCBieVxuLy8ge0BsaW5rIFBhcnNlci8vY29uc3VtZX0gdG8gYWN0dWFsbHkgXCJkZWxldGVcIiB0aGUgZXh0cmFuZW91cyB0b2tlbi4gVGhlbixcbi8vIGJlZm9yZSByZXR1cm5pbmcge0BsaW5rIC8vcmVwb3J0TWF0Y2h9IGlzIGNhbGxlZCB0byBzaWduYWwgYSBzdWNjZXNzZnVsXG4vLyBtYXRjaC48L3A+XG4vL1xuLy8gQHBhcmFtIHJlY29nbml6ZXIgdGhlIHBhcnNlciBpbnN0YW5jZVxuLy8gQHJldHVybiB0aGUgc3VjY2Vzc2Z1bGx5IG1hdGNoZWQge0BsaW5rIFRva2VufSBpbnN0YW5jZSBpZiBzaW5nbGUtdG9rZW5cbi8vIGRlbGV0aW9uIHN1Y2Nlc3NmdWxseSByZWNvdmVycyBmcm9tIHRoZSBtaXNtYXRjaGVkIGlucHV0LCBvdGhlcndpc2Vcbi8vIHtAY29kZSBudWxsfVxuLy9cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5zaW5nbGVUb2tlbkRlbGV0aW9uID0gZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgIHZhciBuZXh0VG9rZW5UeXBlID0gcmVjb2duaXplci5nZXRUb2tlblN0cmVhbSgpLkxBKDIpO1xuICAgIHZhciBleHBlY3RpbmcgPSB0aGlzLmdldEV4cGVjdGVkVG9rZW5zKHJlY29nbml6ZXIpO1xuICAgIGlmIChleHBlY3RpbmcuY29udGFpbnMobmV4dFRva2VuVHlwZSkpIHtcbiAgICAgICAgdGhpcy5yZXBvcnRVbndhbnRlZFRva2VuKHJlY29nbml6ZXIpO1xuICAgICAgICAvLyBwcmludChcInJlY292ZXJGcm9tTWlzbWF0Y2hlZFRva2VuIGRlbGV0aW5nIFwiIFxcXG4gICAgICAgIC8vICsgc3RyKHJlY29nbml6ZXIuZ2V0VG9rZW5TdHJlYW0oKS5MVCgxKSkgXFxcbiAgICAgICAgLy8gKyBcIiBzaW5jZSBcIiArIHN0cihyZWNvZ25pemVyLmdldFRva2VuU3RyZWFtKCkuTFQoMikpIFxcXG4gICAgICAgIC8vICsgXCIgaXMgd2hhdCB3ZSB3YW50XCIsIGZpbGU9c3lzLnN0ZGVycilcbiAgICAgICAgcmVjb2duaXplci5jb25zdW1lKCk7IC8vIHNpbXBseSBkZWxldGUgZXh0cmEgdG9rZW5cbiAgICAgICAgLy8gd2Ugd2FudCB0byByZXR1cm4gdGhlIHRva2VuIHdlJ3JlIGFjdHVhbGx5IG1hdGNoaW5nXG4gICAgICAgIHZhciBtYXRjaGVkU3ltYm9sID0gcmVjb2duaXplci5nZXRDdXJyZW50VG9rZW4oKTtcbiAgICAgICAgdGhpcy5yZXBvcnRNYXRjaChyZWNvZ25pemVyKTsgLy8gd2Uga25vdyBjdXJyZW50IHRva2VuIGlzIGNvcnJlY3RcbiAgICAgICAgcmV0dXJuIG1hdGNoZWRTeW1ib2w7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufTtcblxuLy8gQ29uanVyZSB1cCBhIG1pc3NpbmcgdG9rZW4gZHVyaW5nIGVycm9yIHJlY292ZXJ5LlxuLy9cbi8vIFRoZSByZWNvZ25pemVyIGF0dGVtcHRzIHRvIHJlY292ZXIgZnJvbSBzaW5nbGUgbWlzc2luZ1xuLy8gc3ltYm9scy4gQnV0LCBhY3Rpb25zIG1pZ2h0IHJlZmVyIHRvIHRoYXQgbWlzc2luZyBzeW1ib2wuXG4vLyBGb3IgZXhhbXBsZSwgeD1JRCB7ZigkeCk7fS4gVGhlIGFjdGlvbiBjbGVhcmx5IGFzc3VtZXNcbi8vIHRoYXQgdGhlcmUgaGFzIGJlZW4gYW4gaWRlbnRpZmllciBtYXRjaGVkIHByZXZpb3VzbHkgYW5kIHRoYXRcbi8vICR4IHBvaW50cyBhdCB0aGF0IHRva2VuLiBJZiB0aGF0IHRva2VuIGlzIG1pc3NpbmcsIGJ1dFxuLy8gdGhlIG5leHQgdG9rZW4gaW4gdGhlIHN0cmVhbSBpcyB3aGF0IHdlIHdhbnQgd2UgYXNzdW1lIHRoYXRcbi8vIHRoaXMgdG9rZW4gaXMgbWlzc2luZyBhbmQgd2Uga2VlcCBnb2luZy4gQmVjYXVzZSB3ZVxuLy8gaGF2ZSB0byByZXR1cm4gc29tZSB0b2tlbiB0byByZXBsYWNlIHRoZSBtaXNzaW5nIHRva2VuLFxuLy8gd2UgaGF2ZSB0byBjb25qdXJlIG9uZSB1cC4gVGhpcyBtZXRob2QgZ2l2ZXMgdGhlIHVzZXIgY29udHJvbFxuLy8gb3ZlciB0aGUgdG9rZW5zIHJldHVybmVkIGZvciBtaXNzaW5nIHRva2Vucy4gTW9zdGx5LFxuLy8geW91IHdpbGwgd2FudCB0byBjcmVhdGUgc29tZXRoaW5nIHNwZWNpYWwgZm9yIGlkZW50aWZpZXJcbi8vIHRva2Vucy4gRm9yIGxpdGVyYWxzIHN1Y2ggYXMgJ3snIGFuZCAnLCcsIHRoZSBkZWZhdWx0XG4vLyBhY3Rpb24gaW4gdGhlIHBhcnNlciBvciB0cmVlIHBhcnNlciB3b3Jrcy4gSXQgc2ltcGx5IGNyZWF0ZXNcbi8vIGEgQ29tbW9uVG9rZW4gb2YgdGhlIGFwcHJvcHJpYXRlIHR5cGUuIFRoZSB0ZXh0IHdpbGwgYmUgdGhlIHRva2VuLlxuLy8gSWYgeW91IGNoYW5nZSB3aGF0IHRva2VucyBtdXN0IGJlIGNyZWF0ZWQgYnkgdGhlIGxleGVyLFxuLy8gb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gY3JlYXRlIHRoZSBhcHByb3ByaWF0ZSB0b2tlbnMuXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLmdldE1pc3NpbmdTeW1ib2wgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgdmFyIGN1cnJlbnRTeW1ib2wgPSByZWNvZ25pemVyLmdldEN1cnJlbnRUb2tlbigpO1xuICAgIHZhciBleHBlY3RpbmcgPSB0aGlzLmdldEV4cGVjdGVkVG9rZW5zKHJlY29nbml6ZXIpO1xuICAgIHZhciBleHBlY3RlZFRva2VuVHlwZSA9IGV4cGVjdGluZy5maXJzdCgpOyAvLyBnZXQgYW55IGVsZW1lbnRcbiAgICB2YXIgdG9rZW5UZXh0O1xuICAgIGlmIChleHBlY3RlZFRva2VuVHlwZT09PVRva2VuLkVPRikge1xuICAgICAgICB0b2tlblRleHQgPSBcIjxtaXNzaW5nIEVPRj5cIjtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0b2tlblRleHQgPSBcIjxtaXNzaW5nIFwiICsgcmVjb2duaXplci5saXRlcmFsTmFtZXNbZXhwZWN0ZWRUb2tlblR5cGVdICsgXCI+XCI7XG4gICAgfVxuICAgIHZhciBjdXJyZW50ID0gY3VycmVudFN5bWJvbDtcbiAgICB2YXIgbG9va2JhY2sgPSByZWNvZ25pemVyLmdldFRva2VuU3RyZWFtKCkuTFQoLTEpO1xuICAgIGlmIChjdXJyZW50LnR5cGU9PT1Ub2tlbi5FT0YgJiYgbG9va2JhY2sgIT09IG51bGwpIHtcbiAgICAgICAgY3VycmVudCA9IGxvb2tiYWNrO1xuICAgIH1cbiAgICByZXR1cm4gcmVjb2duaXplci5nZXRUb2tlbkZhY3RvcnkoKS5jcmVhdGUoY3VycmVudC5zb3VyY2UsXG4gICAgICAgIGV4cGVjdGVkVG9rZW5UeXBlLCB0b2tlblRleHQsIFRva2VuLkRFRkFVTFRfQ0hBTk5FTCxcbiAgICAgICAgLTEsIC0xLCBjdXJyZW50LmxpbmUsIGN1cnJlbnQuY29sdW1uKTtcbn07XG5cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5nZXRFeHBlY3RlZFRva2VucyA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICByZXR1cm4gcmVjb2duaXplci5nZXRFeHBlY3RlZFRva2VucygpO1xufTtcblxuLy8gSG93IHNob3VsZCBhIHRva2VuIGJlIGRpc3BsYXllZCBpbiBhbiBlcnJvciBtZXNzYWdlPyBUaGUgZGVmYXVsdFxuLy8gaXMgdG8gZGlzcGxheSBqdXN0IHRoZSB0ZXh0LCBidXQgZHVyaW5nIGRldmVsb3BtZW50IHlvdSBtaWdodFxuLy8gd2FudCB0byBoYXZlIGEgbG90IG9mIGluZm9ybWF0aW9uIHNwaXQgb3V0LiBPdmVycmlkZSBpbiB0aGF0IGNhc2Vcbi8vIHRvIHVzZSB0LnRvU3RyaW5nKCkgKHdoaWNoLCBmb3IgQ29tbW9uVG9rZW4sIGR1bXBzIGV2ZXJ5dGhpbmcgYWJvdXRcbi8vIHRoZSB0b2tlbikuIFRoaXMgaXMgYmV0dGVyIHRoYW4gZm9yY2luZyB5b3UgdG8gb3ZlcnJpZGUgYSBtZXRob2QgaW5cbi8vIHlvdXIgdG9rZW4gb2JqZWN0cyBiZWNhdXNlIHlvdSBkb24ndCBoYXZlIHRvIGdvIG1vZGlmeSB5b3VyIGxleGVyXG4vLyBzbyB0aGF0IGl0IGNyZWF0ZXMgYSBuZXcgSmF2YSB0eXBlLlxuLy9cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5nZXRUb2tlbkVycm9yRGlzcGxheSA9IGZ1bmN0aW9uKHQpIHtcbiAgICBpZiAodCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gXCI8bm8gdG9rZW4+XCI7XG4gICAgfVxuICAgIHZhciBzID0gdC50ZXh0O1xuICAgIGlmIChzID09PSBudWxsKSB7XG4gICAgICAgIGlmICh0LnR5cGU9PT1Ub2tlbi5FT0YpIHtcbiAgICAgICAgICAgIHMgPSBcIjxFT0Y+XCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzID0gXCI8XCIgKyB0LnR5cGUgKyBcIj5cIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lc2NhcGVXU0FuZFF1b3RlKHMpO1xufTtcblxuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLmVzY2FwZVdTQW5kUXVvdGUgPSBmdW5jdGlvbihzKSB7XG4gICAgcyA9IHMucmVwbGFjZSgvXFxuL2csXCJcXFxcblwiKTtcbiAgICBzID0gcy5yZXBsYWNlKC9cXHIvZyxcIlxcXFxyXCIpO1xuICAgIHMgPSBzLnJlcGxhY2UoL1xcdC9nLFwiXFxcXHRcIik7XG4gICAgcmV0dXJuIFwiJ1wiICsgcyArIFwiJ1wiO1xufTtcblxuLy8gQ29tcHV0ZSB0aGUgZXJyb3IgcmVjb3Zlcnkgc2V0IGZvciB0aGUgY3VycmVudCBydWxlLiBEdXJpbmdcbi8vIHJ1bGUgaW52b2NhdGlvbiwgdGhlIHBhcnNlciBwdXNoZXMgdGhlIHNldCBvZiB0b2tlbnMgdGhhdCBjYW5cbi8vIGZvbGxvdyB0aGF0IHJ1bGUgcmVmZXJlbmNlIG9uIHRoZSBzdGFjazsgdGhpcyBhbW91bnRzIHRvXG4vLyBjb21wdXRpbmcgRklSU1Qgb2Ygd2hhdCBmb2xsb3dzIHRoZSBydWxlIHJlZmVyZW5jZSBpbiB0aGVcbi8vIGVuY2xvc2luZyBydWxlLiBTZWUgTGluZWFyQXBwcm94aW1hdG9yLkZJUlNUKCkuXG4vLyBUaGlzIGxvY2FsIGZvbGxvdyBzZXQgb25seSBpbmNsdWRlcyB0b2tlbnNcbi8vIGZyb20gd2l0aGluIHRoZSBydWxlOyBpLmUuLCB0aGUgRklSU1QgY29tcHV0YXRpb24gZG9uZSBieVxuLy8gQU5UTFIgc3RvcHMgYXQgdGhlIGVuZCBvZiBhIHJ1bGUuXG4vL1xuLy8gRVhBTVBMRVxuLy9cbi8vIFdoZW4geW91IGZpbmQgYSBcIm5vIHZpYWJsZSBhbHQgZXhjZXB0aW9uXCIsIHRoZSBpbnB1dCBpcyBub3Rcbi8vIGNvbnNpc3RlbnQgd2l0aCBhbnkgb2YgdGhlIGFsdGVybmF0aXZlcyBmb3IgcnVsZSByLiBUaGUgYmVzdFxuLy8gdGhpbmcgdG8gZG8gaXMgdG8gY29uc3VtZSB0b2tlbnMgdW50aWwgeW91IHNlZSBzb21ldGhpbmcgdGhhdFxuLy8gY2FuIGxlZ2FsbHkgZm9sbG93IGEgY2FsbCB0byByLy9vciogYW55IHJ1bGUgdGhhdCBjYWxsZWQgci5cbi8vIFlvdSBkb24ndCB3YW50IHRoZSBleGFjdCBzZXQgb2YgdmlhYmxlIG5leHQgdG9rZW5zIGJlY2F1c2UgdGhlXG4vLyBpbnB1dCBtaWdodCBqdXN0IGJlIG1pc3NpbmcgYSB0b2tlbi0teW91IG1pZ2h0IGNvbnN1bWUgdGhlXG4vLyByZXN0IG9mIHRoZSBpbnB1dCBsb29raW5nIGZvciBvbmUgb2YgdGhlIG1pc3NpbmcgdG9rZW5zLlxuLy9cbi8vIENvbnNpZGVyIGdyYW1tYXI6XG4vL1xuLy8gYSA6ICdbJyBiICddJ1xuLy8gfCAnKCcgYiAnKSdcbi8vIDtcbi8vIGIgOiBjICdeJyBJTlQgO1xuLy8gYyA6IElEXG4vLyB8IElOVFxuLy8gO1xuLy9cbi8vIEF0IGVhY2ggcnVsZSBpbnZvY2F0aW9uLCB0aGUgc2V0IG9mIHRva2VucyB0aGF0IGNvdWxkIGZvbGxvd1xuLy8gdGhhdCBydWxlIGlzIHB1c2hlZCBvbiBhIHN0YWNrLiBIZXJlIGFyZSB0aGUgdmFyaW91c1xuLy8gY29udGV4dC1zZW5zaXRpdmUgZm9sbG93IHNldHM6XG4vL1xuLy8gRk9MTE9XKGIxX2luX2EpID0gRklSU1QoJ10nKSA9ICddJ1xuLy8gRk9MTE9XKGIyX2luX2EpID0gRklSU1QoJyknKSA9ICcpJ1xuLy8gRk9MTE9XKGNfaW5fYikgPSBGSVJTVCgnXicpID0gJ14nXG4vL1xuLy8gVXBvbiBlcnJvbmVvdXMgaW5wdXQgXCJbXVwiLCB0aGUgY2FsbCBjaGFpbiBpc1xuLy9cbi8vIGEgLT4gYiAtPiBjXG4vL1xuLy8gYW5kLCBoZW5jZSwgdGhlIGZvbGxvdyBjb250ZXh0IHN0YWNrIGlzOlxuLy9cbi8vIGRlcHRoIGZvbGxvdyBzZXQgc3RhcnQgb2YgcnVsZSBleGVjdXRpb25cbi8vIDAgPEVPRj4gYSAoZnJvbSBtYWluKCkpXG4vLyAxICddJyBiXG4vLyAyICdeJyBjXG4vL1xuLy8gTm90aWNlIHRoYXQgJyknIGlzIG5vdCBpbmNsdWRlZCwgYmVjYXVzZSBiIHdvdWxkIGhhdmUgdG8gaGF2ZVxuLy8gYmVlbiBjYWxsZWQgZnJvbSBhIGRpZmZlcmVudCBjb250ZXh0IGluIHJ1bGUgYSBmb3IgJyknIHRvIGJlXG4vLyBpbmNsdWRlZC5cbi8vXG4vLyBGb3IgZXJyb3IgcmVjb3ZlcnksIHdlIGNhbm5vdCBjb25zaWRlciBGT0xMT1coYylcbi8vIChjb250ZXh0LXNlbnNpdGl2ZSBvciBvdGhlcndpc2UpLiBXZSBuZWVkIHRoZSBjb21iaW5lZCBzZXQgb2Zcbi8vIGFsbCBjb250ZXh0LXNlbnNpdGl2ZSBGT0xMT1cgc2V0cy0tdGhlIHNldCBvZiBhbGwgdG9rZW5zIHRoYXRcbi8vIGNvdWxkIGZvbGxvdyBhbnkgcmVmZXJlbmNlIGluIHRoZSBjYWxsIGNoYWluLiBXZSBuZWVkIHRvXG4vLyByZXN5bmMgdG8gb25lIG9mIHRob3NlIHRva2Vucy4gTm90ZSB0aGF0IEZPTExPVyhjKT0nXicgYW5kIGlmXG4vLyB3ZSByZXN5bmMnZCB0byB0aGF0IHRva2VuLCB3ZSdkIGNvbnN1bWUgdW50aWwgRU9GLiBXZSBuZWVkIHRvXG4vLyBzeW5jIHRvIGNvbnRleHQtc2Vuc2l0aXZlIEZPTExPV3MgZm9yIGEsIGIsIGFuZCBjOiB7J10nLCdeJ30uXG4vLyBJbiB0aGlzIGNhc2UsIGZvciBpbnB1dCBcIltdXCIsIExBKDEpIGlzICddJyBhbmQgaW4gdGhlIHNldCwgc28gd2Ugd291bGRcbi8vIG5vdCBjb25zdW1lIGFueXRoaW5nLiBBZnRlciBwcmludGluZyBhbiBlcnJvciwgcnVsZSBjIHdvdWxkXG4vLyByZXR1cm4gbm9ybWFsbHkuIFJ1bGUgYiB3b3VsZCBub3QgZmluZCB0aGUgcmVxdWlyZWQgJ14nIHRob3VnaC5cbi8vIEF0IHRoaXMgcG9pbnQsIGl0IGdldHMgYSBtaXNtYXRjaGVkIHRva2VuIGVycm9yIGFuZCB0aHJvd3MgYW5cbi8vIGV4Y2VwdGlvbiAoc2luY2UgTEEoMSkgaXMgbm90IGluIHRoZSB2aWFibGUgZm9sbG93aW5nIHRva2VuXG4vLyBzZXQpLiBUaGUgcnVsZSBleGNlcHRpb24gaGFuZGxlciB0cmllcyB0byByZWNvdmVyLCBidXQgZmluZHNcbi8vIHRoZSBzYW1lIHJlY292ZXJ5IHNldCBhbmQgZG9lc24ndCBjb25zdW1lIGFueXRoaW5nLiBSdWxlIGJcbi8vIGV4aXRzIG5vcm1hbGx5IHJldHVybmluZyB0byBydWxlIGEuIE5vdyBpdCBmaW5kcyB0aGUgJ10nIChhbmRcbi8vIHdpdGggdGhlIHN1Y2Nlc3NmdWwgbWF0Y2ggZXhpdHMgZXJyb3JSZWNvdmVyeSBtb2RlKS5cbi8vXG4vLyBTbywgeW91IGNhbiBzZWUgdGhhdCB0aGUgcGFyc2VyIHdhbGtzIHVwIHRoZSBjYWxsIGNoYWluIGxvb2tpbmdcbi8vIGZvciB0aGUgdG9rZW4gdGhhdCB3YXMgYSBtZW1iZXIgb2YgdGhlIHJlY292ZXJ5IHNldC5cbi8vXG4vLyBFcnJvcnMgYXJlIG5vdCBnZW5lcmF0ZWQgaW4gZXJyb3JSZWNvdmVyeSBtb2RlLlxuLy9cbi8vIEFOVExSJ3MgZXJyb3IgcmVjb3ZlcnkgbWVjaGFuaXNtIGlzIGJhc2VkIHVwb24gb3JpZ2luYWwgaWRlYXM6XG4vL1xuLy8gXCJBbGdvcml0aG1zICsgRGF0YSBTdHJ1Y3R1cmVzID0gUHJvZ3JhbXNcIiBieSBOaWtsYXVzIFdpcnRoXG4vL1xuLy8gYW5kXG4vL1xuLy8gXCJBIG5vdGUgb24gZXJyb3IgcmVjb3ZlcnkgaW4gcmVjdXJzaXZlIGRlc2NlbnQgcGFyc2Vyc1wiOlxuLy8gaHR0cDovL3BvcnRhbC5hY20ub3JnL2NpdGF0aW9uLmNmbT9pZD05NDc5MDIuOTQ3OTA1XG4vL1xuLy8gTGF0ZXIsIEpvc2VmIEdyb3NjaCBoYWQgc29tZSBnb29kIGlkZWFzOlxuLy9cbi8vIFwiRWZmaWNpZW50IGFuZCBDb21mb3J0YWJsZSBFcnJvciBSZWNvdmVyeSBpbiBSZWN1cnNpdmUgRGVzY2VudFxuLy8gUGFyc2Vyc1wiOlxuLy8gZnRwOi8vd3d3LmNvY29sYWIuY29tL3Byb2R1Y3RzL2NvY2t0YWlsL2RvY2E0LnBzL2VsbC5wcy56aXBcbi8vXG4vLyBMaWtlIEdyb3NjaCBJIGltcGxlbWVudCBjb250ZXh0LXNlbnNpdGl2ZSBGT0xMT1cgc2V0cyB0aGF0IGFyZSBjb21iaW5lZFxuLy8gYXQgcnVuLXRpbWUgdXBvbiBlcnJvciB0byBhdm9pZCBvdmVyaGVhZCBkdXJpbmcgcGFyc2luZy5cbi8vXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUuZ2V0RXJyb3JSZWNvdmVyeVNldCA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICB2YXIgYXRuID0gcmVjb2duaXplci5faW50ZXJwLmF0bjtcbiAgICB2YXIgY3R4ID0gcmVjb2duaXplci5fY3R4O1xuICAgIHZhciByZWNvdmVyU2V0ID0gbmV3IEludGVydmFsU2V0KCk7XG4gICAgd2hpbGUgKGN0eCAhPT0gbnVsbCAmJiBjdHguaW52b2tpbmdTdGF0ZT49MCkge1xuICAgICAgICAvLyBjb21wdXRlIHdoYXQgZm9sbG93cyB3aG8gaW52b2tlZCB1c1xuICAgICAgICB2YXIgaW52b2tpbmdTdGF0ZSA9IGF0bi5zdGF0ZXNbY3R4Lmludm9raW5nU3RhdGVdO1xuICAgICAgICB2YXIgcnQgPSBpbnZva2luZ1N0YXRlLnRyYW5zaXRpb25zWzBdO1xuICAgICAgICB2YXIgZm9sbG93ID0gYXRuLm5leHRUb2tlbnMocnQuZm9sbG93U3RhdGUpO1xuICAgICAgICByZWNvdmVyU2V0LmFkZFNldChmb2xsb3cpO1xuICAgICAgICBjdHggPSBjdHgucGFyZW50Q3R4O1xuICAgIH1cbiAgICByZWNvdmVyU2V0LnJlbW92ZU9uZShUb2tlbi5FUFNJTE9OKTtcbiAgICByZXR1cm4gcmVjb3ZlclNldDtcbn07XG5cbi8vIENvbnN1bWUgdG9rZW5zIHVudGlsIG9uZSBtYXRjaGVzIHRoZSBnaXZlbiB0b2tlbiBzZXQuLy9cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5jb25zdW1lVW50aWwgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBzZXQpIHtcbiAgICB2YXIgdHR5cGUgPSByZWNvZ25pemVyLmdldFRva2VuU3RyZWFtKCkuTEEoMSk7XG4gICAgd2hpbGUoIHR0eXBlICE9PSBUb2tlbi5FT0YgJiYgIXNldC5jb250YWlucyh0dHlwZSkpIHtcbiAgICAgICAgcmVjb2duaXplci5jb25zdW1lKCk7XG4gICAgICAgIHR0eXBlID0gcmVjb2duaXplci5nZXRUb2tlblN0cmVhbSgpLkxBKDEpO1xuICAgIH1cbn07XG5cbi8vXG4vLyBUaGlzIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3l9IHJlc3BvbmRzIHRvIHN5bnRheCBlcnJvcnNcbi8vIGJ5IGltbWVkaWF0ZWx5IGNhbmNlbGluZyB0aGUgcGFyc2Ugb3BlcmF0aW9uIHdpdGggYVxuLy8ge0BsaW5rIFBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9ufS4gVGhlIGltcGxlbWVudGF0aW9uIGVuc3VyZXMgdGhhdCB0aGVcbi8vIHtAbGluayBQYXJzZXJSdWxlQ29udGV4dC8vZXhjZXB0aW9ufSBmaWVsZCBpcyBzZXQgZm9yIGFsbCBwYXJzZSB0cmVlIG5vZGVzXG4vLyB0aGF0IHdlcmUgbm90IGNvbXBsZXRlZCBwcmlvciB0byBlbmNvdW50ZXJpbmcgdGhlIGVycm9yLlxuLy9cbi8vIDxwPlxuLy8gVGhpcyBlcnJvciBzdHJhdGVneSBpcyB1c2VmdWwgaW4gdGhlIGZvbGxvd2luZyBzY2VuYXJpb3MuPC9wPlxuLy9cbi8vIDx1bD5cbi8vIDxsaT48c3Ryb25nPlR3by1zdGFnZSBwYXJzaW5nOjwvc3Ryb25nPiBUaGlzIGVycm9yIHN0cmF0ZWd5IGFsbG93cyB0aGUgZmlyc3Rcbi8vIHN0YWdlIG9mIHR3by1zdGFnZSBwYXJzaW5nIHRvIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZSBpZiBhbiBlcnJvciBpc1xuLy8gZW5jb3VudGVyZWQsIGFuZCBpbW1lZGlhdGVseSBmYWxsIGJhY2sgdG8gdGhlIHNlY29uZCBzdGFnZS4gSW4gYWRkaXRpb24gdG9cbi8vIGF2b2lkaW5nIHdhc3RlZCB3b3JrIGJ5IGF0dGVtcHRpbmcgdG8gcmVjb3ZlciBmcm9tIGVycm9ycyBoZXJlLCB0aGUgZW1wdHlcbi8vIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBCYWlsRXJyb3JTdHJhdGVneS8vc3luY30gaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mXG4vLyB0aGUgZmlyc3Qgc3RhZ2UuPC9saT5cbi8vIDxsaT48c3Ryb25nPlNpbGVudCB2YWxpZGF0aW9uOjwvc3Ryb25nPiBXaGVuIHN5bnRheCBlcnJvcnMgYXJlIG5vdCBiZWluZ1xuLy8gcmVwb3J0ZWQgb3IgbG9nZ2VkLCBhbmQgdGhlIHBhcnNlIHJlc3VsdCBpcyBzaW1wbHkgaWdub3JlZCBpZiBlcnJvcnMgb2NjdXIsXG4vLyB0aGUge0BsaW5rIEJhaWxFcnJvclN0cmF0ZWd5fSBhdm9pZHMgd2FzdGluZyB3b3JrIG9uIHJlY292ZXJpbmcgZnJvbSBlcnJvcnNcbi8vIHdoZW4gdGhlIHJlc3VsdCB3aWxsIGJlIGlnbm9yZWQgZWl0aGVyIHdheS48L2xpPlxuLy8gPC91bD5cbi8vXG4vLyA8cD5cbi8vIHtAY29kZSBteXBhcnNlci5zZXRFcnJvckhhbmRsZXIobmV3IEJhaWxFcnJvclN0cmF0ZWd5KCkpO308L3A+XG4vL1xuLy8gQHNlZSBQYXJzZXIvL3NldEVycm9ySGFuZGxlcihBTlRMUkVycm9yU3RyYXRlZ3kpXG4vL1xuZnVuY3Rpb24gQmFpbEVycm9yU3RyYXRlZ3koKSB7XG5cdERlZmF1bHRFcnJvclN0cmF0ZWd5LmNhbGwodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5CYWlsRXJyb3JTdHJhdGVneS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZSk7XG5CYWlsRXJyb3JTdHJhdGVneS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCYWlsRXJyb3JTdHJhdGVneTtcblxuLy8gSW5zdGVhZCBvZiByZWNvdmVyaW5nIGZyb20gZXhjZXB0aW9uIHtAY29kZSBlfSwgcmUtdGhyb3cgaXQgd3JhcHBlZFxuLy8gaW4gYSB7QGxpbmsgUGFyc2VDYW5jZWxsYXRpb25FeGNlcHRpb259IHNvIGl0IGlzIG5vdCBjYXVnaHQgYnkgdGhlXG4vLyBydWxlIGZ1bmN0aW9uIGNhdGNoZXMuIFVzZSB7QGxpbmsgRXhjZXB0aW9uLy9nZXRDYXVzZSgpfSB0byBnZXQgdGhlXG4vLyBvcmlnaW5hbCB7QGxpbmsgUmVjb2duaXRpb25FeGNlcHRpb259LlxuLy9cbkJhaWxFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5yZWNvdmVyID0gZnVuY3Rpb24ocmVjb2duaXplciwgZSkge1xuICAgIHZhciBjb250ZXh0ID0gcmVjb2duaXplci5fY3R4O1xuICAgIHdoaWxlIChjb250ZXh0ICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnRleHQuZXhjZXB0aW9uID0gZTtcbiAgICAgICAgY29udGV4dCA9IGNvbnRleHQucGFyZW50Q3R4O1xuICAgIH1cbiAgICB0aHJvdyBuZXcgUGFyc2VDYW5jZWxsYXRpb25FeGNlcHRpb24oZSk7XG59O1xuXG4vLyBNYWtlIHN1cmUgd2UgZG9uJ3QgYXR0ZW1wdCB0byByZWNvdmVyIGlubGluZTsgaWYgdGhlIHBhcnNlclxuLy8gc3VjY2Vzc2Z1bGx5IHJlY292ZXJzLCBpdCB3b24ndCB0aHJvdyBhbiBleGNlcHRpb24uXG4vL1xuQmFpbEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlY292ZXJJbmxpbmUgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgdGhpcy5yZWNvdmVyKHJlY29nbml6ZXIsIG5ldyBJbnB1dE1pc21hdGNoRXhjZXB0aW9uKHJlY29nbml6ZXIpKTtcbn07XG5cbi8vIE1ha2Ugc3VyZSB3ZSBkb24ndCBhdHRlbXB0IHRvIHJlY292ZXIgZnJvbSBwcm9ibGVtcyBpbiBzdWJydWxlcy4vL1xuQmFpbEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgLy8gcGFzc1xufTtcblxuZXhwb3J0cy5CYWlsRXJyb3JTdHJhdGVneSA9IEJhaWxFcnJvclN0cmF0ZWd5O1xuZXhwb3J0cy5EZWZhdWx0RXJyb3JTdHJhdGVneSA9IERlZmF1bHRFcnJvclN0cmF0ZWd5O1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG4vLyBUaGUgcm9vdCBvZiB0aGUgQU5UTFIgZXhjZXB0aW9uIGhpZXJhcmNoeS4gSW4gZ2VuZXJhbCwgQU5UTFIgdHJhY2tzIGp1c3Rcbi8vICAzIGtpbmRzIG9mIGVycm9yczogcHJlZGljdGlvbiBlcnJvcnMsIGZhaWxlZCBwcmVkaWNhdGUgZXJyb3JzLCBhbmRcbi8vICBtaXNtYXRjaGVkIGlucHV0IGVycm9ycy4gSW4gZWFjaCBjYXNlLCB0aGUgcGFyc2VyIGtub3dzIHdoZXJlIGl0IGlzXG4vLyAgaW4gdGhlIGlucHV0LCB3aGVyZSBpdCBpcyBpbiB0aGUgQVROLCB0aGUgcnVsZSBpbnZvY2F0aW9uIHN0YWNrLFxuLy8gIGFuZCB3aGF0IGtpbmQgb2YgcHJvYmxlbSBvY2N1cnJlZC5cblxudmFyIFByZWRpY2F0ZVRyYW5zaXRpb24gPSByZXF1aXJlKCcuLy4uL2F0bi9UcmFuc2l0aW9uJykuUHJlZGljYXRlVHJhbnNpdGlvbjtcblxuZnVuY3Rpb24gUmVjb2duaXRpb25FeGNlcHRpb24ocGFyYW1zKSB7XG5cdEVycm9yLmNhbGwodGhpcyk7XG5cdGlmICghIUVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlY29nbml0aW9uRXhjZXB0aW9uKTtcblx0fSBlbHNlIHtcblx0XHR2YXIgc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcblx0fVxuXHR0aGlzLm1lc3NhZ2UgPSBwYXJhbXMubWVzc2FnZTtcbiAgICB0aGlzLnJlY29nbml6ZXIgPSBwYXJhbXMucmVjb2duaXplcjtcbiAgICB0aGlzLmlucHV0ID0gcGFyYW1zLmlucHV0O1xuICAgIHRoaXMuY3R4ID0gcGFyYW1zLmN0eDtcbiAgICAvLyBUaGUgY3VycmVudCB7QGxpbmsgVG9rZW59IHdoZW4gYW4gZXJyb3Igb2NjdXJyZWQuIFNpbmNlIG5vdCBhbGwgc3RyZWFtc1xuICAgIC8vIHN1cHBvcnQgYWNjZXNzaW5nIHN5bWJvbHMgYnkgaW5kZXgsIHdlIGhhdmUgdG8gdHJhY2sgdGhlIHtAbGluayBUb2tlbn1cbiAgICAvLyBpbnN0YW5jZSBpdHNlbGYuXG4gICAgdGhpcy5vZmZlbmRpbmdUb2tlbiA9IG51bGw7XG4gICAgLy8gR2V0IHRoZSBBVE4gc3RhdGUgbnVtYmVyIHRoZSBwYXJzZXIgd2FzIGluIGF0IHRoZSB0aW1lIHRoZSBlcnJvclxuICAgIC8vIG9jY3VycmVkLiBGb3Ige0BsaW5rIE5vVmlhYmxlQWx0RXhjZXB0aW9ufSBhbmRcbiAgICAvLyB7QGxpbmsgTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbn0gZXhjZXB0aW9ucywgdGhpcyBpcyB0aGVcbiAgICAvLyB7QGxpbmsgRGVjaXNpb25TdGF0ZX0gbnVtYmVyLiBGb3Igb3RoZXJzLCBpdCBpcyB0aGUgc3RhdGUgd2hvc2Ugb3V0Z29pbmdcbiAgICAvLyBlZGdlIHdlIGNvdWxkbid0IG1hdGNoLlxuICAgIHRoaXMub2ZmZW5kaW5nU3RhdGUgPSAtMTtcbiAgICBpZiAodGhpcy5yZWNvZ25pemVyIT09bnVsbCkge1xuICAgICAgICB0aGlzLm9mZmVuZGluZ1N0YXRlID0gdGhpcy5yZWNvZ25pemVyLnN0YXRlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbn1cblxuUmVjb2duaXRpb25FeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuUmVjb2duaXRpb25FeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmVjb2duaXRpb25FeGNlcHRpb247XG5cbi8vIDxwPklmIHRoZSBzdGF0ZSBudW1iZXIgaXMgbm90IGtub3duLCB0aGlzIG1ldGhvZCByZXR1cm5zIC0xLjwvcD5cblxuLy9cbi8vIEdldHMgdGhlIHNldCBvZiBpbnB1dCBzeW1ib2xzIHdoaWNoIGNvdWxkIHBvdGVudGlhbGx5IGZvbGxvdyB0aGVcbi8vIHByZXZpb3VzbHkgbWF0Y2hlZCBzeW1ib2wgYXQgdGhlIHRpbWUgdGhpcyBleGNlcHRpb24gd2FzIHRocm93bi5cbi8vXG4vLyA8cD5JZiB0aGUgc2V0IG9mIGV4cGVjdGVkIHRva2VucyBpcyBub3Qga25vd24gYW5kIGNvdWxkIG5vdCBiZSBjb21wdXRlZCxcbi8vIHRoaXMgbWV0aG9kIHJldHVybnMge0Bjb2RlIG51bGx9LjwvcD5cbi8vXG4vLyBAcmV0dXJuIFRoZSBzZXQgb2YgdG9rZW4gdHlwZXMgdGhhdCBjb3VsZCBwb3RlbnRpYWxseSBmb2xsb3cgdGhlIGN1cnJlbnRcbi8vIHN0YXRlIGluIHRoZSBBVE4sIG9yIHtAY29kZSBudWxsfSBpZiB0aGUgaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZS5cbi8vIC9cblJlY29nbml0aW9uRXhjZXB0aW9uLnByb3RvdHlwZS5nZXRFeHBlY3RlZFRva2VucyA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLnJlY29nbml6ZXIhPT1udWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlY29nbml6ZXIuYXRuLmdldEV4cGVjdGVkVG9rZW5zKHRoaXMub2ZmZW5kaW5nU3RhdGUsIHRoaXMuY3R4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59O1xuXG5SZWNvZ25pdGlvbkV4Y2VwdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlO1xufTtcblxuZnVuY3Rpb24gTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbihsZXhlciwgaW5wdXQsIHN0YXJ0SW5kZXgsIGRlYWRFbmRDb25maWdzKSB7XG5cdFJlY29nbml0aW9uRXhjZXB0aW9uLmNhbGwodGhpcywge21lc3NhZ2U6XCJcIiwgcmVjb2duaXplcjpsZXhlciwgaW5wdXQ6aW5wdXQsIGN0eDpudWxsfSk7XG4gICAgdGhpcy5zdGFydEluZGV4ID0gc3RhcnRJbmRleDtcbiAgICB0aGlzLmRlYWRFbmRDb25maWdzID0gZGVhZEVuZENvbmZpZ3M7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkxleGVyTm9WaWFibGVBbHRFeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZWNvZ25pdGlvbkV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uO1xuXG5MZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBzeW1ib2wgPSBcIlwiO1xuICAgIGlmICh0aGlzLnN0YXJ0SW5kZXggPj0gMCAmJiB0aGlzLnN0YXJ0SW5kZXggPCB0aGlzLmlucHV0LnNpemUpIHtcbiAgICAgICAgc3ltYm9sID0gdGhpcy5pbnB1dC5nZXRUZXh0KCh0aGlzLnN0YXJ0SW5kZXgsdGhpcy5zdGFydEluZGV4KSk7XG4gICAgfVxuICAgIHJldHVybiBcIkxleGVyTm9WaWFibGVBbHRFeGNlcHRpb25cIiArIHN5bWJvbDtcbn07XG5cbi8vIEluZGljYXRlcyB0aGF0IHRoZSBwYXJzZXIgY291bGQgbm90IGRlY2lkZSB3aGljaCBvZiB0d28gb3IgbW9yZSBwYXRoc1xuLy8gdG8gdGFrZSBiYXNlZCB1cG9uIHRoZSByZW1haW5pbmcgaW5wdXQuIEl0IHRyYWNrcyB0aGUgc3RhcnRpbmcgdG9rZW5cbi8vIG9mIHRoZSBvZmZlbmRpbmcgaW5wdXQgYW5kIGFsc28ga25vd3Mgd2hlcmUgdGhlIHBhcnNlciB3YXNcbi8vIGluIHRoZSB2YXJpb3VzIHBhdGhzIHdoZW4gdGhlIGVycm9yLiBSZXBvcnRlZCBieSByZXBvcnROb1ZpYWJsZUFsdGVybmF0aXZlKClcbi8vXG5mdW5jdGlvbiBOb1ZpYWJsZUFsdEV4Y2VwdGlvbihyZWNvZ25pemVyLCBpbnB1dCwgc3RhcnRUb2tlbiwgb2ZmZW5kaW5nVG9rZW4sIGRlYWRFbmRDb25maWdzLCBjdHgpIHtcblx0Y3R4ID0gY3R4IHx8IHJlY29nbml6ZXIuX2N0eDtcblx0b2ZmZW5kaW5nVG9rZW4gPSBvZmZlbmRpbmdUb2tlbiB8fCByZWNvZ25pemVyLmdldEN1cnJlbnRUb2tlbigpO1xuXHRzdGFydFRva2VuID0gc3RhcnRUb2tlbiB8fCByZWNvZ25pemVyLmdldEN1cnJlbnRUb2tlbigpO1xuXHRpbnB1dCA9IGlucHV0IHx8IHJlY29nbml6ZXIuZ2V0SW5wdXRTdHJlYW0oKTtcblx0UmVjb2duaXRpb25FeGNlcHRpb24uY2FsbCh0aGlzLCB7bWVzc2FnZTpcIlwiLCByZWNvZ25pemVyOnJlY29nbml6ZXIsIGlucHV0OmlucHV0LCBjdHg6Y3R4fSk7XG4gICAgLy8gV2hpY2ggY29uZmlndXJhdGlvbnMgZGlkIHdlIHRyeSBhdCBpbnB1dC5pbmRleCgpIHRoYXQgY291bGRuJ3QgbWF0Y2hcblx0Ly8gaW5wdXQuTFQoMSk/Ly9cbiAgICB0aGlzLmRlYWRFbmRDb25maWdzID0gZGVhZEVuZENvbmZpZ3M7XG4gICAgLy8gVGhlIHRva2VuIG9iamVjdCBhdCB0aGUgc3RhcnQgaW5kZXg7IHRoZSBpbnB1dCBzdHJlYW0gbWlnaHRcbiAgICAvLyBub3QgYmUgYnVmZmVyaW5nIHRva2VucyBzbyBnZXQgYSByZWZlcmVuY2UgdG8gaXQuIChBdCB0aGVcbiAgICAvLyB0aW1lIHRoZSBlcnJvciBvY2N1cnJlZCwgb2YgY291cnNlIHRoZSBzdHJlYW0gbmVlZHMgdG8ga2VlcCBhXG4gICAgLy8gYnVmZmVyIGFsbCBvZiB0aGUgdG9rZW5zIGJ1dCBsYXRlciB3ZSBtaWdodCBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhvc2UuKVxuICAgIHRoaXMuc3RhcnRUb2tlbiA9IHN0YXJ0VG9rZW47XG4gICAgdGhpcy5vZmZlbmRpbmdUb2tlbiA9IG9mZmVuZGluZ1Rva2VuO1xufVxuXG5Ob1ZpYWJsZUFsdEV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlY29nbml0aW9uRXhjZXB0aW9uLnByb3RvdHlwZSk7XG5Ob1ZpYWJsZUFsdEV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBOb1ZpYWJsZUFsdEV4Y2VwdGlvbjtcblxuLy8gVGhpcyBzaWduaWZpZXMgYW55IGtpbmQgb2YgbWlzbWF0Y2hlZCBpbnB1dCBleGNlcHRpb25zIHN1Y2ggYXNcbi8vIHdoZW4gdGhlIGN1cnJlbnQgaW5wdXQgZG9lcyBub3QgbWF0Y2ggdGhlIGV4cGVjdGVkIHRva2VuLlxuLy9cbmZ1bmN0aW9uIElucHV0TWlzbWF0Y2hFeGNlcHRpb24ocmVjb2duaXplcikge1xuXHRSZWNvZ25pdGlvbkV4Y2VwdGlvbi5jYWxsKHRoaXMsIHttZXNzYWdlOlwiXCIsIHJlY29nbml6ZXI6cmVjb2duaXplciwgaW5wdXQ6cmVjb2duaXplci5nZXRJbnB1dFN0cmVhbSgpLCBjdHg6cmVjb2duaXplci5fY3R4fSk7XG4gICAgdGhpcy5vZmZlbmRpbmdUb2tlbiA9IHJlY29nbml6ZXIuZ2V0Q3VycmVudFRva2VuKCk7XG59XG5cbklucHV0TWlzbWF0Y2hFeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZWNvZ25pdGlvbkV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuSW5wdXRNaXNtYXRjaEV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBJbnB1dE1pc21hdGNoRXhjZXB0aW9uO1xuXG4vLyBBIHNlbWFudGljIHByZWRpY2F0ZSBmYWlsZWQgZHVyaW5nIHZhbGlkYXRpb24uIFZhbGlkYXRpb24gb2YgcHJlZGljYXRlc1xuLy8gb2NjdXJzIHdoZW4gbm9ybWFsbHkgcGFyc2luZyB0aGUgYWx0ZXJuYXRpdmUganVzdCBsaWtlIG1hdGNoaW5nIGEgdG9rZW4uXG4vLyBEaXNhbWJpZ3VhdGluZyBwcmVkaWNhdGUgZXZhbHVhdGlvbiBvY2N1cnMgd2hlbiB3ZSB0ZXN0IGEgcHJlZGljYXRlIGR1cmluZ1xuLy8gcHJlZGljdGlvbi5cblxuZnVuY3Rpb24gRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uKHJlY29nbml6ZXIsIHByZWRpY2F0ZSwgbWVzc2FnZSkge1xuXHRSZWNvZ25pdGlvbkV4Y2VwdGlvbi5jYWxsKHRoaXMsIHttZXNzYWdlOnRoaXMuZm9ybWF0TWVzc2FnZShwcmVkaWNhdGUsbWVzc2FnZSB8fCBudWxsKSwgcmVjb2duaXplcjpyZWNvZ25pemVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OnJlY29nbml6ZXIuZ2V0SW5wdXRTdHJlYW0oKSwgY3R4OnJlY29nbml6ZXIuX2N0eH0pO1xuICAgIHZhciBzID0gcmVjb2duaXplci5faW50ZXJwLmF0bi5zdGF0ZXNbcmVjb2duaXplci5zdGF0ZV07XG4gICAgdmFyIHRyYW5zID0gcy50cmFuc2l0aW9uc1swXTtcbiAgICBpZiAodHJhbnMgaW5zdGFuY2VvZiBQcmVkaWNhdGVUcmFuc2l0aW9uKSB7XG4gICAgICAgIHRoaXMucnVsZUluZGV4ID0gdHJhbnMucnVsZUluZGV4O1xuICAgICAgICB0aGlzLnByZWRpY2F0ZUluZGV4ID0gdHJhbnMucHJlZEluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucnVsZUluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5wcmVkaWNhdGVJbmRleCA9IDA7XG4gICAgfVxuICAgIHRoaXMucHJlZGljYXRlID0gcHJlZGljYXRlO1xuICAgIHRoaXMub2ZmZW5kaW5nVG9rZW4gPSByZWNvZ25pemVyLmdldEN1cnJlbnRUb2tlbigpO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5GYWlsZWRQcmVkaWNhdGVFeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZWNvZ25pdGlvbkV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbjtcblxuRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uLnByb3RvdHlwZS5mb3JtYXRNZXNzYWdlID0gZnVuY3Rpb24ocHJlZGljYXRlLCBtZXNzYWdlKSB7XG4gICAgaWYgKG1lc3NhZ2UgIT09bnVsbCkge1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJmYWlsZWQgcHJlZGljYXRlOiB7XCIgKyBwcmVkaWNhdGUgKyBcIn0/XCI7XG4gICAgfVxufTtcblxuZnVuY3Rpb24gUGFyc2VDYW5jZWxsYXRpb25FeGNlcHRpb24oKSB7XG5cdEVycm9yLmNhbGwodGhpcyk7XG5cdEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9uKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cblBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcblBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9uO1xuXG5leHBvcnRzLlJlY29nbml0aW9uRXhjZXB0aW9uID0gUmVjb2duaXRpb25FeGNlcHRpb247XG5leHBvcnRzLk5vVmlhYmxlQWx0RXhjZXB0aW9uID0gTm9WaWFibGVBbHRFeGNlcHRpb247XG5leHBvcnRzLkxleGVyTm9WaWFibGVBbHRFeGNlcHRpb24gPSBMZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uO1xuZXhwb3J0cy5JbnB1dE1pc21hdGNoRXhjZXB0aW9uID0gSW5wdXRNaXNtYXRjaEV4Y2VwdGlvbjtcbmV4cG9ydHMuRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uID0gRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uO1xuZXhwb3J0cy5QYXJzZUNhbmNlbGxhdGlvbkV4Y2VwdGlvbiA9IFBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9uO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG5leHBvcnRzLlJlY29nbml0aW9uRXhjZXB0aW9uID0gcmVxdWlyZSgnLi9FcnJvcnMnKS5SZWNvZ25pdGlvbkV4Y2VwdGlvbjtcbmV4cG9ydHMuTm9WaWFibGVBbHRFeGNlcHRpb24gPSByZXF1aXJlKCcuL0Vycm9ycycpLk5vVmlhYmxlQWx0RXhjZXB0aW9uO1xuZXhwb3J0cy5MZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uID0gcmVxdWlyZSgnLi9FcnJvcnMnKS5MZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uO1xuZXhwb3J0cy5JbnB1dE1pc21hdGNoRXhjZXB0aW9uID0gcmVxdWlyZSgnLi9FcnJvcnMnKS5JbnB1dE1pc21hdGNoRXhjZXB0aW9uO1xuZXhwb3J0cy5GYWlsZWRQcmVkaWNhdGVFeGNlcHRpb24gPSByZXF1aXJlKCcuL0Vycm9ycycpLkZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbjtcbmV4cG9ydHMuRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXIgPSByZXF1aXJlKCcuL0RpYWdub3N0aWNFcnJvckxpc3RlbmVyJykuRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXI7XG5leHBvcnRzLkJhaWxFcnJvclN0cmF0ZWd5ID0gcmVxdWlyZSgnLi9FcnJvclN0cmF0ZWd5JykuQmFpbEVycm9yU3RyYXRlZ3k7XG5leHBvcnRzLkVycm9yTGlzdGVuZXIgPSByZXF1aXJlKCcuL0Vycm9yTGlzdGVuZXInKS5FcnJvckxpc3RlbmVyO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuZXhwb3J0cy5hdG4gPSByZXF1aXJlKCcuL2F0bi9pbmRleCcpO1xuZXhwb3J0cy5jb2RlcG9pbnRhdCA9IHJlcXVpcmUoJy4vcG9seWZpbGxzL2NvZGVwb2ludGF0Jyk7XG5leHBvcnRzLmRmYSA9IHJlcXVpcmUoJy4vZGZhL2luZGV4Jyk7XG5leHBvcnRzLmZyb21jb2RlcG9pbnQgPSByZXF1aXJlKCcuL3BvbHlmaWxscy9mcm9tY29kZXBvaW50Jyk7XG5leHBvcnRzLnRyZWUgPSByZXF1aXJlKCcuL3RyZWUvaW5kZXgnKTtcbmV4cG9ydHMuZXJyb3IgPSByZXF1aXJlKCcuL2Vycm9yL2luZGV4Jyk7XG5leHBvcnRzLlRva2VuID0gcmVxdWlyZSgnLi9Ub2tlbicpLlRva2VuO1xuZXhwb3J0cy5DaGFyU3RyZWFtcyA9IHJlcXVpcmUoJy4vQ2hhclN0cmVhbXMnKS5DaGFyU3RyZWFtcztcbmV4cG9ydHMuQ29tbW9uVG9rZW4gPSByZXF1aXJlKCcuL1Rva2VuJykuQ29tbW9uVG9rZW47XG5leHBvcnRzLklucHV0U3RyZWFtID0gcmVxdWlyZSgnLi9JbnB1dFN0cmVhbScpLklucHV0U3RyZWFtO1xuZXhwb3J0cy5GaWxlU3RyZWFtID0gcmVxdWlyZSgnLi9GaWxlU3RyZWFtJykuRmlsZVN0cmVhbTtcbmV4cG9ydHMuQ29tbW9uVG9rZW5TdHJlYW0gPSByZXF1aXJlKCcuL0NvbW1vblRva2VuU3RyZWFtJykuQ29tbW9uVG9rZW5TdHJlYW07XG5leHBvcnRzLkxleGVyID0gcmVxdWlyZSgnLi9MZXhlcicpLkxleGVyO1xuZXhwb3J0cy5QYXJzZXIgPSByZXF1aXJlKCcuL1BhcnNlcicpLlBhcnNlcjtcbnZhciBwYyA9IHJlcXVpcmUoJy4vUHJlZGljdGlvbkNvbnRleHQnKTtcbmV4cG9ydHMuUHJlZGljdGlvbkNvbnRleHRDYWNoZSA9IHBjLlByZWRpY3Rpb25Db250ZXh0Q2FjaGU7XG5leHBvcnRzLlBhcnNlclJ1bGVDb250ZXh0ID0gcmVxdWlyZSgnLi9QYXJzZXJSdWxlQ29udGV4dCcpLlBhcnNlclJ1bGVDb250ZXh0O1xuZXhwb3J0cy5JbnRlcnZhbCA9IHJlcXVpcmUoJy4vSW50ZXJ2YWxTZXQnKS5JbnRlcnZhbDtcbmV4cG9ydHMuVXRpbHMgPSByZXF1aXJlKCcuL1V0aWxzJyk7XG4iLCIvKiEgaHR0cHM6Ly9tdGhzLmJlL2NvZGVwb2ludGF0IHYwLjIuMCBieSBAbWF0aGlhcyAqL1xuaWYgKCFTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0KSB7XG5cdChmdW5jdGlvbigpIHtcblx0XHQndXNlIHN0cmljdCc7IC8vIG5lZWRlZCB0byBzdXBwb3J0IGBhcHBseWAvYGNhbGxgIHdpdGggYHVuZGVmaW5lZGAvYG51bGxgXG5cdFx0dmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuXHRcdFx0Ly8gSUUgOCBvbmx5IHN1cHBvcnRzIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG9uIERPTSBlbGVtZW50c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dmFyIG9iamVjdCA9IHt9O1xuXHRcdFx0XHR2YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gJGRlZmluZVByb3BlcnR5KG9iamVjdCwgb2JqZWN0LCBvYmplY3QpICYmICRkZWZpbmVQcm9wZXJ0eTtcblx0XHRcdH0gY2F0Y2goZXJyb3IpIHt9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0oKSk7XG5cdFx0dmFyIGNvZGVQb2ludEF0ID0gZnVuY3Rpb24ocG9zaXRpb24pIHtcblx0XHRcdGlmICh0aGlzID09IG51bGwpIHtcblx0XHRcdFx0dGhyb3cgVHlwZUVycm9yKCk7XG5cdFx0XHR9XG5cdFx0XHR2YXIgc3RyaW5nID0gU3RyaW5nKHRoaXMpO1xuXHRcdFx0dmFyIHNpemUgPSBzdHJpbmcubGVuZ3RoO1xuXHRcdFx0Ly8gYFRvSW50ZWdlcmBcblx0XHRcdHZhciBpbmRleCA9IHBvc2l0aW9uID8gTnVtYmVyKHBvc2l0aW9uKSA6IDA7XG5cdFx0XHRpZiAoaW5kZXggIT0gaW5kZXgpIHsgLy8gYmV0dGVyIGBpc05hTmBcblx0XHRcdFx0aW5kZXggPSAwO1xuXHRcdFx0fVxuXHRcdFx0Ly8gQWNjb3VudCBmb3Igb3V0LW9mLWJvdW5kcyBpbmRpY2VzOlxuXHRcdFx0aWYgKGluZGV4IDwgMCB8fCBpbmRleCA+PSBzaXplKSB7XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHQvLyBHZXQgdGhlIGZpcnN0IGNvZGUgdW5pdFxuXHRcdFx0dmFyIGZpcnN0ID0gc3RyaW5nLmNoYXJDb2RlQXQoaW5kZXgpO1xuXHRcdFx0dmFyIHNlY29uZDtcblx0XHRcdGlmICggLy8gY2hlY2sgaWYgaXTigJlzIHRoZSBzdGFydCBvZiBhIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRcdGZpcnN0ID49IDB4RDgwMCAmJiBmaXJzdCA8PSAweERCRkYgJiYgLy8gaGlnaCBzdXJyb2dhdGVcblx0XHRcdFx0c2l6ZSA+IGluZGV4ICsgMSAvLyB0aGVyZSBpcyBhIG5leHQgY29kZSB1bml0XG5cdFx0XHQpIHtcblx0XHRcdFx0c2Vjb25kID0gc3RyaW5nLmNoYXJDb2RlQXQoaW5kZXggKyAxKTtcblx0XHRcdFx0aWYgKHNlY29uZCA+PSAweERDMDAgJiYgc2Vjb25kIDw9IDB4REZGRikgeyAvLyBsb3cgc3Vycm9nYXRlXG5cdFx0XHRcdFx0Ly8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmcjc3Vycm9nYXRlLWZvcm11bGFlXG5cdFx0XHRcdFx0cmV0dXJuIChmaXJzdCAtIDB4RDgwMCkgKiAweDQwMCArIHNlY29uZCAtIDB4REMwMCArIDB4MTAwMDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmaXJzdDtcblx0XHR9O1xuXHRcdGlmIChkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdFx0ZGVmaW5lUHJvcGVydHkoU3RyaW5nLnByb3RvdHlwZSwgJ2NvZGVQb2ludEF0Jywge1xuXHRcdFx0XHQndmFsdWUnOiBjb2RlUG9pbnRBdCxcblx0XHRcdFx0J2NvbmZpZ3VyYWJsZSc6IHRydWUsXG5cdFx0XHRcdCd3cml0YWJsZSc6IHRydWVcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRTdHJpbmcucHJvdG90eXBlLmNvZGVQb2ludEF0ID0gY29kZVBvaW50QXQ7XG5cdFx0fVxuXHR9KCkpO1xufVxuIiwiLyohIGh0dHBzOi8vbXRocy5iZS9mcm9tY29kZXBvaW50IHYwLjIuMSBieSBAbWF0aGlhcyAqL1xuaWYgKCFTdHJpbmcuZnJvbUNvZGVQb2ludCkge1xuXHQoZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGRlZmluZVByb3BlcnR5ID0gKGZ1bmN0aW9uKCkge1xuXHRcdFx0Ly8gSUUgOCBvbmx5IHN1cHBvcnRzIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgIG9uIERPTSBlbGVtZW50c1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dmFyIG9iamVjdCA9IHt9O1xuXHRcdFx0XHR2YXIgJGRlZmluZVByb3BlcnR5ID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gJGRlZmluZVByb3BlcnR5KG9iamVjdCwgb2JqZWN0LCBvYmplY3QpICYmICRkZWZpbmVQcm9wZXJ0eTtcblx0XHRcdH0gY2F0Y2goZXJyb3IpIHt9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH0oKSk7XG5cdFx0dmFyIHN0cmluZ0Zyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG5cdFx0dmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblx0XHR2YXIgZnJvbUNvZGVQb2ludCA9IGZ1bmN0aW9uKF8pIHtcblx0XHRcdHZhciBNQVhfU0laRSA9IDB4NDAwMDtcblx0XHRcdHZhciBjb2RlVW5pdHMgPSBbXTtcblx0XHRcdHZhciBoaWdoU3Vycm9nYXRlO1xuXHRcdFx0dmFyIGxvd1N1cnJvZ2F0ZTtcblx0XHRcdHZhciBpbmRleCA9IC0xO1xuXHRcdFx0dmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG5cdFx0XHRpZiAoIWxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm4gJyc7XG5cdFx0XHR9XG5cdFx0XHR2YXIgcmVzdWx0ID0gJyc7XG5cdFx0XHR3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuXHRcdFx0XHR2YXIgY29kZVBvaW50ID0gTnVtYmVyKGFyZ3VtZW50c1tpbmRleF0pO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0IWlzRmluaXRlKGNvZGVQb2ludCkgfHwgLy8gYE5hTmAsIGArSW5maW5pdHlgLCBvciBgLUluZmluaXR5YFxuXHRcdFx0XHRcdGNvZGVQb2ludCA8IDAgfHwgLy8gbm90IGEgdmFsaWQgVW5pY29kZSBjb2RlIHBvaW50XG5cdFx0XHRcdFx0Y29kZVBvaW50ID4gMHgxMEZGRkYgfHwgLy8gbm90IGEgdmFsaWQgVW5pY29kZSBjb2RlIHBvaW50XG5cdFx0XHRcdFx0Zmxvb3IoY29kZVBvaW50KSAhPSBjb2RlUG9pbnQgLy8gbm90IGFuIGludGVnZXJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dGhyb3cgUmFuZ2VFcnJvcignSW52YWxpZCBjb2RlIHBvaW50OiAnICsgY29kZVBvaW50KTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoY29kZVBvaW50IDw9IDB4RkZGRikgeyAvLyBCTVAgY29kZSBwb2ludFxuXHRcdFx0XHRcdGNvZGVVbml0cy5wdXNoKGNvZGVQb2ludCk7XG5cdFx0XHRcdH0gZWxzZSB7IC8vIEFzdHJhbCBjb2RlIHBvaW50OyBzcGxpdCBpbiBzdXJyb2dhdGUgaGFsdmVzXG5cdFx0XHRcdFx0Ly8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmcjc3Vycm9nYXRlLWZvcm11bGFlXG5cdFx0XHRcdFx0Y29kZVBvaW50IC09IDB4MTAwMDA7XG5cdFx0XHRcdFx0aGlnaFN1cnJvZ2F0ZSA9IChjb2RlUG9pbnQgPj4gMTApICsgMHhEODAwO1xuXHRcdFx0XHRcdGxvd1N1cnJvZ2F0ZSA9IChjb2RlUG9pbnQgJSAweDQwMCkgKyAweERDMDA7XG5cdFx0XHRcdFx0Y29kZVVuaXRzLnB1c2goaGlnaFN1cnJvZ2F0ZSwgbG93U3Vycm9nYXRlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoaW5kZXggKyAxID09IGxlbmd0aCB8fCBjb2RlVW5pdHMubGVuZ3RoID4gTUFYX1NJWkUpIHtcblx0XHRcdFx0XHRyZXN1bHQgKz0gc3RyaW5nRnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsIGNvZGVVbml0cyk7XG5cdFx0XHRcdFx0Y29kZVVuaXRzLmxlbmd0aCA9IDA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fTtcblx0XHRpZiAoZGVmaW5lUHJvcGVydHkpIHtcblx0XHRcdGRlZmluZVByb3BlcnR5KFN0cmluZywgJ2Zyb21Db2RlUG9pbnQnLCB7XG5cdFx0XHRcdCd2YWx1ZSc6IGZyb21Db2RlUG9pbnQsXG5cdFx0XHRcdCdjb25maWd1cmFibGUnOiB0cnVlLFxuXHRcdFx0XHQnd3JpdGFibGUnOiB0cnVlXG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0U3RyaW5nLmZyb21Db2RlUG9pbnQgPSBmcm9tQ29kZVBvaW50O1xuXHRcdH1cblx0fSgpKTtcbn1cbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vL1xuXG4vLyBUaGUgYmFzaWMgbm90aW9uIG9mIGEgdHJlZSBoYXMgYSBwYXJlbnQsIGEgcGF5bG9hZCwgYW5kIGEgbGlzdCBvZiBjaGlsZHJlbi5cbi8vICBJdCBpcyB0aGUgbW9zdCBhYnN0cmFjdCBpbnRlcmZhY2UgZm9yIGFsbCB0aGUgdHJlZXMgdXNlZCBieSBBTlRMUi5cbi8vL1xuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuLy4uL1Rva2VuJykuVG9rZW47XG52YXIgSW50ZXJ2YWwgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG52YXIgSU5WQUxJRF9JTlRFUlZBTCA9IG5ldyBJbnRlcnZhbCgtMSwgLTIpO1xudmFyIFV0aWxzID0gcmVxdWlyZSgnLi4vVXRpbHMuanMnKTtcblxuXG5mdW5jdGlvbiBUcmVlKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gU3ludGF4VHJlZSgpIHtcblx0VHJlZS5jYWxsKHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuU3ludGF4VHJlZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyZWUucHJvdG90eXBlKTtcblN5bnRheFRyZWUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ludGF4VHJlZTtcblxuZnVuY3Rpb24gUGFyc2VUcmVlKCkge1xuXHRTeW50YXhUcmVlLmNhbGwodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5QYXJzZVRyZWUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTeW50YXhUcmVlLnByb3RvdHlwZSk7XG5QYXJzZVRyZWUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFyc2VUcmVlO1xuXG5mdW5jdGlvbiBSdWxlTm9kZSgpIHtcblx0UGFyc2VUcmVlLmNhbGwodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5SdWxlTm9kZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFBhcnNlVHJlZS5wcm90b3R5cGUpO1xuUnVsZU5vZGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUnVsZU5vZGU7XG5cbmZ1bmN0aW9uIFRlcm1pbmFsTm9kZSgpIHtcblx0UGFyc2VUcmVlLmNhbGwodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5UZXJtaW5hbE5vZGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQYXJzZVRyZWUucHJvdG90eXBlKTtcblRlcm1pbmFsTm9kZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXJtaW5hbE5vZGU7XG5cbmZ1bmN0aW9uIEVycm9yTm9kZSgpIHtcblx0VGVybWluYWxOb2RlLmNhbGwodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5FcnJvck5vZGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXJtaW5hbE5vZGUucHJvdG90eXBlKTtcbkVycm9yTm9kZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFcnJvck5vZGU7XG5cbmZ1bmN0aW9uIFBhcnNlVHJlZVZpc2l0b3IoKSB7XG5cdHJldHVybiB0aGlzO1xufVxuXG5QYXJzZVRyZWVWaXNpdG9yLnByb3RvdHlwZS52aXNpdCA9IGZ1bmN0aW9uKGN0eCkge1xuIFx0aWYgKEFycmF5LmlzQXJyYXkoY3R4KSkge1xuXHRcdHJldHVybiBjdHgubWFwKGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hpbGQuYWNjZXB0KHRoaXMpO1xuICAgICAgICB9LCB0aGlzKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gY3R4LmFjY2VwdCh0aGlzKTtcblx0fVxufTtcblxuUGFyc2VUcmVlVmlzaXRvci5wcm90b3R5cGUudmlzaXRDaGlsZHJlbiA9IGZ1bmN0aW9uKGN0eCkge1xuXHRpZiAoY3R4LmNoaWxkcmVuKSB7XG5cdFx0cmV0dXJuIHRoaXMudmlzaXQoY3R4LmNoaWxkcmVuKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxufVxuXG5QYXJzZVRyZWVWaXNpdG9yLnByb3RvdHlwZS52aXNpdFRlcm1pbmFsID0gZnVuY3Rpb24obm9kZSkge1xufTtcblxuUGFyc2VUcmVlVmlzaXRvci5wcm90b3R5cGUudmlzaXRFcnJvck5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG59O1xuXG5cbmZ1bmN0aW9uIFBhcnNlVHJlZUxpc3RlbmVyKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuUGFyc2VUcmVlTGlzdGVuZXIucHJvdG90eXBlLnZpc2l0VGVybWluYWwgPSBmdW5jdGlvbihub2RlKSB7XG59O1xuXG5QYXJzZVRyZWVMaXN0ZW5lci5wcm90b3R5cGUudmlzaXRFcnJvck5vZGUgPSBmdW5jdGlvbihub2RlKSB7XG59O1xuXG5QYXJzZVRyZWVMaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJFdmVyeVJ1bGUgPSBmdW5jdGlvbihub2RlKSB7XG59O1xuXG5QYXJzZVRyZWVMaXN0ZW5lci5wcm90b3R5cGUuZXhpdEV2ZXJ5UnVsZSA9IGZ1bmN0aW9uKG5vZGUpIHtcbn07XG5cbmZ1bmN0aW9uIFRlcm1pbmFsTm9kZUltcGwoc3ltYm9sKSB7XG5cdFRlcm1pbmFsTm9kZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnBhcmVudEN0eCA9IG51bGw7XG5cdHRoaXMuc3ltYm9sID0gc3ltYm9sO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRlcm1pbmFsTm9kZS5wcm90b3R5cGUpO1xuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUZXJtaW5hbE5vZGVJbXBsO1xuXG5UZXJtaW5hbE5vZGVJbXBsLnByb3RvdHlwZS5nZXRDaGlsZCA9IGZ1bmN0aW9uKGkpIHtcblx0cmV0dXJuIG51bGw7XG59O1xuXG5UZXJtaW5hbE5vZGVJbXBsLnByb3RvdHlwZS5nZXRTeW1ib2wgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuc3ltYm9sO1xufTtcblxuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUuZ2V0UGFyZW50ID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnBhcmVudEN0eDtcbn07XG5cblRlcm1pbmFsTm9kZUltcGwucHJvdG90eXBlLmdldFBheWxvYWQgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuc3ltYm9sO1xufTtcblxuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUuZ2V0U291cmNlSW50ZXJ2YWwgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuc3ltYm9sID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIElOVkFMSURfSU5URVJWQUw7XG5cdH1cblx0dmFyIHRva2VuSW5kZXggPSB0aGlzLnN5bWJvbC50b2tlbkluZGV4O1xuXHRyZXR1cm4gbmV3IEludGVydmFsKHRva2VuSW5kZXgsIHRva2VuSW5kZXgpO1xufTtcblxuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUuZ2V0Q2hpbGRDb3VudCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gMDtcbn07XG5cblRlcm1pbmFsTm9kZUltcGwucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKHZpc2l0b3IpIHtcblx0cmV0dXJuIHZpc2l0b3IudmlzaXRUZXJtaW5hbCh0aGlzKTtcbn07XG5cblRlcm1pbmFsTm9kZUltcGwucHJvdG90eXBlLmdldFRleHQgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuc3ltYm9sLnRleHQ7XG59O1xuXG5UZXJtaW5hbE5vZGVJbXBsLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5zeW1ib2wudHlwZSA9PT0gVG9rZW4uRU9GKSB7XG5cdFx0cmV0dXJuIFwiPEVPRj5cIjtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdGhpcy5zeW1ib2wudGV4dDtcblx0fVxufTtcblxuLy8gUmVwcmVzZW50cyBhIHRva2VuIHRoYXQgd2FzIGNvbnN1bWVkIGR1cmluZyByZXN5bmNocm9uaXphdGlvblxuLy8gcmF0aGVyIHRoYW4gZHVyaW5nIGEgdmFsaWQgbWF0Y2ggb3BlcmF0aW9uLiBGb3IgZXhhbXBsZSxcbi8vIHdlIHdpbGwgY3JlYXRlIHRoaXMga2luZCBvZiBhIG5vZGUgZHVyaW5nIHNpbmdsZSB0b2tlbiBpbnNlcnRpb25cbi8vIGFuZCBkZWxldGlvbiBhcyB3ZWxsIGFzIGR1cmluZyBcImNvbnN1bWUgdW50aWwgZXJyb3IgcmVjb3Zlcnkgc2V0XCJcbi8vIHVwb24gbm8gdmlhYmxlIGFsdGVybmF0aXZlIGV4Y2VwdGlvbnMuXG5cbmZ1bmN0aW9uIEVycm9yTm9kZUltcGwodG9rZW4pIHtcblx0VGVybWluYWxOb2RlSW1wbC5jYWxsKHRoaXMsIHRva2VuKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkVycm9yTm9kZUltcGwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXJtaW5hbE5vZGVJbXBsLnByb3RvdHlwZSk7XG5FcnJvck5vZGVJbXBsLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVycm9yTm9kZUltcGw7XG5cbkVycm9yTm9kZUltcGwucHJvdG90eXBlLmlzRXJyb3JOb2RlID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0cnVlO1xufTtcblxuRXJyb3JOb2RlSW1wbC5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24odmlzaXRvcikge1xuXHRyZXR1cm4gdmlzaXRvci52aXNpdEVycm9yTm9kZSh0aGlzKTtcbn07XG5cbmZ1bmN0aW9uIFBhcnNlVHJlZVdhbGtlcigpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cblBhcnNlVHJlZVdhbGtlci5wcm90b3R5cGUud2FsayA9IGZ1bmN0aW9uKGxpc3RlbmVyLCB0KSB7XG5cdHZhciBlcnJvck5vZGUgPSB0IGluc3RhbmNlb2YgRXJyb3JOb2RlIHx8XG5cdFx0XHQodC5pc0Vycm9yTm9kZSAhPT0gdW5kZWZpbmVkICYmIHQuaXNFcnJvck5vZGUoKSk7XG5cdGlmIChlcnJvck5vZGUpIHtcblx0XHRsaXN0ZW5lci52aXNpdEVycm9yTm9kZSh0KTtcblx0fSBlbHNlIGlmICh0IGluc3RhbmNlb2YgVGVybWluYWxOb2RlKSB7XG5cdFx0bGlzdGVuZXIudmlzaXRUZXJtaW5hbCh0KTtcblx0fSBlbHNlIHtcblx0XHR0aGlzLmVudGVyUnVsZShsaXN0ZW5lciwgdCk7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0LmdldENoaWxkQ291bnQoKTsgaSsrKSB7XG5cdFx0XHR2YXIgY2hpbGQgPSB0LmdldENoaWxkKGkpO1xuXHRcdFx0dGhpcy53YWxrKGxpc3RlbmVyLCBjaGlsZCk7XG5cdFx0fVxuXHRcdHRoaXMuZXhpdFJ1bGUobGlzdGVuZXIsIHQpO1xuXHR9XG59O1xuLy9cbi8vIFRoZSBkaXNjb3Zlcnkgb2YgYSBydWxlIG5vZGUsIGludm9sdmVzIHNlbmRpbmcgdHdvIGV2ZW50czogdGhlIGdlbmVyaWNcbi8vIHtAbGluayBQYXJzZVRyZWVMaXN0ZW5lci8vZW50ZXJFdmVyeVJ1bGV9IGFuZCBhXG4vLyB7QGxpbmsgUnVsZUNvbnRleHR9LXNwZWNpZmljIGV2ZW50LiBGaXJzdCB3ZSB0cmlnZ2VyIHRoZSBnZW5lcmljIGFuZCB0aGVuXG4vLyB0aGUgcnVsZSBzcGVjaWZpYy4gV2UgdG8gdGhlbSBpbiByZXZlcnNlIG9yZGVyIHVwb24gZmluaXNoaW5nIHRoZSBub2RlLlxuLy9cblBhcnNlVHJlZVdhbGtlci5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIsIHIpIHtcblx0dmFyIGN0eCA9IHIuZ2V0UnVsZUNvbnRleHQoKTtcblx0bGlzdGVuZXIuZW50ZXJFdmVyeVJ1bGUoY3R4KTtcblx0Y3R4LmVudGVyUnVsZShsaXN0ZW5lcik7XG59O1xuXG5QYXJzZVRyZWVXYWxrZXIucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIsIHIpIHtcblx0dmFyIGN0eCA9IHIuZ2V0UnVsZUNvbnRleHQoKTtcblx0Y3R4LmV4aXRSdWxlKGxpc3RlbmVyKTtcblx0bGlzdGVuZXIuZXhpdEV2ZXJ5UnVsZShjdHgpO1xufTtcblxuUGFyc2VUcmVlV2Fsa2VyLkRFRkFVTFQgPSBuZXcgUGFyc2VUcmVlV2Fsa2VyKCk7XG5cbmV4cG9ydHMuUnVsZU5vZGUgPSBSdWxlTm9kZTtcbmV4cG9ydHMuRXJyb3JOb2RlID0gRXJyb3JOb2RlO1xuZXhwb3J0cy5UZXJtaW5hbE5vZGUgPSBUZXJtaW5hbE5vZGU7XG5leHBvcnRzLkVycm9yTm9kZUltcGwgPSBFcnJvck5vZGVJbXBsO1xuZXhwb3J0cy5UZXJtaW5hbE5vZGVJbXBsID0gVGVybWluYWxOb2RlSW1wbDtcbmV4cG9ydHMuUGFyc2VUcmVlTGlzdGVuZXIgPSBQYXJzZVRyZWVMaXN0ZW5lcjtcbmV4cG9ydHMuUGFyc2VUcmVlVmlzaXRvciA9IFBhcnNlVHJlZVZpc2l0b3I7XG5leHBvcnRzLlBhcnNlVHJlZVdhbGtlciA9IFBhcnNlVHJlZVdhbGtlcjtcbmV4cG9ydHMuSU5WQUxJRF9JTlRFUlZBTCA9IElOVkFMSURfSU5URVJWQUw7XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbnZhciBVdGlscyA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKTtcbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vLi4vVG9rZW4nKS5Ub2tlbjtcbnZhciBSdWxlTm9kZSA9IHJlcXVpcmUoJy4vVHJlZScpLlJ1bGVOb2RlO1xudmFyIEVycm9yTm9kZSA9IHJlcXVpcmUoJy4vVHJlZScpLkVycm9yTm9kZTtcbnZhciBUZXJtaW5hbE5vZGUgPSByZXF1aXJlKCcuL1RyZWUnKS5UZXJtaW5hbE5vZGU7XG52YXIgUGFyc2VyUnVsZUNvbnRleHQgPSByZXF1aXJlKCcuLy4uL1BhcnNlclJ1bGVDb250ZXh0JykuUGFyc2VyUnVsZUNvbnRleHQ7XG52YXIgUnVsZUNvbnRleHQgPSByZXF1aXJlKCcuLy4uL1J1bGVDb250ZXh0JykuUnVsZUNvbnRleHQ7XG52YXIgSU5WQUxJRF9BTFRfTlVNQkVSID0gcmVxdWlyZSgnLi8uLi9hdG4vQVROJykuSU5WQUxJRF9BTFRfTlVNQkVSO1xuXG5cbi8qKiBBIHNldCBvZiB1dGlsaXR5IHJvdXRpbmVzIHVzZWZ1bCBmb3IgYWxsIGtpbmRzIG9mIEFOVExSIHRyZWVzLiAqL1xuZnVuY3Rpb24gVHJlZXMoKSB7XG59XG5cbi8vIFByaW50IG91dCBhIHdob2xlIHRyZWUgaW4gTElTUCBmb3JtLiB7QGxpbmsgLy9nZXROb2RlVGV4dH0gaXMgdXNlZCBvbiB0aGVcbi8vICBub2RlIHBheWxvYWRzIHRvIGdldCB0aGUgdGV4dCBmb3IgdGhlIG5vZGVzLiAgRGV0ZWN0XG4vLyAgcGFyc2UgdHJlZXMgYW5kIGV4dHJhY3QgZGF0YSBhcHByb3ByaWF0ZWx5LlxuVHJlZXMudG9TdHJpbmdUcmVlID0gZnVuY3Rpb24odHJlZSwgcnVsZU5hbWVzLCByZWNvZykge1xuXHRydWxlTmFtZXMgPSBydWxlTmFtZXMgfHwgbnVsbDtcblx0cmVjb2cgPSByZWNvZyB8fCBudWxsO1xuICAgIGlmKHJlY29nIT09bnVsbCkge1xuICAgICAgIHJ1bGVOYW1lcyA9IHJlY29nLnJ1bGVOYW1lcztcbiAgICB9XG4gICAgdmFyIHMgPSBUcmVlcy5nZXROb2RlVGV4dCh0cmVlLCBydWxlTmFtZXMpO1xuICAgIHMgPSBVdGlscy5lc2NhcGVXaGl0ZXNwYWNlKHMsIGZhbHNlKTtcbiAgICB2YXIgYyA9IHRyZWUuZ2V0Q2hpbGRDb3VudCgpO1xuICAgIGlmKGM9PT0wKSB7XG4gICAgICAgIHJldHVybiBzO1xuICAgIH1cbiAgICB2YXIgcmVzID0gXCIoXCIgKyBzICsgJyAnO1xuICAgIGlmKGM+MCkge1xuICAgICAgICBzID0gVHJlZXMudG9TdHJpbmdUcmVlKHRyZWUuZ2V0Q2hpbGQoMCksIHJ1bGVOYW1lcyk7XG4gICAgICAgIHJlcyA9IHJlcy5jb25jYXQocyk7XG4gICAgfVxuICAgIGZvcih2YXIgaT0xO2k8YztpKyspIHtcbiAgICAgICAgcyA9IFRyZWVzLnRvU3RyaW5nVHJlZSh0cmVlLmdldENoaWxkKGkpLCBydWxlTmFtZXMpO1xuICAgICAgICByZXMgPSByZXMuY29uY2F0KCcgJyArIHMpO1xuICAgIH1cbiAgICByZXMgPSByZXMuY29uY2F0KFwiKVwiKTtcbiAgICByZXR1cm4gcmVzO1xufTtcblxuVHJlZXMuZ2V0Tm9kZVRleHQgPSBmdW5jdGlvbih0LCBydWxlTmFtZXMsIHJlY29nKSB7XG5cdHJ1bGVOYW1lcyA9IHJ1bGVOYW1lcyB8fCBudWxsO1xuXHRyZWNvZyA9IHJlY29nIHx8IG51bGw7XG4gICAgaWYocmVjb2chPT1udWxsKSB7XG4gICAgICAgIHJ1bGVOYW1lcyA9IHJlY29nLnJ1bGVOYW1lcztcbiAgICB9XG4gICAgaWYocnVsZU5hbWVzIT09bnVsbCkge1xuICAgICAgIGlmICh0IGluc3RhbmNlb2YgUnVsZUNvbnRleHQpIHtcbiAgICAgICAgICAgdmFyIGFsdE51bWJlciA9IHQuZ2V0QWx0TnVtYmVyKCk7XG4gICAgICAgICAgIGlmICggYWx0TnVtYmVyIT1JTlZBTElEX0FMVF9OVU1CRVIgKSB7XG4gICAgICAgICAgICAgICByZXR1cm4gcnVsZU5hbWVzW3QucnVsZUluZGV4XStcIjpcIithbHROdW1iZXI7XG4gICAgICAgICAgIH1cbiAgICAgICAgICAgcmV0dXJuIHJ1bGVOYW1lc1t0LnJ1bGVJbmRleF07XG4gICAgICAgfSBlbHNlIGlmICggdCBpbnN0YW5jZW9mIEVycm9yTm9kZSkge1xuICAgICAgICAgICByZXR1cm4gdC50b1N0cmluZygpO1xuICAgICAgIH0gZWxzZSBpZih0IGluc3RhbmNlb2YgVGVybWluYWxOb2RlKSB7XG4gICAgICAgICAgIGlmKHQuc3ltYm9sIT09bnVsbCkge1xuICAgICAgICAgICAgICAgcmV0dXJuIHQuc3ltYm9sLnRleHQ7XG4gICAgICAgICAgIH1cbiAgICAgICB9XG4gICAgfVxuICAgIC8vIG5vIHJlY29nIGZvciBydWxlIG5hbWVzXG4gICAgdmFyIHBheWxvYWQgPSB0LmdldFBheWxvYWQoKTtcbiAgICBpZiAocGF5bG9hZCBpbnN0YW5jZW9mIFRva2VuICkge1xuICAgICAgIHJldHVybiBwYXlsb2FkLnRleHQ7XG4gICAgfVxuICAgIHJldHVybiB0LmdldFBheWxvYWQoKS50b1N0cmluZygpO1xufTtcblxuXG4vLyBSZXR1cm4gb3JkZXJlZCBsaXN0IG9mIGFsbCBjaGlsZHJlbiBvZiB0aGlzIG5vZGVcblRyZWVzLmdldENoaWxkcmVuID0gZnVuY3Rpb24odCkge1xuXHR2YXIgbGlzdCA9IFtdO1xuXHRmb3IodmFyIGk9MDtpPHQuZ2V0Q2hpbGRDb3VudCgpO2krKykge1xuXHRcdGxpc3QucHVzaCh0LmdldENoaWxkKGkpKTtcblx0fVxuXHRyZXR1cm4gbGlzdDtcbn07XG5cbi8vIFJldHVybiBhIGxpc3Qgb2YgYWxsIGFuY2VzdG9ycyBvZiB0aGlzIG5vZGUuICBUaGUgZmlyc3Qgbm9kZSBvZlxuLy8gIGxpc3QgaXMgdGhlIHJvb3QgYW5kIHRoZSBsYXN0IGlzIHRoZSBwYXJlbnQgb2YgdGhpcyBub2RlLlxuLy9cblRyZWVzLmdldEFuY2VzdG9ycyA9IGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgYW5jZXN0b3JzID0gW107XG4gICAgdCA9IHQuZ2V0UGFyZW50KCk7XG4gICAgd2hpbGUodCE9PW51bGwpIHtcbiAgICAgICAgYW5jZXN0b3JzID0gW3RdLmNvbmNhdChhbmNlc3RvcnMpO1xuICAgICAgICB0ID0gdC5nZXRQYXJlbnQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGFuY2VzdG9ycztcbn07XG5cblRyZWVzLmZpbmRBbGxUb2tlbk5vZGVzID0gZnVuY3Rpb24odCwgdHR5cGUpIHtcbiAgICByZXR1cm4gVHJlZXMuZmluZEFsbE5vZGVzKHQsIHR0eXBlLCB0cnVlKTtcbn07XG5cblRyZWVzLmZpbmRBbGxSdWxlTm9kZXMgPSBmdW5jdGlvbih0LCBydWxlSW5kZXgpIHtcblx0cmV0dXJuIFRyZWVzLmZpbmRBbGxOb2Rlcyh0LCBydWxlSW5kZXgsIGZhbHNlKTtcbn07XG5cblRyZWVzLmZpbmRBbGxOb2RlcyA9IGZ1bmN0aW9uKHQsIGluZGV4LCBmaW5kVG9rZW5zKSB7XG5cdHZhciBub2RlcyA9IFtdO1xuXHRUcmVlcy5fZmluZEFsbE5vZGVzKHQsIGluZGV4LCBmaW5kVG9rZW5zLCBub2Rlcyk7XG5cdHJldHVybiBub2Rlcztcbn07XG5cblRyZWVzLl9maW5kQWxsTm9kZXMgPSBmdW5jdGlvbih0LCBpbmRleCwgZmluZFRva2Vucywgbm9kZXMpIHtcblx0Ly8gY2hlY2sgdGhpcyBub2RlICh0aGUgcm9vdCkgZmlyc3Rcblx0aWYoZmluZFRva2VucyAmJiAodCBpbnN0YW5jZW9mIFRlcm1pbmFsTm9kZSkpIHtcblx0XHRpZih0LnN5bWJvbC50eXBlPT09aW5kZXgpIHtcblx0XHRcdG5vZGVzLnB1c2godCk7XG5cdFx0fVxuXHR9IGVsc2UgaWYoIWZpbmRUb2tlbnMgJiYgKHQgaW5zdGFuY2VvZiBQYXJzZXJSdWxlQ29udGV4dCkpIHtcblx0XHRpZih0LnJ1bGVJbmRleD09PWluZGV4KSB7XG5cdFx0XHRub2Rlcy5wdXNoKHQpO1xuXHRcdH1cblx0fVxuXHQvLyBjaGVjayBjaGlsZHJlblxuXHRmb3IodmFyIGk9MDtpPHQuZ2V0Q2hpbGRDb3VudCgpO2krKykge1xuXHRcdFRyZWVzLl9maW5kQWxsTm9kZXModC5nZXRDaGlsZChpKSwgaW5kZXgsIGZpbmRUb2tlbnMsIG5vZGVzKTtcblx0fVxufTtcblxuVHJlZXMuZGVzY2VuZGFudHMgPSBmdW5jdGlvbih0KSB7XG5cdHZhciBub2RlcyA9IFt0XTtcbiAgICBmb3IodmFyIGk9MDtpPHQuZ2V0Q2hpbGRDb3VudCgpO2krKykge1xuICAgICAgICBub2RlcyA9IG5vZGVzLmNvbmNhdChUcmVlcy5kZXNjZW5kYW50cyh0LmdldENoaWxkKGkpKSk7XG4gICAgfVxuICAgIHJldHVybiBub2Rlcztcbn07XG5cblxuZXhwb3J0cy5UcmVlcyA9IFRyZWVzOyIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxudmFyIFRyZWUgPSByZXF1aXJlKCcuL1RyZWUnKTtcbmV4cG9ydHMuVHJlZXMgPSByZXF1aXJlKCcuL1RyZWVzJykuVHJlZXM7XG5leHBvcnRzLlJ1bGVOb2RlID0gVHJlZS5SdWxlTm9kZTtcbmV4cG9ydHMuUGFyc2VUcmVlTGlzdGVuZXIgPSBUcmVlLlBhcnNlVHJlZUxpc3RlbmVyO1xuZXhwb3J0cy5QYXJzZVRyZWVWaXNpdG9yID0gVHJlZS5QYXJzZVRyZWVWaXNpdG9yO1xuZXhwb3J0cy5QYXJzZVRyZWVXYWxrZXIgPSBUcmVlLlBhcnNlVHJlZVdhbGtlcjtcbiIsIiIsIi8qKlxuICogQGxpY2Vuc2UgQ29tcGxleC5qcyB2Mi4wLjExIDExLzAyLzIwMTZcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYsIFJvYmVydCBFaXNlbGUgKHJvYmVydEB4YXJnLm9yZylcbiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLlxuICoqL1xuXG4vKipcbiAqXG4gKiBUaGlzIGNsYXNzIGFsbG93cyB0aGUgbWFuaXB1bGF0aW9uIG9mIGNvbXBsZXggbnVtYmVycy5cbiAqIFlvdSBjYW4gcGFzcyBhIGNvbXBsZXggbnVtYmVyIGluIGRpZmZlcmVudCBmb3JtYXRzLiBFaXRoZXIgYXMgb2JqZWN0LCBkb3VibGUsIHN0cmluZyBvciB0d28gaW50ZWdlciBwYXJhbWV0ZXJzLlxuICpcbiAqIE9iamVjdCBmb3JtXG4gKiB7IHJlOiA8cmVhbD4sIGltOiA8aW1hZ2luYXJ5PiB9XG4gKiB7IGFyZzogPGFuZ2xlPiwgYWJzOiA8cmFkaXVzPiB9XG4gKiB7IHBoaTogPGFuZ2xlPiwgcjogPHJhZGl1cz4gfVxuICpcbiAqIEFycmF5IC8gVmVjdG9yIGZvcm1cbiAqIFsgcmVhbCwgaW1hZ2luYXJ5IF1cbiAqXG4gKiBEb3VibGUgZm9ybVxuICogOTkuMyAtIFNpbmdsZSBkb3VibGUgdmFsdWVcbiAqXG4gKiBTdHJpbmcgZm9ybVxuICogJzIzLjEzMzcnIC0gU2ltcGxlIHJlYWwgbnVtYmVyXG4gKiAnMTUrM2knIC0gYSBzaW1wbGUgY29tcGxleCBudW1iZXJcbiAqICczLWknIC0gYSBzaW1wbGUgY29tcGxleCBudW1iZXJcbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIHZhciBjID0gbmV3IENvbXBsZXgoJzk5LjMrOGknKTtcbiAqIGMubXVsKHtyOiAzLCBpOiA5fSkuZGl2KDQuOSkuc3ViKDMsIDIpO1xuICpcbiAqL1xuXG4oZnVuY3Rpb24ocm9vdCkge1xuXG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgY29zaCA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gKE1hdGguZXhwKHgpICsgTWF0aC5leHAoLXgpKSAqIDAuNTtcbiAgfTtcblxuICB2YXIgc2luaCA9IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4gKE1hdGguZXhwKHgpIC0gTWF0aC5leHAoLXgpKSAqIDAuNTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBjb3MoeCkgLSAxIHVzaW5nIFRheWxvciBzZXJpZXMgaWYgeCBpcyBzbWFsbC5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHJldHVybnMge251bWJlcn0gY29zKHgpIC0gMVxuICAgKi9cblxuICB2YXIgY29zbTEgPSBmdW5jdGlvbih4KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5QSS80O1xuICAgIGlmICh4IDwgLWxpbWl0IHx8IHggPiBsaW1pdCkge1xuICAgICAgcmV0dXJuIChNYXRoLmNvcyh4KSAtIDEuMCk7XG4gICAgfVxuXG4gICAgdmFyIHh4ID0geCAqIHg7XG4gICAgcmV0dXJuIHh4ICpcbiAgICAgICgtMC41ICsgeHggKlxuICAgICAgICAoMS8yNCArIHh4ICpcbiAgICAgICAgICAoLTEvNzIwICsgeHggKlxuICAgICAgICAgICAgKDEvNDAzMjAgKyB4eCAqXG4gICAgICAgICAgICAgICgtMS8zNjI4ODAwICsgeHggKlxuICAgICAgICAgICAgICAgICgxLzQ3OTAwMTQ2MDAgKyB4eCAqXG4gICAgICAgICAgICAgICAgICAoLTEvODcxNzgyOTEyMDAgKyB4eCAqXG4gICAgICAgICAgICAgICAgICAgICgxLzIwOTIyNzg5ODg4MDAwKVxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKVxuICB9O1xuXG4gIHZhciBoeXBvdCA9IGZ1bmN0aW9uKHgsIHkpIHtcblxuICAgIHZhciBhID0gTWF0aC5hYnMoeCk7XG4gICAgdmFyIGIgPSBNYXRoLmFicyh5KTtcblxuICAgIGlmIChhIDwgMzAwMCAmJiBiIDwgMzAwMCkge1xuICAgICAgcmV0dXJuIE1hdGguc3FydChhICogYSArIGIgKiBiKTtcbiAgICB9XG5cbiAgICBpZiAoYSA8IGIpIHtcbiAgICAgIGEgPSBiO1xuICAgICAgYiA9IHggLyB5O1xuICAgIH0gZWxzZSB7XG4gICAgICBiID0geSAvIHg7XG4gICAgfVxuICAgIHJldHVybiBhICogTWF0aC5zcXJ0KDEgKyBiICogYik7XG4gIH07XG5cbiAgdmFyIHBhcnNlcl9leGl0ID0gZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgU3ludGF4RXJyb3IoJ0ludmFsaWQgUGFyYW0nKTtcbiAgfTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyBsb2coc3FydChhXjIrYl4yKSkgaW4gYSB3YXkgdG8gYXZvaWQgb3ZlcmZsb3dzXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBiXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBmdW5jdGlvbiBsb2dIeXBvdChhLCBiKSB7XG5cbiAgICB2YXIgX2EgPSBNYXRoLmFicyhhKTtcbiAgICB2YXIgX2IgPSBNYXRoLmFicyhiKTtcblxuICAgIGlmIChhID09PSAwKSB7XG4gICAgICByZXR1cm4gTWF0aC5sb2coX2IpO1xuICAgIH1cblxuICAgIGlmIChiID09PSAwKSB7XG4gICAgICByZXR1cm4gTWF0aC5sb2coX2EpO1xuICAgIH1cblxuICAgIGlmIChfYSA8IDMwMDAgJiYgX2IgPCAzMDAwKSB7XG4gICAgICByZXR1cm4gTWF0aC5sb2coYSAqIGEgKyBiICogYikgKiAwLjU7XG4gICAgfVxuXG4gICAgLyogSSBnb3QgNCBpZGVhcyB0byBjb21wdXRlIHRoaXMgcHJvcGVydHkgd2l0aG91dCBvdmVyZmxvdzpcbiAgICAgKlxuICAgICAqIFRlc3RpbmcgMTAwMDAwMCB0aW1lcyB3aXRoIHJhbmRvbSBzYW1wbGVzIGZvciBhLGIg4oiIIFsxLCAxMDAwMDAwMDAwXSBhZ2FpbnN0IGEgYmlnIGRlY2ltYWwgbGlicmFyeSB0byBnZXQgYW4gZXJyb3IgZXN0aW1hdGVcbiAgICAgKlxuICAgICAqIDEuIE9ubHkgZWxpbWluYXRlIHRoZSBzcXVhcmUgcm9vdDogKE9WRVJBTEwgRVJST1I6IDMuOTEyMjQ4MzAzMDk1MTExNmUtMTEpXG5cbiAgICAgTWF0aC5sb2coYSAqIGEgKyBiICogYikgLyAyXG5cbiAgICAgKlxuICAgICAqXG4gICAgICogMi4gVHJ5IHRvIHVzZSB0aGUgbm9uLW92ZXJmbG93aW5nIHB5dGhhZ29yYXM6IChPVkVSQUxMIEVSUk9SOiA4Ljg4OTc2MDAzOTIxMDE1OWUtMTApXG5cbiAgICAgdmFyIGZuID0gZnVuY3Rpb24oYSwgYikge1xuICAgICBhID0gTWF0aC5hYnMoYSk7XG4gICAgIGIgPSBNYXRoLmFicyhiKTtcbiAgICAgdmFyIHQgPSBNYXRoLm1pbihhLCBiKTtcbiAgICAgYSA9IE1hdGgubWF4KGEsIGIpO1xuICAgICB0ID0gdCAvIGE7XG5cbiAgICAgcmV0dXJuIE1hdGgubG9nKGEpICsgTWF0aC5sb2coMSArIHQgKiB0KSAvIDI7XG4gICAgIH07XG5cbiAgICAgKiAzLiBBYnVzZSB0aGUgaWRlbnRpdHkgY29zKGF0YW4oeS94KSA9IHggLyBzcXJ0KHheMit5XjIpOiAoT1ZFUkFMTCBFUlJPUjogMy40NzgwMTc4NzM3MDM3MjA0ZS0xMClcblxuICAgICBNYXRoLmxvZyhhIC8gTWF0aC5jb3MoTWF0aC5hdGFuMihiLCBhKSkpXG5cbiAgICAgKiA0LiBVc2UgMy4gYW5kIGFwcGx5IGxvZyBydWxlczogKE9WRVJBTEwgRVJST1I6IDEuMjAxNDA4NzUwMjYyMDg5NmUtOSlcblxuICAgICBNYXRoLmxvZyhhKSAtIE1hdGgubG9nKE1hdGguY29zKE1hdGguYXRhbjIoYiwgYSkpKVxuXG4gICAgICovXG5cbiAgICByZXR1cm4gTWF0aC5sb2coYSAvIE1hdGguY29zKE1hdGguYXRhbjIoYiwgYSkpKTtcbiAgfVxuXG4gIHZhciBwYXJzZSA9IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgIHZhciB6ID0geydyZSc6IDAsICdpbSc6IDB9O1xuXG4gICAgaWYgKGEgPT09IHVuZGVmaW5lZCB8fCBhID09PSBudWxsKSB7XG4gICAgICB6WydyZSddID1cbiAgICAgICAgICAgICAgelsnaW0nXSA9IDA7XG4gICAgfSBlbHNlIGlmIChiICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHpbJ3JlJ10gPSBhO1xuICAgICAgelsnaW0nXSA9IGI7XG4gICAgfSBlbHNlXG4gICAgICBzd2l0Y2ggKHR5cGVvZiBhKSB7XG5cbiAgICAgICAgY2FzZSAnb2JqZWN0JzpcblxuICAgICAgICAgIGlmICgnaW0nIGluIGEgJiYgJ3JlJyBpbiBhKSB7XG4gICAgICAgICAgICB6WydyZSddID0gYVsncmUnXTtcbiAgICAgICAgICAgIHpbJ2ltJ10gPSBhWydpbSddO1xuICAgICAgICAgIH0gZWxzZSBpZiAoJ2FicycgaW4gYSAmJiAnYXJnJyBpbiBhKSB7XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShhWydhYnMnXSkgJiYgTnVtYmVyLmlzRmluaXRlKGFbJ2FyZyddKSkge1xuICAgICAgICAgICAgICByZXR1cm4gQ29tcGxleFsnSU5GSU5JVFknXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHpbJ3JlJ10gPSBhWydhYnMnXSAqIE1hdGguY29zKGFbJ2FyZyddKTtcbiAgICAgICAgICAgIHpbJ2ltJ10gPSBhWydhYnMnXSAqIE1hdGguc2luKGFbJ2FyZyddKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCdyJyBpbiBhICYmICdwaGknIGluIGEpIHtcbiAgICAgICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKGFbJ3InXSkgJiYgTnVtYmVyLmlzRmluaXRlKGFbJ3BoaSddKSkge1xuICAgICAgICAgICAgICByZXR1cm4gQ29tcGxleFsnSU5GSU5JVFknXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHpbJ3JlJ10gPSBhWydyJ10gKiBNYXRoLmNvcyhhWydwaGknXSk7XG4gICAgICAgICAgICB6WydpbSddID0gYVsnciddICogTWF0aC5zaW4oYVsncGhpJ10pO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYS5sZW5ndGggPT09IDIpIHsgLy8gUXVpY2sgYXJyYXkgY2hlY2tcbiAgICAgICAgICAgIHpbJ3JlJ10gPSBhWzBdO1xuICAgICAgICAgICAgelsnaW0nXSA9IGFbMV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHBhcnNlcl9leGl0KCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3N0cmluZyc6XG5cbiAgICAgICAgICB6WydpbSddID0gLyogdm9pZCAqL1xuICAgICAgICAgICAgICAgICAgelsncmUnXSA9IDA7XG5cbiAgICAgICAgICB2YXIgdG9rZW5zID0gYS5tYXRjaCgvXFxkK1xcLj9cXGQqZVsrLV0/XFxkK3xcXGQrXFwuP1xcZCp8XFwuXFxkK3wuL2cpO1xuICAgICAgICAgIHZhciBwbHVzID0gMTtcbiAgICAgICAgICB2YXIgbWludXMgPSAwO1xuXG4gICAgICAgICAgaWYgKHRva2VucyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcGFyc2VyX2V4aXQoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuXG4gICAgICAgICAgICB2YXIgYyA9IHRva2Vuc1tpXTtcblxuICAgICAgICAgICAgaWYgKGMgPT09ICcgJyB8fCBjID09PSAnXFx0JyB8fCBjID09PSAnXFxuJykge1xuICAgICAgICAgICAgICAvKiB2b2lkICovXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICcrJykge1xuICAgICAgICAgICAgICBwbHVzKys7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT09ICctJykge1xuICAgICAgICAgICAgICBtaW51cysrO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnaScgfHwgYyA9PT0gJ0knKSB7XG5cbiAgICAgICAgICAgICAgaWYgKHBsdXMgKyBtaW51cyA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHBhcnNlcl9leGl0KCk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodG9rZW5zW2kgKyAxXSAhPT0gJyAnICYmICFpc05hTih0b2tlbnNbaSArIDFdKSkge1xuICAgICAgICAgICAgICAgIHpbJ2ltJ10gKz0gcGFyc2VGbG9hdCgobWludXMgJSAyID8gJy0nIDogJycpICsgdG9rZW5zW2kgKyAxXSk7XG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHpbJ2ltJ10gKz0gcGFyc2VGbG9hdCgobWludXMgJSAyID8gJy0nIDogJycpICsgJzEnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwbHVzID0gbWludXMgPSAwO1xuXG4gICAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICAgIGlmIChwbHVzICsgbWludXMgPT09IDAgfHwgaXNOYU4oYykpIHtcbiAgICAgICAgICAgICAgICBwYXJzZXJfZXhpdCgpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRva2Vuc1tpICsgMV0gPT09ICdpJyB8fCB0b2tlbnNbaSArIDFdID09PSAnSScpIHtcbiAgICAgICAgICAgICAgICB6WydpbSddICs9IHBhcnNlRmxvYXQoKG1pbnVzICUgMiA/ICctJyA6ICcnKSArIGMpO1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB6WydyZSddICs9IHBhcnNlRmxvYXQoKG1pbnVzICUgMiA/ICctJyA6ICcnKSArIGMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBsdXMgPSBtaW51cyA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU3RpbGwgc29tZXRoaW5nIG9uIHRoZSBzdGFja1xuICAgICAgICAgIGlmIChwbHVzICsgbWludXMgPiAwKSB7XG4gICAgICAgICAgICBwYXJzZXJfZXhpdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgIHpbJ2ltJ10gPSAwO1xuICAgICAgICAgIHpbJ3JlJ10gPSBhO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcGFyc2VyX2V4aXQoKTtcbiAgICAgIH1cblxuICAgIGlmIChpc05hTih6WydyZSddKSB8fCBpc05hTih6WydpbSddKSkge1xuICAgICAgLy8gSWYgYSBjYWxjdWxhdGlvbiBpcyBOYU4sIHdlIHRyZWF0IGl0IGFzIE5hTiBhbmQgZG9uJ3QgdGhyb3dcbiAgICAgIC8vcGFyc2VyX2V4aXQoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gejtcbiAgfTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yXG4gICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgKi9cbiAgZnVuY3Rpb24gQ29tcGxleChhLCBiKSB7XG5cbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ29tcGxleCkpIHtcbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChhLCBiKTtcbiAgICB9XG5cbiAgICB2YXIgeiA9IHBhcnNlKGEsIGIpO1xuXG4gICAgdGhpc1sncmUnXSA9IHpbJ3JlJ107XG4gICAgdGhpc1snaW0nXSA9IHpbJ2ltJ107XG4gIH1cblxuICBDb21wbGV4LnByb3RvdHlwZSA9IHtcblxuICAgICdyZSc6IDAsXG4gICAgJ2ltJzogMCxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIHNpZ24gb2YgYSBjb21wbGV4IG51bWJlciwgd2hpY2ggaXMgYSBub3JtYWxpemVkIGNvbXBsZXhcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdzaWduJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHZhciBhYnMgPSB0aGlzWydhYnMnXSgpO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIHRoaXNbJ3JlJ10gLyBhYnMsXG4gICAgICAgICAgICAgIHRoaXNbJ2ltJ10gLyBhYnMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHR3byBjb21wbGV4IG51bWJlcnNcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdhZGQnOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHZhciB6ID0gbmV3IENvbXBsZXgoYSwgYik7XG5cbiAgICAgIC8vIEluZmluaXR5ICsgSW5maW5pdHkgPSBOYU5cbiAgICAgIGlmICh0aGlzWydpc0luZmluaXRlJ10oKSAmJiB6Wydpc0luZmluaXRlJ10oKSkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnTkFOJ107XG4gICAgICB9XG5cbiAgICAgIC8vIEluZmluaXR5ICsgeiA9IEluZmluaXR5IHsgd2hlcmUgeiAhPSBJbmZpbml0eSB9XG4gICAgICBpZiAodGhpc1snaXNJbmZpbml0ZSddKCkgfHwgelsnaXNJbmZpbml0ZSddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ0lORklOSVRZJ107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgdGhpc1sncmUnXSArIHpbJ3JlJ10sXG4gICAgICAgICAgICAgIHRoaXNbJ2ltJ10gKyB6WydpbSddKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU3VidHJhY3RzIHR3byBjb21wbGV4IG51bWJlcnNcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdzdWInOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHZhciB6ID0gbmV3IENvbXBsZXgoYSwgYik7XG5cbiAgICAgIC8vIEluZmluaXR5IC0gSW5maW5pdHkgPSBOYU5cbiAgICAgIGlmICh0aGlzWydpc0luZmluaXRlJ10oKSAmJiB6Wydpc0luZmluaXRlJ10oKSkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnTkFOJ107XG4gICAgICB9XG5cbiAgICAgIC8vIEluZmluaXR5IC0geiA9IEluZmluaXR5IHsgd2hlcmUgeiAhPSBJbmZpbml0eSB9XG4gICAgICBpZiAodGhpc1snaXNJbmZpbml0ZSddKCkgfHwgelsnaXNJbmZpbml0ZSddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ0lORklOSVRZJ107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgdGhpc1sncmUnXSAtIHpbJ3JlJ10sXG4gICAgICAgICAgICAgIHRoaXNbJ2ltJ10gLSB6WydpbSddKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTXVsdGlwbGllcyB0d28gY29tcGxleCBudW1iZXJzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnbXVsJzogZnVuY3Rpb24oYSwgYikge1xuXG4gICAgICB2YXIgeiA9IG5ldyBDb21wbGV4KGEsIGIpO1xuXG4gICAgICAvLyBJbmZpbml0eSAqIDAgPSBOYU5cbiAgICAgIGlmICgodGhpc1snaXNJbmZpbml0ZSddKCkgJiYgelsnaXNaZXJvJ10oKSkgfHwgKHRoaXNbJ2lzWmVybyddKCkgJiYgelsnaXNJbmZpbml0ZSddKCkpKSB7XG4gICAgICAgIHJldHVybiBDb21wbGV4WydOQU4nXTtcbiAgICAgIH1cblxuICAgICAgLy8gSW5maW5pdHkgKiB6ID0gSW5maW5pdHkgeyB3aGVyZSB6ICE9IDAgfVxuICAgICAgaWYgKHRoaXNbJ2lzSW5maW5pdGUnXSgpIHx8IHpbJ2lzSW5maW5pdGUnXSgpKSB7XG4gICAgICAgIHJldHVybiBDb21wbGV4WydJTkZJTklUWSddO1xuICAgICAgfVxuXG4gICAgICAvLyBTaG9ydCBjaXJjdWl0IGZvciByZWFsIHZhbHVlc1xuICAgICAgaWYgKHpbJ2ltJ10gPT09IDAgJiYgdGhpc1snaW0nXSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgodGhpc1sncmUnXSAqIHpbJ3JlJ10sIDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIHRoaXNbJ3JlJ10gKiB6WydyZSddIC0gdGhpc1snaW0nXSAqIHpbJ2ltJ10sXG4gICAgICAgICAgICAgIHRoaXNbJ3JlJ10gKiB6WydpbSddICsgdGhpc1snaW0nXSAqIHpbJ3JlJ10pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEaXZpZGVzIHR3byBjb21wbGV4IG51bWJlcnNcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdkaXYnOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHZhciB6ID0gbmV3IENvbXBsZXgoYSwgYik7XG5cbiAgICAgIC8vIDAgLyAwID0gTmFOIGFuZCBJbmZpbml0eSAvIEluZmluaXR5ID0gTmFOXG4gICAgICBpZiAoKHRoaXNbJ2lzWmVybyddKCkgJiYgelsnaXNaZXJvJ10oKSkgfHwgKHRoaXNbJ2lzSW5maW5pdGUnXSgpICYmIHpbJ2lzSW5maW5pdGUnXSgpKSkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnTkFOJ107XG4gICAgICB9XG5cbiAgICAgIC8vIEluZmluaXR5IC8gMCA9IEluZmluaXR5XG4gICAgICBpZiAodGhpc1snaXNJbmZpbml0ZSddKCkgfHwgelsnaXNaZXJvJ10oKSkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnSU5GSU5JVFknXTtcbiAgICAgIH1cblxuICAgICAgLy8gMCAvIEluZmluaXR5ID0gMFxuICAgICAgaWYgKHRoaXNbJ2lzWmVybyddKCkgfHwgelsnaXNJbmZpbml0ZSddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ1pFUk8nXTtcbiAgICAgIH1cblxuICAgICAgYSA9IHRoaXNbJ3JlJ107XG4gICAgICBiID0gdGhpc1snaW0nXTtcblxuICAgICAgdmFyIGMgPSB6WydyZSddO1xuICAgICAgdmFyIGQgPSB6WydpbSddO1xuICAgICAgdmFyIHQsIHg7XG5cbiAgICAgIGlmICgwID09PSBkKSB7XG4gICAgICAgIC8vIERpdmlzb3IgaXMgcmVhbFxuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoYSAvIGMsIGIgLyBjKTtcbiAgICAgIH1cblxuICAgICAgaWYgKE1hdGguYWJzKGMpIDwgTWF0aC5hYnMoZCkpIHtcblxuICAgICAgICB4ID0gYyAvIGQ7XG4gICAgICAgIHQgPSBjICogeCArIGQ7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAgIChhICogeCArIGIpIC8gdCxcbiAgICAgICAgICAgICAgICAoYiAqIHggLSBhKSAvIHQpO1xuXG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIHggPSBkIC8gYztcbiAgICAgICAgdCA9IGQgKiB4ICsgYztcblxuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgKGEgKyBiICogeCkgLyB0LFxuICAgICAgICAgICAgICAgIChiIC0gYSAqIHgpIC8gdCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgcG93ZXIgb2YgdHdvIGNvbXBsZXggbnVtYmVyc1xuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ3Bvdyc6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgdmFyIHogPSBuZXcgQ29tcGxleChhLCBiKTtcblxuICAgICAgYSA9IHRoaXNbJ3JlJ107XG4gICAgICBiID0gdGhpc1snaW0nXTtcblxuICAgICAgaWYgKHpbJ2lzWmVybyddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ09ORSddO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgZXhwb25lbnQgaXMgcmVhbFxuICAgICAgaWYgKHpbJ2ltJ10gPT09IDApIHtcblxuICAgICAgICBpZiAoYiA9PT0gMCAmJiBhID49IDApIHtcblxuICAgICAgICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLnBvdyhhLCB6WydyZSddKSwgMCk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChhID09PSAwKSB7IC8vIElmIGJhc2UgaXMgZnVsbHkgaW1hZ2luYXJ5XG5cbiAgICAgICAgICBzd2l0Y2ggKCh6WydyZSddICUgNCArIDQpICUgNCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoTWF0aC5wb3coYiwgelsncmUnXSksIDApO1xuICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoMCwgTWF0aC5wb3coYiwgelsncmUnXSkpO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoLU1hdGgucG93KGIsIHpbJ3JlJ10pLCAwKTtcbiAgICAgICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KDAsIC1NYXRoLnBvdyhiLCB6WydyZSddKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qIEkgY291bGRuJ3QgZmluZCBhIGdvb2QgZm9ybXVsYSwgc28gaGVyZSBpcyBhIGRlcml2YXRpb24gYW5kIG9wdGltaXphdGlvblxuICAgICAgICpcbiAgICAgICAqIHpfMV56XzIgPSAoYSArIGJpKV4oYyArIGRpKVxuICAgICAgICogICAgICAgICA9IGV4cCgoYyArIGRpKSAqIGxvZyhhICsgYmkpXG4gICAgICAgKiAgICAgICAgID0gcG93KGFeMiArIGJeMiwgKGMgKyBkaSkgLyAyKSAqIGV4cChpKGMgKyBkaSlhdGFuMihiLCBhKSlcbiAgICAgICAqID0+Li4uXG4gICAgICAgKiBSZSA9IChwb3coYV4yICsgYl4yLCBjIC8gMikgKiBleHAoLWQgKiBhdGFuMihiLCBhKSkpICogY29zKGQgKiBsb2coYV4yICsgYl4yKSAvIDIgKyBjICogYXRhbjIoYiwgYSkpXG4gICAgICAgKiBJbSA9IChwb3coYV4yICsgYl4yLCBjIC8gMikgKiBleHAoLWQgKiBhdGFuMihiLCBhKSkpICogc2luKGQgKiBsb2coYV4yICsgYl4yKSAvIDIgKyBjICogYXRhbjIoYiwgYSkpXG4gICAgICAgKlxuICAgICAgICogPT4uLi5cbiAgICAgICAqIFJlID0gZXhwKGMgKiBsb2coc3FydChhXjIgKyBiXjIpKSAtIGQgKiBhdGFuMihiLCBhKSkgKiBjb3MoZCAqIGxvZyhzcXJ0KGFeMiArIGJeMikpICsgYyAqIGF0YW4yKGIsIGEpKVxuICAgICAgICogSW0gPSBleHAoYyAqIGxvZyhzcXJ0KGFeMiArIGJeMikpIC0gZCAqIGF0YW4yKGIsIGEpKSAqIHNpbihkICogbG9nKHNxcnQoYV4yICsgYl4yKSkgKyBjICogYXRhbjIoYiwgYSkpXG4gICAgICAgKlxuICAgICAgICogPT5cbiAgICAgICAqIFJlID0gZXhwKGMgKiBsb2dzcTIgLSBkICogYXJnKHpfMSkpICogY29zKGQgKiBsb2dzcTIgKyBjICogYXJnKHpfMSkpXG4gICAgICAgKiBJbSA9IGV4cChjICogbG9nc3EyIC0gZCAqIGFyZyh6XzEpKSAqIHNpbihkICogbG9nc3EyICsgYyAqIGFyZyh6XzEpKVxuICAgICAgICpcbiAgICAgICAqL1xuXG4gICAgICBpZiAoYSA9PT0gMCAmJiBiID09PSAwICYmIHpbJ3JlJ10gPiAwICYmIHpbJ2ltJ10gPj0gMCkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnWkVSTyddO1xuICAgICAgfVxuXG4gICAgICB2YXIgYXJnID0gTWF0aC5hdGFuMihiLCBhKTtcbiAgICAgIHZhciBsb2ggPSBsb2dIeXBvdChhLCBiKTtcblxuICAgICAgYSA9IE1hdGguZXhwKHpbJ3JlJ10gKiBsb2ggLSB6WydpbSddICogYXJnKTtcbiAgICAgIGIgPSB6WydpbSddICogbG9oICsgelsncmUnXSAqIGFyZztcbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgYSAqIE1hdGguY29zKGIpLFxuICAgICAgICAgICAgICBhICogTWF0aC5zaW4oYikpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggc3F1YXJlIHJvb3RcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdzcXJ0JzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcbiAgICAgIHZhciByID0gdGhpc1snYWJzJ10oKTtcblxuICAgICAgdmFyIHJlLCBpbTtcblxuICAgICAgaWYgKGEgPj0gMCkge1xuXG4gICAgICAgIGlmIChiID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KE1hdGguc3FydChhKSwgMCk7XG4gICAgICAgIH1cblxuICAgICAgICByZSA9IDAuNSAqIE1hdGguc3FydCgyLjAgKiAociArIGEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlID0gTWF0aC5hYnMoYikgLyBNYXRoLnNxcnQoMiAqIChyIC0gYSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYSA8PSAwKSB7XG4gICAgICAgIGltID0gMC41ICogTWF0aC5zcXJ0KDIuMCAqIChyIC0gYSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW0gPSBNYXRoLmFicyhiKSAvIE1hdGguc3FydCgyICogKHIgKyBhKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChyZSwgYiA8IDAgPyAtaW0gOiBpbSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBleHBvbmVudFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2V4cCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICB2YXIgdG1wID0gTWF0aC5leHAodGhpc1sncmUnXSk7XG5cbiAgICAgIGlmICh0aGlzWydpbSddID09PSAwKSB7XG4gICAgICAgIC8vcmV0dXJuIG5ldyBDb21wbGV4KHRtcCwgMCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIHRtcCAqIE1hdGguY29zKHRoaXNbJ2ltJ10pLFxuICAgICAgICAgICAgICB0bXAgKiBNYXRoLnNpbih0aGlzWydpbSddKSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBleHBvbmVudCBhbmQgc3VidHJhY3RzIG9uZS5cbiAgICAgKlxuICAgICAqIFRoaXMgbWF5IGJlIG1vcmUgYWNjdXJhdGUgdGhhbiBgQ29tcGxleCh4KS5leHAoKS5zdWIoMSlgIGlmXG4gICAgICogYHhgIGlzIHNtYWxsLlxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2V4cG0xJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8qKlxuICAgICAgICogZXhwKGEgKyBpKmIpIC0gMVxuICAgICAgID0gZXhwKGEpICogKGNvcyhiKSArIGoqc2luKGIpKSAtIDFcbiAgICAgICA9IGV4cG0xKGEpKmNvcyhiKSArIGNvc20xKGIpICsgaipleHAoYSkqc2luKGIpXG4gICAgICAgKi9cblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIE1hdGguZXhwbTEoYSkgKiBNYXRoLmNvcyhiKSArIGNvc20xKGIpLFxuICAgICAgICAgICAgICBNYXRoLmV4cChhKSAqIE1hdGguc2luKGIpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBuYXR1cmFsIGxvZ1xuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2xvZyc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIGlmIChiID09PSAwICYmIGEgPiAwKSB7XG4gICAgICAgIC8vcmV0dXJuIG5ldyBDb21wbGV4KE1hdGgubG9nKGEpLCAwKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBsb2dIeXBvdChhLCBiKSxcbiAgICAgICAgICAgICAgTWF0aC5hdGFuMihiLCBhKSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgbWFnbml0dWRlIG9mIHRoZSBjb21wbGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICAnYWJzJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHJldHVybiBoeXBvdCh0aGlzWydyZSddLCB0aGlzWydpbSddKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBhbmdsZSBvZiB0aGUgY29tcGxleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgJ2FyZyc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICByZXR1cm4gTWF0aC5hdGFuMih0aGlzWydpbSddLCB0aGlzWydyZSddKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBzaW5lIG9mIHRoZSBjb21wbGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ3Npbic6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBzaW4oYykgPSAoZV5iIC0gZV4oLWIpKSAvICgyaSlcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIE1hdGguc2luKGEpICogY29zaChiKSxcbiAgICAgICAgICAgICAgTWF0aC5jb3MoYSkgKiBzaW5oKGIpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb3NpbmVcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdjb3MnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gY29zKHopID0gKGVeYiArIGVeKC1iKSkgLyAyXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBNYXRoLmNvcyhhKSAqIGNvc2goYiksXG4gICAgICAgICAgICAgIC1NYXRoLnNpbihhKSAqIHNpbmgoYikpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIHRhbmdlbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICd0YW4nOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gdGFuKGMpID0gKGVeKGNpKSAtIGVeKC1jaSkpIC8gKGkoZV4oY2kpICsgZV4oLWNpKSkpXG5cbiAgICAgIHZhciBhID0gMiAqIHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IDIgKiB0aGlzWydpbSddO1xuICAgICAgdmFyIGQgPSBNYXRoLmNvcyhhKSArIGNvc2goYik7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgTWF0aC5zaW4oYSkgLyBkLFxuICAgICAgICAgICAgICBzaW5oKGIpIC8gZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY290YW5nZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnY290JzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIGNvdChjKSA9IGkoZV4oY2kpICsgZV4oLWNpKSkgLyAoZV4oY2kpIC0gZV4oLWNpKSlcblxuICAgICAgdmFyIGEgPSAyICogdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gMiAqIHRoaXNbJ2ltJ107XG4gICAgICB2YXIgZCA9IE1hdGguY29zKGEpIC0gY29zaChiKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAtTWF0aC5zaW4oYSkgLyBkLFxuICAgICAgICAgICAgICBzaW5oKGIpIC8gZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgc2VjYW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnc2VjJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIHNlYyhjKSA9IDIgLyAoZV4oY2kpICsgZV4oLWNpKSlcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuICAgICAgdmFyIGQgPSAwLjUgKiBjb3NoKDIgKiBiKSArIDAuNSAqIE1hdGguY29zKDIgKiBhKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBNYXRoLmNvcyhhKSAqIGNvc2goYikgLyBkLFxuICAgICAgICAgICAgICBNYXRoLnNpbihhKSAqIHNpbmgoYikgLyBkKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb3NlY2Fuc1xuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2NzYyc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBjc2MoYykgPSAyaSAvIChlXihjaSkgLSBlXigtY2kpKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG4gICAgICB2YXIgZCA9IDAuNSAqIGNvc2goMiAqIGIpIC0gMC41ICogTWF0aC5jb3MoMiAqIGEpO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIE1hdGguc2luKGEpICogY29zaChiKSAvIGQsXG4gICAgICAgICAgICAgIC1NYXRoLmNvcyhhKSAqIHNpbmgoYikgLyBkKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFyY3VzIHNpbnVzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYXNpbic6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBhc2luKGMpID0gLWkgKiBsb2coY2kgKyBzcXJ0KDEgLSBjXjIpKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIHZhciB0MSA9IG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBiICogYiAtIGEgKiBhICsgMSxcbiAgICAgICAgICAgICAgLTIgKiBhICogYilbJ3NxcnQnXSgpO1xuXG4gICAgICB2YXIgdDIgPSBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgdDFbJ3JlJ10gLSBiLFxuICAgICAgICAgICAgICB0MVsnaW0nXSArIGEpWydsb2cnXSgpO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgodDJbJ2ltJ10sIC10MlsncmUnXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBhcmN1cyBjb3NpbnVzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYWNvcyc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBhY29zKGMpID0gaSAqIGxvZyhjIC0gaSAqIHNxcnQoMSAtIGNeMikpXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgdmFyIHQxID0gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIGIgKiBiIC0gYSAqIGEgKyAxLFxuICAgICAgICAgICAgICAtMiAqIGEgKiBiKVsnc3FydCddKCk7XG5cbiAgICAgIHZhciB0MiA9IG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICB0MVsncmUnXSAtIGIsXG4gICAgICAgICAgICAgIHQxWydpbSddICsgYSlbJ2xvZyddKCk7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLlBJIC8gMiAtIHQyWydpbSddLCB0MlsncmUnXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBhcmN1cyB0YW5nZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYXRhbic6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBhdGFuKGMpID0gaSAvIDIgbG9nKChpICsgeCkgLyAoaSAtIHgpKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIGlmIChhID09PSAwKSB7XG5cbiAgICAgICAgaWYgKGIgPT09IDEpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoMCwgSW5maW5pdHkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGIgPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KDAsIC1JbmZpbml0eSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGQgPSBhICogYSArICgxLjAgLSBiKSAqICgxLjAgLSBiKTtcblxuICAgICAgdmFyIHQxID0gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICgxIC0gYiAqIGIgLSBhICogYSkgLyBkLFxuICAgICAgICAgICAgICAtMiAqIGEgLyBkKS5sb2coKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KC0wLjUgKiB0MVsnaW0nXSwgMC41ICogdDFbJ3JlJ10pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggYXJjdXMgY290YW5nZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYWNvdCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBhY290KGMpID0gaSAvIDIgbG9nKChjIC0gaSkgLyAoYyArIGkpKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIGlmIChiID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLmF0YW4yKDEsIGEpLCAwKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGQgPSBhICogYSArIGIgKiBiO1xuICAgICAgcmV0dXJuIChkICE9PSAwKVxuICAgICAgICAgICAgICA/IG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAgICAgICAgIGEgLyBkLFxuICAgICAgICAgICAgICAgICAgICAgIC1iIC8gZCkuYXRhbigpXG4gICAgICAgICAgICAgIDogbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKGEgIT09IDApID8gYSAvIDAgOiAwLFxuICAgICAgICAgICAgICAgICAgICAgIChiICE9PSAwKSA/IC1iIC8gMCA6IDApLmF0YW4oKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFyY3VzIHNlY2FudFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2FzZWMnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYXNlYyhjKSA9IC1pICogbG9nKDEgLyBjICsgc3FydCgxIC0gaSAvIGNeMikpXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgaWYgKGEgPT09IDAgJiYgYiA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoMCwgSW5maW5pdHkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZCA9IGEgKiBhICsgYiAqIGI7XG4gICAgICByZXR1cm4gKGQgIT09IDApXG4gICAgICAgICAgICAgID8gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgICAgICAgYSAvIGQsXG4gICAgICAgICAgICAgICAgICAgICAgLWIgLyBkKS5hY29zKClcbiAgICAgICAgICAgICAgOiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICAoYSAhPT0gMCkgPyBhIC8gMCA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgKGIgIT09IDApID8gLWIgLyAwIDogMCkuYWNvcygpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggYXJjdXMgY29zZWNhbnNcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdhY3NjJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIGFjc2MoYykgPSAtaSAqIGxvZyhpIC8gYyArIHNxcnQoMSAtIDEgLyBjXjIpKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIGlmIChhID09PSAwICYmIGIgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KE1hdGguUEkgLyAyLCBJbmZpbml0eSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBkID0gYSAqIGEgKyBiICogYjtcbiAgICAgIHJldHVybiAoZCAhPT0gMClcbiAgICAgICAgICAgICAgPyBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICBhIC8gZCxcbiAgICAgICAgICAgICAgICAgICAgICAtYiAvIGQpLmFzaW4oKVxuICAgICAgICAgICAgICA6IG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAgICAgICAgIChhICE9PSAwKSA/IGEgLyAwIDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAoYiAhPT0gMCkgPyAtYiAvIDAgOiAwKS5hc2luKCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBzaW5oXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnc2luaCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBzaW5oKGMpID0gKGVeYyAtIGVeLWMpIC8gMlxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgc2luaChhKSAqIE1hdGguY29zKGIpLFxuICAgICAgICAgICAgICBjb3NoKGEpICogTWF0aC5zaW4oYikpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggY29zaFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2Nvc2gnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gY29zaChjKSA9IChlXmMgKyBlXi1jKSAvIDJcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIGNvc2goYSkgKiBNYXRoLmNvcyhiKSxcbiAgICAgICAgICAgICAgc2luaChhKSAqIE1hdGguc2luKGIpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IHRhbmhcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICd0YW5oJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIHRhbmgoYykgPSAoZV5jIC0gZV4tYykgLyAoZV5jICsgZV4tYylcblxuICAgICAgdmFyIGEgPSAyICogdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gMiAqIHRoaXNbJ2ltJ107XG4gICAgICB2YXIgZCA9IGNvc2goYSkgKyBNYXRoLmNvcyhiKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBzaW5oKGEpIC8gZCxcbiAgICAgICAgICAgICAgTWF0aC5zaW4oYikgLyBkKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGNvdGhcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdjb3RoJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIGNvdGgoYykgPSAoZV5jICsgZV4tYykgLyAoZV5jIC0gZV4tYylcblxuICAgICAgdmFyIGEgPSAyICogdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gMiAqIHRoaXNbJ2ltJ107XG4gICAgICB2YXIgZCA9IGNvc2goYSkgLSBNYXRoLmNvcyhiKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBzaW5oKGEpIC8gZCxcbiAgICAgICAgICAgICAgLU1hdGguc2luKGIpIC8gZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBjb3RoXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnY3NjaCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBjc2NoKGMpID0gMiAvIChlXmMgLSBlXi1jKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG4gICAgICB2YXIgZCA9IE1hdGguY29zKDIgKiBiKSAtIGNvc2goMiAqIGEpO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIC0yICogc2luaChhKSAqIE1hdGguY29zKGIpIC8gZCxcbiAgICAgICAgICAgICAgMiAqIGNvc2goYSkgKiBNYXRoLnNpbihiKSAvIGQpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggc2VjaFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ3NlY2gnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gc2VjaChjKSA9IDIgLyAoZV5jICsgZV4tYylcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuICAgICAgdmFyIGQgPSBNYXRoLmNvcygyICogYikgKyBjb3NoKDIgKiBhKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAyICogY29zaChhKSAqIE1hdGguY29zKGIpIC8gZCxcbiAgICAgICAgICAgICAgLTIgKiBzaW5oKGEpICogTWF0aC5zaW4oYikgLyBkKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFzaW5oXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYXNpbmgnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYXNpbmgoYykgPSBsb2coYyArIHNxcnQoY14yICsgMSkpXG5cbiAgICAgIHZhciB0bXAgPSB0aGlzWydpbSddO1xuICAgICAgdGhpc1snaW0nXSA9IC10aGlzWydyZSddO1xuICAgICAgdGhpc1sncmUnXSA9IHRtcDtcbiAgICAgIHZhciByZXMgPSB0aGlzWydhc2luJ10oKTtcblxuICAgICAgdGhpc1sncmUnXSA9IC10aGlzWydpbSddO1xuICAgICAgdGhpc1snaW0nXSA9IHRtcDtcbiAgICAgIHRtcCA9IHJlc1sncmUnXTtcblxuICAgICAgcmVzWydyZSddID0gLXJlc1snaW0nXTtcbiAgICAgIHJlc1snaW0nXSA9IHRtcDtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBhc2luaFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2Fjb3NoJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIGFjb3NoKGMpID0gbG9nKGMgKyBzcXJ0KGNeMiAtIDEpKVxuXG4gICAgICB2YXIgcmVzID0gdGhpc1snYWNvcyddKCk7XG4gICAgICBpZiAocmVzWydpbSddIDw9IDApIHtcbiAgICAgICAgdmFyIHRtcCA9IHJlc1sncmUnXTtcbiAgICAgICAgcmVzWydyZSddID0gLXJlc1snaW0nXTtcbiAgICAgICAgcmVzWydpbSddID0gdG1wO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHRtcCA9IHJlc1snaW0nXTtcbiAgICAgICAgcmVzWydpbSddID0gLXJlc1sncmUnXTtcbiAgICAgICAgcmVzWydyZSddID0gdG1wO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGF0YW5oXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYXRhbmgnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYXRhbmgoYykgPSBsb2coKDErYykgLyAoMS1jKSkgLyAyXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgdmFyIG5vSU0gPSBhID4gMSAmJiBiID09PSAwO1xuICAgICAgdmFyIG9uZU1pbnVzID0gMSAtIGE7XG4gICAgICB2YXIgb25lUGx1cyA9IDEgKyBhO1xuICAgICAgdmFyIGQgPSBvbmVNaW51cyAqIG9uZU1pbnVzICsgYiAqIGI7XG5cbiAgICAgIHZhciB4ID0gKGQgIT09IDApXG4gICAgICAgICAgICAgID8gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKG9uZVBsdXMgKiBvbmVNaW51cyAtIGIgKiBiKSAvIGQsXG4gICAgICAgICAgICAgICAgICAgICAgKGIgKiBvbmVNaW51cyArIG9uZVBsdXMgKiBiKSAvIGQpXG4gICAgICAgICAgICAgIDogbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKGEgIT09IC0xKSA/IChhIC8gMCkgOiAwLFxuICAgICAgICAgICAgICAgICAgICAgIChiICE9PSAwKSA/IChiIC8gMCkgOiAwKTtcblxuICAgICAgdmFyIHRlbXAgPSB4WydyZSddO1xuICAgICAgeFsncmUnXSA9IGxvZ0h5cG90KHhbJ3JlJ10sIHhbJ2ltJ10pIC8gMjtcbiAgICAgIHhbJ2ltJ10gPSBNYXRoLmF0YW4yKHhbJ2ltJ10sIHRlbXApIC8gMjtcbiAgICAgIGlmIChub0lNKSB7XG4gICAgICAgIHhbJ2ltJ10gPSAteFsnaW0nXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB4O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggYWNvdGhcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdhY290aCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBhY290aChjKSA9IGxvZygoYysxKSAvIChjLTEpKSAvIDJcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuXG4gICAgICBpZiAoYSA9PT0gMCAmJiBiID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleCgwLCBNYXRoLlBJIC8gMik7XG4gICAgICB9XG5cbiAgICAgIHZhciBkID0gYSAqIGEgKyBiICogYjtcbiAgICAgIHJldHVybiAoZCAhPT0gMClcbiAgICAgICAgICAgICAgPyBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICBhIC8gZCxcbiAgICAgICAgICAgICAgICAgICAgICAtYiAvIGQpLmF0YW5oKClcbiAgICAgICAgICAgICAgOiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICAoYSAhPT0gMCkgPyBhIC8gMCA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgKGIgIT09IDApID8gLWIgLyAwIDogMCkuYXRhbmgoKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFjc2NoXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYWNzY2gnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYWNzY2goYykgPSBsb2coKDErc3FydCgxK2NeMikpL2MpXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgaWYgKGIgPT09IDApIHtcblxuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgKGEgIT09IDApXG4gICAgICAgICAgICAgICAgPyBNYXRoLmxvZyhhICsgTWF0aC5zcXJ0KGEgKiBhICsgMSkpXG4gICAgICAgICAgICAgICAgOiBJbmZpbml0eSwgMCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBkID0gYSAqIGEgKyBiICogYjtcbiAgICAgIHJldHVybiAoZCAhPT0gMClcbiAgICAgICAgICAgICAgPyBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICBhIC8gZCxcbiAgICAgICAgICAgICAgICAgICAgICAtYiAvIGQpLmFzaW5oKClcbiAgICAgICAgICAgICAgOiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICAoYSAhPT0gMCkgPyBhIC8gMCA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgKGIgIT09IDApID8gLWIgLyAwIDogMCkuYXNpbmgoKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFzZWNoXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYXNlY2gnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYXNlY2goYykgPSBsb2coKDErc3FydCgxLWNeMikpL2MpXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgaWYgKHRoaXNbJ2lzWmVybyddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ0lORklOSVRZJ107XG4gICAgICB9XG5cbiAgICAgIHZhciBkID0gYSAqIGEgKyBiICogYjtcbiAgICAgIHJldHVybiAoZCAhPT0gMClcbiAgICAgICAgICAgICAgPyBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICBhIC8gZCxcbiAgICAgICAgICAgICAgICAgICAgICAtYiAvIGQpLmFjb3NoKClcbiAgICAgICAgICAgICAgOiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICAoYSAhPT0gMCkgPyBhIC8gMCA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgKGIgIT09IDApID8gLWIgLyAwIDogMCkuYWNvc2goKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGludmVyc2UgMS96XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnaW52ZXJzZSc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyAxIC8gMCA9IEluZmluaXR5IGFuZCAxIC8gSW5maW5pdHkgPSAwXG4gICAgICBpZiAodGhpc1snaXNaZXJvJ10oKSkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnSU5GSU5JVFknXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNbJ2lzSW5maW5pdGUnXSgpKSB7XG4gICAgICAgIHJldHVybiBDb21wbGV4WydaRVJPJ107XG4gICAgICB9XG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgdmFyIGQgPSBhICogYSArIGIgKiBiO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoYSAvIGQsIC1iIC8gZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGNvbXBsZXggY29uanVnYXRlXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnY29uanVnYXRlJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh0aGlzWydyZSddLCAtdGhpc1snaW0nXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIG5lZ2F0ZWQgY29tcGxleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICduZWcnOiBmdW5jdGlvbigpIHtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KC10aGlzWydyZSddLCAtdGhpc1snaW0nXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENlaWxzIHRoZSBhY3R1YWwgY29tcGxleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdjZWlsJzogZnVuY3Rpb24ocGxhY2VzKSB7XG5cbiAgICAgIHBsYWNlcyA9IE1hdGgucG93KDEwLCBwbGFjZXMgfHwgMCk7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgTWF0aC5jZWlsKHRoaXNbJ3JlJ10gKiBwbGFjZXMpIC8gcGxhY2VzLFxuICAgICAgICAgICAgICBNYXRoLmNlaWwodGhpc1snaW0nXSAqIHBsYWNlcykgLyBwbGFjZXMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBGbG9vcnMgdGhlIGFjdHVhbCBjb21wbGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2Zsb29yJzogZnVuY3Rpb24ocGxhY2VzKSB7XG5cbiAgICAgIHBsYWNlcyA9IE1hdGgucG93KDEwLCBwbGFjZXMgfHwgMCk7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcih0aGlzWydyZSddICogcGxhY2VzKSAvIHBsYWNlcyxcbiAgICAgICAgICAgICAgTWF0aC5mbG9vcih0aGlzWydpbSddICogcGxhY2VzKSAvIHBsYWNlcyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENlaWxzIHRoZSBhY3R1YWwgY29tcGxleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdyb3VuZCc6IGZ1bmN0aW9uKHBsYWNlcykge1xuXG4gICAgICBwbGFjZXMgPSBNYXRoLnBvdygxMCwgcGxhY2VzIHx8IDApO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIE1hdGgucm91bmQodGhpc1sncmUnXSAqIHBsYWNlcykgLyBwbGFjZXMsXG4gICAgICAgICAgICAgIE1hdGgucm91bmQodGhpc1snaW0nXSAqIHBsYWNlcykgLyBwbGFjZXMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDb21wYXJlcyB0d28gY29tcGxleCBudW1iZXJzXG4gICAgICpcbiAgICAgKiAqKk5vdGU6KiogbmV3IENvbXBsZXgoSW5maW5pdHkpLmVxdWFscyhJbmZpbml0eSkgPT09IGZhbHNlXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICAnZXF1YWxzJzogZnVuY3Rpb24oYSwgYikge1xuXG4gICAgICB2YXIgeiA9IG5ldyBDb21wbGV4KGEsIGIpO1xuXG4gICAgICByZXR1cm4gTWF0aC5hYnMoelsncmUnXSAtIHRoaXNbJ3JlJ10pIDw9IENvbXBsZXhbJ0VQU0lMT04nXSAmJlxuICAgICAgICAgICAgICBNYXRoLmFicyh6WydpbSddIC0gdGhpc1snaW0nXSkgPD0gQ29tcGxleFsnRVBTSUxPTiddO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDbG9uZXMgdGhlIGFjdHVhbCBvYmplY3RcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdjbG9uZSc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgodGhpc1sncmUnXSwgdGhpc1snaW0nXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgYSBzdHJpbmcgb2YgdGhlIGFjdHVhbCBjb21wbGV4IG51bWJlclxuICAgICAqXG4gICAgICogQHJldHVybnMge3N0cmluZ31cbiAgICAgKi9cbiAgICAndG9TdHJpbmcnOiBmdW5jdGlvbigpIHtcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuICAgICAgdmFyIHJldCA9ICcnO1xuXG4gICAgICBpZiAodGhpc1snaXNOYU4nXSgpKSB7XG4gICAgICAgIHJldHVybiAnTmFOJztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNbJ2lzWmVybyddKCkpIHtcbiAgICAgICAgcmV0dXJuICcwJztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNbJ2lzSW5maW5pdGUnXSgpKSB7XG4gICAgICAgIHJldHVybiAnSW5maW5pdHknO1xuICAgICAgfVxuXG4gICAgICBpZiAoYSAhPT0gMCkge1xuICAgICAgICByZXQgKz0gYTtcbiAgICAgIH1cblxuICAgICAgaWYgKGIgIT09IDApIHtcblxuICAgICAgICBpZiAoYSAhPT0gMCkge1xuICAgICAgICAgIHJldCArPSBiIDwgMCA/ICcgLSAnIDogJyArICc7XG4gICAgICAgIH0gZWxzZSBpZiAoYiA8IDApIHtcbiAgICAgICAgICByZXQgKz0gJy0nO1xuICAgICAgICB9XG5cbiAgICAgICAgYiA9IE1hdGguYWJzKGIpO1xuXG4gICAgICAgIGlmICgxICE9PSBiKSB7XG4gICAgICAgICAgcmV0ICs9IGI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0ICs9ICdpJztcbiAgICAgIH1cblxuICAgICAgaWYgKCFyZXQpXG4gICAgICAgIHJldHVybiAnMCc7XG5cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCBudW1iZXIgYXMgYSB2ZWN0b3JcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICAgKi9cbiAgICAndG9WZWN0b3InOiBmdW5jdGlvbigpIHtcblxuICAgICAgcmV0dXJuIFt0aGlzWydyZSddLCB0aGlzWydpbSddXTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgYWN0dWFsIHJlYWwgdmFsdWUgb2YgdGhlIGN1cnJlbnQgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfG51bGx9XG4gICAgICovXG4gICAgJ3ZhbHVlT2YnOiBmdW5jdGlvbigpIHtcblxuICAgICAgaWYgKHRoaXNbJ2ltJ10gPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbJ3JlJ107XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgY29tcGxleCBudW1iZXIgaXMgbm90IG9uIHRoZSBSaWVtYW5uIHNwaGVyZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgICdpc05hTic6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGlzTmFOKHRoaXNbJ3JlJ10pIHx8IGlzTmFOKHRoaXNbJ2ltJ10pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IGEgY29tcGxleCBudW1iZXIgaXMgYXQgdGhlIHplcm8gcG9sZSBvZiB0aGVcbiAgICAgKiBSaWVtYW5uIHNwaGVyZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgICdpc1plcm8nOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICh0aGlzWydyZSddID09PSAwIHx8IHRoaXNbJ3JlJ10gPT09IC0wKSAmJlxuICAgICAgICAgICAgICAodGhpc1snaW0nXSA9PT0gMCB8fCB0aGlzWydpbSddID09PSAtMClcbiAgICAgICAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgY29tcGxleCBudW1iZXIgaXMgbm90IGF0IHRoZSBpbmZpbml0eSBwb2xlIG9mIHRoZVxuICAgICAqIFJpZW1hbm4gc3BoZXJlLlxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgJ2lzRmluaXRlJzogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gaXNGaW5pdGUodGhpc1sncmUnXSkgJiYgaXNGaW5pdGUodGhpc1snaW0nXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hldGhlciBvciBub3QgYSBjb21wbGV4IG51bWJlciBpcyBhdCB0aGUgaW5maW5pdHkgcG9sZSBvZiB0aGVcbiAgICAgKiBSaWVtYW5uIHNwaGVyZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgICdpc0luZmluaXRlJzogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gISh0aGlzWydpc05hTiddKCkgfHwgdGhpc1snaXNGaW5pdGUnXSgpKTtcbiAgICB9XG4gIH07XG5cbiAgQ29tcGxleFsnWkVSTyddID0gbmV3IENvbXBsZXgoMCwgMCk7XG4gIENvbXBsZXhbJ09ORSddID0gbmV3IENvbXBsZXgoMSwgMCk7XG4gIENvbXBsZXhbJ0knXSA9IG5ldyBDb21wbGV4KDAsIDEpO1xuICBDb21wbGV4WydQSSddID0gbmV3IENvbXBsZXgoTWF0aC5QSSwgMCk7XG4gIENvbXBsZXhbJ0UnXSA9IG5ldyBDb21wbGV4KE1hdGguRSwgMCk7XG4gIENvbXBsZXhbJ0lORklOSVRZJ10gPSBuZXcgQ29tcGxleChJbmZpbml0eSwgSW5maW5pdHkpO1xuICBDb21wbGV4WydOQU4nXSA9IG5ldyBDb21wbGV4KE5hTiwgTmFOKTtcbiAgQ29tcGxleFsnRVBTSUxPTiddID0gMWUtMTY7XG5cbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lWydhbWQnXSkge1xuICAgIGRlZmluZShbXSwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gQ29tcGxleDtcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsndmFsdWUnOiB0cnVlfSk7XG4gICAgQ29tcGxleFsnZGVmYXVsdCddID0gQ29tcGxleDtcbiAgICBDb21wbGV4WydDb21wbGV4J10gPSBDb21wbGV4O1xuICAgIG1vZHVsZVsnZXhwb3J0cyddID0gQ29tcGxleDtcbiAgfSBlbHNlIHtcbiAgICByb290WydDb21wbGV4J10gPSBDb21wbGV4O1xuICB9XG5cbn0pKHRoaXMpO1xuIiwiOyhmdW5jdGlvbiAoZ2xvYmFsU2NvcGUpIHtcclxuICAndXNlIHN0cmljdCc7XHJcblxyXG5cclxuICAvKlxyXG4gICAqICBkZWNpbWFsLmpzIHYxMC4yLjBcclxuICAgKiAgQW4gYXJiaXRyYXJ5LXByZWNpc2lvbiBEZWNpbWFsIHR5cGUgZm9yIEphdmFTY3JpcHQuXHJcbiAgICogIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWtlTWNsL2RlY2ltYWwuanNcclxuICAgKiAgQ29weXJpZ2h0IChjKSAyMDE5IE1pY2hhZWwgTWNsYXVnaGxpbiA8TThjaDg4bEBnbWFpbC5jb20+XHJcbiAgICogIE1JVCBMaWNlbmNlXHJcbiAgICovXHJcblxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgRURJVEFCTEUgREVGQVVMVFMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xyXG5cclxuXHJcbiAgICAvLyBUaGUgbWF4aW11bSBleHBvbmVudCBtYWduaXR1ZGUuXHJcbiAgICAvLyBUaGUgbGltaXQgb24gdGhlIHZhbHVlIG9mIGB0b0V4cE5lZ2AsIGB0b0V4cFBvc2AsIGBtaW5FYCBhbmQgYG1heEVgLlxyXG4gIHZhciBFWFBfTElNSVQgPSA5ZTE1LCAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIDllMTVcclxuXHJcbiAgICAvLyBUaGUgbGltaXQgb24gdGhlIHZhbHVlIG9mIGBwcmVjaXNpb25gLCBhbmQgb24gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBhcmd1bWVudCB0b1xyXG4gICAgLy8gYHRvRGVjaW1hbFBsYWNlc2AsIGB0b0V4cG9uZW50aWFsYCwgYHRvRml4ZWRgLCBgdG9QcmVjaXNpb25gIGFuZCBgdG9TaWduaWZpY2FudERpZ2l0c2AuXHJcbiAgICBNQVhfRElHSVRTID0gMWU5LCAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gMWU5XHJcblxyXG4gICAgLy8gQmFzZSBjb252ZXJzaW9uIGFscGhhYmV0LlxyXG4gICAgTlVNRVJBTFMgPSAnMDEyMzQ1Njc4OWFiY2RlZicsXHJcblxyXG4gICAgLy8gVGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIDEwICgxMDI1IGRpZ2l0cykuXHJcbiAgICBMTjEwID0gJzIuMzAyNTg1MDkyOTk0MDQ1Njg0MDE3OTkxNDU0Njg0MzY0MjA3NjAxMTAxNDg4NjI4NzcyOTc2MDMzMzI3OTAwOTY3NTcyNjA5Njc3MzUyNDgwMjM1OTk3MjA1MDg5NTk4Mjk4MzQxOTY3Nzg0MDQyMjg2MjQ4NjMzNDA5NTI1NDY1MDgyODA2NzU2NjY2Mjg3MzY5MDk4NzgxNjg5NDgyOTA3MjA4MzI1NTU0NjgwODQzNzk5ODk0ODI2MjMzMTk4NTI4MzkzNTA1MzA4OTY1Mzc3NzMyNjI4ODQ2MTYzMzY2MjIyMjg3Njk4MjE5ODg2NzQ2NTQzNjY3NDc0NDA0MjQzMjc0MzY1MTU1MDQ4OTM0MzE0OTM5MzkxNDc5NjE5NDA0NDAwMjIyMTA1MTAxNzE0MTc0ODAwMzY4ODA4NDAxMjY0NzA4MDY4NTU2Nzc0MzIxNjIyODM1NTIyMDExNDgwNDY2MzcxNTY1OTEyMTM3MzQ1MDc0Nzg1Njk0NzY4MzQ2MzYxNjc5MjEwMTgwNjQ0NTA3MDY0ODAwMDI3NzUwMjY4NDkxNjc0NjU1MDU4Njg1NjkzNTY3MzQyMDY3MDU4MTEzNjQyOTIyNDU1NDQwNTc1ODkyNTcyNDIwODI0MTMxNDY5NTY4OTAxNjc1ODk0MDI1Njc3NjMxMTM1NjkxOTI5MjAzMzM3NjU4NzE0MTY2MDIzMDEwNTcwMzA4OTYzNDU3MjA3NTQ0MDM3MDg0NzQ2OTk0MDE2ODI2OTI4MjgwODQ4MTE4NDI4OTMxNDg0ODUyNDk0ODY0NDg3MTkyNzgwOTY3NjI3MTI3NTc3NTM5NzAyNzY2ODYwNTk1MjQ5NjcxNjY3NDE4MzQ4NTcwNDQyMjUwNzE5Nzk2NTAwNDcxNDk1MTA1MDQ5MjIxNDc3NjU2NzYzNjkzODY2Mjk3Njk3OTUyMjExMDcxODI2NDU0OTczNDc3MjY2MjQyNTcwOTQyOTMyMjU4Mjc5ODUwMjU4NTUwOTc4NTI2NTM4MzIwNzYwNjcyNjMxNzE2NDMwOTUwNTk5NTA4NzgwNzUyMzcxMDMzMzEwMTE5Nzg1NzU0NzMzMTU0MTQyMTgwODQyNzU0Mzg2MzU5MTc3ODExNzA1NDMwOTgyNzQ4MjM4NTA0NTY0ODAxOTA5NTYxMDI5OTI5MTgyNDMxODIzNzUyNTM1NzcwOTc1MDUzOTU2NTE4NzY5NzUxMDM3NDk3MDg4ODY5MjE4MDIwNTE4OTMzOTUwNzIzODUzOTIwNTE0NDYzNDE5NzI2NTI4NzI4Njk2NTExMDg2MjU3MTQ5MjE5ODg0OTk3ODc0ODg3Mzc3MTM0NTY4NjIwOTE2NzA1OCcsXHJcblxyXG4gICAgLy8gUGkgKDEwMjUgZGlnaXRzKS5cclxuICAgIFBJID0gJzMuMTQxNTkyNjUzNTg5NzkzMjM4NDYyNjQzMzgzMjc5NTAyODg0MTk3MTY5Mzk5Mzc1MTA1ODIwOTc0OTQ0NTkyMzA3ODE2NDA2Mjg2MjA4OTk4NjI4MDM0ODI1MzQyMTE3MDY3OTgyMTQ4MDg2NTEzMjgyMzA2NjQ3MDkzODQ0NjA5NTUwNTgyMjMxNzI1MzU5NDA4MTI4NDgxMTE3NDUwMjg0MTAyNzAxOTM4NTIxMTA1NTU5NjQ0NjIyOTQ4OTU0OTMwMzgxOTY0NDI4ODEwOTc1NjY1OTMzNDQ2MTI4NDc1NjQ4MjMzNzg2NzgzMTY1MjcxMjAxOTA5MTQ1NjQ4NTY2OTIzNDYwMzQ4NjEwNDU0MzI2NjQ4MjEzMzkzNjA3MjYwMjQ5MTQxMjczNzI0NTg3MDA2NjA2MzE1NTg4MTc0ODgxNTIwOTIwOTYyODI5MjU0MDkxNzE1MzY0MzY3ODkyNTkwMzYwMDExMzMwNTMwNTQ4ODIwNDY2NTIxMzg0MTQ2OTUxOTQxNTExNjA5NDMzMDU3MjcwMzY1NzU5NTkxOTUzMDkyMTg2MTE3MzgxOTMyNjExNzkzMTA1MTE4NTQ4MDc0NDYyMzc5OTYyNzQ5NTY3MzUxODg1NzUyNzI0ODkxMjI3OTM4MTgzMDExOTQ5MTI5ODMzNjczMzYyNDQwNjU2NjQzMDg2MDIxMzk0OTQ2Mzk1MjI0NzM3MTkwNzAyMTc5ODYwOTQzNzAyNzcwNTM5MjE3MTc2MjkzMTc2NzUyMzg0Njc0ODE4NDY3NjY5NDA1MTMyMDAwNTY4MTI3MTQ1MjYzNTYwODI3Nzg1NzcxMzQyNzU3Nzg5NjA5MTczNjM3MTc4NzIxNDY4NDQwOTAxMjI0OTUzNDMwMTQ2NTQ5NTg1MzcxMDUwNzkyMjc5Njg5MjU4OTIzNTQyMDE5OTU2MTEyMTI5MDIxOTYwODY0MDM0NDE4MTU5ODEzNjI5Nzc0NzcxMzA5OTYwNTE4NzA3MjExMzQ5OTk5OTk4MzcyOTc4MDQ5OTUxMDU5NzMxNzMyODE2MDk2MzE4NTk1MDI0NDU5NDU1MzQ2OTA4MzAyNjQyNTIyMzA4MjUzMzQ0Njg1MDM1MjYxOTMxMTg4MTcxMDEwMDAzMTM3ODM4NzUyODg2NTg3NTMzMjA4MzgxNDIwNjE3MTc3NjY5MTQ3MzAzNTk4MjUzNDkwNDI4NzU1NDY4NzMxMTU5NTYyODYzODgyMzUzNzg3NTkzNzUxOTU3NzgxODU3NzgwNTMyMTcxMjI2ODA2NjEzMDAxOTI3ODc2NjExMTk1OTA5MjE2NDIwMTk4OTM4MDk1MjU3MjAxMDY1NDg1ODYzMjc4OScsXHJcblxyXG5cclxuICAgIC8vIFRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBvZiB0aGUgRGVjaW1hbCBjb25zdHJ1Y3Rvci5cclxuICAgIERFRkFVTFRTID0ge1xyXG5cclxuICAgICAgLy8gVGhlc2UgdmFsdWVzIG11c3QgYmUgaW50ZWdlcnMgd2l0aGluIHRoZSBzdGF0ZWQgcmFuZ2VzIChpbmNsdXNpdmUpLlxyXG4gICAgICAvLyBNb3N0IG9mIHRoZXNlIHZhbHVlcyBjYW4gYmUgY2hhbmdlZCBhdCBydW4tdGltZSB1c2luZyB0aGUgYERlY2ltYWwuY29uZmlnYCBtZXRob2QuXHJcblxyXG4gICAgICAvLyBUaGUgbWF4aW11bSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIG9mIHRoZSByZXN1bHQgb2YgYSBjYWxjdWxhdGlvbiBvciBiYXNlIGNvbnZlcnNpb24uXHJcbiAgICAgIC8vIEUuZy4gYERlY2ltYWwuY29uZmlnKHsgcHJlY2lzaW9uOiAyMCB9KTtgXHJcbiAgICAgIHByZWNpc2lvbjogMjAsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDEgdG8gTUFYX0RJR0lUU1xyXG5cclxuICAgICAgLy8gVGhlIHJvdW5kaW5nIG1vZGUgdXNlZCB3aGVuIHJvdW5kaW5nIHRvIGBwcmVjaXNpb25gLlxyXG4gICAgICAvL1xyXG4gICAgICAvLyBST1VORF9VUCAgICAgICAgIDAgQXdheSBmcm9tIHplcm8uXHJcbiAgICAgIC8vIFJPVU5EX0RPV04gICAgICAgMSBUb3dhcmRzIHplcm8uXHJcbiAgICAgIC8vIFJPVU5EX0NFSUwgICAgICAgMiBUb3dhcmRzICtJbmZpbml0eS5cclxuICAgICAgLy8gUk9VTkRfRkxPT1IgICAgICAzIFRvd2FyZHMgLUluZmluaXR5LlxyXG4gICAgICAvLyBST1VORF9IQUxGX1VQICAgIDQgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIHVwLlxyXG4gICAgICAvLyBST1VORF9IQUxGX0RPV04gIDUgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIGRvd24uXHJcbiAgICAgIC8vIFJPVU5EX0hBTEZfRVZFTiAgNiBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgdG93YXJkcyBldmVuIG5laWdoYm91ci5cclxuICAgICAgLy8gUk9VTkRfSEFMRl9DRUlMICA3IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB0b3dhcmRzICtJbmZpbml0eS5cclxuICAgICAgLy8gUk9VTkRfSEFMRl9GTE9PUiA4IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB0b3dhcmRzIC1JbmZpbml0eS5cclxuICAgICAgLy9cclxuICAgICAgLy8gRS5nLlxyXG4gICAgICAvLyBgRGVjaW1hbC5yb3VuZGluZyA9IDQ7YFxyXG4gICAgICAvLyBgRGVjaW1hbC5yb3VuZGluZyA9IERlY2ltYWwuUk9VTkRfSEFMRl9VUDtgXHJcbiAgICAgIHJvdW5kaW5nOiA0LCAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gOFxyXG5cclxuICAgICAgLy8gVGhlIG1vZHVsbyBtb2RlIHVzZWQgd2hlbiBjYWxjdWxhdGluZyB0aGUgbW9kdWx1czogYSBtb2Qgbi5cclxuICAgICAgLy8gVGhlIHF1b3RpZW50IChxID0gYSAvIG4pIGlzIGNhbGN1bGF0ZWQgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIHJvdW5kaW5nIG1vZGUuXHJcbiAgICAgIC8vIFRoZSByZW1haW5kZXIgKHIpIGlzIGNhbGN1bGF0ZWQgYXM6IHIgPSBhIC0gbiAqIHEuXHJcbiAgICAgIC8vXHJcbiAgICAgIC8vIFVQICAgICAgICAgMCBUaGUgcmVtYWluZGVyIGlzIHBvc2l0aXZlIGlmIHRoZSBkaXZpZGVuZCBpcyBuZWdhdGl2ZSwgZWxzZSBpcyBuZWdhdGl2ZS5cclxuICAgICAgLy8gRE9XTiAgICAgICAxIFRoZSByZW1haW5kZXIgaGFzIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGRpdmlkZW5kIChKYXZhU2NyaXB0ICUpLlxyXG4gICAgICAvLyBGTE9PUiAgICAgIDMgVGhlIHJlbWFpbmRlciBoYXMgdGhlIHNhbWUgc2lnbiBhcyB0aGUgZGl2aXNvciAoUHl0aG9uICUpLlxyXG4gICAgICAvLyBIQUxGX0VWRU4gIDYgVGhlIElFRUUgNzU0IHJlbWFpbmRlciBmdW5jdGlvbi5cclxuICAgICAgLy8gRVVDTElEICAgICA5IEV1Y2xpZGlhbiBkaXZpc2lvbi4gcSA9IHNpZ24obikgKiBmbG9vcihhIC8gYWJzKG4pKS4gQWx3YXlzIHBvc2l0aXZlLlxyXG4gICAgICAvL1xyXG4gICAgICAvLyBUcnVuY2F0ZWQgZGl2aXNpb24gKDEpLCBmbG9vcmVkIGRpdmlzaW9uICgzKSwgdGhlIElFRUUgNzU0IHJlbWFpbmRlciAoNiksIGFuZCBFdWNsaWRpYW5cclxuICAgICAgLy8gZGl2aXNpb24gKDkpIGFyZSBjb21tb25seSB1c2VkIGZvciB0aGUgbW9kdWx1cyBvcGVyYXRpb24uIFRoZSBvdGhlciByb3VuZGluZyBtb2RlcyBjYW4gYWxzb1xyXG4gICAgICAvLyBiZSB1c2VkLCBidXQgdGhleSBtYXkgbm90IGdpdmUgdXNlZnVsIHJlc3VsdHMuXHJcbiAgICAgIG1vZHVsbzogMSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gOVxyXG5cclxuICAgICAgLy8gVGhlIGV4cG9uZW50IHZhbHVlIGF0IGFuZCBiZW5lYXRoIHdoaWNoIGB0b1N0cmluZ2AgcmV0dXJucyBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgICAgLy8gSmF2YVNjcmlwdCBudW1iZXJzOiAtN1xyXG4gICAgICB0b0V4cE5lZzogLTcsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIC1FWFBfTElNSVRcclxuXHJcbiAgICAgIC8vIFRoZSBleHBvbmVudCB2YWx1ZSBhdCBhbmQgYWJvdmUgd2hpY2ggYHRvU3RyaW5nYCByZXR1cm5zIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAgICAvLyBKYXZhU2NyaXB0IG51bWJlcnM6IDIxXHJcbiAgICAgIHRvRXhwUG9zOiAgMjEsICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDAgdG8gRVhQX0xJTUlUXHJcblxyXG4gICAgICAvLyBUaGUgbWluaW11bSBleHBvbmVudCB2YWx1ZSwgYmVuZWF0aCB3aGljaCB1bmRlcmZsb3cgdG8gemVybyBvY2N1cnMuXHJcbiAgICAgIC8vIEphdmFTY3JpcHQgbnVtYmVyczogLTMyNCAgKDVlLTMyNClcclxuICAgICAgbWluRTogLUVYUF9MSU1JVCwgICAgICAgICAgICAgICAgICAgICAgLy8gLTEgdG8gLUVYUF9MSU1JVFxyXG5cclxuICAgICAgLy8gVGhlIG1heGltdW0gZXhwb25lbnQgdmFsdWUsIGFib3ZlIHdoaWNoIG92ZXJmbG93IHRvIEluZmluaXR5IG9jY3Vycy5cclxuICAgICAgLy8gSmF2YVNjcmlwdCBudW1iZXJzOiAzMDggICgxLjc5NzY5MzEzNDg2MjMxNTdlKzMwOClcclxuICAgICAgbWF4RTogRVhQX0xJTUlULCAgICAgICAgICAgICAgICAgICAgICAgLy8gMSB0byBFWFBfTElNSVRcclxuXHJcbiAgICAgIC8vIFdoZXRoZXIgdG8gdXNlIGNyeXB0b2dyYXBoaWNhbGx5LXNlY3VyZSByYW5kb20gbnVtYmVyIGdlbmVyYXRpb24sIGlmIGF2YWlsYWJsZS5cclxuICAgICAgY3J5cHRvOiBmYWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHJ1ZS9mYWxzZVxyXG4gICAgfSxcclxuXHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVORCBPRiBFRElUQUJMRSBERUZBVUxUUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC8vXHJcblxyXG5cclxuICAgIERlY2ltYWwsIGluZXhhY3QsIG5vQ29uZmxpY3QsIHF1YWRyYW50LFxyXG4gICAgZXh0ZXJuYWwgPSB0cnVlLFxyXG5cclxuICAgIGRlY2ltYWxFcnJvciA9ICdbRGVjaW1hbEVycm9yXSAnLFxyXG4gICAgaW52YWxpZEFyZ3VtZW50ID0gZGVjaW1hbEVycm9yICsgJ0ludmFsaWQgYXJndW1lbnQ6ICcsXHJcbiAgICBwcmVjaXNpb25MaW1pdEV4Y2VlZGVkID0gZGVjaW1hbEVycm9yICsgJ1ByZWNpc2lvbiBsaW1pdCBleGNlZWRlZCcsXHJcbiAgICBjcnlwdG9VbmF2YWlsYWJsZSA9IGRlY2ltYWxFcnJvciArICdjcnlwdG8gdW5hdmFpbGFibGUnLFxyXG5cclxuICAgIG1hdGhmbG9vciA9IE1hdGguZmxvb3IsXHJcbiAgICBtYXRocG93ID0gTWF0aC5wb3csXHJcblxyXG4gICAgaXNCaW5hcnkgPSAvXjBiKFswMV0rKFxcLlswMV0qKT98XFwuWzAxXSspKHBbKy1dP1xcZCspPyQvaSxcclxuICAgIGlzSGV4ID0gL14weChbMC05YS1mXSsoXFwuWzAtOWEtZl0qKT98XFwuWzAtOWEtZl0rKShwWystXT9cXGQrKT8kL2ksXHJcbiAgICBpc09jdGFsID0gL14wbyhbMC03XSsoXFwuWzAtN10qKT98XFwuWzAtN10rKShwWystXT9cXGQrKT8kL2ksXHJcbiAgICBpc0RlY2ltYWwgPSAvXihcXGQrKFxcLlxcZCopP3xcXC5cXGQrKShlWystXT9cXGQrKT8kL2ksXHJcblxyXG4gICAgQkFTRSA9IDFlNyxcclxuICAgIExPR19CQVNFID0gNyxcclxuICAgIE1BWF9TQUZFX0lOVEVHRVIgPSA5MDA3MTk5MjU0NzQwOTkxLFxyXG5cclxuICAgIExOMTBfUFJFQ0lTSU9OID0gTE4xMC5sZW5ndGggLSAxLFxyXG4gICAgUElfUFJFQ0lTSU9OID0gUEkubGVuZ3RoIC0gMSxcclxuXHJcbiAgICAvLyBEZWNpbWFsLnByb3RvdHlwZSBvYmplY3RcclxuICAgIFAgPSB7IG5hbWU6ICdbb2JqZWN0IERlY2ltYWxdJyB9O1xyXG5cclxuXHJcbiAgLy8gRGVjaW1hbCBwcm90b3R5cGUgbWV0aG9kc1xyXG5cclxuXHJcbiAgLypcclxuICAgKiAgYWJzb2x1dGVWYWx1ZSAgICAgICAgICAgICBhYnNcclxuICAgKiAgY2VpbFxyXG4gICAqICBjb21wYXJlZFRvICAgICAgICAgICAgICAgIGNtcFxyXG4gICAqICBjb3NpbmUgICAgICAgICAgICAgICAgICAgIGNvc1xyXG4gICAqICBjdWJlUm9vdCAgICAgICAgICAgICAgICAgIGNicnRcclxuICAgKiAgZGVjaW1hbFBsYWNlcyAgICAgICAgICAgICBkcFxyXG4gICAqICBkaXZpZGVkQnkgICAgICAgICAgICAgICAgIGRpdlxyXG4gICAqICBkaXZpZGVkVG9JbnRlZ2VyQnkgICAgICAgIGRpdlRvSW50XHJcbiAgICogIGVxdWFscyAgICAgICAgICAgICAgICAgICAgZXFcclxuICAgKiAgZmxvb3JcclxuICAgKiAgZ3JlYXRlclRoYW4gICAgICAgICAgICAgICBndFxyXG4gICAqICBncmVhdGVyVGhhbk9yRXF1YWxUbyAgICAgIGd0ZVxyXG4gICAqICBoeXBlcmJvbGljQ29zaW5lICAgICAgICAgIGNvc2hcclxuICAgKiAgaHlwZXJib2xpY1NpbmUgICAgICAgICAgICBzaW5oXHJcbiAgICogIGh5cGVyYm9saWNUYW5nZW50ICAgICAgICAgdGFuaFxyXG4gICAqICBpbnZlcnNlQ29zaW5lICAgICAgICAgICAgIGFjb3NcclxuICAgKiAgaW52ZXJzZUh5cGVyYm9saWNDb3NpbmUgICBhY29zaFxyXG4gICAqICBpbnZlcnNlSHlwZXJib2xpY1NpbmUgICAgIGFzaW5oXHJcbiAgICogIGludmVyc2VIeXBlcmJvbGljVGFuZ2VudCAgYXRhbmhcclxuICAgKiAgaW52ZXJzZVNpbmUgICAgICAgICAgICAgICBhc2luXHJcbiAgICogIGludmVyc2VUYW5nZW50ICAgICAgICAgICAgYXRhblxyXG4gICAqICBpc0Zpbml0ZVxyXG4gICAqICBpc0ludGVnZXIgICAgICAgICAgICAgICAgIGlzSW50XHJcbiAgICogIGlzTmFOXHJcbiAgICogIGlzTmVnYXRpdmUgICAgICAgICAgICAgICAgaXNOZWdcclxuICAgKiAgaXNQb3NpdGl2ZSAgICAgICAgICAgICAgICBpc1Bvc1xyXG4gICAqICBpc1plcm9cclxuICAgKiAgbGVzc1RoYW4gICAgICAgICAgICAgICAgICBsdFxyXG4gICAqICBsZXNzVGhhbk9yRXF1YWxUbyAgICAgICAgIGx0ZVxyXG4gICAqICBsb2dhcml0aG0gICAgICAgICAgICAgICAgIGxvZ1xyXG4gICAqICBbbWF4aW11bV0gICAgICAgICAgICAgICAgIFttYXhdXHJcbiAgICogIFttaW5pbXVtXSAgICAgICAgICAgICAgICAgW21pbl1cclxuICAgKiAgbWludXMgICAgICAgICAgICAgICAgICAgICBzdWJcclxuICAgKiAgbW9kdWxvICAgICAgICAgICAgICAgICAgICBtb2RcclxuICAgKiAgbmF0dXJhbEV4cG9uZW50aWFsICAgICAgICBleHBcclxuICAgKiAgbmF0dXJhbExvZ2FyaXRobSAgICAgICAgICBsblxyXG4gICAqICBuZWdhdGVkICAgICAgICAgICAgICAgICAgIG5lZ1xyXG4gICAqICBwbHVzICAgICAgICAgICAgICAgICAgICAgIGFkZFxyXG4gICAqICBwcmVjaXNpb24gICAgICAgICAgICAgICAgIHNkXHJcbiAgICogIHJvdW5kXHJcbiAgICogIHNpbmUgICAgICAgICAgICAgICAgICAgICAgc2luXHJcbiAgICogIHNxdWFyZVJvb3QgICAgICAgICAgICAgICAgc3FydFxyXG4gICAqICB0YW5nZW50ICAgICAgICAgICAgICAgICAgIHRhblxyXG4gICAqICB0aW1lcyAgICAgICAgICAgICAgICAgICAgIG11bFxyXG4gICAqICB0b0JpbmFyeVxyXG4gICAqICB0b0RlY2ltYWxQbGFjZXMgICAgICAgICAgIHRvRFBcclxuICAgKiAgdG9FeHBvbmVudGlhbFxyXG4gICAqICB0b0ZpeGVkXHJcbiAgICogIHRvRnJhY3Rpb25cclxuICAgKiAgdG9IZXhhZGVjaW1hbCAgICAgICAgICAgICB0b0hleFxyXG4gICAqICB0b05lYXJlc3RcclxuICAgKiAgdG9OdW1iZXJcclxuICAgKiAgdG9PY3RhbFxyXG4gICAqICB0b1Bvd2VyICAgICAgICAgICAgICAgICAgIHBvd1xyXG4gICAqICB0b1ByZWNpc2lvblxyXG4gICAqICB0b1NpZ25pZmljYW50RGlnaXRzICAgICAgIHRvU0RcclxuICAgKiAgdG9TdHJpbmdcclxuICAgKiAgdHJ1bmNhdGVkICAgICAgICAgICAgICAgICB0cnVuY1xyXG4gICAqICB2YWx1ZU9mICAgICAgICAgICAgICAgICAgIHRvSlNPTlxyXG4gICAqL1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5hYnNvbHV0ZVZhbHVlID0gUC5hYnMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgeCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO1xyXG4gICAgaWYgKHgucyA8IDApIHgucyA9IDE7XHJcbiAgICByZXR1cm4gZmluYWxpc2UoeCk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCByb3VuZGVkIHRvIGEgd2hvbGUgbnVtYmVyIGluIHRoZVxyXG4gICAqIGRpcmVjdGlvbiBvZiBwb3NpdGl2ZSBJbmZpbml0eS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuY2VpbCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiBmaW5hbGlzZShuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKSwgdGhpcy5lICsgMSwgMik7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuXHJcbiAgICogICAxICAgIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZSBvZiBgeWAsXHJcbiAgICogIC0xICAgIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgbGVzcyB0aGFuIHRoZSB2YWx1ZSBvZiBgeWAsXHJcbiAgICogICAwICAgIGlmIHRoZXkgaGF2ZSB0aGUgc2FtZSB2YWx1ZSxcclxuICAgKiAgIE5hTiAgaWYgdGhlIHZhbHVlIG9mIGVpdGhlciBEZWNpbWFsIGlzIE5hTi5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuY29tcGFyZWRUbyA9IFAuY21wID0gZnVuY3Rpb24gKHkpIHtcclxuICAgIHZhciBpLCBqLCB4ZEwsIHlkTCxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIHhkID0geC5kLFxyXG4gICAgICB5ZCA9ICh5ID0gbmV3IHguY29uc3RydWN0b3IoeSkpLmQsXHJcbiAgICAgIHhzID0geC5zLFxyXG4gICAgICB5cyA9IHkucztcclxuXHJcbiAgICAvLyBFaXRoZXIgTmFOIG9yIMKxSW5maW5pdHk/XHJcbiAgICBpZiAoIXhkIHx8ICF5ZCkge1xyXG4gICAgICByZXR1cm4gIXhzIHx8ICF5cyA/IE5hTiA6IHhzICE9PSB5cyA/IHhzIDogeGQgPT09IHlkID8gMCA6ICF4ZCBeIHhzIDwgMCA/IDEgOiAtMTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBFaXRoZXIgemVybz9cclxuICAgIGlmICgheGRbMF0gfHwgIXlkWzBdKSByZXR1cm4geGRbMF0gPyB4cyA6IHlkWzBdID8gLXlzIDogMDtcclxuXHJcbiAgICAvLyBTaWducyBkaWZmZXI/XHJcbiAgICBpZiAoeHMgIT09IHlzKSByZXR1cm4geHM7XHJcblxyXG4gICAgLy8gQ29tcGFyZSBleHBvbmVudHMuXHJcbiAgICBpZiAoeC5lICE9PSB5LmUpIHJldHVybiB4LmUgPiB5LmUgXiB4cyA8IDAgPyAxIDogLTE7XHJcblxyXG4gICAgeGRMID0geGQubGVuZ3RoO1xyXG4gICAgeWRMID0geWQubGVuZ3RoO1xyXG5cclxuICAgIC8vIENvbXBhcmUgZGlnaXQgYnkgZGlnaXQuXHJcbiAgICBmb3IgKGkgPSAwLCBqID0geGRMIDwgeWRMID8geGRMIDogeWRMOyBpIDwgajsgKytpKSB7XHJcbiAgICAgIGlmICh4ZFtpXSAhPT0geWRbaV0pIHJldHVybiB4ZFtpXSA+IHlkW2ldIF4geHMgPCAwID8gMSA6IC0xO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENvbXBhcmUgbGVuZ3Rocy5cclxuICAgIHJldHVybiB4ZEwgPT09IHlkTCA/IDAgOiB4ZEwgPiB5ZEwgXiB4cyA8IDAgPyAxIDogLTE7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGNvc2luZSBvZiB0aGUgdmFsdWUgaW4gcmFkaWFucyBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBEb21haW46IFstSW5maW5pdHksIEluZmluaXR5XVxyXG4gICAqIFJhbmdlOiBbLTEsIDFdXHJcbiAgICpcclxuICAgKiBjb3MoMCkgICAgICAgICA9IDFcclxuICAgKiBjb3MoLTApICAgICAgICA9IDFcclxuICAgKiBjb3MoSW5maW5pdHkpICA9IE5hTlxyXG4gICAqIGNvcygtSW5maW5pdHkpID0gTmFOXHJcbiAgICogY29zKE5hTikgICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuY29zaW5lID0gUC5jb3MgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgcHIsIHJtLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKCF4LmQpIHJldHVybiBuZXcgQ3RvcihOYU4pO1xyXG5cclxuICAgIC8vIGNvcygwKSA9IGNvcygtMCkgPSAxXHJcbiAgICBpZiAoIXguZFswXSkgcmV0dXJuIG5ldyBDdG9yKDEpO1xyXG5cclxuICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByICsgTWF0aC5tYXgoeC5lLCB4LnNkKCkpICsgTE9HX0JBU0U7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuXHJcbiAgICB4ID0gY29zaW5lKEN0b3IsIHRvTGVzc1RoYW5IYWxmUGkoQ3RvciwgeCkpO1xyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHI7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gcm07XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHF1YWRyYW50ID09IDIgfHwgcXVhZHJhbnQgPT0gMyA/IHgubmVnKCkgOiB4LCBwciwgcm0sIHRydWUpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGN1YmUgcm9vdCBvZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLCByb3VuZGVkIHRvXHJcbiAgICogYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqICBjYnJ0KDApICA9ICAwXHJcbiAgICogIGNicnQoLTApID0gLTBcclxuICAgKiAgY2JydCgxKSAgPSAgMVxyXG4gICAqICBjYnJ0KC0xKSA9IC0xXHJcbiAgICogIGNicnQoTikgID0gIE5cclxuICAgKiAgY2JydCgtSSkgPSAtSVxyXG4gICAqICBjYnJ0KEkpICA9ICBJXHJcbiAgICpcclxuICAgKiBNYXRoLmNicnQoeCkgPSAoeCA8IDAgPyAtTWF0aC5wb3coLXgsIDEvMykgOiBNYXRoLnBvdyh4LCAxLzMpKVxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5jdWJlUm9vdCA9IFAuY2JydCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBlLCBtLCBuLCByLCByZXAsIHMsIHNkLCB0LCB0MywgdDNwbHVzeCxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpIHx8IHguaXNaZXJvKCkpIHJldHVybiBuZXcgQ3Rvcih4KTtcclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgLy8gSW5pdGlhbCBlc3RpbWF0ZS5cclxuICAgIHMgPSB4LnMgKiBtYXRocG93KHgucyAqIHgsIDEgLyAzKTtcclxuXHJcbiAgICAgLy8gTWF0aC5jYnJ0IHVuZGVyZmxvdy9vdmVyZmxvdz9cclxuICAgICAvLyBQYXNzIHggdG8gTWF0aC5wb3cgYXMgaW50ZWdlciwgdGhlbiBhZGp1c3QgdGhlIGV4cG9uZW50IG9mIHRoZSByZXN1bHQuXHJcbiAgICBpZiAoIXMgfHwgTWF0aC5hYnMocykgPT0gMSAvIDApIHtcclxuICAgICAgbiA9IGRpZ2l0c1RvU3RyaW5nKHguZCk7XHJcbiAgICAgIGUgPSB4LmU7XHJcblxyXG4gICAgICAvLyBBZGp1c3QgbiBleHBvbmVudCBzbyBpdCBpcyBhIG11bHRpcGxlIG9mIDMgYXdheSBmcm9tIHggZXhwb25lbnQuXHJcbiAgICAgIGlmIChzID0gKGUgLSBuLmxlbmd0aCArIDEpICUgMykgbiArPSAocyA9PSAxIHx8IHMgPT0gLTIgPyAnMCcgOiAnMDAnKTtcclxuICAgICAgcyA9IG1hdGhwb3cobiwgMSAvIDMpO1xyXG5cclxuICAgICAgLy8gUmFyZWx5LCBlIG1heSBiZSBvbmUgbGVzcyB0aGFuIHRoZSByZXN1bHQgZXhwb25lbnQgdmFsdWUuXHJcbiAgICAgIGUgPSBtYXRoZmxvb3IoKGUgKyAxKSAvIDMpIC0gKGUgJSAzID09IChlIDwgMCA/IC0xIDogMikpO1xyXG5cclxuICAgICAgaWYgKHMgPT0gMSAvIDApIHtcclxuICAgICAgICBuID0gJzVlJyArIGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbiA9IHMudG9FeHBvbmVudGlhbCgpO1xyXG4gICAgICAgIG4gPSBuLnNsaWNlKDAsIG4uaW5kZXhPZignZScpICsgMSkgKyBlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByID0gbmV3IEN0b3Iobik7XHJcbiAgICAgIHIucyA9IHgucztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHIgPSBuZXcgQ3RvcihzLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNkID0gKGUgPSBDdG9yLnByZWNpc2lvbikgKyAzO1xyXG5cclxuICAgIC8vIEhhbGxleSdzIG1ldGhvZC5cclxuICAgIC8vIFRPRE8/IENvbXBhcmUgTmV3dG9uJ3MgbWV0aG9kLlxyXG4gICAgZm9yICg7Oykge1xyXG4gICAgICB0ID0gcjtcclxuICAgICAgdDMgPSB0LnRpbWVzKHQpLnRpbWVzKHQpO1xyXG4gICAgICB0M3BsdXN4ID0gdDMucGx1cyh4KTtcclxuICAgICAgciA9IGRpdmlkZSh0M3BsdXN4LnBsdXMoeCkudGltZXModCksIHQzcGx1c3gucGx1cyh0MyksIHNkICsgMiwgMSk7XHJcblxyXG4gICAgICAvLyBUT0RPPyBSZXBsYWNlIHdpdGggZm9yLWxvb3AgYW5kIGNoZWNrUm91bmRpbmdEaWdpdHMuXHJcbiAgICAgIGlmIChkaWdpdHNUb1N0cmluZyh0LmQpLnNsaWNlKDAsIHNkKSA9PT0gKG4gPSBkaWdpdHNUb1N0cmluZyhyLmQpKS5zbGljZSgwLCBzZCkpIHtcclxuICAgICAgICBuID0gbi5zbGljZShzZCAtIDMsIHNkICsgMSk7XHJcblxyXG4gICAgICAgIC8vIFRoZSA0dGggcm91bmRpbmcgZGlnaXQgbWF5IGJlIGluIGVycm9yIGJ5IC0xIHNvIGlmIHRoZSA0IHJvdW5kaW5nIGRpZ2l0cyBhcmUgOTk5OSBvciA0OTk5XHJcbiAgICAgICAgLy8gLCBpLmUuIGFwcHJvYWNoaW5nIGEgcm91bmRpbmcgYm91bmRhcnksIGNvbnRpbnVlIHRoZSBpdGVyYXRpb24uXHJcbiAgICAgICAgaWYgKG4gPT0gJzk5OTknIHx8ICFyZXAgJiYgbiA9PSAnNDk5OScpIHtcclxuXHJcbiAgICAgICAgICAvLyBPbiB0aGUgZmlyc3QgaXRlcmF0aW9uIG9ubHksIGNoZWNrIHRvIHNlZSBpZiByb3VuZGluZyB1cCBnaXZlcyB0aGUgZXhhY3QgcmVzdWx0IGFzIHRoZVxyXG4gICAgICAgICAgLy8gbmluZXMgbWF5IGluZmluaXRlbHkgcmVwZWF0LlxyXG4gICAgICAgICAgaWYgKCFyZXApIHtcclxuICAgICAgICAgICAgZmluYWxpc2UodCwgZSArIDEsIDApO1xyXG5cclxuICAgICAgICAgICAgaWYgKHQudGltZXModCkudGltZXModCkuZXEoeCkpIHtcclxuICAgICAgICAgICAgICByID0gdDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHNkICs9IDQ7XHJcbiAgICAgICAgICByZXAgPSAxO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gSWYgdGhlIHJvdW5kaW5nIGRpZ2l0cyBhcmUgbnVsbCwgMHswLDR9IG9yIDUwezAsM30sIGNoZWNrIGZvciBhbiBleGFjdCByZXN1bHQuXHJcbiAgICAgICAgICAvLyBJZiBub3QsIHRoZW4gdGhlcmUgYXJlIGZ1cnRoZXIgZGlnaXRzIGFuZCBtIHdpbGwgYmUgdHJ1dGh5LlxyXG4gICAgICAgICAgaWYgKCErbiB8fCAhK24uc2xpY2UoMSkgJiYgbi5jaGFyQXQoMCkgPT0gJzUnKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBUcnVuY2F0ZSB0byB0aGUgZmlyc3Qgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgICAgICAgIGZpbmFsaXNlKHIsIGUgKyAxLCAxKTtcclxuICAgICAgICAgICAgbSA9ICFyLnRpbWVzKHIpLnRpbWVzKHIpLmVxKHgpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UociwgZSwgQ3Rvci5yb3VuZGluZywgbSk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgb2YgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuZGVjaW1hbFBsYWNlcyA9IFAuZHAgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgdyxcclxuICAgICAgZCA9IHRoaXMuZCxcclxuICAgICAgbiA9IE5hTjtcclxuXHJcbiAgICBpZiAoZCkge1xyXG4gICAgICB3ID0gZC5sZW5ndGggLSAxO1xyXG4gICAgICBuID0gKHcgLSBtYXRoZmxvb3IodGhpcy5lIC8gTE9HX0JBU0UpKSAqIExPR19CQVNFO1xyXG5cclxuICAgICAgLy8gU3VidHJhY3QgdGhlIG51bWJlciBvZiB0cmFpbGluZyB6ZXJvcyBvZiB0aGUgbGFzdCB3b3JkLlxyXG4gICAgICB3ID0gZFt3XTtcclxuICAgICAgaWYgKHcpIGZvciAoOyB3ICUgMTAgPT0gMDsgdyAvPSAxMCkgbi0tO1xyXG4gICAgICBpZiAobiA8IDApIG4gPSAwO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqICBuIC8gMCA9IElcclxuICAgKiAgbiAvIE4gPSBOXHJcbiAgICogIG4gLyBJID0gMFxyXG4gICAqICAwIC8gbiA9IDBcclxuICAgKiAgMCAvIDAgPSBOXHJcbiAgICogIDAgLyBOID0gTlxyXG4gICAqICAwIC8gSSA9IDBcclxuICAgKiAgTiAvIG4gPSBOXHJcbiAgICogIE4gLyAwID0gTlxyXG4gICAqICBOIC8gTiA9IE5cclxuICAgKiAgTiAvIEkgPSBOXHJcbiAgICogIEkgLyBuID0gSVxyXG4gICAqICBJIC8gMCA9IElcclxuICAgKiAgSSAvIE4gPSBOXHJcbiAgICogIEkgLyBJID0gTlxyXG4gICAqXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBkaXZpZGVkIGJ5IGB5YCwgcm91bmRlZCB0b1xyXG4gICAqIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmRpdmlkZWRCeSA9IFAuZGl2ID0gZnVuY3Rpb24gKHkpIHtcclxuICAgIHJldHVybiBkaXZpZGUodGhpcywgbmV3IHRoaXMuY29uc3RydWN0b3IoeSkpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBpbnRlZ2VyIHBhcnQgb2YgZGl2aWRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbFxyXG4gICAqIGJ5IHRoZSB2YWx1ZSBvZiBgeWAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuZGl2aWRlZFRvSW50ZWdlckJ5ID0gUC5kaXZUb0ludCA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICB2YXIgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG4gICAgcmV0dXJuIGZpbmFsaXNlKGRpdmlkZSh4LCBuZXcgQ3Rvcih5KSwgMCwgMSwgMSksIEN0b3IucHJlY2lzaW9uLCBDdG9yLnJvdW5kaW5nKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiBgeWAsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmVxdWFscyA9IFAuZXEgPSBmdW5jdGlvbiAoeSkge1xyXG4gICAgcmV0dXJuIHRoaXMuY21wKHkpID09PSAwO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgcm91bmRlZCB0byBhIHdob2xlIG51bWJlciBpbiB0aGVcclxuICAgKiBkaXJlY3Rpb24gb2YgbmVnYXRpdmUgSW5maW5pdHkuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmZsb29yID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIGZpbmFsaXNlKG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpLCB0aGlzLmUgKyAxLCAzKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgb2YgYHlgLCBvdGhlcndpc2UgcmV0dXJuXHJcbiAgICogZmFsc2UuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmdyZWF0ZXJUaGFuID0gUC5ndCA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICByZXR1cm4gdGhpcy5jbXAoeSkgPiAwO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHRoZSB2YWx1ZSBvZiBgeWAsXHJcbiAgICogb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuZ3JlYXRlclRoYW5PckVxdWFsVG8gPSBQLmd0ZSA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICB2YXIgayA9IHRoaXMuY21wKHkpO1xyXG4gICAgcmV0dXJuIGsgPT0gMSB8fCBrID09PSAwO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBoeXBlcmJvbGljIGNvc2luZSBvZiB0aGUgdmFsdWUgaW4gcmFkaWFucyBvZiB0aGlzXHJcbiAgICogRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICogUmFuZ2U6IFsxLCBJbmZpbml0eV1cclxuICAgKlxyXG4gICAqIGNvc2goeCkgPSAxICsgeF4yLzIhICsgeF40LzQhICsgeF42LzYhICsgLi4uXHJcbiAgICpcclxuICAgKiBjb3NoKDApICAgICAgICAgPSAxXHJcbiAgICogY29zaCgtMCkgICAgICAgID0gMVxyXG4gICAqIGNvc2goSW5maW5pdHkpICA9IEluZmluaXR5XHJcbiAgICogY29zaCgtSW5maW5pdHkpID0gSW5maW5pdHlcclxuICAgKiBjb3NoKE5hTikgICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqICB4ICAgICAgICB0aW1lIHRha2VuIChtcykgICByZXN1bHRcclxuICAgKiAxMDAwICAgICAgOSAgICAgICAgICAgICAgICAgOS44NTAzNTU1NzAwODUyMzQ5Njk0ZSs0MzNcclxuICAgKiAxMDAwMCAgICAgMjUgICAgICAgICAgICAgICAgNC40MDM0MDkxMTI4MzE0NjA3OTM2ZSs0MzQyXHJcbiAgICogMTAwMDAwICAgIDE3MSAgICAgICAgICAgICAgIDEuNDAzMzMxNjgwMjEzMDYxNTg5N2UrNDM0MjlcclxuICAgKiAxMDAwMDAwICAgMzgxNyAgICAgICAgICAgICAgMS41MTY2MDc2OTg0MDEwNDM3NzI1ZSs0MzQyOTRcclxuICAgKiAxMDAwMDAwMCAgYWJhbmRvbmVkIGFmdGVyIDIgbWludXRlIHdhaXRcclxuICAgKlxyXG4gICAqIFRPRE8/IENvbXBhcmUgcGVyZm9ybWFuY2Ugb2YgY29zaCh4KSA9IDAuNSAqIChleHAoeCkgKyBleHAoLXgpKVxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5oeXBlcmJvbGljQ29zaW5lID0gUC5jb3NoID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGssIG4sIHByLCBybSwgbGVuLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3IsXHJcbiAgICAgIG9uZSA9IG5ldyBDdG9yKDEpO1xyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpKSByZXR1cm4gbmV3IEN0b3IoeC5zID8gMSAvIDAgOiBOYU4pO1xyXG4gICAgaWYgKHguaXNaZXJvKCkpIHJldHVybiBvbmU7XHJcblxyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHIgKyBNYXRoLm1heCh4LmUsIHguc2QoKSkgKyA0O1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IDE7XHJcbiAgICBsZW4gPSB4LmQubGVuZ3RoO1xyXG5cclxuICAgIC8vIEFyZ3VtZW50IHJlZHVjdGlvbjogY29zKDR4KSA9IDEgLSA4Y29zXjIoeCkgKyA4Y29zXjQoeCkgKyAxXHJcbiAgICAvLyBpLmUuIGNvcyh4KSA9IDEgLSBjb3NeMih4LzQpKDggLSA4Y29zXjIoeC80KSlcclxuXHJcbiAgICAvLyBFc3RpbWF0ZSB0aGUgb3B0aW11bSBudW1iZXIgb2YgdGltZXMgdG8gdXNlIHRoZSBhcmd1bWVudCByZWR1Y3Rpb24uXHJcbiAgICAvLyBUT0RPPyBFc3RpbWF0aW9uIHJldXNlZCBmcm9tIGNvc2luZSgpIGFuZCBtYXkgbm90IGJlIG9wdGltYWwgaGVyZS5cclxuICAgIGlmIChsZW4gPCAzMikge1xyXG4gICAgICBrID0gTWF0aC5jZWlsKGxlbiAvIDMpO1xyXG4gICAgICBuID0gKDEgLyB0aW55UG93KDQsIGspKS50b1N0cmluZygpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgayA9IDE2O1xyXG4gICAgICBuID0gJzIuMzI4MzA2NDM2NTM4Njk2Mjg5MDYyNWUtMTAnO1xyXG4gICAgfVxyXG5cclxuICAgIHggPSB0YXlsb3JTZXJpZXMoQ3RvciwgMSwgeC50aW1lcyhuKSwgbmV3IEN0b3IoMSksIHRydWUpO1xyXG5cclxuICAgIC8vIFJldmVyc2UgYXJndW1lbnQgcmVkdWN0aW9uXHJcbiAgICB2YXIgY29zaDJfeCxcclxuICAgICAgaSA9IGssXHJcbiAgICAgIGQ4ID0gbmV3IEN0b3IoOCk7XHJcbiAgICBmb3IgKDsgaS0tOykge1xyXG4gICAgICBjb3NoMl94ID0geC50aW1lcyh4KTtcclxuICAgICAgeCA9IG9uZS5taW51cyhjb3NoMl94LnRpbWVzKGQ4Lm1pbnVzKGNvc2gyX3gudGltZXMoZDgpKSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaW5hbGlzZSh4LCBDdG9yLnByZWNpc2lvbiA9IHByLCBDdG9yLnJvdW5kaW5nID0gcm0sIHRydWUpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBoeXBlcmJvbGljIHNpbmUgb2YgdGhlIHZhbHVlIGluIHJhZGlhbnMgb2YgdGhpc1xyXG4gICAqIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBEb21haW46IFstSW5maW5pdHksIEluZmluaXR5XVxyXG4gICAqIFJhbmdlOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKlxyXG4gICAqIHNpbmgoeCkgPSB4ICsgeF4zLzMhICsgeF41LzUhICsgeF43LzchICsgLi4uXHJcbiAgICpcclxuICAgKiBzaW5oKDApICAgICAgICAgPSAwXHJcbiAgICogc2luaCgtMCkgICAgICAgID0gLTBcclxuICAgKiBzaW5oKEluZmluaXR5KSAgPSBJbmZpbml0eVxyXG4gICAqIHNpbmgoLUluZmluaXR5KSA9IC1JbmZpbml0eVxyXG4gICAqIHNpbmgoTmFOKSAgICAgICA9IE5hTlxyXG4gICAqXHJcbiAgICogeCAgICAgICAgdGltZSB0YWtlbiAobXMpXHJcbiAgICogMTAgICAgICAgMiBtc1xyXG4gICAqIDEwMCAgICAgIDUgbXNcclxuICAgKiAxMDAwICAgICAxNCBtc1xyXG4gICAqIDEwMDAwICAgIDgyIG1zXHJcbiAgICogMTAwMDAwICAgODg2IG1zICAgICAgICAgICAgMS40MDMzMzE2ODAyMTMwNjE1ODk3ZSs0MzQyOVxyXG4gICAqIDIwMDAwMCAgIDI2MTMgbXNcclxuICAgKiAzMDAwMDAgICA1NDA3IG1zXHJcbiAgICogNDAwMDAwICAgODgyNCBtc1xyXG4gICAqIDUwMDAwMCAgIDEzMDI2IG1zICAgICAgICAgIDguNzA4MDY0MzYxMjcxODA4NDEyOWUrMjE3MTQ2XHJcbiAgICogMTAwMDAwMCAgNDg1NDMgbXNcclxuICAgKlxyXG4gICAqIFRPRE8/IENvbXBhcmUgcGVyZm9ybWFuY2Ugb2Ygc2luaCh4KSA9IDAuNSAqIChleHAoeCkgLSBleHAoLXgpKVxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5oeXBlcmJvbGljU2luZSA9IFAuc2luaCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBrLCBwciwgcm0sIGxlbixcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpIHx8IHguaXNaZXJvKCkpIHJldHVybiBuZXcgQ3Rvcih4KTtcclxuXHJcbiAgICBwciA9IEN0b3IucHJlY2lzaW9uO1xyXG4gICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIE1hdGgubWF4KHguZSwgeC5zZCgpKSArIDQ7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuICAgIGxlbiA9IHguZC5sZW5ndGg7XHJcblxyXG4gICAgaWYgKGxlbiA8IDMpIHtcclxuICAgICAgeCA9IHRheWxvclNlcmllcyhDdG9yLCAyLCB4LCB4LCB0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAvLyBBbHRlcm5hdGl2ZSBhcmd1bWVudCByZWR1Y3Rpb246IHNpbmgoM3gpID0gc2luaCh4KSgzICsgNHNpbmheMih4KSlcclxuICAgICAgLy8gaS5lLiBzaW5oKHgpID0gc2luaCh4LzMpKDMgKyA0c2luaF4yKHgvMykpXHJcbiAgICAgIC8vIDMgbXVsdGlwbGljYXRpb25zIGFuZCAxIGFkZGl0aW9uXHJcblxyXG4gICAgICAvLyBBcmd1bWVudCByZWR1Y3Rpb246IHNpbmgoNXgpID0gc2luaCh4KSg1ICsgc2luaF4yKHgpKDIwICsgMTZzaW5oXjIoeCkpKVxyXG4gICAgICAvLyBpLmUuIHNpbmgoeCkgPSBzaW5oKHgvNSkoNSArIHNpbmheMih4LzUpKDIwICsgMTZzaW5oXjIoeC81KSkpXHJcbiAgICAgIC8vIDQgbXVsdGlwbGljYXRpb25zIGFuZCAyIGFkZGl0aW9uc1xyXG5cclxuICAgICAgLy8gRXN0aW1hdGUgdGhlIG9wdGltdW0gbnVtYmVyIG9mIHRpbWVzIHRvIHVzZSB0aGUgYXJndW1lbnQgcmVkdWN0aW9uLlxyXG4gICAgICBrID0gMS40ICogTWF0aC5zcXJ0KGxlbik7XHJcbiAgICAgIGsgPSBrID4gMTYgPyAxNiA6IGsgfCAwO1xyXG5cclxuICAgICAgeCA9IHgudGltZXMoMSAvIHRpbnlQb3coNSwgaykpO1xyXG4gICAgICB4ID0gdGF5bG9yU2VyaWVzKEN0b3IsIDIsIHgsIHgsIHRydWUpO1xyXG5cclxuICAgICAgLy8gUmV2ZXJzZSBhcmd1bWVudCByZWR1Y3Rpb25cclxuICAgICAgdmFyIHNpbmgyX3gsXHJcbiAgICAgICAgZDUgPSBuZXcgQ3Rvcig1KSxcclxuICAgICAgICBkMTYgPSBuZXcgQ3RvcigxNiksXHJcbiAgICAgICAgZDIwID0gbmV3IEN0b3IoMjApO1xyXG4gICAgICBmb3IgKDsgay0tOykge1xyXG4gICAgICAgIHNpbmgyX3ggPSB4LnRpbWVzKHgpO1xyXG4gICAgICAgIHggPSB4LnRpbWVzKGQ1LnBsdXMoc2luaDJfeC50aW1lcyhkMTYudGltZXMoc2luaDJfeCkucGx1cyhkMjApKSkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwcjtcclxuICAgIEN0b3Iucm91bmRpbmcgPSBybTtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UoeCwgcHIsIHJtLCB0cnVlKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mIHRoZSB2YWx1ZSBpbiByYWRpYW5zIG9mIHRoaXNcclxuICAgKiBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICogRG9tYWluOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKiBSYW5nZTogWy0xLCAxXVxyXG4gICAqXHJcbiAgICogdGFuaCh4KSA9IHNpbmgoeCkgLyBjb3NoKHgpXHJcbiAgICpcclxuICAgKiB0YW5oKDApICAgICAgICAgPSAwXHJcbiAgICogdGFuaCgtMCkgICAgICAgID0gLTBcclxuICAgKiB0YW5oKEluZmluaXR5KSAgPSAxXHJcbiAgICogdGFuaCgtSW5maW5pdHkpID0gLTFcclxuICAgKiB0YW5oKE5hTikgICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaHlwZXJib2xpY1RhbmdlbnQgPSBQLnRhbmggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgcHIsIHJtLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHJldHVybiBuZXcgQ3Rvcih4LnMpO1xyXG4gICAgaWYgKHguaXNaZXJvKCkpIHJldHVybiBuZXcgQ3Rvcih4KTtcclxuXHJcbiAgICBwciA9IEN0b3IucHJlY2lzaW9uO1xyXG4gICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIDc7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuXHJcbiAgICByZXR1cm4gZGl2aWRlKHguc2luaCgpLCB4LmNvc2goKSwgQ3Rvci5wcmVjaXNpb24gPSBwciwgQ3Rvci5yb3VuZGluZyA9IHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYXJjY29zaW5lIChpbnZlcnNlIGNvc2luZSkgaW4gcmFkaWFucyBvZiB0aGUgdmFsdWUgb2ZcclxuICAgKiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBEb21haW46IFstMSwgMV1cclxuICAgKiBSYW5nZTogWzAsIHBpXVxyXG4gICAqXHJcbiAgICogYWNvcyh4KSA9IHBpLzIgLSBhc2luKHgpXHJcbiAgICpcclxuICAgKiBhY29zKDApICAgICAgID0gcGkvMlxyXG4gICAqIGFjb3MoLTApICAgICAgPSBwaS8yXHJcbiAgICogYWNvcygxKSAgICAgICA9IDBcclxuICAgKiBhY29zKC0xKSAgICAgID0gcGlcclxuICAgKiBhY29zKDEvMikgICAgID0gcGkvM1xyXG4gICAqIGFjb3MoLTEvMikgICAgPSAyKnBpLzNcclxuICAgKiBhY29zKHx4fCA+IDEpID0gTmFOXHJcbiAgICogYWNvcyhOYU4pICAgICA9IE5hTlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5pbnZlcnNlQ29zaW5lID0gUC5hY29zID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGhhbGZQaSxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yLFxyXG4gICAgICBrID0geC5hYnMoKS5jbXAoMSksXHJcbiAgICAgIHByID0gQ3Rvci5wcmVjaXNpb24sXHJcbiAgICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuXHJcbiAgICBpZiAoayAhPT0gLTEpIHtcclxuICAgICAgcmV0dXJuIGsgPT09IDBcclxuICAgICAgICAvLyB8eHwgaXMgMVxyXG4gICAgICAgID8geC5pc05lZygpID8gZ2V0UGkoQ3RvciwgcHIsIHJtKSA6IG5ldyBDdG9yKDApXHJcbiAgICAgICAgLy8gfHh8ID4gMSBvciB4IGlzIE5hTlxyXG4gICAgICAgIDogbmV3IEN0b3IoTmFOKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoeC5pc1plcm8oKSkgcmV0dXJuIGdldFBpKEN0b3IsIHByICsgNCwgcm0pLnRpbWVzKDAuNSk7XHJcblxyXG4gICAgLy8gVE9ETz8gU3BlY2lhbCBjYXNlIGFjb3MoMC41KSA9IHBpLzMgYW5kIGFjb3MoLTAuNSkgPSAyKnBpLzNcclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByICsgNjtcclxuICAgIEN0b3Iucm91bmRpbmcgPSAxO1xyXG5cclxuICAgIHggPSB4LmFzaW4oKTtcclxuICAgIGhhbGZQaSA9IGdldFBpKEN0b3IsIHByICsgNCwgcm0pLnRpbWVzKDAuNSk7XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwcjtcclxuICAgIEN0b3Iucm91bmRpbmcgPSBybTtcclxuXHJcbiAgICByZXR1cm4gaGFsZlBpLm1pbnVzKHgpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBpbnZlcnNlIG9mIHRoZSBoeXBlcmJvbGljIGNvc2luZSBpbiByYWRpYW5zIG9mIHRoZVxyXG4gICAqIHZhbHVlIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWzEsIEluZmluaXR5XVxyXG4gICAqIFJhbmdlOiBbMCwgSW5maW5pdHldXHJcbiAgICpcclxuICAgKiBhY29zaCh4KSA9IGxuKHggKyBzcXJ0KHheMiAtIDEpKVxyXG4gICAqXHJcbiAgICogYWNvc2goeCA8IDEpICAgICA9IE5hTlxyXG4gICAqIGFjb3NoKE5hTikgICAgICAgPSBOYU5cclxuICAgKiBhY29zaChJbmZpbml0eSkgID0gSW5maW5pdHlcclxuICAgKiBhY29zaCgtSW5maW5pdHkpID0gTmFOXHJcbiAgICogYWNvc2goMCkgICAgICAgICA9IE5hTlxyXG4gICAqIGFjb3NoKC0wKSAgICAgICAgPSBOYU5cclxuICAgKiBhY29zaCgxKSAgICAgICAgID0gMFxyXG4gICAqIGFjb3NoKC0xKSAgICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaW52ZXJzZUh5cGVyYm9saWNDb3NpbmUgPSBQLmFjb3NoID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHByLCBybSxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICh4Lmx0ZSgxKSkgcmV0dXJuIG5ldyBDdG9yKHguZXEoMSkgPyAwIDogTmFOKTtcclxuICAgIGlmICgheC5pc0Zpbml0ZSgpKSByZXR1cm4gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHIgKyBNYXRoLm1heChNYXRoLmFicyh4LmUpLCB4LnNkKCkpICsgNDtcclxuICAgIEN0b3Iucm91bmRpbmcgPSAxO1xyXG4gICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuXHJcbiAgICB4ID0geC50aW1lcyh4KS5taW51cygxKS5zcXJ0KCkucGx1cyh4KTtcclxuXHJcbiAgICBleHRlcm5hbCA9IHRydWU7XHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IHJtO1xyXG5cclxuICAgIHJldHVybiB4LmxuKCk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGludmVyc2Ugb2YgdGhlIGh5cGVyYm9saWMgc2luZSBpbiByYWRpYW5zIG9mIHRoZSB2YWx1ZVxyXG4gICAqIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICogUmFuZ2U6IFstSW5maW5pdHksIEluZmluaXR5XVxyXG4gICAqXHJcbiAgICogYXNpbmgoeCkgPSBsbih4ICsgc3FydCh4XjIgKyAxKSlcclxuICAgKlxyXG4gICAqIGFzaW5oKE5hTikgICAgICAgPSBOYU5cclxuICAgKiBhc2luaChJbmZpbml0eSkgID0gSW5maW5pdHlcclxuICAgKiBhc2luaCgtSW5maW5pdHkpID0gLUluZmluaXR5XHJcbiAgICogYXNpbmgoMCkgICAgICAgICA9IDBcclxuICAgKiBhc2luaCgtMCkgICAgICAgID0gLTBcclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaW52ZXJzZUh5cGVyYm9saWNTaW5lID0gUC5hc2luaCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBwciwgcm0sXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICBpZiAoIXguaXNGaW5pdGUoKSB8fCB4LmlzWmVybygpKSByZXR1cm4gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHIgKyAyICogTWF0aC5tYXgoTWF0aC5hYnMoeC5lKSwgeC5zZCgpKSArIDY7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgeCA9IHgudGltZXMoeCkucGx1cygxKS5zcXJ0KCkucGx1cyh4KTtcclxuXHJcbiAgICBleHRlcm5hbCA9IHRydWU7XHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IHJtO1xyXG5cclxuICAgIHJldHVybiB4LmxuKCk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGludmVyc2Ugb2YgdGhlIGh5cGVyYm9saWMgdGFuZ2VudCBpbiByYWRpYW5zIG9mIHRoZVxyXG4gICAqIHZhbHVlIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy0xLCAxXVxyXG4gICAqIFJhbmdlOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKlxyXG4gICAqIGF0YW5oKHgpID0gMC41ICogbG4oKDEgKyB4KSAvICgxIC0geCkpXHJcbiAgICpcclxuICAgKiBhdGFuaCh8eHwgPiAxKSAgID0gTmFOXHJcbiAgICogYXRhbmgoTmFOKSAgICAgICA9IE5hTlxyXG4gICAqIGF0YW5oKEluZmluaXR5KSAgPSBOYU5cclxuICAgKiBhdGFuaCgtSW5maW5pdHkpID0gTmFOXHJcbiAgICogYXRhbmgoMCkgICAgICAgICA9IDBcclxuICAgKiBhdGFuaCgtMCkgICAgICAgID0gLTBcclxuICAgKiBhdGFuaCgxKSAgICAgICAgID0gSW5maW5pdHlcclxuICAgKiBhdGFuaCgtMSkgICAgICAgID0gLUluZmluaXR5XHJcbiAgICpcclxuICAgKi9cclxuICBQLmludmVyc2VIeXBlcmJvbGljVGFuZ2VudCA9IFAuYXRhbmggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgcHIsIHJtLCB3cHIsIHhzZCxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpKSByZXR1cm4gbmV3IEN0b3IoTmFOKTtcclxuICAgIGlmICh4LmUgPj0gMCkgcmV0dXJuIG5ldyBDdG9yKHguYWJzKCkuZXEoMSkgPyB4LnMgLyAwIDogeC5pc1plcm8oKSA/IHggOiBOYU4pO1xyXG5cclxuICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICB4c2QgPSB4LnNkKCk7XHJcblxyXG4gICAgaWYgKE1hdGgubWF4KHhzZCwgcHIpIDwgMiAqIC14LmUgLSAxKSByZXR1cm4gZmluYWxpc2UobmV3IEN0b3IoeCksIHByLCBybSwgdHJ1ZSk7XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSB3cHIgPSB4c2QgLSB4LmU7XHJcblxyXG4gICAgeCA9IGRpdmlkZSh4LnBsdXMoMSksIG5ldyBDdG9yKDEpLm1pbnVzKHgpLCB3cHIgKyBwciwgMSk7XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIDQ7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuXHJcbiAgICB4ID0geC5sbigpO1xyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHI7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gcm07XHJcblxyXG4gICAgcmV0dXJuIHgudGltZXMoMC41KTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYXJjc2luZSAoaW52ZXJzZSBzaW5lKSBpbiByYWRpYW5zIG9mIHRoZSB2YWx1ZSBvZiB0aGlzXHJcbiAgICogRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICogUmFuZ2U6IFstcGkvMiwgcGkvMl1cclxuICAgKlxyXG4gICAqIGFzaW4oeCkgPSAyKmF0YW4oeC8oMSArIHNxcnQoMSAtIHheMikpKVxyXG4gICAqXHJcbiAgICogYXNpbigwKSAgICAgICA9IDBcclxuICAgKiBhc2luKC0wKSAgICAgID0gLTBcclxuICAgKiBhc2luKDEvMikgICAgID0gcGkvNlxyXG4gICAqIGFzaW4oLTEvMikgICAgPSAtcGkvNlxyXG4gICAqIGFzaW4oMSkgICAgICAgPSBwaS8yXHJcbiAgICogYXNpbigtMSkgICAgICA9IC1waS8yXHJcbiAgICogYXNpbih8eHwgPiAxKSA9IE5hTlxyXG4gICAqIGFzaW4oTmFOKSAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqIFRPRE8/IENvbXBhcmUgcGVyZm9ybWFuY2Ugb2YgVGF5bG9yIHNlcmllcy5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaW52ZXJzZVNpbmUgPSBQLmFzaW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgaGFsZlBpLCBrLFxyXG4gICAgICBwciwgcm0sXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICBpZiAoeC5pc1plcm8oKSkgcmV0dXJuIG5ldyBDdG9yKHgpO1xyXG5cclxuICAgIGsgPSB4LmFicygpLmNtcCgxKTtcclxuICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcblxyXG4gICAgaWYgKGsgIT09IC0xKSB7XHJcblxyXG4gICAgICAvLyB8eHwgaXMgMVxyXG4gICAgICBpZiAoayA9PT0gMCkge1xyXG4gICAgICAgIGhhbGZQaSA9IGdldFBpKEN0b3IsIHByICsgNCwgcm0pLnRpbWVzKDAuNSk7XHJcbiAgICAgICAgaGFsZlBpLnMgPSB4LnM7XHJcbiAgICAgICAgcmV0dXJuIGhhbGZQaTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gfHh8ID4gMSBvciB4IGlzIE5hTlxyXG4gICAgICByZXR1cm4gbmV3IEN0b3IoTmFOKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUT0RPPyBTcGVjaWFsIGNhc2UgYXNpbigxLzIpID0gcGkvNiBhbmQgYXNpbigtMS8yKSA9IC1waS82XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIDY7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuXHJcbiAgICB4ID0geC5kaXYobmV3IEN0b3IoMSkubWludXMoeC50aW1lcyh4KSkuc3FydCgpLnBsdXMoMSkpLmF0YW4oKTtcclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IHJtO1xyXG5cclxuICAgIHJldHVybiB4LnRpbWVzKDIpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBhcmN0YW5nZW50IChpbnZlcnNlIHRhbmdlbnQpIGluIHJhZGlhbnMgb2YgdGhlIHZhbHVlXHJcbiAgICogb2YgdGhpcyBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICogRG9tYWluOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKiBSYW5nZTogWy1waS8yLCBwaS8yXVxyXG4gICAqXHJcbiAgICogYXRhbih4KSA9IHggLSB4XjMvMyArIHheNS81IC0geF43LzcgKyAuLi5cclxuICAgKlxyXG4gICAqIGF0YW4oMCkgICAgICAgICA9IDBcclxuICAgKiBhdGFuKC0wKSAgICAgICAgPSAtMFxyXG4gICAqIGF0YW4oMSkgICAgICAgICA9IHBpLzRcclxuICAgKiBhdGFuKC0xKSAgICAgICAgPSAtcGkvNFxyXG4gICAqIGF0YW4oSW5maW5pdHkpICA9IHBpLzJcclxuICAgKiBhdGFuKC1JbmZpbml0eSkgPSAtcGkvMlxyXG4gICAqIGF0YW4oTmFOKSAgICAgICA9IE5hTlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5pbnZlcnNlVGFuZ2VudCA9IFAuYXRhbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBpLCBqLCBrLCBuLCBweCwgdCwgciwgd3ByLCB4MixcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yLFxyXG4gICAgICBwciA9IEN0b3IucHJlY2lzaW9uLFxyXG4gICAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcblxyXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHtcclxuICAgICAgaWYgKCF4LnMpIHJldHVybiBuZXcgQ3RvcihOYU4pO1xyXG4gICAgICBpZiAocHIgKyA0IDw9IFBJX1BSRUNJU0lPTikge1xyXG4gICAgICAgIHIgPSBnZXRQaShDdG9yLCBwciArIDQsIHJtKS50aW1lcygwLjUpO1xyXG4gICAgICAgIHIucyA9IHgucztcclxuICAgICAgICByZXR1cm4gcjtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh4LmlzWmVybygpKSB7XHJcbiAgICAgIHJldHVybiBuZXcgQ3Rvcih4KTtcclxuICAgIH0gZWxzZSBpZiAoeC5hYnMoKS5lcSgxKSAmJiBwciArIDQgPD0gUElfUFJFQ0lTSU9OKSB7XHJcbiAgICAgIHIgPSBnZXRQaShDdG9yLCBwciArIDQsIHJtKS50aW1lcygwLjI1KTtcclxuICAgICAgci5zID0geC5zO1xyXG4gICAgICByZXR1cm4gcjtcclxuICAgIH1cclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHdwciA9IHByICsgMTA7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuXHJcbiAgICAvLyBUT0RPPyBpZiAoeCA+PSAxICYmIHByIDw9IFBJX1BSRUNJU0lPTikgYXRhbih4KSA9IGhhbGZQaSAqIHgucyAtIGF0YW4oMSAvIHgpO1xyXG5cclxuICAgIC8vIEFyZ3VtZW50IHJlZHVjdGlvblxyXG4gICAgLy8gRW5zdXJlIHx4fCA8IDAuNDJcclxuICAgIC8vIGF0YW4oeCkgPSAyICogYXRhbih4IC8gKDEgKyBzcXJ0KDEgKyB4XjIpKSlcclxuXHJcbiAgICBrID0gTWF0aC5taW4oMjgsIHdwciAvIExPR19CQVNFICsgMiB8IDApO1xyXG5cclxuICAgIGZvciAoaSA9IGs7IGk7IC0taSkgeCA9IHguZGl2KHgudGltZXMoeCkucGx1cygxKS5zcXJ0KCkucGx1cygxKSk7XHJcblxyXG4gICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuXHJcbiAgICBqID0gTWF0aC5jZWlsKHdwciAvIExPR19CQVNFKTtcclxuICAgIG4gPSAxO1xyXG4gICAgeDIgPSB4LnRpbWVzKHgpO1xyXG4gICAgciA9IG5ldyBDdG9yKHgpO1xyXG4gICAgcHggPSB4O1xyXG5cclxuICAgIC8vIGF0YW4oeCkgPSB4IC0geF4zLzMgKyB4XjUvNSAtIHheNy83ICsgLi4uXHJcbiAgICBmb3IgKDsgaSAhPT0gLTE7KSB7XHJcbiAgICAgIHB4ID0gcHgudGltZXMoeDIpO1xyXG4gICAgICB0ID0gci5taW51cyhweC5kaXYobiArPSAyKSk7XHJcblxyXG4gICAgICBweCA9IHB4LnRpbWVzKHgyKTtcclxuICAgICAgciA9IHQucGx1cyhweC5kaXYobiArPSAyKSk7XHJcblxyXG4gICAgICBpZiAoci5kW2pdICE9PSB2b2lkIDApIGZvciAoaSA9IGo7IHIuZFtpXSA9PT0gdC5kW2ldICYmIGktLTspO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChrKSByID0gci50aW1lcygyIDw8IChrIC0gMSkpO1xyXG5cclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UociwgQ3Rvci5wcmVjaXNpb24gPSBwciwgQ3Rvci5yb3VuZGluZyA9IHJtLCB0cnVlKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIGEgZmluaXRlIG51bWJlciwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaXNGaW5pdGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLmQ7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpcyBhbiBpbnRlZ2VyLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5pc0ludGVnZXIgPSBQLmlzSW50ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuICEhdGhpcy5kICYmIG1hdGhmbG9vcih0aGlzLmUgLyBMT0dfQkFTRSkgPiB0aGlzLmQubGVuZ3RoIC0gMjtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIE5hTiwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaXNOYU4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gIXRoaXMucztcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIG5lZ2F0aXZlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5pc05lZ2F0aXZlID0gUC5pc05lZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLnMgPCAwO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgcG9zaXRpdmUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmlzUG9zaXRpdmUgPSBQLmlzUG9zID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIHRoaXMucyA+IDA7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpcyAwIG9yIC0wLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5pc1plcm8gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gISF0aGlzLmQgJiYgdGhpcy5kWzBdID09PSAwO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgbGVzcyB0aGFuIGB5YCwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAubGVzc1RoYW4gPSBQLmx0ID0gZnVuY3Rpb24gKHkpIHtcclxuICAgIHJldHVybiB0aGlzLmNtcCh5KSA8IDA7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYHlgLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5sZXNzVGhhbk9yRXF1YWxUbyA9IFAubHRlID0gZnVuY3Rpb24gKHkpIHtcclxuICAgIHJldHVybiB0aGlzLmNtcCh5KSA8IDE7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRoZSBsb2dhcml0aG0gb2YgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCB0byB0aGUgc3BlY2lmaWVkIGJhc2UsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogSWYgbm8gYmFzZSBpcyBzcGVjaWZpZWQsIHJldHVybiBsb2dbMTBdKGFyZykuXHJcbiAgICpcclxuICAgKiBsb2dbYmFzZV0oYXJnKSA9IGxuKGFyZykgLyBsbihiYXNlKVxyXG4gICAqXHJcbiAgICogVGhlIHJlc3VsdCB3aWxsIGFsd2F5cyBiZSBjb3JyZWN0bHkgcm91bmRlZCBpZiB0aGUgYmFzZSBvZiB0aGUgbG9nIGlzIDEwLCBhbmQgJ2FsbW9zdCBhbHdheXMnXHJcbiAgICogb3RoZXJ3aXNlOlxyXG4gICAqXHJcbiAgICogRGVwZW5kaW5nIG9uIHRoZSByb3VuZGluZyBtb2RlLCB0aGUgcmVzdWx0IG1heSBiZSBpbmNvcnJlY3RseSByb3VuZGVkIGlmIHRoZSBmaXJzdCBmaWZ0ZWVuXHJcbiAgICogcm91bmRpbmcgZGlnaXRzIGFyZSBbNDldOTk5OTk5OTk5OTk5OTkgb3IgWzUwXTAwMDAwMDAwMDAwMDAwLiBJbiB0aGF0IGNhc2UsIHRoZSBtYXhpbXVtIGVycm9yXHJcbiAgICogYmV0d2VlbiB0aGUgcmVzdWx0IGFuZCB0aGUgY29ycmVjdGx5IHJvdW5kZWQgcmVzdWx0IHdpbGwgYmUgb25lIHVscCAodW5pdCBpbiB0aGUgbGFzdCBwbGFjZSkuXHJcbiAgICpcclxuICAgKiBsb2dbLWJdKGEpICAgICAgID0gTmFOXHJcbiAgICogbG9nWzBdKGEpICAgICAgICA9IE5hTlxyXG4gICAqIGxvZ1sxXShhKSAgICAgICAgPSBOYU5cclxuICAgKiBsb2dbTmFOXShhKSAgICAgID0gTmFOXHJcbiAgICogbG9nW0luZmluaXR5XShhKSA9IE5hTlxyXG4gICAqIGxvZ1tiXSgwKSAgICAgICAgPSAtSW5maW5pdHlcclxuICAgKiBsb2dbYl0oLTApICAgICAgID0gLUluZmluaXR5XHJcbiAgICogbG9nW2JdKC1hKSAgICAgICA9IE5hTlxyXG4gICAqIGxvZ1tiXSgxKSAgICAgICAgPSAwXHJcbiAgICogbG9nW2JdKEluZmluaXR5KSA9IEluZmluaXR5XHJcbiAgICogbG9nW2JdKE5hTikgICAgICA9IE5hTlxyXG4gICAqXHJcbiAgICogW2Jhc2VdIHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBiYXNlIG9mIHRoZSBsb2dhcml0aG0uXHJcbiAgICpcclxuICAgKi9cclxuICBQLmxvZ2FyaXRobSA9IFAubG9nID0gZnVuY3Rpb24gKGJhc2UpIHtcclxuICAgIHZhciBpc0Jhc2UxMCwgZCwgZGVub21pbmF0b3IsIGssIGluZiwgbnVtLCBzZCwgcixcclxuICAgICAgYXJnID0gdGhpcyxcclxuICAgICAgQ3RvciA9IGFyZy5jb25zdHJ1Y3RvcixcclxuICAgICAgcHIgPSBDdG9yLnByZWNpc2lvbixcclxuICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nLFxyXG4gICAgICBndWFyZCA9IDU7XHJcblxyXG4gICAgLy8gRGVmYXVsdCBiYXNlIGlzIDEwLlxyXG4gICAgaWYgKGJhc2UgPT0gbnVsbCkge1xyXG4gICAgICBiYXNlID0gbmV3IEN0b3IoMTApO1xyXG4gICAgICBpc0Jhc2UxMCA9IHRydWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBiYXNlID0gbmV3IEN0b3IoYmFzZSk7XHJcbiAgICAgIGQgPSBiYXNlLmQ7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gTmFOIGlmIGJhc2UgaXMgbmVnYXRpdmUsIG9yIG5vbi1maW5pdGUsIG9yIGlzIDAgb3IgMS5cclxuICAgICAgaWYgKGJhc2UucyA8IDAgfHwgIWQgfHwgIWRbMF0gfHwgYmFzZS5lcSgxKSkgcmV0dXJuIG5ldyBDdG9yKE5hTik7XHJcblxyXG4gICAgICBpc0Jhc2UxMCA9IGJhc2UuZXEoMTApO1xyXG4gICAgfVxyXG5cclxuICAgIGQgPSBhcmcuZDtcclxuXHJcbiAgICAvLyBJcyBhcmcgbmVnYXRpdmUsIG5vbi1maW5pdGUsIDAgb3IgMT9cclxuICAgIGlmIChhcmcucyA8IDAgfHwgIWQgfHwgIWRbMF0gfHwgYXJnLmVxKDEpKSB7XHJcbiAgICAgIHJldHVybiBuZXcgQ3RvcihkICYmICFkWzBdID8gLTEgLyAwIDogYXJnLnMgIT0gMSA/IE5hTiA6IGQgPyAwIDogMSAvIDApO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRoZSByZXN1bHQgd2lsbCBoYXZlIGEgbm9uLXRlcm1pbmF0aW5nIGRlY2ltYWwgZXhwYW5zaW9uIGlmIGJhc2UgaXMgMTAgYW5kIGFyZyBpcyBub3QgYW5cclxuICAgIC8vIGludGVnZXIgcG93ZXIgb2YgMTAuXHJcbiAgICBpZiAoaXNCYXNlMTApIHtcclxuICAgICAgaWYgKGQubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIGluZiA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZm9yIChrID0gZFswXTsgayAlIDEwID09PSAwOykgayAvPSAxMDtcclxuICAgICAgICBpbmYgPSBrICE9PSAxO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuICAgIHNkID0gcHIgKyBndWFyZDtcclxuICAgIG51bSA9IG5hdHVyYWxMb2dhcml0aG0oYXJnLCBzZCk7XHJcbiAgICBkZW5vbWluYXRvciA9IGlzQmFzZTEwID8gZ2V0TG4xMChDdG9yLCBzZCArIDEwKSA6IG5hdHVyYWxMb2dhcml0aG0oYmFzZSwgc2QpO1xyXG5cclxuICAgIC8vIFRoZSByZXN1bHQgd2lsbCBoYXZlIDUgcm91bmRpbmcgZGlnaXRzLlxyXG4gICAgciA9IGRpdmlkZShudW0sIGRlbm9taW5hdG9yLCBzZCwgMSk7XHJcblxyXG4gICAgLy8gSWYgYXQgYSByb3VuZGluZyBib3VuZGFyeSwgaS5lLiB0aGUgcmVzdWx0J3Mgcm91bmRpbmcgZGlnaXRzIGFyZSBbNDldOTk5OSBvciBbNTBdMDAwMCxcclxuICAgIC8vIGNhbGN1bGF0ZSAxMCBmdXJ0aGVyIGRpZ2l0cy5cclxuICAgIC8vXHJcbiAgICAvLyBJZiB0aGUgcmVzdWx0IGlzIGtub3duIHRvIGhhdmUgYW4gaW5maW5pdGUgZGVjaW1hbCBleHBhbnNpb24sIHJlcGVhdCB0aGlzIHVudGlsIGl0IGlzIGNsZWFyXHJcbiAgICAvLyB0aGF0IHRoZSByZXN1bHQgaXMgYWJvdmUgb3IgYmVsb3cgdGhlIGJvdW5kYXJ5LiBPdGhlcndpc2UsIGlmIGFmdGVyIGNhbGN1bGF0aW5nIHRoZSAxMFxyXG4gICAgLy8gZnVydGhlciBkaWdpdHMsIHRoZSBsYXN0IDE0IGFyZSBuaW5lcywgcm91bmQgdXAgYW5kIGFzc3VtZSB0aGUgcmVzdWx0IGlzIGV4YWN0LlxyXG4gICAgLy8gQWxzbyBhc3N1bWUgdGhlIHJlc3VsdCBpcyBleGFjdCBpZiB0aGUgbGFzdCAxNCBhcmUgemVyby5cclxuICAgIC8vXHJcbiAgICAvLyBFeGFtcGxlIG9mIGEgcmVzdWx0IHRoYXQgd2lsbCBiZSBpbmNvcnJlY3RseSByb3VuZGVkOlxyXG4gICAgLy8gbG9nWzEwNDg1NzZdKDQ1MDM1OTk2MjczNzA1MDIpID0gMi42MDAwMDAwMDAwMDAwMDAwOTYxMDI3OTUxMTQ0NDc0Ni4uLlxyXG4gICAgLy8gVGhlIGFib3ZlIHJlc3VsdCBjb3JyZWN0bHkgcm91bmRlZCB1c2luZyBST1VORF9DRUlMIHRvIDEgZGVjaW1hbCBwbGFjZSBzaG91bGQgYmUgMi43LCBidXQgaXRcclxuICAgIC8vIHdpbGwgYmUgZ2l2ZW4gYXMgMi42IGFzIHRoZXJlIGFyZSAxNSB6ZXJvcyBpbW1lZGlhdGVseSBhZnRlciB0aGUgcmVxdWVzdGVkIGRlY2ltYWwgcGxhY2UsIHNvXHJcbiAgICAvLyB0aGUgZXhhY3QgcmVzdWx0IHdvdWxkIGJlIGFzc3VtZWQgdG8gYmUgMi42LCB3aGljaCByb3VuZGVkIHVzaW5nIFJPVU5EX0NFSUwgdG8gMSBkZWNpbWFsXHJcbiAgICAvLyBwbGFjZSBpcyBzdGlsbCAyLjYuXHJcbiAgICBpZiAoY2hlY2tSb3VuZGluZ0RpZ2l0cyhyLmQsIGsgPSBwciwgcm0pKSB7XHJcblxyXG4gICAgICBkbyB7XHJcbiAgICAgICAgc2QgKz0gMTA7XHJcbiAgICAgICAgbnVtID0gbmF0dXJhbExvZ2FyaXRobShhcmcsIHNkKTtcclxuICAgICAgICBkZW5vbWluYXRvciA9IGlzQmFzZTEwID8gZ2V0TG4xMChDdG9yLCBzZCArIDEwKSA6IG5hdHVyYWxMb2dhcml0aG0oYmFzZSwgc2QpO1xyXG4gICAgICAgIHIgPSBkaXZpZGUobnVtLCBkZW5vbWluYXRvciwgc2QsIDEpO1xyXG5cclxuICAgICAgICBpZiAoIWluZikge1xyXG5cclxuICAgICAgICAgIC8vIENoZWNrIGZvciAxNCBuaW5lcyBmcm9tIHRoZSAybmQgcm91bmRpbmcgZGlnaXQsIGFzIHRoZSBmaXJzdCBtYXkgYmUgNC5cclxuICAgICAgICAgIGlmICgrZGlnaXRzVG9TdHJpbmcoci5kKS5zbGljZShrICsgMSwgayArIDE1KSArIDEgPT0gMWUxNCkge1xyXG4gICAgICAgICAgICByID0gZmluYWxpc2UociwgcHIgKyAxLCAwKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH0gd2hpbGUgKGNoZWNrUm91bmRpbmdEaWdpdHMoci5kLCBrICs9IDEwLCBybSkpO1xyXG4gICAgfVxyXG5cclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UociwgcHIsIHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbWF4aW11bSBvZiB0aGUgYXJndW1lbnRzIGFuZCB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICBQLm1heCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmNhbGwoYXJndW1lbnRzLCB0aGlzKTtcclxuICAgIHJldHVybiBtYXhPck1pbih0aGlzLmNvbnN0cnVjdG9yLCBhcmd1bWVudHMsICdsdCcpO1xyXG4gIH07XHJcbiAgICovXHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBtaW5pbXVtIG9mIHRoZSBhcmd1bWVudHMgYW5kIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBhcmd1bWVudHMge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gIFAubWluID0gZnVuY3Rpb24gKCkge1xyXG4gICAgQXJyYXkucHJvdG90eXBlLnB1c2guY2FsbChhcmd1bWVudHMsIHRoaXMpO1xyXG4gICAgcmV0dXJuIG1heE9yTWluKHRoaXMuY29uc3RydWN0b3IsIGFyZ3VtZW50cywgJ2d0Jyk7XHJcbiAgfTtcclxuICAgKi9cclxuXHJcblxyXG4gIC8qXHJcbiAgICogIG4gLSAwID0gblxyXG4gICAqICBuIC0gTiA9IE5cclxuICAgKiAgbiAtIEkgPSAtSVxyXG4gICAqICAwIC0gbiA9IC1uXHJcbiAgICogIDAgLSAwID0gMFxyXG4gICAqICAwIC0gTiA9IE5cclxuICAgKiAgMCAtIEkgPSAtSVxyXG4gICAqICBOIC0gbiA9IE5cclxuICAgKiAgTiAtIDAgPSBOXHJcbiAgICogIE4gLSBOID0gTlxyXG4gICAqICBOIC0gSSA9IE5cclxuICAgKiAgSSAtIG4gPSBJXHJcbiAgICogIEkgLSAwID0gSVxyXG4gICAqICBJIC0gTiA9IE5cclxuICAgKiAgSSAtIEkgPSBOXHJcbiAgICpcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIG1pbnVzIGB5YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYFxyXG4gICAqIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKi9cclxuICBQLm1pbnVzID0gUC5zdWIgPSBmdW5jdGlvbiAoeSkge1xyXG4gICAgdmFyIGQsIGUsIGksIGosIGssIGxlbiwgcHIsIHJtLCB4ZCwgeGUsIHhMVHksIHlkLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgeSA9IG5ldyBDdG9yKHkpO1xyXG5cclxuICAgIC8vIElmIGVpdGhlciBpcyBub3QgZmluaXRlLi4uXHJcbiAgICBpZiAoIXguZCB8fCAheS5kKSB7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gTmFOIGlmIGVpdGhlciBpcyBOYU4uXHJcbiAgICAgIGlmICgheC5zIHx8ICF5LnMpIHkgPSBuZXcgQ3RvcihOYU4pO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIHkgbmVnYXRlZCBpZiB4IGlzIGZpbml0ZSBhbmQgeSBpcyDCsUluZmluaXR5LlxyXG4gICAgICBlbHNlIGlmICh4LmQpIHkucyA9IC15LnM7XHJcblxyXG4gICAgICAvLyBSZXR1cm4geCBpZiB5IGlzIGZpbml0ZSBhbmQgeCBpcyDCsUluZmluaXR5LlxyXG4gICAgICAvLyBSZXR1cm4geCBpZiBib3RoIGFyZSDCsUluZmluaXR5IHdpdGggZGlmZmVyZW50IHNpZ25zLlxyXG4gICAgICAvLyBSZXR1cm4gTmFOIGlmIGJvdGggYXJlIMKxSW5maW5pdHkgd2l0aCB0aGUgc2FtZSBzaWduLlxyXG4gICAgICBlbHNlIHkgPSBuZXcgQ3Rvcih5LmQgfHwgeC5zICE9PSB5LnMgPyB4IDogTmFOKTtcclxuXHJcbiAgICAgIHJldHVybiB5O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHNpZ25zIGRpZmZlci4uLlxyXG4gICAgaWYgKHgucyAhPSB5LnMpIHtcclxuICAgICAgeS5zID0gLXkucztcclxuICAgICAgcmV0dXJuIHgucGx1cyh5KTtcclxuICAgIH1cclxuXHJcbiAgICB4ZCA9IHguZDtcclxuICAgIHlkID0geS5kO1xyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuXHJcbiAgICAvLyBJZiBlaXRoZXIgaXMgemVyby4uLlxyXG4gICAgaWYgKCF4ZFswXSB8fCAheWRbMF0pIHtcclxuXHJcbiAgICAgIC8vIFJldHVybiB5IG5lZ2F0ZWQgaWYgeCBpcyB6ZXJvIGFuZCB5IGlzIG5vbi16ZXJvLlxyXG4gICAgICBpZiAoeWRbMF0pIHkucyA9IC15LnM7XHJcblxyXG4gICAgICAvLyBSZXR1cm4geCBpZiB5IGlzIHplcm8gYW5kIHggaXMgbm9uLXplcm8uXHJcbiAgICAgIGVsc2UgaWYgKHhkWzBdKSB5ID0gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gemVybyBpZiBib3RoIGFyZSB6ZXJvLlxyXG4gICAgICAvLyBGcm9tIElFRUUgNzU0ICgyMDA4KSA2LjM6IDAgLSAwID0gLTAgLSAtMCA9IC0wIHdoZW4gcm91bmRpbmcgdG8gLUluZmluaXR5LlxyXG4gICAgICBlbHNlIHJldHVybiBuZXcgQ3RvcihybSA9PT0gMyA/IC0wIDogMCk7XHJcblxyXG4gICAgICByZXR1cm4gZXh0ZXJuYWwgPyBmaW5hbGlzZSh5LCBwciwgcm0pIDogeTtcclxuICAgIH1cclxuXHJcbiAgICAvLyB4IGFuZCB5IGFyZSBmaW5pdGUsIG5vbi16ZXJvIG51bWJlcnMgd2l0aCB0aGUgc2FtZSBzaWduLlxyXG5cclxuICAgIC8vIENhbGN1bGF0ZSBiYXNlIDFlNyBleHBvbmVudHMuXHJcbiAgICBlID0gbWF0aGZsb29yKHkuZSAvIExPR19CQVNFKTtcclxuICAgIHhlID0gbWF0aGZsb29yKHguZSAvIExPR19CQVNFKTtcclxuXHJcbiAgICB4ZCA9IHhkLnNsaWNlKCk7XHJcbiAgICBrID0geGUgLSBlO1xyXG5cclxuICAgIC8vIElmIGJhc2UgMWU3IGV4cG9uZW50cyBkaWZmZXIuLi5cclxuICAgIGlmIChrKSB7XHJcbiAgICAgIHhMVHkgPSBrIDwgMDtcclxuXHJcbiAgICAgIGlmICh4TFR5KSB7XHJcbiAgICAgICAgZCA9IHhkO1xyXG4gICAgICAgIGsgPSAtaztcclxuICAgICAgICBsZW4gPSB5ZC5sZW5ndGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZCA9IHlkO1xyXG4gICAgICAgIGUgPSB4ZTtcclxuICAgICAgICBsZW4gPSB4ZC5sZW5ndGg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIE51bWJlcnMgd2l0aCBtYXNzaXZlbHkgZGlmZmVyZW50IGV4cG9uZW50cyB3b3VsZCByZXN1bHQgaW4gYSB2ZXJ5IGhpZ2ggbnVtYmVyIG9mXHJcbiAgICAgIC8vIHplcm9zIG5lZWRpbmcgdG8gYmUgcHJlcGVuZGVkLCBidXQgdGhpcyBjYW4gYmUgYXZvaWRlZCB3aGlsZSBzdGlsbCBlbnN1cmluZyBjb3JyZWN0XHJcbiAgICAgIC8vIHJvdW5kaW5nIGJ5IGxpbWl0aW5nIHRoZSBudW1iZXIgb2YgemVyb3MgdG8gYE1hdGguY2VpbChwciAvIExPR19CQVNFKSArIDJgLlxyXG4gICAgICBpID0gTWF0aC5tYXgoTWF0aC5jZWlsKHByIC8gTE9HX0JBU0UpLCBsZW4pICsgMjtcclxuXHJcbiAgICAgIGlmIChrID4gaSkge1xyXG4gICAgICAgIGsgPSBpO1xyXG4gICAgICAgIGQubGVuZ3RoID0gMTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUHJlcGVuZCB6ZXJvcyB0byBlcXVhbGlzZSBleHBvbmVudHMuXHJcbiAgICAgIGQucmV2ZXJzZSgpO1xyXG4gICAgICBmb3IgKGkgPSBrOyBpLS07KSBkLnB1c2goMCk7XHJcbiAgICAgIGQucmV2ZXJzZSgpO1xyXG5cclxuICAgIC8vIEJhc2UgMWU3IGV4cG9uZW50cyBlcXVhbC5cclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAvLyBDaGVjayBkaWdpdHMgdG8gZGV0ZXJtaW5lIHdoaWNoIGlzIHRoZSBiaWdnZXIgbnVtYmVyLlxyXG5cclxuICAgICAgaSA9IHhkLmxlbmd0aDtcclxuICAgICAgbGVuID0geWQubGVuZ3RoO1xyXG4gICAgICB4TFR5ID0gaSA8IGxlbjtcclxuICAgICAgaWYgKHhMVHkpIGxlbiA9IGk7XHJcblxyXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICBpZiAoeGRbaV0gIT0geWRbaV0pIHtcclxuICAgICAgICAgIHhMVHkgPSB4ZFtpXSA8IHlkW2ldO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBrID0gMDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoeExUeSkge1xyXG4gICAgICBkID0geGQ7XHJcbiAgICAgIHhkID0geWQ7XHJcbiAgICAgIHlkID0gZDtcclxuICAgICAgeS5zID0gLXkucztcclxuICAgIH1cclxuXHJcbiAgICBsZW4gPSB4ZC5sZW5ndGg7XHJcblxyXG4gICAgLy8gQXBwZW5kIHplcm9zIHRvIGB4ZGAgaWYgc2hvcnRlci5cclxuICAgIC8vIERvbid0IGFkZCB6ZXJvcyB0byBgeWRgIGlmIHNob3J0ZXIgYXMgc3VidHJhY3Rpb24gb25seSBuZWVkcyB0byBzdGFydCBhdCBgeWRgIGxlbmd0aC5cclxuICAgIGZvciAoaSA9IHlkLmxlbmd0aCAtIGxlbjsgaSA+IDA7IC0taSkgeGRbbGVuKytdID0gMDtcclxuXHJcbiAgICAvLyBTdWJ0cmFjdCB5ZCBmcm9tIHhkLlxyXG4gICAgZm9yIChpID0geWQubGVuZ3RoOyBpID4gazspIHtcclxuXHJcbiAgICAgIGlmICh4ZFstLWldIDwgeWRbaV0pIHtcclxuICAgICAgICBmb3IgKGogPSBpOyBqICYmIHhkWy0tal0gPT09IDA7KSB4ZFtqXSA9IEJBU0UgLSAxO1xyXG4gICAgICAgIC0teGRbal07XHJcbiAgICAgICAgeGRbaV0gKz0gQkFTRTtcclxuICAgICAgfVxyXG5cclxuICAgICAgeGRbaV0gLT0geWRbaV07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgZm9yICg7IHhkWy0tbGVuXSA9PT0gMDspIHhkLnBvcCgpO1xyXG5cclxuICAgIC8vIFJlbW92ZSBsZWFkaW5nIHplcm9zIGFuZCBhZGp1c3QgZXhwb25lbnQgYWNjb3JkaW5nbHkuXHJcbiAgICBmb3IgKDsgeGRbMF0gPT09IDA7IHhkLnNoaWZ0KCkpIC0tZTtcclxuXHJcbiAgICAvLyBaZXJvP1xyXG4gICAgaWYgKCF4ZFswXSkgcmV0dXJuIG5ldyBDdG9yKHJtID09PSAzID8gLTAgOiAwKTtcclxuXHJcbiAgICB5LmQgPSB4ZDtcclxuICAgIHkuZSA9IGdldEJhc2UxMEV4cG9uZW50KHhkLCBlKTtcclxuXHJcbiAgICByZXR1cm4gZXh0ZXJuYWwgPyBmaW5hbGlzZSh5LCBwciwgcm0pIDogeTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiAgIG4gJSAwID0gIE5cclxuICAgKiAgIG4gJSBOID0gIE5cclxuICAgKiAgIG4gJSBJID0gIG5cclxuICAgKiAgIDAgJSBuID0gIDBcclxuICAgKiAgLTAgJSBuID0gLTBcclxuICAgKiAgIDAgJSAwID0gIE5cclxuICAgKiAgIDAgJSBOID0gIE5cclxuICAgKiAgIDAgJSBJID0gIDBcclxuICAgKiAgIE4gJSBuID0gIE5cclxuICAgKiAgIE4gJSAwID0gIE5cclxuICAgKiAgIE4gJSBOID0gIE5cclxuICAgKiAgIE4gJSBJID0gIE5cclxuICAgKiAgIEkgJSBuID0gIE5cclxuICAgKiAgIEkgJSAwID0gIE5cclxuICAgKiAgIEkgJSBOID0gIE5cclxuICAgKiAgIEkgJSBJID0gIE5cclxuICAgKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgbW9kdWxvIGB5YCwgcm91bmRlZCB0b1xyXG4gICAqIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiBUaGUgcmVzdWx0IGRlcGVuZHMgb24gdGhlIG1vZHVsbyBtb2RlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5tb2R1bG8gPSBQLm1vZCA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICB2YXIgcSxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIHkgPSBuZXcgQ3Rvcih5KTtcclxuXHJcbiAgICAvLyBSZXR1cm4gTmFOIGlmIHggaXMgwrFJbmZpbml0eSBvciBOYU4sIG9yIHkgaXMgTmFOIG9yIMKxMC5cclxuICAgIGlmICgheC5kIHx8ICF5LnMgfHwgeS5kICYmICF5LmRbMF0pIHJldHVybiBuZXcgQ3RvcihOYU4pO1xyXG5cclxuICAgIC8vIFJldHVybiB4IGlmIHkgaXMgwrFJbmZpbml0eSBvciB4IGlzIMKxMC5cclxuICAgIGlmICgheS5kIHx8IHguZCAmJiAheC5kWzBdKSB7XHJcbiAgICAgIHJldHVybiBmaW5hbGlzZShuZXcgQ3Rvcih4KSwgQ3Rvci5wcmVjaXNpb24sIEN0b3Iucm91bmRpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFByZXZlbnQgcm91bmRpbmcgb2YgaW50ZXJtZWRpYXRlIGNhbGN1bGF0aW9ucy5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgaWYgKEN0b3IubW9kdWxvID09IDkpIHtcclxuXHJcbiAgICAgIC8vIEV1Y2xpZGlhbiBkaXZpc2lvbjogcSA9IHNpZ24oeSkgKiBmbG9vcih4IC8gYWJzKHkpKVxyXG4gICAgICAvLyByZXN1bHQgPSB4IC0gcSAqIHkgICAgd2hlcmUgIDAgPD0gcmVzdWx0IDwgYWJzKHkpXHJcbiAgICAgIHEgPSBkaXZpZGUoeCwgeS5hYnMoKSwgMCwgMywgMSk7XHJcbiAgICAgIHEucyAqPSB5LnM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBxID0gZGl2aWRlKHgsIHksIDAsIEN0b3IubW9kdWxvLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICBxID0gcS50aW1lcyh5KTtcclxuXHJcbiAgICBleHRlcm5hbCA9IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIHgubWludXMocSk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIG5hdHVyYWwgZXhwb25lbnRpYWwgb2YgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCxcclxuICAgKiBpLmUuIHRoZSBiYXNlIGUgcmFpc2VkIHRvIHRoZSBwb3dlciB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAubmF0dXJhbEV4cG9uZW50aWFsID0gUC5leHAgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gbmF0dXJhbEV4cG9uZW50aWFsKHRoaXMpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLFxyXG4gICAqIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAubmF0dXJhbExvZ2FyaXRobSA9IFAubG4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gbmF0dXJhbExvZ2FyaXRobSh0aGlzKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIG5lZ2F0ZWQsIGkuZS4gYXMgaWYgbXVsdGlwbGllZCBieVxyXG4gICAqIC0xLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5uZWdhdGVkID0gUC5uZWcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgeCA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpO1xyXG4gICAgeC5zID0gLXgucztcclxuICAgIHJldHVybiBmaW5hbGlzZSh4KTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiAgbiArIDAgPSBuXHJcbiAgICogIG4gKyBOID0gTlxyXG4gICAqICBuICsgSSA9IElcclxuICAgKiAgMCArIG4gPSBuXHJcbiAgICogIDAgKyAwID0gMFxyXG4gICAqICAwICsgTiA9IE5cclxuICAgKiAgMCArIEkgPSBJXHJcbiAgICogIE4gKyBuID0gTlxyXG4gICAqICBOICsgMCA9IE5cclxuICAgKiAgTiArIE4gPSBOXHJcbiAgICogIE4gKyBJID0gTlxyXG4gICAqICBJICsgbiA9IElcclxuICAgKiAgSSArIDAgPSBJXHJcbiAgICogIEkgKyBOID0gTlxyXG4gICAqICBJICsgSSA9IElcclxuICAgKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgcGx1cyBgeWAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5wbHVzID0gUC5hZGQgPSBmdW5jdGlvbiAoeSkge1xyXG4gICAgdmFyIGNhcnJ5LCBkLCBlLCBpLCBrLCBsZW4sIHByLCBybSwgeGQsIHlkLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgeSA9IG5ldyBDdG9yKHkpO1xyXG5cclxuICAgIC8vIElmIGVpdGhlciBpcyBub3QgZmluaXRlLi4uXHJcbiAgICBpZiAoIXguZCB8fCAheS5kKSB7XHJcblxyXG4gICAgICAvLyBSZXR1cm4gTmFOIGlmIGVpdGhlciBpcyBOYU4uXHJcbiAgICAgIGlmICgheC5zIHx8ICF5LnMpIHkgPSBuZXcgQ3RvcihOYU4pO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIHggaWYgeSBpcyBmaW5pdGUgYW5kIHggaXMgwrFJbmZpbml0eS5cclxuICAgICAgLy8gUmV0dXJuIHggaWYgYm90aCBhcmUgwrFJbmZpbml0eSB3aXRoIHRoZSBzYW1lIHNpZ24uXHJcbiAgICAgIC8vIFJldHVybiBOYU4gaWYgYm90aCBhcmUgwrFJbmZpbml0eSB3aXRoIGRpZmZlcmVudCBzaWducy5cclxuICAgICAgLy8gUmV0dXJuIHkgaWYgeCBpcyBmaW5pdGUgYW5kIHkgaXMgwrFJbmZpbml0eS5cclxuICAgICAgZWxzZSBpZiAoIXguZCkgeSA9IG5ldyBDdG9yKHkuZCB8fCB4LnMgPT09IHkucyA/IHggOiBOYU4pO1xyXG5cclxuICAgICAgcmV0dXJuIHk7XHJcbiAgICB9XHJcblxyXG4gICAgIC8vIElmIHNpZ25zIGRpZmZlci4uLlxyXG4gICAgaWYgKHgucyAhPSB5LnMpIHtcclxuICAgICAgeS5zID0gLXkucztcclxuICAgICAgcmV0dXJuIHgubWludXMoeSk7XHJcbiAgICB9XHJcblxyXG4gICAgeGQgPSB4LmQ7XHJcbiAgICB5ZCA9IHkuZDtcclxuICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcblxyXG4gICAgLy8gSWYgZWl0aGVyIGlzIHplcm8uLi5cclxuICAgIGlmICgheGRbMF0gfHwgIXlkWzBdKSB7XHJcblxyXG4gICAgICAvLyBSZXR1cm4geCBpZiB5IGlzIHplcm8uXHJcbiAgICAgIC8vIFJldHVybiB5IGlmIHkgaXMgbm9uLXplcm8uXHJcbiAgICAgIGlmICgheWRbMF0pIHkgPSBuZXcgQ3Rvcih4KTtcclxuXHJcbiAgICAgIHJldHVybiBleHRlcm5hbCA/IGZpbmFsaXNlKHksIHByLCBybSkgOiB5O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHggYW5kIHkgYXJlIGZpbml0ZSwgbm9uLXplcm8gbnVtYmVycyB3aXRoIHRoZSBzYW1lIHNpZ24uXHJcblxyXG4gICAgLy8gQ2FsY3VsYXRlIGJhc2UgMWU3IGV4cG9uZW50cy5cclxuICAgIGsgPSBtYXRoZmxvb3IoeC5lIC8gTE9HX0JBU0UpO1xyXG4gICAgZSA9IG1hdGhmbG9vcih5LmUgLyBMT0dfQkFTRSk7XHJcblxyXG4gICAgeGQgPSB4ZC5zbGljZSgpO1xyXG4gICAgaSA9IGsgLSBlO1xyXG5cclxuICAgIC8vIElmIGJhc2UgMWU3IGV4cG9uZW50cyBkaWZmZXIuLi5cclxuICAgIGlmIChpKSB7XHJcblxyXG4gICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICBkID0geGQ7XHJcbiAgICAgICAgaSA9IC1pO1xyXG4gICAgICAgIGxlbiA9IHlkLmxlbmd0aDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBkID0geWQ7XHJcbiAgICAgICAgZSA9IGs7XHJcbiAgICAgICAgbGVuID0geGQubGVuZ3RoO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBMaW1pdCBudW1iZXIgb2YgemVyb3MgcHJlcGVuZGVkIHRvIG1heChjZWlsKHByIC8gTE9HX0JBU0UpLCBsZW4pICsgMS5cclxuICAgICAgayA9IE1hdGguY2VpbChwciAvIExPR19CQVNFKTtcclxuICAgICAgbGVuID0gayA+IGxlbiA/IGsgKyAxIDogbGVuICsgMTtcclxuXHJcbiAgICAgIGlmIChpID4gbGVuKSB7XHJcbiAgICAgICAgaSA9IGxlbjtcclxuICAgICAgICBkLmxlbmd0aCA9IDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFByZXBlbmQgemVyb3MgdG8gZXF1YWxpc2UgZXhwb25lbnRzLiBOb3RlOiBGYXN0ZXIgdG8gdXNlIHJldmVyc2UgdGhlbiBkbyB1bnNoaWZ0cy5cclxuICAgICAgZC5yZXZlcnNlKCk7XHJcbiAgICAgIGZvciAoOyBpLS07KSBkLnB1c2goMCk7XHJcbiAgICAgIGQucmV2ZXJzZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGxlbiA9IHhkLmxlbmd0aDtcclxuICAgIGkgPSB5ZC5sZW5ndGg7XHJcblxyXG4gICAgLy8gSWYgeWQgaXMgbG9uZ2VyIHRoYW4geGQsIHN3YXAgeGQgYW5kIHlkIHNvIHhkIHBvaW50cyB0byB0aGUgbG9uZ2VyIGFycmF5LlxyXG4gICAgaWYgKGxlbiAtIGkgPCAwKSB7XHJcbiAgICAgIGkgPSBsZW47XHJcbiAgICAgIGQgPSB5ZDtcclxuICAgICAgeWQgPSB4ZDtcclxuICAgICAgeGQgPSBkO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE9ubHkgc3RhcnQgYWRkaW5nIGF0IHlkLmxlbmd0aCAtIDEgYXMgdGhlIGZ1cnRoZXIgZGlnaXRzIG9mIHhkIGNhbiBiZSBsZWZ0IGFzIHRoZXkgYXJlLlxyXG4gICAgZm9yIChjYXJyeSA9IDA7IGk7KSB7XHJcbiAgICAgIGNhcnJ5ID0gKHhkWy0taV0gPSB4ZFtpXSArIHlkW2ldICsgY2FycnkpIC8gQkFTRSB8IDA7XHJcbiAgICAgIHhkW2ldICU9IEJBU0U7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNhcnJ5KSB7XHJcbiAgICAgIHhkLnVuc2hpZnQoY2FycnkpO1xyXG4gICAgICArK2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgLy8gTm8gbmVlZCB0byBjaGVjayBmb3IgemVybywgYXMgK3ggKyAreSAhPSAwICYmIC14ICsgLXkgIT0gMFxyXG4gICAgZm9yIChsZW4gPSB4ZC5sZW5ndGg7IHhkWy0tbGVuXSA9PSAwOykgeGQucG9wKCk7XHJcblxyXG4gICAgeS5kID0geGQ7XHJcbiAgICB5LmUgPSBnZXRCYXNlMTBFeHBvbmVudCh4ZCwgZSk7XHJcblxyXG4gICAgcmV0dXJuIGV4dGVybmFsID8gZmluYWxpc2UoeSwgcHIsIHJtKSA6IHk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIG9mIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBbel0ge2Jvb2xlYW58bnVtYmVyfSBXaGV0aGVyIHRvIGNvdW50IGludGVnZXItcGFydCB0cmFpbGluZyB6ZXJvczogdHJ1ZSwgZmFsc2UsIDEgb3IgMC5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAucHJlY2lzaW9uID0gUC5zZCA9IGZ1bmN0aW9uICh6KSB7XHJcbiAgICB2YXIgayxcclxuICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgaWYgKHogIT09IHZvaWQgMCAmJiB6ICE9PSAhIXogJiYgeiAhPT0gMSAmJiB6ICE9PSAwKSB0aHJvdyBFcnJvcihpbnZhbGlkQXJndW1lbnQgKyB6KTtcclxuXHJcbiAgICBpZiAoeC5kKSB7XHJcbiAgICAgIGsgPSBnZXRQcmVjaXNpb24oeC5kKTtcclxuICAgICAgaWYgKHogJiYgeC5lICsgMSA+IGspIGsgPSB4LmUgKyAxO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgayA9IE5hTjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gaztcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIHJvdW5kZWQgdG8gYSB3aG9sZSBudW1iZXIgdXNpbmdcclxuICAgKiByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnJvdW5kID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UobmV3IEN0b3IoeCksIHguZSArIDEsIEN0b3Iucm91bmRpbmcpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBzaW5lIG9mIHRoZSB2YWx1ZSBpbiByYWRpYW5zIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICogUmFuZ2U6IFstMSwgMV1cclxuICAgKlxyXG4gICAqIHNpbih4KSA9IHggLSB4XjMvMyEgKyB4XjUvNSEgLSAuLi5cclxuICAgKlxyXG4gICAqIHNpbigwKSAgICAgICAgID0gMFxyXG4gICAqIHNpbigtMCkgICAgICAgID0gLTBcclxuICAgKiBzaW4oSW5maW5pdHkpICA9IE5hTlxyXG4gICAqIHNpbigtSW5maW5pdHkpID0gTmFOXHJcbiAgICogc2luKE5hTikgICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuc2luZSA9IFAuc2luID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHByLCBybSxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpKSByZXR1cm4gbmV3IEN0b3IoTmFOKTtcclxuICAgIGlmICh4LmlzWmVybygpKSByZXR1cm4gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHIgKyBNYXRoLm1heCh4LmUsIHguc2QoKSkgKyBMT0dfQkFTRTtcclxuICAgIEN0b3Iucm91bmRpbmcgPSAxO1xyXG5cclxuICAgIHggPSBzaW5lKEN0b3IsIHRvTGVzc1RoYW5IYWxmUGkoQ3RvciwgeCkpO1xyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHI7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gcm07XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHF1YWRyYW50ID4gMiA/IHgubmVnKCkgOiB4LCBwciwgcm0sIHRydWUpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGlzIERlY2ltYWwsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogIHNxcnQoLW4pID0gIE5cclxuICAgKiAgc3FydChOKSAgPSAgTlxyXG4gICAqICBzcXJ0KC1JKSA9ICBOXHJcbiAgICogIHNxcnQoSSkgID0gIElcclxuICAgKiAgc3FydCgwKSAgPSAgMFxyXG4gICAqICBzcXJ0KC0wKSA9IC0wXHJcbiAgICpcclxuICAgKi9cclxuICBQLnNxdWFyZVJvb3QgPSBQLnNxcnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgbSwgbiwgc2QsIHIsIHJlcCwgdCxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIGQgPSB4LmQsXHJcbiAgICAgIGUgPSB4LmUsXHJcbiAgICAgIHMgPSB4LnMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIC8vIE5lZ2F0aXZlL05hTi9JbmZpbml0eS96ZXJvP1xyXG4gICAgaWYgKHMgIT09IDEgfHwgIWQgfHwgIWRbMF0pIHtcclxuICAgICAgcmV0dXJuIG5ldyBDdG9yKCFzIHx8IHMgPCAwICYmICghZCB8fCBkWzBdKSA/IE5hTiA6IGQgPyB4IDogMSAvIDApO1xyXG4gICAgfVxyXG5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgLy8gSW5pdGlhbCBlc3RpbWF0ZS5cclxuICAgIHMgPSBNYXRoLnNxcnQoK3gpO1xyXG5cclxuICAgIC8vIE1hdGguc3FydCB1bmRlcmZsb3cvb3ZlcmZsb3c/XHJcbiAgICAvLyBQYXNzIHggdG8gTWF0aC5zcXJ0IGFzIGludGVnZXIsIHRoZW4gYWRqdXN0IHRoZSBleHBvbmVudCBvZiB0aGUgcmVzdWx0LlxyXG4gICAgaWYgKHMgPT0gMCB8fCBzID09IDEgLyAwKSB7XHJcbiAgICAgIG4gPSBkaWdpdHNUb1N0cmluZyhkKTtcclxuXHJcbiAgICAgIGlmICgobi5sZW5ndGggKyBlKSAlIDIgPT0gMCkgbiArPSAnMCc7XHJcbiAgICAgIHMgPSBNYXRoLnNxcnQobik7XHJcbiAgICAgIGUgPSBtYXRoZmxvb3IoKGUgKyAxKSAvIDIpIC0gKGUgPCAwIHx8IGUgJSAyKTtcclxuXHJcbiAgICAgIGlmIChzID09IDEgLyAwKSB7XHJcbiAgICAgICAgbiA9ICcxZScgKyBlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG4gPSBzLnRvRXhwb25lbnRpYWwoKTtcclxuICAgICAgICBuID0gbi5zbGljZSgwLCBuLmluZGV4T2YoJ2UnKSArIDEpICsgZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgciA9IG5ldyBDdG9yKG4pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgciA9IG5ldyBDdG9yKHMudG9TdHJpbmcoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2QgPSAoZSA9IEN0b3IucHJlY2lzaW9uKSArIDM7XHJcblxyXG4gICAgLy8gTmV3dG9uLVJhcGhzb24gaXRlcmF0aW9uLlxyXG4gICAgZm9yICg7Oykge1xyXG4gICAgICB0ID0gcjtcclxuICAgICAgciA9IHQucGx1cyhkaXZpZGUoeCwgdCwgc2QgKyAyLCAxKSkudGltZXMoMC41KTtcclxuXHJcbiAgICAgIC8vIFRPRE8/IFJlcGxhY2Ugd2l0aCBmb3ItbG9vcCBhbmQgY2hlY2tSb3VuZGluZ0RpZ2l0cy5cclxuICAgICAgaWYgKGRpZ2l0c1RvU3RyaW5nKHQuZCkuc2xpY2UoMCwgc2QpID09PSAobiA9IGRpZ2l0c1RvU3RyaW5nKHIuZCkpLnNsaWNlKDAsIHNkKSkge1xyXG4gICAgICAgIG4gPSBuLnNsaWNlKHNkIC0gMywgc2QgKyAxKTtcclxuXHJcbiAgICAgICAgLy8gVGhlIDR0aCByb3VuZGluZyBkaWdpdCBtYXkgYmUgaW4gZXJyb3IgYnkgLTEgc28gaWYgdGhlIDQgcm91bmRpbmcgZGlnaXRzIGFyZSA5OTk5IG9yXHJcbiAgICAgICAgLy8gNDk5OSwgaS5lLiBhcHByb2FjaGluZyBhIHJvdW5kaW5nIGJvdW5kYXJ5LCBjb250aW51ZSB0aGUgaXRlcmF0aW9uLlxyXG4gICAgICAgIGlmIChuID09ICc5OTk5JyB8fCAhcmVwICYmIG4gPT0gJzQ5OTknKSB7XHJcblxyXG4gICAgICAgICAgLy8gT24gdGhlIGZpcnN0IGl0ZXJhdGlvbiBvbmx5LCBjaGVjayB0byBzZWUgaWYgcm91bmRpbmcgdXAgZ2l2ZXMgdGhlIGV4YWN0IHJlc3VsdCBhcyB0aGVcclxuICAgICAgICAgIC8vIG5pbmVzIG1heSBpbmZpbml0ZWx5IHJlcGVhdC5cclxuICAgICAgICAgIGlmICghcmVwKSB7XHJcbiAgICAgICAgICAgIGZpbmFsaXNlKHQsIGUgKyAxLCAwKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0LnRpbWVzKHQpLmVxKHgpKSB7XHJcbiAgICAgICAgICAgICAgciA9IHQ7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBzZCArPSA0O1xyXG4gICAgICAgICAgcmVwID0gMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIC8vIElmIHRoZSByb3VuZGluZyBkaWdpdHMgYXJlIG51bGwsIDB7MCw0fSBvciA1MHswLDN9LCBjaGVjayBmb3IgYW4gZXhhY3QgcmVzdWx0LlxyXG4gICAgICAgICAgLy8gSWYgbm90LCB0aGVuIHRoZXJlIGFyZSBmdXJ0aGVyIGRpZ2l0cyBhbmQgbSB3aWxsIGJlIHRydXRoeS5cclxuICAgICAgICAgIGlmICghK24gfHwgIStuLnNsaWNlKDEpICYmIG4uY2hhckF0KDApID09ICc1Jykge1xyXG5cclxuICAgICAgICAgICAgLy8gVHJ1bmNhdGUgdG8gdGhlIGZpcnN0IHJvdW5kaW5nIGRpZ2l0LlxyXG4gICAgICAgICAgICBmaW5hbGlzZShyLCBlICsgMSwgMSk7XHJcbiAgICAgICAgICAgIG0gPSAhci50aW1lcyhyKS5lcSh4KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBleHRlcm5hbCA9IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHIsIGUsIEN0b3Iucm91bmRpbmcsIG0pO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB0YW5nZW50IG9mIHRoZSB2YWx1ZSBpbiByYWRpYW5zIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICogUmFuZ2U6IFstSW5maW5pdHksIEluZmluaXR5XVxyXG4gICAqXHJcbiAgICogdGFuKDApICAgICAgICAgPSAwXHJcbiAgICogdGFuKC0wKSAgICAgICAgPSAtMFxyXG4gICAqIHRhbihJbmZpbml0eSkgID0gTmFOXHJcbiAgICogdGFuKC1JbmZpbml0eSkgPSBOYU5cclxuICAgKiB0YW4oTmFOKSAgICAgICA9IE5hTlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC50YW5nZW50ID0gUC50YW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgcHIsIHJtLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHJldHVybiBuZXcgQ3RvcihOYU4pO1xyXG4gICAgaWYgKHguaXNaZXJvKCkpIHJldHVybiBuZXcgQ3Rvcih4KTtcclxuXHJcbiAgICBwciA9IEN0b3IucHJlY2lzaW9uO1xyXG4gICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIDEwO1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IDE7XHJcblxyXG4gICAgeCA9IHguc2luKCk7XHJcbiAgICB4LnMgPSAxO1xyXG4gICAgeCA9IGRpdmlkZSh4LCBuZXcgQ3RvcigxKS5taW51cyh4LnRpbWVzKHgpKS5zcXJ0KCksIHByICsgMTAsIDApO1xyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHI7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gcm07XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHF1YWRyYW50ID09IDIgfHwgcXVhZHJhbnQgPT0gNCA/IHgubmVnKCkgOiB4LCBwciwgcm0sIHRydWUpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqICBuICogMCA9IDBcclxuICAgKiAgbiAqIE4gPSBOXHJcbiAgICogIG4gKiBJID0gSVxyXG4gICAqICAwICogbiA9IDBcclxuICAgKiAgMCAqIDAgPSAwXHJcbiAgICogIDAgKiBOID0gTlxyXG4gICAqICAwICogSSA9IE5cclxuICAgKiAgTiAqIG4gPSBOXHJcbiAgICogIE4gKiAwID0gTlxyXG4gICAqICBOICogTiA9IE5cclxuICAgKiAgTiAqIEkgPSBOXHJcbiAgICogIEkgKiBuID0gSVxyXG4gICAqICBJICogMCA9IE5cclxuICAgKiAgSSAqIE4gPSBOXHJcbiAgICogIEkgKiBJID0gSVxyXG4gICAqXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhpcyBEZWNpbWFsIHRpbWVzIGB5YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRpbWVzID0gUC5tdWwgPSBmdW5jdGlvbiAoeSkge1xyXG4gICAgdmFyIGNhcnJ5LCBlLCBpLCBrLCByLCByTCwgdCwgeGRMLCB5ZEwsXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcixcclxuICAgICAgeGQgPSB4LmQsXHJcbiAgICAgIHlkID0gKHkgPSBuZXcgQ3Rvcih5KSkuZDtcclxuXHJcbiAgICB5LnMgKj0geC5zO1xyXG5cclxuICAgICAvLyBJZiBlaXRoZXIgaXMgTmFOLCDCsUluZmluaXR5IG9yIMKxMC4uLlxyXG4gICAgaWYgKCF4ZCB8fCAheGRbMF0gfHwgIXlkIHx8ICF5ZFswXSkge1xyXG5cclxuICAgICAgcmV0dXJuIG5ldyBDdG9yKCF5LnMgfHwgeGQgJiYgIXhkWzBdICYmICF5ZCB8fCB5ZCAmJiAheWRbMF0gJiYgIXhkXHJcblxyXG4gICAgICAgIC8vIFJldHVybiBOYU4gaWYgZWl0aGVyIGlzIE5hTi5cclxuICAgICAgICAvLyBSZXR1cm4gTmFOIGlmIHggaXMgwrEwIGFuZCB5IGlzIMKxSW5maW5pdHksIG9yIHkgaXMgwrEwIGFuZCB4IGlzIMKxSW5maW5pdHkuXHJcbiAgICAgICAgPyBOYU5cclxuXHJcbiAgICAgICAgLy8gUmV0dXJuIMKxSW5maW5pdHkgaWYgZWl0aGVyIGlzIMKxSW5maW5pdHkuXHJcbiAgICAgICAgLy8gUmV0dXJuIMKxMCBpZiBlaXRoZXIgaXMgwrEwLlxyXG4gICAgICAgIDogIXhkIHx8ICF5ZCA/IHkucyAvIDAgOiB5LnMgKiAwKTtcclxuICAgIH1cclxuXHJcbiAgICBlID0gbWF0aGZsb29yKHguZSAvIExPR19CQVNFKSArIG1hdGhmbG9vcih5LmUgLyBMT0dfQkFTRSk7XHJcbiAgICB4ZEwgPSB4ZC5sZW5ndGg7XHJcbiAgICB5ZEwgPSB5ZC5sZW5ndGg7XHJcblxyXG4gICAgLy8gRW5zdXJlIHhkIHBvaW50cyB0byB0aGUgbG9uZ2VyIGFycmF5LlxyXG4gICAgaWYgKHhkTCA8IHlkTCkge1xyXG4gICAgICByID0geGQ7XHJcbiAgICAgIHhkID0geWQ7XHJcbiAgICAgIHlkID0gcjtcclxuICAgICAgckwgPSB4ZEw7XHJcbiAgICAgIHhkTCA9IHlkTDtcclxuICAgICAgeWRMID0gckw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSW5pdGlhbGlzZSB0aGUgcmVzdWx0IGFycmF5IHdpdGggemVyb3MuXHJcbiAgICByID0gW107XHJcbiAgICByTCA9IHhkTCArIHlkTDtcclxuICAgIGZvciAoaSA9IHJMOyBpLS07KSByLnB1c2goMCk7XHJcblxyXG4gICAgLy8gTXVsdGlwbHkhXHJcbiAgICBmb3IgKGkgPSB5ZEw7IC0taSA+PSAwOykge1xyXG4gICAgICBjYXJyeSA9IDA7XHJcbiAgICAgIGZvciAoayA9IHhkTCArIGk7IGsgPiBpOykge1xyXG4gICAgICAgIHQgPSByW2tdICsgeWRbaV0gKiB4ZFtrIC0gaSAtIDFdICsgY2Fycnk7XHJcbiAgICAgICAgcltrLS1dID0gdCAlIEJBU0UgfCAwO1xyXG4gICAgICAgIGNhcnJ5ID0gdCAvIEJBU0UgfCAwO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByW2tdID0gKHJba10gKyBjYXJyeSkgJSBCQVNFIHwgMDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZW1vdmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICBmb3IgKDsgIXJbLS1yTF07KSByLnBvcCgpO1xyXG5cclxuICAgIGlmIChjYXJyeSkgKytlO1xyXG4gICAgZWxzZSByLnNoaWZ0KCk7XHJcblxyXG4gICAgeS5kID0gcjtcclxuICAgIHkuZSA9IGdldEJhc2UxMEV4cG9uZW50KHIsIGUpO1xyXG5cclxuICAgIHJldHVybiBleHRlcm5hbCA/IGZpbmFsaXNlKHksIEN0b3IucHJlY2lzaW9uLCBDdG9yLnJvdW5kaW5nKSA6IHk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGluIGJhc2UgMiwgcm91bmQgdG8gYHNkYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGBybWAuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgb3B0aW9uYWwgYHNkYCBhcmd1bWVudCBpcyBwcmVzZW50IHRoZW4gcmV0dXJuIGJpbmFyeSBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgKlxyXG4gICAqIFtzZF0ge251bWJlcn0gU2lnbmlmaWNhbnQgZGlnaXRzLiBJbnRlZ2VyLCAxIHRvIE1BWF9ESUdJVFMgaW5jbHVzaXZlLlxyXG4gICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9CaW5hcnkgPSBmdW5jdGlvbiAoc2QsIHJtKSB7XHJcbiAgICByZXR1cm4gdG9TdHJpbmdCaW5hcnkodGhpcywgMiwgc2QsIHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIHJvdW5kZWQgdG8gYSBtYXhpbXVtIG9mIGBkcGBcclxuICAgKiBkZWNpbWFsIHBsYWNlcyB1c2luZyByb3VuZGluZyBtb2RlIGBybWAgb3IgYHJvdW5kaW5nYCBpZiBgcm1gIGlzIG9taXR0ZWQuXHJcbiAgICpcclxuICAgKiBJZiBgZHBgIGlzIG9taXR0ZWQsIHJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWF9ESUdJVFMgaW5jbHVzaXZlLlxyXG4gICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9EZWNpbWFsUGxhY2VzID0gUC50b0RQID0gZnVuY3Rpb24gKGRwLCBybSkge1xyXG4gICAgdmFyIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICB4ID0gbmV3IEN0b3IoeCk7XHJcbiAgICBpZiAoZHAgPT09IHZvaWQgMCkgcmV0dXJuIHg7XHJcblxyXG4gICAgY2hlY2tJbnQzMihkcCwgMCwgTUFYX0RJR0lUUyk7XHJcblxyXG4gICAgaWYgKHJtID09PSB2b2lkIDApIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIGVsc2UgY2hlY2tJbnQzMihybSwgMCwgOCk7XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHgsIGRwICsgeC5lICsgMSwgcm0pO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpbiBleHBvbmVudGlhbCBub3RhdGlvbiByb3VuZGVkIHRvXHJcbiAgICogYGRwYCBmaXhlZCBkZWNpbWFsIHBsYWNlcyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiBbZHBdIHtudW1iZXJ9IERlY2ltYWwgcGxhY2VzLiBJbnRlZ2VyLCAwIHRvIE1BWF9ESUdJVFMgaW5jbHVzaXZlLlxyXG4gICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9FeHBvbmVudGlhbCA9IGZ1bmN0aW9uIChkcCwgcm0pIHtcclxuICAgIHZhciBzdHIsXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICBpZiAoZHAgPT09IHZvaWQgMCkge1xyXG4gICAgICBzdHIgPSBmaW5pdGVUb1N0cmluZyh4LCB0cnVlKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNoZWNrSW50MzIoZHAsIDAsIE1BWF9ESUdJVFMpO1xyXG5cclxuICAgICAgaWYgKHJtID09PSB2b2lkIDApIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgICAgZWxzZSBjaGVja0ludDMyKHJtLCAwLCA4KTtcclxuXHJcbiAgICAgIHggPSBmaW5hbGlzZShuZXcgQ3Rvcih4KSwgZHAgKyAxLCBybSk7XHJcbiAgICAgIHN0ciA9IGZpbml0ZVRvU3RyaW5nKHgsIHRydWUsIGRwICsgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHguaXNOZWcoKSAmJiAheC5pc1plcm8oKSA/ICctJyArIHN0ciA6IHN0cjtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaW4gbm9ybWFsIChmaXhlZC1wb2ludCkgbm90YXRpb24gdG9cclxuICAgKiBgZHBgIGZpeGVkIGRlY2ltYWwgcGxhY2VzIGFuZCByb3VuZGVkIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJtYCBvciBgcm91bmRpbmdgIGlmIGBybWAgaXNcclxuICAgKiBvbWl0dGVkLlxyXG4gICAqXHJcbiAgICogQXMgd2l0aCBKYXZhU2NyaXB0IG51bWJlcnMsICgtMCkudG9GaXhlZCgwKSBpcyAnMCcsIGJ1dCBlLmcuICgtMC4wMDAwMSkudG9GaXhlZCgwKSBpcyAnLTAnLlxyXG4gICAqXHJcbiAgICogW2RwXSB7bnVtYmVyfSBEZWNpbWFsIHBsYWNlcy4gSW50ZWdlciwgMCB0byBNQVhfRElHSVRTIGluY2x1c2l2ZS5cclxuICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICpcclxuICAgKiAoLTApLnRvRml4ZWQoMCkgaXMgJzAnLCBidXQgKC0wLjEpLnRvRml4ZWQoMCkgaXMgJy0wJy5cclxuICAgKiAoLTApLnRvRml4ZWQoMSkgaXMgJzAuMCcsIGJ1dCAoLTAuMDEpLnRvRml4ZWQoMSkgaXMgJy0wLjAnLlxyXG4gICAqICgtMCkudG9GaXhlZCgzKSBpcyAnMC4wMDAnLlxyXG4gICAqICgtMC41KS50b0ZpeGVkKDApIGlzICctMCcuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvRml4ZWQgPSBmdW5jdGlvbiAoZHAsIHJtKSB7XHJcbiAgICB2YXIgc3RyLCB5LFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKGRwID09PSB2b2lkIDApIHtcclxuICAgICAgc3RyID0gZmluaXRlVG9TdHJpbmcoeCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjaGVja0ludDMyKGRwLCAwLCBNQVhfRElHSVRTKTtcclxuXHJcbiAgICAgIGlmIChybSA9PT0gdm9pZCAwKSBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICAgIGVsc2UgY2hlY2tJbnQzMihybSwgMCwgOCk7XHJcblxyXG4gICAgICB5ID0gZmluYWxpc2UobmV3IEN0b3IoeCksIGRwICsgeC5lICsgMSwgcm0pO1xyXG4gICAgICBzdHIgPSBmaW5pdGVUb1N0cmluZyh5LCBmYWxzZSwgZHAgKyB5LmUgKyAxKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUbyBkZXRlcm1pbmUgd2hldGhlciB0byBhZGQgdGhlIG1pbnVzIHNpZ24gbG9vayBhdCB0aGUgdmFsdWUgYmVmb3JlIGl0IHdhcyByb3VuZGVkLFxyXG4gICAgLy8gaS5lLiBsb29rIGF0IGB4YCByYXRoZXIgdGhhbiBgeWAuXHJcbiAgICByZXR1cm4geC5pc05lZygpICYmICF4LmlzWmVybygpID8gJy0nICsgc3RyIDogc3RyO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhbiBhcnJheSByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBhcyBhIHNpbXBsZSBmcmFjdGlvbiB3aXRoIGFuIGludGVnZXJcclxuICAgKiBudW1lcmF0b3IgYW5kIGFuIGludGVnZXIgZGVub21pbmF0b3IuXHJcbiAgICpcclxuICAgKiBUaGUgZGVub21pbmF0b3Igd2lsbCBiZSBhIHBvc2l0aXZlIG5vbi16ZXJvIHZhbHVlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgc3BlY2lmaWVkIG1heGltdW1cclxuICAgKiBkZW5vbWluYXRvci4gSWYgYSBtYXhpbXVtIGRlbm9taW5hdG9yIGlzIG5vdCBzcGVjaWZpZWQsIHRoZSBkZW5vbWluYXRvciB3aWxsIGJlIHRoZSBsb3dlc3RcclxuICAgKiB2YWx1ZSBuZWNlc3NhcnkgdG8gcmVwcmVzZW50IHRoZSBudW1iZXIgZXhhY3RseS5cclxuICAgKlxyXG4gICAqIFttYXhEXSB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBNYXhpbXVtIGRlbm9taW5hdG9yLiBJbnRlZ2VyID49IDEgYW5kIDwgSW5maW5pdHkuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvRnJhY3Rpb24gPSBmdW5jdGlvbiAobWF4RCkge1xyXG4gICAgdmFyIGQsIGQwLCBkMSwgZDIsIGUsIGssIG4sIG4wLCBuMSwgcHIsIHEsIHIsXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICB4ZCA9IHguZCxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKCF4ZCkgcmV0dXJuIG5ldyBDdG9yKHgpO1xyXG5cclxuICAgIG4xID0gZDAgPSBuZXcgQ3RvcigxKTtcclxuICAgIGQxID0gbjAgPSBuZXcgQ3RvcigwKTtcclxuXHJcbiAgICBkID0gbmV3IEN0b3IoZDEpO1xyXG4gICAgZSA9IGQuZSA9IGdldFByZWNpc2lvbih4ZCkgLSB4LmUgLSAxO1xyXG4gICAgayA9IGUgJSBMT0dfQkFTRTtcclxuICAgIGQuZFswXSA9IG1hdGhwb3coMTAsIGsgPCAwID8gTE9HX0JBU0UgKyBrIDogayk7XHJcblxyXG4gICAgaWYgKG1heEQgPT0gbnVsbCkge1xyXG5cclxuICAgICAgLy8gZCBpcyAxMCoqZSwgdGhlIG1pbmltdW0gbWF4LWRlbm9taW5hdG9yIG5lZWRlZC5cclxuICAgICAgbWF4RCA9IGUgPiAwID8gZCA6IG4xO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbiA9IG5ldyBDdG9yKG1heEQpO1xyXG4gICAgICBpZiAoIW4uaXNJbnQoKSB8fCBuLmx0KG4xKSkgdGhyb3cgRXJyb3IoaW52YWxpZEFyZ3VtZW50ICsgbik7XHJcbiAgICAgIG1heEQgPSBuLmd0KGQpID8gKGUgPiAwID8gZCA6IG4xKSA6IG47XHJcbiAgICB9XHJcblxyXG4gICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuICAgIG4gPSBuZXcgQ3RvcihkaWdpdHNUb1N0cmluZyh4ZCkpO1xyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIEN0b3IucHJlY2lzaW9uID0gZSA9IHhkLmxlbmd0aCAqIExPR19CQVNFICogMjtcclxuXHJcbiAgICBmb3IgKDs7KSAge1xyXG4gICAgICBxID0gZGl2aWRlKG4sIGQsIDAsIDEsIDEpO1xyXG4gICAgICBkMiA9IGQwLnBsdXMocS50aW1lcyhkMSkpO1xyXG4gICAgICBpZiAoZDIuY21wKG1heEQpID09IDEpIGJyZWFrO1xyXG4gICAgICBkMCA9IGQxO1xyXG4gICAgICBkMSA9IGQyO1xyXG4gICAgICBkMiA9IG4xO1xyXG4gICAgICBuMSA9IG4wLnBsdXMocS50aW1lcyhkMikpO1xyXG4gICAgICBuMCA9IGQyO1xyXG4gICAgICBkMiA9IGQ7XHJcbiAgICAgIGQgPSBuLm1pbnVzKHEudGltZXMoZDIpKTtcclxuICAgICAgbiA9IGQyO1xyXG4gICAgfVxyXG5cclxuICAgIGQyID0gZGl2aWRlKG1heEQubWludXMoZDApLCBkMSwgMCwgMSwgMSk7XHJcbiAgICBuMCA9IG4wLnBsdXMoZDIudGltZXMobjEpKTtcclxuICAgIGQwID0gZDAucGx1cyhkMi50aW1lcyhkMSkpO1xyXG4gICAgbjAucyA9IG4xLnMgPSB4LnM7XHJcblxyXG4gICAgLy8gRGV0ZXJtaW5lIHdoaWNoIGZyYWN0aW9uIGlzIGNsb3NlciB0byB4LCBuMC9kMCBvciBuMS9kMT9cclxuICAgIHIgPSBkaXZpZGUobjEsIGQxLCBlLCAxKS5taW51cyh4KS5hYnMoKS5jbXAoZGl2aWRlKG4wLCBkMCwgZSwgMSkubWludXMoeCkuYWJzKCkpIDwgMVxyXG4gICAgICAgID8gW24xLCBkMV0gOiBbbjAsIGQwXTtcclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgZXh0ZXJuYWwgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiByO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpbiBiYXNlIDE2LCByb3VuZCB0byBgc2RgIHNpZ25pZmljYW50XHJcbiAgICogZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJtYC5cclxuICAgKlxyXG4gICAqIElmIHRoZSBvcHRpb25hbCBgc2RgIGFyZ3VtZW50IGlzIHByZXNlbnQgdGhlbiByZXR1cm4gYmluYXJ5IGV4cG9uZW50aWFsIG5vdGF0aW9uLlxyXG4gICAqXHJcbiAgICogW3NkXSB7bnVtYmVyfSBTaWduaWZpY2FudCBkaWdpdHMuIEludGVnZXIsIDEgdG8gTUFYX0RJR0lUUyBpbmNsdXNpdmUuXHJcbiAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC50b0hleGFkZWNpbWFsID0gUC50b0hleCA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgIHJldHVybiB0b1N0cmluZ0JpbmFyeSh0aGlzLCAxNiwgc2QsIHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm5zIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIG5lYXJlc3QgbXVsdGlwbGUgb2YgYHlgIGluIHRoZSBkaXJlY3Rpb24gb2Ygcm91bmRpbmdcclxuICAgKiBtb2RlIGBybWAsIG9yIGBEZWNpbWFsLnJvdW5kaW5nYCBpZiBgcm1gIGlzIG9taXR0ZWQsIHRvIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYWx3YXlzIGhhdmUgdGhlIHNhbWUgc2lnbiBhcyB0aGlzIERlY2ltYWwsIHVubGVzcyBlaXRoZXIgdGhpcyBEZWNpbWFsXHJcbiAgICogb3IgYHlgIGlzIE5hTiwgaW4gd2hpY2ggY2FzZSB0aGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgYWxzbyBiZSBOYU4uXHJcbiAgICpcclxuICAgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIG5vdCBhZmZlY3RlZCBieSB0aGUgdmFsdWUgb2YgYHByZWNpc2lvbmAuXHJcbiAgICpcclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBtYWduaXR1ZGUgdG8gcm91bmQgdG8gYSBtdWx0aXBsZSBvZi5cclxuICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICpcclxuICAgKiAndG9OZWFyZXN0KCkgcm91bmRpbmcgbW9kZSBub3QgYW4gaW50ZWdlcjoge3JtfSdcclxuICAgKiAndG9OZWFyZXN0KCkgcm91bmRpbmcgbW9kZSBvdXQgb2YgcmFuZ2U6IHtybX0nXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvTmVhcmVzdCA9IGZ1bmN0aW9uICh5LCBybSkge1xyXG4gICAgdmFyIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICB4ID0gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgaWYgKHkgPT0gbnVsbCkge1xyXG5cclxuICAgICAgLy8gSWYgeCBpcyBub3QgZmluaXRlLCByZXR1cm4geC5cclxuICAgICAgaWYgKCF4LmQpIHJldHVybiB4O1xyXG5cclxuICAgICAgeSA9IG5ldyBDdG9yKDEpO1xyXG4gICAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB5ID0gbmV3IEN0b3IoeSk7XHJcbiAgICAgIGlmIChybSA9PT0gdm9pZCAwKSB7XHJcbiAgICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNoZWNrSW50MzIocm0sIDAsIDgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBJZiB4IGlzIG5vdCBmaW5pdGUsIHJldHVybiB4IGlmIHkgaXMgbm90IE5hTiwgZWxzZSBOYU4uXHJcbiAgICAgIGlmICgheC5kKSByZXR1cm4geS5zID8geCA6IHk7XHJcblxyXG4gICAgICAvLyBJZiB5IGlzIG5vdCBmaW5pdGUsIHJldHVybiBJbmZpbml0eSB3aXRoIHRoZSBzaWduIG9mIHggaWYgeSBpcyBJbmZpbml0eSwgZWxzZSBOYU4uXHJcbiAgICAgIGlmICgheS5kKSB7XHJcbiAgICAgICAgaWYgKHkucykgeS5zID0geC5zO1xyXG4gICAgICAgIHJldHVybiB5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgeSBpcyBub3QgemVybywgY2FsY3VsYXRlIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIHkgdG8geC5cclxuICAgIGlmICh5LmRbMF0pIHtcclxuICAgICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuICAgICAgeCA9IGRpdmlkZSh4LCB5LCAwLCBybSwgMSkudGltZXMoeSk7XHJcbiAgICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuICAgICAgZmluYWxpc2UoeCk7XHJcblxyXG4gICAgLy8gSWYgeSBpcyB6ZXJvLCByZXR1cm4gemVybyB3aXRoIHRoZSBzaWduIG9mIHguXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB5LnMgPSB4LnM7XHJcbiAgICAgIHggPSB5O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB4O1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGNvbnZlcnRlZCB0byBhIG51bWJlciBwcmltaXRpdmUuXHJcbiAgICogWmVybyBrZWVwcyBpdHMgc2lnbi5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9OdW1iZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gK3RoaXM7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGluIGJhc2UgOCwgcm91bmQgdG8gYHNkYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGBybWAuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgb3B0aW9uYWwgYHNkYCBhcmd1bWVudCBpcyBwcmVzZW50IHRoZW4gcmV0dXJuIGJpbmFyeSBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgKlxyXG4gICAqIFtzZF0ge251bWJlcn0gU2lnbmlmaWNhbnQgZGlnaXRzLiBJbnRlZ2VyLCAxIHRvIE1BWF9ESUdJVFMgaW5jbHVzaXZlLlxyXG4gICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9PY3RhbCA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgIHJldHVybiB0b1N0cmluZ0JpbmFyeSh0aGlzLCA4LCBzZCwgcm0pO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgcmFpc2VkIHRvIHRoZSBwb3dlciBgeWAsIHJvdW5kZWRcclxuICAgKiB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogRUNNQVNjcmlwdCBjb21wbGlhbnQuXHJcbiAgICpcclxuICAgKiAgIHBvdyh4LCBOYU4pICAgICAgICAgICAgICAgICAgICAgICAgICAgPSBOYU5cclxuICAgKiAgIHBvdyh4LCDCsTApICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gMVxyXG5cclxuICAgKiAgIHBvdyhOYU4sIG5vbi16ZXJvKSAgICAgICAgICAgICAgICAgICAgPSBOYU5cclxuICAgKiAgIHBvdyhhYnMoeCkgPiAxLCArSW5maW5pdHkpICAgICAgICAgICAgPSArSW5maW5pdHlcclxuICAgKiAgIHBvdyhhYnMoeCkgPiAxLCAtSW5maW5pdHkpICAgICAgICAgICAgPSArMFxyXG4gICAqICAgcG93KGFicyh4KSA9PSAxLCDCsUluZmluaXR5KSAgICAgICAgICAgPSBOYU5cclxuICAgKiAgIHBvdyhhYnMoeCkgPCAxLCArSW5maW5pdHkpICAgICAgICAgICAgPSArMFxyXG4gICAqICAgcG93KGFicyh4KSA8IDEsIC1JbmZpbml0eSkgICAgICAgICAgICA9ICtJbmZpbml0eVxyXG4gICAqICAgcG93KCtJbmZpbml0eSwgeSA+IDApICAgICAgICAgICAgICAgICA9ICtJbmZpbml0eVxyXG4gICAqICAgcG93KCtJbmZpbml0eSwgeSA8IDApICAgICAgICAgICAgICAgICA9ICswXHJcbiAgICogICBwb3coLUluZmluaXR5LCBvZGQgaW50ZWdlciA+IDApICAgICAgID0gLUluZmluaXR5XHJcbiAgICogICBwb3coLUluZmluaXR5LCBldmVuIGludGVnZXIgPiAwKSAgICAgID0gK0luZmluaXR5XHJcbiAgICogICBwb3coLUluZmluaXR5LCBvZGQgaW50ZWdlciA8IDApICAgICAgID0gLTBcclxuICAgKiAgIHBvdygtSW5maW5pdHksIGV2ZW4gaW50ZWdlciA8IDApICAgICAgPSArMFxyXG4gICAqICAgcG93KCswLCB5ID4gMCkgICAgICAgICAgICAgICAgICAgICAgICA9ICswXHJcbiAgICogICBwb3coKzAsIHkgPCAwKSAgICAgICAgICAgICAgICAgICAgICAgID0gK0luZmluaXR5XHJcbiAgICogICBwb3coLTAsIG9kZCBpbnRlZ2VyID4gMCkgICAgICAgICAgICAgID0gLTBcclxuICAgKiAgIHBvdygtMCwgZXZlbiBpbnRlZ2VyID4gMCkgICAgICAgICAgICAgPSArMFxyXG4gICAqICAgcG93KC0wLCBvZGQgaW50ZWdlciA8IDApICAgICAgICAgICAgICA9IC1JbmZpbml0eVxyXG4gICAqICAgcG93KC0wLCBldmVuIGludGVnZXIgPCAwKSAgICAgICAgICAgICA9ICtJbmZpbml0eVxyXG4gICAqICAgcG93KGZpbml0ZSB4IDwgMCwgZmluaXRlIG5vbi1pbnRlZ2VyKSA9IE5hTlxyXG4gICAqXHJcbiAgICogRm9yIG5vbi1pbnRlZ2VyIG9yIHZlcnkgbGFyZ2UgZXhwb25lbnRzIHBvdyh4LCB5KSBpcyBjYWxjdWxhdGVkIHVzaW5nXHJcbiAgICpcclxuICAgKiAgIHheeSA9IGV4cCh5KmxuKHgpKVxyXG4gICAqXHJcbiAgICogQXNzdW1pbmcgdGhlIGZpcnN0IDE1IHJvdW5kaW5nIGRpZ2l0cyBhcmUgZWFjaCBlcXVhbGx5IGxpa2VseSB0byBiZSBhbnkgZGlnaXQgMC05LCB0aGVcclxuICAgKiBwcm9iYWJpbGl0eSBvZiBhbiBpbmNvcnJlY3RseSByb3VuZGVkIHJlc3VsdFxyXG4gICAqIFAoWzQ5XTl7MTR9IHwgWzUwXTB7MTR9KSA9IDIgKiAwLjIgKiAxMF4tMTQgPSA0ZS0xNSA9IDEvMi41ZSsxNFxyXG4gICAqIGkuZS4gMSBpbiAyNTAsMDAwLDAwMCwwMDAsMDAwXHJcbiAgICpcclxuICAgKiBJZiBhIHJlc3VsdCBpcyBpbmNvcnJlY3RseSByb3VuZGVkIHRoZSBtYXhpbXVtIGVycm9yIHdpbGwgYmUgMSB1bHAgKHVuaXQgaW4gbGFzdCBwbGFjZSkuXHJcbiAgICpcclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBwb3dlciB0byB3aGljaCB0byByYWlzZSB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvUG93ZXIgPSBQLnBvdyA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICB2YXIgZSwgaywgcHIsIHIsIHJtLCBzLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3IsXHJcbiAgICAgIHluID0gKyh5ID0gbmV3IEN0b3IoeSkpO1xyXG5cclxuICAgIC8vIEVpdGhlciDCsUluZmluaXR5LCBOYU4gb3IgwrEwP1xyXG4gICAgaWYgKCF4LmQgfHwgIXkuZCB8fCAheC5kWzBdIHx8ICF5LmRbMF0pIHJldHVybiBuZXcgQ3RvcihtYXRocG93KCt4LCB5bikpO1xyXG5cclxuICAgIHggPSBuZXcgQ3Rvcih4KTtcclxuXHJcbiAgICBpZiAoeC5lcSgxKSkgcmV0dXJuIHg7XHJcblxyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuXHJcbiAgICBpZiAoeS5lcSgxKSkgcmV0dXJuIGZpbmFsaXNlKHgsIHByLCBybSk7XHJcblxyXG4gICAgLy8geSBleHBvbmVudFxyXG4gICAgZSA9IG1hdGhmbG9vcih5LmUgLyBMT0dfQkFTRSk7XHJcblxyXG4gICAgLy8gSWYgeSBpcyBhIHNtYWxsIGludGVnZXIgdXNlIHRoZSAnZXhwb25lbnRpYXRpb24gYnkgc3F1YXJpbmcnIGFsZ29yaXRobS5cclxuICAgIGlmIChlID49IHkuZC5sZW5ndGggLSAxICYmIChrID0geW4gPCAwID8gLXluIDogeW4pIDw9IE1BWF9TQUZFX0lOVEVHRVIpIHtcclxuICAgICAgciA9IGludFBvdyhDdG9yLCB4LCBrLCBwcik7XHJcbiAgICAgIHJldHVybiB5LnMgPCAwID8gbmV3IEN0b3IoMSkuZGl2KHIpIDogZmluYWxpc2UociwgcHIsIHJtKTtcclxuICAgIH1cclxuXHJcbiAgICBzID0geC5zO1xyXG5cclxuICAgIC8vIGlmIHggaXMgbmVnYXRpdmVcclxuICAgIGlmIChzIDwgMCkge1xyXG5cclxuICAgICAgLy8gaWYgeSBpcyBub3QgYW4gaW50ZWdlclxyXG4gICAgICBpZiAoZSA8IHkuZC5sZW5ndGggLSAxKSByZXR1cm4gbmV3IEN0b3IoTmFOKTtcclxuXHJcbiAgICAgIC8vIFJlc3VsdCBpcyBwb3NpdGl2ZSBpZiB4IGlzIG5lZ2F0aXZlIGFuZCB0aGUgbGFzdCBkaWdpdCBvZiBpbnRlZ2VyIHkgaXMgZXZlbi5cclxuICAgICAgaWYgKCh5LmRbZV0gJiAxKSA9PSAwKSBzID0gMTtcclxuXHJcbiAgICAgIC8vIGlmIHguZXEoLTEpXHJcbiAgICAgIGlmICh4LmUgPT0gMCAmJiB4LmRbMF0gPT0gMSAmJiB4LmQubGVuZ3RoID09IDEpIHtcclxuICAgICAgICB4LnMgPSBzO1xyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRXN0aW1hdGUgcmVzdWx0IGV4cG9uZW50LlxyXG4gICAgLy8geF55ID0gMTBeZSwgIHdoZXJlIGUgPSB5ICogbG9nMTAoeClcclxuICAgIC8vIGxvZzEwKHgpID0gbG9nMTAoeF9zaWduaWZpY2FuZCkgKyB4X2V4cG9uZW50XHJcbiAgICAvLyBsb2cxMCh4X3NpZ25pZmljYW5kKSA9IGxuKHhfc2lnbmlmaWNhbmQpIC8gbG4oMTApXHJcbiAgICBrID0gbWF0aHBvdygreCwgeW4pO1xyXG4gICAgZSA9IGsgPT0gMCB8fCAhaXNGaW5pdGUoaylcclxuICAgICAgPyBtYXRoZmxvb3IoeW4gKiAoTWF0aC5sb2coJzAuJyArIGRpZ2l0c1RvU3RyaW5nKHguZCkpIC8gTWF0aC5MTjEwICsgeC5lICsgMSkpXHJcbiAgICAgIDogbmV3IEN0b3IoayArICcnKS5lO1xyXG5cclxuICAgIC8vIEV4cG9uZW50IGVzdGltYXRlIG1heSBiZSBpbmNvcnJlY3QgZS5nLiB4OiAwLjk5OTk5OTk5OTk5OTk5OTk5OSwgeTogMi4yOSwgZTogMCwgci5lOiAtMS5cclxuXHJcbiAgICAvLyBPdmVyZmxvdy91bmRlcmZsb3c/XHJcbiAgICBpZiAoZSA+IEN0b3IubWF4RSArIDEgfHwgZSA8IEN0b3IubWluRSAtIDEpIHJldHVybiBuZXcgQ3RvcihlID4gMCA/IHMgLyAwIDogMCk7XHJcblxyXG4gICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuICAgIEN0b3Iucm91bmRpbmcgPSB4LnMgPSAxO1xyXG5cclxuICAgIC8vIEVzdGltYXRlIHRoZSBleHRyYSBndWFyZCBkaWdpdHMgbmVlZGVkIHRvIGVuc3VyZSBmaXZlIGNvcnJlY3Qgcm91bmRpbmcgZGlnaXRzIGZyb21cclxuICAgIC8vIG5hdHVyYWxMb2dhcml0aG0oeCkuIEV4YW1wbGUgb2YgZmFpbHVyZSB3aXRob3V0IHRoZXNlIGV4dHJhIGRpZ2l0cyAocHJlY2lzaW9uOiAxMCk6XHJcbiAgICAvLyBuZXcgRGVjaW1hbCgyLjMyNDU2KS5wb3coJzIwODc5ODc0MzY1MzQ1NjYuNDY0MTEnKVxyXG4gICAgLy8gc2hvdWxkIGJlIDEuMTYyMzc3ODIzZSs3NjQ5MTQ5MDUxNzM4MTUsIGJ1dCBpcyAxLjE2MjM1NTgyM2UrNzY0OTE0OTA1MTczODE1XHJcbiAgICBrID0gTWF0aC5taW4oMTIsIChlICsgJycpLmxlbmd0aCk7XHJcblxyXG4gICAgLy8gciA9IHheeSA9IGV4cCh5KmxuKHgpKVxyXG4gICAgciA9IG5hdHVyYWxFeHBvbmVudGlhbCh5LnRpbWVzKG5hdHVyYWxMb2dhcml0aG0oeCwgcHIgKyBrKSksIHByKTtcclxuXHJcbiAgICAvLyByIG1heSBiZSBJbmZpbml0eSwgZS5nLiAoMC45OTk5OTk5OTk5OTk5OTk5KS5wb3coLTFlKzQwKVxyXG4gICAgaWYgKHIuZCkge1xyXG5cclxuICAgICAgLy8gVHJ1bmNhdGUgdG8gdGhlIHJlcXVpcmVkIHByZWNpc2lvbiBwbHVzIGZpdmUgcm91bmRpbmcgZGlnaXRzLlxyXG4gICAgICByID0gZmluYWxpc2UociwgcHIgKyA1LCAxKTtcclxuXHJcbiAgICAgIC8vIElmIHRoZSByb3VuZGluZyBkaWdpdHMgYXJlIFs0OV05OTk5IG9yIFs1MF0wMDAwIGluY3JlYXNlIHRoZSBwcmVjaXNpb24gYnkgMTAgYW5kIHJlY2FsY3VsYXRlXHJcbiAgICAgIC8vIHRoZSByZXN1bHQuXHJcbiAgICAgIGlmIChjaGVja1JvdW5kaW5nRGlnaXRzKHIuZCwgcHIsIHJtKSkge1xyXG4gICAgICAgIGUgPSBwciArIDEwO1xyXG5cclxuICAgICAgICAvLyBUcnVuY2F0ZSB0byB0aGUgaW5jcmVhc2VkIHByZWNpc2lvbiBwbHVzIGZpdmUgcm91bmRpbmcgZGlnaXRzLlxyXG4gICAgICAgIHIgPSBmaW5hbGlzZShuYXR1cmFsRXhwb25lbnRpYWwoeS50aW1lcyhuYXR1cmFsTG9nYXJpdGhtKHgsIGUgKyBrKSksIGUpLCBlICsgNSwgMSk7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIGZvciAxNCBuaW5lcyBmcm9tIHRoZSAybmQgcm91bmRpbmcgZGlnaXQgKHRoZSBmaXJzdCByb3VuZGluZyBkaWdpdCBtYXkgYmUgNCBvciA5KS5cclxuICAgICAgICBpZiAoK2RpZ2l0c1RvU3RyaW5nKHIuZCkuc2xpY2UocHIgKyAxLCBwciArIDE1KSArIDEgPT0gMWUxNCkge1xyXG4gICAgICAgICAgciA9IGZpbmFsaXNlKHIsIHByICsgMSwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgci5zID0gcztcclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuICAgIEN0b3Iucm91bmRpbmcgPSBybTtcclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UociwgcHIsIHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgcm91bmRlZCB0byBgc2RgIHNpZ25pZmljYW50IGRpZ2l0c1xyXG4gICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIFJldHVybiBleHBvbmVudGlhbCBub3RhdGlvbiBpZiBgc2RgIGlzIGxlc3MgdGhhbiB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBuZWNlc3NhcnkgdG8gcmVwcmVzZW50XHJcbiAgICogdGhlIGludGVnZXIgcGFydCBvZiB0aGUgdmFsdWUgaW4gbm9ybWFsIG5vdGF0aW9uLlxyXG4gICAqXHJcbiAgICogW3NkXSB7bnVtYmVyfSBTaWduaWZpY2FudCBkaWdpdHMuIEludGVnZXIsIDEgdG8gTUFYX0RJR0lUUyBpbmNsdXNpdmUuXHJcbiAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC50b1ByZWNpc2lvbiA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgIHZhciBzdHIsXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICBpZiAoc2QgPT09IHZvaWQgMCkge1xyXG4gICAgICBzdHIgPSBmaW5pdGVUb1N0cmluZyh4LCB4LmUgPD0gQ3Rvci50b0V4cE5lZyB8fCB4LmUgPj0gQ3Rvci50b0V4cFBvcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjaGVja0ludDMyKHNkLCAxLCBNQVhfRElHSVRTKTtcclxuXHJcbiAgICAgIGlmIChybSA9PT0gdm9pZCAwKSBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICAgIGVsc2UgY2hlY2tJbnQzMihybSwgMCwgOCk7XHJcblxyXG4gICAgICB4ID0gZmluYWxpc2UobmV3IEN0b3IoeCksIHNkLCBybSk7XHJcbiAgICAgIHN0ciA9IGZpbml0ZVRvU3RyaW5nKHgsIHNkIDw9IHguZSB8fCB4LmUgPD0gQ3Rvci50b0V4cE5lZywgc2QpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB4LmlzTmVnKCkgJiYgIXguaXNaZXJvKCkgPyAnLScgKyBzdHIgOiBzdHI7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCByb3VuZGVkIHRvIGEgbWF4aW11bSBvZiBgc2RgXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJtYCwgb3IgdG8gYHByZWNpc2lvbmAgYW5kIGByb3VuZGluZ2AgcmVzcGVjdGl2ZWx5IGlmXHJcbiAgICogb21pdHRlZC5cclxuICAgKlxyXG4gICAqIFtzZF0ge251bWJlcn0gU2lnbmlmaWNhbnQgZGlnaXRzLiBJbnRlZ2VyLCAxIHRvIE1BWF9ESUdJVFMgaW5jbHVzaXZlLlxyXG4gICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgKlxyXG4gICAqICd0b1NEKCkgZGlnaXRzIG91dCBvZiByYW5nZToge3NkfSdcclxuICAgKiAndG9TRCgpIGRpZ2l0cyBub3QgYW4gaW50ZWdlcjoge3NkfSdcclxuICAgKiAndG9TRCgpIHJvdW5kaW5nIG1vZGUgbm90IGFuIGludGVnZXI6IHtybX0nXHJcbiAgICogJ3RvU0QoKSByb3VuZGluZyBtb2RlIG91dCBvZiByYW5nZToge3JtfSdcclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9TaWduaWZpY2FudERpZ2l0cyA9IFAudG9TRCA9IGZ1bmN0aW9uIChzZCwgcm0pIHtcclxuICAgIHZhciB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKHNkID09PSB2b2lkIDApIHtcclxuICAgICAgc2QgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2hlY2tJbnQzMihzZCwgMSwgTUFYX0RJR0lUUyk7XHJcblxyXG4gICAgICBpZiAocm0gPT09IHZvaWQgMCkgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgICBlbHNlIGNoZWNrSW50MzIocm0sIDAsIDgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmaW5hbGlzZShuZXcgQ3Rvcih4KSwgc2QsIHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBSZXR1cm4gZXhwb25lbnRpYWwgbm90YXRpb24gaWYgdGhpcyBEZWNpbWFsIGhhcyBhIHBvc2l0aXZlIGV4cG9uZW50IGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhblxyXG4gICAqIGB0b0V4cFBvc2AsIG9yIGEgbmVnYXRpdmUgZXhwb25lbnQgZXF1YWwgdG8gb3IgbGVzcyB0aGFuIGB0b0V4cE5lZ2AuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcixcclxuICAgICAgc3RyID0gZmluaXRlVG9TdHJpbmcoeCwgeC5lIDw9IEN0b3IudG9FeHBOZWcgfHwgeC5lID49IEN0b3IudG9FeHBQb3MpO1xyXG5cclxuICAgIHJldHVybiB4LmlzTmVnKCkgJiYgIXguaXNaZXJvKCkgPyAnLScgKyBzdHIgOiBzdHI7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCB0cnVuY2F0ZWQgdG8gYSB3aG9sZSBudW1iZXIuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRydW5jYXRlZCA9IFAudHJ1bmMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gZmluYWxpc2UobmV3IHRoaXMuY29uc3RydWN0b3IodGhpcyksIHRoaXMuZSArIDEsIDEpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKiBVbmxpa2UgYHRvU3RyaW5nYCwgbmVnYXRpdmUgemVybyB3aWxsIGluY2x1ZGUgdGhlIG1pbnVzIHNpZ24uXHJcbiAgICpcclxuICAgKi9cclxuICBQLnZhbHVlT2YgPSBQLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3IsXHJcbiAgICAgIHN0ciA9IGZpbml0ZVRvU3RyaW5nKHgsIHguZSA8PSBDdG9yLnRvRXhwTmVnIHx8IHguZSA+PSBDdG9yLnRvRXhwUG9zKTtcclxuXHJcbiAgICByZXR1cm4geC5pc05lZygpID8gJy0nICsgc3RyIDogc3RyO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gIC8vIEFkZCBhbGlhc2VzIHRvIG1hdGNoIEJpZ0RlY2ltYWwgbWV0aG9kIG5hbWVzLlxyXG4gIC8vIFAuYWRkID0gUC5wbHVzO1xyXG4gIFAuc3VidHJhY3QgPSBQLm1pbnVzO1xyXG4gIFAubXVsdGlwbHkgPSBQLnRpbWVzO1xyXG4gIFAuZGl2aWRlID0gUC5kaXY7XHJcbiAgUC5yZW1haW5kZXIgPSBQLm1vZDtcclxuICBQLmNvbXBhcmVUbyA9IFAuY21wO1xyXG4gIFAubmVnYXRlID0gUC5uZWc7XHJcbiAgICovXHJcblxyXG5cclxuICAvLyBIZWxwZXIgZnVuY3Rpb25zIGZvciBEZWNpbWFsLnByb3RvdHlwZSAoUCkgYW5kL29yIERlY2ltYWwgbWV0aG9kcywgYW5kIHRoZWlyIGNhbGxlcnMuXHJcblxyXG5cclxuICAvKlxyXG4gICAqICBkaWdpdHNUb1N0cmluZyAgICAgICAgICAgUC5jdWJlUm9vdCwgUC5sb2dhcml0aG0sIFAuc3F1YXJlUm9vdCwgUC50b0ZyYWN0aW9uLCBQLnRvUG93ZXIsXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5pdGVUb1N0cmluZywgbmF0dXJhbEV4cG9uZW50aWFsLCBuYXR1cmFsTG9nYXJpdGhtXHJcbiAgICogIGNoZWNrSW50MzIgICAgICAgICAgICAgICBQLnRvRGVjaW1hbFBsYWNlcywgUC50b0V4cG9uZW50aWFsLCBQLnRvRml4ZWQsIFAudG9OZWFyZXN0LFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgUC50b1ByZWNpc2lvbiwgUC50b1NpZ25pZmljYW50RGlnaXRzLCB0b1N0cmluZ0JpbmFyeSwgcmFuZG9tXHJcbiAgICogIGNoZWNrUm91bmRpbmdEaWdpdHMgICAgICBQLmxvZ2FyaXRobSwgUC50b1Bvd2VyLCBuYXR1cmFsRXhwb25lbnRpYWwsIG5hdHVyYWxMb2dhcml0aG1cclxuICAgKiAgY29udmVydEJhc2UgICAgICAgICAgICAgIHRvU3RyaW5nQmluYXJ5LCBwYXJzZU90aGVyXHJcbiAgICogIGNvcyAgICAgICAgICAgICAgICAgICAgICBQLmNvc1xyXG4gICAqICBkaXZpZGUgICAgICAgICAgICAgICAgICAgUC5hdGFuaCwgUC5jdWJlUm9vdCwgUC5kaXZpZGVkQnksIFAuZGl2aWRlZFRvSW50ZWdlckJ5LFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgUC5sb2dhcml0aG0sIFAubW9kdWxvLCBQLnNxdWFyZVJvb3QsIFAudGFuLCBQLnRhbmgsIFAudG9GcmFjdGlvbixcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAudG9OZWFyZXN0LCB0b1N0cmluZ0JpbmFyeSwgbmF0dXJhbEV4cG9uZW50aWFsLCBuYXR1cmFsTG9nYXJpdGhtLFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdGF5bG9yU2VyaWVzLCBhdGFuMiwgcGFyc2VPdGhlclxyXG4gICAqICBmaW5hbGlzZSAgICAgICAgICAgICAgICAgUC5hYnNvbHV0ZVZhbHVlLCBQLmF0YW4sIFAuYXRhbmgsIFAuY2VpbCwgUC5jb3MsIFAuY29zaCxcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAuY3ViZVJvb3QsIFAuZGl2aWRlZFRvSW50ZWdlckJ5LCBQLmZsb29yLCBQLmxvZ2FyaXRobSwgUC5taW51cyxcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAubW9kdWxvLCBQLm5lZ2F0ZWQsIFAucGx1cywgUC5yb3VuZCwgUC5zaW4sIFAuc2luaCwgUC5zcXVhcmVSb290LFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgUC50YW4sIFAudGltZXMsIFAudG9EZWNpbWFsUGxhY2VzLCBQLnRvRXhwb25lbnRpYWwsIFAudG9GaXhlZCxcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAudG9OZWFyZXN0LCBQLnRvUG93ZXIsIFAudG9QcmVjaXNpb24sIFAudG9TaWduaWZpY2FudERpZ2l0cyxcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAudHJ1bmNhdGVkLCBkaXZpZGUsIGdldExuMTAsIGdldFBpLCBuYXR1cmFsRXhwb25lbnRpYWwsXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBuYXR1cmFsTG9nYXJpdGhtLCBjZWlsLCBmbG9vciwgcm91bmQsIHRydW5jXHJcbiAgICogIGZpbml0ZVRvU3RyaW5nICAgICAgICAgICBQLnRvRXhwb25lbnRpYWwsIFAudG9GaXhlZCwgUC50b1ByZWNpc2lvbiwgUC50b1N0cmluZywgUC52YWx1ZU9mLFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9TdHJpbmdCaW5hcnlcclxuICAgKiAgZ2V0QmFzZTEwRXhwb25lbnQgICAgICAgIFAubWludXMsIFAucGx1cywgUC50aW1lcywgcGFyc2VPdGhlclxyXG4gICAqICBnZXRMbjEwICAgICAgICAgICAgICAgICAgUC5sb2dhcml0aG0sIG5hdHVyYWxMb2dhcml0aG1cclxuICAgKiAgZ2V0UGkgICAgICAgICAgICAgICAgICAgIFAuYWNvcywgUC5hc2luLCBQLmF0YW4sIHRvTGVzc1RoYW5IYWxmUGksIGF0YW4yXHJcbiAgICogIGdldFByZWNpc2lvbiAgICAgICAgICAgICBQLnByZWNpc2lvbiwgUC50b0ZyYWN0aW9uXHJcbiAgICogIGdldFplcm9TdHJpbmcgICAgICAgICAgICBkaWdpdHNUb1N0cmluZywgZmluaXRlVG9TdHJpbmdcclxuICAgKiAgaW50UG93ICAgICAgICAgICAgICAgICAgIFAudG9Qb3dlciwgcGFyc2VPdGhlclxyXG4gICAqICBpc09kZCAgICAgICAgICAgICAgICAgICAgdG9MZXNzVGhhbkhhbGZQaVxyXG4gICAqICBtYXhPck1pbiAgICAgICAgICAgICAgICAgbWF4LCBtaW5cclxuICAgKiAgbmF0dXJhbEV4cG9uZW50aWFsICAgICAgIFAubmF0dXJhbEV4cG9uZW50aWFsLCBQLnRvUG93ZXJcclxuICAgKiAgbmF0dXJhbExvZ2FyaXRobSAgICAgICAgIFAuYWNvc2gsIFAuYXNpbmgsIFAuYXRhbmgsIFAubG9nYXJpdGhtLCBQLm5hdHVyYWxMb2dhcml0aG0sXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBQLnRvUG93ZXIsIG5hdHVyYWxFeHBvbmVudGlhbFxyXG4gICAqICBub25GaW5pdGVUb1N0cmluZyAgICAgICAgZmluaXRlVG9TdHJpbmcsIHRvU3RyaW5nQmluYXJ5XHJcbiAgICogIHBhcnNlRGVjaW1hbCAgICAgICAgICAgICBEZWNpbWFsXHJcbiAgICogIHBhcnNlT3RoZXIgICAgICAgICAgICAgICBEZWNpbWFsXHJcbiAgICogIHNpbiAgICAgICAgICAgICAgICAgICAgICBQLnNpblxyXG4gICAqICB0YXlsb3JTZXJpZXMgICAgICAgICAgICAgUC5jb3NoLCBQLnNpbmgsIGNvcywgc2luXHJcbiAgICogIHRvTGVzc1RoYW5IYWxmUGkgICAgICAgICBQLmNvcywgUC5zaW5cclxuICAgKiAgdG9TdHJpbmdCaW5hcnkgICAgICAgICAgIFAudG9CaW5hcnksIFAudG9IZXhhZGVjaW1hbCwgUC50b09jdGFsXHJcbiAgICogIHRydW5jYXRlICAgICAgICAgICAgICAgICBpbnRQb3dcclxuICAgKlxyXG4gICAqICBUaHJvd3M6ICAgICAgICAgICAgICAgICAgUC5sb2dhcml0aG0sIFAucHJlY2lzaW9uLCBQLnRvRnJhY3Rpb24sIGNoZWNrSW50MzIsIGdldExuMTAsIGdldFBpLFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0dXJhbExvZ2FyaXRobSwgY29uZmlnLCBwYXJzZU90aGVyLCByYW5kb20sIERlY2ltYWxcclxuICAgKi9cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGRpZ2l0c1RvU3RyaW5nKGQpIHtcclxuICAgIHZhciBpLCBrLCB3cyxcclxuICAgICAgaW5kZXhPZkxhc3RXb3JkID0gZC5sZW5ndGggLSAxLFxyXG4gICAgICBzdHIgPSAnJyxcclxuICAgICAgdyA9IGRbMF07XHJcblxyXG4gICAgaWYgKGluZGV4T2ZMYXN0V29yZCA+IDApIHtcclxuICAgICAgc3RyICs9IHc7XHJcbiAgICAgIGZvciAoaSA9IDE7IGkgPCBpbmRleE9mTGFzdFdvcmQ7IGkrKykge1xyXG4gICAgICAgIHdzID0gZFtpXSArICcnO1xyXG4gICAgICAgIGsgPSBMT0dfQkFTRSAtIHdzLmxlbmd0aDtcclxuICAgICAgICBpZiAoaykgc3RyICs9IGdldFplcm9TdHJpbmcoayk7XHJcbiAgICAgICAgc3RyICs9IHdzO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB3ID0gZFtpXTtcclxuICAgICAgd3MgPSB3ICsgJyc7XHJcbiAgICAgIGsgPSBMT0dfQkFTRSAtIHdzLmxlbmd0aDtcclxuICAgICAgaWYgKGspIHN0ciArPSBnZXRaZXJvU3RyaW5nKGspO1xyXG4gICAgfSBlbHNlIGlmICh3ID09PSAwKSB7XHJcbiAgICAgIHJldHVybiAnMCc7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zIG9mIGxhc3Qgdy5cclxuICAgIGZvciAoOyB3ICUgMTAgPT09IDA7KSB3IC89IDEwO1xyXG5cclxuICAgIHJldHVybiBzdHIgKyB3O1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGNoZWNrSW50MzIoaSwgbWluLCBtYXgpIHtcclxuICAgIGlmIChpICE9PSB+fmkgfHwgaSA8IG1pbiB8fCBpID4gbWF4KSB7XHJcbiAgICAgIHRocm93IEVycm9yKGludmFsaWRBcmd1bWVudCArIGkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogQ2hlY2sgNSByb3VuZGluZyBkaWdpdHMgaWYgYHJlcGVhdGluZ2AgaXMgbnVsbCwgNCBvdGhlcndpc2UuXHJcbiAgICogYHJlcGVhdGluZyA9PSBudWxsYCBpZiBjYWxsZXIgaXMgYGxvZ2Agb3IgYHBvd2AsXHJcbiAgICogYHJlcGVhdGluZyAhPSBudWxsYCBpZiBjYWxsZXIgaXMgYG5hdHVyYWxMb2dhcml0aG1gIG9yIGBuYXR1cmFsRXhwb25lbnRpYWxgLlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGNoZWNrUm91bmRpbmdEaWdpdHMoZCwgaSwgcm0sIHJlcGVhdGluZykge1xyXG4gICAgdmFyIGRpLCBrLCByLCByZDtcclxuXHJcbiAgICAvLyBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgYXJyYXkgZC5cclxuICAgIGZvciAoayA9IGRbMF07IGsgPj0gMTA7IGsgLz0gMTApIC0taTtcclxuXHJcbiAgICAvLyBJcyB0aGUgcm91bmRpbmcgZGlnaXQgaW4gdGhlIGZpcnN0IHdvcmQgb2YgZD9cclxuICAgIGlmICgtLWkgPCAwKSB7XHJcbiAgICAgIGkgKz0gTE9HX0JBU0U7XHJcbiAgICAgIGRpID0gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRpID0gTWF0aC5jZWlsKChpICsgMSkgLyBMT0dfQkFTRSk7XHJcbiAgICAgIGkgJT0gTE9HX0JBU0U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gaSBpcyB0aGUgaW5kZXggKDAgLSA2KSBvZiB0aGUgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAvLyBFLmcuIGlmIHdpdGhpbiB0aGUgd29yZCAzNDg3NTYzIHRoZSBmaXJzdCByb3VuZGluZyBkaWdpdCBpcyA1LFxyXG4gICAgLy8gdGhlbiBpID0gNCwgayA9IDEwMDAsIHJkID0gMzQ4NzU2MyAlIDEwMDAgPSA1NjNcclxuICAgIGsgPSBtYXRocG93KDEwLCBMT0dfQkFTRSAtIGkpO1xyXG4gICAgcmQgPSBkW2RpXSAlIGsgfCAwO1xyXG5cclxuICAgIGlmIChyZXBlYXRpbmcgPT0gbnVsbCkge1xyXG4gICAgICBpZiAoaSA8IDMpIHtcclxuICAgICAgICBpZiAoaSA9PSAwKSByZCA9IHJkIC8gMTAwIHwgMDtcclxuICAgICAgICBlbHNlIGlmIChpID09IDEpIHJkID0gcmQgLyAxMCB8IDA7XHJcbiAgICAgICAgciA9IHJtIDwgNCAmJiByZCA9PSA5OTk5OSB8fCBybSA+IDMgJiYgcmQgPT0gNDk5OTkgfHwgcmQgPT0gNTAwMDAgfHwgcmQgPT0gMDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByID0gKHJtIDwgNCAmJiByZCArIDEgPT0gayB8fCBybSA+IDMgJiYgcmQgKyAxID09IGsgLyAyKSAmJlxyXG4gICAgICAgICAgKGRbZGkgKyAxXSAvIGsgLyAxMDAgfCAwKSA9PSBtYXRocG93KDEwLCBpIC0gMikgLSAxIHx8XHJcbiAgICAgICAgICAgIChyZCA9PSBrIC8gMiB8fCByZCA9PSAwKSAmJiAoZFtkaSArIDFdIC8gayAvIDEwMCB8IDApID09IDA7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmIChpIDwgNCkge1xyXG4gICAgICAgIGlmIChpID09IDApIHJkID0gcmQgLyAxMDAwIHwgMDtcclxuICAgICAgICBlbHNlIGlmIChpID09IDEpIHJkID0gcmQgLyAxMDAgfCAwO1xyXG4gICAgICAgIGVsc2UgaWYgKGkgPT0gMikgcmQgPSByZCAvIDEwIHwgMDtcclxuICAgICAgICByID0gKHJlcGVhdGluZyB8fCBybSA8IDQpICYmIHJkID09IDk5OTkgfHwgIXJlcGVhdGluZyAmJiBybSA+IDMgJiYgcmQgPT0gNDk5OTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICByID0gKChyZXBlYXRpbmcgfHwgcm0gPCA0KSAmJiByZCArIDEgPT0gayB8fFxyXG4gICAgICAgICghcmVwZWF0aW5nICYmIHJtID4gMykgJiYgcmQgKyAxID09IGsgLyAyKSAmJlxyXG4gICAgICAgICAgKGRbZGkgKyAxXSAvIGsgLyAxMDAwIHwgMCkgPT0gbWF0aHBvdygxMCwgaSAtIDMpIC0gMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIENvbnZlcnQgc3RyaW5nIG9mIGBiYXNlSW5gIHRvIGFuIGFycmF5IG9mIG51bWJlcnMgb2YgYGJhc2VPdXRgLlxyXG4gIC8vIEVnLiBjb252ZXJ0QmFzZSgnMjU1JywgMTAsIDE2KSByZXR1cm5zIFsxNSwgMTVdLlxyXG4gIC8vIEVnLiBjb252ZXJ0QmFzZSgnZmYnLCAxNiwgMTApIHJldHVybnMgWzIsIDUsIDVdLlxyXG4gIGZ1bmN0aW9uIGNvbnZlcnRCYXNlKHN0ciwgYmFzZUluLCBiYXNlT3V0KSB7XHJcbiAgICB2YXIgaixcclxuICAgICAgYXJyID0gWzBdLFxyXG4gICAgICBhcnJMLFxyXG4gICAgICBpID0gMCxcclxuICAgICAgc3RyTCA9IHN0ci5sZW5ndGg7XHJcblxyXG4gICAgZm9yICg7IGkgPCBzdHJMOykge1xyXG4gICAgICBmb3IgKGFyckwgPSBhcnIubGVuZ3RoOyBhcnJMLS07KSBhcnJbYXJyTF0gKj0gYmFzZUluO1xyXG4gICAgICBhcnJbMF0gKz0gTlVNRVJBTFMuaW5kZXhPZihzdHIuY2hhckF0KGkrKykpO1xyXG4gICAgICBmb3IgKGogPSAwOyBqIDwgYXJyLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgaWYgKGFycltqXSA+IGJhc2VPdXQgLSAxKSB7XHJcbiAgICAgICAgICBpZiAoYXJyW2ogKyAxXSA9PT0gdm9pZCAwKSBhcnJbaiArIDFdID0gMDtcclxuICAgICAgICAgIGFycltqICsgMV0gKz0gYXJyW2pdIC8gYmFzZU91dCB8IDA7XHJcbiAgICAgICAgICBhcnJbal0gJT0gYmFzZU91dDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYXJyLnJldmVyc2UoKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIGNvcyh4KSA9IDEgLSB4XjIvMiEgKyB4XjQvNCEgLSAuLi5cclxuICAgKiB8eHwgPCBwaS8yXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBjb3NpbmUoQ3RvciwgeCkge1xyXG4gICAgdmFyIGssIHksXHJcbiAgICAgIGxlbiA9IHguZC5sZW5ndGg7XHJcblxyXG4gICAgLy8gQXJndW1lbnQgcmVkdWN0aW9uOiBjb3MoNHgpID0gOCooY29zXjQoeCkgLSBjb3NeMih4KSkgKyAxXHJcbiAgICAvLyBpLmUuIGNvcyh4KSA9IDgqKGNvc140KHgvNCkgLSBjb3NeMih4LzQpKSArIDFcclxuXHJcbiAgICAvLyBFc3RpbWF0ZSB0aGUgb3B0aW11bSBudW1iZXIgb2YgdGltZXMgdG8gdXNlIHRoZSBhcmd1bWVudCByZWR1Y3Rpb24uXHJcbiAgICBpZiAobGVuIDwgMzIpIHtcclxuICAgICAgayA9IE1hdGguY2VpbChsZW4gLyAzKTtcclxuICAgICAgeSA9ICgxIC8gdGlueVBvdyg0LCBrKSkudG9TdHJpbmcoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGsgPSAxNjtcclxuICAgICAgeSA9ICcyLjMyODMwNjQzNjUzODY5NjI4OTA2MjVlLTEwJztcclxuICAgIH1cclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiArPSBrO1xyXG5cclxuICAgIHggPSB0YXlsb3JTZXJpZXMoQ3RvciwgMSwgeC50aW1lcyh5KSwgbmV3IEN0b3IoMSkpO1xyXG5cclxuICAgIC8vIFJldmVyc2UgYXJndW1lbnQgcmVkdWN0aW9uXHJcbiAgICBmb3IgKHZhciBpID0gazsgaS0tOykge1xyXG4gICAgICB2YXIgY29zMnggPSB4LnRpbWVzKHgpO1xyXG4gICAgICB4ID0gY29zMngudGltZXMoY29zMngpLm1pbnVzKGNvczJ4KS50aW1lcyg4KS5wbHVzKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uIC09IGs7XHJcblxyXG4gICAgcmV0dXJuIHg7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBQZXJmb3JtIGRpdmlzaW9uIGluIHRoZSBzcGVjaWZpZWQgYmFzZS5cclxuICAgKi9cclxuICB2YXIgZGl2aWRlID0gKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAvLyBBc3N1bWVzIG5vbi16ZXJvIHggYW5kIGssIGFuZCBoZW5jZSBub24temVybyByZXN1bHQuXHJcbiAgICBmdW5jdGlvbiBtdWx0aXBseUludGVnZXIoeCwgaywgYmFzZSkge1xyXG4gICAgICB2YXIgdGVtcCxcclxuICAgICAgICBjYXJyeSA9IDAsXHJcbiAgICAgICAgaSA9IHgubGVuZ3RoO1xyXG5cclxuICAgICAgZm9yICh4ID0geC5zbGljZSgpOyBpLS07KSB7XHJcbiAgICAgICAgdGVtcCA9IHhbaV0gKiBrICsgY2Fycnk7XHJcbiAgICAgICAgeFtpXSA9IHRlbXAgJSBiYXNlIHwgMDtcclxuICAgICAgICBjYXJyeSA9IHRlbXAgLyBiYXNlIHwgMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGNhcnJ5KSB4LnVuc2hpZnQoY2FycnkpO1xyXG5cclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9XHJcblxyXG4gICAgZnVuY3Rpb24gY29tcGFyZShhLCBiLCBhTCwgYkwpIHtcclxuICAgICAgdmFyIGksIHI7XHJcblxyXG4gICAgICBpZiAoYUwgIT0gYkwpIHtcclxuICAgICAgICByID0gYUwgPiBiTCA/IDEgOiAtMTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmb3IgKGkgPSByID0gMDsgaSA8IGFMOyBpKyspIHtcclxuICAgICAgICAgIGlmIChhW2ldICE9IGJbaV0pIHtcclxuICAgICAgICAgICAgciA9IGFbaV0gPiBiW2ldID8gMSA6IC0xO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiByO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHN1YnRyYWN0KGEsIGIsIGFMLCBiYXNlKSB7XHJcbiAgICAgIHZhciBpID0gMDtcclxuXHJcbiAgICAgIC8vIFN1YnRyYWN0IGIgZnJvbSBhLlxyXG4gICAgICBmb3IgKDsgYUwtLTspIHtcclxuICAgICAgICBhW2FMXSAtPSBpO1xyXG4gICAgICAgIGkgPSBhW2FMXSA8IGJbYUxdID8gMSA6IDA7XHJcbiAgICAgICAgYVthTF0gPSBpICogYmFzZSArIGFbYUxdIC0gYlthTF07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIHplcm9zLlxyXG4gICAgICBmb3IgKDsgIWFbMF0gJiYgYS5sZW5ndGggPiAxOykgYS5zaGlmdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbiAoeCwgeSwgcHIsIHJtLCBkcCwgYmFzZSkge1xyXG4gICAgICB2YXIgY21wLCBlLCBpLCBrLCBsb2dCYXNlLCBtb3JlLCBwcm9kLCBwcm9kTCwgcSwgcWQsIHJlbSwgcmVtTCwgcmVtMCwgc2QsIHQsIHhpLCB4TCwgeWQwLFxyXG4gICAgICAgIHlMLCB5eixcclxuICAgICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcixcclxuICAgICAgICBzaWduID0geC5zID09IHkucyA/IDEgOiAtMSxcclxuICAgICAgICB4ZCA9IHguZCxcclxuICAgICAgICB5ZCA9IHkuZDtcclxuXHJcbiAgICAgIC8vIEVpdGhlciBOYU4sIEluZmluaXR5IG9yIDA/XHJcbiAgICAgIGlmICgheGQgfHwgIXhkWzBdIHx8ICF5ZCB8fCAheWRbMF0pIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBDdG9yKC8vIFJldHVybiBOYU4gaWYgZWl0aGVyIE5hTiwgb3IgYm90aCBJbmZpbml0eSBvciAwLlxyXG4gICAgICAgICAgIXgucyB8fCAheS5zIHx8ICh4ZCA/IHlkICYmIHhkWzBdID09IHlkWzBdIDogIXlkKSA/IE5hTiA6XHJcblxyXG4gICAgICAgICAgLy8gUmV0dXJuIMKxMCBpZiB4IGlzIDAgb3IgeSBpcyDCsUluZmluaXR5LCBvciByZXR1cm4gwrFJbmZpbml0eSBhcyB5IGlzIDAuXHJcbiAgICAgICAgICB4ZCAmJiB4ZFswXSA9PSAwIHx8ICF5ZCA/IHNpZ24gKiAwIDogc2lnbiAvIDApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoYmFzZSkge1xyXG4gICAgICAgIGxvZ0Jhc2UgPSAxO1xyXG4gICAgICAgIGUgPSB4LmUgLSB5LmU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYmFzZSA9IEJBU0U7XHJcbiAgICAgICAgbG9nQmFzZSA9IExPR19CQVNFO1xyXG4gICAgICAgIGUgPSBtYXRoZmxvb3IoeC5lIC8gbG9nQmFzZSkgLSBtYXRoZmxvb3IoeS5lIC8gbG9nQmFzZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHlMID0geWQubGVuZ3RoO1xyXG4gICAgICB4TCA9IHhkLmxlbmd0aDtcclxuICAgICAgcSA9IG5ldyBDdG9yKHNpZ24pO1xyXG4gICAgICBxZCA9IHEuZCA9IFtdO1xyXG5cclxuICAgICAgLy8gUmVzdWx0IGV4cG9uZW50IG1heSBiZSBvbmUgbGVzcyB0aGFuIGUuXHJcbiAgICAgIC8vIFRoZSBkaWdpdCBhcnJheSBvZiBhIERlY2ltYWwgZnJvbSB0b1N0cmluZ0JpbmFyeSBtYXkgaGF2ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgZm9yIChpID0gMDsgeWRbaV0gPT0gKHhkW2ldIHx8IDApOyBpKyspO1xyXG5cclxuICAgICAgaWYgKHlkW2ldID4gKHhkW2ldIHx8IDApKSBlLS07XHJcblxyXG4gICAgICBpZiAocHIgPT0gbnVsbCkge1xyXG4gICAgICAgIHNkID0gcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgICAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICAgIH0gZWxzZSBpZiAoZHApIHtcclxuICAgICAgICBzZCA9IHByICsgKHguZSAtIHkuZSkgKyAxO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHNkID0gcHI7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChzZCA8IDApIHtcclxuICAgICAgICBxZC5wdXNoKDEpO1xyXG4gICAgICAgIG1vcmUgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAvLyBDb252ZXJ0IHByZWNpc2lvbiBpbiBudW1iZXIgb2YgYmFzZSAxMCBkaWdpdHMgdG8gYmFzZSAxZTcgZGlnaXRzLlxyXG4gICAgICAgIHNkID0gc2QgLyBsb2dCYXNlICsgMiB8IDA7XHJcbiAgICAgICAgaSA9IDA7XHJcblxyXG4gICAgICAgIC8vIGRpdmlzb3IgPCAxZTdcclxuICAgICAgICBpZiAoeUwgPT0gMSkge1xyXG4gICAgICAgICAgayA9IDA7XHJcbiAgICAgICAgICB5ZCA9IHlkWzBdO1xyXG4gICAgICAgICAgc2QrKztcclxuXHJcbiAgICAgICAgICAvLyBrIGlzIHRoZSBjYXJyeS5cclxuICAgICAgICAgIGZvciAoOyAoaSA8IHhMIHx8IGspICYmIHNkLS07IGkrKykge1xyXG4gICAgICAgICAgICB0ID0gayAqIGJhc2UgKyAoeGRbaV0gfHwgMCk7XHJcbiAgICAgICAgICAgIHFkW2ldID0gdCAvIHlkIHwgMDtcclxuICAgICAgICAgICAgayA9IHQgJSB5ZCB8IDA7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgbW9yZSA9IGsgfHwgaSA8IHhMO1xyXG5cclxuICAgICAgICAvLyBkaXZpc29yID49IDFlN1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gTm9ybWFsaXNlIHhkIGFuZCB5ZCBzbyBoaWdoZXN0IG9yZGVyIGRpZ2l0IG9mIHlkIGlzID49IGJhc2UvMlxyXG4gICAgICAgICAgayA9IGJhc2UgLyAoeWRbMF0gKyAxKSB8IDA7XHJcblxyXG4gICAgICAgICAgaWYgKGsgPiAxKSB7XHJcbiAgICAgICAgICAgIHlkID0gbXVsdGlwbHlJbnRlZ2VyKHlkLCBrLCBiYXNlKTtcclxuICAgICAgICAgICAgeGQgPSBtdWx0aXBseUludGVnZXIoeGQsIGssIGJhc2UpO1xyXG4gICAgICAgICAgICB5TCA9IHlkLmxlbmd0aDtcclxuICAgICAgICAgICAgeEwgPSB4ZC5sZW5ndGg7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgeGkgPSB5TDtcclxuICAgICAgICAgIHJlbSA9IHhkLnNsaWNlKDAsIHlMKTtcclxuICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgIC8vIEFkZCB6ZXJvcyB0byBtYWtlIHJlbWFpbmRlciBhcyBsb25nIGFzIGRpdmlzb3IuXHJcbiAgICAgICAgICBmb3IgKDsgcmVtTCA8IHlMOykgcmVtW3JlbUwrK10gPSAwO1xyXG5cclxuICAgICAgICAgIHl6ID0geWQuc2xpY2UoKTtcclxuICAgICAgICAgIHl6LnVuc2hpZnQoMCk7XHJcbiAgICAgICAgICB5ZDAgPSB5ZFswXTtcclxuXHJcbiAgICAgICAgICBpZiAoeWRbMV0gPj0gYmFzZSAvIDIpICsreWQwO1xyXG5cclxuICAgICAgICAgIGRvIHtcclxuICAgICAgICAgICAgayA9IDA7XHJcblxyXG4gICAgICAgICAgICAvLyBDb21wYXJlIGRpdmlzb3IgYW5kIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgY21wID0gY29tcGFyZSh5ZCwgcmVtLCB5TCwgcmVtTCk7XHJcblxyXG4gICAgICAgICAgICAvLyBJZiBkaXZpc29yIDwgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICBpZiAoY21wIDwgMCkge1xyXG5cclxuICAgICAgICAgICAgICAvLyBDYWxjdWxhdGUgdHJpYWwgZGlnaXQsIGsuXHJcbiAgICAgICAgICAgICAgcmVtMCA9IHJlbVswXTtcclxuICAgICAgICAgICAgICBpZiAoeUwgIT0gcmVtTCkgcmVtMCA9IHJlbTAgKiBiYXNlICsgKHJlbVsxXSB8fCAwKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gayB3aWxsIGJlIGhvdyBtYW55IHRpbWVzIHRoZSBkaXZpc29yIGdvZXMgaW50byB0aGUgY3VycmVudCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgayA9IHJlbTAgLyB5ZDAgfCAwO1xyXG5cclxuICAgICAgICAgICAgICAvLyAgQWxnb3JpdGhtOlxyXG4gICAgICAgICAgICAgIC8vICAxLiBwcm9kdWN0ID0gZGl2aXNvciAqIHRyaWFsIGRpZ2l0IChrKVxyXG4gICAgICAgICAgICAgIC8vICAyLiBpZiBwcm9kdWN0ID4gcmVtYWluZGVyOiBwcm9kdWN0IC09IGRpdmlzb3IsIGstLVxyXG4gICAgICAgICAgICAgIC8vICAzLiByZW1haW5kZXIgLT0gcHJvZHVjdFxyXG4gICAgICAgICAgICAgIC8vICA0LiBpZiBwcm9kdWN0IHdhcyA8IHJlbWFpbmRlciBhdCAyOlxyXG4gICAgICAgICAgICAgIC8vICAgIDUuIGNvbXBhcmUgbmV3IHJlbWFpbmRlciBhbmQgZGl2aXNvclxyXG4gICAgICAgICAgICAgIC8vICAgIDYuIElmIHJlbWFpbmRlciA+IGRpdmlzb3I6IHJlbWFpbmRlciAtPSBkaXZpc29yLCBrKytcclxuXHJcbiAgICAgICAgICAgICAgaWYgKGsgPiAxKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoayA+PSBiYXNlKSBrID0gYmFzZSAtIDE7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcHJvZHVjdCA9IGRpdmlzb3IgKiB0cmlhbCBkaWdpdC5cclxuICAgICAgICAgICAgICAgIHByb2QgPSBtdWx0aXBseUludGVnZXIoeWQsIGssIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgcHJvZEwgPSBwcm9kLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgcHJvZHVjdCBhbmQgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgY21wID0gY29tcGFyZShwcm9kLCByZW0sIHByb2RMLCByZW1MKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBwcm9kdWN0ID4gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgaWYgKGNtcCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgIGstLTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vIFN1YnRyYWN0IGRpdmlzb3IgZnJvbSBwcm9kdWN0LlxyXG4gICAgICAgICAgICAgICAgICBzdWJ0cmFjdChwcm9kLCB5TCA8IHByb2RMID8geXogOiB5ZCwgcHJvZEwsIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gY21wIGlzIC0xLlxyXG4gICAgICAgICAgICAgICAgLy8gSWYgayBpcyAwLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNvbXBhcmUgeWQgYW5kIHJlbSBhZ2FpbiBiZWxvdywgc28gY2hhbmdlIGNtcCB0byAxXHJcbiAgICAgICAgICAgICAgICAvLyB0byBhdm9pZCBpdC4gSWYgayBpcyAxIHRoZXJlIGlzIGEgbmVlZCB0byBjb21wYXJlIHlkIGFuZCByZW0gYWdhaW4gYmVsb3cuXHJcbiAgICAgICAgICAgICAgICBpZiAoayA9PSAwKSBjbXAgPSBrID0gMTtcclxuICAgICAgICAgICAgICAgIHByb2QgPSB5ZC5zbGljZSgpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgcHJvZEwgPSBwcm9kLmxlbmd0aDtcclxuICAgICAgICAgICAgICBpZiAocHJvZEwgPCByZW1MKSBwcm9kLnVuc2hpZnQoMCk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIFN1YnRyYWN0IHByb2R1Y3QgZnJvbSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgc3VidHJhY3QocmVtLCBwcm9kLCByZW1MLCBiYXNlKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gSWYgcHJvZHVjdCB3YXMgPCBwcmV2aW91cyByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgaWYgKGNtcCA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgcmVtTCA9IHJlbS5sZW5ndGg7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gQ29tcGFyZSBkaXZpc29yIGFuZCBuZXcgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgY21wID0gY29tcGFyZSh5ZCwgcmVtLCB5TCwgcmVtTCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gSWYgZGl2aXNvciA8IG5ldyByZW1haW5kZXIsIHN1YnRyYWN0IGRpdmlzb3IgZnJvbSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgICAgICBpZiAoY21wIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgICBrKys7XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgICBzdWJ0cmFjdChyZW0sIHlMIDwgcmVtTCA/IHl6IDogeWQsIHJlbUwsIGJhc2UpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgcmVtTCA9IHJlbS5sZW5ndGg7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoY21wID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgaysrO1xyXG4gICAgICAgICAgICAgIHJlbSA9IFswXTtcclxuICAgICAgICAgICAgfSAgICAvLyBpZiBjbXAgPT09IDEsIGsgd2lsbCBiZSAwXHJcblxyXG4gICAgICAgICAgICAvLyBBZGQgdGhlIG5leHQgZGlnaXQsIGssIHRvIHRoZSByZXN1bHQgYXJyYXkuXHJcbiAgICAgICAgICAgIHFkW2krK10gPSBrO1xyXG5cclxuICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSByZW1haW5kZXIuXHJcbiAgICAgICAgICAgIGlmIChjbXAgJiYgcmVtWzBdKSB7XHJcbiAgICAgICAgICAgICAgcmVtW3JlbUwrK10gPSB4ZFt4aV0gfHwgMDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByZW0gPSBbeGRbeGldXTtcclxuICAgICAgICAgICAgICByZW1MID0gMTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0gd2hpbGUgKCh4aSsrIDwgeEwgfHwgcmVtWzBdICE9PSB2b2lkIDApICYmIHNkLS0pO1xyXG5cclxuICAgICAgICAgIG1vcmUgPSByZW1bMF0gIT09IHZvaWQgMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIExlYWRpbmcgemVybz9cclxuICAgICAgICBpZiAoIXFkWzBdKSBxZC5zaGlmdCgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBsb2dCYXNlIGlzIDEgd2hlbiBkaXZpZGUgaXMgYmVpbmcgdXNlZCBmb3IgYmFzZSBjb252ZXJzaW9uLlxyXG4gICAgICBpZiAobG9nQmFzZSA9PSAxKSB7XHJcbiAgICAgICAgcS5lID0gZTtcclxuICAgICAgICBpbmV4YWN0ID0gbW9yZTtcclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgLy8gVG8gY2FsY3VsYXRlIHEuZSwgZmlyc3QgZ2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHFkWzBdLlxyXG4gICAgICAgIGZvciAoaSA9IDEsIGsgPSBxZFswXTsgayA+PSAxMDsgayAvPSAxMCkgaSsrO1xyXG4gICAgICAgIHEuZSA9IGkgKyBlICogbG9nQmFzZSAtIDE7XHJcblxyXG4gICAgICAgIGZpbmFsaXNlKHEsIGRwID8gcHIgKyBxLmUgKyAxIDogcHIsIHJtLCBtb3JlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIHE7XHJcbiAgICB9O1xyXG4gIH0pKCk7XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJvdW5kIGB4YCB0byBgc2RgIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGBybWAuXHJcbiAgICogQ2hlY2sgZm9yIG92ZXIvdW5kZXItZmxvdy5cclxuICAgKi9cclxuICAgZnVuY3Rpb24gZmluYWxpc2UoeCwgc2QsIHJtLCBpc1RydW5jYXRlZCkge1xyXG4gICAgdmFyIGRpZ2l0cywgaSwgaiwgaywgcmQsIHJvdW5kVXAsIHcsIHhkLCB4ZGksXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIC8vIERvbid0IHJvdW5kIGlmIHNkIGlzIG51bGwgb3IgdW5kZWZpbmVkLlxyXG4gICAgb3V0OiBpZiAoc2QgIT0gbnVsbCkge1xyXG4gICAgICB4ZCA9IHguZDtcclxuXHJcbiAgICAgIC8vIEluZmluaXR5L05hTi5cclxuICAgICAgaWYgKCF4ZCkgcmV0dXJuIHg7XHJcblxyXG4gICAgICAvLyByZDogdGhlIHJvdW5kaW5nIGRpZ2l0LCBpLmUuIHRoZSBkaWdpdCBhZnRlciB0aGUgZGlnaXQgdGhhdCBtYXkgYmUgcm91bmRlZCB1cC5cclxuICAgICAgLy8gdzogdGhlIHdvcmQgb2YgeGQgY29udGFpbmluZyByZCwgYSBiYXNlIDFlNyBudW1iZXIuXHJcbiAgICAgIC8vIHhkaTogdGhlIGluZGV4IG9mIHcgd2l0aGluIHhkLlxyXG4gICAgICAvLyBkaWdpdHM6IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHcuXHJcbiAgICAgIC8vIGk6IHdoYXQgd291bGQgYmUgdGhlIGluZGV4IG9mIHJkIHdpdGhpbiB3IGlmIGFsbCB0aGUgbnVtYmVycyB3ZXJlIDcgZGlnaXRzIGxvbmcgKGkuZS4gaWZcclxuICAgICAgLy8gdGhleSBoYWQgbGVhZGluZyB6ZXJvcylcclxuICAgICAgLy8gajogaWYgPiAwLCB0aGUgYWN0dWFsIGluZGV4IG9mIHJkIHdpdGhpbiB3IChpZiA8IDAsIHJkIGlzIGEgbGVhZGluZyB6ZXJvKS5cclxuXHJcbiAgICAgIC8vIEdldCB0aGUgbGVuZ3RoIG9mIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBkaWdpdHMgYXJyYXkgeGQuXHJcbiAgICAgIGZvciAoZGlnaXRzID0gMSwgayA9IHhkWzBdOyBrID49IDEwOyBrIC89IDEwKSBkaWdpdHMrKztcclxuICAgICAgaSA9IHNkIC0gZGlnaXRzO1xyXG5cclxuICAgICAgLy8gSXMgdGhlIHJvdW5kaW5nIGRpZ2l0IGluIHRoZSBmaXJzdCB3b3JkIG9mIHhkP1xyXG4gICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICBpICs9IExPR19CQVNFO1xyXG4gICAgICAgIGogPSBzZDtcclxuICAgICAgICB3ID0geGRbeGRpID0gMF07XHJcblxyXG4gICAgICAgIC8vIEdldCB0aGUgcm91bmRpbmcgZGlnaXQgYXQgaW5kZXggaiBvZiB3LlxyXG4gICAgICAgIHJkID0gdyAvIG1hdGhwb3coMTAsIGRpZ2l0cyAtIGogLSAxKSAlIDEwIHwgMDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ZGkgPSBNYXRoLmNlaWwoKGkgKyAxKSAvIExPR19CQVNFKTtcclxuICAgICAgICBrID0geGQubGVuZ3RoO1xyXG4gICAgICAgIGlmICh4ZGkgPj0gaykge1xyXG4gICAgICAgICAgaWYgKGlzVHJ1bmNhdGVkKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBOZWVkZWQgYnkgYG5hdHVyYWxFeHBvbmVudGlhbGAsIGBuYXR1cmFsTG9nYXJpdGhtYCBhbmQgYHNxdWFyZVJvb3RgLlxyXG4gICAgICAgICAgICBmb3IgKDsgaysrIDw9IHhkaTspIHhkLnB1c2goMCk7XHJcbiAgICAgICAgICAgIHcgPSByZCA9IDA7XHJcbiAgICAgICAgICAgIGRpZ2l0cyA9IDE7XHJcbiAgICAgICAgICAgIGkgJT0gTE9HX0JBU0U7XHJcbiAgICAgICAgICAgIGogPSBpIC0gTE9HX0JBU0UgKyAxO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgYnJlYWsgb3V0O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB3ID0gayA9IHhkW3hkaV07XHJcblxyXG4gICAgICAgICAgLy8gR2V0IHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHcuXHJcbiAgICAgICAgICBmb3IgKGRpZ2l0cyA9IDE7IGsgPj0gMTA7IGsgLz0gMTApIGRpZ2l0cysrO1xyXG5cclxuICAgICAgICAgIC8vIEdldCB0aGUgaW5kZXggb2YgcmQgd2l0aGluIHcuXHJcbiAgICAgICAgICBpICU9IExPR19CQVNFO1xyXG5cclxuICAgICAgICAgIC8vIEdldCB0aGUgaW5kZXggb2YgcmQgd2l0aGluIHcsIGFkanVzdGVkIGZvciBsZWFkaW5nIHplcm9zLlxyXG4gICAgICAgICAgLy8gVGhlIG51bWJlciBvZiBsZWFkaW5nIHplcm9zIG9mIHcgaXMgZ2l2ZW4gYnkgTE9HX0JBU0UgLSBkaWdpdHMuXHJcbiAgICAgICAgICBqID0gaSAtIExPR19CQVNFICsgZGlnaXRzO1xyXG5cclxuICAgICAgICAgIC8vIEdldCB0aGUgcm91bmRpbmcgZGlnaXQgYXQgaW5kZXggaiBvZiB3LlxyXG4gICAgICAgICAgcmQgPSBqIDwgMCA/IDAgOiB3IC8gbWF0aHBvdygxMCwgZGlnaXRzIC0gaiAtIDEpICUgMTAgfCAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQXJlIHRoZXJlIGFueSBub24temVybyBkaWdpdHMgYWZ0ZXIgdGhlIHJvdW5kaW5nIGRpZ2l0P1xyXG4gICAgICBpc1RydW5jYXRlZCA9IGlzVHJ1bmNhdGVkIHx8IHNkIDwgMCB8fFxyXG4gICAgICAgIHhkW3hkaSArIDFdICE9PSB2b2lkIDAgfHwgKGogPCAwID8gdyA6IHcgJSBtYXRocG93KDEwLCBkaWdpdHMgLSBqIC0gMSkpO1xyXG5cclxuICAgICAgLy8gVGhlIGV4cHJlc3Npb24gYHcgJSBtYXRocG93KDEwLCBkaWdpdHMgLSBqIC0gMSlgIHJldHVybnMgYWxsIHRoZSBkaWdpdHMgb2YgdyB0byB0aGUgcmlnaHRcclxuICAgICAgLy8gb2YgdGhlIGRpZ2l0IGF0IChsZWZ0LXRvLXJpZ2h0KSBpbmRleCBqLCBlLmcuIGlmIHcgaXMgOTA4NzE0IGFuZCBqIGlzIDIsIHRoZSBleHByZXNzaW9uXHJcbiAgICAgIC8vIHdpbGwgZ2l2ZSA3MTQuXHJcblxyXG4gICAgICByb3VuZFVwID0gcm0gPCA0XHJcbiAgICAgICAgPyAocmQgfHwgaXNUcnVuY2F0ZWQpICYmIChybSA9PSAwIHx8IHJtID09ICh4LnMgPCAwID8gMyA6IDIpKVxyXG4gICAgICAgIDogcmQgPiA1IHx8IHJkID09IDUgJiYgKHJtID09IDQgfHwgaXNUcnVuY2F0ZWQgfHwgcm0gPT0gNiAmJlxyXG5cclxuICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlIGRpZ2l0IHRvIHRoZSBsZWZ0IG9mIHRoZSByb3VuZGluZyBkaWdpdCBpcyBvZGQuXHJcbiAgICAgICAgICAoKGkgPiAwID8gaiA+IDAgPyB3IC8gbWF0aHBvdygxMCwgZGlnaXRzIC0gaikgOiAwIDogeGRbeGRpIC0gMV0pICUgMTApICYgMSB8fFxyXG4gICAgICAgICAgICBybSA9PSAoeC5zIDwgMCA/IDggOiA3KSk7XHJcblxyXG4gICAgICBpZiAoc2QgPCAxIHx8ICF4ZFswXSkge1xyXG4gICAgICAgIHhkLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgaWYgKHJvdW5kVXApIHtcclxuXHJcbiAgICAgICAgICAvLyBDb252ZXJ0IHNkIHRvIGRlY2ltYWwgcGxhY2VzLlxyXG4gICAgICAgICAgc2QgLT0geC5lICsgMTtcclxuXHJcbiAgICAgICAgICAvLyAxLCAwLjEsIDAuMDEsIDAuMDAxLCAwLjAwMDEgZXRjLlxyXG4gICAgICAgICAgeGRbMF0gPSBtYXRocG93KDEwLCAoTE9HX0JBU0UgLSBzZCAlIExPR19CQVNFKSAlIExPR19CQVNFKTtcclxuICAgICAgICAgIHguZSA9IC1zZCB8fCAwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gWmVyby5cclxuICAgICAgICAgIHhkWzBdID0geC5lID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBSZW1vdmUgZXhjZXNzIGRpZ2l0cy5cclxuICAgICAgaWYgKGkgPT0gMCkge1xyXG4gICAgICAgIHhkLmxlbmd0aCA9IHhkaTtcclxuICAgICAgICBrID0gMTtcclxuICAgICAgICB4ZGktLTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ZC5sZW5ndGggPSB4ZGkgKyAxO1xyXG4gICAgICAgIGsgPSBtYXRocG93KDEwLCBMT0dfQkFTRSAtIGkpO1xyXG5cclxuICAgICAgICAvLyBFLmcuIDU2NzAwIGJlY29tZXMgNTYwMDAgaWYgNyBpcyB0aGUgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgICAgLy8gaiA+IDAgbWVhbnMgaSA+IG51bWJlciBvZiBsZWFkaW5nIHplcm9zIG9mIHcuXHJcbiAgICAgICAgeGRbeGRpXSA9IGogPiAwID8gKHcgLyBtYXRocG93KDEwLCBkaWdpdHMgLSBqKSAlIG1hdGhwb3coMTAsIGopIHwgMCkgKiBrIDogMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHJvdW5kVXApIHtcclxuICAgICAgICBmb3IgKDs7KSB7XHJcblxyXG4gICAgICAgICAgLy8gSXMgdGhlIGRpZ2l0IHRvIGJlIHJvdW5kZWQgdXAgaW4gdGhlIGZpcnN0IHdvcmQgb2YgeGQ/XHJcbiAgICAgICAgICBpZiAoeGRpID09IDApIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGkgd2lsbCBiZSB0aGUgbGVuZ3RoIG9mIHhkWzBdIGJlZm9yZSBrIGlzIGFkZGVkLlxyXG4gICAgICAgICAgICBmb3IgKGkgPSAxLCBqID0geGRbMF07IGogPj0gMTA7IGogLz0gMTApIGkrKztcclxuICAgICAgICAgICAgaiA9IHhkWzBdICs9IGs7XHJcbiAgICAgICAgICAgIGZvciAoayA9IDE7IGogPj0gMTA7IGogLz0gMTApIGsrKztcclxuXHJcbiAgICAgICAgICAgIC8vIGlmIGkgIT0gayB0aGUgbGVuZ3RoIGhhcyBpbmNyZWFzZWQuXHJcbiAgICAgICAgICAgIGlmIChpICE9IGspIHtcclxuICAgICAgICAgICAgICB4LmUrKztcclxuICAgICAgICAgICAgICBpZiAoeGRbMF0gPT0gQkFTRSkgeGRbMF0gPSAxO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHhkW3hkaV0gKz0gaztcclxuICAgICAgICAgICAgaWYgKHhkW3hkaV0gIT0gQkFTRSkgYnJlYWs7XHJcbiAgICAgICAgICAgIHhkW3hkaS0tXSA9IDA7XHJcbiAgICAgICAgICAgIGsgPSAxO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICBmb3IgKGkgPSB4ZC5sZW5ndGg7IHhkWy0taV0gPT09IDA7KSB4ZC5wb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXh0ZXJuYWwpIHtcclxuXHJcbiAgICAgIC8vIE92ZXJmbG93P1xyXG4gICAgICBpZiAoeC5lID4gQ3Rvci5tYXhFKSB7XHJcblxyXG4gICAgICAgIC8vIEluZmluaXR5LlxyXG4gICAgICAgIHguZCA9IG51bGw7XHJcbiAgICAgICAgeC5lID0gTmFOO1xyXG5cclxuICAgICAgLy8gVW5kZXJmbG93P1xyXG4gICAgICB9IGVsc2UgaWYgKHguZSA8IEN0b3IubWluRSkge1xyXG5cclxuICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgIHguZSA9IDA7XHJcbiAgICAgICAgeC5kID0gWzBdO1xyXG4gICAgICAgIC8vIEN0b3IudW5kZXJmbG93ID0gdHJ1ZTtcclxuICAgICAgfSAvLyBlbHNlIEN0b3IudW5kZXJmbG93ID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHg7XHJcbiAgfVxyXG5cclxuXHJcbiAgZnVuY3Rpb24gZmluaXRlVG9TdHJpbmcoeCwgaXNFeHAsIHNkKSB7XHJcbiAgICBpZiAoIXguaXNGaW5pdGUoKSkgcmV0dXJuIG5vbkZpbml0ZVRvU3RyaW5nKHgpO1xyXG4gICAgdmFyIGssXHJcbiAgICAgIGUgPSB4LmUsXHJcbiAgICAgIHN0ciA9IGRpZ2l0c1RvU3RyaW5nKHguZCksXHJcbiAgICAgIGxlbiA9IHN0ci5sZW5ndGg7XHJcblxyXG4gICAgaWYgKGlzRXhwKSB7XHJcbiAgICAgIGlmIChzZCAmJiAoayA9IHNkIC0gbGVuKSA+IDApIHtcclxuICAgICAgICBzdHIgPSBzdHIuY2hhckF0KDApICsgJy4nICsgc3RyLnNsaWNlKDEpICsgZ2V0WmVyb1N0cmluZyhrKTtcclxuICAgICAgfSBlbHNlIGlmIChsZW4gPiAxKSB7XHJcbiAgICAgICAgc3RyID0gc3RyLmNoYXJBdCgwKSArICcuJyArIHN0ci5zbGljZSgxKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3RyID0gc3RyICsgKHguZSA8IDAgPyAnZScgOiAnZSsnKSArIHguZTtcclxuICAgIH0gZWxzZSBpZiAoZSA8IDApIHtcclxuICAgICAgc3RyID0gJzAuJyArIGdldFplcm9TdHJpbmcoLWUgLSAxKSArIHN0cjtcclxuICAgICAgaWYgKHNkICYmIChrID0gc2QgLSBsZW4pID4gMCkgc3RyICs9IGdldFplcm9TdHJpbmcoayk7XHJcbiAgICB9IGVsc2UgaWYgKGUgPj0gbGVuKSB7XHJcbiAgICAgIHN0ciArPSBnZXRaZXJvU3RyaW5nKGUgKyAxIC0gbGVuKTtcclxuICAgICAgaWYgKHNkICYmIChrID0gc2QgLSBlIC0gMSkgPiAwKSBzdHIgPSBzdHIgKyAnLicgKyBnZXRaZXJvU3RyaW5nKGspO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKChrID0gZSArIDEpIDwgbGVuKSBzdHIgPSBzdHIuc2xpY2UoMCwgaykgKyAnLicgKyBzdHIuc2xpY2Uoayk7XHJcbiAgICAgIGlmIChzZCAmJiAoayA9IHNkIC0gbGVuKSA+IDApIHtcclxuICAgICAgICBpZiAoZSArIDEgPT09IGxlbikgc3RyICs9ICcuJztcclxuICAgICAgICBzdHIgKz0gZ2V0WmVyb1N0cmluZyhrKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gQ2FsY3VsYXRlIHRoZSBiYXNlIDEwIGV4cG9uZW50IGZyb20gdGhlIGJhc2UgMWU3IGV4cG9uZW50LlxyXG4gIGZ1bmN0aW9uIGdldEJhc2UxMEV4cG9uZW50KGRpZ2l0cywgZSkge1xyXG4gICAgdmFyIHcgPSBkaWdpdHNbMF07XHJcblxyXG4gICAgLy8gQWRkIHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBkaWdpdHMgYXJyYXkuXHJcbiAgICBmb3IgKCBlICo9IExPR19CQVNFOyB3ID49IDEwOyB3IC89IDEwKSBlKys7XHJcbiAgICByZXR1cm4gZTtcclxuICB9XHJcblxyXG5cclxuICBmdW5jdGlvbiBnZXRMbjEwKEN0b3IsIHNkLCBwcikge1xyXG4gICAgaWYgKHNkID4gTE4xMF9QUkVDSVNJT04pIHtcclxuXHJcbiAgICAgIC8vIFJlc2V0IGdsb2JhbCBzdGF0ZSBpbiBjYXNlIHRoZSBleGNlcHRpb24gaXMgY2F1Z2h0LlxyXG4gICAgICBleHRlcm5hbCA9IHRydWU7XHJcbiAgICAgIGlmIChwcikgQ3Rvci5wcmVjaXNpb24gPSBwcjtcclxuICAgICAgdGhyb3cgRXJyb3IocHJlY2lzaW9uTGltaXRFeGNlZWRlZCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmluYWxpc2UobmV3IEN0b3IoTE4xMCksIHNkLCAxLCB0cnVlKTtcclxuICB9XHJcblxyXG5cclxuICBmdW5jdGlvbiBnZXRQaShDdG9yLCBzZCwgcm0pIHtcclxuICAgIGlmIChzZCA+IFBJX1BSRUNJU0lPTikgdGhyb3cgRXJyb3IocHJlY2lzaW9uTGltaXRFeGNlZWRlZCk7XHJcbiAgICByZXR1cm4gZmluYWxpc2UobmV3IEN0b3IoUEkpLCBzZCwgcm0sIHRydWUpO1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGdldFByZWNpc2lvbihkaWdpdHMpIHtcclxuICAgIHZhciB3ID0gZGlnaXRzLmxlbmd0aCAtIDEsXHJcbiAgICAgIGxlbiA9IHcgKiBMT0dfQkFTRSArIDE7XHJcblxyXG4gICAgdyA9IGRpZ2l0c1t3XTtcclxuXHJcbiAgICAvLyBJZiBub24temVyby4uLlxyXG4gICAgaWYgKHcpIHtcclxuXHJcbiAgICAgIC8vIFN1YnRyYWN0IHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVyb3Mgb2YgdGhlIGxhc3Qgd29yZC5cclxuICAgICAgZm9yICg7IHcgJSAxMCA9PSAwOyB3IC89IDEwKSBsZW4tLTtcclxuXHJcbiAgICAgIC8vIEFkZCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiB0aGUgZmlyc3Qgd29yZC5cclxuICAgICAgZm9yICh3ID0gZGlnaXRzWzBdOyB3ID49IDEwOyB3IC89IDEwKSBsZW4rKztcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbGVuO1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGdldFplcm9TdHJpbmcoaykge1xyXG4gICAgdmFyIHpzID0gJyc7XHJcbiAgICBmb3IgKDsgay0tOykgenMgKz0gJzAnO1xyXG4gICAgcmV0dXJuIHpzO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIERlY2ltYWwgYHhgIHRvIHRoZSBwb3dlciBgbmAsIHdoZXJlIGBuYCBpcyBhblxyXG4gICAqIGludGVnZXIgb2YgdHlwZSBudW1iZXIuXHJcbiAgICpcclxuICAgKiBJbXBsZW1lbnRzICdleHBvbmVudGlhdGlvbiBieSBzcXVhcmluZycuIENhbGxlZCBieSBgcG93YCBhbmQgYHBhcnNlT3RoZXJgLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gaW50UG93KEN0b3IsIHgsIG4sIHByKSB7XHJcbiAgICB2YXIgaXNUcnVuY2F0ZWQsXHJcbiAgICAgIHIgPSBuZXcgQ3RvcigxKSxcclxuXHJcbiAgICAgIC8vIE1heCBuIG9mIDkwMDcxOTkyNTQ3NDA5OTEgdGFrZXMgNTMgbG9vcCBpdGVyYXRpb25zLlxyXG4gICAgICAvLyBNYXhpbXVtIGRpZ2l0cyBhcnJheSBsZW5ndGg7IGxlYXZlcyBbMjgsIDM0XSBndWFyZCBkaWdpdHMuXHJcbiAgICAgIGsgPSBNYXRoLmNlaWwocHIgLyBMT0dfQkFTRSArIDQpO1xyXG5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgZm9yICg7Oykge1xyXG4gICAgICBpZiAobiAlIDIpIHtcclxuICAgICAgICByID0gci50aW1lcyh4KTtcclxuICAgICAgICBpZiAodHJ1bmNhdGUoci5kLCBrKSkgaXNUcnVuY2F0ZWQgPSB0cnVlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBuID0gbWF0aGZsb29yKG4gLyAyKTtcclxuICAgICAgaWYgKG4gPT09IDApIHtcclxuXHJcbiAgICAgICAgLy8gVG8gZW5zdXJlIGNvcnJlY3Qgcm91bmRpbmcgd2hlbiByLmQgaXMgdHJ1bmNhdGVkLCBpbmNyZW1lbnQgdGhlIGxhc3Qgd29yZCBpZiBpdCBpcyB6ZXJvLlxyXG4gICAgICAgIG4gPSByLmQubGVuZ3RoIC0gMTtcclxuICAgICAgICBpZiAoaXNUcnVuY2F0ZWQgJiYgci5kW25dID09PSAwKSArK3IuZFtuXTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgeCA9IHgudGltZXMoeCk7XHJcbiAgICAgIHRydW5jYXRlKHguZCwgayk7XHJcbiAgICB9XHJcblxyXG4gICAgZXh0ZXJuYWwgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiByO1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGlzT2RkKG4pIHtcclxuICAgIHJldHVybiBuLmRbbi5kLmxlbmd0aCAtIDFdICYgMTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIEhhbmRsZSBgbWF4YCBhbmQgYG1pbmAuIGBsdGd0YCBpcyAnbHQnIG9yICdndCcuXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gbWF4T3JNaW4oQ3RvciwgYXJncywgbHRndCkge1xyXG4gICAgdmFyIHksXHJcbiAgICAgIHggPSBuZXcgQ3RvcihhcmdzWzBdKSxcclxuICAgICAgaSA9IDA7XHJcblxyXG4gICAgZm9yICg7ICsraSA8IGFyZ3MubGVuZ3RoOykge1xyXG4gICAgICB5ID0gbmV3IEN0b3IoYXJnc1tpXSk7XHJcbiAgICAgIGlmICgheS5zKSB7XHJcbiAgICAgICAgeCA9IHk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH0gZWxzZSBpZiAoeFtsdGd0XSh5KSkge1xyXG4gICAgICAgIHggPSB5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHg7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbmF0dXJhbCBleHBvbmVudGlhbCBvZiBgeGAgcm91bmRlZCB0byBgc2RgIHNpZ25pZmljYW50XHJcbiAgICogZGlnaXRzLlxyXG4gICAqXHJcbiAgICogVGF5bG9yL01hY2xhdXJpbiBzZXJpZXMuXHJcbiAgICpcclxuICAgKiBleHAoeCkgPSB4XjAvMCEgKyB4XjEvMSEgKyB4XjIvMiEgKyB4XjMvMyEgKyAuLi5cclxuICAgKlxyXG4gICAqIEFyZ3VtZW50IHJlZHVjdGlvbjpcclxuICAgKiAgIFJlcGVhdCB4ID0geCAvIDMyLCBrICs9IDUsIHVudGlsIHx4fCA8IDAuMVxyXG4gICAqICAgZXhwKHgpID0gZXhwKHggLyAyXmspXigyXmspXHJcbiAgICpcclxuICAgKiBQcmV2aW91c2x5LCB0aGUgYXJndW1lbnQgd2FzIGluaXRpYWxseSByZWR1Y2VkIGJ5XHJcbiAgICogZXhwKHgpID0gZXhwKHIpICogMTBeayAgd2hlcmUgciA9IHggLSBrICogbG4xMCwgayA9IGZsb29yKHggLyBsbjEwKVxyXG4gICAqIHRvIGZpcnN0IHB1dCByIGluIHRoZSByYW5nZSBbMCwgbG4xMF0sIGJlZm9yZSBkaXZpZGluZyBieSAzMiB1bnRpbCB8eHwgPCAwLjEsIGJ1dCB0aGlzIHdhc1xyXG4gICAqIGZvdW5kIHRvIGJlIHNsb3dlciB0aGFuIGp1c3QgZGl2aWRpbmcgcmVwZWF0ZWRseSBieSAzMiBhcyBhYm92ZS5cclxuICAgKlxyXG4gICAqIE1heCBpbnRlZ2VyIGFyZ3VtZW50OiBleHAoJzIwNzIzMjY1ODM2OTQ2NDEzJykgPSA2LjNlKzkwMDAwMDAwMDAwMDAwMDBcclxuICAgKiBNaW4gaW50ZWdlciBhcmd1bWVudDogZXhwKCctMjA3MjMyNjU4MzY5NDY0MTEnKSA9IDEuMmUtOTAwMDAwMDAwMDAwMDAwMFxyXG4gICAqIChNYXRoIG9iamVjdCBpbnRlZ2VyIG1pbi9tYXg6IE1hdGguZXhwKDcwOSkgPSA4LjJlKzMwNywgTWF0aC5leHAoLTc0NSkgPSA1ZS0zMjQpXHJcbiAgICpcclxuICAgKiAgZXhwKEluZmluaXR5KSAgPSBJbmZpbml0eVxyXG4gICAqICBleHAoLUluZmluaXR5KSA9IDBcclxuICAgKiAgZXhwKE5hTikgICAgICAgPSBOYU5cclxuICAgKiAgZXhwKMKxMCkgICAgICAgID0gMVxyXG4gICAqXHJcbiAgICogIGV4cCh4KSBpcyBub24tdGVybWluYXRpbmcgZm9yIGFueSBmaW5pdGUsIG5vbi16ZXJvIHguXHJcbiAgICpcclxuICAgKiAgVGhlIHJlc3VsdCB3aWxsIGFsd2F5cyBiZSBjb3JyZWN0bHkgcm91bmRlZC5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIG5hdHVyYWxFeHBvbmVudGlhbCh4LCBzZCkge1xyXG4gICAgdmFyIGRlbm9taW5hdG9yLCBndWFyZCwgaiwgcG93LCBzdW0sIHQsIHdwcixcclxuICAgICAgcmVwID0gMCxcclxuICAgICAgaSA9IDAsXHJcbiAgICAgIGsgPSAwLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcixcclxuICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nLFxyXG4gICAgICBwciA9IEN0b3IucHJlY2lzaW9uO1xyXG5cclxuICAgIC8vIDAvTmFOL0luZmluaXR5P1xyXG4gICAgaWYgKCF4LmQgfHwgIXguZFswXSB8fCB4LmUgPiAxNykge1xyXG5cclxuICAgICAgcmV0dXJuIG5ldyBDdG9yKHguZFxyXG4gICAgICAgID8gIXguZFswXSA/IDEgOiB4LnMgPCAwID8gMCA6IDEgLyAwXHJcbiAgICAgICAgOiB4LnMgPyB4LnMgPCAwID8gMCA6IHggOiAwIC8gMCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNkID09IG51bGwpIHtcclxuICAgICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuICAgICAgd3ByID0gcHI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB3cHIgPSBzZDtcclxuICAgIH1cclxuXHJcbiAgICB0ID0gbmV3IEN0b3IoMC4wMzEyNSk7XHJcblxyXG4gICAgLy8gd2hpbGUgYWJzKHgpID49IDAuMVxyXG4gICAgd2hpbGUgKHguZSA+IC0yKSB7XHJcblxyXG4gICAgICAvLyB4ID0geCAvIDJeNVxyXG4gICAgICB4ID0geC50aW1lcyh0KTtcclxuICAgICAgayArPSA1O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFVzZSAyICogbG9nMTAoMl5rKSArIDUgKGVtcGlyaWNhbGx5IGRlcml2ZWQpIHRvIGVzdGltYXRlIHRoZSBpbmNyZWFzZSBpbiBwcmVjaXNpb25cclxuICAgIC8vIG5lY2Vzc2FyeSB0byBlbnN1cmUgdGhlIGZpcnN0IDQgcm91bmRpbmcgZGlnaXRzIGFyZSBjb3JyZWN0LlxyXG4gICAgZ3VhcmQgPSBNYXRoLmxvZyhtYXRocG93KDIsIGspKSAvIE1hdGguTE4xMCAqIDIgKyA1IHwgMDtcclxuICAgIHdwciArPSBndWFyZDtcclxuICAgIGRlbm9taW5hdG9yID0gcG93ID0gc3VtID0gbmV3IEN0b3IoMSk7XHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHdwcjtcclxuXHJcbiAgICBmb3IgKDs7KSB7XHJcbiAgICAgIHBvdyA9IGZpbmFsaXNlKHBvdy50aW1lcyh4KSwgd3ByLCAxKTtcclxuICAgICAgZGVub21pbmF0b3IgPSBkZW5vbWluYXRvci50aW1lcygrK2kpO1xyXG4gICAgICB0ID0gc3VtLnBsdXMoZGl2aWRlKHBvdywgZGVub21pbmF0b3IsIHdwciwgMSkpO1xyXG5cclxuICAgICAgaWYgKGRpZ2l0c1RvU3RyaW5nKHQuZCkuc2xpY2UoMCwgd3ByKSA9PT0gZGlnaXRzVG9TdHJpbmcoc3VtLmQpLnNsaWNlKDAsIHdwcikpIHtcclxuICAgICAgICBqID0gaztcclxuICAgICAgICB3aGlsZSAoai0tKSBzdW0gPSBmaW5hbGlzZShzdW0udGltZXMoc3VtKSwgd3ByLCAxKTtcclxuXHJcbiAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoZSBmaXJzdCA0IHJvdW5kaW5nIGRpZ2l0cyBhcmUgWzQ5XTk5OS5cclxuICAgICAgICAvLyBJZiBzbywgcmVwZWF0IHRoZSBzdW1tYXRpb24gd2l0aCBhIGhpZ2hlciBwcmVjaXNpb24sIG90aGVyd2lzZVxyXG4gICAgICAgIC8vIGUuZy4gd2l0aCBwcmVjaXNpb246IDE4LCByb3VuZGluZzogMVxyXG4gICAgICAgIC8vIGV4cCgxOC40MDQyNzI0NjI1OTUwMzQwODM1Njc3OTM5MTk4NDM3NjEpID0gOTgzNzI1NjAuMTIyOTk5OTk5OSAoc2hvdWxkIGJlIDk4MzcyNTYwLjEyMylcclxuICAgICAgICAvLyBgd3ByIC0gZ3VhcmRgIGlzIHRoZSBpbmRleCBvZiBmaXJzdCByb3VuZGluZyBkaWdpdC5cclxuICAgICAgICBpZiAoc2QgPT0gbnVsbCkge1xyXG5cclxuICAgICAgICAgIGlmIChyZXAgPCAzICYmIGNoZWNrUm91bmRpbmdEaWdpdHMoc3VtLmQsIHdwciAtIGd1YXJkLCBybSwgcmVwKSkge1xyXG4gICAgICAgICAgICBDdG9yLnByZWNpc2lvbiA9IHdwciArPSAxMDtcclxuICAgICAgICAgICAgZGVub21pbmF0b3IgPSBwb3cgPSB0ID0gbmV3IEN0b3IoMSk7XHJcbiAgICAgICAgICAgIGkgPSAwO1xyXG4gICAgICAgICAgICByZXArKztcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmaW5hbGlzZShzdW0sIEN0b3IucHJlY2lzaW9uID0gcHIsIHJtLCBleHRlcm5hbCA9IHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgICAgICAgcmV0dXJuIHN1bTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN1bSA9IHQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgYHhgIHJvdW5kZWQgdG8gYHNkYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cy5cclxuICAgKlxyXG4gICAqICBsbigtbikgICAgICAgID0gTmFOXHJcbiAgICogIGxuKDApICAgICAgICAgPSAtSW5maW5pdHlcclxuICAgKiAgbG4oLTApICAgICAgICA9IC1JbmZpbml0eVxyXG4gICAqICBsbigxKSAgICAgICAgID0gMFxyXG4gICAqICBsbihJbmZpbml0eSkgID0gSW5maW5pdHlcclxuICAgKiAgbG4oLUluZmluaXR5KSA9IE5hTlxyXG4gICAqICBsbihOYU4pICAgICAgID0gTmFOXHJcbiAgICpcclxuICAgKiAgbG4obikgKG4gIT0gMSkgaXMgbm9uLXRlcm1pbmF0aW5nLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gbmF0dXJhbExvZ2FyaXRobSh5LCBzZCkge1xyXG4gICAgdmFyIGMsIGMwLCBkZW5vbWluYXRvciwgZSwgbnVtZXJhdG9yLCByZXAsIHN1bSwgdCwgd3ByLCB4MSwgeDIsXHJcbiAgICAgIG4gPSAxLFxyXG4gICAgICBndWFyZCA9IDEwLFxyXG4gICAgICB4ID0geSxcclxuICAgICAgeGQgPSB4LmQsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yLFxyXG4gICAgICBybSA9IEN0b3Iucm91bmRpbmcsXHJcbiAgICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcblxyXG4gICAgLy8gSXMgeCBuZWdhdGl2ZSBvciBJbmZpbml0eSwgTmFOLCAwIG9yIDE/XHJcbiAgICBpZiAoeC5zIDwgMCB8fCAheGQgfHwgIXhkWzBdIHx8ICF4LmUgJiYgeGRbMF0gPT0gMSAmJiB4ZC5sZW5ndGggPT0gMSkge1xyXG4gICAgICByZXR1cm4gbmV3IEN0b3IoeGQgJiYgIXhkWzBdID8gLTEgLyAwIDogeC5zICE9IDEgPyBOYU4gOiB4ZCA/IDAgOiB4KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoc2QgPT0gbnVsbCkge1xyXG4gICAgICBleHRlcm5hbCA9IGZhbHNlO1xyXG4gICAgICB3cHIgPSBwcjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHdwciA9IHNkO1xyXG4gICAgfVxyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gd3ByICs9IGd1YXJkO1xyXG4gICAgYyA9IGRpZ2l0c1RvU3RyaW5nKHhkKTtcclxuICAgIGMwID0gYy5jaGFyQXQoMCk7XHJcblxyXG4gICAgaWYgKE1hdGguYWJzKGUgPSB4LmUpIDwgMS41ZTE1KSB7XHJcblxyXG4gICAgICAvLyBBcmd1bWVudCByZWR1Y3Rpb24uXHJcbiAgICAgIC8vIFRoZSBzZXJpZXMgY29udmVyZ2VzIGZhc3RlciB0aGUgY2xvc2VyIHRoZSBhcmd1bWVudCBpcyB0byAxLCBzbyB1c2luZ1xyXG4gICAgICAvLyBsbihhXmIpID0gYiAqIGxuKGEpLCAgIGxuKGEpID0gbG4oYV5iKSAvIGJcclxuICAgICAgLy8gbXVsdGlwbHkgdGhlIGFyZ3VtZW50IGJ5IGl0c2VsZiB1bnRpbCB0aGUgbGVhZGluZyBkaWdpdHMgb2YgdGhlIHNpZ25pZmljYW5kIGFyZSA3LCA4LCA5LFxyXG4gICAgICAvLyAxMCwgMTEsIDEyIG9yIDEzLCByZWNvcmRpbmcgdGhlIG51bWJlciBvZiBtdWx0aXBsaWNhdGlvbnMgc28gdGhlIHN1bSBvZiB0aGUgc2VyaWVzIGNhblxyXG4gICAgICAvLyBsYXRlciBiZSBkaXZpZGVkIGJ5IHRoaXMgbnVtYmVyLCB0aGVuIHNlcGFyYXRlIG91dCB0aGUgcG93ZXIgb2YgMTAgdXNpbmdcclxuICAgICAgLy8gbG4oYSoxMF5iKSA9IGxuKGEpICsgYipsbigxMCkuXHJcblxyXG4gICAgICAvLyBtYXggbiBpcyAyMSAoZ2l2ZXMgMC45LCAxLjAgb3IgMS4xKSAoOWUxNSAvIDIxID0gNC4yZTE0KS5cclxuICAgICAgLy93aGlsZSAoYzAgPCA5ICYmIGMwICE9IDEgfHwgYzAgPT0gMSAmJiBjLmNoYXJBdCgxKSA+IDEpIHtcclxuICAgICAgLy8gbWF4IG4gaXMgNiAoZ2l2ZXMgMC43IC0gMS4zKVxyXG4gICAgICB3aGlsZSAoYzAgPCA3ICYmIGMwICE9IDEgfHwgYzAgPT0gMSAmJiBjLmNoYXJBdCgxKSA+IDMpIHtcclxuICAgICAgICB4ID0geC50aW1lcyh5KTtcclxuICAgICAgICBjID0gZGlnaXRzVG9TdHJpbmcoeC5kKTtcclxuICAgICAgICBjMCA9IGMuY2hhckF0KDApO1xyXG4gICAgICAgIG4rKztcclxuICAgICAgfVxyXG5cclxuICAgICAgZSA9IHguZTtcclxuXHJcbiAgICAgIGlmIChjMCA+IDEpIHtcclxuICAgICAgICB4ID0gbmV3IEN0b3IoJzAuJyArIGMpO1xyXG4gICAgICAgIGUrKztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB4ID0gbmV3IEN0b3IoYzAgKyAnLicgKyBjLnNsaWNlKDEpKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIC8vIFRoZSBhcmd1bWVudCByZWR1Y3Rpb24gbWV0aG9kIGFib3ZlIG1heSByZXN1bHQgaW4gb3ZlcmZsb3cgaWYgdGhlIGFyZ3VtZW50IHkgaXMgYSBtYXNzaXZlXHJcbiAgICAgIC8vIG51bWJlciB3aXRoIGV4cG9uZW50ID49IDE1MDAwMDAwMDAwMDAwMDAgKDllMTUgLyA2ID0gMS41ZTE1KSwgc28gaW5zdGVhZCByZWNhbGwgdGhpc1xyXG4gICAgICAvLyBmdW5jdGlvbiB1c2luZyBsbih4KjEwXmUpID0gbG4oeCkgKyBlKmxuKDEwKS5cclxuICAgICAgdCA9IGdldExuMTAoQ3Rvciwgd3ByICsgMiwgcHIpLnRpbWVzKGUgKyAnJyk7XHJcbiAgICAgIHggPSBuYXR1cmFsTG9nYXJpdGhtKG5ldyBDdG9yKGMwICsgJy4nICsgYy5zbGljZSgxKSksIHdwciAtIGd1YXJkKS5wbHVzKHQpO1xyXG4gICAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG5cclxuICAgICAgcmV0dXJuIHNkID09IG51bGwgPyBmaW5hbGlzZSh4LCBwciwgcm0sIGV4dGVybmFsID0gdHJ1ZSkgOiB4O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHgxIGlzIHggcmVkdWNlZCB0byBhIHZhbHVlIG5lYXIgMS5cclxuICAgIHgxID0geDtcclxuXHJcbiAgICAvLyBUYXlsb3Igc2VyaWVzLlxyXG4gICAgLy8gbG4oeSkgPSBsbigoMSArIHgpLygxIC0geCkpID0gMih4ICsgeF4zLzMgKyB4XjUvNSArIHheNy83ICsgLi4uKVxyXG4gICAgLy8gd2hlcmUgeCA9ICh5IC0gMSkvKHkgKyAxKSAgICAofHh8IDwgMSlcclxuICAgIHN1bSA9IG51bWVyYXRvciA9IHggPSBkaXZpZGUoeC5taW51cygxKSwgeC5wbHVzKDEpLCB3cHIsIDEpO1xyXG4gICAgeDIgPSBmaW5hbGlzZSh4LnRpbWVzKHgpLCB3cHIsIDEpO1xyXG4gICAgZGVub21pbmF0b3IgPSAzO1xyXG5cclxuICAgIGZvciAoOzspIHtcclxuICAgICAgbnVtZXJhdG9yID0gZmluYWxpc2UobnVtZXJhdG9yLnRpbWVzKHgyKSwgd3ByLCAxKTtcclxuICAgICAgdCA9IHN1bS5wbHVzKGRpdmlkZShudW1lcmF0b3IsIG5ldyBDdG9yKGRlbm9taW5hdG9yKSwgd3ByLCAxKSk7XHJcblxyXG4gICAgICBpZiAoZGlnaXRzVG9TdHJpbmcodC5kKS5zbGljZSgwLCB3cHIpID09PSBkaWdpdHNUb1N0cmluZyhzdW0uZCkuc2xpY2UoMCwgd3ByKSkge1xyXG4gICAgICAgIHN1bSA9IHN1bS50aW1lcygyKTtcclxuXHJcbiAgICAgICAgLy8gUmV2ZXJzZSB0aGUgYXJndW1lbnQgcmVkdWN0aW9uLiBDaGVjayB0aGF0IGUgaXMgbm90IDAgYmVjYXVzZSwgYmVzaWRlcyBwcmV2ZW50aW5nIGFuXHJcbiAgICAgICAgLy8gdW5uZWNlc3NhcnkgY2FsY3VsYXRpb24sIC0wICsgMCA9ICswIGFuZCB0byBlbnN1cmUgY29ycmVjdCByb3VuZGluZyAtMCBuZWVkcyB0byBzdGF5IC0wLlxyXG4gICAgICAgIGlmIChlICE9PSAwKSBzdW0gPSBzdW0ucGx1cyhnZXRMbjEwKEN0b3IsIHdwciArIDIsIHByKS50aW1lcyhlICsgJycpKTtcclxuICAgICAgICBzdW0gPSBkaXZpZGUoc3VtLCBuZXcgQ3RvcihuKSwgd3ByLCAxKTtcclxuXHJcbiAgICAgICAgLy8gSXMgcm0gPiAzIGFuZCB0aGUgZmlyc3QgNCByb3VuZGluZyBkaWdpdHMgNDk5OSwgb3Igcm0gPCA0IChvciB0aGUgc3VtbWF0aW9uIGhhc1xyXG4gICAgICAgIC8vIGJlZW4gcmVwZWF0ZWQgcHJldmlvdXNseSkgYW5kIHRoZSBmaXJzdCA0IHJvdW5kaW5nIGRpZ2l0cyA5OTk5P1xyXG4gICAgICAgIC8vIElmIHNvLCByZXN0YXJ0IHRoZSBzdW1tYXRpb24gd2l0aCBhIGhpZ2hlciBwcmVjaXNpb24sIG90aGVyd2lzZVxyXG4gICAgICAgIC8vIGUuZy4gd2l0aCBwcmVjaXNpb246IDEyLCByb3VuZGluZzogMVxyXG4gICAgICAgIC8vIGxuKDEzNTUyMDAyOC42MTI2MDkxNzE0MjY1MzgxNTMzKSA9IDE4LjcyNDYyOTk5OTkgd2hlbiBpdCBzaG91bGQgYmUgMTguNzI0NjMuXHJcbiAgICAgICAgLy8gYHdwciAtIGd1YXJkYCBpcyB0aGUgaW5kZXggb2YgZmlyc3Qgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgICAgaWYgKHNkID09IG51bGwpIHtcclxuICAgICAgICAgIGlmIChjaGVja1JvdW5kaW5nRGlnaXRzKHN1bS5kLCB3cHIgLSBndWFyZCwgcm0sIHJlcCkpIHtcclxuICAgICAgICAgICAgQ3Rvci5wcmVjaXNpb24gPSB3cHIgKz0gZ3VhcmQ7XHJcbiAgICAgICAgICAgIHQgPSBudW1lcmF0b3IgPSB4ID0gZGl2aWRlKHgxLm1pbnVzKDEpLCB4MS5wbHVzKDEpLCB3cHIsIDEpO1xyXG4gICAgICAgICAgICB4MiA9IGZpbmFsaXNlKHgudGltZXMoeCksIHdwciwgMSk7XHJcbiAgICAgICAgICAgIGRlbm9taW5hdG9yID0gcmVwID0gMTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmaW5hbGlzZShzdW0sIEN0b3IucHJlY2lzaW9uID0gcHIsIHJtLCBleHRlcm5hbCA9IHRydWUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgICAgICAgcmV0dXJuIHN1bTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN1bSA9IHQ7XHJcbiAgICAgIGRlbm9taW5hdG9yICs9IDI7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gwrFJbmZpbml0eSwgTmFOLlxyXG4gIGZ1bmN0aW9uIG5vbkZpbml0ZVRvU3RyaW5nKHgpIHtcclxuICAgIC8vIFVuc2lnbmVkLlxyXG4gICAgcmV0dXJuIFN0cmluZyh4LnMgKiB4LnMgLyAwKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFBhcnNlIHRoZSB2YWx1ZSBvZiBhIG5ldyBEZWNpbWFsIGB4YCBmcm9tIHN0cmluZyBgc3RyYC5cclxuICAgKi9cclxuICBmdW5jdGlvbiBwYXJzZURlY2ltYWwoeCwgc3RyKSB7XHJcbiAgICB2YXIgZSwgaSwgbGVuO1xyXG5cclxuICAgIC8vIERlY2ltYWwgcG9pbnQ/XHJcbiAgICBpZiAoKGUgPSBzdHIuaW5kZXhPZignLicpKSA+IC0xKSBzdHIgPSBzdHIucmVwbGFjZSgnLicsICcnKTtcclxuXHJcbiAgICAvLyBFeHBvbmVudGlhbCBmb3JtP1xyXG4gICAgaWYgKChpID0gc3RyLnNlYXJjaCgvZS9pKSkgPiAwKSB7XHJcblxyXG4gICAgICAvLyBEZXRlcm1pbmUgZXhwb25lbnQuXHJcbiAgICAgIGlmIChlIDwgMCkgZSA9IGk7XHJcbiAgICAgIGUgKz0gK3N0ci5zbGljZShpICsgMSk7XHJcbiAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMCwgaSk7XHJcbiAgICB9IGVsc2UgaWYgKGUgPCAwKSB7XHJcblxyXG4gICAgICAvLyBJbnRlZ2VyLlxyXG4gICAgICBlID0gc3RyLmxlbmd0aDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBEZXRlcm1pbmUgbGVhZGluZyB6ZXJvcy5cclxuICAgIGZvciAoaSA9IDA7IHN0ci5jaGFyQ29kZUF0KGkpID09PSA0ODsgaSsrKTtcclxuXHJcbiAgICAvLyBEZXRlcm1pbmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICBmb3IgKGxlbiA9IHN0ci5sZW5ndGg7IHN0ci5jaGFyQ29kZUF0KGxlbiAtIDEpID09PSA0ODsgLS1sZW4pO1xyXG4gICAgc3RyID0gc3RyLnNsaWNlKGksIGxlbik7XHJcblxyXG4gICAgaWYgKHN0cikge1xyXG4gICAgICBsZW4gLT0gaTtcclxuICAgICAgeC5lID0gZSA9IGUgLSBpIC0gMTtcclxuICAgICAgeC5kID0gW107XHJcblxyXG4gICAgICAvLyBUcmFuc2Zvcm0gYmFzZVxyXG5cclxuICAgICAgLy8gZSBpcyB0aGUgYmFzZSAxMCBleHBvbmVudC5cclxuICAgICAgLy8gaSBpcyB3aGVyZSB0byBzbGljZSBzdHIgdG8gZ2V0IHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBkaWdpdHMgYXJyYXkuXHJcbiAgICAgIGkgPSAoZSArIDEpICUgTE9HX0JBU0U7XHJcbiAgICAgIGlmIChlIDwgMCkgaSArPSBMT0dfQkFTRTtcclxuXHJcbiAgICAgIGlmIChpIDwgbGVuKSB7XHJcbiAgICAgICAgaWYgKGkpIHguZC5wdXNoKCtzdHIuc2xpY2UoMCwgaSkpO1xyXG4gICAgICAgIGZvciAobGVuIC09IExPR19CQVNFOyBpIDwgbGVuOykgeC5kLnB1c2goK3N0ci5zbGljZShpLCBpICs9IExPR19CQVNFKSk7XHJcbiAgICAgICAgc3RyID0gc3RyLnNsaWNlKGkpO1xyXG4gICAgICAgIGkgPSBMT0dfQkFTRSAtIHN0ci5sZW5ndGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaSAtPSBsZW47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGZvciAoOyBpLS07KSBzdHIgKz0gJzAnO1xyXG4gICAgICB4LmQucHVzaCgrc3RyKTtcclxuXHJcbiAgICAgIGlmIChleHRlcm5hbCkge1xyXG5cclxuICAgICAgICAvLyBPdmVyZmxvdz9cclxuICAgICAgICBpZiAoeC5lID4geC5jb25zdHJ1Y3Rvci5tYXhFKSB7XHJcblxyXG4gICAgICAgICAgLy8gSW5maW5pdHkuXHJcbiAgICAgICAgICB4LmQgPSBudWxsO1xyXG4gICAgICAgICAgeC5lID0gTmFOO1xyXG5cclxuICAgICAgICAvLyBVbmRlcmZsb3c/XHJcbiAgICAgICAgfSBlbHNlIGlmICh4LmUgPCB4LmNvbnN0cnVjdG9yLm1pbkUpIHtcclxuXHJcbiAgICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgICAgeC5lID0gMDtcclxuICAgICAgICAgIHguZCA9IFswXTtcclxuICAgICAgICAgIC8vIHguY29uc3RydWN0b3IudW5kZXJmbG93ID0gdHJ1ZTtcclxuICAgICAgICB9IC8vIGVsc2UgeC5jb25zdHJ1Y3Rvci51bmRlcmZsb3cgPSBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIC8vIFplcm8uXHJcbiAgICAgIHguZSA9IDA7XHJcbiAgICAgIHguZCA9IFswXTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geDtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFBhcnNlIHRoZSB2YWx1ZSBvZiBhIG5ldyBEZWNpbWFsIGB4YCBmcm9tIGEgc3RyaW5nIGBzdHJgLCB3aGljaCBpcyBub3QgYSBkZWNpbWFsIHZhbHVlLlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHBhcnNlT3RoZXIoeCwgc3RyKSB7XHJcbiAgICB2YXIgYmFzZSwgQ3RvciwgZGl2aXNvciwgaSwgaXNGbG9hdCwgbGVuLCBwLCB4ZCwgeGU7XHJcblxyXG4gICAgaWYgKHN0ciA9PT0gJ0luZmluaXR5JyB8fCBzdHIgPT09ICdOYU4nKSB7XHJcbiAgICAgIGlmICghK3N0cikgeC5zID0gTmFOO1xyXG4gICAgICB4LmUgPSBOYU47XHJcbiAgICAgIHguZCA9IG51bGw7XHJcbiAgICAgIHJldHVybiB4O1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChpc0hleC50ZXN0KHN0cikpICB7XHJcbiAgICAgIGJhc2UgPSAxNjtcclxuICAgICAgc3RyID0gc3RyLnRvTG93ZXJDYXNlKCk7XHJcbiAgICB9IGVsc2UgaWYgKGlzQmluYXJ5LnRlc3Qoc3RyKSkgIHtcclxuICAgICAgYmFzZSA9IDI7XHJcbiAgICB9IGVsc2UgaWYgKGlzT2N0YWwudGVzdChzdHIpKSAge1xyXG4gICAgICBiYXNlID0gODtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IEVycm9yKGludmFsaWRBcmd1bWVudCArIHN0cik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSXMgdGhlcmUgYSBiaW5hcnkgZXhwb25lbnQgcGFydD9cclxuICAgIGkgPSBzdHIuc2VhcmNoKC9wL2kpO1xyXG5cclxuICAgIGlmIChpID4gMCkge1xyXG4gICAgICBwID0gK3N0ci5zbGljZShpICsgMSk7XHJcbiAgICAgIHN0ciA9IHN0ci5zdWJzdHJpbmcoMiwgaSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdHIgPSBzdHIuc2xpY2UoMik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ29udmVydCBgc3RyYCBhcyBhbiBpbnRlZ2VyIHRoZW4gZGl2aWRlIHRoZSByZXN1bHQgYnkgYGJhc2VgIHJhaXNlZCB0byBhIHBvd2VyIHN1Y2ggdGhhdCB0aGVcclxuICAgIC8vIGZyYWN0aW9uIHBhcnQgd2lsbCBiZSByZXN0b3JlZC5cclxuICAgIGkgPSBzdHIuaW5kZXhPZignLicpO1xyXG4gICAgaXNGbG9hdCA9IGkgPj0gMDtcclxuICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmIChpc0Zsb2F0KSB7XHJcbiAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKCcuJywgJycpO1xyXG4gICAgICBsZW4gPSBzdHIubGVuZ3RoO1xyXG4gICAgICBpID0gbGVuIC0gaTtcclxuXHJcbiAgICAgIC8vIGxvZ1sxMF0oMTYpID0gMS4yMDQxLi4uICwgbG9nWzEwXSg4OCkgPSAxLjk0NDQuLi4uXHJcbiAgICAgIGRpdmlzb3IgPSBpbnRQb3coQ3RvciwgbmV3IEN0b3IoYmFzZSksIGksIGkgKiAyKTtcclxuICAgIH1cclxuXHJcbiAgICB4ZCA9IGNvbnZlcnRCYXNlKHN0ciwgYmFzZSwgQkFTRSk7XHJcbiAgICB4ZSA9IHhkLmxlbmd0aCAtIDE7XHJcblxyXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgZm9yIChpID0geGU7IHhkW2ldID09PSAwOyAtLWkpIHhkLnBvcCgpO1xyXG4gICAgaWYgKGkgPCAwKSByZXR1cm4gbmV3IEN0b3IoeC5zICogMCk7XHJcbiAgICB4LmUgPSBnZXRCYXNlMTBFeHBvbmVudCh4ZCwgeGUpO1xyXG4gICAgeC5kID0geGQ7XHJcbiAgICBleHRlcm5hbCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIEF0IHdoYXQgcHJlY2lzaW9uIHRvIHBlcmZvcm0gdGhlIGRpdmlzaW9uIHRvIGVuc3VyZSBleGFjdCBjb252ZXJzaW9uP1xyXG4gICAgLy8gbWF4RGVjaW1hbEludGVnZXJQYXJ0RGlnaXRDb3VudCA9IGNlaWwobG9nWzEwXShiKSAqIG90aGVyQmFzZUludGVnZXJQYXJ0RGlnaXRDb3VudClcclxuICAgIC8vIGxvZ1sxMF0oMikgPSAwLjMwMTAzLCBsb2dbMTBdKDgpID0gMC45MDMwOSwgbG9nWzEwXSgxNikgPSAxLjIwNDEyXHJcbiAgICAvLyBFLmcuIGNlaWwoMS4yICogMykgPSA0LCBzbyB1cCB0byA0IGRlY2ltYWwgZGlnaXRzIGFyZSBuZWVkZWQgdG8gcmVwcmVzZW50IDMgaGV4IGludCBkaWdpdHMuXHJcbiAgICAvLyBtYXhEZWNpbWFsRnJhY3Rpb25QYXJ0RGlnaXRDb3VudCA9IHtIZXg6NHxPY3Q6M3xCaW46MX0gKiBvdGhlckJhc2VGcmFjdGlvblBhcnREaWdpdENvdW50XHJcbiAgICAvLyBUaGVyZWZvcmUgdXNpbmcgNCAqIHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIHN0ciB3aWxsIGFsd2F5cyBiZSBlbm91Z2guXHJcbiAgICBpZiAoaXNGbG9hdCkgeCA9IGRpdmlkZSh4LCBkaXZpc29yLCBsZW4gKiA0KTtcclxuXHJcbiAgICAvLyBNdWx0aXBseSBieSB0aGUgYmluYXJ5IGV4cG9uZW50IHBhcnQgaWYgcHJlc2VudC5cclxuICAgIGlmIChwKSB4ID0geC50aW1lcyhNYXRoLmFicyhwKSA8IDU0ID8gbWF0aHBvdygyLCBwKSA6IERlY2ltYWwucG93KDIsIHApKTtcclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4geDtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIHNpbih4KSA9IHggLSB4XjMvMyEgKyB4XjUvNSEgLSAuLi5cclxuICAgKiB8eHwgPCBwaS8yXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBzaW5lKEN0b3IsIHgpIHtcclxuICAgIHZhciBrLFxyXG4gICAgICBsZW4gPSB4LmQubGVuZ3RoO1xyXG5cclxuICAgIGlmIChsZW4gPCAzKSByZXR1cm4gdGF5bG9yU2VyaWVzKEN0b3IsIDIsIHgsIHgpO1xyXG5cclxuICAgIC8vIEFyZ3VtZW50IHJlZHVjdGlvbjogc2luKDV4KSA9IDE2KnNpbl41KHgpIC0gMjAqc2luXjMoeCkgKyA1KnNpbih4KVxyXG4gICAgLy8gaS5lLiBzaW4oeCkgPSAxNipzaW5eNSh4LzUpIC0gMjAqc2luXjMoeC81KSArIDUqc2luKHgvNSlcclxuICAgIC8vIGFuZCAgc2luKHgpID0gc2luKHgvNSkoNSArIHNpbl4yKHgvNSkoMTZzaW5eMih4LzUpIC0gMjApKVxyXG5cclxuICAgIC8vIEVzdGltYXRlIHRoZSBvcHRpbXVtIG51bWJlciBvZiB0aW1lcyB0byB1c2UgdGhlIGFyZ3VtZW50IHJlZHVjdGlvbi5cclxuICAgIGsgPSAxLjQgKiBNYXRoLnNxcnQobGVuKTtcclxuICAgIGsgPSBrID4gMTYgPyAxNiA6IGsgfCAwO1xyXG5cclxuICAgIHggPSB4LnRpbWVzKDEgLyB0aW55UG93KDUsIGspKTtcclxuICAgIHggPSB0YXlsb3JTZXJpZXMoQ3RvciwgMiwgeCwgeCk7XHJcblxyXG4gICAgLy8gUmV2ZXJzZSBhcmd1bWVudCByZWR1Y3Rpb25cclxuICAgIHZhciBzaW4yX3gsXHJcbiAgICAgIGQ1ID0gbmV3IEN0b3IoNSksXHJcbiAgICAgIGQxNiA9IG5ldyBDdG9yKDE2KSxcclxuICAgICAgZDIwID0gbmV3IEN0b3IoMjApO1xyXG4gICAgZm9yICg7IGstLTspIHtcclxuICAgICAgc2luMl94ID0geC50aW1lcyh4KTtcclxuICAgICAgeCA9IHgudGltZXMoZDUucGx1cyhzaW4yX3gudGltZXMoZDE2LnRpbWVzKHNpbjJfeCkubWludXMoZDIwKSkpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geDtcclxuICB9XHJcblxyXG5cclxuICAvLyBDYWxjdWxhdGUgVGF5bG9yIHNlcmllcyBmb3IgYGNvc2AsIGBjb3NoYCwgYHNpbmAgYW5kIGBzaW5oYC5cclxuICBmdW5jdGlvbiB0YXlsb3JTZXJpZXMoQ3RvciwgbiwgeCwgeSwgaXNIeXBlcmJvbGljKSB7XHJcbiAgICB2YXIgaiwgdCwgdSwgeDIsXHJcbiAgICAgIGkgPSAxLFxyXG4gICAgICBwciA9IEN0b3IucHJlY2lzaW9uLFxyXG4gICAgICBrID0gTWF0aC5jZWlsKHByIC8gTE9HX0JBU0UpO1xyXG5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcbiAgICB4MiA9IHgudGltZXMoeCk7XHJcbiAgICB1ID0gbmV3IEN0b3IoeSk7XHJcblxyXG4gICAgZm9yICg7Oykge1xyXG4gICAgICB0ID0gZGl2aWRlKHUudGltZXMoeDIpLCBuZXcgQ3RvcihuKysgKiBuKyspLCBwciwgMSk7XHJcbiAgICAgIHUgPSBpc0h5cGVyYm9saWMgPyB5LnBsdXModCkgOiB5Lm1pbnVzKHQpO1xyXG4gICAgICB5ID0gZGl2aWRlKHQudGltZXMoeDIpLCBuZXcgQ3RvcihuKysgKiBuKyspLCBwciwgMSk7XHJcbiAgICAgIHQgPSB1LnBsdXMoeSk7XHJcblxyXG4gICAgICBpZiAodC5kW2tdICE9PSB2b2lkIDApIHtcclxuICAgICAgICBmb3IgKGogPSBrOyB0LmRbal0gPT09IHUuZFtqXSAmJiBqLS07KTtcclxuICAgICAgICBpZiAoaiA9PSAtMSkgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGogPSB1O1xyXG4gICAgICB1ID0geTtcclxuICAgICAgeSA9IHQ7XHJcbiAgICAgIHQgPSBqO1xyXG4gICAgICBpKys7XHJcbiAgICB9XHJcblxyXG4gICAgZXh0ZXJuYWwgPSB0cnVlO1xyXG4gICAgdC5kLmxlbmd0aCA9IGsgKyAxO1xyXG5cclxuICAgIHJldHVybiB0O1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIEV4cG9uZW50IGUgbXVzdCBiZSBwb3NpdGl2ZSBhbmQgbm9uLXplcm8uXHJcbiAgZnVuY3Rpb24gdGlueVBvdyhiLCBlKSB7XHJcbiAgICB2YXIgbiA9IGI7XHJcbiAgICB3aGlsZSAoLS1lKSBuICo9IGI7XHJcbiAgICByZXR1cm4gbjtcclxuICB9XHJcblxyXG5cclxuICAvLyBSZXR1cm4gdGhlIGFic29sdXRlIHZhbHVlIG9mIGB4YCByZWR1Y2VkIHRvIGxlc3MgdGhhbiBvciBlcXVhbCB0byBoYWxmIHBpLlxyXG4gIGZ1bmN0aW9uIHRvTGVzc1RoYW5IYWxmUGkoQ3RvciwgeCkge1xyXG4gICAgdmFyIHQsXHJcbiAgICAgIGlzTmVnID0geC5zIDwgMCxcclxuICAgICAgcGkgPSBnZXRQaShDdG9yLCBDdG9yLnByZWNpc2lvbiwgMSksXHJcbiAgICAgIGhhbGZQaSA9IHBpLnRpbWVzKDAuNSk7XHJcblxyXG4gICAgeCA9IHguYWJzKCk7XHJcblxyXG4gICAgaWYgKHgubHRlKGhhbGZQaSkpIHtcclxuICAgICAgcXVhZHJhbnQgPSBpc05lZyA/IDQgOiAxO1xyXG4gICAgICByZXR1cm4geDtcclxuICAgIH1cclxuXHJcbiAgICB0ID0geC5kaXZUb0ludChwaSk7XHJcblxyXG4gICAgaWYgKHQuaXNaZXJvKCkpIHtcclxuICAgICAgcXVhZHJhbnQgPSBpc05lZyA/IDMgOiAyO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgeCA9IHgubWludXModC50aW1lcyhwaSkpO1xyXG5cclxuICAgICAgLy8gMCA8PSB4IDwgcGlcclxuICAgICAgaWYgKHgubHRlKGhhbGZQaSkpIHtcclxuICAgICAgICBxdWFkcmFudCA9IGlzT2RkKHQpID8gKGlzTmVnID8gMiA6IDMpIDogKGlzTmVnID8gNCA6IDEpO1xyXG4gICAgICAgIHJldHVybiB4O1xyXG4gICAgICB9XHJcblxyXG4gICAgICBxdWFkcmFudCA9IGlzT2RkKHQpID8gKGlzTmVnID8gMSA6IDQpIDogKGlzTmVnID8gMyA6IDIpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB4Lm1pbnVzKHBpKS5hYnMoKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0aGUgdmFsdWUgb2YgRGVjaW1hbCBgeGAgYXMgYSBzdHJpbmcgaW4gYmFzZSBgYmFzZU91dGAuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgb3B0aW9uYWwgYHNkYCBhcmd1bWVudCBpcyBwcmVzZW50IGluY2x1ZGUgYSBiaW5hcnkgZXhwb25lbnQgc3VmZml4LlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHRvU3RyaW5nQmluYXJ5KHgsIGJhc2VPdXQsIHNkLCBybSkge1xyXG4gICAgdmFyIGJhc2UsIGUsIGksIGssIGxlbiwgcm91bmRVcCwgc3RyLCB4ZCwgeSxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3IsXHJcbiAgICAgIGlzRXhwID0gc2QgIT09IHZvaWQgMDtcclxuXHJcbiAgICBpZiAoaXNFeHApIHtcclxuICAgICAgY2hlY2tJbnQzMihzZCwgMSwgTUFYX0RJR0lUUyk7XHJcbiAgICAgIGlmIChybSA9PT0gdm9pZCAwKSBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICAgIGVsc2UgY2hlY2tJbnQzMihybSwgMCwgOCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzZCA9IEN0b3IucHJlY2lzaW9uO1xyXG4gICAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHtcclxuICAgICAgc3RyID0gbm9uRmluaXRlVG9TdHJpbmcoeCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBzdHIgPSBmaW5pdGVUb1N0cmluZyh4KTtcclxuICAgICAgaSA9IHN0ci5pbmRleE9mKCcuJyk7XHJcblxyXG4gICAgICAvLyBVc2UgZXhwb25lbnRpYWwgbm90YXRpb24gYWNjb3JkaW5nIHRvIGB0b0V4cFBvc2AgYW5kIGB0b0V4cE5lZ2A/IE5vLCBidXQgaWYgcmVxdWlyZWQ6XHJcbiAgICAgIC8vIG1heEJpbmFyeUV4cG9uZW50ID0gZmxvb3IoKGRlY2ltYWxFeHBvbmVudCArIDEpICogbG9nWzJdKDEwKSlcclxuICAgICAgLy8gbWluQmluYXJ5RXhwb25lbnQgPSBmbG9vcihkZWNpbWFsRXhwb25lbnQgKiBsb2dbMl0oMTApKVxyXG4gICAgICAvLyBsb2dbMl0oMTApID0gMy4zMjE5MjgwOTQ4ODczNjIzNDc4NzAzMTk0Mjk0ODkzOTAxNzU4NjRcclxuXHJcbiAgICAgIGlmIChpc0V4cCkge1xyXG4gICAgICAgIGJhc2UgPSAyO1xyXG4gICAgICAgIGlmIChiYXNlT3V0ID09IDE2KSB7XHJcbiAgICAgICAgICBzZCA9IHNkICogNCAtIDM7XHJcbiAgICAgICAgfSBlbHNlIGlmIChiYXNlT3V0ID09IDgpIHtcclxuICAgICAgICAgIHNkID0gc2QgKiAzIC0gMjtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgYmFzZSA9IGJhc2VPdXQ7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIENvbnZlcnQgdGhlIG51bWJlciBhcyBhbiBpbnRlZ2VyIHRoZW4gZGl2aWRlIHRoZSByZXN1bHQgYnkgaXRzIGJhc2UgcmFpc2VkIHRvIGEgcG93ZXIgc3VjaFxyXG4gICAgICAvLyB0aGF0IHRoZSBmcmFjdGlvbiBwYXJ0IHdpbGwgYmUgcmVzdG9yZWQuXHJcblxyXG4gICAgICAvLyBOb24taW50ZWdlci5cclxuICAgICAgaWYgKGkgPj0gMCkge1xyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKCcuJywgJycpO1xyXG4gICAgICAgIHkgPSBuZXcgQ3RvcigxKTtcclxuICAgICAgICB5LmUgPSBzdHIubGVuZ3RoIC0gaTtcclxuICAgICAgICB5LmQgPSBjb252ZXJ0QmFzZShmaW5pdGVUb1N0cmluZyh5KSwgMTAsIGJhc2UpO1xyXG4gICAgICAgIHkuZSA9IHkuZC5sZW5ndGg7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHhkID0gY29udmVydEJhc2Uoc3RyLCAxMCwgYmFzZSk7XHJcbiAgICAgIGUgPSBsZW4gPSB4ZC5sZW5ndGg7XHJcblxyXG4gICAgICAvLyBSZW1vdmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgIGZvciAoOyB4ZFstLWxlbl0gPT0gMDspIHhkLnBvcCgpO1xyXG5cclxuICAgICAgaWYgKCF4ZFswXSkge1xyXG4gICAgICAgIHN0ciA9IGlzRXhwID8gJzBwKzAnIDogJzAnO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChpIDwgMCkge1xyXG4gICAgICAgICAgZS0tO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB4ID0gbmV3IEN0b3IoeCk7XHJcbiAgICAgICAgICB4LmQgPSB4ZDtcclxuICAgICAgICAgIHguZSA9IGU7XHJcbiAgICAgICAgICB4ID0gZGl2aWRlKHgsIHksIHNkLCBybSwgMCwgYmFzZSk7XHJcbiAgICAgICAgICB4ZCA9IHguZDtcclxuICAgICAgICAgIGUgPSB4LmU7XHJcbiAgICAgICAgICByb3VuZFVwID0gaW5leGFjdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFRoZSByb3VuZGluZyBkaWdpdCwgaS5lLiB0aGUgZGlnaXQgYWZ0ZXIgdGhlIGRpZ2l0IHRoYXQgbWF5IGJlIHJvdW5kZWQgdXAuXHJcbiAgICAgICAgaSA9IHhkW3NkXTtcclxuICAgICAgICBrID0gYmFzZSAvIDI7XHJcbiAgICAgICAgcm91bmRVcCA9IHJvdW5kVXAgfHwgeGRbc2QgKyAxXSAhPT0gdm9pZCAwO1xyXG5cclxuICAgICAgICByb3VuZFVwID0gcm0gPCA0XHJcbiAgICAgICAgICA/IChpICE9PSB2b2lkIDAgfHwgcm91bmRVcCkgJiYgKHJtID09PSAwIHx8IHJtID09PSAoeC5zIDwgMCA/IDMgOiAyKSlcclxuICAgICAgICAgIDogaSA+IGsgfHwgaSA9PT0gayAmJiAocm0gPT09IDQgfHwgcm91bmRVcCB8fCBybSA9PT0gNiAmJiB4ZFtzZCAtIDFdICYgMSB8fFxyXG4gICAgICAgICAgICBybSA9PT0gKHgucyA8IDAgPyA4IDogNykpO1xyXG5cclxuICAgICAgICB4ZC5sZW5ndGggPSBzZDtcclxuXHJcbiAgICAgICAgaWYgKHJvdW5kVXApIHtcclxuXHJcbiAgICAgICAgICAvLyBSb3VuZGluZyB1cCBtYXkgbWVhbiB0aGUgcHJldmlvdXMgZGlnaXQgaGFzIHRvIGJlIHJvdW5kZWQgdXAgYW5kIHNvIG9uLlxyXG4gICAgICAgICAgZm9yICg7ICsreGRbLS1zZF0gPiBiYXNlIC0gMTspIHtcclxuICAgICAgICAgICAgeGRbc2RdID0gMDtcclxuICAgICAgICAgICAgaWYgKCFzZCkge1xyXG4gICAgICAgICAgICAgICsrZTtcclxuICAgICAgICAgICAgICB4ZC51bnNoaWZ0KDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBEZXRlcm1pbmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgICAgZm9yIChsZW4gPSB4ZC5sZW5ndGg7ICF4ZFtsZW4gLSAxXTsgLS1sZW4pO1xyXG5cclxuICAgICAgICAvLyBFLmcuIFs0LCAxMSwgMTVdIGJlY29tZXMgNGJmLlxyXG4gICAgICAgIGZvciAoaSA9IDAsIHN0ciA9ICcnOyBpIDwgbGVuOyBpKyspIHN0ciArPSBOVU1FUkFMUy5jaGFyQXQoeGRbaV0pO1xyXG5cclxuICAgICAgICAvLyBBZGQgYmluYXJ5IGV4cG9uZW50IHN1ZmZpeD9cclxuICAgICAgICBpZiAoaXNFeHApIHtcclxuICAgICAgICAgIGlmIChsZW4gPiAxKSB7XHJcbiAgICAgICAgICAgIGlmIChiYXNlT3V0ID09IDE2IHx8IGJhc2VPdXQgPT0gOCkge1xyXG4gICAgICAgICAgICAgIGkgPSBiYXNlT3V0ID09IDE2ID8gNCA6IDM7XHJcbiAgICAgICAgICAgICAgZm9yICgtLWxlbjsgbGVuICUgaTsgbGVuKyspIHN0ciArPSAnMCc7XHJcbiAgICAgICAgICAgICAgeGQgPSBjb252ZXJ0QmFzZShzdHIsIGJhc2UsIGJhc2VPdXQpO1xyXG4gICAgICAgICAgICAgIGZvciAobGVuID0geGQubGVuZ3RoOyAheGRbbGVuIC0gMV07IC0tbGVuKTtcclxuXHJcbiAgICAgICAgICAgICAgLy8geGRbMF0gd2lsbCBhbHdheXMgYmUgYmUgMVxyXG4gICAgICAgICAgICAgIGZvciAoaSA9IDEsIHN0ciA9ICcxLic7IGkgPCBsZW47IGkrKykgc3RyICs9IE5VTUVSQUxTLmNoYXJBdCh4ZFtpXSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgc3RyID0gc3RyLmNoYXJBdCgwKSArICcuJyArIHN0ci5zbGljZSgxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHN0ciA9ICBzdHIgKyAoZSA8IDAgPyAncCcgOiAncCsnKSArIGU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChlIDwgMCkge1xyXG4gICAgICAgICAgZm9yICg7ICsrZTspIHN0ciA9ICcwJyArIHN0cjtcclxuICAgICAgICAgIHN0ciA9ICcwLicgKyBzdHI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmICgrK2UgPiBsZW4pIGZvciAoZSAtPSBsZW47IGUtLSA7KSBzdHIgKz0gJzAnO1xyXG4gICAgICAgICAgZWxzZSBpZiAoZSA8IGxlbikgc3RyID0gc3RyLnNsaWNlKDAsIGUpICsgJy4nICsgc3RyLnNsaWNlKGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgc3RyID0gKGJhc2VPdXQgPT0gMTYgPyAnMHgnIDogYmFzZU91dCA9PSAyID8gJzBiJyA6IGJhc2VPdXQgPT0gOCA/ICcwbycgOiAnJykgKyBzdHI7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHgucyA8IDAgPyAnLScgKyBzdHIgOiBzdHI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gRG9lcyBub3Qgc3RyaXAgdHJhaWxpbmcgemVyb3MuXHJcbiAgZnVuY3Rpb24gdHJ1bmNhdGUoYXJyLCBsZW4pIHtcclxuICAgIGlmIChhcnIubGVuZ3RoID4gbGVuKSB7XHJcbiAgICAgIGFyci5sZW5ndGggPSBsZW47XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8vIERlY2ltYWwgbWV0aG9kc1xyXG5cclxuXHJcbiAgLypcclxuICAgKiAgYWJzXHJcbiAgICogIGFjb3NcclxuICAgKiAgYWNvc2hcclxuICAgKiAgYWRkXHJcbiAgICogIGFzaW5cclxuICAgKiAgYXNpbmhcclxuICAgKiAgYXRhblxyXG4gICAqICBhdGFuaFxyXG4gICAqICBhdGFuMlxyXG4gICAqICBjYnJ0XHJcbiAgICogIGNlaWxcclxuICAgKiAgY2xvbmVcclxuICAgKiAgY29uZmlnXHJcbiAgICogIGNvc1xyXG4gICAqICBjb3NoXHJcbiAgICogIGRpdlxyXG4gICAqICBleHBcclxuICAgKiAgZmxvb3JcclxuICAgKiAgaHlwb3RcclxuICAgKiAgbG5cclxuICAgKiAgbG9nXHJcbiAgICogIGxvZzJcclxuICAgKiAgbG9nMTBcclxuICAgKiAgbWF4XHJcbiAgICogIG1pblxyXG4gICAqICBtb2RcclxuICAgKiAgbXVsXHJcbiAgICogIHBvd1xyXG4gICAqICByYW5kb21cclxuICAgKiAgcm91bmRcclxuICAgKiAgc2V0XHJcbiAgICogIHNpZ25cclxuICAgKiAgc2luXHJcbiAgICogIHNpbmhcclxuICAgKiAgc3FydFxyXG4gICAqICBzdWJcclxuICAgKiAgdGFuXHJcbiAgICogIHRhbmhcclxuICAgKiAgdHJ1bmNcclxuICAgKi9cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGFic29sdXRlIHZhbHVlIG9mIGB4YC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGFicyh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuYWJzKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYXJjY29zaW5lIGluIHJhZGlhbnMgb2YgYHhgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gYWNvcyh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuYWNvcygpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGludmVyc2Ugb2YgdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mIGB4YCwgcm91bmRlZCB0b1xyXG4gICAqIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IEEgdmFsdWUgaW4gcmFkaWFucy5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGFjb3NoKHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5hY29zaCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHN1bSBvZiBgeGAgYW5kIGB5YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICogeSB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gYWRkKHgsIHkpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5wbHVzKHkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGFyY3NpbmUgaW4gcmFkaWFucyBvZiBgeGAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gYXNpbih4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuYXNpbigpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGludmVyc2Ugb2YgdGhlIGh5cGVyYm9saWMgc2luZSBvZiBgeGAsIHJvdW5kZWQgdG9cclxuICAgKiBgcHJlY2lzaW9uYCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBBIHZhbHVlIGluIHJhZGlhbnMuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBhc2luaCh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuYXNpbmgoKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBhcmN0YW5nZW50IGluIHJhZGlhbnMgb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGF0YW4oeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmF0YW4oKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBpbnZlcnNlIG9mIHRoZSBoeXBlcmJvbGljIHRhbmdlbnQgb2YgYHhgLCByb3VuZGVkIHRvXHJcbiAgICogYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gQSB2YWx1ZSBpbiByYWRpYW5zLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gYXRhbmgoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmF0YW5oKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYXJjdGFuZ2VudCBpbiByYWRpYW5zIG9mIGB5L3hgIGluIHRoZSByYW5nZSAtcGkgdG8gcGlcclxuICAgKiAoaW5jbHVzaXZlKSwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogRG9tYWluOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKiBSYW5nZTogWy1waSwgcGldXHJcbiAgICpcclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSB5LWNvb3JkaW5hdGUuXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBUaGUgeC1jb29yZGluYXRlLlxyXG4gICAqXHJcbiAgICogYXRhbjIowrEwLCAtMCkgICAgICAgICAgICAgICA9IMKxcGlcclxuICAgKiBhdGFuMijCsTAsICswKSAgICAgICAgICAgICAgID0gwrEwXHJcbiAgICogYXRhbjIowrEwLCAteCkgICAgICAgICAgICAgICA9IMKxcGkgZm9yIHggPiAwXHJcbiAgICogYXRhbjIowrEwLCB4KSAgICAgICAgICAgICAgICA9IMKxMCBmb3IgeCA+IDBcclxuICAgKiBhdGFuMigteSwgwrEwKSAgICAgICAgICAgICAgID0gLXBpLzIgZm9yIHkgPiAwXHJcbiAgICogYXRhbjIoeSwgwrEwKSAgICAgICAgICAgICAgICA9IHBpLzIgZm9yIHkgPiAwXHJcbiAgICogYXRhbjIowrF5LCAtSW5maW5pdHkpICAgICAgICA9IMKxcGkgZm9yIGZpbml0ZSB5ID4gMFxyXG4gICAqIGF0YW4yKMKxeSwgK0luZmluaXR5KSAgICAgICAgPSDCsTAgZm9yIGZpbml0ZSB5ID4gMFxyXG4gICAqIGF0YW4yKMKxSW5maW5pdHksIHgpICAgICAgICAgPSDCsXBpLzIgZm9yIGZpbml0ZSB4XHJcbiAgICogYXRhbjIowrFJbmZpbml0eSwgLUluZmluaXR5KSA9IMKxMypwaS80XHJcbiAgICogYXRhbjIowrFJbmZpbml0eSwgK0luZmluaXR5KSA9IMKxcGkvNFxyXG4gICAqIGF0YW4yKE5hTiwgeCkgPSBOYU5cclxuICAgKiBhdGFuMih5LCBOYU4pID0gTmFOXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBhdGFuMih5LCB4KSB7XHJcbiAgICB5ID0gbmV3IHRoaXMoeSk7XHJcbiAgICB4ID0gbmV3IHRoaXMoeCk7XHJcbiAgICB2YXIgcixcclxuICAgICAgcHIgPSB0aGlzLnByZWNpc2lvbixcclxuICAgICAgcm0gPSB0aGlzLnJvdW5kaW5nLFxyXG4gICAgICB3cHIgPSBwciArIDQ7XHJcblxyXG4gICAgLy8gRWl0aGVyIE5hTlxyXG4gICAgaWYgKCF5LnMgfHwgIXgucykge1xyXG4gICAgICByID0gbmV3IHRoaXMoTmFOKTtcclxuXHJcbiAgICAvLyBCb3RoIMKxSW5maW5pdHlcclxuICAgIH0gZWxzZSBpZiAoIXkuZCAmJiAheC5kKSB7XHJcbiAgICAgIHIgPSBnZXRQaSh0aGlzLCB3cHIsIDEpLnRpbWVzKHgucyA+IDAgPyAwLjI1IDogMC43NSk7XHJcbiAgICAgIHIucyA9IHkucztcclxuXHJcbiAgICAvLyB4IGlzIMKxSW5maW5pdHkgb3IgeSBpcyDCsTBcclxuICAgIH0gZWxzZSBpZiAoIXguZCB8fCB5LmlzWmVybygpKSB7XHJcbiAgICAgIHIgPSB4LnMgPCAwID8gZ2V0UGkodGhpcywgcHIsIHJtKSA6IG5ldyB0aGlzKDApO1xyXG4gICAgICByLnMgPSB5LnM7XHJcblxyXG4gICAgLy8geSBpcyDCsUluZmluaXR5IG9yIHggaXMgwrEwXHJcbiAgICB9IGVsc2UgaWYgKCF5LmQgfHwgeC5pc1plcm8oKSkge1xyXG4gICAgICByID0gZ2V0UGkodGhpcywgd3ByLCAxKS50aW1lcygwLjUpO1xyXG4gICAgICByLnMgPSB5LnM7XHJcblxyXG4gICAgLy8gQm90aCBub24temVybyBhbmQgZmluaXRlXHJcbiAgICB9IGVsc2UgaWYgKHgucyA8IDApIHtcclxuICAgICAgdGhpcy5wcmVjaXNpb24gPSB3cHI7XHJcbiAgICAgIHRoaXMucm91bmRpbmcgPSAxO1xyXG4gICAgICByID0gdGhpcy5hdGFuKGRpdmlkZSh5LCB4LCB3cHIsIDEpKTtcclxuICAgICAgeCA9IGdldFBpKHRoaXMsIHdwciwgMSk7XHJcbiAgICAgIHRoaXMucHJlY2lzaW9uID0gcHI7XHJcbiAgICAgIHRoaXMucm91bmRpbmcgPSBybTtcclxuICAgICAgciA9IHkucyA8IDAgPyByLm1pbnVzKHgpIDogci5wbHVzKHgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgciA9IHRoaXMuYXRhbihkaXZpZGUoeSwgeCwgd3ByLCAxKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHI7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgY3ViZSByb290IG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBjYnJ0KHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5jYnJ0KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyBgeGAgcm91bmRlZCB0byBhbiBpbnRlZ2VyIHVzaW5nIGBST1VORF9DRUlMYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGNlaWwoeCkge1xyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHggPSBuZXcgdGhpcyh4KSwgeC5lICsgMSwgMik7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBDb25maWd1cmUgZ2xvYmFsIHNldHRpbmdzIGZvciBhIERlY2ltYWwgY29uc3RydWN0b3IuXHJcbiAgICpcclxuICAgKiBgb2JqYCBpcyBhbiBvYmplY3Qgd2l0aCBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMsXHJcbiAgICpcclxuICAgKiAgIHByZWNpc2lvbiAge251bWJlcn1cclxuICAgKiAgIHJvdW5kaW5nICAge251bWJlcn1cclxuICAgKiAgIHRvRXhwTmVnICAge251bWJlcn1cclxuICAgKiAgIHRvRXhwUG9zICAge251bWJlcn1cclxuICAgKiAgIG1heEUgICAgICAge251bWJlcn1cclxuICAgKiAgIG1pbkUgICAgICAge251bWJlcn1cclxuICAgKiAgIG1vZHVsbyAgICAge251bWJlcn1cclxuICAgKiAgIGNyeXB0byAgICAge2Jvb2xlYW58bnVtYmVyfVxyXG4gICAqICAgZGVmYXVsdHMgICB7dHJ1ZX1cclxuICAgKlxyXG4gICAqIEUuZy4gRGVjaW1hbC5jb25maWcoeyBwcmVjaXNpb246IDIwLCByb3VuZGluZzogNCB9KVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gY29uZmlnKG9iaikge1xyXG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHRocm93IEVycm9yKGRlY2ltYWxFcnJvciArICdPYmplY3QgZXhwZWN0ZWQnKTtcclxuICAgIHZhciBpLCBwLCB2LFxyXG4gICAgICB1c2VEZWZhdWx0cyA9IG9iai5kZWZhdWx0cyA9PT0gdHJ1ZSxcclxuICAgICAgcHMgPSBbXHJcbiAgICAgICAgJ3ByZWNpc2lvbicsIDEsIE1BWF9ESUdJVFMsXHJcbiAgICAgICAgJ3JvdW5kaW5nJywgMCwgOCxcclxuICAgICAgICAndG9FeHBOZWcnLCAtRVhQX0xJTUlULCAwLFxyXG4gICAgICAgICd0b0V4cFBvcycsIDAsIEVYUF9MSU1JVCxcclxuICAgICAgICAnbWF4RScsIDAsIEVYUF9MSU1JVCxcclxuICAgICAgICAnbWluRScsIC1FWFBfTElNSVQsIDAsXHJcbiAgICAgICAgJ21vZHVsbycsIDAsIDlcclxuICAgICAgXTtcclxuXHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgcHMubGVuZ3RoOyBpICs9IDMpIHtcclxuICAgICAgaWYgKHAgPSBwc1tpXSwgdXNlRGVmYXVsdHMpIHRoaXNbcF0gPSBERUZBVUxUU1twXTtcclxuICAgICAgaWYgKCh2ID0gb2JqW3BdKSAhPT0gdm9pZCAwKSB7XHJcbiAgICAgICAgaWYgKG1hdGhmbG9vcih2KSA9PT0gdiAmJiB2ID49IHBzW2kgKyAxXSAmJiB2IDw9IHBzW2kgKyAyXSkgdGhpc1twXSA9IHY7XHJcbiAgICAgICAgZWxzZSB0aHJvdyBFcnJvcihpbnZhbGlkQXJndW1lbnQgKyBwICsgJzogJyArIHYpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHAgPSAnY3J5cHRvJywgdXNlRGVmYXVsdHMpIHRoaXNbcF0gPSBERUZBVUxUU1twXTtcclxuICAgIGlmICgodiA9IG9ialtwXSkgIT09IHZvaWQgMCkge1xyXG4gICAgICBpZiAodiA9PT0gdHJ1ZSB8fCB2ID09PSBmYWxzZSB8fCB2ID09PSAwIHx8IHYgPT09IDEpIHtcclxuICAgICAgICBpZiAodikge1xyXG4gICAgICAgICAgaWYgKHR5cGVvZiBjcnlwdG8gIT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvICYmXHJcbiAgICAgICAgICAgIChjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzIHx8IGNyeXB0by5yYW5kb21CeXRlcykpIHtcclxuICAgICAgICAgICAgdGhpc1twXSA9IHRydWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihjcnlwdG9VbmF2YWlsYWJsZSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXNbcF0gPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgRXJyb3IoaW52YWxpZEFyZ3VtZW50ICsgcCArICc6ICcgKyB2KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGNvc2luZSBvZiBgeGAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnRcclxuICAgKiBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBBIHZhbHVlIGluIHJhZGlhbnMuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBjb3MoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmNvcygpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mIGB4YCwgcm91bmRlZCB0byBwcmVjaXNpb25cclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBBIHZhbHVlIGluIHJhZGlhbnMuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBjb3NoKHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5jb3NoKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBDcmVhdGUgYW5kIHJldHVybiBhIERlY2ltYWwgY29uc3RydWN0b3Igd2l0aCB0aGUgc2FtZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgYXMgdGhpcyBEZWNpbWFsXHJcbiAgICogY29uc3RydWN0b3IuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBjbG9uZShvYmopIHtcclxuICAgIHZhciBpLCBwLCBwcztcclxuXHJcbiAgICAvKlxyXG4gICAgICogVGhlIERlY2ltYWwgY29uc3RydWN0b3IgYW5kIGV4cG9ydGVkIGZ1bmN0aW9uLlxyXG4gICAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgaW5zdGFuY2UuXHJcbiAgICAgKlxyXG4gICAgICogdiB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBBIG51bWVyaWMgdmFsdWUuXHJcbiAgICAgKlxyXG4gICAgICovXHJcbiAgICBmdW5jdGlvbiBEZWNpbWFsKHYpIHtcclxuICAgICAgdmFyIGUsIGksIHQsXHJcbiAgICAgICAgeCA9IHRoaXM7XHJcblxyXG4gICAgICAvLyBEZWNpbWFsIGNhbGxlZCB3aXRob3V0IG5ldy5cclxuICAgICAgaWYgKCEoeCBpbnN0YW5jZW9mIERlY2ltYWwpKSByZXR1cm4gbmV3IERlY2ltYWwodik7XHJcblxyXG4gICAgICAvLyBSZXRhaW4gYSByZWZlcmVuY2UgdG8gdGhpcyBEZWNpbWFsIGNvbnN0cnVjdG9yLCBhbmQgc2hhZG93IERlY2ltYWwucHJvdG90eXBlLmNvbnN0cnVjdG9yXHJcbiAgICAgIC8vIHdoaWNoIHBvaW50cyB0byBPYmplY3QuXHJcbiAgICAgIHguY29uc3RydWN0b3IgPSBEZWNpbWFsO1xyXG5cclxuICAgICAgLy8gRHVwbGljYXRlLlxyXG4gICAgICBpZiAodiBpbnN0YW5jZW9mIERlY2ltYWwpIHtcclxuICAgICAgICB4LnMgPSB2LnM7XHJcblxyXG4gICAgICAgIGlmIChleHRlcm5hbCkge1xyXG4gICAgICAgICAgaWYgKCF2LmQgfHwgdi5lID4gRGVjaW1hbC5tYXhFKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBJbmZpbml0eS5cclxuICAgICAgICAgICAgeC5lID0gTmFOO1xyXG4gICAgICAgICAgICB4LmQgPSBudWxsO1xyXG4gICAgICAgICAgfSBlbHNlIGlmICh2LmUgPCBEZWNpbWFsLm1pbkUpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIFplcm8uXHJcbiAgICAgICAgICAgIHguZSA9IDA7XHJcbiAgICAgICAgICAgIHguZCA9IFswXTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHguZSA9IHYuZTtcclxuICAgICAgICAgICAgeC5kID0gdi5kLnNsaWNlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHguZSA9IHYuZTtcclxuICAgICAgICAgIHguZCA9IHYuZCA/IHYuZC5zbGljZSgpIDogdi5kO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0ID0gdHlwZW9mIHY7XHJcblxyXG4gICAgICBpZiAodCA9PT0gJ251bWJlcicpIHtcclxuICAgICAgICBpZiAodiA9PT0gMCkge1xyXG4gICAgICAgICAgeC5zID0gMSAvIHYgPCAwID8gLTEgOiAxO1xyXG4gICAgICAgICAgeC5lID0gMDtcclxuICAgICAgICAgIHguZCA9IFswXTtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2IDwgMCkge1xyXG4gICAgICAgICAgdiA9IC12O1xyXG4gICAgICAgICAgeC5zID0gLTE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHgucyA9IDE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBGYXN0IHBhdGggZm9yIHNtYWxsIGludGVnZXJzLlxyXG4gICAgICAgIGlmICh2ID09PSB+fnYgJiYgdiA8IDFlNykge1xyXG4gICAgICAgICAgZm9yIChlID0gMCwgaSA9IHY7IGkgPj0gMTA7IGkgLz0gMTApIGUrKztcclxuXHJcbiAgICAgICAgICBpZiAoZXh0ZXJuYWwpIHtcclxuICAgICAgICAgICAgaWYgKGUgPiBEZWNpbWFsLm1heEUpIHtcclxuICAgICAgICAgICAgICB4LmUgPSBOYU47XHJcbiAgICAgICAgICAgICAgeC5kID0gbnVsbDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChlIDwgRGVjaW1hbC5taW5FKSB7XHJcbiAgICAgICAgICAgICAgeC5lID0gMDtcclxuICAgICAgICAgICAgICB4LmQgPSBbMF07XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgeC5lID0gZTtcclxuICAgICAgICAgICAgICB4LmQgPSBbdl07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHguZSA9IGU7XHJcbiAgICAgICAgICAgIHguZCA9IFt2XTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIC8vIEluZmluaXR5LCBOYU4uXHJcbiAgICAgICAgfSBlbHNlIGlmICh2ICogMCAhPT0gMCkge1xyXG4gICAgICAgICAgaWYgKCF2KSB4LnMgPSBOYU47XHJcbiAgICAgICAgICB4LmUgPSBOYU47XHJcbiAgICAgICAgICB4LmQgPSBudWxsO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHBhcnNlRGVjaW1hbCh4LCB2LnRvU3RyaW5nKCkpO1xyXG5cclxuICAgICAgfSBlbHNlIGlmICh0ICE9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIHRocm93IEVycm9yKGludmFsaWRBcmd1bWVudCArIHYpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBNaW51cyBzaWduP1xyXG4gICAgICBpZiAoKGkgPSB2LmNoYXJDb2RlQXQoMCkpID09PSA0NSkge1xyXG4gICAgICAgIHYgPSB2LnNsaWNlKDEpO1xyXG4gICAgICAgIHgucyA9IC0xO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIFBsdXMgc2lnbj9cclxuICAgICAgICBpZiAoaSA9PT0gNDMpIHYgPSB2LnNsaWNlKDEpO1xyXG4gICAgICAgIHgucyA9IDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBpc0RlY2ltYWwudGVzdCh2KSA/IHBhcnNlRGVjaW1hbCh4LCB2KSA6IHBhcnNlT3RoZXIoeCwgdik7XHJcbiAgICB9XHJcblxyXG4gICAgRGVjaW1hbC5wcm90b3R5cGUgPSBQO1xyXG5cclxuICAgIERlY2ltYWwuUk9VTkRfVVAgPSAwO1xyXG4gICAgRGVjaW1hbC5ST1VORF9ET1dOID0gMTtcclxuICAgIERlY2ltYWwuUk9VTkRfQ0VJTCA9IDI7XHJcbiAgICBEZWNpbWFsLlJPVU5EX0ZMT09SID0gMztcclxuICAgIERlY2ltYWwuUk9VTkRfSEFMRl9VUCA9IDQ7XHJcbiAgICBEZWNpbWFsLlJPVU5EX0hBTEZfRE9XTiA9IDU7XHJcbiAgICBEZWNpbWFsLlJPVU5EX0hBTEZfRVZFTiA9IDY7XHJcbiAgICBEZWNpbWFsLlJPVU5EX0hBTEZfQ0VJTCA9IDc7XHJcbiAgICBEZWNpbWFsLlJPVU5EX0hBTEZfRkxPT1IgPSA4O1xyXG4gICAgRGVjaW1hbC5FVUNMSUQgPSA5O1xyXG5cclxuICAgIERlY2ltYWwuY29uZmlnID0gRGVjaW1hbC5zZXQgPSBjb25maWc7XHJcbiAgICBEZWNpbWFsLmNsb25lID0gY2xvbmU7XHJcbiAgICBEZWNpbWFsLmlzRGVjaW1hbCA9IGlzRGVjaW1hbEluc3RhbmNlO1xyXG5cclxuICAgIERlY2ltYWwuYWJzID0gYWJzO1xyXG4gICAgRGVjaW1hbC5hY29zID0gYWNvcztcclxuICAgIERlY2ltYWwuYWNvc2ggPSBhY29zaDsgICAgICAgIC8vIEVTNlxyXG4gICAgRGVjaW1hbC5hZGQgPSBhZGQ7XHJcbiAgICBEZWNpbWFsLmFzaW4gPSBhc2luO1xyXG4gICAgRGVjaW1hbC5hc2luaCA9IGFzaW5oOyAgICAgICAgLy8gRVM2XHJcbiAgICBEZWNpbWFsLmF0YW4gPSBhdGFuO1xyXG4gICAgRGVjaW1hbC5hdGFuaCA9IGF0YW5oOyAgICAgICAgLy8gRVM2XHJcbiAgICBEZWNpbWFsLmF0YW4yID0gYXRhbjI7XHJcbiAgICBEZWNpbWFsLmNicnQgPSBjYnJ0OyAgICAgICAgICAvLyBFUzZcclxuICAgIERlY2ltYWwuY2VpbCA9IGNlaWw7XHJcbiAgICBEZWNpbWFsLmNvcyA9IGNvcztcclxuICAgIERlY2ltYWwuY29zaCA9IGNvc2g7ICAgICAgICAgIC8vIEVTNlxyXG4gICAgRGVjaW1hbC5kaXYgPSBkaXY7XHJcbiAgICBEZWNpbWFsLmV4cCA9IGV4cDtcclxuICAgIERlY2ltYWwuZmxvb3IgPSBmbG9vcjtcclxuICAgIERlY2ltYWwuaHlwb3QgPSBoeXBvdDsgICAgICAgIC8vIEVTNlxyXG4gICAgRGVjaW1hbC5sbiA9IGxuO1xyXG4gICAgRGVjaW1hbC5sb2cgPSBsb2c7XHJcbiAgICBEZWNpbWFsLmxvZzEwID0gbG9nMTA7ICAgICAgICAvLyBFUzZcclxuICAgIERlY2ltYWwubG9nMiA9IGxvZzI7ICAgICAgICAgIC8vIEVTNlxyXG4gICAgRGVjaW1hbC5tYXggPSBtYXg7XHJcbiAgICBEZWNpbWFsLm1pbiA9IG1pbjtcclxuICAgIERlY2ltYWwubW9kID0gbW9kO1xyXG4gICAgRGVjaW1hbC5tdWwgPSBtdWw7XHJcbiAgICBEZWNpbWFsLnBvdyA9IHBvdztcclxuICAgIERlY2ltYWwucmFuZG9tID0gcmFuZG9tO1xyXG4gICAgRGVjaW1hbC5yb3VuZCA9IHJvdW5kO1xyXG4gICAgRGVjaW1hbC5zaWduID0gc2lnbjsgICAgICAgICAgLy8gRVM2XHJcbiAgICBEZWNpbWFsLnNpbiA9IHNpbjtcclxuICAgIERlY2ltYWwuc2luaCA9IHNpbmg7ICAgICAgICAgIC8vIEVTNlxyXG4gICAgRGVjaW1hbC5zcXJ0ID0gc3FydDtcclxuICAgIERlY2ltYWwuc3ViID0gc3ViO1xyXG4gICAgRGVjaW1hbC50YW4gPSB0YW47XHJcbiAgICBEZWNpbWFsLnRhbmggPSB0YW5oOyAgICAgICAgICAvLyBFUzZcclxuICAgIERlY2ltYWwudHJ1bmMgPSB0cnVuYzsgICAgICAgIC8vIEVTNlxyXG5cclxuICAgIGlmIChvYmogPT09IHZvaWQgMCkgb2JqID0ge307XHJcbiAgICBpZiAob2JqKSB7XHJcbiAgICAgIGlmIChvYmouZGVmYXVsdHMgIT09IHRydWUpIHtcclxuICAgICAgICBwcyA9IFsncHJlY2lzaW9uJywgJ3JvdW5kaW5nJywgJ3RvRXhwTmVnJywgJ3RvRXhwUG9zJywgJ21heEUnLCAnbWluRScsICdtb2R1bG8nLCAnY3J5cHRvJ107XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHBzLmxlbmd0aDspIGlmICghb2JqLmhhc093blByb3BlcnR5KHAgPSBwc1tpKytdKSkgb2JqW3BdID0gdGhpc1twXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIERlY2ltYWwuY29uZmlnKG9iaik7XHJcblxyXG4gICAgcmV0dXJuIERlY2ltYWw7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyBgeGAgZGl2aWRlZCBieSBgeWAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnRcclxuICAgKiBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqIHkge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGRpdih4LCB5KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuZGl2KHkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIG5hdHVyYWwgZXhwb25lbnRpYWwgb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gVGhlIHBvd2VyIHRvIHdoaWNoIHRvIHJhaXNlIHRoZSBiYXNlIG9mIHRoZSBuYXR1cmFsIGxvZy5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGV4cCh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuZXhwKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyBgeGAgcm91bmQgdG8gYW4gaW50ZWdlciB1c2luZyBgUk9VTkRfRkxPT1JgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gZmxvb3IoeCkge1xyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHggPSBuZXcgdGhpcyh4KSwgeC5lICsgMSwgMyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgc3F1YXJlIHJvb3Qgb2YgdGhlIHN1bSBvZiB0aGUgc3F1YXJlcyBvZiB0aGUgYXJndW1lbnRzLFxyXG4gICAqIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIGh5cG90KGEsIGIsIC4uLikgPSBzcXJ0KGFeMiArIGJeMiArIC4uLilcclxuICAgKlxyXG4gICAqIGFyZ3VtZW50cyB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gaHlwb3QoKSB7XHJcbiAgICB2YXIgaSwgbixcclxuICAgICAgdCA9IG5ldyB0aGlzKDApO1xyXG5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgZm9yIChpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7KSB7XHJcbiAgICAgIG4gPSBuZXcgdGhpcyhhcmd1bWVudHNbaSsrXSk7XHJcbiAgICAgIGlmICghbi5kKSB7XHJcbiAgICAgICAgaWYgKG4ucykge1xyXG4gICAgICAgICAgZXh0ZXJuYWwgPSB0cnVlO1xyXG4gICAgICAgICAgcmV0dXJuIG5ldyB0aGlzKDEgLyAwKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdCA9IG47XHJcbiAgICAgIH0gZWxzZSBpZiAodC5kKSB7XHJcbiAgICAgICAgdCA9IHQucGx1cyhuLnRpbWVzKG4pKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gdC5zcXJ0KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiBvYmplY3QgaXMgYSBEZWNpbWFsIGluc3RhbmNlICh3aGVyZSBEZWNpbWFsIGlzIGFueSBEZWNpbWFsIGNvbnN0cnVjdG9yKSxcclxuICAgKiBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gaXNEZWNpbWFsSW5zdGFuY2Uob2JqKSB7XHJcbiAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgRGVjaW1hbCB8fCBvYmogJiYgb2JqLm5hbWUgPT09ICdbb2JqZWN0IERlY2ltYWxdJyB8fCBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiBgeGAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gbG4oeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmxuKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbG9nIG9mIGB4YCB0byB0aGUgYmFzZSBgeWAsIG9yIHRvIGJhc2UgMTAgaWYgbm8gYmFzZVxyXG4gICAqIGlzIHNwZWNpZmllZCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogbG9nW3ldKHgpXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBhcmd1bWVudCBvZiB0aGUgbG9nYXJpdGhtLlxyXG4gICAqIHkge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gVGhlIGJhc2Ugb2YgdGhlIGxvZ2FyaXRobS5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGxvZyh4LCB5KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkubG9nKHkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGJhc2UgMiBsb2dhcml0aG0gb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGxvZzIoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmxvZygyKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBiYXNlIDEwIGxvZ2FyaXRobSBvZiBgeGAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gbG9nMTAoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmxvZygxMCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbWF4aW11bSBvZiB0aGUgYXJndW1lbnRzLlxyXG4gICAqXHJcbiAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBtYXgoKSB7XHJcbiAgICByZXR1cm4gbWF4T3JNaW4odGhpcywgYXJndW1lbnRzLCAnbHQnKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBtaW5pbXVtIG9mIHRoZSBhcmd1bWVudHMuXHJcbiAgICpcclxuICAgKiBhcmd1bWVudHMge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIG1pbigpIHtcclxuICAgIHJldHVybiBtYXhPck1pbih0aGlzLCBhcmd1bWVudHMsICdndCcpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgYHhgIG1vZHVsbyBgeWAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzXHJcbiAgICogdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqIHkge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIG1vZCh4LCB5KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkubW9kKHkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgYHhgIG11bHRpcGxpZWQgYnkgYHlgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gIHNpZ25pZmljYW50XHJcbiAgICogZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBtdWwoeCwgeSkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLm11bCh5KTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIGB4YCByYWlzZWQgdG8gdGhlIHBvd2VyIGB5YCwgcm91bmRlZCB0byBwcmVjaXNpb25cclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBUaGUgYmFzZS5cclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBleHBvbmVudC5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHBvdyh4LCB5KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkucG93KHkpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJucyBhIG5ldyBEZWNpbWFsIHdpdGggYSByYW5kb20gdmFsdWUgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIDAgYW5kIGxlc3MgdGhhbiAxLCBhbmQgd2l0aFxyXG4gICAqIGBzZGAsIG9yIGBEZWNpbWFsLnByZWNpc2lvbmAgaWYgYHNkYCBpcyBvbWl0dGVkLCBzaWduaWZpY2FudCBkaWdpdHMgKG9yIGxlc3MgaWYgdHJhaWxpbmcgemVyb3NcclxuICAgKiBhcmUgcHJvZHVjZWQpLlxyXG4gICAqXHJcbiAgICogW3NkXSB7bnVtYmVyfSBTaWduaWZpY2FudCBkaWdpdHMuIEludGVnZXIsIDAgdG8gTUFYX0RJR0lUUyBpbmNsdXNpdmUuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiByYW5kb20oc2QpIHtcclxuICAgIHZhciBkLCBlLCBrLCBuLFxyXG4gICAgICBpID0gMCxcclxuICAgICAgciA9IG5ldyB0aGlzKDEpLFxyXG4gICAgICByZCA9IFtdO1xyXG5cclxuICAgIGlmIChzZCA9PT0gdm9pZCAwKSBzZCA9IHRoaXMucHJlY2lzaW9uO1xyXG4gICAgZWxzZSBjaGVja0ludDMyKHNkLCAxLCBNQVhfRElHSVRTKTtcclxuXHJcbiAgICBrID0gTWF0aC5jZWlsKHNkIC8gTE9HX0JBU0UpO1xyXG5cclxuICAgIGlmICghdGhpcy5jcnlwdG8pIHtcclxuICAgICAgZm9yICg7IGkgPCBrOykgcmRbaSsrXSA9IE1hdGgucmFuZG9tKCkgKiAxZTcgfCAwO1xyXG5cclxuICAgIC8vIEJyb3dzZXJzIHN1cHBvcnRpbmcgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5cclxuICAgIH0gZWxzZSBpZiAoY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xyXG4gICAgICBkID0gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoaykpO1xyXG5cclxuICAgICAgZm9yICg7IGkgPCBrOykge1xyXG4gICAgICAgIG4gPSBkW2ldO1xyXG5cclxuICAgICAgICAvLyAwIDw9IG4gPCA0Mjk0OTY3Mjk2XHJcbiAgICAgICAgLy8gUHJvYmFiaWxpdHkgbiA+PSA0LjI5ZTksIGlzIDQ5NjcyOTYgLyA0Mjk0OTY3Mjk2ID0gMC4wMDExNiAoMSBpbiA4NjUpLlxyXG4gICAgICAgIGlmIChuID49IDQuMjllOSkge1xyXG4gICAgICAgICAgZFtpXSA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KDEpKVswXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIC8vIDAgPD0gbiA8PSA0Mjg5OTk5OTk5XHJcbiAgICAgICAgICAvLyAwIDw9IChuICUgMWU3KSA8PSA5OTk5OTk5XHJcbiAgICAgICAgICByZFtpKytdID0gbiAlIDFlNztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAvLyBOb2RlLmpzIHN1cHBvcnRpbmcgY3J5cHRvLnJhbmRvbUJ5dGVzLlxyXG4gICAgfSBlbHNlIGlmIChjcnlwdG8ucmFuZG9tQnl0ZXMpIHtcclxuXHJcbiAgICAgIC8vIGJ1ZmZlclxyXG4gICAgICBkID0gY3J5cHRvLnJhbmRvbUJ5dGVzKGsgKj0gNCk7XHJcblxyXG4gICAgICBmb3IgKDsgaSA8IGs7KSB7XHJcblxyXG4gICAgICAgIC8vIDAgPD0gbiA8IDIxNDc0ODM2NDhcclxuICAgICAgICBuID0gZFtpXSArIChkW2kgKyAxXSA8PCA4KSArIChkW2kgKyAyXSA8PCAxNikgKyAoKGRbaSArIDNdICYgMHg3ZikgPDwgMjQpO1xyXG5cclxuICAgICAgICAvLyBQcm9iYWJpbGl0eSBuID49IDIuMTRlOSwgaXMgNzQ4MzY0OCAvIDIxNDc0ODM2NDggPSAwLjAwMzUgKDEgaW4gMjg2KS5cclxuICAgICAgICBpZiAobiA+PSAyLjE0ZTkpIHtcclxuICAgICAgICAgIGNyeXB0by5yYW5kb21CeXRlcyg0KS5jb3B5KGQsIGkpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgICAgLy8gMCA8PSBuIDw9IDIxMzk5OTk5OTlcclxuICAgICAgICAgIC8vIDAgPD0gKG4gJSAxZTcpIDw9IDk5OTk5OTlcclxuICAgICAgICAgIHJkLnB1c2gobiAlIDFlNyk7XHJcbiAgICAgICAgICBpICs9IDQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpID0gayAvIDQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBFcnJvcihjcnlwdG9VbmF2YWlsYWJsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgayA9IHJkWy0taV07XHJcbiAgICBzZCAlPSBMT0dfQkFTRTtcclxuXHJcbiAgICAvLyBDb252ZXJ0IHRyYWlsaW5nIGRpZ2l0cyB0byB6ZXJvcyBhY2NvcmRpbmcgdG8gc2QuXHJcbiAgICBpZiAoayAmJiBzZCkge1xyXG4gICAgICBuID0gbWF0aHBvdygxMCwgTE9HX0JBU0UgLSBzZCk7XHJcbiAgICAgIHJkW2ldID0gKGsgLyBuIHwgMCkgKiBuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlbW92ZSB0cmFpbGluZyB3b3JkcyB3aGljaCBhcmUgemVyby5cclxuICAgIGZvciAoOyByZFtpXSA9PT0gMDsgaS0tKSByZC5wb3AoKTtcclxuXHJcbiAgICAvLyBaZXJvP1xyXG4gICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgIGUgPSAwO1xyXG4gICAgICByZCA9IFswXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGUgPSAtMTtcclxuXHJcbiAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIHdvcmRzIHdoaWNoIGFyZSB6ZXJvIGFuZCBhZGp1c3QgZXhwb25lbnQgYWNjb3JkaW5nbHkuXHJcbiAgICAgIGZvciAoOyByZFswXSA9PT0gMDsgZSAtPSBMT0dfQkFTRSkgcmQuc2hpZnQoKTtcclxuXHJcbiAgICAgIC8vIENvdW50IHRoZSBkaWdpdHMgb2YgdGhlIGZpcnN0IHdvcmQgb2YgcmQgdG8gZGV0ZXJtaW5lIGxlYWRpbmcgemVyb3MuXHJcbiAgICAgIGZvciAoayA9IDEsIG4gPSByZFswXTsgbiA+PSAxMDsgbiAvPSAxMCkgaysrO1xyXG5cclxuICAgICAgLy8gQWRqdXN0IHRoZSBleHBvbmVudCBmb3IgbGVhZGluZyB6ZXJvcyBvZiB0aGUgZmlyc3Qgd29yZCBvZiByZC5cclxuICAgICAgaWYgKGsgPCBMT0dfQkFTRSkgZSAtPSBMT0dfQkFTRSAtIGs7XHJcbiAgICB9XHJcblxyXG4gICAgci5lID0gZTtcclxuICAgIHIuZCA9IHJkO1xyXG5cclxuICAgIHJldHVybiByO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgYHhgIHJvdW5kZWQgdG8gYW4gaW50ZWdlciB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiBUbyBlbXVsYXRlIGBNYXRoLnJvdW5kYCwgc2V0IHJvdW5kaW5nIHRvIDcgKFJPVU5EX0hBTEZfQ0VJTCkuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiByb3VuZCh4KSB7XHJcbiAgICByZXR1cm4gZmluYWxpc2UoeCA9IG5ldyB0aGlzKHgpLCB4LmUgKyAxLCB0aGlzLnJvdW5kaW5nKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVyblxyXG4gICAqICAgMSAgICBpZiB4ID4gMCxcclxuICAgKiAgLTEgICAgaWYgeCA8IDAsXHJcbiAgICogICAwICAgIGlmIHggaXMgMCxcclxuICAgKiAgLTAgICAgaWYgeCBpcyAtMCxcclxuICAgKiAgIE5hTiAgb3RoZXJ3aXNlXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBzaWduKHgpIHtcclxuICAgIHggPSBuZXcgdGhpcyh4KTtcclxuICAgIHJldHVybiB4LmQgPyAoeC5kWzBdID8geC5zIDogMCAqIHgucykgOiB4LnMgfHwgTmFOO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHNpbmUgb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0c1xyXG4gICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gQSB2YWx1ZSBpbiByYWRpYW5zLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gc2luKHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5zaW4oKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBoeXBlcmJvbGljIHNpbmUgb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gQSB2YWx1ZSBpbiByYWRpYW5zLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gc2luaCh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuc2luaCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHNxdWFyZSByb290IG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBzcXJ0KHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5zcXJ0KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyBgeGAgbWludXMgYHlgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0c1xyXG4gICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBzdWIoeCwgeSkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLnN1Yih5KTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB0YW5nZW50IG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IEEgdmFsdWUgaW4gcmFkaWFucy5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHRhbih4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkudGFuKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYFxyXG4gICAqIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IEEgdmFsdWUgaW4gcmFkaWFucy5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHRhbmgoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLnRhbmgoKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIGB4YCB0cnVuY2F0ZWQgdG8gYW4gaW50ZWdlci5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHRydW5jKHgpIHtcclxuICAgIHJldHVybiBmaW5hbGlzZSh4ID0gbmV3IHRoaXMoeCksIHguZSArIDEsIDEpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIENyZWF0ZSBhbmQgY29uZmlndXJlIGluaXRpYWwgRGVjaW1hbCBjb25zdHJ1Y3Rvci5cclxuICBEZWNpbWFsID0gY2xvbmUoREVGQVVMVFMpO1xyXG5cclxuICBEZWNpbWFsWydkZWZhdWx0J10gPSBEZWNpbWFsLkRlY2ltYWwgPSBEZWNpbWFsO1xyXG5cclxuICAvLyBDcmVhdGUgdGhlIGludGVybmFsIGNvbnN0YW50cyBmcm9tIHRoZWlyIHN0cmluZyB2YWx1ZXMuXHJcbiAgTE4xMCA9IG5ldyBEZWNpbWFsKExOMTApO1xyXG4gIFBJID0gbmV3IERlY2ltYWwoUEkpO1xyXG5cclxuXHJcbiAgLy8gRXhwb3J0LlxyXG5cclxuXHJcbiAgLy8gQU1ELlxyXG4gIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xyXG4gICAgZGVmaW5lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgcmV0dXJuIERlY2ltYWw7XHJcbiAgICB9KTtcclxuXHJcbiAgLy8gTm9kZSBhbmQgb3RoZXIgZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBtb2R1bGUuZXhwb3J0cy5cclxuICB9IGVsc2UgaWYgKHR5cGVvZiBtb2R1bGUgIT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcclxuICAgIGlmICh0eXBlb2YgU3ltYm9sID09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJykge1xyXG4gICAgICBQW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldID0gUC50b1N0cmluZztcclxuICAgICAgUFtTeW1ib2wudG9TdHJpbmdUYWddID0gJ0RlY2ltYWwnO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZHVsZS5leHBvcnRzID0gRGVjaW1hbDtcclxuXHJcbiAgLy8gQnJvd3Nlci5cclxuICB9IGVsc2Uge1xyXG4gICAgaWYgKCFnbG9iYWxTY29wZSkge1xyXG4gICAgICBnbG9iYWxTY29wZSA9IHR5cGVvZiBzZWxmICE9ICd1bmRlZmluZWQnICYmIHNlbGYgJiYgc2VsZi5zZWxmID09IHNlbGYgPyBzZWxmIDogd2luZG93O1xyXG4gICAgfVxyXG5cclxuICAgIG5vQ29uZmxpY3QgPSBnbG9iYWxTY29wZS5EZWNpbWFsO1xyXG4gICAgRGVjaW1hbC5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICBnbG9iYWxTY29wZS5EZWNpbWFsID0gbm9Db25mbGljdDtcclxuICAgICAgcmV0dXJuIERlY2ltYWw7XHJcbiAgICB9O1xyXG5cclxuICAgIGdsb2JhbFNjb3BlLkRlY2ltYWwgPSBEZWNpbWFsO1xyXG4gIH1cclxufSkodGhpcyk7XHJcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vLyBNYXAgdGhlIGNoYXJhY3RlcnMgdG8gZXNjYXBlIHRvIHRoZWlyIGVzY2FwZWQgdmFsdWVzLiBUaGUgbGlzdCBpcyBkZXJpdmVkXG4vLyBmcm9tIGh0dHA6Ly93d3cuY2VzcGVkZXMub3JnL2Jsb2cvODUvaG93LXRvLWVzY2FwZS1sYXRleC1zcGVjaWFsLWNoYXJhY3RlcnNcblxudmFyIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTtcblxudmFyIGRlZmF1bHRFc2NhcGVzID0ge1xuICBcIntcIjogXCJcXFxce1wiLFxuICBcIn1cIjogXCJcXFxcfVwiLFxuICBcIlxcXFxcIjogXCJcXFxcdGV4dGJhY2tzbGFzaHt9XCIsXG4gIFwiI1wiOiBcIlxcXFwjXCIsXG4gICQ6IFwiXFxcXCRcIixcbiAgXCIlXCI6IFwiXFxcXCVcIixcbiAgXCImXCI6IFwiXFxcXCZcIixcbiAgXCJeXCI6IFwiXFxcXHRleHRhc2NpaWNpcmN1bXt9XCIsXG4gIF86IFwiXFxcXF9cIixcbiAgXCJ+XCI6IFwiXFxcXHRleHRhc2NpaXRpbGRle31cIlxufTtcbnZhciBmb3JtYXRFc2NhcGVzID0ge1xuICBcIlxcdTIwMTNcIjogXCJcXFxcLS1cIixcbiAgXCJcXHUyMDE0XCI6IFwiXFxcXC0tLVwiLFxuICBcIiBcIjogXCJ+XCIsXG4gIFwiXFx0XCI6IFwiXFxcXHFxdWFke31cIixcbiAgXCJcXHJcXG5cIjogXCJcXFxcbmV3bGluZXt9XCIsXG4gIFwiXFxuXCI6IFwiXFxcXG5ld2xpbmV7fVwiXG59O1xuXG52YXIgZGVmYXVsdEVzY2FwZU1hcEZuID0gZnVuY3Rpb24gZGVmYXVsdEVzY2FwZU1hcEZuKGRlZmF1bHRFc2NhcGVzLCBmb3JtYXRFc2NhcGVzKSB7XG4gIHJldHVybiBfZXh0ZW5kcyh7fSwgZGVmYXVsdEVzY2FwZXMsIGZvcm1hdEVzY2FwZXMpO1xufTtcblxuLyoqXG4gKiBFc2NhcGUgYSBzdHJpbmcgdG8gYmUgdXNlZCBpbiBMYVRlWCBkb2N1bWVudHMuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIHRoZSBzdHJpbmcgdG8gYmUgZXNjYXBlZC5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gcGFyYW1zLnByZXNlcnZlRm9ybWF0dGluZyB3aGV0aGVyIGZvcm1hdHRpbmcgZXNjYXBlcyBzaG91bGRcbiAqICBiZSBwZXJmb3JtZWQgKGRlZmF1bHQ6IGZhbHNlKS5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHBhcmFtcy5lc2NhcGVNYXBGbiB0aGUgZnVuY3Rpb24gdG8gbW9kaWZ5IHRoZSBlc2NhcGUgbWFwcy5cbiAqIEByZXR1cm4ge3N0cmluZ30gdGhlIGVzY2FwZWQgc3RyaW5nLCByZWFkeSB0byBiZSB1c2VkIGluIExhVGVYLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgdmFyIF9yZWYgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9LFxuICAgICAgX3JlZiRwcmVzZXJ2ZUZvcm1hdHRpID0gX3JlZi5wcmVzZXJ2ZUZvcm1hdHRpbmcsXG4gICAgICBwcmVzZXJ2ZUZvcm1hdHRpbmcgPSBfcmVmJHByZXNlcnZlRm9ybWF0dGkgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogX3JlZiRwcmVzZXJ2ZUZvcm1hdHRpLFxuICAgICAgX3JlZiRlc2NhcGVNYXBGbiA9IF9yZWYuZXNjYXBlTWFwRm4sXG4gICAgICBlc2NhcGVNYXBGbiA9IF9yZWYkZXNjYXBlTWFwRm4gPT09IHVuZGVmaW5lZCA/IGRlZmF1bHRFc2NhcGVNYXBGbiA6IF9yZWYkZXNjYXBlTWFwRm47XG5cbiAgdmFyIHJ1bm5pbmdTdHIgPSBTdHJpbmcoc3RyKTtcbiAgdmFyIHJlc3VsdCA9IFwiXCI7XG5cbiAgdmFyIGVzY2FwZXMgPSBlc2NhcGVNYXBGbihfZXh0ZW5kcyh7fSwgZGVmYXVsdEVzY2FwZXMpLCBwcmVzZXJ2ZUZvcm1hdHRpbmcgPyBfZXh0ZW5kcyh7fSwgZm9ybWF0RXNjYXBlcykgOiB7fSk7XG4gIHZhciBlc2NhcGVLZXlzID0gT2JqZWN0LmtleXMoZXNjYXBlcyk7IC8vIGFzIGl0IGlzIHJldXNlZCBsYXRlciBvblxuXG4gIC8vIEFsZ29yaXRobTogR28gdGhyb3VnaCB0aGUgc3RyaW5nIGNoYXJhY3RlciBieSBjaGFyYWN0ZXIsIGlmIGl0IG1hdGNoZXNcbiAgLy8gd2l0aCBvbmUgb2YgdGhlIHNwZWNpYWwgY2hhcmFjdGVycyB0aGVuIHdlJ2xsIHJlcGxhY2UgaXQgd2l0aCB0aGUgZXNjYXBlZFxuICAvLyB2ZXJzaW9uLlxuXG4gIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKCkge1xuICAgIHZhciBzcGVjaWFsQ2hhckZvdW5kID0gZmFsc2U7XG4gICAgZXNjYXBlS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXksIGluZGV4KSB7XG4gICAgICBpZiAoc3BlY2lhbENoYXJGb3VuZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAocnVubmluZ1N0ci5sZW5ndGggPj0ga2V5Lmxlbmd0aCAmJiBydW5uaW5nU3RyLnNsaWNlKDAsIGtleS5sZW5ndGgpID09PSBrZXkpIHtcbiAgICAgICAgcmVzdWx0ICs9IGVzY2FwZXNbZXNjYXBlS2V5c1tpbmRleF1dO1xuICAgICAgICBydW5uaW5nU3RyID0gcnVubmluZ1N0ci5zbGljZShrZXkubGVuZ3RoLCBydW5uaW5nU3RyLmxlbmd0aCk7XG4gICAgICAgIHNwZWNpYWxDaGFyRm91bmQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghc3BlY2lhbENoYXJGb3VuZCkge1xuICAgICAgcmVzdWx0ICs9IHJ1bm5pbmdTdHIuc2xpY2UoMCwgMSk7XG4gICAgICBydW5uaW5nU3RyID0gcnVubmluZ1N0ci5zbGljZSgxLCBydW5uaW5nU3RyLmxlbmd0aCk7XG4gICAgfVxuICB9O1xuXG4gIHdoaWxlIChydW5uaW5nU3RyKSB7XG4gICAgX2xvb3AoKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTsiLCIvKipcbiAqIEBsaWNlbnNlIEZyYWN0aW9uLmpzIHY0LjAuMTIgMDkvMDkvMjAxNVxuICogaHR0cDovL3d3dy54YXJnLm9yZy8yMDE0LzAzL3JhdGlvbmFsLW51bWJlcnMtaW4tamF2YXNjcmlwdC9cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTUsIFJvYmVydCBFaXNlbGUgKHJvYmVydEB4YXJnLm9yZylcbiAqIER1YWwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBvciBHUEwgVmVyc2lvbiAyIGxpY2Vuc2VzLlxuICoqL1xuXG5cbi8qKlxuICpcbiAqIFRoaXMgY2xhc3Mgb2ZmZXJzIHRoZSBwb3NzaWJpbGl0eSB0byBjYWxjdWxhdGUgZnJhY3Rpb25zLlxuICogWW91IGNhbiBwYXNzIGEgZnJhY3Rpb24gaW4gZGlmZmVyZW50IGZvcm1hdHMuIEVpdGhlciBhcyBhcnJheSwgYXMgZG91YmxlLCBhcyBzdHJpbmcgb3IgYXMgYW4gaW50ZWdlci5cbiAqXG4gKiBBcnJheS9PYmplY3QgZm9ybVxuICogWyAwID0+IDxub21pbmF0b3I+LCAxID0+IDxkZW5vbWluYXRvcj4gXVxuICogWyBuID0+IDxub21pbmF0b3I+LCBkID0+IDxkZW5vbWluYXRvcj4gXVxuICpcbiAqIEludGVnZXIgZm9ybVxuICogLSBTaW5nbGUgaW50ZWdlciB2YWx1ZVxuICpcbiAqIERvdWJsZSBmb3JtXG4gKiAtIFNpbmdsZSBkb3VibGUgdmFsdWVcbiAqXG4gKiBTdHJpbmcgZm9ybVxuICogMTIzLjQ1NiAtIGEgc2ltcGxlIGRvdWJsZVxuICogMTIzLzQ1NiAtIGEgc3RyaW5nIGZyYWN0aW9uXG4gKiAxMjMuJzQ1NicgLSBhIGRvdWJsZSB3aXRoIHJlcGVhdGluZyBkZWNpbWFsIHBsYWNlc1xuICogMTIzLig0NTYpIC0gc3lub255bVxuICogMTIzLjQ1JzYnIC0gYSBkb3VibGUgd2l0aCByZXBlYXRpbmcgbGFzdCBwbGFjZVxuICogMTIzLjQ1KDYpIC0gc3lub255bVxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogdmFyIGYgPSBuZXcgRnJhY3Rpb24oXCI5LjQnMzEnXCIpO1xuICogZi5tdWwoWy00LCAzXSkuZGl2KDQuOSk7XG4gKlxuICovXG5cbihmdW5jdGlvbihyb290KSB7XG5cbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgLy8gTWF4aW11bSBzZWFyY2ggZGVwdGggZm9yIGN5Y2xpYyByYXRpb25hbCBudW1iZXJzLiAyMDAwIHNob3VsZCBiZSBtb3JlIHRoYW4gZW5vdWdoLlxuICAvLyBFeGFtcGxlOiAxLzcgPSAwLigxNDI4NTcpIGhhcyA2IHJlcGVhdGluZyBkZWNpbWFsIHBsYWNlcy5cbiAgLy8gSWYgTUFYX0NZQ0xFX0xFTiBnZXRzIHJlZHVjZWQsIGxvbmcgY3ljbGVzIHdpbGwgbm90IGJlIGRldGVjdGVkIGFuZCB0b1N0cmluZygpIG9ubHkgZ2V0cyB0aGUgZmlyc3QgMTAgZGlnaXRzXG4gIHZhciBNQVhfQ1lDTEVfTEVOID0gMjAwMDtcblxuICAvLyBQYXJzZWQgZGF0YSB0byBhdm9pZCBjYWxsaW5nIFwibmV3XCIgYWxsIHRoZSB0aW1lXG4gIHZhciBQID0ge1xuICAgIFwic1wiOiAxLFxuICAgIFwiblwiOiAwLFxuICAgIFwiZFwiOiAxXG4gIH07XG5cbiAgZnVuY3Rpb24gY3JlYXRlRXJyb3IobmFtZSkge1xuXG4gICAgZnVuY3Rpb24gZXJyb3JDb25zdHJ1Y3RvcigpIHtcbiAgICAgIHZhciB0ZW1wID0gRXJyb3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgIHRlbXBbJ25hbWUnXSA9IHRoaXNbJ25hbWUnXSA9IG5hbWU7XG4gICAgICB0aGlzWydzdGFjayddID0gdGVtcFsnc3RhY2snXTtcbiAgICAgIHRoaXNbJ21lc3NhZ2UnXSA9IHRlbXBbJ21lc3NhZ2UnXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFcnJvciBjb25zdHJ1Y3RvclxuICAgICAqXG4gICAgICogQGNvbnN0cnVjdG9yXG4gICAgICovXG4gICAgZnVuY3Rpb24gSW50ZXJtZWRpYXRlSW5oZXJpdG9yKCkge31cbiAgICBJbnRlcm1lZGlhdGVJbmhlcml0b3IucHJvdG90eXBlID0gRXJyb3IucHJvdG90eXBlO1xuICAgIGVycm9yQ29uc3RydWN0b3IucHJvdG90eXBlID0gbmV3IEludGVybWVkaWF0ZUluaGVyaXRvcigpO1xuXG4gICAgcmV0dXJuIGVycm9yQ29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgRGl2aXNpb25CeVplcm8gPSBGcmFjdGlvblsnRGl2aXNpb25CeVplcm8nXSA9IGNyZWF0ZUVycm9yKCdEaXZpc2lvbkJ5WmVybycpO1xuICB2YXIgSW52YWxpZFBhcmFtZXRlciA9IEZyYWN0aW9uWydJbnZhbGlkUGFyYW1ldGVyJ10gPSBjcmVhdGVFcnJvcignSW52YWxpZFBhcmFtZXRlcicpO1xuXG4gIGZ1bmN0aW9uIGFzc2lnbihuLCBzKSB7XG5cbiAgICBpZiAoaXNOYU4obiA9IHBhcnNlSW50KG4sIDEwKSkpIHtcbiAgICAgIHRocm93SW52YWxpZFBhcmFtKCk7XG4gICAgfVxuICAgIHJldHVybiBuICogcztcbiAgfVxuXG4gIGZ1bmN0aW9uIHRocm93SW52YWxpZFBhcmFtKCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkUGFyYW1ldGVyKCk7XG4gIH1cblxuICB2YXIgcGFyc2UgPSBmdW5jdGlvbihwMSwgcDIpIHtcblxuICAgIHZhciBuID0gMCwgZCA9IDEsIHMgPSAxO1xuICAgIHZhciB2ID0gMCwgdyA9IDAsIHggPSAwLCB5ID0gMSwgeiA9IDE7XG5cbiAgICB2YXIgQSA9IDAsIEIgPSAxO1xuICAgIHZhciBDID0gMSwgRCA9IDE7XG5cbiAgICB2YXIgTiA9IDEwMDAwMDAwO1xuICAgIHZhciBNO1xuXG4gICAgaWYgKHAxID09PSB1bmRlZmluZWQgfHwgcDEgPT09IG51bGwpIHtcbiAgICAgIC8qIHZvaWQgKi9cbiAgICB9IGVsc2UgaWYgKHAyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG4gPSBwMTtcbiAgICAgIGQgPSBwMjtcbiAgICAgIHMgPSBuICogZDtcbiAgICB9IGVsc2VcbiAgICAgIHN3aXRjaCAodHlwZW9mIHAxKSB7XG5cbiAgICAgICAgY2FzZSBcIm9iamVjdFwiOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKFwiZFwiIGluIHAxICYmIFwiblwiIGluIHAxKSB7XG4gICAgICAgICAgICBuID0gcDFbXCJuXCJdO1xuICAgICAgICAgICAgZCA9IHAxW1wiZFwiXTtcbiAgICAgICAgICAgIGlmIChcInNcIiBpbiBwMSlcbiAgICAgICAgICAgICAgbiAqPSBwMVtcInNcIl07XG4gICAgICAgICAgfSBlbHNlIGlmICgwIGluIHAxKSB7XG4gICAgICAgICAgICBuID0gcDFbMF07XG4gICAgICAgICAgICBpZiAoMSBpbiBwMSlcbiAgICAgICAgICAgICAgZCA9IHAxWzFdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvd0ludmFsaWRQYXJhbSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzID0gbiAqIGQ7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKHAxIDwgMCkge1xuICAgICAgICAgICAgcyA9IHAxO1xuICAgICAgICAgICAgcDEgPSAtcDE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHAxICUgMSA9PT0gMCkge1xuICAgICAgICAgICAgbiA9IHAxO1xuICAgICAgICAgIH0gZWxzZSBpZiAocDEgPiAwKSB7IC8vIGNoZWNrIGZvciAhPSAwLCBzY2FsZSB3b3VsZCBiZWNvbWUgTmFOIChsb2coMCkpLCB3aGljaCBjb252ZXJnZXMgcmVhbGx5IHNsb3dcblxuICAgICAgICAgICAgaWYgKHAxID49IDEpIHtcbiAgICAgICAgICAgICAgeiA9IE1hdGgucG93KDEwLCBNYXRoLmZsb29yKDEgKyBNYXRoLmxvZyhwMSkgLyBNYXRoLkxOMTApKTtcbiAgICAgICAgICAgICAgcDEgLz0gejtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gVXNpbmcgRmFyZXkgU2VxdWVuY2VzXG4gICAgICAgICAgICAvLyBodHRwOi8vd3d3LmpvaG5kY29vay5jb20vYmxvZy8yMDEwLzEwLzIwL2Jlc3QtcmF0aW9uYWwtYXBwcm94aW1hdGlvbi9cblxuICAgICAgICAgICAgd2hpbGUgKEIgPD0gTiAmJiBEIDw9IE4pIHtcbiAgICAgICAgICAgICAgTSA9IChBICsgQykgLyAoQiArIEQpO1xuXG4gICAgICAgICAgICAgIGlmIChwMSA9PT0gTSkge1xuICAgICAgICAgICAgICAgIGlmIChCICsgRCA8PSBOKSB7XG4gICAgICAgICAgICAgICAgICBuID0gQSArIEM7XG4gICAgICAgICAgICAgICAgICBkID0gQiArIEQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChEID4gQikge1xuICAgICAgICAgICAgICAgICAgbiA9IEM7XG4gICAgICAgICAgICAgICAgICBkID0gRDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgbiA9IEE7XG4gICAgICAgICAgICAgICAgICBkID0gQjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIGlmIChwMSA+IE0pIHtcbiAgICAgICAgICAgICAgICAgIEEgKz0gQztcbiAgICAgICAgICAgICAgICAgIEIgKz0gRDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgQyArPSBBO1xuICAgICAgICAgICAgICAgICAgRCArPSBCO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChCID4gTikge1xuICAgICAgICAgICAgICAgICAgbiA9IEM7XG4gICAgICAgICAgICAgICAgICBkID0gRDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgbiA9IEE7XG4gICAgICAgICAgICAgICAgICBkID0gQjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG4gKj0gejtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzTmFOKHAxKSB8fCBpc05hTihwMikpIHtcbiAgICAgICAgICAgIGQgPSBuID0gTmFOO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgIHtcbiAgICAgICAgICBCID0gcDEubWF0Y2goL1xcZCt8Li9nKTtcblxuICAgICAgICAgIGlmIChCID09PSBudWxsKVxuICAgICAgICAgICAgdGhyb3dJbnZhbGlkUGFyYW0oKTtcblxuICAgICAgICAgIGlmIChCW0FdID09PSAnLScpIHsvLyBDaGVjayBmb3IgbWludXMgc2lnbiBhdCB0aGUgYmVnaW5uaW5nXG4gICAgICAgICAgICBzID0gLTE7XG4gICAgICAgICAgICBBKys7XG4gICAgICAgICAgfSBlbHNlIGlmIChCW0FdID09PSAnKycpIHsvLyBDaGVjayBmb3IgcGx1cyBzaWduIGF0IHRoZSBiZWdpbm5pbmdcbiAgICAgICAgICAgIEErKztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoQi5sZW5ndGggPT09IEEgKyAxKSB7IC8vIENoZWNrIGlmIGl0J3MganVzdCBhIHNpbXBsZSBudW1iZXIgXCIxMjM0XCJcbiAgICAgICAgICAgIHcgPSBhc3NpZ24oQltBKytdLCBzKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKEJbQSArIDFdID09PSAnLicgfHwgQltBXSA9PT0gJy4nKSB7IC8vIENoZWNrIGlmIGl0J3MgYSBkZWNpbWFsIG51bWJlclxuXG4gICAgICAgICAgICBpZiAoQltBXSAhPT0gJy4nKSB7IC8vIEhhbmRsZSAwLjUgYW5kIC41XG4gICAgICAgICAgICAgIHYgPSBhc3NpZ24oQltBKytdLCBzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIEErKztcblxuICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGRlY2ltYWwgcGxhY2VzXG4gICAgICAgICAgICBpZiAoQSArIDEgPT09IEIubGVuZ3RoIHx8IEJbQSArIDFdID09PSAnKCcgJiYgQltBICsgM10gPT09ICcpJyB8fCBCW0EgKyAxXSA9PT0gXCInXCIgJiYgQltBICsgM10gPT09IFwiJ1wiKSB7XG4gICAgICAgICAgICAgIHcgPSBhc3NpZ24oQltBXSwgcyk7XG4gICAgICAgICAgICAgIHkgPSBNYXRoLnBvdygxMCwgQltBXS5sZW5ndGgpO1xuICAgICAgICAgICAgICBBKys7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGZvciByZXBlYXRpbmcgcGxhY2VzXG4gICAgICAgICAgICBpZiAoQltBXSA9PT0gJygnICYmIEJbQSArIDJdID09PSAnKScgfHwgQltBXSA9PT0gXCInXCIgJiYgQltBICsgMl0gPT09IFwiJ1wiKSB7XG4gICAgICAgICAgICAgIHggPSBhc3NpZ24oQltBICsgMV0sIHMpO1xuICAgICAgICAgICAgICB6ID0gTWF0aC5wb3coMTAsIEJbQSArIDFdLmxlbmd0aCkgLSAxO1xuICAgICAgICAgICAgICBBICs9IDM7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKEJbQSArIDFdID09PSAnLycgfHwgQltBICsgMV0gPT09ICc6JykgeyAvLyBDaGVjayBmb3IgYSBzaW1wbGUgZnJhY3Rpb24gXCIxMjMvNDU2XCIgb3IgXCIxMjM6NDU2XCJcbiAgICAgICAgICAgIHcgPSBhc3NpZ24oQltBXSwgcyk7XG4gICAgICAgICAgICB5ID0gYXNzaWduKEJbQSArIDJdLCAxKTtcbiAgICAgICAgICAgIEEgKz0gMztcbiAgICAgICAgICB9IGVsc2UgaWYgKEJbQSArIDNdID09PSAnLycgJiYgQltBICsgMV0gPT09ICcgJykgeyAvLyBDaGVjayBmb3IgYSBjb21wbGV4IGZyYWN0aW9uIFwiMTIzIDEvMlwiXG4gICAgICAgICAgICB2ID0gYXNzaWduKEJbQV0sIHMpO1xuICAgICAgICAgICAgdyA9IGFzc2lnbihCW0EgKyAyXSwgcyk7XG4gICAgICAgICAgICB5ID0gYXNzaWduKEJbQSArIDRdLCAxKTtcbiAgICAgICAgICAgIEEgKz0gNTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoQi5sZW5ndGggPD0gQSkgeyAvLyBDaGVjayBmb3IgbW9yZSB0b2tlbnMgb24gdGhlIHN0YWNrXG4gICAgICAgICAgICBkID0geSAqIHo7XG4gICAgICAgICAgICBzID0gLyogdm9pZCAqL1xuICAgICAgICAgICAgICAgICAgICBuID0geCArIGQgKiB2ICsgeiAqIHc7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvKiBGYWxsIHRocm91Z2ggb24gZXJyb3IgKi9cbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93SW52YWxpZFBhcmFtKCk7XG4gICAgICB9XG5cbiAgICBpZiAoZCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IERpdmlzaW9uQnlaZXJvKCk7XG4gICAgfVxuXG4gICAgUFtcInNcIl0gPSBzIDwgMCA/IC0xIDogMTtcbiAgICBQW1wiblwiXSA9IE1hdGguYWJzKG4pO1xuICAgIFBbXCJkXCJdID0gTWF0aC5hYnMoZCk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbW9kcG93KGIsIGUsIG0pIHtcblxuICAgIHZhciByID0gMTtcbiAgICBmb3IgKDsgZSA+IDA7IGIgPSAoYiAqIGIpICUgbSwgZSA+Pj0gMSkge1xuXG4gICAgICBpZiAoZSAmIDEpIHtcbiAgICAgICAgciA9IChyICogYikgJSBtO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcjtcbiAgfVxuXG5cbiAgZnVuY3Rpb24gY3ljbGVMZW4obiwgZCkge1xuXG4gICAgZm9yICg7IGQgJSAyID09PSAwO1xuICAgICAgICAgICAgZCAvPSAyKSB7XG4gICAgfVxuXG4gICAgZm9yICg7IGQgJSA1ID09PSAwO1xuICAgICAgICAgICAgZCAvPSA1KSB7XG4gICAgfVxuXG4gICAgaWYgKGQgPT09IDEpIC8vIENhdGNoIG5vbi1jeWNsaWMgbnVtYmVyc1xuICAgICAgcmV0dXJuIDA7XG5cbiAgICAvLyBJZiB3ZSB3b3VsZCBsaWtlIHRvIGNvbXB1dGUgcmVhbGx5IGxhcmdlIG51bWJlcnMgcXVpY2tlciwgd2UgY291bGQgbWFrZSB1c2Ugb2YgRmVybWF0J3MgbGl0dGxlIHRoZW9yZW06XG4gICAgLy8gMTBeKGQtMSkgJSBkID09IDFcbiAgICAvLyBIb3dldmVyLCB3ZSBkb24ndCBuZWVkIHN1Y2ggbGFyZ2UgbnVtYmVycyBhbmQgTUFYX0NZQ0xFX0xFTiBzaG91bGQgYmUgdGhlIGNhcHN0b25lLFxuICAgIC8vIGFzIHdlIHdhbnQgdG8gdHJhbnNsYXRlIHRoZSBudW1iZXJzIHRvIHN0cmluZ3MuXG5cbiAgICB2YXIgcmVtID0gMTAgJSBkO1xuICAgIHZhciB0ID0gMTtcblxuICAgIGZvciAoOyByZW0gIT09IDE7IHQrKykge1xuICAgICAgcmVtID0gcmVtICogMTAgJSBkO1xuXG4gICAgICBpZiAodCA+IE1BWF9DWUNMRV9MRU4pXG4gICAgICAgIHJldHVybiAwOyAvLyBSZXR1cm5pbmcgMCBoZXJlIG1lYW5zIHRoYXQgd2UgZG9uJ3QgcHJpbnQgaXQgYXMgYSBjeWNsaWMgbnVtYmVyLiBJdCdzIGxpa2VseSB0aGF0IHRoZSBhbnN3ZXIgaXMgYGQtMWBcbiAgICB9XG4gICAgcmV0dXJuIHQ7XG4gIH1cblxuXG4gICAgIGZ1bmN0aW9uIGN5Y2xlU3RhcnQobiwgZCwgbGVuKSB7XG5cbiAgICB2YXIgcmVtMSA9IDE7XG4gICAgdmFyIHJlbTIgPSBtb2Rwb3coMTAsIGxlbiwgZCk7XG5cbiAgICBmb3IgKHZhciB0ID0gMDsgdCA8IDMwMDsgdCsrKSB7IC8vIHMgPCB+bG9nMTAoTnVtYmVyLk1BWF9WQUxVRSlcbiAgICAgIC8vIFNvbHZlIDEwXnMgPT0gMTBeKHMrdCkgKG1vZCBkKVxuXG4gICAgICBpZiAocmVtMSA9PT0gcmVtMilcbiAgICAgICAgcmV0dXJuIHQ7XG5cbiAgICAgIHJlbTEgPSByZW0xICogMTAgJSBkO1xuICAgICAgcmVtMiA9IHJlbTIgKiAxMCAlIGQ7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2NkKGEsIGIpIHtcblxuICAgIGlmICghYSlcbiAgICAgIHJldHVybiBiO1xuICAgIGlmICghYilcbiAgICAgIHJldHVybiBhO1xuXG4gICAgd2hpbGUgKDEpIHtcbiAgICAgIGEgJT0gYjtcbiAgICAgIGlmICghYSlcbiAgICAgICAgcmV0dXJuIGI7XG4gICAgICBiICU9IGE7XG4gICAgICBpZiAoIWIpXG4gICAgICAgIHJldHVybiBhO1xuICAgIH1cbiAgfTtcblxuICAvKipcbiAgICogTW9kdWxlIGNvbnN0cnVjdG9yXG4gICAqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge251bWJlcnxGcmFjdGlvbj19IGFcbiAgICogQHBhcmFtIHtudW1iZXI9fSBiXG4gICAqL1xuICBmdW5jdGlvbiBGcmFjdGlvbihhLCBiKSB7XG5cbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRnJhY3Rpb24pKSB7XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKGEsIGIpO1xuICAgIH1cblxuICAgIHBhcnNlKGEsIGIpO1xuXG4gICAgaWYgKEZyYWN0aW9uWydSRURVQ0UnXSkge1xuICAgICAgYSA9IGdjZChQW1wiZFwiXSwgUFtcIm5cIl0pOyAvLyBBYnVzZSBhXG4gICAgfSBlbHNlIHtcbiAgICAgIGEgPSAxO1xuICAgIH1cblxuICAgIHRoaXNbXCJzXCJdID0gUFtcInNcIl07XG4gICAgdGhpc1tcIm5cIl0gPSBQW1wiblwiXSAvIGE7XG4gICAgdGhpc1tcImRcIl0gPSBQW1wiZFwiXSAvIGE7XG4gIH1cblxuICAvKipcbiAgICogQm9vbGVhbiBnbG9iYWwgdmFyaWFibGUgdG8gYmUgYWJsZSB0byBkaXNhYmxlIGF1dG9tYXRpYyByZWR1Y3Rpb24gb2YgdGhlIGZyYWN0aW9uXG4gICAqXG4gICAqL1xuICBGcmFjdGlvblsnUkVEVUNFJ10gPSAxO1xuXG4gIEZyYWN0aW9uLnByb3RvdHlwZSA9IHtcblxuICAgIFwic1wiOiAxLFxuICAgIFwiblwiOiAwLFxuICAgIFwiZFwiOiAxLFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgYWJzb2x1dGUgdmFsdWVcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oLTQpLmFicygpID0+IDRcbiAgICAgKiovXG4gICAgXCJhYnNcIjogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24odGhpc1tcIm5cIl0sIHRoaXNbXCJkXCJdKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogSW52ZXJ0cyB0aGUgc2lnbiBvZiB0aGUgY3VycmVudCBmcmFjdGlvblxuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbigtNCkubmVnKCkgPT4gNFxuICAgICAqKi9cbiAgICBcIm5lZ1wiOiBmdW5jdGlvbigpIHtcblxuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbigtdGhpc1tcInNcIl0gKiB0aGlzW1wiblwiXSwgdGhpc1tcImRcIl0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHR3byByYXRpb25hbCBudW1iZXJzXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKHtuOiAyLCBkOiAzfSkuYWRkKFwiMTQuOVwiKSA9PiA0NjcgLyAzMFxuICAgICAqKi9cbiAgICBcImFkZFwiOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHBhcnNlKGEsIGIpO1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihcbiAgICAgICAgICAgICAgdGhpc1tcInNcIl0gKiB0aGlzW1wiblwiXSAqIFBbXCJkXCJdICsgUFtcInNcIl0gKiB0aGlzW1wiZFwiXSAqIFBbXCJuXCJdLFxuICAgICAgICAgICAgICB0aGlzW1wiZFwiXSAqIFBbXCJkXCJdXG4gICAgICAgICAgICAgICk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFN1YnRyYWN0cyB0d28gcmF0aW9uYWwgbnVtYmVyc1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbih7bjogMiwgZDogM30pLmFkZChcIjE0LjlcIikgPT4gLTQyNyAvIDMwXG4gICAgICoqL1xuICAgIFwic3ViXCI6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgcGFyc2UoYSwgYik7XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKFxuICAgICAgICAgICAgICB0aGlzW1wic1wiXSAqIHRoaXNbXCJuXCJdICogUFtcImRcIl0gLSBQW1wic1wiXSAqIHRoaXNbXCJkXCJdICogUFtcIm5cIl0sXG4gICAgICAgICAgICAgIHRoaXNbXCJkXCJdICogUFtcImRcIl1cbiAgICAgICAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogTXVsdGlwbGllcyB0d28gcmF0aW9uYWwgbnVtYmVyc1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbihcIi0xNy4oMzQ1KVwiKS5tdWwoMykgPT4gNTc3NiAvIDExMVxuICAgICAqKi9cbiAgICBcIm11bFwiOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHBhcnNlKGEsIGIpO1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihcbiAgICAgICAgICAgICAgdGhpc1tcInNcIl0gKiBQW1wic1wiXSAqIHRoaXNbXCJuXCJdICogUFtcIm5cIl0sXG4gICAgICAgICAgICAgIHRoaXNbXCJkXCJdICogUFtcImRcIl1cbiAgICAgICAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGl2aWRlcyB0d28gcmF0aW9uYWwgbnVtYmVyc1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbihcIi0xNy4oMzQ1KVwiKS5pbnZlcnNlKCkuZGl2KDMpXG4gICAgICoqL1xuICAgIFwiZGl2XCI6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgcGFyc2UoYSwgYik7XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKFxuICAgICAgICAgICAgICB0aGlzW1wic1wiXSAqIFBbXCJzXCJdICogdGhpc1tcIm5cIl0gKiBQW1wiZFwiXSxcbiAgICAgICAgICAgICAgdGhpc1tcImRcIl0gKiBQW1wiblwiXVxuICAgICAgICAgICAgICApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDbG9uZXMgdGhlIGFjdHVhbCBvYmplY3RcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oXCItMTcuKDM0NSlcIikuY2xvbmUoKVxuICAgICAqKi9cbiAgICBcImNsb25lXCI6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih0aGlzKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgbW9kdWxvIG9mIHR3byByYXRpb25hbCBudW1iZXJzIC0gYSBtb3JlIHByZWNpc2UgZm1vZFxuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbignNC4oMyknKS5tb2QoWzcsIDhdKSA9PiAoMTMvMykgJSAoNy84KSA9ICg1LzYpXG4gICAgICoqL1xuICAgIFwibW9kXCI6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgaWYgKGlzTmFOKHRoaXNbJ24nXSkgfHwgaXNOYU4odGhpc1snZCddKSkge1xuICAgICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKE5hTik7XG4gICAgICB9XG5cbiAgICAgIGlmIChhID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih0aGlzW1wic1wiXSAqIHRoaXNbXCJuXCJdICUgdGhpc1tcImRcIl0sIDEpO1xuICAgICAgfVxuXG4gICAgICBwYXJzZShhLCBiKTtcbiAgICAgIGlmICgwID09PSBQW1wiblwiXSAmJiAwID09PSB0aGlzW1wiZFwiXSkge1xuICAgICAgICBGcmFjdGlvbigwLCAwKTsgLy8gVGhyb3cgRGl2aXNpb25CeVplcm9cbiAgICAgIH1cblxuICAgICAgLypcbiAgICAgICAqIEZpcnN0IHNpbGx5IGF0dGVtcHQsIGtpbmRhIHNsb3dcbiAgICAgICAqXG4gICAgICAgcmV0dXJuIHRoYXRbXCJzdWJcIl0oe1xuICAgICAgIFwiblwiOiBudW1bXCJuXCJdICogTWF0aC5mbG9vcigodGhpcy5uIC8gdGhpcy5kKSAvIChudW0ubiAvIG51bS5kKSksXG4gICAgICAgXCJkXCI6IG51bVtcImRcIl0sXG4gICAgICAgXCJzXCI6IHRoaXNbXCJzXCJdXG4gICAgICAgfSk7Ki9cblxuICAgICAgLypcbiAgICAgICAqIE5ldyBhdHRlbXB0OiBhMSAvIGIxID0gYTIgLyBiMiAqIHEgKyByXG4gICAgICAgKiA9PiBiMiAqIGExID0gYTIgKiBiMSAqIHEgKyBiMSAqIGIyICogclxuICAgICAgICogPT4gKGIyICogYTEgJSBhMiAqIGIxKSAvIChiMSAqIGIyKVxuICAgICAgICovXG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKFxuICAgICAgICAgICAgICB0aGlzW1wic1wiXSAqIChQW1wiZFwiXSAqIHRoaXNbXCJuXCJdKSAlIChQW1wiblwiXSAqIHRoaXNbXCJkXCJdKSxcbiAgICAgICAgICAgICAgUFtcImRcIl0gKiB0aGlzW1wiZFwiXVxuICAgICAgICAgICAgICApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBmcmFjdGlvbmFsIGdjZCBvZiB0d28gcmF0aW9uYWwgbnVtYmVyc1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbig1LDgpLmdjZCgzLDcpID0+IDEvNTZcbiAgICAgKi9cbiAgICBcImdjZFwiOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHBhcnNlKGEsIGIpO1xuXG4gICAgICAvLyBnY2QoYSAvIGIsIGMgLyBkKSA9IGdjZChhLCBjKSAvIGxjbShiLCBkKVxuXG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKGdjZChQW1wiblwiXSwgdGhpc1tcIm5cIl0pICogZ2NkKFBbXCJkXCJdLCB0aGlzW1wiZFwiXSksIFBbXCJkXCJdICogdGhpc1tcImRcIl0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBmcmFjdGlvbmFsIGxjbSBvZiB0d28gcmF0aW9uYWwgbnVtYmVyc1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbig1LDgpLmxjbSgzLDcpID0+IDE1XG4gICAgICovXG4gICAgXCJsY21cIjogZnVuY3Rpb24oYSwgYikge1xuXG4gICAgICBwYXJzZShhLCBiKTtcblxuICAgICAgLy8gbGNtKGEgLyBiLCBjIC8gZCkgPSBsY20oYSwgYykgLyBnY2QoYiwgZClcblxuICAgICAgaWYgKFBbXCJuXCJdID09PSAwICYmIHRoaXNbXCJuXCJdID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgRnJhY3Rpb247XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKFBbXCJuXCJdICogdGhpc1tcIm5cIl0sIGdjZChQW1wiblwiXSwgdGhpc1tcIm5cIl0pICogZ2NkKFBbXCJkXCJdLCB0aGlzW1wiZFwiXSkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBjZWlsIG9mIGEgcmF0aW9uYWwgbnVtYmVyXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKCc0LigzKScpLmNlaWwoKSA9PiAoNSAvIDEpXG4gICAgICoqL1xuICAgIFwiY2VpbFwiOiBmdW5jdGlvbihwbGFjZXMpIHtcblxuICAgICAgcGxhY2VzID0gTWF0aC5wb3coMTAsIHBsYWNlcyB8fCAwKTtcblxuICAgICAgaWYgKGlzTmFOKHRoaXNbXCJuXCJdKSB8fCBpc05hTih0aGlzW1wiZFwiXSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihOYU4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihNYXRoLmNlaWwocGxhY2VzICogdGhpc1tcInNcIl0gKiB0aGlzW1wiblwiXSAvIHRoaXNbXCJkXCJdKSwgcGxhY2VzKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgZmxvb3Igb2YgYSByYXRpb25hbCBudW1iZXJcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oJzQuKDMpJykuZmxvb3IoKSA9PiAoNCAvIDEpXG4gICAgICoqL1xuICAgIFwiZmxvb3JcIjogZnVuY3Rpb24ocGxhY2VzKSB7XG5cbiAgICAgIHBsYWNlcyA9IE1hdGgucG93KDEwLCBwbGFjZXMgfHwgMCk7XG5cbiAgICAgIGlmIChpc05hTih0aGlzW1wiblwiXSkgfHwgaXNOYU4odGhpc1tcImRcIl0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oTmFOKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oTWF0aC5mbG9vcihwbGFjZXMgKiB0aGlzW1wic1wiXSAqIHRoaXNbXCJuXCJdIC8gdGhpc1tcImRcIl0pLCBwbGFjZXMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSb3VuZHMgYSByYXRpb25hbCBudW1iZXJzXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKCc0LigzKScpLnJvdW5kKCkgPT4gKDQgLyAxKVxuICAgICAqKi9cbiAgICBcInJvdW5kXCI6IGZ1bmN0aW9uKHBsYWNlcykge1xuXG4gICAgICBwbGFjZXMgPSBNYXRoLnBvdygxMCwgcGxhY2VzIHx8IDApO1xuXG4gICAgICBpZiAoaXNOYU4odGhpc1tcIm5cIl0pIHx8IGlzTmFOKHRoaXNbXCJkXCJdKSkge1xuICAgICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKE5hTik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKE1hdGgucm91bmQocGxhY2VzICogdGhpc1tcInNcIl0gKiB0aGlzW1wiblwiXSAvIHRoaXNbXCJkXCJdKSwgcGxhY2VzKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogR2V0cyB0aGUgaW52ZXJzZSBvZiB0aGUgZnJhY3Rpb24sIG1lYW5zIG51bWVyYXRvciBhbmQgZGVudW1lcmF0b3IgYXJlIGV4Y2hhbmdlZFxuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbihbLTMsIDRdKS5pbnZlcnNlKCkgPT4gLTQgLyAzXG4gICAgICoqL1xuICAgIFwiaW52ZXJzZVwiOiBmdW5jdGlvbigpIHtcblxuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih0aGlzW1wic1wiXSAqIHRoaXNbXCJkXCJdLCB0aGlzW1wiblwiXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIGZyYWN0aW9uIHRvIHNvbWUgaW50ZWdlciBleHBvbmVudFxuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbigtMSwyKS5wb3coLTMpID0+IC04XG4gICAgICovXG4gICAgXCJwb3dcIjogZnVuY3Rpb24obSkge1xuXG4gICAgICBpZiAobSA8IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihNYXRoLnBvdyh0aGlzWydzJ10gKiB0aGlzW1wiZFwiXSwgLW0pLCBNYXRoLnBvdyh0aGlzW1wiblwiXSwgLW0pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oTWF0aC5wb3codGhpc1sncyddICogdGhpc1tcIm5cIl0sIG0pLCBNYXRoLnBvdyh0aGlzW1wiZFwiXSwgbSkpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0d28gcmF0aW9uYWwgbnVtYmVycyBhcmUgdGhlIHNhbWVcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oMTkuNikuZXF1YWxzKFs5OCwgNV0pO1xuICAgICAqKi9cbiAgICBcImVxdWFsc1wiOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHBhcnNlKGEsIGIpO1xuICAgICAgcmV0dXJuIHRoaXNbXCJzXCJdICogdGhpc1tcIm5cIl0gKiBQW1wiZFwiXSA9PT0gUFtcInNcIl0gKiBQW1wiblwiXSAqIHRoaXNbXCJkXCJdOyAvLyBTYW1lIGFzIGNvbXBhcmUoKSA9PT0gMFxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0d28gcmF0aW9uYWwgbnVtYmVycyBhcmUgdGhlIHNhbWVcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oMTkuNikuZXF1YWxzKFs5OCwgNV0pO1xuICAgICAqKi9cbiAgICBcImNvbXBhcmVcIjogZnVuY3Rpb24oYSwgYikge1xuXG4gICAgICBwYXJzZShhLCBiKTtcbiAgICAgIHZhciB0ID0gKHRoaXNbXCJzXCJdICogdGhpc1tcIm5cIl0gKiBQW1wiZFwiXSAtIFBbXCJzXCJdICogUFtcIm5cIl0gKiB0aGlzW1wiZFwiXSk7XG4gICAgICByZXR1cm4gKDAgPCB0KSAtICh0IDwgMCk7XG4gICAgfSxcblxuICAgIFwic2ltcGxpZnlcIjogZnVuY3Rpb24oZXBzKSB7XG5cbiAgICAgIC8vIEZpcnN0IG5haXZlIGltcGxlbWVudGF0aW9uLCBuZWVkcyBpbXByb3ZlbWVudFxuXG4gICAgICBpZiAoaXNOYU4odGhpc1snbiddKSB8fCBpc05hTih0aGlzWydkJ10pKSB7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuXG4gICAgICB2YXIgY29udCA9IHRoaXNbJ2FicyddKClbJ3RvQ29udGludWVkJ10oKTtcblxuICAgICAgZXBzID0gZXBzIHx8IDAuMDAxO1xuXG4gICAgICBmdW5jdGlvbiByZWMoYSkge1xuICAgICAgICBpZiAoYS5sZW5ndGggPT09IDEpXG4gICAgICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihhWzBdKTtcbiAgICAgICAgcmV0dXJuIHJlYyhhLnNsaWNlKDEpKVsnaW52ZXJzZSddKClbJ2FkZCddKGFbMF0pO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHRtcCA9IHJlYyhjb250LnNsaWNlKDAsIGkgKyAxKSk7XG4gICAgICAgIGlmICh0bXBbJ3N1YiddKHRoaXNbJ2FicyddKCkpWydhYnMnXSgpLnZhbHVlT2YoKSA8IGVwcykge1xuICAgICAgICAgIHJldHVybiB0bXBbJ211bCddKHRoaXNbJ3MnXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDaGVjayBpZiB0d28gcmF0aW9uYWwgbnVtYmVycyBhcmUgZGl2aXNpYmxlXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKDE5LjYpLmRpdmlzaWJsZSgxLjUpO1xuICAgICAqL1xuICAgIFwiZGl2aXNpYmxlXCI6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgcGFyc2UoYSwgYik7XG4gICAgICByZXR1cm4gISghKFBbXCJuXCJdICogdGhpc1tcImRcIl0pIHx8ICgodGhpc1tcIm5cIl0gKiBQW1wiZFwiXSkgJSAoUFtcIm5cIl0gKiB0aGlzW1wiZFwiXSkpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGRlY2ltYWwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGZyYWN0aW9uXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKFwiMTAwLic5MTgyMydcIikudmFsdWVPZigpID0+IDEwMC45MTgyMzkxODIzOTE4M1xuICAgICAqKi9cbiAgICAndmFsdWVPZic6IGZ1bmN0aW9uKCkge1xuXG4gICAgICByZXR1cm4gdGhpc1tcInNcIl0gKiB0aGlzW1wiblwiXSAvIHRoaXNbXCJkXCJdO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgc3RyaW5nLWZyYWN0aW9uIHJlcHJlc2VudGF0aW9uIG9mIGEgRnJhY3Rpb24gb2JqZWN0XG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKFwiMS4nMydcIikudG9GcmFjdGlvbigpID0+IFwiNCAxLzNcIlxuICAgICAqKi9cbiAgICAndG9GcmFjdGlvbic6IGZ1bmN0aW9uKGV4Y2x1ZGVXaG9sZSkge1xuXG4gICAgICB2YXIgd2hvbGUsIHN0ciA9IFwiXCI7XG4gICAgICB2YXIgbiA9IHRoaXNbXCJuXCJdO1xuICAgICAgdmFyIGQgPSB0aGlzW1wiZFwiXTtcbiAgICAgIGlmICh0aGlzW1wic1wiXSA8IDApIHtcbiAgICAgICAgc3RyICs9ICctJztcbiAgICAgIH1cblxuICAgICAgaWYgKGQgPT09IDEpIHtcbiAgICAgICAgc3RyICs9IG47XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICAgIGlmIChleGNsdWRlV2hvbGUgJiYgKHdob2xlID0gTWF0aC5mbG9vcihuIC8gZCkpID4gMCkge1xuICAgICAgICAgIHN0ciArPSB3aG9sZTtcbiAgICAgICAgICBzdHIgKz0gXCIgXCI7XG4gICAgICAgICAgbiAlPSBkO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyICs9IG47XG4gICAgICAgIHN0ciArPSAnLyc7XG4gICAgICAgIHN0ciArPSBkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGxhdGV4IHJlcHJlc2VudGF0aW9uIG9mIGEgRnJhY3Rpb24gb2JqZWN0XG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKFwiMS4nMydcIikudG9MYXRleCgpID0+IFwiXFxmcmFjezR9ezN9XCJcbiAgICAgKiovXG4gICAgJ3RvTGF0ZXgnOiBmdW5jdGlvbihleGNsdWRlV2hvbGUpIHtcblxuICAgICAgdmFyIHdob2xlLCBzdHIgPSBcIlwiO1xuICAgICAgdmFyIG4gPSB0aGlzW1wiblwiXTtcbiAgICAgIHZhciBkID0gdGhpc1tcImRcIl07XG4gICAgICBpZiAodGhpc1tcInNcIl0gPCAwKSB7XG4gICAgICAgIHN0ciArPSAnLSc7XG4gICAgICB9XG5cbiAgICAgIGlmIChkID09PSAxKSB7XG4gICAgICAgIHN0ciArPSBuO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICBpZiAoZXhjbHVkZVdob2xlICYmICh3aG9sZSA9IE1hdGguZmxvb3IobiAvIGQpKSA+IDApIHtcbiAgICAgICAgICBzdHIgKz0gd2hvbGU7XG4gICAgICAgICAgbiAlPSBkO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RyICs9IFwiXFxcXGZyYWN7XCI7XG4gICAgICAgIHN0ciArPSBuO1xuICAgICAgICBzdHIgKz0gJ317JztcbiAgICAgICAgc3RyICs9IGQ7XG4gICAgICAgIHN0ciArPSAnfSc7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGNvbnRpbnVlZCBmcmFjdGlvbiBlbGVtZW50c1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbihcIjcvOFwiKS50b0NvbnRpbnVlZCgpID0+IFswLDEsN11cbiAgICAgKi9cbiAgICAndG9Db250aW51ZWQnOiBmdW5jdGlvbigpIHtcblxuICAgICAgdmFyIHQ7XG4gICAgICB2YXIgYSA9IHRoaXNbJ24nXTtcbiAgICAgIHZhciBiID0gdGhpc1snZCddO1xuICAgICAgdmFyIHJlcyA9IFtdO1xuXG4gICAgICBpZiAoaXNOYU4odGhpc1snbiddKSB8fCBpc05hTih0aGlzWydkJ10pKSB7XG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICB9XG5cbiAgICAgIGRvIHtcbiAgICAgICAgcmVzLnB1c2goTWF0aC5mbG9vcihhIC8gYikpO1xuICAgICAgICB0ID0gYSAlIGI7XG4gICAgICAgIGEgPSBiO1xuICAgICAgICBiID0gdDtcbiAgICAgIH0gd2hpbGUgKGEgIT09IDEpO1xuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVzIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZnJhY3Rpb24gd2l0aCBhbGwgZGlnaXRzXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKFwiMTAwLic5MTgyMydcIikudG9TdHJpbmcoKSA9PiBcIjEwMC4oOTE4MjMpXCJcbiAgICAgKiovXG4gICAgJ3RvU3RyaW5nJzogZnVuY3Rpb24oZGVjKSB7XG5cbiAgICAgIHZhciBnO1xuICAgICAgdmFyIE4gPSB0aGlzW1wiblwiXTtcbiAgICAgIHZhciBEID0gdGhpc1tcImRcIl07XG5cbiAgICAgIGlmIChpc05hTihOKSB8fCBpc05hTihEKSkge1xuICAgICAgICByZXR1cm4gXCJOYU5cIjtcbiAgICAgIH1cblxuICAgICAgaWYgKCFGcmFjdGlvblsnUkVEVUNFJ10pIHtcbiAgICAgICAgZyA9IGdjZChOLCBEKTtcbiAgICAgICAgTiAvPSBnO1xuICAgICAgICBEIC89IGc7XG4gICAgICB9XG5cbiAgICAgIGRlYyA9IGRlYyB8fCAxNTsgLy8gMTUgPSBkZWNpbWFsIHBsYWNlcyB3aGVuIG5vIHJlcGl0YXRpb25cblxuICAgICAgdmFyIGN5Y0xlbiA9IGN5Y2xlTGVuKE4sIEQpOyAvLyBDeWNsZSBsZW5ndGhcbiAgICAgIHZhciBjeWNPZmYgPSBjeWNsZVN0YXJ0KE4sIEQsIGN5Y0xlbik7IC8vIEN5Y2xlIHN0YXJ0XG5cbiAgICAgIHZhciBzdHIgPSB0aGlzWydzJ10gPT09IC0xID8gXCItXCIgOiBcIlwiO1xuXG4gICAgICBzdHIgKz0gTiAvIEQgfCAwO1xuXG4gICAgICBOICU9IEQ7XG4gICAgICBOICo9IDEwO1xuXG4gICAgICBpZiAoTilcbiAgICAgICAgc3RyICs9IFwiLlwiO1xuXG4gICAgICBpZiAoY3ljTGVuKSB7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGN5Y09mZjsgaS0tOyApIHtcbiAgICAgICAgICBzdHIgKz0gTiAvIEQgfCAwO1xuICAgICAgICAgIE4gJT0gRDtcbiAgICAgICAgICBOICo9IDEwO1xuICAgICAgICB9XG4gICAgICAgIHN0ciArPSBcIihcIjtcbiAgICAgICAgZm9yICh2YXIgaSA9IGN5Y0xlbjsgaS0tOyApIHtcbiAgICAgICAgICBzdHIgKz0gTiAvIEQgfCAwO1xuICAgICAgICAgIE4gJT0gRDtcbiAgICAgICAgICBOICo9IDEwO1xuICAgICAgICB9XG4gICAgICAgIHN0ciArPSBcIilcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBkZWM7IE4gJiYgaS0tOyApIHtcbiAgICAgICAgICBzdHIgKz0gTiAvIEQgfCAwO1xuICAgICAgICAgIE4gJT0gRDtcbiAgICAgICAgICBOICo9IDEwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgfTtcblxuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZVtcImFtZFwiXSkge1xuICAgIGRlZmluZShbXSwgZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gRnJhY3Rpb247XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09IFwib2JqZWN0XCIpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsndmFsdWUnOiB0cnVlfSk7XG4gICAgRnJhY3Rpb25bJ2RlZmF1bHQnXSA9IEZyYWN0aW9uO1xuICAgIEZyYWN0aW9uWydGcmFjdGlvbiddID0gRnJhY3Rpb247XG4gICAgbW9kdWxlWydleHBvcnRzJ10gPSBGcmFjdGlvbjtcbiAgfSBlbHNlIHtcbiAgICByb290WydGcmFjdGlvbiddID0gRnJhY3Rpb247XG4gIH1cblxufSkodGhpcyk7XG4iLCIvKlxyXG4gKiBOYXR1cmFsIFNvcnQgYWxnb3JpdGhtIGZvciBKYXZhc2NyaXB0IC0gVmVyc2lvbiAwLjcgLSBSZWxlYXNlZCB1bmRlciBNSVQgbGljZW5zZVxyXG4gKiBBdXRob3I6IEppbSBQYWxtZXIgKGJhc2VkIG9uIGNodW5raW5nIGlkZWEgZnJvbSBEYXZlIEtvZWxsZSlcclxuICovXHJcbi8qanNoaW50IHVudXNlZDpmYWxzZSAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG5hdHVyYWxTb3J0IChhLCBiKSB7XHJcblx0XCJ1c2Ugc3RyaWN0XCI7XHJcblx0dmFyIHJlID0gLyheKFsrXFwtXT8oPzowfFsxLTldXFxkKikoPzpcXC5cXGQqKT8oPzpbZUVdWytcXC1dP1xcZCspPyk/JHxeMHhbMC05YS1mXSskfFxcZCspL2dpLFxyXG5cdFx0c3JlID0gLyheWyBdKnxbIF0qJCkvZyxcclxuXHRcdGRyZSA9IC8oXihbXFx3IF0rLD9bXFx3IF0rKT9bXFx3IF0rLD9bXFx3IF0rXFxkKzpcXGQrKDpcXGQrKT9bXFx3IF0/fF5cXGR7MSw0fVtcXC9cXC1dXFxkezEsNH1bXFwvXFwtXVxcZHsxLDR9fF5cXHcrLCBcXHcrIFxcZCssIFxcZHs0fSkvLFxyXG5cdFx0aHJlID0gL14weFswLTlhLWZdKyQvaSxcclxuXHRcdG9yZSA9IC9eMC8sXHJcblx0XHRpID0gZnVuY3Rpb24ocykgeyByZXR1cm4gbmF0dXJhbFNvcnQuaW5zZW5zaXRpdmUgJiYgKCcnICsgcykudG9Mb3dlckNhc2UoKSB8fCAnJyArIHM7IH0sXHJcblx0XHQvLyBjb252ZXJ0IGFsbCB0byBzdHJpbmdzIHN0cmlwIHdoaXRlc3BhY2VcclxuXHRcdHggPSBpKGEpLnJlcGxhY2Uoc3JlLCAnJykgfHwgJycsXHJcblx0XHR5ID0gaShiKS5yZXBsYWNlKHNyZSwgJycpIHx8ICcnLFxyXG5cdFx0Ly8gY2h1bmsvdG9rZW5pemVcclxuXHRcdHhOID0geC5yZXBsYWNlKHJlLCAnXFwwJDFcXDAnKS5yZXBsYWNlKC9cXDAkLywnJykucmVwbGFjZSgvXlxcMC8sJycpLnNwbGl0KCdcXDAnKSxcclxuXHRcdHlOID0geS5yZXBsYWNlKHJlLCAnXFwwJDFcXDAnKS5yZXBsYWNlKC9cXDAkLywnJykucmVwbGFjZSgvXlxcMC8sJycpLnNwbGl0KCdcXDAnKSxcclxuXHRcdC8vIG51bWVyaWMsIGhleCBvciBkYXRlIGRldGVjdGlvblxyXG5cdFx0eEQgPSBwYXJzZUludCh4Lm1hdGNoKGhyZSksIDE2KSB8fCAoeE4ubGVuZ3RoICE9PSAxICYmIHgubWF0Y2goZHJlKSAmJiBEYXRlLnBhcnNlKHgpKSxcclxuXHRcdHlEID0gcGFyc2VJbnQoeS5tYXRjaChocmUpLCAxNikgfHwgeEQgJiYgeS5tYXRjaChkcmUpICYmIERhdGUucGFyc2UoeSkgfHwgbnVsbCxcclxuXHRcdG9GeE5jTCwgb0Z5TmNMO1xyXG5cdC8vIGZpcnN0IHRyeSBhbmQgc29ydCBIZXggY29kZXMgb3IgRGF0ZXNcclxuXHRpZiAoeUQpIHtcclxuXHRcdGlmICggeEQgPCB5RCApIHsgcmV0dXJuIC0xOyB9XHJcblx0XHRlbHNlIGlmICggeEQgPiB5RCApIHsgcmV0dXJuIDE7IH1cclxuXHR9XHJcblx0Ly8gbmF0dXJhbCBzb3J0aW5nIHRocm91Z2ggc3BsaXQgbnVtZXJpYyBzdHJpbmdzIGFuZCBkZWZhdWx0IHN0cmluZ3NcclxuXHRmb3IodmFyIGNMb2M9MCwgbnVtUz1NYXRoLm1heCh4Ti5sZW5ndGgsIHlOLmxlbmd0aCk7IGNMb2MgPCBudW1TOyBjTG9jKyspIHtcclxuXHRcdC8vIGZpbmQgZmxvYXRzIG5vdCBzdGFydGluZyB3aXRoICcwJywgc3RyaW5nIG9yIDAgaWYgbm90IGRlZmluZWQgKENsaW50IFByaWVzdClcclxuXHRcdG9GeE5jTCA9ICEoeE5bY0xvY10gfHwgJycpLm1hdGNoKG9yZSkgJiYgcGFyc2VGbG9hdCh4TltjTG9jXSkgfHwgeE5bY0xvY10gfHwgMDtcclxuXHRcdG9GeU5jTCA9ICEoeU5bY0xvY10gfHwgJycpLm1hdGNoKG9yZSkgJiYgcGFyc2VGbG9hdCh5TltjTG9jXSkgfHwgeU5bY0xvY10gfHwgMDtcclxuXHRcdC8vIGhhbmRsZSBudW1lcmljIHZzIHN0cmluZyBjb21wYXJpc29uIC0gbnVtYmVyIDwgc3RyaW5nIC0gKEt5bGUgQWRhbXMpXHJcblx0XHRpZiAoaXNOYU4ob0Z4TmNMKSAhPT0gaXNOYU4ob0Z5TmNMKSkgeyByZXR1cm4gKGlzTmFOKG9GeE5jTCkpID8gMSA6IC0xOyB9XHJcblx0XHQvLyByZWx5IG9uIHN0cmluZyBjb21wYXJpc29uIGlmIGRpZmZlcmVudCB0eXBlcyAtIGkuZS4gJzAyJyA8IDIgIT0gJzAyJyA8ICcyJ1xyXG5cdFx0ZWxzZSBpZiAodHlwZW9mIG9GeE5jTCAhPT0gdHlwZW9mIG9GeU5jTCkge1xyXG5cdFx0XHRvRnhOY0wgKz0gJyc7XHJcblx0XHRcdG9GeU5jTCArPSAnJztcclxuXHRcdH1cclxuXHRcdGlmIChvRnhOY0wgPCBvRnlOY0wpIHsgcmV0dXJuIC0xOyB9XHJcblx0XHRpZiAob0Z4TmNMID4gb0Z5TmNMKSB7IHJldHVybiAxOyB9XHJcblx0fVxyXG5cdHJldHVybiAwO1xyXG59O1xyXG4iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVmVyc2lvbiA9IGV4cG9ydHMuY3JlYXRlVXBwZXJjYXNlRSA9IGV4cG9ydHMuY3JlYXRlVXBwZXJjYXNlUGkgPSBleHBvcnRzLmNyZWF0ZUkgPSBleHBvcnRzLmNyZWF0ZVNRUlQyID0gZXhwb3J0cy5jcmVhdGVTUVJUMV8yID0gZXhwb3J0cy5jcmVhdGVMT0cxMEUgPSBleHBvcnRzLmNyZWF0ZUxPRzJFID0gZXhwb3J0cy5jcmVhdGVMTjEwID0gZXhwb3J0cy5jcmVhdGVMTjIgPSBleHBvcnRzLmNyZWF0ZVBoaSA9IGV4cG9ydHMuY3JlYXRlRSA9IGV4cG9ydHMuY3JlYXRlVGF1ID0gZXhwb3J0cy5jcmVhdGVQaSA9IGV4cG9ydHMuY3JlYXRlTmFOID0gZXhwb3J0cy5jcmVhdGVJbmZpbml0eSA9IGV4cG9ydHMuY3JlYXRlTnVsbCA9IGV4cG9ydHMuY3JlYXRlRmFsc2UgPSBleHBvcnRzLmNyZWF0ZVRydWUgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfdmVyc2lvbiA9IHJlcXVpcmUoXCIuL3ZlcnNpb25cIik7XG5cbnZhciBfY29uc3RhbnRzID0gcmVxdWlyZShcIi4vdXRpbHMvYmlnbnVtYmVyL2NvbnN0YW50c1wiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBjcmVhdGVUcnVlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKCd0cnVlJywgW10sIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRydWU7XG59KTtcbmV4cG9ydHMuY3JlYXRlVHJ1ZSA9IGNyZWF0ZVRydWU7XG52YXIgY3JlYXRlRmFsc2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkoJ2ZhbHNlJywgW10sIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZhbHNlO1xufSk7XG5leHBvcnRzLmNyZWF0ZUZhbHNlID0gY3JlYXRlRmFsc2U7XG52YXIgY3JlYXRlTnVsbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KSgnbnVsbCcsIFtdLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBudWxsO1xufSk7XG5leHBvcnRzLmNyZWF0ZU51bGwgPSBjcmVhdGVOdWxsO1xudmFyIGNyZWF0ZUluZmluaXR5ID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCdJbmZpbml0eScsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoSW5maW5pdHkpIDogSW5maW5pdHk7XG59KTtcbmV4cG9ydHMuY3JlYXRlSW5maW5pdHkgPSBjcmVhdGVJbmZpbml0eTtcbnZhciBjcmVhdGVOYU4gPSAvKiAjX19QVVJFX18gKi9yZWNyZWF0ZUZhY3RvcnkoJ05hTicsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciBjb25maWcgPSBfcmVmMi5jb25maWcsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmMi5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoTmFOKSA6IE5hTjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVOYU4gPSBjcmVhdGVOYU47XG52YXIgY3JlYXRlUGkgPSAvKiAjX19QVVJFX18gKi9yZWNyZWF0ZUZhY3RvcnkoJ3BpJywgWydjb25maWcnLCAnP0JpZ051bWJlciddLCBmdW5jdGlvbiAoX3JlZjMpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYzLmNvbmZpZyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYzLkJpZ051bWJlcjtcbiAgcmV0dXJuIGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInID8gKDAsIF9jb25zdGFudHMuY3JlYXRlQmlnTnVtYmVyUGkpKEJpZ051bWJlcikgOiBfbnVtYmVyLnBpO1xufSk7XG5leHBvcnRzLmNyZWF0ZVBpID0gY3JlYXRlUGk7XG52YXIgY3JlYXRlVGF1ID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCd0YXUnLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmNCkge1xuICB2YXIgY29uZmlnID0gX3JlZjQuY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZjQuQmlnTnVtYmVyO1xuICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyAoMCwgX2NvbnN0YW50cy5jcmVhdGVCaWdOdW1iZXJUYXUpKEJpZ051bWJlcikgOiBfbnVtYmVyLnRhdTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVUYXUgPSBjcmVhdGVUYXU7XG52YXIgY3JlYXRlRSA9IC8qICNfX1BVUkVfXyAqL3JlY3JlYXRlRmFjdG9yeSgnZScsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWY1KSB7XG4gIHZhciBjb25maWcgPSBfcmVmNS5jb25maWcsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmNS5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/ICgwLCBfY29uc3RhbnRzLmNyZWF0ZUJpZ051bWJlckUpKEJpZ051bWJlcikgOiBfbnVtYmVyLmU7XG59KTsgLy8gZ29sZGVuIHJhdGlvLCAoMStzcXJ0KDUpKS8yXG5cbmV4cG9ydHMuY3JlYXRlRSA9IGNyZWF0ZUU7XG52YXIgY3JlYXRlUGhpID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCdwaGknLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmNikge1xuICB2YXIgY29uZmlnID0gX3JlZjYuY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZjYuQmlnTnVtYmVyO1xuICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyAoMCwgX2NvbnN0YW50cy5jcmVhdGVCaWdOdW1iZXJQaGkpKEJpZ051bWJlcikgOiBfbnVtYmVyLnBoaTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVQaGkgPSBjcmVhdGVQaGk7XG52YXIgY3JlYXRlTE4yID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCdMTjInLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmNykge1xuICB2YXIgY29uZmlnID0gX3JlZjcuY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZjcuQmlnTnVtYmVyO1xuICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyBuZXcgQmlnTnVtYmVyKDIpLmxuKCkgOiBNYXRoLkxOMjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVMTjIgPSBjcmVhdGVMTjI7XG52YXIgY3JlYXRlTE4xMCA9IC8qICNfX1BVUkVfXyAqL3JlY3JlYXRlRmFjdG9yeSgnTE4xMCcsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWY4KSB7XG4gIHZhciBjb25maWcgPSBfcmVmOC5jb25maWcsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmOC5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoMTApLmxuKCkgOiBNYXRoLkxOMTA7XG59KTtcbmV4cG9ydHMuY3JlYXRlTE4xMCA9IGNyZWF0ZUxOMTA7XG52YXIgY3JlYXRlTE9HMkUgPSAvKiAjX19QVVJFX18gKi9yZWNyZWF0ZUZhY3RvcnkoJ0xPRzJFJywgWydjb25maWcnLCAnP0JpZ051bWJlciddLCBmdW5jdGlvbiAoX3JlZjkpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWY5LmNvbmZpZyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWY5LkJpZ051bWJlcjtcbiAgcmV0dXJuIGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInID8gbmV3IEJpZ051bWJlcigxKS5kaXYobmV3IEJpZ051bWJlcigyKS5sbigpKSA6IE1hdGguTE9HMkU7XG59KTtcbmV4cG9ydHMuY3JlYXRlTE9HMkUgPSBjcmVhdGVMT0cyRTtcbnZhciBjcmVhdGVMT0cxMEUgPSAvKiAjX19QVVJFX18gKi9yZWNyZWF0ZUZhY3RvcnkoJ0xPRzEwRScsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWYxMCkge1xuICB2YXIgY29uZmlnID0gX3JlZjEwLmNvbmZpZyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYxMC5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoMSkuZGl2KG5ldyBCaWdOdW1iZXIoMTApLmxuKCkpIDogTWF0aC5MT0cxMEU7XG59KTtcbmV4cG9ydHMuY3JlYXRlTE9HMTBFID0gY3JlYXRlTE9HMTBFO1xudmFyIGNyZWF0ZVNRUlQxXzIgPSAvKiAjX19QVVJFX18gKi9yZWNyZWF0ZUZhY3RvcnkoIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY2FtZWxjYXNlXG4nU1FSVDFfMicsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWYxMSkge1xuICB2YXIgY29uZmlnID0gX3JlZjExLmNvbmZpZyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYxMS5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoJzAuNScpLnNxcnQoKSA6IE1hdGguU1FSVDFfMjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTUVJUMV8yID0gY3JlYXRlU1FSVDFfMjtcbnZhciBjcmVhdGVTUVJUMiA9IC8qICNfX1BVUkVfXyAqL3JlY3JlYXRlRmFjdG9yeSgnU1FSVDInLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmMTIpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYxMi5jb25maWcsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmMTIuQmlnTnVtYmVyO1xuICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyBuZXcgQmlnTnVtYmVyKDIpLnNxcnQoKSA6IE1hdGguU1FSVDI7XG59KTtcbmV4cG9ydHMuY3JlYXRlU1FSVDIgPSBjcmVhdGVTUVJUMjtcbnZhciBjcmVhdGVJID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCdpJywgWydDb21wbGV4J10sIGZ1bmN0aW9uIChfcmVmMTMpIHtcbiAgdmFyIENvbXBsZXggPSBfcmVmMTMuQ29tcGxleDtcbiAgcmV0dXJuIENvbXBsZXguSTtcbn0pOyAvLyBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSB3aXRoIHY1XG5cbmV4cG9ydHMuY3JlYXRlSSA9IGNyZWF0ZUk7XG52YXIgY3JlYXRlVXBwZXJjYXNlUGkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkoJ1BJJywgWydwaSddLCBmdW5jdGlvbiAoX3JlZjE0KSB7XG4gIHZhciBwaSA9IF9yZWYxNC5waTtcbiAgcmV0dXJuIHBpO1xufSk7XG5leHBvcnRzLmNyZWF0ZVVwcGVyY2FzZVBpID0gY3JlYXRlVXBwZXJjYXNlUGk7XG52YXIgY3JlYXRlVXBwZXJjYXNlRSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KSgnRScsIFsnZSddLCBmdW5jdGlvbiAoX3JlZjE1KSB7XG4gIHZhciBlID0gX3JlZjE1LmU7XG4gIHJldHVybiBlO1xufSk7XG5leHBvcnRzLmNyZWF0ZVVwcGVyY2FzZUUgPSBjcmVhdGVVcHBlcmNhc2VFO1xudmFyIGNyZWF0ZVZlcnNpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkoJ3ZlcnNpb24nLCBbXSwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gX3ZlcnNpb24udmVyc2lvbjtcbn0pOyAvLyBoZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgZmFjdG9yeSB3aXRoIGEgZmxhZyByZWNyZWF0ZU9uQ29uZmlnQ2hhbmdlXG4vLyBpZGVhOiBhbGxvdyBwYXNzaW5nIG9wdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYXR0YWNoZWQgdG8gdGhlIGZhY3RvcnkgZnVuY3Rpb24gYXMgNHRoIGFyZ3VtZW50P1xuXG5leHBvcnRzLmNyZWF0ZVZlcnNpb24gPSBjcmVhdGVWZXJzaW9uO1xuXG5mdW5jdGlvbiByZWNyZWF0ZUZhY3RvcnkobmFtZSwgZGVwZW5kZW5jaWVzLCBjcmVhdGUpIHtcbiAgcmV0dXJuICgwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGNyZWF0ZSwge1xuICAgIHJlY3JlYXRlT25Db25maWdDaGFuZ2U6IHRydWVcbiAgfSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkRFRkFVTFRfQ09ORklHID0gdm9pZCAwO1xudmFyIERFRkFVTFRfQ09ORklHID0ge1xuICAvLyBtaW5pbXVtIHJlbGF0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gY29tcGFyZWQgdmFsdWVzLFxuICAvLyB1c2VkIGJ5IGFsbCBjb21wYXJpc29uIGZ1bmN0aW9uc1xuICBlcHNpbG9uOiAxZS0xMixcbiAgLy8gdHlwZSBvZiBkZWZhdWx0IG1hdHJpeCBvdXRwdXQuIENob29zZSAnbWF0cml4JyAoZGVmYXVsdCkgb3IgJ2FycmF5J1xuICBtYXRyaXg6ICdNYXRyaXgnLFxuICAvLyB0eXBlIG9mIGRlZmF1bHQgbnVtYmVyIG91dHB1dC4gQ2hvb3NlICdudW1iZXInIChkZWZhdWx0KSAnQmlnTnVtYmVyJywgb3IgJ0ZyYWN0aW9uXG4gIG51bWJlcjogJ251bWJlcicsXG4gIC8vIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgaW4gQmlnTnVtYmVyc1xuICBwcmVjaXNpb246IDY0LFxuICAvLyBwcmVkaWN0YWJsZSBvdXRwdXQgdHlwZSBvZiBmdW5jdGlvbnMuIFdoZW4gdHJ1ZSwgb3V0cHV0IHR5cGUgZGVwZW5kcyBvbmx5XG4gIC8vIG9uIHRoZSBpbnB1dCB0eXBlcy4gV2hlbiBmYWxzZSAoZGVmYXVsdCksIG91dHB1dCB0eXBlIGNhbiB2YXJ5IGRlcGVuZGluZ1xuICAvLyBvbiBpbnB1dCB2YWx1ZXMuIEZvciBleGFtcGxlIGBtYXRoLnNxcnQoLTQpYCByZXR1cm5zIGBjb21wbGV4KCcyaScpYCB3aGVuXG4gIC8vIHByZWRpY3RhYmxlIGlzIGZhbHNlLCBhbmQgcmV0dXJucyBgTmFOYCB3aGVuIHRydWUuXG4gIHByZWRpY3RhYmxlOiBmYWxzZSxcbiAgLy8gcmFuZG9tIHNlZWQgZm9yIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uXG4gIC8vIG51bGwgPSByYW5kb21seSBzZWVkXG4gIHJhbmRvbVNlZWQ6IG51bGxcbn07XG5leHBvcnRzLkRFRkFVTFRfQ09ORklHID0gREVGQVVMVF9DT05GSUc7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlID0gY3JlYXRlO1xuXG5yZXF1aXJlKFwiLi8uLi91dGlscy9wb2x5ZmlsbHNcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgZW1pdHRlciA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLy4uL3V0aWxzL2VtaXR0ZXJcIikpO1xuXG52YXIgX2ltcG9ydCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2ltcG9ydFwiKTtcblxudmFyIF9jb25maWcgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb25maWdcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2xvZyA9IHJlcXVpcmUoXCIuLi91dGlscy9sb2dcIik7XG5cbnZhciBfQXJndW1lbnRzRXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvQXJndW1lbnRzRXJyb3JcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBfSW5kZXhFcnJvciA9IHJlcXVpcmUoXCIuLi9lcnJvci9JbmRleEVycm9yXCIpO1xuXG52YXIgX2NvbmZpZzIgPSByZXF1aXJlKFwiLi9jb25maWdcIik7XG5cbmZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSgpIHsgaWYgKHR5cGVvZiBXZWFrTWFwICE9PSBcImZ1bmN0aW9uXCIpIHJldHVybiBudWxsOyB2YXIgY2FjaGUgPSBuZXcgV2Vha01hcCgpOyBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKSB7IHJldHVybiBjYWNoZTsgfTsgcmV0dXJuIGNhY2hlOyB9XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKG9iaikgeyBpZiAob2JqICYmIG9iai5fX2VzTW9kdWxlKSB7IHJldHVybiBvYmo7IH0gaWYgKG9iaiA9PT0gbnVsbCB8fCBfdHlwZW9mKG9iaikgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG9iaiAhPT0gXCJmdW5jdGlvblwiKSB7IHJldHVybiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfSB2YXIgY2FjaGUgPSBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKTsgaWYgKGNhY2hlICYmIGNhY2hlLmhhcyhvYmopKSB7IHJldHVybiBjYWNoZS5nZXQob2JqKTsgfSB2YXIgbmV3T2JqID0ge307IHZhciBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgJiYgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjsgZm9yICh2YXIga2V5IGluIG9iaikgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkgeyB2YXIgZGVzYyA9IGhhc1Byb3BlcnR5RGVzY3JpcHRvciA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBrZXkpIDogbnVsbDsgaWYgKGRlc2MgJiYgKGRlc2MuZ2V0IHx8IGRlc2Muc2V0KSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkobmV3T2JqLCBrZXksIGRlc2MpOyB9IGVsc2UgeyBuZXdPYmpba2V5XSA9IG9ialtrZXldOyB9IH0gfSBuZXdPYmpbXCJkZWZhdWx0XCJdID0gb2JqOyBpZiAoY2FjaGUpIHsgY2FjaGUuc2V0KG9iaiwgbmV3T2JqKTsgfSByZXR1cm4gbmV3T2JqOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbi8qKlxuICogQ3JlYXRlIGEgbWF0aGpzIGluc3RhbmNlIGZyb20gZ2l2ZW4gZmFjdG9yeSBmdW5jdGlvbnMgYW5kIG9wdGlvbmFsbHkgY29uZmlnXG4gKlxuICogVXNhZ2U6XG4gKlxuICogICAgIGNvbnN0IG1hdGhqczEgPSBjcmVhdGUoeyBjcmVhdGVBZGQsIGNyZWF0ZU11bHRpcGx5LCAuLi59KVxuICogICAgIGNvbnN0IGNvbmZpZyA9IHsgbnVtYmVyOiAnQmlnTnVtYmVyJyB9XG4gKiAgICAgY29uc3QgbWF0aGpzMiA9IGNyZWF0ZShhbGwsIGNvbmZpZylcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW2ZhY3Rvcmllc10gQW4gb2JqZWN0IHdpdGggZmFjdG9yeSBmdW5jdGlvbnNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IGNhbiBjb250YWluIG5lc3RlZCBvYmplY3RzLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbCBuZXN0ZWQgb2JqZWN0cyB3aWxsIGJlIGZsYXR0ZW5lZC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbY29uZmlnXSAgICBBdmFpbGFibGUgb3B0aW9uczpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IGVwc2lsb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluaW11bSByZWxhdGl2ZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVkIHZhbHVlcywgdXNlZCBieSBhbGwgY29tcGFyaXNvbiBmdW5jdGlvbnMuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBtYXRyaXhcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBzdHJpbmcgJ01hdHJpeCcgKGRlZmF1bHQpIG9yICdBcnJheScuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBudW1iZXJcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBzdHJpbmcgJ251bWJlcicgKGRlZmF1bHQpLCAnQmlnTnVtYmVyJywgb3IgJ0ZyYWN0aW9uJ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAge251bWJlcn0gcHJlY2lzaW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIGZvciBCaWdOdW1iZXJzLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3QgYXBwbGljYWJsZSBmb3IgTnVtYmVycy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtib29sZWFufSBwcmVkaWN0YWJsZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVkaWN0YWJsZSBvdXRwdXQgdHlwZSBvZiBmdW5jdGlvbnMuIFdoZW4gdHJ1ZSxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0IHR5cGUgZGVwZW5kcyBvbmx5IG9uIHRoZSBpbnB1dCB0eXBlcy4gV2hlblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSAoZGVmYXVsdCksIG91dHB1dCB0eXBlIGNhbiB2YXJ5IGRlcGVuZGluZ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiBpbnB1dCB2YWx1ZXMuIEZvciBleGFtcGxlIGBtYXRoLnNxcnQoLTQpYFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5zIGBjb21wbGV4KCcyaScpYCB3aGVuIHByZWRpY3RhYmxlIGlzIGZhbHNlLCBhbmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJucyBgTmFOYCB3aGVuIHRydWUuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSByYW5kb21TZWVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJhbmRvbSBzZWVkIGZvciBzZWVkZWQgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTZXQgdG8gbnVsbCB0byByYW5kb21seSBzZWVkLlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBhIGJhcmUtYm9uZSBtYXRoLmpzIGluc3RhbmNlIGNvbnRhaW5pbmdcbiAqICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uczpcbiAqICAgICAgICAgICAgICAgICAgIC0gYGltcG9ydGAgdG8gYWRkIG5ldyBmdW5jdGlvbnNcbiAqICAgICAgICAgICAgICAgICAgIC0gYGNvbmZpZ2AgdG8gY2hhbmdlIGNvbmZpZ3VyYXRpb25cbiAqICAgICAgICAgICAgICAgICAgIC0gYG9uYCwgYG9mZmAsIGBvbmNlYCwgYGVtaXRgIGZvciBldmVudHNcbiAqL1xuZnVuY3Rpb24gY3JlYXRlKGZhY3RvcmllcywgY29uZmlnKSB7XG4gIHZhciBjb25maWdJbnRlcm5hbCA9IF9leHRlbmRzKHt9LCBfY29uZmlnMi5ERUZBVUxUX0NPTkZJRywgY29uZmlnKTsgLy8gc2ltcGxlIHRlc3QgZm9yIEVTNSBzdXBwb3J0XG5cblxuICBpZiAodHlwZW9mIE9iamVjdC5jcmVhdGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0VTNSBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgSmF2YVNjcmlwdCBlbmdpbmUuICcgKyAnUGxlYXNlIGxvYWQgdGhlIGVzNS1zaGltIGFuZCBlczUtc2hhbSBsaWJyYXJ5IGZvciBjb21wYXRpYmlsaXR5LicpO1xuICB9IC8vIGNyZWF0ZSB0aGUgbWF0aGpzIGluc3RhbmNlXG5cblxuICB2YXIgbWF0aCA9IGVtaXR0ZXIubWl4aW4oe1xuICAgIC8vIG9ubHkgaGVyZSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBmb3IgbGVnYWN5IGZhY3RvcnkgZnVuY3Rpb25zXG4gICAgaXNOdW1iZXI6IF9pcy5pc051bWJlcixcbiAgICBpc0NvbXBsZXg6IF9pcy5pc0NvbXBsZXgsXG4gICAgaXNCaWdOdW1iZXI6IF9pcy5pc0JpZ051bWJlcixcbiAgICBpc0ZyYWN0aW9uOiBfaXMuaXNGcmFjdGlvbixcbiAgICBpc1VuaXQ6IF9pcy5pc1VuaXQsXG4gICAgaXNTdHJpbmc6IF9pcy5pc1N0cmluZyxcbiAgICBpc0FycmF5OiBfaXMuaXNBcnJheSxcbiAgICBpc01hdHJpeDogX2lzLmlzTWF0cml4LFxuICAgIGlzQ29sbGVjdGlvbjogX2lzLmlzQ29sbGVjdGlvbixcbiAgICBpc0RlbnNlTWF0cml4OiBfaXMuaXNEZW5zZU1hdHJpeCxcbiAgICBpc1NwYXJzZU1hdHJpeDogX2lzLmlzU3BhcnNlTWF0cml4LFxuICAgIGlzUmFuZ2U6IF9pcy5pc1JhbmdlLFxuICAgIGlzSW5kZXg6IF9pcy5pc0luZGV4LFxuICAgIGlzQm9vbGVhbjogX2lzLmlzQm9vbGVhbixcbiAgICBpc1Jlc3VsdFNldDogX2lzLmlzUmVzdWx0U2V0LFxuICAgIGlzSGVscDogX2lzLmlzSGVscCxcbiAgICBpc0Z1bmN0aW9uOiBfaXMuaXNGdW5jdGlvbixcbiAgICBpc0RhdGU6IF9pcy5pc0RhdGUsXG4gICAgaXNSZWdFeHA6IF9pcy5pc1JlZ0V4cCxcbiAgICBpc09iamVjdDogX2lzLmlzT2JqZWN0LFxuICAgIGlzTnVsbDogX2lzLmlzTnVsbCxcbiAgICBpc1VuZGVmaW5lZDogX2lzLmlzVW5kZWZpbmVkLFxuICAgIGlzQWNjZXNzb3JOb2RlOiBfaXMuaXNBY2Nlc3Nvck5vZGUsXG4gICAgaXNBcnJheU5vZGU6IF9pcy5pc0FycmF5Tm9kZSxcbiAgICBpc0Fzc2lnbm1lbnROb2RlOiBfaXMuaXNBc3NpZ25tZW50Tm9kZSxcbiAgICBpc0Jsb2NrTm9kZTogX2lzLmlzQmxvY2tOb2RlLFxuICAgIGlzQ29uZGl0aW9uYWxOb2RlOiBfaXMuaXNDb25kaXRpb25hbE5vZGUsXG4gICAgaXNDb25zdGFudE5vZGU6IF9pcy5pc0NvbnN0YW50Tm9kZSxcbiAgICBpc0Z1bmN0aW9uQXNzaWdubWVudE5vZGU6IF9pcy5pc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUsXG4gICAgaXNGdW5jdGlvbk5vZGU6IF9pcy5pc0Z1bmN0aW9uTm9kZSxcbiAgICBpc0luZGV4Tm9kZTogX2lzLmlzSW5kZXhOb2RlLFxuICAgIGlzTm9kZTogX2lzLmlzTm9kZSxcbiAgICBpc09iamVjdE5vZGU6IF9pcy5pc09iamVjdE5vZGUsXG4gICAgaXNPcGVyYXRvck5vZGU6IF9pcy5pc09wZXJhdG9yTm9kZSxcbiAgICBpc1BhcmVudGhlc2lzTm9kZTogX2lzLmlzUGFyZW50aGVzaXNOb2RlLFxuICAgIGlzUmFuZ2VOb2RlOiBfaXMuaXNSYW5nZU5vZGUsXG4gICAgaXNTeW1ib2xOb2RlOiBfaXMuaXNTeW1ib2xOb2RlLFxuICAgIGlzQ2hhaW46IF9pcy5pc0NoYWluXG4gIH0pOyAvLyBsb2FkIGNvbmZpZyBmdW5jdGlvbiBhbmQgYXBwbHkgcHJvdmlkZWQgY29uZmlnXG5cbiAgbWF0aC5jb25maWcgPSAoMCwgX2NvbmZpZy5jb25maWdGYWN0b3J5KShjb25maWdJbnRlcm5hbCwgbWF0aC5lbWl0KTtcbiAgbWF0aC5leHByZXNzaW9uID0ge1xuICAgIHRyYW5zZm9ybToge30sXG4gICAgbWF0aFdpdGhUcmFuc2Zvcm06IHtcbiAgICAgIGNvbmZpZzogbWF0aC5jb25maWdcbiAgICB9XG4gIH07IC8vIGNhY2hlZCBmYWN0b3JpZXMgYW5kIGluc3RhbmNlcyB1c2VkIGJ5IGZ1bmN0aW9uIGxvYWRcblxuICB2YXIgbGVnYWN5RmFjdG9yaWVzID0gW107XG4gIHZhciBsZWdhY3lJbnN0YW5jZXMgPSBbXTtcbiAgLyoqXG4gICAqIExvYWQgYSBmdW5jdGlvbiBvciBkYXRhIHR5cGUgZnJvbSBhIGZhY3RvcnkuXG4gICAqIElmIHRoZSBmdW5jdGlvbiBvciBkYXRhIHR5cGUgYWxyZWFkeSBleGlzdHMsIHRoZSBleGlzdGluZyBpbnN0YW5jZSBpc1xuICAgKiByZXR1cm5lZC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZmFjdG9yeVxuICAgKiBAcmV0dXJucyB7Kn1cbiAgICovXG5cbiAgZnVuY3Rpb24gbG9hZChmYWN0b3J5KSB7XG4gICAgaWYgKCgwLCBfZmFjdG9yeS5pc0ZhY3RvcnkpKGZhY3RvcnkpKSB7XG4gICAgICByZXR1cm4gZmFjdG9yeShtYXRoKTtcbiAgICB9XG5cbiAgICB2YXIgZmlyc3RQcm9wZXJ0eSA9IGZhY3RvcnlbT2JqZWN0LmtleXMoZmFjdG9yeSlbMF1dO1xuXG4gICAgaWYgKCgwLCBfZmFjdG9yeS5pc0ZhY3RvcnkpKGZpcnN0UHJvcGVydHkpKSB7XG4gICAgICByZXR1cm4gZmlyc3RQcm9wZXJ0eShtYXRoKTtcbiAgICB9XG5cbiAgICBpZiAoISgwLCBfb2JqZWN0LmlzTGVnYWN5RmFjdG9yeSkoZmFjdG9yeSkpIHtcbiAgICAgIGNvbnNvbGUud2FybignRmFjdG9yeSBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIGB0eXBlYCwgYG5hbWVgLCBhbmQgYGZhY3RvcnlgIGV4cGVjdGVkJywgZmFjdG9yeSk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhY3Rvcnkgb2JqZWN0IHdpdGggcHJvcGVydGllcyBgdHlwZWAsIGBuYW1lYCwgYW5kIGBmYWN0b3J5YCBleHBlY3RlZCcpO1xuICAgIH1cblxuICAgIHZhciBpbmRleCA9IGxlZ2FjeUZhY3Rvcmllcy5pbmRleE9mKGZhY3RvcnkpO1xuICAgIHZhciBpbnN0YW5jZTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIC8vIGRvZXNuJ3QgeWV0IGV4aXN0XG4gICAgICBpZiAoZmFjdG9yeS5tYXRoID09PSB0cnVlKSB7XG4gICAgICAgIC8vIHBhc3Mgd2l0aCBtYXRoIG5hbWVzcGFjZVxuICAgICAgICBpbnN0YW5jZSA9IGZhY3RvcnkuZmFjdG9yeShtYXRoLnR5cGUsIGNvbmZpZ0ludGVybmFsLCBsb2FkLCBtYXRoLnR5cGVkLCBtYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluc3RhbmNlID0gZmFjdG9yeS5mYWN0b3J5KG1hdGgudHlwZSwgY29uZmlnSW50ZXJuYWwsIGxvYWQsIG1hdGgudHlwZWQpO1xuICAgICAgfSAvLyBhcHBlbmQgdG8gdGhlIGNhY2hlXG5cblxuICAgICAgbGVnYWN5RmFjdG9yaWVzLnB1c2goZmFjdG9yeSk7XG4gICAgICBsZWdhY3lJbnN0YW5jZXMucHVzaChpbnN0YW5jZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGFscmVhZHkgZXhpc3RpbmcgZnVuY3Rpb24sIHJldHVybiB0aGUgY2FjaGVkIGluc3RhbmNlXG4gICAgICBpbnN0YW5jZSA9IGxlZ2FjeUluc3RhbmNlc1tpbmRleF07XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9XG5cbiAgdmFyIGltcG9ydGVkRmFjdG9yaWVzID0ge307IC8vIGxvYWQgdGhlIGltcG9ydCBmdW5jdGlvblxuXG4gIGZ1bmN0aW9uIGxhenlUeXBlZCgpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdGgudHlwZWQuYXBwbHkobWF0aC50eXBlZCwgYXJncyk7XG4gIH1cblxuICB2YXIgaW50ZXJuYWxJbXBvcnQgPSAoMCwgX2ltcG9ydC5pbXBvcnRGYWN0b3J5KShsYXp5VHlwZWQsIGxvYWQsIG1hdGgsIGltcG9ydGVkRmFjdG9yaWVzKTtcbiAgbWF0aFtcImltcG9ydFwiXSA9IGludGVybmFsSW1wb3J0OyAvLyBsaXN0ZW4gZm9yIGNoYW5nZXMgaW4gY29uZmlnLCBpbXBvcnQgYWxsIGZ1bmN0aW9ucyBhZ2FpbiB3aGVuIGNoYW5nZWRcbiAgLy8gVE9ETzogbW92ZSB0aGlzIGxpc3RlbmVyIGludG8gdGhlIGltcG9ydCBmdW5jdGlvbj9cblxuICBtYXRoLm9uKCdjb25maWcnLCBmdW5jdGlvbiAoKSB7XG4gICAgKDAsIF9vYmplY3QudmFsdWVzKShpbXBvcnRlZEZhY3RvcmllcykuZm9yRWFjaChmdW5jdGlvbiAoZmFjdG9yeSkge1xuICAgICAgaWYgKGZhY3RvcnkgJiYgZmFjdG9yeS5tZXRhICYmIGZhY3RvcnkubWV0YS5yZWNyZWF0ZU9uQ29uZmlnQ2hhbmdlKSB7XG4gICAgICAgIC8vIEZJWE1FOiBvbmx5IHJlLWNyZWF0ZSB3aGVuIHRoZSBjdXJyZW50IGluc3RhbmNlIGlzIHRoZSBzYW1lIGFzIHdhcyBpbml0aWFsbHkgY3JlYXRlZFxuICAgICAgICAvLyBGSVhNRTogZGVsZXRlIHRoZSBmdW5jdGlvbnMvY29uc3RhbnRzIGJlZm9yZSBpbXBvcnRpbmcgdGhlbSBhZ2Fpbj9cbiAgICAgICAgaW50ZXJuYWxJbXBvcnQoZmFjdG9yeSwge1xuICAgICAgICAgIG92ZXJyaWRlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTsgLy8gdGhlIGNyZWF0ZSBmdW5jdGlvbiBleHBvc2VkIG9uIHRoZSBtYXRoanMgaW5zdGFuY2UgaXMgYm91bmQgdG9cbiAgLy8gdGhlIGZhY3RvcnkgZnVuY3Rpb25zIHBhc3NlZCBiZWZvcmVcblxuICBtYXRoLmNyZWF0ZSA9IGNyZWF0ZS5iaW5kKG51bGwsIGZhY3Rvcmllcyk7IC8vIGV4cG9ydCBmYWN0b3J5IGZ1bmN0aW9uXG5cbiAgbWF0aC5mYWN0b3J5ID0gX2ZhY3RvcnkuZmFjdG9yeTsgLy8gaW1wb3J0IHRoZSBmYWN0b3J5IGZ1bmN0aW9ucyBsaWtlIGNyZWF0ZUFkZCBhcyBhbiBhcnJheSBpbnN0ZWFkIG9mIG9iamVjdCxcbiAgLy8gZWxzZSB0aGV5IHdpbGwgZ2V0IGEgZGlmZmVyZW50IG5hbWluZyAoYGNyZWF0ZUFkZGAgaW5zdGVhZCBvZiBgYWRkYCkuXG5cbiAgbWF0aFtcImltcG9ydFwiXSgoMCwgX29iamVjdC52YWx1ZXMpKCgwLCBfb2JqZWN0LmRlZXBGbGF0dGVuKShmYWN0b3JpZXMpKSk7IC8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdjYuMC4wLiBDbGVhbiB1cCBzb21lIGRheVxuXG4gIHZhciBtb3ZlZE5hbWVzID0gWyd0eXBlLmlzTnVtYmVyJywgJ3R5cGUuaXNDb21wbGV4JywgJ3R5cGUuaXNCaWdOdW1iZXInLCAndHlwZS5pc0ZyYWN0aW9uJywgJ3R5cGUuaXNVbml0JywgJ3R5cGUuaXNTdHJpbmcnLCAndHlwZS5pc0FycmF5JywgJ3R5cGUuaXNNYXRyaXgnLCAndHlwZS5pc0RlbnNlTWF0cml4JywgJ3R5cGUuaXNTcGFyc2VNYXRyaXgnLCAndHlwZS5pc0NvbGxlY3Rpb24nLCAndHlwZS5pc1JhbmdlJywgJ3R5cGUuaXNJbmRleCcsICd0eXBlLmlzQm9vbGVhbicsICd0eXBlLmlzUmVzdWx0U2V0JywgJ3R5cGUuaXNIZWxwJywgJ3R5cGUuaXNGdW5jdGlvbicsICd0eXBlLmlzRGF0ZScsICd0eXBlLmlzUmVnRXhwJywgJ3R5cGUuaXNPYmplY3QnLCAndHlwZS5pc051bGwnLCAndHlwZS5pc1VuZGVmaW5lZCcsICd0eXBlLmlzQWNjZXNzb3JOb2RlJywgJ3R5cGUuaXNBcnJheU5vZGUnLCAndHlwZS5pc0Fzc2lnbm1lbnROb2RlJywgJ3R5cGUuaXNCbG9ja05vZGUnLCAndHlwZS5pc0NvbmRpdGlvbmFsTm9kZScsICd0eXBlLmlzQ29uc3RhbnROb2RlJywgJ3R5cGUuaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlJywgJ3R5cGUuaXNGdW5jdGlvbk5vZGUnLCAndHlwZS5pc0luZGV4Tm9kZScsICd0eXBlLmlzTm9kZScsICd0eXBlLmlzT2JqZWN0Tm9kZScsICd0eXBlLmlzT3BlcmF0b3JOb2RlJywgJ3R5cGUuaXNQYXJlbnRoZXNpc05vZGUnLCAndHlwZS5pc1JhbmdlTm9kZScsICd0eXBlLmlzU3ltYm9sTm9kZScsICd0eXBlLmlzQ2hhaW4nLCAndHlwZS5CaWdOdW1iZXInLCAndHlwZS5DaGFpbicsICd0eXBlLkNvbXBsZXgnLCAndHlwZS5GcmFjdGlvbicsICd0eXBlLk1hdHJpeCcsICd0eXBlLkRlbnNlTWF0cml4JywgJ3R5cGUuU3BhcnNlTWF0cml4JywgJ3R5cGUuU3BhJywgJ3R5cGUuRmlib25hY2NpSGVhcCcsICd0eXBlLkltbXV0YWJsZURlbnNlTWF0cml4JywgJ3R5cGUuSW5kZXgnLCAndHlwZS5SYW5nZScsICd0eXBlLlJlc3VsdFNldCcsICd0eXBlLlVuaXQnLCAndHlwZS5IZWxwJywgJ3R5cGUuUGFyc2VyJywgJ2V4cHJlc3Npb24ucGFyc2UnLCAnZXhwcmVzc2lvbi5QYXJzZXInLCAnZXhwcmVzc2lvbi5ub2RlLkFjY2Vzc29yTm9kZScsICdleHByZXNzaW9uLm5vZGUuQXJyYXlOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5Bc3NpZ25tZW50Tm9kZScsICdleHByZXNzaW9uLm5vZGUuQmxvY2tOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5Db25kaXRpb25hbE5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLkNvbnN0YW50Tm9kZScsICdleHByZXNzaW9uLm5vZGUuSW5kZXhOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5GdW5jdGlvbkFzc2lnbm1lbnROb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5GdW5jdGlvbk5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLk5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLk9iamVjdE5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLk9wZXJhdG9yTm9kZScsICdleHByZXNzaW9uLm5vZGUuUGFyZW50aGVzaXNOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5SYW5nZU5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLlJlbGF0aW9uYWxOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5TeW1ib2xOb2RlJywgJ2pzb24ucmV2aXZlcicsICdlcnJvci5Bcmd1bWVudHNFcnJvcicsICdlcnJvci5EaW1lbnNpb25FcnJvcicsICdlcnJvci5JbmRleEVycm9yJ107XG4gIG1vdmVkTmFtZXMuZm9yRWFjaChmdW5jdGlvbiAoZnVsbE5hbWUpIHtcbiAgICB2YXIgcGFydHMgPSBmdWxsTmFtZS5zcGxpdCgnLicpO1xuICAgIHZhciBwYXRoID0gKDAsIF9hcnJheS5pbml0aWFsKShwYXJ0cyk7XG4gICAgdmFyIG5hbWUgPSAoMCwgX2FycmF5Lmxhc3QpKHBhcnRzKTtcbiAgICB2YXIgb2JqID0gKDAsIF9vYmplY3QudHJhdmVyc2UpKG1hdGgsIHBhdGgpO1xuICAgICgwLCBfb2JqZWN0LmxhenkpKG9iaiwgbmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgKDAsIF9sb2cud2Fybk9uY2UpKFwibWF0aC5cIi5jb25jYXQoZnVsbE5hbWUsIFwiIGlzIG1vdmVkIHRvIG1hdGguXCIpLmNvbmNhdChuYW1lLCBcIiBpbiB2Ni4wLjAuIFwiKSArICdQbGVhc2UgdXNlIHRoZSBuZXcgbG9jYXRpb24gaW5zdGVhZC4nKTtcbiAgICAgIHJldHVybiBtYXRoW25hbWVdO1xuICAgIH0pO1xuICB9KTtcbiAgKDAsIF9vYmplY3QubGF6eSkobWF0aC5leHByZXNzaW9uLCAnZG9jcycsIGZ1bmN0aW9uICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21hdGguZXhwcmVzc2lvbi5kb2NzIGhhcyBiZWVuIG1vdmVkLiAnICsgJ1BsZWFzZSBpbXBvcnQgdmlhIFwiaW1wb3J0IHsgZG9jcyB9IGZyb20gXFwnbWF0aGpzXFwnXCInKTtcbiAgfSk7XG4gIG1hdGguQXJndW1lbnRzRXJyb3IgPSBfQXJndW1lbnRzRXJyb3IuQXJndW1lbnRzRXJyb3I7XG4gIG1hdGguRGltZW5zaW9uRXJyb3IgPSBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3I7XG4gIG1hdGguSW5kZXhFcnJvciA9IF9JbmRleEVycm9yLkluZGV4RXJyb3I7XG4gIHJldHVybiBtYXRoO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb25maWdGYWN0b3J5ID0gY29uZmlnRmFjdG9yeTtcbmV4cG9ydHMuTlVNQkVSX09QVElPTlMgPSBleHBvcnRzLk1BVFJJWF9PUFRJT05TID0gdm9pZCAwO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfY29uZmlnMiA9IHJlcXVpcmUoXCIuLi9jb25maWdcIik7XG5cbnZhciBNQVRSSVhfT1BUSU9OUyA9IFsnTWF0cml4JywgJ0FycmF5J107IC8vIHZhbGlkIHZhbHVlcyBmb3Igb3B0aW9uIG1hdHJpeFxuXG5leHBvcnRzLk1BVFJJWF9PUFRJT05TID0gTUFUUklYX09QVElPTlM7XG52YXIgTlVNQkVSX09QVElPTlMgPSBbJ251bWJlcicsICdCaWdOdW1iZXInLCAnRnJhY3Rpb24nXTsgLy8gdmFsaWQgdmFsdWVzIGZvciBvcHRpb24gbnVtYmVyXG5cbmV4cG9ydHMuTlVNQkVSX09QVElPTlMgPSBOVU1CRVJfT1BUSU9OUztcblxuZnVuY3Rpb24gY29uZmlnRmFjdG9yeShjb25maWcsIGVtaXQpIHtcbiAgLyoqXG4gICAqIFNldCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIG1hdGguanMsIGFuZCBnZXQgY3VycmVudCBvcHRpb25zLlxuICAgKiBXaWxsIGVtaXQgYSAnY29uZmlnJyBldmVudCwgd2l0aCBhcmd1bWVudHMgKGN1cnIsIHByZXYsIGNoYW5nZXMpLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIG9uIGEgbWF0aGpzIGluc3RhbmNlIGNyZWF0ZWQgdXNpbmcgYGNyZWF0ZWAuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguY29uZmlnKGNvbmZpZzogT2JqZWN0KTogT2JqZWN0XG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKlxuICAgKiAgICAgaW1wb3J0IHsgY3JlYXRlLCBhbGwgfSBmcm9tICdtYXRoanMnXG4gICAqXG4gICAqICAgICAvLyBjcmVhdGUgYSBtYXRoanMgaW5zdGFuY2VcbiAgICogICAgIGNvbnN0IG1hdGggPSBjcmVhdGUoYWxsKVxuICAgKlxuICAgKiAgICAgbWF0aC5jb25maWcoKS5udW1iZXIgICAgICAgICAgICAgICAgLy8gb3V0cHV0cyAnbnVtYmVyJ1xuICAgKiAgICAgbWF0aC5ldmFsdWF0ZSgnMC40JykgICAgICAgICAgICAgICAgLy8gb3V0cHV0cyBudW1iZXIgMC40XG4gICAqICAgICBtYXRoLmNvbmZpZyh7bnVtYmVyOiAnRnJhY3Rpb24nfSlcbiAgICogICAgIG1hdGguZXZhbHVhdGUoJzAuNCcpICAgICAgICAgICAgICAgIC8vIG91dHB1dHMgRnJhY3Rpb24gMi81XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gQXZhaWxhYmxlIG9wdGlvbnM6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IGVwc2lsb25cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNaW5pbXVtIHJlbGF0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d29cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlZCB2YWx1ZXMsIHVzZWQgYnkgYWxsIGNvbXBhcmlzb24gZnVuY3Rpb25zLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBtYXRyaXhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIHN0cmluZyAnTWF0cml4JyAoZGVmYXVsdCkgb3IgJ0FycmF5Jy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gbnVtYmVyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBzdHJpbmcgJ251bWJlcicgKGRlZmF1bHQpLCAnQmlnTnVtYmVyJywgb3IgJ0ZyYWN0aW9uJ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bnVtYmVyfSBwcmVjaXNpb25cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBmb3IgQmlnTnVtYmVycy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOb3QgYXBwbGljYWJsZSBmb3IgTnVtYmVycy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gcGFyZW50aGVzaXNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIb3cgdG8gZGlzcGxheSBwYXJlbnRoZXNlcyBpbiBMYVRlWCBhbmQgc3RyaW5nXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0LlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSByYW5kb21TZWVkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmFuZG9tIHNlZWQgZm9yIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHRvIG51bGwgdG8gcmFuZG9tbHkgc2VlZC5cbiAgICogQHJldHVybiB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGZ1bmN0aW9uIF9jb25maWcob3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICB2YXIgcHJldiA9ICgwLCBfb2JqZWN0Lm1hcE9iamVjdCkoY29uZmlnLCBfb2JqZWN0LmNsb25lKTsgLy8gdmFsaWRhdGUgc29tZSBvZiB0aGUgb3B0aW9uc1xuXG4gICAgICB2YWxpZGF0ZU9wdGlvbihvcHRpb25zLCAnbWF0cml4JywgTUFUUklYX09QVElPTlMpO1xuICAgICAgdmFsaWRhdGVPcHRpb24ob3B0aW9ucywgJ251bWJlcicsIE5VTUJFUl9PUFRJT05TKTsgLy8gbWVyZ2Ugb3B0aW9uc1xuXG4gICAgICAoMCwgX29iamVjdC5kZWVwRXh0ZW5kKShjb25maWcsIG9wdGlvbnMpO1xuICAgICAgdmFyIGN1cnIgPSAoMCwgX29iamVjdC5tYXBPYmplY3QpKGNvbmZpZywgX29iamVjdC5jbG9uZSk7XG4gICAgICB2YXIgY2hhbmdlcyA9ICgwLCBfb2JqZWN0Lm1hcE9iamVjdCkob3B0aW9ucywgX29iamVjdC5jbG9uZSk7IC8vIGVtaXQgJ2NvbmZpZycgZXZlbnRcblxuICAgICAgZW1pdCgnY29uZmlnJywgY3VyciwgcHJldiwgY2hhbmdlcyk7XG4gICAgICByZXR1cm4gY3VycjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICgwLCBfb2JqZWN0Lm1hcE9iamVjdCkoY29uZmlnLCBfb2JqZWN0LmNsb25lKTtcbiAgICB9XG4gIH0gLy8gYXR0YWNoIHRoZSB2YWxpZCBvcHRpb25zIHRvIHRoZSBmdW5jdGlvbiBzbyB0aGV5IGNhbiBiZSBleHRlbmRlZFxuXG5cbiAgX2NvbmZpZy5NQVRSSVhfT1BUSU9OUyA9IE1BVFJJWF9PUFRJT05TO1xuICBfY29uZmlnLk5VTUJFUl9PUFRJT05TID0gTlVNQkVSX09QVElPTlM7IC8vIGF0dGFjaCB0aGUgY29uZmlnIHByb3BlcnRpZXMgYXMgcmVhZG9ubHkgcHJvcGVydGllcyB0byB0aGUgY29uZmlnIGZ1bmN0aW9uXG5cbiAgT2JqZWN0LmtleXMoX2NvbmZpZzIuREVGQVVMVF9DT05GSUcpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY29uZmlnLCBrZXksIHtcbiAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgICByZXR1cm4gY29uZmlnW2tleV07XG4gICAgICB9LFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIF9jb25maWc7XG59XG4vKipcbiAqIFRlc3Qgd2hldGhlciBhbiBBcnJheSBjb250YWlucyBhIHNwZWNpZmljIGl0ZW0uXG4gKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBhcnJheVxuICogQHBhcmFtIHtzdHJpbmd9IGl0ZW1cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cblxuXG5mdW5jdGlvbiBjb250YWlucyhhcnJheSwgaXRlbSkge1xuICByZXR1cm4gYXJyYXkuaW5kZXhPZihpdGVtKSAhPT0gLTE7XG59XG4vKipcbiAqIEZpbmQgYSBzdHJpbmcgaW4gYW4gYXJyYXkuIENhc2UgaW5zZW5zaXRpdmUgc2VhcmNoXG4gKiBAcGFyYW0ge0FycmF5LjxzdHJpbmc+fSBhcnJheVxuICogQHBhcmFtIHtzdHJpbmd9IGl0ZW1cbiAqIEByZXR1cm4ge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggd2hlbiBmb3VuZC4gUmV0dXJucyAtMSB3aGVuIG5vdCBmb3VuZFxuICovXG5cblxuZnVuY3Rpb24gZmluZEluZGV4KGFycmF5LCBpdGVtKSB7XG4gIHJldHVybiBhcnJheS5tYXAoZnVuY3Rpb24gKGkpIHtcbiAgICByZXR1cm4gaS50b0xvd2VyQ2FzZSgpO1xuICB9KS5pbmRleE9mKGl0ZW0udG9Mb3dlckNhc2UoKSk7XG59XG4vKipcbiAqIFZhbGlkYXRlIGFuIG9wdGlvblxuICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgICAgICAgICBPYmplY3Qgd2l0aCBvcHRpb25zXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgICAgICAgICAgIE5hbWUgb2YgdGhlIG9wdGlvbiB0byB2YWxpZGF0ZVxuICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gdmFsdWVzICBBcnJheSB3aXRoIHZhbGlkIHZhbHVlcyBmb3IgdGhpcyBvcHRpb25cbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlT3B0aW9uKG9wdGlvbnMsIG5hbWUsIHZhbHVlcykge1xuICBpZiAob3B0aW9uc1tuYW1lXSAhPT0gdW5kZWZpbmVkICYmICFjb250YWlucyh2YWx1ZXMsIG9wdGlvbnNbbmFtZV0pKSB7XG4gICAgdmFyIGluZGV4ID0gZmluZEluZGV4KHZhbHVlcywgb3B0aW9uc1tuYW1lXSk7XG5cbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAvLyByaWdodCB2YWx1ZSwgd3JvbmcgY2FzaW5nXG4gICAgICAvLyBUT0RPOiBsb3dlciBjYXNlIHZhbHVlcyBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2MywgcmVtb3ZlIHRoaXMgd2FybmluZyBzb21lIGRheS5cbiAgICAgIGNvbnNvbGUud2FybignV2FybmluZzogV3JvbmcgY2FzaW5nIGZvciBjb25maWd1cmF0aW9uIG9wdGlvbiBcIicgKyBuYW1lICsgJ1wiLCBzaG91bGQgYmUgXCInICsgdmFsdWVzW2luZGV4XSArICdcIiBpbnN0ZWFkIG9mIFwiJyArIG9wdGlvbnNbbmFtZV0gKyAnXCIuJyk7XG4gICAgICBvcHRpb25zW25hbWVdID0gdmFsdWVzW2luZGV4XTsgLy8gY2hhbmdlIHRoZSBvcHRpb24gdG8gdGhlIHJpZ2h0IGNhc2luZ1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1bmtub3duIHZhbHVlXG4gICAgICBjb25zb2xlLndhcm4oJ1dhcm5pbmc6IFVua25vd24gdmFsdWUgXCInICsgb3B0aW9uc1tuYW1lXSArICdcIiBmb3IgY29uZmlndXJhdGlvbiBvcHRpb24gXCInICsgbmFtZSArICdcIi4gQXZhaWxhYmxlIG9wdGlvbnM6ICcgKyB2YWx1ZXMubWFwKEpTT04uc3RyaW5naWZ5KS5qb2luKCcsICcpICsgJy4nKTtcbiAgICB9XG4gIH1cbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRGVwcmVjYXRlZEltcG9ydCA9IGNyZWF0ZURlcHJlY2F0ZWRJbXBvcnQ7XG5cbmZ1bmN0aW9uIGNyZWF0ZURlcHJlY2F0ZWRJbXBvcnQoKSB7XG4gIHJldHVybiBmdW5jdGlvbiBkZXByZWNhdGVkSW1wb3J0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGdsb2JhbCBpbXBvcnQgZnVuY3Rpb24gaXMgbm90IGF2YWlsYWJsZSBhbnltb3JlIGluIHY2LjAuMC4gXFxuJyArICdQbGVhc2UgY3JlYXRlIGEgbWF0aGpzIGluc3RhbmNlIGlmIHlvdSB3YW50IHRvIGltcG9ydCBmdW5jdGlvbnMuIFxcbicgKyAnRXhhbXBsZTpcXG4nICsgJ1xcbicgKyAnICBpbXBvcnQgeyBjcmVhdGUsIGFsbCB9IGZyb20gXFwnbWF0aGpzXFwnO1xcbicgKyAnICBjb25zdCBtYXRoanMgPSBjcmVhdGUoYWxsKTtcXG4nICsgJyAgbWF0aGpzLmltcG9ydCguLi4pO1xcbicpO1xuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pbXBvcnRGYWN0b3J5ID0gaW1wb3J0RmFjdG9yeTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9Bcmd1bWVudHNFcnJvciA9IHJlcXVpcmUoXCIuLi8uLi9lcnJvci9Bcmd1bWVudHNFcnJvclwiKTtcblxudmFyIF9sb2cgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbG9nXCIpO1xuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIGltcG9ydEZhY3RvcnkodHlwZWQsIGxvYWQsIG1hdGgsIGltcG9ydGVkRmFjdG9yaWVzKSB7XG4gIC8qKlxuICAgKiBJbXBvcnQgZnVuY3Rpb25zIGZyb20gYW4gb2JqZWN0IG9yIGEgbW9kdWxlLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIG9uIGEgbWF0aGpzIGluc3RhbmNlIGNyZWF0ZWQgdXNpbmcgYGNyZWF0ZWAuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5pbXBvcnQoZnVuY3Rpb25zKVxuICAgKiAgICBtYXRoLmltcG9ydChmdW5jdGlvbnMsIG9wdGlvbnMpXG4gICAqXG4gICAqIFdoZXJlOlxuICAgKlxuICAgKiAtIGBmdW5jdGlvbnM6IE9iamVjdGBcbiAgICogICBBbiBvYmplY3Qgd2l0aCBmdW5jdGlvbnMgb3IgZmFjdG9yaWVzIHRvIGJlIGltcG9ydGVkLlxuICAgKiAtIGBvcHRpb25zOiBPYmplY3RgIEFuIG9iamVjdCB3aXRoIGltcG9ydCBvcHRpb25zLiBBdmFpbGFibGUgb3B0aW9uczpcbiAgICogICAtIGBvdmVycmlkZTogYm9vbGVhbmBcbiAgICogICAgIElmIHRydWUsIGV4aXN0aW5nIGZ1bmN0aW9ucyB3aWxsIGJlIG92ZXJ3cml0dGVuLiBGYWxzZSBieSBkZWZhdWx0LlxuICAgKiAgIC0gYHNpbGVudDogYm9vbGVhbmBcbiAgICogICAgIElmIHRydWUsIHRoZSBmdW5jdGlvbiB3aWxsIG5vdCB0aHJvdyBlcnJvcnMgb24gZHVwbGljYXRlcyBvciBpbnZhbGlkXG4gICAqICAgICB0eXBlcy4gRmFsc2UgYnkgZGVmYXVsdC5cbiAgICogICAtIGB3cmFwOiBib29sZWFuYFxuICAgKiAgICAgSWYgdHJ1ZSwgdGhlIGZ1bmN0aW9ucyB3aWxsIGJlIHdyYXBwZWQgaW4gYSB3cmFwcGVyIGZ1bmN0aW9uXG4gICAqICAgICB3aGljaCBjb252ZXJ0cyBkYXRhIHR5cGVzIGxpa2UgTWF0cml4IHRvIHByaW1pdGl2ZSBkYXRhIHR5cGVzIGxpa2UgQXJyYXkuXG4gICAqICAgICBUaGUgd3JhcHBlciBpcyBuZWVkZWQgd2hlbiBleHRlbmRpbmcgbWF0aC5qcyB3aXRoIGxpYnJhcmllcyB3aGljaCBkbyBub3RcbiAgICogICAgIHN1cHBvcnQgdGhlc2UgZGF0YSB0eXBlLiBGYWxzZSBieSBkZWZhdWx0LlxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgaW1wb3J0IHsgY3JlYXRlLCBhbGwgfSBmcm9tICdtYXRoanMnXG4gICAqICAgIGltcG9ydCAqIGFzIG51bWJlcnMgZnJvbSAnbnVtYmVycydcbiAgICpcbiAgICogICAgLy8gY3JlYXRlIGEgbWF0aGpzIGluc3RhbmNlXG4gICAqICAgIGNvbnN0IG1hdGggPSBjcmVhdGUoYWxsKVxuICAgKlxuICAgKiAgICAvLyBkZWZpbmUgbmV3IGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzXG4gICAqICAgIG1hdGguaW1wb3J0KHtcbiAgICogICAgICBteXZhbHVlOiA0MixcbiAgICogICAgICBoZWxsbzogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICogICAgICAgIHJldHVybiAnaGVsbG8sICcgKyBuYW1lICsgJyEnXG4gICAqICAgICAgfVxuICAgKiAgICB9KVxuICAgKlxuICAgKiAgICAvLyB1c2UgdGhlIGltcG9ydGVkIGZ1bmN0aW9uIGFuZCB2YXJpYWJsZVxuICAgKiAgICBtYXRoLm15dmFsdWUgKiAyICAgICAgICAgICAgICAgLy8gODRcbiAgICogICAgbWF0aC5oZWxsbygndXNlcicpICAgICAgICAgICAgIC8vICdoZWxsbywgdXNlciEnXG4gICAqXG4gICAqICAgIC8vIGltcG9ydCB0aGUgbnBtIG1vZHVsZSAnbnVtYmVycydcbiAgICogICAgLy8gKG11c3QgYmUgaW5zdGFsbGVkIGZpcnN0IHdpdGggYG5wbSBpbnN0YWxsIG51bWJlcnNgKVxuICAgKiAgICBtYXRoLmltcG9ydChudW1iZXJzLCB7d3JhcDogdHJ1ZX0pXG4gICAqXG4gICAqICAgIG1hdGguZmlib25hY2NpKDcpIC8vIHJldHVybnMgMTNcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3QgfCBBcnJheX0gZnVuY3Rpb25zICBPYmplY3Qgd2l0aCBmdW5jdGlvbnMgdG8gYmUgaW1wb3J0ZWQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10gICAgICAgICAgSW1wb3J0IG9wdGlvbnMuXG4gICAqL1xuICBmdW5jdGlvbiBtYXRoSW1wb3J0KGZ1bmN0aW9ucywgb3B0aW9ucykge1xuICAgIHZhciBudW0gPSBhcmd1bWVudHMubGVuZ3RoO1xuXG4gICAgaWYgKG51bSAhPT0gMSAmJiBudW0gIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBfQXJndW1lbnRzRXJyb3IuQXJndW1lbnRzRXJyb3IoJ2ltcG9ydCcsIG51bSwgMSwgMik7XG4gICAgfVxuXG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICBvcHRpb25zID0ge307XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmxhdHRlbkltcG9ydHMoZmxhdFZhbHVlcywgdmFsdWUsIG5hbWUpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5pc0xlZ2FjeUZhY3RvcnkpKHZhbHVlKSkge1xuICAgICAgICAvLyBsZWdhY3kgZmFjdG9yaWVzIGRvbid0IGFsd2F5cyBoYXZlIGEgbmFtZSxcbiAgICAgICAgLy8gbGV0J3Mgbm90IGhhbmRsZSB0aGVtIHZpYSB0aGUgbmV3IGZsYXRWYWx1ZXNcbiAgICAgICAgX2ltcG9ydExlZ2FjeUZhY3RvcnkodmFsdWUsIG9wdGlvbnMpO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICB2YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGZsYXR0ZW5JbXBvcnRzKGZsYXRWYWx1ZXMsIGl0ZW0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvciAodmFyIF9uYW1lIGluIHZhbHVlKSB7XG4gICAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KSh2YWx1ZSwgX25hbWUpKSB7XG4gICAgICAgICAgICBmbGF0dGVuSW1wb3J0cyhmbGF0VmFsdWVzLCB2YWx1ZVtfbmFtZV0sIF9uYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoKDAsIF9mYWN0b3J5LmlzRmFjdG9yeSkodmFsdWUpIHx8IG5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YXIgZmxhdE5hbWUgPSAoMCwgX2ZhY3RvcnkuaXNGYWN0b3J5KSh2YWx1ZSkgPyBpc1RyYW5zZm9ybUZ1bmN0aW9uRmFjdG9yeSh2YWx1ZSkgPyB2YWx1ZS5mbiArICcudHJhbnNmb3JtJyA6IC8vIFRPRE86IHRoaXMgaXMgdWdseVxuICAgICAgICB2YWx1ZS5mbiA6IG5hbWU7IC8vIHdlIGFsbG93IGltcG9ydGluZyB0aGUgc2FtZSBmdW5jdGlvbiB0d2ljZSBpZiBpdCBwb2ludHMgdG8gdGhlIHNhbWUgaW1wbGVtZW50YXRpb25cblxuICAgICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKGZsYXRWYWx1ZXMsIGZsYXROYW1lKSAmJiBmbGF0VmFsdWVzW2ZsYXROYW1lXSAhPT0gdmFsdWUgJiYgIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW1wb3J0IFwiJyArIGZsYXROYW1lICsgJ1wiIHR3aWNlJyk7XG4gICAgICAgIH1cblxuICAgICAgICBmbGF0VmFsdWVzW2ZsYXROYW1lXSA9IHZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZhY3RvcnksIE9iamVjdCwgb3IgQXJyYXkgZXhwZWN0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBmbGF0VmFsdWVzID0ge307XG4gICAgZmxhdHRlbkltcG9ydHMoZmxhdFZhbHVlcywgZnVuY3Rpb25zKTtcblxuICAgIGZvciAodmFyIG5hbWUgaW4gZmxhdFZhbHVlcykge1xuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShmbGF0VmFsdWVzLCBuYW1lKSkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnaW1wb3J0JywgbmFtZSlcbiAgICAgICAgdmFyIHZhbHVlID0gZmxhdFZhbHVlc1tuYW1lXTtcblxuICAgICAgICBpZiAoKDAsIF9mYWN0b3J5LmlzRmFjdG9yeSkodmFsdWUpKSB7XG4gICAgICAgICAgLy8gd2UgaWdub3JlIG5hbWUgaGVyZSBhbmQgZW5mb3JjZSB0aGUgbmFtZSBvZiB0aGUgZmFjdG9yeVxuICAgICAgICAgIC8vIG1heWJlIGF0IHNvbWUgcG9pbnQgd2UgZG8gd2FudCB0byBhbGxvdyBvdmVycmlkaW5nIGl0XG4gICAgICAgICAgLy8gaW4gdGhhdCBjYXNlIHdlIGNhbiBpbXBsZW1lbnQgYW4gb3B0aW9uIG92ZXJyaWRlRmFjdG9yeU5hbWVzOiB0cnVlXG4gICAgICAgICAgX2ltcG9ydEZhY3RvcnkodmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzU3VwcG9ydGVkVHlwZSh2YWx1ZSkpIHtcbiAgICAgICAgICBfaW1wb3J0KG5hbWUsIHZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGYWN0b3J5LCBPYmplY3QsIG9yIEFycmF5IGV4cGVjdGVkJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBBZGQgYSBwcm9wZXJ0eSB0byB0aGUgbWF0aCBuYW1lc3BhY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAgU2VlIGltcG9ydCBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgb3B0aW9uc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9pbXBvcnQobmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgICAvLyBUT0RPOiByZWZhY3RvciB0aGlzIGZ1bmN0aW9uLCBpdCdzIHRvIGNvbXBsaWNhdGVkIGFuZCBjb250YWlucyBkdXBsaWNhdGUgY29kZVxuICAgIGlmIChvcHRpb25zLndyYXAgJiYgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBjcmVhdGUgYSB3cmFwcGVyIGFyb3VuZCB0aGUgZnVuY3Rpb25cbiAgICAgIHZhbHVlID0gX3dyYXAodmFsdWUpO1xuICAgIH0gLy8gdHVybiBhIHBsYWluIGZ1bmN0aW9uIHdpdGggYSB0eXBlZC1mdW5jdGlvbiBzaWduYXR1cmUgaW50byBhIHR5cGVkLWZ1bmN0aW9uXG5cblxuICAgIGlmIChoYXNUeXBlZEZ1bmN0aW9uU2lnbmF0dXJlKHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB0eXBlZChuYW1lLCBfZGVmaW5lUHJvcGVydHkoe30sIHZhbHVlLnNpZ25hdHVyZSwgdmFsdWUpKTtcbiAgICB9XG5cbiAgICBpZiAoaXNUeXBlZEZ1bmN0aW9uKG1hdGhbbmFtZV0pICYmIGlzVHlwZWRGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgIGlmIChvcHRpb25zLm92ZXJyaWRlKSB7XG4gICAgICAgIC8vIGdpdmUgdGhlIHR5cGVkIGZ1bmN0aW9uIHRoZSByaWdodCBuYW1lXG4gICAgICAgIHZhbHVlID0gdHlwZWQobmFtZSwgdmFsdWUuc2lnbmF0dXJlcyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBtZXJnZSB0aGUgZXhpc3RpbmcgYW5kIHR5cGVkIGZ1bmN0aW9uXG4gICAgICAgIHZhbHVlID0gdHlwZWQobWF0aFtuYW1lXSwgdmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBtYXRoW25hbWVdID0gdmFsdWU7XG4gICAgICBkZWxldGUgaW1wb3J0ZWRGYWN0b3JpZXNbbmFtZV07XG5cbiAgICAgIF9pbXBvcnRUcmFuc2Zvcm0obmFtZSwgdmFsdWUpO1xuXG4gICAgICBtYXRoLmVtaXQoJ2ltcG9ydCcsIG5hbWUsIGZ1bmN0aW9uIHJlc29sdmVyKCkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAobWF0aFtuYW1lXSA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMub3ZlcnJpZGUpIHtcbiAgICAgIG1hdGhbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIGRlbGV0ZSBpbXBvcnRlZEZhY3Rvcmllc1tuYW1lXTtcblxuICAgICAgX2ltcG9ydFRyYW5zZm9ybShuYW1lLCB2YWx1ZSk7XG5cbiAgICAgIG1hdGguZW1pdCgnaW1wb3J0JywgbmFtZSwgZnVuY3Rpb24gcmVzb2x2ZXIoKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGltcG9ydCBcIicgKyBuYW1lICsgJ1wiOiBhbHJlYWR5IGV4aXN0cycpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF9pbXBvcnRUcmFuc2Zvcm0obmFtZSwgdmFsdWUpIHtcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbWF0aC5leHByZXNzaW9uLnRyYW5zZm9ybVtuYW1lXSA9IHZhbHVlLnRyYW5zZm9ybTtcblxuICAgICAgaWYgKGFsbG93ZWRJbkV4cHJlc3Npb25zKG5hbWUpKSB7XG4gICAgICAgIG1hdGguZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybVtuYW1lXSA9IHZhbHVlLnRyYW5zZm9ybTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmVtb3ZlIGV4aXN0aW5nIHRyYW5zZm9ybVxuICAgICAgZGVsZXRlIG1hdGguZXhwcmVzc2lvbi50cmFuc2Zvcm1bbmFtZV07XG5cbiAgICAgIGlmIChhbGxvd2VkSW5FeHByZXNzaW9ucyhuYW1lKSkge1xuICAgICAgICBtYXRoLmV4cHJlc3Npb24ubWF0aFdpdGhUcmFuc2Zvcm1bbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBfZGVsZXRlVHJhbnNmb3JtKG5hbWUpIHtcbiAgICBkZWxldGUgbWF0aC5leHByZXNzaW9uLnRyYW5zZm9ybVtuYW1lXTtcblxuICAgIGlmIChhbGxvd2VkSW5FeHByZXNzaW9ucyhuYW1lKSkge1xuICAgICAgbWF0aC5leHByZXNzaW9uLm1hdGhXaXRoVHJhbnNmb3JtW25hbWVdID0gbWF0aFtuYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIG1hdGguZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybVtuYW1lXTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHdyYXBwZXIgYSByb3VuZCBhbiBmdW5jdGlvbiB3aGljaCBjb252ZXJ0cyB0aGUgYXJndW1lbnRzXG4gICAqIHRvIHRoZWlyIHByaW1pdGl2ZSB2YWx1ZXMgKGxpa2UgY29udmVydCBhIE1hdHJpeCB0byBBcnJheSlcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAgICogQHJldHVybiB7RnVuY3Rpb259IFJldHVybnMgdGhlIHdyYXBwZWQgZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfd3JhcChmbikge1xuICAgIHZhciB3cmFwcGVyID0gZnVuY3Rpb24gd3JhcHBlcigpIHtcbiAgICAgIHZhciBhcmdzID0gW107XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgdmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgYXJnc1tpXSA9IGFyZyAmJiBhcmcudmFsdWVPZigpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm4uYXBwbHkobWF0aCwgYXJncyk7XG4gICAgfTtcblxuICAgIGlmIChmbi50cmFuc2Zvcm0pIHtcbiAgICAgIHdyYXBwZXIudHJhbnNmb3JtID0gZm4udHJhbnNmb3JtO1xuICAgIH1cblxuICAgIHJldHVybiB3cmFwcGVyO1xuICB9XG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gaW5zdGFuY2Ugb2YgYSBmYWN0b3J5IGludG8gbWF0aC5qc1xuICAgKiBAcGFyYW0ge3tmYWN0b3J5OiBGdW5jdGlvbiwgbmFtZTogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIG1hdGg6IGJvb2xlYW59fSBmYWN0b3J5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zICBTZWUgaW1wb3J0IGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBvcHRpb25zXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICAvLyBUT0RPOiBfaW1wb3J0TGVnYWN5RmFjdG9yeSBpcyBkZXByZWNhdGVkIHNpbmNlIHY2LjAuMCwgY2xlYW4gdXAgc29tZSBkYXlcblxuXG4gIGZ1bmN0aW9uIF9pbXBvcnRMZWdhY3lGYWN0b3J5KGZhY3RvcnksIG9wdGlvbnMpIHtcbiAgICAoMCwgX2xvZy53YXJuT25jZSkoJ0ZhY3RvcmllcyBvZiB0eXBlIHsgbmFtZSwgZmFjdG9yeSB9IGFyZSBkZXByZWNhdGVkIHNpbmNlIHY2LiAnICsgJ1BsZWFzZSBjcmVhdGUgeW91ciBmYWN0b3J5IGZ1bmN0aW9ucyB1c2luZyB0aGUgbWF0aC5mYWN0b3J5IGZ1bmN0aW9uLicpO1xuXG4gICAgaWYgKHR5cGVvZiBmYWN0b3J5Lm5hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YXIgbmFtZSA9IGZhY3RvcnkubmFtZTtcbiAgICAgIHZhciBleGlzdGluZ1RyYW5zZm9ybSA9IChuYW1lIGluIG1hdGguZXhwcmVzc2lvbi50cmFuc2Zvcm0pO1xuICAgICAgdmFyIG5hbWVzcGFjZSA9IGZhY3RvcnkucGF0aCA/ICgwLCBfb2JqZWN0LnRyYXZlcnNlKShtYXRoLCBmYWN0b3J5LnBhdGgpIDogbWF0aDtcbiAgICAgIHZhciBleGlzdGluZyA9ICgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShuYW1lc3BhY2UsIG5hbWUpID8gbmFtZXNwYWNlW25hbWVdIDogdW5kZWZpbmVkO1xuXG4gICAgICB2YXIgcmVzb2x2ZXIgPSBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gbG9hZChmYWN0b3J5KTtcblxuICAgICAgICBpZiAoaW5zdGFuY2UgJiYgdHlwZW9mIGluc3RhbmNlLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVHJhbnNmb3JtcyBjYW5ub3QgYmUgYXR0YWNoZWQgdG8gZmFjdG9yeSBmdW5jdGlvbnMuICcgKyAnUGxlYXNlIGNyZWF0ZSBhIHNlcGFyYXRlIGZ1bmN0aW9uIGZvciBpdCB3aXRoIGV4cG9ydHMucGF0aD1cImV4cHJlc3Npb24udHJhbnNmb3JtXCInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1R5cGVkRnVuY3Rpb24oZXhpc3RpbmcpICYmIGlzVHlwZWRGdW5jdGlvbihpbnN0YW5jZSkpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy5vdmVycmlkZSkgey8vIHJlcGxhY2UgdGhlIGV4aXN0aW5nIHR5cGVkIGZ1bmN0aW9uIChub3RoaW5nIHRvIGRvKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBtZXJnZSB0aGUgZXhpc3RpbmcgYW5kIG5ldyB0eXBlZCBmdW5jdGlvblxuICAgICAgICAgICAgaW5zdGFuY2UgPSB0eXBlZChleGlzdGluZywgaW5zdGFuY2UpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMub3ZlcnJpZGUpIHtcbiAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW1wb3J0IFwiJyArIG5hbWUgKyAnXCI6IGFscmVhZHkgZXhpc3RzJyk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmIChmYWN0b3J5LmxhenkgIT09IGZhbHNlKSB7XG4gICAgICAgICgwLCBfb2JqZWN0LmxhenkpKG5hbWVzcGFjZSwgbmFtZSwgcmVzb2x2ZXIpO1xuXG4gICAgICAgIGlmIChleGlzdGluZ1RyYW5zZm9ybSkge1xuICAgICAgICAgIF9kZWxldGVUcmFuc2Zvcm0obmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGZhY3RvcnkucGF0aCA9PT0gJ2V4cHJlc3Npb24udHJhbnNmb3JtJyB8fCBsZWdhY3lGYWN0b3J5QWxsb3dlZEluRXhwcmVzc2lvbnMoZmFjdG9yeSkpIHtcbiAgICAgICAgICAgICgwLCBfb2JqZWN0LmxhenkpKG1hdGguZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybSwgbmFtZSwgcmVzb2x2ZXIpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmFtZXNwYWNlW25hbWVdID0gcmVzb2x2ZXIoKTtcblxuICAgICAgICBpZiAoZXhpc3RpbmdUcmFuc2Zvcm0pIHtcbiAgICAgICAgICBfZGVsZXRlVHJhbnNmb3JtKG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChmYWN0b3J5LnBhdGggPT09ICdleHByZXNzaW9uLnRyYW5zZm9ybScgfHwgbGVnYWN5RmFjdG9yeUFsbG93ZWRJbkV4cHJlc3Npb25zKGZhY3RvcnkpKSB7XG4gICAgICAgICAgICBtYXRoLmV4cHJlc3Npb24ubWF0aFdpdGhUcmFuc2Zvcm1bbmFtZV0gPSByZXNvbHZlcigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIga2V5ID0gZmFjdG9yeS5wYXRoID8gZmFjdG9yeS5wYXRoICsgJy4nICsgZmFjdG9yeS5uYW1lIDogZmFjdG9yeS5uYW1lO1xuICAgICAgaW1wb3J0ZWRGYWN0b3JpZXNba2V5XSA9IGZhY3Rvcnk7XG4gICAgICBtYXRoLmVtaXQoJ2ltcG9ydCcsIG5hbWUsIHJlc29sdmVyLCBmYWN0b3J5LnBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1bm5hbWVkIGZhY3RvcnkuXG4gICAgICAvLyBubyBsYXp5IGxvYWRpbmdcbiAgICAgIGxvYWQoZmFjdG9yeSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBJbXBvcnQgYW4gaW5zdGFuY2Ugb2YgYSBmYWN0b3J5IGludG8gbWF0aC5qc1xuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKHNjb3BlOiBvYmplY3QpfSBmYWN0b3J5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zICBTZWUgaW1wb3J0IGZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZT1mYWN0b3J5Lm5hbWVdIE9wdGlvbmFsIGN1c3RvbSBuYW1lXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2ltcG9ydEZhY3RvcnkoZmFjdG9yeSwgb3B0aW9ucykge1xuICAgIHZhciBuYW1lID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMl0gOiBmYWN0b3J5LmZuO1xuXG4gICAgaWYgKCgwLCBfYXJyYXkuY29udGFpbnMpKG5hbWUsICcuJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFjdG9yeSBuYW1lIHNob3VsZCBub3QgY29udGFpbiBhIG5lc3RlZCBwYXRoLiAnICsgJ05hbWU6ICcgKyBKU09OLnN0cmluZ2lmeShuYW1lKSk7XG4gICAgfVxuXG4gICAgdmFyIG5hbWVzcGFjZSA9IGlzVHJhbnNmb3JtRnVuY3Rpb25GYWN0b3J5KGZhY3RvcnkpID8gbWF0aC5leHByZXNzaW9uLnRyYW5zZm9ybSA6IG1hdGg7XG4gICAgdmFyIGV4aXN0aW5nVHJhbnNmb3JtID0gKG5hbWUgaW4gbWF0aC5leHByZXNzaW9uLnRyYW5zZm9ybSk7XG4gICAgdmFyIGV4aXN0aW5nID0gKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG5hbWVzcGFjZSwgbmFtZSkgPyBuYW1lc3BhY2VbbmFtZV0gOiB1bmRlZmluZWQ7XG5cbiAgICB2YXIgcmVzb2x2ZXIgPSBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgIC8vIGNvbGxlY3QgYWxsIGRlcGVuZGVuY2llcywgaGFuZGxlIGZpbmRpbmcgYm90aCBmdW5jdGlvbnMgYW5kIGNsYXNzZXMgYW5kIG90aGVyIHNwZWNpYWwgY2FzZXNcbiAgICAgIHZhciBkZXBlbmRlbmNpZXMgPSB7fTtcbiAgICAgIGZhY3RvcnkuZGVwZW5kZW5jaWVzLm1hcChfZmFjdG9yeS5zdHJpcE9wdGlvbmFsTm90YXRpb24pLmZvckVhY2goZnVuY3Rpb24gKGRlcGVuZGVuY3kpIHtcbiAgICAgICAgaWYgKCgwLCBfYXJyYXkuY29udGFpbnMpKGRlcGVuZGVuY3ksICcuJykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhY3RvcnkgZGVwZW5kZW5jeSBzaG91bGQgbm90IGNvbnRhaW4gYSBuZXN0ZWQgcGF0aC4gJyArICdOYW1lOiAnICsgSlNPTi5zdHJpbmdpZnkoZGVwZW5kZW5jeSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRlcGVuZGVuY3kgPT09ICdtYXRoJykge1xuICAgICAgICAgIGRlcGVuZGVuY2llcy5tYXRoID0gbWF0aDtcbiAgICAgICAgfSBlbHNlIGlmIChkZXBlbmRlbmN5ID09PSAnbWF0aFdpdGhUcmFuc2Zvcm0nKSB7XG4gICAgICAgICAgZGVwZW5kZW5jaWVzLm1hdGhXaXRoVHJhbnNmb3JtID0gbWF0aC5leHByZXNzaW9uLm1hdGhXaXRoVHJhbnNmb3JtO1xuICAgICAgICB9IGVsc2UgaWYgKGRlcGVuZGVuY3kgPT09ICdjbGFzc2VzJykge1xuICAgICAgICAgIC8vIHNwZWNpYWwgY2FzZSBmb3IganNvbiByZXZpdmVyXG4gICAgICAgICAgZGVwZW5kZW5jaWVzLmNsYXNzZXMgPSBtYXRoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRlcGVuZGVuY2llc1tkZXBlbmRlbmN5XSA9IG1hdGhbZGVwZW5kZW5jeV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdmFyIGluc3RhbmNlID0gLyogI19fUFVSRV9fICovZmFjdG9yeShkZXBlbmRlbmNpZXMpO1xuXG4gICAgICBpZiAoaW5zdGFuY2UgJiYgdHlwZW9mIGluc3RhbmNlLnRyYW5zZm9ybSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zZm9ybXMgY2Fubm90IGJlIGF0dGFjaGVkIHRvIGZhY3RvcnkgZnVuY3Rpb25zLiAnICsgJ1BsZWFzZSBjcmVhdGUgYSBzZXBhcmF0ZSBmdW5jdGlvbiBmb3IgaXQgd2l0aCBleHBvcnRzLnBhdGg9XCJleHByZXNzaW9uLnRyYW5zZm9ybVwiJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMub3ZlcnJpZGUpIHtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNUeXBlZEZ1bmN0aW9uKGV4aXN0aW5nKSAmJiBpc1R5cGVkRnVuY3Rpb24oaW5zdGFuY2UpKSB7XG4gICAgICAgIC8vIG1lcmdlIHRoZSBleGlzdGluZyBhbmQgbmV3IHR5cGVkIGZ1bmN0aW9uXG4gICAgICAgIHJldHVybiB0eXBlZChleGlzdGluZywgaW5zdGFuY2UpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgLy8ga2VlcCBleGlzdGluZywgaWdub3JlIGltcG9ydGVkIGZ1bmN0aW9uXG4gICAgICAgIHJldHVybiBleGlzdGluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGltcG9ydCBcIicgKyBuYW1lICsgJ1wiOiBhbHJlYWR5IGV4aXN0cycpO1xuICAgICAgfVxuICAgIH07IC8vIFRPRE86IGFkZCB1bml0IHRlc3Qgd2l0aCBub24tbGF6eSBmYWN0b3J5XG5cblxuICAgIGlmICghZmFjdG9yeS5tZXRhIHx8IGZhY3RvcnkubWV0YS5sYXp5ICE9PSBmYWxzZSkge1xuICAgICAgKDAsIF9vYmplY3QubGF6eSkobmFtZXNwYWNlLCBuYW1lLCByZXNvbHZlcik7IC8vIEZJWE1FOiByZW1vdmUgdGhlIGBpZiAoZXhpc3RpbmcgJiZgIGNvbmRpdGlvbiBhZ2Fpbi4gQ2FuIHdlIG1ha2Ugc3VyZSBzdWJzZXQgaXMgbG9hZGVkIGJlZm9yZSBzdWJzZXQudHJhbnNmb3JtPyAoTmFtZSBjb2xsaXNpb24sIGFuZCBubyBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGUgdHdvKVxuXG4gICAgICBpZiAoZXhpc3RpbmcgJiYgZXhpc3RpbmdUcmFuc2Zvcm0pIHtcbiAgICAgICAgX2RlbGV0ZVRyYW5zZm9ybShuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1RyYW5zZm9ybUZ1bmN0aW9uRmFjdG9yeShmYWN0b3J5KSB8fCBmYWN0b3J5QWxsb3dlZEluRXhwcmVzc2lvbnMoZmFjdG9yeSkpIHtcbiAgICAgICAgICAoMCwgX29iamVjdC5sYXp5KShtYXRoLmV4cHJlc3Npb24ubWF0aFdpdGhUcmFuc2Zvcm0sIG5hbWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lc3BhY2VbbmFtZV07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmFtZXNwYWNlW25hbWVdID0gcmVzb2x2ZXIoKTsgLy8gRklYTUU6IHJlbW92ZSB0aGUgYGlmIChleGlzdGluZyAmJmAgY29uZGl0aW9uIGFnYWluLiBDYW4gd2UgbWFrZSBzdXJlIHN1YnNldCBpcyBsb2FkZWQgYmVmb3JlIHN1YnNldC50cmFuc2Zvcm0/IChOYW1lIGNvbGxpc2lvbiwgYW5kIG5vIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRoZSB0d28pXG5cbiAgICAgIGlmIChleGlzdGluZyAmJiBleGlzdGluZ1RyYW5zZm9ybSkge1xuICAgICAgICBfZGVsZXRlVHJhbnNmb3JtKG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGlzVHJhbnNmb3JtRnVuY3Rpb25GYWN0b3J5KGZhY3RvcnkpIHx8IGZhY3RvcnlBbGxvd2VkSW5FeHByZXNzaW9ucyhmYWN0b3J5KSkge1xuICAgICAgICAgICgwLCBfb2JqZWN0LmxhenkpKG1hdGguZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybSwgbmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5hbWVzcGFjZVtuYW1lXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gVE9ETzogaW1wcm92ZSBmYWN0b3JpZXMsIHN0b3JlIGEgbGlzdCB3aXRoIGltcG9ydHMgaW5zdGVhZCB3aGljaCBjYW4gYmUgcmUtcGxheWVkXG5cblxuICAgIGltcG9ydGVkRmFjdG9yaWVzW25hbWVdID0gZmFjdG9yeTtcbiAgICBtYXRoLmVtaXQoJ2ltcG9ydCcsIG5hbWUsIHJlc29sdmVyKTtcbiAgfVxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBnaXZlbiBvYmplY3QgaXMgYSB0eXBlIHdoaWNoIGNhbiBiZSBpbXBvcnRlZFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uIHwgbnVtYmVyIHwgc3RyaW5nIHwgYm9vbGVhbiB8IG51bGwgfCBVbml0IHwgQ29tcGxleH0gb2JqZWN0XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gaXNTdXBwb3J0ZWRUeXBlKG9iamVjdCkge1xuICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0ID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmplY3QgPT09ICdudW1iZXInIHx8IHR5cGVvZiBvYmplY3QgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBvYmplY3QgPT09ICdib29sZWFuJyB8fCBvYmplY3QgPT09IG51bGwgfHwgKDAsIF9pcy5pc1VuaXQpKG9iamVjdCkgfHwgKDAsIF9pcy5pc0NvbXBsZXgpKG9iamVjdCkgfHwgKDAsIF9pcy5pc0JpZ051bWJlcikob2JqZWN0KSB8fCAoMCwgX2lzLmlzRnJhY3Rpb24pKG9iamVjdCkgfHwgKDAsIF9pcy5pc01hdHJpeCkob2JqZWN0KSB8fCBBcnJheS5pc0FycmF5KG9iamVjdCk7XG4gIH1cbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciBhIGdpdmVuIHRoaW5nIGlzIGEgdHlwZWQtZnVuY3Rpb25cbiAgICogQHBhcmFtIHsqfSBmblxuICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBgZm5gIGlzIGEgdHlwZWQtZnVuY3Rpb25cbiAgICovXG5cblxuICBmdW5jdGlvbiBpc1R5cGVkRnVuY3Rpb24oZm4pIHtcbiAgICByZXR1cm4gdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nICYmIF90eXBlb2YoZm4uc2lnbmF0dXJlcykgPT09ICdvYmplY3QnO1xuICB9XG5cbiAgZnVuY3Rpb24gaGFzVHlwZWRGdW5jdGlvblNpZ25hdHVyZShmbikge1xuICAgIHJldHVybiB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGZuLnNpZ25hdHVyZSA9PT0gJ3N0cmluZyc7XG4gIH1cblxuICBmdW5jdGlvbiBhbGxvd2VkSW5FeHByZXNzaW9ucyhuYW1lKSB7XG4gICAgcmV0dXJuICEoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodW5zYWZlLCBuYW1lKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxlZ2FjeUZhY3RvcnlBbGxvd2VkSW5FeHByZXNzaW9ucyhmYWN0b3J5KSB7XG4gICAgcmV0dXJuIGZhY3RvcnkucGF0aCA9PT0gdW5kZWZpbmVkICYmICEoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodW5zYWZlLCBmYWN0b3J5Lm5hbWUpO1xuICB9XG5cbiAgZnVuY3Rpb24gZmFjdG9yeUFsbG93ZWRJbkV4cHJlc3Npb25zKGZhY3RvcnkpIHtcbiAgICByZXR1cm4gZmFjdG9yeS5mbi5pbmRleE9mKCcuJykgPT09IC0xICYmIC8vIEZJWE1FOiBtYWtlIGNoZWNraW5nIG9uIHBhdGggcmVkdW5kYW50LCBjaGVjayBvbiBtZXRhIGRhdGEgaW5zdGVhZFxuICAgICEoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodW5zYWZlLCBmYWN0b3J5LmZuKSAmJiAoIWZhY3RvcnkubWV0YSB8fCAhZmFjdG9yeS5tZXRhLmlzQ2xhc3MpO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNUcmFuc2Zvcm1GdW5jdGlvbkZhY3RvcnkoZmFjdG9yeSkge1xuICAgIHJldHVybiBmYWN0b3J5ICE9PSB1bmRlZmluZWQgJiYgZmFjdG9yeS5tZXRhICE9PSB1bmRlZmluZWQgJiYgZmFjdG9yeS5tZXRhLmlzVHJhbnNmb3JtRnVuY3Rpb24gPT09IHRydWUgfHwgZmFsc2U7XG4gIH0gLy8gbmFtZXNwYWNlcyBhbmQgZnVuY3Rpb25zIG5vdCBhdmFpbGFibGUgaW4gdGhlIHBhcnNlciBmb3Igc2FmZXR5IHJlYXNvbnNcblxuXG4gIHZhciB1bnNhZmUgPSB7XG4gICAgZXhwcmVzc2lvbjogdHJ1ZSxcbiAgICB0eXBlOiB0cnVlLFxuICAgIGRvY3M6IHRydWUsXG4gICAgZXJyb3I6IHRydWUsXG4gICAganNvbjogdHJ1ZSxcbiAgICBjaGFpbjogdHJ1ZSAvLyBjaGFpbiBtZXRob2Qgbm90IHN1cHBvcnRlZC4gTm90ZSB0aGF0IHRoZXJlIGlzIGEgdW5pdCBjaGFpbiB0b28uXG5cbiAgfTtcbiAgcmV0dXJuIG1hdGhJbXBvcnQ7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVR5cGVkID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX3R5cGVkRnVuY3Rpb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJ0eXBlZC1mdW5jdGlvblwiKSk7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG4vKipcbiAqIENyZWF0ZSBhIHR5cGVkLWZ1bmN0aW9uIHdoaWNoIGNoZWNrcyB0aGUgdHlwZXMgb2YgdGhlIGFyZ3VtZW50cyBhbmRcbiAqIGNhbiBtYXRjaCB0aGVtIGFnYWluc3QgbXVsdGlwbGUgcHJvdmlkZWQgc2lnbmF0dXJlcy4gVGhlIHR5cGVkLWZ1bmN0aW9uXG4gKiBhdXRvbWF0aWNhbGx5IGNvbnZlcnRzIGlucHV0cyBpbiBvcmRlciB0byBmaW5kIGEgbWF0Y2hpbmcgc2lnbmF0dXJlLlxuICogVHlwZWQgZnVuY3Rpb25zIHRocm93IGluZm9ybWF0aXZlIGVycm9ycyBpbiBjYXNlIG9mIHdyb25nIGlucHV0IGFyZ3VtZW50cy5cbiAqXG4gKiBTZWUgdGhlIGxpYnJhcnkgW3R5cGVkLWZ1bmN0aW9uXShodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL3R5cGVkLWZ1bmN0aW9uKVxuICogZm9yIGRldGFpbGVkIGRvY3VtZW50YXRpb24uXG4gKlxuICogU3ludGF4OlxuICpcbiAqICAgICBtYXRoLnR5cGVkKG5hbWUsIHNpZ25hdHVyZXMpIDogZnVuY3Rpb25cbiAqICAgICBtYXRoLnR5cGVkKHNpZ25hdHVyZXMpIDogZnVuY3Rpb25cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgLy8gY3JlYXRlIGEgdHlwZWQgZnVuY3Rpb24gd2l0aCBtdWx0aXBsZSB0eXBlcyBwZXIgYXJndW1lbnQgKHR5cGUgdW5pb24pXG4gKiAgICAgY29uc3QgZm4yID0gdHlwZWQoe1xuICogICAgICAgJ251bWJlciB8IGJvb2xlYW4nOiBmdW5jdGlvbiAoYikge1xuICogICAgICAgICByZXR1cm4gJ2IgaXMgYSBudW1iZXIgb3IgYm9vbGVhbidcbiAqICAgICAgIH0sXG4gKiAgICAgICAnc3RyaW5nLCBudW1iZXIgfCBib29sZWFuJzogZnVuY3Rpb24gKGEsIGIpIHtcbiAqICAgICAgICAgcmV0dXJuICdhIGlzIGEgc3RyaW5nLCBiIGlzIGEgbnVtYmVyIG9yIGJvb2xlYW4nXG4gKiAgICAgICB9XG4gKiAgICAgfSlcbiAqXG4gKiAgICAgLy8gY3JlYXRlIGEgdHlwZWQgZnVuY3Rpb24gd2l0aCBhbiBhbnkgdHlwZSBhcmd1bWVudFxuICogICAgIGNvbnN0IGxvZyA9IHR5cGVkKHtcbiAqICAgICAgICdzdHJpbmcsIGFueSc6IGZ1bmN0aW9uIChldmVudCwgZGF0YSkge1xuICogICAgICAgICBjb25zb2xlLmxvZygnZXZlbnQ6ICcgKyBldmVudCArICcsIGRhdGE6ICcgKyBKU09OLnN0cmluZ2lmeShkYXRhKSlcbiAqICAgICAgIH1cbiAqICAgICB9KVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV0gICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsIG5hbWUgZm9yIHRoZSB0eXBlZC1mdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBmdW5jdGlvbj59IHNpZ25hdHVyZXMgICBPYmplY3Qgd2l0aCBvbmUgb3IgbXVsdGlwbGUgZnVuY3Rpb24gc2lnbmF0dXJlc1xuICogQHJldHVybnMge2Z1bmN0aW9ufSBUaGUgY3JlYXRlZCB0eXBlZC1mdW5jdGlvbi5cbiAqL1xuLy8gcmV0dXJucyBhIG5ldyBpbnN0YW5jZSBvZiB0eXBlZC1mdW5jdGlvblxudmFyIF9jcmVhdGVUeXBlZDIgPSBmdW5jdGlvbiBfY3JlYXRlVHlwZWQoKSB7XG4gIC8vIGluaXRpYWxseSwgcmV0dXJuIHRoZSBvcmlnaW5hbCBpbnN0YW5jZSBvZiB0eXBlZC1mdW5jdGlvblxuICAvLyBjb25zZWN1dGl2ZWx5LCByZXR1cm4gYSBuZXcgaW5zdGFuY2UgZnJvbSB0eXBlZC5jcmVhdGUuXG4gIF9jcmVhdGVUeXBlZDIgPSBfdHlwZWRGdW5jdGlvbltcImRlZmF1bHRcIl0uY3JlYXRlO1xuICByZXR1cm4gX3R5cGVkRnVuY3Rpb25bXCJkZWZhdWx0XCJdO1xufTtcblxudmFyIGRlcGVuZGVuY2llcyA9IFsnP0JpZ051bWJlcicsICc/Q29tcGxleCcsICc/RGVuc2VNYXRyaXgnLCAnP0ZyYWN0aW9uJ107XG4vKipcbiAqIEZhY3RvcnkgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGEgbmV3IHR5cGVkIGluc3RhbmNlXG4gKiBAcGFyYW0ge09iamVjdH0gZGVwZW5kZW5jaWVzICAgT2JqZWN0IHdpdGggZGF0YSB0eXBlcyBsaWtlIENvbXBsZXggYW5kIEJpZ051bWJlclxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5cbnZhciBjcmVhdGVUeXBlZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KSgndHlwZWQnLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIGNyZWF0ZVR5cGVkKF9yZWYpIHtcbiAgdmFyIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeCxcbiAgICAgIEZyYWN0aW9uID0gX3JlZi5GcmFjdGlvbjtcblxuICAvLyBUT0RPOiB0eXBlZC1mdW5jdGlvbiBtdXN0IGJlIGFibGUgdG8gc2lsZW50bHkgaWdub3JlIHNpZ25hdHVyZXMgd2l0aCB1bmtub3duIGRhdGEgdHlwZXNcbiAgLy8gZ2V0IGEgbmV3IGluc3RhbmNlIG9mIHR5cGVkLWZ1bmN0aW9uXG4gIHZhciB0eXBlZCA9IF9jcmVhdGVUeXBlZDIoKTsgLy8gZGVmaW5lIGFsbCB0eXBlcy4gVGhlIG9yZGVyIG9mIHRoZSB0eXBlcyBkZXRlcm1pbmVzIGluIHdoaWNoIG9yZGVyIGZ1bmN0aW9uXG4gIC8vIGFyZ3VtZW50cyBhcmUgdHlwZS1jaGVja2VkIChzbyBmb3IgcGVyZm9ybWFuY2UgaXQncyBpbXBvcnRhbnQgdG8gcHV0IHRoZVxuICAvLyBtb3N0IHVzZWQgdHlwZXMgZmlyc3QpLlxuXG5cbiAgdHlwZWQudHlwZXMgPSBbe1xuICAgIG5hbWU6ICdudW1iZXInLFxuICAgIHRlc3Q6IF9pcy5pc051bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ0NvbXBsZXgnLFxuICAgIHRlc3Q6IF9pcy5pc0NvbXBsZXhcbiAgfSwge1xuICAgIG5hbWU6ICdCaWdOdW1iZXInLFxuICAgIHRlc3Q6IF9pcy5pc0JpZ051bWJlclxuICB9LCB7XG4gICAgbmFtZTogJ0ZyYWN0aW9uJyxcbiAgICB0ZXN0OiBfaXMuaXNGcmFjdGlvblxuICB9LCB7XG4gICAgbmFtZTogJ1VuaXQnLFxuICAgIHRlc3Q6IF9pcy5pc1VuaXRcbiAgfSwge1xuICAgIG5hbWU6ICdzdHJpbmcnLFxuICAgIHRlc3Q6IF9pcy5pc1N0cmluZ1xuICB9LCB7XG4gICAgbmFtZTogJ0NoYWluJyxcbiAgICB0ZXN0OiBfaXMuaXNDaGFpblxuICB9LCB7XG4gICAgbmFtZTogJ0FycmF5JyxcbiAgICB0ZXN0OiBfaXMuaXNBcnJheVxuICB9LCB7XG4gICAgbmFtZTogJ01hdHJpeCcsXG4gICAgdGVzdDogX2lzLmlzTWF0cml4XG4gIH0sIHtcbiAgICBuYW1lOiAnRGVuc2VNYXRyaXgnLFxuICAgIHRlc3Q6IF9pcy5pc0RlbnNlTWF0cml4XG4gIH0sIHtcbiAgICBuYW1lOiAnU3BhcnNlTWF0cml4JyxcbiAgICB0ZXN0OiBfaXMuaXNTcGFyc2VNYXRyaXhcbiAgfSwge1xuICAgIG5hbWU6ICdSYW5nZScsXG4gICAgdGVzdDogX2lzLmlzUmFuZ2VcbiAgfSwge1xuICAgIG5hbWU6ICdJbmRleCcsXG4gICAgdGVzdDogX2lzLmlzSW5kZXhcbiAgfSwge1xuICAgIG5hbWU6ICdib29sZWFuJyxcbiAgICB0ZXN0OiBfaXMuaXNCb29sZWFuXG4gIH0sIHtcbiAgICBuYW1lOiAnUmVzdWx0U2V0JyxcbiAgICB0ZXN0OiBfaXMuaXNSZXN1bHRTZXRcbiAgfSwge1xuICAgIG5hbWU6ICdIZWxwJyxcbiAgICB0ZXN0OiBfaXMuaXNIZWxwXG4gIH0sIHtcbiAgICBuYW1lOiAnZnVuY3Rpb24nLFxuICAgIHRlc3Q6IF9pcy5pc0Z1bmN0aW9uXG4gIH0sIHtcbiAgICBuYW1lOiAnRGF0ZScsXG4gICAgdGVzdDogX2lzLmlzRGF0ZVxuICB9LCB7XG4gICAgbmFtZTogJ1JlZ0V4cCcsXG4gICAgdGVzdDogX2lzLmlzUmVnRXhwXG4gIH0sIHtcbiAgICBuYW1lOiAnbnVsbCcsXG4gICAgdGVzdDogX2lzLmlzTnVsbFxuICB9LCB7XG4gICAgbmFtZTogJ3VuZGVmaW5lZCcsXG4gICAgdGVzdDogX2lzLmlzVW5kZWZpbmVkXG4gIH0sIHtcbiAgICBuYW1lOiAnQWNjZXNzb3JOb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNBY2Nlc3Nvck5vZGVcbiAgfSwge1xuICAgIG5hbWU6ICdBcnJheU5vZGUnLFxuICAgIHRlc3Q6IF9pcy5pc0FycmF5Tm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ0Fzc2lnbm1lbnROb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNBc3NpZ25tZW50Tm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ0Jsb2NrTm9kZScsXG4gICAgdGVzdDogX2lzLmlzQmxvY2tOb2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnQ29uZGl0aW9uYWxOb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNDb25kaXRpb25hbE5vZGVcbiAgfSwge1xuICAgIG5hbWU6ICdDb25zdGFudE5vZGUnLFxuICAgIHRlc3Q6IF9pcy5pc0NvbnN0YW50Tm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ0Z1bmN0aW9uTm9kZScsXG4gICAgdGVzdDogX2lzLmlzRnVuY3Rpb25Ob2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZScsXG4gICAgdGVzdDogX2lzLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ0luZGV4Tm9kZScsXG4gICAgdGVzdDogX2lzLmlzSW5kZXhOb2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnTm9kZScsXG4gICAgdGVzdDogX2lzLmlzTm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ09iamVjdE5vZGUnLFxuICAgIHRlc3Q6IF9pcy5pc09iamVjdE5vZGVcbiAgfSwge1xuICAgIG5hbWU6ICdPcGVyYXRvck5vZGUnLFxuICAgIHRlc3Q6IF9pcy5pc09wZXJhdG9yTm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ1BhcmVudGhlc2lzTm9kZScsXG4gICAgdGVzdDogX2lzLmlzUGFyZW50aGVzaXNOb2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnUmFuZ2VOb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNSYW5nZU5vZGVcbiAgfSwge1xuICAgIG5hbWU6ICdTeW1ib2xOb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNTeW1ib2xOb2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnT2JqZWN0JyxcbiAgICB0ZXN0OiBfaXMuaXNPYmplY3RcbiAgfSAvLyBvcmRlciAnT2JqZWN0JyBsYXN0LCBpdCBtYXRjaGVzIG9uIG90aGVyIGNsYXNzZXMgdG9vXG4gIF07XG4gIHR5cGVkLmNvbnZlcnNpb25zID0gW3tcbiAgICBmcm9tOiAnbnVtYmVyJyxcbiAgICB0bzogJ0JpZ051bWJlcicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICBpZiAoIUJpZ051bWJlcikge1xuICAgICAgICB0aHJvd05vQmlnbnVtYmVyKHgpO1xuICAgICAgfSAvLyBub3RlOiBjb252ZXJzaW9uIGZyb20gbnVtYmVyIHRvIEJpZ051bWJlciBjYW4gZmFpbCBpZiB4IGhhcyA+MTUgZGlnaXRzXG5cblxuICAgICAgaWYgKCgwLCBfbnVtYmVyLmRpZ2l0cykoeCkgPiAxNSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgaW1wbGljaXRseSBjb252ZXJ0IGEgbnVtYmVyIHdpdGggPjE1IHNpZ25pZmljYW50IGRpZ2l0cyB0byBCaWdOdW1iZXIgJyArICcodmFsdWU6ICcgKyB4ICsgJykuICcgKyAnVXNlIGZ1bmN0aW9uIGJpZ251bWJlcih4KSB0byBjb252ZXJ0IHRvIEJpZ051bWJlci4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeCk7XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ251bWJlcicsXG4gICAgdG86ICdDb21wbGV4JyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHtcbiAgICAgIGlmICghQ29tcGxleCkge1xuICAgICAgICB0aHJvd05vQ29tcGxleCh4KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgsIDApO1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdudW1iZXInLFxuICAgIHRvOiAnc3RyaW5nJyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHtcbiAgICAgIHJldHVybiB4ICsgJyc7XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ0JpZ051bWJlcicsXG4gICAgdG86ICdDb21wbGV4JyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHtcbiAgICAgIGlmICghQ29tcGxleCkge1xuICAgICAgICB0aHJvd05vQ29tcGxleCh4KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgudG9OdW1iZXIoKSwgMCk7XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ0ZyYWN0aW9uJyxcbiAgICB0bzogJ0JpZ051bWJlcicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgaW1wbGljaXRseSBjb252ZXJ0IGEgRnJhY3Rpb24gdG8gQmlnTnVtYmVyIG9yIHZpY2UgdmVyc2EuICcgKyAnVXNlIGZ1bmN0aW9uIGJpZ251bWJlcih4KSB0byBjb252ZXJ0IHRvIEJpZ051bWJlciBvciBmcmFjdGlvbih4KSB0byBjb252ZXJ0IHRvIEZyYWN0aW9uLicpO1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdGcmFjdGlvbicsXG4gICAgdG86ICdDb21wbGV4JyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHtcbiAgICAgIGlmICghQ29tcGxleCkge1xuICAgICAgICB0aHJvd05vQ29tcGxleCh4KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgudmFsdWVPZigpLCAwKTtcbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnbnVtYmVyJyxcbiAgICB0bzogJ0ZyYWN0aW9uJyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHtcbiAgICAgIGlmICghRnJhY3Rpb24pIHtcbiAgICAgICAgdGhyb3dOb0ZyYWN0aW9uKHgpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZiA9IG5ldyBGcmFjdGlvbih4KTtcblxuICAgICAgaWYgKGYudmFsdWVPZigpICE9PSB4KSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBpbXBsaWNpdGx5IGNvbnZlcnQgYSBudW1iZXIgdG8gYSBGcmFjdGlvbiB3aGVuIHRoZXJlIHdpbGwgYmUgYSBsb3NzIG9mIHByZWNpc2lvbiAnICsgJyh2YWx1ZTogJyArIHggKyAnKS4gJyArICdVc2UgZnVuY3Rpb24gZnJhY3Rpb24oeCkgdG8gY29udmVydCB0byBGcmFjdGlvbi4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGY7XG4gICAgfVxuICB9LCB7XG4gICAgLy8gRklYTUU6IGFkZCBjb252ZXJzaW9uIGZyb20gRnJhY3Rpb24gdG8gbnVtYmVyLCBmb3IgZXhhbXBsZSBmb3IgYHNxcnQoZnJhY3Rpb24oMSwzKSlgXG4gICAgLy8gIGZyb206ICdGcmFjdGlvbicsXG4gICAgLy8gIHRvOiAnbnVtYmVyJyxcbiAgICAvLyAgY29udmVydDogZnVuY3Rpb24gKHgpIHtcbiAgICAvLyAgICByZXR1cm4geC52YWx1ZU9mKClcbiAgICAvLyAgfVxuICAgIC8vIH0sIHtcbiAgICBmcm9tOiAnc3RyaW5nJyxcbiAgICB0bzogJ251bWJlcicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICB2YXIgbiA9IE51bWJlcih4KTtcblxuICAgICAgaWYgKGlzTmFOKG4pKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgXCInICsgeCArICdcIiB0byBhIG51bWJlcicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbjtcbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnc3RyaW5nJyxcbiAgICB0bzogJ0JpZ051bWJlcicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICBpZiAoIUJpZ051bWJlcikge1xuICAgICAgICB0aHJvd05vQmlnbnVtYmVyKHgpO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcih4KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IFwiJyArIHggKyAnXCIgdG8gQmlnTnVtYmVyJyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ3N0cmluZycsXG4gICAgdG86ICdGcmFjdGlvbicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICBpZiAoIUZyYWN0aW9uKSB7XG4gICAgICAgIHRocm93Tm9GcmFjdGlvbih4KTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih4KTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IFwiJyArIHggKyAnXCIgdG8gRnJhY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnc3RyaW5nJyxcbiAgICB0bzogJ0NvbXBsZXgnLFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoeCkge1xuICAgICAgaWYgKCFDb21wbGV4KSB7XG4gICAgICAgIHRocm93Tm9Db21wbGV4KHgpO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoeCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29udmVydCBcIicgKyB4ICsgJ1wiIHRvIENvbXBsZXgnKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnYm9vbGVhbicsXG4gICAgdG86ICdudW1iZXInLFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoeCkge1xuICAgICAgcmV0dXJuICt4O1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdib29sZWFuJyxcbiAgICB0bzogJ0JpZ051bWJlcicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICBpZiAoIUJpZ051bWJlcikge1xuICAgICAgICB0aHJvd05vQmlnbnVtYmVyKHgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IEJpZ051bWJlcigreCk7XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ2Jvb2xlYW4nLFxuICAgIHRvOiAnRnJhY3Rpb24nLFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoeCkge1xuICAgICAgaWYgKCFGcmFjdGlvbikge1xuICAgICAgICB0aHJvd05vRnJhY3Rpb24oeCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oK3gpO1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdib29sZWFuJyxcbiAgICB0bzogJ3N0cmluZycsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICByZXR1cm4gU3RyaW5nKHgpO1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdBcnJheScsXG4gICAgdG86ICdNYXRyaXgnLFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoYXJyYXkpIHtcbiAgICAgIGlmICghRGVuc2VNYXRyaXgpIHtcbiAgICAgICAgdGhyb3dOb01hdHJpeCgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KGFycmF5KTtcbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnTWF0cml4JyxcbiAgICB0bzogJ0FycmF5JyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KG1hdHJpeCkge1xuICAgICAgcmV0dXJuIG1hdHJpeC52YWx1ZU9mKCk7XG4gICAgfVxuICB9XTtcbiAgcmV0dXJuIHR5cGVkO1xufSk7XG5leHBvcnRzLmNyZWF0ZVR5cGVkID0gY3JlYXRlVHlwZWQ7XG5cbmZ1bmN0aW9uIHRocm93Tm9CaWdudW1iZXIoeCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY29udmVydCB2YWx1ZSBcIi5jb25jYXQoeCwgXCIgaW50byBhIEJpZ051bWJlcjogbm8gY2xhc3MgJ0JpZ051bWJlcicgcHJvdmlkZWRcIikpO1xufVxuXG5mdW5jdGlvbiB0aHJvd05vQ29tcGxleCh4KSB7XG4gIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjb252ZXJ0IHZhbHVlIFwiLmNvbmNhdCh4LCBcIiBpbnRvIGEgQ29tcGxleCBudW1iZXI6IG5vIGNsYXNzICdDb21wbGV4JyBwcm92aWRlZFwiKSk7XG59XG5cbmZ1bmN0aW9uIHRocm93Tm9NYXRyaXgoKSB7XG4gIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgYXJyYXkgaW50byBhIE1hdHJpeDogbm8gY2xhc3MgXFwnRGVuc2VNYXRyaXhcXCcgcHJvdmlkZWQnKTtcbn1cblxuZnVuY3Rpb24gdGhyb3dOb0ZyYWN0aW9uKHgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNvbnZlcnQgdmFsdWUgXCIuY29uY2F0KHgsIFwiIGludG8gYSBGcmFjdGlvbiwgbm8gY2xhc3MgJ0ZyYWN0aW9uJyBwcm92aWRlZC5cIikpO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFsbCA9IHZvaWQgMDtcblxudmFyIGFsbEZhY3RvcmllcyA9IF9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkKHJlcXVpcmUoXCIuLi9mYWN0b3JpZXNBbnlcIikpO1xuXG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKSB7IGlmICh0eXBlb2YgV2Vha01hcCAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gbnVsbDsgdmFyIGNhY2hlID0gbmV3IFdlYWtNYXAoKTsgX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKCkgeyByZXR1cm4gY2FjaGU7IH07IHJldHVybiBjYWNoZTsgfVxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChvYmopIHsgaWYgKG9iaiAmJiBvYmouX19lc01vZHVsZSkgeyByZXR1cm4gb2JqOyB9IGlmIChvYmogPT09IG51bGwgfHwgX3R5cGVvZihvYmopICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBvYmogIT09IFwiZnVuY3Rpb25cIikgeyByZXR1cm4geyBcImRlZmF1bHRcIjogb2JqIH07IH0gdmFyIGNhY2hlID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKCk7IGlmIChjYWNoZSAmJiBjYWNoZS5oYXMob2JqKSkgeyByZXR1cm4gY2FjaGUuZ2V0KG9iaik7IH0gdmFyIG5ld09iaiA9IHt9OyB2YXIgaGFzUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIGtleSBpbiBvYmopIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHsgdmFyIGRlc2MgPSBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KSA6IG51bGw7IGlmIChkZXNjICYmIChkZXNjLmdldCB8fCBkZXNjLnNldCkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ld09iaiwga2V5LCBkZXNjKTsgfSBlbHNlIHsgbmV3T2JqW2tleV0gPSBvYmpba2V5XTsgfSB9IH0gbmV3T2JqW1wiZGVmYXVsdFwiXSA9IG9iajsgaWYgKGNhY2hlKSB7IGNhY2hlLnNldChvYmosIG5ld09iaik7IH0gcmV0dXJuIG5ld09iajsgfVxuXG4vLyBjcmVhdGluZyBhbGwgZmFjdG9yaWVzIGhlcmUgaW4gYSBzZXBhcmF0ZSBmaWxlIGlzIG5lZWRlZCB0byBnZXQgdHJlZS1zaGFraW5nIHdvcmtpbmdcbnZhciBhbGwgPSBhbGxGYWN0b3JpZXM7XG5leHBvcnRzLmFsbCA9IGFsbDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29uZmlnID0gdm9pZCAwO1xuXG52YXIgX2NvbmZpZyA9IHJlcXVpcmUoXCIuLi9jb3JlL2NvbmZpZ1wiKTtcblxudmFyIF9jb25maWcyID0gcmVxdWlyZShcIi4uL2NvcmUvZnVuY3Rpb24vY29uZmlnXCIpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG4vLyBjcmVhdGUgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiBjb25maWdcbnZhciBjb25maWcgPSAvKiAjX19QVVJFX18gKi9mdW5jdGlvbiBjb25maWcob3B0aW9ucykge1xuICBpZiAob3B0aW9ucykge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIGdsb2JhbCBjb25maWcgaXMgcmVhZG9ubHkuIFxcbicgKyAnUGxlYXNlIGNyZWF0ZSBhIG1hdGhqcyBpbnN0YW5jZSBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbi4gXFxuJyArICdFeGFtcGxlOlxcbicgKyAnXFxuJyArICcgIGltcG9ydCB7IGNyZWF0ZSwgYWxsIH0gZnJvbSBcXCdtYXRoanNcXCc7XFxuJyArICcgIGNvbnN0IG1hdGhqcyA9IGNyZWF0ZShhbGwpO1xcbicgKyAnICBtYXRoanMuY29uZmlnKHsgbnVtYmVyOiBcXCdCaWdOdW1iZXJcXCcgfSk7XFxuJyk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmZyZWV6ZShfY29uZmlnLkRFRkFVTFRfQ09ORklHKTtcbn07XG5cbmV4cG9ydHMuY29uZmlnID0gY29uZmlnO1xuXG5fZXh0ZW5kcyhjb25maWcsIF9jb25maWcuREVGQVVMVF9DT05GSUcsIHtcbiAgTUFUUklYX09QVElPTlM6IF9jb25maWcyLk1BVFJJWF9PUFRJT05TLFxuICBOVU1CRVJfT1BUSU9OUzogX2NvbmZpZzIuTlVNQkVSX09QVElPTlNcbn0pOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHlwZWREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJlc3VsdFNldERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmVzdWx0U2V0LlJlc3VsdFNldERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCaWdOdW1iZXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDb21wbGV4RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGcmFjdGlvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcy5GcmFjdGlvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSYW5nZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmFuZ2VDbGFzcy5SYW5nZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJNYXRyaXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01hdHJpeENsYXNzLk1hdHJpeERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEZW5zZU1hdHJpeERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjbG9uZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ2xvbmUuY2xvbmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNJbnRlZ2VyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTmVnYXRpdmVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzTmVnYXRpdmUuaXNOZWdhdGl2ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc051bWVyaWNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzTnVtZXJpYy5pc051bWVyaWNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaGFzTnVtZXJpY1ZhbHVlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNIYXNOdW1lcmljVmFsdWUuaGFzTnVtZXJpY1ZhbHVlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUG9zaXRpdmVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzUG9zaXRpdmUuaXNQb3NpdGl2ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1plcm9EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzWmVyby5pc1plcm9EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNOYU5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzTmFOLmlzTmFORGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInR5cGVPZkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVHlwZU9mLnR5cGVPZkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0eXBlb2ZEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRUeXBlb2YudHlwZW9mRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLlNwYXJzZU1hdHJpeERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJudW1iZXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc051bWJlci5udW1iZXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyaW5nRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTdHJpbmcuc3RyaW5nRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJvb2xlYW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Jvb2xlYW4uYm9vbGVhbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJiaWdudW1iZXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0JpZ251bWJlci5iaWdudW1iZXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tcGxleERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tcGxleC5jb21wbGV4RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZyYWN0aW9uRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGcmFjdGlvbi5mcmFjdGlvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYXRyaXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3BsaXRVbml0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcGxpdFVuaXQuc3BsaXRVbml0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVuYXJ5TWludXNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1VuYXJ5TWludXMudW5hcnlNaW51c0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1bmFyeVBsdXNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1VuYXJ5UGx1cy51bmFyeVBsdXNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWJzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFwcGx5RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBcHBseS5hcHBseURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhZGRTY2FsYXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY2JydERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ2JydC5jYnJ0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNlaWxEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NlaWwuY2VpbERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjdWJlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDdWJlLmN1YmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXhwRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFeHAuZXhwRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImV4cG0xRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFeHBtLmV4cG0xRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpeERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRml4LmZpeERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmbG9vckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRmxvb3IuZmxvb3JEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ2NkRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNHY2QuZ2NkRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxjbURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTGNtLmxjbURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsb2cxMERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTG9nLmxvZzEwRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxvZzJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0xvZzIubG9nMkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtb2REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01vZC5tb2REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm11bHRpcGx5RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJudGhSb290RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNOdGhSb290Lm50aFJvb3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2lnbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2lnbi5zaWduRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNxcnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NxcnQuc3FydERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzcXVhcmVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NxdWFyZS5zcXVhcmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3VidHJhY3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInhnY2REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1hnY2QueGdjZERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkb3RNdWx0aXBseURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRG90TXVsdGlwbHkuZG90TXVsdGlwbHlEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYml0QW5kRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNCaXRBbmQuYml0QW5kRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJpdE5vdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQml0Tm90LmJpdE5vdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJiaXRPckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQml0T3IuYml0T3JEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYml0WG9yRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNCaXRYb3IuYml0WG9yRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFyZ0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXJnLmFyZ0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25qRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb25qLmNvbmpEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaW1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0ltLmltRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSZS5yZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJub3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc05vdC5ub3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwib3JEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc09yLm9yRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInhvckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzWG9yLnhvckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25jYXREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvbmNhdC5jb25jYXREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29sdW1uRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb2x1bW4uY29sdW1uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyb3NzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDcm9zcy5jcm9zc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkaWFnRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNEaWFnLmRpYWdEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXllRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFeWUuZXllRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpbHRlckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRmlsdGVyLmZpbHRlckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmbGF0dGVuRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGbGF0dGVuLmZsYXR0ZW5EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZm9yRWFjaERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRm9yRWFjaC5mb3JFYWNoRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdldE1hdHJpeERhdGFUeXBlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNHZXRNYXRyaXhEYXRhVHlwZS5nZXRNYXRyaXhEYXRhVHlwZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpZGVudGl0eURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSWRlbnRpdHkuaWRlbnRpdHlEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwia3JvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzS3Jvbi5rcm9uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1hcERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWFwLm1hcERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJvbmVzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNPbmVzLm9uZXNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmFuZ2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1JhbmdlLnJhbmdlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlc2hhcGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Jlc2hhcGUucmVzaGFwZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZXNpemVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Jlc2l6ZS5yZXNpemVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicm93RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSb3cucm93RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNpemVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NpemUuc2l6ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzcXVlZXplRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcXVlZXplLnNxdWVlemVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3Vic2V0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTdWJzZXQuc3Vic2V0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRyYW5zcG9zZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVHJhbnNwb3NlLnRyYW5zcG9zZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjdHJhbnNwb3NlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDdHJhbnNwb3NlLmN0cmFuc3Bvc2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiemVyb3NEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1plcm9zLnplcm9zRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVyZkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRXJmLmVyZkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNb2RlLm1vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHJvZERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUHJvZC5wcm9kRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZvcm1hdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRm9ybWF0LmZvcm1hdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwcmludERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUHJpbnQucHJpbnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidG9EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1RvLnRvRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUHJpbWVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lzUHJpbWUuaXNQcmltZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJudW1lcmljRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNOdW1lcmljLm51bWVyaWNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBvd0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUG93LnBvd0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyb3VuZERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUm91bmQucm91bmREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibG9nRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNMb2czLmxvZ0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsb2cxcERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTG9nMXAubG9nMXBEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibnRoUm9vdHNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc050aFJvb3RzLm50aFJvb3RzRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRvdFBvd0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRG90UG93LmRvdFBvd0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkb3REaXZpZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0RvdERpdmlkZS5kb3REaXZpZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibHNvbHZlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNMc29sdmUubHNvbHZlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVzb2x2ZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVXNvbHZlLnVzb2x2ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsZWZ0U2hpZnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0xlZnRTaGlmdC5sZWZ0U2hpZnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmlnaHRBcml0aFNoaWZ0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSaWdodEFyaXRoU2hpZnQucmlnaHRBcml0aFNoaWZ0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJpZ2h0TG9nU2hpZnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1JpZ2h0TG9nU2hpZnQucmlnaHRMb2dTaGlmdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhbmREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FuZC5hbmREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tcGFyZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tcGFyZS5jb21wYXJlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5jb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb21wYXJlVGV4dERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tcGFyZVRleHQuY29tcGFyZVRleHREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXF1YWxEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0VxdWFsLmVxdWFsRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVxdWFsVGV4dERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRXF1YWxUZXh0LmVxdWFsVGV4dERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzbWFsbGVyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTbWFsbGVyLnNtYWxsZXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic21hbGxlckVxRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTbWFsbGVyRXEuc21hbGxlckVxRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxhcmdlckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTGFyZ2VyLmxhcmdlckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsYXJnZXJFcURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTGFyZ2VyRXEubGFyZ2VyRXFEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGVlcEVxdWFsRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNEZWVwRXF1YWwuZGVlcEVxdWFsRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVuZXF1YWxEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1VuZXF1YWwudW5lcXVhbERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYXJ0aXRpb25TZWxlY3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdC5wYXJ0aXRpb25TZWxlY3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic29ydERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU29ydC5zb3J0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1heERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWF4Lm1heERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtaW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01pbi5taW5EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW1tdXRhYmxlRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0ltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3MuSW1tdXRhYmxlRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW5kZXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRmlib25hY2NpSGVhcERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRmlib25hY2NpSGVhcENsYXNzLkZpYm9uYWNjaUhlYXBEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU3BhRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcGFDbGFzcy5TcGFEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVW5pdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidW5pdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVW5pdEZ1bmN0aW9uLnVuaXREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3BhcnNlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcGFyc2Uuc3BhcnNlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVVuaXREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NyZWF0ZVVuaXQuY3JlYXRlVW5pdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhY29zRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBY29zLmFjb3NEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWNvc2hEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Fjb3NoLmFjb3NoRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFjb3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Fjb3QuYWNvdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhY290aERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQWNvdGguYWNvdGhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWNzY0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQWNzYy5hY3NjRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFjc2NoRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBY3NjaC5hY3NjaERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhc2VjRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBc2VjLmFzZWNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXNlY2hEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FzZWNoLmFzZWNoRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFzaW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FzaW4uYXNpbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhc2luaERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXNpbmguYXNpbmhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXRhbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXRhbi5hdGFuRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImF0YW4yRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBdGFuMi5hdGFuMkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhdGFuaERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXRhbmguYXRhbmhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29zRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb3MuY29zRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvc2hEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Nvc2guY29zaERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvdC5jb3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY290aERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ290aC5jb3RoRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNzY0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ3NjLmNzY0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjc2NoRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDc2NoLmNzY2hEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2VjRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZWMuc2VjRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNlY2hEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NlY2guc2VjaERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzaW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Npbi5zaW5EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2luaERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2luaC5zaW5oRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRhbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVGFuLnRhbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0YW5oRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNUYW5oLnRhbmhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0Q2FydGVzaWFuRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZXRDYXJ0ZXNpYW4uc2V0Q2FydGVzaWFuRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNldERpZmZlcmVuY2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NldERpZmZlcmVuY2Uuc2V0RGlmZmVyZW5jZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXREaXN0aW5jdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2V0RGlzdGluY3Quc2V0RGlzdGluY3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0SW50ZXJzZWN0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZXRJbnRlcnNlY3Quc2V0SW50ZXJzZWN0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNldElzU3Vic2V0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZXRJc1N1YnNldC5zZXRJc1N1YnNldERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXRNdWx0aXBsaWNpdHlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NldE11bHRpcGxpY2l0eS5zZXRNdWx0aXBsaWNpdHlEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0UG93ZXJzZXREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NldFBvd2Vyc2V0LnNldFBvd2Vyc2V0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNldFNpemVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NldFNpemUuc2V0U2l6ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXRTeW1EaWZmZXJlbmNlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZXRTeW1EaWZmZXJlbmNlLnNldFN5bURpZmZlcmVuY2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0VW5pb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NldFVuaW9uLnNldFVuaW9uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFkZERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQWRkLmFkZERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJoeXBvdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSHlwb3QuaHlwb3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTm9ybS5ub3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRvdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRG90LmRvdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFjZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVHJhY2UudHJhY2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaW5kZXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0luZGV4LmluZGV4RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBY2Nlc3Nvck5vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FjY2Vzc29yTm9kZS5BY2Nlc3Nvck5vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXJyYXlOb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBcnJheU5vZGUuQXJyYXlOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkFzc2lnbm1lbnROb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBc3NpZ25tZW50Tm9kZS5Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJCbG9ja05vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Jsb2NrTm9kZS5CbG9ja05vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb25kaXRpb25hbE5vZGUuQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvbnN0YW50Tm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlLkNvbnN0YW50Tm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGdW5jdGlvbkFzc2lnbm1lbnROb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlLkZ1bmN0aW9uQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW5kZXhOb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJbmRleE5vZGUuSW5kZXhOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk9iamVjdE5vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc09iamVjdE5vZGUuT2JqZWN0Tm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPcGVyYXRvck5vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZS5PcGVyYXRvck5vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUGFyZW50aGVzaXNOb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuUGFyZW50aGVzaXNOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlJhbmdlTm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmFuZ2VOb2RlLlJhbmdlTm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZWxhdGlvbmFsTm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmVsYXRpb25hbE5vZGUuUmVsYXRpb25hbE5vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU3ltYm9sTm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5TeW1ib2xOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkZ1bmN0aW9uTm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRnVuY3Rpb25Ob2RlLkZ1bmN0aW9uTm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYXJzZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUGFyc2UucGFyc2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tcGlsZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tcGlsZS5jb21waWxlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImV2YWx1YXRlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFdmFsdWF0ZS5ldmFsdWF0ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJldmFsRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNEZXByZWNhdGVkRXZhbC5ldmFsRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBhcnNlckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUGFyc2VyQ2xhc3MuUGFyc2VyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBhcnNlckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUGFyc2VyLnBhcnNlckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsdXBEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0x1cC5sdXBEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1FyLnFyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNsdURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2x1LnNsdURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsdXNvbHZlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNMdXNvbHZlLmx1c29sdmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSGVscERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSGVscENsYXNzLkhlbHBEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ2hhaW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NoYWluQ2xhc3MuQ2hhaW5EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaGVscERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSGVscC5oZWxwRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNoYWluRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDaGFpbi5jaGFpbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZXREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0RldC5kZXREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaW52RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJbnYuaW52RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVpZ3NEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0VpZ3MuZWlnc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJleHBtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFeHBtMi5leHBtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNxcnRtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcXJ0bS5zcXJ0bURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkaXZpZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGlzdGFuY2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Rpc3RhbmNlLmRpc3RhbmNlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImludGVyc2VjdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSW50ZXJzZWN0LmludGVyc2VjdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdW1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1N1bS5zdW1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWVhbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWVhbi5tZWFuRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1lZGlhbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWVkaWFuLm1lZGlhbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYWREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01hZC5tYWREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmFyaWFuY2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1ZhcmlhbmNlLnZhcmlhbmNlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZhckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRGVwcmVjYXRlZFZhci52YXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicXVhbnRpbGVTZXFEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1F1YW50aWxlU2VxLnF1YW50aWxlU2VxRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0ZERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3RkLnN0ZERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb21iaW5hdGlvbnNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucy5jb21iaW5hdGlvbnNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tYmluYXRpb25zV2l0aFJlcERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tYmluYXRpb25zV2l0aFJlcC5jb21iaW5hdGlvbnNXaXRoUmVwRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdhbW1hRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNHYW1tYS5nYW1tYURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmYWN0b3JpYWxEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0ZhY3RvcmlhbC5mYWN0b3JpYWxEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwia2xkaXZlcmdlbmNlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNLbGRpdmVyZ2VuY2Uua2xkaXZlcmdlbmNlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm11bHRpbm9taWFsRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNdWx0aW5vbWlhbC5tdWx0aW5vbWlhbERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwZXJtdXRhdGlvbnNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Blcm11dGF0aW9ucy5wZXJtdXRhdGlvbnNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGlja1JhbmRvbURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUGlja1JhbmRvbS5waWNrUmFuZG9tRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJhbmRvbURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmFuZG9tLnJhbmRvbURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyYW5kb21JbnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1JhbmRvbUludC5yYW5kb21JbnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RpcmxpbmdTMkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3RpcmxpbmdTLnN0aXJsaW5nUzJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYmVsbE51bWJlcnNEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0JlbGxOdW1iZXJzLmJlbGxOdW1iZXJzRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNhdGFsYW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NhdGFsYW4uY2F0YWxhbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb21wb3NpdGlvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tcG9zaXRpb24uY29tcG9zaXRpb25EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2ltcGxpZnlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NpbXBsaWZ5LnNpbXBsaWZ5RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlcml2YXRpdmVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Rlcml2YXRpdmUuZGVyaXZhdGl2ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyYXRpb25hbGl6ZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmF0aW9uYWxpemUucmF0aW9uYWxpemVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmV2aXZlckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmV2aXZlci5yZXZpdmVyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlcGxhY2VyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSZXBsYWNlci5yZXBsYWNlckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFLmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVXBwZXJjYXNlRS5FRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZhbHNlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGYWxzZS5mYWxzZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJLmlEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiSW5maW5pdHlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0luZmluaXR5LkluZmluaXR5RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkxOMTBEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0xOLkxOMTBEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTE4yRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNMTjIuTE4yRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkxPRzEwRURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTE9HMTBFLkxPRzEwRURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMT0cyRURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTE9HMkUuTE9HMkVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTmFORGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNOYU4uTmFORGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm51bGxEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc051bGwubnVsbERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwaGlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BoaS5waGlEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BpLnBpRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBJRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNVcHBlcmNhc2VQaS5QSURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTUVJUMV8yRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTUVJUMV8uU1FSVDFfMkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJTUVJUMkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU1FSVC5TUVJUMkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0YXVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1RhdS50YXVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJ1ZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVHJ1ZS50cnVlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZlcnNpb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1ZlcnNpb24udmVyc2lvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhdG9taWNNYXNzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBdG9taWNNYXNzLmF0b21pY01hc3NEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXZvZ2Fkcm9EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0F2b2dhZHJvLmF2b2dhZHJvRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJvaHJNYWduZXRvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQm9ock1hZ25ldG9uLmJvaHJNYWduZXRvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJib2hyUmFkaXVzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNCb2hyUmFkaXVzLmJvaHJSYWRpdXNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYm9sdHptYW5uRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNCb2x0em1hbm4uYm9sdHptYW5uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDbGFzc2ljYWxFbGVjdHJvblJhZGl1cy5jbGFzc2ljYWxFbGVjdHJvblJhZGl1c0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvbmR1Y3RhbmNlUXVhbnR1bS5jb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY291bG9tYkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ291bG9tYi5jb3Vsb21iRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRldXRlcm9uTWFzc0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRGV1dGVyb25NYXNzLmRldXRlcm9uTWFzc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlZmltb3ZGYWN0b3JEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0VmaW1vdkZhY3Rvci5lZmltb3ZGYWN0b3JEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZWxlY3RyaWNDb25zdGFudERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRWxlY3RyaWNDb25zdGFudC5lbGVjdHJpY0NvbnN0YW50RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVsZWN0cm9uTWFzc0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRWxlY3Ryb25NYXNzLmVsZWN0cm9uTWFzc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlbGVtZW50YXJ5Q2hhcmdlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFbGVtZW50YXJ5Q2hhcmdlLmVsZW1lbnRhcnlDaGFyZ2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZmFyYWRheURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRmFyYWRheS5mYXJhZGF5RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZlcm1pQ291cGxpbmdEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Zlcm1pQ291cGxpbmcuZmVybWlDb3VwbGluZ0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmaW5lU3RydWN0dXJlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGaW5lU3RydWN0dXJlLmZpbmVTdHJ1Y3R1cmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZmlyc3RSYWRpYXRpb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0ZpcnN0UmFkaWF0aW9uLmZpcnN0UmFkaWF0aW9uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdhc0NvbnN0YW50RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNHYXNDb25zdGFudC5nYXNDb25zdGFudERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJncmF2aXRhdGlvbkNvbnN0YW50RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNHcmF2aXRhdGlvbkNvbnN0YW50LmdyYXZpdGF0aW9uQ29uc3RhbnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ3Jhdml0eURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzR3Jhdml0eS5ncmF2aXR5RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImhhcnRyZWVFbmVyZ3lEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0hhcnRyZWVFbmVyZ3kuaGFydHJlZUVuZXJneURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtLmludmVyc2VDb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwia2xpdHppbmdEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0tsaXR6aW5nLmtsaXR6aW5nRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxvc2NobWlkdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTG9zY2htaWR0Lmxvc2NobWlkdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYWduZXRpY0NvbnN0YW50RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNYWduZXRpY0NvbnN0YW50Lm1hZ25ldGljQ29uc3RhbnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWFnbmV0aWNGbHV4UXVhbnR1bURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWFnbmV0aWNGbHV4UXVhbnR1bS5tYWduZXRpY0ZsdXhRdWFudHVtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1vbGFyTWFzc0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTW9sYXJNYXNzLm1vbGFyTWFzc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtb2xhck1hc3NDMTJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01vbGFyTWFzc0MubW9sYXJNYXNzQzEyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1vbGFyUGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01vbGFyUGxhbmNrQ29uc3RhbnQubW9sYXJQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtb2xhclZvbHVtZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTW9sYXJWb2x1bWUubW9sYXJWb2x1bWVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibmV1dHJvbk1hc3NEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc05ldXRyb25NYXNzLm5ldXRyb25NYXNzRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm51Y2xlYXJNYWduZXRvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTnVjbGVhck1hZ25ldG9uLm51Y2xlYXJNYWduZXRvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwbGFuY2tDaGFyZ2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BsYW5ja0NoYXJnZS5wbGFuY2tDaGFyZ2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BsYW5ja0NvbnN0YW50LnBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBsYW5ja0xlbmd0aERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUGxhbmNrTGVuZ3RoLnBsYW5ja0xlbmd0aERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwbGFuY2tNYXNzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNQbGFuY2tNYXNzLnBsYW5ja01hc3NEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGxhbmNrVGVtcGVyYXR1cmVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BsYW5ja1RlbXBlcmF0dXJlLnBsYW5ja1RlbXBlcmF0dXJlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBsYW5ja1RpbWVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BsYW5ja1RpbWUucGxhbmNrVGltZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwcm90b25NYXNzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNQcm90b25NYXNzLnByb3Rvbk1hc3NEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicXVhbnR1bU9mQ2lyY3VsYXRpb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1F1YW50dW1PZkNpcmN1bGF0aW9uLnF1YW50dW1PZkNpcmN1bGF0aW9uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJlZHVjZWRQbGFuY2tDb25zdGFudERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmVkdWNlZFBsYW5ja0NvbnN0YW50LnJlZHVjZWRQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyeWRiZXJnRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSeWRiZXJnLnJ5ZGJlcmdEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2Fja3VyVGV0cm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2Fja3VyVGV0cm9kZS5zYWNrdXJUZXRyb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNlY29uZFJhZGlhdGlvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2Vjb25kUmFkaWF0aW9uLnNlY29uZFJhZGlhdGlvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzcGVlZE9mTGlnaHREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NwZWVkT2ZMaWdodC5zcGVlZE9mTGlnaHREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RlZmFuQm9sdHptYW5uRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTdGVmYW5Cb2x0em1hbm4uc3RlZmFuQm9sdHptYW5uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRob21zb25Dcm9zc1NlY3Rpb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Rob21zb25Dcm9zc1NlY3Rpb24udGhvbXNvbkNyb3NzU2VjdGlvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2YWN1dW1JbXBlZGFuY2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1ZhY3V1bUltcGVkYW5jZS52YWN1dW1JbXBlZGFuY2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwid2Vha01peGluZ0FuZ2xlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNXZWFrTWl4aW5nQW5nbGUud2Vha01peGluZ0FuZ2xlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIndpZW5EaXNwbGFjZW1lbnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1dpZW5EaXNwbGFjZW1lbnQud2llbkRpc3BsYWNlbWVudERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhcHBseVRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXBwbHlUcmFuc2Zvcm0uYXBwbHlUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29sdW1uVHJhbnNmb3JtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb2x1bW5UcmFuc2Zvcm0uY29sdW1uVHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpbHRlclRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRmlsdGVyVHJhbnNmb3JtLmZpbHRlclRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmb3JFYWNoVHJhbnNmb3JtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGb3JFYWNoVHJhbnNmb3JtLmZvckVhY2hUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaW5kZXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0luZGV4VHJhbnNmb3JtLmluZGV4VHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1hcFRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWFwVHJhbnNmb3JtLm1hcFRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01heFRyYW5zZm9ybS5tYXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWVhblRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWVhblRyYW5zZm9ybS5tZWFuVHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1pblRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWluVHJhbnNmb3JtLm1pblRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyYW5nZVRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmFuZ2VUcmFuc2Zvcm0ucmFuZ2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicm93VHJhbnNmb3JtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSb3dUcmFuc2Zvcm0ucm93VHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN1YnNldFRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3Vic2V0VHJhbnNmb3JtLnN1YnNldFRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25jYXRUcmFuc2Zvcm1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvbmNhdFRyYW5zZm9ybS5jb25jYXRUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RkVHJhbnNmb3JtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTdGRUcmFuc2Zvcm0uc3RkVHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN1bVRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3VtVHJhbnNmb3JtLnN1bVRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2YXJpYW5jZVRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVmFyaWFuY2VUcmFuc2Zvcm0udmFyaWFuY2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWxsXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hbGxGYWN0b3JpZXNBbnkuYWxsO1xuICB9XG59KTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmVzdWx0U2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Jlc3VsdFNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmFuZ2VDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZUNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDbG9uZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDbG9uZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0lzSW50ZWdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc051bWVyaWMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSXNOdW1lcmljLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNIYXNOdW1lcmljVmFsdWUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSGFzTnVtZXJpY1ZhbHVlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0lzUG9zaXRpdmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzWmVybyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1plcm8uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTmFOID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0lzTmFOLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlT2YgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVHlwZU9mLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEZXByZWNhdGVkVHlwZW9mID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRUeXBlb2YuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc051bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3RyaW5nID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N0cmluZy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQm9vbGVhbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCb29sZWFuLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdudW1iZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBsZXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZyYWN0aW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGxpdFVuaXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3BsaXRVbml0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VuYXJ5TWludXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuYXJ5UGx1cyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVbmFyeVBsdXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FwcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FwcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDYnJ0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NicnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NlaWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2VpbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ3ViZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDdWJlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFeHAgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXhwLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFeHBtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0V4cG0xLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGbG9vciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGbG9vci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzR2NkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0djZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTGNtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xjbS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTG9nID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvZzEwLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMb2cyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvZzIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01vZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTnRoUm9vdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOdGhSb290LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaWduID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpZ24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3FydC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3F1YXJlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NxdWFyZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1hnY2QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzWGdjZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRG90TXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRG90TXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpdEFuZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCaXRBbmQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpdE5vdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCaXROb3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpdE9yID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JpdE9yLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNCaXRYb3IgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQml0WG9yLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBcmcgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXJnLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25qID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbmouZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ltID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ltLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm90ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05vdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzT3IgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzT3IuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1hvciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNYb3IuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbmNhdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb25jYXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbHVtbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb2x1bW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Nyb3NzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Nyb3NzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaWFnID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RpYWcuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0V5ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFeWUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZpbHRlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGaWx0ZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZsYXR0ZW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmxhdHRlbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRm9yRWFjaCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGb3JFYWNoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNHZXRNYXRyaXhEYXRhVHlwZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHZXRNYXRyaXhEYXRhVHlwZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSWRlbnRpdHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSWRlbnRpdHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0tyb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzS3Jvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWFwID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hcC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzT25lcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPbmVzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5nZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmVzaGFwZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSZXNoYXBlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSZXNpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmVzaXplLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSb3cgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUm93LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxdWVlemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3F1ZWV6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N1YnNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHJhbnNwb3NlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1RyYW5zcG9zZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ3RyYW5zcG9zZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDdHJhbnNwb3NlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNaZXJvcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNaZXJvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXJmID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VyZi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTW9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQcm9kID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Byb2QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Zvcm1hdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGb3JtYXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1ByaW50ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1ByaW50LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUbyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUby5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNQcmltZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1ByaW1lLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOdW1lcmljID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc051bWVyaWMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BvdyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQb3cuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JvdW5kID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JvdW5kLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMb2czID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvZy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTG9nMXAgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTG9nMXAuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc050aFJvb3RzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc050aFJvb3RzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEb3RQb3cgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRG90UG93LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEb3REaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRG90RGl2aWRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMc29sdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTHNvbHZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVc29sdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVXNvbHZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMZWZ0U2hpZnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTGVmdFNoaWZ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSaWdodEFyaXRoU2hpZnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmlnaHRBcml0aFNoaWZ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSaWdodExvZ1NoaWZ0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JpZ2h0TG9nU2hpZnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FuZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBbmQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tcGFyZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmVUZXh0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBhcmVUZXh0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFcXVhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxUZXh0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VxdWFsVGV4dC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTbWFsbGVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTbWFsbGVyRXEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU21hbGxlckVxLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTGFyZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXJFcSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMYXJnZXJFcS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVlcEVxdWFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlZXBFcXVhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5lcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVbmVxdWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJ0aXRpb25TZWxlY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGFydGl0aW9uU2VsZWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTb3J0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NvcnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01heCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01pbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNaW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbmRleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGaWJvbmFjY2lIZWFwQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmlib25hY2NpSGVhcENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGFDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdEZ1bmN0aW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VuaXRGdW5jdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3BhcnNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NwYXJzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ3JlYXRlVW5pdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDcmVhdGVVbml0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBY29zID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Fjb3NoID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3NoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBY290ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Fjb3RoID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3RoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBY3NjID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjc2MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Fjc2NoID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjc2NoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBc2VjID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzZWMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FzZWNoID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzZWNoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBc2luID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzaW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FzaW5oID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzaW5oLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBdGFuID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0F0YW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0F0YW4yID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0F0YW4yLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBdGFuaCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBdGFuaC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29zID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Nvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29zaCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb3NoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ290LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb3RoID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvdGguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NzYyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDc2MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NzY2ggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ3NjaC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2VjID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NlYy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2VjaCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZWNoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2luLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaW5oID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpbmguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1RhbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUYW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1RhbmggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVGFuaC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0Q2FydGVzaWFuID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NldENhcnRlc2lhbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0RGlmZmVyZW5jZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXREaWZmZXJlbmNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTZXREaXN0aW5jdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXREaXN0aW5jdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0SW50ZXJzZWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NldEludGVyc2VjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0SXNTdWJzZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0SXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NldE11bHRpcGxpY2l0eSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXRNdWx0aXBsaWNpdHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NldFBvd2Vyc2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NldFBvd2Vyc2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTZXRTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NldFNpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NldFN5bURpZmZlcmVuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0U3ltRGlmZmVyZW5jZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0VW5pb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0VW5pb24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0h5cG90ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0h5cG90LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05vcm0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RvdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEb3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1RyYWNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1RyYWNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbmRleC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBY2Nlc3Nvck5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWNjZXNzb3JOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBcnJheU5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXJyYXlOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBc3NpZ25tZW50Tm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBc3NpZ25tZW50Tm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmxvY2tOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Jsb2NrTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uZGl0aW9uYWxOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbmRpdGlvbmFsTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbnN0YW50Tm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW5kZXhOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNPYmplY3ROb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc09iamVjdE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPcGVyYXRvck5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcmVudGhlc2lzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JhbmdlTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZU5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JlbGF0aW9uYWxOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JlbGF0aW9uYWxOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N5bWJvbE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BhcnNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21waWxlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBpbGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0V2YWx1YXRlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0V2YWx1YXRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEZXByZWNhdGVkRXZhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEZXByZWNhdGVkRXZhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyc2VyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGFyc2VyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnNlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJzZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0x1cCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMdXAuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1FyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1FyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTbHUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2x1LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMdXNvbHZlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0x1c29sdmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0hlbHBDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNIZWxwQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NoYWluQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2hhaW5DbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSGVscCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNIZWxwLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDaGFpbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDaGFpbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGV0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW52ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ludi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRWlncyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFaWdzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFeHBtMiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFeHBtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcXJ0bSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcXJ0bS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RpdmlkZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGlzdGFuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGlzdGFuY2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ludGVyc2VjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbnRlcnNlY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1bSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdW0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01lYW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWVhbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWVkaWFuID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01lZGlhbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWFkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVmFyaWFuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVmFyaWFuY2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRWYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGVwcmVjYXRlZFZhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUXVhbnRpbGVTZXEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUXVhbnRpbGVTZXEuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N0ZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9uc1dpdGhSZXAgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tYmluYXRpb25zV2l0aFJlcC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzR2FtbWEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzR2FtbWEuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZhY3RvcmlhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGYWN0b3JpYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0tsZGl2ZXJnZW5jZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNLbGRpdmVyZ2VuY2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpbm9taWFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc011bHRpbm9taWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQZXJtdXRhdGlvbnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGVybXV0YXRpb25zLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQaWNrUmFuZG9tID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BpY2tSYW5kb20uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JhbmRvbSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5kb20uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JhbmRvbUludCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5kb21JbnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N0aXJsaW5nUyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdGlybGluZ1MyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNCZWxsTnVtYmVycyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCZWxsTnVtYmVycy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ2F0YWxhbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDYXRhbGFuLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wb3NpdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21wb3NpdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2ltcGxpZnkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2ltcGxpZnkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Rlcml2YXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGVyaXZhdGl2ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmF0aW9uYWxpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmF0aW9uYWxpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1Jldml2ZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmV2aXZlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmVwbGFjZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmVwbGFjZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVXBwZXJjYXNlRSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVcHBlcmNhc2VFLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGYWxzZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGYWxzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmZpbml0eSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbmZpbml0eS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTE4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTE4xMC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTE4yID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xOMi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTE9HMTBFID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xPRzEwRS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTE9HMkUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTE9HMkUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc05hTiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOYU4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc051bGwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnVsbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGhpID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BoaS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VwcGVyY2FzZVBpID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VwcGVyY2FzZVBpLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTUVJUMV8gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU1FSVDFfMi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU1FSVCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTUVJUMi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVGF1ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1RhdS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHJ1ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUcnVlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNWZXJzaW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1ZlcnNpb24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0F0b21pY01hc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXRvbWljTWFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQXZvZ2Fkcm8gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXZvZ2Fkcm8uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0JvaHJNYWduZXRvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCb2hyTWFnbmV0b24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0JvaHJSYWRpdXMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQm9oclJhZGl1cy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQm9sdHptYW5uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JvbHR6bWFubi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ2xhc3NpY2FsRWxlY3Ryb25SYWRpdXMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2xhc3NpY2FsRWxlY3Ryb25SYWRpdXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbmR1Y3RhbmNlUXVhbnR1bSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb25kdWN0YW5jZVF1YW50dW0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvdWxvbWIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ291bG9tYi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGV1dGVyb25NYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RldXRlcm9uTWFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRWZpbW92RmFjdG9yID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VmaW1vdkZhY3Rvci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRWxlY3RyaWNDb25zdGFudCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFbGVjdHJpY0NvbnN0YW50LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFbGVjdHJvbk1hc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRWxlY3Ryb25NYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFbGVtZW50YXJ5Q2hhcmdlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VsZW1lbnRhcnlDaGFyZ2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZhcmFkYXkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmFyYWRheS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRmVybWlDb3VwbGluZyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGZXJtaUNvdXBsaW5nLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGaW5lU3RydWN0dXJlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpbmVTdHJ1Y3R1cmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZpcnN0UmFkaWF0aW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpcnN0UmFkaWF0aW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNHYXNDb25zdGFudCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHYXNDb25zdGFudC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzR3Jhdml0YXRpb25Db25zdGFudCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHcmF2aXRhdGlvbkNvbnN0YW50LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNHcmF2aXR5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0dyYXZpdHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0hhcnRyZWVFbmVyZ3kgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSGFydHJlZUVuZXJneS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNLbGl0emluZyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNLbGl0emluZy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTG9zY2htaWR0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvc2NobWlkdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWFnbmV0aWNDb25zdGFudCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYWduZXRpY0NvbnN0YW50LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYWduZXRpY0ZsdXhRdWFudHVtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hZ25ldGljRmx1eFF1YW50dW0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01vbGFyTWFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2xhck1hc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01vbGFyTWFzc0MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTW9sYXJNYXNzQzEyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNb2xhclBsYW5ja0NvbnN0YW50ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01vbGFyUGxhbmNrQ29uc3RhbnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01vbGFyVm9sdW1lID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01vbGFyVm9sdW1lLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOZXV0cm9uTWFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOZXV0cm9uTWFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTnVjbGVhck1hZ25ldG9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc051Y2xlYXJNYWduZXRvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGxhbmNrQ2hhcmdlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BsYW5ja0NoYXJnZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGxhbmNrQ29uc3RhbnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrQ29uc3RhbnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BsYW5ja0xlbmd0aCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQbGFuY2tMZW5ndGguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BsYW5ja01hc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrTWFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGxhbmNrVGVtcGVyYXR1cmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrVGVtcGVyYXR1cmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BsYW5ja1RpbWUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrVGltZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUHJvdG9uTWFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQcm90b25NYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNRdWFudHVtT2ZDaXJjdWxhdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNRdWFudHVtT2ZDaXJjdWxhdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmVkdWNlZFBsYW5ja0NvbnN0YW50ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JlZHVjZWRQbGFuY2tDb25zdGFudC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUnlkYmVyZyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSeWRiZXJnLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTYWNrdXJUZXRyb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NhY2t1clRldHJvZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NlY29uZFJhZGlhdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZWNvbmRSYWRpYXRpb24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NwZWVkT2ZMaWdodCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGVlZE9mTGlnaHQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N0ZWZhbkJvbHR6bWFubiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdGVmYW5Cb2x0em1hbm4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1Rob21zb25Dcm9zc1NlY3Rpb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVGhvbXNvbkNyb3NzU2VjdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVmFjdXVtSW1wZWRhbmNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1ZhY3V1bUltcGVkYW5jZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzV2Vha01peGluZ0FuZ2xlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1dlYWtNaXhpbmdBbmdsZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzV2llbkRpc3BsYWNlbWVudCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNXaWVuRGlzcGxhY2VtZW50LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBcHBseVRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBcHBseVRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29sdW1uVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbHVtblRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRmlsdGVyVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpbHRlclRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRm9yRWFjaFRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGb3JFYWNoVHJhbnNmb3JtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleFRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbmRleFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWFwVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hcFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF4VHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01heFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWVhblRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNZWFuVHJhbnNmb3JtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNaW5UcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWluVHJhbnNmb3JtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5nZVRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZVRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUm93VHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Jvd1RyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0VHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N1YnNldFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uY2F0VHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbmNhdFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3RkVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N0ZFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VtVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N1bVRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVmFyaWFuY2VUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVmFyaWFuY2VUcmFuc2Zvcm0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2FsbEZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuL2FsbEZhY3Rvcmllc0FueS5qc1wiKTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWJzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYWJzRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBYnM6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQWJzXG59O1xuZXhwb3J0cy5hYnNEZXBlbmRlbmNpZXMgPSBhYnNEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkFjY2Vzc29yTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIEFjY2Vzc29yTm9kZURlcGVuZGVuY2llcyA9IHtcbiAgTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcyxcbiAgc3Vic2V0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3Vic2V0LnN1YnNldERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQWNjZXNzb3JOb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFjY2Vzc29yTm9kZVxufTtcbmV4cG9ydHMuQWNjZXNzb3JOb2RlRGVwZW5kZW5jaWVzID0gQWNjZXNzb3JOb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hY29zRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhY29zRGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFjb3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNvc1xufTtcbmV4cG9ydHMuYWNvc0RlcGVuZGVuY2llcyA9IGFjb3NEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFjb3NoRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhY29zaERlcGVuZGVuY2llcyA9IHtcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBY29zaDogX2ZhY3Rvcmllc0FueS5jcmVhdGVBY29zaFxufTtcbmV4cG9ydHMuYWNvc2hEZXBlbmRlbmNpZXMgPSBhY29zaERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNvdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFjb3REZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQWNvdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVBY290XG59O1xuZXhwb3J0cy5hY290RGVwZW5kZW5jaWVzID0gYWNvdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNvdGhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFjb3RoRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQWNvdGg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNvdGhcbn07XG5leHBvcnRzLmFjb3RoRGVwZW5kZW5jaWVzID0gYWNvdGhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFjc2NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFjc2NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBY3NjOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFjc2Ncbn07XG5leHBvcnRzLmFjc2NEZXBlbmRlbmNpZXMgPSBhY3NjRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hY3NjaERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFjc2NoRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFjc2NoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFjc2NoXG59O1xuZXhwb3J0cy5hY3NjaERlcGVuZGVuY2llcyA9IGFjc2NoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hZGREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFkZERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBTcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5TcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFkZDogX2ZhY3Rvcmllc0FueS5jcmVhdGVBZGRcbn07XG5leHBvcnRzLmFkZERlcGVuZGVuY2llcyA9IGFkZERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWRkU2NhbGFyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYWRkU2NhbGFyRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBZGRTY2FsYXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQWRkU2NhbGFyXG59O1xuZXhwb3J0cy5hZGRTY2FsYXJEZXBlbmRlbmNpZXMgPSBhZGRTY2FsYXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFuZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc05vdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzWmVyb3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNaZXJvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhbmREZXBlbmRlbmNpZXMgPSB7XG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG5vdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vdC5ub3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHplcm9zRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzWmVyb3MuemVyb3NEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFuZDogX2ZhY3Rvcmllc0FueS5jcmVhdGVBbmRcbn07XG5leHBvcnRzLmFuZERlcGVuZGVuY2llcyA9IGFuZERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXBwbHlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFwcGx5RGVwZW5kZW5jaWVzID0ge1xuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBcHBseTogX2ZhY3Rvcmllc0FueS5jcmVhdGVBcHBseVxufTtcbmV4cG9ydHMuYXBwbHlEZXBlbmRlbmNpZXMgPSBhcHBseURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXBwbHlUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFwcGx5VHJhbnNmb3JtRGVwZW5kZW5jaWVzID0ge1xuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBcHBseVRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVBcHBseVRyYW5zZm9ybVxufTtcbmV4cG9ydHMuYXBwbHlUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSBhcHBseVRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXJnRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXJnRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBcmc6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQXJnXG59O1xuZXhwb3J0cy5hcmdEZXBlbmRlbmNpZXMgPSBhcmdEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkFycmF5Tm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBBcnJheU5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFycmF5Tm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVBcnJheU5vZGVcbn07XG5leHBvcnRzLkFycmF5Tm9kZURlcGVuZGVuY2llcyA9IEFycmF5Tm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXNlY0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXNlY0RlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFzZWM6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQXNlY1xufTtcbmV4cG9ydHMuYXNlY0RlcGVuZGVuY2llcyA9IGFzZWNEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFzZWNoRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhc2VjaERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFzZWNoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFzZWNoXG59O1xuZXhwb3J0cy5hc2VjaERlcGVuZGVuY2llcyA9IGFzZWNoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hc2luRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhc2luRGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFzaW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlQXNpblxufTtcbmV4cG9ydHMuYXNpbkRlcGVuZGVuY2llcyA9IGFzaW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFzaW5oRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXNpbmhEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFzaW5oOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFzaW5oXG59O1xuZXhwb3J0cy5hc2luaERlcGVuZGVuY2llcyA9IGFzaW5oRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJzZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFzc2lnbm1lbnROb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFzc2lnbm1lbnROb2RlXG59O1xuZXhwb3J0cy5Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcyA9IEFzc2lnbm1lbnROb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hdGFuRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXRhbkRlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQXRhbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVBdGFuXG59O1xuZXhwb3J0cy5hdGFuRGVwZW5kZW5jaWVzID0gYXRhbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXRhbjJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhdGFuMkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUF0YW4yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUF0YW4yXG59O1xuZXhwb3J0cy5hdGFuMkRlcGVuZGVuY2llcyA9IGF0YW4yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hdGFuaERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXRhbmhEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQXRhbmg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQXRhbmhcbn07XG5leHBvcnRzLmF0YW5oRGVwZW5kZW5jaWVzID0gYXRhbmhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmF0b21pY01hc3NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGF0b21pY01hc3NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBdG9taWNNYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUF0b21pY01hc3Ncbn07XG5leHBvcnRzLmF0b21pY01hc3NEZXBlbmRlbmNpZXMgPSBhdG9taWNNYXNzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hdm9nYWRyb0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXZvZ2Fkcm9EZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBdm9nYWRybzogX2ZhY3Rvcmllc0FueS5jcmVhdGVBdm9nYWRyb1xufTtcbmV4cG9ydHMuYXZvZ2Fkcm9EZXBlbmRlbmNpZXMgPSBhdm9nYWRyb0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYmVsbE51bWJlcnNEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc0ludGVnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc0ludGVnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTmVnYXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdGlybGluZ1MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdGlybGluZ1MyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJlbGxOdW1iZXJzRGVwZW5kZW5jaWVzID0ge1xuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICBpc05lZ2F0aXZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZS5pc05lZ2F0aXZlRGVwZW5kZW5jaWVzLFxuICBzdGlybGluZ1MyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3RpcmxpbmdTLnN0aXJsaW5nUzJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUJlbGxOdW1iZXJzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJlbGxOdW1iZXJzXG59O1xuZXhwb3J0cy5iZWxsTnVtYmVyc0RlcGVuZGVuY2llcyA9IGJlbGxOdW1iZXJzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBCaWdOdW1iZXJEZXBlbmRlbmNpZXMgPSB7XG4gIGNyZWF0ZUJpZ051bWJlckNsYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpZ051bWJlckNsYXNzXG59O1xuZXhwb3J0cy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMgPSBCaWdOdW1iZXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpZ251bWJlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJpZ251bWJlckRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVCaWdudW1iZXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQmlnbnVtYmVyXG59O1xuZXhwb3J0cy5iaWdudW1iZXJEZXBlbmRlbmNpZXMgPSBiaWdudW1iZXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdEFuZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYml0QW5kRGVwZW5kZW5jaWVzID0ge1xuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVCaXRBbmQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQml0QW5kXG59O1xuZXhwb3J0cy5iaXRBbmREZXBlbmRlbmNpZXMgPSBiaXRBbmREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdE5vdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJpdE5vdERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQml0Tm90OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpdE5vdFxufTtcbmV4cG9ydHMuYml0Tm90RGVwZW5kZW5jaWVzID0gYml0Tm90RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iaXRPckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJpdE9yRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUJpdE9yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpdE9yXG59O1xuZXhwb3J0cy5iaXRPckRlcGVuZGVuY2llcyA9IGJpdE9yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iaXRYb3JEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBiaXRYb3JEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQml0WG9yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpdFhvclxufTtcbmV4cG9ydHMuYml0WG9yRGVwZW5kZW5jaWVzID0gYml0WG9yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5CbG9ja05vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1Jlc3VsdFNldCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Jlc3VsdFNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBCbG9ja05vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIFJlc3VsdFNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1Jlc3VsdFNldC5SZXN1bHRTZXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUJsb2NrTm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVCbG9ja05vZGVcbn07XG5leHBvcnRzLkJsb2NrTm9kZURlcGVuZGVuY2llcyA9IEJsb2NrTm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYm9ock1hZ25ldG9uRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBib2hyTWFnbmV0b25EZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVCb2hyTWFnbmV0b246IF9mYWN0b3JpZXNBbnkuY3JlYXRlQm9ock1hZ25ldG9uXG59O1xuZXhwb3J0cy5ib2hyTWFnbmV0b25EZXBlbmRlbmNpZXMgPSBib2hyTWFnbmV0b25EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJvaHJSYWRpdXNEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJvaHJSYWRpdXNEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVCb2hyUmFkaXVzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJvaHJSYWRpdXNcbn07XG5leHBvcnRzLmJvaHJSYWRpdXNEZXBlbmRlbmNpZXMgPSBib2hyUmFkaXVzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ib2x0em1hbm5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJvbHR6bWFubkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUJvbHR6bWFubjogX2ZhY3Rvcmllc0FueS5jcmVhdGVCb2x0em1hbm5cbn07XG5leHBvcnRzLmJvbHR6bWFubkRlcGVuZGVuY2llcyA9IGJvbHR6bWFubkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYm9vbGVhbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJvb2xlYW5EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUJvb2xlYW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlQm9vbGVhblxufTtcbmV4cG9ydHMuYm9vbGVhbkRlcGVuZGVuY2llcyA9IGJvb2xlYW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNhdGFsYW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjYXRhbGFuRGVwZW5kZW5jaWVzID0ge1xuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBjb21iaW5hdGlvbnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMuY29tYmluYXRpb25zRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICBpc05lZ2F0aXZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZS5pc05lZ2F0aXZlRGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDYXRhbGFuOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNhdGFsYW5cbn07XG5leHBvcnRzLmNhdGFsYW5EZXBlbmRlbmNpZXMgPSBjYXRhbGFuRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jYnJ0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTmVnYXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuYXJ5TWludXMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNicnREZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICBGcmFjdGlvbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuRnJhY3Rpb25EZXBlbmRlbmNpZXMsXG4gIGlzTmVnYXRpdmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmlzTmVnYXRpdmVEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHVuYXJ5TWludXNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLnVuYXJ5TWludXNEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNicnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2JydFxufTtcbmV4cG9ydHMuY2JydERlcGVuZGVuY2llcyA9IGNicnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNlaWxEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzUm91bmQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSb3VuZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjZWlsRGVwZW5kZW5jaWVzID0ge1xuICByb3VuZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1JvdW5kLnJvdW5kRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDZWlsOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNlaWxcbn07XG5leHBvcnRzLmNlaWxEZXBlbmRlbmNpZXMgPSBjZWlsRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jaGFpbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDaGFpbkNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ2hhaW5DbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjaGFpbkRlcGVuZGVuY2llcyA9IHtcbiAgQ2hhaW5EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDaGFpbkNsYXNzLkNoYWluRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDaGFpbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVDaGFpblxufTtcbmV4cG9ydHMuY2hhaW5EZXBlbmRlbmNpZXMgPSBjaGFpbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQ2hhaW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBDaGFpbkRlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlQ2hhaW5DbGFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVDaGFpbkNsYXNzXG59O1xuZXhwb3J0cy5DaGFpbkRlcGVuZGVuY2llcyA9IENoYWluRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jbGFzc2ljYWxFbGVjdHJvblJhZGl1c0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXNEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDbGFzc2ljYWxFbGVjdHJvblJhZGl1czogX2ZhY3Rvcmllc0FueS5jcmVhdGVDbGFzc2ljYWxFbGVjdHJvblJhZGl1c1xufTtcbmV4cG9ydHMuY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXNEZXBlbmRlbmNpZXMgPSBjbGFzc2ljYWxFbGVjdHJvblJhZGl1c0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY2xvbmVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjbG9uZURlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ2xvbmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2xvbmVcbn07XG5leHBvcnRzLmNsb25lRGVwZW5kZW5jaWVzID0gY2xvbmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbHVtbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5nZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1JhbmdlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvbHVtbkRlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICByYW5nZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1JhbmdlLnJhbmdlRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb2x1bW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29sdW1uXG59O1xuZXhwb3J0cy5jb2x1bW5EZXBlbmRlbmNpZXMgPSBjb2x1bW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbHVtblRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5nZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1JhbmdlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvbHVtblRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICByYW5nZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1JhbmdlLnJhbmdlRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb2x1bW5UcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29sdW1uVHJhbnNmb3JtXG59O1xuZXhwb3J0cy5jb2x1bW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSBjb2x1bW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbWJpbmF0aW9uc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvbWJpbmF0aW9uc0RlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29tYmluYXRpb25zOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbWJpbmF0aW9uc1xufTtcbmV4cG9ydHMuY29tYmluYXRpb25zRGVwZW5kZW5jaWVzID0gY29tYmluYXRpb25zRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb21iaW5hdGlvbnNXaXRoUmVwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY29tYmluYXRpb25zV2l0aFJlcERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29tYmluYXRpb25zV2l0aFJlcDogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21iaW5hdGlvbnNXaXRoUmVwXG59O1xuZXhwb3J0cy5jb21iaW5hdGlvbnNXaXRoUmVwRGVwZW5kZW5jaWVzID0gY29tYmluYXRpb25zV2l0aFJlcERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcGFyZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb21wYXJlRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgRnJhY3Rpb25EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLkZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb21wYXJlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbXBhcmVcbn07XG5leHBvcnRzLmNvbXBhcmVEZXBlbmRlbmNpZXMgPSBjb21wYXJlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGFyZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcyA9IHtcbiAgY29tcGFyZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBhcmUuY29tcGFyZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29tcGFyZU5hdHVyYWw6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGFyZU5hdHVyYWxcbn07XG5leHBvcnRzLmNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzID0gY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbXBhcmVUZXh0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb21wYXJlVGV4dERlcGVuZGVuY2llcyA9IHtcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29tcGFyZVRleHQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGFyZVRleHRcbn07XG5leHBvcnRzLmNvbXBhcmVUZXh0RGVwZW5kZW5jaWVzID0gY29tcGFyZVRleHREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbXBpbGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyc2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb21waWxlRGVwZW5kZW5jaWVzID0ge1xuICBwYXJzZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcnNlLnBhcnNlRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb21waWxlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbXBpbGVcbn07XG5leHBvcnRzLmNvbXBpbGVEZXBlbmRlbmNpZXMgPSBjb21waWxlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb21wbGV4RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb21wbGV4RGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbXBsZXg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGxleFxufTtcbmV4cG9ydHMuY29tcGxleERlcGVuZGVuY2llcyA9IGNvbXBsZXhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkNvbXBsZXhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBDb21wbGV4RGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVDb21wbGV4Q2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGxleENsYXNzXG59O1xuZXhwb3J0cy5Db21wbGV4RGVwZW5kZW5jaWVzID0gQ29tcGxleERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcG9zaXRpb25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzSW50ZWdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzSW50ZWdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzTmVnYXRpdmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzUG9zaXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY29tcG9zaXRpb25EZXBlbmRlbmNpZXMgPSB7XG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGNvbWJpbmF0aW9uc0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucy5jb21iaW5hdGlvbnNEZXBlbmRlbmNpZXMsXG4gIGlzSW50ZWdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzSW50ZWdlci5pc0ludGVnZXJEZXBlbmRlbmNpZXMsXG4gIGlzTmVnYXRpdmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmlzTmVnYXRpdmVEZXBlbmRlbmNpZXMsXG4gIGlzUG9zaXRpdmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlLmlzUG9zaXRpdmVEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbXBvc2l0aW9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbXBvc2l0aW9uXG59O1xuZXhwb3J0cy5jb21wb3NpdGlvbkRlcGVuZGVuY2llcyA9IGNvbXBvc2l0aW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb25jYXREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY29uY2F0RGVwZW5kZW5jaWVzID0ge1xuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb25jYXQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29uY2F0XG59O1xuZXhwb3J0cy5jb25jYXREZXBlbmRlbmNpZXMgPSBjb25jYXREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbmNhdFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJc0ludGVnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc0ludGVnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb25jYXRUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIGlzSW50ZWdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzSW50ZWdlci5pc0ludGVnZXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbmNhdFRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25jYXRUcmFuc2Zvcm1cbn07XG5leHBvcnRzLmNvbmNhdFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IGNvbmNhdFRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIENvbmRpdGlvbmFsTm9kZURlcGVuZGVuY2llcyA9IHtcbiAgTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29uZGl0aW9uYWxOb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbmRpdGlvbmFsTm9kZVxufTtcbmV4cG9ydHMuQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzID0gQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbmR1Y3RhbmNlUXVhbnR1bTogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25kdWN0YW5jZVF1YW50dW1cbn07XG5leHBvcnRzLmNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llcyA9IGNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29uakRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvbmpEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbmo6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29ualxufTtcbmV4cG9ydHMuY29uakRlcGVuZGVuY2llcyA9IGNvbmpEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkNvbnN0YW50Tm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBDb25zdGFudE5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbnN0YW50Tm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25zdGFudE5vZGVcbn07XG5leHBvcnRzLkNvbnN0YW50Tm9kZURlcGVuZGVuY2llcyA9IENvbnN0YW50Tm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29zRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY29zRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29zXG59O1xuZXhwb3J0cy5jb3NEZXBlbmRlbmNpZXMgPSBjb3NEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvc2hEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb3NoRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb3NoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvc2hcbn07XG5leHBvcnRzLmNvc2hEZXBlbmRlbmNpZXMgPSBjb3NoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb3REZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb3REZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ290OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvdFxufTtcbmV4cG9ydHMuY290RGVwZW5kZW5jaWVzID0gY290RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb3RoRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY290aERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb3RoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvdGhcbn07XG5leHBvcnRzLmNvdGhEZXBlbmRlbmNpZXMgPSBjb3RoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb3Vsb21iRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb3Vsb21iRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ291bG9tYjogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb3Vsb21iXG59O1xuZXhwb3J0cy5jb3Vsb21iRGVwZW5kZW5jaWVzID0gY291bG9tYkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVW5pdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY3JlYXRlVW5pdERlcGVuZGVuY2llcyA9IHtcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDcmVhdGVVbml0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNyZWF0ZVVuaXRcbn07XG5leHBvcnRzLmNyZWF0ZVVuaXREZXBlbmRlbmNpZXMgPSBjcmVhdGVVbml0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcm9zc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY3Jvc3NEZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNyb3NzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNyb3NzXG59O1xuZXhwb3J0cy5jcm9zc0RlcGVuZGVuY2llcyA9IGNyb3NzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc2NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjc2NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ3NjOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNzY1xufTtcbmV4cG9ydHMuY3NjRGVwZW5kZW5jaWVzID0gY3NjRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc2NoRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY3NjaERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDc2NoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNzY2hcbn07XG5leHBvcnRzLmNzY2hEZXBlbmRlbmNpZXMgPSBjc2NoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jdHJhbnNwb3NlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbmogPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb25qLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUcmFuc3Bvc2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUcmFuc3Bvc2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY3RyYW5zcG9zZURlcGVuZGVuY2llcyA9IHtcbiAgY29uakRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbmouY29uakRlcGVuZGVuY2llcyxcbiAgdHJhbnNwb3NlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHJhbnNwb3NlLnRyYW5zcG9zZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ3RyYW5zcG9zZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVDdHJhbnNwb3NlXG59O1xuZXhwb3J0cy5jdHJhbnNwb3NlRGVwZW5kZW5jaWVzID0gY3RyYW5zcG9zZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3ViZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGN1YmVEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUN1YmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ3ViZVxufTtcbmV4cG9ydHMuY3ViZURlcGVuZGVuY2llcyA9IGN1YmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZXBFcXVhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGRlZXBFcXVhbERlcGVuZGVuY2llcyA9IHtcbiAgZXF1YWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbC5lcXVhbERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRGVlcEVxdWFsOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURlZXBFcXVhbFxufTtcbmV4cG9ydHMuZGVlcEVxdWFsRGVwZW5kZW5jaWVzID0gZGVlcEVxdWFsRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzID0ge1xuICBNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcy5NYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURlbnNlTWF0cml4Q2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGVuc2VNYXRyaXhDbGFzc1xufTtcbmV4cG9ydHMuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMgPSBEZW5zZU1hdHJpeERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXZhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFdmFsdWF0ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0V2YWx1YXRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGV2YWxEZXBlbmRlbmNpZXMgPSB7XG4gIGV2YWx1YXRlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXZhbHVhdGUuZXZhbHVhdGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURlcHJlY2F0ZWRFdmFsOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURlcHJlY2F0ZWRFdmFsXG59O1xuZXhwb3J0cy5ldmFsRGVwZW5kZW5jaWVzID0gZXZhbERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudHlwZW9mRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdHlwZW9mRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVEZXByZWNhdGVkVHlwZW9mOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURlcHJlY2F0ZWRUeXBlb2Zcbn07XG5leHBvcnRzLnR5cGVvZkRlcGVuZGVuY2llcyA9IHR5cGVvZkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudmFyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1ZhcmlhbmNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVmFyaWFuY2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdmFyRGVwZW5kZW5jaWVzID0ge1xuICB2YXJpYW5jZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1ZhcmlhbmNlLnZhcmlhbmNlRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEZXByZWNhdGVkVmFyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURlcHJlY2F0ZWRWYXJcbn07XG5leHBvcnRzLnZhckRlcGVuZGVuY2llcyA9IHZhckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVyaXZhdGl2ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzT3BlcmF0b3JOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzT3BlcmF0b3JOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N5bWJvbE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc1plcm8gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc1plcm8uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc051bWVyaWMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOdW1lcmljLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJzZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaW1wbGlmeSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpbXBsaWZ5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGRlcml2YXRpdmVEZXBlbmRlbmNpZXMgPSB7XG4gIENvbnN0YW50Tm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbnN0YW50Tm9kZS5Db25zdGFudE5vZGVEZXBlbmRlbmNpZXMsXG4gIEZ1bmN0aW9uTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZS5GdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXMsXG4gIE9wZXJhdG9yTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZS5PcGVyYXRvck5vZGVEZXBlbmRlbmNpZXMsXG4gIFBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcmVudGhlc2lzTm9kZS5QYXJlbnRoZXNpc05vZGVEZXBlbmRlbmNpZXMsXG4gIFN5bWJvbE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlLlN5bWJvbE5vZGVEZXBlbmRlbmNpZXMsXG4gIGVxdWFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWwuZXF1YWxEZXBlbmRlbmNpZXMsXG4gIGlzWmVyb0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzWmVyby5pc1plcm9EZXBlbmRlbmNpZXMsXG4gIG51bWVyaWNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOdW1lcmljLm51bWVyaWNEZXBlbmRlbmNpZXMsXG4gIHBhcnNlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFyc2UucGFyc2VEZXBlbmRlbmNpZXMsXG4gIHNpbXBsaWZ5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2ltcGxpZnkuc2ltcGxpZnlEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURlcml2YXRpdmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGVyaXZhdGl2ZVxufTtcbmV4cG9ydHMuZGVyaXZhdGl2ZURlcGVuZGVuY2llcyA9IGRlcml2YXRpdmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRldERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNMdXAgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMdXAuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5hcnlNaW51cyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuYXJ5TWludXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZGV0RGVwZW5kZW5jaWVzID0ge1xuICBsdXBEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNMdXAubHVwRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICB1bmFyeU1pbnVzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5hcnlNaW51cy51bmFyeU1pbnVzRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEZXQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGV0XG59O1xuZXhwb3J0cy5kZXREZXBlbmRlbmNpZXMgPSBkZXREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRldXRlcm9uTWFzc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZGV1dGVyb25NYXNzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRGV1dGVyb25NYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURldXRlcm9uTWFzc1xufTtcbmV4cG9ydHMuZGV1dGVyb25NYXNzRGVwZW5kZW5jaWVzID0gZGV1dGVyb25NYXNzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kaWFnRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZGlhZ0RlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBTcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5TcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURpYWc6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGlhZ1xufTtcbmV4cG9ydHMuZGlhZ0RlcGVuZGVuY2llcyA9IGRpYWdEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRpc3RhbmNlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcXJ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5hcnlNaW51cy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBkaXN0YW5jZURlcGVuZGVuY2llcyA9IHtcbiAgYWJzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWJzLmFic0RlcGVuZGVuY2llcyxcbiAgYWRkU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmFkZFNjYWxhckRlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgc3FydERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NxcnQuc3FydERlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgdW5hcnlNaW51c0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuYXJ5TWludXMudW5hcnlNaW51c0RlcGVuZGVuY2llcyxcbiAgY3JlYXRlRGlzdGFuY2U6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGlzdGFuY2Vcbn07XG5leHBvcnRzLmRpc3RhbmNlRGVwZW5kZW5jaWVzID0gZGlzdGFuY2VEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRpdmlkZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ludiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ludi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGRpdmlkZURlcGVuZGVuY2llcyA9IHtcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgaW52RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW52LmludkRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRGl2aWRlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURpdmlkZVxufTtcbmV4cG9ydHMuZGl2aWRlRGVwZW5kZW5jaWVzID0gZGl2aWRlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTnVtZXJpYyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc051bWVyaWMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzID0ge1xuICBudW1lcmljRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTnVtZXJpYy5udW1lcmljRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEaXZpZGVTY2FsYXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRGl2aWRlU2NhbGFyXG59O1xuZXhwb3J0cy5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMgPSBkaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRvdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZG90RGVwZW5kZW5jaWVzID0ge1xuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEb3Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRG90XG59O1xuZXhwb3J0cy5kb3REZXBlbmRlbmNpZXMgPSBkb3REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRvdERpdmlkZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZG90RGl2aWRlRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURvdERpdmlkZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVEb3REaXZpZGVcbn07XG5leHBvcnRzLmRvdERpdmlkZURlcGVuZGVuY2llcyA9IGRvdERpdmlkZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZG90TXVsdGlwbHlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGRvdE11bHRpcGx5RGVwZW5kZW5jaWVzID0ge1xuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEb3RNdWx0aXBseTogX2ZhY3Rvcmllc0FueS5jcmVhdGVEb3RNdWx0aXBseVxufTtcbmV4cG9ydHMuZG90TXVsdGlwbHlEZXBlbmRlbmNpZXMgPSBkb3RNdWx0aXBseURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZG90UG93RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BvdyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Bvdy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBkb3RQb3dEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgcG93RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUG93LnBvd0RlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRG90UG93OiBfZmFjdG9yaWVzQW55LmNyZWF0ZURvdFBvd1xufTtcbmV4cG9ydHMuZG90UG93RGVwZW5kZW5jaWVzID0gZG90UG93RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUVcbn07XG5leHBvcnRzLmVEZXBlbmRlbmNpZXMgPSBlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lZmltb3ZGYWN0b3JEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBlZmltb3ZGYWN0b3JEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlRWZpbW92RmFjdG9yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUVmaW1vdkZhY3RvclxufTtcbmV4cG9ydHMuZWZpbW92RmFjdG9yRGVwZW5kZW5jaWVzID0gZWZpbW92RmFjdG9yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5laWdzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0F0YW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBdGFuLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdudW1iZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdudW1iZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Nvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW52ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW52LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NpbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Npbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBlaWdzRGVwZW5kZW5jaWVzID0ge1xuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBhdGFuRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQXRhbi5hdGFuRGVwZW5kZW5jaWVzLFxuICBiaWdudW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdudW1iZXIuYmlnbnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjb3NEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb3MuY29zRGVwZW5kZW5jaWVzLFxuICBlcXVhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsLmVxdWFsRGVwZW5kZW5jaWVzLFxuICBpbnZEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbnYuaW52RGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICBzaW5EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaW4uc2luRGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFaWdzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUVpZ3Ncbn07XG5leHBvcnRzLmVpZ3NEZXBlbmRlbmNpZXMgPSBlaWdzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lbGVjdHJpY0NvbnN0YW50RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBlbGVjdHJpY0NvbnN0YW50RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRWxlY3RyaWNDb25zdGFudDogX2ZhY3Rvcmllc0FueS5jcmVhdGVFbGVjdHJpY0NvbnN0YW50XG59O1xuZXhwb3J0cy5lbGVjdHJpY0NvbnN0YW50RGVwZW5kZW5jaWVzID0gZWxlY3RyaWNDb25zdGFudERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZWxlY3Ryb25NYXNzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBlbGVjdHJvbk1hc3NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFbGVjdHJvbk1hc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRWxlY3Ryb25NYXNzXG59O1xuZXhwb3J0cy5lbGVjdHJvbk1hc3NEZXBlbmRlbmNpZXMgPSBlbGVjdHJvbk1hc3NEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmVsZW1lbnRhcnlDaGFyZ2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGVsZW1lbnRhcnlDaGFyZ2VEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFbGVtZW50YXJ5Q2hhcmdlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUVsZW1lbnRhcnlDaGFyZ2Vcbn07XG5leHBvcnRzLmVsZW1lbnRhcnlDaGFyZ2VEZXBlbmRlbmNpZXMgPSBlbGVtZW50YXJ5Q2hhcmdlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lcXVhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGVxdWFsRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUVxdWFsOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUVxdWFsXG59O1xuZXhwb3J0cy5lcXVhbERlcGVuZGVuY2llcyA9IGVxdWFsRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFcXVhbFNjYWxhcjogX2ZhY3Rvcmllc0FueS5jcmVhdGVFcXVhbFNjYWxhclxufTtcbmV4cG9ydHMuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMgPSBlcXVhbFNjYWxhckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXF1YWxUZXh0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmVUZXh0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGFyZVRleHQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzWmVybyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzWmVyby5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBlcXVhbFRleHREZXBlbmRlbmNpZXMgPSB7XG4gIGNvbXBhcmVUZXh0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZVRleHQuY29tcGFyZVRleHREZXBlbmRlbmNpZXMsXG4gIGlzWmVyb0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzWmVyby5pc1plcm9EZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUVxdWFsVGV4dDogX2ZhY3Rvcmllc0FueS5jcmVhdGVFcXVhbFRleHRcbn07XG5leHBvcnRzLmVxdWFsVGV4dERlcGVuZGVuY2llcyA9IGVxdWFsVGV4dERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXJmRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZXJmRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFcmY6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRXJmXG59O1xuZXhwb3J0cy5lcmZEZXBlbmRlbmNpZXMgPSBlcmZEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV2YWx1YXRlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUGFyc2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZXZhbHVhdGVEZXBlbmRlbmNpZXMgPSB7XG4gIHBhcnNlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFyc2UucGFyc2VEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUV2YWx1YXRlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUV2YWx1YXRlXG59O1xuZXhwb3J0cy5ldmFsdWF0ZURlcGVuZGVuY2llcyA9IGV2YWx1YXRlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5leHBEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBleHBEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUV4cDogX2ZhY3Rvcmllc0FueS5jcmVhdGVFeHBcbn07XG5leHBvcnRzLmV4cERlcGVuZGVuY2llcyA9IGV4cERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXhwbURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBYnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSWRlbnRpdHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJZGVudGl0eS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW52ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW52LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGV4cG1EZXBlbmRlbmNpZXMgPSB7XG4gIGFic0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Ficy5hYnNEZXBlbmRlbmNpZXMsXG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGlkZW50aXR5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSWRlbnRpdHkuaWRlbnRpdHlEZXBlbmRlbmNpZXMsXG4gIGludkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ludi5pbnZEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUV4cG06IF9mYWN0b3JpZXNBbnkuY3JlYXRlRXhwbVxufTtcbmV4cG9ydHMuZXhwbURlcGVuZGVuY2llcyA9IGV4cG1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV4cG0xRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBleHBtMURlcGVuZGVuY2llcyA9IHtcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFeHBtMTogX2ZhY3Rvcmllc0FueS5jcmVhdGVFeHBtMVxufTtcbmV4cG9ydHMuZXhwbTFEZXBlbmRlbmNpZXMgPSBleHBtMURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXllRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZXllRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVFeWU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRXllXG59O1xuZXhwb3J0cy5leWVEZXBlbmRlbmNpZXMgPSBleWVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZhY3RvcmlhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNHYW1tYSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0dhbW1hLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZhY3RvcmlhbERlcGVuZGVuY2llcyA9IHtcbiAgZ2FtbWFEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNHYW1tYS5nYW1tYURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRmFjdG9yaWFsOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZhY3RvcmlhbFxufTtcbmV4cG9ydHMuZmFjdG9yaWFsRGVwZW5kZW5jaWVzID0gZmFjdG9yaWFsRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mYWxzZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZhbHNlRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVGYWxzZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVGYWxzZVxufTtcbmV4cG9ydHMuZmFsc2VEZXBlbmRlbmNpZXMgPSBmYWxzZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmFyYWRheURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZmFyYWRheURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZhcmFkYXk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRmFyYWRheVxufTtcbmV4cG9ydHMuZmFyYWRheURlcGVuZGVuY2llcyA9IGZhcmFkYXlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZlcm1pQ291cGxpbmdEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZlcm1pQ291cGxpbmdEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVGZXJtaUNvdXBsaW5nOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZlcm1pQ291cGxpbmdcbn07XG5leHBvcnRzLmZlcm1pQ291cGxpbmdEZXBlbmRlbmNpZXMgPSBmZXJtaUNvdXBsaW5nRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5GaWJvbmFjY2lIZWFwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xhcmdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgRmlib25hY2NpSGVhcERlcGVuZGVuY2llcyA9IHtcbiAgbGFyZ2VyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTGFyZ2VyLmxhcmdlckRlcGVuZGVuY2llcyxcbiAgc21hbGxlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXIuc21hbGxlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlRmlib25hY2NpSGVhcENsYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZpYm9uYWNjaUhlYXBDbGFzc1xufTtcbmV4cG9ydHMuRmlib25hY2NpSGVhcERlcGVuZGVuY2llcyA9IEZpYm9uYWNjaUhlYXBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZpbHRlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZpbHRlckRlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRmlsdGVyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZpbHRlclxufTtcbmV4cG9ydHMuZmlsdGVyRGVwZW5kZW5jaWVzID0gZmlsdGVyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5maWx0ZXJUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBmaWx0ZXJUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZpbHRlclRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVGaWx0ZXJUcmFuc2Zvcm1cbn07XG5leHBvcnRzLmZpbHRlclRyYW5zZm9ybURlcGVuZGVuY2llcyA9IGZpbHRlclRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmluZVN0cnVjdHVyZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZpbmVTdHJ1Y3R1cmVEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlRmluZVN0cnVjdHVyZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVGaW5lU3RydWN0dXJlXG59O1xuZXhwb3J0cy5maW5lU3RydWN0dXJlRGVwZW5kZW5jaWVzID0gZmluZVN0cnVjdHVyZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmlyc3RSYWRpYXRpb25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZpcnN0UmFkaWF0aW9uRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRmlyc3RSYWRpYXRpb246IF9mYWN0b3JpZXNBbnkuY3JlYXRlRmlyc3RSYWRpYXRpb25cbn07XG5leHBvcnRzLmZpcnN0UmFkaWF0aW9uRGVwZW5kZW5jaWVzID0gZmlyc3RSYWRpYXRpb25EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZpeERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NlaWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDZWlsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGbG9vciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Zsb29yLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZpeERlcGVuZGVuY2llcyA9IHtcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICBjZWlsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ2VpbC5jZWlsRGVwZW5kZW5jaWVzLFxuICBmbG9vckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Zsb29yLmZsb29yRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVGaXg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRml4XG59O1xuZXhwb3J0cy5maXhEZXBlbmRlbmNpZXMgPSBmaXhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZsYXR0ZW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZsYXR0ZW5EZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZsYXR0ZW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlRmxhdHRlblxufTtcbmV4cG9ydHMuZmxhdHRlbkRlcGVuZGVuY2llcyA9IGZsYXR0ZW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZsb29yRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1JvdW5kID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUm91bmQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZmxvb3JEZXBlbmRlbmNpZXMgPSB7XG4gIHJvdW5kRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUm91bmQucm91bmREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZsb29yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZsb29yXG59O1xuZXhwb3J0cy5mbG9vckRlcGVuZGVuY2llcyA9IGZsb29yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mb3JFYWNoRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZm9yRWFjaERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRm9yRWFjaDogX2ZhY3Rvcmllc0FueS5jcmVhdGVGb3JFYWNoXG59O1xuZXhwb3J0cy5mb3JFYWNoRGVwZW5kZW5jaWVzID0gZm9yRWFjaERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZm9yRWFjaFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZvckVhY2hUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZvckVhY2hUcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlRm9yRWFjaFRyYW5zZm9ybVxufTtcbmV4cG9ydHMuZm9yRWFjaFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IGZvckVhY2hUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZvcm1hdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZvcm1hdERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRm9ybWF0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZvcm1hdFxufTtcbmV4cG9ydHMuZm9ybWF0RGVwZW5kZW5jaWVzID0gZm9ybWF0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mcmFjdGlvbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBmcmFjdGlvbkRlcGVuZGVuY2llcyA9IHtcbiAgRnJhY3Rpb25EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLkZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVGcmFjdGlvbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVGcmFjdGlvblxufTtcbmV4cG9ydHMuZnJhY3Rpb25EZXBlbmRlbmNpZXMgPSBmcmFjdGlvbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuRnJhY3Rpb25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBGcmFjdGlvbkRlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlRnJhY3Rpb25DbGFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVGcmFjdGlvbkNsYXNzXG59O1xuZXhwb3J0cy5GcmFjdGlvbkRlcGVuZGVuY2llcyA9IEZyYWN0aW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5GdW5jdGlvbkFzc2lnbm1lbnROb2RlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIEZ1bmN0aW9uQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZ1bmN0aW9uQXNzaWdubWVudE5vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZVxufTtcbmV4cG9ydHMuRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcyA9IEZ1bmN0aW9uQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkZ1bmN0aW9uTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3ltYm9sTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N5bWJvbE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgRnVuY3Rpb25Ob2RlRGVwZW5kZW5jaWVzID0ge1xuICBOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTm9kZS5Ob2RlRGVwZW5kZW5jaWVzLFxuICBTeW1ib2xOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5TeW1ib2xOb2RlRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVGdW5jdGlvbk5vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRnVuY3Rpb25Ob2RlXG59O1xuZXhwb3J0cy5GdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXMgPSBGdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdhbW1hRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUG93ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUG93LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGdhbW1hRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgcG93RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUG93LnBvd0RlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlR2FtbWE6IF9mYWN0b3JpZXNBbnkuY3JlYXRlR2FtbWFcbn07XG5leHBvcnRzLmdhbW1hRGVwZW5kZW5jaWVzID0gZ2FtbWFEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdhc0NvbnN0YW50RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBnYXNDb25zdGFudERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUdhc0NvbnN0YW50OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUdhc0NvbnN0YW50XG59O1xuZXhwb3J0cy5nYXNDb25zdGFudERlcGVuZGVuY2llcyA9IGdhc0NvbnN0YW50RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nY2REZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBnY2REZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVHY2Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlR2NkXG59O1xuZXhwb3J0cy5nY2REZXBlbmRlbmNpZXMgPSBnY2REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdldE1hdHJpeERhdGFUeXBlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZ2V0TWF0cml4RGF0YVR5cGVEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUdldE1hdHJpeERhdGFUeXBlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUdldE1hdHJpeERhdGFUeXBlXG59O1xuZXhwb3J0cy5nZXRNYXRyaXhEYXRhVHlwZURlcGVuZGVuY2llcyA9IGdldE1hdHJpeERhdGFUeXBlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ncmF2aXRhdGlvbkNvbnN0YW50RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBncmF2aXRhdGlvbkNvbnN0YW50RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlR3Jhdml0YXRpb25Db25zdGFudDogX2ZhY3Rvcmllc0FueS5jcmVhdGVHcmF2aXRhdGlvbkNvbnN0YW50XG59O1xuZXhwb3J0cy5ncmF2aXRhdGlvbkNvbnN0YW50RGVwZW5kZW5jaWVzID0gZ3Jhdml0YXRpb25Db25zdGFudERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZ3Jhdml0eURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZ3Jhdml0eURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUdyYXZpdHk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlR3Jhdml0eVxufTtcbmV4cG9ydHMuZ3Jhdml0eURlcGVuZGVuY2llcyA9IGdyYXZpdHlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmhhcnRyZWVFbmVyZ3lEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGhhcnRyZWVFbmVyZ3lEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVIYXJ0cmVlRW5lcmd5OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUhhcnRyZWVFbmVyZ3lcbn07XG5leHBvcnRzLmhhcnRyZWVFbmVyZ3lEZXBlbmRlbmNpZXMgPSBoYXJ0cmVlRW5lcmd5RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oYXNOdW1lcmljVmFsdWVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOdW1lcmljID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOdW1lcmljLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGhhc051bWVyaWNWYWx1ZURlcGVuZGVuY2llcyA9IHtcbiAgaXNOdW1lcmljRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOdW1lcmljLmlzTnVtZXJpY0RlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSGFzTnVtZXJpY1ZhbHVlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUhhc051bWVyaWNWYWx1ZVxufTtcbmV4cG9ydHMuaGFzTnVtZXJpY1ZhbHVlRGVwZW5kZW5jaWVzID0gaGFzTnVtZXJpY1ZhbHVlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oZWxwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0hlbHBDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0hlbHBDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBoZWxwRGVwZW5kZW5jaWVzID0ge1xuICBIZWxwRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSGVscENsYXNzLkhlbHBEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUhlbHA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSGVscFxufTtcbmV4cG9ydHMuaGVscERlcGVuZGVuY2llcyA9IGhlbHBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkhlbHBEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyc2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBIZWxwRGVwZW5kZW5jaWVzID0ge1xuICBwYXJzZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcnNlLnBhcnNlRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVIZWxwQ2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSGVscENsYXNzXG59O1xuZXhwb3J0cy5IZWxwRGVwZW5kZW5jaWVzID0gSGVscERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaHlwb3REZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWJzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWJzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNQb3NpdGl2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzUG9zaXRpdmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NtYWxsZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTbWFsbGVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcXJ0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3FydC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBoeXBvdERlcGVuZGVuY2llcyA9IHtcbiAgYWJzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWJzLmFic0RlcGVuZGVuY2llcyxcbiAgYWRkU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmFkZFNjYWxhckRlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgaXNQb3NpdGl2ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzUG9zaXRpdmUuaXNQb3NpdGl2ZURlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgc21hbGxlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXIuc21hbGxlckRlcGVuZGVuY2llcyxcbiAgc3FydERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NxcnQuc3FydERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSHlwb3Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSHlwb3Rcbn07XG5leHBvcnRzLmh5cG90RGVwZW5kZW5jaWVzID0gaHlwb3REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSTogX2ZhY3Rvcmllc0FueS5jcmVhdGVJXG59O1xuZXhwb3J0cy5pRGVwZW5kZW5jaWVzID0gaURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaWRlbnRpdHlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpZGVudGl0eURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIFNwYXJzZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLlNwYXJzZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSWRlbnRpdHk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSWRlbnRpdHlcbn07XG5leHBvcnRzLmlkZW50aXR5RGVwZW5kZW5jaWVzID0gaWRlbnRpdHlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmltRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgaW1EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUltOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUltXG59O1xuZXhwb3J0cy5pbURlcGVuZGVuY2llcyA9IGltRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5JbW11dGFibGVEZW5zZU1hdHJpeERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgSW1tdXRhYmxlRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgc21hbGxlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXIuc21hbGxlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbW11dGFibGVEZW5zZU1hdHJpeENsYXNzXG59O1xuZXhwb3J0cy5JbW11dGFibGVEZW5zZU1hdHJpeERlcGVuZGVuY2llcyA9IEltbXV0YWJsZURlbnNlTWF0cml4RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pbmRleERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpbmRleERlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVJbmRleDogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmRleFxufTtcbmV4cG9ydHMuaW5kZXhEZXBlbmRlbmNpZXMgPSBpbmRleERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuSW5kZXhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgSW5kZXhEZXBlbmRlbmNpZXMgPSB7XG4gIEltbXV0YWJsZURlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzcy5JbW11dGFibGVEZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSW5kZXhDbGFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmRleENsYXNzXG59O1xuZXhwb3J0cy5JbmRleERlcGVuZGVuY2llcyA9IEluZGV4RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5JbmRleE5vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JhbmdlQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSYW5nZUNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU2l6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBJbmRleE5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIFJhbmdlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUmFuZ2VDbGFzcy5SYW5nZURlcGVuZGVuY2llcyxcbiAgc2l6ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpemUuc2l6ZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlSW5kZXhOb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUluZGV4Tm9kZVxufTtcbmV4cG9ydHMuSW5kZXhOb2RlRGVwZW5kZW5jaWVzID0gSW5kZXhOb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pbmRleFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpbmRleFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVJbmRleFRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmRleFRyYW5zZm9ybVxufTtcbmV4cG9ydHMuaW5kZXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSBpbmRleFRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuSW5maW5pdHlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBJbmZpbml0eURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVJbmZpbml0eTogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmZpbml0eVxufTtcbmV4cG9ydHMuSW5maW5pdHlEZXBlbmRlbmNpZXMgPSBJbmZpbml0eURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW50ZXJzZWN0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTbWFsbGVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU21hbGxlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpbnRlcnNlY3REZXBlbmRlbmNpZXMgPSB7XG4gIGFic0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Ficy5hYnNEZXBlbmRlbmNpZXMsXG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHNtYWxsZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTbWFsbGVyLnNtYWxsZXJEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUludGVyc2VjdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbnRlcnNlY3Rcbn07XG5leHBvcnRzLmludGVyc2VjdERlcGVuZGVuY2llcyA9IGludGVyc2VjdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW52RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSWRlbnRpdHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJZGVudGl0eS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5hcnlNaW51cy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpbnZEZXBlbmRlbmNpZXMgPSB7XG4gIGFic0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Ficy5hYnNEZXBlbmRlbmNpZXMsXG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGRldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RldC5kZXREZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGlkZW50aXR5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSWRlbnRpdHkuaWRlbnRpdHlEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHVuYXJ5TWludXNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLnVuYXJ5TWludXNEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUludjogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbnZcbn07XG5leHBvcnRzLmludkRlcGVuZGVuY2llcyA9IGludkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUludmVyc2VDb25kdWN0YW5jZVF1YW50dW06IF9mYWN0b3JpZXNBbnkuY3JlYXRlSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bVxufTtcbmV4cG9ydHMuaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llcyA9IGludmVyc2VDb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzSW50ZWdlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzSW50ZWdlckRlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSXNJbnRlZ2VyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzSW50ZWdlclxufTtcbmV4cG9ydHMuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzID0gaXNJbnRlZ2VyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc05hTkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzTmFORGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVJc05hTjogX2ZhY3Rvcmllc0FueS5jcmVhdGVJc05hTlxufTtcbmV4cG9ydHMuaXNOYU5EZXBlbmRlbmNpZXMgPSBpc05hTkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNOZWdhdGl2ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzTmVnYXRpdmVEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUlzTmVnYXRpdmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNOZWdhdGl2ZVxufTtcbmV4cG9ydHMuaXNOZWdhdGl2ZURlcGVuZGVuY2llcyA9IGlzTmVnYXRpdmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzTnVtZXJpY0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzTnVtZXJpY0RlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSXNOdW1lcmljOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzTnVtZXJpY1xufTtcbmV4cG9ydHMuaXNOdW1lcmljRGVwZW5kZW5jaWVzID0gaXNOdW1lcmljRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc1Bvc2l0aXZlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgaXNQb3NpdGl2ZURlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSXNQb3NpdGl2ZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVJc1Bvc2l0aXZlXG59O1xuZXhwb3J0cy5pc1Bvc2l0aXZlRGVwZW5kZW5jaWVzID0gaXNQb3NpdGl2ZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNQcmltZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzUHJpbWVEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUlzUHJpbWU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNQcmltZVxufTtcbmV4cG9ydHMuaXNQcmltZURlcGVuZGVuY2llcyA9IGlzUHJpbWVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzWmVyb0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzWmVyb0RlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSXNaZXJvOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzWmVyb1xufTtcbmV4cG9ydHMuaXNaZXJvRGVwZW5kZW5jaWVzID0gaXNaZXJvRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5rbGRpdmVyZ2VuY2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEb3REaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEb3REaXZpZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTnVtZXJpYyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzTnVtZXJpYy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTG9nID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTG9nLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1bSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1bS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBrbGRpdmVyZ2VuY2VEZXBlbmRlbmNpZXMgPSB7XG4gIGRpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXMsXG4gIGRvdERpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RvdERpdmlkZS5kb3REaXZpZGVEZXBlbmRlbmNpZXMsXG4gIGlzTnVtZXJpY0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzTnVtZXJpYy5pc051bWVyaWNEZXBlbmRlbmNpZXMsXG4gIGxvZ0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xvZy5sb2dEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHN1bURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1bS5zdW1EZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUtsZGl2ZXJnZW5jZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVLbGRpdmVyZ2VuY2Vcbn07XG5leHBvcnRzLmtsZGl2ZXJnZW5jZURlcGVuZGVuY2llcyA9IGtsZGl2ZXJnZW5jZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMua2xpdHppbmdEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGtsaXR6aW5nRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlS2xpdHppbmc6IF9mYWN0b3JpZXNBbnkuY3JlYXRlS2xpdHppbmdcbn07XG5leHBvcnRzLmtsaXR6aW5nRGVwZW5kZW5jaWVzID0ga2xpdHppbmdEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmtyb25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGtyb25EZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUtyb246IF9mYWN0b3JpZXNBbnkuY3JlYXRlS3JvblxufTtcbmV4cG9ydHMua3JvbkRlcGVuZGVuY2llcyA9IGtyb25EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkxOMTBEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBMTjEwRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUxOMTA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTE4xMFxufTtcbmV4cG9ydHMuTE4xMERlcGVuZGVuY2llcyA9IExOMTBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkxOMkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIExOMkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMTjI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTE4yXG59O1xuZXhwb3J0cy5MTjJEZXBlbmRlbmNpZXMgPSBMTjJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkxPRzEwRURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIExPRzEwRURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMT0cxMEU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTE9HMTBFXG59O1xuZXhwb3J0cy5MT0cxMEVEZXBlbmRlbmNpZXMgPSBMT0cxMEVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkxPRzJFRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgTE9HMkVEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlTE9HMkU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTE9HMkVcbn07XG5leHBvcnRzLkxPRzJFRGVwZW5kZW5jaWVzID0gTE9HMkVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxhcmdlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGxhcmdlckRlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMYXJnZXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTGFyZ2VyXG59O1xuZXhwb3J0cy5sYXJnZXJEZXBlbmRlbmNpZXMgPSBsYXJnZXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxhcmdlckVxRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbGFyZ2VyRXFEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTGFyZ2VyRXE6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTGFyZ2VyRXFcbn07XG5leHBvcnRzLmxhcmdlckVxRGVwZW5kZW5jaWVzID0gbGFyZ2VyRXFEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxjbURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbGNtRGVwZW5kZW5jaWVzID0ge1xuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMY206IF9mYWN0b3JpZXNBbnkuY3JlYXRlTGNtXG59O1xuZXhwb3J0cy5sY21EZXBlbmRlbmNpZXMgPSBsY21EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxlZnRTaGlmdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNaZXJvcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1plcm9zLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGxlZnRTaGlmdERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICB6ZXJvc0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1plcm9zLnplcm9zRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMZWZ0U2hpZnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTGVmdFNoaWZ0XG59O1xuZXhwb3J0cy5sZWZ0U2hpZnREZXBlbmRlbmNpZXMgPSBsZWZ0U2hpZnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxvZ0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBsb2dEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTG9nOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUxvZ1xufTtcbmV4cG9ydHMubG9nRGVwZW5kZW5jaWVzID0gbG9nRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sb2cxMERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbG9nMTBEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTG9nMTA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTG9nMTBcbn07XG5leHBvcnRzLmxvZzEwRGVwZW5kZW5jaWVzID0gbG9nMTBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxvZzFwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMb2cgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMb2cuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbG9nMXBEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgbG9nRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTG9nLmxvZ0RlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTG9nMXA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTG9nMXBcbn07XG5leHBvcnRzLmxvZzFwRGVwZW5kZW5jaWVzID0gbG9nMXBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxvZzJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGxvZzJEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTG9nMjogX2ZhY3Rvcmllc0FueS5jcmVhdGVMb2cyXG59O1xuZXhwb3J0cy5sb2cyRGVwZW5kZW5jaWVzID0gbG9nMkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubG9zY2htaWR0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBsb3NjaG1pZHREZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMb3NjaG1pZHQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTG9zY2htaWR0XG59O1xuZXhwb3J0cy5sb3NjaG1pZHREZXBlbmRlbmNpZXMgPSBsb3NjaG1pZHREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxzb2x2ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbHNvbHZlRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUxzb2x2ZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVMc29sdmVcbn07XG5leHBvcnRzLmxzb2x2ZURlcGVuZGVuY2llcyA9IGxzb2x2ZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubHVwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NwYUNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBYnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5hcnlNaW51cyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuYXJ5TWludXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbHVwRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIFNwYURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NwYUNsYXNzLlNwYURlcGVuZGVuY2llcyxcbiAgU3BhcnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuU3BhcnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBsYXJnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNMYXJnZXIubGFyZ2VyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICB1bmFyeU1pbnVzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5hcnlNaW51cy51bmFyeU1pbnVzRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMdXA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTHVwXG59O1xuZXhwb3J0cy5sdXBEZXBlbmRlbmNpZXMgPSBsdXBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmx1c29sdmVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xzb2x2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xzb2x2ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTHVwID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTHVwLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NsdSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NsdS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVXNvbHZlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVXNvbHZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGx1c29sdmVEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbHNvbHZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTHNvbHZlLmxzb2x2ZURlcGVuZGVuY2llcyxcbiAgbHVwRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTHVwLmx1cERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgc2x1RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2x1LnNsdURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgdXNvbHZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVXNvbHZlLnVzb2x2ZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlTHVzb2x2ZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVMdXNvbHZlXG59O1xuZXhwb3J0cy5sdXNvbHZlRGVwZW5kZW5jaWVzID0gbHVzb2x2ZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWFkRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWFwID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWFwLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNZWRpYW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNZWRpYW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbWFkRGVwZW5kZW5jaWVzID0ge1xuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBtYXBEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXAubWFwRGVwZW5kZW5jaWVzLFxuICBtZWRpYW5EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNZWRpYW4ubWVkaWFuRGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNYWQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWFkXG59O1xuZXhwb3J0cy5tYWREZXBlbmRlbmNpZXMgPSBtYWREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1hZ25ldGljQ29uc3RhbnREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1hZ25ldGljQ29uc3RhbnREZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNYWduZXRpY0NvbnN0YW50OiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1hZ25ldGljQ29uc3RhbnRcbn07XG5leHBvcnRzLm1hZ25ldGljQ29uc3RhbnREZXBlbmRlbmNpZXMgPSBtYWduZXRpY0NvbnN0YW50RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tYWduZXRpY0ZsdXhRdWFudHVtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtYWduZXRpY0ZsdXhRdWFudHVtRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTWFnbmV0aWNGbHV4UXVhbnR1bTogX2ZhY3Rvcmllc0FueS5jcmVhdGVNYWduZXRpY0ZsdXhRdWFudHVtXG59O1xuZXhwb3J0cy5tYWduZXRpY0ZsdXhRdWFudHVtRGVwZW5kZW5jaWVzID0gbWFnbmV0aWNGbHV4UXVhbnR1bURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWFwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbWFwRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNYXA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWFwXG59O1xuZXhwb3J0cy5tYXBEZXBlbmRlbmNpZXMgPSBtYXBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1hcFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1hcFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTWFwVHJhbnNmb3JtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1hcFRyYW5zZm9ybVxufTtcbmV4cG9ydHMubWFwVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gbWFwVHJhbnNmb3JtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tYXRyaXhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbWF0cml4RGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIE1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeENsYXNzLk1hdHJpeERlcGVuZGVuY2llcyxcbiAgU3BhcnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuU3BhcnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNYXRyaXg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWF0cml4XG59O1xuZXhwb3J0cy5tYXRyaXhEZXBlbmRlbmNpZXMgPSBtYXRyaXhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLk1hdHJpeERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIE1hdHJpeERlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlTWF0cml4Q2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWF0cml4Q2xhc3Ncbn07XG5leHBvcnRzLk1hdHJpeERlcGVuZGVuY2llcyA9IE1hdHJpeERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWF4RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xhcmdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtYXhEZXBlbmRlbmNpZXMgPSB7XG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1heDogX2ZhY3Rvcmllc0FueS5jcmVhdGVNYXhcbn07XG5leHBvcnRzLm1heERlcGVuZGVuY2llcyA9IG1heERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWF4VHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xhcmdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtYXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1heFRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVNYXhUcmFuc2Zvcm1cbn07XG5leHBvcnRzLm1heFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IG1heFRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWVhbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtZWFuRGVwZW5kZW5jaWVzID0ge1xuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGUuZGl2aWRlRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNZWFuOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1lYW5cbn07XG5leHBvcnRzLm1lYW5EZXBlbmRlbmNpZXMgPSBtZWFuRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tZWFuVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1lYW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGRpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1lYW5UcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWVhblRyYW5zZm9ybVxufTtcbmV4cG9ydHMubWVhblRyYW5zZm9ybURlcGVuZGVuY2llcyA9IG1lYW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1lZGlhbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtZWRpYW5EZXBlbmRlbmNpZXMgPSB7XG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wYXJlLmNvbXBhcmVEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXMsXG4gIHBhcnRpdGlvblNlbGVjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdC5wYXJ0aXRpb25TZWxlY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1lZGlhbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVNZWRpYW5cbn07XG5leHBvcnRzLm1lZGlhbkRlcGVuZGVuY2llcyA9IG1lZGlhbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWluRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1NtYWxsZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTbWFsbGVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1pbkRlcGVuZGVuY2llcyA9IHtcbiAgc21hbGxlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXIuc21hbGxlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTWluOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1pblxufTtcbmV4cG9ydHMubWluRGVwZW5kZW5jaWVzID0gbWluRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5taW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbWluVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0ge1xuICBzbWFsbGVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU21hbGxlci5zbWFsbGVyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNaW5UcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWluVHJhbnNmb3JtXG59O1xuZXhwb3J0cy5taW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSBtaW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1vZERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNb2Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTW9kXG59O1xuZXhwb3J0cy5tb2REZXBlbmRlbmNpZXMgPSBtb2REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOYU4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc05hTi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOdW1lcmljID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOdW1lcmljLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIGlzTmFORGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOYU4uaXNOYU5EZXBlbmRlbmNpZXMsXG4gIGlzTnVtZXJpY0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzTnVtZXJpYy5pc051bWVyaWNEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTW9kZVxufTtcbmV4cG9ydHMubW9kZURlcGVuZGVuY2llcyA9IG1vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vbGFyTWFzc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbW9sYXJNYXNzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTW9sYXJNYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vbGFyTWFzc1xufTtcbmV4cG9ydHMubW9sYXJNYXNzRGVwZW5kZW5jaWVzID0gbW9sYXJNYXNzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tb2xhck1hc3NDMTJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1vbGFyTWFzc0MxMkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1vbGFyTWFzc0MxMjogX2ZhY3Rvcmllc0FueS5jcmVhdGVNb2xhck1hc3NDMTJcbn07XG5leHBvcnRzLm1vbGFyTWFzc0MxMkRlcGVuZGVuY2llcyA9IG1vbGFyTWFzc0MxMkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubW9sYXJQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbW9sYXJQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1vbGFyUGxhbmNrQ29uc3RhbnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudFxufTtcbmV4cG9ydHMubW9sYXJQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcyA9IG1vbGFyUGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vbGFyVm9sdW1lRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtb2xhclZvbHVtZURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1vbGFyVm9sdW1lOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vbGFyVm9sdW1lXG59O1xuZXhwb3J0cy5tb2xhclZvbHVtZURlcGVuZGVuY2llcyA9IG1vbGFyVm9sdW1lRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tdWx0aW5vbWlhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRmFjdG9yaWFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRmFjdG9yaWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc0ludGVnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc0ludGVnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzUG9zaXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG11bHRpbm9taWFsRGVwZW5kZW5jaWVzID0ge1xuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGUuZGl2aWRlRGVwZW5kZW5jaWVzLFxuICBmYWN0b3JpYWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGYWN0b3JpYWwuZmFjdG9yaWFsRGVwZW5kZW5jaWVzLFxuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICBpc1Bvc2l0aXZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNQb3NpdGl2ZS5pc1Bvc2l0aXZlRGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNdWx0aW5vbWlhbDogX2ZhY3Rvcmllc0FueS5jcmVhdGVNdWx0aW5vbWlhbFxufTtcbmV4cG9ydHMubXVsdGlub21pYWxEZXBlbmRlbmNpZXMgPSBtdWx0aW5vbWlhbERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubXVsdGlwbHlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbXVsdGlwbHlEZXBlbmRlbmNpZXMgPSB7XG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU11bHRpcGx5OiBfZmFjdG9yaWVzQW55LmNyZWF0ZU11bHRpcGx5XG59O1xuZXhwb3J0cy5tdWx0aXBseURlcGVuZGVuY2llcyA9IG11bHRpcGx5RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNdWx0aXBseVNjYWxhcjogX2ZhY3Rvcmllc0FueS5jcmVhdGVNdWx0aXBseVNjYWxhclxufTtcbmV4cG9ydHMubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMgPSBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuTmFORGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgTmFORGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU5hTjogX2ZhY3Rvcmllc0FueS5jcmVhdGVOYU5cbn07XG5leHBvcnRzLk5hTkRlcGVuZGVuY2llcyA9IE5hTkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubmV1dHJvbk1hc3NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG5ldXRyb25NYXNzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTmV1dHJvbk1hc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTmV1dHJvbk1hc3Ncbn07XG5leHBvcnRzLm5ldXRyb25NYXNzRGVwZW5kZW5jaWVzID0gbmV1dHJvbk1hc3NEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLk5vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBOb2RlRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVOb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU5vZGVcbn07XG5leHBvcnRzLk5vZGVEZXBlbmRlbmNpZXMgPSBOb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ub3JtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25qID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uai5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTGFyZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTGFyZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BvdyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Bvdy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcXJ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG5vcm1EZXBlbmRlbmNpZXMgPSB7XG4gIGFic0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Ficy5hYnNEZXBlbmRlbmNpZXMsXG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGNvbmpEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb25qLmNvbmpEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHBvd0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1Bvdy5wb3dEZXBlbmRlbmNpZXMsXG4gIHNtYWxsZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTbWFsbGVyLnNtYWxsZXJEZXBlbmRlbmNpZXMsXG4gIHNxcnREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTcXJ0LnNxcnREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU5vcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlTm9ybVxufTtcbmV4cG9ydHMubm9ybURlcGVuZGVuY2llcyA9IG5vcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm5vdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG5vdERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTm90OiBfZmFjdG9yaWVzQW55LmNyZWF0ZU5vdFxufTtcbmV4cG9ydHMubm90RGVwZW5kZW5jaWVzID0gbm90RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5udGhSb290RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBudGhSb290RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU50aFJvb3Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTnRoUm9vdFxufTtcbmV4cG9ydHMubnRoUm9vdERlcGVuZGVuY2llcyA9IG50aFJvb3REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm50aFJvb3RzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG50aFJvb3RzRGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU50aFJvb3RzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU50aFJvb3RzXG59O1xuZXhwb3J0cy5udGhSb290c0RlcGVuZGVuY2llcyA9IG50aFJvb3RzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5udWNsZWFyTWFnbmV0b25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG51Y2xlYXJNYWduZXRvbkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU51Y2xlYXJNYWduZXRvbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVOdWNsZWFyTWFnbmV0b25cbn07XG5leHBvcnRzLm51Y2xlYXJNYWduZXRvbkRlcGVuZGVuY2llcyA9IG51Y2xlYXJNYWduZXRvbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubnVsbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG51bGxEZXBlbmRlbmNpZXMgPSB7XG4gIGNyZWF0ZU51bGw6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTnVsbFxufTtcbmV4cG9ydHMubnVsbERlcGVuZGVuY2llcyA9IG51bGxEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm51bWJlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG51bWJlckRlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTnVtYmVyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU51bWJlclxufTtcbmV4cG9ydHMubnVtYmVyRGVwZW5kZW5jaWVzID0gbnVtYmVyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5udW1lcmljRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ251bWJlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ251bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnJhY3Rpb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTnVtYmVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG51bWVyaWNEZXBlbmRlbmNpZXMgPSB7XG4gIGJpZ251bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ251bWJlci5iaWdudW1iZXJEZXBlbmRlbmNpZXMsXG4gIGZyYWN0aW9uRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnJhY3Rpb24uZnJhY3Rpb25EZXBlbmRlbmNpZXMsXG4gIG51bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc051bWJlci5udW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU51bWVyaWM6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTnVtZXJpY1xufTtcbmV4cG9ydHMubnVtZXJpY0RlcGVuZGVuY2llcyA9IG51bWVyaWNEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLk9iamVjdE5vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgT2JqZWN0Tm9kZURlcGVuZGVuY2llcyA9IHtcbiAgTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlT2JqZWN0Tm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVPYmplY3ROb2RlXG59O1xuZXhwb3J0cy5PYmplY3ROb2RlRGVwZW5kZW5jaWVzID0gT2JqZWN0Tm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMub25lc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgb25lc0RlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVPbmVzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU9uZXNcbn07XG5leHBvcnRzLm9uZXNEZXBlbmRlbmNpZXMgPSBvbmVzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5PcGVyYXRvck5vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgT3BlcmF0b3JOb2RlRGVwZW5kZW5jaWVzID0ge1xuICBOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTm9kZS5Ob2RlRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVPcGVyYXRvck5vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlT3BlcmF0b3JOb2RlXG59O1xuZXhwb3J0cy5PcGVyYXRvck5vZGVEZXBlbmRlbmNpZXMgPSBPcGVyYXRvck5vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm9yRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgb3JEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlT3I6IF9mYWN0b3JpZXNBbnkuY3JlYXRlT3Jcbn07XG5leHBvcnRzLm9yRGVwZW5kZW5jaWVzID0gb3JEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBQYXJlbnRoZXNpc05vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVBhcmVudGhlc2lzTm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVQYXJlbnRoZXNpc05vZGVcbn07XG5leHBvcnRzLlBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llcyA9IFBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucGFyc2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWNjZXNzb3JOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWNjZXNzb3JOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBcnJheU5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBcnJheU5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Fzc2lnbm1lbnROb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQXNzaWdubWVudE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Jsb2NrTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Jsb2NrTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uZGl0aW9uYWxOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uZGl0aW9uYWxOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0luZGV4Tm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Tm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzT2JqZWN0Tm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc09iamVjdE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5nZU5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSYW5nZU5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JlbGF0aW9uYWxOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUmVsYXRpb25hbE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N5bWJvbE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOdW1lcmljID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTnVtZXJpYy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwYXJzZURlcGVuZGVuY2llcyA9IHtcbiAgQWNjZXNzb3JOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWNjZXNzb3JOb2RlLkFjY2Vzc29yTm9kZURlcGVuZGVuY2llcyxcbiAgQXJyYXlOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQXJyYXlOb2RlLkFycmF5Tm9kZURlcGVuZGVuY2llcyxcbiAgQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBc3NpZ25tZW50Tm9kZS5Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcyxcbiAgQmxvY2tOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmxvY2tOb2RlLkJsb2NrTm9kZURlcGVuZGVuY2llcyxcbiAgQ29uZGl0aW9uYWxOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29uZGl0aW9uYWxOb2RlLkNvbmRpdGlvbmFsTm9kZURlcGVuZGVuY2llcyxcbiAgQ29uc3RhbnROb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlLkNvbnN0YW50Tm9kZURlcGVuZGVuY2llcyxcbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUuRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcyxcbiAgRnVuY3Rpb25Ob2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnVuY3Rpb25Ob2RlLkZ1bmN0aW9uTm9kZURlcGVuZGVuY2llcyxcbiAgSW5kZXhOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhOb2RlLkluZGV4Tm9kZURlcGVuZGVuY2llcyxcbiAgT2JqZWN0Tm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc09iamVjdE5vZGUuT2JqZWN0Tm9kZURlcGVuZGVuY2llcyxcbiAgT3BlcmF0b3JOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzT3BlcmF0b3JOb2RlLk9wZXJhdG9yTm9kZURlcGVuZGVuY2llcyxcbiAgUGFyZW50aGVzaXNOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlLlBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llcyxcbiAgUmFuZ2VOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUmFuZ2VOb2RlLlJhbmdlTm9kZURlcGVuZGVuY2llcyxcbiAgUmVsYXRpb25hbE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNSZWxhdGlvbmFsTm9kZS5SZWxhdGlvbmFsTm9kZURlcGVuZGVuY2llcyxcbiAgU3ltYm9sTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N5bWJvbE5vZGUuU3ltYm9sTm9kZURlcGVuZGVuY2llcyxcbiAgbnVtZXJpY0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc051bWVyaWMubnVtZXJpY0RlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGFyc2U6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGFyc2Vcbn07XG5leHBvcnRzLnBhcnNlRGVwZW5kZW5jaWVzID0gcGFyc2VEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBhcnNlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJzZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnNlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBhcnNlckRlcGVuZGVuY2llcyA9IHtcbiAgUGFyc2VyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFyc2VyQ2xhc3MuUGFyc2VyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQYXJzZXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGFyc2VyXG59O1xuZXhwb3J0cy5wYXJzZXJEZXBlbmRlbmNpZXMgPSBwYXJzZXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlBhcnNlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJzZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFBhcnNlckRlcGVuZGVuY2llcyA9IHtcbiAgcGFyc2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQYXJzZS5wYXJzZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGFyc2VyQ2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGFyc2VyQ2xhc3Ncbn07XG5leHBvcnRzLlBhcnNlckRlcGVuZGVuY2llcyA9IFBhcnNlckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucGFydGl0aW9uU2VsZWN0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc05hTiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzTmFOLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc051bWVyaWMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc051bWVyaWMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcGFydGl0aW9uU2VsZWN0RGVwZW5kZW5jaWVzID0ge1xuICBjb21wYXJlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZS5jb21wYXJlRGVwZW5kZW5jaWVzLFxuICBpc05hTkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzTmFOLmlzTmFORGVwZW5kZW5jaWVzLFxuICBpc051bWVyaWNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc051bWVyaWMuaXNOdW1lcmljRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQYXJ0aXRpb25TZWxlY3Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGFydGl0aW9uU2VsZWN0XG59O1xuZXhwb3J0cy5wYXJ0aXRpb25TZWxlY3REZXBlbmRlbmNpZXMgPSBwYXJ0aXRpb25TZWxlY3REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBlcm11dGF0aW9uc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNGYWN0b3JpYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGYWN0b3JpYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcGVybXV0YXRpb25zRGVwZW5kZW5jaWVzID0ge1xuICBmYWN0b3JpYWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGYWN0b3JpYWwuZmFjdG9yaWFsRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQZXJtdXRhdGlvbnM6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGVybXV0YXRpb25zXG59O1xuZXhwb3J0cy5wZXJtdXRhdGlvbnNEZXBlbmRlbmNpZXMgPSBwZXJtdXRhdGlvbnNEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBoaURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBoaURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQaGk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGhpXG59O1xuZXhwb3J0cy5waGlEZXBlbmRlbmNpZXMgPSBwaGlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBpRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcGlEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGlcbn07XG5leHBvcnRzLnBpRGVwZW5kZW5jaWVzID0gcGlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBpY2tSYW5kb21EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwaWNrUmFuZG9tRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQaWNrUmFuZG9tOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBpY2tSYW5kb21cbn07XG5leHBvcnRzLnBpY2tSYW5kb21EZXBlbmRlbmNpZXMgPSBwaWNrUmFuZG9tRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wbGFuY2tDaGFyZ2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBsYW5ja0NoYXJnZURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVBsYW5ja0NoYXJnZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVQbGFuY2tDaGFyZ2Vcbn07XG5leHBvcnRzLnBsYW5ja0NoYXJnZURlcGVuZGVuY2llcyA9IHBsYW5ja0NoYXJnZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGxhbmNrQ29uc3RhbnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGxhbmNrQ29uc3RhbnRcbn07XG5leHBvcnRzLnBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzID0gcGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBsYW5ja0xlbmd0aERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcGxhbmNrTGVuZ3RoRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGxhbmNrTGVuZ3RoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBsYW5ja0xlbmd0aFxufTtcbmV4cG9ydHMucGxhbmNrTGVuZ3RoRGVwZW5kZW5jaWVzID0gcGxhbmNrTGVuZ3RoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wbGFuY2tNYXNzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwbGFuY2tNYXNzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGxhbmNrTWFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVQbGFuY2tNYXNzXG59O1xuZXhwb3J0cy5wbGFuY2tNYXNzRGVwZW5kZW5jaWVzID0gcGxhbmNrTWFzc0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucGxhbmNrVGVtcGVyYXR1cmVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBsYW5ja1RlbXBlcmF0dXJlRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGxhbmNrVGVtcGVyYXR1cmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGxhbmNrVGVtcGVyYXR1cmVcbn07XG5leHBvcnRzLnBsYW5ja1RlbXBlcmF0dXJlRGVwZW5kZW5jaWVzID0gcGxhbmNrVGVtcGVyYXR1cmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBsYW5ja1RpbWVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBsYW5ja1RpbWVEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQbGFuY2tUaW1lOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBsYW5ja1RpbWVcbn07XG5leHBvcnRzLnBsYW5ja1RpbWVEZXBlbmRlbmNpZXMgPSBwbGFuY2tUaW1lRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wb3dEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGcmFjdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZyYWN0aW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJZGVudGl0eSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lkZW50aXR5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc051bWJlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc051bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwb3dEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgZnJhY3Rpb25EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGcmFjdGlvbi5mcmFjdGlvbkRlcGVuZGVuY2llcyxcbiAgaWRlbnRpdHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJZGVudGl0eS5pZGVudGl0eURlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgbnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTnVtYmVyLm51bWJlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUG93OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBvd1xufTtcbmV4cG9ydHMucG93RGVwZW5kZW5jaWVzID0gcG93RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wcmludERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHByaW50RGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQcmludDogX2ZhY3Rvcmllc0FueS5jcmVhdGVQcmludFxufTtcbmV4cG9ydHMucHJpbnREZXBlbmRlbmNpZXMgPSBwcmludERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucHJvZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHByb2REZXBlbmRlbmNpZXMgPSB7XG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVByb2Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUHJvZFxufTtcbmV4cG9ydHMucHJvZERlcGVuZGVuY2llcyA9IHByb2REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnByb3Rvbk1hc3NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHByb3Rvbk1hc3NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQcm90b25NYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVByb3Rvbk1hc3Ncbn07XG5leHBvcnRzLnByb3Rvbk1hc3NEZXBlbmRlbmNpZXMgPSBwcm90b25NYXNzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5xckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25qID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uai5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJZGVudGl0eSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lkZW50aXR5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc1plcm8gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc1plcm8uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2lnbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpZ24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcXJ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5hcnlNaW51cy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzWmVyb3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNaZXJvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBxckRlcGVuZGVuY2llcyA9IHtcbiAgYWRkU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmFkZFNjYWxhckRlcGVuZGVuY2llcyxcbiAgY29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXguY29tcGxleERlcGVuZGVuY2llcyxcbiAgY29uakRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbmouY29uakRlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgZXF1YWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbC5lcXVhbERlcGVuZGVuY2llcyxcbiAgaWRlbnRpdHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJZGVudGl0eS5pZGVudGl0eURlcGVuZGVuY2llcyxcbiAgaXNaZXJvRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNaZXJvLmlzWmVyb0RlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgc2lnbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpZ24uc2lnbkRlcGVuZGVuY2llcyxcbiAgc3FydERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NxcnQuc3FydERlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgdW5hcnlNaW51c0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuYXJ5TWludXMudW5hcnlNaW51c0RlcGVuZGVuY2llcyxcbiAgemVyb3NEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNaZXJvcy56ZXJvc0RlcGVuZGVuY2llcyxcbiAgY3JlYXRlUXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUXJcbn07XG5leHBvcnRzLnFyRGVwZW5kZW5jaWVzID0gcXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnF1YW50aWxlU2VxRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBxdWFudGlsZVNlcURlcGVuZGVuY2llcyA9IHtcbiAgYWRkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkLmFkZERlcGVuZGVuY2llcyxcbiAgY29tcGFyZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBhcmUuY29tcGFyZURlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgcGFydGl0aW9uU2VsZWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFydGl0aW9uU2VsZWN0LnBhcnRpdGlvblNlbGVjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUXVhbnRpbGVTZXE6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUXVhbnRpbGVTZXFcbn07XG5leHBvcnRzLnF1YW50aWxlU2VxRGVwZW5kZW5jaWVzID0gcXVhbnRpbGVTZXFEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnF1YW50dW1PZkNpcmN1bGF0aW9uRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBxdWFudHVtT2ZDaXJjdWxhdGlvbkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVF1YW50dW1PZkNpcmN1bGF0aW9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVF1YW50dW1PZkNpcmN1bGF0aW9uXG59O1xuZXhwb3J0cy5xdWFudHVtT2ZDaXJjdWxhdGlvbkRlcGVuZGVuY2llcyA9IHF1YW50dW1PZkNpcmN1bGF0aW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yYW5kb21EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByYW5kb21EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJhbmRvbTogX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5kb21cbn07XG5leHBvcnRzLnJhbmRvbURlcGVuZGVuY2llcyA9IHJhbmRvbURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmFuZG9tSW50RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmFuZG9tSW50RGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVSYW5kb21JbnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmFuZG9tSW50XG59O1xuZXhwb3J0cy5yYW5kb21JbnREZXBlbmRlbmNpZXMgPSByYW5kb21JbnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJhbmdlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ251bWJlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ251bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlckVxID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTGFyZ2VyRXEuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NtYWxsZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTbWFsbGVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTbWFsbGVyRXEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTbWFsbGVyRXEuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmFuZ2VEZXBlbmRlbmNpZXMgPSB7XG4gIGJpZ251bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ251bWJlci5iaWdudW1iZXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckVxRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTGFyZ2VyRXEubGFyZ2VyRXFEZXBlbmRlbmNpZXMsXG4gIHNtYWxsZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTbWFsbGVyLnNtYWxsZXJEZXBlbmRlbmNpZXMsXG4gIHNtYWxsZXJFcURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXJFcS5zbWFsbGVyRXFEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJhbmdlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJhbmdlXG59O1xuZXhwb3J0cy5yYW5nZURlcGVuZGVuY2llcyA9IHJhbmdlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5SYW5nZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFJhbmdlRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVSYW5nZUNsYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJhbmdlQ2xhc3Ncbn07XG5leHBvcnRzLlJhbmdlRGVwZW5kZW5jaWVzID0gUmFuZ2VEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlJhbmdlTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBSYW5nZU5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJhbmdlTm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5nZU5vZGVcbn07XG5leHBvcnRzLlJhbmdlTm9kZURlcGVuZGVuY2llcyA9IFJhbmdlTm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmFuZ2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnbnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xhcmdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTGFyZ2VyRXEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXJFcS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NtYWxsZXJFcSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXJFcS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByYW5nZVRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgYmlnbnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmJpZ251bWJlckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbGFyZ2VyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTGFyZ2VyLmxhcmdlckRlcGVuZGVuY2llcyxcbiAgbGFyZ2VyRXFEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNMYXJnZXJFcS5sYXJnZXJFcURlcGVuZGVuY2llcyxcbiAgc21hbGxlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXIuc21hbGxlckRlcGVuZGVuY2llcyxcbiAgc21hbGxlckVxRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU21hbGxlckVxLnNtYWxsZXJFcURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUmFuZ2VUcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmFuZ2VUcmFuc2Zvcm1cbn07XG5leHBvcnRzLnJhbmdlVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gcmFuZ2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJhdGlvbmFsaXplRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ251bWJlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ251bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnJhY3Rpb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzWmVybyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzWmVyby5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyc2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUG93ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUG93LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaW1wbGlmeSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpbXBsaWZ5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHJhdGlvbmFsaXplRGVwZW5kZW5jaWVzID0ge1xuICBiaWdudW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdudW1iZXIuYmlnbnVtYmVyRGVwZW5kZW5jaWVzLFxuICBmcmFjdGlvbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZyYWN0aW9uLmZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICBDb25zdGFudE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUuQ29uc3RhbnROb2RlRGVwZW5kZW5jaWVzLFxuICBGdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUuRnVuY3Rpb25Ob2RlRGVwZW5kZW5jaWVzLFxuICBPcGVyYXRvck5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNPcGVyYXRvck5vZGUuT3BlcmF0b3JOb2RlRGVwZW5kZW5jaWVzLFxuICBQYXJlbnRoZXNpc05vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuUGFyZW50aGVzaXNOb2RlRGVwZW5kZW5jaWVzLFxuICBTeW1ib2xOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5TeW1ib2xOb2RlRGVwZW5kZW5jaWVzLFxuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGUuZGl2aWRlRGVwZW5kZW5jaWVzLFxuICBlcXVhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsLmVxdWFsRGVwZW5kZW5jaWVzLFxuICBpc1plcm9EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc1plcm8uaXNaZXJvRGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICBwYXJzZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcnNlLnBhcnNlRGVwZW5kZW5jaWVzLFxuICBwb3dEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQb3cucG93RGVwZW5kZW5jaWVzLFxuICBzaW1wbGlmeURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpbXBsaWZ5LnNpbXBsaWZ5RGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVSYXRpb25hbGl6ZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVSYXRpb25hbGl6ZVxufTtcbmV4cG9ydHMucmF0aW9uYWxpemVEZXBlbmRlbmNpZXMgPSByYXRpb25hbGl6ZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByZURlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmVcbn07XG5leHBvcnRzLnJlRGVwZW5kZW5jaWVzID0gcmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJlZHVjZWRQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmVkdWNlZFBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUmVkdWNlZFBsYW5ja0NvbnN0YW50OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlZHVjZWRQbGFuY2tDb25zdGFudFxufTtcbmV4cG9ydHMucmVkdWNlZFBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzID0gcmVkdWNlZFBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5SZWxhdGlvbmFsTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBSZWxhdGlvbmFsTm9kZURlcGVuZGVuY2llcyA9IHtcbiAgTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlUmVsYXRpb25hbE5vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmVsYXRpb25hbE5vZGVcbn07XG5leHBvcnRzLlJlbGF0aW9uYWxOb2RlRGVwZW5kZW5jaWVzID0gUmVsYXRpb25hbE5vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJlcGxhY2VyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmVwbGFjZXJEZXBlbmRlbmNpZXMgPSB7XG4gIGNyZWF0ZVJlcGxhY2VyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlcGxhY2VyXG59O1xuZXhwb3J0cy5yZXBsYWNlckRlcGVuZGVuY2llcyA9IHJlcGxhY2VyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yZXNoYXBlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzSW50ZWdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzSW50ZWdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHJlc2hhcGVEZXBlbmRlbmNpZXMgPSB7XG4gIGlzSW50ZWdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzSW50ZWdlci5pc0ludGVnZXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJlc2hhcGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmVzaGFwZVxufTtcbmV4cG9ydHMucmVzaGFwZURlcGVuZGVuY2llcyA9IHJlc2hhcGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJlc2l6ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmVzaXplRGVwZW5kZW5jaWVzID0ge1xuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVSZXNpemU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmVzaXplXG59O1xuZXhwb3J0cy5yZXNpemVEZXBlbmRlbmNpZXMgPSByZXNpemVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlJlc3VsdFNldERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFJlc3VsdFNldERlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlUmVzdWx0U2V0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlc3VsdFNldFxufTtcbmV4cG9ydHMuUmVzdWx0U2V0RGVwZW5kZW5jaWVzID0gUmVzdWx0U2V0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yZXZpdmVyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmV2aXZlckRlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlUmV2aXZlcjogX2ZhY3Rvcmllc0FueS5jcmVhdGVSZXZpdmVyXG59O1xuZXhwb3J0cy5yZXZpdmVyRGVwZW5kZW5jaWVzID0gcmV2aXZlckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmlnaHRBcml0aFNoaWZ0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1plcm9zID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzWmVyb3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmlnaHRBcml0aFNoaWZ0RGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHplcm9zRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzWmVyb3MuemVyb3NEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJpZ2h0QXJpdGhTaGlmdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVSaWdodEFyaXRoU2hpZnRcbn07XG5leHBvcnRzLnJpZ2h0QXJpdGhTaGlmdERlcGVuZGVuY2llcyA9IHJpZ2h0QXJpdGhTaGlmdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmlnaHRMb2dTaGlmdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNaZXJvcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1plcm9zLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHJpZ2h0TG9nU2hpZnREZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgemVyb3NEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNaZXJvcy56ZXJvc0RlcGVuZGVuY2llcyxcbiAgY3JlYXRlUmlnaHRMb2dTaGlmdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVSaWdodExvZ1NoaWZ0XG59O1xuZXhwb3J0cy5yaWdodExvZ1NoaWZ0RGVwZW5kZW5jaWVzID0gcmlnaHRMb2dTaGlmdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucm91bmREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzWmVyb3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNaZXJvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByb3VuZERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHplcm9zRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzWmVyb3MuemVyb3NEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJvdW5kOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJvdW5kXG59O1xuZXhwb3J0cy5yb3VuZERlcGVuZGVuY2llcyA9IHJvdW5kRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yb3dEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmFuZ2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSYW5nZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByb3dEZXBlbmRlbmNpZXMgPSB7XG4gIEluZGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5JbmRleERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgcmFuZ2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNSYW5nZS5yYW5nZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUm93OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJvd1xufTtcbmV4cG9ydHMucm93RGVwZW5kZW5jaWVzID0gcm93RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yb3dUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmFuZ2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSYW5nZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByb3dUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIEluZGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5JbmRleERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgcmFuZ2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNSYW5nZS5yYW5nZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUm93VHJhbnNmb3JtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJvd1RyYW5zZm9ybVxufTtcbmV4cG9ydHMucm93VHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gcm93VHJhbnNmb3JtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yeWRiZXJnRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByeWRiZXJnRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUnlkYmVyZzogX2ZhY3Rvcmllc0FueS5jcmVhdGVSeWRiZXJnXG59O1xuZXhwb3J0cy5yeWRiZXJnRGVwZW5kZW5jaWVzID0gcnlkYmVyZ0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuU1FSVDFfMkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbnZhciBTUVJUMV8yRGVwZW5kZW5jaWVzID0ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNRUlQxXzI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU1FSVDFfMlxufTtcbmV4cG9ydHMuU1FSVDFfMkRlcGVuZGVuY2llcyA9IFNRUlQxXzJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlNRUlQyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgU1FSVDJEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlU1FSVDI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU1FSVDJcbn07XG5leHBvcnRzLlNRUlQyRGVwZW5kZW5jaWVzID0gU1FSVDJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNhY2t1clRldHJvZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzYWNrdXJUZXRyb2RlRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNhY2t1clRldHJvZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2Fja3VyVGV0cm9kZVxufTtcbmV4cG9ydHMuc2Fja3VyVGV0cm9kZURlcGVuZGVuY2llcyA9IHNhY2t1clRldHJvZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNlY0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNlY0RlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTZWM6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2VjXG59O1xuZXhwb3J0cy5zZWNEZXBlbmRlbmNpZXMgPSBzZWNEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNlY2hEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzZWNoRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNlY2g6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2VjaFxufTtcbmV4cG9ydHMuc2VjaERlcGVuZGVuY2llcyA9IHNlY2hEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNlY29uZFJhZGlhdGlvbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2Vjb25kUmFkaWF0aW9uRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU2Vjb25kUmFkaWF0aW9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNlY29uZFJhZGlhdGlvblxufTtcbmV4cG9ydHMuc2Vjb25kUmFkaWF0aW9uRGVwZW5kZW5jaWVzID0gc2Vjb25kUmFkaWF0aW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRDYXJ0ZXNpYW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJbmRleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU2l6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNldENhcnRlc2lhbkRlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMsXG4gIHNpemVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldENhcnRlc2lhbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRDYXJ0ZXNpYW5cbn07XG5leHBvcnRzLnNldENhcnRlc2lhbkRlcGVuZGVuY2llcyA9IHNldENhcnRlc2lhbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0RGlmZmVyZW5jZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTaXplLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJzZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2V0RGlmZmVyZW5jZURlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMsXG4gIHNpemVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldERpZmZlcmVuY2U6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2V0RGlmZmVyZW5jZVxufTtcbmV4cG9ydHMuc2V0RGlmZmVyZW5jZURlcGVuZGVuY2llcyA9IHNldERpZmZlcmVuY2VEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNldERpc3RpbmN0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2l6ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnNldCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzZXREaXN0aW5jdERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMsXG4gIHNpemVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldERpc3RpbmN0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldERpc3RpbmN0XG59O1xuZXhwb3J0cy5zZXREaXN0aW5jdERlcGVuZGVuY2llcyA9IHNldERpc3RpbmN0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRJbnRlcnNlY3REZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJbmRleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU2l6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNldEludGVyc2VjdERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMsXG4gIHNpemVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldEludGVyc2VjdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRJbnRlcnNlY3Rcbn07XG5leHBvcnRzLnNldEludGVyc2VjdERlcGVuZGVuY2llcyA9IHNldEludGVyc2VjdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0SXNTdWJzZXREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTaXplLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJzZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2V0SXNTdWJzZXREZXBlbmRlbmNpZXMgPSB7XG4gIEluZGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5JbmRleERlcGVuZGVuY2llcyxcbiAgY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5jb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcyxcbiAgc2l6ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpemUuc2l6ZURlcGVuZGVuY2llcyxcbiAgc3Vic2V0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3Vic2V0LnN1YnNldERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU2V0SXNTdWJzZXQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2V0SXNTdWJzZXRcbn07XG5leHBvcnRzLnNldElzU3Vic2V0RGVwZW5kZW5jaWVzID0gc2V0SXNTdWJzZXREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNldE11bHRpcGxpY2l0eURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2l6ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnNldCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzZXRNdWx0aXBsaWNpdHlEZXBlbmRlbmNpZXMgPSB7XG4gIEluZGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5JbmRleERlcGVuZGVuY2llcyxcbiAgY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5jb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcyxcbiAgc2l6ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpemUuc2l6ZURlcGVuZGVuY2llcyxcbiAgc3Vic2V0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3Vic2V0LnN1YnNldERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU2V0TXVsdGlwbGljaXR5OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldE11bHRpcGxpY2l0eVxufTtcbmV4cG9ydHMuc2V0TXVsdGlwbGljaXR5RGVwZW5kZW5jaWVzID0gc2V0TXVsdGlwbGljaXR5RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRQb3dlcnNldERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2l6ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnNldCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzZXRQb3dlcnNldERlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBjb21wYXJlTmF0dXJhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzLFxuICBzaXplRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2l6ZS5zaXplRGVwZW5kZW5jaWVzLFxuICBzdWJzZXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJzZXQuc3Vic2V0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTZXRQb3dlcnNldDogX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRQb3dlcnNldFxufTtcbmV4cG9ydHMuc2V0UG93ZXJzZXREZXBlbmRlbmNpZXMgPSBzZXRQb3dlcnNldERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0U2l6ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNldFNpemVEZXBlbmRlbmNpZXMgPSB7XG4gIGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldFNpemU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2V0U2l6ZVxufTtcbmV4cG9ydHMuc2V0U2l6ZURlcGVuZGVuY2llcyA9IHNldFNpemVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNldFN5bURpZmZlcmVuY2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbmNhdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbmNhdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0RGlmZmVyZW5jZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NldERpZmZlcmVuY2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTaXplLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJzZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2V0U3ltRGlmZmVyZW5jZURlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBjb25jYXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb25jYXQuY29uY2F0RGVwZW5kZW5jaWVzLFxuICBzZXREaWZmZXJlbmNlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2V0RGlmZmVyZW5jZS5zZXREaWZmZXJlbmNlRGVwZW5kZW5jaWVzLFxuICBzaXplRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2l6ZS5zaXplRGVwZW5kZW5jaWVzLFxuICBzdWJzZXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJzZXQuc3Vic2V0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTZXRTeW1EaWZmZXJlbmNlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldFN5bURpZmZlcmVuY2Vcbn07XG5leHBvcnRzLnNldFN5bURpZmZlcmVuY2VEZXBlbmRlbmNpZXMgPSBzZXRTeW1EaWZmZXJlbmNlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRVbmlvbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uY2F0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uY2F0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTZXRJbnRlcnNlY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTZXRJbnRlcnNlY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NldFN5bURpZmZlcmVuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTZXRTeW1EaWZmZXJlbmNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU2l6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNldFVuaW9uRGVwZW5kZW5jaWVzID0ge1xuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIGNvbmNhdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbmNhdC5jb25jYXREZXBlbmRlbmNpZXMsXG4gIHNldEludGVyc2VjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NldEludGVyc2VjdC5zZXRJbnRlcnNlY3REZXBlbmRlbmNpZXMsXG4gIHNldFN5bURpZmZlcmVuY2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTZXRTeW1EaWZmZXJlbmNlLnNldFN5bURpZmZlcmVuY2VEZXBlbmRlbmNpZXMsXG4gIHNpemVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldFVuaW9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldFVuaW9uXG59O1xuZXhwb3J0cy5zZXRVbmlvbkRlcGVuZGVuY2llcyA9IHNldFVuaW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zaWduRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzaWduRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIEZyYWN0aW9uRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcy5GcmFjdGlvbkRlcGVuZGVuY2llcyxcbiAgY29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXguY29tcGxleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU2lnbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVTaWduXG59O1xuZXhwb3J0cy5zaWduRGVwZW5kZW5jaWVzID0gc2lnbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2ltcGxpZnlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnbnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGcmFjdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZyYWN0aW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzT3BlcmF0b3JOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzT3BlcmF0b3JOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N5bWJvbE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNaZXJvID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNaZXJvLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJzZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQb3cgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQb3cuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2ltcGxpZnlEZXBlbmRlbmNpZXMgPSB7XG4gIGJpZ251bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ251bWJlci5iaWdudW1iZXJEZXBlbmRlbmNpZXMsXG4gIGZyYWN0aW9uRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnJhY3Rpb24uZnJhY3Rpb25EZXBlbmRlbmNpZXMsXG4gIENvbnN0YW50Tm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbnN0YW50Tm9kZS5Db25zdGFudE5vZGVEZXBlbmRlbmNpZXMsXG4gIEZ1bmN0aW9uTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZS5GdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXMsXG4gIE9wZXJhdG9yTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZS5PcGVyYXRvck5vZGVEZXBlbmRlbmNpZXMsXG4gIFBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcmVudGhlc2lzTm9kZS5QYXJlbnRoZXNpc05vZGVEZXBlbmRlbmNpZXMsXG4gIFN5bWJvbE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlLlN5bWJvbE5vZGVEZXBlbmRlbmNpZXMsXG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGRpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXMsXG4gIGVxdWFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWwuZXF1YWxEZXBlbmRlbmNpZXMsXG4gIGlzWmVyb0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzWmVyby5pc1plcm9EZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHBhcnNlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFyc2UucGFyc2VEZXBlbmRlbmNpZXMsXG4gIHBvd0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1Bvdy5wb3dEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNpbXBsaWZ5OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNpbXBsaWZ5XG59O1xuZXhwb3J0cy5zaW1wbGlmeURlcGVuZGVuY2llcyA9IHNpbXBsaWZ5RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zaW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzaW5EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNpbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVTaW5cbn07XG5leHBvcnRzLnNpbkRlcGVuZGVuY2llcyA9IHNpbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2luaERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNpbmhEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNpbmg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2luaFxufTtcbmV4cG9ydHMuc2luaERlcGVuZGVuY2llcyA9IHNpbmhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNpemVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNpemVEZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNpemU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2l6ZVxufTtcbmV4cG9ydHMuc2l6ZURlcGVuZGVuY2llcyA9IHNpemVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNsdURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBYnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlckVxID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTGFyZ2VyRXEuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1RyYW5zcG9zZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1RyYW5zcG9zZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzbHVEZXBlbmRlbmNpZXMgPSB7XG4gIFNwYXJzZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLlNwYXJzZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgYWJzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWJzLmFic0RlcGVuZGVuY2llcyxcbiAgYWRkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkLmFkZERlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgbGFyZ2VyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTGFyZ2VyLmxhcmdlckRlcGVuZGVuY2llcyxcbiAgbGFyZ2VyRXFEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNMYXJnZXJFcS5sYXJnZXJFcURlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHJhbnNwb3NlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHJhbnNwb3NlLnRyYW5zcG9zZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU2x1OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNsdVxufTtcbmV4cG9ydHMuc2x1RGVwZW5kZW5jaWVzID0gc2x1RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zbWFsbGVyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc21hbGxlckRlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTbWFsbGVyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNtYWxsZXJcbn07XG5leHBvcnRzLnNtYWxsZXJEZXBlbmRlbmNpZXMgPSBzbWFsbGVyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zbWFsbGVyRXFEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzbWFsbGVyRXFEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU21hbGxlckVxOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNtYWxsZXJFcVxufTtcbmV4cG9ydHMuc21hbGxlckVxRGVwZW5kZW5jaWVzID0gc21hbGxlckVxRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zb3J0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc29ydERlcGVuZGVuY2llcyA9IHtcbiAgY29tcGFyZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBhcmUuY29tcGFyZURlcGVuZGVuY2llcyxcbiAgY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5jb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU29ydDogX2ZhY3Rvcmllc0FueS5jcmVhdGVTb3J0XG59O1xuZXhwb3J0cy5zb3J0RGVwZW5kZW5jaWVzID0gc29ydERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuU3BhRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZpYm9uYWNjaUhlYXBDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZpYm9uYWNjaUhlYXBDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFNwYURlcGVuZGVuY2llcyA9IHtcbiAgRmlib25hY2NpSGVhcERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZpYm9uYWNjaUhlYXBDbGFzcy5GaWJvbmFjY2lIZWFwRGVwZW5kZW5jaWVzLFxuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTcGFDbGFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVTcGFDbGFzc1xufTtcbmV4cG9ydHMuU3BhRGVwZW5kZW5jaWVzID0gU3BhRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcGFyc2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzcGFyc2VEZXBlbmRlbmNpZXMgPSB7XG4gIFNwYXJzZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLlNwYXJzZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3BhcnNlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNwYXJzZVxufTtcbmV4cG9ydHMuc3BhcnNlRGVwZW5kZW5jaWVzID0gc3BhcnNlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5TcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBTcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXMgPSB7XG4gIE1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeENsYXNzLk1hdHJpeERlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3BhcnNlTWF0cml4Q2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3BhcnNlTWF0cml4Q2xhc3Ncbn07XG5leHBvcnRzLlNwYXJzZU1hdHJpeERlcGVuZGVuY2llcyA9IFNwYXJzZU1hdHJpeERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3BlZWRPZkxpZ2h0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzcGVlZE9mTGlnaHREZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTcGVlZE9mTGlnaHQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3BlZWRPZkxpZ2h0XG59O1xuZXhwb3J0cy5zcGVlZE9mTGlnaHREZXBlbmRlbmNpZXMgPSBzcGVlZE9mTGlnaHREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNwbGl0VW5pdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNwbGl0VW5pdERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3BsaXRVbml0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNwbGl0VW5pdFxufTtcbmV4cG9ydHMuc3BsaXRVbml0RGVwZW5kZW5jaWVzID0gc3BsaXRVbml0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcXJ0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzcXJ0RGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNxcnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3FydFxufTtcbmV4cG9ydHMuc3FydERlcGVuZGVuY2llcyA9IHNxcnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNxcnRtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJZGVudGl0eSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lkZW50aXR5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbnYgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJbnYuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01heCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01heC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2l6ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcXJ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNxcnRtRGVwZW5kZW5jaWVzID0ge1xuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBpZGVudGl0eURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lkZW50aXR5LmlkZW50aXR5RGVwZW5kZW5jaWVzLFxuICBpbnZEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbnYuaW52RGVwZW5kZW5jaWVzLFxuICBtYXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXgubWF4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICBzaXplRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2l6ZS5zaXplRGVwZW5kZW5jaWVzLFxuICBzcXJ0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3FydC5zcXJ0RGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTcXJ0bTogX2ZhY3Rvcmllc0FueS5jcmVhdGVTcXJ0bVxufTtcbmV4cG9ydHMuc3FydG1EZXBlbmRlbmNpZXMgPSBzcXJ0bURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3F1YXJlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc3F1YXJlRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTcXVhcmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3F1YXJlXG59O1xuZXhwb3J0cy5zcXVhcmVEZXBlbmRlbmNpZXMgPSBzcXVhcmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNxdWVlemVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNxdWVlemVEZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNxdWVlemU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3F1ZWV6ZVxufTtcbmV4cG9ydHMuc3F1ZWV6ZURlcGVuZGVuY2llcyA9IHNxdWVlemVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnN0ZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNTcXJ0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3FydC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVmFyaWFuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNWYXJpYW5jZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzdGREZXBlbmRlbmNpZXMgPSB7XG4gIHNxcnREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTcXJ0LnNxcnREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHZhcmlhbmNlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVmFyaWFuY2UudmFyaWFuY2VEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN0ZDogX2ZhY3Rvcmllc0FueS5jcmVhdGVTdGRcbn07XG5leHBvcnRzLnN0ZERlcGVuZGVuY2llcyA9IHN0ZERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3RkVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxcnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcXJ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNWYXJpYW5jZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1ZhcmlhbmNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN0ZFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgc3FydERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NxcnQuc3FydERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgdmFyaWFuY2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNWYXJpYW5jZS52YXJpYW5jZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3RkVHJhbnNmb3JtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVN0ZFRyYW5zZm9ybVxufTtcbmV4cG9ydHMuc3RkVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gc3RkVHJhbnNmb3JtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdGVmYW5Cb2x0em1hbm5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN0ZWZhbkJvbHR6bWFubkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN0ZWZhbkJvbHR6bWFubjogX2ZhY3Rvcmllc0FueS5jcmVhdGVTdGVmYW5Cb2x0em1hbm5cbn07XG5leHBvcnRzLnN0ZWZhbkJvbHR6bWFubkRlcGVuZGVuY2llcyA9IHN0ZWZhbkJvbHR6bWFubkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3RpcmxpbmdTMkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGYWN0b3JpYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGYWN0b3JpYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzSW50ZWdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzSW50ZWdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzTmVnYXRpdmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xhcmdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUG93ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUG93LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN0aXJsaW5nUzJEZXBlbmRlbmNpZXMgPSB7XG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGNvbWJpbmF0aW9uc0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucy5jb21iaW5hdGlvbnNEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGZhY3RvcmlhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZhY3RvcmlhbC5mYWN0b3JpYWxEZXBlbmRlbmNpZXMsXG4gIGlzSW50ZWdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzSW50ZWdlci5pc0ludGVnZXJEZXBlbmRlbmNpZXMsXG4gIGlzTmVnYXRpdmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmlzTmVnYXRpdmVEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHBvd0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1Bvdy5wb3dEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN0aXJsaW5nUzI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3RpcmxpbmdTMlxufTtcbmV4cG9ydHMuc3RpcmxpbmdTMkRlcGVuZGVuY2llcyA9IHN0aXJsaW5nUzJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnN0cmluZ0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN0cmluZ0RlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3RyaW5nOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVN0cmluZ1xufTtcbmV4cG9ydHMuc3RyaW5nRGVwZW5kZW5jaWVzID0gc3RyaW5nRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdWJzZXREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN1YnNldERlcGVuZGVuY2llcyA9IHtcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3Vic2V0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVN1YnNldFxufTtcbmV4cG9ydHMuc3Vic2V0RGVwZW5kZW5jaWVzID0gc3Vic2V0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdWJzZXRUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN1YnNldFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3Vic2V0VHJhbnNmb3JtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVN1YnNldFRyYW5zZm9ybVxufTtcbmV4cG9ydHMuc3Vic2V0VHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gc3Vic2V0VHJhbnNmb3JtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdWJ0cmFjdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuYXJ5TWludXMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN1YnRyYWN0RGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHVuYXJ5TWludXNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLnVuYXJ5TWludXNEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN1YnRyYWN0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVN1YnRyYWN0XG59O1xuZXhwb3J0cy5zdWJ0cmFjdERlcGVuZGVuY2llcyA9IHN1YnRyYWN0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdW1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnbnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGcmFjdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZyYWN0aW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc3VtRGVwZW5kZW5jaWVzID0ge1xuICBiaWdudW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdudW1iZXIuYmlnbnVtYmVyRGVwZW5kZW5jaWVzLFxuICBmcmFjdGlvbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZyYWN0aW9uLmZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTdW06IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3VtXG59O1xuZXhwb3J0cy5zdW1EZXBlbmRlbmNpZXMgPSBzdW1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnN1bVRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdudW1iZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdudW1iZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRnJhY3Rpb24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzdW1UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIGJpZ251bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ251bWJlci5iaWdudW1iZXJEZXBlbmRlbmNpZXMsXG4gIGZyYWN0aW9uRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnJhY3Rpb24uZnJhY3Rpb25EZXBlbmRlbmNpZXMsXG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN1bVRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVTdW1UcmFuc2Zvcm1cbn07XG5leHBvcnRzLnN1bVRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHN1bVRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuU3ltYm9sTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFN5bWJvbE5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3ltYm9sTm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVTeW1ib2xOb2RlXG59O1xuZXhwb3J0cy5TeW1ib2xOb2RlRGVwZW5kZW5jaWVzID0gU3ltYm9sTm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudGFuRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdGFuRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVUYW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlVGFuXG59O1xuZXhwb3J0cy50YW5EZXBlbmRlbmNpZXMgPSB0YW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRhbmhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB0YW5oRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVUYW5oOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVRhbmhcbn07XG5leHBvcnRzLnRhbmhEZXBlbmRlbmNpZXMgPSB0YW5oRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50YXVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB0YXVEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlVGF1OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVRhdVxufTtcbmV4cG9ydHMudGF1RGVwZW5kZW5jaWVzID0gdGF1RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50aG9tc29uQ3Jvc3NTZWN0aW9uRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB0aG9tc29uQ3Jvc3NTZWN0aW9uRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVGhvbXNvbkNyb3NzU2VjdGlvbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVUaG9tc29uQ3Jvc3NTZWN0aW9uXG59O1xuZXhwb3J0cy50aG9tc29uQ3Jvc3NTZWN0aW9uRGVwZW5kZW5jaWVzID0gdGhvbXNvbkNyb3NzU2VjdGlvbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudG9EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHRvRGVwZW5kZW5jaWVzID0ge1xuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVUbzogX2ZhY3Rvcmllc0FueS5jcmVhdGVUb1xufTtcbmV4cG9ydHMudG9EZXBlbmRlbmNpZXMgPSB0b0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudHJhY2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdHJhY2VEZXBlbmRlbmNpZXMgPSB7XG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVRyYWNlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVRyYWNlXG59O1xuZXhwb3J0cy50cmFjZURlcGVuZGVuY2llcyA9IHRyYWNlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50cmFuc3Bvc2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHRyYW5zcG9zZURlcGVuZGVuY2llcyA9IHtcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVHJhbnNwb3NlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVRyYW5zcG9zZVxufTtcbmV4cG9ydHMudHJhbnNwb3NlRGVwZW5kZW5jaWVzID0gdHJhbnNwb3NlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50cnVlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdHJ1ZURlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlVHJ1ZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVUcnVlXG59O1xuZXhwb3J0cy50cnVlRGVwZW5kZW5jaWVzID0gdHJ1ZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudHlwZU9mRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdHlwZU9mRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVUeXBlT2Y6IF9mYWN0b3JpZXNBbnkuY3JlYXRlVHlwZU9mXG59O1xuZXhwb3J0cy50eXBlT2ZEZXBlbmRlbmNpZXMgPSB0eXBlT2ZEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnR5cGVkRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHR5cGVkRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBGcmFjdGlvbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuRnJhY3Rpb25EZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVR5cGVkOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVR5cGVkXG59O1xuZXhwb3J0cy50eXBlZERlcGVuZGVuY2llcyA9IHR5cGVkRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy51bmFyeU1pbnVzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdW5hcnlNaW51c0RlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVW5hcnlNaW51czogX2ZhY3Rvcmllc0FueS5jcmVhdGVVbmFyeU1pbnVzXG59O1xuZXhwb3J0cy51bmFyeU1pbnVzRGVwZW5kZW5jaWVzID0gdW5hcnlNaW51c0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudW5hcnlQbHVzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdW5hcnlQbHVzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVVuYXJ5UGx1czogX2ZhY3Rvcmllc0FueS5jcmVhdGVVbmFyeVBsdXNcbn07XG5leHBvcnRzLnVuYXJ5UGx1c0RlcGVuZGVuY2llcyA9IHVuYXJ5UGx1c0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudW5lcXVhbERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHVuZXF1YWxEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVW5lcXVhbDogX2ZhY3Rvcmllc0FueS5jcmVhdGVVbmVxdWFsXG59O1xuZXhwb3J0cy51bmVxdWFsRGVwZW5kZW5jaWVzID0gdW5lcXVhbERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuVW5pdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBYnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Zvcm1hdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Zvcm1hdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOdW1lcmljID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOdW1lcmljLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOdW1iZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOdW1iZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BvdyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Bvdy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUm91bmQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSb3VuZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBVbml0RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgRnJhY3Rpb25EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLkZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBlcXVhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsLmVxdWFsRGVwZW5kZW5jaWVzLFxuICBmaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGaXguZml4RGVwZW5kZW5jaWVzLFxuICBmb3JtYXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGb3JtYXQuZm9ybWF0RGVwZW5kZW5jaWVzLFxuICBpc051bWVyaWNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc051bWVyaWMuaXNOdW1lcmljRGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICBudW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOdW1iZXIubnVtYmVyRGVwZW5kZW5jaWVzLFxuICBwb3dEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQb3cucG93RGVwZW5kZW5jaWVzLFxuICByb3VuZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1JvdW5kLnJvdW5kRGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVVbml0Q2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlVW5pdENsYXNzXG59O1xuZXhwb3J0cy5Vbml0RGVwZW5kZW5jaWVzID0gVW5pdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudW5pdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdW5pdERlcGVuZGVuY2llcyA9IHtcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVVbml0RnVuY3Rpb246IF9mYWN0b3JpZXNBbnkuY3JlYXRlVW5pdEZ1bmN0aW9uXG59O1xuZXhwb3J0cy51bml0RGVwZW5kZW5jaWVzID0gdW5pdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuRURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNFID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBFRGVwZW5kZW5jaWVzID0ge1xuICBlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRS5lRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVVcHBlcmNhc2VFOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVVwcGVyY2FzZUVcbn07XG5leHBvcnRzLkVEZXBlbmRlbmNpZXMgPSBFRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5QSURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNQaSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BpLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFBJRGVwZW5kZW5jaWVzID0ge1xuICBwaURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BpLnBpRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVVcHBlcmNhc2VQaTogX2ZhY3Rvcmllc0FueS5jcmVhdGVVcHBlcmNhc2VQaVxufTtcbmV4cG9ydHMuUElEZXBlbmRlbmNpZXMgPSBQSURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudXNvbHZlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB1c29sdmVEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVXNvbHZlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVVzb2x2ZVxufTtcbmV4cG9ydHMudXNvbHZlRGVwZW5kZW5jaWVzID0gdXNvbHZlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy52YWN1dW1JbXBlZGFuY2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHZhY3V1bUltcGVkYW5jZURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVZhY3V1bUltcGVkYW5jZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVWYWN1dW1JbXBlZGFuY2Vcbn07XG5leHBvcnRzLnZhY3V1bUltcGVkYW5jZURlcGVuZGVuY2llcyA9IHZhY3V1bUltcGVkYW5jZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudmFyaWFuY2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBcHBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FwcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTmFOID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOYU4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdmFyaWFuY2VEZXBlbmRlbmNpZXMgPSB7XG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGFwcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQXBwbHkuYXBwbHlEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXMsXG4gIGlzTmFORGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOYU4uaXNOYU5EZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVZhcmlhbmNlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVZhcmlhbmNlXG59O1xuZXhwb3J0cy52YXJpYW5jZURlcGVuZGVuY2llcyA9IHZhcmlhbmNlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy52YXJpYW5jZVRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FwcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQXBwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOYU4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc05hTi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB2YXJpYW5jZVRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgYWRkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkLmFkZERlcGVuZGVuY2llcyxcbiAgYXBwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBcHBseS5hcHBseURlcGVuZGVuY2llcyxcbiAgZGl2aWRlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlLmRpdmlkZURlcGVuZGVuY2llcyxcbiAgaXNOYU5EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc05hTi5pc05hTkRlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVmFyaWFuY2VUcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlVmFyaWFuY2VUcmFuc2Zvcm1cbn07XG5leHBvcnRzLnZhcmlhbmNlVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gdmFyaWFuY2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnZlcnNpb25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB2ZXJzaW9uRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVWZXJzaW9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVZlcnNpb25cbn07XG5leHBvcnRzLnZlcnNpb25EZXBlbmRlbmNpZXMgPSB2ZXJzaW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy53ZWFrTWl4aW5nQW5nbGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB3ZWFrTWl4aW5nQW5nbGVEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlV2Vha01peGluZ0FuZ2xlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVdlYWtNaXhpbmdBbmdsZVxufTtcbmV4cG9ydHMud2Vha01peGluZ0FuZ2xlRGVwZW5kZW5jaWVzID0gd2Vha01peGluZ0FuZ2xlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy53aWVuRGlzcGxhY2VtZW50RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB3aWVuRGlzcGxhY2VtZW50RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlV2llbkRpc3BsYWNlbWVudDogX2ZhY3Rvcmllc0FueS5jcmVhdGVXaWVuRGlzcGxhY2VtZW50XG59O1xuZXhwb3J0cy53aWVuRGlzcGxhY2VtZW50RGVwZW5kZW5jaWVzID0gd2llbkRpc3BsYWNlbWVudERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMueGdjZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgeGdjZERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVYZ2NkOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVhnY2Rcbn07XG5leHBvcnRzLnhnY2REZXBlbmRlbmNpZXMgPSB4Z2NkRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy54b3JEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB4b3JEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlWG9yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVhvclxufTtcbmV4cG9ydHMueG9yRGVwZW5kZW5jaWVzID0geG9yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy56ZXJvc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgemVyb3NEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlWmVyb3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlWmVyb3Ncbn07XG5leHBvcnRzLnplcm9zRGVwZW5kZW5jaWVzID0gemVyb3NEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmVycm9yID0gZXhwb3J0cy5qc29uID0gZXhwb3J0cy5leHByZXNzaW9uID0gZXhwb3J0cy50eXBlID0gZXhwb3J0cy5kZXByZWNhdGVkVHlwZW9mID0gZXhwb3J0cy5kZXByZWNhdGVkVmFyID0gZXhwb3J0cy5kZXByZWNhdGVkSW1wb3J0ID0gZXhwb3J0cy5kZXByZWNhdGVkRXZhbCA9IHZvaWQgMDtcblxudmFyIF9ldmFsID0gcmVxdWlyZShcIi4uL2V4cHJlc3Npb24vZnVuY3Rpb24vZXZhbFwiKTtcblxudmFyIF9kZXByZWNhdGVkSW1wb3J0ID0gcmVxdWlyZShcIi4uL2NvcmUvZnVuY3Rpb24vZGVwcmVjYXRlZEltcG9ydFwiKTtcblxudmFyIF92YXJpYW5jZSA9IHJlcXVpcmUoXCIuLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3ZhcmlhbmNlXCIpO1xuXG52YXIgX3R5cGVPZiA9IHJlcXVpcmUoXCIuLi9mdW5jdGlvbi91dGlscy90eXBlT2ZcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfQXJndW1lbnRzRXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvQXJndW1lbnRzRXJyb3JcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBfSW5kZXhFcnJvciA9IHJlcXVpcmUoXCIuLi9lcnJvci9JbmRleEVycm9yXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfbG9nID0gcmVxdWlyZShcIi4uL3V0aWxzL2xvZ1wiKTtcblxudmFyIF9wdXJlRnVuY3Rpb25zQW55ID0gcmVxdWlyZShcIi4vcHVyZUZ1bmN0aW9uc0FueS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfaW1wdXJlRnVuY3Rpb25zQW55ID0gcmVxdWlyZShcIi4vaW1wdXJlRnVuY3Rpb25zQW55LmdlbmVyYXRlZFwiKTtcblxuLy8gVE9ETzogZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDYuMC4wLiBEYXRlOiAyMDE5LTA0LTE0XG4vLyBcImRlcHJlY2F0ZWRFdmFsXCIgaXMgYWxzbyBleHBvc2VkIGFzIFwiZXZhbFwiIGluIHRoZSBjb2RlIGNvbXBpbGVkIHRvIEVTNStDb21tb25Kc1xudmFyIGRlcHJlY2F0ZWRFdmFsID0gLyogI19fUFVSRV9fICovKDAsIF9ldmFsLmNyZWF0ZURlcHJlY2F0ZWRFdmFsKSh7XG4gIGV2YWx1YXRlOiBfaW1wdXJlRnVuY3Rpb25zQW55LmV2YWx1YXRlXG59KTsgLy8gXCJkZXByZWNhdGVkSW1wb3J0XCIgaXMgYWxzbyBleHBvc2VkIGFzIFwiaW1wb3J0XCIgaW4gdGhlIGNvZGUgY29tcGlsZWQgdG8gRVM1K0NvbW1vbkpzXG5cbmV4cG9ydHMuZGVwcmVjYXRlZEV2YWwgPSBkZXByZWNhdGVkRXZhbDtcbnZhciBkZXByZWNhdGVkSW1wb3J0ID0gLyogI19fUFVSRV9fICovKDAsIF9kZXByZWNhdGVkSW1wb3J0LmNyZWF0ZURlcHJlY2F0ZWRJbXBvcnQpKHt9KTsgLy8gXCJkZXByZWNhdGVkVmFyXCIgaXMgYWxzbyBleHBvc2VkIGFzIFwidmFyXCIgaW4gdGhlIGNvZGUgY29tcGlsZWQgdG8gRVM1K0NvbW1vbkpzXG5cbmV4cG9ydHMuZGVwcmVjYXRlZEltcG9ydCA9IGRlcHJlY2F0ZWRJbXBvcnQ7XG52YXIgZGVwcmVjYXRlZFZhciA9IC8qICNfX1BVUkVfXyAqLygwLCBfdmFyaWFuY2UuY3JlYXRlRGVwcmVjYXRlZFZhcikoe1xuICB2YXJpYW5jZTogX3B1cmVGdW5jdGlvbnNBbnkudmFyaWFuY2Vcbn0pOyAvLyBcImRlcHJlY2F0ZWRUeXBlb2ZcIiBpcyBhbHNvIGV4cG9zZWQgYXMgXCJ0eXBlb2ZcIiBpbiB0aGUgY29kZSBjb21waWxlZCB0byBFUzUrQ29tbW9uSnNcblxuZXhwb3J0cy5kZXByZWNhdGVkVmFyID0gZGVwcmVjYXRlZFZhcjtcbnZhciBkZXByZWNhdGVkVHlwZW9mID0gLyogI19fUFVSRV9fICovKDAsIF90eXBlT2YuY3JlYXRlRGVwcmVjYXRlZFR5cGVvZikoe1xuICB0eXBlT2Y6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVPZlxufSk7XG5leHBvcnRzLmRlcHJlY2F0ZWRUeXBlb2YgPSBkZXByZWNhdGVkVHlwZW9mO1xudmFyIHR5cGUgPSAvKiAjX19QVVJFX18gKi9jcmVhdGVEZXByZWNhdGVkUHJvcGVydGllcygndHlwZScsIHtcbiAgaXNOdW1iZXI6IF9pcy5pc051bWJlcixcbiAgaXNDb21wbGV4OiBfaXMuaXNDb21wbGV4LFxuICBpc0JpZ051bWJlcjogX2lzLmlzQmlnTnVtYmVyLFxuICBpc0ZyYWN0aW9uOiBfaXMuaXNGcmFjdGlvbixcbiAgaXNVbml0OiBfaXMuaXNVbml0LFxuICBpc1N0cmluZzogX2lzLmlzU3RyaW5nLFxuICBpc0FycmF5OiBfaXMuaXNBcnJheSxcbiAgaXNNYXRyaXg6IF9pcy5pc01hdHJpeCxcbiAgaXNDb2xsZWN0aW9uOiBfaXMuaXNDb2xsZWN0aW9uLFxuICBpc0RlbnNlTWF0cml4OiBfaXMuaXNEZW5zZU1hdHJpeCxcbiAgaXNTcGFyc2VNYXRyaXg6IF9pcy5pc1NwYXJzZU1hdHJpeCxcbiAgaXNSYW5nZTogX2lzLmlzUmFuZ2UsXG4gIGlzSW5kZXg6IF9pcy5pc0luZGV4LFxuICBpc0Jvb2xlYW46IF9pcy5pc0Jvb2xlYW4sXG4gIGlzUmVzdWx0U2V0OiBfaXMuaXNSZXN1bHRTZXQsXG4gIGlzSGVscDogX2lzLmlzSGVscCxcbiAgaXNGdW5jdGlvbjogX2lzLmlzRnVuY3Rpb24sXG4gIGlzRGF0ZTogX2lzLmlzRGF0ZSxcbiAgaXNSZWdFeHA6IF9pcy5pc1JlZ0V4cCxcbiAgaXNPYmplY3Q6IF9pcy5pc09iamVjdCxcbiAgaXNOdWxsOiBfaXMuaXNOdWxsLFxuICBpc1VuZGVmaW5lZDogX2lzLmlzVW5kZWZpbmVkLFxuICBpc0FjY2Vzc29yTm9kZTogX2lzLmlzQWNjZXNzb3JOb2RlLFxuICBpc0FycmF5Tm9kZTogX2lzLmlzQXJyYXlOb2RlLFxuICBpc0Fzc2lnbm1lbnROb2RlOiBfaXMuaXNBc3NpZ25tZW50Tm9kZSxcbiAgaXNCbG9ja05vZGU6IF9pcy5pc0Jsb2NrTm9kZSxcbiAgaXNDb25kaXRpb25hbE5vZGU6IF9pcy5pc0NvbmRpdGlvbmFsTm9kZSxcbiAgaXNDb25zdGFudE5vZGU6IF9pcy5pc0NvbnN0YW50Tm9kZSxcbiAgaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlOiBfaXMuaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlLFxuICBpc0Z1bmN0aW9uTm9kZTogX2lzLmlzRnVuY3Rpb25Ob2RlLFxuICBpc0luZGV4Tm9kZTogX2lzLmlzSW5kZXhOb2RlLFxuICBpc05vZGU6IF9pcy5pc05vZGUsXG4gIGlzT2JqZWN0Tm9kZTogX2lzLmlzT2JqZWN0Tm9kZSxcbiAgaXNPcGVyYXRvck5vZGU6IF9pcy5pc09wZXJhdG9yTm9kZSxcbiAgaXNQYXJlbnRoZXNpc05vZGU6IF9pcy5pc1BhcmVudGhlc2lzTm9kZSxcbiAgaXNSYW5nZU5vZGU6IF9pcy5pc1JhbmdlTm9kZSxcbiAgaXNTeW1ib2xOb2RlOiBfaXMuaXNTeW1ib2xOb2RlLFxuICBpc0NoYWluOiBfaXMuaXNDaGFpbixcbiAgQmlnTnVtYmVyOiBfcHVyZUZ1bmN0aW9uc0FueS5CaWdOdW1iZXIsXG4gIENoYWluOiBfaW1wdXJlRnVuY3Rpb25zQW55LkNoYWluLFxuICBDb21wbGV4OiBfcHVyZUZ1bmN0aW9uc0FueS5Db21wbGV4LFxuICBGcmFjdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkuRnJhY3Rpb24sXG4gIE1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkuTWF0cml4LFxuICBEZW5zZU1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkuRGVuc2VNYXRyaXgsXG4gIFNwYXJzZU1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkuU3BhcnNlTWF0cml4LFxuICBTcGE6IF9wdXJlRnVuY3Rpb25zQW55LlNwYSxcbiAgRmlib25hY2NpSGVhcDogX3B1cmVGdW5jdGlvbnNBbnkuRmlib25hY2NpSGVhcCxcbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXg6IF9wdXJlRnVuY3Rpb25zQW55LkltbXV0YWJsZURlbnNlTWF0cml4LFxuICBJbmRleDogX3B1cmVGdW5jdGlvbnNBbnkuSW5kZXgsXG4gIFJhbmdlOiBfcHVyZUZ1bmN0aW9uc0FueS5SYW5nZSxcbiAgUmVzdWx0U2V0OiBfcHVyZUZ1bmN0aW9uc0FueS5SZXN1bHRTZXQsXG4gIFVuaXQ6IF9wdXJlRnVuY3Rpb25zQW55LlVuaXQsXG4gIEhlbHA6IF9pbXB1cmVGdW5jdGlvbnNBbnkuSGVscCxcbiAgUGFyc2VyOiBfaW1wdXJlRnVuY3Rpb25zQW55LlBhcnNlclxufSk7XG5leHBvcnRzLnR5cGUgPSB0eXBlO1xudmFyIGV4cHJlc3Npb24gPSAvKiAjX19QVVJFX18gKi9jcmVhdGVEZXByZWNhdGVkUHJvcGVydGllcygnZXhwcmVzc2lvbicsIHtcbiAgcGFyc2U6IF9pbXB1cmVGdW5jdGlvbnNBbnkucGFyc2UsXG4gIFBhcnNlcjogX2ltcHVyZUZ1bmN0aW9uc0FueS5QYXJzZXIsXG4gIG5vZGU6IGNyZWF0ZURlcHJlY2F0ZWRQcm9wZXJ0aWVzKCdleHByZXNzaW9uLm5vZGUnLCB7XG4gICAgQWNjZXNzb3JOb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55LkFjY2Vzc29yTm9kZSxcbiAgICBBcnJheU5vZGU6IF9pbXB1cmVGdW5jdGlvbnNBbnkuQXJyYXlOb2RlLFxuICAgIEFzc2lnbm1lbnROb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55LkFzc2lnbm1lbnROb2RlLFxuICAgIEJsb2NrTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5CbG9ja05vZGUsXG4gICAgQ29uZGl0aW9uYWxOb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55LkNvbmRpdGlvbmFsTm9kZSxcbiAgICBDb25zdGFudE5vZGU6IF9pbXB1cmVGdW5jdGlvbnNBbnkuQ29uc3RhbnROb2RlLFxuICAgIEluZGV4Tm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5JbmRleE5vZGUsXG4gICAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5GdW5jdGlvbkFzc2lnbm1lbnROb2RlLFxuICAgIEZ1bmN0aW9uTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5GdW5jdGlvbk5vZGUsXG4gICAgTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5Ob2RlLFxuICAgIE9iamVjdE5vZGU6IF9pbXB1cmVGdW5jdGlvbnNBbnkuT2JqZWN0Tm9kZSxcbiAgICBPcGVyYXRvck5vZGU6IF9pbXB1cmVGdW5jdGlvbnNBbnkuT3BlcmF0b3JOb2RlLFxuICAgIFBhcmVudGhlc2lzTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5QYXJlbnRoZXNpc05vZGUsXG4gICAgUmFuZ2VOb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55LlJhbmdlTm9kZSxcbiAgICBSZWxhdGlvbmFsTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5SZWxhdGlvbmFsTm9kZSxcbiAgICBTeW1ib2xOb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55LlN5bWJvbE5vZGVcbiAgfSlcbn0pO1xuZXhwb3J0cy5leHByZXNzaW9uID0gZXhwcmVzc2lvbjtcbnZhciBqc29uID0gLyogI19fUFVSRV9fICovY3JlYXRlRGVwcmVjYXRlZFByb3BlcnRpZXMoJ2pzb24nLCB7XG4gIHJldml2ZXI6IF9pbXB1cmVGdW5jdGlvbnNBbnkucmV2aXZlclxufSk7XG5leHBvcnRzLmpzb24gPSBqc29uO1xudmFyIGVycm9yID0gLyogI19fUFVSRV9fICovY3JlYXRlRGVwcmVjYXRlZFByb3BlcnRpZXMoJ2Vycm9yJywge1xuICBBcmd1bWVudHNFcnJvcjogX0FyZ3VtZW50c0Vycm9yLkFyZ3VtZW50c0Vycm9yLFxuICBEaW1lbnNpb25FcnJvcjogX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yLFxuICBJbmRleEVycm9yOiBfSW5kZXhFcnJvci5JbmRleEVycm9yXG59KTtcbmV4cG9ydHMuZXJyb3IgPSBlcnJvcjtcblxuZnVuY3Rpb24gY3JlYXRlRGVwcmVjYXRlZFByb3BlcnRpZXMocGF0aCwgcHJvcHMpIHtcbiAgdmFyIG9iaiA9IHt9O1xuICBPYmplY3Qua2V5cyhwcm9wcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICgwLCBfb2JqZWN0LmxhenkpKG9iaiwgbmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgKDAsIF9sb2cud2Fybk9uY2UpKFwibWF0aC5cIi5jb25jYXQocGF0aCwgXCIuXCIpLmNvbmNhdChuYW1lLCBcIiBpcyBtb3ZlZCB0byBtYXRoLlwiKS5jb25jYXQobmFtZSwgXCIgaW4gdjYuMC4wLiBcIikgKyAnUGxlYXNlIHVzZSB0aGUgbmV3IGxvY2F0aW9uIGluc3RlYWQuJyk7XG4gICAgICByZXR1cm4gcHJvcHNbbmFtZV07XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gb2JqO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZG9jc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZW1iZWRkZWREb2NzLmVtYmVkZGVkRG9jcztcbiAgfVxufSk7XG5leHBvcnRzLmRlcml2YXRpdmUgPSBleHBvcnRzLmhlbHAgPSBleHBvcnRzLnJhdGlvbmFsaXplID0gZXhwb3J0cy5zaW1wbGlmeSA9IGV4cG9ydHMucGFyc2VyID0gZXhwb3J0cy5jb21waWxlID0gZXhwb3J0cy5IZWxwID0gZXhwb3J0cy5QYXJzZXIgPSBleHBvcnRzLmV2YWx1YXRlID0gZXhwb3J0cy5wYXJzZSA9IGV4cG9ydHMuRnVuY3Rpb25Ob2RlID0gZXhwb3J0cy5TeW1ib2xOb2RlID0gZXhwb3J0cy5Bc3NpZ25tZW50Tm9kZSA9IGV4cG9ydHMuSW5kZXhOb2RlID0gZXhwb3J0cy5BY2Nlc3Nvck5vZGUgPSBleHBvcnRzLmNoYWluID0gZXhwb3J0cy5GdW5jdGlvbkFzc2lnbm1lbnROb2RlID0gZXhwb3J0cy5SYW5nZU5vZGUgPSBleHBvcnRzLk9wZXJhdG9yTm9kZSA9IGV4cG9ydHMuQ29uZGl0aW9uYWxOb2RlID0gZXhwb3J0cy5yZXZpdmVyID0gZXhwb3J0cy5DaGFpbiA9IGV4cG9ydHMuUmVsYXRpb25hbE5vZGUgPSBleHBvcnRzLlBhcmVudGhlc2lzTm9kZSA9IGV4cG9ydHMuT2JqZWN0Tm9kZSA9IGV4cG9ydHMuQ29uc3RhbnROb2RlID0gZXhwb3J0cy5CbG9ja05vZGUgPSBleHBvcnRzLkFycmF5Tm9kZSA9IGV4cG9ydHMuTm9kZSA9IHZvaWQgMDtcblxudmFyIF9jb25maWdSZWFkb25seSA9IHJlcXVpcmUoXCIuL2NvbmZpZ1JlYWRvbmx5XCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi9mYWN0b3JpZXNBbnlcIik7XG5cbnZhciBfcHVyZUZ1bmN0aW9uc0FueSA9IHJlcXVpcmUoXCIuL3B1cmVGdW5jdGlvbnNBbnkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2VtYmVkZGVkRG9jcyA9IHJlcXVpcmUoXCIuLi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9lbWJlZGRlZERvY3NcIik7XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbnZhciBtYXRoID0ge307IC8vIE5PVCBwdXJlIVxuXG52YXIgbWF0aFdpdGhUcmFuc2Zvcm0gPSB7fTsgLy8gTk9UIHB1cmUhXG5cbnZhciBjbGFzc2VzID0ge307IC8vIE5PVCBwdXJlIVxuXG52YXIgTm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU5vZGUpKHtcbiAgbWF0aFdpdGhUcmFuc2Zvcm06IG1hdGhXaXRoVHJhbnNmb3JtXG59KTtcbmV4cG9ydHMuTm9kZSA9IE5vZGU7XG52YXIgQXJyYXlOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQXJyYXlOb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5BcnJheU5vZGUgPSBBcnJheU5vZGU7XG52YXIgQmxvY2tOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQmxvY2tOb2RlKSh7XG4gIE5vZGU6IE5vZGUsXG4gIFJlc3VsdFNldDogX3B1cmVGdW5jdGlvbnNBbnkuUmVzdWx0U2V0XG59KTtcbmV4cG9ydHMuQmxvY2tOb2RlID0gQmxvY2tOb2RlO1xudmFyIENvbnN0YW50Tm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbnN0YW50Tm9kZSkoe1xuICBOb2RlOiBOb2RlXG59KTtcbmV4cG9ydHMuQ29uc3RhbnROb2RlID0gQ29uc3RhbnROb2RlO1xudmFyIE9iamVjdE5vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVPYmplY3ROb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5PYmplY3ROb2RlID0gT2JqZWN0Tm9kZTtcbnZhciBQYXJlbnRoZXNpc05vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQYXJlbnRoZXNpc05vZGUpKHtcbiAgTm9kZTogTm9kZVxufSk7XG5leHBvcnRzLlBhcmVudGhlc2lzTm9kZSA9IFBhcmVudGhlc2lzTm9kZTtcbnZhciBSZWxhdGlvbmFsTm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlbGF0aW9uYWxOb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5SZWxhdGlvbmFsTm9kZSA9IFJlbGF0aW9uYWxOb2RlO1xudmFyIENoYWluID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2hhaW5DbGFzcykoe1xuICBtYXRoOiBtYXRoXG59KTtcbmV4cG9ydHMuQ2hhaW4gPSBDaGFpbjtcbnZhciByZXZpdmVyID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUmV2aXZlcikoe1xuICBjbGFzc2VzOiBjbGFzc2VzXG59KTtcbmV4cG9ydHMucmV2aXZlciA9IHJldml2ZXI7XG52YXIgQ29uZGl0aW9uYWxOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29uZGl0aW9uYWxOb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5Db25kaXRpb25hbE5vZGUgPSBDb25kaXRpb25hbE5vZGU7XG52YXIgT3BlcmF0b3JOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlT3BlcmF0b3JOb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5PcGVyYXRvck5vZGUgPSBPcGVyYXRvck5vZGU7XG52YXIgUmFuZ2VOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUmFuZ2VOb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5SYW5nZU5vZGUgPSBSYW5nZU5vZGU7XG52YXIgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZ1bmN0aW9uQXNzaWdubWVudE5vZGUpKHtcbiAgTm9kZTogTm9kZSxcbiAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG59KTtcbmV4cG9ydHMuRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9IEZ1bmN0aW9uQXNzaWdubWVudE5vZGU7XG52YXIgY2hhaW4gPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDaGFpbikoe1xuICBDaGFpbjogQ2hhaW4sXG4gIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxufSk7XG5leHBvcnRzLmNoYWluID0gY2hhaW47XG52YXIgQWNjZXNzb3JOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNjZXNzb3JOb2RlKSh7XG4gIE5vZGU6IE5vZGUsXG4gIHN1YnNldDogX3B1cmVGdW5jdGlvbnNBbnkuc3Vic2V0XG59KTtcbmV4cG9ydHMuQWNjZXNzb3JOb2RlID0gQWNjZXNzb3JOb2RlO1xudmFyIEluZGV4Tm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUluZGV4Tm9kZSkoe1xuICBOb2RlOiBOb2RlLFxuICBSYW5nZTogX3B1cmVGdW5jdGlvbnNBbnkuUmFuZ2UsXG4gIHNpemU6IF9wdXJlRnVuY3Rpb25zQW55LnNpemVcbn0pO1xuZXhwb3J0cy5JbmRleE5vZGUgPSBJbmRleE5vZGU7XG52YXIgQXNzaWdubWVudE5vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBc3NpZ25tZW50Tm9kZSkoe1xuICBtYXRyaXg6IF9wdXJlRnVuY3Rpb25zQW55Lm1hdHJpeCxcbiAgTm9kZTogTm9kZSxcbiAgc3Vic2V0OiBfcHVyZUZ1bmN0aW9uc0FueS5zdWJzZXRcbn0pO1xuZXhwb3J0cy5Bc3NpZ25tZW50Tm9kZSA9IEFzc2lnbm1lbnROb2RlO1xudmFyIFN5bWJvbE5vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTeW1ib2xOb2RlKSh7XG4gIFVuaXQ6IF9wdXJlRnVuY3Rpb25zQW55LlVuaXQsXG4gIE5vZGU6IE5vZGUsXG4gIG1hdGg6IG1hdGhcbn0pO1xuZXhwb3J0cy5TeW1ib2xOb2RlID0gU3ltYm9sTm9kZTtcbnZhciBGdW5jdGlvbk5vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGdW5jdGlvbk5vZGUpKHtcbiAgTm9kZTogTm9kZSxcbiAgU3ltYm9sTm9kZTogU3ltYm9sTm9kZSxcbiAgbWF0aDogbWF0aFxufSk7XG5leHBvcnRzLkZ1bmN0aW9uTm9kZSA9IEZ1bmN0aW9uTm9kZTtcbnZhciBwYXJzZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBhcnNlKSh7XG4gIEFjY2Vzc29yTm9kZTogQWNjZXNzb3JOb2RlLFxuICBBcnJheU5vZGU6IEFycmF5Tm9kZSxcbiAgQXNzaWdubWVudE5vZGU6IEFzc2lnbm1lbnROb2RlLFxuICBCbG9ja05vZGU6IEJsb2NrTm9kZSxcbiAgQ29uZGl0aW9uYWxOb2RlOiBDb25kaXRpb25hbE5vZGUsXG4gIENvbnN0YW50Tm9kZTogQ29uc3RhbnROb2RlLFxuICBGdW5jdGlvbkFzc2lnbm1lbnROb2RlOiBGdW5jdGlvbkFzc2lnbm1lbnROb2RlLFxuICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgSW5kZXhOb2RlOiBJbmRleE5vZGUsXG4gIE9iamVjdE5vZGU6IE9iamVjdE5vZGUsXG4gIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZSxcbiAgUmFuZ2VOb2RlOiBSYW5nZU5vZGUsXG4gIFJlbGF0aW9uYWxOb2RlOiBSZWxhdGlvbmFsTm9kZSxcbiAgU3ltYm9sTm9kZTogU3ltYm9sTm9kZSxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBudW1lcmljOiBfcHVyZUZ1bmN0aW9uc0FueS5udW1lcmljLFxuICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbn0pO1xuZXhwb3J0cy5wYXJzZSA9IHBhcnNlO1xudmFyIGV2YWx1YXRlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRXZhbHVhdGUpKHtcbiAgcGFyc2U6IHBhcnNlLFxuICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbn0pO1xuZXhwb3J0cy5ldmFsdWF0ZSA9IGV2YWx1YXRlO1xudmFyIFBhcnNlciA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBhcnNlckNsYXNzKSh7XG4gIHBhcnNlOiBwYXJzZVxufSk7XG5leHBvcnRzLlBhcnNlciA9IFBhcnNlcjtcbnZhciBIZWxwID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSGVscENsYXNzKSh7XG4gIHBhcnNlOiBwYXJzZVxufSk7XG5leHBvcnRzLkhlbHAgPSBIZWxwO1xudmFyIGNvbXBpbGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21waWxlKSh7XG4gIHBhcnNlOiBwYXJzZSxcbiAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG59KTtcbmV4cG9ydHMuY29tcGlsZSA9IGNvbXBpbGU7XG52YXIgcGFyc2VyID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUGFyc2VyKSh7XG4gIFBhcnNlcjogUGFyc2VyLFxuICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbn0pO1xuZXhwb3J0cy5wYXJzZXIgPSBwYXJzZXI7XG52YXIgc2ltcGxpZnkgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTaW1wbGlmeSkoe1xuICBiaWdudW1iZXI6IF9wdXJlRnVuY3Rpb25zQW55LmJpZ251bWJlcixcbiAgZnJhY3Rpb246IF9wdXJlRnVuY3Rpb25zQW55LmZyYWN0aW9uLFxuICBDb25zdGFudE5vZGU6IENvbnN0YW50Tm9kZSxcbiAgRnVuY3Rpb25Ob2RlOiBGdW5jdGlvbk5vZGUsXG4gIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZSxcbiAgU3ltYm9sTm9kZTogU3ltYm9sTm9kZSxcbiAgYWRkOiBfcHVyZUZ1bmN0aW9uc0FueS5hZGQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZGl2aWRlOiBfcHVyZUZ1bmN0aW9uc0FueS5kaXZpZGUsXG4gIGVxdWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5lcXVhbCxcbiAgaXNaZXJvOiBfcHVyZUZ1bmN0aW9uc0FueS5pc1plcm8sXG4gIG1hdGhXaXRoVHJhbnNmb3JtOiBtYXRoV2l0aFRyYW5zZm9ybSxcbiAgbXVsdGlwbHk6IF9wdXJlRnVuY3Rpb25zQW55Lm11bHRpcGx5LFxuICBwYXJzZTogcGFyc2UsXG4gIHBvdzogX3B1cmVGdW5jdGlvbnNBbnkucG93LFxuICBzdWJ0cmFjdDogX3B1cmVGdW5jdGlvbnNBbnkuc3VidHJhY3QsXG4gIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxufSk7XG5leHBvcnRzLnNpbXBsaWZ5ID0gc2ltcGxpZnk7XG52YXIgcmF0aW9uYWxpemUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSYXRpb25hbGl6ZSkoe1xuICBiaWdudW1iZXI6IF9wdXJlRnVuY3Rpb25zQW55LmJpZ251bWJlcixcbiAgZnJhY3Rpb246IF9wdXJlRnVuY3Rpb25zQW55LmZyYWN0aW9uLFxuICBDb25zdGFudE5vZGU6IENvbnN0YW50Tm9kZSxcbiAgRnVuY3Rpb25Ob2RlOiBGdW5jdGlvbk5vZGUsXG4gIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZSxcbiAgU3ltYm9sTm9kZTogU3ltYm9sTm9kZSxcbiAgYWRkOiBfcHVyZUZ1bmN0aW9uc0FueS5hZGQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZGl2aWRlOiBfcHVyZUZ1bmN0aW9uc0FueS5kaXZpZGUsXG4gIGVxdWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5lcXVhbCxcbiAgaXNaZXJvOiBfcHVyZUZ1bmN0aW9uc0FueS5pc1plcm8sXG4gIG1hdGhXaXRoVHJhbnNmb3JtOiBtYXRoV2l0aFRyYW5zZm9ybSxcbiAgbXVsdGlwbHk6IF9wdXJlRnVuY3Rpb25zQW55Lm11bHRpcGx5LFxuICBwYXJzZTogcGFyc2UsXG4gIHBvdzogX3B1cmVGdW5jdGlvbnNBbnkucG93LFxuICBzaW1wbGlmeTogc2ltcGxpZnksXG4gIHN1YnRyYWN0OiBfcHVyZUZ1bmN0aW9uc0FueS5zdWJ0cmFjdCxcbiAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG59KTtcbmV4cG9ydHMucmF0aW9uYWxpemUgPSByYXRpb25hbGl6ZTtcbnZhciBoZWxwID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSGVscCkoe1xuICBIZWxwOiBIZWxwLFxuICBtYXRoV2l0aFRyYW5zZm9ybTogbWF0aFdpdGhUcmFuc2Zvcm0sXG4gIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxufSk7XG5leHBvcnRzLmhlbHAgPSBoZWxwO1xudmFyIGRlcml2YXRpdmUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEZXJpdmF0aXZlKSh7XG4gIENvbnN0YW50Tm9kZTogQ29uc3RhbnROb2RlLFxuICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgT3BlcmF0b3JOb2RlOiBPcGVyYXRvck5vZGUsXG4gIFBhcmVudGhlc2lzTm9kZTogUGFyZW50aGVzaXNOb2RlLFxuICBTeW1ib2xOb2RlOiBTeW1ib2xOb2RlLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGVxdWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5lcXVhbCxcbiAgaXNaZXJvOiBfcHVyZUZ1bmN0aW9uc0FueS5pc1plcm8sXG4gIG51bWVyaWM6IF9wdXJlRnVuY3Rpb25zQW55Lm51bWVyaWMsXG4gIHBhcnNlOiBwYXJzZSxcbiAgc2ltcGxpZnk6IHNpbXBsaWZ5LFxuICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbn0pO1xuZXhwb3J0cy5kZXJpdmF0aXZlID0gZGVyaXZhdGl2ZTtcblxuX2V4dGVuZHMobWF0aCwge1xuICAndHlwZW9mJzogX3B1cmVGdW5jdGlvbnNBbnkudHlwZU9mLFxuICBleWU6IF9wdXJlRnVuY3Rpb25zQW55LmV5ZSxcbiAgcmV2aXZlcjogcmV2aXZlcixcbiAgXCJmYWxzZVwiOiBfcHVyZUZ1bmN0aW9uc0FueS5fZmFsc2UsXG4gIFwibnVsbFwiOiBfcHVyZUZ1bmN0aW9uc0FueS5fbnVsbCxcbiAgXCJ0cnVlXCI6IF9wdXJlRnVuY3Rpb25zQW55Ll90cnVlLFxuICByZXBsYWNlcjogX3B1cmVGdW5jdGlvbnNBbnkucmVwbGFjZXIsXG4gIGk6IF9wdXJlRnVuY3Rpb25zQW55LmksXG4gIExOMTA6IF9wdXJlRnVuY3Rpb25zQW55LkxOMTAsXG4gIExPRzEwRTogX3B1cmVGdW5jdGlvbnNBbnkuTE9HMTBFLFxuICBOYU46IF9wdXJlRnVuY3Rpb25zQW55Ll9OYU4sXG4gIHBpOiBfcHVyZUZ1bmN0aW9uc0FueS5waSxcbiAgU1FSVDFfMjogX3B1cmVGdW5jdGlvbnNBbnkuU1FSVDFfMixcbiAgdGF1OiBfcHVyZUZ1bmN0aW9uc0FueS50YXUsXG4gIGVmaW1vdkZhY3RvcjogX3B1cmVGdW5jdGlvbnNBbnkuZWZpbW92RmFjdG9yLFxuICBmaW5lU3RydWN0dXJlOiBfcHVyZUZ1bmN0aW9uc0FueS5maW5lU3RydWN0dXJlLFxuICBzYWNrdXJUZXRyb2RlOiBfcHVyZUZ1bmN0aW9uc0FueS5zYWNrdXJUZXRyb2RlLFxuICB3ZWFrTWl4aW5nQW5nbGU6IF9wdXJlRnVuY3Rpb25zQW55LndlYWtNaXhpbmdBbmdsZSxcbiAgZTogX3B1cmVGdW5jdGlvbnNBbnkuZSxcbiAgSW5maW5pdHk6IF9wdXJlRnVuY3Rpb25zQW55Ll9JbmZpbml0eSxcbiAgTE9HMkU6IF9wdXJlRnVuY3Rpb25zQW55LkxPRzJFLFxuICAnUEknOiBfcHVyZUZ1bmN0aW9uc0FueS5waSxcbiAgdmVyc2lvbjogX3B1cmVGdW5jdGlvbnNBbnkudmVyc2lvbixcbiAgJ0UnOiBfcHVyZUZ1bmN0aW9uc0FueS5lLFxuICBwaGk6IF9wdXJlRnVuY3Rpb25zQW55LnBoaSxcbiAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkLFxuICBpc0ludGVnZXI6IF9wdXJlRnVuY3Rpb25zQW55LmlzSW50ZWdlcixcbiAgaXNOdW1lcmljOiBfcHVyZUZ1bmN0aW9uc0FueS5pc051bWVyaWMsXG4gIGlzUG9zaXRpdmU6IF9wdXJlRnVuY3Rpb25zQW55LmlzUG9zaXRpdmUsXG4gIGlzTmFOOiBfcHVyZUZ1bmN0aW9uc0FueS5pc05hTixcbiAgZXF1YWxTY2FsYXI6IF9wdXJlRnVuY3Rpb25zQW55LmVxdWFsU2NhbGFyLFxuICBudW1iZXI6IF9wdXJlRnVuY3Rpb25zQW55Lm51bWJlcixcbiAgXCJib29sZWFuXCI6IF9wdXJlRnVuY3Rpb25zQW55W1wiYm9vbGVhblwiXSxcbiAgY29tcGxleDogX3B1cmVGdW5jdGlvbnNBbnkuY29tcGxleCxcbiAgc3BsaXRVbml0OiBfcHVyZUZ1bmN0aW9uc0FueS5zcGxpdFVuaXQsXG4gIHVuYXJ5UGx1czogX3B1cmVGdW5jdGlvbnNBbnkudW5hcnlQbHVzLFxuICBhcHBseTogX3B1cmVGdW5jdGlvbnNBbnkuYXBwbHksXG4gIGN1YmU6IF9wdXJlRnVuY3Rpb25zQW55LmN1YmUsXG4gIGV4cG0xOiBfcHVyZUZ1bmN0aW9uc0FueS5leHBtMSxcbiAgbG9nMTA6IF9wdXJlRnVuY3Rpb25zQW55LmxvZzEwLFxuICBtdWx0aXBseVNjYWxhcjogX3B1cmVGdW5jdGlvbnNBbnkubXVsdGlwbHlTY2FsYXIsXG4gIHNpZ246IF9wdXJlRnVuY3Rpb25zQW55LnNpZ24sXG4gIHNxdWFyZTogX3B1cmVGdW5jdGlvbnNBbnkuc3F1YXJlLFxuICBiaXROb3Q6IF9wdXJlRnVuY3Rpb25zQW55LmJpdE5vdCxcbiAgYXJnOiBfcHVyZUZ1bmN0aW9uc0FueS5hcmcsXG4gIGltOiBfcHVyZUZ1bmN0aW9uc0FueS5pbSxcbiAgbm90OiBfcHVyZUZ1bmN0aW9uc0FueS5ub3QsXG4gIGZpbHRlcjogX3B1cmVGdW5jdGlvbnNBbnkuZmlsdGVyLFxuICBmb3JFYWNoOiBfcHVyZUZ1bmN0aW9uc0FueS5mb3JFYWNoLFxuICBtYXA6IF9wdXJlRnVuY3Rpb25zQW55Lm1hcCxcbiAgZXJmOiBfcHVyZUZ1bmN0aW9uc0FueS5lcmYsXG4gIGZvcm1hdDogX3B1cmVGdW5jdGlvbnNBbnkuZm9ybWF0LFxuICBpc1ByaW1lOiBfcHVyZUZ1bmN0aW9uc0FueS5pc1ByaW1lLFxuICBhY29zOiBfcHVyZUZ1bmN0aW9uc0FueS5hY29zLFxuICBhY290OiBfcHVyZUZ1bmN0aW9uc0FueS5hY290LFxuICBhY3NjOiBfcHVyZUZ1bmN0aW9uc0FueS5hY3NjLFxuICBhc2VjOiBfcHVyZUZ1bmN0aW9uc0FueS5hc2VjLFxuICBhc2luOiBfcHVyZUZ1bmN0aW9uc0FueS5hc2luLFxuICBhdGFuOiBfcHVyZUZ1bmN0aW9uc0FueS5hdGFuLFxuICBhdGFuaDogX3B1cmVGdW5jdGlvbnNBbnkuYXRhbmgsXG4gIGNvc2g6IF9wdXJlRnVuY3Rpb25zQW55LmNvc2gsXG4gIGNvdGg6IF9wdXJlRnVuY3Rpb25zQW55LmNvdGgsXG4gIGNzY2g6IF9wdXJlRnVuY3Rpb25zQW55LmNzY2gsXG4gIHNlY2g6IF9wdXJlRnVuY3Rpb25zQW55LnNlY2gsXG4gIHNpbmg6IF9wdXJlRnVuY3Rpb25zQW55LnNpbmgsXG4gIHRhbmg6IF9wdXJlRnVuY3Rpb25zQW55LnRhbmgsXG4gIGNoYWluOiBjaGFpbixcbiAgY29tYmluYXRpb25zOiBfcHVyZUZ1bmN0aW9uc0FueS5jb21iaW5hdGlvbnMsXG4gIHBpY2tSYW5kb206IF9wdXJlRnVuY3Rpb25zQW55LnBpY2tSYW5kb20sXG4gIHJhbmRvbUludDogX3B1cmVGdW5jdGlvbnNBbnkucmFuZG9tSW50LFxuICBMTjI6IF9wdXJlRnVuY3Rpb25zQW55LkxOMixcbiAgY2xvbmU6IF9wdXJlRnVuY3Rpb25zQW55LmNsb25lLFxuICBoYXNOdW1lcmljVmFsdWU6IF9wdXJlRnVuY3Rpb25zQW55Lmhhc051bWVyaWNWYWx1ZSxcbiAgdHlwZU9mOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlT2YsXG4gIHN0cmluZzogX3B1cmVGdW5jdGlvbnNBbnkuc3RyaW5nLFxuICBmcmFjdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkuZnJhY3Rpb24sXG4gIHVuYXJ5TWludXM6IF9wdXJlRnVuY3Rpb25zQW55LnVuYXJ5TWludXMsXG4gIGFkZFNjYWxhcjogX3B1cmVGdW5jdGlvbnNBbnkuYWRkU2NhbGFyLFxuICBleHA6IF9wdXJlRnVuY3Rpb25zQW55LmV4cCxcbiAgbG9nMjogX3B1cmVGdW5jdGlvbnNBbnkubG9nMixcbiAgc3FydDogX3B1cmVGdW5jdGlvbnNBbnkuc3FydCxcbiAgY29uajogX3B1cmVGdW5jdGlvbnNBbnkuY29uaixcbiAgZ2V0TWF0cml4RGF0YVR5cGU6IF9wdXJlRnVuY3Rpb25zQW55LmdldE1hdHJpeERhdGFUeXBlLFxuICBtb2RlOiBfcHVyZUZ1bmN0aW9uc0FueS5tb2RlLFxuICBwcmludDogX3B1cmVGdW5jdGlvbnNBbnkucHJpbnQsXG4gIGFjb3NoOiBfcHVyZUZ1bmN0aW9uc0FueS5hY29zaCxcbiAgYWNzY2g6IF9wdXJlRnVuY3Rpb25zQW55LmFjc2NoLFxuICBhc2luaDogX3B1cmVGdW5jdGlvbnNBbnkuYXNpbmgsXG4gIGNvczogX3B1cmVGdW5jdGlvbnNBbnkuY29zLFxuICBjc2M6IF9wdXJlRnVuY3Rpb25zQW55LmNzYyxcbiAgc2luOiBfcHVyZUZ1bmN0aW9uc0FueS5zaW4sXG4gIGNvbWJpbmF0aW9uc1dpdGhSZXA6IF9wdXJlRnVuY3Rpb25zQW55LmNvbWJpbmF0aW9uc1dpdGhSZXAsXG4gIHJhbmRvbTogX3B1cmVGdW5jdGlvbnNBbnkucmFuZG9tLFxuICBTUVJUMjogX3B1cmVGdW5jdGlvbnNBbnkuU1FSVDIsXG4gIGlzTmVnYXRpdmU6IF9wdXJlRnVuY3Rpb25zQW55LmlzTmVnYXRpdmUsXG4gIG1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkubWF0cml4LFxuICBjYnJ0OiBfcHVyZUZ1bmN0aW9uc0FueS5jYnJ0LFxuICBnY2Q6IF9wdXJlRnVuY3Rpb25zQW55LmdjZCxcbiAgbW9kOiBfcHVyZUZ1bmN0aW9uc0FueS5tb2QsXG4gIG50aFJvb3Q6IF9wdXJlRnVuY3Rpb25zQW55Lm50aFJvb3QsXG4gIHhnY2Q6IF9wdXJlRnVuY3Rpb25zQW55LnhnY2QsXG4gIGJpdEFuZDogX3B1cmVGdW5jdGlvbnNBbnkuYml0QW5kLFxuICBiaXRYb3I6IF9wdXJlRnVuY3Rpb25zQW55LmJpdFhvcixcbiAgb3I6IF9wdXJlRnVuY3Rpb25zQW55Lm9yLFxuICBjb25jYXQ6IF9wdXJlRnVuY3Rpb25zQW55LmNvbmNhdCxcbiAgZGlhZzogX3B1cmVGdW5jdGlvbnNBbnkuZGlhZyxcbiAgaWRlbnRpdHk6IF9wdXJlRnVuY3Rpb25zQW55LmlkZW50aXR5LFxuICBvbmVzOiBfcHVyZUZ1bmN0aW9uc0FueS5vbmVzLFxuICByZXNoYXBlOiBfcHVyZUZ1bmN0aW9uc0FueS5yZXNoYXBlLFxuICBzaXplOiBfcHVyZUZ1bmN0aW9uc0FueS5zaXplLFxuICBzdWJzZXQ6IF9wdXJlRnVuY3Rpb25zQW55LnN1YnNldCxcbiAgemVyb3M6IF9wdXJlRnVuY3Rpb25zQW55Lnplcm9zLFxuICB0bzogX3B1cmVGdW5jdGlvbnNBbnkudG8sXG4gIHJvdW5kOiBfcHVyZUZ1bmN0aW9uc0FueS5yb3VuZCxcbiAgbGVmdFNoaWZ0OiBfcHVyZUZ1bmN0aW9uc0FueS5sZWZ0U2hpZnQsXG4gIHJpZ2h0TG9nU2hpZnQ6IF9wdXJlRnVuY3Rpb25zQW55LnJpZ2h0TG9nU2hpZnQsXG4gIGNvbXBhcmU6IF9wdXJlRnVuY3Rpb25zQW55LmNvbXBhcmUsXG4gIGNvbXBhcmVUZXh0OiBfcHVyZUZ1bmN0aW9uc0FueS5jb21wYXJlVGV4dCxcbiAgc21hbGxlcjogX3B1cmVGdW5jdGlvbnNBbnkuc21hbGxlcixcbiAgbGFyZ2VyOiBfcHVyZUZ1bmN0aW9uc0FueS5sYXJnZXIsXG4gIHVuZXF1YWw6IF9wdXJlRnVuY3Rpb25zQW55LnVuZXF1YWwsXG4gIG1heDogX3B1cmVGdW5jdGlvbnNBbnkubWF4LFxuICBzcGFyc2U6IF9wdXJlRnVuY3Rpb25zQW55LnNwYXJzZSxcbiAgYWNvdGg6IF9wdXJlRnVuY3Rpb25zQW55LmFjb3RoLFxuICBhdGFuMjogX3B1cmVGdW5jdGlvbnNBbnkuYXRhbjIsXG4gIHNlYzogX3B1cmVGdW5jdGlvbnNBbnkuc2VjLFxuICBhZGQ6IF9wdXJlRnVuY3Rpb25zQW55LmFkZCxcbiAgdHJhY2U6IF9wdXJlRnVuY3Rpb25zQW55LnRyYWNlLFxuICBjb21wb3NpdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkuY29tcG9zaXRpb24sXG4gIGlzWmVybzogX3B1cmVGdW5jdGlvbnNBbnkuaXNaZXJvLFxuICBhYnM6IF9wdXJlRnVuY3Rpb25zQW55LmFicyxcbiAgZmxvb3I6IF9wdXJlRnVuY3Rpb25zQW55LmZsb29yLFxuICBtdWx0aXBseTogX3B1cmVGdW5jdGlvbnNBbnkubXVsdGlwbHksXG4gIGRvdE11bHRpcGx5OiBfcHVyZUZ1bmN0aW9uc0FueS5kb3RNdWx0aXBseSxcbiAgcmU6IF9wdXJlRnVuY3Rpb25zQW55LnJlLFxuICBmbGF0dGVuOiBfcHVyZUZ1bmN0aW9uc0FueS5mbGF0dGVuLFxuICByZXNpemU6IF9wdXJlRnVuY3Rpb25zQW55LnJlc2l6ZSxcbiAgc3F1ZWV6ZTogX3B1cmVGdW5jdGlvbnNBbnkuc3F1ZWV6ZSxcbiAgcHJvZDogX3B1cmVGdW5jdGlvbnNBbnkucHJvZCxcbiAgcG93OiBfcHVyZUZ1bmN0aW9uc0FueS5wb3csXG4gIGRvdFBvdzogX3B1cmVGdW5jdGlvbnNBbnkuZG90UG93LFxuICByaWdodEFyaXRoU2hpZnQ6IF9wdXJlRnVuY3Rpb25zQW55LnJpZ2h0QXJpdGhTaGlmdCxcbiAgY29tcGFyZU5hdHVyYWw6IF9wdXJlRnVuY3Rpb25zQW55LmNvbXBhcmVOYXR1cmFsLFxuICBlcXVhbFRleHQ6IF9wdXJlRnVuY3Rpb25zQW55LmVxdWFsVGV4dCxcbiAgbGFyZ2VyRXE6IF9wdXJlRnVuY3Rpb25zQW55LmxhcmdlckVxLFxuICBwYXJ0aXRpb25TZWxlY3Q6IF9wdXJlRnVuY3Rpb25zQW55LnBhcnRpdGlvblNlbGVjdCxcbiAgbWluOiBfcHVyZUZ1bmN0aW9uc0FueS5taW4sXG4gIGFzZWNoOiBfcHVyZUZ1bmN0aW9uc0FueS5hc2VjaCxcbiAgdGFuOiBfcHVyZUZ1bmN0aW9uc0FueS50YW4sXG4gIHNldFNpemU6IF9wdXJlRnVuY3Rpb25zQW55LnNldFNpemUsXG4gIG5vcm06IF9wdXJlRnVuY3Rpb25zQW55Lm5vcm0sXG4gIHF1YW50aWxlU2VxOiBfcHVyZUZ1bmN0aW9uc0FueS5xdWFudGlsZVNlcSxcbiAgZ2FtbWE6IF9wdXJlRnVuY3Rpb25zQW55LmdhbW1hLFxuICBiaWdudW1iZXI6IF9wdXJlRnVuY3Rpb25zQW55LmJpZ251bWJlcixcbiAgbGNtOiBfcHVyZUZ1bmN0aW9uc0FueS5sY20sXG4gIGJpdE9yOiBfcHVyZUZ1bmN0aW9uc0FueS5iaXRPcixcbiAga3JvbjogX3B1cmVGdW5jdGlvbnNBbnkua3JvbixcbiAgdHJhbnNwb3NlOiBfcHVyZUZ1bmN0aW9uc0FueS50cmFuc3Bvc2UsXG4gIG51bWVyaWM6IF9wdXJlRnVuY3Rpb25zQW55Lm51bWVyaWMsXG4gIGFuZDogX3B1cmVGdW5jdGlvbnNBbnkuYW5kLFxuICBzbWFsbGVyRXE6IF9wdXJlRnVuY3Rpb25zQW55LnNtYWxsZXJFcSxcbiAgc29ydDogX3B1cmVGdW5jdGlvbnNBbnkuc29ydCxcbiAgY290OiBfcHVyZUZ1bmN0aW9uc0FueS5jb3QsXG4gIGRvdDogX3B1cmVGdW5jdGlvbnNBbnkuZG90LFxuICBzdW06IF9wdXJlRnVuY3Rpb25zQW55LnN1bSxcbiAgZmFjdG9yaWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5mYWN0b3JpYWwsXG4gIHBlcm11dGF0aW9uczogX3B1cmVGdW5jdGlvbnNBbnkucGVybXV0YXRpb25zLFxuICBjZWlsOiBfcHVyZUZ1bmN0aW9uc0FueS5jZWlsLFxuICBzdWJ0cmFjdDogX3B1cmVGdW5jdGlvbnNBbnkuc3VidHJhY3QsXG4gIGNyb3NzOiBfcHVyZUZ1bmN0aW9uc0FueS5jcm9zcyxcbiAgY3RyYW5zcG9zZTogX3B1cmVGdW5jdGlvbnNBbnkuY3RyYW5zcG9zZSxcbiAgZXF1YWw6IF9wdXJlRnVuY3Rpb25zQW55LmVxdWFsLFxuICBzZXRDYXJ0ZXNpYW46IF9wdXJlRnVuY3Rpb25zQW55LnNldENhcnRlc2lhbixcbiAgc2V0RGlzdGluY3Q6IF9wdXJlRnVuY3Rpb25zQW55LnNldERpc3RpbmN0LFxuICBzZXRJc1N1YnNldDogX3B1cmVGdW5jdGlvbnNBbnkuc2V0SXNTdWJzZXQsXG4gIHNldFBvd2Vyc2V0OiBfcHVyZUZ1bmN0aW9uc0FueS5zZXRQb3dlcnNldCxcbiAgaW5kZXg6IF9wdXJlRnVuY3Rpb25zQW55LmluZGV4LFxuICBmaXg6IF9wdXJlRnVuY3Rpb25zQW55LmZpeCxcbiAgcmFuZ2U6IF9wdXJlRnVuY3Rpb25zQW55LnJhbmdlLFxuICBkaXZpZGVTY2FsYXI6IF9wdXJlRnVuY3Rpb25zQW55LmRpdmlkZVNjYWxhcixcbiAgbnRoUm9vdHM6IF9wdXJlRnVuY3Rpb25zQW55Lm50aFJvb3RzLFxuICBsc29sdmU6IF9wdXJlRnVuY3Rpb25zQW55Lmxzb2x2ZSxcbiAgZGVlcEVxdWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5kZWVwRXF1YWwsXG4gIHNldERpZmZlcmVuY2U6IF9wdXJlRnVuY3Rpb25zQW55LnNldERpZmZlcmVuY2UsXG4gIHNldE11bHRpcGxpY2l0eTogX3B1cmVGdW5jdGlvbnNBbnkuc2V0TXVsdGlwbGljaXR5LFxuICBoeXBvdDogX3B1cmVGdW5jdGlvbnNBbnkuaHlwb3QsXG4gIGx1cDogX3B1cmVGdW5jdGlvbnNBbnkubHVwLFxuICBzbHU6IF9wdXJlRnVuY3Rpb25zQW55LnNsdSxcbiAgZGV0OiBfcHVyZUZ1bmN0aW9uc0FueS5kZXQsXG4gIGRpc3RhbmNlOiBfcHVyZUZ1bmN0aW9uc0FueS5kaXN0YW5jZSxcbiAgc3RpcmxpbmdTMjogX3B1cmVGdW5jdGlvbnNBbnkuc3RpcmxpbmdTMixcbiAgY2F0YWxhbjogX3B1cmVGdW5jdGlvbnNBbnkuY2F0YWxhbixcbiAgeG9yOiBfcHVyZUZ1bmN0aW9uc0FueS54b3IsXG4gIHJvdzogX3B1cmVGdW5jdGlvbnNBbnkucm93LFxuICBkb3REaXZpZGU6IF9wdXJlRnVuY3Rpb25zQW55LmRvdERpdmlkZSxcbiAgY3JlYXRlVW5pdDogX3B1cmVGdW5jdGlvbnNBbnkuY3JlYXRlVW5pdCxcbiAgc2V0U3ltRGlmZmVyZW5jZTogX3B1cmVGdW5jdGlvbnNBbnkuc2V0U3ltRGlmZmVyZW5jZSxcbiAgcXI6IF9wdXJlRnVuY3Rpb25zQW55LnFyLFxuICBpbnY6IF9wdXJlRnVuY3Rpb25zQW55LmludixcbiAgZXhwbTogX3B1cmVGdW5jdGlvbnNBbnkuZXhwbSxcbiAgZGl2aWRlOiBfcHVyZUZ1bmN0aW9uc0FueS5kaXZpZGUsXG4gIG1lYW46IF9wdXJlRnVuY3Rpb25zQW55Lm1lYW4sXG4gIHZhcmlhbmNlOiBfcHVyZUZ1bmN0aW9uc0FueS52YXJpYW5jZSxcbiAgc3RkOiBfcHVyZUZ1bmN0aW9uc0FueS5zdGQsXG4gIG11bHRpbm9taWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5tdWx0aW5vbWlhbCxcbiAgYXRvbWljTWFzczogX3B1cmVGdW5jdGlvbnNBbnkuYXRvbWljTWFzcyxcbiAgYm9ock1hZ25ldG9uOiBfcHVyZUZ1bmN0aW9uc0FueS5ib2hyTWFnbmV0b24sXG4gIGJvbHR6bWFubjogX3B1cmVGdW5jdGlvbnNBbnkuYm9sdHptYW5uLFxuICBjb25kdWN0YW5jZVF1YW50dW06IF9wdXJlRnVuY3Rpb25zQW55LmNvbmR1Y3RhbmNlUXVhbnR1bSxcbiAgZGV1dGVyb25NYXNzOiBfcHVyZUZ1bmN0aW9uc0FueS5kZXV0ZXJvbk1hc3MsXG4gIGVsZWN0cm9uTWFzczogX3B1cmVGdW5jdGlvbnNBbnkuZWxlY3Ryb25NYXNzLFxuICBmYXJhZGF5OiBfcHVyZUZ1bmN0aW9uc0FueS5mYXJhZGF5LFxuICBmaXJzdFJhZGlhdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkuZmlyc3RSYWRpYXRpb24sXG4gIGdyYXZpdGF0aW9uQ29uc3RhbnQ6IF9wdXJlRnVuY3Rpb25zQW55LmdyYXZpdGF0aW9uQ29uc3RhbnQsXG4gIGhhcnRyZWVFbmVyZ3k6IF9wdXJlRnVuY3Rpb25zQW55LmhhcnRyZWVFbmVyZ3ksXG4gIGtsaXR6aW5nOiBfcHVyZUZ1bmN0aW9uc0FueS5rbGl0emluZyxcbiAgbWFnbmV0aWNDb25zdGFudDogX3B1cmVGdW5jdGlvbnNBbnkubWFnbmV0aWNDb25zdGFudCxcbiAgbW9sYXJNYXNzOiBfcHVyZUZ1bmN0aW9uc0FueS5tb2xhck1hc3MsXG4gIG1vbGFyUGxhbmNrQ29uc3RhbnQ6IF9wdXJlRnVuY3Rpb25zQW55Lm1vbGFyUGxhbmNrQ29uc3RhbnQsXG4gIG5ldXRyb25NYXNzOiBfcHVyZUZ1bmN0aW9uc0FueS5uZXV0cm9uTWFzcyxcbiAgcGxhbmNrQ2hhcmdlOiBfcHVyZUZ1bmN0aW9uc0FueS5wbGFuY2tDaGFyZ2UsXG4gIHBsYW5ja0xlbmd0aDogX3B1cmVGdW5jdGlvbnNBbnkucGxhbmNrTGVuZ3RoLFxuICBwbGFuY2tUZW1wZXJhdHVyZTogX3B1cmVGdW5jdGlvbnNBbnkucGxhbmNrVGVtcGVyYXR1cmUsXG4gIHByb3Rvbk1hc3M6IF9wdXJlRnVuY3Rpb25zQW55LnByb3Rvbk1hc3MsXG4gIHJlZHVjZWRQbGFuY2tDb25zdGFudDogX3B1cmVGdW5jdGlvbnNBbnkucmVkdWNlZFBsYW5ja0NvbnN0YW50LFxuICBzZWNvbmRSYWRpYXRpb246IF9wdXJlRnVuY3Rpb25zQW55LnNlY29uZFJhZGlhdGlvbixcbiAgc3RlZmFuQm9sdHptYW5uOiBfcHVyZUZ1bmN0aW9uc0FueS5zdGVmYW5Cb2x0em1hbm4sXG4gIHZhY3V1bUltcGVkYW5jZTogX3B1cmVGdW5jdGlvbnNBbnkudmFjdXVtSW1wZWRhbmNlLFxuICBjb2x1bW46IF9wdXJlRnVuY3Rpb25zQW55LmNvbHVtbixcbiAgdXNvbHZlOiBfcHVyZUZ1bmN0aW9uc0FueS51c29sdmUsXG4gIHNldEludGVyc2VjdDogX3B1cmVGdW5jdGlvbnNBbnkuc2V0SW50ZXJzZWN0LFxuICBsdXNvbHZlOiBfcHVyZUZ1bmN0aW9uc0FueS5sdXNvbHZlLFxuICBlaWdzOiBfcHVyZUZ1bmN0aW9uc0FueS5laWdzLFxuICBpbnRlcnNlY3Q6IF9wdXJlRnVuY3Rpb25zQW55LmludGVyc2VjdCxcbiAgJ3Zhcic6IF9wdXJlRnVuY3Rpb25zQW55LnZhcmlhbmNlLFxuICBiZWxsTnVtYmVyczogX3B1cmVGdW5jdGlvbnNBbnkuYmVsbE51bWJlcnMsXG4gIGF2b2dhZHJvOiBfcHVyZUZ1bmN0aW9uc0FueS5hdm9nYWRybyxcbiAgY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXM6IF9wdXJlRnVuY3Rpb25zQW55LmNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzLFxuICBlbGVjdHJpY0NvbnN0YW50OiBfcHVyZUZ1bmN0aW9uc0FueS5lbGVjdHJpY0NvbnN0YW50LFxuICBmZXJtaUNvdXBsaW5nOiBfcHVyZUZ1bmN0aW9uc0FueS5mZXJtaUNvdXBsaW5nLFxuICBncmF2aXR5OiBfcHVyZUZ1bmN0aW9uc0FueS5ncmF2aXR5LFxuICBsb3NjaG1pZHQ6IF9wdXJlRnVuY3Rpb25zQW55Lmxvc2NobWlkdCxcbiAgbW9sYXJNYXNzQzEyOiBfcHVyZUZ1bmN0aW9uc0FueS5tb2xhck1hc3NDMTIsXG4gIG51Y2xlYXJNYWduZXRvbjogX3B1cmVGdW5jdGlvbnNBbnkubnVjbGVhck1hZ25ldG9uLFxuICBwbGFuY2tNYXNzOiBfcHVyZUZ1bmN0aW9uc0FueS5wbGFuY2tNYXNzLFxuICBxdWFudHVtT2ZDaXJjdWxhdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkucXVhbnR1bU9mQ2lyY3VsYXRpb24sXG4gIHNwZWVkT2ZMaWdodDogX3B1cmVGdW5jdGlvbnNBbnkuc3BlZWRPZkxpZ2h0LFxuICB3aWVuRGlzcGxhY2VtZW50OiBfcHVyZUZ1bmN0aW9uc0FueS53aWVuRGlzcGxhY2VtZW50LFxuICBsb2c6IF9wdXJlRnVuY3Rpb25zQW55LmxvZyxcbiAgdW5pdDogX3B1cmVGdW5jdGlvbnNBbnkudW5pdCxcbiAgcGFyc2U6IHBhcnNlLFxuICBldmFsdWF0ZTogZXZhbHVhdGUsXG4gIHNxcnRtOiBfcHVyZUZ1bmN0aW9uc0FueS5zcXJ0bSxcbiAga2xkaXZlcmdlbmNlOiBfcHVyZUZ1bmN0aW9uc0FueS5rbGRpdmVyZ2VuY2UsXG4gIGJvaHJSYWRpdXM6IF9wdXJlRnVuY3Rpb25zQW55LmJvaHJSYWRpdXMsXG4gIGVsZW1lbnRhcnlDaGFyZ2U6IF9wdXJlRnVuY3Rpb25zQW55LmVsZW1lbnRhcnlDaGFyZ2UsXG4gIGludmVyc2VDb25kdWN0YW5jZVF1YW50dW06IF9wdXJlRnVuY3Rpb25zQW55LmludmVyc2VDb25kdWN0YW5jZVF1YW50dW0sXG4gIG1vbGFyVm9sdW1lOiBfcHVyZUZ1bmN0aW9uc0FueS5tb2xhclZvbHVtZSxcbiAgcGxhbmNrVGltZTogX3B1cmVGdW5jdGlvbnNBbnkucGxhbmNrVGltZSxcbiAgdGhvbXNvbkNyb3NzU2VjdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkudGhvbXNvbkNyb3NzU2VjdGlvbixcbiAgbG9nMXA6IF9wdXJlRnVuY3Rpb25zQW55LmxvZzFwLFxuICBjb21waWxlOiBjb21waWxlLFxuICBwYXJzZXI6IHBhcnNlcixcbiAgbWVkaWFuOiBfcHVyZUZ1bmN0aW9uc0FueS5tZWRpYW4sXG4gIHNpbXBsaWZ5OiBzaW1wbGlmeSxcbiAgcmF0aW9uYWxpemU6IHJhdGlvbmFsaXplLFxuICBnYXNDb25zdGFudDogX3B1cmVGdW5jdGlvbnNBbnkuZ2FzQ29uc3RhbnQsXG4gIHBsYW5ja0NvbnN0YW50OiBfcHVyZUZ1bmN0aW9uc0FueS5wbGFuY2tDb25zdGFudCxcbiAgc2V0VW5pb246IF9wdXJlRnVuY3Rpb25zQW55LnNldFVuaW9uLFxuICBoZWxwOiBoZWxwLFxuICBkZXJpdmF0aXZlOiBkZXJpdmF0aXZlLFxuICBtYWduZXRpY0ZsdXhRdWFudHVtOiBfcHVyZUZ1bmN0aW9uc0FueS5tYWduZXRpY0ZsdXhRdWFudHVtLFxuICAnZXZhbCc6IGV2YWx1YXRlLFxuICBjb3Vsb21iOiBfcHVyZUZ1bmN0aW9uc0FueS5jb3Vsb21iLFxuICBtYWQ6IF9wdXJlRnVuY3Rpb25zQW55Lm1hZCxcbiAgcnlkYmVyZzogX3B1cmVGdW5jdGlvbnNBbnkucnlkYmVyZyxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcblxuX2V4dGVuZHMobWF0aFdpdGhUcmFuc2Zvcm0sIG1hdGgsIHtcbiAgYXBwbHk6ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFwcGx5VHJhbnNmb3JtKSh7XG4gICAgaXNJbnRlZ2VyOiBfcHVyZUZ1bmN0aW9uc0FueS5pc0ludGVnZXIsXG4gICAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG4gIH0pLFxuICBmaWx0ZXI6ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZpbHRlclRyYW5zZm9ybSkoe1xuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgbWFwOiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNYXBUcmFuc2Zvcm0pKHtcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIGZvckVhY2g6ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZvckVhY2hUcmFuc2Zvcm0pKHtcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIG1heDogKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWF4VHJhbnNmb3JtKSh7XG4gICAgbGFyZ2VyOiBfcHVyZUZ1bmN0aW9uc0FueS5sYXJnZXIsXG4gICAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG4gIH0pLFxuICBtaW46ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1pblRyYW5zZm9ybSkoe1xuICAgIHNtYWxsZXI6IF9wdXJlRnVuY3Rpb25zQW55LnNtYWxsZXIsXG4gICAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG4gIH0pLFxuICBzdWJzZXQ6ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVN1YnNldFRyYW5zZm9ybSkoe1xuICAgIG1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkubWF0cml4LFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgY29uY2F0OiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25jYXRUcmFuc2Zvcm0pKHtcbiAgICBpc0ludGVnZXI6IF9wdXJlRnVuY3Rpb25zQW55LmlzSW50ZWdlcixcbiAgICBtYXRyaXg6IF9wdXJlRnVuY3Rpb25zQW55Lm1hdHJpeCxcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIHJhbmdlOiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5nZVRyYW5zZm9ybSkoe1xuICAgIGJpZ251bWJlcjogX3B1cmVGdW5jdGlvbnNBbnkuYmlnbnVtYmVyLFxuICAgIG1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkubWF0cml4LFxuICAgIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgICBsYXJnZXI6IF9wdXJlRnVuY3Rpb25zQW55LmxhcmdlcixcbiAgICBsYXJnZXJFcTogX3B1cmVGdW5jdGlvbnNBbnkubGFyZ2VyRXEsXG4gICAgc21hbGxlcjogX3B1cmVGdW5jdGlvbnNBbnkuc21hbGxlcixcbiAgICBzbWFsbGVyRXE6IF9wdXJlRnVuY3Rpb25zQW55LnNtYWxsZXJFcSxcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIHN1bTogKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3VtVHJhbnNmb3JtKSh7XG4gICAgYmlnbnVtYmVyOiBfcHVyZUZ1bmN0aW9uc0FueS5iaWdudW1iZXIsXG4gICAgZnJhY3Rpb246IF9wdXJlRnVuY3Rpb25zQW55LmZyYWN0aW9uLFxuICAgIGFkZDogX3B1cmVGdW5jdGlvbnNBbnkuYWRkLFxuICAgIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIGluZGV4OiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmRleFRyYW5zZm9ybSkoe1xuICAgIEluZGV4OiBfcHVyZUZ1bmN0aW9uc0FueS5JbmRleFxuICB9KSxcbiAgY29sdW1uOiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb2x1bW5UcmFuc2Zvcm0pKHtcbiAgICBJbmRleDogX3B1cmVGdW5jdGlvbnNBbnkuSW5kZXgsXG4gICAgbWF0cml4OiBfcHVyZUZ1bmN0aW9uc0FueS5tYXRyaXgsXG4gICAgcmFuZ2U6IF9wdXJlRnVuY3Rpb25zQW55LnJhbmdlLFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgcm93OiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSb3dUcmFuc2Zvcm0pKHtcbiAgICBJbmRleDogX3B1cmVGdW5jdGlvbnNBbnkuSW5kZXgsXG4gICAgbWF0cml4OiBfcHVyZUZ1bmN0aW9uc0FueS5tYXRyaXgsXG4gICAgcmFuZ2U6IF9wdXJlRnVuY3Rpb25zQW55LnJhbmdlLFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgbWVhbjogKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWVhblRyYW5zZm9ybSkoe1xuICAgIGFkZDogX3B1cmVGdW5jdGlvbnNBbnkuYWRkLFxuICAgIGRpdmlkZTogX3B1cmVGdW5jdGlvbnNBbnkuZGl2aWRlLFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgdmFyaWFuY2U6ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVZhcmlhbmNlVHJhbnNmb3JtKSh7XG4gICAgYWRkOiBfcHVyZUZ1bmN0aW9uc0FueS5hZGQsXG4gICAgYXBwbHk6IF9wdXJlRnVuY3Rpb25zQW55LmFwcGx5LFxuICAgIGRpdmlkZTogX3B1cmVGdW5jdGlvbnNBbnkuZGl2aWRlLFxuICAgIGlzTmFOOiBfcHVyZUZ1bmN0aW9uc0FueS5pc05hTixcbiAgICBtdWx0aXBseTogX3B1cmVGdW5jdGlvbnNBbnkubXVsdGlwbHksXG4gICAgc3VidHJhY3Q6IF9wdXJlRnVuY3Rpb25zQW55LnN1YnRyYWN0LFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgc3RkOiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTdGRUcmFuc2Zvcm0pKHtcbiAgICBzcXJ0OiBfcHVyZUZ1bmN0aW9uc0FueS5zcXJ0LFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZCxcbiAgICB2YXJpYW5jZTogX3B1cmVGdW5jdGlvbnNBbnkudmFyaWFuY2VcbiAgfSlcbn0pO1xuXG5fZXh0ZW5kcyhjbGFzc2VzLCB7XG4gIFJlc3VsdFNldDogX3B1cmVGdW5jdGlvbnNBbnkuUmVzdWx0U2V0LFxuICBDb21wbGV4OiBfcHVyZUZ1bmN0aW9uc0FueS5Db21wbGV4LFxuICBSYW5nZTogX3B1cmVGdW5jdGlvbnNBbnkuUmFuZ2UsXG4gIE5vZGU6IE5vZGUsXG4gIEFycmF5Tm9kZTogQXJyYXlOb2RlLFxuICBCbG9ja05vZGU6IEJsb2NrTm9kZSxcbiAgQ29uc3RhbnROb2RlOiBDb25zdGFudE5vZGUsXG4gIE9iamVjdE5vZGU6IE9iamVjdE5vZGUsXG4gIFBhcmVudGhlc2lzTm9kZTogUGFyZW50aGVzaXNOb2RlLFxuICBSZWxhdGlvbmFsTm9kZTogUmVsYXRpb25hbE5vZGUsXG4gIENoYWluOiBDaGFpbixcbiAgQmlnTnVtYmVyOiBfcHVyZUZ1bmN0aW9uc0FueS5CaWdOdW1iZXIsXG4gIE1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkuTWF0cml4LFxuICBDb25kaXRpb25hbE5vZGU6IENvbmRpdGlvbmFsTm9kZSxcbiAgT3BlcmF0b3JOb2RlOiBPcGVyYXRvck5vZGUsXG4gIEZyYWN0aW9uOiBfcHVyZUZ1bmN0aW9uc0FueS5GcmFjdGlvbixcbiAgUmFuZ2VOb2RlOiBSYW5nZU5vZGUsXG4gIERlbnNlTWF0cml4OiBfcHVyZUZ1bmN0aW9uc0FueS5EZW5zZU1hdHJpeCxcbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZTogRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSxcbiAgU3BhcnNlTWF0cml4OiBfcHVyZUZ1bmN0aW9uc0FueS5TcGFyc2VNYXRyaXgsXG4gIEltbXV0YWJsZURlbnNlTWF0cml4OiBfcHVyZUZ1bmN0aW9uc0FueS5JbW11dGFibGVEZW5zZU1hdHJpeCxcbiAgRmlib25hY2NpSGVhcDogX3B1cmVGdW5jdGlvbnNBbnkuRmlib25hY2NpSGVhcCxcbiAgQWNjZXNzb3JOb2RlOiBBY2Nlc3Nvck5vZGUsXG4gIEluZGV4Tm9kZTogSW5kZXhOb2RlLFxuICBTcGE6IF9wdXJlRnVuY3Rpb25zQW55LlNwYSxcbiAgQXNzaWdubWVudE5vZGU6IEFzc2lnbm1lbnROb2RlLFxuICBJbmRleDogX3B1cmVGdW5jdGlvbnNBbnkuSW5kZXgsXG4gIFVuaXQ6IF9wdXJlRnVuY3Rpb25zQW55LlVuaXQsXG4gIFN5bWJvbE5vZGU6IFN5bWJvbE5vZGUsXG4gIEZ1bmN0aW9uTm9kZTogRnVuY3Rpb25Ob2RlLFxuICBQYXJzZXI6IFBhcnNlcixcbiAgSGVscDogSGVscFxufSk7XG5cbkNoYWluLmNyZWF0ZVByb3h5KG1hdGgpOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xudmFyIF9leHBvcnROYW1lcyA9IHtcbiAgY29uZmlnOiB0cnVlLFxuICBJbmRleEVycm9yOiB0cnVlLFxuICBEaW1lbnNpb25FcnJvcjogdHJ1ZSxcbiAgQXJndW1lbnRzRXJyb3I6IHRydWUsXG4gIGNyZWF0ZTogdHJ1ZSxcbiAgZmFjdG9yeTogdHJ1ZVxufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbmZpZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uZmlnUmVhZG9ubHkuY29uZmlnO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkluZGV4RXJyb3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0luZGV4RXJyb3IuSW5kZXhFcnJvcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJEaW1lbnNpb25FcnJvclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3I7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQXJndW1lbnRzRXJyb3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0FyZ3VtZW50c0Vycm9yLkFyZ3VtZW50c0Vycm9yO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY3JlYXRlLmNyZWF0ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmYWN0b3J5XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9mYWN0b3J5LmZhY3Rvcnk7XG4gIH1cbn0pO1xuXG52YXIgX2NvbmZpZ1JlYWRvbmx5ID0gcmVxdWlyZShcIi4vY29uZmlnUmVhZG9ubHlcIik7XG5cbnZhciBfcHVyZUZ1bmN0aW9uc0FueSA9IHJlcXVpcmUoXCIuL3B1cmVGdW5jdGlvbnNBbnkuZ2VuZXJhdGVkXCIpO1xuXG5PYmplY3Qua2V5cyhfcHVyZUZ1bmN0aW9uc0FueSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfZXhwb3J0TmFtZXMsIGtleSkpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX3B1cmVGdW5jdGlvbnNBbnlba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbnZhciBfaW1wdXJlRnVuY3Rpb25zQW55ID0gcmVxdWlyZShcIi4vaW1wdXJlRnVuY3Rpb25zQW55LmdlbmVyYXRlZFwiKTtcblxuT2JqZWN0LmtleXMoX2ltcHVyZUZ1bmN0aW9uc0FueSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfZXhwb3J0TmFtZXMsIGtleSkpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX2ltcHVyZUZ1bmN0aW9uc0FueVtrZXldO1xuICAgIH1cbiAgfSk7XG59KTtcblxudmFyIF90eXBlQ2hlY2tzID0gcmVxdWlyZShcIi4vdHlwZUNoZWNrc1wiKTtcblxuT2JqZWN0LmtleXMoX3R5cGVDaGVja3MpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2V4cG9ydE5hbWVzLCBrZXkpKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF90eXBlQ2hlY2tzW2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX0luZGV4RXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvSW5kZXhFcnJvclwiKTtcblxudmFyIF9EaW1lbnNpb25FcnJvciA9IHJlcXVpcmUoXCIuLi9lcnJvci9EaW1lbnNpb25FcnJvclwiKTtcblxudmFyIF9Bcmd1bWVudHNFcnJvciA9IHJlcXVpcmUoXCIuLi9lcnJvci9Bcmd1bWVudHNFcnJvclwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBbnkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkuZ2VuZXJhdGVkXCIpO1xuXG5PYmplY3Qua2V5cyhfZGVwZW5kZW5jaWVzQW55KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9leHBvcnROYW1lcywga2V5KSkgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQW55W2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi9mYWN0b3JpZXNBbnlcIik7XG5cbk9iamVjdC5rZXlzKF9mYWN0b3JpZXNBbnkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2V4cG9ydE5hbWVzLCBrZXkpKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF9mYWN0b3JpZXNBbnlba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbnZhciBfY3JlYXRlID0gcmVxdWlyZShcIi4uL2NvcmUvY3JlYXRlXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9kZXByZWNhdGVkQW55ID0gcmVxdWlyZShcIi4vZGVwcmVjYXRlZEFueVwiKTtcblxuT2JqZWN0LmtleXMoX2RlcHJlY2F0ZWRBbnkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2V4cG9ydE5hbWVzLCBrZXkpKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF9kZXByZWNhdGVkQW55W2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG5leHBvcnRzWyd2YXInXSA9IGV4cG9ydHMuZGVwcmVjYXRlZFZhcjtcbmV4cG9ydHNbJ3R5cGVvZiddID0gZXhwb3J0cy5kZXByZWNhdGVkVHlwZW9mO1xuZXhwb3J0c1snZXZhbCddID0gZXhwb3J0cy5kZXByZWNhdGVkRXZhbDtcbmV4cG9ydHNbJ2ltcG9ydCddID0gZXhwb3J0cy5kZXByZWNhdGVkSW1wb3J0O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNicnQgPSBleHBvcnRzLm1hdHJpeCA9IGV4cG9ydHMuU3BhcnNlTWF0cml4ID0gZXhwb3J0cy5pc05lZ2F0aXZlID0gZXhwb3J0cy5TUVJUMiA9IGV4cG9ydHMucmFuZG9tID0gZXhwb3J0cy5jb21iaW5hdGlvbnNXaXRoUmVwID0gZXhwb3J0cy5zaW4gPSBleHBvcnRzLmNzYyA9IGV4cG9ydHMuY29zID0gZXhwb3J0cy5hc2luaCA9IGV4cG9ydHMuYWNzY2ggPSBleHBvcnRzLmFjb3NoID0gZXhwb3J0cy5wcmludCA9IGV4cG9ydHMubW9kZSA9IGV4cG9ydHMuZ2V0TWF0cml4RGF0YVR5cGUgPSBleHBvcnRzLmNvbmogPSBleHBvcnRzLnNxcnQgPSBleHBvcnRzLmxvZzIgPSBleHBvcnRzLmV4cCA9IGV4cG9ydHMuYWRkU2NhbGFyID0gZXhwb3J0cy51bmFyeU1pbnVzID0gZXhwb3J0cy5mcmFjdGlvbiA9IGV4cG9ydHMuc3RyaW5nID0gZXhwb3J0cy50eXBlT2YgPSBleHBvcnRzLmhhc051bWVyaWNWYWx1ZSA9IGV4cG9ydHMuY2xvbmUgPSBleHBvcnRzLkxOMiA9IGV4cG9ydHMucmFuZG9tSW50ID0gZXhwb3J0cy5waWNrUmFuZG9tID0gZXhwb3J0cy5jb21iaW5hdGlvbnMgPSBleHBvcnRzLnRhbmggPSBleHBvcnRzLnNpbmggPSBleHBvcnRzLnNlY2ggPSBleHBvcnRzLmNzY2ggPSBleHBvcnRzLmNvdGggPSBleHBvcnRzLmNvc2ggPSBleHBvcnRzLmF0YW5oID0gZXhwb3J0cy5hdGFuID0gZXhwb3J0cy5hc2luID0gZXhwb3J0cy5hc2VjID0gZXhwb3J0cy5hY3NjID0gZXhwb3J0cy5hY290ID0gZXhwb3J0cy5hY29zID0gZXhwb3J0cy5pc1ByaW1lID0gZXhwb3J0cy5mb3JtYXQgPSBleHBvcnRzLmVyZiA9IGV4cG9ydHMubWFwID0gZXhwb3J0cy5mb3JFYWNoID0gZXhwb3J0cy5maWx0ZXIgPSBleHBvcnRzLm5vdCA9IGV4cG9ydHMuaW0gPSBleHBvcnRzLmFyZyA9IGV4cG9ydHMuYml0Tm90ID0gZXhwb3J0cy5zcXVhcmUgPSBleHBvcnRzLnNpZ24gPSBleHBvcnRzLm11bHRpcGx5U2NhbGFyID0gZXhwb3J0cy5sb2cxMCA9IGV4cG9ydHMuZXhwbTEgPSBleHBvcnRzLmN1YmUgPSBleHBvcnRzLmFwcGx5ID0gZXhwb3J0cy51bmFyeVBsdXMgPSBleHBvcnRzLnNwbGl0VW5pdCA9IGV4cG9ydHMuY29tcGxleCA9IGV4cG9ydHNbXCJib29sZWFuXCJdID0gZXhwb3J0cy5udW1iZXIgPSBleHBvcnRzLmVxdWFsU2NhbGFyID0gZXhwb3J0cy5pc05hTiA9IGV4cG9ydHMuaXNQb3NpdGl2ZSA9IGV4cG9ydHMuaXNOdW1lcmljID0gZXhwb3J0cy5pc0ludGVnZXIgPSBleHBvcnRzLnR5cGVkID0gZXhwb3J0cy5waGkgPSBleHBvcnRzLkRlbnNlTWF0cml4ID0gZXhwb3J0cy52ZXJzaW9uID0gZXhwb3J0cy5MT0cyRSA9IGV4cG9ydHMuX0luZmluaXR5ID0gZXhwb3J0cy5lID0gZXhwb3J0cy5GcmFjdGlvbiA9IGV4cG9ydHMud2Vha01peGluZ0FuZ2xlID0gZXhwb3J0cy5zYWNrdXJUZXRyb2RlID0gZXhwb3J0cy5maW5lU3RydWN0dXJlID0gZXhwb3J0cy5lZmltb3ZGYWN0b3IgPSBleHBvcnRzLnRhdSA9IGV4cG9ydHMuU1FSVDFfMiA9IGV4cG9ydHMucGkgPSBleHBvcnRzLl9OYU4gPSBleHBvcnRzLkxPRzEwRSA9IGV4cG9ydHMuTE4xMCA9IGV4cG9ydHMuaSA9IGV4cG9ydHMucmVwbGFjZXIgPSBleHBvcnRzLk1hdHJpeCA9IGV4cG9ydHMuQmlnTnVtYmVyID0gZXhwb3J0cy5fdHJ1ZSA9IGV4cG9ydHMuX251bGwgPSBleHBvcnRzLl9mYWxzZSA9IGV4cG9ydHMuZXllID0gZXhwb3J0cy5SYW5nZSA9IGV4cG9ydHMuQ29tcGxleCA9IGV4cG9ydHMuUmVzdWx0U2V0ID0gdm9pZCAwO1xuZXhwb3J0cy54b3IgPSBleHBvcnRzLmNhdGFsYW4gPSBleHBvcnRzLnN0aXJsaW5nUzIgPSBleHBvcnRzLmRpc3RhbmNlID0gZXhwb3J0cy5kZXQgPSBleHBvcnRzLnNsdSA9IGV4cG9ydHMubHVwID0gZXhwb3J0cy5oeXBvdCA9IGV4cG9ydHMuc2V0TXVsdGlwbGljaXR5ID0gZXhwb3J0cy5zZXREaWZmZXJlbmNlID0gZXhwb3J0cy5kZWVwRXF1YWwgPSBleHBvcnRzLmxzb2x2ZSA9IGV4cG9ydHMubnRoUm9vdHMgPSBleHBvcnRzLmRpdmlkZVNjYWxhciA9IGV4cG9ydHMucmFuZ2UgPSBleHBvcnRzLmZpeCA9IGV4cG9ydHMuaW5kZXggPSBleHBvcnRzLnNldFBvd2Vyc2V0ID0gZXhwb3J0cy5zZXRJc1N1YnNldCA9IGV4cG9ydHMuc2V0RGlzdGluY3QgPSBleHBvcnRzLnNldENhcnRlc2lhbiA9IGV4cG9ydHMuSW5kZXggPSBleHBvcnRzLmVxdWFsID0gZXhwb3J0cy5jdHJhbnNwb3NlID0gZXhwb3J0cy5jcm9zcyA9IGV4cG9ydHMuc3VidHJhY3QgPSBleHBvcnRzLmNlaWwgPSBleHBvcnRzLnBlcm11dGF0aW9ucyA9IGV4cG9ydHMuZmFjdG9yaWFsID0gZXhwb3J0cy5zdW0gPSBleHBvcnRzLmRvdCA9IGV4cG9ydHMuY290ID0gZXhwb3J0cy5zb3J0ID0gZXhwb3J0cy5zbWFsbGVyRXEgPSBleHBvcnRzLmFuZCA9IGV4cG9ydHMubnVtZXJpYyA9IGV4cG9ydHMudHJhbnNwb3NlID0gZXhwb3J0cy5rcm9uID0gZXhwb3J0cy5iaXRPciA9IGV4cG9ydHMubGNtID0gZXhwb3J0cy5iaWdudW1iZXIgPSBleHBvcnRzLmdhbW1hID0gZXhwb3J0cy5xdWFudGlsZVNlcSA9IGV4cG9ydHMubm9ybSA9IGV4cG9ydHMuc2V0U2l6ZSA9IGV4cG9ydHMudGFuID0gZXhwb3J0cy5hc2VjaCA9IGV4cG9ydHMuU3BhID0gZXhwb3J0cy5taW4gPSBleHBvcnRzLnBhcnRpdGlvblNlbGVjdCA9IGV4cG9ydHMubGFyZ2VyRXEgPSBleHBvcnRzLmVxdWFsVGV4dCA9IGV4cG9ydHMuY29tcGFyZU5hdHVyYWwgPSBleHBvcnRzLnJpZ2h0QXJpdGhTaGlmdCA9IGV4cG9ydHMuZG90UG93ID0gZXhwb3J0cy5wb3cgPSBleHBvcnRzLnByb2QgPSBleHBvcnRzLnNxdWVlemUgPSBleHBvcnRzLnJlc2l6ZSA9IGV4cG9ydHMuZmxhdHRlbiA9IGV4cG9ydHMucmUgPSBleHBvcnRzLmRvdE11bHRpcGx5ID0gZXhwb3J0cy5tdWx0aXBseSA9IGV4cG9ydHMuZmxvb3IgPSBleHBvcnRzLmFicyA9IGV4cG9ydHMuaXNaZXJvID0gZXhwb3J0cy5jb21wb3NpdGlvbiA9IGV4cG9ydHMudHJhY2UgPSBleHBvcnRzLmFkZCA9IGV4cG9ydHMuc2VjID0gZXhwb3J0cy5hdGFuMiA9IGV4cG9ydHMuYWNvdGggPSBleHBvcnRzLnNwYXJzZSA9IGV4cG9ydHMuRmlib25hY2NpSGVhcCA9IGV4cG9ydHMuSW1tdXRhYmxlRGVuc2VNYXRyaXggPSBleHBvcnRzLm1heCA9IGV4cG9ydHMudW5lcXVhbCA9IGV4cG9ydHMubGFyZ2VyID0gZXhwb3J0cy5zbWFsbGVyID0gZXhwb3J0cy5jb21wYXJlVGV4dCA9IGV4cG9ydHMuY29tcGFyZSA9IGV4cG9ydHMucmlnaHRMb2dTaGlmdCA9IGV4cG9ydHMubGVmdFNoaWZ0ID0gZXhwb3J0cy5yb3VuZCA9IGV4cG9ydHMudG8gPSBleHBvcnRzLnplcm9zID0gZXhwb3J0cy5zdWJzZXQgPSBleHBvcnRzLnNpemUgPSBleHBvcnRzLnJlc2hhcGUgPSBleHBvcnRzLm9uZXMgPSBleHBvcnRzLmlkZW50aXR5ID0gZXhwb3J0cy5kaWFnID0gZXhwb3J0cy5jb25jYXQgPSBleHBvcnRzLm9yID0gZXhwb3J0cy5iaXRYb3IgPSBleHBvcnRzLmJpdEFuZCA9IGV4cG9ydHMueGdjZCA9IGV4cG9ydHMubnRoUm9vdCA9IGV4cG9ydHMubW9kID0gZXhwb3J0cy5nY2QgPSB2b2lkIDA7XG5leHBvcnRzLnJ5ZGJlcmcgPSBleHBvcnRzLm1hZCA9IGV4cG9ydHMuY291bG9tYiA9IGV4cG9ydHMubWFnbmV0aWNGbHV4UXVhbnR1bSA9IGV4cG9ydHMuc2V0VW5pb24gPSBleHBvcnRzLnBsYW5ja0NvbnN0YW50ID0gZXhwb3J0cy5nYXNDb25zdGFudCA9IGV4cG9ydHMubWVkaWFuID0gZXhwb3J0cy5sb2cxcCA9IGV4cG9ydHMudGhvbXNvbkNyb3NzU2VjdGlvbiA9IGV4cG9ydHMucGxhbmNrVGltZSA9IGV4cG9ydHMubW9sYXJWb2x1bWUgPSBleHBvcnRzLmludmVyc2VDb25kdWN0YW5jZVF1YW50dW0gPSBleHBvcnRzLmVsZW1lbnRhcnlDaGFyZ2UgPSBleHBvcnRzLmJvaHJSYWRpdXMgPSBleHBvcnRzLmtsZGl2ZXJnZW5jZSA9IGV4cG9ydHMuc3FydG0gPSBleHBvcnRzLnVuaXQgPSBleHBvcnRzLmxvZyA9IGV4cG9ydHMud2llbkRpc3BsYWNlbWVudCA9IGV4cG9ydHMuc3BlZWRPZkxpZ2h0ID0gZXhwb3J0cy5xdWFudHVtT2ZDaXJjdWxhdGlvbiA9IGV4cG9ydHMucGxhbmNrTWFzcyA9IGV4cG9ydHMubnVjbGVhck1hZ25ldG9uID0gZXhwb3J0cy5tb2xhck1hc3NDMTIgPSBleHBvcnRzLmxvc2NobWlkdCA9IGV4cG9ydHMuZ3Jhdml0eSA9IGV4cG9ydHMuZmVybWlDb3VwbGluZyA9IGV4cG9ydHMuZWxlY3RyaWNDb25zdGFudCA9IGV4cG9ydHMuY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXMgPSBleHBvcnRzLmF2b2dhZHJvID0gZXhwb3J0cy5iZWxsTnVtYmVycyA9IGV4cG9ydHMuaW50ZXJzZWN0ID0gZXhwb3J0cy5laWdzID0gZXhwb3J0cy5sdXNvbHZlID0gZXhwb3J0cy5zZXRJbnRlcnNlY3QgPSBleHBvcnRzLnVzb2x2ZSA9IGV4cG9ydHMuY29sdW1uID0gZXhwb3J0cy52YWN1dW1JbXBlZGFuY2UgPSBleHBvcnRzLnN0ZWZhbkJvbHR6bWFubiA9IGV4cG9ydHMuc2Vjb25kUmFkaWF0aW9uID0gZXhwb3J0cy5yZWR1Y2VkUGxhbmNrQ29uc3RhbnQgPSBleHBvcnRzLnByb3Rvbk1hc3MgPSBleHBvcnRzLnBsYW5ja1RlbXBlcmF0dXJlID0gZXhwb3J0cy5wbGFuY2tMZW5ndGggPSBleHBvcnRzLnBsYW5ja0NoYXJnZSA9IGV4cG9ydHMubmV1dHJvbk1hc3MgPSBleHBvcnRzLm1vbGFyUGxhbmNrQ29uc3RhbnQgPSBleHBvcnRzLm1vbGFyTWFzcyA9IGV4cG9ydHMubWFnbmV0aWNDb25zdGFudCA9IGV4cG9ydHMua2xpdHppbmcgPSBleHBvcnRzLmhhcnRyZWVFbmVyZ3kgPSBleHBvcnRzLmdyYXZpdGF0aW9uQ29uc3RhbnQgPSBleHBvcnRzLmZpcnN0UmFkaWF0aW9uID0gZXhwb3J0cy5mYXJhZGF5ID0gZXhwb3J0cy5lbGVjdHJvbk1hc3MgPSBleHBvcnRzLmRldXRlcm9uTWFzcyA9IGV4cG9ydHMuY29uZHVjdGFuY2VRdWFudHVtID0gZXhwb3J0cy5ib2x0em1hbm4gPSBleHBvcnRzLmJvaHJNYWduZXRvbiA9IGV4cG9ydHMuYXRvbWljTWFzcyA9IGV4cG9ydHMubXVsdGlub21pYWwgPSBleHBvcnRzLnN0ZCA9IGV4cG9ydHMudmFyaWFuY2UgPSBleHBvcnRzLm1lYW4gPSBleHBvcnRzLmRpdmlkZSA9IGV4cG9ydHMuZXhwbSA9IGV4cG9ydHMuaW52ID0gZXhwb3J0cy5xciA9IGV4cG9ydHMuc2V0U3ltRGlmZmVyZW5jZSA9IGV4cG9ydHMuY3JlYXRlVW5pdCA9IGV4cG9ydHMuVW5pdCA9IGV4cG9ydHMuZG90RGl2aWRlID0gZXhwb3J0cy5yb3cgPSB2b2lkIDA7XG5cbnZhciBfY29uZmlnUmVhZG9ubHkgPSByZXF1aXJlKFwiLi9jb25maWdSZWFkb25seVwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vZmFjdG9yaWVzQW55XCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFJlc3VsdFNldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlc3VsdFNldCkoe30pO1xuZXhwb3J0cy5SZXN1bHRTZXQgPSBSZXN1bHRTZXQ7XG52YXIgQ29tcGxleCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbXBsZXhDbGFzcykoe30pO1xuZXhwb3J0cy5Db21wbGV4ID0gQ29tcGxleDtcbnZhciBSYW5nZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJhbmdlQ2xhc3MpKHt9KTtcbmV4cG9ydHMuUmFuZ2UgPSBSYW5nZTtcbnZhciBleWUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFeWUpKHt9KTtcbmV4cG9ydHMuZXllID0gZXllO1xuXG52YXIgX2ZhbHNlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRmFsc2UpKHt9KTtcblxuZXhwb3J0cy5fZmFsc2UgPSBfZmFsc2U7XG5cbnZhciBfbnVsbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU51bGwpKHt9KTtcblxuZXhwb3J0cy5fbnVsbCA9IF9udWxsO1xuXG52YXIgX3RydWUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUcnVlKSh7fSk7XG5cbmV4cG9ydHMuX3RydWUgPSBfdHJ1ZTtcbnZhciBCaWdOdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVCaWdOdW1iZXJDbGFzcykoe1xuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5CaWdOdW1iZXIgPSBCaWdOdW1iZXI7XG52YXIgTWF0cml4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWF0cml4Q2xhc3MpKHt9KTtcbmV4cG9ydHMuTWF0cml4ID0gTWF0cml4O1xudmFyIHJlcGxhY2VyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUmVwbGFjZXIpKHt9KTtcbmV4cG9ydHMucmVwbGFjZXIgPSByZXBsYWNlcjtcbnZhciBpID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSSkoe1xuICBDb21wbGV4OiBDb21wbGV4XG59KTtcbmV4cG9ydHMuaSA9IGk7XG52YXIgTE4xMCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxOMTApKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLkxOMTAgPSBMTjEwO1xudmFyIExPRzEwRSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxPRzEwRSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuTE9HMTBFID0gTE9HMTBFO1xuXG52YXIgX05hTiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU5hTikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcblxuZXhwb3J0cy5fTmFOID0gX05hTjtcbnZhciBwaSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBpKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5waSA9IHBpO1xudmFyIFNRUlQxXzIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTUVJUMV8yKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5TUVJUMV8yID0gU1FSVDFfMjtcbnZhciB0YXUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUYXUpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnRhdSA9IHRhdTtcbnZhciBlZmltb3ZGYWN0b3IgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFZmltb3ZGYWN0b3IpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmVmaW1vdkZhY3RvciA9IGVmaW1vdkZhY3RvcjtcbnZhciBmaW5lU3RydWN0dXJlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRmluZVN0cnVjdHVyZSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuZmluZVN0cnVjdHVyZSA9IGZpbmVTdHJ1Y3R1cmU7XG52YXIgc2Fja3VyVGV0cm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNhY2t1clRldHJvZGUpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnNhY2t1clRldHJvZGUgPSBzYWNrdXJUZXRyb2RlO1xudmFyIHdlYWtNaXhpbmdBbmdsZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVdlYWtNaXhpbmdBbmdsZSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMud2Vha01peGluZ0FuZ2xlID0gd2Vha01peGluZ0FuZ2xlO1xudmFyIEZyYWN0aW9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRnJhY3Rpb25DbGFzcykoe30pO1xuZXhwb3J0cy5GcmFjdGlvbiA9IEZyYWN0aW9uO1xudmFyIGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5lID0gZTtcblxudmFyIF9JbmZpbml0eSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUluZmluaXR5KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuXG5leHBvcnRzLl9JbmZpbml0eSA9IF9JbmZpbml0eTtcbnZhciBMT0cyRSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxPRzJFKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5MT0cyRSA9IExPRzJFO1xudmFyIHZlcnNpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVWZXJzaW9uKSh7fSk7XG5leHBvcnRzLnZlcnNpb24gPSB2ZXJzaW9uO1xudmFyIERlbnNlTWF0cml4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRGVuc2VNYXRyaXhDbGFzcykoe1xuICBNYXRyaXg6IE1hdHJpeFxufSk7XG5leHBvcnRzLkRlbnNlTWF0cml4ID0gRGVuc2VNYXRyaXg7XG52YXIgcGhpID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUGhpKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5waGkgPSBwaGk7XG52YXIgdHlwZWQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUeXBlZCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBGcmFjdGlvbjogRnJhY3Rpb25cbn0pO1xuZXhwb3J0cy50eXBlZCA9IHR5cGVkO1xudmFyIGlzSW50ZWdlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzSW50ZWdlcikoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5pc0ludGVnZXIgPSBpc0ludGVnZXI7XG52YXIgaXNOdW1lcmljID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNOdW1lcmljKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmlzTnVtZXJpYyA9IGlzTnVtZXJpYztcbnZhciBpc1Bvc2l0aXZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNQb3NpdGl2ZSkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5pc1Bvc2l0aXZlID0gaXNQb3NpdGl2ZTtcbnZhciBpc05hTiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzTmFOKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmlzTmFOID0gaXNOYU47XG52YXIgZXF1YWxTY2FsYXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFcXVhbFNjYWxhcikoe1xuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmVxdWFsU2NhbGFyID0gZXF1YWxTY2FsYXI7XG52YXIgbnVtYmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTnVtYmVyKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm51bWJlciA9IG51bWJlcjtcblxudmFyIF9ib29sZWFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQm9vbGVhbikoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuXG5leHBvcnRzW1wiYm9vbGVhblwiXSA9IF9ib29sZWFuO1xudmFyIGNvbXBsZXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21wbGV4KSh7XG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvbXBsZXggPSBjb21wbGV4O1xudmFyIHNwbGl0VW5pdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNwbGl0VW5pdCkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zcGxpdFVuaXQgPSBzcGxpdFVuaXQ7XG52YXIgdW5hcnlQbHVzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVW5hcnlQbHVzKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnVuYXJ5UGx1cyA9IHVuYXJ5UGx1cztcbnZhciBhcHBseSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFwcGx5KSh7XG4gIGlzSW50ZWdlcjogaXNJbnRlZ2VyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hcHBseSA9IGFwcGx5O1xudmFyIGN1YmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDdWJlKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmN1YmUgPSBjdWJlO1xudmFyIGV4cG0xID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRXhwbTEpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZXhwbTEgPSBleHBtMTtcbnZhciBsb2cxMCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxvZzEwKSh7XG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubG9nMTAgPSBsb2cxMDtcbnZhciBtdWx0aXBseVNjYWxhciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU11bHRpcGx5U2NhbGFyKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm11bHRpcGx5U2NhbGFyID0gbXVsdGlwbHlTY2FsYXI7XG52YXIgc2lnbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNpZ24pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIEZyYWN0aW9uOiBGcmFjdGlvbixcbiAgY29tcGxleDogY29tcGxleCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2lnbiA9IHNpZ247XG52YXIgc3F1YXJlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3F1YXJlKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNxdWFyZSA9IHNxdWFyZTtcbnZhciBiaXROb3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVCaXROb3QpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYml0Tm90ID0gYml0Tm90O1xudmFyIGFyZyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFyZykoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hcmcgPSBhcmc7XG52YXIgaW0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbSkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5pbSA9IGltO1xudmFyIG5vdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU5vdCkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5ub3QgPSBub3Q7XG52YXIgZmlsdGVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRmlsdGVyKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmZpbHRlciA9IGZpbHRlcjtcbnZhciBmb3JFYWNoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRm9yRWFjaCkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5mb3JFYWNoID0gZm9yRWFjaDtcbnZhciBtYXAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNYXApKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubWFwID0gbWFwO1xudmFyIGVyZiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUVyZikoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5lcmYgPSBlcmY7XG52YXIgZm9ybWF0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRm9ybWF0KSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmZvcm1hdCA9IGZvcm1hdDtcbnZhciBpc1ByaW1lID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNQcmltZSkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5pc1ByaW1lID0gaXNQcmltZTtcbnZhciBhY29zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNvcykoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmFjb3MgPSBhY29zO1xudmFyIGFjb3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBY290KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hY290ID0gYWNvdDtcbnZhciBhY3NjID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNzYykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hY3NjID0gYWNzYztcbnZhciBhc2VjID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQXNlYykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hc2VjID0gYXNlYztcbnZhciBhc2luID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQXNpbikoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmFzaW4gPSBhc2luO1xudmFyIGF0YW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBdGFuKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmF0YW4gPSBhdGFuO1xudmFyIGF0YW5oID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQXRhbmgpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hdGFuaCA9IGF0YW5oO1xudmFyIGNvc2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb3NoKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvc2ggPSBjb3NoO1xudmFyIGNvdGggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb3RoKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jb3RoID0gY290aDtcbnZhciBjc2NoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ3NjaCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY3NjaCA9IGNzY2g7XG52YXIgc2VjaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNlY2gpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNlY2ggPSBzZWNoO1xudmFyIHNpbmggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTaW5oKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNpbmggPSBzaW5oO1xudmFyIHRhbmggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUYW5oKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnRhbmggPSB0YW5oO1xudmFyIGNvbWJpbmF0aW9ucyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbWJpbmF0aW9ucykoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jb21iaW5hdGlvbnMgPSBjb21iaW5hdGlvbnM7XG52YXIgcGlja1JhbmRvbSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBpY2tSYW5kb20pKHtcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5waWNrUmFuZG9tID0gcGlja1JhbmRvbTtcbnZhciByYW5kb21JbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5kb21JbnQpKHtcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5yYW5kb21JbnQgPSByYW5kb21JbnQ7XG52YXIgTE4yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTE4yKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5MTjIgPSBMTjI7XG52YXIgY2xvbmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDbG9uZSkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jbG9uZSA9IGNsb25lO1xudmFyIGhhc051bWVyaWNWYWx1ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUhhc051bWVyaWNWYWx1ZSkoe1xuICBpc051bWVyaWM6IGlzTnVtZXJpYyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuaGFzTnVtZXJpY1ZhbHVlID0gaGFzTnVtZXJpY1ZhbHVlO1xudmFyIHR5cGVPZiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVR5cGVPZikoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG52YXIgc3RyaW5nID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3RyaW5nKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnN0cmluZyA9IHN0cmluZztcbnZhciBmcmFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZyYWN0aW9uKSh7XG4gIEZyYWN0aW9uOiBGcmFjdGlvbixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZnJhY3Rpb24gPSBmcmFjdGlvbjtcbnZhciB1bmFyeU1pbnVzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVW5hcnlNaW51cykoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy51bmFyeU1pbnVzID0gdW5hcnlNaW51cztcbnZhciBhZGRTY2FsYXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBZGRTY2FsYXIpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYWRkU2NhbGFyID0gYWRkU2NhbGFyO1xudmFyIGV4cCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUV4cCkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5leHAgPSBleHA7XG52YXIgbG9nMiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxvZzIpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5sb2cyID0gbG9nMjtcbnZhciBzcXJ0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3FydCkoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNxcnQgPSBzcXJ0O1xudmFyIGNvbmogPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25qKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvbmogPSBjb25qO1xudmFyIGdldE1hdHJpeERhdGFUeXBlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlR2V0TWF0cml4RGF0YVR5cGUpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZ2V0TWF0cml4RGF0YVR5cGUgPSBnZXRNYXRyaXhEYXRhVHlwZTtcbnZhciBtb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTW9kZSkoe1xuICBpc05hTjogaXNOYU4sXG4gIGlzTnVtZXJpYzogaXNOdW1lcmljLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5tb2RlID0gbW9kZTtcbnZhciBwcmludCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVByaW50KSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnByaW50ID0gcHJpbnQ7XG52YXIgYWNvc2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBY29zaCkoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmFjb3NoID0gYWNvc2g7XG52YXIgYWNzY2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBY3NjaCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYWNzY2ggPSBhY3NjaDtcbnZhciBhc2luaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFzaW5oKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmFzaW5oID0gYXNpbmg7XG52YXIgY29zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29zKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvcyA9IGNvcztcbnZhciBjc2MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDc2MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNzYyA9IGNzYztcbnZhciBzaW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTaW4pKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2luID0gc2luO1xudmFyIGNvbWJpbmF0aW9uc1dpdGhSZXAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21iaW5hdGlvbnNXaXRoUmVwKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvbWJpbmF0aW9uc1dpdGhSZXAgPSBjb21iaW5hdGlvbnNXaXRoUmVwO1xudmFyIHJhbmRvbSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJhbmRvbSkoe1xuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnJhbmRvbSA9IHJhbmRvbTtcbnZhciBTUVJUMiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNRUlQyKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5TUVJUMiA9IFNRUlQyO1xudmFyIGlzTmVnYXRpdmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJc05lZ2F0aXZlKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmlzTmVnYXRpdmUgPSBpc05lZ2F0aXZlO1xudmFyIFNwYXJzZU1hdHJpeCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNwYXJzZU1hdHJpeENsYXNzKSh7XG4gIE1hdHJpeDogTWF0cml4LFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLlNwYXJzZU1hdHJpeCA9IFNwYXJzZU1hdHJpeDtcbnZhciBtYXRyaXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNYXRyaXgpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBNYXRyaXg6IE1hdHJpeCxcbiAgU3BhcnNlTWF0cml4OiBTcGFyc2VNYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm1hdHJpeCA9IG1hdHJpeDtcbnZhciBjYnJ0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2JydCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgRnJhY3Rpb246IEZyYWN0aW9uLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGlzTmVnYXRpdmU6IGlzTmVnYXRpdmUsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWQsXG4gIHVuYXJ5TWludXM6IHVuYXJ5TWludXNcbn0pO1xuZXhwb3J0cy5jYnJ0ID0gY2JydDtcbnZhciBnY2QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVHY2QpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZ2NkID0gZ2NkO1xudmFyIG1vZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vZCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm1vZCA9IG1vZDtcbnZhciBudGhSb290ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTnRoUm9vdCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubnRoUm9vdCA9IG50aFJvb3Q7XG52YXIgeGdjZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVhnY2QpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnhnY2QgPSB4Z2NkO1xudmFyIGJpdEFuZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpdEFuZCkoe1xuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5iaXRBbmQgPSBiaXRBbmQ7XG52YXIgYml0WG9yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQml0WG9yKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmJpdFhvciA9IGJpdFhvcjtcbnZhciBvciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU9yKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMub3IgPSBvcjtcbnZhciBjb25jYXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25jYXQpKHtcbiAgaXNJbnRlZ2VyOiBpc0ludGVnZXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jb25jYXQgPSBjb25jYXQ7XG52YXIgZGlhZyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZURpYWcpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBTcGFyc2VNYXRyaXg6IFNwYXJzZU1hdHJpeCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmRpYWcgPSBkaWFnO1xudmFyIGlkZW50aXR5ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSWRlbnRpdHkpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgU3BhcnNlTWF0cml4OiBTcGFyc2VNYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmlkZW50aXR5ID0gaWRlbnRpdHk7XG52YXIgb25lcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU9uZXMpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm9uZXMgPSBvbmVzO1xudmFyIHJlc2hhcGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSZXNoYXBlKSh7XG4gIGlzSW50ZWdlcjogaXNJbnRlZ2VyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMucmVzaGFwZSA9IHJlc2hhcGU7XG52YXIgc2l6ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNpemUpKHtcbiAgbWF0cml4OiBtYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2l6ZSA9IHNpemU7XG52YXIgc3Vic2V0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3Vic2V0KSh7XG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zdWJzZXQgPSBzdWJzZXQ7XG52YXIgemVyb3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVaZXJvcykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuemVyb3MgPSB6ZXJvcztcbnZhciB0byA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVRvKSh7XG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy50byA9IHRvO1xudmFyIHJvdW5kID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUm91bmQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB6ZXJvczogemVyb3Ncbn0pO1xuZXhwb3J0cy5yb3VuZCA9IHJvdW5kO1xudmFyIGxlZnRTaGlmdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxlZnRTaGlmdCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZCxcbiAgemVyb3M6IHplcm9zXG59KTtcbmV4cG9ydHMubGVmdFNoaWZ0ID0gbGVmdFNoaWZ0O1xudmFyIHJpZ2h0TG9nU2hpZnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSaWdodExvZ1NoaWZ0KSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB6ZXJvczogemVyb3Ncbn0pO1xuZXhwb3J0cy5yaWdodExvZ1NoaWZ0ID0gcmlnaHRMb2dTaGlmdDtcbnZhciBjb21wYXJlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGFyZSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBGcmFjdGlvbjogRnJhY3Rpb24sXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY29tcGFyZSA9IGNvbXBhcmU7XG52YXIgY29tcGFyZVRleHQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21wYXJlVGV4dCkoe1xuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY29tcGFyZVRleHQgPSBjb21wYXJlVGV4dDtcbnZhciBzbWFsbGVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU21hbGxlcikoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNtYWxsZXIgPSBzbWFsbGVyO1xudmFyIGxhcmdlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxhcmdlcikoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmxhcmdlciA9IGxhcmdlcjtcbnZhciB1bmVxdWFsID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVW5lcXVhbCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMudW5lcXVhbCA9IHVuZXF1YWw7XG52YXIgbWF4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWF4KSh7XG4gIGxhcmdlcjogbGFyZ2VyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5tYXggPSBtYXg7XG52YXIgSW1tdXRhYmxlRGVuc2VNYXRyaXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbW11dGFibGVEZW5zZU1hdHJpeENsYXNzKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgc21hbGxlcjogc21hbGxlclxufSk7XG5leHBvcnRzLkltbXV0YWJsZURlbnNlTWF0cml4ID0gSW1tdXRhYmxlRGVuc2VNYXRyaXg7XG52YXIgRmlib25hY2NpSGVhcCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZpYm9uYWNjaUhlYXBDbGFzcykoe1xuICBsYXJnZXI6IGxhcmdlcixcbiAgc21hbGxlcjogc21hbGxlclxufSk7XG5leHBvcnRzLkZpYm9uYWNjaUhlYXAgPSBGaWJvbmFjY2lIZWFwO1xudmFyIHNwYXJzZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNwYXJzZSkoe1xuICBTcGFyc2VNYXRyaXg6IFNwYXJzZU1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc3BhcnNlID0gc3BhcnNlO1xudmFyIGFjb3RoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNvdGgpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYWNvdGggPSBhY290aDtcbnZhciBhdGFuMiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUF0YW4yKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmF0YW4yID0gYXRhbjI7XG52YXIgc2VjID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU2VjKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zZWMgPSBzZWM7XG52YXIgYWRkID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWRkKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgU3BhcnNlTWF0cml4OiBTcGFyc2VNYXRyaXgsXG4gIGFkZFNjYWxhcjogYWRkU2NhbGFyLFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hZGQgPSBhZGQ7XG52YXIgdHJhY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUcmFjZSkoe1xuICBhZGQ6IGFkZCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnRyYWNlID0gdHJhY2U7XG52YXIgY29tcG9zaXRpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21wb3NpdGlvbikoe1xuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgY29tYmluYXRpb25zOiBjb21iaW5hdGlvbnMsXG4gIGlzSW50ZWdlcjogaXNJbnRlZ2VyLFxuICBpc05lZ2F0aXZlOiBpc05lZ2F0aXZlLFxuICBpc1Bvc2l0aXZlOiBpc1Bvc2l0aXZlLFxuICBsYXJnZXI6IGxhcmdlcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY29tcG9zaXRpb24gPSBjb21wb3NpdGlvbjtcbnZhciBpc1plcm8gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJc1plcm8pKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuaXNaZXJvID0gaXNaZXJvO1xudmFyIGFicyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFicykoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hYnMgPSBhYnM7XG52YXIgZmxvb3IgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGbG9vcikoe1xuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHJvdW5kOiByb3VuZCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZmxvb3IgPSBmbG9vcjtcbnZhciBtdWx0aXBseSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU11bHRpcGx5KSh7XG4gIGFkZFNjYWxhcjogYWRkU2NhbGFyLFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm11bHRpcGx5ID0gbXVsdGlwbHk7XG52YXIgZG90TXVsdGlwbHkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEb3RNdWx0aXBseSkoe1xuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmRvdE11bHRpcGx5ID0gZG90TXVsdGlwbHk7XG52YXIgcmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSZSkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5yZSA9IHJlO1xudmFyIGZsYXR0ZW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGbGF0dGVuKSh7XG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5mbGF0dGVuID0gZmxhdHRlbjtcbnZhciByZXNpemUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSZXNpemUpKHtcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBtYXRyaXg6IG1hdHJpeFxufSk7XG5leHBvcnRzLnJlc2l6ZSA9IHJlc2l6ZTtcbnZhciBzcXVlZXplID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3F1ZWV6ZSkoe1xuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc3F1ZWV6ZSA9IHNxdWVlemU7XG52YXIgcHJvZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVByb2QpKHtcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5wcm9kID0gcHJvZDtcbnZhciBwb3cgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQb3cpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBmcmFjdGlvbjogZnJhY3Rpb24sXG4gIGlkZW50aXR5OiBpZGVudGl0eSxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgbnVtYmVyOiBudW1iZXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnBvdyA9IHBvdztcbnZhciBkb3RQb3cgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEb3RQb3cpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICBwb3c6IHBvdyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZG90UG93ID0gZG90UG93O1xudmFyIHJpZ2h0QXJpdGhTaGlmdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJpZ2h0QXJpdGhTaGlmdCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZCxcbiAgemVyb3M6IHplcm9zXG59KTtcbmV4cG9ydHMucmlnaHRBcml0aFNoaWZ0ID0gcmlnaHRBcml0aFNoaWZ0O1xudmFyIGNvbXBhcmVOYXR1cmFsID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGFyZU5hdHVyYWwpKHtcbiAgY29tcGFyZTogY29tcGFyZSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY29tcGFyZU5hdHVyYWwgPSBjb21wYXJlTmF0dXJhbDtcbnZhciBlcXVhbFRleHQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFcXVhbFRleHQpKHtcbiAgY29tcGFyZVRleHQ6IGNvbXBhcmVUZXh0LFxuICBpc1plcm86IGlzWmVybyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZXF1YWxUZXh0ID0gZXF1YWxUZXh0O1xudmFyIGxhcmdlckVxID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTGFyZ2VyRXEpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5sYXJnZXJFcSA9IGxhcmdlckVxO1xudmFyIHBhcnRpdGlvblNlbGVjdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBhcnRpdGlvblNlbGVjdCkoe1xuICBjb21wYXJlOiBjb21wYXJlLFxuICBpc05hTjogaXNOYU4sXG4gIGlzTnVtZXJpYzogaXNOdW1lcmljLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5wYXJ0aXRpb25TZWxlY3QgPSBwYXJ0aXRpb25TZWxlY3Q7XG52YXIgbWluID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWluKSh7XG4gIHNtYWxsZXI6IHNtYWxsZXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm1pbiA9IG1pbjtcbnZhciBTcGEgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTcGFDbGFzcykoe1xuICBGaWJvbmFjY2lIZWFwOiBGaWJvbmFjY2lIZWFwLFxuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG59KTtcbmV4cG9ydHMuU3BhID0gU3BhO1xudmFyIGFzZWNoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQXNlY2gpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYXNlY2ggPSBhc2VjaDtcbnZhciB0YW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUYW4pKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMudGFuID0gdGFuO1xudmFyIHNldFNpemUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRTaXplKSh7XG4gIGNvbXBhcmVOYXR1cmFsOiBjb21wYXJlTmF0dXJhbCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2V0U2l6ZSA9IHNldFNpemU7XG52YXIgbm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU5vcm0pKHtcbiAgYWJzOiBhYnMsXG4gIGFkZDogYWRkLFxuICBjb25qOiBjb25qLFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIGxhcmdlcjogbGFyZ2VyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICBwb3c6IHBvdyxcbiAgc21hbGxlcjogc21hbGxlcixcbiAgc3FydDogc3FydCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubm9ybSA9IG5vcm07XG52YXIgcXVhbnRpbGVTZXEgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVRdWFudGlsZVNlcSkoe1xuICBhZGQ6IGFkZCxcbiAgY29tcGFyZTogY29tcGFyZSxcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICBwYXJ0aXRpb25TZWxlY3Q6IHBhcnRpdGlvblNlbGVjdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMucXVhbnRpbGVTZXEgPSBxdWFudGlsZVNlcTtcbnZhciBnYW1tYSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUdhbW1hKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIG11bHRpcGx5U2NhbGFyOiBtdWx0aXBseVNjYWxhcixcbiAgcG93OiBwb3csXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmdhbW1hID0gZ2FtbWE7XG52YXIgYmlnbnVtYmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQmlnbnVtYmVyKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5iaWdudW1iZXIgPSBiaWdudW1iZXI7XG52YXIgbGNtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTGNtKSh7XG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmxjbSA9IGxjbTtcbnZhciBiaXRPciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpdE9yKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYml0T3IgPSBiaXRPcjtcbnZhciBrcm9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlS3Jvbikoe1xuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5rcm9uID0ga3JvbjtcbnZhciB0cmFuc3Bvc2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUcmFuc3Bvc2UpKHtcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnRyYW5zcG9zZSA9IHRyYW5zcG9zZTtcbnZhciBudW1lcmljID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTnVtZXJpYykoe1xuICBiaWdudW1iZXI6IGJpZ251bWJlcixcbiAgZnJhY3Rpb246IGZyYWN0aW9uLFxuICBudW1iZXI6IG51bWJlclxufSk7XG5leHBvcnRzLm51bWVyaWMgPSBudW1lcmljO1xudmFyIGFuZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFuZCkoe1xuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICBub3Q6IG5vdCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB6ZXJvczogemVyb3Ncbn0pO1xuZXhwb3J0cy5hbmQgPSBhbmQ7XG52YXIgc21hbGxlckVxID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU21hbGxlckVxKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc21hbGxlckVxID0gc21hbGxlckVxO1xudmFyIHNvcnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTb3J0KSh7XG4gIGNvbXBhcmU6IGNvbXBhcmUsXG4gIGNvbXBhcmVOYXR1cmFsOiBjb21wYXJlTmF0dXJhbCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNvcnQgPSBzb3J0O1xudmFyIGNvdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvdCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY290ID0gY290O1xudmFyIGRvdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZURvdCkoe1xuICBhZGQ6IGFkZCxcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5kb3QgPSBkb3Q7XG52YXIgc3VtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3VtKSh7XG4gIGJpZ251bWJlcjogYmlnbnVtYmVyLFxuICBmcmFjdGlvbjogZnJhY3Rpb24sXG4gIGFkZDogYWRkLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnN1bSA9IHN1bTtcbnZhciBmYWN0b3JpYWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGYWN0b3JpYWwpKHtcbiAgZ2FtbWE6IGdhbW1hLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5mYWN0b3JpYWwgPSBmYWN0b3JpYWw7XG52YXIgcGVybXV0YXRpb25zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUGVybXV0YXRpb25zKSh7XG4gIGZhY3RvcmlhbDogZmFjdG9yaWFsLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5wZXJtdXRhdGlvbnMgPSBwZXJtdXRhdGlvbnM7XG52YXIgY2VpbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNlaWwpKHtcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICByb3VuZDogcm91bmQsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNlaWwgPSBjZWlsO1xudmFyIHN1YnRyYWN0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3VidHJhY3QpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB1bmFyeU1pbnVzOiB1bmFyeU1pbnVzXG59KTtcbmV4cG9ydHMuc3VidHJhY3QgPSBzdWJ0cmFjdDtcbnZhciBjcm9zcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNyb3NzKSh7XG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseTogbXVsdGlwbHksXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY3Jvc3MgPSBjcm9zcztcbnZhciBjdHJhbnNwb3NlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ3RyYW5zcG9zZSkoe1xuICBjb25qOiBjb25qLFxuICB0cmFuc3Bvc2U6IHRyYW5zcG9zZSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY3RyYW5zcG9zZSA9IGN0cmFuc3Bvc2U7XG52YXIgZXF1YWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFcXVhbCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmVxdWFsID0gZXF1YWw7XG52YXIgSW5kZXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmRleENsYXNzKSh7XG4gIEltbXV0YWJsZURlbnNlTWF0cml4OiBJbW11dGFibGVEZW5zZU1hdHJpeFxufSk7XG5leHBvcnRzLkluZGV4ID0gSW5kZXg7XG52YXIgc2V0Q2FydGVzaWFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU2V0Q2FydGVzaWFuKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgSW5kZXg6IEluZGV4LFxuICBjb21wYXJlTmF0dXJhbDogY29tcGFyZU5hdHVyYWwsXG4gIHNpemU6IHNpemUsXG4gIHN1YnNldDogc3Vic2V0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zZXRDYXJ0ZXNpYW4gPSBzZXRDYXJ0ZXNpYW47XG52YXIgc2V0RGlzdGluY3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXREaXN0aW5jdCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIEluZGV4OiBJbmRleCxcbiAgY29tcGFyZU5hdHVyYWw6IGNvbXBhcmVOYXR1cmFsLFxuICBzaXplOiBzaXplLFxuICBzdWJzZXQ6IHN1YnNldCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2V0RGlzdGluY3QgPSBzZXREaXN0aW5jdDtcbnZhciBzZXRJc1N1YnNldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldElzU3Vic2V0KSh7XG4gIEluZGV4OiBJbmRleCxcbiAgY29tcGFyZU5hdHVyYWw6IGNvbXBhcmVOYXR1cmFsLFxuICBzaXplOiBzaXplLFxuICBzdWJzZXQ6IHN1YnNldCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2V0SXNTdWJzZXQgPSBzZXRJc1N1YnNldDtcbnZhciBzZXRQb3dlcnNldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldFBvd2Vyc2V0KSh7XG4gIEluZGV4OiBJbmRleCxcbiAgY29tcGFyZU5hdHVyYWw6IGNvbXBhcmVOYXR1cmFsLFxuICBzaXplOiBzaXplLFxuICBzdWJzZXQ6IHN1YnNldCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2V0UG93ZXJzZXQgPSBzZXRQb3dlcnNldDtcbnZhciBpbmRleCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUluZGV4KSh7XG4gIEluZGV4OiBJbmRleCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuaW5kZXggPSBpbmRleDtcbnZhciBmaXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGaXgpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY2VpbDogY2VpbCxcbiAgZmxvb3I6IGZsb29yLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5maXggPSBmaXg7XG52YXIgcmFuZ2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5nZSkoe1xuICBiaWdudW1iZXI6IGJpZ251bWJlcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbGFyZ2VyOiBsYXJnZXIsXG4gIGxhcmdlckVxOiBsYXJnZXJFcSxcbiAgc21hbGxlcjogc21hbGxlcixcbiAgc21hbGxlckVxOiBzbWFsbGVyRXEsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnJhbmdlID0gcmFuZ2U7XG52YXIgZGl2aWRlU2NhbGFyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRGl2aWRlU2NhbGFyKSh7XG4gIG51bWVyaWM6IG51bWVyaWMsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmRpdmlkZVNjYWxhciA9IGRpdmlkZVNjYWxhcjtcbnZhciBudGhSb290cyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU50aFJvb3RzKSh7XG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm50aFJvb3RzID0gbnRoUm9vdHM7XG52YXIgbHNvbHZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTHNvbHZlKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5U2NhbGFyOiBtdWx0aXBseVNjYWxhcixcbiAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5sc29sdmUgPSBsc29sdmU7XG52YXIgZGVlcEVxdWFsID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRGVlcEVxdWFsKSh7XG4gIGVxdWFsOiBlcXVhbCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZGVlcEVxdWFsID0gZGVlcEVxdWFsO1xudmFyIHNldERpZmZlcmVuY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXREaWZmZXJlbmNlKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgSW5kZXg6IEluZGV4LFxuICBjb21wYXJlTmF0dXJhbDogY29tcGFyZU5hdHVyYWwsXG4gIHNpemU6IHNpemUsXG4gIHN1YnNldDogc3Vic2V0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zZXREaWZmZXJlbmNlID0gc2V0RGlmZmVyZW5jZTtcbnZhciBzZXRNdWx0aXBsaWNpdHkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRNdWx0aXBsaWNpdHkpKHtcbiAgSW5kZXg6IEluZGV4LFxuICBjb21wYXJlTmF0dXJhbDogY29tcGFyZU5hdHVyYWwsXG4gIHNpemU6IHNpemUsXG4gIHN1YnNldDogc3Vic2V0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zZXRNdWx0aXBsaWNpdHkgPSBzZXRNdWx0aXBsaWNpdHk7XG52YXIgaHlwb3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVIeXBvdCkoe1xuICBhYnM6IGFicyxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBpc1Bvc2l0aXZlOiBpc1Bvc2l0aXZlLFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHNtYWxsZXI6IHNtYWxsZXIsXG4gIHNxcnQ6IHNxcnQsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmh5cG90ID0gaHlwb3Q7XG52YXIgbHVwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTHVwKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgU3BhOiBTcGEsXG4gIFNwYXJzZU1hdHJpeDogU3BhcnNlTWF0cml4LFxuICBhYnM6IGFicyxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIGxhcmdlcjogbGFyZ2VyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZCxcbiAgdW5hcnlNaW51czogdW5hcnlNaW51c1xufSk7XG5leHBvcnRzLmx1cCA9IGx1cDtcbnZhciBzbHUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTbHUpKHtcbiAgU3BhcnNlTWF0cml4OiBTcGFyc2VNYXRyaXgsXG4gIGFiczogYWJzLFxuICBhZGQ6IGFkZCxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIGxhcmdlcjogbGFyZ2VyLFxuICBsYXJnZXJFcTogbGFyZ2VyRXEsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICB0cmFuc3Bvc2U6IHRyYW5zcG9zZSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2x1ID0gc2x1O1xudmFyIGRldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZURldCkoe1xuICBsdXA6IGx1cCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICB0eXBlZDogdHlwZWQsXG4gIHVuYXJ5TWludXM6IHVuYXJ5TWludXNcbn0pO1xuZXhwb3J0cy5kZXQgPSBkZXQ7XG52YXIgZGlzdGFuY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEaXN0YW5jZSkoe1xuICBhYnM6IGFicyxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHNxcnQ6IHNxcnQsXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB1bmFyeU1pbnVzOiB1bmFyeU1pbnVzXG59KTtcbmV4cG9ydHMuZGlzdGFuY2UgPSBkaXN0YW5jZTtcbnZhciBzdGlybGluZ1MyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3RpcmxpbmdTMikoe1xuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgY29tYmluYXRpb25zOiBjb21iaW5hdGlvbnMsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBmYWN0b3JpYWw6IGZhY3RvcmlhbCxcbiAgaXNJbnRlZ2VyOiBpc0ludGVnZXIsXG4gIGlzTmVnYXRpdmU6IGlzTmVnYXRpdmUsXG4gIGxhcmdlcjogbGFyZ2VyLFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHBvdzogcG93LFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnN0aXJsaW5nUzIgPSBzdGlybGluZ1MyO1xudmFyIGNhdGFsYW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDYXRhbGFuKSh7XG4gIGFkZFNjYWxhcjogYWRkU2NhbGFyLFxuICBjb21iaW5hdGlvbnM6IGNvbWJpbmF0aW9ucyxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIGlzSW50ZWdlcjogaXNJbnRlZ2VyLFxuICBpc05lZ2F0aXZlOiBpc05lZ2F0aXZlLFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNhdGFsYW4gPSBjYXRhbGFuO1xudmFyIHhvciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVhvcikoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy54b3IgPSB4b3I7XG52YXIgcm93ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUm93KSh7XG4gIEluZGV4OiBJbmRleCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHJhbmdlOiByYW5nZSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMucm93ID0gcm93O1xudmFyIGRvdERpdmlkZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZURvdERpdmlkZSkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5kb3REaXZpZGUgPSBkb3REaXZpZGU7XG52YXIgVW5pdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVVuaXRDbGFzcykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgRnJhY3Rpb246IEZyYWN0aW9uLFxuICBhYnM6IGFicyxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIGVxdWFsOiBlcXVhbCxcbiAgZml4OiBmaXgsXG4gIGZvcm1hdDogZm9ybWF0LFxuICBpc051bWVyaWM6IGlzTnVtZXJpYyxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICBudW1iZXI6IG51bWJlcixcbiAgcG93OiBwb3csXG4gIHJvdW5kOiByb3VuZCxcbiAgc3VidHJhY3Q6IHN1YnRyYWN0XG59KTtcbmV4cG9ydHMuVW5pdCA9IFVuaXQ7XG52YXIgY3JlYXRlVW5pdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNyZWF0ZVVuaXQpKHtcbiAgVW5pdDogVW5pdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY3JlYXRlVW5pdCA9IGNyZWF0ZVVuaXQ7XG52YXIgc2V0U3ltRGlmZmVyZW5jZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldFN5bURpZmZlcmVuY2UpKHtcbiAgSW5kZXg6IEluZGV4LFxuICBjb25jYXQ6IGNvbmNhdCxcbiAgc2V0RGlmZmVyZW5jZTogc2V0RGlmZmVyZW5jZSxcbiAgc2l6ZTogc2l6ZSxcbiAgc3Vic2V0OiBzdWJzZXQsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNldFN5bURpZmZlcmVuY2UgPSBzZXRTeW1EaWZmZXJlbmNlO1xudmFyIHFyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUXIpKHtcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGNvbXBsZXg6IGNvbXBsZXgsXG4gIGNvbmo6IGNvbmosXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBlcXVhbDogZXF1YWwsXG4gIGlkZW50aXR5OiBpZGVudGl0eSxcbiAgaXNaZXJvOiBpc1plcm8sXG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHNpZ246IHNpZ24sXG4gIHNxcnQ6IHNxcnQsXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB1bmFyeU1pbnVzOiB1bmFyeU1pbnVzLFxuICB6ZXJvczogemVyb3Ncbn0pO1xuZXhwb3J0cy5xciA9IHFyO1xudmFyIGludiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUludikoe1xuICBhYnM6IGFicyxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGRldDogZGV0LFxuICBkaXZpZGVTY2FsYXI6IGRpdmlkZVNjYWxhcixcbiAgaWRlbnRpdHk6IGlkZW50aXR5LFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICB0eXBlZDogdHlwZWQsXG4gIHVuYXJ5TWludXM6IHVuYXJ5TWludXNcbn0pO1xuZXhwb3J0cy5pbnYgPSBpbnY7XG52YXIgZXhwbSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUV4cG0pKHtcbiAgYWJzOiBhYnMsXG4gIGFkZDogYWRkLFxuICBpZGVudGl0eTogaWRlbnRpdHksXG4gIGludjogaW52LFxuICBtdWx0aXBseTogbXVsdGlwbHksXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmV4cG0gPSBleHBtO1xudmFyIGRpdmlkZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZURpdmlkZSkoe1xuICBkaXZpZGVTY2FsYXI6IGRpdmlkZVNjYWxhcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBpbnY6IGludixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZGl2aWRlID0gZGl2aWRlO1xudmFyIG1lYW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNZWFuKSh7XG4gIGFkZDogYWRkLFxuICBkaXZpZGU6IGRpdmlkZSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubWVhbiA9IG1lYW47XG52YXIgdmFyaWFuY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVWYXJpYW5jZSkoe1xuICBhZGQ6IGFkZCxcbiAgYXBwbHk6IGFwcGx5LFxuICBkaXZpZGU6IGRpdmlkZSxcbiAgaXNOYU46IGlzTmFOLFxuICBtdWx0aXBseTogbXVsdGlwbHksXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMudmFyaWFuY2UgPSB2YXJpYW5jZTtcbnZhciBzdGQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTdGQpKHtcbiAgc3FydDogc3FydCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB2YXJpYW5jZTogdmFyaWFuY2Vcbn0pO1xuZXhwb3J0cy5zdGQgPSBzdGQ7XG52YXIgbXVsdGlub21pYWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNdWx0aW5vbWlhbCkoe1xuICBhZGQ6IGFkZCxcbiAgZGl2aWRlOiBkaXZpZGUsXG4gIGZhY3RvcmlhbDogZmFjdG9yaWFsLFxuICBpc0ludGVnZXI6IGlzSW50ZWdlcixcbiAgaXNQb3NpdGl2ZTogaXNQb3NpdGl2ZSxcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5tdWx0aW5vbWlhbCA9IG11bHRpbm9taWFsO1xudmFyIGF0b21pY01hc3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBdG9taWNNYXNzKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5hdG9taWNNYXNzID0gYXRvbWljTWFzcztcbnZhciBib2hyTWFnbmV0b24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVCb2hyTWFnbmV0b24pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmJvaHJNYWduZXRvbiA9IGJvaHJNYWduZXRvbjtcbnZhciBib2x0em1hbm4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVCb2x0em1hbm4pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmJvbHR6bWFubiA9IGJvbHR6bWFubjtcbnZhciBjb25kdWN0YW5jZVF1YW50dW0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25kdWN0YW5jZVF1YW50dW0pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmNvbmR1Y3RhbmNlUXVhbnR1bSA9IGNvbmR1Y3RhbmNlUXVhbnR1bTtcbnZhciBkZXV0ZXJvbk1hc3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEZXV0ZXJvbk1hc3MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmRldXRlcm9uTWFzcyA9IGRldXRlcm9uTWFzcztcbnZhciBlbGVjdHJvbk1hc3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFbGVjdHJvbk1hc3MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmVsZWN0cm9uTWFzcyA9IGVsZWN0cm9uTWFzcztcbnZhciBmYXJhZGF5ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRmFyYWRheSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuZmFyYWRheSA9IGZhcmFkYXk7XG52YXIgZmlyc3RSYWRpYXRpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGaXJzdFJhZGlhdGlvbikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuZmlyc3RSYWRpYXRpb24gPSBmaXJzdFJhZGlhdGlvbjtcbnZhciBncmF2aXRhdGlvbkNvbnN0YW50ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlR3Jhdml0YXRpb25Db25zdGFudCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuZ3Jhdml0YXRpb25Db25zdGFudCA9IGdyYXZpdGF0aW9uQ29uc3RhbnQ7XG52YXIgaGFydHJlZUVuZXJneSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUhhcnRyZWVFbmVyZ3kpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmhhcnRyZWVFbmVyZ3kgPSBoYXJ0cmVlRW5lcmd5O1xudmFyIGtsaXR6aW5nID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlS2xpdHppbmcpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmtsaXR6aW5nID0ga2xpdHppbmc7XG52YXIgbWFnbmV0aWNDb25zdGFudCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1hZ25ldGljQ29uc3RhbnQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLm1hZ25ldGljQ29uc3RhbnQgPSBtYWduZXRpY0NvbnN0YW50O1xudmFyIG1vbGFyTWFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vbGFyTWFzcykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMubW9sYXJNYXNzID0gbW9sYXJNYXNzO1xudmFyIG1vbGFyUGxhbmNrQ29uc3RhbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNb2xhclBsYW5ja0NvbnN0YW50KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5tb2xhclBsYW5ja0NvbnN0YW50ID0gbW9sYXJQbGFuY2tDb25zdGFudDtcbnZhciBuZXV0cm9uTWFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU5ldXRyb25NYXNzKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5uZXV0cm9uTWFzcyA9IG5ldXRyb25NYXNzO1xudmFyIHBsYW5ja0NoYXJnZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBsYW5ja0NoYXJnZSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMucGxhbmNrQ2hhcmdlID0gcGxhbmNrQ2hhcmdlO1xudmFyIHBsYW5ja0xlbmd0aCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBsYW5ja0xlbmd0aCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMucGxhbmNrTGVuZ3RoID0gcGxhbmNrTGVuZ3RoO1xudmFyIHBsYW5ja1RlbXBlcmF0dXJlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUGxhbmNrVGVtcGVyYXR1cmUpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnBsYW5ja1RlbXBlcmF0dXJlID0gcGxhbmNrVGVtcGVyYXR1cmU7XG52YXIgcHJvdG9uTWFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVByb3Rvbk1hc3MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnByb3Rvbk1hc3MgPSBwcm90b25NYXNzO1xudmFyIHJlZHVjZWRQbGFuY2tDb25zdGFudCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlZHVjZWRQbGFuY2tDb25zdGFudCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMucmVkdWNlZFBsYW5ja0NvbnN0YW50ID0gcmVkdWNlZFBsYW5ja0NvbnN0YW50O1xudmFyIHNlY29uZFJhZGlhdGlvbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNlY29uZFJhZGlhdGlvbikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuc2Vjb25kUmFkaWF0aW9uID0gc2Vjb25kUmFkaWF0aW9uO1xudmFyIHN0ZWZhbkJvbHR6bWFubiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVN0ZWZhbkJvbHR6bWFubikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuc3RlZmFuQm9sdHptYW5uID0gc3RlZmFuQm9sdHptYW5uO1xudmFyIHZhY3V1bUltcGVkYW5jZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVZhY3V1bUltcGVkYW5jZSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMudmFjdXVtSW1wZWRhbmNlID0gdmFjdXVtSW1wZWRhbmNlO1xudmFyIGNvbHVtbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbHVtbikoe1xuICBJbmRleDogSW5kZXgsXG4gIG1hdHJpeDogbWF0cml4LFxuICByYW5nZTogcmFuZ2UsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvbHVtbiA9IGNvbHVtbjtcbnZhciB1c29sdmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVVc29sdmUpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBkaXZpZGVTY2FsYXI6IGRpdmlkZVNjYWxhcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnVzb2x2ZSA9IHVzb2x2ZTtcbnZhciBzZXRJbnRlcnNlY3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRJbnRlcnNlY3QpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBJbmRleDogSW5kZXgsXG4gIGNvbXBhcmVOYXR1cmFsOiBjb21wYXJlTmF0dXJhbCxcbiAgc2l6ZTogc2l6ZSxcbiAgc3Vic2V0OiBzdWJzZXQsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNldEludGVyc2VjdCA9IHNldEludGVyc2VjdDtcbnZhciBsdXNvbHZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTHVzb2x2ZSkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGxzb2x2ZTogbHNvbHZlLFxuICBsdXA6IGx1cCxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHNsdTogc2x1LFxuICB0eXBlZDogdHlwZWQsXG4gIHVzb2x2ZTogdXNvbHZlXG59KTtcbmV4cG9ydHMubHVzb2x2ZSA9IGx1c29sdmU7XG52YXIgZWlncyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUVpZ3MpKHtcbiAgYWJzOiBhYnMsXG4gIGFkZDogYWRkLFxuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgYXRhbjogYXRhbixcbiAgYmlnbnVtYmVyOiBiaWdudW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgY29zOiBjb3MsXG4gIGVxdWFsOiBlcXVhbCxcbiAgaW52OiBpbnYsXG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseTogbXVsdGlwbHksXG4gIG11bHRpcGx5U2NhbGFyOiBtdWx0aXBseVNjYWxhcixcbiAgc2luOiBzaW4sXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZWlncyA9IGVpZ3M7XG52YXIgaW50ZXJzZWN0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSW50ZXJzZWN0KSh7XG4gIGFiczogYWJzLFxuICBhZGQ6IGFkZCxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICBzbWFsbGVyOiBzbWFsbGVyLFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmludGVyc2VjdCA9IGludGVyc2VjdDtcbnZhciBiZWxsTnVtYmVycyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUJlbGxOdW1iZXJzKSh7XG4gIGFkZFNjYWxhcjogYWRkU2NhbGFyLFxuICBpc0ludGVnZXI6IGlzSW50ZWdlcixcbiAgaXNOZWdhdGl2ZTogaXNOZWdhdGl2ZSxcbiAgc3RpcmxpbmdTMjogc3RpcmxpbmdTMixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYmVsbE51bWJlcnMgPSBiZWxsTnVtYmVycztcbnZhciBhdm9nYWRybyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUF2b2dhZHJvKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5hdm9nYWRybyA9IGF2b2dhZHJvO1xudmFyIGNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2xhc3NpY2FsRWxlY3Ryb25SYWRpdXMpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzID0gY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXM7XG52YXIgZWxlY3RyaWNDb25zdGFudCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUVsZWN0cmljQ29uc3RhbnQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmVsZWN0cmljQ29uc3RhbnQgPSBlbGVjdHJpY0NvbnN0YW50O1xudmFyIGZlcm1pQ291cGxpbmcgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGZXJtaUNvdXBsaW5nKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5mZXJtaUNvdXBsaW5nID0gZmVybWlDb3VwbGluZztcbnZhciBncmF2aXR5ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlR3Jhdml0eSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuZ3Jhdml0eSA9IGdyYXZpdHk7XG52YXIgbG9zY2htaWR0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTG9zY2htaWR0KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5sb3NjaG1pZHQgPSBsb3NjaG1pZHQ7XG52YXIgbW9sYXJNYXNzQzEyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTW9sYXJNYXNzQzEyKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5tb2xhck1hc3NDMTIgPSBtb2xhck1hc3NDMTI7XG52YXIgbnVjbGVhck1hZ25ldG9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTnVjbGVhck1hZ25ldG9uKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5udWNsZWFyTWFnbmV0b24gPSBudWNsZWFyTWFnbmV0b247XG52YXIgcGxhbmNrTWFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBsYW5ja01hc3MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnBsYW5ja01hc3MgPSBwbGFuY2tNYXNzO1xudmFyIHF1YW50dW1PZkNpcmN1bGF0aW9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUXVhbnR1bU9mQ2lyY3VsYXRpb24pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnF1YW50dW1PZkNpcmN1bGF0aW9uID0gcXVhbnR1bU9mQ2lyY3VsYXRpb247XG52YXIgc3BlZWRPZkxpZ2h0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3BlZWRPZkxpZ2h0KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5zcGVlZE9mTGlnaHQgPSBzcGVlZE9mTGlnaHQ7XG52YXIgd2llbkRpc3BsYWNlbWVudCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVdpZW5EaXNwbGFjZW1lbnQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLndpZW5EaXNwbGFjZW1lbnQgPSB3aWVuRGlzcGxhY2VtZW50O1xudmFyIGxvZyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxvZykoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5sb2cgPSBsb2c7XG52YXIgdW5pdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVVuaXRGdW5jdGlvbikoe1xuICBVbml0OiBVbml0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy51bml0ID0gdW5pdDtcbnZhciBzcXJ0bSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNxcnRtKSh7XG4gIGFiczogYWJzLFxuICBhZGQ6IGFkZCxcbiAgaWRlbnRpdHk6IGlkZW50aXR5LFxuICBpbnY6IGludixcbiAgbWF4OiBtYXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgc2l6ZTogc2l6ZSxcbiAgc3FydDogc3FydCxcbiAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zcXJ0bSA9IHNxcnRtO1xudmFyIGtsZGl2ZXJnZW5jZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUtsZGl2ZXJnZW5jZSkoe1xuICBkaXZpZGU6IGRpdmlkZSxcbiAgZG90RGl2aWRlOiBkb3REaXZpZGUsXG4gIGlzTnVtZXJpYzogaXNOdW1lcmljLFxuICBsb2c6IGxvZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgc3VtOiBzdW0sXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmtsZGl2ZXJnZW5jZSA9IGtsZGl2ZXJnZW5jZTtcbnZhciBib2hyUmFkaXVzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQm9oclJhZGl1cykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuYm9oclJhZGl1cyA9IGJvaHJSYWRpdXM7XG52YXIgZWxlbWVudGFyeUNoYXJnZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUVsZW1lbnRhcnlDaGFyZ2UpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmVsZW1lbnRhcnlDaGFyZ2UgPSBlbGVtZW50YXJ5Q2hhcmdlO1xudmFyIGludmVyc2VDb25kdWN0YW5jZVF1YW50dW0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5pbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtID0gaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bTtcbnZhciBtb2xhclZvbHVtZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vbGFyVm9sdW1lKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5tb2xhclZvbHVtZSA9IG1vbGFyVm9sdW1lO1xudmFyIHBsYW5ja1RpbWUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQbGFuY2tUaW1lKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5wbGFuY2tUaW1lID0gcGxhbmNrVGltZTtcbnZhciB0aG9tc29uQ3Jvc3NTZWN0aW9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVGhvbXNvbkNyb3NzU2VjdGlvbikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMudGhvbXNvbkNyb3NzU2VjdGlvbiA9IHRob21zb25Dcm9zc1NlY3Rpb247XG52YXIgbG9nMXAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVMb2cxcCkoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBsb2c6IGxvZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubG9nMXAgPSBsb2cxcDtcbnZhciBtZWRpYW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNZWRpYW4pKHtcbiAgYWRkOiBhZGQsXG4gIGNvbXBhcmU6IGNvbXBhcmUsXG4gIGRpdmlkZTogZGl2aWRlLFxuICBwYXJ0aXRpb25TZWxlY3Q6IHBhcnRpdGlvblNlbGVjdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubWVkaWFuID0gbWVkaWFuO1xudmFyIGdhc0NvbnN0YW50ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlR2FzQ29uc3RhbnQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmdhc0NvbnN0YW50ID0gZ2FzQ29uc3RhbnQ7XG52YXIgcGxhbmNrQ29uc3RhbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQbGFuY2tDb25zdGFudCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMucGxhbmNrQ29uc3RhbnQgPSBwbGFuY2tDb25zdGFudDtcbnZhciBzZXRVbmlvbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldFVuaW9uKSh7XG4gIEluZGV4OiBJbmRleCxcbiAgY29uY2F0OiBjb25jYXQsXG4gIHNldEludGVyc2VjdDogc2V0SW50ZXJzZWN0LFxuICBzZXRTeW1EaWZmZXJlbmNlOiBzZXRTeW1EaWZmZXJlbmNlLFxuICBzaXplOiBzaXplLFxuICBzdWJzZXQ6IHN1YnNldCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2V0VW5pb24gPSBzZXRVbmlvbjtcbnZhciBtYWduZXRpY0ZsdXhRdWFudHVtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWFnbmV0aWNGbHV4UXVhbnR1bSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMubWFnbmV0aWNGbHV4UXVhbnR1bSA9IG1hZ25ldGljRmx1eFF1YW50dW07XG52YXIgY291bG9tYiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvdWxvbWIpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmNvdWxvbWIgPSBjb3Vsb21iO1xudmFyIG1hZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1hZCkoe1xuICBhYnM6IGFicyxcbiAgbWFwOiBtYXAsXG4gIG1lZGlhbjogbWVkaWFuLFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm1hZCA9IG1hZDtcbnZhciByeWRiZXJnID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUnlkYmVyZykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMucnlkYmVyZyA9IHJ5ZGJlcmc7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0FjY2Vzc29yTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNBY2Nlc3Nvck5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNBcnJheVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNBcnJheTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0FycmF5Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNBcnJheU5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNBc3NpZ25tZW50Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNBc3NpZ25tZW50Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0JpZ051bWJlclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNCaWdOdW1iZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNCbG9ja05vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzQmxvY2tOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzQm9vbGVhblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNCb29sZWFuO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzQ2hhaW5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzQ2hhaW47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNDb2xsZWN0aW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0NvbGxlY3Rpb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNDb21wbGV4XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0NvbXBsZXg7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNDb25kaXRpb25hbE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzQ29uZGl0aW9uYWxOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzQ29uc3RhbnROb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0NvbnN0YW50Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0RhdGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzRGF0ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0RlbnNlTWF0cml4XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0RlbnNlTWF0cml4O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzRnJhY3Rpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzRnJhY3Rpb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNGdW5jdGlvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNGdW5jdGlvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0Z1bmN0aW9uQXNzaWdubWVudE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0Z1bmN0aW9uTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNGdW5jdGlvbk5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNIZWxwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0hlbHA7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNJbmRleFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNJbmRleDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0luZGV4Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNJbmRleE5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNNYXRyaXhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzTWF0cml4O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTnVsbFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNOdWxsO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTnVtYmVyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc051bWJlcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1N0cmluZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNTdHJpbmc7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNVbmRlZmluZWRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzVW5kZWZpbmVkO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzT2JqZWN0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc09iamVjdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc09iamVjdE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzT2JqZWN0Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc09wZXJhdG9yTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNPcGVyYXRvck5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNQYXJlbnRoZXNpc05vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzUGFyZW50aGVzaXNOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUmFuZ2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzUmFuZ2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNSYW5nZU5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzUmFuZ2VOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUmVnRXhwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc1JlZ0V4cDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1Jlc3VsdFNldFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNSZXN1bHRTZXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNTcGFyc2VNYXRyaXhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzU3BhcnNlTWF0cml4O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzU3ltYm9sTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNTeW1ib2xOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzVW5pdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNVbml0O1xuICB9XG59KTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi91dGlscy9pc1wiKTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQXJndW1lbnRzRXJyb3IgPSBBcmd1bWVudHNFcnJvcjtcblxuLyoqXG4gKiBDcmVhdGUgYSBzeW50YXggZXJyb3Igd2l0aCB0aGUgbWVzc2FnZTpcbiAqICAgICAnV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBpbiBmdW5jdGlvbiA8Zm4+ICg8Y291bnQ+IHByb3ZpZGVkLCA8bWluPi08bWF4PiBleHBlY3RlZCknXG4gKiBAcGFyYW0ge3N0cmluZ30gZm4gICAgIEZ1bmN0aW9uIG5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudCAgQWN0dWFsIGFyZ3VtZW50IGNvdW50XG4gKiBAcGFyYW0ge251bWJlcn0gbWluICAgIE1pbmltdW0gcmVxdWlyZWQgYXJndW1lbnQgY291bnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4XSAgTWF4aW11bSByZXF1aXJlZCBhcmd1bWVudCBjb3VudFxuICogQGV4dGVuZHMgRXJyb3JcbiAqL1xuZnVuY3Rpb24gQXJndW1lbnRzRXJyb3IoZm4sIGNvdW50LCBtaW4sIG1heCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQXJndW1lbnRzRXJyb3IpKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgfVxuXG4gIHRoaXMuZm4gPSBmbjtcbiAgdGhpcy5jb3VudCA9IGNvdW50O1xuICB0aGlzLm1pbiA9IG1pbjtcbiAgdGhpcy5tYXggPSBtYXg7XG4gIHRoaXMubWVzc2FnZSA9ICdXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGluIGZ1bmN0aW9uICcgKyBmbiArICcgKCcgKyBjb3VudCArICcgcHJvdmlkZWQsICcgKyBtaW4gKyAobWF4ICE9PSB1bmRlZmluZWQgJiYgbWF4ICE9PSBudWxsID8gJy0nICsgbWF4IDogJycpICsgJyBleHBlY3RlZCknO1xuICB0aGlzLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG59XG5cbkFyZ3VtZW50c0Vycm9yLnByb3RvdHlwZSA9IG5ldyBFcnJvcigpO1xuQXJndW1lbnRzRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRXJyb3I7XG5Bcmd1bWVudHNFcnJvci5wcm90b3R5cGUubmFtZSA9ICdBcmd1bWVudHNFcnJvcic7XG5Bcmd1bWVudHNFcnJvci5wcm90b3R5cGUuaXNBcmd1bWVudHNFcnJvciA9IHRydWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkRpbWVuc2lvbkVycm9yID0gRGltZW5zaW9uRXJyb3I7XG5cbi8qKlxuICogQ3JlYXRlIGEgcmFuZ2UgZXJyb3Igd2l0aCB0aGUgbWVzc2FnZTpcbiAqICAgICAnRGltZW5zaW9uIG1pc21hdGNoICg8YWN0dWFsIHNpemU+ICE9IDxleHBlY3RlZCBzaXplPiknXG4gKiBAcGFyYW0ge251bWJlciB8IG51bWJlcltdfSBhY3R1YWwgICAgICAgIFRoZSBhY3R1YWwgc2l6ZVxuICogQHBhcmFtIHtudW1iZXIgfCBudW1iZXJbXX0gZXhwZWN0ZWQgICAgICBUaGUgZXhwZWN0ZWQgc2l6ZVxuICogQHBhcmFtIHtzdHJpbmd9IFtyZWxhdGlvbj0nIT0nXSAgICAgICAgICBPcHRpb25hbCByZWxhdGlvbiBiZXR3ZWVuIGFjdHVhbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgZXhwZWN0ZWQgc2l6ZTogJyE9JywgJzwnLCBldGMuXG4gKiBAZXh0ZW5kcyBSYW5nZUVycm9yXG4gKi9cbmZ1bmN0aW9uIERpbWVuc2lvbkVycm9yKGFjdHVhbCwgZXhwZWN0ZWQsIHJlbGF0aW9uKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEaW1lbnNpb25FcnJvcikpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICB9XG5cbiAgdGhpcy5hY3R1YWwgPSBhY3R1YWw7XG4gIHRoaXMuZXhwZWN0ZWQgPSBleHBlY3RlZDtcbiAgdGhpcy5yZWxhdGlvbiA9IHJlbGF0aW9uO1xuICB0aGlzLm1lc3NhZ2UgPSAnRGltZW5zaW9uIG1pc21hdGNoICgnICsgKEFycmF5LmlzQXJyYXkoYWN0dWFsKSA/ICdbJyArIGFjdHVhbC5qb2luKCcsICcpICsgJ10nIDogYWN0dWFsKSArICcgJyArICh0aGlzLnJlbGF0aW9uIHx8ICchPScpICsgJyAnICsgKEFycmF5LmlzQXJyYXkoZXhwZWN0ZWQpID8gJ1snICsgZXhwZWN0ZWQuam9pbignLCAnKSArICddJyA6IGV4cGVjdGVkKSArICcpJztcbiAgdGhpcy5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xufVxuXG5EaW1lbnNpb25FcnJvci5wcm90b3R5cGUgPSBuZXcgUmFuZ2VFcnJvcigpO1xuRGltZW5zaW9uRXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmFuZ2VFcnJvcjtcbkRpbWVuc2lvbkVycm9yLnByb3RvdHlwZS5uYW1lID0gJ0RpbWVuc2lvbkVycm9yJztcbkRpbWVuc2lvbkVycm9yLnByb3RvdHlwZS5pc0RpbWVuc2lvbkVycm9yID0gdHJ1ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuSW5kZXhFcnJvciA9IEluZGV4RXJyb3I7XG5cbi8qKlxuICogQ3JlYXRlIGEgcmFuZ2UgZXJyb3Igd2l0aCB0aGUgbWVzc2FnZTpcbiAqICAgICAnSW5kZXggb3V0IG9mIHJhbmdlIChpbmRleCA8IG1pbiknXG4gKiAgICAgJ0luZGV4IG91dCBvZiByYW5nZSAoaW5kZXggPCBtYXgpJ1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAgICAgVGhlIGFjdHVhbCBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IFttaW49MF0gICBNaW5pbXVtIGluZGV4IChpbmNsdWRlZClcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbWF4XSAgICAgTWF4aW11bSBpbmRleCAoZXhjbHVkZWQpXG4gKiBAZXh0ZW5kcyBSYW5nZUVycm9yXG4gKi9cbmZ1bmN0aW9uIEluZGV4RXJyb3IoaW5kZXgsIG1pbiwgbWF4KSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBJbmRleEVycm9yKSkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gIH1cblxuICB0aGlzLmluZGV4ID0gaW5kZXg7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAzKSB7XG4gICAgdGhpcy5taW4gPSAwO1xuICAgIHRoaXMubWF4ID0gbWluO1xuICB9IGVsc2Uge1xuICAgIHRoaXMubWluID0gbWluO1xuICAgIHRoaXMubWF4ID0gbWF4O1xuICB9XG5cbiAgaWYgKHRoaXMubWluICE9PSB1bmRlZmluZWQgJiYgdGhpcy5pbmRleCA8IHRoaXMubWluKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gJ0luZGV4IG91dCBvZiByYW5nZSAoJyArIHRoaXMuaW5kZXggKyAnIDwgJyArIHRoaXMubWluICsgJyknO1xuICB9IGVsc2UgaWYgKHRoaXMubWF4ICE9PSB1bmRlZmluZWQgJiYgdGhpcy5pbmRleCA+PSB0aGlzLm1heCkge1xuICAgIHRoaXMubWVzc2FnZSA9ICdJbmRleCBvdXQgb2YgcmFuZ2UgKCcgKyB0aGlzLmluZGV4ICsgJyA+ICcgKyAodGhpcy5tYXggLSAxKSArICcpJztcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSAnSW5kZXggb3V0IG9mIHJhbmdlICgnICsgdGhpcy5pbmRleCArICcpJztcbiAgfVxuXG4gIHRoaXMuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbn1cblxuSW5kZXhFcnJvci5wcm90b3R5cGUgPSBuZXcgUmFuZ2VFcnJvcigpO1xuSW5kZXhFcnJvci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSYW5nZUVycm9yO1xuSW5kZXhFcnJvci5wcm90b3R5cGUubmFtZSA9ICdJbmRleEVycm9yJztcbkluZGV4RXJyb3IucHJvdG90eXBlLmlzSW5kZXhFcnJvciA9IHRydWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUhlbHBDbGFzcyA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi91dGlscy9pc1wiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdIZWxwJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3BhcnNlJ107XG52YXIgY3JlYXRlSGVscENsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHBhcnNlID0gX3JlZi5wYXJzZTtcblxuICAvKipcbiAgICogRG9jdW1lbnRhdGlvbiBvYmplY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IGRvYyAgT2JqZWN0IGNvbnRhaW5pbmcgcHJvcGVydGllczpcbiAgICogICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gbmFtZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBjYXRlZ29yeVxuICAgKiAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBkZXNjcmlwdGlvblxuICAgKiAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nW119IHN5bnRheFxuICAgKiAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nW119IGV4YW1wbGVzXG4gICAqICAgICAgICAgICAgICAgICAgICAgIHtzdHJpbmdbXX0gc2VlYWxzb1xuICAgKiBAY29uc3RydWN0b3JcbiAgICovXG4gIGZ1bmN0aW9uIEhlbHAoZG9jKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEhlbHApKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIGlmICghZG9jKSB0aHJvdyBuZXcgRXJyb3IoJ0FyZ3VtZW50IFwiZG9jXCIgbWlzc2luZycpO1xuICAgIHRoaXMuZG9jID0gZG9jO1xuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIEhlbHAucHJvdG90eXBlLnR5cGUgPSAnSGVscCc7XG4gIEhlbHAucHJvdG90eXBlLmlzSGVscCA9IHRydWU7XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgSGVscCBvYmplY3RcbiAgICogQHJldHVybiB7c3RyaW5nfSBSZXR1cm5zIGEgc3RyaW5nXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIEhlbHAucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBkb2MgPSB0aGlzLmRvYyB8fCB7fTtcbiAgICB2YXIgZGVzYyA9ICdcXG4nO1xuXG4gICAgaWYgKGRvYy5uYW1lKSB7XG4gICAgICBkZXNjICs9ICdOYW1lOiAnICsgZG9jLm5hbWUgKyAnXFxuXFxuJztcbiAgICB9XG5cbiAgICBpZiAoZG9jLmNhdGVnb3J5KSB7XG4gICAgICBkZXNjICs9ICdDYXRlZ29yeTogJyArIGRvYy5jYXRlZ29yeSArICdcXG5cXG4nO1xuICAgIH1cblxuICAgIGlmIChkb2MuZGVzY3JpcHRpb24pIHtcbiAgICAgIGRlc2MgKz0gJ0Rlc2NyaXB0aW9uOlxcbiAgICAnICsgZG9jLmRlc2NyaXB0aW9uICsgJ1xcblxcbic7XG4gICAgfVxuXG4gICAgaWYgKGRvYy5zeW50YXgpIHtcbiAgICAgIGRlc2MgKz0gJ1N5bnRheDpcXG4gICAgJyArIGRvYy5zeW50YXguam9pbignXFxuICAgICcpICsgJ1xcblxcbic7XG4gICAgfVxuXG4gICAgaWYgKGRvYy5leGFtcGxlcykge1xuICAgICAgZGVzYyArPSAnRXhhbXBsZXM6XFxuJztcbiAgICAgIHZhciBzY29wZSA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRvYy5leGFtcGxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZXhwciA9IGRvYy5leGFtcGxlc1tpXTtcbiAgICAgICAgZGVzYyArPSAnICAgICcgKyBleHByICsgJ1xcbic7XG4gICAgICAgIHZhciByZXMgPSB2b2lkIDA7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBub3RlOiByZXMgY2FuIGJlIHVuZGVmaW5lZCB3aGVuIGBleHByYCBpcyBhbiBlbXB0eSBzdHJpbmdcbiAgICAgICAgICByZXMgPSBwYXJzZShleHByKS5jb21waWxlKCkuZXZhbHVhdGUoc2NvcGUpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgcmVzID0gZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCAmJiAhKDAsIF9pcy5pc0hlbHApKHJlcykpIHtcbiAgICAgICAgICBkZXNjICs9ICcgICAgICAgICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHJlcywge1xuICAgICAgICAgICAgcHJlY2lzaW9uOiAxNFxuICAgICAgICAgIH0pICsgJ1xcbic7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZGVzYyArPSAnXFxuJztcbiAgICB9XG5cbiAgICBpZiAoZG9jLnNlZWFsc28gJiYgZG9jLnNlZWFsc28ubGVuZ3RoKSB7XG4gICAgICBkZXNjICs9ICdTZWUgYWxzbzogJyArIGRvYy5zZWVhbHNvLmpvaW4oJywgJykgKyAnXFxuJztcbiAgICB9XG5cbiAgICByZXR1cm4gZGVzYztcbiAgfTtcbiAgLyoqXG4gICAqIEV4cG9ydCB0aGUgaGVscCBvYmplY3QgdG8gSlNPTlxuICAgKi9cblxuXG4gIEhlbHAucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgb2JqID0gKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuZG9jKTtcbiAgICBvYmoubWF0aGpzID0gJ0hlbHAnO1xuICAgIHJldHVybiBvYmo7XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhIEhlbHAgb2JqZWN0IGZyb20gYSBKU09OIG9iamVjdFxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvblxuICAgKiBAcmV0dXJucyB7SGVscH0gUmV0dXJucyBhIG5ldyBIZWxwIG9iamVjdFxuICAgKi9cblxuXG4gIEhlbHAuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHZhciBkb2MgPSB7fTtcblxuICAgIGZvciAodmFyIHByb3AgaW4ganNvbikge1xuICAgICAgaWYgKHByb3AgIT09ICdtYXRoanMnKSB7XG4gICAgICAgIC8vIGlnbm9yZSBtYXRoanMgZmllbGRcbiAgICAgICAgZG9jW3Byb3BdID0ganNvbltwcm9wXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEhlbHAoZG9jKTtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIEhlbHAgb2JqZWN0XG4gICAqL1xuXG5cbiAgSGVscC5wcm90b3R5cGUudmFsdWVPZiA9IEhlbHAucHJvdG90eXBlLnRvU3RyaW5nO1xuICByZXR1cm4gSGVscDtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUhlbHBDbGFzcyA9IGNyZWF0ZUhlbHBDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUGFyc2VyQ2xhc3MgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX2xvZyA9IHJlcXVpcmUoXCIuLi91dGlscy9sb2dcIik7XG5cbnZhciBuYW1lID0gJ1BhcnNlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWydwYXJzZSddO1xudmFyIGNyZWF0ZVBhcnNlckNsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHBhcnNlID0gX3JlZi5wYXJzZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIFBhcnNlclxuICAgKiBQYXJzZXIgY29udGFpbnMgbWV0aG9kcyB0byBldmFsdWF0ZSBvciBwYXJzZSBleHByZXNzaW9ucywgYW5kIGhhcyBhIG51bWJlclxuICAgKiBvZiBjb252ZW5pZW5jZSBtZXRob2RzIHRvIGdldCwgc2V0LCBhbmQgcmVtb3ZlIHZhcmlhYmxlcyBmcm9tIG1lbW9yeS4gUGFyc2VyXG4gICAqIGtlZXBzIGEgc2NvcGUgY29udGFpbmluZyB2YXJpYWJsZXMgaW4gbWVtb3J5LCB3aGljaCBpcyB1c2VkIGZvciBhbGxcbiAgICogZXZhbHVhdGlvbnMuXG4gICAqXG4gICAqIE1ldGhvZHM6XG4gICAqICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlci5ldmFsdWF0ZShleHByKSAgLy8gZXZhbHVhdGUgYW4gZXhwcmVzc2lvblxuICAgKiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlci5nZXQobmFtZSkgICAgICAgIC8vIHJldHJpZXZlIGEgdmFyaWFibGUgZnJvbSB0aGUgcGFyc2VyXG4gICAqICAgIGNvbnN0IHZhbHVlcyA9IHBhcnNlci5nZXRBbGwoKSAgICAgICAgLy8gcmV0cmlldmUgYWxsIGRlZmluZWQgdmFyaWFibGVzXG4gICAqICAgIHBhcnNlci5zZXQobmFtZSwgdmFsdWUpICAgICAgICAgICAgICAgLy8gc2V0IGEgdmFyaWFibGUgaW4gdGhlIHBhcnNlclxuICAgKiAgICBwYXJzZXIucmVtb3ZlKG5hbWUpICAgICAgICAgICAgICAgICAgIC8vIGNsZWFyIGEgdmFyaWFibGUgZnJvbSB0aGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwYXJzZXJzIHNjb3BlXG4gICAqICAgIHBhcnNlci5jbGVhcigpICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2xlYXIgdGhlIHBhcnNlcnMgc2NvcGVcbiAgICpcbiAgICogRXhhbXBsZSB1c2FnZTpcbiAgICogICAgY29uc3QgcGFyc2VyID0gbmV3IFBhcnNlcigpXG4gICAqICAgIC8vIE5vdGU6IHRoZXJlIGlzIGEgY29udmVuaWVuY2UgbWV0aG9kIHdoaWNoIGNhbiBiZSB1c2VkIGluc3RlYWQ6XG4gICAqICAgIC8vIGNvbnN0IHBhcnNlciA9IG5ldyBtYXRoLnBhcnNlcigpXG4gICAqXG4gICAqICAgIC8vIGV2YWx1YXRlIGV4cHJlc3Npb25zXG4gICAqICAgIHBhcnNlci5ldmFsdWF0ZSgnc3FydCgzXjIgKyA0XjIpJykgICAgICAgIC8vIDVcbiAgICogICAgcGFyc2VyLmV2YWx1YXRlKCdzcXJ0KC00KScpICAgICAgICAgICAgICAgLy8gMmlcbiAgICogICAgcGFyc2VyLmV2YWx1YXRlKCcyIGluY2ggaW4gY20nKSAgICAgICAgICAgLy8gNS4wOCBjbVxuICAgKiAgICBwYXJzZXIuZXZhbHVhdGUoJ2Nvcyg0NSBkZWcpJykgICAgICAgICAgICAvLyAwLjcwNzEwNjc4MTE4NjU0NzZcbiAgICpcbiAgICogICAgLy8gZGVmaW5lIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zXG4gICAqICAgIHBhcnNlci5ldmFsdWF0ZSgneCA9IDcgLyAyJykgICAgICAgICAgICAgIC8vIDMuNVxuICAgKiAgICBwYXJzZXIuZXZhbHVhdGUoJ3ggKyAzJykgICAgICAgICAgICAgICAgICAvLyA2LjVcbiAgICogICAgcGFyc2VyLmV2YWx1YXRlKCdmdW5jdGlvbiBmKHgsIHkpID0geF55JykgLy8gZih4LCB5KVxuICAgKiAgICBwYXJzZXIuZXZhbHVhdGUoJ2YoMiwgMyknKSAgICAgICAgICAgICAgICAvLyA4XG4gICAqXG4gICAqICAgIC8vIGdldCBhbmQgc2V0IHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zXG4gICAqICAgIGNvbnN0IHggPSBwYXJzZXIuZ2V0KCd4JykgICAgICAgICAgICAgICAgIC8vIDdcbiAgICogICAgY29uc3QgZiA9IHBhcnNlci5nZXQoJ2YnKSAgICAgICAgICAgICAgICAgLy8gZnVuY3Rpb25cbiAgICogICAgY29uc3QgZyA9IGYoMywgMikgICAgICAgICAgICAgICAgICAgICAgICAgLy8gOVxuICAgKiAgICBwYXJzZXIuc2V0KCdoJywgNTAwKVxuICAgKiAgICBjb25zdCBpID0gcGFyc2VyLmV2YWx1YXRlKCdoIC8gMicpICAgICAgICAvLyAyNTBcbiAgICogICAgcGFyc2VyLnNldCgnaGVsbG8nLCBmdW5jdGlvbiAobmFtZSkge1xuICAgKiAgICAgICAgcmV0dXJuICdoZWxsbywgJyArIG5hbWUgKyAnISdcbiAgICogICAgfSlcbiAgICogICAgcGFyc2VyLmV2YWx1YXRlKCdoZWxsbyhcInVzZXJcIiknKSAgICAgICAgICAvLyBcImhlbGxvLCB1c2VyIVwiXG4gICAqXG4gICAqICAgIC8vIGNsZWFyIGRlZmluZWQgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXNcbiAgICogICAgcGFyc2VyLmNsZWFyKClcbiAgICpcbiAgICovXG4gIGZ1bmN0aW9uIFBhcnNlcigpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUGFyc2VyKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICB0aGlzLnNjb3BlID0ge307XG4gIH1cbiAgLyoqXG4gICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uXG4gICAqL1xuXG5cbiAgUGFyc2VyLnByb3RvdHlwZS50eXBlID0gJ1BhcnNlcic7XG4gIFBhcnNlci5wcm90b3R5cGUuaXNQYXJzZXIgPSB0cnVlO1xuICAvKipcbiAgICogUGFyc2UgYW4gZXhwcmVzc2lvbiBhbmQgcmV0dXJuIHRoZSBwYXJzZWQgZnVuY3Rpb24gbm9kZS5cbiAgICogVGhlIG5vZGUgdHJlZSBjYW4gYmUgY29tcGlsZWQgdmlhIGBjb2RlID0gbm9kZS5jb21waWxlKG1hdGgpYCxcbiAgICogYW5kIHRoZSBjb21waWxlZCBjb2RlIGNhbiBiZSBleGVjdXRlZCBhcyBgY29kZS5ldmFsdWF0ZShbc2NvcGVdKWBcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHJcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAdGhyb3dzIHtFcnJvcn1cbiAgICovXG5cbiAgUGFyc2VyLnByb3RvdHlwZS5wYXJzZSA9IGZ1bmN0aW9uIChleHByKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQYXJzZXIucGFyc2UgaXMgZGVwcmVjYXRlZC4gVXNlIG1hdGgucGFyc2UgaW5zdGVhZC4nKTtcbiAgfTtcbiAgLyoqXG4gICAqIFBhcnNlIGFuZCBjb21waWxlIGFuIGV4cHJlc3Npb24sIHJldHVybiB0aGUgY29tcGlsZWQgamF2YXNjcmlwdCBjb2RlLlxuICAgKiBUaGUgbm9kZSBjYW4gYmUgZXZhbHVhdGVkIHZpYSBjb2RlLmV2YWx1YXRlKFtzY29wZV0pXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHByXG4gICAqIEByZXR1cm4ge3tldmFsdWF0ZTogZnVuY3Rpb259fSBjb2RlXG4gICAqIEB0aHJvd3Mge0Vycm9yfVxuICAgKi9cblxuXG4gIFBhcnNlci5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uIChleHByKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQYXJzZXIuY29tcGlsZSBpcyBkZXByZWNhdGVkLiBVc2UgbWF0aC5jb21waWxlIGluc3RlYWQuJyk7XG4gIH07XG4gIC8qKlxuICAgKiBQYXJzZSBhbmQgZXZhbHVhdGUgdGhlIGdpdmVuIGV4cHJlc3Npb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHIgICBBIHN0cmluZyBjb250YWluaW5nIGFuIGV4cHJlc3Npb24sIGZvciBleGFtcGxlIFwiMiszXCJcbiAgICogQHJldHVybiB7Kn0gcmVzdWx0ICAgICBUaGUgcmVzdWx0LCBvciB1bmRlZmluZWQgd2hlbiB0aGUgZXhwcmVzc2lvbiB3YXMgZW1wdHlcbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqL1xuXG5cbiAgUGFyc2VyLnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uIChleHByKSB7XG4gICAgLy8gVE9ETzogdmFsaWRhdGUgYXJndW1lbnRzXG4gICAgcmV0dXJuIHBhcnNlKGV4cHIpLmNvbXBpbGUoKS5ldmFsdWF0ZSh0aGlzLnNjb3BlKTtcbiAgfTtcbiAgLyoqXG4gICAqIFBhcnNlIGFuZCBldmFsdWF0ZSB0aGUgZ2l2ZW4gZXhwcmVzc2lvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwciAgIEEgc3RyaW5nIGNvbnRhaW5pbmcgYW4gZXhwcmVzc2lvbiwgZm9yIGV4YW1wbGUgXCIyKzNcIlxuICAgKiBAcmV0dXJuIHsqfSByZXN1bHQgICAgIFRoZSByZXN1bHQsIG9yIHVuZGVmaW5lZCB3aGVuIHRoZSBleHByZXNzaW9uIHdhcyBlbXB0eVxuICAgKiBAdGhyb3dzIHtFcnJvcn1cbiAgICovXG4gIC8vIFRPRE86IERlcHJlY2F0ZWQgc2luY2UgdjYuMC4wLiBDbGVhbiB1cCBzb21lIGRheVxuXG5cbiAgUGFyc2VyLnByb3RvdHlwZS5ldmFsID0gZnVuY3Rpb24gKGV4cHIpIHtcbiAgICAoMCwgX2xvZy53YXJuT25jZSkoJ01ldGhvZCBQYXJzZXIuZXZhbCBpcyByZW5hbWVkIHRvIFBhcnNlci5ldmFsdWF0ZS4gUGxlYXNlIHVzZSB0aGUgbmV3IG1ldGhvZCBuYW1lLicpO1xuICAgIHJldHVybiB0aGlzLmV2YWx1YXRlKGV4cHIpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgdmFyaWFibGUgKGEgZnVuY3Rpb24gb3IgdmFyaWFibGUpIGJ5IG5hbWUgZnJvbSB0aGUgcGFyc2VycyBzY29wZS5cbiAgICogUmV0dXJucyB1bmRlZmluZWQgd2hlbiBub3QgZm91bmRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHJldHVybiB7KiB8IHVuZGVmaW5lZH0gdmFsdWVcbiAgICovXG5cblxuICBQYXJzZXIucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgLy8gVE9ETzogdmFsaWRhdGUgYXJndW1lbnRzXG4gICAgcmV0dXJuIG5hbWUgaW4gdGhpcy5zY29wZSA/ICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKHRoaXMuc2NvcGUsIG5hbWUpIDogdW5kZWZpbmVkO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgbWFwIHdpdGggYWxsIGRlZmluZWQgdmFyaWFibGVzXG4gICAqIEByZXR1cm4ge09iamVjdH0gdmFsdWVzXG4gICAqL1xuXG5cbiAgUGFyc2VyLnByb3RvdHlwZS5nZXRBbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICgwLCBfb2JqZWN0LmV4dGVuZCkoe30sIHRoaXMuc2NvcGUpO1xuICB9O1xuICAvKipcbiAgICogU2V0IGEgc3ltYm9sIChhIGZ1bmN0aW9uIG9yIHZhcmlhYmxlKSBieSBuYW1lIGZyb20gdGhlIHBhcnNlcnMgc2NvcGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7KiB8IHVuZGVmaW5lZH0gdmFsdWVcbiAgICovXG5cblxuICBQYXJzZXIucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIC8vIFRPRE86IHZhbGlkYXRlIGFyZ3VtZW50c1xuICAgIHJldHVybiAoMCwgX2N1c3RvbXMuc2V0U2FmZVByb3BlcnR5KSh0aGlzLnNjb3BlLCBuYW1lLCB2YWx1ZSk7XG4gIH07XG4gIC8qKlxuICAgKiBSZW1vdmUgYSB2YXJpYWJsZSBmcm9tIHRoZSBwYXJzZXJzIHNjb3BlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqL1xuXG5cbiAgUGFyc2VyLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIC8vIFRPRE86IHZhbGlkYXRlIGFyZ3VtZW50c1xuICAgIGRlbGV0ZSB0aGlzLnNjb3BlW25hbWVdO1xuICB9O1xuICAvKipcbiAgICogQ2xlYXIgdGhlIHNjb3BlIHdpdGggdmFyaWFibGVzIGFuZCBmdW5jdGlvbnNcbiAgICovXG5cblxuICBQYXJzZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIF9uYW1lIGluIHRoaXMuc2NvcGUpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodGhpcy5zY29wZSwgX25hbWUpKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnNjb3BlW19uYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFBhcnNlcjtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVBhcnNlckNsYXNzID0gY3JlYXRlUGFyc2VyQ2xhc3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkluZmluaXR5RG9jcyA9IHZvaWQgMDtcbnZhciBJbmZpbml0eURvY3MgPSB7XG4gIG5hbWU6ICdJbmZpbml0eScsXG4gIGNhdGVnb3J5OiAnQ29uc3RhbnRzJyxcbiAgc3ludGF4OiBbJ0luZmluaXR5J10sXG4gIGRlc2NyaXB0aW9uOiAnSW5maW5pdHksIGEgbnVtYmVyIHdoaWNoIGlzIGxhcmdlciB0aGFuIHRoZSBtYXhpbXVtIG51bWJlciB0aGF0IGNhbiBiZSBoYW5kbGVkIGJ5IGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLicsXG4gIGV4YW1wbGVzOiBbJ0luZmluaXR5JywgJzEgLyAwJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5JbmZpbml0eURvY3MgPSBJbmZpbml0eURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkxOMTBEb2NzID0gdm9pZCAwO1xudmFyIExOMTBEb2NzID0ge1xuICBuYW1lOiAnTE4xMCcsXG4gIGNhdGVnb3J5OiAnQ29uc3RhbnRzJyxcbiAgc3ludGF4OiBbJ0xOMTAnXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiAxMCwgYXBwcm94aW1hdGVseSBlcXVhbCB0byAyLjMwMicsXG4gIGV4YW1wbGVzOiBbJ0xOMTAnLCAnbG9nKDEwKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuTE4xMERvY3MgPSBMTjEwRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuTE4yRG9jcyA9IHZvaWQgMDtcbnZhciBMTjJEb2NzID0ge1xuICBuYW1lOiAnTE4yJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnTE4yJ10sXG4gIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgMiwgYXBwcm94aW1hdGVseSBlcXVhbCB0byAwLjY5MycsXG4gIGV4YW1wbGVzOiBbJ0xOMicsICdsb2coMiknXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLkxOMkRvY3MgPSBMTjJEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5MT0cxMEVEb2NzID0gdm9pZCAwO1xudmFyIExPRzEwRURvY3MgPSB7XG4gIG5hbWU6ICdMT0cxMEUnLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWydMT0cxMEUnXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBiYXNlLTEwIGxvZ2FyaXRobSBvZiBFLCBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvIDAuNDM0JyxcbiAgZXhhbXBsZXM6IFsnTE9HMTBFJywgJ2xvZyhlLCAxMCknXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLkxPRzEwRURvY3MgPSBMT0cxMEVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5MT0cyRURvY3MgPSB2b2lkIDA7XG52YXIgTE9HMkVEb2NzID0ge1xuICBuYW1lOiAnTE9HMkUnLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWydMT0cyRSddLFxuICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIGJhc2UtMiBsb2dhcml0aG0gb2YgRSwgYXBwcm94aW1hdGVseSBlcXVhbCB0byAxLjQ0MicsXG4gIGV4YW1wbGVzOiBbJ0xPRzJFJywgJ2xvZyhlLCAyKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuTE9HMkVEb2NzID0gTE9HMkVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5OYU5Eb2NzID0gdm9pZCAwO1xudmFyIE5hTkRvY3MgPSB7XG4gIG5hbWU6ICdOYU4nLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWydOYU4nXSxcbiAgZGVzY3JpcHRpb246ICdOb3QgYSBudW1iZXInLFxuICBleGFtcGxlczogWydOYU4nLCAnMCAvIDAnXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLk5hTkRvY3MgPSBOYU5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5TUVJUMTJEb2NzID0gdm9pZCAwO1xudmFyIFNRUlQxMkRvY3MgPSB7XG4gIG5hbWU6ICdTUVJUMV8yJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnU1FSVDFfMiddLFxuICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIHNxdWFyZSByb290IG9mIDEvMiwgYXBwcm94aW1hdGVseSBlcXVhbCB0byAwLjcwNycsXG4gIGV4YW1wbGVzOiBbJ1NRUlQxXzInLCAnc3FydCgxLzIpJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5TUVJUMTJEb2NzID0gU1FSVDEyRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuU1FSVDJEb2NzID0gdm9pZCAwO1xudmFyIFNRUlQyRG9jcyA9IHtcbiAgbmFtZTogJ1NRUlQyJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnU1FSVDInXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBzcXVhcmUgcm9vdCBvZiAyLCBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvIDEuNDE0JyxcbiAgZXhhbXBsZXM6IFsnU1FSVDInLCAnc3FydCgyKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuU1FSVDJEb2NzID0gU1FSVDJEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lRG9jcyA9IHZvaWQgMDtcbnZhciBlRG9jcyA9IHtcbiAgbmFtZTogJ2UnLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWydlJ10sXG4gIGRlc2NyaXB0aW9uOiAnRXVsZXJcXCdzIG51bWJlciwgdGhlIGJhc2Ugb2YgdGhlIG5hdHVyYWwgbG9nYXJpdGhtLiBBcHByb3hpbWF0ZWx5IGVxdWFsIHRvIDIuNzE4MjgnLFxuICBleGFtcGxlczogWydlJywgJ2UgXiAyJywgJ2V4cCgyKScsICdsb2coZSknXSxcbiAgc2VlYWxzbzogWydleHAnXVxufTtcbmV4cG9ydHMuZURvY3MgPSBlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmFsc2VEb2NzID0gdm9pZCAwO1xudmFyIGZhbHNlRG9jcyA9IHtcbiAgbmFtZTogJ2ZhbHNlJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnZmFsc2UnXSxcbiAgZGVzY3JpcHRpb246ICdCb29sZWFuIHZhbHVlIGZhbHNlJyxcbiAgZXhhbXBsZXM6IFsnZmFsc2UnXSxcbiAgc2VlYWxzbzogWyd0cnVlJ11cbn07XG5leHBvcnRzLmZhbHNlRG9jcyA9IGZhbHNlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaURvY3MgPSB2b2lkIDA7XG52YXIgaURvY3MgPSB7XG4gIG5hbWU6ICdpJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnaSddLFxuICBkZXNjcmlwdGlvbjogJ0ltYWdpbmFyeSB1bml0LCBkZWZpbmVkIGFzIGkqaT0tMS4gQSBjb21wbGV4IG51bWJlciBpcyBkZXNjcmliZWQgYXMgYSArIGIqaSwgd2hlcmUgYSBpcyB0aGUgcmVhbCBwYXJ0LCBhbmQgYiBpcyB0aGUgaW1hZ2luYXJ5IHBhcnQuJyxcbiAgZXhhbXBsZXM6IFsnaScsICdpICogaScsICdzcXJ0KC0xKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuaURvY3MgPSBpRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubnVsbERvY3MgPSB2b2lkIDA7XG52YXIgbnVsbERvY3MgPSB7XG4gIG5hbWU6ICdudWxsJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnbnVsbCddLFxuICBkZXNjcmlwdGlvbjogJ1ZhbHVlIG51bGwnLFxuICBleGFtcGxlczogWydudWxsJ10sXG4gIHNlZWFsc286IFsndHJ1ZScsICdmYWxzZSddXG59O1xuZXhwb3J0cy5udWxsRG9jcyA9IG51bGxEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5waGlEb2NzID0gdm9pZCAwO1xudmFyIHBoaURvY3MgPSB7XG4gIG5hbWU6ICdwaGknLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWydwaGknXSxcbiAgZGVzY3JpcHRpb246ICdQaGkgaXMgdGhlIGdvbGRlbiByYXRpby4gVHdvIHF1YW50aXRpZXMgYXJlIGluIHRoZSBnb2xkZW4gcmF0aW8gaWYgdGhlaXIgcmF0aW8gaXMgdGhlIHNhbWUgYXMgdGhlIHJhdGlvIG9mIHRoZWlyIHN1bSB0byB0aGUgbGFyZ2VyIG9mIHRoZSB0d28gcXVhbnRpdGllcy4gUGhpIGlzIGRlZmluZWQgYXMgYCgxICsgc3FydCg1KSkgLyAyYCBhbmQgaXMgYXBwcm94aW1hdGVseSAxLjYxODAzNC4uLicsXG4gIGV4YW1wbGVzOiBbJ3BoaSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMucGhpRG9jcyA9IHBoaURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBpRG9jcyA9IHZvaWQgMDtcbnZhciBwaURvY3MgPSB7XG4gIG5hbWU6ICdwaScsXG4gIGNhdGVnb3J5OiAnQ29uc3RhbnRzJyxcbiAgc3ludGF4OiBbJ3BpJ10sXG4gIGRlc2NyaXB0aW9uOiAnVGhlIG51bWJlciBwaSBpcyBhIG1hdGhlbWF0aWNhbCBjb25zdGFudCB0aGF0IGlzIHRoZSByYXRpbyBvZiBhIGNpcmNsZVxcJ3MgY2lyY3VtZmVyZW5jZSB0byBpdHMgZGlhbWV0ZXIsIGFuZCBpcyBhcHByb3hpbWF0ZWx5IGVxdWFsIHRvIDMuMTQxNTknLFxuICBleGFtcGxlczogWydwaScsICdzaW4ocGkvMiknXSxcbiAgc2VlYWxzbzogWyd0YXUnXVxufTtcbmV4cG9ydHMucGlEb2NzID0gcGlEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50YXVEb2NzID0gdm9pZCAwO1xudmFyIHRhdURvY3MgPSB7XG4gIG5hbWU6ICd0YXUnLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWyd0YXUnXSxcbiAgZGVzY3JpcHRpb246ICdUYXUgaXMgdGhlIHJhdGlvIGNvbnN0YW50IG9mIGEgY2lyY2xlXFwncyBjaXJjdW1mZXJlbmNlIHRvIHJhZGl1cywgZXF1YWwgdG8gMiAqIHBpLCBhcHByb3hpbWF0ZWx5IDYuMjgzMi4nLFxuICBleGFtcGxlczogWyd0YXUnLCAnMiAqIHBpJ10sXG4gIHNlZWFsc286IFsncGknXVxufTtcbmV4cG9ydHMudGF1RG9jcyA9IHRhdURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRydWVEb2NzID0gdm9pZCAwO1xudmFyIHRydWVEb2NzID0ge1xuICBuYW1lOiAndHJ1ZScsXG4gIGNhdGVnb3J5OiAnQ29uc3RhbnRzJyxcbiAgc3ludGF4OiBbJ3RydWUnXSxcbiAgZGVzY3JpcHRpb246ICdCb29sZWFuIHZhbHVlIHRydWUnLFxuICBleGFtcGxlczogWyd0cnVlJ10sXG4gIHNlZWFsc286IFsnZmFsc2UnXVxufTtcbmV4cG9ydHMudHJ1ZURvY3MgPSB0cnVlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudmVyc2lvbkRvY3MgPSB2b2lkIDA7XG52YXIgdmVyc2lvbkRvY3MgPSB7XG4gIG5hbWU6ICd2ZXJzaW9uJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsndmVyc2lvbiddLFxuICBkZXNjcmlwdGlvbjogJ0Egc3RyaW5nIHdpdGggdGhlIHZlcnNpb24gbnVtYmVyIG9mIG1hdGguanMnLFxuICBleGFtcGxlczogWyd2ZXJzaW9uJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy52ZXJzaW9uRG9jcyA9IHZlcnNpb25Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iaWdudW1iZXJEb2NzID0gdm9pZCAwO1xudmFyIGJpZ251bWJlckRvY3MgPSB7XG4gIG5hbWU6ICdiaWdudW1iZXInLFxuICBjYXRlZ29yeTogJ0NvbnN0cnVjdGlvbicsXG4gIHN5bnRheDogWydiaWdudW1iZXIoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBiaWcgbnVtYmVyIGZyb20gYSBudW1iZXIgb3Igc3RyaW5nLicsXG4gIGV4YW1wbGVzOiBbJzAuMSArIDAuMicsICdiaWdudW1iZXIoMC4xKSArIGJpZ251bWJlcigwLjIpJywgJ2JpZ251bWJlcihcIjcuMlwiKScsICdiaWdudW1iZXIoXCI3LjJlNTAwXCIpJywgJ2JpZ251bWJlcihbMC4xLCAwLjIsIDAuM10pJ10sXG4gIHNlZWFsc286IFsnYm9vbGVhbicsICdjb21wbGV4JywgJ2ZyYWN0aW9uJywgJ2luZGV4JywgJ21hdHJpeCcsICdzdHJpbmcnLCAndW5pdCddXG59O1xuZXhwb3J0cy5iaWdudW1iZXJEb2NzID0gYmlnbnVtYmVyRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYm9vbGVhbkRvY3MgPSB2b2lkIDA7XG52YXIgYm9vbGVhbkRvY3MgPSB7XG4gIG5hbWU6ICdib29sZWFuJyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsneCcsICdib29sZWFuKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29udmVydCBhIHN0cmluZyBvciBudW1iZXIgaW50byBhIGJvb2xlYW4uJyxcbiAgZXhhbXBsZXM6IFsnYm9vbGVhbigwKScsICdib29sZWFuKDEpJywgJ2Jvb2xlYW4oMyknLCAnYm9vbGVhbihcInRydWVcIiknLCAnYm9vbGVhbihcImZhbHNlXCIpJywgJ2Jvb2xlYW4oWzEsIDAsIDEsIDFdKSddLFxuICBzZWVhbHNvOiBbJ2JpZ251bWJlcicsICdjb21wbGV4JywgJ2luZGV4JywgJ21hdHJpeCcsICdudW1iZXInLCAnc3RyaW5nJywgJ3VuaXQnXVxufTtcbmV4cG9ydHMuYm9vbGVhbkRvY3MgPSBib29sZWFuRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcGxleERvY3MgPSB2b2lkIDA7XG52YXIgY29tcGxleERvY3MgPSB7XG4gIG5hbWU6ICdjb21wbGV4JyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsnY29tcGxleCgpJywgJ2NvbXBsZXgocmUsIGltKScsICdjb21wbGV4KHN0cmluZyknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBjb21wbGV4IG51bWJlci4nLFxuICBleGFtcGxlczogWydjb21wbGV4KCknLCAnY29tcGxleCgyLCAzKScsICdjb21wbGV4KFwiNyAtIDJpXCIpJ10sXG4gIHNlZWFsc286IFsnYmlnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnaW5kZXgnLCAnbWF0cml4JywgJ251bWJlcicsICdzdHJpbmcnLCAndW5pdCddXG59O1xuZXhwb3J0cy5jb21wbGV4RG9jcyA9IGNvbXBsZXhEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbml0RG9jcyA9IHZvaWQgMDtcbnZhciBjcmVhdGVVbml0RG9jcyA9IHtcbiAgbmFtZTogJ2NyZWF0ZVVuaXQnLFxuICBjYXRlZ29yeTogJ0NvbnN0cnVjdGlvbicsXG4gIHN5bnRheDogWydjcmVhdGVVbml0KGRlZmluaXRpb25zKScsICdjcmVhdGVVbml0KG5hbWUsIGRlZmluaXRpb24pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgdXNlci1kZWZpbmVkIHVuaXQgYW5kIHJlZ2lzdGVyIGl0IHdpdGggdGhlIFVuaXQgdHlwZS4nLFxuICBleGFtcGxlczogWydjcmVhdGVVbml0KFwiZm9vXCIpJywgJ2NyZWF0ZVVuaXQoXCJrbm90XCIsIHtkZWZpbml0aW9uOiBcIjAuNTE0NDQ0NDQ0IG0vc1wiLCBhbGlhc2VzOiBbXCJrbm90c1wiLCBcImt0XCIsIFwia3RzXCJdfSknLCAnY3JlYXRlVW5pdChcIm1waFwiLCBcIjEgbWlsZS9ob3VyXCIpJ10sXG4gIHNlZWFsc286IFsndW5pdCcsICdzcGxpdFVuaXQnXVxufTtcbmV4cG9ydHMuY3JlYXRlVW5pdERvY3MgPSBjcmVhdGVVbml0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZnJhY3Rpb25Eb2NzID0gdm9pZCAwO1xudmFyIGZyYWN0aW9uRG9jcyA9IHtcbiAgbmFtZTogJ2ZyYWN0aW9uJyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsnZnJhY3Rpb24obnVtKScsICdmcmFjdGlvbihudW0sZGVuKSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIGZyYWN0aW9uIGZyb20gYSBudW1iZXIgb3IgZnJvbSBhIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3IuJyxcbiAgZXhhbXBsZXM6IFsnZnJhY3Rpb24oMC4xMjUpJywgJ2ZyYWN0aW9uKDEsIDMpICsgZnJhY3Rpb24oMiwgNSknXSxcbiAgc2VlYWxzbzogWydiaWdudW1iZXInLCAnYm9vbGVhbicsICdjb21wbGV4JywgJ2luZGV4JywgJ21hdHJpeCcsICdzdHJpbmcnLCAndW5pdCddXG59O1xuZXhwb3J0cy5mcmFjdGlvbkRvY3MgPSBmcmFjdGlvbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmluZGV4RG9jcyA9IHZvaWQgMDtcbnZhciBpbmRleERvY3MgPSB7XG4gIG5hbWU6ICdpbmRleCcsXG4gIGNhdGVnb3J5OiAnQ29uc3RydWN0aW9uJyxcbiAgc3ludGF4OiBbJ1tzdGFydF0nLCAnW3N0YXJ0OmVuZF0nLCAnW3N0YXJ0OnN0ZXA6ZW5kXScsICdbc3RhcnQxLCBzdGFydCAyLCAuLi5dJywgJ1tzdGFydDE6ZW5kMSwgc3RhcnQyOmVuZDIsIC4uLl0nLCAnW3N0YXJ0MTpzdGVwMTplbmQxLCBzdGFydDI6c3RlcDI6ZW5kMiwgLi4uXSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhbiBpbmRleCB0byBnZXQgb3IgcmVwbGFjZSBhIHN1YnNldCBvZiBhIG1hdHJpeCcsXG4gIGV4YW1wbGVzOiBbJ1tdJywgJ1sxLCAyLCAzXScsICdBID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ0FbMSwgOl0nLCAnQVsxLCAyXSA9IDUwJywgJ0FbMDoyLCAwOjJdID0gb25lcygyLCAyKSddLFxuICBzZWVhbHNvOiBbJ2JpZ251bWJlcicsICdib29sZWFuJywgJ2NvbXBsZXgnLCAnbWF0cml4LCcsICdudW1iZXInLCAncmFuZ2UnLCAnc3RyaW5nJywgJ3VuaXQnXVxufTtcbmV4cG9ydHMuaW5kZXhEb2NzID0gaW5kZXhEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tYXRyaXhEb2NzID0gdm9pZCAwO1xudmFyIG1hdHJpeERvY3MgPSB7XG4gIG5hbWU6ICdtYXRyaXgnLFxuICBjYXRlZ29yeTogJ0NvbnN0cnVjdGlvbicsXG4gIHN5bnRheDogWydbXScsICdbYTEsIGIxLCAuLi47IGEyLCBiMiwgLi4uXScsICdtYXRyaXgoKScsICdtYXRyaXgoXCJkZW5zZVwiKScsICdtYXRyaXgoWy4uLl0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgbWF0cml4LicsXG4gIGV4YW1wbGVzOiBbJ1tdJywgJ1sxLCAyLCAzXScsICdbMSwgMiwgMzsgNCwgNSwgNl0nLCAnbWF0cml4KCknLCAnbWF0cml4KFszLCA0XSknLCAnbWF0cml4KFszLCA0OyA1LCA2XSwgXCJzcGFyc2VcIiknLCAnbWF0cml4KFszLCA0OyA1LCA2XSwgXCJzcGFyc2VcIiwgXCJudW1iZXJcIiknXSxcbiAgc2VlYWxzbzogWydiaWdudW1iZXInLCAnYm9vbGVhbicsICdjb21wbGV4JywgJ2luZGV4JywgJ251bWJlcicsICdzdHJpbmcnLCAndW5pdCcsICdzcGFyc2UnXVxufTtcbmV4cG9ydHMubWF0cml4RG9jcyA9IG1hdHJpeERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm51bWJlckRvY3MgPSB2b2lkIDA7XG52YXIgbnVtYmVyRG9jcyA9IHtcbiAgbmFtZTogJ251bWJlcicsXG4gIGNhdGVnb3J5OiAnQ29uc3RydWN0aW9uJyxcbiAgc3ludGF4OiBbJ3gnLCAnbnVtYmVyKHgpJywgJ251bWJlcih1bml0LCB2YWx1ZWxlc3NVbml0KSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIG51bWJlciBvciBjb252ZXJ0IGEgc3RyaW5nIG9yIGJvb2xlYW4gaW50byBhIG51bWJlci4nLFxuICBleGFtcGxlczogWycyJywgJzJlMycsICc0LjA1JywgJ251bWJlcigyKScsICdudW1iZXIoXCI3LjJcIiknLCAnbnVtYmVyKHRydWUpJywgJ251bWJlcihbdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWVdKScsICdudW1iZXIodW5pdChcIjUyY21cIiksIFwibVwiKSddLFxuICBzZWVhbHNvOiBbJ2JpZ251bWJlcicsICdib29sZWFuJywgJ2NvbXBsZXgnLCAnZnJhY3Rpb24nLCAnaW5kZXgnLCAnbWF0cml4JywgJ3N0cmluZycsICd1bml0J11cbn07XG5leHBvcnRzLm51bWJlckRvY3MgPSBudW1iZXJEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcGFyc2VEb2NzID0gdm9pZCAwO1xudmFyIHNwYXJzZURvY3MgPSB7XG4gIG5hbWU6ICdzcGFyc2UnLFxuICBjYXRlZ29yeTogJ0NvbnN0cnVjdGlvbicsXG4gIHN5bnRheDogWydzcGFyc2UoKScsICdzcGFyc2UoW2ExLCBiMSwgLi4uOyBhMSwgYjIsIC4uLl0pJywgJ3NwYXJzZShbYTEsIGIxLCAuLi47IGExLCBiMiwgLi4uXSwgXCJudW1iZXJcIiknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBzcGFyc2UgbWF0cml4LicsXG4gIGV4YW1wbGVzOiBbJ3NwYXJzZSgpJywgJ3NwYXJzZShbMywgNDsgNSwgNl0pJywgJ3NwYXJzZShbMywgMDsgNSwgMF0sIFwibnVtYmVyXCIpJ10sXG4gIHNlZWFsc286IFsnYmlnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnY29tcGxleCcsICdpbmRleCcsICdudW1iZXInLCAnc3RyaW5nJywgJ3VuaXQnLCAnbWF0cml4J11cbn07XG5leHBvcnRzLnNwYXJzZURvY3MgPSBzcGFyc2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcGxpdFVuaXREb2NzID0gdm9pZCAwO1xudmFyIHNwbGl0VW5pdERvY3MgPSB7XG4gIG5hbWU6ICdzcGxpdFVuaXQnLFxuICBjYXRlZ29yeTogJ0NvbnN0cnVjdGlvbicsXG4gIHN5bnRheDogWydzcGxpdFVuaXQodW5pdDogVW5pdCwgcGFydHM6IFVuaXRbXSknXSxcbiAgZGVzY3JpcHRpb246ICdTcGxpdCBhIHVuaXQgaW4gYW4gYXJyYXkgb2YgdW5pdHMgd2hvc2Ugc3VtIGlzIGVxdWFsIHRvIHRoZSBvcmlnaW5hbCB1bml0LicsXG4gIGV4YW1wbGVzOiBbJ3NwbGl0VW5pdCgxIG0sIFtcImZlZXRcIiwgXCJpbmNoXCJdKSddLFxuICBzZWVhbHNvOiBbJ3VuaXQnLCAnY3JlYXRlVW5pdCddXG59O1xuZXhwb3J0cy5zcGxpdFVuaXREb2NzID0gc3BsaXRVbml0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3RyaW5nRG9jcyA9IHZvaWQgMDtcbnZhciBzdHJpbmdEb2NzID0ge1xuICBuYW1lOiAnc3RyaW5nJyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsnXCJ0ZXh0XCInLCAnc3RyaW5nKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgc3RyaW5nIG9yIGNvbnZlcnQgYSB2YWx1ZSB0byBhIHN0cmluZycsXG4gIGV4YW1wbGVzOiBbJ1wiSGVsbG8gV29ybGQhXCInLCAnc3RyaW5nKDQuMiknLCAnc3RyaW5nKDMgKyAyaSknXSxcbiAgc2VlYWxzbzogWydiaWdudW1iZXInLCAnYm9vbGVhbicsICdjb21wbGV4JywgJ2luZGV4JywgJ21hdHJpeCcsICdudW1iZXInLCAndW5pdCddXG59O1xuZXhwb3J0cy5zdHJpbmdEb2NzID0gc3RyaW5nRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudW5pdERvY3MgPSB2b2lkIDA7XG52YXIgdW5pdERvY3MgPSB7XG4gIG5hbWU6ICd1bml0JyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsndmFsdWUgdW5pdCcsICd1bml0KHZhbHVlLCB1bml0KScsICd1bml0KHN0cmluZyknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSB1bml0LicsXG4gIGV4YW1wbGVzOiBbJzUuNSBtbScsICczIGluY2gnLCAndW5pdCg3LjEsIFwia2lsb2dyYW1cIiknLCAndW5pdChcIjIzIGRlZ1wiKSddLFxuICBzZWVhbHNvOiBbJ2JpZ251bWJlcicsICdib29sZWFuJywgJ2NvbXBsZXgnLCAnaW5kZXgnLCAnbWF0cml4JywgJ251bWJlcicsICdzdHJpbmcnXVxufTtcbmV4cG9ydHMudW5pdERvY3MgPSB1bml0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29uZmlnRG9jcyA9IHZvaWQgMDtcbnZhciBjb25maWdEb2NzID0ge1xuICBuYW1lOiAnY29uZmlnJyxcbiAgY2F0ZWdvcnk6ICdDb3JlJyxcbiAgc3ludGF4OiBbJ2NvbmZpZygpJywgJ2NvbmZpZyhvcHRpb25zKSddLFxuICBkZXNjcmlwdGlvbjogJ0dldCBjb25maWd1cmF0aW9uIG9yIGNoYW5nZSBjb25maWd1cmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ2NvbmZpZygpJywgJzEvMyArIDEvNCcsICdjb25maWcoe251bWJlcjogXCJGcmFjdGlvblwifSknLCAnMS8zICsgMS80J10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5jb25maWdEb2NzID0gY29uZmlnRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW1wb3J0RG9jcyA9IHZvaWQgMDtcbnZhciBpbXBvcnREb2NzID0ge1xuICBuYW1lOiAnaW1wb3J0JyxcbiAgY2F0ZWdvcnk6ICdDb3JlJyxcbiAgc3ludGF4OiBbJ2ltcG9ydChmdW5jdGlvbnMpJywgJ2ltcG9ydChmdW5jdGlvbnMsIG9wdGlvbnMpJ10sXG4gIGRlc2NyaXB0aW9uOiAnSW1wb3J0IGZ1bmN0aW9ucyBvciBjb25zdGFudHMgZnJvbSBhbiBvYmplY3QuJyxcbiAgZXhhbXBsZXM6IFsnaW1wb3J0KHtteUZuOiBmKHgpPXheMiwgbXlDb25zdGFudDogMzIgfSknLCAnbXlGbigyKScsICdteUNvbnN0YW50J10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5pbXBvcnREb2NzID0gaW1wb3J0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudHlwZWREb2NzID0gdm9pZCAwO1xudmFyIHR5cGVkRG9jcyA9IHtcbiAgbmFtZTogJ3R5cGVkJyxcbiAgY2F0ZWdvcnk6ICdDb3JlJyxcbiAgc3ludGF4OiBbJ3R5cGVkKHNpZ25hdHVyZXMpJywgJ3R5cGVkKG5hbWUsIHNpZ25hdHVyZXMpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgdHlwZWQgZnVuY3Rpb24uJyxcbiAgZXhhbXBsZXM6IFsnZG91YmxlID0gdHlwZWQoeyBcIm51bWJlciwgbnVtYmVyXCI6IGYoeCk9eCt4IH0pJywgJ2RvdWJsZSgyKScsICdkb3VibGUoXCJoZWxsb1wiKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMudHlwZWREb2NzID0gdHlwZWREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lbWJlZGRlZERvY3MgPSB2b2lkIDA7XG5cbnZhciBfYmlnbnVtYmVyID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uL2JpZ251bWJlclwiKTtcblxudmFyIF90eXBlT2YgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy90eXBlT2ZcIik7XG5cbnZhciBfaXNaZXJvID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNaZXJvXCIpO1xuXG52YXIgX2lzUHJpbWUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc1ByaW1lXCIpO1xuXG52YXIgX2lzUG9zaXRpdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc1Bvc2l0aXZlXCIpO1xuXG52YXIgX2lzTnVtZXJpYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2lzTnVtZXJpY1wiKTtcblxudmFyIF9oYXNOdW1lcmljVmFsdWUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9oYXNOdW1lcmljVmFsdWVcIik7XG5cbnZhciBfaXNOZWdhdGl2ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2lzTmVnYXRpdmVcIik7XG5cbnZhciBfaXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNJbnRlZ2VyXCIpO1xuXG52YXIgX2lzTmFOID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNOYU5cIik7XG5cbnZhciBfZm9ybWF0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvZm9ybWF0XCIpO1xuXG52YXIgX2Nsb25lID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvY2xvbmVcIik7XG5cbnZhciBfdG8gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91bml0cy90b1wiKTtcblxudmFyIF90YW5oID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhbmhcIik7XG5cbnZhciBfdGFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhblwiKTtcblxudmFyIF9zaW5oID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpbmhcIik7XG5cbnZhciBfc2VjaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9zZWNoXCIpO1xuXG52YXIgX3NlYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9zZWNcIik7XG5cbnZhciBfY3NjaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jc2NoXCIpO1xuXG52YXIgX2NzYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jc2NcIik7XG5cbnZhciBfY290aCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3RoXCIpO1xuXG52YXIgX2NvdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3RcIik7XG5cbnZhciBfY29zaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3NoXCIpO1xuXG52YXIgX2NvcyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3NcIik7XG5cbnZhciBfYXRhbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hdGFuMlwiKTtcblxudmFyIF9hdGFuaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hdGFuaFwiKTtcblxudmFyIF9hdGFuMiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hdGFuXCIpO1xuXG52YXIgX2FzaW5oID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzaW5oXCIpO1xuXG52YXIgX2FzaW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXNpblwiKTtcblxudmFyIF9hc2VjaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2VjaFwiKTtcblxudmFyIF9hc2VjID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzZWNcIik7XG5cbnZhciBfYWNzY2ggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNzY2hcIik7XG5cbnZhciBfYWNzYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY3NjXCIpO1xuXG52YXIgX2Fjb3RoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3RoXCIpO1xuXG52YXIgX2Fjb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvdFwiKTtcblxudmFyIF9hY29zaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY29zaFwiKTtcblxudmFyIF9hY29zID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3NcIik7XG5cbnZhciBfc3VtID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9zdW1cIik7XG5cbnZhciBfc3RkID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9zdGRcIik7XG5cbnZhciBfcXVhbnRpbGVTZXEgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3F1YW50aWxlU2VxXCIpO1xuXG52YXIgX3Byb2QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3Byb2RcIik7XG5cbnZhciBfbW9kZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbW9kZVwiKTtcblxudmFyIF9taW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21pblwiKTtcblxudmFyIF9tZWRpYW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21lZGlhblwiKTtcblxudmFyIF9tZWFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9tZWFuXCIpO1xuXG52YXIgX21heCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWF4XCIpO1xuXG52YXIgX21hZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWFkXCIpO1xuXG52YXIgX2VyZiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3NwZWNpYWwvZXJmXCIpO1xuXG52YXIgX3NldFVuaW9uID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldFVuaW9uXCIpO1xuXG52YXIgX3NldFN5bURpZmZlcmVuY2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0U3ltRGlmZmVyZW5jZVwiKTtcblxudmFyIF9zZXRTaXplID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldFNpemVcIik7XG5cbnZhciBfc2V0UG93ZXJzZXQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0UG93ZXJzZXRcIik7XG5cbnZhciBfc2V0TXVsdGlwbGljaXR5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldE11bHRpcGxpY2l0eVwiKTtcblxudmFyIF9zZXRJc1N1YnNldCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3NldC9zZXRJc1N1YnNldFwiKTtcblxudmFyIF9zZXRJbnRlcnNlY3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0SW50ZXJzZWN0XCIpO1xuXG52YXIgX3NldERpc3RpbmN0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldERpc3RpbmN0XCIpO1xuXG52YXIgX3NldERpZmZlcmVuY2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0RGlmZmVyZW5jZVwiKTtcblxudmFyIF9zZXRDYXJ0ZXNpYW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0Q2FydGVzaWFuXCIpO1xuXG52YXIgX3VuZXF1YWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL3VuZXF1YWxcIik7XG5cbnZhciBfc21hbGxlckVxID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9zbWFsbGVyRXFcIik7XG5cbnZhciBfc21hbGxlciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvc21hbGxlclwiKTtcblxudmFyIF9sYXJnZXJFcSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvbGFyZ2VyRXFcIik7XG5cbnZhciBfbGFyZ2VyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9sYXJnZXJcIik7XG5cbnZhciBfZXF1YWxUZXh0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9lcXVhbFRleHRcIik7XG5cbnZhciBfZXF1YWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsXCIpO1xuXG52YXIgX2RlZXBFcXVhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZGVlcEVxdWFsXCIpO1xuXG52YXIgX2NvbXBhcmVUZXh0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9jb21wYXJlVGV4dFwiKTtcblxudmFyIF9jb21wYXJlTmF0dXJhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZU5hdHVyYWxcIik7XG5cbnZhciBfY29tcGFyZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZVwiKTtcblxudmFyIF9yYW5kb21JbnQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9yYW5kb21JbnRcIik7XG5cbnZhciBfcmFuZG9tID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcHJvYmFiaWxpdHkvcmFuZG9tXCIpO1xuXG52YXIgX3BpY2tSYW5kb20gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9waWNrUmFuZG9tXCIpO1xuXG52YXIgX3Blcm11dGF0aW9ucyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3Blcm11dGF0aW9uc1wiKTtcblxudmFyIF9tdWx0aW5vbWlhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L211bHRpbm9taWFsXCIpO1xuXG52YXIgX2tsZGl2ZXJnZW5jZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2tsZGl2ZXJnZW5jZVwiKTtcblxudmFyIF9nYW1tYSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2dhbW1hXCIpO1xuXG52YXIgX2ZhY3RvcmlhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2ZhY3RvcmlhbFwiKTtcblxudmFyIF9jb21iaW5hdGlvbnMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9jb21iaW5hdGlvbnNcIik7XG5cbnZhciBfY29tYmluYXRpb25zV2l0aFJlcCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9uc1dpdGhSZXBcIik7XG5cbnZhciBfemVyb3MgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvemVyb3NcIik7XG5cbnZhciBfdHJhbnNwb3NlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3RyYW5zcG9zZVwiKTtcblxudmFyIF90cmFjZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC90cmFjZVwiKTtcblxudmFyIF9zdWJzZXQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvc3Vic2V0XCIpO1xuXG52YXIgX3NxdWVlemUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvc3F1ZWV6ZVwiKTtcblxudmFyIF9zb3J0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3NvcnRcIik7XG5cbnZhciBfc2l6ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9zaXplXCIpO1xuXG52YXIgX3Jlc2hhcGUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvcmVzaGFwZVwiKTtcblxudmFyIF9yZXNpemUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvcmVzaXplXCIpO1xuXG52YXIgX3JhbmdlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3JhbmdlXCIpO1xuXG52YXIgX3BhcnRpdGlvblNlbGVjdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9wYXJ0aXRpb25TZWxlY3RcIik7XG5cbnZhciBfb25lcyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9vbmVzXCIpO1xuXG52YXIgX21hcCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9tYXBcIik7XG5cbnZhciBfa3JvbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9rcm9uXCIpO1xuXG52YXIgX2ludiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9pbnZcIik7XG5cbnZhciBfZm9yRWFjaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9mb3JFYWNoXCIpO1xuXG52YXIgX2ZsYXR0ZW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvZmxhdHRlblwiKTtcblxudmFyIF9maWx0ZXIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvZmlsdGVyXCIpO1xuXG52YXIgX2lkZW50aXR5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2lkZW50aXR5XCIpO1xuXG52YXIgX2dldE1hdHJpeERhdGFUeXBlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2dldE1hdHJpeERhdGFUeXBlXCIpO1xuXG52YXIgX2RvdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9kb3RcIik7XG5cbnZhciBfZGlhZyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9kaWFnXCIpO1xuXG52YXIgX2RldCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9kZXRcIik7XG5cbnZhciBfY3RyYW5zcG9zZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9jdHJhbnNwb3NlXCIpO1xuXG52YXIgX2Nyb3NzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2Nyb3NzXCIpO1xuXG52YXIgX2NvbmNhdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9jb25jYXRcIik7XG5cbnZhciBfeG9yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbG9naWNhbC94b3JcIik7XG5cbnZhciBfb3IgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9sb2dpY2FsL29yXCIpO1xuXG52YXIgX25vdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2xvZ2ljYWwvbm90XCIpO1xuXG52YXIgX2FuZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2xvZ2ljYWwvYW5kXCIpO1xuXG52YXIgX2ludGVyc2VjdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2dlb21ldHJ5L2ludGVyc2VjdFwiKTtcblxudmFyIF9kaXN0YW5jZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2dlb21ldHJ5L2Rpc3RhbmNlXCIpO1xuXG52YXIgX2hlbHAgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9leHByZXNzaW9uL2hlbHBcIik7XG5cbnZhciBfZXZhbHVhdGUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9leHByZXNzaW9uL2V2YWx1YXRlXCIpO1xuXG52YXIgX2ltID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tcGxleC9pbVwiKTtcblxudmFyIF9yZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2NvbXBsZXgvcmVcIik7XG5cbnZhciBfY29uaiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2NvbXBsZXgvY29ualwiKTtcblxudmFyIF9hcmcgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21wbGV4L2FyZ1wiKTtcblxudmFyIF90eXBlZCA9IHJlcXVpcmUoXCIuL2NvcmUvdHlwZWRcIik7XG5cbnZhciBfaW1wb3J0ID0gcmVxdWlyZShcIi4vY29yZS9pbXBvcnRcIik7XG5cbnZhciBfY29uZmlnID0gcmVxdWlyZShcIi4vY29yZS9jb25maWdcIik7XG5cbnZhciBfc3RpcmxpbmdTID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tYmluYXRvcmljcy9zdGlybGluZ1MyXCIpO1xuXG52YXIgX2NvbXBvc2l0aW9uID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tYmluYXRvcmljcy9jb21wb3NpdGlvblwiKTtcblxudmFyIF9jYXRhbGFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tYmluYXRvcmljcy9jYXRhbGFuXCIpO1xuXG52YXIgX2JlbGxOdW1iZXJzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tYmluYXRvcmljcy9iZWxsTnVtYmVyc1wiKTtcblxudmFyIF9yaWdodExvZ1NoaWZ0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9yaWdodExvZ1NoaWZ0XCIpO1xuXG52YXIgX3JpZ2h0QXJpdGhTaGlmdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvcmlnaHRBcml0aFNoaWZ0XCIpO1xuXG52YXIgX2xlZnRTaGlmdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvbGVmdFNoaWZ0XCIpO1xuXG52YXIgX2JpdFhvciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvYml0WG9yXCIpO1xuXG52YXIgX2JpdE9yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9iaXRPclwiKTtcblxudmFyIF9iaXROb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9iaXR3aXNlL2JpdE5vdFwiKTtcblxudmFyIF9iaXRBbmQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9iaXR3aXNlL2JpdEFuZFwiKTtcblxudmFyIF94Z2NkID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy94Z2NkXCIpO1xuXG52YXIgX3VuYXJ5UGx1cyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvdW5hcnlQbHVzXCIpO1xuXG52YXIgX3VuYXJ5TWludXMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3VuYXJ5TWludXNcIik7XG5cbnZhciBfc3F1YXJlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9zcXVhcmVcIik7XG5cbnZhciBfc3FydG0gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3NxcnRtXCIpO1xuXG52YXIgX3NxcnQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3NxcnRcIik7XG5cbnZhciBfc2lnbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvc2lnblwiKTtcblxudmFyIF9yb3VuZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvcm91bmRcIik7XG5cbnZhciBfcG93ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9wb3dcIik7XG5cbnZhciBfbnRoUm9vdHMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3RzXCIpO1xuXG52YXIgX250aFJvb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3RcIik7XG5cbnZhciBfbm9ybSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbm9ybVwiKTtcblxudmFyIF9tdWx0aXBseSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbXVsdGlwbHlcIik7XG5cbnZhciBfbW9kID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9tb2RcIik7XG5cbnZhciBfbG9nID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9sb2cxMFwiKTtcblxudmFyIF9sb2cxcCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMXBcIik7XG5cbnZhciBfbG9nMiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMlwiKTtcblxudmFyIF9sb2czID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9sb2dcIik7XG5cbnZhciBfbGNtID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9sY21cIik7XG5cbnZhciBfaHlwb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2h5cG90XCIpO1xuXG52YXIgX2djZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZ2NkXCIpO1xuXG52YXIgX2Zsb29yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9mbG9vclwiKTtcblxudmFyIF9maXggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2ZpeFwiKTtcblxudmFyIF9leHBtID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9leHBtMVwiKTtcblxudmFyIF9leHBtMiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZXhwbVwiKTtcblxudmFyIF9laWdzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2VpZ3NcIik7XG5cbnZhciBfZXhwID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9leHBcIik7XG5cbnZhciBfZG90TXVsdGlwbHkgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2RvdE11bHRpcGx5XCIpO1xuXG52YXIgX2RvdERpdmlkZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90RGl2aWRlXCIpO1xuXG52YXIgX2RpdmlkZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZGl2aWRlXCIpO1xuXG52YXIgX2N1YmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2N1YmVcIik7XG5cbnZhciBfY2VpbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvY2VpbFwiKTtcblxudmFyIF9jYnJ0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9jYnJ0XCIpO1xuXG52YXIgX2FkZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvYWRkXCIpO1xuXG52YXIgX2FicyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvYWJzXCIpO1xuXG52YXIgX3FyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9xclwiKTtcblxudmFyIF91c29sdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL3Vzb2x2ZVwiKTtcblxudmFyIF9zbHUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL3NsdVwiKTtcblxudmFyIF9yYXRpb25hbGl6ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvcmF0aW9uYWxpemVcIik7XG5cbnZhciBfc2ltcGxpZnkgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL3NpbXBsaWZ5XCIpO1xuXG52YXIgX2x1cCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvbHVwXCIpO1xuXG52YXIgX2xzb2x2ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvbHNvbHZlXCIpO1xuXG52YXIgX2Rlcml2YXRpdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL2Rlcml2YXRpdmVcIik7XG5cbnZhciBfdmVyc2lvbiA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy92ZXJzaW9uXCIpO1xuXG52YXIgX3RydWUgPSByZXF1aXJlKFwiLi9jb25zdGFudHMvdHJ1ZVwiKTtcblxudmFyIF90YXUgPSByZXF1aXJlKFwiLi9jb25zdGFudHMvdGF1XCIpO1xuXG52YXIgX1NRUlQgPSByZXF1aXJlKFwiLi9jb25zdGFudHMvU1FSVDJcIik7XG5cbnZhciBfU1FSVDFfID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL1NRUlQxXzJcIik7XG5cbnZhciBfcGhpID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL3BoaVwiKTtcblxudmFyIF9waSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy9waVwiKTtcblxudmFyIF9udWxsID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL251bGxcIik7XG5cbnZhciBfTmFOID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL05hTlwiKTtcblxudmFyIF9MT0cxMEUgPSByZXF1aXJlKFwiLi9jb25zdGFudHMvTE9HMTBFXCIpO1xuXG52YXIgX0xPRzJFID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL0xPRzJFXCIpO1xuXG52YXIgX0xOID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL0xOMTBcIik7XG5cbnZhciBfTE4yID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL0xOMlwiKTtcblxudmFyIF9JbmZpbml0eSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy9JbmZpbml0eVwiKTtcblxudmFyIF9pID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL2lcIik7XG5cbnZhciBfZmFsc2UgPSByZXF1aXJlKFwiLi9jb25zdGFudHMvZmFsc2VcIik7XG5cbnZhciBfZSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy9lXCIpO1xuXG52YXIgX3VuaXQgPSByZXF1aXJlKFwiLi9jb25zdHJ1Y3Rpb24vdW5pdFwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi9jb25zdHJ1Y3Rpb24vc3RyaW5nXCIpO1xuXG52YXIgX3NwbGl0VW5pdCA9IHJlcXVpcmUoXCIuL2NvbnN0cnVjdGlvbi9zcGxpdFVuaXRcIik7XG5cbnZhciBfc3BhcnNlID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uL3NwYXJzZVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi9jb25zdHJ1Y3Rpb24vbnVtYmVyXCIpO1xuXG52YXIgX21hdHJpeCA9IHJlcXVpcmUoXCIuL2NvbnN0cnVjdGlvbi9tYXRyaXhcIik7XG5cbnZhciBfY29uc3RydWN0aW9uID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uXCIpO1xuXG52YXIgX2ZyYWN0aW9uID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uL2ZyYWN0aW9uXCIpO1xuXG52YXIgX2NyZWF0ZVVuaXQgPSByZXF1aXJlKFwiLi9jb25zdHJ1Y3Rpb24vY3JlYXRlVW5pdFwiKTtcblxudmFyIF9jb21wbGV4ID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uL2NvbXBsZXhcIik7XG5cbnZhciBfYm9vbGVhbiA9IHJlcXVpcmUoXCIuL2NvbnN0cnVjdGlvbi9ib29sZWFuXCIpO1xuXG52YXIgX2RvdFBvdyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90UG93XCIpO1xuXG52YXIgX2x1c29sdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL2x1c29sdmVcIik7XG5cbnZhciBfc3VidHJhY3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3N1YnRyYWN0XCIpO1xuXG52YXIgX3ZhcmlhbmNlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy92YXJpYW5jZVwiKTtcblxudmFyIF9zaW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2luXCIpO1xuXG52YXIgX251bWVyaWMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9udW1lcmljXCIpO1xuXG52YXIgX2NvbHVtbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9jb2x1bW5cIik7XG5cbnZhciBfcm93ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3Jvd1wiKTtcblxudmFyIGVtYmVkZGVkRG9jcyA9IHtcbiAgLy8gY29uc3RydWN0aW9uIGZ1bmN0aW9uc1xuICBiaWdudW1iZXI6IF9iaWdudW1iZXIuYmlnbnVtYmVyRG9jcyxcbiAgXCJib29sZWFuXCI6IF9ib29sZWFuLmJvb2xlYW5Eb2NzLFxuICBjb21wbGV4OiBfY29tcGxleC5jb21wbGV4RG9jcyxcbiAgY3JlYXRlVW5pdDogX2NyZWF0ZVVuaXQuY3JlYXRlVW5pdERvY3MsXG4gIGZyYWN0aW9uOiBfZnJhY3Rpb24uZnJhY3Rpb25Eb2NzLFxuICBpbmRleDogX2NvbnN0cnVjdGlvbi5pbmRleERvY3MsXG4gIG1hdHJpeDogX21hdHJpeC5tYXRyaXhEb2NzLFxuICBudW1iZXI6IF9udW1iZXIubnVtYmVyRG9jcyxcbiAgc3BhcnNlOiBfc3BhcnNlLnNwYXJzZURvY3MsXG4gIHNwbGl0VW5pdDogX3NwbGl0VW5pdC5zcGxpdFVuaXREb2NzLFxuICBzdHJpbmc6IF9zdHJpbmcuc3RyaW5nRG9jcyxcbiAgdW5pdDogX3VuaXQudW5pdERvY3MsXG4gIC8vIGNvbnN0YW50c1xuICBlOiBfZS5lRG9jcyxcbiAgRTogX2UuZURvY3MsXG4gIFwiZmFsc2VcIjogX2ZhbHNlLmZhbHNlRG9jcyxcbiAgaTogX2kuaURvY3MsXG4gIEluZmluaXR5OiBfSW5maW5pdHkuSW5maW5pdHlEb2NzLFxuICBMTjI6IF9MTjIuTE4yRG9jcyxcbiAgTE4xMDogX0xOLkxOMTBEb2NzLFxuICBMT0cyRTogX0xPRzJFLkxPRzJFRG9jcyxcbiAgTE9HMTBFOiBfTE9HMTBFLkxPRzEwRURvY3MsXG4gIE5hTjogX05hTi5OYU5Eb2NzLFxuICBcIm51bGxcIjogX251bGwubnVsbERvY3MsXG4gIHBpOiBfcGkucGlEb2NzLFxuICBQSTogX3BpLnBpRG9jcyxcbiAgcGhpOiBfcGhpLnBoaURvY3MsXG4gIFNRUlQxXzI6IF9TUVJUMV8uU1FSVDEyRG9jcyxcbiAgU1FSVDI6IF9TUVJULlNRUlQyRG9jcyxcbiAgdGF1OiBfdGF1LnRhdURvY3MsXG4gIFwidHJ1ZVwiOiBfdHJ1ZS50cnVlRG9jcyxcbiAgdmVyc2lvbjogX3ZlcnNpb24udmVyc2lvbkRvY3MsXG4gIC8vIHBoeXNpY2FsIGNvbnN0YW50c1xuICAvLyBUT0RPOiBtb3JlIGRldGFpbGVkIGRvY3MgZm9yIHBoeXNpY2FsIGNvbnN0YW50c1xuICBzcGVlZE9mTGlnaHQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1NwZWVkIG9mIGxpZ2h0IGluIHZhY3V1bScsXG4gICAgZXhhbXBsZXM6IFsnc3BlZWRPZkxpZ2h0J11cbiAgfSxcbiAgZ3Jhdml0YXRpb25Db25zdGFudDoge1xuICAgIGRlc2NyaXB0aW9uOiAnTmV3dG9uaWFuIGNvbnN0YW50IG9mIGdyYXZpdGF0aW9uJyxcbiAgICBleGFtcGxlczogWydncmF2aXRhdGlvbkNvbnN0YW50J11cbiAgfSxcbiAgcGxhbmNrQ29uc3RhbnQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1BsYW5jayBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsncGxhbmNrQ29uc3RhbnQnXVxuICB9LFxuICByZWR1Y2VkUGxhbmNrQ29uc3RhbnQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1JlZHVjZWQgUGxhbmNrIGNvbnN0YW50JyxcbiAgICBleGFtcGxlczogWydyZWR1Y2VkUGxhbmNrQ29uc3RhbnQnXVxuICB9LFxuICBtYWduZXRpY0NvbnN0YW50OiB7XG4gICAgZGVzY3JpcHRpb246ICdNYWduZXRpYyBjb25zdGFudCAodmFjdXVtIHBlcm1lYWJpbGl0eSknLFxuICAgIGV4YW1wbGVzOiBbJ21hZ25ldGljQ29uc3RhbnQnXVxuICB9LFxuICBlbGVjdHJpY0NvbnN0YW50OiB7XG4gICAgZGVzY3JpcHRpb246ICdFbGVjdHJpYyBjb25zdGFudCAodmFjdXVtIHBlcm1lYWJpbGl0eSknLFxuICAgIGV4YW1wbGVzOiBbJ2VsZWN0cmljQ29uc3RhbnQnXVxuICB9LFxuICB2YWN1dW1JbXBlZGFuY2U6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0NoYXJhY3RlcmlzdGljIGltcGVkYW5jZSBvZiB2YWN1dW0nLFxuICAgIGV4YW1wbGVzOiBbJ3ZhY3V1bUltcGVkYW5jZSddXG4gIH0sXG4gIGNvdWxvbWI6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0NvdWxvbWJcXCdzIGNvbnN0YW50JyxcbiAgICBleGFtcGxlczogWydjb3Vsb21iJ11cbiAgfSxcbiAgZWxlbWVudGFyeUNoYXJnZToge1xuICAgIGRlc2NyaXB0aW9uOiAnRWxlbWVudGFyeSBjaGFyZ2UnLFxuICAgIGV4YW1wbGVzOiBbJ2VsZW1lbnRhcnlDaGFyZ2UnXVxuICB9LFxuICBib2hyTWFnbmV0b246IHtcbiAgICBkZXNjcmlwdGlvbjogJ0JvcmggbWFnbmV0b24nLFxuICAgIGV4YW1wbGVzOiBbJ2JvaHJNYWduZXRvbiddXG4gIH0sXG4gIGNvbmR1Y3RhbmNlUXVhbnR1bToge1xuICAgIGRlc2NyaXB0aW9uOiAnQ29uZHVjdGFuY2UgcXVhbnR1bScsXG4gICAgZXhhbXBsZXM6IFsnY29uZHVjdGFuY2VRdWFudHVtJ11cbiAgfSxcbiAgaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bToge1xuICAgIGRlc2NyaXB0aW9uOiAnSW52ZXJzZSBjb25kdWN0YW5jZSBxdWFudHVtJyxcbiAgICBleGFtcGxlczogWydpbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtJ11cbiAgfSxcbiAgLy8gam9zZXBoc29uOiB7ZGVzY3JpcHRpb246ICdKb3NlcGhzb24gY29uc3RhbnQnLCBleGFtcGxlczogWydqb3NlcGhzb24nXX0sXG4gIG1hZ25ldGljRmx1eFF1YW50dW06IHtcbiAgICBkZXNjcmlwdGlvbjogJ01hZ25ldGljIGZsdXggcXVhbnR1bScsXG4gICAgZXhhbXBsZXM6IFsnbWFnbmV0aWNGbHV4UXVhbnR1bSddXG4gIH0sXG4gIG51Y2xlYXJNYWduZXRvbjoge1xuICAgIGRlc2NyaXB0aW9uOiAnTnVjbGVhciBtYWduZXRvbicsXG4gICAgZXhhbXBsZXM6IFsnbnVjbGVhck1hZ25ldG9uJ11cbiAgfSxcbiAga2xpdHppbmc6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1ZvbiBLbGl0emluZyBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsna2xpdHppbmcnXVxuICB9LFxuICBib2hyUmFkaXVzOiB7XG4gICAgZGVzY3JpcHRpb246ICdCb3JoIHJhZGl1cycsXG4gICAgZXhhbXBsZXM6IFsnYm9oclJhZGl1cyddXG4gIH0sXG4gIGNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzOiB7XG4gICAgZGVzY3JpcHRpb246ICdDbGFzc2ljYWwgZWxlY3Ryb24gcmFkaXVzJyxcbiAgICBleGFtcGxlczogWydjbGFzc2ljYWxFbGVjdHJvblJhZGl1cyddXG4gIH0sXG4gIGVsZWN0cm9uTWFzczoge1xuICAgIGRlc2NyaXB0aW9uOiAnRWxlY3Ryb24gbWFzcycsXG4gICAgZXhhbXBsZXM6IFsnZWxlY3Ryb25NYXNzJ11cbiAgfSxcbiAgZmVybWlDb3VwbGluZzoge1xuICAgIGRlc2NyaXB0aW9uOiAnRmVybWkgY291cGxpbmcgY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ2Zlcm1pQ291cGxpbmcnXVxuICB9LFxuICBmaW5lU3RydWN0dXJlOiB7XG4gICAgZGVzY3JpcHRpb246ICdGaW5lLXN0cnVjdHVyZSBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsnZmluZVN0cnVjdHVyZSddXG4gIH0sXG4gIGhhcnRyZWVFbmVyZ3k6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0hhcnRyZWUgZW5lcmd5JyxcbiAgICBleGFtcGxlczogWydoYXJ0cmVlRW5lcmd5J11cbiAgfSxcbiAgcHJvdG9uTWFzczoge1xuICAgIGRlc2NyaXB0aW9uOiAnUHJvdG9uIG1hc3MnLFxuICAgIGV4YW1wbGVzOiBbJ3Byb3Rvbk1hc3MnXVxuICB9LFxuICBkZXV0ZXJvbk1hc3M6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0RldXRlcm9uIE1hc3MnLFxuICAgIGV4YW1wbGVzOiBbJ2RldXRlcm9uTWFzcyddXG4gIH0sXG4gIG5ldXRyb25NYXNzOiB7XG4gICAgZGVzY3JpcHRpb246ICdOZXV0cm9uIG1hc3MnLFxuICAgIGV4YW1wbGVzOiBbJ25ldXRyb25NYXNzJ11cbiAgfSxcbiAgcXVhbnR1bU9mQ2lyY3VsYXRpb246IHtcbiAgICBkZXNjcmlwdGlvbjogJ1F1YW50dW0gb2YgY2lyY3VsYXRpb24nLFxuICAgIGV4YW1wbGVzOiBbJ3F1YW50dW1PZkNpcmN1bGF0aW9uJ11cbiAgfSxcbiAgcnlkYmVyZzoge1xuICAgIGRlc2NyaXB0aW9uOiAnUnlkYmVyZyBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsncnlkYmVyZyddXG4gIH0sXG4gIHRob21zb25Dcm9zc1NlY3Rpb246IHtcbiAgICBkZXNjcmlwdGlvbjogJ1Rob21zb24gY3Jvc3Mgc2VjdGlvbicsXG4gICAgZXhhbXBsZXM6IFsndGhvbXNvbkNyb3NzU2VjdGlvbiddXG4gIH0sXG4gIHdlYWtNaXhpbmdBbmdsZToge1xuICAgIGRlc2NyaXB0aW9uOiAnV2VhayBtaXhpbmcgYW5nbGUnLFxuICAgIGV4YW1wbGVzOiBbJ3dlYWtNaXhpbmdBbmdsZSddXG4gIH0sXG4gIGVmaW1vdkZhY3Rvcjoge1xuICAgIGRlc2NyaXB0aW9uOiAnRWZpbW92IGZhY3RvcicsXG4gICAgZXhhbXBsZXM6IFsnZWZpbW92RmFjdG9yJ11cbiAgfSxcbiAgYXRvbWljTWFzczoge1xuICAgIGRlc2NyaXB0aW9uOiAnQXRvbWljIG1hc3MgY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ2F0b21pY01hc3MnXVxuICB9LFxuICBhdm9nYWRybzoge1xuICAgIGRlc2NyaXB0aW9uOiAnQXZvZ2Fkcm9cXCdzIG51bWJlcicsXG4gICAgZXhhbXBsZXM6IFsnYXZvZ2Fkcm8nXVxuICB9LFxuICBib2x0em1hbm46IHtcbiAgICBkZXNjcmlwdGlvbjogJ0JvbHR6bWFubiBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsnYm9sdHptYW5uJ11cbiAgfSxcbiAgZmFyYWRheToge1xuICAgIGRlc2NyaXB0aW9uOiAnRmFyYWRheSBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsnZmFyYWRheSddXG4gIH0sXG4gIGZpcnN0UmFkaWF0aW9uOiB7XG4gICAgZGVzY3JpcHRpb246ICdGaXJzdCByYWRpYXRpb24gY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ2ZpcnN0UmFkaWF0aW9uJ11cbiAgfSxcbiAgbG9zY2htaWR0OiB7XG4gICAgZGVzY3JpcHRpb246ICdMb3NjaG1pZHQgY29uc3RhbnQgYXQgVD0yNzMuMTUgSyBhbmQgcD0xMDEuMzI1IGtQYScsXG4gICAgZXhhbXBsZXM6IFsnbG9zY2htaWR0J11cbiAgfSxcbiAgZ2FzQ29uc3RhbnQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0dhcyBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsnZ2FzQ29uc3RhbnQnXVxuICB9LFxuICBtb2xhclBsYW5ja0NvbnN0YW50OiB7XG4gICAgZGVzY3JpcHRpb246ICdNb2xhciBQbGFuY2sgY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ21vbGFyUGxhbmNrQ29uc3RhbnQnXVxuICB9LFxuICBtb2xhclZvbHVtZToge1xuICAgIGRlc2NyaXB0aW9uOiAnTW9sYXIgdm9sdW1lIG9mIGFuIGlkZWFsIGdhcyBhdCBUPTI3My4xNSBLIGFuZCBwPTEwMS4zMjUga1BhJyxcbiAgICBleGFtcGxlczogWydtb2xhclZvbHVtZSddXG4gIH0sXG4gIHNhY2t1clRldHJvZGU6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1NhY2t1ci1UZXRyb2RlIGNvbnN0YW50IGF0IFQ9MSBLIGFuZCBwPTEwMS4zMjUga1BhJyxcbiAgICBleGFtcGxlczogWydzYWNrdXJUZXRyb2RlJ11cbiAgfSxcbiAgc2Vjb25kUmFkaWF0aW9uOiB7XG4gICAgZGVzY3JpcHRpb246ICdTZWNvbmQgcmFkaWF0aW9uIGNvbnN0YW50JyxcbiAgICBleGFtcGxlczogWydzZWNvbmRSYWRpYXRpb24nXVxuICB9LFxuICBzdGVmYW5Cb2x0em1hbm46IHtcbiAgICBkZXNjcmlwdGlvbjogJ1N0ZWZhbi1Cb2x0em1hbm4gY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ3N0ZWZhbkJvbHR6bWFubiddXG4gIH0sXG4gIHdpZW5EaXNwbGFjZW1lbnQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1dpZW4gZGlzcGxhY2VtZW50IGxhdyBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsnd2llbkRpc3BsYWNlbWVudCddXG4gIH0sXG4gIC8vIHNwZWN0cmFsUmFkaWFuY2U6IHtkZXNjcmlwdGlvbjogJ0ZpcnN0IHJhZGlhdGlvbiBjb25zdGFudCBmb3Igc3BlY3RyYWwgcmFkaWFuY2UnLCBleGFtcGxlczogWydzcGVjdHJhbFJhZGlhbmNlJ119LFxuICBtb2xhck1hc3M6IHtcbiAgICBkZXNjcmlwdGlvbjogJ01vbGFyIG1hc3MgY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ21vbGFyTWFzcyddXG4gIH0sXG4gIG1vbGFyTWFzc0MxMjoge1xuICAgIGRlc2NyaXB0aW9uOiAnTW9sYXIgbWFzcyBjb25zdGFudCBvZiBjYXJib24tMTInLFxuICAgIGV4YW1wbGVzOiBbJ21vbGFyTWFzc0MxMiddXG4gIH0sXG4gIGdyYXZpdHk6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1N0YW5kYXJkIGFjY2VsZXJhdGlvbiBvZiBncmF2aXR5IChzdGFuZGFyZCBhY2NlbGVyYXRpb24gb2YgZnJlZS1mYWxsIG9uIEVhcnRoKScsXG4gICAgZXhhbXBsZXM6IFsnZ3Jhdml0eSddXG4gIH0sXG4gIHBsYW5ja0xlbmd0aDoge1xuICAgIGRlc2NyaXB0aW9uOiAnUGxhbmNrIGxlbmd0aCcsXG4gICAgZXhhbXBsZXM6IFsncGxhbmNrTGVuZ3RoJ11cbiAgfSxcbiAgcGxhbmNrTWFzczoge1xuICAgIGRlc2NyaXB0aW9uOiAnUGxhbmNrIG1hc3MnLFxuICAgIGV4YW1wbGVzOiBbJ3BsYW5ja01hc3MnXVxuICB9LFxuICBwbGFuY2tUaW1lOiB7XG4gICAgZGVzY3JpcHRpb246ICdQbGFuY2sgdGltZScsXG4gICAgZXhhbXBsZXM6IFsncGxhbmNrVGltZSddXG4gIH0sXG4gIHBsYW5ja0NoYXJnZToge1xuICAgIGRlc2NyaXB0aW9uOiAnUGxhbmNrIGNoYXJnZScsXG4gICAgZXhhbXBsZXM6IFsncGxhbmNrQ2hhcmdlJ11cbiAgfSxcbiAgcGxhbmNrVGVtcGVyYXR1cmU6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1BsYW5jayB0ZW1wZXJhdHVyZScsXG4gICAgZXhhbXBsZXM6IFsncGxhbmNrVGVtcGVyYXR1cmUnXVxuICB9LFxuICAvLyBmdW5jdGlvbnMgLSBhbGdlYnJhXG4gIGRlcml2YXRpdmU6IF9kZXJpdmF0aXZlLmRlcml2YXRpdmVEb2NzLFxuICBsc29sdmU6IF9sc29sdmUubHNvbHZlRG9jcyxcbiAgbHVwOiBfbHVwLmx1cERvY3MsXG4gIGx1c29sdmU6IF9sdXNvbHZlLmx1c29sdmVEb2NzLFxuICBzaW1wbGlmeTogX3NpbXBsaWZ5LnNpbXBsaWZ5RG9jcyxcbiAgcmF0aW9uYWxpemU6IF9yYXRpb25hbGl6ZS5yYXRpb25hbGl6ZURvY3MsXG4gIHNsdTogX3NsdS5zbHVEb2NzLFxuICB1c29sdmU6IF91c29sdmUudXNvbHZlRG9jcyxcbiAgcXI6IF9xci5xckRvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIGFyaXRobWV0aWNcbiAgYWJzOiBfYWJzLmFic0RvY3MsXG4gIGFkZDogX2FkZC5hZGREb2NzLFxuICBjYnJ0OiBfY2JydC5jYnJ0RG9jcyxcbiAgY2VpbDogX2NlaWwuY2VpbERvY3MsXG4gIGN1YmU6IF9jdWJlLmN1YmVEb2NzLFxuICBkaXZpZGU6IF9kaXZpZGUuZGl2aWRlRG9jcyxcbiAgZG90RGl2aWRlOiBfZG90RGl2aWRlLmRvdERpdmlkZURvY3MsXG4gIGRvdE11bHRpcGx5OiBfZG90TXVsdGlwbHkuZG90TXVsdGlwbHlEb2NzLFxuICBkb3RQb3c6IF9kb3RQb3cuZG90UG93RG9jcyxcbiAgZXhwOiBfZXhwLmV4cERvY3MsXG4gIGV4cG06IF9leHBtMi5leHBtRG9jcyxcbiAgZXhwbTE6IF9leHBtLmV4cG0xRG9jcyxcbiAgZml4OiBfZml4LmZpeERvY3MsXG4gIGZsb29yOiBfZmxvb3IuZmxvb3JEb2NzLFxuICBnY2Q6IF9nY2QuZ2NkRG9jcyxcbiAgaHlwb3Q6IF9oeXBvdC5oeXBvdERvY3MsXG4gIGxjbTogX2xjbS5sY21Eb2NzLFxuICBsb2c6IF9sb2czLmxvZ0RvY3MsXG4gIGxvZzI6IF9sb2cyLmxvZzJEb2NzLFxuICBsb2cxcDogX2xvZzFwLmxvZzFwRG9jcyxcbiAgbG9nMTA6IF9sb2cubG9nMTBEb2NzLFxuICBtb2Q6IF9tb2QubW9kRG9jcyxcbiAgbXVsdGlwbHk6IF9tdWx0aXBseS5tdWx0aXBseURvY3MsXG4gIG5vcm06IF9ub3JtLm5vcm1Eb2NzLFxuICBudGhSb290OiBfbnRoUm9vdC5udGhSb290RG9jcyxcbiAgbnRoUm9vdHM6IF9udGhSb290cy5udGhSb290c0RvY3MsXG4gIHBvdzogX3Bvdy5wb3dEb2NzLFxuICByb3VuZDogX3JvdW5kLnJvdW5kRG9jcyxcbiAgc2lnbjogX3NpZ24uc2lnbkRvY3MsXG4gIHNxcnQ6IF9zcXJ0LnNxcnREb2NzLFxuICBzcXJ0bTogX3NxcnRtLnNxcnRtRG9jcyxcbiAgc3F1YXJlOiBfc3F1YXJlLnNxdWFyZURvY3MsXG4gIHN1YnRyYWN0OiBfc3VidHJhY3Quc3VidHJhY3REb2NzLFxuICB1bmFyeU1pbnVzOiBfdW5hcnlNaW51cy51bmFyeU1pbnVzRG9jcyxcbiAgdW5hcnlQbHVzOiBfdW5hcnlQbHVzLnVuYXJ5UGx1c0RvY3MsXG4gIHhnY2Q6IF94Z2NkLnhnY2REb2NzLFxuICAvLyBmdW5jdGlvbnMgLSBiaXR3aXNlXG4gIGJpdEFuZDogX2JpdEFuZC5iaXRBbmREb2NzLFxuICBiaXROb3Q6IF9iaXROb3QuYml0Tm90RG9jcyxcbiAgYml0T3I6IF9iaXRPci5iaXRPckRvY3MsXG4gIGJpdFhvcjogX2JpdFhvci5iaXRYb3JEb2NzLFxuICBsZWZ0U2hpZnQ6IF9sZWZ0U2hpZnQubGVmdFNoaWZ0RG9jcyxcbiAgcmlnaHRBcml0aFNoaWZ0OiBfcmlnaHRBcml0aFNoaWZ0LnJpZ2h0QXJpdGhTaGlmdERvY3MsXG4gIHJpZ2h0TG9nU2hpZnQ6IF9yaWdodExvZ1NoaWZ0LnJpZ2h0TG9nU2hpZnREb2NzLFxuICAvLyBmdW5jdGlvbnMgLSBjb21iaW5hdG9yaWNzXG4gIGJlbGxOdW1iZXJzOiBfYmVsbE51bWJlcnMuYmVsbE51bWJlcnNEb2NzLFxuICBjYXRhbGFuOiBfY2F0YWxhbi5jYXRhbGFuRG9jcyxcbiAgY29tcG9zaXRpb246IF9jb21wb3NpdGlvbi5jb21wb3NpdGlvbkRvY3MsXG4gIHN0aXJsaW5nUzI6IF9zdGlybGluZ1Muc3RpcmxpbmdTMkRvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIGNvcmVcbiAgY29uZmlnOiBfY29uZmlnLmNvbmZpZ0RvY3MsXG4gIFwiaW1wb3J0XCI6IF9pbXBvcnQuaW1wb3J0RG9jcyxcbiAgdHlwZWQ6IF90eXBlZC50eXBlZERvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIGNvbXBsZXhcbiAgYXJnOiBfYXJnLmFyZ0RvY3MsXG4gIGNvbmo6IF9jb25qLmNvbmpEb2NzLFxuICByZTogX3JlLnJlRG9jcyxcbiAgaW06IF9pbS5pbURvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIGV4cHJlc3Npb25cbiAgZXZhbHVhdGU6IF9ldmFsdWF0ZS5ldmFsdWF0ZURvY3MsXG4gIGV2YWw6IF9ldmFsdWF0ZS5ldmFsdWF0ZURvY3MsXG4gIC8vIFRPRE86IGRlcHJlY2F0ZWQsIGNsZWFudXAgaW4gdjdcbiAgaGVscDogX2hlbHAuaGVscERvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIGdlb21ldHJ5XG4gIGRpc3RhbmNlOiBfZGlzdGFuY2UuZGlzdGFuY2VEb2NzLFxuICBpbnRlcnNlY3Q6IF9pbnRlcnNlY3QuaW50ZXJzZWN0RG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gbG9naWNhbFxuICBhbmQ6IF9hbmQuYW5kRG9jcyxcbiAgbm90OiBfbm90Lm5vdERvY3MsXG4gIG9yOiBfb3Iub3JEb2NzLFxuICB4b3I6IF94b3IueG9yRG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gbWF0cml4XG4gIGNvbmNhdDogX2NvbmNhdC5jb25jYXREb2NzLFxuICBjcm9zczogX2Nyb3NzLmNyb3NzRG9jcyxcbiAgY29sdW1uOiBfY29sdW1uLmNvbHVtbkRvY3MsXG4gIGN0cmFuc3Bvc2U6IF9jdHJhbnNwb3NlLmN0cmFuc3Bvc2VEb2NzLFxuICBkZXQ6IF9kZXQuZGV0RG9jcyxcbiAgZGlhZzogX2RpYWcuZGlhZ0RvY3MsXG4gIGRvdDogX2RvdC5kb3REb2NzLFxuICBnZXRNYXRyaXhEYXRhVHlwZTogX2dldE1hdHJpeERhdGFUeXBlLmdldE1hdHJpeERhdGFUeXBlRG9jcyxcbiAgaWRlbnRpdHk6IF9pZGVudGl0eS5pZGVudGl0eURvY3MsXG4gIGZpbHRlcjogX2ZpbHRlci5maWx0ZXJEb2NzLFxuICBmbGF0dGVuOiBfZmxhdHRlbi5mbGF0dGVuRG9jcyxcbiAgZm9yRWFjaDogX2ZvckVhY2guZm9yRWFjaERvY3MsXG4gIGludjogX2ludi5pbnZEb2NzLFxuICBlaWdzOiBfZWlncy5laWdzRG9jcyxcbiAga3JvbjogX2tyb24ua3JvbkRvY3MsXG4gIG1hcDogX21hcC5tYXBEb2NzLFxuICBvbmVzOiBfb25lcy5vbmVzRG9jcyxcbiAgcGFydGl0aW9uU2VsZWN0OiBfcGFydGl0aW9uU2VsZWN0LnBhcnRpdGlvblNlbGVjdERvY3MsXG4gIHJhbmdlOiBfcmFuZ2UucmFuZ2VEb2NzLFxuICByZXNpemU6IF9yZXNpemUucmVzaXplRG9jcyxcbiAgcmVzaGFwZTogX3Jlc2hhcGUucmVzaGFwZURvY3MsXG4gIHJvdzogX3Jvdy5yb3dEb2NzLFxuICBzaXplOiBfc2l6ZS5zaXplRG9jcyxcbiAgc29ydDogX3NvcnQuc29ydERvY3MsXG4gIHNxdWVlemU6IF9zcXVlZXplLnNxdWVlemVEb2NzLFxuICBzdWJzZXQ6IF9zdWJzZXQuc3Vic2V0RG9jcyxcbiAgdHJhY2U6IF90cmFjZS50cmFjZURvY3MsXG4gIHRyYW5zcG9zZTogX3RyYW5zcG9zZS50cmFuc3Bvc2VEb2NzLFxuICB6ZXJvczogX3plcm9zLnplcm9zRG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gcHJvYmFiaWxpdHlcbiAgY29tYmluYXRpb25zOiBfY29tYmluYXRpb25zLmNvbWJpbmF0aW9uc0RvY3MsXG4gIGNvbWJpbmF0aW9uc1dpdGhSZXA6IF9jb21iaW5hdGlvbnNXaXRoUmVwLmNvbWJpbmF0aW9uc1dpdGhSZXBEb2NzLFxuICAvLyBkaXN0cmlidXRpb246IGRpc3RyaWJ1dGlvbkRvY3MsXG4gIGZhY3RvcmlhbDogX2ZhY3RvcmlhbC5mYWN0b3JpYWxEb2NzLFxuICBnYW1tYTogX2dhbW1hLmdhbW1hRG9jcyxcbiAga2xkaXZlcmdlbmNlOiBfa2xkaXZlcmdlbmNlLmtsZGl2ZXJnZW5jZURvY3MsXG4gIG11bHRpbm9taWFsOiBfbXVsdGlub21pYWwubXVsdGlub21pYWxEb2NzLFxuICBwZXJtdXRhdGlvbnM6IF9wZXJtdXRhdGlvbnMucGVybXV0YXRpb25zRG9jcyxcbiAgcGlja1JhbmRvbTogX3BpY2tSYW5kb20ucGlja1JhbmRvbURvY3MsXG4gIHJhbmRvbTogX3JhbmRvbS5yYW5kb21Eb2NzLFxuICByYW5kb21JbnQ6IF9yYW5kb21JbnQucmFuZG9tSW50RG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gcmVsYXRpb25hbFxuICBjb21wYXJlOiBfY29tcGFyZS5jb21wYXJlRG9jcyxcbiAgY29tcGFyZU5hdHVyYWw6IF9jb21wYXJlTmF0dXJhbC5jb21wYXJlTmF0dXJhbERvY3MsXG4gIGNvbXBhcmVUZXh0OiBfY29tcGFyZVRleHQuY29tcGFyZVRleHREb2NzLFxuICBkZWVwRXF1YWw6IF9kZWVwRXF1YWwuZGVlcEVxdWFsRG9jcyxcbiAgZXF1YWw6IF9lcXVhbC5lcXVhbERvY3MsXG4gIGVxdWFsVGV4dDogX2VxdWFsVGV4dC5lcXVhbFRleHREb2NzLFxuICBsYXJnZXI6IF9sYXJnZXIubGFyZ2VyRG9jcyxcbiAgbGFyZ2VyRXE6IF9sYXJnZXJFcS5sYXJnZXJFcURvY3MsXG4gIHNtYWxsZXI6IF9zbWFsbGVyLnNtYWxsZXJEb2NzLFxuICBzbWFsbGVyRXE6IF9zbWFsbGVyRXEuc21hbGxlckVxRG9jcyxcbiAgdW5lcXVhbDogX3VuZXF1YWwudW5lcXVhbERvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIHNldFxuICBzZXRDYXJ0ZXNpYW46IF9zZXRDYXJ0ZXNpYW4uc2V0Q2FydGVzaWFuRG9jcyxcbiAgc2V0RGlmZmVyZW5jZTogX3NldERpZmZlcmVuY2Uuc2V0RGlmZmVyZW5jZURvY3MsXG4gIHNldERpc3RpbmN0OiBfc2V0RGlzdGluY3Quc2V0RGlzdGluY3REb2NzLFxuICBzZXRJbnRlcnNlY3Q6IF9zZXRJbnRlcnNlY3Quc2V0SW50ZXJzZWN0RG9jcyxcbiAgc2V0SXNTdWJzZXQ6IF9zZXRJc1N1YnNldC5zZXRJc1N1YnNldERvY3MsXG4gIHNldE11bHRpcGxpY2l0eTogX3NldE11bHRpcGxpY2l0eS5zZXRNdWx0aXBsaWNpdHlEb2NzLFxuICBzZXRQb3dlcnNldDogX3NldFBvd2Vyc2V0LnNldFBvd2Vyc2V0RG9jcyxcbiAgc2V0U2l6ZTogX3NldFNpemUuc2V0U2l6ZURvY3MsXG4gIHNldFN5bURpZmZlcmVuY2U6IF9zZXRTeW1EaWZmZXJlbmNlLnNldFN5bURpZmZlcmVuY2VEb2NzLFxuICBzZXRVbmlvbjogX3NldFVuaW9uLnNldFVuaW9uRG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gc3BlY2lhbFxuICBlcmY6IF9lcmYuZXJmRG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gc3RhdGlzdGljc1xuICBtYWQ6IF9tYWQubWFkRG9jcyxcbiAgbWF4OiBfbWF4Lm1heERvY3MsXG4gIG1lYW46IF9tZWFuLm1lYW5Eb2NzLFxuICBtZWRpYW46IF9tZWRpYW4ubWVkaWFuRG9jcyxcbiAgbWluOiBfbWluLm1pbkRvY3MsXG4gIG1vZGU6IF9tb2RlLm1vZGVEb2NzLFxuICBwcm9kOiBfcHJvZC5wcm9kRG9jcyxcbiAgcXVhbnRpbGVTZXE6IF9xdWFudGlsZVNlcS5xdWFudGlsZVNlcURvY3MsXG4gIHN0ZDogX3N0ZC5zdGREb2NzLFxuICBzdW06IF9zdW0uc3VtRG9jcyxcbiAgdmFyaWFuY2U6IF92YXJpYW5jZS52YXJpYW5jZURvY3MsXG4gIFwidmFyXCI6IF92YXJpYW5jZS52YXJpYW5jZURvY3MsXG4gIC8vIFRPRE86IGRlcHJlY2F0ZWQsIGNsZWFudXAgaW4gdjdcbiAgLy8gZnVuY3Rpb25zIC0gdHJpZ29ub21ldHJ5XG4gIGFjb3M6IF9hY29zLmFjb3NEb2NzLFxuICBhY29zaDogX2Fjb3NoLmFjb3NoRG9jcyxcbiAgYWNvdDogX2Fjb3QuYWNvdERvY3MsXG4gIGFjb3RoOiBfYWNvdGguYWNvdGhEb2NzLFxuICBhY3NjOiBfYWNzYy5hY3NjRG9jcyxcbiAgYWNzY2g6IF9hY3NjaC5hY3NjaERvY3MsXG4gIGFzZWM6IF9hc2VjLmFzZWNEb2NzLFxuICBhc2VjaDogX2FzZWNoLmFzZWNoRG9jcyxcbiAgYXNpbjogX2FzaW4uYXNpbkRvY3MsXG4gIGFzaW5oOiBfYXNpbmguYXNpbmhEb2NzLFxuICBhdGFuOiBfYXRhbjIuYXRhbkRvY3MsXG4gIGF0YW5oOiBfYXRhbmguYXRhbmhEb2NzLFxuICBhdGFuMjogX2F0YW4uYXRhbjJEb2NzLFxuICBjb3M6IF9jb3MuY29zRG9jcyxcbiAgY29zaDogX2Nvc2guY29zaERvY3MsXG4gIGNvdDogX2NvdC5jb3REb2NzLFxuICBjb3RoOiBfY290aC5jb3RoRG9jcyxcbiAgY3NjOiBfY3NjLmNzY0RvY3MsXG4gIGNzY2g6IF9jc2NoLmNzY2hEb2NzLFxuICBzZWM6IF9zZWMuc2VjRG9jcyxcbiAgc2VjaDogX3NlY2guc2VjaERvY3MsXG4gIHNpbjogX3Npbi5zaW5Eb2NzLFxuICBzaW5oOiBfc2luaC5zaW5oRG9jcyxcbiAgdGFuOiBfdGFuLnRhbkRvY3MsXG4gIHRhbmg6IF90YW5oLnRhbmhEb2NzLFxuICAvLyBmdW5jdGlvbnMgLSB1bml0c1xuICB0bzogX3RvLnRvRG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gdXRpbHNcbiAgY2xvbmU6IF9jbG9uZS5jbG9uZURvY3MsXG4gIGZvcm1hdDogX2Zvcm1hdC5mb3JtYXREb2NzLFxuICBpc05hTjogX2lzTmFOLmlzTmFORG9jcyxcbiAgaXNJbnRlZ2VyOiBfaXNJbnRlZ2VyLmlzSW50ZWdlckRvY3MsXG4gIGlzTmVnYXRpdmU6IF9pc05lZ2F0aXZlLmlzTmVnYXRpdmVEb2NzLFxuICBpc051bWVyaWM6IF9pc051bWVyaWMuaXNOdW1lcmljRG9jcyxcbiAgaGFzTnVtZXJpY1ZhbHVlOiBfaGFzTnVtZXJpY1ZhbHVlLmhhc051bWVyaWNWYWx1ZURvY3MsXG4gIGlzUG9zaXRpdmU6IF9pc1Bvc2l0aXZlLmlzUG9zaXRpdmVEb2NzLFxuICBpc1ByaW1lOiBfaXNQcmltZS5pc1ByaW1lRG9jcyxcbiAgaXNaZXJvOiBfaXNaZXJvLmlzWmVyb0RvY3MsXG4gIC8vIHByaW50OiBwcmludERvY3MgLy8gVE9ETzogYWRkIGRvY3VtZW50YXRpb24gZm9yIHByaW50IGFzIHNvb24gYXMgdGhlIHBhcnNlciBzdXBwb3J0cyBvYmplY3RzLlxuICB0eXBlT2Y6IF90eXBlT2YudHlwZU9mRG9jcyxcbiAgXCJ0eXBlb2ZcIjogX3R5cGVPZi50eXBlT2ZEb2NzLFxuICAvLyBUT0RPOiBkZXByZWNhdGVkLCBjbGVhbnVwIGluIHY3XG4gIG51bWVyaWM6IF9udW1lcmljLm51bWVyaWNEb2NzXG59O1xuZXhwb3J0cy5lbWJlZGRlZERvY3MgPSBlbWJlZGRlZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlcml2YXRpdmVEb2NzID0gdm9pZCAwO1xudmFyIGRlcml2YXRpdmVEb2NzID0ge1xuICBuYW1lOiAnZGVyaXZhdGl2ZScsXG4gIGNhdGVnb3J5OiAnQWxnZWJyYScsXG4gIHN5bnRheDogWydkZXJpdmF0aXZlKGV4cHIsIHZhcmlhYmxlKScsICdkZXJpdmF0aXZlKGV4cHIsIHZhcmlhYmxlLCB7c2ltcGxpZnk6IGJvb2xlYW59KSddLFxuICBkZXNjcmlwdGlvbjogJ1Rha2VzIHRoZSBkZXJpdmF0aXZlIG9mIGFuIGV4cHJlc3Npb24gZXhwcmVzc2VkIGluIHBhcnNlciBOb2Rlcy4gVGhlIGRlcml2YXRpdmUgd2lsbCBiZSB0YWtlbiBvdmVyIHRoZSBzdXBwbGllZCB2YXJpYWJsZSBpbiB0aGUgc2Vjb25kIHBhcmFtZXRlci4gSWYgdGhlcmUgYXJlIG11bHRpcGxlIHZhcmlhYmxlcyBpbiB0aGUgZXhwcmVzc2lvbiwgaXQgd2lsbCByZXR1cm4gYSBwYXJ0aWFsIGRlcml2YXRpdmUuJyxcbiAgZXhhbXBsZXM6IFsnZGVyaXZhdGl2ZShcIjJ4XjNcIiwgXCJ4XCIpJywgJ2Rlcml2YXRpdmUoXCIyeF4zXCIsIFwieFwiLCB7c2ltcGxpZnk6IGZhbHNlfSknLCAnZGVyaXZhdGl2ZShcIjJ4XjIgKyAzeCArIDRcIiwgXCJ4XCIpJywgJ2Rlcml2YXRpdmUoXCJzaW4oMngpXCIsIFwieFwiKScsICdmID0gcGFyc2UoXCJ4XjIgKyB4XCIpJywgJ3ggPSBwYXJzZShcInhcIiknLCAnZGYgPSBkZXJpdmF0aXZlKGYsIHgpJywgJ2RmLmV2YWx1YXRlKHt4OiAzfSknXSxcbiAgc2VlYWxzbzogWydzaW1wbGlmeScsICdwYXJzZScsICdldmFsdWF0ZSddXG59O1xuZXhwb3J0cy5kZXJpdmF0aXZlRG9jcyA9IGRlcml2YXRpdmVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sc29sdmVEb2NzID0gdm9pZCAwO1xudmFyIGxzb2x2ZURvY3MgPSB7XG4gIG5hbWU6ICdsc29sdmUnLFxuICBjYXRlZ29yeTogJ0FsZ2VicmEnLFxuICBzeW50YXg6IFsneD1sc29sdmUoTCwgYiknXSxcbiAgZGVzY3JpcHRpb246ICdTb2x2ZXMgdGhlIGxpbmVhciBzeXN0ZW0gTCAqIHggPSBiIHdoZXJlIEwgaXMgYW4gW24geCBuXSBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeCBhbmQgYiBpcyBhIFtuXSBjb2x1bW4gdmVjdG9yLicsXG4gIGV4YW1wbGVzOiBbJ2EgPSBbLTIsIDM7IDIsIDFdJywgJ2IgPSBbMTEsIDldJywgJ3ggPSBsc29sdmUoYSwgYiknXSxcbiAgc2VlYWxzbzogWydsdXAnLCAnbHVzb2x2ZScsICd1c29sdmUnLCAnbWF0cml4JywgJ3NwYXJzZSddXG59O1xuZXhwb3J0cy5sc29sdmVEb2NzID0gbHNvbHZlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubHVwRG9jcyA9IHZvaWQgMDtcbnZhciBsdXBEb2NzID0ge1xuICBuYW1lOiAnbHVwJyxcbiAgY2F0ZWdvcnk6ICdBbGdlYnJhJyxcbiAgc3ludGF4OiBbJ2x1cChtKSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgTWF0cml4IExVIGRlY29tcG9zaXRpb24gd2l0aCBwYXJ0aWFsIHBpdm90aW5nLiBNYXRyaXggQSBpcyBkZWNvbXBvc2VkIGluIHRocmVlIG1hdHJpY2VzIChMLCBVLCBQKSB3aGVyZSBQICogQSA9IEwgKiBVJyxcbiAgZXhhbXBsZXM6IFsnbHVwKFtbMiwgMV0sIFsxLCA0XV0pJywgJ2x1cChtYXRyaXgoW1syLCAxXSwgWzEsIDRdXSkpJywgJ2x1cChzcGFyc2UoW1syLCAxXSwgWzEsIDRdXSkpJ10sXG4gIHNlZWFsc286IFsnbHVzb2x2ZScsICdsc29sdmUnLCAndXNvbHZlJywgJ21hdHJpeCcsICdzcGFyc2UnLCAnc2x1JywgJ3FyJ11cbn07XG5leHBvcnRzLmx1cERvY3MgPSBsdXBEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sdXNvbHZlRG9jcyA9IHZvaWQgMDtcbnZhciBsdXNvbHZlRG9jcyA9IHtcbiAgbmFtZTogJ2x1c29sdmUnLFxuICBjYXRlZ29yeTogJ0FsZ2VicmEnLFxuICBzeW50YXg6IFsneD1sdXNvbHZlKEEsIGIpJywgJ3g9bHVzb2x2ZShsdSwgYiknXSxcbiAgZGVzY3JpcHRpb246ICdTb2x2ZXMgdGhlIGxpbmVhciBzeXN0ZW0gQSAqIHggPSBiIHdoZXJlIEEgaXMgYW4gW24geCBuXSBtYXRyaXggYW5kIGIgaXMgYSBbbl0gY29sdW1uIHZlY3Rvci4nLFxuICBleGFtcGxlczogWydhID0gWy0yLCAzOyAyLCAxXScsICdiID0gWzExLCA5XScsICd4ID0gbHVzb2x2ZShhLCBiKSddLFxuICBzZWVhbHNvOiBbJ2x1cCcsICdzbHUnLCAnbHNvbHZlJywgJ3Vzb2x2ZScsICdtYXRyaXgnLCAnc3BhcnNlJ11cbn07XG5leHBvcnRzLmx1c29sdmVEb2NzID0gbHVzb2x2ZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnFyRG9jcyA9IHZvaWQgMDtcbnZhciBxckRvY3MgPSB7XG4gIG5hbWU6ICdxcicsXG4gIGNhdGVnb3J5OiAnQWxnZWJyYScsXG4gIHN5bnRheDogWydxcihBKSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZXMgdGhlIE1hdHJpeCBRUiBkZWNvbXBvc2l0aW9uLiBNYXRyaXggYEFgIGlzIGRlY29tcG9zZWQgaW4gdHdvIG1hdHJpY2VzIChgUWAsIGBSYCkgd2hlcmUgYFFgIGlzIGFuIG9ydGhvZ29uYWwgbWF0cml4IGFuZCBgUmAgaXMgYW4gdXBwZXIgdHJpYW5ndWxhciBtYXRyaXguJyxcbiAgZXhhbXBsZXM6IFsncXIoW1sxLCAtMSwgIDRdLCBbMSwgIDQsIC0yXSwgWzEsICA0LCAgMl0sIFsxLCAgLTEsIDBdXSknXSxcbiAgc2VlYWxzbzogWydsdXAnLCAnc2x1JywgJ21hdHJpeCddXG59O1xuZXhwb3J0cy5xckRvY3MgPSBxckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJhdGlvbmFsaXplRG9jcyA9IHZvaWQgMDtcbnZhciByYXRpb25hbGl6ZURvY3MgPSB7XG4gIG5hbWU6ICdyYXRpb25hbGl6ZScsXG4gIGNhdGVnb3J5OiAnQWxnZWJyYScsXG4gIHN5bnRheDogWydyYXRpb25hbGl6ZShleHByKScsICdyYXRpb25hbGl6ZShleHByLCBzY29wZSknLCAncmF0aW9uYWxpemUoZXhwciwgc2NvcGUsIGRldGFpbGVkKSddLFxuICBkZXNjcmlwdGlvbjogJ1RyYW5zZm9ybSBhIHJhdGlvbmFsaXphYmxlIGV4cHJlc3Npb24gaW4gYSByYXRpb25hbCBmcmFjdGlvbi4gSWYgcmF0aW9uYWwgZnJhY3Rpb24gaXMgb25lIHZhcmlhYmxlIHBvbHlub21pYWwgdGhlbiBjb252ZXJ0cyB0aGUgbnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvciBpbiBjYW5vbmljYWwgZm9ybSwgd2l0aCBkZWNyZWFzaW5nIGV4cG9uZW50cywgcmV0dXJuaW5nIHRoZSBjb2VmZmljaWVudHMgb2YgbnVtZXJhdG9yLicsXG4gIGV4YW1wbGVzOiBbJ3JhdGlvbmFsaXplKFwiMngveSAtIHkvKHgrMSlcIiknLCAncmF0aW9uYWxpemUoXCIyeC95IC0geS8oeCsxKVwiLCB0cnVlKSddLFxuICBzZWVhbHNvOiBbJ3NpbXBsaWZ5J11cbn07XG5leHBvcnRzLnJhdGlvbmFsaXplRG9jcyA9IHJhdGlvbmFsaXplRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2ltcGxpZnlEb2NzID0gdm9pZCAwO1xudmFyIHNpbXBsaWZ5RG9jcyA9IHtcbiAgbmFtZTogJ3NpbXBsaWZ5JyxcbiAgY2F0ZWdvcnk6ICdBbGdlYnJhJyxcbiAgc3ludGF4OiBbJ3NpbXBsaWZ5KGV4cHIpJywgJ3NpbXBsaWZ5KGV4cHIsIHJ1bGVzKSddLFxuICBkZXNjcmlwdGlvbjogJ1NpbXBsaWZ5IGFuIGV4cHJlc3Npb24gdHJlZS4nLFxuICBleGFtcGxlczogWydzaW1wbGlmeShcIjMgKyAyIC8gNFwiKScsICdzaW1wbGlmeShcIjJ4ICsgeFwiKScsICdmID0gcGFyc2UoXCJ4ICogKHggKyAyICsgeClcIiknLCAnc2ltcGxpZmllZCA9IHNpbXBsaWZ5KGYpJywgJ3NpbXBsaWZpZWQuZXZhbHVhdGUoe3g6IDJ9KSddLFxuICBzZWVhbHNvOiBbJ2Rlcml2YXRpdmUnLCAncGFyc2UnLCAnZXZhbHVhdGUnXVxufTtcbmV4cG9ydHMuc2ltcGxpZnlEb2NzID0gc2ltcGxpZnlEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zbHVEb2NzID0gdm9pZCAwO1xudmFyIHNsdURvY3MgPSB7XG4gIG5hbWU6ICdzbHUnLFxuICBjYXRlZ29yeTogJ0FsZ2VicmEnLFxuICBzeW50YXg6IFsnc2x1KEEsIG9yZGVyLCB0aHJlc2hvbGQpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBNYXRyaXggTFUgZGVjb21wb3NpdGlvbiB3aXRoIGZ1bGwgcGl2b3RpbmcuIE1hdHJpeCBBIGlzIGRlY29tcG9zZWQgaW4gdHdvIG1hdHJpY2VzIChMLCBVKSBhbmQgdHdvIHBlcm11dGF0aW9uIHZlY3RvcnMgKHBpbnYsIHEpIHdoZXJlIFAgKiBBICogUSA9IEwgKiBVJyxcbiAgZXhhbXBsZXM6IFsnc2x1KHNwYXJzZShbNC41LCAwLCAzLjIsIDA7IDMuMSwgMi45LCAwLCAwLjk7IDAsIDEuNywgMywgMDsgMy41LCAwLjQsIDAsIDFdKSwgMSwgMC4wMDEpJ10sXG4gIHNlZWFsc286IFsnbHVzb2x2ZScsICdsc29sdmUnLCAndXNvbHZlJywgJ21hdHJpeCcsICdzcGFyc2UnLCAnbHVwJywgJ3FyJ11cbn07XG5leHBvcnRzLnNsdURvY3MgPSBzbHVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy51c29sdmVEb2NzID0gdm9pZCAwO1xudmFyIHVzb2x2ZURvY3MgPSB7XG4gIG5hbWU6ICd1c29sdmUnLFxuICBjYXRlZ29yeTogJ0FsZ2VicmEnLFxuICBzeW50YXg6IFsneD11c29sdmUoVSwgYiknXSxcbiAgZGVzY3JpcHRpb246ICdTb2x2ZXMgdGhlIGxpbmVhciBzeXN0ZW0gVSAqIHggPSBiIHdoZXJlIFUgaXMgYW4gW24geCBuXSB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeCBhbmQgYiBpcyBhIFtuXSBjb2x1bW4gdmVjdG9yLicsXG4gIGV4YW1wbGVzOiBbJ3g9dXNvbHZlKHNwYXJzZShbMSwgMSwgMSwgMTsgMCwgMSwgMSwgMTsgMCwgMCwgMSwgMTsgMCwgMCwgMCwgMV0pLCBbMTsgMjsgMzsgNF0pJ10sXG4gIHNlZWFsc286IFsnbHVwJywgJ2x1c29sdmUnLCAnbHNvbHZlJywgJ21hdHJpeCcsICdzcGFyc2UnXVxufTtcbmV4cG9ydHMudXNvbHZlRG9jcyA9IHVzb2x2ZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFic0RvY3MgPSB2b2lkIDA7XG52YXIgYWJzRG9jcyA9IHtcbiAgbmFtZTogJ2FicycsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydhYnMoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBhYnNvbHV0ZSB2YWx1ZS4nLFxuICBleGFtcGxlczogWydhYnMoMy41KScsICdhYnMoLTQuMiknXSxcbiAgc2VlYWxzbzogWydzaWduJ11cbn07XG5leHBvcnRzLmFic0RvY3MgPSBhYnNEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hZGREb2NzID0gdm9pZCAwO1xudmFyIGFkZERvY3MgPSB7XG4gIG5hbWU6ICdhZGQnLFxuICBjYXRlZ29yeTogJ09wZXJhdG9ycycsXG4gIHN5bnRheDogWyd4ICsgeScsICdhZGQoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdBZGQgdHdvIHZhbHVlcy4nLFxuICBleGFtcGxlczogWydhID0gMi4xICsgMy42JywgJ2EgLSAzLjYnLCAnMyArIDJpJywgJzMgY20gKyAyIGluY2gnLCAnXCIyLjNcIiArIFwiNFwiJ10sXG4gIHNlZWFsc286IFsnc3VidHJhY3QnXVxufTtcbmV4cG9ydHMuYWRkRG9jcyA9IGFkZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNicnREb2NzID0gdm9pZCAwO1xudmFyIGNicnREb2NzID0ge1xuICBuYW1lOiAnY2JydCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydjYnJ0KHgpJywgJ2NicnQoeCwgYWxsUm9vdHMpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgY3ViaWMgcm9vdCB2YWx1ZS4gSWYgeCA9IHkgKiB5ICogeSwgdGhlbiB5IGlzIHRoZSBjdWJpYyByb290IG9mIHguIFdoZW4gYHhgIGlzIGEgbnVtYmVyIG9yIGNvbXBsZXggbnVtYmVyLCBhbiBvcHRpb25hbCBzZWNvbmQgYXJndW1lbnQgYGFsbFJvb3RzYCBjYW4gYmUgcHJvdmlkZWQgdG8gcmV0dXJuIGFsbCB0aHJlZSBjdWJpYyByb290cy4gSWYgbm90IHByb3ZpZGVkLCB0aGUgcHJpbmNpcGFsIHJvb3QgaXMgcmV0dXJuZWQnLFxuICBleGFtcGxlczogWydjYnJ0KDY0KScsICdjdWJlKDQpJywgJ2NicnQoLTgpJywgJ2NicnQoMiArIDNpKScsICdjYnJ0KDhpKScsICdjYnJ0KDhpLCB0cnVlKScsICdjYnJ0KDI3IG1eMyknXSxcbiAgc2VlYWxzbzogWydzcXVhcmUnLCAnc3FydCcsICdjdWJlJywgJ211bHRpcGx5J11cbn07XG5leHBvcnRzLmNicnREb2NzID0gY2JydERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNlaWxEb2NzID0gdm9pZCAwO1xudmFyIGNlaWxEb2NzID0ge1xuICBuYW1lOiAnY2VpbCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydjZWlsKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnUm91bmQgYSB2YWx1ZSB0b3dhcmRzIHBsdXMgaW5maW5pdHkuIElmIHggaXMgY29tcGxleCwgYm90aCByZWFsIGFuZCBpbWFnaW5hcnkgcGFydCBhcmUgcm91bmRlZCB0b3dhcmRzIHBsdXMgaW5maW5pdHkuJyxcbiAgZXhhbXBsZXM6IFsnY2VpbCgzLjIpJywgJ2NlaWwoMy44KScsICdjZWlsKC00LjIpJ10sXG4gIHNlZWFsc286IFsnZmxvb3InLCAnZml4JywgJ3JvdW5kJ11cbn07XG5leHBvcnRzLmNlaWxEb2NzID0gY2VpbERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmN1YmVEb2NzID0gdm9pZCAwO1xudmFyIGN1YmVEb2NzID0ge1xuICBuYW1lOiAnY3ViZScsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydjdWJlKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgY3ViZSBvZiBhIHZhbHVlLiBUaGUgY3ViZSBvZiB4IGlzIHggKiB4ICogeC4nLFxuICBleGFtcGxlczogWydjdWJlKDIpJywgJzJeMycsICcyICogMiAqIDInXSxcbiAgc2VlYWxzbzogWydtdWx0aXBseScsICdzcXVhcmUnLCAncG93J11cbn07XG5leHBvcnRzLmN1YmVEb2NzID0gY3ViZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRpdmlkZURvY3MgPSB2b2lkIDA7XG52YXIgZGl2aWRlRG9jcyA9IHtcbiAgbmFtZTogJ2RpdmlkZScsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJ3ggLyB5JywgJ2RpdmlkZSh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0RpdmlkZSB0d28gdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ2EgPSAyIC8gMycsICdhICogMycsICc0LjUgLyAyJywgJzMgKyA0IC8gMicsICcoMyArIDQpIC8gMicsICcxOCBrbSAvIDQuNSddLFxuICBzZWVhbHNvOiBbJ211bHRpcGx5J11cbn07XG5leHBvcnRzLmRpdmlkZURvY3MgPSBkaXZpZGVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kb3REaXZpZGVEb2NzID0gdm9pZCAwO1xudmFyIGRvdERpdmlkZURvY3MgPSB7XG4gIG5hbWU6ICdkb3REaXZpZGUnLFxuICBjYXRlZ29yeTogJ09wZXJhdG9ycycsXG4gIHN5bnRheDogWyd4IC4vIHknLCAnZG90RGl2aWRlKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnRGl2aWRlIHR3byB2YWx1ZXMgZWxlbWVudCB3aXNlLicsXG4gIGV4YW1wbGVzOiBbJ2EgPSBbMSwgMiwgMzsgNCwgNSwgNl0nLCAnYiA9IFsyLCAxLCAxOyAzLCAyLCA1XScsICdhIC4vIGInXSxcbiAgc2VlYWxzbzogWydtdWx0aXBseScsICdkb3RNdWx0aXBseScsICdkaXZpZGUnXVxufTtcbmV4cG9ydHMuZG90RGl2aWRlRG9jcyA9IGRvdERpdmlkZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRvdE11bHRpcGx5RG9jcyA9IHZvaWQgMDtcbnZhciBkb3RNdWx0aXBseURvY3MgPSB7XG4gIG5hbWU6ICdkb3RNdWx0aXBseScsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJ3ggLiogeScsICdkb3RNdWx0aXBseSh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ011bHRpcGx5IHR3byB2YWx1ZXMgZWxlbWVudCB3aXNlLicsXG4gIGV4YW1wbGVzOiBbJ2EgPSBbMSwgMiwgMzsgNCwgNSwgNl0nLCAnYiA9IFsyLCAxLCAxOyAzLCAyLCA1XScsICdhIC4qIGInXSxcbiAgc2VlYWxzbzogWydtdWx0aXBseScsICdkaXZpZGUnLCAnZG90RGl2aWRlJ11cbn07XG5leHBvcnRzLmRvdE11bHRpcGx5RG9jcyA9IGRvdE11bHRpcGx5RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZG90UG93RG9jcyA9IHZvaWQgMDtcbnZhciBkb3RQb3dEb2NzID0ge1xuICBuYW1lOiAnZG90UG93JyxcbiAgY2F0ZWdvcnk6ICdPcGVyYXRvcnMnLFxuICBzeW50YXg6IFsneCAuXiB5JywgJ2RvdFBvdyh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZXMgdGhlIHBvd2VyIG9mIHggdG8geSBlbGVtZW50IHdpc2UuJyxcbiAgZXhhbXBsZXM6IFsnYSA9IFsxLCAyLCAzOyA0LCA1LCA2XScsICdhIC5eIDInXSxcbiAgc2VlYWxzbzogWydwb3cnXVxufTtcbmV4cG9ydHMuZG90UG93RG9jcyA9IGRvdFBvd0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV4cERvY3MgPSB2b2lkIDA7XG52YXIgZXhwRG9jcyA9IHtcbiAgbmFtZTogJ2V4cCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydleHAoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGV4cG9uZW50IG9mIGEgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsnZXhwKDEuMyknLCAnZSBeIDEuMycsICdsb2coZXhwKDEuMykpJywgJ3ggPSAyLjQnLCAnKGV4cChpKngpID09IGNvcyh4KSArIGkqc2luKHgpKSAgICMgRXVsZXJcXCdzIGZvcm11bGEnXSxcbiAgc2VlYWxzbzogWydleHBtJywgJ2V4cG0xJywgJ3BvdycsICdsb2cnXVxufTtcbmV4cG9ydHMuZXhwRG9jcyA9IGV4cERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV4cG1Eb2NzID0gdm9pZCAwO1xudmFyIGV4cG1Eb2NzID0ge1xuICBuYW1lOiAnZXhwbScsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydleHAoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBtYXRyaXggZXhwb25lbnRpYWwsIGV4cG0oQSkgPSBlXkEuICcgKyAnVGhlIG1hdHJpeCBtdXN0IGJlIHNxdWFyZS4gJyArICdOb3QgdG8gYmUgY29uZnVzZWQgd2l0aCBleHAoYSksIHdoaWNoIHBlcmZvcm1zIGVsZW1lbnQtd2lzZSBleHBvbmVudGlhdGlvbi4nLFxuICBleGFtcGxlczogWydleHBtKFtbMCwyXSxbMCwwXV0pJ10sXG4gIHNlZWFsc286IFsnZXhwJ11cbn07XG5leHBvcnRzLmV4cG1Eb2NzID0gZXhwbURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV4cG0xRG9jcyA9IHZvaWQgMDtcbnZhciBleHBtMURvY3MgPSB7XG4gIG5hbWU6ICdleHBtMScsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydleHBtMSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgdmFsdWUgb2Ygc3VidHJhY3RpbmcgMSBmcm9tIHRoZSBleHBvbmVudGlhbCB2YWx1ZS4nLFxuICBleGFtcGxlczogWydleHBtMSgyKScsICdwb3coZSwgMikgLSAxJywgJ2xvZyhleHBtMSgyKSArIDEpJ10sXG4gIHNlZWFsc286IFsnZXhwJywgJ3BvdycsICdsb2cnXVxufTtcbmV4cG9ydHMuZXhwbTFEb2NzID0gZXhwbTFEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5maXhEb2NzID0gdm9pZCAwO1xudmFyIGZpeERvY3MgPSB7XG4gIG5hbWU6ICdmaXgnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnZml4KHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnUm91bmQgYSB2YWx1ZSB0b3dhcmRzIHplcm8uIElmIHggaXMgY29tcGxleCwgYm90aCByZWFsIGFuZCBpbWFnaW5hcnkgcGFydCBhcmUgcm91bmRlZCB0b3dhcmRzIHplcm8uJyxcbiAgZXhhbXBsZXM6IFsnZml4KDMuMiknLCAnZml4KDMuOCknLCAnZml4KC00LjIpJywgJ2ZpeCgtNC44KSddLFxuICBzZWVhbHNvOiBbJ2NlaWwnLCAnZmxvb3InLCAncm91bmQnXVxufTtcbmV4cG9ydHMuZml4RG9jcyA9IGZpeERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZsb29yRG9jcyA9IHZvaWQgMDtcbnZhciBmbG9vckRvY3MgPSB7XG4gIG5hbWU6ICdmbG9vcicsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydmbG9vcih4KSddLFxuICBkZXNjcmlwdGlvbjogJ1JvdW5kIGEgdmFsdWUgdG93YXJkcyBtaW51cyBpbmZpbml0eS5JZiB4IGlzIGNvbXBsZXgsIGJvdGggcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQgYXJlIHJvdW5kZWQgdG93YXJkcyBtaW51cyBpbmZpbml0eS4nLFxuICBleGFtcGxlczogWydmbG9vcigzLjIpJywgJ2Zsb29yKDMuOCknLCAnZmxvb3IoLTQuMiknXSxcbiAgc2VlYWxzbzogWydjZWlsJywgJ2ZpeCcsICdyb3VuZCddXG59O1xuZXhwb3J0cy5mbG9vckRvY3MgPSBmbG9vckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdjZERvY3MgPSB2b2lkIDA7XG52YXIgZ2NkRG9jcyA9IHtcbiAgbmFtZTogJ2djZCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydnY2QoYSwgYiknLCAnZ2NkKGEsIGIsIGMsIC4uLiknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvci4nLFxuICBleGFtcGxlczogWydnY2QoOCwgMTIpJywgJ2djZCgtNCwgNiknLCAnZ2NkKDI1LCAxNSwgLTEwKSddLFxuICBzZWVhbHNvOiBbJ2xjbScsICd4Z2NkJ11cbn07XG5leHBvcnRzLmdjZERvY3MgPSBnY2REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oeXBvdERvY3MgPSB2b2lkIDA7XG52YXIgaHlwb3REb2NzID0ge1xuICBuYW1lOiAnaHlwb3QnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnaHlwb3QoYSwgYiwgYywgLi4uKScsICdoeXBvdChbYSwgYiwgYywgLi4uXSknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGh5cG90ZW51c2Egb2YgYSBsaXN0IHdpdGggdmFsdWVzLiAnLFxuICBleGFtcGxlczogWydoeXBvdCgzLCA0KScsICdzcXJ0KDNeMiArIDReMiknLCAnaHlwb3QoLTIpJywgJ2h5cG90KFszLCA0LCA1XSknXSxcbiAgc2VlYWxzbzogWydhYnMnLCAnbm9ybSddXG59O1xuZXhwb3J0cy5oeXBvdERvY3MgPSBoeXBvdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxjbURvY3MgPSB2b2lkIDA7XG52YXIgbGNtRG9jcyA9IHtcbiAgbmFtZTogJ2xjbScsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydsY20oeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBsZWFzdCBjb21tb24gbXVsdGlwbGUuJyxcbiAgZXhhbXBsZXM6IFsnbGNtKDQsIDYpJywgJ2xjbSg2LCAyMSknLCAnbGNtKDYsIDIxLCA1KSddLFxuICBzZWVhbHNvOiBbJ2djZCddXG59O1xuZXhwb3J0cy5sY21Eb2NzID0gbGNtRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubG9nRG9jcyA9IHZvaWQgMDtcbnZhciBsb2dEb2NzID0ge1xuICBuYW1lOiAnbG9nJyxcbiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJyxcbiAgc3ludGF4OiBbJ2xvZyh4KScsICdsb2coeCwgYmFzZSknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBsb2dhcml0aG0gb2YgYSB2YWx1ZS4gSWYgbm8gYmFzZSBpcyBwcm92aWRlZCwgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIHggaXMgY2FsY3VsYXRlZC4gSWYgYmFzZSBpZiBwcm92aWRlZCwgdGhlIGxvZ2FyaXRobSBpcyBjYWxjdWxhdGVkIGZvciB0aGUgc3BlY2lmaWVkIGJhc2UuIGxvZyh4LCBiYXNlKSBpcyBkZWZpbmVkIGFzIGxvZyh4KSAvIGxvZyhiYXNlKS4nLFxuICBleGFtcGxlczogWydsb2coMy41KScsICdhID0gbG9nKDIuNCknLCAnZXhwKGEpJywgJzEwIF4gNCcsICdsb2coMTAwMDAsIDEwKScsICdsb2coMTAwMDApIC8gbG9nKDEwKScsICdiID0gbG9nKDEwMjQsIDIpJywgJzIgXiBiJ10sXG4gIHNlZWFsc286IFsnZXhwJywgJ2xvZzFwJywgJ2xvZzInLCAnbG9nMTAnXVxufTtcbmV4cG9ydHMubG9nRG9jcyA9IGxvZ0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxvZzEwRG9jcyA9IHZvaWQgMDtcbnZhciBsb2cxMERvY3MgPSB7XG4gIG5hbWU6ICdsb2cxMCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydsb2cxMCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIDEwLWJhc2UgbG9nYXJpdGhtIG9mIGEgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsnbG9nMTAoMC4wMDAwMSknLCAnbG9nMTAoMTAwMDApJywgJzEwIF4gNCcsICdsb2coMTAwMDApIC8gbG9nKDEwKScsICdsb2coMTAwMDAsIDEwKSddLFxuICBzZWVhbHNvOiBbJ2V4cCcsICdsb2cnXVxufTtcbmV4cG9ydHMubG9nMTBEb2NzID0gbG9nMTBEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sb2cxcERvY3MgPSB2b2lkIDA7XG52YXIgbG9nMXBEb2NzID0ge1xuICBuYW1lOiAnbG9nMXAnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnbG9nMXAoeCknLCAnbG9nMXAoeCwgYmFzZSknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGxvZ2FyaXRobSBvZiBhIGB2YWx1ZSsxYCcsXG4gIGV4YW1wbGVzOiBbJ2xvZzFwKDIuNSknLCAnZXhwKGxvZzFwKDEuNCkpJywgJ3BvdygxMCwgNCknLCAnbG9nMXAoOTk5OSwgMTApJywgJ2xvZzFwKDk5OTkpIC8gbG9nKDEwKSddLFxuICBzZWVhbHNvOiBbJ2V4cCcsICdsb2cnLCAnbG9nMicsICdsb2cxMCddXG59O1xuZXhwb3J0cy5sb2cxcERvY3MgPSBsb2cxcERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxvZzJEb2NzID0gdm9pZCAwO1xudmFyIGxvZzJEb2NzID0ge1xuICBuYW1lOiAnbG9nMicsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydsb2cyKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSAyLWJhc2Ugb2YgYSB2YWx1ZS4gVGhpcyBpcyB0aGUgc2FtZSBhcyBjYWxjdWxhdGluZyBgbG9nKHgsIDIpYC4nLFxuICBleGFtcGxlczogWydsb2cyKDAuMDMxMjUpJywgJ2xvZzIoMTYpJywgJ2xvZzIoMTYpIC8gbG9nMigyKScsICdwb3coMiwgNCknXSxcbiAgc2VlYWxzbzogWydleHAnLCAnbG9nMXAnLCAnbG9nJywgJ2xvZzEwJ11cbn07XG5leHBvcnRzLmxvZzJEb2NzID0gbG9nMkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vZERvY3MgPSB2b2lkIDA7XG52YXIgbW9kRG9jcyA9IHtcbiAgbmFtZTogJ21vZCcsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJ3ggJSB5JywgJ3ggbW9kIHknLCAnbW9kKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlcyB0aGUgbW9kdWx1cywgdGhlIHJlbWFpbmRlciBvZiBhbiBpbnRlZ2VyIGRpdmlzaW9uLicsXG4gIGV4YW1wbGVzOiBbJzcgJSAzJywgJzExICUgMicsICcxMCBtb2QgNCcsICdpc09kZCh4KSA9IHggJSAyJywgJ2lzT2RkKDIpJywgJ2lzT2RkKDMpJ10sXG4gIHNlZWFsc286IFsnZGl2aWRlJ11cbn07XG5leHBvcnRzLm1vZERvY3MgPSBtb2REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tdWx0aXBseURvY3MgPSB2b2lkIDA7XG52YXIgbXVsdGlwbHlEb2NzID0ge1xuICBuYW1lOiAnbXVsdGlwbHknLFxuICBjYXRlZ29yeTogJ09wZXJhdG9ycycsXG4gIHN5bnRheDogWyd4ICogeScsICdtdWx0aXBseSh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ211bHRpcGx5IHR3byB2YWx1ZXMuJyxcbiAgZXhhbXBsZXM6IFsnYSA9IDIuMSAqIDMuNCcsICdhIC8gMy40JywgJzIgKiAzICsgNCcsICcyICogKDMgKyA0KScsICczICogMi4xIGttJ10sXG4gIHNlZWFsc286IFsnZGl2aWRlJ11cbn07XG5leHBvcnRzLm11bHRpcGx5RG9jcyA9IG11bHRpcGx5RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubm9ybURvY3MgPSB2b2lkIDA7XG52YXIgbm9ybURvY3MgPSB7XG4gIG5hbWU6ICdub3JtJyxcbiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJyxcbiAgc3ludGF4OiBbJ25vcm0oeCknLCAnbm9ybSh4LCBwKSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgbm9ybSBvZiBhIG51bWJlciwgdmVjdG9yIG9yIG1hdHJpeC4nLFxuICBleGFtcGxlczogWydhYnMoLTMuNSknLCAnbm9ybSgtMy41KScsICdub3JtKDMgLSA0aSknLCAnbm9ybShbMSwgMiwgLTNdLCBJbmZpbml0eSknLCAnbm9ybShbMSwgMiwgLTNdLCAtSW5maW5pdHkpJywgJ25vcm0oWzMsIDRdLCAyKScsICdub3JtKFtbMSwgMl0sIFszLCA0XV0sIDEpJywgJ25vcm0oW1sxLCAyXSwgWzMsIDRdXSwgXCJpbmZcIiknLCAnbm9ybShbWzEsIDJdLCBbMywgNF1dLCBcImZyb1wiKSddXG59O1xuZXhwb3J0cy5ub3JtRG9jcyA9IG5vcm1Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5udGhSb290RG9jcyA9IHZvaWQgMDtcbnZhciBudGhSb290RG9jcyA9IHtcbiAgbmFtZTogJ250aFJvb3QnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnbnRoUm9vdChhKScsICdudGhSb290KGEsIHJvb3QpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBudGggcm9vdCBvZiBhIHZhbHVlLiAnICsgJ1RoZSBwcmluY2lwYWwgbnRoIHJvb3Qgb2YgYSBwb3NpdGl2ZSByZWFsIG51bWJlciBBLCAnICsgJ2lzIHRoZSBwb3NpdGl2ZSByZWFsIHNvbHV0aW9uIG9mIHRoZSBlcXVhdGlvbiBcInhecm9vdCA9IEFcIi4nLFxuICBleGFtcGxlczogWyc0IF4gMycsICdudGhSb290KDY0LCAzKScsICdudGhSb290KDksIDIpJywgJ3NxcnQoOSknXSxcbiAgc2VlYWxzbzogWydudGhSb290cycsICdwb3cnLCAnc3FydCddXG59O1xuZXhwb3J0cy5udGhSb290RG9jcyA9IG50aFJvb3REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5udGhSb290c0RvY3MgPSB2b2lkIDA7XG52YXIgbnRoUm9vdHNEb2NzID0ge1xuICBuYW1lOiAnbnRoUm9vdHMnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnbnRoUm9vdHMoQSknLCAnbnRoUm9vdHMoQSwgcm9vdCknXSxcbiAgZGVzY3JpcHRpb246ICcnICsgJ0NhbGN1bGF0ZSB0aGUgbnRoIHJvb3RzIG9mIGEgdmFsdWUuICcgKyAnQW4gbnRoIHJvb3Qgb2YgYSBwb3NpdGl2ZSByZWFsIG51bWJlciBBLCAnICsgJ2lzIGEgcG9zaXRpdmUgcmVhbCBzb2x1dGlvbiBvZiB0aGUgZXF1YXRpb24gXCJ4XnJvb3QgPSBBXCIuICcgKyAnVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGFycmF5IG9mIGNvbXBsZXggdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ250aFJvb3RzKDEpJywgJ250aFJvb3RzKDEsIDMpJ10sXG4gIHNlZWFsc286IFsnc3FydCcsICdwb3cnLCAnbnRoUm9vdCddXG59O1xuZXhwb3J0cy5udGhSb290c0RvY3MgPSBudGhSb290c0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBvd0RvY3MgPSB2b2lkIDA7XG52YXIgcG93RG9jcyA9IHtcbiAgbmFtZTogJ3BvdycsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJ3ggXiB5JywgJ3Bvdyh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZXMgdGhlIHBvd2VyIG9mIHggdG8geSwgeF55LicsXG4gIGV4YW1wbGVzOiBbJzJeMycsICcyKjIqMicsICcxICsgZSBeIChwaSAqIGkpJ10sXG4gIHNlZWFsc286IFsnbXVsdGlwbHknLCAnbnRoUm9vdCcsICdudGhSb290cycsICdzcXJ0J11cbn07XG5leHBvcnRzLnBvd0RvY3MgPSBwb3dEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yb3VuZERvY3MgPSB2b2lkIDA7XG52YXIgcm91bmREb2NzID0ge1xuICBuYW1lOiAncm91bmQnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsncm91bmQoeCknLCAncm91bmQoeCwgbiknXSxcbiAgZGVzY3JpcHRpb246ICdyb3VuZCBhIHZhbHVlIHRvd2FyZHMgdGhlIG5lYXJlc3QgaW50ZWdlci5JZiB4IGlzIGNvbXBsZXgsIGJvdGggcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQgYXJlIHJvdW5kZWQgdG93YXJkcyB0aGUgbmVhcmVzdCBpbnRlZ2VyLiBXaGVuIG4gaXMgc3BlY2lmaWVkLCB0aGUgdmFsdWUgaXMgcm91bmRlZCB0byBuIGRlY2ltYWxzLicsXG4gIGV4YW1wbGVzOiBbJ3JvdW5kKDMuMiknLCAncm91bmQoMy44KScsICdyb3VuZCgtNC4yKScsICdyb3VuZCgtNC44KScsICdyb3VuZChwaSwgMyknLCAncm91bmQoMTIzLjQ1Njc4LCAyKSddLFxuICBzZWVhbHNvOiBbJ2NlaWwnLCAnZmxvb3InLCAnZml4J11cbn07XG5leHBvcnRzLnJvdW5kRG9jcyA9IHJvdW5kRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2lnbkRvY3MgPSB2b2lkIDA7XG52YXIgc2lnbkRvY3MgPSB7XG4gIG5hbWU6ICdzaWduJyxcbiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJyxcbiAgc3ludGF4OiBbJ3NpZ24oeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBzaWduIG9mIGEgdmFsdWUuIFRoZSBzaWduIG9mIGEgdmFsdWUgeCBpcyAxIHdoZW4geD4xLCAtMSB3aGVuIHg8MCwgYW5kIDAgd2hlbiB4PTAuJyxcbiAgZXhhbXBsZXM6IFsnc2lnbigzLjUpJywgJ3NpZ24oLTQuMiknLCAnc2lnbigwKSddLFxuICBzZWVhbHNvOiBbJ2FicyddXG59O1xuZXhwb3J0cy5zaWduRG9jcyA9IHNpZ25Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcXJ0RG9jcyA9IHZvaWQgMDtcbnZhciBzcXJ0RG9jcyA9IHtcbiAgbmFtZTogJ3NxcnQnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnc3FydCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHNxdWFyZSByb290IHZhbHVlLiBJZiB4ID0geSAqIHksIHRoZW4geSBpcyB0aGUgc3F1YXJlIHJvb3Qgb2YgeC4nLFxuICBleGFtcGxlczogWydzcXJ0KDI1KScsICc1ICogNScsICdzcXJ0KC0xKSddLFxuICBzZWVhbHNvOiBbJ3NxdWFyZScsICdzcXJ0bScsICdtdWx0aXBseScsICdudGhSb290JywgJ250aFJvb3RzJywgJ3BvdyddXG59O1xuZXhwb3J0cy5zcXJ0RG9jcyA9IHNxcnREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcXJ0bURvY3MgPSB2b2lkIDA7XG52YXIgc3FydG1Eb2NzID0ge1xuICBuYW1lOiAnc3FydG0nLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnc3FydG0oeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIHByaW5jaXBhbCBzcXVhcmUgcm9vdCBvZiBhIHNxdWFyZSBtYXRyaXguIFRoZSBwcmluY2lwYWwgc3F1YXJlIHJvb3QgbWF0cml4IGBYYCBvZiBhbm90aGVyIG1hdHJpeCBgQWAgaXMgc3VjaCB0aGF0IGBYICogWCA9IEFgLicsXG4gIGV4YW1wbGVzOiBbJ3NxcnRtKFtbMSwgMl0sIFszLCA0XV0pJ10sXG4gIHNlZWFsc286IFsnc3FydCcsICdhYnMnLCAnc3F1YXJlJywgJ211bHRpcGx5J11cbn07XG5leHBvcnRzLnNxcnRtRG9jcyA9IHNxcnRtRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3F1YXJlRG9jcyA9IHZvaWQgMDtcbnZhciBzcXVhcmVEb2NzID0ge1xuICBuYW1lOiAnc3F1YXJlJyxcbiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJyxcbiAgc3ludGF4OiBbJ3NxdWFyZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHNxdWFyZSBvZiBhIHZhbHVlLiBUaGUgc3F1YXJlIG9mIHggaXMgeCAqIHguJyxcbiAgZXhhbXBsZXM6IFsnc3F1YXJlKDMpJywgJ3NxcnQoOSknLCAnM14yJywgJzMgKiAzJ10sXG4gIHNlZWFsc286IFsnbXVsdGlwbHknLCAncG93JywgJ3NxcnQnLCAnY3ViZSddXG59O1xuZXhwb3J0cy5zcXVhcmVEb2NzID0gc3F1YXJlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3VidHJhY3REb2NzID0gdm9pZCAwO1xudmFyIHN1YnRyYWN0RG9jcyA9IHtcbiAgbmFtZTogJ3N1YnRyYWN0JyxcbiAgY2F0ZWdvcnk6ICdPcGVyYXRvcnMnLFxuICBzeW50YXg6IFsneCAtIHknLCAnc3VidHJhY3QoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdzdWJ0cmFjdCB0d28gdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ2EgPSA1LjMgLSAyJywgJ2EgKyAyJywgJzIvMyAtIDEvNicsICcyICogMyAtIDMnLCAnMi4xIGttIC0gNTAwbSddLFxuICBzZWVhbHNvOiBbJ2FkZCddXG59O1xuZXhwb3J0cy5zdWJ0cmFjdERvY3MgPSBzdWJ0cmFjdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnVuYXJ5TWludXNEb2NzID0gdm9pZCAwO1xudmFyIHVuYXJ5TWludXNEb2NzID0ge1xuICBuYW1lOiAndW5hcnlNaW51cycsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJy14JywgJ3VuYXJ5TWludXMoeCknXSxcbiAgZGVzY3JpcHRpb246ICdJbnZlcnNlIHRoZSBzaWduIG9mIGEgdmFsdWUuIENvbnZlcnRzIGJvb2xlYW5zIGFuZCBzdHJpbmdzIHRvIG51bWJlcnMuJyxcbiAgZXhhbXBsZXM6IFsnLTQuNScsICctKC01LjYpJywgJy1cIjIyXCInXSxcbiAgc2VlYWxzbzogWydhZGQnLCAnc3VidHJhY3QnLCAndW5hcnlQbHVzJ11cbn07XG5leHBvcnRzLnVuYXJ5TWludXNEb2NzID0gdW5hcnlNaW51c0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnVuYXJ5UGx1c0RvY3MgPSB2b2lkIDA7XG52YXIgdW5hcnlQbHVzRG9jcyA9IHtcbiAgbmFtZTogJ3VuYXJ5UGx1cycsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJyt4JywgJ3VuYXJ5UGx1cyh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbnZlcnRzIGJvb2xlYW5zIGFuZCBzdHJpbmdzIHRvIG51bWJlcnMuJyxcbiAgZXhhbXBsZXM6IFsnK3RydWUnLCAnK1wiMlwiJ10sXG4gIHNlZWFsc286IFsnYWRkJywgJ3N1YnRyYWN0JywgJ3VuYXJ5TWludXMnXVxufTtcbmV4cG9ydHMudW5hcnlQbHVzRG9jcyA9IHVuYXJ5UGx1c0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnhnY2REb2NzID0gdm9pZCAwO1xudmFyIHhnY2REb2NzID0ge1xuICBuYW1lOiAneGdjZCcsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWyd4Z2NkKGEsIGIpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBleHRlbmRlZCBncmVhdGVzdCBjb21tb24gZGl2aXNvciBmb3IgdHdvIHZhbHVlcy4gVGhlIHJlc3VsdCBpcyBhbiBhcnJheSBbZCwgeCwgeV0gd2l0aCAzIGVudHJpZXMsIHdoZXJlIGQgaXMgdGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yLCBhbmQgZCA9IHggKiBhICsgeSAqIGIuJyxcbiAgZXhhbXBsZXM6IFsneGdjZCg4LCAxMiknLCAnZ2NkKDgsIDEyKScsICd4Z2NkKDM2MTYzLCAyMTE5OSknXSxcbiAgc2VlYWxzbzogWydnY2QnLCAnbGNtJ11cbn07XG5leHBvcnRzLnhnY2REb2NzID0geGdjZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdEFuZERvY3MgPSB2b2lkIDA7XG52YXIgYml0QW5kRG9jcyA9IHtcbiAgbmFtZTogJ2JpdEFuZCcsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWyd4ICYgeScsICdiaXRBbmQoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdCaXR3aXNlIEFORCBvcGVyYXRpb24uIFBlcmZvcm1zIHRoZSBsb2dpY2FsIEFORCBvcGVyYXRpb24gb24gZWFjaCBwYWlyIG9mIHRoZSBjb3JyZXNwb25kaW5nIGJpdHMgb2YgdGhlIHR3byBnaXZlbiB2YWx1ZXMgYnkgbXVsdGlwbHlpbmcgdGhlbS4gSWYgYm90aCBiaXRzIGluIHRoZSBjb21wYXJlZCBwb3NpdGlvbiBhcmUgMSwgdGhlIGJpdCBpbiB0aGUgcmVzdWx0aW5nIGJpbmFyeSByZXByZXNlbnRhdGlvbiBpcyAxLCBvdGhlcndpc2UsIHRoZSByZXN1bHQgaXMgMCcsXG4gIGV4YW1wbGVzOiBbJzUgJiAzJywgJ2JpdEFuZCg1MywgMTMxKScsICdbMSwgMTIsIDMxXSAmIDQyJ10sXG4gIHNlZWFsc286IFsnYml0Tm90JywgJ2JpdE9yJywgJ2JpdFhvcicsICdsZWZ0U2hpZnQnLCAncmlnaHRBcml0aFNoaWZ0JywgJ3JpZ2h0TG9nU2hpZnQnXVxufTtcbmV4cG9ydHMuYml0QW5kRG9jcyA9IGJpdEFuZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdE5vdERvY3MgPSB2b2lkIDA7XG52YXIgYml0Tm90RG9jcyA9IHtcbiAgbmFtZTogJ2JpdE5vdCcsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWyd+eCcsICdiaXROb3QoeCknXSxcbiAgZGVzY3JpcHRpb246ICdCaXR3aXNlIE5PVCBvcGVyYXRpb24uIFBlcmZvcm1zIGEgbG9naWNhbCBuZWdhdGlvbiBvbiBlYWNoIGJpdCBvZiB0aGUgZ2l2ZW4gdmFsdWUuIEJpdHMgdGhhdCBhcmUgMCBiZWNvbWUgMSwgYW5kIHRob3NlIHRoYXQgYXJlIDEgYmVjb21lIDAuJyxcbiAgZXhhbXBsZXM6IFsnfjEnLCAnfjInLCAnYml0Tm90KFsyLCAtMywgNF0pJ10sXG4gIHNlZWFsc286IFsnYml0QW5kJywgJ2JpdE9yJywgJ2JpdFhvcicsICdsZWZ0U2hpZnQnLCAncmlnaHRBcml0aFNoaWZ0JywgJ3JpZ2h0TG9nU2hpZnQnXVxufTtcbmV4cG9ydHMuYml0Tm90RG9jcyA9IGJpdE5vdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdE9yRG9jcyA9IHZvaWQgMDtcbnZhciBiaXRPckRvY3MgPSB7XG4gIG5hbWU6ICdiaXRPcicsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWyd4IHwgeScsICdiaXRPcih4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0JpdHdpc2UgT1Igb3BlcmF0aW9uLiBQZXJmb3JtcyB0aGUgbG9naWNhbCBpbmNsdXNpdmUgT1Igb3BlcmF0aW9uIG9uIGVhY2ggcGFpciBvZiBjb3JyZXNwb25kaW5nIGJpdHMgb2YgdGhlIHR3byBnaXZlbiB2YWx1ZXMuIFRoZSByZXN1bHQgaW4gZWFjaCBwb3NpdGlvbiBpcyAxIGlmIHRoZSBmaXJzdCBiaXQgaXMgMSBvciB0aGUgc2Vjb25kIGJpdCBpcyAxIG9yIGJvdGggYml0cyBhcmUgMSwgb3RoZXJ3aXNlLCB0aGUgcmVzdWx0IGlzIDAuJyxcbiAgZXhhbXBsZXM6IFsnNSB8IDMnLCAnYml0T3IoWzEsIDIsIDNdLCA0KSddLFxuICBzZWVhbHNvOiBbJ2JpdEFuZCcsICdiaXROb3QnLCAnYml0WG9yJywgJ2xlZnRTaGlmdCcsICdyaWdodEFyaXRoU2hpZnQnLCAncmlnaHRMb2dTaGlmdCddXG59O1xuZXhwb3J0cy5iaXRPckRvY3MgPSBiaXRPckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdFhvckRvY3MgPSB2b2lkIDA7XG52YXIgYml0WG9yRG9jcyA9IHtcbiAgbmFtZTogJ2JpdFhvcicsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWydiaXRYb3IoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdCaXR3aXNlIFhPUiBvcGVyYXRpb24sIGV4Y2x1c2l2ZSBPUi4gUGVyZm9ybXMgdGhlIGxvZ2ljYWwgZXhjbHVzaXZlIE9SIG9wZXJhdGlvbiBvbiBlYWNoIHBhaXIgb2YgY29ycmVzcG9uZGluZyBiaXRzIG9mIHRoZSB0d28gZ2l2ZW4gdmFsdWVzLiBUaGUgcmVzdWx0IGluIGVhY2ggcG9zaXRpb24gaXMgMSBpZiBvbmx5IHRoZSBmaXJzdCBiaXQgaXMgMSBvciBvbmx5IHRoZSBzZWNvbmQgYml0IGlzIDEsIGJ1dCB3aWxsIGJlIDAgaWYgYm90aCBhcmUgMCBvciBib3RoIGFyZSAxLicsXG4gIGV4YW1wbGVzOiBbJ2JpdE9yKDEsIDIpJywgJ2JpdFhvcihbMiwgMywgNF0sIDQpJ10sXG4gIHNlZWFsc286IFsnYml0QW5kJywgJ2JpdE5vdCcsICdiaXRPcicsICdsZWZ0U2hpZnQnLCAncmlnaHRBcml0aFNoaWZ0JywgJ3JpZ2h0TG9nU2hpZnQnXVxufTtcbmV4cG9ydHMuYml0WG9yRG9jcyA9IGJpdFhvckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxlZnRTaGlmdERvY3MgPSB2b2lkIDA7XG52YXIgbGVmdFNoaWZ0RG9jcyA9IHtcbiAgbmFtZTogJ2xlZnRTaGlmdCcsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWyd4IDw8IHknLCAnbGVmdFNoaWZ0KHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQml0d2lzZSBsZWZ0IGxvZ2ljYWwgc2hpZnQgb2YgYSB2YWx1ZSB4IGJ5IHkgbnVtYmVyIG9mIGJpdHMuJyxcbiAgZXhhbXBsZXM6IFsnNCA8PCAxJywgJzggPj4gMSddLFxuICBzZWVhbHNvOiBbJ2JpdEFuZCcsICdiaXROb3QnLCAnYml0T3InLCAnYml0WG9yJywgJ3JpZ2h0QXJpdGhTaGlmdCcsICdyaWdodExvZ1NoaWZ0J11cbn07XG5leHBvcnRzLmxlZnRTaGlmdERvY3MgPSBsZWZ0U2hpZnREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yaWdodEFyaXRoU2hpZnREb2NzID0gdm9pZCAwO1xudmFyIHJpZ2h0QXJpdGhTaGlmdERvY3MgPSB7XG4gIG5hbWU6ICdyaWdodEFyaXRoU2hpZnQnLFxuICBjYXRlZ29yeTogJ0JpdHdpc2UnLFxuICBzeW50YXg6IFsneCA+PiB5JywgJ3JpZ2h0QXJpdGhTaGlmdCh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0JpdHdpc2UgcmlnaHQgYXJpdGhtZXRpYyBzaGlmdCBvZiBhIHZhbHVlIHggYnkgeSBudW1iZXIgb2YgYml0cy4nLFxuICBleGFtcGxlczogWyc4ID4+IDEnLCAnNCA8PCAxJywgJy0xMiA+PiAyJ10sXG4gIHNlZWFsc286IFsnYml0QW5kJywgJ2JpdE5vdCcsICdiaXRPcicsICdiaXRYb3InLCAnbGVmdFNoaWZ0JywgJ3JpZ2h0TG9nU2hpZnQnXVxufTtcbmV4cG9ydHMucmlnaHRBcml0aFNoaWZ0RG9jcyA9IHJpZ2h0QXJpdGhTaGlmdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJpZ2h0TG9nU2hpZnREb2NzID0gdm9pZCAwO1xudmFyIHJpZ2h0TG9nU2hpZnREb2NzID0ge1xuICBuYW1lOiAncmlnaHRMb2dTaGlmdCcsXG4gIGNhdGVnb3J5OiAnQml0d2lzZScsXG4gIHN5bnRheDogWyd4ID4+PiB5JywgJ3JpZ2h0TG9nU2hpZnQoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdCaXR3aXNlIHJpZ2h0IGxvZ2ljYWwgc2hpZnQgb2YgYSB2YWx1ZSB4IGJ5IHkgbnVtYmVyIG9mIGJpdHMuJyxcbiAgZXhhbXBsZXM6IFsnOCA+Pj4gMScsICc0IDw8IDEnLCAnLTEyID4+PiAyJ10sXG4gIHNlZWFsc286IFsnYml0QW5kJywgJ2JpdE5vdCcsICdiaXRPcicsICdiaXRYb3InLCAnbGVmdFNoaWZ0JywgJ3JpZ2h0QXJpdGhTaGlmdCddXG59O1xuZXhwb3J0cy5yaWdodExvZ1NoaWZ0RG9jcyA9IHJpZ2h0TG9nU2hpZnREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iZWxsTnVtYmVyc0RvY3MgPSB2b2lkIDA7XG52YXIgYmVsbE51bWJlcnNEb2NzID0ge1xuICBuYW1lOiAnYmVsbE51bWJlcnMnLFxuICBjYXRlZ29yeTogJ0NvbWJpbmF0b3JpY3MnLFxuICBzeW50YXg6IFsnYmVsbE51bWJlcnMobiknXSxcbiAgZGVzY3JpcHRpb246ICdUaGUgQmVsbCBOdW1iZXJzIGNvdW50IHRoZSBudW1iZXIgb2YgcGFydGl0aW9ucyBvZiBhIHNldC4gQSBwYXJ0aXRpb24gaXMgYSBwYWlyd2lzZSBkaXNqb2ludCBzdWJzZXQgb2YgUyB3aG9zZSB1bmlvbiBpcyBTLiBgYmVsbE51bWJlcnNgIG9ubHkgdGFrZXMgaW50ZWdlciBhcmd1bWVudHMuIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IG4gPj0gMC4nLFxuICBleGFtcGxlczogWydiZWxsTnVtYmVycygzKScsICdiZWxsTnVtYmVycyg4KSddLFxuICBzZWVhbHNvOiBbJ3N0aXJsaW5nUzInXVxufTtcbmV4cG9ydHMuYmVsbE51bWJlcnNEb2NzID0gYmVsbE51bWJlcnNEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jYXRhbGFuRG9jcyA9IHZvaWQgMDtcbnZhciBjYXRhbGFuRG9jcyA9IHtcbiAgbmFtZTogJ2NhdGFsYW4nLFxuICBjYXRlZ29yeTogJ0NvbWJpbmF0b3JpY3MnLFxuICBzeW50YXg6IFsnY2F0YWxhbihuKSddLFxuICBkZXNjcmlwdGlvbjogJ1RoZSBDYXRhbGFuIE51bWJlcnMgZW51bWVyYXRlIGNvbWJpbmF0b3JpYWwgc3RydWN0dXJlcyBvZiBtYW55IGRpZmZlcmVudCB0eXBlcy4gY2F0YWxhbiBvbmx5IHRha2VzIGludGVnZXIgYXJndW1lbnRzLiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBtdXN0IGJlIGVuZm9yY2VkOiBuID49IDAuJyxcbiAgZXhhbXBsZXM6IFsnY2F0YWxhbigzKScsICdjYXRhbGFuKDgpJ10sXG4gIHNlZWFsc286IFsnYmVsbE51bWJlcnMnXVxufTtcbmV4cG9ydHMuY2F0YWxhbkRvY3MgPSBjYXRhbGFuRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcG9zaXRpb25Eb2NzID0gdm9pZCAwO1xudmFyIGNvbXBvc2l0aW9uRG9jcyA9IHtcbiAgbmFtZTogJ2NvbXBvc2l0aW9uJyxcbiAgY2F0ZWdvcnk6ICdDb21iaW5hdG9yaWNzJyxcbiAgc3ludGF4OiBbJ2NvbXBvc2l0aW9uKG4sIGspJ10sXG4gIGRlc2NyaXB0aW9uOiAnVGhlIGNvbXBvc2l0aW9uIGNvdW50cyBvZiBuIGludG8gayBwYXJ0cy4gY29tcG9zaXRpb24gb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy4gVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogayA8PSBuLicsXG4gIGV4YW1wbGVzOiBbJ2NvbXBvc2l0aW9uKDUsIDMpJ10sXG4gIHNlZWFsc286IFsnY29tYmluYXRpb25zJ11cbn07XG5leHBvcnRzLmNvbXBvc2l0aW9uRG9jcyA9IGNvbXBvc2l0aW9uRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3RpcmxpbmdTMkRvY3MgPSB2b2lkIDA7XG52YXIgc3RpcmxpbmdTMkRvY3MgPSB7XG4gIG5hbWU6ICdzdGlybGluZ1MyJyxcbiAgY2F0ZWdvcnk6ICdDb21iaW5hdG9yaWNzJyxcbiAgc3ludGF4OiBbJ3N0aXJsaW5nUzIobiwgayknXSxcbiAgZGVzY3JpcHRpb246ICdoZSBTdGlybGluZyBudW1iZXJzIG9mIHRoZSBzZWNvbmQga2luZCwgY291bnRzIHRoZSBudW1iZXIgb2Ygd2F5cyB0byBwYXJ0aXRpb24gYSBzZXQgb2YgbiBsYWJlbGxlZCBvYmplY3RzIGludG8gayBub25lbXB0eSB1bmxhYmVsbGVkIHN1YnNldHMuIGBzdGlybGluZ1MyYCBvbmx5IHRha2VzIGludGVnZXIgYXJndW1lbnRzLiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBtdXN0IGJlIGVuZm9yY2VkOiBrIDw9IG4uIElmIG4gPSBrIG9yIGsgPSAxLCB0aGVuIHMobixrKSA9IDEuJyxcbiAgZXhhbXBsZXM6IFsnc3RpcmxpbmdTMig1LCAzKSddLFxuICBzZWVhbHNvOiBbJ2JlbGxOdW1iZXJzJ11cbn07XG5leHBvcnRzLnN0aXJsaW5nUzJEb2NzID0gc3RpcmxpbmdTMkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFyZ0RvY3MgPSB2b2lkIDA7XG52YXIgYXJnRG9jcyA9IHtcbiAgbmFtZTogJ2FyZycsXG4gIGNhdGVnb3J5OiAnQ29tcGxleCcsXG4gIHN5bnRheDogWydhcmcoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBhcmd1bWVudCBvZiBhIGNvbXBsZXggdmFsdWUuIElmIHggPSBhK2JpLCB0aGUgYXJndW1lbnQgaXMgY29tcHV0ZWQgYXMgYXRhbjIoYiwgYSkuJyxcbiAgZXhhbXBsZXM6IFsnYXJnKDIgKyAyaSknLCAnYXRhbjIoMywgMiknLCAnYXJnKDIgKyAzaSknXSxcbiAgc2VlYWxzbzogWydyZScsICdpbScsICdjb25qJywgJ2FicyddXG59O1xuZXhwb3J0cy5hcmdEb2NzID0gYXJnRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29uakRvY3MgPSB2b2lkIDA7XG52YXIgY29uakRvY3MgPSB7XG4gIG5hbWU6ICdjb25qJyxcbiAgY2F0ZWdvcnk6ICdDb21wbGV4JyxcbiAgc3ludGF4OiBbJ2NvbmooeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBjb21wbGV4IGNvbmp1Z2F0ZSBvZiBhIGNvbXBsZXggdmFsdWUuIElmIHggPSBhK2JpLCB0aGUgY29tcGxleCBjb25qdWdhdGUgaXMgYS1iaS4nLFxuICBleGFtcGxlczogWydjb25qKDIgKyAzaSknLCAnY29uaigyIC0gM2kpJywgJ2NvbmooLTUuMmkpJ10sXG4gIHNlZWFsc286IFsncmUnLCAnaW0nLCAnYWJzJywgJ2FyZyddXG59O1xuZXhwb3J0cy5jb25qRG9jcyA9IGNvbmpEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pbURvY3MgPSB2b2lkIDA7XG52YXIgaW1Eb2NzID0ge1xuICBuYW1lOiAnaW0nLFxuICBjYXRlZ29yeTogJ0NvbXBsZXgnLFxuICBzeW50YXg6IFsnaW0oeCknXSxcbiAgZGVzY3JpcHRpb246ICdHZXQgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGEgY29tcGxleCBudW1iZXIuJyxcbiAgZXhhbXBsZXM6IFsnaW0oMiArIDNpKScsICdyZSgyICsgM2kpJywgJ2ltKC01LjJpKScsICdpbSgyLjQpJ10sXG4gIHNlZWFsc286IFsncmUnLCAnY29uaicsICdhYnMnLCAnYXJnJ11cbn07XG5leHBvcnRzLmltRG9jcyA9IGltRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmVEb2NzID0gdm9pZCAwO1xudmFyIHJlRG9jcyA9IHtcbiAgbmFtZTogJ3JlJyxcbiAgY2F0ZWdvcnk6ICdDb21wbGV4JyxcbiAgc3ludGF4OiBbJ3JlKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnR2V0IHRoZSByZWFsIHBhcnQgb2YgYSBjb21wbGV4IG51bWJlci4nLFxuICBleGFtcGxlczogWydyZSgyICsgM2kpJywgJ2ltKDIgKyAzaSknLCAncmUoLTUuMmkpJywgJ3JlKDIuNCknXSxcbiAgc2VlYWxzbzogWydpbScsICdjb25qJywgJ2FicycsICdhcmcnXVxufTtcbmV4cG9ydHMucmVEb2NzID0gcmVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ldmFsdWF0ZURvY3MgPSB2b2lkIDA7XG52YXIgZXZhbHVhdGVEb2NzID0ge1xuICBuYW1lOiAnZXZhbHVhdGUnLFxuICBjYXRlZ29yeTogJ0V4cHJlc3Npb24nLFxuICBzeW50YXg6IFsnZXZhbHVhdGUoZXhwcmVzc2lvbiknLCAnZXZhbHVhdGUoW2V4cHIxLCBleHByMiwgZXhwcjMsIC4uLl0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnRXZhbHVhdGUgYW4gZXhwcmVzc2lvbiBvciBhbiBhcnJheSB3aXRoIGV4cHJlc3Npb25zLicsXG4gIGV4YW1wbGVzOiBbJ2V2YWx1YXRlKFwiMiArIDNcIiknLCAnZXZhbHVhdGUoXCJzcXJ0KFwiICsgNCArIFwiKVwiKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuZXZhbHVhdGVEb2NzID0gZXZhbHVhdGVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oZWxwRG9jcyA9IHZvaWQgMDtcbnZhciBoZWxwRG9jcyA9IHtcbiAgbmFtZTogJ2hlbHAnLFxuICBjYXRlZ29yeTogJ0V4cHJlc3Npb24nLFxuICBzeW50YXg6IFsnaGVscChvYmplY3QpJywgJ2hlbHAoc3RyaW5nKSddLFxuICBkZXNjcmlwdGlvbjogJ0Rpc3BsYXkgZG9jdW1lbnRhdGlvbiBvbiBhIGZ1bmN0aW9uIG9yIGRhdGEgdHlwZS4nLFxuICBleGFtcGxlczogWydoZWxwKHNxcnQpJywgJ2hlbHAoXCJjb21wbGV4XCIpJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5oZWxwRG9jcyA9IGhlbHBEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kaXN0YW5jZURvY3MgPSB2b2lkIDA7XG52YXIgZGlzdGFuY2VEb2NzID0ge1xuICBuYW1lOiAnZGlzdGFuY2UnLFxuICBjYXRlZ29yeTogJ0dlb21ldHJ5JyxcbiAgc3ludGF4OiBbJ2Rpc3RhbmNlKFt4MSwgeTFdLCBbeDIsIHkyXSknLCAnZGlzdGFuY2UoW1t4MSwgeTFdLCBbeDIsIHkyXV0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlcyB0aGUgRXVjbGlkZWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHBvaW50cy4nLFxuICBleGFtcGxlczogWydkaXN0YW5jZShbMCwwXSwgWzQsNF0pJywgJ2Rpc3RhbmNlKFtbMCwwXSwgWzQsNF1dKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuZGlzdGFuY2VEb2NzID0gZGlzdGFuY2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pbnRlcnNlY3REb2NzID0gdm9pZCAwO1xudmFyIGludGVyc2VjdERvY3MgPSB7XG4gIG5hbWU6ICdpbnRlcnNlY3QnLFxuICBjYXRlZ29yeTogJ0dlb21ldHJ5JyxcbiAgc3ludGF4OiBbJ2ludGVyc2VjdChleHByMSwgZXhwcjIsIGV4cHIzLCBleHByNCknLCAnaW50ZXJzZWN0KGV4cHIxLCBleHByMiwgZXhwcjMpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZXMgdGhlIGludGVyc2VjdGlvbiBwb2ludCBvZiBsaW5lcyBhbmQvb3IgcGxhbmVzLicsXG4gIGV4YW1wbGVzOiBbJ2ludGVyc2VjdChbMCwgMF0sIFsxMCwgMTBdLCBbMTAsIDBdLCBbMCwgMTBdKScsICdpbnRlcnNlY3QoWzEsIDAsIDFdLCAgWzQsIC0yLCAyXSwgWzEsIDEsIDEsIDZdKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuaW50ZXJzZWN0RG9jcyA9IGludGVyc2VjdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFuZERvY3MgPSB2b2lkIDA7XG52YXIgYW5kRG9jcyA9IHtcbiAgbmFtZTogJ2FuZCcsXG4gIGNhdGVnb3J5OiAnTG9naWNhbCcsXG4gIHN5bnRheDogWyd4IGFuZCB5JywgJ2FuZCh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0xvZ2ljYWwgYW5kLiBUZXN0IHdoZXRoZXIgdHdvIHZhbHVlcyBhcmUgYm90aCBkZWZpbmVkIHdpdGggYSBub256ZXJvL25vbmVtcHR5IHZhbHVlLicsXG4gIGV4YW1wbGVzOiBbJ3RydWUgYW5kIGZhbHNlJywgJ3RydWUgYW5kIHRydWUnLCAnMiBhbmQgNCddLFxuICBzZWVhbHNvOiBbJ25vdCcsICdvcicsICd4b3InXVxufTtcbmV4cG9ydHMuYW5kRG9jcyA9IGFuZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm5vdERvY3MgPSB2b2lkIDA7XG52YXIgbm90RG9jcyA9IHtcbiAgbmFtZTogJ25vdCcsXG4gIGNhdGVnb3J5OiAnTG9naWNhbCcsXG4gIHN5bnRheDogWydub3QgeCcsICdub3QoeCknXSxcbiAgZGVzY3JpcHRpb246ICdMb2dpY2FsIG5vdC4gRmxpcHMgdGhlIGJvb2xlYW4gdmFsdWUgb2YgZ2l2ZW4gYXJndW1lbnQuJyxcbiAgZXhhbXBsZXM6IFsnbm90IHRydWUnLCAnbm90IGZhbHNlJywgJ25vdCAyJywgJ25vdCAwJ10sXG4gIHNlZWFsc286IFsnYW5kJywgJ29yJywgJ3hvciddXG59O1xuZXhwb3J0cy5ub3REb2NzID0gbm90RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMub3JEb2NzID0gdm9pZCAwO1xudmFyIG9yRG9jcyA9IHtcbiAgbmFtZTogJ29yJyxcbiAgY2F0ZWdvcnk6ICdMb2dpY2FsJyxcbiAgc3ludGF4OiBbJ3ggb3IgeScsICdvcih4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0xvZ2ljYWwgb3IuIFRlc3QgaWYgYXQgbGVhc3Qgb25lIHZhbHVlIGlzIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsndHJ1ZSBvciBmYWxzZScsICdmYWxzZSBvciBmYWxzZScsICcwIG9yIDQnXSxcbiAgc2VlYWxzbzogWydub3QnLCAnYW5kJywgJ3hvciddXG59O1xuZXhwb3J0cy5vckRvY3MgPSBvckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnhvckRvY3MgPSB2b2lkIDA7XG52YXIgeG9yRG9jcyA9IHtcbiAgbmFtZTogJ3hvcicsXG4gIGNhdGVnb3J5OiAnTG9naWNhbCcsXG4gIHN5bnRheDogWyd4IHhvciB5JywgJ3hvcih4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0xvZ2ljYWwgZXhjbHVzaXZlIG9yLCB4b3IuIFRlc3Qgd2hldGhlciBvbmUgYW5kIG9ubHkgb25lIHZhbHVlIGlzIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsndHJ1ZSB4b3IgZmFsc2UnLCAnZmFsc2UgeG9yIGZhbHNlJywgJ3RydWUgeG9yIHRydWUnLCAnMCB4b3IgNCddLFxuICBzZWVhbHNvOiBbJ25vdCcsICdhbmQnLCAnb3InXVxufTtcbmV4cG9ydHMueG9yRG9jcyA9IHhvckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbHVtbkRvY3MgPSB2b2lkIDA7XG52YXIgY29sdW1uRG9jcyA9IHtcbiAgbmFtZTogJ2NvbHVtbicsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2NvbHVtbih4LCBpbmRleCknXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm4gYSBjb2x1bW4gZnJvbSBhIG1hdHJpeCBvciBhcnJheS4nLFxuICBleGFtcGxlczogWydBID0gW1sxLCAyXSwgWzMsIDRdXScsICdjb2x1bW4oQSwgMSknLCAnY29sdW1uKEEsIDIpJ10sXG4gIHNlZWFsc286IFsncm93J11cbn07XG5leHBvcnRzLmNvbHVtbkRvY3MgPSBjb2x1bW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb25jYXREb2NzID0gdm9pZCAwO1xudmFyIGNvbmNhdERvY3MgPSB7XG4gIG5hbWU6ICdjb25jYXQnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydjb25jYXQoQSwgQiwgQywgLi4uKScsICdjb25jYXQoQSwgQiwgQywgLi4uLCBkaW0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29uY2F0ZW5hdGUgbWF0cmljZXMuIEJ5IGRlZmF1bHQsIHRoZSBtYXRyaWNlcyBhcmUgY29uY2F0ZW5hdGVkIGJ5IHRoZSBsYXN0IGRpbWVuc2lvbi4gVGhlIGRpbWVuc2lvbiBvbiB3aGljaCB0byBjb25jYXRlbmF0ZSBjYW4gYmUgcHJvdmlkZWQgYXMgbGFzdCBhcmd1bWVudC4nLFxuICBleGFtcGxlczogWydBID0gWzEsIDI7IDUsIDZdJywgJ0IgPSBbMywgNDsgNywgOF0nLCAnY29uY2F0KEEsIEIpJywgJ2NvbmNhdChBLCBCLCAxKScsICdjb25jYXQoQSwgQiwgMiknXSxcbiAgc2VlYWxzbzogWydkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYWNlJywgJ3RyYW5zcG9zZScsICd6ZXJvcyddXG59O1xuZXhwb3J0cy5jb25jYXREb2NzID0gY29uY2F0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3Jvc3NEb2NzID0gdm9pZCAwO1xudmFyIGNyb3NzRG9jcyA9IHtcbiAgbmFtZTogJ2Nyb3NzJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnY3Jvc3MoQSwgQiknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGNyb3NzIHByb2R1Y3QgZm9yIHR3byB2ZWN0b3JzIGluIHRocmVlIGRpbWVuc2lvbmFsIHNwYWNlLicsXG4gIGV4YW1wbGVzOiBbJ2Nyb3NzKFsxLCAxLCAwXSwgIFswLCAxLCAxXSknLCAnY3Jvc3MoWzMsIC0zLCAxXSwgWzQsIDksIDJdKScsICdjcm9zcyhbMiwgMywgNF0sICBbNSwgNiwgN10pJ10sXG4gIHNlZWFsc286IFsnbXVsdGlwbHknLCAnZG90J11cbn07XG5leHBvcnRzLmNyb3NzRG9jcyA9IGNyb3NzRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3RyYW5zcG9zZURvY3MgPSB2b2lkIDA7XG52YXIgY3RyYW5zcG9zZURvY3MgPSB7XG4gIG5hbWU6ICdjdHJhbnNwb3NlJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsneFxcJycsICdjdHJhbnNwb3NlKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcGxleCBDb25qdWdhdGUgYW5kIFRyYW5zcG9zZSBhIG1hdHJpeCcsXG4gIGV4YW1wbGVzOiBbJ2EgPSBbMSwgMiwgMzsgNCwgNSwgNl0nLCAnYVxcJycsICdjdHJhbnNwb3NlKGEpJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAnemVyb3MnXVxufTtcbmV4cG9ydHMuY3RyYW5zcG9zZURvY3MgPSBjdHJhbnNwb3NlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGV0RG9jcyA9IHZvaWQgMDtcbnZhciBkZXREb2NzID0ge1xuICBuYW1lOiAnZGV0JyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnZGV0KHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdHJpeCcsXG4gIGV4YW1wbGVzOiBbJ2RldChbMSwgMjsgMywgNF0pJywgJ2RldChbLTIsIDIsIDM7IC0xLCAxLCAzOyAyLCAwLCAtMV0pJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RpYWcnLCAnaWRlbnRpdHknLCAnaW52JywgJ29uZXMnLCAncmFuZ2UnLCAnc2l6ZScsICdzcXVlZXplJywgJ3N1YnNldCcsICd0cmFjZScsICd0cmFuc3Bvc2UnLCAnemVyb3MnXVxufTtcbmV4cG9ydHMuZGV0RG9jcyA9IGRldERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRpYWdEb2NzID0gdm9pZCAwO1xudmFyIGRpYWdEb2NzID0ge1xuICBuYW1lOiAnZGlhZycsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2RpYWcoeCknLCAnZGlhZyh4LCBrKSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIGRpYWdvbmFsIG1hdHJpeCBvciByZXRyaWV2ZSB0aGUgZGlhZ29uYWwgb2YgYSBtYXRyaXguIFdoZW4geCBpcyBhIHZlY3RvciwgYSBtYXRyaXggd2l0aCB0aGUgdmVjdG9yIHZhbHVlcyBvbiB0aGUgZGlhZ29uYWwgd2lsbCBiZSByZXR1cm5lZC4gV2hlbiB4IGlzIGEgbWF0cml4LCBhIHZlY3RvciB3aXRoIHRoZSBkaWFnb25hbCB2YWx1ZXMgb2YgdGhlIG1hdHJpeCBpcyByZXR1cm5lZC4gV2hlbiBrIGlzIHByb3ZpZGVkLCB0aGUgay10aCBkaWFnb25hbCB3aWxsIGJlIGZpbGxlZCBpbiBvciByZXRyaWV2ZWQsIGlmIGsgaXMgcG9zaXRpdmUsIHRoZSB2YWx1ZXMgYXJlIHBsYWNlZCBvbiB0aGUgc3VwZXIgZGlhZ29uYWwuIFdoZW4gayBpcyBuZWdhdGl2ZSwgdGhlIHZhbHVlcyBhcmUgcGxhY2VkIG9uIHRoZSBzdWIgZGlhZ29uYWwuJyxcbiAgZXhhbXBsZXM6IFsnZGlhZygxOjMpJywgJ2RpYWcoMTozLCAxKScsICdhID0gWzEsIDIsIDM7IDQsIDUsIDY7IDcsIDgsIDldJywgJ2RpYWcoYSknXSxcbiAgc2VlYWxzbzogWydjb25jYXQnLCAnZGV0JywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLmRpYWdEb2NzID0gZGlhZ0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRvdERvY3MgPSB2b2lkIDA7XG52YXIgZG90RG9jcyA9IHtcbiAgbmFtZTogJ2RvdCcsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2RvdChBLCBCKScsICdBICogQiddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHZlY3RvcnMuICcgKyAnVGhlIGRvdCBwcm9kdWN0IG9mIEEgPSBbYTEsIGEyLCBhMywgLi4uLCBhbl0gYW5kIEIgPSBbYjEsIGIyLCBiMywgLi4uLCBibl0gJyArICdpcyBkZWZpbmVkIGFzIGRvdChBLCBCKSA9IGExICogYjEgKyBhMiAqIGIyICsgYTMgKiBiMyArIC4uLiArIGFuICogYm4nLFxuICBleGFtcGxlczogWydkb3QoWzIsIDQsIDFdLCBbMiwgMiwgM10pJywgJ1syLCA0LCAxXSAqIFsyLCAyLCAzXSddLFxuICBzZWVhbHNvOiBbJ211bHRpcGx5JywgJ2Nyb3NzJ11cbn07XG5leHBvcnRzLmRvdERvY3MgPSBkb3REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5laWdzRG9jcyA9IHZvaWQgMDtcbnZhciBlaWdzRG9jcyA9IHtcbiAgbmFtZTogJ2VpZ3MnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydlaWdzKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBlaWdlbnZhbHVlcyBhbmQgZWlnZW52ZWN0b3JzIG9mIGEgcmVhbCBzeW1tZXRyaWMgbWF0cml4JyxcbiAgZXhhbXBsZXM6IFsnZWlncyhbWzUsIDIuM10sIFsyLjMsIDFdXSknXSxcbiAgc2VlYWxzbzogWydpbnYnXVxufTtcbmV4cG9ydHMuZWlnc0RvY3MgPSBlaWdzRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmlsdGVyRG9jcyA9IHZvaWQgMDtcbnZhciBmaWx0ZXJEb2NzID0ge1xuICBuYW1lOiAnZmlsdGVyJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnZmlsdGVyKHgsIHRlc3QpJ10sXG4gIGRlc2NyaXB0aW9uOiAnRmlsdGVyIGl0ZW1zIGluIGEgbWF0cml4LicsXG4gIGV4YW1wbGVzOiBbJ2lzUG9zaXRpdmUoeCkgPSB4ID4gMCcsICdmaWx0ZXIoWzYsIC0yLCAtMSwgNCwgM10sIGlzUG9zaXRpdmUpJywgJ2ZpbHRlcihbNiwgLTIsIDAsIDEsIDBdLCB4ICE9IDApJ10sXG4gIHNlZWFsc286IFsnc29ydCcsICdtYXAnLCAnZm9yRWFjaCddXG59O1xuZXhwb3J0cy5maWx0ZXJEb2NzID0gZmlsdGVyRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmxhdHRlbkRvY3MgPSB2b2lkIDA7XG52YXIgZmxhdHRlbkRvY3MgPSB7XG4gIG5hbWU6ICdmbGF0dGVuJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnZmxhdHRlbih4KSddLFxuICBkZXNjcmlwdGlvbjogJ0ZsYXR0ZW4gYSBtdWx0aSBkaW1lbnNpb25hbCBtYXRyaXggaW50byBhIHNpbmdsZSBkaW1lbnNpb25hbCBtYXRyaXguJyxcbiAgZXhhbXBsZXM6IFsnYSA9IFsxLCAyLCAzOyA0LCA1LCA2XScsICdzaXplKGEpJywgJ2IgPSBmbGF0dGVuKGEpJywgJ3NpemUoYiknXSxcbiAgc2VlYWxzbzogWydjb25jYXQnLCAncmVzaXplJywgJ3NpemUnLCAnc3F1ZWV6ZSddXG59O1xuZXhwb3J0cy5mbGF0dGVuRG9jcyA9IGZsYXR0ZW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mb3JFYWNoRG9jcyA9IHZvaWQgMDtcbnZhciBmb3JFYWNoRG9jcyA9IHtcbiAgbmFtZTogJ2ZvckVhY2gnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydmb3JFYWNoKHgsIGNhbGxiYWNrKSddLFxuICBkZXNjcmlwdGlvbjogJ0l0ZXJhdGVzIG92ZXIgYWxsIGVsZW1lbnRzIG9mIGEgbWF0cml4L2FycmF5LCBhbmQgZXhlY3V0ZXMgdGhlIGdpdmVuIGNhbGxiYWNrIGZ1bmN0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ2ZvckVhY2goWzEsIDIsIDNdLCBmdW5jdGlvbih2YWwpIHsgY29uc29sZS5sb2codmFsKSB9KSddLFxuICBzZWVhbHNvOiBbJ21hcCcsICdzb3J0JywgJ2ZpbHRlciddXG59O1xuZXhwb3J0cy5mb3JFYWNoRG9jcyA9IGZvckVhY2hEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nZXRNYXRyaXhEYXRhVHlwZURvY3MgPSB2b2lkIDA7XG52YXIgZ2V0TWF0cml4RGF0YVR5cGVEb2NzID0ge1xuICBuYW1lOiAnZ2V0TWF0cml4RGF0YVR5cGUnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydnZXRNYXRyaXhEYXRhVHlwZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0ZpbmQgdGhlIGRhdGEgdHlwZSBvZiBhbGwgZWxlbWVudHMgaW4gYSBtYXRyaXggb3IgYXJyYXksICcgKyAnZm9yIGV4YW1wbGUgXCJudW1iZXJcIiBpZiBhbGwgaXRlbXMgYXJlIGEgbnVtYmVyICcgKyAnYW5kIFwiQ29tcGxleFwiIGlmIGFsbCB2YWx1ZXMgYXJlIGNvbXBsZXggbnVtYmVycy4gJyArICdJZiBhIG1hdHJpeCBjb250YWlucyBtb3JlIHRoYW4gb25lIGRhdGEgdHlwZSwgaXQgd2lsbCByZXR1cm4gXCJtaXhlZFwiLicsXG4gIGV4YW1wbGVzOiBbJ2dldE1hdHJpeERhdGFUeXBlKFsxLCAyLCAzXSknLCAnZ2V0TWF0cml4RGF0YVR5cGUoW1s1IGNtXSwgWzIgaW5jaF1dKScsICdnZXRNYXRyaXhEYXRhVHlwZShbMSwgXCJ0ZXh0XCJdKScsICdnZXRNYXRyaXhEYXRhVHlwZShbMSwgYmlnbnVtYmVyKDQpXSknXSxcbiAgc2VlYWxzbzogWydtYXRyaXgnLCAnc3BhcnNlJywgJ3R5cGVPZiddXG59O1xuZXhwb3J0cy5nZXRNYXRyaXhEYXRhVHlwZURvY3MgPSBnZXRNYXRyaXhEYXRhVHlwZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlkZW50aXR5RG9jcyA9IHZvaWQgMDtcbnZhciBpZGVudGl0eURvY3MgPSB7XG4gIG5hbWU6ICdpZGVudGl0eScsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2lkZW50aXR5KG4pJywgJ2lkZW50aXR5KG0sIG4pJywgJ2lkZW50aXR5KFttLCBuXSknXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBpZGVudGl0eSBtYXRyaXggd2l0aCBzaXplIG0tYnktbi4gVGhlIG1hdHJpeCBoYXMgb25lcyBvbiB0aGUgZGlhZ29uYWwgYW5kIHplcm9zIGVsc2V3aGVyZS4nLFxuICBleGFtcGxlczogWydpZGVudGl0eSgzKScsICdpZGVudGl0eSgzLCA1KScsICdhID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ2lkZW50aXR5KHNpemUoYSkpJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLmlkZW50aXR5RG9jcyA9IGlkZW50aXR5RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW52RG9jcyA9IHZvaWQgMDtcbnZhciBpbnZEb2NzID0ge1xuICBuYW1lOiAnaW52JyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnaW52KHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIG9mIGEgbWF0cml4JyxcbiAgZXhhbXBsZXM6IFsnaW52KFsxLCAyOyAzLCA0XSknLCAnaW52KDQpJywgJzEgLyA0J10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ29uZXMnLCAncmFuZ2UnLCAnc2l6ZScsICdzcXVlZXplJywgJ3N1YnNldCcsICd0cmFjZScsICd0cmFuc3Bvc2UnLCAnemVyb3MnXVxufTtcbmV4cG9ydHMuaW52RG9jcyA9IGludkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmtyb25Eb2NzID0gdm9pZCAwO1xudmFyIGtyb25Eb2NzID0ge1xuICBuYW1lOiAna3JvbicsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2tyb24oeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGVzIHRoZSBrcm9uZWNrZXIgcHJvZHVjdCBvZiAyIG1hdHJpY2VzIG9yIHZlY3RvcnMuJyxcbiAgZXhhbXBsZXM6IFsna3JvbihbWzEsIDBdLCBbMCwgMV1dLCBbWzEsIDJdLCBbMywgNF1dKScsICdrcm9uKFsxLDFdLCBbMiwzLDRdKSddLFxuICBzZWVhbHNvOiBbJ211bHRpcGx5JywgJ2RvdCcsICdjcm9zcyddXG59O1xuZXhwb3J0cy5rcm9uRG9jcyA9IGtyb25Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tYXBEb2NzID0gdm9pZCAwO1xudmFyIG1hcERvY3MgPSB7XG4gIG5hbWU6ICdtYXAnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydtYXAoeCwgY2FsbGJhY2spJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgbmV3IG1hdHJpeCBvciBhcnJheSB3aXRoIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleGVjdXRlZCBvbiBlYWNoIGVudHJ5IG9mIHRoZSBtYXRyaXgvYXJyYXkuJyxcbiAgZXhhbXBsZXM6IFsnbWFwKFsxLCAyLCAzXSwgc3F1YXJlKSddLFxuICBzZWVhbHNvOiBbJ2ZpbHRlcicsICdmb3JFYWNoJ11cbn07XG5leHBvcnRzLm1hcERvY3MgPSBtYXBEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5vbmVzRG9jcyA9IHZvaWQgMDtcbnZhciBvbmVzRG9jcyA9IHtcbiAgbmFtZTogJ29uZXMnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydvbmVzKG0pJywgJ29uZXMobSwgbiknLCAnb25lcyhtLCBuLCBwLCAuLi4pJywgJ29uZXMoW21dKScsICdvbmVzKFttLCBuXSknLCAnb25lcyhbbSwgbiwgcCwgLi4uXSknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBtYXRyaXggY29udGFpbmluZyBvbmVzLicsXG4gIGV4YW1wbGVzOiBbJ29uZXMoMyknLCAnb25lcygzLCA1KScsICdvbmVzKFsyLDNdKSAqIDQuNScsICdhID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ29uZXMoc2l6ZShhKSknXSxcbiAgc2VlYWxzbzogWydjb25jYXQnLCAnZGV0JywgJ2RpYWcnLCAnaWRlbnRpdHknLCAnaW52JywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLm9uZXNEb2NzID0gb25lc0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBhcnRpdGlvblNlbGVjdERvY3MgPSB2b2lkIDA7XG52YXIgcGFydGl0aW9uU2VsZWN0RG9jcyA9IHtcbiAgbmFtZTogJ3BhcnRpdGlvblNlbGVjdCcsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ3BhcnRpdGlvblNlbGVjdCh4LCBrKScsICdwYXJ0aXRpb25TZWxlY3QoeCwgaywgY29tcGFyZSknXSxcbiAgZGVzY3JpcHRpb246ICdQYXJ0aXRpb24tYmFzZWQgc2VsZWN0aW9uIG9mIGFuIGFycmF5IG9yIDFEIG1hdHJpeC4gV2lsbCBmaW5kIHRoZSBrdGggc21hbGxlc3QgdmFsdWUsIGFuZCBtdXRhdGVzIHRoZSBpbnB1dCBhcnJheS4gVXNlcyBRdWlja3NlbGVjdC4nLFxuICBleGFtcGxlczogWydwYXJ0aXRpb25TZWxlY3QoWzUsIDEwLCAxXSwgMiknLCAncGFydGl0aW9uU2VsZWN0KFtcIkNcIiwgXCJCXCIsIFwiQVwiLCBcIkRcIl0sIDEpJ10sXG4gIHNlZWFsc286IFsnc29ydCddXG59O1xuZXhwb3J0cy5wYXJ0aXRpb25TZWxlY3REb2NzID0gcGFydGl0aW9uU2VsZWN0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmFuZ2VEb2NzID0gdm9pZCAwO1xudmFyIHJhbmdlRG9jcyA9IHtcbiAgbmFtZTogJ3JhbmdlJyxcbiAgY2F0ZWdvcnk6ICdUeXBlJyxcbiAgc3ludGF4OiBbJ3N0YXJ0OmVuZCcsICdzdGFydDpzdGVwOmVuZCcsICdyYW5nZShzdGFydCwgZW5kKScsICdyYW5nZShzdGFydCwgZW5kLCBzdGVwKScsICdyYW5nZShzdHJpbmcpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgcmFuZ2UuIExvd2VyIGJvdW5kIG9mIHRoZSByYW5nZSBpcyBpbmNsdWRlZCwgdXBwZXIgYm91bmQgaXMgZXhjbHVkZWQuJyxcbiAgZXhhbXBsZXM6IFsnMTo1JywgJzM6LTE6LTMnLCAncmFuZ2UoMywgNyknLCAncmFuZ2UoMCwgMTIsIDIpJywgJ3JhbmdlKFwiNDoxMFwiKScsICdhID0gWzEsIDIsIDMsIDQ7IDUsIDYsIDcsIDhdJywgJ2FbMToyLCAxOjJdJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLnJhbmdlRG9jcyA9IHJhbmdlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmVzaGFwZURvY3MgPSB2b2lkIDA7XG52YXIgcmVzaGFwZURvY3MgPSB7XG4gIG5hbWU6ICdyZXNoYXBlJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsncmVzaGFwZSh4LCBzaXplcyknXSxcbiAgZGVzY3JpcHRpb246ICdSZXNoYXBlIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXkgdG8gZml0IHRoZSBzcGVjaWZpZWQgZGltZW5zaW9ucy4nLFxuICBleGFtcGxlczogWydyZXNoYXBlKFsxLCAyLCAzLCA0LCA1LCA2XSwgWzIsIDNdKScsICdyZXNoYXBlKFtbMSwgMl0sIFszLCA0XV0sIFsxLCA0XSknLCAncmVzaGFwZShbWzEsIDJdLCBbMywgNF1dLCBbNF0pJ10sXG4gIHNlZWFsc286IFsnc2l6ZScsICdzcXVlZXplJywgJ3Jlc2l6ZSddXG59O1xuZXhwb3J0cy5yZXNoYXBlRG9jcyA9IHJlc2hhcGVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yZXNpemVEb2NzID0gdm9pZCAwO1xudmFyIHJlc2l6ZURvY3MgPSB7XG4gIG5hbWU6ICdyZXNpemUnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydyZXNpemUoeCwgc2l6ZSknLCAncmVzaXplKHgsIHNpemUsIGRlZmF1bHRWYWx1ZSknXSxcbiAgZGVzY3JpcHRpb246ICdSZXNpemUgYSBtYXRyaXguJyxcbiAgZXhhbXBsZXM6IFsncmVzaXplKFsxLDIsMyw0LDVdLCBbM10pJywgJ3Jlc2l6ZShbMSwyLDNdLCBbNV0pJywgJ3Jlc2l6ZShbMSwyLDNdLCBbNV0sIC0xKScsICdyZXNpemUoMiwgWzIsIDNdKScsICdyZXNpemUoXCJoZWxsb1wiLCBbOF0sIFwiIVwiKSddLFxuICBzZWVhbHNvOiBbJ3NpemUnLCAnc3Vic2V0JywgJ3NxdWVlemUnLCAncmVzaGFwZSddXG59O1xuZXhwb3J0cy5yZXNpemVEb2NzID0gcmVzaXplRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucm93RG9jcyA9IHZvaWQgMDtcbnZhciByb3dEb2NzID0ge1xuICBuYW1lOiAncm93JyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsncm93KHgsIGluZGV4KSddLFxuICBkZXNjcmlwdGlvbjogJ1JldHVybiBhIHJvdyBmcm9tIGEgbWF0cml4IG9yIGFycmF5LicsXG4gIGV4YW1wbGVzOiBbJ0EgPSBbWzEsIDJdLCBbMywgNF1dJywgJ3JvdyhBLCAxKScsICdyb3coQSwgMiknXSxcbiAgc2VlYWxzbzogWydjb2x1bW4nXVxufTtcbmV4cG9ydHMucm93RG9jcyA9IHJvd0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNpemVEb2NzID0gdm9pZCAwO1xudmFyIHNpemVEb2NzID0ge1xuICBuYW1lOiAnc2l6ZScsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ3NpemUoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIHNpemUgb2YgYSBtYXRyaXguJyxcbiAgZXhhbXBsZXM6IFsnc2l6ZSgyLjMpJywgJ3NpemUoXCJoZWxsbyB3b3JsZFwiKScsICdhID0gWzEsIDI7IDMsIDQ7IDUsIDZdJywgJ3NpemUoYSknLCAnc2l6ZSgxOjYpJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYWNlJywgJ3RyYW5zcG9zZScsICd6ZXJvcyddXG59O1xuZXhwb3J0cy5zaXplRG9jcyA9IHNpemVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zb3J0RG9jcyA9IHZvaWQgMDtcbnZhciBzb3J0RG9jcyA9IHtcbiAgbmFtZTogJ3NvcnQnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydzb3J0KHgpJywgJ3NvcnQoeCwgY29tcGFyZSknXSxcbiAgZGVzY3JpcHRpb246ICdTb3J0IHRoZSBpdGVtcyBpbiBhIG1hdHJpeC4gQ29tcGFyZSBjYW4gYmUgYSBzdHJpbmcgXCJhc2NcIiwgXCJkZXNjXCIsIFwibmF0dXJhbFwiLCBvciBhIGN1c3RvbSBzb3J0IGZ1bmN0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NvcnQoWzUsIDEwLCAxXSknLCAnc29ydChbXCJDXCIsIFwiQlwiLCBcIkFcIiwgXCJEXCJdKScsICdzb3J0QnlMZW5ndGgoYSwgYikgPSBzaXplKGEpWzFdIC0gc2l6ZShiKVsxXScsICdzb3J0KFtcIkxhbmdkb25cIiwgXCJUb21cIiwgXCJTYXJhXCJdLCBzb3J0QnlMZW5ndGgpJywgJ3NvcnQoW1wiMTBcIiwgXCIxXCIsIFwiMlwiXSwgXCJuYXR1cmFsXCIpJ10sXG4gIHNlZWFsc286IFsnbWFwJywgJ2ZpbHRlcicsICdmb3JFYWNoJ11cbn07XG5leHBvcnRzLnNvcnREb2NzID0gc29ydERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNxdWVlemVEb2NzID0gdm9pZCAwO1xudmFyIHNxdWVlemVEb2NzID0ge1xuICBuYW1lOiAnc3F1ZWV6ZScsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ3NxdWVlemUoeCknXSxcbiAgZGVzY3JpcHRpb246ICdSZW1vdmUgaW5uZXIgYW5kIG91dGVyIHNpbmdsZXRvbiBkaW1lbnNpb25zIGZyb20gYSBtYXRyaXguJyxcbiAgZXhhbXBsZXM6IFsnYSA9IHplcm9zKDMsMiwxKScsICdzaXplKHNxdWVlemUoYSkpJywgJ2IgPSB6ZXJvcygxLDEsMyknLCAnc2l6ZShzcXVlZXplKGIpKSddLFxuICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3N1YnNldCcsICd0cmFjZScsICd0cmFuc3Bvc2UnLCAnemVyb3MnXVxufTtcbmV4cG9ydHMuc3F1ZWV6ZURvY3MgPSBzcXVlZXplRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3Vic2V0RG9jcyA9IHZvaWQgMDtcbnZhciBzdWJzZXREb2NzID0ge1xuICBuYW1lOiAnc3Vic2V0JyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsndmFsdWUoaW5kZXgpJywgJ3ZhbHVlKGluZGV4KSA9IHJlcGxhY2VtZW50JywgJ3N1YnNldCh2YWx1ZSwgW2luZGV4XSknLCAnc3Vic2V0KHZhbHVlLCBbaW5kZXhdLCByZXBsYWNlbWVudCknXSxcbiAgZGVzY3JpcHRpb246ICdHZXQgb3Igc2V0IGEgc3Vic2V0IG9mIGEgbWF0cml4IG9yIHN0cmluZy4gJyArICdJbmRleGVzIGFyZSBvbmUtYmFzZWQuICcgKyAnQm90aCB0aGUgcmFuZ2VzIGxvd2VyLWJvdW5kIGFuZCB1cHBlci1ib3VuZCBhcmUgaW5jbHVkZWQuJyxcbiAgZXhhbXBsZXM6IFsnZCA9IFsxLCAyOyAzLCA0XScsICdlID0gW10nLCAnZVsxLCAxOjJdID0gWzUsIDZdJywgJ2VbMiwgOl0gPSBbNywgOF0nLCAnZiA9IGQgKiBlJywgJ2ZbMiwgMV0nLCAnZls6LCAxXSddLFxuICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3NxdWVlemUnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLnN1YnNldERvY3MgPSBzdWJzZXREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50cmFjZURvY3MgPSB2b2lkIDA7XG52YXIgdHJhY2VEb2NzID0ge1xuICBuYW1lOiAndHJhY2UnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWyd0cmFjZShBKSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgdHJhY2Ugb2YgYSBtYXRyaXg6IHRoZSBzdW0gb2YgdGhlIGVsZW1lbnRzIG9uIHRoZSBtYWluIGRpYWdvbmFsIG9mIGEgc3F1YXJlIG1hdHJpeC4nLFxuICBleGFtcGxlczogWydBID0gWzEsIDIsIDM7IC0xLCAyLCAzOyAyLCAwLCAzXScsICd0cmFjZShBKSddLFxuICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYW5zcG9zZScsICd6ZXJvcyddXG59O1xuZXhwb3J0cy50cmFjZURvY3MgPSB0cmFjZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRyYW5zcG9zZURvY3MgPSB2b2lkIDA7XG52YXIgdHJhbnNwb3NlRG9jcyA9IHtcbiAgbmFtZTogJ3RyYW5zcG9zZScsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ3hcXCcnLCAndHJhbnNwb3NlKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnVHJhbnNwb3NlIGEgbWF0cml4JyxcbiAgZXhhbXBsZXM6IFsnYSA9IFsxLCAyLCAzOyA0LCA1LCA2XScsICdhXFwnJywgJ3RyYW5zcG9zZShhKSddLFxuICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYWNlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLnRyYW5zcG9zZURvY3MgPSB0cmFuc3Bvc2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy56ZXJvc0RvY3MgPSB2b2lkIDA7XG52YXIgemVyb3NEb2NzID0ge1xuICBuYW1lOiAnemVyb3MnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWyd6ZXJvcyhtKScsICd6ZXJvcyhtLCBuKScsICd6ZXJvcyhtLCBuLCBwLCAuLi4pJywgJ3plcm9zKFttXSknLCAnemVyb3MoW20sIG5dKScsICd6ZXJvcyhbbSwgbiwgcCwgLi4uXSknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBtYXRyaXggY29udGFpbmluZyB6ZXJvcy4nLFxuICBleGFtcGxlczogWyd6ZXJvcygzKScsICd6ZXJvcygzLCA1KScsICdhID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ3plcm9zKHNpemUoYSkpJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJ11cbn07XG5leHBvcnRzLnplcm9zRG9jcyA9IHplcm9zRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tYmluYXRpb25zRG9jcyA9IHZvaWQgMDtcbnZhciBjb21iaW5hdGlvbnNEb2NzID0ge1xuICBuYW1lOiAnY29tYmluYXRpb25zJyxcbiAgY2F0ZWdvcnk6ICdQcm9iYWJpbGl0eScsXG4gIHN5bnRheDogWydjb21iaW5hdGlvbnMobiwgayknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBudW1iZXIgb2YgY29tYmluYXRpb25zIG9mIG4gaXRlbXMgdGFrZW4gayBhdCBhIHRpbWUnLFxuICBleGFtcGxlczogWydjb21iaW5hdGlvbnMoNywgNSknXSxcbiAgc2VlYWxzbzogWydjb21iaW5hdGlvbnNXaXRoUmVwJywgJ3Blcm11dGF0aW9ucycsICdmYWN0b3JpYWwnXVxufTtcbmV4cG9ydHMuY29tYmluYXRpb25zRG9jcyA9IGNvbWJpbmF0aW9uc0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbWJpbmF0aW9uc1dpdGhSZXBEb2NzID0gdm9pZCAwO1xudmFyIGNvbWJpbmF0aW9uc1dpdGhSZXBEb2NzID0ge1xuICBuYW1lOiAnY29tYmluYXRpb25zV2l0aFJlcCcsXG4gIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLFxuICBzeW50YXg6IFsnY29tYmluYXRpb25zV2l0aFJlcChuLCBrKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIG51bWJlciBvZiBjb21iaW5hdGlvbnMgb2YgbiBpdGVtcyB0YWtlbiBrIGF0IGEgdGltZSB3aXRoIHJlcGxhY2VtZW50cy4nLFxuICBleGFtcGxlczogWydjb21iaW5hdGlvbnNXaXRoUmVwKDcsIDUpJ10sXG4gIHNlZWFsc286IFsnY29tYmluYXRpb25zJywgJ3Blcm11dGF0aW9ucycsICdmYWN0b3JpYWwnXVxufTtcbmV4cG9ydHMuY29tYmluYXRpb25zV2l0aFJlcERvY3MgPSBjb21iaW5hdGlvbnNXaXRoUmVwRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmFjdG9yaWFsRG9jcyA9IHZvaWQgMDtcbnZhciBmYWN0b3JpYWxEb2NzID0ge1xuICBuYW1lOiAnZmFjdG9yaWFsJyxcbiAgY2F0ZWdvcnk6ICdQcm9iYWJpbGl0eScsXG4gIHN5bnRheDogWyduIScsICdmYWN0b3JpYWwobiknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBmYWN0b3JpYWwgb2YgYSB2YWx1ZScsXG4gIGV4YW1wbGVzOiBbJzUhJywgJzUgKiA0ICogMyAqIDIgKiAxJywgJzMhJ10sXG4gIHNlZWFsc286IFsnY29tYmluYXRpb25zJywgJ2NvbWJpbmF0aW9uc1dpdGhSZXAnLCAncGVybXV0YXRpb25zJywgJ2dhbW1hJ11cbn07XG5leHBvcnRzLmZhY3RvcmlhbERvY3MgPSBmYWN0b3JpYWxEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nYW1tYURvY3MgPSB2b2lkIDA7XG52YXIgZ2FtbWFEb2NzID0ge1xuICBuYW1lOiAnZ2FtbWEnLFxuICBjYXRlZ29yeTogJ1Byb2JhYmlsaXR5JyxcbiAgc3ludGF4OiBbJ2dhbW1hKG4pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgZ2FtbWEgZnVuY3Rpb24uIEZvciBzbWFsbCB2YWx1ZXMsIHRoZSBMYW5jem9zIGFwcHJveGltYXRpb24gaXMgdXNlZCwgYW5kIGZvciBsYXJnZSB2YWx1ZXMgdGhlIGV4dGVuZGVkIFN0aXJsaW5nIGFwcHJveGltYXRpb24uJyxcbiAgZXhhbXBsZXM6IFsnZ2FtbWEoNCknLCAnMyEnLCAnZ2FtbWEoMS8yKScsICdzcXJ0KHBpKSddLFxuICBzZWVhbHNvOiBbJ2ZhY3RvcmlhbCddXG59O1xuZXhwb3J0cy5nYW1tYURvY3MgPSBnYW1tYURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmtsZGl2ZXJnZW5jZURvY3MgPSB2b2lkIDA7XG52YXIga2xkaXZlcmdlbmNlRG9jcyA9IHtcbiAgbmFtZTogJ2tsZGl2ZXJnZW5jZScsXG4gIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLFxuICBzeW50YXg6IFsna2xkaXZlcmdlbmNlKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBLdWxsYmFjay1MZWlibGVyIChLTCkgZGl2ZXJnZW5jZSAgYmV0d2VlbiB0d28gZGlzdHJpYnV0aW9ucy4nLFxuICBleGFtcGxlczogWydrbGRpdmVyZ2VuY2UoWzAuNywwLjUsMC40XSwgWzAuMiwwLjksMC41XSknXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLmtsZGl2ZXJnZW5jZURvY3MgPSBrbGRpdmVyZ2VuY2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tdWx0aW5vbWlhbERvY3MgPSB2b2lkIDA7XG52YXIgbXVsdGlub21pYWxEb2NzID0ge1xuICBuYW1lOiAnbXVsdGlub21pYWwnLFxuICBjYXRlZ29yeTogJ1Byb2JhYmlsaXR5JyxcbiAgc3ludGF4OiBbJ211bHRpbm9taWFsKEEpJ10sXG4gIGRlc2NyaXB0aW9uOiAnTXVsdGlub21pYWwgQ29lZmZpY2llbnRzIGNvbXB1dGUgdGhlIG51bWJlciBvZiB3YXlzIG9mIHBpY2tpbmcgYTEsIGEyLCAuLi4sIGFpIHVub3JkZXJlZCBvdXRjb21lcyBmcm9tIGBuYCBwb3NzaWJpbGl0aWVzLiBtdWx0aW5vbWlhbCB0YWtlcyBvbmUgYXJyYXkgb2YgaW50ZWdlcnMgYXMgYW4gYXJndW1lbnQuIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IGV2ZXJ5IGFpID4gMC4nLFxuICBleGFtcGxlczogWydtdWx0aW5vbWlhbChbMSwgMiwgMV0pJ10sXG4gIHNlZWFsc286IFsnY29tYmluYXRpb25zJywgJ2ZhY3RvcmlhbCddXG59O1xuZXhwb3J0cy5tdWx0aW5vbWlhbERvY3MgPSBtdWx0aW5vbWlhbERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBlcm11dGF0aW9uc0RvY3MgPSB2b2lkIDA7XG52YXIgcGVybXV0YXRpb25zRG9jcyA9IHtcbiAgbmFtZTogJ3Blcm11dGF0aW9ucycsXG4gIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLFxuICBzeW50YXg6IFsncGVybXV0YXRpb25zKG4pJywgJ3Blcm11dGF0aW9ucyhuLCBrKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIG51bWJlciBvZiBwZXJtdXRhdGlvbnMgb2YgbiBpdGVtcyB0YWtlbiBrIGF0IGEgdGltZScsXG4gIGV4YW1wbGVzOiBbJ3Blcm11dGF0aW9ucyg1KScsICdwZXJtdXRhdGlvbnMoNSwgMyknXSxcbiAgc2VlYWxzbzogWydjb21iaW5hdGlvbnMnLCAnY29tYmluYXRpb25zV2l0aFJlcCcsICdmYWN0b3JpYWwnXVxufTtcbmV4cG9ydHMucGVybXV0YXRpb25zRG9jcyA9IHBlcm11dGF0aW9uc0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBpY2tSYW5kb21Eb2NzID0gdm9pZCAwO1xudmFyIHBpY2tSYW5kb21Eb2NzID0ge1xuICBuYW1lOiAncGlja1JhbmRvbScsXG4gIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLFxuICBzeW50YXg6IFsncGlja1JhbmRvbShhcnJheSknLCAncGlja1JhbmRvbShhcnJheSwgbnVtYmVyKScsICdwaWNrUmFuZG9tKGFycmF5LCB3ZWlnaHRzKScsICdwaWNrUmFuZG9tKGFycmF5LCBudW1iZXIsIHdlaWdodHMpJywgJ3BpY2tSYW5kb20oYXJyYXksIHdlaWdodHMsIG51bWJlciknXSxcbiAgZGVzY3JpcHRpb246ICdQaWNrIGEgcmFuZG9tIGVudHJ5IGZyb20gYSBnaXZlbiBhcnJheS4nLFxuICBleGFtcGxlczogWydwaWNrUmFuZG9tKDA6MTApJywgJ3BpY2tSYW5kb20oWzEsIDMsIDEsIDZdKScsICdwaWNrUmFuZG9tKFsxLCAzLCAxLCA2XSwgMiknLCAncGlja1JhbmRvbShbMSwgMywgMSwgNl0sIFsyLCAzLCAyLCAxXSknLCAncGlja1JhbmRvbShbMSwgMywgMSwgNl0sIDIsIFsyLCAzLCAyLCAxXSknLCAncGlja1JhbmRvbShbMSwgMywgMSwgNl0sIFsyLCAzLCAyLCAxXSwgMiknXSxcbiAgc2VlYWxzbzogWydyYW5kb20nLCAncmFuZG9tSW50J11cbn07XG5leHBvcnRzLnBpY2tSYW5kb21Eb2NzID0gcGlja1JhbmRvbURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJhbmRvbURvY3MgPSB2b2lkIDA7XG52YXIgcmFuZG9tRG9jcyA9IHtcbiAgbmFtZTogJ3JhbmRvbScsXG4gIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLFxuICBzeW50YXg6IFsncmFuZG9tKCknLCAncmFuZG9tKG1heCknLCAncmFuZG9tKG1pbiwgbWF4KScsICdyYW5kb20oc2l6ZSknLCAncmFuZG9tKHNpemUsIG1heCknLCAncmFuZG9tKHNpemUsIG1pbiwgbWF4KSddLFxuICBkZXNjcmlwdGlvbjogJ1JldHVybiBhIHJhbmRvbSBudW1iZXIuJyxcbiAgZXhhbXBsZXM6IFsncmFuZG9tKCknLCAncmFuZG9tKDEwLCAyMCknLCAncmFuZG9tKFsyLCAzXSknXSxcbiAgc2VlYWxzbzogWydwaWNrUmFuZG9tJywgJ3JhbmRvbUludCddXG59O1xuZXhwb3J0cy5yYW5kb21Eb2NzID0gcmFuZG9tRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmFuZG9tSW50RG9jcyA9IHZvaWQgMDtcbnZhciByYW5kb21JbnREb2NzID0ge1xuICBuYW1lOiAncmFuZG9tSW50JyxcbiAgY2F0ZWdvcnk6ICdQcm9iYWJpbGl0eScsXG4gIHN5bnRheDogWydyYW5kb21JbnQobWF4KScsICdyYW5kb21JbnQobWluLCBtYXgpJywgJ3JhbmRvbUludChzaXplKScsICdyYW5kb21JbnQoc2l6ZSwgbWF4KScsICdyYW5kb21JbnQoc2l6ZSwgbWluLCBtYXgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnUmV0dXJuIGEgcmFuZG9tIGludGVnZXIgbnVtYmVyJyxcbiAgZXhhbXBsZXM6IFsncmFuZG9tSW50KDEwLCAyMCknLCAncmFuZG9tSW50KFsyLCAzXSwgMTApJ10sXG4gIHNlZWFsc286IFsncGlja1JhbmRvbScsICdyYW5kb20nXVxufTtcbmV4cG9ydHMucmFuZG9tSW50RG9jcyA9IHJhbmRvbUludERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbXBhcmVEb2NzID0gdm9pZCAwO1xudmFyIGNvbXBhcmVEb2NzID0ge1xuICBuYW1lOiAnY29tcGFyZScsXG4gIGNhdGVnb3J5OiAnUmVsYXRpb25hbCcsXG4gIHN5bnRheDogWydjb21wYXJlKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcGFyZSB0d28gdmFsdWVzLiAnICsgJ1JldHVybnMgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS4nLFxuICBleGFtcGxlczogWydjb21wYXJlKDIsIDMpJywgJ2NvbXBhcmUoMywgMiknLCAnY29tcGFyZSgyLCAyKScsICdjb21wYXJlKDVjbSwgNDBtbSknLCAnY29tcGFyZSgyLCBbMSwgMiwgM10pJ10sXG4gIHNlZWFsc286IFsnZXF1YWwnLCAndW5lcXVhbCcsICdzbWFsbGVyJywgJ3NtYWxsZXJFcScsICdsYXJnZXJFcScsICdjb21wYXJlTmF0dXJhbCcsICdjb21wYXJlVGV4dCddXG59O1xuZXhwb3J0cy5jb21wYXJlRG9jcyA9IGNvbXBhcmVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb21wYXJlTmF0dXJhbERvY3MgPSB2b2lkIDA7XG52YXIgY29tcGFyZU5hdHVyYWxEb2NzID0ge1xuICBuYW1lOiAnY29tcGFyZU5hdHVyYWwnLFxuICBjYXRlZ29yeTogJ1JlbGF0aW9uYWwnLFxuICBzeW50YXg6IFsnY29tcGFyZU5hdHVyYWwoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wYXJlIHR3byB2YWx1ZXMgb2YgYW55IHR5cGUgaW4gYSBkZXRlcm1pbmlzdGljLCBuYXR1cmFsIHdheS4gJyArICdSZXR1cm5zIDEgd2hlbiB4ID4geSwgLTEgd2hlbiB4IDwgeSwgYW5kIDAgd2hlbiB4ID09IHkuJyxcbiAgZXhhbXBsZXM6IFsnY29tcGFyZU5hdHVyYWwoMiwgMyknLCAnY29tcGFyZU5hdHVyYWwoMywgMiknLCAnY29tcGFyZU5hdHVyYWwoMiwgMiknLCAnY29tcGFyZU5hdHVyYWwoNWNtLCA0MG1tKScsICdjb21wYXJlTmF0dXJhbChcIjJcIiwgXCIxMFwiKScsICdjb21wYXJlTmF0dXJhbCgyICsgM2ksIDIgKyA0aSknLCAnY29tcGFyZU5hdHVyYWwoWzEsIDIsIDRdLCBbMSwgMiwgM10pJywgJ2NvbXBhcmVOYXR1cmFsKFsxLCA1XSwgWzEsIDIsIDNdKScsICdjb21wYXJlTmF0dXJhbChbMSwgMl0sIFsxLCAyXSknLCAnY29tcGFyZU5hdHVyYWwoe2E6IDJ9LCB7YTogNH0pJ10sXG4gIHNlZWFsc286IFsnZXF1YWwnLCAndW5lcXVhbCcsICdzbWFsbGVyJywgJ3NtYWxsZXJFcScsICdsYXJnZXJFcScsICdjb21wYXJlJywgJ2NvbXBhcmVUZXh0J11cbn07XG5leHBvcnRzLmNvbXBhcmVOYXR1cmFsRG9jcyA9IGNvbXBhcmVOYXR1cmFsRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcGFyZVRleHREb2NzID0gdm9pZCAwO1xudmFyIGNvbXBhcmVUZXh0RG9jcyA9IHtcbiAgbmFtZTogJ2NvbXBhcmVUZXh0JyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ2NvbXBhcmVUZXh0KHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcGFyZSB0d28gc3RyaW5ncyBsZXhpY2FsbHkuIENvbXBhcmlzb24gaXMgY2FzZSBzZW5zaXRpdmUuICcgKyAnUmV0dXJucyAxIHdoZW4geCA+IHksIC0xIHdoZW4geCA8IHksIGFuZCAwIHdoZW4geCA9PSB5LicsXG4gIGV4YW1wbGVzOiBbJ2NvbXBhcmVUZXh0KFwiQlwiLCBcIkFcIiknLCAnY29tcGFyZVRleHQoXCJBXCIsIFwiQlwiKScsICdjb21wYXJlVGV4dChcIkFcIiwgXCJBXCIpJywgJ2NvbXBhcmVUZXh0KFwiMlwiLCBcIjEwXCIpJywgJ2NvbXBhcmUoXCIyXCIsIFwiMTBcIiknLCAnY29tcGFyZSgyLCAxMCknLCAnY29tcGFyZU5hdHVyYWwoXCIyXCIsIFwiMTBcIiknLCAnY29tcGFyZVRleHQoXCJCXCIsIFtcIkFcIiwgXCJCXCIsIFwiQ1wiXSknXSxcbiAgc2VlYWxzbzogWydjb21wYXJlJywgJ2NvbXBhcmVOYXR1cmFsJ11cbn07XG5leHBvcnRzLmNvbXBhcmVUZXh0RG9jcyA9IGNvbXBhcmVUZXh0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVlcEVxdWFsRG9jcyA9IHZvaWQgMDtcbnZhciBkZWVwRXF1YWxEb2NzID0ge1xuICBuYW1lOiAnZGVlcEVxdWFsJyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ2RlZXBFcXVhbCh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NoZWNrIGVxdWFsaXR5IG9mIHR3byBtYXRyaWNlcyBlbGVtZW50IHdpc2UuIFJldHVybnMgdHJ1ZSBpZiB0aGUgc2l6ZSBvZiBib3RoIG1hdHJpY2VzIGlzIGVxdWFsIGFuZCB3aGVuIGFuZCBlYWNoIG9mIHRoZSBlbGVtZW50cyBhcmUgZXF1YWwuJyxcbiAgZXhhbXBsZXM6IFsnZGVlcEVxdWFsKFsxLDMsNF0sIFsxLDMsNF0pJywgJ2RlZXBFcXVhbChbMSwzLDRdLCBbMSwzXSknXSxcbiAgc2VlYWxzbzogWydlcXVhbCcsICd1bmVxdWFsJywgJ3NtYWxsZXInLCAnbGFyZ2VyJywgJ3NtYWxsZXJFcScsICdsYXJnZXJFcScsICdjb21wYXJlJ11cbn07XG5leHBvcnRzLmRlZXBFcXVhbERvY3MgPSBkZWVwRXF1YWxEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lcXVhbERvY3MgPSB2b2lkIDA7XG52YXIgZXF1YWxEb2NzID0ge1xuICBuYW1lOiAnZXF1YWwnLFxuICBjYXRlZ29yeTogJ1JlbGF0aW9uYWwnLFxuICBzeW50YXg6IFsneCA9PSB5JywgJ2VxdWFsKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2hlY2sgZXF1YWxpdHkgb2YgdHdvIHZhbHVlcy4gUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWFsLCBhbmQgZmFsc2UgaWYgbm90LicsXG4gIGV4YW1wbGVzOiBbJzIrMiA9PSAzJywgJzIrMiA9PSA0JywgJ2EgPSAzLjInLCAnYiA9IDYtMi44JywgJ2EgPT0gYicsICc1MGNtID09IDAuNW0nXSxcbiAgc2VlYWxzbzogWyd1bmVxdWFsJywgJ3NtYWxsZXInLCAnbGFyZ2VyJywgJ3NtYWxsZXJFcScsICdsYXJnZXJFcScsICdjb21wYXJlJywgJ2RlZXBFcXVhbCcsICdlcXVhbFRleHQnXVxufTtcbmV4cG9ydHMuZXF1YWxEb2NzID0gZXF1YWxEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lcXVhbFRleHREb2NzID0gdm9pZCAwO1xudmFyIGVxdWFsVGV4dERvY3MgPSB7XG4gIG5hbWU6ICdlcXVhbFRleHQnLFxuICBjYXRlZ29yeTogJ1JlbGF0aW9uYWwnLFxuICBzeW50YXg6IFsnZXF1YWxUZXh0KHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2hlY2sgZXF1YWxpdHkgb2YgdHdvIHN0cmluZ3MuIENvbXBhcmlzb24gaXMgY2FzZSBzZW5zaXRpdmUuIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWVzIGFyZSBlcXVhbCwgYW5kIGZhbHNlIGlmIG5vdC4nLFxuICBleGFtcGxlczogWydlcXVhbFRleHQoXCJIZWxsb1wiLCBcIkhlbGxvXCIpJywgJ2VxdWFsVGV4dChcImFcIiwgXCJBXCIpJywgJ2VxdWFsKFwiMmUzXCIsIFwiMjAwMFwiKScsICdlcXVhbFRleHQoXCIyZTNcIiwgXCIyMDAwXCIpJywgJ2VxdWFsVGV4dChcIkJcIiwgW1wiQVwiLCBcIkJcIiwgXCJDXCJdKSddLFxuICBzZWVhbHNvOiBbJ2NvbXBhcmUnLCAnY29tcGFyZU5hdHVyYWwnLCAnY29tcGFyZVRleHQnLCAnZXF1YWwnXVxufTtcbmV4cG9ydHMuZXF1YWxUZXh0RG9jcyA9IGVxdWFsVGV4dERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxhcmdlckRvY3MgPSB2b2lkIDA7XG52YXIgbGFyZ2VyRG9jcyA9IHtcbiAgbmFtZTogJ2xhcmdlcicsXG4gIGNhdGVnb3J5OiAnUmVsYXRpb25hbCcsXG4gIHN5bnRheDogWyd4ID4geScsICdsYXJnZXIoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDaGVjayBpZiB2YWx1ZSB4IGlzIGxhcmdlciB0aGFuIHkuIFJldHVybnMgdHJ1ZSBpZiB4IGlzIGxhcmdlciB0aGFuIHksIGFuZCBmYWxzZSBpZiBub3QuJyxcbiAgZXhhbXBsZXM6IFsnMiA+IDMnLCAnNSA+IDIqMicsICdhID0gMy4zJywgJ2IgPSA2LTIuOCcsICcoYSA+IGIpJywgJyhiIDwgYSknLCAnNSBjbSA+IDIgaW5jaCddLFxuICBzZWVhbHNvOiBbJ2VxdWFsJywgJ3VuZXF1YWwnLCAnc21hbGxlcicsICdzbWFsbGVyRXEnLCAnbGFyZ2VyRXEnLCAnY29tcGFyZSddXG59O1xuZXhwb3J0cy5sYXJnZXJEb2NzID0gbGFyZ2VyRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubGFyZ2VyRXFEb2NzID0gdm9pZCAwO1xudmFyIGxhcmdlckVxRG9jcyA9IHtcbiAgbmFtZTogJ2xhcmdlckVxJyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ3ggPj0geScsICdsYXJnZXJFcSh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NoZWNrIGlmIHZhbHVlIHggaXMgbGFyZ2VyIG9yIGVxdWFsIHRvIHkuIFJldHVybnMgdHJ1ZSBpZiB4IGlzIGxhcmdlciBvciBlcXVhbCB0byB5LCBhbmQgZmFsc2UgaWYgbm90LicsXG4gIGV4YW1wbGVzOiBbJzIgPj0gMSsxJywgJzIgPiAxKzEnLCAnYSA9IDMuMicsICdiID0gNi0yLjgnLCAnKGEgPj0gYiknXSxcbiAgc2VlYWxzbzogWydlcXVhbCcsICd1bmVxdWFsJywgJ3NtYWxsZXJFcScsICdzbWFsbGVyJywgJ2NvbXBhcmUnXVxufTtcbmV4cG9ydHMubGFyZ2VyRXFEb2NzID0gbGFyZ2VyRXFEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zbWFsbGVyRG9jcyA9IHZvaWQgMDtcbnZhciBzbWFsbGVyRG9jcyA9IHtcbiAgbmFtZTogJ3NtYWxsZXInLFxuICBjYXRlZ29yeTogJ1JlbGF0aW9uYWwnLFxuICBzeW50YXg6IFsneCA8IHknLCAnc21hbGxlcih4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NoZWNrIGlmIHZhbHVlIHggaXMgc21hbGxlciB0aGFuIHZhbHVlIHkuIFJldHVybnMgdHJ1ZSBpZiB4IGlzIHNtYWxsZXIgdGhhbiB5LCBhbmQgZmFsc2UgaWYgbm90LicsXG4gIGV4YW1wbGVzOiBbJzIgPCAzJywgJzUgPCAyKjInLCAnYSA9IDMuMycsICdiID0gNi0yLjgnLCAnKGEgPCBiKScsICc1IGNtIDwgMiBpbmNoJ10sXG4gIHNlZWFsc286IFsnZXF1YWwnLCAndW5lcXVhbCcsICdsYXJnZXInLCAnc21hbGxlckVxJywgJ2xhcmdlckVxJywgJ2NvbXBhcmUnXVxufTtcbmV4cG9ydHMuc21hbGxlckRvY3MgPSBzbWFsbGVyRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc21hbGxlckVxRG9jcyA9IHZvaWQgMDtcbnZhciBzbWFsbGVyRXFEb2NzID0ge1xuICBuYW1lOiAnc21hbGxlckVxJyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ3ggPD0geScsICdzbWFsbGVyRXEoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDaGVjayBpZiB2YWx1ZSB4IGlzIHNtYWxsZXIgb3IgZXF1YWwgdG8gdmFsdWUgeS4gUmV0dXJucyB0cnVlIGlmIHggaXMgc21hbGxlciB0aGFuIHksIGFuZCBmYWxzZSBpZiBub3QuJyxcbiAgZXhhbXBsZXM6IFsnMiA8PSAxKzEnLCAnMiA8IDErMScsICdhID0gMy4yJywgJ2IgPSA2LTIuOCcsICcoYSA8PSBiKSddLFxuICBzZWVhbHNvOiBbJ2VxdWFsJywgJ3VuZXF1YWwnLCAnbGFyZ2VyJywgJ3NtYWxsZXInLCAnbGFyZ2VyRXEnLCAnY29tcGFyZSddXG59O1xuZXhwb3J0cy5zbWFsbGVyRXFEb2NzID0gc21hbGxlckVxRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudW5lcXVhbERvY3MgPSB2b2lkIDA7XG52YXIgdW5lcXVhbERvY3MgPSB7XG4gIG5hbWU6ICd1bmVxdWFsJyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ3ggIT0geScsICd1bmVxdWFsKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2hlY2sgdW5lcXVhbGl0eSBvZiB0d28gdmFsdWVzLiBSZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlcyBhcmUgdW5lcXVhbCwgYW5kIGZhbHNlIGlmIHRoZXkgYXJlIGVxdWFsLicsXG4gIGV4YW1wbGVzOiBbJzIrMiAhPSAzJywgJzIrMiAhPSA0JywgJ2EgPSAzLjInLCAnYiA9IDYtMi44JywgJ2EgIT0gYicsICc1MGNtICE9IDAuNW0nLCAnNSBjbSAhPSAyIGluY2gnXSxcbiAgc2VlYWxzbzogWydlcXVhbCcsICdzbWFsbGVyJywgJ2xhcmdlcicsICdzbWFsbGVyRXEnLCAnbGFyZ2VyRXEnLCAnY29tcGFyZScsICdkZWVwRXF1YWwnXVxufTtcbmV4cG9ydHMudW5lcXVhbERvY3MgPSB1bmVxdWFsRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0Q2FydGVzaWFuRG9jcyA9IHZvaWQgMDtcbnZhciBzZXRDYXJ0ZXNpYW5Eb2NzID0ge1xuICBuYW1lOiAnc2V0Q2FydGVzaWFuJyxcbiAgY2F0ZWdvcnk6ICdTZXQnLFxuICBzeW50YXg6IFsnc2V0Q2FydGVzaWFuKHNldDEsIHNldDIpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIHRoZSBjYXJ0ZXNpYW4gcHJvZHVjdCBvZiB0d28gKG11bHRpKXNldHMuIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uJyxcbiAgZXhhbXBsZXM6IFsnc2V0Q2FydGVzaWFuKFsxLCAyXSwgWzMsIDRdKSddLFxuICBzZWVhbHNvOiBbJ3NldFVuaW9uJywgJ3NldEludGVyc2VjdCcsICdzZXREaWZmZXJlbmNlJywgJ3NldFBvd2Vyc2V0J11cbn07XG5leHBvcnRzLnNldENhcnRlc2lhbkRvY3MgPSBzZXRDYXJ0ZXNpYW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXREaWZmZXJlbmNlRG9jcyA9IHZvaWQgMDtcbnZhciBzZXREaWZmZXJlbmNlRG9jcyA9IHtcbiAgbmFtZTogJ3NldERpZmZlcmVuY2UnLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXREaWZmZXJlbmNlKHNldDEsIHNldDIpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIHRoZSBkaWZmZXJlbmNlIG9mIHR3byAobXVsdGkpc2V0czogZXZlcnkgZWxlbWVudCBvZiBzZXQxLCB0aGF0IGlzIG5vdCB0aGUgZWxlbWVudCBvZiBzZXQyLiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldERpZmZlcmVuY2UoWzEsIDIsIDMsIDRdLCBbMywgNCwgNSwgNl0pJywgJ3NldERpZmZlcmVuY2UoW1sxLCAyXSwgWzMsIDRdXSwgW1szLCA0XSwgWzUsIDZdXSknXSxcbiAgc2VlYWxzbzogWydzZXRVbmlvbicsICdzZXRJbnRlcnNlY3QnLCAnc2V0U3ltRGlmZmVyZW5jZSddXG59O1xuZXhwb3J0cy5zZXREaWZmZXJlbmNlRG9jcyA9IHNldERpZmZlcmVuY2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXREaXN0aW5jdERvY3MgPSB2b2lkIDA7XG52YXIgc2V0RGlzdGluY3REb2NzID0ge1xuICBuYW1lOiAnc2V0RGlzdGluY3QnLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXREaXN0aW5jdChzZXQpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29sbGVjdCB0aGUgZGlzdGluY3QgZWxlbWVudHMgb2YgYSBtdWx0aXNldC4gQSBtdWx0aS1kaW1lbnNpb24gYXJyYXkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBzaW5nbGUtZGltZW5zaW9uIGFycmF5IGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldERpc3RpbmN0KFsxLCAxLCAxLCAyLCAyLCAzXSknXSxcbiAgc2VlYWxzbzogWydzZXRNdWx0aXBsaWNpdHknXVxufTtcbmV4cG9ydHMuc2V0RGlzdGluY3REb2NzID0gc2V0RGlzdGluY3REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRJbnRlcnNlY3REb2NzID0gdm9pZCAwO1xudmFyIHNldEludGVyc2VjdERvY3MgPSB7XG4gIG5hbWU6ICdzZXRJbnRlcnNlY3QnLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXRJbnRlcnNlY3Qoc2V0MSwgc2V0MiknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgdGhlIGludGVyc2VjdGlvbiBvZiB0d28gKG11bHRpKXNldHMuIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uJyxcbiAgZXhhbXBsZXM6IFsnc2V0SW50ZXJzZWN0KFsxLCAyLCAzLCA0XSwgWzMsIDQsIDUsIDZdKScsICdzZXRJbnRlcnNlY3QoW1sxLCAyXSwgWzMsIDRdXSwgW1szLCA0XSwgWzUsIDZdXSknXSxcbiAgc2VlYWxzbzogWydzZXRVbmlvbicsICdzZXREaWZmZXJlbmNlJ11cbn07XG5leHBvcnRzLnNldEludGVyc2VjdERvY3MgPSBzZXRJbnRlcnNlY3REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRJc1N1YnNldERvY3MgPSB2b2lkIDA7XG52YXIgc2V0SXNTdWJzZXREb2NzID0ge1xuICBuYW1lOiAnc2V0SXNTdWJzZXQnLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXRJc1N1YnNldChzZXQxLCBzZXQyKSddLFxuICBkZXNjcmlwdGlvbjogJ0NoZWNrIHdoZXRoZXIgYSAobXVsdGkpc2V0IGlzIGEgc3Vic2V0IG9mIGFub3RoZXIgKG11bHRpKXNldDogZXZlcnkgZWxlbWVudCBvZiBzZXQxIGlzIHRoZSBlbGVtZW50IG9mIHNldDIuIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uJyxcbiAgZXhhbXBsZXM6IFsnc2V0SXNTdWJzZXQoWzEsIDJdLCBbMywgNCwgNSwgNl0pJywgJ3NldElzU3Vic2V0KFszLCA0XSwgWzMsIDQsIDUsIDZdKSddLFxuICBzZWVhbHNvOiBbJ3NldFVuaW9uJywgJ3NldEludGVyc2VjdCcsICdzZXREaWZmZXJlbmNlJ11cbn07XG5leHBvcnRzLnNldElzU3Vic2V0RG9jcyA9IHNldElzU3Vic2V0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0TXVsdGlwbGljaXR5RG9jcyA9IHZvaWQgMDtcbnZhciBzZXRNdWx0aXBsaWNpdHlEb2NzID0ge1xuICBuYW1lOiAnc2V0TXVsdGlwbGljaXR5JyxcbiAgY2F0ZWdvcnk6ICdTZXQnLFxuICBzeW50YXg6IFsnc2V0TXVsdGlwbGljaXR5KGVsZW1lbnQsIHNldCknXSxcbiAgZGVzY3JpcHRpb246ICdDb3VudCB0aGUgbXVsdGlwbGljaXR5IG9mIGFuIGVsZW1lbnQgaW4gYSBtdWx0aXNldC4gQSBtdWx0aS1kaW1lbnNpb24gYXJyYXkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBzaW5nbGUtZGltZW5zaW9uIGFycmF5IGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldE11bHRpcGxpY2l0eSgxLCBbMSwgMiwgMiwgNF0pJywgJ3NldE11bHRpcGxpY2l0eSgyLCBbMSwgMiwgMiwgNF0pJ10sXG4gIHNlZWFsc286IFsnc2V0RGlzdGluY3QnLCAnc2V0U2l6ZSddXG59O1xuZXhwb3J0cy5zZXRNdWx0aXBsaWNpdHlEb2NzID0gc2V0TXVsdGlwbGljaXR5RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0UG93ZXJzZXREb2NzID0gdm9pZCAwO1xudmFyIHNldFBvd2Vyc2V0RG9jcyA9IHtcbiAgbmFtZTogJ3NldFBvd2Vyc2V0JyxcbiAgY2F0ZWdvcnk6ICdTZXQnLFxuICBzeW50YXg6IFsnc2V0UG93ZXJzZXQoc2V0KSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSB0aGUgcG93ZXJzZXQgb2YgYSAobXVsdGkpc2V0OiB0aGUgcG93ZXJzZXQgY29udGFpbnMgdmVyeSBwb3NzaWJsZSBzdWJzZXRzIG9mIGEgKG11bHRpKXNldC4gQSBtdWx0aS1kaW1lbnNpb24gYXJyYXkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBzaW5nbGUtZGltZW5zaW9uIGFycmF5IGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldFBvd2Vyc2V0KFsxLCAyLCAzXSknXSxcbiAgc2VlYWxzbzogWydzZXRDYXJ0ZXNpYW4nXVxufTtcbmV4cG9ydHMuc2V0UG93ZXJzZXREb2NzID0gc2V0UG93ZXJzZXREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRTaXplRG9jcyA9IHZvaWQgMDtcbnZhciBzZXRTaXplRG9jcyA9IHtcbiAgbmFtZTogJ3NldFNpemUnLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXRTaXplKHNldCknLCAnc2V0U2l6ZShzZXQsIHVuaXF1ZSknXSxcbiAgZGVzY3JpcHRpb246ICdDb3VudCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9mIGEgKG11bHRpKXNldC4gV2hlbiB0aGUgc2Vjb25kIHBhcmFtZXRlciBcInVuaXF1ZVwiIGlzIHRydWUsIGNvdW50IG9ubHkgdGhlIHVuaXF1ZSB2YWx1ZXMuIEEgbXVsdGktZGltZW5zaW9uIGFycmF5IHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2luZ2xlLWRpbWVuc2lvbiBhcnJheSBiZWZvcmUgdGhlIG9wZXJhdGlvbi4nLFxuICBleGFtcGxlczogWydzZXRTaXplKFsxLCAyLCAyLCA0XSknLCAnc2V0U2l6ZShbMSwgMiwgMiwgNF0sIHRydWUpJ10sXG4gIHNlZWFsc286IFsnc2V0VW5pb24nLCAnc2V0SW50ZXJzZWN0JywgJ3NldERpZmZlcmVuY2UnXVxufTtcbmV4cG9ydHMuc2V0U2l6ZURvY3MgPSBzZXRTaXplRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0U3ltRGlmZmVyZW5jZURvY3MgPSB2b2lkIDA7XG52YXIgc2V0U3ltRGlmZmVyZW5jZURvY3MgPSB7XG4gIG5hbWU6ICdzZXRTeW1EaWZmZXJlbmNlJyxcbiAgY2F0ZWdvcnk6ICdTZXQnLFxuICBzeW50YXg6IFsnc2V0U3ltRGlmZmVyZW5jZShzZXQxLCBzZXQyKSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSB0aGUgc3ltbWV0cmljIGRpZmZlcmVuY2Ugb2YgdHdvIChtdWx0aSlzZXRzLiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldFN5bURpZmZlcmVuY2UoWzEsIDIsIDMsIDRdLCBbMywgNCwgNSwgNl0pJywgJ3NldFN5bURpZmZlcmVuY2UoW1sxLCAyXSwgWzMsIDRdXSwgW1szLCA0XSwgWzUsIDZdXSknXSxcbiAgc2VlYWxzbzogWydzZXRVbmlvbicsICdzZXRJbnRlcnNlY3QnLCAnc2V0RGlmZmVyZW5jZSddXG59O1xuZXhwb3J0cy5zZXRTeW1EaWZmZXJlbmNlRG9jcyA9IHNldFN5bURpZmZlcmVuY2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRVbmlvbkRvY3MgPSB2b2lkIDA7XG52YXIgc2V0VW5pb25Eb2NzID0ge1xuICBuYW1lOiAnc2V0VW5pb24nLFxuICBjYXRlZ29yeTogJ1NldCcsXG4gIHN5bnRheDogWydzZXRVbmlvbihzZXQxLCBzZXQyKSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSB0aGUgdW5pb24gb2YgdHdvIChtdWx0aSlzZXRzLiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldFVuaW9uKFsxLCAyLCAzLCA0XSwgWzMsIDQsIDUsIDZdKScsICdzZXRVbmlvbihbWzEsIDJdLCBbMywgNF1dLCBbWzMsIDRdLCBbNSwgNl1dKSddLFxuICBzZWVhbHNvOiBbJ3NldEludGVyc2VjdCcsICdzZXREaWZmZXJlbmNlJ11cbn07XG5leHBvcnRzLnNldFVuaW9uRG9jcyA9IHNldFVuaW9uRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXJmRG9jcyA9IHZvaWQgMDtcbnZhciBlcmZEb2NzID0ge1xuICBuYW1lOiAnZXJmJyxcbiAgY2F0ZWdvcnk6ICdTcGVjaWFsJyxcbiAgc3ludGF4OiBbJ2VyZih4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGVyZiBmdW5jdGlvbiBvZiBhIHZhbHVlIHVzaW5nIGEgcmF0aW9uYWwgQ2hlYnlzaGV2IGFwcHJveGltYXRpb25zIGZvciBkaWZmZXJlbnQgaW50ZXJ2YWxzIG9mIHgnLFxuICBleGFtcGxlczogWydlcmYoMC4yKScsICdlcmYoLTAuNSknLCAnZXJmKDQpJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5lcmZEb2NzID0gZXJmRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWFkRG9jcyA9IHZvaWQgMDtcbnZhciBtYWREb2NzID0ge1xuICBuYW1lOiAnbWFkJyxcbiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJyxcbiAgc3ludGF4OiBbJ21hZChhLCBiLCBjLCAuLi4pJywgJ21hZChBKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIG1lZGlhbiBhYnNvbHV0ZSBkZXZpYXRpb24gb2YgYSBtYXRyaXggb3IgYSBsaXN0IHdpdGggdmFsdWVzLiBUaGUgbWVkaWFuIGFic29sdXRlIGRldmlhdGlvbiBpcyBkZWZpbmVkIGFzIHRoZSBtZWRpYW4gb2YgdGhlIGFic29sdXRlIGRldmlhdGlvbnMgZnJvbSB0aGUgbWVkaWFuLicsXG4gIGV4YW1wbGVzOiBbJ21hZCgxMCwgMjAsIDMwKScsICdtYWQoWzEsIDIsIDNdKSddLFxuICBzZWVhbHNvOiBbJ21lYW4nLCAnbWVkaWFuJywgJ3N0ZCcsICdhYnMnXVxufTtcbmV4cG9ydHMubWFkRG9jcyA9IG1hZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1heERvY3MgPSB2b2lkIDA7XG52YXIgbWF4RG9jcyA9IHtcbiAgbmFtZTogJ21heCcsXG4gIGNhdGVnb3J5OiAnU3RhdGlzdGljcycsXG4gIHN5bnRheDogWydtYXgoYSwgYiwgYywgLi4uKScsICdtYXgoQSknLCAnbWF4KEEsIGRpbSknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGEgbGlzdCBvZiB2YWx1ZXMuJyxcbiAgZXhhbXBsZXM6IFsnbWF4KDIsIDMsIDQsIDEpJywgJ21heChbMiwgMywgNCwgMV0pJywgJ21heChbMiwgNTsgNCwgM10pJywgJ21heChbMiwgNTsgNCwgM10sIDEpJywgJ21heChbMiwgNTsgNCwgM10sIDIpJywgJ21heCgyLjcsIDcuMSwgLTQuNSwgMi4wLCA0LjEpJywgJ21pbigyLjcsIDcuMSwgLTQuNSwgMi4wLCA0LjEpJ10sXG4gIHNlZWFsc286IFsnbWVhbicsICdtZWRpYW4nLCAnbWluJywgJ3Byb2QnLCAnc3RkJywgJ3N1bScsICd2YXJpYW5jZSddXG59O1xuZXhwb3J0cy5tYXhEb2NzID0gbWF4RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWVhbkRvY3MgPSB2b2lkIDA7XG52YXIgbWVhbkRvY3MgPSB7XG4gIG5hbWU6ICdtZWFuJyxcbiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJyxcbiAgc3ludGF4OiBbJ21lYW4oYSwgYiwgYywgLi4uKScsICdtZWFuKEEpJywgJ21lYW4oQSwgZGltKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGFyaXRobWV0aWMgbWVhbiBvZiBhIGxpc3Qgb2YgdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ21lYW4oMiwgMywgNCwgMSknLCAnbWVhbihbMiwgMywgNCwgMV0pJywgJ21lYW4oWzIsIDU7IDQsIDNdKScsICdtZWFuKFsyLCA1OyA0LCAzXSwgMSknLCAnbWVhbihbMiwgNTsgNCwgM10sIDIpJywgJ21lYW4oWzEuMCwgMi43LCAzLjIsIDQuMF0pJ10sXG4gIHNlZWFsc286IFsnbWF4JywgJ21lZGlhbicsICdtaW4nLCAncHJvZCcsICdzdGQnLCAnc3VtJywgJ3ZhcmlhbmNlJ11cbn07XG5leHBvcnRzLm1lYW5Eb2NzID0gbWVhbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1lZGlhbkRvY3MgPSB2b2lkIDA7XG52YXIgbWVkaWFuRG9jcyA9IHtcbiAgbmFtZTogJ21lZGlhbicsXG4gIGNhdGVnb3J5OiAnU3RhdGlzdGljcycsXG4gIHN5bnRheDogWydtZWRpYW4oYSwgYiwgYywgLi4uKScsICdtZWRpYW4oQSknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBtZWRpYW4gb2YgYWxsIHZhbHVlcy4gVGhlIHZhbHVlcyBhcmUgc29ydGVkIGFuZCB0aGUgbWlkZGxlIHZhbHVlIGlzIHJldHVybmVkLiBJbiBjYXNlIG9mIGFuIGV2ZW4gbnVtYmVyIG9mIHZhbHVlcywgdGhlIGF2ZXJhZ2Ugb2YgdGhlIHR3byBtaWRkbGUgdmFsdWVzIGlzIHJldHVybmVkLicsXG4gIGV4YW1wbGVzOiBbJ21lZGlhbig1LCAyLCA3KScsICdtZWRpYW4oWzMsIC0xLCA1LCA3XSknXSxcbiAgc2VlYWxzbzogWydtYXgnLCAnbWVhbicsICdtaW4nLCAncHJvZCcsICdzdGQnLCAnc3VtJywgJ3ZhcmlhbmNlJywgJ3F1YW50aWxlU2VxJ11cbn07XG5leHBvcnRzLm1lZGlhbkRvY3MgPSBtZWRpYW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5taW5Eb2NzID0gdm9pZCAwO1xudmFyIG1pbkRvY3MgPSB7XG4gIG5hbWU6ICdtaW4nLFxuICBjYXRlZ29yeTogJ1N0YXRpc3RpY3MnLFxuICBzeW50YXg6IFsnbWluKGEsIGIsIGMsIC4uLiknLCAnbWluKEEpJywgJ21pbihBLCBkaW0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgbWluaW11bSB2YWx1ZSBvZiBhIGxpc3Qgb2YgdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ21pbigyLCAzLCA0LCAxKScsICdtaW4oWzIsIDMsIDQsIDFdKScsICdtaW4oWzIsIDU7IDQsIDNdKScsICdtaW4oWzIsIDU7IDQsIDNdLCAxKScsICdtaW4oWzIsIDU7IDQsIDNdLCAyKScsICdtaW4oMi43LCA3LjEsIC00LjUsIDIuMCwgNC4xKScsICdtYXgoMi43LCA3LjEsIC00LjUsIDIuMCwgNC4xKSddLFxuICBzZWVhbHNvOiBbJ21heCcsICdtZWFuJywgJ21lZGlhbicsICdwcm9kJywgJ3N0ZCcsICdzdW0nLCAndmFyaWFuY2UnXVxufTtcbmV4cG9ydHMubWluRG9jcyA9IG1pbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vZGVEb2NzID0gdm9pZCAwO1xudmFyIG1vZGVEb2NzID0ge1xuICBuYW1lOiAnbW9kZScsXG4gIGNhdGVnb3J5OiAnU3RhdGlzdGljcycsXG4gIHN5bnRheDogWydtb2RlKGEsIGIsIGMsIC4uLiknLCAnbW9kZShBKScsICdtb2RlKEEsIGEsIGIsIEIsIGMsIC4uLiknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlcyB0aGUgbW9kZSBvZiBhbGwgdmFsdWVzIGFzIGFuIGFycmF5LiBJbiBjYXNlIG1vZGUgYmVpbmcgbW9yZSB0aGFuIG9uZSwgbXVsdGlwbGUgdmFsdWVzIGFyZSByZXR1cm5lZCBpbiBhbiBhcnJheS4nLFxuICBleGFtcGxlczogWydtb2RlKDIsIDEsIDQsIDMsIDEpJywgJ21vZGUoWzEsIDIuNywgMy4yLCA0LCAyLjddKScsICdtb2RlKDEsIDQsIDYsIDEsIDYpJ10sXG4gIHNlZWFsc286IFsnbWF4JywgJ21lYW4nLCAnbWluJywgJ21lZGlhbicsICdwcm9kJywgJ3N0ZCcsICdzdW0nLCAndmFyaWFuY2UnXVxufTtcbmV4cG9ydHMubW9kZURvY3MgPSBtb2RlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucHJvZERvY3MgPSB2b2lkIDA7XG52YXIgcHJvZERvY3MgPSB7XG4gIG5hbWU6ICdwcm9kJyxcbiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJyxcbiAgc3ludGF4OiBbJ3Byb2QoYSwgYiwgYywgLi4uKScsICdwcm9kKEEpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgcHJvZHVjdCBvZiBhbGwgdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ3Byb2QoMiwgMywgNCknLCAncHJvZChbMiwgMywgNF0pJywgJ3Byb2QoWzIsIDU7IDQsIDNdKSddLFxuICBzZWVhbHNvOiBbJ21heCcsICdtZWFuJywgJ21pbicsICdtZWRpYW4nLCAnbWluJywgJ3N0ZCcsICdzdW0nLCAndmFyaWFuY2UnXVxufTtcbmV4cG9ydHMucHJvZERvY3MgPSBwcm9kRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucXVhbnRpbGVTZXFEb2NzID0gdm9pZCAwO1xudmFyIHF1YW50aWxlU2VxRG9jcyA9IHtcbiAgbmFtZTogJ3F1YW50aWxlU2VxJyxcbiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJyxcbiAgc3ludGF4OiBbJ3F1YW50aWxlU2VxKEEsIHByb2JbLCBzb3J0ZWRdKScsICdxdWFudGlsZVNlcShBLCBbcHJvYjEsIHByb2IyLCAuLi5dWywgc29ydGVkXSknLCAncXVhbnRpbGVTZXEoQSwgTlssIHNvcnRlZF0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgcHJvYiBvcmRlciBxdWFudGlsZSBvZiBhIG1hdHJpeCBvciBhIGxpc3Qgd2l0aCB2YWx1ZXMuIFRoZSBzZXF1ZW5jZSBpcyBzb3J0ZWQgYW5kIHRoZSBtaWRkbGUgdmFsdWUgaXMgcmV0dXJuZWQuIFN1cHBvcnRlZCB0eXBlcyBvZiBzZXF1ZW5jZSB2YWx1ZXMgYXJlOiBOdW1iZXIsIEJpZ051bWJlciwgVW5pdCBTdXBwb3J0ZWQgdHlwZXMgb2YgcHJvYmFibGl0eSBhcmU6IE51bWJlciwgQmlnTnVtYmVyLiBcXG5cXG5JbiBjYXNlIG9mIGEgKG11bHRpIGRpbWVuc2lvbmFsKSBhcnJheSBvciBtYXRyaXgsIHRoZSBwcm9iIG9yZGVyIHF1YW50aWxlIG9mIGFsbCBlbGVtZW50cyB3aWxsIGJlIGNhbGN1bGF0ZWQuJyxcbiAgZXhhbXBsZXM6IFsncXVhbnRpbGVTZXEoWzMsIC0xLCA1LCA3XSwgMC41KScsICdxdWFudGlsZVNlcShbMywgLTEsIDUsIDddLCBbMS8zLCAyLzNdKScsICdxdWFudGlsZVNlcShbMywgLTEsIDUsIDddLCAyKScsICdxdWFudGlsZVNlcShbLTEsIDMsIDUsIDddLCAwLjUsIHRydWUpJ10sXG4gIHNlZWFsc286IFsnbWVhbicsICdtZWRpYW4nLCAnbWluJywgJ21heCcsICdwcm9kJywgJ3N0ZCcsICdzdW0nLCAndmFyaWFuY2UnXVxufTtcbmV4cG9ydHMucXVhbnRpbGVTZXFEb2NzID0gcXVhbnRpbGVTZXFEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdGREb2NzID0gdm9pZCAwO1xudmFyIHN0ZERvY3MgPSB7XG4gIG5hbWU6ICdzdGQnLFxuICBjYXRlZ29yeTogJ1N0YXRpc3RpY3MnLFxuICBzeW50YXg6IFsnc3RkKGEsIGIsIGMsIC4uLiknLCAnc3RkKEEpJywgJ3N0ZChBLCBub3JtYWxpemF0aW9uKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBhbGwgdmFsdWVzLCBkZWZpbmVkIGFzIHN0ZChBKSA9IHNxcnQodmFyaWFuY2UoQSkpLiBPcHRpb25hbCBwYXJhbWV0ZXIgbm9ybWFsaXphdGlvbiBjYW4gYmUgXCJ1bmJpYXNlZFwiIChkZWZhdWx0KSwgXCJ1bmNvcnJlY3RlZFwiLCBvciBcImJpYXNlZFwiLicsXG4gIGV4YW1wbGVzOiBbJ3N0ZCgyLCA0LCA2KScsICdzdGQoWzIsIDQsIDYsIDhdKScsICdzdGQoWzIsIDQsIDYsIDhdLCBcInVuY29ycmVjdGVkXCIpJywgJ3N0ZChbMiwgNCwgNiwgOF0sIFwiYmlhc2VkXCIpJywgJ3N0ZChbMSwgMiwgMzsgNCwgNSwgNl0pJ10sXG4gIHNlZWFsc286IFsnbWF4JywgJ21lYW4nLCAnbWluJywgJ21lZGlhbicsICdwcm9kJywgJ3N1bScsICd2YXJpYW5jZSddXG59O1xuZXhwb3J0cy5zdGREb2NzID0gc3RkRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3VtRG9jcyA9IHZvaWQgMDtcbnZhciBzdW1Eb2NzID0ge1xuICBuYW1lOiAnc3VtJyxcbiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJyxcbiAgc3ludGF4OiBbJ3N1bShhLCBiLCBjLCAuLi4pJywgJ3N1bShBKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHN1bSBvZiBhbGwgdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ3N1bSgyLCAzLCA0LCAxKScsICdzdW0oWzIsIDMsIDQsIDFdKScsICdzdW0oWzIsIDU7IDQsIDNdKSddLFxuICBzZWVhbHNvOiBbJ21heCcsICdtZWFuJywgJ21lZGlhbicsICdtaW4nLCAncHJvZCcsICdzdGQnLCAnc3VtJywgJ3ZhcmlhbmNlJ11cbn07XG5leHBvcnRzLnN1bURvY3MgPSBzdW1Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy52YXJpYW5jZURvY3MgPSB2b2lkIDA7XG52YXIgdmFyaWFuY2VEb2NzID0ge1xuICBuYW1lOiAndmFyaWFuY2UnLFxuICBjYXRlZ29yeTogJ1N0YXRpc3RpY3MnLFxuICBzeW50YXg6IFsndmFyaWFuY2UoYSwgYiwgYywgLi4uKScsICd2YXJpYW5jZShBKScsICd2YXJpYW5jZShBLCBub3JtYWxpemF0aW9uKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHZhcmlhbmNlIG9mIGFsbCB2YWx1ZXMuIE9wdGlvbmFsIHBhcmFtZXRlciBub3JtYWxpemF0aW9uIGNhbiBiZSBcInVuYmlhc2VkXCIgKGRlZmF1bHQpLCBcInVuY29ycmVjdGVkXCIsIG9yIFwiYmlhc2VkXCIuJyxcbiAgZXhhbXBsZXM6IFsndmFyaWFuY2UoMiwgNCwgNiknLCAndmFyaWFuY2UoWzIsIDQsIDYsIDhdKScsICd2YXJpYW5jZShbMiwgNCwgNiwgOF0sIFwidW5jb3JyZWN0ZWRcIiknLCAndmFyaWFuY2UoWzIsIDQsIDYsIDhdLCBcImJpYXNlZFwiKScsICd2YXJpYW5jZShbMSwgMiwgMzsgNCwgNSwgNl0pJ10sXG4gIHNlZWFsc286IFsnbWF4JywgJ21lYW4nLCAnbWluJywgJ21lZGlhbicsICdtaW4nLCAncHJvZCcsICdzdGQnLCAnc3VtJ11cbn07XG5leHBvcnRzLnZhcmlhbmNlRG9jcyA9IHZhcmlhbmNlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNvc0RvY3MgPSB2b2lkIDA7XG52YXIgYWNvc0RvY3MgPSB7XG4gIG5hbWU6ICdhY29zJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYWNvcyh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGludmVyc2UgY29zaW5lIG9mIGEgdmFsdWUgaW4gcmFkaWFucy4nLFxuICBleGFtcGxlczogWydhY29zKDAuNSknLCAnYWNvcyhjb3MoMi4zKSknXSxcbiAgc2VlYWxzbzogWydjb3MnLCAnYXRhbicsICdhc2luJ11cbn07XG5leHBvcnRzLmFjb3NEb2NzID0gYWNvc0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFjb3NoRG9jcyA9IHZvaWQgMDtcbnZhciBhY29zaERvY3MgPSB7XG4gIG5hbWU6ICdhY29zaCcsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ2Fjb3NoKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY2NvcyBvZiBhIHZhbHVlLCBkZWZpbmVkIGFzIGBhY29zaCh4KSA9IGxuKHNxcnQoeF4yIC0gMSkgKyB4KWAuJyxcbiAgZXhhbXBsZXM6IFsnYWNvc2goMS41KSddLFxuICBzZWVhbHNvOiBbJ2Nvc2gnLCAnYXNpbmgnLCAnYXRhbmgnXVxufTtcbmV4cG9ydHMuYWNvc2hEb2NzID0gYWNvc2hEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hY290RG9jcyA9IHZvaWQgMDtcbnZhciBhY290RG9jcyA9IHtcbiAgbmFtZTogJ2Fjb3QnLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydhY290KHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIGNvdGFuZ2VudCBvZiBhIHZhbHVlLicsXG4gIGV4YW1wbGVzOiBbJ2Fjb3QoMC41KScsICdhY290KGNvdCgwLjUpKScsICdhY290KDIpJ10sXG4gIHNlZWFsc286IFsnY290JywgJ2F0YW4nXVxufTtcbmV4cG9ydHMuYWNvdERvY3MgPSBhY290RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNvdGhEb2NzID0gdm9pZCAwO1xudmFyIGFjb3RoRG9jcyA9IHtcbiAgbmFtZTogJ2Fjb3RoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYWNvdGgoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjY290YW5nZW50IG9mIGEgdmFsdWUsIGRlZmluZWQgYXMgYGFjb3RoKHgpID0gKGxuKCh4KzEpL3gpICsgbG4oeC8oeC0xKSkpIC8gMmAuJyxcbiAgZXhhbXBsZXM6IFsnYWNvdGgoMiknLCAnYWNvdGgoMC41KSddLFxuICBzZWVhbHNvOiBbJ2Fjc2NoJywgJ2FzZWNoJ11cbn07XG5leHBvcnRzLmFjb3RoRG9jcyA9IGFjb3RoRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNzY0RvY3MgPSB2b2lkIDA7XG52YXIgYWNzY0RvY3MgPSB7XG4gIG5hbWU6ICdhY3NjJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYWNzYyh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgaW52ZXJzZSBjb3RhbmdlbnQgb2YgYSB2YWx1ZS4nLFxuICBleGFtcGxlczogWydhY3NjKDIpJywgJ2Fjc2MoY3NjKDAuNSkpJywgJ2Fjc2MoMC41KSddLFxuICBzZWVhbHNvOiBbJ2NzYycsICdhc2luJywgJ2FzZWMnXVxufTtcbmV4cG9ydHMuYWNzY0RvY3MgPSBhY3NjRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNzY2hEb2NzID0gdm9pZCAwO1xudmFyIGFjc2NoRG9jcyA9IHtcbiAgbmFtZTogJ2Fjc2NoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYWNzY2goeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjY29zZWNhbnQgb2YgYSB2YWx1ZSwgZGVmaW5lZCBhcyBgYWNzY2goeCkgPSBsbigxL3ggKyBzcXJ0KDEveF4yICsgMSkpYC4nLFxuICBleGFtcGxlczogWydhY3NjaCgwLjUpJ10sXG4gIHNlZWFsc286IFsnYXNlY2gnLCAnYWNvdGgnXVxufTtcbmV4cG9ydHMuYWNzY2hEb2NzID0gYWNzY2hEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hc2VjRG9jcyA9IHZvaWQgMDtcbnZhciBhc2VjRG9jcyA9IHtcbiAgbmFtZTogJ2FzZWMnLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydhc2VjKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIHNlY2FudCBvZiBhIHZhbHVlLicsXG4gIGV4YW1wbGVzOiBbJ2FzZWMoMC41KScsICdhc2VjKHNlYygwLjUpKScsICdhc2VjKDIpJ10sXG4gIHNlZWFsc286IFsnYWNvcycsICdhY290JywgJ2Fjc2MnXVxufTtcbmV4cG9ydHMuYXNlY0RvY3MgPSBhc2VjRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXNlY2hEb2NzID0gdm9pZCAwO1xudmFyIGFzZWNoRG9jcyA9IHtcbiAgbmFtZTogJ2FzZWNoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYXNlY2goeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGludmVyc2Ugc2VjYW50IG9mIGEgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsnYXNlY2goMC41KSddLFxuICBzZWVhbHNvOiBbJ2Fjc2NoJywgJ2Fjb3RoJ11cbn07XG5leHBvcnRzLmFzZWNoRG9jcyA9IGFzZWNoRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXNpbkRvY3MgPSB2b2lkIDA7XG52YXIgYXNpbkRvY3MgPSB7XG4gIG5hbWU6ICdhc2luJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYXNpbih4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGludmVyc2Ugc2luZSBvZiBhIHZhbHVlIGluIHJhZGlhbnMuJyxcbiAgZXhhbXBsZXM6IFsnYXNpbigwLjUpJywgJ2FzaW4oc2luKDAuNSkpJ10sXG4gIHNlZWFsc286IFsnc2luJywgJ2Fjb3MnLCAnYXRhbiddXG59O1xuZXhwb3J0cy5hc2luRG9jcyA9IGFzaW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hc2luaERvY3MgPSB2b2lkIDA7XG52YXIgYXNpbmhEb2NzID0ge1xuICBuYW1lOiAnYXNpbmgnLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydhc2luaCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBhcmNzaW5lIG9mIGEgdmFsdWUsIGRlZmluZWQgYXMgYGFzaW5oKHgpID0gbG4oeCArIHNxcnQoeF4yICsgMSkpYC4nLFxuICBleGFtcGxlczogWydhc2luaCgwLjUpJ10sXG4gIHNlZWFsc286IFsnYWNvc2gnLCAnYXRhbmgnXVxufTtcbmV4cG9ydHMuYXNpbmhEb2NzID0gYXNpbmhEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hdGFuRG9jcyA9IHZvaWQgMDtcbnZhciBhdGFuRG9jcyA9IHtcbiAgbmFtZTogJ2F0YW4nLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydhdGFuKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgaW52ZXJzZSB0YW5nZW50IG9mIGEgdmFsdWUgaW4gcmFkaWFucy4nLFxuICBleGFtcGxlczogWydhdGFuKDAuNSknLCAnYXRhbih0YW4oMC41KSknXSxcbiAgc2VlYWxzbzogWyd0YW4nLCAnYWNvcycsICdhc2luJ11cbn07XG5leHBvcnRzLmF0YW5Eb2NzID0gYXRhbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmF0YW4yRG9jcyA9IHZvaWQgMDtcbnZhciBhdGFuMkRvY3MgPSB7XG4gIG5hbWU6ICdhdGFuMicsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ2F0YW4yKHksIHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZXMgdGhlIHByaW5jaXBhbCB2YWx1ZSBvZiB0aGUgYXJjIHRhbmdlbnQgb2YgeS94IGluIHJhZGlhbnMuJyxcbiAgZXhhbXBsZXM6IFsnYXRhbjIoMiwgMikgLyBwaScsICdhbmdsZSA9IDYwIGRlZyBpbiByYWQnLCAneCA9IGNvcyhhbmdsZSknLCAneSA9IHNpbihhbmdsZSknLCAnYXRhbjIoeSwgeCknXSxcbiAgc2VlYWxzbzogWydzaW4nLCAnY29zJywgJ3RhbiddXG59O1xuZXhwb3J0cy5hdGFuMkRvY3MgPSBhdGFuMkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmF0YW5oRG9jcyA9IHZvaWQgMDtcbnZhciBhdGFuaERvY3MgPSB7XG4gIG5hbWU6ICdhdGFuaCcsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ2F0YW5oKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY3RhbmdlbnQgb2YgYSB2YWx1ZSwgZGVmaW5lZCBhcyBgYXRhbmgoeCkgPSBsbigoMSArIHgpLygxIC0geCkpIC8gMmAuJyxcbiAgZXhhbXBsZXM6IFsnYXRhbmgoMC41KSddLFxuICBzZWVhbHNvOiBbJ2Fjb3NoJywgJ2FzaW5oJ11cbn07XG5leHBvcnRzLmF0YW5oRG9jcyA9IGF0YW5oRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29zRG9jcyA9IHZvaWQgMDtcbnZhciBjb3NEb2NzID0ge1xuICBuYW1lOiAnY29zJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnY29zKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgY29zaW5lIG9mIHggaW4gcmFkaWFucy4nLFxuICBleGFtcGxlczogWydjb3MoMiknLCAnY29zKHBpIC8gNCkgXiAyJywgJ2NvcygxODAgZGVnKScsICdjb3MoNjAgZGVnKScsICdzaW4oMC4yKV4yICsgY29zKDAuMileMiddLFxuICBzZWVhbHNvOiBbJ2Fjb3MnLCAnc2luJywgJ3RhbiddXG59O1xuZXhwb3J0cy5jb3NEb2NzID0gY29zRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29zaERvY3MgPSB2b2lkIDA7XG52YXIgY29zaERvY3MgPSB7XG4gIG5hbWU6ICdjb3NoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnY29zaCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mIHggaW4gcmFkaWFucy4nLFxuICBleGFtcGxlczogWydjb3NoKDAuNSknXSxcbiAgc2VlYWxzbzogWydzaW5oJywgJ3RhbmgnLCAnY290aCddXG59O1xuZXhwb3J0cy5jb3NoRG9jcyA9IGNvc2hEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb3REb2NzID0gdm9pZCAwO1xudmFyIGNvdERvY3MgPSB7XG4gIG5hbWU6ICdjb3QnLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydjb3QoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBjb3RhbmdlbnQgb2YgeCBpbiByYWRpYW5zLiBEZWZpbmVkIGFzIDEvdGFuKHgpJyxcbiAgZXhhbXBsZXM6IFsnY290KDIpJywgJzEgLyB0YW4oMiknXSxcbiAgc2VlYWxzbzogWydzZWMnLCAnY3NjJywgJ3RhbiddXG59O1xuZXhwb3J0cy5jb3REb2NzID0gY290RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY290aERvY3MgPSB2b2lkIDA7XG52YXIgY290aERvY3MgPSB7XG4gIG5hbWU6ICdjb3RoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnY290aCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGh5cGVyYm9saWMgY290YW5nZW50IG9mIHggaW4gcmFkaWFucy4nLFxuICBleGFtcGxlczogWydjb3RoKDIpJywgJzEgLyB0YW5oKDIpJ10sXG4gIHNlZWFsc286IFsnc2VjaCcsICdjc2NoJywgJ3RhbmgnXVxufTtcbmV4cG9ydHMuY290aERvY3MgPSBjb3RoRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NjRG9jcyA9IHZvaWQgMDtcbnZhciBjc2NEb2NzID0ge1xuICBuYW1lOiAnY3NjJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnY3NjKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgY29zZWNhbnQgb2YgeCBpbiByYWRpYW5zLiBEZWZpbmVkIGFzIDEvc2luKHgpJyxcbiAgZXhhbXBsZXM6IFsnY3NjKDIpJywgJzEgLyBzaW4oMiknXSxcbiAgc2VlYWxzbzogWydzZWMnLCAnY290JywgJ3NpbiddXG59O1xuZXhwb3J0cy5jc2NEb2NzID0gY3NjRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NjaERvY3MgPSB2b2lkIDA7XG52YXIgY3NjaERvY3MgPSB7XG4gIG5hbWU6ICdjc2NoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnY3NjaCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGh5cGVyYm9saWMgY29zZWNhbnQgb2YgeCBpbiByYWRpYW5zLiBEZWZpbmVkIGFzIDEvc2luaCh4KScsXG4gIGV4YW1wbGVzOiBbJ2NzY2goMiknLCAnMSAvIHNpbmgoMiknXSxcbiAgc2VlYWxzbzogWydzZWNoJywgJ2NvdGgnLCAnc2luaCddXG59O1xuZXhwb3J0cy5jc2NoRG9jcyA9IGNzY2hEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZWNEb2NzID0gdm9pZCAwO1xudmFyIHNlY0RvY3MgPSB7XG4gIG5hbWU6ICdzZWMnLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydzZWMoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBzZWNhbnQgb2YgeCBpbiByYWRpYW5zLiBEZWZpbmVkIGFzIDEvY29zKHgpJyxcbiAgZXhhbXBsZXM6IFsnc2VjKDIpJywgJzEgLyBjb3MoMiknXSxcbiAgc2VlYWxzbzogWydjb3QnLCAnY3NjJywgJ2NvcyddXG59O1xuZXhwb3J0cy5zZWNEb2NzID0gc2VjRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2VjaERvY3MgPSB2b2lkIDA7XG52YXIgc2VjaERvY3MgPSB7XG4gIG5hbWU6ICdzZWNoJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnc2VjaCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGh5cGVyYm9saWMgc2VjYW50IG9mIHggaW4gcmFkaWFucy4gRGVmaW5lZCBhcyAxL2Nvc2goeCknLFxuICBleGFtcGxlczogWydzZWNoKDIpJywgJzEgLyBjb3NoKDIpJ10sXG4gIHNlZWFsc286IFsnY290aCcsICdjc2NoJywgJ2Nvc2gnXVxufTtcbmV4cG9ydHMuc2VjaERvY3MgPSBzZWNoRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2luRG9jcyA9IHZvaWQgMDtcbnZhciBzaW5Eb2NzID0ge1xuICBuYW1lOiAnc2luJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnc2luKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgc2luZSBvZiB4IGluIHJhZGlhbnMuJyxcbiAgZXhhbXBsZXM6IFsnc2luKDIpJywgJ3NpbihwaSAvIDQpIF4gMicsICdzaW4oOTAgZGVnKScsICdzaW4oMzAgZGVnKScsICdzaW4oMC4yKV4yICsgY29zKDAuMileMiddLFxuICBzZWVhbHNvOiBbJ2FzaW4nLCAnY29zJywgJ3RhbiddXG59O1xuZXhwb3J0cy5zaW5Eb2NzID0gc2luRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2luaERvY3MgPSB2b2lkIDA7XG52YXIgc2luaERvY3MgPSB7XG4gIG5hbWU6ICdzaW5oJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnc2luaCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGh5cGVyYm9saWMgc2luZSBvZiB4IGluIHJhZGlhbnMuJyxcbiAgZXhhbXBsZXM6IFsnc2luaCgwLjUpJ10sXG4gIHNlZWFsc286IFsnY29zaCcsICd0YW5oJ11cbn07XG5leHBvcnRzLnNpbmhEb2NzID0gc2luaERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRhbkRvY3MgPSB2b2lkIDA7XG52YXIgdGFuRG9jcyA9IHtcbiAgbmFtZTogJ3RhbicsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ3Rhbih4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHRhbmdlbnQgb2YgeCBpbiByYWRpYW5zLicsXG4gIGV4YW1wbGVzOiBbJ3RhbigwLjUpJywgJ3NpbigwLjUpIC8gY29zKDAuNSknLCAndGFuKHBpIC8gNCknLCAndGFuKDQ1IGRlZyknXSxcbiAgc2VlYWxzbzogWydhdGFuJywgJ3NpbicsICdjb3MnXVxufTtcbmV4cG9ydHMudGFuRG9jcyA9IHRhbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRhbmhEb2NzID0gdm9pZCAwO1xudmFyIHRhbmhEb2NzID0ge1xuICBuYW1lOiAndGFuaCcsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ3RhbmgoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBoeXBlcmJvbGljIHRhbmdlbnQgb2YgeCBpbiByYWRpYW5zLicsXG4gIGV4YW1wbGVzOiBbJ3RhbmgoMC41KScsICdzaW5oKDAuNSkgLyBjb3NoKDAuNSknXSxcbiAgc2VlYWxzbzogWydzaW5oJywgJ2Nvc2gnXVxufTtcbmV4cG9ydHMudGFuaERvY3MgPSB0YW5oRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudG9Eb2NzID0gdm9pZCAwO1xudmFyIHRvRG9jcyA9IHtcbiAgbmFtZTogJ3RvJyxcbiAgY2F0ZWdvcnk6ICdVbml0cycsXG4gIHN5bnRheDogWyd4IHRvIHVuaXQnLCAndG8oeCwgdW5pdCknXSxcbiAgZGVzY3JpcHRpb246ICdDaGFuZ2UgdGhlIHVuaXQgb2YgYSB2YWx1ZS4nLFxuICBleGFtcGxlczogWyc1IGluY2ggdG8gY20nLCAnMy4ya2cgdG8gZycsICcxNiBieXRlcyBpbiBiaXRzJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy50b0RvY3MgPSB0b0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNsb25lRG9jcyA9IHZvaWQgMDtcbnZhciBjbG9uZURvY3MgPSB7XG4gIG5hbWU6ICdjbG9uZScsXG4gIGNhdGVnb3J5OiAnVXRpbHMnLFxuICBzeW50YXg6IFsnY2xvbmUoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDbG9uZSBhIHZhcmlhYmxlLiBDcmVhdGVzIGEgY29weSBvZiBwcmltaXRpdmUgdmFyaWFibGVzLGFuZCBhIGRlZXAgY29weSBvZiBtYXRyaWNlcycsXG4gIGV4YW1wbGVzOiBbJ2Nsb25lKDMuNSknLCAnY2xvbmUoMiAtIDRpKScsICdjbG9uZSg0NSBkZWcpJywgJ2Nsb25lKFsxLCAyOyAzLCA0XSknLCAnY2xvbmUoXCJoZWxsbyB3b3JsZFwiKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuY2xvbmVEb2NzID0gY2xvbmVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mb3JtYXREb2NzID0gdm9pZCAwO1xudmFyIGZvcm1hdERvY3MgPSB7XG4gIG5hbWU6ICdmb3JtYXQnLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ2Zvcm1hdCh2YWx1ZSknLCAnZm9ybWF0KHZhbHVlLCBwcmVjaXNpb24pJ10sXG4gIGRlc2NyaXB0aW9uOiAnRm9ybWF0IGEgdmFsdWUgb2YgYW55IHR5cGUgYXMgc3RyaW5nLicsXG4gIGV4YW1wbGVzOiBbJ2Zvcm1hdCgyLjMpJywgJ2Zvcm1hdCgzIC0gNGkpJywgJ2Zvcm1hdChbXSknLCAnZm9ybWF0KHBpLCAzKSddLFxuICBzZWVhbHNvOiBbJ3ByaW50J11cbn07XG5leHBvcnRzLmZvcm1hdERvY3MgPSBmb3JtYXREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oYXNOdW1lcmljVmFsdWVEb2NzID0gdm9pZCAwO1xudmFyIGhhc051bWVyaWNWYWx1ZURvY3MgPSB7XG4gIG5hbWU6ICdoYXNOdW1lcmljVmFsdWUnLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ2hhc051bWVyaWNWYWx1ZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ1Rlc3Qgd2hldGhlciBhIHZhbHVlIGlzIGFuIG51bWVyaWMgdmFsdWUuICcgKyAnSW4gY2FzZSBvZiBhIHN0cmluZywgdHJ1ZSBpcyByZXR1cm5lZCBpZiB0aGUgc3RyaW5nIGNvbnRhaW5zIGEgbnVtZXJpYyB2YWx1ZS4nLFxuICBleGFtcGxlczogWydoYXNOdW1lcmljVmFsdWUoMiknLCAnaGFzTnVtZXJpY1ZhbHVlKFwiMlwiKScsICdpc051bWVyaWMoXCIyXCIpJywgJ2hhc051bWVyaWNWYWx1ZSgwKScsICdoYXNOdW1lcmljVmFsdWUoYmlnbnVtYmVyKDUwMCkpJywgJ2hhc051bWVyaWNWYWx1ZShmcmFjdGlvbigwLjEyNSkpJywgJ2hhc051bWVyaWNWYWx1ZSgyICsgM2kpJywgJ2hhc051bWVyaWNWYWx1ZShbMi4zLCBcImZvb1wiLCBmYWxzZV0pJ10sXG4gIHNlZWFsc286IFsnaXNJbnRlZ2VyJywgJ2lzWmVybycsICdpc05lZ2F0aXZlJywgJ2lzUG9zaXRpdmUnLCAnaXNOYU4nLCAnaXNOdW1lcmljJ11cbn07XG5leHBvcnRzLmhhc051bWVyaWNWYWx1ZURvY3MgPSBoYXNOdW1lcmljVmFsdWVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc0ludGVnZXJEb2NzID0gdm9pZCAwO1xudmFyIGlzSW50ZWdlckRvY3MgPSB7XG4gIG5hbWU6ICdpc0ludGVnZXInLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ2lzSW50ZWdlcih4KSddLFxuICBkZXNjcmlwdGlvbjogJ1Rlc3Qgd2hldGhlciBhIHZhbHVlIGlzIGFuIGludGVnZXIgbnVtYmVyLicsXG4gIGV4YW1wbGVzOiBbJ2lzSW50ZWdlcigyKScsICdpc0ludGVnZXIoMy41KScsICdpc0ludGVnZXIoWzMsIDAuNSwgLTJdKSddLFxuICBzZWVhbHNvOiBbJ2lzTmVnYXRpdmUnLCAnaXNOdW1lcmljJywgJ2lzUG9zaXRpdmUnLCAnaXNaZXJvJ11cbn07XG5leHBvcnRzLmlzSW50ZWdlckRvY3MgPSBpc0ludGVnZXJEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc05hTkRvY3MgPSB2b2lkIDA7XG52YXIgaXNOYU5Eb2NzID0ge1xuICBuYW1lOiAnaXNOYU4nLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ2lzTmFOKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgTmFOIChub3QgYSBudW1iZXIpJyxcbiAgZXhhbXBsZXM6IFsnaXNOYU4oMiknLCAnaXNOYU4oMCAvIDApJywgJ2lzTmFOKE5hTiknLCAnaXNOYU4oSW5maW5pdHkpJ10sXG4gIHNlZWFsc286IFsnaXNOZWdhdGl2ZScsICdpc051bWVyaWMnLCAnaXNQb3NpdGl2ZScsICdpc1plcm8nXVxufTtcbmV4cG9ydHMuaXNOYU5Eb2NzID0gaXNOYU5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc05lZ2F0aXZlRG9jcyA9IHZvaWQgMDtcbnZhciBpc05lZ2F0aXZlRG9jcyA9IHtcbiAgbmFtZTogJ2lzTmVnYXRpdmUnLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ2lzTmVnYXRpdmUoeCknXSxcbiAgZGVzY3JpcHRpb246ICdUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBuZWdhdGl2ZTogc21hbGxlciB0aGFuIHplcm8uJyxcbiAgZXhhbXBsZXM6IFsnaXNOZWdhdGl2ZSgyKScsICdpc05lZ2F0aXZlKDApJywgJ2lzTmVnYXRpdmUoLTQpJywgJ2lzTmVnYXRpdmUoWzMsIDAuNSwgLTJdKSddLFxuICBzZWVhbHNvOiBbJ2lzSW50ZWdlcicsICdpc051bWVyaWMnLCAnaXNQb3NpdGl2ZScsICdpc1plcm8nXVxufTtcbmV4cG9ydHMuaXNOZWdhdGl2ZURvY3MgPSBpc05lZ2F0aXZlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNOdW1lcmljRG9jcyA9IHZvaWQgMDtcbnZhciBpc051bWVyaWNEb2NzID0ge1xuICBuYW1lOiAnaXNOdW1lcmljJyxcbiAgY2F0ZWdvcnk6ICdVdGlscycsXG4gIHN5bnRheDogWydpc051bWVyaWMoeCknXSxcbiAgZGVzY3JpcHRpb246ICdUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBhIG51bWVyaWMgdmFsdWUuICcgKyAnUmV0dXJucyB0cnVlIHdoZW4gdGhlIGlucHV0IGlzIGEgbnVtYmVyLCBCaWdOdW1iZXIsIEZyYWN0aW9uLCBvciBib29sZWFuLicsXG4gIGV4YW1wbGVzOiBbJ2lzTnVtZXJpYygyKScsICdpc051bWVyaWMoXCIyXCIpJywgJ2hhc051bWVyaWNWYWx1ZShcIjJcIiknLCAnaXNOdW1lcmljKDApJywgJ2lzTnVtZXJpYyhiaWdudW1iZXIoNTAwKSknLCAnaXNOdW1lcmljKGZyYWN0aW9uKDAuMTI1KSknLCAnaXNOdW1lcmljKDIgKyAzaSknLCAnaXNOdW1lcmljKFsyLjMsIFwiZm9vXCIsIGZhbHNlXSknXSxcbiAgc2VlYWxzbzogWydpc0ludGVnZXInLCAnaXNaZXJvJywgJ2lzTmVnYXRpdmUnLCAnaXNQb3NpdGl2ZScsICdpc05hTicsICdoYXNOdW1lcmljVmFsdWUnXVxufTtcbmV4cG9ydHMuaXNOdW1lcmljRG9jcyA9IGlzTnVtZXJpY0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzUG9zaXRpdmVEb2NzID0gdm9pZCAwO1xudmFyIGlzUG9zaXRpdmVEb2NzID0ge1xuICBuYW1lOiAnaXNQb3NpdGl2ZScsXG4gIGNhdGVnb3J5OiAnVXRpbHMnLFxuICBzeW50YXg6IFsnaXNQb3NpdGl2ZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ1Rlc3Qgd2hldGhlciBhIHZhbHVlIGlzIHBvc2l0aXZlOiBsYXJnZXIgdGhhbiB6ZXJvLicsXG4gIGV4YW1wbGVzOiBbJ2lzUG9zaXRpdmUoMiknLCAnaXNQb3NpdGl2ZSgwKScsICdpc1Bvc2l0aXZlKC00KScsICdpc1Bvc2l0aXZlKFszLCAwLjUsIC0yXSknXSxcbiAgc2VlYWxzbzogWydpc0ludGVnZXInLCAnaXNOdW1lcmljJywgJ2lzTmVnYXRpdmUnLCAnaXNaZXJvJ11cbn07XG5leHBvcnRzLmlzUG9zaXRpdmVEb2NzID0gaXNQb3NpdGl2ZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzUHJpbWVEb2NzID0gdm9pZCAwO1xudmFyIGlzUHJpbWVEb2NzID0ge1xuICBuYW1lOiAnaXNQcmltZScsXG4gIGNhdGVnb3J5OiAnVXRpbHMnLFxuICBzeW50YXg6IFsnaXNQcmltZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ1Rlc3Qgd2hldGhlciBhIHZhbHVlIGlzIHByaW1lOiBoYXMgbm8gZGl2aXNvcnMgb3RoZXIgdGhhbiBpdHNlbGYgYW5kIG9uZS4nLFxuICBleGFtcGxlczogWydpc1ByaW1lKDMpJywgJ2lzUHJpbWUoLTIpJywgJ2lzUHJpbWUoWzIsIDE3LCAxMDBdKSddLFxuICBzZWVhbHNvOiBbJ2lzSW50ZWdlcicsICdpc051bWVyaWMnLCAnaXNOZWdhdGl2ZScsICdpc1plcm8nXVxufTtcbmV4cG9ydHMuaXNQcmltZURvY3MgPSBpc1ByaW1lRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNaZXJvRG9jcyA9IHZvaWQgMDtcbnZhciBpc1plcm9Eb2NzID0ge1xuICBuYW1lOiAnaXNaZXJvJyxcbiAgY2F0ZWdvcnk6ICdVdGlscycsXG4gIHN5bnRheDogWydpc1plcm8oeCknXSxcbiAgZGVzY3JpcHRpb246ICdUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyB6ZXJvLicsXG4gIGV4YW1wbGVzOiBbJ2lzWmVybygyKScsICdpc1plcm8oMCknLCAnaXNaZXJvKC00KScsICdpc1plcm8oWzMsIDAsIC0yLCAwXSknXSxcbiAgc2VlYWxzbzogWydpc0ludGVnZXInLCAnaXNOdW1lcmljJywgJ2lzTmVnYXRpdmUnLCAnaXNQb3NpdGl2ZSddXG59O1xuZXhwb3J0cy5pc1plcm9Eb2NzID0gaXNaZXJvRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubnVtZXJpY0RvY3MgPSB2b2lkIDA7XG52YXIgbnVtZXJpY0RvY3MgPSB7XG4gIG5hbWU6ICdudW1lcmljJyxcbiAgY2F0ZWdvcnk6ICdVdGlscycsXG4gIHN5bnRheDogWydudW1lcmljKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29udmVydCBhIG51bWVyaWMgaW5wdXQgdG8gYSBzcGVjaWZpYyBudW1lcmljIHR5cGU6IG51bWJlciwgQmlnTnVtYmVyLCBvciBGcmFjdGlvbi4nLFxuICBleGFtcGxlczogWydudW1lcmljKFwiNFwiKScsICdudW1lcmljKFwiNFwiLCBcIm51bWJlclwiKScsICdudW1lcmljKFwiNFwiLCBcIkJpZ051bWJlclwiKScsICdudW1lcmljKFwiNFwiLCBcIkZyYWN0aW9uKScsICdudW1lcmljKDQsIFwiRnJhY3Rpb25cIiknLCAnbnVtZXJpYyhmcmFjdGlvbigyLCA1KSwgXCJudW1iZXIpJ10sXG4gIHNlZWFsc286IFsnbnVtYmVyJywgJ2ZyYWN0aW9uJywgJ2JpZ251bWJlcicsICdzdHJpbmcnLCAnZm9ybWF0J11cbn07XG5leHBvcnRzLm51bWVyaWNEb2NzID0gbnVtZXJpY0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnR5cGVPZkRvY3MgPSB2b2lkIDA7XG52YXIgdHlwZU9mRG9jcyA9IHtcbiAgbmFtZTogJ3R5cGVPZicsXG4gIGNhdGVnb3J5OiAnVXRpbHMnLFxuICBzeW50YXg6IFsndHlwZU9mKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnR2V0IHRoZSB0eXBlIG9mIGEgdmFyaWFibGUuJyxcbiAgZXhhbXBsZXM6IFsndHlwZU9mKDMuNSknLCAndHlwZU9mKDIgLSA0aSknLCAndHlwZU9mKDQ1IGRlZyknLCAndHlwZU9mKFwiaGVsbG8gd29ybGRcIiknXSxcbiAgc2VlYWxzbzogWydnZXRNYXRyaXhEYXRhVHlwZSddXG59O1xuZXhwb3J0cy50eXBlT2ZEb2NzID0gdHlwZU9mRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29tcGlsZSA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdjb21waWxlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3BhcnNlJ107XG52YXIgY3JlYXRlQ29tcGlsZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBwYXJzZSA9IF9yZWYucGFyc2U7XG5cbiAgLyoqXG4gICAqIFBhcnNlIGFuZCBjb21waWxlIGFuIGV4cHJlc3Npb24uXG4gICAqIFJldHVybnMgYSBhbiBvYmplY3Qgd2l0aCBhIGZ1bmN0aW9uIGBldmFsdWF0ZShbc2NvcGVdKWAgdG8gZXZhbHVhdGUgdGhlXG4gICAqIGNvbXBpbGVkIGV4cHJlc3Npb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguY29tcGlsZShleHByKSAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBvbmUgbm9kZVxuICAgKiAgICAgbWF0aC5jb21waWxlKFtleHByMSwgZXhwcjIsIGV4cHIzLCAuLi5dKSAvLyByZXR1cm5zIGFuIGFycmF5IHdpdGggbm9kZXNcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBjb25zdCBjb2RlMSA9IG1hdGguY29tcGlsZSgnc3FydCgzXjIgKyA0XjIpJylcbiAgICogICAgIGNvZGUxLmV2YWx1YXRlKCkgLy8gNVxuICAgKlxuICAgKiAgICAgbGV0IHNjb3BlID0ge2E6IDMsIGI6IDR9XG4gICAqICAgICBjb25zdCBjb2RlMiA9IG1hdGguY29tcGlsZSgnYSAqIGInKSAvLyAxMlxuICAgKiAgICAgY29kZTIuZXZhbHVhdGUoc2NvcGUpIC8vIDEyXG4gICAqICAgICBzY29wZS5hID0gNVxuICAgKiAgICAgY29kZTIuZXZhbHVhdGUoc2NvcGUpIC8vIDIwXG4gICAqXG4gICAqICAgICBjb25zdCBub2RlcyA9IG1hdGguY29tcGlsZShbJ2EgPSAzJywgJ2IgPSA0JywgJ2EgKiBiJ10pXG4gICAqICAgICBub2Rlc1syXS5ldmFsdWF0ZSgpIC8vIDEyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBwYXJzZSwgZXZhbHVhdGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXSB8IEFycmF5IHwgTWF0cml4fSBleHByXG4gICAqICAgICAgICAgICAgVGhlIGV4cHJlc3Npb24gdG8gYmUgY29tcGlsZWRcbiAgICogQHJldHVybiB7e2V2YWx1YXRlOiBGdW5jdGlvbn0gfCBBcnJheS48e2V2YWx1YXRlOiBGdW5jdGlvbn0+fSBjb2RlXG4gICAqICAgICAgICAgICAgQW4gb2JqZWN0IHdpdGggdGhlIGNvbXBpbGVkIGV4cHJlc3Npb25cbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKGV4cHIpIHtcbiAgICAgIHJldHVybiBwYXJzZShleHByKS5jb21waWxlKCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChleHByKSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKGV4cHIsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICByZXR1cm4gcGFyc2UoZW50cnkpLmNvbXBpbGUoKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ29tcGlsZSA9IGNyZWF0ZUNvbXBpbGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZURlcHJlY2F0ZWRFdmFsID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9sb2cgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbG9nXCIpO1xuXG4vLyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDYuMC4wLiBEYXRlOiAyMDE4LTEyLTA1XG52YXIgY3JlYXRlRGVwcmVjYXRlZEV2YWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkoJ2V2YWwnLCBbJ2V2YWx1YXRlJ10sIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBldmFsdWF0ZSA9IF9yZWYuZXZhbHVhdGU7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgKDAsIF9sb2cud2Fybk9uY2UpKCdGdW5jdGlvbiBcImV2YWxcIiBoYXMgYmVlbiByZW5hbWVkIHRvIFwiZXZhbHVhdGVcIiBpbiB2Ni4wLjAsIHBsZWFzZSB1c2UgdGhlIG5ldyBmdW5jdGlvbiBpbnN0ZWFkLicpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBldmFsdWF0ZS5hcHBseShldmFsdWF0ZSwgYXJncyk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlRGVwcmVjYXRlZEV2YWwgPSBjcmVhdGVEZXByZWNhdGVkRXZhbDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRXZhbHVhdGUgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZXZhbHVhdGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAncGFyc2UnXTtcbnZhciBjcmVhdGVFdmFsdWF0ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBwYXJzZSA9IF9yZWYucGFyc2U7XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlIGFuIGV4cHJlc3Npb24uXG4gICAqXG4gICAqIE5vdGUgdGhlIGV2YWx1YXRpbmcgYXJiaXRyYXJ5IGV4cHJlc3Npb25zIG1heSBpbnZvbHZlIHNlY3VyaXR5IHJpc2tzLFxuICAgKiBzZWUgW2h0dHBzOi8vbWF0aGpzLm9yZy9kb2NzL2V4cHJlc3Npb25zL3NlY3VyaXR5Lmh0bWxdKGh0dHBzOi8vbWF0aGpzLm9yZy9kb2NzL2V4cHJlc3Npb25zL3NlY3VyaXR5Lmh0bWwpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmV2YWx1YXRlKGV4cHIpXG4gICAqICAgICBtYXRoLmV2YWx1YXRlKGV4cHIsIHNjb3BlKVxuICAgKiAgICAgbWF0aC5ldmFsdWF0ZShbZXhwcjEsIGV4cHIyLCBleHByMywgLi4uXSlcbiAgICogICAgIG1hdGguZXZhbHVhdGUoW2V4cHIxLCBleHByMiwgZXhwcjMsIC4uLl0sIHNjb3BlKVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKlxuICAgKiAgICAgbWF0aC5ldmFsdWF0ZSgnKDIrMykvNCcpICAgICAgICAgICAgICAgIC8vIDEuMjVcbiAgICogICAgIG1hdGguZXZhbHVhdGUoJ3NxcnQoM14yICsgNF4yKScpICAgICAgICAvLyA1XG4gICAqICAgICBtYXRoLmV2YWx1YXRlKCdzcXJ0KC00KScpICAgICAgICAgICAgICAgLy8gMmlcbiAgICogICAgIG1hdGguZXZhbHVhdGUoWydhPTMnLCAnYj00JywgJ2EqYiddKSAgICAvLyBbMywgNCwgMTJdXG4gICAqXG4gICAqICAgICBsZXQgc2NvcGUgPSB7YTozLCBiOjR9XG4gICAqICAgICBtYXRoLmV2YWx1YXRlKCdhICogYicsIHNjb3BlKSAgICAgICAgICAgLy8gMTJcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHBhcnNlLCBjb21waWxlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW10gfCBNYXRyaXh9IGV4cHIgICBUaGUgZXhwcmVzc2lvbiB0byBiZSBldmFsdWF0ZWRcbiAgICogQHBhcmFtIHtPYmplY3R9IFtzY29wZV0gICAgICAgICAgICAgICAgICAgIFNjb3BlIHRvIHJlYWQvd3JpdGUgdmFyaWFibGVzXG4gICAqIEByZXR1cm4geyp9IFRoZSByZXN1bHQgb2YgdGhlIGV4cHJlc3Npb25cbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKGV4cHIpIHtcbiAgICAgIHZhciBzY29wZSA9IHt9O1xuICAgICAgcmV0dXJuIHBhcnNlKGV4cHIpLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdPYmplY3QoZXhwciwgc2NvcGUpIHtcbiAgICAgIHJldHVybiBwYXJzZShleHByKS5jb21waWxlKCkuZXZhbHVhdGUoc2NvcGUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoZXhwcikge1xuICAgICAgdmFyIHNjb3BlID0ge307XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKGV4cHIsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICByZXR1cm4gcGFyc2UoZW50cnkpLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7XG4gICAgICB9KTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgT2JqZWN0JzogZnVuY3Rpb24gQXJyYXlNYXRyaXhPYmplY3QoZXhwciwgc2NvcGUpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoZXhwciwgZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiBwYXJzZShlbnRyeSkuY29tcGlsZSgpLmV2YWx1YXRlKHNjb3BlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlRXZhbHVhdGUgPSBjcmVhdGVFdmFsdWF0ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSGVscCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX2VtYmVkZGVkRG9jcyA9IHJlcXVpcmUoXCIuLi9lbWJlZGRlZERvY3MvZW1iZWRkZWREb2NzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBuYW1lID0gJ2hlbHAnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0aFdpdGhUcmFuc2Zvcm0nLCAnSGVscCddO1xudmFyIGNyZWF0ZUhlbHAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0aFdpdGhUcmFuc2Zvcm0gPSBfcmVmLm1hdGhXaXRoVHJhbnNmb3JtLFxuICAgICAgSGVscCA9IF9yZWYuSGVscDtcblxuICAvKipcbiAgICogUmV0cmlldmUgaGVscCBvbiBhIGZ1bmN0aW9uIG9yIGRhdGEgdHlwZS5cbiAgICogSGVscCBmaWxlcyBhcmUgcmV0cmlldmVkIGZyb20gdGhlIGVtYmVkZGVkIGRvY3VtZW50YXRpb24gaW4gbWF0aC5kb2NzLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguaGVscChzZWFyY2gpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBjb25zb2xlLmxvZyhtYXRoLmhlbHAoJ3NpbicpLnRvU3RyaW5nKCkpXG4gICAqICAgIGNvbnNvbGUubG9nKG1hdGguaGVscChtYXRoLmFkZCkudG9TdHJpbmcoKSlcbiAgICogICAgY29uc29sZS5sb2cobWF0aC5oZWxwKG1hdGguYWRkKS50b0pTT04oKSlcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbiB8IHN0cmluZyB8IE9iamVjdH0gc2VhcmNoICAgQSBmdW5jdGlvbiBvciBmdW5jdGlvbiBuYW1lXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciB3aGljaCB0byBnZXQgaGVscFxuICAgKiBAcmV0dXJuIHtIZWxwfSBBIGhlbHAgb2JqZWN0XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIGFueTogZnVuY3Rpb24gYW55KHNlYXJjaCkge1xuICAgICAgdmFyIHByb3A7XG4gICAgICB2YXIgc2VhcmNoTmFtZSA9IHNlYXJjaDtcblxuICAgICAgaWYgKHR5cGVvZiBzZWFyY2ggIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGZvciAocHJvcCBpbiBtYXRoV2l0aFRyYW5zZm9ybSkge1xuICAgICAgICAgIC8vIHNlYXJjaCBpbiBmdW5jdGlvbnMgYW5kIGNvbnN0YW50c1xuICAgICAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkobWF0aFdpdGhUcmFuc2Zvcm0sIHByb3ApICYmIHNlYXJjaCA9PT0gbWF0aFdpdGhUcmFuc2Zvcm1bcHJvcF0pIHtcbiAgICAgICAgICAgIHNlYXJjaE5hbWUgPSBwcm9wO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qIFRPRE86IGltcGxlbWVudCBoZWxwIGZvciBkYXRhIHR5cGVzXG4gICAgICAgICBpZiAoIXRleHQpIHtcbiAgICAgICAgIC8vIHNlYXJjaCBkYXRhIHR5cGVcbiAgICAgICAgIGZvciAocHJvcCBpbiBtYXRoLnR5cGUpIHtcbiAgICAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eShtYXRoLCBwcm9wKSkge1xuICAgICAgICAgaWYgKHNlYXJjaCA9PT0gbWF0aC50eXBlW3Byb3BdKSB7XG4gICAgICAgICB0ZXh0ID0gcHJvcFxuICAgICAgICAgYnJlYWtcbiAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgICAgICovXG5cbiAgICAgIH1cblxuICAgICAgdmFyIGRvYyA9ICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKF9lbWJlZGRlZERvY3MuZW1iZWRkZWREb2NzLCBzZWFyY2hOYW1lKTtcblxuICAgICAgaWYgKCFkb2MpIHtcbiAgICAgICAgdmFyIHNlYXJjaFRleHQgPSB0eXBlb2Ygc2VhcmNoTmFtZSA9PT0gJ2Z1bmN0aW9uJyA/IHNlYXJjaE5hbWUubmFtZSA6IHNlYXJjaE5hbWU7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gZG9jdW1lbnRhdGlvbiBmb3VuZCBvbiBcIicgKyBzZWFyY2hUZXh0ICsgJ1wiJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgSGVscChkb2MpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlSGVscCA9IGNyZWF0ZUhlbHA7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVBhcnNlciA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3BhcnNlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdQYXJzZXInXTtcbnZhciBjcmVhdGVQYXJzZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgUGFyc2VyID0gX3JlZi5QYXJzZXI7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHBhcnNlci4gVGhlIGZ1bmN0aW9uIGNyZWF0ZXMgYSBuZXcgYG1hdGguUGFyc2VyYCBvYmplY3QuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5wYXJzZXIoKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIGNvbnN0IHBhcnNlciA9IG5ldyBtYXRoLnBhcnNlcigpXG4gICAqXG4gICAqICAgICAvLyBldmFsdWF0ZSBleHByZXNzaW9uc1xuICAgKiAgICAgY29uc3QgYSA9IHBhcnNlci5ldmFsdWF0ZSgnc3FydCgzXjIgKyA0XjIpJykgLy8gNVxuICAgKiAgICAgY29uc3QgYiA9IHBhcnNlci5ldmFsdWF0ZSgnc3FydCgtNCknKSAgICAgICAgLy8gMmlcbiAgICogICAgIGNvbnN0IGMgPSBwYXJzZXIuZXZhbHVhdGUoJzIgaW5jaCBpbiBjbScpICAgIC8vIDUuMDggY21cbiAgICogICAgIGNvbnN0IGQgPSBwYXJzZXIuZXZhbHVhdGUoJ2Nvcyg0NSBkZWcpJykgICAgIC8vIDAuNzA3MTA2NzgxMTg2NTQ3NlxuICAgKlxuICAgKiAgICAgLy8gZGVmaW5lIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zXG4gICAqICAgICBwYXJzZXIuZXZhbHVhdGUoJ3ggPSA3IC8gMicpICAgICAgICAgICAgICAgICAvLyAzLjVcbiAgICogICAgIHBhcnNlci5ldmFsdWF0ZSgneCArIDMnKSAgICAgICAgICAgICAgICAgICAgIC8vIDYuNVxuICAgKiAgICAgcGFyc2VyLmV2YWx1YXRlKCdmdW5jdGlvbiBmKHgsIHkpID0geF55JykgICAgLy8gZih4LCB5KVxuICAgKiAgICAgcGFyc2VyLmV2YWx1YXRlKCdmKDIsIDMpJykgICAgICAgICAgICAgICAgICAgLy8gOFxuICAgKlxuICAgKiAgICAgLy8gZ2V0IGFuZCBzZXQgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnNcbiAgICogICAgIGNvbnN0IHggPSBwYXJzZXIuZ2V0KCd4JykgICAgICAgICAgICAgICAgLy8gN1xuICAgKiAgICAgY29uc3QgZiA9IHBhcnNlci5nZXQoJ2YnKSAgICAgICAgICAgICAgICAvLyBmdW5jdGlvblxuICAgKiAgICAgY29uc3QgZyA9IGYoMywgMikgICAgICAgICAgICAgICAgICAgICAgICAvLyA5XG4gICAqICAgICBwYXJzZXIuc2V0KCdoJywgNTAwKVxuICAgKiAgICAgY29uc3QgaSA9IHBhcnNlci5ldmFsdWF0ZSgnaCAvIDInKSAgICAgICAvLyAyNTBcbiAgICogICAgIHBhcnNlci5zZXQoJ2hlbGxvJywgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICogICAgICAgcmV0dXJuICdoZWxsbywgJyArIG5hbWUgKyAnISdcbiAgICogICAgIH0pXG4gICAqICAgICBwYXJzZXIuZXZhbHVhdGUoJ2hlbGxvKFwidXNlclwiKScpICAgICAgICAgLy8gXCJoZWxsbywgdXNlciFcIlxuICAgKlxuICAgKiAgICAgLy8gY2xlYXIgZGVmaW5lZCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlc1xuICAgKiAgICAgcGFyc2VyLmNsZWFyKClcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGV2YWx1YXRlLCBjb21waWxlLCBwYXJzZVxuICAgKlxuICAgKiBAcmV0dXJuIHtQYXJzZXJ9IFBhcnNlclxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyc2VyKCk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVQYXJzZXIgPSBjcmVhdGVQYXJzZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmtleXdvcmRzID0gdm9pZCAwO1xuLy8gUmVzZXJ2ZWQga2V5d29yZHMgbm90IGFsbG93ZWQgdG8gdXNlIGluIHRoZSBwYXJzZXJcbnZhciBrZXl3b3JkcyA9IHtcbiAgZW5kOiB0cnVlXG59O1xuZXhwb3J0cy5rZXl3b3JkcyA9IGtleXdvcmRzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY2Nlc3Nvck5vZGUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hY2Nlc3MgPSByZXF1aXJlKFwiLi91dGlscy9hY2Nlc3NcIik7XG5cbnZhciBuYW1lID0gJ0FjY2Vzc29yTm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydzdWJzZXQnLCAnTm9kZSddO1xudmFyIGNyZWF0ZUFjY2Vzc29yTm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIE5vZGUgPSBfcmVmLk5vZGU7XG4gIHZhciBhY2Nlc3MgPSAoMCwgX2FjY2Vzcy5hY2Nlc3NGYWN0b3J5KSh7XG4gICAgc3Vic2V0OiBzdWJzZXRcbiAgfSk7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3IgQWNjZXNzb3JOb2RlXG4gICAqIEBleHRlbmRzIHtOb2RlfVxuICAgKiBBY2Nlc3MgYW4gb2JqZWN0IHByb3BlcnR5IG9yIGdldCBhIG1hdHJpeCBzdWJzZXRcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBvYmplY3QgICAgICAgICAgICAgICAgIFRoZSBvYmplY3QgZnJvbSB3aGljaCB0byByZXRyaWV2ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBwcm9wZXJ0eSBvciBzdWJzZXQuXG4gICAqIEBwYXJhbSB7SW5kZXhOb2RlfSBpbmRleCAgICAgICAgICAgICBJbmRleE5vZGUgY29udGFpbmluZyByYW5nZXNcbiAgICovXG5cbiAgZnVuY3Rpb24gQWNjZXNzb3JOb2RlKG9iamVjdCwgaW5kZXgpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQWNjZXNzb3JOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShvYmplY3QpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb2RlIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJvYmplY3RcIicpO1xuICAgIH1cblxuICAgIGlmICghKDAsIF9pcy5pc0luZGV4Tm9kZSkoaW5kZXgpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmRleE5vZGUgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciBcImluZGV4XCInKTtcbiAgICB9XG5cbiAgICB0aGlzLm9iamVjdCA9IG9iamVjdCB8fCBudWxsO1xuICAgIHRoaXMuaW5kZXggPSBpbmRleDsgLy8gcmVhZG9ubHkgcHJvcGVydHkgbmFtZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICduYW1lJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXguaXNPYmplY3RQcm9wZXJ0eSgpID8gdGhpcy5pbmRleC5nZXRPYmplY3RQcm9wZXJ0eSgpIDogJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0Lm5hbWUgfHwgJyc7XG4gICAgICAgIH1cbiAgICAgIH0uYmluZCh0aGlzKSxcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0KCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhc3NpZ24gYSBuZXcgbmFtZSwgbmFtZSBpcyByZWFkLW9ubHknKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIEFjY2Vzc29yTm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLnR5cGUgPSAnQWNjZXNzb3JOb2RlJztcbiAgQWNjZXNzb3JOb2RlLnByb3RvdHlwZS5pc0FjY2Vzc29yTm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIEFjY2Vzc29yTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICB2YXIgZXZhbE9iamVjdCA9IHRoaXMub2JqZWN0Ll9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgIHZhciBldmFsSW5kZXggPSB0aGlzLmluZGV4Ll9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgIGlmICh0aGlzLmluZGV4LmlzT2JqZWN0UHJvcGVydHkoKSkge1xuICAgICAgdmFyIHByb3AgPSB0aGlzLmluZGV4LmdldE9iamVjdFByb3BlcnR5KCk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEFjY2Vzc29yTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkoZXZhbE9iamVjdChzY29wZSwgYXJncywgY29udGV4dCksIHByb3ApO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBY2Nlc3Nvck5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgdmFyIG9iamVjdCA9IGV2YWxPYmplY3Qoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICB2YXIgaW5kZXggPSBldmFsSW5kZXgoc2NvcGUsIGFyZ3MsIG9iamVjdCk7IC8vIHdlIHBhc3Mgb2JqZWN0IGhlcmUgaW5zdGVhZCBvZiBjb250ZXh0XG5cbiAgICAgICAgcmV0dXJuIGFjY2VzcyhvYmplY3QsIGluZGV4KTtcbiAgICAgIH07XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIEFjY2Vzc29yTm9kZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrKHRoaXMub2JqZWN0LCAnb2JqZWN0JywgdGhpcyk7XG4gICAgY2FsbGJhY2sodGhpcy5pbmRleCwgJ2luZGV4JywgdGhpcyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgQWNjZXNzb3JOb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtBY2Nlc3Nvck5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlXG4gICAqL1xuXG5cbiAgQWNjZXNzb3JOb2RlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gbmV3IEFjY2Vzc29yTm9kZSh0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5vYmplY3QsICdvYmplY3QnLCB0aGlzKSksIHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLmluZGV4LCAnaW5kZXgnLCB0aGlzKSkpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhpcyBub2RlLCBhIHNoYWxsb3cgY29weVxuICAgKiBAcmV0dXJuIHtBY2Nlc3Nvck5vZGV9XG4gICAqL1xuXG5cbiAgQWNjZXNzb3JOb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IEFjY2Vzc29yTm9kZSh0aGlzLm9iamVjdCwgdGhpcy5pbmRleCk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLl90b1N0cmluZyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIG9iamVjdCA9IHRoaXMub2JqZWN0LnRvU3RyaW5nKG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLm9iamVjdCkpIHtcbiAgICAgIG9iamVjdCA9ICcoJyArIG9iamVjdCArICcpJztcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqZWN0ICsgdGhpcy5pbmRleC50b1N0cmluZyhvcHRpb25zKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBIVE1MIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIG9iamVjdCA9IHRoaXMub2JqZWN0LnRvSFRNTChvcHRpb25zKTtcblxuICAgIGlmIChuZWVkUGFyZW50aGVzaXModGhpcy5vYmplY3QpKSB7XG4gICAgICBvYmplY3QgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBvYmplY3QgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdCArIHRoaXMuaW5kZXgudG9IVE1MKG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIG9iamVjdCA9IHRoaXMub2JqZWN0LnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLm9iamVjdCkpIHtcbiAgICAgIG9iamVjdCA9ICdcXFxcbGVmdChcXCcgKyBvYmplY3QgKyBcXCdcXFxccmlnaHQpJztcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqZWN0ICsgdGhpcy5pbmRleC50b1RleChvcHRpb25zKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnQWNjZXNzb3JOb2RlJyxcbiAgICAgIG9iamVjdDogdGhpcy5vYmplY3QsXG4gICAgICBpbmRleDogdGhpcy5pbmRleFxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBBY2Nlc3Nvck5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkFjY2Vzc29yTm9kZVwiLCBvYmplY3Q6IC4uLiwgaW5kZXg6IC4uLn1gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtBY2Nlc3Nvck5vZGV9XG4gICAqL1xuXG5cbiAgQWNjZXNzb3JOb2RlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IEFjY2Vzc29yTm9kZShqc29uLm9iamVjdCwganNvbi5pbmRleCk7XG4gIH07XG4gIC8qKlxuICAgKiBBcmUgcGFyZW50aGVzaXMgbmVlZGVkP1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIG5lZWRQYXJlbnRoZXNpcyhub2RlKSB7XG4gICAgLy8gVE9ETzogbWF5YmUgbWFrZSBhIG1ldGhvZCBvbiB0aGUgbm9kZXMgd2hpY2ggdGVsbHMgd2hldGhlciB0aGV5IG5lZWQgcGFyZW50aGVzaXM/XG4gICAgcmV0dXJuICEoKDAsIF9pcy5pc0FjY2Vzc29yTm9kZSkobm9kZSkgfHwgKDAsIF9pcy5pc0FycmF5Tm9kZSkobm9kZSkgfHwgKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkobm9kZSkgfHwgKDAsIF9pcy5pc0Z1bmN0aW9uTm9kZSkobm9kZSkgfHwgKDAsIF9pcy5pc09iamVjdE5vZGUpKG5vZGUpIHx8ICgwLCBfaXMuaXNQYXJlbnRoZXNpc05vZGUpKG5vZGUpIHx8ICgwLCBfaXMuaXNTeW1ib2xOb2RlKShub2RlKSk7XG4gIH1cblxuICByZXR1cm4gQWNjZXNzb3JOb2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY2Nlc3Nvck5vZGUgPSBjcmVhdGVBY2Nlc3Nvck5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFycmF5Tm9kZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ0FycmF5Tm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydOb2RlJ107XG52YXIgY3JlYXRlQXJyYXlOb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIE5vZGUgPSBfcmVmLk5vZGU7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBBcnJheU5vZGVcbiAgICogQGV4dGVuZHMge05vZGV9XG4gICAqIEhvbGRzIGFuIDEtZGltZW5zaW9uYWwgYXJyYXkgd2l0aCBpdGVtc1xuICAgKiBAcGFyYW0ge05vZGVbXX0gW2l0ZW1zXSAgIDEgZGltZW5zaW9uYWwgYXJyYXkgd2l0aCBpdGVtc1xuICAgKi9cbiAgZnVuY3Rpb24gQXJyYXlOb2RlKGl0ZW1zKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEFycmF5Tm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfVxuXG4gICAgdGhpcy5pdGVtcyA9IGl0ZW1zIHx8IFtdOyAvLyB2YWxpZGF0ZSBpbnB1dFxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpIHx8ICF0aGlzLml0ZW1zLmV2ZXJ5KF9pcy5pc05vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBjb250YWluaW5nIE5vZGVzIGV4cGVjdGVkJyk7XG4gICAgfSAvLyBUT0RPOiBkZXByZWNhdGVkIHNpbmNlIHYzLCByZW1vdmUgc29tZSBkYXlcblxuXG4gICAgdmFyIGRlcHJlY2F0ZWQgPSBmdW5jdGlvbiBkZXByZWNhdGVkKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9wZXJ0eSBgQXJyYXlOb2RlLm5vZGVzYCBpcyBkZXByZWNhdGVkLCB1c2UgYEFycmF5Tm9kZS5pdGVtc2AgaW5zdGVhZCcpO1xuICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ25vZGVzJywge1xuICAgICAgZ2V0OiBkZXByZWNhdGVkLFxuICAgICAgc2V0OiBkZXByZWNhdGVkXG4gICAgfSk7XG4gIH1cblxuICBBcnJheU5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgQXJyYXlOb2RlLnByb3RvdHlwZS50eXBlID0gJ0FycmF5Tm9kZSc7XG4gIEFycmF5Tm9kZS5wcm90b3R5cGUuaXNBcnJheU5vZGUgPSB0cnVlO1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuICBBcnJheU5vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7XG4gICAgdmFyIGV2YWxJdGVtcyA9ICgwLCBfYXJyYXkubWFwKSh0aGlzLml0ZW1zLCBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0uX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuICAgIH0pO1xuICAgIHZhciBhc01hdHJpeCA9IG1hdGguY29uZmlnLm1hdHJpeCAhPT0gJ0FycmF5JztcblxuICAgIGlmIChhc01hdHJpeCkge1xuICAgICAgdmFyIG1hdHJpeCA9IG1hdGgubWF0cml4O1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBcnJheU5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIG1hdHJpeCgoMCwgX2FycmF5Lm1hcCkoZXZhbEl0ZW1zLCBmdW5jdGlvbiAoZXZhbEl0ZW0pIHtcbiAgICAgICAgICByZXR1cm4gZXZhbEl0ZW0oc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICB9KSk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEFycmF5Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gKDAsIF9hcnJheS5tYXApKGV2YWxJdGVtcywgZnVuY3Rpb24gKGV2YWxJdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGV2YWxJdGVtKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2tcbiAgICovXG5cblxuICBBcnJheU5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBub2RlID0gdGhpcy5pdGVtc1tpXTtcbiAgICAgIGNhbGxiYWNrKG5vZGUsICdpdGVtc1snICsgaSArICddJywgdGhpcyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEFycmF5Tm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7QXJyYXlOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIEFycmF5Tm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIGl0ZW1zID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGl0ZW1zW2ldID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuaXRlbXNbaV0sICdpdGVtc1snICsgaSArICddJywgdGhpcykpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQXJyYXlOb2RlKGl0ZW1zKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7QXJyYXlOb2RlfVxuICAgKi9cblxuXG4gIEFycmF5Tm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBBcnJheU5vZGUodGhpcy5pdGVtcy5zbGljZSgwKSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqIEBvdmVycmlkZVxuICAgKi9cblxuXG4gIEFycmF5Tm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgaXRlbXMgPSB0aGlzLml0ZW1zLm1hcChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUudG9TdHJpbmcob3B0aW9ucyk7XG4gICAgfSk7XG4gICAgcmV0dXJuICdbJyArIGl0ZW1zLmpvaW4oJywgJykgKyAnXSc7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgQXJyYXlOb2RlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ0FycmF5Tm9kZScsXG4gICAgICBpdGVtczogdGhpcy5pdGVtc1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBBcnJheU5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkFycmF5Tm9kZVwiLCBpdGVtczogWy4uLl19YCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG1hdGhqcyBpcyBvcHRpb25hbFxuICAgKiBAcmV0dXJucyB7QXJyYXlOb2RlfVxuICAgKi9cblxuXG4gIEFycmF5Tm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBBcnJheU5vZGUoanNvbi5pdGVtcyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKiBAb3ZlcnJpZGVcbiAgICovXG5cblxuICBBcnJheU5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGl0ZW1zID0gdGhpcy5pdGVtcy5tYXAoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlLnRvSFRNTChvcHRpb25zKTtcbiAgICB9KTtcbiAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXNxdWFyZS1wYXJlbnRoZXNpc1wiPls8L3NwYW4+JyArIGl0ZW1zLmpvaW4oJzxzcGFuIGNsYXNzPVwibWF0aC1zZXBhcmF0b3JcIj4sPC9zcGFuPicpICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXNxdWFyZS1wYXJlbnRoZXNpc1wiPl08L3NwYW4+JztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBMYVRlWCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIEFycmF5Tm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcyA9ICdcXFxcYmVnaW57Ym1hdHJpeH0nO1xuICAgIHRoaXMuaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgaWYgKG5vZGUuaXRlbXMpIHtcbiAgICAgICAgcyArPSBub2RlLml0ZW1zLm1hcChmdW5jdGlvbiAoY2hpbGROb2RlKSB7XG4gICAgICAgICAgcmV0dXJuIGNoaWxkTm9kZS50b1RleChvcHRpb25zKTtcbiAgICAgICAgfSkuam9pbignJicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcyArPSBub2RlLnRvVGV4KG9wdGlvbnMpO1xuICAgICAgfSAvLyBuZXcgbGluZVxuXG5cbiAgICAgIHMgKz0gJ1xcXFxcXFxcJztcbiAgICB9KTtcbiAgICBzICs9ICdcXFxcZW5ke2JtYXRyaXh9JztcbiAgICByZXR1cm4gcztcbiAgfTtcblxuICByZXR1cm4gQXJyYXlOb2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBcnJheU5vZGUgPSBjcmVhdGVBcnJheU5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFzc2lnbm1lbnROb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2N1c3RvbXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY3VzdG9tc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWNjZXNzID0gcmVxdWlyZShcIi4vdXRpbHMvYWNjZXNzXCIpO1xuXG52YXIgX2Fzc2lnbiA9IHJlcXVpcmUoXCIuL3V0aWxzL2Fzc2lnblwiKTtcblxudmFyIF9vcGVyYXRvcnMgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzXCIpO1xuXG52YXIgbmFtZSA9ICdBc3NpZ25tZW50Tm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydzdWJzZXQnLCAnP21hdHJpeCcsIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIG5lZWRlZCBhdCBhbGwsIHNob3VsZCBiZSBoYW5kbGVkIGJ5IHN1YnNldFxuJ05vZGUnXTtcbnZhciBjcmVhdGVBc3NpZ25tZW50Tm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgTm9kZSA9IF9yZWYuTm9kZTtcbiAgdmFyIGFjY2VzcyA9ICgwLCBfYWNjZXNzLmFjY2Vzc0ZhY3RvcnkpKHtcbiAgICBzdWJzZXQ6IHN1YnNldFxuICB9KTtcbiAgdmFyIGFzc2lnbiA9ICgwLCBfYXNzaWduLmFzc2lnbkZhY3RvcnkpKHtcbiAgICBzdWJzZXQ6IHN1YnNldCxcbiAgICBtYXRyaXg6IG1hdHJpeFxuICB9KTtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBBc3NpZ25tZW50Tm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICpcbiAgICogRGVmaW5lIGEgc3ltYm9sLCBsaWtlIGBhPTMuMmAsIHVwZGF0ZSBhIHByb3BlcnR5IGxpa2UgYGEuYj0zLjJgLCBvclxuICAgKiByZXBsYWNlIGEgc3Vic2V0IG9mIGEgbWF0cml4IGxpa2UgYEFbMiwyXT00MmAuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG5ldyBBc3NpZ25tZW50Tm9kZShzeW1ib2wsIHZhbHVlKVxuICAgKiAgICAgbmV3IEFzc2lnbm1lbnROb2RlKG9iamVjdCwgaW5kZXgsIHZhbHVlKVxuICAgKlxuICAgKiBVc2FnZTpcbiAgICpcbiAgICogICAgbmV3IEFzc2lnbm1lbnROb2RlKG5ldyBTeW1ib2xOb2RlKCdhJyksIG5ldyBDb25zdGFudE5vZGUoMikpICAgICAgICAgICAgICAgICAgICAgICAvLyBhPTJcbiAgICogICAgbmV3IEFzc2lnbm1lbnROb2RlKG5ldyBTeW1ib2xOb2RlKCdhJyksIG5ldyBJbmRleE5vZGUoJ2InKSwgbmV3IENvbnN0YW50Tm9kZSgyKSkgICAvLyBhLmI9MlxuICAgKiAgICBuZXcgQXNzaWdubWVudE5vZGUobmV3IFN5bWJvbE5vZGUoJ2EnKSwgbmV3IEluZGV4Tm9kZSgxLCAyKSwgbmV3IENvbnN0YW50Tm9kZSgzKSkgIC8vIGFbMSwyXT0zXG4gICAqXG4gICAqIEBwYXJhbSB7U3ltYm9sTm9kZSB8IEFjY2Vzc29yTm9kZX0gb2JqZWN0ICBPYmplY3Qgb24gd2hpY2ggdG8gYXNzaWduIGEgdmFsdWVcbiAgICogQHBhcmFtIHtJbmRleE5vZGV9IFtpbmRleD1udWxsXSAgICAgICAgICAgIEluZGV4LCBwcm9wZXJ0eSBuYW1lIG9yIG1hdHJpeFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXguIE9wdGlvbmFsLiBJZiBub3QgcHJvdmlkZWRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBgb2JqZWN0YCBpcyBhIFN5bWJvbE5vZGUsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJvcGVydHkgaXMgYXNzaWduZWQgdG8gdGhlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbG9iYWwgc2NvcGUuXG4gICAqIEBwYXJhbSB7Tm9kZX0gdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgdG8gYmUgYXNzaWduZWRcbiAgICovXG5cbiAgZnVuY3Rpb24gQXNzaWdubWVudE5vZGUob2JqZWN0LCBpbmRleCwgdmFsdWUpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQXNzaWdubWVudE5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIHRoaXMub2JqZWN0ID0gb2JqZWN0O1xuICAgIHRoaXMuaW5kZXggPSB2YWx1ZSA/IGluZGV4IDogbnVsbDtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWUgfHwgaW5kZXg7IC8vIHZhbGlkYXRlIGlucHV0XG5cbiAgICBpZiAoISgwLCBfaXMuaXNTeW1ib2xOb2RlKShvYmplY3QpICYmICEoMCwgX2lzLmlzQWNjZXNzb3JOb2RlKShvYmplY3QpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTeW1ib2xOb2RlIG9yIEFjY2Vzc29yTm9kZSBleHBlY3RlZCBhcyBcIm9iamVjdFwiJyk7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShvYmplY3QpICYmIG9iamVjdC5uYW1lID09PSAnZW5kJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYXNzaWduIHRvIHN5bWJvbCBcImVuZFwiJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5kZXggJiYgISgwLCBfaXMuaXNJbmRleE5vZGUpKHRoaXMuaW5kZXgpKSB7XG4gICAgICAvLyBpbmRleCBpcyBvcHRpb25hbFxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5kZXhOb2RlIGV4cGVjdGVkIGFzIFwiaW5kZXhcIicpO1xuICAgIH1cblxuICAgIGlmICghKDAsIF9pcy5pc05vZGUpKHRoaXMudmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb2RlIGV4cGVjdGVkIGFzIFwidmFsdWVcIicpO1xuICAgIH0gLy8gcmVhZG9ubHkgcHJvcGVydHkgbmFtZVxuXG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ25hbWUnLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuaW5kZXgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbmRleC5pc09iamVjdFByb3BlcnR5KCkgPyB0aGlzLmluZGV4LmdldE9iamVjdFByb3BlcnR5KCkgOiAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5vYmplY3QubmFtZSB8fCAnJztcbiAgICAgICAgfVxuICAgICAgfS5iaW5kKHRoaXMpLFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGFzc2lnbiBhIG5ldyBuYW1lLCBuYW1lIGlzIHJlYWQtb25seScpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnR5cGUgPSAnQXNzaWdubWVudE5vZGUnO1xuICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuaXNBc3NpZ25tZW50Tm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIEFzc2lnbm1lbnROb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHZhciBldmFsT2JqZWN0ID0gdGhpcy5vYmplY3QuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgdmFyIGV2YWxJbmRleCA9IHRoaXMuaW5kZXggPyB0aGlzLmluZGV4Ll9jb21waWxlKG1hdGgsIGFyZ05hbWVzKSA6IG51bGw7XG5cbiAgICB2YXIgZXZhbFZhbHVlID0gdGhpcy52YWx1ZS5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICB2YXIgbmFtZSA9IHRoaXMub2JqZWN0Lm5hbWU7XG5cbiAgICBpZiAoIXRoaXMuaW5kZXgpIHtcbiAgICAgIC8vIGFwcGx5IGEgdmFyaWFibGUgdG8gdGhlIHNjb3BlLCBmb3IgZXhhbXBsZSBgYT0yYFxuICAgICAgaWYgKCEoMCwgX2lzLmlzU3ltYm9sTm9kZSkodGhpcy5vYmplY3QpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N5bWJvbE5vZGUgZXhwZWN0ZWQgYXMgb2JqZWN0Jyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsQXNzaWdubWVudE5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfY3VzdG9tcy5zZXRTYWZlUHJvcGVydHkpKHNjb3BlLCBuYW1lLCBldmFsVmFsdWUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICh0aGlzLmluZGV4LmlzT2JqZWN0UHJvcGVydHkoKSkge1xuICAgICAgLy8gYXBwbHkgYW4gb2JqZWN0IHByb3BlcnR5IGZvciBleGFtcGxlIGBhLmI9MmBcbiAgICAgIHZhciBwcm9wID0gdGhpcy5pbmRleC5nZXRPYmplY3RQcm9wZXJ0eSgpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBc3NpZ25tZW50Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICB2YXIgb2JqZWN0ID0gZXZhbE9iamVjdChzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIHZhciB2YWx1ZSA9IGV2YWxWYWx1ZShzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIHJldHVybiAoMCwgX2N1c3RvbXMuc2V0U2FmZVByb3BlcnR5KShvYmplY3QsIHByb3AsIHZhbHVlKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzU3ltYm9sTm9kZSkodGhpcy5vYmplY3QpKSB7XG4gICAgICAvLyB1cGRhdGUgYSBtYXRyaXggc3Vic2V0LCBmb3IgZXhhbXBsZSBgYVsyXT0zYFxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBc3NpZ25tZW50Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICB2YXIgY2hpbGRPYmplY3QgPSBldmFsT2JqZWN0KHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgdmFyIHZhbHVlID0gZXZhbFZhbHVlKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgdmFyIGluZGV4ID0gZXZhbEluZGV4KHNjb3BlLCBhcmdzLCBjaGlsZE9iamVjdCk7IC8vIEltcG9ydGFudDogIHdlIHBhc3MgY2hpbGRPYmplY3QgaW5zdGVhZCBvZiBjb250ZXh0XG5cbiAgICAgICAgKDAsIF9jdXN0b21zLnNldFNhZmVQcm9wZXJ0eSkoc2NvcGUsIG5hbWUsIGFzc2lnbihjaGlsZE9iamVjdCwgaW5kZXgsIHZhbHVlKSk7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGlzQWNjZXNzb3JOb2RlKG5vZGUub2JqZWN0KSA9PT0gdHJ1ZVxuICAgICAgLy8gdXBkYXRlIGEgbWF0cml4IHN1YnNldCwgZm9yIGV4YW1wbGUgYGEuYlsyXT0zYFxuICAgICAgLy8gd2Ugd2lsbCBub3QgdXNlIHRoZSBjb21waWxlIGZ1bmN0aW9uIG9mIHRoZSBBY2Nlc3Nvck5vZGUsIGJ1dCBjb21waWxlIGl0XG4gICAgICAvLyBvdXJzZWx2ZXMgaGVyZSBhcyB3ZSBuZWVkIHRoZSBwYXJlbnQgb2JqZWN0IG9mIHRoZSBBY2Nlc3Nvck5vZGU6XG4gICAgICAvLyB3ZWUgbmVlZCB0byBhcHBseSB0aGUgdXBkYXRlZCBvYmplY3QgdG8gcGFyZW50IG9iamVjdFxuICAgICAgdmFyIGV2YWxQYXJlbnRPYmplY3QgPSB0aGlzLm9iamVjdC5vYmplY3QuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgICBpZiAodGhpcy5vYmplY3QuaW5kZXguaXNPYmplY3RQcm9wZXJ0eSgpKSB7XG4gICAgICAgIHZhciBwYXJlbnRQcm9wID0gdGhpcy5vYmplY3QuaW5kZXguZ2V0T2JqZWN0UHJvcGVydHkoKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBc3NpZ25tZW50Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICAgIHZhciBwYXJlbnQgPSBldmFsUGFyZW50T2JqZWN0KHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgICB2YXIgY2hpbGRPYmplY3QgPSAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShwYXJlbnQsIHBhcmVudFByb3ApO1xuICAgICAgICAgIHZhciBpbmRleCA9IGV2YWxJbmRleChzY29wZSwgYXJncywgY2hpbGRPYmplY3QpOyAvLyBJbXBvcnRhbnQ6IHdlIHBhc3MgY2hpbGRPYmplY3QgaW5zdGVhZCBvZiBjb250ZXh0XG5cbiAgICAgICAgICB2YXIgdmFsdWUgPSBldmFsVmFsdWUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICAgICgwLCBfY3VzdG9tcy5zZXRTYWZlUHJvcGVydHkpKHBhcmVudCwgcGFyZW50UHJvcCwgYXNzaWduKGNoaWxkT2JqZWN0LCBpbmRleCwgdmFsdWUpKTtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpZiBzb21lIHBhcmFtZXRlcnMgdXNlIHRoZSAnZW5kJyBwYXJhbWV0ZXIsIHdlIG5lZWQgdG8gY2FsY3VsYXRlIHRoZSBzaXplXG4gICAgICAgIHZhciBldmFsUGFyZW50SW5kZXggPSB0aGlzLm9iamVjdC5pbmRleC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBc3NpZ25tZW50Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICAgIHZhciBwYXJlbnQgPSBldmFsUGFyZW50T2JqZWN0KHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgICB2YXIgcGFyZW50SW5kZXggPSBldmFsUGFyZW50SW5kZXgoc2NvcGUsIGFyZ3MsIHBhcmVudCk7IC8vIEltcG9ydGFudDogd2UgcGFzcyBwYXJlbnQgaW5zdGVhZCBvZiBjb250ZXh0XG5cbiAgICAgICAgICB2YXIgY2hpbGRPYmplY3QgPSBhY2Nlc3MocGFyZW50LCBwYXJlbnRJbmRleCk7XG4gICAgICAgICAgdmFyIGluZGV4ID0gZXZhbEluZGV4KHNjb3BlLCBhcmdzLCBjaGlsZE9iamVjdCk7IC8vIEltcG9ydGFudDogIHdlIHBhc3MgY2hpbGRPYmplY3QgaW5zdGVhZCBvZiBjb250ZXh0XG5cbiAgICAgICAgICB2YXIgdmFsdWUgPSBldmFsVmFsdWUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICAgIGFzc2lnbihwYXJlbnQsIHBhcmVudEluZGV4LCBhc3NpZ24oY2hpbGRPYmplY3QsIGluZGV4LCB2YWx1ZSkpO1xuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayh0aGlzLm9iamVjdCwgJ29iamVjdCcsIHRoaXMpO1xuXG4gICAgaWYgKHRoaXMuaW5kZXgpIHtcbiAgICAgIGNhbGxiYWNrKHRoaXMuaW5kZXgsICdpbmRleCcsIHRoaXMpO1xuICAgIH1cblxuICAgIGNhbGxiYWNrKHRoaXMudmFsdWUsICd2YWx1ZScsIHRoaXMpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEFzc2lnbm1lbnROb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtBc3NpZ25tZW50Tm9kZX0gUmV0dXJucyBhIHRyYW5zZm9ybWVkIGNvcHkgb2YgdGhlIG5vZGVcbiAgICovXG5cblxuICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIG9iamVjdCA9IHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLm9iamVjdCwgJ29iamVjdCcsIHRoaXMpKTtcblxuICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXggPyB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5pbmRleCwgJ2luZGV4JywgdGhpcykpIDogbnVsbDtcblxuICAgIHZhciB2YWx1ZSA9IHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLnZhbHVlLCAndmFsdWUnLCB0aGlzKSk7XG5cbiAgICByZXR1cm4gbmV3IEFzc2lnbm1lbnROb2RlKG9iamVjdCwgaW5kZXgsIHZhbHVlKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7QXNzaWdubWVudE5vZGV9XG4gICAqL1xuXG5cbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgQXNzaWdubWVudE5vZGUodGhpcy5vYmplY3QsIHRoaXMuaW5kZXgsIHRoaXMudmFsdWUpO1xuICB9O1xuICAvKlxuICAgKiBJcyBwYXJlbnRoZXNpcyBuZWVkZWQ/XG4gICAqIEBwYXJhbSB7bm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcmVudGhlc2lzPSdrZWVwJ11cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBuZWVkUGFyZW50aGVzaXMobm9kZSwgcGFyZW50aGVzaXMpIHtcbiAgICBpZiAoIXBhcmVudGhlc2lzKSB7XG4gICAgICBwYXJlbnRoZXNpcyA9ICdrZWVwJztcbiAgICB9XG5cbiAgICB2YXIgcHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKG5vZGUsIHBhcmVudGhlc2lzKTtcbiAgICB2YXIgZXhwclByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShub2RlLnZhbHVlLCBwYXJlbnRoZXNpcyk7XG4gICAgcmV0dXJuIHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCBleHByUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiBleHByUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqZWN0ID0gdGhpcy5vYmplY3QudG9TdHJpbmcob3B0aW9ucyk7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleCA/IHRoaXMuaW5kZXgudG9TdHJpbmcob3B0aW9ucykgOiAnJztcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlLnRvU3RyaW5nKG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLCBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMpKSB7XG4gICAgICB2YWx1ZSA9ICcoJyArIHZhbHVlICsgJyknO1xuICAgIH1cblxuICAgIHJldHVybiBvYmplY3QgKyBpbmRleCArICcgPSAnICsgdmFsdWU7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnQXNzaWdubWVudE5vZGUnLFxuICAgICAgb2JqZWN0OiB0aGlzLm9iamVjdCxcbiAgICAgIGluZGV4OiB0aGlzLmluZGV4LFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWVcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYW4gQXNzaWdubWVudE5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkFzc2lnbm1lbnROb2RlXCIsIG9iamVjdDogLi4uLCBpbmRleDogLi4uLCB2YWx1ZTogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0Fzc2lnbm1lbnROb2RlfVxuICAgKi9cblxuXG4gIEFzc2lnbm1lbnROb2RlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IEFzc2lnbm1lbnROb2RlKGpzb24ub2JqZWN0LCBqc29uLmluZGV4LCBqc29uLnZhbHVlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBIVE1MIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqZWN0ID0gdGhpcy5vYmplY3QudG9IVE1MKG9wdGlvbnMpO1xuICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXggPyB0aGlzLmluZGV4LnRvSFRNTChvcHRpb25zKSA6ICcnO1xuICAgIHZhciB2YWx1ZSA9IHRoaXMudmFsdWUudG9IVE1MKG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLCBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMpKSB7XG4gICAgICB2YWx1ZSA9ICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyYW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIHZhbHVlICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJhbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgIH1cblxuICAgIHJldHVybiBvYmplY3QgKyBpbmRleCArICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1hc3NpZ25tZW50LW9wZXJhdG9yIG1hdGgtdmFyaWFibGUtYXNzaWdubWVudC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvclwiPj08L3NwYW4+JyArIHZhbHVlO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqZWN0ID0gdGhpcy5vYmplY3QudG9UZXgob3B0aW9ucyk7XG4gICAgdmFyIGluZGV4ID0gdGhpcy5pbmRleCA/IHRoaXMuaW5kZXgudG9UZXgob3B0aW9ucykgOiAnJztcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlLnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLCBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMpKSB7XG4gICAgICB2YWx1ZSA9IFwiXFxcXGxlZnQoXCIuY29uY2F0KHZhbHVlLCBcIlxcXFxyaWdodClcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdCArIGluZGV4ICsgJzo9JyArIHZhbHVlO1xuICB9O1xuXG4gIHJldHVybiBBc3NpZ25tZW50Tm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQXNzaWdubWVudE5vZGUgPSBjcmVhdGVBc3NpZ25tZW50Tm9kZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQmxvY2tOb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnQmxvY2tOb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ1Jlc3VsdFNldCcsICdOb2RlJ107XG52YXIgY3JlYXRlQmxvY2tOb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIFJlc3VsdFNldCA9IF9yZWYuUmVzdWx0U2V0LFxuICAgICAgTm9kZSA9IF9yZWYuTm9kZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIEJsb2NrTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICogSG9sZHMgYSBzZXQgd2l0aCBibG9ja3NcbiAgICogQHBhcmFtIHtBcnJheS48e25vZGU6IE5vZGV9IHwge25vZGU6IE5vZGUsIHZpc2libGU6IGJvb2xlYW59Pn0gYmxvY2tzXG4gICAqICAgICAgICAgICAgQW4gYXJyYXkgd2l0aCBibG9ja3MsIHdoZXJlIGEgYmxvY2sgaXMgY29uc3RydWN0ZWQgYXMgYW4gT2JqZWN0XG4gICAqICAgICAgICAgICAgd2l0aCBwcm9wZXJ0aWVzIGJsb2NrLCB3aGljaCBpcyBhIE5vZGUsIGFuZCB2aXNpYmxlLCB3aGljaCBpc1xuICAgKiAgICAgICAgICAgIGEgYm9vbGVhbi4gVGhlIHByb3BlcnR5IHZpc2libGUgaXMgb3B0aW9uYWwgYW5kIGlzIHRydWUgYnkgZGVmYXVsdFxuICAgKi9cbiAgZnVuY3Rpb24gQmxvY2tOb2RlKGJsb2Nrcykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBCbG9ja05vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH0gLy8gdmFsaWRhdGUgaW5wdXQsIGNvcHkgYmxvY2tzXG5cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShibG9ja3MpKSB0aHJvdyBuZXcgRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gICAgdGhpcy5ibG9ja3MgPSBibG9ja3MubWFwKGZ1bmN0aW9uIChibG9jaykge1xuICAgICAgdmFyIG5vZGUgPSBibG9jayAmJiBibG9jay5ub2RlO1xuICAgICAgdmFyIHZpc2libGUgPSBibG9jayAmJiBibG9jay52aXNpYmxlICE9PSB1bmRlZmluZWQgPyBibG9jay52aXNpYmxlIDogdHJ1ZTtcbiAgICAgIGlmICghKDAsIF9pcy5pc05vZGUpKG5vZGUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9wZXJ0eSBcIm5vZGVcIiBtdXN0IGJlIGEgTm9kZScpO1xuICAgICAgaWYgKHR5cGVvZiB2aXNpYmxlICE9PSAnYm9vbGVhbicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Byb3BlcnR5IFwidmlzaWJsZVwiIG11c3QgYmUgYSBib29sZWFuJyk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICB2aXNpYmxlOiB2aXNpYmxlXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgQmxvY2tOb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7XG4gIEJsb2NrTm9kZS5wcm90b3R5cGUudHlwZSA9ICdCbG9ja05vZGUnO1xuICBCbG9ja05vZGUucHJvdG90eXBlLmlzQmxvY2tOb2RlID0gdHJ1ZTtcbiAgLyoqXG4gICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLlxuICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuXG4gICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9sc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKilcbiAgICovXG5cbiAgQmxvY2tOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHZhciBldmFsQmxvY2tzID0gKDAsIF9hcnJheS5tYXApKHRoaXMuYmxvY2tzLCBmdW5jdGlvbiAoYmxvY2spIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGV2YWx1YXRlOiBibG9jay5ub2RlLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKSxcbiAgICAgICAgdmlzaWJsZTogYmxvY2sudmlzaWJsZVxuICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEJsb2NrTm9kZXMoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICAoMCwgX2FycmF5LmZvckVhY2gpKGV2YWxCbG9ja3MsIGZ1bmN0aW9uIGV2YWxCbG9ja05vZGUoYmxvY2spIHtcbiAgICAgICAgdmFyIHJlc3VsdCA9IGJsb2NrLmV2YWx1YXRlKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAoYmxvY2sudmlzaWJsZSkge1xuICAgICAgICAgIHJlc3VsdHMucHVzaChyZXN1bHQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUmVzdWx0U2V0KHJlc3VsdHMpO1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIGJsb2NrcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIEJsb2NrTm9kZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ibG9ja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNhbGxiYWNrKHRoaXMuYmxvY2tzW2ldLm5vZGUsICdibG9ja3NbJyArIGkgKyAnXS5ub2RlJywgdGhpcyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEJsb2NrTm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7QmxvY2tOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIEJsb2NrTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIGJsb2NrcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJsb2Nrcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGJsb2NrID0gdGhpcy5ibG9ja3NbaV07XG5cbiAgICAgIHZhciBub2RlID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKGJsb2NrLm5vZGUsICdibG9ja3NbJyArIGkgKyAnXS5ub2RlJywgdGhpcykpO1xuXG4gICAgICBibG9ja3NbaV0gPSB7XG4gICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgIHZpc2libGU6IGJsb2NrLnZpc2libGVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBCbG9ja05vZGUoYmxvY2tzKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7QmxvY2tOb2RlfVxuICAgKi9cblxuXG4gIEJsb2NrTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGJsb2NrcyA9IHRoaXMuYmxvY2tzLm1hcChmdW5jdGlvbiAoYmxvY2spIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5vZGU6IGJsb2NrLm5vZGUsXG4gICAgICAgIHZpc2libGU6IGJsb2NrLnZpc2libGVcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIG5ldyBCbG9ja05vZGUoYmxvY2tzKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgQmxvY2tOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmJsb2Nrcy5tYXAoZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICByZXR1cm4gcGFyYW0ubm9kZS50b1N0cmluZyhvcHRpb25zKSArIChwYXJhbS52aXNpYmxlID8gJycgOiAnOycpO1xuICAgIH0pLmpvaW4oJ1xcbicpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIEJsb2NrTm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdCbG9ja05vZGUnLFxuICAgICAgYmxvY2tzOiB0aGlzLmJsb2Nrc1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBCbG9ja05vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkJsb2NrTm9kZVwiLCBibG9ja3M6IFt7bm9kZTogLi4uLCB2aXNpYmxlOiBmYWxzZX0sIC4uLl19YCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG1hdGhqcyBpcyBvcHRpb25hbFxuICAgKiBAcmV0dXJucyB7QmxvY2tOb2RlfVxuICAgKi9cblxuXG4gIEJsb2NrTm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBCbG9ja05vZGUoanNvbi5ibG9ja3MpO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgQmxvY2tOb2RlLnByb3RvdHlwZS50b0hUTUwgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmJsb2Nrcy5tYXAoZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICByZXR1cm4gcGFyYW0ubm9kZS50b0hUTUwob3B0aW9ucykgKyAocGFyYW0udmlzaWJsZSA/ICcnIDogJzxzcGFuIGNsYXNzPVwibWF0aC1zZXBhcmF0b3JcIj47PC9zcGFuPicpO1xuICAgIH0pLmpvaW4oJzxzcGFuIGNsYXNzPVwibWF0aC1zZXBhcmF0b3JcIj48YnIgLz48L3NwYW4+Jyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBCbG9ja05vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMuYmxvY2tzLm1hcChmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHJldHVybiBwYXJhbS5ub2RlLnRvVGV4KG9wdGlvbnMpICsgKHBhcmFtLnZpc2libGUgPyAnJyA6ICc7Jyk7XG4gICAgfSkuam9pbignXFxcXDtcXFxcO1xcbicpO1xuICB9O1xuXG4gIHJldHVybiBCbG9ja05vZGU7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWUsXG4gIGlzTm9kZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJsb2NrTm9kZSA9IGNyZWF0ZUJsb2NrTm9kZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29uZGl0aW9uYWxOb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9vcGVyYXRvcnMgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzXCIpO1xuXG52YXIgbmFtZSA9ICdDb25kaXRpb25hbE5vZGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnTm9kZSddO1xudmFyIGNyZWF0ZUNvbmRpdGlvbmFsTm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBOb2RlID0gX3JlZi5Ob2RlO1xuXG4gIC8qKlxuICAgKiBBIGxhenkgZXZhbHVhdGluZyBjb25kaXRpb25hbCBvcGVyYXRvcjogJ2NvbmRpdGlvbiA/IHRydWVFeHByIDogZmFsc2VFeHByJ1xuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IGNvbmRpdGlvbiAgIENvbmRpdGlvbiwgbXVzdCByZXN1bHQgaW4gYSBib29sZWFuXG4gICAqIEBwYXJhbSB7Tm9kZX0gdHJ1ZUV4cHIgICAgRXhwcmVzc2lvbiBldmFsdWF0ZWQgd2hlbiBjb25kaXRpb24gaXMgdHJ1ZVxuICAgKiBAcGFyYW0ge05vZGV9IGZhbHNlRXhwciAgIEV4cHJlc3Npb24gZXZhbHVhdGVkIHdoZW4gY29uZGl0aW9uIGlzIHRydWVcbiAgICpcbiAgICogQGNvbnN0cnVjdG9yIENvbmRpdGlvbmFsTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICovXG4gIGZ1bmN0aW9uIENvbmRpdGlvbmFsTm9kZShjb25kaXRpb24sIHRydWVFeHByLCBmYWxzZUV4cHIpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ29uZGl0aW9uYWxOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShjb25kaXRpb24pKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgY29uZGl0aW9uIG11c3QgYmUgYSBOb2RlJyk7XG4gICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkodHJ1ZUV4cHIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgdHJ1ZUV4cHIgbXVzdCBiZSBhIE5vZGUnKTtcbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShmYWxzZUV4cHIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgZmFsc2VFeHByIG11c3QgYmUgYSBOb2RlJyk7XG4gICAgdGhpcy5jb25kaXRpb24gPSBjb25kaXRpb247XG4gICAgdGhpcy50cnVlRXhwciA9IHRydWVFeHByO1xuICAgIHRoaXMuZmFsc2VFeHByID0gZmFsc2VFeHByO1xuICB9XG5cbiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7XG4gIENvbmRpdGlvbmFsTm9kZS5wcm90b3R5cGUudHlwZSA9ICdDb25kaXRpb25hbE5vZGUnO1xuICBDb25kaXRpb25hbE5vZGUucHJvdG90eXBlLmlzQ29uZGl0aW9uYWxOb2RlID0gdHJ1ZTtcbiAgLyoqXG4gICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLlxuICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuXG4gICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9sc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKilcbiAgICovXG5cbiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHZhciBldmFsQ29uZGl0aW9uID0gdGhpcy5jb25kaXRpb24uX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgdmFyIGV2YWxUcnVlRXhwciA9IHRoaXMudHJ1ZUV4cHIuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgdmFyIGV2YWxGYWxzZUV4cHIgPSB0aGlzLmZhbHNlRXhwci5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gZXZhbENvbmRpdGlvbmFsTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgcmV0dXJuIHRlc3RDb25kaXRpb24oZXZhbENvbmRpdGlvbihzY29wZSwgYXJncywgY29udGV4dCkpID8gZXZhbFRydWVFeHByKHNjb3BlLCBhcmdzLCBjb250ZXh0KSA6IGV2YWxGYWxzZUV4cHIoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2sodGhpcy5jb25kaXRpb24sICdjb25kaXRpb24nLCB0aGlzKTtcbiAgICBjYWxsYmFjayh0aGlzLnRydWVFeHByLCAndHJ1ZUV4cHInLCB0aGlzKTtcbiAgICBjYWxsYmFjayh0aGlzLmZhbHNlRXhwciwgJ2ZhbHNlRXhwcicsIHRoaXMpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IENvbmRpdGlvbmFsTm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7Q29uZGl0aW9uYWxOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIENvbmRpdGlvbmFsTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIG5ldyBDb25kaXRpb25hbE5vZGUodGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuY29uZGl0aW9uLCAnY29uZGl0aW9uJywgdGhpcykpLCB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy50cnVlRXhwciwgJ3RydWVFeHByJywgdGhpcykpLCB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5mYWxzZUV4cHIsICdmYWxzZUV4cHInLCB0aGlzKSkpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhpcyBub2RlLCBhIHNoYWxsb3cgY29weVxuICAgKiBAcmV0dXJuIHtDb25kaXRpb25hbE5vZGV9XG4gICAqL1xuXG5cbiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IENvbmRpdGlvbmFsTm9kZSh0aGlzLmNvbmRpdGlvbiwgdGhpcy50cnVlRXhwciwgdGhpcy5mYWxzZUV4cHIpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIENvbmRpdGlvbmFsTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBwcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcywgcGFyZW50aGVzaXMpOyAvLyBFbmNsb3NlIEFyZ3VtZW50cyBpbiBwYXJlbnRoZXNlcyBpZiB0aGV5IGFyZSBhbiBPcGVyYXRvck5vZGVcbiAgICAvLyBvciBoYXZlIGxvd2VyIG9yIGVxdWFsIHByZWNlZGVuY2VcbiAgICAvLyBOT1RFOiBlbmNsb3NpbmcgYWxsIE9wZXJhdG9yTm9kZXMgaW4gcGFyZW50aGVzZXMgaXMgYSBkZWNpc2lvblxuICAgIC8vIHB1cmVseSBiYXNlZCBvbiBhZXN0aGV0aWNzIGFuZCByZWFkYWJpbGl0eVxuXG4gICAgdmFyIGNvbmRpdGlvbiA9IHRoaXMuY29uZGl0aW9uLnRvU3RyaW5nKG9wdGlvbnMpO1xuICAgIHZhciBjb25kaXRpb25QcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcy5jb25kaXRpb24sIHBhcmVudGhlc2lzKTtcblxuICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgdGhpcy5jb25kaXRpb24udHlwZSA9PT0gJ09wZXJhdG9yTm9kZScgfHwgY29uZGl0aW9uUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiBjb25kaXRpb25QcmVjZWRlbmNlIDw9IHByZWNlZGVuY2UpIHtcbiAgICAgIGNvbmRpdGlvbiA9ICcoJyArIGNvbmRpdGlvbiArICcpJztcbiAgICB9XG5cbiAgICB2YXIgdHJ1ZUV4cHIgPSB0aGlzLnRydWVFeHByLnRvU3RyaW5nKG9wdGlvbnMpO1xuICAgIHZhciB0cnVlUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKHRoaXMudHJ1ZUV4cHIsIHBhcmVudGhlc2lzKTtcblxuICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgdGhpcy50cnVlRXhwci50eXBlID09PSAnT3BlcmF0b3JOb2RlJyB8fCB0cnVlUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiB0cnVlUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlKSB7XG4gICAgICB0cnVlRXhwciA9ICcoJyArIHRydWVFeHByICsgJyknO1xuICAgIH1cblxuICAgIHZhciBmYWxzZUV4cHIgPSB0aGlzLmZhbHNlRXhwci50b1N0cmluZyhvcHRpb25zKTtcbiAgICB2YXIgZmFsc2VQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcy5mYWxzZUV4cHIsIHBhcmVudGhlc2lzKTtcblxuICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgdGhpcy5mYWxzZUV4cHIudHlwZSA9PT0gJ09wZXJhdG9yTm9kZScgfHwgZmFsc2VQcmVjZWRlbmNlICE9PSBudWxsICYmIGZhbHNlUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlKSB7XG4gICAgICBmYWxzZUV4cHIgPSAnKCcgKyBmYWxzZUV4cHIgKyAnKSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmRpdGlvbiArICcgPyAnICsgdHJ1ZUV4cHIgKyAnIDogJyArIGZhbHNlRXhwcjtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBDb25kaXRpb25hbE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnQ29uZGl0aW9uYWxOb2RlJyxcbiAgICAgIGNvbmRpdGlvbjogdGhpcy5jb25kaXRpb24sXG4gICAgICB0cnVlRXhwcjogdGhpcy50cnVlRXhwcixcbiAgICAgIGZhbHNlRXhwcjogdGhpcy5mYWxzZUV4cHJcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYW4gQ29uZGl0aW9uYWxOb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJDb25kaXRpb25hbE5vZGVcIiwgXCJjb25kaXRpb25cIjogLi4uLCBcInRydWVFeHByXCI6IC4uLiwgXCJmYWxzZUV4cHJcIjogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0NvbmRpdGlvbmFsTm9kZX1cbiAgICovXG5cblxuICBDb25kaXRpb25hbE5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgQ29uZGl0aW9uYWxOb2RlKGpzb24uY29uZGl0aW9uLCBqc29uLnRydWVFeHByLCBqc29uLmZhbHNlRXhwcik7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIENvbmRpdGlvbmFsTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBwcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcywgcGFyZW50aGVzaXMpOyAvLyBFbmNsb3NlIEFyZ3VtZW50cyBpbiBwYXJlbnRoZXNlcyBpZiB0aGV5IGFyZSBhbiBPcGVyYXRvck5vZGVcbiAgICAvLyBvciBoYXZlIGxvd2VyIG9yIGVxdWFsIHByZWNlZGVuY2VcbiAgICAvLyBOT1RFOiBlbmNsb3NpbmcgYWxsIE9wZXJhdG9yTm9kZXMgaW4gcGFyZW50aGVzZXMgaXMgYSBkZWNpc2lvblxuICAgIC8vIHB1cmVseSBiYXNlZCBvbiBhZXN0aGV0aWNzIGFuZCByZWFkYWJpbGl0eVxuXG4gICAgdmFyIGNvbmRpdGlvbiA9IHRoaXMuY29uZGl0aW9uLnRvSFRNTChvcHRpb25zKTtcbiAgICB2YXIgY29uZGl0aW9uUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKHRoaXMuY29uZGl0aW9uLCBwYXJlbnRoZXNpcyk7XG5cbiAgICBpZiAocGFyZW50aGVzaXMgPT09ICdhbGwnIHx8IHRoaXMuY29uZGl0aW9uLnR5cGUgPT09ICdPcGVyYXRvck5vZGUnIHx8IGNvbmRpdGlvblByZWNlZGVuY2UgIT09IG51bGwgJiYgY29uZGl0aW9uUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlKSB7XG4gICAgICBjb25kaXRpb24gPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBjb25kaXRpb24gKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgdmFyIHRydWVFeHByID0gdGhpcy50cnVlRXhwci50b0hUTUwob3B0aW9ucyk7XG4gICAgdmFyIHRydWVQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcy50cnVlRXhwciwgcGFyZW50aGVzaXMpO1xuXG4gICAgaWYgKHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCB0aGlzLnRydWVFeHByLnR5cGUgPT09ICdPcGVyYXRvck5vZGUnIHx8IHRydWVQcmVjZWRlbmNlICE9PSBudWxsICYmIHRydWVQcmVjZWRlbmNlIDw9IHByZWNlZGVuY2UpIHtcbiAgICAgIHRydWVFeHByID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgdHJ1ZUV4cHIgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgdmFyIGZhbHNlRXhwciA9IHRoaXMuZmFsc2VFeHByLnRvSFRNTChvcHRpb25zKTtcbiAgICB2YXIgZmFsc2VQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcy5mYWxzZUV4cHIsIHBhcmVudGhlc2lzKTtcblxuICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgdGhpcy5mYWxzZUV4cHIudHlwZSA9PT0gJ09wZXJhdG9yTm9kZScgfHwgZmFsc2VQcmVjZWRlbmNlICE9PSBudWxsICYmIGZhbHNlUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlKSB7XG4gICAgICBmYWxzZUV4cHIgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBmYWxzZUV4cHIgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmRpdGlvbiArICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1jb25kaXRpb25hbC1vcGVyYXRvclwiPj88L3NwYW4+JyArIHRydWVFeHByICsgJzxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLWNvbmRpdGlvbmFsLW9wZXJhdG9yXCI+Ojwvc3Bhbj4nICsgZmFsc2VFeHByO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZS5fdG9UZXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHJldHVybiAnXFxcXGJlZ2lue2Nhc2VzfSB7JyArIHRoaXMudHJ1ZUV4cHIudG9UZXgob3B0aW9ucykgKyAnfSwgJlxcXFxxdWFke1xcXFx0ZXh0e2lmIH1cXFxcOycgKyB0aGlzLmNvbmRpdGlvbi50b1RleChvcHRpb25zKSArICd9XFxcXFxcXFx7JyArIHRoaXMuZmFsc2VFeHByLnRvVGV4KG9wdGlvbnMpICsgJ30sICZcXFxccXVhZHtcXFxcdGV4dHtvdGhlcndpc2V9fVxcXFxlbmR7Y2FzZXN9JztcbiAgfTtcbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciBhIGNvbmRpdGlvbiBpcyBtZXRcbiAgICogQHBhcmFtIHsqfSBjb25kaXRpb25cbiAgICogQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgY29uZGl0aW9uIGlzIHRydWUgb3Igbm9uLXplcm8sIGVsc2UgZmFsc2VcbiAgICovXG5cblxuICBmdW5jdGlvbiB0ZXN0Q29uZGl0aW9uKGNvbmRpdGlvbikge1xuICAgIGlmICh0eXBlb2YgY29uZGl0aW9uID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgY29uZGl0aW9uID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIGNvbmRpdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiAhIWNvbmRpdGlvbjtcbiAgICB9XG5cbiAgICBpZiAoY29uZGl0aW9uKSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikoY29uZGl0aW9uKSkge1xuICAgICAgICByZXR1cm4gIWNvbmRpdGlvbi5pc1plcm8oKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfaXMuaXNDb21wbGV4KShjb25kaXRpb24pKSB7XG4gICAgICAgIHJldHVybiAhIShjb25kaXRpb24ucmUgfHwgY29uZGl0aW9uLmltKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfaXMuaXNVbml0KShjb25kaXRpb24pKSB7XG4gICAgICAgIHJldHVybiAhIWNvbmRpdGlvbi52YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29uZGl0aW9uID09PSBudWxsIHx8IGNvbmRpdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5zdXBwb3J0ZWQgdHlwZSBvZiBjb25kaXRpb24gXCInICsgKDAsIF9pcy50eXBlT2YpKGNvbmRpdGlvbikgKyAnXCInKTtcbiAgfVxuXG4gIHJldHVybiBDb25kaXRpb25hbE5vZGU7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWUsXG4gIGlzTm9kZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbmRpdGlvbmFsTm9kZSA9IGNyZWF0ZUNvbmRpdGlvbmFsTm9kZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29uc3RhbnROb2RlID0gdm9pZCAwO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfbGF0ZXggPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbGF0ZXhcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdDb25zdGFudE5vZGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnTm9kZSddO1xudmFyIGNyZWF0ZUNvbnN0YW50Tm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBOb2RlID0gX3JlZi5Ob2RlO1xuXG4gIC8qKlxuICAgKiBBIENvbnN0YW50Tm9kZSBob2xkcyBhIGNvbnN0YW50IHZhbHVlIGxpa2UgYSBudW1iZXIgb3Igc3RyaW5nLlxuICAgKlxuICAgKiBVc2FnZTpcbiAgICpcbiAgICogICAgIG5ldyBDb25zdGFudE5vZGUoMi4zKVxuICAgKiAgICAgbmV3IENvbnN0YW50Tm9kZSgnaGVsbG8nKVxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlICAgIFZhbHVlIGNhbiBiZSBhbnkgdHlwZSAobnVtYmVyLCBCaWdOdW1iZXIsIHN0cmluZywgLi4uKVxuICAgKiBAY29uc3RydWN0b3IgQ29uc3RhbnROb2RlXG4gICAqIEBleHRlbmRzIHtOb2RlfVxuICAgKi9cbiAgZnVuY3Rpb24gQ29uc3RhbnROb2RlKHZhbHVlKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIENvbnN0YW50Tm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIHtcbiAgICAgIC8vIFRPRE86IHJlbW92ZSBkZXByZWNhdGlvbiBlcnJvciBzb21lIGRheSAoY3JlYXRlZCAyMDE4LTAxLTIzKVxuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCduZXcgQ29uc3RhbnROb2RlKHZhbHVlU3RyLCB2YWx1ZVR5cGUpIGlzIG5vdCBzdXBwb3J0ZWQgYW55bW9yZSBzaW5jZSBtYXRoIHY0LjAuMC4gVXNlIG5ldyBDb25zdGFudE5vZGUodmFsdWUpIGluc3RlYWQsIHdoZXJlIHZhbHVlIGlzIGEgbm9uLXN0cmluZ2lmaWVkIHZhbHVlLicpO1xuICAgIH1cblxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIENvbnN0YW50Tm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBDb25zdGFudE5vZGUucHJvdG90eXBlLnR5cGUgPSAnQ29uc3RhbnROb2RlJztcbiAgQ29uc3RhbnROb2RlLnByb3RvdHlwZS5pc0NvbnN0YW50Tm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIENvbnN0YW50Tm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIHJldHVybiBmdW5jdGlvbiBldmFsQ29uc3RhbnROb2RlKCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgQ29uc3RhbnROb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7fSAvLyBub3RoaW5nIHRvIGRvLCB3ZSBkb24ndCBoYXZlIGNoaWxkc1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgQ29uc3RhbnROb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSkgOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7Q29uc3RhbnROb2RlfSBSZXR1cm5zIGEgY2xvbmUgb2YgdGhlIG5vZGVcbiAgICovXG4gIDtcblxuICBDb25zdGFudE5vZGUucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge0NvbnN0YW50Tm9kZX1cbiAgICovXG5cblxuICBDb25zdGFudE5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKHRoaXMudmFsdWUpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIENvbnN0YW50Tm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKDAsIF9zdHJpbmcuZm9ybWF0KSh0aGlzLnZhbHVlLCBvcHRpb25zKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBIVE1MIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgQ29uc3RhbnROb2RlLnByb3RvdHlwZS50b0hUTUwgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciB2YWx1ZSA9IHRoaXMuX3RvU3RyaW5nKG9wdGlvbnMpO1xuXG4gICAgc3dpdGNoICgoMCwgX2lzLnR5cGVPZikodGhpcy52YWx1ZSkpIHtcbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdCaWdOdW1iZXInOlxuICAgICAgY2FzZSAnRnJhY3Rpb24nOlxuICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1udW1iZXJcIj4nICsgdmFsdWUgKyAnPC9zcGFuPic7XG5cbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLXN0cmluZ1wiPicgKyB2YWx1ZSArICc8L3NwYW4+JztcblxuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLWJvb2xlYW5cIj4nICsgdmFsdWUgKyAnPC9zcGFuPic7XG5cbiAgICAgIGNhc2UgJ251bGwnOlxuICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1udWxsLXN5bWJvbFwiPicgKyB2YWx1ZSArICc8L3NwYW4+JztcblxuICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtdW5kZWZpbmVkXCI+JyArIHZhbHVlICsgJzwvc3Bhbj4nO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1zeW1ib2xcIj4nICsgdmFsdWUgKyAnPC9zcGFuPic7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIENvbnN0YW50Tm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdDb25zdGFudE5vZGUnLFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWVcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYSBDb25zdGFudE5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlN5bWJvbE5vZGVcIiwgdmFsdWU6IDIuM31gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtDb25zdGFudE5vZGV9XG4gICAqL1xuXG5cbiAgQ29uc3RhbnROb2RlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShqc29uLnZhbHVlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBMYVRlWCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIENvbnN0YW50Tm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLl90b1N0cmluZyhvcHRpb25zKTtcblxuICAgIHN3aXRjaCAoKDAsIF9pcy50eXBlT2YpKHRoaXMudmFsdWUpKSB7XG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICByZXR1cm4gJ1xcXFxtYXRodHR7JyArICgwLCBfbGF0ZXguZXNjYXBlTGF0ZXgpKHZhbHVlKSArICd9JztcblxuICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgIGNhc2UgJ0JpZ051bWJlcic6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAoIWlzRmluaXRlKHRoaXMudmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS52YWx1ZU9mKCkgPCAwID8gJy1cXFxcaW5mdHknIDogJ1xcXFxpbmZ0eSc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGluZGV4ID0gdmFsdWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdlJyk7XG5cbiAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKDAsIGluZGV4KSArICdcXFxcY2RvdDEwXnsnICsgdmFsdWUuc3Vic3RyaW5nKGluZGV4ICsgMSkgKyAnfSc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcblxuICAgICAgY2FzZSAnRnJhY3Rpb24nOlxuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZS50b0xhdGV4KCk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIENvbnN0YW50Tm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29uc3RhbnROb2RlID0gY3JlYXRlQ29uc3RhbnROb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVGdW5jdGlvbkFzc2lnbm1lbnROb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2tleXdvcmRzID0gcmVxdWlyZShcIi4uL2tleXdvcmRzXCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfbGF0ZXggPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbGF0ZXhcIik7XG5cbnZhciBfb3BlcmF0b3JzID0gcmVxdWlyZShcIi4uL29wZXJhdG9yc1wiKTtcblxudmFyIF9jdXN0b21zID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2N1c3RvbXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdGdW5jdGlvbkFzc2lnbm1lbnROb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ05vZGUnXTtcbnZhciBjcmVhdGVGdW5jdGlvbkFzc2lnbm1lbnROb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIE5vZGUgPSBfcmVmLk5vZGU7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBGdW5jdGlvbkFzc2lnbm1lbnROb2RlXG4gICAqIEBleHRlbmRzIHtOb2RlfVxuICAgKiBGdW5jdGlvbiBhc3NpZ25tZW50XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lICAgICAgICAgICBGdW5jdGlvbiBuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nW10gfCBBcnJheS48e25hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nfT59IHBhcmFtc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkgd2l0aCBmdW5jdGlvbiBwYXJhbWV0ZXIgbmFtZXMsIG9yIGFuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSB3aXRoIG9iamVjdHMgY29udGFpbmluZyB0aGUgbmFtZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHR5cGUgb2YgdGhlIHBhcmFtZXRlclxuICAgKiBAcGFyYW0ge05vZGV9IGV4cHIgICAgICAgICAgICAgVGhlIGZ1bmN0aW9uIGV4cHJlc3Npb25cbiAgICovXG4gIGZ1bmN0aW9uIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUobmFtZSwgcGFyYW1zLCBleHByKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH0gLy8gdmFsaWRhdGUgaW5wdXRcblxuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykgdGhyb3cgbmV3IFR5cGVFcnJvcignU3RyaW5nIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJuYW1lXCInKTtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocGFyYW1zKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgY29udGFpbmluZyBzdHJpbmdzIG9yIG9iamVjdHMgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciBcInBhcmFtc1wiJyk7XG4gICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkoZXhwcikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vZGUgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciBcImV4cHJcIicpO1xuICAgIGlmIChuYW1lIGluIF9rZXl3b3Jkcy5rZXl3b3JkcykgdGhyb3cgbmV3IEVycm9yKCdJbGxlZ2FsIGZ1bmN0aW9uIG5hbWUsIFwiJyArIG5hbWUgKyAnXCIgaXMgYSByZXNlcnZlZCBrZXl3b3JkJyk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcy5tYXAoZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICByZXR1cm4gcGFyYW0gJiYgcGFyYW0ubmFtZSB8fCBwYXJhbTtcbiAgICB9KTtcbiAgICB0aGlzLnR5cGVzID0gcGFyYW1zLm1hcChmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIHJldHVybiBwYXJhbSAmJiBwYXJhbS50eXBlIHx8ICdhbnknO1xuICAgIH0pO1xuICAgIHRoaXMuZXhwciA9IGV4cHI7XG4gIH1cblxuICBGdW5jdGlvbkFzc2lnbm1lbnROb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7XG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnR5cGUgPSAnRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSc7XG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7XG4gICAgdmFyIGNoaWxkQXJnTmFtZXMgPSBPYmplY3QuY3JlYXRlKGFyZ05hbWVzKTtcbiAgICAoMCwgX2FycmF5LmZvckVhY2gpKHRoaXMucGFyYW1zLCBmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgIGNoaWxkQXJnTmFtZXNbcGFyYW1dID0gdHJ1ZTtcbiAgICB9KTsgLy8gY29tcGlsZSB0aGUgZnVuY3Rpb24gZXhwcmVzc2lvbiB3aXRoIHRoZSBjaGlsZCBhcmdzXG5cbiAgICB2YXIgZXZhbEV4cHIgPSB0aGlzLmV4cHIuX2NvbXBpbGUobWF0aCwgY2hpbGRBcmdOYW1lcyk7XG5cbiAgICB2YXIgbmFtZSA9IHRoaXMubmFtZTtcbiAgICB2YXIgcGFyYW1zID0gdGhpcy5wYXJhbXM7XG4gICAgdmFyIHNpZ25hdHVyZSA9ICgwLCBfYXJyYXkuam9pbikodGhpcy50eXBlcywgJywnKTtcbiAgICB2YXIgc3ludGF4ID0gbmFtZSArICcoJyArICgwLCBfYXJyYXkuam9pbikodGhpcy5wYXJhbXMsICcsICcpICsgJyknO1xuICAgIHJldHVybiBmdW5jdGlvbiBldmFsRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgdmFyIHNpZ25hdHVyZXMgPSB7fTtcblxuICAgICAgc2lnbmF0dXJlc1tzaWduYXR1cmVdID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgY2hpbGRBcmdzID0gT2JqZWN0LmNyZWF0ZShhcmdzKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGNoaWxkQXJnc1twYXJhbXNbaV1dID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGV2YWxFeHByKHNjb3BlLCBjaGlsZEFyZ3MsIGNvbnRleHQpO1xuICAgICAgfTtcblxuICAgICAgdmFyIGZuID0gdHlwZWQobmFtZSwgc2lnbmF0dXJlcyk7XG4gICAgICBmbi5zeW50YXggPSBzeW50YXg7XG4gICAgICAoMCwgX2N1c3RvbXMuc2V0U2FmZVByb3BlcnR5KShzY29wZSwgbmFtZSwgZm4pO1xuICAgICAgcmV0dXJuIGZuO1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrKHRoaXMuZXhwciwgJ2V4cHInLCB0aGlzKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBGdW5jdGlvbkFzc2lnbm1lbnROb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbkFzc2lnbm1lbnROb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciBleHByID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuZXhwciwgJ2V4cHInLCB0aGlzKSk7XG5cbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uQXNzaWdubWVudE5vZGUodGhpcy5uYW1lLCB0aGlzLnBhcmFtcy5zbGljZSgwKSwgZXhwcik7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge0Z1bmN0aW9uQXNzaWdubWVudE5vZGV9XG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKHRoaXMubmFtZSwgdGhpcy5wYXJhbXMuc2xpY2UoMCksIHRoaXMuZXhwcik7XG4gIH07XG4gIC8qKlxuICAgKiBJcyBwYXJlbnRoZXNpcyBuZWVkZWQ/XG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyZW50aGVzaXNcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBuZWVkUGFyZW50aGVzaXMobm9kZSwgcGFyZW50aGVzaXMpIHtcbiAgICB2YXIgcHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKG5vZGUsIHBhcmVudGhlc2lzKTtcbiAgICB2YXIgZXhwclByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShub2RlLmV4cHIsIHBhcmVudGhlc2lzKTtcbiAgICByZXR1cm4gcGFyZW50aGVzaXMgPT09ICdhbGwnIHx8IGV4cHJQcmVjZWRlbmNlICE9PSBudWxsICYmIGV4cHJQcmVjZWRlbmNlIDw9IHByZWNlZGVuY2U7XG4gIH1cbiAgLyoqXG4gICAqIGdldCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBGdW5jdGlvbkFzc2lnbm1lbnROb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBwYXJlbnRoZXNpcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA/IG9wdGlvbnMucGFyZW50aGVzaXMgOiAna2VlcCc7XG4gICAgdmFyIGV4cHIgPSB0aGlzLmV4cHIudG9TdHJpbmcob3B0aW9ucyk7XG5cbiAgICBpZiAobmVlZFBhcmVudGhlc2lzKHRoaXMsIHBhcmVudGhlc2lzKSkge1xuICAgICAgZXhwciA9ICcoJyArIGV4cHIgKyAnKSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubmFtZSArICcoJyArIHRoaXMucGFyYW1zLmpvaW4oJywgJykgKyAnKSA9ICcgKyBleHByO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdHlwZXMgPSB0aGlzLnR5cGVzO1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdGdW5jdGlvbkFzc2lnbm1lbnROb2RlJyxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIHBhcmFtczogdGhpcy5wYXJhbXMubWFwKGZ1bmN0aW9uIChwYXJhbSwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBwYXJhbSxcbiAgICAgICAgICB0eXBlOiB0eXBlc1tpbmRleF1cbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICAgZXhwcjogdGhpcy5leHByXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGFuIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkZ1bmN0aW9uQXNzaWdubWVudE5vZGVcIiwgbmFtZTogLi4uLCBwYXJhbXM6IC4uLiwgZXhwcjogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0Z1bmN0aW9uQXNzaWdubWVudE5vZGV9XG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKGpzb24ubmFtZSwganNvbi5wYXJhbXMsIGpzb24uZXhwcik7XG4gIH07XG4gIC8qKlxuICAgKiBnZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJztcbiAgICB2YXIgcGFyYW1zID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBwYXJhbXMucHVzaCgnPHNwYW4gY2xhc3M9XCJtYXRoLXN5bWJvbCBtYXRoLXBhcmFtZXRlclwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMucGFyYW1zW2ldKSArICc8L3NwYW4+Jyk7XG4gICAgfVxuXG4gICAgdmFyIGV4cHIgPSB0aGlzLmV4cHIudG9IVE1MKG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLCBwYXJlbnRoZXNpcykpIHtcbiAgICAgIGV4cHIgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBleHByICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgIH1cblxuICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLWZ1bmN0aW9uXCI+JyArICgwLCBfc3RyaW5nLmVzY2FwZSkodGhpcy5uYW1lKSArICc8L3NwYW4+JyArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIHBhcmFtcy5qb2luKCc8c3BhbiBjbGFzcz1cIm1hdGgtc2VwYXJhdG9yXCI+LDwvc3Bhbj4nKSArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPik8L3NwYW4+PHNwYW4gY2xhc3M9XCJtYXRoLW9wZXJhdG9yIG1hdGgtYXNzaWdubWVudC1vcGVyYXRvciBtYXRoLXZhcmlhYmxlLWFzc2lnbm1lbnQtb3BlcmF0b3IgbWF0aC1iaW5hcnktb3BlcmF0b3JcIj49PC9zcGFuPicgKyBleHByO1xuICB9O1xuICAvKipcbiAgICogZ2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBleHByID0gdGhpcy5leHByLnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLCBwYXJlbnRoZXNpcykpIHtcbiAgICAgIGV4cHIgPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChleHByLCBcIlxcXFxyaWdodClcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuICdcXFxcbWF0aHJteycgKyB0aGlzLm5hbWUgKyAnfVxcXFxsZWZ0KCcgKyB0aGlzLnBhcmFtcy5tYXAoX2xhdGV4LnRvU3ltYm9sKS5qb2luKCcsJykgKyAnXFxcXHJpZ2h0KTo9JyArIGV4cHI7XG4gIH07XG5cbiAgcmV0dXJuIEZ1bmN0aW9uQXNzaWdubWVudE5vZGU7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWUsXG4gIGlzTm9kZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZ1bmN0aW9uQXNzaWdubWVudE5vZGUgPSBjcmVhdGVGdW5jdGlvbkFzc2lnbm1lbnROb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVGdW5jdGlvbk5vZGUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2N1c3RvbXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY3VzdG9tc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbGF0ZXggPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbGF0ZXhcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxudmFyIG5hbWUgPSAnRnVuY3Rpb25Ob2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ21hdGgnLCAnTm9kZScsICdTeW1ib2xOb2RlJ107XG52YXIgY3JlYXRlRnVuY3Rpb25Ob2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIG1hdGggPSBfcmVmLm1hdGgsXG4gICAgICBOb2RlID0gX3JlZi5Ob2RlLFxuICAgICAgU3ltYm9sTm9kZSA9IF9yZWYuU3ltYm9sTm9kZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIEZ1bmN0aW9uTm9kZVxuICAgKiBAZXh0ZW5kcyB7Li9Ob2RlfVxuICAgKiBpbnZva2UgYSBsaXN0IHdpdGggYXJndW1lbnRzIG9uIGEgbm9kZVxuICAgKiBAcGFyYW0gey4vTm9kZSB8IHN0cmluZ30gZm4gTm9kZSByZXNvbHZpbmcgd2l0aCBhIGZ1bmN0aW9uIG9uIHdoaWNoIHRvIGludm9rZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFyZ3VtZW50cywgdHlwaWNhbGx5IGEgU3ltYm9Ob2RlIG9yIEFjY2Vzc29yTm9kZVxuICAgKiBAcGFyYW0gey4vTm9kZVtdfSBhcmdzXG4gICAqL1xuICBmdW5jdGlvbiBGdW5jdGlvbk5vZGUoZm4sIGFyZ3MpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnc3RyaW5nJykge1xuICAgICAgZm4gPSBuZXcgU3ltYm9sTm9kZShmbik7XG4gICAgfSAvLyB2YWxpZGF0ZSBpbnB1dFxuXG5cbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShmbikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vZGUgZXhwZWN0ZWQgYXMgcGFyYW1ldGVyIFwiZm5cIicpO1xuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFyZ3MpIHx8ICFhcmdzLmV2ZXJ5KF9pcy5pc05vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBjb250YWluaW5nIE5vZGVzIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJhcmdzXCInKTtcbiAgICB9XG5cbiAgICB0aGlzLmZuID0gZm47XG4gICAgdGhpcy5hcmdzID0gYXJncyB8fCBbXTsgLy8gcmVhZG9ubHkgcHJvcGVydHkgbmFtZVxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICduYW1lJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZuLm5hbWUgfHwgJyc7XG4gICAgICB9LmJpbmQodGhpcyksXG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldCgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYXNzaWduIGEgbmV3IG5hbWUsIG5hbWUgaXMgcmVhZC1vbmx5Jyk7XG4gICAgICB9XG4gICAgfSk7IC8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdjMsIHJlbW92ZSBzb21lIGRheVxuXG4gICAgdmFyIGRlcHJlY2F0ZWQgPSBmdW5jdGlvbiBkZXByZWNhdGVkKCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9wZXJ0eSBgRnVuY3Rpb25Ob2RlLm9iamVjdGAgaXMgZGVwcmVjYXRlZCwgdXNlIGBGdW5jdGlvbk5vZGUuZm5gIGluc3RlYWQnKTtcbiAgICB9O1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdvYmplY3QnLCB7XG4gICAgICBnZXQ6IGRlcHJlY2F0ZWQsXG4gICAgICBzZXQ6IGRlcHJlY2F0ZWRcbiAgICB9KTtcbiAgfVxuXG4gIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLnR5cGUgPSAnRnVuY3Rpb25Ob2RlJztcbiAgRnVuY3Rpb25Ob2RlLnByb3RvdHlwZS5pc0Z1bmN0aW9uTm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gdmFsaWQgRnVuY3Rpb25Ob2RlJyk7XG4gICAgfSAvLyBjb21waWxlIGFyZ3VtZW50c1xuXG5cbiAgICB2YXIgZXZhbEFyZ3MgPSAoMCwgX2FycmF5Lm1hcCkodGhpcy5hcmdzLCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICByZXR1cm4gYXJnLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcbiAgICB9KTtcblxuICAgIGlmICgoMCwgX2lzLmlzU3ltYm9sTm9kZSkodGhpcy5mbikpIHtcbiAgICAgIC8vIHdlIGNhbiBzdGF0aWNhbGx5IGRldGVybWluZSB3aGV0aGVyIHRoZSBmdW5jdGlvbiBoYXMgYW4gcmF3QXJncyBwcm9wZXJ0eVxuICAgICAgdmFyIF9uYW1lID0gdGhpcy5mbi5uYW1lO1xuICAgICAgdmFyIGZuID0gX25hbWUgaW4gbWF0aCA/ICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKG1hdGgsIF9uYW1lKSA6IHVuZGVmaW5lZDtcbiAgICAgIHZhciBpc1JhdyA9IHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyAmJiBmbi5yYXdBcmdzID09PSB0cnVlO1xuXG4gICAgICBpZiAoaXNSYXcpIHtcbiAgICAgICAgLy8gcGFzcyB1bmV2YWx1YXRlZCBwYXJhbWV0ZXJzIChub2RlcykgdG8gdGhlIGZ1bmN0aW9uXG4gICAgICAgIC8vIFwicmF3XCIgZXZhbHVhdGlvblxuICAgICAgICB2YXIgcmF3QXJncyA9IHRoaXMuYXJncztcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxGdW5jdGlvbk5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICByZXR1cm4gKF9uYW1lIGluIHNjb3BlID8gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkoc2NvcGUsIF9uYW1lKSA6IGZuKShyYXdBcmdzLCBtYXRoLCBfZXh0ZW5kcyh7fSwgc2NvcGUsIGFyZ3MpKTtcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFwicmVndWxhclwiIGV2YWx1YXRpb25cbiAgICAgICAgaWYgKGV2YWxBcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHZhciBldmFsQXJnMCA9IGV2YWxBcmdzWzBdO1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsRnVuY3Rpb25Ob2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gKF9uYW1lIGluIHNjb3BlID8gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkoc2NvcGUsIF9uYW1lKSA6IGZuKShldmFsQXJnMChzY29wZSwgYXJncywgY29udGV4dCkpO1xuICAgICAgICAgIH07XG4gICAgICAgIH0gZWxzZSBpZiAoZXZhbEFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgdmFyIF9ldmFsQXJnID0gZXZhbEFyZ3NbMF07XG4gICAgICAgICAgdmFyIGV2YWxBcmcxID0gZXZhbEFyZ3NbMV07XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxGdW5jdGlvbk5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiAoX25hbWUgaW4gc2NvcGUgPyAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShzY29wZSwgX25hbWUpIDogZm4pKF9ldmFsQXJnKHNjb3BlLCBhcmdzLCBjb250ZXh0KSwgZXZhbEFyZzEoc2NvcGUsIGFyZ3MsIGNvbnRleHQpKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsRnVuY3Rpb25Ob2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gKF9uYW1lIGluIHNjb3BlID8gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkoc2NvcGUsIF9uYW1lKSA6IGZuKS5hcHBseShudWxsLCAoMCwgX2FycmF5Lm1hcCkoZXZhbEFyZ3MsIGZ1bmN0aW9uIChldmFsQXJnKSB7XG4gICAgICAgICAgICAgIHJldHVybiBldmFsQXJnKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQWNjZXNzb3JOb2RlKSh0aGlzLmZuKSAmJiAoMCwgX2lzLmlzSW5kZXhOb2RlKSh0aGlzLmZuLmluZGV4KSAmJiB0aGlzLmZuLmluZGV4LmlzT2JqZWN0UHJvcGVydHkoKSkge1xuICAgICAgLy8gZXhlY3V0ZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgcmlnaHQgY29udGV4dDogdGhlIG9iamVjdCBvZiB0aGUgQWNjZXNzb3JOb2RlXG4gICAgICB2YXIgZXZhbE9iamVjdCA9IHRoaXMuZm4ub2JqZWN0Ll9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgICAgdmFyIHByb3AgPSB0aGlzLmZuLmluZGV4LmdldE9iamVjdFByb3BlcnR5KCk7XG4gICAgICB2YXIgX3Jhd0FyZ3MgPSB0aGlzLmFyZ3M7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEZ1bmN0aW9uTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICB2YXIgb2JqZWN0ID0gZXZhbE9iamVjdChzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgICgwLCBfY3VzdG9tcy52YWxpZGF0ZVNhZmVNZXRob2QpKG9iamVjdCwgcHJvcCk7XG4gICAgICAgIHZhciBpc1JhdyA9IG9iamVjdFtwcm9wXSAmJiBvYmplY3RbcHJvcF0ucmF3QXJncztcbiAgICAgICAgcmV0dXJuIGlzUmF3ID8gb2JqZWN0W3Byb3BdKF9yYXdBcmdzLCBtYXRoLCBfZXh0ZW5kcyh7fSwgc2NvcGUsIGFyZ3MpKSAvLyBcInJhd1wiIGV2YWx1YXRpb25cbiAgICAgICAgOiBvYmplY3RbcHJvcF0uYXBwbHkob2JqZWN0LCAoMCwgX2FycmF5Lm1hcCkoZXZhbEFyZ3MsIGZ1bmN0aW9uIChldmFsQXJnKSB7XG4gICAgICAgICAgLy8gXCJyZWd1bGFyXCIgZXZhbHVhdGlvblxuICAgICAgICAgIHJldHVybiBldmFsQXJnKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgfSkpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbm9kZS5mbi5pc0FjY2Vzc29yTm9kZSAmJiAhbm9kZS5mbi5pbmRleC5pc09iamVjdFByb3BlcnR5KClcbiAgICAgIC8vIHdlIGhhdmUgdG8gZHluYW1pY2FsbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGhhcyBhIHJhd0FyZ3MgcHJvcGVydHlcbiAgICAgIHZhciBldmFsRm4gPSB0aGlzLmZuLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgICAgdmFyIF9yYXdBcmdzMiA9IHRoaXMuYXJncztcbiAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsRnVuY3Rpb25Ob2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgIHZhciBmbiA9IGV2YWxGbihzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIHZhciBpc1JhdyA9IGZuICYmIGZuLnJhd0FyZ3M7XG4gICAgICAgIHJldHVybiBpc1JhdyA/IGZuKF9yYXdBcmdzMiwgbWF0aCwgX2V4dGVuZHMoe30sIHNjb3BlLCBhcmdzKSkgLy8gXCJyYXdcIiBldmFsdWF0aW9uXG4gICAgICAgIDogZm4uYXBwbHkoZm4sICgwLCBfYXJyYXkubWFwKShldmFsQXJncywgZnVuY3Rpb24gKGV2YWxBcmcpIHtcbiAgICAgICAgICAvLyBcInJlZ3VsYXJcIiBldmFsdWF0aW9uXG4gICAgICAgICAgcmV0dXJuIGV2YWxBcmcoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICB9KSk7XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2tcbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayh0aGlzLmZuLCAnZm4nLCB0aGlzKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjYWxsYmFjayh0aGlzLmFyZ3NbaV0sICdhcmdzWycgKyBpICsgJ10nLCB0aGlzKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgRnVuY3Rpb25Ob2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbk5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlXG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Ob2RlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICB2YXIgZm4gPSB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5mbiwgJ2ZuJywgdGhpcykpO1xuXG4gICAgdmFyIGFyZ3MgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuYXJnc1tpXSwgJ2FyZ3NbJyArIGkgKyAnXScsIHRoaXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZShmbiwgYXJncyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge0Z1bmN0aW9uTm9kZX1cbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb25Ob2RlKHRoaXMuZm4sIHRoaXMuYXJncy5zbGljZSgwKSk7XG4gIH07IC8vIGJhY2t1cCBOb2RlJ3MgdG9TdHJpbmcgZnVuY3Rpb25cbiAgLy8gQHByaXZhdGVcblxuXG4gIHZhciBub2RlVG9TdHJpbmcgPSBGdW5jdGlvbk5vZGUucHJvdG90eXBlLnRvU3RyaW5nO1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbi4gKHdyYXBwZXIgZnVuY3Rpb24pXG4gICAqIFRoaXMgb3ZlcnJpZGVzIHBhcnRzIG9mIE5vZGUncyB0b1N0cmluZyBmdW5jdGlvbi5cbiAgICogSWYgY2FsbGJhY2sgaXMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgY2FsbGJhY2tzLCBpdFxuICAgKiBjYWxscyB0aGUgY29ycmVjdCBjYWxsYmFjayBmb3IgdGhlIGN1cnJlbnQgbm9kZSxcbiAgICogb3RoZXJ3aXNlIGl0IGZhbGxzIGJhY2sgdG8gY2FsbGluZyBOb2RlJ3MgdG9TdHJpbmdcbiAgICogZnVuY3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqIEBvdmVycmlkZVxuICAgKi9cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgY3VzdG9tU3RyaW5nO1xuICAgIHZhciBuYW1lID0gdGhpcy5mbi50b1N0cmluZyhvcHRpb25zKTtcblxuICAgIGlmIChvcHRpb25zICYmIF90eXBlb2Yob3B0aW9ucy5oYW5kbGVyKSA9PT0gJ29iamVjdCcgJiYgKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG9wdGlvbnMuaGFuZGxlciwgbmFtZSkpIHtcbiAgICAgIC8vIGNhbGxiYWNrIGlzIGEgbWFwIG9mIGNhbGxiYWNrIGZ1bmN0aW9uc1xuICAgICAgY3VzdG9tU3RyaW5nID0gb3B0aW9ucy5oYW5kbGVyW25hbWVdKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY3VzdG9tU3RyaW5nICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGN1c3RvbVN0cmluZztcbiAgICB9IC8vIGZhbGwgYmFjayB0byBOb2RlJ3MgdG9TdHJpbmdcblxuXG4gICAgcmV0dXJuIG5vZGVUb1N0cmluZy5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgYXJncyA9IHRoaXMuYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgcmV0dXJuIGFyZy50b1N0cmluZyhvcHRpb25zKTtcbiAgICB9KTtcbiAgICB2YXIgZm4gPSAoMCwgX2lzLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkodGhpcy5mbikgPyAnKCcgKyB0aGlzLmZuLnRvU3RyaW5nKG9wdGlvbnMpICsgJyknIDogdGhpcy5mbi50b1N0cmluZyhvcHRpb25zKTsgLy8gZm9ybWF0IHRoZSBhcmd1bWVudHMgbGlrZSBcImFkZCgyLCA0LjIpXCJcblxuICAgIHJldHVybiBmbiArICcoJyArIGFyZ3Muam9pbignLCAnKSArICcpJztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnRnVuY3Rpb25Ob2RlJyxcbiAgICAgIGZuOiB0aGlzLmZuLFxuICAgICAgYXJnczogdGhpcy5hcmdzXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGFuIEFzc2lnbm1lbnROb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJGdW5jdGlvbk5vZGVcIiwgZm46IC4uLiwgYXJnczogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0Z1bmN0aW9uTm9kZX1cbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb25Ob2RlKGpzb24uZm4sIGpzb24uYXJncyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgYXJncyA9IHRoaXMuYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgcmV0dXJuIGFyZy50b0hUTUwob3B0aW9ucyk7XG4gICAgfSk7IC8vIGZvcm1hdCB0aGUgYXJndW1lbnRzIGxpa2UgXCJhZGQoMiwgNC4yKVwiXG5cbiAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1mdW5jdGlvblwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMuZm4pICsgJzwvc3Bhbj48c3BhbiBjbGFzcz1cIm1hdGgtcGFyYW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIGFyZ3Muam9pbignPHNwYW4gY2xhc3M9XCJtYXRoLXNlcGFyYXRvclwiPiw8L3NwYW4+JykgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmFudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gIH07XG4gIC8qXG4gICAqIEV4cGFuZCBhIExhVGVYIHRlbXBsYXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZVxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHByaXZhdGVcbiAgICoqL1xuXG5cbiAgZnVuY3Rpb24gZXhwYW5kVGVtcGxhdGUodGVtcGxhdGUsIG5vZGUsIG9wdGlvbnMpIHtcbiAgICB2YXIgbGF0ZXggPSAnJzsgLy8gTWF0Y2ggZXZlcnl0aGluZyBvZiB0aGUgZm9ybSAke2lkZW50aWZpZXJ9IG9yICR7aWRlbnRpZmllclsyXX0gb3IgJCRcbiAgICAvLyB3aGlsZSBzdWJtYXRjaGluZyBpZGVudGlmaWVyIGFuZCAyIChpbiB0aGUgc2Vjb25kIGNhc2UpXG5cbiAgICB2YXIgcmVnZXggPSBuZXcgUmVnRXhwKCdcXFxcJCg/OlxcXFx7KFthLXpfXVthLXpfMC05XSopKD86XFxcXFsoWzAtOV0rKVxcXFxdKT9cXFxcfXxcXFxcJCknLCAnaWcnKTtcbiAgICB2YXIgaW5wdXRQb3MgPSAwOyAvLyBwb3NpdGlvbiBpbiB0aGUgaW5wdXQgc3RyaW5nXG5cbiAgICB2YXIgbWF0Y2g7XG5cbiAgICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyh0ZW1wbGF0ZSkpICE9PSBudWxsKSB7XG4gICAgICAvLyBnbyB0aHJvdWdoIGFsbCBtYXRjaGVzXG4gICAgICAvLyBhZGQgZXZlcnl0aGluZyBpbiBmcm9udCBvZiB0aGUgbWF0Y2ggdG8gdGhlIExhVGVYIHN0cmluZ1xuICAgICAgbGF0ZXggKz0gdGVtcGxhdGUuc3Vic3RyaW5nKGlucHV0UG9zLCBtYXRjaC5pbmRleCk7XG4gICAgICBpbnB1dFBvcyA9IG1hdGNoLmluZGV4O1xuXG4gICAgICBpZiAobWF0Y2hbMF0gPT09ICckJCcpIHtcbiAgICAgICAgLy8gZXNjYXBlZCBkb2xsYXIgc2lnblxuICAgICAgICBsYXRleCArPSAnJCc7XG4gICAgICAgIGlucHV0UG9zKys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0ZW1wbGF0ZSBwYXJhbWV0ZXJcbiAgICAgICAgaW5wdXRQb3MgKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgICB2YXIgcHJvcGVydHkgPSBub2RlW21hdGNoWzFdXTtcblxuICAgICAgICBpZiAoIXByb3BlcnR5KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCdUZW1wbGF0ZTogUHJvcGVydHkgJyArIG1hdGNoWzFdICsgJyBkb2VzIG5vdCBleGlzdC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtYXRjaFsyXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgLy8gbm8gc3F1YXJlIGJyYWNrZXRzXG4gICAgICAgICAgc3dpdGNoIChfdHlwZW9mKHByb3BlcnR5KSkge1xuICAgICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgICAgbGF0ZXggKz0gcHJvcGVydHk7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgICAgICBpZiAoKDAsIF9pcy5pc05vZGUpKHByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgIGxhdGV4ICs9IHByb3BlcnR5LnRvVGV4KG9wdGlvbnMpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkocHJvcGVydHkpKSB7XG4gICAgICAgICAgICAgICAgLy8gbWFrZSBhcnJheSBvZiBOb2RlcyBpbnRvIGNvbW1hIHNlcGFyYXRlZCBsaXN0XG4gICAgICAgICAgICAgICAgbGF0ZXggKz0gcHJvcGVydHkubWFwKGZ1bmN0aW9uIChhcmcsIGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICBpZiAoKDAsIF9pcy5pc05vZGUpKGFyZykpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFyZy50b1RleChvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGVtcGxhdGU6ICcgKyBtYXRjaFsxXSArICdbJyArIGluZGV4ICsgJ10gaXMgbm90IGEgTm9kZS4nKTtcbiAgICAgICAgICAgICAgICB9KS5qb2luKCcsJyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGVtcGxhdGU6ICcgKyBtYXRjaFsxXSArICcgaGFzIHRvIGJlIGEgTm9kZSwgU3RyaW5nIG9yIGFycmF5IG9mIE5vZGVzJyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGVtcGxhdGU6ICcgKyBtYXRjaFsxXSArICcgaGFzIHRvIGJlIGEgTm9kZSwgU3RyaW5nIG9yIGFycmF5IG9mIE5vZGVzJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHdpdGggc3F1YXJlIGJyYWNrZXRzXG4gICAgICAgICAgaWYgKCgwLCBfaXMuaXNOb2RlKShwcm9wZXJ0eVttYXRjaFsyXV0gJiYgcHJvcGVydHlbbWF0Y2hbMl1dKSkge1xuICAgICAgICAgICAgbGF0ZXggKz0gcHJvcGVydHlbbWF0Y2hbMl1dLnRvVGV4KG9wdGlvbnMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUZW1wbGF0ZTogJyArIG1hdGNoWzFdICsgJ1snICsgbWF0Y2hbMl0gKyAnXSBpcyBub3QgYSBOb2RlLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGxhdGV4ICs9IHRlbXBsYXRlLnNsaWNlKGlucHV0UG9zKTsgLy8gYXBwZW5kIHJlc3Qgb2YgdGhlIHRlbXBsYXRlXG5cbiAgICByZXR1cm4gbGF0ZXg7XG4gIH0gLy8gYmFja3VwIE5vZGUncyB0b1RleCBmdW5jdGlvblxuICAvLyBAcHJpdmF0ZVxuXG5cbiAgdmFyIG5vZGVUb1RleCA9IEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUudG9UZXg7XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb24uICh3cmFwcGVyIGZ1bmN0aW9uKVxuICAgKiBUaGlzIG92ZXJyaWRlcyBwYXJ0cyBvZiBOb2RlJ3MgdG9UZXggZnVuY3Rpb24uXG4gICAqIElmIGNhbGxiYWNrIGlzIGFuIG9iamVjdCBjb250YWluaW5nIGNhbGxiYWNrcywgaXRcbiAgICogY2FsbHMgdGhlIGNvcnJlY3QgY2FsbGJhY2sgZm9yIHRoZSBjdXJyZW50IG5vZGUsXG4gICAqIG90aGVyd2lzZSBpdCBmYWxscyBiYWNrIHRvIGNhbGxpbmcgTm9kZSdzIHRvVGV4XG4gICAqIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUudG9UZXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBjdXN0b21UZXg7XG5cbiAgICBpZiAob3B0aW9ucyAmJiBfdHlwZW9mKG9wdGlvbnMuaGFuZGxlcikgPT09ICdvYmplY3QnICYmICgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShvcHRpb25zLmhhbmRsZXIsIHRoaXMubmFtZSkpIHtcbiAgICAgIC8vIGNhbGxiYWNrIGlzIGEgbWFwIG9mIGNhbGxiYWNrIGZ1bmN0aW9uc1xuICAgICAgY3VzdG9tVGV4ID0gb3B0aW9ucy5oYW5kbGVyW3RoaXMubmFtZV0odGhpcywgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjdXN0b21UZXggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gY3VzdG9tVGV4O1xuICAgIH0gLy8gZmFsbCBiYWNrIHRvIE5vZGUncyB0b1RleFxuXG5cbiAgICByZXR1cm4gbm9kZVRvVGV4LmNhbGwodGhpcywgb3B0aW9ucyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGFyZ3MgPSB0aGlzLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgIC8vIGdldCBMYVRlWCBvZiB0aGUgYXJndW1lbnRzXG4gICAgICByZXR1cm4gYXJnLnRvVGV4KG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIHZhciBsYXRleENvbnZlcnRlcjtcblxuICAgIGlmIChfbGF0ZXgubGF0ZXhGdW5jdGlvbnNbdGhpcy5uYW1lXSkge1xuICAgICAgbGF0ZXhDb252ZXJ0ZXIgPSBfbGF0ZXgubGF0ZXhGdW5jdGlvbnNbdGhpcy5uYW1lXTtcbiAgICB9IC8vIHRvVGV4IHByb3BlcnR5IG9uIHRoZSBmdW5jdGlvbiBpdHNlbGZcblxuXG4gICAgaWYgKG1hdGhbdGhpcy5uYW1lXSAmJiAodHlwZW9mIG1hdGhbdGhpcy5uYW1lXS50b1RleCA9PT0gJ2Z1bmN0aW9uJyB8fCBfdHlwZW9mKG1hdGhbdGhpcy5uYW1lXS50b1RleCkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBtYXRoW3RoaXMubmFtZV0udG9UZXggPT09ICdzdHJpbmcnKSkge1xuICAgICAgLy8gLnRvVGV4IGlzIGEgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICAgIGxhdGV4Q29udmVydGVyID0gbWF0aFt0aGlzLm5hbWVdLnRvVGV4O1xuICAgIH1cblxuICAgIHZhciBjdXN0b21Ub1RleDtcblxuICAgIHN3aXRjaCAoX3R5cGVvZihsYXRleENvbnZlcnRlcikpIHtcbiAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgLy8gYSBjYWxsYmFjayBmdW5jdGlvblxuICAgICAgICBjdXN0b21Ub1RleCA9IGxhdGV4Q29udmVydGVyKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgLy8gYSB0ZW1wbGF0ZSBzdHJpbmdcbiAgICAgICAgY3VzdG9tVG9UZXggPSBleHBhbmRUZW1wbGF0ZShsYXRleENvbnZlcnRlciwgdGhpcywgb3B0aW9ucyk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAvLyBhbiBvYmplY3Qgd2l0aCBkaWZmZXJlbnQgXCJjb252ZXJ0ZXJzXCIgZm9yIGRpZmZlcmVudCBudW1iZXJzIG9mIGFyZ3VtZW50c1xuICAgICAgICBzd2l0Y2ggKF90eXBlb2YobGF0ZXhDb252ZXJ0ZXJbYXJncy5sZW5ndGhdKSkge1xuICAgICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICAgIGN1c3RvbVRvVGV4ID0gbGF0ZXhDb252ZXJ0ZXJbYXJncy5sZW5ndGhdKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgY3VzdG9tVG9UZXggPSBleHBhbmRUZW1wbGF0ZShsYXRleENvbnZlcnRlclthcmdzLmxlbmd0aF0sIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY3VzdG9tVG9UZXggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gY3VzdG9tVG9UZXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4cGFuZFRlbXBsYXRlKF9sYXRleC5kZWZhdWx0VGVtcGxhdGUsIHRoaXMsIG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGlkZW50aWZpZXIuXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLmdldElkZW50aWZpZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZSArICc6JyArIHRoaXMubmFtZTtcbiAgfTtcblxuICByZXR1cm4gRnVuY3Rpb25Ob2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVGdW5jdGlvbk5vZGUgPSBjcmVhdGVGdW5jdGlvbk5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUluZGV4Tm9kZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jdXN0b21zID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2N1c3RvbXNcIik7XG5cbmZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgU3ltYm9sLml0ZXJhdG9yIGluIE9iamVjdChpdGVyKSkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxudmFyIG5hbWUgPSAnSW5kZXhOb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ1JhbmdlJywgJ05vZGUnLCAnc2l6ZSddO1xudmFyIGNyZWF0ZUluZGV4Tm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBSYW5nZSA9IF9yZWYuUmFuZ2UsXG4gICAgICBOb2RlID0gX3JlZi5Ob2RlLFxuICAgICAgc2l6ZSA9IF9yZWYuc2l6ZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIEluZGV4Tm9kZVxuICAgKiBAZXh0ZW5kcyBOb2RlXG4gICAqXG4gICAqIERlc2NyaWJlcyBhIHN1YnNldCBvZiBhIG1hdHJpeCBvciBhbiBvYmplY3QgcHJvcGVydHkuXG4gICAqIENhbm5vdCBiZSB1c2VkIG9uIGl0cyBvd24sIG5lZWRzIHRvIGJlIHVzZWQgd2l0aGluIGFuIEFjY2Vzc29yTm9kZSBvclxuICAgKiBBc3NpZ25tZW50Tm9kZS5cbiAgICpcbiAgICogQHBhcmFtIHtOb2RlW119IGRpbWVuc2lvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbZG90Tm90YXRpb249ZmFsc2VdICBPcHRpb25hbCBwcm9wZXJ0eSBkZXNjcmliaW5nIHdoZXRoZXJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIGluZGV4IHdhcyB3cml0dGVuIHVzaW5nIGRvdFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdGF0aW9uIGxpa2UgYGEuYmAsIG9yIHVzaW5nIGJyYWNrZXRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RhdGlvbiBsaWtlIGBhW1wiYlwiXWAgKGRlZmF1bHQpLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVzZWQgdG8gc3RyaW5naWZ5IGFuIEluZGV4Tm9kZS5cbiAgICovXG4gIGZ1bmN0aW9uIEluZGV4Tm9kZShkaW1lbnNpb25zLCBkb3ROb3RhdGlvbikge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBJbmRleE5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIHRoaXMuZGltZW5zaW9ucyA9IGRpbWVuc2lvbnM7XG4gICAgdGhpcy5kb3ROb3RhdGlvbiA9IGRvdE5vdGF0aW9uIHx8IGZhbHNlOyAvLyB2YWxpZGF0ZSBpbnB1dFxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRpbWVuc2lvbnMpIHx8ICFkaW1lbnNpb25zLmV2ZXJ5KF9pcy5pc05vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBjb250YWluaW5nIE5vZGVzIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJkaW1lbnNpb25zXCInKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5kb3ROb3RhdGlvbiAmJiAhdGhpcy5pc09iamVjdFByb3BlcnR5KCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZG90Tm90YXRpb24gb25seSBhcHBsaWNhYmxlIGZvciBvYmplY3QgcHJvcGVydGllcycpO1xuICAgIH0gLy8gVE9ETzogZGVwcmVjYXRlZCBzaW5jZSB2MywgcmVtb3ZlIHNvbWUgZGF5XG5cblxuICAgIHZhciBkZXByZWNhdGVkID0gZnVuY3Rpb24gZGVwcmVjYXRlZCgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUHJvcGVydHkgYEluZGV4Tm9kZS5vYmplY3RgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgSW5kZXhOb2RlLmZuYCBpbnN0ZWFkJyk7XG4gICAgfTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnb2JqZWN0Jywge1xuICAgICAgZ2V0OiBkZXByZWNhdGVkLFxuICAgICAgc2V0OiBkZXByZWNhdGVkXG4gICAgfSk7XG4gIH1cblxuICBJbmRleE5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgSW5kZXhOb2RlLnByb3RvdHlwZS50eXBlID0gJ0luZGV4Tm9kZSc7XG4gIEluZGV4Tm9kZS5wcm90b3R5cGUuaXNJbmRleE5vZGUgPSB0cnVlO1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuICBJbmRleE5vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7XG4gICAgLy8gVE9ETzogaW1wbGVtZW50IHN1cHBvcnQgZm9yIGJpZ251bWJlciAoY3VycmVudGx5IGJpZ251bWJlcnMgYXJlIHNpbGVudGx5XG4gICAgLy8gICAgICAgcmVkdWNlZCB0byBudW1iZXJzIHdoZW4gY2hhbmdpbmcgdGhlIHZhbHVlIHRvIHplcm8tYmFzZWQpXG4gICAgLy8gVE9ETzogT3B0aW1pemF0aW9uOiB3aGVuIHRoZSByYW5nZSB2YWx1ZXMgYXJlIENvbnN0YW50Tm9kZXMsXG4gICAgLy8gICAgICAgd2UgY2FuIGJlZm9yZWhhbmQgcmVzb2x2ZSB0aGUgemVyby1iYXNlZCB2YWx1ZVxuICAgIC8vIG9wdGltaXphdGlvbiBmb3IgYSBzaW1wbGUgb2JqZWN0IHByb3BlcnR5XG4gICAgdmFyIGV2YWxEaW1lbnNpb25zID0gKDAsIF9hcnJheS5tYXApKHRoaXMuZGltZW5zaW9ucywgZnVuY3Rpb24gKHJhbmdlLCBpKSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc1JhbmdlTm9kZSkocmFuZ2UpKSB7XG4gICAgICAgIGlmIChyYW5nZS5uZWVkc0VuZCgpKSB7XG4gICAgICAgICAgLy8gY3JlYXRlIGEgcmFuZ2UgY29udGFpbmluZyBlbmQgKGxpa2UgJzQ6ZW5kJylcbiAgICAgICAgICB2YXIgY2hpbGRBcmdOYW1lcyA9IE9iamVjdC5jcmVhdGUoYXJnTmFtZXMpO1xuICAgICAgICAgIGNoaWxkQXJnTmFtZXMuZW5kID0gdHJ1ZTtcblxuICAgICAgICAgIHZhciBldmFsU3RhcnQgPSByYW5nZS5zdGFydC5fY29tcGlsZShtYXRoLCBjaGlsZEFyZ05hbWVzKTtcblxuICAgICAgICAgIHZhciBldmFsRW5kID0gcmFuZ2UuZW5kLl9jb21waWxlKG1hdGgsIGNoaWxkQXJnTmFtZXMpO1xuXG4gICAgICAgICAgdmFyIGV2YWxTdGVwID0gcmFuZ2Uuc3RlcCA/IHJhbmdlLnN0ZXAuX2NvbXBpbGUobWF0aCwgY2hpbGRBcmdOYW1lcykgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsRGltZW5zaW9uKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgICAgICB2YXIgcyA9IHNpemUoY29udGV4dCkudmFsdWVPZigpO1xuICAgICAgICAgICAgdmFyIGNoaWxkQXJncyA9IE9iamVjdC5jcmVhdGUoYXJncyk7XG4gICAgICAgICAgICBjaGlsZEFyZ3MuZW5kID0gc1tpXTtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVSYW5nZShldmFsU3RhcnQoc2NvcGUsIGNoaWxkQXJncywgY29udGV4dCksIGV2YWxFbmQoc2NvcGUsIGNoaWxkQXJncywgY29udGV4dCksIGV2YWxTdGVwKHNjb3BlLCBjaGlsZEFyZ3MsIGNvbnRleHQpKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGNyZWF0ZSByYW5nZVxuICAgICAgICAgIHZhciBfZXZhbFN0YXJ0ID0gcmFuZ2Uuc3RhcnQuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgICAgICAgdmFyIF9ldmFsRW5kID0gcmFuZ2UuZW5kLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgICAgICAgIHZhciBfZXZhbFN0ZXAgPSByYW5nZS5zdGVwID8gcmFuZ2Uuc3RlcC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcykgOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxEaW1lbnNpb24oc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVSYW5nZShfZXZhbFN0YXJ0KHNjb3BlLCBhcmdzLCBjb250ZXh0KSwgX2V2YWxFbmQoc2NvcGUsIGFyZ3MsIGNvbnRleHQpLCBfZXZhbFN0ZXAoc2NvcGUsIGFyZ3MsIGNvbnRleHQpKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShyYW5nZSkgJiYgcmFuZ2UubmFtZSA9PT0gJ2VuZCcpIHtcbiAgICAgICAgLy8gU3ltYm9sTm9kZSAnZW5kJ1xuICAgICAgICB2YXIgX2NoaWxkQXJnTmFtZXMgPSBPYmplY3QuY3JlYXRlKGFyZ05hbWVzKTtcblxuICAgICAgICBfY2hpbGRBcmdOYW1lcy5lbmQgPSB0cnVlO1xuXG4gICAgICAgIHZhciBldmFsUmFuZ2UgPSByYW5nZS5fY29tcGlsZShtYXRoLCBfY2hpbGRBcmdOYW1lcyk7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxEaW1lbnNpb24oc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICB2YXIgcyA9IHNpemUoY29udGV4dCkudmFsdWVPZigpO1xuICAgICAgICAgIHZhciBjaGlsZEFyZ3MgPSBPYmplY3QuY3JlYXRlKGFyZ3MpO1xuICAgICAgICAgIGNoaWxkQXJncy5lbmQgPSBzW2ldO1xuICAgICAgICAgIHJldHVybiBldmFsUmFuZ2Uoc2NvcGUsIGNoaWxkQXJncywgY29udGV4dCk7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBDb25zdGFudE5vZGVcbiAgICAgICAgdmFyIF9ldmFsUmFuZ2UgPSByYW5nZS5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxEaW1lbnNpb24oc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICByZXR1cm4gX2V2YWxSYW5nZShzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gICAgdmFyIGluZGV4ID0gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkobWF0aCwgJ2luZGV4Jyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxJbmRleE5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgIHZhciBkaW1lbnNpb25zID0gKDAsIF9hcnJheS5tYXApKGV2YWxEaW1lbnNpb25zLCBmdW5jdGlvbiAoZXZhbERpbWVuc2lvbikge1xuICAgICAgICByZXR1cm4gZXZhbERpbWVuc2lvbihzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBpbmRleC5hcHBseSh2b2lkIDAsIF90b0NvbnN1bWFibGVBcnJheShkaW1lbnNpb25zKSk7XG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2tcbiAgICovXG5cblxuICBJbmRleE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGltZW5zaW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgY2FsbGJhY2sodGhpcy5kaW1lbnNpb25zW2ldLCAnZGltZW5zaW9uc1snICsgaSArICddJywgdGhpcyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEluZGV4Tm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7SW5kZXhOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIEluZGV4Tm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIGRpbWVuc2lvbnMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kaW1lbnNpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkaW1lbnNpb25zW2ldID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuZGltZW5zaW9uc1tpXSwgJ2RpbWVuc2lvbnNbJyArIGkgKyAnXScsIHRoaXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEluZGV4Tm9kZShkaW1lbnNpb25zLCB0aGlzLmRvdE5vdGF0aW9uKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7SW5kZXhOb2RlfVxuICAgKi9cblxuXG4gIEluZGV4Tm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBJbmRleE5vZGUodGhpcy5kaW1lbnNpb25zLnNsaWNlKDApLCB0aGlzLmRvdE5vdGF0aW9uKTtcbiAgfTtcbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciB0aGlzIEluZGV4Tm9kZSBjb250YWlucyBhIHNpbmdsZSBwcm9wZXJ0eSBuYW1lXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgSW5kZXhOb2RlLnByb3RvdHlwZS5pc09iamVjdFByb3BlcnR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmRpbWVuc2lvbnMubGVuZ3RoID09PSAxICYmICgwLCBfaXMuaXNDb25zdGFudE5vZGUpKHRoaXMuZGltZW5zaW9uc1swXSkgJiYgdHlwZW9mIHRoaXMuZGltZW5zaW9uc1swXS52YWx1ZSA9PT0gJ3N0cmluZyc7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwcm9wZXJ0eSBuYW1lIGlmIEluZGV4Tm9kZSBjb250YWlucyBhIHByb3BlcnR5LlxuICAgKiBJZiBub3QsIHJldHVybnMgbnVsbC5cbiAgICogQHJldHVybiB7c3RyaW5nIHwgbnVsbH1cbiAgICovXG5cblxuICBJbmRleE5vZGUucHJvdG90eXBlLmdldE9iamVjdFByb3BlcnR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmlzT2JqZWN0UHJvcGVydHkoKSA/IHRoaXMuZGltZW5zaW9uc1swXS52YWx1ZSA6IG51bGw7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgSW5kZXhOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIC8vIGZvcm1hdCB0aGUgcGFyYW1ldGVycyBsaWtlIFwiWzEsIDA6NV1cIlxuICAgIHJldHVybiB0aGlzLmRvdE5vdGF0aW9uID8gJy4nICsgdGhpcy5nZXRPYmplY3RQcm9wZXJ0eSgpIDogJ1snICsgdGhpcy5kaW1lbnNpb25zLmpvaW4oJywgJykgKyAnXSc7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgSW5kZXhOb2RlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ0luZGV4Tm9kZScsXG4gICAgICBkaW1lbnNpb25zOiB0aGlzLmRpbWVuc2lvbnMsXG4gICAgICBkb3ROb3RhdGlvbjogdGhpcy5kb3ROb3RhdGlvblxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBJbmRleE5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkluZGV4Tm9kZVwiLCBkaW1lbnNpb25zOiBbLi4uXSwgZG90Tm90YXRpb246IGZhbHNlfWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0luZGV4Tm9kZX1cbiAgICovXG5cblxuICBJbmRleE5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgSW5kZXhOb2RlKGpzb24uZGltZW5zaW9ucywganNvbi5kb3ROb3RhdGlvbik7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIEluZGV4Tm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAvLyBmb3JtYXQgdGhlIHBhcmFtZXRlcnMgbGlrZSBcIlsxLCAwOjVdXCJcbiAgICB2YXIgZGltZW5zaW9ucyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRpbWVuc2lvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGRpbWVuc2lvbnNbaV0gPSB0aGlzLmRpbWVuc2lvbnNbaV0udG9IVE1MKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZG90Tm90YXRpb24pIHtcbiAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLW9wZXJhdG9yIG1hdGgtYWNjZXNzb3Itb3BlcmF0b3JcIj4uPC9zcGFuPicgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXN5bWJvbCBtYXRoLXByb3BlcnR5XCI+JyArICgwLCBfc3RyaW5nLmVzY2FwZSkodGhpcy5nZXRPYmplY3RQcm9wZXJ0eSgpKSArICc8L3NwYW4+JztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1zcXVhcmUtcGFyZW50aGVzaXNcIj5bPC9zcGFuPicgKyBkaW1lbnNpb25zLmpvaW4oJzxzcGFuIGNsYXNzPVwibWF0aC1zZXBhcmF0b3JcIj4sPC9zcGFuPicpICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXNxdWFyZS1wYXJlbnRoZXNpc1wiPl08L3NwYW4+JztcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBJbmRleE5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGRpbWVuc2lvbnMgPSB0aGlzLmRpbWVuc2lvbnMubWFwKGZ1bmN0aW9uIChyYW5nZSkge1xuICAgICAgcmV0dXJuIHJhbmdlLnRvVGV4KG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmRvdE5vdGF0aW9uID8gJy4nICsgdGhpcy5nZXRPYmplY3RQcm9wZXJ0eSgpICsgJycgOiAnX3snICsgZGltZW5zaW9ucy5qb2luKCcsJykgKyAnfSc7XG4gIH07IC8vIGhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBSYW5nZSBmcm9tIHN0YXJ0LCBzdGVwIGFuZCBlbmRcblxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHN0YXJ0KSA/IHN0YXJ0LnRvTnVtYmVyKCkgOiBzdGFydCwgKDAsIF9pcy5pc0JpZ051bWJlcikoZW5kKSA/IGVuZC50b051bWJlcigpIDogZW5kLCAoMCwgX2lzLmlzQmlnTnVtYmVyKShzdGVwKSA/IHN0ZXAudG9OdW1iZXIoKSA6IHN0ZXApO1xuICB9XG5cbiAgcmV0dXJuIEluZGV4Tm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSW5kZXhOb2RlID0gY3JlYXRlSW5kZXhOb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVOb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2tleXdvcmRzID0gcmVxdWlyZShcIi4uL2tleXdvcmRzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2xvZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9sb2dcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIG5hbWUgPSAnTm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydtYXRoV2l0aFRyYW5zZm9ybSddO1xudmFyIGNyZWF0ZU5vZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgbWF0aFdpdGhUcmFuc2Zvcm0gPSBfcmVmLm1hdGhXaXRoVHJhbnNmb3JtO1xuXG4gIC8qKlxuICAgKiBOb2RlXG4gICAqL1xuICBmdW5jdGlvbiBOb2RlKCkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEV2YWx1YXRlIHRoZSBub2RlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbc2NvcGVdICBTY29wZSB0byByZWFkL3dyaXRlIHZhcmlhYmxlc1xuICAgKiBAcmV0dXJuIHsqfSAgICAgICAgICAgICAgUmV0dXJucyB0aGUgcmVzdWx0XG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiAoc2NvcGUpIHtcbiAgICByZXR1cm4gdGhpcy5jb21waWxlKCkuZXZhbHVhdGUoc2NvcGUpO1xuICB9O1xuICAvKipcbiAgICogRXZhbHVhdGUgdGhlIG5vZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IFtzY29wZV0gIFNjb3BlIHRvIHJlYWQvd3JpdGUgdmFyaWFibGVzXG4gICAqIEByZXR1cm4geyp9ICAgICAgICAgICAgICBSZXR1cm5zIHRoZSByZXN1bHRcbiAgICovXG4gIC8vIFRPRE86IERlcHJlY2F0ZWQgc2luY2UgdjYuMC4wLiBDbGVhbiB1cCBzb21lIGRheVxuXG5cbiAgTm9kZS5wcm90b3R5cGUuZXZhbCA9IGZ1bmN0aW9uIChzY29wZSkge1xuICAgICgwLCBfbG9nLndhcm5PbmNlKSgnTWV0aG9kIE5vZGUuZXZhbCBpcyByZW5hbWVkIHRvIE5vZGUuZXZhbHVhdGUuIFBsZWFzZSB1c2UgdGhlIG5ldyBtZXRob2QgbmFtZS4nKTtcbiAgICByZXR1cm4gdGhpcy5ldmFsdWF0ZShzY29wZSk7XG4gIH07XG5cbiAgTm9kZS5wcm90b3R5cGUudHlwZSA9ICdOb2RlJztcbiAgTm9kZS5wcm90b3R5cGUuaXNOb2RlID0gdHJ1ZTtcbiAgTm9kZS5wcm90b3R5cGUuY29tbWVudCA9ICcnO1xuICAvKipcbiAgICogQ29tcGlsZSB0aGUgbm9kZSBpbnRvIGFuIG9wdGltaXplZCwgZXZhdWF0YWJsZSBKYXZhU2NyaXB0IGZ1bmN0aW9uXG4gICAqIEByZXR1cm4ge3tldmFsdWF0ZTogZnVuY3Rpb24oW09iamVjdF0pfX0gb2JqZWN0XG4gICAqICAgICAgICAgICAgICAgIFJldHVybnMgYW4gb2JqZWN0IHdpdGggYSBmdW5jdGlvbiAnZXZhbHVhdGUnLFxuICAgKiAgICAgICAgICAgICAgICB3aGljaCBjYW4gYmUgaW52b2tlZCBhcyBleHByLmV2YWx1YXRlKFtzY29wZTogT2JqZWN0XSksXG4gICAqICAgICAgICAgICAgICAgIHdoZXJlIHNjb3BlIGlzIGFuIG9wdGlvbmFsIG9iamVjdCB3aXRoXG4gICAqICAgICAgICAgICAgICAgIHZhcmlhYmxlcy5cbiAgICovXG5cbiAgTm9kZS5wcm90b3R5cGUuY29tcGlsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXhwciA9IHRoaXMuX2NvbXBpbGUobWF0aFdpdGhUcmFuc2Zvcm0sIHt9KTtcblxuICAgIHZhciBhcmdzID0ge307XG4gICAgdmFyIGNvbnRleHQgPSBudWxsO1xuXG4gICAgZnVuY3Rpb24gZXZhbHVhdGUoc2NvcGUpIHtcbiAgICAgIHZhciBzID0gc2NvcGUgfHwge307XG5cbiAgICAgIF92YWxpZGF0ZVNjb3BlKHMpO1xuXG4gICAgICByZXR1cm4gZXhwcihzLCBhcmdzLCBjb250ZXh0KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZXZhbHVhdGU6IGV2YWx1YXRlLFxuICAgICAgLy8gVE9ETzogRGVwcmVjYXRlZCBzaW5jZSB2Ni4wLjAuIENsZWFuIHVwIHNvbWUgZGF5XG4gICAgICBldmFsOiBmdW5jdGlvbiBkZXByZWNhdGVkRXZhbChzY29wZSkge1xuICAgICAgICAoMCwgX2xvZy53YXJuT25jZSkoJ01ldGhvZCBldmFsIGlzIHJlbmFtZWQgdG8gZXZhbHVhdGUuIFBsZWFzZSB1c2UgdGhlIG5ldyBtZXRob2QuJyk7XG4gICAgICAgIHJldHVybiBldmFsdWF0ZShzY29wZSk7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLlxuICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuXG4gICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9sc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKilcbiAgICovXG5cblxuICBOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHRocm93IG5ldyBFcnJvcignTWV0aG9kIF9jb21waWxlIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBieSB0eXBlICcgKyB0aGlzLnR5cGUpO1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE5vZGUgaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcnVuIGZvckVhY2ggb24gYSBOb2RlIGludGVyZmFjZScpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IE5vZGUgaGF2aW5nIGl0J3MgY2hpbGRzIGJlIHRoZSByZXN1bHRzIG9mIGNhbGxpbmdcbiAgICogdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBjaGlsZHMgb2YgdGhlIG9yaWdpbmFsIG5vZGUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKTogTm9kZX0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge09wZXJhdG9yTm9kZX0gUmV0dXJucyBhIHRyYW5zZm9ybWVkIGNvcHkgb2YgdGhlIG5vZGVcbiAgICovXG5cblxuICBOb2RlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE5vZGUgaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcnVuIG1hcCBvbiBhIE5vZGUgaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB3aGV0aGVyIGFuIG9iamVjdCBpcyBhIE5vZGUsIGZvciB1c2Ugd2l0aCBtYXBcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEByZXR1cm5zIHtOb2RlfSBSZXR1cm5zIHRoZSBpbnB1dCBpZiBpdCdzIGEgbm9kZSwgZWxzZSB0aHJvd3MgYW4gRXJyb3JcbiAgICogQHByb3RlY3RlZFxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLl9pZk5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIGlmICghKDAsIF9pcy5pc05vZGUpKG5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYWxsYmFjayBmdW5jdGlvbiBtdXN0IHJldHVybiBhIE5vZGUnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHRyYXZlcnNlIGFsbCBub2RlcyBpbiBhIG5vZGUgdHJlZS4gRXhlY3V0ZXMgZ2l2ZW4gY2FsbGJhY2sgZm9yXG4gICAqIHRoaXMgbm9kZSBhbmQgZWFjaCBvZiBpdHMgY2hpbGQgbm9kZXMuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obm9kZTogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKiAgICAgICAgICBBIGNhbGxiYWNrIGNhbGxlZCBmb3IgZXZlcnkgbm9kZSBpbiB0aGUgbm9kZSB0cmVlLlxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLnRyYXZlcnNlID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgLy8gZXhlY3V0ZSBjYWxsYmFjayBmb3IgaXRzZWxmXG4gICAgY2FsbGJhY2sodGhpcywgbnVsbCwgbnVsbCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgc3RhbmRhcmQvbm8tY2FsbGJhY2stbGl0ZXJhbFxuICAgIC8vIHJlY3Vyc2l2ZWx5IHRyYXZlcnNlIG92ZXIgYWxsIGNoaWxkcyBvZiBhIG5vZGVcblxuICAgIGZ1bmN0aW9uIF90cmF2ZXJzZShub2RlLCBjYWxsYmFjaykge1xuICAgICAgbm9kZS5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCwgcGF0aCwgcGFyZW50KSB7XG4gICAgICAgIGNhbGxiYWNrKGNoaWxkLCBwYXRoLCBwYXJlbnQpO1xuXG4gICAgICAgIF90cmF2ZXJzZShjaGlsZCwgY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgX3RyYXZlcnNlKHRoaXMsIGNhbGxiYWNrKTtcbiAgfTtcbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IHRyYW5zZm9ybSBhIG5vZGUgdHJlZSB2aWEgYSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gICAqXG4gICAqIEZvciBleGFtcGxlLCB0byByZXBsYWNlIGFsbCBub2RlcyBvZiB0eXBlIFN5bWJvbE5vZGUgaGF2aW5nIG5hbWUgJ3gnIHdpdGggYVxuICAgKiBDb25zdGFudE5vZGUgd2l0aCB2YWx1ZSAyOlxuICAgKlxuICAgKiAgICAgY29uc3QgcmVzID0gTm9kZS50cmFuc2Zvcm0oZnVuY3Rpb24gKG5vZGUsIHBhdGgsIHBhcmVudCkge1xuICAgKiAgICAgICBpZiAobm9kZSAmJiBub2RlLmlzU3ltYm9sTm9kZSkgJiYgKG5vZGUubmFtZSA9PT0gJ3gnKSkge1xuICAgKiAgICAgICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKDIpXG4gICAqICAgICAgIH1cbiAgICogICAgICAgZWxzZSB7XG4gICAqICAgICAgICAgcmV0dXJuIG5vZGVcbiAgICogICAgICAgfVxuICAgKiAgICAgfSlcbiAgICpcbiAgICogQHBhcmFtIHtmdW5jdGlvbihub2RlOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSkgOiBOb2RlfSBjYWxsYmFja1xuICAgKiAgICAgICAgICBBIG1hcHBpbmcgZnVuY3Rpb24gYWNjZXB0aW5nIGEgbm9kZSwgYW5kIHJldHVybmluZ1xuICAgKiAgICAgICAgICBhIHJlcGxhY2VtZW50IGZvciB0aGUgbm9kZSBvciB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogICAgICAgICAgU2lnbmF0dXJlOiBjYWxsYmFjayhub2RlOiBOb2RlLCBpbmRleDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpIDogTm9kZVxuICAgKiBAcmV0dXJuIHtOb2RlfSBSZXR1cm5zIHRoZSBvcmlnaW5hbCBub2RlIG9yIGl0cyByZXBsYWNlbWVudFxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLnRyYW5zZm9ybSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGZ1bmN0aW9uIF90cmFuc2Zvcm0oY2hpbGQsIHBhdGgsIHBhcmVudCkge1xuICAgICAgdmFyIHJlcGxhY2VtZW50ID0gY2FsbGJhY2soY2hpbGQsIHBhdGgsIHBhcmVudCk7XG5cbiAgICAgIGlmIChyZXBsYWNlbWVudCAhPT0gY2hpbGQpIHtcbiAgICAgICAgLy8gc3RvcCBpdGVyYXRpbmcgd2hlbiB0aGUgbm9kZSBpcyByZXBsYWNlZFxuICAgICAgICByZXR1cm4gcmVwbGFjZW1lbnQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjaGlsZC5tYXAoX3RyYW5zZm9ybSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF90cmFuc2Zvcm0odGhpcywgbnVsbCwgbnVsbCk7XG4gIH07XG4gIC8qKlxuICAgKiBGaW5kIGFueSBub2RlIGluIHRoZSBub2RlIHRyZWUgbWF0Y2hpbmcgZ2l2ZW4gZmlsdGVyIGZ1bmN0aW9uLiBGb3IgZXhhbXBsZSwgdG9cbiAgICogZmluZCBhbGwgbm9kZXMgb2YgdHlwZSBTeW1ib2xOb2RlIGhhdmluZyBuYW1lICd4JzpcbiAgICpcbiAgICogICAgIGNvbnN0IHJlc3VsdHMgPSBOb2RlLmZpbHRlcihmdW5jdGlvbiAobm9kZSkge1xuICAgKiAgICAgICByZXR1cm4gKG5vZGUgJiYgbm9kZS5pc1N5bWJvbE5vZGUpICYmIChub2RlLm5hbWUgPT09ICd4JylcbiAgICogICAgIH0pXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obm9kZTogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpIDogTm9kZX0gY2FsbGJhY2tcbiAgICogICAgICAgICAgICBBIHRlc3QgZnVuY3Rpb24gcmV0dXJuaW5nIHRydWUgd2hlbiBhIG5vZGUgbWF0Y2hlcywgYW5kIGZhbHNlXG4gICAqICAgICAgICAgICAgb3RoZXJ3aXNlLiBGdW5jdGlvbiBzaWduYXR1cmU6XG4gICAqICAgICAgICAgICAgY2FsbGJhY2sobm9kZTogTm9kZSwgaW5kZXg6IHN0cmluZywgcGFyZW50OiBOb2RlKSA6IGJvb2xlYW5cbiAgICogQHJldHVybiB7Tm9kZVtdfSBub2RlcyAgICAgICBBbiBhcnJheSB3aXRoIG5vZGVzIG1hdGNoaW5nIGdpdmVuIGZpbHRlciBjcml0ZXJpYVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLmZpbHRlciA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciBub2RlcyA9IFtdO1xuICAgIHRoaXMudHJhdmVyc2UoZnVuY3Rpb24gKG5vZGUsIHBhdGgsIHBhcmVudCkge1xuICAgICAgaWYgKGNhbGxiYWNrKG5vZGUsIHBhdGgsIHBhcmVudCkpIHtcbiAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gbm9kZXM7XG4gIH07IC8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAxLjEuMCwgcmVtb3ZlIHRoaXMgc29tZSBkYXlcblxuXG4gIE5vZGUucHJvdG90eXBlLmZpbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGdW5jdGlvbiBOb2RlLmZpbmQgaXMgZGVwcmVjYXRlZC4gVXNlIE5vZGUuZmlsdGVyIGluc3RlYWQuJyk7XG4gIH07IC8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiAxLjEuMCwgcmVtb3ZlIHRoaXMgc29tZSBkYXlcblxuXG4gIE5vZGUucHJvdG90eXBlLm1hdGNoID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRnVuY3Rpb24gTm9kZS5tYXRjaCBpcyBkZXByZWNhdGVkLiBTZWUgZnVuY3Rpb25zIE5vZGUuZmlsdGVyLCBOb2RlLnRyYW5zZm9ybSwgTm9kZS50cmF2ZXJzZS4nKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIHNoYWxsb3cgY2xvbmUgb2YgdGhpcyBub2RlXG4gICAqIEByZXR1cm4ge05vZGV9XG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBOb2RlIGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNsb25lIGEgTm9kZSBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGRlZXAgY2xvbmUgb2YgdGhpcyBub2RlXG4gICAqIEByZXR1cm4ge05vZGV9XG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUuY2xvbmVEZWVwID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAobm9kZSkge1xuICAgICAgcmV0dXJuIG5vZGUuY2xvbmVEZWVwKCk7XG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBEZWVwIGNvbXBhcmUgdGhpcyBub2RlIHdpdGggYW5vdGhlciBub2RlLlxuICAgKiBAcGFyYW0ge05vZGV9IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIGJvdGggbm9kZXMgYXJlIG9mIHRoZSBzYW1lIHR5cGUgYW5kXG4gICAqICAgICAgICAgICAgICAgICAgIGNvbnRhaW4gdGhlIHNhbWUgdmFsdWVzIChhcyBkbyB0aGVpciBjaGlsZHMpXG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgcmV0dXJuIG90aGVyID8gKDAsIF9vYmplY3QuZGVlcFN0cmljdEVxdWFsKSh0aGlzLCBvdGhlcikgOiBmYWxzZTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24uICh3cmFwcGVyIGZ1bmN0aW9uKVxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBnZXQgYW4gb2JqZWN0IG9mIHRoZSBmb2xsb3dpbmcgZm9ybTpcbiAgICoge1xuICAgKiAgICBoYW5kbGVyOiAvL1RoaXMgY2FuIGJlIGEgY2FsbGJhY2sgZnVuY3Rpb24gb2YgdGhlIGZvcm1cbiAgICogICAgICAgICAgICAgLy8gXCJmdW5jdGlvbiBjYWxsYmFjayhub2RlLCBvcHRpb25zKVwib3JcbiAgICogICAgICAgICAgICAgLy8gYSBtYXAgdGhhdCBtYXBzIGZ1bmN0aW9uIG5hbWVzICh1c2VkIGluIEZ1bmN0aW9uTm9kZXMpXG4gICAqICAgICAgICAgICAgIC8vIHRvIGNhbGxiYWNrc1xuICAgKiAgICBwYXJlbnRoZXNpczogXCJrZWVwXCIgLy90aGUgcGFyZW50aGVzaXMgb3B0aW9uIChUaGlzIGlzIG9wdGlvbmFsKVxuICAgKiB9XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgY3VzdG9tU3RyaW5nO1xuXG4gICAgaWYgKG9wdGlvbnMgJiYgX3R5cGVvZihvcHRpb25zKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHN3aXRjaCAoX3R5cGVvZihvcHRpb25zLmhhbmRsZXIpKSB7XG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICAgIGN1c3RvbVN0cmluZyA9IG9wdGlvbnMuaGFuZGxlcih0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdCBvciBmdW5jdGlvbiBleHBlY3RlZCBhcyBjYWxsYmFjaycpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY3VzdG9tU3RyaW5nICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGN1c3RvbVN0cmluZztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fdG9TdHJpbmcob3B0aW9ucyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlXG4gICAqIEJvdGggLnRvSlNPTigpIGFuZCB0aGUgc3RhdGljIC5mcm9tSlNPTihqc29uKSBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYnkgYWxsXG4gICAqIGltcGxlbWVudGF0aW9ucyBvZiBOb2RlXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHNlcmlhbGl6ZSBvYmplY3Q6IHRvSlNPTiBub3QgaW1wbGVtZW50ZWQgYnkgJyArIHRoaXMudHlwZSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvbi4gKHdyYXBwZXIgZnVuY3Rpb24pXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2FuIGdldCBhbiBvYmplY3Qgb2YgdGhlIGZvbGxvd2luZyBmb3JtOlxuICAgKiB7XG4gICAqICAgIGhhbmRsZXI6IC8vVGhpcyBjYW4gYmUgYSBjYWxsYmFjayBmdW5jdGlvbiBvZiB0aGUgZm9ybVxuICAgKiAgICAgICAgICAgICAvLyBcImZ1bmN0aW9uIGNhbGxiYWNrKG5vZGUsIG9wdGlvbnMpXCIgb3JcbiAgICogICAgICAgICAgICAgLy8gYSBtYXAgdGhhdCBtYXBzIGZ1bmN0aW9uIG5hbWVzICh1c2VkIGluIEZ1bmN0aW9uTm9kZXMpXG4gICAqICAgICAgICAgICAgIC8vIHRvIGNhbGxiYWNrc1xuICAgKiAgICBwYXJlbnRoZXNpczogXCJrZWVwXCIgLy90aGUgcGFyZW50aGVzaXMgb3B0aW9uIChUaGlzIGlzIG9wdGlvbmFsKVxuICAgKiB9XG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGN1c3RvbVN0cmluZztcblxuICAgIGlmIChvcHRpb25zICYmIF90eXBlb2Yob3B0aW9ucykgPT09ICdvYmplY3QnKSB7XG4gICAgICBzd2l0Y2ggKF90eXBlb2Yob3B0aW9ucy5oYW5kbGVyKSkge1xuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICBjdXN0b21TdHJpbmcgPSBvcHRpb25zLmhhbmRsZXIodGhpcywgb3B0aW9ucyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qgb3IgZnVuY3Rpb24gZXhwZWN0ZWQgYXMgY2FsbGJhY2snKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGN1c3RvbVN0cmluZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBjdXN0b21TdHJpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMudG9IVE1MKG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIHN0cmluZyBvdXRwdXQuXG4gICAqIFRoaXMgaGFzIHRvIGJlIGltcGxlbWVudGVkIGJ5IGV2ZXJ5IE5vZGVcbiAgICpcbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTm9kZSBpbXBsZW1lbnRhdGlvbnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ190b1N0cmluZyBub3QgaW1wbGVtZW50ZWQgZm9yICcgKyB0aGlzLnR5cGUpO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uLiAod3JhcHBlciBmdW5jdGlvbilcbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBjYW4gZ2V0IGFuIG9iamVjdCBvZiB0aGUgZm9sbG93aW5nIGZvcm06XG4gICAqIHtcbiAgICogICAgaGFuZGxlcjogLy9UaGlzIGNhbiBiZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIG9mIHRoZSBmb3JtXG4gICAqICAgICAgICAgICAgIC8vIFwiZnVuY3Rpb24gY2FsbGJhY2sobm9kZSwgb3B0aW9ucylcIm9yXG4gICAqICAgICAgICAgICAgIC8vIGEgbWFwIHRoYXQgbWFwcyBmdW5jdGlvbiBuYW1lcyAodXNlZCBpbiBGdW5jdGlvbk5vZGVzKVxuICAgKiAgICAgICAgICAgICAvLyB0byBjYWxsYmFja3NcbiAgICogICAgcGFyZW50aGVzaXM6IFwia2VlcFwiIC8vdGhlIHBhcmVudGhlc2lzIG9wdGlvbiAoVGhpcyBpcyBvcHRpb25hbClcbiAgICogfVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBOb2RlLnByb3RvdHlwZS50b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGN1c3RvbVRleDtcblxuICAgIGlmIChvcHRpb25zICYmIF90eXBlb2Yob3B0aW9ucykgPT09ICdvYmplY3QnKSB7XG4gICAgICBzd2l0Y2ggKF90eXBlb2Yob3B0aW9ucy5oYW5kbGVyKSkge1xuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICBjdXN0b21UZXggPSBvcHRpb25zLmhhbmRsZXIodGhpcywgb3B0aW9ucyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qgb3IgZnVuY3Rpb24gZXhwZWN0ZWQgYXMgY2FsbGJhY2snKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGN1c3RvbVRleCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBjdXN0b21UZXg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3RvVGV4KG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogSW50ZXJuYWwgZnVuY3Rpb24gdG8gZ2VuZXJhdGUgdGhlIExhVGVYIG91dHB1dC5cbiAgICogVGhpcyBoYXMgdG8gYmUgaW1wbGVtZW50ZWQgYnkgZXZlcnkgTm9kZVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqIEB0aHJvd3Mge0Vycm9yfVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBOb2RlIGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignX3RvVGV4IG5vdCBpbXBsZW1lbnRlZCBmb3IgJyArIHRoaXMudHlwZSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgaWRlbnRpZmllci5cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLmdldElkZW50aWZpZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgY29udGVudCBvZiB0aGUgY3VycmVudCBOb2RlLlxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLmdldENvbnRlbnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgc3ltYm9sIG5hbWVzIG9mIGEgc2NvcGUuXG4gICAqIFRocm93cyBhbiBlcnJvciB3aGVuIHRoZSBzY29wZSBjb250YWlucyBhbiBpbGxlZ2FsIHN5bWJvbC5cbiAgICogQHBhcmFtIHtPYmplY3R9IHNjb3BlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3ZhbGlkYXRlU2NvcGUoc2NvcGUpIHtcbiAgICBmb3IgKHZhciBzeW1ib2wgaW4gc2NvcGUpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoc2NvcGUsIHN5bWJvbCkpIHtcbiAgICAgICAgaWYgKHN5bWJvbCBpbiBfa2V5d29yZHMua2V5d29yZHMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Njb3BlIGNvbnRhaW5zIGFuIGlsbGVnYWwgc3ltYm9sLCBcIicgKyBzeW1ib2wgKyAnXCIgaXMgYSByZXNlcnZlZCBrZXl3b3JkJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gTm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTm9kZSA9IGNyZWF0ZU5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU9iamVjdE5vZGUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9jdXN0b21zID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2N1c3RvbXNcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIG5hbWUgPSAnT2JqZWN0Tm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydOb2RlJ107XG52YXIgY3JlYXRlT2JqZWN0Tm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBOb2RlID0gX3JlZi5Ob2RlO1xuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3IgT2JqZWN0Tm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICogSG9sZHMgYW4gb2JqZWN0IHdpdGgga2V5cy92YWx1ZXNcbiAgICogQHBhcmFtIHtPYmplY3QuPHN0cmluZywgTm9kZT59IFtwcm9wZXJ0aWVzXSAgIG9iamVjdCB3aXRoIGtleS92YWx1ZSBwYWlyc1xuICAgKi9cbiAgZnVuY3Rpb24gT2JqZWN0Tm9kZShwcm9wZXJ0aWVzKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE9iamVjdE5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIHRoaXMucHJvcGVydGllcyA9IHByb3BlcnRpZXMgfHwge307IC8vIHZhbGlkYXRlIGlucHV0XG5cbiAgICBpZiAocHJvcGVydGllcykge1xuICAgICAgaWYgKCEoX3R5cGVvZihwcm9wZXJ0aWVzKSA9PT0gJ29iamVjdCcpIHx8ICFPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5ldmVyeShmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiAoMCwgX2lzLmlzTm9kZSkocHJvcGVydGllc1trZXldKTtcbiAgICAgIH0pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdCBjb250YWluaW5nIE5vZGVzIGV4cGVjdGVkJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgT2JqZWN0Tm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBPYmplY3ROb2RlLnByb3RvdHlwZS50eXBlID0gJ09iamVjdE5vZGUnO1xuICBPYmplY3ROb2RlLnByb3RvdHlwZS5pc09iamVjdE5vZGUgPSB0cnVlO1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuICBPYmplY3ROb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHZhciBldmFsRW50cmllcyA9IHt9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KSh0aGlzLnByb3BlcnRpZXMsIGtleSkpIHtcbiAgICAgICAgLy8gd2Ugc3RyaW5naWZ5L3BhcnNlIHRoZSBrZXkgaGVyZSB0byByZXNvbHZlIHVuaWNvZGUgY2hhcmFjdGVycyxcbiAgICAgICAgLy8gc28geW91IGNhbm5vdCBjcmVhdGUgYSBrZXkgbGlrZSB7XCJjb1xcXFx1MDA2RXN0cnVjdG9yXCI6IG51bGx9XG4gICAgICAgIHZhciBzdHJpbmdpZmllZEtleSA9ICgwLCBfc3RyaW5nLnN0cmluZ2lmeSkoa2V5KTtcbiAgICAgICAgdmFyIHBhcnNlZEtleSA9IEpTT04ucGFyc2Uoc3RyaW5naWZpZWRLZXkpO1xuXG4gICAgICAgIGlmICghKDAsIF9jdXN0b21zLmlzU2FmZVByb3BlcnR5KSh0aGlzLnByb3BlcnRpZXMsIHBhcnNlZEtleSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGFjY2VzcyB0byBwcm9wZXJ0eSBcIicgKyBwYXJzZWRLZXkgKyAnXCInKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2YWxFbnRyaWVzW3BhcnNlZEtleV0gPSB0aGlzLnByb3BlcnRpZXNba2V5XS5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxPYmplY3ROb2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICB2YXIgb2JqID0ge307XG5cbiAgICAgIGZvciAodmFyIF9rZXkgaW4gZXZhbEVudHJpZXMpIHtcbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShldmFsRW50cmllcywgX2tleSkpIHtcbiAgICAgICAgICBvYmpbX2tleV0gPSBldmFsRW50cmllc1tfa2V5XShzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9iajtcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIE9iamVjdE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5wcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKHRoaXMucHJvcGVydGllcywga2V5KSkge1xuICAgICAgICBjYWxsYmFjayh0aGlzLnByb3BlcnRpZXNba2V5XSwgJ3Byb3BlcnRpZXNbJyArICgwLCBfc3RyaW5nLnN0cmluZ2lmeSkoa2V5KSArICddJywgdGhpcyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IE9iamVjdE5vZGUgaGF2aW5nIGl0J3MgY2hpbGRzIGJlIHRoZSByZXN1bHRzIG9mIGNhbGxpbmdcbiAgICogdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBjaGlsZHMgb2YgdGhlIG9yaWdpbmFsIG5vZGUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKTogTm9kZX0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge09iamVjdE5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlXG4gICAqL1xuXG5cbiAgT2JqZWN0Tm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB7fTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnByb3BlcnRpZXMpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodGhpcy5wcm9wZXJ0aWVzLCBrZXkpKSB7XG4gICAgICAgIHByb3BlcnRpZXNba2V5XSA9IHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLnByb3BlcnRpZXNba2V5XSwgJ3Byb3BlcnRpZXNbJyArICgwLCBfc3RyaW5nLnN0cmluZ2lmeSkoa2V5KSArICddJywgdGhpcykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgT2JqZWN0Tm9kZShwcm9wZXJ0aWVzKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7T2JqZWN0Tm9kZX1cbiAgICovXG5cblxuICBPYmplY3ROb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KSh0aGlzLnByb3BlcnRpZXMsIGtleSkpIHtcbiAgICAgICAgcHJvcGVydGllc1trZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBPYmplY3ROb2RlKHByb3BlcnRpZXMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKiBAb3ZlcnJpZGVcbiAgICovXG5cblxuICBPYmplY3ROb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBlbnRyaWVzID0gW107XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5wcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKHRoaXMucHJvcGVydGllcywga2V5KSkge1xuICAgICAgICBlbnRyaWVzLnB1c2goKDAsIF9zdHJpbmcuc3RyaW5naWZ5KShrZXkpICsgJzogJyArIHRoaXMucHJvcGVydGllc1trZXldLnRvU3RyaW5nKG9wdGlvbnMpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJ3snICsgZW50cmllcy5qb2luKCcsICcpICsgJ30nO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIE9iamVjdE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnT2JqZWN0Tm9kZScsXG4gICAgICBwcm9wZXJ0aWVzOiB0aGlzLnByb3BlcnRpZXNcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYW4gT3BlcmF0b3JOb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJPYmplY3ROb2RlXCIsIFwicHJvcGVydGllc1wiOiB7Li4ufX1gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtPYmplY3ROb2RlfVxuICAgKi9cblxuXG4gIE9iamVjdE5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgT2JqZWN0Tm9kZShqc29uLnByb3BlcnRpZXMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgT2JqZWN0Tm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgZW50cmllcyA9IFtdO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KSh0aGlzLnByb3BlcnRpZXMsIGtleSkpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKCc8c3BhbiBjbGFzcz1cIm1hdGgtc3ltYm9sIG1hdGgtcHJvcGVydHlcIj4nICsgKDAsIF9zdHJpbmcuZXNjYXBlKShrZXkpICsgJzwvc3Bhbj4nICsgJzxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLWFzc2lnbm1lbnQtb3BlcmF0b3IgbWF0aC1wcm9wZXJ0eS1hc3NpZ25tZW50LW9wZXJhdG9yIG1hdGgtYmluYXJ5LW9wZXJhdG9yXCI+Ojwvc3Bhbj4nICsgdGhpcy5wcm9wZXJ0aWVzW2tleV0udG9IVE1MKG9wdGlvbnMpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLWN1cmx5LXBhcmVudGhlc2lzXCI+ezwvc3Bhbj4nICsgZW50cmllcy5qb2luKCc8c3BhbiBjbGFzcz1cIm1hdGgtc2VwYXJhdG9yXCI+LDwvc3Bhbj4nKSArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1jdXJseS1wYXJlbnRoZXNpc1wiPn08L3NwYW4+JztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBMYVRlWCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIE9iamVjdE5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGVudHJpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnByb3BlcnRpZXMpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodGhpcy5wcm9wZXJ0aWVzLCBrZXkpKSB7XG4gICAgICAgIGVudHJpZXMucHVzaCgnXFxcXG1hdGhiZnsnICsga2V5ICsgJzp9ICYgJyArIHRoaXMucHJvcGVydGllc1trZXldLnRvVGV4KG9wdGlvbnMpICsgJ1xcXFxcXFxcJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFwiXFxcXGxlZnRcXFxce1xcXFxiZWdpbnthcnJheX17bGx9XCIuY29uY2F0KGVudHJpZXMuam9pbignXFxuJyksIFwiXFxcXGVuZHthcnJheX1cXFxccmlnaHRcXFxcfVwiKTtcbiAgfTtcblxuICByZXR1cm4gT2JqZWN0Tm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlT2JqZWN0Tm9kZSA9IGNyZWF0ZU9iamVjdE5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU9wZXJhdG9yTm9kZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2N1c3RvbXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY3VzdG9tc1wiKTtcblxudmFyIF9vcGVyYXRvcnMgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzXCIpO1xuXG52YXIgX2xhdGV4ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2xhdGV4XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnT3BlcmF0b3JOb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ05vZGUnXTtcbnZhciBjcmVhdGVPcGVyYXRvck5vZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgTm9kZSA9IF9yZWYuTm9kZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIE9wZXJhdG9yTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICogQW4gb3BlcmF0b3Igd2l0aCB0d28gYXJndW1lbnRzLCBsaWtlIDIrM1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3AgICAgICAgICAgIE9wZXJhdG9yIG5hbWUsIGZvciBleGFtcGxlICcrJ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gZm4gICAgICAgICAgIEZ1bmN0aW9uIG5hbWUsIGZvciBleGFtcGxlICdhZGQnXG4gICAqIEBwYXJhbSB7Tm9kZVtdfSBhcmdzICAgICAgICAgT3BlcmF0b3IgYXJndW1lbnRzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2ltcGxpY2l0XSAgSXMgdGhpcyBhbiBpbXBsaWNpdCBtdWx0aXBsaWNhdGlvbj9cbiAgICovXG4gIGZ1bmN0aW9uIE9wZXJhdG9yTm9kZShvcCwgZm4sIGFyZ3MsIGltcGxpY2l0KSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE9wZXJhdG9yTm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfSAvLyB2YWxpZGF0ZSBpbnB1dFxuXG5cbiAgICBpZiAodHlwZW9mIG9wICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc3RyaW5nIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJvcFwiJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZyBleHBlY3RlZCBmb3IgcGFyYW1ldGVyIFwiZm5cIicpO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheShhcmdzKSB8fCAhYXJncy5ldmVyeShfaXMuaXNOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgY29udGFpbmluZyBOb2RlcyBleHBlY3RlZCBmb3IgcGFyYW1ldGVyIFwiYXJnc1wiJyk7XG4gICAgfVxuXG4gICAgdGhpcy5pbXBsaWNpdCA9IGltcGxpY2l0ID09PSB0cnVlO1xuICAgIHRoaXMub3AgPSBvcDtcbiAgICB0aGlzLmZuID0gZm47XG4gICAgdGhpcy5hcmdzID0gYXJncyB8fCBbXTtcbiAgfVxuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBPcGVyYXRvck5vZGUucHJvdG90eXBlLnR5cGUgPSAnT3BlcmF0b3JOb2RlJztcbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5pc09wZXJhdG9yTm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICAvLyB2YWxpZGF0ZSBmblxuICAgIGlmICh0eXBlb2YgdGhpcy5mbiAhPT0gJ3N0cmluZycgfHwgISgwLCBfY3VzdG9tcy5pc1NhZmVNZXRob2QpKG1hdGgsIHRoaXMuZm4pKSB7XG4gICAgICBpZiAoIW1hdGhbdGhpcy5mbl0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGdW5jdGlvbiAnICsgdGhpcy5mbiArICcgbWlzc2luZyBpbiBwcm92aWRlZCBuYW1lc3BhY2UgXCJtYXRoXCInKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gYWNjZXNzIHRvIGZ1bmN0aW9uIFwiJyArIHRoaXMuZm4gKyAnXCInKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZm4gPSAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShtYXRoLCB0aGlzLmZuKTtcbiAgICB2YXIgZXZhbEFyZ3MgPSAoMCwgX2FycmF5Lm1hcCkodGhpcy5hcmdzLCBmdW5jdGlvbiAoYXJnKSB7XG4gICAgICByZXR1cm4gYXJnLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcbiAgICB9KTtcblxuICAgIGlmIChldmFsQXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBldmFsQXJnMCA9IGV2YWxBcmdzWzBdO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxPcGVyYXRvck5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGZuKGV2YWxBcmcwKHNjb3BlLCBhcmdzLCBjb250ZXh0KSk7XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoZXZhbEFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICB2YXIgX2V2YWxBcmcgPSBldmFsQXJnc1swXTtcbiAgICAgIHZhciBldmFsQXJnMSA9IGV2YWxBcmdzWzFdO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxPcGVyYXRvck5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGZuKF9ldmFsQXJnKHNjb3BlLCBhcmdzLCBjb250ZXh0KSwgZXZhbEFyZzEoc2NvcGUsIGFyZ3MsIGNvbnRleHQpKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsT3BlcmF0b3JOb2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCAoMCwgX2FycmF5Lm1hcCkoZXZhbEFyZ3MsIGZ1bmN0aW9uIChldmFsQXJnKSB7XG4gICAgICAgICAgcmV0dXJuIGV2YWxBcmcoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICB9KSk7XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2tcbiAgICovXG5cblxuICBPcGVyYXRvck5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgY2FsbGJhY2sodGhpcy5hcmdzW2ldLCAnYXJnc1snICsgaSArICddJywgdGhpcyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IE9wZXJhdG9yTm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7T3BlcmF0b3JOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuYXJnc1tpXSwgJ2FyZ3NbJyArIGkgKyAnXScsIHRoaXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZSh0aGlzLm9wLCB0aGlzLmZuLCBhcmdzLCB0aGlzLmltcGxpY2l0KTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7T3BlcmF0b3JOb2RlfVxuICAgKi9cblxuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUodGhpcy5vcCwgdGhpcy5mbiwgdGhpcy5hcmdzLnNsaWNlKDApLCB0aGlzLmltcGxpY2l0KTtcbiAgfTtcbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhbiB1bmFyeSBPcGVyYXRvck5vZGU6XG4gICAqIGhhcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgbGlrZSBgLWFgLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBhbiB1bmFyeSBvcGVyYXRvciBub2RlLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuXG5cbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5pc1VuYXJ5ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmFyZ3MubGVuZ3RoID09PSAxO1xuICB9O1xuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciB0aGlzIGlzIGEgYmluYXJ5IE9wZXJhdG9yTm9kZTpcbiAgICogaGFzIGV4YWN0bHkgdHdvIGFyZ3VtZW50cywgbGlrZSBgYSArIGJgLlxuICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBhIGJpbmFyeSBvcGVyYXRvciBub2RlLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuXG5cbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5pc0JpbmFyeSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5hcmdzLmxlbmd0aCA9PT0gMjtcbiAgfTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB3aGljaCBwYXJlbnRoZXNlcyBhcmUgbmVjZXNzYXJ5LiBHZXRzIGFuIE9wZXJhdG9yTm9kZVxuICAgKiAod2hpY2ggaXMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUpIGFuZCBhbiBBcnJheSBvZiBOb2Rlc1xuICAgKiAodGhpcy5hcmdzKSBhbmQgcmV0dXJucyBhbiBhcnJheSB3aGVyZSAndHJ1ZScgbWVhbnMgdGhhdCBhbiBhcmd1bWVudFxuICAgKiBoYXMgdG8gYmUgZW5jbG9zZWQgaW4gcGFyZW50aGVzZXMgd2hlcmVhcyAnZmFsc2UnIG1lYW5zIHRoZSBvcHBvc2l0ZS5cbiAgICpcbiAgICogQHBhcmFtIHtPcGVyYXRvck5vZGV9IHJvb3RcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudGhlc2lzXG4gICAqIEBwYXJhbSB7Tm9kZVtdfSBhcmdzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gbGF0ZXhcbiAgICogQHJldHVybiB7Ym9vbGVhbltdfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNhbGN1bGF0ZU5lY2Vzc2FyeVBhcmVudGhlc2VzKHJvb3QsIHBhcmVudGhlc2lzLCBpbXBsaWNpdCwgYXJncywgbGF0ZXgpIHtcbiAgICAvLyBwcmVjZWRlbmNlIG9mIHRoZSByb290IE9wZXJhdG9yTm9kZVxuICAgIHZhciBwcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkocm9vdCwgcGFyZW50aGVzaXMpO1xuICAgIHZhciBhc3NvY2lhdGl2aXR5ID0gKDAsIF9vcGVyYXRvcnMuZ2V0QXNzb2NpYXRpdml0eSkocm9vdCwgcGFyZW50aGVzaXMpO1xuXG4gICAgaWYgKHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCBhcmdzLmxlbmd0aCA+IDIgJiYgcm9vdC5nZXRJZGVudGlmaWVyKCkgIT09ICdPcGVyYXRvck5vZGU6YWRkJyAmJiByb290LmdldElkZW50aWZpZXIoKSAhPT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScpIHtcbiAgICAgIHJldHVybiBhcmdzLm1hcChmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgIHN3aXRjaCAoYXJnLmdldENvbnRlbnQoKS50eXBlKSB7XG4gICAgICAgICAgLy8gTm9kZXMgdGhhdCBkb24ndCBuZWVkIGV4dHJhIHBhcmVudGhlc2VzXG4gICAgICAgICAgY2FzZSAnQXJyYXlOb2RlJzpcbiAgICAgICAgICBjYXNlICdDb25zdGFudE5vZGUnOlxuICAgICAgICAgIGNhc2UgJ1N5bWJvbE5vZGUnOlxuICAgICAgICAgIGNhc2UgJ1BhcmVudGhlc2lzTm9kZSc6XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHZhciByZXN1bHQ7XG5cbiAgICBzd2l0Y2ggKGFyZ3MubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAxOlxuICAgICAgICAvLyB1bmFyeSBvcGVyYXRvcnNcbiAgICAgICAge1xuICAgICAgICAgIC8vIHByZWNlZGVuY2Ugb2YgdGhlIG9wZXJhbmRcbiAgICAgICAgICB2YXIgb3BlcmFuZFByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShhcmdzWzBdLCBwYXJlbnRoZXNpcyk7IC8vIGhhbmRsZSBzcGVjaWFsIGNhc2VzIGZvciBMYVRlWCwgd2hlcmUgc29tZSBvZiB0aGUgcGFyZW50aGVzZXMgYXJlbid0IG5lZWRlZFxuXG4gICAgICAgICAgaWYgKGxhdGV4ICYmIG9wZXJhbmRQcmVjZWRlbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgICB2YXIgb3BlcmFuZElkZW50aWZpZXI7XG4gICAgICAgICAgICB2YXIgcm9vdElkZW50aWZpZXI7XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2tlZXAnKSB7XG4gICAgICAgICAgICAgIG9wZXJhbmRJZGVudGlmaWVyID0gYXJnc1swXS5nZXRJZGVudGlmaWVyKCk7XG4gICAgICAgICAgICAgIHJvb3RJZGVudGlmaWVyID0gcm9vdC5nZXRJZGVudGlmaWVyKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBJZ25vcmUgUGFyZW50aGVzaXMgTm9kZXMgd2hlbiBub3QgaW4gJ2tlZXAnIG1vZGVcbiAgICAgICAgICAgICAgb3BlcmFuZElkZW50aWZpZXIgPSBhcmdzWzBdLmdldENvbnRlbnQoKS5nZXRJZGVudGlmaWVyKCk7XG4gICAgICAgICAgICAgIHJvb3RJZGVudGlmaWVyID0gcm9vdC5nZXRDb250ZW50KCkuZ2V0SWRlbnRpZmllcigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoX29wZXJhdG9ycy5wcm9wZXJ0aWVzW3ByZWNlZGVuY2VdW3Jvb3RJZGVudGlmaWVyXS5sYXRleExlZnRQYXJlbnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IFtmYWxzZV07XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoX29wZXJhdG9ycy5wcm9wZXJ0aWVzW29wZXJhbmRQcmVjZWRlbmNlXVtvcGVyYW5kSWRlbnRpZmllcl0ubGF0ZXhQYXJlbnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IFtmYWxzZV07XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvcGVyYW5kUHJlY2VkZW5jZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gaWYgdGhlIG9wZXJhbmQgaGFzIG5vIGRlZmluZWQgcHJlY2VkZW5jZSwgbm8gcGFyZW5zIGFyZSBuZWVkZWRcbiAgICAgICAgICAgIHJlc3VsdCA9IFtmYWxzZV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAob3BlcmFuZFByZWNlZGVuY2UgPD0gcHJlY2VkZW5jZSkge1xuICAgICAgICAgICAgLy8gaWYgdGhlIG9wZXJhbmRzIHByZWNlZGVuY2UgaXMgbG93ZXIsIHBhcmVucyBhcmUgbmVlZGVkXG4gICAgICAgICAgICByZXN1bHQgPSBbdHJ1ZV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9IC8vIG90aGVyd2lzZSwgbm8gcGFyZW5zIG5lZWRlZFxuXG5cbiAgICAgICAgICByZXN1bHQgPSBbZmFsc2VdO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIC8vIGJpbmFyeSBvcGVyYXRvcnNcbiAgICAgICAge1xuICAgICAgICAgIHZhciBsaHNQYXJlbnM7IC8vIGxlZnQgaGFuZCBzaWRlIG5lZWRzIHBhcmVudGhlc2lzP1xuICAgICAgICAgIC8vIHByZWNlZGVuY2Ugb2YgdGhlIGxlZnQgaGFuZCBzaWRlXG5cbiAgICAgICAgICB2YXIgbGhzUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKGFyZ3NbMF0sIHBhcmVudGhlc2lzKTsgLy8gaXMgdGhlIHJvb3Qgbm9kZSBhc3NvY2lhdGl2ZSB3aXRoIHRoZSBsZWZ0IGhhbmQgc2lkZVxuXG4gICAgICAgICAgdmFyIGFzc29jV2l0aExocyA9ICgwLCBfb3BlcmF0b3JzLmlzQXNzb2NpYXRpdmVXaXRoKShyb290LCBhcmdzWzBdLCBwYXJlbnRoZXNpcyk7XG5cbiAgICAgICAgICBpZiAobGhzUHJlY2VkZW5jZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gaWYgdGhlIGxlZnQgaGFuZCBzaWRlIGhhcyBubyBkZWZpbmVkIHByZWNlZGVuY2UsIG5vIHBhcmVucyBhcmUgbmVlZGVkXG4gICAgICAgICAgICAvLyBGdW5jdGlvbk5vZGUgZm9yIGV4YW1wbGVcbiAgICAgICAgICAgIGxoc1BhcmVucyA9IGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSBpZiAobGhzUHJlY2VkZW5jZSA9PT0gcHJlY2VkZW5jZSAmJiBhc3NvY2lhdGl2aXR5ID09PSAncmlnaHQnICYmICFhc3NvY1dpdGhMaHMpIHtcbiAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgZXF1YWwgcHJlY2VkZW5jZSwgaWYgdGhlIHJvb3Qgbm9kZSBpcyBsZWZ0IGFzc29jaWF0aXZlXG4gICAgICAgICAgICAvLyBwYXJlbnMgYXJlICoqbmV2ZXIqKiBuZWNlc3NhcnkgZm9yIHRoZSBsZWZ0IGhhbmQgc2lkZS5cbiAgICAgICAgICAgIC8vIElmIGl0IGlzIHJpZ2h0IGFzc29jaWF0aXZlIGhvd2V2ZXIsIHBhcmVucyBhcmUgbmVjZXNzYXJ5XG4gICAgICAgICAgICAvLyBpZiB0aGUgcm9vdCBub2RlIGlzbid0IGFzc29jaWF0aXZlIHdpdGggdGhlIGxlZnQgaGFuZCBzaWRlXG4gICAgICAgICAgICBsaHNQYXJlbnMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAobGhzUHJlY2VkZW5jZSA8IHByZWNlZGVuY2UpIHtcbiAgICAgICAgICAgIGxoc1BhcmVucyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxoc1BhcmVucyA9IGZhbHNlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciByaHNQYXJlbnM7IC8vIHJpZ2h0IGhhbmQgc2lkZSBuZWVkcyBwYXJlbnRoZXNpcz9cbiAgICAgICAgICAvLyBwcmVjZWRlbmNlIG9mIHRoZSByaWdodCBoYW5kIHNpZGVcblxuICAgICAgICAgIHZhciByaHNQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkoYXJnc1sxXSwgcGFyZW50aGVzaXMpOyAvLyBpcyB0aGUgcm9vdCBub2RlIGFzc29jaWF0aXZlIHdpdGggdGhlIHJpZ2h0IGhhbmQgc2lkZT9cblxuICAgICAgICAgIHZhciBhc3NvY1dpdGhSaHMgPSAoMCwgX29wZXJhdG9ycy5pc0Fzc29jaWF0aXZlV2l0aCkocm9vdCwgYXJnc1sxXSwgcGFyZW50aGVzaXMpO1xuXG4gICAgICAgICAgaWYgKHJoc1ByZWNlZGVuY2UgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSByaWdodCBoYW5kIHNpZGUgaGFzIG5vIGRlZmluZWQgcHJlY2VkZW5jZSwgbm8gcGFyZW5zIGFyZSBuZWVkZWRcbiAgICAgICAgICAgIC8vIEZ1bmN0aW9uTm9kZSBmb3IgZXhhbXBsZVxuICAgICAgICAgICAgcmhzUGFyZW5zID0gZmFsc2U7XG4gICAgICAgICAgfSBlbHNlIGlmIChyaHNQcmVjZWRlbmNlID09PSBwcmVjZWRlbmNlICYmIGFzc29jaWF0aXZpdHkgPT09ICdsZWZ0JyAmJiAhYXNzb2NXaXRoUmhzKSB7XG4gICAgICAgICAgICAvLyBJbiBjYXNlIG9mIGVxdWFsIHByZWNlZGVuY2UsIGlmIHRoZSByb290IG5vZGUgaXMgcmlnaHQgYXNzb2NpYXRpdmVcbiAgICAgICAgICAgIC8vIHBhcmVucyBhcmUgKipuZXZlcioqIG5lY2Vzc2FyeSBmb3IgdGhlIHJpZ2h0IGhhbmQgc2lkZS5cbiAgICAgICAgICAgIC8vIElmIGl0IGlzIGxlZnQgYXNzb2NpYXRpdmUgaG93ZXZlciwgcGFyZW5zIGFyZSBuZWNlc3NhcnlcbiAgICAgICAgICAgIC8vIGlmIHRoZSByb290IG5vZGUgaXNuJ3QgYXNzb2NpYXRpdmUgd2l0aCB0aGUgcmlnaHQgaGFuZCBzaWRlXG4gICAgICAgICAgICByaHNQYXJlbnMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAocmhzUHJlY2VkZW5jZSA8IHByZWNlZGVuY2UpIHtcbiAgICAgICAgICAgIHJoc1BhcmVucyA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJoc1BhcmVucyA9IGZhbHNlO1xuICAgICAgICAgIH0gLy8gaGFuZGxlIHNwZWNpYWwgY2FzZXMgZm9yIExhVGVYLCB3aGVyZSBzb21lIG9mIHRoZSBwYXJlbnRoZXNlcyBhcmVuJ3QgbmVlZGVkXG5cblxuICAgICAgICAgIGlmIChsYXRleCkge1xuICAgICAgICAgICAgdmFyIF9yb290SWRlbnRpZmllcjtcblxuICAgICAgICAgICAgdmFyIGxoc0lkZW50aWZpZXI7XG4gICAgICAgICAgICB2YXIgcmhzSWRlbnRpZmllcjtcblxuICAgICAgICAgICAgaWYgKHBhcmVudGhlc2lzID09PSAna2VlcCcpIHtcbiAgICAgICAgICAgICAgX3Jvb3RJZGVudGlmaWVyID0gcm9vdC5nZXRJZGVudGlmaWVyKCk7XG4gICAgICAgICAgICAgIGxoc0lkZW50aWZpZXIgPSByb290LmFyZ3NbMF0uZ2V0SWRlbnRpZmllcigpO1xuICAgICAgICAgICAgICByaHNJZGVudGlmaWVyID0gcm9vdC5hcmdzWzFdLmdldElkZW50aWZpZXIoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIElnbm9yZSBQYXJlbnRoZXNpc05vZGVzIHdoZW4gbm90IGluICdrZWVwJyBtb2RlXG4gICAgICAgICAgICAgIF9yb290SWRlbnRpZmllciA9IHJvb3QuZ2V0Q29udGVudCgpLmdldElkZW50aWZpZXIoKTtcbiAgICAgICAgICAgICAgbGhzSWRlbnRpZmllciA9IHJvb3QuYXJnc1swXS5nZXRDb250ZW50KCkuZ2V0SWRlbnRpZmllcigpO1xuICAgICAgICAgICAgICByaHNJZGVudGlmaWVyID0gcm9vdC5hcmdzWzFdLmdldENvbnRlbnQoKS5nZXRJZGVudGlmaWVyKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsaHNQcmVjZWRlbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGlmIChfb3BlcmF0b3JzLnByb3BlcnRpZXNbcHJlY2VkZW5jZV1bX3Jvb3RJZGVudGlmaWVyXS5sYXRleExlZnRQYXJlbnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgbGhzUGFyZW5zID0gZmFsc2U7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoX29wZXJhdG9ycy5wcm9wZXJ0aWVzW2xoc1ByZWNlZGVuY2VdW2xoc0lkZW50aWZpZXJdLmxhdGV4UGFyZW5zID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGxoc1BhcmVucyA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyaHNQcmVjZWRlbmNlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIGlmIChfb3BlcmF0b3JzLnByb3BlcnRpZXNbcHJlY2VkZW5jZV1bX3Jvb3RJZGVudGlmaWVyXS5sYXRleFJpZ2h0UGFyZW5zID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJoc1BhcmVucyA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKF9vcGVyYXRvcnMucHJvcGVydGllc1tyaHNQcmVjZWRlbmNlXVtyaHNJZGVudGlmaWVyXS5sYXRleFBhcmVucyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByaHNQYXJlbnMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc3VsdCA9IFtsaHNQYXJlbnMsIHJoc1BhcmVuc107XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChyb290LmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTphZGQnIHx8IHJvb3QuZ2V0SWRlbnRpZmllcigpID09PSAnT3BlcmF0b3JOb2RlOm11bHRpcGx5Jykge1xuICAgICAgICAgIHJlc3VsdCA9IGFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgIHZhciBhcmdQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkoYXJnLCBwYXJlbnRoZXNpcyk7XG4gICAgICAgICAgICB2YXIgYXNzb2NXaXRoQXJnID0gKDAsIF9vcGVyYXRvcnMuaXNBc3NvY2lhdGl2ZVdpdGgpKHJvb3QsIGFyZywgcGFyZW50aGVzaXMpO1xuICAgICAgICAgICAgdmFyIGFyZ0Fzc29jaWF0aXZpdHkgPSAoMCwgX29wZXJhdG9ycy5nZXRBc3NvY2lhdGl2aXR5KShhcmcsIHBhcmVudGhlc2lzKTtcblxuICAgICAgICAgICAgaWYgKGFyZ1ByZWNlZGVuY2UgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gaWYgdGhlIGFyZ3VtZW50IGhhcyBubyBkZWZpbmVkIHByZWNlZGVuY2UsIG5vIHBhcmVucyBhcmUgbmVlZGVkXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJlY2VkZW5jZSA9PT0gYXJnUHJlY2VkZW5jZSAmJiBhc3NvY2lhdGl2aXR5ID09PSBhcmdBc3NvY2lhdGl2aXR5ICYmICFhc3NvY1dpdGhBcmcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGFyZ1ByZWNlZGVuY2UgPCBwcmVjZWRlbmNlKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcbiAgICB9IC8vIGhhbmRsZXMgYW4gZWRnZSBjYXNlIG9mICdhdXRvJyBwYXJlbnRoZXNlcyB3aXRoIGltcGxpY2l0IG11bHRpcGxpY2F0aW9uIG9mIENvbnN0YW50Tm9kZVxuICAgIC8vIEluIHRoYXQgY2FzZSBwcmludCBwYXJlbnRoZXNlcyBmb3IgUGFyZW50aGVzaXNOb2RlcyBldmVuIHRob3VnaCB0aGV5IG5vcm1hbGx5IHdvdWxkbid0IGJlXG4gICAgLy8gcHJpbnRlZC5cblxuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID49IDIgJiYgcm9vdC5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6bXVsdGlwbHknICYmIHJvb3QuaW1wbGljaXQgJiYgcGFyZW50aGVzaXMgPT09ICdhdXRvJyAmJiBpbXBsaWNpdCA9PT0gJ2hpZGUnKSB7XG4gICAgICByZXN1bHQgPSBhcmdzLm1hcChmdW5jdGlvbiAoYXJnLCBpbmRleCkge1xuICAgICAgICB2YXIgaXNQYXJlbnRoZXNpc05vZGUgPSBhcmcuZ2V0SWRlbnRpZmllcigpID09PSAnUGFyZW50aGVzaXNOb2RlJztcblxuICAgICAgICBpZiAocmVzdWx0W2luZGV4XSB8fCBpc1BhcmVudGhlc2lzTm9kZSkge1xuICAgICAgICAgIC8vIHB1dCBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgLyoqXG4gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBwYXJlbnRoZXNpcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA/IG9wdGlvbnMucGFyZW50aGVzaXMgOiAna2VlcCc7XG4gICAgdmFyIGltcGxpY2l0ID0gb3B0aW9ucyAmJiBvcHRpb25zLmltcGxpY2l0ID8gb3B0aW9ucy5pbXBsaWNpdCA6ICdoaWRlJztcbiAgICB2YXIgYXJncyA9IHRoaXMuYXJncztcbiAgICB2YXIgcGFyZW5zID0gY2FsY3VsYXRlTmVjZXNzYXJ5UGFyZW50aGVzZXModGhpcywgcGFyZW50aGVzaXMsIGltcGxpY2l0LCBhcmdzLCBmYWxzZSk7XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vIHVuYXJ5IG9wZXJhdG9yc1xuICAgICAgdmFyIGFzc29jID0gKDAsIF9vcGVyYXRvcnMuZ2V0QXNzb2NpYXRpdml0eSkodGhpcywgcGFyZW50aGVzaXMpO1xuICAgICAgdmFyIG9wZXJhbmQgPSBhcmdzWzBdLnRvU3RyaW5nKG9wdGlvbnMpO1xuXG4gICAgICBpZiAocGFyZW5zWzBdKSB7XG4gICAgICAgIG9wZXJhbmQgPSAnKCcgKyBvcGVyYW5kICsgJyknO1xuICAgICAgfSAvLyBmb3IgZXhhbXBsZSBmb3IgXCJub3RcIiwgd2Ugd2FudCBhIHNwYWNlIGJldHdlZW4gb3BlcmFuZCBhbmQgYXJndW1lbnRcblxuXG4gICAgICB2YXIgb3BJc05hbWVkID0gL1thLXpBLVpdKy8udGVzdCh0aGlzLm9wKTtcblxuICAgICAgaWYgKGFzc29jID09PSAncmlnaHQnKSB7XG4gICAgICAgIC8vIHByZWZpeCBvcGVyYXRvclxuICAgICAgICByZXR1cm4gdGhpcy5vcCArIChvcElzTmFtZWQgPyAnICcgOiAnJykgKyBvcGVyYW5kO1xuICAgICAgfSBlbHNlIGlmIChhc3NvYyA9PT0gJ2xlZnQnKSB7XG4gICAgICAgIC8vIHBvc3RmaXhcbiAgICAgICAgcmV0dXJuIG9wZXJhbmQgKyAob3BJc05hbWVkID8gJyAnIDogJycpICsgdGhpcy5vcDtcbiAgICAgIH0gLy8gZmFsbCBiYWNrIHRvIHBvc3RmaXhcblxuXG4gICAgICByZXR1cm4gb3BlcmFuZCArIHRoaXMub3A7XG4gICAgfSBlbHNlIGlmIChhcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgdmFyIGxocyA9IGFyZ3NbMF0udG9TdHJpbmcob3B0aW9ucyk7IC8vIGxlZnQgaGFuZCBzaWRlXG5cbiAgICAgIHZhciByaHMgPSBhcmdzWzFdLnRvU3RyaW5nKG9wdGlvbnMpOyAvLyByaWdodCBoYW5kIHNpZGVcblxuICAgICAgaWYgKHBhcmVuc1swXSkge1xuICAgICAgICAvLyBsZWZ0IGhhbmQgc2lkZSBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgbGhzID0gJygnICsgbGhzICsgJyknO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW5zWzFdKSB7XG4gICAgICAgIC8vIHJpZ2h0IGhhbmQgc2lkZSBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgcmhzID0gJygnICsgcmhzICsgJyknO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5pbXBsaWNpdCAmJiB0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScgJiYgaW1wbGljaXQgPT09ICdoaWRlJykge1xuICAgICAgICByZXR1cm4gbGhzICsgJyAnICsgcmhzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGhzICsgJyAnICsgdGhpcy5vcCArICcgJyArIHJocztcbiAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID4gMiAmJiAodGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6YWRkJyB8fCB0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScpKSB7XG4gICAgICB2YXIgc3RyaW5naWZpZWRBcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZywgaW5kZXgpIHtcbiAgICAgICAgYXJnID0gYXJnLnRvU3RyaW5nKG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChwYXJlbnNbaW5kZXhdKSB7XG4gICAgICAgICAgLy8gcHV0IGluIHBhcmVudGhlc2lzP1xuICAgICAgICAgIGFyZyA9ICcoJyArIGFyZyArICcpJztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcmc7XG4gICAgICB9KTtcblxuICAgICAgaWYgKHRoaXMuaW1wbGljaXQgJiYgdGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6bXVsdGlwbHknICYmIGltcGxpY2l0ID09PSAnaGlkZScpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmaWVkQXJncy5qb2luKCcgJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzdHJpbmdpZmllZEFyZ3Muam9pbignICcgKyB0aGlzLm9wICsgJyAnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmFsbGJhY2sgdG8gZm9ybWF0dGluZyBhcyBhIGZ1bmN0aW9uIGNhbGxcbiAgICAgIHJldHVybiB0aGlzLmZuICsgJygnICsgdGhpcy5hcmdzLmpvaW4oJywgJykgKyAnKSc7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdPcGVyYXRvck5vZGUnLFxuICAgICAgb3A6IHRoaXMub3AsXG4gICAgICBmbjogdGhpcy5mbixcbiAgICAgIGFyZ3M6IHRoaXMuYXJncyxcbiAgICAgIGltcGxpY2l0OiB0aGlzLmltcGxpY2l0XG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGFuIE9wZXJhdG9yTm9kZSBmcm9tIGl0cyBKU09OIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiT3BlcmF0b3JOb2RlXCIsIFwib3BcIjogXCIrXCIsIFwiZm5cIjogXCJhZGRcIiwgXCJhcmdzXCI6IFsuLi5dLCBcImltcGxpY2l0XCI6IGZhbHNlfWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge09wZXJhdG9yTm9kZX1cbiAgICovXG5cblxuICBPcGVyYXRvck5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKGpzb24ub3AsIGpzb24uZm4sIGpzb24uYXJncywganNvbi5pbXBsaWNpdCk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBPcGVyYXRvck5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJztcbiAgICB2YXIgaW1wbGljaXQgPSBvcHRpb25zICYmIG9wdGlvbnMuaW1wbGljaXQgPyBvcHRpb25zLmltcGxpY2l0IDogJ2hpZGUnO1xuICAgIHZhciBhcmdzID0gdGhpcy5hcmdzO1xuICAgIHZhciBwYXJlbnMgPSBjYWxjdWxhdGVOZWNlc3NhcnlQYXJlbnRoZXNlcyh0aGlzLCBwYXJlbnRoZXNpcywgaW1wbGljaXQsIGFyZ3MsIGZhbHNlKTtcblxuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gdW5hcnkgb3BlcmF0b3JzXG4gICAgICB2YXIgYXNzb2MgPSAoMCwgX29wZXJhdG9ycy5nZXRBc3NvY2lhdGl2aXR5KSh0aGlzLCBwYXJlbnRoZXNpcyk7XG4gICAgICB2YXIgb3BlcmFuZCA9IGFyZ3NbMF0udG9IVE1MKG9wdGlvbnMpO1xuXG4gICAgICBpZiAocGFyZW5zWzBdKSB7XG4gICAgICAgIG9wZXJhbmQgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBvcGVyYW5kICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXNzb2MgPT09ICdyaWdodCcpIHtcbiAgICAgICAgLy8gcHJlZml4IG9wZXJhdG9yXG4gICAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLW9wZXJhdG9yIG1hdGgtdW5hcnktb3BlcmF0b3IgbWF0aC1sZWZ0aGFuZC11bmFyeS1vcGVyYXRvclwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMub3ApICsgJzwvc3Bhbj4nICsgb3BlcmFuZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHBvc3RmaXggd2hlbiBhc3NvYyA9PT0gJ2xlZnQnIG9yIHVuZGVmaW5lZFxuICAgICAgICByZXR1cm4gb3BlcmFuZCArICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC11bmFyeS1vcGVyYXRvciBtYXRoLXJpZ2h0aGFuZC11bmFyeS1vcGVyYXRvclwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMub3ApICsgJzwvc3Bhbj4nO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYXJncy5sZW5ndGggPT09IDIpIHtcbiAgICAgIC8vIGJpbmFyeSBvcGVyYXRvZXNcbiAgICAgIHZhciBsaHMgPSBhcmdzWzBdLnRvSFRNTChvcHRpb25zKTsgLy8gbGVmdCBoYW5kIHNpZGVcblxuICAgICAgdmFyIHJocyA9IGFyZ3NbMV0udG9IVE1MKG9wdGlvbnMpOyAvLyByaWdodCBoYW5kIHNpZGVcblxuICAgICAgaWYgKHBhcmVuc1swXSkge1xuICAgICAgICAvLyBsZWZ0IGhhbmQgc2lkZSBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgbGhzID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgbGhzICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyZW5zWzFdKSB7XG4gICAgICAgIC8vIHJpZ2h0IGhhbmQgc2lkZSBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgcmhzID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgcmhzICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5pbXBsaWNpdCAmJiB0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScgJiYgaW1wbGljaXQgPT09ICdoaWRlJykge1xuICAgICAgICByZXR1cm4gbGhzICsgJzxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvciBtYXRoLWltcGxpY2l0LWJpbmFyeS1vcGVyYXRvclwiPjwvc3Bhbj4nICsgcmhzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGhzICsgJzxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvciBtYXRoLWV4cGxpY2l0LWJpbmFyeS1vcGVyYXRvclwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMub3ApICsgJzwvc3Bhbj4nICsgcmhzO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3RyaW5naWZpZWRBcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZywgaW5kZXgpIHtcbiAgICAgICAgYXJnID0gYXJnLnRvSFRNTChvcHRpb25zKTtcblxuICAgICAgICBpZiAocGFyZW5zW2luZGV4XSkge1xuICAgICAgICAgIC8vIHB1dCBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgICBhcmcgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBhcmcgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDIgJiYgKHRoaXMuZ2V0SWRlbnRpZmllcigpID09PSAnT3BlcmF0b3JOb2RlOmFkZCcgfHwgdGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6bXVsdGlwbHknKSkge1xuICAgICAgICBpZiAodGhpcy5pbXBsaWNpdCAmJiB0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScgJiYgaW1wbGljaXQgPT09ICdoaWRlJykge1xuICAgICAgICAgIHJldHVybiBzdHJpbmdpZmllZEFyZ3Muam9pbignPHNwYW4gY2xhc3M9XCJtYXRoLW9wZXJhdG9yIG1hdGgtYmluYXJ5LW9wZXJhdG9yIG1hdGgtaW1wbGljaXQtYmluYXJ5LW9wZXJhdG9yXCI+PC9zcGFuPicpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmaWVkQXJncy5qb2luKCc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1iaW5hcnktb3BlcmF0b3IgbWF0aC1leHBsaWNpdC1iaW5hcnktb3BlcmF0b3JcIj4nICsgKDAsIF9zdHJpbmcuZXNjYXBlKSh0aGlzLm9wKSArICc8L3NwYW4+Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBmYWxsYmFjayB0byBmb3JtYXR0aW5nIGFzIGEgZnVuY3Rpb24gY2FsbFxuICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1mdW5jdGlvblwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMuZm4pICsgJzwvc3Bhbj48c3BhbiBjbGFzcz1cIm1hdGgtcGFyYW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIHN0cmluZ2lmaWVkQXJncy5qb2luKCc8c3BhbiBjbGFzcz1cIm1hdGgtc2VwYXJhdG9yXCI+LDwvc3Bhbj4nKSArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyYW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPik8L3NwYW4+JztcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBPcGVyYXRvck5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJztcbiAgICB2YXIgaW1wbGljaXQgPSBvcHRpb25zICYmIG9wdGlvbnMuaW1wbGljaXQgPyBvcHRpb25zLmltcGxpY2l0IDogJ2hpZGUnO1xuICAgIHZhciBhcmdzID0gdGhpcy5hcmdzO1xuICAgIHZhciBwYXJlbnMgPSBjYWxjdWxhdGVOZWNlc3NhcnlQYXJlbnRoZXNlcyh0aGlzLCBwYXJlbnRoZXNpcywgaW1wbGljaXQsIGFyZ3MsIHRydWUpO1xuICAgIHZhciBvcCA9IF9sYXRleC5sYXRleE9wZXJhdG9yc1t0aGlzLmZuXTtcbiAgICBvcCA9IHR5cGVvZiBvcCA9PT0gJ3VuZGVmaW5lZCcgPyB0aGlzLm9wIDogb3A7IC8vIGZhbGwgYmFjayB0byB1c2luZyB0aGlzLm9wXG5cbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vIHVuYXJ5IG9wZXJhdG9yc1xuICAgICAgdmFyIGFzc29jID0gKDAsIF9vcGVyYXRvcnMuZ2V0QXNzb2NpYXRpdml0eSkodGhpcywgcGFyZW50aGVzaXMpO1xuICAgICAgdmFyIG9wZXJhbmQgPSBhcmdzWzBdLnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgICBpZiAocGFyZW5zWzBdKSB7XG4gICAgICAgIG9wZXJhbmQgPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChvcGVyYW5kLCBcIlxcXFxyaWdodClcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChhc3NvYyA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAvLyBwcmVmaXggb3BlcmF0b3JcbiAgICAgICAgcmV0dXJuIG9wICsgb3BlcmFuZDtcbiAgICAgIH0gZWxzZSBpZiAoYXNzb2MgPT09ICdsZWZ0Jykge1xuICAgICAgICAvLyBwb3N0Zml4IG9wZXJhdG9yXG4gICAgICAgIHJldHVybiBvcGVyYW5kICsgb3A7XG4gICAgICB9IC8vIGZhbGwgYmFjayB0byBwb3N0Zml4XG5cblxuICAgICAgcmV0dXJuIG9wZXJhbmQgKyBvcDtcbiAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICAvLyBiaW5hcnkgb3BlcmF0b3JzXG4gICAgICB2YXIgbGhzID0gYXJnc1swXTsgLy8gbGVmdCBoYW5kIHNpZGVcblxuICAgICAgdmFyIGxoc1RleCA9IGxocy50b1RleChvcHRpb25zKTtcblxuICAgICAgaWYgKHBhcmVuc1swXSkge1xuICAgICAgICBsaHNUZXggPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChsaHNUZXgsIFwiXFxcXHJpZ2h0KVwiKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJocyA9IGFyZ3NbMV07IC8vIHJpZ2h0IGhhbmQgc2lkZVxuXG4gICAgICB2YXIgcmhzVGV4ID0gcmhzLnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgICBpZiAocGFyZW5zWzFdKSB7XG4gICAgICAgIHJoc1RleCA9IFwiXFxcXGxlZnQoXCIuY29uY2F0KHJoc1RleCwgXCJcXFxccmlnaHQpXCIpO1xuICAgICAgfSAvLyBoYW5kbGUgc29tZSBleGNlcHRpb25zIChkdWUgdG8gdGhlIHdheSBMYVRlWCB3b3JrcylcblxuXG4gICAgICB2YXIgbGhzSWRlbnRpZmllcjtcblxuICAgICAgaWYgKHBhcmVudGhlc2lzID09PSAna2VlcCcpIHtcbiAgICAgICAgbGhzSWRlbnRpZmllciA9IGxocy5nZXRJZGVudGlmaWVyKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZ25vcmUgUGFyZW50aGVzaXNOb2RlcyBpZiBpbiAna2VlcCcgbW9kZVxuICAgICAgICBsaHNJZGVudGlmaWVyID0gbGhzLmdldENvbnRlbnQoKS5nZXRJZGVudGlmaWVyKCk7XG4gICAgICB9XG5cbiAgICAgIHN3aXRjaCAodGhpcy5nZXRJZGVudGlmaWVyKCkpIHtcbiAgICAgICAgY2FzZSAnT3BlcmF0b3JOb2RlOmRpdmlkZSc6XG4gICAgICAgICAgLy8gb3AgY29udGFpbnMgJ1xcXFxmcmFjJyBhdCB0aGlzIHBvaW50XG4gICAgICAgICAgcmV0dXJuIG9wICsgJ3snICsgbGhzVGV4ICsgJ30nICsgJ3snICsgcmhzVGV4ICsgJ30nO1xuXG4gICAgICAgIGNhc2UgJ09wZXJhdG9yTm9kZTpwb3cnOlxuICAgICAgICAgIGxoc1RleCA9ICd7JyArIGxoc1RleCArICd9JztcbiAgICAgICAgICByaHNUZXggPSAneycgKyByaHNUZXggKyAnfSc7XG5cbiAgICAgICAgICBzd2l0Y2ggKGxoc0lkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIGNhc2UgJ0NvbmRpdGlvbmFsTm9kZSc6IC8vXG5cbiAgICAgICAgICAgIGNhc2UgJ09wZXJhdG9yTm9kZTpkaXZpZGUnOlxuICAgICAgICAgICAgICBsaHNUZXggPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChsaHNUZXgsIFwiXFxcXHJpZ2h0KVwiKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdPcGVyYXRvck5vZGU6bXVsdGlwbHknOlxuICAgICAgICAgIGlmICh0aGlzLmltcGxpY2l0ICYmIGltcGxpY2l0ID09PSAnaGlkZScpIHtcbiAgICAgICAgICAgIHJldHVybiBsaHNUZXggKyAnficgKyByaHNUZXg7XG4gICAgICAgICAgfVxuXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsaHNUZXggKyBvcCArIHJoc1RleDtcbiAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID4gMiAmJiAodGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6YWRkJyB8fCB0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScpKSB7XG4gICAgICB2YXIgdGV4aWZpZWRBcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZywgaW5kZXgpIHtcbiAgICAgICAgYXJnID0gYXJnLnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChwYXJlbnNbaW5kZXhdKSB7XG4gICAgICAgICAgYXJnID0gXCJcXFxcbGVmdChcIi5jb25jYXQoYXJnLCBcIlxcXFxyaWdodClcIik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScgJiYgdGhpcy5pbXBsaWNpdCkge1xuICAgICAgICByZXR1cm4gdGV4aWZpZWRBcmdzLmpvaW4oJ34nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRleGlmaWVkQXJncy5qb2luKG9wKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZmFsbCBiYWNrIHRvIGZvcm1hdHRpbmcgYXMgYSBmdW5jdGlvbiBjYWxsXG4gICAgICAvLyBhcyB0aGlzIGlzIGEgZmFsbGJhY2ssIGl0IGRvZXNuJ3QgdXNlXG4gICAgICAvLyBmYW5jeSBmdW5jdGlvbiBuYW1lc1xuICAgICAgcmV0dXJuICdcXFxcbWF0aHJteycgKyB0aGlzLmZuICsgJ31cXFxcbGVmdCgnICsgYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICByZXR1cm4gYXJnLnRvVGV4KG9wdGlvbnMpO1xuICAgICAgfSkuam9pbignLCcpICsgJ1xcXFxyaWdodCknO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEdldCBpZGVudGlmaWVyLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5nZXRJZGVudGlmaWVyID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgKyAnOicgKyB0aGlzLmZuO1xuICB9O1xuXG4gIHJldHVybiBPcGVyYXRvck5vZGU7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWUsXG4gIGlzTm9kZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU9wZXJhdG9yTm9kZSA9IGNyZWF0ZU9wZXJhdG9yTm9kZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUGFyZW50aGVzaXNOb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnUGFyZW50aGVzaXNOb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ05vZGUnXTtcbnZhciBjcmVhdGVQYXJlbnRoZXNpc05vZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgTm9kZSA9IF9yZWYuTm9kZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIFBhcmVudGhlc2lzTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICogQSBwYXJlbnRoZXNpcyBub2RlIGRlc2NyaWJlcyBtYW51YWwgcGFyZW50aGVzaXMgZnJvbSB0aGUgdXNlciBpbnB1dFxuICAgKiBAcGFyYW0ge05vZGV9IGNvbnRlbnRcbiAgICogQGV4dGVuZHMge05vZGV9XG4gICAqL1xuICBmdW5jdGlvbiBQYXJlbnRoZXNpc05vZGUoY29udGVudCkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQYXJlbnRoZXNpc05vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH0gLy8gdmFsaWRhdGUgaW5wdXRcblxuXG4gICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkoY29udGVudCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vZGUgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciBcImNvbnRlbnRcIicpO1xuICAgIH1cblxuICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQ7XG4gIH1cblxuICBQYXJlbnRoZXNpc05vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgUGFyZW50aGVzaXNOb2RlLnByb3RvdHlwZS50eXBlID0gJ1BhcmVudGhlc2lzTm9kZSc7XG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUuaXNQYXJlbnRoZXNpc05vZGUgPSB0cnVlO1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuICBQYXJlbnRoZXNpc05vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGVudC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIGNvbnRlbnQgb2YgdGhlIGN1cnJlbnQgTm9kZS5cbiAgICogQHJldHVybiB7Tm9kZX0gY29udGVudFxuICAgKiBAb3ZlcnJpZGVcbiAgICoqL1xuXG5cbiAgUGFyZW50aGVzaXNOb2RlLnByb3RvdHlwZS5nZXRDb250ZW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnQuZ2V0Q29udGVudCgpO1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrKHRoaXMuY29udGVudCwgJ2NvbnRlbnQnLCB0aGlzKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBQYXJlbnRoZXNpc05vZGUgaGF2aW5nIGl0J3MgY2hpbGRzIGJlIHRoZSByZXN1bHRzIG9mIGNhbGxpbmdcbiAgICogdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBjaGlsZHMgb2YgdGhlIG9yaWdpbmFsIG5vZGUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKSA6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtQYXJlbnRoZXNpc05vZGV9IFJldHVybnMgYSBjbG9uZSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIGNvbnRlbnQgPSBjYWxsYmFjayh0aGlzLmNvbnRlbnQsICdjb250ZW50JywgdGhpcyk7XG4gICAgcmV0dXJuIG5ldyBQYXJlbnRoZXNpc05vZGUoY29udGVudCk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge1BhcmVudGhlc2lzTm9kZX1cbiAgICovXG5cblxuICBQYXJlbnRoZXNpc05vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUGFyZW50aGVzaXNOb2RlKHRoaXMuY29udGVudCk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqIEBvdmVycmlkZVxuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucyAmJiAhb3B0aW9ucy5wYXJlbnRoZXNpcyB8fCBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPT09ICdrZWVwJykge1xuICAgICAgcmV0dXJuICcoJyArIHRoaXMuY29udGVudC50b1N0cmluZyhvcHRpb25zKSArICcpJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jb250ZW50LnRvU3RyaW5nKG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdQYXJlbnRoZXNpc05vZGUnLFxuICAgICAgY29udGVudDogdGhpcy5jb250ZW50XG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGFuIFBhcmVudGhlc2lzTm9kZSBmcm9tIGl0cyBKU09OIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiUGFyZW50aGVzaXNOb2RlXCIsIFwiY29udGVudFwiOiAuLi59YCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG1hdGhqcyBpcyBvcHRpb25hbFxuICAgKiBAcmV0dXJucyB7UGFyZW50aGVzaXNOb2RlfVxuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBQYXJlbnRoZXNpc05vZGUoanNvbi5jb250ZW50KTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBIVE1MIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqIEBvdmVycmlkZVxuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucyAmJiAhb3B0aW9ucy5wYXJlbnRoZXNpcyB8fCBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPT09ICdrZWVwJykge1xuICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIHRoaXMuY29udGVudC50b0hUTUwob3B0aW9ucykgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udGVudC50b0hUTUwob3B0aW9ucyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgUGFyZW50aGVzaXNOb2RlLnByb3RvdHlwZS5fdG9UZXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zICYmICFvcHRpb25zLnBhcmVudGhlc2lzIHx8IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA9PT0gJ2tlZXAnKSB7XG4gICAgICByZXR1cm4gXCJcXFxcbGVmdChcIi5jb25jYXQodGhpcy5jb250ZW50LnRvVGV4KG9wdGlvbnMpLCBcIlxcXFxyaWdodClcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udGVudC50b1RleChvcHRpb25zKTtcbiAgfTtcblxuICByZXR1cm4gUGFyZW50aGVzaXNOb2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVQYXJlbnRoZXNpc05vZGUgPSBjcmVhdGVQYXJlbnRoZXNpc05vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhbmdlTm9kZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb3BlcmF0b3JzID0gcmVxdWlyZShcIi4uL29wZXJhdG9yc1wiKTtcblxudmFyIG5hbWUgPSAnUmFuZ2VOb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ05vZGUnXTtcbnZhciBjcmVhdGVSYW5nZU5vZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgTm9kZSA9IF9yZWYuTm9kZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIFJhbmdlTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICogY3JlYXRlIGEgcmFuZ2VcbiAgICogQHBhcmFtIHtOb2RlfSBzdGFydCAgaW5jbHVkZWQgbG93ZXItYm91bmRcbiAgICogQHBhcmFtIHtOb2RlfSBlbmQgICAgaW5jbHVkZWQgdXBwZXItYm91bmRcbiAgICogQHBhcmFtIHtOb2RlfSBbc3RlcF0gb3B0aW9uYWwgc3RlcFxuICAgKi9cbiAgZnVuY3Rpb24gUmFuZ2VOb2RlKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmFuZ2VOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9IC8vIHZhbGlkYXRlIGlucHV0c1xuXG5cbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShzdGFydCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vZGUgZXhwZWN0ZWQnKTtcbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShlbmQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb2RlIGV4cGVjdGVkJyk7XG4gICAgaWYgKHN0ZXAgJiYgISgwLCBfaXMuaXNOb2RlKShzdGVwKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignTm9kZSBleHBlY3RlZCcpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMykgdGhyb3cgbmV3IEVycm9yKCdUb28gbWFueSBhcmd1bWVudHMnKTtcbiAgICB0aGlzLnN0YXJ0ID0gc3RhcnQ7IC8vIGluY2x1ZGVkIGxvd2VyLWJvdW5kXG5cbiAgICB0aGlzLmVuZCA9IGVuZDsgLy8gaW5jbHVkZWQgdXBwZXItYm91bmRcblxuICAgIHRoaXMuc3RlcCA9IHN0ZXAgfHwgbnVsbDsgLy8gb3B0aW9uYWwgc3RlcFxuICB9XG5cbiAgUmFuZ2VOb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7XG4gIFJhbmdlTm9kZS5wcm90b3R5cGUudHlwZSA9ICdSYW5nZU5vZGUnO1xuICBSYW5nZU5vZGUucHJvdG90eXBlLmlzUmFuZ2VOb2RlID0gdHJ1ZTtcbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhlIFJhbmdlTm9kZSBuZWVkcyB0aGUgYGVuZGAgc3ltYm9sIHRvIGJlIGRlZmluZWQuXG4gICAqIFRoaXMgZW5kIGlzIHRoZSBzaXplIG9mIHRoZSBNYXRyaXggaW4gY3VycmVudCBkaW1lbnNpb24uXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG4gIFJhbmdlTm9kZS5wcm90b3R5cGUubmVlZHNFbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gZmluZCBhbGwgYGVuZGAgc3ltYm9scyBpbiB0aGlzIFJhbmdlTm9kZVxuICAgIHZhciBlbmRTeW1ib2xzID0gdGhpcy5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHJldHVybiAoMCwgX2lzLmlzU3ltYm9sTm9kZSkobm9kZSkgJiYgbm9kZS5uYW1lID09PSAnZW5kJztcbiAgICB9KTtcbiAgICByZXR1cm4gZW5kU3ltYm9scy5sZW5ndGggPiAwO1xuICB9O1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuXG4gIFJhbmdlTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICB2YXIgcmFuZ2UgPSBtYXRoLnJhbmdlO1xuXG4gICAgdmFyIGV2YWxTdGFydCA9IHRoaXMuc3RhcnQuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgdmFyIGV2YWxFbmQgPSB0aGlzLmVuZC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICBpZiAodGhpcy5zdGVwKSB7XG4gICAgICB2YXIgZXZhbFN0ZXAgPSB0aGlzLnN0ZXAuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbFJhbmdlTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gcmFuZ2UoZXZhbFN0YXJ0KHNjb3BlLCBhcmdzLCBjb250ZXh0KSwgZXZhbEVuZChzY29wZSwgYXJncywgY29udGV4dCksIGV2YWxTdGVwKHNjb3BlLCBhcmdzLCBjb250ZXh0KSk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbFJhbmdlTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gcmFuZ2UoZXZhbFN0YXJ0KHNjb3BlLCBhcmdzLCBjb250ZXh0KSwgZXZhbEVuZChzY29wZSwgYXJncywgY29udGV4dCkpO1xuICAgICAgfTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgUmFuZ2VOb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2sodGhpcy5zdGFydCwgJ3N0YXJ0JywgdGhpcyk7XG4gICAgY2FsbGJhY2sodGhpcy5lbmQsICdlbmQnLCB0aGlzKTtcblxuICAgIGlmICh0aGlzLnN0ZXApIHtcbiAgICAgIGNhbGxiYWNrKHRoaXMuc3RlcCwgJ3N0ZXAnLCB0aGlzKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgUmFuZ2VOb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtSYW5nZU5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlXG4gICAqL1xuXG5cbiAgUmFuZ2VOb2RlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlTm9kZSh0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5zdGFydCwgJ3N0YXJ0JywgdGhpcykpLCB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5lbmQsICdlbmQnLCB0aGlzKSksIHRoaXMuc3RlcCAmJiB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5zdGVwLCAnc3RlcCcsIHRoaXMpKSk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge1JhbmdlTm9kZX1cbiAgICovXG5cblxuICBSYW5nZU5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUmFuZ2VOb2RlKHRoaXMuc3RhcnQsIHRoaXMuZW5kLCB0aGlzLnN0ZXAgJiYgdGhpcy5zdGVwKTtcbiAgfTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbmVjZXNzYXJ5IHBhcmVudGhlc2VzXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyZW50aGVzaXNcbiAgICogQHJldHVybiB7T2JqZWN0fSBwYXJlbnRoZXNlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNhbGN1bGF0ZU5lY2Vzc2FyeVBhcmVudGhlc2VzKG5vZGUsIHBhcmVudGhlc2lzKSB7XG4gICAgdmFyIHByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShub2RlLCBwYXJlbnRoZXNpcyk7XG4gICAgdmFyIHBhcmVucyA9IHt9O1xuICAgIHZhciBzdGFydFByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShub2RlLnN0YXJ0LCBwYXJlbnRoZXNpcyk7XG4gICAgcGFyZW5zLnN0YXJ0ID0gc3RhcnRQcmVjZWRlbmNlICE9PSBudWxsICYmIHN0YXJ0UHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlIHx8IHBhcmVudGhlc2lzID09PSAnYWxsJztcblxuICAgIGlmIChub2RlLnN0ZXApIHtcbiAgICAgIHZhciBzdGVwUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKG5vZGUuc3RlcCwgcGFyZW50aGVzaXMpO1xuICAgICAgcGFyZW5zLnN0ZXAgPSBzdGVwUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiBzdGVwUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlIHx8IHBhcmVudGhlc2lzID09PSAnYWxsJztcbiAgICB9XG5cbiAgICB2YXIgZW5kUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKG5vZGUuZW5kLCBwYXJlbnRoZXNpcyk7XG4gICAgcGFyZW5zLmVuZCA9IGVuZFByZWNlZGVuY2UgIT09IG51bGwgJiYgZW5kUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlIHx8IHBhcmVudGhlc2lzID09PSAnYWxsJztcbiAgICByZXR1cm4gcGFyZW5zO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgUmFuZ2VOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBwYXJlbnRoZXNpcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA/IG9wdGlvbnMucGFyZW50aGVzaXMgOiAna2VlcCc7XG4gICAgdmFyIHBhcmVucyA9IGNhbGN1bGF0ZU5lY2Vzc2FyeVBhcmVudGhlc2VzKHRoaXMsIHBhcmVudGhlc2lzKTsgLy8gZm9ybWF0IHN0cmluZyBhcyBzdGFydDpzdGVwOnN0b3BcblxuICAgIHZhciBzdHI7XG4gICAgdmFyIHN0YXJ0ID0gdGhpcy5zdGFydC50b1N0cmluZyhvcHRpb25zKTtcblxuICAgIGlmIChwYXJlbnMuc3RhcnQpIHtcbiAgICAgIHN0YXJ0ID0gJygnICsgc3RhcnQgKyAnKSc7XG4gICAgfVxuXG4gICAgc3RyID0gc3RhcnQ7XG5cbiAgICBpZiAodGhpcy5zdGVwKSB7XG4gICAgICB2YXIgc3RlcCA9IHRoaXMuc3RlcC50b1N0cmluZyhvcHRpb25zKTtcblxuICAgICAgaWYgKHBhcmVucy5zdGVwKSB7XG4gICAgICAgIHN0ZXAgPSAnKCcgKyBzdGVwICsgJyknO1xuICAgICAgfVxuXG4gICAgICBzdHIgKz0gJzonICsgc3RlcDtcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gdGhpcy5lbmQudG9TdHJpbmcob3B0aW9ucyk7XG5cbiAgICBpZiAocGFyZW5zLmVuZCkge1xuICAgICAgZW5kID0gJygnICsgZW5kICsgJyknO1xuICAgIH1cblxuICAgIHN0ciArPSAnOicgKyBlbmQ7XG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBSYW5nZU5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnUmFuZ2VOb2RlJyxcbiAgICAgIHN0YXJ0OiB0aGlzLnN0YXJ0LFxuICAgICAgZW5kOiB0aGlzLmVuZCxcbiAgICAgIHN0ZXA6IHRoaXMuc3RlcFxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBSYW5nZU5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlJhbmdlTm9kZVwiLCBcInN0YXJ0XCI6IC4uLiwgXCJlbmRcIjogLi4uLCBcInN0ZXBcIjogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge1JhbmdlTm9kZX1cbiAgICovXG5cblxuICBSYW5nZU5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgUmFuZ2VOb2RlKGpzb24uc3RhcnQsIGpzb24uZW5kLCBqc29uLnN0ZXApO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBSYW5nZU5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJztcbiAgICB2YXIgcGFyZW5zID0gY2FsY3VsYXRlTmVjZXNzYXJ5UGFyZW50aGVzZXModGhpcywgcGFyZW50aGVzaXMpOyAvLyBmb3JtYXQgc3RyaW5nIGFzIHN0YXJ0OnN0ZXA6c3RvcFxuXG4gICAgdmFyIHN0cjtcbiAgICB2YXIgc3RhcnQgPSB0aGlzLnN0YXJ0LnRvSFRNTChvcHRpb25zKTtcblxuICAgIGlmIChwYXJlbnMuc3RhcnQpIHtcbiAgICAgIHN0YXJ0ID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgc3RhcnQgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgc3RyID0gc3RhcnQ7XG5cbiAgICBpZiAodGhpcy5zdGVwKSB7XG4gICAgICB2YXIgc3RlcCA9IHRoaXMuc3RlcC50b0hUTUwob3B0aW9ucyk7XG5cbiAgICAgIGlmIChwYXJlbnMuc3RlcCkge1xuICAgICAgICBzdGVwID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgc3RlcCArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPik8L3NwYW4+JztcbiAgICAgIH1cblxuICAgICAgc3RyICs9ICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1yYW5nZS1vcGVyYXRvclwiPjo8L3NwYW4+JyArIHN0ZXA7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IHRoaXMuZW5kLnRvSFRNTChvcHRpb25zKTtcblxuICAgIGlmIChwYXJlbnMuZW5kKSB7XG4gICAgICBlbmQgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBlbmQgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgfVxuXG4gICAgc3RyICs9ICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1yYW5nZS1vcGVyYXRvclwiPjo8L3NwYW4+JyArIGVuZDtcbiAgICByZXR1cm4gc3RyO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbXMge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIFJhbmdlTm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBwYXJlbnMgPSBjYWxjdWxhdGVOZWNlc3NhcnlQYXJlbnRoZXNlcyh0aGlzLCBwYXJlbnRoZXNpcyk7XG4gICAgdmFyIHN0ciA9IHRoaXMuc3RhcnQudG9UZXgob3B0aW9ucyk7XG5cbiAgICBpZiAocGFyZW5zLnN0YXJ0KSB7XG4gICAgICBzdHIgPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChzdHIsIFwiXFxcXHJpZ2h0KVwiKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGVwKSB7XG4gICAgICB2YXIgc3RlcCA9IHRoaXMuc3RlcC50b1RleChvcHRpb25zKTtcblxuICAgICAgaWYgKHBhcmVucy5zdGVwKSB7XG4gICAgICAgIHN0ZXAgPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChzdGVwLCBcIlxcXFxyaWdodClcIik7XG4gICAgICB9XG5cbiAgICAgIHN0ciArPSAnOicgKyBzdGVwO1xuICAgIH1cblxuICAgIHZhciBlbmQgPSB0aGlzLmVuZC50b1RleChvcHRpb25zKTtcblxuICAgIGlmIChwYXJlbnMuZW5kKSB7XG4gICAgICBlbmQgPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChlbmQsIFwiXFxcXHJpZ2h0KVwiKTtcbiAgICB9XG5cbiAgICBzdHIgKz0gJzonICsgZW5kO1xuICAgIHJldHVybiBzdHI7XG4gIH07XG5cbiAgcmV0dXJuIFJhbmdlTm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmFuZ2VOb2RlID0gY3JlYXRlUmFuZ2VOb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZWxhdGlvbmFsTm9kZSA9IHZvaWQgMDtcblxudmFyIF9vcGVyYXRvcnMgPSByZXF1aXJlKFwiLi4vb3BlcmF0b3JzXCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX2xhdGV4ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2xhdGV4XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnUmVsYXRpb25hbE5vZGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnTm9kZSddO1xudmFyIGNyZWF0ZVJlbGF0aW9uYWxOb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIE5vZGUgPSBfcmVmLk5vZGU7XG5cbiAgLyoqXG4gICAqIEEgbm9kZSByZXByZXNlbnRpbmcgYSBjaGFpbmVkIGNvbmRpdGlvbmFsIGV4cHJlc3Npb24sIHN1Y2ggYXMgJ3ggPiB5ID4geidcbiAgICpcbiAgICogQHBhcmFtIHtTdHJpbmdbXX0gY29uZGl0aW9uYWxzICAgQW4gYXJyYXkgb2YgY29uZGl0aW9uYWwgb3BlcmF0b3JzIHVzZWQgdG8gY29tcGFyZSB0aGUgcGFyYW1ldGVyc1xuICAgKiBAcGFyYW0ge05vZGVbXX0gcGFyYW1zICAgVGhlIHBhcmFtZXRlcnMgdGhhdCB3aWxsIGJlIGNvbXBhcmVkXG4gICAqXG4gICAqIEBjb25zdHJ1Y3RvciBSZWxhdGlvbmFsTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICovXG4gIGZ1bmN0aW9uIFJlbGF0aW9uYWxOb2RlKGNvbmRpdGlvbmFscywgcGFyYW1zKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlbGF0aW9uYWxOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZGl0aW9uYWxzKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignUGFyYW1ldGVyIGNvbmRpdGlvbmFscyBtdXN0IGJlIGFuIGFycmF5Jyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBhcmFtcykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BhcmFtZXRlciBwYXJhbXMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgIGlmIChjb25kaXRpb25hbHMubGVuZ3RoICE9PSBwYXJhbXMubGVuZ3RoIC0gMSkgdGhyb3cgbmV3IFR5cGVFcnJvcignUGFyYW1ldGVyIHBhcmFtcyBtdXN0IGNvbnRhaW4gZXhhY3RseSBvbmUgbW9yZSBlbGVtZW50IHRoYW4gcGFyYW1ldGVyIGNvbmRpdGlvbmFscycpO1xuICAgIHRoaXMuY29uZGl0aW9uYWxzID0gY29uZGl0aW9uYWxzO1xuICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xuICB9XG5cbiAgUmVsYXRpb25hbE5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgUmVsYXRpb25hbE5vZGUucHJvdG90eXBlLnR5cGUgPSAnUmVsYXRpb25hbE5vZGUnO1xuICBSZWxhdGlvbmFsTm9kZS5wcm90b3R5cGUuaXNSZWxhdGlvbmFsTm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgY29tcGlsZWQgPSB0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24gKHApIHtcbiAgICAgIHJldHVybiBwLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZnVuY3Rpb24gZXZhbFJlbGF0aW9uYWxOb2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICB2YXIgZXZhbExocztcbiAgICAgIHZhciBldmFsUmhzID0gY29tcGlsZWRbMF0oc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNlbGYuY29uZGl0aW9uYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGV2YWxMaHMgPSBldmFsUmhzO1xuICAgICAgICBldmFsUmhzID0gY29tcGlsZWRbaSArIDFdKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgdmFyIGNvbmRGbiA9ICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKG1hdGgsIHNlbGYuY29uZGl0aW9uYWxzW2ldKTtcblxuICAgICAgICBpZiAoIWNvbmRGbihldmFsTGhzLCBldmFsUmhzKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMucGFyYW1zLmZvckVhY2goZnVuY3Rpb24gKG4sIGkpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhuLCAncGFyYW1zWycgKyBpICsgJ10nLCBfdGhpcyk7XG4gICAgfSwgdGhpcyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgUmVsYXRpb25hbE5vZGUgaGF2aW5nIGl0cyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7UmVsYXRpb25hbE5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlXG4gICAqL1xuXG5cbiAgUmVsYXRpb25hbE5vZGUucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgcmV0dXJuIG5ldyBSZWxhdGlvbmFsTm9kZSh0aGlzLmNvbmRpdGlvbmFscy5zbGljZSgpLCB0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24gKG4sIGkpIHtcbiAgICAgIHJldHVybiBfdGhpczIuX2lmTm9kZShjYWxsYmFjayhuLCAncGFyYW1zWycgKyBpICsgJ10nLCBfdGhpczIpKTtcbiAgICB9LCB0aGlzKSk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge1JlbGF0aW9uYWxOb2RlfVxuICAgKi9cblxuXG4gIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFJlbGF0aW9uYWxOb2RlKHRoaXMuY29uZGl0aW9uYWxzLCB0aGlzLnBhcmFtcyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBwYXJlbnRoZXNpcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA/IG9wdGlvbnMucGFyZW50aGVzaXMgOiAna2VlcCc7XG4gICAgdmFyIHByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKSh0aGlzLCBwYXJlbnRoZXNpcyk7XG4gICAgdmFyIHBhcmFtU3RyaW5ncyA9IHRoaXMucGFyYW1zLm1hcChmdW5jdGlvbiAocCwgaW5kZXgpIHtcbiAgICAgIHZhciBwYXJhbVByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShwLCBwYXJlbnRoZXNpcyk7XG4gICAgICByZXR1cm4gcGFyZW50aGVzaXMgPT09ICdhbGwnIHx8IHBhcmFtUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiBwYXJhbVByZWNlZGVuY2UgPD0gcHJlY2VkZW5jZSA/ICcoJyArIHAudG9TdHJpbmcob3B0aW9ucykgKyAnKScgOiBwLnRvU3RyaW5nKG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIHZhciBvcGVyYXRvck1hcCA9IHtcbiAgICAgIGVxdWFsOiAnPT0nLFxuICAgICAgdW5lcXVhbDogJyE9JyxcbiAgICAgIHNtYWxsZXI6ICc8JyxcbiAgICAgIGxhcmdlcjogJz4nLFxuICAgICAgc21hbGxlckVxOiAnPD0nLFxuICAgICAgbGFyZ2VyRXE6ICc+PSdcbiAgICB9O1xuICAgIHZhciByZXQgPSBwYXJhbVN0cmluZ3NbMF07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29uZGl0aW9uYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXQgKz0gJyAnICsgb3BlcmF0b3JNYXBbdGhpcy5jb25kaXRpb25hbHNbaV1dICsgJyAnICsgcGFyYW1TdHJpbmdzW2kgKyAxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ1JlbGF0aW9uYWxOb2RlJyxcbiAgICAgIGNvbmRpdGlvbmFsczogdGhpcy5jb25kaXRpb25hbHMsXG4gICAgICBwYXJhbXM6IHRoaXMucGFyYW1zXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGEgUmVsYXRpb25hbE5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlJlbGF0aW9uYWxOb2RlXCIsIFwiY29uZGl0aW9uXCI6IC4uLiwgXCJ0cnVlRXhwclwiOiAuLi4sIFwiZmFsc2VFeHByXCI6IC4uLn1gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtSZWxhdGlvbmFsTm9kZX1cbiAgICovXG5cblxuICBSZWxhdGlvbmFsTm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBSZWxhdGlvbmFsTm9kZShqc29uLmNvbmRpdGlvbmFscywganNvbi5wYXJhbXMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBSZWxhdGlvbmFsTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBwcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcywgcGFyZW50aGVzaXMpO1xuICAgIHZhciBwYXJhbVN0cmluZ3MgPSB0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24gKHAsIGluZGV4KSB7XG4gICAgICB2YXIgcGFyYW1QcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkocCwgcGFyZW50aGVzaXMpO1xuICAgICAgcmV0dXJuIHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCBwYXJhbVByZWNlZGVuY2UgIT09IG51bGwgJiYgcGFyYW1QcmVjZWRlbmNlIDw9IHByZWNlZGVuY2UgPyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBwLnRvSFRNTChvcHRpb25zKSArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPik8L3NwYW4+JyA6IHAudG9IVE1MKG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIHZhciBvcGVyYXRvck1hcCA9IHtcbiAgICAgIGVxdWFsOiAnPT0nLFxuICAgICAgdW5lcXVhbDogJyE9JyxcbiAgICAgIHNtYWxsZXI6ICc8JyxcbiAgICAgIGxhcmdlcjogJz4nLFxuICAgICAgc21hbGxlckVxOiAnPD0nLFxuICAgICAgbGFyZ2VyRXE6ICc+PSdcbiAgICB9O1xuICAgIHZhciByZXQgPSBwYXJhbVN0cmluZ3NbMF07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29uZGl0aW9uYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXQgKz0gJzxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvciBtYXRoLWV4cGxpY2l0LWJpbmFyeS1vcGVyYXRvclwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKG9wZXJhdG9yTWFwW3RoaXMuY29uZGl0aW9uYWxzW2ldXSkgKyAnPC9zcGFuPicgKyBwYXJhbVN0cmluZ3NbaSArIDFdO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBSZWxhdGlvbmFsTm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBwcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcywgcGFyZW50aGVzaXMpO1xuICAgIHZhciBwYXJhbVN0cmluZ3MgPSB0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24gKHAsIGluZGV4KSB7XG4gICAgICB2YXIgcGFyYW1QcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkocCwgcGFyZW50aGVzaXMpO1xuICAgICAgcmV0dXJuIHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCBwYXJhbVByZWNlZGVuY2UgIT09IG51bGwgJiYgcGFyYW1QcmVjZWRlbmNlIDw9IHByZWNlZGVuY2UgPyAnXFxcXGxlZnQoJyArIHAudG9UZXgob3B0aW9ucykgKyAnXFxyaWdodCknIDogcC50b1RleChvcHRpb25zKTtcbiAgICB9KTtcbiAgICB2YXIgcmV0ID0gcGFyYW1TdHJpbmdzWzBdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbmRpdGlvbmFscy5sZW5ndGg7IGkrKykge1xuICAgICAgcmV0ICs9IF9sYXRleC5sYXRleE9wZXJhdG9yc1t0aGlzLmNvbmRpdGlvbmFsc1tpXV0gKyBwYXJhbVN0cmluZ3NbaSArIDFdO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH07XG5cbiAgcmV0dXJuIFJlbGF0aW9uYWxOb2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZWxhdGlvbmFsTm9kZSA9IGNyZWF0ZVJlbGF0aW9uYWxOb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTeW1ib2xOb2RlID0gdm9pZCAwO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9sYXRleCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9sYXRleFwiKTtcblxudmFyIG5hbWUgPSAnU3ltYm9sTm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydtYXRoJywgJz9Vbml0JywgJ05vZGUnXTtcbnZhciBjcmVhdGVTeW1ib2xOb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIG1hdGggPSBfcmVmLm1hdGgsXG4gICAgICBVbml0ID0gX3JlZi5Vbml0LFxuICAgICAgTm9kZSA9IF9yZWYuTm9kZTtcblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBzb21lIG5hbWUgaXMgYSB2YWx1ZWxlc3MgdW5pdCBsaWtlIFwiaW5jaFwiLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgZnVuY3Rpb24gaXNWYWx1ZWxlc3NVbml0KG5hbWUpIHtcbiAgICByZXR1cm4gVW5pdCA/IFVuaXQuaXNWYWx1ZWxlc3NVbml0KG5hbWUpIDogZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBTeW1ib2xOb2RlXG4gICAqIEBleHRlbmRzIHtOb2RlfVxuICAgKiBBIHN5bWJvbCBub2RlIGNhbiBob2xkIGFuZCByZXNvbHZlIGEgc3ltYm9sXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBleHRlbmRzIHtOb2RlfVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIFN5bWJvbE5vZGUobmFtZSkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTeW1ib2xOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9IC8vIHZhbGlkYXRlIGlucHV0XG5cblxuICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N0cmluZyBleHBlY3RlZCBmb3IgcGFyYW1ldGVyIFwibmFtZVwiJyk7XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgfVxuXG4gIFN5bWJvbE5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUudHlwZSA9ICdTeW1ib2xOb2RlJztcbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUuaXNTeW1ib2xOb2RlID0gdHJ1ZTtcbiAgLyoqXG4gICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLlxuICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuXG4gICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9sc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKilcbiAgICovXG5cbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICB2YXIgbmFtZSA9IHRoaXMubmFtZTtcblxuICAgIGlmIChhcmdOYW1lc1tuYW1lXSA9PT0gdHJ1ZSkge1xuICAgICAgLy8gdGhpcyBpcyBhIEZ1bmN0aW9uQXNzaWdubWVudCBhcmd1bWVudFxuICAgICAgLy8gKGxpa2UgYW4geCB3aGVuIGluc2lkZSB0aGUgZXhwcmVzc2lvbiBvZiBhIGZ1bmN0aW9uIGFzc2lnbm1lbnQgYGYoeCkgPSAuLi5gKVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gYXJnc1tuYW1lXTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChuYW1lIGluIG1hdGgpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIG5hbWUgaW4gc2NvcGUgPyAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShzY29wZSwgbmFtZSkgOiAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShtYXRoLCBuYW1lKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBpc1VuaXQgPSBpc1ZhbHVlbGVzc1VuaXQobmFtZSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBuYW1lIGluIHNjb3BlID8gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkoc2NvcGUsIG5hbWUpIDogaXNVbml0ID8gbmV3IFVuaXQobnVsbCwgbmFtZSkgOiB1bmRlZihuYW1lKTtcbiAgICAgIH07XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIFN5bWJvbE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHt9IC8vIG5vdGhpbmcgdG8gZG8sIHdlIGRvbid0IGhhdmUgY2hpbGRzXG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBTeW1ib2xOb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSkgOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7U3ltYm9sTm9kZX0gUmV0dXJucyBhIGNsb25lIG9mIHRoZSBub2RlXG4gICAqL1xuICA7XG5cbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvbmUoKTtcbiAgfTtcbiAgLyoqXG4gICAqIFRocm93cyBhbiBlcnJvciAnVW5kZWZpbmVkIHN5bWJvbCB7bmFtZX0nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gdW5kZWYobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5kZWZpbmVkIHN5bWJvbCAnICsgbmFtZSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7U3ltYm9sTm9kZX1cbiAgICovXG5cblxuICBTeW1ib2xOb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFN5bWJvbE5vZGUodGhpcy5uYW1lKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgbmFtZSA9ICgwLCBfc3RyaW5nLmVzY2FwZSkodGhpcy5uYW1lKTtcblxuICAgIGlmIChuYW1lID09PSAndHJ1ZScgfHwgbmFtZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtc3ltYm9sIG1hdGgtYm9vbGVhblwiPicgKyBuYW1lICsgJzwvc3Bhbj4nO1xuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ2knKSB7XG4gICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1zeW1ib2wgbWF0aC1pbWFnaW5hcnktc3ltYm9sXCI+JyArIG5hbWUgKyAnPC9zcGFuPic7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAnSW5maW5pdHknKSB7XG4gICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1zeW1ib2wgbWF0aC1pbmZpbml0eS1zeW1ib2xcIj4nICsgbmFtZSArICc8L3NwYW4+JztcbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdOYU4nKSB7XG4gICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1zeW1ib2wgbWF0aC1uYW4tc3ltYm9sXCI+JyArIG5hbWUgKyAnPC9zcGFuPic7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAnbnVsbCcpIHtcbiAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLXN5bWJvbCBtYXRoLW51bGwtc3ltYm9sXCI+JyArIG5hbWUgKyAnPC9zcGFuPic7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtc3ltYm9sIG1hdGgtdW5kZWZpbmVkLXN5bWJvbFwiPicgKyBuYW1lICsgJzwvc3Bhbj4nO1xuICAgIH1cblxuICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLXN5bWJvbFwiPicgKyBuYW1lICsgJzwvc3Bhbj4nO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIFN5bWJvbE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnU3ltYm9sTm9kZScsXG4gICAgICBuYW1lOiB0aGlzLm5hbWVcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYSBTeW1ib2xOb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJTeW1ib2xOb2RlXCIsIG5hbWU6IFwieFwifWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge1N5bWJvbE5vZGV9XG4gICAqL1xuXG5cbiAgU3ltYm9sTm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBTeW1ib2xOb2RlKGpzb24ubmFtZSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgaXNVbml0ID0gZmFsc2U7XG5cbiAgICBpZiAodHlwZW9mIG1hdGhbdGhpcy5uYW1lXSA9PT0gJ3VuZGVmaW5lZCcgJiYgaXNWYWx1ZWxlc3NVbml0KHRoaXMubmFtZSkpIHtcbiAgICAgIGlzVW5pdCA9IHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHN5bWJvbCA9ICgwLCBfbGF0ZXgudG9TeW1ib2wpKHRoaXMubmFtZSwgaXNVbml0KTtcblxuICAgIGlmIChzeW1ib2xbMF0gPT09ICdcXFxcJykge1xuICAgICAgLy8gbm8gc3BhY2UgbmVlZGVkIGlmIHRoZSBzeW1ib2wgc3RhcnRzIHdpdGggJ1xcJ1xuICAgICAgcmV0dXJuIHN5bWJvbDtcbiAgICB9IC8vIHRoZSBzcGFjZSBwcmV2ZW50cyBzeW1ib2xzIGZyb20gYnJlYWtpbmcgc3R1ZmYgbGlrZSAnXFxjZG90JyBpZiBpdCdzIHdyaXR0ZW4gcmlnaHQgYmVmb3JlIHRoZSBzeW1ib2xcblxuXG4gICAgcmV0dXJuICcgJyArIHN5bWJvbDtcbiAgfTtcblxuICByZXR1cm4gU3ltYm9sTm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3ltYm9sTm9kZSA9IGNyZWF0ZVN5bWJvbE5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFjY2Vzc0ZhY3RvcnkgPSBhY2Nlc3NGYWN0b3J5O1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4uLy4uL3RyYW5zZm9ybS91dGlscy9lcnJvclRyYW5zZm9ybVwiKTtcblxudmFyIF9jdXN0b21zID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2N1c3RvbXNcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gYWNjZXNzRmFjdG9yeShfcmVmKSB7XG4gIHZhciBzdWJzZXQgPSBfcmVmLnN1YnNldDtcblxuICAvKipcbiAgICogUmV0cmlldmUgcGFydCBvZiBhbiBvYmplY3Q6XG4gICAqXG4gICAqIC0gUmV0cmlldmUgYSBwcm9wZXJ0eSBmcm9tIGFuIG9iamVjdFxuICAgKiAtIFJldHJpZXZlIGEgcGFydCBvZiBhIHN0cmluZ1xuICAgKiAtIFJldHJpZXZlIGEgbWF0cml4IHN1YnNldFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdCB8IEFycmF5IHwgTWF0cml4IHwgc3RyaW5nfSBvYmplY3RcbiAgICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAgICogQHJldHVybiB7T2JqZWN0IHwgQXJyYXkgfCBNYXRyaXggfCBzdHJpbmd9IFJldHVybnMgdGhlIHN1YnNldFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGFjY2VzcyhvYmplY3QsIGluZGV4KSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIHN1YnNldChvYmplY3QsIGluZGV4KTtcbiAgICAgIH0gZWxzZSBpZiAob2JqZWN0ICYmIHR5cGVvZiBvYmplY3Quc3Vic2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIE1hdHJpeFxuICAgICAgICByZXR1cm4gb2JqZWN0LnN1YnNldChpbmRleCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIFRPRE86IG1vdmUgZ2V0U3RyaW5nU3Vic2V0IGludG8gYSBzZXBhcmF0ZSB1dGlsIGZpbGUsIHVzZSB0aGF0XG4gICAgICAgIHJldHVybiBzdWJzZXQob2JqZWN0LCBpbmRleCk7XG4gICAgICB9IGVsc2UgaWYgKF90eXBlb2Yob2JqZWN0KSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKCFpbmRleC5pc09iamVjdFByb3BlcnR5KCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgYXBwbHkgYSBudW1lcmljIGluZGV4IGFzIG9iamVjdCBwcm9wZXJ0eScpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKG9iamVjdCwgaW5kZXguZ2V0T2JqZWN0UHJvcGVydHkoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgYXBwbHkgaW5kZXg6IHVuc3VwcG9ydGVkIHR5cGUgb2Ygb2JqZWN0Jyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyAoMCwgX2Vycm9yVHJhbnNmb3JtLmVycm9yVHJhbnNmb3JtKShlcnIpO1xuICAgIH1cbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXNzaWduRmFjdG9yeSA9IGFzc2lnbkZhY3Rvcnk7XG5cbnZhciBfZXJyb3JUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi4vLi4vdHJhbnNmb3JtL3V0aWxzL2Vycm9yVHJhbnNmb3JtXCIpO1xuXG52YXIgX2N1c3RvbXMgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvY3VzdG9tc1wiKTtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBhc3NpZ25GYWN0b3J5KF9yZWYpIHtcbiAgdmFyIHN1YnNldCA9IF9yZWYuc3Vic2V0LFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXg7XG5cbiAgLyoqXG4gICAqIFJlcGxhY2UgcGFydCBvZiBhbiBvYmplY3Q6XG4gICAqXG4gICAqIC0gQXNzaWduIGEgcHJvcGVydHkgdG8gYW4gb2JqZWN0XG4gICAqIC0gUmVwbGFjZSBhIHBhcnQgb2YgYSBzdHJpbmdcbiAgICogLSBSZXBsYWNlIGEgbWF0cml4IHN1YnNldFxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdCB8IEFycmF5IHwgTWF0cml4IHwgc3RyaW5nfSBvYmplY3RcbiAgICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcmV0dXJuIHtPYmplY3QgfCBBcnJheSB8IE1hdHJpeCB8IHN0cmluZ30gUmV0dXJucyB0aGUgb3JpZ2luYWwgb2JqZWN0XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlcHQgaW4gY2FzZSBvZiBhIHN0cmluZ1xuICAgKi9cbiAgLy8gVE9ETzogY2hhbmdlIGFzc2lnbiB0byByZXR1cm4gdGhlIHZhbHVlIGluc3RlYWQgb2YgdGhlIG9iamVjdFxuICByZXR1cm4gZnVuY3Rpb24gYXNzaWduKG9iamVjdCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KG9iamVjdCkpIHtcbiAgICAgICAgLy8gd2UgdXNlIG1hdHJpeC5zdWJzZXQgaGVyZSBpbnN0ZWFkIG9mIHRoZSBmdW5jdGlvbiBzdWJzZXQgYmVjYXVzZSB3ZSBtdXN0IG5vdCBjbG9uZSB0aGUgY29udGVudHNcbiAgICAgICAgcmV0dXJuIG1hdHJpeChvYmplY3QpLnN1YnNldChpbmRleCwgdmFsdWUpLnZhbHVlT2YoKTtcbiAgICAgIH0gZWxzZSBpZiAob2JqZWN0ICYmIHR5cGVvZiBvYmplY3Quc3Vic2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIE1hdHJpeFxuICAgICAgICByZXR1cm4gb2JqZWN0LnN1YnNldChpbmRleCwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBUT0RPOiBtb3ZlIHNldFN0cmluZ1N1YnNldCBpbnRvIGEgc2VwYXJhdGUgdXRpbCBmaWxlLCB1c2UgdGhhdFxuICAgICAgICByZXR1cm4gc3Vic2V0KG9iamVjdCwgaW5kZXgsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoX3R5cGVvZihvYmplY3QpID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAoIWluZGV4LmlzT2JqZWN0UHJvcGVydHkoKSkge1xuICAgICAgICAgIHRocm93IFR5cGVFcnJvcignQ2Fubm90IGFwcGx5IGEgbnVtZXJpYyBpbmRleCBhcyBvYmplY3QgcHJvcGVydHknKTtcbiAgICAgICAgfVxuXG4gICAgICAgICgwLCBfY3VzdG9tcy5zZXRTYWZlUHJvcGVydHkpKG9iamVjdCwgaW5kZXguZ2V0T2JqZWN0UHJvcGVydHkoKSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGFwcGx5IGluZGV4OiB1bnN1cHBvcnRlZCB0eXBlIG9mIG9iamVjdCcpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgKDAsIF9lcnJvclRyYW5zZm9ybS5lcnJvclRyYW5zZm9ybSkoZXJyKTtcbiAgICB9XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdldFByZWNlZGVuY2UgPSBnZXRQcmVjZWRlbmNlO1xuZXhwb3J0cy5nZXRBc3NvY2lhdGl2aXR5ID0gZ2V0QXNzb2NpYXRpdml0eTtcbmV4cG9ydHMuaXNBc3NvY2lhdGl2ZVdpdGggPSBpc0Fzc29jaWF0aXZlV2l0aDtcbmV4cG9ydHMucHJvcGVydGllcyA9IHZvaWQgMDtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG4vLyBsaXN0IG9mIGlkZW50aWZpZXJzIG9mIG5vZGVzIGluIG9yZGVyIG9mIHRoZWlyIHByZWNlZGVuY2Vcbi8vIGFsc28gY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgbGVmdC9yaWdodCBhc3NvY2lhdGl2aXR5XG4vLyBhbmQgd2hpY2ggb3RoZXIgb3BlcmF0b3IgdGhlIG9wZXJhdG9yIGlzIGFzc29jaWF0aXZlIHdpdGhcbi8vIEV4YW1wbGU6XG4vLyBhZGRpdGlvbiBpcyBhc3NvY2lhdGl2ZSB3aXRoIGFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbiwgYmVjYXVzZTpcbi8vIChhK2IpK2M9YSsoYitjKVxuLy8gKGErYiktYz1hKyhiLWMpXG4vL1xuLy8gcG9zdGZpeCBvcGVyYXRvcnMgYXJlIGxlZnQgYXNzb2NpYXRpdmUsIHByZWZpeCBvcGVyYXRvcnNcbi8vIGFyZSByaWdodCBhc3NvY2lhdGl2ZVxuLy9cbi8vIEl0J3MgYWxzbyBwb3NzaWJsZSB0byBzZXQgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuLy8gbGF0ZXhQYXJlbnM6IGlmIHNldCB0byBmYWxzZSwgdGhpcyBub2RlIGRvZXNuJ3QgbmVlZCB0byBiZSBlbmNsb3NlZFxuLy8gICAgICAgICAgICAgIGluIHBhcmVudGhlc2VzIHdoZW4gdXNpbmcgTGFUZVhcbi8vIGxhdGV4TGVmdFBhcmVuczogaWYgc2V0IHRvIGZhbHNlLCB0aGlzICFPcGVyYXRvck5vZGUncyFcbi8vICAgICAgICAgICAgICAgICAgbGVmdCBhcmd1bWVudCBkb2Vzbid0IG5lZWQgdG8gYmUgZW5jbG9zZWRcbi8vICAgICAgICAgICAgICAgICAgaW4gcGFyZW50aGVzZXNcbi8vIGxhdGV4UmlnaHRQYXJlbnM6IHRoZSBzYW1lIGZvciB0aGUgcmlnaHQgYXJndW1lbnRcbnZhciBwcm9wZXJ0aWVzID0gW3tcbiAgLy8gYXNzaWdubWVudFxuICBBc3NpZ25tZW50Tm9kZToge30sXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGU6IHt9XG59LCB7XG4gIC8vIGNvbmRpdGlvbmFsIGV4cHJlc3Npb25cbiAgQ29uZGl0aW9uYWxOb2RlOiB7XG4gICAgbGF0ZXhMZWZ0UGFyZW5zOiBmYWxzZSxcbiAgICBsYXRleFJpZ2h0UGFyZW5zOiBmYWxzZSxcbiAgICBsYXRleFBhcmVuczogZmFsc2UgLy8gY29uZGl0aW9uYWxzIGRvbid0IG5lZWQgcGFyZW50aGVzZXMgaW4gTGFUZVggYmVjYXVzZVxuICAgIC8vIHRoZXkgYXJlIDIgZGltZW5zaW9uYWxcblxuICB9XG59LCB7XG4gIC8vIGxvZ2ljYWwgb3JcbiAgJ09wZXJhdG9yTm9kZTpvcic6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9XG59LCB7XG4gIC8vIGxvZ2ljYWwgeG9yXG4gICdPcGVyYXRvck5vZGU6eG9yJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH1cbn0sIHtcbiAgLy8gbG9naWNhbCBhbmRcbiAgJ09wZXJhdG9yTm9kZTphbmQnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyBiaXR3aXNlIG9yXG4gICdPcGVyYXRvck5vZGU6Yml0T3InOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyBiaXR3aXNlIHhvclxuICAnT3BlcmF0b3JOb2RlOmJpdFhvcic6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9XG59LCB7XG4gIC8vIGJpdHdpc2UgYW5kXG4gICdPcGVyYXRvck5vZGU6Yml0QW5kJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH1cbn0sIHtcbiAgLy8gcmVsYXRpb25hbCBvcGVyYXRvcnNcbiAgJ09wZXJhdG9yTm9kZTplcXVhbCc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9LFxuICAnT3BlcmF0b3JOb2RlOnVuZXF1YWwnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTpzbWFsbGVyJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH0sXG4gICdPcGVyYXRvck5vZGU6bGFyZ2VyJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH0sXG4gICdPcGVyYXRvck5vZGU6c21hbGxlckVxJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH0sXG4gICdPcGVyYXRvck5vZGU6bGFyZ2VyRXEnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfSxcbiAgUmVsYXRpb25hbE5vZGU6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9XG59LCB7XG4gIC8vIGJpdHNoaWZ0IG9wZXJhdG9yc1xuICAnT3BlcmF0b3JOb2RlOmxlZnRTaGlmdCc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9LFxuICAnT3BlcmF0b3JOb2RlOnJpZ2h0QXJpdGhTaGlmdCc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9LFxuICAnT3BlcmF0b3JOb2RlOnJpZ2h0TG9nU2hpZnQnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyB1bml0IGNvbnZlcnNpb25cbiAgJ09wZXJhdG9yTm9kZTp0byc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9XG59LCB7XG4gIC8vIHJhbmdlXG4gIFJhbmdlTm9kZToge31cbn0sIHtcbiAgLy8gYWRkaXRpb24sIHN1YnRyYWN0aW9uXG4gICdPcGVyYXRvck5vZGU6YWRkJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFsnT3BlcmF0b3JOb2RlOmFkZCcsICdPcGVyYXRvck5vZGU6c3VidHJhY3QnXVxuICB9LFxuICAnT3BlcmF0b3JOb2RlOnN1YnRyYWN0Jzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH1cbn0sIHtcbiAgLy8gbXVsdGlwbHksIGRpdmlkZSwgbW9kdWx1c1xuICAnT3BlcmF0b3JOb2RlOm11bHRpcGx5Jzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFsnT3BlcmF0b3JOb2RlOm11bHRpcGx5JywgJ09wZXJhdG9yTm9kZTpkaXZpZGUnLCAnT3BlcmF0b3I6ZG90TXVsdGlwbHknLCAnT3BlcmF0b3I6ZG90RGl2aWRlJ11cbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTpkaXZpZGUnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW10sXG4gICAgbGF0ZXhMZWZ0UGFyZW5zOiBmYWxzZSxcbiAgICBsYXRleFJpZ2h0UGFyZW5zOiBmYWxzZSxcbiAgICBsYXRleFBhcmVuczogZmFsc2UgLy8gZnJhY3Rpb25zIGRvbid0IHJlcXVpcmUgcGFyZW50aGVzZXMgYmVjYXVzZVxuICAgIC8vIHRoZXkncmUgMiBkaW1lbnNpb25hbCwgc28gcGFyZW5zIGFyZW4ndCBuZWVkZWRcbiAgICAvLyBpbiBMYVRlWFxuXG4gIH0sXG4gICdPcGVyYXRvck5vZGU6ZG90TXVsdGlwbHknOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogWydPcGVyYXRvck5vZGU6bXVsdGlwbHknLCAnT3BlcmF0b3JOb2RlOmRpdmlkZScsICdPcGVyYXRvck5vZGU6ZG90TXVsdGlwbHknLCAnT3BlcmF0b3JOb2RlOmRvRGl2aWRlJ11cbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTpkb3REaXZpZGUnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTptb2QnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyB1bmFyeSBwcmVmaXggb3BlcmF0b3JzXG4gICdPcGVyYXRvck5vZGU6dW5hcnlQbHVzJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdyaWdodCdcbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTp1bmFyeU1pbnVzJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdyaWdodCdcbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTpiaXROb3QnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ3JpZ2h0J1xuICB9LFxuICAnT3BlcmF0b3JOb2RlOm5vdCc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAncmlnaHQnXG4gIH1cbn0sIHtcbiAgLy8gZXhwb25lbnRpYXRpb25cbiAgJ09wZXJhdG9yTm9kZTpwb3cnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ3JpZ2h0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdLFxuICAgIGxhdGV4UmlnaHRQYXJlbnM6IGZhbHNlIC8vIHRoZSBleHBvbmVudCBkb2Vzbid0IG5lZWQgcGFyZW50aGVzZXMgaW5cbiAgICAvLyBMYVRlWCBiZWNhdXNlIGl0J3MgMiBkaW1lbnNpb25hbFxuICAgIC8vIChpdCdzIG9uIHRvcClcblxuICB9LFxuICAnT3BlcmF0b3JOb2RlOmRvdFBvdyc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAncmlnaHQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyBmYWN0b3JpYWxcbiAgJ09wZXJhdG9yTm9kZTpmYWN0b3JpYWwnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnXG4gIH1cbn0sIHtcbiAgLy8gbWF0cml4IHRyYW5zcG9zZVxuICAnT3BlcmF0b3JOb2RlOnRyYW5zcG9zZSc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCdcbiAgfVxufV07XG4vKipcbiAqIEdldCB0aGUgcHJlY2VkZW5jZSBvZiBhIE5vZGUuXG4gKiBIaWdoZXIgbnVtYmVyIGZvciBoaWdoZXIgcHJlY2VkZW5jZSwgc3RhcnRpbmcgd2l0aCAwLlxuICogUmV0dXJucyBudWxsIGlmIHRoZSBwcmVjZWRlbmNlIGlzIHVuZGVmaW5lZC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IF9ub2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyZW50aGVzaXNcbiAqIEByZXR1cm4ge251bWJlciB8IG51bGx9XG4gKi9cblxuZXhwb3J0cy5wcm9wZXJ0aWVzID0gcHJvcGVydGllcztcblxuZnVuY3Rpb24gZ2V0UHJlY2VkZW5jZShfbm9kZSwgcGFyZW50aGVzaXMpIHtcbiAgdmFyIG5vZGUgPSBfbm9kZTtcblxuICBpZiAocGFyZW50aGVzaXMgIT09ICdrZWVwJykge1xuICAgIC8vIFBhcmVudGhlc2lzTm9kZXMgYXJlIG9ubHkgaWdub3JlZCB3aGVuIG5vdCBpbiAna2VlcCcgbW9kZVxuICAgIG5vZGUgPSBfbm9kZS5nZXRDb250ZW50KCk7XG4gIH1cblxuICB2YXIgaWRlbnRpZmllciA9IG5vZGUuZ2V0SWRlbnRpZmllcigpO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChpZGVudGlmaWVyIGluIHByb3BlcnRpZXNbaV0pIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuLyoqXG4gKiBHZXQgdGhlIGFzc29jaWF0aXZpdHkgb2YgYW4gb3BlcmF0b3IgKGxlZnQgb3IgcmlnaHQpLlxuICogUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nICdsZWZ0JyBvciAncmlnaHQnIG9yIG51bGwgaWZcbiAqIHRoZSBhc3NvY2lhdGl2aXR5IGlzIG5vdCBkZWZpbmVkLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX1cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJlbnRoZXNpc1xuICogQHJldHVybiB7c3RyaW5nfG51bGx9XG4gKiBAdGhyb3dzIHtFcnJvcn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEFzc29jaWF0aXZpdHkoX25vZGUsIHBhcmVudGhlc2lzKSB7XG4gIHZhciBub2RlID0gX25vZGU7XG5cbiAgaWYgKHBhcmVudGhlc2lzICE9PSAna2VlcCcpIHtcbiAgICAvLyBQYXJlbnRoZXNpc05vZGVzIGFyZSBvbmx5IGlnbm9yZWQgd2hlbiBub3QgaW4gJ2tlZXAnIG1vZGVcbiAgICBub2RlID0gX25vZGUuZ2V0Q29udGVudCgpO1xuICB9XG5cbiAgdmFyIGlkZW50aWZpZXIgPSBub2RlLmdldElkZW50aWZpZXIoKTtcbiAgdmFyIGluZGV4ID0gZ2V0UHJlY2VkZW5jZShub2RlLCBwYXJlbnRoZXNpcyk7XG5cbiAgaWYgKGluZGV4ID09PSBudWxsKSB7XG4gICAgLy8gbm9kZSBpc24ndCBpbiB0aGUgbGlzdFxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpbmRleF1baWRlbnRpZmllcl07XG5cbiAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShwcm9wZXJ0eSwgJ2Fzc29jaWF0aXZpdHknKSkge1xuICAgIGlmIChwcm9wZXJ0eS5hc3NvY2lhdGl2aXR5ID09PSAnbGVmdCcpIHtcbiAgICAgIHJldHVybiAnbGVmdCc7XG4gICAgfVxuXG4gICAgaWYgKHByb3BlcnR5LmFzc29jaWF0aXZpdHkgPT09ICdyaWdodCcpIHtcbiAgICAgIHJldHVybiAncmlnaHQnO1xuICAgIH0gLy8gYXNzb2NpYXRpdml0eSBpcyBpbnZhbGlkXG5cblxuICAgIHRocm93IEVycm9yKCdcXCcnICsgaWRlbnRpZmllciArICdcXCcgaGFzIHRoZSBpbnZhbGlkIGFzc29jaWF0aXZpdHkgXFwnJyArIHByb3BlcnR5LmFzc29jaWF0aXZpdHkgKyAnXFwnLicpO1xuICB9IC8vIGFzc29jaWF0aXZpdHkgaXMgdW5kZWZpbmVkXG5cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogQ2hlY2sgaWYgYW4gb3BlcmF0b3IgaXMgYXNzb2NpYXRpdmUgd2l0aCBhbm90aGVyIG9wZXJhdG9yLlxuICogUmV0dXJucyBlaXRoZXIgdHJ1ZSBvciBmYWxzZSBvciBudWxsIGlmIG5vdCBkZWZpbmVkLlxuICpcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZUFcbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZUJcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJlbnRoZXNpc1xuICogQHJldHVybiB7Ym9vbGVhbiB8IG51bGx9XG4gKi9cblxuXG5mdW5jdGlvbiBpc0Fzc29jaWF0aXZlV2l0aChub2RlQSwgbm9kZUIsIHBhcmVudGhlc2lzKSB7XG4gIC8vIFBhcmVudGhlc2lzTm9kZXMgYXJlIG9ubHkgaWdub3JlZCB3aGVuIG5vdCBpbiAna2VlcCcgbW9kZVxuICB2YXIgYSA9IHBhcmVudGhlc2lzICE9PSAna2VlcCcgPyBub2RlQS5nZXRDb250ZW50KCkgOiBub2RlQTtcbiAgdmFyIGIgPSBwYXJlbnRoZXNpcyAhPT0gJ2tlZXAnID8gbm9kZUEuZ2V0Q29udGVudCgpIDogbm9kZUI7XG4gIHZhciBpZGVudGlmaWVyQSA9IGEuZ2V0SWRlbnRpZmllcigpO1xuICB2YXIgaWRlbnRpZmllckIgPSBiLmdldElkZW50aWZpZXIoKTtcbiAgdmFyIGluZGV4ID0gZ2V0UHJlY2VkZW5jZShhLCBwYXJlbnRoZXNpcyk7XG5cbiAgaWYgKGluZGV4ID09PSBudWxsKSB7XG4gICAgLy8gbm9kZSBpc24ndCBpbiB0aGUgbGlzdFxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIHByb3BlcnR5ID0gcHJvcGVydGllc1tpbmRleF1baWRlbnRpZmllckFdO1xuXG4gIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkocHJvcGVydHksICdhc3NvY2lhdGl2ZVdpdGgnKSAmJiBwcm9wZXJ0eS5hc3NvY2lhdGl2ZVdpdGggaW5zdGFuY2VvZiBBcnJheSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydHkuYXNzb2NpYXRpdmVXaXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocHJvcGVydHkuYXNzb2NpYXRpdmVXaXRoW2ldID09PSBpZGVudGlmaWVyQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gYXNzb2NpYXRpdmVXaXRoIGlzIG5vdCBkZWZpbmVkXG5cblxuICByZXR1cm4gbnVsbDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUGFyc2UgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG52YXIgbmFtZSA9ICdwYXJzZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdudW1lcmljJywgJ2NvbmZpZycsICdBY2Nlc3Nvck5vZGUnLCAnQXJyYXlOb2RlJywgJ0Fzc2lnbm1lbnROb2RlJywgJ0Jsb2NrTm9kZScsICdDb25kaXRpb25hbE5vZGUnLCAnQ29uc3RhbnROb2RlJywgJ0Z1bmN0aW9uQXNzaWdubWVudE5vZGUnLCAnRnVuY3Rpb25Ob2RlJywgJ0luZGV4Tm9kZScsICdPYmplY3ROb2RlJywgJ09wZXJhdG9yTm9kZScsICdQYXJlbnRoZXNpc05vZGUnLCAnUmFuZ2VOb2RlJywgJ1JlbGF0aW9uYWxOb2RlJywgJ1N5bWJvbE5vZGUnXTtcbnZhciBjcmVhdGVQYXJzZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBudW1lcmljID0gX3JlZi5udW1lcmljLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBBY2Nlc3Nvck5vZGUgPSBfcmVmLkFjY2Vzc29yTm9kZSxcbiAgICAgIEFycmF5Tm9kZSA9IF9yZWYuQXJyYXlOb2RlLFxuICAgICAgQXNzaWdubWVudE5vZGUgPSBfcmVmLkFzc2lnbm1lbnROb2RlLFxuICAgICAgQmxvY2tOb2RlID0gX3JlZi5CbG9ja05vZGUsXG4gICAgICBDb25kaXRpb25hbE5vZGUgPSBfcmVmLkNvbmRpdGlvbmFsTm9kZSxcbiAgICAgIENvbnN0YW50Tm9kZSA9IF9yZWYuQ29uc3RhbnROb2RlLFxuICAgICAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9IF9yZWYuRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSxcbiAgICAgIEZ1bmN0aW9uTm9kZSA9IF9yZWYuRnVuY3Rpb25Ob2RlLFxuICAgICAgSW5kZXhOb2RlID0gX3JlZi5JbmRleE5vZGUsXG4gICAgICBPYmplY3ROb2RlID0gX3JlZi5PYmplY3ROb2RlLFxuICAgICAgT3BlcmF0b3JOb2RlID0gX3JlZi5PcGVyYXRvck5vZGUsXG4gICAgICBQYXJlbnRoZXNpc05vZGUgPSBfcmVmLlBhcmVudGhlc2lzTm9kZSxcbiAgICAgIFJhbmdlTm9kZSA9IF9yZWYuUmFuZ2VOb2RlLFxuICAgICAgUmVsYXRpb25hbE5vZGUgPSBfcmVmLlJlbGF0aW9uYWxOb2RlLFxuICAgICAgU3ltYm9sTm9kZSA9IF9yZWYuU3ltYm9sTm9kZTtcblxuICAvKipcbiAgICogUGFyc2UgYW4gZXhwcmVzc2lvbi4gUmV0dXJucyBhIG5vZGUgdHJlZSwgd2hpY2ggY2FuIGJlIGV2YWx1YXRlZCBieVxuICAgKiBpbnZva2luZyBub2RlLmV2YWx1YXRlKCkuXG4gICAqXG4gICAqIE5vdGUgdGhlIGV2YWx1YXRpbmcgYXJiaXRyYXJ5IGV4cHJlc3Npb25zIG1heSBpbnZvbHZlIHNlY3VyaXR5IHJpc2tzLFxuICAgKiBzZWUgW2h0dHBzOi8vbWF0aGpzLm9yZy9kb2NzL2V4cHJlc3Npb25zL3NlY3VyaXR5Lmh0bWxdKGh0dHBzOi8vbWF0aGpzLm9yZy9kb2NzL2V4cHJlc3Npb25zL3NlY3VyaXR5Lmh0bWwpIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLnBhcnNlKGV4cHIpXG4gICAqICAgICBtYXRoLnBhcnNlKGV4cHIsIG9wdGlvbnMpXG4gICAqICAgICBtYXRoLnBhcnNlKFtleHByMSwgZXhwcjIsIGV4cHIzLCAuLi5dKVxuICAgKiAgICAgbWF0aC5wYXJzZShbZXhwcjEsIGV4cHIyLCBleHByMywgLi4uXSwgb3B0aW9ucylcbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICpcbiAgICogICAgIGNvbnN0IG5vZGUxID0gbWF0aC5wYXJzZSgnc3FydCgzXjIgKyA0XjIpJylcbiAgICogICAgIG5vZGUxLmNvbXBpbGUoKS5ldmFsdWF0ZSgpIC8vIDVcbiAgICpcbiAgICogICAgIGxldCBzY29wZSA9IHthOjMsIGI6NH1cbiAgICogICAgIGNvbnN0IG5vZGUyID0gbWF0aC5wYXJzZSgnYSAqIGInKSAvLyAxMlxuICAgKiAgICAgY29uc3QgY29kZTIgPSBub2RlMi5jb21waWxlKClcbiAgICogICAgIGNvZGUyLmV2YWx1YXRlKHNjb3BlKSAvLyAxMlxuICAgKiAgICAgc2NvcGUuYSA9IDVcbiAgICogICAgIGNvZGUyLmV2YWx1YXRlKHNjb3BlKSAvLyAyMFxuICAgKlxuICAgKiAgICAgY29uc3Qgbm9kZXMgPSBtYXRoLnBhcnNlKFsnYSA9IDMnLCAnYiA9IDQnLCAnYSAqIGInXSlcbiAgICogICAgIG5vZGVzWzJdLmNvbXBpbGUoKS5ldmFsdWF0ZSgpIC8vIDEyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgZXZhbHVhdGUsIGNvbXBpbGVcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXSB8IE1hdHJpeH0gZXhwciAgICAgICAgICBFeHByZXNzaW9uIHRvIGJlIHBhcnNlZFxuICAgKiBAcGFyYW0ge3tub2RlczogT2JqZWN0PHN0cmluZywgTm9kZT59fSBbb3B0aW9uc10gIEF2YWlsYWJsZSBvcHRpb25zOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gYG5vZGVzYCBhIHNldCBvZiBjdXN0b20gbm9kZXNcbiAgICogQHJldHVybiB7Tm9kZSB8IE5vZGVbXX0gbm9kZVxuICAgKiBAdGhyb3dzIHtFcnJvcn1cbiAgICovXG4gIHZhciBwYXJzZSA9IHR5cGVkKG5hbWUsIHtcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhleHByZXNzaW9uKSB7XG4gICAgICByZXR1cm4gcGFyc2VTdGFydChleHByZXNzaW9uLCB7fSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChleHByZXNzaW9ucykge1xuICAgICAgcmV0dXJuIHBhcnNlTXVsdGlwbGUoZXhwcmVzc2lvbnMsIHt9KTtcbiAgICB9LFxuICAgICdzdHJpbmcsIE9iamVjdCc6IGZ1bmN0aW9uIHN0cmluZ09iamVjdChleHByZXNzaW9uLCBvcHRpb25zKSB7XG4gICAgICB2YXIgZXh0cmFOb2RlcyA9IG9wdGlvbnMubm9kZXMgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubm9kZXMgOiB7fTtcbiAgICAgIHJldHVybiBwYXJzZVN0YXJ0KGV4cHJlc3Npb24sIGV4dHJhTm9kZXMpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBPYmplY3QnOiBwYXJzZU11bHRpcGxlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHBhcnNlTXVsdGlwbGUoZXhwcmVzc2lvbnMpIHtcbiAgICB2YXIgb3B0aW9ucyA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDoge307XG4gICAgdmFyIGV4dHJhTm9kZXMgPSBvcHRpb25zLm5vZGVzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5vZGVzIDoge307IC8vIHBhcnNlIGFuIGFycmF5IG9yIG1hdHJpeCB3aXRoIGV4cHJlc3Npb25zXG5cbiAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKGV4cHJlc3Npb25zLCBmdW5jdGlvbiAoZWxlbSkge1xuICAgICAgaWYgKHR5cGVvZiBlbGVtICE9PSAnc3RyaW5nJykgdGhyb3cgbmV3IFR5cGVFcnJvcignU3RyaW5nIGV4cGVjdGVkJyk7XG4gICAgICByZXR1cm4gcGFyc2VTdGFydChlbGVtLCBleHRyYU5vZGVzKTtcbiAgICB9KTtcbiAgfSAvLyB0b2tlbiB0eXBlcyBlbnVtZXJhdGlvblxuXG5cbiAgdmFyIFRPS0VOVFlQRSA9IHtcbiAgICBOVUxMOiAwLFxuICAgIERFTElNSVRFUjogMSxcbiAgICBOVU1CRVI6IDIsXG4gICAgU1lNQk9MOiAzLFxuICAgIFVOS05PV046IDRcbiAgfTsgLy8gbWFwIHdpdGggYWxsIGRlbGltaXRlcnNcblxuICB2YXIgREVMSU1JVEVSUyA9IHtcbiAgICAnLCc6IHRydWUsXG4gICAgJygnOiB0cnVlLFxuICAgICcpJzogdHJ1ZSxcbiAgICAnWyc6IHRydWUsXG4gICAgJ10nOiB0cnVlLFxuICAgICd7JzogdHJ1ZSxcbiAgICAnfSc6IHRydWUsXG4gICAgJ1wiJzogdHJ1ZSxcbiAgICAnXFwnJzogdHJ1ZSxcbiAgICAnOyc6IHRydWUsXG4gICAgJysnOiB0cnVlLFxuICAgICctJzogdHJ1ZSxcbiAgICAnKic6IHRydWUsXG4gICAgJy4qJzogdHJ1ZSxcbiAgICAnLyc6IHRydWUsXG4gICAgJy4vJzogdHJ1ZSxcbiAgICAnJSc6IHRydWUsXG4gICAgJ14nOiB0cnVlLFxuICAgICcuXic6IHRydWUsXG4gICAgJ34nOiB0cnVlLFxuICAgICchJzogdHJ1ZSxcbiAgICAnJic6IHRydWUsXG4gICAgJ3wnOiB0cnVlLFxuICAgICdefCc6IHRydWUsXG4gICAgJz0nOiB0cnVlLFxuICAgICc6JzogdHJ1ZSxcbiAgICAnPyc6IHRydWUsXG4gICAgJz09JzogdHJ1ZSxcbiAgICAnIT0nOiB0cnVlLFxuICAgICc8JzogdHJ1ZSxcbiAgICAnPic6IHRydWUsXG4gICAgJzw9JzogdHJ1ZSxcbiAgICAnPj0nOiB0cnVlLFxuICAgICc8PCc6IHRydWUsXG4gICAgJz4+JzogdHJ1ZSxcbiAgICAnPj4+JzogdHJ1ZVxuICB9OyAvLyBtYXAgd2l0aCBhbGwgbmFtZWQgZGVsaW1pdGVyc1xuXG4gIHZhciBOQU1FRF9ERUxJTUlURVJTID0ge1xuICAgIG1vZDogdHJ1ZSxcbiAgICB0bzogdHJ1ZSxcbiAgICBcImluXCI6IHRydWUsXG4gICAgYW5kOiB0cnVlLFxuICAgIHhvcjogdHJ1ZSxcbiAgICBvcjogdHJ1ZSxcbiAgICBub3Q6IHRydWVcbiAgfTtcbiAgdmFyIENPTlNUQU5UUyA9IHtcbiAgICBcInRydWVcIjogdHJ1ZSxcbiAgICBcImZhbHNlXCI6IGZhbHNlLFxuICAgIFwibnVsbFwiOiBudWxsLFxuICAgIHVuZGVmaW5lZDogdW5kZWZpbmVkXG4gIH07XG4gIHZhciBOVU1FUklDX0NPTlNUQU5UUyA9IFsnTmFOJywgJ0luZmluaXR5J107XG5cbiAgZnVuY3Rpb24gaW5pdGlhbFN0YXRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBleHRyYU5vZGVzOiB7fSxcbiAgICAgIC8vIGN1cnJlbnQgZXh0cmEgbm9kZXMsIG11c3QgYmUgY2FyZWZ1bCBub3QgdG8gbXV0YXRlXG4gICAgICBleHByZXNzaW9uOiAnJyxcbiAgICAgIC8vIGN1cnJlbnQgZXhwcmVzc2lvblxuICAgICAgY29tbWVudDogJycsXG4gICAgICAvLyBsYXN0IHBhcnNlZCBjb21tZW50XG4gICAgICBpbmRleDogMCxcbiAgICAgIC8vIGN1cnJlbnQgaW5kZXggaW4gZXhwclxuICAgICAgdG9rZW46ICcnLFxuICAgICAgLy8gY3VycmVudCB0b2tlblxuICAgICAgdG9rZW5UeXBlOiBUT0tFTlRZUEUuTlVMTCxcbiAgICAgIC8vIHR5cGUgb2YgdGhlIHRva2VuXG4gICAgICBuZXN0aW5nTGV2ZWw6IDAsXG4gICAgICAvLyBsZXZlbCBvZiBuZXN0aW5nIGluc2lkZSBwYXJhbWV0ZXJzLCB1c2VkIHRvIGlnbm9yZSBuZXdsaW5lIGNoYXJhY3RlcnNcbiAgICAgIGNvbmRpdGlvbmFsTGV2ZWw6IG51bGwgLy8gd2hlbiBhIGNvbmRpdGlvbmFsIGlzIGJlaW5nIHBhcnNlZCwgdGhlIGxldmVsIG9mIHRoZSBjb25kaXRpb25hbCBpcyBzdG9yZWQgaGVyZVxuXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogVmlldyB1cHRvIGBsZW5ndGhgIGNoYXJhY3RlcnMgb2YgdGhlIGV4cHJlc3Npb24gc3RhcnRpbmcgYXQgdGhlIGN1cnJlbnQgY2hhcmFjdGVyLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGg9MV0gTnVtYmVyIG9mIGNoYXJhY3RlcnMgdG8gdmlld1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGN1cnJlbnRTdHJpbmcoc3RhdGUsIGxlbmd0aCkge1xuICAgIHJldHVybiBzdGF0ZS5leHByZXNzaW9uLnN1YnN0cihzdGF0ZS5pbmRleCwgbGVuZ3RoKTtcbiAgfVxuICAvKipcbiAgICogVmlldyB0aGUgY3VycmVudCBjaGFyYWN0ZXIuIFJldHVybnMgJycgaWYgZW5kIG9mIGV4cHJlc3Npb24gaXMgcmVhY2hlZC5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gY3VycmVudENoYXJhY3RlcihzdGF0ZSkge1xuICAgIHJldHVybiBjdXJyZW50U3RyaW5nKHN0YXRlLCAxKTtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBuZXh0IGNoYXJhY3RlciBmcm9tIHRoZSBleHByZXNzaW9uLlxuICAgKiBUaGUgY2hhcmFjdGVyIGlzIHN0b3JlZCBpbnRvIHRoZSBjaGFyIGMuIElmIHRoZSBlbmQgb2YgdGhlIGV4cHJlc3Npb24gaXNcbiAgICogcmVhY2hlZCwgdGhlIGZ1bmN0aW9uIHB1dHMgYW4gZW1wdHkgc3RyaW5nIGluIGMuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gbmV4dChzdGF0ZSkge1xuICAgIHN0YXRlLmluZGV4Kys7XG4gIH1cbiAgLyoqXG4gICAqIFByZXZpZXcgdGhlIHByZXZpb3VzIGNoYXJhY3RlciBmcm9tIHRoZSBleHByZXNzaW9uLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IGNOZXh0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcHJldkNoYXJhY3RlcihzdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZS5leHByZXNzaW9uLmNoYXJBdChzdGF0ZS5pbmRleCAtIDEpO1xuICB9XG4gIC8qKlxuICAgKiBQcmV2aWV3IHRoZSBuZXh0IGNoYXJhY3RlciBmcm9tIHRoZSBleHByZXNzaW9uLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IGNOZXh0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gbmV4dENoYXJhY3RlcihzdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZS5leHByZXNzaW9uLmNoYXJBdChzdGF0ZS5pbmRleCArIDEpO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgbmV4dCB0b2tlbiBpbiB0aGUgY3VycmVudCBzdHJpbmcgZXhwci5cbiAgICogVGhlIHRva2VuIGFuZCB0b2tlbiB0eXBlIGFyZSBhdmFpbGFibGUgYXMgdG9rZW4gYW5kIHRva2VuVHlwZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGdldFRva2VuKHN0YXRlKSB7XG4gICAgc3RhdGUudG9rZW5UeXBlID0gVE9LRU5UWVBFLk5VTEw7XG4gICAgc3RhdGUudG9rZW4gPSAnJztcbiAgICBzdGF0ZS5jb21tZW50ID0gJyc7IC8vIHNraXAgb3ZlciB3aGl0ZXNwYWNlc1xuICAgIC8vIHNwYWNlLCB0YWIsIGFuZCBuZXdsaW5lIHdoZW4gaW5zaWRlIHBhcmFtZXRlcnNcblxuICAgIHdoaWxlIChwYXJzZS5pc1doaXRlc3BhY2UoY3VycmVudENoYXJhY3RlcihzdGF0ZSksIHN0YXRlLm5lc3RpbmdMZXZlbCkpIHtcbiAgICAgIG5leHQoc3RhdGUpO1xuICAgIH0gLy8gc2tpcCBjb21tZW50XG5cblxuICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSA9PT0gJyMnKSB7XG4gICAgICB3aGlsZSAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgIT09ICdcXG4nICYmIGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpICE9PSAnJykge1xuICAgICAgICBzdGF0ZS5jb21tZW50ICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgICAgICBuZXh0KHN0YXRlKTtcbiAgICAgIH1cbiAgICB9IC8vIGNoZWNrIGZvciBlbmQgb2YgZXhwcmVzc2lvblxuXG5cbiAgICBpZiAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICcnKSB7XG4gICAgICAvLyB0b2tlbiBpcyBzdGlsbCBlbXB0eVxuICAgICAgc3RhdGUudG9rZW5UeXBlID0gVE9LRU5UWVBFLkRFTElNSVRFUjtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGNoZWNrIGZvciBuZXcgbGluZSBjaGFyYWN0ZXJcblxuXG4gICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpID09PSAnXFxuJyAmJiAhc3RhdGUubmVzdGluZ0xldmVsKSB7XG4gICAgICBzdGF0ZS50b2tlblR5cGUgPSBUT0tFTlRZUEUuREVMSU1JVEVSO1xuICAgICAgc3RhdGUudG9rZW4gPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBjMSA9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgIHZhciBjMiA9IGN1cnJlbnRTdHJpbmcoc3RhdGUsIDIpO1xuICAgIHZhciBjMyA9IGN1cnJlbnRTdHJpbmcoc3RhdGUsIDMpO1xuXG4gICAgaWYgKGMzLmxlbmd0aCA9PT0gMyAmJiBERUxJTUlURVJTW2MzXSkge1xuICAgICAgc3RhdGUudG9rZW5UeXBlID0gVE9LRU5UWVBFLkRFTElNSVRFUjtcbiAgICAgIHN0YXRlLnRva2VuID0gYzM7XG4gICAgICBuZXh0KHN0YXRlKTtcbiAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBjaGVjayBmb3IgZGVsaW1pdGVycyBjb25zaXN0aW5nIG9mIDIgY2hhcmFjdGVyc1xuXG5cbiAgICBpZiAoYzIubGVuZ3RoID09PSAyICYmIERFTElNSVRFUlNbYzJdKSB7XG4gICAgICBzdGF0ZS50b2tlblR5cGUgPSBUT0tFTlRZUEUuREVMSU1JVEVSO1xuICAgICAgc3RhdGUudG9rZW4gPSBjMjtcbiAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBjaGVjayBmb3IgZGVsaW1pdGVycyBjb25zaXN0aW5nIG9mIDEgY2hhcmFjdGVyXG5cblxuICAgIGlmIChERUxJTUlURVJTW2MxXSkge1xuICAgICAgc3RhdGUudG9rZW5UeXBlID0gVE9LRU5UWVBFLkRFTElNSVRFUjtcbiAgICAgIHN0YXRlLnRva2VuID0gYzE7XG4gICAgICBuZXh0KHN0YXRlKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGNoZWNrIGZvciBhIG51bWJlclxuXG5cbiAgICBpZiAocGFyc2UuaXNEaWdpdERvdChjMSkpIHtcbiAgICAgIHN0YXRlLnRva2VuVHlwZSA9IFRPS0VOVFlQRS5OVU1CRVI7IC8vIGdldCBudW1iZXIsIGNhbiBoYXZlIGEgc2luZ2xlIGRvdFxuXG4gICAgICBpZiAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICcuJykge1xuICAgICAgICBzdGF0ZS50b2tlbiArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgICAgbmV4dChzdGF0ZSk7XG5cbiAgICAgICAgaWYgKCFwYXJzZS5pc0RpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICAgIC8vIHRoaXMgaXMgbm8gbnVtYmVyLCBpdCBpcyBqdXN0IGEgZG90IChjYW4gYmUgZG90IG5vdGF0aW9uKVxuICAgICAgICAgIHN0YXRlLnRva2VuVHlwZSA9IFRPS0VOVFlQRS5ERUxJTUlURVI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdoaWxlIChwYXJzZS5pc0RpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICAgIHN0YXRlLnRva2VuICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgICAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlLmlzRGVjaW1hbE1hcmsoY3VycmVudENoYXJhY3RlcihzdGF0ZSksIG5leHRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICAgIHN0YXRlLnRva2VuICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgICAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHdoaWxlIChwYXJzZS5pc0RpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICBzdGF0ZS50b2tlbiArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICB9IC8vIGNoZWNrIGZvciBleHBvbmVudGlhbCBub3RhdGlvbiBsaWtlIFwiMi4zZS00XCIsIFwiMS4yM2U1MFwiIG9yIFwiMmUrNFwiXG5cblxuICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpID09PSAnRScgfHwgY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICdlJykge1xuICAgICAgICBpZiAocGFyc2UuaXNEaWdpdChuZXh0Q2hhcmFjdGVyKHN0YXRlKSkgfHwgbmV4dENoYXJhY3RlcihzdGF0ZSkgPT09ICctJyB8fCBuZXh0Q2hhcmFjdGVyKHN0YXRlKSA9PT0gJysnKSB7XG4gICAgICAgICAgc3RhdGUudG9rZW4gKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7XG4gICAgICAgICAgbmV4dChzdGF0ZSk7XG5cbiAgICAgICAgICBpZiAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICcrJyB8fCBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSA9PT0gJy0nKSB7XG4gICAgICAgICAgICBzdGF0ZS50b2tlbiArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgICAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgICAgIH0gLy8gU2NpZW50aWZpYyBub3RhdGlvbiBNVVNUIGJlIGZvbGxvd2VkIGJ5IGFuIGV4cG9uZW50XG5cblxuICAgICAgICAgIGlmICghcGFyc2UuaXNEaWdpdChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSkpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnRGlnaXQgZXhwZWN0ZWQsIGdvdCBcIicgKyBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSArICdcIicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHdoaWxlIChwYXJzZS5pc0RpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICAgICAgc3RhdGUudG9rZW4gKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7XG4gICAgICAgICAgICBuZXh0KHN0YXRlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocGFyc2UuaXNEZWNpbWFsTWFyayhjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSwgbmV4dENoYXJhY3RlcihzdGF0ZSkpKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ0RpZ2l0IGV4cGVjdGVkLCBnb3QgXCInICsgY3VycmVudENoYXJhY3RlcihzdGF0ZSkgKyAnXCInKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAobmV4dENoYXJhY3RlcihzdGF0ZSkgPT09ICcuJykge1xuICAgICAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnRGlnaXQgZXhwZWN0ZWQsIGdvdCBcIicgKyBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSArICdcIicpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGNoZWNrIGZvciB2YXJpYWJsZXMsIGZ1bmN0aW9ucywgbmFtZWQgb3BlcmF0b3JzXG5cblxuICAgIGlmIChwYXJzZS5pc0FscGhhKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpLCBwcmV2Q2hhcmFjdGVyKHN0YXRlKSwgbmV4dENoYXJhY3RlcihzdGF0ZSkpKSB7XG4gICAgICB3aGlsZSAocGFyc2UuaXNBbHBoYShjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSwgcHJldkNoYXJhY3RlcihzdGF0ZSksIG5leHRDaGFyYWN0ZXIoc3RhdGUpKSB8fCBwYXJzZS5pc0RpZ2l0KGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICBzdGF0ZS50b2tlbiArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoTkFNRURfREVMSU1JVEVSUywgc3RhdGUudG9rZW4pKSB7XG4gICAgICAgIHN0YXRlLnRva2VuVHlwZSA9IFRPS0VOVFlQRS5ERUxJTUlURVI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGF0ZS50b2tlblR5cGUgPSBUT0tFTlRZUEUuU1lNQk9MO1xuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBzb21ldGhpbmcgdW5rbm93biBpcyBmb3VuZCwgd3JvbmcgY2hhcmFjdGVycyAtPiBhIHN5bnRheCBlcnJvclxuXG5cbiAgICBzdGF0ZS50b2tlblR5cGUgPSBUT0tFTlRZUEUuVU5LTk9XTjtcblxuICAgIHdoaWxlIChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSAhPT0gJycpIHtcbiAgICAgIHN0YXRlLnRva2VuICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgICAgbmV4dChzdGF0ZSk7XG4gICAgfVxuXG4gICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdTeW50YXggZXJyb3IgaW4gcGFydCBcIicgKyBzdGF0ZS50b2tlbiArICdcIicpO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgbmV4dCB0b2tlbiBhbmQgc2tpcCBuZXdsaW5lIHRva2Vuc1xuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpIHtcbiAgICBkbyB7XG4gICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgfSB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICdcXG4nKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG5cbiAgfVxuICAvKipcbiAgICogT3BlbiBwYXJhbWV0ZXJzLlxuICAgKiBOZXcgbGluZSBjaGFyYWN0ZXJzIHdpbGwgYmUgaWdub3JlZCB1bnRpbCBjbG9zZVBhcmFtcyhzdGF0ZSkgaXMgY2FsbGVkXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gb3BlblBhcmFtcyhzdGF0ZSkge1xuICAgIHN0YXRlLm5lc3RpbmdMZXZlbCsrO1xuICB9XG4gIC8qKlxuICAgKiBDbG9zZSBwYXJhbWV0ZXJzLlxuICAgKiBOZXcgbGluZSBjaGFyYWN0ZXJzIHdpbGwgbm8gbG9uZ2VyIGJlIGlnbm9yZWRcbiAgICovXG5cblxuICBmdW5jdGlvbiBjbG9zZVBhcmFtcyhzdGF0ZSkge1xuICAgIHN0YXRlLm5lc3RpbmdMZXZlbC0tO1xuICB9XG4gIC8qKlxuICAgKiBDaGVja3Mgd2hldGhlciB0aGUgY3VycmVudCBjaGFyYWN0ZXIgYGNgIGlzIGEgdmFsaWQgYWxwaGEgY2hhcmFjdGVyOlxuICAgKlxuICAgKiAtIEEgbGF0aW4gbGV0dGVyICh1cHBlciBvciBsb3dlciBjYXNlKSBBc2NpaTogYS16LCBBLVpcbiAgICogLSBBbiB1bmRlcnNjb3JlICAgICAgICAgICAgICAgICAgICAgICAgQXNjaWk6IF9cbiAgICogLSBBIGRvbGxhciBzaWduICAgICAgICAgICAgICAgICAgICAgICAgQXNjaWk6ICRcbiAgICogLSBBIGxhdGluIGxldHRlciB3aXRoIGFjY2VudHMgICAgICAgICAgVW5pY29kZTogXFx1MDBDMCAtIFxcdTAyQUZcbiAgICogLSBBIGdyZWVrIGxldHRlciAgICAgICAgICAgICAgICAgICAgICAgVW5pY29kZTogXFx1MDM3MCAtIFxcdTAzRkZcbiAgICogLSBBIG1hdGhlbWF0aWNhbCBhbHBoYW51bWVyaWMgc3ltYm9sICAgVW5pY29kZTogXFx1ezFENDAwfSAtIFxcdXsxRDdGRn0gZXhjbHVkaW5nIGludmFsaWQgY29kZSBwb2ludHNcbiAgICpcbiAgICogVGhlIHByZXZpb3VzIGFuZCBuZXh0IGNoYXJhY3RlcnMgYXJlIG5lZWRlZCB0byBkZXRlcm1pbmUgd2hldGhlclxuICAgKiB0aGlzIGNoYXJhY3RlciBpcyBwYXJ0IG9mIGEgdW5pY29kZSBzdXJyb2dhdGUgcGFpci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGMgICAgICBDdXJyZW50IGNoYXJhY3RlciBpbiB0aGUgZXhwcmVzc2lvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gY1ByZXYgIFByZXZpb3VzIGNoYXJhY3RlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY05leHQgIE5leHQgY2hhcmFjdGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgcGFyc2UuaXNBbHBoYSA9IGZ1bmN0aW9uIGlzQWxwaGEoYywgY1ByZXYsIGNOZXh0KSB7XG4gICAgcmV0dXJuIHBhcnNlLmlzVmFsaWRMYXRpbk9yR3JlZWsoYykgfHwgcGFyc2UuaXNWYWxpZE1hdGhTeW1ib2woYywgY05leHQpIHx8IHBhcnNlLmlzVmFsaWRNYXRoU3ltYm9sKGNQcmV2LCBjKTtcbiAgfTtcbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciBhIGNoYXJhY3RlciBpcyBhIHZhbGlkIGxhdGluLCBncmVlaywgb3IgbGV0dGVyLWxpa2UgY2hhcmFjdGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgcGFyc2UuaXNWYWxpZExhdGluT3JHcmVlayA9IGZ1bmN0aW9uIGlzVmFsaWRMYXRpbk9yR3JlZWsoYykge1xuICAgIHJldHVybiAvXlthLXpBLVpfJFxcdTAwQzAtXFx1MDJBRlxcdTAzNzAtXFx1MDNGRlxcdTIxMDAtXFx1MjE0Rl0kLy50ZXN0KGMpO1xuICB9O1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHR3byBnaXZlbiAxNiBiaXQgY2hhcmFjdGVycyBmb3JtIGEgc3Vycm9nYXRlIHBhaXIgb2YgYVxuICAgKiB1bmljb2RlIG1hdGggc3ltYm9sLlxuICAgKlxuICAgKiBodHRwczovL3VuaWNvZGUtdGFibGUuY29tL2VuL1xuICAgKiBodHRwczovL3d3dy53aWtpd2FuZC5jb20vZW4vTWF0aGVtYXRpY2FsX29wZXJhdG9yc19hbmRfc3ltYm9sc19pbl9Vbmljb2RlXG4gICAqXG4gICAqIE5vdGU6IEluIEVTNiB3aWxsIGJlIHVuaWNvZGUgYXdhcmU6XG4gICAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI4MDcxMi9qYXZhc2NyaXB0LXVuaWNvZGUtcmVnZXhlc1xuICAgKiBodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvZXM2LXVuaWNvZGUtcmVnZXhcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhpZ2hcbiAgICogQHBhcmFtIHtzdHJpbmd9IGxvd1xuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cblxuXG4gIHBhcnNlLmlzVmFsaWRNYXRoU3ltYm9sID0gZnVuY3Rpb24gaXNWYWxpZE1hdGhTeW1ib2woaGlnaCwgbG93KSB7XG4gICAgcmV0dXJuIC9eW1xcdUQ4MzVdJC8udGVzdChoaWdoKSAmJiAvXltcXHVEQzAwLVxcdURGRkZdJC8udGVzdChsb3cpICYmIC9eW15cXHVEQzU1XFx1REM5RFxcdURDQTBcXHVEQ0ExXFx1RENBM1xcdURDQTRcXHVEQ0E3XFx1RENBOFxcdURDQURcXHVEQ0JBXFx1RENCQ1xcdURDQzRcXHVERDA2XFx1REQwQlxcdUREMENcXHVERDE1XFx1REQxRFxcdUREM0FcXHVERDNGXFx1REQ0NVxcdURENDctXFx1REQ0OVxcdURENTFcXHVERUE2XFx1REVBN1xcdURGQ0NcXHVERkNEXSQvLnRlc3QobG93KTtcbiAgfTtcbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgZ2l2ZW4gY2hhcmFjdGVyIGMgaXMgYSB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXI6IHNwYWNlLCB0YWIsIG9yIGVudGVyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBuZXN0aW5nTGV2ZWxcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG5cblxuICBwYXJzZS5pc1doaXRlc3BhY2UgPSBmdW5jdGlvbiBpc1doaXRlc3BhY2UoYywgbmVzdGluZ0xldmVsKSB7XG4gICAgLy8gVE9ETzogYWxzbyB0YWtlICdcXHInIGNhcnJpYWdlIHJldHVybiBhcyBuZXdsaW5lPyBPciBkb2VzIHRoYXQgZ2l2ZSBwcm9ibGVtcyBvbiBtYWM/XG4gICAgcmV0dXJuIGMgPT09ICcgJyB8fCBjID09PSAnXFx0JyB8fCBjID09PSAnXFxuJyAmJiBuZXN0aW5nTGV2ZWwgPiAwO1xuICB9O1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgYyBpcyBhIGRlY2ltYWwgbWFyayAoZG90KS5cbiAgICogVGhpcyBpcyB0aGUgY2FzZSB3aGVuIGl0J3Mgbm90IHRoZSBzdGFydCBvZiBhIGRlbGltaXRlciAnLionLCAnLi8nLCBvciAnLl4nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjTmV4dFxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cblxuXG4gIHBhcnNlLmlzRGVjaW1hbE1hcmsgPSBmdW5jdGlvbiBpc0RlY2ltYWxNYXJrKGMsIGNOZXh0KSB7XG4gICAgcmV0dXJuIGMgPT09ICcuJyAmJiBjTmV4dCAhPT0gJy8nICYmIGNOZXh0ICE9PSAnKicgJiYgY05leHQgIT09ICdeJztcbiAgfTtcbiAgLyoqXG4gICAqIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gY2hhciBjIGlzIGEgZGlnaXQgb3IgZG90XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjICAgYSBzdHJpbmcgd2l0aCBvbmUgY2hhcmFjdGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgcGFyc2UuaXNEaWdpdERvdCA9IGZ1bmN0aW9uIGlzRGlnaXREb3QoYykge1xuICAgIHJldHVybiBjID49ICcwJyAmJiBjIDw9ICc5JyB8fCBjID09PSAnLic7XG4gIH07XG4gIC8qKlxuICAgKiBjaGVja3MgaWYgdGhlIGdpdmVuIGNoYXIgYyBpcyBhIGRpZ2l0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjICAgYSBzdHJpbmcgd2l0aCBvbmUgY2hhcmFjdGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgcGFyc2UuaXNEaWdpdCA9IGZ1bmN0aW9uIGlzRGlnaXQoYykge1xuICAgIHJldHVybiBjID49ICcwJyAmJiBjIDw9ICc5JztcbiAgfTtcbiAgLyoqXG4gICAqIFN0YXJ0IG9mIHRoZSBwYXJzZSBsZXZlbHMgYmVsb3csIGluIG9yZGVyIG9mIHByZWNlZGVuY2VcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlU3RhcnQoZXhwcmVzc2lvbiwgZXh0cmFOb2Rlcykge1xuICAgIHZhciBzdGF0ZSA9IGluaXRpYWxTdGF0ZSgpO1xuXG4gICAgX2V4dGVuZHMoc3RhdGUsIHtcbiAgICAgIGV4cHJlc3Npb246IGV4cHJlc3Npb24sXG4gICAgICBleHRyYU5vZGVzOiBleHRyYU5vZGVzXG4gICAgfSk7XG5cbiAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUJsb2NrKHN0YXRlKTsgLy8gY2hlY2sgZm9yIGdhcmJhZ2UgYXQgdGhlIGVuZCBvZiB0aGUgZXhwcmVzc2lvblxuICAgIC8vIGFuIGV4cHJlc3Npb24gZW5kcyB3aXRoIGEgZW1wdHkgY2hhcmFjdGVyICcnIGFuZCB0b2tlblR5cGUgREVMSU1JVEVSXG5cbiAgICBpZiAoc3RhdGUudG9rZW4gIT09ICcnKSB7XG4gICAgICBpZiAoc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuREVMSU1JVEVSKSB7XG4gICAgICAgIC8vIHVzZXIgZW50ZXJlZCBhIG5vdCBleGlzdGluZyBvcGVyYXRvciBsaWtlIFwiLy9cIlxuICAgICAgICAvLyBUT0RPOiBnaXZlIGhpbnRzIGZvciBhbGlhc2VzLCBmb3IgZXhhbXBsZSB3aXRoIFwiPD5cIiBnaXZlIGFzIGhpbnQgXCIgZGlkIHlvdSBtZWFuICE9PSA/XCJcbiAgICAgICAgdGhyb3cgY3JlYXRlRXJyb3Ioc3RhdGUsICdVbmV4cGVjdGVkIG9wZXJhdG9yICcgKyBzdGF0ZS50b2tlbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1VuZXhwZWN0ZWQgcGFydCBcIicgKyBzdGF0ZS50b2tlbiArICdcIicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIGJsb2NrIHdpdGggZXhwcmVzc2lvbnMuIEV4cHJlc3Npb25zIGNhbiBiZSBzZXBhcmF0ZWQgYnkgYSBuZXdsaW5lXG4gICAqIGNoYXJhY3RlciAnXFxuJywgb3IgYnkgYSBzZW1pY29sb24gJzsnLiBJbiBjYXNlIG9mIGEgc2VtaWNvbG9uLCBubyBvdXRwdXRcbiAgICogb2YgdGhlIHByZWNlZGluZyBsaW5lIGlzIHJldHVybmVkLlxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VCbG9jayhzdGF0ZSkge1xuICAgIHZhciBub2RlO1xuICAgIHZhciBibG9ja3MgPSBbXTtcbiAgICB2YXIgdmlzaWJsZTtcblxuICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJycgJiYgc3RhdGUudG9rZW4gIT09ICdcXG4nICYmIHN0YXRlLnRva2VuICE9PSAnOycpIHtcbiAgICAgIG5vZGUgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpO1xuICAgICAgbm9kZS5jb21tZW50ID0gc3RhdGUuY29tbWVudDtcbiAgICB9IC8vIFRPRE86IHNpbXBsaWZ5IHRoaXMgbG9vcFxuXG5cbiAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICdcXG4nIHx8IHN0YXRlLnRva2VuID09PSAnOycpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgaWYgKGJsb2Nrcy5sZW5ndGggPT09IDAgJiYgbm9kZSkge1xuICAgICAgICB2aXNpYmxlID0gc3RhdGUudG9rZW4gIT09ICc7JztcbiAgICAgICAgYmxvY2tzLnB1c2goe1xuICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgdmlzaWJsZTogdmlzaWJsZVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuXG4gICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICdcXG4nICYmIHN0YXRlLnRva2VuICE9PSAnOycgJiYgc3RhdGUudG9rZW4gIT09ICcnKSB7XG4gICAgICAgIG5vZGUgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpO1xuICAgICAgICBub2RlLmNvbW1lbnQgPSBzdGF0ZS5jb21tZW50O1xuICAgICAgICB2aXNpYmxlID0gc3RhdGUudG9rZW4gIT09ICc7JztcbiAgICAgICAgYmxvY2tzLnB1c2goe1xuICAgICAgICAgIG5vZGU6IG5vZGUsXG4gICAgICAgICAgdmlzaWJsZTogdmlzaWJsZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoYmxvY2tzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBuZXcgQmxvY2tOb2RlKGJsb2Nrcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghbm9kZSkge1xuICAgICAgICBub2RlID0gbmV3IENvbnN0YW50Tm9kZSh1bmRlZmluZWQpO1xuICAgICAgICBub2RlLmNvbW1lbnQgPSBzdGF0ZS5jb21tZW50O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEFzc2lnbm1lbnQgb2YgYSBmdW5jdGlvbiBvciB2YXJpYWJsZSxcbiAgICogLSBjYW4gYmUgYSB2YXJpYWJsZSBsaWtlICdhPTIuMydcbiAgICogLSBvciBhIHVwZGF0aW5nIGFuIGV4aXN0aW5nIHZhcmlhYmxlIGxpa2UgJ21hdHJpeCgyLDM6NSk9WzYsNyw4XSdcbiAgICogLSBkZWZpbmluZyBhIGZ1bmN0aW9uIGxpa2UgJ2YoeCkgPSB4XjInXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpIHtcbiAgICB2YXIgbmFtZSwgYXJncywgdmFsdWUsIHZhbGlkO1xuICAgIHZhciBub2RlID0gcGFyc2VDb25kaXRpb25hbChzdGF0ZSk7XG5cbiAgICBpZiAoc3RhdGUudG9rZW4gPT09ICc9Jykge1xuICAgICAgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShub2RlKSkge1xuICAgICAgICAvLyBwYXJzZSBhIHZhcmlhYmxlIGFzc2lnbm1lbnQgbGlrZSAnYSA9IDIvMydcbiAgICAgICAgbmFtZSA9IG5vZGUubmFtZTtcbiAgICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7XG4gICAgICAgIHZhbHVlID0gcGFyc2VBc3NpZ25tZW50KHN0YXRlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBc3NpZ25tZW50Tm9kZShuZXcgU3ltYm9sTm9kZShuYW1lKSwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQWNjZXNzb3JOb2RlKShub2RlKSkge1xuICAgICAgICAvLyBwYXJzZSBhIG1hdHJpeCBzdWJzZXQgYXNzaWdubWVudCBsaWtlICdBWzEsMl0gPSA0J1xuICAgICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgICAgdmFsdWUgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpO1xuICAgICAgICByZXR1cm4gbmV3IEFzc2lnbm1lbnROb2RlKG5vZGUub2JqZWN0LCBub2RlLmluZGV4LCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNGdW5jdGlvbk5vZGUpKG5vZGUpICYmICgwLCBfaXMuaXNTeW1ib2xOb2RlKShub2RlLmZuKSkge1xuICAgICAgICAvLyBwYXJzZSBmdW5jdGlvbiBhc3NpZ25tZW50IGxpa2UgJ2YoeCkgPSB4XjInXG4gICAgICAgIHZhbGlkID0gdHJ1ZTtcbiAgICAgICAgYXJncyA9IFtdO1xuICAgICAgICBuYW1lID0gbm9kZS5uYW1lO1xuICAgICAgICBub2RlLmFyZ3MuZm9yRWFjaChmdW5jdGlvbiAoYXJnLCBpbmRleCkge1xuICAgICAgICAgIGlmICgoMCwgX2lzLmlzU3ltYm9sTm9kZSkoYXJnKSkge1xuICAgICAgICAgICAgYXJnc1tpbmRleF0gPSBhcmcubmFtZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgICAgIHZhbHVlID0gcGFyc2VBc3NpZ25tZW50KHN0YXRlKTtcbiAgICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uQXNzaWdubWVudE5vZGUobmFtZSwgYXJncywgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnSW52YWxpZCBsZWZ0IGhhbmQgc2lkZSBvZiBhc3NpZ25tZW50IG9wZXJhdG9yID0nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogY29uZGl0aW9uYWwgb3BlcmF0aW9uXG4gICAqXG4gICAqICAgICBjb25kaXRpb24gPyB0cnVlUGFydCA6IGZhbHNlUGFydFxuICAgKlxuICAgKiBOb3RlOiBjb25kaXRpb25hbCBvcGVyYXRvciBpcyByaWdodC1hc3NvY2lhdGl2ZVxuICAgKlxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VDb25kaXRpb25hbChzdGF0ZSkge1xuICAgIHZhciBub2RlID0gcGFyc2VMb2dpY2FsT3Ioc3RhdGUpO1xuXG4gICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnPycpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgLy8gc2V0IGEgY29uZGl0aW9uYWwgbGV2ZWwsIHRoZSByYW5nZSBvcGVyYXRvciB3aWxsIGJlIGlnbm9yZWQgYXMgbG9uZ1xuICAgICAgLy8gYXMgY29uZGl0aW9uYWxMZXZlbCA9PT0gc3RhdGUubmVzdGluZ0xldmVsLlxuICAgICAgdmFyIHByZXYgPSBzdGF0ZS5jb25kaXRpb25hbExldmVsO1xuICAgICAgc3RhdGUuY29uZGl0aW9uYWxMZXZlbCA9IHN0YXRlLm5lc3RpbmdMZXZlbDtcbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgdmFyIGNvbmRpdGlvbiA9IG5vZGU7XG4gICAgICB2YXIgdHJ1ZUV4cHIgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpO1xuICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnOicpIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnRmFsc2UgcGFydCBvZiBjb25kaXRpb25hbCBleHByZXNzaW9uIGV4cGVjdGVkJyk7XG4gICAgICBzdGF0ZS5jb25kaXRpb25hbExldmVsID0gbnVsbDtcbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgdmFyIGZhbHNlRXhwciA9IHBhcnNlQXNzaWdubWVudChzdGF0ZSk7IC8vIE5vdGU6IGNoZWNrIGZvciBjb25kaXRpb25hbCBvcGVyYXRvciBhZ2FpbiwgcmlnaHQgYXNzb2NpYXRpdml0eVxuXG4gICAgICBub2RlID0gbmV3IENvbmRpdGlvbmFsTm9kZShjb25kaXRpb24sIHRydWVFeHByLCBmYWxzZUV4cHIpOyAvLyByZXN0b3JlIHRoZSBwcmV2aW91cyBjb25kaXRpb25hbCBsZXZlbFxuXG4gICAgICBzdGF0ZS5jb25kaXRpb25hbExldmVsID0gcHJldjtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogbG9naWNhbCBvciwgJ3ggb3IgeSdcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlTG9naWNhbE9yKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUxvZ2ljYWxYb3Ioc3RhdGUpO1xuXG4gICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnb3InKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJ29yJywgJ29yJywgW25vZGUsIHBhcnNlTG9naWNhbFhvcihzdGF0ZSldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogbG9naWNhbCBleGNsdXNpdmUgb3IsICd4IHhvciB5J1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VMb2dpY2FsWG9yKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUxvZ2ljYWxBbmQoc3RhdGUpO1xuXG4gICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAneG9yJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKCd4b3InLCAneG9yJywgW25vZGUsIHBhcnNlTG9naWNhbEFuZChzdGF0ZSldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogbG9naWNhbCBhbmQsICd4IGFuZCB5J1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VMb2dpY2FsQW5kKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUJpdHdpc2VPcihzdGF0ZSk7XG5cbiAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICdhbmQnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJ2FuZCcsICdhbmQnLCBbbm9kZSwgcGFyc2VCaXR3aXNlT3Ioc3RhdGUpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIGJpdHdpc2Ugb3IsICd4IHwgeSdcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlQml0d2lzZU9yKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUJpdHdpc2VYb3Ioc3RhdGUpO1xuXG4gICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnfCcpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7XG4gICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZSgnfCcsICdiaXRPcicsIFtub2RlLCBwYXJzZUJpdHdpc2VYb3Ioc3RhdGUpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIGJpdHdpc2UgZXhjbHVzaXZlIG9yICh4b3IpLCAneCBefCB5J1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VCaXR3aXNlWG9yKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZUJpdHdpc2VBbmQoc3RhdGUpO1xuXG4gICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnXnwnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJ158JywgJ2JpdFhvcicsIFtub2RlLCBwYXJzZUJpdHdpc2VBbmQoc3RhdGUpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIGJpdHdpc2UgYW5kLCAneCAmIHknXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZUJpdHdpc2VBbmQoc3RhdGUpIHtcbiAgICB2YXIgbm9kZSA9IHBhcnNlUmVsYXRpb25hbChzdGF0ZSk7XG5cbiAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICcmJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKCcmJywgJ2JpdEFuZCcsIFtub2RlLCBwYXJzZVJlbGF0aW9uYWwoc3RhdGUpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlIGEgY2hhaW5lZCBjb25kaXRpb25hbCwgbGlrZSAnYSA+IGIgPj0gYydcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlUmVsYXRpb25hbChzdGF0ZSkge1xuICAgIHZhciBwYXJhbXMgPSBbcGFyc2VTaGlmdChzdGF0ZSldO1xuICAgIHZhciBjb25kaXRpb25hbHMgPSBbXTtcbiAgICB2YXIgb3BlcmF0b3JzID0ge1xuICAgICAgJz09JzogJ2VxdWFsJyxcbiAgICAgICchPSc6ICd1bmVxdWFsJyxcbiAgICAgICc8JzogJ3NtYWxsZXInLFxuICAgICAgJz4nOiAnbGFyZ2VyJyxcbiAgICAgICc8PSc6ICdzbWFsbGVyRXEnLFxuICAgICAgJz49JzogJ2xhcmdlckVxJ1xuICAgIH07XG5cbiAgICB3aGlsZSAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG9wZXJhdG9ycywgc3RhdGUudG9rZW4pKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgIHZhciBjb25kID0ge1xuICAgICAgICBuYW1lOiBzdGF0ZS50b2tlbixcbiAgICAgICAgZm46IG9wZXJhdG9yc1tzdGF0ZS50b2tlbl1cbiAgICAgIH07XG4gICAgICBjb25kaXRpb25hbHMucHVzaChjb25kKTtcbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgcGFyYW1zLnB1c2gocGFyc2VTaGlmdChzdGF0ZSkpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMubGVuZ3RoID09PSAxKSB7XG4gICAgICByZXR1cm4gcGFyYW1zWzBdO1xuICAgIH0gZWxzZSBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMikge1xuICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoY29uZGl0aW9uYWxzWzBdLm5hbWUsIGNvbmRpdGlvbmFsc1swXS5mbiwgcGFyYW1zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBSZWxhdGlvbmFsTm9kZShjb25kaXRpb25hbHMubWFwKGZ1bmN0aW9uIChjKSB7XG4gICAgICAgIHJldHVybiBjLmZuO1xuICAgICAgfSksIHBhcmFtcyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBCaXR3aXNlIGxlZnQgc2hpZnQsIGJpdHdpc2UgcmlnaHQgYXJpdGhtZXRpYyBzaGlmdCwgYml0d2lzZSByaWdodCBsb2dpY2FsIHNoaWZ0XG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZVNoaWZ0KHN0YXRlKSB7XG4gICAgdmFyIG5vZGUsIG5hbWUsIGZuLCBwYXJhbXM7XG4gICAgbm9kZSA9IHBhcnNlQ29udmVyc2lvbihzdGF0ZSk7XG4gICAgdmFyIG9wZXJhdG9ycyA9IHtcbiAgICAgICc8PCc6ICdsZWZ0U2hpZnQnLFxuICAgICAgJz4+JzogJ3JpZ2h0QXJpdGhTaGlmdCcsXG4gICAgICAnPj4+JzogJ3JpZ2h0TG9nU2hpZnQnXG4gICAgfTtcblxuICAgIHdoaWxlICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkob3BlcmF0b3JzLCBzdGF0ZS50b2tlbikpIHtcbiAgICAgIG5hbWUgPSBzdGF0ZS50b2tlbjtcbiAgICAgIGZuID0gb3BlcmF0b3JzW25hbWVdO1xuICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7XG4gICAgICBwYXJhbXMgPSBbbm9kZSwgcGFyc2VDb252ZXJzaW9uKHN0YXRlKV07XG4gICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZShuYW1lLCBmbiwgcGFyYW1zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogY29udmVyc2lvbiBvcGVyYXRvcnMgJ3RvJyBhbmQgJ2luJ1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VDb252ZXJzaW9uKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUsIG5hbWUsIGZuLCBwYXJhbXM7XG4gICAgbm9kZSA9IHBhcnNlUmFuZ2Uoc3RhdGUpO1xuICAgIHZhciBvcGVyYXRvcnMgPSB7XG4gICAgICB0bzogJ3RvJyxcbiAgICAgIFwiaW5cIjogJ3RvJyAvLyBhbGlhcyBvZiAndG8nXG5cbiAgICB9O1xuXG4gICAgd2hpbGUgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShvcGVyYXRvcnMsIHN0YXRlLnRva2VuKSkge1xuICAgICAgbmFtZSA9IHN0YXRlLnRva2VuO1xuICAgICAgZm4gPSBvcGVyYXRvcnNbbmFtZV07XG4gICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcblxuICAgICAgaWYgKG5hbWUgPT09ICdpbicgJiYgc3RhdGUudG9rZW4gPT09ICcnKSB7XG4gICAgICAgIC8vIGVuZCBvZiBleHByZXNzaW9uIC0+IHRoaXMgaXMgdGhlIHVuaXQgJ2luJyAoJ2luY2gnKVxuICAgICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtub2RlLCBuZXcgU3ltYm9sTm9kZSgnaW4nKV0sIHRydWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb3BlcmF0b3IgJ2EgdG8gYicgb3IgJ2EgaW4gYidcbiAgICAgICAgcGFyYW1zID0gW25vZGUsIHBhcnNlUmFuZ2Uoc3RhdGUpXTtcbiAgICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUobmFtZSwgZm4sIHBhcmFtcyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIHBhcnNlIHJhbmdlLCBcInN0YXJ0OmVuZFwiLCBcInN0YXJ0OnN0ZXA6ZW5kXCIsIFwiOlwiLCBcInN0YXJ0OlwiLCBcIjplbmRcIiwgZXRjXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZVJhbmdlKHN0YXRlKSB7XG4gICAgdmFyIG5vZGU7XG4gICAgdmFyIHBhcmFtcyA9IFtdO1xuXG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAnOicpIHtcbiAgICAgIC8vIGltcGxpY2l0IHN0YXJ0PTEgKG9uZS1iYXNlZClcbiAgICAgIG5vZGUgPSBuZXcgQ29uc3RhbnROb2RlKDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBleHBsaWNpdCBzdGFydFxuICAgICAgbm9kZSA9IHBhcnNlQWRkU3VidHJhY3Qoc3RhdGUpO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZS50b2tlbiA9PT0gJzonICYmIHN0YXRlLmNvbmRpdGlvbmFsTGV2ZWwgIT09IHN0YXRlLm5lc3RpbmdMZXZlbCkge1xuICAgICAgLy8gd2UgaWdub3JlIHRoZSByYW5nZSBvcGVyYXRvciB3aGVuIGEgY29uZGl0aW9uYWwgb3BlcmF0b3IgaXMgYmVpbmcgcHJvY2Vzc2VkIG9uIHRoZSBzYW1lIGxldmVsXG4gICAgICBwYXJhbXMucHVzaChub2RlKTsgLy8gcGFyc2Ugc3RlcCBhbmQgZW5kXG5cbiAgICAgIHdoaWxlIChzdGF0ZS50b2tlbiA9PT0gJzonICYmIHBhcmFtcy5sZW5ndGggPCAzKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcblxuICAgICAgICBpZiAoc3RhdGUudG9rZW4gPT09ICcpJyB8fCBzdGF0ZS50b2tlbiA9PT0gJ10nIHx8IHN0YXRlLnRva2VuID09PSAnLCcgfHwgc3RhdGUudG9rZW4gPT09ICcnKSB7XG4gICAgICAgICAgLy8gaW1wbGljaXQgZW5kXG4gICAgICAgICAgcGFyYW1zLnB1c2gobmV3IFN5bWJvbE5vZGUoJ2VuZCcpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBleHBsaWNpdCBlbmRcbiAgICAgICAgICBwYXJhbXMucHVzaChwYXJzZUFkZFN1YnRyYWN0KHN0YXRlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgLy8gcGFyYW1zID0gW3N0YXJ0LCBzdGVwLCBlbmRdXG4gICAgICAgIG5vZGUgPSBuZXcgUmFuZ2VOb2RlKHBhcmFtc1swXSwgcGFyYW1zWzJdLCBwYXJhbXNbMV0pOyAvLyBzdGFydCwgZW5kLCBzdGVwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBsZW5ndGggPT09IDJcbiAgICAgICAgLy8gcGFyYW1zID0gW3N0YXJ0LCBlbmRdXG4gICAgICAgIG5vZGUgPSBuZXcgUmFuZ2VOb2RlKHBhcmFtc1swXSwgcGFyYW1zWzFdKTsgLy8gc3RhcnQsIGVuZFxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBhZGQgb3Igc3VidHJhY3RcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlQWRkU3VidHJhY3Qoc3RhdGUpIHtcbiAgICB2YXIgbm9kZSwgbmFtZSwgZm4sIHBhcmFtcztcbiAgICBub2RlID0gcGFyc2VNdWx0aXBseURpdmlkZShzdGF0ZSk7XG4gICAgdmFyIG9wZXJhdG9ycyA9IHtcbiAgICAgICcrJzogJ2FkZCcsXG4gICAgICAnLSc6ICdzdWJ0cmFjdCdcbiAgICB9O1xuXG4gICAgd2hpbGUgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShvcGVyYXRvcnMsIHN0YXRlLnRva2VuKSkge1xuICAgICAgbmFtZSA9IHN0YXRlLnRva2VuO1xuICAgICAgZm4gPSBvcGVyYXRvcnNbbmFtZV07XG4gICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgIHBhcmFtcyA9IFtub2RlLCBwYXJzZU11bHRpcGx5RGl2aWRlKHN0YXRlKV07XG4gICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZShuYW1lLCBmbiwgcGFyYW1zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogbXVsdGlwbHksIGRpdmlkZSwgbW9kdWx1c1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VNdWx0aXBseURpdmlkZShzdGF0ZSkge1xuICAgIHZhciBub2RlLCBsYXN0LCBuYW1lLCBmbjtcbiAgICBub2RlID0gcGFyc2VJbXBsaWNpdE11bHRpcGxpY2F0aW9uKHN0YXRlKTtcbiAgICBsYXN0ID0gbm9kZTtcbiAgICB2YXIgb3BlcmF0b3JzID0ge1xuICAgICAgJyonOiAnbXVsdGlwbHknLFxuICAgICAgJy4qJzogJ2RvdE11bHRpcGx5JyxcbiAgICAgICcvJzogJ2RpdmlkZScsXG4gICAgICAnLi8nOiAnZG90RGl2aWRlJyxcbiAgICAgICclJzogJ21vZCcsXG4gICAgICBtb2Q6ICdtb2QnXG4gICAgfTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG9wZXJhdG9ycywgc3RhdGUudG9rZW4pKSB7XG4gICAgICAgIC8vIGV4cGxpY2l0IG9wZXJhdG9yc1xuICAgICAgICBuYW1lID0gc3RhdGUudG9rZW47XG4gICAgICAgIGZuID0gb3BlcmF0b3JzW25hbWVdO1xuICAgICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgICAgbGFzdCA9IHBhcnNlSW1wbGljaXRNdWx0aXBsaWNhdGlvbihzdGF0ZSk7XG4gICAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKG5hbWUsIGZuLCBbbm9kZSwgbGFzdF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIGltcGxpY2l0IG11bHRpcGxpY2F0aW9uXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZUltcGxpY2l0TXVsdGlwbGljYXRpb24oc3RhdGUpIHtcbiAgICB2YXIgbm9kZSwgbGFzdDtcbiAgICBub2RlID0gcGFyc2VSdWxlMihzdGF0ZSk7XG4gICAgbGFzdCA9IG5vZGU7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKHN0YXRlLnRva2VuVHlwZSA9PT0gVE9LRU5UWVBFLlNZTUJPTCB8fCBzdGF0ZS50b2tlbiA9PT0gJ2luJyAmJiAoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShub2RlKSB8fCBzdGF0ZS50b2tlblR5cGUgPT09IFRPS0VOVFlQRS5OVU1CRVIgJiYgISgwLCBfaXMuaXNDb25zdGFudE5vZGUpKGxhc3QpICYmICghKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkobGFzdCkgfHwgbGFzdC5vcCA9PT0gJyEnKSB8fCBzdGF0ZS50b2tlbiA9PT0gJygnKSB7XG4gICAgICAgIC8vIHBhcnNlIGltcGxpY2l0IG11bHRpcGxpY2F0aW9uXG4gICAgICAgIC8vXG4gICAgICAgIC8vIHN5bWJvbDogICAgICBpbXBsaWNpdCBtdWx0aXBsaWNhdGlvbiBsaWtlICcyYScsICcoMiszKWEnLCAnYSBiJ1xuICAgICAgICAvLyBudW1iZXI6ICAgICAgaW1wbGljaXQgbXVsdGlwbGljYXRpb24gbGlrZSAnKDIrMykyJ1xuICAgICAgICAvLyBwYXJlbnRoZXNpczogaW1wbGljaXQgbXVsdGlwbGljYXRpb24gbGlrZSAnMigzKzQpJywgJygzKzQpKDErMiknXG4gICAgICAgIGxhc3QgPSBwYXJzZVJ1bGUyKHN0YXRlKTtcbiAgICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbm9kZSwgbGFzdF0sIHRydWVcbiAgICAgICAgLyogaW1wbGljaXQgKi9cbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBJbmZhbW91cyBcInJ1bGUgMlwiIGFzIGRlc2NyaWJlZCBpbiBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9pc3N1ZXMvNzkyI2lzc3VlY29tbWVudC0zNjEwNjUzNzBcbiAgICogRXhwbGljaXQgZGl2aXNpb24gZ2V0cyBoaWdoZXIgcHJlY2VkZW5jZSB0aGFuIGltcGxpY2l0IG11bHRpcGxpY2F0aW9uXG4gICAqIHdoZW4gdGhlIGRpdmlzaW9uIG1hdGNoZXMgdGhpcyBwYXR0ZXJuOiBbbnVtYmVyXSAvIFtudW1iZXJdIFtzeW1ib2xdXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZVJ1bGUyKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZVVuYXJ5KHN0YXRlKTtcbiAgICB2YXIgbGFzdCA9IG5vZGU7XG4gICAgdmFyIHRva2VuU3RhdGVzID0gW107XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgLy8gTWF0Y2ggdGhlIFwibnVtYmVyIC9cIiBwYXJ0IG9mIHRoZSBwYXR0ZXJuIFwibnVtYmVyIC8gbnVtYmVyIHN5bWJvbFwiXG4gICAgICBpZiAoc3RhdGUudG9rZW4gPT09ICcvJyAmJiAoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShsYXN0KSkge1xuICAgICAgICAvLyBMb29rIGFoZWFkIHRvIHNlZSBpZiB0aGUgbmV4dCB0b2tlbiBpcyBhIG51bWJlclxuICAgICAgICB0b2tlblN0YXRlcy5wdXNoKF9leHRlbmRzKHt9LCBzdGF0ZSkpO1xuICAgICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTsgLy8gTWF0Y2ggdGhlIFwibnVtYmVyIC8gbnVtYmVyXCIgcGFydCBvZiB0aGUgcGF0dGVyblxuXG4gICAgICAgIGlmIChzdGF0ZS50b2tlblR5cGUgPT09IFRPS0VOVFlQRS5OVU1CRVIpIHtcbiAgICAgICAgICAvLyBMb29rIGFoZWFkIGFnYWluXG4gICAgICAgICAgdG9rZW5TdGF0ZXMucHVzaChfZXh0ZW5kcyh7fSwgc3RhdGUpKTtcbiAgICAgICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTsgLy8gTWF0Y2ggdGhlIFwic3ltYm9sXCIgcGFydCBvZiB0aGUgcGF0dGVybiwgb3IgYSBsZWZ0IHBhcmVudGhlc2lzXG5cbiAgICAgICAgICBpZiAoc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuU1lNQk9MIHx8IHN0YXRlLnRva2VuID09PSAnKCcpIHtcbiAgICAgICAgICAgIC8vIFdlJ3ZlIG1hdGNoZWQgdGhlIHBhdHRlcm4gXCJudW1iZXIgLyBudW1iZXIgc3ltYm9sXCIuXG4gICAgICAgICAgICAvLyBSZXdpbmQgb25jZSBhbmQgYnVpbGQgdGhlIFwibnVtYmVyIC8gbnVtYmVyXCIgbm9kZTsgdGhlIHN5bWJvbCB3aWxsIGJlIGNvbnN1bWVkIGxhdGVyXG4gICAgICAgICAgICBfZXh0ZW5kcyhzdGF0ZSwgdG9rZW5TdGF0ZXMucG9wKCkpO1xuXG4gICAgICAgICAgICB0b2tlblN0YXRlcy5wb3AoKTtcbiAgICAgICAgICAgIGxhc3QgPSBwYXJzZVVuYXJ5KHN0YXRlKTtcbiAgICAgICAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtub2RlLCBsYXN0XSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vdCBhIG1hdGNoLCBzbyByZXdpbmRcbiAgICAgICAgICAgIHRva2VuU3RhdGVzLnBvcCgpO1xuXG4gICAgICAgICAgICBfZXh0ZW5kcyhzdGF0ZSwgdG9rZW5TdGF0ZXMucG9wKCkpO1xuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTm90IGEgbWF0Y2gsIHNvIHJld2luZFxuICAgICAgICAgIF9leHRlbmRzKHN0YXRlLCB0b2tlblN0YXRlcy5wb3AoKSk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIFVuYXJ5IHBsdXMgYW5kIG1pbnVzLCBhbmQgbG9naWNhbCBhbmQgYml0d2lzZSBub3RcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlVW5hcnkoc3RhdGUpIHtcbiAgICB2YXIgbmFtZSwgcGFyYW1zLCBmbjtcbiAgICB2YXIgb3BlcmF0b3JzID0ge1xuICAgICAgJy0nOiAndW5hcnlNaW51cycsXG4gICAgICAnKyc6ICd1bmFyeVBsdXMnLFxuICAgICAgJ34nOiAnYml0Tm90JyxcbiAgICAgIG5vdDogJ25vdCdcbiAgICB9O1xuXG4gICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShvcGVyYXRvcnMsIHN0YXRlLnRva2VuKSkge1xuICAgICAgZm4gPSBvcGVyYXRvcnNbc3RhdGUudG9rZW5dO1xuICAgICAgbmFtZSA9IHN0YXRlLnRva2VuO1xuICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7XG4gICAgICBwYXJhbXMgPSBbcGFyc2VVbmFyeShzdGF0ZSldO1xuICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobmFtZSwgZm4sIHBhcmFtcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlUG93KHN0YXRlKTtcbiAgfVxuICAvKipcbiAgICogcG93ZXJcbiAgICogTm90ZTogcG93ZXIgb3BlcmF0b3IgaXMgcmlnaHQgYXNzb2NpYXRpdmVcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlUG93KHN0YXRlKSB7XG4gICAgdmFyIG5vZGUsIG5hbWUsIGZuLCBwYXJhbXM7XG4gICAgbm9kZSA9IHBhcnNlTGVmdEhhbmRPcGVyYXRvcnMoc3RhdGUpO1xuXG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAnXicgfHwgc3RhdGUudG9rZW4gPT09ICcuXicpIHtcbiAgICAgIG5hbWUgPSBzdGF0ZS50b2tlbjtcbiAgICAgIGZuID0gbmFtZSA9PT0gJ14nID8gJ3BvdycgOiAnZG90UG93JztcbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgcGFyYW1zID0gW25vZGUsIHBhcnNlVW5hcnkoc3RhdGUpXTsgLy8gR28gYmFjayB0byB1bmFyeSwgd2UgY2FuIGhhdmUgJzJeLTMnXG5cbiAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKG5hbWUsIGZuLCBwYXJhbXMpO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBMZWZ0IGhhbmQgb3BlcmF0b3JzOiBmYWN0b3JpYWwgeCEsIGN0cmFuc3Bvc2UgeCdcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlTGVmdEhhbmRPcGVyYXRvcnMoc3RhdGUpIHtcbiAgICB2YXIgbm9kZSwgbmFtZSwgZm4sIHBhcmFtcztcbiAgICBub2RlID0gcGFyc2VDdXN0b21Ob2RlcyhzdGF0ZSk7XG4gICAgdmFyIG9wZXJhdG9ycyA9IHtcbiAgICAgICchJzogJ2ZhY3RvcmlhbCcsXG4gICAgICAnXFwnJzogJ2N0cmFuc3Bvc2UnXG4gICAgfTtcblxuICAgIHdoaWxlICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkob3BlcmF0b3JzLCBzdGF0ZS50b2tlbikpIHtcbiAgICAgIG5hbWUgPSBzdGF0ZS50b2tlbjtcbiAgICAgIGZuID0gb3BlcmF0b3JzW25hbWVdO1xuICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgcGFyYW1zID0gW25vZGVdO1xuICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUobmFtZSwgZm4sIHBhcmFtcyk7XG4gICAgICBub2RlID0gcGFyc2VBY2Nlc3NvcnMoc3RhdGUsIG5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIGN1c3RvbSBub2RlIGhhbmRsZXIuIEEgbm9kZSBoYW5kbGVyIGNhbiBiZSB1c2VkIHRvIHByb2Nlc3NcbiAgICogbm9kZXMgaW4gYSBjdXN0b20gd2F5LCBmb3IgZXhhbXBsZSBmb3IgaGFuZGxpbmcgYSBwbG90LlxuICAgKlxuICAgKiBBIGhhbmRsZXIgbXVzdCBiZSBwYXNzZWQgYXMgc2Vjb25kIGFyZ3VtZW50IG9mIHRoZSBwYXJzZSBmdW5jdGlvbi5cbiAgICogLSBtdXN0IGV4dGVuZCBtYXRoLmV4cHJlc3Npb24ubm9kZS5Ob2RlXG4gICAqIC0gbXVzdCBjb250YWluIGEgZnVuY3Rpb24gX2NvbXBpbGUoZGVmczogT2JqZWN0KSA6IHN0cmluZ1xuICAgKiAtIG11c3QgY29udGFpbiBhIGZ1bmN0aW9uIGZpbmQoZmlsdGVyOiBPYmplY3QpIDogTm9kZVtdXG4gICAqIC0gbXVzdCBjb250YWluIGEgZnVuY3Rpb24gdG9TdHJpbmcoKSA6IHN0cmluZ1xuICAgKiAtIHRoZSBjb25zdHJ1Y3RvciBpcyBjYWxsZWQgd2l0aCBhIHNpbmdsZSBhcmd1bWVudCBjb250YWluaW5nIGFsbCBwYXJhbWV0ZXJzXG4gICAqXG4gICAqIEZvciBleGFtcGxlOlxuICAgKlxuICAgKiAgICAgbm9kZXMgPSB7XG4gICAqICAgICAgICdwbG90JzogUGxvdEhhbmRsZXJcbiAgICogICAgIH1cbiAgICpcbiAgICogVGhlIGNvbnN0cnVjdG9yIG9mIHRoZSBoYW5kbGVyIGlzIGNhbGxlZCBhczpcbiAgICpcbiAgICogICAgIG5vZGUgPSBuZXcgUGxvdEhhbmRsZXIocGFyYW1zKVxuICAgKlxuICAgKiBUaGUgaGFuZGxlciB3aWxsIGJlIGludm9rZWQgd2hlbiBldmFsdWF0aW5nIGFuIGV4cHJlc3Npb24gbGlrZTpcbiAgICpcbiAgICogICAgIG5vZGUgPSBtYXRoLnBhcnNlKCdwbG90KHNpbih4KSwgeCknLCBub2RlcylcbiAgICpcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlQ3VzdG9tTm9kZXMoc3RhdGUpIHtcbiAgICB2YXIgcGFyYW1zID0gW107XG5cbiAgICBpZiAoc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuU1lNQk9MICYmICgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShzdGF0ZS5leHRyYU5vZGVzLCBzdGF0ZS50b2tlbikpIHtcbiAgICAgIHZhciBDdXN0b21Ob2RlID0gc3RhdGUuZXh0cmFOb2Rlc1tzdGF0ZS50b2tlbl07XG4gICAgICBnZXRUb2tlbihzdGF0ZSk7IC8vIHBhcnNlIHBhcmFtZXRlcnNcblxuICAgICAgaWYgKHN0YXRlLnRva2VuID09PSAnKCcpIHtcbiAgICAgICAgcGFyYW1zID0gW107XG4gICAgICAgIG9wZW5QYXJhbXMoc3RhdGUpO1xuICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG5cbiAgICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnKScpIHtcbiAgICAgICAgICBwYXJhbXMucHVzaChwYXJzZUFzc2lnbm1lbnQoc3RhdGUpKTsgLy8gcGFyc2UgYSBsaXN0IHdpdGggcGFyYW1ldGVyc1xuXG4gICAgICAgICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnLCcpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyc2VBc3NpZ25tZW50KHN0YXRlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnKScpIHtcbiAgICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1BhcmVudGhlc2lzICkgZXhwZWN0ZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsb3NlUGFyYW1zKHN0YXRlKTtcbiAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgfSAvLyBjcmVhdGUgYSBuZXcgY3VzdG9tIG5vZGVcbiAgICAgIC8vIG5vaW5zcGVjdGlvbiBKU1ZhbGlkYXRlVHlwZXNcblxuXG4gICAgICByZXR1cm4gbmV3IEN1c3RvbU5vZGUocGFyYW1zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VTeW1ib2woc3RhdGUpO1xuICB9XG4gIC8qKlxuICAgKiBwYXJzZSBzeW1ib2xzOiBmdW5jdGlvbnMsIHZhcmlhYmxlcywgY29uc3RhbnRzLCB1bml0c1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VTeW1ib2woc3RhdGUpIHtcbiAgICB2YXIgbm9kZSwgbmFtZTtcblxuICAgIGlmIChzdGF0ZS50b2tlblR5cGUgPT09IFRPS0VOVFlQRS5TWU1CT0wgfHwgc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuREVMSU1JVEVSICYmIHN0YXRlLnRva2VuIGluIE5BTUVEX0RFTElNSVRFUlMpIHtcbiAgICAgIG5hbWUgPSBzdGF0ZS50b2tlbjtcbiAgICAgIGdldFRva2VuKHN0YXRlKTtcblxuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShDT05TVEFOVFMsIG5hbWUpKSB7XG4gICAgICAgIC8vIHRydWUsIGZhbHNlLCBudWxsLCAuLi5cbiAgICAgICAgbm9kZSA9IG5ldyBDb25zdGFudE5vZGUoQ09OU1RBTlRTW25hbWVdKTtcbiAgICAgIH0gZWxzZSBpZiAoTlVNRVJJQ19DT05TVEFOVFMuaW5kZXhPZihuYW1lKSAhPT0gLTEpIHtcbiAgICAgICAgLy8gTmFOLCBJbmZpbml0eVxuICAgICAgICBub2RlID0gbmV3IENvbnN0YW50Tm9kZShudW1lcmljKG5hbWUsICdudW1iZXInKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlID0gbmV3IFN5bWJvbE5vZGUobmFtZSk7XG4gICAgICB9IC8vIHBhcnNlIGZ1bmN0aW9uIHBhcmFtZXRlcnMgYW5kIG1hdHJpeCBpbmRleFxuXG5cbiAgICAgIG5vZGUgPSBwYXJzZUFjY2Vzc29ycyhzdGF0ZSwgbm9kZSk7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VEb3VibGVRdW90ZXNTdHJpbmcoc3RhdGUpO1xuICB9XG4gIC8qKlxuICAgKiBwYXJzZSBhY2Nlc3NvcnM6XG4gICAqIC0gZnVuY3Rpb24gaW52b2NhdGlvbiBpbiByb3VuZCBicmFja2V0cyAoLi4uKSwgZm9yIGV4YW1wbGUgc3FydCgyKVxuICAgKiAtIGluZGV4IGVuY2xvc2VkIGluIHNxdWFyZSBicmFja2V0cyBbLi4uXSwgZm9yIGV4YW1wbGUgQVsyLDNdXG4gICAqIC0gZG90IG5vdGF0aW9uIGZvciBwcm9wZXJ0aWVzLCBsaWtlIGZvby5iYXJcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAgICBOb2RlIG9uIHdoaWNoIHRvIGFwcGx5IHRoZSBwYXJhbWV0ZXJzLiBJZiB0aGVyZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYXJlIG5vIHBhcmFtZXRlcnMgaW4gdGhlIGV4cHJlc3Npb24sIHRoZSBub2RlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBpdHNlbGYgaXMgcmV0dXJuZWRcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gW3R5cGVzXSAgRmlsdGVyIHRoZSB0eXBlcyBvZiBub3RhdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuIGJlIFsnKCcsICdbJywgJy4nXVxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VBY2Nlc3NvcnMoc3RhdGUsIG5vZGUsIHR5cGVzKSB7XG4gICAgdmFyIHBhcmFtcztcblxuICAgIHdoaWxlICgoc3RhdGUudG9rZW4gPT09ICcoJyB8fCBzdGF0ZS50b2tlbiA9PT0gJ1snIHx8IHN0YXRlLnRva2VuID09PSAnLicpICYmICghdHlwZXMgfHwgdHlwZXMuaW5kZXhPZihzdGF0ZS50b2tlbikgIT09IC0xKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICBwYXJhbXMgPSBbXTtcblxuICAgICAgaWYgKHN0YXRlLnRva2VuID09PSAnKCcpIHtcbiAgICAgICAgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShub2RlKSB8fCAoMCwgX2lzLmlzQWNjZXNzb3JOb2RlKShub2RlKSkge1xuICAgICAgICAgIC8vIGZ1bmN0aW9uIGludm9jYXRpb24gbGlrZSBmbigyLCAzKSBvciBvYmouZm4oMiwgMylcbiAgICAgICAgICBvcGVuUGFyYW1zKHN0YXRlKTtcbiAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG5cbiAgICAgICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICcpJykge1xuICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyc2VBc3NpZ25tZW50KHN0YXRlKSk7IC8vIHBhcnNlIGEgbGlzdCB3aXRoIHBhcmFtZXRlcnNcblxuICAgICAgICAgICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnLCcpIHtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICAgICAgICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyc2VBc3NpZ25tZW50KHN0YXRlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnKScpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnUGFyZW50aGVzaXMgKSBleHBlY3RlZCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNsb3NlUGFyYW1zKHN0YXRlKTtcbiAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICAgICAgbm9kZSA9IG5ldyBGdW5jdGlvbk5vZGUobm9kZSwgcGFyYW1zKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBpbXBsaWNpdCBtdWx0aXBsaWNhdGlvbiBsaWtlICgyKzMpKDQrNSkgb3Igc3FydCgyKSgxKzIpXG4gICAgICAgICAgLy8gZG9uJ3QgcGFyc2UgaXQgaGVyZSBidXQgbGV0IGl0IGJlIGhhbmRsZWQgYnkgcGFyc2VJbXBsaWNpdE11bHRpcGxpY2F0aW9uXG4gICAgICAgICAgLy8gd2l0aCBjb3JyZWN0IHByZWNlZGVuY2VcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzdGF0ZS50b2tlbiA9PT0gJ1snKSB7XG4gICAgICAgIC8vIGluZGV4IG5vdGF0aW9uIGxpa2UgdmFyaWFibGVbMiwgM11cbiAgICAgICAgb3BlblBhcmFtcyhzdGF0ZSk7XG4gICAgICAgIGdldFRva2VuKHN0YXRlKTtcblxuICAgICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICddJykge1xuICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcnNlQXNzaWdubWVudChzdGF0ZSkpOyAvLyBwYXJzZSBhIGxpc3Qgd2l0aCBwYXJhbWV0ZXJzXG5cbiAgICAgICAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICcsJykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICAgICAgICBwYXJhbXMucHVzaChwYXJzZUFzc2lnbm1lbnQoc3RhdGUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICddJykge1xuICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnUGFyZW50aGVzaXMgXSBleHBlY3RlZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgY2xvc2VQYXJhbXMoc3RhdGUpO1xuICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICAgIG5vZGUgPSBuZXcgQWNjZXNzb3JOb2RlKG5vZGUsIG5ldyBJbmRleE5vZGUocGFyYW1zKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkb3Qgbm90YXRpb24gbGlrZSB2YXJpYWJsZS5wcm9wXG4gICAgICAgIGdldFRva2VuKHN0YXRlKTtcblxuICAgICAgICBpZiAoc3RhdGUudG9rZW5UeXBlICE9PSBUT0tFTlRZUEUuU1lNQk9MKSB7XG4gICAgICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdQcm9wZXJ0eSBuYW1lIGV4cGVjdGVkIGFmdGVyIGRvdCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcGFyYW1zLnB1c2gobmV3IENvbnN0YW50Tm9kZShzdGF0ZS50b2tlbikpO1xuICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICAgIHZhciBkb3ROb3RhdGlvbiA9IHRydWU7XG4gICAgICAgIG5vZGUgPSBuZXcgQWNjZXNzb3JOb2RlKG5vZGUsIG5ldyBJbmRleE5vZGUocGFyYW1zLCBkb3ROb3RhdGlvbikpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIGRvdWJsZSBxdW90ZXMgc3RyaW5nLlxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VEb3VibGVRdW90ZXNTdHJpbmcoc3RhdGUpIHtcbiAgICB2YXIgbm9kZSwgc3RyO1xuXG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAnXCInKSB7XG4gICAgICBzdHIgPSBwYXJzZURvdWJsZVF1b3Rlc1N0cmluZ1Rva2VuKHN0YXRlKTsgLy8gY3JlYXRlIGNvbnN0YW50XG5cbiAgICAgIG5vZGUgPSBuZXcgQ29uc3RhbnROb2RlKHN0cik7IC8vIHBhcnNlIGluZGV4IHBhcmFtZXRlcnNcblxuICAgICAgbm9kZSA9IHBhcnNlQWNjZXNzb3JzKHN0YXRlLCBub2RlKTtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZVNpbmdsZVF1b3Rlc1N0cmluZyhzdGF0ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlIGEgc3RyaW5nIHN1cnJvdW5kZWQgYnkgZG91YmxlIHF1b3RlcyBcIi4uLlwiXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZURvdWJsZVF1b3Rlc1N0cmluZ1Rva2VuKHN0YXRlKSB7XG4gICAgdmFyIHN0ciA9ICcnO1xuXG4gICAgd2hpbGUgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpICE9PSAnJyAmJiBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSAhPT0gJ1wiJykge1xuICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpID09PSAnXFxcXCcpIHtcbiAgICAgICAgLy8gZXNjYXBlIGNoYXJhY3RlciwgaW1tZWRpYXRlbHkgcHJvY2VzcyB0aGUgbmV4dFxuICAgICAgICAvLyBjaGFyYWN0ZXIgdG8gcHJldmVudCBzdG9wcGluZyBhdCBhIG5leHQgJ1xcXCInXG4gICAgICAgIHN0ciArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICB9XG5cbiAgICAgIHN0ciArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgIG5leHQoc3RhdGUpO1xuICAgIH1cblxuICAgIGdldFRva2VuKHN0YXRlKTtcblxuICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJ1wiJykge1xuICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdFbmQgb2Ygc3RyaW5nIFwiIGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgIHJldHVybiBKU09OLnBhcnNlKCdcIicgKyBzdHIgKyAnXCInKTsgLy8gdW5lc2NhcGUgZXNjYXBlZCBjaGFyYWN0ZXJzXG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlIGEgc2luZ2xlIHF1b3RlcyBzdHJpbmcuXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZVNpbmdsZVF1b3Rlc1N0cmluZyhzdGF0ZSkge1xuICAgIHZhciBub2RlLCBzdHI7XG5cbiAgICBpZiAoc3RhdGUudG9rZW4gPT09ICdcXCcnKSB7XG4gICAgICBzdHIgPSBwYXJzZVNpbmdsZVF1b3Rlc1N0cmluZ1Rva2VuKHN0YXRlKTsgLy8gY3JlYXRlIGNvbnN0YW50XG5cbiAgICAgIG5vZGUgPSBuZXcgQ29uc3RhbnROb2RlKHN0cik7IC8vIHBhcnNlIGluZGV4IHBhcmFtZXRlcnNcblxuICAgICAgbm9kZSA9IHBhcnNlQWNjZXNzb3JzKHN0YXRlLCBub2RlKTtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZU1hdHJpeChzdGF0ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlIGEgc3RyaW5nIHN1cnJvdW5kZWQgYnkgc2luZ2xlIHF1b3RlcyAnLi4uJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VTaW5nbGVRdW90ZXNTdHJpbmdUb2tlbihzdGF0ZSkge1xuICAgIHZhciBzdHIgPSAnJztcblxuICAgIHdoaWxlIChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSAhPT0gJycgJiYgY3VycmVudENoYXJhY3RlcihzdGF0ZSkgIT09ICdcXCcnKSB7XG4gICAgICBpZiAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICdcXFxcJykge1xuICAgICAgICAvLyBlc2NhcGUgY2hhcmFjdGVyLCBpbW1lZGlhdGVseSBwcm9jZXNzIHRoZSBuZXh0XG4gICAgICAgIC8vIGNoYXJhY3RlciB0byBwcmV2ZW50IHN0b3BwaW5nIGF0IGEgbmV4dCAnXFwnJ1xuICAgICAgICBzdHIgKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7XG4gICAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgfVxuXG4gICAgICBzdHIgKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7XG4gICAgICBuZXh0KHN0YXRlKTtcbiAgICB9XG5cbiAgICBnZXRUb2tlbihzdGF0ZSk7XG5cbiAgICBpZiAoc3RhdGUudG9rZW4gIT09ICdcXCcnKSB7XG4gICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ0VuZCBvZiBzdHJpbmcgXFwnIGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgIHJldHVybiBKU09OLnBhcnNlKCdcIicgKyBzdHIgKyAnXCInKTsgLy8gdW5lc2NhcGUgZXNjYXBlZCBjaGFyYWN0ZXJzXG4gIH1cbiAgLyoqXG4gICAqIHBhcnNlIHRoZSBtYXRyaXhcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlTWF0cml4KHN0YXRlKSB7XG4gICAgdmFyIGFycmF5LCBwYXJhbXMsIHJvd3MsIGNvbHM7XG5cbiAgICBpZiAoc3RhdGUudG9rZW4gPT09ICdbJykge1xuICAgICAgLy8gbWF0cml4IFsuLi5dXG4gICAgICBvcGVuUGFyYW1zKHN0YXRlKTtcbiAgICAgIGdldFRva2VuKHN0YXRlKTtcblxuICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnXScpIHtcbiAgICAgICAgLy8gdGhpcyBpcyBhIG5vbi1lbXB0eSBtYXRyaXhcbiAgICAgICAgdmFyIHJvdyA9IHBhcnNlUm93KHN0YXRlKTtcblxuICAgICAgICBpZiAoc3RhdGUudG9rZW4gPT09ICc7Jykge1xuICAgICAgICAgIC8vIDIgZGltZW5zaW9uYWwgYXJyYXlcbiAgICAgICAgICByb3dzID0gMTtcbiAgICAgICAgICBwYXJhbXMgPSBbcm93XTsgLy8gdGhlIHJvd3Mgb2YgdGhlIG1hdHJpeCBhcmUgc2VwYXJhdGVkIGJ5IGRvdC1jb21tYSdzXG5cbiAgICAgICAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICc7Jykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICAgICAgICBwYXJhbXNbcm93c10gPSBwYXJzZVJvdyhzdGF0ZSk7XG4gICAgICAgICAgICByb3dzKys7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnXScpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnRW5kIG9mIG1hdHJpeCBdIGV4cGVjdGVkJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2xvc2VQYXJhbXMoc3RhdGUpO1xuICAgICAgICAgIGdldFRva2VuKHN0YXRlKTsgLy8gY2hlY2sgaWYgdGhlIG51bWJlciBvZiBjb2x1bW5zIG1hdGNoZXMgaW4gYWxsIHJvd3NcblxuICAgICAgICAgIGNvbHMgPSBwYXJhbXNbMF0uaXRlbXMubGVuZ3RoO1xuXG4gICAgICAgICAgZm9yICh2YXIgciA9IDE7IHIgPCByb3dzOyByKyspIHtcbiAgICAgICAgICAgIGlmIChwYXJhbXNbcl0uaXRlbXMubGVuZ3RoICE9PSBjb2xzKSB7XG4gICAgICAgICAgICAgIHRocm93IGNyZWF0ZUVycm9yKHN0YXRlLCAnQ29sdW1uIGRpbWVuc2lvbnMgbWlzbWF0Y2ggJyArICcoJyArIHBhcmFtc1tyXS5pdGVtcy5sZW5ndGggKyAnICE9PSAnICsgY29scyArICcpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXJyYXkgPSBuZXcgQXJyYXlOb2RlKHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gMSBkaW1lbnNpb25hbCB2ZWN0b3JcbiAgICAgICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICddJykge1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdFbmQgb2YgbWF0cml4IF0gZXhwZWN0ZWQnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjbG9zZVBhcmFtcyhzdGF0ZSk7XG4gICAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgICAgIGFycmF5ID0gcm93O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aGlzIGlzIGFuIGVtcHR5IG1hdHJpeCBcIlsgXVwiXG4gICAgICAgIGNsb3NlUGFyYW1zKHN0YXRlKTtcbiAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgICBhcnJheSA9IG5ldyBBcnJheU5vZGUoW10pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcGFyc2VBY2Nlc3NvcnMoc3RhdGUsIGFycmF5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VPYmplY3Qoc3RhdGUpO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIHNpbmdsZSBjb21tYS1zZXBhcmF0ZWQgcm93IGZyb20gYSBtYXRyaXgsIGxpa2UgJ2EsIGIsIGMnXG4gICAqIEByZXR1cm4ge0FycmF5Tm9kZX0gbm9kZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlUm93KHN0YXRlKSB7XG4gICAgdmFyIHBhcmFtcyA9IFtwYXJzZUFzc2lnbm1lbnQoc3RhdGUpXTtcbiAgICB2YXIgbGVuID0gMTtcblxuICAgIHdoaWxlIChzdGF0ZS50b2tlbiA9PT0gJywnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgIGdldFRva2VuKHN0YXRlKTsgLy8gcGFyc2UgZXhwcmVzc2lvblxuXG4gICAgICBwYXJhbXNbbGVuXSA9IHBhcnNlQXNzaWdubWVudChzdGF0ZSk7XG4gICAgICBsZW4rKztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFycmF5Tm9kZShwYXJhbXMpO1xuICB9XG4gIC8qKlxuICAgKiBwYXJzZSBhbiBvYmplY3QsIGVuY2xvc2VkIGluIGFuZ2xlIGJyYWNrZXRzey4uLn0sIGZvciBleGFtcGxlIHt2YWx1ZTogMn1cbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlT2JqZWN0KHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAneycpIHtcbiAgICAgIG9wZW5QYXJhbXMoc3RhdGUpO1xuICAgICAgdmFyIGtleTtcbiAgICAgIHZhciBwcm9wZXJ0aWVzID0ge307XG5cbiAgICAgIGRvIHtcbiAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuXG4gICAgICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJ30nKSB7XG4gICAgICAgICAgLy8gcGFyc2Uga2V5XG4gICAgICAgICAgaWYgKHN0YXRlLnRva2VuID09PSAnXCInKSB7XG4gICAgICAgICAgICBrZXkgPSBwYXJzZURvdWJsZVF1b3Rlc1N0cmluZ1Rva2VuKHN0YXRlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLnRva2VuID09PSAnXFwnJykge1xuICAgICAgICAgICAga2V5ID0gcGFyc2VTaW5nbGVRdW90ZXNTdHJpbmdUb2tlbihzdGF0ZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS50b2tlblR5cGUgPT09IFRPS0VOVFlQRS5TWU1CT0wgfHwgc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuREVMSU1JVEVSICYmIHN0YXRlLnRva2VuIGluIE5BTUVEX0RFTElNSVRFUlMpIHtcbiAgICAgICAgICAgIGtleSA9IHN0YXRlLnRva2VuO1xuICAgICAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1N5bWJvbCBvciBzdHJpbmcgZXhwZWN0ZWQgYXMgb2JqZWN0IGtleScpO1xuICAgICAgICAgIH0gLy8gcGFyc2Uga2V5L3ZhbHVlIHNlcGFyYXRvclxuXG5cbiAgICAgICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICc6Jykge1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdDb2xvbiA6IGV4cGVjdGVkIGFmdGVyIG9iamVjdCBrZXknKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7IC8vIHBhcnNlIGtleVxuXG4gICAgICAgICAgcHJvcGVydGllc1trZXldID0gcGFyc2VBc3NpZ25tZW50KHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfSB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICcsJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuXG5cbiAgICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJ30nKSB7XG4gICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnQ29tbWEgLCBvciBicmFja2V0IH0gZXhwZWN0ZWQgYWZ0ZXIgb2JqZWN0IHZhbHVlJyk7XG4gICAgICB9XG5cbiAgICAgIGNsb3NlUGFyYW1zKHN0YXRlKTtcbiAgICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICAgIHZhciBub2RlID0gbmV3IE9iamVjdE5vZGUocHJvcGVydGllcyk7IC8vIHBhcnNlIGluZGV4IHBhcmFtZXRlcnNcblxuICAgICAgbm9kZSA9IHBhcnNlQWNjZXNzb3JzKHN0YXRlLCBub2RlKTtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZU51bWJlcihzdGF0ZSk7XG4gIH1cbiAgLyoqXG4gICAqIHBhcnNlIGEgbnVtYmVyXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZU51bWJlcihzdGF0ZSkge1xuICAgIHZhciBudW1iZXJTdHI7XG5cbiAgICBpZiAoc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuTlVNQkVSKSB7XG4gICAgICAvLyB0aGlzIGlzIGEgbnVtYmVyXG4gICAgICBudW1iZXJTdHIgPSBzdGF0ZS50b2tlbjtcbiAgICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKG51bWVyaWMobnVtYmVyU3RyLCBjb25maWcubnVtYmVyKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlUGFyZW50aGVzZXMoc3RhdGUpO1xuICB9XG4gIC8qKlxuICAgKiBwYXJlbnRoZXNlc1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VQYXJlbnRoZXNlcyhzdGF0ZSkge1xuICAgIHZhciBub2RlOyAvLyBjaGVjayBpZiBpdCBpcyBhIHBhcmVudGhlc2l6ZWQgZXhwcmVzc2lvblxuXG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAnKCcpIHtcbiAgICAgIC8vIHBhcmVudGhlc2VzICguLi4pXG4gICAgICBvcGVuUGFyYW1zKHN0YXRlKTtcbiAgICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICAgIG5vZGUgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpOyAvLyBzdGFydCBhZ2FpblxuXG4gICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICcpJykge1xuICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1BhcmVudGhlc2lzICkgZXhwZWN0ZWQnKTtcbiAgICAgIH1cblxuICAgICAgY2xvc2VQYXJhbXMoc3RhdGUpO1xuICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgbm9kZSA9IG5ldyBQYXJlbnRoZXNpc05vZGUobm9kZSk7XG4gICAgICBub2RlID0gcGFyc2VBY2Nlc3NvcnMoc3RhdGUsIG5vZGUpO1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlRW5kKHN0YXRlKTtcbiAgfVxuICAvKipcbiAgICogRXZhbHVhdGVkIHdoZW4gdGhlIGV4cHJlc3Npb24gaXMgbm90IHlldCBlbmRlZCBidXQgZXhwZWN0ZWQgdG8gZW5kXG4gICAqIEByZXR1cm4ge05vZGV9IHJlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlRW5kKHN0YXRlKSB7XG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAnJykge1xuICAgICAgLy8gc3ludGF4IGVycm9yIG9yIHVuZXhwZWN0ZWQgZW5kIG9mIGV4cHJlc3Npb25cbiAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnVW5leHBlY3RlZCBlbmQgb2YgZXhwcmVzc2lvbicpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1ZhbHVlIGV4cGVjdGVkJyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBTaG9ydGN1dCBmb3IgZ2V0dGluZyB0aGUgY3VycmVudCByb3cgdmFsdWUgKG9uZSBiYXNlZClcbiAgICogUmV0dXJucyB0aGUgbGluZSBvZiB0aGUgY3VycmVudGx5IGhhbmRsZWQgZXhwcmVzc2lvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICAvKiBUT0RPOiBpbXBsZW1lbnQga2VlcGluZyB0cmFjayBvbiB0aGUgcm93IG51bWJlclxuICBmdW5jdGlvbiByb3cgKCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cbiAgKi9cblxuICAvKipcbiAgICogU2hvcnRjdXQgZm9yIGdldHRpbmcgdGhlIGN1cnJlbnQgY29sIHZhbHVlIChvbmUgYmFzZWQpXG4gICAqIFJldHVybnMgdGhlIGNvbHVtbiAocG9zaXRpb24pIHdoZXJlIHRoZSBsYXN0IHN0YXRlLnRva2VuIHN0YXJ0c1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNvbChzdGF0ZSkge1xuICAgIHJldHVybiBzdGF0ZS5pbmRleCAtIHN0YXRlLnRva2VuLmxlbmd0aCArIDE7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBlcnJvclxuICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAgICogQHJldHVybiB7U3ludGF4RXJyb3J9IGluc3RhbnRpYXRlZCBlcnJvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCBtZXNzYWdlKSB7XG4gICAgdmFyIGMgPSBjb2woc3RhdGUpO1xuICAgIHZhciBlcnJvciA9IG5ldyBTeW50YXhFcnJvcihtZXNzYWdlICsgJyAoY2hhciAnICsgYyArICcpJyk7XG4gICAgZXJyb3JbXCJjaGFyXCJdID0gYztcbiAgICByZXR1cm4gZXJyb3I7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBlcnJvclxuICAgKiBAcGFyYW0ge09iamVjdH0gc3RhdGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAgICogQHJldHVybiB7RXJyb3J9IGluc3RhbnRpYXRlZCBlcnJvclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVycm9yKHN0YXRlLCBtZXNzYWdlKSB7XG4gICAgdmFyIGMgPSBjb2woc3RhdGUpO1xuICAgIHZhciBlcnJvciA9IG5ldyBTeW50YXhFcnJvcihtZXNzYWdlICsgJyAoY2hhciAnICsgYyArICcpJyk7XG4gICAgZXJyb3JbXCJjaGFyXCJdID0gYztcbiAgICByZXR1cm4gZXJyb3I7XG4gIH1cblxuICByZXR1cm4gcGFyc2U7XG59KTtcbmV4cG9ydHMuY3JlYXRlUGFyc2UgPSBjcmVhdGVQYXJzZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQXBwbHlUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfZXJyb3JUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi91dGlscy9lcnJvclRyYW5zZm9ybVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYXBwbHkgPSByZXF1aXJlKFwiLi4vLi4vZnVuY3Rpb24vbWF0cml4L2FwcGx5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgbmFtZSA9ICdhcHBseSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdpc0ludGVnZXInXTtcbi8qKlxuICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGguYXBwbHlcbiAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgdHJhbnNmb3JtIGNoYW5nZWQgdGhlIGxhc3QgYGRpbWAgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uIGFwcGx5XG4gKiBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvIGJhc2VkXG4gKi9cblxudmFyIGNyZWF0ZUFwcGx5VHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGlzSW50ZWdlciA9IF9yZWYuaXNJbnRlZ2VyO1xuICB2YXIgYXBwbHkgPSAoMCwgX2FwcGx5LmNyZWF0ZUFwcGx5KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGlzSW50ZWdlcjogaXNJbnRlZ2VyXG4gIH0pOyAvLyBAc2VlOiBjb21tZW50IG9mIGNvbmNhdCBpdHNlbGZcblxuICByZXR1cm4gdHlwZWQoJ2FwcGx5Jywge1xuICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykge1xuICAgICAgLy8gY2hhbmdlIGRpbSBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkXG4gICAgICB2YXIgZGltID0gYXJnc1sxXTtcblxuICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgYXJnc1sxXSA9IGRpbSAtIDE7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGFwcGx5LmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFwcGx5VHJhbnNmb3JtID0gY3JlYXRlQXBwbHlUcmFuc2Zvcm07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbHVtblRyYW5zZm9ybSA9IHZvaWQgMDtcblxudmFyIF9lcnJvclRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL3V0aWxzL2Vycm9yVHJhbnNmb3JtXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2x1bW4gPSByZXF1aXJlKFwiLi4vLi4vZnVuY3Rpb24vbWF0cml4L2NvbHVtblwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIG5hbWUgPSAnY29sdW1uJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0luZGV4JywgJ21hdHJpeCcsICdyYW5nZSddO1xuLyoqXG4gKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0cml4LmNvbHVtblxuICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gKlxuICogVGhpcyB0cmFuc2Zvcm0gY2hhbmdlZCB0aGUgbGFzdCBgaW5kZXhgIHBhcmFtZXRlciBvZiBmdW5jdGlvbiBjb2x1bW5cbiAqIGZyb20gemVyby1iYXNlZCB0byBvbmUtYmFzZWRcbiAqL1xuXG52YXIgY3JlYXRlQ29sdW1uVHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgcmFuZ2UgPSBfcmVmLnJhbmdlO1xuICB2YXIgY29sdW1uID0gKDAsIF9jb2x1bW4uY3JlYXRlQ29sdW1uKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIEluZGV4OiBJbmRleCxcbiAgICBtYXRyaXg6IG1hdHJpeCxcbiAgICByYW5nZTogcmFuZ2VcbiAgfSk7IC8vIEBzZWU6IGNvbW1lbnQgb2YgY29sdW1uIGl0c2VsZlxuXG4gIHJldHVybiB0eXBlZCgnY29sdW1uJywge1xuICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykge1xuICAgICAgLy8gY2hhbmdlIGxhc3QgYXJndW1lbnQgZnJvbSB6ZXJvLWJhc2VkIHRvIG9uZS1iYXNlZFxuICAgICAgdmFyIGxhc3RJbmRleCA9IGFyZ3MubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBsYXN0ID0gYXJnc1tsYXN0SW5kZXhdO1xuXG4gICAgICBpZiAoKDAsIF9pcy5pc051bWJlcikobGFzdCkpIHtcbiAgICAgICAgYXJnc1tsYXN0SW5kZXhdID0gbGFzdCAtIDE7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBjb2x1bW4uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9lcnJvclRyYW5zZm9ybS5lcnJvclRyYW5zZm9ybSkoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufSwge1xuICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29sdW1uVHJhbnNmb3JtID0gY3JlYXRlQ29sdW1uVHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb25jYXRUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZXJyb3JUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi91dGlscy9lcnJvclRyYW5zZm9ybVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29uY2F0ID0gcmVxdWlyZShcIi4uLy4uL2Z1bmN0aW9uL21hdHJpeC9jb25jYXRcIik7XG5cbnZhciBuYW1lID0gJ2NvbmNhdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnaXNJbnRlZ2VyJ107XG52YXIgY3JlYXRlQ29uY2F0VHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgaXNJbnRlZ2VyID0gX3JlZi5pc0ludGVnZXI7XG4gIHZhciBjb25jYXQgPSAoMCwgX2NvbmNhdC5jcmVhdGVDb25jYXQpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgbWF0cml4OiBtYXRyaXgsXG4gICAgaXNJbnRlZ2VyOiBpc0ludGVnZXJcbiAgfSk7XG4gIC8qKlxuICAgKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5yYW5nZVxuICAgKiBBZGRzIGEgcHJvcGVydHkgdHJhbnNmb3JtIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbi5cbiAgICpcbiAgICogVGhpcyB0cmFuc2Zvcm0gY2hhbmdlZCB0aGUgbGFzdCBgZGltYCBwYXJhbWV0ZXIgb2YgZnVuY3Rpb24gY29uY2F0XG4gICAqIGZyb20gb25lLWJhc2VkIHRvIHplcm8gYmFzZWRcbiAgICovXG5cbiAgcmV0dXJuIHR5cGVkKCdjb25jYXQnLCB7XG4gICAgJy4uLmFueSc6IGZ1bmN0aW9uIGFueShhcmdzKSB7XG4gICAgICAvLyBjaGFuZ2UgbGFzdCBhcmd1bWVudCBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkXG4gICAgICB2YXIgbGFzdEluZGV4ID0gYXJncy5sZW5ndGggLSAxO1xuICAgICAgdmFyIGxhc3QgPSBhcmdzW2xhc3RJbmRleF07XG5cbiAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShsYXN0KSkge1xuICAgICAgICBhcmdzW2xhc3RJbmRleF0gPSBsYXN0IC0gMTtcbiAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikobGFzdCkpIHtcbiAgICAgICAgYXJnc1tsYXN0SW5kZXhdID0gbGFzdC5taW51cygxKTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIGNvbmNhdC5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2Vycm9yVHJhbnNmb3JtLmVycm9yVHJhbnNmb3JtKShlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59LCB7XG4gIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb25jYXRUcmFuc2Zvcm0gPSBjcmVhdGVDb25jYXRUcmFuc2Zvcm07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZpbHRlclRyYW5zZm9ybSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mdW5jdGlvblwiKTtcblxudmFyIF9jb21waWxlSW5saW5lRXhwcmVzc2lvbiA9IHJlcXVpcmUoXCIuL3V0aWxzL2NvbXBpbGVJbmxpbmVFeHByZXNzaW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZmlsdGVyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlRmlsdGVyVHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGguZmlsdGVyXG4gICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHRyYW5zZm9ybSBhZGRzIHN1cHBvcnQgZm9yIGVxdWF0aW9ucyBhcyB0ZXN0IGZ1bmN0aW9uIGZvciBtYXRoLmZpbHRlcixcbiAgICogc28geW91IGNhbiBkbyBzb21ldGhpbmcgbGlrZSAnZmlsdGVyKFszLCAtMiwgNV0sIHggPiAwKScuXG4gICAqL1xuICBmdW5jdGlvbiBmaWx0ZXJUcmFuc2Zvcm0oYXJncywgbWF0aCwgc2NvcGUpIHtcbiAgICB2YXIgeCwgY2FsbGJhY2s7XG5cbiAgICBpZiAoYXJnc1swXSkge1xuICAgICAgeCA9IGFyZ3NbMF0uY29tcGlsZSgpLmV2YWx1YXRlKHNjb3BlKTtcbiAgICB9XG5cbiAgICBpZiAoYXJnc1sxXSkge1xuICAgICAgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShhcmdzWzFdKSB8fCAoMCwgX2lzLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkoYXJnc1sxXSkpIHtcbiAgICAgICAgLy8gYSBmdW5jdGlvbiBwb2ludGVyLCBsaWtlIGZpbHRlcihbMywgLTIsIDVdLCBteVRlc3RGdW5jdGlvbilcbiAgICAgICAgY2FsbGJhY2sgPSBhcmdzWzFdLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhbiBleHByZXNzaW9uIGxpa2UgZmlsdGVyKFszLCAtMiwgNV0sIHggPiAwKVxuICAgICAgICBjYWxsYmFjayA9ICgwLCBfY29tcGlsZUlubGluZUV4cHJlc3Npb24uY29tcGlsZUlubGluZUV4cHJlc3Npb24pKGFyZ3NbMV0sIG1hdGgsIHNjb3BlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmlsdGVyKHgsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGZpbHRlclRyYW5zZm9ybS5yYXdBcmdzID0gdHJ1ZTsgLy8gb25lIGJhc2VkIHZlcnNpb24gb2YgZnVuY3Rpb24gZmlsdGVyXG5cbiAgdmFyIGZpbHRlciA9IHR5cGVkKCdmaWx0ZXInLCB7XG4gICAgJ0FycmF5LCBmdW5jdGlvbic6IF9maWx0ZXIsXG4gICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCB0ZXN0KSB7XG4gICAgICByZXR1cm4geC5jcmVhdGUoX2ZpbHRlcih4LnRvQXJyYXkoKSwgdGVzdCkpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBSZWdFeHAnOiBfYXJyYXkuZmlsdGVyUmVnRXhwLFxuICAgICdNYXRyaXgsIFJlZ0V4cCc6IGZ1bmN0aW9uIE1hdHJpeFJlZ0V4cCh4LCB0ZXN0KSB7XG4gICAgICByZXR1cm4geC5jcmVhdGUoKDAsIF9hcnJheS5maWx0ZXJSZWdFeHApKHgudG9BcnJheSgpLCB0ZXN0KSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZpbHRlclRyYW5zZm9ybTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG4vKipcbiAqIEZpbHRlciB2YWx1ZXMgaW4gYSBjYWxsYmFjayBnaXZlbiBhIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKlxuICogISEhIFBhc3NlcyBhIG9uZS1iYXNlZCBpbmRleCAhISFcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSB4XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7QXJyYXl9IFJldHVybnMgdGhlIGZpbHRlcmVkIGFycmF5XG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuY3JlYXRlRmlsdGVyVHJhbnNmb3JtID0gY3JlYXRlRmlsdGVyVHJhbnNmb3JtO1xuXG5mdW5jdGlvbiBfZmlsdGVyKHgsIGNhbGxiYWNrKSB7XG4gIC8vIGZpZ3VyZSBvdXQgd2hhdCBudW1iZXIgb2YgYXJndW1lbnRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleHBlY3RzXG4gIHZhciBhcmdzID0gKDAsIF9mdW5jdGlvbi5tYXhBcmd1bWVudENvdW50KShjYWxsYmFjayk7XG4gIHJldHVybiAoMCwgX2FycmF5LmZpbHRlcikoeCwgZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcbiAgICAvLyBpbnZva2UgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHNcbiAgICBpZiAoYXJncyA9PT0gMSkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlKTtcbiAgICB9IGVsc2UgaWYgKGFyZ3MgPT09IDIpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayh2YWx1ZSwgW2luZGV4ICsgMV0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyAzIG9yIC0xXG4gICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIFtpbmRleCArIDFdLCBhcnJheSk7XG4gICAgfVxuICB9KTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRm9yRWFjaFRyYW5zZm9ybSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mdW5jdGlvblwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29tcGlsZUlubGluZUV4cHJlc3Npb24gPSByZXF1aXJlKFwiLi91dGlscy9jb21waWxlSW5saW5lRXhwcmVzc2lvblwiKTtcblxudmFyIG5hbWUgPSAnZm9yRWFjaCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUZvckVhY2hUcmFuc2Zvcm0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5mb3JFYWNoXG4gICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHRyYW5zZm9ybSBjcmVhdGVzIGEgb25lLWJhc2VkIGluZGV4IGluc3RlYWQgb2YgYSB6ZXJvLWJhc2VkIGluZGV4XG4gICAqL1xuICBmdW5jdGlvbiBmb3JFYWNoVHJhbnNmb3JtKGFyZ3MsIG1hdGgsIHNjb3BlKSB7XG4gICAgdmFyIHgsIGNhbGxiYWNrO1xuXG4gICAgaWYgKGFyZ3NbMF0pIHtcbiAgICAgIHggPSBhcmdzWzBdLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3NbMV0pIHtcbiAgICAgIGlmICgoMCwgX2lzLmlzU3ltYm9sTm9kZSkoYXJnc1sxXSkgfHwgKDAsIF9pcy5pc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUpKGFyZ3NbMV0pKSB7XG4gICAgICAgIC8vIGEgZnVuY3Rpb24gcG9pbnRlciwgbGlrZSBmb3JFYWNoKFszLCAtMiwgNV0sIG15VGVzdEZ1bmN0aW9uKVxuICAgICAgICBjYWxsYmFjayA9IGFyZ3NbMV0uY29tcGlsZSgpLmV2YWx1YXRlKHNjb3BlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFuIGV4cHJlc3Npb24gbGlrZSBmb3JFYWNoKFszLCAtMiwgNV0sIHggPiAwID8gY2FsbGJhY2sxKHgpIDogY2FsbGJhY2syKHgpIClcbiAgICAgICAgY2FsbGJhY2sgPSAoMCwgX2NvbXBpbGVJbmxpbmVFeHByZXNzaW9uLmNvbXBpbGVJbmxpbmVFeHByZXNzaW9uKShhcmdzWzFdLCBtYXRoLCBzY29wZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIF9mb3JFYWNoKHgsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGZvckVhY2hUcmFuc2Zvcm0ucmF3QXJncyA9IHRydWU7IC8vIG9uZS1iYXNlZCB2ZXJzaW9uIG9mIGZvckVhY2hcblxuICB2YXIgX2ZvckVhY2ggPSB0eXBlZCgnZm9yRWFjaCcsIHtcbiAgICAnQXJyYXkgfCBNYXRyaXgsIGZ1bmN0aW9uJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhGdW5jdGlvbihhcnJheSwgY2FsbGJhY2spIHtcbiAgICAgIC8vIGZpZ3VyZSBvdXQgd2hhdCBudW1iZXIgb2YgYXJndW1lbnRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleHBlY3RzXG4gICAgICB2YXIgYXJncyA9ICgwLCBfZnVuY3Rpb24ubWF4QXJndW1lbnRDb3VudCkoY2FsbGJhY2spO1xuXG4gICAgICB2YXIgcmVjdXJzZSA9IGZ1bmN0aW9uIHJlY3Vyc2UodmFsdWUsIGluZGV4KSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICgwLCBfYXJyYXkuZm9yRWFjaCkodmFsdWUsIGZ1bmN0aW9uIChjaGlsZCwgaSkge1xuICAgICAgICAgICAgLy8gd2UgY3JlYXRlIGEgY29weSBvZiB0aGUgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCB0aGUgbmV3IGluZGV4IHZhbHVlXG4gICAgICAgICAgICByZWN1cnNlKGNoaWxkLCBpbmRleC5jb25jYXQoaSArIDEpKTsgLy8gb25lIGJhc2VkIGluZGV4LCBoZW5jZSBpKzFcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBpbnZva2UgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHNcbiAgICAgICAgICBpZiAoYXJncyA9PT0gMSkge1xuICAgICAgICAgICAgY2FsbGJhY2sodmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYXJncyA9PT0gMikge1xuICAgICAgICAgICAgY2FsbGJhY2sodmFsdWUsIGluZGV4KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gMyBvciAtMVxuICAgICAgICAgICAgY2FsbGJhY2sodmFsdWUsIGluZGV4LCBhcnJheSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICByZWN1cnNlKGFycmF5LnZhbHVlT2YoKSwgW10pOyAvLyBwYXNzIEFycmF5XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZm9yRWFjaFRyYW5zZm9ybTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZvckVhY2hUcmFuc2Zvcm0gPSBjcmVhdGVGb3JFYWNoVHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJbmRleFRyYW5zZm9ybSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2luZGV4JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ0luZGV4J107XG52YXIgY3JlYXRlSW5kZXhUcmFuc2Zvcm0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgSW5kZXggPSBfcmVmLkluZGV4O1xuXG4gIC8qKlxuICAgKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5pbmRleFxuICAgKiBBZGRzIGEgcHJvcGVydHkgdHJhbnNmb3JtIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbi5cbiAgICpcbiAgICogVGhpcyB0cmFuc2Zvcm0gY3JlYXRlcyBhIG9uZS1iYXNlZCBpbmRleCBpbnN0ZWFkIG9mIGEgemVyby1iYXNlZCBpbmRleFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGluZGV4VHJhbnNmb3JtKCkge1xuICAgIHZhciBhcmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIGFyZyA9IGFyZ3VtZW50c1tpXTsgLy8gY2hhbmdlIGZyb20gb25lLWJhc2VkIHRvIHplcm8gYmFzZWQsIGFuZCBjb252ZXJ0IEJpZ051bWJlciB0byBudW1iZXJcblxuICAgICAgaWYgKCgwLCBfaXMuaXNSYW5nZSkoYXJnKSkge1xuICAgICAgICBhcmcuc3RhcnQtLTtcbiAgICAgICAgYXJnLmVuZCAtPSBhcmcuc3RlcCA+IDAgPyAwIDogMjtcbiAgICAgIH0gZWxzZSBpZiAoYXJnICYmIGFyZy5pc1NldCA9PT0gdHJ1ZSkge1xuICAgICAgICBhcmcgPSBhcmcubWFwKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgcmV0dXJuIHYgLSAxO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0FycmF5KShhcmcpIHx8ICgwLCBfaXMuaXNNYXRyaXgpKGFyZykpIHtcbiAgICAgICAgYXJnID0gYXJnLm1hcChmdW5jdGlvbiAodikge1xuICAgICAgICAgIHJldHVybiB2IC0gMTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGFyZykpIHtcbiAgICAgICAgYXJnLS07XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGFyZykpIHtcbiAgICAgICAgYXJnID0gYXJnLnRvTnVtYmVyKCkgLSAxO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJykgey8vIGxlYXZlIGFzIGlzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdEaW1lbnNpb24gbXVzdCBiZSBhbiBBcnJheSwgTWF0cml4LCBudW1iZXIsIHN0cmluZywgb3IgUmFuZ2UnKTtcbiAgICAgIH1cblxuICAgICAgYXJnc1tpXSA9IGFyZztcbiAgICB9XG5cbiAgICB2YXIgcmVzID0gbmV3IEluZGV4KCk7XG4gICAgSW5kZXguYXBwbHkocmVzLCBhcmdzKTtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xufSwge1xuICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSW5kZXhUcmFuc2Zvcm0gPSBjcmVhdGVJbmRleFRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTWFwVHJhbnNmb3JtID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2Z1bmN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2Z1bmN0aW9uXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb21waWxlSW5saW5lRXhwcmVzc2lvbiA9IHJlcXVpcmUoXCIuL3V0aWxzL2NvbXBpbGVJbmxpbmVFeHByZXNzaW9uXCIpO1xuXG52YXIgbmFtZSA9ICdtYXAnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVNYXBUcmFuc2Zvcm0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5tYXBcbiAgICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gICAqXG4gICAqIFRoaXMgdHJhbnNmb3JtIGNyZWF0ZXMgYSBvbmUtYmFzZWQgaW5kZXggaW5zdGVhZCBvZiBhIHplcm8tYmFzZWQgaW5kZXhcbiAgICovXG4gIGZ1bmN0aW9uIG1hcFRyYW5zZm9ybShhcmdzLCBtYXRoLCBzY29wZSkge1xuICAgIHZhciB4LCBjYWxsYmFjaztcblxuICAgIGlmIChhcmdzWzBdKSB7XG4gICAgICB4ID0gYXJnc1swXS5jb21waWxlKCkuZXZhbHVhdGUoc2NvcGUpO1xuICAgIH1cblxuICAgIGlmIChhcmdzWzFdKSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc1N5bWJvbE5vZGUpKGFyZ3NbMV0pIHx8ICgwLCBfaXMuaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlKShhcmdzWzFdKSkge1xuICAgICAgICAvLyBhIGZ1bmN0aW9uIHBvaW50ZXIsIGxpa2UgZmlsdGVyKFszLCAtMiwgNV0sIG15VGVzdEZ1bmN0aW9uKVxuICAgICAgICBjYWxsYmFjayA9IGFyZ3NbMV0uY29tcGlsZSgpLmV2YWx1YXRlKHNjb3BlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGFuIGV4cHJlc3Npb24gbGlrZSBmaWx0ZXIoWzMsIC0yLCA1XSwgeCA+IDApXG4gICAgICAgIGNhbGxiYWNrID0gKDAsIF9jb21waWxlSW5saW5lRXhwcmVzc2lvbi5jb21waWxlSW5saW5lRXhwcmVzc2lvbikoYXJnc1sxXSwgbWF0aCwgc2NvcGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXAoeCwgY2FsbGJhY2spO1xuICB9XG5cbiAgbWFwVHJhbnNmb3JtLnJhd0FyZ3MgPSB0cnVlOyAvLyBvbmUtYmFzZWQgdmVyc2lvbiBvZiBtYXAgZnVuY3Rpb25cblxuICB2YXIgbWFwID0gdHlwZWQoJ21hcCcsIHtcbiAgICAnQXJyYXksIGZ1bmN0aW9uJzogZnVuY3Rpb24gQXJyYXlGdW5jdGlvbih4LCBjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIF9tYXAoeCwgY2FsbGJhY2ssIHgpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCBjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHguY3JlYXRlKF9tYXAoeC52YWx1ZU9mKCksIGNhbGxiYWNrLCB4KSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG1hcFRyYW5zZm9ybTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG4vKipcbiAqIE1hcCBmb3IgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheS4gT25lLWJhc2VkIGluZGV4ZXNcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtBcnJheX0gb3JpZ1xuICogQHJldHVybiB7QXJyYXl9XG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuY3JlYXRlTWFwVHJhbnNmb3JtID0gY3JlYXRlTWFwVHJhbnNmb3JtO1xuXG5mdW5jdGlvbiBfbWFwKGFycmF5LCBjYWxsYmFjaywgb3JpZykge1xuICAvLyBmaWd1cmUgb3V0IHdoYXQgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZXhwZWN0c1xuICB2YXIgYXJnc0NvdW50ID0gKDAsIF9mdW5jdGlvbi5tYXhBcmd1bWVudENvdW50KShjYWxsYmFjayk7XG5cbiAgZnVuY3Rpb24gcmVjdXJzZSh2YWx1ZSwgaW5kZXgpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiAoMCwgX2FycmF5Lm1hcCkodmFsdWUsIGZ1bmN0aW9uIChjaGlsZCwgaSkge1xuICAgICAgICAvLyB3ZSBjcmVhdGUgYSBjb3B5IG9mIHRoZSBpbmRleCBhcnJheSBhbmQgYXBwZW5kIHRoZSBuZXcgaW5kZXggdmFsdWVcbiAgICAgICAgcmV0dXJuIHJlY3Vyc2UoY2hpbGQsIGluZGV4LmNvbmNhdChpICsgMSkpOyAvLyBvbmUgYmFzZWQgaW5kZXgsIGhlbmNlIGkgKyAxXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaW52b2tlIHRoZSAodHlwZWQpIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHNcbiAgICAgIGlmIChhcmdzQ291bnQgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJnc0NvdW50ID09PSAyKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayh2YWx1ZSwgaW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gMyBvciAtMVxuICAgICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIGluZGV4LCBvcmlnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVjdXJzZShhcnJheSwgW10pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNYXhUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfbWF4ID0gcmVxdWlyZShcIi4uLy4uL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWF4XCIpO1xuXG52YXIgbmFtZSA9ICdtYXgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbGFyZ2VyJ107XG52YXIgY3JlYXRlTWF4VHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyO1xuICB2YXIgbWF4ID0gKDAsIF9tYXguY3JlYXRlTWF4KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGxhcmdlcjogbGFyZ2VyXG4gIH0pO1xuICAvKipcbiAgICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGgubWF4XG4gICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHRyYW5zZm9ybSBjaGFuZ2VkIHRoZSBsYXN0IGBkaW1gIHBhcmFtZXRlciBvZiBmdW5jdGlvbiBtYXhcbiAgICogZnJvbSBvbmUtYmFzZWQgdG8gemVybyBiYXNlZFxuICAgKi9cblxuICByZXR1cm4gdHlwZWQoJ21heCcsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIC8vIGNoYW5nZSBsYXN0IGFyZ3VtZW50IGRpbSBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkXG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDIgJiYgKDAsIF9pcy5pc0NvbGxlY3Rpb24pKGFyZ3NbMF0pKSB7XG4gICAgICAgIHZhciBkaW0gPSBhcmdzWzFdO1xuXG4gICAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbSAtIDE7XG4gICAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikoZGltKSkge1xuICAgICAgICAgIGFyZ3NbMV0gPSBkaW0ubWludXMoMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1heC5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2Vycm9yVHJhbnNmb3JtLmVycm9yVHJhbnNmb3JtKShlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59LCB7XG4gIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNYXhUcmFuc2Zvcm0gPSBjcmVhdGVNYXhUcmFuc2Zvcm07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1lYW5UcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfbWVhbiA9IHJlcXVpcmUoXCIuLi8uLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21lYW5cIik7XG5cbnZhciBuYW1lID0gJ21lYW4nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnYWRkJywgJ2RpdmlkZSddO1xudmFyIGNyZWF0ZU1lYW5UcmFuc2Zvcm0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWRkID0gX3JlZi5hZGQsXG4gICAgICBkaXZpZGUgPSBfcmVmLmRpdmlkZTtcbiAgdmFyIG1lYW4gPSAoMCwgX21lYW4uY3JlYXRlTWVhbikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBhZGQ6IGFkZCxcbiAgICBkaXZpZGU6IGRpdmlkZVxuICB9KTtcbiAgLyoqXG4gICAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLm1lYW5cbiAgICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gICAqXG4gICAqIFRoaXMgdHJhbnNmb3JtIGNoYW5nZWQgdGhlIGxhc3QgYGRpbWAgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uIG1lYW5cbiAgICogZnJvbSBvbmUtYmFzZWQgdG8gemVybyBiYXNlZFxuICAgKi9cblxuICByZXR1cm4gdHlwZWQoJ21lYW4nLCB7XG4gICAgJy4uLmFueSc6IGZ1bmN0aW9uIGFueShhcmdzKSB7XG4gICAgICAvLyBjaGFuZ2UgbGFzdCBhcmd1bWVudCBkaW0gZnJvbSBvbmUtYmFzZWQgdG8gemVyby1iYXNlZFxuICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAyICYmICgwLCBfaXMuaXNDb2xsZWN0aW9uKShhcmdzWzBdKSkge1xuICAgICAgICB2YXIgZGltID0gYXJnc1sxXTtcblxuICAgICAgICBpZiAoKDAsIF9pcy5pc051bWJlcikoZGltKSkge1xuICAgICAgICAgIGFyZ3NbMV0gPSBkaW0gLSAxO1xuICAgICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgICBhcmdzWzFdID0gZGltLm1pbnVzKDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtZWFuLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1lYW5UcmFuc2Zvcm0gPSBjcmVhdGVNZWFuVHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNaW5UcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfbWluID0gcmVxdWlyZShcIi4uLy4uL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWluXCIpO1xuXG52YXIgbmFtZSA9ICdtaW4nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc21hbGxlciddO1xudmFyIGNyZWF0ZU1pblRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBzbWFsbGVyID0gX3JlZi5zbWFsbGVyO1xuICB2YXIgbWluID0gKDAsIF9taW4uY3JlYXRlTWluKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIHNtYWxsZXI6IHNtYWxsZXJcbiAgfSk7XG4gIC8qKlxuICAgKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5taW5cbiAgICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gICAqXG4gICAqIFRoaXMgdHJhbnNmb3JtIGNoYW5nZWQgdGhlIGxhc3QgYGRpbWAgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uIG1pblxuICAgKiBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvIGJhc2VkXG4gICAqL1xuXG4gIHJldHVybiB0eXBlZCgnbWluJywge1xuICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykge1xuICAgICAgLy8gY2hhbmdlIGxhc3QgYXJndW1lbnQgZGltIGZyb20gb25lLWJhc2VkIHRvIHplcm8tYmFzZWRcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMiAmJiAoMCwgX2lzLmlzQ29sbGVjdGlvbikoYXJnc1swXSkpIHtcbiAgICAgICAgdmFyIGRpbSA9IGFyZ3NbMV07XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgICBhcmdzWzFdID0gZGltIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbWluLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1pblRyYW5zZm9ybSA9IGNyZWF0ZU1pblRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmFuZ2VUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3JhbmdlID0gcmVxdWlyZShcIi4uLy4uL2Z1bmN0aW9uL21hdHJpeC9yYW5nZVwiKTtcblxudmFyIG5hbWUgPSAncmFuZ2UnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJz9tYXRyaXgnLCAnP2JpZ251bWJlcicsICdzbWFsbGVyJywgJ3NtYWxsZXJFcScsICdsYXJnZXInLCAnbGFyZ2VyRXEnXTtcbnZhciBjcmVhdGVSYW5nZVRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgYmlnbnVtYmVyID0gX3JlZi5iaWdudW1iZXIsXG4gICAgICBzbWFsbGVyID0gX3JlZi5zbWFsbGVyLFxuICAgICAgc21hbGxlckVxID0gX3JlZi5zbWFsbGVyRXEsXG4gICAgICBsYXJnZXIgPSBfcmVmLmxhcmdlcixcbiAgICAgIGxhcmdlckVxID0gX3JlZi5sYXJnZXJFcTtcbiAgdmFyIHJhbmdlID0gKDAsIF9yYW5nZS5jcmVhdGVSYW5nZSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBjb25maWc6IGNvbmZpZyxcbiAgICBtYXRyaXg6IG1hdHJpeCxcbiAgICBiaWdudW1iZXI6IGJpZ251bWJlcixcbiAgICBzbWFsbGVyOiBzbWFsbGVyLFxuICAgIHNtYWxsZXJFcTogc21hbGxlckVxLFxuICAgIGxhcmdlcjogbGFyZ2VyLFxuICAgIGxhcmdlckVxOiBsYXJnZXJFcVxuICB9KTtcbiAgLyoqXG4gICAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLnJhbmdlXG4gICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHRyYW5zZm9ybSBjcmVhdGVzIGEgcmFuZ2Ugd2hpY2ggaW5jbHVkZXMgdGhlIGVuZCB2YWx1ZVxuICAgKi9cblxuICByZXR1cm4gdHlwZWQoJ3JhbmdlJywge1xuICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykge1xuICAgICAgdmFyIGxhc3RJbmRleCA9IGFyZ3MubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBsYXN0ID0gYXJnc1tsYXN0SW5kZXhdO1xuXG4gICAgICBpZiAodHlwZW9mIGxhc3QgIT09ICdib29sZWFuJykge1xuICAgICAgICAvLyBhcHBlbmQgYSBwYXJhbWV0ZXIgaW5jbHVkZUVuZD10cnVlXG4gICAgICAgIGFyZ3MucHVzaCh0cnVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJhbmdlLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIH1cbiAgfSk7XG59LCB7XG4gIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSYW5nZVRyYW5zZm9ybSA9IGNyZWF0ZVJhbmdlVHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSb3dUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3JvdyA9IHJlcXVpcmUoXCIuLi8uLi9mdW5jdGlvbi9tYXRyaXgvcm93XCIpO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBuYW1lID0gJ3Jvdyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdJbmRleCcsICdtYXRyaXgnLCAncmFuZ2UnXTtcbi8qKlxuICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdHJpeC5jb2x1bW5cbiAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgdHJhbnNmb3JtIGNoYW5nZWQgdGhlIGxhc3QgYGluZGV4YCBwYXJhbWV0ZXIgb2YgZnVuY3Rpb24gY29sdW1uXG4gKiBmcm9tIHplcm8tYmFzZWQgdG8gb25lLWJhc2VkXG4gKi9cblxudmFyIGNyZWF0ZVJvd1RyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBJbmRleCA9IF9yZWYuSW5kZXgsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIHJhbmdlID0gX3JlZi5yYW5nZTtcbiAgdmFyIHJvdyA9ICgwLCBfcm93LmNyZWF0ZVJvdykoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBJbmRleDogSW5kZXgsXG4gICAgbWF0cml4OiBtYXRyaXgsXG4gICAgcmFuZ2U6IHJhbmdlXG4gIH0pOyAvLyBAc2VlOiBjb21tZW50IG9mIHJvdyBpdHNlbGZcblxuICByZXR1cm4gdHlwZWQoJ3JvdycsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIC8vIGNoYW5nZSBsYXN0IGFyZ3VtZW50IGZyb20gemVyby1iYXNlZCB0byBvbmUtYmFzZWRcbiAgICAgIHZhciBsYXN0SW5kZXggPSBhcmdzLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgbGFzdCA9IGFyZ3NbbGFzdEluZGV4XTtcblxuICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGxhc3QpKSB7XG4gICAgICAgIGFyZ3NbbGFzdEluZGV4XSA9IGxhc3QgLSAxO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcm93LmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJvd1RyYW5zZm9ybSA9IGNyZWF0ZVJvd1RyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3RkVHJhbnNmb3JtID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9zdGQgPSByZXF1aXJlKFwiLi4vLi4vZnVuY3Rpb24vc3RhdGlzdGljcy9zdGRcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZXJyb3JUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi91dGlscy9lcnJvclRyYW5zZm9ybVwiKTtcblxudmFyIG5hbWUgPSAnc3RkJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NxcnQnLCAndmFyaWFuY2UnXTtcbi8qKlxuICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGguc3RkXG4gKiBBZGRzIGEgcHJvcGVydHkgdHJhbnNmb3JtIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbi5cbiAqXG4gKiBUaGlzIHRyYW5zZm9ybSBjaGFuZ2VkIHRoZSBgZGltYCBwYXJhbWV0ZXIgb2YgZnVuY3Rpb24gc3RkXG4gKiBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvIGJhc2VkXG4gKi9cblxudmFyIGNyZWF0ZVN0ZFRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBzcXJ0ID0gX3JlZi5zcXJ0LFxuICAgICAgdmFyaWFuY2UgPSBfcmVmLnZhcmlhbmNlO1xuICB2YXIgc3RkID0gKDAsIF9zdGQuY3JlYXRlU3RkKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIHNxcnQ6IHNxcnQsXG4gICAgdmFyaWFuY2U6IHZhcmlhbmNlXG4gIH0pO1xuICByZXR1cm4gdHlwZWQoJ3N0ZCcsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIC8vIGNoYW5nZSBsYXN0IGFyZ3VtZW50IGRpbSBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkXG4gICAgICBpZiAoYXJncy5sZW5ndGggPj0gMiAmJiAoMCwgX2lzLmlzQ29sbGVjdGlvbikoYXJnc1swXSkpIHtcbiAgICAgICAgdmFyIGRpbSA9IGFyZ3NbMV07XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgICBhcmdzWzFdID0gZGltIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gc3RkLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVN0ZFRyYW5zZm9ybSA9IGNyZWF0ZVN0ZFRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3Vic2V0VHJhbnNmb3JtID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9lcnJvclRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL3V0aWxzL2Vycm9yVHJhbnNmb3JtXCIpO1xuXG52YXIgX3N1YnNldCA9IHJlcXVpcmUoXCIuLi8uLi9mdW5jdGlvbi9tYXRyaXgvc3Vic2V0XCIpO1xuXG52YXIgbmFtZSA9ICdzdWJzZXQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4J107XG52YXIgY3JlYXRlU3Vic2V0VHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4O1xuICB2YXIgc3Vic2V0ID0gKDAsIF9zdWJzZXQuY3JlYXRlU3Vic2V0KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIG1hdHJpeDogbWF0cml4XG4gIH0pO1xuICAvKipcbiAgICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGguc3Vic2V0XG4gICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHRyYW5zZm9ybSBjcmVhdGVzIGEgcmFuZ2Ugd2hpY2ggaW5jbHVkZXMgdGhlIGVuZCB2YWx1ZVxuICAgKi9cblxuICByZXR1cm4gdHlwZWQoJ3N1YnNldCcsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBzdWJzZXQuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9lcnJvclRyYW5zZm9ybS5lcnJvclRyYW5zZm9ybSkoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufSwge1xuICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3Vic2V0VHJhbnNmb3JtID0gY3JlYXRlU3Vic2V0VHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTdW1UcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfc3VtID0gcmVxdWlyZShcIi4uLy4uL2Z1bmN0aW9uL3N0YXRpc3RpY3Mvc3VtXCIpO1xuXG4vKipcbiAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLnN1bVxuICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gKlxuICogVGhpcyB0cmFuc2Zvcm0gY2hhbmdlZCB0aGUgbGFzdCBgZGltYCBwYXJhbWV0ZXIgb2YgZnVuY3Rpb24gbWVhblxuICogZnJvbSBvbmUtYmFzZWQgdG8gemVybyBiYXNlZFxuICovXG52YXIgbmFtZSA9ICdzdW0nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ2FkZCcsICc/YmlnbnVtYmVyJywgJz9mcmFjdGlvbiddO1xudmFyIGNyZWF0ZVN1bVRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgYmlnbnVtYmVyID0gX3JlZi5iaWdudW1iZXIsXG4gICAgICBmcmFjdGlvbiA9IF9yZWYuZnJhY3Rpb247XG4gIHZhciBzdW0gPSAoMCwgX3N1bS5jcmVhdGVTdW0pKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgY29uZmlnOiBjb25maWcsXG4gICAgYWRkOiBhZGQsXG4gICAgYmlnbnVtYmVyOiBiaWdudW1iZXIsXG4gICAgZnJhY3Rpb246IGZyYWN0aW9uXG4gIH0pO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykge1xuICAgICAgLy8gY2hhbmdlIGxhc3QgYXJndW1lbnQgZGltIGZyb20gb25lLWJhc2VkIHRvIHplcm8tYmFzZWRcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMiAmJiAoMCwgX2lzLmlzQ29sbGVjdGlvbikoYXJnc1swXSkpIHtcbiAgICAgICAgdmFyIGRpbSA9IGFyZ3NbMV07XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgICBhcmdzWzFdID0gZGltIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gc3VtLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVN1bVRyYW5zZm9ybSA9IGNyZWF0ZVN1bVRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcGlsZUlubGluZUV4cHJlc3Npb24gPSBjb21waWxlSW5saW5lRXhwcmVzc2lvbjtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9pc1wiKTtcblxuLyoqXG4gKiBDb21waWxlIGFuIGlubGluZSBleHByZXNzaW9uIGxpa2UgXCJ4ID4gMFwiXG4gKiBAcGFyYW0ge05vZGV9IGV4cHJlc3Npb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoXG4gKiBAcGFyYW0ge09iamVjdH0gc2NvcGVcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2l0aCBvbmUgYXJndW1lbnQgd2hpY2ggZmlsbHMgaW4gdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkIHZhcmlhYmxlIChsaWtlIFwieFwiKSBhbmQgZXZhbHVhdGVzIHRoZSBleHByZXNzaW9uXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVJbmxpbmVFeHByZXNzaW9uKGV4cHJlc3Npb24sIG1hdGgsIHNjb3BlKSB7XG4gIC8vIGZpbmQgYW4gdW5kZWZpbmVkIHN5bWJvbFxuICB2YXIgc3ltYm9sID0gZXhwcmVzc2lvbi5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICByZXR1cm4gKDAsIF9pcy5pc1N5bWJvbE5vZGUpKG5vZGUpICYmICEobm9kZS5uYW1lIGluIG1hdGgpICYmICEobm9kZS5uYW1lIGluIHNjb3BlKTtcbiAgfSlbMF07XG5cbiAgaWYgKCFzeW1ib2wpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIHVuZGVmaW5lZCB2YXJpYWJsZSBmb3VuZCBpbiBpbmxpbmUgZXhwcmVzc2lvbiBcIicgKyBleHByZXNzaW9uICsgJ1wiJyk7XG4gIH0gLy8gY3JlYXRlIGEgdGVzdCBmdW5jdGlvbiBmb3IgdGhpcyBlcXVhdGlvblxuXG5cbiAgdmFyIG5hbWUgPSBzeW1ib2wubmFtZTsgLy8gdmFyaWFibGUgbmFtZVxuXG4gIHZhciBzdWJTY29wZSA9IE9iamVjdC5jcmVhdGUoc2NvcGUpO1xuICB2YXIgZXEgPSBleHByZXNzaW9uLmNvbXBpbGUoKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIGlubGluZUV4cHJlc3Npb24oeCkge1xuICAgIHN1YlNjb3BlW25hbWVdID0geDtcbiAgICByZXR1cm4gZXEuZXZhbHVhdGUoc3ViU2NvcGUpO1xuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lcnJvclRyYW5zZm9ybSA9IGVycm9yVHJhbnNmb3JtO1xuXG52YXIgX0luZGV4RXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vZXJyb3IvSW5kZXhFcnJvclwiKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gemVyby1iYXNlZCBpbmRpY2VzIHRvIG9uZS1iYXNlZCBpbmRpY2VzIGluIGVycm9yc1xuICogQHBhcmFtIHtFcnJvcn0gZXJyXG4gKiBAcmV0dXJucyB7RXJyb3IgfCBJbmRleEVycm9yfSBSZXR1cm5zIHRoZSB0cmFuc2Zvcm1lZCBlcnJvclxuICovXG5mdW5jdGlvbiBlcnJvclRyYW5zZm9ybShlcnIpIHtcbiAgaWYgKGVyciAmJiBlcnIuaXNJbmRleEVycm9yKSB7XG4gICAgcmV0dXJuIG5ldyBfSW5kZXhFcnJvci5JbmRleEVycm9yKGVyci5pbmRleCArIDEsIGVyci5taW4gKyAxLCBlcnIubWF4ICE9PSB1bmRlZmluZWQgPyBlcnIubWF4ICsgMSA6IHVuZGVmaW5lZCk7XG4gIH1cblxuICByZXR1cm4gZXJyO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVWYXJpYW5jZVRyYW5zZm9ybSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZXJyb3JUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi91dGlscy9lcnJvclRyYW5zZm9ybVwiKTtcblxudmFyIF92YXJpYW5jZSA9IHJlcXVpcmUoXCIuLi8uLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3ZhcmlhbmNlXCIpO1xuXG52YXIgbmFtZSA9ICd2YXJpYW5jZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGQnLCAnc3VidHJhY3QnLCAnbXVsdGlwbHknLCAnZGl2aWRlJywgJ2FwcGx5JywgJ2lzTmFOJ107XG4vKipcbiAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLnZhclxuICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gKlxuICogVGhpcyB0cmFuc2Zvcm0gY2hhbmdlZCB0aGUgYGRpbWAgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uIHZhclxuICogZnJvbSBvbmUtYmFzZWQgdG8gemVybyBiYXNlZFxuICovXG5cbnZhciBjcmVhdGVWYXJpYW5jZVRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGRpdmlkZSA9IF9yZWYuZGl2aWRlLFxuICAgICAgYXBwbHkgPSBfcmVmLmFwcGx5LFxuICAgICAgaXNOYU4gPSBfcmVmLmlzTmFOO1xuICB2YXIgdmFyaWFuY2UgPSAoMCwgX3ZhcmlhbmNlLmNyZWF0ZVZhcmlhbmNlKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGFkZDogYWRkLFxuICAgIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgICBtdWx0aXBseTogbXVsdGlwbHksXG4gICAgZGl2aWRlOiBkaXZpZGUsXG4gICAgYXBwbHk6IGFwcGx5LFxuICAgIGlzTmFOOiBpc05hTlxuICB9KTtcbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIC8vIGNoYW5nZSBsYXN0IGFyZ3VtZW50IGRpbSBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkXG4gICAgICBpZiAoYXJncy5sZW5ndGggPj0gMiAmJiAoMCwgX2lzLmlzQ29sbGVjdGlvbikoYXJnc1swXSkpIHtcbiAgICAgICAgdmFyIGRpbSA9IGFyZ3NbMV07XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgICBhcmdzWzFdID0gZGltIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdmFyaWFuY2UuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9lcnJvclRyYW5zZm9ybS5lcnJvclRyYW5zZm9ybSkoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufSwge1xuICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVmFyaWFuY2VUcmFuc2Zvcm0gPSBjcmVhdGVWYXJpYW5jZVRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVR5cGVkXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF90eXBlZC5jcmVhdGVUeXBlZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSZXN1bHRTZXRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX1Jlc3VsdFNldC5jcmVhdGVSZXN1bHRTZXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQmlnTnVtYmVyQ2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0JpZ051bWJlci5jcmVhdGVCaWdOdW1iZXJDbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb21wbGV4Q2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0NvbXBsZXguY3JlYXRlQ29tcGxleENsYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZyYWN0aW9uQ2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0ZyYWN0aW9uLmNyZWF0ZUZyYWN0aW9uQ2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmFuZ2VDbGFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfUmFuZ2UuY3JlYXRlUmFuZ2VDbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNYXRyaXhDbGFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfTWF0cml4LmNyZWF0ZU1hdHJpeENsYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURlbnNlTWF0cml4Q2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0RlbnNlTWF0cml4LmNyZWF0ZURlbnNlTWF0cml4Q2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ2xvbmVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Nsb25lLmNyZWF0ZUNsb25lO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUlzSW50ZWdlclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXNJbnRlZ2VyLmNyZWF0ZUlzSW50ZWdlcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJc05lZ2F0aXZlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc05lZ2F0aXZlLmNyZWF0ZUlzTmVnYXRpdmU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSXNOdW1lcmljXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc051bWVyaWMuY3JlYXRlSXNOdW1lcmljO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUhhc051bWVyaWNWYWx1ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaGFzTnVtZXJpY1ZhbHVlLmNyZWF0ZUhhc051bWVyaWNWYWx1ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJc1Bvc2l0aXZlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc1Bvc2l0aXZlLmNyZWF0ZUlzUG9zaXRpdmU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSXNaZXJvXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc1plcm8uY3JlYXRlSXNaZXJvO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUlzTmFOXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc05hTi5jcmVhdGVJc05hTjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUeXBlT2ZcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3R5cGVPZi5jcmVhdGVUeXBlT2Y7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRGVwcmVjYXRlZFR5cGVvZlwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdHlwZU9mLmNyZWF0ZURlcHJlY2F0ZWRUeXBlb2Y7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRXF1YWxTY2FsYXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2VxdWFsU2NhbGFyLmNyZWF0ZUVxdWFsU2NhbGFyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNwYXJzZU1hdHJpeENsYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9TcGFyc2VNYXRyaXguY3JlYXRlU3BhcnNlTWF0cml4Q2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTnVtYmVyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9udW1iZXIuY3JlYXRlTnVtYmVyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN0cmluZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3RyaW5nLmNyZWF0ZVN0cmluZztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVCb29sZWFuXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9ib29sZWFuLmNyZWF0ZUJvb2xlYW47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQmlnbnVtYmVyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9iaWdudW1iZXIuY3JlYXRlQmlnbnVtYmVyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbXBsZXhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbXBsZXguY3JlYXRlQ29tcGxleDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGcmFjdGlvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZnJhY3Rpb24uY3JlYXRlRnJhY3Rpb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWF0cml4XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tYXRyaXguY3JlYXRlTWF0cml4O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNwbGl0VW5pdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3BsaXRVbml0LmNyZWF0ZVNwbGl0VW5pdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVVbmFyeU1pbnVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF91bmFyeU1pbnVzLmNyZWF0ZVVuYXJ5TWludXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVW5hcnlQbHVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF91bmFyeVBsdXMuY3JlYXRlVW5hcnlQbHVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFic1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYWJzLmNyZWF0ZUFicztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBcHBseVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYXBwbHkuY3JlYXRlQXBwbHk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQWRkU2NhbGFyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hZGRTY2FsYXIuY3JlYXRlQWRkU2NhbGFyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNicnRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NicnQuY3JlYXRlQ2JydDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDZWlsXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jZWlsLmNyZWF0ZUNlaWw7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ3ViZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY3ViZS5jcmVhdGVDdWJlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUV4cFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZXhwLmNyZWF0ZUV4cDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFeHBtMVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZXhwbS5jcmVhdGVFeHBtMTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGaXhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ZpeC5jcmVhdGVGaXg7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmxvb3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Zsb29yLmNyZWF0ZUZsb29yO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUdjZFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZ2NkLmNyZWF0ZUdjZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMY21cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2xjbS5jcmVhdGVMY207XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTG9nMTBcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2xvZy5jcmVhdGVMb2cxMDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMb2cyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9sb2cyLmNyZWF0ZUxvZzI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTW9kXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tb2QuY3JlYXRlTW9kO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU11bHRpcGx5U2NhbGFyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tdWx0aXBseVNjYWxhci5jcmVhdGVNdWx0aXBseVNjYWxhcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNdWx0aXBseVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbXVsdGlwbHkuY3JlYXRlTXVsdGlwbHk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTnRoUm9vdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbnRoUm9vdC5jcmVhdGVOdGhSb290O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNpZ25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NpZ24uY3JlYXRlU2lnbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTcXJ0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zcXJ0LmNyZWF0ZVNxcnQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3F1YXJlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zcXVhcmUuY3JlYXRlU3F1YXJlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN1YnRyYWN0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdWJ0cmFjdC5jcmVhdGVTdWJ0cmFjdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVYZ2NkXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF94Z2NkLmNyZWF0ZVhnY2Q7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRG90TXVsdGlwbHlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RvdE11bHRpcGx5LmNyZWF0ZURvdE11bHRpcGx5O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUJpdEFuZFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYml0QW5kLmNyZWF0ZUJpdEFuZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVCaXROb3RcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2JpdE5vdC5jcmVhdGVCaXROb3Q7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQml0T3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2JpdE9yLmNyZWF0ZUJpdE9yO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUJpdFhvclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYml0WG9yLmNyZWF0ZUJpdFhvcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBcmdcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2FyZy5jcmVhdGVBcmc7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ29ualwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uai5jcmVhdGVDb25qO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUltXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pbS5jcmVhdGVJbTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcmUuY3JlYXRlUmU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTm90XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9ub3QuY3JlYXRlTm90O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU9yXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9vci5jcmVhdGVPcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVYb3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3hvci5jcmVhdGVYb3I7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ29uY2F0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25jYXQuY3JlYXRlQ29uY2F0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbHVtblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29sdW1uLmNyZWF0ZUNvbHVtbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDcm9zc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY3Jvc3MuY3JlYXRlQ3Jvc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRGlhZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGlhZy5jcmVhdGVEaWFnO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUV5ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZXllLmNyZWF0ZUV5ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGaWx0ZXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ZpbHRlci5jcmVhdGVGaWx0ZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmxhdHRlblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZmxhdHRlbi5jcmVhdGVGbGF0dGVuO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZvckVhY2hcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ZvckVhY2guY3JlYXRlRm9yRWFjaDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVHZXRNYXRyaXhEYXRhVHlwZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZ2V0TWF0cml4RGF0YVR5cGUuY3JlYXRlR2V0TWF0cml4RGF0YVR5cGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSWRlbnRpdHlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lkZW50aXR5LmNyZWF0ZUlkZW50aXR5O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUtyb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2tyb24uY3JlYXRlS3JvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNYXBcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX21hcC5jcmVhdGVNYXA7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlT25lc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfb25lcy5jcmVhdGVPbmVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJhbmdlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yYW5nZS5jcmVhdGVSYW5nZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSZXNoYXBlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yZXNoYXBlLmNyZWF0ZVJlc2hhcGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmVzaXplXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yZXNpemUuY3JlYXRlUmVzaXplO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJvd1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcm93LmNyZWF0ZVJvdztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTaXplXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zaXplLmNyZWF0ZVNpemU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3F1ZWV6ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3F1ZWV6ZS5jcmVhdGVTcXVlZXplO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN1YnNldFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3Vic2V0LmNyZWF0ZVN1YnNldDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUcmFuc3Bvc2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3RyYW5zcG9zZS5jcmVhdGVUcmFuc3Bvc2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ3RyYW5zcG9zZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY3RyYW5zcG9zZS5jcmVhdGVDdHJhbnNwb3NlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVplcm9zXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF96ZXJvcy5jcmVhdGVaZXJvcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFcmZcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2VyZi5jcmVhdGVFcmY7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTW9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbW9kZS5jcmVhdGVNb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVByb2RcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3Byb2QuY3JlYXRlUHJvZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGb3JtYXRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Zvcm1hdC5jcmVhdGVGb3JtYXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUHJpbnRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3ByaW50LmNyZWF0ZVByaW50O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVRvXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF90by5jcmVhdGVUbztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJc1ByaW1lXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pc1ByaW1lLmNyZWF0ZUlzUHJpbWU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTnVtZXJpY1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbnVtZXJpYy5jcmVhdGVOdW1lcmljO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURpdmlkZVNjYWxhclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGl2aWRlU2NhbGFyLmNyZWF0ZURpdmlkZVNjYWxhcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQb3dcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3Bvdy5jcmVhdGVQb3c7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUm91bmRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3JvdW5kLmNyZWF0ZVJvdW5kO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUxvZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbG9nMy5jcmVhdGVMb2c7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTG9nMXBcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2xvZzFwLmNyZWF0ZUxvZzFwO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU50aFJvb3RzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9udGhSb290cy5jcmVhdGVOdGhSb290cztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEb3RQb3dcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RvdFBvdy5jcmVhdGVEb3RQb3c7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRG90RGl2aWRlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kb3REaXZpZGUuY3JlYXRlRG90RGl2aWRlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUxzb2x2ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbHNvbHZlLmNyZWF0ZUxzb2x2ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVVc29sdmVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3Vzb2x2ZS5jcmVhdGVVc29sdmU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTGVmdFNoaWZ0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9sZWZ0U2hpZnQuY3JlYXRlTGVmdFNoaWZ0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJpZ2h0QXJpdGhTaGlmdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcmlnaHRBcml0aFNoaWZ0LmNyZWF0ZVJpZ2h0QXJpdGhTaGlmdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSaWdodExvZ1NoaWZ0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yaWdodExvZ1NoaWZ0LmNyZWF0ZVJpZ2h0TG9nU2hpZnQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQW5kXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hbmQuY3JlYXRlQW5kO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbXBhcmVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbXBhcmUuY3JlYXRlQ29tcGFyZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb21wYXJlTmF0dXJhbFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29tcGFyZU5hdHVyYWwuY3JlYXRlQ29tcGFyZU5hdHVyYWw7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ29tcGFyZVRleHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbXBhcmVUZXh0LmNyZWF0ZUNvbXBhcmVUZXh0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUVxdWFsXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9lcXVhbC5jcmVhdGVFcXVhbDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFcXVhbFRleHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2VxdWFsVGV4dC5jcmVhdGVFcXVhbFRleHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU21hbGxlclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc21hbGxlci5jcmVhdGVTbWFsbGVyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNtYWxsZXJFcVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc21hbGxlckVxLmNyZWF0ZVNtYWxsZXJFcTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMYXJnZXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2xhcmdlci5jcmVhdGVMYXJnZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTGFyZ2VyRXFcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2xhcmdlckVxLmNyZWF0ZUxhcmdlckVxO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURlZXBFcXVhbFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVlcEVxdWFsLmNyZWF0ZURlZXBFcXVhbDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVVbmVxdWFsXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF91bmVxdWFsLmNyZWF0ZVVuZXF1YWw7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUGFydGl0aW9uU2VsZWN0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9wYXJ0aXRpb25TZWxlY3QuY3JlYXRlUGFydGl0aW9uU2VsZWN0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNvcnRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NvcnQuY3JlYXRlU29ydDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNYXhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX21heC5jcmVhdGVNYXg7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWluXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9taW4uY3JlYXRlTWluO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0ltbXV0YWJsZURlbnNlTWF0cml4LmNyZWF0ZUltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSW5kZXhDbGFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfTWF0cml4SW5kZXguY3JlYXRlSW5kZXhDbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGaWJvbmFjY2lIZWFwQ2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0ZpYm9uYWNjaUhlYXAuY3JlYXRlRmlib25hY2NpSGVhcENsYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNwYUNsYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9TcGEuY3JlYXRlU3BhQ2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVW5pdENsYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9Vbml0LmNyZWF0ZVVuaXRDbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVVbml0RnVuY3Rpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3VuaXQuY3JlYXRlVW5pdEZ1bmN0aW9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNwYXJzZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3BhcnNlLmNyZWF0ZVNwYXJzZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDcmVhdGVVbml0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jcmVhdGVVbml0LmNyZWF0ZUNyZWF0ZVVuaXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQWNvc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYWNvcy5jcmVhdGVBY29zO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFjb3NoXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hY29zaC5jcmVhdGVBY29zaDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBY290XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hY290LmNyZWF0ZUFjb3Q7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQWNvdGhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Fjb3RoLmNyZWF0ZUFjb3RoO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFjc2NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Fjc2MuY3JlYXRlQWNzYztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBY3NjaFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYWNzY2guY3JlYXRlQWNzY2g7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXNlY1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYXNlYy5jcmVhdGVBc2VjO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFzZWNoXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hc2VjaC5jcmVhdGVBc2VjaDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBc2luXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hc2luLmNyZWF0ZUFzaW47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXNpbmhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2FzaW5oLmNyZWF0ZUFzaW5oO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUF0YW5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2F0YW4uY3JlYXRlQXRhbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBdGFuMlwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYXRhbjIuY3JlYXRlQXRhbjI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXRhbmhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2F0YW5oLmNyZWF0ZUF0YW5oO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29zLmNyZWF0ZUNvcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb3NoXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb3NoLmNyZWF0ZUNvc2g7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ290XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb3QuY3JlYXRlQ290O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvdGhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvdGguY3JlYXRlQ290aDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDc2NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NzYy5jcmVhdGVDc2M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ3NjaFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY3NjaC5jcmVhdGVDc2NoO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNlY1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2VjLmNyZWF0ZVNlYztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZWNoXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZWNoLmNyZWF0ZVNlY2g7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2luXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zaW4uY3JlYXRlU2luO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNpbmhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NpbmguY3JlYXRlU2luaDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUYW5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3Rhbi5jcmVhdGVUYW47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVGFuaFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdGFuaC5jcmVhdGVUYW5oO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNldENhcnRlc2lhblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2V0Q2FydGVzaWFuLmNyZWF0ZVNldENhcnRlc2lhbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZXREaWZmZXJlbmNlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZXREaWZmZXJlbmNlLmNyZWF0ZVNldERpZmZlcmVuY2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2V0RGlzdGluY3RcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NldERpc3RpbmN0LmNyZWF0ZVNldERpc3RpbmN0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNldEludGVyc2VjdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2V0SW50ZXJzZWN0LmNyZWF0ZVNldEludGVyc2VjdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZXRJc1N1YnNldFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2V0SXNTdWJzZXQuY3JlYXRlU2V0SXNTdWJzZXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2V0TXVsdGlwbGljaXR5XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZXRNdWx0aXBsaWNpdHkuY3JlYXRlU2V0TXVsdGlwbGljaXR5O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNldFBvd2Vyc2V0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZXRQb3dlcnNldC5jcmVhdGVTZXRQb3dlcnNldDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZXRTaXplXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZXRTaXplLmNyZWF0ZVNldFNpemU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2V0U3ltRGlmZmVyZW5jZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2V0U3ltRGlmZmVyZW5jZS5jcmVhdGVTZXRTeW1EaWZmZXJlbmNlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNldFVuaW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZXRVbmlvbi5jcmVhdGVTZXRVbmlvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBZGRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2FkZC5jcmVhdGVBZGQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSHlwb3RcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2h5cG90LmNyZWF0ZUh5cG90O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU5vcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX25vcm0uY3JlYXRlTm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEb3RcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RvdC5jcmVhdGVEb3Q7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVHJhY2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3RyYWNlLmNyZWF0ZVRyYWNlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUluZGV4XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9mdW5jdGlvbi5jcmVhdGVJbmRleDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVOb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9Ob2RlLmNyZWF0ZU5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQWNjZXNzb3JOb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9BY2Nlc3Nvck5vZGUuY3JlYXRlQWNjZXNzb3JOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFycmF5Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfQXJyYXlOb2RlLmNyZWF0ZUFycmF5Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBc3NpZ25tZW50Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfQXNzaWdubWVudE5vZGUuY3JlYXRlQXNzaWdubWVudE5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQmxvY2tOb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9CbG9ja05vZGUuY3JlYXRlQmxvY2tOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbmRpdGlvbmFsTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfQ29uZGl0aW9uYWxOb2RlLmNyZWF0ZUNvbmRpdGlvbmFsTm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb25zdGFudE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0NvbnN0YW50Tm9kZS5jcmVhdGVDb25zdGFudE5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5jcmVhdGVGdW5jdGlvbkFzc2lnbm1lbnROb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUluZGV4Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfSW5kZXhOb2RlLmNyZWF0ZUluZGV4Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVPYmplY3ROb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9PYmplY3ROb2RlLmNyZWF0ZU9iamVjdE5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlT3BlcmF0b3JOb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9PcGVyYXRvck5vZGUuY3JlYXRlT3BlcmF0b3JOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBhcmVudGhlc2lzTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfUGFyZW50aGVzaXNOb2RlLmNyZWF0ZVBhcmVudGhlc2lzTm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSYW5nZU5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX1JhbmdlTm9kZS5jcmVhdGVSYW5nZU5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmVsYXRpb25hbE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX1JlbGF0aW9uYWxOb2RlLmNyZWF0ZVJlbGF0aW9uYWxOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN5bWJvbE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX1N5bWJvbE5vZGUuY3JlYXRlU3ltYm9sTm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGdW5jdGlvbk5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0Z1bmN0aW9uTm9kZS5jcmVhdGVGdW5jdGlvbk5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUGFyc2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BhcnNlLmNyZWF0ZVBhcnNlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbXBpbGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbXBpbGUuY3JlYXRlQ29tcGlsZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFdmFsdWF0ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZXZhbHVhdGUuY3JlYXRlRXZhbHVhdGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRGVwcmVjYXRlZEV2YWxcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2V2YWwuY3JlYXRlRGVwcmVjYXRlZEV2YWw7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUGFyc2VyQ2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX1BhcnNlci5jcmVhdGVQYXJzZXJDbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQYXJzZXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BhcnNlci5jcmVhdGVQYXJzZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTHVwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9sdXAuY3JlYXRlTHVwO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVFyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9xci5jcmVhdGVRcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTbHVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NsdS5jcmVhdGVTbHU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTHVzb2x2ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbHVzb2x2ZS5jcmVhdGVMdXNvbHZlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUhlbHBDbGFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfSGVscC5jcmVhdGVIZWxwQ2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ2hhaW5DbGFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfQ2hhaW4uY3JlYXRlQ2hhaW5DbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVIZWxwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9oZWxwLmNyZWF0ZUhlbHA7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ2hhaW5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NoYWluLmNyZWF0ZUNoYWluO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURldFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGV0LmNyZWF0ZURldDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJbnZcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ludi5jcmVhdGVJbnY7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRWlnc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZWlncy5jcmVhdGVFaWdzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUV4cG1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2V4cG0yLmNyZWF0ZUV4cG07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3FydG1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NxcnRtLmNyZWF0ZVNxcnRtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURpdmlkZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGl2aWRlLmNyZWF0ZURpdmlkZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEaXN0YW5jZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGlzdGFuY2UuY3JlYXRlRGlzdGFuY2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSW50ZXJzZWN0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pbnRlcnNlY3QuY3JlYXRlSW50ZXJzZWN0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN1bVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3VtLmNyZWF0ZVN1bTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNZWFuXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tZWFuLmNyZWF0ZU1lYW47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWVkaWFuXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tZWRpYW4uY3JlYXRlTWVkaWFuO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU1hZFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbWFkLmNyZWF0ZU1hZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVWYXJpYW5jZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdmFyaWFuY2UuY3JlYXRlVmFyaWFuY2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRGVwcmVjYXRlZFZhclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdmFyaWFuY2UuY3JlYXRlRGVwcmVjYXRlZFZhcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVRdWFudGlsZVNlcVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcXVhbnRpbGVTZXEuY3JlYXRlUXVhbnRpbGVTZXE7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3RkXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdGQuY3JlYXRlU3RkO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbWJpbmF0aW9uc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29tYmluYXRpb25zLmNyZWF0ZUNvbWJpbmF0aW9ucztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb21iaW5hdGlvbnNXaXRoUmVwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb21iaW5hdGlvbnNXaXRoUmVwLmNyZWF0ZUNvbWJpbmF0aW9uc1dpdGhSZXA7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlR2FtbWFcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2dhbW1hLmNyZWF0ZUdhbW1hO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZhY3RvcmlhbFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZmFjdG9yaWFsLmNyZWF0ZUZhY3RvcmlhbDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVLbGRpdmVyZ2VuY2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2tsZGl2ZXJnZW5jZS5jcmVhdGVLbGRpdmVyZ2VuY2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTXVsdGlub21pYWxcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX211bHRpbm9taWFsLmNyZWF0ZU11bHRpbm9taWFsO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBlcm11dGF0aW9uc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGVybXV0YXRpb25zLmNyZWF0ZVBlcm11dGF0aW9ucztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQaWNrUmFuZG9tXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waWNrUmFuZG9tLmNyZWF0ZVBpY2tSYW5kb207XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmFuZG9tXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yYW5kb20uY3JlYXRlUmFuZG9tO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJhbmRvbUludFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcmFuZG9tSW50LmNyZWF0ZVJhbmRvbUludDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTdGlybGluZ1MyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdGlybGluZ1MuY3JlYXRlU3RpcmxpbmdTMjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVCZWxsTnVtYmVyc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYmVsbE51bWJlcnMuY3JlYXRlQmVsbE51bWJlcnM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ2F0YWxhblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY2F0YWxhbi5jcmVhdGVDYXRhbGFuO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbXBvc2l0aW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb21wb3NpdGlvbi5jcmVhdGVDb21wb3NpdGlvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTaW1wbGlmeVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2ltcGxpZnkuY3JlYXRlU2ltcGxpZnk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRGVyaXZhdGl2ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVyaXZhdGl2ZS5jcmVhdGVEZXJpdmF0aXZlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJhdGlvbmFsaXplXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yYXRpb25hbGl6ZS5jcmVhdGVSYXRpb25hbGl6ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSZXZpdmVyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yZXZpdmVyLmNyZWF0ZVJldml2ZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmVwbGFjZXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3JlcGxhY2VyLmNyZWF0ZVJlcGxhY2VyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVFO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVVwcGVyY2FzZUVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVVcHBlcmNhc2VFO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZhbHNlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlRmFsc2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZUk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSW5maW5pdHlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVJbmZpbml0eTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMTjEwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlTE4xMDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMTjJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVMTjI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTE9HMTBFXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlTE9HMTBFO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUxPRzJFXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlTE9HMkU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTmFOXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlTmFOO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU51bGxcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVOdWxsO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBoaVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZVBoaTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQaVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZVBpO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVVwcGVyY2FzZVBpXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlVXBwZXJjYXNlUGk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU1FSVDFfMlwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZVNRUlQxXzI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU1FSVDJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVTUVJUMjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUYXVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVUYXU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVHJ1ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZVRydWU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVmVyc2lvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZVZlcnNpb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXRvbWljTWFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlQXRvbWljTWFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBdm9nYWRyb1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlQXZvZ2Fkcm87XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQm9ock1hZ25ldG9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVCb2hyTWFnbmV0b247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQm9oclJhZGl1c1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlQm9oclJhZGl1cztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVCb2x0em1hbm5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUJvbHR6bWFubjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDbGFzc2ljYWxFbGVjdHJvblJhZGl1c1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlQ2xhc3NpY2FsRWxlY3Ryb25SYWRpdXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ29uZHVjdGFuY2VRdWFudHVtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVDb25kdWN0YW5jZVF1YW50dW07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ291bG9tYlwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlQ291bG9tYjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEZXV0ZXJvbk1hc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZURldXRlcm9uTWFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFZmltb3ZGYWN0b3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUVmaW1vdkZhY3RvcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFbGVjdHJpY0NvbnN0YW50XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVFbGVjdHJpY0NvbnN0YW50O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUVsZWN0cm9uTWFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlRWxlY3Ryb25NYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUVsZW1lbnRhcnlDaGFyZ2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUVsZW1lbnRhcnlDaGFyZ2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmFyYWRheVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlRmFyYWRheTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGZXJtaUNvdXBsaW5nXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVGZXJtaUNvdXBsaW5nO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZpbmVTdHJ1Y3R1cmVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUZpbmVTdHJ1Y3R1cmU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmlyc3RSYWRpYXRpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUZpcnN0UmFkaWF0aW9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUdhc0NvbnN0YW50XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVHYXNDb25zdGFudDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVHcmF2aXRhdGlvbkNvbnN0YW50XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVHcmF2aXRhdGlvbkNvbnN0YW50O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUdyYXZpdHlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUdyYXZpdHk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSGFydHJlZUVuZXJneVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlSGFydHJlZUVuZXJneTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUtsaXR6aW5nXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVLbGl0emluZztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMb3NjaG1pZHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUxvc2NobWlkdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNYWduZXRpY0NvbnN0YW50XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVNYWduZXRpY0NvbnN0YW50O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU1hZ25ldGljRmx1eFF1YW50dW1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZU1hZ25ldGljRmx1eFF1YW50dW07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTW9sYXJNYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVNb2xhck1hc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTW9sYXJNYXNzQzEyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVNb2xhck1hc3NDMTI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNb2xhclZvbHVtZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlTW9sYXJWb2x1bWU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTmV1dHJvbk1hc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZU5ldXRyb25NYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU51Y2xlYXJNYWduZXRvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlTnVjbGVhck1hZ25ldG9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBsYW5ja0NoYXJnZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlUGxhbmNrQ2hhcmdlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBsYW5ja0NvbnN0YW50XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVQbGFuY2tDb25zdGFudDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQbGFuY2tMZW5ndGhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVBsYW5ja0xlbmd0aDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQbGFuY2tNYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVQbGFuY2tNYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBsYW5ja1RlbXBlcmF0dXJlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVQbGFuY2tUZW1wZXJhdHVyZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQbGFuY2tUaW1lXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVQbGFuY2tUaW1lO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVByb3Rvbk1hc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVByb3Rvbk1hc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUXVhbnR1bU9mQ2lyY3VsYXRpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVF1YW50dW1PZkNpcmN1bGF0aW9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJlZHVjZWRQbGFuY2tDb25zdGFudFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlUmVkdWNlZFBsYW5ja0NvbnN0YW50O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJ5ZGJlcmdcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVJ5ZGJlcmc7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2Fja3VyVGV0cm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlU2Fja3VyVGV0cm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZWNvbmRSYWRpYXRpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVNlY29uZFJhZGlhdGlvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTcGVlZE9mTGlnaHRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVNwZWVkT2ZMaWdodDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTdGVmYW5Cb2x0em1hbm5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVN0ZWZhbkJvbHR6bWFubjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUaG9tc29uQ3Jvc3NTZWN0aW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVUaG9tc29uQ3Jvc3NTZWN0aW9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVZhY3V1bUltcGVkYW5jZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlVmFjdXVtSW1wZWRhbmNlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVdlYWtNaXhpbmdBbmdsZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlV2Vha01peGluZ0FuZ2xlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVdpZW5EaXNwbGFjZW1lbnRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVdpZW5EaXNwbGFjZW1lbnQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXBwbHlUcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2FwcGx5Mi5jcmVhdGVBcHBseVRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb2x1bW5UcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbHVtbjIuY3JlYXRlQ29sdW1uVHJhbnNmb3JtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZpbHRlclRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZmlsdGVyMi5jcmVhdGVGaWx0ZXJUcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRm9yRWFjaFRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZm9yRWFjaDIuY3JlYXRlRm9yRWFjaFRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJbmRleFRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaW5kZXguY3JlYXRlSW5kZXhUcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWFwVHJhbnNmb3JtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tYXAyLmNyZWF0ZU1hcFRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNYXhUcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX21heDIuY3JlYXRlTWF4VHJhbnNmb3JtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU1lYW5UcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX21lYW4yLmNyZWF0ZU1lYW5UcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWluVHJhbnNmb3JtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9taW4yLmNyZWF0ZU1pblRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSYW5nZVRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcmFuZ2UyLmNyZWF0ZVJhbmdlVHJhbnNmb3JtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJvd1RyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcm93Mi5jcmVhdGVSb3dUcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3Vic2V0VHJhbnNmb3JtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdWJzZXQyLmNyZWF0ZVN1YnNldFRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb25jYXRUcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbmNhdDIuY3JlYXRlQ29uY2F0VHJhbnNmb3JtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN0ZFRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3RkMi5jcmVhdGVTdGRUcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3VtVHJhbnNmb3JtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdW0yLmNyZWF0ZVN1bVRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVWYXJpYW5jZVRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdmFyaWFuY2UyLmNyZWF0ZVZhcmlhbmNlVHJhbnNmb3JtO1xuICB9XG59KTtcblxudmFyIF90eXBlZCA9IHJlcXVpcmUoXCIuL2NvcmUvZnVuY3Rpb24vdHlwZWRcIik7XG5cbnZhciBfUmVzdWx0U2V0ID0gcmVxdWlyZShcIi4vdHlwZS9yZXN1bHRzZXQvUmVzdWx0U2V0XCIpO1xuXG52YXIgX0JpZ051bWJlciA9IHJlcXVpcmUoXCIuL3R5cGUvYmlnbnVtYmVyL0JpZ051bWJlclwiKTtcblxudmFyIF9Db21wbGV4ID0gcmVxdWlyZShcIi4vdHlwZS9jb21wbGV4L0NvbXBsZXhcIik7XG5cbnZhciBfRnJhY3Rpb24gPSByZXF1aXJlKFwiLi90eXBlL2ZyYWN0aW9uL0ZyYWN0aW9uXCIpO1xuXG52YXIgX1JhbmdlID0gcmVxdWlyZShcIi4vdHlwZS9tYXRyaXgvUmFuZ2VcIik7XG5cbnZhciBfTWF0cml4ID0gcmVxdWlyZShcIi4vdHlwZS9tYXRyaXgvTWF0cml4XCIpO1xuXG52YXIgX0RlbnNlTWF0cml4ID0gcmVxdWlyZShcIi4vdHlwZS9tYXRyaXgvRGVuc2VNYXRyaXhcIik7XG5cbnZhciBfY2xvbmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9jbG9uZVwiKTtcblxudmFyIF9pc0ludGVnZXIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc0ludGVnZXJcIik7XG5cbnZhciBfaXNOZWdhdGl2ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2lzTmVnYXRpdmVcIik7XG5cbnZhciBfaXNOdW1lcmljID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNOdW1lcmljXCIpO1xuXG52YXIgX2hhc051bWVyaWNWYWx1ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2hhc051bWVyaWNWYWx1ZVwiKTtcblxudmFyIF9pc1Bvc2l0aXZlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNQb3NpdGl2ZVwiKTtcblxudmFyIF9pc1plcm8gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc1plcm9cIik7XG5cbnZhciBfaXNOYU4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc05hTlwiKTtcblxudmFyIF90eXBlT2YgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy90eXBlT2ZcIik7XG5cbnZhciBfZXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsU2NhbGFyXCIpO1xuXG52YXIgX1NwYXJzZU1hdHJpeCA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L1NwYXJzZU1hdHJpeFwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi90eXBlL251bWJlclwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi90eXBlL3N0cmluZ1wiKTtcblxudmFyIF9ib29sZWFuID0gcmVxdWlyZShcIi4vdHlwZS9ib29sZWFuXCIpO1xuXG52YXIgX2JpZ251bWJlciA9IHJlcXVpcmUoXCIuL3R5cGUvYmlnbnVtYmVyL2Z1bmN0aW9uL2JpZ251bWJlclwiKTtcblxudmFyIF9jb21wbGV4ID0gcmVxdWlyZShcIi4vdHlwZS9jb21wbGV4L2Z1bmN0aW9uL2NvbXBsZXhcIik7XG5cbnZhciBfZnJhY3Rpb24gPSByZXF1aXJlKFwiLi90eXBlL2ZyYWN0aW9uL2Z1bmN0aW9uL2ZyYWN0aW9uXCIpO1xuXG52YXIgX21hdHJpeCA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L2Z1bmN0aW9uL21hdHJpeFwiKTtcblxudmFyIF9zcGxpdFVuaXQgPSByZXF1aXJlKFwiLi90eXBlL3VuaXQvZnVuY3Rpb24vc3BsaXRVbml0XCIpO1xuXG52YXIgX3VuYXJ5TWludXMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3VuYXJ5TWludXNcIik7XG5cbnZhciBfdW5hcnlQbHVzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy91bmFyeVBsdXNcIik7XG5cbnZhciBfYWJzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9hYnNcIik7XG5cbnZhciBfYXBwbHkgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvYXBwbHlcIik7XG5cbnZhciBfYWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9hZGRTY2FsYXJcIik7XG5cbnZhciBfY2JydCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvY2JydFwiKTtcblxudmFyIF9jZWlsID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9jZWlsXCIpO1xuXG52YXIgX2N1YmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2N1YmVcIik7XG5cbnZhciBfZXhwID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9leHBcIik7XG5cbnZhciBfZXhwbSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZXhwbTFcIik7XG5cbnZhciBfZml4ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9maXhcIik7XG5cbnZhciBfZmxvb3IgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2Zsb29yXCIpO1xuXG52YXIgX2djZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZ2NkXCIpO1xuXG52YXIgX2xjbSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbGNtXCIpO1xuXG52YXIgX2xvZyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMTBcIik7XG5cbnZhciBfbG9nMiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMlwiKTtcblxudmFyIF9tb2QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL21vZFwiKTtcblxudmFyIF9tdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbXVsdGlwbHlTY2FsYXJcIik7XG5cbnZhciBfbXVsdGlwbHkgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL211bHRpcGx5XCIpO1xuXG52YXIgX250aFJvb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3RcIik7XG5cbnZhciBfc2lnbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvc2lnblwiKTtcblxudmFyIF9zcXJ0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9zcXJ0XCIpO1xuXG52YXIgX3NxdWFyZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvc3F1YXJlXCIpO1xuXG52YXIgX3N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9zdWJ0cmFjdFwiKTtcblxudmFyIF94Z2NkID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy94Z2NkXCIpO1xuXG52YXIgX2RvdE11bHRpcGx5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9kb3RNdWx0aXBseVwiKTtcblxudmFyIF9iaXRBbmQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9iaXR3aXNlL2JpdEFuZFwiKTtcblxudmFyIF9iaXROb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9iaXR3aXNlL2JpdE5vdFwiKTtcblxudmFyIF9iaXRPciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvYml0T3JcIik7XG5cbnZhciBfYml0WG9yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9iaXRYb3JcIik7XG5cbnZhciBfYXJnID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tcGxleC9hcmdcIik7XG5cbnZhciBfY29uaiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2NvbXBsZXgvY29ualwiKTtcblxudmFyIF9pbSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2NvbXBsZXgvaW1cIik7XG5cbnZhciBfcmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21wbGV4L3JlXCIpO1xuXG52YXIgX25vdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2xvZ2ljYWwvbm90XCIpO1xuXG52YXIgX29yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbG9naWNhbC9vclwiKTtcblxudmFyIF94b3IgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9sb2dpY2FsL3hvclwiKTtcblxudmFyIF9jb25jYXQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvY29uY2F0XCIpO1xuXG52YXIgX2NvbHVtbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9jb2x1bW5cIik7XG5cbnZhciBfY3Jvc3MgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvY3Jvc3NcIik7XG5cbnZhciBfZGlhZyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9kaWFnXCIpO1xuXG52YXIgX2V5ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9leWVcIik7XG5cbnZhciBfZmlsdGVyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2ZpbHRlclwiKTtcblxudmFyIF9mbGF0dGVuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2ZsYXR0ZW5cIik7XG5cbnZhciBfZm9yRWFjaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9mb3JFYWNoXCIpO1xuXG52YXIgX2dldE1hdHJpeERhdGFUeXBlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2dldE1hdHJpeERhdGFUeXBlXCIpO1xuXG52YXIgX2lkZW50aXR5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2lkZW50aXR5XCIpO1xuXG52YXIgX2tyb24gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgva3JvblwiKTtcblxudmFyIF9tYXAgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvbWFwXCIpO1xuXG52YXIgX29uZXMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvb25lc1wiKTtcblxudmFyIF9yYW5nZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9yYW5nZVwiKTtcblxudmFyIF9yZXNoYXBlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3Jlc2hhcGVcIik7XG5cbnZhciBfcmVzaXplID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3Jlc2l6ZVwiKTtcblxudmFyIF9yb3cgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvcm93XCIpO1xuXG52YXIgX3NpemUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvc2l6ZVwiKTtcblxudmFyIF9zcXVlZXplID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3NxdWVlemVcIik7XG5cbnZhciBfc3Vic2V0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3N1YnNldFwiKTtcblxudmFyIF90cmFuc3Bvc2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvdHJhbnNwb3NlXCIpO1xuXG52YXIgX2N0cmFuc3Bvc2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvY3RyYW5zcG9zZVwiKTtcblxudmFyIF96ZXJvcyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC96ZXJvc1wiKTtcblxudmFyIF9lcmYgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zcGVjaWFsL2VyZlwiKTtcblxudmFyIF9tb2RlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9tb2RlXCIpO1xuXG52YXIgX3Byb2QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3Byb2RcIik7XG5cbnZhciBfZm9ybWF0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RyaW5nL2Zvcm1hdFwiKTtcblxudmFyIF9wcmludCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0cmluZy9wcmludFwiKTtcblxudmFyIF90byA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3VuaXQvdG9cIik7XG5cbnZhciBfaXNQcmltZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2lzUHJpbWVcIik7XG5cbnZhciBfbnVtZXJpYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL251bWVyaWNcIik7XG5cbnZhciBfZGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9kaXZpZGVTY2FsYXJcIik7XG5cbnZhciBfcG93ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9wb3dcIik7XG5cbnZhciBfcm91bmQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3JvdW5kXCIpO1xuXG52YXIgX2xvZzMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2xvZ1wiKTtcblxudmFyIF9sb2cxcCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMXBcIik7XG5cbnZhciBfbnRoUm9vdHMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3RzXCIpO1xuXG52YXIgX2RvdFBvdyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90UG93XCIpO1xuXG52YXIgX2RvdERpdmlkZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90RGl2aWRlXCIpO1xuXG52YXIgX2xzb2x2ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvc29sdmVyL2xzb2x2ZVwiKTtcblxudmFyIF91c29sdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL3NvbHZlci91c29sdmVcIik7XG5cbnZhciBfbGVmdFNoaWZ0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9sZWZ0U2hpZnRcIik7XG5cbnZhciBfcmlnaHRBcml0aFNoaWZ0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9yaWdodEFyaXRoU2hpZnRcIik7XG5cbnZhciBfcmlnaHRMb2dTaGlmdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvcmlnaHRMb2dTaGlmdFwiKTtcblxudmFyIF9hbmQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9sb2dpY2FsL2FuZFwiKTtcblxudmFyIF9jb21wYXJlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9jb21wYXJlXCIpO1xuXG52YXIgX2NvbXBhcmVOYXR1cmFsID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9jb21wYXJlTmF0dXJhbFwiKTtcblxudmFyIF9jb21wYXJlVGV4dCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZVRleHRcIik7XG5cbnZhciBfZXF1YWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsXCIpO1xuXG52YXIgX2VxdWFsVGV4dCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZXF1YWxUZXh0XCIpO1xuXG52YXIgX3NtYWxsZXIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL3NtYWxsZXJcIik7XG5cbnZhciBfc21hbGxlckVxID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9zbWFsbGVyRXFcIik7XG5cbnZhciBfbGFyZ2VyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9sYXJnZXJcIik7XG5cbnZhciBfbGFyZ2VyRXEgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL2xhcmdlckVxXCIpO1xuXG52YXIgX2RlZXBFcXVhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZGVlcEVxdWFsXCIpO1xuXG52YXIgX3VuZXF1YWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL3VuZXF1YWxcIik7XG5cbnZhciBfcGFydGl0aW9uU2VsZWN0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3BhcnRpdGlvblNlbGVjdFwiKTtcblxudmFyIF9zb3J0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3NvcnRcIik7XG5cbnZhciBfbWF4ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9tYXhcIik7XG5cbnZhciBfbWluID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9taW5cIik7XG5cbnZhciBfSW1tdXRhYmxlRGVuc2VNYXRyaXggPSByZXF1aXJlKFwiLi90eXBlL21hdHJpeC9JbW11dGFibGVEZW5zZU1hdHJpeFwiKTtcblxudmFyIF9NYXRyaXhJbmRleCA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L01hdHJpeEluZGV4XCIpO1xuXG52YXIgX0ZpYm9uYWNjaUhlYXAgPSByZXF1aXJlKFwiLi90eXBlL21hdHJpeC9GaWJvbmFjY2lIZWFwXCIpO1xuXG52YXIgX1NwYSA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L1NwYVwiKTtcblxudmFyIF9Vbml0ID0gcmVxdWlyZShcIi4vdHlwZS91bml0L1VuaXRcIik7XG5cbnZhciBfdW5pdCA9IHJlcXVpcmUoXCIuL3R5cGUvdW5pdC9mdW5jdGlvbi91bml0XCIpO1xuXG52YXIgX3NwYXJzZSA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L2Z1bmN0aW9uL3NwYXJzZVwiKTtcblxudmFyIF9jcmVhdGVVbml0ID0gcmVxdWlyZShcIi4vdHlwZS91bml0L2Z1bmN0aW9uL2NyZWF0ZVVuaXRcIik7XG5cbnZhciBfYWNvcyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY29zXCIpO1xuXG52YXIgX2Fjb3NoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3NoXCIpO1xuXG52YXIgX2Fjb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvdFwiKTtcblxudmFyIF9hY290aCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY290aFwiKTtcblxudmFyIF9hY3NjID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjc2NcIik7XG5cbnZhciBfYWNzY2ggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNzY2hcIik7XG5cbnZhciBfYXNlYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2VjXCIpO1xuXG52YXIgX2FzZWNoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzZWNoXCIpO1xuXG52YXIgX2FzaW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXNpblwiKTtcblxudmFyIF9hc2luaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2luaFwiKTtcblxudmFyIF9hdGFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2F0YW5cIik7XG5cbnZhciBfYXRhbjIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbjJcIik7XG5cbnZhciBfYXRhbmggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbmhcIik7XG5cbnZhciBfY29zID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Nvc1wiKTtcblxudmFyIF9jb3NoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Nvc2hcIik7XG5cbnZhciBfY290ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NvdFwiKTtcblxudmFyIF9jb3RoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NvdGhcIik7XG5cbnZhciBfY3NjID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NzY1wiKTtcblxudmFyIF9jc2NoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NzY2hcIik7XG5cbnZhciBfc2VjID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NlY1wiKTtcblxudmFyIF9zZWNoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NlY2hcIik7XG5cbnZhciBfc2luID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpblwiKTtcblxudmFyIF9zaW5oID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpbmhcIik7XG5cbnZhciBfdGFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhblwiKTtcblxudmFyIF90YW5oID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhbmhcIik7XG5cbnZhciBfc2V0Q2FydGVzaWFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldENhcnRlc2lhblwiKTtcblxudmFyIF9zZXREaWZmZXJlbmNlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldERpZmZlcmVuY2VcIik7XG5cbnZhciBfc2V0RGlzdGluY3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0RGlzdGluY3RcIik7XG5cbnZhciBfc2V0SW50ZXJzZWN0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldEludGVyc2VjdFwiKTtcblxudmFyIF9zZXRJc1N1YnNldCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3NldC9zZXRJc1N1YnNldFwiKTtcblxudmFyIF9zZXRNdWx0aXBsaWNpdHkgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0TXVsdGlwbGljaXR5XCIpO1xuXG52YXIgX3NldFBvd2Vyc2V0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldFBvd2Vyc2V0XCIpO1xuXG52YXIgX3NldFNpemUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0U2l6ZVwiKTtcblxudmFyIF9zZXRTeW1EaWZmZXJlbmNlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldFN5bURpZmZlcmVuY2VcIik7XG5cbnZhciBfc2V0VW5pb24gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0VW5pb25cIik7XG5cbnZhciBfYWRkID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9hZGRcIik7XG5cbnZhciBfaHlwb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2h5cG90XCIpO1xuXG52YXIgX25vcm0gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL25vcm1cIik7XG5cbnZhciBfZG90ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2RvdFwiKTtcblxudmFyIF90cmFjZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC90cmFjZVwiKTtcblxudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L2Z1bmN0aW9uXCIpO1xuXG52YXIgX05vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvTm9kZVwiKTtcblxudmFyIF9BY2Nlc3Nvck5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvQWNjZXNzb3JOb2RlXCIpO1xuXG52YXIgX0FycmF5Tm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9BcnJheU5vZGVcIik7XG5cbnZhciBfQXNzaWdubWVudE5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvQXNzaWdubWVudE5vZGVcIik7XG5cbnZhciBfQmxvY2tOb2RlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9ub2RlL0Jsb2NrTm9kZVwiKTtcblxudmFyIF9Db25kaXRpb25hbE5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvQ29uZGl0aW9uYWxOb2RlXCIpO1xuXG52YXIgX0NvbnN0YW50Tm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9Db25zdGFudE5vZGVcIik7XG5cbnZhciBfRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9GdW5jdGlvbkFzc2lnbm1lbnROb2RlXCIpO1xuXG52YXIgX0luZGV4Tm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9JbmRleE5vZGVcIik7XG5cbnZhciBfT2JqZWN0Tm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9PYmplY3ROb2RlXCIpO1xuXG52YXIgX09wZXJhdG9yTm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9PcGVyYXRvck5vZGVcIik7XG5cbnZhciBfUGFyZW50aGVzaXNOb2RlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9ub2RlL1BhcmVudGhlc2lzTm9kZVwiKTtcblxudmFyIF9SYW5nZU5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvUmFuZ2VOb2RlXCIpO1xuXG52YXIgX1JlbGF0aW9uYWxOb2RlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9ub2RlL1JlbGF0aW9uYWxOb2RlXCIpO1xuXG52YXIgX1N5bWJvbE5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvU3ltYm9sTm9kZVwiKTtcblxudmFyIF9GdW5jdGlvbk5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvRnVuY3Rpb25Ob2RlXCIpO1xuXG52YXIgX3BhcnNlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9wYXJzZVwiKTtcblxudmFyIF9jb21waWxlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9mdW5jdGlvbi9jb21waWxlXCIpO1xuXG52YXIgX2V2YWx1YXRlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9mdW5jdGlvbi9ldmFsdWF0ZVwiKTtcblxudmFyIF9ldmFsID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9mdW5jdGlvbi9ldmFsXCIpO1xuXG52YXIgX1BhcnNlciA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vUGFyc2VyXCIpO1xuXG52YXIgX3BhcnNlciA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vZnVuY3Rpb24vcGFyc2VyXCIpO1xuXG52YXIgX2x1cCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvZGVjb21wb3NpdGlvbi9sdXBcIik7XG5cbnZhciBfcXIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL2RlY29tcG9zaXRpb24vcXJcIik7XG5cbnZhciBfc2x1ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9kZWNvbXBvc2l0aW9uL3NsdVwiKTtcblxudmFyIF9sdXNvbHZlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9zb2x2ZXIvbHVzb2x2ZVwiKTtcblxudmFyIF9IZWxwID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9IZWxwXCIpO1xuXG52YXIgX0NoYWluID0gcmVxdWlyZShcIi4vdHlwZS9jaGFpbi9DaGFpblwiKTtcblxudmFyIF9oZWxwID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9mdW5jdGlvbi9oZWxwXCIpO1xuXG52YXIgX2NoYWluID0gcmVxdWlyZShcIi4vdHlwZS9jaGFpbi9mdW5jdGlvbi9jaGFpblwiKTtcblxudmFyIF9kZXQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvZGV0XCIpO1xuXG52YXIgX2ludiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9pbnZcIik7XG5cbnZhciBfZWlncyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9laWdzXCIpO1xuXG52YXIgX2V4cG0yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2V4cG1cIik7XG5cbnZhciBfc3FydG0gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvc3FydG1cIik7XG5cbnZhciBfZGl2aWRlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9kaXZpZGVcIik7XG5cbnZhciBfZGlzdGFuY2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9nZW9tZXRyeS9kaXN0YW5jZVwiKTtcblxudmFyIF9pbnRlcnNlY3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9nZW9tZXRyeS9pbnRlcnNlY3RcIik7XG5cbnZhciBfc3VtID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9zdW1cIik7XG5cbnZhciBfbWVhbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWVhblwiKTtcblxudmFyIF9tZWRpYW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21lZGlhblwiKTtcblxudmFyIF9tYWQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21hZFwiKTtcblxudmFyIF92YXJpYW5jZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvdmFyaWFuY2VcIik7XG5cbnZhciBfcXVhbnRpbGVTZXEgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3F1YW50aWxlU2VxXCIpO1xuXG52YXIgX3N0ZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3Mvc3RkXCIpO1xuXG52YXIgX2NvbWJpbmF0aW9ucyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9uc1wiKTtcblxudmFyIF9jb21iaW5hdGlvbnNXaXRoUmVwID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcHJvYmFiaWxpdHkvY29tYmluYXRpb25zV2l0aFJlcFwiKTtcblxudmFyIF9nYW1tYSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2dhbW1hXCIpO1xuXG52YXIgX2ZhY3RvcmlhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2ZhY3RvcmlhbFwiKTtcblxudmFyIF9rbGRpdmVyZ2VuY2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9rbGRpdmVyZ2VuY2VcIik7XG5cbnZhciBfbXVsdGlub21pYWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9tdWx0aW5vbWlhbFwiKTtcblxudmFyIF9wZXJtdXRhdGlvbnMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9wZXJtdXRhdGlvbnNcIik7XG5cbnZhciBfcGlja1JhbmRvbSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3BpY2tSYW5kb21cIik7XG5cbnZhciBfcmFuZG9tID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcHJvYmFiaWxpdHkvcmFuZG9tXCIpO1xuXG52YXIgX3JhbmRvbUludCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbUludFwiKTtcblxudmFyIF9zdGlybGluZ1MgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL3N0aXJsaW5nUzJcIik7XG5cbnZhciBfYmVsbE51bWJlcnMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL2JlbGxOdW1iZXJzXCIpO1xuXG52YXIgX2NhdGFsYW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL2NhdGFsYW5cIik7XG5cbnZhciBfY29tcG9zaXRpb24gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL2NvbXBvc2l0aW9uXCIpO1xuXG52YXIgX3NpbXBsaWZ5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9zaW1wbGlmeVwiKTtcblxudmFyIF9kZXJpdmF0aXZlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9kZXJpdmF0aXZlXCIpO1xuXG52YXIgX3JhdGlvbmFsaXplID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9yYXRpb25hbGl6ZVwiKTtcblxudmFyIF9yZXZpdmVyID0gcmVxdWlyZShcIi4vanNvbi9yZXZpdmVyXCIpO1xuXG52YXIgX3JlcGxhY2VyID0gcmVxdWlyZShcIi4vanNvbi9yZXBsYWNlclwiKTtcblxudmFyIF9jb25zdGFudHMgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5cbnZhciBfcGh5c2ljYWxDb25zdGFudHMgPSByZXF1aXJlKFwiLi90eXBlL3VuaXQvcGh5c2ljYWxDb25zdGFudHNcIik7XG5cbnZhciBfYXBwbHkyID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi90cmFuc2Zvcm0vYXBwbHkudHJhbnNmb3JtXCIpO1xuXG52YXIgX2NvbHVtbjIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9jb2x1bW4udHJhbnNmb3JtXCIpO1xuXG52YXIgX2ZpbHRlcjIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9maWx0ZXIudHJhbnNmb3JtXCIpO1xuXG52YXIgX2ZvckVhY2gyID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi90cmFuc2Zvcm0vZm9yRWFjaC50cmFuc2Zvcm1cIik7XG5cbnZhciBfaW5kZXggPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9pbmRleC50cmFuc2Zvcm1cIik7XG5cbnZhciBfbWFwMiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL21hcC50cmFuc2Zvcm1cIik7XG5cbnZhciBfbWF4MiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL21heC50cmFuc2Zvcm1cIik7XG5cbnZhciBfbWVhbjIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9tZWFuLnRyYW5zZm9ybVwiKTtcblxudmFyIF9taW4yID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi90cmFuc2Zvcm0vbWluLnRyYW5zZm9ybVwiKTtcblxudmFyIF9yYW5nZTIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9yYW5nZS50cmFuc2Zvcm1cIik7XG5cbnZhciBfcm93MiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL3Jvdy50cmFuc2Zvcm1cIik7XG5cbnZhciBfc3Vic2V0MiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL3N1YnNldC50cmFuc2Zvcm1cIik7XG5cbnZhciBfY29uY2F0MiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL2NvbmNhdC50cmFuc2Zvcm1cIik7XG5cbnZhciBfc3RkMiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL3N0ZC50cmFuc2Zvcm1cIik7XG5cbnZhciBfc3VtMiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL3N1bS50cmFuc2Zvcm1cIik7XG5cbnZhciBfdmFyaWFuY2UyID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi90cmFuc2Zvcm0vdmFyaWFuY2UudHJhbnNmb3JtXCIpOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVMdXAgPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2x1cCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnYWJzJywgJ2FkZFNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAnc3VidHJhY3QnLCAnbGFyZ2VyJywgJ2VxdWFsU2NhbGFyJywgJ3VuYXJ5TWludXMnLCAnRGVuc2VNYXRyaXgnLCAnU3BhcnNlTWF0cml4JywgJ1NwYSddO1xudmFyIGNyZWF0ZUx1cCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGFicyA9IF9yZWYuYWJzLFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcixcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgdW5hcnlNaW51cyA9IF9yZWYudW5hcnlNaW51cyxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeCxcbiAgICAgIFNwYXJzZU1hdHJpeCA9IF9yZWYuU3BhcnNlTWF0cml4LFxuICAgICAgU3BhID0gX3JlZi5TcGE7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgTWF0cml4IExVIGRlY29tcG9zaXRpb24gd2l0aCBwYXJ0aWFsIHBpdm90aW5nLiBNYXRyaXggYEFgIGlzIGRlY29tcG9zZWQgaW4gdHdvIG1hdHJpY2VzIChgTGAsIGBVYCkgYW5kIGFcbiAgICogcm93IHBlcm11dGF0aW9uIHZlY3RvciBgcGAgd2hlcmUgYEFbcCw6XSA9IEwgKiBVYFxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubHVwKEEpXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqXG4gICAqICAgIGNvbnN0IG0gPSBbWzIsIDFdLCBbMSwgNF1dXG4gICAqICAgIGNvbnN0IHIgPSBtYXRoLmx1cChtKVxuICAgKiAgICAvLyByID0ge1xuICAgKiAgICAvLyAgIEw6IFtbMSwgMF0sIFswLjUsIDFdXSxcbiAgICogICAgLy8gICBVOiBbWzIsIDFdLCBbMCwgMy41XV0sXG4gICAqICAgIC8vICAgUDogWzAsIDFdXG4gICAqICAgIC8vIH1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNsdSwgbHNvbHZlLCBsdXNvbHZlLCB1c29sdmVcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0gQSAgICBBIHR3byBkaW1lbnNpb25hbCBtYXRyaXggb3IgYXJyYXkgZm9yIHdoaWNoIHRvIGdldCB0aGUgTFVQIGRlY29tcG9zaXRpb24uXG4gICAqXG4gICAqIEByZXR1cm4ge3tMOiBBcnJheSB8IE1hdHJpeCwgVTogQXJyYXkgfCBNYXRyaXgsIFA6IEFycmF5LjxudW1iZXI+fX0gVGhlIGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4LCB0aGUgdXBwZXIgdHJpYW5ndWxhciBtYXRyaXggYW5kIHRoZSBwZXJtdXRhdGlvbiBtYXRyaXguXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIERlbnNlTWF0cml4OiBmdW5jdGlvbiBEZW5zZU1hdHJpeChtKSB7XG4gICAgICByZXR1cm4gX2RlbnNlTFVQKG0pO1xuICAgIH0sXG4gICAgU3BhcnNlTWF0cml4OiBmdW5jdGlvbiBTcGFyc2VNYXRyaXgobSkge1xuICAgICAgcmV0dXJuIF9zcGFyc2VMVVAobSk7XG4gICAgfSxcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoYSkge1xuICAgICAgLy8gY3JlYXRlIGRlbnNlIG1hdHJpeCBmcm9tIGFycmF5XG4gICAgICB2YXIgbSA9IG1hdHJpeChhKTsgLy8gbHVwLCB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG5cbiAgICAgIHZhciByID0gX2RlbnNlTFVQKG0pOyAvLyByZXN1bHRcblxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBMOiByLkwudmFsdWVPZigpLFxuICAgICAgICBVOiByLlUudmFsdWVPZigpLFxuICAgICAgICBwOiByLnBcbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfZGVuc2VMVVAobSkge1xuICAgIC8vIHJvd3MgJiBjb2x1bW5zXG4gICAgdmFyIHJvd3MgPSBtLl9zaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gbS5fc2l6ZVsxXTsgLy8gbWluaW11bSByb3dzIGFuZCBjb2x1bW5zXG5cbiAgICB2YXIgbiA9IE1hdGgubWluKHJvd3MsIGNvbHVtbnMpOyAvLyBtYXRyaXggYXJyYXksIGNsb25lIG9yaWdpbmFsIGRhdGFcblxuICAgIHZhciBkYXRhID0gKDAsIF9vYmplY3QuY2xvbmUpKG0uX2RhdGEpOyAvLyBsIG1hdHJpeCBhcnJheXNcblxuICAgIHZhciBsZGF0YSA9IFtdO1xuICAgIHZhciBsc2l6ZSA9IFtyb3dzLCBuXTsgLy8gdSBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgdWRhdGEgPSBbXTtcbiAgICB2YXIgdXNpemUgPSBbbiwgY29sdW1uc107IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrOyAvLyBwZXJtdXRhdGlvbiB2ZWN0b3JcblxuICAgIHZhciBwID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBwW2ldID0gaTtcbiAgICB9IC8vIGxvb3AgY29sdW1uc1xuXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBza2lwIGZpcnN0IGNvbHVtbiBpbiB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeFxuICAgICAgaWYgKGogPiAwKSB7XG4gICAgICAgIC8vIGxvb3Agcm93c1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgLy8gbWluIGksalxuICAgICAgICAgIHZhciBtaW4gPSBNYXRoLm1pbihpLCBqKTsgLy8gdltpLCBqXVxuXG4gICAgICAgICAgdmFyIHMgPSAwOyAvLyBsb29wIHVwIHRvIG1pblxuXG4gICAgICAgICAgZm9yIChrID0gMDsgayA8IG1pbjsgaysrKSB7XG4gICAgICAgICAgICAvLyBzID0gbFtpLCBrXSAtIGRhdGFbaywgal1cbiAgICAgICAgICAgIHMgPSBhZGRTY2FsYXIocywgbXVsdGlwbHlTY2FsYXIoZGF0YVtpXVtrXSwgZGF0YVtrXVtqXSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRhdGFbaV1bal0gPSBzdWJ0cmFjdChkYXRhW2ldW2pdLCBzKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyByb3cgd2l0aCBsYXJnZXIgdmFsdWUgaW4gY3ZlY3Rvciwgcm93ID49IGpcblxuXG4gICAgICB2YXIgcGkgPSBqO1xuICAgICAgdmFyIHBhYnN2ID0gMDtcbiAgICAgIHZhciB2amogPSAwOyAvLyBsb29wIHJvd3NcblxuICAgICAgZm9yIChpID0gajsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAvLyBkYXRhIEAgaSwgalxuICAgICAgICB2YXIgdiA9IGRhdGFbaV1bal07IC8vIGFic29sdXRlIHZhbHVlXG5cbiAgICAgICAgdmFyIGFic3YgPSBhYnModik7IC8vIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBwaXZvdGUgdmFsdWVcblxuICAgICAgICBpZiAobGFyZ2VyKGFic3YsIHBhYnN2KSkge1xuICAgICAgICAgIC8vIHN0b3JlIHJvd1xuICAgICAgICAgIHBpID0gaTsgLy8gdXBkYXRlIG1heCB2YWx1ZVxuXG4gICAgICAgICAgcGFic3YgPSBhYnN2OyAvLyB2YWx1ZSBAIFtqLCBqXVxuXG4gICAgICAgICAgdmpqID0gdjtcbiAgICAgICAgfVxuICAgICAgfSAvLyBzd2FwIHJvd3MgKGogPC0+IHBpKVxuXG5cbiAgICAgIGlmIChqICE9PSBwaSkge1xuICAgICAgICAvLyBzd2FwIHZhbHVlcyBqIDwtPiBwaSBpbiBwXG4gICAgICAgIHBbal0gPSBbcFtwaV0sIHBbcGldID0gcFtqXV1bMF07IC8vIHN3YXAgaiA8LT4gcGkgaW4gZGF0YVxuXG4gICAgICAgIERlbnNlTWF0cml4Ll9zd2FwUm93cyhqLCBwaSwgZGF0YSk7XG4gICAgICB9IC8vIGNoZWNrIGNvbHVtbiBpcyBpbiBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeFxuXG5cbiAgICAgIGlmIChqIDwgcm93cykge1xuICAgICAgICAvLyBsb29wIHJvd3MgKGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4KVxuICAgICAgICBmb3IgKGkgPSBqICsgMTsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgIC8vIHZhbHVlIEAgaSwgalxuICAgICAgICAgIHZhciB2aWogPSBkYXRhW2ldW2pdO1xuXG4gICAgICAgICAgaWYgKCFlcXVhbFNjYWxhcih2aWosIDApKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgZGF0YVxuICAgICAgICAgICAgZGF0YVtpXVtqXSA9IGRpdmlkZVNjYWxhcihkYXRhW2ldW2pdLCB2amopO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gbG9vcCBjb2x1bW5zXG5cblxuICAgIGZvciAoaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIGxvb3Agcm93c1xuICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAvLyBpbml0aWFsaXplIHJvdyBpbiBhcnJheXNcbiAgICAgICAgaWYgKGogPT09IDApIHtcbiAgICAgICAgICAvLyBjaGVjayByb3cgZXhpc3RzIGluIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XG4gICAgICAgICAgaWYgKGkgPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAvLyBVXG4gICAgICAgICAgICB1ZGF0YVtpXSA9IFtdO1xuICAgICAgICAgIH0gLy8gTFxuXG5cbiAgICAgICAgICBsZGF0YVtpXSA9IFtdO1xuICAgICAgICB9IC8vIGNoZWNrIHdlIGFyZSBpbiB0aGUgdXBwZXIgdHJpYW5ndWxhciBtYXRyaXhcblxuXG4gICAgICAgIGlmIChpIDwgaikge1xuICAgICAgICAgIC8vIGNoZWNrIHJvdyBleGlzdHMgaW4gdXBwZXIgdHJpYW5ndWxhciBtYXRyaXhcbiAgICAgICAgICBpZiAoaSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgIC8vIFVcbiAgICAgICAgICAgIHVkYXRhW2ldW2pdID0gZGF0YVtpXVtqXTtcbiAgICAgICAgICB9IC8vIGNoZWNrIGNvbHVtbiBleGlzdHMgaW4gbG93ZXIgdHJpYW5ndWxhciBtYXRyaXhcblxuXG4gICAgICAgICAgaWYgKGogPCByb3dzKSB7XG4gICAgICAgICAgICAvLyBMXG4gICAgICAgICAgICBsZGF0YVtpXVtqXSA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gLy8gZGlhZ29uYWwgdmFsdWVcblxuXG4gICAgICAgIGlmIChpID09PSBqKSB7XG4gICAgICAgICAgLy8gY2hlY2sgcm93IGV4aXN0cyBpbiB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeFxuICAgICAgICAgIGlmIChpIDwgY29sdW1ucykge1xuICAgICAgICAgICAgLy8gVVxuICAgICAgICAgICAgdWRhdGFbaV1bal0gPSBkYXRhW2ldW2pdO1xuICAgICAgICAgIH0gLy8gY2hlY2sgY29sdW1uIGV4aXN0cyBpbiBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeFxuXG5cbiAgICAgICAgICBpZiAoaiA8IHJvd3MpIHtcbiAgICAgICAgICAgIC8vIExcbiAgICAgICAgICAgIGxkYXRhW2ldW2pdID0gMTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSAvLyBjaGVjayByb3cgZXhpc3RzIGluIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XG5cblxuICAgICAgICBpZiAoaSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAvLyBVXG4gICAgICAgICAgdWRhdGFbaV1bal0gPSAwO1xuICAgICAgICB9IC8vIGNoZWNrIGNvbHVtbiBleGlzdHMgaW4gbG93ZXIgdHJpYW5ndWxhciBtYXRyaXhcblxuXG4gICAgICAgIGlmIChqIDwgcm93cykge1xuICAgICAgICAgIC8vIExcbiAgICAgICAgICBsZGF0YVtpXVtqXSA9IGRhdGFbaV1bal07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIGwgbWF0cml4XG5cblxuICAgIHZhciBsID0gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGxkYXRhLFxuICAgICAgc2l6ZTogbHNpemVcbiAgICB9KTsgLy8gdSBtYXRyaXhcblxuICAgIHZhciB1ID0gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IHVkYXRhLFxuICAgICAgc2l6ZTogdXNpemVcbiAgICB9KTsgLy8gcCB2ZWN0b3JcblxuICAgIHZhciBwdiA9IFtdO1xuXG4gICAgZm9yIChpID0gMCwgbiA9IHAubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICBwdltwW2ldXSA9IGk7XG4gICAgfSAvLyByZXR1cm4gbWF0cmljZXNcblxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEw6IGwsXG4gICAgICBVOiB1LFxuICAgICAgcDogcHYsXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiAnTDogJyArIHRoaXMuTC50b1N0cmluZygpICsgJ1xcblU6ICcgKyB0aGlzLlUudG9TdHJpbmcoKSArICdcXG5QOiAnICsgdGhpcy5wO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBfc3BhcnNlTFVQKG0pIHtcbiAgICAvLyByb3dzICYgY29sdW1uc1xuICAgIHZhciByb3dzID0gbS5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IG0uX3NpemVbMV07IC8vIG1pbmltdW0gcm93cyBhbmQgY29sdW1uc1xuXG4gICAgdmFyIG4gPSBNYXRoLm1pbihyb3dzLCBjb2x1bW5zKTsgLy8gbWF0cml4IGFycmF5cyAod2lsbCBub3QgYmUgbW9kaWZpZWQsIHRoYW5rcyB0byBwZXJtdXRhdGlvbiB2ZWN0b3IpXG5cbiAgICB2YXIgdmFsdWVzID0gbS5fdmFsdWVzO1xuICAgIHZhciBpbmRleCA9IG0uX2luZGV4O1xuICAgIHZhciBwdHIgPSBtLl9wdHI7IC8vIGwgbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIGx2YWx1ZXMgPSBbXTtcbiAgICB2YXIgbGluZGV4ID0gW107XG4gICAgdmFyIGxwdHIgPSBbXTtcbiAgICB2YXIgbHNpemUgPSBbcm93cywgbl07IC8vIHUgbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIHV2YWx1ZXMgPSBbXTtcbiAgICB2YXIgdWluZGV4ID0gW107XG4gICAgdmFyIHVwdHIgPSBbXTtcbiAgICB2YXIgdXNpemUgPSBbbiwgY29sdW1uc107IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrOyAvLyBwZXJtdXRhdGlvbiB2ZWN0b3JzLCAoY3VycmVudCBpbmRleCAtPiBvcmlnaW5hbCBpbmRleCkgYW5kIChvcmlnaW5hbCBpbmRleCAtPiBjdXJyZW50IGluZGV4KVxuXG4gICAgdmFyIHB2Q28gPSBbXTtcbiAgICB2YXIgcHZPYyA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgcHZDb1tpXSA9IGk7XG4gICAgICBwdk9jW2ldID0gaTtcbiAgICB9IC8vIHN3YXAgaW5kaWNlcyBpbiBwZXJtdXRhdGlvbiB2ZWN0b3JzIChjb25kaXRpb24geCA8IHkpIVxuXG5cbiAgICB2YXIgc3dhcEluZGVjZXMgPSBmdW5jdGlvbiBzd2FwSW5kZWNlcyh4LCB5KSB7XG4gICAgICAvLyBmaW5kIHB2IGluZGVjZXMgZ2V0dGluZyBkYXRhIGZyb20geCBhbmQgeVxuICAgICAgdmFyIGt4ID0gcHZPY1t4XTtcbiAgICAgIHZhciBreSA9IHB2T2NbeV07IC8vIHVwZGF0ZSBwZXJtdXRhdGlvbiB2ZWN0b3IgY3VycmVudCAtPiBvcmlnaW5hbFxuXG4gICAgICBwdkNvW2t4XSA9IHk7XG4gICAgICBwdkNvW2t5XSA9IHg7IC8vIHVwZGF0ZSBwZXJtdXRhdGlvbiB2ZWN0b3Igb3JpZ2luYWwgLT4gY3VycmVudFxuXG4gICAgICBwdk9jW3hdID0ga3k7XG4gICAgICBwdk9jW3ldID0ga3g7XG4gICAgfTsgLy8gbG9vcCBjb2x1bW5zXG5cblxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKCkge1xuICAgICAgLy8gc3BhcnNlIGFjY3VtdWxhdG9yXG4gICAgICB2YXIgc3BhID0gbmV3IFNwYSgpOyAvLyBjaGVjayBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeCBoYXMgYSB2YWx1ZSBAIGNvbHVtbiBqXG5cbiAgICAgIGlmIChqIDwgcm93cykge1xuICAgICAgICAvLyB1cGRhdGUgcHRyXG4gICAgICAgIGxwdHIucHVzaChsdmFsdWVzLmxlbmd0aCk7IC8vIGZpcnN0IHZhbHVlIGluIGogY29sdW1uIGZvciBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeFxuXG4gICAgICAgIGx2YWx1ZXMucHVzaCgxKTtcbiAgICAgICAgbGluZGV4LnB1c2goaik7XG4gICAgICB9IC8vIHVwZGF0ZSBwdHJcblxuXG4gICAgICB1cHRyLnB1c2godXZhbHVlcy5sZW5ndGgpOyAvLyBrMCA8PSBrIDwgazEgd2hlcmUgazAgPSBfcHRyW2pdICYmIGsxID0gX3B0cltqKzFdXG5cbiAgICAgIHZhciBrMCA9IHB0cltqXTtcbiAgICAgIHZhciBrMSA9IHB0cltqICsgMV07IC8vIGNvcHkgY29sdW1uIGogaW50byBzcGFyc2UgYWNjdW11bGF0b3JcblxuICAgICAgZm9yIChrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICBpID0gaW5kZXhba107IC8vIGNvcHkgY29sdW1uIHZhbHVlcyBpbnRvIHNwYXJzZSBhY2N1bXVsYXRvciAodXNlIHBlcm11dGF0aW9uIHZlY3RvcilcblxuICAgICAgICBzcGEuc2V0KHB2Q29baV0sIHZhbHVlc1trXSk7XG4gICAgICB9IC8vIHNraXAgZmlyc3QgY29sdW1uIGluIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XG5cblxuICAgICAgaWYgKGogPiAwKSB7XG4gICAgICAgIC8vIGxvb3Agcm93cyBpbiBjb2x1bW4gaiAoYWJvdmUgZGlhZ29uYWwpXG4gICAgICAgIHNwYS5mb3JFYWNoKDAsIGogLSAxLCBmdW5jdGlvbiAoaywgdmtqKSB7XG4gICAgICAgICAgLy8gbG9vcCByb3dzIGluIGNvbHVtbiBrIChMKVxuICAgICAgICAgIFNwYXJzZU1hdHJpeC5fZm9yRWFjaFJvdyhrLCBsdmFsdWVzLCBsaW5kZXgsIGxwdHIsIGZ1bmN0aW9uIChpLCB2aWspIHtcbiAgICAgICAgICAgIC8vIGNoZWNrIHJvdyBpcyBiZWxvdyBrXG4gICAgICAgICAgICBpZiAoaSA+IGspIHtcbiAgICAgICAgICAgICAgLy8gdXBkYXRlIHNwYSB2YWx1ZVxuICAgICAgICAgICAgICBzcGEuYWNjdW11bGF0ZShpLCB1bmFyeU1pbnVzKG11bHRpcGx5U2NhbGFyKHZpaywgdmtqKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0gLy8gcm93IHdpdGggbGFyZ2VyIHZhbHVlIGluIHNwYSwgcm93ID49IGpcblxuXG4gICAgICB2YXIgcGkgPSBqO1xuICAgICAgdmFyIHZqaiA9IHNwYS5nZXQoaik7XG4gICAgICB2YXIgcGFic3YgPSBhYnModmpqKTsgLy8gbG9vcCB2YWx1ZXMgaW4gc3BhIChvcmRlciBieSByb3csIGJlbG93IGRpYWdvbmFsKVxuXG4gICAgICBzcGEuZm9yRWFjaChqICsgMSwgcm93cyAtIDEsIGZ1bmN0aW9uICh4LCB2KSB7XG4gICAgICAgIC8vIGFic29sdXRlIHZhbHVlXG4gICAgICAgIHZhciBhYnN2ID0gYWJzKHYpOyAvLyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gcGl2b3RlIHZhbHVlXG5cbiAgICAgICAgaWYgKGxhcmdlcihhYnN2LCBwYWJzdikpIHtcbiAgICAgICAgICAvLyBzdG9yZSByb3dcbiAgICAgICAgICBwaSA9IHg7IC8vIHVwZGF0ZSBtYXggdmFsdWVcblxuICAgICAgICAgIHBhYnN2ID0gYWJzdjsgLy8gdmFsdWUgQCBbaiwgal1cblxuICAgICAgICAgIHZqaiA9IHY7XG4gICAgICAgIH1cbiAgICAgIH0pOyAvLyBzd2FwIHJvd3MgKGogPC0+IHBpKVxuXG4gICAgICBpZiAoaiAhPT0gcGkpIHtcbiAgICAgICAgLy8gc3dhcCB2YWx1ZXMgaiA8LT4gcGkgaW4gTFxuICAgICAgICBTcGFyc2VNYXRyaXguX3N3YXBSb3dzKGosIHBpLCBsc2l6ZVsxXSwgbHZhbHVlcywgbGluZGV4LCBscHRyKTsgLy8gc3dhcCB2YWx1ZXMgaiA8LT4gcGkgaW4gVVxuXG5cbiAgICAgICAgU3BhcnNlTWF0cml4Ll9zd2FwUm93cyhqLCBwaSwgdXNpemVbMV0sIHV2YWx1ZXMsIHVpbmRleCwgdXB0cik7IC8vIHN3YXAgdmFsdWVzIGluIHNwYVxuXG5cbiAgICAgICAgc3BhLnN3YXAoaiwgcGkpOyAvLyB1cGRhdGUgcGVybXV0YXRpb24gdmVjdG9yIChzd2FwIHZhbHVlcyBAIGosIHBpKVxuXG4gICAgICAgIHN3YXBJbmRlY2VzKGosIHBpKTtcbiAgICAgIH0gLy8gbG9vcCB2YWx1ZXMgaW4gc3BhIChvcmRlciBieSByb3cpXG5cblxuICAgICAgc3BhLmZvckVhY2goMCwgcm93cyAtIDEsIGZ1bmN0aW9uICh4LCB2KSB7XG4gICAgICAgIC8vIGNoZWNrIHdlIGFyZSBhYm92ZSBkaWFnb25hbFxuICAgICAgICBpZiAoeCA8PSBqKSB7XG4gICAgICAgICAgLy8gdXBkYXRlIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XG4gICAgICAgICAgdXZhbHVlcy5wdXNoKHYpO1xuICAgICAgICAgIHVpbmRleC5wdXNoKHgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHVwZGF0ZSB2YWx1ZVxuICAgICAgICAgIHYgPSBkaXZpZGVTY2FsYXIodiwgdmpqKTsgLy8gY2hlY2sgdmFsdWUgaXMgbm9uIHplcm9cblxuICAgICAgICAgIGlmICghZXF1YWxTY2FsYXIodiwgMCkpIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeFxuICAgICAgICAgICAgbHZhbHVlcy5wdXNoKHYpO1xuICAgICAgICAgICAgbGluZGV4LnB1c2goeCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgZm9yIChqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgX2xvb3AoKTtcbiAgICB9IC8vIHVwZGF0ZSBwdHJzXG5cblxuICAgIHVwdHIucHVzaCh1dmFsdWVzLmxlbmd0aCk7XG4gICAgbHB0ci5wdXNoKGx2YWx1ZXMubGVuZ3RoKTsgLy8gcmV0dXJuIG1hdHJpY2VzXG5cbiAgICByZXR1cm4ge1xuICAgICAgTDogbmV3IFNwYXJzZU1hdHJpeCh7XG4gICAgICAgIHZhbHVlczogbHZhbHVlcyxcbiAgICAgICAgaW5kZXg6IGxpbmRleCxcbiAgICAgICAgcHRyOiBscHRyLFxuICAgICAgICBzaXplOiBsc2l6ZVxuICAgICAgfSksXG4gICAgICBVOiBuZXcgU3BhcnNlTWF0cml4KHtcbiAgICAgICAgdmFsdWVzOiB1dmFsdWVzLFxuICAgICAgICBpbmRleDogdWluZGV4LFxuICAgICAgICBwdHI6IHVwdHIsXG4gICAgICAgIHNpemU6IHVzaXplXG4gICAgICB9KSxcbiAgICAgIHA6IHB2Q28sXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiAnTDogJyArIHRoaXMuTC50b1N0cmluZygpICsgJ1xcblU6ICcgKyB0aGlzLlUudG9TdHJpbmcoKSArICdcXG5QOiAnICsgdGhpcy5wO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVMdXAgPSBjcmVhdGVMdXA7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVFyID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxudmFyIG5hbWUgPSAncXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ3plcm9zJywgJ2lkZW50aXR5JywgJ2lzWmVybycsICdlcXVhbCcsICdzaWduJywgJ3NxcnQnLCAnY29uaicsICd1bmFyeU1pbnVzJywgJ2FkZFNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAnc3VidHJhY3QnLCAnY29tcGxleCddO1xudmFyIGNyZWF0ZVFyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgemVyb3MgPSBfcmVmLnplcm9zLFxuICAgICAgaWRlbnRpdHkgPSBfcmVmLmlkZW50aXR5LFxuICAgICAgaXNaZXJvID0gX3JlZi5pc1plcm8sXG4gICAgICBlcXVhbCA9IF9yZWYuZXF1YWwsXG4gICAgICBzaWduID0gX3JlZi5zaWduLFxuICAgICAgc3FydCA9IF9yZWYuc3FydCxcbiAgICAgIGNvbmogPSBfcmVmLmNvbmosXG4gICAgICB1bmFyeU1pbnVzID0gX3JlZi51bmFyeU1pbnVzLFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcixcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIGNvbXBsZXggPSBfcmVmLmNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgTWF0cml4IFFSIGRlY29tcG9zaXRpb24uIE1hdHJpeCBgQWAgaXMgZGVjb21wb3NlZCBpblxuICAgKiB0d28gbWF0cmljZXMgKGBRYCwgYFJgKSB3aGVyZSBgUWAgaXMgYW5cbiAgICogb3J0aG9nb25hbCBtYXRyaXggYW5kIGBSYCBpcyBhbiB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnFyKEEpXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqXG4gICAqICAgIGNvbnN0IG0gPSBbXG4gICAqICAgICAgWzEsIC0xLCAgNF0sXG4gICAqICAgICAgWzEsICA0LCAtMl0sXG4gICAqICAgICAgWzEsICA0LCAgMl0sXG4gICAqICAgICAgWzEsICAtMSwgMF1cbiAgICogICAgXVxuICAgKiAgICBjb25zdCByZXN1bHQgPSBtYXRoLnFyKG0pXG4gICAqICAgIC8vIHIgPSB7XG4gICAqICAgIC8vICAgUTogW1xuICAgKiAgICAvLyAgICAgWzAuNSwgLTAuNSwgICAwLjVdLFxuICAgKiAgICAvLyAgICAgWzAuNSwgIDAuNSwgIC0wLjVdLFxuICAgKiAgICAvLyAgICAgWzAuNSwgIDAuNSwgICAwLjVdLFxuICAgKiAgICAvLyAgICAgWzAuNSwgLTAuNSwgIC0wLjVdLFxuICAgKiAgICAvLyAgIF0sXG4gICAqICAgIC8vICAgUjogW1xuICAgKiAgICAvLyAgICAgWzIsIDMsICAyXSxcbiAgICogICAgLy8gICAgIFswLCA1LCAtMl0sXG4gICAqICAgIC8vICAgICBbMCwgMCwgIDRdLFxuICAgKiAgICAvLyAgICAgWzAsIDAsICAwXVxuICAgKiAgICAvLyAgIF1cbiAgICogICAgLy8gfVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbHVwLCBsdXNvbHZlXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IEEgICAgQSB0d28gZGltZW5zaW9uYWwgbWF0cml4IG9yIGFycmF5XG4gICAqIGZvciB3aGljaCB0byBnZXQgdGhlIFFSIGRlY29tcG9zaXRpb24uXG4gICAqXG4gICAqIEByZXR1cm4ge3tROiBBcnJheSB8IE1hdHJpeCwgUjogQXJyYXkgfCBNYXRyaXh9fSBROiB0aGUgb3J0aG9nb25hbFxuICAgKiBtYXRyaXggYW5kIFI6IHRoZSB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeFxuICAgKi9cbiAgcmV0dXJuIF9leHRlbmRzKHR5cGVkKG5hbWUsIHtcbiAgICBEZW5zZU1hdHJpeDogZnVuY3Rpb24gRGVuc2VNYXRyaXgobSkge1xuICAgICAgcmV0dXJuIF9kZW5zZVFSKG0pO1xuICAgIH0sXG4gICAgU3BhcnNlTWF0cml4OiBmdW5jdGlvbiBTcGFyc2VNYXRyaXgobSkge1xuICAgICAgcmV0dXJuIF9zcGFyc2VRUihtKTtcbiAgICB9LFxuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheShhKSB7XG4gICAgICAvLyBjcmVhdGUgZGVuc2UgbWF0cml4IGZyb20gYXJyYXlcbiAgICAgIHZhciBtID0gbWF0cml4KGEpOyAvLyBsdXAsIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cblxuICAgICAgdmFyIHIgPSBfZGVuc2VRUihtKTsgLy8gcmVzdWx0XG5cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgUTogci5RLnZhbHVlT2YoKSxcbiAgICAgICAgUjogci5SLnZhbHVlT2YoKVxuICAgICAgfTtcbiAgICB9XG4gIH0pLCB7XG4gICAgX2RlbnNlUVJpbXBsOiBfZGVuc2VRUmltcGxcbiAgfSk7XG5cbiAgZnVuY3Rpb24gX2RlbnNlUVJpbXBsKG0pIHtcbiAgICAvLyByb3dzICYgY29sdW1ucyAobSB4IG4pXG4gICAgdmFyIHJvd3MgPSBtLl9zaXplWzBdOyAvLyBtXG5cbiAgICB2YXIgY29scyA9IG0uX3NpemVbMV07IC8vIG5cblxuICAgIHZhciBRID0gaWRlbnRpdHkoW3Jvd3NdLCAnZGVuc2UnKTtcbiAgICB2YXIgUWRhdGEgPSBRLl9kYXRhO1xuICAgIHZhciBSID0gbS5jbG9uZSgpO1xuICAgIHZhciBSZGF0YSA9IFIuX2RhdGE7IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrO1xuICAgIHZhciB3ID0gemVyb3MoW3Jvd3NdLCAnJyk7XG5cbiAgICBmb3IgKGsgPSAwOyBrIDwgTWF0aC5taW4oY29scywgcm93cyk7ICsraykge1xuICAgICAgLypcbiAgICAgICAqICoqay10aCBIb3VzZWhvbGQgbWF0cml4KipcbiAgICAgICAqXG4gICAgICAgKiBUaGUgbWF0cml4IEkgLSAyKnYqdHJhbnNwb3NlKHYpXG4gICAgICAgKiB4ICAgICA9IGZpcnN0IGNvbHVtbiBvZiBBXG4gICAgICAgKiB4MSAgICA9IGZpcnN0IGVsZW1lbnQgb2YgeFxuICAgICAgICogYWxwaGEgPSB4MSAvIHx4MXwgKiB8eHxcbiAgICAgICAqIGUxICAgID0gdHJhbnBvc2UoWzEsIDAsIDAsIC4uLl0pXG4gICAgICAgKiB1ICAgICA9IHggLSBhbHBoYSAqIGUxXG4gICAgICAgKiB2ICAgICA9IHUgLyB8dXxcbiAgICAgICAqXG4gICAgICAgKiBIb3VzZWhvbGQgbWF0cml4ID0gSSAtIDIgKiB2ICogdHJhbnBvc2UodilcbiAgICAgICAqXG4gICAgICAgKiAgKiBJbml0aWFsbHkgUSA9IEkgYW5kIFIgPSBBLlxuICAgICAgICogICogSG91c2Vob2xkIG1hdHJpeCBpcyBhIHJlZmxlY3Rpb24gaW4gYSBwbGFuZSBub3JtYWwgdG8gdiB3aGljaFxuICAgICAgICogICAgd2lsbCB6ZXJvIG91dCBhbGwgYnV0IHRoZSB0b3AgcmlnaHQgZWxlbWVudCBpbiBSLlxuICAgICAgICogICogQXBwcGx5aW5nIHJlZmxlY3Rpb24gdG8gYm90aCBRIGFuZCBSIHdpbGwgbm90IGNoYW5nZSBwcm9kdWN0LlxuICAgICAgICogICogUmVwZWF0IHRoaXMgcHJvY2VzcyBvbiB0aGUgKDEsMSkgbWlub3IgdG8gZ2V0IFIgYXMgYW4gdXBwZXJcbiAgICAgICAqICAgIHRyaWFuZ3VsYXIgbWF0cml4LlxuICAgICAgICogICogUmVmbGVjdGlvbnMgbGVhdmUgdGhlIG1hZ25pdHVkZSBvZiB0aGUgY29sdW1ucyBvZiBRIHVuY2hhbmdlZFxuICAgICAgICogICAgc28gUSByZW1haW5zIG90aG9nYW5hbC5cbiAgICAgICAqXG4gICAgICAgKi9cbiAgICAgIHZhciBwaXZvdCA9IFJkYXRhW2tdW2tdO1xuICAgICAgdmFyIHNnbiA9IHVuYXJ5TWludXMoZXF1YWwocGl2b3QsIDApID8gMSA6IHNpZ24ocGl2b3QpKTtcbiAgICAgIHZhciBjb25qU2duID0gY29uaihzZ24pO1xuICAgICAgdmFyIGFscGhhU3F1YXJlZCA9IDA7XG5cbiAgICAgIGZvciAoaSA9IGs7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgYWxwaGFTcXVhcmVkID0gYWRkU2NhbGFyKGFscGhhU3F1YXJlZCwgbXVsdGlwbHlTY2FsYXIoUmRhdGFbaV1ba10sIGNvbmooUmRhdGFbaV1ba10pKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhbHBoYSA9IG11bHRpcGx5U2NhbGFyKHNnbiwgc3FydChhbHBoYVNxdWFyZWQpKTtcblxuICAgICAgaWYgKCFpc1plcm8oYWxwaGEpKSB7XG4gICAgICAgIC8vIGZpcnN0IGVsZW1lbnQgaW4gdmVjdG9yIHVcbiAgICAgICAgdmFyIHUxID0gc3VidHJhY3QocGl2b3QsIGFscGhhKTsgLy8gdyA9IHYgKiB1MSAvIHx1fCAgICAob25seSBlbGVtZW50cyBrIHRvIChyb3dzLTEpIGFyZSB1c2VkKVxuXG4gICAgICAgIHdba10gPSAxO1xuXG4gICAgICAgIGZvciAoaSA9IGsgKyAxOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgd1tpXSA9IGRpdmlkZVNjYWxhcihSZGF0YVtpXVtrXSwgdTEpO1xuICAgICAgICB9IC8vIHRhdSA9IC0gY29uaih1MSAvIGFscGhhKVxuXG5cbiAgICAgICAgdmFyIHRhdSA9IHVuYXJ5TWludXMoY29uaihkaXZpZGVTY2FsYXIodTEsIGFscGhhKSkpO1xuICAgICAgICB2YXIgcyA9IHZvaWQgMDtcbiAgICAgICAgLypcbiAgICAgICAgICogdGF1IGFuZCB3IGhhdmUgYmVlbiBjaG9vc2VuIHNvIHRoYXRcbiAgICAgICAgICpcbiAgICAgICAgICogMiAqIHYgKiB0cmFucG9zZSh2KSA9IHRhdSAqIHcgKiB0cmFucG9zZSh3KVxuICAgICAgICAgKi9cblxuICAgICAgICAvKlxuICAgICAgICAgKiAtLSBjYWxjdWxhdGUgUiA9IFIgLSB0YXUgKiB3ICogdHJhbnBvc2UodykgKiBSIC0tXG4gICAgICAgICAqIE9ubHkgZG8gY2FsY3VsYXRpb24gd2l0aCByb3dzIGsgdG8gKHJvd3MtMSlcbiAgICAgICAgICogQWRkaXRpb25hbGx5IGNvbHVtbnMgMCB0byAoay0xKSB3aWxsIG5vdCBiZSBjaGFuZ2VkIGJ5IHRoaXNcbiAgICAgICAgICogICBtdWx0aXBsaWNhdGlvbiBzbyBkbyBub3QgYm90aGVyIHJlY2FsY3VsYXRpbmcgdGhlbVxuICAgICAgICAgKi9cblxuICAgICAgICBmb3IgKGogPSBrOyBqIDwgY29sczsgaisrKSB7XG4gICAgICAgICAgcyA9IDAuMDsgLy8gY2FsY3VsYXRlIGp0aCBlbGVtZW50IG9mIFt0cmFucG9zZSh3KSAqIFJdXG5cbiAgICAgICAgICBmb3IgKGkgPSBrOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYWRkU2NhbGFyKHMsIG11bHRpcGx5U2NhbGFyKGNvbmood1tpXSksIFJkYXRhW2ldW2pdKSk7XG4gICAgICAgICAgfSAvLyBjYWxjdWxhdGUgdGhlIGp0aCBlbGVtZW50IG9mIFt0YXUgKiB0cmFuc3Bvc2UodykgKiBSXVxuXG5cbiAgICAgICAgICBzID0gbXVsdGlwbHlTY2FsYXIocywgdGF1KTtcblxuICAgICAgICAgIGZvciAoaSA9IGs7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAgIFJkYXRhW2ldW2pdID0gbXVsdGlwbHlTY2FsYXIoc3VidHJhY3QoUmRhdGFbaV1bal0sIG11bHRpcGx5U2NhbGFyKHdbaV0sIHMpKSwgY29ualNnbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qXG4gICAgICAgICAqIC0tIGNhbGN1bGF0ZSBRID0gUSAtIHRhdSAqIFEgKiB3ICogdHJhbnNwb3NlKHcpIC0tXG4gICAgICAgICAqIFEgaXMgYSBzcXVhcmUgbWF0cml4IChyb3dzIHggcm93cylcbiAgICAgICAgICogT25seSBkbyBjYWxjdWxhdGlvbiB3aXRoIGNvbHVtbnMgayB0byAocm93cy0xKVxuICAgICAgICAgKiBBZGRpdGlvbmFsbHkgcm93cyAwIHRvIChrLTEpIHdpbGwgbm90IGJlIGNoYW5nZWQgYnkgdGhpc1xuICAgICAgICAgKiAgIG11bHRpcGxpY2F0aW9uIHNvIGRvIG5vdCBib3RoZXIgcmVjYWxjdWxhdGluZyB0aGVtXG4gICAgICAgICAqL1xuXG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgIHMgPSAwLjA7IC8vIGNhbGN1bGF0ZSBpdGggZWxlbWVudCBvZiBbUSAqIHddXG5cbiAgICAgICAgICBmb3IgKGogPSBrOyBqIDwgcm93czsgaisrKSB7XG4gICAgICAgICAgICBzID0gYWRkU2NhbGFyKHMsIG11bHRpcGx5U2NhbGFyKFFkYXRhW2ldW2pdLCB3W2pdKSk7XG4gICAgICAgICAgfSAvLyBjYWxjdWxhdGUgdGhlIGl0aCBlbGVtZW50IG9mIFt0YXUgKiBRICogd11cblxuXG4gICAgICAgICAgcyA9IG11bHRpcGx5U2NhbGFyKHMsIHRhdSk7XG5cbiAgICAgICAgICBmb3IgKGogPSBrOyBqIDwgcm93czsgKytqKSB7XG4gICAgICAgICAgICBRZGF0YVtpXVtqXSA9IGRpdmlkZVNjYWxhcihzdWJ0cmFjdChRZGF0YVtpXVtqXSwgbXVsdGlwbHlTY2FsYXIocywgY29uaih3W2pdKSkpLCBjb25qU2duKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiBtYXRyaWNlc1xuXG5cbiAgICByZXR1cm4ge1xuICAgICAgUTogUSxcbiAgICAgIFI6IFIsXG4gICAgICB0b1N0cmluZzogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgICAgIHJldHVybiAnUTogJyArIHRoaXMuUS50b1N0cmluZygpICsgJ1xcblI6ICcgKyB0aGlzLlIudG9TdHJpbmcoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gX2RlbnNlUVIobSkge1xuICAgIHZhciByZXQgPSBfZGVuc2VRUmltcGwobSk7XG5cbiAgICB2YXIgUmRhdGEgPSByZXQuUi5fZGF0YTtcblxuICAgIGlmIChtLl9kYXRhLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhciB6ZXJvID0gUmRhdGFbMF1bMF0udHlwZSA9PT0gJ0NvbXBsZXgnID8gY29tcGxleCgwKSA6IDA7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgUmRhdGEubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpICYmIGogPCAoUmRhdGFbMF0gfHwgW10pLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgUmRhdGFbaV1bal0gPSB6ZXJvO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9zcGFyc2VRUihtKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdxciBub3QgaW1wbGVtZW50ZWQgZm9yIHNwYXJzZSBtYXRyaWNlcyB5ZXQnKTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVFyID0gY3JlYXRlUXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNsdSA9IHZvaWQgMDtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jc1NxciA9IHJlcXVpcmUoXCIuLi9zcGFyc2UvY3NTcXJcIik7XG5cbnZhciBfY3NMdSA9IHJlcXVpcmUoXCIuLi9zcGFyc2UvY3NMdVwiKTtcblxudmFyIG5hbWUgPSAnc2x1JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FicycsICdhZGQnLCAnbXVsdGlwbHknLCAndHJhbnNwb3NlJywgJ2RpdmlkZVNjYWxhcicsICdzdWJ0cmFjdCcsICdsYXJnZXInLCAnbGFyZ2VyRXEnLCAnU3BhcnNlTWF0cml4J107XG52YXIgY3JlYXRlU2x1ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFicyA9IF9yZWYuYWJzLFxuICAgICAgYWRkID0gX3JlZi5hZGQsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICB0cmFuc3Bvc2UgPSBfcmVmLnRyYW5zcG9zZSxcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgbGFyZ2VyID0gX3JlZi5sYXJnZXIsXG4gICAgICBsYXJnZXJFcSA9IF9yZWYubGFyZ2VyRXEsXG4gICAgICBTcGFyc2VNYXRyaXggPSBfcmVmLlNwYXJzZU1hdHJpeDtcbiAgdmFyIGNzU3FyID0gKDAsIF9jc1Nxci5jcmVhdGVDc1Nxcikoe1xuICAgIGFkZDogYWRkLFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICB0cmFuc3Bvc2U6IHRyYW5zcG9zZVxuICB9KTtcbiAgdmFyIGNzTHUgPSAoMCwgX2NzTHUuY3JlYXRlQ3NMdSkoe1xuICAgIGFiczogYWJzLFxuICAgIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gICAgbGFyZ2VyOiBsYXJnZXIsXG4gICAgbGFyZ2VyRXE6IGxhcmdlckVxLFxuICAgIFNwYXJzZU1hdHJpeDogU3BhcnNlTWF0cml4XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBTcGFyc2UgTWF0cml4IExVIGRlY29tcG9zaXRpb24gd2l0aCBmdWxsIHBpdm90aW5nLiBTcGFyc2UgTWF0cml4IGBBYCBpcyBkZWNvbXBvc2VkIGluIHR3byBtYXRyaWNlcyAoYExgLCBgVWApIGFuZCB0d28gcGVybXV0YXRpb24gdmVjdG9ycyAoYHBpbnZgLCBgcWApIHdoZXJlXG4gICAqXG4gICAqIGBQICogQSAqIFEgPSBMICogVWBcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNsdShBLCBvcmRlciwgdGhyZXNob2xkKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgQSA9IG1hdGguc3BhcnNlKFtbNCwzXSwgWzYsIDNdXSlcbiAgICogICAgbWF0aC5zbHUoQSwgMSwgMC4wMDEpXG4gICAqICAgIC8vIHJldHVybnM6XG4gICAqICAgIC8vIHtcbiAgICogICAgLy8gICBMOiBbWzEsIDBdLCBbMS41LCAxXV1cbiAgICogICAgLy8gICBVOiBbWzQsIDNdLCBbMCwgLTEuNV1dXG4gICAqICAgIC8vICAgcDogWzAsIDFdXG4gICAqICAgIC8vICAgcTogWzAsIDFdXG4gICAqICAgIC8vIH1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGx1cCwgbHNvbHZlLCB1c29sdmUsIGx1c29sdmVcbiAgICpcbiAgICogQHBhcmFtIHtTcGFyc2VNYXRyaXh9IEEgICAgICAgICAgICAgIEEgdHdvIGRpbWVuc2lvbmFsIHNwYXJzZSBtYXRyaXggZm9yIHdoaWNoIHRvIGdldCB0aGUgTFUgZGVjb21wb3NpdGlvbi5cbiAgICogQHBhcmFtIHtOdW1iZXJ9ICAgICAgIG9yZGVyICAgICAgICAgIFRoZSBTeW1ib2xpYyBPcmRlcmluZyBhbmQgQW5hbHlzaXMgb3JkZXI6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCAtIE5hdHVyYWwgb3JkZXJpbmcsIG5vIHBlcm11dGF0aW9uIHZlY3RvciBxIGlzIHJldHVybmVkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAtIE1hdHJpeCBtdXN0IGJlIHNxdWFyZSwgc3ltYm9saWMgb3JkZXJpbmcgYW5kIGFuYWxpc2lzIGlzIHBlcmZvcm1lZCBvbiBNID0gQSArIEEnXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiAtIFN5bWJvbGljIG9yZGVyaW5nIGFuZCBhbmFsaXNpcyBpcyBwZXJmb3JtZWQgb24gTSA9IEEnICogQS4gRGVuc2UgY29sdW1ucyBmcm9tIEEnIGFyZSBkcm9wcGVkLCBBIHJlY3JlYXRlZCBmcm9tIEEnLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGFwcHJvcHJpYXRlZm9yIExVIGZhY3Rvcml6YXRpb24gb2YgdW5zeW1tZXRyaWMgbWF0cmljZXMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMyAtIFN5bWJvbGljIG9yZGVyaW5nIGFuZCBhbmFsaXNpcyBpcyBwZXJmb3JtZWQgb24gTSA9IEEnICogQS4gVGhpcyBpcyBiZXN0IHVzZWQgZm9yIExVIGZhY3Rvcml6YXRpb24gaXMgbWF0cml4IE0gaGFzIG5vIGRlbnNlIHJvd3MuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgZGVuc2Ugcm93IGlzIGEgcm93IHdpdGggbW9yZSB0aGFuIDEwKnNxcihjb2x1bW5zKSBlbnRyaWVzLlxuICAgKiBAcGFyYW0ge051bWJlcn0gICAgICAgdGhyZXNob2xkICAgICAgIFBhcnRpYWwgcGl2b3RpbmcgdGhyZXNob2xkICgxIGZvciBwYXJ0aWFsIHBpdm90aW5nKVxuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeCwgdGhlIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4IGFuZCB0aGUgcGVybXV0YXRpb24gdmVjdG9ycy5cbiAgICovXG5cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnU3BhcnNlTWF0cml4LCBudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlck51bWJlcihhLCBvcmRlciwgdGhyZXNob2xkKSB7XG4gICAgICAvLyB2ZXJpZnkgb3JkZXJcbiAgICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShvcmRlcikgfHwgb3JkZXIgPCAwIHx8IG9yZGVyID4gMykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N5bWJvbGljIE9yZGVyaW5nIGFuZCBBbmFseXNpcyBvcmRlciBtdXN0IGJlIGFuIGludGVnZXIgbnVtYmVyIGluIHRoZSBpbnRlcnZhbCBbMCwgM10nKTtcbiAgICAgIH0gLy8gdmVyaWZ5IHRocmVzaG9sZFxuXG5cbiAgICAgIGlmICh0aHJlc2hvbGQgPCAwIHx8IHRocmVzaG9sZCA+IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJ0aWFsIHBpdm90aW5nIHRocmVzaG9sZCBtdXN0IGJlIGEgbnVtYmVyIGZyb20gMCB0byAxJyk7XG4gICAgICB9IC8vIHBlcmZvcm0gc3ltYm9saWMgb3JkZXJpbmcgYW5kIGFuYWx5c2lzXG5cblxuICAgICAgdmFyIHMgPSBjc1NxcihvcmRlciwgYSwgZmFsc2UpOyAvLyBwZXJmb3JtIGx1IGRlY29tcG9zaXRpb25cblxuICAgICAgdmFyIGYgPSBjc0x1KGEsIHMsIHRocmVzaG9sZCk7IC8vIHJldHVybiBkZWNvbXBvc2l0aW9uXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIEw6IGYuTCxcbiAgICAgICAgVTogZi5VLFxuICAgICAgICBwOiBmLnBpbnYsXG4gICAgICAgIHE6IHMucSxcbiAgICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICAgIHJldHVybiAnTDogJyArIHRoaXMuTC50b1N0cmluZygpICsgJ1xcblU6ICcgKyB0aGlzLlUudG9TdHJpbmcoKSArICdcXG5wOiAnICsgdGhpcy5wLnRvU3RyaW5nKCkgKyAodGhpcy5xID8gJ1xcbnE6ICcgKyB0aGlzLnEudG9TdHJpbmcoKSA6ICcnKSArICdcXG4nO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2x1ID0gY3JlYXRlU2x1OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEZXJpdmF0aXZlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZGVyaXZhdGl2ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAncGFyc2UnLCAnc2ltcGxpZnknLCAnZXF1YWwnLCAnaXNaZXJvJywgJ251bWVyaWMnLCAnQ29uc3RhbnROb2RlJywgJ0Z1bmN0aW9uTm9kZScsICdPcGVyYXRvck5vZGUnLCAnUGFyZW50aGVzaXNOb2RlJywgJ1N5bWJvbE5vZGUnXTtcbnZhciBjcmVhdGVEZXJpdmF0aXZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgcGFyc2UgPSBfcmVmLnBhcnNlLFxuICAgICAgc2ltcGxpZnkgPSBfcmVmLnNpbXBsaWZ5LFxuICAgICAgZXF1YWwgPSBfcmVmLmVxdWFsLFxuICAgICAgaXNaZXJvID0gX3JlZi5pc1plcm8sXG4gICAgICBudW1lcmljID0gX3JlZi5udW1lcmljLFxuICAgICAgQ29uc3RhbnROb2RlID0gX3JlZi5Db25zdGFudE5vZGUsXG4gICAgICBGdW5jdGlvbk5vZGUgPSBfcmVmLkZ1bmN0aW9uTm9kZSxcbiAgICAgIE9wZXJhdG9yTm9kZSA9IF9yZWYuT3BlcmF0b3JOb2RlLFxuICAgICAgUGFyZW50aGVzaXNOb2RlID0gX3JlZi5QYXJlbnRoZXNpc05vZGUsXG4gICAgICBTeW1ib2xOb2RlID0gX3JlZi5TeW1ib2xOb2RlO1xuXG4gIC8qKlxuICAgKiBUYWtlcyB0aGUgZGVyaXZhdGl2ZSBvZiBhbiBleHByZXNzaW9uIGV4cHJlc3NlZCBpbiBwYXJzZXIgTm9kZXMuXG4gICAqIFRoZSBkZXJpdmF0aXZlIHdpbGwgYmUgdGFrZW4gb3ZlciB0aGUgc3VwcGxpZWQgdmFyaWFibGUgaW4gdGhlXG4gICAqIHNlY29uZCBwYXJhbWV0ZXIuIElmIHRoZXJlIGFyZSBtdWx0aXBsZSB2YXJpYWJsZXMgaW4gdGhlIGV4cHJlc3Npb24sXG4gICAqIGl0IHdpbGwgcmV0dXJuIGEgcGFydGlhbCBkZXJpdmF0aXZlLlxuICAgKlxuICAgKiBUaGlzIHVzZXMgcnVsZXMgb2YgZGlmZmVyZW50aWF0aW9uIHdoaWNoIGNhbiBiZSBmb3VuZCBoZXJlOlxuICAgKlxuICAgKiAtIFtEaWZmZXJlbnRpYXRpb24gcnVsZXMgKFdpa2lwZWRpYSldKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RpZmZlcmVudGlhdGlvbl9ydWxlcylcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgZGVyaXZhdGl2ZShleHByLCB2YXJpYWJsZSlcbiAgICogICAgIGRlcml2YXRpdmUoZXhwciwgdmFyaWFibGUsIG9wdGlvbnMpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5kZXJpdmF0aXZlKCd4XjInLCAneCcpICAgICAgICAgICAgICAgICAgICAgLy8gTm9kZSB7MiAqIHh9XG4gICAqICAgICBtYXRoLmRlcml2YXRpdmUoJ3heMicsICd4Jywge3NpbXBsaWZ5OiBmYWxzZX0pICAvLyBOb2RlIHsyICogMSAqIHggXiAoMiAtIDEpXG4gICAqICAgICBtYXRoLmRlcml2YXRpdmUoJ3NpbigyeCknLCAneCcpKSAgICAgICAgICAgICAgICAvLyBOb2RlIHsyICogY29zKDIgKiB4KX1cbiAgICogICAgIG1hdGguZGVyaXZhdGl2ZSgnMip4JywgJ3gnKS5ldmFsdWF0ZSgpICAgICAgICAgIC8vIG51bWJlciAyXG4gICAqICAgICBtYXRoLmRlcml2YXRpdmUoJ3heMicsICd4JykuZXZhbHVhdGUoe3g6IDR9KSAgICAvLyBudW1iZXIgOFxuICAgKiAgICAgY29uc3QgZiA9IG1hdGgucGFyc2UoJ3heMicpXG4gICAqICAgICBjb25zdCB4ID0gbWF0aC5wYXJzZSgneCcpXG4gICAqICAgICBtYXRoLmRlcml2YXRpdmUoZiwgeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb2RlIHsyICogeH1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBzaW1wbGlmeSwgcGFyc2UsIGV2YWx1YXRlXG4gICAqXG4gICAqIEBwYXJhbSAge05vZGUgfCBzdHJpbmd9IGV4cHIgICAgICAgICAgIFRoZSBleHByZXNzaW9uIHRvIGRpZmZlcmVudGlhdGVcbiAgICogQHBhcmFtICB7U3ltYm9sTm9kZSB8IHN0cmluZ30gdmFyaWFibGUgVGhlIHZhcmlhYmxlIG92ZXIgd2hpY2ggdG8gZGlmZmVyZW50aWF0ZVxuICAgKiBAcGFyYW0gIHt7c2ltcGxpZnk6IGJvb2xlYW59fSBbb3B0aW9uc11cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgVGhlcmUgaXMgb25lIG9wdGlvbiBhdmFpbGFibGUsIGBzaW1wbGlmeWAsIHdoaWNoXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRydWUgYnkgZGVmYXVsdC4gV2hlbiBmYWxzZSwgb3V0cHV0IHdpbGwgbm90XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHNpbXBsaWZpZWQuXG4gICAqIEByZXR1cm4ge0NvbnN0YW50Tm9kZSB8IFN5bWJvbE5vZGUgfCBQYXJlbnRoZXNpc05vZGUgfCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGV9ICAgIFRoZSBkZXJpdmF0aXZlIG9mIGBleHByYFxuICAgKi9cbiAgdmFyIGRlcml2YXRpdmUgPSB0eXBlZCgnZGVyaXZhdGl2ZScsIHtcbiAgICAnTm9kZSwgU3ltYm9sTm9kZSwgT2JqZWN0JzogZnVuY3Rpb24gTm9kZVN5bWJvbE5vZGVPYmplY3QoZXhwciwgdmFyaWFibGUsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBjb25zdE5vZGVzID0ge307XG4gICAgICBjb25zdFRhZyhjb25zdE5vZGVzLCBleHByLCB2YXJpYWJsZS5uYW1lKTtcblxuICAgICAgdmFyIHJlcyA9IF9kZXJpdmF0aXZlKGV4cHIsIGNvbnN0Tm9kZXMpO1xuXG4gICAgICByZXR1cm4gb3B0aW9ucy5zaW1wbGlmeSA/IHNpbXBsaWZ5KHJlcykgOiByZXM7XG4gICAgfSxcbiAgICAnTm9kZSwgU3ltYm9sTm9kZSc6IGZ1bmN0aW9uIE5vZGVTeW1ib2xOb2RlKGV4cHIsIHZhcmlhYmxlKSB7XG4gICAgICByZXR1cm4gZGVyaXZhdGl2ZShleHByLCB2YXJpYWJsZSwge1xuICAgICAgICBzaW1wbGlmeTogdHJ1ZVxuICAgICAgfSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBTeW1ib2xOb2RlJzogZnVuY3Rpb24gc3RyaW5nU3ltYm9sTm9kZShleHByLCB2YXJpYWJsZSkge1xuICAgICAgcmV0dXJuIGRlcml2YXRpdmUocGFyc2UoZXhwciksIHZhcmlhYmxlKTtcbiAgICB9LFxuICAgICdzdHJpbmcsIFN5bWJvbE5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIHN0cmluZ1N5bWJvbE5vZGVPYmplY3QoZXhwciwgdmFyaWFibGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBkZXJpdmF0aXZlKHBhcnNlKGV4cHIpLCB2YXJpYWJsZSwgb3B0aW9ucyk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBzdHJpbmcnOiBmdW5jdGlvbiBzdHJpbmdTdHJpbmcoZXhwciwgdmFyaWFibGUpIHtcbiAgICAgIHJldHVybiBkZXJpdmF0aXZlKHBhcnNlKGV4cHIpLCBwYXJzZSh2YXJpYWJsZSkpO1xuICAgIH0sXG4gICAgJ3N0cmluZywgc3RyaW5nLCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdTdHJpbmdPYmplY3QoZXhwciwgdmFyaWFibGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBkZXJpdmF0aXZlKHBhcnNlKGV4cHIpLCBwYXJzZSh2YXJpYWJsZSksIG9wdGlvbnMpO1xuICAgIH0sXG4gICAgJ05vZGUsIHN0cmluZyc6IGZ1bmN0aW9uIE5vZGVTdHJpbmcoZXhwciwgdmFyaWFibGUpIHtcbiAgICAgIHJldHVybiBkZXJpdmF0aXZlKGV4cHIsIHBhcnNlKHZhcmlhYmxlKSk7XG4gICAgfSxcbiAgICAnTm9kZSwgc3RyaW5nLCBPYmplY3QnOiBmdW5jdGlvbiBOb2RlU3RyaW5nT2JqZWN0KGV4cHIsIHZhcmlhYmxlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gZGVyaXZhdGl2ZShleHByLCBwYXJzZSh2YXJpYWJsZSksIG9wdGlvbnMpO1xuICAgIH0gLy8gVE9ETzogcmVwbGFjZSB0aGUgOCBzaWduYXR1cmVzIGFib3ZlIHdpdGggNCBhcyBzb29uIGFzIHR5cGVkLWZ1bmN0aW9uIHN1cHBvcnRzIG9wdGlvbmFsIGFyZ3VtZW50c1xuXG4gICAgLyogVE9ETzogaW1wbGVtZW50IGFuZCB0ZXN0IHN5bnRheCB3aXRoIG9yZGVyIG9mIGRlcml2YXRpdmVzIC0+IGltcGxlbWVudCBhcyBhbiBvcHRpb24ge29yZGVyOiBudW1iZXJ9XG4gICAgJ05vZGUsIFN5bWJvbE5vZGUsIENvbnN0YW50Tm9kZSc6IGZ1bmN0aW9uIChleHByLCB2YXJpYWJsZSwge29yZGVyfSkge1xuICAgICAgbGV0IHJlcyA9IGV4cHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3JkZXI7IGkrKykge1xuICAgICAgICBsZXQgY29uc3ROb2RlcyA9IHt9XG4gICAgICAgIGNvbnN0VGFnKGNvbnN0Tm9kZXMsIGV4cHIsIHZhcmlhYmxlLm5hbWUpXG4gICAgICAgIHJlcyA9IF9kZXJpdmF0aXZlKHJlcywgY29uc3ROb2RlcylcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9XG4gICAgKi9cblxuICB9KTtcbiAgZGVyaXZhdGl2ZS5fc2ltcGxpZnkgPSB0cnVlO1xuXG4gIGRlcml2YXRpdmUudG9UZXggPSBmdW5jdGlvbiAoZGVyaXYpIHtcbiAgICByZXR1cm4gX2Rlcml2VGV4LmFwcGx5KG51bGwsIGRlcml2LmFyZ3MpO1xuICB9OyAvLyBGSVhNRTogbW92ZSB0aGUgdG9UZXggbWV0aG9kIG9mIGRlcml2YXRpdmUgdG8gbGF0ZXguanMuIERpZmZpY3VsdHkgaXMgdGhhdCBpdCByZWxpZXMgb24gcGFyc2UuXG4gIC8vIE5PVEU6IHRoZSBvcHRpb25hbCBcIm9yZGVyXCIgcGFyYW1ldGVyIGhlcmUgaXMgY3VycmVudGx5IHVudXNlZFxuXG5cbiAgdmFyIF9kZXJpdlRleCA9IHR5cGVkKCdfZGVyaXZUZXgnLCB7XG4gICAgJ05vZGUsIFN5bWJvbE5vZGUnOiBmdW5jdGlvbiBOb2RlU3ltYm9sTm9kZShleHByLCB4KSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoZXhwcikgJiYgKDAsIF9pcy50eXBlT2YpKGV4cHIudmFsdWUpID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gX2Rlcml2VGV4KHBhcnNlKGV4cHIudmFsdWUpLnRvU3RyaW5nKCksIHgudG9TdHJpbmcoKSwgMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gX2Rlcml2VGV4KGV4cHIudG9TdHJpbmcoKSwgeC50b1N0cmluZygpLCAxKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdOb2RlLCBDb25zdGFudE5vZGUnOiBmdW5jdGlvbiBOb2RlQ29uc3RhbnROb2RlKGV4cHIsIHgpIHtcbiAgICAgIGlmICgoMCwgX2lzLnR5cGVPZikoeC52YWx1ZSkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBfZGVyaXZUZXgoZXhwciwgcGFyc2UoeC52YWx1ZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHNlY29uZCBwYXJhbWV0ZXIgdG8gJ2Rlcml2YXRpdmUnIGlzIGEgbm9uLXN0cmluZyBjb25zdGFudFwiKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdOb2RlLCBTeW1ib2xOb2RlLCBDb25zdGFudE5vZGUnOiBmdW5jdGlvbiBOb2RlU3ltYm9sTm9kZUNvbnN0YW50Tm9kZShleHByLCB4LCBvcmRlcikge1xuICAgICAgcmV0dXJuIF9kZXJpdlRleChleHByLnRvU3RyaW5nKCksIHgubmFtZSwgb3JkZXIudmFsdWUpO1xuICAgIH0sXG4gICAgJ3N0cmluZywgc3RyaW5nLCBudW1iZXInOiBmdW5jdGlvbiBzdHJpbmdTdHJpbmdOdW1iZXIoZXhwciwgeCwgb3JkZXIpIHtcbiAgICAgIHZhciBkO1xuXG4gICAgICBpZiAob3JkZXIgPT09IDEpIHtcbiAgICAgICAgZCA9ICd7ZFxcXFxvdmVyIGQnICsgeCArICd9JztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGQgPSAne2ReeycgKyBvcmRlciArICd9XFxcXG92ZXIgZCcgKyB4ICsgJ157JyArIG9yZGVyICsgJ319JztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGQgKyBcIlxcXFxsZWZ0W1wiLmNvbmNhdChleHByLCBcIlxcXFxyaWdodF1cIik7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIERvZXMgYSBkZXB0aC1maXJzdCBzZWFyY2ggb24gdGhlIGV4cHJlc3Npb24gdHJlZSB0byBpZGVudGlmeSB3aGF0IE5vZGVzXG4gICAqIGFyZSBjb25zdGFudHMgKGUuZy4gMiArIDIpLCBhbmQgc3RvcmVzIHRoZSBvbmVzIHRoYXQgYXJlIGNvbnN0YW50cyBpblxuICAgKiBjb25zdE5vZGVzLiBDbGFzc2lmaWNhdGlvbiBpcyBkb25lIGFzIGZvbGxvd3M6XG4gICAqXG4gICAqICAgMS4gQ29uc3RhbnROb2RlcyBhcmUgY29uc3RhbnRzLlxuICAgKiAgIDIuIElmIHRoZXJlIGV4aXN0cyBhIFN5bWJvbE5vZGUsIG9mIHdoaWNoIHdlIGFyZSBkaWZmZXJlbnRpYXRpbmcgb3ZlcixcbiAgICogICAgICBpbiB0aGUgc3VidHJlZSBpdCBpcyBub3QgY29uc3RhbnQuXG4gICAqXG4gICAqIEBwYXJhbSAge09iamVjdH0gY29uc3ROb2RlcyAgSG9sZHMgdGhlIG5vZGVzIHRoYXQgYXJlIGNvbnN0YW50XG4gICAqIEBwYXJhbSAge0NvbnN0YW50Tm9kZSB8IFN5bWJvbE5vZGUgfCBQYXJlbnRoZXNpc05vZGUgfCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGV9IG5vZGVcbiAgICogQHBhcmFtICB7c3RyaW5nfSB2YXJOYW1lICAgICBWYXJpYWJsZSB0aGF0IHdlIGFyZSBkaWZmZXJlbnRpYXRpbmdcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gIGlmIG5vZGUgaXMgY29uc3RhbnRcbiAgICovXG4gIC8vIFRPRE86IGNhbiB3ZSByZXdyaXRlIGNvbnN0VGFnIGludG8gYSBwdXJlIGZ1bmN0aW9uP1xuXG5cbiAgdmFyIGNvbnN0VGFnID0gdHlwZWQoJ2NvbnN0VGFnJywge1xuICAgICdPYmplY3QsIENvbnN0YW50Tm9kZSwgc3RyaW5nJzogZnVuY3Rpb24gT2JqZWN0Q29uc3RhbnROb2RlU3RyaW5nKGNvbnN0Tm9kZXMsIG5vZGUpIHtcbiAgICAgIGNvbnN0Tm9kZXNbbm9kZV0gPSB0cnVlO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICAnT2JqZWN0LCBTeW1ib2xOb2RlLCBzdHJpbmcnOiBmdW5jdGlvbiBPYmplY3RTeW1ib2xOb2RlU3RyaW5nKGNvbnN0Tm9kZXMsIG5vZGUsIHZhck5hbWUpIHtcbiAgICAgIC8vIFRyZWF0IG90aGVyIHZhcmlhYmxlcyBsaWtlIGNvbnN0YW50cy4gRm9yIHJlYXNvbmluZywgc2VlOlxuICAgICAgLy8gICBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QYXJ0aWFsX2Rlcml2YXRpdmVcbiAgICAgIGlmIChub2RlLm5hbWUgIT09IHZhck5hbWUpIHtcbiAgICAgICAgY29uc3ROb2Rlc1tub2RlXSA9IHRydWU7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICAnT2JqZWN0LCBQYXJlbnRoZXNpc05vZGUsIHN0cmluZyc6IGZ1bmN0aW9uIE9iamVjdFBhcmVudGhlc2lzTm9kZVN0cmluZyhjb25zdE5vZGVzLCBub2RlLCB2YXJOYW1lKSB7XG4gICAgICByZXR1cm4gY29uc3RUYWcoY29uc3ROb2Rlcywgbm9kZS5jb250ZW50LCB2YXJOYW1lKTtcbiAgICB9LFxuICAgICdPYmplY3QsIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUsIHN0cmluZyc6IGZ1bmN0aW9uIE9iamVjdEZ1bmN0aW9uQXNzaWdubWVudE5vZGVTdHJpbmcoY29uc3ROb2Rlcywgbm9kZSwgdmFyTmFtZSkge1xuICAgICAgaWYgKG5vZGUucGFyYW1zLmluZGV4T2YodmFyTmFtZSkgPT09IC0xKSB7XG4gICAgICAgIGNvbnN0Tm9kZXNbbm9kZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnN0VGFnKGNvbnN0Tm9kZXMsIG5vZGUuZXhwciwgdmFyTmFtZSk7XG4gICAgfSxcbiAgICAnT2JqZWN0LCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGUsIHN0cmluZyc6IGZ1bmN0aW9uIE9iamVjdEZ1bmN0aW9uTm9kZU9wZXJhdG9yTm9kZVN0cmluZyhjb25zdE5vZGVzLCBub2RlLCB2YXJOYW1lKSB7XG4gICAgICBpZiAobm9kZS5hcmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdmFyIGlzQ29uc3QgPSBjb25zdFRhZyhjb25zdE5vZGVzLCBub2RlLmFyZ3NbMF0sIHZhck5hbWUpO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgbm9kZS5hcmdzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgaXNDb25zdCA9IGNvbnN0VGFnKGNvbnN0Tm9kZXMsIG5vZGUuYXJnc1tpXSwgdmFyTmFtZSkgJiYgaXNDb25zdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0NvbnN0KSB7XG4gICAgICAgICAgY29uc3ROb2Rlc1tub2RlXSA9IHRydWU7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBBcHBsaWVzIGRpZmZlcmVudGlhdGlvbiBydWxlcy5cbiAgICpcbiAgICogQHBhcmFtICB7Q29uc3RhbnROb2RlIHwgU3ltYm9sTm9kZSB8IFBhcmVudGhlc2lzTm9kZSB8IEZ1bmN0aW9uTm9kZSB8IE9wZXJhdG9yTm9kZX0gbm9kZVxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGNvbnN0Tm9kZXMgIEhvbGRzIHRoZSBub2RlcyB0aGF0IGFyZSBjb25zdGFudFxuICAgKiBAcmV0dXJuIHtDb25zdGFudE5vZGUgfCBTeW1ib2xOb2RlIHwgUGFyZW50aGVzaXNOb2RlIHwgRnVuY3Rpb25Ob2RlIHwgT3BlcmF0b3JOb2RlfSAgICBUaGUgZGVyaXZhdGl2ZSBvZiBgZXhwcmBcbiAgICovXG5cbiAgdmFyIF9kZXJpdmF0aXZlID0gdHlwZWQoJ19kZXJpdmF0aXZlJywge1xuICAgICdDb25zdGFudE5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIENvbnN0YW50Tm9kZU9iamVjdChub2RlKSB7XG4gICAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnROb2RlKDApO1xuICAgIH0sXG4gICAgJ1N5bWJvbE5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIFN5bWJvbE5vZGVPYmplY3Qobm9kZSwgY29uc3ROb2Rlcykge1xuICAgICAgaWYgKGNvbnN0Tm9kZXNbbm9kZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnROb2RlKDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnROb2RlKDEpO1xuICAgIH0sXG4gICAgJ1BhcmVudGhlc2lzTm9kZSwgT2JqZWN0JzogZnVuY3Rpb24gUGFyZW50aGVzaXNOb2RlT2JqZWN0KG5vZGUsIGNvbnN0Tm9kZXMpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyZW50aGVzaXNOb2RlKF9kZXJpdmF0aXZlKG5vZGUuY29udGVudCwgY29uc3ROb2RlcykpO1xuICAgIH0sXG4gICAgJ0Z1bmN0aW9uQXNzaWdubWVudE5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIEZ1bmN0aW9uQXNzaWdubWVudE5vZGVPYmplY3Qobm9kZSwgY29uc3ROb2Rlcykge1xuICAgICAgaWYgKGNvbnN0Tm9kZXNbbm9kZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnROb2RlKDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX2Rlcml2YXRpdmUobm9kZS5leHByLCBjb25zdE5vZGVzKTtcbiAgICB9LFxuICAgICdGdW5jdGlvbk5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIEZ1bmN0aW9uTm9kZU9iamVjdChub2RlLCBjb25zdE5vZGVzKSB7XG4gICAgICBpZiAobm9kZS5hcmdzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICBmdW5jQXJnc0NoZWNrKG5vZGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uc3ROb2Rlc1tub2RlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVDb25zdGFudE5vZGUoMCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhcmcwID0gbm9kZS5hcmdzWzBdO1xuICAgICAgdmFyIGFyZzE7XG4gICAgICB2YXIgZGl2ID0gZmFsc2U7IC8vIGlzIG91dHB1dCBhIGZyYWN0aW9uP1xuXG4gICAgICB2YXIgbmVnYXRpdmUgPSBmYWxzZTsgLy8gaXMgb3V0cHV0IG5lZ2F0aXZlP1xuXG4gICAgICB2YXIgZnVuY0Rlcml2YXRpdmU7XG5cbiAgICAgIHN3aXRjaCAobm9kZS5uYW1lKSB7XG4gICAgICAgIGNhc2UgJ2NicnQnOlxuICAgICAgICAgIC8vIGQvZHgoY2JydCh4KSkgPSAxIC8gKDN4XigyLzMpKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW2NyZWF0ZUNvbnN0YW50Tm9kZSgzKSwgbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbYXJnMCwgbmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbY3JlYXRlQ29uc3RhbnROb2RlKDIpLCBjcmVhdGVDb25zdGFudE5vZGUoMyldKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnc3FydCc6XG4gICAgICAgIGNhc2UgJ250aFJvb3QnOlxuICAgICAgICAgIC8vIGQvZHgoc3FydCh4KSkgPSAxIC8gKDIqc3FydCh4KSlcbiAgICAgICAgICBpZiAobm9kZS5hcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtjcmVhdGVDb25zdGFudE5vZGUoMiksIG5ldyBGdW5jdGlvbk5vZGUoJ3NxcnQnLCBbYXJnMF0pXSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChub2RlLmFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAvLyBSZWFycmFuZ2UgZnJvbSBudGhSb290KHgsIGEpIC0+IHheKDEvYSlcbiAgICAgICAgICAgIGFyZzEgPSBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtjcmVhdGVDb25zdGFudE5vZGUoMSksIG5vZGUuYXJnc1sxXV0pOyAvLyBJcyBhIHZhcmlhYmxlP1xuXG4gICAgICAgICAgICBjb25zdE5vZGVzW2FyZzFdID0gY29uc3ROb2Rlc1tub2RlLmFyZ3NbMV1dO1xuICAgICAgICAgICAgcmV0dXJuIF9kZXJpdmF0aXZlKG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAsIGFyZzFdKSwgY29uc3ROb2Rlcyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnbG9nMTAnOlxuICAgICAgICAgIGFyZzEgPSBjcmVhdGVDb25zdGFudE5vZGUoMTApO1xuXG4gICAgICAgIC8qIGZhbGwgdGhyb3VnaCEgKi9cblxuICAgICAgICBjYXNlICdsb2cnOlxuICAgICAgICAgIGlmICghYXJnMSAmJiBub2RlLmFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAvLyBkL2R4KGxvZyh4KSkgPSAxIC8geFxuICAgICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBhcmcwLmNsb25lKCk7XG4gICAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5hcmdzLmxlbmd0aCA9PT0gMSAmJiBhcmcxIHx8IG5vZGUuYXJncy5sZW5ndGggPT09IDIgJiYgY29uc3ROb2Rlc1tub2RlLmFyZ3NbMV1dICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIGQvZHgobG9nKHgsIGMpKSA9IDEgLyAoeCpsbihjKSlcbiAgICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFthcmcwLmNsb25lKCksIG5ldyBGdW5jdGlvbk5vZGUoJ2xvZycsIFthcmcxIHx8IG5vZGUuYXJnc1sxXV0pXSk7XG4gICAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5hcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgLy8gZC9keChsb2coZih4KSwgZyh4KSkpID0gZC9keChsb2coZih4KSkgLyBsb2coZyh4KSkpXG4gICAgICAgICAgICByZXR1cm4gX2Rlcml2YXRpdmUobmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbbmV3IEZ1bmN0aW9uTm9kZSgnbG9nJywgW2FyZzBdKSwgbmV3IEZ1bmN0aW9uTm9kZSgnbG9nJywgW25vZGUuYXJnc1sxXV0pXSksIGNvbnN0Tm9kZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3Bvdyc6XG4gICAgICAgICAgY29uc3ROb2Rlc1thcmcxXSA9IGNvbnN0Tm9kZXNbbm9kZS5hcmdzWzFdXTsgLy8gUGFzcyB0byBwb3cgb3BlcmF0b3Igbm9kZSBwYXJzZXJcblxuICAgICAgICAgIHJldHVybiBfZGVyaXZhdGl2ZShuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLCBub2RlLmFyZ3NbMV1dKSwgY29uc3ROb2Rlcyk7XG5cbiAgICAgICAgY2FzZSAnZXhwJzpcbiAgICAgICAgICAvLyBkL2R4KGVeeCkgPSBlXnhcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBGdW5jdGlvbk5vZGUoJ2V4cCcsIFthcmcwLmNsb25lKCldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdzaW4nOlxuICAgICAgICAgIC8vIGQvZHgoc2luKHgpKSA9IGNvcyh4KVxuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IEZ1bmN0aW9uTm9kZSgnY29zJywgW2FyZzAuY2xvbmUoKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Nvcyc6XG4gICAgICAgICAgLy8gZC9keChjb3MoeCkpID0gLXNpbih4KVxuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnLScsICd1bmFyeU1pbnVzJywgW25ldyBGdW5jdGlvbk5vZGUoJ3NpbicsIFthcmcwLmNsb25lKCldKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3Rhbic6XG4gICAgICAgICAgLy8gZC9keCh0YW4oeCkpID0gc2VjKHgpXjJcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW25ldyBGdW5jdGlvbk5vZGUoJ3NlYycsIFthcmcwLmNsb25lKCldKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnc2VjJzpcbiAgICAgICAgICAvLyBkL2R4KHNlYyh4KSkgPSBzZWMoeCl0YW4oeClcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbm9kZSwgbmV3IEZ1bmN0aW9uTm9kZSgndGFuJywgW2FyZzAuY2xvbmUoKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnY3NjJzpcbiAgICAgICAgICAvLyBkL2R4KGNzYyh4KSkgPSAtY3NjKHgpY290KHgpXG4gICAgICAgICAgbmVnYXRpdmUgPSB0cnVlO1xuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtub2RlLCBuZXcgRnVuY3Rpb25Ob2RlKCdjb3QnLCBbYXJnMC5jbG9uZSgpXSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdjb3QnOlxuICAgICAgICAgIC8vIGQvZHgoY290KHgpKSA9IC1jc2MoeCleMlxuICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW25ldyBGdW5jdGlvbk5vZGUoJ2NzYycsIFthcmcwLmNsb25lKCldKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYXNpbic6XG4gICAgICAgICAgLy8gZC9keChhc2luKHgpKSA9IDEgLyBzcXJ0KDEgLSB4XjIpXG4gICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBGdW5jdGlvbk5vZGUoJ3NxcnQnLCBbbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFtjcmVhdGVDb25zdGFudE5vZGUoMSksIG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSldKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Fjb3MnOlxuICAgICAgICAgIC8vIGQvZHgoYWNvcyh4KSkgPSAtMSAvIHNxcnQoMSAtIHheMilcbiAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBGdW5jdGlvbk5vZGUoJ3NxcnQnLCBbbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFtjcmVhdGVDb25zdGFudE5vZGUoMSksIG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSldKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2F0YW4nOlxuICAgICAgICAgIC8vIGQvZHgoYXRhbih4KSkgPSAxIC8gKHheMiArIDEpXG4gICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJysnLCAnYWRkJywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgxKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2FzZWMnOlxuICAgICAgICAgIC8vIGQvZHgoYXNlYyh4KSkgPSAxIC8gKHx4fCpzcXJ0KHheMiAtIDEpKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25ldyBGdW5jdGlvbk5vZGUoJ2FicycsIFthcmcwLmNsb25lKCldKSwgbmV3IEZ1bmN0aW9uTm9kZSgnc3FydCcsIFtuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3N1YnRyYWN0JywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgxKV0pXSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhY3NjJzpcbiAgICAgICAgICAvLyBkL2R4KGFjc2MoeCkpID0gLTEgLyAofHh8KnNxcnQoeF4yIC0gMSkpXG4gICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25ldyBGdW5jdGlvbk5vZGUoJ2FicycsIFthcmcwLmNsb25lKCldKSwgbmV3IEZ1bmN0aW9uTm9kZSgnc3FydCcsIFtuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3N1YnRyYWN0JywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgxKV0pXSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhY290JzpcbiAgICAgICAgICAvLyBkL2R4KGFjb3QoeCkpID0gLTEgLyAoeF4yICsgMSlcbiAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJysnLCAnYWRkJywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgxKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3NpbmgnOlxuICAgICAgICAgIC8vIGQvZHgoc2luaCh4KSkgPSBjb3NoKHgpXG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgRnVuY3Rpb25Ob2RlKCdjb3NoJywgW2FyZzAuY2xvbmUoKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Nvc2gnOlxuICAgICAgICAgIC8vIGQvZHgoY29zaCh4KSkgPSBzaW5oKHgpXG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgRnVuY3Rpb25Ob2RlKCdzaW5oJywgW2FyZzAuY2xvbmUoKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3RhbmgnOlxuICAgICAgICAgIC8vIGQvZHgodGFuaCh4KSkgPSBzZWNoKHgpXjJcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW25ldyBGdW5jdGlvbk5vZGUoJ3NlY2gnLCBbYXJnMC5jbG9uZSgpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3NlY2gnOlxuICAgICAgICAgIC8vIGQvZHgoc2VjaCh4KSkgPSAtc2VjaCh4KXRhbmgoeClcbiAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25vZGUsIG5ldyBGdW5jdGlvbk5vZGUoJ3RhbmgnLCBbYXJnMC5jbG9uZSgpXSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdjc2NoJzpcbiAgICAgICAgICAvLyBkL2R4KGNzY2goeCkpID0gLWNzY2goeCljb3RoKHgpXG4gICAgICAgICAgbmVnYXRpdmUgPSB0cnVlO1xuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtub2RlLCBuZXcgRnVuY3Rpb25Ob2RlKCdjb3RoJywgW2FyZzAuY2xvbmUoKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnY290aCc6XG4gICAgICAgICAgLy8gZC9keChjb3RoKHgpKSA9IC1jc2NoKHgpXjJcbiAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFtuZXcgRnVuY3Rpb25Ob2RlKCdjc2NoJywgW2FyZzAuY2xvbmUoKV0pLCBjcmVhdGVDb25zdGFudE5vZGUoMildKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhc2luaCc6XG4gICAgICAgICAgLy8gZC9keChhc2luaCh4KSkgPSAxIC8gc3FydCh4XjIgKyAxKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgRnVuY3Rpb25Ob2RlKCdzcXJ0JywgW25ldyBPcGVyYXRvck5vZGUoJysnLCAnYWRkJywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgxKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYWNvc2gnOlxuICAgICAgICAgIC8vIGQvZHgoYWNvc2goeCkpID0gMSAvIHNxcnQoeF4yIC0gMSk7IFhYWCBwb3RlbnRpYWxseSBvbmx5IGZvciB4ID49IDEgKHRoZSByZWFsIHNwZWN0cnVtKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgRnVuY3Rpb25Ob2RlKCdzcXJ0JywgW25ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbYXJnMC5jbG9uZSgpLCBjcmVhdGVDb25zdGFudE5vZGUoMildKSwgY3JlYXRlQ29uc3RhbnROb2RlKDEpXSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhdGFuaCc6XG4gICAgICAgICAgLy8gZC9keChhdGFuaCh4KSkgPSAxIC8gKDEgLSB4XjIpXG4gICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbY3JlYXRlQ29uc3RhbnROb2RlKDEpLCBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYXNlY2gnOlxuICAgICAgICAgIC8vIGQvZHgoYXNlY2goeCkpID0gLTEgLyAoeCpzcXJ0KDEgLSB4XjIpKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgbmVnYXRpdmUgPSB0cnVlO1xuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFthcmcwLmNsb25lKCksIG5ldyBGdW5jdGlvbk5vZGUoJ3NxcnQnLCBbbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFtjcmVhdGVDb25zdGFudE5vZGUoMSksIG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSldKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYWNzY2gnOlxuICAgICAgICAgIC8vIGQvZHgoYWNzY2goeCkpID0gLTEgLyAofHh8KnNxcnQoeF4yICsgMSkpXG4gICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25ldyBGdW5jdGlvbk5vZGUoJ2FicycsIFthcmcwLmNsb25lKCldKSwgbmV3IEZ1bmN0aW9uTm9kZSgnc3FydCcsIFtuZXcgT3BlcmF0b3JOb2RlKCcrJywgJ2FkZCcsIFtuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pLCBjcmVhdGVDb25zdGFudE5vZGUoMSldKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYWNvdGgnOlxuICAgICAgICAgIC8vIGQvZHgoYWNvdGgoeCkpID0gLTEgLyAoMSAtIHheMilcbiAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbY3JlYXRlQ29uc3RhbnROb2RlKDEpLCBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYWJzJzpcbiAgICAgICAgICAvLyBkL2R4KGFicyh4KSkgPSBhYnMoeCkveFxuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbbmV3IEZ1bmN0aW9uTm9kZShuZXcgU3ltYm9sTm9kZSgnYWJzJyksIFthcmcwLmNsb25lKCldKSwgYXJnMC5jbG9uZSgpXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZ2FtbWEnOiAvLyBOZWVkcyBkaWdhbW1hIGZ1bmN0aW9uLCBkL2R4KGdhbW1hKHgpKSA9IGdhbW1hKHgpZGlnYW1tYSh4KVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGdW5jdGlvbiBcIicgKyBub2RlLm5hbWUgKyAnXCIgaXMgbm90IHN1cHBvcnRlZCBieSBkZXJpdmF0aXZlLCBvciBhIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMgaXMgcGFzc2VkJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBvcCwgZnVuYztcblxuICAgICAgaWYgKGRpdikge1xuICAgICAgICBvcCA9ICcvJztcbiAgICAgICAgZnVuYyA9ICdkaXZpZGUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3AgPSAnKic7XG4gICAgICAgIGZ1bmMgPSAnbXVsdGlwbHknO1xuICAgICAgfVxuICAgICAgLyogQXBwbHkgY2hhaW4gcnVsZSB0byBhbGwgZnVuY3Rpb25zOlxuICAgICAgICAgRih4KSAgPSBmKGcoeCkpXG4gICAgICAgICBGJyh4KSA9IGcnKHgpKmYnKGcoeCkpICovXG5cblxuICAgICAgdmFyIGNoYWluRGVyaXZhdGl2ZSA9IF9kZXJpdmF0aXZlKGFyZzAsIGNvbnN0Tm9kZXMpO1xuXG4gICAgICBpZiAobmVnYXRpdmUpIHtcbiAgICAgICAgY2hhaW5EZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnLScsICd1bmFyeU1pbnVzJywgW2NoYWluRGVyaXZhdGl2ZV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZShvcCwgZnVuYywgW2NoYWluRGVyaXZhdGl2ZSwgZnVuY0Rlcml2YXRpdmVdKTtcbiAgICB9LFxuICAgICdPcGVyYXRvck5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIE9wZXJhdG9yTm9kZU9iamVjdChub2RlLCBjb25zdE5vZGVzKSB7XG4gICAgICBpZiAoY29uc3ROb2Rlc1tub2RlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVDb25zdGFudE5vZGUoMCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLm9wID09PSAnKycpIHtcbiAgICAgICAgLy8gZC9keChzdW0oZih4KSkgPSBzdW0oZicoeCkpXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIG5vZGUuYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgIHJldHVybiBfZGVyaXZhdGl2ZShhcmcsIGNvbnN0Tm9kZXMpO1xuICAgICAgICB9KSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLm9wID09PSAnLScpIHtcbiAgICAgICAgLy8gZC9keCgrLy1mKHgpKSA9ICsvLWYnKHgpXG4gICAgICAgIGlmIChub2RlLmlzVW5hcnkoKSkge1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFtfZGVyaXZhdGl2ZShub2RlLmFyZ3NbMF0sIGNvbnN0Tm9kZXMpXSk7XG4gICAgICAgIH0gLy8gTGluZWFyaXR5IG9mIGRpZmZlcmVudGlhdGlvbiwgZC9keChmKHgpICsvLSBnKHgpKSA9IGYnKHgpICsvLSBnJyh4KVxuXG5cbiAgICAgICAgaWYgKG5vZGUuaXNCaW5hcnkoKSkge1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFtfZGVyaXZhdGl2ZShub2RlLmFyZ3NbMF0sIGNvbnN0Tm9kZXMpLCBfZGVyaXZhdGl2ZShub2RlLmFyZ3NbMV0sIGNvbnN0Tm9kZXMpXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUub3AgPT09ICcqJykge1xuICAgICAgICAvLyBkL2R4KGMqZih4KSkgPSBjKmYnKHgpXG4gICAgICAgIHZhciBjb25zdGFudFRlcm1zID0gbm9kZS5hcmdzLmZpbHRlcihmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnN0Tm9kZXNbYXJnXSAhPT0gdW5kZWZpbmVkO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoY29uc3RhbnRUZXJtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdmFyIG5vbkNvbnN0YW50VGVybXMgPSBub2RlLmFyZ3MuZmlsdGVyKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25zdE5vZGVzW2FyZ10gPT09IHVuZGVmaW5lZDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB2YXIgbm9uQ29uc3RhbnROb2RlID0gbm9uQ29uc3RhbnRUZXJtcy5sZW5ndGggPT09IDEgPyBub25Db25zdGFudFRlcm1zWzBdIDogbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIG5vbkNvbnN0YW50VGVybXMpO1xuICAgICAgICAgIHZhciBuZXdBcmdzID0gY29uc3RhbnRUZXJtcy5jb25jYXQoX2Rlcml2YXRpdmUobm9uQ29uc3RhbnROb2RlLCBjb25zdE5vZGVzKSk7XG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBuZXdBcmdzKTtcbiAgICAgICAgfSAvLyBQcm9kdWN0IFJ1bGUsIGQvZHgoZih4KSpnKHgpKSA9IGYnKHgpKmcoeCkgKyBmKHgpKmcnKHgpXG5cblxuICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZSgnKycsICdhZGQnLCBub2RlLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmdPdXRlcikge1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5Jywgbm9kZS5hcmdzLm1hcChmdW5jdGlvbiAoYXJnSW5uZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmdJbm5lciA9PT0gYXJnT3V0ZXIgPyBfZGVyaXZhdGl2ZShhcmdJbm5lciwgY29uc3ROb2RlcykgOiBhcmdJbm5lci5jbG9uZSgpO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5vcCA9PT0gJy8nICYmIG5vZGUuaXNCaW5hcnkoKSkge1xuICAgICAgICB2YXIgYXJnMCA9IG5vZGUuYXJnc1swXTtcbiAgICAgICAgdmFyIGFyZzEgPSBub2RlLmFyZ3NbMV07IC8vIGQvZHgoZih4KSAvIGMpID0gZicoeCkgLyBjXG5cbiAgICAgICAgaWYgKGNvbnN0Tm9kZXNbYXJnMV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtfZGVyaXZhdGl2ZShhcmcwLCBjb25zdE5vZGVzKSwgYXJnMV0pO1xuICAgICAgICB9IC8vIFJlY2lwcm9jYWwgUnVsZSwgZC9keChjIC8gZih4KSkgPSAtYyhmJyh4KS9mKHgpXjIpXG5cblxuICAgICAgICBpZiAoY29uc3ROb2Rlc1thcmcwXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbmV3IE9wZXJhdG9yTm9kZSgnLScsICd1bmFyeU1pbnVzJywgW2FyZzBdKSwgbmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbX2Rlcml2YXRpdmUoYXJnMSwgY29uc3ROb2RlcyksIG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzEuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSldKV0pO1xuICAgICAgICB9IC8vIFF1b3RpZW50IHJ1bGUsIGQvZHgoZih4KSAvIGcoeCkpID0gKGYnKHgpZyh4KSAtIGYoeClnJyh4KSkgLyBnKHgpXjJcblxuXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3N1YnRyYWN0JywgW25ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbX2Rlcml2YXRpdmUoYXJnMCwgY29uc3ROb2RlcyksIGFyZzEuY2xvbmUoKV0pLCBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW2FyZzAuY2xvbmUoKSwgX2Rlcml2YXRpdmUoYXJnMSwgY29uc3ROb2RlcyldKV0pLCBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcxLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pXSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLm9wID09PSAnXicgJiYgbm9kZS5pc0JpbmFyeSgpKSB7XG4gICAgICAgIHZhciBfYXJnID0gbm9kZS5hcmdzWzBdO1xuICAgICAgICB2YXIgX2FyZzIgPSBub2RlLmFyZ3NbMV07XG5cbiAgICAgICAgaWYgKGNvbnN0Tm9kZXNbX2FyZ10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIElmIGlzIHNlY3JldGx5IGNvbnN0YW50OyAwXmYoeCkgPSAxIChpbiBKUyksIDFeZih4KSA9IDFcbiAgICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoX2FyZykgJiYgKGlzWmVybyhfYXJnLnZhbHVlKSB8fCBlcXVhbChfYXJnLnZhbHVlLCAxKSkpIHtcbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVDb25zdGFudE5vZGUoMCk7XG4gICAgICAgICAgfSAvLyBkL2R4KGNeZih4KSkgPSBjXmYoeCkqbG4oYykqZicoeClcblxuXG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbm9kZSwgbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtuZXcgRnVuY3Rpb25Ob2RlKCdsb2cnLCBbX2FyZy5jbG9uZSgpXSksIF9kZXJpdmF0aXZlKF9hcmcyLmNsb25lKCksIGNvbnN0Tm9kZXMpXSldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb25zdE5vZGVzW19hcmcyXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKCgwLCBfaXMuaXNDb25zdGFudE5vZGUpKF9hcmcyKSkge1xuICAgICAgICAgICAgLy8gSWYgaXMgc2VjcmV0bHkgY29uc3RhbnQ7IGYoeCleMCA9IDEgLT4gZC9keCgxKSA9IDBcbiAgICAgICAgICAgIGlmIChpc1plcm8oX2FyZzIudmFsdWUpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjcmVhdGVDb25zdGFudE5vZGUoMCk7XG4gICAgICAgICAgICB9IC8vIElnbm9yZSBleHBvbmVudDsgZih4KV4xID0gZih4KVxuXG5cbiAgICAgICAgICAgIGlmIChlcXVhbChfYXJnMi52YWx1ZSwgMSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIF9kZXJpdmF0aXZlKF9hcmcsIGNvbnN0Tm9kZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gRWxlbWVudGFyeSBQb3dlciBSdWxlLCBkL2R4KGYoeCleYykgPSBjKmYnKHgpKmYoeCleKGMtMSlcblxuXG4gICAgICAgICAgdmFyIHBvd01pbnVzT25lID0gbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbX2FyZy5jbG9uZSgpLCBuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3N1YnRyYWN0JywgW19hcmcyLCBjcmVhdGVDb25zdGFudE5vZGUoMSldKV0pO1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW19hcmcyLmNsb25lKCksIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbX2Rlcml2YXRpdmUoX2FyZywgY29uc3ROb2RlcyksIHBvd01pbnVzT25lXSldKTtcbiAgICAgICAgfSAvLyBGdW5jdGlvbmFsIFBvd2VyIFJ1bGUsIGQvZHgoZl5nKSA9IGZeZypbZicqKGcvZikgKyBnJ2xuKGYpXVxuXG5cbiAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbX2FyZy5jbG9uZSgpLCBfYXJnMi5jbG9uZSgpXSksIG5ldyBPcGVyYXRvck5vZGUoJysnLCAnYWRkJywgW25ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbX2Rlcml2YXRpdmUoX2FyZywgY29uc3ROb2RlcyksIG5ldyBPcGVyYXRvck5vZGUoJy8nLCAnZGl2aWRlJywgW19hcmcyLmNsb25lKCksIF9hcmcuY2xvbmUoKV0pXSksIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbX2Rlcml2YXRpdmUoX2FyZzIsIGNvbnN0Tm9kZXMpLCBuZXcgRnVuY3Rpb25Ob2RlKCdsb2cnLCBbX2FyZy5jbG9uZSgpXSldKV0pXSk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcignT3BlcmF0b3IgXCInICsgbm9kZS5vcCArICdcIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IGRlcml2YXRpdmUsIG9yIGEgd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBpcyBwYXNzZWQnKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogRW5zdXJlcyB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3IgYSBmdW5jdGlvbiBhcmUgY29ycmVjdCxcbiAgICogYW5kIHdpbGwgdGhyb3cgYW4gZXJyb3Igb3RoZXJ3aXNlLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uTm9kZX0gbm9kZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGZ1bmNBcmdzQ2hlY2sobm9kZSkge1xuICAgIC8vIFRPRE8gYWRkIG1pbiwgbWF4IGV0Y1xuICAgIGlmICgobm9kZS5uYW1lID09PSAnbG9nJyB8fCBub2RlLm5hbWUgPT09ICdudGhSb290JyB8fCBub2RlLm5hbWUgPT09ICdwb3cnKSAmJiBub2RlLmFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBUaGVyZSBzaG91bGQgYmUgYW4gaW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMgaWYgd2UgcmVhY2ggaGVyZVxuICAgIC8vIENoYW5nZSBhbGwgYXJncyB0byBjb25zdGFudHMgdG8gYXZvaWQgdW5pZGVudGlmaWVkXG4gICAgLy8gc3ltYm9sIGVycm9yIHdoZW4gY29tcGlsaW5nIGZ1bmN0aW9uXG5cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5hcmdzLmxlbmd0aDsgKytpKSB7XG4gICAgICBub2RlLmFyZ3NbaV0gPSBjcmVhdGVDb25zdGFudE5vZGUoMCk7XG4gICAgfVxuXG4gICAgbm9kZS5jb21waWxlKCkuZXZhbHVhdGUoKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIFR5cGVFcnJvciwgYnV0IG5vbmUgZm91bmQnKTtcbiAgfVxuICAvKipcbiAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGNvbnN0YW50IG5vZGUgd2l0aCBhIHNwZWNpZmljIHR5cGVcbiAgICogKG51bWJlciwgQmlnTnVtYmVyLCBGcmFjdGlvbilcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbdmFsdWVUeXBlXVxuICAgKiBAcmV0dXJuIHtDb25zdGFudE5vZGV9XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gY3JlYXRlQ29uc3RhbnROb2RlKHZhbHVlLCB2YWx1ZVR5cGUpIHtcbiAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShudW1lcmljKHZhbHVlLCB2YWx1ZVR5cGUgfHwgY29uZmlnLm51bWJlcikpO1xuICB9XG5cbiAgcmV0dXJuIGRlcml2YXRpdmU7XG59KTtcbmV4cG9ydHMuY3JlYXRlRGVyaXZhdGl2ZSA9IGNyZWF0ZURlcml2YXRpdmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhdGlvbmFsaXplID0gdm9pZCAwO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3NpbXBsaWZ5Q29uc3RhbnQgPSByZXF1aXJlKFwiLi9zaW1wbGlmeS9zaW1wbGlmeUNvbnN0YW50XCIpO1xuXG52YXIgX3NpbXBsaWZ5Q29yZSA9IHJlcXVpcmUoXCIuL3NpbXBsaWZ5L3NpbXBsaWZ5Q29yZVwiKTtcblxudmFyIG5hbWUgPSAncmF0aW9uYWxpemUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ3R5cGVkJywgJ2VxdWFsJywgJ2lzWmVybycsICdhZGQnLCAnc3VidHJhY3QnLCAnbXVsdGlwbHknLCAnZGl2aWRlJywgJ3BvdycsICdwYXJzZScsICdzaW1wbGlmeScsICc/YmlnbnVtYmVyJywgJz9mcmFjdGlvbicsICdtYXRoV2l0aFRyYW5zZm9ybScsICdDb25zdGFudE5vZGUnLCAnT3BlcmF0b3JOb2RlJywgJ0Z1bmN0aW9uTm9kZScsICdTeW1ib2xOb2RlJywgJ1BhcmVudGhlc2lzTm9kZSddO1xudmFyIGNyZWF0ZVJhdGlvbmFsaXplID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgZXF1YWwgPSBfcmVmLmVxdWFsLFxuICAgICAgaXNaZXJvID0gX3JlZi5pc1plcm8sXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGRpdmlkZSA9IF9yZWYuZGl2aWRlLFxuICAgICAgcG93ID0gX3JlZi5wb3csXG4gICAgICBwYXJzZSA9IF9yZWYucGFyc2UsXG4gICAgICBzaW1wbGlmeSA9IF9yZWYuc2ltcGxpZnksXG4gICAgICBmcmFjdGlvbiA9IF9yZWYuZnJhY3Rpb24sXG4gICAgICBiaWdudW1iZXIgPSBfcmVmLmJpZ251bWJlcixcbiAgICAgIG1hdGhXaXRoVHJhbnNmb3JtID0gX3JlZi5tYXRoV2l0aFRyYW5zZm9ybSxcbiAgICAgIENvbnN0YW50Tm9kZSA9IF9yZWYuQ29uc3RhbnROb2RlLFxuICAgICAgT3BlcmF0b3JOb2RlID0gX3JlZi5PcGVyYXRvck5vZGUsXG4gICAgICBGdW5jdGlvbk5vZGUgPSBfcmVmLkZ1bmN0aW9uTm9kZSxcbiAgICAgIFN5bWJvbE5vZGUgPSBfcmVmLlN5bWJvbE5vZGUsXG4gICAgICBQYXJlbnRoZXNpc05vZGUgPSBfcmVmLlBhcmVudGhlc2lzTm9kZTtcbiAgdmFyIHNpbXBsaWZ5Q29uc3RhbnQgPSAoMCwgX3NpbXBsaWZ5Q29uc3RhbnQuY3JlYXRlU2ltcGxpZnlDb25zdGFudCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBjb25maWc6IGNvbmZpZyxcbiAgICBtYXRoV2l0aFRyYW5zZm9ybTogbWF0aFdpdGhUcmFuc2Zvcm0sXG4gICAgZnJhY3Rpb246IGZyYWN0aW9uLFxuICAgIGJpZ251bWJlcjogYmlnbnVtYmVyLFxuICAgIENvbnN0YW50Tm9kZTogQ29uc3RhbnROb2RlLFxuICAgIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICAgIEZ1bmN0aW9uTm9kZTogRnVuY3Rpb25Ob2RlLFxuICAgIFN5bWJvbE5vZGU6IFN5bWJvbE5vZGVcbiAgfSk7XG4gIHZhciBzaW1wbGlmeUNvcmUgPSAoMCwgX3NpbXBsaWZ5Q29yZS5jcmVhdGVTaW1wbGlmeUNvcmUpKHtcbiAgICBlcXVhbDogZXF1YWwsXG4gICAgaXNaZXJvOiBpc1plcm8sXG4gICAgYWRkOiBhZGQsXG4gICAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICBkaXZpZGU6IGRpdmlkZSxcbiAgICBwb3c6IHBvdyxcbiAgICBDb25zdGFudE5vZGU6IENvbnN0YW50Tm9kZSxcbiAgICBPcGVyYXRvck5vZGU6IE9wZXJhdG9yTm9kZSxcbiAgICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZVxuICB9KTtcbiAgLyoqXG4gICAqIFRyYW5zZm9ybSBhIHJhdGlvbmFsaXphYmxlIGV4cHJlc3Npb24gaW4gYSByYXRpb25hbCBmcmFjdGlvbi5cbiAgICogSWYgcmF0aW9uYWwgZnJhY3Rpb24gaXMgb25lIHZhcmlhYmxlIHBvbHlub21pYWwgdGhlbiBjb252ZXJ0c1xuICAgKiB0aGUgbnVtZXJhdG9yIGFuZCBkZW5vbWluYXRvciBpbiBjYW5vbmljYWwgZm9ybSwgd2l0aCBkZWNyZWFzaW5nXG4gICAqIGV4cG9uZW50cywgcmV0dXJuaW5nIHRoZSBjb2VmZmljaWVudHMgb2YgbnVtZXJhdG9yLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICByYXRpb25hbGl6ZShleHByKVxuICAgKiAgICAgcmF0aW9uYWxpemUoZXhwciwgZGV0YWlsZWQpXG4gICAqICAgICByYXRpb25hbGl6ZShleHByLCBzY29wZSlcbiAgICogICAgIHJhdGlvbmFsaXplKGV4cHIsIHNjb3BlLCBkZXRhaWxlZClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnJhdGlvbmFsaXplKCdzaW4oeCkreScpXG4gICAqICAgICAgICAgICAgICAgICAgIC8vICBFcnJvcjogVGhlcmUgaXMgYW4gdW5zb2x2ZWQgZnVuY3Rpb24gY2FsbFxuICAgKiAgICAgbWF0aC5yYXRpb25hbGl6ZSgnMngveSAtIHkvKHgrMSknKVxuICAgKiAgICAgICAgICAgICAgICAgICAvLyAoMip4XjIteV4yKzIqeCkvKHgqeSt5KVxuICAgKiAgICAgbWF0aC5yYXRpb25hbGl6ZSgnKDJ4KzEpXjYnKVxuICAgKiAgICAgICAgICAgICAgICAgICAvLyA2NCp4XjYrMTkyKnheNSsyNDAqeF40KzE2MCp4XjMrNjAqeF4yKzEyKngrMVxuICAgKiAgICAgbWF0aC5yYXRpb25hbGl6ZSgnMngvKCAoMngtMSkgLyAoM3grMikgKSAtIDV4LyAoICgzeCs0KSAvICgyeF4yLTUpICkgKyAzJylcbiAgICogICAgICAgICAgICAgICAgICAgLy8gLTIwKnheNCsyOCp4XjMrMTA0KnheMis2KngtMTIpLyg2KnheMis1KngtNClcbiAgICogICAgIG1hdGgucmF0aW9uYWxpemUoJ3gvKDEteCkvKHgtMikvKHgtMykvKHgtNCkgKyAyeC8gKCAoMS0yeCkvKDItM3gpICkvICgoMy00eCkvKDQtNXgpICknKSA9XG4gICAqICAgICAgICAgICAgICAgICAgIC8vICgtMzAqeF43KzM0NCp4XjYtMTUwNip4XjUrMzIwMCp4XjQtMzQ3Mip4XjMrMTg0Nip4XjItMzgxKngpL1xuICAgKiAgICAgICAgICAgICAgICAgICAvLyAgICAgKC04KnheNis5MCp4XjUtMzgzKnheNCs3ODAqeF4zLTc5Nyp4XjIrMzkwKngtNzIpXG4gICAqXG4gICAqICAgICBtYXRoLnJhdGlvbmFsaXplKCd4K3greCt5Jyx7eToxfSkgLy8gMyp4KzFcbiAgICogICAgIG1hdGgucmF0aW9uYWxpemUoJ3greCt4K3knLHt9KSAgICAvLyAzKngreVxuICAgKlxuICAgKiAgICAgY29uc3QgcmV0ID0gbWF0aC5yYXRpb25hbGl6ZSgneCt4K3greScse30sdHJ1ZSlcbiAgICogICAgICAgICAgICAgICAgICAgLy8gcmV0LmV4cHJlc3Npb249Myp4K3ksIHJldC52YXJpYWJsZXMgPSBbXCJ4XCIsXCJ5XCJdXG4gICAqICAgICBjb25zdCByZXQgPSBtYXRoLnJhdGlvbmFsaXplKCctMis1eF4yJyx7fSx0cnVlKVxuICAgKiAgICAgICAgICAgICAgICAgICAvLyByZXQuZXhwcmVzc2lvbj01KnheMi0yLCByZXQudmFyaWFibGVzID0gW1wieFwiXSwgcmV0LmNvZWZmaWNpZW50cz1bLTIsMCw1XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHNpbXBsaWZ5XG4gICAqXG4gICAqIEBwYXJhbSAge05vZGV8c3RyaW5nfSBleHByICAgIFRoZSBleHByZXNzaW9uIHRvIGNoZWNrIGlmIGlzIGEgcG9seW5vbWlhbCBleHByZXNzaW9uXG4gICAqIEBwYXJhbSAge09iamVjdHxib29sZWFufSAgICAgIG9wdGlvbmFsIHNjb3BlIG9mIGV4cHJlc3Npb24gb3IgdHJ1ZSBmb3IgYWxyZWFkeSBldmFsdWF0ZWQgcmF0aW9uYWwgZXhwcmVzc2lvbiBhdCBpbnB1dFxuICAgKiBAcGFyYW0gIHtCb29sZWFufSAgZGV0YWlsZWQgICBvcHRpb25hbCBUcnVlIGlmIHJldHVybiBhbiBvYmplY3QsIGZhbHNlIGlmIHJldHVybiBleHByZXNzaW9uIG5vZGUgKGRlZmF1bHQpXG4gICAqXG4gICAqIEByZXR1cm4ge09iamVjdCB8IE5vZGV9ICAgIFRoZSByYXRpb25hbCBwb2x5bm9taWFsIG9mIGBleHByYCBvciBuYSBvYmplY3RcbiAgICogICAgICAgICAgICB7T2JqZWN0fVxuICAgKiAgICAgICAgICAgICAge0V4cHJlc3Npb24gTm9kZX0gZXhwcmVzc2lvbjogbm9kZSBzaW1wbGlmaWVkIGV4cHJlc3Npb25cbiAgICogICAgICAgICAgICAgIHtFeHByZXNzaW9uIE5vZGV9IG51bWVyYXRvcjogc2ltcGxpZmllZCBudW1lcmF0b3Igb2YgZXhwcmVzc2lvblxuICAgKiAgICAgICAgICAgICAge0V4cHJlc3Npb24gTm9kZSB8IGJvb2xlYW59IGRlbm9taW5hdG9yOiBzaW1wbGlmaWVkIGRlbm9taW5hdG9yIG9yIGZhbHNlIChpZiB0aGVyZSBpcyBubyBkZW5vbWluYXRvcilcbiAgICogICAgICAgICAgICAgIHtBcnJheX0gICAgICAgICAgIHZhcmlhYmxlczogIHZhcmlhYmxlIG5hbWVzXG4gICAqICAgICAgICAgICAgICB7QXJyYXl9ICAgICAgICAgICBjb2VmZmljaWVudHM6IGNvZWZmaWNpZW50cyBvZiBudW1lcmF0b3Igc29ydGVkIGJ5IGluY3JlYXNlZCBleHBvbmVudFxuICAgKiAgICAgICAgICAge0V4cHJlc3Npb24gTm9kZX0gIG5vZGUgc2ltcGxpZmllZCBleHByZXNzaW9uXG4gICAqXG4gICAqL1xuXG4gIHZhciByYXRpb25hbGl6ZSA9IHR5cGVkKG5hbWUsIHtcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhleHByKSB7XG4gICAgICByZXR1cm4gcmF0aW9uYWxpemUocGFyc2UoZXhwciksIHt9LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBib29sZWFuJzogZnVuY3Rpb24gc3RyaW5nQm9vbGVhbihleHByLCBkZXRhaWxlZCkge1xuICAgICAgcmV0dXJuIHJhdGlvbmFsaXplKHBhcnNlKGV4cHIpLCB7fSwgZGV0YWlsZWQpO1xuICAgIH0sXG4gICAgJ3N0cmluZywgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nT2JqZWN0KGV4cHIsIHNjb3BlKSB7XG4gICAgICByZXR1cm4gcmF0aW9uYWxpemUocGFyc2UoZXhwciksIHNjb3BlLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBPYmplY3QsIGJvb2xlYW4nOiBmdW5jdGlvbiBzdHJpbmdPYmplY3RCb29sZWFuKGV4cHIsIHNjb3BlLCBkZXRhaWxlZCkge1xuICAgICAgcmV0dXJuIHJhdGlvbmFsaXplKHBhcnNlKGV4cHIpLCBzY29wZSwgZGV0YWlsZWQpO1xuICAgIH0sXG4gICAgTm9kZTogZnVuY3Rpb24gTm9kZShleHByKSB7XG4gICAgICByZXR1cm4gcmF0aW9uYWxpemUoZXhwciwge30sIGZhbHNlKTtcbiAgICB9LFxuICAgICdOb2RlLCBib29sZWFuJzogZnVuY3Rpb24gTm9kZUJvb2xlYW4oZXhwciwgZGV0YWlsZWQpIHtcbiAgICAgIHJldHVybiByYXRpb25hbGl6ZShleHByLCB7fSwgZGV0YWlsZWQpO1xuICAgIH0sXG4gICAgJ05vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIE5vZGVPYmplY3QoZXhwciwgc2NvcGUpIHtcbiAgICAgIHJldHVybiByYXRpb25hbGl6ZShleHByLCBzY29wZSwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ05vZGUsIE9iamVjdCwgYm9vbGVhbic6IGZ1bmN0aW9uIE5vZGVPYmplY3RCb29sZWFuKGV4cHIsIHNjb3BlLCBkZXRhaWxlZCkge1xuICAgICAgdmFyIHNldFJ1bGVzID0gcnVsZXNSYXRpb25hbGl6ZSgpOyAvLyBSdWxlcyBmb3IgY2hhbmdlIHBvbHlub21pYWwgaW4gbmVhciBjYW5vbmljYWwgZm9ybVxuXG4gICAgICB2YXIgcG9seVJldCA9IHBvbHlub21pYWwoZXhwciwgc2NvcGUsIHRydWUsIHNldFJ1bGVzLmZpcnN0UnVsZXMpOyAvLyBDaGVjayBpZiBleHByZXNzaW9uIGlzIGEgcmF0aW9uYWxpemFibGUgcG9seW5vbWlhbFxuXG4gICAgICB2YXIgblZhcnMgPSBwb2x5UmV0LnZhcmlhYmxlcy5sZW5ndGg7XG4gICAgICBleHByID0gcG9seVJldC5leHByZXNzaW9uO1xuXG4gICAgICBpZiAoblZhcnMgPj0gMSkge1xuICAgICAgICAvLyBJZiBleHByZXNzaW9uIGluIG5vdCBhIGNvbnN0YW50XG4gICAgICAgIGV4cHIgPSBleHBhbmRQb3dlcihleHByKTsgLy8gRmlyc3QgZXhwYW5kIHBvd2VyIG9mIHBvbHlub21pYWxzIChjYW5ub3QgYmUgbWFkZSBmcm9tIHJ1bGVzISlcblxuICAgICAgICB2YXIgc0JlZm9yZTsgLy8gUHJldmlvdXMgZXhwcmVzc2lvblxuXG4gICAgICAgIHZhciBydWxlcztcbiAgICAgICAgdmFyIGVEaXN0ckRpdiA9IHRydWU7XG4gICAgICAgIHZhciByZWRvSW5pYyA9IGZhbHNlO1xuICAgICAgICBleHByID0gc2ltcGxpZnkoZXhwciwgc2V0UnVsZXMuZmlyc3RSdWxlcywge30sIHtcbiAgICAgICAgICBleGFjdEZyYWN0aW9uczogZmFsc2VcbiAgICAgICAgfSk7IC8vIEFwcGx5IHRoZSBpbml0aWFsIHJ1bGVzLCBpbmNsdWRpbmcgc3VjYyBkaXYgcnVsZXNcblxuICAgICAgICB2YXIgcztcblxuICAgICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAgIC8vIEFwcGx5IGFsdGVybmF0ZWx5ICBzdWNjZXNzaXZlIGRpdmlzaW9uIHJ1bGVzIGFuZCBkaXN0ci5kaXYucnVsZXNcbiAgICAgICAgICBydWxlcyA9IGVEaXN0ckRpdiA/IHNldFJ1bGVzLmRpc3RyRGl2UnVsZXMgOiBzZXRSdWxlcy5zdWNEaXZSdWxlcztcbiAgICAgICAgICBleHByID0gc2ltcGxpZnkoZXhwciwgcnVsZXMpOyAvLyB1bnRpbCBubyBtb3JlIGNoYW5nZXNcblxuICAgICAgICAgIGVEaXN0ckRpdiA9ICFlRGlzdHJEaXY7IC8vIFN3YXAgYmV0d2VlbiBEaXN0ci5EaXYgYW5kIFN1Y2MuIERpdi4gUnVsZXNcblxuICAgICAgICAgIHMgPSBleHByLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBpZiAocyA9PT0gc0JlZm9yZSkge1xuICAgICAgICAgICAgYnJlYWs7IC8vIE5vIGNoYW5nZXMgOiBlbmQgb2YgdGhlIGxvb3BcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZWRvSW5pYyA9IHRydWU7XG4gICAgICAgICAgc0JlZm9yZSA9IHM7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVkb0luaWMpIHtcbiAgICAgICAgICAvLyBBcHBseSBmaXJzdCBydWxlcyBhZ2FpbiB3aXRob3V0IHN1Y2MgZGl2IHJ1bGVzIChpZiB0aGVyZSBhcmUgY2hhbmdlcylcbiAgICAgICAgICBleHByID0gc2ltcGxpZnkoZXhwciwgc2V0UnVsZXMuZmlyc3RSdWxlc0FnYWluLCB7fSwge1xuICAgICAgICAgICAgZXhhY3RGcmFjdGlvbnM6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBleHByID0gc2ltcGxpZnkoZXhwciwgc2V0UnVsZXMuZmluYWxSdWxlcywge30sIHtcbiAgICAgICAgICBleGFjdEZyYWN0aW9uczogZmFsc2VcbiAgICAgICAgfSk7IC8vIEFwcGx5IGZpbmFsIHJ1bGVzXG4gICAgICB9IC8vIE5WYXJzID49IDFcblxuXG4gICAgICB2YXIgY29lZmZpY2llbnRzID0gW107XG4gICAgICB2YXIgcmV0UmF0aW9uYWxpemUgPSB7fTtcblxuICAgICAgaWYgKGV4cHIudHlwZSA9PT0gJ09wZXJhdG9yTm9kZScgJiYgZXhwci5pc0JpbmFyeSgpICYmIGV4cHIub3AgPT09ICcvJykge1xuICAgICAgICAvLyBTZXBhcmF0ZSBudW1lcmF0b3IgZnJvbSBkZW5vbWluYXRvclxuICAgICAgICBpZiAoblZhcnMgPT09IDEpIHtcbiAgICAgICAgICBleHByLmFyZ3NbMF0gPSBwb2x5VG9DYW5vbmljYWwoZXhwci5hcmdzWzBdLCBjb2VmZmljaWVudHMpO1xuICAgICAgICAgIGV4cHIuYXJnc1sxXSA9IHBvbHlUb0Nhbm9uaWNhbChleHByLmFyZ3NbMV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRldGFpbGVkKSB7XG4gICAgICAgICAgcmV0UmF0aW9uYWxpemUubnVtZXJhdG9yID0gZXhwci5hcmdzWzBdO1xuICAgICAgICAgIHJldFJhdGlvbmFsaXplLmRlbm9taW5hdG9yID0gZXhwci5hcmdzWzFdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoblZhcnMgPT09IDEpIHtcbiAgICAgICAgICBleHByID0gcG9seVRvQ2Fub25pY2FsKGV4cHIsIGNvZWZmaWNpZW50cyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZGV0YWlsZWQpIHtcbiAgICAgICAgICByZXRSYXRpb25hbGl6ZS5udW1lcmF0b3IgPSBleHByO1xuICAgICAgICAgIHJldFJhdGlvbmFsaXplLmRlbm9taW5hdG9yID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfSAvLyBuVmFyc1xuXG5cbiAgICAgIGlmICghZGV0YWlsZWQpIHJldHVybiBleHByO1xuICAgICAgcmV0UmF0aW9uYWxpemUuY29lZmZpY2llbnRzID0gY29lZmZpY2llbnRzO1xuICAgICAgcmV0UmF0aW9uYWxpemUudmFyaWFibGVzID0gcG9seVJldC52YXJpYWJsZXM7XG4gICAgICByZXRSYXRpb25hbGl6ZS5leHByZXNzaW9uID0gZXhwcjtcbiAgICAgIHJldHVybiByZXRSYXRpb25hbGl6ZTtcbiAgICB9IC8vIF5eXl5eXl4gZW5kIG9mIHJhdGlvbmFsaXplIF5eXl5eXl5eXG5cbiAgfSk7IC8vIGVuZCBvZiB0eXBlZCByYXRpb25hbGl6ZVxuXG4gIC8qKlxuICAgKiAgRnVuY3Rpb24gdG8gc2ltcGxpZnkgYW4gZXhwcmVzc2lvbiB1c2luZyBhbiBvcHRpb25hbCBzY29wZSBhbmRcbiAgICogIHJldHVybiBpdCBpZiB0aGUgZXhwcmVzc2lvbiBpcyBhIHBvbHlub21pYWwgZXhwcmVzc2lvbiwgaS5lLlxuICAgKiAgYW4gZXhwcmVzc2lvbiB3aXRoIG9uZSBvciBtb3JlIHZhcmlhYmxlcyBhbmQgdGhlIG9wZXJhdG9yc1xuICAgKiAgKywgLSwgKiwgYW5kIF4sIHdoZXJlIHRoZSBleHBvbmVudCBjYW4gb25seSBiZSBhIHBvc2l0aXZlIGludGVnZXIuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIHBvbHlub21pYWwoZXhwcixzY29wZSxleHRlbmRlZCwgcnVsZXMpXG4gICAqXG4gICAqIEBwYXJhbSAge05vZGUgfCBzdHJpbmd9IGV4cHIgICAgIFRoZSBleHByZXNzaW9uIHRvIHNpbXBsaWZ5IGFuZCBjaGVjayBpZiBpcyBwb2x5bm9taWFsIGV4cHJlc3Npb25cbiAgICogQHBhcmFtICB7b2JqZWN0fSBzY29wZSAgICAgICAgICAgT3B0aW9uYWwgc2NvcGUgZm9yIGV4cHJlc3Npb24gc2ltcGxpZmljYXRpb25cbiAgICogQHBhcmFtICB7Ym9vbGVhbn0gZXh0ZW5kZWQgICAgICAgT3B0aW9uYWwuIERlZmF1bHQgaXMgZmFsc2UuIFdoZW4gdHJ1ZSBhbGxvd3MgZGl2aWRlIG9wZXJhdG9yLlxuICAgKiBAcGFyYW0gIHthcnJheX0gIHJ1bGVzICAgICAgICAgICBPcHRpb25hbC4gRGVmYXVsdCBpcyBubyBydWxlLlxuICAgKlxuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqICAgICAgICAgICAge09iamVjdH0gbm9kZTogICBub2RlIHNpbXBsaWZpZWQgZXhwcmVzc2lvblxuICAgKiAgICAgICAgICAgIHtBcnJheX0gIHZhcmlhYmxlczogIHZhcmlhYmxlIG5hbWVzXG4gICAqL1xuXG4gIGZ1bmN0aW9uIHBvbHlub21pYWwoZXhwciwgc2NvcGUsIGV4dGVuZGVkLCBydWxlcykge1xuICAgIHZhciB2YXJpYWJsZXMgPSBbXTtcbiAgICB2YXIgbm9kZSA9IHNpbXBsaWZ5KGV4cHIsIHJ1bGVzLCBzY29wZSwge1xuICAgICAgZXhhY3RGcmFjdGlvbnM6IGZhbHNlXG4gICAgfSk7IC8vIFJlc29sdmVzIGFueSB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyB3aXRoIGFsbCBkZWZpbmVkIHBhcmFtZXRlcnNcblxuICAgIGV4dGVuZGVkID0gISFleHRlbmRlZDtcbiAgICB2YXIgb3BlciA9ICcrLSonICsgKGV4dGVuZGVkID8gJy8nIDogJycpO1xuICAgIHJlY1BvbHkobm9kZSk7XG4gICAgdmFyIHJldEZ1bmMgPSB7fTtcbiAgICByZXRGdW5jLmV4cHJlc3Npb24gPSBub2RlO1xuICAgIHJldEZ1bmMudmFyaWFibGVzID0gdmFyaWFibGVzO1xuICAgIHJldHVybiByZXRGdW5jOyAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgICAvKipcbiAgICAgKiAgRnVuY3Rpb24gdG8gc2ltcGxpZnkgYW4gZXhwcmVzc2lvbiB1c2luZyBhbiBvcHRpb25hbCBzY29wZSBhbmRcbiAgICAgKiAgcmV0dXJuIGl0IGlmIHRoZSBleHByZXNzaW9uIGlzIGEgcG9seW5vbWlhbCBleHByZXNzaW9uLCBpLmUuXG4gICAgICogIGFuIGV4cHJlc3Npb24gd2l0aCBvbmUgb3IgbW9yZSB2YXJpYWJsZXMgYW5kIHRoZSBvcGVyYXRvcnNcbiAgICAgKiAgKywgLSwgKiwgYW5kIF4sIHdoZXJlIHRoZSBleHBvbmVudCBjYW4gb25seSBiZSBhIHBvc2l0aXZlIGludGVnZXIuXG4gICAgICpcbiAgICAgKiBTeW50YXg6XG4gICAgICpcbiAgICAgKiAgICAgcmVjUG9seShub2RlKVxuICAgICAqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtOb2RlfSBub2RlICAgICAgICAgICAgICAgVGhlIGN1cnJlbnQgc3ViIHRyZWUgZXhwcmVzc2lvbiBpbiByZWN1cnNpb25cbiAgICAgKlxuICAgICAqIEByZXR1cm4gICAgICAgICAgICAgICAgICAgICAgICAgICBub3RoaW5nLCB0aHJvdyBhbiBleGNlcHRpb24gaWYgZXJyb3JcbiAgICAgKi9cblxuICAgIGZ1bmN0aW9uIHJlY1BvbHkobm9kZSkge1xuICAgICAgdmFyIHRwID0gbm9kZS50eXBlOyAvLyBub2RlIHR5cGVcblxuICAgICAgaWYgKHRwID09PSAnRnVuY3Rpb25Ob2RlJykge1xuICAgICAgICAvLyBObyBmdW5jdGlvbiBjYWxsIGluIHBvbHlub21pYWwgZXhwcmVzc2lvblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIGFuIHVuc29sdmVkIGZ1bmN0aW9uIGNhbGwnKTtcbiAgICAgIH0gZWxzZSBpZiAodHAgPT09ICdPcGVyYXRvck5vZGUnKSB7XG4gICAgICAgIGlmIChub2RlLm9wID09PSAnXicpIHtcbiAgICAgICAgICAvLyBUT0RPOiBoYW5kbGUgbmVnYXRpdmUgZXhwb25lbnRzIGxpa2UgaW4gJzEveF4oLTIpJ1xuICAgICAgICAgIGlmIChub2RlLmFyZ3NbMV0udHlwZSAhPT0gJ0NvbnN0YW50Tm9kZScgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikocGFyc2VGbG9hdChub2RlLmFyZ3NbMV0udmFsdWUpKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGVyZSBpcyBhIG5vbi1pbnRlZ2VyIGV4cG9uZW50Jyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJlY1BvbHkobm9kZS5hcmdzWzBdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKG9wZXIuaW5kZXhPZihub2RlLm9wKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignT3BlcmF0b3IgJyArIG5vZGUub3AgKyAnIGludmFsaWQgaW4gcG9seW5vbWlhbCBleHByZXNzaW9uJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHJlY1BvbHkobm9kZS5hcmdzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gdHlwZSBvZiBvcGVyYXRvclxuXG4gICAgICB9IGVsc2UgaWYgKHRwID09PSAnU3ltYm9sTm9kZScpIHtcbiAgICAgICAgdmFyIF9uYW1lID0gbm9kZS5uYW1lOyAvLyB2YXJpYWJsZSBuYW1lXG5cbiAgICAgICAgdmFyIHBvcyA9IHZhcmlhYmxlcy5pbmRleE9mKF9uYW1lKTtcblxuICAgICAgICBpZiAocG9zID09PSAtMSkge1xuICAgICAgICAgIC8vIG5ldyB2YXJpYWJsZSBpbiBleHByZXNzaW9uXG4gICAgICAgICAgdmFyaWFibGVzLnB1c2goX25hbWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRwID09PSAnUGFyZW50aGVzaXNOb2RlJykge1xuICAgICAgICByZWNQb2x5KG5vZGUuY29udGVudCk7XG4gICAgICB9IGVsc2UgaWYgKHRwICE9PSAnQ29uc3RhbnROb2RlJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3R5cGUgJyArIHRwICsgJyBpcyBub3QgYWxsb3dlZCBpbiBwb2x5bm9taWFsIGV4cHJlc3Npb24nKTtcbiAgICAgIH1cbiAgICB9IC8vIGVuZCBvZiByZWNQb2x5XG5cbiAgfSAvLyBlbmQgb2YgcG9seW5vbWlhbFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogUmV0dXJuIGEgcnVsZSBzZXQgdG8gcmF0aW9uYWxpemUgYW4gcG9seW5vbWlhbCBleHByZXNzaW9uIGluIHJhdGlvbmFsaXplXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIHJ1bGVzUmF0aW9uYWxpemUoKVxuICAgKlxuICAgKiBAcmV0dXJuIHthcnJheX0gICAgICAgIHJ1bGUgc2V0IHRvIHJhdGlvbmFsaXplIGFuIHBvbHlub21pYWwgZXhwcmVzc2lvblxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHJ1bGVzUmF0aW9uYWxpemUoKSB7XG4gICAgdmFyIG9sZFJ1bGVzID0gW3NpbXBsaWZ5Q29yZSwgLy8gc0NvcmVcbiAgICB7XG4gICAgICBsOiAnbituJyxcbiAgICAgIHI6ICcyKm4nXG4gICAgfSwge1xuICAgICAgbDogJ24rLW4nLFxuICAgICAgcjogJzAnXG4gICAgfSwgc2ltcGxpZnlDb25zdGFudCwgLy8gc0NvbnN0YW50XG4gICAge1xuICAgICAgbDogJ24qKG4xXi0xKScsXG4gICAgICByOiAnbi9uMSdcbiAgICB9LCB7XG4gICAgICBsOiAnbipuMV4tbjInLFxuICAgICAgcjogJ24vbjFebjInXG4gICAgfSwge1xuICAgICAgbDogJ24xXi0xJyxcbiAgICAgIHI6ICcxL24xJ1xuICAgIH0sIHtcbiAgICAgIGw6ICduKihuMS9uMiknLFxuICAgICAgcjogJyhuKm4xKS9uMidcbiAgICB9LCB7XG4gICAgICBsOiAnMSpuJyxcbiAgICAgIHI6ICduJ1xuICAgIH1dO1xuICAgIHZhciBydWxlc0ZpcnN0ID0gW3tcbiAgICAgIGw6ICcoLW4xKS8oLW4yKScsXG4gICAgICByOiAnbjEvbjInXG4gICAgfSwgLy8gVW5hcnkgZGl2aXNpb25cbiAgICB7XG4gICAgICBsOiAnKC1uMSkqKC1uMiknLFxuICAgICAgcjogJ24xKm4yJ1xuICAgIH0sIC8vIFVuYXJ5IG11bHRpcGxpY2F0aW9uXG4gICAge1xuICAgICAgbDogJ24xLS1uMicsXG4gICAgICByOiAnbjErbjInXG4gICAgfSwgLy8gJy0tJyBlbGltaW5hdGlvblxuICAgIHtcbiAgICAgIGw6ICduMS1uMicsXG4gICAgICByOiAnbjErKC1uMiknXG4gICAgfSwgLy8gU3VidHJhY3Rpb24gdHVybiBpbnRvIGFkZCB3aXRoIHVu77+9cnkgbWludXNcbiAgICB7XG4gICAgICBsOiAnKG4xK24yKSpuMycsXG4gICAgICByOiAnKG4xKm4zICsgbjIqbjMpJ1xuICAgIH0sIC8vIERpc3RyaWJ1dGl2ZSAxXG4gICAge1xuICAgICAgbDogJ24xKihuMituMyknLFxuICAgICAgcjogJyhuMSpuMituMSpuMyknXG4gICAgfSwgLy8gRGlzdHJpYnV0aXZlIDJcbiAgICB7XG4gICAgICBsOiAnYzEqbiArIGMyKm4nLFxuICAgICAgcjogJyhjMStjMikqbidcbiAgICB9LCAvLyBKb2luaW5nIGNvbnN0YW50c1xuICAgIHtcbiAgICAgIGw6ICdjMSpuICsgbicsXG4gICAgICByOiAnKGMxKzEpKm4nXG4gICAgfSwgLy8gSm9pbmluZyBjb25zdGFudHNcbiAgICB7XG4gICAgICBsOiAnYzEqbiAtIGMyKm4nLFxuICAgICAgcjogJyhjMS1jMikqbidcbiAgICB9LCAvLyBKb2luaW5nIGNvbnN0YW50c1xuICAgIHtcbiAgICAgIGw6ICdjMSpuIC0gbicsXG4gICAgICByOiAnKGMxLTEpKm4nXG4gICAgfSwgLy8gSm9pbmluZyBjb25zdGFudHNcbiAgICB7XG4gICAgICBsOiAndi9jJyxcbiAgICAgIHI6ICcoMS9jKSp2J1xuICAgIH0sIC8vIHZhcmlhYmxlL2NvbnN0YW50IChuZXchKVxuICAgIHtcbiAgICAgIGw6ICd2Ly1jJyxcbiAgICAgIHI6ICctKDEvYykqdidcbiAgICB9LCAvLyB2YXJpYWJsZS9jb25zdGFudCAobmV3ISlcbiAgICB7XG4gICAgICBsOiAnLXYqLWMnLFxuICAgICAgcjogJ2MqdidcbiAgICB9LCAvLyBJbnZlcnNpb24gY29uc3RhbnQgYW5kIHZhcmlhYmxlIDFcbiAgICB7XG4gICAgICBsOiAnLXYqYycsXG4gICAgICByOiAnLWMqdidcbiAgICB9LCAvLyBJbnZlcnNpb24gY29uc3RhbnQgYW5kIHZhcmlhYmxlIDJcbiAgICB7XG4gICAgICBsOiAndiotYycsXG4gICAgICByOiAnLWMqdidcbiAgICB9LCAvLyBJbnZlcnNpb24gY29uc3RhbnQgYW5kIHZhcmlhYmxlIDNcbiAgICB7XG4gICAgICBsOiAndipjJyxcbiAgICAgIHI6ICdjKnYnXG4gICAgfSwgLy8gSW52ZXJzaW9uIGNvbnN0YW50IGFuZCB2YXJpYWJsZSA0XG4gICAge1xuICAgICAgbDogJy0oLW4xKm4yKScsXG4gICAgICByOiAnKG4xKm4yKSdcbiAgICB9LCAvLyBVbmFyeSBwcm9wYWdhdGlvblxuICAgIHtcbiAgICAgIGw6ICctKG4xKm4yKScsXG4gICAgICByOiAnKC1uMSpuMiknXG4gICAgfSwgLy8gVW5hcnkgcHJvcGFnYXRpb25cbiAgICB7XG4gICAgICBsOiAnLSgtbjErbjIpJyxcbiAgICAgIHI6ICcobjEtbjIpJ1xuICAgIH0sIC8vIFVuYXJ5IHByb3BhZ2F0aW9uXG4gICAge1xuICAgICAgbDogJy0objErbjIpJyxcbiAgICAgIHI6ICcoLW4xLW4yKSdcbiAgICB9LCAvLyBVbmFyeSBwcm9wYWdhdGlvblxuICAgIHtcbiAgICAgIGw6ICcobjFebjIpXm4zJyxcbiAgICAgIHI6ICcobjFeKG4yKm4zKSknXG4gICAgfSwgLy8gUG93ZXIgdG8gUG93ZXJcbiAgICB7XG4gICAgICBsOiAnLSgtbjEvbjIpJyxcbiAgICAgIHI6ICcobjEvbjIpJ1xuICAgIH0sIC8vIERpdmlzaW9uIGFuZCBVbmFyeVxuICAgIHtcbiAgICAgIGw6ICctKG4xL24yKScsXG4gICAgICByOiAnKC1uMS9uMiknXG4gICAgfV07IC8vIERpdmlzYW8gYW5kIFVuYXJ5XG5cbiAgICB2YXIgcnVsZXNEaXN0ckRpdiA9IFt7XG4gICAgICBsOiAnKG4xL24yICsgbjMvbjQpJyxcbiAgICAgIHI6ICcoKG4xKm40ICsgbjMqbjIpLyhuMipuNCkpJ1xuICAgIH0sIC8vIFN1bSBvZiBmcmFjdGlvbnNcbiAgICB7XG4gICAgICBsOiAnKG4xL24yICsgbjMpJyxcbiAgICAgIHI6ICcoKG4xICsgbjMqbjIpL24yKSdcbiAgICB9LCAvLyBTdW0gZnJhY3Rpb24gd2l0aCBudW1iZXIgMVxuICAgIHtcbiAgICAgIGw6ICcobjEgKyBuMi9uMyknLFxuICAgICAgcjogJygobjEqbjMgKyBuMikvbjMpJ1xuICAgIH1dOyAvLyBTdW0gZnJhY3Rpb24gd2l0aCBudW1iZXIgMVxuXG4gICAgdmFyIHJ1bGVzU3VjRGl2ID0gW3tcbiAgICAgIGw6ICcobjEvKG4yL24zKSknLFxuICAgICAgcjogJygobjEqbjMpL24yKSdcbiAgICB9LCAvLyBEaXZpc2lvbiBzaW1wbGlmaWNhdGlvblxuICAgIHtcbiAgICAgIGw6ICcobjEvbjIvbjMpJyxcbiAgICAgIHI6ICcobjEvKG4yKm4zKSknXG4gICAgfV07XG4gICAgdmFyIHNldFJ1bGVzID0ge307IC8vIHJ1bGVzIHNldCBpbiA0IHN0ZXBzLlxuICAgIC8vIEFsbCBydWxlcyA9PiBpbmZpbml0ZSBsb29wXG4gICAgLy8gc2V0UnVsZXMuYWxsUnVsZXMgPW9sZFJ1bGVzLmNvbmNhdChydWxlc0ZpcnN0LHJ1bGVzRGlzdHJEaXYscnVsZXNTdWNEaXYpXG5cbiAgICBzZXRSdWxlcy5maXJzdFJ1bGVzID0gb2xkUnVsZXMuY29uY2F0KHJ1bGVzRmlyc3QsIHJ1bGVzU3VjRGl2KTsgLy8gRmlyc3QgcnVsZSBzZXRcblxuICAgIHNldFJ1bGVzLmRpc3RyRGl2UnVsZXMgPSBydWxlc0Rpc3RyRGl2OyAvLyBKdXN0IGRpc3RyLiBkaXYuIHJ1bGVzXG5cbiAgICBzZXRSdWxlcy5zdWNEaXZSdWxlcyA9IHJ1bGVzU3VjRGl2OyAvLyBKdXMgc3VjYy4gZGl2LiBydWxlc1xuXG4gICAgc2V0UnVsZXMuZmlyc3RSdWxlc0FnYWluID0gb2xkUnVsZXMuY29uY2F0KHJ1bGVzRmlyc3QpOyAvLyBMYXN0IHJ1bGVzIHNldCB3aXRob3V0IHN1Y2MuIGRpdi5cbiAgICAvLyBEaXZpc2lvbiBzaW1wbGlmaWNhdGlvblxuICAgIC8vIFNlY29uZCBydWxlIHNldC5cbiAgICAvLyBUaGVyZSBpcyBubyBhZ2dyZWdhdGUgZXhwcmVzc2lvbiB3aXRoIHBhcmVudGVzaXMsIGJ1dCB0aGUgb25seSB2YXJpYWJsZSBjYW4gYmUgc2NhdHRlcmVkLlxuXG4gICAgc2V0UnVsZXMuZmluYWxSdWxlcyA9IFtzaW1wbGlmeUNvcmUsIC8vIHNpbXBsaWZ5LnJ1bGVzWzBdXG4gICAge1xuICAgICAgbDogJ24qLW4nLFxuICAgICAgcjogJy1uXjInXG4gICAgfSwgLy8gSm9pbmluZyBtdWx0aXBseSB3aXRoIHBvd2VyIDFcbiAgICB7XG4gICAgICBsOiAnbipuJyxcbiAgICAgIHI6ICduXjInXG4gICAgfSwgLy8gSm9pbmluZyBtdWx0aXBseSB3aXRoIHBvd2VyIDJcbiAgICBzaW1wbGlmeUNvbnN0YW50LCAvLyBzaW1wbGlmeS5ydWxlc1sxNF0gb2xkIDNyZCBpbmRleCBpbiBvbGRSdWxlc1xuICAgIHtcbiAgICAgIGw6ICduKi1uXm4xJyxcbiAgICAgIHI6ICctbl4objErMSknXG4gICAgfSwgLy8gSm9pbmluZyBtdWx0aXBseSB3aXRoIHBvd2VyIDNcbiAgICB7XG4gICAgICBsOiAnbipuXm4xJyxcbiAgICAgIHI6ICduXihuMSsxKSdcbiAgICB9LCAvLyBKb2luaW5nIG11bHRpcGx5IHdpdGggcG93ZXIgNFxuICAgIHtcbiAgICAgIGw6ICduXm4xKi1uXm4yJyxcbiAgICAgIHI6ICctbl4objErbjIpJ1xuICAgIH0sIC8vIEpvaW5pbmcgbXVsdGlwbHkgd2l0aCBwb3dlciA1XG4gICAge1xuICAgICAgbDogJ25ebjEqbl5uMicsXG4gICAgICByOiAnbl4objErbjIpJ1xuICAgIH0sIC8vIEpvaW5pbmcgbXVsdGlwbHkgd2l0aCBwb3dlciA2XG4gICAge1xuICAgICAgbDogJ25ebjEqLW4nLFxuICAgICAgcjogJy1uXihuMSsxKSdcbiAgICB9LCAvLyBKb2luaW5nIG11bHRpcGx5IHdpdGggcG93ZXIgN1xuICAgIHtcbiAgICAgIGw6ICduXm4xKm4nLFxuICAgICAgcjogJ25eKG4xKzEpJ1xuICAgIH0sIC8vIEpvaW5pbmcgbXVsdGlwbHkgd2l0aCBwb3dlciA4XG4gICAge1xuICAgICAgbDogJ25ebjEvLW4nLFxuICAgICAgcjogJy1uXihuMS0xKSdcbiAgICB9LCAvLyBKb2luaW5nIG11bHRpcGx5IHdpdGggcG93ZXIgOFxuICAgIHtcbiAgICAgIGw6ICduXm4xL24nLFxuICAgICAgcjogJ25eKG4xLTEpJ1xuICAgIH0sIC8vIEpvaW5pbmcgZGl2aXNpb24gd2l0aCBwb3dlciAxXG4gICAge1xuICAgICAgbDogJ24vLW5ebjEnLFxuICAgICAgcjogJy1uXigxLW4xKSdcbiAgICB9LCAvLyBKb2luaW5nIGRpdmlzaW9uIHdpdGggcG93ZXIgMlxuICAgIHtcbiAgICAgIGw6ICduL25ebjEnLFxuICAgICAgcjogJ25eKDEtbjEpJ1xuICAgIH0sIC8vIEpvaW5pbmcgZGl2aXNpb24gd2l0aCBwb3dlciAzXG4gICAge1xuICAgICAgbDogJ25ebjEvLW5ebjInLFxuICAgICAgcjogJ25eKG4xLW4yKSdcbiAgICB9LCAvLyBKb2luaW5nIGRpdmlzaW9uIHdpdGggcG93ZXIgNFxuICAgIHtcbiAgICAgIGw6ICduXm4xL25ebjInLFxuICAgICAgcjogJ25eKG4xLW4yKSdcbiAgICB9LCAvLyBKb2luaW5nIGRpdmlzaW9uIHdpdGggcG93ZXIgNVxuICAgIHtcbiAgICAgIGw6ICduMSsoLW4yKm4zKScsXG4gICAgICByOiAnbjEtbjIqbjMnXG4gICAgfSwgLy8gU29sdmluZyB1c2VsZXNzIHBhcmVudGhlc2lzIDFcbiAgICB7XG4gICAgICBsOiAndiooLWMpJyxcbiAgICAgIHI6ICctYyp2J1xuICAgIH0sIC8vIFNvbHZpbmcgdXNlbGVzcyB1bmFyeSAyXG4gICAge1xuICAgICAgbDogJ24xKy1uMicsXG4gICAgICByOiAnbjEtbjInXG4gICAgfSwgLy8gU29sdmluZyArLSB0b2dldGhlciAobmV3ISlcbiAgICB7XG4gICAgICBsOiAndipjJyxcbiAgICAgIHI6ICdjKnYnXG4gICAgfSwgLy8gaW52ZXJzaW9uIGNvbnN0YW50IHdpdGggdmFyaWFibGVcbiAgICB7XG4gICAgICBsOiAnKG4xXm4yKV5uMycsXG4gICAgICByOiAnKG4xXihuMipuMykpJ1xuICAgIH0gLy8gUG93ZXIgdG8gUG93ZXJcbiAgICBdO1xuICAgIHJldHVybiBzZXRSdWxlcztcbiAgfSAvLyBFbmQgcnVsZXNSYXRpb25hbGl6ZVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICAvKipcbiAgICogIEV4cGFuZCByZWN1cnNpdmVseSBhIHRyZWUgbm9kZSBmb3IgaGFuZGxpbmcgd2l0aCBleHByZXNzaW9ucyB3aXRoIGV4cG9uZW50c1xuICAgKiAgKGl0J3Mgbm90IGZvciBjb25zdGFudHMsIHN5bWJvbHMgb3IgZnVuY3Rpb25zIHdpdGggZXhwb25lbnRzKVxuICAgKiAgUFM6IFRoZSBvdGhlciBwYXJhbWV0ZXJzIGFyZSBpbnRlcm5hbCBmb3IgcmVjdXJzaW9uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIGV4cGFuZFBvd2VyKG5vZGUpXG4gICAqXG4gICAqIEBwYXJhbSAge05vZGV9IG5vZGUgICAgICAgICBDdXJyZW50IGV4cHJlc3Npb24gbm9kZVxuICAgKiBAcGFyYW0gIHtub2RlfSBwYXJlbnQgICAgICAgUGFyZW50IGN1cnJlbnQgbm9kZSBpbnNpZGUgdGhlIHJlY3Vyc2lvblxuICAgKiBAcGFyYW0gIChpbnR9ICAgICAgICAgICAgICAgUGFyZW50IG51bWJlciBvZiBjaGlkIGluc2lkZSB0aGUgcmVyY3Vyc2lvblxuICAgKlxuICAgKiBAcmV0dXJuIHtub2RlfSAgICAgICAgbm9kZSBleHByZXNzaW9uIHdpdGggYWxsIHBvd2VycyBleHBhbmRlZC5cbiAgICovXG5cblxuICBmdW5jdGlvbiBleHBhbmRQb3dlcihub2RlLCBwYXJlbnQsIGluZFBhcmVudCkge1xuICAgIHZhciB0cCA9IG5vZGUudHlwZTtcbiAgICB2YXIgaW50ZXJuYWwgPSBhcmd1bWVudHMubGVuZ3RoID4gMTsgLy8gVFJVRSBpbiBpbnRlcm5hbCBjYWxsc1xuXG4gICAgaWYgKHRwID09PSAnT3BlcmF0b3JOb2RlJyAmJiBub2RlLmlzQmluYXJ5KCkpIHtcbiAgICAgIHZhciBkb2VzID0gZmFsc2U7XG4gICAgICB2YXIgdmFsO1xuXG4gICAgICBpZiAobm9kZS5vcCA9PT0gJ14nKSB7XG4gICAgICAgIC8vIEZpcnN0IG9wZXJhdG9yOiBQYXJlbnRoZXNpcyBvciBVbmFyeU1pbnVzXG4gICAgICAgIGlmICgobm9kZS5hcmdzWzBdLnR5cGUgPT09ICdQYXJlbnRoZXNpc05vZGUnIHx8IG5vZGUuYXJnc1swXS50eXBlID09PSAnT3BlcmF0b3JOb2RlJykgJiYgbm9kZS5hcmdzWzFdLnR5cGUgPT09ICdDb25zdGFudE5vZGUnKSB7XG4gICAgICAgICAgLy8gU2Vjb25kIG9wZXJhdG9yOiBDb25zdGFudFxuICAgICAgICAgIHZhbCA9IHBhcnNlRmxvYXQobm9kZS5hcmdzWzFdLnZhbHVlKTtcbiAgICAgICAgICBkb2VzID0gdmFsID49IDIgJiYgKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh2YWwpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChkb2VzKSB7XG4gICAgICAgIC8vIEV4cG9uZW50ID49IDJcbiAgICAgICAgLy8gQmVmb3JlOlxuICAgICAgICAvLyAgICAgICAgICAgIG9wZXJhdG9yIEEgLS0+IFN1YnRyZWVcbiAgICAgICAgLy8gcGFyZW50IHBvd1xuICAgICAgICAvLyAgICAgICAgICAgIGNvbnN0YW50XG4gICAgICAgIC8vXG4gICAgICAgIGlmICh2YWwgPiAyKSB7XG4gICAgICAgICAgLy8gRXhwb25lbnQgPiAyLFxuICAgICAgICAgIC8vIEFGVEVSOiAgKGV4cG9uZW50ID4gMilcbiAgICAgICAgICAvLyAgICAgICAgICAgICBvcGVyYXRvciBBIC0tPiBTdWJ0cmVlXG4gICAgICAgICAgLy8gcGFyZW50ICAqXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgIGRlZXAgY2xvbmUgKG9wZXJhdG9yIEEgLS0+IFN1YnRyZWVcbiAgICAgICAgICAvLyAgICAgICAgICAgICBwb3dcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgY29uc3RhbnQgLSAxXG4gICAgICAgICAgLy9cbiAgICAgICAgICB2YXIgbkVzcVRvcG8gPSBub2RlLmFyZ3NbMF07XG4gICAgICAgICAgdmFyIG5EaXJUb3BvID0gbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbbm9kZS5hcmdzWzBdLmNsb25lRGVlcCgpLCBuZXcgQ29uc3RhbnROb2RlKHZhbCAtIDEpXSk7XG4gICAgICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbkVzcVRvcG8sIG5EaXJUb3BvXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gRXhwbyA9IDIgLSBubyBwb3dlclxuICAgICAgICAgIC8vIEFGVEVSOiAgKGV4cG9uZW50ID0gIDIpXG4gICAgICAgICAgLy8gICAgICAgICAgICAgb3BlcmF0b3IgQSAtLT4gU3VidHJlZVxuICAgICAgICAgIC8vIHBhcmVudCAgIG9wZXJcbiAgICAgICAgICAvLyAgICAgICAgICAgIGRlZXAgY2xvbmUgKG9wZXJhdG9yIEEgLS0+IFN1YnRyZWUpXG4gICAgICAgICAgLy9cbiAgICAgICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtub2RlLmFyZ3NbMF0sIG5vZGUuYXJnc1swXS5jbG9uZURlZXAoKV0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGludGVybmFsKSB7XG4gICAgICAgICAgLy8gQ2hhbmdlIHBhcmVudCByZWZlcmVuY2VzIGluIGludGVybmFsIHJlY3Vyc2l2ZSBjYWxsc1xuICAgICAgICAgIGlmIChpbmRQYXJlbnQgPT09ICdjb250ZW50Jykge1xuICAgICAgICAgICAgcGFyZW50LmNvbnRlbnQgPSBub2RlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJlbnQuYXJnc1tpbmRQYXJlbnRdID0gbm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZG9lc1xuXG4gICAgfSAvLyBiaW5hcnkgT3BlcmF0b3JOb2RlXG5cblxuICAgIGlmICh0cCA9PT0gJ1BhcmVudGhlc2lzTm9kZScpIHtcbiAgICAgIC8vIFJlY3Vyc2lvblxuICAgICAgZXhwYW5kUG93ZXIobm9kZS5jb250ZW50LCBub2RlLCAnY29udGVudCcpO1xuICAgIH0gZWxzZSBpZiAodHAgIT09ICdDb25zdGFudE5vZGUnICYmIHRwICE9PSAnU3ltYm9sTm9kZScpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGV4cGFuZFBvd2VyKG5vZGUuYXJnc1tpXSwgbm9kZSwgaSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFpbnRlcm5hbCkge1xuICAgICAgLy8gcmV0dXJuIHRoZSByb290IG5vZGVcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cbiAgfSAvLyBFbmQgZXhwYW5kUG93ZXJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIEF1eGlsYXJ5IGZ1bmN0aW9uIGZvciByYXRpb25hbGl6ZVxuICAgKiBDb252ZXJ0IG5lYXIgY2Fub25pY2FsIHBvbHlub21pYWwgaW4gb25lIHZhcmlhYmxlIGluIGEgY2Fub25pY2FsIHBvbHlub21pYWxcbiAgICogd2l0aCBvbmUgdGVybSBmb3IgZWFjaCBleHBvbmVudCBpbiBkZWNyZWFzaW5nIG9yZGVyXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIHBvbHlUb0Nhbm9uaWNhbChub2RlIFssIGNvZWZmaWNpZW50c10pXG4gICAqXG4gICAqIEBwYXJhbSAge05vZGUgfCBzdHJpbmd9IGV4cHIgICAgICAgVGhlIG5lYXIgY2Fub25pY2FsIHBvbHlub21pYWwgZXhwcmVzc2lvbiB0byBjb252ZXJ0IGluIGEgYSBjYW5vbmljYWwgcG9seW5vbWlhbCBleHByZXNzaW9uXG4gICAqXG4gICAqICAgICAgICBUaGUgc3RyaW5nIG9yIHRyZWUgZXhwcmVzc2lvbiBuZWVkcyB0byBiZSBhdCBiZWxvdyBzeW50YXgsIHdpdGggZnJlZSBzcGFjZXM6XG4gICAqICAgICAgICAgKCAgKF4oLSk/IHwgWystXT8gKWN0ZSAoKik/IHZhciAoXmV4cG8pPyAgfCBjdGUgKStcbiAgICogICAgICAgV2hlcmUgJ3ZhcicgaXMgb25lIHZhcmlhYmxlIHdpdGggYW55IHZhbGlkIG5hbWVcbiAgICogICAgICAgICAgICAgJ2N0ZScgYXJlIHJlYWwgbnVtZXJpYyBjb25zdGFudHMgd2l0aCBhbnkgdmFsdWUuIEl0IGNhbiBiZSBvbWl0dGVkIGlmIGVxdWFsIHRoYW4gMVxuICAgKiAgICAgICAgICAgICAnZXhwbycgYXJlIGludGVnZXJzIGdyZWF0ZXIgdGhhbiAwLiBJdCBjYW4gYmUgb21pdHRlZCBpZiBlcXVhbCB0aGFuIDEuXG4gICAqXG4gICAqIEBwYXJhbSAge2FycmF5fSAgIGNvZWZmaWNpZW50cyAgICAgICAgICAgICBPcHRpb25hbCByZXR1cm5zIGNvZWZmaWNpZW50cyBzb3J0ZWQgYnkgaW5jcmVhc2VkIGV4cG9uZW50XG4gICAqXG4gICAqXG4gICAqIEByZXR1cm4ge25vZGV9ICAgICAgICBuZXcgbm9kZSB0cmVlIHdpdGggb25lIHZhcmlhYmxlIHBvbHlub21pYWwgb3Igc3RyaW5nIGVycm9yLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBvbHlUb0Nhbm9uaWNhbChub2RlLCBjb2VmZmljaWVudHMpIHtcbiAgICBpZiAoY29lZmZpY2llbnRzID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvZWZmaWNpZW50cyA9IFtdO1xuICAgIH0gLy8gY29lZmZpY2llbnRzLlxuXG5cbiAgICBjb2VmZmljaWVudHNbMF0gPSAwOyAvLyBpbmRleCBpcyB0aGUgZXhwb25lbnRcblxuICAgIHZhciBvID0ge307XG4gICAgby5jdGUgPSAxO1xuICAgIG8ub3BlciA9ICcrJzsgLy8gZmlyZTogbWFyayB3aXRoICogb3IgXiB3aGVuIGZpbmRzICogb3IgXiBkb3duIHRyZWUsIHJlc2V0IHRvIFwiXCIgd2l0aCArIGFuZCAtLlxuICAgIC8vICAgICAgIEl0IGlzIHVzZWQgdG8gZGVkdWNlIHRoZSBleHBvbmVudDogMSBmb3IgKiwgMCBmb3IgXCJcIi5cblxuICAgIG8uZmlyZSA9ICcnO1xuICAgIHZhciBtYXhFeHBvID0gMDsgLy8gbWF4aW11bSBleHBvbmVudFxuXG4gICAgdmFyIHZhcm5hbWUgPSAnJzsgLy8gdmFyaWFibGUgbmFtZVxuXG4gICAgcmVjdXJQb2wobm9kZSwgbnVsbCwgbyk7XG4gICAgbWF4RXhwbyA9IGNvZWZmaWNpZW50cy5sZW5ndGggLSAxO1xuICAgIHZhciBmaXJzdCA9IHRydWU7XG4gICAgdmFyIG5vO1xuXG4gICAgZm9yICh2YXIgaSA9IG1heEV4cG87IGkgPj0gMDsgaS0tKSB7XG4gICAgICBpZiAoY29lZmZpY2llbnRzW2ldID09PSAwKSBjb250aW51ZTtcbiAgICAgIHZhciBuMSA9IG5ldyBDb25zdGFudE5vZGUoZmlyc3QgPyBjb2VmZmljaWVudHNbaV0gOiBNYXRoLmFicyhjb2VmZmljaWVudHNbaV0pKTtcbiAgICAgIHZhciBvcCA9IGNvZWZmaWNpZW50c1tpXSA8IDAgPyAnLScgOiAnKyc7XG5cbiAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAvLyBJcyBub3QgYSBjb25zdGFudCB3aXRob3V0IHZhcmlhYmxlXG4gICAgICAgIHZhciBuMiA9IG5ldyBTeW1ib2xOb2RlKHZhcm5hbWUpO1xuXG4gICAgICAgIGlmIChpID4gMSkge1xuICAgICAgICAgIHZhciBuMyA9IG5ldyBDb25zdGFudE5vZGUoaSk7XG4gICAgICAgICAgbjIgPSBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFtuMiwgbjNdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2VmZmljaWVudHNbaV0gPT09IC0xICYmIGZpcnN0KSB7XG4gICAgICAgICAgbjEgPSBuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3VuYXJ5TWludXMnLCBbbjJdKTtcbiAgICAgICAgfSBlbHNlIGlmIChNYXRoLmFicyhjb2VmZmljaWVudHNbaV0pID09PSAxKSB7XG4gICAgICAgICAgbjEgPSBuMjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBuMSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbjEsIG4yXSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpcnN0KSB7XG4gICAgICAgIG5vID0gbjE7XG4gICAgICB9IGVsc2UgaWYgKG9wID09PSAnKycpIHtcbiAgICAgICAgbm8gPSBuZXcgT3BlcmF0b3JOb2RlKCcrJywgJ2FkZCcsIFtubywgbjFdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vID0gbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFtubywgbjFdKTtcbiAgICAgIH1cblxuICAgICAgZmlyc3QgPSBmYWxzZTtcbiAgICB9IC8vIGZvclxuXG5cbiAgICBpZiAoZmlyc3QpIHtcbiAgICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKDApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm87XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFJlY3Vyc2l2ZSBhdXhpbGFyeSBmdW5jdGlvbiBpbnNpZGUgcG9seVRvQ2Fub25pY2FsIGZvclxuICAgICAqIGNvbnZlcnRpbmcgZXhwcmVzc2lvbiBpbiBjYW5vbmljYWwgZm9ybVxuICAgICAqXG4gICAgICogU3ludGF4OlxuICAgICAqXG4gICAgICogICAgIHJlY3VyUG9sKG5vZGUsIG5vUGFpLCBvYmopXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtOb2RlfSBub2RlICAgICAgICBUaGUgY3VycmVudCBzdWJwb2x5bm9taWFsIGV4cHJlc3Npb25cbiAgICAgKiBAcGFyYW0gIHtOb2RlIHwgTnVsbH0gIG5vUGFpICAgVGhlIGN1cnJlbnQgcGFyZW50IG5vZGVcbiAgICAgKiBAcGFyYW0gIHtvYmplY3R9ICAgIG9iaiAgICAgICAgT2JqZWN0IHdpdGggbWFueSBpbnRlcm5hbCBmbGFnc1xuICAgICAqXG4gICAgICogQHJldHVybiB7fSAgICAgICAgICAgICAgICAgICAgTm8gcmV0dXJuLiBJZiBlcnJvciwgdGhyb3dzIGFuIGV4Y2VwdGlvblxuICAgICAqL1xuXG5cbiAgICBmdW5jdGlvbiByZWN1clBvbChub2RlLCBub1BhaSwgbykge1xuICAgICAgdmFyIHRwID0gbm9kZS50eXBlO1xuXG4gICAgICBpZiAodHAgPT09ICdGdW5jdGlvbk5vZGUnKSB7XG4gICAgICAgIC8vICoqKioqIEZ1bmN0aW9uTmFtZSAqKioqKlxuICAgICAgICAvLyBObyBmdW5jdGlvbiBjYWxsIGluIHBvbHlub21pYWwgZXhwcmVzc2lvblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIGFuIHVuc29sdmVkIGZ1bmN0aW9uIGNhbGwnKTtcbiAgICAgIH0gZWxzZSBpZiAodHAgPT09ICdPcGVyYXRvck5vZGUnKSB7XG4gICAgICAgIC8vICoqKioqIE9wZXJhdG9yTmFtZSAqKioqKlxuICAgICAgICBpZiAoJystKl4nLmluZGV4T2Yobm9kZS5vcCkgPT09IC0xKSB0aHJvdyBuZXcgRXJyb3IoJ09wZXJhdG9yICcgKyBub2RlLm9wICsgJyBpbnZhbGlkJyk7XG5cbiAgICAgICAgaWYgKG5vUGFpICE9PSBudWxsKSB7XG4gICAgICAgICAgLy8gLSh1bmFyeSksXiAgOiBjaGlsZHJlbiBvZiAqLCssLVxuICAgICAgICAgIGlmICgobm9kZS5mbiA9PT0gJ3VuYXJ5TWludXMnIHx8IG5vZGUuZm4gPT09ICdwb3cnKSAmJiBub1BhaS5mbiAhPT0gJ2FkZCcgJiYgbm9QYWkuZm4gIT09ICdzdWJ0cmFjdCcgJiYgbm9QYWkuZm4gIT09ICdtdWx0aXBseScpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCAnICsgbm9kZS5vcCArICcgcGxhY2luZycpO1xuICAgICAgICAgIH0gLy8gLSwrLCogOiBjaGlsZHJlbiBvZiArLC1cblxuXG4gICAgICAgICAgaWYgKChub2RlLmZuID09PSAnc3VidHJhY3QnIHx8IG5vZGUuZm4gPT09ICdhZGQnIHx8IG5vZGUuZm4gPT09ICdtdWx0aXBseScpICYmIG5vUGFpLmZuICE9PSAnYWRkJyAmJiBub1BhaS5mbiAhPT0gJ3N1YnRyYWN0Jykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkICcgKyBub2RlLm9wICsgJyBwbGFjaW5nJyk7XG4gICAgICAgICAgfSAvLyAtLCsgOiBmaXJzdCBjaGlsZFxuXG5cbiAgICAgICAgICBpZiAoKG5vZGUuZm4gPT09ICdzdWJ0cmFjdCcgfHwgbm9kZS5mbiA9PT0gJ2FkZCcgfHwgbm9kZS5mbiA9PT0gJ3VuYXJ5TWludXMnKSAmJiBvLm5vRmlsICE9PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgJyArIG5vZGUub3AgKyAnIHBsYWNpbmcnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gSGFzIHBhcmVudFxuICAgICAgICAvLyBGaXJlcnM6IF4sKiAgICAgICBPbGQ6ICAgXiwmLC0odW5hcnkpOiBmaXJlcnNcblxuXG4gICAgICAgIGlmIChub2RlLm9wID09PSAnXicgfHwgbm9kZS5vcCA9PT0gJyonKSB7XG4gICAgICAgICAgby5maXJlID0gbm9kZS5vcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBub2RlLmFyZ3MubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgLy8gKywtOiByZXNldCBmaXJlXG4gICAgICAgICAgaWYgKG5vZGUuZm4gPT09ICd1bmFyeU1pbnVzJykgby5vcGVyID0gJy0nO1xuXG4gICAgICAgICAgaWYgKG5vZGUub3AgPT09ICcrJyB8fCBub2RlLmZuID09PSAnc3VidHJhY3QnKSB7XG4gICAgICAgICAgICBvLmZpcmUgPSAnJztcbiAgICAgICAgICAgIG8uY3RlID0gMTsgLy8gZGVmYXVsdCBpZiB0aGVyZSBpcyBubyBjb25zdGFudFxuXG4gICAgICAgICAgICBvLm9wZXIgPSBfaSA9PT0gMCA/ICcrJyA6IG5vZGUub3A7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgby5ub0ZpbCA9IF9pOyAvLyBudW1iZXIgb2Ygc29uXG5cbiAgICAgICAgICByZWN1clBvbChub2RlLmFyZ3NbX2ldLCBub2RlLCBvKTtcbiAgICAgICAgfSAvLyBmb3IgaW4gY2hpbGRyZW5cblxuICAgICAgfSBlbHNlIGlmICh0cCA9PT0gJ1N5bWJvbE5vZGUnKSB7XG4gICAgICAgIC8vICoqKioqIFN5bWJvbE5hbWUgKioqKipcbiAgICAgICAgaWYgKG5vZGUubmFtZSAhPT0gdmFybmFtZSAmJiB2YXJuYW1lICE9PSAnJykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlcmUgaXMgbW9yZSB0aGFuIG9uZSB2YXJpYWJsZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFybmFtZSA9IG5vZGUubmFtZTtcblxuICAgICAgICBpZiAobm9QYWkgPT09IG51bGwpIHtcbiAgICAgICAgICBjb2VmZmljaWVudHNbMV0gPSAxO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBeOiBTeW1ib2wgaXMgRmlyc3QgY2hpbGRcblxuXG4gICAgICAgIGlmIChub1BhaS5vcCA9PT0gJ14nICYmIG8ubm9GaWwgIT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luIHBvd2VyIHRoZSB2YXJpYWJsZSBzaG91bGQgYmUgdGhlIGZpcnN0IHBhcmFtZXRlcicpO1xuICAgICAgICB9IC8vICo6IFN5bWJvbCBpcyBTZWNvbmQgY2hpbGRcblxuXG4gICAgICAgIGlmIChub1BhaS5vcCA9PT0gJyonICYmIG8ubm9GaWwgIT09IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luIG11bHRpcGx5IHRoZSB2YXJpYWJsZSBzaG91bGQgYmUgdGhlIHNlY29uZCBwYXJhbWV0ZXInKTtcbiAgICAgICAgfSAvLyBTeW1ib2w6IGZpcmVycyAnJywqID0+IGl0IG1lYW5zIHRoZXJlIGlzIG5vIGV4cG9uZW50IGFib3ZlLCBzbyBpdCdzIDEgKGN0ZSAqIHZhcilcblxuXG4gICAgICAgIGlmIChvLmZpcmUgPT09ICcnIHx8IG8uZmlyZSA9PT0gJyonKSB7XG4gICAgICAgICAgaWYgKG1heEV4cG8gPCAxKSBjb2VmZmljaWVudHNbMV0gPSAwO1xuICAgICAgICAgIGNvZWZmaWNpZW50c1sxXSArPSBvLmN0ZSAqIChvLm9wZXIgPT09ICcrJyA/IDEgOiAtMSk7XG4gICAgICAgICAgbWF4RXhwbyA9IE1hdGgubWF4KDEsIG1heEV4cG8pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRwID09PSAnQ29uc3RhbnROb2RlJykge1xuICAgICAgICB2YXIgdmFsb3IgPSBwYXJzZUZsb2F0KG5vZGUudmFsdWUpO1xuXG4gICAgICAgIGlmIChub1BhaSA9PT0gbnVsbCkge1xuICAgICAgICAgIGNvZWZmaWNpZW50c1swXSA9IHZhbG9yO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub1BhaS5vcCA9PT0gJ14nKSB7XG4gICAgICAgICAgLy8gY3RlOiBzZWNvbmQgIGNoaWxkIG9mIHBvd2VyXG4gICAgICAgICAgaWYgKG8ubm9GaWwgIT09IDEpIHRocm93IG5ldyBFcnJvcignQ29uc3RhbnQgY2Fubm90IGJlIHBvd2VyZWQnKTtcblxuICAgICAgICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh2YWxvcikgfHwgdmFsb3IgPD0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb24taW50ZWdlciBleHBvbmVudCBpcyBub3QgYWxsb3dlZCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAodmFyIF9pMiA9IG1heEV4cG8gKyAxOyBfaTIgPCB2YWxvcjsgX2kyKyspIHtcbiAgICAgICAgICAgIGNvZWZmaWNpZW50c1tfaTJdID0gMDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsb3IgPiBtYXhFeHBvKSBjb2VmZmljaWVudHNbdmFsb3JdID0gMDtcbiAgICAgICAgICBjb2VmZmljaWVudHNbdmFsb3JdICs9IG8uY3RlICogKG8ub3BlciA9PT0gJysnID8gMSA6IC0xKTtcbiAgICAgICAgICBtYXhFeHBvID0gTWF0aC5tYXgodmFsb3IsIG1heEV4cG8pO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIG8uY3RlID0gdmFsb3I7IC8vIEN0ZTogZmlyZXIgJycgPT4gVGhlcmUgaXMgbm8gZXhwb25lbnQgYW5kIG5vIG11bHRpcGxpY2F0aW9uLCBzbyB0aGUgZXhwb25lbnQgaXMgMC5cblxuICAgICAgICBpZiAoby5maXJlID09PSAnJykge1xuICAgICAgICAgIGNvZWZmaWNpZW50c1swXSArPSBvLmN0ZSAqIChvLm9wZXIgPT09ICcrJyA/IDEgOiAtMSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVHlwZSAnICsgdHAgKyAnIGlzIG5vdCBhbGxvd2VkJyk7XG4gICAgICB9XG4gICAgfSAvLyBFbmQgb2YgcmVjdXJQb2xcblxuICB9IC8vIEVuZCBvZiBwb2x5VG9DYW5vbmljYWxcblxuXG4gIHJldHVybiByYXRpb25hbGl6ZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVSYXRpb25hbGl6ZSA9IGNyZWF0ZVJhdGlvbmFsaXplOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTaW1wbGlmeSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoXCIuL3NpbXBsaWZ5L3V0aWxcIik7XG5cbnZhciBfc2ltcGxpZnlDb3JlID0gcmVxdWlyZShcIi4vc2ltcGxpZnkvc2ltcGxpZnlDb3JlXCIpO1xuXG52YXIgX3NpbXBsaWZ5Q29uc3RhbnQgPSByZXF1aXJlKFwiLi9zaW1wbGlmeS9zaW1wbGlmeUNvbnN0YW50XCIpO1xuXG52YXIgX3Jlc29sdmUgPSByZXF1aXJlKFwiLi9zaW1wbGlmeS9yZXNvbHZlXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIG5hbWUgPSAnc2ltcGxpZnknO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ3R5cGVkJywgJ3BhcnNlJywgJ2FkZCcsICdzdWJ0cmFjdCcsICdtdWx0aXBseScsICdkaXZpZGUnLCAncG93JywgJ2lzWmVybycsICdlcXVhbCcsICc/ZnJhY3Rpb24nLCAnP2JpZ251bWJlcicsICdtYXRoV2l0aFRyYW5zZm9ybScsICdDb25zdGFudE5vZGUnLCAnRnVuY3Rpb25Ob2RlJywgJ09wZXJhdG9yTm9kZScsICdQYXJlbnRoZXNpc05vZGUnLCAnU3ltYm9sTm9kZSddO1xudmFyIGNyZWF0ZVNpbXBsaWZ5ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgcGFyc2UgPSBfcmVmLnBhcnNlLFxuICAgICAgYWRkID0gX3JlZi5hZGQsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICBkaXZpZGUgPSBfcmVmLmRpdmlkZSxcbiAgICAgIHBvdyA9IF9yZWYucG93LFxuICAgICAgaXNaZXJvID0gX3JlZi5pc1plcm8sXG4gICAgICBlcXVhbCA9IF9yZWYuZXF1YWwsXG4gICAgICBmcmFjdGlvbiA9IF9yZWYuZnJhY3Rpb24sXG4gICAgICBiaWdudW1iZXIgPSBfcmVmLmJpZ251bWJlcixcbiAgICAgIG1hdGhXaXRoVHJhbnNmb3JtID0gX3JlZi5tYXRoV2l0aFRyYW5zZm9ybSxcbiAgICAgIENvbnN0YW50Tm9kZSA9IF9yZWYuQ29uc3RhbnROb2RlLFxuICAgICAgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsXG4gICAgICBPcGVyYXRvck5vZGUgPSBfcmVmLk9wZXJhdG9yTm9kZSxcbiAgICAgIFBhcmVudGhlc2lzTm9kZSA9IF9yZWYuUGFyZW50aGVzaXNOb2RlLFxuICAgICAgU3ltYm9sTm9kZSA9IF9yZWYuU3ltYm9sTm9kZTtcbiAgdmFyIHNpbXBsaWZ5Q29uc3RhbnQgPSAoMCwgX3NpbXBsaWZ5Q29uc3RhbnQuY3JlYXRlU2ltcGxpZnlDb25zdGFudCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBjb25maWc6IGNvbmZpZyxcbiAgICBtYXRoV2l0aFRyYW5zZm9ybTogbWF0aFdpdGhUcmFuc2Zvcm0sXG4gICAgZnJhY3Rpb246IGZyYWN0aW9uLFxuICAgIGJpZ251bWJlcjogYmlnbnVtYmVyLFxuICAgIENvbnN0YW50Tm9kZTogQ29uc3RhbnROb2RlLFxuICAgIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICAgIEZ1bmN0aW9uTm9kZTogRnVuY3Rpb25Ob2RlLFxuICAgIFN5bWJvbE5vZGU6IFN5bWJvbE5vZGVcbiAgfSk7XG4gIHZhciBzaW1wbGlmeUNvcmUgPSAoMCwgX3NpbXBsaWZ5Q29yZS5jcmVhdGVTaW1wbGlmeUNvcmUpKHtcbiAgICBlcXVhbDogZXF1YWwsXG4gICAgaXNaZXJvOiBpc1plcm8sXG4gICAgYWRkOiBhZGQsXG4gICAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICBkaXZpZGU6IGRpdmlkZSxcbiAgICBwb3c6IHBvdyxcbiAgICBDb25zdGFudE5vZGU6IENvbnN0YW50Tm9kZSxcbiAgICBPcGVyYXRvck5vZGU6IE9wZXJhdG9yTm9kZSxcbiAgICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZVxuICB9KTtcbiAgdmFyIHJlc29sdmUgPSAoMCwgX3Jlc29sdmUuY3JlYXRlUmVzb2x2ZSkoe1xuICAgIHBhcnNlOiBwYXJzZSxcbiAgICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgICBPcGVyYXRvck5vZGU6IE9wZXJhdG9yTm9kZSxcbiAgICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZVxuICB9KTtcblxuICB2YXIgX2NyZWF0ZVV0aWwgPSAoMCwgX3V0aWwuY3JlYXRlVXRpbCkoe1xuICAgIEZ1bmN0aW9uTm9kZTogRnVuY3Rpb25Ob2RlLFxuICAgIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICAgIFN5bWJvbE5vZGU6IFN5bWJvbE5vZGVcbiAgfSksXG4gICAgICBpc0NvbW11dGF0aXZlID0gX2NyZWF0ZVV0aWwuaXNDb21tdXRhdGl2ZSxcbiAgICAgIGlzQXNzb2NpYXRpdmUgPSBfY3JlYXRlVXRpbC5pc0Fzc29jaWF0aXZlLFxuICAgICAgZmxhdHRlbiA9IF9jcmVhdGVVdGlsLmZsYXR0ZW4sXG4gICAgICB1bmZsYXR0ZW5yID0gX2NyZWF0ZVV0aWwudW5mbGF0dGVucixcbiAgICAgIHVuZmxhdHRlbmwgPSBfY3JlYXRlVXRpbC51bmZsYXR0ZW5sLFxuICAgICAgY3JlYXRlTWFrZU5vZGVGdW5jdGlvbiA9IF9jcmVhdGVVdGlsLmNyZWF0ZU1ha2VOb2RlRnVuY3Rpb247XG4gIC8qKlxuICAgKiBTaW1wbGlmeSBhbiBleHByZXNzaW9uIHRyZWUuXG4gICAqXG4gICAqIEEgbGlzdCBvZiBydWxlcyBhcmUgYXBwbGllZCB0byBhbiBleHByZXNzaW9uLCByZXBlYXRpbmcgb3ZlciB0aGUgbGlzdCB1bnRpbFxuICAgKiBubyBmdXJ0aGVyIGNoYW5nZXMgYXJlIG1hZGUuXG4gICAqIEl0J3MgcG9zc2libGUgdG8gcGFzcyBhIGN1c3RvbSBzZXQgb2YgcnVsZXMgdG8gdGhlIGZ1bmN0aW9uIGFzIHNlY29uZFxuICAgKiBhcmd1bWVudC4gQSBydWxlIGNhbiBiZSBzcGVjaWZpZWQgYXMgYW4gb2JqZWN0LCBzdHJpbmcsIG9yIGZ1bmN0aW9uOlxuICAgKlxuICAgKiAgICAgY29uc3QgcnVsZXMgPSBbXG4gICAqICAgICAgIHsgbDogJ24xKm4zICsgbjIqbjMnLCByOiAnKG4xK24yKSpuMycgfSxcbiAgICogICAgICAgJ24xKm4zICsgbjIqbjMgLT4gKG4xK24yKSpuMycsXG4gICAqICAgICAgIGZ1bmN0aW9uIChub2RlKSB7XG4gICAqICAgICAgICAgLy8gLi4uIHJldHVybiBhIG5ldyBub2RlIG9yIHJldHVybiB0aGUgbm9kZSB1bmNoYW5nZWRcbiAgICogICAgICAgICByZXR1cm4gbm9kZVxuICAgKiAgICAgICB9XG4gICAqICAgICBdXG4gICAqXG4gICAqIFN0cmluZyBhbmQgb2JqZWN0IHJ1bGVzIGNvbnNpc3Qgb2YgYSBsZWZ0IGFuZCByaWdodCBwYXR0ZXJuLiBUaGUgbGVmdCBpc1xuICAgKiB1c2VkIHRvIG1hdGNoIGFnYWluc3QgdGhlIGV4cHJlc3Npb24gYW5kIHRoZSByaWdodCBkZXRlcm1pbmVzIHdoYXQgbWF0Y2hlc1xuICAgKiBhcmUgcmVwbGFjZWQgd2l0aC4gVGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIGEgcGF0dGVybiBhbmQgYSBub3JtYWxcbiAgICogZXhwcmVzc2lvbiBpcyB0aGF0IHZhcmlhYmxlcyBzdGFydGluZyB3aXRoIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycyBhcmVcbiAgICogaW50ZXJwcmV0ZWQgYXMgd2lsZGNhcmRzOlxuICAgKlxuICAgKiAtICduJyAtIG1hdGNoZXMgYW55IE5vZGVcbiAgICogLSAnYycgLSBtYXRjaGVzIGFueSBDb25zdGFudE5vZGVcbiAgICogLSAndicgLSBtYXRjaGVzIGFueSBOb2RlIHRoYXQgaXMgbm90IGEgQ29uc3RhbnROb2RlXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IGxpc3Qgb2YgcnVsZXMgaXMgZXhwb3NlZCBvbiB0aGUgZnVuY3Rpb24gYXMgYHNpbXBsaWZ5LnJ1bGVzYFxuICAgKiBhbmQgY2FuIGJlIHVzZWQgYXMgYSBiYXNpcyB0byBidWlsdCBhIHNldCBvZiBjdXN0b20gcnVsZXMuXG4gICAqXG4gICAqIEZvciBtb3JlIGRldGFpbHMgb24gdGhlIHRoZW9yeSwgc2VlOlxuICAgKlxuICAgKiAtIFtTdHJhdGVnaWVzIGZvciBzaW1wbGlmeWluZyBtYXRoIGV4cHJlc3Npb25zIChTdGFja292ZXJmbG93KV0oaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzU0MDIyNy9zdHJhdGVnaWVzLWZvci1zaW1wbGlmeWluZy1tYXRoLWV4cHJlc3Npb25zKVxuICAgKiAtIFtTeW1ib2xpYyBjb21wdXRhdGlvbiAtIFNpbXBsaWZpY2F0aW9uIChXaWtpcGVkaWEpXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TeW1ib2xpY19jb21wdXRhdGlvbiNTaW1wbGlmaWNhdGlvbilcbiAgICpcbiAgICogIEFuIG9wdGlvbmFsIGBvcHRpb25zYCBhcmd1bWVudCBjYW4gYmUgcGFzc2VkIGFzIGxhc3QgYXJndW1lbnQgb2YgYHNpbXBsaWZ5YC5cbiAgICogIFRoZXJlIGlzIGN1cnJlbnRseSBvbmUgb3B0aW9uIGF2YWlsYWJsZTogYGV4YWN0RnJhY3Rpb25zYCwgYSBib29sZWFuIHdoaWNoXG4gICAqICBpcyBgdHJ1ZWAgYnkgZGVmYXVsdC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgc2ltcGxpZnkoZXhwcilcbiAgICogICAgIHNpbXBsaWZ5KGV4cHIsIHJ1bGVzKVxuICAgKiAgICAgc2ltcGxpZnkoZXhwciwgcnVsZXMpXG4gICAqICAgICBzaW1wbGlmeShleHByLCBydWxlcywgc2NvcGUpXG4gICAqICAgICBzaW1wbGlmeShleHByLCBydWxlcywgc2NvcGUsIG9wdGlvbnMpXG4gICAqICAgICBzaW1wbGlmeShleHByLCBzY29wZSlcbiAgICogICAgIHNpbXBsaWZ5KGV4cHIsIHNjb3BlLCBvcHRpb25zKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGguc2ltcGxpZnkoJzIgKiAxICogeCBeICgyIC0gMSknKSAgICAgIC8vIE5vZGUgXCIyICogeFwiXG4gICAqICAgICBtYXRoLnNpbXBsaWZ5KCcyICogMyAqIHgnLCB7eDogNH0pICAgICAgICAvLyBOb2RlIFwiMjRcIlxuICAgKiAgICAgY29uc3QgZiA9IG1hdGgucGFyc2UoJzIgKiAxICogeCBeICgyIC0gMSknKVxuICAgKiAgICAgbWF0aC5zaW1wbGlmeShmKSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9kZSBcIjIgKiB4XCJcbiAgICogICAgIG1hdGguc2ltcGxpZnkoJzAuNCAqIHgnLCB7fSwge2V4YWN0RnJhY3Rpb25zOiB0cnVlfSkgIC8vIE5vZGUgXCJ4ICogMiAvIDVcIlxuICAgKiAgICAgbWF0aC5zaW1wbGlmeSgnMC40ICogeCcsIHt9LCB7ZXhhY3RGcmFjdGlvbnM6IGZhbHNlfSkgLy8gTm9kZSBcIjAuNCAqIHhcIlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIGRlcml2YXRpdmUsIHBhcnNlLCBldmFsdWF0ZSwgcmF0aW9uYWxpemVcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlIHwgc3RyaW5nfSBleHByXG4gICAqICAgICAgICAgICAgVGhlIGV4cHJlc3Npb24gdG8gYmUgc2ltcGxpZmllZFxuICAgKiBAcGFyYW0ge0FycmF5PHtsOnN0cmluZywgcjogc3RyaW5nfSB8IHN0cmluZyB8IGZ1bmN0aW9uPn0gW3J1bGVzXVxuICAgKiAgICAgICAgICAgIE9wdGlvbmFsIGxpc3Qgd2l0aCBjdXN0b20gcnVsZXNcbiAgICogQHJldHVybiB7Tm9kZX0gUmV0dXJucyB0aGUgc2ltcGxpZmllZCBmb3JtIG9mIGBleHByYFxuICAgKi9cblxuXG4gIHZhciBzaW1wbGlmeSA9IHR5cGVkKCdzaW1wbGlmeScsIHtcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhleHByKSB7XG4gICAgICByZXR1cm4gc2ltcGxpZnkocGFyc2UoZXhwciksIHNpbXBsaWZ5LnJ1bGVzLCB7fSwge30pO1xuICAgIH0sXG4gICAgJ3N0cmluZywgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nT2JqZWN0KGV4cHIsIHNjb3BlKSB7XG4gICAgICByZXR1cm4gc2ltcGxpZnkocGFyc2UoZXhwciksIHNpbXBsaWZ5LnJ1bGVzLCBzY29wZSwge30pO1xuICAgIH0sXG4gICAgJ3N0cmluZywgT2JqZWN0LCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdPYmplY3RPYmplY3QoZXhwciwgc2NvcGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBzaW1wbGlmeShwYXJzZShleHByKSwgc2ltcGxpZnkucnVsZXMsIHNjb3BlLCBvcHRpb25zKTtcbiAgICB9LFxuICAgICdzdHJpbmcsIEFycmF5JzogZnVuY3Rpb24gc3RyaW5nQXJyYXkoZXhwciwgcnVsZXMpIHtcbiAgICAgIHJldHVybiBzaW1wbGlmeShwYXJzZShleHByKSwgcnVsZXMsIHt9LCB7fSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBBcnJheSwgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nQXJyYXlPYmplY3QoZXhwciwgcnVsZXMsIHNjb3BlKSB7XG4gICAgICByZXR1cm4gc2ltcGxpZnkocGFyc2UoZXhwciksIHJ1bGVzLCBzY29wZSwge30pO1xuICAgIH0sXG4gICAgJ3N0cmluZywgQXJyYXksIE9iamVjdCwgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nQXJyYXlPYmplY3RPYmplY3QoZXhwciwgcnVsZXMsIHNjb3BlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gc2ltcGxpZnkocGFyc2UoZXhwciksIHJ1bGVzLCBzY29wZSwgb3B0aW9ucyk7XG4gICAgfSxcbiAgICAnTm9kZSwgT2JqZWN0JzogZnVuY3Rpb24gTm9kZU9iamVjdChleHByLCBzY29wZSkge1xuICAgICAgcmV0dXJuIHNpbXBsaWZ5KGV4cHIsIHNpbXBsaWZ5LnJ1bGVzLCBzY29wZSwge30pO1xuICAgIH0sXG4gICAgJ05vZGUsIE9iamVjdCwgT2JqZWN0JzogZnVuY3Rpb24gTm9kZU9iamVjdE9iamVjdChleHByLCBzY29wZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIHNpbXBsaWZ5KGV4cHIsIHNpbXBsaWZ5LnJ1bGVzLCBzY29wZSwgb3B0aW9ucyk7XG4gICAgfSxcbiAgICBOb2RlOiBmdW5jdGlvbiBOb2RlKGV4cHIpIHtcbiAgICAgIHJldHVybiBzaW1wbGlmeShleHByLCBzaW1wbGlmeS5ydWxlcywge30sIHt9KTtcbiAgICB9LFxuICAgICdOb2RlLCBBcnJheSc6IGZ1bmN0aW9uIE5vZGVBcnJheShleHByLCBydWxlcykge1xuICAgICAgcmV0dXJuIHNpbXBsaWZ5KGV4cHIsIHJ1bGVzLCB7fSwge30pO1xuICAgIH0sXG4gICAgJ05vZGUsIEFycmF5LCBPYmplY3QnOiBmdW5jdGlvbiBOb2RlQXJyYXlPYmplY3QoZXhwciwgcnVsZXMsIHNjb3BlKSB7XG4gICAgICByZXR1cm4gc2ltcGxpZnkoZXhwciwgcnVsZXMsIHNjb3BlLCB7fSk7XG4gICAgfSxcbiAgICAnTm9kZSwgQXJyYXksIE9iamVjdCwgT2JqZWN0JzogZnVuY3Rpb24gTm9kZUFycmF5T2JqZWN0T2JqZWN0KGV4cHIsIHJ1bGVzLCBzY29wZSwgb3B0aW9ucykge1xuICAgICAgcnVsZXMgPSBfYnVpbGRSdWxlcyhydWxlcyk7XG4gICAgICB2YXIgcmVzID0gcmVzb2x2ZShleHByLCBzY29wZSk7XG4gICAgICByZXMgPSByZW1vdmVQYXJlbnMocmVzKTtcbiAgICAgIHZhciB2aXNpdGVkID0ge307XG4gICAgICB2YXIgc3RyID0gcmVzLnRvU3RyaW5nKHtcbiAgICAgICAgcGFyZW50aGVzaXM6ICdhbGwnXG4gICAgICB9KTtcblxuICAgICAgd2hpbGUgKCF2aXNpdGVkW3N0cl0pIHtcbiAgICAgICAgdmlzaXRlZFtzdHJdID0gdHJ1ZTtcbiAgICAgICAgX2xhc3RzeW0gPSAwOyAvLyBjb3VudGVyIGZvciBwbGFjZWhvbGRlciBzeW1ib2xzXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICh0eXBlb2YgcnVsZXNbaV0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJlcyA9IHJ1bGVzW2ldKHJlcywgb3B0aW9ucyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZsYXR0ZW4ocmVzKTtcbiAgICAgICAgICAgIHJlcyA9IGFwcGx5UnVsZShyZXMsIHJ1bGVzW2ldKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB1bmZsYXR0ZW5sKHJlcyk7IC8vIHVzaW5nIGxlZnQtaGVhdnkgYmluYXJ5IHRyZWUgaGVyZSBzaW5jZSBjdXN0b20gcnVsZSBmdW5jdGlvbnMgbWF5IGV4cGVjdCBpdFxuICAgICAgICB9XG5cbiAgICAgICAgc3RyID0gcmVzLnRvU3RyaW5nKHtcbiAgICAgICAgICBwYXJlbnRoZXNpczogJ2FsbCdcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICB9KTtcbiAgc2ltcGxpZnkuc2ltcGxpZnlDb3JlID0gc2ltcGxpZnlDb3JlO1xuICBzaW1wbGlmeS5yZXNvbHZlID0gcmVzb2x2ZTtcblxuICBmdW5jdGlvbiByZW1vdmVQYXJlbnMobm9kZSkge1xuICAgIHJldHVybiBub2RlLnRyYW5zZm9ybShmdW5jdGlvbiAobm9kZSwgcGF0aCwgcGFyZW50KSB7XG4gICAgICByZXR1cm4gKDAsIF9pcy5pc1BhcmVudGhlc2lzTm9kZSkobm9kZSkgPyByZW1vdmVQYXJlbnMobm9kZS5jb250ZW50KSA6IG5vZGU7XG4gICAgfSk7XG4gIH0gLy8gQWxsIGNvbnN0YW50cyB0aGF0IGFyZSBhbGxvd2VkIGluIHJ1bGVzXG5cblxuICB2YXIgU1VQUE9SVEVEX0NPTlNUQU5UUyA9IHtcbiAgICBcInRydWVcIjogdHJ1ZSxcbiAgICBcImZhbHNlXCI6IHRydWUsXG4gICAgZTogdHJ1ZSxcbiAgICBpOiB0cnVlLFxuICAgIEluZmluaXR5OiB0cnVlLFxuICAgIExOMjogdHJ1ZSxcbiAgICBMTjEwOiB0cnVlLFxuICAgIExPRzJFOiB0cnVlLFxuICAgIExPRzEwRTogdHJ1ZSxcbiAgICBOYU46IHRydWUsXG4gICAgcGhpOiB0cnVlLFxuICAgIHBpOiB0cnVlLFxuICAgIFNRUlQxXzI6IHRydWUsXG4gICAgU1FSVDI6IHRydWUsXG4gICAgdGF1OiB0cnVlIC8vIG51bGw6IGZhbHNlLFxuICAgIC8vIHVuZGVmaW5lZDogZmFsc2UsXG4gICAgLy8gdmVyc2lvbjogZmFsc2UsXG5cbiAgfTsgLy8gQXJyYXkgb2Ygc3RyaW5ncywgdXNlZCB0byBidWlsZCB0aGUgcnVsZVNldC5cbiAgLy8gRWFjaCBsIChsZWZ0IHNpZGUpIGFuZCByIChyaWdodCBzaWRlKSBhcmUgcGFyc2VkIGJ5XG4gIC8vIHRoZSBleHByZXNzaW9uIHBhcnNlciBpbnRvIGEgbm9kZSB0cmVlLlxuICAvLyBMZWZ0IGhhbmQgc2lkZXMgYXJlIG1hdGNoZWQgdG8gc3VidHJlZXMgd2l0aGluIHRoZVxuICAvLyBleHByZXNzaW9uIHRvIGJlIHBhcnNlZCBhbmQgcmVwbGFjZWQgd2l0aCB0aGUgcmlnaHRcbiAgLy8gaGFuZCBzaWRlLlxuICAvLyBUT0RPOiBBZGQgc3VwcG9ydCBmb3IgY29uc3RyYWludHMgb24gY29uc3RhbnRzIChlaXRoZXIgaW4gdGhlIGZvcm0gb2YgYSAnPScgZXhwcmVzc2lvbiBvciBhIGNhbGxiYWNrIFtjYWxsYmFjayBhbGxvd3MgdGhpbmdzIGxpa2UgY29tcGFyaW5nIHN5bWJvbHMgYWxwaGFiZXRpY2FsbHldKVxuICAvLyBUbyBldmFsdWF0ZSBsaHMgY29uc3RhbnRzIGZvciByaHMgY29uc3RhbnRzLCB1c2U6IHsgbDogJ2MxK2MyJywgcjogJ2MzJywgZXZhbHVhdGU6ICdjMyA9IGMxICsgYzInIH0uIE11bHRpcGxlIGFzc2lnbm1lbnRzIGFyZSBzZXBhcmF0ZWQgYnkgJzsnIGluIGJsb2NrIGZvcm1hdC5cbiAgLy8gSXQgaXMgcG9zc2libGUgdG8gZ2V0IGludG8gYW4gaW5maW5pdGUgbG9vcCB3aXRoIGNvbmZsaWN0aW5nIHJ1bGVzXG5cbiAgc2ltcGxpZnkucnVsZXMgPSBbc2ltcGxpZnlDb3JlLCAvLyB7IGw6ICduKzAnLCByOiAnbicgfSwgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICduXjAnLCByOiAnMScgfSwgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICcwKm4nLCByOiAnMCcgfSwgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICduL24nLCByOiAnMSd9LCAgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICduXjEnLCByOiAnbicgfSwgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICcrbjEnLCByOiduMScgfSwgICAgIC8vIHNpbXBsaWZ5Q29yZVxuICAvLyB7IGw6ICduLS1uMScsIHI6J24rbjEnIH0sIC8vIHNpbXBsaWZ5Q29yZVxuICB7XG4gICAgbDogJ2xvZyhlKScsXG4gICAgcjogJzEnXG4gIH0sIC8vIHRlbXBvcmFyeSBydWxlc1xuICB7XG4gICAgbDogJ24tbjEnLFxuICAgIHI6ICduKy1uMSdcbiAgfSwgLy8gdGVtcG9yYXJpbHkgcmVwbGFjZSAnc3VidHJhY3QnIHNvIHdlIGNhbiBmdXJ0aGVyIGZsYXR0ZW4gdGhlICdhZGQnIG9wZXJhdG9yXG4gIHtcbiAgICBsOiAnLShjKnYpJyxcbiAgICByOiAnKC1jKSAqIHYnXG4gIH0sIC8vIG1ha2Ugbm9uLWNvbnN0YW50IHRlcm1zIHBvc2l0aXZlXG4gIHtcbiAgICBsOiAnLXYnLFxuICAgIHI6ICcoLTEpICogdidcbiAgfSwge1xuICAgIGw6ICduL24xXm4yJyxcbiAgICByOiAnbipuMV4tbjInXG4gIH0sIC8vIHRlbXBvcmFyaWx5IHJlcGxhY2UgJ2RpdmlkZScgc28gd2UgY2FuIGZ1cnRoZXIgZmxhdHRlbiB0aGUgJ211bHRpcGx5JyBvcGVyYXRvclxuICB7XG4gICAgbDogJ24vbjEnLFxuICAgIHI6ICduKm4xXi0xJ1xuICB9LCAvLyBleHBhbmQgbmVzdGVkIGV4cG9uZW50aWF0aW9uXG4gIHtcbiAgICBsOiAnKG4gXiBuMSkgXiBuMicsXG4gICAgcjogJ24gXiAobjEgKiBuMiknXG4gIH0sIC8vIGNvbGxlY3QgbGlrZSBmYWN0b3JzXG4gIHtcbiAgICBsOiAnbipuJyxcbiAgICByOiAnbl4yJ1xuICB9LCB7XG4gICAgbDogJ24gKiBuXm4xJyxcbiAgICByOiAnbl4objErMSknXG4gIH0sIHtcbiAgICBsOiAnbl5uMSAqIG5ebjInLFxuICAgIHI6ICduXihuMStuMiknXG4gIH0sIC8vIGNvbGxlY3QgbGlrZSB0ZXJtc1xuICB7XG4gICAgbDogJ24rbicsXG4gICAgcjogJzIqbidcbiAgfSwge1xuICAgIGw6ICduKy1uJyxcbiAgICByOiAnMCdcbiAgfSwge1xuICAgIGw6ICduMSpuMiArIG4yJyxcbiAgICByOiAnKG4xKzEpKm4yJ1xuICB9LCB7XG4gICAgbDogJ24xKm4zICsgbjIqbjMnLFxuICAgIHI6ICcobjErbjIpKm4zJ1xuICB9LCAvLyByZW1vdmUgcGFyZW50aGVzaXMgaW4gdGhlIGNhc2Ugb2YgbmVnYXRpbmcgYSBxdWFudGl0aXlcbiAge1xuICAgIGw6ICduMSArIC0xICogKG4yICsgbjMpJyxcbiAgICByOiAnbjEgKyAtMSAqIG4yICsgLTEgKiBuMydcbiAgfSwgc2ltcGxpZnlDb25zdGFudCwge1xuICAgIGw6ICcoLW4pKm4xJyxcbiAgICByOiAnLShuKm4xKSdcbiAgfSwgLy8gbWFrZSBmYWN0b3JzIHBvc2l0aXZlIChhbmQgdW5kbyAnbWFrZSBub24tY29uc3RhbnQgdGVybXMgcG9zaXRpdmUnKVxuICAvLyBvcmRlcmluZyBvZiBjb25zdGFudHNcbiAge1xuICAgIGw6ICdjK3YnLFxuICAgIHI6ICd2K2MnLFxuICAgIGNvbnRleHQ6IHtcbiAgICAgIGFkZDoge1xuICAgICAgICBjb21tdXRhdGl2ZTogZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBsOiAndipjJyxcbiAgICByOiAnYyp2JyxcbiAgICBjb250ZXh0OiB7XG4gICAgICBtdWx0aXBseToge1xuICAgICAgICBjb21tdXRhdGl2ZTogZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gIH0sIC8vIHVuZG8gdGVtcG9yYXJ5IHJ1bGVzXG4gIC8vIHsgbDogJygtMSkgKiBuJywgcjogJy1uJyB9LCAvLyAjODExIGFkZGVkIHRlc3Qgd2hpY2ggcHJvdmVkIHRoaXMgaXMgcmVkdW5kYW50XG4gIHtcbiAgICBsOiAnbistbjEnLFxuICAgIHI6ICduLW4xJ1xuICB9LCAvLyB1bmRvIHJlcGxhY2UgJ3N1YnRyYWN0J1xuICB7XG4gICAgbDogJ24qKG4xXi0xKScsXG4gICAgcjogJ24vbjEnXG4gIH0sIC8vIHVuZG8gcmVwbGFjZSAnZGl2aWRlJ1xuICB7XG4gICAgbDogJ24qbjFeLW4yJyxcbiAgICByOiAnbi9uMV5uMidcbiAgfSwge1xuICAgIGw6ICduMV4tMScsXG4gICAgcjogJzEvbjEnXG4gIH0sIHtcbiAgICBsOiAnbioobjEvbjIpJyxcbiAgICByOiAnKG4qbjEpL24yJ1xuICB9LCAvLyAnKicgYmVmb3JlICcvJ1xuICB7XG4gICAgbDogJ24tKG4xK24yKScsXG4gICAgcjogJ24tbjEtbjInXG4gIH0sIC8vICctJyBiZWZvcmUgJysnXG4gIC8vIHsgbDogJyhuMS9uMikvbjMnLCByOiAnbjEvKG4yKm4zKScgfSxcbiAgLy8geyBsOiAnKG4qbjEpLyhuKm4yKScsIHI6ICduMS9uMicgfSxcbiAge1xuICAgIGw6ICcxKm4nLFxuICAgIHI6ICduJ1xuICB9LCAvLyB0aGlzIHBhdHRlcm4gY2FuIGJlIHByb2R1Y2VkIGJ5IHNpbXBsaWZ5Q29uc3RhbnRcbiAge1xuICAgIGw6ICduMS8objIvbjMpJyxcbiAgICByOiAnKG4xKm4zKS9uMidcbiAgfV07XG4gIC8qKlxuICAgKiBQYXJzZSB0aGUgc3RyaW5nIGFycmF5IG9mIHJ1bGVzIGludG8gbm9kZXNcbiAgICpcbiAgICogRXhhbXBsZSBzeW50YXggZm9yIHJ1bGVzOlxuICAgKlxuICAgKiBQb3NpdGlvbiBjb25zdGFudHMgdG8gdGhlIGxlZnQgaW4gYSBwcm9kdWN0OlxuICAgKiB7IGw6ICduMSAqIGMxJywgcjogJ2MxICogbjEnIH1cbiAgICogbjEgaXMgYW55IE5vZGUsIGFuZCBjMSBpcyBhIENvbnN0YW50Tm9kZS5cbiAgICpcbiAgICogQXBwbHkgZGlmZmVyZW5jZSBvZiBzcXVhcmVzIGZvcm11bGE6XG4gICAqIHsgbDogJyhuMSAtIG4yKSAqIChuMSArIG4yKScsIHI6ICduMV4yIC0gbjJeMicgfVxuICAgKiBuMSwgbjIgbWVhbiBhbnkgTm9kZS5cbiAgICpcbiAgICogU2hvcnQgaGFuZCBub3RhdGlvbjpcbiAgICogJ24xICogYzEgLT4gYzEgKiBuMSdcbiAgICovXG5cbiAgZnVuY3Rpb24gX2J1aWxkUnVsZXMocnVsZXMpIHtcbiAgICAvLyBBcnJheSBvZiBydWxlcyB0byBiZSB1c2VkIHRvIHNpbXBsaWZ5IGV4cHJlc3Npb25zXG4gICAgdmFyIHJ1bGVTZXQgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBydWxlID0gcnVsZXNbaV07XG4gICAgICB2YXIgbmV3UnVsZSA9IHZvaWQgMDtcblxuICAgICAgdmFyIHJ1bGVUeXBlID0gX3R5cGVvZihydWxlKTtcblxuICAgICAgc3dpdGNoIChydWxlVHlwZSkge1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHZhciBsciA9IHJ1bGUuc3BsaXQoJy0+Jyk7XG5cbiAgICAgICAgICAgIGlmIChsci5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgcnVsZSA9IHtcbiAgICAgICAgICAgICAgICBsOiBsclswXSxcbiAgICAgICAgICAgICAgICByOiBsclsxXVxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgU3ludGF4RXJyb3IoJ0NvdWxkIG5vdCBwYXJzZSBydWxlOiAnICsgcnVsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgIG5ld1J1bGUgPSB7XG4gICAgICAgICAgICBsOiByZW1vdmVQYXJlbnMocGFyc2UocnVsZS5sKSksXG4gICAgICAgICAgICByOiByZW1vdmVQYXJlbnMocGFyc2UocnVsZS5yKSlcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgaWYgKHJ1bGUuY29udGV4dCkge1xuICAgICAgICAgICAgbmV3UnVsZS5ldmFsdWF0ZSA9IHJ1bGUuY29udGV4dDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocnVsZS5ldmFsdWF0ZSkge1xuICAgICAgICAgICAgbmV3UnVsZS5ldmFsdWF0ZSA9IHBhcnNlKHJ1bGUuZXZhbHVhdGUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChpc0Fzc29jaWF0aXZlKG5ld1J1bGUubCkpIHtcbiAgICAgICAgICAgIHZhciBtYWtlTm9kZSA9IGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24obmV3UnVsZS5sKTtcblxuICAgICAgICAgICAgdmFyIGV4cGFuZHN5bSA9IF9nZXRFeHBhbmRQbGFjZWhvbGRlclN5bWJvbCgpO1xuXG4gICAgICAgICAgICBuZXdSdWxlLmV4cGFuZGVkID0ge307XG4gICAgICAgICAgICBuZXdSdWxlLmV4cGFuZGVkLmwgPSBtYWtlTm9kZShbbmV3UnVsZS5sLmNsb25lKCksIGV4cGFuZHN5bV0pOyAvLyBQdXNoIHRoZSBleHBhbmRzeW0gaW50byB0aGUgZGVlcGVzdCBwb3NzaWJsZSBicmFuY2guXG4gICAgICAgICAgICAvLyBUaGlzIGhlbHBzIHRvIG1hdGNoIHRoZSBuZXdSdWxlIGFnYWluc3Qgbm9kZXMgcmV0dXJuZWQgZnJvbSBnZXRTcGxpdHMoKSBsYXRlciBvbi5cblxuICAgICAgICAgICAgZmxhdHRlbihuZXdSdWxlLmV4cGFuZGVkLmwpO1xuICAgICAgICAgICAgdW5mbGF0dGVucihuZXdSdWxlLmV4cGFuZGVkLmwpO1xuICAgICAgICAgICAgbmV3UnVsZS5leHBhbmRlZC5yID0gbWFrZU5vZGUoW25ld1J1bGUuciwgZXhwYW5kc3ltXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICAgIG5ld1J1bGUgPSBydWxlO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdVbnN1cHBvcnRlZCB0eXBlIG9mIHJ1bGU6ICcgKyBydWxlVHlwZSk7XG4gICAgICB9IC8vIGNvbnNvbGUubG9nKCdBZGRpbmcgcnVsZTogJyArIHJ1bGVzW2ldKVxuICAgICAgLy8gY29uc29sZS5sb2cobmV3UnVsZSlcblxuXG4gICAgICBydWxlU2V0LnB1c2gobmV3UnVsZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJ1bGVTZXQ7XG4gIH1cblxuICB2YXIgX2xhc3RzeW0gPSAwO1xuXG4gIGZ1bmN0aW9uIF9nZXRFeHBhbmRQbGFjZWhvbGRlclN5bWJvbCgpIHtcbiAgICByZXR1cm4gbmV3IFN5bWJvbE5vZGUoJ19wJyArIF9sYXN0c3ltKyspO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc2ltcGxmaWVkIGZvcm0gb2Ygbm9kZSwgb3IgdGhlIG9yaWdpbmFsIG5vZGUgaWYgbm8gc2ltcGxpZmljYXRpb24gd2FzIHBvc3NpYmxlLlxuICAgKlxuICAgKiBAcGFyYW0gIHtDb25zdGFudE5vZGUgfCBTeW1ib2xOb2RlIHwgUGFyZW50aGVzaXNOb2RlIHwgRnVuY3Rpb25Ob2RlIHwgT3BlcmF0b3JOb2RlfSBub2RlXG4gICAqIEByZXR1cm4ge0NvbnN0YW50Tm9kZSB8IFN5bWJvbE5vZGUgfCBQYXJlbnRoZXNpc05vZGUgfCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGV9IFRoZSBzaW1wbGlmaWVkIGZvcm0gb2YgYGV4cHJgLCBvciB0aGUgb3JpZ2luYWwgbm9kZSBpZiBubyBzaW1wbGlmaWNhdGlvbiB3YXMgcG9zc2libGUuXG4gICAqL1xuXG5cbiAgdmFyIGFwcGx5UnVsZSA9IHR5cGVkKCdhcHBseVJ1bGUnLCB7XG4gICAgJ05vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIE5vZGVPYmplY3Qobm9kZSwgcnVsZSkge1xuICAgICAgLy8gY29uc29sZS5sb2coJ0VudGVyaW5nIGFwcGx5UnVsZSgnICsgbm9kZS50b1N0cmluZygpICsgJyknKVxuICAgICAgLy8gRG8gbm90IGNsb25lIG5vZGUgdW5sZXNzIHdlIGZpbmQgYSBtYXRjaFxuICAgICAgdmFyIHJlcyA9IG5vZGU7IC8vIEZpcnN0IHJlcGxhY2Ugb3VyIGNoaWxkIG5vZGVzIHdpdGggdGhlaXIgc2ltcGxpZmllZCB2ZXJzaW9uc1xuICAgICAgLy8gSWYgYSBjaGlsZCBjb3VsZCBub3QgYmUgc2ltcGxpZmllZCwgdGhlIGFzc2lnbm1lbnRzIHdpbGwgaGF2ZVxuICAgICAgLy8gbm8gZWZmZWN0IHNpbmNlIHRoZSBub2RlIGlzIHJldHVybmVkIHVuY2hhbmdlZFxuXG4gICAgICBpZiAocmVzIGluc3RhbmNlb2YgT3BlcmF0b3JOb2RlIHx8IHJlcyBpbnN0YW5jZW9mIEZ1bmN0aW9uTm9kZSkge1xuICAgICAgICBpZiAocmVzLmFyZ3MpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlcy5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZXMuYXJnc1tpXSA9IGFwcGx5UnVsZShyZXMuYXJnc1tpXSwgcnVsZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHJlcyBpbnN0YW5jZW9mIFBhcmVudGhlc2lzTm9kZSkge1xuICAgICAgICBpZiAocmVzLmNvbnRlbnQpIHtcbiAgICAgICAgICByZXMuY29udGVudCA9IGFwcGx5UnVsZShyZXMuY29udGVudCwgcnVsZSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gVHJ5IHRvIG1hdGNoIGEgcnVsZSBhZ2FpbnN0IHRoaXMgbm9kZVxuXG5cbiAgICAgIHZhciByZXBsID0gcnVsZS5yO1xuXG4gICAgICB2YXIgbWF0Y2hlcyA9IF9ydWxlTWF0Y2gocnVsZS5sLCByZXMpWzBdOyAvLyBJZiB0aGUgcnVsZSBpcyBhc3NvY2lhdGl2ZSBvcGVyYXRvciwgd2UgY2FuIHRyeSBtYXRjaGluZyBpdCB3aGlsZSBhbGxvd2luZyBhZGRpdGlvbmFsIHRlcm1zLlxuICAgICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gbWF0Y2ggcnVsZXMgbGlrZSAnbituJyB0byB0aGUgZXhwcmVzc2lvbiAnKDEreCkreCcgb3IgZXZlbiAneCsxK3gnIGlmIHRoZSBvcGVyYXRvciBpcyBjb21tdXRhdGl2ZS5cblxuXG4gICAgICBpZiAoIW1hdGNoZXMgJiYgcnVsZS5leHBhbmRlZCkge1xuICAgICAgICByZXBsID0gcnVsZS5leHBhbmRlZC5yO1xuICAgICAgICBtYXRjaGVzID0gX3J1bGVNYXRjaChydWxlLmV4cGFuZGVkLmwsIHJlcylbMF07XG4gICAgICB9XG5cbiAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgIC8vIGNvbnN0IGJlZm9yZSA9IHJlcy50b1N0cmluZyh7cGFyZW50aGVzaXM6ICdhbGwnfSlcbiAgICAgICAgLy8gQ3JlYXRlIGEgbmV3IG5vZGUgYnkgY2xvbmluZyB0aGUgcmhzIG9mIHRoZSBtYXRjaGVkIHJ1bGVcbiAgICAgICAgLy8gd2Uga2VlcCBhbnkgaW1wbGljaXQgbXVsdGlwbGljYXRpb24gc3RhdGUgaWYgcmVsZXZhbnRcbiAgICAgICAgdmFyIGltcGxpY2l0ID0gcmVzLmltcGxpY2l0O1xuICAgICAgICByZXMgPSByZXBsLmNsb25lKCk7XG5cbiAgICAgICAgaWYgKGltcGxpY2l0ICYmICdpbXBsaWNpdCcgaW4gcmVwbCkge1xuICAgICAgICAgIHJlcy5pbXBsaWNpdCA9IHRydWU7XG4gICAgICAgIH0gLy8gUmVwbGFjZSBwbGFjZWhvbGRlcnMgd2l0aCB0aGVpciByZXNwZWN0aXZlIG5vZGVzIHdpdGhvdXQgdHJhdmVyc2luZyBkZWVwZXIgaW50byB0aGUgcmVwbGFjZWQgbm9kZXNcblxuXG4gICAgICAgIHJlcyA9IHJlcy50cmFuc2Zvcm0oZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgICBpZiAobm9kZS5pc1N5bWJvbE5vZGUgJiYgKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG1hdGNoZXMucGxhY2Vob2xkZXJzLCBub2RlLm5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcy5wbGFjZWhvbGRlcnNbbm9kZS5uYW1lXS5jbG9uZSgpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pOyAvLyBjb25zdCBhZnRlciA9IHJlcy50b1N0cmluZyh7cGFyZW50aGVzaXM6ICdhbGwnfSlcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ1NpbXBsaWZpZWQgJyArIGJlZm9yZSArICcgdG8gJyArIGFmdGVyKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBHZXQgKGJpbmFyeSkgY29tYmluYXRpb25zIG9mIGEgZmxhdHRlbmVkIGJpbmFyeSBub2RlXG4gICAqIGUuZy4gKyhub2RlMSwgbm9kZTIsIG5vZGUzKSAtPiBbXG4gICAqICAgICAgICArKG5vZGUxLCAgKyhub2RlMiwgbm9kZTMpKSxcbiAgICogICAgICAgICsobm9kZTIsICArKG5vZGUxLCBub2RlMykpLFxuICAgKiAgICAgICAgKyhub2RlMywgICsobm9kZTEsIG5vZGUyKSldXG4gICAqXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGdldFNwbGl0cyhub2RlLCBjb250ZXh0KSB7XG4gICAgdmFyIHJlcyA9IFtdO1xuICAgIHZhciByaWdodCwgcmlnaHRBcmdzO1xuICAgIHZhciBtYWtlTm9kZSA9IGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24obm9kZSk7XG5cbiAgICBpZiAoaXNDb21tdXRhdGl2ZShub2RlLCBjb250ZXh0KSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmlnaHRBcmdzID0gbm9kZS5hcmdzLnNsaWNlKDApO1xuICAgICAgICByaWdodEFyZ3Muc3BsaWNlKGksIDEpO1xuICAgICAgICByaWdodCA9IHJpZ2h0QXJncy5sZW5ndGggPT09IDEgPyByaWdodEFyZ3NbMF0gOiBtYWtlTm9kZShyaWdodEFyZ3MpO1xuICAgICAgICByZXMucHVzaChtYWtlTm9kZShbbm9kZS5hcmdzW2ldLCByaWdodF0pKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmlnaHRBcmdzID0gbm9kZS5hcmdzLnNsaWNlKDEpO1xuICAgICAgcmlnaHQgPSByaWdodEFyZ3MubGVuZ3RoID09PSAxID8gcmlnaHRBcmdzWzBdIDogbWFrZU5vZGUocmlnaHRBcmdzKTtcbiAgICAgIHJlcy5wdXNoKG1ha2VOb2RlKFtub2RlLmFyZ3NbMF0sIHJpZ2h0XSkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNldCB1bmlvbiBvZiB0d28gbWF0Y2gtcGxhY2Vob2xkZXJzIG9yIG51bGwgaWYgdGhlcmUgaXMgYSBjb25mbGljdC5cbiAgICovXG5cblxuICBmdW5jdGlvbiBtZXJnZU1hdGNoKG1hdGNoMSwgbWF0Y2gyKSB7XG4gICAgdmFyIHJlcyA9IHtcbiAgICAgIHBsYWNlaG9sZGVyczoge31cbiAgICB9OyAvLyBTb21lIG1hdGNoZXMgbWF5IG5vdCBoYXZlIHBsYWNlaG9sZGVyczsgdGhpcyBpcyBPS1xuXG4gICAgaWYgKCFtYXRjaDEucGxhY2Vob2xkZXJzICYmICFtYXRjaDIucGxhY2Vob2xkZXJzKSB7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gZWxzZSBpZiAoIW1hdGNoMS5wbGFjZWhvbGRlcnMpIHtcbiAgICAgIHJldHVybiBtYXRjaDI7XG4gICAgfSBlbHNlIGlmICghbWF0Y2gyLnBsYWNlaG9sZGVycykge1xuICAgICAgcmV0dXJuIG1hdGNoMTtcbiAgICB9IC8vIFBsYWNlaG9sZGVycyB3aXRoIHRoZSBzYW1lIGtleSBtdXN0IG1hdGNoIGV4YWN0bHlcblxuXG4gICAgZm9yICh2YXIga2V5IGluIG1hdGNoMS5wbGFjZWhvbGRlcnMpIHtcbiAgICAgIHJlcy5wbGFjZWhvbGRlcnNba2V5XSA9IG1hdGNoMS5wbGFjZWhvbGRlcnNba2V5XTtcblxuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShtYXRjaDIucGxhY2Vob2xkZXJzLCBrZXkpKSB7XG4gICAgICAgIGlmICghX2V4YWN0TWF0Y2gobWF0Y2gxLnBsYWNlaG9sZGVyc1trZXldLCBtYXRjaDIucGxhY2Vob2xkZXJzW2tleV0pKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBfa2V5IGluIG1hdGNoMi5wbGFjZWhvbGRlcnMpIHtcbiAgICAgIHJlcy5wbGFjZWhvbGRlcnNbX2tleV0gPSBtYXRjaDIucGxhY2Vob2xkZXJzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIENvbWJpbmUgdHdvIGxpc3RzIG9mIG1hdGNoZXMgYnkgYXBwbHlpbmcgbWVyZ2VNYXRjaCB0byB0aGUgY2FydGVzaWFuIHByb2R1Y3Qgb2YgdHdvIGxpc3RzIG9mIG1hdGNoZXMuXG4gICAqIEVhY2ggbGlzdCByZXByZXNlbnRzIG1hdGNoZXMgZm91bmQgaW4gb25lIGNoaWxkIG9mIGEgbm9kZS5cbiAgICovXG5cblxuICBmdW5jdGlvbiBjb21iaW5lQ2hpbGRNYXRjaGVzKGxpc3QxLCBsaXN0Mikge1xuICAgIHZhciByZXMgPSBbXTtcblxuICAgIGlmIChsaXN0MS5sZW5ndGggPT09IDAgfHwgbGlzdDIubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cblxuICAgIHZhciBtZXJnZWQ7XG5cbiAgICBmb3IgKHZhciBpMSA9IDA7IGkxIDwgbGlzdDEubGVuZ3RoOyBpMSsrKSB7XG4gICAgICBmb3IgKHZhciBpMiA9IDA7IGkyIDwgbGlzdDIubGVuZ3RoOyBpMisrKSB7XG4gICAgICAgIG1lcmdlZCA9IG1lcmdlTWF0Y2gobGlzdDFbaTFdLCBsaXN0MltpMl0pO1xuXG4gICAgICAgIGlmIChtZXJnZWQpIHtcbiAgICAgICAgICByZXMucHVzaChtZXJnZWQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICAvKipcbiAgICogQ29tYmluZSBtdWx0aXBsZSBsaXN0cyBvZiBtYXRjaGVzIGJ5IGFwcGx5aW5nIG1lcmdlTWF0Y2ggdG8gdGhlIGNhcnRlc2lhbiBwcm9kdWN0IG9mIHR3byBsaXN0cyBvZiBtYXRjaGVzLlxuICAgKiBFYWNoIGxpc3QgcmVwcmVzZW50cyBtYXRjaGVzIGZvdW5kIGluIG9uZSBjaGlsZCBvZiBhIG5vZGUuXG4gICAqIFJldHVybnMgYSBsaXN0IG9mIHVuaXF1ZSBtYXRjaGVzLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIG1lcmdlQ2hpbGRNYXRjaGVzKGNoaWxkTWF0Y2hlcykge1xuICAgIGlmIChjaGlsZE1hdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gY2hpbGRNYXRjaGVzO1xuICAgIH1cblxuICAgIHZhciBzZXRzID0gY2hpbGRNYXRjaGVzLnJlZHVjZShjb21iaW5lQ2hpbGRNYXRjaGVzKTtcbiAgICB2YXIgdW5pcXVlU2V0cyA9IFtdO1xuICAgIHZhciB1bmlxdWUgPSB7fTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2V0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHMgPSBKU09OLnN0cmluZ2lmeShzZXRzW2ldKTtcblxuICAgICAgaWYgKCF1bmlxdWVbc10pIHtcbiAgICAgICAgdW5pcXVlW3NdID0gdHJ1ZTtcbiAgICAgICAgdW5pcXVlU2V0cy5wdXNoKHNldHNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmlxdWVTZXRzO1xuICB9XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgbm9kZSBtYXRjaGVzIHJ1bGUuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29uc3RhbnROb2RlIHwgU3ltYm9sTm9kZSB8IFBhcmVudGhlc2lzTm9kZSB8IEZ1bmN0aW9uTm9kZSB8IE9wZXJhdG9yTm9kZX0gcnVsZVxuICAgKiBAcGFyYW0ge0NvbnN0YW50Tm9kZSB8IFN5bWJvbE5vZGUgfCBQYXJlbnRoZXNpc05vZGUgfCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGV9IG5vZGVcbiAgICogQHJldHVybiB7T2JqZWN0fSBJbmZvcm1hdGlvbiBhYm91dCB0aGUgbWF0Y2gsIGlmIGl0IGV4aXN0cy5cbiAgICovXG5cblxuICBmdW5jdGlvbiBfcnVsZU1hdGNoKHJ1bGUsIG5vZGUsIGlzU3BsaXQpIHtcbiAgICAvLyAgICBjb25zb2xlLmxvZygnRW50ZXJpbmcgX3J1bGVNYXRjaCgnICsgSlNPTi5zdHJpbmdpZnkocnVsZSkgKyAnLCAnICsgSlNPTi5zdHJpbmdpZnkobm9kZSkgKyAnKScpXG4gICAgLy8gICAgY29uc29sZS5sb2coJ3J1bGUgPSAnICsgcnVsZSlcbiAgICAvLyAgICBjb25zb2xlLmxvZygnbm9kZSA9ICcgKyBub2RlKVxuICAgIC8vICAgIGNvbnNvbGUubG9nKCdFbnRlcmluZyBfcnVsZU1hdGNoKCcgKyBydWxlLnRvU3RyaW5nKCkgKyAnLCAnICsgbm9kZS50b1N0cmluZygpICsgJyknKVxuICAgIHZhciByZXMgPSBbe1xuICAgICAgcGxhY2Vob2xkZXJzOiB7fVxuICAgIH1dO1xuXG4gICAgaWYgKHJ1bGUgaW5zdGFuY2VvZiBPcGVyYXRvck5vZGUgJiYgbm9kZSBpbnN0YW5jZW9mIE9wZXJhdG9yTm9kZSB8fCBydWxlIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlICYmIG5vZGUgaW5zdGFuY2VvZiBGdW5jdGlvbk5vZGUpIHtcbiAgICAgIC8vIElmIHRoZSBydWxlIGlzIGFuIE9wZXJhdG9yTm9kZSBvciBhIEZ1bmN0aW9uTm9kZSwgdGhlbiBub2RlIG11c3QgbWF0Y2ggZXhhY3RseVxuICAgICAgaWYgKHJ1bGUgaW5zdGFuY2VvZiBPcGVyYXRvck5vZGUpIHtcbiAgICAgICAgaWYgKHJ1bGUub3AgIT09IG5vZGUub3AgfHwgcnVsZS5mbiAhPT0gbm9kZS5mbikge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChydWxlIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlKSB7XG4gICAgICAgIGlmIChydWxlLm5hbWUgIT09IG5vZGUubmFtZSkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBydWxlIGFuZCBub2RlIG1hdGNoLiBTZWFyY2ggdGhlIGNoaWxkcmVuIG9mIHJ1bGUgYW5kIG5vZGUuXG5cblxuICAgICAgaWYgKG5vZGUuYXJncy5sZW5ndGggPT09IDEgJiYgcnVsZS5hcmdzLmxlbmd0aCA9PT0gMSB8fCAhaXNBc3NvY2lhdGl2ZShub2RlKSB8fCBpc1NwbGl0KSB7XG4gICAgICAgIC8vIEV4cGVjdCBub24tYXNzb2NpYXRpdmUgb3BlcmF0b3JzIHRvIG1hdGNoIGV4YWN0bHlcbiAgICAgICAgdmFyIGNoaWxkTWF0Y2hlcyA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZS5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGNoaWxkTWF0Y2ggPSBfcnVsZU1hdGNoKHJ1bGUuYXJnc1tpXSwgbm9kZS5hcmdzW2ldKTtcblxuICAgICAgICAgIGlmIChjaGlsZE1hdGNoLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gQ2hpbGQgZGlkIG5vdCBtYXRjaCwgc28gc3RvcCBzZWFyY2hpbmcgaW1tZWRpYXRlbHlcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICB9IC8vIFRoZSBjaGlsZCBtYXRjaGVkLCBzbyBhZGQgdGhlIGluZm9ybWF0aW9uIHJldHVybmVkIGZyb20gdGhlIGNoaWxkIHRvIG91ciByZXN1bHRcblxuXG4gICAgICAgICAgY2hpbGRNYXRjaGVzLnB1c2goY2hpbGRNYXRjaCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXMgPSBtZXJnZUNoaWxkTWF0Y2hlcyhjaGlsZE1hdGNoZXMpO1xuICAgICAgfSBlbHNlIGlmIChub2RlLmFyZ3MubGVuZ3RoID49IDIgJiYgcnVsZS5hcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAvLyBub2RlIGlzIGZsYXR0ZW5lZCwgcnVsZSBpcyBub3RcbiAgICAgICAgLy8gQXNzb2NpYXRpdmUgb3BlcmF0b3JzL2Z1bmN0aW9ucyBjYW4gYmUgc3BsaXQgaW4gZGlmZmVyZW50IHdheXMgc28gd2UgY2hlY2sgaWYgdGhlIHJ1bGUgbWF0Y2hlcyBlYWNoXG4gICAgICAgIC8vIHRoZW0gYW5kIHJldHVybiB0aGVpciB1bmlvbi5cbiAgICAgICAgdmFyIHNwbGl0cyA9IGdldFNwbGl0cyhub2RlLCBydWxlLmNvbnRleHQpO1xuICAgICAgICB2YXIgc3BsaXRNYXRjaGVzID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHNwbGl0cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICB2YXIgbWF0Y2hTZXQgPSBfcnVsZU1hdGNoKHJ1bGUsIHNwbGl0c1tfaV0sIHRydWUpOyAvLyByZWN1cnNpbmcgYXQgdGhlIHNhbWUgdHJlZSBkZXB0aCBoZXJlXG5cblxuICAgICAgICAgIHNwbGl0TWF0Y2hlcyA9IHNwbGl0TWF0Y2hlcy5jb25jYXQobWF0Y2hTZXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHNwbGl0TWF0Y2hlcztcbiAgICAgIH0gZWxzZSBpZiAocnVsZS5hcmdzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ1VuZXhwZWN0ZWQgbm9uLWJpbmFyeSBhc3NvY2lhdGl2ZSBmdW5jdGlvbjogJyArIHJ1bGUudG9TdHJpbmcoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJbmNvcnJlY3QgbnVtYmVyIG9mIGFyZ3VtZW50cyBpbiBydWxlIGFuZCBub2RlLCBzbyBubyBtYXRjaFxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChydWxlIGluc3RhbmNlb2YgU3ltYm9sTm9kZSkge1xuICAgICAgLy8gSWYgdGhlIHJ1bGUgaXMgYSBTeW1ib2xOb2RlLCB0aGVuIGl0IGNhcnJpZXMgYSBzcGVjaWFsIG1lYW5pbmdcbiAgICAgIC8vIGFjY29yZGluZyB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBzeW1ib2wgbm9kZSBuYW1lLlxuICAgICAgLy8gYy4qIG1hdGNoZXMgYSBDb25zdGFudE5vZGVcbiAgICAgIC8vIG4uKiBtYXRjaGVzIGFueSBub2RlXG4gICAgICBpZiAocnVsZS5uYW1lLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N5bWJvbCBpbiBydWxlIGhhcyAwIGxlbmd0aC4uLiE/Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTVVBQT1JURURfQ09OU1RBTlRTW3J1bGUubmFtZV0pIHtcbiAgICAgICAgLy8gYnVpbHQtaW4gY29uc3RhbnQgbXVzdCBtYXRjaCBleGFjdGx5XG4gICAgICAgIGlmIChydWxlLm5hbWUgIT09IG5vZGUubmFtZSkge1xuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChydWxlLm5hbWVbMF0gPT09ICduJyB8fCBydWxlLm5hbWUuc3Vic3RyaW5nKDAsIDIpID09PSAnX3AnKSB7XG4gICAgICAgIC8vIHJ1bGUgbWF0Y2hlcyBfYW55dGhpbmdfLCBzbyBhc3NpZ24gdGhpcyBub2RlIHRvIHRoZSBydWxlLm5hbWUgcGxhY2Vob2xkZXJcbiAgICAgICAgLy8gQXNzaWduIG5vZGUgdG8gdGhlIHJ1bGUubmFtZSBwbGFjZWhvbGRlci5cbiAgICAgICAgLy8gT3VyIHBhcmVudCB3aWxsIGNoZWNrIGZvciBtYXRjaGVzIGFtb25nIHBsYWNlaG9sZGVycy5cbiAgICAgICAgcmVzWzBdLnBsYWNlaG9sZGVyc1tydWxlLm5hbWVdID0gbm9kZTtcbiAgICAgIH0gZWxzZSBpZiAocnVsZS5uYW1lWzBdID09PSAndicpIHtcbiAgICAgICAgLy8gcnVsZSBtYXRjaGVzIGFueSB2YXJpYWJsZSB0aGluZyAobm90IGEgQ29uc3RhbnROb2RlKVxuICAgICAgICBpZiAoISgwLCBfaXMuaXNDb25zdGFudE5vZGUpKG5vZGUpKSB7XG4gICAgICAgICAgcmVzWzBdLnBsYWNlaG9sZGVyc1tydWxlLm5hbWVdID0gbm9kZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBNaXMtbWF0Y2g6IHJ1bGUgd2FzIGV4cGVjdGluZyBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIENvbnN0YW50Tm9kZVxuICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChydWxlLm5hbWVbMF0gPT09ICdjJykge1xuICAgICAgICAvLyBydWxlIG1hdGNoZXMgYW55IENvbnN0YW50Tm9kZVxuICAgICAgICBpZiAobm9kZSBpbnN0YW5jZW9mIENvbnN0YW50Tm9kZSkge1xuICAgICAgICAgIHJlc1swXS5wbGFjZWhvbGRlcnNbcnVsZS5uYW1lXSA9IG5vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTWlzLW1hdGNoOiBydWxlIHdhcyBleHBlY3RpbmcgYSBDb25zdGFudE5vZGVcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzeW1ib2wgaW4gcnVsZTogJyArIHJ1bGUubmFtZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChydWxlIGluc3RhbmNlb2YgQ29uc3RhbnROb2RlKSB7XG4gICAgICAvLyBMaXRlcmFsIGNvbnN0YW50IG11c3QgbWF0Y2ggZXhhY3RseVxuICAgICAgaWYgKCFlcXVhbChydWxlLnZhbHVlLCBub2RlLnZhbHVlKSkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNvbWUgb3RoZXIgbm9kZSB3YXMgZW5jb3VudGVyZWQgd2hpY2ggd2UgYXJlbid0IHByZXBhcmVkIGZvciwgc28gbm8gbWF0Y2hcbiAgICAgIHJldHVybiBbXTtcbiAgICB9IC8vIEl0J3MgYSBtYXRjaCFcbiAgICAvLyBjb25zb2xlLmxvZygnX3J1bGVNYXRjaCgnICsgcnVsZS50b1N0cmluZygpICsgJywgJyArIG5vZGUudG9TdHJpbmcoKSArICcpIGZvdW5kIGEgbWF0Y2gnKVxuXG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgcCBhbmQgcSAoYW5kIGFsbCB0aGVpciBjaGlsZHJlbiBub2RlcykgYXJlIGlkZW50aWNhbC5cbiAgICpcbiAgICogQHBhcmFtIHtDb25zdGFudE5vZGUgfCBTeW1ib2xOb2RlIHwgUGFyZW50aGVzaXNOb2RlIHwgRnVuY3Rpb25Ob2RlIHwgT3BlcmF0b3JOb2RlfSBwXG4gICAqIEBwYXJhbSB7Q29uc3RhbnROb2RlIHwgU3ltYm9sTm9kZSB8IFBhcmVudGhlc2lzTm9kZSB8IEZ1bmN0aW9uTm9kZSB8IE9wZXJhdG9yTm9kZX0gcVxuICAgKiBAcmV0dXJuIHtPYmplY3R9IEluZm9ybWF0aW9uIGFib3V0IHRoZSBtYXRjaCwgaWYgaXQgZXhpc3RzLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9leGFjdE1hdGNoKHAsIHEpIHtcbiAgICBpZiAocCBpbnN0YW5jZW9mIENvbnN0YW50Tm9kZSAmJiBxIGluc3RhbmNlb2YgQ29uc3RhbnROb2RlKSB7XG4gICAgICBpZiAoIWVxdWFsKHAudmFsdWUsIHEudmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHAgaW5zdGFuY2VvZiBTeW1ib2xOb2RlICYmIHEgaW5zdGFuY2VvZiBTeW1ib2xOb2RlKSB7XG4gICAgICBpZiAocC5uYW1lICE9PSBxLm5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocCBpbnN0YW5jZW9mIE9wZXJhdG9yTm9kZSAmJiBxIGluc3RhbmNlb2YgT3BlcmF0b3JOb2RlIHx8IHAgaW5zdGFuY2VvZiBGdW5jdGlvbk5vZGUgJiYgcSBpbnN0YW5jZW9mIEZ1bmN0aW9uTm9kZSkge1xuICAgICAgaWYgKHAgaW5zdGFuY2VvZiBPcGVyYXRvck5vZGUpIHtcbiAgICAgICAgaWYgKHAub3AgIT09IHEub3AgfHwgcC5mbiAhPT0gcS5mbikge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChwIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlKSB7XG4gICAgICAgIGlmIChwLm5hbWUgIT09IHEubmFtZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocC5hcmdzLmxlbmd0aCAhPT0gcS5hcmdzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcC5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghX2V4YWN0TWF0Y2gocC5hcmdzW2ldLCBxLmFyZ3NbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBzaW1wbGlmeTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTaW1wbGlmeSA9IGNyZWF0ZVNpbXBsaWZ5OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZXNvbHZlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAncmVzb2x2ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydwYXJzZScsICdGdW5jdGlvbk5vZGUnLCAnT3BlcmF0b3JOb2RlJywgJ1BhcmVudGhlc2lzTm9kZSddO1xudmFyIGNyZWF0ZVJlc29sdmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgcGFyc2UgPSBfcmVmLnBhcnNlLFxuICAgICAgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsXG4gICAgICBPcGVyYXRvck5vZGUgPSBfcmVmLk9wZXJhdG9yTm9kZSxcbiAgICAgIFBhcmVudGhlc2lzTm9kZSA9IF9yZWYuUGFyZW50aGVzaXNOb2RlO1xuXG4gIC8qKlxuICAgKiByZXNvbHZlKGV4cHIsIHNjb3BlKSByZXBsYWNlcyB2YXJpYWJsZSBub2RlcyB3aXRoIHRoZWlyIHNjb3BlZCB2YWx1ZXNcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgc2ltcGxpZnkucmVzb2x2ZShleHByLCBzY29wZSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnNpbXBsaWZ5LnJlc29sdmUoJ3ggKyB5Jywge3g6MSwgeToyfSkgICAgICAgICAgIC8vIE5vZGUgezEgKyAyfVxuICAgKiAgICAgbWF0aC5zaW1wbGlmeS5yZXNvbHZlKG1hdGgucGFyc2UoJ3greScpLCB7eDoxLCB5OjJ9KSAvLyBOb2RlIHsxICsgMn1cbiAgICogICAgIG1hdGguc2ltcGxpZnkoJ3greScsIHt4OjIsIHk6J3greCd9KS50b1N0cmluZygpICAgICAgLy8gXCI2XCJcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqICAgICBUaGUgZXhwcmVzc2lvbiB0cmVlIHRvIGJlIHNpbXBsaWZpZWRcbiAgICogQHBhcmFtIHtPYmplY3R9IHNjb3BlIHdpdGggdmFyaWFibGVzIHRvIGJlIHJlc29sdmVkXG4gICAqL1xuICBmdW5jdGlvbiByZXNvbHZlKG5vZGUsIHNjb3BlKSB7XG4gICAgaWYgKCFzY29wZSkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShub2RlKSkge1xuICAgICAgdmFyIHZhbHVlID0gc2NvcGVbbm9kZS5uYW1lXTtcblxuICAgICAgaWYgKCgwLCBfaXMuaXNOb2RlKSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUodmFsdWUsIHNjb3BlKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gcGFyc2UoU3RyaW5nKHZhbHVlKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShub2RlKSkge1xuICAgICAgdmFyIGFyZ3MgPSBub2RlLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoYXJnLCBzY29wZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIGFyZ3MsIG5vZGUuaW1wbGljaXQpO1xuICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc1BhcmVudGhlc2lzTm9kZSkobm9kZSkpIHtcbiAgICAgIHJldHVybiBuZXcgUGFyZW50aGVzaXNOb2RlKHJlc29sdmUobm9kZS5jb250ZW50LCBzY29wZSkpO1xuICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0Z1bmN0aW9uTm9kZSkobm9kZSkpIHtcbiAgICAgIHZhciBfYXJncyA9IG5vZGUuYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZShhcmcsIHNjb3BlKTtcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZShub2RlLm5hbWUsIF9hcmdzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHJldHVybiByZXNvbHZlO1xufSk7XG5leHBvcnRzLmNyZWF0ZVJlc29sdmUgPSBjcmVhdGVSZXNvbHZlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTaW1wbGlmeUNvbnN0YW50ID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF91dGlsID0gcmVxdWlyZShcIi4vdXRpbFwiKTtcblxudmFyIF9ub29wID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL25vb3BcIik7XG5cbi8vIFRPRE8gdGhpcyBjb3VsZCBiZSBpbXByb3ZlZCBieSBzaW1wbGlmeWluZyBzZXBlcmF0ZWQgY29uc3RhbnRzIHVuZGVyIGFzc29jaWF0aXZlIGFuZCBjb21tdXRhdGl2ZSBvcGVyYXRvcnNcbnZhciBuYW1lID0gJ3NpbXBsaWZ5Q29uc3RhbnQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ21hdGhXaXRoVHJhbnNmb3JtJywgJz9mcmFjdGlvbicsICc/YmlnbnVtYmVyJywgJ0NvbnN0YW50Tm9kZScsICdPcGVyYXRvck5vZGUnLCAnRnVuY3Rpb25Ob2RlJywgJ1N5bWJvbE5vZGUnXTtcbnZhciBjcmVhdGVTaW1wbGlmeUNvbnN0YW50ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgbWF0aFdpdGhUcmFuc2Zvcm0gPSBfcmVmLm1hdGhXaXRoVHJhbnNmb3JtLFxuICAgICAgZnJhY3Rpb24gPSBfcmVmLmZyYWN0aW9uLFxuICAgICAgYmlnbnVtYmVyID0gX3JlZi5iaWdudW1iZXIsXG4gICAgICBDb25zdGFudE5vZGUgPSBfcmVmLkNvbnN0YW50Tm9kZSxcbiAgICAgIE9wZXJhdG9yTm9kZSA9IF9yZWYuT3BlcmF0b3JOb2RlLFxuICAgICAgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsXG4gICAgICBTeW1ib2xOb2RlID0gX3JlZi5TeW1ib2xOb2RlO1xuXG4gIHZhciBfY3JlYXRlVXRpbCA9ICgwLCBfdXRpbC5jcmVhdGVVdGlsKSh7XG4gICAgRnVuY3Rpb25Ob2RlOiBGdW5jdGlvbk5vZGUsXG4gICAgT3BlcmF0b3JOb2RlOiBPcGVyYXRvck5vZGUsXG4gICAgU3ltYm9sTm9kZTogU3ltYm9sTm9kZVxuICB9KSxcbiAgICAgIGlzQ29tbXV0YXRpdmUgPSBfY3JlYXRlVXRpbC5pc0NvbW11dGF0aXZlLFxuICAgICAgaXNBc3NvY2lhdGl2ZSA9IF9jcmVhdGVVdGlsLmlzQXNzb2NpYXRpdmUsXG4gICAgICBhbGxDaGlsZHJlbiA9IF9jcmVhdGVVdGlsLmFsbENoaWxkcmVuLFxuICAgICAgY3JlYXRlTWFrZU5vZGVGdW5jdGlvbiA9IF9jcmVhdGVVdGlsLmNyZWF0ZU1ha2VOb2RlRnVuY3Rpb247XG5cbiAgZnVuY3Rpb24gc2ltcGxpZnlDb25zdGFudChleHByLCBvcHRpb25zKSB7XG4gICAgdmFyIHJlcyA9IGZvbGRGcmFjdGlvbihleHByLCBvcHRpb25zKTtcbiAgICByZXR1cm4gKDAsIF9pcy5pc05vZGUpKHJlcykgPyByZXMgOiBfdG9Ob2RlKHJlcyk7XG4gIH1cblxuICBmdW5jdGlvbiBfZXZhbChmbm5hbWUsIGFyZ3MsIG9wdGlvbnMpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIF90b051bWJlcihtYXRoV2l0aFRyYW5zZm9ybVtmbm5hbWVdLmFwcGx5KG51bGwsIGFyZ3MpLCBvcHRpb25zKTtcbiAgICB9IGNhdGNoIChpZ25vcmUpIHtcbiAgICAgIC8vIHNvbWV0aW1lcyB0aGUgaW1wbGljaXQgdHlwZSBjb252ZXJzaW9uIGNhdXNlcyB0aGUgZXZhbHVhdGlvbiB0byBmYWlsLCBzbyB3ZSdsbCB0cnkgYWdhaW4gYWZ0ZXIgcmVtb3ZpbmcgRnJhY3Rpb25zXG4gICAgICBhcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgaWYgKCgwLCBfaXMuaXNGcmFjdGlvbikoeCkpIHtcbiAgICAgICAgICByZXR1cm4geC52YWx1ZU9mKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIF90b051bWJlcihtYXRoV2l0aFRyYW5zZm9ybVtmbm5hbWVdLmFwcGx5KG51bGwsIGFyZ3MpLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICB2YXIgX3RvTm9kZSA9IHR5cGVkKHtcbiAgICBGcmFjdGlvbjogX2ZyYWN0aW9uVG9Ob2RlLFxuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKG4pIHtcbiAgICAgIGlmIChuIDwgMCkge1xuICAgICAgICByZXR1cm4gdW5hcnlNaW51c05vZGUobmV3IENvbnN0YW50Tm9kZSgtbikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShuKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKG4pIHtcbiAgICAgIGlmIChuIDwgMCkge1xuICAgICAgICByZXR1cm4gdW5hcnlNaW51c05vZGUobmV3IENvbnN0YW50Tm9kZSgtbikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShuKTsgLy8gb2xkIHBhcmFtZXRlcnM6IChuLnRvU3RyaW5nKCksICdudW1iZXInKVxuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleChzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IENvbXBsZXggbnVtYmVyIHRvIE5vZGUnKTtcbiAgICB9XG4gIH0pOyAvLyBjb252ZXJ0IGEgbnVtYmVyIHRvIGEgZnJhY3Rpb24gb25seSBpZiBpdCBjYW4gYmUgZXhwcmVzc2VkIGV4YWN0bHlcblxuXG4gIGZ1bmN0aW9uIF9leGFjdEZyYWN0aW9uKG4sIG9wdGlvbnMpIHtcbiAgICB2YXIgZXhhY3RGcmFjdGlvbnMgPSBvcHRpb25zICYmIG9wdGlvbnMuZXhhY3RGcmFjdGlvbnMgIT09IGZhbHNlO1xuXG4gICAgaWYgKGV4YWN0RnJhY3Rpb25zICYmIGlzRmluaXRlKG4pICYmIGZyYWN0aW9uKSB7XG4gICAgICB2YXIgZiA9IGZyYWN0aW9uKG4pO1xuXG4gICAgICBpZiAoZi52YWx1ZU9mKCkgPT09IG4pIHtcbiAgICAgICAgcmV0dXJuIGY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG47XG4gIH0gLy8gQ29udmVydCBudW1iZXJzIHRvIGEgcHJlZmVycmVkIG51bWJlciB0eXBlIGluIHByZWZlcmVuY2Ugb3JkZXI6IEZyYWN0aW9uLCBudW1iZXIsIENvbXBsZXhcbiAgLy8gQmlnTnVtYmVycyBhcmUgbGVmdCBhbG9uZVxuXG5cbiAgdmFyIF90b051bWJlciA9IHR5cGVkKHtcbiAgICAnc3RyaW5nLCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdPYmplY3Qocywgb3B0aW9ucykge1xuICAgICAgaWYgKGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInKSB7XG4gICAgICAgIGlmIChiaWdudW1iZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICgwLCBfbm9vcC5ub0JpZ251bWJlcikoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBiaWdudW1iZXIocyk7XG4gICAgICB9IGVsc2UgaWYgKGNvbmZpZy5udW1iZXIgPT09ICdGcmFjdGlvbicpIHtcbiAgICAgICAgaWYgKGZyYWN0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAoMCwgX25vb3Aubm9GcmFjdGlvbikoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmcmFjdGlvbihzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBuID0gcGFyc2VGbG9hdChzKTtcbiAgICAgICAgcmV0dXJuIF9leGFjdEZyYWN0aW9uKG4sIG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBPYmplY3QnOiBmdW5jdGlvbiBGcmFjdGlvbk9iamVjdChzLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gcztcbiAgICB9LFxuICAgIC8vIHdlIGRvbid0IG5lZWQgb3B0aW9ucyBoZXJlXG4gICAgJ0JpZ051bWJlciwgT2JqZWN0JzogZnVuY3Rpb24gQmlnTnVtYmVyT2JqZWN0KHMsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBzO1xuICAgIH0sXG4gICAgLy8gd2UgZG9uJ3QgbmVlZCBvcHRpb25zIGhlcmVcbiAgICAnbnVtYmVyLCBPYmplY3QnOiBmdW5jdGlvbiBudW1iZXJPYmplY3Qocywgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIF9leGFjdEZyYWN0aW9uKHMsIG9wdGlvbnMpO1xuICAgIH0sXG4gICAgJ0NvbXBsZXgsIE9iamVjdCc6IGZ1bmN0aW9uIENvbXBsZXhPYmplY3Qocywgb3B0aW9ucykge1xuICAgICAgaWYgKHMuaW0gIT09IDApIHtcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfZXhhY3RGcmFjdGlvbihzLnJlLCBvcHRpb25zKTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHVuYXJ5TWludXNOb2RlKG4pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZSgnLScsICd1bmFyeU1pbnVzJywgW25dKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9mcmFjdGlvblRvTm9kZShmKSB7XG4gICAgdmFyIG47XG4gICAgdmFyIHZuID0gZi5zICogZi5uO1xuXG4gICAgaWYgKHZuIDwgMCkge1xuICAgICAgbiA9IG5ldyBPcGVyYXRvck5vZGUoJy0nLCAndW5hcnlNaW51cycsIFtuZXcgQ29uc3RhbnROb2RlKC12bildKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbiA9IG5ldyBDb25zdGFudE5vZGUodm4pO1xuICAgIH1cblxuICAgIGlmIChmLmQgPT09IDEpIHtcbiAgICAgIHJldHVybiBuO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtuLCBuZXcgQ29uc3RhbnROb2RlKGYuZCldKTtcbiAgfVxuICAvKlxuICAgKiBDcmVhdGUgYSBiaW5hcnkgdHJlZSBmcm9tIGEgbGlzdCBvZiBGcmFjdGlvbnMgYW5kIE5vZGVzLlxuICAgKiBUcmllcyB0byBmb2xkIEZyYWN0aW9ucyBieSBldmFsdWF0aW5nIHRoZW0gdW50aWwgdGhlIGZpcnN0IE5vZGUgaW4gdGhlIGxpc3QgaXMgaGl0LCBzb1xuICAgKiBgYXJnc2Agc2hvdWxkIGJlIHNvcnRlZCB0byBoYXZlIHRoZSBGcmFjdGlvbnMgYXQgdGhlIHN0YXJ0IChpZiB0aGUgb3BlcmF0b3IgaXMgY29tbXV0YXRpdmUpLlxuICAgKiBAcGFyYW0gYXJncyAtIGxpc3Qgb2YgRnJhY3Rpb25zIGFuZCBOb2Rlc1xuICAgKiBAcGFyYW0gZm4gLSBldmFsdWF0b3IgZm9yIHRoZSBiaW5hcnkgb3BlcmF0aW9uIGV2YWx1YXRvciB0aGF0IGFjY2VwdHMgdHdvIEZyYWN0aW9uc1xuICAgKiBAcGFyYW0gbWFrZU5vZGUgLSBjcmVhdGVzIGEgYmluYXJ5IE9wZXJhdG9yTm9kZS9GdW5jdGlvbk5vZGUgZnJvbSBhIGxpc3Qgb2YgY2hpbGQgTm9kZXNcbiAgICogaWYgYXJncy5sZW5ndGggaXMgMSwgcmV0dXJucyBhcmdzWzBdXG4gICAqIEByZXR1cm4gLSBFaXRoZXIgYSBOb2RlIHJlcHJlc2VudGluZyBhIGJpbmFyeSBleHByZXNzaW9uIG9yIEZyYWN0aW9uXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZm9sZE9wKGZuLCBhcmdzLCBtYWtlTm9kZSwgb3B0aW9ucykge1xuICAgIHJldHVybiBhcmdzLnJlZHVjZShmdW5jdGlvbiAoYSwgYikge1xuICAgICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkoYSkgJiYgISgwLCBfaXMuaXNOb2RlKShiKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBfZXZhbChmbiwgW2EsIGJdLCBvcHRpb25zKTtcbiAgICAgICAgfSBjYXRjaCAoaWdub3JlYW5kY29udGludWUpIHt9XG5cbiAgICAgICAgYSA9IF90b05vZGUoYSk7XG4gICAgICAgIGIgPSBfdG9Ob2RlKGIpO1xuICAgICAgfSBlbHNlIGlmICghKDAsIF9pcy5pc05vZGUpKGEpKSB7XG4gICAgICAgIGEgPSBfdG9Ob2RlKGEpO1xuICAgICAgfSBlbHNlIGlmICghKDAsIF9pcy5pc05vZGUpKGIpKSB7XG4gICAgICAgIGIgPSBfdG9Ob2RlKGIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWFrZU5vZGUoW2EsIGJdKTtcbiAgICB9KTtcbiAgfSAvLyBkZXN0cm95cyB0aGUgb3JpZ2luYWwgbm9kZSBhbmQgcmV0dXJucyBhIGZvbGRlZCBvbmVcblxuXG4gIGZ1bmN0aW9uIGZvbGRGcmFjdGlvbihub2RlLCBvcHRpb25zKSB7XG4gICAgc3dpdGNoIChub2RlLnR5cGUpIHtcbiAgICAgIGNhc2UgJ1N5bWJvbE5vZGUnOlxuICAgICAgICByZXR1cm4gbm9kZTtcblxuICAgICAgY2FzZSAnQ29uc3RhbnROb2RlJzpcbiAgICAgICAgaWYgKHR5cGVvZiBub2RlLnZhbHVlID09PSAnbnVtYmVyJyB8fCAhaXNOYU4obm9kZS52YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gX3RvTnVtYmVyKG5vZGUudmFsdWUsIG9wdGlvbnMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGU7XG5cbiAgICAgIGNhc2UgJ0Z1bmN0aW9uTm9kZSc6XG4gICAgICAgIGlmIChtYXRoV2l0aFRyYW5zZm9ybVtub2RlLm5hbWVdICYmIG1hdGhXaXRoVHJhbnNmb3JtW25vZGUubmFtZV0ucmF3QXJncykge1xuICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG5cbiAgICAgICAge1xuICAgICAgICAgIC8vIFByb2Nlc3Mgb3BlcmF0b3JzIGFzIE9wZXJhdG9yTm9kZVxuICAgICAgICAgIHZhciBvcGVyYXRvckZ1bmN0aW9ucyA9IFsnYWRkJywgJ211bHRpcGx5J107XG5cbiAgICAgICAgICBpZiAob3BlcmF0b3JGdW5jdGlvbnMuaW5kZXhPZihub2RlLm5hbWUpID09PSAtMSkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBub2RlLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZvbGRGcmFjdGlvbihhcmcsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfSk7IC8vIElmIGFsbCBhcmdzIGFyZSBudW1iZXJzXG5cbiAgICAgICAgICAgIGlmICghYXJncy5zb21lKF9pcy5pc05vZGUpKSB7XG4gICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9ldmFsKG5vZGUubmFtZSwgYXJncywgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIH0gY2F0Y2ggKGlnbm9yZWFuZGNvbnRpbmUpIHt9XG4gICAgICAgICAgICB9IC8vIENvbnZlcnQgYWxsIGFyZ3MgdG8gbm9kZXMgYW5kIGNvbnN0cnVjdCBhIHN5bWJvbGljIGZ1bmN0aW9uIGNhbGxcblxuXG4gICAgICAgICAgICBhcmdzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgICByZXR1cm4gKDAsIF9pcy5pc05vZGUpKGFyZykgPyBhcmcgOiBfdG9Ob2RlKGFyZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgRnVuY3Rpb25Ob2RlKG5vZGUubmFtZSwgYXJncyk7XG4gICAgICAgICAgfSBlbHNlIHsvLyB0cmVhdCBhcyBvcGVyYXRvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICAgIGNhc2UgJ09wZXJhdG9yTm9kZSc6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgZm4gPSBub2RlLmZuLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICB2YXIgX2FyZ3M7XG5cbiAgICAgICAgICB2YXIgcmVzO1xuICAgICAgICAgIHZhciBtYWtlTm9kZSA9IGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24obm9kZSk7XG5cbiAgICAgICAgICBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkobm9kZSkgJiYgbm9kZS5pc1VuYXJ5KCkpIHtcbiAgICAgICAgICAgIF9hcmdzID0gW2ZvbGRGcmFjdGlvbihub2RlLmFyZ3NbMF0sIG9wdGlvbnMpXTtcblxuICAgICAgICAgICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkoX2FyZ3NbMF0pKSB7XG4gICAgICAgICAgICAgIHJlcyA9IF9ldmFsKGZuLCBfYXJncywgb3B0aW9ucyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXMgPSBtYWtlTm9kZShfYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmIChpc0Fzc29jaWF0aXZlKG5vZGUpKSB7XG4gICAgICAgICAgICBfYXJncyA9IGFsbENoaWxkcmVuKG5vZGUpO1xuICAgICAgICAgICAgX2FyZ3MgPSBfYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgICAgICByZXR1cm4gZm9sZEZyYWN0aW9uKGFyZywgb3B0aW9ucyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGlzQ29tbXV0YXRpdmUoZm4pKSB7XG4gICAgICAgICAgICAgIC8vIGNvbW11dGF0aXZlIGJpbmFyeSBvcGVyYXRvclxuICAgICAgICAgICAgICB2YXIgY29uc3RzID0gW107XG4gICAgICAgICAgICAgIHZhciB2YXJzID0gW107XG5cbiAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmICghKDAsIF9pcy5pc05vZGUpKF9hcmdzW2ldKSkge1xuICAgICAgICAgICAgICAgICAgY29uc3RzLnB1c2goX2FyZ3NbaV0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICB2YXJzLnB1c2goX2FyZ3NbaV0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChjb25zdHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIHJlcyA9IGZvbGRPcChmbiwgY29uc3RzLCBtYWtlTm9kZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgdmFycy51bnNoaWZ0KHJlcyk7XG4gICAgICAgICAgICAgICAgcmVzID0gZm9sZE9wKGZuLCB2YXJzLCBtYWtlTm9kZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gd2Ugd29uJ3QgY2hhbmdlIHRoZSBjaGlsZHJlbiBvcmRlciBzaW5jZSBpdCdzIG5vdCBuZWNjZXNzYXJ5XG4gICAgICAgICAgICAgICAgcmVzID0gZm9sZE9wKGZuLCBfYXJncywgbWFrZU5vZGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBub24tY29tbXV0YXRpdmUgYmluYXJ5IG9wZXJhdG9yXG4gICAgICAgICAgICAgIHJlcyA9IGZvbGRPcChmbiwgX2FyZ3MsIG1ha2VOb2RlLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbm9uLWFzc29jaWF0aXZlIGJpbmFyeSBvcGVyYXRvclxuICAgICAgICAgICAgX2FyZ3MgPSBub2RlLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZvbGRGcmFjdGlvbihhcmcsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXMgPSBmb2xkT3AoZm4sIF9hcmdzLCBtYWtlTm9kZSwgb3B0aW9ucyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdQYXJlbnRoZXNpc05vZGUnOlxuICAgICAgICAvLyByZW1vdmUgdGhlIHVuZWNjZXNzYXJ5IHBhcmVudGhlc2lzXG4gICAgICAgIHJldHVybiBmb2xkRnJhY3Rpb24obm9kZS5jb250ZW50LCBvcHRpb25zKTtcblxuICAgICAgY2FzZSAnQWNjZXNzb3JOb2RlJzpcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgICAgY2FzZSAnQXJyYXlOb2RlJzpcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgICAgY2FzZSAnQXNzaWdubWVudE5vZGUnOlxuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgICBjYXNlICdCbG9ja05vZGUnOlxuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgICBjYXNlICdGdW5jdGlvbkFzc2lnbm1lbnROb2RlJzpcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgICAgY2FzZSAnSW5kZXhOb2RlJzpcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgICAgY2FzZSAnT2JqZWN0Tm9kZSc6XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICAgIGNhc2UgJ1JhbmdlTm9kZSc6XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICAgIGNhc2UgJ0NvbmRpdGlvbmFsTm9kZSc6XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuaW1wbGVtZW50ZWQgbm9kZSB0eXBlIGluIHNpbXBsaWZ5Q29uc3RhbnQ6IFwiLmNvbmNhdChub2RlLnR5cGUpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gc2ltcGxpZnlDb25zdGFudDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTaW1wbGlmeUNvbnN0YW50ID0gY3JlYXRlU2ltcGxpZnlDb25zdGFudDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2ltcGxpZnlDb3JlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc2ltcGxpZnlDb3JlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ2VxdWFsJywgJ2lzWmVybycsICdhZGQnLCAnc3VidHJhY3QnLCAnbXVsdGlwbHknLCAnZGl2aWRlJywgJ3BvdycsICdDb25zdGFudE5vZGUnLCAnT3BlcmF0b3JOb2RlJywgJ0Z1bmN0aW9uTm9kZScsICdQYXJlbnRoZXNpc05vZGUnXTtcbnZhciBjcmVhdGVTaW1wbGlmeUNvcmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgZXF1YWwgPSBfcmVmLmVxdWFsLFxuICAgICAgaXNaZXJvID0gX3JlZi5pc1plcm8sXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGRpdmlkZSA9IF9yZWYuZGl2aWRlLFxuICAgICAgcG93ID0gX3JlZi5wb3csXG4gICAgICBDb25zdGFudE5vZGUgPSBfcmVmLkNvbnN0YW50Tm9kZSxcbiAgICAgIE9wZXJhdG9yTm9kZSA9IF9yZWYuT3BlcmF0b3JOb2RlLFxuICAgICAgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsXG4gICAgICBQYXJlbnRoZXNpc05vZGUgPSBfcmVmLlBhcmVudGhlc2lzTm9kZTtcbiAgdmFyIG5vZGUwID0gbmV3IENvbnN0YW50Tm9kZSgwKTtcbiAgdmFyIG5vZGUxID0gbmV3IENvbnN0YW50Tm9kZSgxKTtcbiAgLyoqXG4gICAqIHNpbXBsaWZ5Q29yZSgpIHBlcmZvcm1zIHNpbmdsZSBwYXNzIHNpbXBsaWZpY2F0aW9uIHN1aXRhYmxlIGZvclxuICAgKiBhcHBsaWNhdGlvbnMgcmVxdWlyaW5nIHVsdGltYXRlIHBlcmZvcm1hbmNlLiBJbiBjb250cmFzdCwgc2ltcGxpZnkoKVxuICAgKiBleHRlbmRzIHNpbXBsaWZ5Q29yZSgpIHdpdGggYWRkaXRpb25hbCBwYXNzZXMgdG8gcHJvdmlkZSBkZWVwZXJcbiAgICogc2ltcGxpZmljYXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIHNpbXBsaWZ5LnNpbXBsaWZ5Q29yZShleHByKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIGNvbnN0IGYgPSBtYXRoLnBhcnNlKCcyICogMSAqIHggXiAoMiAtIDEpJylcbiAgICogICAgIG1hdGguc2ltcGxpZnkuc2ltcGlmeUNvcmUoZikgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vZGUgezIgKiB4fVxuICAgKiAgICAgbWF0aC5zaW1wbGlmeSgnMiAqIDEgKiB4IF4gKDIgLSAxKScsIFttYXRoLnNpbXBsaWZ5LnNpbXBpZnlDb3JlXSkgLy8gTm9kZSB7MiAqIHh9XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgZGVyaXZhdGl2ZVxuICAgKlxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogICAgIFRoZSBleHByZXNzaW9uIHRvIGJlIHNpbXBsaWZpZWRcbiAgICovXG5cbiAgZnVuY3Rpb24gc2ltcGxpZnlDb3JlKG5vZGUpIHtcbiAgICBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkobm9kZSkgJiYgbm9kZS5pc1VuYXJ5KCkpIHtcbiAgICAgIHZhciBhMCA9IHNpbXBsaWZ5Q29yZShub2RlLmFyZ3NbMF0pO1xuXG4gICAgICBpZiAobm9kZS5vcCA9PT0gJysnKSB7XG4gICAgICAgIC8vIHVuYXJ5IHBsdXNcbiAgICAgICAgcmV0dXJuIGEwO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5vcCA9PT0gJy0nKSB7XG4gICAgICAgIC8vIHVuYXJ5IG1pbnVzXG4gICAgICAgIGlmICgoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShhMCkpIHtcbiAgICAgICAgICBpZiAoYTAuaXNVbmFyeSgpICYmIGEwLm9wID09PSAnLScpIHtcbiAgICAgICAgICAgIHJldHVybiBhMC5hcmdzWzBdO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYTAuaXNCaW5hcnkoKSAmJiBhMC5mbiA9PT0gJ3N1YnRyYWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbYTAuYXJnc1sxXSwgYTAuYXJnc1swXV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFthMF0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkobm9kZSkgJiYgbm9kZS5pc0JpbmFyeSgpKSB7XG4gICAgICB2YXIgX2EgPSBzaW1wbGlmeUNvcmUobm9kZS5hcmdzWzBdKTtcblxuICAgICAgdmFyIGExID0gc2ltcGxpZnlDb3JlKG5vZGUuYXJnc1sxXSk7XG5cbiAgICAgIGlmIChub2RlLm9wID09PSAnKycpIHtcbiAgICAgICAgaWYgKCgwLCBfaXMuaXNDb25zdGFudE5vZGUpKF9hKSkge1xuICAgICAgICAgIGlmIChpc1plcm8oX2EudmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gYTE7XG4gICAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShhMSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKGFkZChfYS52YWx1ZSwgYTEudmFsdWUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTEpICYmIGlzWmVybyhhMS52YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4gX2E7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkoYTEpICYmIGExLmlzVW5hcnkoKSAmJiBhMS5vcCA9PT0gJy0nKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbX2EsIGExLmFyZ3NbMF1dKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIGExID8gW19hLCBhMV0gOiBbX2FdKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5vcCA9PT0gJy0nKSB7XG4gICAgICAgIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShfYSkgJiYgYTEpIHtcbiAgICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTEpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShzdWJ0cmFjdChfYS52YWx1ZSwgYTEudmFsdWUpKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzWmVybyhfYS52YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3VuYXJ5TWludXMnLCBbYTFdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gaWYgKG5vZGUuZm4gPT09IFwic3VidHJhY3RcIiAmJiBub2RlLmFyZ3MubGVuZ3RoID09PSAyKSB7XG5cblxuICAgICAgICBpZiAobm9kZS5mbiA9PT0gJ3N1YnRyYWN0Jykge1xuICAgICAgICAgIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShhMSkgJiYgaXNaZXJvKGExLnZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIF9hO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICgoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShhMSkgJiYgYTEuaXNVbmFyeSgpICYmIGExLm9wID09PSAnLScpIHtcbiAgICAgICAgICAgIHJldHVybiBzaW1wbGlmeUNvcmUobmV3IE9wZXJhdG9yTm9kZSgnKycsICdhZGQnLCBbX2EsIGExLmFyZ3NbMF1dKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgW19hLCBhMV0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKG5vZGUub3AgPT09ICcqJykge1xuICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoX2EpKSB7XG4gICAgICAgICAgaWYgKGlzWmVybyhfYS52YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlMDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVxdWFsKF9hLnZhbHVlLCAxKSkge1xuICAgICAgICAgICAgcmV0dXJuIGExO1xuICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTEpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShtdWx0aXBseShfYS52YWx1ZSwgYTEudmFsdWUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTEpKSB7XG4gICAgICAgICAgaWYgKGlzWmVybyhhMS52YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlMDtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVxdWFsKGExLnZhbHVlLCAxKSkge1xuICAgICAgICAgICAgcmV0dXJuIF9hO1xuICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkoX2EpICYmIF9hLmlzQmluYXJ5KCkgJiYgX2Eub3AgPT09IG5vZGUub3ApIHtcbiAgICAgICAgICAgIHZhciBhMDAgPSBfYS5hcmdzWzBdO1xuXG4gICAgICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTAwKSkge1xuICAgICAgICAgICAgICB2YXIgYTAwYTEgPSBuZXcgQ29uc3RhbnROb2RlKG11bHRpcGx5KGEwMC52YWx1ZSwgYTEudmFsdWUpKTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgW2EwMGExLCBfYS5hcmdzWzFdXSwgbm9kZS5pbXBsaWNpdCk7IC8vIGNvbnN0YW50cyBvbiBsZWZ0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgW2ExLCBfYV0sIG5vZGUuaW1wbGljaXQpOyAvLyBjb25zdGFudHMgb24gbGVmdFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgW19hLCBhMV0sIG5vZGUuaW1wbGljaXQpO1xuICAgICAgfSBlbHNlIGlmIChub2RlLm9wID09PSAnLycpIHtcbiAgICAgICAgaWYgKCgwLCBfaXMuaXNDb25zdGFudE5vZGUpKF9hKSkge1xuICAgICAgICAgIGlmIChpc1plcm8oX2EudmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTA7XG4gICAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShhMSkgJiYgKGVxdWFsKGExLnZhbHVlLCAxKSB8fCBlcXVhbChhMS52YWx1ZSwgMikgfHwgZXF1YWwoYTEudmFsdWUsIDQpKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25zdGFudE5vZGUoZGl2aWRlKF9hLnZhbHVlLCBhMS52YWx1ZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFtfYSwgYTFdKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5vcCA9PT0gJ14nKSB7XG4gICAgICAgIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShhMSkpIHtcbiAgICAgICAgICBpZiAoaXNaZXJvKGExLnZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUxO1xuICAgICAgICAgIH0gZWxzZSBpZiAoZXF1YWwoYTEudmFsdWUsIDEpKSB7XG4gICAgICAgICAgICByZXR1cm4gX2E7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShfYSkpIHtcbiAgICAgICAgICAgICAgLy8gZm9sZCBjb25zdGFudFxuICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShwb3coX2EudmFsdWUsIGExLnZhbHVlKSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNPcGVyYXRvck5vZGUpKF9hKSAmJiBfYS5pc0JpbmFyeSgpICYmIF9hLm9wID09PSAnXicpIHtcbiAgICAgICAgICAgICAgdmFyIGEwMSA9IF9hLmFyZ3NbMV07XG5cbiAgICAgICAgICAgICAgaWYgKCgwLCBfaXMuaXNDb25zdGFudE5vZGUpKGEwMSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZShub2RlLm9wLCBub2RlLmZuLCBbX2EuYXJnc1swXSwgbmV3IENvbnN0YW50Tm9kZShtdWx0aXBseShhMDEudmFsdWUsIGExLnZhbHVlKSldKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFtfYSwgYTFdKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNQYXJlbnRoZXNpc05vZGUpKG5vZGUpKSB7XG4gICAgICB2YXIgYyA9IHNpbXBsaWZ5Q29yZShub2RlLmNvbnRlbnQpO1xuXG4gICAgICBpZiAoKDAsIF9pcy5pc1BhcmVudGhlc2lzTm9kZSkoYykgfHwgKDAsIF9pcy5pc1N5bWJvbE5vZGUpKGMpIHx8ICgwLCBfaXMuaXNDb25zdGFudE5vZGUpKGMpKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IFBhcmVudGhlc2lzTm9kZShjKTtcbiAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNGdW5jdGlvbk5vZGUpKG5vZGUpKSB7XG4gICAgICB2YXIgYXJncyA9IG5vZGUuYXJncy5tYXAoc2ltcGxpZnlDb3JlKS5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICByZXR1cm4gKDAsIF9pcy5pc1BhcmVudGhlc2lzTm9kZSkoYXJnKSA/IGFyZy5jb250ZW50IDogYXJnO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZShzaW1wbGlmeUNvcmUobm9kZS5mbiksIGFyZ3MpO1xuICAgIH0gZWxzZSB7Ly8gY2Fubm90IHNpbXBsaWZ5XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gc2ltcGxpZnlDb3JlO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNpbXBsaWZ5Q29yZSA9IGNyZWF0ZVNpbXBsaWZ5Q29yZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVXRpbCA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIG5hbWUgPSAnc2ltcGxpZnlVdGlsJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ0Z1bmN0aW9uTm9kZScsICdPcGVyYXRvck5vZGUnLCAnU3ltYm9sTm9kZSddO1xudmFyIGNyZWF0ZVV0aWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsXG4gICAgICBPcGVyYXRvck5vZGUgPSBfcmVmLk9wZXJhdG9yTm9kZSxcbiAgICAgIFN5bWJvbE5vZGUgPSBfcmVmLlN5bWJvbE5vZGU7XG4gIC8vIFRPRE8gY29tbXV0YXRpdmUvYXNzb2NpYXRpdmUgcHJvcGVydGllcyByZWx5IG9uIHRoZSBhcmd1bWVudHNcbiAgLy8gZS5nLiBtdWx0aXBseSBpcyBub3QgY29tbXV0YXRpdmUgZm9yIG1hdHJpY2VzXG4gIC8vIFRoZSBwcm9wZXJ0aWVzIHNob3VsZCBiZSBjYWxjdWxhdGVkIGZyb20gYW4gYXJndW1lbnQgdG8gc2ltcGxpZnksIG9yIHBvc3NpYmx5IHNvbWV0aGluZyBpbiBtYXRoLmNvbmZpZ1xuICAvLyB0aGUgb3RoZXIgb3B0aW9uIGlzIGZvciB0eXBlZCgpIHRvIHNwZWNpZnkgYSByZXR1cm4gdHlwZSBzbyB0aGF0IHdlIGNhbiBldmFsdWF0ZSB0aGUgdHlwZSBvZiBhcmd1bWVudHNcbiAgdmFyIGNvbW11dGF0aXZlID0ge1xuICAgIGFkZDogdHJ1ZSxcbiAgICBtdWx0aXBseTogdHJ1ZVxuICB9O1xuICB2YXIgYXNzb2NpYXRpdmUgPSB7XG4gICAgYWRkOiB0cnVlLFxuICAgIG11bHRpcGx5OiB0cnVlXG4gIH07XG5cbiAgZnVuY3Rpb24gaXNDb21tdXRhdGl2ZShub2RlLCBjb250ZXh0KSB7XG4gICAgaWYgKCEoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShub2RlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIG5hbWUgPSBub2RlLmZuLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoY29udGV4dCAmJiAoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoY29udGV4dCwgbmFtZSkgJiYgKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKGNvbnRleHRbbmFtZV0sICdjb21tdXRhdGl2ZScpKSB7XG4gICAgICByZXR1cm4gY29udGV4dFtuYW1lXS5jb21tdXRhdGl2ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tbXV0YXRpdmVbbmFtZV0gfHwgZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiBpc0Fzc29jaWF0aXZlKG5vZGUsIGNvbnRleHQpIHtcbiAgICBpZiAoISgwLCBfaXMuaXNPcGVyYXRvck5vZGUpKG5vZGUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdmFyIG5hbWUgPSBub2RlLmZuLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoY29udGV4dCAmJiAoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoY29udGV4dCwgbmFtZSkgJiYgKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKGNvbnRleHRbbmFtZV0sICdhc3NvY2lhdGl2ZScpKSB7XG4gICAgICByZXR1cm4gY29udGV4dFtuYW1lXS5hc3NvY2lhdGl2ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXNzb2NpYXRpdmVbbmFtZV0gfHwgZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIEZsYXR0ZW4gYWxsIGFzc29jaWF0aXZlIG9wZXJhdG9ycyBpbiBhbiBleHByZXNzaW9uIHRyZWUuXG4gICAqIEFzc3VtZXMgcGFyZW50aGVzZXMgaGF2ZSBhbHJlYWR5IGJlZW4gcmVtb3ZlZC5cbiAgICovXG5cblxuICBmdW5jdGlvbiBmbGF0dGVuKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUuYXJncyB8fCBub2RlLmFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICBub2RlLmFyZ3MgPSBhbGxDaGlsZHJlbihub2RlKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmbGF0dGVuKG5vZGUuYXJnc1tpXSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGNoaWxkcmVuIG9mIGEgbm9kZSBhcyBpZiBpdCBoYXMgYmVlbiBmbGF0dGVuZWQuXG4gICAqIFRPRE8gaW1wbGVtZW50IGZvciBGdW5jdGlvbk5vZGVzXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gYWxsQ2hpbGRyZW4obm9kZSkge1xuICAgIHZhciBvcDtcbiAgICB2YXIgY2hpbGRyZW4gPSBbXTtcblxuICAgIHZhciBmaW5kQ2hpbGRyZW4gPSBmdW5jdGlvbiBmaW5kQ2hpbGRyZW4obm9kZSkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2RlLmFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoaWxkID0gbm9kZS5hcmdzW2ldO1xuXG4gICAgICAgIGlmICgoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShjaGlsZCkgJiYgb3AgPT09IGNoaWxkLm9wKSB7XG4gICAgICAgICAgZmluZENoaWxkcmVuKGNoaWxkKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoaXNBc3NvY2lhdGl2ZShub2RlKSkge1xuICAgICAgb3AgPSBub2RlLm9wO1xuICAgICAgZmluZENoaWxkcmVuKG5vZGUpO1xuICAgICAgcmV0dXJuIGNoaWxkcmVuO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm9kZS5hcmdzO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogIFVuZmxhdHRlbiBhbGwgZmxhdHRlbmVkIG9wZXJhdG9ycyB0byBhIHJpZ2h0LWhlYXZ5IGJpbmFyeSB0cmVlLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHVuZmxhdHRlbnIobm9kZSkge1xuICAgIGlmICghbm9kZS5hcmdzIHx8IG5vZGUuYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbWFrZU5vZGUgPSBjcmVhdGVNYWtlTm9kZUZ1bmN0aW9uKG5vZGUpO1xuICAgIHZhciBsID0gbm9kZS5hcmdzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICB1bmZsYXR0ZW5yKG5vZGUuYXJnc1tpXSk7XG4gICAgfVxuXG4gICAgaWYgKGwgPiAyICYmIGlzQXNzb2NpYXRpdmUobm9kZSkpIHtcbiAgICAgIHZhciBjdXJub2RlID0gbm9kZS5hcmdzLnBvcCgpO1xuXG4gICAgICB3aGlsZSAobm9kZS5hcmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgY3Vybm9kZSA9IG1ha2VOb2RlKFtub2RlLmFyZ3MucG9wKCksIGN1cm5vZGVdKTtcbiAgICAgIH1cblxuICAgICAgbm9kZS5hcmdzID0gY3Vybm9kZS5hcmdzO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogIFVuZmxhdHRlbiBhbGwgZmxhdHRlbmVkIG9wZXJhdG9ycyB0byBhIGxlZnQtaGVhdnkgYmluYXJ5IHRyZWUuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gdW5mbGF0dGVubChub2RlKSB7XG4gICAgaWYgKCFub2RlLmFyZ3MgfHwgbm9kZS5hcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHZhciBtYWtlTm9kZSA9IGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24obm9kZSk7XG4gICAgdmFyIGwgPSBub2RlLmFyZ3MubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgIHVuZmxhdHRlbmwobm9kZS5hcmdzW2ldKTtcbiAgICB9XG5cbiAgICBpZiAobCA+IDIgJiYgaXNBc3NvY2lhdGl2ZShub2RlKSkge1xuICAgICAgdmFyIGN1cm5vZGUgPSBub2RlLmFyZ3Muc2hpZnQoKTtcblxuICAgICAgd2hpbGUgKG5vZGUuYXJncy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGN1cm5vZGUgPSBtYWtlTm9kZShbY3Vybm9kZSwgbm9kZS5hcmdzLnNoaWZ0KCldKTtcbiAgICAgIH1cblxuICAgICAgbm9kZS5hcmdzID0gY3Vybm9kZS5hcmdzO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24obm9kZSkge1xuICAgIGlmICgoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShub2RlKSkge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgYXJncywgbm9kZS5pbXBsaWNpdCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJncykge1xuICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZShuZXcgU3ltYm9sTm9kZShub2RlLm5hbWUpLCBhcmdzKTtcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBjcmVhdGVNYWtlTm9kZUZ1bmN0aW9uOiBjcmVhdGVNYWtlTm9kZUZ1bmN0aW9uLFxuICAgIGlzQ29tbXV0YXRpdmU6IGlzQ29tbXV0YXRpdmUsXG4gICAgaXNBc3NvY2lhdGl2ZTogaXNBc3NvY2lhdGl2ZSxcbiAgICBmbGF0dGVuOiBmbGF0dGVuLFxuICAgIGFsbENoaWxkcmVuOiBhbGxDaGlsZHJlbixcbiAgICB1bmZsYXR0ZW5yOiB1bmZsYXR0ZW5yLFxuICAgIHVuZmxhdHRlbmw6IHVuZmxhdHRlbmxcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVVdGlsID0gY3JlYXRlVXRpbDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTHNvbHZlID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9zb2x2ZVZhbGlkYXRpb24gPSByZXF1aXJlKFwiLi91dGlscy9zb2x2ZVZhbGlkYXRpb25cIik7XG5cbnZhciBuYW1lID0gJ2xzb2x2ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZGl2aWRlU2NhbGFyJywgJ211bHRpcGx5U2NhbGFyJywgJ3N1YnRyYWN0JywgJ2VxdWFsU2NhbGFyJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlTHNvbHZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXIsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBzb2x2ZVZhbGlkYXRpb24gPSAoMCwgX3NvbHZlVmFsaWRhdGlvbi5jcmVhdGVTb2x2ZVZhbGlkYXRpb24pKHtcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIC8qKlxuICAgKiBTb2x2ZXMgdGhlIGxpbmVhciBlcXVhdGlvbiBzeXN0ZW0gYnkgZm9yd2FyZHMgc3Vic3RpdHV0aW9uLiBNYXRyaXggbXVzdCBiZSBhIGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4LlxuICAgKlxuICAgKiBgTCAqIHggPSBiYFxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubHNvbHZlKEwsIGIpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBjb25zdCBhID0gW1stMiwgM10sIFsyLCAxXV1cbiAgICogICAgY29uc3QgYiA9IFsxMSwgOV1cbiAgICogICAgY29uc3QgeCA9IGxzb2x2ZShhLCBiKSAgLy8gW1stNS41XSwgWzIwXV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGx1cCwgc2x1LCB1c29sdmUsIGx1c29sdmVcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXgsIEFycmF5fSBMICAgICAgIEEgTiB4IE4gbWF0cml4IG9yIGFycmF5IChMKVxuICAgKiBAcGFyYW0ge01hdHJpeCwgQXJyYXl9IGIgICAgICAgQSBjb2x1bW4gdmVjdG9yIHdpdGggdGhlIGIgdmFsdWVzXG4gICAqXG4gICAqIEByZXR1cm4ge0RlbnNlTWF0cml4IHwgQXJyYXl9ICBBIGNvbHVtbiB2ZWN0b3Igd2l0aCB0aGUgbGluZWFyIHN5c3RlbSBzb2x1dGlvbiAoeClcbiAgICovXG5cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnU3BhcnNlTWF0cml4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFycmF5TWF0cml4KG0sIGIpIHtcbiAgICAgIC8vIHByb2Nlc3MgbWF0cml4XG4gICAgICByZXR1cm4gX3NwYXJzZUZvcndhcmRTdWJzdGl0dXRpb24obSwgYik7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBcnJheU1hdHJpeChtLCBiKSB7XG4gICAgICAvLyBwcm9jZXNzIG1hdHJpeFxuICAgICAgcmV0dXJuIF9kZW5zZUZvcndhcmRTdWJzdGl0dXRpb24obSwgYik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlBcnJheU1hdHJpeChhLCBiKSB7XG4gICAgICAvLyBjcmVhdGUgZGVuc2UgbWF0cml4IGZyb20gYXJyYXlcbiAgICAgIHZhciBtID0gbWF0cml4KGEpOyAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG5cbiAgICAgIHZhciByID0gX2RlbnNlRm9yd2FyZFN1YnN0aXR1dGlvbihtLCBiKTsgLy8gcmVzdWx0XG5cblxuICAgICAgcmV0dXJuIHIudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gX2RlbnNlRm9yd2FyZFN1YnN0aXR1dGlvbihtLCBiKSB7XG4gICAgLy8gdmFsaWRhdGUgbWF0cml4IGFuZCB2ZWN0b3IsIHJldHVybiBjb3B5IG9mIGNvbHVtbiB2ZWN0b3IgYlxuICAgIGIgPSBzb2x2ZVZhbGlkYXRpb24obSwgYiwgdHJ1ZSk7IC8vIGNvbHVtbiB2ZWN0b3IgZGF0YVxuXG4gICAgdmFyIGJkYXRhID0gYi5fZGF0YTsgLy8gcm93cyAmIGNvbHVtbnNcblxuICAgIHZhciByb3dzID0gbS5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IG0uX3NpemVbMV07IC8vIHJlc3VsdFxuXG4gICAgdmFyIHggPSBbXTsgLy8gZGF0YVxuXG4gICAgdmFyIGRhdGEgPSBtLl9kYXRhOyAvLyBmb3J3YXJkIHNvbHZlIG0gKiB4ID0gYiwgbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gYltqXVxuICAgICAgdmFyIGJqID0gYmRhdGFbal1bMF0gfHwgMDsgLy8geFtqXVxuXG4gICAgICB2YXIgeGogPSB2b2lkIDA7IC8vIGZvcndhcmQgc3Vic3RpdHV0aW9uIChvdXRlciBwcm9kdWN0KSBhdm9pZHMgaW5uZXIgbG9vcGluZyB3aGVuIGJqID09PSAwXG5cbiAgICAgIGlmICghZXF1YWxTY2FsYXIoYmosIDApKSB7XG4gICAgICAgIC8vIHZhbHVlIEAgW2osIGpdXG4gICAgICAgIHZhciB2amogPSBkYXRhW2pdW2pdOyAvLyBjaGVjayB2ampcblxuICAgICAgICBpZiAoZXF1YWxTY2FsYXIodmpqLCAwKSkge1xuICAgICAgICAgIC8vIHN5c3RlbSBjYW5ub3QgYmUgc29sdmVkXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMaW5lYXIgc3lzdGVtIGNhbm5vdCBiZSBzb2x2ZWQgc2luY2UgbWF0cml4IGlzIHNpbmd1bGFyJyk7XG4gICAgICAgIH0gLy8gY2FsY3VsYXRlIHhqXG5cblxuICAgICAgICB4aiA9IGRpdmlkZVNjYWxhcihiaiwgdmpqKTsgLy8gbG9vcCByb3dzXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGogKyAxOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgLy8gdXBkYXRlIGNvcHkgb2YgYlxuICAgICAgICAgIGJkYXRhW2ldID0gW3N1YnRyYWN0KGJkYXRhW2ldWzBdIHx8IDAsIG11bHRpcGx5U2NhbGFyKHhqLCBkYXRhW2ldW2pdKSldO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB6ZXJvIEAgalxuICAgICAgICB4aiA9IDA7XG4gICAgICB9IC8vIHVwZGF0ZSB4XG5cblxuICAgICAgeFtqXSA9IFt4al07XG4gICAgfSAvLyByZXR1cm4gdmVjdG9yXG5cblxuICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgZGF0YTogeCxcbiAgICAgIHNpemU6IFtyb3dzLCAxXVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gX3NwYXJzZUZvcndhcmRTdWJzdGl0dXRpb24obSwgYikge1xuICAgIC8vIHZhbGlkYXRlIG1hdHJpeCBhbmQgdmVjdG9yLCByZXR1cm4gY29weSBvZiBjb2x1bW4gdmVjdG9yIGJcbiAgICBiID0gc29sdmVWYWxpZGF0aW9uKG0sIGIsIHRydWUpOyAvLyBjb2x1bW4gdmVjdG9yIGRhdGFcblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgcm93cyA9IG0uX3NpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBtLl9zaXplWzFdOyAvLyBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgdmFsdWVzID0gbS5fdmFsdWVzO1xuICAgIHZhciBpbmRleCA9IG0uX2luZGV4O1xuICAgIHZhciBwdHIgPSBtLl9wdHI7IC8vIHZhcnNcblxuICAgIHZhciBpLCBrOyAvLyByZXN1bHRcblxuICAgIHZhciB4ID0gW107IC8vIGZvcndhcmQgc29sdmUgbSAqIHggPSBiLCBsb29wIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBiW2pdXG4gICAgICB2YXIgYmogPSBiZGF0YVtqXVswXSB8fCAwOyAvLyBmb3J3YXJkIHN1YnN0aXR1dGlvbiAob3V0ZXIgcHJvZHVjdCkgYXZvaWRzIGlubmVyIGxvb3Bpbmcgd2hlbiBiaiA9PT0gMFxuXG4gICAgICBpZiAoIWVxdWFsU2NhbGFyKGJqLCAwKSkge1xuICAgICAgICAvLyB2YWx1ZSBAIFtqLCBqXVxuICAgICAgICB2YXIgdmpqID0gMDsgLy8gbG93ZXIgdHJpYW5ndWxhciBtYXRyaXggdmFsdWVzICYgaW5kZXggKGNvbHVtbiBqKVxuXG4gICAgICAgIHZhciBqdmFsdWVzID0gW107XG4gICAgICAgIHZhciBqaW5kZXggPSBbXTsgLy8gbGFzdCBpbmRleCBpbiBjb2x1bW5cblxuICAgICAgICB2YXIgbCA9IHB0cltqICsgMV07IC8vIHZhbHVlcyBpbiBjb2x1bW4sIGZpbmQgdmFsdWUgQCBbaiwgal1cblxuICAgICAgICBmb3IgKGsgPSBwdHJbal07IGsgPCBsOyBrKyspIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICBpID0gaW5kZXhba107IC8vIGNoZWNrIHJvdyAocm93cyBhcmUgbm90IHNvcnRlZCEpXG5cbiAgICAgICAgICBpZiAoaSA9PT0gaikge1xuICAgICAgICAgICAgLy8gdXBkYXRlIHZqalxuICAgICAgICAgICAgdmpqID0gdmFsdWVzW2tdO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaSA+IGopIHtcbiAgICAgICAgICAgIC8vIHN0b3JlIGxvd2VyIHRyaWFuZ3VsYXJcbiAgICAgICAgICAgIGp2YWx1ZXMucHVzaCh2YWx1ZXNba10pO1xuICAgICAgICAgICAgamluZGV4LnB1c2goaSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIGF0IHRoaXMgcG9pbnQgd2UgbXVzdCBoYXZlIGEgdmFsdWUgQCBbaiwgal1cblxuXG4gICAgICAgIGlmIChlcXVhbFNjYWxhcih2amosIDApKSB7XG4gICAgICAgICAgLy8gc3lzdGVtIGNhbm5vdCBiZSBzb2x2ZWQsIHRoZXJlIGlzIG5vIHZhbHVlIEAgW2osIGpdXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMaW5lYXIgc3lzdGVtIGNhbm5vdCBiZSBzb2x2ZWQgc2luY2UgbWF0cml4IGlzIHNpbmd1bGFyJyk7XG4gICAgICAgIH0gLy8gY2FsY3VsYXRlIHhqXG5cblxuICAgICAgICB2YXIgeGogPSBkaXZpZGVTY2FsYXIoYmosIHZqaik7IC8vIGxvb3AgbG93ZXIgdHJpYW5ndWxhclxuXG4gICAgICAgIGZvciAoayA9IDAsIGwgPSBqaW5kZXgubGVuZ3RoOyBrIDwgbDsgaysrKSB7XG4gICAgICAgICAgLy8gcm93XG4gICAgICAgICAgaSA9IGppbmRleFtrXTsgLy8gdXBkYXRlIGNvcHkgb2YgYlxuXG4gICAgICAgICAgYmRhdGFbaV0gPSBbc3VidHJhY3QoYmRhdGFbaV1bMF0gfHwgMCwgbXVsdGlwbHlTY2FsYXIoeGosIGp2YWx1ZXNba10pKV07XG4gICAgICAgIH0gLy8gdXBkYXRlIHhcblxuXG4gICAgICAgIHhbal0gPSBbeGpdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdXBkYXRlIHhcbiAgICAgICAgeFtqXSA9IFswXTtcbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiB2ZWN0b3JcblxuXG4gICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiB4LFxuICAgICAgc2l6ZTogW3Jvd3MsIDFdXG4gICAgfSk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVMc29sdmUgPSBjcmVhdGVMc29sdmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUx1c29sdmUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3NvbHZlVmFsaWRhdGlvbiA9IHJlcXVpcmUoXCIuL3V0aWxzL3NvbHZlVmFsaWRhdGlvblwiKTtcblxudmFyIF9jc0lwdmVjID0gcmVxdWlyZShcIi4uL3NwYXJzZS9jc0lwdmVjXCIpO1xuXG52YXIgbmFtZSA9ICdsdXNvbHZlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdsdXAnLCAnc2x1JywgJ3Vzb2x2ZScsICdsc29sdmUnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVMdXNvbHZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgbHVwID0gX3JlZi5sdXAsXG4gICAgICBzbHUgPSBfcmVmLnNsdSxcbiAgICAgIHVzb2x2ZSA9IF9yZWYudXNvbHZlLFxuICAgICAgbHNvbHZlID0gX3JlZi5sc29sdmUsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBzb2x2ZVZhbGlkYXRpb24gPSAoMCwgX3NvbHZlVmFsaWRhdGlvbi5jcmVhdGVTb2x2ZVZhbGlkYXRpb24pKHtcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIC8qKlxuICAgKiBTb2x2ZXMgdGhlIGxpbmVhciBzeXN0ZW0gYEEgKiB4ID0gYmAgd2hlcmUgYEFgIGlzIGFuIFtuIHggbl0gbWF0cml4IGFuZCBgYmAgaXMgYSBbbl0gY29sdW1uIHZlY3Rvci5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmx1c29sdmUoQSwgYikgICAgIC8vIHJldHVybnMgY29sdW1uIHZlY3RvciB3aXRoIHRoZSBzb2x1dGlvbiB0byB0aGUgbGluZWFyIHN5c3RlbSBBICogeCA9IGJcbiAgICogICAgbWF0aC5sdXNvbHZlKGx1cCwgYikgICAvLyByZXR1cm5zIGNvbHVtbiB2ZWN0b3Igd2l0aCB0aGUgc29sdXRpb24gdG8gdGhlIGxpbmVhciBzeXN0ZW0gQSAqIHggPSBiLCBsdXAgPSBtYXRoLmx1cChBKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgbSA9IFtbMSwgMCwgMCwgMF0sIFswLCAyLCAwLCAwXSwgWzAsIDAsIDMsIDBdLCBbMCwgMCwgMCwgNF1dXG4gICAqXG4gICAqICAgIGNvbnN0IHggPSBtYXRoLmx1c29sdmUobSwgWy0xLCAtMSwgLTEsIC0xXSkgICAgICAgIC8vIHggPSBbWy0xXSwgWy0wLjVdLCBbLTEvM10sIFstMC4yNV1dXG4gICAqXG4gICAqICAgIGNvbnN0IGYgPSBtYXRoLmx1cChtKVxuICAgKiAgICBjb25zdCB4MSA9IG1hdGgubHVzb2x2ZShmLCBbLTEsIC0xLCAtMSwgLTFdKSAgICAgICAvLyB4MSA9IFtbLTFdLCBbLTAuNV0sIFstMS8zXSwgWy0wLjI1XV1cbiAgICogICAgY29uc3QgeDIgPSBtYXRoLmx1c29sdmUoZiwgWzEsIDIsIDEsIC0xXSkgICAgICAgICAgLy8geDIgPSBbWzFdLCBbMV0sIFsxLzNdLCBbLTAuMjVdXVxuICAgKlxuICAgKiAgICBjb25zdCBhID0gW1stMiwgM10sIFsyLCAxXV1cbiAgICogICAgY29uc3QgYiA9IFsxMSwgOV1cbiAgICogICAgY29uc3QgeCA9IG1hdGgubHVzb2x2ZShhLCBiKSAgLy8gW1syXSwgWzVdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbHVwLCBzbHUsIGxzb2x2ZSwgdXNvbHZlXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXkgfCBPYmplY3R9IEEgICAgICBJbnZlcnRpYmxlIE1hdHJpeCBvciB0aGUgTWF0cml4IExVIGRlY29tcG9zaXRpb25cbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0gYiAgICAgICAgICAgICAgIENvbHVtbiBWZWN0b3JcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvcmRlcl0gICAgICAgICAgICAgICAgIFRoZSBTeW1ib2xpYyBPcmRlcmluZyBhbmQgQW5hbHlzaXMgb3JkZXIsIHNlZSBzbHUgZm9yIGRldGFpbHMuIE1hdHJpeCBtdXN0IGJlIGEgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7TnVtYmVyfSBbdGhyZXNob2xkXSAgICAgICAgICAgICBQYXJ0aWFsIHBpdm90aW5nIHRocmVzaG9sZCAoMSBmb3IgcGFydGlhbCBwaXZvdGluZyksIHNlZSBzbHUgZm9yIGRldGFpbHMuIE1hdHJpeCBtdXN0IGJlIGEgU3BhcnNlTWF0cml4LlxuICAgKlxuICAgKiBAcmV0dXJuIHtEZW5zZU1hdHJpeCB8IEFycmF5fSAgICAgICAgICAgQ29sdW1uIHZlY3RvciB3aXRoIHRoZSBzb2x1dGlvbiB0byB0aGUgbGluZWFyIHN5c3RlbSBBICogeCA9IGJcbiAgICovXG5cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXksIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlBcnJheU1hdHJpeChhLCBiKSB7XG4gICAgICAvLyBjb252ZXJ0IGEgdG8gbWF0cml4XG4gICAgICBhID0gbWF0cml4KGEpOyAvLyBtYXRyaXggbHVwIGRlY29tcG9zaXRpb25cblxuICAgICAgdmFyIGQgPSBsdXAoYSk7IC8vIHNvbHZlXG5cbiAgICAgIHZhciB4ID0gX2x1c29sdmUoZC5MLCBkLlUsIGQucCwgbnVsbCwgYik7IC8vIGNvbnZlcnQgcmVzdWx0IHRvIGFycmF5XG5cblxuICAgICAgcmV0dXJuIHgudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QXJyYXlNYXRyaXgoYSwgYikge1xuICAgICAgLy8gbWF0cml4IGx1cCBkZWNvbXBvc2l0aW9uXG4gICAgICB2YXIgZCA9IGx1cChhKTsgLy8gc29sdmVcblxuICAgICAgcmV0dXJuIF9sdXNvbHZlKGQuTCwgZC5VLCBkLnAsIG51bGwsIGIpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBcnJheU1hdHJpeChhLCBiKSB7XG4gICAgICAvLyBtYXRyaXggbHVwIGRlY29tcG9zaXRpb25cbiAgICAgIHZhciBkID0gbHVwKGEpOyAvLyBzb2x2ZVxuXG4gICAgICByZXR1cm4gX2x1c29sdmUoZC5MLCBkLlUsIGQucCwgbnVsbCwgYik7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBBcnJheSB8IE1hdHJpeCwgbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBcnJheU1hdHJpeE51bWJlck51bWJlcihhLCBiLCBvcmRlciwgdGhyZXNob2xkKSB7XG4gICAgICAvLyBtYXRyaXggbHUgZGVjb21wb3NpdGlvblxuICAgICAgdmFyIGQgPSBzbHUoYSwgb3JkZXIsIHRocmVzaG9sZCk7IC8vIHNvbHZlXG5cbiAgICAgIHJldHVybiBfbHVzb2x2ZShkLkwsIGQuVSwgZC5wLCBkLnEsIGIpO1xuICAgIH0sXG4gICAgJ09iamVjdCwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBPYmplY3RBcnJheU1hdHJpeChkLCBiKSB7XG4gICAgICAvLyBzb2x2ZVxuICAgICAgcmV0dXJuIF9sdXNvbHZlKGQuTCwgZC5VLCBkLnAsIGQucSwgYik7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfdG9NYXRyaXgoYSkge1xuICAgIC8vIGNoZWNrIGl0IGlzIGEgbWF0cml4XG4gICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKGEpKSB7XG4gICAgICByZXR1cm4gYTtcbiAgICB9IC8vIGNoZWNrIGFycmF5XG5cblxuICAgIGlmICgoMCwgX2lzLmlzQXJyYXkpKGEpKSB7XG4gICAgICByZXR1cm4gbWF0cml4KGEpO1xuICAgIH0gLy8gdGhyb3dcblxuXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBNYXRyaXggTFUgZGVjb21wb3NpdGlvbicpO1xuICB9XG5cbiAgZnVuY3Rpb24gX2x1c29sdmUobCwgdSwgcCwgcSwgYikge1xuICAgIC8vIHZlcmlmeSBMLCBVLCBQXG4gICAgbCA9IF90b01hdHJpeChsKTtcbiAgICB1ID0gX3RvTWF0cml4KHUpOyAvLyB2YWxpZGF0ZSBtYXRyaXggYW5kIHZlY3RvclxuXG4gICAgYiA9IHNvbHZlVmFsaWRhdGlvbihsLCBiLCBmYWxzZSk7IC8vIGFwcGx5IHJvdyBwZXJtdXRhdGlvbnMgaWYgbmVlZGVkIChiIGlzIGEgRGVuc2VNYXRyaXgpXG5cbiAgICBpZiAocCkge1xuICAgICAgYi5fZGF0YSA9ICgwLCBfY3NJcHZlYy5jc0lwdmVjKShwLCBiLl9kYXRhKTtcbiAgICB9IC8vIHVzZSBmb3J3YXJkIHN1YnN0aXR1dGlvbiB0byByZXNvbHZlIEwgKiB5ID0gYlxuXG5cbiAgICB2YXIgeSA9IGxzb2x2ZShsLCBiKTsgLy8gdXNlIGJhY2t3YXJkIHN1YnN0aXR1dGlvbiB0byByZXNvbHZlIFUgKiB4ID0geVxuXG4gICAgdmFyIHggPSB1c29sdmUodSwgeSk7IC8vIGFwcGx5IGNvbHVtbiBwZXJtdXRhdGlvbnMgaWYgbmVlZGVkICh4IGlzIGEgRGVuc2VNYXRyaXgpXG5cbiAgICBpZiAocSkge1xuICAgICAgeC5fZGF0YSA9ICgwLCBfY3NJcHZlYy5jc0lwdmVjKShxLCB4Ll9kYXRhKTtcbiAgICB9IC8vIHJldHVybiBzb2x1dGlvblxuXG5cbiAgICByZXR1cm4geDtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUx1c29sdmUgPSBjcmVhdGVMdXNvbHZlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVc29sdmUgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3NvbHZlVmFsaWRhdGlvbiA9IHJlcXVpcmUoXCIuL3V0aWxzL3NvbHZlVmFsaWRhdGlvblwiKTtcblxudmFyIG5hbWUgPSAndXNvbHZlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdkaXZpZGVTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAnc3VidHJhY3QnLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVVc29sdmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcixcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIHNvbHZlVmFsaWRhdGlvbiA9ICgwLCBfc29sdmVWYWxpZGF0aW9uLmNyZWF0ZVNvbHZlVmFsaWRhdGlvbikoe1xuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgLyoqXG4gICAqIFNvbHZlcyB0aGUgbGluZWFyIGVxdWF0aW9uIHN5c3RlbSBieSBiYWNrd2FyZCBzdWJzdGl0dXRpb24uIE1hdHJpeCBtdXN0IGJlIGFuIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4LlxuICAgKlxuICAgKiBgVSAqIHggPSBiYFxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgudXNvbHZlKFUsIGIpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBjb25zdCBhID0gW1stMiwgM10sIFsyLCAxXV1cbiAgICogICAgY29uc3QgYiA9IFsxMSwgOV1cbiAgICogICAgY29uc3QgeCA9IHVzb2x2ZShhLCBiKSAgLy8gW1s4XSwgWzldXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbHVwLCBzbHUsIHVzb2x2ZSwgbHVzb2x2ZVxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeCwgQXJyYXl9IFUgICAgICAgQSBOIHggTiBtYXRyaXggb3IgYXJyYXkgKFUpXG4gICAqIEBwYXJhbSB7TWF0cml4LCBBcnJheX0gYiAgICAgICBBIGNvbHVtbiB2ZWN0b3Igd2l0aCB0aGUgYiB2YWx1ZXNcbiAgICpcbiAgICogQHJldHVybiB7RGVuc2VNYXRyaXggfCBBcnJheX0gIEEgY29sdW1uIHZlY3RvciB3aXRoIHRoZSBsaW5lYXIgc3lzdGVtIHNvbHV0aW9uICh4KVxuICAgKi9cblxuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdTcGFyc2VNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QXJyYXlNYXRyaXgobSwgYikge1xuICAgICAgLy8gcHJvY2VzcyBtYXRyaXhcbiAgICAgIHJldHVybiBfc3BhcnNlQmFja3dhcmRTdWJzdGl0dXRpb24obSwgYik7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBcnJheU1hdHJpeChtLCBiKSB7XG4gICAgICAvLyBwcm9jZXNzIG1hdHJpeFxuICAgICAgcmV0dXJuIF9kZW5zZUJhY2t3YXJkU3Vic3RpdHV0aW9uKG0sIGIpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5QXJyYXlNYXRyaXgoYSwgYikge1xuICAgICAgLy8gY3JlYXRlIGRlbnNlIG1hdHJpeCBmcm9tIGFycmF5XG4gICAgICB2YXIgbSA9IG1hdHJpeChhKTsgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuXG4gICAgICB2YXIgciA9IF9kZW5zZUJhY2t3YXJkU3Vic3RpdHV0aW9uKG0sIGIpOyAvLyByZXN1bHRcblxuXG4gICAgICByZXR1cm4gci52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfZGVuc2VCYWNrd2FyZFN1YnN0aXR1dGlvbihtLCBiKSB7XG4gICAgLy8gdmFsaWRhdGUgbWF0cml4IGFuZCB2ZWN0b3IsIHJldHVybiBjb3B5IG9mIGNvbHVtbiB2ZWN0b3IgYlxuICAgIGIgPSBzb2x2ZVZhbGlkYXRpb24obSwgYiwgdHJ1ZSk7IC8vIGNvbHVtbiB2ZWN0b3IgZGF0YVxuXG4gICAgdmFyIGJkYXRhID0gYi5fZGF0YTsgLy8gcm93cyAmIGNvbHVtbnNcblxuICAgIHZhciByb3dzID0gbS5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IG0uX3NpemVbMV07IC8vIHJlc3VsdFxuXG4gICAgdmFyIHggPSBbXTsgLy8gYXJyYXlzXG5cbiAgICB2YXIgZGF0YSA9IG0uX2RhdGE7IC8vIGJhY2t3YXJkIHNvbHZlIG0gKiB4ID0gYiwgbG9vcCBjb2x1bW5zIChiYWNrd2FyZHMpXG5cbiAgICBmb3IgKHZhciBqID0gY29sdW1ucyAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICAvLyBiW2pdXG4gICAgICB2YXIgYmogPSBiZGF0YVtqXVswXSB8fCAwOyAvLyB4W2pdXG5cbiAgICAgIHZhciB4aiA9IHZvaWQgMDsgLy8gYmFja3dhcmQgc3Vic3RpdHV0aW9uIChvdXRlciBwcm9kdWN0KSBhdm9pZHMgaW5uZXIgbG9vcGluZyB3aGVuIGJqID09PSAwXG5cbiAgICAgIGlmICghZXF1YWxTY2FsYXIoYmosIDApKSB7XG4gICAgICAgIC8vIHZhbHVlIEAgW2osIGpdXG4gICAgICAgIHZhciB2amogPSBkYXRhW2pdW2pdOyAvLyBjaGVjayB2ampcblxuICAgICAgICBpZiAoZXF1YWxTY2FsYXIodmpqLCAwKSkge1xuICAgICAgICAgIC8vIHN5c3RlbSBjYW5ub3QgYmUgc29sdmVkXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMaW5lYXIgc3lzdGVtIGNhbm5vdCBiZSBzb2x2ZWQgc2luY2UgbWF0cml4IGlzIHNpbmd1bGFyJyk7XG4gICAgICAgIH0gLy8gY2FsY3VsYXRlIHhqXG5cblxuICAgICAgICB4aiA9IGRpdmlkZVNjYWxhcihiaiwgdmpqKTsgLy8gbG9vcCByb3dzXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGogLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICAgIC8vIHVwZGF0ZSBjb3B5IG9mIGJcbiAgICAgICAgICBiZGF0YVtpXSA9IFtzdWJ0cmFjdChiZGF0YVtpXVswXSB8fCAwLCBtdWx0aXBseVNjYWxhcih4aiwgZGF0YVtpXVtqXSkpXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gemVybyB2YWx1ZSBAIGpcbiAgICAgICAgeGogPSAwO1xuICAgICAgfSAvLyB1cGRhdGUgeFxuXG5cbiAgICAgIHhbal0gPSBbeGpdO1xuICAgIH0gLy8gcmV0dXJuIGNvbHVtbiB2ZWN0b3JcblxuXG4gICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiB4LFxuICAgICAgc2l6ZTogW3Jvd3MsIDFdXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBfc3BhcnNlQmFja3dhcmRTdWJzdGl0dXRpb24obSwgYikge1xuICAgIC8vIHZhbGlkYXRlIG1hdHJpeCBhbmQgdmVjdG9yLCByZXR1cm4gY29weSBvZiBjb2x1bW4gdmVjdG9yIGJcbiAgICBiID0gc29sdmVWYWxpZGF0aW9uKG0sIGIsIHRydWUpOyAvLyBjb2x1bW4gdmVjdG9yIGRhdGFcblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgcm93cyA9IG0uX3NpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBtLl9zaXplWzFdOyAvLyBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgdmFsdWVzID0gbS5fdmFsdWVzO1xuICAgIHZhciBpbmRleCA9IG0uX2luZGV4O1xuICAgIHZhciBwdHIgPSBtLl9wdHI7IC8vIHZhcnNcblxuICAgIHZhciBpLCBrOyAvLyByZXN1bHRcblxuICAgIHZhciB4ID0gW107IC8vIGJhY2t3YXJkIHNvbHZlIG0gKiB4ID0gYiwgbG9vcCBjb2x1bW5zIChiYWNrd2FyZHMpXG5cbiAgICBmb3IgKHZhciBqID0gY29sdW1ucyAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgICAvLyBiW2pdXG4gICAgICB2YXIgYmogPSBiZGF0YVtqXVswXSB8fCAwOyAvLyBiYWNrd2FyZCBzdWJzdGl0dXRpb24gKG91dGVyIHByb2R1Y3QpIGF2b2lkcyBpbm5lciBsb29waW5nIHdoZW4gYmogPT09IDBcblxuICAgICAgaWYgKCFlcXVhbFNjYWxhcihiaiwgMCkpIHtcbiAgICAgICAgLy8gdmFsdWUgQCBbaiwgal1cbiAgICAgICAgdmFyIHZqaiA9IDA7IC8vIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4IHZhbHVlcyAmIGluZGV4IChjb2x1bW4gailcblxuICAgICAgICB2YXIganZhbHVlcyA9IFtdO1xuICAgICAgICB2YXIgamluZGV4ID0gW107IC8vIGZpcnN0ICYgbGFzdCBpbmRlY2VzIGluIGNvbHVtblxuXG4gICAgICAgIHZhciBmID0gcHRyW2pdO1xuICAgICAgICB2YXIgbCA9IHB0cltqICsgMV07IC8vIHZhbHVlcyBpbiBjb2x1bW4sIGZpbmQgdmFsdWUgQCBbaiwgal0sIGxvb3AgYmFja3dhcmRzXG5cbiAgICAgICAgZm9yIChrID0gbCAtIDE7IGsgPj0gZjsgay0tKSB7XG4gICAgICAgICAgLy8gcm93XG4gICAgICAgICAgaSA9IGluZGV4W2tdOyAvLyBjaGVjayByb3dcblxuICAgICAgICAgIGlmIChpID09PSBqKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgdmpqXG4gICAgICAgICAgICB2amogPSB2YWx1ZXNba107XG4gICAgICAgICAgfSBlbHNlIGlmIChpIDwgaikge1xuICAgICAgICAgICAgLy8gc3RvcmUgdXBwZXIgdHJpYW5ndWxhclxuICAgICAgICAgICAganZhbHVlcy5wdXNoKHZhbHVlc1trXSk7XG4gICAgICAgICAgICBqaW5kZXgucHVzaChpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gYXQgdGhpcyBwb2ludCB3ZSBtdXN0IGhhdmUgYSB2YWx1ZSBAIFtqLCBqXVxuXG5cbiAgICAgICAgaWYgKGVxdWFsU2NhbGFyKHZqaiwgMCkpIHtcbiAgICAgICAgICAvLyBzeXN0ZW0gY2Fubm90IGJlIHNvbHZlZCwgdGhlcmUgaXMgbm8gdmFsdWUgQCBbaiwgal1cbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0xpbmVhciBzeXN0ZW0gY2Fubm90IGJlIHNvbHZlZCBzaW5jZSBtYXRyaXggaXMgc2luZ3VsYXInKTtcbiAgICAgICAgfSAvLyBjYWxjdWxhdGUgeGpcblxuXG4gICAgICAgIHZhciB4aiA9IGRpdmlkZVNjYWxhcihiaiwgdmpqKTsgLy8gbG9vcCB1cHBlciB0cmlhbmd1bGFyXG5cbiAgICAgICAgZm9yIChrID0gMCwgbCA9IGppbmRleC5sZW5ndGg7IGsgPCBsOyBrKyspIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICBpID0gamluZGV4W2tdOyAvLyB1cGRhdGUgY29weSBvZiBiXG5cbiAgICAgICAgICBiZGF0YVtpXSA9IFtzdWJ0cmFjdChiZGF0YVtpXVswXSwgbXVsdGlwbHlTY2FsYXIoeGosIGp2YWx1ZXNba10pKV07XG4gICAgICAgIH0gLy8gdXBkYXRlIHhcblxuXG4gICAgICAgIHhbal0gPSBbeGpdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdXBkYXRlIHhcbiAgICAgICAgeFtqXSA9IFswXTtcbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiB2ZWN0b3JcblxuXG4gICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiB4LFxuICAgICAgc2l6ZTogW3Jvd3MsIDFdXG4gICAgfSk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVVc29sdmUgPSBjcmVhdGVVc29sdmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNvbHZlVmFsaWRhdGlvbiA9IGNyZWF0ZVNvbHZlVmFsaWRhdGlvbjtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi8uLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG5mdW5jdGlvbiBjcmVhdGVTb2x2ZVZhbGlkYXRpb24oX3JlZikge1xuICB2YXIgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgbWF0cml4IGFuZCBjb2x1bW4gdmVjdG9yIGIgZm9yIGJhY2t3YXJkL2ZvcndhcmQgc3Vic3RpdHV0aW9uIGFsZ29yaXRobXMuXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBtICAgICAgICAgICAgQW4gTiB4IE4gbWF0cml4XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IGIgICAgQSBjb2x1bW4gdmVjdG9yXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gY29weSAgICAgICAgUmV0dXJuIGEgY29weSBvZiB2ZWN0b3IgYlxuICAgKlxuICAgKiBAcmV0dXJuIHtEZW5zZU1hdHJpeH0gICAgICAgIERlbnNlIGNvbHVtbiB2ZWN0b3IgYlxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIHNvbHZlVmFsaWRhdGlvbihtLCBiLCBjb3B5KSB7XG4gICAgLy8gbWF0cml4IHNpemVcbiAgICB2YXIgc2l6ZSA9IG0uc2l6ZSgpOyAvLyB2YWxpZGF0ZSBtYXRyaXggZGltZW5zaW9uc1xuXG4gICAgaWYgKHNpemUubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgdHdvIGRpbWVuc2lvbmFsIChzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgfSAvLyByb3dzICYgY29sdW1uc1xuXG5cbiAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBzaXplWzFdOyAvLyB2YWxpZGF0ZSByb3dzICYgY29sdW1uc1xuXG4gICAgaWYgKHJvd3MgIT09IGNvbHVtbnMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICB9IC8vIHZhcnNcblxuXG4gICAgdmFyIGRhdGEsIGksIGJkYXRhOyAvLyBjaGVjayBiIGlzIG1hdHJpeFxuXG4gICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKGIpKSB7XG4gICAgICAvLyBtYXRyaXggc2l6ZVxuICAgICAgdmFyIG1zaXplID0gYi5zaXplKCk7IC8vIHZlY3RvclxuXG4gICAgICBpZiAobXNpemUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIGNoZWNrIHZlY3RvciBsZW5ndGhcbiAgICAgICAgaWYgKG1zaXplWzBdICE9PSByb3dzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IGNvbHVtbnMgbXVzdCBtYXRjaCB2ZWN0b3IgbGVuZ3RoLicpO1xuICAgICAgICB9IC8vIGNyZWF0ZSBkYXRhIGFycmF5XG5cblxuICAgICAgICBkYXRhID0gW107IC8vIG1hdHJpeCBkYXRhIChEZW5zZU1hdHJpeClcblxuICAgICAgICBiZGF0YSA9IGIuX2RhdGE7IC8vIGxvb3AgYiBkYXRhXG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgIC8vIHJvdyBhcnJheVxuICAgICAgICAgIGRhdGFbaV0gPSBbYmRhdGFbaV1dO1xuICAgICAgICB9IC8vIHJldHVybiBEZW5zZSBNYXRyaXhcblxuXG4gICAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgc2l6ZTogW3Jvd3MsIDFdLFxuICAgICAgICAgIGRhdGF0eXBlOiBiLl9kYXRhdHlwZVxuICAgICAgICB9KTtcbiAgICAgIH0gLy8gdHdvIGRpbWVuc2lvbnNcblxuXG4gICAgICBpZiAobXNpemUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIC8vIGFycmF5IG11c3QgYmUgYSBjb2x1bW4gdmVjdG9yXG4gICAgICAgIGlmIChtc2l6ZVswXSAhPT0gcm93cyB8fCBtc2l6ZVsxXSAhPT0gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBjb2x1bW5zIG11c3QgbWF0Y2ggdmVjdG9yIGxlbmd0aC4nKTtcbiAgICAgICAgfSAvLyBjaGVjayBtYXRyaXggdHlwZVxuXG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNEZW5zZU1hdHJpeCkoYikpIHtcbiAgICAgICAgICAvLyBjaGVjayBhIGNvcHkgaXMgbmVlZGVkXG4gICAgICAgICAgaWYgKGNvcHkpIHtcbiAgICAgICAgICAgIC8vIGNyZWF0ZSBkYXRhIGFycmF5XG4gICAgICAgICAgICBkYXRhID0gW107IC8vIG1hdHJpeCBkYXRhIChEZW5zZU1hdHJpeClcblxuICAgICAgICAgICAgYmRhdGEgPSBiLl9kYXRhOyAvLyBsb29wIGIgZGF0YVxuXG4gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICAgIC8vIHJvdyBhcnJheVxuICAgICAgICAgICAgICBkYXRhW2ldID0gW2JkYXRhW2ldWzBdXTtcbiAgICAgICAgICAgIH0gLy8gcmV0dXJuIERlbnNlIE1hdHJpeFxuXG5cbiAgICAgICAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICBzaXplOiBbcm93cywgMV0sXG4gICAgICAgICAgICAgIGRhdGF0eXBlOiBiLl9kYXRhdHlwZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSAvLyBiIGlzIGFscmVhZHkgYSBjb2x1bW4gdmVjdG9yXG5cblxuICAgICAgICAgIHJldHVybiBiO1xuICAgICAgICB9IC8vIGNyZWF0ZSBkYXRhIGFycmF5XG5cblxuICAgICAgICBkYXRhID0gW107XG5cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgIGRhdGFbaV0gPSBbMF07XG4gICAgICAgIH0gLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcblxuXG4gICAgICAgIHZhciB2YWx1ZXMgPSBiLl92YWx1ZXM7XG4gICAgICAgIHZhciBpbmRleCA9IGIuX2luZGV4O1xuICAgICAgICB2YXIgcHRyID0gYi5fcHRyOyAvLyBsb29wIHZhbHVlcyBpbiBjb2x1bW4gMFxuXG4gICAgICAgIGZvciAodmFyIGsxID0gcHRyWzFdLCBrID0gcHRyWzBdOyBrIDwgazE7IGsrKykge1xuICAgICAgICAgIC8vIHJvd1xuICAgICAgICAgIGkgPSBpbmRleFtrXTsgLy8gYWRkIHRvIGRhdGFcblxuICAgICAgICAgIGRhdGFbaV1bMF0gPSB2YWx1ZXNba107XG4gICAgICAgIH0gLy8gcmV0dXJuIERlbnNlIE1hdHJpeFxuXG5cbiAgICAgICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICBzaXplOiBbcm93cywgMV0sXG4gICAgICAgICAgZGF0YXR5cGU6IGIuX2RhdGF0eXBlXG4gICAgICAgIH0pO1xuICAgICAgfSAvLyB0aHJvdyBlcnJvclxuXG5cbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBjb2x1bW5zIG11c3QgbWF0Y2ggdmVjdG9yIGxlbmd0aC4nKTtcbiAgICB9IC8vIGNoZWNrIGIgaXMgYXJyYXlcblxuXG4gICAgaWYgKCgwLCBfaXMuaXNBcnJheSkoYikpIHtcbiAgICAgIC8vIHNpemVcbiAgICAgIHZhciBhc2l6ZSA9ICgwLCBfYXJyYXkuYXJyYXlTaXplKShiKTsgLy8gY2hlY2sgbWF0cml4IGRpbWVuc2lvbnMsIHZlY3RvclxuXG4gICAgICBpZiAoYXNpemUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIGNoZWNrIHZlY3RvciBsZW5ndGhcbiAgICAgICAgaWYgKGFzaXplWzBdICE9PSByb3dzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IGNvbHVtbnMgbXVzdCBtYXRjaCB2ZWN0b3IgbGVuZ3RoLicpO1xuICAgICAgICB9IC8vIGNyZWF0ZSBkYXRhIGFycmF5XG5cblxuICAgICAgICBkYXRhID0gW107IC8vIGxvb3AgYlxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAvLyByb3cgYXJyYXlcbiAgICAgICAgICBkYXRhW2ldID0gW2JbaV1dO1xuICAgICAgICB9IC8vIHJldHVybiBEZW5zZSBNYXRyaXhcblxuXG4gICAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgc2l6ZTogW3Jvd3MsIDFdXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXNpemUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIC8vIGFycmF5IG11c3QgYmUgYSBjb2x1bW4gdmVjdG9yXG4gICAgICAgIGlmIChhc2l6ZVswXSAhPT0gcm93cyB8fCBhc2l6ZVsxXSAhPT0gMSkge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBjb2x1bW5zIG11c3QgbWF0Y2ggdmVjdG9yIGxlbmd0aC4nKTtcbiAgICAgICAgfSAvLyBjcmVhdGUgZGF0YSBhcnJheVxuXG5cbiAgICAgICAgZGF0YSA9IFtdOyAvLyBsb29wIGIgZGF0YVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAvLyByb3cgYXJyYXlcbiAgICAgICAgICBkYXRhW2ldID0gW2JbaV1bMF1dO1xuICAgICAgICB9IC8vIHJldHVybiBEZW5zZSBNYXRyaXhcblxuXG4gICAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgc2l6ZTogW3Jvd3MsIDFdXG4gICAgICAgIH0pO1xuICAgICAgfSAvLyB0aHJvdyBlcnJvclxuXG5cbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBjb2x1bW5zIG11c3QgbWF0Y2ggdmVjdG9yIGxlbmd0aC4nKTtcbiAgICB9XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNzQW1kID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jc0ZrZWVwID0gcmVxdWlyZShcIi4vY3NGa2VlcFwiKTtcblxudmFyIF9jc0ZsaXAgPSByZXF1aXJlKFwiLi9jc0ZsaXBcIik7XG5cbnZhciBfY3NUZGZzID0gcmVxdWlyZShcIi4vY3NUZGZzXCIpO1xuXG52YXIgbmFtZSA9ICdjc0FtZCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydhZGQnLCAnbXVsdGlwbHknLCAndHJhbnNwb3NlJ107XG52YXIgY3JlYXRlQ3NBbWQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgYWRkID0gX3JlZi5hZGQsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICB0cmFuc3Bvc2UgPSBfcmVmLnRyYW5zcG9zZTtcblxuICAvKipcbiAgICogQXBwcm94aW1hdGUgbWluaW11bSBkZWdyZWUgb3JkZXJpbmcuIFRoZSBtaW5pbXVtIGRlZ3JlZSBhbGdvcml0aG0gaXMgYSB3aWRlbHkgdXNlZFxuICAgKiBoZXVyaXN0aWMgZm9yIGZpbmRpbmcgYSBwZXJtdXRhdGlvbiBQIHNvIHRoYXQgUCpBKlAnIGhhcyBmZXdlciBub256ZXJvcyBpbiBpdHMgZmFjdG9yaXphdGlvblxuICAgKiB0aGFuIEEuIEl0IGlzIGEgZ3JlYWR5IG1ldGhvZCB0aGF0IHNlbGVjdHMgdGhlIHNwYXJzZXN0IHBpdm90IHJvdyBhbmQgY29sdW1uIGR1cmluZyB0aGUgY291cnNlXG4gICAqIG9mIGEgcmlnaHQgbG9va2luZyBzcGFyc2UgQ2hvbGVza3kgZmFjdG9yaXphdGlvbi5cbiAgICpcbiAgICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IG9yZGVyICAgIDA6IE5hdHVyYWwsIDE6IENob2xlc2t5LCAyOiBMVSwgMzogUVJcbiAgICogQHBhcmFtIHtNYXRyaXh9IG0gICAgICAgIFNwYXJzZSBNYXRyaXhcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBjc0FtZChvcmRlciwgYSkge1xuICAgIC8vIGNoZWNrIGlucHV0IHBhcmFtZXRlcnNcbiAgICBpZiAoIWEgfHwgb3JkZXIgPD0gMCB8fCBvcmRlciA+IDMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gYSBtYXRyaXggYXJyYXlzXG5cblxuICAgIHZhciBhc2l6ZSA9IGEuX3NpemU7IC8vIHJvd3MgYW5kIGNvbHVtbnNcblxuICAgIHZhciBtID0gYXNpemVbMF07XG4gICAgdmFyIG4gPSBhc2l6ZVsxXTsgLy8gaW5pdGlhbGl6ZSB2YXJzXG5cbiAgICB2YXIgbGVtYXggPSAwOyAvLyBkZW5zZSB0aHJlc2hvbGRcblxuICAgIHZhciBkZW5zZSA9IE1hdGgubWF4KDE2LCAxMCAqIE1hdGguc3FydChuKSk7XG4gICAgZGVuc2UgPSBNYXRoLm1pbihuIC0gMiwgZGVuc2UpOyAvLyBjcmVhdGUgdGFyZ2V0IG1hdHJpeCBDXG5cbiAgICB2YXIgY20gPSBfY3JlYXRlVGFyZ2V0TWF0cml4KG9yZGVyLCBhLCBtLCBuLCBkZW5zZSk7IC8vIGRyb3AgZGlhZ29uYWwgZW50cmllc1xuXG5cbiAgICAoMCwgX2NzRmtlZXAuY3NGa2VlcCkoY20sIF9kaWFnLCBudWxsKTsgLy8gQyBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgY2luZGV4ID0gY20uX2luZGV4O1xuICAgIHZhciBjcHRyID0gY20uX3B0cjsgLy8gbnVtYmVyIG9mIG5vbnplcm8gZWxlbWVudHMgaW4gQ1xuXG4gICAgdmFyIGNueiA9IGNwdHJbbl07IC8vIGFsbG9jYXRlIHJlc3VsdCAobisxKVxuXG4gICAgdmFyIFAgPSBbXTsgLy8gY3JlYXRlIHdvcmtzcGFjZSAoOCAqIChuICsgMSkpXG5cbiAgICB2YXIgVyA9IFtdO1xuICAgIHZhciBsZW4gPSAwOyAvLyBmaXJzdCBuICsgMSBlbnRyaWVzXG5cbiAgICB2YXIgbnYgPSBuICsgMTsgLy8gbmV4dCBuICsgMSBlbnRyaWVzXG5cbiAgICB2YXIgbmV4dCA9IDIgKiAobiArIDEpOyAvLyBuZXh0IG4gKyAxIGVudHJpZXNcblxuICAgIHZhciBoZWFkID0gMyAqIChuICsgMSk7IC8vIG5leHQgbiArIDEgZW50cmllc1xuXG4gICAgdmFyIGVsZW4gPSA0ICogKG4gKyAxKTsgLy8gbmV4dCBuICsgMSBlbnRyaWVzXG5cbiAgICB2YXIgZGVncmVlID0gNSAqIChuICsgMSk7IC8vIG5leHQgbiArIDEgZW50cmllc1xuXG4gICAgdmFyIHcgPSA2ICogKG4gKyAxKTsgLy8gbmV4dCBuICsgMSBlbnRyaWVzXG5cbiAgICB2YXIgaGhlYWQgPSA3ICogKG4gKyAxKTsgLy8gbGFzdCBuICsgMSBlbnRyaWVzXG4gICAgLy8gdXNlIFAgYXMgd29ya3NwYWNlIGZvciBsYXN0XG5cbiAgICB2YXIgbGFzdCA9IFA7IC8vIGluaXRpYWxpemUgcXVvdGllbnQgZ3JhcGhcblxuICAgIHZhciBtYXJrID0gX2luaXRpYWxpemVRdW90aWVudEdyYXBoKG4sIGNwdHIsIFcsIGxlbiwgaGVhZCwgbGFzdCwgbmV4dCwgaGhlYWQsIG52LCB3LCBlbGVuLCBkZWdyZWUpOyAvLyBpbml0aWFsaXplIGRlZ3JlZSBsaXN0c1xuXG5cbiAgICB2YXIgbmVsID0gX2luaXRpYWxpemVEZWdyZWVMaXN0cyhuLCBjcHRyLCBXLCBkZWdyZWUsIGVsZW4sIHcsIGRlbnNlLCBudiwgaGVhZCwgbGFzdCwgbmV4dCk7IC8vIG1pbmltdW0gZGVncmVlIG5vZGVcblxuXG4gICAgdmFyIG1pbmRlZyA9IDA7IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrLCBrMSwgazIsIGUsIHBqLCBsbiwgbnZpLCBwaywgZWxuLCBwMSwgcDIsIHBuLCBoLCBkOyAvLyB3aGlsZSAoc2VsZWN0aW5nIHBpdm90cykgZG9cblxuICAgIHdoaWxlIChuZWwgPCBuKSB7XG4gICAgICAvLyBzZWxlY3Qgbm9kZSBvZiBtaW5pbXVtIGFwcHJveGltYXRlIGRlZ3JlZS4gYW1kKCkgaXMgbm93IHJlYWR5IHRvIHN0YXJ0IGVsaW1pbmF0aW5nIHRoZSBncmFwaC4gSXQgZmlyc3RcbiAgICAgIC8vIGZpbmRzIGEgbm9kZSBrIG9mIG1pbmltdW0gZGVncmVlIGFuZCByZW1vdmVzIGl0IGZyb20gaXRzIGRlZ3JlZSBsaXN0LiBUaGUgdmFyaWFibGUgbmVsIGtlZXBzIHRyYWNrIG9mIHRob3dcbiAgICAgIC8vIG1hbnkgbm9kZXMgaGF2ZSBiZWVuIGVsaW1pbmF0ZWQuXG4gICAgICBmb3IgKGsgPSAtMTsgbWluZGVnIDwgbiAmJiAoayA9IFdbaGVhZCArIG1pbmRlZ10pID09PSAtMTsgbWluZGVnKyspIHtcbiAgICAgICAgO1xuICAgICAgfVxuXG4gICAgICBpZiAoV1tuZXh0ICsga10gIT09IC0xKSB7XG4gICAgICAgIGxhc3RbV1tuZXh0ICsga11dID0gLTE7XG4gICAgICB9IC8vIHJlbW92ZSBrIGZyb20gZGVncmVlIGxpc3RcblxuXG4gICAgICBXW2hlYWQgKyBtaW5kZWddID0gV1tuZXh0ICsga107IC8vIGVsZW5rID0gfEVrfFxuXG4gICAgICB2YXIgZWxlbmsgPSBXW2VsZW4gKyBrXTsgLy8gIyBvZiBub2RlcyBrIHJlcHJlc2VudHNcblxuICAgICAgdmFyIG52ayA9IFdbbnYgKyBrXTsgLy8gV1tudiArIGtdIG5vZGVzIG9mIEEgZWxpbWluYXRlZFxuXG4gICAgICBuZWwgKz0gbnZrOyAvLyBDb25zdHJ1Y3QgYSBuZXcgZWxlbWVudC4gVGhlIG5ldyBlbGVtZW50IExrIGlzIGNvbnN0cnVjdGVkIGluIHBsYWNlIGlmIHxFa3wgPSAwLiBudltpXSBpc1xuICAgICAgLy8gbmVnYXRlZCBmb3IgYWxsIG5vZGVzIGkgaW4gTGsgdG8gZmxhZyB0aGVtIGFzIG1lbWJlcnMgb2YgdGhpcyBzZXQuIEVhY2ggbm9kZSBpIGlzIHJlbW92ZWQgZnJvbSB0aGVcbiAgICAgIC8vIGRlZ3JlZSBsaXN0cy4gQWxsIGVsZW1lbnRzIGUgaW4gRWsgYXJlIGFic29ydmVkIGludG8gZWxlbWVudCBrLlxuXG4gICAgICB2YXIgZGsgPSAwOyAvLyBmbGFnIGsgYXMgaW4gTGtcblxuICAgICAgV1tudiArIGtdID0gLW52aztcbiAgICAgIHZhciBwID0gY3B0cltrXTsgLy8gZG8gaW4gcGxhY2UgaWYgV1tlbGVuICsga10gPT09IDBcblxuICAgICAgdmFyIHBrMSA9IGVsZW5rID09PSAwID8gcCA6IGNuejtcbiAgICAgIHZhciBwazIgPSBwazE7XG5cbiAgICAgIGZvciAoazEgPSAxOyBrMSA8PSBlbGVuayArIDE7IGsxKyspIHtcbiAgICAgICAgaWYgKGsxID4gZWxlbmspIHtcbiAgICAgICAgICAvLyBzZWFyY2ggdGhlIG5vZGVzIGluIGtcbiAgICAgICAgICBlID0gazsgLy8gbGlzdCBvZiBub2RlcyBzdGFydHMgYXQgY2luZGV4W3BqXVxuXG4gICAgICAgICAgcGogPSBwOyAvLyBsZW5ndGggb2YgbGlzdCBvZiBub2RlcyBpbiBrXG5cbiAgICAgICAgICBsbiA9IFdbbGVuICsga10gLSBlbGVuaztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBzZWFyY2ggdGhlIG5vZGVzIGluIGVcbiAgICAgICAgICBlID0gY2luZGV4W3ArK107XG4gICAgICAgICAgcGogPSBjcHRyW2VdOyAvLyBsZW5ndGggb2YgbGlzdCBvZiBub2RlcyBpbiBlXG5cbiAgICAgICAgICBsbiA9IFdbbGVuICsgZV07XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGsyID0gMTsgazIgPD0gbG47IGsyKyspIHtcbiAgICAgICAgICBpID0gY2luZGV4W3BqKytdOyAvLyBjaGVjayAgbm9kZSBpIGRlYWQsIG9yIHNlZW5cblxuICAgICAgICAgIGlmICgobnZpID0gV1tudiArIGldKSA8PSAwKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IC8vIFdbZGVncmVlICsgTGtdICs9IHNpemUgb2Ygbm9kZSBpXG5cblxuICAgICAgICAgIGRrICs9IG52aTsgLy8gbmVnYXRlIFdbbnYgKyBpXSB0byBkZW5vdGUgaSBpbiBMa1xuXG4gICAgICAgICAgV1tudiArIGldID0gLW52aTsgLy8gcGxhY2UgaSBpbiBMa1xuXG4gICAgICAgICAgY2luZGV4W3BrMisrXSA9IGk7XG5cbiAgICAgICAgICBpZiAoV1tuZXh0ICsgaV0gIT09IC0xKSB7XG4gICAgICAgICAgICBsYXN0W1dbbmV4dCArIGldXSA9IGxhc3RbaV07XG4gICAgICAgICAgfSAvLyBjaGVjayB3ZSBuZWVkIHRvIHJlbW92ZSBpIGZyb20gZGVncmVlIGxpc3RcblxuXG4gICAgICAgICAgaWYgKGxhc3RbaV0gIT09IC0xKSB7XG4gICAgICAgICAgICBXW25leHQgKyBsYXN0W2ldXSA9IFdbbmV4dCArIGldO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBXW2hlYWQgKyBXW2RlZ3JlZSArIGldXSA9IFdbbmV4dCArIGldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlICE9PSBrKSB7XG4gICAgICAgICAgLy8gYWJzb3JiIGUgaW50byBrXG4gICAgICAgICAgY3B0cltlXSA9ICgwLCBfY3NGbGlwLmNzRmxpcCkoayk7IC8vIGUgaXMgbm93IGEgZGVhZCBlbGVtZW50XG5cbiAgICAgICAgICBXW3cgKyBlXSA9IDA7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gY2luZGV4W2Nuei4uLm56bWF4XSBpcyBmcmVlXG5cblxuICAgICAgaWYgKGVsZW5rICE9PSAwKSB7XG4gICAgICAgIGNueiA9IHBrMjtcbiAgICAgIH0gLy8gZXh0ZXJuYWwgZGVncmVlIG9mIGsgLSB8TGtcXGl8XG5cblxuICAgICAgV1tkZWdyZWUgKyBrXSA9IGRrOyAvLyBlbGVtZW50IGsgaXMgaW4gY2luZGV4W3BrMS4ucGsyLTFdXG5cbiAgICAgIGNwdHJba10gPSBwazE7XG4gICAgICBXW2xlbiArIGtdID0gcGsyIC0gcGsxOyAvLyBrIGlzIG5vdyBhbiBlbGVtZW50XG5cbiAgICAgIFdbZWxlbiArIGtdID0gLTI7IC8vIEZpbmQgc2V0IGRpZmZlcmVuY2VzLiBUaGUgc2NhbjEgZnVuY3Rpb24gbm93IGNvbXB1dGVzIHRoZSBzZXQgZGlmZmVyZW5jZXMgfExlIFxcIExrfCBmb3IgYWxsIGVsZW1lbnRzIGUuIEF0IHRoZSBzdGFydCBvZiB0aGVcbiAgICAgIC8vIHNjYW4sIG5vIGVudHJ5IGluIHRoZSB3IGFycmF5IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBtYXJrLlxuICAgICAgLy8gY2xlYXIgdyBpZiBuZWNlc3NhcnlcblxuICAgICAgbWFyayA9IF93Y2xlYXIobWFyaywgbGVtYXgsIFcsIHcsIG4pOyAvLyBzY2FuIDE6IGZpbmQgfExlXFxMa3xcblxuICAgICAgZm9yIChwayA9IHBrMTsgcGsgPCBwazI7IHBrKyspIHtcbiAgICAgICAgaSA9IGNpbmRleFtwa107IC8vIGNoZWNrIGlmIFdbZWxlbiArIGldIGVtcHR5LCBza2lwIGl0XG5cbiAgICAgICAgaWYgKChlbG4gPSBXW2VsZW4gKyBpXSkgPD0gMCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IC8vIFdbbnYgKyBpXSB3YXMgbmVnYXRlZFxuXG5cbiAgICAgICAgbnZpID0gLVdbbnYgKyBpXTtcbiAgICAgICAgdmFyIHdudmkgPSBtYXJrIC0gbnZpOyAvLyBzY2FuIEVpXG5cbiAgICAgICAgZm9yIChwID0gY3B0cltpXSwgcDEgPSBjcHRyW2ldICsgZWxuIC0gMTsgcCA8PSBwMTsgcCsrKSB7XG4gICAgICAgICAgZSA9IGNpbmRleFtwXTtcblxuICAgICAgICAgIGlmIChXW3cgKyBlXSA+PSBtYXJrKSB7XG4gICAgICAgICAgICAvLyBkZWNyZW1lbnQgfExlXFxMa3xcbiAgICAgICAgICAgIFdbdyArIGVdIC09IG52aTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFdbdyArIGVdICE9PSAwKSB7XG4gICAgICAgICAgICAvLyBlbnN1cmUgZSBpcyBhIGxpdmUgZWxlbWVudCwgMXN0IHRpbWUgZSBzZWVuIGluIHNjYW4gMVxuICAgICAgICAgICAgV1t3ICsgZV0gPSBXW2RlZ3JlZSArIGVdICsgd252aTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZGVncmVlIHVwZGF0ZVxuICAgICAgLy8gVGhlIHNlY29uZCBwYXNzIGNvbXB1dGVzIHRoZSBhcHByb3hpbWF0ZSBkZWdyZWUgZGksIHBydW5lcyB0aGUgc2V0cyBFaSBhbmQgQWksIGFuZCBjb21wdXRlcyBhIGhhc2hcbiAgICAgIC8vIGZ1bmN0aW9uIGgoaSkgZm9yIGFsbCBub2RlcyBpbiBMay5cbiAgICAgIC8vIHNjYW4yOiBkZWdyZWUgdXBkYXRlXG5cblxuICAgICAgZm9yIChwayA9IHBrMTsgcGsgPCBwazI7IHBrKyspIHtcbiAgICAgICAgLy8gY29uc2lkZXIgbm9kZSBpIGluIExrXG4gICAgICAgIGkgPSBjaW5kZXhbcGtdO1xuICAgICAgICBwMSA9IGNwdHJbaV07XG4gICAgICAgIHAyID0gcDEgKyBXW2VsZW4gKyBpXSAtIDE7XG4gICAgICAgIHBuID0gcDE7IC8vIHNjYW4gRWlcblxuICAgICAgICBmb3IgKGggPSAwLCBkID0gMCwgcCA9IHAxOyBwIDw9IHAyOyBwKyspIHtcbiAgICAgICAgICBlID0gY2luZGV4W3BdOyAvLyBjaGVjayBlIGlzIGFuIHVuYWJzb3JiZWQgZWxlbWVudFxuXG4gICAgICAgICAgaWYgKFdbdyArIGVdICE9PSAwKSB7XG4gICAgICAgICAgICAvLyBkZXh0ID0gfExlXFxMa3xcbiAgICAgICAgICAgIHZhciBkZXh0ID0gV1t3ICsgZV0gLSBtYXJrO1xuXG4gICAgICAgICAgICBpZiAoZGV4dCA+IDApIHtcbiAgICAgICAgICAgICAgLy8gc3VtIHVwIHRoZSBzZXQgZGlmZmVyZW5jZXNcbiAgICAgICAgICAgICAgZCArPSBkZXh0OyAvLyBrZWVwIGUgaW4gRWlcblxuICAgICAgICAgICAgICBjaW5kZXhbcG4rK10gPSBlOyAvLyBjb21wdXRlIHRoZSBoYXNoIG9mIG5vZGUgaVxuXG4gICAgICAgICAgICAgIGggKz0gZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGFnZ3Jlc3NpdmUgYWJzb3JiLiBlLT5rXG4gICAgICAgICAgICAgIGNwdHJbZV0gPSAoMCwgX2NzRmxpcC5jc0ZsaXApKGspOyAvLyBlIGlzIGEgZGVhZCBlbGVtZW50XG5cbiAgICAgICAgICAgICAgV1t3ICsgZV0gPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBXW2VsZW4gKyBpXSA9IHxFaXxcblxuXG4gICAgICAgIFdbZWxlbiArIGldID0gcG4gLSBwMSArIDE7XG4gICAgICAgIHZhciBwMyA9IHBuO1xuICAgICAgICB2YXIgcDQgPSBwMSArIFdbbGVuICsgaV07IC8vIHBydW5lIGVkZ2VzIGluIEFpXG5cbiAgICAgICAgZm9yIChwID0gcDIgKyAxOyBwIDwgcDQ7IHArKykge1xuICAgICAgICAgIGogPSBjaW5kZXhbcF07IC8vIGNoZWNrIG5vZGUgaiBkZWFkIG9yIGluIExrXG5cbiAgICAgICAgICB2YXIgbnZqID0gV1tudiArIGpdO1xuXG4gICAgICAgICAgaWYgKG52aiA8PSAwKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IC8vIGRlZ3JlZShpKSArPSB8anxcblxuXG4gICAgICAgICAgZCArPSBudmo7IC8vIHBsYWNlIGogaW4gbm9kZSBsaXN0IG9mIGlcblxuICAgICAgICAgIGNpbmRleFtwbisrXSA9IGo7IC8vIGNvbXB1dGUgaGFzaCBmb3Igbm9kZSBpXG5cbiAgICAgICAgICBoICs9IGo7XG4gICAgICAgIH0gLy8gY2hlY2sgZm9yIG1hc3MgZWxpbWluYXRpb25cblxuXG4gICAgICAgIGlmIChkID09PSAwKSB7XG4gICAgICAgICAgLy8gYWJzb3JiIGkgaW50byBrXG4gICAgICAgICAgY3B0cltpXSA9ICgwLCBfY3NGbGlwLmNzRmxpcCkoayk7XG4gICAgICAgICAgbnZpID0gLVdbbnYgKyBpXTsgLy8gfExrfCAtPSB8aXxcblxuICAgICAgICAgIGRrIC09IG52aTsgLy8gfGt8ICs9IFdbbnYgKyBpXVxuXG4gICAgICAgICAgbnZrICs9IG52aTtcbiAgICAgICAgICBuZWwgKz0gbnZpO1xuICAgICAgICAgIFdbbnYgKyBpXSA9IDA7IC8vIG5vZGUgaSBpcyBkZWFkXG5cbiAgICAgICAgICBXW2VsZW4gKyBpXSA9IC0xO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHVwZGF0ZSBkZWdyZWUoaSlcbiAgICAgICAgICBXW2RlZ3JlZSArIGldID0gTWF0aC5taW4oV1tkZWdyZWUgKyBpXSwgZCk7IC8vIG1vdmUgZmlyc3Qgbm9kZSB0byBlbmRcblxuICAgICAgICAgIGNpbmRleFtwbl0gPSBjaW5kZXhbcDNdOyAvLyBtb3ZlIDFzdCBlbC4gdG8gZW5kIG9mIEVpXG5cbiAgICAgICAgICBjaW5kZXhbcDNdID0gY2luZGV4W3AxXTsgLy8gYWRkIGsgYXMgMXN0IGVsZW1lbnQgaW4gb2YgRWlcblxuICAgICAgICAgIGNpbmRleFtwMV0gPSBrOyAvLyBuZXcgbGVuIG9mIGFkai4gbGlzdCBvZiBub2RlIGlcblxuICAgICAgICAgIFdbbGVuICsgaV0gPSBwbiAtIHAxICsgMTsgLy8gZmluYWxpemUgaGFzaCBvZiBpXG5cbiAgICAgICAgICBoID0gKGggPCAwID8gLWggOiBoKSAlIG47IC8vIHBsYWNlIGkgaW4gaGFzaCBidWNrZXRcblxuICAgICAgICAgIFdbbmV4dCArIGldID0gV1toaGVhZCArIGhdO1xuICAgICAgICAgIFdbaGhlYWQgKyBoXSA9IGk7IC8vIHNhdmUgaGFzaCBvZiBpIGluIGxhc3RbaV1cblxuICAgICAgICAgIGxhc3RbaV0gPSBoO1xuICAgICAgICB9XG4gICAgICB9IC8vIGZpbmFsaXplIHxMa3xcblxuXG4gICAgICBXW2RlZ3JlZSArIGtdID0gZGs7XG4gICAgICBsZW1heCA9IE1hdGgubWF4KGxlbWF4LCBkayk7IC8vIGNsZWFyIHdcblxuICAgICAgbWFyayA9IF93Y2xlYXIobWFyayArIGxlbWF4LCBsZW1heCwgVywgdywgbik7IC8vIFN1cGVybm9kZSBkZXRlY3Rpb24uIFN1cGVybm9kZSBkZXRlY3Rpb24gcmVsaWVzIG9uIHRoZSBoYXNoIGZ1bmN0aW9uIGgoaSkgY29tcHV0ZWQgZm9yIGVhY2ggbm9kZSBpLlxuICAgICAgLy8gSWYgdHdvIG5vZGVzIGhhdmUgaWRlbnRpY2FsIGFkamFjZW5jeSBsaXN0cywgdGhlaXIgaGFzaCBmdW5jdGlvbnMgd2lsIGJlIGlkZW50aWNhbC5cblxuICAgICAgZm9yIChwayA9IHBrMTsgcGsgPCBwazI7IHBrKyspIHtcbiAgICAgICAgaSA9IGNpbmRleFtwa107IC8vIGNoZWNrIGkgaXMgZGVhZCwgc2tpcCBpdFxuXG4gICAgICAgIGlmIChXW252ICsgaV0gPj0gMCkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IC8vIHNjYW4gaGFzaCBidWNrZXQgb2Ygbm9kZSBpXG5cblxuICAgICAgICBoID0gbGFzdFtpXTtcbiAgICAgICAgaSA9IFdbaGhlYWQgKyBoXTsgLy8gaGFzaCBidWNrZXQgd2lsbCBiZSBlbXB0eVxuXG4gICAgICAgIFdbaGhlYWQgKyBoXSA9IC0xO1xuXG4gICAgICAgIGZvciAoOyBpICE9PSAtMSAmJiBXW25leHQgKyBpXSAhPT0gLTE7IGkgPSBXW25leHQgKyBpXSwgbWFyaysrKSB7XG4gICAgICAgICAgbG4gPSBXW2xlbiArIGldO1xuICAgICAgICAgIGVsbiA9IFdbZWxlbiArIGldO1xuXG4gICAgICAgICAgZm9yIChwID0gY3B0cltpXSArIDE7IHAgPD0gY3B0cltpXSArIGxuIC0gMTsgcCsrKSB7XG4gICAgICAgICAgICBXW3cgKyBjaW5kZXhbcF1dID0gbWFyaztcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgamxhc3QgPSBpOyAvLyBjb21wYXJlIGkgd2l0aCBhbGwgalxuXG4gICAgICAgICAgZm9yIChqID0gV1tuZXh0ICsgaV07IGogIT09IC0xOykge1xuICAgICAgICAgICAgdmFyIG9rID0gV1tsZW4gKyBqXSA9PT0gbG4gJiYgV1tlbGVuICsgal0gPT09IGVsbjtcblxuICAgICAgICAgICAgZm9yIChwID0gY3B0cltqXSArIDE7IG9rICYmIHAgPD0gY3B0cltqXSArIGxuIC0gMTsgcCsrKSB7XG4gICAgICAgICAgICAgIC8vIGNvbXBhcmUgaSBhbmQgalxuICAgICAgICAgICAgICBpZiAoV1t3ICsgY2luZGV4W3BdXSAhPT0gbWFyaykge1xuICAgICAgICAgICAgICAgIG9rID0gMDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSAvLyBjaGVjayBpIGFuZCBqIGFyZSBpZGVudGljYWxcblxuXG4gICAgICAgICAgICBpZiAob2spIHtcbiAgICAgICAgICAgICAgLy8gYWJzb3JiIGogaW50byBpXG4gICAgICAgICAgICAgIGNwdHJbal0gPSAoMCwgX2NzRmxpcC5jc0ZsaXApKGkpO1xuICAgICAgICAgICAgICBXW252ICsgaV0gKz0gV1tudiArIGpdO1xuICAgICAgICAgICAgICBXW252ICsgal0gPSAwOyAvLyBub2RlIGogaXMgZGVhZFxuXG4gICAgICAgICAgICAgIFdbZWxlbiArIGpdID0gLTE7IC8vIGRlbGV0ZSBqIGZyb20gaGFzaCBidWNrZXRcblxuICAgICAgICAgICAgICBqID0gV1tuZXh0ICsgal07XG4gICAgICAgICAgICAgIFdbbmV4dCArIGpsYXN0XSA9IGo7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBqIGFuZCBpIGFyZSBkaWZmZXJlbnRcbiAgICAgICAgICAgICAgamxhc3QgPSBqO1xuICAgICAgICAgICAgICBqID0gV1tuZXh0ICsgal07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIEZpbmFsaXplIG5ldyBlbGVtZW50LiBUaGUgZWxpbWluYXRpb24gb2Ygbm9kZSBrIGlzIG5lYXJseSBjb21wbGV0ZS4gQWxsIG5vZGVzIGkgaW4gTGsgYXJlIHNjYW5uZWQgb25lIGxhc3QgdGltZS5cbiAgICAgIC8vIE5vZGUgaSBpcyByZW1vdmVkIGZyb20gTGsgaWYgaXQgaXMgZGVhZC4gVGhlIGZsYWdnZWQgc3RhdHVzIG9mIG52W2ldIGlzIGNsZWFyZWQuXG5cblxuICAgICAgZm9yIChwID0gcGsxLCBwayA9IHBrMTsgcGsgPCBwazI7IHBrKyspIHtcbiAgICAgICAgaSA9IGNpbmRleFtwa107IC8vIGNoZWNrICBpIGlzIGRlYWQsIHNraXAgaXRcblxuICAgICAgICBpZiAoKG52aSA9IC1XW252ICsgaV0pIDw9IDApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSAvLyByZXN0b3JlIFdbbnYgKyBpXVxuXG5cbiAgICAgICAgV1tudiArIGldID0gbnZpOyAvLyBjb21wdXRlIGV4dGVybmFsIGRlZ3JlZShpKVxuXG4gICAgICAgIGQgPSBXW2RlZ3JlZSArIGldICsgZGsgLSBudmk7XG4gICAgICAgIGQgPSBNYXRoLm1pbihkLCBuIC0gbmVsIC0gbnZpKTtcblxuICAgICAgICBpZiAoV1toZWFkICsgZF0gIT09IC0xKSB7XG4gICAgICAgICAgbGFzdFtXW2hlYWQgKyBkXV0gPSBpO1xuICAgICAgICB9IC8vIHB1dCBpIGJhY2sgaW4gZGVncmVlIGxpc3RcblxuXG4gICAgICAgIFdbbmV4dCArIGldID0gV1toZWFkICsgZF07XG4gICAgICAgIGxhc3RbaV0gPSAtMTtcbiAgICAgICAgV1toZWFkICsgZF0gPSBpOyAvLyBmaW5kIG5ldyBtaW5pbXVtIGRlZ3JlZVxuXG4gICAgICAgIG1pbmRlZyA9IE1hdGgubWluKG1pbmRlZywgZCk7XG4gICAgICAgIFdbZGVncmVlICsgaV0gPSBkOyAvLyBwbGFjZSBpIGluIExrXG5cbiAgICAgICAgY2luZGV4W3ArK10gPSBpO1xuICAgICAgfSAvLyAjIG5vZGVzIGFic29yYmVkIGludG8ga1xuXG5cbiAgICAgIFdbbnYgKyBrXSA9IG52azsgLy8gbGVuZ3RoIG9mIGFkaiBsaXN0IG9mIGVsZW1lbnQga1xuXG4gICAgICBpZiAoKFdbbGVuICsga10gPSBwIC0gcGsxKSA9PT0gMCkge1xuICAgICAgICAvLyBrIGlzIGEgcm9vdCBvZiB0aGUgdHJlZVxuICAgICAgICBjcHRyW2tdID0gLTE7IC8vIGsgaXMgbm93IGEgZGVhZCBlbGVtZW50XG5cbiAgICAgICAgV1t3ICsga10gPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxlbmsgIT09IDApIHtcbiAgICAgICAgLy8gZnJlZSB1bnVzZWQgc3BhY2UgaW4gTGtcbiAgICAgICAgY256ID0gcDtcbiAgICAgIH1cbiAgICB9IC8vIFBvc3RvcmRlcmluZy4gVGhlIGVsaW1pbmF0aW9uIGlzIGNvbXBsZXRlLCBidXQgbm8gcGVybXV0YXRpb24gaGFzIGJlZW4gY29tcHV0ZWQuIEFsbCB0aGF0IGlzIGxlZnRcbiAgICAvLyBvZiB0aGUgZ3JhcGggaXMgdGhlIGFzc2VtYmx5IHRyZWUgKHB0cikgYW5kIGEgc2V0IG9mIGRlYWQgbm9kZXMgYW5kIGVsZW1lbnRzIChpIGlzIGEgZGVhZCBub2RlIGlmXG4gICAgLy8gbnZbaV0gaXMgemVybyBhbmQgYSBkZWFkIGVsZW1lbnQgaWYgbnZbaV0gPiAwKS4gSXQgaXMgZnJvbSB0aGlzIGluZm9ybWF0aW9uIG9ubHkgdGhhdCB0aGUgZmluYWwgcGVybXV0YXRpb25cbiAgICAvLyBpcyBjb21wdXRlZC4gVGhlIHRyZWUgaXMgcmVzdG9yZWQgYnkgdW5mbGlwcGluZyBhbGwgb2YgcHRyLlxuICAgIC8vIGZpeCBhc3NlbWJseSB0cmVlXG5cblxuICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIGNwdHJbaV0gPSAoMCwgX2NzRmxpcC5jc0ZsaXApKGNwdHJbaV0pO1xuICAgIH1cblxuICAgIGZvciAoaiA9IDA7IGogPD0gbjsgaisrKSB7XG4gICAgICBXW2hlYWQgKyBqXSA9IC0xO1xuICAgIH0gLy8gcGxhY2UgdW5vcmRlcmVkIG5vZGVzIGluIGxpc3RzXG5cblxuICAgIGZvciAoaiA9IG47IGogPj0gMDsgai0tKSB7XG4gICAgICAvLyBza2lwIGlmIGogaXMgYW4gZWxlbWVudFxuICAgICAgaWYgKFdbbnYgKyBqXSA+IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIHBsYWNlIGogaW4gbGlzdCBvZiBpdHMgcGFyZW50XG5cblxuICAgICAgV1tuZXh0ICsgal0gPSBXW2hlYWQgKyBjcHRyW2pdXTtcbiAgICAgIFdbaGVhZCArIGNwdHJbal1dID0gajtcbiAgICB9IC8vIHBsYWNlIGVsZW1lbnRzIGluIGxpc3RzXG5cblxuICAgIGZvciAoZSA9IG47IGUgPj0gMDsgZS0tKSB7XG4gICAgICAvLyBza2lwIHVubGVzcyBlIGlzIGFuIGVsZW1lbnRcbiAgICAgIGlmIChXW252ICsgZV0gPD0gMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNwdHJbZV0gIT09IC0xKSB7XG4gICAgICAgIC8vIHBsYWNlIGUgaW4gbGlzdCBvZiBpdHMgcGFyZW50XG4gICAgICAgIFdbbmV4dCArIGVdID0gV1toZWFkICsgY3B0cltlXV07XG4gICAgICAgIFdbaGVhZCArIGNwdHJbZV1dID0gZTtcbiAgICAgIH1cbiAgICB9IC8vIHBvc3RvcmRlciB0aGUgYXNzZW1ibHkgdHJlZVxuXG5cbiAgICBmb3IgKGsgPSAwLCBpID0gMDsgaSA8PSBuOyBpKyspIHtcbiAgICAgIGlmIChjcHRyW2ldID09PSAtMSkge1xuICAgICAgICBrID0gKDAsIF9jc1RkZnMuY3NUZGZzKShpLCBrLCBXLCBoZWFkLCBuZXh0LCBQLCB3KTtcbiAgICAgIH1cbiAgICB9IC8vIHJlbW92ZSBsYXN0IGl0ZW0gaW4gYXJyYXlcblxuXG4gICAgUC5zcGxpY2UoUC5sZW5ndGggLSAxLCAxKTsgLy8gcmV0dXJuIFBcblxuICAgIHJldHVybiBQO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgbWF0cml4IHRoYXQgd2lsbCBiZSB1c2VkIGJ5IHRoZSBhcHByb3hpbWF0ZSBtaW5pbXVtIGRlZ3JlZSBvcmRlcmluZyBhbGdvcml0aG0uIFRoZSBmdW5jdGlvbiBhY2NlcHRzIHRoZSBtYXRyaXggTSBhcyBpbnB1dCBhbmQgcmV0dXJucyBhIHBlcm11dGF0aW9uXG4gICAqIHZlY3RvciBQLiBUaGUgYW1kIGFsZ29yaXRobSBvcGVyYXRlcyBvbiBhIHN5bW1ldHJpeCBtYXRyaXgsIHNvIG9uZSBvZiB0aHJlZSBzeW1tZXRyaWMgbWF0cmljZXMgaXMgZm9ybWVkLlxuICAgKlxuICAgKiBPcmRlcjogMFxuICAgKiAgIEEgbmF0dXJhbCBvcmRlcmluZyBQPW51bGwgbWF0cml4IGlzIHJldHVybmVkLlxuICAgKlxuICAgKiBPcmRlcjogMVxuICAgKiAgIE1hdHJpeCBtdXN0IGJlIHNxdWFyZS4gVGhpcyBpcyBhcHByb3ByaWF0ZSBmb3IgYSBDaG9sZXNreSBvciBMVSBmYWN0b3JpemF0aW9uLlxuICAgKiAgIFAgPSBNICsgTSdcbiAgICpcbiAgICogT3JkZXI6IDJcbiAgICogICBEZW5zZSBjb2x1bW5zIGZyb20gTScgYXJlIGRyb3BwZWQsIE0gcmVjcmVhdGVkIGZyb20gTScuIFRoaXMgaXMgYXBwcm9wcmlhdGVmb3IgTFUgZmFjdG9yaXphdGlvbiBvZiB1bnN5bW1ldHJpYyBtYXRyaWNlcy5cbiAgICogICBQID0gTScgKiBNXG4gICAqXG4gICAqIE9yZGVyOiAzXG4gICAqICAgVGhpcyBpcyBiZXN0IHVzZWQgZm9yIFFSIGZhY3Rvcml6YXRpb24gb3IgTFUgZmFjdG9yaXphdGlvbiBpcyBtYXRyaXggTSBoYXMgbm8gZGVuc2Ugcm93cy4gQSBkZW5zZSByb3cgaXMgYSByb3cgd2l0aCBtb3JlIHRoYW4gMTAqc3FyKGNvbHVtbnMpIGVudHJpZXMuXG4gICAqICAgUCA9IE0nICogTVxuICAgKi9cblxuICBmdW5jdGlvbiBfY3JlYXRlVGFyZ2V0TWF0cml4KG9yZGVyLCBhLCBtLCBuLCBkZW5zZSkge1xuICAgIC8vIGNvbXB1dGUgQSdcbiAgICB2YXIgYXQgPSB0cmFuc3Bvc2UoYSk7IC8vIGNoZWNrIG9yZGVyID0gMSwgbWF0cml4IG11c3QgYmUgc3F1YXJlXG5cbiAgICBpZiAob3JkZXIgPT09IDEgJiYgbiA9PT0gbSkge1xuICAgICAgLy8gQyA9IEEgKyBBJ1xuICAgICAgcmV0dXJuIGFkZChhLCBhdCk7XG4gICAgfSAvLyBjaGVjayBvcmRlciA9IDIsIGRyb3AgZGVuc2UgY29sdW1ucyBmcm9tIE0nXG5cblxuICAgIGlmIChvcmRlciA9PT0gMikge1xuICAgICAgLy8gdHJhbnNwb3NlIGFycmF5c1xuICAgICAgdmFyIHRpbmRleCA9IGF0Ll9pbmRleDtcbiAgICAgIHZhciB0cHRyID0gYXQuX3B0cjsgLy8gbmV3IGNvbHVtbiBpbmRleFxuXG4gICAgICB2YXIgcDIgPSAwOyAvLyBsb29wIEEnIGNvbHVtbnMgKHJvd3MpXG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbTsgaisrKSB7XG4gICAgICAgIC8vIGNvbHVtbiBqIG9mIEFUIHN0YXJ0cyBoZXJlXG4gICAgICAgIHZhciBwID0gdHB0cltqXTsgLy8gbmV3IGNvbHVtbiBqIHN0YXJ0cyBoZXJlXG5cbiAgICAgICAgdHB0cltqXSA9IHAyOyAvLyBza2lwIGRlbnNlIGNvbCBqXG5cbiAgICAgICAgaWYgKHRwdHJbaiArIDFdIC0gcCA+IGRlbnNlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gLy8gbWFwIHJvd3MgaW4gY29sdW1uIGogb2YgQVxuXG5cbiAgICAgICAgZm9yICh2YXIgcDEgPSB0cHRyW2ogKyAxXTsgcCA8IHAxOyBwKyspIHtcbiAgICAgICAgICB0aW5kZXhbcDIrK10gPSB0aW5kZXhbcF07XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZmluYWxpemUgQVRcblxuXG4gICAgICB0cHRyW21dID0gcDI7IC8vIHJlY3JlYXRlIEEgZnJvbSBuZXcgdHJhbnNwb3NlIG1hdHJpeFxuXG4gICAgICBhID0gdHJhbnNwb3NlKGF0KTsgLy8gdXNlIEEnICogQVxuXG4gICAgICByZXR1cm4gbXVsdGlwbHkoYXQsIGEpO1xuICAgIH0gLy8gdXNlIEEnICogQSwgc3F1YXJlIG9yIHJlY3Rhbmd1bGFyIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbXVsdGlwbHkoYXQsIGEpO1xuICB9XG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHF1b3RpZW50IGdyYXBoLiBUaGVyZSBhcmUgZm91ciBraW5kIG9mIG5vZGVzIGFuZCBlbGVtZW50cyB0aGF0IG11c3QgYmUgcmVwcmVzZW50ZWQ6XG4gICAqXG4gICAqICAtIEEgbGl2ZSBub2RlIGlzIGEgbm9kZSBpIChvciBhIHN1cGVybm9kZSkgdGhhdCBoYXMgbm90IGJlZW4gc2VsZWN0ZWQgYXMgYSBwaXZvdCBuYWQgaGFzIG5vdCBiZWVuIG1lcmdlZCBpbnRvIGFub3RoZXIgc3VwZXJub2RlLlxuICAgKiAgLSBBIGRlYWQgbm9kZSBpIGlzIG9uZSB0aGF0IGhhcyBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgZ3JhcGgsIGhhdmluZyBiZWVuIGFic29ydmVkIGludG8gciA9IGZsaXAocHRyW2ldKS5cbiAgICogIC0gQSBsaXZlIGVsZW1lbnQgZSBpcyBvbmUgdGhhdCBpcyBpbiB0aGUgZ3JhcGgsIGhhdmluZyBiZWVuIGZvcm1lZCB3aGVuIG5vZGUgZSB3YXMgc2VsZWN0ZWQgYXMgdGhlIHBpdm90LlxuICAgKiAgLSBBIGRlYWQgZWxlbWVudCBlIGlzIG9uZSB0aGF0IGhhcyBiZW5uIGFic29ydmVkIGludG8gYSBzdWJzZXF1ZW50IGVsZW1lbnQgcyA9IGZsaXAocHRyW2VdKS5cbiAgICovXG5cblxuICBmdW5jdGlvbiBfaW5pdGlhbGl6ZVF1b3RpZW50R3JhcGgobiwgY3B0ciwgVywgbGVuLCBoZWFkLCBsYXN0LCBuZXh0LCBoaGVhZCwgbnYsIHcsIGVsZW4sIGRlZ3JlZSkge1xuICAgIC8vIEluaXRpYWxpemUgcXVvdGllbnQgZ3JhcGhcbiAgICBmb3IgKHZhciBrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgV1tsZW4gKyBrXSA9IGNwdHJbayArIDFdIC0gY3B0cltrXTtcbiAgICB9XG5cbiAgICBXW2xlbiArIG5dID0gMDsgLy8gaW5pdGlhbGl6ZSB3b3Jrc3BhY2VcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKykge1xuICAgICAgLy8gZGVncmVlIGxpc3QgaSBpcyBlbXB0eVxuICAgICAgV1toZWFkICsgaV0gPSAtMTtcbiAgICAgIGxhc3RbaV0gPSAtMTtcbiAgICAgIFdbbmV4dCArIGldID0gLTE7IC8vIGhhc2ggbGlzdCBpIGlzIGVtcHR5XG5cbiAgICAgIFdbaGhlYWQgKyBpXSA9IC0xOyAvLyBub2RlIGkgaXMganVzdCBvbmUgbm9kZVxuXG4gICAgICBXW252ICsgaV0gPSAxOyAvLyBub2RlIGkgaXMgYWxpdmVcblxuICAgICAgV1t3ICsgaV0gPSAxOyAvLyBFayBvZiBub2RlIGkgaXMgZW1wdHlcblxuICAgICAgV1tlbGVuICsgaV0gPSAwOyAvLyBkZWdyZWUgb2Ygbm9kZSBpXG5cbiAgICAgIFdbZGVncmVlICsgaV0gPSBXW2xlbiArIGldO1xuICAgIH0gLy8gY2xlYXIgd1xuXG5cbiAgICB2YXIgbWFyayA9IF93Y2xlYXIoMCwgMCwgVywgdywgbik7IC8vIG4gaXMgYSBkZWFkIGVsZW1lbnRcblxuXG4gICAgV1tlbGVuICsgbl0gPSAtMjsgLy8gbiBpcyBhIHJvb3Qgb2YgYXNzZW1ibHkgdHJlZVxuXG4gICAgY3B0cltuXSA9IC0xOyAvLyBuIGlzIGEgZGVhZCBlbGVtZW50XG5cbiAgICBXW3cgKyBuXSA9IDA7IC8vIHJldHVybiBtYXJrXG5cbiAgICByZXR1cm4gbWFyaztcbiAgfVxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBkZWdyZWUgbGlzdHMuIEVhY2ggbm9kZSBpcyBwbGFjZWQgaW4gaXRzIGRlZ3JlZSBsaXN0cy4gTm9kZXMgb2YgemVybyBkZWdyZWUgYXJlIGVsaW1pbmF0ZWQgaW1tZWRpYXRlbHkuIE5vZGVzIHdpdGhcbiAgICogZGVncmVlID49IGRlbnNlIGFyZSBhbHNvbCBlbGltaW5hdGVkIGFuZCBtZXJnZWQgaW50byBhIHBsYWNlaG9sZGVyIG5vZGUgbiwgYSBkZWFkIGVsZW1lbnQuIFRoZXMgbm9kZXMgd2lsbCBhcHBlcmEgbGFzdCBpbiB0aGVcbiAgICogb3V0cHV0IHBlcm11dGF0aW9uIHAuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2luaXRpYWxpemVEZWdyZWVMaXN0cyhuLCBjcHRyLCBXLCBkZWdyZWUsIGVsZW4sIHcsIGRlbnNlLCBudiwgaGVhZCwgbGFzdCwgbmV4dCkge1xuICAgIC8vIHJlc3VsdFxuICAgIHZhciBuZWwgPSAwOyAvLyBsb29wIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAvLyBkZWdyZWUgQCBpXG4gICAgICB2YXIgZCA9IFdbZGVncmVlICsgaV07IC8vIGNoZWNrIG5vZGUgaSBpcyBlbXB0eVxuXG4gICAgICBpZiAoZCA9PT0gMCkge1xuICAgICAgICAvLyBlbGVtZW50IGkgaXMgZGVhZFxuICAgICAgICBXW2VsZW4gKyBpXSA9IC0yO1xuICAgICAgICBuZWwrKzsgLy8gaSBpcyBhIHJvb3Qgb2YgYXNzZW1ibHkgdHJlZVxuXG4gICAgICAgIGNwdHJbaV0gPSAtMTtcbiAgICAgICAgV1t3ICsgaV0gPSAwO1xuICAgICAgfSBlbHNlIGlmIChkID4gZGVuc2UpIHtcbiAgICAgICAgLy8gYWJzb3JiIGkgaW50byBlbGVtZW50IG5cbiAgICAgICAgV1tudiArIGldID0gMDsgLy8gbm9kZSBpIGlzIGRlYWRcblxuICAgICAgICBXW2VsZW4gKyBpXSA9IC0xO1xuICAgICAgICBuZWwrKztcbiAgICAgICAgY3B0cltpXSA9ICgwLCBfY3NGbGlwLmNzRmxpcCkobik7XG4gICAgICAgIFdbbnYgKyBuXSsrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGggPSBXW2hlYWQgKyBkXTtcblxuICAgICAgICBpZiAoaCAhPT0gLTEpIHtcbiAgICAgICAgICBsYXN0W2hdID0gaTtcbiAgICAgICAgfSAvLyBwdXQgbm9kZSBpIGluIGRlZ3JlZSBsaXN0IGRcblxuXG4gICAgICAgIFdbbmV4dCArIGldID0gV1toZWFkICsgZF07XG4gICAgICAgIFdbaGVhZCArIGRdID0gaTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmVsO1xuICB9XG5cbiAgZnVuY3Rpb24gX3djbGVhcihtYXJrLCBsZW1heCwgVywgdywgbikge1xuICAgIGlmIChtYXJrIDwgMiB8fCBtYXJrICsgbGVtYXggPCAwKSB7XG4gICAgICBmb3IgKHZhciBrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgICBpZiAoV1t3ICsga10gIT09IDApIHtcbiAgICAgICAgICBXW3cgKyBrXSA9IDE7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbWFyayA9IDI7XG4gICAgfSAvLyBhdCB0aGlzIHBvaW50LCBXIFswLi5uLTFdIDwgbWFyayBob2xkc1xuXG5cbiAgICByZXR1cm4gbWFyaztcbiAgfVxuXG4gIGZ1bmN0aW9uIF9kaWFnKGksIGopIHtcbiAgICByZXR1cm4gaSAhPT0gajtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUNzQW1kID0gY3JlYXRlQ3NBbWQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNzQ291bnRzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jc0xlYWYgPSByZXF1aXJlKFwiLi9jc0xlYWZcIik7XG5cbnZhciBuYW1lID0gJ2NzQ291bnRzJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3RyYW5zcG9zZSddO1xudmFyIGNyZWF0ZUNzQ291bnRzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHRyYW5zcG9zZSA9IF9yZWYudHJhbnNwb3NlO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlcyB0aGUgY29sdW1uIGNvdW50cyB1c2luZyB0aGUgdXBwZXIgdHJpYW5ndWxhciBwYXJ0IG9mIEEuXG4gICAqIEl0IHRyYW5zcG9zZXMgQSBpbnRlcm5hbGx5LCBub25lIG9mIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIGFyZSBtb2RpZmllZC5cbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgIFRoZSBzcGFyc2UgbWF0cml4IEFcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGF0YSAgICAgICAgIENvdW50IHRoZSBjb2x1bW5zIG9mIEEnQSBpbnN0ZWFkXG4gICAqXG4gICAqIEByZXR1cm4gICAgICAgICAgICAgICAgICAgICBBbiBhcnJheSBvZiBzaXplIG4gb2YgdGhlIGNvbHVtbiBjb3VudHMgb3IgbnVsbCBvbiBlcnJvclxuICAgKlxuICAgKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIChhLCBwYXJlbnQsIHBvc3QsIGF0YSkge1xuICAgIC8vIGNoZWNrIGlucHV0c1xuICAgIGlmICghYSB8fCAhcGFyZW50IHx8ICFwb3N0KSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IC8vIGEgbWF0cml4IGFycmF5c1xuXG5cbiAgICB2YXIgYXNpemUgPSBhLl9zaXplOyAvLyByb3dzIGFuZCBjb2x1bW5zXG5cbiAgICB2YXIgbSA9IGFzaXplWzBdO1xuICAgIHZhciBuID0gYXNpemVbMV07IC8vIHZhcmlhYmxlc1xuXG4gICAgdmFyIGksIGosIGssIEosIHAsIHAwLCBwMTsgLy8gd29ya3NwYWNlIHNpemVcblxuICAgIHZhciBzID0gNCAqIG4gKyAoYXRhID8gbiArIG0gKyAxIDogMCk7IC8vIGFsbG9jYXRlIHdvcmtzcGFjZVxuXG4gICAgdmFyIHcgPSBbXTsgLy8gKHMpXG5cbiAgICB2YXIgYW5jZXN0b3IgPSAwOyAvLyBmaXJzdCBuIGVudHJpZXNcblxuICAgIHZhciBtYXhmaXJzdCA9IG47IC8vIG5leHQgbiBlbnRyaWVzXG5cbiAgICB2YXIgcHJldmxlYWYgPSAyICogbjsgLy8gbmV4dCBuIGVudHJpZXNcblxuICAgIHZhciBmaXJzdCA9IDMgKiBuOyAvLyBuZXh0IG4gZW50cmllc1xuXG4gICAgdmFyIGhlYWQgPSA0ICogbjsgLy8gbmV4dCBuICsgMSBlbnRyaWVzICh1c2VkIHdoZW4gYXRhIGlzIHRydWUpXG5cbiAgICB2YXIgbmV4dCA9IDUgKiBuICsgMTsgLy8gbGFzdCBlbnRyaWVzIGluIHdvcmtzcGFjZVxuICAgIC8vIGNsZWFyIHdvcmtzcGFjZSB3WzAuLnMtMV1cblxuICAgIGZvciAoayA9IDA7IGsgPCBzOyBrKyspIHtcbiAgICAgIHdba10gPSAtMTtcbiAgICB9IC8vIGFsbG9jYXRlIHJlc3VsdFxuXG5cbiAgICB2YXIgY29sY291bnQgPSBbXTsgLy8gKG4pXG4gICAgLy8gQVQgPSBBJ1xuXG4gICAgdmFyIGF0ID0gdHJhbnNwb3NlKGEpOyAvLyBhdCBhcnJheXNcblxuICAgIHZhciB0aW5kZXggPSBhdC5faW5kZXg7XG4gICAgdmFyIHRwdHIgPSBhdC5fcHRyOyAvLyBmaW5kIHdbZmlyc3QgKyBqXVxuXG4gICAgZm9yIChrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgaiA9IHBvc3Rba107IC8vIGNvbGNvdW50W2pdPTEgaWYgaiBpcyBhIGxlYWZcblxuICAgICAgY29sY291bnRbal0gPSB3W2ZpcnN0ICsgal0gPT09IC0xID8gMSA6IDA7XG5cbiAgICAgIGZvciAoOyBqICE9PSAtMSAmJiB3W2ZpcnN0ICsgal0gPT09IC0xOyBqID0gcGFyZW50W2pdKSB7XG4gICAgICAgIHdbZmlyc3QgKyBqXSA9IGs7XG4gICAgICB9XG4gICAgfSAvLyBpbml0aWFsaXplIGF0YSBpZiBuZWVkZWRcblxuXG4gICAgaWYgKGF0YSkge1xuICAgICAgLy8gaW52ZXJ0IHBvc3RcbiAgICAgIGZvciAoayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgICAgd1twb3N0W2tdXSA9IGs7XG4gICAgICB9IC8vIGxvb3Agcm93cyAoY29sdW1ucyBpbiBBVClcblxuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbTsgaSsrKSB7XG4gICAgICAgIC8vIHZhbHVlcyBpbiBjb2x1bW4gaSBvZiBBVFxuICAgICAgICBmb3IgKGsgPSBuLCBwMCA9IHRwdHJbaV0sIHAxID0gdHB0cltpICsgMV0sIHAgPSBwMDsgcCA8IHAxOyBwKyspIHtcbiAgICAgICAgICBrID0gTWF0aC5taW4oaywgd1t0aW5kZXhbcF1dKTtcbiAgICAgICAgfSAvLyBwbGFjZSByb3cgaSBpbiBsaW5rZWQgbGlzdCBrXG5cblxuICAgICAgICB3W25leHQgKyBpXSA9IHdbaGVhZCArIGtdO1xuICAgICAgICB3W2hlYWQgKyBrXSA9IGk7XG4gICAgICB9XG4gICAgfSAvLyBlYWNoIG5vZGUgaW4gaXRzIG93biBzZXRcblxuXG4gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgd1thbmNlc3RvciArIGldID0gaTtcbiAgICB9XG5cbiAgICBmb3IgKGsgPSAwOyBrIDwgbjsgaysrKSB7XG4gICAgICAvLyBqIGlzIHRoZSBrdGggbm9kZSBpbiBwb3N0b3JkZXJlZCBldHJlZVxuICAgICAgaiA9IHBvc3Rba107IC8vIGNoZWNrIGogaXMgbm90IGEgcm9vdFxuXG4gICAgICBpZiAocGFyZW50W2pdICE9PSAtMSkge1xuICAgICAgICBjb2xjb3VudFtwYXJlbnRbal1dLS07XG4gICAgICB9IC8vIEo9aiBmb3IgTEwnPUEgY2FzZVxuXG5cbiAgICAgIGZvciAoSiA9IGF0YSA/IHdbaGVhZCArIGtdIDogajsgSiAhPT0gLTE7IEogPSBhdGEgPyB3W25leHQgKyBKXSA6IC0xKSB7XG4gICAgICAgIGZvciAocCA9IHRwdHJbSl07IHAgPCB0cHRyW0ogKyAxXTsgcCsrKSB7XG4gICAgICAgICAgaSA9IHRpbmRleFtwXTtcbiAgICAgICAgICB2YXIgciA9ICgwLCBfY3NMZWFmLmNzTGVhZikoaSwgaiwgdywgZmlyc3QsIG1heGZpcnN0LCBwcmV2bGVhZiwgYW5jZXN0b3IpOyAvLyBjaGVjayBBKGksaikgaXMgaW4gc2tlbGV0b25cblxuICAgICAgICAgIGlmIChyLmpsZWFmID49IDEpIHtcbiAgICAgICAgICAgIGNvbGNvdW50W2pdKys7XG4gICAgICAgICAgfSAvLyBjaGVjayBhY2NvdW50IGZvciBvdmVybGFwIGluIHFcblxuXG4gICAgICAgICAgaWYgKHIuamxlYWYgPT09IDIpIHtcbiAgICAgICAgICAgIGNvbGNvdW50W3IucV0tLTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmVudFtqXSAhPT0gLTEpIHtcbiAgICAgICAgd1thbmNlc3RvciArIGpdID0gcGFyZW50W2pdO1xuICAgICAgfVxuICAgIH0gLy8gc3VtIHVwIGNvbGNvdW50J3Mgb2YgZWFjaCBjaGlsZFxuXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICBpZiAocGFyZW50W2pdICE9PSAtMSkge1xuICAgICAgICBjb2xjb3VudFtwYXJlbnRbal1dICs9IGNvbGNvdW50W2pdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjb2xjb3VudDtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDc0NvdW50cyA9IGNyZWF0ZUNzQ291bnRzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc0RmcyA9IGNzRGZzO1xuXG52YXIgX2NzTWFya2VkID0gcmVxdWlyZShcIi4vY3NNYXJrZWRcIik7XG5cbnZhciBfY3NNYXJrID0gcmVxdWlyZShcIi4vY3NNYXJrXCIpO1xuXG52YXIgX2NzVW5mbGlwID0gcmVxdWlyZShcIi4vY3NVbmZsaXBcIik7XG5cbi8qKlxuICogRGVwdGgtZmlyc3Qgc2VhcmNoIGNvbXB1dGVzIHRoZSBub256ZXJvIHBhdHRlcm4geGkgb2YgdGhlIGRpcmVjdGVkIGdyYXBoIEcgKE1hdHJpeCkgc3RhcnRpbmdcbiAqIGF0IG5vZGVzIGluIEIgKHNlZSBjc1JlYWNoKCkpLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSAgaiAgICAgICAgICAgICAgIFRoZSBzdGFydGluZyBub2RlIGZvciB0aGUgREZTIGFsZ29yaXRobVxuICogQHBhcmFtIHtNYXRyaXh9ICBnICAgICAgICAgICAgICAgVGhlIEcgbWF0cml4IHRvIHNlYXJjaCwgcHRyIGFycmF5IG1vZGlmaWVkLCB0aGVuIHJlc3RvcmVkXG4gKiBAcGFyYW0ge051bWJlcn0gIHRvcCAgICAgICAgICAgICBTdGFydCBpbmRleCBpbiBzdGFjayB4aVt0b3AuLm4tMV1cbiAqIEBwYXJhbSB7TnVtYmVyfSAgayAgICAgICAgICAgICAgIFRoZSBrdGggY29sdW1uIGluIEJcbiAqIEBwYXJhbSB7QXJyYXl9ICAgeGkgICAgICAgICAgICAgIFRoZSBub256ZXJvIHBhdHRlcm4geGlbdG9wXSAuLiB4aVtuIC0gMV0sIGFuIGFycmF5IG9mIHNpemUgPSAyICogblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IG4gZW50cmllcyBpcyB0aGUgbm9uemVybyBwYXR0ZXJuLCB0aGUgbGFzdCBuIGVudHJpZXMgaXMgdGhlIHN0YWNrXG4gKiBAcGFyYW0ge0FycmF5fSAgIHBpbnYgICAgICAgICAgICBUaGUgaW52ZXJzZSByb3cgcGVybXV0YXRpb24gdmVjdG9yLCBtdXN0IGJlIG51bGwgZm9yIEwgKiB4ID0gYlxuICpcbiAqIEByZXR1cm4ge051bWJlcn0gICAgICAgICAgICAgICAgIE5ldyB2YWx1ZSBvZiB0b3BcbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICovXG5mdW5jdGlvbiBjc0RmcyhqLCBnLCB0b3AsIHhpLCBwaW52KSB7XG4gIC8vIGcgYXJyYXlzXG4gIHZhciBpbmRleCA9IGcuX2luZGV4O1xuICB2YXIgcHRyID0gZy5fcHRyO1xuICB2YXIgc2l6ZSA9IGcuX3NpemU7IC8vIGNvbHVtbnNcblxuICB2YXIgbiA9IHNpemVbMV07IC8vIHZhcnNcblxuICB2YXIgaSwgcCwgcDI7IC8vIGluaXRpYWxpemUgaGVhZFxuXG4gIHZhciBoZWFkID0gMDsgLy8gaW5pdGlhbGl6ZSB0aGUgcmVjdXJzaW9uIHN0YWNrXG5cbiAgeGlbMF0gPSBqOyAvLyBsb29wXG5cbiAgd2hpbGUgKGhlYWQgPj0gMCkge1xuICAgIC8vIGdldCBqIGZyb20gdGhlIHRvcCBvZiB0aGUgcmVjdXJzaW9uIHN0YWNrXG4gICAgaiA9IHhpW2hlYWRdOyAvLyBhcHBseSBwZXJtdXRhdGlvbiB2ZWN0b3JcblxuICAgIHZhciBqbmV3ID0gcGludiA/IHBpbnZbal0gOiBqOyAvLyBjaGVjayBub2RlIGogaXMgbWFya2VkXG5cbiAgICBpZiAoISgwLCBfY3NNYXJrZWQuY3NNYXJrZWQpKHB0ciwgaikpIHtcbiAgICAgIC8vIG1hcmsgbm9kZSBqIGFzIHZpc2l0ZWRcbiAgICAgICgwLCBfY3NNYXJrLmNzTWFyaykocHRyLCBqKTsgLy8gdXBkYXRlIHN0YWNrIChsYXN0IG4gZW50cmllcyBpbiB4aSlcblxuICAgICAgeGlbbiArIGhlYWRdID0gam5ldyA8IDAgPyAwIDogKDAsIF9jc1VuZmxpcC5jc1VuZmxpcCkocHRyW2puZXddKTtcbiAgICB9IC8vIG5vZGUgaiBkb25lIGlmIG5vIHVudmlzaXRlZCBuZWlnaGJvcnNcblxuXG4gICAgdmFyIGRvbmUgPSAxOyAvLyBleGFtaW5lIGFsbCBuZWlnaGJvcnMgb2Ygaiwgc3RhY2sgKGxhc3QgbiBlbnRyaWVzIGluIHhpKVxuXG4gICAgZm9yIChwID0geGlbbiArIGhlYWRdLCBwMiA9IGpuZXcgPCAwID8gMCA6ICgwLCBfY3NVbmZsaXAuY3NVbmZsaXApKHB0cltqbmV3ICsgMV0pOyBwIDwgcDI7IHArKykge1xuICAgICAgLy8gY29uc2lkZXIgbmVpZ2hib3Igbm9kZSBpXG4gICAgICBpID0gaW5kZXhbcF07IC8vIGNoZWNrIHdlIGhhdmUgdmlzaXRlZCBub2RlIGksIHNraXAgaXRcblxuICAgICAgaWYgKCgwLCBfY3NNYXJrZWQuY3NNYXJrZWQpKHB0ciwgaSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIHBhdXNlIGRlcHRoLWZpcnN0IHNlYXJjaCBvZiBub2RlIGosIHVwZGF0ZSBzdGFjayAobGFzdCBuIGVudHJpZXMgaW4geGkpXG5cblxuICAgICAgeGlbbiArIGhlYWRdID0gcDsgLy8gc3RhcnQgZGZzIGF0IG5vZGUgaVxuXG4gICAgICB4aVsrK2hlYWRdID0gaTsgLy8gbm9kZSBqIGlzIG5vdCBkb25lXG5cbiAgICAgIGRvbmUgPSAwOyAvLyBicmVhaywgdG8gc3RhcnQgZGZzKGkpXG5cbiAgICAgIGJyZWFrO1xuICAgIH0gLy8gY2hlY2sgZGVwdGgtZmlyc3Qgc2VhcmNoIGF0IG5vZGUgaiBpcyBkb25lXG5cblxuICAgIGlmIChkb25lKSB7XG4gICAgICAvLyByZW1vdmUgaiBmcm9tIHRoZSByZWN1cnNpb24gc3RhY2tcbiAgICAgIGhlYWQtLTsgLy8gYW5kIHBsYWNlIGluIHRoZSBvdXRwdXQgc3RhY2tcblxuICAgICAgeGlbLS10b3BdID0gajtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdG9wO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc0V0cmVlID0gY3NFdHJlZTtcblxuLyoqXG4gKiBDb21wdXRlcyB0aGUgZWxpbWluYXRpb24gdHJlZSBvZiBNYXRyaXggQSAodXNpbmcgdHJpdShBKSkgb3IgdGhlXG4gKiBlbGltaW5hdGlvbiB0cmVlIG9mIEEnQSB3aXRob3V0IGZvcm1pbmcgQSdBLlxuICpcbiAqIEBwYXJhbSB7TWF0cml4fSAgYSAgICAgICAgICAgICAgIFRoZSBBIE1hdHJpeFxuICogQHBhcmFtIHtib29sZWFufSBhdGEgICAgICAgICAgICAgQSB2YWx1ZSBvZiB0cnVlIHRoZSBmdW5jdGlvbiBjb21wdXRlcyB0aGUgZXRyZWUgb2YgQSdBXG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NFdHJlZShhLCBhdGEpIHtcbiAgLy8gY2hlY2sgaW5wdXRzXG4gIGlmICghYSkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIGEgYXJyYXlzXG5cblxuICB2YXIgYWluZGV4ID0gYS5faW5kZXg7XG4gIHZhciBhcHRyID0gYS5fcHRyO1xuICB2YXIgYXNpemUgPSBhLl9zaXplOyAvLyByb3dzICYgY29sdW1uc1xuXG4gIHZhciBtID0gYXNpemVbMF07XG4gIHZhciBuID0gYXNpemVbMV07IC8vIGFsbG9jYXRlIHJlc3VsdFxuXG4gIHZhciBwYXJlbnQgPSBbXTsgLy8gKG4pXG4gIC8vIGFsbG9jYXRlIHdvcmtzcGFjZVxuXG4gIHZhciB3ID0gW107IC8vIChuICsgKGF0YSA/IG0gOiAwKSlcblxuICB2YXIgYW5jZXN0b3IgPSAwOyAvLyBmaXJzdCBuIGVudHJpZXMgaW4gd1xuXG4gIHZhciBwcmV2ID0gbjsgLy8gbGFzdCBtIGVudHJpZXMgKGF0YSA9IHRydWUpXG5cbiAgdmFyIGksIGluZXh0OyAvLyBjaGVjayB3ZSBhcmUgY2FsY3VsYXRpbmcgQSdBXG5cbiAgaWYgKGF0YSkge1xuICAgIC8vIGluaXRpYWxpemUgd29ya3NwYWNlXG4gICAgZm9yIChpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgd1twcmV2ICsgaV0gPSAtMTtcbiAgICB9XG4gIH0gLy8gbG9vcCBjb2x1bW5zXG5cblxuICBmb3IgKHZhciBrID0gMDsgayA8IG47IGsrKykge1xuICAgIC8vIG5vZGUgayBoYXMgbm8gcGFyZW50IHlldFxuICAgIHBhcmVudFtrXSA9IC0xOyAvLyBub3IgZG9lcyBrIGhhdmUgYW4gYW5jZXN0b3JcblxuICAgIHdbYW5jZXN0b3IgKyBrXSA9IC0xOyAvLyB2YWx1ZXMgaW4gY29sdW1uIGtcblxuICAgIGZvciAodmFyIHAwID0gYXB0cltrXSwgcDEgPSBhcHRyW2sgKyAxXSwgcCA9IHAwOyBwIDwgcDE7IHArKykge1xuICAgICAgLy8gcm93XG4gICAgICB2YXIgciA9IGFpbmRleFtwXTsgLy8gbm9kZVxuXG4gICAgICBpID0gYXRhID8gd1twcmV2ICsgcl0gOiByOyAvLyB0cmF2ZXJzZSBmcm9tIGkgdG8ga1xuXG4gICAgICBmb3IgKDsgaSAhPT0gLTEgJiYgaSA8IGs7IGkgPSBpbmV4dCkge1xuICAgICAgICAvLyBpbmV4dCA9IGFuY2VzdG9yIG9mIGlcbiAgICAgICAgaW5leHQgPSB3W2FuY2VzdG9yICsgaV07IC8vIHBhdGggY29tcHJlc3Npb25cblxuICAgICAgICB3W2FuY2VzdG9yICsgaV0gPSBrOyAvLyBjaGVjayBubyBhbmMuLCBwYXJlbnQgaXMga1xuXG4gICAgICAgIGlmIChpbmV4dCA9PT0gLTEpIHtcbiAgICAgICAgICBwYXJlbnRbaV0gPSBrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChhdGEpIHtcbiAgICAgICAgd1twcmV2ICsgcl0gPSBrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJlbnQ7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNzRmtlZXAgPSBjc0ZrZWVwO1xuXG4vKipcbiAqIEtlZXBzIGVudHJpZXMgaW4gdGhlIG1hdHJpeCB3aGVuIHRoZSBjYWxsYmFjayBmdW5jdGlvbiByZXR1cm5zIHRydWUsIHJlbW92ZXMgdGhlIGVudHJ5IG90aGVyd2lzZVxuICpcbiAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgIFRoZSBzcGFyc2UgbWF0cml4XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24sIGZ1bmN0aW9uIHdpbGwgYmUgaW52b2tlZCB3aXRoIHRoZSBmb2xsb3dpbmcgYXJnczpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGUgZW50cnkgcm93XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhlIGVudHJ5IGNvbHVtblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoZSBlbnRyeSB2YWx1ZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoZSBzdGF0ZSBwYXJhbWV0ZXJcbiAqIEBwYXJhbSB7YW55fSAgICAgIG90aGVyICAgICAgICAgIFRoZSBzdGF0ZVxuICpcbiAqIEByZXR1cm4gICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBudW1iZXIgb2Ygbm9uemVybyBlbGVtZW50cyBpbiB0aGUgbWF0cml4XG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NGa2VlcChhLCBjYWxsYmFjaywgb3RoZXIpIHtcbiAgLy8gYSBhcnJheXNcbiAgdmFyIGF2YWx1ZXMgPSBhLl92YWx1ZXM7XG4gIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgdmFyIGFwdHIgPSBhLl9wdHI7XG4gIHZhciBhc2l6ZSA9IGEuX3NpemU7IC8vIGNvbHVtbnNcblxuICB2YXIgbiA9IGFzaXplWzFdOyAvLyBub256ZXJvIGl0ZW1zXG5cbiAgdmFyIG56ID0gMDsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgZm9yICh2YXIgaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAvLyBnZXQgY3VycmVudCBsb2NhdGlvbiBvZiBjb2wgalxuICAgIHZhciBwID0gYXB0cltqXTsgLy8gcmVjb3JkIG5ldyBsb2NhdGlvbiBvZiBjb2wgalxuXG4gICAgYXB0cltqXSA9IG56O1xuXG4gICAgZm9yICg7IHAgPCBhcHRyW2ogKyAxXTsgcCsrKSB7XG4gICAgICAvLyBjaGVjayB3ZSBuZWVkIHRvIGtlZXAgdGhpcyBpdGVtXG4gICAgICBpZiAoY2FsbGJhY2soYWluZGV4W3BdLCBqLCBhdmFsdWVzID8gYXZhbHVlc1twXSA6IDEsIG90aGVyKSkge1xuICAgICAgICAvLyBrZWVwIEEoaSxqKVxuICAgICAgICBhaW5kZXhbbnpdID0gYWluZGV4W3BdOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzIChwYXR0ZXJuIG9ubHkpXG5cbiAgICAgICAgaWYgKGF2YWx1ZXMpIHtcbiAgICAgICAgICBhdmFsdWVzW256XSA9IGF2YWx1ZXNbcF07XG4gICAgICAgIH0gLy8gaW5jcmVtZW50IG5vbnplcm8gaXRlbXNcblxuXG4gICAgICAgIG56Kys7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIGZpbmFsaXplIEFcblxuXG4gIGFwdHJbbl0gPSBuejsgLy8gdHJpbSBhcnJheXNcblxuICBhaW5kZXguc3BsaWNlKG56LCBhaW5kZXgubGVuZ3RoIC0gbnopOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzIChwYXR0ZXJuIG9ubHkpXG5cbiAgaWYgKGF2YWx1ZXMpIHtcbiAgICBhdmFsdWVzLnNwbGljZShueiwgYXZhbHVlcy5sZW5ndGggLSBueik7XG4gIH0gLy8gcmV0dXJuIG51bWJlciBvZiBub256ZXJvIGl0ZW1zXG5cblxuICByZXR1cm4gbno7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNzRmxpcCA9IGNzRmxpcDtcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIFwiZmxpcHNcIiBpdHMgaW5wdXQgYWJvdXQgdGhlIGludGVnZXIgLTEuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9ICBpICAgICAgICAgICAgICAgVGhlIHZhbHVlIHRvIGZsaXBcbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICovXG5mdW5jdGlvbiBjc0ZsaXAoaSkge1xuICAvLyBmbGlwIHRoZSB2YWx1ZVxuICByZXR1cm4gLWkgLSAyO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc0lwdmVjID0gY3NJcHZlYztcblxuLyoqXG4gKiBQZXJtdXRlcyBhIHZlY3RvcjsgeCA9IFAnYi4gSW4gTUFUTEFCIG5vdGF0aW9uLCB4KHApPWIuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gcCAgICAgICAgICAgVGhlIHBlcm11dGF0aW9uIHZlY3RvciBvZiBsZW5ndGggbi4gbnVsbCB2YWx1ZSBkZW5vdGVzIGlkZW50aXR5XG4gKiBAcGFyYW0ge0FycmF5fSBiICAgICAgICAgICBUaGUgaW5wdXQgdmVjdG9yXG4gKlxuICogQHJldHVybiB7QXJyYXl9ICAgICAgICAgICAgVGhlIG91dHB1dCB2ZWN0b3IgeCA9IFAnYlxuICovXG5mdW5jdGlvbiBjc0lwdmVjKHAsIGIpIHtcbiAgLy8gdmFyc1xuICB2YXIgaztcbiAgdmFyIG4gPSBiLmxlbmd0aDtcbiAgdmFyIHggPSBbXTsgLy8gY2hlY2sgcGVybXV0YXRpb24gdmVjdG9yIHdhcyBwcm92aWRlZCwgcCA9IG51bGwgZGVub3RlcyBpZGVudGl0eVxuXG4gIGlmIChwKSB7XG4gICAgLy8gbG9vcCB2ZWN0b3JcbiAgICBmb3IgKGsgPSAwOyBrIDwgbjsgaysrKSB7XG4gICAgICAvLyBhcHBseSBwZXJtdXRhdGlvblxuICAgICAgeFtwW2tdXSA9IGJba107XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGxvb3AgdmVjdG9yXG4gICAgZm9yIChrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgLy8geFtpXSA9IGJbaV1cbiAgICAgIHhba10gPSBiW2tdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB4O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc0xlYWYgPSBjc0xlYWY7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBkZXRlcm1pbmVzIGlmIGogaXMgYSBsZWFmIG9mIHRoZSBpdGggcm93IHN1YnRyZWUuXG4gKiBDb25zaWRlciBBKGksaiksIG5vZGUgaiBpbiBpdGggcm93IHN1YnRyZWUgYW5kIHJldHVybiBsY2EoanByZXYsailcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gIGkgICAgICAgICAgICAgICBUaGUgaXRoIHJvdyBzdWJ0cmVlXG4gKiBAcGFyYW0ge051bWJlcn0gIGogICAgICAgICAgICAgICBUaGUgbm9kZSB0byB0ZXN0XG4gKiBAcGFyYW0ge0FycmF5fSAgIHcgICAgICAgICAgICAgICBUaGUgd29ya3NwYWNlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gIGZpcnN0ICAgICAgICAgICBUaGUgaW5kZXggb2Zmc2V0IHdpdGhpbiB0aGUgd29ya3NwYWNlIGZvciB0aGUgZmlyc3QgYXJyYXlcbiAqIEBwYXJhbSB7TnVtYmVyfSAgbWF4Zmlyc3QgICAgICAgIFRoZSBpbmRleCBvZmZzZXQgd2l0aGluIHRoZSB3b3Jrc3BhY2UgZm9yIHRoZSBtYXhmaXJzdCBhcnJheVxuICogQHBhcmFtIHtOdW1iZXJ9ICBwcmV2bGVhZiAgICAgICAgVGhlIGluZGV4IG9mZnNldCB3aXRoaW4gdGhlIHdvcmtzcGFjZSBmb3IgdGhlIHByZXZsZWFmIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gIGFuY2VzdG9yICAgICAgICBUaGUgaW5kZXggb2Zmc2V0IHdpdGhpbiB0aGUgd29ya3NwYWNlIGZvciB0aGUgYW5jZXN0b3IgYXJyYXlcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NMZWFmKGksIGosIHcsIGZpcnN0LCBtYXhmaXJzdCwgcHJldmxlYWYsIGFuY2VzdG9yKSB7XG4gIHZhciBzLCBzcGFyZW50OyAvLyBvdXIgcmVzdWx0XG5cbiAgdmFyIGpsZWFmID0gMDtcbiAgdmFyIHE7IC8vIGNoZWNrIGogaXMgYSBsZWFmXG5cbiAgaWYgKGkgPD0gaiB8fCB3W2ZpcnN0ICsgal0gPD0gd1ttYXhmaXJzdCArIGldKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9IC8vIHVwZGF0ZSBtYXggZmlyc3Rbal0gc2VlbiBzbyBmYXJcblxuXG4gIHdbbWF4Zmlyc3QgKyBpXSA9IHdbZmlyc3QgKyBqXTsgLy8ganByZXYgPSBwcmV2aW91cyBsZWFmIG9mIGl0aCBzdWJ0cmVlXG5cbiAgdmFyIGpwcmV2ID0gd1twcmV2bGVhZiArIGldO1xuICB3W3ByZXZsZWFmICsgaV0gPSBqOyAvLyBjaGVjayBqIGlzIGZpcnN0IG9yIHN1YnNlcXVlbnQgbGVhZlxuXG4gIGlmIChqcHJldiA9PT0gLTEpIHtcbiAgICAvLyAxc3QgbGVhZiwgcSA9IHJvb3Qgb2YgaXRoIHN1YnRyZWVcbiAgICBqbGVhZiA9IDE7XG4gICAgcSA9IGk7XG4gIH0gZWxzZSB7XG4gICAgLy8gdXBkYXRlIGpsZWFmXG4gICAgamxlYWYgPSAyOyAvLyBxID0gbGVhc3QgY29tbW9uIGFuY2VzdGVyIChqcHJldixqKVxuXG4gICAgZm9yIChxID0ganByZXY7IHEgIT09IHdbYW5jZXN0b3IgKyBxXTsgcSA9IHdbYW5jZXN0b3IgKyBxXSkge1xuICAgICAgO1xuICAgIH1cblxuICAgIGZvciAocyA9IGpwcmV2OyBzICE9PSBxOyBzID0gc3BhcmVudCkge1xuICAgICAgLy8gcGF0aCBjb21wcmVzc2lvblxuICAgICAgc3BhcmVudCA9IHdbYW5jZXN0b3IgKyBzXTtcbiAgICAgIHdbYW5jZXN0b3IgKyBzXSA9IHE7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBqbGVhZjogamxlYWYsXG4gICAgcTogcVxuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDc0x1ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jc1Nwc29sdmUgPSByZXF1aXJlKFwiLi9jc1Nwc29sdmVcIik7XG5cbnZhciBuYW1lID0gJ2NzTHUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnYWJzJywgJ2RpdmlkZVNjYWxhcicsICdtdWx0aXBseScsICdzdWJ0cmFjdCcsICdsYXJnZXInLCAnbGFyZ2VyRXEnLCAnU3BhcnNlTWF0cml4J107XG52YXIgY3JlYXRlQ3NMdSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBhYnMgPSBfcmVmLmFicyxcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgbGFyZ2VyID0gX3JlZi5sYXJnZXIsXG4gICAgICBsYXJnZXJFcSA9IF9yZWYubGFyZ2VyRXEsXG4gICAgICBTcGFyc2VNYXRyaXggPSBfcmVmLlNwYXJzZU1hdHJpeDtcbiAgdmFyIGNzU3Bzb2x2ZSA9ICgwLCBfY3NTcHNvbHZlLmNyZWF0ZUNzU3Bzb2x2ZSkoe1xuICAgIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICBzdWJ0cmFjdDogc3VidHJhY3RcbiAgfSk7XG4gIC8qKlxuICAgKiBDb21wdXRlcyB0aGUgbnVtZXJpYyBMVSBmYWN0b3JpemF0aW9uIG9mIHRoZSBzcGFyc2UgbWF0cml4IEEuIEltcGxlbWVudHMgYSBMZWZ0LWxvb2tpbmcgTFUgZmFjdG9yaXphdGlvblxuICAgKiBhbGdvcml0aG0gdGhhdCBjb21wdXRlcyBMIGFuZCBVIG9uZSBjb2x1bW4gYXQgYSB0dW1lLiBBdCB0aGUga3RoIHN0ZXAsIGl0IGFjY2VzcyBjb2x1bW5zIDEgdG8gay0xIG9mIExcbiAgICogYW5kIGNvbHVtbiBrIG9mIEEuIEdpdmVuIHRoZSBmaWxsLXJlZHVjaW5nIGNvbHVtbiBvcmRlcmluZyBxIChzZWUgcGFyYW1ldGVyIHMpIGNvbXB1dGVzIEwsIFUgYW5kIHBpbnYgc29cbiAgICogTCAqIFUgPSBBKHAsIHEpLCB3aGVyZSBwIGlzIHRoZSBpbnZlcnNlIG9mIHBpbnYuXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgbSAgICAgICAgICAgICAgIFRoZSBBIE1hdHJpeCB0byBmYWN0b3JpemVcbiAgICogQHBhcmFtIHtPYmplY3R9ICBzICAgICAgICAgICAgICAgVGhlIHN5bWJvbGljIGFuYWx5c2lzIGZyb20gY3NTcXIoKS4gUHJvdmlkZXMgdGhlIGZpbGwtcmVkdWNpbmdcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uIG9yZGVyaW5nIHFcbiAgICogQHBhcmFtIHtOdW1iZXJ9ICB0b2wgICAgICAgICAgICAgUGFydGlhbCBwaXZvdGluZyB0aHJlc2hvbGQgKDEgZm9yIHBhcnRpYWwgcGl2b3RpbmcpXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn0gICAgICAgICAgICAgICAgIFRoZSBudW1lcmljIExVIGZhY3Rvcml6YXRpb24gb2YgQSBvciBudWxsXG4gICAqXG4gICAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gICAqL1xuXG4gIHJldHVybiBmdW5jdGlvbiBjc0x1KG0sIHMsIHRvbCkge1xuICAgIC8vIHZhbGlkYXRlIGlucHV0XG4gICAgaWYgKCFtKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IC8vIG0gYXJyYXlzXG5cblxuICAgIHZhciBzaXplID0gbS5fc2l6ZTsgLy8gY29sdW1uc1xuXG4gICAgdmFyIG4gPSBzaXplWzFdOyAvLyBzeW1ib2xpYyBhbmFseXNpcyByZXN1bHRcblxuICAgIHZhciBxO1xuICAgIHZhciBsbnogPSAxMDA7XG4gICAgdmFyIHVueiA9IDEwMDsgLy8gdXBkYXRlIHN5bWJvbGljIGFuYWx5c2lzIHBhcmFtZXRlcnNcblxuICAgIGlmIChzKSB7XG4gICAgICBxID0gcy5xO1xuICAgICAgbG56ID0gcy5sbnogfHwgbG56O1xuICAgICAgdW56ID0gcy51bnogfHwgdW56O1xuICAgIH0gLy8gTCBhcnJheXNcblxuXG4gICAgdmFyIGx2YWx1ZXMgPSBbXTsgLy8gKGxueilcblxuICAgIHZhciBsaW5kZXggPSBbXTsgLy8gKGxueilcblxuICAgIHZhciBscHRyID0gW107IC8vIChuICsgMSlcbiAgICAvLyBMXG5cbiAgICB2YXIgTCA9IG5ldyBTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiBsdmFsdWVzLFxuICAgICAgaW5kZXg6IGxpbmRleCxcbiAgICAgIHB0cjogbHB0cixcbiAgICAgIHNpemU6IFtuLCBuXVxuICAgIH0pOyAvLyBVIGFycmF5c1xuXG4gICAgdmFyIHV2YWx1ZXMgPSBbXTsgLy8gKHVueilcblxuICAgIHZhciB1aW5kZXggPSBbXTsgLy8gKHVueilcblxuICAgIHZhciB1cHRyID0gW107IC8vIChuICsgMSlcbiAgICAvLyBVXG5cbiAgICB2YXIgVSA9IG5ldyBTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiB1dmFsdWVzLFxuICAgICAgaW5kZXg6IHVpbmRleCxcbiAgICAgIHB0cjogdXB0cixcbiAgICAgIHNpemU6IFtuLCBuXVxuICAgIH0pOyAvLyBpbnZlcnNlIG9mIHBlcm11dGF0aW9uIHZlY3RvclxuXG4gICAgdmFyIHBpbnYgPSBbXTsgLy8gKG4pXG4gICAgLy8gdmFyc1xuXG4gICAgdmFyIGksIHA7IC8vIGFsbG9jYXRlIGFycmF5c1xuXG4gICAgdmFyIHggPSBbXTsgLy8gKG4pXG5cbiAgICB2YXIgeGkgPSBbXTsgLy8gKDIgKiBuKVxuICAgIC8vIGluaXRpYWxpemUgdmFyaWFibGVzXG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAvLyBjbGVhciB3b3Jrc3BhY2VcbiAgICAgIHhbaV0gPSAwOyAvLyBubyByb3dzIHBpdm90YWwgeWV0XG5cbiAgICAgIHBpbnZbaV0gPSAtMTsgLy8gbm8gY29scyBvZiBMIHlldFxuXG4gICAgICBscHRyW2kgKyAxXSA9IDA7XG4gICAgfSAvLyByZXNldCBudW1iZXIgb2Ygbm9uemVybyBlbGVtZW50cyBpbiBMIGFuZCBVXG5cblxuICAgIGxueiA9IDA7XG4gICAgdW56ID0gMDsgLy8gY29tcHV0ZSBMKDosaykgYW5kIFUoOixrKVxuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgIC8vIHVwZGF0ZSBwdHJcbiAgICAgIGxwdHJba10gPSBsbno7XG4gICAgICB1cHRyW2tdID0gdW56OyAvLyBhcHBseSBjb2x1bW4gcGVybXV0YXRpb25zIGlmIG5lZWRlZFxuXG4gICAgICB2YXIgY29sID0gcSA/IHFba10gOiBrOyAvLyBzb2x2ZSB0cmlhbmd1bGFyIHN5c3RlbSwgeCA9IExcXEEoOixjb2wpXG5cbiAgICAgIHZhciB0b3AgPSBjc1Nwc29sdmUoTCwgbSwgY29sLCB4aSwgeCwgcGludiwgMSk7IC8vIGZpbmQgcGl2b3RcblxuICAgICAgdmFyIGlwaXYgPSAtMTtcbiAgICAgIHZhciBhID0gLTE7IC8vIGxvb3AgeGlbXSBmcm9tIHRvcCAtPiBuXG5cbiAgICAgIGZvciAocCA9IHRvcDsgcCA8IG47IHArKykge1xuICAgICAgICAvLyB4W2ldIGlzIG5vbnplcm9cbiAgICAgICAgaSA9IHhpW3BdOyAvLyBjaGVjayByb3cgaSBpcyBub3QgeWV0IHBpdm90YWxcblxuICAgICAgICBpZiAocGludltpXSA8IDApIHtcbiAgICAgICAgICAvLyBhYnNvbHV0ZSB2YWx1ZSBvZiB4W2ldXG4gICAgICAgICAgdmFyIHhhYnMgPSBhYnMoeFtpXSk7IC8vIGNoZWNrIGFic291bHRlIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiBwaXZvdCB2YWx1ZVxuXG4gICAgICAgICAgaWYgKGxhcmdlcih4YWJzLCBhKSkge1xuICAgICAgICAgICAgLy8gbGFyZ2VzdCBwaXZvdCBjYW5kaWRhdGUgc28gZmFyXG4gICAgICAgICAgICBhID0geGFicztcbiAgICAgICAgICAgIGlwaXYgPSBpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB4KGkpIGlzIHRoZSBlbnRyeSBVKHBpbnZbaV0saylcbiAgICAgICAgICB1aW5kZXhbdW56XSA9IHBpbnZbaV07XG4gICAgICAgICAgdXZhbHVlc1t1bnorK10gPSB4W2ldO1xuICAgICAgICB9XG4gICAgICB9IC8vIHZhbGlkYXRlIHdlIGZvdW5kIGEgdmFsaWQgcGl2b3RcblxuXG4gICAgICBpZiAoaXBpdiA9PT0gLTEgfHwgYSA8PSAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSAvLyB1cGRhdGUgYWN0dWFsIHBpdm90IGNvbHVtbiwgZ2l2ZSBwcmVmZXJlbmNlIHRvIGRpYWdvbmFsIHZhbHVlXG5cblxuICAgICAgaWYgKHBpbnZbY29sXSA8IDAgJiYgbGFyZ2VyRXEoYWJzKHhbY29sXSksIG11bHRpcGx5KGEsIHRvbCkpKSB7XG4gICAgICAgIGlwaXYgPSBjb2w7XG4gICAgICB9IC8vIHRoZSBjaG9zZW4gcGl2b3RcblxuXG4gICAgICB2YXIgcGl2b3QgPSB4W2lwaXZdOyAvLyBsYXN0IGVudHJ5IGluIFUoOixrKSBpcyBVKGssaylcblxuICAgICAgdWluZGV4W3Vuel0gPSBrO1xuICAgICAgdXZhbHVlc1t1bnorK10gPSBwaXZvdDsgLy8gaXBpdiBpcyB0aGUga3RoIHBpdm90IHJvd1xuXG4gICAgICBwaW52W2lwaXZdID0gazsgLy8gZmlyc3QgZW50cnkgaW4gTCg6LGspIGlzIEwoayxrKSA9IDFcblxuICAgICAgbGluZGV4W2xuel0gPSBpcGl2O1xuICAgICAgbHZhbHVlc1tsbnorK10gPSAxOyAvLyBMKGsrMTpuLGspID0geCAvIHBpdm90XG5cbiAgICAgIGZvciAocCA9IHRvcDsgcCA8IG47IHArKykge1xuICAgICAgICAvLyByb3dcbiAgICAgICAgaSA9IHhpW3BdOyAvLyBjaGVjayB4KGkpIGlzIGFuIGVudHJ5IGluIEwoOixrKVxuXG4gICAgICAgIGlmIChwaW52W2ldIDwgMCkge1xuICAgICAgICAgIC8vIHNhdmUgdW5wZXJtdXRlZCByb3cgaW4gTFxuICAgICAgICAgIGxpbmRleFtsbnpdID0gaTsgLy8gc2NhbGUgcGl2b3QgY29sdW1uXG5cbiAgICAgICAgICBsdmFsdWVzW2xueisrXSA9IGRpdmlkZVNjYWxhcih4W2ldLCBwaXZvdCk7XG4gICAgICAgIH0gLy8geFswLi5uLTFdID0gMCBmb3IgbmV4dCBrXG5cblxuICAgICAgICB4W2ldID0gMDtcbiAgICAgIH1cbiAgICB9IC8vIHVwZGF0ZSBwdHJcblxuXG4gICAgbHB0cltuXSA9IGxuejtcbiAgICB1cHRyW25dID0gdW56OyAvLyBmaXggcm93IGluZGljZXMgb2YgTCBmb3IgZmluYWwgcGludlxuXG4gICAgZm9yIChwID0gMDsgcCA8IGxuejsgcCsrKSB7XG4gICAgICBsaW5kZXhbcF0gPSBwaW52W2xpbmRleFtwXV07XG4gICAgfSAvLyB0cmltIGFycmF5c1xuXG5cbiAgICBsdmFsdWVzLnNwbGljZShsbnosIGx2YWx1ZXMubGVuZ3RoIC0gbG56KTtcbiAgICBsaW5kZXguc3BsaWNlKGxueiwgbGluZGV4Lmxlbmd0aCAtIGxueik7XG4gICAgdXZhbHVlcy5zcGxpY2UodW56LCB1dmFsdWVzLmxlbmd0aCAtIHVueik7XG4gICAgdWluZGV4LnNwbGljZSh1bnosIHVpbmRleC5sZW5ndGggLSB1bnopOyAvLyByZXR1cm4gTFUgZmFjdG9yXG5cbiAgICByZXR1cm4ge1xuICAgICAgTDogTCxcbiAgICAgIFU6IFUsXG4gICAgICBwaW52OiBwaW52XG4gICAgfTtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDc0x1ID0gY3JlYXRlQ3NMdTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NNYXJrID0gY3NNYXJrO1xuXG52YXIgX2NzRmxpcCA9IHJlcXVpcmUoXCIuL2NzRmxpcFwiKTtcblxuLyoqXG4gKiBNYXJrcyB0aGUgbm9kZSBhdCB3W2pdXG4gKlxuICogQHBhcmFtIHtBcnJheX0gICB3ICAgICAgICAgICAgICAgVGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gIGogICAgICAgICAgICAgICBUaGUgYXJyYXkgaW5kZXhcbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICovXG5mdW5jdGlvbiBjc01hcmsodywgaikge1xuICAvLyBtYXJrIHdbal1cbiAgd1tqXSA9ICgwLCBfY3NGbGlwLmNzRmxpcCkod1tqXSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNzTWFya2VkID0gY3NNYXJrZWQ7XG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBub2RlIGF0IHdbal0gaXMgbWFya2VkXG4gKlxuICogQHBhcmFtIHtBcnJheX0gICB3ICAgICAgICAgICAgICAgVGhlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gIGogICAgICAgICAgICAgICBUaGUgYXJyYXkgaW5kZXhcbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICovXG5mdW5jdGlvbiBjc01hcmtlZCh3LCBqKSB7XG4gIC8vIGNoZWNrIG5vZGUgaXMgbWFya2VkXG4gIHJldHVybiB3W2pdIDwgMDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NQZXJtdXRlID0gY3NQZXJtdXRlO1xuXG4vKipcbiAqIFBlcm11dGVzIGEgc3BhcnNlIG1hdHJpeCBDID0gUCAqIEEgKiBRXG4gKlxuICogQHBhcmFtIHtTcGFyc2VNYXRyaXh9ICBhICAgICAgICAgVGhlIE1hdHJpeCBBXG4gKiBAcGFyYW0ge0FycmF5fSAgIHBpbnYgICAgICAgICAgICBUaGUgcm93IHBlcm11dGF0aW9uIHZlY3RvclxuICogQHBhcmFtIHtBcnJheX0gICBxICAgICAgICAgICAgICAgVGhlIGNvbHVtbiBwZXJtdXRhdGlvbiB2ZWN0b3JcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdmFsdWVzICAgICAgICAgIENyZWF0ZSBhIHBhdHRlcm4gbWF0cml4IChmYWxzZSksIHZhbHVlcyBhbmQgcGF0dGVybiBvdGhlcndpc2VcbiAqXG4gKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICBDID0gUCAqIEEgKiBRLCBudWxsIG9uIGVycm9yXG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NQZXJtdXRlKGEsIHBpbnYsIHEsIHZhbHVlcykge1xuICAvLyBhIGFycmF5c1xuICB2YXIgYXZhbHVlcyA9IGEuX3ZhbHVlcztcbiAgdmFyIGFpbmRleCA9IGEuX2luZGV4O1xuICB2YXIgYXB0ciA9IGEuX3B0cjtcbiAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgdmFyIGFkdCA9IGEuX2RhdGF0eXBlOyAvLyByb3dzICYgY29sdW1uc1xuXG4gIHZhciBtID0gYXNpemVbMF07XG4gIHZhciBuID0gYXNpemVbMV07IC8vIGMgYXJyYXlzXG5cbiAgdmFyIGN2YWx1ZXMgPSB2YWx1ZXMgJiYgYS5fdmFsdWVzID8gW10gOiBudWxsO1xuICB2YXIgY2luZGV4ID0gW107IC8vIChhcHRyW25dKVxuXG4gIHZhciBjcHRyID0gW107IC8vIChuICsgMSlcbiAgLy8gaW5pdGlhbGl6ZSB2YXJzXG5cbiAgdmFyIG56ID0gMDsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgZm9yICh2YXIgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAvLyBjb2x1bW4gayBvZiBDIGlzIGNvbHVtbiBxW2tdIG9mIEFcbiAgICBjcHRyW2tdID0gbno7IC8vIGFwcGx5IGNvbHVtbiBwZXJtdXRhdGlvblxuXG4gICAgdmFyIGogPSBxID8gcVtrXSA6IGs7IC8vIGxvb3AgdmFsdWVzIGluIGNvbHVtbiBqIG9mIEFcblxuICAgIGZvciAodmFyIHQwID0gYXB0cltqXSwgdDEgPSBhcHRyW2ogKyAxXSwgdCA9IHQwOyB0IDwgdDE7IHQrKykge1xuICAgICAgLy8gcm93IGkgb2YgQSBpcyByb3cgcGludltpXSBvZiBDXG4gICAgICB2YXIgciA9IHBpbnYgPyBwaW52W2FpbmRleFt0XV0gOiBhaW5kZXhbdF07IC8vIGluZGV4XG5cbiAgICAgIGNpbmRleFtuel0gPSByOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHBvcHVsYXRlIHZhbHVlc1xuXG4gICAgICBpZiAoY3ZhbHVlcykge1xuICAgICAgICBjdmFsdWVzW256XSA9IGF2YWx1ZXNbdF07XG4gICAgICB9IC8vIGluY3JlbWVudCBudW1iZXIgb2Ygbm9uemVybyBlbGVtZW50c1xuXG5cbiAgICAgIG56Kys7XG4gICAgfVxuICB9IC8vIGZpbmFsaXplIHRoZSBsYXN0IGNvbHVtbiBvZiBDXG5cblxuICBjcHRyW25dID0gbno7IC8vIHJldHVybiBDIG1hdHJpeFxuXG4gIHJldHVybiBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7XG4gICAgdmFsdWVzOiBjdmFsdWVzLFxuICAgIGluZGV4OiBjaW5kZXgsXG4gICAgcHRyOiBjcHRyLFxuICAgIHNpemU6IFttLCBuXSxcbiAgICBkYXRhdHlwZTogYWR0XG4gIH0pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc1Bvc3QgPSBjc1Bvc3Q7XG5cbnZhciBfY3NUZGZzID0gcmVxdWlyZShcIi4vY3NUZGZzXCIpO1xuXG4vKipcbiAqIFBvc3Qgb3JkZXIgYSB0cmVlIG9mIGZvcmVzdFxuICpcbiAqIEBwYXJhbSB7QXJyYXl9ICAgcGFyZW50ICAgICAgICAgIFRoZSB0cmVlIG9yIGZvcmVzdFxuICogQHBhcmFtIHtOdW1iZXJ9ICBuICAgICAgICAgICAgICAgTnVtYmVyIG9mIGNvbHVtbnNcbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICovXG5mdW5jdGlvbiBjc1Bvc3QocGFyZW50LCBuKSB7XG4gIC8vIGNoZWNrIGlucHV0c1xuICBpZiAoIXBhcmVudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9IC8vIHZhcnNcblxuXG4gIHZhciBrID0gMDtcbiAgdmFyIGo7IC8vIGFsbG9jYXRlIHJlc3VsdFxuXG4gIHZhciBwb3N0ID0gW107IC8vIChuKVxuICAvLyB3b3Jrc3BhY2UsIGhlYWQ6IGZpcnN0IG4gZW50cmllcywgbmV4dDogbmV4dCBuIGVudHJpZXMsIHN0YWNrOiBsYXN0IG4gZW50cmllc1xuXG4gIHZhciB3ID0gW107IC8vICgzICogbilcblxuICB2YXIgaGVhZCA9IDA7XG4gIHZhciBuZXh0ID0gbjtcbiAgdmFyIHN0YWNrID0gMiAqIG47IC8vIGluaXRpYWxpemUgd29ya3NwYWNlXG5cbiAgZm9yIChqID0gMDsgaiA8IG47IGorKykge1xuICAgIC8vIGVtcHR5IGxpbmtlZCBsaXN0c1xuICAgIHdbaGVhZCArIGpdID0gLTE7XG4gIH0gLy8gdHJhdmVyc2Ugbm9kZXMgaW4gcmV2ZXJzZSBvcmRlclxuXG5cbiAgZm9yIChqID0gbiAtIDE7IGogPj0gMDsgai0tKSB7XG4gICAgLy8gY2hlY2sgaiBpcyBhIHJvb3RcbiAgICBpZiAocGFyZW50W2pdID09PSAtMSkge1xuICAgICAgY29udGludWU7XG4gICAgfSAvLyBhZGQgaiB0byBsaXN0IG9mIGl0cyBwYXJlbnRcblxuXG4gICAgd1tuZXh0ICsgal0gPSB3W2hlYWQgKyBwYXJlbnRbal1dO1xuICAgIHdbaGVhZCArIHBhcmVudFtqXV0gPSBqO1xuICB9IC8vIGxvb3Agbm9kZXNcblxuXG4gIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAvLyBza2lwIGogaWYgaXQgaXMgbm90IGEgcm9vdFxuICAgIGlmIChwYXJlbnRbal0gIT09IC0xKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9IC8vIGRlcHRoLWZpcnN0IHNlYXJjaFxuXG5cbiAgICBrID0gKDAsIF9jc1RkZnMuY3NUZGZzKShqLCBrLCB3LCBoZWFkLCBuZXh0LCBwb3N0LCBzdGFjayk7XG4gIH1cblxuICByZXR1cm4gcG9zdDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NSZWFjaCA9IGNzUmVhY2g7XG5cbnZhciBfY3NNYXJrZWQgPSByZXF1aXJlKFwiLi9jc01hcmtlZFwiKTtcblxudmFyIF9jc01hcmsgPSByZXF1aXJlKFwiLi9jc01hcmtcIik7XG5cbnZhciBfY3NEZnMgPSByZXF1aXJlKFwiLi9jc0Rmc1wiKTtcblxuLyoqXG4gKiBUaGUgY3NSZWFjaCBmdW5jdGlvbiBjb21wdXRlcyBYID0gUmVhY2goQiksIHdoZXJlIEIgaXMgdGhlIG5vbnplcm8gcGF0dGVybiBvZiB0aGUgbi1ieS0xXG4gKiBzcGFyc2UgY29sdW1uIG9mIHZlY3RvciBiLiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgc2V0IG9mIG5vZGVzIHJlYWNoYWJsZSBmcm9tIGFueSBub2RlIGluIEIuIFRoZVxuICogbm9uemVybyBwYXR0ZXJuIHhpIG9mIHRoZSBzb2x1dGlvbiB4IHRvIHRoZSBzcGFyc2UgbGluZWFyIHN5c3RlbSBMeD1iIGlzIGdpdmVuIGJ5IFg9UmVhY2goQikuXG4gKlxuICogQHBhcmFtIHtNYXRyaXh9ICBnICAgICAgICAgICAgICAgVGhlIEcgbWF0cml4XG4gKiBAcGFyYW0ge01hdHJpeH0gIGIgICAgICAgICAgICAgICBUaGUgQiBtYXRyaXhcbiAqIEBwYXJhbSB7TnVtYmVyfSAgayAgICAgICAgICAgICAgIFRoZSBrdGggY29sdW1uIGluIEJcbiAqIEBwYXJhbSB7QXJyYXl9ICAgeGkgICAgICAgICAgICAgIFRoZSBub256ZXJvIHBhdHRlcm4geGlbdG9wXSAuLiB4aVtuIC0gMV0sIGFuIGFycmF5IG9mIHNpemUgPSAyICogblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IG4gZW50cmllcyBpcyB0aGUgbm9uemVybyBwYXR0ZXJuLCB0aGUgbGFzdCBuIGVudHJpZXMgaXMgdGhlIHN0YWNrXG4gKiBAcGFyYW0ge0FycmF5fSAgIHBpbnYgICAgICAgICAgICBUaGUgaW52ZXJzZSByb3cgcGVybXV0YXRpb24gdmVjdG9yXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSAgICAgICAgICAgICAgICAgVGhlIGluZGV4IGZvciB0aGUgbm9uemVybyBwYXR0ZXJuXG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NSZWFjaChnLCBiLCBrLCB4aSwgcGludikge1xuICAvLyBnIGFycmF5c1xuICB2YXIgZ3B0ciA9IGcuX3B0cjtcbiAgdmFyIGdzaXplID0gZy5fc2l6ZTsgLy8gYiBhcnJheXNcblxuICB2YXIgYmluZGV4ID0gYi5faW5kZXg7XG4gIHZhciBicHRyID0gYi5fcHRyOyAvLyBjb2x1bW5zXG5cbiAgdmFyIG4gPSBnc2l6ZVsxXTsgLy8gdmFyc1xuXG4gIHZhciBwLCBwMCwgcDE7IC8vIGluaXRpYWxpemUgdG9wXG5cbiAgdmFyIHRvcCA9IG47IC8vIGxvb3AgY29sdW1uIGluZGVjZXMgaW4gQlxuXG4gIGZvciAocDAgPSBicHRyW2tdLCBwMSA9IGJwdHJbayArIDFdLCBwID0gcDA7IHAgPCBwMTsgcCsrKSB7XG4gICAgLy8gbm9kZSBpXG4gICAgdmFyIGkgPSBiaW5kZXhbcF07IC8vIGNoZWNrIG5vZGUgaSBpcyBtYXJrZWRcblxuICAgIGlmICghKDAsIF9jc01hcmtlZC5jc01hcmtlZCkoZ3B0ciwgaSkpIHtcbiAgICAgIC8vIHN0YXJ0IGEgZGZzIGF0IHVubWFya2VkIG5vZGUgaVxuICAgICAgdG9wID0gKDAsIF9jc0Rmcy5jc0RmcykoaSwgZywgdG9wLCB4aSwgcGludik7XG4gICAgfVxuICB9IC8vIGxvb3AgY29sdW1ucyBmcm9tIHRvcCAtPiBuIC0gMVxuXG5cbiAgZm9yIChwID0gdG9wOyBwIDwgbjsgcCsrKSB7XG4gICAgLy8gcmVzdG9yZSBHXG4gICAgKDAsIF9jc01hcmsuY3NNYXJrKShncHRyLCB4aVtwXSk7XG4gIH1cblxuICByZXR1cm4gdG9wO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDc1Nwc29sdmUgPSB2b2lkIDA7XG5cbnZhciBfY3NSZWFjaCA9IHJlcXVpcmUoXCIuL2NzUmVhY2hcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdjc1Nwc29sdmUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnZGl2aWRlU2NhbGFyJywgJ211bHRpcGx5JywgJ3N1YnRyYWN0J107XG52YXIgY3JlYXRlQ3NTcHNvbHZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0O1xuXG4gIC8qKlxuICAgKiBUaGUgZnVuY3Rpb24gY3NTcHNvbHZlKCkgY29tcHV0ZXMgdGhlIHNvbHV0aW9uIHRvIEcgKiB4ID0gYmssIHdoZXJlIGJrIGlzIHRoZVxuICAgKiBrdGggY29sdW1uIG9mIEIuIFdoZW4gbG8gaXMgdHJ1ZSwgdGhlIGZ1bmN0aW9uIGFzc3VtZXMgRyA9IEwgaXMgbG93ZXIgdHJpYW5ndWxhciB3aXRoIHRoZVxuICAgKiBkaWFnb25hbCBlbnRyeSBhcyB0aGUgZmlyc3QgZW50cnkgaW4gZWFjaCBjb2x1bW4uIFdoZW4gbG8gaXMgdHJ1ZSwgdGhlIGZ1bmN0aW9uIGFzc3VtZXMgRyA9IFVcbiAgICogaXMgdXBwZXIgdHJpYW5ndWxhciB3aXRoIHRoZSBkaWFnb25hbCBlbnRyeSBhcyB0aGUgbGFzdCBlbnRyeSBpbiBlYWNoIGNvbHVtbi5cbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9ICBnICAgICAgICAgICAgICAgVGhlIEcgbWF0cml4XG4gICAqIEBwYXJhbSB7TWF0cml4fSAgYiAgICAgICAgICAgICAgIFRoZSBCIG1hdHJpeFxuICAgKiBAcGFyYW0ge051bWJlcn0gIGsgICAgICAgICAgICAgICBUaGUga3RoIGNvbHVtbiBpbiBCXG4gICAqIEBwYXJhbSB7QXJyYXl9ICAgeGkgICAgICAgICAgICAgIFRoZSBub256ZXJvIHBhdHRlcm4geGlbdG9wXSAuLiB4aVtuIC0gMV0sIGFuIGFycmF5IG9mIHNpemUgPSAyICogblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgbiBlbnRyaWVzIGlzIHRoZSBub256ZXJvIHBhdHRlcm4sIHRoZSBsYXN0IG4gZW50cmllcyBpcyB0aGUgc3RhY2tcbiAgICogQHBhcmFtIHtBcnJheX0gICB4ICAgICAgICAgICAgICAgVGhlIHNvbHV0b24gdG8gdGhlIGxpbmVhciBzeXN0ZW0gRyAqIHggPSBiXG4gICAqIEBwYXJhbSB7QXJyYXl9ICAgcGludiAgICAgICAgICAgIFRoZSBpbnZlcnNlIHJvdyBwZXJtdXRhdGlvbiB2ZWN0b3IsIG11c3QgYmUgbnVsbCBmb3IgTCAqIHggPSBiXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gbG8gICAgICAgICAgICAgIFRoZSBsb3dlciAodHJ1ZSkgdXBwZXIgdHJpYW5ndWxhciAoZmFsc2UpIGZsYWdcbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfSAgICAgICAgICAgICAgICAgVGhlIGluZGV4IGZvciB0aGUgbm9uemVybyBwYXR0ZXJuXG4gICAqXG4gICAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gY3NTcHNvbHZlKGcsIGIsIGssIHhpLCB4LCBwaW52LCBsbykge1xuICAgIC8vIGcgYXJyYXlzXG4gICAgdmFyIGd2YWx1ZXMgPSBnLl92YWx1ZXM7XG4gICAgdmFyIGdpbmRleCA9IGcuX2luZGV4O1xuICAgIHZhciBncHRyID0gZy5fcHRyO1xuICAgIHZhciBnc2l6ZSA9IGcuX3NpemU7IC8vIGNvbHVtbnNcblxuICAgIHZhciBuID0gZ3NpemVbMV07IC8vIGIgYXJyYXlzXG5cbiAgICB2YXIgYnZhbHVlcyA9IGIuX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gYi5faW5kZXg7XG4gICAgdmFyIGJwdHIgPSBiLl9wdHI7IC8vIHZhcnNcblxuICAgIHZhciBwLCBwMCwgcDEsIHE7IC8vIHhpW3RvcC4ubi0xXSA9IGNzUmVhY2goQig6LGspKVxuXG4gICAgdmFyIHRvcCA9ICgwLCBfY3NSZWFjaC5jc1JlYWNoKShnLCBiLCBrLCB4aSwgcGludik7IC8vIGNsZWFyIHhcblxuICAgIGZvciAocCA9IHRvcDsgcCA8IG47IHArKykge1xuICAgICAgeFt4aVtwXV0gPSAwO1xuICAgIH0gLy8gc2NhdHRlciBiXG5cblxuICAgIGZvciAocDAgPSBicHRyW2tdLCBwMSA9IGJwdHJbayArIDFdLCBwID0gcDA7IHAgPCBwMTsgcCsrKSB7XG4gICAgICB4W2JpbmRleFtwXV0gPSBidmFsdWVzW3BdO1xuICAgIH0gLy8gbG9vcCBjb2x1bW5zXG5cblxuICAgIGZvciAodmFyIHB4ID0gdG9wOyBweCA8IG47IHB4KyspIHtcbiAgICAgIC8vIHggYXJyYXkgaW5kZXggZm9yIHB4XG4gICAgICB2YXIgaiA9IHhpW3B4XTsgLy8gYXBwbHkgcGVybXV0YXRpb24gdmVjdG9yIChVIHggPSBiKSwgaiBtYXBzIHRvIGNvbHVtbiBKIG9mIEdcblxuICAgICAgdmFyIEogPSBwaW52ID8gcGludltqXSA6IGo7IC8vIGNoZWNrIGNvbHVtbiBKIGlzIGVtcHR5XG5cbiAgICAgIGlmIChKIDwgMCkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gY29sdW1uIHZhbHVlIGluZGVjZXMgaW4gRywgcDAgPD0gcCA8IHAxXG5cblxuICAgICAgcDAgPSBncHRyW0pdO1xuICAgICAgcDEgPSBncHRyW0ogKyAxXTsgLy8geChqKSAvPSBHKGosailcblxuICAgICAgeFtqXSA9IGRpdmlkZVNjYWxhcih4W2pdLCBndmFsdWVzW2xvID8gcDAgOiBwMSAtIDFdKTsgLy8gZmlyc3QgZW50cnkgTChqLGopXG5cbiAgICAgIHAgPSBsbyA/IHAwICsgMSA6IHAwO1xuICAgICAgcSA9IGxvID8gcDEgOiBwMSAtIDE7IC8vIGxvb3BcblxuICAgICAgZm9yICg7IHAgPCBxOyBwKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIHZhciBpID0gZ2luZGV4W3BdOyAvLyB4KGkpIC09IEcoaSxqKSAqIHgoailcblxuICAgICAgICB4W2ldID0gc3VidHJhY3QoeFtpXSwgbXVsdGlwbHkoZ3ZhbHVlc1twXSwgeFtqXSkpO1xuICAgICAgfVxuICAgIH0gLy8gcmV0dXJuIHRvcCBvZiBzdGFja1xuXG5cbiAgICByZXR1cm4gdG9wO1xuICB9O1xufSk7XG5leHBvcnRzLmNyZWF0ZUNzU3Bzb2x2ZSA9IGNyZWF0ZUNzU3Bzb2x2ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ3NTcXIgPSB2b2lkIDA7XG5cbnZhciBfY3NQZXJtdXRlID0gcmVxdWlyZShcIi4vY3NQZXJtdXRlXCIpO1xuXG52YXIgX2NzUG9zdCA9IHJlcXVpcmUoXCIuL2NzUG9zdFwiKTtcblxudmFyIF9jc0V0cmVlID0gcmVxdWlyZShcIi4vY3NFdHJlZVwiKTtcblxudmFyIF9jc0FtZCA9IHJlcXVpcmUoXCIuL2NzQW1kXCIpO1xuXG52YXIgX2NzQ291bnRzID0gcmVxdWlyZShcIi4vY3NDb3VudHNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdjc1Nxcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWydhZGQnLCAnbXVsdGlwbHknLCAndHJhbnNwb3NlJ107XG52YXIgY3JlYXRlQ3NTcXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgYWRkID0gX3JlZi5hZGQsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICB0cmFuc3Bvc2UgPSBfcmVmLnRyYW5zcG9zZTtcbiAgdmFyIGNzQW1kID0gKDAsIF9jc0FtZC5jcmVhdGVDc0FtZCkoe1xuICAgIGFkZDogYWRkLFxuICAgIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgICB0cmFuc3Bvc2U6IHRyYW5zcG9zZVxuICB9KTtcbiAgdmFyIGNzQ291bnRzID0gKDAsIF9jc0NvdW50cy5jcmVhdGVDc0NvdW50cykoe1xuICAgIHRyYW5zcG9zZTogdHJhbnNwb3NlXG4gIH0pO1xuICAvKipcbiAgICogU3ltYm9saWMgb3JkZXJpbmcgYW5kIGFuYWx5c2lzIGZvciBRUiBhbmQgTFUgZGVjb21wb3NpdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSAgb3JkZXIgICAgICAgICAgIFRoZSBvcmRlcmluZyBzdHJhdGVneSAoc2VlIGNzQW1kIGZvciBtb3JlIGRldGFpbHMpXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgYSAgICAgICAgICAgICAgIFRoZSBBIG1hdHJpeFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IHFyICAgICAgICAgICAgICBTeW1ib2xpYyBvcmRlcmluZyBhbmQgYW5hbHlzaXMgZm9yIFFSIGRlY29tcG9zaXRpb24gKHRydWUpIG9yXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5bWJvbGljIG9yZGVyaW5nIGFuZCBhbmFseXNpcyBmb3IgTFUgZGVjb21wb3NpdGlvbiAoZmFsc2UpXG4gICAqXG4gICAqIEByZXR1cm4ge09iamVjdH0gICAgICAgICAgICAgICAgIFRoZSBTeW1ib2xpYyBvcmRlcmluZyBhbmQgYW5hbHlzaXMgZm9yIG1hdHJpeCBBXG4gICAqXG4gICAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gICAqL1xuXG4gIHJldHVybiBmdW5jdGlvbiBjc1NxcihvcmRlciwgYSwgcXIpIHtcbiAgICAvLyBhIGFycmF5c1xuICAgIHZhciBhcHRyID0gYS5fcHRyO1xuICAgIHZhciBhc2l6ZSA9IGEuX3NpemU7IC8vIGNvbHVtbnNcblxuICAgIHZhciBuID0gYXNpemVbMV07IC8vIHZhcnNcblxuICAgIHZhciBrOyAvLyBzeW1ib2xpYyBhbmFseXNpcyByZXN1bHRcblxuICAgIHZhciBzID0ge307IC8vIGZpbGwtcmVkdWNpbmcgb3JkZXJpbmdcblxuICAgIHMucSA9IGNzQW1kKG9yZGVyLCBhKTsgLy8gdmFsaWRhdGUgcmVzdWx0c1xuXG4gICAgaWYgKG9yZGVyICYmICFzLnEpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gUVIgc3ltYm9saWMgYW5hbHlzaXNcblxuXG4gICAgaWYgKHFyKSB7XG4gICAgICAvLyBhcHBseSBwZXJtdXRhdGlvbnMgaWYgbmVlZGVkXG4gICAgICB2YXIgYyA9IG9yZGVyID8gKDAsIF9jc1Blcm11dGUuY3NQZXJtdXRlKShhLCBudWxsLCBzLnEsIDApIDogYTsgLy8gZXRyZWUgb2YgQycqQywgd2hlcmUgQz1BKDoscSlcblxuICAgICAgcy5wYXJlbnQgPSAoMCwgX2NzRXRyZWUuY3NFdHJlZSkoYywgMSk7IC8vIHBvc3Qgb3JkZXIgZWxpbWluYXRpb24gdHJlZVxuXG4gICAgICB2YXIgcG9zdCA9ICgwLCBfY3NQb3N0LmNzUG9zdCkocy5wYXJlbnQsIG4pOyAvLyBjb2wgY291bnRzIGNob2woQycqQylcblxuICAgICAgcy5jcCA9IGNzQ291bnRzKGMsIHMucGFyZW50LCBwb3N0LCAxKTsgLy8gY2hlY2sgd2UgaGF2ZSBldmVyeXRoaW5nIG5lZWRlZCB0byBjYWxjdWxhdGUgbnVtYmVyIG9mIG5vbnplcm8gZWxlbWVudHNcblxuICAgICAgaWYgKGMgJiYgcy5wYXJlbnQgJiYgcy5jcCAmJiBfdmNvdW50KGMsIHMpKSB7XG4gICAgICAgIC8vIGNhbGN1bGF0ZSBudW1iZXIgb2Ygbm9uemVybyBlbGVtZW50c1xuICAgICAgICBmb3IgKHMudW56ID0gMCwgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgICAgICBzLnVueiArPSBzLmNwW2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZvciBMVSBmYWN0b3JpemF0aW9uIG9ubHksIGd1ZXNzIG5ueihMKSBhbmQgbm56KFUpXG4gICAgICBzLnVueiA9IDQgKiBhcHRyW25dICsgbjtcbiAgICAgIHMubG56ID0gcy51bno7XG4gICAgfSAvLyByZXR1cm4gcmVzdWx0IFNcblxuXG4gICAgcmV0dXJuIHM7XG4gIH07XG4gIC8qKlxuICAgKiBDb21wdXRlIG5ueihWKSA9IHMubG56LCBzLnBpbnYsIHMubGVmdG1vc3QsIHMubTIgZnJvbSBBIGFuZCBzLnBhcmVudFxuICAgKi9cblxuICBmdW5jdGlvbiBfdmNvdW50KGEsIHMpIHtcbiAgICAvLyBhIGFycmF5c1xuICAgIHZhciBhcHRyID0gYS5fcHRyO1xuICAgIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplOyAvLyByb3dzICYgY29sdW1uc1xuXG4gICAgdmFyIG0gPSBhc2l6ZVswXTtcbiAgICB2YXIgbiA9IGFzaXplWzFdOyAvLyBpbml0aWFsaXplIHMgYXJyYXlzXG5cbiAgICBzLnBpbnYgPSBbXTsgLy8gKG0gKyBuKVxuXG4gICAgcy5sZWZ0bW9zdCA9IFtdOyAvLyAobSlcbiAgICAvLyB2YXJzXG5cbiAgICB2YXIgcGFyZW50ID0gcy5wYXJlbnQ7XG4gICAgdmFyIHBpbnYgPSBzLnBpbnY7XG4gICAgdmFyIGxlZnRtb3N0ID0gcy5sZWZ0bW9zdDsgLy8gd29ya3NwYWNlLCBuZXh0OiBmaXJzdCBtIGVudHJpZXMsIGhlYWQ6IG5leHQgbiBlbnRyaWVzLCB0YWlsOiBuZXh0IG4gZW50cmllcywgbnF1ZTogbmV4dCBuIGVudHJpZXNcblxuICAgIHZhciB3ID0gW107IC8vIChtICsgMyAqIG4pXG5cbiAgICB2YXIgbmV4dCA9IDA7XG4gICAgdmFyIGhlYWQgPSBtO1xuICAgIHZhciB0YWlsID0gbSArIG47XG4gICAgdmFyIG5xdWUgPSBtICsgMiAqIG47IC8vIHZhcnNcblxuICAgIHZhciBpLCBrLCBwLCBwMCwgcDE7IC8vIGluaXRpYWxpemUgd1xuXG4gICAgZm9yIChrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgLy8gcXVldWUgayBpcyBlbXB0eVxuICAgICAgd1toZWFkICsga10gPSAtMTtcbiAgICAgIHdbdGFpbCArIGtdID0gLTE7XG4gICAgICB3W25xdWUgKyBrXSA9IDA7XG4gICAgfSAvLyBpbml0aWFsaXplIHJvdyBhcnJheXNcblxuXG4gICAgZm9yIChpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgbGVmdG1vc3RbaV0gPSAtMTtcbiAgICB9IC8vIGxvb3AgY29sdW1ucyBiYWNrd2FyZHNcblxuXG4gICAgZm9yIChrID0gbiAtIDE7IGsgPj0gMDsgay0tKSB7XG4gICAgICAvLyB2YWx1ZXMgJiBpbmRleCBmb3IgY29sdW1uIGtcbiAgICAgIGZvciAocDAgPSBhcHRyW2tdLCBwMSA9IGFwdHJbayArIDFdLCBwID0gcDA7IHAgPCBwMTsgcCsrKSB7XG4gICAgICAgIC8vIGxlZnRtb3N0W2ldID0gbWluKGZpbmQoQShpLDopKSlcbiAgICAgICAgbGVmdG1vc3RbYWluZGV4W3BdXSA9IGs7XG4gICAgICB9XG4gICAgfSAvLyBzY2FuIHJvd3MgaW4gcmV2ZXJzZSBvcmRlclxuXG5cbiAgICBmb3IgKGkgPSBtIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIC8vIHJvdyBpIGlzIG5vdCB5ZXQgb3JkZXJlZFxuICAgICAgcGludltpXSA9IC0xO1xuICAgICAgayA9IGxlZnRtb3N0W2ldOyAvLyBjaGVjayByb3cgaSBpcyBlbXB0eVxuXG4gICAgICBpZiAoayA9PT0gLTEpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIGZpcnN0IHJvdyBpbiBxdWV1ZSBrXG5cblxuICAgICAgaWYgKHdbbnF1ZSArIGtdKysgPT09IDApIHtcbiAgICAgICAgd1t0YWlsICsga10gPSBpO1xuICAgICAgfSAvLyBwdXQgaSBhdCBoZWFkIG9mIHF1ZXVlIGtcblxuXG4gICAgICB3W25leHQgKyBpXSA9IHdbaGVhZCArIGtdO1xuICAgICAgd1toZWFkICsga10gPSBpO1xuICAgIH1cblxuICAgIHMubG56ID0gMDtcbiAgICBzLm0yID0gbTsgLy8gZmluZCByb3cgcGVybXV0YXRpb24gYW5kIG5ueihWKVxuXG4gICAgZm9yIChrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgLy8gcmVtb3ZlIHJvdyBpIGZyb20gcXVldWUga1xuICAgICAgaSA9IHdbaGVhZCArIGtdOyAvLyBjb3VudCBWKGssaykgYXMgbm9uemVyb1xuXG4gICAgICBzLmxueisrOyAvLyBhZGQgYSBmaWN0aXRpb3VzIHJvd1xuXG4gICAgICBpZiAoaSA8IDApIHtcbiAgICAgICAgaSA9IHMubTIrKztcbiAgICAgIH0gLy8gYXNzb2NpYXRlIHJvdyBpIHdpdGggVig6LGspXG5cblxuICAgICAgcGludltpXSA9IGs7IC8vIHNraXAgaWYgVihrKzE6bSxrKSBpcyBlbXB0eVxuXG4gICAgICBpZiAoLS1ucXVlW2tdIDw9IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIG5xdWVba10gaXMgbm56IChWKGsrMTptLGspKVxuXG5cbiAgICAgIHMubG56ICs9IHdbbnF1ZSArIGtdOyAvLyBtb3ZlIGFsbCByb3dzIHRvIHBhcmVudCBvZiBrXG5cbiAgICAgIHZhciBwYSA9IHBhcmVudFtrXTtcblxuICAgICAgaWYgKHBhICE9PSAtMSkge1xuICAgICAgICBpZiAod1tucXVlICsgcGFdID09PSAwKSB7XG4gICAgICAgICAgd1t0YWlsICsgcGFdID0gd1t0YWlsICsga107XG4gICAgICAgIH1cblxuICAgICAgICB3W25leHQgKyB3W3RhaWwgKyBrXV0gPSB3W2hlYWQgKyBwYV07XG4gICAgICAgIHdbaGVhZCArIHBhXSA9IHdbbmV4dCArIGldO1xuICAgICAgICB3W25xdWUgKyBwYV0gKz0gd1tucXVlICsga107XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgaWYgKHBpbnZbaV0gPCAwKSB7XG4gICAgICAgIHBpbnZbaV0gPSBrKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVDc1NxciA9IGNyZWF0ZUNzU3FyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc1RkZnMgPSBjc1RkZnM7XG5cbi8qKlxuICogRGVwdGgtZmlyc3Qgc2VhcmNoIGFuZCBwb3N0b3JkZXIgb2YgYSB0cmVlIHJvb3RlZCBhdCBub2RlIGpcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gIGogICAgICAgICAgICAgICBUaGUgdHJlZSBub2RlXG4gKiBAcGFyYW0ge051bWJlcn0gIGtcbiAqIEBwYXJhbSB7QXJyYXl9ICAgdyAgICAgICAgICAgICAgIFRoZSB3b3Jrc3BhY2UgYXJyYXlcbiAqIEBwYXJhbSB7TnVtYmVyfSAgaGVhZCAgICAgICAgICAgIFRoZSBpbmRleCBvZmZzZXQgd2l0aGluIHRoZSB3b3Jrc3BhY2UgZm9yIHRoZSBoZWFkIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gIG5leHQgICAgICAgICAgICBUaGUgaW5kZXggb2Zmc2V0IHdpdGhpbiB0aGUgd29ya3NwYWNlIGZvciB0aGUgbmV4dCBhcnJheVxuICogQHBhcmFtIHtBcnJheX0gICBwb3N0ICAgICAgICAgICAgVGhlIHBvc3Qgb3JkZXJpbmcgYXJyYXlcbiAqIEBwYXJhbSB7TnVtYmVyfSAgc3RhY2sgICAgICAgICAgIFRoZSBpbmRleCBvZmZzZXQgd2l0aGluIHRoZSB3b3Jrc3BhY2UgZm9yIHRoZSBzdGFjayBhcnJheVxuICpcbiAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gKi9cbmZ1bmN0aW9uIGNzVGRmcyhqLCBrLCB3LCBoZWFkLCBuZXh0LCBwb3N0LCBzdGFjaykge1xuICAvLyB2YXJpYWJsZXNcbiAgdmFyIHRvcCA9IDA7IC8vIHBsYWNlIGogb24gdGhlIHN0YWNrXG5cbiAgd1tzdGFja10gPSBqOyAvLyB3aGlsZSAoc3RhY2sgaXMgbm90IGVtcHR5KVxuXG4gIHdoaWxlICh0b3AgPj0gMCkge1xuICAgIC8vIHAgPSB0b3Agb2Ygc3RhY2tcbiAgICB2YXIgcCA9IHdbc3RhY2sgKyB0b3BdOyAvLyBpID0geW91bmdlc3QgY2hpbGQgb2YgcFxuXG4gICAgdmFyIGkgPSB3W2hlYWQgKyBwXTtcblxuICAgIGlmIChpID09PSAtMSkge1xuICAgICAgLy8gcCBoYXMgbm8gdW5vcmRlcmVkIGNoaWxkcmVuIGxlZnRcbiAgICAgIHRvcC0tOyAvLyBub2RlIHAgaXMgdGhlIGt0aCBwb3N0b3JkZXJlZCBub2RlXG5cbiAgICAgIHBvc3RbaysrXSA9IHA7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJlbW92ZSBpIGZyb20gY2hpbGRyZW4gb2YgcFxuICAgICAgd1toZWFkICsgcF0gPSB3W25leHQgKyBpXTsgLy8gaW5jcmVtZW50IHRvcFxuXG4gICAgICArK3RvcDsgLy8gc3RhcnQgZGZzIG9uIGNoaWxkIG5vZGUgaVxuXG4gICAgICB3W3N0YWNrICsgdG9wXSA9IGk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGs7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNzVW5mbGlwID0gY3NVbmZsaXA7XG5cbnZhciBfY3NGbGlwID0gcmVxdWlyZShcIi4vY3NGbGlwXCIpO1xuXG4vKipcbiAqIEZsaXBzIHRoZSB2YWx1ZSBpZiBpdCBpcyBuZWdhdGl2ZSBvZiByZXR1cm5zIHRoZSBzYW1lIHZhbHVlIG90aGVyd2lzZS5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gIGkgICAgICAgICAgICAgICBUaGUgdmFsdWUgdG8gZmxpcFxuICpcbiAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gKi9cbmZ1bmN0aW9uIGNzVW5mbGlwKGkpIHtcbiAgLy8gZmxpcCB0aGUgdmFsdWUgaWYgaXQgaXMgbmVnYXRpdmVcbiAgcmV0dXJuIGkgPCAwID8gKDAsIF9jc0ZsaXAuY3NGbGlwKShpKSA6IGk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFicyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2Ficyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUFicyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgYSBudW1iZXIuIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzXG4gICAqIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hYnMoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYWJzKDMuNSkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMy41XG4gICAqICAgIG1hdGguYWJzKC00LjIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNC4yXG4gICAqXG4gICAqICAgIG1hdGguYWJzKFszLCAtNSwgLTEsIDAsIDJdKSAgLy8gcmV0dXJucyBBcnJheSBbMywgNSwgMSwgMCwgMl1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNpZ25cbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXggfCBVbml0fSB4XG4gICAqICAgICAgICAgICAgQSBudW1iZXIgb3IgbWF0cml4IGZvciB3aGljaCB0byBnZXQgdGhlIGFic29sdXRlIHZhbHVlXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4IHwgVW5pdH1cbiAgICogICAgICAgICAgICBBYnNvbHV0ZSB2YWx1ZSBvZiBgeGBcbiAgICovXG4gIHZhciBhYnMgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmFic051bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmFicygpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguYWJzKCk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHguYWJzKCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIGFicygwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYWJzLCB0cnVlKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgcmV0dXJuIHguYWJzKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFicztcbn0pO1xuZXhwb3J0cy5jcmVhdGVBYnMgPSBjcmVhdGVBYnM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFkZCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDFcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNFwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEwXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIG5hbWUgPSAnYWRkJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdhZGRTY2FsYXInLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnLCAnU3BhcnNlTWF0cml4J107XG52YXIgY3JlYXRlQWRkID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXgsXG4gICAgICBTcGFyc2VNYXRyaXggPSBfcmVmLlNwYXJzZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAxID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNCA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMCA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQWRkIHR3byBvciBtb3JlIHZhbHVlcywgYHggKyB5YC5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFkZCh4LCB5KVxuICAgKiAgICBtYXRoLmFkZCh4LCB5LCB6LCAuLi4pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmFkZCgyLCAzKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDVcbiAgICogICAgbWF0aC5hZGQoMiwgMywgNCkgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA5XG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLmNvbXBsZXgoMiwgMylcbiAgICogICAgY29uc3QgYiA9IG1hdGguY29tcGxleCgtNCwgMSlcbiAgICogICAgbWF0aC5hZGQoYSwgYikgICAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggLTIgKyA0aVxuICAgKlxuICAgKiAgICBtYXRoLmFkZChbMSwgMiwgM10sIDQpICAgICAgIC8vIHJldHVybnMgQXJyYXkgWzUsIDYsIDddXG4gICAqXG4gICAqICAgIGNvbnN0IGMgPSBtYXRoLnVuaXQoJzUgY20nKVxuICAgKiAgICBjb25zdCBkID0gbWF0aC51bml0KCcyLjEgbW0nKVxuICAgKiAgICBtYXRoLmFkZChjLCBkKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgVW5pdCA1Mi4xIG1tXG4gICAqXG4gICAqICAgIG1hdGguYWRkKFwiMi4zXCIsIFwiNFwiKSAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDYuM1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc3VidHJhY3QsIHN1bVxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggRmlyc3QgdmFsdWUgdG8gYWRkXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gYWRkXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0gU3VtIG9mIGB4YCBhbmQgYHlgXG4gICAqL1xuXG4gIHZhciBhZGQgPSB0eXBlZChuYW1lLCAoMCwgX29iamVjdC5leHRlbmQpKHtcbiAgICAvLyB3ZSBleHRlbmQgdGhlIHNpZ25hdHVyZXMgb2YgYWRkU2NhbGFyIHdpdGggc2lnbmF0dXJlcyBkZWFsaW5nIHdpdGggbWF0cmljZXNcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgYWRkU2NhbGFyKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAxKHgsIHksIGFkZFNjYWxhciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeSwgeCwgYWRkU2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDQoeCwgeSwgYWRkU2NhbGFyKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhZGQobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFkZChtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWRkKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBhZGRTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTAoeCwgeSwgYWRkU2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBhZGRTY2FsYXIsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh5LCB4LCBhZGRTY2FsYXIsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBhZGRTY2FsYXIsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIGFkZFNjYWxhciwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgYW55JzogYWRkU2NhbGFyLFxuICAgICdhbnksIGFueSwgLi4uYW55JzogZnVuY3Rpb24gYW55QW55QW55KHgsIHksIHJlc3QpIHtcbiAgICAgIHZhciByZXN1bHQgPSBhZGQoeCwgeSk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgPSBhZGQocmVzdWx0LCByZXN0W2ldKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH0sIGFkZFNjYWxhci5zaWduYXR1cmVzKSk7XG4gIHJldHVybiBhZGQ7XG59KTtcbmV4cG9ydHMuY3JlYXRlQWRkID0gY3JlYXRlQWRkOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBZGRTY2FsYXIgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2FkZFNjYWxhcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUFkZFNjYWxhciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEFkZCB0d28gc2NhbGFyIHZhbHVlcywgYHggKyB5YC5cbiAgICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCBmb3IgaW50ZXJuYWwgdXNlOiBpdCBpcyB1c2VkIGJ5IHRoZSBwdWJsaWMgZnVuY3Rpb25cbiAgICogYGFkZGBcbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBzdXBwb3J0IGNvbGxlY3Rpb25zIChBcnJheSBvciBNYXRyaXgpLlxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0fSB4ICAgRmlyc3QgdmFsdWUgdG8gYWRkXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleH0geSAgICAgICAgICBTZWNvbmQgdmFsdWUgdG8gYWRkXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXR9ICAgICBTdW0gb2YgYHhgIGFuZCBgeWBcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHZhciBhZGRTY2FsYXIgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5hZGROdW1iZXIsXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7XG4gICAgICByZXR1cm4geC5hZGQoeSk7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHgucGx1cyh5KTtcbiAgICB9LFxuICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiB4LmFkZCh5KTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgaWYgKHgudmFsdWUgPT09IG51bGwgfHwgeC52YWx1ZSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciB4IGNvbnRhaW5zIGEgdW5pdCB3aXRoIHVuZGVmaW5lZCB2YWx1ZScpO1xuICAgICAgaWYgKHkudmFsdWUgPT09IG51bGwgfHwgeS52YWx1ZSA9PT0gdW5kZWZpbmVkKSB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciB5IGNvbnRhaW5zIGEgdW5pdCB3aXRoIHVuZGVmaW5lZCB2YWx1ZScpO1xuICAgICAgaWYgKCF4LmVxdWFsQmFzZSh5KSkgdGhyb3cgbmV3IEVycm9yKCdVbml0cyBkbyBub3QgbWF0Y2gnKTtcbiAgICAgIHZhciByZXMgPSB4LmNsb25lKCk7XG4gICAgICByZXMudmFsdWUgPSBhZGRTY2FsYXIocmVzLnZhbHVlLCB5LnZhbHVlKTtcbiAgICAgIHJlcy5maXhQcmVmaXggPSBmYWxzZTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFkZFNjYWxhcjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBZGRTY2FsYXIgPSBjcmVhdGVBZGRTY2FsYXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNicnQgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdjYnJ0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ2NvbmZpZycsICd0eXBlZCcsICdpc05lZ2F0aXZlJywgJ3VuYXJ5TWludXMnLCAnbWF0cml4JywgJ0NvbXBsZXgnLCAnQmlnTnVtYmVyJywgJ0ZyYWN0aW9uJ107XG52YXIgY3JlYXRlQ2JydCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGlzTmVnYXRpdmUgPSBfcmVmLmlzTmVnYXRpdmUsXG4gICAgICB1bmFyeU1pbnVzID0gX3JlZi51bmFyeU1pbnVzLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4LFxuICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXIsXG4gICAgICBGcmFjdGlvbiA9IF9yZWYuRnJhY3Rpb247XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgY3ViaWMgcm9vdCBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguY2JydCh4KVxuICAgKiAgICBtYXRoLmNicnQoeCwgYWxsUm9vdHMpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNicnQoMjcpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAzXG4gICAqICAgIG1hdGguY3ViZSgzKSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDI3XG4gICAqICAgIG1hdGguY2JydCgtNjQpICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIC00XG4gICAqICAgIG1hdGguY2JydChtYXRoLnVuaXQoJzI3IG1eMycpKSAvLyByZXR1cm5zIFVuaXQgMyBtXG4gICAqICAgIG1hdGguY2JydChbMjcsIDY0LCAxMjVdKSAgICAgICAvLyByZXR1cm5zIFszLCA0LCA1XVxuICAgKlxuICAgKiAgICBjb25zdCB4ID0gbWF0aC5jb21wbGV4KCc4aScpXG4gICAqICAgIG1hdGguY2JydCh4KSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggMS43MzIwNTA4MDc1Njg5ICsgaVxuICAgKiAgICBtYXRoLmNicnQoeCwgdHJ1ZSkgICAgICAgICAgICAgLy8gcmV0dXJucyBNYXRyaXggW1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIDEuNzMyMDUwODA3NTY4OSArIGlcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIC0xLjczMjA1MDgwNzU2ODkgKyBpXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAtMmlcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzcXVhcmUsIHNxcnQsIGN1YmVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4XG4gICAqICAgICAgICAgICAgVmFsdWUgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgY3ViaWMgcm9vdC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbYWxsUm9vdHNdICBPcHRpb25hbCwgZmFsc2UgYnkgZGVmYXVsdC4gT25seSBhcHBsaWNhYmxlXG4gICAqICAgICAgICAgICAgd2hlbiBgeGAgaXMgYSBudW1iZXIgb3IgY29tcGxleCBudW1iZXIuIElmIHRydWUsIGFsbCBjb21wbGV4XG4gICAqICAgICAgICAgICAgcm9vdHMgYXJlIHJldHVybmVkLCBpZiBmYWxzZSAoZGVmYXVsdCkgdGhlIHByaW5jaXBhbCByb290IGlzXG4gICAqICAgICAgICAgICAgcmV0dXJuZWQuXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9XG4gICAqICAgICAgICAgICAgUmV0dXJucyB0aGUgY3ViaWMgcm9vdCBvZiBgeGBcbiAgICovXG4gIHZhciBjYnJ0ID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5jYnJ0TnVtYmVyLFxuICAgIC8vIG5vdGU6IHNpZ25hdHVyZSAnbnVtYmVyLCBib29sZWFuJyBpcyBhbHNvIHN1cHBvcnRlZCxcbiAgICAvLyAgICAgICBjcmVhdGVkIGJ5IHR5cGVkIGFzIGl0IGtub3dzIGhvdyB0byBjb252ZXJ0IG51bWJlciB0byBDb21wbGV4XG4gICAgQ29tcGxleDogX2NicnRDb21wbGV4LFxuICAgICdDb21wbGV4LCBib29sZWFuJzogX2NicnRDb21wbGV4LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmNicnQoKTtcbiAgICB9LFxuICAgIFVuaXQ6IF9jYnJ0VW5pdCxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIGNicnQoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGNicnQsIHRydWUpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGN1YmljIHJvb3QgZm9yIGEgY29tcGxleCBudW1iZXJcbiAgICogQHBhcmFtIHtDb21wbGV4fSB4XG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FsbFJvb3RzXSAgIElmIHRydWUsIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiBhbiBhcnJheVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIGFsbCB0aHJlZSByb290cy4gSWYgZmFsc2Ugb3IgdW5kZWZpbmVkLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJpbmNpcGFsIHJvb3QgaXMgcmV0dXJuZWQuXG4gICAqIEByZXR1cm5zIHtDb21wbGV4IHwgQXJyYXkuPENvbXBsZXg+IHwgTWF0cml4LjxDb21wbGV4Pn0gUmV0dXJucyB0aGUgY3ViaWMgcm9vdChzKSBvZiB4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9jYnJ0Q29tcGxleCh4LCBhbGxSb290cykge1xuICAgIC8vIGh0dHBzOi8vd3d3Lndpa2l3YW5kLmNvbS9lbi9DdWJlX3Jvb3QjL0NvbXBsZXhfbnVtYmVyc1xuICAgIHZhciBhcmczID0geC5hcmcoKSAvIDM7XG4gICAgdmFyIGFicyA9IHguYWJzKCk7IC8vIHByaW5jaXBhbCByb290OlxuXG4gICAgdmFyIHByaW5jaXBhbCA9IG5ldyBDb21wbGV4KCgwLCBfbnVtYmVyLmNicnROdW1iZXIpKGFicyksIDApLm11bChuZXcgQ29tcGxleCgwLCBhcmczKS5leHAoKSk7XG5cbiAgICBpZiAoYWxsUm9vdHMpIHtcbiAgICAgIHZhciBhbGwgPSBbcHJpbmNpcGFsLCBuZXcgQ29tcGxleCgoMCwgX251bWJlci5jYnJ0TnVtYmVyKShhYnMpLCAwKS5tdWwobmV3IENvbXBsZXgoMCwgYXJnMyArIE1hdGguUEkgKiAyIC8gMykuZXhwKCkpLCBuZXcgQ29tcGxleCgoMCwgX251bWJlci5jYnJ0TnVtYmVyKShhYnMpLCAwKS5tdWwobmV3IENvbXBsZXgoMCwgYXJnMyAtIE1hdGguUEkgKiAyIC8gMykuZXhwKCkpXTtcbiAgICAgIHJldHVybiBjb25maWcubWF0cml4ID09PSAnQXJyYXknID8gYWxsIDogbWF0cml4KGFsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwcmluY2lwYWw7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGN1YmljIHJvb3QgZm9yIGEgVW5pdFxuICAgKiBAcGFyYW0ge1VuaXR9IHhcbiAgICogQHJldHVybiB7VW5pdH0gUmV0dXJucyB0aGUgY3ViaWMgcm9vdCBvZiB4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2NicnRVbml0KHgpIHtcbiAgICBpZiAoeC52YWx1ZSAmJiAoMCwgX2lzLmlzQ29tcGxleCkoeC52YWx1ZSkpIHtcbiAgICAgIHZhciByZXN1bHQgPSB4LmNsb25lKCk7XG4gICAgICByZXN1bHQudmFsdWUgPSAxLjA7XG4gICAgICByZXN1bHQgPSByZXN1bHQucG93KDEuMCAvIDMpOyAvLyBDb21wdXRlIHRoZSB1bml0c1xuXG4gICAgICByZXN1bHQudmFsdWUgPSBfY2JydENvbXBsZXgoeC52YWx1ZSk7IC8vIENvbXB1dGUgdGhlIHZhbHVlXG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBuZWdhdGUgPSBpc05lZ2F0aXZlKHgudmFsdWUpO1xuXG4gICAgICBpZiAobmVnYXRlKSB7XG4gICAgICAgIHgudmFsdWUgPSB1bmFyeU1pbnVzKHgudmFsdWUpO1xuICAgICAgfSAvLyBUT0RPOiBjcmVhdGUgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIHRoaXNcblxuXG4gICAgICB2YXIgdGhpcmQ7XG5cbiAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKSh4LnZhbHVlKSkge1xuICAgICAgICB0aGlyZCA9IG5ldyBCaWdOdW1iZXIoMSkuZGl2KDMpO1xuICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzRnJhY3Rpb24pKHgudmFsdWUpKSB7XG4gICAgICAgIHRoaXJkID0gbmV3IEZyYWN0aW9uKDEsIDMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcmQgPSAxIC8gMztcbiAgICAgIH1cblxuICAgICAgdmFyIF9yZXN1bHQgPSB4LnBvdyh0aGlyZCk7XG5cbiAgICAgIGlmIChuZWdhdGUpIHtcbiAgICAgICAgX3Jlc3VsdC52YWx1ZSA9IHVuYXJ5TWludXMoX3Jlc3VsdC52YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjYnJ0O1xufSk7XG5leHBvcnRzLmNyZWF0ZUNicnQgPSBjcmVhdGVDYnJ0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDZWlsID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9uZWFybHlFcXVhbCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9iaWdudW1iZXIvbmVhcmx5RXF1YWxcIik7XG5cbnZhciBfbnVtYmVyMiA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2NlaWwnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ3JvdW5kJ107XG52YXIgY3JlYXRlQ2VpbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIHJvdW5kID0gX3JlZi5yb3VuZDtcblxuICAvKipcbiAgICogUm91bmQgYSB2YWx1ZSB0b3dhcmRzIHBsdXMgaW5maW5pdHlcbiAgICogSWYgYHhgIGlzIGNvbXBsZXgsIGJvdGggcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQgYXJlIHJvdW5kZWQgdG93YXJkcyBwbHVzIGluZmluaXR5LlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguY2VpbCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jZWlsKDMuMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA0XG4gICAqICAgIG1hdGguY2VpbCgzLjgpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNFxuICAgKiAgICBtYXRoLmNlaWwoLTQuMikgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC00XG4gICAqICAgIG1hdGguY2VpbCgtNC43KSAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTRcbiAgICpcbiAgICogICAgY29uc3QgYyA9IG1hdGguY29tcGxleCgzLjIsIC0yLjcpXG4gICAqICAgIG1hdGguY2VpbChjKSAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDQgLSAyaVxuICAgKlxuICAgKiAgICBtYXRoLmNlaWwoWzMuMiwgMy44LCAtNC43XSkgIC8vIHJldHVybnMgQXJyYXkgWzQsIDQsIC00XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZmxvb3IsIGZpeCwgcm91bmRcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggIE51bWJlciB0byBiZSByb3VuZGVkXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBSb3VuZGVkIHZhbHVlXG4gICAqL1xuICB2YXIgY2VpbCA9IHR5cGVkKCdjZWlsJywge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICgoMCwgX251bWJlci5uZWFybHlFcXVhbCkoeCwgcm91bmQoeCksIGNvbmZpZy5lcHNpbG9uKSkge1xuICAgICAgICByZXR1cm4gcm91bmQoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gKDAsIF9udW1iZXIyLmNlaWxOdW1iZXIpKHgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5jZWlsKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICBpZiAoKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgcm91bmQoeCksIGNvbmZpZy5lcHNpbG9uKSkge1xuICAgICAgICByZXR1cm4gcm91bmQoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4geC5jZWlsKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHguY2VpbCgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBjZWlsKDApID0gMFxuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBjZWlsLCB0cnVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY2VpbDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDZWlsID0gY3JlYXRlQ2VpbDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ3ViZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2N1YmUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVDdWJlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgY3ViZSBvZiBhIHZhbHVlLCBgeCAqIHggKiB4YC5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmN1YmUoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguY3ViZSgyKSAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDhcbiAgICogICAgbWF0aC5wb3coMiwgMykgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgOFxuICAgKiAgICBtYXRoLmN1YmUoNCkgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA2NFxuICAgKiAgICA0ICogNCAqIDQgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA2NFxuICAgKlxuICAgKiAgICBtYXRoLmN1YmUoWzEsIDIsIDMsIDRdKSAvLyByZXR1cm5zIEFycmF5IFsxLCA4LCAyNywgNjRdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBtdWx0aXBseSwgc3F1YXJlLCBwb3csIGNicnRcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXggfCBVbml0fSB4ICBOdW1iZXIgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgY3ViZVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeCB8IFVuaXR9IEN1YmUgb2YgeFxuICAgKi9cbiAgdmFyIGN1YmUgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmN1YmVOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5tdWwoeCkubXVsKHgpOyAvLyBJcyBmYXN0ZXIgdGhhbiBwb3coeCwgMylcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LnRpbWVzKHgpLnRpbWVzKHgpO1xuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4LnBvdygzKTsgLy8gSXMgZmFzdGVyIHRoYW4gbXVsKCltdWwoKW11bCgpXG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIGN1YmUoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGN1YmUsIHRydWUpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4geC5wb3coMyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGN1YmU7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ3ViZSA9IGNyZWF0ZUN1YmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZURpdmlkZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTFcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIG5hbWUgPSAnZGl2aWRlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdtdWx0aXBseScsICdlcXVhbFNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAnaW52J107XG52YXIgY3JlYXRlRGl2aWRlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBpbnYgPSBfcmVmLmludjtcbiAgdmFyIGFsZ29yaXRobTExID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMTEpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBEaXZpZGUgdHdvIHZhbHVlcywgYHggLyB5YC5cbiAgICogVG8gZGl2aWRlIG1hdHJpY2VzLCBgeGAgaXMgbXVsdGlwbGllZCB3aXRoIHRoZSBpbnZlcnNlIG9mIGB5YDogYHggKiBpbnYoeSlgLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZGl2aWRlKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmRpdmlkZSgyLCAzKSAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDAuNjY2NjY2NjY2NjY2NjY2NlxuICAgKlxuICAgKiAgICBjb25zdCBhID0gbWF0aC5jb21wbGV4KDUsIDE0KVxuICAgKiAgICBjb25zdCBiID0gbWF0aC5jb21wbGV4KDQsIDEpXG4gICAqICAgIG1hdGguZGl2aWRlKGEsIGIpICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDIgKyAzaVxuICAgKlxuICAgKiAgICBjb25zdCBjID0gW1s3LCAtNl0sIFsxMywgLTRdXVxuICAgKiAgICBjb25zdCBkID0gW1sxLCAyXSwgWzQsIDNdXVxuICAgKiAgICBtYXRoLmRpdmlkZShjLCBkKSAgICAgICAgICAgIC8vIHJldHVybnMgQXJyYXkgW1stOSwgNF0sIFstMTEsIDZdXVxuICAgKlxuICAgKiAgICBjb25zdCBlID0gbWF0aC51bml0KCcxOCBrbScpXG4gICAqICAgIG1hdGguZGl2aWRlKGUsIDQuNSkgICAgICAgICAgLy8gcmV0dXJucyBVbml0IDQga21cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIG11bHRpcGx5XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgIE51bWVyYXRvclxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geSAgICAgICAgICBEZW5vbWluYXRvclxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICAgICAgICAgICAgIFF1b3RpZW50LCBgeCAvIHlgXG4gICAqL1xuXG4gIHJldHVybiB0eXBlZCgnZGl2aWRlJywgKDAsIF9vYmplY3QuZXh0ZW5kKSh7XG4gICAgLy8gd2UgZXh0ZW5kIHRoZSBzaWduYXR1cmVzIG9mIGRpdmlkZVNjYWxhciB3aXRoIHNpZ25hdHVyZXMgZGVhbGluZyB3aXRoIG1hdHJpY2VzXG4gICAgJ0FycmF5IHwgTWF0cml4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4QXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gVE9ETzogaW1wbGVtZW50IG1hdHJpeCByaWdodCBkaXZpc2lvbiB1c2luZyBwc2V1ZG8gaW52ZXJzZVxuICAgICAgLy8gaHR0cHM6Ly93d3cubWF0aHdvcmtzLm5sL2hlbHAvbWF0bGFiL3JlZi9tcmRpdmlkZS5odG1sXG4gICAgICAvLyBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL29jdGF2ZS9kb2MvaW50ZXJwcmV0ZXIvQXJpdGhtZXRpYy1PcHMuaHRtbFxuICAgICAgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTIyNjM5MzIvaG93LWRvZXMtZ251LW9jdGF2ZS1tYXRyaXgtZGl2aXNpb24td29yay1nZXR0aW5nLXVuZXhwZWN0ZWQtYmVoYXZpb3VyXG4gICAgICByZXR1cm4gbXVsdGlwbHkoeCwgaW52KHkpKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGRpdmlkZVNjYWxhciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCBkaXZpZGVTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgZGl2aWRlU2NhbGFyLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBhbnlBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gbXVsdGlwbHkoeCwgaW52KHkpKTtcbiAgICB9XG4gIH0sIGRpdmlkZVNjYWxhci5zaWduYXR1cmVzKSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlRGl2aWRlID0gY3JlYXRlRGl2aWRlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEaXZpZGVTY2FsYXIgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgbmFtZSA9ICdkaXZpZGVTY2FsYXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbnVtZXJpYyddO1xudmFyIGNyZWF0ZURpdmlkZVNjYWxhciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBudW1lcmljID0gX3JlZi5udW1lcmljO1xuXG4gIC8qKlxuICAgKiBEaXZpZGUgdHdvIHNjYWxhciB2YWx1ZXMsIGB4IC8geWAuXG4gICAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgZm9yIGludGVybmFsIHVzZTogaXQgaXMgdXNlZCBieSB0aGUgcHVibGljIGZ1bmN0aW9uc1xuICAgKiBgZGl2aWRlYCBhbmQgYGludmAuXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgc3VwcG9ydCBjb2xsZWN0aW9ucyAoQXJyYXkgb3IgTWF0cml4KS5cbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdH0geCAgIE51bWVyYXRvclxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXh9IHkgICAgICAgICAgRGVub21pbmF0b3JcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdH0gICAgIFF1b3RpZW50LCBgeCAvIHlgXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB2YXIgZGl2aWRlU2NhbGFyID0gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geCAvIHk7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgQ29tcGxleCc6IGZ1bmN0aW9uIENvbXBsZXhDb21wbGV4KHgsIHkpIHtcbiAgICAgIHJldHVybiB4LmRpdih5KTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC5kaXYoeSk7XG4gICAgfSxcbiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7XG4gICAgICByZXR1cm4geC5kaXYoeSk7XG4gICAgfSxcbiAgICAnVW5pdCwgbnVtYmVyIHwgRnJhY3Rpb24gfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBVbml0TnVtYmVyRnJhY3Rpb25CaWdOdW1iZXIoeCwgeSkge1xuICAgICAgdmFyIHJlcyA9IHguY2xvbmUoKTsgLy8gVE9ETzogbW92ZSB0aGUgZGl2aWRlIGZ1bmN0aW9uIHRvIFVuaXQuanMsIGl0IHVzZXMgaW50ZXJuYWxzIG9mIFVuaXRcblxuICAgICAgdmFyIG9uZSA9IG51bWVyaWMoMSwgKDAsIF9pcy50eXBlT2YpKHkpKTtcbiAgICAgIHJlcy52YWx1ZSA9IGRpdmlkZVNjYWxhcihyZXMudmFsdWUgPT09IG51bGwgPyByZXMuX25vcm1hbGl6ZShvbmUpIDogcmVzLnZhbHVlLCB5KTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgRnJhY3Rpb24gfCBCaWdOdW1iZXIsIFVuaXQnOiBmdW5jdGlvbiBudW1iZXJGcmFjdGlvbkJpZ051bWJlclVuaXQoeCwgeSkge1xuICAgICAgdmFyIHJlcyA9IHkuY2xvbmUoKTtcbiAgICAgIHJlcyA9IHJlcy5wb3coLTEpOyAvLyBUT0RPOiBtb3ZlIHRoZSBkaXZpZGUgZnVuY3Rpb24gdG8gVW5pdC5qcywgaXQgdXNlcyBpbnRlcm5hbHMgb2YgVW5pdFxuXG4gICAgICB2YXIgb25lID0gbnVtZXJpYygxLCAoMCwgX2lzLnR5cGVPZikoeCkpO1xuICAgICAgcmVzLnZhbHVlID0gZGl2aWRlU2NhbGFyKHgsIHkudmFsdWUgPT09IG51bGwgPyB5Ll9ub3JtYWxpemUob25lKSA6IHkudmFsdWUpO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgcmV0dXJuIHguZGl2aWRlKHkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBkaXZpZGVTY2FsYXI7XG59KTtcbmV4cG9ydHMuY3JlYXRlRGl2aWRlU2NhbGFyID0gY3JlYXRlRGl2aWRlU2NhbGFyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEb3REaXZpZGUgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMlwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDdcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMVwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyXCIpO1xuXG52YXIgX2FsZ29yaXRobTYgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIG5hbWUgPSAnZG90RGl2aWRlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVEb3REaXZpZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAyID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNyA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0wNykoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNi5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG03LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogRGl2aWRlIHR3byBtYXRyaWNlcyBlbGVtZW50IHdpc2UuIFRoZSBmdW5jdGlvbiBhY2NlcHRzIGJvdGggbWF0cmljZXMgYW5kXG4gICAqIHNjYWxhciB2YWx1ZXMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5kb3REaXZpZGUoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZG90RGl2aWRlKDIsIDQpICAgLy8gcmV0dXJucyAwLjVcbiAgICpcbiAgICogICAgYSA9IFtbOSwgNV0sIFs2LCAxXV1cbiAgICogICAgYiA9IFtbMywgMl0sIFs1LCAyXV1cbiAgICpcbiAgICogICAgbWF0aC5kb3REaXZpZGUoYSwgYikgICAvLyByZXR1cm5zIFtbMywgMi41XSwgWzEuMiwgMC41XV1cbiAgICogICAgbWF0aC5kaXZpZGUoYSwgYikgICAgICAvLyByZXR1cm5zIFtbMS43NSwgMC43NV0sIFstMS43NSwgMi4yNV1dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBkaXZpZGUsIG11bHRpcGx5LCBkb3RNdWx0aXBseVxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggTnVtZXJhdG9yXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geSBEZW5vbWluYXRvclxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICAgICAgICAgICBRdW90aWVudCwgYHggLi8geWBcbiAgICovXG5cbiAgdmFyIGRvdERpdmlkZSA9IHR5cGVkKG5hbWUsIHtcbiAgICAnYW55LCBhbnknOiBkaXZpZGVTY2FsYXIsXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNyh4LCB5LCBkaXZpZGVTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIGRpdmlkZVNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBkaXZpZGVTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBkaXZpZGVTY2FsYXIpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGRvdERpdmlkZShtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZG90RGl2aWRlKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBkb3REaXZpZGUoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgZGl2aWRlU2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBkaXZpZGVTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgZGl2aWRlU2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGRpdmlkZVNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGRpdmlkZVNjYWxhciwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgZGl2aWRlU2NhbGFyLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRvdERpdmlkZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVEb3REaXZpZGUgPSBjcmVhdGVEb3REaXZpZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZURvdE11bHRpcGx5ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDJcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wOVwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIG5hbWUgPSAnZG90TXVsdGlwbHknO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ211bHRpcGx5U2NhbGFyJ107XG52YXIgY3JlYXRlRG90TXVsdGlwbHkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXI7XG4gIHZhciBhbGdvcml0aG0wMiA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA5ID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTA5KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTExID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTExKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBNdWx0aXBseSB0d28gbWF0cmljZXMgZWxlbWVudCB3aXNlLiBUaGUgZnVuY3Rpb24gYWNjZXB0cyBib3RoIG1hdHJpY2VzIGFuZFxuICAgKiBzY2FsYXIgdmFsdWVzLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZG90TXVsdGlwbHkoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZG90TXVsdGlwbHkoMiwgNCkgLy8gcmV0dXJucyA4XG4gICAqXG4gICAqICAgIGEgPSBbWzksIDVdLCBbNiwgMV1dXG4gICAqICAgIGIgPSBbWzMsIDJdLCBbNSwgMl1dXG4gICAqXG4gICAqICAgIG1hdGguZG90TXVsdGlwbHkoYSwgYikgLy8gcmV0dXJucyBbWzI3LCAxMF0sIFszMCwgMl1dXG4gICAqICAgIG1hdGgubXVsdGlwbHkoYSwgYikgICAgLy8gcmV0dXJucyBbWzUyLCAyOF0sIFsyMywgMTRdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbXVsdGlwbHksIGRpdmlkZSwgZG90RGl2aWRlXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCBMZWZ0IGhhbmQgdmFsdWVcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB5IFJpZ2h0IGhhbmQgdmFsdWVcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSAgICAgICAgICAgICAgICAgICAgTXVsdGlwbGljYXRpb24gb2YgYHhgIGFuZCBgeWBcbiAgICovXG5cbiAgdmFyIGRvdE11bHRpcGx5ID0gdHlwZWQobmFtZSwge1xuICAgICdhbnksIGFueSc6IG11bHRpcGx5U2NhbGFyLFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDkoeCwgeSwgbXVsdGlwbHlTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHgsIHksIG11bHRpcGx5U2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgbXVsdGlwbHlTY2FsYXIpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGRvdE11bHRpcGx5KG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBkb3RNdWx0aXBseShtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZG90TXVsdGlwbHkoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgbXVsdGlwbHlTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIG11bHRpcGx5U2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgbXVsdGlwbHlTY2FsYXIsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRvdE11bHRpcGx5O1xufSk7XG5leHBvcnRzLmNyZWF0ZURvdE11bHRpcGx5ID0gY3JlYXRlRG90TXVsdGlwbHk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZURvdFBvdyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDdcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMVwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyXCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIG5hbWUgPSAnZG90UG93JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2VxdWFsU2NhbGFyJywgJ21hdHJpeCcsICdwb3cnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVEb3RQb3cgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBwb3cgPSBfcmVmLnBvdyxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNykoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG02LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgcG93ZXIgb2YgeCB0byB5IGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmRvdFBvdyh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5kb3RQb3coMiwgMykgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA4XG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBbWzEsIDJdLCBbNCwgM11dXG4gICAqICAgIG1hdGguZG90UG93KGEsIDIpICAgICAgICAgICAgLy8gcmV0dXJucyBBcnJheSBbWzEsIDRdLCBbMTYsIDldXVxuICAgKiAgICBtYXRoLnBvdyhhLCAyKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgQXJyYXkgW1s5LCA4XSwgWzE2LCAxN11dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBwb3csIHNxcnQsIG11bHRpcGx5XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIFRoZSBiYXNlXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHkgIFRoZSBleHBvbmVudFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSAgICAgICAgICAgICAgICAgICAgIFRoZSB2YWx1ZSBvZiBgeGAgdG8gdGhlIHBvd2VyIGB5YFxuICAgKi9cblxuICB2YXIgZG90UG93ID0gdHlwZWQobmFtZSwge1xuICAgICdhbnksIGFueSc6IHBvdyxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA3KHgsIHksIHBvdywgZmFsc2UpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgcG93LCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIHBvdywgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIHBvdyk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZG90UG93KG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBkb3RQb3cobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGRvdFBvdyh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCBkb3RQb3csIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGRvdFBvdywgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBkb3RQb3csIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgZG90UG93LCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgZG90UG93LCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBkb3RQb3csIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZG90UG93O1xufSk7XG5leHBvcnRzLmNyZWF0ZURvdFBvdyA9IGNyZWF0ZURvdFBvdzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRXhwID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnZXhwJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlRXhwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBleHBvbmVudCBvZiBhIHZhbHVlLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZXhwKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmV4cCgyKSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDcuMzg5MDU2MDk4OTMwNjQ5NVxuICAgKiAgICBtYXRoLnBvdyhtYXRoLmUsIDIpICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDcuMzg5MDU2MDk4OTMwNjQ5NVxuICAgKiAgICBtYXRoLmxvZyhtYXRoLmV4cCgyKSkgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDJcbiAgICpcbiAgICogICAgbWF0aC5leHAoWzEsIDIsIDNdKVxuICAgKiAgICAvLyByZXR1cm5zIEFycmF5IFtcbiAgICogICAgLy8gICAyLjcxODI4MTgyODQ1OTA0NSxcbiAgICogICAgLy8gICA3LjM4OTA1NjA5ODkzMDY0OTUsXG4gICAqICAgIC8vICAgMjAuMDg1NTM2OTIzMTg3NjY4XG4gICAqICAgIC8vIF1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGV4cG0xLCBsb2csIHBvd1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgQSBudW1iZXIgb3IgbWF0cml4IHRvIGV4cG9uZW50aWF0ZVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEV4cG9uZW50IG9mIGB4YFxuICAgKi9cbiAgdmFyIGV4cCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuZXhwTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguZXhwKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5leHAoKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIFRPRE86IGV4cChzcGFyc2UpIHNob3VsZCByZXR1cm4gYSBkZW5zZSBtYXRyaXggc2luY2UgZXhwKDApPT0xXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGV4cCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGV4cDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFeHAgPSBjcmVhdGVFeHA7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUV4cG0xID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnZXhwbTEnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQ29tcGxleCddO1xudmFyIGNyZWF0ZUV4cG0xID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIF9Db21wbGV4ID0gX3JlZi5Db21wbGV4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHZhbHVlIG9mIHN1YnRyYWN0aW5nIDEgZnJvbSB0aGUgZXhwb25lbnRpYWwgdmFsdWUuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5leHBtMSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5leHBtMSgyKSAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA2LjM4OTA1NjA5ODkzMDY1XG4gICAqICAgIG1hdGgucG93KG1hdGguZSwgMikgLSAxICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNi4zODkwNTYwOTg5MzA2NDk1XG4gICAqICAgIG1hdGgubG9nKG1hdGguZXhwbTEoMikgKyAxKSAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMlxuICAgKlxuICAgKiAgICBtYXRoLmV4cG0xKFsxLCAyLCAzXSlcbiAgICogICAgLy8gcmV0dXJucyBBcnJheSBbXG4gICAqICAgIC8vICAgMS43MTgyODE4Mjg0NTkwNDUsXG4gICAqICAgIC8vICAgNi4zODkwNTYwOTg5MzA2NDk1LFxuICAgKiAgICAvLyAgIDE5LjA4NTUzNjkyMzE4NzY2OFxuICAgKiAgICAvLyBdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBleHAsIGxvZywgcG93XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBBIG51bWJlciBvciBtYXRyaXggdG8gYXBwbHkgZXhwbTFcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBFeHBvbmVudCBvZiBgeGBcbiAgICovXG4gIHZhciBleHBtMSA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuZXhwbTFOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICB2YXIgciA9IE1hdGguZXhwKHgucmUpO1xuICAgICAgcmV0dXJuIG5ldyBfQ29tcGxleChyICogTWF0aC5jb3MoeC5pbSkgLSAxLCByICogTWF0aC5zaW4oeC5pbSkpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguZXhwKCkubWludXMoMSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGV4cG0xKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZXhwbTE7XG59KTtcbmV4cG9ydHMuY3JlYXRlRXhwbTEgPSBjcmVhdGVFeHBtMTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRml4ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ2ZpeCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdDb21wbGV4JywgJ2NlaWwnLCAnZmxvb3InXTtcbnZhciBjcmVhdGVGaXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgX0NvbXBsZXggPSBfcmVmLkNvbXBsZXgsXG4gICAgICBjZWlsID0gX3JlZi5jZWlsLFxuICAgICAgZmxvb3IgPSBfcmVmLmZsb29yO1xuXG4gIC8qKlxuICAgKiBSb3VuZCBhIHZhbHVlIHRvd2FyZHMgemVyby5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmZpeCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5maXgoMy4yKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzXG4gICAqICAgIG1hdGguZml4KDMuOCkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgM1xuICAgKiAgICBtYXRoLmZpeCgtNC4yKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC00XG4gICAqICAgIG1hdGguZml4KC00LjcpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTRcbiAgICpcbiAgICogICAgY29uc3QgYyA9IG1hdGguY29tcGxleCgzLjIsIC0yLjcpXG4gICAqICAgIG1hdGguZml4KGMpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDMgLSAyaVxuICAgKlxuICAgKiAgICBtYXRoLmZpeChbMy4yLCAzLjgsIC00LjddKSAgIC8vIHJldHVybnMgQXJyYXkgWzMsIDMsIC00XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY2VpbCwgZmxvb3IsIHJvdW5kXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggTnVtYmVyIHRvIGJlIHJvdW5kZWRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICAgUm91bmRlZCB2YWx1ZVxuICAgKi9cbiAgdmFyIGZpeCA9IHR5cGVkKCdmaXgnLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHggPiAwID8gZmxvb3IoeCkgOiBjZWlsKHgpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4gbmV3IF9Db21wbGV4KHgucmUgPiAwID8gTWF0aC5mbG9vcih4LnJlKSA6IE1hdGguY2VpbCh4LnJlKSwgeC5pbSA+IDAgPyBNYXRoLmZsb29yKHguaW0pIDogTWF0aC5jZWlsKHguaW0pKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmlzTmVnYXRpdmUoKSA/IGNlaWwoeCkgOiBmbG9vcih4KTtcbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4geC5zIDwgMCA/IHguY2VpbCgpIDogeC5mbG9vcigpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBmaXgoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGZpeCwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZpeDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVGaXggPSBjcmVhdGVGaXg7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZsb29yID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9uZWFybHlFcXVhbCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9iaWdudW1iZXIvbmVhcmx5RXF1YWxcIik7XG5cbnZhciBuYW1lID0gJ2Zsb29yJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdyb3VuZCddO1xudmFyIGNyZWF0ZUZsb29yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgcm91bmQgPSBfcmVmLnJvdW5kO1xuXG4gIC8qKlxuICAgKiBSb3VuZCBhIHZhbHVlIHRvd2FyZHMgbWludXMgaW5maW5pdHkuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5mbG9vcih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5mbG9vcigzLjIpICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzXG4gICAqICAgIG1hdGguZmxvb3IoMy44KSAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgM1xuICAgKiAgICBtYXRoLmZsb29yKC00LjIpICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC01XG4gICAqICAgIG1hdGguZmxvb3IoLTQuNykgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTVcbiAgICpcbiAgICogICAgY29uc3QgYyA9IG1hdGguY29tcGxleCgzLjIsIC0yLjcpXG4gICAqICAgIG1hdGguZmxvb3IoYykgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDMgLSAzaVxuICAgKlxuICAgKiAgICBtYXRoLmZsb29yKFszLjIsIDMuOCwgLTQuN10pIC8vIHJldHVybnMgQXJyYXkgWzMsIDMsIC01XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY2VpbCwgZml4LCByb3VuZFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgTnVtYmVyIHRvIGJlIHJvdW5kZWRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFJvdW5kZWQgdmFsdWVcbiAgICovXG4gIHZhciBmbG9vciA9IHR5cGVkKCdmbG9vcicsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHJvdW5kKHgpLCBjb25maWcuZXBzaWxvbikpIHtcbiAgICAgICAgcmV0dXJuIHJvdW5kKHgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoeCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmZsb29yKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICBpZiAoKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgcm91bmQoeCksIGNvbmZpZy5lcHNpbG9uKSkge1xuICAgICAgICByZXR1cm4gcm91bmQoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4geC5mbG9vcigpO1xuICAgICAgfVxuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4LmZsb29yKCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIGZsb29yKDApID0gMFxuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBmbG9vciwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZsb29yO1xufSk7XG5leHBvcnRzLmNyZWF0ZUZsb29yID0gY3JlYXRlRmxvb3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUdjZCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAxXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDRcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMFwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnZ2NkJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICdCaWdOdW1iZXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVHY2QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAxID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNCA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMCA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciBmb3IgdHdvIG9yIG1vcmUgdmFsdWVzIG9yIGFycmF5cy5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmdjZChhLCBiKVxuICAgKiAgICBtYXRoLmdjZChhLCBiLCBjLCAuLi4pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmdjZCg4LCAxMikgICAgICAgICAgICAgIC8vIHJldHVybnMgNFxuICAgKiAgICBtYXRoLmdjZCgtNCwgNikgICAgICAgICAgICAgIC8vIHJldHVybnMgMlxuICAgKiAgICBtYXRoLmdjZCgyNSwgMTUsIC0xMCkgICAgICAgIC8vIHJldHVybnMgNVxuICAgKlxuICAgKiAgICBtYXRoLmdjZChbOCwgLTRdLCBbMTIsIDZdKSAgIC8vIHJldHVybnMgWzQsIDJdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBsY20sIHhnY2RcbiAgICpcbiAgICogQHBhcmFtIHsuLi4gbnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBBcnJheSB8IE1hdHJpeH0gYXJncyAgVHdvIG9yIG1vcmUgaW50ZWdlciBudW1iZXJzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGdyZWF0ZXN0IGNvbW1vbiBkaXZpc29yXG4gICAqL1xuXG4gIHZhciBnY2QgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5nY2ROdW1iZXIsXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogX2djZEJpZ051bWJlcixcbiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7XG4gICAgICByZXR1cm4geC5nY2QoeSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA0KHgsIHksIGdjZCk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMSh5LCB4LCBnY2QsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeCwgeSwgZ2NkLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgZ2NkKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBnY2QobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGdjZChtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZ2NkKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEwKHgsIHksIGdjZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBEZW5zZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgZ2NkLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEwKHksIHgsIGdjZCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBnY2QsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheU51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBnY2QsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBBcnJheSc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIGdjZCwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgLy8gVE9ETzogbmVlZCBhIHNtYXJ0ZXIgbm90YXRpb24gaGVyZVxuICAgICdBcnJheSB8IE1hdHJpeCB8IG51bWJlciB8IEJpZ051bWJlciwgQXJyYXkgfCBNYXRyaXggfCBudW1iZXIgfCBCaWdOdW1iZXIsIC4uLkFycmF5IHwgTWF0cml4IHwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXJBcnJheU1hdHJpeE51bWJlckJpZ051bWJlckFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyKGEsIGIsIGFyZ3MpIHtcbiAgICAgIHZhciByZXMgPSBnY2QoYSwgYik7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXMgPSBnY2QocmVzLCBhcmdzW2ldKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZ2NkO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIGdjZCBmb3IgQmlnTnVtYmVyc1xuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gYVxuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gYlxuICAgKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIGdyZWF0ZXN0IGNvbW1vbiBkZW5vbWluYXRvciBvZiBhIGFuZCBiXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9nY2RCaWdOdW1iZXIoYSwgYikge1xuICAgIGlmICghYS5pc0ludCgpIHx8ICFiLmlzSW50KCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVycyBpbiBmdW5jdGlvbiBnY2QgbXVzdCBiZSBpbnRlZ2VyIG51bWJlcnMnKTtcbiAgICB9IC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V1Y2xpZGVhbl9hbGdvcml0aG1cblxuXG4gICAgdmFyIHplcm8gPSBuZXcgQmlnTnVtYmVyKDApO1xuXG4gICAgd2hpbGUgKCFiLmlzWmVybygpKSB7XG4gICAgICB2YXIgciA9IGEubW9kKGIpO1xuICAgICAgYSA9IGI7XG4gICAgICBiID0gcjtcbiAgICB9XG5cbiAgICByZXR1cm4gYS5sdCh6ZXJvKSA/IGEubmVnKCkgOiBhO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlR2NkID0gY3JlYXRlR2NkOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVIeXBvdCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBuYW1lID0gJ2h5cG90JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FicycsICdhZGRTY2FsYXInLCAnZGl2aWRlU2NhbGFyJywgJ211bHRpcGx5U2NhbGFyJywgJ3NxcnQnLCAnc21hbGxlcicsICdpc1Bvc2l0aXZlJ107XG52YXIgY3JlYXRlSHlwb3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWJzID0gX3JlZi5hYnMsXG4gICAgICBhZGRTY2FsYXIgPSBfcmVmLmFkZFNjYWxhcixcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgc3FydCA9IF9yZWYuc3FydCxcbiAgICAgIHNtYWxsZXIgPSBfcmVmLnNtYWxsZXIsXG4gICAgICBpc1Bvc2l0aXZlID0gX3JlZi5pc1Bvc2l0aXZlO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cG90ZW51c2Egb2YgYSBsaXN0IHdpdGggdmFsdWVzLiBUaGUgaHlwb3RlbnVzYSBpcyBkZWZpbmVkIGFzOlxuICAgKlxuICAgKiAgICAgaHlwb3QoYSwgYiwgYywgLi4uKSA9IHNxcnQoYV4yICsgYl4yICsgY14yICsgLi4uKVxuICAgKlxuICAgKiBGb3IgbWF0cml4IGlucHV0LCB0aGUgaHlwb3RlbnVzYSBpcyBjYWxjdWxhdGVkIGZvciBhbGwgdmFsdWVzIGluIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguaHlwb3QoYSwgYiwgLi4uKVxuICAgKiAgICAgbWF0aC5oeXBvdChbYSwgYiwgYywgLi4uXSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLmh5cG90KDMsIDQpICAgICAgLy8gNVxuICAgKiAgICAgbWF0aC5oeXBvdCgzLCA0LCA1KSAgIC8vIDcuMDcxMDY3ODExODY1NDc1NVxuICAgKiAgICAgbWF0aC5oeXBvdChbMywgNCwgNV0pIC8vIDcuMDcxMDY3ODExODY1NDc1NVxuICAgKiAgICAgbWF0aC5oeXBvdCgtMikgICAgICAgIC8vIDJcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBhYnMsIG5vcm1cbiAgICpcbiAgICogQHBhcmFtIHsuLi4gbnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IGFyZ3MgICAgQSBsaXN0IHdpdGggbnVtZXJpYyB2YWx1ZXMgb3IgYW4gQXJyYXkgb3IgTWF0cml4LlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYXRyaXggYW5kIEFycmF5IGlucHV0IGlzIGZsYXR0ZW5lZCBhbmQgcmV0dXJucyBhXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbmdsZSBudW1iZXIgZm9yIHRoZSB3aG9sZSBtYXRyaXguXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlcn0gUmV0dXJucyB0aGUgaHlwb3RoZW51c2Egb2YgdGhlIGlucHV0IHZhbHVlcy5cbiAgICovXG4gIHZhciBoeXBvdCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnLi4uIG51bWJlciB8IEJpZ051bWJlcic6IF9oeXBvdCxcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoeCkge1xuICAgICAgcmV0dXJuIGh5cG90LmFwcGx5KGh5cG90LCAoMCwgX2FycmF5LmZsYXR0ZW4pKHgpKTtcbiAgICB9LFxuICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHgpIHtcbiAgICAgIHJldHVybiBoeXBvdC5hcHBseShoeXBvdCwgKDAsIF9hcnJheS5mbGF0dGVuKSh4LnRvQXJyYXkoKSkpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cG90ZW51c2EgZm9yIGFuIEFycmF5IHdpdGggdmFsdWVzXG4gICAqIEBwYXJhbSB7QXJyYXkuPG51bWJlciB8IEJpZ051bWJlcj59IGFyZ3NcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyfSBSZXR1cm5zIHRoZSByZXN1bHRcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX2h5cG90KGFyZ3MpIHtcbiAgICAvLyBjb2RlIGJhc2VkIG9uIGBoeXBvdGAgZnJvbSBlczYtc2hpbTpcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcGF1bG1pbGxyL2VzNi1zaGltL2Jsb2IvbWFzdGVyL2VzNi1zaGltLmpzI0wxNjE5LUwxNjMzXG4gICAgdmFyIHJlc3VsdCA9IDA7XG4gICAgdmFyIGxhcmdlc3QgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhYnMoYXJnc1tpXSk7XG5cbiAgICAgIGlmIChzbWFsbGVyKGxhcmdlc3QsIHZhbHVlKSkge1xuICAgICAgICByZXN1bHQgPSBtdWx0aXBseVNjYWxhcihyZXN1bHQsIG11bHRpcGx5U2NhbGFyKGRpdmlkZVNjYWxhcihsYXJnZXN0LCB2YWx1ZSksIGRpdmlkZVNjYWxhcihsYXJnZXN0LCB2YWx1ZSkpKTtcbiAgICAgICAgcmVzdWx0ID0gYWRkU2NhbGFyKHJlc3VsdCwgMSk7XG4gICAgICAgIGxhcmdlc3QgPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGFkZFNjYWxhcihyZXN1bHQsIGlzUG9zaXRpdmUodmFsdWUpID8gbXVsdGlwbHlTY2FsYXIoZGl2aWRlU2NhbGFyKHZhbHVlLCBsYXJnZXN0KSwgZGl2aWRlU2NhbGFyKHZhbHVlLCBsYXJnZXN0KSkgOiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG11bHRpcGx5U2NhbGFyKGxhcmdlc3QsIHNxcnQocmVzdWx0KSk7XG4gIH1cblxuICByZXR1cm4gaHlwb3Q7XG59KTtcbmV4cG9ydHMuY3JlYXRlSHlwb3QgPSBjcmVhdGVIeXBvdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTGNtID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDJcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNlwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdsY20nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJ107XG52YXIgY3JlYXRlTGNtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyO1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNiA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBsZWFzdCBjb21tb24gbXVsdGlwbGUgZm9yIHR3byBvciBtb3JlIHZhbHVlcyBvciBhcnJheXMuXG4gICAqXG4gICAqIGxjbSBpcyBkZWZpbmVkIGFzOlxuICAgKlxuICAgKiAgICAgbGNtKGEsIGIpID0gYWJzKGEgKiBiKSAvIGdjZChhLCBiKVxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubGNtKGEsIGIpXG4gICAqICAgIG1hdGgubGNtKGEsIGIsIGMsIC4uLilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgubGNtKDQsIDYpICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxMlxuICAgKiAgICBtYXRoLmxjbSg2LCAyMSkgICAgICAgICAgICAgIC8vIHJldHVybnMgNDJcbiAgICogICAgbWF0aC5sY20oNiwgMjEsIDUpICAgICAgICAgICAvLyByZXR1cm5zIDIxMFxuICAgKlxuICAgKiAgICBtYXRoLmxjbShbNCwgNl0sIFs2LCAyMV0pICAgIC8vIHJldHVybnMgWzEyLCA0Ml1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGdjZCwgeGdjZFxuICAgKlxuICAgKiBAcGFyYW0gey4uLiBudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gYXJncyAgVHdvIG9yIG1vcmUgaW50ZWdlciBudW1iZXJzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBsZWFzdCBjb21tb24gbXVsdGlwbGVcbiAgICovXG5cbiAgdmFyIGxjbSA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLmxjbU51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBfbGNtQmlnTnVtYmVyLFxuICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiB4LmxjbSh5KTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDYoeCwgeSwgbGNtKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIGxjbSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMih4LCB5LCBsY20sIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBsY20pO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxjbShtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbGNtKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBsY20oeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgbGNtLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIERlbnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBsY20sIGZhbHNlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeSwgeCwgbGNtLCB0cnVlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyRGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGxjbSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGxjbSwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIEFycmF5JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyQXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgbGNtLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAvLyBUT0RPOiBuZWVkIGEgc21hcnRlciBub3RhdGlvbiBoZXJlXG4gICAgJ0FycmF5IHwgTWF0cml4IHwgbnVtYmVyIHwgQmlnTnVtYmVyLCBBcnJheSB8IE1hdHJpeCB8IG51bWJlciB8IEJpZ051bWJlciwgLi4uQXJyYXkgfCBNYXRyaXggfCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlckJpZ051bWJlckFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXIoYSwgYiwgYXJncykge1xuICAgICAgdmFyIHJlcyA9IGxjbShhLCBiKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJlcyA9IGxjbShyZXMsIGFyZ3NbaV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBsY207XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgbGNtIGZvciB0d28gQmlnTnVtYmVyc1xuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gYVxuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gYlxuICAgKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIHRoZSBsZWFzdCBjb21tb24gbXVsdGlwbGUgb2YgYSBhbmQgYlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfbGNtQmlnTnVtYmVyKGEsIGIpIHtcbiAgICBpZiAoIWEuaXNJbnQoKSB8fCAhYi5pc0ludCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24gbGNtIG11c3QgYmUgaW50ZWdlciBudW1iZXJzJyk7XG4gICAgfVxuXG4gICAgaWYgKGEuaXNaZXJvKCkpIHtcbiAgICAgIHJldHVybiBhO1xuICAgIH1cblxuICAgIGlmIChiLmlzWmVybygpKSB7XG4gICAgICByZXR1cm4gYjtcbiAgICB9IC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V1Y2xpZGVhbl9hbGdvcml0aG1cbiAgICAvLyBldmFsdWF0ZSBsY20gaGVyZSBpbmxpbmUgdG8gcmVkdWNlIG92ZXJoZWFkXG5cblxuICAgIHZhciBwcm9kID0gYS50aW1lcyhiKTtcblxuICAgIHdoaWxlICghYi5pc1plcm8oKSkge1xuICAgICAgdmFyIHQgPSBiO1xuICAgICAgYiA9IGEubW9kKHQpO1xuICAgICAgYSA9IHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2QuZGl2KGEpLmFicygpO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlTGNtID0gY3JlYXRlTGNtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVMb2cgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdsb2cnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ3R5cGVkJywgJ2RpdmlkZVNjYWxhcicsICdDb21wbGV4J107XG52YXIgY3JlYXRlTG9nID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGxvZ2FyaXRobSBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubG9nKHgpXG4gICAqICAgIG1hdGgubG9nKHgsIGJhc2UpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmxvZygzLjUpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxLjI1Mjc2Mjk2ODQ5NTM2OFxuICAgKiAgICBtYXRoLmV4cChtYXRoLmxvZygyLjQpKSAgICAgICAgLy8gcmV0dXJucyAyLjRcbiAgICpcbiAgICogICAgbWF0aC5wb3coMTAsIDQpICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMTAwMDBcbiAgICogICAgbWF0aC5sb2coMTAwMDAsIDEwKSAgICAgICAgICAgIC8vIHJldHVybnMgNFxuICAgKiAgICBtYXRoLmxvZygxMDAwMCkgLyBtYXRoLmxvZygxMCkgLy8gcmV0dXJucyA0XG4gICAqXG4gICAqICAgIG1hdGgubG9nKDEwMjQsIDIpICAgICAgICAgICAgICAvLyByZXR1cm5zIDEwXG4gICAqICAgIG1hdGgucG93KDIsIDEwKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDEwMjRcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGV4cCwgbG9nMiwgbG9nMTAsIGxvZzFwXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4XG4gICAqICAgICAgICAgICAgVmFsdWUgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgbG9nYXJpdGhtLlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXh9IFtiYXNlPWVdXG4gICAqICAgICAgICAgICAgT3B0aW9uYWwgYmFzZSBmb3IgdGhlIGxvZ2FyaXRobS4gSWYgbm90IHByb3ZpZGVkLCB0aGUgbmF0dXJhbFxuICAgKiAgICAgICAgICAgIGxvZ2FyaXRobSBvZiBgeGAgaXMgY2FsY3VsYXRlZC5cbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFJldHVybnMgdGhlIGxvZ2FyaXRobSBvZiBgeGBcbiAgICovXG4gIHZhciBsb2cgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgaWYgKHggPj0gMCB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLmxvZ051bWJlcikoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBuZWdhdGl2ZSB2YWx1ZSAtPiBjb21wbGV4IHZhbHVlIGNvbXB1dGF0aW9uXG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5sb2coKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHgubG9nKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICBpZiAoIXguaXNOZWdhdGl2ZSgpIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICByZXR1cm4geC5sbigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZG93bmdyYWRlIHRvIG51bWJlciwgcmV0dXJuIENvbXBsZXggdmFsdWVkIHJlc3VsdFxuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoeC50b051bWJlcigpLCAwKS5sb2coKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgbG9nKTtcbiAgICB9LFxuICAgICdhbnksIGFueSc6IGZ1bmN0aW9uIGFueUFueSh4LCBiYXNlKSB7XG4gICAgICAvLyBjYWxjdWxhdGUgbG9nYXJpdGhtIGZvciBhIHNwZWNpZmllZCBiYXNlLCBsb2coeCwgYmFzZSlcbiAgICAgIHJldHVybiBkaXZpZGVTY2FsYXIobG9nKHgpLCBsb2coYmFzZSkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBsb2c7XG59KTtcbmV4cG9ydHMuY3JlYXRlTG9nID0gY3JlYXRlTG9nOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVMb2cxMCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2xvZzEwJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdDb21wbGV4J107XG52YXIgY3JlYXRlTG9nMTAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBfQ29tcGxleCA9IF9yZWYuQ29tcGxleDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSAxMC1iYXNlIGxvZ2FyaXRobSBvZiBhIHZhbHVlLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGNhbGN1bGF0aW5nIGBsb2coeCwgMTApYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmxvZzEwKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmxvZzEwKDAuMDAwMDEpICAgICAgICAgICAgLy8gcmV0dXJucyAtNVxuICAgKiAgICBtYXRoLmxvZzEwKDEwMDAwKSAgICAgICAgICAgICAgLy8gcmV0dXJucyA0XG4gICAqICAgIG1hdGgubG9nKDEwMDAwKSAvIG1hdGgubG9nKDEwKSAvLyByZXR1cm5zIDRcbiAgICogICAgbWF0aC5wb3coMTAsIDQpICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMTAwMDBcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGV4cCwgbG9nLCBsb2cxcCwgbG9nMlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geFxuICAgKiAgICAgICAgICAgIFZhbHVlIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIGxvZ2FyaXRobS5cbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFJldHVybnMgdGhlIDEwLWJhc2UgbG9nYXJpdGhtIG9mIGB4YFxuICAgKi9cbiAgdmFyIGxvZzEwID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICh4ID49IDAgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiAoMCwgX251bWJlci5sb2cxME51bWJlcikoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBuZWdhdGl2ZSB2YWx1ZSAtPiBjb21wbGV4IHZhbHVlIGNvbXB1dGF0aW9uXG4gICAgICAgIHJldHVybiBuZXcgX0NvbXBsZXgoeCwgMCkubG9nKCkuZGl2KE1hdGguTE4xMCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0NvbXBsZXgoeCkubG9nKCkuZGl2KE1hdGguTE4xMCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICBpZiAoIXguaXNOZWdhdGl2ZSgpIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICByZXR1cm4geC5sb2coKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRvd25ncmFkZSB0byBudW1iZXIsIHJldHVybiBDb21wbGV4IHZhbHVlZCByZXN1bHRcbiAgICAgICAgcmV0dXJuIG5ldyBfQ29tcGxleCh4LnRvTnVtYmVyKCksIDApLmxvZygpLmRpdihNYXRoLkxOMTApO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBsb2cxMCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGxvZzEwO1xufSk7XG5leHBvcnRzLmNyZWF0ZUxvZzEwID0gY3JlYXRlTG9nMTA7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUxvZzFwID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnbG9nMXAnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ2RpdmlkZVNjYWxhcicsICdsb2cnLCAnQ29tcGxleCddO1xudmFyIGNyZWF0ZUxvZzFwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBsb2cgPSBfcmVmLmxvZyxcbiAgICAgIENvbXBsZXggPSBfcmVmLkNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbG9nYXJpdGhtIG9mIGEgYHZhbHVlKzFgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubG9nMXAoeClcbiAgICogICAgbWF0aC5sb2cxcCh4LCBiYXNlKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5sb2cxcCgyLjUpICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDEuMjUyNzYyOTY4NDk1MzY4XG4gICAqICAgIG1hdGguZXhwKG1hdGgubG9nMXAoMS40KSkgICAgICAgLy8gcmV0dXJucyAyLjRcbiAgICpcbiAgICogICAgbWF0aC5wb3coMTAsIDQpICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDEwMDAwXG4gICAqICAgIG1hdGgubG9nMXAoOTk5OSwgMTApICAgICAgICAgICAgLy8gcmV0dXJucyA0XG4gICAqICAgIG1hdGgubG9nMXAoOTk5OSkgLyBtYXRoLmxvZygxMCkgLy8gcmV0dXJucyA0XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBleHAsIGxvZywgbG9nMiwgbG9nMTBcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHhcbiAgICogICAgICAgICAgICBWYWx1ZSBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBsb2dhcml0aG0gb2YgYHgrMWAuXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleH0gW2Jhc2U9ZV1cbiAgICogICAgICAgICAgICBPcHRpb25hbCBiYXNlIGZvciB0aGUgbG9nYXJpdGhtLiBJZiBub3QgcHJvdmlkZWQsIHRoZSBuYXR1cmFsXG4gICAqICAgICAgICAgICAgbG9nYXJpdGhtIG9mIGB4KzFgIGlzIGNhbGN1bGF0ZWQuXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRoZSBsb2dhcml0aG0gb2YgYHgrMWBcbiAgICovXG4gIHZhciBsb2cxcCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoeCA+PSAtMSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLmxvZzFwKSh4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG5lZ2F0aXZlIHZhbHVlIC0+IGNvbXBsZXggdmFsdWUgY29tcHV0YXRpb25cbiAgICAgICAgcmV0dXJuIF9sb2cxcENvbXBsZXgobmV3IENvbXBsZXgoeCwgMCkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgQ29tcGxleDogX2xvZzFwQ29tcGxleCxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICB2YXIgeSA9IHgucGx1cygxKTtcblxuICAgICAgaWYgKCF5LmlzTmVnYXRpdmUoKSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIHkubG4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRvd25ncmFkZSB0byBudW1iZXIsIHJldHVybiBDb21wbGV4IHZhbHVlZCByZXN1bHRcbiAgICAgICAgcmV0dXJuIF9sb2cxcENvbXBsZXgobmV3IENvbXBsZXgoeC50b051bWJlcigpLCAwKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGxvZzFwKTtcbiAgICB9LFxuICAgICdhbnksIGFueSc6IGZ1bmN0aW9uIGFueUFueSh4LCBiYXNlKSB7XG4gICAgICAvLyBjYWxjdWxhdGUgbG9nYXJpdGhtIGZvciBhIHNwZWNpZmllZCBiYXNlLCBsb2cxcCh4LCBiYXNlKVxuICAgICAgcmV0dXJuIGRpdmlkZVNjYWxhcihsb2cxcCh4KSwgbG9nKGJhc2UpKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiBhIGNvbXBsZXggbnVtYmVyICsgMVxuICAgKiBAcGFyYW0ge0NvbXBsZXh9IHhcbiAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9sb2cxcENvbXBsZXgoeCkge1xuICAgIHZhciB4UmUxcCA9IHgucmUgKyAxO1xuICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLmxvZyhNYXRoLnNxcnQoeFJlMXAgKiB4UmUxcCArIHguaW0gKiB4LmltKSksIE1hdGguYXRhbjIoeC5pbSwgeFJlMXApKTtcbiAgfVxuXG4gIHJldHVybiBsb2cxcDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVMb2cxcCA9IGNyZWF0ZUxvZzFwOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVMb2cyID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnbG9nMic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQ29tcGxleCddO1xudmFyIGNyZWF0ZUxvZzIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIDItYmFzZSBvZiBhIHZhbHVlLiBUaGlzIGlzIHRoZSBzYW1lIGFzIGNhbGN1bGF0aW5nIGBsb2coeCwgMilgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubG9nMih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5sb2cyKDAuMDMxMjUpICAgICAgICAgICAvLyByZXR1cm5zIC01XG4gICAqICAgIG1hdGgubG9nMigxNikgICAgICAgICAgICAgICAgLy8gcmV0dXJucyA0XG4gICAqICAgIG1hdGgubG9nMigxNikgLyBtYXRoLmxvZzIoMikgLy8gcmV0dXJucyA0XG4gICAqICAgIG1hdGgucG93KDIsIDQpICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxNlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZXhwLCBsb2csIGxvZzFwLCBsb2cxMFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geFxuICAgKiAgICAgICAgICAgIFZhbHVlIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIGxvZ2FyaXRobS5cbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFJldHVybnMgdGhlIDItYmFzZSBsb2dhcml0aG0gb2YgYHhgXG4gICAqL1xuICB2YXIgbG9nMiA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoeCA+PSAwIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICByZXR1cm4gKDAsIF9udW1iZXIubG9nMk51bWJlcikoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBuZWdhdGl2ZSB2YWx1ZSAtPiBjb21wbGV4IHZhbHVlIGNvbXB1dGF0aW9uXG4gICAgICAgIHJldHVybiBfbG9nMkNvbXBsZXgobmV3IENvbXBsZXgoeCwgMCkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgQ29tcGxleDogX2xvZzJDb21wbGV4LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIGlmICgheC5pc05lZ2F0aXZlKCkgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiB4LmxvZygyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRvd25ncmFkZSB0byBudW1iZXIsIHJldHVybiBDb21wbGV4IHZhbHVlZCByZXN1bHRcbiAgICAgICAgcmV0dXJuIF9sb2cyQ29tcGxleChuZXcgQ29tcGxleCh4LnRvTnVtYmVyKCksIDApKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgbG9nMik7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBsb2cyIGZvciBhIGNvbXBsZXggdmFsdWVcbiAgICogQHBhcmFtIHtDb21wbGV4fSB4XG4gICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfbG9nMkNvbXBsZXgoeCkge1xuICAgIHZhciBuZXdYID0gTWF0aC5zcXJ0KHgucmUgKiB4LnJlICsgeC5pbSAqIHguaW0pO1xuICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLmxvZzIgPyBNYXRoLmxvZzIobmV3WCkgOiBNYXRoLmxvZyhuZXdYKSAvIE1hdGguTE4yLCBNYXRoLmF0YW4yKHguaW0sIHgucmUpIC8gTWF0aC5MTjIpO1xuICB9XG5cbiAgcmV0dXJuIGxvZzI7XG59KTtcbmV4cG9ydHMuY3JlYXRlTG9nMiA9IGNyZWF0ZUxvZzI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1vZCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAyXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDNcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNVwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTJcIik7XG5cbnZhciBfYWxnb3JpdGhtNiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG03ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ21vZCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVNb2QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBhbGdvcml0aG0wMiA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTAzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDUgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMDUpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTEgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTEpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTIgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTYuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNy5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIG1vZHVsdXMsIHRoZSByZW1haW5kZXIgb2YgYW4gaW50ZWdlciBkaXZpc2lvbi5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogVGhlIG1vZHVsdXMgaXMgZGVmaW5lZCBhczpcbiAgICpcbiAgICogICAgIHggLSB5ICogZmxvb3IoeCAvIHkpXG4gICAqXG4gICAqIFNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Nb2R1bG9fb3BlcmF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubW9kKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLm1vZCg4LCAzKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDJcbiAgICogICAgbWF0aC5tb2QoMTEsIDIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxXG4gICAqXG4gICAqICAgIGZ1bmN0aW9uIGlzT2RkKHgpIHtcbiAgICogICAgICByZXR1cm4gbWF0aC5tb2QoeCwgMikgIT0gMFxuICAgKiAgICB9XG4gICAqXG4gICAqICAgIGlzT2RkKDIpICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgaXNPZGQoMykgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBkaXZpZGVcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBBcnJheSB8IE1hdHJpeH0geCBEaXZpZGVuZFxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IEFycmF5IHwgTWF0cml4fSB5IERpdmlzb3JcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0aGUgcmVtYWluZGVyIG9mIGB4YCBkaXZpZGVkIGJ5IGB5YC5cbiAgICovXG5cbiAgdmFyIG1vZCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLm1vZE51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHkuaXNaZXJvKCkgPyB4IDogeC5tb2QoeSk7XG4gICAgfSxcbiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7XG4gICAgICByZXR1cm4geC5tb2QoeSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA1KHgsIHksIG1vZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDIoeSwgeCwgbW9kLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIG1vZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIG1vZCk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbW9kKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBtb2QobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIG1vZCh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCBtb2QsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIG1vZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBtb2QsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgbW9kLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgbW9kLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBtb2QsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbW9kO1xufSk7XG5leHBvcnRzLmNyZWF0ZU1vZCA9IGNyZWF0ZU1vZDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTXVsdGlwbHkgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBuYW1lID0gJ211bHRpcGx5JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdhZGRTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAnZXF1YWxTY2FsYXInXTtcbnZhciBjcmVhdGVNdWx0aXBseSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyO1xuICB2YXIgYWxnb3JpdGhtMTEgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIE11bHRpcGx5IHR3byBvciBtb3JlIHZhbHVlcywgYHggKiB5YC5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgbWF0cml4IHByb2R1Y3QgaXMgY2FsY3VsYXRlZC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLm11bHRpcGx5KHgsIHkpXG4gICAqICAgIG1hdGgubXVsdGlwbHkoeCwgeSwgeiwgLi4uKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5tdWx0aXBseSg0LCA1LjIpICAgICAgICAvLyByZXR1cm5zIG51bWJlciAyMC44XG4gICAqICAgIG1hdGgubXVsdGlwbHkoMiwgMywgNCkgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMjRcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAzKVxuICAgKiAgICBjb25zdCBiID0gbWF0aC5jb21wbGV4KDQsIDEpXG4gICAqICAgIG1hdGgubXVsdGlwbHkoYSwgYikgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDUgKyAxNGlcbiAgICpcbiAgICogICAgY29uc3QgYyA9IFtbMSwgMl0sIFs0LCAzXV1cbiAgICogICAgY29uc3QgZCA9IFtbMSwgMiwgM10sIFszLCAtNCwgN11dXG4gICAqICAgIG1hdGgubXVsdGlwbHkoYywgZCkgICAgICAgICAgLy8gcmV0dXJucyBBcnJheSBbWzcsIC02LCAxN10sIFsxMywgLTQsIDMzXV1cbiAgICpcbiAgICogICAgY29uc3QgZSA9IG1hdGgudW5pdCgnMi4xIGttJylcbiAgICogICAgbWF0aC5tdWx0aXBseSgzLCBlKSAgICAgICAgICAvLyByZXR1cm5zIFVuaXQgNi4zIGttXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBkaXZpZGUsIHByb2QsIGNyb3NzLCBkb3RcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIG11bHRpcGx5XG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gbXVsdGlwbHlcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSBNdWx0aXBsaWNhdGlvbiBvZiBgeGAgYW5kIGB5YFxuICAgKi9cblxuICB2YXIgbXVsdGlwbHkgPSB0eXBlZChuYW1lLCAoMCwgX29iamVjdC5leHRlbmQpKHtcbiAgICAvLyB3ZSBleHRlbmQgdGhlIHNpZ25hdHVyZXMgb2YgbXVsdGlwbHlTY2FsYXIgd2l0aCBzaWduYXR1cmVzIGRlYWxpbmcgd2l0aCBtYXRyaWNlc1xuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIGRpbWVuc2lvbnNcbiAgICAgIF92YWxpZGF0ZU1hdHJpeERpbWVuc2lvbnMoKDAsIF9hcnJheS5hcnJheVNpemUpKHgpLCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeSkpOyAvLyB1c2UgZGVuc2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG5cblxuICAgICAgdmFyIG0gPSBtdWx0aXBseShtYXRyaXgoeCksIG1hdHJpeCh5KSk7IC8vIHJldHVybiBhcnJheSBvciBzY2FsYXJcblxuICAgICAgcmV0dXJuICgwLCBfaXMuaXNNYXRyaXgpKG0pID8gbS52YWx1ZU9mKCkgOiBtO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgTWF0cml4JzogZnVuY3Rpb24gTWF0cml4TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGRpbWVuc2lvbnNcbiAgICAgIHZhciB4c2l6ZSA9IHguc2l6ZSgpO1xuICAgICAgdmFyIHlzaXplID0geS5zaXplKCk7IC8vIGNoZWNrIGRpbWVuc2lvbnNcblxuICAgICAgX3ZhbGlkYXRlTWF0cml4RGltZW5zaW9ucyh4c2l6ZSwgeXNpemUpOyAvLyBwcm9jZXNzIGRpbWVuc2lvbnNcblxuXG4gICAgICBpZiAoeHNpemUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIC8vIHByb2Nlc3MgeSBkaW1lbnNpb25zXG4gICAgICAgIGlmICh5c2l6ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAvLyBWZWN0b3IgKiBWZWN0b3JcbiAgICAgICAgICByZXR1cm4gX211bHRpcGx5VmVjdG9yVmVjdG9yKHgsIHksIHhzaXplWzBdKTtcbiAgICAgICAgfSAvLyBWZWN0b3IgKiBNYXRyaXhcblxuXG4gICAgICAgIHJldHVybiBfbXVsdGlwbHlWZWN0b3JNYXRyaXgoeCwgeSk7XG4gICAgICB9IC8vIHByb2Nlc3MgeSBkaW1lbnNpb25zXG5cblxuICAgICAgaWYgKHlzaXplLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyBNYXRyaXggKiBWZWN0b3JcbiAgICAgICAgcmV0dXJuIF9tdWx0aXBseU1hdHJpeFZlY3Rvcih4LCB5KTtcbiAgICAgIH0gLy8gTWF0cml4ICogTWF0cml4XG5cblxuICAgICAgcmV0dXJuIF9tdWx0aXBseU1hdHJpeE1hdHJpeCh4LCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIE1hdHJpeCAqIE1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIG11bHRpcGx5KHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBNYXRyaXggKiBNYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBtdWx0aXBseShtYXRyaXgoeCwgeS5zdG9yYWdlKCkpLCB5KTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgbXVsdGlwbHlTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIG11bHRpcGx5U2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgbXVsdGlwbHlTY2FsYXIsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIG11bHRpcGx5U2NhbGFyLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBhbnknOiBtdWx0aXBseVNjYWxhcixcbiAgICAnYW55LCBhbnksIC4uLmFueSc6IGZ1bmN0aW9uIGFueUFueUFueSh4LCB5LCByZXN0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gbXVsdGlwbHkoeCwgeSk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQgPSBtdWx0aXBseShyZXN1bHQsIHJlc3RbaV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfSwgbXVsdGlwbHlTY2FsYXIuc2lnbmF0dXJlcykpO1xuXG4gIGZ1bmN0aW9uIF92YWxpZGF0ZU1hdHJpeERpbWVuc2lvbnMoc2l6ZTEsIHNpemUyKSB7XG4gICAgLy8gY2hlY2sgbGVmdCBvcGVyYW5kIGRpbWVuc2lvbnNcbiAgICBzd2l0Y2ggKHNpemUxLmxlbmd0aCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICAvLyBjaGVjayBzaXplMlxuICAgICAgICBzd2l0Y2ggKHNpemUyLmxlbmd0aCkge1xuICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIC8vIFZlY3RvciB4IFZlY3RvclxuICAgICAgICAgICAgaWYgKHNpemUxWzBdICE9PSBzaXplMlswXSkge1xuICAgICAgICAgICAgICAvLyB0aHJvdyBlcnJvclxuICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoIGluIG11bHRpcGxpY2F0aW9uLiBWZWN0b3JzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGgnKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAvLyBWZWN0b3IgeCBNYXRyaXhcbiAgICAgICAgICAgIGlmIChzaXplMVswXSAhPT0gc2l6ZTJbMF0pIHtcbiAgICAgICAgICAgICAgLy8gdGhyb3cgZXJyb3JcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaCBpbiBtdWx0aXBsaWNhdGlvbi4gVmVjdG9yIGxlbmd0aCAoJyArIHNpemUxWzBdICsgJykgbXVzdCBtYXRjaCBNYXRyaXggcm93cyAoJyArIHNpemUyWzBdICsgJyknKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBtdWx0aXBseSBhIDEgb3IgMiBkaW1lbnNpb25hbCBtYXRyaXggKE1hdHJpeCBCIGhhcyAnICsgc2l6ZTIubGVuZ3RoICsgJyBkaW1lbnNpb25zKScpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgLy8gY2hlY2sgc2l6ZTJcbiAgICAgICAgc3dpdGNoIChzaXplMi5sZW5ndGgpIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAvLyBNYXRyaXggeCBWZWN0b3JcbiAgICAgICAgICAgIGlmIChzaXplMVsxXSAhPT0gc2l6ZTJbMF0pIHtcbiAgICAgICAgICAgICAgLy8gdGhyb3cgZXJyb3JcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaCBpbiBtdWx0aXBsaWNhdGlvbi4gTWF0cml4IGNvbHVtbnMgKCcgKyBzaXplMVsxXSArICcpIG11c3QgbWF0Y2ggVmVjdG9yIGxlbmd0aCAoJyArIHNpemUyWzBdICsgJyknKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAvLyBNYXRyaXggeCBNYXRyaXhcbiAgICAgICAgICAgIGlmIChzaXplMVsxXSAhPT0gc2l6ZTJbMF0pIHtcbiAgICAgICAgICAgICAgLy8gdGhyb3cgZXJyb3JcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaCBpbiBtdWx0aXBsaWNhdGlvbi4gTWF0cml4IEEgY29sdW1ucyAoJyArIHNpemUxWzFdICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiByb3dzICgnICsgc2l6ZTJbMF0gKyAnKScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBvbmx5IG11bHRpcGx5IGEgMSBvciAyIGRpbWVuc2lvbmFsIG1hdHJpeCAoTWF0cml4IEIgaGFzICcgKyBzaXplMi5sZW5ndGggKyAnIGRpbWVuc2lvbnMpJyk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBtdWx0aXBseSBhIDEgb3IgMiBkaW1lbnNpb25hbCBtYXRyaXggKE1hdHJpeCBBIGhhcyAnICsgc2l6ZTEubGVuZ3RoICsgJyBkaW1lbnNpb25zKScpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQyA9IEEgKiBCXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgRGVuc2UgVmVjdG9yICAgKE4pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgRGVuc2UgVmVjdG9yICAgKE4pXG4gICAqXG4gICAqIEByZXR1cm4ge251bWJlcn0gICAgICAgICAgICAgU2NhbGFyIHZhbHVlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX211bHRpcGx5VmVjdG9yVmVjdG9yKGEsIGIsIG4pIHtcbiAgICAvLyBjaGVjayBlbXB0eSB2ZWN0b3JcbiAgICBpZiAobiA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbXVsdGlwbHkgdHdvIGVtcHR5IHZlY3RvcnMnKTtcbiAgICB9IC8vIGEgZGVuc2VcblxuXG4gICAgdmFyIGFkYXRhID0gYS5fZGF0YTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIGIgZGVuc2VcblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7XG4gICAgdmFyIGJkdCA9IGIuX2RhdGF0eXBlOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyBhZGRTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGFmID0gYWRkU2NhbGFyOyAvLyBtdWx0aXBseVNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgbWYgPSBtdWx0aXBseVNjYWxhcjsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAoYWR0ICYmIGJkdCAmJiBhZHQgPT09IGJkdCAmJiB0eXBlb2YgYWR0ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZXMgdGhhdCBtYXRjaGVzIChkdCwgZHQpXG5cbiAgICAgIGFmID0gdHlwZWQuZmluZChhZGRTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICAgIG1mID0gdHlwZWQuZmluZChtdWx0aXBseVNjYWxhciwgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0IChkbyBub3QgaW5pdGlhbGl6ZSBpdCB3aXRoIHplcm8pXG5cblxuICAgIHZhciBjID0gbWYoYWRhdGFbMF0sIGJkYXRhWzBdKTsgLy8gbG9vcCBkYXRhXG5cbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IG47IGkrKykge1xuICAgICAgLy8gbXVsdGlwbHkgYW5kIGFjY3VtdWxhdGVcbiAgICAgIGMgPSBhZihjLCBtZihhZGF0YVtpXSwgYmRhdGFbaV0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYztcbiAgfVxuICAvKipcbiAgICogQyA9IEEgKiBCXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgRGVuc2UgVmVjdG9yICAgKE0pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgTWF0cml4ICAgICAgICAgKE14TilcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBEZW5zZSBWZWN0b3IgICAoTilcbiAgICovXG5cblxuICBmdW5jdGlvbiBfbXVsdGlwbHlWZWN0b3JNYXRyaXgoYSwgYikge1xuICAgIC8vIHByb2Nlc3Mgc3RvcmFnZVxuICAgIGlmIChiLnN0b3JhZ2UoKSAhPT0gJ2RlbnNlJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdXBwb3J0IGZvciBTcGFyc2VNYXRyaXggbm90IGltcGxlbWVudGVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9tdWx0aXBseVZlY3RvckRlbnNlTWF0cml4KGEsIGIpO1xuICB9XG4gIC8qKlxuICAgKiBDID0gQSAqIEJcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgICBEZW5zZSBWZWN0b3IgICAoTSlcbiAgICogQHBhcmFtIHtNYXRyaXh9IGIgICAgICAgICAgICBEZW5zZSBNYXRyaXggICAoTXhOKVxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgIERlbnNlIFZlY3RvciAgIChOKVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9tdWx0aXBseVZlY3RvckRlbnNlTWF0cml4KGEsIGIpIHtcbiAgICAvLyBhIGRlbnNlXG4gICAgdmFyIGFkYXRhID0gYS5fZGF0YTtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gYiBkZW5zZVxuXG4gICAgdmFyIGJkYXRhID0gYi5fZGF0YTtcbiAgICB2YXIgYnNpemUgPSBiLl9zaXplO1xuICAgIHZhciBiZHQgPSBiLl9kYXRhdHlwZTsgLy8gcm93cyAmIGNvbHVtbnNcblxuICAgIHZhciBhbGVuZ3RoID0gYXNpemVbMF07XG4gICAgdmFyIGJjb2x1bW5zID0gYnNpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGFkZFNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgYWYgPSBhZGRTY2FsYXI7IC8vIG11bHRpcGx5U2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBtZiA9IG11bHRpcGx5U2NhbGFyOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmIChhZHQgJiYgYmR0ICYmIGFkdCA9PT0gYmR0ICYmIHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlcyB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgYWYgPSB0eXBlZC5maW5kKGFkZFNjYWxhciwgW2R0LCBkdF0pO1xuICAgICAgbWYgPSB0eXBlZC5maW5kKG11bHRpcGx5U2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgfSAvLyByZXN1bHRcblxuXG4gICAgdmFyIGMgPSBbXTsgLy8gbG9vcCBtYXRyaXggY29sdW1uc1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBiY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBzdW0gKGRvIG5vdCBpbml0aWFsaXplIGl0IHdpdGggemVybylcbiAgICAgIHZhciBzdW0gPSBtZihhZGF0YVswXSwgYmRhdGFbMF1bal0pOyAvLyBsb29wIHZlY3RvclxuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFsZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBtdWx0aXBseSAmIGFjY3VtdWxhdGVcbiAgICAgICAgc3VtID0gYWYoc3VtLCBtZihhZGF0YVtpXSwgYmRhdGFbaV1bal0pKTtcbiAgICAgIH1cblxuICAgICAgY1tqXSA9IHN1bTtcbiAgICB9IC8vIHJldHVybiBtYXRyaXhcblxuXG4gICAgcmV0dXJuIGEuY3JlYXRlRGVuc2VNYXRyaXgoe1xuICAgICAgZGF0YTogYyxcbiAgICAgIHNpemU6IFtiY29sdW1uc10sXG4gICAgICBkYXRhdHlwZTogZHRcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQyA9IEEgKiBCXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgTWF0cml4ICAgICAgICAgKE14TilcbiAgICogQHBhcmFtIHtNYXRyaXh9IGIgICAgICAgICAgICBEZW5zZSBWZWN0b3IgICAoTilcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBEZW5zZSBWZWN0b3IgICAoTSlcbiAgICovXG5cblxuICB2YXIgX211bHRpcGx5TWF0cml4VmVjdG9yID0gdHlwZWQoJ19tdWx0aXBseU1hdHJpeFZlY3RvcicsIHtcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IF9tdWx0aXBseURlbnNlTWF0cml4VmVjdG9yLFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IF9tdWx0aXBseVNwYXJzZU1hdHJpeFZlY3RvclxuICB9KTtcbiAgLyoqXG4gICAqIEMgPSBBICogQlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gYSAgICAgICAgICAgIE1hdHJpeCAgICAgICAgIChNeE4pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgTWF0cml4ICAgICAgICAgKE54QylcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBNYXRyaXggICAgICAgICAoTXhDKVxuICAgKi9cblxuXG4gIHZhciBfbXVsdGlwbHlNYXRyaXhNYXRyaXggPSB0eXBlZCgnX211bHRpcGx5TWF0cml4TWF0cml4Jywge1xuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBfbXVsdGlwbHlEZW5zZU1hdHJpeERlbnNlTWF0cml4LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogX211bHRpcGx5RGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgsXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBfbXVsdGlwbHlTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBfbXVsdGlwbHlTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXhcbiAgfSk7XG4gIC8qKlxuICAgKiBDID0gQSAqIEJcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgICBEZW5zZU1hdHJpeCAgKE14TilcbiAgICogQHBhcmFtIHtNYXRyaXh9IGIgICAgICAgICAgICBEZW5zZSBWZWN0b3IgKE4pXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgRGVuc2UgVmVjdG9yIChNKVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9tdWx0aXBseURlbnNlTWF0cml4VmVjdG9yKGEsIGIpIHtcbiAgICAvLyBhIGRlbnNlXG4gICAgdmFyIGFkYXRhID0gYS5fZGF0YTtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gYiBkZW5zZVxuXG4gICAgdmFyIGJkYXRhID0gYi5fZGF0YTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgYXJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgYWNvbHVtbnMgPSBhc2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gYWRkU2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBhZiA9IGFkZFNjYWxhcjsgLy8gbXVsdGlwbHlTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIG1mID0gbXVsdGlwbHlTY2FsYXI7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKGFkdCAmJiBiZHQgJiYgYWR0ID09PSBiZHQgJiYgdHlwZW9mIGFkdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gZmluZCBzaWduYXR1cmVzIHRoYXQgbWF0Y2hlcyAoZHQsIGR0KVxuXG4gICAgICBhZiA9IHR5cGVkLmZpbmQoYWRkU2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgICBtZiA9IHR5cGVkLmZpbmQobXVsdGlwbHlTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICB9IC8vIHJlc3VsdFxuXG5cbiAgICB2YXIgYyA9IFtdOyAvLyBsb29wIG1hdHJpeCBhIHJvd3NcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJvd3M7IGkrKykge1xuICAgICAgLy8gY3VycmVudCByb3dcbiAgICAgIHZhciByb3cgPSBhZGF0YVtpXTsgLy8gc3VtIChkbyBub3QgaW5pdGlhbGl6ZSBpdCB3aXRoIHplcm8pXG5cbiAgICAgIHZhciBzdW0gPSBtZihyb3dbMF0sIGJkYXRhWzBdKTsgLy8gbG9vcCBtYXRyaXggYSBjb2x1bW5zXG5cbiAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgYWNvbHVtbnM7IGorKykge1xuICAgICAgICAvLyBtdWx0aXBseSAmIGFjY3VtdWxhdGVcbiAgICAgICAgc3VtID0gYWYoc3VtLCBtZihyb3dbal0sIGJkYXRhW2pdKSk7XG4gICAgICB9XG5cbiAgICAgIGNbaV0gPSBzdW07XG4gICAgfSAvLyByZXR1cm4gbWF0cml4XG5cblxuICAgIHJldHVybiBhLmNyZWF0ZURlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGMsXG4gICAgICBzaXplOiBbYXJvd3NdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEMgPSBBICogQlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gYSAgICAgICAgICAgIERlbnNlTWF0cml4ICAgIChNeE4pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgRGVuc2VNYXRyaXggICAgKE54QylcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBEZW5zZU1hdHJpeCAgICAoTXhDKVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9tdWx0aXBseURlbnNlTWF0cml4RGVuc2VNYXRyaXgoYSwgYikge1xuICAgIC8vIGEgZGVuc2VcbiAgICB2YXIgYWRhdGEgPSBhLl9kYXRhO1xuICAgIHZhciBhc2l6ZSA9IGEuX3NpemU7XG4gICAgdmFyIGFkdCA9IGEuX2RhdGF0eXBlOyAvLyBiIGRlbnNlXG5cbiAgICB2YXIgYmRhdGEgPSBiLl9kYXRhO1xuICAgIHZhciBic2l6ZSA9IGIuX3NpemU7XG4gICAgdmFyIGJkdCA9IGIuX2RhdGF0eXBlOyAvLyByb3dzICYgY29sdW1uc1xuXG4gICAgdmFyIGFyb3dzID0gYXNpemVbMF07XG4gICAgdmFyIGFjb2x1bW5zID0gYXNpemVbMV07XG4gICAgdmFyIGJjb2x1bW5zID0gYnNpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGFkZFNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgYWYgPSBhZGRTY2FsYXI7IC8vIG11bHRpcGx5U2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBtZiA9IG11bHRpcGx5U2NhbGFyOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmIChhZHQgJiYgYmR0ICYmIGFkdCA9PT0gYmR0ICYmIHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlcyB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgYWYgPSB0eXBlZC5maW5kKGFkZFNjYWxhciwgW2R0LCBkdF0pO1xuICAgICAgbWYgPSB0eXBlZC5maW5kKG11bHRpcGx5U2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgfSAvLyByZXN1bHRcblxuXG4gICAgdmFyIGMgPSBbXTsgLy8gbG9vcCBtYXRyaXggYSByb3dzXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyb3dzOyBpKyspIHtcbiAgICAgIC8vIGN1cnJlbnQgcm93XG4gICAgICB2YXIgcm93ID0gYWRhdGFbaV07IC8vIGluaXRpYWxpemUgcm93IGFycmF5XG5cbiAgICAgIGNbaV0gPSBbXTsgLy8gbG9vcCBtYXRyaXggYiBjb2x1bW5zXG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYmNvbHVtbnM7IGorKykge1xuICAgICAgICAvLyBzdW0gKGF2b2lkIGluaXRpYWxpemluZyBzdW0gdG8gemVybylcbiAgICAgICAgdmFyIHN1bSA9IG1mKHJvd1swXSwgYmRhdGFbMF1bal0pOyAvLyBsb29wIG1hdHJpeCBhIGNvbHVtbnNcblxuICAgICAgICBmb3IgKHZhciB4ID0gMTsgeCA8IGFjb2x1bW5zOyB4KyspIHtcbiAgICAgICAgICAvLyBtdWx0aXBseSAmIGFjY3VtdWxhdGVcbiAgICAgICAgICBzdW0gPSBhZihzdW0sIG1mKHJvd1t4XSwgYmRhdGFbeF1bal0pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNbaV1bal0gPSBzdW07XG4gICAgICB9XG4gICAgfSAvLyByZXR1cm4gbWF0cml4XG5cblxuICAgIHJldHVybiBhLmNyZWF0ZURlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGMsXG4gICAgICBzaXplOiBbYXJvd3MsIGJjb2x1bW5zXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDID0gQSAqIEJcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgICBEZW5zZU1hdHJpeCAgICAoTXhOKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gYiAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgIChOeEMpXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgU3BhcnNlTWF0cml4ICAgKE14QylcbiAgICovXG5cblxuICBmdW5jdGlvbiBfbXVsdGlwbHlEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeChhLCBiKSB7XG4gICAgLy8gYSBkZW5zZVxuICAgIHZhciBhZGF0YSA9IGEuX2RhdGE7XG4gICAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIGIgc3BhcnNlXG5cbiAgICB2YXIgYnZhbHVlcyA9IGIuX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gYi5faW5kZXg7XG4gICAgdmFyIGJwdHIgPSBiLl9wdHI7XG4gICAgdmFyIGJzaXplID0gYi5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGIgbWF0cml4XG5cbiAgICBpZiAoIWJ2YWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IG11bHRpcGx5IERlbnNlIE1hdHJpeCB0aW1lcyBQYXR0ZXJuIG9ubHkgTWF0cml4Jyk7XG4gICAgfSAvLyByb3dzICYgY29sdW1uc1xuXG5cbiAgICB2YXIgYXJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgYmNvbHVtbnMgPSBic2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gYWRkU2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBhZiA9IGFkZFNjYWxhcjsgLy8gbXVsdGlwbHlTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIG1mID0gbXVsdGlwbHlTY2FsYXI7IC8vIGVxdWFsU2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKGFkdCAmJiBiZHQgJiYgYWR0ID09PSBiZHQgJiYgdHlwZW9mIGFkdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gZmluZCBzaWduYXR1cmVzIHRoYXQgbWF0Y2hlcyAoZHQsIGR0KVxuXG4gICAgICBhZiA9IHR5cGVkLmZpbmQoYWRkU2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgICBtZiA9IHR5cGVkLmZpbmQobXVsdGlwbHlTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZHQpO1xuICAgIH0gLy8gcmVzdWx0XG5cblxuICAgIHZhciBjdmFsdWVzID0gW107XG4gICAgdmFyIGNpbmRleCA9IFtdO1xuICAgIHZhciBjcHRyID0gW107IC8vIGMgbWF0cml4XG5cbiAgICB2YXIgYyA9IGIuY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbYXJvd3MsIGJjb2x1bW5zXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pOyAvLyBsb29wIGIgY29sdW1uc1xuXG4gICAgZm9yICh2YXIgamIgPSAwOyBqYiA8IGJjb2x1bW5zOyBqYisrKSB7XG4gICAgICAvLyB1cGRhdGUgcHRyXG4gICAgICBjcHRyW2piXSA9IGNpbmRleC5sZW5ndGg7IC8vIGluZGVjZXMgaW4gY29sdW1uIGpiXG5cbiAgICAgIHZhciBrYjAgPSBicHRyW2piXTtcbiAgICAgIHZhciBrYjEgPSBicHRyW2piICsgMV07IC8vIGRvIG5vdCBwcm9jZXNzIGNvbHVtbiBqYiBpZiBubyBkYXRhIGV4aXN0c1xuXG4gICAgICBpZiAoa2IxID4ga2IwKSB7XG4gICAgICAgIC8vIGxhc3Qgcm93IG1hcmsgcHJvY2Vzc2VkXG4gICAgICAgIHZhciBsYXN0ID0gMDsgLy8gbG9vcCBhIHJvd3NcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyb3dzOyBpKyspIHtcbiAgICAgICAgICAvLyBjb2x1bW4gbWFya1xuICAgICAgICAgIHZhciBtYXJrID0gaSArIDE7IC8vIENbaSwgamJdXG5cbiAgICAgICAgICB2YXIgY2lqID0gdm9pZCAwOyAvLyB2YWx1ZXMgaW4gYiBjb2x1bW4galxuXG4gICAgICAgICAgZm9yICh2YXIga2IgPSBrYjA7IGtiIDwga2IxOyBrYisrKSB7XG4gICAgICAgICAgICAvLyByb3dcbiAgICAgICAgICAgIHZhciBpYiA9IGJpbmRleFtrYl07IC8vIGNoZWNrIHZhbHVlIGhhcyBiZWVuIGluaXRpYWxpemVkXG5cbiAgICAgICAgICAgIGlmIChsYXN0ICE9PSBtYXJrKSB7XG4gICAgICAgICAgICAgIC8vIGZpcnN0IHZhbHVlIGluIGNvbHVtbiBqYlxuICAgICAgICAgICAgICBjaWogPSBtZihhZGF0YVtpXVtpYl0sIGJ2YWx1ZXNba2JdKTsgLy8gdXBkYXRlIG1hcmtcblxuICAgICAgICAgICAgICBsYXN0ID0gbWFyaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGFjY3VtdWxhdGUgdmFsdWVcbiAgICAgICAgICAgICAgY2lqID0gYWYoY2lqLCBtZihhZGF0YVtpXVtpYl0sIGJ2YWx1ZXNba2JdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBjaGVjayBjb2x1bW4gaGFzIGJlZW4gcHJvY2Vzc2VkIGFuZCB2YWx1ZSAhPSAwXG5cblxuICAgICAgICAgIGlmIChsYXN0ID09PSBtYXJrICYmICFlcShjaWosIHplcm8pKSB7XG4gICAgICAgICAgICAvLyBwdXNoIHJvdyAmIHZhbHVlXG4gICAgICAgICAgICBjaW5kZXgucHVzaChpKTtcbiAgICAgICAgICAgIGN2YWx1ZXMucHVzaChjaWopO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gdXBkYXRlIHB0clxuXG5cbiAgICBjcHRyW2Jjb2x1bW5zXSA9IGNpbmRleC5sZW5ndGg7IC8vIHJldHVybiBzcGFyc2UgbWF0cml4XG5cbiAgICByZXR1cm4gYztcbiAgfVxuICAvKipcbiAgICogQyA9IEEgKiBCXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgU3BhcnNlTWF0cml4ICAgIChNeE4pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgRGVuc2UgVmVjdG9yIChOKVxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgICAoTSwgMSlcbiAgICovXG5cblxuICBmdW5jdGlvbiBfbXVsdGlwbHlTcGFyc2VNYXRyaXhWZWN0b3IoYSwgYikge1xuICAgIC8vIGEgc3BhcnNlXG4gICAgdmFyIGF2YWx1ZXMgPSBhLl92YWx1ZXM7XG4gICAgdmFyIGFpbmRleCA9IGEuX2luZGV4O1xuICAgIHZhciBhcHRyID0gYS5fcHRyO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gdmFsaWRhdGUgYSBtYXRyaXhcblxuICAgIGlmICghYXZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbXVsdGlwbHkgUGF0dGVybiBvbmx5IE1hdHJpeCB0aW1lcyBEZW5zZSBNYXRyaXgnKTtcbiAgICB9IC8vIGIgZGVuc2VcblxuXG4gICAgdmFyIGJkYXRhID0gYi5fZGF0YTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgYXJvd3MgPSBhLl9zaXplWzBdO1xuICAgIHZhciBicm93cyA9IGIuX3NpemVbMF07IC8vIHJlc3VsdFxuXG4gICAgdmFyIGN2YWx1ZXMgPSBbXTtcbiAgICB2YXIgY2luZGV4ID0gW107XG4gICAgdmFyIGNwdHIgPSBbXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gYWRkU2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBhZiA9IGFkZFNjYWxhcjsgLy8gbXVsdGlwbHlTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIG1mID0gbXVsdGlwbHlTY2FsYXI7IC8vIGVxdWFsU2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKGFkdCAmJiBiZHQgJiYgYWR0ID09PSBiZHQgJiYgdHlwZW9mIGFkdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gZmluZCBzaWduYXR1cmVzIHRoYXQgbWF0Y2hlcyAoZHQsIGR0KVxuXG4gICAgICBhZiA9IHR5cGVkLmZpbmQoYWRkU2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgICBtZiA9IHR5cGVkLmZpbmQobXVsdGlwbHlTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZHQpO1xuICAgIH0gLy8gd29ya3NwYWNlXG5cblxuICAgIHZhciB4ID0gW107IC8vIHZlY3RvciB3aXRoIG1hcmtzIGluZGljYXRpbmcgYSB2YWx1ZSB4W2ldIGV4aXN0cyBpbiBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHcgPSBbXTsgLy8gdXBkYXRlIHB0clxuXG4gICAgY3B0clswXSA9IDA7IC8vIHJvd3MgaW4gYlxuXG4gICAgZm9yICh2YXIgaWIgPSAwOyBpYiA8IGJyb3dzOyBpYisrKSB7XG4gICAgICAvLyBiW2liXVxuICAgICAgdmFyIHZiaSA9IGJkYXRhW2liXTsgLy8gY2hlY2sgYltpYl0gIT0gMCwgYXZvaWQgbG9vcHNcblxuICAgICAgaWYgKCFlcSh2YmksIHplcm8pKSB7XG4gICAgICAgIC8vIEEgdmFsdWVzICYgaW5kZXggaW4gaWIgY29sdW1uXG4gICAgICAgIGZvciAodmFyIGthMCA9IGFwdHJbaWJdLCBrYTEgPSBhcHRyW2liICsgMV0sIGthID0ga2EwOyBrYSA8IGthMTsga2ErKykge1xuICAgICAgICAgIC8vIGEgcm93XG4gICAgICAgICAgdmFyIGlhID0gYWluZGV4W2thXTsgLy8gY2hlY2sgdmFsdWUgZXhpc3RzIGluIGN1cnJlbnQgalxuXG4gICAgICAgICAgaWYgKCF3W2lhXSkge1xuICAgICAgICAgICAgLy8gaWEgaXMgbmV3IGVudHJ5IGluIGpcbiAgICAgICAgICAgIHdbaWFdID0gdHJ1ZTsgLy8gYWRkIGkgdG8gcGF0dGVybiBvZiBDXG5cbiAgICAgICAgICAgIGNpbmRleC5wdXNoKGlhKTsgLy8geChpYSkgPSBBXG5cbiAgICAgICAgICAgIHhbaWFdID0gbWYodmJpLCBhdmFsdWVzW2thXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGkgZXhpc3RzIGluIEMgYWxyZWFkeVxuICAgICAgICAgICAgeFtpYV0gPSBhZih4W2lhXSwgbWYodmJpLCBhdmFsdWVzW2thXSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gY29weSB2YWx1ZXMgZnJvbSB4IHRvIGNvbHVtbiBqYiBvZiBjXG5cblxuICAgIGZvciAodmFyIHAxID0gY2luZGV4Lmxlbmd0aCwgcCA9IDA7IHAgPCBwMTsgcCsrKSB7XG4gICAgICAvLyByb3dcbiAgICAgIHZhciBpYyA9IGNpbmRleFtwXTsgLy8gY29weSB2YWx1ZVxuXG4gICAgICBjdmFsdWVzW3BdID0geFtpY107XG4gICAgfSAvLyB1cGRhdGUgcHRyXG5cblxuICAgIGNwdHJbMV0gPSBjaW5kZXgubGVuZ3RoOyAvLyByZXR1cm4gc3BhcnNlIG1hdHJpeFxuXG4gICAgcmV0dXJuIGEuY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbYXJvd3MsIDFdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEMgPSBBICogQlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gYSAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgICAgIChNeE4pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgRGVuc2VNYXRyaXggICAgICAgKE54QylcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBTcGFyc2VNYXRyaXggICAgICAoTXhDKVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9tdWx0aXBseVNwYXJzZU1hdHJpeERlbnNlTWF0cml4KGEsIGIpIHtcbiAgICAvLyBhIHNwYXJzZVxuICAgIHZhciBhdmFsdWVzID0gYS5fdmFsdWVzO1xuICAgIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgICB2YXIgYXB0ciA9IGEuX3B0cjtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGEgbWF0cml4XG5cbiAgICBpZiAoIWF2YWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IG11bHRpcGx5IFBhdHRlcm4gb25seSBNYXRyaXggdGltZXMgRGVuc2UgTWF0cml4Jyk7XG4gICAgfSAvLyBiIGRlbnNlXG5cblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7XG4gICAgdmFyIGJkdCA9IGIuX2RhdGF0eXBlOyAvLyByb3dzICYgY29sdW1uc1xuXG4gICAgdmFyIGFyb3dzID0gYS5fc2l6ZVswXTtcbiAgICB2YXIgYnJvd3MgPSBiLl9zaXplWzBdO1xuICAgIHZhciBiY29sdW1ucyA9IGIuX3NpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGFkZFNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgYWYgPSBhZGRTY2FsYXI7IC8vIG11bHRpcGx5U2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBtZiA9IG11bHRpcGx5U2NhbGFyOyAvLyBlcXVhbFNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmIChhZHQgJiYgYmR0ICYmIGFkdCA9PT0gYmR0ICYmIHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlcyB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgYWYgPSB0eXBlZC5maW5kKGFkZFNjYWxhciwgW2R0LCBkdF0pO1xuICAgICAgbWYgPSB0eXBlZC5maW5kKG11bHRpcGx5U2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgICBlcSA9IHR5cGVkLmZpbmQoZXF1YWxTY2FsYXIsIFtkdCwgZHRdKTsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTtcbiAgICB9IC8vIHJlc3VsdFxuXG5cbiAgICB2YXIgY3ZhbHVlcyA9IFtdO1xuICAgIHZhciBjaW5kZXggPSBbXTtcbiAgICB2YXIgY3B0ciA9IFtdOyAvLyBjIG1hdHJpeFxuXG4gICAgdmFyIGMgPSBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IGN2YWx1ZXMsXG4gICAgICBpbmRleDogY2luZGV4LFxuICAgICAgcHRyOiBjcHRyLFxuICAgICAgc2l6ZTogW2Fyb3dzLCBiY29sdW1uc10sXG4gICAgICBkYXRhdHlwZTogZHRcbiAgICB9KTsgLy8gd29ya3NwYWNlXG5cbiAgICB2YXIgeCA9IFtdOyAvLyB2ZWN0b3Igd2l0aCBtYXJrcyBpbmRpY2F0aW5nIGEgdmFsdWUgeFtpXSBleGlzdHMgaW4gYSBnaXZlbiBjb2x1bW5cblxuICAgIHZhciB3ID0gW107IC8vIGxvb3AgYiBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqYiA9IDA7IGpiIDwgYmNvbHVtbnM7IGpiKyspIHtcbiAgICAgIC8vIHVwZGF0ZSBwdHJcbiAgICAgIGNwdHJbamJdID0gY2luZGV4Lmxlbmd0aDsgLy8gbWFyayBpbiB3b3Jrc3BhY2UgZm9yIGN1cnJlbnQgY29sdW1uXG5cbiAgICAgIHZhciBtYXJrID0gamIgKyAxOyAvLyByb3dzIGluIGpiXG5cbiAgICAgIGZvciAodmFyIGliID0gMDsgaWIgPCBicm93czsgaWIrKykge1xuICAgICAgICAvLyBiW2liLCBqYl1cbiAgICAgICAgdmFyIHZiaWogPSBiZGF0YVtpYl1bamJdOyAvLyBjaGVjayBiW2liLCBqYl0gIT0gMCwgYXZvaWQgbG9vcHNcblxuICAgICAgICBpZiAoIWVxKHZiaWosIHplcm8pKSB7XG4gICAgICAgICAgLy8gQSB2YWx1ZXMgJiBpbmRleCBpbiBpYiBjb2x1bW5cbiAgICAgICAgICBmb3IgKHZhciBrYTAgPSBhcHRyW2liXSwga2ExID0gYXB0cltpYiArIDFdLCBrYSA9IGthMDsga2EgPCBrYTE7IGthKyspIHtcbiAgICAgICAgICAgIC8vIGEgcm93XG4gICAgICAgICAgICB2YXIgaWEgPSBhaW5kZXhba2FdOyAvLyBjaGVjayB2YWx1ZSBleGlzdHMgaW4gY3VycmVudCBqXG5cbiAgICAgICAgICAgIGlmICh3W2lhXSAhPT0gbWFyaykge1xuICAgICAgICAgICAgICAvLyBpYSBpcyBuZXcgZW50cnkgaW4galxuICAgICAgICAgICAgICB3W2lhXSA9IG1hcms7IC8vIGFkZCBpIHRvIHBhdHRlcm4gb2YgQ1xuXG4gICAgICAgICAgICAgIGNpbmRleC5wdXNoKGlhKTsgLy8geChpYSkgPSBBXG5cbiAgICAgICAgICAgICAgeFtpYV0gPSBtZih2YmlqLCBhdmFsdWVzW2thXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBpIGV4aXN0cyBpbiBDIGFscmVhZHlcbiAgICAgICAgICAgICAgeFtpYV0gPSBhZih4W2lhXSwgbWYodmJpaiwgYXZhbHVlc1trYV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gY29weSB2YWx1ZXMgZnJvbSB4IHRvIGNvbHVtbiBqYiBvZiBjXG5cblxuICAgICAgZm9yICh2YXIgcDAgPSBjcHRyW2piXSwgcDEgPSBjaW5kZXgubGVuZ3RoLCBwID0gcDA7IHAgPCBwMTsgcCsrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICB2YXIgaWMgPSBjaW5kZXhbcF07IC8vIGNvcHkgdmFsdWVcblxuICAgICAgICBjdmFsdWVzW3BdID0geFtpY107XG4gICAgICB9XG4gICAgfSAvLyB1cGRhdGUgcHRyXG5cblxuICAgIGNwdHJbYmNvbHVtbnNdID0gY2luZGV4Lmxlbmd0aDsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXhcblxuICAgIHJldHVybiBjO1xuICB9XG4gIC8qKlxuICAgKiBDID0gQSAqIEJcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgICBTcGFyc2VNYXRyaXggICAgICAoTXhOKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gYiAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgICAgIChOeEMpXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgU3BhcnNlTWF0cml4ICAgICAgKE14QylcbiAgICovXG5cblxuICBmdW5jdGlvbiBfbXVsdGlwbHlTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoYSwgYikge1xuICAgIC8vIGEgc3BhcnNlXG4gICAgdmFyIGF2YWx1ZXMgPSBhLl92YWx1ZXM7XG4gICAgdmFyIGFpbmRleCA9IGEuX2luZGV4O1xuICAgIHZhciBhcHRyID0gYS5fcHRyO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gYiBzcGFyc2VcblxuICAgIHZhciBidmFsdWVzID0gYi5fdmFsdWVzO1xuICAgIHZhciBiaW5kZXggPSBiLl9pbmRleDtcbiAgICB2YXIgYnB0ciA9IGIuX3B0cjtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgYXJvd3MgPSBhLl9zaXplWzBdO1xuICAgIHZhciBiY29sdW1ucyA9IGIuX3NpemVbMV07IC8vIGZsYWcgaW5kaWNhdGluZyBib3RoIG1hdHJpY2VzIChhICYgYikgY29udGFpbiBkYXRhXG5cbiAgICB2YXIgdmFsdWVzID0gYXZhbHVlcyAmJiBidmFsdWVzOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyBhZGRTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGFmID0gYWRkU2NhbGFyOyAvLyBtdWx0aXBseVNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgbWYgPSBtdWx0aXBseVNjYWxhcjsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAoYWR0ICYmIGJkdCAmJiBhZHQgPT09IGJkdCAmJiB0eXBlb2YgYWR0ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZXMgdGhhdCBtYXRjaGVzIChkdCwgZHQpXG5cbiAgICAgIGFmID0gdHlwZWQuZmluZChhZGRTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICAgIG1mID0gdHlwZWQuZmluZChtdWx0aXBseVNjYWxhciwgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0XG5cblxuICAgIHZhciBjdmFsdWVzID0gdmFsdWVzID8gW10gOiB1bmRlZmluZWQ7XG4gICAgdmFyIGNpbmRleCA9IFtdO1xuICAgIHZhciBjcHRyID0gW107IC8vIGMgbWF0cml4XG5cbiAgICB2YXIgYyA9IGEuY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbYXJvd3MsIGJjb2x1bW5zXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pOyAvLyB3b3Jrc3BhY2VcblxuICAgIHZhciB4ID0gdmFsdWVzID8gW10gOiB1bmRlZmluZWQ7IC8vIHZlY3RvciB3aXRoIG1hcmtzIGluZGljYXRpbmcgYSB2YWx1ZSB4W2ldIGV4aXN0cyBpbiBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHcgPSBbXTsgLy8gdmFyaWFibGVzXG5cbiAgICB2YXIga2EsIGthMCwga2ExLCBrYiwga2IwLCBrYjEsIGlhLCBpYjsgLy8gbG9vcCBiIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGpiID0gMDsgamIgPCBiY29sdW1uczsgamIrKykge1xuICAgICAgLy8gdXBkYXRlIHB0clxuICAgICAgY3B0cltqYl0gPSBjaW5kZXgubGVuZ3RoOyAvLyBtYXJrIGluIHdvcmtzcGFjZSBmb3IgY3VycmVudCBjb2x1bW5cblxuICAgICAgdmFyIG1hcmsgPSBqYiArIDE7IC8vIEIgdmFsdWVzICYgaW5kZXggaW4galxuXG4gICAgICBmb3IgKGtiMCA9IGJwdHJbamJdLCBrYjEgPSBicHRyW2piICsgMV0sIGtiID0ga2IwOyBrYiA8IGtiMTsga2IrKykge1xuICAgICAgICAvLyBiIHJvd1xuICAgICAgICBpYiA9IGJpbmRleFtrYl07IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyB2YWx1ZXNcblxuICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgLy8gbG9vcCB2YWx1ZXMgaW4gYVs6LGliXVxuICAgICAgICAgIGZvciAoa2EwID0gYXB0cltpYl0sIGthMSA9IGFwdHJbaWIgKyAxXSwga2EgPSBrYTA7IGthIDwga2ExOyBrYSsrKSB7XG4gICAgICAgICAgICAvLyByb3dcbiAgICAgICAgICAgIGlhID0gYWluZGV4W2thXTsgLy8gY2hlY2sgdmFsdWUgZXhpc3RzIGluIGN1cnJlbnQgalxuXG4gICAgICAgICAgICBpZiAod1tpYV0gIT09IG1hcmspIHtcbiAgICAgICAgICAgICAgLy8gaWEgaXMgbmV3IGVudHJ5IGluIGpcbiAgICAgICAgICAgICAgd1tpYV0gPSBtYXJrOyAvLyBhZGQgaSB0byBwYXR0ZXJuIG9mIENcblxuICAgICAgICAgICAgICBjaW5kZXgucHVzaChpYSk7IC8vIHgoaWEpID0gQVxuXG4gICAgICAgICAgICAgIHhbaWFdID0gbWYoYnZhbHVlc1trYl0sIGF2YWx1ZXNba2FdKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIGkgZXhpc3RzIGluIEMgYWxyZWFkeVxuICAgICAgICAgICAgICB4W2lhXSA9IGFmKHhbaWFdLCBtZihidmFsdWVzW2tiXSwgYXZhbHVlc1trYV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gbG9vcCB2YWx1ZXMgaW4gYVs6LGliXVxuICAgICAgICAgIGZvciAoa2EwID0gYXB0cltpYl0sIGthMSA9IGFwdHJbaWIgKyAxXSwga2EgPSBrYTA7IGthIDwga2ExOyBrYSsrKSB7XG4gICAgICAgICAgICAvLyByb3dcbiAgICAgICAgICAgIGlhID0gYWluZGV4W2thXTsgLy8gY2hlY2sgdmFsdWUgZXhpc3RzIGluIGN1cnJlbnQgalxuXG4gICAgICAgICAgICBpZiAod1tpYV0gIT09IG1hcmspIHtcbiAgICAgICAgICAgICAgLy8gaWEgaXMgbmV3IGVudHJ5IGluIGpcbiAgICAgICAgICAgICAgd1tpYV0gPSBtYXJrOyAvLyBhZGQgaSB0byBwYXR0ZXJuIG9mIENcblxuICAgICAgICAgICAgICBjaW5kZXgucHVzaChpYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyBtYXRyaXggdmFsdWVzIChwYXR0ZXJuIG1hdHJpeClcblxuXG4gICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgIC8vIGNvcHkgdmFsdWVzIGZyb20geCB0byBjb2x1bW4gamIgb2YgY1xuICAgICAgICBmb3IgKHZhciBwMCA9IGNwdHJbamJdLCBwMSA9IGNpbmRleC5sZW5ndGgsIHAgPSBwMDsgcCA8IHAxOyBwKyspIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICB2YXIgaWMgPSBjaW5kZXhbcF07IC8vIGNvcHkgdmFsdWVcblxuICAgICAgICAgIGN2YWx1ZXNbcF0gPSB4W2ljXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gdXBkYXRlIHB0clxuXG5cbiAgICBjcHRyW2Jjb2x1bW5zXSA9IGNpbmRleC5sZW5ndGg7IC8vIHJldHVybiBzcGFyc2UgbWF0cml4XG5cbiAgICByZXR1cm4gYztcbiAgfVxuXG4gIHJldHVybiBtdWx0aXBseTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVNdWx0aXBseSA9IGNyZWF0ZU11bHRpcGx5OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNdWx0aXBseVNjYWxhciA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnbXVsdGlwbHlTY2FsYXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVNdWx0aXBseVNjYWxhciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIE11bHRpcGx5IHR3byBzY2FsYXIgdmFsdWVzLCBgeCAqIHlgLlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IGZvciBpbnRlcm5hbCB1c2U6IGl0IGlzIHVzZWQgYnkgdGhlIHB1YmxpYyBmdW5jdGlvblxuICAgKiBgbXVsdGlwbHlgXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgc3VwcG9ydCBjb2xsZWN0aW9ucyAoQXJyYXkgb3IgTWF0cml4KS5cbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdH0geCAgIEZpcnN0IHZhbHVlIHRvIG11bHRpcGx5XG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleH0geSAgICAgICAgICBTZWNvbmQgdmFsdWUgdG8gbXVsdGlwbHlcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdH0gICAgIE11bHRpcGxpY2F0aW9uIG9mIGB4YCBhbmQgYHlgXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB2YXIgbXVsdGlwbHlTY2FsYXIgPSB0eXBlZCgnbXVsdGlwbHlTY2FsYXInLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5tdWx0aXBseU51bWJlcixcbiAgICAnQ29tcGxleCwgQ29tcGxleCc6IGZ1bmN0aW9uIENvbXBsZXhDb21wbGV4KHgsIHkpIHtcbiAgICAgIHJldHVybiB4Lm11bCh5KTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC50aW1lcyh5KTtcbiAgICB9LFxuICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiB4Lm11bCh5KTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBGcmFjdGlvbiB8IEJpZ051bWJlciB8IENvbXBsZXgsIFVuaXQnOiBmdW5jdGlvbiBudW1iZXJGcmFjdGlvbkJpZ051bWJlckNvbXBsZXhVbml0KHgsIHkpIHtcbiAgICAgIHZhciByZXMgPSB5LmNsb25lKCk7XG4gICAgICByZXMudmFsdWUgPSByZXMudmFsdWUgPT09IG51bGwgPyByZXMuX25vcm1hbGl6ZSh4KSA6IG11bHRpcGx5U2NhbGFyKHJlcy52YWx1ZSwgeCk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG4gICAgJ1VuaXQsIG51bWJlciB8IEZyYWN0aW9uIHwgQmlnTnVtYmVyIHwgQ29tcGxleCc6IGZ1bmN0aW9uIFVuaXROdW1iZXJGcmFjdGlvbkJpZ051bWJlckNvbXBsZXgoeCwgeSkge1xuICAgICAgdmFyIHJlcyA9IHguY2xvbmUoKTtcbiAgICAgIHJlcy52YWx1ZSA9IHJlcy52YWx1ZSA9PT0gbnVsbCA/IHJlcy5fbm9ybWFsaXplKHkpIDogbXVsdGlwbHlTY2FsYXIocmVzLnZhbHVlLCB5KTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSxcbiAgICAnVW5pdCwgVW5pdCc6IGZ1bmN0aW9uIFVuaXRVbml0KHgsIHkpIHtcbiAgICAgIHJldHVybiB4Lm11bHRpcGx5KHkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBtdWx0aXBseVNjYWxhcjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVNdWx0aXBseVNjYWxhciA9IGNyZWF0ZU11bHRpcGx5U2NhbGFyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVOb3JtID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnbm9ybSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhYnMnLCAnYWRkJywgJ3BvdycsICdjb25qJywgJ3NxcnQnLCAnbXVsdGlwbHknLCAnZXF1YWxTY2FsYXInLCAnbGFyZ2VyJywgJ3NtYWxsZXInLCAnbWF0cml4J107XG52YXIgY3JlYXRlTm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhYnMgPSBfcmVmLmFicyxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgcG93ID0gX3JlZi5wb3csXG4gICAgICBjb25qID0gX3JlZi5jb25qLFxuICAgICAgc3FydCA9IF9yZWYuc3FydCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyLFxuICAgICAgc21hbGxlciA9IF9yZWYuc21hbGxlcixcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIG5vcm0gb2YgYSBudW1iZXIsIHZlY3RvciBvciBtYXRyaXguXG4gICAqXG4gICAqIFRoZSBzZWNvbmQgcGFyYW1ldGVyIHAgaXMgb3B0aW9uYWwuIElmIG5vdCBwcm92aWRlZCwgaXQgZGVmYXVsdHMgdG8gMi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLm5vcm0oeClcbiAgICogICAgbWF0aC5ub3JtKHgsIHApXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmFicygtMy41KSAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDMuNVxuICAgKiAgICBtYXRoLm5vcm0oLTMuNSkgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDMuNVxuICAgKlxuICAgKiAgICBtYXRoLm5vcm0obWF0aC5jb21wbGV4KDMsIC00KSkgICAgICAgICAvLyByZXR1cm5zIDVcbiAgICpcbiAgICogICAgbWF0aC5ub3JtKFsxLCAyLCAtM10sIEluZmluaXR5KSAgICAgICAgLy8gcmV0dXJucyAzXG4gICAqICAgIG1hdGgubm9ybShbMSwgMiwgLTNdLCAtSW5maW5pdHkpICAgICAgIC8vIHJldHVybnMgMVxuICAgKlxuICAgKiAgICBtYXRoLm5vcm0oWzMsIDRdLCAyKSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDVcbiAgICpcbiAgICogICAgbWF0aC5ub3JtKFtbMSwgMl0sIFszLCA0XV0sIDEpICAgICAgICAgIC8vIHJldHVybnMgNlxuICAgKiAgICBtYXRoLm5vcm0oW1sxLCAyXSwgWzMsIDRdXSwgJ2luZicpICAgICAvLyByZXR1cm5zIDdcbiAgICogICAgbWF0aC5ub3JtKFtbMSwgMl0sIFszLCA0XV0sICdmcm8nKSAgICAgLy8gcmV0dXJucyA1LjQ3NzIyNTU3NTA1MTY2MVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYWJzLCBoeXBvdFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHhcbiAgICogICAgICAgICAgICBWYWx1ZSBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBub3JtXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IHN0cmluZ30gW3A9Ml1cbiAgICogICAgICAgICAgICBWZWN0b3Igc3BhY2UuXG4gICAqICAgICAgICAgICAgU3VwcG9ydGVkIG51bWJlcnMgaW5jbHVkZSBJbmZpbml0eSBhbmQgLUluZmluaXR5LlxuICAgKiAgICAgICAgICAgIFN1cHBvcnRlZCBzdHJpbmdzIGFyZTogJ2luZicsICctaW5mJywgYW5kICdmcm8nIChUaGUgRnJvYmVuaXVzIG5vcm0pXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlcn0gdGhlIHAtbm9ybVxuICAgKi9cbiAgdmFyIG5vcm0gPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBNYXRoLmFicyxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmFicygpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgLy8gbm9ybSh4KSA9IGFicyh4KVxuICAgICAgcmV0dXJuIHguYWJzKCk7XG4gICAgfSxcbiAgICBcImJvb2xlYW5cIjogZnVuY3Rpb24gYm9vbGVhbih4KSB7XG4gICAgICAvLyBub3JtKHgpID0gYWJzKHgpXG4gICAgICByZXR1cm4gTWF0aC5hYnMoeCk7XG4gICAgfSxcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoeCkge1xuICAgICAgcmV0dXJuIF9ub3JtKG1hdHJpeCh4KSwgMik7XG4gICAgfSxcbiAgICBNYXRyaXg6IGZ1bmN0aW9uIE1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gX25vcm0oeCwgMik7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQ29tcGxleCB8IEJpZ051bWJlciB8IGJvb2xlYW4sIG51bWJlciB8IEJpZ051bWJlciB8IHN0cmluZyc6IGZ1bmN0aW9uIG51bWJlckNvbXBsZXhCaWdOdW1iZXJCb29sZWFuTnVtYmVyQmlnTnVtYmVyU3RyaW5nKHgpIHtcbiAgICAgIC8vIGlnbm9yZSBzZWNvbmQgcGFyYW1ldGVyLCBUT0RPOiByZW1vdmUgdGhlIG9wdGlvbiBvZiBzZWNvbmQgcGFyYW1ldGVyIGZvciB0aGVzZSB0eXBlc1xuICAgICAgcmV0dXJuIG5vcm0oeCk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlciB8IHN0cmluZyc6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyU3RyaW5nKHgsIHApIHtcbiAgICAgIHJldHVybiBfbm9ybShtYXRyaXgoeCksIHApO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyIHwgc3RyaW5nJzogZnVuY3Rpb24gTWF0cml4TnVtYmVyQmlnTnVtYmVyU3RyaW5nKHgsIHApIHtcbiAgICAgIHJldHVybiBfbm9ybSh4LCBwKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBub3JtIGZvciBhbiBhcnJheVxuICAgKiBAcGFyYW0ge01hdHJpeH0geFxuICAgKiBAcGFyYW0ge251bWJlciB8IHN0cmluZ30gcFxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBub3JtXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9ub3JtKHgsIHApIHtcbiAgICAvLyBzaXplXG4gICAgdmFyIHNpemVYID0geC5zaXplKCk7IC8vIGNoZWNrIGlmIGl0IGlzIGEgdmVjdG9yXG5cbiAgICBpZiAoc2l6ZVgubGVuZ3RoID09PSAxKSB7XG4gICAgICAvLyBjaGVjayBwXG4gICAgICBpZiAocCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIHx8IHAgPT09ICdpbmYnKSB7XG4gICAgICAgIC8vIG5vcm0oeCwgSW5maW5pdHkpID0gbWF4KGFicyh4KSlcbiAgICAgICAgdmFyIHBpbmYgPSAwOyAvLyBza2lwIHplcm9zIHNpbmNlIGFicygwKSA9PT0gMFxuXG4gICAgICAgIHguZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB2YXIgdiA9IGFicyh2YWx1ZSk7XG5cbiAgICAgICAgICBpZiAobGFyZ2VyKHYsIHBpbmYpKSB7XG4gICAgICAgICAgICBwaW5mID0gdjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgICByZXR1cm4gcGluZjtcbiAgICAgIH1cblxuICAgICAgaWYgKHAgPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWSB8fCBwID09PSAnLWluZicpIHtcbiAgICAgICAgLy8gbm9ybSh4LCAtSW5maW5pdHkpID0gbWluKGFicyh4KSlcbiAgICAgICAgdmFyIG5pbmY7IC8vIHNraXAgemVyb3Mgc2luY2UgYWJzKDApID09PSAwXG5cbiAgICAgICAgeC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIHZhciB2ID0gYWJzKHZhbHVlKTtcblxuICAgICAgICAgIGlmICghbmluZiB8fCBzbWFsbGVyKHYsIG5pbmYpKSB7XG4gICAgICAgICAgICBuaW5mID0gdjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgICByZXR1cm4gbmluZiB8fCAwO1xuICAgICAgfVxuXG4gICAgICBpZiAocCA9PT0gJ2ZybycpIHtcbiAgICAgICAgcmV0dXJuIF9ub3JtKHgsIDIpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHAgPT09ICdudW1iZXInICYmICFpc05hTihwKSkge1xuICAgICAgICAvLyBjaGVjayBwICE9IDBcbiAgICAgICAgaWYgKCFlcXVhbFNjYWxhcihwLCAwKSkge1xuICAgICAgICAgIC8vIG5vcm0oeCwgcCkgPSBzdW0oYWJzKHhpKSBeIHApIF4gMS9wXG4gICAgICAgICAgdmFyIG4gPSAwOyAvLyBza2lwIHplcm9zIHNpbmNlIGFicygwKSA9PT0gMFxuXG4gICAgICAgICAgeC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgbiA9IGFkZChwb3coYWJzKHZhbHVlKSwgcCksIG4pO1xuICAgICAgICAgIH0sIHRydWUpO1xuICAgICAgICAgIHJldHVybiBwb3cobiwgMSAvIHApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICAgIH0gLy8gaW52YWxpZCBwYXJhbWV0ZXIgdmFsdWVcblxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHBhcmFtZXRlciB2YWx1ZScpO1xuICAgIH0gLy8gTXhOIG1hdHJpeFxuXG5cbiAgICBpZiAoc2l6ZVgubGVuZ3RoID09PSAyKSB7XG4gICAgICAvLyBjaGVjayBwXG4gICAgICBpZiAocCA9PT0gMSkge1xuICAgICAgICAvLyBub3JtKHgpID0gdGhlIGxhcmdlc3QgY29sdW1uIHN1bVxuICAgICAgICB2YXIgYyA9IFtdOyAvLyByZXN1bHRcblxuICAgICAgICB2YXIgbWF4YyA9IDA7IC8vIHNraXAgemVyb3Mgc2luY2UgYWJzKDApID09IDBcblxuICAgICAgICB4LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkge1xuICAgICAgICAgIHZhciBqID0gaW5kZXhbMV07XG4gICAgICAgICAgdmFyIGNqID0gYWRkKGNbal0gfHwgMCwgYWJzKHZhbHVlKSk7XG5cbiAgICAgICAgICBpZiAobGFyZ2VyKGNqLCBtYXhjKSkge1xuICAgICAgICAgICAgbWF4YyA9IGNqO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNbal0gPSBjajtcbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBtYXhjO1xuICAgICAgfVxuXG4gICAgICBpZiAocCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIHx8IHAgPT09ICdpbmYnKSB7XG4gICAgICAgIC8vIG5vcm0oeCkgPSB0aGUgbGFyZ2VzdCByb3cgc3VtXG4gICAgICAgIHZhciByID0gW107IC8vIHJlc3VsdFxuXG4gICAgICAgIHZhciBtYXhyID0gMDsgLy8gc2tpcCB6ZXJvcyBzaW5jZSBhYnMoMCkgPT0gMFxuXG4gICAgICAgIHguZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7XG4gICAgICAgICAgdmFyIGkgPSBpbmRleFswXTtcbiAgICAgICAgICB2YXIgcmkgPSBhZGQocltpXSB8fCAwLCBhYnModmFsdWUpKTtcblxuICAgICAgICAgIGlmIChsYXJnZXIocmksIG1heHIpKSB7XG4gICAgICAgICAgICBtYXhyID0gcmk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcltpXSA9IHJpO1xuICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIG1heHI7XG4gICAgICB9XG5cbiAgICAgIGlmIChwID09PSAnZnJvJykge1xuICAgICAgICAvLyBub3JtKHgpID0gc3FydChzdW0oZGlhZyh4J3gpKSlcbiAgICAgICAgdmFyIGZybyA9IDA7XG4gICAgICAgIHguZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7XG4gICAgICAgICAgZnJvID0gYWRkKGZybywgbXVsdGlwbHkodmFsdWUsIGNvbmoodmFsdWUpKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYWJzKHNxcnQoZnJvKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwID09PSAyKSB7XG4gICAgICAgIC8vIG5vdCBpbXBsZW1lbnRlZFxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHBhcmFtZXRlciB2YWx1ZSwgbWlzc2luZyBpbXBsZW1lbnRhdGlvbiBvZiBtYXRyaXggc2luZ3VsYXIgdmFsdWUgZGVjb21wb3NpdGlvbicpO1xuICAgICAgfSAvLyBpbnZhbGlkIHBhcmFtZXRlciB2YWx1ZVxuXG5cbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgcGFyYW1ldGVyIHZhbHVlJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5vcm07XG59KTtcbmV4cG9ydHMuY3JlYXRlTm9ybSA9IGNyZWF0ZU5vcm07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU50aFJvb3ROdW1iZXIgPSBleHBvcnRzLmNyZWF0ZU50aFJvb3QgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMVwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAyXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDZcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMVwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTYgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnbnRoUm9vdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlTnRoUm9vdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcbiAgdmFyIGFsZ29yaXRobTAxID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wMiA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNiA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0wNikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG02LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBudGggcm9vdCBvZiBhIHZhbHVlLlxuICAgKiBUaGUgcHJpbmNpcGFsIG50aCByb290IG9mIGEgcG9zaXRpdmUgcmVhbCBudW1iZXIgQSwgaXMgdGhlIHBvc2l0aXZlIHJlYWxcbiAgICogc29sdXRpb24gb2YgdGhlIGVxdWF0aW9uXG4gICAqXG4gICAqICAgICB4XnJvb3QgPSBBXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgubnRoUm9vdChhKVxuICAgKiAgICAgbWF0aC5udGhSb290KGEsIHJvb3QpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5udGhSb290KDksIDIpICAgIC8vIHJldHVybnMgMywgYXMgM14yID09IDlcbiAgICogICAgIG1hdGguc3FydCg5KSAgICAgICAgICAvLyByZXR1cm5zIDMsIGFzIDNeMiA9PSA5XG4gICAqICAgICBtYXRoLm50aFJvb3QoNjQsIDMpICAgLy8gcmV0dXJucyA0LCBhcyA0XjMgPT0gNjRcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBzcXJ0LCBwb3dcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeCB8IENvbXBsZXh9IGFcbiAgICogICAgICAgICAgICAgIFZhbHVlIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIG50aCByb290XG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyfSBbcm9vdD0yXSAgICBUaGUgcm9vdC5cbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBSZXR1cm5zIHRoZSBudGggcm9vdCBvZiBgYWBcbiAgICovXG5cbiAgdmFyIGNvbXBsZXhFcnIgPSAnJyArICdDb21wbGV4IG51bWJlciBub3Qgc3VwcG9ydGVkIGluIGZ1bmN0aW9uIG50aFJvb3QuICcgKyAnVXNlIG50aFJvb3RzIGluc3RlYWQuJztcbiAgdmFyIG50aFJvb3QgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLm50aFJvb3ROdW1iZXIpKHgsIDIpO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5udGhSb290TnVtYmVyLFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBfYmlnTnRoUm9vdCh4LCBuZXcgX0JpZ051bWJlcigyKSk7XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihjb21wbGV4RXJyKTtcbiAgICB9LFxuICAgICdDb21wbGV4LCBudW1iZXInOiBmdW5jdGlvbiBDb21wbGV4TnVtYmVyKHgsIHkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihjb21wbGV4RXJyKTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IF9iaWdOdGhSb290LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiBudGhSb290KHgsIDIpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGRlbnNpdHkgbXVzdCBiZSBvbmUgKG5vIHplcm9zIGluIG1hdHJpeClcbiAgICAgIGlmICh5LmRlbnNpdHkoKSA9PT0gMSkge1xuICAgICAgICAvLyBzcGFyc2UgKyBzcGFyc2VcbiAgICAgICAgcmV0dXJuIGFsZ29yaXRobTA2KHgsIHksIG50aFJvb3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhyb3cgZXhjZXB0aW9uXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUm9vdCBtdXN0IGJlIG5vbi16ZXJvJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMih5LCB4LCBudGhSb290LCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gZGVuc2l0eSBtdXN0IGJlIG9uZSAobm8gemVyb3MgaW4gbWF0cml4KVxuICAgICAgaWYgKHkuZGVuc2l0eSgpID09PSAxKSB7XG4gICAgICAgIC8vIGRlbnNlICsgc3BhcnNlXG4gICAgICAgIHJldHVybiBhbGdvcml0aG0wMSh4LCB5LCBudGhSb290LCBmYWxzZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aHJvdyBleGNlcHRpb25cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSb290IG11c3QgYmUgbm9uLXplcm8nKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBudGhSb290KTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBudGhSb290KG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBudGhSb290KG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBudGhSb290KHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHgsIHksIG50aFJvb3QsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gRGVuc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIG50aFJvb3QsIGZhbHNlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBkZW5zaXR5IG11c3QgYmUgb25lIChubyB6ZXJvcyBpbiBtYXRyaXgpXG4gICAgICBpZiAoeS5kZW5zaXR5KCkgPT09IDEpIHtcbiAgICAgICAgLy8gc3BhcnNlIC0gc2NhbGFyXG4gICAgICAgIHJldHVybiBhbGdvcml0aG0xMSh5LCB4LCBudGhSb290LCB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRocm93IGV4Y2VwdGlvblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3QgbXVzdCBiZSBub24temVybycpO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgbnRoUm9vdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBudGhSb290KG1hdHJpeCh4KSwgeSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgQXJyYXknOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbnRoUm9vdCh4LCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbnRoUm9vdDtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbnRoIHJvb3Qgb2YgYSBmb3IgQmlnTnVtYmVycywgc29sdmUgeF5yb290ID09IGFcbiAgICogaHR0cHM6Ly9yb3NldHRhY29kZS5vcmcvd2lraS9OdGhfcm9vdCNKYXZhU2NyaXB0XG4gICAqIEBwYXJhbSB7QmlnTnVtYmVyfSBhXG4gICAqIEBwYXJhbSB7QmlnTnVtYmVyfSByb290XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9iaWdOdGhSb290KGEsIHJvb3QpIHtcbiAgICB2YXIgcHJlY2lzaW9uID0gX0JpZ051bWJlci5wcmVjaXNpb247XG5cbiAgICB2YXIgQmlnID0gX0JpZ051bWJlci5jbG9uZSh7XG4gICAgICBwcmVjaXNpb246IHByZWNpc2lvbiArIDJcbiAgICB9KTtcblxuICAgIHZhciB6ZXJvID0gbmV3IF9CaWdOdW1iZXIoMCk7XG4gICAgdmFyIG9uZSA9IG5ldyBCaWcoMSk7XG4gICAgdmFyIGludiA9IHJvb3QuaXNOZWdhdGl2ZSgpO1xuXG4gICAgaWYgKGludikge1xuICAgICAgcm9vdCA9IHJvb3QubmVnKCk7XG4gICAgfVxuXG4gICAgaWYgKHJvb3QuaXNaZXJvKCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUm9vdCBtdXN0IGJlIG5vbi16ZXJvJyk7XG4gICAgfVxuXG4gICAgaWYgKGEuaXNOZWdhdGl2ZSgpICYmICFyb290LmFicygpLm1vZCgyKS5lcXVhbHMoMSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUm9vdCBtdXN0IGJlIG9kZCB3aGVuIGEgaXMgbmVnYXRpdmUuJyk7XG4gICAgfSAvLyBlZGdlIGNhc2VzIHplcm8gYW5kIGluZmluaXR5XG5cblxuICAgIGlmIChhLmlzWmVybygpKSB7XG4gICAgICByZXR1cm4gaW52ID8gbmV3IEJpZyhJbmZpbml0eSkgOiAwO1xuICAgIH1cblxuICAgIGlmICghYS5pc0Zpbml0ZSgpKSB7XG4gICAgICByZXR1cm4gaW52ID8gemVybyA6IGE7XG4gICAgfVxuXG4gICAgdmFyIHggPSBhLmFicygpLnBvdyhvbmUuZGl2KHJvb3QpKTsgLy8gSWYgYSA8IDAsIHdlIHJlcXVpcmUgdGhhdCByb290IGlzIGFuIG9kZCBpbnRlZ2VyLFxuICAgIC8vIHNvICgtMSkgXiAoMS9yb290KSA9IC0xXG5cbiAgICB4ID0gYS5pc05lZygpID8geC5uZWcoKSA6IHg7XG4gICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKChpbnYgPyBvbmUuZGl2KHgpIDogeCkudG9QcmVjaXNpb24ocHJlY2lzaW9uKSk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVOdGhSb290ID0gY3JlYXRlTnRoUm9vdDtcbnZhciBjcmVhdGVOdGhSb290TnVtYmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIFsndHlwZWQnXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5udGhSb290TnVtYmVyLFxuICAgICdudW1iZXIsIG51bWJlcic6IF9udW1iZXIubnRoUm9vdE51bWJlclxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVOdGhSb290TnVtYmVyID0gY3JlYXRlTnRoUm9vdE51bWJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTnRoUm9vdHMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdudGhSb290cyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydjb25maWcnLCAndHlwZWQnLCAnZGl2aWRlU2NhbGFyJywgJ0NvbXBsZXgnXTtcbnZhciBjcmVhdGVOdGhSb290cyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBudGggcm9vdHMgb2YgYSB2YWx1ZS5cbiAgICogQW4gbnRoIHJvb3Qgb2YgYSBwb3NpdGl2ZSByZWFsIG51bWJlciBBLFxuICAgKiBpcyBhIHBvc2l0aXZlIHJlYWwgc29sdXRpb24gb2YgdGhlIGVxdWF0aW9uIFwieF5yb290ID0gQVwiLlxuICAgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gYXJyYXkgb2YgY29tcGxleCB2YWx1ZXMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5udGhSb290cyh4KVxuICAgKiAgICBtYXRoLm50aFJvb3RzKHgsIHJvb3QpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLm50aFJvb3RzKDEpXG4gICAqICAgIC8vIHJldHVybnMgW1xuICAgKiAgICAvLyAgIHtyZTogMSwgaW06IDB9LFxuICAgKiAgICAvLyAgIHtyZTogLTEsIGltOiAwfVxuICAgKiAgICAvLyBdXG4gICAqICAgIG50aFJvb3RzKDEsIDMpXG4gICAqICAgIC8vIHJldHVybnMgW1xuICAgKiAgICAvLyAgIHsgcmU6IDEsIGltOiAwIH0sXG4gICAqICAgIC8vICAgeyByZTogLTAuNDk5OTk5OTk5OTk5OTk5OCwgaW06IDAuODY2MDI1NDAzNzg0NDM4NyB9LFxuICAgKiAgICAvLyAgIHsgcmU6IC0wLjUwMDAwMDAwMDAwMDAwMDQsIGltOiAtMC44NjYwMjU0MDM3ODQ0Mzg1IH1cbiAgICogICAgXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbnRoUm9vdCwgcG93LCBzcXJ0XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggTnVtYmVyIHRvIGJlIHJvdW5kZWRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICAgUm91bmRlZCB2YWx1ZVxuICAgKi9cbiAgdmFyIG50aFJvb3RzID0gdHlwZWQobmFtZSwge1xuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIF9udGhDb21wbGV4Um9vdHMoeCwgMik7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgbnVtYmVyJzogX250aENvbXBsZXhSb290c1xuICB9KTtcbiAgLyoqXG4gICAqIEVhY2ggZnVuY3Rpb24gaGVyZSByZXR1cm5zIGEgcmVhbCBtdWx0aXBsZSBvZiBpIGFzIGEgQ29tcGxleCB2YWx1ZS5cbiAgICogQHBhcmFtICB7bnVtYmVyfSB2YWxcbiAgICogQHJldHVybiB7Q29tcGxleH0gdmFsLCBpKnZhbCwgLXZhbCBvciAtaSp2YWwgZm9yIGluZGV4IDAsIDEsIDIsIDNcbiAgICovXG4gIC8vIFRoaXMgaXMgdXNlZCB0byBmaXggZmxvYXQgYXJ0aWZhY3RzIGZvciB6ZXJvLXZhbHVlZCBjb21wb25lbnRzLlxuXG4gIHZhciBfY2FsY3VsYXRlRXhhY3RSZXN1bHQgPSBbZnVuY3Rpb24gcmVhbFBvcyh2YWwpIHtcbiAgICByZXR1cm4gbmV3IENvbXBsZXgodmFsLCAwKTtcbiAgfSwgZnVuY3Rpb24gaW1hZ1Bvcyh2YWwpIHtcbiAgICByZXR1cm4gbmV3IENvbXBsZXgoMCwgdmFsKTtcbiAgfSwgZnVuY3Rpb24gcmVhbE5lZyh2YWwpIHtcbiAgICByZXR1cm4gbmV3IENvbXBsZXgoLXZhbCwgMCk7XG4gIH0sIGZ1bmN0aW9uIGltYWdOZWcodmFsKSB7XG4gICAgcmV0dXJuIG5ldyBDb21wbGV4KDAsIC12YWwpO1xuICB9XTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbnRoIHJvb3Qgb2YgYSBDb21wbGV4IE51bWJlciBhIHVzaW5nIERlIE1vdmlyZSdzIFRoZW9yZW0uXG4gICAqIEBwYXJhbSAge0NvbXBsZXh9IGFcbiAgICogQHBhcmFtICB7bnVtYmVyfSByb290XG4gICAqIEByZXR1cm4ge0FycmF5fSBhcnJheSBvZiBuIENvbXBsZXggUm9vdHNcbiAgICovXG5cbiAgZnVuY3Rpb24gX250aENvbXBsZXhSb290cyhhLCByb290KSB7XG4gICAgaWYgKHJvb3QgPCAwKSB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3QgbXVzdCBiZSBncmVhdGVyIHRoYW4gemVybycpO1xuICAgIGlmIChyb290ID09PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3QgbXVzdCBiZSBub24temVybycpO1xuICAgIGlmIChyb290ICUgMSAhPT0gMCkgdGhyb3cgbmV3IEVycm9yKCdSb290IG11c3QgYmUgYW4gaW50ZWdlcicpO1xuICAgIGlmIChhID09PSAwIHx8IGEuYWJzKCkgPT09IDApIHJldHVybiBbbmV3IENvbXBsZXgoMCwgMCldO1xuICAgIHZhciBhSXNOdW1lcmljID0gdHlwZW9mIGEgPT09ICdudW1iZXInO1xuICAgIHZhciBvZmZzZXQ7IC8vIGRldGVybWluZSB0aGUgb2Zmc2V0IChhcmd1bWVudCBvZiBhKS8ocGkvMilcblxuICAgIGlmIChhSXNOdW1lcmljIHx8IGEucmUgPT09IDAgfHwgYS5pbSA9PT0gMCkge1xuICAgICAgaWYgKGFJc051bWVyaWMpIHtcbiAgICAgICAgb2Zmc2V0ID0gMiAqICsoYSA8IDApOyAvLyBudW1lcmljIHZhbHVlIG9uIHRoZSByZWFsIGF4aXNcbiAgICAgIH0gZWxzZSBpZiAoYS5pbSA9PT0gMCkge1xuICAgICAgICBvZmZzZXQgPSAyICogKyhhLnJlIDwgMCk7IC8vIGNvbXBsZXggdmFsdWUgb24gdGhlIHJlYWwgYXhpc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2Zmc2V0ID0gMiAqICsoYS5pbSA8IDApICsgMTsgLy8gY29tcGxleCB2YWx1ZSBvbiB0aGUgaW1hZ2luYXJ5IGF4aXNcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYXJnID0gYS5hcmcoKTtcbiAgICB2YXIgYWJzID0gYS5hYnMoKTtcbiAgICB2YXIgcm9vdHMgPSBbXTtcbiAgICB2YXIgciA9IE1hdGgucG93KGFicywgMSAvIHJvb3QpO1xuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCByb290OyBrKyspIHtcbiAgICAgIHZhciBoYWxmUGlGYWN0b3IgPSAob2Zmc2V0ICsgNCAqIGspIC8gcm9vdDtcbiAgICAgIC8qKlxuICAgICAgICogSWYgKG9mZnNldCArIDQqaykvcm9vdCBpcyBhbiBpbnRlZ3JhbCBtdWx0aXBsZSBvZiBwaS8yXG4gICAgICAgKiB0aGVuIHdlIGNhbiBwcm9kdWNlIGEgbW9yZSBleGFjdCByZXN1bHQuXG4gICAgICAgKi9cblxuICAgICAgaWYgKGhhbGZQaUZhY3RvciA9PT0gTWF0aC5yb3VuZChoYWxmUGlGYWN0b3IpKSB7XG4gICAgICAgIHJvb3RzLnB1c2goX2NhbGN1bGF0ZUV4YWN0UmVzdWx0W2hhbGZQaUZhY3RvciAlIDRdKHIpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIHJvb3RzLnB1c2gobmV3IENvbXBsZXgoe1xuICAgICAgICByOiByLFxuICAgICAgICBwaGk6IChhcmcgKyAyICogTWF0aC5QSSAqIGspIC8gcm9vdFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHJldHVybiByb290cztcbiAgfVxuXG4gIHJldHVybiBudGhSb290cztcbn0pO1xuZXhwb3J0cy5jcmVhdGVOdGhSb290cyA9IGNyZWF0ZU50aFJvb3RzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVQb3cgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfbnVtYmVyMiA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3Bvdyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnaWRlbnRpdHknLCAnbXVsdGlwbHknLCAnbWF0cml4JywgJ2ZyYWN0aW9uJywgJ251bWJlcicsICdDb21wbGV4J107XG52YXIgY3JlYXRlUG93ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgaWRlbnRpdHkgPSBfcmVmLmlkZW50aXR5LFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBudW1iZXIgPSBfcmVmLm51bWJlcixcbiAgICAgIGZyYWN0aW9uID0gX3JlZi5mcmFjdGlvbixcbiAgICAgIENvbXBsZXggPSBfcmVmLkNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHBvd2VyIG9mIHggdG8geSwgYHggXiB5YC5cbiAgICogTWF0cml4IGV4cG9uZW50aWF0aW9uIGlzIHN1cHBvcnRlZCBmb3Igc3F1YXJlIG1hdHJpY2VzIGB4YCwgYW5kIHBvc2l0aXZlXG4gICAqIGludGVnZXIgZXhwb25lbnRzIGB5YC5cbiAgICpcbiAgICogRm9yIGN1YmljIHJvb3RzIG9mIG5lZ2F0aXZlIG51bWJlcnMsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHRoZSBwcmluY2lwYWxcbiAgICogcm9vdCBieSBkZWZhdWx0LiBJbiBvcmRlciB0byBsZXQgdGhlIGZ1bmN0aW9uIHJldHVybiB0aGUgcmVhbCByb290LFxuICAgKiBtYXRoLmpzIGNhbiBiZSBjb25maWd1cmVkIHdpdGggYG1hdGguY29uZmlnKHtwcmVkaWN0YWJsZTogdHJ1ZX0pYC5cbiAgICogVG8gcmV0cmlldmUgYWxsIGN1YmljIHJvb3RzIG9mIGEgdmFsdWUsIHVzZSBgbWF0aC5jYnJ0KHgsIHRydWUpYC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnBvdyh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5wb3coMiwgMykgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA4XG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLmNvbXBsZXgoMiwgMylcbiAgICogICAgbWF0aC5wb3coYSwgMikgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IC01ICsgMTJpXG4gICAqXG4gICAqICAgIGNvbnN0IGIgPSBbWzEsIDJdLCBbNCwgM11dXG4gICAqICAgIG1hdGgucG93KGIsIDIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBBcnJheSBbWzksIDhdLCBbMTYsIDE3XV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIG11bHRpcGx5LCBzcXJ0LCBjYnJ0LCBudGhSb290XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIFRoZSBiYXNlXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXh9IHkgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBleHBvbmVudFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFRoZSB2YWx1ZSBvZiBgeGAgdG8gdGhlIHBvd2VyIGB5YFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfcG93LFxuICAgICdDb21wbGV4LCBDb21wbGV4JzogZnVuY3Rpb24gQ29tcGxleENvbXBsZXgoeCwgeSkge1xuICAgICAgcmV0dXJuIHgucG93KHkpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIGlmICh5LmlzSW50ZWdlcigpIHx8IHggPj0gMCB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIHgucG93KHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgudG9OdW1iZXIoKSwgMCkucG93KHkudG9OdW1iZXIoKSwgMCk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7XG4gICAgICBpZiAoeS5kICE9PSAxKSB7XG4gICAgICAgIGlmIChjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Z1bmN0aW9uIHBvdyBkb2VzIG5vdCBzdXBwb3J0IG5vbi1pbnRlZ2VyIGV4cG9uZW50cyBmb3IgZnJhY3Rpb25zLicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBfcG93KHgudmFsdWVPZigpLCB5LnZhbHVlT2YoKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB4LnBvdyh5KTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdBcnJheSwgbnVtYmVyJzogX3Bvd0FycmF5LFxuICAgICdBcnJheSwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIF9wb3dBcnJheSh4LCB5LnRvTnVtYmVyKCkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgbnVtYmVyJzogX3Bvd01hdHJpeCxcbiAgICAnTWF0cml4LCBCaWdOdW1iZXInOiBmdW5jdGlvbiBNYXRyaXhCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIF9wb3dNYXRyaXgoeCwgeS50b051bWJlcigpKTtcbiAgICB9LFxuICAgICdVbml0LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBVbml0TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4LnBvdyh5KTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgcG93ZXIgb2YgeCB0byB5LCB4XnksIGZvciB0d28gbnVtYmVycy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHlcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleH0gcmVzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9wb3coeCwgeSkge1xuICAgIC8vIEFsdGVybmF0aXZlbHkgY291bGQgZGVmaW5lIGEgJ3JlYWxtb2RlJyBjb25maWcgb3B0aW9uIG9yIHNvbWV0aGluZywgYnV0XG4gICAgLy8gJ3ByZWRpY3RhYmxlJyB3aWxsIHdvcmsgZm9yIG5vd1xuICAgIGlmIChjb25maWcucHJlZGljdGFibGUgJiYgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeSkgJiYgeCA8IDApIHtcbiAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB5IGNhbiBiZSByZXByZXNlbnRlZCBhcyBhIGZyYWN0aW9uXG4gICAgICB0cnkge1xuICAgICAgICB2YXIgeUZyYWMgPSBmcmFjdGlvbih5KTtcbiAgICAgICAgdmFyIHlOdW0gPSBudW1iZXIoeUZyYWMpO1xuXG4gICAgICAgIGlmICh5ID09PSB5TnVtIHx8IE1hdGguYWJzKCh5IC0geU51bSkgLyB5KSA8IDFlLTE0KSB7XG4gICAgICAgICAgaWYgKHlGcmFjLmQgJSAyID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gKHlGcmFjLm4gJSAyID09PSAwID8gMSA6IC0xKSAqIE1hdGgucG93KC14LCB5KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGV4KSB7fSAvLyBmcmFjdGlvbigpIHRocm93cyBhbiBlcnJvciBpZiB5IGlzIEluZmluaXR5LCBldGMuXG4gICAgICAvLyBVbmFibGUgdG8gZXhwcmVzcyB5IGFzIGEgZnJhY3Rpb24sIHNvIGNvbnRpbnVlIG9uXG5cbiAgICB9IC8vICoqZm9yIHByZWRpY3RhYmxlIG1vZGUqKiB4XkluZmluaXR5ID09PSBOYU4gaWYgeCA8IC0xXG4gICAgLy8gTi5CLiB0aGlzIGJlaGF2b3VyIGlzIGRpZmZlcmVudCBmcm9tIGBNYXRoLnBvd2Agd2hpY2ggZ2l2ZXNcbiAgICAvLyAoLTIpXkluZmluaXR5ID09PSBJbmZpbml0eVxuXG5cbiAgICBpZiAoY29uZmlnLnByZWRpY3RhYmxlICYmICh4IDwgLTEgJiYgeSA9PT0gSW5maW5pdHkgfHwgeCA+IC0xICYmIHggPCAwICYmIHkgPT09IC1JbmZpbml0eSkpIHtcbiAgICAgIHJldHVybiBOYU47XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeSkgfHwgeCA+PSAwIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgcmV0dXJuICgwLCBfbnVtYmVyMi5wb3dOdW1iZXIpKHgsIHkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUT0RPOiB0aGUgZm9sbG93aW5nIGluZmluaXR5IGNoZWNrcyBhcmUgZHVwbGljYXRlZCBmcm9tIHBvd051bWJlci4gRGVkdXBsaWNhdGUgdGhpcyBzb21laG93XG4gICAgICAvLyB4XkluZmluaXR5ID09PSAwIGlmIC0xIDwgeCA8IDFcbiAgICAgIC8vIEEgcmVhbCBudW1iZXIgMCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGNvbXBsZXgoMClcbiAgICAgIGlmICh4ICogeCA8IDEgJiYgeSA9PT0gSW5maW5pdHkgfHwgeCAqIHggPiAxICYmIHkgPT09IC1JbmZpbml0eSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgsIDApLnBvdyh5LCAwKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgcG93ZXIgb2YgYSAyZCBhcnJheVxuICAgKiBAcGFyYW0ge0FycmF5fSB4ICAgICBtdXN0IGJlIGEgMiBkaW1lbnNpb25hbCwgc3F1YXJlIG1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlcn0geSAgICBhIHBvc2l0aXZlLCBpbnRlZ2VyIHZhbHVlXG4gICAqIEByZXR1cm5zIHtBcnJheX1cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfcG93QXJyYXkoeCwgeSkge1xuICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh5KSB8fCB5IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRm9yIEFeYiwgYiBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciAodmFsdWUgaXMgJyArIHkgKyAnKScpO1xuICAgIH0gLy8gdmVyaWZ5IHRoYXQgQSBpcyBhIDIgZGltZW5zaW9uYWwgc3F1YXJlIG1hdHJpeFxuXG5cbiAgICB2YXIgcyA9ICgwLCBfYXJyYXkuYXJyYXlTaXplKSh4KTtcblxuICAgIGlmIChzLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3IgQV5iLCBBIG11c3QgYmUgMiBkaW1lbnNpb25hbCAoQSBoYXMgJyArIHMubGVuZ3RoICsgJyBkaW1lbnNpb25zKScpO1xuICAgIH1cblxuICAgIGlmIChzWzBdICE9PSBzWzFdKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvciBBXmIsIEEgbXVzdCBiZSBzcXVhcmUgKHNpemUgaXMgJyArIHNbMF0gKyAneCcgKyBzWzFdICsgJyknKTtcbiAgICB9XG5cbiAgICB2YXIgcmVzID0gaWRlbnRpdHkoc1swXSkudmFsdWVPZigpO1xuICAgIHZhciBweCA9IHg7XG5cbiAgICB3aGlsZSAoeSA+PSAxKSB7XG4gICAgICBpZiAoKHkgJiAxKSA9PT0gMSkge1xuICAgICAgICByZXMgPSBtdWx0aXBseShweCwgcmVzKTtcbiAgICAgIH1cblxuICAgICAgeSA+Pj0gMTtcbiAgICAgIHB4ID0gbXVsdGlwbHkocHgsIHB4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHBvd2VyIG9mIGEgMmQgbWF0cml4XG4gICAqIEBwYXJhbSB7TWF0cml4fSB4ICAgICBtdXN0IGJlIGEgMiBkaW1lbnNpb25hbCwgc3F1YXJlIG1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlcn0geSAgICBhIHBvc2l0aXZlLCBpbnRlZ2VyIHZhbHVlXG4gICAqIEByZXR1cm5zIHtNYXRyaXh9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3Bvd01hdHJpeCh4LCB5KSB7XG4gICAgcmV0dXJuIG1hdHJpeChfcG93QXJyYXkoeC52YWx1ZU9mKCksIHkpKTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVBvdyA9IGNyZWF0ZVBvdzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUm91bmROdW1iZXIgPSBleHBvcnRzLmNyZWF0ZVJvdW5kID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTFcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMlwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX251bWJlcjIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgaWYgKGVudW1lcmFibGVPbmx5KSBzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSk7IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxudmFyIE5PX0lOVCA9ICdOdW1iZXIgb2YgZGVjaW1hbHMgaW4gZnVuY3Rpb24gcm91bmQgbXVzdCBiZSBhbiBpbnRlZ2VyJztcbnZhciBuYW1lID0gJ3JvdW5kJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICd6ZXJvcycsICdCaWdOdW1iZXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVSb3VuZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIHplcm9zID0gX3JlZi56ZXJvcyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMTEgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIFJvdW5kIGEgdmFsdWUgdG93YXJkcyB0aGUgbmVhcmVzdCBpbnRlZ2VyLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgucm91bmQoeClcbiAgICogICAgbWF0aC5yb3VuZCh4LCBuKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5yb3VuZCgzLjIpICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzXG4gICAqICAgIG1hdGgucm91bmQoMy44KSAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNFxuICAgKiAgICBtYXRoLnJvdW5kKC00LjIpICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC00XG4gICAqICAgIG1hdGgucm91bmQoLTQuNykgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTVcbiAgICogICAgbWF0aC5yb3VuZChtYXRoLnBpLCAzKSAgICAgICAvLyByZXR1cm5zIG51bWJlciAzLjE0MlxuICAgKiAgICBtYXRoLnJvdW5kKDEyMy40NTY3OCwgMikgICAgIC8vIHJldHVybnMgbnVtYmVyIDEyMy40NlxuICAgKlxuICAgKiAgICBjb25zdCBjID0gbWF0aC5jb21wbGV4KDMuMiwgLTIuNylcbiAgICogICAgbWF0aC5yb3VuZChjKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggMyAtIDNpXG4gICAqXG4gICAqICAgIG1hdGgucm91bmQoWzMuMiwgMy44LCAtNC43XSkgLy8gcmV0dXJucyBBcnJheSBbMywgNCwgLTVdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjZWlsLCBmaXgsIGZsb29yXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBOdW1iZXIgdG8gYmUgcm91bmRlZFxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheX0gW249MF0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGRlY2ltYWxzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBSb3VuZGVkIHZhbHVlXG4gICAqL1xuXG4gIHZhciByb3VuZCA9IHR5cGVkKG5hbWUsIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgcm91bmROdW1iZXJTaWduYXR1cmVzKSwge30sIHtcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LnJvdW5kKCk7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgbnVtYmVyJzogZnVuY3Rpb24gQ29tcGxleE51bWJlcih4LCBuKSB7XG4gICAgICBpZiAobiAlIDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihOT19JTlQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geC5yb3VuZChuKTtcbiAgICB9LFxuICAgICdDb21wbGV4LCBCaWdOdW1iZXInOiBmdW5jdGlvbiBDb21wbGV4QmlnTnVtYmVyKHgsIG4pIHtcbiAgICAgIGlmICghbi5pc0ludGVnZXIoKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKE5PX0lOVCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBfbiA9IG4udG9OdW1iZXIoKTtcblxuICAgICAgcmV0dXJuIHgucm91bmQoX24pO1xuICAgIH0sXG4gICAgJ251bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyKHgsIG4pIHtcbiAgICAgIGlmICghbi5pc0ludGVnZXIoKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKE5PX0lOVCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKHgpLnRvRGVjaW1hbFBsYWNlcyhuLnRvTnVtYmVyKCkpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHgudG9EZWNpbWFsUGxhY2VzKDApO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIG4pIHtcbiAgICAgIGlmICghbi5pc0ludGVnZXIoKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKE5PX0lOVCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB4LnRvRGVjaW1hbFBsYWNlcyhuLnRvTnVtYmVyKCkpO1xuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4LnJvdW5kKCk7XG4gICAgfSxcbiAgICAnRnJhY3Rpb24sIG51bWJlcic6IGZ1bmN0aW9uIEZyYWN0aW9uTnVtYmVyKHgsIG4pIHtcbiAgICAgIGlmIChuICUgMSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKE5PX0lOVCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB4LnJvdW5kKG4pO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSByb3VuZCgwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgcm91bmQsIHRydWUpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gU3BhcnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCByb3VuZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBEZW5zZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgcm91bmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBDb21wbGV4IHwgQmlnTnVtYmVyLCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJDb21wbGV4QmlnTnVtYmVyU3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhciBpcyB6ZXJvXG4gICAgICBpZiAoZXF1YWxTY2FsYXIoeCwgMCkpIHtcbiAgICAgICAgLy8gZG8gbm90IGV4ZWN1dGUgYWxnb3JpdGhtLCByZXN1bHQgd2lsbCBiZSBhIHplcm8gbWF0cml4XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgcm91bmQsIHRydWUpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IENvbXBsZXggfCBCaWdOdW1iZXIsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyQ29tcGxleEJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhciBpcyB6ZXJvXG4gICAgICBpZiAoZXF1YWxTY2FsYXIoeCwgMCkpIHtcbiAgICAgICAgLy8gZG8gbm90IGV4ZWN1dGUgYWxnb3JpdGhtLCByZXN1bHQgd2lsbCBiZSBhIHplcm8gbWF0cml4XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgcm91bmQsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheU51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCByb3VuZCwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBDb21wbGV4IHwgQmlnTnVtYmVyLCBBcnJheSc6IGZ1bmN0aW9uIG51bWJlckNvbXBsZXhCaWdOdW1iZXJBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCByb3VuZCwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSkpO1xuICByZXR1cm4gcm91bmQ7XG59KTtcbmV4cG9ydHMuY3JlYXRlUm91bmQgPSBjcmVhdGVSb3VuZDtcbnZhciByb3VuZE51bWJlclNpZ25hdHVyZXMgPSB7XG4gIG51bWJlcjogX251bWJlcjIucm91bmROdW1iZXIsXG4gICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCBuKSB7XG4gICAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKG4pKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKE5PX0lOVCk7XG4gICAgfVxuXG4gICAgaWYgKG4gPCAwIHx8IG4gPiAxNSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdOdW1iZXIgb2YgZGVjaW1hbHMgaW4gZnVuY3Rpb24gcm91bmQgbXVzdCBiZSBpbiB0ZSByYW5nZSBvZiAwLTE1Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfbnVtYmVyMi5yb3VuZE51bWJlcikoeCwgbik7XG4gIH1cbn07XG52YXIgY3JlYXRlUm91bmROdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCddLCBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgdmFyIHR5cGVkID0gX3JlZjIudHlwZWQ7XG4gIHJldHVybiB0eXBlZChuYW1lLCByb3VuZE51bWJlclNpZ25hdHVyZXMpO1xufSk7XG5leHBvcnRzLmNyZWF0ZVJvdW5kTnVtYmVyID0gY3JlYXRlUm91bmROdW1iZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNpZ24gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdzaWduJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0JpZ051bWJlcicsICdGcmFjdGlvbicsICdjb21wbGV4J107XG52YXIgY3JlYXRlU2lnbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBfQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXIsXG4gICAgICBjb21wbGV4ID0gX3JlZi5jb21wbGV4LFxuICAgICAgX0ZyYWN0aW9uID0gX3JlZi5GcmFjdGlvbjtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgc2lnbiBvZiBhIHZhbHVlLiBUaGUgc2lnbiBvZiBhIHZhbHVlIHggaXM6XG4gICAqXG4gICAqIC0gIDEgd2hlbiB4ID4gMFxuICAgKiAtIC0xIHdoZW4geCA8IDBcbiAgICogLSAgMCB3aGVuIHggPT0gMFxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2lnbih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zaWduKDMuNSkgICAgICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICogICAgbWF0aC5zaWduKC00LjIpICAgICAgICAgICAgICAvLyByZXR1cm5zIC0xXG4gICAqICAgIG1hdGguc2lnbigwKSAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAwXG4gICAqXG4gICAqICAgIG1hdGguc2lnbihbMywgNSwgLTIsIDAsIDJdKSAgLy8gcmV0dXJucyBbMSwgMSwgLTEsIDAsIDFdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhYnNcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXggfCBVbml0fSB4XG4gICAqICAgICAgICAgICAgVGhlIG51bWJlciBmb3Igd2hpY2ggdG8gZGV0ZXJtaW5lIHRoZSBzaWduXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4IHwgVW5pdH1lXG4gICAqICAgICAgICAgICAgVGhlIHNpZ24gb2YgYHhgXG4gICAqL1xuICB2YXIgc2lnbiA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuc2lnbk51bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmltID09PSAwID8gY29tcGxleCgoMCwgX251bWJlci5zaWduTnVtYmVyKSh4LnJlKSkgOiB4LnNpZ24oKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcih4LmNtcCgwKSk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIG5ldyBfRnJhY3Rpb24oeC5zLCAxKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2Ugc2lnbigwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgc2lnbiwgdHJ1ZSk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIHJldHVybiBzaWduKHgudmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzaWduO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNpZ24gPSBjcmVhdGVTaWduOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcXJ0ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ3NxcnQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ3R5cGVkJywgJ0NvbXBsZXgnXTtcbnZhciBjcmVhdGVTcXJ0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBzcXVhcmUgcm9vdCBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc3FydCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zcXJ0KDI1KSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDVcbiAgICogICAgbWF0aC5zcXVhcmUoNSkgICAgICAgICAgICAgICAvLyByZXR1cm5zIDI1XG4gICAqICAgIG1hdGguc3FydCgtNCkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDJpXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzcXVhcmUsIG11bHRpcGx5LCBjdWJlLCBjYnJ0LCBzcXJ0bVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeCB8IFVuaXR9IHhcbiAgICogICAgICAgICAgICBWYWx1ZSBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBzcXVhcmUgcm9vdC5cbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4IHwgVW5pdH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRoZSBzcXVhcmUgcm9vdCBvZiBgeGBcbiAgICovXG4gIHZhciBzcXJ0ID0gdHlwZWQoJ3NxcnQnLCB7XG4gICAgbnVtYmVyOiBfc3FydE51bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LnNxcnQoKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIGlmICgheC5pc05lZ2F0aXZlKCkgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiB4LnNxcnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG5lZ2F0aXZlIHZhbHVlIC0+IGRvd25ncmFkZSB0byBudW1iZXIgdG8gZG8gY29tcGxleCB2YWx1ZSBjb21wdXRhdGlvblxuICAgICAgICByZXR1cm4gX3NxcnROdW1iZXIoeC50b051bWJlcigpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2Ugc3FydCgwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgc3FydCwgdHJ1ZSk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIC8vIFNvbWVkYXkgd2lsbCB3b3JrIGZvciBjb21wbGV4IHVuaXRzIHdoZW4gdGhleSBhcmUgaW1wbGVtZW50ZWRcbiAgICAgIHJldHVybiB4LnBvdygwLjUpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgc3FydCBmb3IgYSBudW1iZXJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHhcbiAgICogQHJldHVybnMge251bWJlciB8IENvbXBsZXh9IFJldHVybnMgdGhlIHNxdWFyZSByb290IG9mIHhcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX3NxcnROdW1iZXIoeCkge1xuICAgIGlmIChpc05hTih4KSkge1xuICAgICAgcmV0dXJuIE5hTjtcbiAgICB9IGVsc2UgaWYgKHggPj0gMCB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgIHJldHVybiBNYXRoLnNxcnQoeCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5zcXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNxcnQ7XG59KTtcbmV4cG9ydHMuY3JlYXRlU3FydCA9IGNyZWF0ZVNxcnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNxdWFyZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3NxdWFyZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZVNxdWFyZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIHNxdWFyZSBvZiBhIHZhbHVlLCBgeCAqIHhgLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc3F1YXJlKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNxdWFyZSgyKSAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNFxuICAgKiAgICBtYXRoLnNxdWFyZSgzKSAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgOVxuICAgKiAgICBtYXRoLnBvdygzLCAyKSAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgOVxuICAgKiAgICBtYXRoLm11bHRpcGx5KDMsIDMpICAgICAgLy8gcmV0dXJucyBudW1iZXIgOVxuICAgKlxuICAgKiAgICBtYXRoLnNxdWFyZShbMSwgMiwgMywgNF0pICAvLyByZXR1cm5zIEFycmF5IFsxLCA0LCA5LCAxNl1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIG11bHRpcGx5LCBjdWJlLCBzcXJ0LCBwb3dcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXggfCBVbml0fSB4XG4gICAqICAgICAgICAgICAgTnVtYmVyIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIHNxdWFyZVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeCB8IFVuaXR9XG4gICAqICAgICAgICAgICAgU3F1YXJlZCB2YWx1ZVxuICAgKi9cbiAgdmFyIHNxdWFyZSA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuc3F1YXJlTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHgubXVsKHgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHgudGltZXMoeCk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHgubXVsKHgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBzcXVhcmUoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHNxdWFyZSwgdHJ1ZSk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIHJldHVybiB4LnBvdygyKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc3F1YXJlO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNxdWFyZSA9IGNyZWF0ZVNxdWFyZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3VidHJhY3QgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMVwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDVcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTYgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBuYW1lID0gJ3N1YnRyYWN0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICdhZGRTY2FsYXInLCAndW5hcnlNaW51cycsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZVN1YnRyYWN0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICB1bmFyeU1pbnVzID0gX3JlZi51bmFyeU1pbnVzLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICAvLyBUT0RPOiBzcGxpdCBmdW5jdGlvbiBzdWJ0cmFjdCBpbiB0d286IHN1YnRyYWN0IGFuZCBzdWJ0cmFjdFNjYWxhclxuICB2YXIgYWxnb3JpdGhtMDEgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMSkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTAzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDUgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMDUpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTAgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTApKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNi5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIFN1YnRyYWN0IHR3byB2YWx1ZXMsIGB4IC0geWAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zdWJ0cmFjdCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zdWJ0cmFjdCg1LjMsIDIpICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzLjNcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAzKVxuICAgKiAgICBjb25zdCBiID0gbWF0aC5jb21wbGV4KDQsIDEpXG4gICAqICAgIG1hdGguc3VidHJhY3QoYSwgYikgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IC0yICsgMmlcbiAgICpcbiAgICogICAgbWF0aC5zdWJ0cmFjdChbNSwgNywgNF0sIDQpICAvLyByZXR1cm5zIEFycmF5IFsxLCAzLCAwXVxuICAgKlxuICAgKiAgICBjb25zdCBjID0gbWF0aC51bml0KCcyLjEga20nKVxuICAgKiAgICBjb25zdCBkID0gbWF0aC51bml0KCc1MDBtJylcbiAgICogICAgbWF0aC5zdWJ0cmFjdChjLCBkKSAgICAgICAgICAvLyByZXR1cm5zIFVuaXQgMS42IGttXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhZGRcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4XG4gICAqICAgICAgICAgICAgSW5pdGlhbCB2YWx1ZVxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHlcbiAgICogICAgICAgICAgICBWYWx1ZSB0byBzdWJ0cmFjdCBmcm9tIGB4YFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9XG4gICAqICAgICAgICAgICAgU3VidHJhY3Rpb24gb2YgYHhgIGFuZCBgeWBcbiAgICovXG5cbiAgdmFyIHN1YnRyYWN0ID0gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geCAtIHk7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgQ29tcGxleCc6IGZ1bmN0aW9uIENvbXBsZXhDb21wbGV4KHgsIHkpIHtcbiAgICAgIHJldHVybiB4LnN1Yih5KTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC5taW51cyh5KTtcbiAgICB9LFxuICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiB4LnN1Yih5KTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgaWYgKHgudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXIgeCBjb250YWlucyBhIHVuaXQgd2l0aCB1bmRlZmluZWQgdmFsdWUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHkudmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXIgeSBjb250YWlucyBhIHVuaXQgd2l0aCB1bmRlZmluZWQgdmFsdWUnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCF4LmVxdWFsQmFzZSh5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuaXRzIGRvIG5vdCBtYXRjaCcpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzID0geC5jbG9uZSgpO1xuICAgICAgcmVzLnZhbHVlID0gc3VidHJhY3QocmVzLnZhbHVlLCB5LnZhbHVlKTtcbiAgICAgIHJlcy5maXhQcmVmaXggPSBmYWxzZTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgY2hlY2tFcXVhbERpbWVuc2lvbnMoeCwgeSk7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDUoeCwgeSwgc3VidHJhY3QpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICBjaGVja0VxdWFsRGltZW5zaW9ucyh4LCB5KTtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCBzdWJ0cmFjdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIGNoZWNrRXF1YWxEaW1lbnNpb25zKHgsIHkpO1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAxKHgsIHksIHN1YnRyYWN0LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICBjaGVja0VxdWFsRGltZW5zaW9ucyh4LCB5KTtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBzdWJ0cmFjdCk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gc3VidHJhY3QobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHN1YnRyYWN0KG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBzdWJ0cmFjdCh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh4LCB1bmFyeU1pbnVzKHkpLCBhZGRTY2FsYXIpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgc3VidHJhY3QpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh5LCB4LCBzdWJ0cmFjdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBzdWJ0cmFjdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIHN1YnRyYWN0LCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBzdWJ0cmFjdCwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzdWJ0cmFjdDtcbn0pO1xuLyoqXG4gKiBDaGVjayB3aGV0aGVyIG1hdHJpeCB4IGFuZCB5IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGRpbWVuc2lvbnMuXG4gKiBUaHJvd3MgYSBEaW1lbnNpb25FcnJvciB3aGVuIGRpbWVuc2lvbnMgYXJlIG5vdCBlcXVhbFxuICogQHBhcmFtIHtNYXRyaXh9IHhcbiAqIEBwYXJhbSB7TWF0cml4fSB5XG4gKi9cblxuZXhwb3J0cy5jcmVhdGVTdWJ0cmFjdCA9IGNyZWF0ZVN1YnRyYWN0O1xuXG5mdW5jdGlvbiBjaGVja0VxdWFsRGltZW5zaW9ucyh4LCB5KSB7XG4gIHZhciB4c2l6ZSA9IHguc2l6ZSgpO1xuICB2YXIgeXNpemUgPSB5LnNpemUoKTtcblxuICBpZiAoeHNpemUubGVuZ3RoICE9PSB5c2l6ZS5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKHhzaXplLmxlbmd0aCwgeXNpemUubGVuZ3RoKTtcbiAgfVxufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbmFyeU1pbnVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAndW5hcnlNaW51cyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZVVuYXJ5TWludXMgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBJbnZlcnNlIHRoZSBzaWduIG9mIGEgdmFsdWUsIGFwcGx5IGEgdW5hcnkgbWludXMgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLiBCb29sZWFuIHZhbHVlcyBhbmRcbiAgICogc3RyaW5ncyB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIG51bWJlci4gRm9yIGNvbXBsZXggbnVtYmVycywgYm90aCByZWFsIGFuZFxuICAgKiBjb21wbGV4IHZhbHVlIGFyZSBpbnZlcnRlZC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnVuYXJ5TWludXMoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgudW5hcnlNaW51cygzLjUpICAgICAgLy8gcmV0dXJucyAtMy41XG4gICAqICAgIG1hdGgudW5hcnlNaW51cygtNC4yKSAgICAgLy8gcmV0dXJucyA0LjJcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGFkZCwgc3VidHJhY3QsIHVuYXJ5UGx1c1xuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggTnVtYmVyIHRvIGJlIGludmVydGVkLlxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IFJldHVybnMgdGhlIHZhbHVlIHdpdGggaW52ZXJ0ZWQgc2lnbi5cbiAgICovXG4gIHZhciB1bmFyeU1pbnVzID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci51bmFyeU1pbnVzTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHgubmVnKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5uZWcoKTtcbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4geC5uZWcoKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgdmFyIHJlcyA9IHguY2xvbmUoKTtcbiAgICAgIHJlcy52YWx1ZSA9IHVuYXJ5TWludXMoeC52YWx1ZSk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSB1bmFyeU1pbnVzKDApID0gMFxuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCB1bmFyeU1pbnVzLCB0cnVlKTtcbiAgICB9IC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciBzdHJpbmdcblxuICB9KTtcbiAgcmV0dXJuIHVuYXJ5TWludXM7XG59KTtcbmV4cG9ydHMuY3JlYXRlVW5hcnlNaW51cyA9IGNyZWF0ZVVuYXJ5TWludXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVVuYXJ5UGx1cyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3VuYXJ5UGx1cyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlVW5hcnlQbHVzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG5cbiAgLyoqXG4gICAqIFVuYXJ5IHBsdXMgb3BlcmF0aW9uLlxuICAgKiBCb29sZWFuIHZhbHVlcyBhbmQgc3RyaW5ncyB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIG51bWJlciwgbnVtZXJpYyB2YWx1ZXMgd2lsbCBiZSByZXR1cm5lZCBhcyBpcy5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnVuYXJ5UGx1cyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC51bmFyeVBsdXMoMy41KSAgICAgIC8vIHJldHVybnMgMy41XG4gICAqICAgIG1hdGgudW5hcnlQbHVzKDEpICAgICAvLyByZXR1cm5zIDFcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHVuYXJ5TWludXMsIGFkZCwgc3VidHJhY3RcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBzdHJpbmcgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4XG4gICAqICAgICAgICAgICAgSW5wdXQgdmFsdWVcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFJldHVybnMgdGhlIGlucHV0IHZhbHVlIHdoZW4gbnVtZXJpYywgY29udmVydHMgdG8gYSBudW1iZXIgd2hlbiBpbnB1dCBpcyBub24tbnVtZXJpYy5cbiAgICovXG4gIHZhciB1bmFyeVBsdXMgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLnVuYXJ5UGx1c051bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4OyAvLyBjb21wbGV4IG51bWJlcnMgYXJlIGltbXV0YWJsZVxuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHg7IC8vIGJpZ251bWJlcnMgYXJlIGltbXV0YWJsZVxuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4OyAvLyBmcmFjdGlvbnMgYXJlIGltbXV0YWJsZVxuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSB1bmFyeVBsdXMoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHVuYXJ5UGx1cywgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYm9vbGVhbiB8IHN0cmluZyc6IGZ1bmN0aW9uIGJvb2xlYW5TdHJpbmcoeCkge1xuICAgICAgLy8gY29udmVydCB0byBhIG51bWJlciBvciBiaWdudW1iZXJcbiAgICAgIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoK3gpIDogK3g7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHVuYXJ5UGx1cztcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbmFyeVBsdXMgPSBjcmVhdGVVbmFyeVBsdXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVhnY2QgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3hnY2QnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ21hdHJpeCcsICdCaWdOdW1iZXInXTtcbnZhciBjcmVhdGVYZ2NkID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBleHRlbmRlZCBncmVhdGVzdCBjb21tb24gZGl2aXNvciBmb3IgdHdvIHZhbHVlcy5cbiAgICogU2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V4dGVuZGVkX0V1Y2xpZGVhbl9hbGdvcml0aG0uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC54Z2NkKGEsIGIpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnhnY2QoOCwgMTIpICAgICAgICAgICAgIC8vIHJldHVybnMgWzQsIC0xLCAxXVxuICAgKiAgICBtYXRoLmdjZCg4LCAxMikgICAgICAgICAgICAgIC8vIHJldHVybnMgNFxuICAgKiAgICBtYXRoLnhnY2QoMzYxNjMsIDIxMTk5KSAgICAgIC8vIHJldHVybnMgWzEyNDcsIC03LCAxMl1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGdjZCwgbGNtXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyfSBhICBBbiBpbnRlZ2VyIG51bWJlclxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gYiAgQW4gaW50ZWdlciBudW1iZXJcbiAgICogQHJldHVybiB7QXJyYXl9ICAgICAgICAgICAgICBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgMyBpbnRlZ2VycyBgW2RpdiwgbSwgbl1gXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgYGRpdiA9IGdjZChhLCBiKWAgYW5kIGBhKm0gKyBiKm4gPSBkaXZgXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcihhLCBiKSB7XG4gICAgICB2YXIgcmVzID0gKDAsIF9udW1iZXIueGdjZE51bWJlcikoYSwgYik7XG4gICAgICByZXR1cm4gY29uZmlnLm1hdHJpeCA9PT0gJ0FycmF5JyA/IHJlcyA6IG1hdHJpeChyZXMpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogX3hnY2RCaWdOdW1iZXIgLy8gVE9ETzogaW1wbGVtZW50IHN1cHBvcnQgZm9yIEZyYWN0aW9uXG5cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgeGdjZCBmb3IgdHdvIEJpZ051bWJlcnNcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IGFcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IGJcbiAgICogQHJldHVybiB7QmlnTnVtYmVyW119IHJlc3VsdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfeGdjZEJpZ051bWJlcihhLCBiKSB7XG4gICAgLy8gc291cmNlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FeHRlbmRlZF9FdWNsaWRlYW5fYWxnb3JpdGhtXG4gICAgdmFyIC8vIHVzZWQgdG8gc3dhcCB0d28gdmFyaWFibGVzXG4gICAgdDtcbiAgICB2YXIgLy8gcXVvdGllbnRcbiAgICBxO1xuICAgIHZhciAvLyByZW1haW5kZXJcbiAgICByO1xuICAgIHZhciB6ZXJvID0gbmV3IEJpZ051bWJlcigwKTtcbiAgICB2YXIgb25lID0gbmV3IEJpZ051bWJlcigxKTtcbiAgICB2YXIgeCA9IHplcm87XG4gICAgdmFyIGxhc3R4ID0gb25lO1xuICAgIHZhciB5ID0gb25lO1xuICAgIHZhciBsYXN0eSA9IHplcm87XG5cbiAgICBpZiAoIWEuaXNJbnQoKSB8fCAhYi5pc0ludCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24geGdjZCBtdXN0IGJlIGludGVnZXIgbnVtYmVycycpO1xuICAgIH1cblxuICAgIHdoaWxlICghYi5pc1plcm8oKSkge1xuICAgICAgcSA9IGEuZGl2KGIpLmZsb29yKCk7XG4gICAgICByID0gYS5tb2QoYik7XG4gICAgICB0ID0geDtcbiAgICAgIHggPSBsYXN0eC5taW51cyhxLnRpbWVzKHgpKTtcbiAgICAgIGxhc3R4ID0gdDtcbiAgICAgIHQgPSB5O1xuICAgICAgeSA9IGxhc3R5Lm1pbnVzKHEudGltZXMoeSkpO1xuICAgICAgbGFzdHkgPSB0O1xuICAgICAgYSA9IGI7XG4gICAgICBiID0gcjtcbiAgICB9XG5cbiAgICB2YXIgcmVzO1xuXG4gICAgaWYgKGEubHQoemVybykpIHtcbiAgICAgIHJlcyA9IFthLm5lZygpLCBsYXN0eC5uZWcoKSwgbGFzdHkubmVnKCldO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMgPSBbYSwgIWEuaXNaZXJvKCkgPyBsYXN0eCA6IDAsIGxhc3R5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29uZmlnLm1hdHJpeCA9PT0gJ0FycmF5JyA/IHJlcyA6IG1hdHJpeChyZXMpO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlWGdjZCA9IGNyZWF0ZVhnY2Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJpdEFuZCA9IHZvaWQgMDtcblxudmFyIF9iaXR3aXNlID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9iaXR3aXNlXCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMlwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA2XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdiaXRBbmQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJ107XG52YXIgY3JlYXRlQml0QW5kID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyO1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNiA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0wNikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQml0d2lzZSBBTkQgdHdvIHZhbHVlcywgYHggJiB5YC5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmJpdEFuZCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5iaXRBbmQoNTMsIDEzMSkgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAxXG4gICAqXG4gICAqICAgIG1hdGguYml0QW5kKFsxLCAxMiwgMzFdLCA0MikgICAgICAgLy8gcmV0dXJucyBBcnJheSBbMCwgOCwgMTBdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaXROb3QsIGJpdE9yLCBiaXRYb3IsIGxlZnRTaGlmdCwgcmlnaHRBcml0aFNoaWZ0LCByaWdodExvZ1NoaWZ0XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGFuZFxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gYW5kXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBBTkQgb2YgYHhgIGFuZCBgeWBcbiAgICovXG5cbiAgdmFyIGJpdEFuZCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLmJpdEFuZE51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBfYml0d2lzZS5iaXRBbmRCaWdOdW1iZXIsXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNih4LCB5LCBiaXRBbmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIGJpdEFuZCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMih4LCB5LCBiaXRBbmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBiaXRBbmQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGJpdEFuZChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYml0QW5kKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBiaXRBbmQoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgYml0QW5kLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBiaXRBbmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeSwgeCwgYml0QW5kLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGJpdEFuZCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGJpdEFuZCwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgYml0QW5kLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGJpdEFuZDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVCaXRBbmQgPSBjcmVhdGVCaXRBbmQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJpdE5vdCA9IHZvaWQgMDtcblxudmFyIF9iaXR3aXNlID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9iaXR3aXNlXCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYml0Tm90JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQml0Tm90ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQml0d2lzZSBOT1QgdmFsdWUsIGB+eGAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqIEZvciB1bml0cywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBvbiB0aGUgYmVzdCBwcmVmaXggYmFzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmJpdE5vdCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5iaXROb3QoMSkgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAtMlxuICAgKlxuICAgKiAgICBtYXRoLmJpdE5vdChbMiwgLTMsIDRdKSAgICAgIC8vIHJldHVybnMgQXJyYXkgWy0zLCAyLCA1XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYml0QW5kLCBiaXRPciwgYml0WG9yLCBsZWZ0U2hpZnQsIHJpZ2h0QXJpdGhTaGlmdCwgcmlnaHRMb2dTaGlmdFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geCBWYWx1ZSB0byBub3RcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IE5PVCBvZiBgeGBcbiAgICovXG4gIHZhciBiaXROb3QgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmJpdE5vdE51bWJlcixcbiAgICBCaWdOdW1iZXI6IF9iaXR3aXNlLmJpdE5vdEJpZ051bWJlcixcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGJpdE5vdCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGJpdE5vdDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVCaXROb3QgPSBjcmVhdGVCaXROb3Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJpdE9yID0gdm9pZCAwO1xuXG52YXIgX2JpdHdpc2UgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL2JpdHdpc2VcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTBcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAxXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2JpdE9yJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZUJpdE9yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDEgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNCA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0wNCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMCA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBCaXR3aXNlIE9SIHR3byB2YWx1ZXMsIGB4IHwgeWAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqIEZvciB1bml0cywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBvbiB0aGUgbG93ZXN0IHByaW50IGJhc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5iaXRPcih4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5iaXRPcigxLCAyKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDNcbiAgICpcbiAgICogICAgbWF0aC5iaXRPcihbMSwgMiwgM10sIDQpICAgICAgIC8vIHJldHVybnMgQXJyYXkgWzUsIDYsIDddXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaXRBbmQsIGJpdE5vdCwgYml0WG9yLCBsZWZ0U2hpZnQsIHJpZ2h0QXJpdGhTaGlmdCwgcmlnaHRMb2dTaGlmdFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBvclxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gb3JcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IE9SIG9mIGB4YCBhbmQgYHlgXG4gICAqL1xuXG4gIHZhciBiaXRPciA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLmJpdE9yTnVtYmVyLFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IF9iaXR3aXNlLmJpdE9yQmlnTnVtYmVyLFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDQoeCwgeSwgYml0T3IpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeSwgeCwgYml0T3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeCwgeSwgYml0T3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBiaXRPcik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYml0T3IobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGJpdE9yKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBiaXRPcih4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh4LCB5LCBiaXRPciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgYml0T3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTAoeSwgeCwgYml0T3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgYml0T3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBiaXRPciwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgYml0T3IsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYml0T3I7XG59KTtcbmV4cG9ydHMuY3JlYXRlQml0T3IgPSBjcmVhdGVCaXRPcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQml0WG9yID0gdm9pZCAwO1xuXG52YXIgX2JpdHdpc2UgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL2JpdHdpc2VcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDdcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMlwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2JpdFhvcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVCaXRYb3IgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBhbGdvcml0aG0wMyA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDcgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMDcpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTIgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMTIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIEJpdHdpc2UgWE9SIHR3byB2YWx1ZXMsIGB4IF4geWAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5iaXRYb3IoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYml0WG9yKDEsIDIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgM1xuICAgKlxuICAgKiAgICBtYXRoLmJpdFhvcihbMiwgMywgNF0sIDQpICAgICAgIC8vIHJldHVybnMgQXJyYXkgWzYsIDcsIDBdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaXRBbmQsIGJpdE5vdCwgYml0T3IsIGxlZnRTaGlmdCwgcmlnaHRBcml0aFNoaWZ0LCByaWdodExvZ1NoaWZ0XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIHhvclxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8geG9yXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBYT1Igb2YgYHhgIGFuZCBgeWBcbiAgICovXG5cbiAgdmFyIGJpdFhvciA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLmJpdFhvck51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBfYml0d2lzZS5iaXRYb3IsXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNyh4LCB5LCBiaXRYb3IpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgYml0WG9yLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIGJpdFhvciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGJpdFhvcik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYml0WG9yKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBiaXRYb3IobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGJpdFhvcih4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih4LCB5LCBiaXRYb3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGJpdFhvciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBiaXRYb3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgYml0WG9yLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgYml0WG9yLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBiaXRYb3IsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYml0WG9yO1xufSk7XG5leHBvcnRzLmNyZWF0ZUJpdFhvciA9IGNyZWF0ZUJpdFhvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTGVmdFNoaWZ0ID0gdm9pZCAwO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMlwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAxXCIpO1xuXG52YXIgX2FsZ29yaXRobTYgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTBcIik7XG5cbnZhciBfYWxnb3JpdGhtNyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wOFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIF9iaXR3aXNlID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9iaXR3aXNlXCIpO1xuXG52YXIgbmFtZSA9ICdsZWZ0U2hpZnQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ3plcm9zJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlTGVmdFNoaWZ0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgemVyb3MgPSBfcmVmLnplcm9zLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDEgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wMiA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA4ID0gKDAsIF9hbGdvcml0aG03LmNyZWF0ZUFsZ29yaXRobTA4KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEwID0gKDAsIF9hbGdvcml0aG02LmNyZWF0ZUFsZ29yaXRobTEwKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTExID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTExKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBCaXR3aXNlIGxlZnQgbG9naWNhbCBzaGlmdCBvZiBhIHZhbHVlIHggYnkgeSBudW1iZXIgb2YgYml0cywgYHggPDwgeWAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqIEZvciB1bml0cywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBvbiB0aGUgYmVzdCBwcmVmaXggYmFzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmxlZnRTaGlmdCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5sZWZ0U2hpZnQoMSwgMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA0XG4gICAqXG4gICAqICAgIG1hdGgubGVmdFNoaWZ0KFsxLCAyLCAzXSwgNCkgICAgICAgLy8gcmV0dXJucyBBcnJheSBbMTYsIDMyLCA2NF1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGxlZnRTaGlmdCwgYml0Tm90LCBiaXRPciwgYml0WG9yLCByaWdodEFyaXRoU2hpZnQsIHJpZ2h0TG9nU2hpZnRcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IHggVmFsdWUgdG8gYmUgc2hpZnRlZFxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXJ9IHkgQW1vdW50IG9mIHNoaWZ0c1xuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gYHhgIHNoaWZ0ZWQgbGVmdCBgeWAgdGltZXNcbiAgICovXG5cbiAgdmFyIGxlZnRTaGlmdCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLmxlZnRTaGlmdE51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBfYml0d2lzZS5sZWZ0U2hpZnRCaWdOdW1iZXIsXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wOCh4LCB5LCBsZWZ0U2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIGxlZnRTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMSh4LCB5LCBsZWZ0U2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBsZWZ0U2hpZnQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxlZnRTaGlmdChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbGVmdFNoaWZ0KG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBsZWZ0U2hpZnQoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih5LCAwKSkge1xuICAgICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgbGVmdFNoaWZ0LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIERlbnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHksIDApKSB7XG4gICAgICAgIHJldHVybiB4LmNsb25lKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBsZWZ0U2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih4LCAwKSkge1xuICAgICAgICByZXR1cm4gemVyb3MoeS5zaXplKCksIHkuc3RvcmFnZSgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTEwKHksIHgsIGxlZnRTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHgsIDApKSB7XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgbGVmdFNoaWZ0LCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxlZnRTaGlmdChtYXRyaXgoeCksIHkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIEFycmF5JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyQXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxlZnRTaGlmdCh4LCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGVmdFNoaWZ0O1xufSk7XG5leHBvcnRzLmNyZWF0ZUxlZnRTaGlmdCA9IGNyZWF0ZUxlZnRTaGlmdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmlnaHRBcml0aFNoaWZ0ID0gdm9pZCAwO1xuXG52YXIgX2JpdHdpc2UgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL2JpdHdpc2VcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAyXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTFcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDFcIik7XG5cbnZhciBfYWxnb3JpdGhtNiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMFwiKTtcblxudmFyIF9hbGdvcml0aG03ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA4XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdyaWdodEFyaXRoU2hpZnQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ3plcm9zJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlUmlnaHRBcml0aFNoaWZ0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgemVyb3MgPSBfcmVmLnplcm9zLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDEgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wMiA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA4ID0gKDAsIF9hbGdvcml0aG03LmNyZWF0ZUFsZ29yaXRobTA4KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEwID0gKDAsIF9hbGdvcml0aG02LmNyZWF0ZUFsZ29yaXRobTEwKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTExID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTExKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBCaXR3aXNlIHJpZ2h0IGFyaXRobWV0aWMgc2hpZnQgb2YgYSB2YWx1ZSB4IGJ5IHkgbnVtYmVyIG9mIGJpdHMsIGB4ID4+IHlgLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKiBGb3IgdW5pdHMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgb24gdGhlIGJlc3QgcHJlZml4IGJhc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5yaWdodEFyaXRoU2hpZnQoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgucmlnaHRBcml0aFNoaWZ0KDQsIDIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMVxuICAgKlxuICAgKiAgICBtYXRoLnJpZ2h0QXJpdGhTaGlmdChbMTYsIC0zMiwgNjRdLCA0KSAgIC8vIHJldHVybnMgQXJyYXkgWzEsIC0yLCAzXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYml0QW5kLCBiaXROb3QsIGJpdE9yLCBiaXRYb3IsIHJpZ2h0QXJpdGhTaGlmdCwgcmlnaHRMb2dTaGlmdFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geCBWYWx1ZSB0byBiZSBzaGlmdGVkXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlcn0geSBBbW91bnQgb2Ygc2hpZnRzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBgeGAgc2lnbi1maWxsZWQgc2hpZnRlZCByaWdodCBgeWAgdGltZXNcbiAgICovXG5cbiAgdmFyIHJpZ2h0QXJpdGhTaGlmdCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLnJpZ2h0QXJpdGhTaGlmdE51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBfYml0d2lzZS5yaWdodEFyaXRoU2hpZnRCaWdOdW1iZXIsXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wOCh4LCB5LCByaWdodEFyaXRoU2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIHJpZ2h0QXJpdGhTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMSh4LCB5LCByaWdodEFyaXRoU2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCByaWdodEFyaXRoU2hpZnQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0QXJpdGhTaGlmdChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gcmlnaHRBcml0aFNoaWZ0KG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiByaWdodEFyaXRoU2hpZnQoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih5LCAwKSkge1xuICAgICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgcmlnaHRBcml0aFNoaWZ0LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIERlbnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHksIDApKSB7XG4gICAgICAgIHJldHVybiB4LmNsb25lKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCByaWdodEFyaXRoU2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih4LCAwKSkge1xuICAgICAgICByZXR1cm4gemVyb3MoeS5zaXplKCksIHkuc3RvcmFnZSgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTEwKHksIHgsIHJpZ2h0QXJpdGhTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHgsIDApKSB7XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgcmlnaHRBcml0aFNoaWZ0LCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0QXJpdGhTaGlmdChtYXRyaXgoeCksIHkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIEFycmF5JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyQXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0QXJpdGhTaGlmdCh4LCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmlnaHRBcml0aFNoaWZ0O1xufSk7XG5leHBvcnRzLmNyZWF0ZVJpZ2h0QXJpdGhTaGlmdCA9IGNyZWF0ZVJpZ2h0QXJpdGhTaGlmdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmlnaHRMb2dTaGlmdCA9IHZvaWQgMDtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDJcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMVwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMVwiKTtcblxudmFyIF9hbGdvcml0aG02ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEwXCIpO1xuXG52YXIgX2FsZ29yaXRobTcgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDhcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3JpZ2h0TG9nU2hpZnQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ3plcm9zJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlUmlnaHRMb2dTaGlmdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIHplcm9zID0gX3JlZi56ZXJvcyxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAxID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTAxKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wOCA9ICgwLCBfYWxnb3JpdGhtNy5jcmVhdGVBbGdvcml0aG0wOCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMCA9ICgwLCBfYWxnb3JpdGhtNi5jcmVhdGVBbGdvcml0aG0xMCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQml0d2lzZSByaWdodCBsb2dpY2FsIHNoaWZ0IG9mIHZhbHVlIHggYnkgeSBudW1iZXIgb2YgYml0cywgYHggPj4+IHlgLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKiBGb3IgdW5pdHMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgb24gdGhlIGJlc3QgcHJlZml4IGJhc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5yaWdodExvZ1NoaWZ0KHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnJpZ2h0TG9nU2hpZnQoNCwgMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAxXG4gICAqXG4gICAqICAgIG1hdGgucmlnaHRMb2dTaGlmdChbMTYsIC0zMiwgNjRdLCA0KSAgIC8vIHJldHVybnMgQXJyYXkgWzEsIDIsIDNdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaXRBbmQsIGJpdE5vdCwgYml0T3IsIGJpdFhvciwgbGVmdFNoaWZ0LCByaWdodExvZ1NoaWZ0XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEFycmF5IHwgTWF0cml4fSB4IFZhbHVlIHRvIGJlIHNoaWZ0ZWRcbiAgICogQHBhcmFtICB7bnVtYmVyfSB5IEFtb3VudCBvZiBzaGlmdHNcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IGB4YCB6ZXJvLWZpbGxlZCBzaGlmdGVkIHJpZ2h0IGB5YCB0aW1lc1xuICAgKi9cblxuICB2YXIgcmlnaHRMb2dTaGlmdCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLnJpZ2h0TG9nU2hpZnROdW1iZXIsXG4gICAgLy8gJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogLi4uLCAvLyBUT0RPOiBpbXBsZW1lbnQgQmlnTnVtYmVyIHN1cHBvcnQgZm9yIHJpZ2h0TG9nU2hpZnRcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA4KHgsIHksIHJpZ2h0TG9nU2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIHJpZ2h0TG9nU2hpZnQsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeCwgeSwgcmlnaHRMb2dTaGlmdCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIHJpZ2h0TG9nU2hpZnQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0TG9nU2hpZnQobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0TG9nU2hpZnQobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0TG9nU2hpZnQoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih5LCAwKSkge1xuICAgICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgcmlnaHRMb2dTaGlmdCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBEZW5zZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih5LCAwKSkge1xuICAgICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgcmlnaHRMb2dTaGlmdCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyU3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHgsIDApKSB7XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTAoeSwgeCwgcmlnaHRMb2dTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKGVxdWFsU2NhbGFyKHgsIDApKSB7XG4gICAgICAgIHJldHVybiB6ZXJvcyh5LnNpemUoKSwgeS5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgcmlnaHRMb2dTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiByaWdodExvZ1NoaWZ0KG1hdHJpeCh4KSwgeSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgQXJyYXknOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gcmlnaHRMb2dTaGlmdCh4LCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmlnaHRMb2dTaGlmdDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVSaWdodExvZ1NoaWZ0ID0gY3JlYXRlUmlnaHRMb2dTaGlmdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQmVsbE51bWJlcnMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdiZWxsTnVtYmVycyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGRTY2FsYXInLCAnaXNOZWdhdGl2ZScsICdpc0ludGVnZXInLCAnc3RpcmxpbmdTMiddO1xudmFyIGNyZWF0ZUJlbGxOdW1iZXJzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgaXNOZWdhdGl2ZSA9IF9yZWYuaXNOZWdhdGl2ZSxcbiAgICAgIGlzSW50ZWdlciA9IF9yZWYuaXNJbnRlZ2VyLFxuICAgICAgc3RpcmxpbmdTMiA9IF9yZWYuc3RpcmxpbmdTMjtcblxuICAvKipcbiAgICogVGhlIEJlbGwgTnVtYmVycyBjb3VudCB0aGUgbnVtYmVyIG9mIHBhcnRpdGlvbnMgb2YgYSBzZXQuIEEgcGFydGl0aW9uIGlzIGEgcGFpcndpc2UgZGlzam9pbnQgc3Vic2V0IG9mIFMgd2hvc2UgdW5pb24gaXMgUy5cbiAgICogYmVsbE51bWJlcnMgb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy5cbiAgICogVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogbiA+PSAwXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICBtYXRoLmJlbGxOdW1iZXJzKG4pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmJlbGxOdW1iZXJzKDMpIC8vIHJldHVybnMgNVxuICAgKiAgICBtYXRoLmJlbGxOdW1iZXJzKDgpIC8vIHJldHVybnMgNDE0MFxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc3RpcmxpbmdTMlxuICAgKlxuICAgKiBAcGFyYW0ge051bWJlciB8IEJpZ051bWJlcn0gbiAgICBUb3RhbCBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc2V0XG4gICAqIEByZXR1cm4ge051bWJlciB8IEJpZ051bWJlcn0gICAgIEIobilcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlcihuKSB7XG4gICAgICBpZiAoIWlzSW50ZWdlcihuKSB8fCBpc05lZ2F0aXZlKG4pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGJlbGxOdW1iZXJzJyk7XG4gICAgICB9IC8vIFN1bSAoaz0wLCBuKSBTKG4saykuXG5cblxuICAgICAgdmFyIHJlc3VsdCA9IDA7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IG47IGkrKykge1xuICAgICAgICByZXN1bHQgPSBhZGRTY2FsYXIocmVzdWx0LCBzdGlybGluZ1MyKG4sIGkpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUJlbGxOdW1iZXJzID0gY3JlYXRlQmVsbE51bWJlcnM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNhdGFsYW4gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdjYXRhbGFuJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZFNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAnY29tYmluYXRpb25zJywgJ2lzTmVnYXRpdmUnLCAnaXNJbnRlZ2VyJ107XG52YXIgY3JlYXRlQ2F0YWxhbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhZGRTY2FsYXIgPSBfcmVmLmFkZFNjYWxhcixcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgY29tYmluYXRpb25zID0gX3JlZi5jb21iaW5hdGlvbnMsXG4gICAgICBpc05lZ2F0aXZlID0gX3JlZi5pc05lZ2F0aXZlLFxuICAgICAgaXNJbnRlZ2VyID0gX3JlZi5pc0ludGVnZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBDYXRhbGFuIE51bWJlcnMgZW51bWVyYXRlIGNvbWJpbmF0b3JpYWwgc3RydWN0dXJlcyBvZiBtYW55IGRpZmZlcmVudCB0eXBlcy5cbiAgICogY2F0YWxhbiBvbmx5IHRha2VzIGludGVnZXIgYXJndW1lbnRzLlxuICAgKiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBtdXN0IGJlIGVuZm9yY2VkOiBuID49IDBcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgIG1hdGguY2F0YWxhbihuKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jYXRhbGFuKDMpIC8vIHJldHVybnMgNVxuICAgKiAgICBtYXRoLmNhdGFsYW4oOCkgLy8gcmV0dXJucyAxNDMwXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiZWxsTnVtYmVyc1xuICAgKlxuICAgKiBAcGFyYW0ge051bWJlciB8IEJpZ051bWJlcn0gbiAgICBudGggQ2F0YWxhbiBudW1iZXJcbiAgICogQHJldHVybiB7TnVtYmVyIHwgQmlnTnVtYmVyfSAgICAgQ24obilcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlcihuKSB7XG4gICAgICBpZiAoIWlzSW50ZWdlcihuKSB8fCBpc05lZ2F0aXZlKG4pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGNhdGFsYW4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRpdmlkZVNjYWxhcihjb21iaW5hdGlvbnMobXVsdGlwbHlTY2FsYXIobiwgMiksIG4pLCBhZGRTY2FsYXIobiwgMSkpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ2F0YWxhbiA9IGNyZWF0ZUNhdGFsYW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbXBvc2l0aW9uID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnY29tcG9zaXRpb24nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnYWRkU2NhbGFyJywgJ2NvbWJpbmF0aW9ucycsICdpc05lZ2F0aXZlJywgJ2lzUG9zaXRpdmUnLCAnaXNJbnRlZ2VyJywgJ2xhcmdlciddO1xudmFyIGNyZWF0ZUNvbXBvc2l0aW9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgY29tYmluYXRpb25zID0gX3JlZi5jb21iaW5hdGlvbnMsXG4gICAgICBpc1Bvc2l0aXZlID0gX3JlZi5pc1Bvc2l0aXZlLFxuICAgICAgaXNOZWdhdGl2ZSA9IF9yZWYuaXNOZWdhdGl2ZSxcbiAgICAgIGlzSW50ZWdlciA9IF9yZWYuaXNJbnRlZ2VyLFxuICAgICAgbGFyZ2VyID0gX3JlZi5sYXJnZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBjb21wb3NpdGlvbiBjb3VudHMgb2YgbiBpbnRvIGsgcGFydHMuXG4gICAqXG4gICAqIGNvbXBvc2l0aW9uIG9ubHkgdGFrZXMgaW50ZWdlciBhcmd1bWVudHMuXG4gICAqIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IGsgPD0gbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgIG1hdGguY29tcG9zaXRpb24obiwgaylcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguY29tcG9zaXRpb24oNSwgMykgLy8gcmV0dXJucyA2XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb21iaW5hdGlvbnNcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXIgfCBCaWdOdW1iZXJ9IG4gICAgVG90YWwgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHNldFxuICAgKiBAcGFyYW0ge051bWJlciB8IEJpZ051bWJlcn0gayAgICBOdW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc3Vic2V0XG4gICAqIEByZXR1cm4ge051bWJlciB8IEJpZ051bWJlcn0gICAgIFJldHVybnMgdGhlIGNvbXBvc2l0aW9uIGNvdW50cyBvZiBuIGludG8gayBwYXJ0cy5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyTnVtYmVyQmlnTnVtYmVyKG4sIGspIHtcbiAgICAgIGlmICghaXNJbnRlZ2VyKG4pIHx8ICFpc1Bvc2l0aXZlKG4pIHx8ICFpc0ludGVnZXIoaykgfHwgIWlzUG9zaXRpdmUoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21wb3NpdGlvbicpO1xuICAgICAgfSBlbHNlIGlmIChsYXJnZXIoaywgbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignayBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBuIGluIGZ1bmN0aW9uIGNvbXBvc2l0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb21iaW5hdGlvbnMoYWRkU2NhbGFyKG4sIC0xKSwgYWRkU2NhbGFyKGssIC0xKSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wb3NpdGlvbiA9IGNyZWF0ZUNvbXBvc2l0aW9uOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTdGlybGluZ1MyID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc3RpcmxpbmdTMic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGRTY2FsYXInLCAnc3VidHJhY3QnLCAnbXVsdGlwbHlTY2FsYXInLCAnZGl2aWRlU2NhbGFyJywgJ3BvdycsICdmYWN0b3JpYWwnLCAnY29tYmluYXRpb25zJywgJ2lzTmVnYXRpdmUnLCAnaXNJbnRlZ2VyJywgJ2xhcmdlciddO1xudmFyIGNyZWF0ZVN0aXJsaW5nUzIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXIsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIHBvdyA9IF9yZWYucG93LFxuICAgICAgZmFjdG9yaWFsID0gX3JlZi5mYWN0b3JpYWwsXG4gICAgICBjb21iaW5hdGlvbnMgPSBfcmVmLmNvbWJpbmF0aW9ucyxcbiAgICAgIGlzTmVnYXRpdmUgPSBfcmVmLmlzTmVnYXRpdmUsXG4gICAgICBpc0ludGVnZXIgPSBfcmVmLmlzSW50ZWdlcixcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyO1xuXG4gIC8qKlxuICAgKiBUaGUgU3RpcmxpbmcgbnVtYmVycyBvZiB0aGUgc2Vjb25kIGtpbmQsIGNvdW50cyB0aGUgbnVtYmVyIG9mIHdheXMgdG8gcGFydGl0aW9uXG4gICAqIGEgc2V0IG9mIG4gbGFiZWxsZWQgb2JqZWN0cyBpbnRvIGsgbm9uZW1wdHkgdW5sYWJlbGxlZCBzdWJzZXRzLlxuICAgKiBzdGlybGluZ1MyIG9ubHkgdGFrZXMgaW50ZWdlciBhcmd1bWVudHMuXG4gICAqIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IGsgPD0gbi5cbiAgICpcbiAgICogIElmIG4gPSBrIG9yIGsgPSAxLCB0aGVuIHMobixrKSA9IDFcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgIG1hdGguc3RpcmxpbmdTMihuLCBrKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zdGlybGluZ1MyKDUsIDMpIC8vcmV0dXJucyAyNVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYmVsbE51bWJlcnNcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXIgfCBCaWdOdW1iZXJ9IG4gICAgVG90YWwgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHNldFxuICAgKiBAcGFyYW0ge051bWJlciB8IEJpZ051bWJlcn0gayAgICBOdW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc3Vic2V0XG4gICAqIEByZXR1cm4ge051bWJlciB8IEJpZ051bWJlcn0gICAgIFMobixrKVxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJOdW1iZXJCaWdOdW1iZXIobiwgaykge1xuICAgICAgaWYgKCFpc0ludGVnZXIobikgfHwgaXNOZWdhdGl2ZShuKSB8fCAhaXNJbnRlZ2VyKGspIHx8IGlzTmVnYXRpdmUoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm9uLW5lZ2F0aXZlIGludGVnZXIgdmFsdWUgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gc3RpcmxpbmdTMicpO1xuICAgICAgfSBlbHNlIGlmIChsYXJnZXIoaywgbikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignayBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBuIGluIGZ1bmN0aW9uIHN0aXJsaW5nUzInKTtcbiAgICAgIH0gLy8gMS9rISBTdW0oaT0wIC0+IGspIFsoLTEpXihrLWkpKkMoayxqKSogaV5uXVxuXG5cbiAgICAgIHZhciBrRmFjdG9yaWFsID0gZmFjdG9yaWFsKGspO1xuICAgICAgdmFyIHJlc3VsdCA9IDA7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IGs7IGkrKykge1xuICAgICAgICB2YXIgbmVnYXRpdmVPbmUgPSBwb3coLTEsIHN1YnRyYWN0KGssIGkpKTtcbiAgICAgICAgdmFyIGtDaG9vc2VJID0gY29tYmluYXRpb25zKGssIGkpO1xuICAgICAgICB2YXIgaVBvd2VyID0gcG93KGksIG4pO1xuICAgICAgICByZXN1bHQgPSBhZGRTY2FsYXIocmVzdWx0LCBtdWx0aXBseVNjYWxhcihtdWx0aXBseVNjYWxhcihrQ2hvb3NlSSwgaVBvd2VyKSwgbmVnYXRpdmVPbmUpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRpdmlkZVNjYWxhcihyZXN1bHQsIGtGYWN0b3JpYWwpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU3RpcmxpbmdTMiA9IGNyZWF0ZVN0aXJsaW5nUzI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFyZyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgbmFtZSA9ICdhcmcnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVBcmcgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBhcmd1bWVudCBvZiBhIGNvbXBsZXggdmFsdWUuXG4gICAqIEZvciBhIGNvbXBsZXggbnVtYmVyIGBhICsgYmlgLCB0aGUgYXJndW1lbnQgaXMgY29tcHV0ZWQgYXMgYGF0YW4yKGIsIGEpYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFyZyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAyKVxuICAgKiAgICBtYXRoLmFyZyhhKSAvIG1hdGgucGkgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC4yNVxuICAgKlxuICAgKiAgICBjb25zdCBiID0gbWF0aC5jb21wbGV4KCcyICsgM2knKVxuICAgKiAgICBtYXRoLmFyZyhiKSAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC45ODI3OTM3MjMyNDczMjlcbiAgICogICAgbWF0aC5hdGFuMigzLCAyKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDAuOTgyNzkzNzIzMjQ3MzI5XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICByZSwgaW0sIGNvbmosIGFic1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geFxuICAgKiAgICAgICAgICAgIEEgY29tcGxleCBudW1iZXIgb3IgYXJyYXkgd2l0aCBjb21wbGV4IG51bWJlcnNcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBhcmd1bWVudCBvZiB4XG4gICAqL1xuICB2YXIgYXJnID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBNYXRoLmF0YW4yKDAsIHgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguY29uc3RydWN0b3IuYXRhbjIoMCwgeCk7XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmFyZygpO1xuICAgIH0sXG4gICAgLy8gVE9ETzogaW1wbGVtZW50IEJpZ051bWJlciBzdXBwb3J0IGZvciBmdW5jdGlvbiBhcmdcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGFyZyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFyZztcbn0pO1xuZXhwb3J0cy5jcmVhdGVBcmcgPSBjcmVhdGVBcmc7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbmogPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAnY29uaic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUNvbmogPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBjb21wbGV4IGNvbmp1Z2F0ZSBvZiBhIGNvbXBsZXggdmFsdWUuXG4gICAqIElmIGB4ID0gYStiaWAsIHRoZSBjb21wbGV4IGNvbmp1Z2F0ZSBvZiBgeGAgaXMgYGEgLSBiaWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5jb25qKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNvbmoobWF0aC5jb21wbGV4KCcyICsgM2knKSkgIC8vIHJldHVybnMgQ29tcGxleCAyIC0gM2lcbiAgICogICAgbWF0aC5jb25qKG1hdGguY29tcGxleCgnMiAtIDNpJykpICAvLyByZXR1cm5zIENvbXBsZXggMiArIDNpXG4gICAqICAgIG1hdGguY29uaihtYXRoLmNvbXBsZXgoJy01LjJpJykpICAvLyByZXR1cm5zIENvbXBsZXggNS4yaVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgcmUsIGltLCBhcmcsIGFic1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geFxuICAgKiAgICAgICAgICAgIEEgY29tcGxleCBudW1iZXIgb3IgYXJyYXkgd2l0aCBjb21wbGV4IG51bWJlcnNcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFRoZSBjb21wbGV4IGNvbmp1Z2F0ZSBvZiB4XG4gICAqL1xuICB2YXIgY29uaiA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5jb25qdWdhdGUoKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgY29uaik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNvbmo7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ29uaiA9IGNyZWF0ZUNvbmo7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUltID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ2ltJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlSW0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGEgY29tcGxleCBudW1iZXIuXG4gICAqIEZvciBhIGNvbXBsZXggbnVtYmVyIGBhICsgYmlgLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgYmAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5pbSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAzKVxuICAgKiAgICBtYXRoLnJlKGEpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMlxuICAgKiAgICBtYXRoLmltKGEpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgM1xuICAgKlxuICAgKiAgICBtYXRoLnJlKG1hdGguY29tcGxleCgnLTUuMmknKSkgLy8gcmV0dXJucyBudW1iZXIgLTUuMlxuICAgKiAgICBtYXRoLnJlKG1hdGguY29tcGxleCgyLjQpKSAgICAgLy8gcmV0dXJucyBudW1iZXIgMFxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgcmUsIGNvbmosIGFicywgYXJnXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4XG4gICAqICAgICAgICAgICAgQSBjb21wbGV4IG51bWJlciBvciBhcnJheSB3aXRoIGNvbXBsZXggbnVtYmVyc1xuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gVGhlIGltYWdpbmFyeSBwYXJ0IG9mIHhcbiAgICovXG4gIHZhciBpbSA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4Lm11bCgwKTtcbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguaW07XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGltKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaW07XG59KTtcbmV4cG9ydHMuY3JlYXRlSW0gPSBjcmVhdGVJbTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmUgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAncmUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVSZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgcmVhbCBwYXJ0IG9mIGEgY29tcGxleCBudW1iZXIuXG4gICAqIEZvciBhIGNvbXBsZXggbnVtYmVyIGBhICsgYmlgLCB0aGUgZnVuY3Rpb24gcmV0dXJucyBgYWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5yZSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgyLCAzKVxuICAgKiAgICBtYXRoLnJlKGEpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMlxuICAgKiAgICBtYXRoLmltKGEpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgM1xuICAgKlxuICAgKiAgICBtYXRoLnJlKG1hdGguY29tcGxleCgnLTUuMmknKSkgLy8gcmV0dXJucyBudW1iZXIgMFxuICAgKiAgICBtYXRoLnJlKG1hdGguY29tcGxleCgyLjQpKSAgICAgLy8gcmV0dXJucyBudW1iZXIgMi40XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBpbSwgY29uaiwgYWJzLCBhcmdcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHhcbiAgICogICAgICAgICAgICBBIGNvbXBsZXggbnVtYmVyIG9yIGFycmF5IHdpdGggY29tcGxleCBudW1iZXJzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBUaGUgcmVhbCBwYXJ0IG9mIHhcbiAgICovXG4gIHZhciByZSA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5yZTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgcmUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZSA9IGNyZWF0ZVJlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEaXN0YW5jZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2Rpc3RhbmNlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZFNjYWxhcicsICdzdWJ0cmFjdCcsICdkaXZpZGVTY2FsYXInLCAnbXVsdGlwbHlTY2FsYXInLCAndW5hcnlNaW51cycsICdzcXJ0JywgJ2FicyddO1xudmFyIGNyZWF0ZURpc3RhbmNlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICB1bmFyeU1pbnVzID0gX3JlZi51bmFyeU1pbnVzLFxuICAgICAgc3FydCA9IF9yZWYuc3FydCxcbiAgICAgIGFicyA9IF9yZWYuYWJzO1xuXG4gIC8qKlxuICAgICogQ2FsY3VsYXRlczpcbiAgICAqICAgIFRoZSBldWNsZWRpYW4gZGlzdGFuY2UgYmV0d2VlbiB0d28gcG9pbnRzIGluIE4tZGltZW5zaW9uYWwgc3BhY2VzLlxuICAgICogICAgRGlzdGFuY2UgYmV0d2VlbiBwb2ludCBhbmQgYSBsaW5lIGluIDIgYW5kIDMgZGltZW5zaW9uYWwgc3BhY2VzLlxuICAgICogICAgUGFpcndpc2UgZGlzdGFuY2UgYmV0d2VlbiBhIHNldCBvZiAyRCBvciAzRCBwb2ludHNcbiAgICAqIE5PVEU6XG4gICAgKiAgICBXaGVuIHN1YnN0aXR1dGluZyBjb2VmZmljaWVudHMgb2YgYSBsaW5lKGEsIGIgYW5kIGMpLCB1c2UgYXggKyBieSArIGMgPSAwIGluc3RlYWQgb2YgYXggKyBieSA9IGNcbiAgICAqICAgIEZvciBwYXJhbWV0cmljIGVxdWF0aW9uIG9mIGEgM0QgbGluZSwgeDAsIHkwLCB6MCwgYSwgYiwgYyBhcmUgZnJvbTogKHjiiJJ4MCwgeeKIknkwLCB64oiSejApID0gdChhLCBiLCBjKVxuICAgICpcbiAgICAqIFN5bnRheDpcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoW3gxLCB5MV0sIFt4MiwgeTJdKVxuICAgICotICAgbWF0aC5kaXN0YW5jZSh7cG9pbnRPbmVYOiA0LCBwb2ludE9uZVk6IDV9LCB7cG9pbnRUd29YOiAyLCBwb2ludFR3b1k6IDd9KVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbeDEsIHkxLCB6MV0sIFt4MiwgeTIsIHoyXSlcbiAgICAqICAgIG1hdGguZGlzdGFuY2Uoe3BvaW50T25lWDogNCwgcG9pbnRPbmVZOiA1LCBwb2ludE9uZVo6IDh9LCB7cG9pbnRUd29YOiAyLCBwb2ludFR3b1k6IDcsIHBvaW50VHdvWjogOX0pXG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKFt4MSwgeTEsIC4uLiAsIE4xXSwgW3gyLCB5MiwgLi4uICwgTjJdKVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbW0FdLCBbQl0sIFtDXS4uLl0pXG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKFt4MSwgeTFdLCBbTGluZVB0WDEsIExpbmVQdFkxXSwgW0xpbmVQdFgyLCBMaW5lUHRZMl0pXG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKHtwb2ludFg6IDEsIHBvaW50WTogNH0sIHtsaW5lT25lUHRYOiA2LCBsaW5lT25lUHRZOiAzfSwge2xpbmVUd29QdFg6IDIsIGxpbmVUd29QdFk6IDh9KVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbeDEsIHkxLCB6MV0sIFtMaW5lUHRYMSwgTGluZVB0WTEsIExpbmVQdFoxXSwgW0xpbmVQdFgyLCBMaW5lUHRZMiwgTGluZVB0WjJdKVxuICAgICogICAgbWF0aC5kaXN0YW5jZSh7cG9pbnRYOiAxLCBwb2ludFk6IDQsIHBvaW50WjogN30sIHtsaW5lT25lUHRYOiA2LCBsaW5lT25lUHRZOiAzLCBsaW5lT25lUHRaOiA0fSwge2xpbmVUd29QdFg6IDIsIGxpbmVUd29QdFk6IDgsIGxpbmVUd29QdFo6IDV9KVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbeDEsIHkxXSwgW3hDb2VmZkxpbmUsIHlDb2VmZkxpbmUsIGNvbnN0YW50XSlcbiAgICAqICAgIG1hdGguZGlzdGFuY2Uoe3BvaW50WDogMTAsIHBvaW50WTogMTB9LCB7eENvZWZmTGluZTogOCwgeUNvZWZmTGluZTogMSwgY29uc3RhbnQ6IDN9KVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbeDEsIHkxLCB6MV0sIFt4MCwgeTAsIHowLCBhLXRDb2VmZiwgYi10Q29lZmYsIGMtdENvZWZmXSkgcG9pbnQgYW5kIHBhcmFtZXRyaWMgZXF1YXRpb24gb2YgM0QgbGluZVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbeCwgeSwgel0sIFt4MCwgeTAsIHowLCBhLCBiLCBjXSlcbiAgICAqICAgIG1hdGguZGlzdGFuY2Uoe3BvaW50WDogMiwgcG9pbnRZOiA1LCBwb2ludFo6IDl9LCB7eDA6IDQsIHkwOiA2LCB6MDogMywgYTogNCwgYjogMiwgYzogMH0pXG4gICAgKlxuICAgICogRXhhbXBsZXM6XG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKFswLDBdLCBbNCw0XSkgICAgICAgICAgICAgICAgICAgICAvLyBSZXR1cm5zIDUuNjU2OVxuICAgICogICAgbWF0aC5kaXN0YW5jZShcbiAgICAqICAgICB7cG9pbnRPbmVYOiAwLCBwb2ludE9uZVk6IDB9LFxuICAgICogICAgIHtwb2ludFR3b1g6IDEwLCBwb2ludFR3b1k6IDEwfSkgICAgICAgICAgICAgICAgLy8gUmV0dXJucyAxNC4xNDIxMzU2MjM3MzA5NTFcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoWzEsIDAsIDFdLCBbNCwgLTIsIDJdKSAgICAgICAgICAgIC8vIFJldHVybnMgMy43NDE2NlxuICAgICogICAgbWF0aC5kaXN0YW5jZShcbiAgICAqICAgICB7cG9pbnRPbmVYOiA0LCBwb2ludE9uZVk6IDUsIHBvaW50T25lWjogOH0sXG4gICAgKiAgICAge3BvaW50VHdvWDogMiwgcG9pbnRUd29ZOiA3LCBwb2ludFR3b1o6IDl9KSAgICAvLyBSZXR1cm5zIDNcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoWzEsIDAsIDEsIDBdLCBbMCwgLTEsIDAsIC0xXSkgICAgIC8vIFJldHVybnMgMlxuICAgICogICAgbWF0aC5kaXN0YW5jZShbWzEsIDJdLCBbMSwgMl0sIFsxLCAzXV0pICAgICAgICAgLy8gUmV0dXJucyBbMCwgMSwgMV1cbiAgICAqICAgIG1hdGguZGlzdGFuY2UoW1sxLDIsNF0sIFsxLDIsNl0sIFs4LDEsM11dKSAgICAgIC8vIFJldHVybnMgWzIsIDcuMTQxNDI4NDI4NTQyODUsIDcuNjgxMTQ1NzQ3ODY4NjA4XVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbMTAsIDEwXSwgWzgsIDEsIDNdKSAgICAgICAgICAgICAgLy8gUmV0dXJucyAxMS41MzUyMzAzMTY3OTYzODdcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoWzEwLCAxMF0sIFsyLCAzXSwgWy04LCAwXSkgICAgICAgIC8vIFJldHVybnMgOC43NTk5NTMxMzAzNjI4NDdcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoXG4gICAgKiAgICAge3BvaW50WDogMSwgcG9pbnRZOiA0fSxcbiAgICAqICAgICB7bGluZU9uZVB0WDogNiwgbGluZU9uZVB0WTogM30sXG4gICAgKiAgICAge2xpbmVUd29QdFg6IDIsIGxpbmVUd29QdFk6IDh9KSAgICAgICAgICAgICAgICAvLyBSZXR1cm5zIDIuNzIwNTQ5MzcyNjI0NzQ0XG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKFsyLCAzLCAxXSwgWzEsIDEsIDIsIDUsIDAsIDFdKSAgICAvLyBSZXR1cm5zIDIuMzIwNDc3NDA0NDYxMjg1N1xuICAgICogICAgbWF0aC5kaXN0YW5jZShcbiAgICAqICAgICB7cG9pbnRYOiAyLCBwb2ludFk6IDMsIHBvaW50WjogMX0sXG4gICAgKiAgICAge3gwOiAxLCB5MDogMSwgejA6IDIsIGE6IDUsIGI6IDAsIGM6IDF9ICAgICAgICAvLyBSZXR1cm5zIDIuMzIwNDc3NDA0NDYxMjg1N1xuICAgICpcbiAgICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXggfCBPYmplY3R9IHggICAgQ28tb3JkaW5hdGVzIG9mIGZpcnN0IHBvaW50XG4gICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IHwgT2JqZWN0fSB5ICAgIENvLW9yZGluYXRlcyBvZiBzZWNvbmQgcG9pbnRcbiAgICAqIEByZXR1cm4ge051bWJlciB8IEJpZ051bWJlcn0gUmV0dXJucyB0aGUgZGlzdGFuY2UgZnJvbSB0d28vdGhyZWUgcG9pbnRzXG4gICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5LCBBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5QXJyYXkoeCwgeSwgeikge1xuICAgICAgLy8gUG9pbnQgdG8gTGluZSAyRCAoeD1Qb2ludCwgeT1MaW5lUG9pbnQxLCB6PUxpbmVQb2ludDIpXG4gICAgICBpZiAoeC5sZW5ndGggPT09IDIgJiYgeS5sZW5ndGggPT09IDIgJiYgei5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgaWYgKCFfMmQoeCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBmaXJzdCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfMmQoeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBzZWNvbmQgYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghXzJkKHopKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAyIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3IgdGhpcmQgYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBtID0gZGl2aWRlU2NhbGFyKHN1YnRyYWN0KHpbMV0sIHpbMF0pLCBzdWJ0cmFjdCh5WzFdLCB5WzBdKSk7XG4gICAgICAgIHZhciB4Q29lZmYgPSBtdWx0aXBseVNjYWxhcihtdWx0aXBseVNjYWxhcihtLCBtKSwgeVswXSk7XG4gICAgICAgIHZhciB5Q29lZmYgPSB1bmFyeU1pbnVzKG11bHRpcGx5U2NhbGFyKG0sIHlbMF0pKTtcbiAgICAgICAgdmFyIGNvbnN0YW50ID0geFsxXTtcbiAgICAgICAgcmV0dXJuIF9kaXN0YW5jZVBvaW50TGluZTJEKHhbMF0sIHhbMV0sIHhDb2VmZiwgeUNvZWZmLCBjb25zdGFudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIEFyZ3VtZW50czogVHJ5IGFnYWluJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnT2JqZWN0LCBPYmplY3QsIE9iamVjdCc6IGZ1bmN0aW9uIE9iamVjdE9iamVjdE9iamVjdCh4LCB5LCB6KSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXMoeCkubGVuZ3RoID09PSAyICYmIE9iamVjdC5rZXlzKHkpLmxlbmd0aCA9PT0gMiAmJiBPYmplY3Qua2V5cyh6KS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgaWYgKCFfMmQoeCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZXMgb2YgcG9pbnRYIGFuZCBwb2ludFkgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfMmQoeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZXMgb2YgbGluZU9uZVB0WCBhbmQgbGluZU9uZVB0WSBzaG91bGQgYmUgbnVtYmVycyBvciBCaWdOdW1iZXJzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8yZCh6KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBsaW5lVHdvUHRYIGFuZCBsaW5lVHdvUHRZIHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgncG9pbnRYJyBpbiB4ICYmICdwb2ludFknIGluIHggJiYgJ2xpbmVPbmVQdFgnIGluIHkgJiYgJ2xpbmVPbmVQdFknIGluIHkgJiYgJ2xpbmVUd29QdFgnIGluIHogJiYgJ2xpbmVUd29QdFknIGluIHopIHtcbiAgICAgICAgICB2YXIgbSA9IGRpdmlkZVNjYWxhcihzdWJ0cmFjdCh6LmxpbmVUd29QdFksIHoubGluZVR3b1B0WCksIHN1YnRyYWN0KHkubGluZU9uZVB0WSwgeS5saW5lT25lUHRYKSk7XG4gICAgICAgICAgdmFyIHhDb2VmZiA9IG11bHRpcGx5U2NhbGFyKG11bHRpcGx5U2NhbGFyKG0sIG0pLCB5LmxpbmVPbmVQdFgpO1xuICAgICAgICAgIHZhciB5Q29lZmYgPSB1bmFyeU1pbnVzKG11bHRpcGx5U2NhbGFyKG0sIHkubGluZU9uZVB0WCkpO1xuICAgICAgICAgIHZhciBjb25zdGFudCA9IHgucG9pbnRYO1xuICAgICAgICAgIHJldHVybiBfZGlzdGFuY2VQb2ludExpbmUyRCh4LnBvaW50WCwgeC5wb2ludFksIHhDb2VmZiwgeUNvZWZmLCBjb25zdGFudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignS2V5IG5hbWVzIGRvIG5vdCBtYXRjaCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIEFyZ3VtZW50czogVHJ5IGFnYWluJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyBQb2ludCB0byBMaW5lIDJEICh4PVtwb2ludFgsIHBvaW50WV0sIHk9W3gtY29lZmYsIHktY29lZmYsIGNvbnN0XSlcbiAgICAgIGlmICh4Lmxlbmd0aCA9PT0gMiAmJiB5Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICBpZiAoIV8yZCh4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMiBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIGZpcnN0IGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8zZCh5KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMyBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIHNlY29uZCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9kaXN0YW5jZVBvaW50TGluZTJEKHhbMF0sIHhbMV0sIHlbMF0sIHlbMV0sIHlbMl0pO1xuICAgICAgfSBlbHNlIGlmICh4Lmxlbmd0aCA9PT0gMyAmJiB5Lmxlbmd0aCA9PT0gNikge1xuICAgICAgICAvLyBQb2ludCB0byBMaW5lIDNEXG4gICAgICAgIGlmICghXzNkKHgpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAzIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3IgZmlyc3QgYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghX3BhcmFtZXRyaWNMaW5lKHkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCA2IG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3Igc2Vjb25kIGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX2Rpc3RhbmNlUG9pbnRMaW5lM0QoeFswXSwgeFsxXSwgeFsyXSwgeVswXSwgeVsxXSwgeVsyXSwgeVszXSwgeVs0XSwgeVs1XSk7XG4gICAgICB9IGVsc2UgaWYgKHgubGVuZ3RoID09PSB5Lmxlbmd0aCAmJiB4Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gUG9pbnQgdG8gUG9pbnQgTi1kaW1lbnNpb25zXG4gICAgICAgIGlmICghX2NvbnRhaW5zT25seU51bWJlcnMoeCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbGwgdmFsdWVzIG9mIGFuIGFycmF5IHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghX2NvbnRhaW5zT25seU51bWJlcnMoeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbGwgdmFsdWVzIG9mIGFuIGFycmF5IHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfZXVjbGlkZWFuRGlzdGFuY2UoeCwgeSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIEFyZ3VtZW50czogVHJ5IGFnYWluJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnT2JqZWN0LCBPYmplY3QnOiBmdW5jdGlvbiBPYmplY3RPYmplY3QoeCwgeSkge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHgpLmxlbmd0aCA9PT0gMiAmJiBPYmplY3Qua2V5cyh5KS5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgaWYgKCFfMmQoeCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZXMgb2YgcG9pbnRYIGFuZCBwb2ludFkgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfM2QoeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZXMgb2YgeENvZWZmTGluZSwgeUNvZWZmTGluZSBhbmQgY29uc3RhbnQgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdwb2ludFgnIGluIHggJiYgJ3BvaW50WScgaW4geCAmJiAneENvZWZmTGluZScgaW4geSAmJiAneUNvZWZmTGluZScgaW4geSAmJiAnY29uc3RhbnQnIGluIHkpIHtcbiAgICAgICAgICByZXR1cm4gX2Rpc3RhbmNlUG9pbnRMaW5lMkQoeC5wb2ludFgsIHgucG9pbnRZLCB5LnhDb2VmZkxpbmUsIHkueUNvZWZmTGluZSwgeS5jb25zdGFudCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignS2V5IG5hbWVzIGRvIG5vdCBtYXRjaCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKE9iamVjdC5rZXlzKHgpLmxlbmd0aCA9PT0gMyAmJiBPYmplY3Qua2V5cyh5KS5sZW5ndGggPT09IDYpIHtcbiAgICAgICAgLy8gUG9pbnQgdG8gTGluZSAzRFxuICAgICAgICBpZiAoIV8zZCh4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBwb2ludFgsIHBvaW50WSBhbmQgcG9pbnRaIHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghX3BhcmFtZXRyaWNMaW5lKHkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWVzIG9mIHgwLCB5MCwgejAsIGEsIGIgYW5kIGMgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdwb2ludFgnIGluIHggJiYgJ3BvaW50WScgaW4geCAmJiAneDAnIGluIHkgJiYgJ3kwJyBpbiB5ICYmICd6MCcgaW4geSAmJiAnYScgaW4geSAmJiAnYicgaW4geSAmJiAnYycgaW4geSkge1xuICAgICAgICAgIHJldHVybiBfZGlzdGFuY2VQb2ludExpbmUzRCh4LnBvaW50WCwgeC5wb2ludFksIHgucG9pbnRaLCB5LngwLCB5LnkwLCB5LnowLCB5LmEsIHkuYiwgeS5jKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdLZXkgbmFtZXMgZG8gbm90IG1hdGNoJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoT2JqZWN0LmtleXMoeCkubGVuZ3RoID09PSAyICYmIE9iamVjdC5rZXlzKHkpLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAvLyBQb2ludCB0byBQb2ludCAyRFxuICAgICAgICBpZiAoIV8yZCh4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBwb2ludE9uZVggYW5kIHBvaW50T25lWSBzaG91bGQgYmUgbnVtYmVycyBvciBCaWdOdW1iZXJzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8yZCh5KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBwb2ludFR3b1ggYW5kIHBvaW50VHdvWSBzaG91bGQgYmUgbnVtYmVycyBvciBCaWdOdW1iZXJzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3BvaW50T25lWCcgaW4geCAmJiAncG9pbnRPbmVZJyBpbiB4ICYmICdwb2ludFR3b1gnIGluIHkgJiYgJ3BvaW50VHdvWScgaW4geSkge1xuICAgICAgICAgIHJldHVybiBfZXVjbGlkZWFuRGlzdGFuY2UoW3gucG9pbnRPbmVYLCB4LnBvaW50T25lWV0sIFt5LnBvaW50VHdvWCwgeS5wb2ludFR3b1ldKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdLZXkgbmFtZXMgZG8gbm90IG1hdGNoJyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoT2JqZWN0LmtleXMoeCkubGVuZ3RoID09PSAzICYmIE9iamVjdC5rZXlzKHkpLmxlbmd0aCA9PT0gMykge1xuICAgICAgICAvLyBQb2ludCB0byBQb2ludCAzRFxuICAgICAgICBpZiAoIV8zZCh4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBwb2ludE9uZVgsIHBvaW50T25lWSBhbmQgcG9pbnRPbmVaIHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghXzNkKHkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWVzIG9mIHBvaW50VHdvWCwgcG9pbnRUd29ZIGFuZCBwb2ludFR3b1ogc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdwb2ludE9uZVgnIGluIHggJiYgJ3BvaW50T25lWScgaW4geCAmJiAncG9pbnRPbmVaJyBpbiB4ICYmICdwb2ludFR3b1gnIGluIHkgJiYgJ3BvaW50VHdvWScgaW4geSAmJiAncG9pbnRUd29aJyBpbiB5KSB7XG4gICAgICAgICAgcmV0dXJuIF9ldWNsaWRlYW5EaXN0YW5jZShbeC5wb2ludE9uZVgsIHgucG9pbnRPbmVZLCB4LnBvaW50T25lWl0sIFt5LnBvaW50VHdvWCwgeS5wb2ludFR3b1ksIHkucG9pbnRUd29aXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignS2V5IG5hbWVzIGRvIG5vdCBtYXRjaCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIEFyZ3VtZW50czogVHJ5IGFnYWluJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoYXJyKSB7XG4gICAgICBpZiAoIV9wYWlyd2lzZShhcnIpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luY29ycmVjdCBhcnJheSBmb3JtYXQgZW50ZXJlZCBmb3IgcGFpcndpc2UgZGlzdGFuY2UgY2FsY3VsYXRpb24nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9kaXN0YW5jZVBhaXJ3aXNlKGFycik7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfaXNOdW1iZXIoYSkge1xuICAgIC8vIGRpc3RhbmNlIHN1cHBvcnRzIG51bWJlcnMgYW5kIGJpZ251bWJlcnNcbiAgICByZXR1cm4gdHlwZW9mIGEgPT09ICdudW1iZXInIHx8ICgwLCBfaXMuaXNCaWdOdW1iZXIpKGEpO1xuICB9XG5cbiAgZnVuY3Rpb24gXzJkKGEpIHtcbiAgICAvLyBjaGVja3MgaWYgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgYXJlIGNvcnJlY3QgaW4gY291bnQgYW5kIGFyZSB2YWxpZCAoc2hvdWxkIGJlIG51bWJlcnMpXG4gICAgaWYgKGEuY29uc3RydWN0b3IgIT09IEFycmF5KSB7XG4gICAgICBhID0gX29iamVjdFRvQXJyYXkoYSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9pc051bWJlcihhWzBdKSAmJiBfaXNOdW1iZXIoYVsxXSk7XG4gIH1cblxuICBmdW5jdGlvbiBfM2QoYSkge1xuICAgIC8vIGNoZWNrcyBpZiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBhcmUgY29ycmVjdCBpbiBjb3VudCBhbmQgYXJlIHZhbGlkIChzaG91bGQgYmUgbnVtYmVycylcbiAgICBpZiAoYS5jb25zdHJ1Y3RvciAhPT0gQXJyYXkpIHtcbiAgICAgIGEgPSBfb2JqZWN0VG9BcnJheShhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2lzTnVtYmVyKGFbMF0pICYmIF9pc051bWJlcihhWzFdKSAmJiBfaXNOdW1iZXIoYVsyXSk7XG4gIH1cblxuICBmdW5jdGlvbiBfY29udGFpbnNPbmx5TnVtYmVycyhhKSB7XG4gICAgLy8gY2hlY2tzIGlmIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGFyZSBjb3JyZWN0IGluIGNvdW50IGFuZCBhcmUgdmFsaWQgKHNob3VsZCBiZSBudW1iZXJzKVxuICAgIGlmICghQXJyYXkuaXNBcnJheShhKSkge1xuICAgICAgYSA9IF9vYmplY3RUb0FycmF5KGEpO1xuICAgIH1cblxuICAgIHJldHVybiBhLmV2ZXJ5KF9pc051bWJlcik7XG4gIH1cblxuICBmdW5jdGlvbiBfcGFyYW1ldHJpY0xpbmUoYSkge1xuICAgIGlmIChhLmNvbnN0cnVjdG9yICE9PSBBcnJheSkge1xuICAgICAgYSA9IF9vYmplY3RUb0FycmF5KGEpO1xuICAgIH1cblxuICAgIHJldHVybiBfaXNOdW1iZXIoYVswXSkgJiYgX2lzTnVtYmVyKGFbMV0pICYmIF9pc051bWJlcihhWzJdKSAmJiBfaXNOdW1iZXIoYVszXSkgJiYgX2lzTnVtYmVyKGFbNF0pICYmIF9pc051bWJlcihhWzVdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9vYmplY3RUb0FycmF5KG8pIHtcbiAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG8pO1xuICAgIHZhciBhID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGEucHVzaChvW2tleXNbaV1dKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9wYWlyd2lzZShhKSB7XG4gICAgLy8gY2hlY2tzIGZvciB2YWxpZCBhcmd1bWVudHMgcGFzc2VkIHRvIF9kaXN0YW5jZVBhaXJ3aXNlKEFycmF5KVxuICAgIGlmIChhWzBdLmxlbmd0aCA9PT0gMiAmJiBfaXNOdW1iZXIoYVswXVswXSkgJiYgX2lzTnVtYmVyKGFbMF1bMV0pKSB7XG4gICAgICBpZiAoYS5zb21lKGZ1bmN0aW9uIChhSSkge1xuICAgICAgICByZXR1cm4gYUkubGVuZ3RoICE9PSAyIHx8ICFfaXNOdW1iZXIoYUlbMF0pIHx8ICFfaXNOdW1iZXIoYUlbMV0pO1xuICAgICAgfSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoYVswXS5sZW5ndGggPT09IDMgJiYgX2lzTnVtYmVyKGFbMF1bMF0pICYmIF9pc051bWJlcihhWzBdWzFdKSAmJiBfaXNOdW1iZXIoYVswXVsyXSkpIHtcbiAgICAgIGlmIChhLnNvbWUoZnVuY3Rpb24gKGFJKSB7XG4gICAgICAgIHJldHVybiBhSS5sZW5ndGggIT09IDMgfHwgIV9pc051bWJlcihhSVswXSkgfHwgIV9pc051bWJlcihhSVsxXSkgfHwgIV9pc051bWJlcihhSVsyXSk7XG4gICAgICB9KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9kaXN0YW5jZVBvaW50TGluZTJEKHgsIHksIGEsIGIsIGMpIHtcbiAgICB2YXIgbnVtID0gYWJzKGFkZFNjYWxhcihhZGRTY2FsYXIobXVsdGlwbHlTY2FsYXIoYSwgeCksIG11bHRpcGx5U2NhbGFyKGIsIHkpKSwgYykpO1xuICAgIHZhciBkZW4gPSBzcXJ0KGFkZFNjYWxhcihtdWx0aXBseVNjYWxhcihhLCBhKSwgbXVsdGlwbHlTY2FsYXIoYiwgYikpKTtcbiAgICByZXR1cm4gZGl2aWRlU2NhbGFyKG51bSwgZGVuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9kaXN0YW5jZVBvaW50TGluZTNEKHgsIHksIHosIHgwLCB5MCwgejAsIGEsIGIsIGMpIHtcbiAgICB2YXIgbnVtID0gW3N1YnRyYWN0KG11bHRpcGx5U2NhbGFyKHN1YnRyYWN0KHkwLCB5KSwgYyksIG11bHRpcGx5U2NhbGFyKHN1YnRyYWN0KHowLCB6KSwgYikpLCBzdWJ0cmFjdChtdWx0aXBseVNjYWxhcihzdWJ0cmFjdCh6MCwgeiksIGEpLCBtdWx0aXBseVNjYWxhcihzdWJ0cmFjdCh4MCwgeCksIGMpKSwgc3VidHJhY3QobXVsdGlwbHlTY2FsYXIoc3VidHJhY3QoeDAsIHgpLCBiKSwgbXVsdGlwbHlTY2FsYXIoc3VidHJhY3QoeTAsIHkpLCBhKSldO1xuICAgIG51bSA9IHNxcnQoYWRkU2NhbGFyKGFkZFNjYWxhcihtdWx0aXBseVNjYWxhcihudW1bMF0sIG51bVswXSksIG11bHRpcGx5U2NhbGFyKG51bVsxXSwgbnVtWzFdKSksIG11bHRpcGx5U2NhbGFyKG51bVsyXSwgbnVtWzJdKSkpO1xuICAgIHZhciBkZW4gPSBzcXJ0KGFkZFNjYWxhcihhZGRTY2FsYXIobXVsdGlwbHlTY2FsYXIoYSwgYSksIG11bHRpcGx5U2NhbGFyKGIsIGIpKSwgbXVsdGlwbHlTY2FsYXIoYywgYykpKTtcbiAgICByZXR1cm4gZGl2aWRlU2NhbGFyKG51bSwgZGVuKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9ldWNsaWRlYW5EaXN0YW5jZSh4LCB5KSB7XG4gICAgdmFyIHZlY3RvclNpemUgPSB4Lmxlbmd0aDtcbiAgICB2YXIgcmVzdWx0ID0gMDtcbiAgICB2YXIgZGlmZiA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZlY3RvclNpemU7IGkrKykge1xuICAgICAgZGlmZiA9IHN1YnRyYWN0KHhbaV0sIHlbaV0pO1xuICAgICAgcmVzdWx0ID0gYWRkU2NhbGFyKG11bHRpcGx5U2NhbGFyKGRpZmYsIGRpZmYpLCByZXN1bHQpO1xuICAgIH1cblxuICAgIHJldHVybiBzcXJ0KHJlc3VsdCk7XG4gIH1cblxuICBmdW5jdGlvbiBfZGlzdGFuY2VQYWlyd2lzZShhKSB7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBwb2ludEEgPSBbXTtcbiAgICB2YXIgcG9pbnRCID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBmb3IgKHZhciBqID0gaSArIDE7IGogPCBhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChhWzBdLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHBvaW50QSA9IFthW2ldWzBdLCBhW2ldWzFdXTtcbiAgICAgICAgICBwb2ludEIgPSBbYVtqXVswXSwgYVtqXVsxXV07XG4gICAgICAgIH0gZWxzZSBpZiAoYVswXS5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgICBwb2ludEEgPSBbYVtpXVswXSwgYVtpXVsxXSwgYVtpXVsyXV07XG4gICAgICAgICAgcG9pbnRCID0gW2Fbal1bMF0sIGFbal1bMV0sIGFbal1bMl1dO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0LnB1c2goX2V1Y2xpZGVhbkRpc3RhbmNlKHBvaW50QSwgcG9pbnRCKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZURpc3RhbmNlID0gY3JlYXRlRGlzdGFuY2U7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUludGVyc2VjdCA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2ludGVyc2VjdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnYWJzJywgJ2FkZCcsICdhZGRTY2FsYXInLCAnbWF0cml4JywgJ211bHRpcGx5JywgJ211bHRpcGx5U2NhbGFyJywgJ2RpdmlkZVNjYWxhcicsICdzdWJ0cmFjdCcsICdzbWFsbGVyJywgJ2VxdWFsU2NhbGFyJ107XG52YXIgY3JlYXRlSW50ZXJzZWN0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgYWJzID0gX3JlZi5hYnMsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXIsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIHNtYWxsZXIgPSBfcmVmLnNtYWxsZXIsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXI7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHBvaW50IG9mIGludGVyc2VjdGlvbiBvZiB0d28gbGluZXMgaW4gdHdvIG9yIHRocmVlIGRpbWVuc2lvbnNcbiAgICogYW5kIG9mIGEgbGluZSBhbmQgYSBwbGFuZSBpbiB0aHJlZSBkaW1lbnNpb25zLiBUaGUgaW5wdXRzIGFyZSBpbiB0aGUgZm9ybSBvZlxuICAgKiBhcnJheXMgb3IgMSBkaW1lbnNpb25hbCBtYXRyaWNlcy4gVGhlIGxpbmUgaW50ZXJzZWN0aW9uIGZ1bmN0aW9ucyByZXR1cm4gbnVsbFxuICAgKiBpZiB0aGUgbGluZXMgZG8gbm90IG1lZXQuXG4gICAqXG4gICAqIE5vdGU6IEZpbGwgdGhlIHBsYW5lIGNvZWZmaWNpZW50cyBhcyBgeCArIHkgKyB6ID0gY2AgYW5kIG5vdCBhcyBgeCArIHkgKyB6ICsgYyA9IDBgLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguaW50ZXJzZWN0KGVuZFBvaW50MUxpbmUxLCBlbmRQb2ludDJMaW5lMSwgZW5kUG9pbnQxTGluZTIsIGVuZFBvaW50MkxpbmUyKVxuICAgKiAgICBtYXRoLmludGVyc2VjdChlbmRQb2ludDEsIGVuZFBvaW50MiwgcGxhbmVDb2VmZmljaWVudHMpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmludGVyc2VjdChbMCwgMF0sIFsxMCwgMTBdLCBbMTAsIDBdLCBbMCwgMTBdKSAgICAgICAgICAgICAgLy8gUmV0dXJucyBbNSwgNV1cbiAgICogICAgbWF0aC5pbnRlcnNlY3QoWzAsIDAsIDBdLCBbMTAsIDEwLCAwXSwgWzEwLCAwLCAwXSwgWzAsIDEwLCAwXSkgIC8vIFJldHVybnMgWzUsIDUsIDBdXG4gICAqICAgIG1hdGguaW50ZXJzZWN0KFsxLCAwLCAxXSwgIFs0LCAtMiwgMl0sIFsxLCAxLCAxLCA2XSkgICAgICAgICAgICAvLyBSZXR1cm5zIFs3LCAtNCwgM11cbiAgICpcbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHcgICBDby1vcmRpbmF0ZXMgb2YgZmlyc3QgZW5kLXBvaW50IG9mIGZpcnN0IGxpbmVcbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHggICBDby1vcmRpbmF0ZXMgb2Ygc2Vjb25kIGVuZC1wb2ludCBvZiBmaXJzdCBsaW5lXG4gICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSB5ICAgQ28tb3JkaW5hdGVzIG9mIGZpcnN0IGVuZC1wb2ludCBvZiBzZWNvbmQgbGluZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SIENvLWVmZmljaWVudHMgb2YgdGhlIHBsYW5lJ3MgZXF1YXRpb25cbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHogICBDby1vcmRpbmF0ZXMgb2Ygc2Vjb25kIGVuZC1wb2ludCBvZiBzZWNvbmQgbGluZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9SIG51bGwgaWYgdGhlIGNhbGN1bGF0aW9uIGlzIGZvciBsaW5lIGFuZCBwbGFuZVxuICAgKiBAcmV0dXJuIHtBcnJheX0gICAgICAgICAgICAgIFJldHVybnMgdGhlIHBvaW50IG9mIGludGVyc2VjdGlvbiBvZiBsaW5lcy9saW5lcy1wbGFuZXNcbiAgICovXG4gIHZhciBpbnRlcnNlY3QgPSB0eXBlZCgnaW50ZXJzZWN0Jywge1xuICAgICdBcnJheSwgQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheUFycmF5KHgsIHksIHBsYW5lKSB7XG4gICAgICBpZiAoIV8zZCh4KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDMgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBmaXJzdCBhcmd1bWVudCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIV8zZCh5KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDMgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBzZWNvbmQgYXJndW1lbnQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfNGQocGxhbmUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggNCBudW1iZXJzIGV4cGVjdGVkIGFzIHRoaXJkIGFyZ3VtZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfaW50ZXJzZWN0TGluZVBsYW5lKHhbMF0sIHhbMV0sIHhbMl0sIHlbMF0sIHlbMV0sIHlbMl0sIHBsYW5lWzBdLCBwbGFuZVsxXSwgcGxhbmVbMl0sIHBsYW5lWzNdKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXksIEFycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXlBcnJheUFycmF5KHcsIHgsIHksIHopIHtcbiAgICAgIGlmICh3Lmxlbmd0aCA9PT0gMikge1xuICAgICAgICBpZiAoIV8yZCh3KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMiBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIGZpcnN0IGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8yZCh4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMiBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIHNlY29uZCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfMmQoeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciB0aGlyZCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfMmQoeikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBmb3VydGggYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfaW50ZXJzZWN0MmQodywgeCwgeSwgeik7XG4gICAgICB9IGVsc2UgaWYgKHcubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIGlmICghXzNkKHcpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAzIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3IgZmlyc3QgYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghXzNkKHgpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAzIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3Igc2Vjb25kIGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8zZCh5KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMyBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIHRoaXJkIGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8zZCh6KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMyBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIGZvdXJ0aCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9pbnRlcnNlY3QzZCh3WzBdLCB3WzFdLCB3WzJdLCB4WzBdLCB4WzFdLCB4WzJdLCB5WzBdLCB5WzFdLCB5WzJdLCB6WzBdLCB6WzFdLCB6WzJdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5cyB3aXRoIHR3byBvciB0aGVlIGRpbWVuc2lvbmFsIHBvaW50cyBleHBlY3RlZCcpO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ01hdHJpeCwgTWF0cml4LCBNYXRyaXgnOiBmdW5jdGlvbiBNYXRyaXhNYXRyaXhNYXRyaXgoeCwgeSwgcGxhbmUpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoaW50ZXJzZWN0KHgudmFsdWVPZigpLCB5LnZhbHVlT2YoKSwgcGxhbmUudmFsdWVPZigpKSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBNYXRyaXgsIE1hdHJpeCwgTWF0cml4JzogZnVuY3Rpb24gTWF0cml4TWF0cml4TWF0cml4TWF0cml4KHcsIHgsIHksIHopIHtcbiAgICAgIC8vIFRPRE86IG91dHB1dCBtYXRyaXggdHlwZSBzaG91bGQgbWF0Y2ggaW5wdXQgbWF0cml4IHR5cGVcbiAgICAgIHJldHVybiBtYXRyaXgoaW50ZXJzZWN0KHcudmFsdWVPZigpLCB4LnZhbHVlT2YoKSwgeS52YWx1ZU9mKCksIHoudmFsdWVPZigpKSk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfaXNOdW1lcmljKGEpIHtcbiAgICAvLyBpbnRlcnNlY3Qgc3VwcG9ydHMgbnVtYmVycyBhbmQgYmlnbnVtYmVyc1xuICAgIHJldHVybiB0eXBlb2YgYSA9PT0gJ251bWJlcicgfHwgKDAsIF9pcy5pc0JpZ051bWJlcikoYSk7XG4gIH1cblxuICBmdW5jdGlvbiBfMmQoeCkge1xuICAgIHJldHVybiB4Lmxlbmd0aCA9PT0gMiAmJiBfaXNOdW1lcmljKHhbMF0pICYmIF9pc051bWVyaWMoeFsxXSk7XG4gIH1cblxuICBmdW5jdGlvbiBfM2QoeCkge1xuICAgIHJldHVybiB4Lmxlbmd0aCA9PT0gMyAmJiBfaXNOdW1lcmljKHhbMF0pICYmIF9pc051bWVyaWMoeFsxXSkgJiYgX2lzTnVtZXJpYyh4WzJdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF80ZCh4KSB7XG4gICAgcmV0dXJuIHgubGVuZ3RoID09PSA0ICYmIF9pc051bWVyaWMoeFswXSkgJiYgX2lzTnVtZXJpYyh4WzFdKSAmJiBfaXNOdW1lcmljKHhbMl0pICYmIF9pc051bWVyaWMoeFszXSk7XG4gIH1cblxuICBmdW5jdGlvbiBfaW50ZXJzZWN0MmQocDFhLCBwMWIsIHAyYSwgcDJiKSB7XG4gICAgdmFyIG8xID0gcDFhO1xuICAgIHZhciBvMiA9IHAyYTtcbiAgICB2YXIgZDEgPSBzdWJ0cmFjdChvMSwgcDFiKTtcbiAgICB2YXIgZDIgPSBzdWJ0cmFjdChvMiwgcDJiKTtcbiAgICB2YXIgZGV0ID0gc3VidHJhY3QobXVsdGlwbHlTY2FsYXIoZDFbMF0sIGQyWzFdKSwgbXVsdGlwbHlTY2FsYXIoZDJbMF0sIGQxWzFdKSk7XG5cbiAgICBpZiAoc21hbGxlcihhYnMoZGV0KSwgY29uZmlnLmVwc2lsb24pKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgZDIwbzExID0gbXVsdGlwbHlTY2FsYXIoZDJbMF0sIG8xWzFdKTtcbiAgICB2YXIgZDIxbzEwID0gbXVsdGlwbHlTY2FsYXIoZDJbMV0sIG8xWzBdKTtcbiAgICB2YXIgZDIwbzIxID0gbXVsdGlwbHlTY2FsYXIoZDJbMF0sIG8yWzFdKTtcbiAgICB2YXIgZDIxbzIwID0gbXVsdGlwbHlTY2FsYXIoZDJbMV0sIG8yWzBdKTtcbiAgICB2YXIgdCA9IGRpdmlkZVNjYWxhcihhZGRTY2FsYXIoc3VidHJhY3Qoc3VidHJhY3QoZDIwbzExLCBkMjFvMTApLCBkMjBvMjEpLCBkMjFvMjApLCBkZXQpO1xuICAgIHJldHVybiBhZGQobXVsdGlwbHkoZDEsIHQpLCBvMSk7XG4gIH1cblxuICBmdW5jdGlvbiBfaW50ZXJzZWN0M2RIZWxwZXIoYSwgYiwgYywgZCwgZSwgZiwgZywgaCwgaSwgaiwgaywgbCkge1xuICAgIC8vIChhIC0gYikqKGMgLSBkKSArIChlIC0gZikqKGcgLSBoKSArIChpIC0gaikqKGsgLSBsKVxuICAgIHZhciBhZGQxID0gbXVsdGlwbHlTY2FsYXIoc3VidHJhY3QoYSwgYiksIHN1YnRyYWN0KGMsIGQpKTtcbiAgICB2YXIgYWRkMiA9IG11bHRpcGx5U2NhbGFyKHN1YnRyYWN0KGUsIGYpLCBzdWJ0cmFjdChnLCBoKSk7XG4gICAgdmFyIGFkZDMgPSBtdWx0aXBseVNjYWxhcihzdWJ0cmFjdChpLCBqKSwgc3VidHJhY3QoaywgbCkpO1xuICAgIHJldHVybiBhZGRTY2FsYXIoYWRkU2NhbGFyKGFkZDEsIGFkZDIpLCBhZGQzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9pbnRlcnNlY3QzZCh4MSwgeTEsIHoxLCB4MiwgeTIsIHoyLCB4MywgeTMsIHozLCB4NCwgeTQsIHo0KSB7XG4gICAgdmFyIGQxMzQzID0gX2ludGVyc2VjdDNkSGVscGVyKHgxLCB4MywgeDQsIHgzLCB5MSwgeTMsIHk0LCB5MywgejEsIHozLCB6NCwgejMpO1xuXG4gICAgdmFyIGQ0MzIxID0gX2ludGVyc2VjdDNkSGVscGVyKHg0LCB4MywgeDIsIHgxLCB5NCwgeTMsIHkyLCB5MSwgejQsIHozLCB6MiwgejEpO1xuXG4gICAgdmFyIGQxMzIxID0gX2ludGVyc2VjdDNkSGVscGVyKHgxLCB4MywgeDIsIHgxLCB5MSwgeTMsIHkyLCB5MSwgejEsIHozLCB6MiwgejEpO1xuXG4gICAgdmFyIGQ0MzQzID0gX2ludGVyc2VjdDNkSGVscGVyKHg0LCB4MywgeDQsIHgzLCB5NCwgeTMsIHk0LCB5MywgejQsIHozLCB6NCwgejMpO1xuXG4gICAgdmFyIGQyMTIxID0gX2ludGVyc2VjdDNkSGVscGVyKHgyLCB4MSwgeDIsIHgxLCB5MiwgeTEsIHkyLCB5MSwgejIsIHoxLCB6MiwgejEpO1xuXG4gICAgdmFyIHRhID0gZGl2aWRlU2NhbGFyKHN1YnRyYWN0KG11bHRpcGx5U2NhbGFyKGQxMzQzLCBkNDMyMSksIG11bHRpcGx5U2NhbGFyKGQxMzIxLCBkNDM0MykpLCBzdWJ0cmFjdChtdWx0aXBseVNjYWxhcihkMjEyMSwgZDQzNDMpLCBtdWx0aXBseVNjYWxhcihkNDMyMSwgZDQzMjEpKSk7XG4gICAgdmFyIHRiID0gZGl2aWRlU2NhbGFyKGFkZFNjYWxhcihkMTM0MywgbXVsdGlwbHlTY2FsYXIodGEsIGQ0MzIxKSksIGQ0MzQzKTtcbiAgICB2YXIgcGF4ID0gYWRkU2NhbGFyKHgxLCBtdWx0aXBseVNjYWxhcih0YSwgc3VidHJhY3QoeDIsIHgxKSkpO1xuICAgIHZhciBwYXkgPSBhZGRTY2FsYXIoeTEsIG11bHRpcGx5U2NhbGFyKHRhLCBzdWJ0cmFjdCh5MiwgeTEpKSk7XG4gICAgdmFyIHBheiA9IGFkZFNjYWxhcih6MSwgbXVsdGlwbHlTY2FsYXIodGEsIHN1YnRyYWN0KHoyLCB6MSkpKTtcbiAgICB2YXIgcGJ4ID0gYWRkU2NhbGFyKHgzLCBtdWx0aXBseVNjYWxhcih0Yiwgc3VidHJhY3QoeDQsIHgzKSkpO1xuICAgIHZhciBwYnkgPSBhZGRTY2FsYXIoeTMsIG11bHRpcGx5U2NhbGFyKHRiLCBzdWJ0cmFjdCh5NCwgeTMpKSk7XG4gICAgdmFyIHBieiA9IGFkZFNjYWxhcih6MywgbXVsdGlwbHlTY2FsYXIodGIsIHN1YnRyYWN0KHo0LCB6MykpKTtcblxuICAgIGlmIChlcXVhbFNjYWxhcihwYXgsIHBieCkgJiYgZXF1YWxTY2FsYXIocGF5LCBwYnkpICYmIGVxdWFsU2NhbGFyKHBheiwgcGJ6KSkge1xuICAgICAgcmV0dXJuIFtwYXgsIHBheSwgcGF6XTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gX2ludGVyc2VjdExpbmVQbGFuZSh4MSwgeTEsIHoxLCB4MiwgeTIsIHoyLCB4LCB5LCB6LCBjKSB7XG4gICAgdmFyIHgxeCA9IG11bHRpcGx5U2NhbGFyKHgxLCB4KTtcbiAgICB2YXIgeDJ4ID0gbXVsdGlwbHlTY2FsYXIoeDIsIHgpO1xuICAgIHZhciB5MXkgPSBtdWx0aXBseVNjYWxhcih5MSwgeSk7XG4gICAgdmFyIHkyeSA9IG11bHRpcGx5U2NhbGFyKHkyLCB5KTtcbiAgICB2YXIgejF6ID0gbXVsdGlwbHlTY2FsYXIoejEsIHopO1xuICAgIHZhciB6MnogPSBtdWx0aXBseVNjYWxhcih6Miwgeik7XG4gICAgdmFyIHQgPSBkaXZpZGVTY2FsYXIoc3VidHJhY3Qoc3VidHJhY3Qoc3VidHJhY3QoYywgeDF4KSwgeTF5KSwgejF6KSwgc3VidHJhY3Qoc3VidHJhY3Qoc3VidHJhY3QoYWRkU2NhbGFyKGFkZFNjYWxhcih4MngsIHkyeSksIHoyeiksIHgxeCksIHkxeSksIHoxeikpO1xuICAgIHZhciBweCA9IGFkZFNjYWxhcih4MSwgbXVsdGlwbHlTY2FsYXIodCwgc3VidHJhY3QoeDIsIHgxKSkpO1xuICAgIHZhciBweSA9IGFkZFNjYWxhcih5MSwgbXVsdGlwbHlTY2FsYXIodCwgc3VidHJhY3QoeTIsIHkxKSkpO1xuICAgIHZhciBweiA9IGFkZFNjYWxhcih6MSwgbXVsdGlwbHlTY2FsYXIodCwgc3VidHJhY3QoejIsIHoxKSkpO1xuICAgIHJldHVybiBbcHgsIHB5LCBwel07IC8vIFRPRE86IEFkZCBjYXNlcyB3aGVuIGxpbmUgaXMgcGFyYWxsZWwgdG8gdGhlIHBsYW5lOlxuICAgIC8vICAgICAgIChhKSBubyBpbnRlcnNlY3Rpb24sXG4gICAgLy8gICAgICAgKGIpIGxpbmUgY29udGFpbmVkIGluIHBsYW5lXG4gIH1cblxuICByZXR1cm4gaW50ZXJzZWN0O1xufSk7XG5leHBvcnRzLmNyZWF0ZUludGVyc2VjdCA9IGNyZWF0ZUludGVyc2VjdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQW5kID0gdm9pZCAwO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMlwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA2XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdhbmQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ3plcm9zJywgJ25vdCddO1xudmFyIGNyZWF0ZUFuZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIHplcm9zID0gX3JlZi56ZXJvcyxcbiAgICAgIG5vdCA9IF9yZWYubm90O1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNiA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0wNikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogTG9naWNhbCBgYW5kYC4gVGVzdCB3aGV0aGVyIHR3byB2YWx1ZXMgYXJlIGJvdGggZGVmaW5lZCB3aXRoIGEgbm9uemVyby9ub25lbXB0eSB2YWx1ZS5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFuZCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hbmQoMiwgNCkgICAvLyByZXR1cm5zIHRydWVcbiAgICpcbiAgICogICAgYSA9IFsyLCAwLCAwXVxuICAgKiAgICBiID0gWzMsIDcsIDBdXG4gICAqICAgIGMgPSAwXG4gICAqXG4gICAqICAgIG1hdGguYW5kKGEsIGIpICAgLy8gcmV0dXJucyBbdHJ1ZSwgZmFsc2UsIGZhbHNlXVxuICAgKiAgICBtYXRoLmFuZChhLCBjKSAgIC8vIHJldHVybnMgW2ZhbHNlLCBmYWxzZSwgZmFsc2VdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBub3QsIG9yLCB4b3JcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBjaGVja1xuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBjaGVja1xuICAgKiBAcmV0dXJuIHtib29sZWFuIHwgQXJyYXkgfCBNYXRyaXh9XG4gICAqICAgICAgICAgICAgUmV0dXJucyB0cnVlIHdoZW4gYm90aCBpbnB1dHMgYXJlIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuXG4gICAqL1xuXG4gIHZhciBhbmQgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5hbmROdW1iZXIsXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7XG4gICAgICByZXR1cm4gKHgucmUgIT09IDAgfHwgeC5pbSAhPT0gMCkgJiYgKHkucmUgIT09IDAgfHwgeS5pbSAhPT0gMCk7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuICF4LmlzWmVybygpICYmICF5LmlzWmVybygpICYmICF4LmlzTmFOKCkgJiYgIXkuaXNOYU4oKTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgcmV0dXJuIGFuZCh4LnZhbHVlIHx8IDAsIHkudmFsdWUgfHwgMCk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA2KHgsIHksIGFuZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDIoeSwgeCwgYW5kLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHgsIHksIGFuZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGFuZCk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYW5kKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbmQobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFuZCh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKG5vdCh5KSkge1xuICAgICAgICAvLyByZXR1cm4gemVybyBtYXRyaXhcbiAgICAgICAgcmV0dXJuIHplcm9zKHguc2l6ZSgpLCB4LnN0b3JhZ2UoKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCBhbmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgLy8gY2hlY2sgc2NhbGFyXG4gICAgICBpZiAobm90KHkpKSB7XG4gICAgICAgIC8vIHJldHVybiB6ZXJvIG1hdHJpeFxuICAgICAgICByZXR1cm4gemVyb3MoeC5zaXplKCksIHguc3RvcmFnZSgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGFuZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKG5vdCh4KSkge1xuICAgICAgICAvLyByZXR1cm4gemVybyBtYXRyaXhcbiAgICAgICAgcmV0dXJuIHplcm9zKHguc2l6ZSgpLCB4LnN0b3JhZ2UoKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh5LCB4LCBhbmQsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChub3QoeCkpIHtcbiAgICAgICAgLy8gcmV0dXJuIHplcm8gbWF0cml4XG4gICAgICAgIHJldHVybiB6ZXJvcyh4LnNpemUoKSwgeC5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgYW5kLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFuZChtYXRyaXgoeCksIHkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFuZCh4LCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYW5kO1xufSk7XG5leHBvcnRzLmNyZWF0ZUFuZCA9IGNyZWF0ZUFuZDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTm90ID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnbm90JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlTm90ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogTG9naWNhbCBgbm90YC4gRmxpcHMgYm9vbGVhbiB2YWx1ZSBvZiBhIGdpdmVuIHBhcmFtZXRlci5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLm5vdCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5ub3QoMikgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGgubm90KDApICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGgubm90KHRydWUpICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKlxuICAgKiAgICBhID0gWzIsIC03LCAwXVxuICAgKiAgICBtYXRoLm5vdChhKSAgICAgIC8vIHJldHVybnMgW2ZhbHNlLCBmYWxzZSwgdHJ1ZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGFuZCwgb3IsIHhvclxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGNoZWNrXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRydWUgd2hlbiBpbnB1dCBpcyBhIHplcm8gb3IgZW1wdHkgdmFsdWUuXG4gICAqL1xuICB2YXIgbm90ID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5ub3ROdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5yZSA9PT0gMCAmJiB4LmltID09PSAwO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguaXNaZXJvKCkgfHwgeC5pc05hTigpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4geC52YWx1ZSAhPT0gbnVsbCA/IG5vdCh4LnZhbHVlKSA6IHRydWU7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIG5vdCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG5vdDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVOb3QgPSBjcmVhdGVOb3Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU9yID0gdm9pZCAwO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA1XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdvcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVPciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNSA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0wNSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogTG9naWNhbCBgb3JgLiBUZXN0IGlmIGF0IGxlYXN0IG9uZSB2YWx1ZSBpcyBkZWZpbmVkIHdpdGggYSBub256ZXJvL25vbmVtcHR5IHZhbHVlLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgub3IoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgub3IoMiwgNCkgICAvLyByZXR1cm5zIHRydWVcbiAgICpcbiAgICogICAgYSA9IFsyLCA1LCAwXVxuICAgKiAgICBiID0gWzAsIDIyLCAwXVxuICAgKiAgICBjID0gMFxuICAgKlxuICAgKiAgICBtYXRoLm9yKGEsIGIpICAgLy8gcmV0dXJucyBbdHJ1ZSwgdHJ1ZSwgZmFsc2VdXG4gICAqICAgIG1hdGgub3IoYiwgYykgICAvLyByZXR1cm5zIFtmYWxzZSwgdHJ1ZSwgZmFsc2VdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhbmQsIG5vdCwgeG9yXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggRmlyc3QgdmFsdWUgdG8gY2hlY2tcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gY2hlY2tcbiAgICogQHJldHVybiB7Ym9vbGVhbiB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFJldHVybnMgdHJ1ZSB3aGVuIG9uZSBvZiB0aGUgaW5wdXRzIGlzIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuXG4gICAqL1xuXG4gIHZhciBvciA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLm9yTnVtYmVyLFxuICAgICdDb21wbGV4LCBDb21wbGV4JzogZnVuY3Rpb24gQ29tcGxleENvbXBsZXgoeCwgeSkge1xuICAgICAgcmV0dXJuIHgucmUgIT09IDAgfHwgeC5pbSAhPT0gMCB8fCB5LnJlICE9PSAwIHx8IHkuaW0gIT09IDA7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuICF4LmlzWmVybygpICYmICF4LmlzTmFOKCkgfHwgIXkuaXNaZXJvKCkgJiYgIXkuaXNOYU4oKTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgcmV0dXJuIG9yKHgudmFsdWUgfHwgMCwgeS52YWx1ZSB8fCAwKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDUoeCwgeSwgb3IpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgb3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeCwgeSwgb3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBvcik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gb3IobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIG9yKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBvcih4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih4LCB5LCBvciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgb3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgb3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgb3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBvciwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgb3IsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gb3I7XG59KTtcbmV4cG9ydHMuY3JlYXRlT3IgPSBjcmVhdGVPcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlWG9yID0gdm9pZCAwO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA3XCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTJcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICd4b3InO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlWG9yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA3ID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTA3KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBMb2dpY2FsIGB4b3JgLiBUZXN0IHdoZXRoZXIgb25lIGFuZCBvbmx5IG9uZSB2YWx1ZSBpcyBkZWZpbmVkIHdpdGggYSBub256ZXJvL25vbmVtcHR5IHZhbHVlLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgueG9yKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnhvcigyLCA0KSAgIC8vIHJldHVybnMgZmFsc2VcbiAgICpcbiAgICogICAgYSA9IFsyLCAwLCAwXVxuICAgKiAgICBiID0gWzIsIDcsIDBdXG4gICAqICAgIGMgPSAwXG4gICAqXG4gICAqICAgIG1hdGgueG9yKGEsIGIpICAgLy8gcmV0dXJucyBbZmFsc2UsIHRydWUsIGZhbHNlXVxuICAgKiAgICBtYXRoLnhvcihhLCBjKSAgIC8vIHJldHVybnMgW3RydWUsIGZhbHNlLCBmYWxzZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGFuZCwgbm90LCBvclxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGNoZWNrXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHkgU2Vjb25kIHZhbHVlIHRvIGNoZWNrXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRydWUgd2hlbiBvbmUgYW5kIG9ubHkgb25lIGlucHV0IGlzIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuXG4gICAqL1xuXG4gIHZhciB4b3IgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci54b3JOdW1iZXIsXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7XG4gICAgICByZXR1cm4gKHgucmUgIT09IDAgfHwgeC5pbSAhPT0gMCkgIT09ICh5LnJlICE9PSAwIHx8IHkuaW0gIT09IDApO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiAoIXguaXNaZXJvKCkgJiYgIXguaXNOYU4oKSkgIT09ICgheS5pc1plcm8oKSAmJiAheS5pc05hTigpKTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgcmV0dXJuIHhvcih4LnZhbHVlIHx8IDAsIHkudmFsdWUgfHwgMCk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA3KHgsIHksIHhvcik7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCB4b3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeCwgeSwgeG9yLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgeG9yKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiB4b3IobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHhvcihtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4geG9yKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHgsIHksIHhvciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgeG9yLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHksIHgsIHhvciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCB4b3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCB4b3IsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIHhvciwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB4b3I7XG59KTtcbmV4cG9ydHMuY3JlYXRlWG9yID0gY3JlYXRlWG9yOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBcHBseSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfSW5kZXhFcnJvciA9IHJlcXVpcmUoXCIuLi8uLi9lcnJvci9JbmRleEVycm9yXCIpO1xuXG52YXIgbmFtZSA9ICdhcHBseSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdpc0ludGVnZXInXTtcbnZhciBjcmVhdGVBcHBseSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBpc0ludGVnZXIgPSBfcmVmLmlzSW50ZWdlcjtcblxuICAvKipcbiAgICogQXBwbHkgYSBmdW5jdGlvbiB0aGF0IG1hcHMgYW4gYXJyYXkgdG8gYSBzY2FsYXJcbiAgICogYWxvbmcgYSBnaXZlbiBheGlzIG9mIGEgbWF0cml4IG9yIGFycmF5LlxuICAgKiBSZXR1cm5zIGEgbmV3IG1hdHJpeCBvciBhcnJheSB3aXRoIG9uZSBsZXNzIGRpbWVuc2lvbiB0aGFuIHRoZSBpbnB1dC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5hcHBseShBLCBkaW0sIGNhbGxiYWNrKVxuICAgKlxuICAgKiBXaGVyZTpcbiAgICpcbiAgICogLSBgZGltOiBudW1iZXJgIGlzIGEgemVyby1iYXNlZCBkaW1lbnNpb24gb3ZlciB3aGljaCB0byBjb25jYXRlbmF0ZSB0aGUgbWF0cmljZXMuXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBjb25zdCBBID0gW1sxLCAyXSwgWzMsIDRdXVxuICAgKiAgICBjb25zdCBzdW0gPSBtYXRoLnN1bVxuICAgKlxuICAgKiAgICBtYXRoLmFwcGx5KEEsIDAsIHN1bSkgICAgICAgICAgICAgLy8gcmV0dXJucyBbNCwgNl1cbiAgICogICAgbWF0aC5hcHBseShBLCAxLCBzdW0pICAgICAgICAgICAgIC8vIHJldHVybnMgWzMsIDddXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBtYXAsIGZpbHRlciwgZm9yRWFjaFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSBhcnJheSAgIFRoZSBpbnB1dCBNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgICAgICAgICAgICBUaGUgZGltZW5zaW9uIGFsb25nIHdoaWNoIHRoZSBjYWxsYmFjayBpcyBhcHBsaWVkXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgaXMgYXBwbGllZC4gVGhpcyBGdW5jdGlvblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZCB0YWtlIGFuIGFycmF5IG9yIDEtZCBtYXRyaXggYXMgYW4gaW5wdXQgYW5kXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGEgbnVtYmVyLlxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gcmVzICAgIFRoZSByZXNpZHVhbCBtYXRyaXggd2l0aCB0aGUgZnVuY3Rpb24gYXBwbGllZCBvdmVyIHNvbWUgZGltZW5zaW9uLlxuICAgKi9cbiAgdmFyIGFwcGx5ID0gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyLCBmdW5jdGlvbic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyRnVuY3Rpb24obWF0LCBkaW0sIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoIWlzSW50ZWdlcihkaW0pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludGVnZXIgbnVtYmVyIGV4cGVjdGVkIGZvciBkaW1lbnNpb24nKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHNpemUgPSBBcnJheS5pc0FycmF5KG1hdCkgPyAoMCwgX2FycmF5LmFycmF5U2l6ZSkobWF0KSA6IG1hdC5zaXplKCk7XG5cbiAgICAgIGlmIChkaW0gPCAwIHx8IGRpbSA+PSBzaXplLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgX0luZGV4RXJyb3IuSW5kZXhFcnJvcihkaW0sIHNpemUubGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKG1hdCkpIHtcbiAgICAgICAgcmV0dXJuIG1hdC5jcmVhdGUoX2FwcGx5KG1hdC52YWx1ZU9mKCksIGRpbSwgY2FsbGJhY2spKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBfYXBwbHkobWF0LCBkaW0sIGNhbGxiYWNrKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYXBwbHk7XG59KTtcbi8qKlxuICogUmVjdXJzaXZlbHkgcmVkdWNlIGEgbWF0cml4XG4gKiBAcGFyYW0ge0FycmF5fSBtYXRcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7QXJyYXl9IHJldFxuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZUFwcGx5ID0gY3JlYXRlQXBwbHk7XG5cbmZ1bmN0aW9uIF9hcHBseShtYXQsIGRpbSwgY2FsbGJhY2spIHtcbiAgdmFyIGksIHJldCwgdHJhbjtcblxuICBpZiAoZGltIDw9IDApIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkobWF0WzBdKSkge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKG1hdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW4gPSBfc3dpdGNoKG1hdCk7XG4gICAgICByZXQgPSBbXTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IHRyYW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmV0W2ldID0gX2FwcGx5KHRyYW5baV0sIGRpbSAtIDEsIGNhbGxiYWNrKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJldDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0ID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbWF0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXRbaV0gPSBfYXBwbHkobWF0W2ldLCBkaW0gLSAxLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxufVxuLyoqXG4gKiBUcmFuc3Bvc2UgYSBtYXRyaXhcbiAqIEBwYXJhbSB7QXJyYXl9IG1hdFxuICogQHJldHVybnMge0FycmF5fSByZXRcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBfc3dpdGNoKG1hdCkge1xuICB2YXIgSSA9IG1hdC5sZW5ndGg7XG4gIHZhciBKID0gbWF0WzBdLmxlbmd0aDtcbiAgdmFyIGksIGo7XG4gIHZhciByZXQgPSBbXTtcblxuICBmb3IgKGogPSAwOyBqIDwgSjsgaisrKSB7XG4gICAgdmFyIHRtcCA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IEk7IGkrKykge1xuICAgICAgdG1wLnB1c2gobWF0W2ldW2pdKTtcbiAgICB9XG5cbiAgICByZXQucHVzaCh0bXApO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29sdW1uID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgbmFtZSA9ICdjb2x1bW4nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnSW5kZXgnLCAnbWF0cml4JywgJ3JhbmdlJ107XG52YXIgY3JlYXRlQ29sdW1uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgcmFuZ2UgPSBfcmVmLnJhbmdlO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBjb2x1bW4gZnJvbSBhIE1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5jb2x1bW4odmFsdWUsIGluZGV4KVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKlxuICAgKiAgICAgLy8gZ2V0IGEgY29sdW1uXG4gICAqICAgICBjb25zdCBkID0gW1sxLCAyXSwgWzMsIDRdXVxuICAgKiAgICAgbWF0aC5jb2x1bW4oZCwgMSkgLy8gcmV0dXJucyBbWzJdLCBbNF1dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgcm93XG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXggfSB2YWx1ZSAgIEFuIGFycmF5IG9yIG1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uICAgICAgICAgICBUaGUgaW5kZXggb2YgdGhlIGNvbHVtblxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgICAgICBUaGUgcmV0cmlldmVkIGNvbHVtblxuICAgKi9cbiAgdmFyIGNvbHVtbiA9IHR5cGVkKG5hbWUsIHtcbiAgICAnTWF0cml4LCBudW1iZXInOiBfY29sdW1uLFxuICAgICdBcnJheSwgbnVtYmVyJzogZnVuY3Rpb24gQXJyYXlOdW1iZXIodmFsdWUsIGNvbHVtbikge1xuICAgICAgcmV0dXJuIF9jb2x1bW4obWF0cml4KCgwLCBfb2JqZWN0LmNsb25lKSh2YWx1ZSkpLCBjb2x1bW4pLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY29sdW1uO1xuICAvKipcbiAgICogUmV0cmlldmUgYSBjb2x1bW4gb2YgYSBtYXRyaXhcbiAgICogQHBhcmFtIHtNYXRyaXggfSB2YWx1ZSAgQSBtYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiAgVGhlIGluZGV4IG9mIHRoZSBjb2x1bW5cbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgVGhlIHJldHJpZXZlZCBjb2x1bW5cbiAgICovXG5cbiAgZnVuY3Rpb24gX2NvbHVtbih2YWx1ZSwgY29sdW1uKSB7XG4gICAgLy8gY2hlY2sgZGltZW5zaW9uc1xuICAgIGlmICh2YWx1ZS5zaXplKCkubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgdHdvIGRpbWVuc2lvbmFsIG1hdHJpeCBpcyBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGNvbHVtbiwgdmFsdWUuc2l6ZSgpWzFdKTtcbiAgICB2YXIgcm93UmFuZ2UgPSByYW5nZSgwLCB2YWx1ZS5zaXplKClbMF0pO1xuICAgIHZhciBpbmRleCA9IG5ldyBJbmRleChyb3dSYW5nZSwgY29sdW1uKTtcbiAgICByZXR1cm4gdmFsdWUuc3Vic2V0KGluZGV4KTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbHVtbiA9IGNyZWF0ZUNvbHVtbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29uY2F0ID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfSW5kZXhFcnJvciA9IHJlcXVpcmUoXCIuLi8uLi9lcnJvci9JbmRleEVycm9yXCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnY29uY2F0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdpc0ludGVnZXInXTtcbnZhciBjcmVhdGVDb25jYXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBpc0ludGVnZXIgPSBfcmVmLmlzSW50ZWdlcjtcblxuICAvKipcbiAgICogQ29uY2F0ZW5hdGUgdHdvIG9yIG1vcmUgbWF0cmljZXMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguY29uY2F0KEEsIEIsIEMsIC4uLilcbiAgICogICAgIG1hdGguY29uY2F0KEEsIEIsIEMsIC4uLiwgZGltKVxuICAgKlxuICAgKiBXaGVyZTpcbiAgICpcbiAgICogLSBgZGltOiBudW1iZXJgIGlzIGEgemVyby1iYXNlZCBkaW1lbnNpb24gb3ZlciB3aGljaCB0byBjb25jYXRlbmF0ZSB0aGUgbWF0cmljZXMuXG4gICAqICAgQnkgZGVmYXVsdCB0aGUgbGFzdCBkaW1lbnNpb24gb2YgdGhlIG1hdHJpY2VzLlxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgQSA9IFtbMSwgMl0sIFs1LCA2XV1cbiAgICogICAgY29uc3QgQiA9IFtbMywgNF0sIFs3LCA4XV1cbiAgICpcbiAgICogICAgbWF0aC5jb25jYXQoQSwgQikgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIFtbMSwgMiwgMywgNF0sIFs1LCA2LCA3LCA4XV1cbiAgICogICAgbWF0aC5jb25jYXQoQSwgQiwgMCkgICAgICAgICAgICAgICAvLyByZXR1cm5zIFtbMSwgMl0sIFs1LCA2XSwgWzMsIDRdLCBbNywgOF1dXG4gICAqICAgIG1hdGguY29uY2F0KCdoZWxsbycsICcgJywgJ3dvcmxkJykgLy8gcmV0dXJucyAnaGVsbG8gd29ybGQnXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzaXplLCBzcXVlZXplLCBzdWJzZXQsIHRyYW5zcG9zZVxuICAgKlxuICAgKiBAcGFyYW0gey4uLiBBcnJheSB8IE1hdHJpeH0gYXJncyAgICAgVHdvIG9yIG1vcmUgbWF0cmljZXNcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9IENvbmNhdGVuYXRlZCBtYXRyaXhcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgLy8gVE9ETzogY2hhbmdlIHNpZ25hdHVyZSB0byAnLi4uQXJyYXkgfCBNYXRyaXgsIGRpbT8nIHdoZW4gc3VwcG9ydGVkXG4gICAgJy4uLkFycmF5IHwgTWF0cml4IHwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXIoYXJncykge1xuICAgICAgdmFyIGk7XG4gICAgICB2YXIgbGVuID0gYXJncy5sZW5ndGg7XG4gICAgICB2YXIgZGltID0gLTE7IC8vIHplcm8tYmFzZWQgZGltZW5zaW9uXG5cbiAgICAgIHZhciBwcmV2RGltO1xuICAgICAgdmFyIGFzTWF0cml4ID0gZmFsc2U7XG4gICAgICB2YXIgbWF0cmljZXMgPSBbXTsgLy8gY29udGFpbnMgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXlzXG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICB2YXIgYXJnID0gYXJnc1tpXTsgLy8gdGVzdCB3aGV0aGVyIHdlIG5lZWQgdG8gcmV0dXJuIGEgTWF0cml4IChpZiBub3Qgd2UgcmV0dXJuIGFuIEFycmF5KVxuXG4gICAgICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KShhcmcpKSB7XG4gICAgICAgICAgYXNNYXRyaXggPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGFyZykgfHwgKDAsIF9pcy5pc0JpZ051bWJlcikoYXJnKSkge1xuICAgICAgICAgIGlmIChpICE9PSBsZW4gLSAxKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0RpbWVuc2lvbiBtdXN0IGJlIHNwZWNpZmllZCBhcyBsYXN0IGFyZ3VtZW50Jyk7XG4gICAgICAgICAgfSAvLyBsYXN0IGFyZ3VtZW50IGNvbnRhaW5zIHRoZSBkaW1lbnNpb24gb24gd2hpY2ggdG8gY29uY2F0ZW5hdGVcblxuXG4gICAgICAgICAgcHJldkRpbSA9IGRpbTtcbiAgICAgICAgICBkaW0gPSBhcmcudmFsdWVPZigpOyAvLyBjaGFuZ2UgQmlnTnVtYmVyIHRvIG51bWJlclxuXG4gICAgICAgICAgaWYgKCFpc0ludGVnZXIoZGltKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW50ZWdlciBudW1iZXIgZXhwZWN0ZWQgZm9yIGRpbWVuc2lvbicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChkaW0gPCAwIHx8IGkgPiAwICYmIGRpbSA+IHByZXZEaW0pIHtcbiAgICAgICAgICAgIC8vIFRPRE86IHdvdWxkIGJlIG1vcmUgY2xlYXIgd2hlbiB0aHJvd2luZyBhIERpbWVuc2lvbkVycm9yIGhlcmVcbiAgICAgICAgICAgIHRocm93IG5ldyBfSW5kZXhFcnJvci5JbmRleEVycm9yKGRpbSwgcHJldkRpbSArIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB0aGlzIGlzIGEgbWF0cml4IG9yIGFycmF5XG4gICAgICAgICAgdmFyIG0gPSAoMCwgX29iamVjdC5jbG9uZSkoYXJnKS52YWx1ZU9mKCk7XG4gICAgICAgICAgdmFyIHNpemUgPSAoMCwgX2FycmF5LmFycmF5U2l6ZSkobSk7XG4gICAgICAgICAgbWF0cmljZXNbaV0gPSBtO1xuICAgICAgICAgIHByZXZEaW0gPSBkaW07XG4gICAgICAgICAgZGltID0gc2l6ZS5sZW5ndGggLSAxOyAvLyB2ZXJpZnkgd2hldGhlciBlYWNoIG9mIHRoZSBtYXRyaWNlcyBoYXMgdGhlIHNhbWUgbnVtYmVyIG9mIGRpbWVuc2lvbnNcblxuICAgICAgICAgIGlmIChpID4gMCAmJiBkaW0gIT09IHByZXZEaW0pIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IocHJldkRpbSArIDEsIGRpbSArIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobWF0cmljZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQXQgbGVhc3Qgb25lIG1hdHJpeCBleHBlY3RlZCcpO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVzID0gbWF0cmljZXMuc2hpZnQoKTtcblxuICAgICAgd2hpbGUgKG1hdHJpY2VzLmxlbmd0aCkge1xuICAgICAgICByZXMgPSBfY29uY2F0KHJlcywgbWF0cmljZXMuc2hpZnQoKSwgZGltLCAwKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFzTWF0cml4ID8gbWF0cml4KHJlcykgOiByZXM7XG4gICAgfSxcbiAgICAnLi4uc3RyaW5nJzogZnVuY3Rpb24gc3RyaW5nKGFyZ3MpIHtcbiAgICAgIHJldHVybiBhcmdzLmpvaW4oJycpO1xuICAgIH1cbiAgfSk7XG59KTtcbi8qKlxuICogUmVjdXJzaXZlbHkgY29uY2F0ZW5hdGUgdHdvIG1hdHJpY2VzLlxuICogVGhlIGNvbnRlbnRzIG9mIHRoZSBtYXRyaWNlcyBpcyBub3QgY2xvbmVkLlxuICogQHBhcmFtIHtBcnJheX0gYSAgICAgICAgICAgICBNdWx0aSBkaW1lbnNpb25hbCBhcnJheVxuICogQHBhcmFtIHtBcnJheX0gYiAgICAgICAgICAgICBNdWx0aSBkaW1lbnNpb25hbCBhcnJheVxuICogQHBhcmFtIHtudW1iZXJ9IGNvbmNhdERpbSAgICBUaGUgZGltZW5zaW9uIG9uIHdoaWNoIHRvIGNvbmNhdGVuYXRlICh6ZXJvLWJhc2VkKVxuICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgICAgICAgICBUaGUgY3VycmVudCBkaW0gKHplcm8tYmFzZWQpXG4gKiBAcmV0dXJuIHtBcnJheX0gYyAgICAgICAgICAgIFRoZSBjb25jYXRlbmF0ZWQgbWF0cml4XG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuY3JlYXRlQ29uY2F0ID0gY3JlYXRlQ29uY2F0O1xuXG5mdW5jdGlvbiBfY29uY2F0KGEsIGIsIGNvbmNhdERpbSwgZGltKSB7XG4gIGlmIChkaW0gPCBjb25jYXREaW0pIHtcbiAgICAvLyByZWN1cnNlIGludG8gbmV4dCBkaW1lbnNpb25cbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGEubGVuZ3RoLCBiLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgdmFyIGMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgY1tpXSA9IF9jb25jYXQoYVtpXSwgYltpXSwgY29uY2F0RGltLCBkaW0gKyAxKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYztcbiAgfSBlbHNlIHtcbiAgICAvLyBjb25jYXRlbmF0ZSB0aGlzIGRpbWVuc2lvblxuICAgIHJldHVybiBhLmNvbmNhdChiKTtcbiAgfVxufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDcm9zcyA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2Nyb3NzJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdzdWJ0cmFjdCcsICdtdWx0aXBseSddO1xudmFyIGNyZWF0ZUNyb3NzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGNyb3NzIHByb2R1Y3QgZm9yIHR3byB2ZWN0b3JzIGluIHRocmVlIGRpbWVuc2lvbmFsIHNwYWNlLlxuICAgKiBUaGUgY3Jvc3MgcHJvZHVjdCBvZiBgQSA9IFthMSwgYTIsIGEzXWAgYW5kIGBCID0gW2IxLCBiMiwgYjNdYCBpcyBkZWZpbmVkXG4gICAqIGFzOlxuICAgKlxuICAgKiAgICBjcm9zcyhBLCBCKSA9IFtcbiAgICogICAgICBhMiAqIGIzIC0gYTMgKiBiMixcbiAgICogICAgICBhMyAqIGIxIC0gYTEgKiBiMyxcbiAgICogICAgICBhMSAqIGIyIC0gYTIgKiBiMVxuICAgKiAgICBdXG4gICAqXG4gICAqIElmIG9uZSBvZiB0aGUgaW5wdXQgdmVjdG9ycyBoYXMgYSBkaW1lbnNpb24gZ3JlYXRlciB0aGFuIDEsIHRoZSBvdXRwdXRcbiAgICogdmVjdG9yIHdpbGwgYmUgYSAxeDMgKDItZGltZW5zaW9uYWwpIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNyb3NzKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNyb3NzKFsxLCAxLCAwXSwgICBbMCwgMSwgMV0pICAgICAgIC8vIFJldHVybnMgWzEsIC0xLCAxXVxuICAgKiAgICBtYXRoLmNyb3NzKFszLCAtMywgMV0sICBbNCwgOSwgMl0pICAgICAgIC8vIFJldHVybnMgWy0xNSwgLTIsIDM5XVxuICAgKiAgICBtYXRoLmNyb3NzKFsyLCAzLCA0XSwgICBbNSwgNiwgN10pICAgICAgIC8vIFJldHVybnMgWy0zLCA2LCAtM11cbiAgICogICAgbWF0aC5jcm9zcyhbWzEsIDIsIDNdXSwgW1s0XSwgWzVdLCBbNl1dKSAvLyBSZXR1cm5zIFtbLTMsIDYsIC0zXV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGRvdCwgbXVsdGlwbHlcbiAgICpcbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHggICBGaXJzdCB2ZWN0b3JcbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHkgICBTZWNvbmQgdmVjdG9yXG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgICAgUmV0dXJucyB0aGUgY3Jvc3MgcHJvZHVjdCBvZiBgeGAgYW5kIGB5YFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnTWF0cml4LCBNYXRyaXgnOiBmdW5jdGlvbiBNYXRyaXhNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIG1hdHJpeChfY3Jvc3MoeC50b0FycmF5KCksIHkudG9BcnJheSgpKSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoX2Nyb3NzKHgudG9BcnJheSgpLCB5KSk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoX2Nyb3NzKHgsIHkudG9BcnJheSgpKSk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogX2Nyb3NzXG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBjcm9zcyBwcm9kdWN0IGZvciB0d28gYXJyYXlzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHggIEZpcnN0IHZlY3RvclxuICAgKiBAcGFyYW0ge0FycmF5fSB5ICBTZWNvbmQgdmVjdG9yXG4gICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUgY3Jvc3MgcHJvZHVjdCBvZiB4IGFuZCB5XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9jcm9zcyh4LCB5KSB7XG4gICAgdmFyIGhpZ2hlc3REaW1lbnNpb24gPSBNYXRoLm1heCgoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCkubGVuZ3RoLCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeSkubGVuZ3RoKTtcbiAgICB4ID0gKDAsIF9hcnJheS5zcXVlZXplKSh4KTtcbiAgICB5ID0gKDAsIF9hcnJheS5zcXVlZXplKSh5KTtcbiAgICB2YXIgeFNpemUgPSAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCk7XG4gICAgdmFyIHlTaXplID0gKDAsIF9hcnJheS5hcnJheVNpemUpKHkpO1xuXG4gICAgaWYgKHhTaXplLmxlbmd0aCAhPT0gMSB8fCB5U2l6ZS5sZW5ndGggIT09IDEgfHwgeFNpemVbMF0gIT09IDMgfHwgeVNpemVbMF0gIT09IDMpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdWZWN0b3JzIHdpdGggbGVuZ3RoIDMgZXhwZWN0ZWQgJyArICcoU2l6ZSBBID0gWycgKyB4U2l6ZS5qb2luKCcsICcpICsgJ10sIEIgPSBbJyArIHlTaXplLmpvaW4oJywgJykgKyAnXSknKTtcbiAgICB9XG5cbiAgICB2YXIgcHJvZHVjdCA9IFtzdWJ0cmFjdChtdWx0aXBseSh4WzFdLCB5WzJdKSwgbXVsdGlwbHkoeFsyXSwgeVsxXSkpLCBzdWJ0cmFjdChtdWx0aXBseSh4WzJdLCB5WzBdKSwgbXVsdGlwbHkoeFswXSwgeVsyXSkpLCBzdWJ0cmFjdChtdWx0aXBseSh4WzBdLCB5WzFdKSwgbXVsdGlwbHkoeFsxXSwgeVswXSkpXTtcblxuICAgIGlmIChoaWdoZXN0RGltZW5zaW9uID4gMSkge1xuICAgICAgcmV0dXJuIFtwcm9kdWN0XTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHByb2R1Y3Q7XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlQ3Jvc3MgPSBjcmVhdGVDcm9zczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ3RyYW5zcG9zZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2N0cmFuc3Bvc2UnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAndHJhbnNwb3NlJywgJ2NvbmonXTtcbnZhciBjcmVhdGVDdHJhbnNwb3NlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHRyYW5zcG9zZSA9IF9yZWYudHJhbnNwb3NlLFxuICAgICAgY29uaiA9IF9yZWYuY29uajtcblxuICAvKipcbiAgICogVHJhbnNwb3NlIGFuZCBjb21wbGV4IGNvbmp1Z2F0ZSBhIG1hdHJpeC4gQWxsIHZhbHVlcyBvZiB0aGUgbWF0cml4IGFyZVxuICAgKiByZWZsZWN0ZWQgb3ZlciBpdHMgbWFpbiBkaWFnb25hbCBhbmQgdGhlbiB0aGUgY29tcGxleCBjb25qdWdhdGUgaXNcbiAgICogdGFrZW4uIFRoaXMgaXMgZXF1aXZhbGVudCB0byBjb21wbGV4IGNvbmp1Z2F0aW9uIGZvciBzY2FsYXJzIGFuZFxuICAgKiB2ZWN0b3JzLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmN0cmFuc3Bvc2UoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBjb25zdCBBID0gW1sxLCAyLCAzXSwgWzQsIDUsIG1hdGguY29tcGxleCg2LDcpXV1cbiAgICogICAgIG1hdGguY3RyYW5zcG9zZShBKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1sxLCA0XSwgWzIsIDVdLCBbMywge3JlOjYsaW06N31dXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHRyYW5zcG9zZSwgZGlhZywgaW52LCBzdWJzZXQsIHNxdWVlemVcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0geCAgTWF0cml4IHRvIGJlIGN0cmFuc3Bvc2VkXG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgIFRoZSBjdHJhbnNwb3NlZCBtYXRyaXhcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgYW55OiBmdW5jdGlvbiBhbnkoeCkge1xuICAgICAgcmV0dXJuIGNvbmoodHJhbnNwb3NlKHgpKTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUN0cmFuc3Bvc2UgPSBjcmVhdGVDdHJhbnNwb3NlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEZXQgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZGV0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdzdWJ0cmFjdCcsICdtdWx0aXBseScsICd1bmFyeU1pbnVzJywgJ2x1cCddO1xudmFyIGNyZWF0ZURldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIHVuYXJ5TWludXMgPSBfcmVmLnVuYXJ5TWludXMsXG4gICAgICBsdXAgPSBfcmVmLmx1cDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmRldCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5kZXQoW1sxLCAyXSwgWzMsIDRdXSkgLy8gcmV0dXJucyAtMlxuICAgKlxuICAgKiAgICBjb25zdCBBID0gW1xuICAgKiAgICAgIFstMiwgMiwgM10sXG4gICAqICAgICAgWy0xLCAxLCAzXSxcbiAgICogICAgICBbMiwgMCwgLTFdXG4gICAqICAgIF1cbiAgICogICAgbWF0aC5kZXQoQSkgLy8gcmV0dXJucyA2XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBpbnZcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0geCAgQSBtYXRyaXhcbiAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgZGV0ZXJtaW5hbnQgb2YgYHhgXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIGFueTogZnVuY3Rpb24gYW55KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX29iamVjdC5jbG9uZSkoeCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBkZXQoeCkge1xuICAgICAgdmFyIHNpemU7XG5cbiAgICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KSh4KSkge1xuICAgICAgICBzaXplID0geC5zaXplKCk7XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICAgICAgeCA9IG1hdHJpeCh4KTtcbiAgICAgICAgc2l6ZSA9IHguc2l6ZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYSBzY2FsYXJcbiAgICAgICAgc2l6ZSA9IFtdO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHNpemUubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAvLyBzY2FsYXJcbiAgICAgICAgICByZXR1cm4gKDAsIF9vYmplY3QuY2xvbmUpKHgpO1xuXG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAvLyB2ZWN0b3JcbiAgICAgICAgICBpZiAoc2l6ZVswXSA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuICgwLCBfb2JqZWN0LmNsb25lKSh4LnZhbHVlT2YoKVswXSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gdHdvIGRpbWVuc2lvbmFsIGFycmF5XG4gICAgICAgICAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgICAgICAgICB2YXIgY29scyA9IHNpemVbMV07XG5cbiAgICAgICAgICAgIGlmIChyb3dzID09PSBjb2xzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfZGV0KHguY2xvbmUoKS52YWx1ZU9mKCksIHJvd3MsIGNvbHMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHNxdWFyZSAnICsgJyhzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gbXVsdGkgZGltZW5zaW9uYWwgYXJyYXlcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgdHdvIGRpbWVuc2lvbmFsICcgKyAnKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBkZXRlcm1pbmFudCBvZiBhIG1hdHJpeFxuICAgKiBAcGFyYW0ge0FycmF5W119IG1hdHJpeCAgQSBzcXVhcmUsIHR3byBkaW1lbnNpb25hbCBtYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvd3MgICAgIE51bWJlciBvZiByb3dzIG9mIHRoZSBtYXRyaXggKHplcm8tYmFzZWQpXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2xzICAgICBOdW1iZXIgb2YgY29sdW1ucyBvZiB0aGUgbWF0cml4ICh6ZXJvLWJhc2VkKVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBkZXRcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX2RldChtYXRyaXgsIHJvd3MsIGNvbHMpIHtcbiAgICBpZiAocm93cyA9PT0gMSkge1xuICAgICAgLy8gdGhpcyBpcyBhIDEgeCAxIG1hdHJpeFxuICAgICAgcmV0dXJuICgwLCBfb2JqZWN0LmNsb25lKShtYXRyaXhbMF1bMF0pO1xuICAgIH0gZWxzZSBpZiAocm93cyA9PT0gMikge1xuICAgICAgLy8gdGhpcyBpcyBhIDIgeCAyIG1hdHJpeFxuICAgICAgLy8gdGhlIGRldGVybWluYW50IG9mIFthMTEsYTEyO2EyMSxhMjJdIGlzIGRldCA9IGExMSphMjItYTIxKmExMlxuICAgICAgcmV0dXJuIHN1YnRyYWN0KG11bHRpcGx5KG1hdHJpeFswXVswXSwgbWF0cml4WzFdWzFdKSwgbXVsdGlwbHkobWF0cml4WzFdWzBdLCBtYXRyaXhbMF1bMV0pKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29tcHV0ZSB0aGUgTFUgZGVjb21wb3NpdGlvblxuICAgICAgdmFyIGRlY29tcCA9IGx1cChtYXRyaXgpOyAvLyBUaGUgZGV0ZXJtaW5hbnQgaXMgdGhlIHByb2R1Y3Qgb2YgdGhlIGRpYWdvbmFsIGVudHJpZXMgb2YgVSAoYW5kIHRob3NlIG9mIEwsIGJ1dCB0aGV5IGFyZSBhbGwgMSlcblxuICAgICAgdmFyIGRldCA9IGRlY29tcC5VWzBdWzBdO1xuXG4gICAgICBmb3IgKHZhciBfaSA9IDE7IF9pIDwgcm93czsgX2krKykge1xuICAgICAgICBkZXQgPSBtdWx0aXBseShkZXQsIGRlY29tcC5VW19pXVtfaV0pO1xuICAgICAgfSAvLyBUaGUgZGV0ZXJtaW5hbnQgd2lsbCBiZSBtdWx0aXBsaWVkIGJ5IDEgb3IgLTEgZGVwZW5kaW5nIG9uIHRoZSBwYXJpdHkgb2YgdGhlIHBlcm11dGF0aW9uIG1hdHJpeC5cbiAgICAgIC8vIFRoaXMgY2FuIGJlIGRldGVybWluZWQgYnkgY291bnRpbmcgdGhlIGN5Y2xlcy4gVGhpcyBpcyByb3VnaGx5IGEgbGluZWFyIHRpbWUgYWxnb3JpdGhtLlxuXG5cbiAgICAgIHZhciBldmVuQ3ljbGVzID0gMDtcbiAgICAgIHZhciBpID0gMDtcbiAgICAgIHZhciB2aXNpdGVkID0gW107XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHdoaWxlICh2aXNpdGVkW2ldKSB7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGkgPj0gcm93cykgYnJlYWs7XG4gICAgICAgIHZhciBqID0gaTtcbiAgICAgICAgdmFyIGN5Y2xlTGVuID0gMDtcblxuICAgICAgICB3aGlsZSAoIXZpc2l0ZWRbZGVjb21wLnBbal1dKSB7XG4gICAgICAgICAgdmlzaXRlZFtkZWNvbXAucFtqXV0gPSB0cnVlO1xuICAgICAgICAgIGogPSBkZWNvbXAucFtqXTtcbiAgICAgICAgICBjeWNsZUxlbisrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN5Y2xlTGVuICUgMiA9PT0gMCkge1xuICAgICAgICAgIGV2ZW5DeWNsZXMrKztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXZlbkN5Y2xlcyAlIDIgPT09IDAgPyBkZXQgOiB1bmFyeU1pbnVzKGRldCk7XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlRGV0ID0gY3JlYXRlRGV0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEaWFnID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdkaWFnJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdEZW5zZU1hdHJpeCcsICdTcGFyc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVEaWFnID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4LFxuICAgICAgU3BhcnNlTWF0cml4ID0gX3JlZi5TcGFyc2VNYXRyaXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGRpYWdvbmFsIG1hdHJpeCBvciByZXRyaWV2ZSB0aGUgZGlhZ29uYWwgb2YgYSBtYXRyaXhcbiAgICpcbiAgICogV2hlbiBgeGAgaXMgYSB2ZWN0b3IsIGEgbWF0cml4IHdpdGggdmVjdG9yIGB4YCBvbiB0aGUgZGlhZ29uYWwgd2lsbCBiZSByZXR1cm5lZC5cbiAgICogV2hlbiBgeGAgaXMgYSB0d28gZGltZW5zaW9uYWwgbWF0cml4LCB0aGUgbWF0cml4ZXMgYGtgdGggZGlhZ29uYWwgd2lsbCBiZSByZXR1cm5lZCBhcyB2ZWN0b3IuXG4gICAqIFdoZW4gayBpcyBwb3NpdGl2ZSwgdGhlIHZhbHVlcyBhcmUgcGxhY2VkIG9uIHRoZSBzdXBlciBkaWFnb25hbC5cbiAgICogV2hlbiBrIGlzIG5lZ2F0aXZlLCB0aGUgdmFsdWVzIGFyZSBwbGFjZWQgb24gdGhlIHN1YiBkaWFnb25hbC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5kaWFnKFgpXG4gICAqICAgICBtYXRoLmRpYWcoWCwgZm9ybWF0KVxuICAgKiAgICAgbWF0aC5kaWFnKFgsIGspXG4gICAqICAgICBtYXRoLmRpYWcoWCwgaywgZm9ybWF0KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIC8vIGNyZWF0ZSBhIGRpYWdvbmFsIG1hdHJpeFxuICAgKiAgICAgbWF0aC5kaWFnKFsxLCAyLCAzXSkgICAgICAvLyByZXR1cm5zIFtbMSwgMCwgMF0sIFswLCAyLCAwXSwgWzAsIDAsIDNdXVxuICAgKiAgICAgbWF0aC5kaWFnKFsxLCAyLCAzXSwgMSkgICAvLyByZXR1cm5zIFtbMCwgMSwgMCwgMF0sIFswLCAwLCAyLCAwXSwgWzAsIDAsIDAsIDNdXVxuICAgKiAgICAgbWF0aC5kaWFnKFsxLCAyLCAzXSwgLTEpICAvLyByZXR1cm5zIFtbMCwgMCwgMF0sIFsxLCAwLCAwXSwgWzAsIDIsIDBdLCBbMCwgMCwgM11dXG4gICAqXG4gICAqICAgIC8vIHJldHJpZXZlIHRoZSBkaWFnb25hbCBmcm9tIGEgbWF0cml4XG4gICAqICAgIGNvbnN0IGEgPSBbWzEsIDIsIDNdLCBbNCwgNSwgNl0sIFs3LCA4LCA5XV1cbiAgICogICAgbWF0aC5kaWFnKGEpICAgLy8gcmV0dXJucyBbMSwgNSwgOV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBvbmVzLCB6ZXJvcywgaWRlbnRpdHlcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0geCAgICAgICAgICBBIHR3byBkaW1lbnNpb25hbCBtYXRyaXggb3IgYSB2ZWN0b3JcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IFtrPTBdICBUaGUgZGlhZ29uYWwgd2hlcmUgdGhlIHZlY3RvciB3aWxsIGJlIGZpbGxlZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIG9yIHJldHJpZXZlZC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtmb3JtYXQ9J2RlbnNlJ10gICBUaGUgbWF0cml4IHN0b3JhZ2UgZm9ybWF0LlxuICAgKlxuICAgKiBAcmV0dXJucyB7TWF0cml4IHwgQXJyYXl9IERpYWdvbmFsIG1hdHJpeCBmcm9tIGlucHV0IHZlY3Rvciwgb3IgZGlhZ29uYWwgZnJvbSBpbnB1dCBtYXRyaXguXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIC8vIEZJWE1FOiBzaW1wbGlmeSB0aGlzIGh1Z2UgYW1vdW50IG9mIHNpZ25hdHVyZXMgYXMgc29vbiBhcyB0eXBlZC1mdW5jdGlvbiBzdXBwb3J0cyBvcHRpb25hbCBhcmd1bWVudHNcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoeCkge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIDAsICgwLCBfYXJyYXkuYXJyYXlTaXplKSh4KSwgbnVsbCk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyKHgsIGspIHtcbiAgICAgIHJldHVybiBfZGlhZyh4LCBrLCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCksIG51bGwpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheUJpZ051bWJlcih4LCBrKSB7XG4gICAgICByZXR1cm4gX2RpYWcoeCwgay50b051bWJlcigpLCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCksIG51bGwpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBzdHJpbmcnOiBmdW5jdGlvbiBBcnJheVN0cmluZyh4LCBmb3JtYXQpIHtcbiAgICAgIHJldHVybiBfZGlhZyh4LCAwLCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCksIGZvcm1hdCk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciwgc3RyaW5nJzogZnVuY3Rpb24gQXJyYXlOdW1iZXJTdHJpbmcoeCwgaywgZm9ybWF0KSB7XG4gICAgICByZXR1cm4gX2RpYWcoeCwgaywgKDAsIF9hcnJheS5hcnJheVNpemUpKHgpLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBCaWdOdW1iZXIsIHN0cmluZyc6IGZ1bmN0aW9uIEFycmF5QmlnTnVtYmVyU3RyaW5nKHgsIGssIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIGsudG9OdW1iZXIoKSwgKDAsIF9hcnJheS5hcnJheVNpemUpKHgpLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIDAsIHguc2l6ZSgpLCB4LnN0b3JhZ2UoKSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBudW1iZXInOiBmdW5jdGlvbiBNYXRyaXhOdW1iZXIoeCwgaykge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIGssIHguc2l6ZSgpLCB4LnN0b3JhZ2UoKSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBCaWdOdW1iZXInOiBmdW5jdGlvbiBNYXRyaXhCaWdOdW1iZXIoeCwgaykge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIGsudG9OdW1iZXIoKSwgeC5zaXplKCksIHguc3RvcmFnZSgpKTtcbiAgICB9LFxuICAgICdNYXRyaXgsIHN0cmluZyc6IGZ1bmN0aW9uIE1hdHJpeFN0cmluZyh4LCBmb3JtYXQpIHtcbiAgICAgIHJldHVybiBfZGlhZyh4LCAwLCB4LnNpemUoKSwgZm9ybWF0KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIG51bWJlciwgc3RyaW5nJzogZnVuY3Rpb24gTWF0cml4TnVtYmVyU3RyaW5nKHgsIGssIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIGssIHguc2l6ZSgpLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQmlnTnVtYmVyLCBzdHJpbmcnOiBmdW5jdGlvbiBNYXRyaXhCaWdOdW1iZXJTdHJpbmcoeCwgaywgZm9ybWF0KSB7XG4gICAgICByZXR1cm4gX2RpYWcoeCwgay50b051bWJlcigpLCB4LnNpemUoKSwgZm9ybWF0KTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ3JlZWF0ZSBkaWFnb25hbCBtYXRyaXggZnJvbSBhIHZlY3RvciBvciB2aWNlIHZlcnNhXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IHhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGtcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdCBTdG9yYWdlIGZvcm1hdCBmb3IgbWF0cml4LiBJZiBudWxsLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gQXJyYXkgaXMgcmV0dXJuZWRcbiAgICogQHJldHVybnMge0FycmF5IHwgTWF0cml4fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfZGlhZyh4LCBrLCBzaXplLCBmb3JtYXQpIHtcbiAgICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoaykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NlY29uZCBwYXJhbWV0ZXIgaW4gZnVuY3Rpb24gZGlhZyBtdXN0IGJlIGFuIGludGVnZXInKTtcbiAgICB9XG5cbiAgICB2YXIga1N1cGVyID0gayA+IDAgPyBrIDogMDtcbiAgICB2YXIga1N1YiA9IGsgPCAwID8gLWsgOiAwOyAvLyBjaGVjayBkaW1lbnNpb25zXG5cbiAgICBzd2l0Y2ggKHNpemUubGVuZ3RoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBfY3JlYXRlRGlhZ29uYWxNYXRyaXgoeCwgaywgZm9ybWF0LCBzaXplWzBdLCBrU3ViLCBrU3VwZXIpO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiBfZ2V0RGlhZ29uYWwoeCwgaywgZm9ybWF0LCBzaXplLCBrU3ViLCBrU3VwZXIpO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggZm9yIGZ1bmN0aW9uIGRpYWcgbXVzdCBiZSAyIGRpbWVuc2lvbmFsJyk7XG4gIH1cblxuICBmdW5jdGlvbiBfY3JlYXRlRGlhZ29uYWxNYXRyaXgoeCwgaywgZm9ybWF0LCBsLCBrU3ViLCBrU3VwZXIpIHtcbiAgICAvLyBtYXRyaXggc2l6ZVxuICAgIHZhciBtcyA9IFtsICsga1N1YiwgbCArIGtTdXBlcl07XG5cbiAgICBpZiAoZm9ybWF0ICYmIGZvcm1hdCAhPT0gJ3NwYXJzZScgJiYgZm9ybWF0ICE9PSAnZGVuc2UnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBtYXRyaXggdHlwZSBcIi5jb25jYXQoZm9ybWF0LCBcIlxcXCJcIikpO1xuICAgIH0gLy8gY3JlYXRlIGRpYWdvbmFsIG1hdHJpeFxuXG5cbiAgICB2YXIgbSA9IGZvcm1hdCA9PT0gJ3NwYXJzZScgPyBTcGFyc2VNYXRyaXguZGlhZ29uYWwobXMsIHgsIGspIDogRGVuc2VNYXRyaXguZGlhZ29uYWwobXMsIHgsIGspOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHJldHVybiBhIG1hdHJpeFxuXG4gICAgcmV0dXJuIGZvcm1hdCAhPT0gbnVsbCA/IG0gOiBtLnZhbHVlT2YoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9nZXREaWFnb25hbCh4LCBrLCBmb3JtYXQsIHMsIGtTdWIsIGtTdXBlcikge1xuICAgIC8vIGNoZWNrIHggaXMgYSBNYXRyaXhcbiAgICBpZiAoKDAsIF9pcy5pc01hdHJpeCkoeCkpIHtcbiAgICAgIC8vIGdldCBkaWFnb25hbCBtYXRyaXhcbiAgICAgIHZhciBkbSA9IHguZGlhZ29uYWwoayk7IC8vIGNoZWNrIHdlIG5lZWQgdG8gcmV0dXJuIGEgbWF0cml4XG5cbiAgICAgIGlmIChmb3JtYXQgIT09IG51bGwpIHtcbiAgICAgICAgLy8gY2hlY2sgd2UgbmVlZCB0byBjaGFuZ2UgbWF0cml4IGZvcm1hdFxuICAgICAgICBpZiAoZm9ybWF0ICE9PSBkbS5zdG9yYWdlKCkpIHtcbiAgICAgICAgICByZXR1cm4gbWF0cml4KGRtLCBmb3JtYXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRtO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZG0udmFsdWVPZigpO1xuICAgIH0gLy8gdmVjdG9yIHNpemVcblxuXG4gICAgdmFyIG4gPSBNYXRoLm1pbihzWzBdIC0ga1N1Yiwgc1sxXSAtIGtTdXBlcik7IC8vIGRpYWdvbmFsIHZhbHVlc1xuXG4gICAgdmFyIHZlY3RvciA9IFtdOyAvLyBsb29wIGRpYWdvbmFsXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgdmVjdG9yW2ldID0geFtpICsga1N1Yl1baSArIGtTdXBlcl07XG4gICAgfSAvLyBjaGVjayB3ZSBuZWVkIHRvIHJldHVybiBhIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gZm9ybWF0ICE9PSBudWxsID8gbWF0cml4KHZlY3RvcikgOiB2ZWN0b3I7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVEaWFnID0gY3JlYXRlRGlhZzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRG90ID0gdm9pZCAwO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZG90JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZCcsICdtdWx0aXBseSddO1xudmFyIGNyZWF0ZURvdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gdmVjdG9ycy4gVGhlIGRvdCBwcm9kdWN0IG9mXG4gICAqIGBBID0gW2ExLCBhMiwgYTMsIC4uLiwgYW5dYCBhbmQgYEIgPSBbYjEsIGIyLCBiMywgLi4uLCBibl1gIGlzIGRlZmluZWQgYXM6XG4gICAqXG4gICAqICAgIGRvdChBLCBCKSA9IGExICogYjEgKyBhMiAqIGIyICsgYTMgKiBiMyArIC4uLiArIGFuICogYm5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmRvdCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5kb3QoWzIsIDQsIDFdLCBbMiwgMiwgM10pICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDE1XG4gICAqICAgIG1hdGgubXVsdGlwbHkoWzIsIDQsIDFdLCBbMiwgMiwgM10pICAvLyByZXR1cm5zIG51bWJlciAxNVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbXVsdGlwbHksIGNyb3NzXG4gICAqXG4gICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSB4ICAgICBGaXJzdCB2ZWN0b3JcbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHkgICAgIFNlY29uZCB2ZWN0b3JcbiAgICogQHJldHVybiB7bnVtYmVyfSAgICAgICAgICAgICAgIFJldHVybnMgdGhlIGRvdCBwcm9kdWN0IG9mIGB4YCBhbmQgYHlgXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdNYXRyaXgsIE1hdHJpeCc6IGZ1bmN0aW9uIE1hdHJpeE1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gX2RvdCh4LnRvQXJyYXkoKSwgeS50b0FycmF5KCkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICByZXR1cm4gX2RvdCh4LnRvQXJyYXkoKSwgeSk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBfZG90KHgsIHkudG9BcnJheSgpKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBfZG90XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBkb3QgcHJvZHVjdCBmb3IgdHdvIGFycmF5c1xuICAgKiBAcGFyYW0ge0FycmF5fSB4ICBGaXJzdCB2ZWN0b3JcbiAgICogQHBhcmFtIHtBcnJheX0geSAgU2Vjb25kIHZlY3RvclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBkb3QgcHJvZHVjdCBvZiB4IGFuZCB5XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICAvLyBUT0RPOiBkb3VibGUgY29kZSB3aXRoIG1hdGgubXVsdGlwbHlcblxuICBmdW5jdGlvbiBfZG90KHgsIHkpIHtcbiAgICB2YXIgeFNpemUgPSAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCk7XG4gICAgdmFyIHlTaXplID0gKDAsIF9hcnJheS5hcnJheVNpemUpKHkpO1xuICAgIHZhciBsZW4gPSB4U2l6ZVswXTtcbiAgICBpZiAoeFNpemUubGVuZ3RoICE9PSAxIHx8IHlTaXplLmxlbmd0aCAhPT0gMSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1ZlY3RvciBleHBlY3RlZCcpOyAvLyBUT0RPOiBiZXR0ZXIgZXJyb3IgbWVzc2FnZVxuXG4gICAgaWYgKHhTaXplWzBdICE9PSB5U2l6ZVswXSkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1ZlY3RvcnMgbXVzdCBoYXZlIGVxdWFsIGxlbmd0aCAoJyArIHhTaXplWzBdICsgJyAhPSAnICsgeVNpemVbMF0gKyAnKScpO1xuICAgIGlmIChsZW4gPT09IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIHRoZSBkb3QgcHJvZHVjdCBvZiBlbXB0eSB2ZWN0b3JzJyk7XG4gICAgdmFyIHByb2QgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgcHJvZCA9IGFkZChwcm9kLCBtdWx0aXBseSh4W2ldLCB5W2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2Q7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVEb3QgPSBjcmVhdGVEb3Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUVpZ3MgPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIG5hbWUgPSAnZWlncyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydjb25maWcnLCAndHlwZWQnLCAnbWF0cml4JywgJ2FkZFNjYWxhcicsICdlcXVhbCcsICdzdWJ0cmFjdCcsICdhYnMnLCAnYXRhbicsICdjb3MnLCAnc2luJywgJ211bHRpcGx5U2NhbGFyJywgJ2ludicsICdiaWdudW1iZXInLCAnbXVsdGlwbHknLCAnYWRkJ107XG52YXIgY3JlYXRlRWlncyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBlcXVhbCA9IF9yZWYuZXF1YWwsXG4gICAgICBhYnMgPSBfcmVmLmFicyxcbiAgICAgIGF0YW4gPSBfcmVmLmF0YW4sXG4gICAgICBjb3MgPSBfcmVmLmNvcyxcbiAgICAgIHNpbiA9IF9yZWYuc2luLFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgaW52ID0gX3JlZi5pbnYsXG4gICAgICBiaWdudW1iZXIgPSBfcmVmLmJpZ251bWJlcixcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGFkZCA9IF9yZWYuYWRkO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIGVpZ2VudmFsdWUgYW5kIGVpZ2VudmVjdG9yIG9mIGEgcmVhbCBzeW1tZXRyaWMgbWF0cml4LlxuICAgKiBPbmx5IGFwcGxpY2FibGUgdG8gdHdvIGRpbWVuc2lvbmFsIHN5bW1ldHJpYyBtYXRyaWNlcy4gVXNlcyBKYWNvYmlcbiAgICogQWxnb3JpdGhtLiBNYXRyaXggY29udGFpbmluZyBtaXhlZCB0eXBlICgnbnVtYmVyJywgJ2JpZ251bWJlcicsICdmcmFjdGlvbicpXG4gICAqIG9mIGVsZW1lbnRzIGFyZSBub3Qgc3VwcG9ydGVkLiBJbnB1dCBtYXRyaXggb3IgMkQgYXJyYXkgc2hvdWxkIGNvbnRhaW4gYWxsIGVsZW1lbnRzXG4gICAqIG9mIGVpdGhlciAnbnVtYmVyJywgJ2JpZ251bWJlcicgb3IgJ2ZyYWN0aW9uJyB0eXBlLiBGb3IgJ251bWJlcicgYW5kICdmcmFjdGlvbicsIHRoZVxuICAgKiBlaWdlbnZhbHVlcyBhcmUgb2YgJ251bWJlcicgdHlwZS4gRm9yICdiaWdudW1iZXInIHRoZSBlaWdlbnZhbHVlcyBhcmUgb2YgJydiaWdudW1iZXInIHR5cGUuXG4gICAqIEVpZ2VudmVjdG9ycyBhcmUgYWx3YXlzIG9mICdudW1iZXInIHR5cGUuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguZWlncyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIGNvbnN0IEggPSBbWzUsIDIuM10sIFsyLjMsIDFdXVxuICAgKiAgICAgY29uc3QgYW5zID0gbWF0aC5laWdzKEgpIC8vIHJldHVybnMge3ZhbHVlczogW0UxLEUyLi4uc29ydGVkXSwgdmVjdG9yczogW3YxLHYyLi4uLiBjb3JyZXNwb25kaW5nIHZlY3RvcnNdfVxuICAgKiAgICAgY29uc3QgRSA9IGFucy52YWx1ZXNcbiAgICogICAgIGNvbnN0IFUgPSBhbnMudmVjdG9yc1xuICAgKiAgICAgY29uc3QgVVR4SHhVID0gbWF0aC5tdWx0aXBseShtYXRoLnRyYW5zcG9zZShVKSwgSCwgVSkgLy8gcm90YXRlcyBIIHRvIHRoZSBlaWdlbi1yZXByZXNlbnRhdGlvblxuICAgKiAgICAgRVswXSA9PSBVVHhIeFVbMF1bMF0gIC8vIHJldHVybnMgdHJ1ZVxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIGludlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSB4ICBNYXRyaXggdG8gYmUgZGlhZ29uYWxpemVkXG4gICAqIEByZXR1cm4ge3t2YWx1ZXM6IEFycmF5LCB2ZWN0b3JzOiBBcnJheX0gfCB7dmFsdWVzOiBNYXRyaXgsIHZlY3RvcnM6IE1hdHJpeH19IE9iamVjdCBjb250YWluaW5nIGVpZ2VudmFsdWVzIChBcnJheSBvciBNYXRyaXgpIGFuZCBlaWdlbnZlY3RvcnMgKDJEIEFycmF5L01hdHJpeCkuXG4gICAqL1xuICB2YXIgZWlncyA9IHR5cGVkKCdlaWdzJywge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICAvLyBjaGVjayBhcnJheSBzaXplXG4gICAgICB2YXIgbWF0ID0gbWF0cml4KHgpO1xuICAgICAgdmFyIHNpemUgPSBtYXQuc2l6ZSgpO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggIT09IDIgfHwgc2l6ZVswXSAhPT0gc2l6ZVsxXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlICcgKyAnKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICAgIH0gLy8gdXNlIGRlbnNlIDJEIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuXG5cbiAgICAgIHZhciBhbnMgPSBjaGVja0FuZFN1Ym1pdChtYXQsIHNpemVbMF0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWVzOiBhbnNbMF0sXG4gICAgICAgIHZlY3RvcnM6IGFuc1sxXVxuICAgICAgfTtcbiAgICB9LFxuICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHgpIHtcbiAgICAgIC8vIHVzZSBkZW5zZSAyRCBhcnJheSBpbXBsZW1lbnRhdGlvblxuICAgICAgLy8gZGVuc2UgbWF0cml4XG4gICAgICB2YXIgc2l6ZSA9IHguc2l6ZSgpO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggIT09IDIgfHwgc2l6ZVswXSAhPT0gc2l6ZVsxXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlICcgKyAnKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGFucyA9IGNoZWNrQW5kU3VibWl0KHgsIHNpemVbMF0pO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWVzOiBtYXRyaXgoYW5zWzBdKSxcbiAgICAgICAgdmVjdG9yczogbWF0cml4KGFuc1sxXSlcbiAgICAgIH07XG4gICAgfVxuICB9KTsgLy8gSXMgdGhlIG1hdHJpeFxuICAvLyBzeW1tZXRyaWMgP1xuXG4gIGZ1bmN0aW9uIGlzU3ltbWV0cmljKHgsIG4pIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgZm9yICh2YXIgaiA9IGk7IGogPCBuOyBqKyspIHtcbiAgICAgICAgLy8gbm90IHN5bW10cmljXG4gICAgICAgIGlmICghZXF1YWwoeFtpXVtqXSwgeFtqXVtpXSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnB1dCBtYXRyaXggaXMgbm90IHN5bW1ldHJpYycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IC8vIGNoZWNrIGlucHV0IGZvciBwb3NzaWJsZSBwcm9ibGVtc1xuICAvLyBhbmQgcGVyZm9ybSBkaWFnb25hbGl6YXRpb24gZWZmaWNpZW50bHkgZm9yXG4gIC8vIHNwZWNpZmljIHR5cGUgb2YgbnVtYmVyXG5cblxuICBmdW5jdGlvbiBjaGVja0FuZFN1Ym1pdCh4LCBuKSB7XG4gICAgdmFyIHR5cGUgPSB4LmRhdGF0eXBlKCk7IC8vIHR5cGUgY2hlY2tcblxuICAgIGlmICh0eXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHR5cGUgPSB4LmdldERhdGFUeXBlKCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGUgIT09ICdudW1iZXInICYmIHR5cGUgIT09ICdCaWdOdW1iZXInICYmIHR5cGUgIT09ICdGcmFjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlID09PSAnbWl4ZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ01peGVkIG1hdHJpeCBlbGVtZW50IHR5cGUgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTWF0cml4IGVsZW1lbnQgdHlwZSBub3Qgc3VwcG9ydGVkICgnICsgdHlwZSArICcpJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlzU3ltbWV0cmljKHgudG9BcnJheSgpLCBuKTtcbiAgICB9IC8vIHBlcmZvcm0gZWZmaWNpZW50IGNhbGN1bGF0aW9uIGZvciAnbnVtYmVycydcblxuXG4gICAgaWYgKHR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICByZXR1cm4gZGlhZyh4LnRvQXJyYXkoKSk7XG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnRnJhY3Rpb24nKSB7XG4gICAgICB2YXIgeEFyciA9IHgudG9BcnJheSgpOyAvLyBjb252ZXJ0IGZyYWN0aW9uIHRvIG51bWJlcnNcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgZm9yICh2YXIgaiA9IGk7IGogPCBuOyBqKyspIHtcbiAgICAgICAgICB4QXJyW2ldW2pdID0geEFycltpXVtqXS52YWx1ZU9mKCk7XG4gICAgICAgICAgeEFycltqXVtpXSA9IHhBcnJbaV1bal07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRpYWcoeC50b0FycmF5KCkpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0JpZ051bWJlcicpIHtcbiAgICAgIHJldHVybiBkaWFnQmlnKHgudG9BcnJheSgpKTtcbiAgICB9XG4gIH0gLy8gZGlhZ29uYWxpemF0aW9uIGltcGxlbWVudGF0aW9uIGZvciBudW1iZXIgKGVmZmljaWVudClcblxuXG4gIGZ1bmN0aW9uIGRpYWcoeCkge1xuICAgIHZhciBOID0geC5sZW5ndGg7XG4gICAgdmFyIGUwID0gTWF0aC5hYnMoY29uZmlnLmVwc2lsb24gLyBOKTtcbiAgICB2YXIgcHNpO1xuICAgIHZhciBTaWogPSBuZXcgQXJyYXkoTik7IC8vIFNpaiBpcyBJZGVudGl0eSBNYXRyaXhcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICBTaWpbaV0gPSBjcmVhdGVBcnJheShOLCAwKTtcbiAgICAgIFNpaltpXVtpXSA9IDEuMDtcbiAgICB9IC8vIGluaXRpYWwgZXJyb3JcblxuXG4gICAgdmFyIFZhYiA9IGdldEFpaih4KTtcblxuICAgIHdoaWxlIChNYXRoLmFicyhWYWJbMV0pID49IE1hdGguYWJzKGUwKSkge1xuICAgICAgdmFyIF9pID0gVmFiWzBdWzBdO1xuICAgICAgdmFyIGogPSBWYWJbMF1bMV07XG4gICAgICBwc2kgPSBnZXRUaGV0YSh4W19pXVtfaV0sIHhbal1bal0sIHhbX2ldW2pdKTtcbiAgICAgIHggPSB4MSh4LCBwc2ksIF9pLCBqKTtcbiAgICAgIFNpaiA9IFNpajEoU2lqLCBwc2ksIF9pLCBqKTtcbiAgICAgIFZhYiA9IGdldEFpaih4KTtcbiAgICB9XG5cbiAgICB2YXIgRWkgPSBjcmVhdGVBcnJheShOLCAwKTsgLy8gZWlnZW52YWx1ZXNcblxuICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IE47IF9pMisrKSB7XG4gICAgICBFaVtfaTJdID0geFtfaTJdW19pMl07XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvcnRpbmcoKDAsIF9vYmplY3QuY2xvbmUpKEVpKSwgKDAsIF9vYmplY3QuY2xvbmUpKFNpaikpO1xuICB9IC8vIGRpYWdvbmFsaXphdGlvbiBpbXBsZW1lbnRhdGlvbiBmb3IgYmlnTnVtYmVyXG5cblxuICBmdW5jdGlvbiBkaWFnQmlnKHgpIHtcbiAgICB2YXIgTiA9IHgubGVuZ3RoO1xuICAgIHZhciBlMCA9IGFicyhjb25maWcuZXBzaWxvbiAvIE4pO1xuICAgIHZhciBwc2k7XG4gICAgdmFyIFNpaiA9IG5ldyBBcnJheShOKTsgLy8gU2lqIGlzIElkZW50aXR5IE1hdHJpeFxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgIFNpaltpXSA9IGNyZWF0ZUFycmF5KE4sIDApO1xuICAgICAgU2lqW2ldW2ldID0gMS4wO1xuICAgIH0gLy8gaW5pdGlhbCBlcnJvclxuXG5cbiAgICB2YXIgVmFiID0gZ2V0QWlqQmlnKHgpO1xuXG4gICAgd2hpbGUgKGFicyhWYWJbMV0pID49IGFicyhlMCkpIHtcbiAgICAgIHZhciBfaTMgPSBWYWJbMF1bMF07XG4gICAgICB2YXIgaiA9IFZhYlswXVsxXTtcbiAgICAgIHBzaSA9IGdldFRoZXRhQmlnKHhbX2kzXVtfaTNdLCB4W2pdW2pdLCB4W19pM11bal0pO1xuICAgICAgeCA9IHgxQmlnKHgsIHBzaSwgX2kzLCBqKTtcbiAgICAgIFNpaiA9IFNpajFCaWcoU2lqLCBwc2ksIF9pMywgaik7XG4gICAgICBWYWIgPSBnZXRBaWpCaWcoeCk7XG4gICAgfVxuXG4gICAgdmFyIEVpID0gY3JlYXRlQXJyYXkoTiwgMCk7IC8vIGVpZ2VudmFsdWVzXG5cbiAgICBmb3IgKHZhciBfaTQgPSAwOyBfaTQgPCBOOyBfaTQrKykge1xuICAgICAgRWlbX2k0XSA9IHhbX2k0XVtfaTRdO1xuICAgIH0gLy8gcmV0dXJuIFtjbG9uZShFaSksIGNsb25lKFNpaildXG5cblxuICAgIHJldHVybiBzb3J0aW5nKCgwLCBfb2JqZWN0LmNsb25lKShFaSksICgwLCBfb2JqZWN0LmNsb25lKShTaWopKTtcbiAgfSAvLyBnZXQgYW5nbGVcblxuXG4gIGZ1bmN0aW9uIGdldFRoZXRhKGFpaSwgYWpqLCBhaWopIHtcbiAgICB2YXIgZGVub20gPSBhamogLSBhaWk7XG5cbiAgICBpZiAoTWF0aC5hYnMoZGVub20pIDw9IGNvbmZpZy5lcHNpbG9uKSB7XG4gICAgICByZXR1cm4gTWF0aC5QSSAvIDQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAwLjUgKiBNYXRoLmF0YW4oMiAqIGFpaiAvIChhamogLSBhaWkpKTtcbiAgICB9XG4gIH0gLy8gZ2V0IGFuZ2xlXG5cblxuICBmdW5jdGlvbiBnZXRUaGV0YUJpZyhhaWksIGFqaiwgYWlqKSB7XG4gICAgdmFyIGRlbm9tID0gc3VidHJhY3QoYWpqLCBhaWkpO1xuXG4gICAgaWYgKGFicyhkZW5vbSkgPD0gY29uZmlnLmVwc2lsb24pIHtcbiAgICAgIHJldHVybiBiaWdudW1iZXIoLTEpLmFjb3MoKS5kaXYoNCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBtdWx0aXBseVNjYWxhcigwLjUsIGF0YW4obXVsdGlwbHkoMiwgYWlqLCBpbnYoZGVub20pKSkpO1xuICAgIH1cbiAgfSAvLyB1cGRhdGUgZWlndmVjXG5cblxuICBmdW5jdGlvbiBTaWoxKFNpaiwgdGhldGEsIGksIGopIHtcbiAgICB2YXIgTiA9IFNpai5sZW5ndGg7XG4gICAgdmFyIGMgPSBNYXRoLmNvcyh0aGV0YSk7XG4gICAgdmFyIHMgPSBNYXRoLnNpbih0aGV0YSk7XG4gICAgdmFyIFNraSA9IGNyZWF0ZUFycmF5KE4sIDApO1xuICAgIHZhciBTa2ogPSBjcmVhdGVBcnJheShOLCAwKTtcblxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgTjsgaysrKSB7XG4gICAgICBTa2lba10gPSBjICogU2lqW2tdW2ldIC0gcyAqIFNpaltrXVtqXTtcbiAgICAgIFNraltrXSA9IHMgKiBTaWpba11baV0gKyBjICogU2lqW2tdW2pdO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9rID0gMDsgX2sgPCBOOyBfaysrKSB7XG4gICAgICBTaWpbX2tdW2ldID0gU2tpW19rXTtcbiAgICAgIFNpaltfa11bal0gPSBTa2pbX2tdO1xuICAgIH1cblxuICAgIHJldHVybiBTaWo7XG4gIH0gLy8gdXBkYXRlIGVpZ3ZlYyBmb3Igb3ZlcmxhcFxuXG5cbiAgZnVuY3Rpb24gU2lqMUJpZyhTaWosIHRoZXRhLCBpLCBqKSB7XG4gICAgdmFyIE4gPSBTaWoubGVuZ3RoO1xuICAgIHZhciBjID0gY29zKHRoZXRhKTtcbiAgICB2YXIgcyA9IHNpbih0aGV0YSk7XG4gICAgdmFyIFNraSA9IGNyZWF0ZUFycmF5KE4sIGJpZ251bWJlcigwKSk7XG4gICAgdmFyIFNraiA9IGNyZWF0ZUFycmF5KE4sIGJpZ251bWJlcigwKSk7XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IE47IGsrKykge1xuICAgICAgU2tpW2tdID0gc3VidHJhY3QobXVsdGlwbHlTY2FsYXIoYywgU2lqW2tdW2ldKSwgbXVsdGlwbHlTY2FsYXIocywgU2lqW2tdW2pdKSk7XG4gICAgICBTa2pba10gPSBhZGRTY2FsYXIobXVsdGlwbHlTY2FsYXIocywgU2lqW2tdW2ldKSwgbXVsdGlwbHlTY2FsYXIoYywgU2lqW2tdW2pdKSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2syID0gMDsgX2syIDwgTjsgX2syKyspIHtcbiAgICAgIFNpaltfazJdW2ldID0gU2tpW19rMl07XG4gICAgICBTaWpbX2syXVtqXSA9IFNraltfazJdO1xuICAgIH1cblxuICAgIHJldHVybiBTaWo7XG4gIH0gLy8gdXBkYXRlIG1hdHJpeFxuXG5cbiAgZnVuY3Rpb24geDFCaWcoSGlqLCB0aGV0YSwgaSwgaikge1xuICAgIHZhciBOID0gSGlqLmxlbmd0aDtcbiAgICB2YXIgYyA9IGJpZ251bWJlcihjb3ModGhldGEpKTtcbiAgICB2YXIgcyA9IGJpZ251bWJlcihzaW4odGhldGEpKTtcbiAgICB2YXIgYzIgPSBtdWx0aXBseVNjYWxhcihjLCBjKTtcbiAgICB2YXIgczIgPSBtdWx0aXBseVNjYWxhcihzLCBzKTtcbiAgICB2YXIgQWtpID0gY3JlYXRlQXJyYXkoTiwgYmlnbnVtYmVyKDApKTtcbiAgICB2YXIgQWtqID0gY3JlYXRlQXJyYXkoTiwgYmlnbnVtYmVyKDApKTsgLy8gMmNzIEhpalxuXG4gICAgdmFyIGNzSGlqID0gbXVsdGlwbHkoYmlnbnVtYmVyKDIpLCBjLCBzLCBIaWpbaV1bal0pOyAvLyAgQWlpXG5cbiAgICB2YXIgQWlpID0gYWRkU2NhbGFyKHN1YnRyYWN0KG11bHRpcGx5U2NhbGFyKGMyLCBIaWpbaV1baV0pLCBjc0hpaiksIG11bHRpcGx5U2NhbGFyKHMyLCBIaWpbal1bal0pKTtcbiAgICB2YXIgQWpqID0gYWRkKG11bHRpcGx5U2NhbGFyKHMyLCBIaWpbaV1baV0pLCBjc0hpaiwgbXVsdGlwbHlTY2FsYXIoYzIsIEhpaltqXVtqXSkpOyAvLyAwICB0byBpXG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IE47IGsrKykge1xuICAgICAgQWtpW2tdID0gc3VidHJhY3QobXVsdGlwbHlTY2FsYXIoYywgSGlqW2ldW2tdKSwgbXVsdGlwbHlTY2FsYXIocywgSGlqW2pdW2tdKSk7XG4gICAgICBBa2pba10gPSBhZGRTY2FsYXIobXVsdGlwbHlTY2FsYXIocywgSGlqW2ldW2tdKSwgbXVsdGlwbHlTY2FsYXIoYywgSGlqW2pdW2tdKSk7XG4gICAgfSAvLyBNb2RpZnkgSGlqXG5cblxuICAgIEhpaltpXVtpXSA9IEFpaTtcbiAgICBIaWpbal1bal0gPSBBamo7XG4gICAgSGlqW2ldW2pdID0gYmlnbnVtYmVyKDApO1xuICAgIEhpaltqXVtpXSA9IGJpZ251bWJlcigwKTsgLy8gMCAgdG8gaVxuXG4gICAgZm9yICh2YXIgX2szID0gMDsgX2szIDwgTjsgX2szKyspIHtcbiAgICAgIGlmIChfazMgIT09IGkgJiYgX2szICE9PSBqKSB7XG4gICAgICAgIEhpaltpXVtfazNdID0gQWtpW19rM107XG4gICAgICAgIEhpaltfazNdW2ldID0gQWtpW19rM107XG4gICAgICAgIEhpaltqXVtfazNdID0gQWtqW19rM107XG4gICAgICAgIEhpaltfazNdW2pdID0gQWtqW19rM107XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIEhpajtcbiAgfSAvLyB1cGRhdGUgbWF0cml4XG5cblxuICBmdW5jdGlvbiB4MShIaWosIHRoZXRhLCBpLCBqKSB7XG4gICAgdmFyIE4gPSBIaWoubGVuZ3RoO1xuICAgIHZhciBjID0gTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBzID0gTWF0aC5zaW4odGhldGEpO1xuICAgIHZhciBjMiA9IGMgKiBjO1xuICAgIHZhciBzMiA9IHMgKiBzO1xuICAgIHZhciBBa2kgPSBjcmVhdGVBcnJheShOLCAwKTtcbiAgICB2YXIgQWtqID0gY3JlYXRlQXJyYXkoTiwgMCk7IC8vICBBaWlcblxuICAgIHZhciBBaWkgPSBjMiAqIEhpaltpXVtpXSAtIDIgKiBjICogcyAqIEhpaltpXVtqXSArIHMyICogSGlqW2pdW2pdO1xuICAgIHZhciBBamogPSBzMiAqIEhpaltpXVtpXSArIDIgKiBjICogcyAqIEhpaltpXVtqXSArIGMyICogSGlqW2pdW2pdOyAvLyAwICB0byBpXG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IE47IGsrKykge1xuICAgICAgQWtpW2tdID0gYyAqIEhpaltpXVtrXSAtIHMgKiBIaWpbal1ba107XG4gICAgICBBa2pba10gPSBzICogSGlqW2ldW2tdICsgYyAqIEhpaltqXVtrXTtcbiAgICB9IC8vIE1vZGlmeSBIaWpcblxuXG4gICAgSGlqW2ldW2ldID0gQWlpO1xuICAgIEhpaltqXVtqXSA9IEFqajtcbiAgICBIaWpbaV1bal0gPSAwO1xuICAgIEhpaltqXVtpXSA9IDA7IC8vIDAgIHRvIGlcblxuICAgIGZvciAodmFyIF9rNCA9IDA7IF9rNCA8IE47IF9rNCsrKSB7XG4gICAgICBpZiAoX2s0ICE9PSBpICYmIF9rNCAhPT0gaikge1xuICAgICAgICBIaWpbaV1bX2s0XSA9IEFraVtfazRdO1xuICAgICAgICBIaWpbX2s0XVtpXSA9IEFraVtfazRdO1xuICAgICAgICBIaWpbal1bX2s0XSA9IEFraltfazRdO1xuICAgICAgICBIaWpbX2s0XVtqXSA9IEFraltfazRdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBIaWo7XG4gIH0gLy8gZ2V0IG1heCBvZmYtZGlhZ29uYWwgdmFsdWUgZnJvbSBVcHBlciBEaWFnb25hbFxuXG5cbiAgZnVuY3Rpb24gZ2V0QWlqKE1paikge1xuICAgIHZhciBOID0gTWlqLmxlbmd0aDtcbiAgICB2YXIgbWF4TWlqID0gMDtcbiAgICB2YXIgbWF4SUogPSBbMCwgMV07XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgZm9yICh2YXIgaiA9IGkgKyAxOyBqIDwgTjsgaisrKSB7XG4gICAgICAgIGlmIChNYXRoLmFicyhtYXhNaWopIDwgTWF0aC5hYnMoTWlqW2ldW2pdKSkge1xuICAgICAgICAgIG1heE1paiA9IE1hdGguYWJzKE1paltpXVtqXSk7XG4gICAgICAgICAgbWF4SUogPSBbaSwgal07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW21heElKLCBtYXhNaWpdO1xuICB9IC8vIGdldCBtYXggb2ZmLWRpYWdvbmFsIHZhbHVlIGZyb20gVXBwZXIgRGlhZ29uYWxcblxuXG4gIGZ1bmN0aW9uIGdldEFpakJpZyhNaWopIHtcbiAgICB2YXIgTiA9IE1pai5sZW5ndGg7XG4gICAgdmFyIG1heE1paiA9IDA7XG4gICAgdmFyIG1heElKID0gWzAsIDFdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSBpICsgMTsgaiA8IE47IGorKykge1xuICAgICAgICBpZiAoYWJzKG1heE1paikgPCBhYnMoTWlqW2ldW2pdKSkge1xuICAgICAgICAgIG1heE1paiA9IGFicyhNaWpbaV1bal0pO1xuICAgICAgICAgIG1heElKID0gW2ksIGpdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFttYXhJSiwgbWF4TWlqXTtcbiAgfSAvLyBzb3J0IHJlc3VsdHNcblxuXG4gIGZ1bmN0aW9uIHNvcnRpbmcoRSwgUykge1xuICAgIHZhciBOID0gRS5sZW5ndGg7XG4gICAgdmFyIEVmID0gQXJyYXkoTik7XG4gICAgdmFyIFNmID0gQXJyYXkoTik7XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IE47IGsrKykge1xuICAgICAgU2Zba10gPSBBcnJheShOKTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgdmFyIG1pbklEID0gMDtcbiAgICAgIHZhciBtaW5FID0gRVswXTtcblxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBFLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChFW2pdIDwgbWluRSkge1xuICAgICAgICAgIG1pbklEID0gajtcbiAgICAgICAgICBtaW5FID0gRVttaW5JRF07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgRWZbaV0gPSBFLnNwbGljZShtaW5JRCwgMSlbMF07XG5cbiAgICAgIGZvciAodmFyIF9rNSA9IDA7IF9rNSA8IE47IF9rNSsrKSB7XG4gICAgICAgIFNmW19rNV1baV0gPSBTW19rNV1bbWluSURdO1xuXG4gICAgICAgIFNbX2s1XS5zcGxpY2UobWluSUQsIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbKDAsIF9vYmplY3QuY2xvbmUpKEVmKSwgKDAsIF9vYmplY3QuY2xvbmUpKFNmKV07XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBhcnJheSBvZiBhIGNlcnRhaW4gc2l6ZSBhbmQgZmlsbCBhbGwgaXRlbXMgd2l0aCBhbiBpbml0aWFsIHZhbHVlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzaXplXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcmV0dXJuIHtudW1iZXJbXX1cbiAgICovXG5cblxuICBmdW5jdGlvbiBjcmVhdGVBcnJheShzaXplLCB2YWx1ZSkge1xuICAgIC8vIFRPRE86IGFzIHNvb24gYXMgYWxsIGJyb3dzZXJzIHN1cHBvcnQgQXJyYXkuZmlsbCwgdXNlIHRoYXQgaW5zdGVhZCAoSUUgZG9lc24ndCBzdXBwb3J0IGl0KVxuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShzaXplKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7XG4gICAgICBhcnJheVtpXSA9IHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuXG4gIHJldHVybiBlaWdzO1xufSk7XG5leHBvcnRzLmNyZWF0ZUVpZ3MgPSBjcmVhdGVFaWdzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVFeHBtID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdleHBtJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FicycsICdhZGQnLCAnaWRlbnRpdHknLCAnaW52JywgJ211bHRpcGx5J107XG52YXIgY3JlYXRlRXhwbSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhYnMgPSBfcmVmLmFicyxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgaWRlbnRpdHkgPSBfcmVmLmlkZW50aXR5LFxuICAgICAgaW52ID0gX3JlZi5pbnYsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHk7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIG1hdHJpeCBleHBvbmVudGlhbCwgZXhwbShBKSA9IGVeQS4gVGhlIG1hdHJpeCBtdXN0IGJlIHNxdWFyZS5cbiAgICogTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggZXhwKGEpLCB3aGljaCBwZXJmb3JtcyBlbGVtZW50LXdpc2VcbiAgICogZXhwb25lbnRpYXRpb24uXG4gICAqXG4gICAqIFRoZSBleHBvbmVudGlhbCBpcyBjYWxjdWxhdGVkIHVzaW5nIHRoZSBQYWTDqSBhcHByb3hpbWFudCB3aXRoIHNjYWxpbmcgYW5kXG4gICAqIHNxdWFyaW5nOyBzZWUgXCJOaW5ldGVlbiBEdWJpb3VzIFdheXMgdG8gQ29tcHV0ZSB0aGUgRXhwb25lbnRpYWwgb2YgYVxuICAgKiBNYXRyaXgsXCIgYnkgTW9sZXIgYW5kIFZhbiBMb2FuLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmV4cG0oeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBjb25zdCBBID0gW1swLDJdLFswLDBdXVxuICAgKiAgICAgbWF0aC5leHBtKEEpICAgICAgICAvLyByZXR1cm5zIFtbMSwyXSxbMCwxXV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBleHBcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IHggIEEgc3F1YXJlIE1hdHJpeFxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgVGhlIGV4cG9uZW50aWFsIG9mIHhcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoQSkge1xuICAgICAgLy8gQ2hlY2sgbWF0cml4IHNpemVcbiAgICAgIHZhciBzaXplID0gQS5zaXplKCk7XG5cbiAgICAgIGlmIChzaXplLmxlbmd0aCAhPT0gMiB8fCBzaXplWzBdICE9PSBzaXplWzFdKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgICAgfVxuXG4gICAgICB2YXIgbiA9IHNpemVbMF07IC8vIERlc2lyZWQgYWNjdXJhY3kgb2YgdGhlIGFwcHJveGltYW50IChUaGUgYWN0dWFsIGFjY3VyYWN5XG4gICAgICAvLyB3aWxsIGJlIGFmZmVjdGVkIGJ5IHJvdW5kLW9mZiBlcnJvcilcblxuICAgICAgdmFyIGVwcyA9IDFlLTE1OyAvLyBUaGUgUGFkw6kgYXBwcm94aW1hbnQgaXMgbm90IHNvIGFjY3VyYXRlIHdoZW4gdGhlIHZhbHVlcyBvZiBBXG4gICAgICAvLyBhcmUgXCJsYXJnZVwiLCBzbyBzY2FsZSBBIGJ5IHBvd2VycyBvZiB0d28uIFRoZW4gY29tcHV0ZSB0aGVcbiAgICAgIC8vIGV4cG9uZW50aWFsLCBhbmQgc3F1YXJlIHRoZSByZXN1bHQgcmVwZWF0ZWRseSBhY2NvcmRpbmcgdG9cbiAgICAgIC8vIHRoZSBpZGVudGl0eSBlXkEgPSAoZV4oQS9tKSlebVxuICAgICAgLy8gQ29tcHV0ZSBpbmZpbml0eS1ub3JtIG9mIEEsIHx8QXx8LCB0byBzZWUgaG93IFwiYmlnXCIgaXQgaXNcblxuICAgICAgdmFyIGluZk5vcm0gPSBpbmZpbml0eU5vcm0oQSk7IC8vIEZpbmQgdGhlIG9wdGltYWwgc2NhbGluZyBmYWN0b3IgYW5kIG51bWJlciBvZiB0ZXJtcyBpbiB0aGVcbiAgICAgIC8vIFBhZMOpIGFwcHJveGltYW50IHRvIHJlYWNoIHRoZSBkZXNpcmVkIGFjY3VyYWN5XG5cbiAgICAgIHZhciBwYXJhbXMgPSBmaW5kUGFyYW1zKGluZk5vcm0sIGVwcyk7XG4gICAgICB2YXIgcSA9IHBhcmFtcy5xO1xuICAgICAgdmFyIGogPSBwYXJhbXMuajsgLy8gVGhlIFBhZGUgYXBwcm94aW1hdGlvbiB0byBlXkEgaXM6XG4gICAgICAvLyBScXEoQSkgPSBEcXEoQSkgXiAtMSAqIE5xcShBKVxuICAgICAgLy8gd2hlcmVcbiAgICAgIC8vIE5xcShBKSA9IHN1bShpPTAsIHEsICgycS1pKSFwISAvIFsgKDJxKSFpIShxLWkpISBdIEFeaVxuICAgICAgLy8gRHFxKEEpID0gc3VtKGk9MCwgcSwgKDJxLWkpIXEhIC8gWyAoMnEpIWkhKHEtaSkhIF0gKC1BKV5pXG4gICAgICAvLyBTY2FsZSBBIGJ5IDEgLyAyXmpcblxuICAgICAgdmFyIEFwb3MgPSBtdWx0aXBseShBLCBNYXRoLnBvdygyLCAtaikpOyAvLyBUaGUgaT0wIHRlcm0gaXMganVzdCB0aGUgaWRlbnRpdHkgbWF0cml4XG5cbiAgICAgIHZhciBOID0gaWRlbnRpdHkobik7XG4gICAgICB2YXIgRCA9IGlkZW50aXR5KG4pOyAvLyBJbml0aWFsaXphdGlvbiAoaT0wKVxuXG4gICAgICB2YXIgZmFjdG9yID0gMTsgLy8gSW5pdGlhbGl6YXRpb24gKGk9MSlcblxuICAgICAgdmFyIEFwb3NUb0kgPSBBcG9zOyAvLyBDbG9uaW5nIG5vdCBuZWNlc3NhcnlcblxuICAgICAgdmFyIGFsdGVybmF0ZSA9IC0xO1xuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8PSBxOyBpKyspIHtcbiAgICAgICAgaWYgKGkgPiAxKSB7XG4gICAgICAgICAgQXBvc1RvSSA9IG11bHRpcGx5KEFwb3NUb0ksIEFwb3MpO1xuICAgICAgICAgIGFsdGVybmF0ZSA9IC1hbHRlcm5hdGU7XG4gICAgICAgIH1cblxuICAgICAgICBmYWN0b3IgPSBmYWN0b3IgKiAocSAtIGkgKyAxKSAvICgoMiAqIHEgLSBpICsgMSkgKiBpKTtcbiAgICAgICAgTiA9IGFkZChOLCBtdWx0aXBseShmYWN0b3IsIEFwb3NUb0kpKTtcbiAgICAgICAgRCA9IGFkZChELCBtdWx0aXBseShmYWN0b3IgKiBhbHRlcm5hdGUsIEFwb3NUb0kpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIFIgPSBtdWx0aXBseShpbnYoRCksIE4pOyAvLyBTcXVhcmUgaiB0aW1lc1xuXG4gICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgajsgX2krKykge1xuICAgICAgICBSID0gbXVsdGlwbHkoUiwgUik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoMCwgX2lzLmlzU3BhcnNlTWF0cml4KShBKSA/IEEuY3JlYXRlU3BhcnNlTWF0cml4KFIpIDogUjtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGluZmluaXR5Tm9ybShBKSB7XG4gICAgdmFyIG4gPSBBLnNpemUoKVswXTtcbiAgICB2YXIgaW5mTm9ybSA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgdmFyIHJvd1N1bSA9IDA7XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgIHJvd1N1bSArPSBhYnMoQS5nZXQoW2ksIGpdKSk7XG4gICAgICB9XG5cbiAgICAgIGluZk5vcm0gPSBNYXRoLm1heChyb3dTdW0sIGluZk5vcm0pO1xuICAgIH1cblxuICAgIHJldHVybiBpbmZOb3JtO1xuICB9XG4gIC8qKlxuICAgKiBGaW5kIHRoZSBiZXN0IHBhcmFtZXRlcnMgZm9yIHRoZSBQYWRlIGFwcHJveGltYW50IGdpdmVuXG4gICAqIHRoZSBtYXRyaXggbm9ybSBhbmQgZGVzaXJlZCBhY2N1cmFjeS4gUmV0dXJucyB0aGUgZmlyc3QgYWNjZXB0YWJsZVxuICAgKiBjb21iaW5hdGlvbiBpbiBvcmRlciBvZiBpbmNyZWFzaW5nIGNvbXB1dGF0aW9uYWwgbG9hZC5cbiAgICovXG5cblxuICBmdW5jdGlvbiBmaW5kUGFyYW1zKGluZk5vcm0sIGVwcykge1xuICAgIHZhciBtYXhTZWFyY2hTaXplID0gMzA7XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IG1heFNlYXJjaFNpemU7IGsrKykge1xuICAgICAgZm9yICh2YXIgcSA9IDA7IHEgPD0gazsgcSsrKSB7XG4gICAgICAgIHZhciBqID0gayAtIHE7XG5cbiAgICAgICAgaWYgKGVycm9yRXN0aW1hdGUoaW5mTm9ybSwgcSwgaikgPCBlcHMpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcTogcSxcbiAgICAgICAgICAgIGo6IGpcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBhY2NlcHRhYmxlIHBhcmFtZXRlcnMgdG8gY29tcHV0ZSB0aGUgbWF0cml4IGV4cG9uZW50aWFsICh0cnkgaW5jcmVhc2luZyBtYXhTZWFyY2hTaXplIGluIGV4cG0uanMpJyk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVzdGltYXRlZCBlcnJvciBvZiB0aGUgUGFkZSBhcHByb3hpbWFudCBmb3IgdGhlIGdpdmVuXG4gICAqIHBhcmFtZXRlcnMuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZXJyb3JFc3RpbWF0ZShpbmZOb3JtLCBxLCBqKSB7XG4gICAgdmFyIHFmYWMgPSAxO1xuXG4gICAgZm9yICh2YXIgaSA9IDI7IGkgPD0gcTsgaSsrKSB7XG4gICAgICBxZmFjICo9IGk7XG4gICAgfVxuXG4gICAgdmFyIHR3b3FmYWMgPSBxZmFjO1xuXG4gICAgZm9yICh2YXIgX2kyID0gcSArIDE7IF9pMiA8PSAyICogcTsgX2kyKyspIHtcbiAgICAgIHR3b3FmYWMgKj0gX2kyO1xuICAgIH1cblxuICAgIHZhciB0d29xcDFmYWMgPSB0d29xZmFjICogKDIgKiBxICsgMSk7XG4gICAgcmV0dXJuIDguMCAqIE1hdGgucG93KGluZk5vcm0gLyBNYXRoLnBvdygyLCBqKSwgMiAqIHEpICogcWZhYyAqIHFmYWMgLyAodHdvcWZhYyAqIHR3b3FwMWZhYyk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVFeHBtID0gY3JlYXRlRXhwbTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRXllID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxuLy8gVE9ETzogZnVuY3Rpb24gZXllIGlzIHJlbW92ZWQgc2luY2UgdjUuMC4wIChKdW5lIDIwMTgpLiBSZW1vdmUgaXQgc29tZSBkYXkuXG52YXIgY3JlYXRlRXllID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKCdleWUnLCBbXSwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gZXllKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRnVuY3Rpb24gXCJleWVcIiBpcyByZW5hbWVkIHRvIFwiaWRlbnRpdHlcIiBzaW5jZSBtYXRoanMgdmVyc2lvbiA1LjAuMC4gJyArICdUbyBrZWVwIGV5ZSB3b3JraW5nLCBjcmVhdGUgYW4gYWxpYXMgZm9yIGl0IHVzaW5nIFwibWF0aC5pbXBvcnQoe2V5ZTogbWF0aC5pZGVudGl0eX0sIHtvdmVycmlkZTogdHJ1ZX0pXCInKTtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFeWUgPSBjcmVhdGVFeWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZpbHRlciA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mdW5jdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2ZpbHRlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUZpbHRlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEZpbHRlciB0aGUgaXRlbXMgaW4gYW4gYXJyYXkgb3Igb25lIGRpbWVuc2lvbmFsIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmZpbHRlcih4LCB0ZXN0KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgZnVuY3Rpb24gaXNQb3NpdGl2ZSAoeCkge1xuICAgKiAgICAgIHJldHVybiB4ID4gMFxuICAgKiAgICB9XG4gICAqICAgIG1hdGguZmlsdGVyKFs2LCAtMiwgLTEsIDQsIDNdLCBpc1Bvc2l0aXZlKSAvLyByZXR1cm5zIFs2LCA0LCAzXVxuICAgKlxuICAgKiAgICBtYXRoLmZpbHRlcihbXCIyM1wiLCBcImZvb1wiLCBcIjEwMFwiLCBcIjU1XCIsIFwiYmFyXCJdLCAvWzAtOV0rLykgLy8gcmV0dXJucyBbXCIyM1wiLCBcIjEwMFwiLCBcIjU1XCJdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBmb3JFYWNoLCBtYXAsIHNvcnRcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0geCAgICBBIG9uZSBkaW1lbnNpb25hbCBtYXRyaXggb3IgYXJyYXkgdG8gZmlsdGVyXG4gICAqIEBwYXJhbSB7RnVuY3Rpb24gfCBSZWdFeHB9IHRlc3RcbiAgICogICAgICAgIEEgZnVuY3Rpb24gb3IgcmVndWxhciBleHByZXNzaW9uIHRvIHRlc3QgaXRlbXMuXG4gICAqICAgICAgICBBbGwgZW50cmllcyBmb3Igd2hpY2ggYHRlc3RgIHJldHVybnMgdHJ1ZSBhcmUgcmV0dXJuZWQuXG4gICAqICAgICAgICBXaGVuIGB0ZXN0YCBpcyBhIGZ1bmN0aW9uLCBpdCBpcyBpbnZva2VkIHdpdGggdGhyZWUgcGFyYW1ldGVyczpcbiAgICogICAgICAgIHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCwgdGhlIGluZGV4IG9mIHRoZSBlbGVtZW50LCBhbmQgdGhlXG4gICAqICAgICAgICBtYXRyaXgvYXJyYXkgYmVpbmcgdHJhdmVyc2VkLiBUaGUgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBib29sZWFuLlxuICAgKiBAcmV0dXJuIHtNYXRyaXggfCBBcnJheX0gUmV0dXJucyB0aGUgZmlsdGVyZWQgbWF0cml4LlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKCdmaWx0ZXInLCB7XG4gICAgJ0FycmF5LCBmdW5jdGlvbic6IF9maWx0ZXJDYWxsYmFjayxcbiAgICAnTWF0cml4LCBmdW5jdGlvbic6IGZ1bmN0aW9uIE1hdHJpeEZ1bmN0aW9uKHgsIHRlc3QpIHtcbiAgICAgIHJldHVybiB4LmNyZWF0ZShfZmlsdGVyQ2FsbGJhY2soeC50b0FycmF5KCksIHRlc3QpKTtcbiAgICB9LFxuICAgICdBcnJheSwgUmVnRXhwJzogX2FycmF5LmZpbHRlclJlZ0V4cCxcbiAgICAnTWF0cml4LCBSZWdFeHAnOiBmdW5jdGlvbiBNYXRyaXhSZWdFeHAoeCwgdGVzdCkge1xuICAgICAgcmV0dXJuIHguY3JlYXRlKCgwLCBfYXJyYXkuZmlsdGVyUmVnRXhwKSh4LnRvQXJyYXkoKSwgdGVzdCkpO1xuICAgIH1cbiAgfSk7XG59KTtcbi8qKlxuICogRmlsdGVyIHZhbHVlcyBpbiBhIGNhbGxiYWNrIGdpdmVuIGEgY2FsbGJhY2sgZnVuY3Rpb25cbiAqIEBwYXJhbSB7QXJyYXl9IHhcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtBcnJheX0gUmV0dXJucyB0aGUgZmlsdGVyZWQgYXJyYXlcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVGaWx0ZXIgPSBjcmVhdGVGaWx0ZXI7XG5cbmZ1bmN0aW9uIF9maWx0ZXJDYWxsYmFjayh4LCBjYWxsYmFjaykge1xuICAvLyBmaWd1cmUgb3V0IHdoYXQgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZXhwZWN0c1xuICB2YXIgYXJncyA9ICgwLCBfZnVuY3Rpb24ubWF4QXJndW1lbnRDb3VudCkoY2FsbGJhY2spO1xuICByZXR1cm4gKDAsIF9hcnJheS5maWx0ZXIpKHgsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XG4gICAgLy8gaW52b2tlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIHRoZSByaWdodCBudW1iZXIgb2YgYXJndW1lbnRzXG4gICAgaWYgKGFyZ3MgPT09IDEpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChhcmdzID09PSAyKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIFtpbmRleF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyAzIG9yIC0xXG4gICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIFtpbmRleF0sIGFycmF5KTtcbiAgICB9XG4gIH0pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVGbGF0dGVuID0gdm9pZCAwO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdmbGF0dGVuJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZUZsYXR0ZW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXg7XG5cbiAgLyoqXG4gICAqIEZsYXR0ZW4gYSBtdWx0aSBkaW1lbnNpb25hbCBtYXRyaXggaW50byBhIHNpbmdsZSBkaW1lbnNpb25hbCBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5mbGF0dGVuKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmZsYXR0ZW4oW1sxLDJdLCBbMyw0XV0pICAgLy8gcmV0dXJucyBbMSwgMiwgMywgNF1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGNvbmNhdCwgcmVzaXplLCBzaXplLCBzcXVlZXplXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IHggICBNYXRyaXggdG8gYmUgZmxhdHRlbmVkXG4gICAqIEByZXR1cm4ge01hdHJpeCB8IEFycmF5fSBSZXR1cm5zIHRoZSBmbGF0dGVuZWQgbWF0cml4XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9hcnJheS5mbGF0dGVuKSgoMCwgX29iamVjdC5jbG9uZSkoeCkpO1xuICAgIH0sXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkge1xuICAgICAgdmFyIGZsYXQgPSAoMCwgX2FycmF5LmZsYXR0ZW4pKCgwLCBfb2JqZWN0LmNsb25lKSh4LnRvQXJyYXkoKSkpOyAvLyBUT0RPOiByZXR1cm4gdGhlIHNhbWUgbWF0cml4IHR5cGUgYXMgeFxuXG4gICAgICByZXR1cm4gbWF0cml4KGZsYXQpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlRmxhdHRlbiA9IGNyZWF0ZUZsYXR0ZW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZvckVhY2ggPSB2b2lkIDA7XG5cbnZhciBfZnVuY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZnVuY3Rpb25cIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdmb3JFYWNoJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlRm9yRWFjaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGUgb3ZlciBhbGwgZWxlbWVudHMgb2YgYSBtYXRyaXgvYXJyYXksIGFuZCBleGVjdXRlcyB0aGUgZ2l2ZW4gY2FsbGJhY2sgZnVuY3Rpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5mb3JFYWNoKHgsIGNhbGxiYWNrKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5mb3JFYWNoKFsxLCAyLCAzXSwgZnVuY3Rpb24odmFsdWUpIHtcbiAgICogICAgICBjb25zb2xlLmxvZyh2YWx1ZSlcbiAgICogICAgfSlcbiAgICogICAgLy8gb3V0cHV0cyAxLCAyLCAzXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBmaWx0ZXIsIG1hcCwgc29ydFxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeCB8IEFycmF5fSB4ICAgIFRoZSBtYXRyaXggdG8gaXRlcmF0ZSBvbi5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50LCB0aGUgaW5kZXhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZWxlbWVudCwgYW5kIHRoZSBNYXRyaXgvYXJyYXkgYmVpbmcgdHJhdmVyc2VkLlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXksIGZ1bmN0aW9uJzogX2ZvckVhY2gsXG4gICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCBjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHguZm9yRWFjaChjYWxsYmFjayk7XG4gICAgfVxuICB9KTtcbn0pO1xuLyoqXG4gKiBmb3JFYWNoIGZvciBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVGb3JFYWNoID0gY3JlYXRlRm9yRWFjaDtcblxuZnVuY3Rpb24gX2ZvckVhY2goYXJyYXksIGNhbGxiYWNrKSB7XG4gIC8vIGZpZ3VyZSBvdXQgd2hhdCBudW1iZXIgb2YgYXJndW1lbnRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleHBlY3RzXG4gIHZhciBhcmdzID0gKDAsIF9mdW5jdGlvbi5tYXhBcmd1bWVudENvdW50KShjYWxsYmFjayk7XG5cbiAgdmFyIHJlY3Vyc2UgPSBmdW5jdGlvbiByZWN1cnNlKHZhbHVlLCBpbmRleCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgKDAsIF9hcnJheS5mb3JFYWNoKSh2YWx1ZSwgZnVuY3Rpb24gKGNoaWxkLCBpKSB7XG4gICAgICAgIC8vIHdlIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGluZGV4IGFycmF5IGFuZCBhcHBlbmQgdGhlIG5ldyBpbmRleCB2YWx1ZVxuICAgICAgICByZWN1cnNlKGNoaWxkLCBpbmRleC5jb25jYXQoaSkpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGludm9rZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCB0aGUgcmlnaHQgbnVtYmVyIG9mIGFyZ3VtZW50c1xuICAgICAgaWYgKGFyZ3MgPT09IDEpIHtcbiAgICAgICAgY2FsbGJhY2sodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChhcmdzID09PSAyKSB7XG4gICAgICAgIGNhbGxiYWNrKHZhbHVlLCBpbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAzIG9yIC0xXG4gICAgICAgIGNhbGxiYWNrKHZhbHVlLCBpbmRleCwgYXJyYXkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZWN1cnNlKGFycmF5LCBbXSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUdldE1hdHJpeERhdGFUeXBlID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIG5hbWUgPSAnZ2V0TWF0cml4RGF0YVR5cGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVHZXRNYXRyaXhEYXRhVHlwZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEZpbmQgdGhlIGRhdGEgdHlwZSBvZiBhbGwgZWxlbWVudHMgaW4gYSBtYXRyaXggb3IgYXJyYXksXG4gICAqIGZvciBleGFtcGxlICdudW1iZXInIGlmIGFsbCBpdGVtcyBhcmUgYSBudW1iZXIgYW5kICdDb21wbGV4JyBpZiBhbGwgdmFsdWVzXG4gICAqIGFyZSBjb21wbGV4IG51bWJlcnMuXG4gICAqIElmIGEgbWF0cml4IGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgZGF0YSB0eXBlLCBpdCB3aWxsIHJldHVybiAnbWl4ZWQnLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZ2V0TWF0cml4RGF0YVR5cGUoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIGNvbnN0IHggPSBbIFsxLCAyLCAzXSwgWzQsIDUsIDZdIF1cbiAgICogICAgY29uc3QgbWl4ZWRYID0gWyBbMSwgdHJ1ZV0sIFsyLCAzXSBdXG4gICAqICAgIGNvbnN0IGZyYWN0aW9uWCA9IFsgW21hdGguZnJhY3Rpb24oMSwgMyldLCBbbWF0aC5mcmFjdGlvbigxLCAzXSBdXG4gICAqICAgIGNvbnN0IHVuaXRYID0gWyBbbWF0aC51bml0KCc1Y20nKV0sIFttYXRoLnVuaXQoJzVjbScpXSBdXG4gICAqICAgIGNvbnN0IGJpZ051bWJlclggPSBbIFttYXRoLmJpZ251bWJlcigxKV0sIFttYXRoLmJpZ251bWJlcigwKV0gXVxuICAgKiAgICBjb25zdCBzcGFyc2UgPSBtYXRoLnNwYXJzZSh4KVxuICAgKiAgICBjb25zdCBkZW5zZSA9IG1hdGgubWF0cml4KHgpXG4gICAqICAgIG1hdGguZ2V0TWF0cml4RGF0YVR5cGUoeCkgICAvLyByZXR1cm5zICdudW1iZXInXG4gICAqICAgIG1hdGguZ2V0TWF0cml4RGF0YVR5cGUoc3BhcnNlKSAgIC8vIHJldHVybnMgJ251bWJlcidcbiAgICogICAgbWF0aC5nZXRNYXRyaXhEYXRhVHlwZShkZW5zZSkgICAvLyByZXR1cm5zICdudW1iZXInXG4gICAqICAgIG1hdGguZ2V0TWF0cml4RGF0YVR5cGUobWl4ZWRYKSAvLyByZXR1cm5zICdtaXhlZCdcbiAgICogICAgbWF0aC5nZXRNYXRyaXhEYXRhVHlwZShmcmFjdGlvblgpIC8vIHJldHVybnMgJ0ZyYWN0aW9uJ1xuICAgKiAgICBtYXRoLmdldE1hdHJpeERhdGFUeXBlKHVuaXRYKSAvLyByZXR1cm5zICdVbml0J1xuICAgKiAgICBtYXRoLmdldE1hdHJpeERhdGFUeXBlKGJpZ051bWJlclgpIC8vIHJldHVybiAnQmlnTnVtYmVyJ1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICogIFNwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXhcbiAgICpcbiAgICogQHBhcmFtIHsuLi5NYXRyaXggfCBBcnJheX0geCAgIFRoZSBNYXRyaXggd2l0aCB2YWx1ZXMuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ30gQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeCB0eXBlXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9hcnJheS5nZXRBcnJheURhdGFUeXBlKSh4LCBfaXMudHlwZU9mKTtcbiAgICB9LFxuICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHgpIHtcbiAgICAgIHJldHVybiB4LmdldERhdGFUeXBlKCk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVHZXRNYXRyaXhEYXRhVHlwZSA9IGNyZWF0ZUdldE1hdHJpeERhdGFUeXBlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJZGVudGl0eSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnaWRlbnRpdHknO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ21hdHJpeCcsICdCaWdOdW1iZXInLCAnRGVuc2VNYXRyaXgnLCAnU3BhcnNlTWF0cml4J107XG52YXIgY3JlYXRlSWRlbnRpdHkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4LFxuICAgICAgU3BhcnNlTWF0cml4ID0gX3JlZi5TcGFyc2VNYXRyaXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIDItZGltZW5zaW9uYWwgaWRlbnRpdHkgbWF0cml4IHdpdGggc2l6ZSBtIHggbiBvciBuIHggbi5cbiAgICogVGhlIG1hdHJpeCBoYXMgb25lcyBvbiB0aGUgZGlhZ29uYWwgYW5kIHplcm9zIGVsc2V3aGVyZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmlkZW50aXR5KG4pXG4gICAqICAgIG1hdGguaWRlbnRpdHkobiwgZm9ybWF0KVxuICAgKiAgICBtYXRoLmlkZW50aXR5KG0sIG4pXG4gICAqICAgIG1hdGguaWRlbnRpdHkobSwgbiwgZm9ybWF0KVxuICAgKiAgICBtYXRoLmlkZW50aXR5KFttLCBuXSlcbiAgICogICAgbWF0aC5pZGVudGl0eShbbSwgbl0sIGZvcm1hdClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguaWRlbnRpdHkoMykgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1sxLCAwLCAwXSwgWzAsIDEsIDBdLCBbMCwgMCwgMV1dXG4gICAqICAgIG1hdGguaWRlbnRpdHkoMywgMikgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1sxLCAwXSwgWzAsIDFdLCBbMCwgMF1dXG4gICAqXG4gICAqICAgIGNvbnN0IEEgPSBbWzEsIDIsIDNdLCBbNCwgNSwgNl1dXG4gICAqICAgIG1hdGguaWRlbnRpdHkobWF0aC5zaXplKEEpKSAgICAgICAgIC8vIHJldHVybnMgW1sxLCAwLCAwXSwgWzAsIDEsIDBdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZGlhZywgb25lcywgemVyb3MsIHNpemUsIHJhbmdlXG4gICAqXG4gICAqIEBwYXJhbSB7Li4ubnVtYmVyIHwgTWF0cml4IHwgQXJyYXl9IHNpemUgICBUaGUgc2l6ZSBmb3IgdGhlIG1hdHJpeFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdF0gICAgICAgICAgICAgICAgICAgVGhlIE1hdHJpeCBzdG9yYWdlIGZvcm1hdFxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXggfCBBcnJheSB8IG51bWJlcn0gQSBtYXRyaXggd2l0aCBvbmVzIG9uIHRoZSBkaWFnb25hbC5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJyc6IGZ1bmN0aW9uIF8oKSB7XG4gICAgICByZXR1cm4gY29uZmlnLm1hdHJpeCA9PT0gJ01hdHJpeCcgPyBtYXRyaXgoW10pIDogW107XG4gICAgfSxcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhmb3JtYXQpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoZm9ybWF0KTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXIocm93cykge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eShyb3dzLCByb3dzLCBjb25maWcubWF0cml4ID09PSAnTWF0cml4JyA/ICdkZW5zZScgOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgc3RyaW5nJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyU3RyaW5nKHJvd3MsIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eShyb3dzLCByb3dzLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyTnVtYmVyQmlnTnVtYmVyKHJvd3MsIGNvbHMpIHtcbiAgICAgIHJldHVybiBfaWRlbnRpdHkocm93cywgY29scywgY29uZmlnLm1hdHJpeCA9PT0gJ01hdHJpeCcgPyAnZGVuc2UnIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIG51bWJlciB8IEJpZ051bWJlciwgc3RyaW5nJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyTnVtYmVyQmlnTnVtYmVyU3RyaW5nKHJvd3MsIGNvbHMsIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eShyb3dzLCBjb2xzLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgQXJyYXk6IGZ1bmN0aW9uIEFycmF5KHNpemUpIHtcbiAgICAgIHJldHVybiBfaWRlbnRpdHlWZWN0b3Ioc2l6ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIHN0cmluZyc6IGZ1bmN0aW9uIEFycmF5U3RyaW5nKHNpemUsIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eVZlY3RvcihzaXplLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoc2l6ZSkge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eVZlY3RvcihzaXplLnZhbHVlT2YoKSwgc2l6ZS5zdG9yYWdlKCkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgc3RyaW5nJzogZnVuY3Rpb24gTWF0cml4U3RyaW5nKHNpemUsIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9pZGVudGl0eVZlY3RvcihzaXplLnZhbHVlT2YoKSwgZm9ybWF0KTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9pZGVudGl0eVZlY3RvcihzaXplLCBmb3JtYXQpIHtcbiAgICBzd2l0Y2ggKHNpemUubGVuZ3RoKSB7XG4gICAgICBjYXNlIDA6XG4gICAgICAgIHJldHVybiBmb3JtYXQgPyBtYXRyaXgoZm9ybWF0KSA6IFtdO1xuXG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBfaWRlbnRpdHkoc2l6ZVswXSwgc2l6ZVswXSwgZm9ybWF0KTtcblxuICAgICAgY2FzZSAyOlxuICAgICAgICByZXR1cm4gX2lkZW50aXR5KHNpemVbMF0sIHNpemVbMV0sIGZvcm1hdCk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVmVjdG9yIGNvbnRhaW5pbmcgdHdvIHZhbHVlcyBleHBlY3RlZCcpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGFuIGlkZW50aXR5IG1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gcm93c1xuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gY29sc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdF1cbiAgICogQHJldHVybnMge01hdHJpeH1cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfaWRlbnRpdHkocm93cywgY29scywgZm9ybWF0KSB7XG4gICAgLy8gQmlnTnVtYmVyIGNvbnN0cnVjdG9yIHdpdGggdGhlIHJpZ2h0IHByZWNpc2lvblxuICAgIHZhciBCaWcgPSAoMCwgX2lzLmlzQmlnTnVtYmVyKShyb3dzKSB8fCAoMCwgX2lzLmlzQmlnTnVtYmVyKShjb2xzKSA/IEJpZ051bWJlciA6IG51bGw7XG4gICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHJvd3MpKSByb3dzID0gcm93cy50b051bWJlcigpO1xuICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShjb2xzKSkgY29scyA9IGNvbHMudG9OdW1iZXIoKTtcblxuICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShyb3dzKSB8fCByb3dzIDwgMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXJzIGluIGZ1bmN0aW9uIGlkZW50aXR5IG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcnMnKTtcbiAgICB9XG5cbiAgICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoY29scykgfHwgY29scyA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVycyBpbiBmdW5jdGlvbiBpZGVudGl0eSBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXJzJyk7XG4gICAgfVxuXG4gICAgdmFyIG9uZSA9IEJpZyA/IG5ldyBCaWdOdW1iZXIoMSkgOiAxO1xuICAgIHZhciBkZWZhdWx0VmFsdWUgPSBCaWcgPyBuZXcgQmlnKDApIDogMDtcbiAgICB2YXIgc2l6ZSA9IFtyb3dzLCBjb2xzXTsgLy8gY2hlY2sgd2UgbmVlZCB0byByZXR1cm4gYSBtYXRyaXhcblxuICAgIGlmIChmb3JtYXQpIHtcbiAgICAgIC8vIGNyZWF0ZSBkaWFnb25hbCBtYXRyaXggKHVzZSBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gZm9yIHN0b3JhZ2UgZm9ybWF0KVxuICAgICAgaWYgKGZvcm1hdCA9PT0gJ3NwYXJzZScpIHtcbiAgICAgICAgcmV0dXJuIFNwYXJzZU1hdHJpeC5kaWFnb25hbChzaXplLCBvbmUsIDAsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChmb3JtYXQgPT09ICdkZW5zZScpIHtcbiAgICAgICAgcmV0dXJuIERlbnNlTWF0cml4LmRpYWdvbmFsKHNpemUsIG9uZSwgMCwgZGVmYXVsdFZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gbWF0cml4IHR5cGUgXFxcIlwiLmNvbmNhdChmb3JtYXQsIFwiXFxcIlwiKSk7XG4gICAgfSAvLyBjcmVhdGUgYW5kIHJlc2l6ZSBhcnJheVxuXG5cbiAgICB2YXIgcmVzID0gKDAsIF9hcnJheS5yZXNpemUpKFtdLCBzaXplLCBkZWZhdWx0VmFsdWUpOyAvLyBmaWxsIGluIG9uZXMgb24gdGhlIGRpYWdvbmFsXG5cbiAgICB2YXIgbWluaW11bSA9IHJvd3MgPCBjb2xzID8gcm93cyA6IGNvbHM7IC8vIGZpbGwgZGlhZ29uYWxcblxuICAgIGZvciAodmFyIGQgPSAwOyBkIDwgbWluaW11bTsgZCsrKSB7XG4gICAgICByZXNbZF1bZF0gPSBvbmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUlkZW50aXR5ID0gY3JlYXRlSWRlbnRpdHk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUludiA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIG5hbWUgPSAnaW52JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdkaXZpZGVTY2FsYXInLCAnYWRkU2NhbGFyJywgJ211bHRpcGx5JywgJ3VuYXJ5TWludXMnLCAnZGV0JywgJ2lkZW50aXR5JywgJ2FicyddO1xudmFyIGNyZWF0ZUludiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICB1bmFyeU1pbnVzID0gX3JlZi51bmFyeU1pbnVzLFxuICAgICAgZGV0ID0gX3JlZi5kZXQsXG4gICAgICBpZGVudGl0eSA9IF9yZWYuaWRlbnRpdHksXG4gICAgICBhYnMgPSBfcmVmLmFicztcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIG9mIGEgc3F1YXJlIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5pbnYoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLmludihbWzEsIDJdLCBbMywgNF1dKSAgLy8gcmV0dXJucyBbWy0yLCAxXSwgWzEuNSwgLTAuNV1dXG4gICAqICAgICBtYXRoLmludig0KSAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAwLjI1XG4gICAqICAgICAxIC8gNCAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAwLjI1XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgZGV0LCB0cmFuc3Bvc2VcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggICAgIE1hdHJpeCB0byBiZSBpbnZlcnNlZFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBpbnZlcnNlIG9mIGB4YC5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgdmFyIHNpemUgPSAoMCwgX2lzLmlzTWF0cml4KSh4KSA/IHguc2l6ZSgpIDogKDAsIF9hcnJheS5hcnJheVNpemUpKHgpO1xuXG4gICAgICBzd2l0Y2ggKHNpemUubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAvLyB2ZWN0b3JcbiAgICAgICAgICBpZiAoc2l6ZVswXSA9PT0gMSkge1xuICAgICAgICAgICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKHgpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBtYXRyaXgoW2RpdmlkZVNjYWxhcigxLCB4LnZhbHVlT2YoKVswXSldKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBbZGl2aWRlU2NhbGFyKDEsIHhbMF0pXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHNxdWFyZSAnICsgJyhzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAvLyB0d28gZGltZW5zaW9uYWwgYXJyYXlcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgICAgICAgICB2YXIgY29scyA9IHNpemVbMV07XG5cbiAgICAgICAgICAgIGlmIChyb3dzID09PSBjb2xzKSB7XG4gICAgICAgICAgICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KSh4KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXRyaXgoX2ludih4LnZhbHVlT2YoKSwgcm93cywgY29scyksIHguc3RvcmFnZSgpKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyByZXR1cm4gYW4gQXJyYXlcbiAgICAgICAgICAgICAgICByZXR1cm4gX2ludih4LCByb3dzLCBjb2xzKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHNxdWFyZSAnICsgJyhzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gbXVsdGkgZGltZW5zaW9uYWwgYXJyYXlcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgdHdvIGRpbWVuc2lvbmFsICcgKyAnKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIGFueTogZnVuY3Rpb24gYW55KHgpIHtcbiAgICAgIC8vIHNjYWxhclxuICAgICAgcmV0dXJuIGRpdmlkZVNjYWxhcigxLCB4KTsgLy8gRklYTUU6IGNyZWF0ZSBhIEJpZ051bWJlciBvbmUgd2hlbiBjb25maWd1cmVkIGZvciBiaWdudW1iZXJzXG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaW52ZXJzZSBvZiBhIHNxdWFyZSBtYXRyaXhcbiAgICogQHBhcmFtIHtBcnJheVtdfSBtYXQgICAgIEEgc3F1YXJlIG1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93cyAgICAgTnVtYmVyIG9mIHJvd3NcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHMgICAgIE51bWJlciBvZiBjb2x1bW5zLCBtdXN0IGVxdWFsIHJvd3NcbiAgICogQHJldHVybiB7QXJyYXlbXX0gaW52ICAgIEludmVyc2UgbWF0cml4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9pbnYobWF0LCByb3dzLCBjb2xzKSB7XG4gICAgdmFyIHIsIHMsIGYsIHZhbHVlLCB0ZW1wO1xuXG4gICAgaWYgKHJvd3MgPT09IDEpIHtcbiAgICAgIC8vIHRoaXMgaXMgYSAxIHggMSBtYXRyaXhcbiAgICAgIHZhbHVlID0gbWF0WzBdWzBdO1xuXG4gICAgICBpZiAodmFsdWUgPT09IDApIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgaW52ZXJzZSwgZGV0ZXJtaW5hbnQgaXMgemVybycpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW1tkaXZpZGVTY2FsYXIoMSwgdmFsdWUpXV07XG4gICAgfSBlbHNlIGlmIChyb3dzID09PSAyKSB7XG4gICAgICAvLyB0aGlzIGlzIGEgMiB4IDIgbWF0cml4XG4gICAgICB2YXIgZCA9IGRldChtYXQpO1xuXG4gICAgICBpZiAoZCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBpbnZlcnNlLCBkZXRlcm1pbmFudCBpcyB6ZXJvJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbW2RpdmlkZVNjYWxhcihtYXRbMV1bMV0sIGQpLCBkaXZpZGVTY2FsYXIodW5hcnlNaW51cyhtYXRbMF1bMV0pLCBkKV0sIFtkaXZpZGVTY2FsYXIodW5hcnlNaW51cyhtYXRbMV1bMF0pLCBkKSwgZGl2aWRlU2NhbGFyKG1hdFswXVswXSwgZCldXTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhpcyBpcyBhIG1hdHJpeCBvZiAzIHggMyBvciBsYXJnZXJcbiAgICAgIC8vIGNhbGN1bGF0ZSBpbnZlcnNlIHVzaW5nIGdhdXNzLWpvcmRhbiBlbGltaW5hdGlvblxuICAgICAgLy8gICAgICBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9HYXVzc2lhbl9lbGltaW5hdGlvblxuICAgICAgLy8gICAgICBodHRwOi8vbWF0aHdvcmxkLndvbGZyYW0uY29tL01hdHJpeEludmVyc2UuaHRtbFxuICAgICAgLy8gICAgICBodHRwOi8vbWF0aC51d3cuZWR1L35tY2ZhcmxhdC9pbnZlcnNlLmh0bVxuICAgICAgLy8gbWFrZSBhIGNvcHkgb2YgdGhlIG1hdHJpeCAob25seSB0aGUgYXJyYXlzLCBub3Qgb2YgdGhlIGVsZW1lbnRzKVxuICAgICAgdmFyIEEgPSBtYXQuY29uY2F0KCk7XG5cbiAgICAgIGZvciAociA9IDA7IHIgPCByb3dzOyByKyspIHtcbiAgICAgICAgQVtyXSA9IEFbcl0uY29uY2F0KCk7XG4gICAgICB9IC8vIGNyZWF0ZSBhbiBpZGVudGl0eSBtYXRyaXggd2hpY2ggaW4gdGhlIGVuZCB3aWxsIGNvbnRhaW4gdGhlXG4gICAgICAvLyBtYXRyaXggaW52ZXJzZVxuXG5cbiAgICAgIHZhciBCID0gaWRlbnRpdHkocm93cykudmFsdWVPZigpOyAvLyBsb29wIG92ZXIgYWxsIGNvbHVtbnMsIGFuZCBwZXJmb3JtIHJvdyByZWR1Y3Rpb25zXG5cbiAgICAgIGZvciAodmFyIGMgPSAwOyBjIDwgY29sczsgYysrKSB7XG4gICAgICAgIC8vIFBpdm90aW5nOiBTd2FwIHJvdyBjIHdpdGggcm93IHIsIHdoZXJlIHJvdyByIGNvbnRhaW5zIHRoZSBsYXJnZXN0IGVsZW1lbnQgQVtyXVtjXVxuICAgICAgICB2YXIgQUJpZyA9IGFicyhBW2NdW2NdKTtcbiAgICAgICAgdmFyIHJCaWcgPSBjO1xuICAgICAgICByID0gYyArIDE7XG5cbiAgICAgICAgd2hpbGUgKHIgPCByb3dzKSB7XG4gICAgICAgICAgaWYgKGFicyhBW3JdW2NdKSA+IEFCaWcpIHtcbiAgICAgICAgICAgIEFCaWcgPSBhYnMoQVtyXVtjXSk7XG4gICAgICAgICAgICByQmlnID0gcjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByKys7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQUJpZyA9PT0gMCkge1xuICAgICAgICAgIHRocm93IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIGludmVyc2UsIGRldGVybWluYW50IGlzIHplcm8nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHIgPSByQmlnO1xuXG4gICAgICAgIGlmIChyICE9PSBjKSB7XG4gICAgICAgICAgdGVtcCA9IEFbY107XG4gICAgICAgICAgQVtjXSA9IEFbcl07XG4gICAgICAgICAgQVtyXSA9IHRlbXA7XG4gICAgICAgICAgdGVtcCA9IEJbY107XG4gICAgICAgICAgQltjXSA9IEJbcl07XG4gICAgICAgICAgQltyXSA9IHRlbXA7XG4gICAgICAgIH0gLy8gZWxpbWluYXRlIG5vbi16ZXJvIHZhbHVlcyBvbiB0aGUgb3RoZXIgcm93cyBhdCBjb2x1bW4gY1xuXG5cbiAgICAgICAgdmFyIEFjID0gQVtjXTtcbiAgICAgICAgdmFyIEJjID0gQltjXTtcblxuICAgICAgICBmb3IgKHIgPSAwOyByIDwgcm93czsgcisrKSB7XG4gICAgICAgICAgdmFyIEFyID0gQVtyXTtcbiAgICAgICAgICB2YXIgQnIgPSBCW3JdO1xuXG4gICAgICAgICAgaWYgKHIgIT09IGMpIHtcbiAgICAgICAgICAgIC8vIGVsaW1pbmF0ZSB2YWx1ZSBhdCBjb2x1bW4gYyBhbmQgcm93IHJcbiAgICAgICAgICAgIGlmIChBcltjXSAhPT0gMCkge1xuICAgICAgICAgICAgICBmID0gZGl2aWRlU2NhbGFyKHVuYXJ5TWludXMoQXJbY10pLCBBY1tjXSk7IC8vIGFkZCAoZiAqIHJvdyBjKSB0byByb3cgciB0byBlbGltaW5hdGUgdGhlIHZhbHVlXG4gICAgICAgICAgICAgIC8vIGF0IGNvbHVtbiBjXG5cbiAgICAgICAgICAgICAgZm9yIChzID0gYzsgcyA8IGNvbHM7IHMrKykge1xuICAgICAgICAgICAgICAgIEFyW3NdID0gYWRkU2NhbGFyKEFyW3NdLCBtdWx0aXBseShmLCBBY1tzXSkpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgZm9yIChzID0gMDsgcyA8IGNvbHM7IHMrKykge1xuICAgICAgICAgICAgICAgIEJyW3NdID0gYWRkU2NhbGFyKEJyW3NdLCBtdWx0aXBseShmLCBCY1tzXSkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIG5vcm1hbGl6ZSB2YWx1ZSBhdCBBY2MgdG8gMSxcbiAgICAgICAgICAgIC8vIGRpdmlkZSBlYWNoIHZhbHVlIG9uIHJvdyByIHdpdGggdGhlIHZhbHVlIGF0IEFjY1xuICAgICAgICAgICAgZiA9IEFjW2NdO1xuXG4gICAgICAgICAgICBmb3IgKHMgPSBjOyBzIDwgY29sczsgcysrKSB7XG4gICAgICAgICAgICAgIEFyW3NdID0gZGl2aWRlU2NhbGFyKEFyW3NdLCBmKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZm9yIChzID0gMDsgcyA8IGNvbHM7IHMrKykge1xuICAgICAgICAgICAgICBCcltzXSA9IGRpdmlkZVNjYWxhcihCcltzXSwgZik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBCO1xuICAgIH1cbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUludiA9IGNyZWF0ZUludjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlS3JvbiA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2tyb24nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ211bHRpcGx5U2NhbGFyJ107XG52YXIgY3JlYXRlS3JvbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcjtcblxuICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBrcm9uZWNrZXIgcHJvZHVjdCBvZiAyIG1hdHJpY2VzIG9yIHZlY3RvcnMuXG4gICAgICpcbiAgICAgKiBOT1RFOiBJZiBhIG9uZSBkaW1lbnNpb25hbCB2ZWN0b3IgLyBtYXRyaXggaXMgZ2l2ZW4sIGl0IHdpbGwgYmVcbiAgICAgKiB3cmFwcGVkIHNvIGl0cyB0d28gZGltZW5zaW9ucy5cbiAgICAgKiBTZWUgdGhlIGV4YW1wbGVzLlxuICAgICAqXG4gICAgICogU3ludGF4OlxuICAgICAqXG4gICAgICogICAgbWF0aC5rcm9uKHgsIHkpXG4gICAgICpcbiAgICAgKiBFeGFtcGxlczpcbiAgICAgKlxuICAgICAqICAgIG1hdGgua3JvbihbWzEsIDBdLCBbMCwgMV1dLCBbWzEsIDJdLCBbMywgNF1dKVxuICAgICAqICAgIC8vIHJldHVybnMgWyBbIDEsIDIsIDAsIDAgXSwgWyAzLCA0LCAwLCAwIF0sIFsgMCwgMCwgMSwgMiBdLCBbIDAsIDAsIDMsIDQgXSBdXG4gICAgICpcbiAgICAgKiAgICBtYXRoLmtyb24oWzEsMV0sIFsyLDMsNF0pXG4gICAgICogICAgLy8gcmV0dXJucyBbIFsgMiwgMywgNCwgMiwgMywgNCBdIF1cbiAgICAgKlxuICAgICAqIFNlZSBhbHNvOlxuICAgICAqXG4gICAgICogICAgbXVsdGlwbHksIGRvdCwgY3Jvc3NcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSB4ICAgICBGaXJzdCB2ZWN0b3JcbiAgICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0geSAgICAgU2Vjb25kIHZlY3RvclxuICAgICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgICAgICBSZXR1cm5zIHRoZSBrcm9uZWNrZXIgcHJvZHVjdCBvZiBgeGAgYW5kIGB5YFxuICAgICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdNYXRyaXgsIE1hdHJpeCc6IGZ1bmN0aW9uIE1hdHJpeE1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gbWF0cml4KF9rcm9uKHgudG9BcnJheSgpLCB5LnRvQXJyYXkoKSkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICByZXR1cm4gbWF0cml4KF9rcm9uKHgudG9BcnJheSgpLCB5KSk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoX2tyb24oeCwgeS50b0FycmF5KCkpKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBfa3JvblxuICB9KTtcbiAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBrcm9uZWNrZXIgcHJvZHVjdCBvZiB0d28gbWF0cmljZXMgLyB2ZWN0b3JzXG4gICAgICogQHBhcmFtIHtBcnJheX0gYSAgRmlyc3QgdmVjdG9yXG4gICAgICogQHBhcmFtIHtBcnJheX0gYiAgU2Vjb25kIHZlY3RvclxuICAgICAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyB0aGUga3JvbmVja2VyIHByb2R1Y3Qgb2YgeCBhbmQgeVxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG5cbiAgZnVuY3Rpb24gX2tyb24oYSwgYikge1xuICAgIC8vIERlYWwgd2l0aCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgbWF0cmljaWVzLlxuICAgIGlmICgoMCwgX2FycmF5LmFycmF5U2l6ZSkoYSkubGVuZ3RoID09PSAxKSB7XG4gICAgICAvLyBXcmFwIGl0IGluIGEgMkQgTWF0cml4XG4gICAgICBhID0gW2FdO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2FycmF5LmFycmF5U2l6ZSkoYikubGVuZ3RoID09PSAxKSB7XG4gICAgICAvLyBXcmFwIGl0IGluIGEgMkQgTWF0cml4XG4gICAgICBiID0gW2JdO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2FycmF5LmFycmF5U2l6ZSkoYSkubGVuZ3RoID4gMiB8fCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoYikubGVuZ3RoID4gMikge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1ZlY3RvcnMgd2l0aCBkaW1lbnNpb25zIGdyZWF0ZXIgdGhlbiAyIGFyZSBub3Qgc3VwcG9ydGVkIGV4cGVjdGVkICcgKyAnKFNpemUgeCA9ICcgKyBKU09OLnN0cmluZ2lmeShhLmxlbmd0aCkgKyAnLCB5ID0gJyArIEpTT04uc3RyaW5naWZ5KGIubGVuZ3RoKSArICcpJyk7XG4gICAgfVxuXG4gICAgdmFyIHQgPSBbXTtcbiAgICB2YXIgciA9IFtdO1xuICAgIHJldHVybiBhLm1hcChmdW5jdGlvbiAoYSkge1xuICAgICAgcmV0dXJuIGIubWFwKGZ1bmN0aW9uIChiKSB7XG4gICAgICAgIHIgPSBbXTtcbiAgICAgICAgdC5wdXNoKHIpO1xuICAgICAgICByZXR1cm4gYS5tYXAoZnVuY3Rpb24gKHkpIHtcbiAgICAgICAgICByZXR1cm4gYi5tYXAoZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiByLnB1c2gobXVsdGlwbHlTY2FsYXIoeSwgeCkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pICYmIHQ7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVLcm9uID0gY3JlYXRlS3JvbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTWFwID0gdm9pZCAwO1xuXG52YXIgX2Z1bmN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2Z1bmN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnbWFwJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlTWFwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG1hdHJpeCBvciBhcnJheSB3aXRoIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleGVjdXRlZCBvblxuICAgKiBlYWNoIGVudHJ5IG9mIHRoZSBtYXRyaXgvYXJyYXkuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5tYXAoeCwgY2FsbGJhY2spXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLm1hcChbMSwgMiwgM10sIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAqICAgICAgcmV0dXJuIHZhbHVlICogdmFsdWVcbiAgICogICAgfSkgIC8vIHJldHVybnMgWzEsIDQsIDldXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBmaWx0ZXIsIGZvckVhY2gsIHNvcnRcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0geCAgICBUaGUgbWF0cml4IHRvIGl0ZXJhdGUgb24uXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIG1ldGhvZCBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQsIHRoZSBpbmRleFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBlbGVtZW50LCBhbmQgdGhlIG1hdHJpeCBiZWluZyB0cmF2ZXJzZWQuXG4gICAqIEByZXR1cm4ge01hdHJpeCB8IGFycmF5fSAgICAgVHJhbnNmb3JtZWQgbWFwIG9mIHhcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5LCBmdW5jdGlvbic6IF9tYXAsXG4gICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCBjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIHgubWFwKGNhbGxiYWNrKTtcbiAgICB9XG4gIH0pO1xufSk7XG4vKipcbiAqIE1hcCBmb3IgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVNYXAgPSBjcmVhdGVNYXA7XG5cbmZ1bmN0aW9uIF9tYXAoYXJyYXksIGNhbGxiYWNrKSB7XG4gIC8vIGZpZ3VyZSBvdXQgd2hhdCBudW1iZXIgb2YgYXJndW1lbnRzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleHBlY3RzXG4gIHZhciBhcmdzID0gKDAsIF9mdW5jdGlvbi5tYXhBcmd1bWVudENvdW50KShjYWxsYmFjayk7XG5cbiAgdmFyIHJlY3Vyc2UgPSBmdW5jdGlvbiByZWN1cnNlKHZhbHVlLCBpbmRleCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLm1hcChmdW5jdGlvbiAoY2hpbGQsIGkpIHtcbiAgICAgICAgLy8gd2UgY3JlYXRlIGEgY29weSBvZiB0aGUgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCB0aGUgbmV3IGluZGV4IHZhbHVlXG4gICAgICAgIHJldHVybiByZWN1cnNlKGNoaWxkLCBpbmRleC5jb25jYXQoaSkpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGludm9rZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCB0aGUgcmlnaHQgbnVtYmVyIG9mIGFyZ3VtZW50c1xuICAgICAgaWYgKGFyZ3MgPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJncyA9PT0gMikge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIGluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDMgb3IgLTFcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlLCBpbmRleCwgYXJyYXkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gcmVjdXJzZShhcnJheSwgW10pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVPbmVzID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdvbmVzJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtYXRyaXgnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlT25lcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG1hdHJpeCBmaWxsZWQgd2l0aCBvbmVzLiBUaGUgY3JlYXRlZCBtYXRyaXggY2FuIGhhdmUgb25lIG9yXG4gICAqIG11bHRpcGxlIGRpbWVuc2lvbnMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5vbmVzKG0pXG4gICAqICAgIG1hdGgub25lcyhtLCBmb3JtYXQpXG4gICAqICAgIG1hdGgub25lcyhtLCBuKVxuICAgKiAgICBtYXRoLm9uZXMobSwgbiwgZm9ybWF0KVxuICAgKiAgICBtYXRoLm9uZXMoW20sIG5dKVxuICAgKiAgICBtYXRoLm9uZXMoW20sIG5dLCBmb3JtYXQpXG4gICAqICAgIG1hdGgub25lcyhbbSwgbiwgcCwgLi4uXSlcbiAgICogICAgbWF0aC5vbmVzKFttLCBuLCBwLCAuLi5dLCBmb3JtYXQpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLm9uZXMoMykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbMSwgMSwgMV1cbiAgICogICAgbWF0aC5vbmVzKDMsIDIpICAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1sxLCAxXSwgWzEsIDFdLCBbMSwgMV1dXG4gICAqICAgIG1hdGgub25lcygzLCAyLCAnZGVuc2UnKSAgICAgICAvLyByZXR1cm5zIERlbnNlIE1hdHJpeCBbWzEsIDFdLCBbMSwgMV0sIFsxLCAxXV1cbiAgICpcbiAgICogICAgY29uc3QgQSA9IFtbMSwgMiwgM10sIFs0LCA1LCA2XV1cbiAgICogICAgbWF0aC5vbmVzKG1hdGguc2l6ZShBKSkgICAgICAgLy8gcmV0dXJucyBbWzEsIDEsIDFdLCBbMSwgMSwgMV1dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICB6ZXJvcywgaWRlbnRpdHksIHNpemUsIHJhbmdlXG4gICAqXG4gICAqIEBwYXJhbSB7Li4ubnVtYmVyIHwgQXJyYXl9IHNpemUgICAgVGhlIHNpemUgb2YgZWFjaCBkaW1lbnNpb24gb2YgdGhlIG1hdHJpeFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdF0gICAgICAgICAgIFRoZSBNYXRyaXggc3RvcmFnZSBmb3JtYXRcbiAgICpcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXggfCBudW1iZXJ9ICBBIG1hdHJpeCBmaWxsZWQgd2l0aCBvbmVzXG4gICAqL1xuICByZXR1cm4gdHlwZWQoJ29uZXMnLCB7XG4gICAgJyc6IGZ1bmN0aW9uIF8oKSB7XG4gICAgICByZXR1cm4gY29uZmlnLm1hdHJpeCA9PT0gJ0FycmF5JyA/IF9vbmVzKFtdKSA6IF9vbmVzKFtdLCAnZGVmYXVsdCcpO1xuICAgIH0sXG4gICAgLy8gbWF0aC5vbmVzKG0sIG4sIHAsIC4uLiwgZm9ybWF0KVxuICAgIC8vIFRPRE86IG1vcmUgYWNjdXJhdGUgc2lnbmF0dXJlICcuLi5udW1iZXIgfCBCaWdOdW1iZXIsIHN0cmluZycgYXMgc29vbiBhcyB0eXBlZC1mdW5jdGlvbiBzdXBwb3J0cyB0aGlzXG4gICAgJy4uLm51bWJlciB8IEJpZ051bWJlciB8IHN0cmluZyc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclN0cmluZyhzaXplKSB7XG4gICAgICB2YXIgbGFzdCA9IHNpemVbc2l6ZS5sZW5ndGggLSAxXTtcblxuICAgICAgaWYgKHR5cGVvZiBsYXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgZm9ybWF0ID0gc2l6ZS5wb3AoKTtcbiAgICAgICAgcmV0dXJuIF9vbmVzKHNpemUsIGZvcm1hdCk7XG4gICAgICB9IGVsc2UgaWYgKGNvbmZpZy5tYXRyaXggPT09ICdBcnJheScpIHtcbiAgICAgICAgcmV0dXJuIF9vbmVzKHNpemUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIF9vbmVzKHNpemUsICdkZWZhdWx0Jyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBBcnJheTogX29uZXMsXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoc2l6ZSkge1xuICAgICAgdmFyIGZvcm1hdCA9IHNpemUuc3RvcmFnZSgpO1xuICAgICAgcmV0dXJuIF9vbmVzKHNpemUudmFsdWVPZigpLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBzdHJpbmcnOiBmdW5jdGlvbiBBcnJheU1hdHJpeFN0cmluZyhzaXplLCBmb3JtYXQpIHtcbiAgICAgIHJldHVybiBfb25lcyhzaXplLnZhbHVlT2YoKSwgZm9ybWF0KTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ3JlYXRlIGFuIEFycmF5IG9yIE1hdHJpeCB3aXRoIG9uZXNcbiAgICogQHBhcmFtIHtBcnJheX0gc2l6ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdD0nZGVmYXVsdCddXG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfb25lcyhzaXplLCBmb3JtYXQpIHtcbiAgICB2YXIgaGFzQmlnTnVtYmVycyA9IF9ub3JtYWxpemUoc2l6ZSk7XG5cbiAgICB2YXIgZGVmYXVsdFZhbHVlID0gaGFzQmlnTnVtYmVycyA/IG5ldyBCaWdOdW1iZXIoMSkgOiAxO1xuXG4gICAgX3ZhbGlkYXRlKHNpemUpO1xuXG4gICAgaWYgKGZvcm1hdCkge1xuICAgICAgLy8gcmV0dXJuIGEgbWF0cml4XG4gICAgICB2YXIgbSA9IG1hdHJpeChmb3JtYXQpO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBtLnJlc2l6ZShzaXplLCBkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmV0dXJuIGFuIEFycmF5XG4gICAgICB2YXIgYXJyID0gW107XG5cbiAgICAgIGlmIChzaXplLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuICgwLCBfYXJyYXkucmVzaXplKShhcnIsIHNpemUsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhcnI7XG4gICAgfVxuICB9IC8vIHJlcGxhY2UgQmlnTnVtYmVycyB3aXRoIG51bWJlcnMsIHJldHVybnMgdHJ1ZSBpZiBzaXplIGNvbnRhaW5lZCBCaWdOdW1iZXJzXG5cblxuICBmdW5jdGlvbiBfbm9ybWFsaXplKHNpemUpIHtcbiAgICB2YXIgaGFzQmlnTnVtYmVycyA9IGZhbHNlO1xuICAgIHNpemUuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnIpIHtcbiAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKSh2YWx1ZSkpIHtcbiAgICAgICAgaGFzQmlnTnVtYmVycyA9IHRydWU7XG4gICAgICAgIGFycltpbmRleF0gPSB2YWx1ZS50b051bWJlcigpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBoYXNCaWdOdW1iZXJzO1xuICB9IC8vIHZhbGlkYXRlIGFyZ3VtZW50c1xuXG5cbiAgZnVuY3Rpb24gX3ZhbGlkYXRlKHNpemUpIHtcbiAgICBzaXplLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh2YWx1ZSkgfHwgdmFsdWUgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVycyBpbiBmdW5jdGlvbiBvbmVzIG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcnMnKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZU9uZXMgPSBjcmVhdGVPbmVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVQYXJ0aXRpb25TZWxlY3QgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3BhcnRpdGlvblNlbGVjdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdpc051bWVyaWMnLCAnaXNOYU4nLCAnY29tcGFyZSddO1xudmFyIGNyZWF0ZVBhcnRpdGlvblNlbGVjdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBpc051bWVyaWMgPSBfcmVmLmlzTnVtZXJpYyxcbiAgICAgIGlzTmFOID0gX3JlZi5pc05hTixcbiAgICAgIGNvbXBhcmUgPSBfcmVmLmNvbXBhcmU7XG4gIHZhciBhc2MgPSBjb21wYXJlO1xuXG4gIHZhciBkZXNjID0gZnVuY3Rpb24gZGVzYyhhLCBiKSB7XG4gICAgcmV0dXJuIC1jb21wYXJlKGEsIGIpO1xuICB9O1xuICAvKipcbiAgICogUGFydGl0aW9uLWJhc2VkIHNlbGVjdGlvbiBvZiBhbiBhcnJheSBvciAxRCBtYXRyaXguXG4gICAqIFdpbGwgZmluZCB0aGUga3RoIHNtYWxsZXN0IHZhbHVlLCBhbmQgbXV0YXRlcyB0aGUgaW5wdXQgYXJyYXkuXG4gICAqIFVzZXMgUXVpY2tzZWxlY3QuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5wYXJ0aXRpb25TZWxlY3QoeCwgaylcbiAgICogICAgbWF0aC5wYXJ0aXRpb25TZWxlY3QoeCwgaywgY29tcGFyZSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgucGFydGl0aW9uU2VsZWN0KFs1LCAxMCwgMV0sIDIpICAgICAgICAgICAvLyByZXR1cm5zIDEwXG4gICAqICAgIG1hdGgucGFydGl0aW9uU2VsZWN0KFsnQycsICdCJywgJ0EnLCAnRCddLCAxKSAvLyByZXR1cm5zICdCJ1xuICAgKlxuICAgKiAgICBmdW5jdGlvbiBzb3J0QnlMZW5ndGggKGEsIGIpIHtcbiAgICogICAgICByZXR1cm4gYS5sZW5ndGggLSBiLmxlbmd0aFxuICAgKiAgICB9XG4gICAqICAgIG1hdGgucGFydGl0aW9uU2VsZWN0KFsnTGFuZ2RvbicsICdUb20nLCAnU2FyYSddLCAyLCBzb3J0QnlMZW5ndGgpIC8vIHJldHVybnMgJ0xhbmdkb24nXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzb3J0XG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IHggICAgQSBvbmUgZGltZW5zaW9uYWwgbWF0cml4IG9yIGFycmF5IHRvIHNvcnRcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGsgICAgICAgICAgICBUaGUga3RoIHNtYWxsZXN0IHZhbHVlIHRvIGJlIHJldHJpZXZlZCB6ZXJvLWJhc2VkIGluZGV4XG4gICAqIEBwYXJhbSB7RnVuY3Rpb24gfCAnYXNjJyB8ICdkZXNjJ30gW2NvbXBhcmU9J2FzYyddXG4gICAqICAgICAgICBBbiBvcHRpb25hbCBjb21wYXJhdG9yIGZ1bmN0aW9uLiBUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIGFzXG4gICAqICAgICAgICBgY29tcGFyZShhLCBiKWAsIGFuZCBtdXN0IHJldHVybiAxIHdoZW4gYSA+IGIsIC0xIHdoZW4gYSA8IGIsXG4gICAqICAgICAgICBhbmQgMCB3aGVuIGEgPT0gYi5cbiAgICogQHJldHVybiB7Kn0gUmV0dXJucyB0aGUga3RoIGxvd2VzdCB2YWx1ZS5cbiAgICovXG5cblxuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXIoeCwgaykge1xuICAgICAgcmV0dXJuIF9wYXJ0aXRpb25TZWxlY3QoeCwgaywgYXNjKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyLCBzdHJpbmcnOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlclN0cmluZyh4LCBrLCBjb21wYXJlKSB7XG4gICAgICBpZiAoY29tcGFyZSA9PT0gJ2FzYycpIHtcbiAgICAgICAgcmV0dXJuIF9wYXJ0aXRpb25TZWxlY3QoeCwgaywgYXNjKTtcbiAgICAgIH0gZWxzZSBpZiAoY29tcGFyZSA9PT0gJ2Rlc2MnKSB7XG4gICAgICAgIHJldHVybiBfcGFydGl0aW9uU2VsZWN0KHgsIGssIGRlc2MpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb21wYXJlIHN0cmluZyBtdXN0IGJlIFwiYXNjXCIgb3IgXCJkZXNjXCInKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyLCBmdW5jdGlvbic6IF9wYXJ0aXRpb25TZWxlY3RcbiAgfSk7XG5cbiAgZnVuY3Rpb24gX3BhcnRpdGlvblNlbGVjdCh4LCBrLCBjb21wYXJlKSB7XG4gICAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKGspIHx8IGsgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2sgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyJyk7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKHgpKSB7XG4gICAgICB2YXIgc2l6ZSA9IHguc2l6ZSgpO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignT25seSBvbmUgZGltZW5zaW9uYWwgbWF0cmljZXMgc3VwcG9ydGVkJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBxdWlja1NlbGVjdCh4LnZhbHVlT2YoKSwgaywgY29tcGFyZSk7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICAgIHJldHVybiBxdWlja1NlbGVjdCh4LCBrLCBjb21wYXJlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFF1aWNrc2VsZWN0IGFsZ29yaXRobS5cbiAgICogQ29kZSBhZGFwdGVkIGZyb206XG4gICAqIGh0dHBzOi8vYmxvZy50ZWFtbGVhZG5ldC5jb20vMjAxMi8wNy9xdWljay1zZWxlY3QtYWxnb3JpdGhtLWZpbmQta3RoLWVsZW1lbnQuaHRtbFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGtcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY29tcGFyZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHF1aWNrU2VsZWN0KGFyciwgaywgY29tcGFyZSkge1xuICAgIGlmIChrID49IGFyci5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignayBvdXQgb2YgYm91bmRzJyk7XG4gICAgfSAvLyBjaGVjayBmb3IgTmFOIHZhbHVlcyBzaW5jZSB0aGVzZSBjYW4gY2F1c2UgYW4gaW5maW5pdGUgd2hpbGUgbG9vcFxuXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGlzTnVtZXJpYyhhcnJbaV0pICYmIGlzTmFOKGFycltpXSkpIHtcbiAgICAgICAgcmV0dXJuIGFycltpXTsgLy8gcmV0dXJuIE5hTlxuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBmcm9tID0gMDtcbiAgICB2YXIgdG8gPSBhcnIubGVuZ3RoIC0gMTsgLy8gaWYgZnJvbSA9PSB0byB3ZSByZWFjaGVkIHRoZSBrdGggZWxlbWVudFxuXG4gICAgd2hpbGUgKGZyb20gPCB0bykge1xuICAgICAgdmFyIHIgPSBmcm9tO1xuICAgICAgdmFyIHcgPSB0bztcbiAgICAgIHZhciBwaXZvdCA9IGFycltNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAodG8gLSBmcm9tICsgMSkpICsgZnJvbV07IC8vIHN0b3AgaWYgdGhlIHJlYWRlciBhbmQgd3JpdGVyIG1lZXRzXG5cbiAgICAgIHdoaWxlIChyIDwgdykge1xuICAgICAgICAvLyBhcnJbcl0gPj0gcGl2b3RcbiAgICAgICAgaWYgKGNvbXBhcmUoYXJyW3JdLCBwaXZvdCkgPj0gMCkge1xuICAgICAgICAgIC8vIHB1dCB0aGUgbGFyZ2UgdmFsdWVzIGF0IHRoZSBlbmRcbiAgICAgICAgICB2YXIgdG1wID0gYXJyW3ddO1xuICAgICAgICAgIGFyclt3XSA9IGFycltyXTtcbiAgICAgICAgICBhcnJbcl0gPSB0bXA7XG4gICAgICAgICAgLS13O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHRoZSB2YWx1ZSBpcyBzbWFsbGVyIHRoYW4gdGhlIHBpdm90LCBza2lwXG4gICAgICAgICAgKytyO1xuICAgICAgICB9XG4gICAgICB9IC8vIGlmIHdlIHN0ZXBwZWQgdXAgKHIrKykgd2UgbmVlZCB0byBzdGVwIG9uZSBkb3duIChhcnJbcl0gPiBwaXZvdClcblxuXG4gICAgICBpZiAoY29tcGFyZShhcnJbcl0sIHBpdm90KSA+IDApIHtcbiAgICAgICAgLS1yO1xuICAgICAgfSAvLyB0aGUgciBwb2ludGVyIGlzIG9uIHRoZSBlbmQgb2YgdGhlIGZpcnN0IGsgZWxlbWVudHNcblxuXG4gICAgICBpZiAoayA8PSByKSB7XG4gICAgICAgIHRvID0gcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZyb20gPSByICsgMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYXJyW2tdO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlUGFydGl0aW9uU2VsZWN0ID0gY3JlYXRlUGFydGl0aW9uU2VsZWN0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSYW5nZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbm9vcCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9ub29wXCIpO1xuXG52YXIgbmFtZSA9ICdyYW5nZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnP21hdHJpeCcsICc/YmlnbnVtYmVyJywgJ3NtYWxsZXInLCAnc21hbGxlckVxJywgJ2xhcmdlcicsICdsYXJnZXJFcSddO1xudmFyIGNyZWF0ZVJhbmdlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBiaWdudW1iZXIgPSBfcmVmLmJpZ251bWJlcixcbiAgICAgIHNtYWxsZXIgPSBfcmVmLnNtYWxsZXIsXG4gICAgICBzbWFsbGVyRXEgPSBfcmVmLnNtYWxsZXJFcSxcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyLFxuICAgICAgbGFyZ2VyRXEgPSBfcmVmLmxhcmdlckVxO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gYXJyYXkgZnJvbSBhIHJhbmdlLlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgcmFuZ2UgZW5kIGlzIGV4Y2x1ZGVkLiBUaGlzIGNhbiBiZSBjdXN0b21pemVkIGJ5IHByb3ZpZGluZ1xuICAgKiBhbiBleHRyYSBwYXJhbWV0ZXIgYGluY2x1ZGVFbmRgLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLnJhbmdlKHN0ciBbLCBpbmNsdWRlRW5kXSkgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSByYW5nZSBmcm9tIGEgc3RyaW5nLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2hlcmUgdGhlIHN0cmluZyBjb250YWlucyB0aGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0YXJ0LCBvcHRpb25hbCBzdGVwLCBhbmQgZW5kLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VwYXJhdGVkIGJ5IGEgY29sb24uXG4gICAqICAgICBtYXRoLnJhbmdlKHN0YXJ0LCBlbmQgWywgaW5jbHVkZUVuZF0pICAgICAgICAvLyBDcmVhdGUgYSByYW5nZSB3aXRoIHN0YXJ0IGFuZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZW5kIGFuZCBhIHN0ZXAgc2l6ZSBvZiAxLlxuICAgKiAgICAgbWF0aC5yYW5nZShzdGFydCwgZW5kLCBzdGVwIFssIGluY2x1ZGVFbmRdKSAgLy8gQ3JlYXRlIGEgcmFuZ2Ugd2l0aCBzdGFydCwgc3RlcCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBlbmQuXG4gICAqXG4gICAqIFdoZXJlOlxuICAgKlxuICAgKiAtIGBzdHI6IHN0cmluZ2BcbiAgICogICBBIHN0cmluZyAnc3RhcnQ6ZW5kJyBvciAnc3RhcnQ6c3RlcDplbmQnXG4gICAqIC0gYHN0YXJ0OiB7bnVtYmVyIHwgQmlnTnVtYmVyfWBcbiAgICogICBTdGFydCBvZiB0aGUgcmFuZ2VcbiAgICogLSBgZW5kOiBudW1iZXIgfCBCaWdOdW1iZXJgXG4gICAqICAgRW5kIG9mIHRoZSByYW5nZSwgZXhjbHVkZWQgYnkgZGVmYXVsdCwgaW5jbHVkZWQgd2hlbiBwYXJhbWV0ZXIgaW5jbHVkZUVuZD10cnVlXG4gICAqIC0gYHN0ZXA6IG51bWJlciB8IEJpZ051bWJlcmBcbiAgICogICBTdGVwIHNpemUuIERlZmF1bHQgdmFsdWUgaXMgMS5cbiAgICogLSBgaW5jbHVkZUVuZDogYm9vbGVhbmBcbiAgICogICBPcHRpb24gdG8gc3BlY2lmeSB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlIGVuZCBvciBub3QuIEZhbHNlIGJ5IGRlZmF1bHQuXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5yYW5nZSgyLCA2KSAgICAgICAgLy8gWzIsIDMsIDQsIDVdXG4gICAqICAgICBtYXRoLnJhbmdlKDIsIC0zLCAtMSkgICAvLyBbMiwgMSwgMCwgLTEsIC0yXVxuICAgKiAgICAgbWF0aC5yYW5nZSgnMjoxOjYnKSAgICAgLy8gWzIsIDMsIDQsIDVdXG4gICAqICAgICBtYXRoLnJhbmdlKDIsIDYsIHRydWUpICAvLyBbMiwgMywgNCwgNSwgNl1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBvbmVzLCB6ZXJvcywgc2l6ZSwgc3Vic2V0XG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gYXJncyAgIFBhcmFtZXRlcnMgZGVzY3JpYmluZyB0aGUgcmFuZ2VzIGBzdGFydGAsIGBlbmRgLCBhbmQgb3B0aW9uYWwgYHN0ZXBgLlxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gcmFuZ2VcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgLy8gVE9ETzogc2ltcGxpZnkgc2lnbmF0dXJlcyB3aGVuIHR5cGVkLWZ1bmN0aW9uIHN1cHBvcnRzIGRlZmF1bHQgdmFsdWVzIGFuZCBvcHRpb25hbCBhcmd1bWVudHNcbiAgICAvLyBUT0RPOiBhIG51bWJlciBvciBib29sZWFuIHNob3VsZCBub3QgYmUgY29udmVydGVkIHRvIHN0cmluZyBoZXJlXG4gICAgc3RyaW5nOiBfc3RyUmFuZ2UsXG4gICAgJ3N0cmluZywgYm9vbGVhbic6IF9zdHJSYW5nZSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoc3RhcnQsIGVuZCkge1xuICAgICAgcmV0dXJuIF9vdXQoX3JhbmdlRXgoc3RhcnQsIGVuZCwgMSkpO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXJOdW1iZXIoc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgICAgcmV0dXJuIF9vdXQoX3JhbmdlRXgoc3RhcnQsIGVuZCwgc3RlcCkpO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyLCBib29sZWFuJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyQm9vbGVhbihzdGFydCwgZW5kLCBpbmNsdWRlRW5kKSB7XG4gICAgICByZXR1cm4gaW5jbHVkZUVuZCA/IF9vdXQoX3JhbmdlSW5jKHN0YXJ0LCBlbmQsIDEpKSA6IF9vdXQoX3JhbmdlRXgoc3RhcnQsIGVuZCwgMSkpO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyLCBudW1iZXIsIGJvb2xlYW4nOiBmdW5jdGlvbiBudW1iZXJOdW1iZXJOdW1iZXJCb29sZWFuKHN0YXJ0LCBlbmQsIHN0ZXAsIGluY2x1ZGVFbmQpIHtcbiAgICAgIHJldHVybiBpbmNsdWRlRW5kID8gX291dChfcmFuZ2VJbmMoc3RhcnQsIGVuZCwgc3RlcCkpIDogX291dChfcmFuZ2VFeChzdGFydCwgZW5kLCBzdGVwKSk7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoc3RhcnQsIGVuZCkge1xuICAgICAgdmFyIEJpZ051bWJlciA9IHN0YXJ0LmNvbnN0cnVjdG9yO1xuICAgICAgcmV0dXJuIF9vdXQoX2JpZ1JhbmdlRXgoc3RhcnQsIGVuZCwgbmV3IEJpZ051bWJlcigxKSkpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXJCaWdOdW1iZXIoc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgICAgcmV0dXJuIF9vdXQoX2JpZ1JhbmdlRXgoc3RhcnQsIGVuZCwgc3RlcCkpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyLCBib29sZWFuJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyQm9vbGVhbihzdGFydCwgZW5kLCBpbmNsdWRlRW5kKSB7XG4gICAgICB2YXIgQmlnTnVtYmVyID0gc3RhcnQuY29uc3RydWN0b3I7XG4gICAgICByZXR1cm4gaW5jbHVkZUVuZCA/IF9vdXQoX2JpZ1JhbmdlSW5jKHN0YXJ0LCBlbmQsIG5ldyBCaWdOdW1iZXIoMSkpKSA6IF9vdXQoX2JpZ1JhbmdlRXgoc3RhcnQsIGVuZCwgbmV3IEJpZ051bWJlcigxKSkpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyLCBCaWdOdW1iZXIsIGJvb2xlYW4nOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXJCaWdOdW1iZXJCb29sZWFuKHN0YXJ0LCBlbmQsIHN0ZXAsIGluY2x1ZGVFbmQpIHtcbiAgICAgIHJldHVybiBpbmNsdWRlRW5kID8gX291dChfYmlnUmFuZ2VJbmMoc3RhcnQsIGVuZCwgc3RlcCkpIDogX291dChfYmlnUmFuZ2VFeChzdGFydCwgZW5kLCBzdGVwKSk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfb3V0KGFycikge1xuICAgIGlmIChjb25maWcubWF0cml4ID09PSAnTWF0cml4Jykge1xuICAgICAgcmV0dXJuIG1hdHJpeCA/IG1hdHJpeChhcnIpIDogKDAsIF9ub29wLm5vTWF0cml4KSgpO1xuICAgIH1cblxuICAgIHJldHVybiBhcnI7XG4gIH1cblxuICBmdW5jdGlvbiBfc3RyUmFuZ2Uoc3RyLCBpbmNsdWRlRW5kKSB7XG4gICAgdmFyIHIgPSBfcGFyc2Uoc3RyKTtcblxuICAgIGlmICghcikge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdTdHJpbmcgXCInICsgc3RyICsgJ1wiIGlzIG5vIHZhbGlkIHJhbmdlJyk7XG4gICAgfVxuXG4gICAgdmFyIGZuO1xuXG4gICAgaWYgKGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInKSB7XG4gICAgICBpZiAoYmlnbnVtYmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgKDAsIF9ub29wLm5vQmlnbnVtYmVyKSgpO1xuICAgICAgfVxuXG4gICAgICBmbiA9IGluY2x1ZGVFbmQgPyBfYmlnUmFuZ2VJbmMgOiBfYmlnUmFuZ2VFeDtcbiAgICAgIHJldHVybiBfb3V0KGZuKGJpZ251bWJlcihyLnN0YXJ0KSwgYmlnbnVtYmVyKHIuZW5kKSwgYmlnbnVtYmVyKHIuc3RlcCkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZm4gPSBpbmNsdWRlRW5kID8gX3JhbmdlSW5jIDogX3JhbmdlRXg7XG4gICAgICByZXR1cm4gX291dChmbihyLnN0YXJ0LCByLmVuZCwgci5zdGVwKSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSByYW5nZSB3aXRoIG51bWJlcnMuIEVuZCBpcyBleGNsdWRlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RlcFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IHJhbmdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3JhbmdlRXgoc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciB4ID0gc3RhcnQ7XG5cbiAgICBpZiAoc3RlcCA+IDApIHtcbiAgICAgIHdoaWxlIChzbWFsbGVyKHgsIGVuZCkpIHtcbiAgICAgICAgYXJyYXkucHVzaCh4KTtcbiAgICAgICAgeCArPSBzdGVwO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RlcCA8IDApIHtcbiAgICAgIHdoaWxlIChsYXJnZXIoeCwgZW5kKSkge1xuICAgICAgICBhcnJheS5wdXNoKHgpO1xuICAgICAgICB4ICs9IHN0ZXA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSByYW5nZSB3aXRoIG51bWJlcnMuIEVuZCBpcyBpbmNsdWRlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICAgKiBAcGFyYW0ge251bWJlcn0gc3RlcFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IHJhbmdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3JhbmdlSW5jKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgeCA9IHN0YXJ0O1xuXG4gICAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICB3aGlsZSAoc21hbGxlckVxKHgsIGVuZCkpIHtcbiAgICAgICAgYXJyYXkucHVzaCh4KTtcbiAgICAgICAgeCArPSBzdGVwO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RlcCA8IDApIHtcbiAgICAgIHdoaWxlIChsYXJnZXJFcSh4LCBlbmQpKSB7XG4gICAgICAgIGFycmF5LnB1c2goeCk7XG4gICAgICAgIHggKz0gc3RlcDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHJhbmdlIHdpdGggYmlnIG51bWJlcnMuIEVuZCBpcyBleGNsdWRlZFxuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gc3RhcnRcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IGVuZFxuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gc3RlcFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IHJhbmdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2JpZ1JhbmdlRXgoc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgIHZhciB6ZXJvID0gYmlnbnVtYmVyKDApO1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciB4ID0gc3RhcnQ7XG5cbiAgICBpZiAoc3RlcC5ndCh6ZXJvKSkge1xuICAgICAgd2hpbGUgKHNtYWxsZXIoeCwgZW5kKSkge1xuICAgICAgICBhcnJheS5wdXNoKHgpO1xuICAgICAgICB4ID0geC5wbHVzKHN0ZXApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc3RlcC5sdCh6ZXJvKSkge1xuICAgICAgd2hpbGUgKGxhcmdlcih4LCBlbmQpKSB7XG4gICAgICAgIGFycmF5LnB1c2goeCk7XG4gICAgICAgIHggPSB4LnBsdXMoc3RlcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSByYW5nZSB3aXRoIGJpZyBudW1iZXJzLiBFbmQgaXMgaW5jbHVkZWRcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IHN0YXJ0XG4gICAqIEBwYXJhbSB7QmlnTnVtYmVyfSBlbmRcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IHN0ZXBcbiAgICogQHJldHVybnMge0FycmF5fSByYW5nZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9iaWdSYW5nZUluYyhzdGFydCwgZW5kLCBzdGVwKSB7XG4gICAgdmFyIHplcm8gPSBiaWdudW1iZXIoMCk7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdmFyIHggPSBzdGFydDtcblxuICAgIGlmIChzdGVwLmd0KHplcm8pKSB7XG4gICAgICB3aGlsZSAoc21hbGxlckVxKHgsIGVuZCkpIHtcbiAgICAgICAgYXJyYXkucHVzaCh4KTtcbiAgICAgICAgeCA9IHgucGx1cyhzdGVwKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0ZXAubHQoemVybykpIHtcbiAgICAgIHdoaWxlIChsYXJnZXJFcSh4LCBlbmQpKSB7XG4gICAgICAgIGFycmF5LnB1c2goeCk7XG4gICAgICAgIHggPSB4LnBsdXMoc3RlcCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIHN0cmluZyBpbnRvIGEgcmFuZ2UsXG4gICAqIFRoZSBzdHJpbmcgY29udGFpbnMgdGhlIHN0YXJ0LCBvcHRpb25hbCBzdGVwLCBhbmQgZW5kLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbi5cbiAgICogSWYgdGhlIHN0cmluZyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgcmFuZ2UsIG51bGwgaXMgcmV0dXJuZWQuXG4gICAqIEZvciBleGFtcGxlIHN0cj0nMDoyOjExJy5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcmV0dXJuIHt7c3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIsIHN0ZXA6IG51bWJlcn0gfCBudWxsfSByYW5nZSBPYmplY3QgY29udGFpbmluZyBwcm9wZXJ0aWVzIHN0YXJ0LCBlbmQsIHN0ZXBcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfcGFyc2Uoc3RyKSB7XG4gICAgdmFyIGFyZ3MgPSBzdHIuc3BsaXQoJzonKTsgLy8gbnVtYmVyXG5cbiAgICB2YXIgbnVtcyA9IGFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgIC8vIHVzZSBOdW1iZXIgYW5kIG5vdCBwYXJzZUZsb2F0IGFzIE51bWJlciByZXR1cm5zIE5hTiBvbiBpbnZhbGlkIGdhcmJhZ2UgaW4gdGhlIHN0cmluZ1xuICAgICAgcmV0dXJuIE51bWJlcihhcmcpO1xuICAgIH0pO1xuICAgIHZhciBpbnZhbGlkID0gbnVtcy5zb21lKGZ1bmN0aW9uIChudW0pIHtcbiAgICAgIHJldHVybiBpc05hTihudW0pO1xuICAgIH0pO1xuXG4gICAgaWYgKGludmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN3aXRjaCAobnVtcy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzdGFydDogbnVtc1swXSxcbiAgICAgICAgICBlbmQ6IG51bXNbMV0sXG4gICAgICAgICAgc3RlcDogMVxuICAgICAgICB9O1xuXG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhcnQ6IG51bXNbMF0sXG4gICAgICAgICAgZW5kOiBudW1zWzJdLFxuICAgICAgICAgIHN0ZXA6IG51bXNbMV1cbiAgICAgICAgfTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlUmFuZ2UgPSBjcmVhdGVSYW5nZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmVzaGFwZSA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3Jlc2hhcGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnaXNJbnRlZ2VyJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZVJlc2hhcGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgaXNJbnRlZ2VyID0gX3JlZi5pc0ludGVnZXIsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcblxuICAvKipcbiAgICogUmVzaGFwZSBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5IHRvIGZpdCB0aGUgc3BlY2lmaWVkIGRpbWVuc2lvbnNcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5yZXNoYXBlKHgsIHNpemVzKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgucmVzaGFwZShbMSwgMiwgMywgNCwgNSwgNl0sIFsyLCAzXSlcbiAgICogICAgIC8vIHJldHVybnMgQXJyYXkgIFtbMSwgMiwgM10sIFs0LCA1LCA2XV1cbiAgICpcbiAgICogICAgIG1hdGgucmVzaGFwZShbWzEsIDJdLCBbMywgNF1dLCBbMSwgNF0pXG4gICAqICAgICAvLyByZXR1cm5zIEFycmF5ICBbWzEsIDIsIDMsIDRdXVxuICAgKlxuICAgKiAgICAgbWF0aC5yZXNoYXBlKFtbMSwgMl0sIFszLCA0XV0sIFs0XSlcbiAgICogICAgIC8vIHJldHVybnMgQXJyYXkgWzEsIDIsIDMsIDRdXG4gICAqXG4gICAqICAgICBjb25zdCB4ID0gbWF0aC5tYXRyaXgoWzEsIDIsIDMsIDQsIDUsIDYsIDcsIDhdKVxuICAgKiAgICAgbWF0aC5yZXNoYXBlKHgsIFsyLCAyLCAyXSlcbiAgICogICAgIC8vIHJldHVybnMgTWF0cml4IFtbWzEsIDJdLCBbMywgNF1dLCBbWzUsIDZdLCBbNywgOF1dXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHNpemUsIHNxdWVlemUsIHJlc2l6ZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IHwgKn0geCAgTWF0cml4IHRvIGJlIHJlc2hhcGVkXG4gICAqIEBwYXJhbSB7bnVtYmVyW119IHNpemVzICAgICAgICBPbmUgZGltZW5zaW9uYWwgYXJyYXkgd2l0aCBpbnRlZ3JhbCBzaXplcyBmb3JcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhY2ggZGltZW5zaW9uXG4gICAqXG4gICAqIEByZXR1cm4geyogfCBBcnJheSB8IE1hdHJpeH0gICBBIHJlc2hhcGVkIGNsb25lIG9mIG1hdHJpeCBgeGBcbiAgICpcbiAgICogQHRocm93cyB7VHlwZUVycm9yfSAgICAgICAgICAgIElmIGBzaXplc2AgZG9lcyBub3QgY29udGFpbiBzb2xlbHkgaW50ZWdlcnNcbiAgICogQHRocm93cyB7RGltZW5zaW9uRXJyb3J9ICAgICAgIElmIHRoZSBwcm9kdWN0IG9mIHRoZSBuZXcgZGltZW5zaW9uIHNpemVzIGRvZXNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBlcXVhbCB0aGF0IG9mIHRoZSBvbGQgb25lc1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHNpemVzKSB7XG4gICAgICBpZiAoeC5yZXNoYXBlKSB7XG4gICAgICAgIHJldHVybiB4LnJlc2hhcGUoc2l6ZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG1hdHJpeCgoMCwgX2FycmF5LnJlc2hhcGUpKHgudmFsdWVPZigpLCBzaXplcykpO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgc2l6ZXMpIHtcbiAgICAgIHNpemVzLmZvckVhY2goZnVuY3Rpb24gKHNpemUpIHtcbiAgICAgICAgaWYgKCFpc0ludGVnZXIoc2l6ZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHNpemUgZm9yIGRpbWVuc2lvbjogJyArIHNpemUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiAoMCwgX2FycmF5LnJlc2hhcGUpKHgsIHNpemVzKTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZVJlc2hhcGUgPSBjcmVhdGVSZXNoYXBlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZXNpemUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBfQXJndW1lbnRzRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vZXJyb3IvQXJndW1lbnRzRXJyb3JcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdyZXNpemUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZVJlc2l6ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4O1xuXG4gIC8qKlxuICAgKiBSZXNpemUgYSBtYXRyaXhcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5yZXNpemUoeCwgc2l6ZSlcbiAgICogICAgIG1hdGgucmVzaXplKHgsIHNpemUsIGRlZmF1bHRWYWx1ZSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnJlc2l6ZShbMSwgMiwgMywgNCwgNV0sIFszXSkgLy8gcmV0dXJucyBBcnJheSAgWzEsIDIsIDNdXG4gICAqICAgICBtYXRoLnJlc2l6ZShbMSwgMiwgM10sIFs1XSwgMCkgICAgLy8gcmV0dXJucyBBcnJheSAgWzEsIDIsIDMsIDAsIDBdXG4gICAqICAgICBtYXRoLnJlc2l6ZSgyLCBbMiwgM10sIDApICAgICAgICAgLy8gcmV0dXJucyBNYXRyaXggW1syLCAwLCAwXSwgWzAsIDAsIDBdXVxuICAgKiAgICAgbWF0aC5yZXNpemUoXCJoZWxsb1wiLCBbOF0sIFwiIVwiKSAgICAvLyByZXR1cm5zIHN0cmluZyAnaGVsbG8hISEnXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgc2l6ZSwgc3F1ZWV6ZSwgc3Vic2V0LCByZXNoYXBlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXggfCAqfSB4ICAgICAgICAgICAgIE1hdHJpeCB0byBiZSByZXNpemVkXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IHNpemUgICAgICAgICAgICAgIE9uZSBkaW1lbnNpb25hbCBhcnJheSB3aXRoIG51bWJlcnNcbiAgICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IFtkZWZhdWx0VmFsdWU9MF0gWmVybyBieSBkZWZhdWx0LCBleGNlcHQgaW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBvZiBhIHN0cmluZywgaW4gdGhhdCBjYXNlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZSA9ICcgJ1xuICAgKiBAcmV0dXJuIHsqIHwgQXJyYXkgfCBNYXRyaXh9IEEgcmVzaXplZCBjbG9uZSBvZiBtYXRyaXggYHhgXG4gICAqL1xuICAvLyBUT0RPOiByZXdvcmsgcmVzaXplIHRvIGEgdHlwZWQtZnVuY3Rpb25cbiAgcmV0dXJuIGZ1bmN0aW9uIHJlc2l6ZSh4LCBzaXplLCBkZWZhdWx0VmFsdWUpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPT0gMiAmJiBhcmd1bWVudHMubGVuZ3RoICE9PSAzKSB7XG4gICAgICB0aHJvdyBuZXcgX0FyZ3VtZW50c0Vycm9yLkFyZ3VtZW50c0Vycm9yKCdyZXNpemUnLCBhcmd1bWVudHMubGVuZ3RoLCAyLCAzKTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF9pcy5pc01hdHJpeCkoc2l6ZSkpIHtcbiAgICAgIHNpemUgPSBzaXplLnZhbHVlT2YoKTsgLy8gZ2V0IEFycmF5XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHNpemVbMF0pKSB7XG4gICAgICAvLyBjb252ZXJ0IGJpZ251bWJlcnMgdG8gbnVtYmVyc1xuICAgICAgc2l6ZSA9IHNpemUubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gISgwLCBfaXMuaXNCaWdOdW1iZXIpKHZhbHVlKSA/IHZhbHVlIDogdmFsdWUudG9OdW1iZXIoKTtcbiAgICAgIH0pO1xuICAgIH0gLy8gY2hlY2sgeCBpcyBhIE1hdHJpeFxuXG5cbiAgICBpZiAoKDAsIF9pcy5pc01hdHJpeCkoeCkpIHtcbiAgICAgIC8vIHVzZSBvcHRpbWl6ZWQgbWF0cml4IGltcGxlbWVudGF0aW9uLCByZXR1cm4gY29weVxuICAgICAgcmV0dXJuIHgucmVzaXplKHNpemUsIGRlZmF1bHRWYWx1ZSwgdHJ1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB4ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gcmVzaXplIHN0cmluZ1xuICAgICAgcmV0dXJuIF9yZXNpemVTdHJpbmcoeCwgc2l6ZSwgZGVmYXVsdFZhbHVlKTtcbiAgICB9IC8vIGNoZWNrIHJlc3VsdCBzaG91bGQgYmUgYSBtYXRyaXhcblxuXG4gICAgdmFyIGFzTWF0cml4ID0gQXJyYXkuaXNBcnJheSh4KSA/IGZhbHNlIDogY29uZmlnLm1hdHJpeCAhPT0gJ0FycmF5JztcblxuICAgIGlmIChzaXplLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gb3V0cHV0IGEgc2NhbGFyXG4gICAgICB3aGlsZSAoQXJyYXkuaXNBcnJheSh4KSkge1xuICAgICAgICB4ID0geFswXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICgwLCBfb2JqZWN0LmNsb25lKSh4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gb3V0cHV0IGFuIGFycmF5L21hdHJpeFxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgICAgIHggPSBbeF07XG4gICAgICB9XG5cbiAgICAgIHggPSAoMCwgX29iamVjdC5jbG9uZSkoeCk7XG4gICAgICB2YXIgcmVzID0gKDAsIF9hcnJheS5yZXNpemUpKHgsIHNpemUsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICByZXR1cm4gYXNNYXRyaXggPyBtYXRyaXgocmVzKSA6IHJlcztcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBSZXNpemUgYSBzdHJpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge251bWJlcltdfSBzaXplXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVmYXVsdENoYXI9JyAnXVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfcmVzaXplU3RyaW5nKHN0ciwgc2l6ZSwgZGVmYXVsdENoYXIpIHtcbiAgICBpZiAoZGVmYXVsdENoYXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0Q2hhciAhPT0gJ3N0cmluZycgfHwgZGVmYXVsdENoYXIubGVuZ3RoICE9PSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NpbmdsZSBjaGFyYWN0ZXIgZXhwZWN0ZWQgYXMgZGVmYXVsdFZhbHVlJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZmF1bHRDaGFyID0gJyAnO1xuICAgIH1cblxuICAgIGlmIChzaXplLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihzaXplLmxlbmd0aCwgMSk7XG4gICAgfVxuXG4gICAgdmFyIGxlbiA9IHNpemVbMF07XG5cbiAgICBpZiAodHlwZW9mIGxlbiAhPT0gJ251bWJlcicgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikobGVuKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBzaXplLCBtdXN0IGNvbnRhaW4gcG9zaXRpdmUgaW50ZWdlcnMgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgIH1cblxuICAgIGlmIChzdHIubGVuZ3RoID4gbGVuKSB7XG4gICAgICByZXR1cm4gc3RyLnN1YnN0cmluZygwLCBsZW4pO1xuICAgIH0gZWxzZSBpZiAoc3RyLmxlbmd0aCA8IGxlbikge1xuICAgICAgdmFyIHJlcyA9IHN0cjtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gbGVuIC0gc3RyLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgcmVzICs9IGRlZmF1bHRDaGFyO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gc3RyO1xuICAgIH1cbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVJlc2l6ZSA9IGNyZWF0ZVJlc2l6ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUm93ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgbmFtZSA9ICdyb3cnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnSW5kZXgnLCAnbWF0cml4JywgJ3JhbmdlJ107XG52YXIgY3JlYXRlUm93ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgcmFuZ2UgPSBfcmVmLnJhbmdlO1xuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSByb3cgZnJvbSBhIE1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5yb3codmFsdWUsIGluZGV4KVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKlxuICAgKiAgICAgLy8gZ2V0IGEgcm93XG4gICAqICAgICBjb25zdCBkID0gW1sxLCAyXSwgWzMsIDRdXVxuICAgKiAgICAgbWF0aC5yb3coZCwgMSkgLy8gcmV0dXJucyBbWzMsIDRdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIGNvbHVtblxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IH0gdmFsdWUgICBBbiBhcnJheSBvciBtYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvdyAgICAgICAgICAgICAgVGhlIGluZGV4IG9mIHRoZSByb3dcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgICAgICAgVGhlIHJldHJpZXZlZCByb3dcbiAgICovXG4gIHZhciByb3cgPSB0eXBlZChuYW1lLCB7XG4gICAgJ01hdHJpeCwgbnVtYmVyJzogX3JvdyxcbiAgICAnQXJyYXksIG51bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyKHZhbHVlLCByb3cpIHtcbiAgICAgIHJldHVybiBfcm93KG1hdHJpeCgoMCwgX29iamVjdC5jbG9uZSkodmFsdWUpKSwgcm93KS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJvdztcbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgcm93IG9mIGEgbWF0cml4XG4gICAqIEBwYXJhbSB7TWF0cml4IH0gdmFsdWUgIEEgbWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgICAgIFRoZSBpbmRleCBvZiB0aGUgcm93XG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgIFRoZSByZXRyaWV2ZWQgcm93XG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9yb3codmFsdWUsIHJvdykge1xuICAgIC8vIGNoZWNrIGRpbWVuc2lvbnNcbiAgICBpZiAodmFsdWUuc2l6ZSgpLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IHR3byBkaW1lbnNpb25hbCBtYXRyaXggaXMgc3VwcG9ydGVkJyk7XG4gICAgfVxuXG4gICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShyb3csIHZhbHVlLnNpemUoKVswXSk7XG4gICAgdmFyIGNvbHVtblJhbmdlID0gcmFuZ2UoMCwgdmFsdWUuc2l6ZSgpWzFdKTtcbiAgICB2YXIgaW5kZXggPSBuZXcgSW5kZXgocm93LCBjb2x1bW5SYW5nZSk7XG4gICAgcmV0dXJuIHZhbHVlLnN1YnNldChpbmRleCk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVSb3cgPSBjcmVhdGVSb3c7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNpemUgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX25vb3AgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbm9vcFwiKTtcblxudmFyIG5hbWUgPSAnc2l6ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnP21hdHJpeCddO1xudmFyIGNyZWF0ZVNpemUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBzaXplIG9mIGEgbWF0cml4IG9yIHNjYWxhci5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5zaXplKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5zaXplKDIuMykgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIFtdXG4gICAqICAgICBtYXRoLnNpemUoJ2hlbGxvIHdvcmxkJykgICAgICAgIC8vIHJldHVybnMgWzExXVxuICAgKlxuICAgKiAgICAgY29uc3QgQSA9IFtbMSwgMiwgM10sIFs0LCA1LCA2XV1cbiAgICogICAgIG1hdGguc2l6ZShBKSAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbMiwgM11cbiAgICogICAgIG1hdGguc2l6ZShtYXRoLnJhbmdlKDEsNikpICAgICAgLy8gcmV0dXJucyBbNV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICByZXNpemUsIHNxdWVlemUsIHN1YnNldFxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW4gfCBudW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB4ICBBIG1hdHJpeFxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gQSB2ZWN0b3Igd2l0aCBzaXplIG9mIGB4YC5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuIHguY3JlYXRlKHguc2l6ZSgpKTtcbiAgICB9LFxuICAgIEFycmF5OiBfYXJyYXkuYXJyYXlTaXplLFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHtcbiAgICAgIHJldHVybiBjb25maWcubWF0cml4ID09PSAnQXJyYXknID8gW3gubGVuZ3RoXSA6IG1hdHJpeChbeC5sZW5ndGhdKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBDb21wbGV4IHwgQmlnTnVtYmVyIHwgVW5pdCB8IGJvb2xlYW4gfCBudWxsJzogZnVuY3Rpb24gbnVtYmVyQ29tcGxleEJpZ051bWJlclVuaXRCb29sZWFuTnVsbCh4KSB7XG4gICAgICAvLyBzY2FsYXJcbiAgICAgIHJldHVybiBjb25maWcubWF0cml4ID09PSAnQXJyYXknID8gW10gOiBtYXRyaXggPyBtYXRyaXgoW10pIDogKDAsIF9ub29wLm5vTWF0cml4KSgpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2l6ZSA9IGNyZWF0ZVNpemU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNvcnQgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzb3J0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdjb21wYXJlJywgJ2NvbXBhcmVOYXR1cmFsJ107XG52YXIgY3JlYXRlU29ydCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGNvbXBhcmUgPSBfcmVmLmNvbXBhcmUsXG4gICAgICBjb21wYXJlTmF0dXJhbCA9IF9yZWYuY29tcGFyZU5hdHVyYWw7XG4gIHZhciBjb21wYXJlQXNjID0gY29tcGFyZTtcblxuICB2YXIgY29tcGFyZURlc2MgPSBmdW5jdGlvbiBjb21wYXJlRGVzYyhhLCBiKSB7XG4gICAgcmV0dXJuIC1jb21wYXJlKGEsIGIpO1xuICB9O1xuICAvKipcbiAgICogU29ydCB0aGUgaXRlbXMgaW4gYSBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zb3J0KHgpXG4gICAqICAgIG1hdGguc29ydCh4LCBjb21wYXJlKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zb3J0KFs1LCAxMCwgMV0pIC8vIHJldHVybnMgWzEsIDUsIDEwXVxuICAgKiAgICBtYXRoLnNvcnQoWydDJywgJ0InLCAnQScsICdEJ10sIG1hdGguY29tcGFyZU5hdHVyYWwpXG4gICAqICAgIC8vIHJldHVybnMgWydBJywgJ0InLCAnQycsICdEJ11cbiAgICpcbiAgICogICAgZnVuY3Rpb24gc29ydEJ5TGVuZ3RoIChhLCBiKSB7XG4gICAqICAgICAgcmV0dXJuIGEubGVuZ3RoIC0gYi5sZW5ndGhcbiAgICogICAgfVxuICAgKiAgICBtYXRoLnNvcnQoWydMYW5nZG9uJywgJ1RvbScsICdTYXJhJ10sIHNvcnRCeUxlbmd0aClcbiAgICogICAgLy8gcmV0dXJucyBbJ1RvbScsICdTYXJhJywgJ0xhbmdkb24nXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZmlsdGVyLCBmb3JFYWNoLCBtYXAsIGNvbXBhcmUsIGNvbXBhcmVOYXR1cmFsXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IHggICAgQSBvbmUgZGltZW5zaW9uYWwgbWF0cml4IG9yIGFycmF5IHRvIHNvcnRcbiAgICogQHBhcmFtIHtGdW5jdGlvbiB8ICdhc2MnIHwgJ2Rlc2MnIHwgJ25hdHVyYWwnfSBbY29tcGFyZT0nYXNjJ11cbiAgICogICAgICAgIEFuIG9wdGlvbmFsIF9jb21wYXJhdG9yIGZ1bmN0aW9uIG9yIG5hbWUuIFRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgYXNcbiAgICogICAgICAgIGBjb21wYXJlKGEsIGIpYCwgYW5kIG11c3QgcmV0dXJuIDEgd2hlbiBhID4gYiwgLTEgd2hlbiBhIDwgYixcbiAgICogICAgICAgIGFuZCAwIHdoZW4gYSA9PSBiLlxuICAgKiBAcmV0dXJuIHtNYXRyaXggfCBBcnJheX0gUmV0dXJucyB0aGUgc29ydGVkIG1hdHJpeC5cbiAgICovXG5cblxuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICBfYXJyYXlJc1ZlY3Rvcih4KTtcblxuICAgICAgcmV0dXJuIHguc29ydChjb21wYXJlQXNjKTtcbiAgICB9LFxuICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHgpIHtcbiAgICAgIF9tYXRyaXhJc1ZlY3Rvcih4KTtcblxuICAgICAgcmV0dXJuIG1hdHJpeCh4LnRvQXJyYXkoKS5zb3J0KGNvbXBhcmVBc2MpLCB4LnN0b3JhZ2UoKSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGZ1bmN0aW9uJzogZnVuY3Rpb24gQXJyYXlGdW5jdGlvbih4LCBfY29tcGFyYXRvcikge1xuICAgICAgX2FycmF5SXNWZWN0b3IoeCk7XG5cbiAgICAgIHJldHVybiB4LnNvcnQoX2NvbXBhcmF0b3IpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCBfY29tcGFyYXRvcikge1xuICAgICAgX21hdHJpeElzVmVjdG9yKHgpO1xuXG4gICAgICByZXR1cm4gbWF0cml4KHgudG9BcnJheSgpLnNvcnQoX2NvbXBhcmF0b3IpLCB4LnN0b3JhZ2UoKSk7XG4gICAgfSxcbiAgICAnQXJyYXksIHN0cmluZyc6IGZ1bmN0aW9uIEFycmF5U3RyaW5nKHgsIG9yZGVyKSB7XG4gICAgICBfYXJyYXlJc1ZlY3Rvcih4KTtcblxuICAgICAgcmV0dXJuIHguc29ydChfY29tcGFyYXRvcihvcmRlcikpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgc3RyaW5nJzogZnVuY3Rpb24gTWF0cml4U3RyaW5nKHgsIG9yZGVyKSB7XG4gICAgICBfbWF0cml4SXNWZWN0b3IoeCk7XG5cbiAgICAgIHJldHVybiBtYXRyaXgoeC50b0FycmF5KCkuc29ydChfY29tcGFyYXRvcihvcmRlcikpLCB4LnN0b3JhZ2UoKSk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIEdldCB0aGUgY29tcGFyYXRvciBmb3IgZ2l2ZW4gb3JkZXIgKCdhc2MnLCAnZGVzYycsICduYXR1cmFsJylcbiAgICogQHBhcmFtIHsnYXNjJyB8ICdkZXNjJyB8ICduYXR1cmFsJ30gb3JkZXJcbiAgICogQHJldHVybiB7RnVuY3Rpb259IFJldHVybnMgYSBfY29tcGFyYXRvciBmdW5jdGlvblxuICAgKi9cblxuICBmdW5jdGlvbiBfY29tcGFyYXRvcihvcmRlcikge1xuICAgIGlmIChvcmRlciA9PT0gJ2FzYycpIHtcbiAgICAgIHJldHVybiBjb21wYXJlQXNjO1xuICAgIH0gZWxzZSBpZiAob3JkZXIgPT09ICdkZXNjJykge1xuICAgICAgcmV0dXJuIGNvbXBhcmVEZXNjO1xuICAgIH0gZWxzZSBpZiAob3JkZXIgPT09ICduYXR1cmFsJykge1xuICAgICAgcmV0dXJuIGNvbXBhcmVOYXR1cmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZyBcImFzY1wiLCBcImRlc2NcIiwgb3IgXCJuYXR1cmFsXCIgZXhwZWN0ZWQnKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHdoZXRoZXIgYW4gYXJyYXkgaXMgb25lIGRpbWVuc2lvbmFsXG4gICAqIFRocm93cyBhbiBlcnJvciB3aGVuIHRoaXMgaXMgbm90IHRoZSBjYXNlXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2FycmF5SXNWZWN0b3IoYXJyYXkpIHtcbiAgICBpZiAoKDAsIF9hcnJheS5hcnJheVNpemUpKGFycmF5KS5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25lIGRpbWVuc2lvbmFsIGFycmF5IGV4cGVjdGVkJyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB3aGV0aGVyIGEgbWF0cml4IGlzIG9uZSBkaW1lbnNpb25hbFxuICAgKiBUaHJvd3MgYW4gZXJyb3Igd2hlbiB0aGlzIGlzIG5vdCB0aGUgY2FzZVxuICAgKiBAcGFyYW0ge01hdHJpeH0gbWF0cml4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX21hdHJpeElzVmVjdG9yKG1hdHJpeCkge1xuICAgIGlmIChtYXRyaXguc2l6ZSgpLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmUgZGltZW5zaW9uYWwgbWF0cml4IGV4cGVjdGVkJyk7XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlU29ydCA9IGNyZWF0ZVNvcnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNxcnRtID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzcXJ0bSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhYnMnLCAnYWRkJywgJ211bHRpcGx5JywgJ3NxcnQnLCAnc3VidHJhY3QnLCAnaW52JywgJ3NpemUnLCAnbWF4JywgJ2lkZW50aXR5J107XG52YXIgY3JlYXRlU3FydG0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWJzID0gX3JlZi5hYnMsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIHNxcnQgPSBfcmVmLnNxcnQsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBpbnYgPSBfcmVmLmludixcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBtYXggPSBfcmVmLm1heCxcbiAgICAgIGlkZW50aXR5ID0gX3JlZi5pZGVudGl0eTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBwcmluY2lwYWwgc3F1YXJlIHJvb3Qgb2YgYSBzcXVhcmUgbWF0cml4LlxuICAgKiBUaGUgcHJpbmNpcGFsIHNxdWFyZSByb290IG1hdHJpeCBgWGAgb2YgYW5vdGhlciBtYXRyaXggYEFgIGlzIHN1Y2ggdGhhdCBgWCAqIFggPSBBYC5cbiAgICpcbiAgICogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3F1YXJlX3Jvb3Rfb2ZfYV9tYXRyaXhcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgWCA9IG1hdGguc3FydG0oQSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnNxcnRtKFtbMSwgMl0sIFszLCA0XV0pIC8vIHJldHVybnMgW1stMiwgMV0sIFsxLjUsIC0wLjVdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHNxcnQsIHBvd1xuICAgKlxuICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0gQSAgIFRoZSBzcXVhcmUgbWF0cml4IGBBYFxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgIFRoZSBwcmluY2lwYWwgc3F1YXJlIHJvb3Qgb2YgbWF0cml4IGBBYFxuICAgKi9cbiAgdmFyIHNxcnRtID0gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KEEpIHtcbiAgICAgIHZhciBzaXplID0gKDAsIF9pcy5pc01hdHJpeCkoQSkgPyBBLnNpemUoKSA6ICgwLCBfYXJyYXkuYXJyYXlTaXplKShBKTtcblxuICAgICAgc3dpdGNoIChzaXplLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgLy8gU2luZ2xlIGVsZW1lbnQgQXJyYXkgfCBNYXRyaXhcbiAgICAgICAgICBpZiAoc2l6ZVswXSA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHNxcnQoQSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gVHdvLWRpbWVuc2lvbmFsIEFycmF5IHwgTWF0cml4XG4gICAgICAgICAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgICAgICAgICB2YXIgY29scyA9IHNpemVbMV07XG5cbiAgICAgICAgICAgIGlmIChyb3dzID09PSBjb2xzKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfZGVubWFuQmVhdmVycyhBKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICB2YXIgX21heEl0ZXJhdGlvbnMgPSAxZTM7XG4gIHZhciBfdG9sZXJhbmNlID0gMWUtNjtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgcHJpbmNpcGFsIHNxdWFyZSByb290IG1hdHJpeCB1c2luZyB0aGUgRGVubWFu4oCTQmVhdmVycyBpdGVyYXRpdmUgbWV0aG9kXG4gICAqXG4gICAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NxdWFyZV9yb290X29mX2FfbWF0cml4I0J5X0Rlbm1hbuKAk0JlYXZlcnNfaXRlcmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSBBICAgVGhlIHNxdWFyZSBtYXRyaXggYEFgXG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgICAgVGhlIHByaW5jaXBhbCBzcXVhcmUgcm9vdCBvZiBtYXRyaXggYEFgXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9kZW5tYW5CZWF2ZXJzKEEpIHtcbiAgICB2YXIgZXJyb3I7XG4gICAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICAgIHZhciBZID0gQTtcbiAgICB2YXIgWiA9IGlkZW50aXR5KHNpemUoQSkpO1xuXG4gICAgZG8ge1xuICAgICAgdmFyIFlrID0gWTtcbiAgICAgIFkgPSBtdWx0aXBseSgwLjUsIGFkZChZaywgaW52KFopKSk7XG4gICAgICBaID0gbXVsdGlwbHkoMC41LCBhZGQoWiwgaW52KFlrKSkpO1xuICAgICAgZXJyb3IgPSBtYXgoYWJzKHN1YnRyYWN0KFksIFlrKSkpO1xuXG4gICAgICBpZiAoZXJyb3IgPiBfdG9sZXJhbmNlICYmICsraXRlcmF0aW9ucyA+IF9tYXhJdGVyYXRpb25zKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY29tcHV0aW5nIHNxdWFyZSByb290IG9mIG1hdHJpeDogaXRlcmF0aXZlIG1ldGhvZCBjb3VsZCBub3QgY29udmVyZ2UnKTtcbiAgICAgIH1cbiAgICB9IHdoaWxlIChlcnJvciA+IF90b2xlcmFuY2UpO1xuXG4gICAgcmV0dXJuIFk7XG4gIH1cblxuICByZXR1cm4gc3FydG07XG59KTtcbmV4cG9ydHMuY3JlYXRlU3FydG0gPSBjcmVhdGVTcXJ0bTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3F1ZWV6ZSA9IHZvaWQgMDtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc3F1ZWV6ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnXTtcbnZhciBjcmVhdGVTcXVlZXplID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4O1xuXG4gIC8qKlxuICAgKiBTcXVlZXplIGEgbWF0cml4LCByZW1vdmUgaW5uZXIgYW5kIG91dGVyIHNpbmdsZXRvbiBkaW1lbnNpb25zIGZyb20gYSBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguc3F1ZWV6ZSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGguc3F1ZWV6ZShbM10pICAgICAgICAgICAvLyByZXR1cm5zIDNcbiAgICogICAgIG1hdGguc3F1ZWV6ZShbWzNdXSkgICAgICAgICAvLyByZXR1cm5zIDNcbiAgICpcbiAgICogICAgIGNvbnN0IEEgPSBtYXRoLnplcm9zKDMsIDEpICAgIC8vIHJldHVybnMgW1swXSwgWzBdLCBbMF1dIChzaXplIDN4MSlcbiAgICogICAgIG1hdGguc3F1ZWV6ZShBKSAgICAgICAgICAgICAvLyByZXR1cm5zIFswLCAwLCAwXSAoc2l6ZSAzKVxuICAgKlxuICAgKiAgICAgY29uc3QgQiA9IG1hdGguemVyb3MoMSwgMykgICAgLy8gcmV0dXJucyBbWzAsIDAsIDBdXSAoc2l6ZSAxeDMpXG4gICAqICAgICBtYXRoLnNxdWVlemUoQikgICAgICAgICAgICAgLy8gcmV0dXJucyBbMCwgMCwgMF0gKHNpemUgMylcbiAgICpcbiAgICogICAgIC8vIG9ubHkgaW5uZXIgYW5kIG91dGVyIGRpbWVuc2lvbnMgYXJlIHJlbW92ZWRcbiAgICogICAgIGNvbnN0IEMgPSBtYXRoLnplcm9zKDIsIDEsIDMpIC8vIHJldHVybnMgW1tbMCwgMCwgMF1dLCBbWzAsIDAsIDBdXV0gKHNpemUgMngxeDMpXG4gICAqICAgICBtYXRoLnNxdWVlemUoQykgICAgICAgICAgICAgLy8gcmV0dXJucyBbW1swLCAwLCAwXV0sIFtbMCwgMCwgMF1dXSAoc2l6ZSAyeDF4MylcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBzdWJzZXRcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0geCAgICAgIE1hdHJpeCB0byBiZSBzcXVlZXplZFxuICAgKiBAcmV0dXJuIHtNYXRyaXggfCBBcnJheX0gU3F1ZWV6ZWQgbWF0cml4XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9hcnJheS5zcXVlZXplKSgoMCwgX29iamVjdC5jbG9uZSkoeCkpO1xuICAgIH0sXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkge1xuICAgICAgdmFyIHJlcyA9ICgwLCBfYXJyYXkuc3F1ZWV6ZSkoeC50b0FycmF5KCkpOyAvLyBGSVhNRTogcmV0dXJuIHRoZSBzYW1lIHR5cGUgb2YgbWF0cml4IGFzIHRoZSBpbnB1dFxuXG4gICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShyZXMpID8gbWF0cml4KHJlcykgOiByZXM7XG4gICAgfSxcbiAgICBhbnk6IGZ1bmN0aW9uIGFueSh4KSB7XG4gICAgICAvLyBzY2FsYXJcbiAgICAgIHJldHVybiAoMCwgX29iamVjdC5jbG9uZSkoeCk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcXVlZXplID0gY3JlYXRlU3F1ZWV6ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3Vic2V0ID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc3Vic2V0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZVN1YnNldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcblxuICAvKipcbiAgICogR2V0IG9yIHNldCBhIHN1YnNldCBvZiBhIG1hdHJpeCBvciBzdHJpbmcuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICogICAgIG1hdGguc3Vic2V0KHZhbHVlLCBpbmRleCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHJpZXZlIGEgc3Vic2V0XG4gICAqICAgICBtYXRoLnN1YnNldCh2YWx1ZSwgaW5kZXgsIHJlcGxhY2VtZW50IFssIGRlZmF1bHRWYWx1ZV0pICAvLyByZXBsYWNlIGEgc3Vic2V0XG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgLy8gZ2V0IGEgc3Vic2V0XG4gICAqICAgICBjb25zdCBkID0gW1sxLCAyXSwgWzMsIDRdXVxuICAgKiAgICAgbWF0aC5zdWJzZXQoZCwgbWF0aC5pbmRleCgxLCAwKSkgICAgICAgIC8vIHJldHVybnMgM1xuICAgKiAgICAgbWF0aC5zdWJzZXQoZCwgbWF0aC5pbmRleChbMCwgMV0sIDEpKSAgIC8vIHJldHVybnMgW1syXSwgWzRdXVxuICAgKlxuICAgKiAgICAgLy8gcmVwbGFjZSBhIHN1YnNldFxuICAgKiAgICAgY29uc3QgZSA9IFtdXG4gICAqICAgICBjb25zdCBmID0gbWF0aC5zdWJzZXQoZSwgbWF0aC5pbmRleCgwLCBbMCwgMl0pLCBbNSwgNl0pICAvLyBmID0gW1s1LCA2XV1cbiAgICogICAgIGNvbnN0IGcgPSBtYXRoLnN1YnNldChmLCBtYXRoLmluZGV4KDEsIDEpLCA3LCAwKSAgICAgICAgIC8vIGcgPSBbWzUsIDZdLCBbMCwgN11dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgc2l6ZSwgcmVzaXplLCBzcXVlZXplLCBpbmRleFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IHwgc3RyaW5nfSBtYXRyaXggIEFuIGFycmF5LCBtYXRyaXgsIG9yIHN0cmluZ1xuICAgKiBAcGFyYW0ge0luZGV4fSBpbmRleCAgICAgICAgICAgICAgICAgICAgIEFuIGluZGV4IGNvbnRhaW5pbmcgcmFuZ2VzIGZvciBlYWNoXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGltZW5zaW9uXG4gICAqIEBwYXJhbSB7Kn0gW3JlcGxhY2VtZW50XSAgICAgICAgICAgICAgICAgQW4gYXJyYXksIG1hdHJpeCwgb3Igc2NhbGFyLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHByb3ZpZGVkLCB0aGUgc3Vic2V0IGlzIHJlcGxhY2VkIHdpdGggcmVwbGFjZW1lbnQuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm90IHByb3ZpZGVkLCB0aGUgc3Vic2V0IGlzIHJldHVybmVkXG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZT11bmRlZmluZWRdICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWF0cml4IGlzIHJlc2l6ZWQuIElmIG5vdCBwcm92aWRlZCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRoLm1hdHJpeCBlbGVtZW50cyB3aWxsIGJlIGxlZnQgdW5kZWZpbmVkLlxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeCB8IHN0cmluZ30gRWl0aGVyIHRoZSByZXRyaWV2ZWQgc3Vic2V0IG9yIHRoZSB1cGRhdGVkIG1hdHJpeC5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgLy8gZ2V0IHN1YnNldFxuICAgICdBcnJheSwgSW5kZXgnOiBmdW5jdGlvbiBBcnJheUluZGV4KHZhbHVlLCBpbmRleCkge1xuICAgICAgdmFyIG0gPSBtYXRyaXgodmFsdWUpO1xuICAgICAgdmFyIHN1YnNldCA9IG0uc3Vic2V0KGluZGV4KTsgLy8gcmV0dXJucyBhIE1hdHJpeFxuXG4gICAgICByZXR1cm4gaW5kZXguaXNTY2FsYXIoKSA/IHN1YnNldCA6IHN1YnNldC52YWx1ZU9mKCk7IC8vIHJldHVybiBhbiBBcnJheSAobGlrZSB0aGUgaW5wdXQpXG4gICAgfSxcbiAgICAnTWF0cml4LCBJbmRleCc6IGZ1bmN0aW9uIE1hdHJpeEluZGV4KHZhbHVlLCBpbmRleCkge1xuICAgICAgcmV0dXJuIHZhbHVlLnN1YnNldChpbmRleCk7XG4gICAgfSxcbiAgICAnT2JqZWN0LCBJbmRleCc6IF9nZXRPYmplY3RQcm9wZXJ0eSxcbiAgICAnc3RyaW5nLCBJbmRleCc6IF9nZXRTdWJzdHJpbmcsXG4gICAgLy8gc2V0IHN1YnNldFxuICAgICdBcnJheSwgSW5kZXgsIGFueSc6IGZ1bmN0aW9uIEFycmF5SW5kZXhBbnkodmFsdWUsIGluZGV4LCByZXBsYWNlbWVudCkge1xuICAgICAgcmV0dXJuIG1hdHJpeCgoMCwgX29iamVjdC5jbG9uZSkodmFsdWUpKS5zdWJzZXQoaW5kZXgsIHJlcGxhY2VtZW50LCB1bmRlZmluZWQpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgSW5kZXgsIGFueSwgYW55JzogZnVuY3Rpb24gQXJyYXlJbmRleEFueUFueSh2YWx1ZSwgaW5kZXgsIHJlcGxhY2VtZW50LCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoKDAsIF9vYmplY3QuY2xvbmUpKHZhbHVlKSkuc3Vic2V0KGluZGV4LCByZXBsYWNlbWVudCwgZGVmYXVsdFZhbHVlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBJbmRleCwgYW55JzogZnVuY3Rpb24gTWF0cml4SW5kZXhBbnkodmFsdWUsIGluZGV4LCByZXBsYWNlbWVudCkge1xuICAgICAgcmV0dXJuIHZhbHVlLmNsb25lKCkuc3Vic2V0KGluZGV4LCByZXBsYWNlbWVudCk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBJbmRleCwgYW55LCBhbnknOiBmdW5jdGlvbiBNYXRyaXhJbmRleEFueUFueSh2YWx1ZSwgaW5kZXgsIHJlcGxhY2VtZW50LCBkZWZhdWx0VmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5jbG9uZSgpLnN1YnNldChpbmRleCwgcmVwbGFjZW1lbnQsIGRlZmF1bHRWYWx1ZSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBJbmRleCwgc3RyaW5nJzogX3NldFN1YnN0cmluZyxcbiAgICAnc3RyaW5nLCBJbmRleCwgc3RyaW5nLCBzdHJpbmcnOiBfc2V0U3Vic3RyaW5nLFxuICAgICdPYmplY3QsIEluZGV4LCBhbnknOiBfc2V0T2JqZWN0UHJvcGVydHlcbiAgfSk7XG59KTtcbi8qKlxuICogUmV0cmlldmUgYSBzdWJzZXQgb2YgYSBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgICAgICAgICAgICBzdHJpbmcgZnJvbSB3aGljaCB0byBnZXQgYSBzdWJzdHJpbmdcbiAqIEBwYXJhbSB7SW5kZXh9IGluZGV4ICAgICAgICAgICBBbiBpbmRleCBjb250YWluaW5nIHJhbmdlcyBmb3IgZWFjaCBkaW1lbnNpb25cbiAqIEByZXR1cm5zIHtzdHJpbmd9IHN1YnN0cmluZ1xuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZVN1YnNldCA9IGNyZWF0ZVN1YnNldDtcblxuZnVuY3Rpb24gX2dldFN1YnN0cmluZyhzdHIsIGluZGV4KSB7XG4gIGlmICghKDAsIF9pcy5pc0luZGV4KShpbmRleCkpIHtcbiAgICAvLyBUT0RPOiBiZXR0ZXIgZXJyb3IgbWVzc2FnZVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luZGV4IGV4cGVjdGVkJyk7XG4gIH1cblxuICBpZiAoaW5kZXguc2l6ZSgpLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaW5kZXguc2l6ZSgpLmxlbmd0aCwgMSk7XG4gIH0gLy8gdmFsaWRhdGUgd2hldGhlciB0aGUgcmFuZ2UgaXMgb3V0IG9mIHJhbmdlXG5cblxuICB2YXIgc3RyTGVuID0gc3RyLmxlbmd0aDtcbiAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpbmRleC5taW4oKVswXSwgc3RyTGVuKTtcbiAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpbmRleC5tYXgoKVswXSwgc3RyTGVuKTtcbiAgdmFyIHJhbmdlID0gaW5kZXguZGltZW5zaW9uKDApO1xuICB2YXIgc3Vic3RyID0gJyc7XG4gIHJhbmdlLmZvckVhY2goZnVuY3Rpb24gKHYpIHtcbiAgICBzdWJzdHIgKz0gc3RyLmNoYXJBdCh2KTtcbiAgfSk7XG4gIHJldHVybiBzdWJzdHI7XG59XG4vKipcbiAqIFJlcGxhY2UgYSBzdWJzdHJpbmcgaW4gYSBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgICAgICAgICAgICBzdHJpbmcgdG8gYmUgcmVwbGFjZWRcbiAqIEBwYXJhbSB7SW5kZXh9IGluZGV4ICAgICAgICAgICBBbiBpbmRleCBjb250YWluaW5nIHJhbmdlcyBmb3IgZWFjaCBkaW1lbnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSByZXBsYWNlbWVudCAgICBSZXBsYWNlbWVudCBzdHJpbmdcbiAqIEBwYXJhbSB7c3RyaW5nfSBbZGVmYXVsdFZhbHVlXSBEZWZhdWx0IHZhbHVlIHRvIGJlIHVzZXMgd2hlbiByZXNpemluZ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzdHJpbmcuIGlzICcgJyBieSBkZWZhdWx0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSByZXN1bHRcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBfc2V0U3Vic3RyaW5nKHN0ciwgaW5kZXgsIHJlcGxhY2VtZW50LCBkZWZhdWx0VmFsdWUpIHtcbiAgaWYgKCFpbmRleCB8fCBpbmRleC5pc0luZGV4ICE9PSB0cnVlKSB7XG4gICAgLy8gVE9ETzogYmV0dGVyIGVycm9yIG1lc3NhZ2VcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmRleCBleHBlY3RlZCcpO1xuICB9XG5cbiAgaWYgKGluZGV4LnNpemUoKS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGluZGV4LnNpemUoKS5sZW5ndGgsIDEpO1xuICB9XG5cbiAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBkZWZhdWx0VmFsdWUgIT09ICdzdHJpbmcnIHx8IGRlZmF1bHRWYWx1ZS5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NpbmdsZSBjaGFyYWN0ZXIgZXhwZWN0ZWQgYXMgZGVmYXVsdFZhbHVlJyk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGRlZmF1bHRWYWx1ZSA9ICcgJztcbiAgfVxuXG4gIHZhciByYW5nZSA9IGluZGV4LmRpbWVuc2lvbigwKTtcbiAgdmFyIGxlbiA9IHJhbmdlLnNpemUoKVswXTtcblxuICBpZiAobGVuICE9PSByZXBsYWNlbWVudC5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKHJhbmdlLnNpemUoKVswXSwgcmVwbGFjZW1lbnQubGVuZ3RoKTtcbiAgfSAvLyB2YWxpZGF0ZSB3aGV0aGVyIHRoZSByYW5nZSBpcyBvdXQgb2YgcmFuZ2VcblxuXG4gIHZhciBzdHJMZW4gPSBzdHIubGVuZ3RoO1xuICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGluZGV4Lm1pbigpWzBdKTtcbiAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpbmRleC5tYXgoKVswXSk7IC8vIGNvcHkgdGhlIHN0cmluZyBpbnRvIGFuIGFycmF5IHdpdGggY2hhcmFjdGVyc1xuXG4gIHZhciBjaGFycyA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyTGVuOyBpKyspIHtcbiAgICBjaGFyc1tpXSA9IHN0ci5jaGFyQXQoaSk7XG4gIH1cblxuICByYW5nZS5mb3JFYWNoKGZ1bmN0aW9uICh2LCBpKSB7XG4gICAgY2hhcnNbdl0gPSByZXBsYWNlbWVudC5jaGFyQXQoaVswXSk7XG4gIH0pOyAvLyBpbml0aWFsaXplIHVuZGVmaW5lZCBjaGFyYWN0ZXJzIHdpdGggYSBzcGFjZVxuXG4gIGlmIChjaGFycy5sZW5ndGggPiBzdHJMZW4pIHtcbiAgICBmb3IgKHZhciBfaSA9IHN0ckxlbiAtIDEsIF9sZW4gPSBjaGFycy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgaWYgKCFjaGFyc1tfaV0pIHtcbiAgICAgICAgY2hhcnNbX2ldID0gZGVmYXVsdFZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjaGFycy5qb2luKCcnKTtcbn1cbi8qKlxuICogUmV0cmlldmUgYSBwcm9wZXJ0eSBmcm9tIGFuIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAqIEByZXR1cm4geyp9IFJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eVxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIF9nZXRPYmplY3RQcm9wZXJ0eShvYmplY3QsIGluZGV4KSB7XG4gIGlmIChpbmRleC5zaXplKCkubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihpbmRleC5zaXplKCksIDEpO1xuICB9XG5cbiAgdmFyIGtleSA9IGluZGV4LmRpbWVuc2lvbigwKTtcblxuICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdHJpbmcgZXhwZWN0ZWQgYXMgaW5kZXggdG8gcmV0cmlldmUgYW4gb2JqZWN0IHByb3BlcnR5Jyk7XG4gIH1cblxuICByZXR1cm4gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkob2JqZWN0LCBrZXkpO1xufVxuLyoqXG4gKiBTZXQgYSBwcm9wZXJ0eSBvbiBhbiBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7SW5kZXh9IGluZGV4XG4gKiBAcGFyYW0geyp9IHJlcGxhY2VtZW50XG4gKiBAcmV0dXJuIHsqfSBSZXR1cm5zIHRoZSB1cGRhdGVkIG9iamVjdFxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIF9zZXRPYmplY3RQcm9wZXJ0eShvYmplY3QsIGluZGV4LCByZXBsYWNlbWVudCkge1xuICBpZiAoaW5kZXguc2l6ZSgpLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaW5kZXguc2l6ZSgpLCAxKTtcbiAgfVxuXG4gIHZhciBrZXkgPSBpbmRleC5kaW1lbnNpb24oMCk7XG5cbiAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignU3RyaW5nIGV4cGVjdGVkIGFzIGluZGV4IHRvIHJldHJpZXZlIGFuIG9iamVjdCBwcm9wZXJ0eScpO1xuICB9IC8vIGNsb25lIHRoZSBvYmplY3QsIGFuZCBhcHBseSB0aGUgcHJvcGVydHkgdG8gdGhlIGNsb25lXG5cblxuICB2YXIgdXBkYXRlZCA9ICgwLCBfb2JqZWN0LmNsb25lKShvYmplY3QpO1xuICAoMCwgX2N1c3RvbXMuc2V0U2FmZVByb3BlcnR5KSh1cGRhdGVkLCBrZXksIHJlcGxhY2VtZW50KTtcbiAgcmV0dXJuIHVwZGF0ZWQ7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVRyYWNlID0gdm9pZCAwO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3RyYWNlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdhZGQnXTtcbnZhciBjcmVhdGVUcmFjZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGFkZCA9IF9yZWYuYWRkO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHRyYWNlIG9mIGEgbWF0cml4OiB0aGUgc3VtIG9mIHRoZSBlbGVtZW50cyBvbiB0aGUgbWFpblxuICAgKiBkaWFnb25hbCBvZiBhIHNxdWFyZSBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC50cmFjZSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC50cmFjZShbWzEsIDJdLCBbMywgNF1dKSAvLyByZXR1cm5zIDVcbiAgICpcbiAgICogICAgY29uc3QgQSA9IFtcbiAgICogICAgICBbMSwgMiwgM10sXG4gICAqICAgICAgWy0xLCAyLCAzXSxcbiAgICogICAgICBbMiwgMCwgM11cbiAgICogICAgXVxuICAgKiAgICBtYXRoLnRyYWNlKEEpIC8vIHJldHVybnMgNlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZGlhZ1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSB4ICBBIG1hdHJpeFxuICAgKlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSB0cmFjZSBvZiBgeGBcbiAgICovXG4gIHJldHVybiB0eXBlZCgndHJhY2UnLCB7XG4gICAgQXJyYXk6IGZ1bmN0aW9uIF9hcnJheVRyYWNlKHgpIHtcbiAgICAgIC8vIHVzZSBkZW5zZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBfZGVuc2VUcmFjZShtYXRyaXgoeCkpO1xuICAgIH0sXG4gICAgU3BhcnNlTWF0cml4OiBfc3BhcnNlVHJhY2UsXG4gICAgRGVuc2VNYXRyaXg6IF9kZW5zZVRyYWNlLFxuICAgIGFueTogX29iamVjdC5jbG9uZVxuICB9KTtcblxuICBmdW5jdGlvbiBfZGVuc2VUcmFjZShtKSB7XG4gICAgLy8gbWF0cml4IHNpemUgJiBkYXRhXG4gICAgdmFyIHNpemUgPSBtLl9zaXplO1xuICAgIHZhciBkYXRhID0gbS5fZGF0YTsgLy8gcHJvY2VzcyBkaW1lbnNpb25zXG5cbiAgICBzd2l0Y2ggKHNpemUubGVuZ3RoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIC8vIHZlY3RvclxuICAgICAgICBpZiAoc2l6ZVswXSA9PT0gMSkge1xuICAgICAgICAgIC8vIHJldHVybiBkYXRhWzBdXG4gICAgICAgICAgcmV0dXJuICgwLCBfb2JqZWN0LmNsb25lKShkYXRhWzBdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcblxuICAgICAgY2FzZSAyOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gdHdvIGRpbWVuc2lvbmFsXG4gICAgICAgICAgdmFyIHJvd3MgPSBzaXplWzBdO1xuICAgICAgICAgIHZhciBjb2xzID0gc2l6ZVsxXTtcblxuICAgICAgICAgIGlmIChyb3dzID09PSBjb2xzKSB7XG4gICAgICAgICAgICAvLyBjYWx1bGF0ZSBzdW1cbiAgICAgICAgICAgIHZhciBzdW0gPSAwOyAvLyBsb29wIGRpYWdvbmFsXG5cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICAgIHN1bSA9IGFkZChzdW0sIGRhdGFbaV1baV0pO1xuICAgICAgICAgICAgfSAvLyByZXR1cm4gdHJhY2VcblxuXG4gICAgICAgICAgICByZXR1cm4gc3VtO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlIChzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIG11bHRpIGRpbWVuc2lvbmFsXG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSB0d28gZGltZW5zaW9uYWwgKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBfc3BhcnNlVHJhY2UobSkge1xuICAgIC8vIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgdmFsdWVzID0gbS5fdmFsdWVzO1xuICAgIHZhciBpbmRleCA9IG0uX2luZGV4O1xuICAgIHZhciBwdHIgPSBtLl9wdHI7XG4gICAgdmFyIHNpemUgPSBtLl9zaXplOyAvLyBjaGVjayBkaW1lbnNpb25zXG5cbiAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBzaXplWzFdOyAvLyBtYXRyaXggbXVzdCBiZSBzcXVhcmVcblxuICAgIGlmIChyb3dzID09PSBjb2x1bW5zKSB7XG4gICAgICAvLyBjYWx1bGF0ZSBzdW1cbiAgICAgIHZhciBzdW0gPSAwOyAvLyBjaGVjayB3ZSBoYXZlIGRhdGEgKGF2b2lkIGxvb3BpbmcgY29sdW1ucylcblxuICAgICAgaWYgKHZhbHVlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIGxvb3AgY29sdW1uc1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICAgIC8vIGswIDw9IGsgPCBrMSB3aGVyZSBrMCA9IF9wdHJbal0gJiYgazEgPSBfcHRyW2orMV1cbiAgICAgICAgICB2YXIgazAgPSBwdHJbal07XG4gICAgICAgICAgdmFyIGsxID0gcHRyW2ogKyAxXTsgLy8gbG9vcCBrIHdpdGhpbiBbazAsIGsxW1xuXG4gICAgICAgICAgZm9yICh2YXIgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgICAgICAgLy8gcm93IGluZGV4XG4gICAgICAgICAgICB2YXIgaSA9IGluZGV4W2tdOyAvLyBjaGVjayByb3dcblxuICAgICAgICAgICAgaWYgKGkgPT09IGopIHtcbiAgICAgICAgICAgICAgLy8gYWNjdW11bGF0ZSB2YWx1ZVxuICAgICAgICAgICAgICBzdW0gPSBhZGQoc3VtLCB2YWx1ZXNba10pOyAvLyBleGl0IGxvb3BcblxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGkgPiBqKSB7XG4gICAgICAgICAgICAgIC8vIGV4aXQgbG9vcCwgbm8gdmFsdWUgb24gdGhlIGRpYWdvbmFsIGZvciBjb2x1bW4galxuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gcmV0dXJuIHRyYWNlXG5cblxuICAgICAgcmV0dXJuIHN1bTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlIChzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVUcmFjZSA9IGNyZWF0ZVRyYWNlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVUcmFuc3Bvc2UgPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAndHJhbnNwb3NlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZVRyYW5zcG9zZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcblxuICAvKipcbiAgICogVHJhbnNwb3NlIGEgbWF0cml4LiBBbGwgdmFsdWVzIG9mIHRoZSBtYXRyaXggYXJlIHJlZmxlY3RlZCBvdmVyIGl0c1xuICAgKiBtYWluIGRpYWdvbmFsLiBPbmx5IGFwcGxpY2FibGUgdG8gdHdvIGRpbWVuc2lvbmFsIG1hdHJpY2VzIGNvbnRhaW5pbmdcbiAgICogYSB2ZWN0b3IgKGkuZS4gaGF2aW5nIHNpemUgYFsxLG5dYCBvciBgW24sMV1gKS4gT25lIGRpbWVuc2lvbmFsXG4gICAqIHZlY3RvcnMgYW5kIHNjYWxhcnMgcmV0dXJuIHRoZSBpbnB1dCB1bmNoYW5nZWQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgudHJhbnNwb3NlKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgY29uc3QgQSA9IFtbMSwgMiwgM10sIFs0LCA1LCA2XV1cbiAgICogICAgIG1hdGgudHJhbnNwb3NlKEEpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbWzEsIDRdLCBbMiwgNV0sIFszLCA2XV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBkaWFnLCBpbnYsIHN1YnNldCwgc3F1ZWV6ZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSB4ICBNYXRyaXggdG8gYmUgdHJhbnNwb3NlZFxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICBUaGUgdHJhbnNwb3NlZCBtYXRyaXhcbiAgICovXG4gIHZhciB0cmFuc3Bvc2UgPSB0eXBlZCgndHJhbnNwb3NlJywge1xuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheSh4KSB7XG4gICAgICAvLyB1c2UgZGVuc2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gdHJhbnNwb3NlKG1hdHJpeCh4KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkge1xuICAgICAgLy8gbWF0cml4IHNpemVcbiAgICAgIHZhciBzaXplID0geC5zaXplKCk7IC8vIHJlc3VsdFxuXG4gICAgICB2YXIgYzsgLy8gcHJvY2VzcyBkaW1lbnNpb25zXG5cbiAgICAgIHN3aXRjaCAoc2l6ZS5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIC8vIHZlY3RvclxuICAgICAgICAgIGMgPSB4LmNsb25lKCk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIHJvd3MgYW5kIGNvbHVtbnNcbiAgICAgICAgICAgIHZhciByb3dzID0gc2l6ZVswXTtcbiAgICAgICAgICAgIHZhciBjb2x1bW5zID0gc2l6ZVsxXTsgLy8gY2hlY2sgY29sdW1uc1xuXG4gICAgICAgICAgICBpZiAoY29sdW1ucyA9PT0gMCkge1xuICAgICAgICAgICAgICAvLyB0aHJvdyBleGNlcHRpb25cbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0Nhbm5vdCB0cmFuc3Bvc2UgYSAyRCBtYXRyaXggd2l0aCBubyBjb2x1bW5zIChzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICAgICAgICB9IC8vIHByb2Nlc3Mgc3RvcmFnZSBmb3JtYXRcblxuXG4gICAgICAgICAgICBzd2l0Y2ggKHguc3RvcmFnZSgpKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ2RlbnNlJzpcbiAgICAgICAgICAgICAgICBjID0gX2RlbnNlVHJhbnNwb3NlKHgsIHJvd3MsIGNvbHVtbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgJ3NwYXJzZSc6XG4gICAgICAgICAgICAgICAgYyA9IF9zcGFyc2VUcmFuc3Bvc2UoeCwgcm93cywgY29sdW1ucyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgLy8gbXVsdGkgZGltZW5zaW9uYWxcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgYSB2ZWN0b3Igb3IgdHdvIGRpbWVuc2lvbmFsIChzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KSh0aGlzLl9zaXplKSArICcpJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjO1xuICAgIH0sXG4gICAgLy8gc2NhbGFyc1xuICAgIGFueTogZnVuY3Rpb24gYW55KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX29iamVjdC5jbG9uZSkoeCk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfZGVuc2VUcmFuc3Bvc2UobSwgcm93cywgY29sdW1ucykge1xuICAgIC8vIG1hdHJpeCBhcnJheVxuICAgIHZhciBkYXRhID0gbS5fZGF0YTsgLy8gdHJhbnNwb3NlZCBtYXRyaXggZGF0YVxuXG4gICAgdmFyIHRyYW5zcG9zZWQgPSBbXTtcbiAgICB2YXIgdHJhbnNwb3NlZFJvdzsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gaW5pdGlhbGl6ZSByb3dcbiAgICAgIHRyYW5zcG9zZWRSb3cgPSB0cmFuc3Bvc2VkW2pdID0gW107IC8vIGxvb3Agcm93c1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAvLyBzZXQgZGF0YVxuICAgICAgICB0cmFuc3Bvc2VkUm93W2ldID0gKDAsIF9vYmplY3QuY2xvbmUpKGRhdGFbaV1bal0pO1xuICAgICAgfVxuICAgIH0gLy8gcmV0dXJuIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbS5jcmVhdGVEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiB0cmFuc3Bvc2VkLFxuICAgICAgc2l6ZTogW2NvbHVtbnMsIHJvd3NdLFxuICAgICAgZGF0YXR5cGU6IG0uX2RhdGF0eXBlXG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBfc3BhcnNlVHJhbnNwb3NlKG0sIHJvd3MsIGNvbHVtbnMpIHtcbiAgICAvLyBtYXRyaXggYXJyYXlzXG4gICAgdmFyIHZhbHVlcyA9IG0uX3ZhbHVlcztcbiAgICB2YXIgaW5kZXggPSBtLl9pbmRleDtcbiAgICB2YXIgcHRyID0gbS5fcHRyOyAvLyByZXN1bHQgbWF0cmljZXNcblxuICAgIHZhciBjdmFsdWVzID0gdmFsdWVzID8gW10gOiB1bmRlZmluZWQ7XG4gICAgdmFyIGNpbmRleCA9IFtdO1xuICAgIHZhciBjcHRyID0gW107IC8vIHJvdyBjb3VudHNcblxuICAgIHZhciB3ID0gW107XG5cbiAgICBmb3IgKHZhciB4ID0gMDsgeCA8IHJvd3M7IHgrKykge1xuICAgICAgd1t4XSA9IDA7XG4gICAgfSAvLyB2YXJzXG5cblxuICAgIHZhciBwLCBsLCBqOyAvLyBsb29wIHZhbHVlcyBpbiBtYXRyaXhcblxuICAgIGZvciAocCA9IDAsIGwgPSBpbmRleC5sZW5ndGg7IHAgPCBsOyBwKyspIHtcbiAgICAgIC8vIG51bWJlciBvZiB2YWx1ZXMgaW4gcm93XG4gICAgICB3W2luZGV4W3BdXSsrO1xuICAgIH0gLy8gY3VtdWxhdGl2ZSBzdW1cblxuXG4gICAgdmFyIHN1bSA9IDA7IC8vIGluaXRpYWxpemUgY3B0ciB3aXRoIHRoZSBjdW1tdWxhdGl2ZSBzdW0gb2Ygcm93IGNvdW50c1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIC8vIHVwZGF0ZSBjcHRyXG4gICAgICBjcHRyLnB1c2goc3VtKTsgLy8gdXBkYXRlIHN1bVxuXG4gICAgICBzdW0gKz0gd1tpXTsgLy8gdXBkYXRlIHdcblxuICAgICAgd1tpXSA9IGNwdHJbaV07XG4gICAgfSAvLyB1cGRhdGUgY3B0clxuXG5cbiAgICBjcHRyLnB1c2goc3VtKTsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyB2YWx1ZXMgJiBpbmRleCBpbiBjb2x1bW5cbiAgICAgIGZvciAodmFyIGswID0gcHRyW2pdLCBrMSA9IHB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gQyB2YWx1ZXMgJiBpbmRleFxuICAgICAgICB2YXIgcSA9IHdbaW5kZXhba11dKys7IC8vIENbaiwgaV0gPSBBW2ksIGpdXG5cbiAgICAgICAgY2luZGV4W3FdID0gajsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlcyAocGF0dGVybiBtYXRyaXgpXG5cbiAgICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICAgIGN2YWx1ZXNbcV0gPSAoMCwgX29iamVjdC5jbG9uZSkodmFsdWVzW2tdKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gcmV0dXJuIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbS5jcmVhdGVTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiBjdmFsdWVzLFxuICAgICAgaW5kZXg6IGNpbmRleCxcbiAgICAgIHB0cjogY3B0cixcbiAgICAgIHNpemU6IFtjb2x1bW5zLCByb3dzXSxcbiAgICAgIGRhdGF0eXBlOiBtLl9kYXRhdHlwZVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHRyYW5zcG9zZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVUcmFuc3Bvc2UgPSBjcmVhdGVUcmFuc3Bvc2U7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVplcm9zID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICd6ZXJvcyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnbWF0cml4JywgJ0JpZ051bWJlciddO1xudmFyIGNyZWF0ZVplcm9zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbWF0cml4IGZpbGxlZCB3aXRoIHplcm9zLiBUaGUgY3JlYXRlZCBtYXRyaXggY2FuIGhhdmUgb25lIG9yXG4gICAqIG11bHRpcGxlIGRpbWVuc2lvbnMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC56ZXJvcyhtKVxuICAgKiAgICBtYXRoLnplcm9zKG0sIGZvcm1hdClcbiAgICogICAgbWF0aC56ZXJvcyhtLCBuKVxuICAgKiAgICBtYXRoLnplcm9zKG0sIG4sIGZvcm1hdClcbiAgICogICAgbWF0aC56ZXJvcyhbbSwgbl0pXG4gICAqICAgIG1hdGguemVyb3MoW20sIG5dLCBmb3JtYXQpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnplcm9zKDMpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbMCwgMCwgMF1cbiAgICogICAgbWF0aC56ZXJvcygzLCAyKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1swLCAwXSwgWzAsIDBdLCBbMCwgMF1dXG4gICAqICAgIG1hdGguemVyb3MoMywgJ2RlbnNlJykgICAgICAgICAvLyByZXR1cm5zIFswLCAwLCAwXVxuICAgKlxuICAgKiAgICBjb25zdCBBID0gW1sxLCAyLCAzXSwgWzQsIDUsIDZdXVxuICAgKiAgICBtYXRoLnplcm9zKG1hdGguc2l6ZShBKSkgICAgICAgLy8gcmV0dXJucyBbWzAsIDAsIDBdLCBbMCwgMCwgMF1dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBvbmVzLCBpZGVudGl0eSwgc2l6ZSwgcmFuZ2VcbiAgICpcbiAgICogQHBhcmFtIHsuLi5udW1iZXIgfCBBcnJheX0gc2l6ZSAgICBUaGUgc2l6ZSBvZiBlYWNoIGRpbWVuc2lvbiBvZiB0aGUgbWF0cml4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZm9ybWF0XSAgICAgICAgICAgVGhlIE1hdHJpeCBzdG9yYWdlIGZvcm1hdFxuICAgKlxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgICAgICAgIEEgbWF0cml4IGZpbGxlZCB3aXRoIHplcm9zXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIGNvbmZpZy5tYXRyaXggPT09ICdBcnJheScgPyBfemVyb3MoW10pIDogX3plcm9zKFtdLCAnZGVmYXVsdCcpO1xuICAgIH0sXG4gICAgLy8gbWF0aC56ZXJvcyhtLCBuLCBwLCAuLi4sIGZvcm1hdClcbiAgICAvLyBUT0RPOiBtb3JlIGFjY3VyYXRlIHNpZ25hdHVyZSAnLi4ubnVtYmVyIHwgQmlnTnVtYmVyLCBzdHJpbmcnIGFzIHNvb24gYXMgdHlwZWQtZnVuY3Rpb24gc3VwcG9ydHMgdGhpc1xuICAgICcuLi5udW1iZXIgfCBCaWdOdW1iZXIgfCBzdHJpbmcnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJTdHJpbmcoc2l6ZSkge1xuICAgICAgdmFyIGxhc3QgPSBzaXplW3NpemUubGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmICh0eXBlb2YgbGFzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHNpemUucG9wKCk7XG4gICAgICAgIHJldHVybiBfemVyb3Moc2l6ZSwgZm9ybWF0KTtcbiAgICAgIH0gZWxzZSBpZiAoY29uZmlnLm1hdHJpeCA9PT0gJ0FycmF5Jykge1xuICAgICAgICByZXR1cm4gX3plcm9zKHNpemUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIF96ZXJvcyhzaXplLCAnZGVmYXVsdCcpO1xuICAgICAgfVxuICAgIH0sXG4gICAgQXJyYXk6IF96ZXJvcyxcbiAgICBNYXRyaXg6IGZ1bmN0aW9uIE1hdHJpeChzaXplKSB7XG4gICAgICB2YXIgZm9ybWF0ID0gc2l6ZS5zdG9yYWdlKCk7XG4gICAgICByZXR1cm4gX3plcm9zKHNpemUudmFsdWVPZigpLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBzdHJpbmcnOiBmdW5jdGlvbiBBcnJheU1hdHJpeFN0cmluZyhzaXplLCBmb3JtYXQpIHtcbiAgICAgIHJldHVybiBfemVyb3Moc2l6ZS52YWx1ZU9mKCksIGZvcm1hdCk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBBcnJheSBvciBNYXRyaXggd2l0aCB6ZXJvc1xuICAgKiBAcGFyYW0ge0FycmF5fSBzaXplXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZm9ybWF0PSdkZWZhdWx0J11cbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF96ZXJvcyhzaXplLCBmb3JtYXQpIHtcbiAgICB2YXIgaGFzQmlnTnVtYmVycyA9IF9ub3JtYWxpemUoc2l6ZSk7XG5cbiAgICB2YXIgZGVmYXVsdFZhbHVlID0gaGFzQmlnTnVtYmVycyA/IG5ldyBCaWdOdW1iZXIoMCkgOiAwO1xuXG4gICAgX3ZhbGlkYXRlKHNpemUpO1xuXG4gICAgaWYgKGZvcm1hdCkge1xuICAgICAgLy8gcmV0dXJuIGEgbWF0cml4XG4gICAgICB2YXIgbSA9IG1hdHJpeChmb3JtYXQpO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBtLnJlc2l6ZShzaXplLCBkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gcmV0dXJuIGFuIEFycmF5XG4gICAgICB2YXIgYXJyID0gW107XG5cbiAgICAgIGlmIChzaXplLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuICgwLCBfYXJyYXkucmVzaXplKShhcnIsIHNpemUsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhcnI7XG4gICAgfVxuICB9IC8vIHJlcGxhY2UgQmlnTnVtYmVycyB3aXRoIG51bWJlcnMsIHJldHVybnMgdHJ1ZSBpZiBzaXplIGNvbnRhaW5lZCBCaWdOdW1iZXJzXG5cblxuICBmdW5jdGlvbiBfbm9ybWFsaXplKHNpemUpIHtcbiAgICB2YXIgaGFzQmlnTnVtYmVycyA9IGZhbHNlO1xuICAgIHNpemUuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnIpIHtcbiAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKSh2YWx1ZSkpIHtcbiAgICAgICAgaGFzQmlnTnVtYmVycyA9IHRydWU7XG4gICAgICAgIGFycltpbmRleF0gPSB2YWx1ZS50b051bWJlcigpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBoYXNCaWdOdW1iZXJzO1xuICB9IC8vIHZhbGlkYXRlIGFyZ3VtZW50c1xuXG5cbiAgZnVuY3Rpb24gX3ZhbGlkYXRlKHNpemUpIHtcbiAgICBzaXplLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh2YWx1ZSkgfHwgdmFsdWUgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVycyBpbiBmdW5jdGlvbiB6ZXJvcyBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXJzJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0pOyAvLyBUT0RPOiB6ZXJvcyBjb250YWlucyBhbG1vc3QgdGhlIHNhbWUgY29kZSBhcyBvbmVzLiBSZXVzZSB0aGlzP1xuXG5leHBvcnRzLmNyZWF0ZVplcm9zID0gY3JlYXRlWmVyb3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbWJpbmF0aW9ucyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29tYmluYXRpb25zID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlci9jb21iaW5hdGlvbnNcIik7XG5cbnZhciBuYW1lID0gJ2NvbWJpbmF0aW9ucyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUNvbWJpbmF0aW9ucyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiB3YXlzIG9mIHBpY2tpbmcgYGtgIHVub3JkZXJlZCBvdXRjb21lcyBmcm9tIGBuYFxuICAgKiBwb3NzaWJpbGl0aWVzLlxuICAgKlxuICAgKiBDb21iaW5hdGlvbnMgb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy5cbiAgICogVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogayA8PSBuLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmNvbWJpbmF0aW9ucyhuLCBrKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jb21iaW5hdGlvbnMoNywgNSkgLy8gcmV0dXJucyAyMVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY29tYmluYXRpb25zV2l0aFJlcCwgcGVybXV0YXRpb25zLCBmYWN0b3JpYWxcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IG4gICAgVG90YWwgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHNldFxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gayAgICBOdW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc3Vic2V0XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlcn0gICAgIE51bWJlciBvZiBwb3NzaWJsZSBjb21iaW5hdGlvbnMuXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IF9jb21iaW5hdGlvbnMuY29tYmluYXRpb25zTnVtYmVyLFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcihuLCBrKSB7XG4gICAgICB2YXIgQmlnTnVtYmVyID0gbi5jb25zdHJ1Y3RvcjtcbiAgICAgIHZhciByZXN1bHQsIGk7XG4gICAgICB2YXIgbk1pbnVzayA9IG4ubWludXMoayk7XG4gICAgICB2YXIgb25lID0gbmV3IEJpZ051bWJlcigxKTtcblxuICAgICAgaWYgKCFpc1Bvc2l0aXZlSW50ZWdlcihuKSB8fCAhaXNQb3NpdGl2ZUludGVnZXIoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21iaW5hdGlvbnMnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGsuZ3QobikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignayBtdXN0IGJlIGxlc3MgdGhhbiBuIGluIGZ1bmN0aW9uIGNvbWJpbmF0aW9ucycpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHQgPSBvbmU7XG5cbiAgICAgIGlmIChrLmx0KG5NaW51c2spKSB7XG4gICAgICAgIGZvciAoaSA9IG9uZTsgaS5sdGUobk1pbnVzayk7IGkgPSBpLnBsdXMob25lKSkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC50aW1lcyhrLnBsdXMoaSkpLmRpdmlkZWRCeShpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChpID0gb25lOyBpLmx0ZShrKTsgaSA9IGkucGx1cyhvbmUpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnRpbWVzKG5NaW51c2sucGx1cyhpKSkuZGl2aWRlZEJ5KGkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSAvLyBUT0RPOiBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgY29sbGVjdGlvbiBpbiBjb21iaW5hdGlvbnNcblxuICB9KTtcbn0pO1xuLyoqXG4gKiBUZXN0IHdoZXRoZXIgQmlnTnVtYmVyIG4gaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0gblxuICogQHJldHVybnMge2Jvb2xlYW59IGlzUG9zaXRpdmVJbnRlZ2VyXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVDb21iaW5hdGlvbnMgPSBjcmVhdGVDb21iaW5hdGlvbnM7XG5cbmZ1bmN0aW9uIGlzUG9zaXRpdmVJbnRlZ2VyKG4pIHtcbiAgcmV0dXJuIG4uaXNJbnRlZ2VyKCkgJiYgbi5ndGUoMCk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbWJpbmF0aW9uc1dpdGhSZXAgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfcHJvZHVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9wcm9kdWN0XCIpO1xuXG52YXIgbmFtZSA9ICdjb21iaW5hdGlvbnNXaXRoUmVwJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQ29tYmluYXRpb25zV2l0aFJlcCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIG51bWJlciBvZiB3YXlzIG9mIHBpY2tpbmcgYGtgIHVub3JkZXJlZCBvdXRjb21lcyBmcm9tIGBuYFxuICAgKiBwb3NzaWJpbGl0aWVzLCBhbGxvd2luZyBpbmRpdmlkdWFsIG91dGNvbWVzIHRvIGJlIHJlcGVhdGVkIG1vcmUgdGhhbiBvbmNlLlxuICAgKlxuICAgKiBDb21iaW5hdGlvbnNXaXRoUmVwIG9ubHkgdGFrZXMgaW50ZWdlciBhcmd1bWVudHMuXG4gICAqIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IGsgPD0gbiArIGsgLTEuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguY29tYmluYXRpb25zV2l0aFJlcChuLCBrKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jb21iaW5hdGlvbnNXaXRoUmVwKDcsIDUpIC8vIHJldHVybnMgNDYyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb21iaW5hdGlvbnMsIHBlcm11dGF0aW9ucywgZmFjdG9yaWFsXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyfSBuICAgIFRvdGFsIG51bWJlciBvZiBvYmplY3RzIGluIHRoZSBzZXRcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IGsgICAgTnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHN1YnNldFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXJ9ICAgICBOdW1iZXIgb2YgcG9zc2libGUgY29tYmluYXRpb25zIHdpdGggcmVwbGFjZW1lbnQuXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcihuLCBrKSB7XG4gICAgICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikobikgfHwgbiA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21iaW5hdGlvbnNXaXRoUmVwJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShrKSB8fCBrIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGNvbWJpbmF0aW9uc1dpdGhSZXAnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG4gPCAxKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2sgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbiArIGsgLSAxJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChrIDwgbiAtIDEpIHtcbiAgICAgICAgdmFyIF9wcm9kcmFuZ2UgPSAoMCwgX3Byb2R1Y3QucHJvZHVjdCkobiwgbiArIGsgLSAxKTtcblxuICAgICAgICByZXR1cm4gX3Byb2RyYW5nZSAvICgwLCBfcHJvZHVjdC5wcm9kdWN0KSgxLCBrKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHByb2RyYW5nZSA9ICgwLCBfcHJvZHVjdC5wcm9kdWN0KShrICsgMSwgbiArIGsgLSAxKTtcbiAgICAgIHJldHVybiBwcm9kcmFuZ2UgLyAoMCwgX3Byb2R1Y3QucHJvZHVjdCkoMSwgbiAtIDEpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKG4sIGspIHtcbiAgICAgIHZhciBCaWdOdW1iZXIgPSBuLmNvbnN0cnVjdG9yO1xuICAgICAgdmFyIHJlc3VsdCwgaTtcbiAgICAgIHZhciBvbmUgPSBuZXcgQmlnTnVtYmVyKDEpO1xuICAgICAgdmFyIG5NaW51c09uZSA9IG4ubWludXMob25lKTtcblxuICAgICAgaWYgKCFpc1Bvc2l0aXZlSW50ZWdlcihuKSB8fCAhaXNQb3NpdGl2ZUludGVnZXIoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21iaW5hdGlvbnNXaXRoUmVwJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuLmx0KG9uZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignayBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byBuICsgayAtIDEgaW4gZnVuY3Rpb24gY29tYmluYXRpb25zV2l0aFJlcCcpO1xuICAgICAgfVxuXG4gICAgICByZXN1bHQgPSBvbmU7XG5cbiAgICAgIGlmIChrLmx0KG5NaW51c09uZSkpIHtcbiAgICAgICAgZm9yIChpID0gb25lOyBpLmx0ZShuTWludXNPbmUpOyBpID0gaS5wbHVzKG9uZSkpIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQudGltZXMoay5wbHVzKGkpKS5kaXZpZGVkQnkoaSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IG9uZTsgaS5sdGUoayk7IGkgPSBpLnBsdXMob25lKSkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC50aW1lcyhuTWludXNPbmUucGx1cyhpKSkuZGl2aWRlZEJ5KGkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9KTtcbn0pO1xuLyoqXG4gKiBUZXN0IHdoZXRoZXIgQmlnTnVtYmVyIG4gaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0gblxuICogQHJldHVybnMge2Jvb2xlYW59IGlzUG9zaXRpdmVJbnRlZ2VyXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVDb21iaW5hdGlvbnNXaXRoUmVwID0gY3JlYXRlQ29tYmluYXRpb25zV2l0aFJlcDtcblxuZnVuY3Rpb24gaXNQb3NpdGl2ZUludGVnZXIobikge1xuICByZXR1cm4gbi5pc0ludGVnZXIoKSAmJiBuLmd0ZSgwKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRmFjdG9yaWFsID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2ZhY3RvcmlhbCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdnYW1tYSddO1xudmFyIGNyZWF0ZUZhY3RvcmlhbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBnYW1tYSA9IF9yZWYuZ2FtbWE7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIGZhY3RvcmlhbCBvZiBhIHZhbHVlXG4gICAqXG4gICAqIEZhY3RvcmlhbCBvbmx5IHN1cHBvcnRzIGFuIGludGVnZXIgdmFsdWUgYXMgYXJndW1lbnQuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5mYWN0b3JpYWwobilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZmFjdG9yaWFsKDUpICAgIC8vIHJldHVybnMgMTIwXG4gICAqICAgIG1hdGguZmFjdG9yaWFsKDMpICAgIC8vIHJldHVybnMgNlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY29tYmluYXRpb25zLCBjb21iaW5hdGlvbnNXaXRoUmVwLCBnYW1tYSwgcGVybXV0YXRpb25zXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IG4gICBBbiBpbnRlZ2VyIG51bWJlclxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gICAgVGhlIGZhY3RvcmlhbCBvZiBgbmBcbiAgICovXG4gIHZhciBmYWN0b3JpYWwgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIobikge1xuICAgICAgaWYgKG4gPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVmFsdWUgbXVzdCBiZSBub24tbmVnYXRpdmUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGdhbW1hKG4gKyAxKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKG4pIHtcbiAgICAgIGlmIChuLmlzTmVnYXRpdmUoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZhbHVlIG11c3QgYmUgbm9uLW5lZ2F0aXZlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBnYW1tYShuLnBsdXMoMSkpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgobikge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKShuLCBmYWN0b3JpYWwpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBmYWN0b3JpYWw7XG59KTtcbmV4cG9ydHMuY3JlYXRlRmFjdG9yaWFsID0gY3JlYXRlRmFjdG9yaWFsOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVHYW1tYSA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2dhbW1hJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtdWx0aXBseVNjYWxhcicsICdwb3cnLCAnQmlnTnVtYmVyJywgJ0NvbXBsZXgnXTtcbnZhciBjcmVhdGVHYW1tYSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcixcbiAgICAgIHBvdyA9IF9yZWYucG93LFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgX0NvbXBsZXggPSBfcmVmLkNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIGdhbW1hIGZ1bmN0aW9uIG9mIGEgdmFsdWUgdXNpbmcgTGFuY3pvcyBhcHByb3hpbWF0aW9uIGZvclxuICAgKiBzbWFsbCB2YWx1ZXMsIGFuZCBhbiBleHRlbmRlZCBTdGlybGluZyBhcHByb3hpbWF0aW9uIGZvciBsYXJnZSB2YWx1ZXMuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5nYW1tYShuKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5nYW1tYSg1KSAgICAgICAvLyByZXR1cm5zIDI0XG4gICAqICAgIG1hdGguZ2FtbWEoLTAuNSkgICAgLy8gcmV0dXJucyAtMy41NDQ5MDc3MDE4MTEwMzM1XG4gICAqICAgIG1hdGguZ2FtbWEobWF0aC5pKSAgLy8gcmV0dXJucyAtMC4xNTQ5NDk4MjgzMDE4MDk3MyAtIDAuNDk4MDE1NjY4MTE4MzU1OTZpXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb21iaW5hdGlvbnMsIGZhY3RvcmlhbCwgcGVybXV0YXRpb25zXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IG4gICBBIHJlYWwgb3IgY29tcGxleCBudW1iZXJcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9ICAgIFRoZSBnYW1tYSBvZiBgbmBcbiAgICovXG4gIHZhciBnYW1tYSA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuZ2FtbWFOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleChuKSB7XG4gICAgICBpZiAobi5pbSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZ2FtbWEobi5yZSk7XG4gICAgICB9XG5cbiAgICAgIG4gPSBuZXcgX0NvbXBsZXgobi5yZSAtIDEsIG4uaW0pO1xuICAgICAgdmFyIHggPSBuZXcgX0NvbXBsZXgoX251bWJlci5nYW1tYVBbMF0sIDApO1xuXG4gICAgICBmb3IgKHZhciBpID0gMTsgaSA8IF9udW1iZXIuZ2FtbWFQLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciByZWFsID0gbi5yZSArIGk7IC8vIHggKz0gcFtpXS8obitpKVxuXG4gICAgICAgIHZhciBkZW4gPSByZWFsICogcmVhbCArIG4uaW0gKiBuLmltO1xuXG4gICAgICAgIGlmIChkZW4gIT09IDApIHtcbiAgICAgICAgICB4LnJlICs9IF9udW1iZXIuZ2FtbWFQW2ldICogcmVhbCAvIGRlbjtcbiAgICAgICAgICB4LmltICs9IC0oX251bWJlci5nYW1tYVBbaV0gKiBuLmltKSAvIGRlbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB4LnJlID0gX251bWJlci5nYW1tYVBbaV0gPCAwID8gLUluZmluaXR5IDogSW5maW5pdHk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIHQgPSBuZXcgX0NvbXBsZXgobi5yZSArIF9udW1iZXIuZ2FtbWFHICsgMC41LCBuLmltKTtcbiAgICAgIHZhciB0d29QaVNxcnQgPSBNYXRoLnNxcnQoMiAqIE1hdGguUEkpO1xuICAgICAgbi5yZSArPSAwLjU7XG4gICAgICB2YXIgcmVzdWx0ID0gcG93KHQsIG4pO1xuXG4gICAgICBpZiAocmVzdWx0LmltID09PSAwKSB7XG4gICAgICAgIC8vIHNxcnQoMipQSSkqcmVzdWx0XG4gICAgICAgIHJlc3VsdC5yZSAqPSB0d29QaVNxcnQ7XG4gICAgICB9IGVsc2UgaWYgKHJlc3VsdC5yZSA9PT0gMCkge1xuICAgICAgICByZXN1bHQuaW0gKj0gdHdvUGlTcXJ0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0LnJlICo9IHR3b1BpU3FydDtcbiAgICAgICAgcmVzdWx0LmltICo9IHR3b1BpU3FydDtcbiAgICAgIH1cblxuICAgICAgdmFyIHIgPSBNYXRoLmV4cCgtdC5yZSk7IC8vIGV4cCgtdClcblxuICAgICAgdC5yZSA9IHIgKiBNYXRoLmNvcygtdC5pbSk7XG4gICAgICB0LmltID0gciAqIE1hdGguc2luKC10LmltKTtcbiAgICAgIHJldHVybiBtdWx0aXBseVNjYWxhcihtdWx0aXBseVNjYWxhcihyZXN1bHQsIHQpLCB4KTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKG4pIHtcbiAgICAgIGlmIChuLmlzSW50ZWdlcigpKSB7XG4gICAgICAgIHJldHVybiBuLmlzTmVnYXRpdmUoKSB8fCBuLmlzWmVybygpID8gbmV3IF9CaWdOdW1iZXIoSW5maW5pdHkpIDogYmlnRmFjdG9yaWFsKG4ubWludXMoMSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW4uaXNGaW5pdGUoKSkge1xuICAgICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIobi5pc05lZ2F0aXZlKCkgPyBOYU4gOiBJbmZpbml0eSk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcignSW50ZWdlciBCaWdOdW1iZXIgZXhwZWN0ZWQnKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KG4pIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkobiwgZ2FtbWEpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgZmFjdG9yaWFsIGZvciBhIEJpZ051bWJlclxuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gblxuICAgKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIHRoZSBmYWN0b3JpYWwgb2YgblxuICAgKi9cblxuICBmdW5jdGlvbiBiaWdGYWN0b3JpYWwobikge1xuICAgIGlmIChuIDwgOCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKFsxLCAxLCAyLCA2LCAyNCwgMTIwLCA3MjAsIDUwNDBdW25dKTtcbiAgICB9XG5cbiAgICB2YXIgcHJlY2lzaW9uID0gY29uZmlnLnByZWNpc2lvbiArIChNYXRoLmxvZyhuLnRvTnVtYmVyKCkpIHwgMCk7XG5cbiAgICB2YXIgQmlnID0gX0JpZ051bWJlci5jbG9uZSh7XG4gICAgICBwcmVjaXNpb246IHByZWNpc2lvblxuICAgIH0pO1xuXG4gICAgaWYgKG4gJSAyID09PSAxKSB7XG4gICAgICByZXR1cm4gbi50aW1lcyhiaWdGYWN0b3JpYWwobmV3IF9CaWdOdW1iZXIobiAtIDEpKSk7XG4gICAgfVxuXG4gICAgdmFyIHAgPSBuO1xuICAgIHZhciBwcm9kID0gbmV3IEJpZyhuKTtcbiAgICB2YXIgc3VtID0gbi50b051bWJlcigpO1xuXG4gICAgd2hpbGUgKHAgPiAyKSB7XG4gICAgICBwIC09IDI7XG4gICAgICBzdW0gKz0gcDtcbiAgICAgIHByb2QgPSBwcm9kLnRpbWVzKHN1bSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKHByb2QudG9QcmVjaXNpb24oX0JpZ051bWJlci5wcmVjaXNpb24pKTtcbiAgfVxuXG4gIHJldHVybiBnYW1tYTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVHYW1tYSA9IGNyZWF0ZUdhbW1hOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVLbGRpdmVyZ2VuY2UgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdrbGRpdmVyZ2VuY2UnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2RpdmlkZScsICdzdW0nLCAnbXVsdGlwbHknLCAnZG90RGl2aWRlJywgJ2xvZycsICdpc051bWVyaWMnXTtcbnZhciBjcmVhdGVLbGRpdmVyZ2VuY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBkaXZpZGUgPSBfcmVmLmRpdmlkZSxcbiAgICAgIHN1bSA9IF9yZWYuc3VtLFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgZG90RGl2aWRlID0gX3JlZi5kb3REaXZpZGUsXG4gICAgICBsb2cgPSBfcmVmLmxvZyxcbiAgICAgIGlzTnVtZXJpYyA9IF9yZWYuaXNOdW1lcmljO1xuXG4gIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgS3VsbGJhY2stTGVpYmxlciAoS0wpIGRpdmVyZ2VuY2UgIGJldHdlZW4gdHdvIGRpc3RyaWJ1dGlvbnNcbiAgICAgKlxuICAgICAqIFN5bnRheDpcbiAgICAgKlxuICAgICAqICAgICBtYXRoLmtsZGl2ZXJnZW5jZSh4LCB5KVxuICAgICAqXG4gICAgICogRXhhbXBsZXM6XG4gICAgICpcbiAgICAgKiAgICAgbWF0aC5rbGRpdmVyZ2VuY2UoWzAuNywwLjUsMC40XSwgWzAuMiwwLjksMC41XSkgICAvL3JldHVybnMgMC4yNDM3NjY5ODc3MzEyMTE1M1xuICAgICAqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0gcSAgICBGaXJzdCB2ZWN0b3JcbiAgICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0gcCAgICBTZWNvbmQgdmVjdG9yXG4gICAgICogQHJldHVybiB7bnVtYmVyfSAgICAgICAgICAgICAgUmV0dXJucyBkaXN0YW5jZSBiZXR3ZWVuIHEgYW5kIHBcbiAgICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheShxLCBwKSB7XG4gICAgICByZXR1cm4gX2tsZGl2KG1hdHJpeChxKSwgbWF0cml4KHApKTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkocSwgcCkge1xuICAgICAgcmV0dXJuIF9rbGRpdihxLCBtYXRyaXgocCkpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChxLCBwKSB7XG4gICAgICByZXR1cm4gX2tsZGl2KG1hdHJpeChxKSwgcCk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBNYXRyaXgnOiBmdW5jdGlvbiBNYXRyaXhNYXRyaXgocSwgcCkge1xuICAgICAgcmV0dXJuIF9rbGRpdihxLCBwKTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9rbGRpdihxLCBwKSB7XG4gICAgdmFyIHBsZW5ndGggPSBwLnNpemUoKS5sZW5ndGg7XG4gICAgdmFyIHFsZW5ndGggPSBxLnNpemUoKS5sZW5ndGg7XG5cbiAgICBpZiAocGxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZmlyc3Qgb2JqZWN0IG11c3QgYmUgb25lIGRpbWVuc2lvbmFsJyk7XG4gICAgfVxuXG4gICAgaWYgKHFsZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3NlY29uZCBvYmplY3QgbXVzdCBiZSBvbmUgZGltZW5zaW9uYWwnKTtcbiAgICB9XG5cbiAgICBpZiAocGxlbmd0aCAhPT0gcWxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdMZW5ndGggb2YgdHdvIHZlY3RvcnMgbXVzdCBiZSBlcXVhbCcpO1xuICAgIH0gLy8gQmVmb3JlIGNhbGN1bGF0aW9uLCBhcHBseSBub3JtYWxpemF0aW9uXG5cblxuICAgIHZhciBzdW1xID0gc3VtKHEpO1xuXG4gICAgaWYgKHN1bXEgPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3VtIG9mIGVsZW1lbnRzIGluIGZpcnN0IG9iamVjdCBtdXN0IGJlIG5vbiB6ZXJvJyk7XG4gICAgfVxuXG4gICAgdmFyIHN1bXAgPSBzdW0ocCk7XG5cbiAgICBpZiAoc3VtcCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdW0gb2YgZWxlbWVudHMgaW4gc2Vjb25kIG9iamVjdCBtdXN0IGJlIG5vbiB6ZXJvJyk7XG4gICAgfVxuXG4gICAgdmFyIHFub3JtID0gZGl2aWRlKHEsIHN1bShxKSk7XG4gICAgdmFyIHBub3JtID0gZGl2aWRlKHAsIHN1bShwKSk7XG4gICAgdmFyIHJlc3VsdCA9IHN1bShtdWx0aXBseShxbm9ybSwgbG9nKGRvdERpdmlkZShxbm9ybSwgcG5vcm0pKSkpO1xuXG4gICAgaWYgKGlzTnVtZXJpYyhyZXN1bHQpKSB7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gTnVtYmVyLk5hTjtcbiAgICB9XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVLbGRpdmVyZ2VuY2UgPSBjcmVhdGVLbGRpdmVyZ2VuY2U7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU11bHRpbm9taWFsID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ211bHRpbm9taWFsJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZCcsICdkaXZpZGUnLCAnbXVsdGlwbHknLCAnZmFjdG9yaWFsJywgJ2lzSW50ZWdlcicsICdpc1Bvc2l0aXZlJ107XG52YXIgY3JlYXRlTXVsdGlub21pYWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWRkID0gX3JlZi5hZGQsXG4gICAgICBkaXZpZGUgPSBfcmVmLmRpdmlkZSxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGZhY3RvcmlhbCA9IF9yZWYuZmFjdG9yaWFsLFxuICAgICAgaXNJbnRlZ2VyID0gX3JlZi5pc0ludGVnZXIsXG4gICAgICBpc1Bvc2l0aXZlID0gX3JlZi5pc1Bvc2l0aXZlO1xuXG4gIC8qKlxuICAgKiBNdWx0aW5vbWlhbCBDb2VmZmljaWVudHMgY29tcHV0ZSB0aGUgbnVtYmVyIG9mIHdheXMgb2YgcGlja2luZyBhMSwgYTIsIC4uLiwgYWkgdW5vcmRlcmVkIG91dGNvbWVzIGZyb20gYG5gIHBvc3NpYmlsaXRpZXMuXG4gICAqXG4gICAqIG11bHRpbm9taWFsIHRha2VzIG9uZSBhcnJheSBvZiBpbnRlZ2VycyBhcyBhbiBhcmd1bWVudC5cbiAgICogVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogZXZlcnkgYWkgPD0gMFxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLm11bHRpbm9taWFsKGEpIC8vIGEgaXMgYW4gYXJyYXkgdHlwZVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5tdWx0aW5vbWlhbChbMSwyLDFdKSAvLyByZXR1cm5zIDEyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb21iaW5hdGlvbnMsIGZhY3RvcmlhbFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcltdIHwgQmlnTnVtYmVyW119IGEgICAgSW50ZWdlciBudW1iZXJzIG9mIG9iamVjdHMgaW4gdGhlIHN1YnNldFxuICAgKiBAcmV0dXJuIHtOdW1iZXIgfCBCaWdOdW1iZXJ9ICAgICAgICAgTXVsdGlub21pYWwgY29lZmZpY2llbnQuXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KGEpIHtcbiAgICAgIHZhciBzdW0gPSAwO1xuICAgICAgdmFyIGRlbm9tID0gMTtcbiAgICAgICgwLCBfY29sbGVjdGlvbi5kZWVwRm9yRWFjaCkoYSwgZnVuY3Rpb24gKGFpKSB7XG4gICAgICAgIGlmICghaXNJbnRlZ2VyKGFpKSB8fCAhaXNQb3NpdGl2ZShhaSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIG11bHRpbm9taWFsJyk7XG4gICAgICAgIH1cblxuICAgICAgICBzdW0gPSBhZGQoc3VtLCBhaSk7XG4gICAgICAgIGRlbm9tID0gbXVsdGlwbHkoZGVub20sIGZhY3RvcmlhbChhaSkpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gZGl2aWRlKGZhY3RvcmlhbChzdW0pLCBkZW5vbSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVNdWx0aW5vbWlhbCA9IGNyZWF0ZU11bHRpbm9taWFsOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVQZXJtdXRhdGlvbnMgPSB2b2lkIDA7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9wcm9kdWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3Byb2R1Y3RcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdwZXJtdXRhdGlvbnMnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnZmFjdG9yaWFsJ107XG52YXIgY3JlYXRlUGVybXV0YXRpb25zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGZhY3RvcmlhbCA9IF9yZWYuZmFjdG9yaWFsO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBudW1iZXIgb2Ygd2F5cyBvZiBvYnRhaW5pbmcgYW4gb3JkZXJlZCBzdWJzZXQgb2YgYGtgIGVsZW1lbnRzXG4gICAqIGZyb20gYSBzZXQgb2YgYG5gIGVsZW1lbnRzLlxuICAgKlxuICAgKiBQZXJtdXRhdGlvbnMgb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy5cbiAgICogVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogayA8PSBuLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLnBlcm11dGF0aW9ucyhuKVxuICAgKiAgICAgbWF0aC5wZXJtdXRhdGlvbnMobiwgaylcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgucGVybXV0YXRpb25zKDUpICAgICAvLyAxMjBcbiAgICogICAgbWF0aC5wZXJtdXRhdGlvbnMoNSwgMykgIC8vIDYwXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb21iaW5hdGlvbnMsIGNvbWJpbmF0aW9uc1dpdGhSZXAsIGZhY3RvcmlhbFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gbiAgIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0b3RhbFxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gW2tdIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc3Vic2V0XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlcn0gICAgVGhlIG51bWJlciBvZiBwZXJtdXRhdGlvbnNcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciB8IEJpZ051bWJlcic6IGZhY3RvcmlhbCxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIobiwgaykge1xuICAgICAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKG4pIHx8IG4gPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Bvc2l0aXZlIGludGVnZXIgdmFsdWUgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gcGVybXV0YXRpb25zJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShrKSB8fCBrIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIHBlcm11dGF0aW9ucycpO1xuICAgICAgfVxuXG4gICAgICBpZiAoayA+IG4pIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2Vjb25kIGFyZ3VtZW50IGsgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gZmlyc3QgYXJndW1lbnQgbicpO1xuICAgICAgfSAvLyBQZXJtdXRlIG4gb2JqZWN0cywgayBhdCBhIHRpbWVcblxuXG4gICAgICByZXR1cm4gKDAsIF9wcm9kdWN0LnByb2R1Y3QpKG4gLSBrICsgMSwgbik7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIobiwgaykge1xuICAgICAgdmFyIHJlc3VsdCwgaTtcblxuICAgICAgaWYgKCFpc1Bvc2l0aXZlSW50ZWdlcihuKSB8fCAhaXNQb3NpdGl2ZUludGVnZXIoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBwZXJtdXRhdGlvbnMnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGsuZ3QobikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignc2Vjb25kIGFyZ3VtZW50IGsgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gZmlyc3QgYXJndW1lbnQgbicpO1xuICAgICAgfVxuXG4gICAgICB2YXIgb25lID0gbi5tdWwoMCkuYWRkKDEpO1xuICAgICAgcmVzdWx0ID0gb25lO1xuXG4gICAgICBmb3IgKGkgPSBuLm1pbnVzKGspLnBsdXMoMSk7IGkubHRlKG4pOyBpID0gaS5wbHVzKDEpKSB7XG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC50aW1lcyhpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IC8vIFRPRE86IGltcGxlbWVudCBzdXBwb3J0IGZvciBjb2xsZWN0aW9uIGluIHBlcm11dGF0aW9uc1xuXG4gIH0pO1xufSk7XG4vKipcbiAqIFRlc3Qgd2hldGhlciBCaWdOdW1iZXIgbiBpcyBhIHBvc2l0aXZlIGludGVnZXJcbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSBuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gaXNQb3NpdGl2ZUludGVnZXJcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZVBlcm11dGF0aW9ucyA9IGNyZWF0ZVBlcm11dGF0aW9ucztcblxuZnVuY3Rpb24gaXNQb3NpdGl2ZUludGVnZXIobikge1xuICByZXR1cm4gbi5pc0ludGVnZXIoKSAmJiBuLmd0ZSgwKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUGlja1JhbmRvbSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfc2VlZGVkUk5HID0gcmVxdWlyZShcIi4vdXRpbC9zZWVkZWRSTkdcIik7XG5cbnZhciBuYW1lID0gJ3BpY2tSYW5kb20nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJz9vbiddO1xudmFyIGNyZWF0ZVBpY2tSYW5kb20gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBvbiA9IF9yZWYub247XG4gIC8vIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3JcbiAgdmFyIHJuZyA9ICgwLCBfc2VlZGVkUk5HLmNyZWF0ZVJuZykoY29uZmlnLnJhbmRvbVNlZWQpO1xuXG4gIGlmIChvbikge1xuICAgIG9uKCdjb25maWcnLCBmdW5jdGlvbiAoY3VyciwgcHJldikge1xuICAgICAgaWYgKGN1cnIucmFuZG9tU2VlZCAhPT0gcHJldi5yYW5kb21TZWVkKSB7XG4gICAgICAgIHJuZyA9ICgwLCBfc2VlZGVkUk5HLmNyZWF0ZVJuZykoY3Vyci5yYW5kb21TZWVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogUmFuZG9tIHBpY2sgb25lIG9yIG1vcmUgdmFsdWVzIGZyb20gYSBvbmUgZGltZW5zaW9uYWwgYXJyYXkuXG4gICAqIEFycmF5IGVsZW1lbnRzIGFyZSBwaWNrZWQgdXNpbmcgYSByYW5kb20gZnVuY3Rpb24gd2l0aCB1bmlmb3JtIG9yIHdlaWdodGVkIGRpc3RyaWJ1dGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5waWNrUmFuZG9tKGFycmF5KVxuICAgKiAgICAgbWF0aC5waWNrUmFuZG9tKGFycmF5LCBudW1iZXIpXG4gICAqICAgICBtYXRoLnBpY2tSYW5kb20oYXJyYXksIHdlaWdodHMpXG4gICAqICAgICBtYXRoLnBpY2tSYW5kb20oYXJyYXksIG51bWJlciwgd2VpZ2h0cylcbiAgICogICAgIG1hdGgucGlja1JhbmRvbShhcnJheSwgd2VpZ2h0cywgbnVtYmVyKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgucGlja1JhbmRvbShbMywgNiwgMTIsIDJdKSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgb25lIG9mIHRoZSB2YWx1ZXMgaW4gdGhlIGFycmF5XG4gICAqICAgICBtYXRoLnBpY2tSYW5kb20oWzMsIDYsIDEyLCAyXSwgMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIGFuIGFycmF5IG9mIHR3byBvZiB0aGUgdmFsdWVzIGluIHRoZSBhcnJheVxuICAgKiAgICAgbWF0aC5waWNrUmFuZG9tKFszLCA2LCAxMiwgMl0sIFsxLCAzLCAyLCAxXSkgICAgLy8gcmV0dXJucyBvbmUgb2YgdGhlIHZhbHVlcyBpbiB0aGUgYXJyYXkgd2l0aCB3ZWlnaHRlZCBkaXN0cmlidXRpb25cbiAgICogICAgIG1hdGgucGlja1JhbmRvbShbMywgNiwgMTIsIDJdLCAyLCBbMSwgMywgMiwgMV0pIC8vIHJldHVybnMgYW4gYXJyYXkgb2YgdHdvIG9mIHRoZSB2YWx1ZXMgaW4gdGhlIGFycmF5IHdpdGggd2VpZ2h0ZWQgZGlzdHJpYnV0aW9uXG4gICAqICAgICBtYXRoLnBpY2tSYW5kb20oWzMsIDYsIDEyLCAyXSwgWzEsIDMsIDIsIDFdLCAyKSAvLyByZXR1cm5zIGFuIGFycmF5IG9mIHR3byBvZiB0aGUgdmFsdWVzIGluIHRoZSBhcnJheSB3aXRoIHdlaWdodGVkIGRpc3RyaWJ1dGlvblxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHJhbmRvbSwgcmFuZG9tSW50XG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IGFycmF5ICAgICBBIG9uZSBkaW1lbnNpb25hbCBhcnJheVxuICAgKiBAcGFyYW0ge0ludH0gbnVtYmVyICAgICAgICAgICAgICAgQW4gaW50IG9yIGZsb2F0XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IHdlaWdodHMgICBBbiBhcnJheSBvZiBpbnRzIG9yIGZsb2F0c1xuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBBcnJheX0gICAgICAgICAgUmV0dXJucyBhIHNpbmdsZSByYW5kb20gdmFsdWUgZnJvbSBhcnJheSB3aGVuIG51bWJlciBpcyAxIG9yIHVuZGVmaW5lZC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgY29uZmlndXJlZCBudW1iZXIgb2YgZWxlbWVudHMgd2hlbiBudW1iZXIgaXMgPiAxLlxuICAgKi9cblxuXG4gIHJldHVybiB0eXBlZCh7XG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgocG9zc2libGVzKSB7XG4gICAgICByZXR1cm4gX3BpY2tSYW5kb20ocG9zc2libGVzKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXIocG9zc2libGVzLCBudW1iZXIpIHtcbiAgICAgIHJldHVybiBfcGlja1JhbmRvbShwb3NzaWJsZXMsIG51bWJlciwgdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBBcnJheU1hdHJpeEFycmF5KHBvc3NpYmxlcywgd2VpZ2h0cykge1xuICAgICAgcmV0dXJuIF9waWNrUmFuZG9tKHBvc3NpYmxlcywgdW5kZWZpbmVkLCB3ZWlnaHRzKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgQXJyYXkgfCBNYXRyaXgsIG51bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4QXJyYXlNYXRyaXhOdW1iZXIocG9zc2libGVzLCB3ZWlnaHRzLCBudW1iZXIpIHtcbiAgICAgIHJldHVybiBfcGlja1JhbmRvbShwb3NzaWJsZXMsIG51bWJlciwgd2VpZ2h0cyk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlckFycmF5TWF0cml4KHBvc3NpYmxlcywgbnVtYmVyLCB3ZWlnaHRzKSB7XG4gICAgICByZXR1cm4gX3BpY2tSYW5kb20ocG9zc2libGVzLCBudW1iZXIsIHdlaWdodHMpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gX3BpY2tSYW5kb20ocG9zc2libGVzLCBudW1iZXIsIHdlaWdodHMpIHtcbiAgICB2YXIgc2luZ2xlID0gdHlwZW9mIG51bWJlciA9PT0gJ3VuZGVmaW5lZCc7XG5cbiAgICBpZiAoc2luZ2xlKSB7XG4gICAgICBudW1iZXIgPSAxO1xuICAgIH1cblxuICAgIHBvc3NpYmxlcyA9IHBvc3NpYmxlcy52YWx1ZU9mKCk7IC8vIGdldCBBcnJheVxuXG4gICAgaWYgKHdlaWdodHMpIHtcbiAgICAgIHdlaWdodHMgPSB3ZWlnaHRzLnZhbHVlT2YoKTsgLy8gZ2V0IEFycmF5XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfYXJyYXkuYXJyYXlTaXplKShwb3NzaWJsZXMpLmxlbmd0aCA+IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25seSBvbmUgZGltZW5zaW9uYWwgdmVjdG9ycyBzdXBwb3J0ZWQnKTtcbiAgICB9XG5cbiAgICB2YXIgdG90YWxXZWlnaHRzID0gMDtcblxuICAgIGlmICh0eXBlb2Ygd2VpZ2h0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGlmICh3ZWlnaHRzLmxlbmd0aCAhPT0gcG9zc2libGVzLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlaWdodHMgbXVzdCBoYXZlIHRoZSBzYW1lIGxlbmd0aCBhcyBwb3NzaWJsZXMnKTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHdlaWdodHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKSh3ZWlnaHRzW2ldKSB8fCB3ZWlnaHRzW2ldIDwgMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignV2VpZ2h0cyBtdXN0IGJlIGFuIGFycmF5IG9mIHBvc2l0aXZlIG51bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRvdGFsV2VpZ2h0cyArPSB3ZWlnaHRzW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciBsZW5ndGggPSBwb3NzaWJsZXMubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH0gZWxzZSBpZiAobnVtYmVyID49IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIG51bWJlciA+IDEgPyBwb3NzaWJsZXMgOiBwb3NzaWJsZXNbMF07XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBwaWNrO1xuXG4gICAgd2hpbGUgKHJlc3VsdC5sZW5ndGggPCBudW1iZXIpIHtcbiAgICAgIGlmICh0eXBlb2Ygd2VpZ2h0cyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcGljayA9IHBvc3NpYmxlc1tNYXRoLmZsb29yKHJuZygpICogbGVuZ3RoKV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmFuZEtleSA9IHJuZygpICogdG90YWxXZWlnaHRzO1xuXG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgX2xlbiA9IHBvc3NpYmxlcy5sZW5ndGg7IF9pIDwgX2xlbjsgX2krKykge1xuICAgICAgICAgIHJhbmRLZXkgLT0gd2VpZ2h0c1tfaV07XG5cbiAgICAgICAgICBpZiAocmFuZEtleSA8IDApIHtcbiAgICAgICAgICAgIHBpY2sgPSBwb3NzaWJsZXNbX2ldO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXN1bHQuaW5kZXhPZihwaWNrKSA9PT0gLTEpIHtcbiAgICAgICAgcmVzdWx0LnB1c2gocGljayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpbmdsZSA/IHJlc3VsdFswXSA6IHJlc3VsdDsgLy8gVE9ETzogcmV0dXJuIG1hdHJpeCB3aGVuIGlucHV0IHdhcyBhIG1hdHJpeFxuICAgIC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciBtdWx0aSBkaW1lbnNpb25hbCBtYXRyaWNlc1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlUGlja1JhbmRvbSA9IGNyZWF0ZVBpY2tSYW5kb207IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhbmRvbU51bWJlciA9IGV4cG9ydHMuY3JlYXRlUmFuZG9tID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9zZWVkZWRSTkcgPSByZXF1aXJlKFwiLi91dGlsL3NlZWRlZFJOR1wiKTtcblxudmFyIF9yYW5kb21NYXRyaXgyID0gcmVxdWlyZShcIi4vdXRpbC9yYW5kb21NYXRyaXhcIik7XG5cbnZhciBuYW1lID0gJ3JhbmRvbSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnP29uJ107XG52YXIgY3JlYXRlUmFuZG9tID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgb24gPSBfcmVmLm9uO1xuICAvLyBzZWVkZWQgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yXG4gIHZhciBybmcgPSAoMCwgX3NlZWRlZFJORy5jcmVhdGVSbmcpKGNvbmZpZy5yYW5kb21TZWVkKTtcblxuICBpZiAob24pIHtcbiAgICBvbignY29uZmlnJywgZnVuY3Rpb24gKGN1cnIsIHByZXYpIHtcbiAgICAgIGlmIChjdXJyLnJhbmRvbVNlZWQgIT09IHByZXYucmFuZG9tU2VlZCkge1xuICAgICAgICBybmcgPSAoMCwgX3NlZWRlZFJORy5jcmVhdGVSbmcpKGN1cnIucmFuZG9tU2VlZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiBhIHJhbmRvbSBudW1iZXIgbGFyZ2VyIG9yIGVxdWFsIHRvIGBtaW5gIGFuZCBzbWFsbGVyIHRoYW4gYG1heGBcbiAgICogdXNpbmcgYSB1bmlmb3JtIGRpc3RyaWJ1dGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5yYW5kb20oKSAgICAgICAgICAgICAgICAvLyBnZW5lcmF0ZSBhIHJhbmRvbSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxXG4gICAqICAgICBtYXRoLnJhbmRvbShtYXgpICAgICAgICAgICAgIC8vIGdlbmVyYXRlIGEgcmFuZG9tIG51bWJlciBiZXR3ZWVuIDAgYW5kIG1heFxuICAgKiAgICAgbWF0aC5yYW5kb20obWluLCBtYXgpICAgICAgICAvLyBnZW5lcmF0ZSBhIHJhbmRvbSBudW1iZXIgYmV0d2VlbiBtaW4gYW5kIG1heFxuICAgKiAgICAgbWF0aC5yYW5kb20oc2l6ZSkgICAgICAgICAgICAvLyBnZW5lcmF0ZSBhIG1hdHJpeCB3aXRoIHJhbmRvbSBudW1iZXJzIGJldHdlZW4gMCBhbmQgMVxuICAgKiAgICAgbWF0aC5yYW5kb20oc2l6ZSwgbWF4KSAgICAgICAvLyBnZW5lcmF0ZSBhIG1hdHJpeCB3aXRoIHJhbmRvbSBudW1iZXJzIGJldHdlZW4gMCBhbmQgbWF4XG4gICAqICAgICBtYXRoLnJhbmRvbShzaXplLCBtaW4sIG1heCkgIC8vIGdlbmVyYXRlIGEgbWF0cml4IHdpdGggcmFuZG9tIG51bWJlcnMgYmV0d2VlbiBtaW4gYW5kIG1heFxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgucmFuZG9tKCkgICAgICAgLy8gcmV0dXJucyBhIHJhbmRvbSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxXG4gICAqICAgICBtYXRoLnJhbmRvbSgxMDApICAgIC8vIHJldHVybnMgYSByYW5kb20gbnVtYmVyIGJldHdlZW4gMCBhbmQgMTAwXG4gICAqICAgICBtYXRoLnJhbmRvbSgzMCwgNDApIC8vIHJldHVybnMgYSByYW5kb20gbnVtYmVyIGJldHdlZW4gMzAgYW5kIDQwXG4gICAqICAgICBtYXRoLnJhbmRvbShbMiwgM10pIC8vIHJldHVybnMgYSAyeDMgbWF0cml4IHdpdGggcmFuZG9tIG51bWJlcnMgYmV0d2VlbiAwIGFuZCAxXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgcmFuZG9tSW50LCBwaWNrUmFuZG9tXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IFtzaXplXSBJZiBwcm92aWRlZCwgYW4gYXJyYXkgb3IgbWF0cml4IHdpdGggZ2l2ZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgYW5kIGZpbGxlZCB3aXRoIHJhbmRvbSB2YWx1ZXMgaXMgcmV0dXJuZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttaW5dICBNaW5pbXVtIGJvdW5kYXJ5IGZvciB0aGUgcmFuZG9tIHZhbHVlLCBpbmNsdWRlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW21heF0gIE1heGltdW0gYm91bmRhcnkgZm9yIHRoZSByYW5kb20gdmFsdWUsIGV4Y2x1ZGVkXG4gICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSBBIHJhbmRvbSBudW1iZXJcbiAgICovXG5cblxuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIF9yYW5kb20oMCwgMSk7XG4gICAgfSxcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcihtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tKDAsIG1heCk7XG4gICAgfSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIobWluLCBtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tKG1pbiwgbWF4KTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHNpemUpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tTWF0cml4KHNpemUsIDAsIDEpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBudW1iZXInOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlcihzaXplLCBtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tTWF0cml4KHNpemUsIDAsIG1heCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJOdW1iZXIoc2l6ZSwgbWluLCBtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tTWF0cml4KHNpemUsIG1pbiwgbWF4KTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9yYW5kb21NYXRyaXgoc2l6ZSwgbWluLCBtYXgpIHtcbiAgICB2YXIgcmVzID0gKDAsIF9yYW5kb21NYXRyaXgyLnJhbmRvbU1hdHJpeCkoc2l6ZS52YWx1ZU9mKCksIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tKG1pbiwgbWF4KTtcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF9pcy5pc01hdHJpeCkoc2l6ZSkgPyBzaXplLmNyZWF0ZShyZXMpIDogcmVzO1xuICB9XG5cbiAgZnVuY3Rpb24gX3JhbmRvbShtaW4sIG1heCkge1xuICAgIHJldHVybiBtaW4gKyBybmcoKSAqIChtYXggLSBtaW4pO1xuICB9XG59KTsgLy8gbnVtYmVyIG9ubHkgaW1wbGVtZW50YXRpb24gb2YgcmFuZG9tLCBubyBtYXRyaXggc3VwcG9ydFxuLy8gVE9ETzogdGhlcmUgaXMgcXVpdGUgc29tZSBkdXBsaWNhdGUgY29kZSBpbiBib3RoIGNyZWF0ZVJhbmRvbSBhbmQgY3JlYXRlUmFuZG9tTnVtYmVyLCBjYW4gd2UgaW1wcm92ZSB0aGF0P1xuXG5leHBvcnRzLmNyZWF0ZVJhbmRvbSA9IGNyZWF0ZVJhbmRvbTtcbnZhciBjcmVhdGVSYW5kb21OdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCcsICdjb25maWcnLCAnP29uJ10sIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgdHlwZWQgPSBfcmVmMi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYyLmNvbmZpZyxcbiAgICAgIG9uID0gX3JlZjIub24sXG4gICAgICBtYXRyaXggPSBfcmVmMi5tYXRyaXg7XG4gIC8vIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3IxXG4gIHZhciBybmcgPSAoMCwgX3NlZWRlZFJORy5jcmVhdGVSbmcpKGNvbmZpZy5yYW5kb21TZWVkKTtcblxuICBpZiAob24pIHtcbiAgICBvbignY29uZmlnJywgZnVuY3Rpb24gKGN1cnIsIHByZXYpIHtcbiAgICAgIGlmIChjdXJyLnJhbmRvbVNlZWQgIT09IHByZXYucmFuZG9tU2VlZCkge1xuICAgICAgICBybmcgPSAoMCwgX3NlZWRlZFJORy5jcmVhdGVSbmcpKGN1cnIucmFuZG9tU2VlZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIF9yYW5kb20oMCwgMSk7XG4gICAgfSxcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcihtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tKDAsIG1heCk7XG4gICAgfSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIobWluLCBtYXgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tKG1pbiwgbWF4KTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9yYW5kb20obWluLCBtYXgpIHtcbiAgICByZXR1cm4gbWluICsgcm5nKCkgKiAobWF4IC0gbWluKTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhbmRvbU51bWJlciA9IGNyZWF0ZVJhbmRvbU51bWJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmFuZG9tSW50ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9yYW5kb21NYXRyaXggPSByZXF1aXJlKFwiLi91dGlsL3JhbmRvbU1hdHJpeFwiKTtcblxudmFyIF9zZWVkZWRSTkcgPSByZXF1aXJlKFwiLi91dGlsL3NlZWRlZFJOR1wiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIG5hbWUgPSAncmFuZG9tSW50JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICc/b24nXTtcbnZhciBjcmVhdGVSYW5kb21JbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBvbiA9IF9yZWYub247XG4gIC8vIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3JcbiAgdmFyIHJuZyA9ICgwLCBfc2VlZGVkUk5HLmNyZWF0ZVJuZykoY29uZmlnLnJhbmRvbVNlZWQpO1xuXG4gIGlmIChvbikge1xuICAgIG9uKCdjb25maWcnLCBmdW5jdGlvbiAoY3VyciwgcHJldikge1xuICAgICAgaWYgKGN1cnIucmFuZG9tU2VlZCAhPT0gcHJldi5yYW5kb21TZWVkKSB7XG4gICAgICAgIHJuZyA9ICgwLCBfc2VlZGVkUk5HLmNyZWF0ZVJuZykoY3Vyci5yYW5kb21TZWVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIGEgcmFuZG9tIGludGVnZXIgbnVtYmVyIGxhcmdlciBvciBlcXVhbCB0byBgbWluYCBhbmQgc21hbGxlciB0aGFuIGBtYXhgXG4gICAqIHVzaW5nIGEgdW5pZm9ybSBkaXN0cmlidXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgucmFuZG9tSW50KCkgICAgICAgICAgICAgICAgLy8gZ2VuZXJhdGUgYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDFcbiAgICogICAgIG1hdGgucmFuZG9tSW50KG1heCkgICAgICAgICAgICAgLy8gZ2VuZXJhdGUgYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIG1heFxuICAgKiAgICAgbWF0aC5yYW5kb21JbnQobWluLCBtYXgpICAgICAgICAvLyBnZW5lcmF0ZSBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXhcbiAgICogICAgIG1hdGgucmFuZG9tSW50KHNpemUpICAgICAgICAgICAgLy8gZ2VuZXJhdGUgYSBtYXRyaXggd2l0aCByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDFcbiAgICogICAgIG1hdGgucmFuZG9tSW50KHNpemUsIG1heCkgICAgICAgLy8gZ2VuZXJhdGUgYSBtYXRyaXggd2l0aCByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIG1heFxuICAgKiAgICAgbWF0aC5yYW5kb21JbnQoc2l6ZSwgbWluLCBtYXgpICAvLyBnZW5lcmF0ZSBhIG1hdHJpeCB3aXRoIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gbWluIGFuZCBtYXhcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnJhbmRvbUludCgxMDApICAgIC8vIHJldHVybnMgYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDEwMFxuICAgKiAgICAgbWF0aC5yYW5kb21JbnQoMzAsIDQwKSAvLyByZXR1cm5zIGEgcmFuZG9tIGludGVnZXIgYmV0d2VlbiAzMCBhbmQgNDBcbiAgICogICAgIG1hdGgucmFuZG9tSW50KFsyLCAzXSkgLy8gcmV0dXJucyBhIDJ4MyBtYXRyaXggd2l0aCByYW5kb20gaW50ZWdlcnMgYmV0d2VlbiAwIGFuZCAxXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgcmFuZG9tLCBwaWNrUmFuZG9tXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IFtzaXplXSBJZiBwcm92aWRlZCwgYW4gYXJyYXkgb3IgbWF0cml4IHdpdGggZ2l2ZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUgYW5kIGZpbGxlZCB3aXRoIHJhbmRvbSB2YWx1ZXMgaXMgcmV0dXJuZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttaW5dICBNaW5pbXVtIGJvdW5kYXJ5IGZvciB0aGUgcmFuZG9tIHZhbHVlLCBpbmNsdWRlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW21heF0gIE1heGltdW0gYm91bmRhcnkgZm9yIHRoZSByYW5kb20gdmFsdWUsIGV4Y2x1ZGVkXG4gICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSBBIHJhbmRvbSBpbnRlZ2VyIHZhbHVlXG4gICAqL1xuXG5cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tSW50KDAsIDEpO1xuICAgIH0sXG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIobWF4KSB7XG4gICAgICByZXR1cm4gX3JhbmRvbUludCgwLCBtYXgpO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKG1pbiwgbWF4KSB7XG4gICAgICByZXR1cm4gX3JhbmRvbUludChtaW4sIG1heCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChzaXplKSB7XG4gICAgICByZXR1cm4gX3JhbmRvbUludE1hdHJpeChzaXplLCAwLCAxKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXIoc2l6ZSwgbWF4KSB7XG4gICAgICByZXR1cm4gX3JhbmRvbUludE1hdHJpeChzaXplLCAwLCBtYXgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyTnVtYmVyKHNpemUsIG1pbiwgbWF4KSB7XG4gICAgICByZXR1cm4gX3JhbmRvbUludE1hdHJpeChzaXplLCBtaW4sIG1heCk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfcmFuZG9tSW50TWF0cml4KHNpemUsIG1pbiwgbWF4KSB7XG4gICAgdmFyIHJlcyA9ICgwLCBfcmFuZG9tTWF0cml4LnJhbmRvbU1hdHJpeCkoc2l6ZS52YWx1ZU9mKCksIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tSW50KG1pbiwgbWF4KTtcbiAgICB9KTtcbiAgICByZXR1cm4gKDAsIF9pcy5pc01hdHJpeCkoc2l6ZSkgPyBzaXplLmNyZWF0ZShyZXMpIDogcmVzO1xuICB9XG5cbiAgZnVuY3Rpb24gX3JhbmRvbUludChtaW4sIG1heCkge1xuICAgIHJldHVybiBNYXRoLmZsb29yKG1pbiArIHJuZygpICogKG1heCAtIG1pbikpO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlUmFuZG9tSW50ID0gY3JlYXRlUmFuZG9tSW50OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yYW5kb21NYXRyaXggPSByYW5kb21NYXRyaXg7XG5cbi8qKlxuICogVGhpcyBpcyBhIHV0aWwgZnVuY3Rpb24gZm9yIGdlbmVyYXRpbmcgYSByYW5kb20gbWF0cml4IHJlY3Vyc2l2ZWx5LlxuICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gcmFuZG9tXG4gKiBAcmV0dXJucyB7QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHJhbmRvbU1hdHJpeChzaXplLCByYW5kb20pIHtcbiAgdmFyIGRhdGEgPSBbXTtcbiAgc2l6ZSA9IHNpemUuc2xpY2UoMCk7XG5cbiAgaWYgKHNpemUubGVuZ3RoID4gMSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSBzaXplLnNoaWZ0KCk7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgZGF0YS5wdXNoKHJhbmRvbU1hdHJpeChzaXplLCByYW5kb20pKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIgX2kgPSAwLCBfbGVuZ3RoID0gc2l6ZS5zaGlmdCgpOyBfaSA8IF9sZW5ndGg7IF9pKyspIHtcbiAgICAgIGRhdGEucHVzaChyYW5kb20oKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRhdGE7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJuZyA9IGNyZWF0ZVJuZztcblxudmFyIF9zZWVkUmFuZG9tID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwic2VlZC1yYW5kb21cIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuLy8gY3JlYXRlIGEgcmFuZG9tIHNlZWQgaGVyZSB0byBwcmV2ZW50IGFuIGluZmluaXRlIGxvb3AgZnJvbSBzZWVkLXJhbmRvbVxuLy8gaW5zaWRlIHRoZSBmYWN0b3J5LiBSZWFzb24gaXMgdGhhdCBtYXRoLnJhbmRvbSBpcyBkZWZpbmVkIGFzIGEgZ2V0dGVyL3NldHRlclxuLy8gYW5kIHNlZWQtcmFuZG9tIGdlbmVyYXRlcyBhIHNlZWQgZnJvbSB0aGUgbG9jYWwgZW50cm9weSBieSByZWFkaW5nIGV2ZXJ5XG4vLyBkZWZpbmVkIG9iamVjdCBpbmNsdWRpbmcgYG1hdGhgIGl0c2VsZi4gVGhhdCBtZWFucyB0aGF0IHdoaWxzdCBnZXR0aW5nXG4vLyBtYXRoLnJhbmRvbSwgaXQgdHJpZXMgdG8gZ2V0IG1hdGgucmFuZG9tLCBldGMuLi4gYW4gaW5maW5pdGUgbG9vcC5cbi8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vRm9yYmVzTGluZGVzYXkvc2VlZC1yYW5kb20vaXNzdWVzLzZcbnZhciBzaW5nbGV0b25SYW5kb20gPSAvKiAjX19QVVJFX18gKi8oMCwgX3NlZWRSYW5kb21bXCJkZWZhdWx0XCJdKSgpO1xuXG5mdW5jdGlvbiBjcmVhdGVSbmcocmFuZG9tU2VlZCkge1xuICB2YXIgcmFuZG9tOyAvLyBjcmVhdGUgYSBuZXcgcmFuZG9tIGdlbmVyYXRvciB3aXRoIGdpdmVuIHNlZWRcblxuICBmdW5jdGlvbiBzZXRTZWVkKHNlZWQpIHtcbiAgICByYW5kb20gPSBzZWVkID09PSBudWxsID8gc2luZ2xldG9uUmFuZG9tIDogKDAsIF9zZWVkUmFuZG9tW1wiZGVmYXVsdFwiXSkoU3RyaW5nKHNlZWQpKTtcbiAgfSAvLyBpbml0aWFsaXplIGEgc2VlZGVkIHBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRvciB3aXRoIGNvbmZpZydzIHJhbmRvbSBzZWVkXG5cblxuICBzZXRTZWVkKHJhbmRvbVNlZWQpOyAvLyB3cmFwcGVyIGZ1bmN0aW9uIHNvIHRoZSBybmcgY2FuIGJlIHVwZGF0ZWQgdmlhIGdlbmVyYXRvclxuXG4gIGZ1bmN0aW9uIHJuZygpIHtcbiAgICByZXR1cm4gcmFuZG9tKCk7XG4gIH1cblxuICByZXR1cm4gcm5nO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wYXJlTnVtYmVyID0gZXhwb3J0cy5jcmVhdGVDb21wYXJlID0gdm9pZCAwO1xuXG52YXIgX25lYXJseUVxdWFsID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9uZWFybHlFcXVhbFwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDNcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMlwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNVwiKTtcblxudmFyIG5hbWUgPSAnY29tcGFyZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ0JpZ051bWJlcicsICdGcmFjdGlvbicsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZUNvbXBhcmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgRnJhY3Rpb24gPSBfcmVmLkZyYWN0aW9uLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA1ID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTA1KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBDb21wYXJlIHR3byB2YWx1ZXMuIFJldHVybnMgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS5cbiAgICpcbiAgICogeCBhbmQgeSBhcmUgY29uc2lkZXJlZCBlcXVhbCB3aGVuIHRoZSByZWxhdGl2ZSBkaWZmZXJlbmNlIGJldHdlZW4geCBhbmQgeVxuICAgKiBpcyBzbWFsbGVyIHRoYW4gdGhlIGNvbmZpZ3VyZWQgZXBzaWxvbi4gVGhlIGZ1bmN0aW9uIGNhbm5vdCBiZSB1c2VkIHRvXG4gICAqIGNvbXBhcmUgdmFsdWVzIHNtYWxsZXIgdGhhbiBhcHByb3hpbWF0ZWx5IDIuMjJlLTE2LlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKiBTdHJpbmdzIGFyZSBjb21wYXJlZCBieSB0aGVpciBudW1lcmljYWwgdmFsdWUuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmUoNiwgMSkgICAgICAgICAgIC8vIHJldHVybnMgMVxuICAgKiAgICBtYXRoLmNvbXBhcmUoMiwgMykgICAgICAgICAgIC8vIHJldHVybnMgLTFcbiAgICogICAgbWF0aC5jb21wYXJlKDcsIDcpICAgICAgICAgICAvLyByZXR1cm5zIDBcbiAgICogICAgbWF0aC5jb21wYXJlKCcxMCcsICcyJykgICAgICAvLyByZXR1cm5zIDFcbiAgICogICAgbWF0aC5jb21wYXJlKCcxMDAwJywgJzFlMycpICAvLyByZXR1cm5zIDBcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGgudW5pdCgnNSBjbScpXG4gICAqICAgIGNvbnN0IGIgPSBtYXRoLnVuaXQoJzQwIG1tJylcbiAgICogICAgbWF0aC5jb21wYXJlKGEsIGIpICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlKDIsIFsxLCAyLCAzXSkgICAvLyByZXR1cm5zIFsxLCAwLCAtMV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGVxdWFsLCB1bmVxdWFsLCBzbWFsbGVyLCBzbWFsbGVyRXEsIGxhcmdlciwgbGFyZ2VyRXEsIGNvbXBhcmVOYXR1cmFsLCBjb21wYXJlVGV4dFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQXJyYXkgfCBNYXRyaXh9IFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbjpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS5cbiAgICovXG5cbiAgdmFyIGNvbXBhcmUgPSB0eXBlZChuYW1lLCB7XG4gICAgJ2Jvb2xlYW4sIGJvb2xlYW4nOiBmdW5jdGlvbiBib29sZWFuQm9vbGVhbih4LCB5KSB7XG4gICAgICByZXR1cm4geCA9PT0geSA/IDAgOiB4ID4geSA/IDEgOiAtMTtcbiAgICB9LFxuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKSA/IDAgOiB4ID4geSA/IDEgOiAtMTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pID8gbmV3IEJpZ051bWJlcigwKSA6IG5ldyBCaWdOdW1iZXIoeC5jbXAoeSkpO1xuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkge1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih4LmNvbXBhcmUoeSkpO1xuICAgIH0sXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG9yZGVyaW5nIHJlbGF0aW9uIGlzIGRlZmluZWQgZm9yIGNvbXBsZXggbnVtYmVycycpO1xuICAgIH0sXG4gICAgJ1VuaXQsIFVuaXQnOiBmdW5jdGlvbiBVbml0VW5pdCh4LCB5KSB7XG4gICAgICBpZiAoIXguZXF1YWxCYXNlKHkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXBhcmUgdW5pdHMgd2l0aCBkaWZmZXJlbnQgYmFzZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tcGFyZSh4LnZhbHVlLCB5LnZhbHVlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDUoeCwgeSwgY29tcGFyZSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCBjb21wYXJlLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIGNvbXBhcmUsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBjb21wYXJlKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBjb21wYXJlKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBjb21wYXJlKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBjb21wYXJlKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHgsIHksIGNvbXBhcmUsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGNvbXBhcmUsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgY29tcGFyZSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBjb21wYXJlLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgY29tcGFyZSwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgY29tcGFyZSwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjb21wYXJlO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNvbXBhcmUgPSBjcmVhdGVDb21wYXJlO1xudmFyIGNyZWF0ZUNvbXBhcmVOdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCcsICdjb25maWcnXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZjIuY29uZmlnO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKSA/IDAgOiB4ID4geSA/IDEgOiAtMTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNvbXBhcmVOdW1iZXIgPSBjcmVhdGVDb21wYXJlTnVtYmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wYXJlTmF0dXJhbCA9IHZvaWQgMDtcblxudmFyIF9qYXZhc2NyaXB0TmF0dXJhbFNvcnQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJqYXZhc2NyaXB0LW5hdHVyYWwtc29ydFwiKSk7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxudmFyIG5hbWUgPSAnY29tcGFyZU5hdHVyYWwnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29tcGFyZSddO1xudmFyIGNyZWF0ZUNvbXBhcmVOYXR1cmFsID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbXBhcmUgPSBfcmVmLmNvbXBhcmU7XG4gIHZhciBjb21wYXJlQm9vbGVhbnMgPSBjb21wYXJlLnNpZ25hdHVyZXNbJ2Jvb2xlYW4sYm9vbGVhbiddO1xuICAvKipcbiAgICogQ29tcGFyZSB0d28gdmFsdWVzIG9mIGFueSB0eXBlIGluIGEgZGV0ZXJtaW5pc3RpYywgbmF0dXJhbCB3YXkuXG4gICAqXG4gICAqIEZvciBudW1lcmljIHZhbHVlcywgdGhlIGZ1bmN0aW9uIHdvcmtzIHRoZSBzYW1lIGFzIGBtYXRoLmNvbXBhcmVgLlxuICAgKiBGb3IgdHlwZXMgb2YgdmFsdWVzIHRoYXQgY2FuJ3QgYmUgY29tcGFyZWQgbWF0aGVtYXRpY2FsbHksXG4gICAqIHRoZSBmdW5jdGlvbiBjb21wYXJlcyBpbiBhIG5hdHVyYWwgd2F5LlxuICAgKlxuICAgKiBGb3IgbnVtZXJpYyB2YWx1ZXMsIHggYW5kIHkgYXJlIGNvbnNpZGVyZWQgZXF1YWwgd2hlbiB0aGUgcmVsYXRpdmVcbiAgICogZGlmZmVyZW5jZSBiZXR3ZWVuIHggYW5kIHkgaXMgc21hbGxlciB0aGFuIHRoZSBjb25maWd1cmVkIGVwc2lsb24uXG4gICAqIFRoZSBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCB0byBjb21wYXJlIHZhbHVlcyBzbWFsbGVyIHRoYW5cbiAgICogYXBwcm94aW1hdGVseSAyLjIyZS0xNi5cbiAgICpcbiAgICogRm9yIENvbXBsZXggbnVtYmVycywgZmlyc3QgdGhlIHJlYWwgcGFydHMgYXJlIGNvbXBhcmVkLiBJZiBlcXVhbCxcbiAgICogdGhlIGltYWdpbmFyeSBwYXJ0cyBhcmUgY29tcGFyZWQuXG4gICAqXG4gICAqIFN0cmluZ3MgYXJlIGNvbXBhcmVkIHdpdGggYSBuYXR1cmFsIHNvcnRpbmcgYWxnb3JpdGhtLCB3aGljaFxuICAgKiBvcmRlcnMgc3RyaW5ncyBpbiBhIFwibG9naWNcIiB3YXkgZm9sbG93aW5nIHNvbWUgaGV1cmlzdGljcy5cbiAgICogVGhpcyBkaWZmZXJzIGZyb20gdGhlIGZ1bmN0aW9uIGBjb21wYXJlYCwgd2hpY2ggY29udmVydHMgdGhlIHN0cmluZ1xuICAgKiBpbnRvIGEgbnVtZXJpYyB2YWx1ZSBhbmQgY29tcGFyZXMgdGhhdC4gVGhlIGZ1bmN0aW9uIGBjb21wYXJlVGV4dGBcbiAgICogb24gdGhlIG90aGVyIGhhbmQgY29tcGFyZXMgdGV4dCBsZXhpY2FsbHkuXG4gICAqXG4gICAqIEFycmF5cyBhbmQgTWF0cmljZXMgYXJlIGNvbXBhcmVkIHZhbHVlIGJ5IHZhbHVlIHVudGlsIHRoZXJlIGlzIGFuXG4gICAqIHVuZXF1YWwgcGFpciBvZiB2YWx1ZXMgZW5jb3VudGVyZWQuIE9iamVjdHMgYXJlIGNvbXBhcmVkIGJ5IHNvcnRlZFxuICAgKiBrZXlzIHVudGlsIHRoZSBrZXlzIG9yIHRoZWlyIHZhbHVlcyBhcmUgdW5lcXVhbC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKDYsIDEpICAgICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbCgyLCAzKSAgICAgICAgICAgICAgLy8gcmV0dXJucyAtMVxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKDcsIDcpICAgICAgICAgICAgICAvLyByZXR1cm5zIDBcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbCgnMTAnLCAnMicpICAgICAgICAgLy8gcmV0dXJucyAxXG4gICAqICAgIG1hdGguY29tcGFyZVRleHQoJzEwJywgJzInKSAgICAgICAgICAgIC8vIHJldHVybnMgLTFcbiAgICogICAgbWF0aC5jb21wYXJlKCcxMCcsICcyJykgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxXG4gICAqXG4gICAqICAgIG1hdGguY29tcGFyZU5hdHVyYWwoJ0Fuc3dlcjogMTAnLCAnQW5zd2VyOiAyJykgLy8gcmV0dXJucyAxXG4gICAqICAgIG1hdGguY29tcGFyZVRleHQoJ0Fuc3dlcjogMTAnLCAnQW5zd2VyOiAyJykgICAgLy8gcmV0dXJucyAtMVxuICAgKiAgICBtYXRoLmNvbXBhcmUoJ0Fuc3dlcjogMTAnLCAnQW5zd2VyOiAyJylcbiAgICogICAgICAgIC8vIEVycm9yOiBDYW5ub3QgY29udmVydCBcIkFuc3dlcjogMTBcIiB0byBhIG51bWJlclxuICAgKlxuICAgKiAgICBjb25zdCBhID0gbWF0aC51bml0KCc1IGNtJylcbiAgICogICAgY29uc3QgYiA9IG1hdGgudW5pdCgnNDAgbW0nKVxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKGEsIGIpICAgICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICpcbiAgICogICAgY29uc3QgYyA9IG1hdGguY29tcGxleCgnMiArIDNpJylcbiAgICogICAgY29uc3QgZCA9IG1hdGguY29tcGxleCgnMiArIDRpJylcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbChjLCBkKSAgICAgICAgICAgICAgLy8gcmV0dXJucyAtMVxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKFsxLCAyLCA0XSwgWzEsIDIsIDNdKSAvLyByZXR1cm5zIDFcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbChbMSwgMiwgM10sIFsxLCAyXSkgICAgLy8gcmV0dXJucyAxXG4gICAqICAgIG1hdGguY29tcGFyZU5hdHVyYWwoWzEsIDVdLCBbMSwgMiwgM10pICAgIC8vIHJldHVybnMgMVxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKFsxLCAyXSwgWzEsIDJdKSAgICAgICAvLyByZXR1cm5zIDBcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbCh7YTogMn0sIHthOiA0fSkgICAgICAgLy8gcmV0dXJucyAtMVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY29tcGFyZSwgY29tcGFyZVRleHRcbiAgICpcbiAgICogQHBhcmFtICB7Kn0geCBGaXJzdCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEBwYXJhbSAgeyp9IHkgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHJldHVybiB7bnVtYmVyfSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb246XG4gICAqICAgICAgICAgICAgICAgICAgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS5cbiAgICovXG5cbiAgdmFyIGNvbXBhcmVOYXR1cmFsID0gdHlwZWQobmFtZSwge1xuICAgICdhbnksIGFueSc6IGZ1bmN0aW9uIGFueUFueSh4LCB5KSB7XG4gICAgICB2YXIgdHlwZVggPSAoMCwgX2lzLnR5cGVPZikoeCk7XG4gICAgICB2YXIgdHlwZVkgPSAoMCwgX2lzLnR5cGVPZikoeSk7XG4gICAgICB2YXIgYzsgLy8gbnVtZXJpYyB0eXBlc1xuXG4gICAgICBpZiAoKHR5cGVYID09PSAnbnVtYmVyJyB8fCB0eXBlWCA9PT0gJ0JpZ051bWJlcicgfHwgdHlwZVggPT09ICdGcmFjdGlvbicpICYmICh0eXBlWSA9PT0gJ251bWJlcicgfHwgdHlwZVkgPT09ICdCaWdOdW1iZXInIHx8IHR5cGVZID09PSAnRnJhY3Rpb24nKSkge1xuICAgICAgICBjID0gY29tcGFyZSh4LCB5KTtcblxuICAgICAgICBpZiAoYy50b1N0cmluZygpICE9PSAnMCcpIHtcbiAgICAgICAgICAvLyBjIGNhbiBiZSBudW1iZXIsIEJpZ051bWJlciwgb3IgRnJhY3Rpb25cbiAgICAgICAgICByZXR1cm4gYyA+IDAgPyAxIDogLTE7IC8vIHJldHVybiBhIG51bWJlclxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAoMCwgX2phdmFzY3JpcHROYXR1cmFsU29ydFtcImRlZmF1bHRcIl0pKHR5cGVYLCB0eXBlWSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gbWF0cml4IHR5cGVzXG5cblxuICAgICAgaWYgKHR5cGVYID09PSAnQXJyYXknIHx8IHR5cGVYID09PSAnTWF0cml4JyB8fCB0eXBlWSA9PT0gJ0FycmF5JyB8fCB0eXBlWSA9PT0gJ01hdHJpeCcpIHtcbiAgICAgICAgYyA9IGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyh4LCB5KTtcblxuICAgICAgICBpZiAoYyAhPT0gMCkge1xuICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiAoMCwgX2phdmFzY3JpcHROYXR1cmFsU29ydFtcImRlZmF1bHRcIl0pKHR5cGVYLCB0eXBlWSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gaW4gY2FzZSBvZiBkaWZmZXJlbnQgdHlwZXMsIG9yZGVyIGJ5IG5hbWUgb2YgdHlwZSwgaS5lLiAnQmlnTnVtYmVyJyA8ICdDb21wbGV4J1xuXG5cbiAgICAgIGlmICh0eXBlWCAhPT0gdHlwZVkpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfamF2YXNjcmlwdE5hdHVyYWxTb3J0W1wiZGVmYXVsdFwiXSkodHlwZVgsIHR5cGVZKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVYID09PSAnQ29tcGxleCcpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVDb21wbGV4TnVtYmVycyh4LCB5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVYID09PSAnVW5pdCcpIHtcbiAgICAgICAgaWYgKHguZXF1YWxCYXNlKHkpKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbXBhcmVOYXR1cmFsKHgudmFsdWUsIHkudmFsdWUpO1xuICAgICAgICB9IC8vIGNvbXBhcmUgYnkgdW5pdHNcblxuXG4gICAgICAgIHJldHVybiBjb21wYXJlQXJyYXlzKHguZm9ybWF0VW5pdHMoKSwgeS5mb3JtYXRVbml0cygpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVYID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVCb29sZWFucyh4LCB5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVYID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gKDAsIF9qYXZhc2NyaXB0TmF0dXJhbFNvcnRbXCJkZWZhdWx0XCJdKSh4LCB5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVYID09PSAnT2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gY29tcGFyZU9iamVjdHMoeCwgeSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlWCA9PT0gJ251bGwnKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZVggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfSAvLyB0aGlzIHNob3VsZCBub3Qgb2NjdXIuLi5cblxuXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbnN1cHBvcnRlZCB0eXBlIG9mIHZhbHVlIFwiJyArIHR5cGVYICsgJ1wiJyk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENvbXBhcmUgbWl4ZWQgbWF0cml4L2FycmF5IHR5cGVzLCBieSBjb252ZXJ0aW5nIHRvIHNhbWUtc2hhcGVkIGFycmF5LlxuICAgKiBUaGlzIGNvbXBhcmF0b3IgaXMgbm9uLWRldGVybWluaXN0aWMgcmVnYXJkaW5nIGlucHV0IHR5cGVzLlxuICAgKiBAcGFyYW0ge0FycmF5IHwgU3BhcnNlTWF0cml4IHwgRGVuc2VNYXRyaXggfCAqfSB4XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBTcGFyc2VNYXRyaXggfCBEZW5zZU1hdHJpeCB8ICp9IHlcbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29tcGFyaXNvbiByZXN1bHQ6IC0xLCAwLCBvciAxXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyh4LCB5KSB7XG4gICAgaWYgKCgwLCBfaXMuaXNTcGFyc2VNYXRyaXgpKHgpICYmICgwLCBfaXMuaXNTcGFyc2VNYXRyaXgpKHkpKSB7XG4gICAgICByZXR1cm4gY29tcGFyZUFycmF5cyh4LnRvSlNPTigpLnZhbHVlcywgeS50b0pTT04oKS52YWx1ZXMpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2lzLmlzU3BhcnNlTWF0cml4KSh4KSkge1xuICAgICAgLy8gbm90ZTogY29udmVydCB0byBhcnJheSBpcyBleHBlbnNpdmVcbiAgICAgIHJldHVybiBjb21wYXJlTWF0cmljZXNBbmRBcnJheXMoeC50b0FycmF5KCksIHkpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2lzLmlzU3BhcnNlTWF0cml4KSh5KSkge1xuICAgICAgLy8gbm90ZTogY29udmVydCB0byBhcnJheSBpcyBleHBlbnNpdmVcbiAgICAgIHJldHVybiBjb21wYXJlTWF0cmljZXNBbmRBcnJheXMoeCwgeS50b0FycmF5KCkpO1xuICAgIH0gLy8gY29udmVydCBEZW5zZUFycmF5IGludG8gQXJyYXlcblxuXG4gICAgaWYgKCgwLCBfaXMuaXNEZW5zZU1hdHJpeCkoeCkpIHtcbiAgICAgIHJldHVybiBjb21wYXJlTWF0cmljZXNBbmRBcnJheXMoeC50b0pTT04oKS5kYXRhLCB5KTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF9pcy5pc0RlbnNlTWF0cml4KSh5KSkge1xuICAgICAgcmV0dXJuIGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyh4LCB5LnRvSlNPTigpLmRhdGEpO1xuICAgIH0gLy8gY29udmVydCBzY2FsYXJzIHRvIGFycmF5XG5cblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh4KSkge1xuICAgICAgcmV0dXJuIGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyhbeF0sIHkpO1xuICAgIH1cblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh5KSkge1xuICAgICAgcmV0dXJuIGNvbXBhcmVNYXRyaWNlc0FuZEFycmF5cyh4LCBbeV0pO1xuICAgIH1cblxuICAgIHJldHVybiBjb21wYXJlQXJyYXlzKHgsIHkpO1xuICB9XG4gIC8qKlxuICAgKiBDb21wYXJlIHR3byBBcnJheXNcbiAgICpcbiAgICogLSBGaXJzdCwgY29tcGFyZXMgdmFsdWUgYnkgdmFsdWVcbiAgICogLSBOZXh0LCBpZiBhbGwgY29ycmVzcG9uZGluZyB2YWx1ZXMgYXJlIGVxdWFsLFxuICAgKiAgIGxvb2sgYXQgdGhlIGxlbmd0aDogbG9uZ2VzdCBhcnJheSB3aWxsIGJlIGNvbnNpZGVyZWQgbGFyZ2VzdFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSB4XG4gICAqIEBwYXJhbSB7QXJyYXl9IHlcbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY29tcGFyaXNvbiByZXN1bHQ6IC0xLCAwLCBvciAxXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gY29tcGFyZUFycmF5cyh4LCB5KSB7XG4gICAgLy8gY29tcGFyZSBlYWNoIHZhbHVlXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gTWF0aC5taW4oeC5sZW5ndGgsIHkubGVuZ3RoKTsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHZhciB2ID0gY29tcGFyZU5hdHVyYWwoeFtpXSwgeVtpXSk7XG5cbiAgICAgIGlmICh2ICE9PSAwKSB7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfVxuICAgIH0gLy8gY29tcGFyZSB0aGUgc2l6ZSBvZiB0aGUgYXJyYXlzXG5cblxuICAgIGlmICh4Lmxlbmd0aCA+IHkubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBpZiAoeC5sZW5ndGggPCB5Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH0gLy8gYm90aCBBcnJheXMgaGF2ZSBlcXVhbCBzaXplIGFuZCBjb250ZW50XG5cblxuICAgIHJldHVybiAwO1xuICB9XG4gIC8qKlxuICAgKiBDb21wYXJlIHR3byBvYmplY3RzXG4gICAqXG4gICAqIC0gRmlyc3QsIGNvbXBhcmUgc29ydGVkIHByb3BlcnR5IG5hbWVzXG4gICAqIC0gTmV4dCwgY29tcGFyZSB0aGUgcHJvcGVydHkgdmFsdWVzXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB4XG4gICAqIEBwYXJhbSB7T2JqZWN0fSB5XG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbXBhcmlzb24gcmVzdWx0OiAtMSwgMCwgb3IgMVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNvbXBhcmVPYmplY3RzKHgsIHkpIHtcbiAgICB2YXIga2V5c1ggPSBPYmplY3Qua2V5cyh4KTtcbiAgICB2YXIga2V5c1kgPSBPYmplY3Qua2V5cyh5KTsgLy8gY29tcGFyZSBrZXlzXG5cbiAgICBrZXlzWC5zb3J0KF9qYXZhc2NyaXB0TmF0dXJhbFNvcnRbXCJkZWZhdWx0XCJdKTtcbiAgICBrZXlzWS5zb3J0KF9qYXZhc2NyaXB0TmF0dXJhbFNvcnRbXCJkZWZhdWx0XCJdKTtcbiAgICB2YXIgYyA9IGNvbXBhcmVBcnJheXMoa2V5c1gsIGtleXNZKTtcblxuICAgIGlmIChjICE9PSAwKSB7XG4gICAgICByZXR1cm4gYztcbiAgICB9IC8vIGNvbXBhcmUgdmFsdWVzXG5cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5c1gubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2ID0gY29tcGFyZU5hdHVyYWwoeFtrZXlzWFtpXV0sIHlba2V5c1lbaV1dKTtcblxuICAgICAgaWYgKHYgIT09IDApIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICByZXR1cm4gY29tcGFyZU5hdHVyYWw7XG59KTtcbi8qKlxuICogQ29tcGFyZSB0d28gY29tcGxleCBudW1iZXJzLCBgeGAgYW5kIGB5YDpcbiAqXG4gKiAtIEZpcnN0LCBjb21wYXJlIHRoZSByZWFsIHZhbHVlcyBvZiBgeGAgYW5kIGB5YFxuICogLSBJZiBlcXVhbCwgY29tcGFyZSB0aGUgaW1hZ2luYXJ5IHZhbHVlcyBvZiBgeGAgYW5kIGB5YFxuICpcbiAqIEBwYXJhbXMge0NvbXBsZXh9IHhcbiAqIEBwYXJhbXMge0NvbXBsZXh9IHlcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbXBhcmlzb24gcmVzdWx0OiAtMSwgMCwgb3IgMVxuICovXG5cbmV4cG9ydHMuY3JlYXRlQ29tcGFyZU5hdHVyYWwgPSBjcmVhdGVDb21wYXJlTmF0dXJhbDtcblxuZnVuY3Rpb24gY29tcGFyZUNvbXBsZXhOdW1iZXJzKHgsIHkpIHtcbiAgaWYgKHgucmUgPiB5LnJlKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBpZiAoeC5yZSA8IHkucmUpIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICBpZiAoeC5pbSA+IHkuaW0pIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGlmICh4LmltIDwgeS5pbSkge1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIHJldHVybiAwO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wYXJlVGV4dE51bWJlciA9IGV4cG9ydHMuY3JlYXRlQ29tcGFyZVRleHQgPSB2b2lkIDA7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBuYW1lID0gJ2NvbXBhcmVUZXh0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZUNvbXBhcmVUZXh0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQ29tcGFyZSB0d28gc3RyaW5ncyBsZXhpY2FsbHkuIENvbXBhcmlzb24gaXMgY2FzZSBzZW5zaXRpdmUuXG4gICAqIFJldHVybnMgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmVUZXh0KHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmVUZXh0KCdCJywgJ0EnKSAgICAgLy8gcmV0dXJucyAxXG4gICAqICAgIG1hdGguY29tcGFyZVRleHQoJzInLCAnMTAnKSAgICAvLyByZXR1cm5zIDFcbiAgICogICAgbWF0aC5jb21wYXJlKCcyJywgJzEwJykgICAgICAgIC8vIHJldHVybnMgLTFcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbCgnMicsICcxMCcpIC8vIHJldHVybnMgLTFcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlVGV4dCgnQicsIFsnQScsICdCJywgJ0MnXSkgLy8gcmV0dXJucyBbMSwgMCwgLTFdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBlcXVhbCwgZXF1YWxUZXh0LCBjb21wYXJlLCBjb21wYXJlTmF0dXJhbFxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmcgfCBBcnJheSB8IERlbnNlTWF0cml4fSB4IEZpcnN0IHN0cmluZyB0byBjb21wYXJlXG4gICAqIEBwYXJhbSAge3N0cmluZyB8IEFycmF5IHwgRGVuc2VNYXRyaXh9IHkgU2Vjb25kIHN0cmluZyB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgRGVuc2VNYXRyaXh9IFJldHVybnMgdGhlIHJlc3VsdCBvZiB0aGUgY29tcGFyaXNvbjpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS5cbiAgICovXG5cbiAgdmFyIGNvbXBhcmVUZXh0ID0gdHlwZWQobmFtZSwge1xuICAgICdhbnksIGFueSc6IF9zdHJpbmcuY29tcGFyZVRleHQsXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIF9zdHJpbmcuY29tcGFyZVRleHQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGNvbXBhcmVUZXh0KG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBjb21wYXJlVGV4dChtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gY29tcGFyZVRleHQoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIF9zdHJpbmcuY29tcGFyZVRleHQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIF9zdHJpbmcuY29tcGFyZVRleHQsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBfc3RyaW5nLmNvbXBhcmVUZXh0LCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBfc3RyaW5nLmNvbXBhcmVUZXh0LCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNvbXBhcmVUZXh0O1xufSk7XG5leHBvcnRzLmNyZWF0ZUNvbXBhcmVUZXh0ID0gY3JlYXRlQ29tcGFyZVRleHQ7XG52YXIgY3JlYXRlQ29tcGFyZVRleHROdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCddLCBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgdmFyIHR5cGVkID0gX3JlZjIudHlwZWQ7XG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ2FueSwgYW55JzogX3N0cmluZy5jb21wYXJlVGV4dFxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wYXJlVGV4dE51bWJlciA9IGNyZWF0ZUNvbXBhcmVUZXh0TnVtYmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEZWVwRXF1YWwgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdkZWVwRXF1YWwnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnZXF1YWwnXTtcbnZhciBjcmVhdGVEZWVwRXF1YWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgZXF1YWwgPSBfcmVmLmVxdWFsO1xuXG4gIC8qKlxuICAgKiBUZXN0IGVsZW1lbnQgd2lzZSB3aGV0aGVyIHR3byBtYXRyaWNlcyBhcmUgZXF1YWwuXG4gICAqIFRoZSBmdW5jdGlvbiBhY2NlcHRzIGJvdGggbWF0cmljZXMgYW5kIHNjYWxhciB2YWx1ZXMuXG4gICAqXG4gICAqIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyIG51bWVyaWNhbCB2YWx1ZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmRlZXBFcXVhbCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5kZWVwRXF1YWwoMiwgNCkgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqXG4gICAqICAgIGEgPSBbMiwgNSwgMV1cbiAgICogICAgYiA9IFsyLCA3LCAxXVxuICAgKlxuICAgKiAgICBtYXRoLmRlZXBFcXVhbChhLCBiKSAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5lcXVhbChhLCBiKSAgICAgICAvLyByZXR1cm5zIFt0cnVlLCBmYWxzZSwgdHJ1ZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGVxdWFsLCB1bmVxdWFsXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCBtYXRyaXggdG8gY29tcGFyZVxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHkgU2Vjb25kIG1hdHJpeCB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRydWUgd2hlbiB0aGUgaW5wdXQgbWF0cmljZXMgaGF2ZSB0aGUgc2FtZSBzaXplIGFuZCBlYWNoIG9mIHRoZWlyIGVsZW1lbnRzIGlzIGVxdWFsLlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnYW55LCBhbnknOiBmdW5jdGlvbiBhbnlBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIF9kZWVwRXF1YWwoeC52YWx1ZU9mKCksIHkudmFsdWVPZigpKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHR3byBhcnJheXMgaGF2ZSB0aGUgc2FtZSBzaXplIGFuZCBhbGwgZWxlbWVudHMgYXJlIGVxdWFsXG4gICAqIEBwYXJhbSB7QXJyYXkgfCAqfSB4XG4gICAqIEBwYXJhbSB7QXJyYXkgfCAqfSB5XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiBib3RoIGFycmF5cyBhcmUgZGVlcCBlcXVhbFxuICAgKi9cblxuICBmdW5jdGlvbiBfZGVlcEVxdWFsKHgsIHkpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh4KSkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoeSkpIHtcbiAgICAgICAgdmFyIGxlbiA9IHgubGVuZ3RoO1xuXG4gICAgICAgIGlmIChsZW4gIT09IHkubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGlmICghX2RlZXBFcXVhbCh4W2ldLCB5W2ldKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh5KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZXF1YWwoeCwgeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlRGVlcEVxdWFsID0gY3JlYXRlRGVlcEVxdWFsOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbE51bWJlciA9IGV4cG9ydHMuY3JlYXRlRXF1YWwgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA3XCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTJcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgbmFtZSA9ICdlcXVhbCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVFcXVhbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNykoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHR3byB2YWx1ZXMgYXJlIGVxdWFsLlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gdGVzdHMgd2hldGhlciB0aGUgcmVsYXRpdmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHggYW5kIHkgaXNcbiAgICogc21hbGxlciB0aGFuIHRoZSBjb25maWd1cmVkIGVwc2lsb24uIFRoZSBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCB0b1xuICAgKiBjb21wYXJlIHZhbHVlcyBzbWFsbGVyIHRoYW4gYXBwcm94aW1hdGVseSAyLjIyZS0xNi5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICogSW4gY2FzZSBvZiBjb21wbGV4IG51bWJlcnMsIHgucmUgbXVzdCBlcXVhbCB5LnJlLCBhbmQgeC5pbSBtdXN0IGVxdWFsIHkuaW0uXG4gICAqXG4gICAqIFZhbHVlcyBgbnVsbGAgYW5kIGB1bmRlZmluZWRgIGFyZSBjb21wYXJlZCBzdHJpY3RseSwgdGh1cyBgbnVsbGAgaXMgb25seVxuICAgKiBlcXVhbCB0byBgbnVsbGAgYW5kIG5vdGhpbmcgZWxzZSwgYW5kIGB1bmRlZmluZWRgIGlzIG9ubHkgZXF1YWwgdG9cbiAgICogYHVuZGVmaW5lZGAgYW5kIG5vdGhpbmcgZWxzZS4gU3RyaW5ncyBhcmUgY29tcGFyZWQgYnkgdGhlaXIgbnVtZXJpY2FsIHZhbHVlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZXF1YWwoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZXF1YWwoMiArIDIsIDMpICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmVxdWFsKDIgKyAyLCA0KSAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKlxuICAgKiAgICBjb25zdCBhID0gbWF0aC51bml0KCc1MCBjbScpXG4gICAqICAgIGNvbnN0IGIgPSBtYXRoLnVuaXQoJzUgbScpXG4gICAqICAgIG1hdGguZXF1YWwoYSwgYikgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqXG4gICAqICAgIGNvbnN0IGMgPSBbMiwgNSwgMV1cbiAgICogICAgY29uc3QgZCA9IFsyLCA3LCAxXVxuICAgKlxuICAgKiAgICBtYXRoLmVxdWFsKGMsIGQpICAgICAgICAgICAgIC8vIHJldHVybnMgW3RydWUsIGZhbHNlLCB0cnVlXVxuICAgKiAgICBtYXRoLmRlZXBFcXVhbChjLCBkKSAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICpcbiAgICogICAgbWF0aC5lcXVhbChcIjEwMDBcIiwgXCIxZTNcIikgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguZXF1YWwoMCwgbnVsbCkgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgdW5lcXVhbCwgc21hbGxlciwgc21hbGxlckVxLCBsYXJnZXIsIGxhcmdlckVxLCBjb21wYXJlLCBkZWVwRXF1YWwsIGVxdWFsVGV4dFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBib29sZWFuIHwgQ29tcGxleCB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IGJvb2xlYW4gfCBDb21wbGV4IHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIGNvbXBhcmVkIHZhbHVlcyBhcmUgZXF1YWwsIGVsc2UgcmV0dXJucyBmYWxzZVxuICAgKi9cblxuICB2YXIgZXF1YWwgPSB0eXBlZChuYW1lLCB7XG4gICAgJ2FueSwgYW55JzogZnVuY3Rpb24gYW55QW55KHgsIHkpIHtcbiAgICAgIC8vIHN0cmljdCBlcXVhbGl0eSBmb3IgbnVsbCBhbmQgdW5kZWZpbmVkP1xuICAgICAgaWYgKHggPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHkgPT09IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh5ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB4ID09PSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB5ID09PSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHggPT09IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVxdWFsU2NhbGFyKHgsIHkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNyh4LCB5LCBlcXVhbFNjYWxhcik7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCBlcXVhbFNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBlcXVhbFNjYWxhciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGVxdWFsU2NhbGFyKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBlcXVhbChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZXF1YWwobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGVxdWFsKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHgsIHksIGVxdWFsU2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBlcXVhbFNjYWxhciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBlcXVhbFNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBlcXVhbFNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGVxdWFsU2NhbGFyLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBlcXVhbFNjYWxhciwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBlcXVhbDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbCA9IGNyZWF0ZUVxdWFsO1xudmFyIGNyZWF0ZUVxdWFsTnVtYmVyID0gKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIFsndHlwZWQnLCAnZXF1YWxTY2FsYXInXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmMi5lcXVhbFNjYWxhcjtcbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnYW55LCBhbnknOiBmdW5jdGlvbiBhbnlBbnkoeCwgeSkge1xuICAgICAgLy8gc3RyaWN0IGVxdWFsaXR5IGZvciBudWxsIGFuZCB1bmRlZmluZWQ/XG4gICAgICBpZiAoeCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4geSA9PT0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHkgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHggPT09IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHkgPT09IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4geCA9PT0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXF1YWxTY2FsYXIoeCwgeSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbE51bWJlciA9IGNyZWF0ZUVxdWFsTnVtYmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbFNjYWxhck51bWJlciA9IGV4cG9ydHMuY3JlYXRlRXF1YWxTY2FsYXIgPSB2b2lkIDA7XG5cbnZhciBfbmVhcmx5RXF1YWwgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL25lYXJseUVxdWFsXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbXBsZXggPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29tcGxleFwiKTtcblxudmFyIG5hbWUgPSAnZXF1YWxTY2FsYXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJ107XG52YXIgY3JlYXRlRXF1YWxTY2FsYXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWc7XG5cbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciB0d28gc2NhbGFyIHZhbHVlcyBhcmUgbmVhcmx5IGVxdWFsLlxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW4gfCBDb21wbGV4IHwgVW5pdH0geCAgIEZpcnN0IHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgQ29tcGxleH0geSAgICAgICAgICBTZWNvbmQgdmFsdWUgdG8gY29tcGFyZVxuICAgKiBAcmV0dXJuIHtib29sZWFufSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJucyB0cnVlIHdoZW4gdGhlIGNvbXBhcmVkIHZhbHVlcyBhcmUgZXF1YWwsIGVsc2UgcmV0dXJucyBmYWxzZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdmFyIGVxdWFsU2NhbGFyID0gdHlwZWQobmFtZSwge1xuICAgICdib29sZWFuLCBib29sZWFuJzogZnVuY3Rpb24gYm9vbGVhbkJvb2xlYW4oeCwgeSkge1xuICAgICAgcmV0dXJuIHggPT09IHk7XG4gICAgfSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLm5lYXJseUVxdWFsKSh4LCB5LCBjb25maWcuZXBzaWxvbik7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHguZXEoeSkgfHwgKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkge1xuICAgICAgcmV0dXJuIHguZXF1YWxzKHkpO1xuICAgIH0sXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb21wbGV4LmNvbXBsZXhFcXVhbHMpKHgsIHksIGNvbmZpZy5lcHNpbG9uKTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgaWYgKCF4LmVxdWFsQmFzZSh5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb21wYXJlIHVuaXRzIHdpdGggZGlmZmVyZW50IGJhc2UnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVxdWFsU2NhbGFyKHgudmFsdWUsIHkudmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBlcXVhbFNjYWxhcjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbFNjYWxhciA9IGNyZWF0ZUVxdWFsU2NhbGFyO1xudmFyIGNyZWF0ZUVxdWFsU2NhbGFyTnVtYmVyID0gKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIFsndHlwZWQnLCAnY29uZmlnJ10sIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgdHlwZWQgPSBfcmVmMi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYyLmNvbmZpZztcbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLm5lYXJseUVxdWFsKSh4LCB5LCBjb25maWcuZXBzaWxvbik7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbFNjYWxhck51bWJlciA9IGNyZWF0ZUVxdWFsU2NhbGFyTnVtYmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbFRleHQgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdlcXVhbFRleHQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29tcGFyZVRleHQnLCAnaXNaZXJvJ107XG52YXIgY3JlYXRlRXF1YWxUZXh0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbXBhcmVUZXh0ID0gX3JlZi5jb21wYXJlVGV4dCxcbiAgICAgIGlzWmVybyA9IF9yZWYuaXNaZXJvO1xuXG4gIC8qKlxuICAgKiBDaGVjayBlcXVhbGl0eSBvZiB0d28gc3RyaW5ncy4gQ29tcGFyaXNvbiBpcyBjYXNlIHNlbnNpdGl2ZS5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmVxdWFsVGV4dCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5lcXVhbFRleHQoJ0hlbGxvJywgJ0hlbGxvJykgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmVxdWFsVGV4dCgnYScsICdBJykgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmVxdWFsKCcyZTMnLCAnMjAwMCcpICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguZXF1YWxUZXh0KCcyZTMnLCAnMjAwMCcpICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqXG4gICAqICAgIG1hdGguZXF1YWxUZXh0KCdCJywgWydBJywgJ0InLCAnQyddKSAvLyByZXR1cm5zIFtmYWxzZSwgdHJ1ZSwgZmFsc2VdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBlcXVhbCwgY29tcGFyZVRleHQsIGNvbXBhcmUsIGNvbXBhcmVOYXR1cmFsXG4gICAqXG4gICAqIEBwYXJhbSAge3N0cmluZyB8IEFycmF5IHwgRGVuc2VNYXRyaXh9IHggRmlyc3Qgc3RyaW5nIHRvIGNvbXBhcmVcbiAgICogQHBhcmFtICB7c3RyaW5nIHwgQXJyYXkgfCBEZW5zZU1hdHJpeH0geSBTZWNvbmQgc3RyaW5nIHRvIGNvbXBhcmVcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQXJyYXkgfCBEZW5zZU1hdHJpeH0gUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZXMgYXJlIGVxdWFsLCBhbmQgZmFsc2UgaWYgbm90LlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnYW55LCBhbnknOiBmdW5jdGlvbiBhbnlBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGlzWmVybyhjb21wYXJlVGV4dCh4LCB5KSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcXVhbFRleHQgPSBjcmVhdGVFcXVhbFRleHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUxhcmdlck51bWJlciA9IGV4cG9ydHMuY3JlYXRlTGFyZ2VyID0gdm9pZCAwO1xuXG52YXIgX25lYXJseUVxdWFsID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9uZWFybHlFcXVhbFwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDNcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wN1wiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIG5hbWUgPSAnbGFyZ2VyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtYXRyaXgnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVMYXJnZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNykoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHZhbHVlIHggaXMgbGFyZ2VyIHRoYW4geS5cbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHggaXMgbGFyZ2VyIHRoYW4geSBhbmQgdGhlIHJlbGF0aXZlXG4gICAqIGRpZmZlcmVuY2UgYmV0d2VlbiB4IGFuZCB5IGlzIGxhcmdlciB0aGFuIHRoZSBjb25maWd1cmVkIGVwc2lsb24uIFRoZVxuICAgKiBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCB0byBjb21wYXJlIHZhbHVlcyBzbWFsbGVyIHRoYW4gYXBwcm94aW1hdGVseSAyLjIyZS0xNi5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICogU3RyaW5ncyBhcmUgY29tcGFyZWQgYnkgdGhlaXIgbnVtZXJpY2FsIHZhbHVlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubGFyZ2VyKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmxhcmdlcigyLCAzKSAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGgubGFyZ2VyKDUsIDIgKyAyKSAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKlxuICAgKiAgICBjb25zdCBhID0gbWF0aC51bml0KCc1IGNtJylcbiAgICogICAgY29uc3QgYiA9IG1hdGgudW5pdCgnMiBpbmNoJylcbiAgICogICAgbWF0aC5sYXJnZXIoYSwgYikgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZXF1YWwsIHVuZXF1YWwsIHNtYWxsZXIsIHNtYWxsZXJFcSwgbGFyZ2VyRXEsIGNvbXBhcmVcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIHggaXMgbGFyZ2VyIHRoYW4geSwgZWxzZSByZXR1cm5zIGZhbHNlXG4gICAqL1xuXG4gIHZhciBsYXJnZXIgPSB0eXBlZChuYW1lLCB7XG4gICAgJ2Jvb2xlYW4sIGJvb2xlYW4nOiBmdW5jdGlvbiBib29sZWFuQm9vbGVhbih4LCB5KSB7XG4gICAgICByZXR1cm4geCA+IHk7XG4gICAgfSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHggPiB5ICYmICEoMCwgX251bWJlci5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4Lmd0KHkpICYmICEoMCwgX25lYXJseUVxdWFsLm5lYXJseUVxdWFsKSh4LCB5LCBjb25maWcuZXBzaWxvbik7XG4gICAgfSxcbiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7XG4gICAgICByZXR1cm4geC5jb21wYXJlKHkpID09PSAxO1xuICAgIH0sXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG9yZGVyaW5nIHJlbGF0aW9uIGlzIGRlZmluZWQgZm9yIGNvbXBsZXggbnVtYmVycycpO1xuICAgIH0sXG4gICAgJ1VuaXQsIFVuaXQnOiBmdW5jdGlvbiBVbml0VW5pdCh4LCB5KSB7XG4gICAgICBpZiAoIXguZXF1YWxCYXNlKHkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXBhcmUgdW5pdHMgd2l0aCBkaWZmZXJlbnQgYmFzZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGFyZ2VyKHgudmFsdWUsIHkudmFsdWUpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNyh4LCB5LCBsYXJnZXIpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgbGFyZ2VyLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIGxhcmdlciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGxhcmdlcik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbGFyZ2VyKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBsYXJnZXIobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxhcmdlcih4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih4LCB5LCBsYXJnZXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGxhcmdlciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBsYXJnZXIsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgbGFyZ2VyLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgbGFyZ2VyLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBsYXJnZXIsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGFyZ2VyO1xufSk7XG5leHBvcnRzLmNyZWF0ZUxhcmdlciA9IGNyZWF0ZUxhcmdlcjtcbnZhciBjcmVhdGVMYXJnZXJOdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCcsICdjb25maWcnXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZjIuY29uZmlnO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geCA+IHkgJiYgISgwLCBfbnVtYmVyLm5lYXJseUVxdWFsKSh4LCB5LCBjb25maWcuZXBzaWxvbik7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVMYXJnZXJOdW1iZXIgPSBjcmVhdGVMYXJnZXJOdW1iZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUxhcmdlckVxTnVtYmVyID0gZXhwb3J0cy5jcmVhdGVMYXJnZXJFcSA9IHZvaWQgMDtcblxudmFyIF9uZWFybHlFcXVhbCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9iaWdudW1iZXIvbmVhcmx5RXF1YWxcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDdcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMlwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBuYW1lID0gJ2xhcmdlckVxJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtYXRyaXgnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVMYXJnZXJFcSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA3ID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTA3KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgdmFsdWUgeCBpcyBsYXJnZXIgb3IgZXF1YWwgdG8geS5cbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHggaXMgbGFyZ2VyIHRoYW4geSBvciB0aGUgcmVsYXRpdmVcbiAgICogZGlmZmVyZW5jZSBiZXR3ZWVuIHggYW5kIHkgaXMgc21hbGxlciB0aGFuIHRoZSBjb25maWd1cmVkIGVwc2lsb24uIFRoZVxuICAgKiBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCB0byBjb21wYXJlIHZhbHVlcyBzbWFsbGVyIHRoYW4gYXBwcm94aW1hdGVseSAyLjIyZS0xNi5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICogU3RyaW5ncyBhcmUgY29tcGFyZWQgYnkgdGhlaXIgbnVtZXJpY2FsIHZhbHVlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubGFyZ2VyRXEoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgubGFyZ2VyKDIsIDEgKyAxKSAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5sYXJnZXJFcSgyLCAxICsgMSkgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBlcXVhbCwgdW5lcXVhbCwgc21hbGxlciwgc21hbGxlckVxLCBsYXJnZXIsIGNvbXBhcmVcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIHggaXMgbGFyZ2VyIG9yIGVxdWFsIHRvIHksIGVsc2UgcmV0dXJucyBmYWxzZVxuICAgKi9cblxuICB2YXIgbGFyZ2VyRXEgPSB0eXBlZChuYW1lLCB7XG4gICAgJ2Jvb2xlYW4sIGJvb2xlYW4nOiBmdW5jdGlvbiBib29sZWFuQm9vbGVhbih4LCB5KSB7XG4gICAgICByZXR1cm4geCA+PSB5O1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4ID49IHkgfHwgKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC5ndGUoeSkgfHwgKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkge1xuICAgICAgcmV0dXJuIHguY29tcGFyZSh5KSAhPT0gLTE7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgQ29tcGxleCc6IGZ1bmN0aW9uIENvbXBsZXhDb21wbGV4KCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gb3JkZXJpbmcgcmVsYXRpb24gaXMgZGVmaW5lZCBmb3IgY29tcGxleCBudW1iZXJzJyk7XG4gICAgfSxcbiAgICAnVW5pdCwgVW5pdCc6IGZ1bmN0aW9uIFVuaXRVbml0KHgsIHkpIHtcbiAgICAgIGlmICgheC5lcXVhbEJhc2UoeSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29tcGFyZSB1bml0cyB3aXRoIGRpZmZlcmVudCBiYXNlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBsYXJnZXJFcSh4LnZhbHVlLCB5LnZhbHVlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDcoeCwgeSwgbGFyZ2VyRXEpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgbGFyZ2VyRXEsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeCwgeSwgbGFyZ2VyRXEsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBsYXJnZXJFcSk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbGFyZ2VyRXEobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxhcmdlckVxKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBsYXJnZXJFcSh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih4LCB5LCBsYXJnZXJFcSwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgbGFyZ2VyRXEsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgbGFyZ2VyRXEsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgbGFyZ2VyRXEsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBsYXJnZXJFcSwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgbGFyZ2VyRXEsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGFyZ2VyRXE7XG59KTtcbmV4cG9ydHMuY3JlYXRlTGFyZ2VyRXEgPSBjcmVhdGVMYXJnZXJFcTtcbnZhciBjcmVhdGVMYXJnZXJFcU51bWJlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBbJ3R5cGVkJywgJ2NvbmZpZyddLCBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgdmFyIHR5cGVkID0gX3JlZjIudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmMi5jb25maWc7XG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4ID49IHkgfHwgKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUxhcmdlckVxTnVtYmVyID0gY3JlYXRlTGFyZ2VyRXFOdW1iZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNtYWxsZXJOdW1iZXIgPSBleHBvcnRzLmNyZWF0ZVNtYWxsZXIgPSB2b2lkIDA7XG5cbnZhciBfbmVhcmx5RXF1YWwgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL25lYXJseUVxdWFsXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA3XCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTJcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgbmFtZSA9ICdzbWFsbGVyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtYXRyaXgnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVTbWFsbGVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBhbGdvcml0aG0wMyA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDcgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMDcpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTIgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMTIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciB2YWx1ZSB4IGlzIHNtYWxsZXIgdGhhbiB5LlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4geCBpcyBzbWFsbGVyIHRoYW4geSBhbmQgdGhlIHJlbGF0aXZlXG4gICAqIGRpZmZlcmVuY2UgYmV0d2VlbiB4IGFuZCB5IGlzIHNtYWxsZXIgdGhhbiB0aGUgY29uZmlndXJlZCBlcHNpbG9uLiBUaGVcbiAgICogZnVuY3Rpb24gY2Fubm90IGJlIHVzZWQgdG8gY29tcGFyZSB2YWx1ZXMgc21hbGxlciB0aGFuIGFwcHJveGltYXRlbHkgMi4yMmUtMTYuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyIG51bWVyaWNhbCB2YWx1ZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNtYWxsZXIoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc21hbGxlcigyLCAzKSAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLnNtYWxsZXIoNSwgMiAqIDIpICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLnVuaXQoJzUgY20nKVxuICAgKiAgICBjb25zdCBiID0gbWF0aC51bml0KCcyIGluY2gnKVxuICAgKiAgICBtYXRoLnNtYWxsZXIoYSwgYikgICAgICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGVxdWFsLCB1bmVxdWFsLCBzbWFsbGVyRXEsIHNtYWxsZXIsIHNtYWxsZXJFcSwgY29tcGFyZVxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW4gfCBVbml0IHwgc3RyaW5nIHwgQXJyYXkgfCBNYXRyaXh9IHggRmlyc3QgdmFsdWUgdG8gY29tcGFyZVxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW4gfCBVbml0IHwgc3RyaW5nIHwgQXJyYXkgfCBNYXRyaXh9IHkgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHJldHVybiB7Ym9vbGVhbiB8IEFycmF5IHwgTWF0cml4fSBSZXR1cm5zIHRydWUgd2hlbiB0aGUgeCBpcyBzbWFsbGVyIHRoYW4geSwgZWxzZSByZXR1cm5zIGZhbHNlXG4gICAqL1xuXG4gIHZhciBzbWFsbGVyID0gdHlwZWQobmFtZSwge1xuICAgICdib29sZWFuLCBib29sZWFuJzogZnVuY3Rpb24gYm9vbGVhbkJvb2xlYW4oeCwgeSkge1xuICAgICAgcmV0dXJuIHggPCB5O1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4IDwgeSAmJiAhKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC5sdCh5KSAmJiAhKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkge1xuICAgICAgcmV0dXJuIHguY29tcGFyZSh5KSA9PT0gLTE7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgQ29tcGxleCc6IGZ1bmN0aW9uIENvbXBsZXhDb21wbGV4KHgsIHkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG9yZGVyaW5nIHJlbGF0aW9uIGlzIGRlZmluZWQgZm9yIGNvbXBsZXggbnVtYmVycycpO1xuICAgIH0sXG4gICAgJ1VuaXQsIFVuaXQnOiBmdW5jdGlvbiBVbml0VW5pdCh4LCB5KSB7XG4gICAgICBpZiAoIXguZXF1YWxCYXNlKHkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXBhcmUgdW5pdHMgd2l0aCBkaWZmZXJlbnQgYmFzZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc21hbGxlcih4LnZhbHVlLCB5LnZhbHVlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDcoeCwgeSwgc21hbGxlcik7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCBzbWFsbGVyLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIHNtYWxsZXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBzbWFsbGVyKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBzbWFsbGVyKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBzbWFsbGVyKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBzbWFsbGVyKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHgsIHksIHNtYWxsZXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIHNtYWxsZXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgc21hbGxlciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBzbWFsbGVyLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgc21hbGxlciwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgc21hbGxlciwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzbWFsbGVyO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNtYWxsZXIgPSBjcmVhdGVTbWFsbGVyO1xudmFyIGNyZWF0ZVNtYWxsZXJOdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCcsICdjb25maWcnXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZjIuY29uZmlnO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geCA8IHkgJiYgISgwLCBfbnVtYmVyLm5lYXJseUVxdWFsKSh4LCB5LCBjb25maWcuZXBzaWxvbik7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTbWFsbGVyTnVtYmVyID0gY3JlYXRlU21hbGxlck51bWJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU21hbGxlckVxTnVtYmVyID0gZXhwb3J0cy5jcmVhdGVTbWFsbGVyRXEgPSB2b2lkIDA7XG5cbnZhciBfbmVhcmx5RXF1YWwgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL25lYXJseUVxdWFsXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA3XCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTJcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgbmFtZSA9ICdzbWFsbGVyRXEnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ21hdHJpeCcsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZVNtYWxsZXJFcSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA3ID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTA3KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgdmFsdWUgeCBpcyBzbWFsbGVyIG9yIGVxdWFsIHRvIHkuXG4gICAqXG4gICAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiB4IGlzIHNtYWxsZXIgdGhhbiB5IG9yIHRoZSByZWxhdGl2ZVxuICAgKiBkaWZmZXJlbmNlIGJldHdlZW4geCBhbmQgeSBpcyBzbWFsbGVyIHRoYW4gdGhlIGNvbmZpZ3VyZWQgZXBzaWxvbi4gVGhlXG4gICAqIGZ1bmN0aW9uIGNhbm5vdCBiZSB1c2VkIHRvIGNvbXBhcmUgdmFsdWVzIHNtYWxsZXIgdGhhbiBhcHByb3hpbWF0ZWx5IDIuMjJlLTE2LlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKiBTdHJpbmdzIGFyZSBjb21wYXJlZCBieSB0aGVpciBudW1lcmljYWwgdmFsdWUuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zbWFsbGVyRXEoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc21hbGxlcigxICsgMiwgMykgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5zbWFsbGVyRXEoMSArIDIsIDMpICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBlcXVhbCwgdW5lcXVhbCwgc21hbGxlciwgbGFyZ2VyLCBsYXJnZXJFcSwgY29tcGFyZVxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW4gfCBVbml0IHwgc3RyaW5nIHwgQXJyYXkgfCBNYXRyaXh9IHggRmlyc3QgdmFsdWUgdG8gY29tcGFyZVxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW4gfCBVbml0IHwgc3RyaW5nIHwgQXJyYXkgfCBNYXRyaXh9IHkgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHJldHVybiB7Ym9vbGVhbiB8IEFycmF5IHwgTWF0cml4fSBSZXR1cm5zIHRydWUgd2hlbiB0aGUgeCBpcyBzbWFsbGVyIHRoYW4geSwgZWxzZSByZXR1cm5zIGZhbHNlXG4gICAqL1xuXG4gIHZhciBzbWFsbGVyRXEgPSB0eXBlZChuYW1lLCB7XG4gICAgJ2Jvb2xlYW4sIGJvb2xlYW4nOiBmdW5jdGlvbiBib29sZWFuQm9vbGVhbih4LCB5KSB7XG4gICAgICByZXR1cm4geCA8PSB5O1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4IDw9IHkgfHwgKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC5sdGUoeSkgfHwgKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkge1xuICAgICAgcmV0dXJuIHguY29tcGFyZSh5KSAhPT0gMTtcbiAgICB9LFxuICAgICdDb21wbGV4LCBDb21wbGV4JzogZnVuY3Rpb24gQ29tcGxleENvbXBsZXgoKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBvcmRlcmluZyByZWxhdGlvbiBpcyBkZWZpbmVkIGZvciBjb21wbGV4IG51bWJlcnMnKTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgaWYgKCF4LmVxdWFsQmFzZSh5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb21wYXJlIHVuaXRzIHdpdGggZGlmZmVyZW50IGJhc2UnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNtYWxsZXJFcSh4LnZhbHVlLCB5LnZhbHVlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDcoeCwgeSwgc21hbGxlckVxKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHksIHgsIHNtYWxsZXJFcSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBzbWFsbGVyRXEsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBzbWFsbGVyRXEpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHNtYWxsZXJFcShtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gc21hbGxlckVxKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBzbWFsbGVyRXEoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeCwgeSwgc21hbGxlckVxLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBzbWFsbGVyRXEsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgc21hbGxlckVxLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIHNtYWxsZXJFcSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIHNtYWxsZXJFcSwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgc21hbGxlckVxLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHNtYWxsZXJFcTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTbWFsbGVyRXEgPSBjcmVhdGVTbWFsbGVyRXE7XG52YXIgY3JlYXRlU21hbGxlckVxTnVtYmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIFsndHlwZWQnLCAnY29uZmlnJ10sIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgdHlwZWQgPSBfcmVmMi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYyLmNvbmZpZztcbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHggPD0geSB8fCAoMCwgX251bWJlci5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU21hbGxlckVxTnVtYmVyID0gY3JlYXRlU21hbGxlckVxTnVtYmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbmVxdWFsTnVtYmVyID0gZXhwb3J0cy5jcmVhdGVVbmVxdWFsID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDNcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wN1wiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIG5hbWUgPSAndW5lcXVhbCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnZXF1YWxTY2FsYXInLCAnbWF0cml4JywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlVW5lcXVhbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA3ID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTA3KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgdHdvIHZhbHVlcyBhcmUgdW5lcXVhbC5cbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIHRlc3RzIHdoZXRoZXIgdGhlIHJlbGF0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbiB4IGFuZCB5IGlzXG4gICAqIGxhcmdlciB0aGFuIHRoZSBjb25maWd1cmVkIGVwc2lsb24uIFRoZSBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCB0byBjb21wYXJlXG4gICAqIHZhbHVlcyBzbWFsbGVyIHRoYW4gYXBwcm94aW1hdGVseSAyLjIyZS0xNi5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICogSW4gY2FzZSBvZiBjb21wbGV4IG51bWJlcnMsIHgucmUgbXVzdCB1bmVxdWFsIHkucmUsIG9yIHguaW0gbXVzdCB1bmVxdWFsIHkuaW0uXG4gICAqIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyIG51bWVyaWNhbCB2YWx1ZS5cbiAgICpcbiAgICogVmFsdWVzIGBudWxsYCBhbmQgYHVuZGVmaW5lZGAgYXJlIGNvbXBhcmVkIHN0cmljdGx5LCB0aHVzIGBudWxsYCBpcyB1bmVxdWFsXG4gICAqIHdpdGggZXZlcnl0aGluZyBleGNlcHQgYG51bGxgLCBhbmQgYHVuZGVmaW5lZGAgaXMgdW5lcXVhbCB3aXRoIGV2ZXJ5dGhpbmdcbiAgICogZXhjZXB0IGB1bmRlZmluZWRgLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgudW5lcXVhbCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC51bmVxdWFsKDIgKyAyLCAzKSAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC51bmVxdWFsKDIgKyAyLCA0KSAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLnVuaXQoJzUwIGNtJylcbiAgICogICAgY29uc3QgYiA9IG1hdGgudW5pdCgnNSBtJylcbiAgICogICAgbWF0aC51bmVxdWFsKGEsIGIpICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqXG4gICAqICAgIGNvbnN0IGMgPSBbMiwgNSwgMV1cbiAgICogICAgY29uc3QgZCA9IFsyLCA3LCAxXVxuICAgKlxuICAgKiAgICBtYXRoLnVuZXF1YWwoYywgZCkgICAgICAgICAgIC8vIHJldHVybnMgW2ZhbHNlLCB0cnVlLCBmYWxzZV1cbiAgICogICAgbWF0aC5kZWVwRXF1YWwoYywgZCkgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqXG4gICAqICAgIG1hdGgudW5lcXVhbCgwLCBudWxsKSAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBlcXVhbCwgZGVlcEVxdWFsLCBzbWFsbGVyLCBzbWFsbGVyRXEsIGxhcmdlciwgbGFyZ2VyRXEsIGNvbXBhcmVcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgQ29tcGxleCB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeCB8IHVuZGVmaW5lZH0geCBGaXJzdCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgYm9vbGVhbiB8IENvbXBsZXggfCBVbml0IHwgc3RyaW5nIHwgQXJyYXkgfCBNYXRyaXggfCB1bmRlZmluZWR9IHkgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHJldHVybiB7Ym9vbGVhbiB8IEFycmF5IHwgTWF0cml4fSBSZXR1cm5zIHRydWUgd2hlbiB0aGUgY29tcGFyZWQgdmFsdWVzIGFyZSB1bmVxdWFsLCBlbHNlIHJldHVybnMgZmFsc2VcbiAgICovXG5cbiAgdmFyIHVuZXF1YWwgPSB0eXBlZCgndW5lcXVhbCcsIHtcbiAgICAnYW55LCBhbnknOiBmdW5jdGlvbiBhbnlBbnkoeCwgeSkge1xuICAgICAgLy8gc3RyaWN0IGVxdWFsaXR5IGZvciBudWxsIGFuZCB1bmRlZmluZWQ/XG4gICAgICBpZiAoeCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4geSAhPT0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHkgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHggIT09IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHkgIT09IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4geCAhPT0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3VuZXF1YWwoeCwgeSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA3KHgsIHksIF91bmVxdWFsKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHksIHgsIF91bmVxdWFsLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIF91bmVxdWFsLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgX3VuZXF1YWwpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHVuZXF1YWwobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHVuZXF1YWwobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHVuZXF1YWwoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeCwgeSwgX3VuZXF1YWwsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIF91bmVxdWFsLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHksIHgsIF91bmVxdWFsLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIF91bmVxdWFsLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgX3VuZXF1YWwsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIF91bmVxdWFsLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfdW5lcXVhbCh4LCB5KSB7XG4gICAgcmV0dXJuICFlcXVhbFNjYWxhcih4LCB5KTtcbiAgfVxuXG4gIHJldHVybiB1bmVxdWFsO1xufSk7XG5leHBvcnRzLmNyZWF0ZVVuZXF1YWwgPSBjcmVhdGVVbmVxdWFsO1xudmFyIGNyZWF0ZVVuZXF1YWxOdW1iZXIgPSAoMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCcsICdlcXVhbFNjYWxhciddLCBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgdmFyIHR5cGVkID0gX3JlZjIudHlwZWQsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYyLmVxdWFsU2NhbGFyO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdhbnksIGFueSc6IGZ1bmN0aW9uIGFueUFueSh4LCB5KSB7XG4gICAgICAvLyBzdHJpY3QgZXF1YWxpdHkgZm9yIG51bGwgYW5kIHVuZGVmaW5lZD9cbiAgICAgIGlmICh4ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB5ICE9PSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAoeSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4geCAhPT0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4geSAhPT0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB4ICE9PSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhZXF1YWxTY2FsYXIoeCwgeSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbmVxdWFsTnVtYmVyID0gY3JlYXRlVW5lcXVhbE51bWJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0Q2FydGVzaWFuID0gdm9pZCAwO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc2V0Q2FydGVzaWFuJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NpemUnLCAnc3Vic2V0JywgJ2NvbXBhcmVOYXR1cmFsJywgJ0luZGV4JywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlU2V0Q2FydGVzaWFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIGNvbXBhcmVOYXR1cmFsID0gX3JlZi5jb21wYXJlTmF0dXJhbCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBjYXJ0ZXNpYW4gcHJvZHVjdCBvZiB0d28gKG11bHRpKXNldHMuXG4gICAqIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zZXRDYXJ0ZXNpYW4oc2V0MSwgc2V0MilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc2V0Q2FydGVzaWFuKFsxLCAyXSwgWzMsIDRdKSAgICAgICAgLy8gcmV0dXJucyBbWzEsIDNdLCBbMSwgNF0sIFsyLCAzXSwgWzIsIDRdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2V0VW5pb24sIHNldEludGVyc2VjdCwgc2V0RGlmZmVyZW5jZSwgc2V0UG93ZXJzZXRcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gICAgYTEgIEEgKG11bHRpKXNldFxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhMiAgQSAobXVsdGkpc2V0XG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgICBUaGUgY2FydGVzaWFuIHByb2R1Y3Qgb2YgdHdvIChtdWx0aSlzZXRzXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeEFycmF5TWF0cml4KGExLCBhMikge1xuICAgICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgICBpZiAoc3Vic2V0KHNpemUoYTEpLCBuZXcgSW5kZXgoMCkpICE9PSAwICYmIHN1YnNldChzaXplKGEyKSwgbmV3IEluZGV4KDApKSAhPT0gMCkge1xuICAgICAgICAvLyBpZiBhbnkgb2YgdGhlbSBpcyBlbXB0eSwgcmV0dXJuIGVtcHR5XG4gICAgICAgIHZhciBiMSA9ICgwLCBfYXJyYXkuZmxhdHRlbikoQXJyYXkuaXNBcnJheShhMSkgPyBhMSA6IGExLnRvQXJyYXkoKSkuc29ydChjb21wYXJlTmF0dXJhbCk7XG4gICAgICAgIHZhciBiMiA9ICgwLCBfYXJyYXkuZmxhdHRlbikoQXJyYXkuaXNBcnJheShhMikgPyBhMiA6IGEyLnRvQXJyYXkoKSkuc29ydChjb21wYXJlTmF0dXJhbCk7XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYjEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGIyLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaChbYjFbaV0sIGIyW2pdXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIHJldHVybiBhbiBhcnJheSwgaWYgYm90aCBpbnB1dHMgd2VyZSBhcnJheXNcblxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhMSkgJiYgQXJyYXkuaXNBcnJheShhMikpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0gLy8gcmV0dXJuIGEgbWF0cml4IG90aGVyd2lzZVxuXG5cbiAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgocmVzdWx0KTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNldENhcnRlc2lhbiA9IGNyZWF0ZVNldENhcnRlc2lhbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0RGlmZmVyZW5jZSA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3NldERpZmZlcmVuY2UnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc2l6ZScsICdzdWJzZXQnLCAnY29tcGFyZU5hdHVyYWwnLCAnSW5kZXgnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVTZXREaWZmZXJlbmNlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIGNvbXBhcmVOYXR1cmFsID0gX3JlZi5jb21wYXJlTmF0dXJhbCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBkaWZmZXJlbmNlIG9mIHR3byAobXVsdGkpc2V0czogZXZlcnkgZWxlbWVudCBvZiBzZXQxLCB0aGF0IGlzIG5vdCB0aGUgZWxlbWVudCBvZiBzZXQyLlxuICAgKiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2V0RGlmZmVyZW5jZShzZXQxLCBzZXQyKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zZXREaWZmZXJlbmNlKFsxLCAyLCAzLCA0XSwgWzMsIDQsIDUsIDZdKSAgICAgICAgICAgIC8vIHJldHVybnMgWzEsIDJdXG4gICAqICAgIG1hdGguc2V0RGlmZmVyZW5jZShbWzEsIDJdLCBbMywgNF1dLCBbWzMsIDRdLCBbNSwgNl1dKSAgICAvLyByZXR1cm5zIFsxLCAyXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2V0VW5pb24sIHNldEludGVyc2VjdCwgc2V0U3ltRGlmZmVyZW5jZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhMSAgQSAobXVsdGkpc2V0XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGEyICBBIChtdWx0aSlzZXRcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgIFRoZSBkaWZmZXJlbmNlIG9mIHR3byAobXVsdGkpc2V0c1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXkgfCBNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXhBcnJheU1hdHJpeChhMSwgYTIpIHtcbiAgICAgIHZhciByZXN1bHQ7XG5cbiAgICAgIGlmIChzdWJzZXQoc2l6ZShhMSksIG5ldyBJbmRleCgwKSkgPT09IDApIHtcbiAgICAgICAgLy8gZW1wdHktYW55dGhpbmc9ZW1wdHlcbiAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICB9IGVsc2UgaWYgKHN1YnNldChzaXplKGEyKSwgbmV3IEluZGV4KDApKSA9PT0gMCkge1xuICAgICAgICAvLyBhbnl0aGluZy1lbXB0eT1hbnl0aGluZ1xuICAgICAgICByZXR1cm4gKDAsIF9hcnJheS5mbGF0dGVuKShhMS50b0FycmF5KCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGIxID0gKDAsIF9hcnJheS5pZGVudGlmeSkoKDAsIF9hcnJheS5mbGF0dGVuKShBcnJheS5pc0FycmF5KGExKSA/IGExIDogYTEudG9BcnJheSgpKS5zb3J0KGNvbXBhcmVOYXR1cmFsKSk7XG4gICAgICAgIHZhciBiMiA9ICgwLCBfYXJyYXkuaWRlbnRpZnkpKCgwLCBfYXJyYXkuZmxhdHRlbikoQXJyYXkuaXNBcnJheShhMikgPyBhMiA6IGEyLnRvQXJyYXkoKSkuc29ydChjb21wYXJlTmF0dXJhbCkpO1xuICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgdmFyIGluYjI7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiMS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGluYjIgPSBmYWxzZTtcblxuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYjIubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChjb21wYXJlTmF0dXJhbChiMVtpXS52YWx1ZSwgYjJbal0udmFsdWUpID09PSAwICYmIGIxW2ldLmlkZW50aWZpZXIgPT09IGIyW2pdLmlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgICAgLy8gdGhlIGlkZW50aWZpZXIgaXMgYWx3YXlzIGEgZGVjaW1hbCBpbnRcbiAgICAgICAgICAgICAgaW5iMiA9IHRydWU7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghaW5iMikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goYjFbaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyByZXR1cm4gYW4gYXJyYXksIGlmIGJvdGggaW5wdXRzIHdlcmUgYXJyYXlzXG5cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYTEpICYmIEFycmF5LmlzQXJyYXkoYTIpKSB7XG4gICAgICAgIHJldHVybiAoMCwgX2FycmF5LmdlbmVyYWxpemUpKHJlc3VsdCk7XG4gICAgICB9IC8vIHJldHVybiBhIG1hdHJpeCBvdGhlcndpc2VcblxuXG4gICAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KCgwLCBfYXJyYXkuZ2VuZXJhbGl6ZSkocmVzdWx0KSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXREaWZmZXJlbmNlID0gY3JlYXRlU2V0RGlmZmVyZW5jZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0RGlzdGluY3QgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzZXREaXN0aW5jdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdzaXplJywgJ3N1YnNldCcsICdjb21wYXJlTmF0dXJhbCcsICdJbmRleCcsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZVNldERpc3RpbmN0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIGNvbXBhcmVOYXR1cmFsID0gX3JlZi5jb21wYXJlTmF0dXJhbCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcblxuICAvKipcbiAgICogQ29sbGVjdCB0aGUgZGlzdGluY3QgZWxlbWVudHMgb2YgYSBtdWx0aXNldC5cbiAgICogQSBtdWx0aS1kaW1lbnNpb24gYXJyYXkgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBzaW5nbGUtZGltZW5zaW9uIGFycmF5IGJlZm9yZSB0aGUgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2V0RGlzdGluY3Qoc2V0KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zZXREaXN0aW5jdChbMSwgMSwgMSwgMiwgMiwgM10pICAgICAgICAvLyByZXR1cm5zIFsxLCAyLCAzXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2V0TXVsdGlwbGljaXR5XG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGEgIEEgbXVsdGlzZXRcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgIEEgc2V0IGNvbnRhaW5pbmcgdGhlIGRpc3RpbmMgZWxlbWVudHMgb2YgdGhlIG11bHRpc2V0XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KGEpIHtcbiAgICAgIHZhciByZXN1bHQ7XG5cbiAgICAgIGlmIChzdWJzZXQoc2l6ZShhKSwgbmV3IEluZGV4KDApKSA9PT0gMCkge1xuICAgICAgICAvLyBpZiBlbXB0eSwgcmV0dXJuIGVtcHR5XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGIgPSAoMCwgX2FycmF5LmZsYXR0ZW4pKEFycmF5LmlzQXJyYXkoYSkgPyBhIDogYS50b0FycmF5KCkpLnNvcnQoY29tcGFyZU5hdHVyYWwpO1xuICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgcmVzdWx0LnB1c2goYlswXSk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGNvbXBhcmVOYXR1cmFsKGJbaV0sIGJbaSAtIDFdKSAhPT0gMCkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goYltpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIHJldHVybiBhbiBhcnJheSwgaWYgdGhlIGlucHV0IHdhcyBhbiBhcnJheVxuXG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IC8vIHJldHVybiBhIG1hdHJpeCBvdGhlcndpc2VcblxuXG4gICAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KHJlc3VsdCk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXREaXN0aW5jdCA9IGNyZWF0ZVNldERpc3RpbmN0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXRJbnRlcnNlY3QgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzZXRJbnRlcnNlY3QnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc2l6ZScsICdzdWJzZXQnLCAnY29tcGFyZU5hdHVyYWwnLCAnSW5kZXgnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVTZXRJbnRlcnNlY3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHN1YnNldCA9IF9yZWYuc3Vic2V0LFxuICAgICAgY29tcGFyZU5hdHVyYWwgPSBfcmVmLmNvbXBhcmVOYXR1cmFsLFxuICAgICAgSW5kZXggPSBfcmVmLkluZGV4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIGludGVyc2VjdGlvbiBvZiB0d28gKG11bHRpKXNldHMuXG4gICAqIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zZXRJbnRlcnNlY3Qoc2V0MSwgc2V0MilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc2V0SW50ZXJzZWN0KFsxLCAyLCAzLCA0XSwgWzMsIDQsIDUsIDZdKSAgICAgICAgICAgIC8vIHJldHVybnMgWzMsIDRdXG4gICAqICAgIG1hdGguc2V0SW50ZXJzZWN0KFtbMSwgMl0sIFszLCA0XV0sIFtbMywgNF0sIFs1LCA2XV0pICAgIC8vIHJldHVybnMgWzMsIDRdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzZXRVbmlvbiwgc2V0RGlmZmVyZW5jZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhMSAgQSAobXVsdGkpc2V0XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGEyICBBIChtdWx0aSlzZXRcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgIFRoZSBpbnRlcnNlY3Rpb24gb2YgdHdvIChtdWx0aSlzZXRzXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeEFycmF5TWF0cml4KGExLCBhMikge1xuICAgICAgdmFyIHJlc3VsdDtcblxuICAgICAgaWYgKHN1YnNldChzaXplKGExKSwgbmV3IEluZGV4KDApKSA9PT0gMCB8fCBzdWJzZXQoc2l6ZShhMiksIG5ldyBJbmRleCgwKSkgPT09IDApIHtcbiAgICAgICAgLy8gb2YgYW55IG9mIHRoZW0gaXMgZW1wdHksIHJldHVybiBlbXB0eVxuICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBiMSA9ICgwLCBfYXJyYXkuaWRlbnRpZnkpKCgwLCBfYXJyYXkuZmxhdHRlbikoQXJyYXkuaXNBcnJheShhMSkgPyBhMSA6IGExLnRvQXJyYXkoKSkuc29ydChjb21wYXJlTmF0dXJhbCkpO1xuICAgICAgICB2YXIgYjIgPSAoMCwgX2FycmF5LmlkZW50aWZ5KSgoMCwgX2FycmF5LmZsYXR0ZW4pKEFycmF5LmlzQXJyYXkoYTIpID8gYTIgOiBhMi50b0FycmF5KCkpLnNvcnQoY29tcGFyZU5hdHVyYWwpKTtcbiAgICAgICAgcmVzdWx0ID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiMS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYjIubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChjb21wYXJlTmF0dXJhbChiMVtpXS52YWx1ZSwgYjJbal0udmFsdWUpID09PSAwICYmIGIxW2ldLmlkZW50aWZpZXIgPT09IGIyW2pdLmlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgICAgLy8gdGhlIGlkZW50aWZpZXIgaXMgYWx3YXlzIGEgZGVjaW1hbCBpbnRcbiAgICAgICAgICAgICAgcmVzdWx0LnB1c2goYjFbaV0pO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gcmV0dXJuIGFuIGFycmF5LCBpZiBib3RoIGlucHV0cyB3ZXJlIGFycmF5c1xuXG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGExKSAmJiBBcnJheS5pc0FycmF5KGEyKSkge1xuICAgICAgICByZXR1cm4gKDAsIF9hcnJheS5nZW5lcmFsaXplKShyZXN1bHQpO1xuICAgICAgfSAvLyByZXR1cm4gYSBtYXRyaXggb3RoZXJ3aXNlXG5cblxuICAgICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCgoMCwgX2FycmF5LmdlbmVyYWxpemUpKHJlc3VsdCkpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0SW50ZXJzZWN0ID0gY3JlYXRlU2V0SW50ZXJzZWN0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXRJc1N1YnNldCA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3NldElzU3Vic2V0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NpemUnLCAnc3Vic2V0JywgJ2NvbXBhcmVOYXR1cmFsJywgJ0luZGV4J107XG52YXIgY3JlYXRlU2V0SXNTdWJzZXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIHN1YnNldCA9IF9yZWYuc3Vic2V0LFxuICAgICAgY29tcGFyZU5hdHVyYWwgPSBfcmVmLmNvbXBhcmVOYXR1cmFsLFxuICAgICAgSW5kZXggPSBfcmVmLkluZGV4O1xuXG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGEgKG11bHRpKXNldCBpcyBhIHN1YnNldCBvZiBhbm90aGVyIChtdWx0aSlzZXQuIChFdmVyeSBlbGVtZW50IG9mIHNldDEgaXMgdGhlIGVsZW1lbnQgb2Ygc2V0Mi4pXG4gICAqIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zZXRJc1N1YnNldChzZXQxLCBzZXQyKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zZXRJc1N1YnNldChbMSwgMl0sIFszLCA0LCA1LCA2XSkgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5zZXRJc1N1YnNldChbMywgNF0sIFszLCA0LCA1LCA2XSkgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2V0VW5pb24sIHNldEludGVyc2VjdCwgc2V0RGlmZmVyZW5jZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhMSAgQSAobXVsdGkpc2V0XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGEyICBBIChtdWx0aSlzZXRcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gICAgICAgICAgICB0cnVlIHwgZmFsc2VcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5IHwgTWF0cml4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4QXJyYXlNYXRyaXgoYTEsIGEyKSB7XG4gICAgICBpZiAoc3Vic2V0KHNpemUoYTEpLCBuZXcgSW5kZXgoMCkpID09PSAwKSB7XG4gICAgICAgIC8vIGVtcHR5IGlzIGEgc3Vic2V0IG9mIGFueXRoaW5nXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChzdWJzZXQoc2l6ZShhMiksIG5ldyBJbmRleCgwKSkgPT09IDApIHtcbiAgICAgICAgLy8gYW55dGhpbmcgaXMgbm90IGEgc3Vic2V0IG9mIGVtcHR5XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGIxID0gKDAsIF9hcnJheS5pZGVudGlmeSkoKDAsIF9hcnJheS5mbGF0dGVuKShBcnJheS5pc0FycmF5KGExKSA/IGExIDogYTEudG9BcnJheSgpKS5zb3J0KGNvbXBhcmVOYXR1cmFsKSk7XG4gICAgICB2YXIgYjIgPSAoMCwgX2FycmF5LmlkZW50aWZ5KSgoMCwgX2FycmF5LmZsYXR0ZW4pKEFycmF5LmlzQXJyYXkoYTIpID8gYTIgOiBhMi50b0FycmF5KCkpLnNvcnQoY29tcGFyZU5hdHVyYWwpKTtcbiAgICAgIHZhciBpbmIyO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIxLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGluYjIgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGIyLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgaWYgKGNvbXBhcmVOYXR1cmFsKGIxW2ldLnZhbHVlLCBiMltqXS52YWx1ZSkgPT09IDAgJiYgYjFbaV0uaWRlbnRpZmllciA9PT0gYjJbal0uaWRlbnRpZmllcikge1xuICAgICAgICAgICAgLy8gdGhlIGlkZW50aWZpZXIgaXMgYWx3YXlzIGEgZGVjaW1hbCBpbnRcbiAgICAgICAgICAgIGluYjIgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGluYjIgPT09IGZhbHNlKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0SXNTdWJzZXQgPSBjcmVhdGVTZXRJc1N1YnNldDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0TXVsdGlwbGljaXR5ID0gdm9pZCAwO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc2V0TXVsdGlwbGljaXR5JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NpemUnLCAnc3Vic2V0JywgJ2NvbXBhcmVOYXR1cmFsJywgJ0luZGV4J107XG52YXIgY3JlYXRlU2V0TXVsdGlwbGljaXR5ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIGNvbXBhcmVOYXR1cmFsID0gX3JlZi5jb21wYXJlTmF0dXJhbCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleDtcblxuICAvKipcbiAgICogQ291bnQgdGhlIG11bHRpcGxpY2l0eSBvZiBhbiBlbGVtZW50IGluIGEgbXVsdGlzZXQuXG4gICAqIEEgbXVsdGktZGltZW5zaW9uIGFycmF5IHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2luZ2xlLWRpbWVuc2lvbiBhcnJheSBiZWZvcmUgdGhlIG9wZXJhdGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNldE11bHRpcGxpY2l0eShlbGVtZW50LCBzZXQpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNldE11bHRpcGxpY2l0eSgxLCBbMSwgMiwgMiwgNF0pICAgIC8vIHJldHVybnMgMVxuICAgKiAgICBtYXRoLnNldE11bHRpcGxpY2l0eSgyLCBbMSwgMiwgMiwgNF0pICAgIC8vIHJldHVybnMgMlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2V0RGlzdGluY3QsIHNldFNpemVcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXh9IGUgIEFuIGVsZW1lbnQgaW4gdGhlIG11bHRpc2V0XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgICBhICBBIG11bHRpc2V0XG4gICAqIEByZXR1cm4ge251bWJlcn0gICAgICAgICAgICBUaGUgbnVtYmVyIG9mIGhvdyBtYW55IHRpbWVzIHRoZSBtdWx0aXNldCBjb250YWlucyB0aGUgZWxlbWVudFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckZyYWN0aW9uQ29tcGxleEFycmF5TWF0cml4KGUsIGEpIHtcbiAgICAgIGlmIChzdWJzZXQoc2l6ZShhKSwgbmV3IEluZGV4KDApKSA9PT0gMCkge1xuICAgICAgICAvLyBpZiBlbXB0eSwgcmV0dXJuIDBcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG5cbiAgICAgIHZhciBiID0gKDAsIF9hcnJheS5mbGF0dGVuKShBcnJheS5pc0FycmF5KGEpID8gYSA6IGEudG9BcnJheSgpKTtcbiAgICAgIHZhciBjb3VudCA9IDA7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY29tcGFyZU5hdHVyYWwoYltpXSwgZSkgPT09IDApIHtcbiAgICAgICAgICBjb3VudCsrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb3VudDtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNldE11bHRpcGxpY2l0eSA9IGNyZWF0ZVNldE11bHRpcGxpY2l0eTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0UG93ZXJzZXQgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzZXRQb3dlcnNldCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdzaXplJywgJ3N1YnNldCcsICdjb21wYXJlTmF0dXJhbCcsICdJbmRleCddO1xudmFyIGNyZWF0ZVNldFBvd2Vyc2V0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIGNvbXBhcmVOYXR1cmFsID0gX3JlZi5jb21wYXJlTmF0dXJhbCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleDtcblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBwb3dlcnNldCBvZiBhIChtdWx0aSlzZXQuIChUaGUgcG93ZXJzZXQgY29udGFpbnMgdmVyeSBwb3NzaWJsZSBzdWJzZXRzIG9mIGEgKG11bHRpKXNldC4pXG4gICAqIEEgbXVsdGktZGltZW5zaW9uIGFycmF5IHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2luZ2xlLWRpbWVuc2lvbiBhcnJheSBiZWZvcmUgdGhlIG9wZXJhdGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNldFBvd2Vyc2V0KHNldClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc2V0UG93ZXJzZXQoWzEsIDIsIDNdKSAgICAgICAgLy8gcmV0dXJucyBbW10sIFsxXSwgWzJdLCBbM10sIFsxLCAyXSwgWzEsIDNdLCBbMiwgM10sIFsxLCAyLCAzXV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNldENhcnRlc2lhblxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhICBBIChtdWx0aSlzZXRcbiAgICogQHJldHVybiB7QXJyYXl9ICAgIFRoZSBwb3dlcnNldCBvZiB0aGUgKG11bHRpKXNldFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChhKSB7XG4gICAgICBpZiAoc3Vic2V0KHNpemUoYSksIG5ldyBJbmRleCgwKSkgPT09IDApIHtcbiAgICAgICAgLy8gaWYgZW1wdHksIHJldHVybiBlbXB0eVxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG5cbiAgICAgIHZhciBiID0gKDAsIF9hcnJheS5mbGF0dGVuKShBcnJheS5pc0FycmF5KGEpID8gYSA6IGEudG9BcnJheSgpKS5zb3J0KGNvbXBhcmVOYXR1cmFsKTtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICAgIHZhciBudW1iZXIgPSAwO1xuXG4gICAgICB3aGlsZSAobnVtYmVyLnRvU3RyaW5nKDIpLmxlbmd0aCA8PSBiLmxlbmd0aCkge1xuICAgICAgICByZXN1bHQucHVzaChfc3Vic2V0KGIsIG51bWJlci50b1N0cmluZygyKS5zcGxpdCgnJykucmV2ZXJzZSgpKSk7XG4gICAgICAgIG51bWJlcisrO1xuICAgICAgfSAvLyBjYW4gbm90IHJldHVybiBhIG1hdHJpeCwgYmVjYXVzZSBvZiB0aGUgZGlmZmVyZW50IHNpemUgb2YgdGhlIHN1YmFycmF5c1xuXG5cbiAgICAgIHJldHVybiBfc29ydChyZXN1bHQpO1xuICAgIH1cbiAgfSk7IC8vIGNyZWF0ZSBzdWJzZXRcblxuICBmdW5jdGlvbiBfc3Vic2V0KGFycmF5LCBiaXRhcnJheSkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYml0YXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChiaXRhcnJheVtpXSA9PT0gJzEnKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGFycmF5W2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IC8vIHNvcnQgc3Vic2VzdHMgYnkgbGVuZ3RoXG5cblxuICBmdW5jdGlvbiBfc29ydChhcnJheSkge1xuICAgIHZhciB0ZW1wID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gYXJyYXkubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSkge1xuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBpOyBqKyspIHtcbiAgICAgICAgaWYgKGFycmF5W2pdLmxlbmd0aCA+IGFycmF5W2ogKyAxXS5sZW5ndGgpIHtcbiAgICAgICAgICB0ZW1wID0gYXJyYXlbal07XG4gICAgICAgICAgYXJyYXlbal0gPSBhcnJheVtqICsgMV07XG4gICAgICAgICAgYXJyYXlbaiArIDFdID0gdGVtcDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVNldFBvd2Vyc2V0ID0gY3JlYXRlU2V0UG93ZXJzZXQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNldFNpemUgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzZXRTaXplJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbXBhcmVOYXR1cmFsJ107XG52YXIgY3JlYXRlU2V0U2l6ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb21wYXJlTmF0dXJhbCA9IF9yZWYuY29tcGFyZU5hdHVyYWw7XG5cbiAgLyoqXG4gICAqIENvdW50IHRoZSBudW1iZXIgb2YgZWxlbWVudHMgb2YgYSAobXVsdGkpc2V0LiBXaGVuIGEgc2Vjb25kIHBhcmFtZXRlciBpcyAndHJ1ZScsIGNvdW50IG9ubHkgdGhlIHVuaXF1ZSB2YWx1ZXMuXG4gICAqIEEgbXVsdGktZGltZW5zaW9uIGFycmF5IHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2luZ2xlLWRpbWVuc2lvbiBhcnJheSBiZWZvcmUgdGhlIG9wZXJhdGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNldFNpemUoc2V0KVxuICAgKiAgICBtYXRoLnNldFNpemUoc2V0LCB1bmlxdWUpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNldFNpemUoWzEsIDIsIDIsIDRdKSAgICAgICAgICAvLyByZXR1cm5zIDRcbiAgICogICAgbWF0aC5zZXRTaXplKFsxLCAyLCAyLCA0XSwgdHJ1ZSkgICAgLy8gcmV0dXJucyAzXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzZXRVbmlvbiwgc2V0SW50ZXJzZWN0LCBzZXREaWZmZXJlbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGEgIEEgbXVsdGlzZXRcbiAgICogQHJldHVybiB7bnVtYmVyfSAgICAgICAgICAgIFRoZSBudW1iZXIgb2YgZWxlbWVudHMgb2YgdGhlIChtdWx0aSlzZXRcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoYSkge1xuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYSkgPyAoMCwgX2FycmF5LmZsYXR0ZW4pKGEpLmxlbmd0aCA6ICgwLCBfYXJyYXkuZmxhdHRlbikoYS50b0FycmF5KCkpLmxlbmd0aDtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgYm9vbGVhbic6IGZ1bmN0aW9uIEFycmF5TWF0cml4Qm9vbGVhbihhLCB1bmlxdWUpIHtcbiAgICAgIGlmICh1bmlxdWUgPT09IGZhbHNlIHx8IGEubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGEpID8gKDAsIF9hcnJheS5mbGF0dGVuKShhKS5sZW5ndGggOiAoMCwgX2FycmF5LmZsYXR0ZW4pKGEudG9BcnJheSgpKS5sZW5ndGg7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYiA9ICgwLCBfYXJyYXkuZmxhdHRlbikoQXJyYXkuaXNBcnJheShhKSA/IGEgOiBhLnRvQXJyYXkoKSkuc29ydChjb21wYXJlTmF0dXJhbCk7XG4gICAgICAgIHZhciBjb3VudCA9IDE7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBiLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKGNvbXBhcmVOYXR1cmFsKGJbaV0sIGJbaSAtIDFdKSAhPT0gMCkge1xuICAgICAgICAgICAgY291bnQrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY291bnQ7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXRTaXplID0gY3JlYXRlU2V0U2l6ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0U3ltRGlmZmVyZW5jZSA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3NldFN5bURpZmZlcmVuY2UnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc2l6ZScsICdjb25jYXQnLCAnc3Vic2V0JywgJ3NldERpZmZlcmVuY2UnLCAnSW5kZXgnXTtcbnZhciBjcmVhdGVTZXRTeW1EaWZmZXJlbmNlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBjb25jYXQgPSBfcmVmLmNvbmNhdCxcbiAgICAgIHN1YnNldCA9IF9yZWYuc3Vic2V0LFxuICAgICAgc2V0RGlmZmVyZW5jZSA9IF9yZWYuc2V0RGlmZmVyZW5jZSxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleDtcblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBzeW1tZXRyaWMgZGlmZmVyZW5jZSBvZiB0d28gKG11bHRpKXNldHMuXG4gICAqIE11bHRpLWRpbWVuc2lvbiBhcnJheXMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gc2luZ2xlLWRpbWVuc2lvbiBhcnJheXMgYmVmb3JlIHRoZSBvcGVyYXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zZXRTeW1EaWZmZXJlbmNlKHNldDEsIHNldDIpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNldFN5bURpZmZlcmVuY2UoWzEsIDIsIDMsIDRdLCBbMywgNCwgNSwgNl0pICAgICAgICAgICAgLy8gcmV0dXJucyBbMSwgMiwgNSwgNl1cbiAgICogICAgbWF0aC5zZXRTeW1EaWZmZXJlbmNlKFtbMSwgMl0sIFszLCA0XV0sIFtbMywgNF0sIFs1LCA2XV0pICAgIC8vIHJldHVybnMgWzEsIDIsIDUsIDZdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzZXRVbmlvbiwgc2V0SW50ZXJzZWN0LCBzZXREaWZmZXJlbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGExICBBIChtdWx0aSlzZXRcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gICAgYTIgIEEgKG11bHRpKXNldFxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgVGhlIHN5bW1ldHJpYyBkaWZmZXJlbmNlIG9mIHR3byAobXVsdGkpc2V0c1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXkgfCBNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXhBcnJheU1hdHJpeChhMSwgYTIpIHtcbiAgICAgIGlmIChzdWJzZXQoc2l6ZShhMSksIG5ldyBJbmRleCgwKSkgPT09IDApIHtcbiAgICAgICAgLy8gaWYgYW55IG9mIHRoZW0gaXMgZW1wdHksIHJldHVybiB0aGUgb3RoZXIgb25lXG4gICAgICAgIHJldHVybiAoMCwgX2FycmF5LmZsYXR0ZW4pKGEyKTtcbiAgICAgIH0gZWxzZSBpZiAoc3Vic2V0KHNpemUoYTIpLCBuZXcgSW5kZXgoMCkpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAoMCwgX2FycmF5LmZsYXR0ZW4pKGExKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGIxID0gKDAsIF9hcnJheS5mbGF0dGVuKShhMSk7XG4gICAgICB2YXIgYjIgPSAoMCwgX2FycmF5LmZsYXR0ZW4pKGEyKTtcbiAgICAgIHJldHVybiBjb25jYXQoc2V0RGlmZmVyZW5jZShiMSwgYjIpLCBzZXREaWZmZXJlbmNlKGIyLCBiMSkpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0U3ltRGlmZmVyZW5jZSA9IGNyZWF0ZVNldFN5bURpZmZlcmVuY2U7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNldFVuaW9uID0gdm9pZCAwO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc2V0VW5pb24nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc2l6ZScsICdjb25jYXQnLCAnc3Vic2V0JywgJ3NldEludGVyc2VjdCcsICdzZXRTeW1EaWZmZXJlbmNlJywgJ0luZGV4J107XG52YXIgY3JlYXRlU2V0VW5pb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgc2l6ZSA9IF9yZWYuc2l6ZSxcbiAgICAgIGNvbmNhdCA9IF9yZWYuY29uY2F0LFxuICAgICAgc3Vic2V0ID0gX3JlZi5zdWJzZXQsXG4gICAgICBzZXRJbnRlcnNlY3QgPSBfcmVmLnNldEludGVyc2VjdCxcbiAgICAgIHNldFN5bURpZmZlcmVuY2UgPSBfcmVmLnNldFN5bURpZmZlcmVuY2UsXG4gICAgICBJbmRleCA9IF9yZWYuSW5kZXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgdW5pb24gb2YgdHdvIChtdWx0aSlzZXRzLlxuICAgKiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2V0VW5pb24oc2V0MSwgc2V0MilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc2V0VW5pb24oWzEsIDIsIDMsIDRdLCBbMywgNCwgNSwgNl0pICAgICAgICAgICAgLy8gcmV0dXJucyBbMSwgMiwgMywgNCwgNSwgNl1cbiAgICogICAgbWF0aC5zZXRVbmlvbihbWzEsIDJdLCBbMywgNF1dLCBbWzMsIDRdLCBbNSwgNl1dKSAgICAvLyByZXR1cm5zIFsxLCAyLCAzLCA0LCA1LCA2XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2V0SW50ZXJzZWN0LCBzZXREaWZmZXJlbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGExICBBIChtdWx0aSlzZXRcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gICAgYTIgIEEgKG11bHRpKXNldFxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgVGhlIHVuaW9uIG9mIHR3byAobXVsdGkpc2V0c1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXkgfCBNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXhBcnJheU1hdHJpeChhMSwgYTIpIHtcbiAgICAgIGlmIChzdWJzZXQoc2l6ZShhMSksIG5ldyBJbmRleCgwKSkgPT09IDApIHtcbiAgICAgICAgLy8gaWYgYW55IG9mIHRoZW0gaXMgZW1wdHksIHJldHVybiB0aGUgb3RoZXIgb25lXG4gICAgICAgIHJldHVybiAoMCwgX2FycmF5LmZsYXR0ZW4pKGEyKTtcbiAgICAgIH0gZWxzZSBpZiAoc3Vic2V0KHNpemUoYTIpLCBuZXcgSW5kZXgoMCkpID09PSAwKSB7XG4gICAgICAgIHJldHVybiAoMCwgX2FycmF5LmZsYXR0ZW4pKGExKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGIxID0gKDAsIF9hcnJheS5mbGF0dGVuKShhMSk7XG4gICAgICB2YXIgYjIgPSAoMCwgX2FycmF5LmZsYXR0ZW4pKGEyKTtcbiAgICAgIHJldHVybiBjb25jYXQoc2V0U3ltRGlmZmVyZW5jZShiMSwgYjIpLCBzZXRJbnRlcnNlY3QoYjEsIGIyKSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXRVbmlvbiA9IGNyZWF0ZVNldFVuaW9uOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVFcmYgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdlcmYnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVFcmYgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBlcmYgZnVuY3Rpb24gb2YgYSB2YWx1ZSB1c2luZyBhIHJhdGlvbmFsIENoZWJ5c2hldlxuICAgKiBhcHByb3hpbWF0aW9ucyBmb3IgZGlmZmVyZW50IGludGVydmFscyBvZiB4LlxuICAgKlxuICAgKiBUaGlzIGlzIGEgdHJhbnNsYXRpb24gb2YgVy4gSi4gQ29keSdzIEZvcnRyYW4gaW1wbGVtZW50YXRpb24gZnJvbSAxOTg3XG4gICAqICggaHR0cHM6Ly93d3cubmV0bGliLm9yZy9zcGVjZnVuL2VyZiApLiBTZWUgdGhlIEFNUyBwdWJsaWNhdGlvblxuICAgKiBcIlJhdGlvbmFsIENoZWJ5c2hldiBBcHByb3hpbWF0aW9ucyBmb3IgdGhlIEVycm9yIEZ1bmN0aW9uXCIgYnkgVy4gSi4gQ29keVxuICAgKiBmb3IgYW4gZXhwbGFuYXRpb24gb2YgdGhpcyBwcm9jZXNzLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZXJmKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmVyZigwLjIpICAgIC8vIHJldHVybnMgMC4yMjI3MDI1ODkyMTA0Nzg0N1xuICAgKiAgICBtYXRoLmVyZigtMC41KSAgIC8vIHJldHVybnMgLTAuNTIwNDk5ODc3ODEzMDQ2NVxuICAgKiAgICBtYXRoLmVyZig0KSAgICAgIC8vIHJldHVybnMgMC45OTk5OTk5ODQ1ODI3NDIxXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IHggICBBIHJlYWwgbnVtYmVyXG4gICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSAgICBUaGUgZXJmIG9mIGB4YFxuICAgKi9cbiAgdmFyIGVyZiA9IHR5cGVkKCduYW1lJywge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIHZhciB5ID0gTWF0aC5hYnMoeCk7XG5cbiAgICAgIGlmICh5ID49IE1BWF9OVU0pIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLnNpZ24pKHgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoeSA8PSBUSFJFU0gpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLnNpZ24pKHgpICogZXJmMSh5KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHkgPD0gNC4wKSB7XG4gICAgICAgIHJldHVybiAoMCwgX251bWJlci5zaWduKSh4KSAqICgxIC0gZXJmYzIoeSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKDAsIF9udW1iZXIuc2lnbikoeCkgKiAoMSAtIGVyZmMzKHkpKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KG4pIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkobiwgZXJmKTtcbiAgICB9IC8vIFRPRE86IEZvciBjb21wbGV4IG51bWJlcnMsIHVzZSB0aGUgYXBwcm94aW1hdGlvbiBmb3IgdGhlIEZhZGRlZXZhIGZ1bmN0aW9uXG4gICAgLy8gIGZyb20gXCJNb3JlIEVmZmljaWVudCBDb21wdXRhdGlvbiBvZiB0aGUgQ29tcGxleCBFcnJvciBGdW5jdGlvblwiIChBTVMpXG5cbiAgfSk7XG4gIC8qKlxuICAgKiBBcHByb3hpbWF0ZXMgdGhlIGVycm9yIGZ1bmN0aW9uIGVyZigpIGZvciB4IDw9IDAuNDY4NzUgdXNpbmcgdGhpcyBmdW5jdGlvbjpcbiAgICogICAgICAgICAgICAgICBuXG4gICAqIGVyZih4KSA9IHggKiBzdW0gKHBfaiAqIHheKDJqKSkgLyAocV9qICogeF4oMmopKVxuICAgKiAgICAgICAgICAgICAgaj0wXG4gICAqL1xuXG4gIGZ1bmN0aW9uIGVyZjEoeSkge1xuICAgIHZhciB5c3EgPSB5ICogeTtcbiAgICB2YXIgeG51bSA9IFBbMF1bNF0gKiB5c3E7XG4gICAgdmFyIHhkZW4gPSB5c3E7XG4gICAgdmFyIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgMzsgaSArPSAxKSB7XG4gICAgICB4bnVtID0gKHhudW0gKyBQWzBdW2ldKSAqIHlzcTtcbiAgICAgIHhkZW4gPSAoeGRlbiArIFFbMF1baV0pICogeXNxO1xuICAgIH1cblxuICAgIHJldHVybiB5ICogKHhudW0gKyBQWzBdWzNdKSAvICh4ZGVuICsgUVswXVszXSk7XG4gIH1cbiAgLyoqXG4gICAqIEFwcHJveGltYXRlcyB0aGUgY29tcGxlbWVudCBvZiB0aGUgZXJyb3IgZnVuY3Rpb24gZXJmYygpIGZvclxuICAgKiAwLjQ2ODc1IDw9IHggPD0gNC4wIHVzaW5nIHRoaXMgZnVuY3Rpb246XG4gICAqICAgICAgICAgICAgICAgICAgICAgICBuXG4gICAqIGVyZmMoeCkgPSBlXigteF4yKSAqIHN1bSAocF9qICogeF5qKSAvIChxX2ogKiB4XmopXG4gICAqICAgICAgICAgICAgICAgICAgICAgIGo9MFxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGVyZmMyKHkpIHtcbiAgICB2YXIgeG51bSA9IFBbMV1bOF0gKiB5O1xuICAgIHZhciB4ZGVuID0geTtcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCA3OyBpICs9IDEpIHtcbiAgICAgIHhudW0gPSAoeG51bSArIFBbMV1baV0pICogeTtcbiAgICAgIHhkZW4gPSAoeGRlbiArIFFbMV1baV0pICogeTtcbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0ID0gKHhudW0gKyBQWzFdWzddKSAvICh4ZGVuICsgUVsxXVs3XSk7XG4gICAgdmFyIHlzcSA9IHBhcnNlSW50KHkgKiAxNikgLyAxNjtcbiAgICB2YXIgZGVsID0gKHkgLSB5c3EpICogKHkgKyB5c3EpO1xuICAgIHJldHVybiBNYXRoLmV4cCgteXNxICogeXNxKSAqIE1hdGguZXhwKC1kZWwpICogcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKiBBcHByb3hpbWF0ZXMgdGhlIGNvbXBsZW1lbnQgb2YgdGhlIGVycm9yIGZ1bmN0aW9uIGVyZmMoKSBmb3IgeCA+IDQuMCB1c2luZ1xuICAgKiB0aGlzIGZ1bmN0aW9uOlxuICAgKlxuICAgKiBlcmZjKHgpID0gKGVeKC14XjIpIC8geCkgKiBbIDEvc3FydChwaSkgK1xuICAgKiAgICAgICAgICAgICAgIG5cbiAgICogICAgMS8oeF4yKSAqIHN1bSAocF9qICogeF4oLTJqKSkgLyAocV9qICogeF4oLTJqKSkgXVxuICAgKiAgICAgICAgICAgICAgaj0wXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZXJmYzMoeSkge1xuICAgIHZhciB5c3EgPSAxIC8gKHkgKiB5KTtcbiAgICB2YXIgeG51bSA9IFBbMl1bNV0gKiB5c3E7XG4gICAgdmFyIHhkZW4gPSB5c3E7XG4gICAgdmFyIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgNDsgaSArPSAxKSB7XG4gICAgICB4bnVtID0gKHhudW0gKyBQWzJdW2ldKSAqIHlzcTtcbiAgICAgIHhkZW4gPSAoeGRlbiArIFFbMl1baV0pICogeXNxO1xuICAgIH1cblxuICAgIHZhciByZXN1bHQgPSB5c3EgKiAoeG51bSArIFBbMl1bNF0pIC8gKHhkZW4gKyBRWzJdWzRdKTtcbiAgICByZXN1bHQgPSAoU1FSUEkgLSByZXN1bHQpIC8geTtcbiAgICB5c3EgPSBwYXJzZUludCh5ICogMTYpIC8gMTY7XG4gICAgdmFyIGRlbCA9ICh5IC0geXNxKSAqICh5ICsgeXNxKTtcbiAgICByZXR1cm4gTWF0aC5leHAoLXlzcSAqIHlzcSkgKiBNYXRoLmV4cCgtZGVsKSAqIHJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBlcmY7XG59KTtcbi8qKlxuICogVXBwZXIgYm91bmQgZm9yIHRoZSBmaXJzdCBhcHByb3hpbWF0aW9uIGludGVydmFsLCAwIDw9IHggPD0gVEhSRVNIXG4gKiBAY29uc3RhbnRcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZUVyZiA9IGNyZWF0ZUVyZjtcbnZhciBUSFJFU0ggPSAwLjQ2ODc1O1xuLyoqXG4gKiBDb25zdGFudCB1c2VkIGJ5IFcuIEouIENvZHkncyBGb3J0cmFuNzcgaW1wbGVtZW50YXRpb24gdG8gZGVub3RlIHNxcnQocGkpXG4gKiBAY29uc3RhbnRcbiAqL1xuXG52YXIgU1FSUEkgPSA1LjY0MTg5NTgzNTQ3NzU2Mjg2OTVlLTE7XG4vKipcbiAqIENvZWZmaWNpZW50cyBmb3IgZWFjaCB0ZXJtIG9mIHRoZSBudW1lcmF0b3Igc3VtIChwX2opIGZvciBlYWNoIGFwcHJveGltYXRpb25cbiAqIGludGVydmFsIChzZWUgVy4gSi4gQ29keSdzIHBhcGVyIGZvciBtb3JlIGRldGFpbHMpXG4gKiBAY29uc3RhbnRcbiAqL1xuXG52YXIgUCA9IFtbMy4xNjExMjM3NDM4NzA1NjU2MGUwMCwgMS4xMzg2NDE1NDE1MTA1MDE1NmUwMiwgMy43NzQ4NTIzNzY4NTMwMjAyMWUwMiwgMy4yMDkzNzc1ODkxMzg0Njk0N2UwMywgMS44NTc3NzcwNjE4NDYwMzE1M2UtMV0sIFs1LjY0MTg4NDk2OTg4NjcwMDg5ZS0xLCA4Ljg4MzE0OTc5NDM4ODM3NTk0ZTAwLCA2LjYxMTkxOTA2MzcxNDE2Mjk1ZTAxLCAyLjk4NjM1MTM4MTk3NDAwMTMxZTAyLCA4LjgxOTUyMjIxMjQxNzY5MDkwZTAyLCAxLjcxMjA0NzYxMjYzNDA3MDU4ZTAzLCAyLjA1MTA3ODM3NzgyNjA3MTQ3ZTAzLCAxLjIzMDMzOTM1NDc5Nzk5NzI1ZTAzLCAyLjE1MzExNTM1NDc0NDAzODQ2ZS04XSwgWzMuMDUzMjY2MzQ5NjEyMzIzNDRlLTEsIDMuNjAzNDQ4OTk5NDk4MDQ0MzllLTEsIDEuMjU3ODE3MjYxMTEyMjkyNDZlLTEsIDEuNjA4Mzc4NTE0ODc0MjI3NjZlLTIsIDYuNTg3NDkxNjE1Mjk4Mzc4MDNlLTQsIDEuNjMxNTM4NzEzNzMwMjA5NzhlLTJdXTtcbi8qKlxuICogQ29lZmZpY2llbnRzIGZvciBlYWNoIHRlcm0gb2YgdGhlIGRlbm9taW5hdG9yIHN1bSAocV9qKSBmb3IgZWFjaCBhcHByb3hpbWF0aW9uXG4gKiBpbnRlcnZhbCAoc2VlIFcuIEouIENvZHkncyBwYXBlciBmb3IgbW9yZSBkZXRhaWxzKVxuICogQGNvbnN0YW50XG4gKi9cblxudmFyIFEgPSBbWzIuMzYwMTI5MDk1MjM0NDEyMDllMDEsIDIuNDQwMjQ2Mzc5MzQ0NDQxNzNlMDIsIDEuMjgyNjE2NTI2MDc3MzcyMjhlMDMsIDIuODQ0MjM2ODMzNDM5MTcwNjJlMDNdLCBbMS41NzQ0OTI2MTEwNzA5ODM0N2UwMSwgMS4xNzY5Mzk1MDg5MTMxMjQ5OWUwMiwgNS4zNzE4MTEwMTg2MjAwOTg1OGUwMiwgMS42MjEzODk1NzQ1NjY2OTAxOWUwMywgMy4yOTA3OTkyMzU3MzM0NTk2M2UwMywgNC4zNjI2MTkwOTAxNDMyNDcxNmUwMywgMy40MzkzNjc2NzQxNDM3MjE2NGUwMywgMS4yMzAzMzkzNTQ4MDM3NDk0MmUwM10sIFsyLjU2ODUyMDE5MjI4OTgyMjQyZTAwLCAxLjg3Mjk1Mjg0OTkyMzQ2MDQ3ZTAwLCA1LjI3OTA1MTAyOTUxNDI4NDEyZS0xLCA2LjA1MTgzNDEzMTI0NDEzMTkxZS0yLCAyLjMzNTIwNDk3NjI2ODY5MTg1ZS0zXV07XG4vKipcbiAqIE1heGltdW0vbWluaW11bSBzYWZlIG51bWJlcnMgdG8gaW5wdXQgdG8gZXJmKCkgKGluIEVTNissIHRoaXMgbnVtYmVyIGlzXG4gKiBOdW1iZXIuW01BWHxNSU5dX1NBRkVfSU5URUdFUikuIGVyZigpIGZvciBhbGwgbnVtYmVycyBiZXlvbmQgdGhpcyBsaW1pdCB3aWxsXG4gKiByZXR1cm4gMVxuICovXG5cbnZhciBNQVhfTlVNID0gTWF0aC5wb3coMiwgNTMpOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNYWQgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2ltcHJvdmVFcnJvck1lc3NhZ2UgPSByZXF1aXJlKFwiLi91dGlscy9pbXByb3ZlRXJyb3JNZXNzYWdlXCIpO1xuXG52YXIgbmFtZSA9ICdtYWQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnYWJzJywgJ21hcCcsICdtZWRpYW4nLCAnc3VidHJhY3QnXTtcbnZhciBjcmVhdGVNYWQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWJzID0gX3JlZi5hYnMsXG4gICAgICBtYXAgPSBfcmVmLm1hcCxcbiAgICAgIG1lZGlhbiA9IF9yZWYubWVkaWFuLFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0O1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBtZWRpYW4gYWJzb2x1dGUgZGV2aWF0aW9uIG9mIGEgbWF0cml4IG9yIGEgbGlzdCB3aXRoIHZhbHVlcy5cbiAgICogVGhlIG1lZGlhbiBhYnNvbHV0ZSBkZXZpYXRpb24gaXMgZGVmaW5lZCBhcyB0aGUgbWVkaWFuIG9mIHRoZSBhYnNvbHV0ZVxuICAgKiBkZXZpYXRpb25zIGZyb20gdGhlIG1lZGlhbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5tYWQoYSwgYiwgYywgLi4uKVxuICAgKiAgICAgbWF0aC5tYWQoQSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLm1hZCgxMCwgMjAsIDMwKSAgICAgICAgICAgICAvLyByZXR1cm5zIDEwXG4gICAqICAgICBtYXRoLm1hZChbMSwgMiwgM10pICAgICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICogICAgIG1hdGgubWFkKFtbMSwgMiwgM10sIFs0LCA1LCA2XV0pIC8vIHJldHVybnMgMS41XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgbWVkaWFuLCBtZWFuLCBzdGQsIGFic1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSBhcnJheVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIEEgc2luZ2xlIG1hdHJpeCBvciBtdWx0aXBsZSBzY2FsYXIgdmFsdWVzLlxuICAgKiBAcmV0dXJuIHsqfSBUaGUgbWVkaWFuIGFic29sdXRlIGRldmlhdGlvbi5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgLy8gbWFkKFthLCBiLCBjLCBkLCAuLi5dKVxuICAgICdBcnJheSB8IE1hdHJpeCc6IF9tYWQsXG4gICAgLy8gbWFkKGEsIGIsIGMsIGQsIC4uLilcbiAgICAnLi4uJzogZnVuY3Rpb24gXyhhcmdzKSB7XG4gICAgICByZXR1cm4gX21hZChhcmdzKTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9tYWQoYXJyYXkpIHtcbiAgICBhcnJheSA9ICgwLCBfYXJyYXkuZmxhdHRlbikoYXJyYXkudmFsdWVPZigpKTtcblxuICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBtZWRpYW4gYWJzb2x1dGUgZGV2aWF0aW9uIChtYWQpIG9mIGFuIGVtcHR5IGFycmF5Jyk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHZhciBtZWQgPSBtZWRpYW4oYXJyYXkpO1xuICAgICAgcmV0dXJuIG1lZGlhbihtYXAoYXJyYXksIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gYWJzKHN1YnRyYWN0KHZhbHVlLCBtZWQpKTtcbiAgICAgIH0pKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBUeXBlRXJyb3IgJiYgZXJyLm1lc3NhZ2UuaW5kZXhPZignbWVkaWFuJykgIT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZXJyLm1lc3NhZ2UucmVwbGFjZSgnbWVkaWFuJywgJ21hZCcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93ICgwLCBfaW1wcm92ZUVycm9yTWVzc2FnZS5pbXByb3ZlRXJyb3JNZXNzYWdlKShlcnIsICdtYWQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVNYWQgPSBjcmVhdGVNYWQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1heCA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2ltcHJvdmVFcnJvck1lc3NhZ2UgPSByZXF1aXJlKFwiLi91dGlscy9pbXByb3ZlRXJyb3JNZXNzYWdlXCIpO1xuXG52YXIgbmFtZSA9ICdtYXgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbGFyZ2VyJ107XG52YXIgY3JlYXRlTWF4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBtYXhpbXVtIHZhbHVlIG9mIGEgbWF0cml4IG9yIGEgIGxpc3Qgd2l0aCB2YWx1ZXMuXG4gICAqIEluIGNhc2Ugb2YgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheSwgdGhlIG1heGltdW0gb2YgdGhlIGZsYXR0ZW5lZCBhcnJheVxuICAgKiB3aWxsIGJlIGNhbGN1bGF0ZWQuIFdoZW4gYGRpbWAgaXMgcHJvdmlkZWQsIHRoZSBtYXhpbXVtIG92ZXIgdGhlIHNlbGVjdGVkXG4gICAqIGRpbWVuc2lvbiB3aWxsIGJlIGNhbGN1bGF0ZWQuIFBhcmFtZXRlciBgZGltYCBpcyB6ZXJvLWJhc2VkLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLm1heChhLCBiLCBjLCAuLi4pXG4gICAqICAgICBtYXRoLm1heChBKVxuICAgKiAgICAgbWF0aC5tYXgoQSwgZGltKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgubWF4KDIsIDEsIDQsIDMpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyA0XG4gICAqICAgICBtYXRoLm1heChbMiwgMSwgNCwgM10pICAgICAgICAgICAgICAgIC8vIHJldHVybnMgNFxuICAgKlxuICAgKiAgICAgLy8gbWF4aW11bSBvdmVyIGEgc3BlY2lmaWVkIGRpbWVuc2lvbiAoemVyby1iYXNlZClcbiAgICogICAgIG1hdGgubWF4KFtbMiwgNV0sIFs0LCAzXSwgWzEsIDddXSwgMCkgLy8gcmV0dXJucyBbNCwgN11cbiAgICogICAgIG1hdGgubWF4KFtbMiwgNV0sIFs0LCAzXV0sIFsxLCA3XSwgMSkgLy8gcmV0dXJucyBbNSwgNCwgN11cbiAgICpcbiAgICogICAgIG1hdGgubWF4KDIuNywgNy4xLCAtNC41LCAyLjAsIDQuMSkgICAgLy8gcmV0dXJucyA3LjFcbiAgICogICAgIG1hdGgubWluKDIuNywgNy4xLCAtNC41LCAyLjAsIDQuMSkgICAgLy8gcmV0dXJucyAtNC41XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBtZWFuLCBtZWRpYW4sIG1pbiwgcHJvZCwgc3RkLCBzdW0sIHZhcmlhbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7Li4uICp9IGFyZ3MgIEEgc2luZ2xlIG1hdHJpeCBvciBvciBtdWx0aXBsZSBzY2FsYXIgdmFsdWVzXG4gICAqIEByZXR1cm4geyp9IFRoZSBtYXhpbXVtIHZhbHVlXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIC8vIG1heChbYSwgYiwgYywgZCwgLi4uXSlcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBfbWF4LFxuICAgIC8vIG1heChbYSwgYiwgYywgZCwgLi4uXSwgZGltKVxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXIoYXJyYXksIGRpbSkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5yZWR1Y2UpKGFycmF5LCBkaW0udmFsdWVPZigpLCBfbGFyZ2VzdCk7XG4gICAgfSxcbiAgICAvLyBtYXgoYSwgYiwgYywgZCwgLi4uKVxuICAgICcuLi4nOiBmdW5jdGlvbiBfKGFyZ3MpIHtcbiAgICAgIGlmICgoMCwgX2NvbGxlY3Rpb24uY29udGFpbnNDb2xsZWN0aW9ucykoYXJncykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignU2NhbGFyIHZhbHVlcyBleHBlY3RlZCBpbiBmdW5jdGlvbiBtYXgnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9tYXgoYXJncyk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbGFyZ2VzdCBvZiB0d28gdmFsdWVzXG4gICAqIEBwYXJhbSB7Kn0geFxuICAgKiBAcGFyYW0geyp9IHlcbiAgICogQHJldHVybnMgeyp9IFJldHVybnMgeCB3aGVuIHggaXMgbGFyZ2VzdCwgb3IgeSB3aGVuIHkgaXMgbGFyZ2VzdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfbGFyZ2VzdCh4LCB5KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBsYXJnZXIoeCwgeSkgPyB4IDogeTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93ICgwLCBfaW1wcm92ZUVycm9yTWVzc2FnZS5pbXByb3ZlRXJyb3JNZXNzYWdlKShlcnIsICdtYXgnLCB5KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGNhbGN1bGF0ZSB0aGUgbWF4aW11bSB2YWx1ZSBpbiBhbiBuLWRpbWVuc2lvbmFsIGFycmF5XG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gICAqIEByZXR1cm4ge251bWJlcn0gbWF4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX21heChhcnJheSkge1xuICAgIHZhciByZXM7XG4gICAgKDAsIF9jb2xsZWN0aW9uLmRlZXBGb3JFYWNoKShhcnJheSwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoaXNOYU4odmFsdWUpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICByZXMgPSBOYU47XG4gICAgICAgIH0gZWxzZSBpZiAocmVzID09PSB1bmRlZmluZWQgfHwgbGFyZ2VyKHZhbHVlLCByZXMpKSB7XG4gICAgICAgICAgcmVzID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2ltcHJvdmVFcnJvck1lc3NhZ2UuaW1wcm92ZUVycm9yTWVzc2FnZSkoZXJyLCAnbWF4JywgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKHJlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgbWF4IG9mIGFuIGVtcHR5IGFycmF5Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZU1heCA9IGNyZWF0ZU1heDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTWVhbiA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2ltcHJvdmVFcnJvck1lc3NhZ2UgPSByZXF1aXJlKFwiLi91dGlscy9pbXByb3ZlRXJyb3JNZXNzYWdlXCIpO1xuXG52YXIgbmFtZSA9ICdtZWFuJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZCcsICdkaXZpZGUnXTtcbnZhciBjcmVhdGVNZWFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgZGl2aWRlID0gX3JlZi5kaXZpZGU7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIG1lYW4gdmFsdWUgb2YgbWF0cml4IG9yIGEgbGlzdCB3aXRoIHZhbHVlcy5cbiAgICogSW4gY2FzZSBvZiBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5LCB0aGUgbWVhbiBvZiB0aGUgZmxhdHRlbmVkIGFycmF5XG4gICAqIHdpbGwgYmUgY2FsY3VsYXRlZC4gV2hlbiBgZGltYCBpcyBwcm92aWRlZCwgdGhlIG1heGltdW0gb3ZlciB0aGUgc2VsZWN0ZWRcbiAgICogZGltZW5zaW9uIHdpbGwgYmUgY2FsY3VsYXRlZC4gUGFyYW1ldGVyIGBkaW1gIGlzIHplcm8tYmFzZWQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgubWVhbihhLCBiLCBjLCAuLi4pXG4gICAqICAgICBtYXRoLm1lYW4oQSlcbiAgICogICAgIG1hdGgubWVhbihBLCBkaW0pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5tZWFuKDIsIDEsIDQsIDMpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAyLjVcbiAgICogICAgIG1hdGgubWVhbihbMSwgMi43LCAzLjIsIDRdKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgMi43MjVcbiAgICpcbiAgICogICAgIG1hdGgubWVhbihbWzIsIDVdLCBbNiwgM10sIFsxLCA3XV0sIDApICAgIC8vIHJldHVybnMgWzMsIDVdXG4gICAqICAgICBtYXRoLm1lYW4oW1syLCA1XSwgWzYsIDNdLCBbMSwgN11dLCAxKSAgICAvLyByZXR1cm5zIFszLjUsIDQuNSwgNF1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBtZWRpYW4sIG1pbiwgbWF4LCBzdW0sIHByb2QsIHN0ZCwgdmFyaWFuY2VcbiAgICpcbiAgICogQHBhcmFtIHsuLi4gKn0gYXJncyAgQSBzaW5nbGUgbWF0cml4IG9yIG9yIG11bHRpcGxlIHNjYWxhciB2YWx1ZXNcbiAgICogQHJldHVybiB7Kn0gVGhlIG1lYW4gb2YgYWxsIHZhbHVlc1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyBtZWFuKFthLCBiLCBjLCBkLCAuLi5dKVxuICAgICdBcnJheSB8IE1hdHJpeCc6IF9tZWFuLFxuICAgIC8vIG1lYW4oW2EsIGIsIGMsIGQsIC4uLl0sIGRpbSlcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IF9ubWVhbkRpbSxcbiAgICAvLyBtZWFuKGEsIGIsIGMsIGQsIC4uLilcbiAgICAnLi4uJzogZnVuY3Rpb24gXyhhcmdzKSB7XG4gICAgICBpZiAoKDAsIF9jb2xsZWN0aW9uLmNvbnRhaW5zQ29sbGVjdGlvbnMpKGFyZ3MpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NjYWxhciB2YWx1ZXMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gbWVhbicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX21lYW4oYXJncyk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbWVhbiB2YWx1ZSBpbiBhbiBuLWRpbWVuc2lvbmFsIGFycmF5LCByZXR1cm5pbmcgYVxuICAgKiBuLTEgZGltZW5zaW9uYWwgYXJyYXlcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpbVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IG1lYW5cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX25tZWFuRGltKGFycmF5LCBkaW0pIHtcbiAgICB0cnkge1xuICAgICAgdmFyIHN1bSA9ICgwLCBfY29sbGVjdGlvbi5yZWR1Y2UpKGFycmF5LCBkaW0sIGFkZCk7XG4gICAgICB2YXIgcyA9IEFycmF5LmlzQXJyYXkoYXJyYXkpID8gKDAsIF9hcnJheS5hcnJheVNpemUpKGFycmF5KSA6IGFycmF5LnNpemUoKTtcbiAgICAgIHJldHVybiBkaXZpZGUoc3VtLCBzW2RpbV0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgKDAsIF9pbXByb3ZlRXJyb3JNZXNzYWdlLmltcHJvdmVFcnJvck1lc3NhZ2UpKGVyciwgJ21lYW4nKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGNhbGN1bGF0ZSB0aGUgbWVhbiB2YWx1ZSBpbiBhbiBuLWRpbWVuc2lvbmFsIGFycmF5XG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gICAqIEByZXR1cm4ge251bWJlcn0gbWVhblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9tZWFuKGFycmF5KSB7XG4gICAgdmFyIHN1bTtcbiAgICB2YXIgbnVtID0gMDtcbiAgICAoMCwgX2NvbGxlY3Rpb24uZGVlcEZvckVhY2gpKGFycmF5LCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN1bSA9IHN1bSA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiBhZGQoc3VtLCB2YWx1ZSk7XG4gICAgICAgIG51bSsrO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfaW1wcm92ZUVycm9yTWVzc2FnZS5pbXByb3ZlRXJyb3JNZXNzYWdlKShlcnIsICdtZWFuJywgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKG51bSA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIHRoZSBtZWFuIG9mIGFuIGVtcHR5IGFycmF5Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpdmlkZShzdW0sIG51bSk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVNZWFuID0gY3JlYXRlTWVhbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTWVkaWFuID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfaW1wcm92ZUVycm9yTWVzc2FnZSA9IHJlcXVpcmUoXCIuL3V0aWxzL2ltcHJvdmVFcnJvck1lc3NhZ2VcIik7XG5cbnZhciBuYW1lID0gJ21lZGlhbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGQnLCAnZGl2aWRlJywgJ2NvbXBhcmUnLCAncGFydGl0aW9uU2VsZWN0J107XG52YXIgY3JlYXRlTWVkaWFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgZGl2aWRlID0gX3JlZi5kaXZpZGUsXG4gICAgICBjb21wYXJlID0gX3JlZi5jb21wYXJlLFxuICAgICAgcGFydGl0aW9uU2VsZWN0ID0gX3JlZi5wYXJ0aXRpb25TZWxlY3Q7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIG1lZGlhbiBvZiBhIG1hdHJpeCBvciBhIGxpc3Qgd2l0aCB2YWx1ZXMuIFRoZSB2YWx1ZXMgYXJlXG4gICAqIHNvcnRlZCBhbmQgdGhlIG1pZGRsZSB2YWx1ZSBpcyByZXR1cm5lZC4gSW4gY2FzZSBvZiBhbiBldmVuIG51bWJlciBvZlxuICAgKiB2YWx1ZXMsIHRoZSBhdmVyYWdlIG9mIHRoZSB0d28gbWlkZGxlIHZhbHVlcyBpcyByZXR1cm5lZC5cbiAgICogU3VwcG9ydGVkIHR5cGVzIG9mIHZhbHVlcyBhcmU6IE51bWJlciwgQmlnTnVtYmVyLCBVbml0XG4gICAqXG4gICAqIEluIGNhc2Ugb2YgYSAobXVsdGkgZGltZW5zaW9uYWwpIGFycmF5IG9yIG1hdHJpeCwgdGhlIG1lZGlhbiBvZiBhbGxcbiAgICogZWxlbWVudHMgd2lsbCBiZSBjYWxjdWxhdGVkLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLm1lZGlhbihhLCBiLCBjLCAuLi4pXG4gICAqICAgICBtYXRoLm1lZGlhbihBKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgubWVkaWFuKDUsIDIsIDcpICAgICAgICAvLyByZXR1cm5zIDVcbiAgICogICAgIG1hdGgubWVkaWFuKFszLCAtMSwgNSwgN10pICAvLyByZXR1cm5zIDRcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBtZWFuLCBtaW4sIG1heCwgc3VtLCBwcm9kLCBzdGQsIHZhcmlhbmNlLCBxdWFudGlsZVNlcVxuICAgKlxuICAgKiBAcGFyYW0gey4uLiAqfSBhcmdzICBBIHNpbmdsZSBtYXRyaXggb3Igb3IgbXVsdGlwbGUgc2NhbGFyIHZhbHVlc1xuICAgKiBAcmV0dXJuIHsqfSBUaGUgbWVkaWFuXG4gICAqL1xuICB2YXIgbWVkaWFuID0gdHlwZWQobmFtZSwge1xuICAgIC8vIG1lZGlhbihbYSwgYiwgYywgZCwgLi4uXSlcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBfbWVkaWFuLFxuICAgIC8vIG1lZGlhbihbYSwgYiwgYywgZCwgLi4uXSwgZGltKVxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXIoYXJyYXksIGRpbSkge1xuICAgICAgLy8gVE9ETzogaW1wbGVtZW50IG1lZGlhbihBLCBkaW0pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ21lZGlhbihBLCBkaW0pIGlzIG5vdCB5ZXQgc3VwcG9ydGVkJyk7IC8vIHJldHVybiByZWR1Y2UoYXJndW1lbnRzWzBdLCBhcmd1bWVudHNbMV0sIC4uLilcbiAgICB9LFxuICAgIC8vIG1lZGlhbihhLCBiLCBjLCBkLCAuLi4pXG4gICAgJy4uLic6IGZ1bmN0aW9uIF8oYXJncykge1xuICAgICAgaWYgKCgwLCBfY29sbGVjdGlvbi5jb250YWluc0NvbGxlY3Rpb25zKShhcmdzKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTY2FsYXIgdmFsdWVzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIG1lZGlhbicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX21lZGlhbihhcmdzKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogUmVjdXJzaXZlbHkgY2FsY3VsYXRlIHRoZSBtZWRpYW4gb2YgYW4gbi1kaW1lbnNpb25hbCBhcnJheVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IG1lZGlhblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfbWVkaWFuKGFycmF5KSB7XG4gICAgdHJ5IHtcbiAgICAgIGFycmF5ID0gKDAsIF9hcnJheS5mbGF0dGVuKShhcnJheS52YWx1ZU9mKCkpO1xuICAgICAgdmFyIG51bSA9IGFycmF5Lmxlbmd0aDtcblxuICAgICAgaWYgKG51bSA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgbWVkaWFuIG9mIGFuIGVtcHR5IGFycmF5Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChudW0gJSAyID09PSAwKSB7XG4gICAgICAgIC8vIGV2ZW46IHJldHVybiB0aGUgYXZlcmFnZSBvZiB0aGUgdHdvIG1pZGRsZSB2YWx1ZXNcbiAgICAgICAgdmFyIG1pZCA9IG51bSAvIDIgLSAxO1xuICAgICAgICB2YXIgcmlnaHQgPSBwYXJ0aXRpb25TZWxlY3QoYXJyYXksIG1pZCArIDEpOyAvLyBhcnJheSBub3cgcGFydGl0aW9uZWQgYXQgbWlkICsgMSwgdGFrZSBtYXggb2YgbGVmdCBwYXJ0XG5cbiAgICAgICAgdmFyIGxlZnQgPSBhcnJheVttaWRdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWlkOyArK2kpIHtcbiAgICAgICAgICBpZiAoY29tcGFyZShhcnJheVtpXSwgbGVmdCkgPiAwKSB7XG4gICAgICAgICAgICBsZWZ0ID0gYXJyYXlbaV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG1pZGRsZTIobGVmdCwgcmlnaHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gb2RkOiByZXR1cm4gdGhlIG1pZGRsZSB2YWx1ZVxuICAgICAgICB2YXIgbSA9IHBhcnRpdGlvblNlbGVjdChhcnJheSwgKG51bSAtIDEpIC8gMik7XG4gICAgICAgIHJldHVybiBtaWRkbGUobSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyAoMCwgX2ltcHJvdmVFcnJvck1lc3NhZ2UuaW1wcm92ZUVycm9yTWVzc2FnZSkoZXJyLCAnbWVkaWFuJyk7XG4gICAgfVxuICB9IC8vIGhlbHBlciBmdW5jdGlvbiB0byB0eXBlIGNoZWNrIHRoZSBtaWRkbGUgdmFsdWUgb2YgdGhlIGFycmF5XG5cblxuICB2YXIgbWlkZGxlID0gdHlwZWQoe1xuICAgICdudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckNvbXBsZXhVbml0KHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9KTsgLy8gaGVscGVyIGZ1bmN0aW9uIHRvIHR5cGUgY2hlY2sgdGhlIHR3byBtaWRkbGUgdmFsdWUgb2YgdGhlIGFycmF5XG5cbiAgdmFyIG1pZGRsZTIgPSB0eXBlZCh7XG4gICAgJ251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0LCBudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckNvbXBsZXhVbml0TnVtYmVyQmlnTnVtYmVyQ29tcGxleFVuaXQobGVmdCwgcmlnaHQpIHtcbiAgICAgIHJldHVybiBkaXZpZGUoYWRkKGxlZnQsIHJpZ2h0KSwgMik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG1lZGlhbjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVNZWRpYW4gPSBjcmVhdGVNZWRpYW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1pbiA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2ltcHJvdmVFcnJvck1lc3NhZ2UgPSByZXF1aXJlKFwiLi91dGlscy9pbXByb3ZlRXJyb3JNZXNzYWdlXCIpO1xuXG52YXIgbmFtZSA9ICdtaW4nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc21hbGxlciddO1xudmFyIGNyZWF0ZU1pbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBzbWFsbGVyID0gX3JlZi5zbWFsbGVyO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBtaW5pbXVtIHZhbHVlIG9mIGEgbWF0cml4IG9yIGEgIGxpc3Qgb2YgdmFsdWVzLlxuICAgKiBJbiBjYXNlIG9mIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXksIHRoZSBtaW5pbXVtIG9mIHRoZSBmbGF0dGVuZWQgYXJyYXlcbiAgICogd2lsbCBiZSBjYWxjdWxhdGVkLiBXaGVuIGBkaW1gIGlzIHByb3ZpZGVkLCB0aGUgbWluaW11bSBvdmVyIHRoZSBzZWxlY3RlZFxuICAgKiBkaW1lbnNpb24gd2lsbCBiZSBjYWxjdWxhdGVkLiBQYXJhbWV0ZXIgYGRpbWAgaXMgemVyby1iYXNlZC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5taW4oYSwgYiwgYywgLi4uKVxuICAgKiAgICAgbWF0aC5taW4oQSlcbiAgICogICAgIG1hdGgubWluKEEsIGRpbSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLm1pbigyLCAxLCA0LCAzKSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMVxuICAgKiAgICAgbWF0aC5taW4oWzIsIDEsIDQsIDNdKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICpcbiAgICogICAgIC8vIG1pbmltdW0gb3ZlciBhIHNwZWNpZmllZCBkaW1lbnNpb24gKHplcm8tYmFzZWQpXG4gICAqICAgICBtYXRoLm1pbihbWzIsIDVdLCBbNCwgM10sIFsxLCA3XV0sIDApIC8vIHJldHVybnMgWzEsIDNdXG4gICAqICAgICBtYXRoLm1pbihbWzIsIDVdLCBbNCwgM10sIFsxLCA3XV0sIDEpIC8vIHJldHVybnMgWzIsIDMsIDFdXG4gICAqXG4gICAqICAgICBtYXRoLm1heCgyLjcsIDcuMSwgLTQuNSwgMi4wLCA0LjEpICAgIC8vIHJldHVybnMgNy4xXG4gICAqICAgICBtYXRoLm1pbigyLjcsIDcuMSwgLTQuNSwgMi4wLCA0LjEpICAgIC8vIHJldHVybnMgLTQuNVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbWVhbiwgbWVkaWFuLCBtYXgsIHByb2QsIHN0ZCwgc3VtLCB2YXJpYW5jZVxuICAgKlxuICAgKiBAcGFyYW0gey4uLiAqfSBhcmdzICBBIHNpbmdsZSBtYXRyaXggb3Igb3IgbXVsdGlwbGUgc2NhbGFyIHZhbHVlc1xuICAgKiBAcmV0dXJuIHsqfSBUaGUgbWluaW11bSB2YWx1ZVxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyBtaW4oW2EsIGIsIGMsIGQsIC4uLl0pXG4gICAgJ0FycmF5IHwgTWF0cml4JzogX21pbixcbiAgICAvLyBtaW4oW2EsIGIsIGMsIGQsIC4uLl0sIGRpbSlcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyKGFycmF5LCBkaW0pIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24ucmVkdWNlKShhcnJheSwgZGltLnZhbHVlT2YoKSwgX3NtYWxsZXN0KTtcbiAgICB9LFxuICAgIC8vIG1pbihhLCBiLCBjLCBkLCAuLi4pXG4gICAgJy4uLic6IGZ1bmN0aW9uIF8oYXJncykge1xuICAgICAgaWYgKCgwLCBfY29sbGVjdGlvbi5jb250YWluc0NvbGxlY3Rpb25zKShhcmdzKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTY2FsYXIgdmFsdWVzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIG1pbicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX21pbihhcmdzKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogUmV0dXJuIHRoZSBzbWFsbGVzdCBvZiB0d28gdmFsdWVzXG4gICAqIEBwYXJhbSB7Kn0geFxuICAgKiBAcGFyYW0geyp9IHlcbiAgICogQHJldHVybnMgeyp9IFJldHVybnMgeCB3aGVuIHggaXMgc21hbGxlc3QsIG9yIHkgd2hlbiB5IGlzIHNtYWxsZXN0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9zbWFsbGVzdCh4LCB5KSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBzbWFsbGVyKHgsIHkpID8geCA6IHk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyAoMCwgX2ltcHJvdmVFcnJvck1lc3NhZ2UuaW1wcm92ZUVycm9yTWVzc2FnZSkoZXJyLCAnbWluJywgeSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBjYWxjdWxhdGUgdGhlIG1pbmltdW0gdmFsdWUgaW4gYW4gbi1kaW1lbnNpb25hbCBhcnJheVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IG1pblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9taW4oYXJyYXkpIHtcbiAgICB2YXIgbWluO1xuICAgICgwLCBfY29sbGVjdGlvbi5kZWVwRm9yRWFjaCkoYXJyYXksIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgbWluID0gTmFOO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbiA9PT0gdW5kZWZpbmVkIHx8IHNtYWxsZXIodmFsdWUsIG1pbikpIHtcbiAgICAgICAgICBtaW4gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfaW1wcm92ZUVycm9yTWVzc2FnZS5pbXByb3ZlRXJyb3JNZXNzYWdlKShlcnIsICdtaW4nLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAobWluID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBtaW4gb2YgYW4gZW1wdHkgYXJyYXknKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWluO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlTWluID0gY3JlYXRlTWluOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNb2RlID0gdm9pZCAwO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnbW9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdpc05hTicsICdpc051bWVyaWMnXTtcbnZhciBjcmVhdGVNb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGlzTmFOID0gX3JlZi5pc05hTixcbiAgICAgIGlzTnVtZXJpYyA9IF9yZWYuaXNOdW1lcmljO1xuXG4gIC8qKlxuICAqIENvbXB1dGVzIHRoZSBtb2RlIG9mIGEgc2V0IG9mIG51bWJlcnMgb3IgYSBsaXN0IHdpdGggdmFsdWVzKG51bWJlcnMgb3IgY2hhcmFjdGVycykuXG4gICogSWYgdGhlcmUgYXJlIG1vcmUgdGhhbiBvbmUgbW9kZXMsIGl0IHJldHVybnMgYSBsaXN0IG9mIHRob3NlIHZhbHVlcy5cbiAgKlxuICAqIFN5bnRheDpcbiAgKlxuICAqICAgICBtYXRoLm1vZGUoYSwgYiwgYywgLi4uKVxuICAqICAgICBtYXRoLm1vZGUoQSlcbiAgKlxuICAqIEV4YW1wbGVzOlxuICAqXG4gICogICAgIG1hdGgubW9kZSgyLCAxLCA0LCAzLCAxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIFsxXVxuICAqICAgICBtYXRoLm1vZGUoWzEsIDIuNywgMy4yLCA0LCAyLjddKSAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbMi43XVxuICAqICAgICBtYXRoLm1vZGUoMSwgNCwgNiwgMSwgNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgWzEsIDZdXG4gICogICAgIG1hdGgubW9kZSgnYScsJ2EnLCdiJywnYycpICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbXCJhXCJdXG4gICogICAgIG1hdGgubW9kZSgxLCAxLjUsICdhYmMnKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbMSwgMS41LCBcImFiY1wiXVxuICAqXG4gICogU2VlIGFsc286XG4gICpcbiAgKiAgICAgbWVkaWFuLFxuICAqICAgICBtZWFuXG4gICpcbiAgKiBAcGFyYW0gey4uLiAqfSBhcmdzICBBIHNpbmdsZSBtYXRyaXhcbiAgKiBAcmV0dXJuIHsqfSBUaGUgbW9kZSBvZiBhbGwgdmFsdWVzXG4gICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5IHwgTWF0cml4JzogX21vZGUsXG4gICAgJy4uLic6IGZ1bmN0aW9uIF8oYXJncykge1xuICAgICAgcmV0dXJuIF9tb2RlKGFyZ3MpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBtb2RlIGluIGFuIDEtZGltZW5zaW9uYWwgYXJyYXlcbiAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzXG4gICAqIEByZXR1cm4ge0FycmF5fSBtb2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9tb2RlKHZhbHVlcykge1xuICAgIHZhbHVlcyA9ICgwLCBfYXJyYXkuZmxhdHRlbikodmFsdWVzLnZhbHVlT2YoKSk7XG4gICAgdmFyIG51bSA9IHZhbHVlcy5sZW5ndGg7XG5cbiAgICBpZiAobnVtID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgbW9kZSBvZiBhbiBlbXB0eSBhcnJheScpO1xuICAgIH1cblxuICAgIHZhciBjb3VudCA9IHt9O1xuICAgIHZhciBtb2RlID0gW107XG4gICAgdmFyIG1heCA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gdmFsdWVzW2ldO1xuXG4gICAgICBpZiAoaXNOdW1lcmljKHZhbHVlKSAmJiBpc05hTih2YWx1ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIG1vZGUgb2YgYW4gYXJyYXkgY29udGFpbmluZyBOYU4gdmFsdWVzJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghKHZhbHVlIGluIGNvdW50KSkge1xuICAgICAgICBjb3VudFt2YWx1ZV0gPSAwO1xuICAgICAgfVxuXG4gICAgICBjb3VudFt2YWx1ZV0rKztcblxuICAgICAgaWYgKGNvdW50W3ZhbHVlXSA9PT0gbWF4KSB7XG4gICAgICAgIG1vZGUucHVzaCh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKGNvdW50W3ZhbHVlXSA+IG1heCkge1xuICAgICAgICBtYXggPSBjb3VudFt2YWx1ZV07XG4gICAgICAgIG1vZGUgPSBbdmFsdWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtb2RlO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlTW9kZSA9IGNyZWF0ZU1vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVByb2QgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pbXByb3ZlRXJyb3JNZXNzYWdlID0gcmVxdWlyZShcIi4vdXRpbHMvaW1wcm92ZUVycm9yTWVzc2FnZVwiKTtcblxudmFyIG5hbWUgPSAncHJvZCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtdWx0aXBseSddO1xudmFyIGNyZWF0ZVByb2QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5O1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBwcm9kdWN0IG9mIGEgbWF0cml4IG9yIGEgbGlzdCB3aXRoIHZhbHVlcy5cbiAgICogSW4gY2FzZSBvZiBhIChtdWx0aSBkaW1lbnNpb25hbCkgYXJyYXkgb3IgbWF0cml4LCB0aGUgc3VtIG9mIGFsbFxuICAgKiBlbGVtZW50cyB3aWxsIGJlIGNhbGN1bGF0ZWQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgucHJvZChhLCBiLCBjLCAuLi4pXG4gICAqICAgICBtYXRoLnByb2QoQSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLm11bHRpcGx5KDIsIDMpICAgICAgICAgICAvLyByZXR1cm5zIDZcbiAgICogICAgIG1hdGgucHJvZCgyLCAzKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgNlxuICAgKiAgICAgbWF0aC5wcm9kKDIsIDMsIDQpICAgICAgICAgICAgLy8gcmV0dXJucyAyNFxuICAgKiAgICAgbWF0aC5wcm9kKFsyLCAzLCA0XSkgICAgICAgICAgLy8gcmV0dXJucyAyNFxuICAgKiAgICAgbWF0aC5wcm9kKFtbMiwgNV0sIFs0LCAzXV0pICAgLy8gcmV0dXJucyAxMjBcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIG1lYW4sIG1lZGlhbiwgbWluLCBtYXgsIHN1bSwgc3RkLCB2YXJpYW5jZVxuICAgKlxuICAgKiBAcGFyYW0gey4uLiAqfSBhcmdzICBBIHNpbmdsZSBtYXRyaXggb3Igb3IgbXVsdGlwbGUgc2NhbGFyIHZhbHVlc1xuICAgKiBAcmV0dXJuIHsqfSBUaGUgcHJvZHVjdCBvZiBhbGwgdmFsdWVzXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIC8vIHByb2QoW2EsIGIsIGMsIGQsIC4uLl0pXG4gICAgJ0FycmF5IHwgTWF0cml4JzogX3Byb2QsXG4gICAgLy8gcHJvZChbYSwgYiwgYywgZCwgLi4uXSwgZGltKVxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXIoYXJyYXksIGRpbSkge1xuICAgICAgLy8gVE9ETzogaW1wbGVtZW50IHByb2QoQSwgZGltKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwcm9kKEEsIGRpbSkgaXMgbm90IHlldCBzdXBwb3J0ZWQnKTsgLy8gcmV0dXJuIHJlZHVjZShhcmd1bWVudHNbMF0sIGFyZ3VtZW50c1sxXSwgbWF0aC5wcm9kKVxuICAgIH0sXG4gICAgLy8gcHJvZChhLCBiLCBjLCBkLCAuLi4pXG4gICAgJy4uLic6IGZ1bmN0aW9uIF8oYXJncykge1xuICAgICAgcmV0dXJuIF9wcm9kKGFyZ3MpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBjYWxjdWxhdGUgdGhlIHByb2R1Y3Qgb2YgYW4gbi1kaW1lbnNpb25hbCBhcnJheVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IHByb2RcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX3Byb2QoYXJyYXkpIHtcbiAgICB2YXIgcHJvZDtcbiAgICAoMCwgX2NvbGxlY3Rpb24uZGVlcEZvckVhY2gpKGFycmF5LCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHByb2QgPSBwcm9kID09PSB1bmRlZmluZWQgPyB2YWx1ZSA6IG11bHRpcGx5KHByb2QsIHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2ltcHJvdmVFcnJvck1lc3NhZ2UuaW1wcm92ZUVycm9yTWVzc2FnZSkoZXJyLCAncHJvZCcsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChwcm9kID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBwcm9kIG9mIGFuIGVtcHR5IGFycmF5Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb2Q7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVQcm9kID0gY3JlYXRlUHJvZDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUXVhbnRpbGVTZXEgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3F1YW50aWxlU2VxJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZCcsICdtdWx0aXBseScsICdwYXJ0aXRpb25TZWxlY3QnLCAnY29tcGFyZSddO1xudmFyIGNyZWF0ZVF1YW50aWxlU2VxID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgcGFydGl0aW9uU2VsZWN0ID0gX3JlZi5wYXJ0aXRpb25TZWxlY3QsXG4gICAgICBjb21wYXJlID0gX3JlZi5jb21wYXJlO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBwcm9iIG9yZGVyIHF1YW50aWxlIG9mIGEgbWF0cml4IG9yIGEgbGlzdCB3aXRoIHZhbHVlcy5cbiAgICogVGhlIHNlcXVlbmNlIGlzIHNvcnRlZCBhbmQgdGhlIG1pZGRsZSB2YWx1ZSBpcyByZXR1cm5lZC5cbiAgICogU3VwcG9ydGVkIHR5cGVzIG9mIHNlcXVlbmNlIHZhbHVlcyBhcmU6IE51bWJlciwgQmlnTnVtYmVyLCBVbml0XG4gICAqIFN1cHBvcnRlZCB0eXBlcyBvZiBwcm9iYWJpbGl0eSBhcmU6IE51bWJlciwgQmlnTnVtYmVyXG4gICAqXG4gICAqIEluIGNhc2Ugb2YgYSAobXVsdGkgZGltZW5zaW9uYWwpIGFycmF5IG9yIG1hdHJpeCwgdGhlIHByb2Igb3JkZXIgcXVhbnRpbGVcbiAgICogb2YgYWxsIGVsZW1lbnRzIHdpbGwgYmUgY2FsY3VsYXRlZC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5xdWFudGlsZVNlcShBLCBwcm9iWywgc29ydGVkXSlcbiAgICogICAgIG1hdGgucXVhbnRpbGVTZXEoQSwgW3Byb2IxLCBwcm9iMiwgLi4uXVssIHNvcnRlZF0pXG4gICAqICAgICBtYXRoLnF1YW50aWxlU2VxKEEsIE5bLCBzb3J0ZWRdKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgucXVhbnRpbGVTZXEoWzMsIC0xLCA1LCA3XSwgMC41KSAgICAgICAgIC8vIHJldHVybnMgNFxuICAgKiAgICAgbWF0aC5xdWFudGlsZVNlcShbMywgLTEsIDUsIDddLCBbMS8zLCAyLzNdKSAgLy8gcmV0dXJucyBbMywgNV1cbiAgICogICAgIG1hdGgucXVhbnRpbGVTZXEoWzMsIC0xLCA1LCA3XSwgMikgICAgICAgICAgIC8vIHJldHVybnMgWzMsIDVdXG4gICAqICAgICBtYXRoLnF1YW50aWxlU2VxKFstMSwgMywgNSwgN10sIDAuNSwgdHJ1ZSkgICAvLyByZXR1cm5zIDRcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBtZWRpYW4sIG1lYW4sIG1pbiwgbWF4LCBzdW0sIHByb2QsIHN0ZCwgdmFyaWFuY2VcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSwgTWF0cml4fSBkYXRhICAgICAgICAgICAgICAgIEEgc2luZ2xlIG1hdHJpeCBvciBBcnJheVxuICAgKiBAcGFyYW0ge051bWJlciwgQmlnTnVtYmVyLCBBcnJheX0gcHJvYk9yTiAgcHJvYiBpcyB0aGUgb3JkZXIgb2YgdGhlIHF1YW50aWxlLCB3aGlsZSBOIGlzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYW1vdW50IG9mIGV2ZW5seSBkaXN0cmlidXRlZCBzdGVwcyBvZlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvYmFiaWxpdGllczsgb25seSBvbmUgb2YgdGhlc2Ugb3B0aW9ucyBjYW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIHByb3ZpZGVkXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gc29ydGVkPWZhbHNlICAgICAgICAgICAgICBpcyBkYXRhIHNvcnRlZCBpbiBhc2NlbmRpbmcgb3JkZXJcbiAgICogQHJldHVybiB7TnVtYmVyLCBCaWdOdW1iZXIsIFVuaXQsIEFycmF5fSAgIFF1YW50aWxlKHMpXG4gICAqL1xuICBmdW5jdGlvbiBxdWFudGlsZVNlcShkYXRhLCBwcm9iT3JOLCBzb3J0ZWQpIHtcbiAgICB2YXIgcHJvYkFyciwgZGF0YUFyciwgb25lO1xuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyIHx8IGFyZ3VtZW50cy5sZW5ndGggPiAzKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0Z1bmN0aW9uIHF1YW50aWxlU2VxIHJlcXVpcmVzIHR3byBvciB0aHJlZSBwYXJhbWV0ZXJzJyk7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNDb2xsZWN0aW9uKShkYXRhKSkge1xuICAgICAgc29ydGVkID0gc29ydGVkIHx8IGZhbHNlO1xuXG4gICAgICBpZiAodHlwZW9mIHNvcnRlZCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIGRhdGFBcnIgPSBkYXRhLnZhbHVlT2YoKTtcblxuICAgICAgICBpZiAoKDAsIF9pcy5pc051bWJlcikocHJvYk9yTikpIHtcbiAgICAgICAgICBpZiAocHJvYk9yTiA8IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTi9wcm9iIG11c3QgYmUgbm9uLW5lZ2F0aXZlJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHByb2JPck4gPD0gMSkge1xuICAgICAgICAgICAgLy8gcXVhbnRpbGVTZXEoW2EsIGIsIGMsIGQsIC4uLl0sIHByb2JbLHNvcnRlZF0pXG4gICAgICAgICAgICByZXR1cm4gX3F1YW50aWxlU2VxKGRhdGFBcnIsIHByb2JPck4sIHNvcnRlZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHByb2JPck4gPiAxKSB7XG4gICAgICAgICAgICAvLyBxdWFudGlsZVNlcShbYSwgYiwgYywgZCwgLi4uXSwgTlssc29ydGVkXSlcbiAgICAgICAgICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShwcm9iT3JOKSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ04gbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXInKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIG5QbHVzT25lID0gcHJvYk9yTiArIDE7XG4gICAgICAgICAgICBwcm9iQXJyID0gbmV3IEFycmF5KHByb2JPck4pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb2JPck47KSB7XG4gICAgICAgICAgICAgIHByb2JBcnJbaV0gPSBfcXVhbnRpbGVTZXEoZGF0YUFyciwgKytpIC8gblBsdXNPbmUsIHNvcnRlZCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBwcm9iQXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShwcm9iT3JOKSkge1xuICAgICAgICAgIHZhciBCaWdOdW1iZXIgPSBwcm9iT3JOLmNvbnN0cnVjdG9yO1xuXG4gICAgICAgICAgaWYgKHByb2JPck4uaXNOZWdhdGl2ZSgpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ04vcHJvYiBtdXN0IGJlIG5vbi1uZWdhdGl2ZScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG9uZSA9IG5ldyBCaWdOdW1iZXIoMSk7XG5cbiAgICAgICAgICBpZiAocHJvYk9yTi5sdGUob25lKSkge1xuICAgICAgICAgICAgLy8gcXVhbnRpbGVTZXEoW2EsIGIsIGMsIGQsIC4uLl0sIHByb2JbLHNvcnRlZF0pXG4gICAgICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcihfcXVhbnRpbGVTZXEoZGF0YUFyciwgcHJvYk9yTiwgc29ydGVkKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHByb2JPck4uZ3Qob25lKSkge1xuICAgICAgICAgICAgLy8gcXVhbnRpbGVTZXEoW2EsIGIsIGMsIGQsIC4uLl0sIE5bLHNvcnRlZF0pXG4gICAgICAgICAgICBpZiAoIXByb2JPck4uaXNJbnRlZ2VyKCkpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgICAgICB9IC8vIGxhcmdlc3QgcG9zc2libGUgQXJyYXkgbGVuZ3RoIGlzIDJeMzItMVxuICAgICAgICAgICAgLy8gMl4zMiA8IDEwXjE1LCB0aHVzIHNhZmUgY29udmVyc2lvbiBndWFyYW50ZWVkXG5cblxuICAgICAgICAgICAgdmFyIGludE4gPSBwcm9iT3JOLnRvTnVtYmVyKCk7XG5cbiAgICAgICAgICAgIGlmIChpbnROID4gNDI5NDk2NzI5NSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ04gbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMl4zMi0xLCBhcyB0aGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhbiBBcnJheScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YXIgX25QbHVzT25lID0gbmV3IEJpZ051bWJlcihpbnROICsgMSk7XG5cbiAgICAgICAgICAgIHByb2JBcnIgPSBuZXcgQXJyYXkoaW50Tik7XG5cbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBpbnROOykge1xuICAgICAgICAgICAgICBwcm9iQXJyW19pXSA9IG5ldyBCaWdOdW1iZXIoX3F1YW50aWxlU2VxKGRhdGFBcnIsIG5ldyBCaWdOdW1iZXIoKytfaSkuZGl2KF9uUGx1c09uZSksIHNvcnRlZCkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcHJvYkFycjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9iT3JOKSkge1xuICAgICAgICAgIC8vIHF1YW50aWxlU2VxKFthLCBiLCBjLCBkLCAuLi5dLCBbcHJvYjEsIHByb2IyLCAuLi5dWyxzb3J0ZWRdKVxuICAgICAgICAgIHByb2JBcnIgPSBuZXcgQXJyYXkocHJvYk9yTi5sZW5ndGgpO1xuXG4gICAgICAgICAgZm9yICh2YXIgX2kyID0gMDsgX2kyIDwgcHJvYkFyci5sZW5ndGg7ICsrX2kyKSB7XG4gICAgICAgICAgICB2YXIgY3VyclByb2IgPSBwcm9iT3JOW19pMl07XG5cbiAgICAgICAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShjdXJyUHJvYikpIHtcbiAgICAgICAgICAgICAgaWYgKGN1cnJQcm9iIDwgMCB8fCBjdXJyUHJvYiA+IDEpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb2JhYmlsaXR5IG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLCBpbmNsdXNpdmUnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShjdXJyUHJvYikpIHtcbiAgICAgICAgICAgICAgb25lID0gbmV3IGN1cnJQcm9iLmNvbnN0cnVjdG9yKDEpO1xuXG4gICAgICAgICAgICAgIGlmIChjdXJyUHJvYi5pc05lZ2F0aXZlKCkgfHwgY3VyclByb2IuZ3Qob25lKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignUHJvYmFiaWxpdHkgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEsIGluY2x1c2l2ZScpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmV4cGVjdGVkIHR5cGUgb2YgYXJndW1lbnQgaW4gZnVuY3Rpb24gcXVhbnRpbGVTZXEnKTsgLy8gRklYTUU6IGJlY29tZXMgcmVkdW5kYW50IHdoZW4gY29udmVydGVkIHRvIHR5cGVkLWZ1bmN0aW9uXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByb2JBcnJbX2kyXSA9IF9xdWFudGlsZVNlcShkYXRhQXJyLCBjdXJyUHJvYiwgc29ydGVkKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gcHJvYkFycjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgdHlwZSBvZiBhcmd1bWVudCBpbiBmdW5jdGlvbiBxdWFudGlsZVNlcScpOyAvLyBGSVhNRTogYmVjb21lcyByZWR1bmRhbnQgd2hlbiBjb252ZXJ0ZWQgdG8gdHlwZWQtZnVuY3Rpb25cbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5leHBlY3RlZCB0eXBlIG9mIGFyZ3VtZW50IGluIGZ1bmN0aW9uIHF1YW50aWxlU2VxJyk7IC8vIEZJWE1FOiBiZWNvbWVzIHJlZHVuZGFudCB3aGVuIGNvbnZlcnRlZCB0byB0eXBlZC1mdW5jdGlvblxuICAgIH1cblxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgdHlwZSBvZiBhcmd1bWVudCBpbiBmdW5jdGlvbiBxdWFudGlsZVNlcScpOyAvLyBGSVhNRTogYmVjb21lcyByZWR1bmRhbnQgd2hlbiBjb252ZXJ0ZWQgdG8gdHlwZWQtZnVuY3Rpb25cbiAgfVxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBwcm9iIG9yZGVyIHF1YW50aWxlIG9mIGFuIG4tZGltZW5zaW9uYWwgYXJyYXkuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gICAqIEBwYXJhbSB7TnVtYmVyLCBCaWdOdW1iZXJ9IHByb2JcbiAgICogQHBhcmFtIHtCb29sZWFufSBzb3J0ZWRcbiAgICogQHJldHVybiB7TnVtYmVyLCBCaWdOdW1iZXIsIFVuaXR9IHByb2Igb3JkZXIgcXVhbnRpbGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfcXVhbnRpbGVTZXEoYXJyYXksIHByb2IsIHNvcnRlZCkge1xuICAgIHZhciBmbGF0ID0gKDAsIF9hcnJheS5mbGF0dGVuKShhcnJheSk7XG4gICAgdmFyIGxlbiA9IGZsYXQubGVuZ3RoO1xuXG4gICAgaWYgKGxlbiA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIHF1YW50aWxlIG9mIGFuIGVtcHR5IHNlcXVlbmNlJyk7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKHByb2IpKSB7XG4gICAgICB2YXIgX2luZGV4ID0gcHJvYiAqIChsZW4gLSAxKTtcblxuICAgICAgdmFyIF9mcmFjUGFydCA9IF9pbmRleCAlIDE7XG5cbiAgICAgIGlmIChfZnJhY1BhcnQgPT09IDApIHtcbiAgICAgICAgdmFyIHZhbHVlID0gc29ydGVkID8gZmxhdFtfaW5kZXhdIDogcGFydGl0aW9uU2VsZWN0KGZsYXQsIF9pbmRleCk7XG4gICAgICAgIHZhbGlkYXRlKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuXG4gICAgICB2YXIgX2ludGVnZXJQYXJ0ID0gTWF0aC5mbG9vcihfaW5kZXgpO1xuXG4gICAgICB2YXIgX2xlZnQ7XG5cbiAgICAgIHZhciBfcmlnaHQ7XG5cbiAgICAgIGlmIChzb3J0ZWQpIHtcbiAgICAgICAgX2xlZnQgPSBmbGF0W19pbnRlZ2VyUGFydF07XG4gICAgICAgIF9yaWdodCA9IGZsYXRbX2ludGVnZXJQYXJ0ICsgMV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBfcmlnaHQgPSBwYXJ0aXRpb25TZWxlY3QoZmxhdCwgX2ludGVnZXJQYXJ0ICsgMSk7IC8vIG1heCBvZiBwYXJ0aXRpb24gaXMga3RoIGxhcmdlc3RcblxuICAgICAgICBfbGVmdCA9IGZsYXRbX2ludGVnZXJQYXJ0XTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IF9pbnRlZ2VyUGFydDsgKytpKSB7XG4gICAgICAgICAgaWYgKGNvbXBhcmUoZmxhdFtpXSwgX2xlZnQpID4gMCkge1xuICAgICAgICAgICAgX2xlZnQgPSBmbGF0W2ldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YWxpZGF0ZShfbGVmdCk7XG4gICAgICB2YWxpZGF0ZShfcmlnaHQpOyAvLyBRKHByb2IpID0gKDEtZikqQVtmbG9vcihpbmRleCldICsgZipBW2Zsb29yKGluZGV4KSsxXVxuXG4gICAgICByZXR1cm4gYWRkKG11bHRpcGx5KF9sZWZ0LCAxIC0gX2ZyYWNQYXJ0KSwgbXVsdGlwbHkoX3JpZ2h0LCBfZnJhY1BhcnQpKTtcbiAgICB9IC8vIElmIHByb2IgaXMgYSBCaWdOdW1iZXJcblxuXG4gICAgdmFyIGluZGV4ID0gcHJvYi50aW1lcyhsZW4gLSAxKTtcblxuICAgIGlmIChpbmRleC5pc0ludGVnZXIoKSkge1xuICAgICAgaW5kZXggPSBpbmRleC50b051bWJlcigpO1xuXG4gICAgICB2YXIgX3ZhbHVlID0gc29ydGVkID8gZmxhdFtpbmRleF0gOiBwYXJ0aXRpb25TZWxlY3QoZmxhdCwgaW5kZXgpO1xuXG4gICAgICB2YWxpZGF0ZShfdmFsdWUpO1xuICAgICAgcmV0dXJuIF92YWx1ZTtcbiAgICB9XG5cbiAgICB2YXIgaW50ZWdlclBhcnQgPSBpbmRleC5mbG9vcigpO1xuICAgIHZhciBmcmFjUGFydCA9IGluZGV4Lm1pbnVzKGludGVnZXJQYXJ0KTtcbiAgICB2YXIgaW50ZWdlclBhcnROdW1iZXIgPSBpbnRlZ2VyUGFydC50b051bWJlcigpO1xuICAgIHZhciBsZWZ0O1xuICAgIHZhciByaWdodDtcblxuICAgIGlmIChzb3J0ZWQpIHtcbiAgICAgIGxlZnQgPSBmbGF0W2ludGVnZXJQYXJ0TnVtYmVyXTtcbiAgICAgIHJpZ2h0ID0gZmxhdFtpbnRlZ2VyUGFydE51bWJlciArIDFdO1xuICAgIH0gZWxzZSB7XG4gICAgICByaWdodCA9IHBhcnRpdGlvblNlbGVjdChmbGF0LCBpbnRlZ2VyUGFydE51bWJlciArIDEpOyAvLyBtYXggb2YgcGFydGl0aW9uIGlzIGt0aCBsYXJnZXN0XG5cbiAgICAgIGxlZnQgPSBmbGF0W2ludGVnZXJQYXJ0TnVtYmVyXTtcblxuICAgICAgZm9yICh2YXIgX2kzID0gMDsgX2kzIDwgaW50ZWdlclBhcnROdW1iZXI7ICsrX2kzKSB7XG4gICAgICAgIGlmIChjb21wYXJlKGZsYXRbX2kzXSwgbGVmdCkgPiAwKSB7XG4gICAgICAgICAgbGVmdCA9IGZsYXRbX2kzXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHZhbGlkYXRlKGxlZnQpO1xuICAgIHZhbGlkYXRlKHJpZ2h0KTsgLy8gUShwcm9iKSA9ICgxLWYpKkFbZmxvb3IoaW5kZXgpXSArIGYqQVtmbG9vcihpbmRleCkrMV1cblxuICAgIHZhciBvbmUgPSBuZXcgZnJhY1BhcnQuY29uc3RydWN0b3IoMSk7XG4gICAgcmV0dXJuIGFkZChtdWx0aXBseShsZWZ0LCBvbmUubWludXMoZnJhY1BhcnQpKSwgbXVsdGlwbHkocmlnaHQsIGZyYWNQYXJ0KSk7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrIGlmIGFycmF5IHZhbHVlIHR5cGVzIGFyZSB2YWxpZCwgdGhyb3cgZXJyb3Igb3RoZXJ3aXNlLlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IFVuaXR9IHhcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBVbml0fSB4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgdmFyIHZhbGlkYXRlID0gdHlwZWQoe1xuICAgICdudW1iZXIgfCBCaWdOdW1iZXIgfCBVbml0JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyVW5pdCh4KSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcXVhbnRpbGVTZXE7XG59KTtcbmV4cG9ydHMuY3JlYXRlUXVhbnRpbGVTZXEgPSBjcmVhdGVRdWFudGlsZVNlcTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3RkID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc3RkJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NxcnQnLCAndmFyaWFuY2UnXTtcbnZhciBjcmVhdGVTdGQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgc3FydCA9IF9yZWYuc3FydCxcbiAgICAgIHZhcmlhbmNlID0gX3JlZi52YXJpYW5jZTtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGEgbWF0cml4IG9yIGEgIGxpc3Qgd2l0aCB2YWx1ZXMuXG4gICAqIFRoZSBzdGFuZGFyZCBkZXZpYXRpb25zIGlzIGRlZmluZWQgYXMgdGhlIHNxdWFyZSByb290IG9mIHRoZSB2YXJpYW5jZTpcbiAgICogYHN0ZChBKSA9IHNxcnQodmFyaWFuY2UoQSkpYC5cbiAgICogSW4gY2FzZSBvZiBhIChtdWx0aSBkaW1lbnNpb25hbCkgYXJyYXkgb3IgbWF0cml4LCB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uXG4gICAqIG92ZXIgYWxsIGVsZW1lbnRzIHdpbGwgYmUgY2FsY3VsYXRlZCBieSBkZWZhdWx0LCB1bmxlc3MgYW4gYXhpcyBpcyBzcGVjaWZpZWRcbiAgICogaW4gd2hpY2ggY2FzZSB0aGUgc3RhbmRhcmQgZGV2aWF0aW9uIHdpbGwgYmUgY29tcHV0ZWQgYWxvbmcgdGhhdCBheGlzLlxuICAgKlxuICAgKiBBZGRpdGlvbmFsbHksIGl0IGlzIHBvc3NpYmxlIHRvIGNvbXB1dGUgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBhbG9uZyB0aGUgcm93c1xuICAgKiBvciBjb2x1bW5zIG9mIGEgbWF0cml4IGJ5IHNwZWNpZnlpbmcgdGhlIGRpbWVuc2lvbiBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50LlxuICAgKlxuICAgKiBPcHRpb25hbGx5LCB0aGUgdHlwZSBvZiBub3JtYWxpemF0aW9uIGNhbiBiZSBzcGVjaWZpZWQgYXMgdGhlIGZpbmFsXG4gICAqIHBhcmFtZXRlci4gVGhlIHBhcmFtZXRlciBgbm9ybWFsaXphdGlvbmAgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczpcbiAgICpcbiAgICogLSAndW5iaWFzZWQnIChkZWZhdWx0KSBUaGUgc3VtIG9mIHNxdWFyZWQgZXJyb3JzIGlzIGRpdmlkZWQgYnkgKG4gLSAxKVxuICAgKiAtICd1bmNvcnJlY3RlZCcgICAgICAgIFRoZSBzdW0gb2Ygc3F1YXJlZCBlcnJvcnMgaXMgZGl2aWRlZCBieSBuXG4gICAqIC0gJ2JpYXNlZCcgICAgICAgICAgICAgVGhlIHN1bSBvZiBzcXVhcmVkIGVycm9ycyBpcyBkaXZpZGVkIGJ5IChuICsgMSlcbiAgICpcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5zdGQoYSwgYiwgYywgLi4uKVxuICAgKiAgICAgbWF0aC5zdGQoQSlcbiAgICogICAgIG1hdGguc3RkKEEsIG5vcm1hbGl6YXRpb24pXG4gICAqICAgICBtYXRoLnN0ZChBLCBkaW1lbnNpb24pXG4gICAqICAgICBtYXRoLnN0ZChBLCBkaW1lbnNpb24sIG5vcm1hbGl6YXRpb24pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5zdGQoMiwgNCwgNikgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDJcbiAgICogICAgIG1hdGguc3RkKFsyLCA0LCA2LCA4XSkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAyLjU4MTk4ODg5NzQ3MTYxMVxuICAgKiAgICAgbWF0aC5zdGQoWzIsIDQsIDYsIDhdLCAndW5jb3JyZWN0ZWQnKSAvLyByZXR1cm5zIDIuMjM2MDY3OTc3NDk5NzlcbiAgICogICAgIG1hdGguc3RkKFsyLCA0LCA2LCA4XSwgJ2JpYXNlZCcpICAgICAgLy8gcmV0dXJucyAyXG4gICAqXG4gICAqICAgICBtYXRoLnN0ZChbWzEsIDIsIDNdLCBbNCwgNSwgNl1dKSAgICAgIC8vIHJldHVybnMgMS44NzA4Mjg2OTMzODY5NzA3XG4gICAqICAgICBtYXRoLnN0ZChbWzEsIDIsIDNdLCBbNCwgNiwgOF1dLCAwKSAgICAvLyByZXR1cm5zIFsyLjEyMTMyMDM0MzU1OTY0MjQsIDIuODI4NDI3MTI0NzQ2MTkwMywgMy41MzU1MzM5MDU5MzI3Mzc4XVxuICAgKiAgICAgbWF0aC5zdGQoW1sxLCAyLCAzXSwgWzQsIDYsIDhdXSwgMSkgICAgLy8gcmV0dXJucyBbMSwgMl1cbiAgICogICAgIG1hdGguc3RkKFtbMSwgMiwgM10sIFs0LCA2LCA4XV0sIDEsICdiaWFzZWQnKSAvLyByZXR1cm5zIFswLjcwNzEwNjc4MTE4NjU0NzYsIDEuNDE0MjEzNTYyMzczMDk1MV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIG1lYW4sIG1lZGlhbiwgbWF4LCBtaW4sIHByb2QsIHN1bSwgdmFyaWFuY2VcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gYXJyYXlcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBBIHNpbmdsZSBtYXRyaXggb3Igb3IgbXVsdGlwbGUgc2NhbGFyIHZhbHVlc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW25vcm1hbGl6YXRpb249J3VuYmlhc2VkJ11cbiAgICogICAgICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIGhvdyB0byBub3JtYWxpemUgdGhlIHZhcmlhbmNlLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIENob29zZSAndW5iaWFzZWQnIChkZWZhdWx0KSwgJ3VuY29ycmVjdGVkJywgb3IgJ2JpYXNlZCcuXG4gICAqIEBwYXJhbSBkaW1lbnNpb24ge251bWJlciB8IEJpZ051bWJlcn1cbiAgICogICAgICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIHRoZSBheGlzIHRvIGNvbXB1dGUgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBmb3IgYSBtYXRyaXhcbiAgICogQHJldHVybiB7Kn0gVGhlIHN0YW5kYXJkIGRldmlhdGlvblxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyBzdGQoW2EsIGIsIGMsIGQsIC4uLl0pXG4gICAgJ0FycmF5IHwgTWF0cml4JzogX3N0ZCxcbiAgICAvLyBzdGQoW2EsIGIsIGMsIGQsIC4uLl0sIG5vcm1hbGl6YXRpb24pXG4gICAgJ0FycmF5IHwgTWF0cml4LCBzdHJpbmcnOiBfc3RkLFxuICAgIC8vIHN0ZChbYSwgYiwgYywgYywgLi4uXSwgZGltKVxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogX3N0ZCxcbiAgICAvLyBzdGQoW2EsIGIsIGMsIGMsIC4uLl0sIGRpbSwgbm9ybWFsaXphdGlvbilcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlciwgc3RyaW5nJzogX3N0ZCxcbiAgICAvLyBzdGQoYSwgYiwgYywgZCwgLi4uKVxuICAgICcuLi4nOiBmdW5jdGlvbiBfKGFyZ3MpIHtcbiAgICAgIHJldHVybiBfc3RkKGFyZ3MpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gX3N0ZChhcnJheSwgbm9ybWFsaXphdGlvbikge1xuICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignRnVuY3Rpb24gc3RkIHJlcXVpcmVzIG9uZSBvciBtb3JlIHBhcmFtZXRlcnMgKDAgcHJvdmlkZWQpJyk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBzcXJ0KHZhcmlhbmNlLmFwcGx5KG51bGwsIGFyZ3VtZW50cykpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFR5cGVFcnJvciAmJiBlcnIubWVzc2FnZS5pbmRleE9mKCcgdmFyaWFuY2UnKSAhPT0gLTEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihlcnIubWVzc2FnZS5yZXBsYWNlKCcgdmFyaWFuY2UnLCAnIHN0ZCcpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVTdGQgPSBjcmVhdGVTdGQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVN1bSA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2ltcHJvdmVFcnJvck1lc3NhZ2UgPSByZXF1aXJlKFwiLi91dGlscy9pbXByb3ZlRXJyb3JNZXNzYWdlXCIpO1xuXG52YXIgX25vb3AgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbm9vcFwiKTtcblxudmFyIG5hbWUgPSAnc3VtJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdhZGQnLCAnP2JpZ251bWJlcicsICc/ZnJhY3Rpb24nXTtcbnZhciBjcmVhdGVTdW0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIGJpZ251bWJlciA9IF9yZWYuYmlnbnVtYmVyLFxuICAgICAgZnJhY3Rpb24gPSBfcmVmLmZyYWN0aW9uO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBzdW0gb2YgYSBtYXRyaXggb3IgYSBsaXN0IHdpdGggdmFsdWVzLlxuICAgKiBJbiBjYXNlIG9mIGEgKG11bHRpIGRpbWVuc2lvbmFsKSBhcnJheSBvciBtYXRyaXgsIHRoZSBzdW0gb2YgYWxsXG4gICAqIGVsZW1lbnRzIHdpbGwgYmUgY2FsY3VsYXRlZC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5zdW0oYSwgYiwgYywgLi4uKVxuICAgKiAgICAgbWF0aC5zdW0oQSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnN1bSgyLCAxLCA0LCAzKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgMTBcbiAgICogICAgIG1hdGguc3VtKFsyLCAxLCA0LCAzXSkgICAgICAgICAgICAgLy8gcmV0dXJucyAxMFxuICAgKiAgICAgbWF0aC5zdW0oW1syLCA1XSwgWzQsIDNdLCBbMSwgN11dKSAvLyByZXR1cm5zIDIyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBtZWFuLCBtZWRpYW4sIG1pbiwgbWF4LCBwcm9kLCBzdGQsIHZhcmlhbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7Li4uICp9IGFyZ3MgIEEgc2luZ2xlIG1hdHJpeCBvciBvciBtdWx0aXBsZSBzY2FsYXIgdmFsdWVzXG4gICAqIEByZXR1cm4geyp9IFRoZSBzdW0gb2YgYWxsIHZhbHVlc1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyBzdW0oW2EsIGIsIGMsIGQsIC4uLl0pXG4gICAgJ0FycmF5IHwgTWF0cml4JzogX3N1bSxcbiAgICAvLyBzdW0oW2EsIGIsIGMsIGQsIC4uLl0sIGRpbSlcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IF9uc3VtRGltLFxuICAgIC8vIHN1bShhLCBiLCBjLCBkLCAuLi4pXG4gICAgJy4uLic6IGZ1bmN0aW9uIF8oYXJncykge1xuICAgICAgaWYgKCgwLCBfY29sbGVjdGlvbi5jb250YWluc0NvbGxlY3Rpb25zKShhcmdzKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTY2FsYXIgdmFsdWVzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIHN1bScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3N1bShhcmdzKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogUmVjdXJzaXZlbHkgY2FsY3VsYXRlIHRoZSBzdW0gb2YgYW4gbi1kaW1lbnNpb25hbCBhcnJheVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IHN1bVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfc3VtKGFycmF5KSB7XG4gICAgdmFyIHN1bTtcbiAgICAoMCwgX2NvbGxlY3Rpb24uZGVlcEZvckVhY2gpKGFycmF5LCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN1bSA9IHN1bSA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiBhZGQoc3VtLCB2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9pbXByb3ZlRXJyb3JNZXNzYWdlLmltcHJvdmVFcnJvck1lc3NhZ2UpKGVyciwgJ3N1bScsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChzdW0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgc3dpdGNoIChjb25maWcubnVtYmVyKSB7XG4gICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgcmV0dXJuIDA7XG5cbiAgICAgICAgY2FzZSAnQmlnTnVtYmVyJzpcbiAgICAgICAgICByZXR1cm4gYmlnbnVtYmVyID8gYmlnbnVtYmVyKDApIDogKDAsIF9ub29wLm5vQmlnbnVtYmVyKSgpO1xuXG4gICAgICAgIGNhc2UgJ0ZyYWN0aW9uJzpcbiAgICAgICAgICByZXR1cm4gZnJhY3Rpb24gPyBmcmFjdGlvbigwKSA6ICgwLCBfbm9vcC5ub0ZyYWN0aW9uKSgpO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1bTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9uc3VtRGltKGFycmF5LCBkaW0pIHtcbiAgICB0cnkge1xuICAgICAgdmFyIHN1bSA9ICgwLCBfY29sbGVjdGlvbi5yZWR1Y2UpKGFycmF5LCBkaW0sIGFkZCk7XG4gICAgICByZXR1cm4gc3VtO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgKDAsIF9pbXByb3ZlRXJyb3JNZXNzYWdlLmltcHJvdmVFcnJvck1lc3NhZ2UpKGVyciwgJ3N1bScpO1xuICAgIH1cbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVN1bSA9IGNyZWF0ZVN1bTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW1wcm92ZUVycm9yTWVzc2FnZSA9IGltcHJvdmVFcnJvck1lc3NhZ2U7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvaXNcIik7XG5cbi8qKlxuICogSW1wcm92ZSBlcnJvciBtZXNzYWdlcyBmb3Igc3RhdGlzdGljcyBmdW5jdGlvbnMuIEVycm9ycyBhcmUgdHlwaWNhbGx5XG4gKiB0aHJvd24gaW4gYW4gaW50ZXJuYWxseSB1c2VkIGZ1bmN0aW9uIGxpa2UgbGFyZ2VyLCBjYXVzaW5nIHRoZSBlcnJvclxuICogbm90IHRvIG1lbnRpb24gdGhlIGZ1bmN0aW9uIChsaWtlIG1heCkgd2hpY2ggaXMgYWN0dWFsbHkgdXNlZCBieSB0aGUgdXNlci5cbiAqXG4gKiBAcGFyYW0ge0Vycm9yfSBlcnJcbiAqIEBwYXJhbSB7U3RyaW5nfSBmbk5hbWVcbiAqIEBwYXJhbSB7Kn0gW3ZhbHVlXVxuICogQHJldHVybiB7RXJyb3J9XG4gKi9cbmZ1bmN0aW9uIGltcHJvdmVFcnJvck1lc3NhZ2UoZXJyLCBmbk5hbWUsIHZhbHVlKSB7XG4gIC8vIFRPRE86IGFkZCBpbmZvcm1hdGlvbiB3aXRoIHRoZSBpbmRleCAoYWxzbyBuZWVkcyB0cmFuc2Zvcm0gaW4gZXhwcmVzc2lvbiBwYXJzZXIpXG4gIHZhciBkZXRhaWxzO1xuXG4gIGlmIChTdHJpbmcoZXJyKS5pbmRleE9mKCdVbmV4cGVjdGVkIHR5cGUnKSAhPT0gLTEpIHtcbiAgICBkZXRhaWxzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyAnICh0eXBlOiAnICsgKDAsIF9pcy50eXBlT2YpKHZhbHVlKSArICcsIHZhbHVlOiAnICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpICsgJyknIDogJyAodHlwZTogJyArIGVyci5kYXRhLmFjdHVhbCArICcpJztcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSAnICsgZm5OYW1lICsgJywgdW5leHBlY3RlZCB0eXBlIG9mIGFyZ3VtZW50JyArIGRldGFpbHMpO1xuICB9XG5cbiAgaWYgKFN0cmluZyhlcnIpLmluZGV4T2YoJ2NvbXBsZXggbnVtYmVycycpICE9PSAtMSkge1xuICAgIGRldGFpbHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMiA/ICcgKHR5cGU6ICcgKyAoMCwgX2lzLnR5cGVPZikodmFsdWUpICsgJywgdmFsdWU6ICcgKyBKU09OLnN0cmluZ2lmeSh2YWx1ZSkgKyAnKScgOiAnJztcbiAgICByZXR1cm4gbmV3IFR5cGVFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSAnICsgZm5OYW1lICsgJywgbm8gb3JkZXJpbmcgcmVsYXRpb24gaXMgZGVmaW5lZCBmb3IgY29tcGxleCBudW1iZXJzJyArIGRldGFpbHMpO1xuICB9XG5cbiAgcmV0dXJuIGVycjtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRGVwcmVjYXRlZFZhciA9IGV4cG9ydHMuY3JlYXRlVmFyaWFuY2UgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pbXByb3ZlRXJyb3JNZXNzYWdlID0gcmVxdWlyZShcIi4vdXRpbHMvaW1wcm92ZUVycm9yTWVzc2FnZVwiKTtcblxudmFyIF9sb2cgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbG9nXCIpO1xuXG52YXIgREVGQVVMVF9OT1JNQUxJWkFUSU9OID0gJ3VuYmlhc2VkJztcbnZhciBuYW1lID0gJ3ZhcmlhbmNlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZCcsICdzdWJ0cmFjdCcsICdtdWx0aXBseScsICdkaXZpZGUnLCAnYXBwbHknLCAnaXNOYU4nXTtcbnZhciBjcmVhdGVWYXJpYW5jZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGRpdmlkZSA9IF9yZWYuZGl2aWRlLFxuICAgICAgYXBwbHkgPSBfcmVmLmFwcGx5LFxuICAgICAgaXNOYU4gPSBfcmVmLmlzTmFOO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSB2YXJpYW5jZSBvZiBhIG1hdHJpeCBvciBhICBsaXN0IHdpdGggdmFsdWVzLlxuICAgKiBJbiBjYXNlIG9mIGEgKG11bHRpIGRpbWVuc2lvbmFsKSBhcnJheSBvciBtYXRyaXgsIHRoZSB2YXJpYW5jZSBvdmVyIGFsbFxuICAgKiBlbGVtZW50cyB3aWxsIGJlIGNhbGN1bGF0ZWQuXG4gICAqXG4gICAqIEFkZGl0aW9uYWxseSwgaXQgaXMgcG9zc2libGUgdG8gY29tcHV0ZSB0aGUgdmFyaWFuY2UgYWxvbmcgdGhlIHJvd3NcbiAgICogb3IgY29sdW1ucyBvZiBhIG1hdHJpeCBieSBzcGVjaWZ5aW5nIHRoZSBkaW1lbnNpb24gYXMgdGhlIHNlY29uZCBhcmd1bWVudC5cbiAgICpcbiAgICogT3B0aW9uYWxseSwgdGhlIHR5cGUgb2Ygbm9ybWFsaXphdGlvbiBjYW4gYmUgc3BlY2lmaWVkIGFzIHRoZSBmaW5hbFxuICAgKiBwYXJhbWV0ZXIuIFRoZSBwYXJhbWV0ZXIgYG5vcm1hbGl6YXRpb25gIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG4gICAqXG4gICAqIC0gJ3VuYmlhc2VkJyAoZGVmYXVsdCkgVGhlIHN1bSBvZiBzcXVhcmVkIGVycm9ycyBpcyBkaXZpZGVkIGJ5IChuIC0gMSlcbiAgICogLSAndW5jb3JyZWN0ZWQnICAgICAgICBUaGUgc3VtIG9mIHNxdWFyZWQgZXJyb3JzIGlzIGRpdmlkZWQgYnkgblxuICAgKiAtICdiaWFzZWQnICAgICAgICAgICAgIFRoZSBzdW0gb2Ygc3F1YXJlZCBlcnJvcnMgaXMgZGl2aWRlZCBieSAobiArIDEpXG4gICAqXG4gICAqXG4gICAqIE5vdGUgdGhhdCBvbGRlciBicm93c2VyIG1heSBub3QgbGlrZSB0aGUgdmFyaWFibGUgbmFtZSBgdmFyYC4gSW4gdGhhdFxuICAgKiBjYXNlLCB0aGUgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBhcyBgbWF0aFsndmFyJ10oLi4uKWAgaW5zdGVhZCBvZlxuICAgKiBgbWF0aC52YXIoLi4uKWAuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgudmFyaWFuY2UoYSwgYiwgYywgLi4uKVxuICAgKiAgICAgbWF0aC52YXJpYW5jZShBKVxuICAgKiAgICAgbWF0aC52YXJpYW5jZShBLCBub3JtYWxpemF0aW9uKVxuICAgKiAgICAgbWF0aC52YXJpYW5jZShBLCBkaW1lbnNpb24pXG4gICAqICAgICBtYXRoLnZhcmlhbmNlKEEsIGRpbWVuc2lvbiwgbm9ybWFsaXphdGlvbilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnZhcmlhbmNlKDIsIDQsIDYpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyA0XG4gICAqICAgICBtYXRoLnZhcmlhbmNlKFsyLCA0LCA2LCA4XSkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyA2LjY2NjY2NjY2NjY2NjY2N1xuICAgKiAgICAgbWF0aC52YXJpYW5jZShbMiwgNCwgNiwgOF0sICd1bmNvcnJlY3RlZCcpIC8vIHJldHVybnMgNVxuICAgKiAgICAgbWF0aC52YXJpYW5jZShbMiwgNCwgNiwgOF0sICdiaWFzZWQnKSAgICAgIC8vIHJldHVybnMgNFxuICAgKlxuICAgKiAgICAgbWF0aC52YXJpYW5jZShbWzEsIDIsIDNdLCBbNCwgNSwgNl1dKSAgICAgIC8vIHJldHVybnMgMy41XG4gICAqICAgICBtYXRoLnZhcmlhbmNlKFtbMSwgMiwgM10sIFs0LCA2LCA4XV0sIDApICAgLy8gcmV0dXJucyBbNC41LCA4LCAxMi41XVxuICAgKiAgICAgbWF0aC52YXJpYW5jZShbWzEsIDIsIDNdLCBbNCwgNiwgOF1dLCAxKSAgIC8vIHJldHVybnMgWzEsIDRdXG4gICAqICAgICBtYXRoLnZhcmlhbmNlKFtbMSwgMiwgM10sIFs0LCA2LCA4XV0sIDEsICdiaWFzZWQnKSAvLyByZXR1cm5zIFswLjUsIDJdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBtZWFuLCBtZWRpYW4sIG1heCwgbWluLCBwcm9kLCBzdGQsIHN1bVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSBhcnJheVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIEEgc2luZ2xlIG1hdHJpeCBvciBvciBtdWx0aXBsZSBzY2FsYXIgdmFsdWVzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbm9ybWFsaXphdGlvbj0ndW5iaWFzZWQnXVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIERldGVybWluZXMgaG93IHRvIG5vcm1hbGl6ZSB0aGUgdmFyaWFuY2UuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgQ2hvb3NlICd1bmJpYXNlZCcgKGRlZmF1bHQpLCAndW5jb3JyZWN0ZWQnLCBvciAnYmlhc2VkJy5cbiAgICogQHBhcmFtIGRpbWVuc2lvbiB7bnVtYmVyIHwgQmlnTnVtYmVyfVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIERldGVybWluZXMgdGhlIGF4aXMgdG8gY29tcHV0ZSB0aGUgdmFyaWFuY2UgZm9yIGEgbWF0cml4XG4gICAqIEByZXR1cm4geyp9IFRoZSB2YXJpYW5jZVxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyB2YXJpYW5jZShbYSwgYiwgYywgZCwgLi4uXSlcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChhcnJheSkge1xuICAgICAgcmV0dXJuIF92YXIoYXJyYXksIERFRkFVTFRfTk9STUFMSVpBVElPTik7XG4gICAgfSxcbiAgICAvLyB2YXJpYW5jZShbYSwgYiwgYywgZCwgLi4uXSwgbm9ybWFsaXphdGlvbilcbiAgICAnQXJyYXkgfCBNYXRyaXgsIHN0cmluZyc6IF92YXIsXG4gICAgLy8gdmFyaWFuY2UoW2EsIGIsIGMsIGMsIC4uLl0sIGRpbSlcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyKGFycmF5LCBkaW0pIHtcbiAgICAgIHJldHVybiBfdmFyRGltKGFycmF5LCBkaW0sIERFRkFVTFRfTk9STUFMSVpBVElPTik7XG4gICAgfSxcbiAgICAvLyB2YXJpYW5jZShbYSwgYiwgYywgYywgLi4uXSwgZGltLCBub3JtYWxpemF0aW9uKVxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyLCBzdHJpbmcnOiBfdmFyRGltLFxuICAgIC8vIHZhcmlhbmNlKGEsIGIsIGMsIGQsIC4uLilcbiAgICAnLi4uJzogZnVuY3Rpb24gXyhhcmdzKSB7XG4gICAgICByZXR1cm4gX3ZhcihhcmdzLCBERUZBVUxUX05PUk1BTElaQVRJT04pO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBjYWxjdWxhdGUgdGhlIHZhcmlhbmNlIG9mIGFuIG4tZGltZW5zaW9uYWwgYXJyYXlcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5vcm1hbGl6YXRpb25cbiAgICogICAgICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIGhvdyB0byBub3JtYWxpemUgdGhlIHZhcmlhbmNlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIC0gJ3VuYmlhc2VkJyAgICBUaGUgc3VtIG9mIHNxdWFyZWQgZXJyb3JzIGlzIGRpdmlkZWQgYnkgKG4gLSAxKVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIC0gJ3VuY29ycmVjdGVkJyBUaGUgc3VtIG9mIHNxdWFyZWQgZXJyb3JzIGlzIGRpdmlkZWQgYnkgblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIC0gJ2JpYXNlZCcgICAgICBUaGUgc3VtIG9mIHNxdWFyZWQgZXJyb3JzIGlzIGRpdmlkZWQgYnkgKG4gKyAxKVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXJ9IHZhcmlhbmNlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF92YXIoYXJyYXksIG5vcm1hbGl6YXRpb24pIHtcbiAgICB2YXIgc3VtID0gMDtcbiAgICB2YXIgbnVtID0gMDtcblxuICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignRnVuY3Rpb24gdmFyaWFuY2UgcmVxdWlyZXMgb25lIG9yIG1vcmUgcGFyYW1ldGVycyAoMCBwcm92aWRlZCknKTtcbiAgICB9IC8vIGNhbGN1bGF0ZSB0aGUgbWVhbiBhbmQgbnVtYmVyIG9mIGVsZW1lbnRzXG5cblxuICAgICgwLCBfY29sbGVjdGlvbi5kZWVwRm9yRWFjaCkoYXJyYXksIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgc3VtID0gYWRkKHN1bSwgdmFsdWUpO1xuICAgICAgICBudW0rKztcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2ltcHJvdmVFcnJvck1lc3NhZ2UuaW1wcm92ZUVycm9yTWVzc2FnZSkoZXJyLCAndmFyaWFuY2UnLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgaWYgKG51bSA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIHZhcmlhbmNlIG9mIGFuIGVtcHR5IGFycmF5Jyk7XG4gICAgdmFyIG1lYW4gPSBkaXZpZGUoc3VtLCBudW0pOyAvLyBjYWxjdWxhdGUgdGhlIHZhcmlhbmNlXG5cbiAgICBzdW0gPSAwO1xuICAgICgwLCBfY29sbGVjdGlvbi5kZWVwRm9yRWFjaCkoYXJyYXksIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdmFyIGRpZmYgPSBzdWJ0cmFjdCh2YWx1ZSwgbWVhbik7XG4gICAgICBzdW0gPSBhZGQoc3VtLCBtdWx0aXBseShkaWZmLCBkaWZmKSk7XG4gICAgfSk7XG5cbiAgICBpZiAoaXNOYU4oc3VtKSkge1xuICAgICAgcmV0dXJuIHN1bTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKG5vcm1hbGl6YXRpb24pIHtcbiAgICAgIGNhc2UgJ3VuY29ycmVjdGVkJzpcbiAgICAgICAgcmV0dXJuIGRpdmlkZShzdW0sIG51bSk7XG5cbiAgICAgIGNhc2UgJ2JpYXNlZCc6XG4gICAgICAgIHJldHVybiBkaXZpZGUoc3VtLCBudW0gKyAxKTtcblxuICAgICAgY2FzZSAndW5iaWFzZWQnOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHplcm8gPSAoMCwgX2lzLmlzQmlnTnVtYmVyKShzdW0pID8gc3VtLm11bCgwKSA6IDA7XG4gICAgICAgICAgcmV0dXJuIG51bSA9PT0gMSA/IHplcm8gOiBkaXZpZGUoc3VtLCBudW0gLSAxKTtcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbm9ybWFsaXphdGlvbiBcIicgKyBub3JtYWxpemF0aW9uICsgJ1wiLiAnICsgJ0Nob29zZSBcInVuYmlhc2VkXCIgKGRlZmF1bHQpLCBcInVuY29ycmVjdGVkXCIsIG9yIFwiYmlhc2VkXCIuJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gX3ZhckRpbShhcnJheSwgZGltLCBub3JtYWxpemF0aW9uKSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdGdW5jdGlvbiB2YXJpYW5jZSByZXF1aXJlcyBvbmUgb3IgbW9yZSBwYXJhbWV0ZXJzICgwIHByb3ZpZGVkKScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXBwbHkoYXJyYXksIGRpbSwgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIF92YXIoeCwgbm9ybWFsaXphdGlvbik7XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93ICgwLCBfaW1wcm92ZUVycm9yTWVzc2FnZS5pbXByb3ZlRXJyb3JNZXNzYWdlKShlcnIsICd2YXJpYW5jZScpO1xuICAgIH1cbiAgfVxufSk7IC8vIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNi4wLjAuIERhdGU6IDIwMTgtMTEtMDlcblxuZXhwb3J0cy5jcmVhdGVWYXJpYW5jZSA9IGNyZWF0ZVZhcmlhbmNlO1xudmFyIGNyZWF0ZURlcHJlY2F0ZWRWYXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkoJ3ZhcicsIFsndmFyaWFuY2UnXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB2YXJpYW5jZSA9IF9yZWYyLnZhcmlhbmNlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICgwLCBfbG9nLndhcm5PbmNlKSgnRnVuY3Rpb24gXCJ2YXJcIiBoYXMgYmVlbiByZW5hbWVkIHRvIFwidmFyaWFuY2VcIiBpbiB2Ni4wLjAsIHBsZWFzZSB1c2UgdGhlIG5ldyBmdW5jdGlvbiBpbnN0ZWFkLicpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiB2YXJpYW5jZS5hcHBseSh2YXJpYW5jZSwgYXJncyk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlRGVwcmVjYXRlZFZhciA9IGNyZWF0ZURlcHJlY2F0ZWRWYXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZvcm1hdCA9IHZvaWQgMDtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZm9ybWF0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlRm9ybWF0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogRm9ybWF0IGEgdmFsdWUgb2YgYW55IHR5cGUgaW50byBhIHN0cmluZy5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmZvcm1hdCh2YWx1ZSlcbiAgICogICAgbWF0aC5mb3JtYXQodmFsdWUsIG9wdGlvbnMpXG4gICAqICAgIG1hdGguZm9ybWF0KHZhbHVlLCBwcmVjaXNpb24pXG4gICAqICAgIG1hdGguZm9ybWF0KHZhbHVlLCBjYWxsYmFjaylcbiAgICpcbiAgICogV2hlcmU6XG4gICAqXG4gICAqICAtIGB2YWx1ZTogKmBcbiAgICogICAgVGhlIHZhbHVlIHRvIGJlIGZvcm1hdHRlZFxuICAgKiAgLSBgb3B0aW9uczogT2JqZWN0YFxuICAgKiAgICBBbiBvYmplY3Qgd2l0aCBmb3JtYXR0aW5nIG9wdGlvbnMuIEF2YWlsYWJsZSBvcHRpb25zOlxuICAgKiAgICAtIGBub3RhdGlvbjogc3RyaW5nYFxuICAgKiAgICAgIE51bWJlciBub3RhdGlvbi4gQ2hvb3NlIGZyb206XG4gICAqICAgICAgLSAnZml4ZWQnXG4gICAqICAgICAgICBBbHdheXMgdXNlIHJlZ3VsYXIgbnVtYmVyIG5vdGF0aW9uLlxuICAgKiAgICAgICAgRm9yIGV4YW1wbGUgJzEyMy40MCcgYW5kICcxNDAwMDAwMCdcbiAgICogICAgICAtICdleHBvbmVudGlhbCdcbiAgICogICAgICAgIEFsd2F5cyB1c2UgZXhwb25lbnRpYWwgbm90YXRpb24uXG4gICAqICAgICAgICBGb3IgZXhhbXBsZSAnMS4yMzRlKzInIGFuZCAnMS40ZSs3J1xuICAgKiAgICAgIC0gJ2VuZ2luZWVyaW5nJ1xuICAgKiAgICAgICAgQWx3YXlzIHVzZSBlbmdpbmVlcmluZyBub3RhdGlvbjogYWx3YXlzIGhhdmUgZXhwb25lbnRpYWwgbm90YXRpb24sXG4gICAqICAgICAgICBhbmQgc2VsZWN0IHRoZSBleHBvbmVudCB0byBiZSBhIG11bHRpcGxlIG9mIDMuXG4gICAqICAgICAgICBGb3IgZXhhbXBsZSAnMTIzLjRlKzAnIGFuZCAnMTQuMGUrNidcbiAgICogICAgICAtICdhdXRvJyAoZGVmYXVsdClcbiAgICogICAgICAgIFJlZ3VsYXIgbnVtYmVyIG5vdGF0aW9uIGZvciBudW1iZXJzIGhhdmluZyBhbiBhYnNvbHV0ZSB2YWx1ZSBiZXR3ZWVuXG4gICAqICAgICAgICBgbG93ZXJgIGFuZCBgdXBwZXJgIGJvdW5kcywgYW5kIHVzZXMgZXhwb25lbnRpYWwgbm90YXRpb24gZWxzZXdoZXJlLlxuICAgKiAgICAgICAgTG93ZXIgYm91bmQgaXMgaW5jbHVkZWQsIHVwcGVyIGJvdW5kIGlzIGV4Y2x1ZGVkLlxuICAgKiAgICAgICAgRm9yIGV4YW1wbGUgJzEyMy40JyBhbmQgJzEuNGU3Jy5cbiAgICogICAgLSBgcHJlY2lzaW9uOiBudW1iZXJgXG4gICAqICAgICAgQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxNiB0byByb3VuZCB0aGUgZGlnaXRzIG9mIHRoZSBudW1iZXIuIEluIGNhc2VcbiAgICogICAgICBvZiBub3RhdGlvbnMgJ2V4cG9uZW50aWFsJywgJ2VuZ2luZWVyaW5nJywgYW5kICdhdXRvJywgYHByZWNpc2lvbmBcbiAgICogICAgICBkZWZpbmVzIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIHJldHVybmVkLlxuICAgKiAgICAgIEluIGNhc2Ugb2Ygbm90YXRpb24gJ2ZpeGVkJywgYHByZWNpc2lvbmAgZGVmaW5lcyB0aGUgbnVtYmVyIG9mXG4gICAqICAgICAgc2lnbmlmaWNhbnQgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50LlxuICAgKiAgICAgIGBwcmVjaXNpb25gIGlzIHVuZGVmaW5lZCBieSBkZWZhdWx0LlxuICAgKiAgICAtIGBsb3dlckV4cDogbnVtYmVyYFxuICAgKiAgICAgIEV4cG9uZW50IGRldGVybWluaW5nIHRoZSBsb3dlciBib3VuZGFyeSBmb3IgZm9ybWF0dGluZyBhIHZhbHVlIHdpdGhcbiAgICogICAgICBhbiBleHBvbmVudCB3aGVuIGBub3RhdGlvbj0nYXV0b2AuIERlZmF1bHQgdmFsdWUgaXMgYC0zYC5cbiAgICogICAgLSBgdXBwZXJFeHA6IG51bWJlcmBcbiAgICogICAgICBFeHBvbmVudCBkZXRlcm1pbmluZyB0aGUgdXBwZXIgYm91bmRhcnkgZm9yIGZvcm1hdHRpbmcgYSB2YWx1ZSB3aXRoXG4gICAqICAgICAgYW4gZXhwb25lbnQgd2hlbiBgbm90YXRpb249J2F1dG9gLiBEZWZhdWx0IHZhbHVlIGlzIGA1YC5cbiAgICogICAgLSBgZnJhY3Rpb246IHN0cmluZ2AuIEF2YWlsYWJsZSB2YWx1ZXM6ICdyYXRpbycgKGRlZmF1bHQpIG9yICdkZWNpbWFsJy5cbiAgICogICAgICBGb3IgZXhhbXBsZSBgZm9ybWF0KGZyYWN0aW9uKDEsIDMpKWAgd2lsbCBvdXRwdXQgJzEvMycgd2hlbiAncmF0aW8nIGlzXG4gICAqICAgICAgY29uZmlndXJlZCwgYW5kIHdpbGwgb3V0cHV0IGAwLigzKWAgd2hlbiAnZGVjaW1hbCcgaXMgY29uZmlndXJlZC5cbiAgICogLSBgY2FsbGJhY2s6IGZ1bmN0aW9uYFxuICAgKiAgIEEgY3VzdG9tIGZvcm1hdHRpbmcgZnVuY3Rpb24sIGludm9rZWQgZm9yIGFsbCBudW1lcmljIGVsZW1lbnRzIGluIGB2YWx1ZWAsXG4gICAqICAgZm9yIGV4YW1wbGUgYWxsIGVsZW1lbnRzIG9mIGEgbWF0cml4LCBvciB0aGUgcmVhbCBhbmQgaW1hZ2luYXJ5XG4gICAqICAgcGFydHMgb2YgYSBjb21wbGV4IG51bWJlci4gVGhpcyBjYWxsYmFjayBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGVcbiAgICogICBidWlsdC1pbiBudW1lcmljIG5vdGF0aW9uIHdpdGggYW55IHR5cGUgb2YgZm9ybWF0dGluZy4gRnVuY3Rpb24gYGNhbGxiYWNrYFxuICAgKiAgIGlzIGNhbGxlZCB3aXRoIGB2YWx1ZWAgYXMgcGFyYW1ldGVyIGFuZCBtdXN0IHJldHVybiBhIHN0cmluZy5cbiAgICpcbiAgICogV2hlbiBgdmFsdWVgIGlzIGFuIE9iamVjdDpcbiAgICpcbiAgICogLSBXaGVuIHRoZSBvYmplY3QgY29udGFpbnMgYSBwcm9wZXJ0eSBgZm9ybWF0YCBiZWluZyBhIGZ1bmN0aW9uLCB0aGlzIGZ1bmN0aW9uXG4gICAqICAgaXMgaW52b2tlZCBhcyBgdmFsdWUuZm9ybWF0KG9wdGlvbnMpYCBhbmQgdGhlIHJlc3VsdCBpcyByZXR1cm5lZC5cbiAgICogLSBXaGVuIHRoZSBvYmplY3QgaGFzIGl0cyBvd24gYHRvU3RyaW5nYCBtZXRob2QsIHRoaXMgbWV0aG9kIGlzIGludm9rZWRcbiAgICogICBhbmQgdGhlIHJlc3VsdCBpcyByZXR1cm5lZC5cbiAgICogLSBJbiBvdGhlciBjYXNlcyB0aGUgZnVuY3Rpb24gd2lsbCBsb29wIG92ZXIgYWxsIG9iamVjdCBwcm9wZXJ0aWVzIGFuZFxuICAgKiAgIHJldHVybiBKU09OIG9iamVjdCBub3RhdGlvbiBsaWtlICd7XCJhXCI6IDIsIFwiYlwiOiAzfScuXG4gICAqXG4gICAqIFdoZW4gdmFsdWUgaXMgYSBmdW5jdGlvbjpcbiAgICpcbiAgICogLSBXaGVuIHRoZSBmdW5jdGlvbiBoYXMgYSBwcm9wZXJ0eSBgc3ludGF4YCwgaXQgcmV0dXJucyB0aGlzXG4gICAqICAgc3ludGF4IGRlc2NyaXB0aW9uLlxuICAgKiAtIEluIG90aGVyIGNhc2VzLCBhIHN0cmluZyBgJ2Z1bmN0aW9uJ2AgaXMgcmV0dXJuZWQuXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmZvcm1hdCg2LjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgJzYuNCdcbiAgICogICAgbWF0aC5mb3JtYXQoMTI0MDAwMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zICcxLjI0ZTYnXG4gICAqICAgIG1hdGguZm9ybWF0KDEvMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAnMC4zMzMzMzMzMzMzMzMzMzMzJ1xuICAgKiAgICBtYXRoLmZvcm1hdCgxLzMsIDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgJzAuMzMzJ1xuICAgKiAgICBtYXRoLmZvcm1hdCgyMTM4NSwgMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgJzIxMDAwJ1xuICAgKiAgICBtYXRoLmZvcm1hdCgxMmU4LCB7bm90YXRpb246ICdmaXhlZCd9KSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgJzEyMDAwMDAwMDAnXG4gICAqICAgIG1hdGguZm9ybWF0KDIuMywgIHtub3RhdGlvbjogJ2ZpeGVkJywgcHJlY2lzaW9uOiA0fSkgICAgLy8gcmV0dXJucyAnMi4zMDAwJ1xuICAgKiAgICBtYXRoLmZvcm1hdCg1Mi44LCB7bm90YXRpb246ICdleHBvbmVudGlhbCd9KSAgICAgICAgICAgIC8vIHJldHVybnMgJzUuMjhlKzEnXG4gICAqICAgIG1hdGguZm9ybWF0KDEyNDAwLHtub3RhdGlvbjogJ2VuZ2luZWVyaW5nJ30pICAgICAgICAgICAgLy8gcmV0dXJucyAnMTIuNDAwZSszJ1xuICAgKiAgICBtYXRoLmZvcm1hdCgyMDAwLCB7bG93ZXJFeHA6IC0yLCB1cHBlckV4cDogMn0pICAgICAgICAgIC8vIHJldHVybnMgJzJlKzMnXG4gICAqXG4gICAqICAgIGZ1bmN0aW9uIGZvcm1hdEN1cnJlbmN5KHZhbHVlKSB7XG4gICAqICAgICAgLy8gcmV0dXJuIGN1cnJlbmN5IG5vdGF0aW9uIHdpdGggdHdvIGRpZ2l0czpcbiAgICogICAgICByZXR1cm4gJyQnICsgdmFsdWUudG9GaXhlZCgyKVxuICAgKlxuICAgKiAgICAgIC8vIHlvdSBjb3VsZCBhbHNvIHVzZSBtYXRoLmZvcm1hdCBpbnNpZGUgdGhlIGNhbGxiYWNrOlxuICAgKiAgICAgIC8vIHJldHVybiAnJCcgKyBtYXRoLmZvcm1hdCh2YWx1ZSwge25vdGF0aW9uOiAnZml4ZWQnLCBwcmVjaXNpb246IDJ9KVxuICAgKiAgICB9XG4gICAqICAgIG1hdGguZm9ybWF0KFsyLjEsIDMsIDAuMDE2XSwgZm9ybWF0Q3VycmVuY3l9ICAgICAgICAgICAgLy8gcmV0dXJucyAnWyQyLjEwLCAkMy4wMCwgJDAuMDJdJ1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgcHJpbnRcbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSB0byBiZSBzdHJpbmdpZmllZFxuICAgKiBAcGFyYW0ge09iamVjdCB8IEZ1bmN0aW9uIHwgbnVtYmVyfSBbb3B0aW9uc10gIEZvcm1hdHRpbmcgb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdmFsdWVcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgYW55OiBfc3RyaW5nLmZvcm1hdCxcbiAgICAnYW55LCBPYmplY3QgfCBmdW5jdGlvbiB8IG51bWJlcic6IF9zdHJpbmcuZm9ybWF0XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUZvcm1hdCA9IGNyZWF0ZUZvcm1hdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUHJpbnQgPSB2b2lkIDA7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3ByaW50JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlUHJpbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBJbnRlcnBvbGF0ZSB2YWx1ZXMgaW50byBhIHN0cmluZyB0ZW1wbGF0ZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5wcmludCh0ZW1wbGF0ZSwgdmFsdWVzKVxuICAgKiAgICAgbWF0aC5wcmludCh0ZW1wbGF0ZSwgdmFsdWVzLCBwcmVjaXNpb24pXG4gICAqICAgICBtYXRoLnByaW50KHRlbXBsYXRlLCB2YWx1ZXMsIG9wdGlvbnMpXG4gICAqXG4gICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAqXG4gICAqICAgICAvLyB0aGUgZm9sbG93aW5nIG91dHB1dHM6ICdMdWN5IGlzIDUgeWVhcnMgb2xkJ1xuICAgKiAgICAgbWF0aC5wcmludCgnTHVjeSBpcyAkYWdlIHllYXJzIG9sZCcsIHthZ2U6IDV9KVxuICAgKlxuICAgKiAgICAgLy8gdGhlIGZvbGxvd2luZyBvdXRwdXRzOiAnVGhlIHZhbHVlIG9mIHBpIGlzIDMuMTQxNTkyNjU0J1xuICAgKiAgICAgbWF0aC5wcmludCgnVGhlIHZhbHVlIG9mIHBpIGlzICRwaScsIHtwaTogbWF0aC5waX0sIDEwKVxuICAgKlxuICAgKiAgICAgLy8gdGhlIGZvbGxvd2luZyBvdXRwdXRzOiAnaGVsbG8gTWFyeSEgVGhlIGRhdGUgaXMgMjAxMy0wMy0yMydcbiAgICogICAgIG1hdGgucHJpbnQoJ0hlbGxvICR1c2VyLm5hbWUhIFRoZSBkYXRlIGlzICRkYXRlJywge1xuICAgKiAgICAgICB1c2VyOiB7XG4gICAqICAgICAgICAgbmFtZTogJ01hcnknLFxuICAgKiAgICAgICB9LFxuICAgKiAgICAgICBkYXRlOiBuZXcgRGF0ZSgyMDEzLCAyLCAyMykudG9JU09TdHJpbmcoKS5zdWJzdHJpbmcoMCwgMTApXG4gICAqICAgICB9KVxuICAgKlxuICAgKiAgICAgLy8gdGhlIGZvbGxvd2luZyBvdXRwdXRzOiAnTXkgZmF2b3JpdGUgZnJ1aXRzIGFyZSBhcHBsZXMgYW5kIGJhbmFuYXMgISdcbiAgICogICAgIG1hdGgucHJpbnQoJ015IGZhdm9yaXRlIGZydWl0cyBhcmUgJDAgYW5kICQxICEnLCBbXG4gICAqICAgICAgICdhcHBsZXMnLFxuICAgKiAgICAgICAnYmFuYW5hcydcbiAgICogICAgIF0pXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgZm9ybWF0XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZW1wbGF0ZSAgICAgICAgICAgQSBzdHJpbmcgY29udGFpbmluZyB2YXJpYWJsZSBwbGFjZWhvbGRlcnMuXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgQXJyYXkgfCBNYXRyaXh9ICAgdmFsdWVzIEFuIG9iamVjdCBvciBhcnJheSBjb250YWluaW5nIHZhcmlhYmxlc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIHdpbGwgYmUgZmlsbGVkIGluIGluIHRoZSB0ZW1wbGF0ZS5cbiAgICogQHBhcmFtIHtudW1iZXIgfCBPYmplY3R9IFtvcHRpb25zXSBGb3JtYXR0aW5nIG9wdGlvbnMsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgdGhlIG51bWJlciBvZiBkaWdpdHMgdG8gZm9ybWF0IG51bWJlcnMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIGZ1bmN0aW9uIG1hdGguZm9ybWF0IGZvciBhIGRlc2NyaXB0aW9uXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgYWxsIG9wdGlvbnMuXG4gICAqIEByZXR1cm4ge3N0cmluZ30gSW50ZXJwb2xhdGVkIHN0cmluZ1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyBub3RlOiBNYXRyaXggd2lsbCBiZSBjb252ZXJ0ZWQgYXV0b21hdGljYWxseSB0byBhbiBBcnJheVxuICAgICdzdHJpbmcsIE9iamVjdCB8IEFycmF5JzogX3ByaW50LFxuICAgICdzdHJpbmcsIE9iamVjdCB8IEFycmF5LCBudW1iZXIgfCBPYmplY3QnOiBfcHJpbnRcbiAgfSk7XG59KTtcbi8qKlxuICogSW50ZXJwb2xhdGUgdmFsdWVzIGludG8gYSBzdHJpbmcgdGVtcGxhdGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXNcbiAqIEBwYXJhbSB7bnVtYmVyIHwgT2JqZWN0fSBbb3B0aW9uc11cbiAqIEByZXR1cm5zIHtzdHJpbmd9IEludGVycG9sYXRlZCBzdHJpbmdcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVQcmludCA9IGNyZWF0ZVByaW50O1xuXG5mdW5jdGlvbiBfcHJpbnQodGVtcGxhdGUsIHZhbHVlcywgb3B0aW9ucykge1xuICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgvXFwkKFtcXHcuXSspL2csIGZ1bmN0aW9uIChvcmlnaW5hbCwga2V5KSB7XG4gICAgdmFyIGtleXMgPSBrZXkuc3BsaXQoJy4nKTtcbiAgICB2YXIgdmFsdWUgPSB2YWx1ZXNba2V5cy5zaGlmdCgpXTtcblxuICAgIHdoaWxlIChrZXlzLmxlbmd0aCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgayA9IGtleXMuc2hpZnQoKTtcbiAgICAgIHZhbHVlID0gayA/IHZhbHVlW2tdIDogdmFsdWUgKyAnLic7XG4gICAgfVxuXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghKDAsIF9pcy5pc1N0cmluZykodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiAoMCwgX3N0cmluZy5mb3JtYXQpKHZhbHVlLCBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gb3JpZ2luYWw7XG4gIH0pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY29zID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ2Fjb3MnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ0NvbXBsZXgnXTtcbnZhciBjcmVhdGVBY29zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIGNvc2luZSBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYWNvcyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hY29zKDAuNSkgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDEuMDQ3MTk3NTUxMTk2NTk3OVxuICAgKiAgICBtYXRoLmFjb3MobWF0aC5jb3MoMS41KSkgLy8gcmV0dXJucyBudW1iZXIgMS41XG4gICAqXG4gICAqICAgIG1hdGguYWNvcygyKSAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggMCArIDEuMzE2OTU3ODk2OTI0ODE2NiBpXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb3MsIGF0YW4sIGFzaW5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gVGhlIGFyYyBjb3NpbmUgb2YgeFxuICAgKi9cbiAgdmFyIGFjb3MgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgaWYgKHggPj0gLTEgJiYgeCA8PSAxIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICByZXR1cm4gTWF0aC5hY29zKHgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgsIDApLmFjb3MoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguYWNvcygpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguYWNvcygpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBhY29zKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYWNvcztcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY29zID0gY3JlYXRlQWNvczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWNvc2ggPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdhY29zaCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQ29tcGxleCddO1xudmFyIGNyZWF0ZUFjb3NoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY2NvcyBvZiBhIHZhbHVlLFxuICAgKiBkZWZpbmVkIGFzIGBhY29zaCh4KSA9IGxuKHNxcnQoeF4yIC0gMSkgKyB4KWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hY29zaCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hY29zaCgxLjUpICAgICAgIC8vIHJldHVybnMgMC45NjI0MjM2NTAxMTkyMDY5XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb3NoLCBhc2luaCwgYXRhbmhcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgYXJjY29zaW5lIG9mIHhcbiAgICovXG4gIHZhciBhY29zaCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoeCA+PSAxIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICByZXR1cm4gKDAsIF9udW1iZXIuYWNvc2hOdW1iZXIpKHgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoeCA8PSAtMSkge1xuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoTWF0aC5sb2coTWF0aC5zcXJ0KHggKiB4IC0gMSkgLSB4KSwgTWF0aC5QSSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5hY29zaCgpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hY29zaCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguYWNvc2goKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYWNvc2gpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhY29zaDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY29zaCA9IGNyZWF0ZUFjb3NoOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY290ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYWNvdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdCaWdOdW1iZXInXTtcbnZhciBjcmVhdGVBY290ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIGNvdGFuZ2VudCBvZiBhIHZhbHVlLCBkZWZpbmVkIGFzIGBhY290KHgpID0gYXRhbigxL3gpYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFjb3QoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYWNvdCgwLjUpICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAwLjQ2MzY0NzYwOTAwMDgwNjFcbiAgICogICAgbWF0aC5hY290KG1hdGguY290KDEuNSkpIC8vIHJldHVybnMgbnVtYmVyIDEuNVxuICAgKlxuICAgKiAgICBtYXRoLmFjb3QoMikgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMS4zMTY5NTc4OTY5MjQ4MTY2IGlcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGNvdCwgYXRhblxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gVGhlIGFyYyBjb3RhbmdlbnQgb2YgeFxuICAgKi9cbiAgdmFyIGFjb3QgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmFjb3ROdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hY290KCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoMSkuZGl2KHgpLmF0YW4oKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYWNvdCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFjb3Q7XG59KTtcbmV4cG9ydHMuY3JlYXRlQWNvdCA9IGNyZWF0ZUFjb3Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFjb3RoID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYWNvdGgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ0NvbXBsZXgnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlQWNvdGggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4LFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjY290YW5nZW50IG9mIGEgdmFsdWUsXG4gICAqIGRlZmluZWQgYXMgYGFjb3RoKHgpID0gYXRhbmgoMS94KSA9IChsbigoeCsxKS94KSArIGxuKHgvKHgtMSkpKSAvIDJgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYWNvdGgoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYWNvdGgoMC41KSAgICAgICAvLyByZXR1cm5zIDAuODA0NzE4OTU2MjE3MDUwM1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYWNzY2gsIGFzZWNoXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgYXJjY290YW5nZW50IG9mIHhcbiAgICovXG4gIHZhciBhY290aCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoeCA+PSAxIHx8IHggPD0gLTEgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiAoMCwgX251bWJlci5hY290aE51bWJlcikoeCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5hY290aCgpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hY290aCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKDEpLmRpdih4KS5hdGFuaCgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBhY290aCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFjb3RoO1xufSk7XG5leHBvcnRzLmNyZWF0ZUFjb3RoID0gY3JlYXRlQWNvdGg7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFjc2MgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdhY3NjJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdDb21wbGV4JywgJ0JpZ051bWJlciddO1xudmFyIGNyZWF0ZUFjc2MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4LFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGludmVyc2UgY29zZWNhbnQgb2YgYSB2YWx1ZSwgZGVmaW5lZCBhcyBgYWNzYyh4KSA9IGFzaW4oMS94KWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hY3NjKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmFjc2MoMC41KSAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC41MjM1OTg3NzU1OTgyOTg5XG4gICAqICAgIG1hdGguYWNzYyhtYXRoLmNzYygxLjUpKSAvLyByZXR1cm5zIG51bWJlciB+MS41XG4gICAqXG4gICAqICAgIG1hdGguYWNzYygyKSAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggMS41NzA3OTYzMjY3OTQ4OTY2IC0xLjMxNjk1Nzg5NjkyNDgxNjYgaVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY3NjLCBhc2luLCBhc2VjXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBUaGUgYXJjIGNvc2VjYW50IG9mIHhcbiAgICovXG4gIHZhciBhY3NjID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICh4IDw9IC0xIHx8IHggPj0gMSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLmFjc2NOdW1iZXIpKHgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoeCwgMCkuYWNzYygpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hY3NjKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoMSkuZGl2KHgpLmFzaW4oKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYWNzYyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFjc2M7XG59KTtcbmV4cG9ydHMuY3JlYXRlQWNzYyA9IGNyZWF0ZUFjc2M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFjc2NoID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYWNzY2gnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlQWNzY2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjY29zZWNhbnQgb2YgYSB2YWx1ZSxcbiAgICogZGVmaW5lZCBhcyBgYWNzY2goeCkgPSBhc2luaCgxL3gpID0gbG4oMS94ICsgc3FydCgxL3heMiArIDEpKWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hY3NjaCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hY3NjaCgwLjUpICAgICAgIC8vIHJldHVybnMgMS40NDM2MzU0NzUxNzg4MTAzXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhc2VjaCwgYWNvdGhcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gSHlwZXJib2xpYyBhcmNjb3NlY2FudCBvZiB4XG4gICAqL1xuICB2YXIgYWNzY2ggPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmFjc2NoTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguYWNzY2goKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcigxKS5kaXYoeCkuYXNpbmgoKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYWNzY2gpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhY3NjaDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY3NjaCA9IGNyZWF0ZUFjc2NoOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBc2VjID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYXNlYyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQ29tcGxleCcsICdCaWdOdW1iZXInXTtcbnZhciBjcmVhdGVBc2VjID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleCxcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIHNlY2FudCBvZiBhIHZhbHVlLiBEZWZpbmVkIGFzIGBhc2VjKHgpID0gYWNvcygxL3gpYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFzZWMoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYXNlYygwLjUpICAgICAgICAgICAvLyByZXR1cm5zIDEuMDQ3MTk3NTUxMTk2NTk3OVxuICAgKiAgICBtYXRoLmFzZWMobWF0aC5zZWMoMS41KSkgLy8gcmV0dXJucyAxLjVcbiAgICpcbiAgICogICAgbWF0aC5hc2VjKDIpICAgICAgICAgICAgIC8vIHJldHVybnMgMCArIDEuMzE2OTU3ODk2OTI0ODE2NiBpXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhY29zLCBhY290LCBhY3NjXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBhcmMgc2VjYW50IG9mIHhcbiAgICovXG4gIHZhciBhc2VjID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICh4IDw9IC0xIHx8IHggPj0gMSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLmFzZWNOdW1iZXIpKHgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoeCwgMCkuYXNlYygpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hc2VjKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoMSkuZGl2KHgpLmFjb3MoKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYXNlYyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFzZWM7XG59KTtcbmV4cG9ydHMuY3JlYXRlQXNlYyA9IGNyZWF0ZUFzZWM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFzZWNoID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYXNlY2gnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ0NvbXBsZXgnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlQXNlY2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4LFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjc2VjYW50IG9mIGEgdmFsdWUsXG4gICAqIGRlZmluZWQgYXMgYGFzZWNoKHgpID0gYWNvc2goMS94KSA9IGxuKHNxcnQoMS94XjIgLSAxKSArIDEveClgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYXNlY2goeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYXNlY2goMC41KSAgICAgICAvLyByZXR1cm5zIDEuMzE2OTU3ODk2OTI0ODE2NlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYWNzY2gsIGFjb3RoXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgYXJjc2VjYW50IG9mIHhcbiAgICovXG4gIHZhciBhc2VjaCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoeCA8PSAxICYmIHggPj0gLTEgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHZhciB4SW52ID0gMSAvIHg7XG5cbiAgICAgICAgaWYgKHhJbnYgPiAwIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICAgIHJldHVybiAoMCwgX251bWJlci5hc2VjaE51bWJlcikoeCk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgcmV0ID0gTWF0aC5zcXJ0KHhJbnYgKiB4SW52IC0gMSk7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLmxvZyhyZXQgLSB4SW52KSwgTWF0aC5QSSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5hc2VjaCgpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hc2VjaCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKDEpLmRpdih4KS5hY29zaCgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBhc2VjaCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFzZWNoO1xufSk7XG5leHBvcnRzLmNyZWF0ZUFzZWNoID0gY3JlYXRlQXNlY2g7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFzaW4gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAnYXNpbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQ29tcGxleCddO1xudmFyIGNyZWF0ZUFzaW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGludmVyc2Ugc2luZSBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYXNpbih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hc2luKDAuNSkgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDAuNTIzNTk4Nzc1NTk4Mjk4OVxuICAgKiAgICBtYXRoLmFzaW4obWF0aC5zaW4oMS41KSkgLy8gcmV0dXJucyBudW1iZXIgfjEuNVxuICAgKlxuICAgKiAgICBtYXRoLmFzaW4oMikgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMS4zMTY5NTc4OTY5MjQ4MTY2IGlcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNpbiwgYXRhbiwgYWNvc1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gVGhlIGFyYyBzaW5lIG9mIHhcbiAgICovXG4gIHZhciBhc2luID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICh4ID49IC0xICYmIHggPD0gMSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguYXNpbih4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5hc2luKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmFzaW4oKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmFzaW4oKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2UgYXNpbigwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYXNpbiwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFzaW47XG59KTtcbmV4cG9ydHMuY3JlYXRlQXNpbiA9IGNyZWF0ZUFzaW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFzaW5oID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYXNpbmgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVBc2luaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBhcmNzaW5lIG9mIGEgdmFsdWUsXG4gICAqIGRlZmluZWQgYXMgYGFzaW5oKHgpID0gbG4oeCArIHNxcnQoeF4yICsgMSkpYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFzaW5oKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmFzaW5oKDAuNSkgICAgICAgLy8gcmV0dXJucyAwLjQ4MTIxMTgyNTA1OTYwMzQ3XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhY29zaCwgYXRhbmhcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gSHlwZXJib2xpYyBhcmNzaW5lIG9mIHhcbiAgICovXG4gIHZhciBhc2luaCA9IHR5cGVkKCdhc2luaCcsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuYXNpbmhOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hc2luaCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguYXNpbmgoKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2UgYXNpbmgoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGFzaW5oLCB0cnVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYXNpbmg7XG59KTtcbmV4cG9ydHMuY3JlYXRlQXNpbmggPSBjcmVhdGVBc2luaDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQXRhbiA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgbmFtZSA9ICdhdGFuJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQXRhbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaW52ZXJzZSB0YW5nZW50IG9mIGEgdmFsdWUuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hdGFuKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmF0YW4oMC41KSAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC40NjM2NDc2MDkwMDA4MDYxXG4gICAqICAgIG1hdGguYXRhbihtYXRoLnRhbigxLjUpKSAvLyByZXR1cm5zIG51bWJlciAxLjVcbiAgICpcbiAgICogICAgbWF0aC5hdGFuKDIpICAgICAgICAgICAgIC8vIHJldHVybnMgQ29tcGxleCAxLjU3MDc5NjMyNjc5NDg5NjYgLTEuMzE2OTU3ODk2OTI0ODE2NiBpXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICB0YW4sIGFzaW4sIGFjb3NcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBhcmMgdGFuZ2VudCBvZiB4XG4gICAqL1xuICB2YXIgYXRhbiA9IHR5cGVkKCdhdGFuJywge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBNYXRoLmF0YW4oeCk7XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmF0YW4oKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmF0YW4oKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2UgYXRhbigwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYXRhbiwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGF0YW47XG59KTtcbmV4cG9ydHMuY3JlYXRlQXRhbiA9IGNyZWF0ZUF0YW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUF0YW4yID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDJcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA5XCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTFcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMlwiKTtcblxudmFyIF9hbGdvcml0aG02ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTcgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBuYW1lID0gJ2F0YW4yJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICdCaWdOdW1iZXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVBdGFuMiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wMyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA5ID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTA5KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTExID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTExKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG02LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTcuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGludmVyc2UgdGFuZ2VudCBmdW5jdGlvbiB3aXRoIHR3byBhcmd1bWVudHMsIHkveC5cbiAgICogQnkgcHJvdmlkaW5nIHR3byBhcmd1bWVudHMsIHRoZSByaWdodCBxdWFkcmFudCBvZiB0aGUgY29tcHV0ZWQgYW5nbGUgY2FuIGJlXG4gICAqIGRldGVybWluZWQuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hdGFuMih5LCB4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hdGFuMigyLCAyKSAvIG1hdGgucGkgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC4yNVxuICAgKlxuICAgKiAgICBjb25zdCBhbmdsZSA9IG1hdGgudW5pdCg2MCwgJ2RlZycpIC8vIHJldHVybnMgVW5pdCA2MCBkZWdcbiAgICogICAgY29uc3QgeCA9IG1hdGguY29zKGFuZ2xlKVxuICAgKiAgICBjb25zdCB5ID0gbWF0aC5zaW4oYW5nbGUpXG4gICAqXG4gICAqICAgIG1hdGguYXRhbigyKSAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggMS41NzA3OTYzMjY3OTQ4OTY2IC0xLjMxNjk1Nzg5NjkyNDgxNjYgaVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgdGFuLCBhdGFuLCBzaW4sIGNvc1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSB5ICBTZWNvbmQgZGltZW5zaW9uXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IHggIEZpcnN0IGRpbWVuc2lvblxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gRm91ci1xdWFkcmFudCBpbnZlcnNlIHRhbmdlbnRcbiAgICovXG5cbiAgdmFyIGF0YW4yID0gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IE1hdGguYXRhbjIsXG4gICAgLy8gQ29tcGxleCBudW1iZXJzIGRvZXNuJ3Qgc2VlbSB0byBoYXZlIGEgcmVhc29uYWJsZSBpbXBsZW1lbnRhdGlvbiBvZlxuICAgIC8vIGF0YW4yKCkuIEV2ZW4gTWF0bGFiIHJlbW92ZWQgdGhlIHN1cHBvcnQsIGFmdGVyIHRoZXkgb25seSBjYWxjdWxhdGVkXG4gICAgLy8gdGhlIGF0YW4gb25seSBvbiBiYXNlIG9mIHRoZSByZWFsIHBhcnQgb2YgdGhlIG51bWJlcnMgYW5kIGlnbm9yZWQgdGhlIGltYWdpbmFyeS5cbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeSwgeCkge1xuICAgICAgcmV0dXJuIEJpZ051bWJlci5hdGFuMih5LCB4KTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDkoeCwgeSwgYXRhbjIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gbWluZCB0aGUgb3JkZXIgb2YgeSBhbmQgeCFcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMih5LCB4LCBhdGFuMiwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBhdGFuMiwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGF0YW4yKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIHJldHVybiBhdGFuMihtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYXRhbjIobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgcmV0dXJuIGF0YW4yKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHgsIHksIGF0YW4yLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIERlbnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBhdGFuMiwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyU3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIG1pbmQgdGhlIG9yZGVyIG9mIHkgYW5kIHhcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBhdGFuMiwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIG1pbmQgdGhlIG9yZGVyIG9mIHkgYW5kIHhcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBhdGFuMiwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGF0YW4yLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgQXJyYXknOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJBcnJheSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBhdGFuMiwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhdGFuMjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBdGFuMiA9IGNyZWF0ZUF0YW4yOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBdGFuaCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2F0YW5oJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdDb21wbGV4J107XG52YXIgY3JlYXRlQXRhbmggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjdGFuZ2VudCBvZiBhIHZhbHVlLFxuICAgKiBkZWZpbmVkIGFzIGBhdGFuaCh4KSA9IGxuKCgxICsgeCkvKDEgLSB4KSkgLyAyYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmF0YW5oKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmF0YW5oKDAuNSkgICAgICAgLy8gcmV0dXJucyAwLjU0OTMwNjE0NDMzNDA1NDlcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGFjb3NoLCBhc2luaFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBIeXBlcmJvbGljIGFyY3RhbmdlbnQgb2YgeFxuICAgKi9cbiAgdmFyIGF0YW5oID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICh4IDw9IDEgJiYgeCA+PSAtMSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLmF0YW5oTnVtYmVyKSh4KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgsIDApLmF0YW5oKCk7XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmF0YW5oKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5hdGFuaCgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBhdGFuaCgwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYXRhbmgsIHRydWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhdGFuaDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBdGFuaCA9IGNyZWF0ZUF0YW5oOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb3MgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAnY29zJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQ29zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBjb3NpbmUgb2YgYSB2YWx1ZS5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNvcyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jb3MoMikgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTAuNDE2MTQ2ODM2NTQ3MTQyMlxuICAgKiAgICBtYXRoLmNvcyhtYXRoLnBpIC8gNCkgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAgMC43MDcxMDY3ODExODY1NDc1XG4gICAqICAgIG1hdGguY29zKG1hdGgudW5pdCgxODAsICdkZWcnKSkgIC8vIHJldHVybnMgbnVtYmVyIC0xXG4gICAqICAgIG1hdGguY29zKG1hdGgudW5pdCg2MCwgJ2RlZycpKSAgIC8vIHJldHVybnMgbnVtYmVyICAwLjVcbiAgICpcbiAgICogICAgY29uc3QgYW5nbGUgPSAwLjJcbiAgICogICAgbWF0aC5wb3cobWF0aC5zaW4oYW5nbGUpLCAyKSArIG1hdGgucG93KG1hdGguY29zKGFuZ2xlKSwgMikgLy8gcmV0dXJucyBudW1iZXIgfjFcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGNvcywgdGFuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBDb3NpbmUgb2YgeFxuICAgKi9cbiAgdmFyIGNvcyA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IE1hdGguY29zLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguY29zKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5jb3MoKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIGNvcyBpcyBubyBhbmdsZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29zKHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBjb3MpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjb3M7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ29zID0gY3JlYXRlQ29zOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb3NoID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnY29zaCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUNvc2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgY29zaW5lIG9mIGEgdmFsdWUsXG4gICAqIGRlZmluZWQgYXMgYGNvc2goeCkgPSAxLzIgKiAoZXhwKHgpICsgZXhwKC14KSlgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguY29zaCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jb3NoKDAuNSkgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMS4xMjc2MjU5NjUyMDYzODA3XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzaW5oLCB0YW5oXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBIeXBlcmJvbGljIGNvc2luZSBvZiB4XG4gICAqL1xuICB2YXIgY29zaCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuY29zaCxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmNvc2goKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmNvc2goKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIGNvc2ggaXMgbm8gYW5nbGUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvc2goeC52YWx1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGNvc2gpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjb3NoO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNvc2ggPSBjcmVhdGVDb3NoOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb3QgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdjb3QnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlQ290ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBjb3RhbmdlbnQgb2YgYSB2YWx1ZS4gRGVmaW5lZCBhcyBgY290KHgpID0gMSAvIHRhbih4KWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5jb3QoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguY290KDIpICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTAuNDU3NjU3NTU0MzYwMjg1NzdcbiAgICogICAgMSAvIG1hdGgudGFuKDIpICAvLyByZXR1cm5zIG51bWJlciAtMC40NTc2NTc1NTQzNjAyODU3N1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgdGFuLCBzZWMsIGNzY1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gQ290YW5nZW50IG9mIHhcbiAgICovXG4gIHZhciBjb3QgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmNvdE51bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmNvdCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKDEpLmRpdih4LnRhbigpKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIGNvdCBpcyBubyBhbmdsZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY290KHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBjb3QpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjb3Q7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ290ID0gY3JlYXRlQ290OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb3RoID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnY290aCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdCaWdOdW1iZXInXTtcbnZhciBjcmVhdGVDb3RoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGNvdGFuZ2VudCBvZiBhIHZhbHVlLFxuICAgKiBkZWZpbmVkIGFzIGBjb3RoKHgpID0gMSAvIHRhbmgoeClgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguY290aCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgLy8gY290aCh4KSA9IDEgLyB0YW5oKHgpXG4gICAqICAgIG1hdGguY290aCgyKSAgICAgICAgIC8vIHJldHVybnMgMS4wMzczMTQ3MjA3Mjc1NDgyXG4gICAqICAgIDEgLyBtYXRoLnRhbmgoMikgICAgIC8vIHJldHVybnMgMS4wMzczMTQ3MjA3Mjc1NDgyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzaW5oLCB0YW5oLCBjb3NoXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBIeXBlcmJvbGljIGNvdGFuZ2VudCBvZiB4XG4gICAqL1xuICB2YXIgY290aCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuY290aE51bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmNvdGgoKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcigxKS5kaXYoeC50YW5oKCkpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICBpZiAoIXguaGFzQmFzZSh4LmNvbnN0cnVjdG9yLkJBU0VfVU5JVFMuQU5HTEUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuaXQgaW4gZnVuY3Rpb24gY290aCBpcyBubyBhbmdsZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY290aCh4LnZhbHVlKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgY290aCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNvdGg7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ290aCA9IGNyZWF0ZUNvdGg7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNzYyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2NzYyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdCaWdOdW1iZXInXTtcbnZhciBjcmVhdGVDc2MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGNvc2VjYW50IG9mIGEgdmFsdWUsIGRlZmluZWQgYXMgYGNzYyh4KSA9IDEvc2luKHgpYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNzYyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jc2MoMikgICAgICAvLyByZXR1cm5zIG51bWJlciAxLjA5OTc1MDE3MDI5NDYxN1xuICAgKiAgICAxIC8gbWF0aC5zaW4oMikgIC8vIHJldHVybnMgbnVtYmVyIDEuMDk5NzUwMTcwMjk0NjE3XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzaW4sIHNlYywgY290XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBDb3NlY2FudCBvZiB4XG4gICAqL1xuICB2YXIgY3NjID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5jc2NOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5jc2MoKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcigxKS5kaXYoeC5zaW4oKSk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIGlmICgheC5oYXNCYXNlKHguY29uc3RydWN0b3IuQkFTRV9VTklUUy5BTkdMRSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5pdCBpbiBmdW5jdGlvbiBjc2MgaXMgbm8gYW5nbGUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNzYyh4LnZhbHVlKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgY3NjKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY3NjO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNzYyA9IGNyZWF0ZUNzYzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ3NjaCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2NzY2gnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlQ3NjaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBfQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBjb3NlY2FudCBvZiBhIHZhbHVlLFxuICAgKiBkZWZpbmVkIGFzIGBjc2NoKHgpID0gMSAvIHNpbmgoeClgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguY3NjaCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgLy8gY3NjaCh4KSA9IDEvIHNpbmgoeClcbiAgICogICAgbWF0aC5jc2NoKDAuNSkgICAgICAgLy8gcmV0dXJucyAxLjkxOTAzNDc1MTMzNDk0MzdcbiAgICogICAgMSAvIG1hdGguc2luaCgwLjUpICAgLy8gcmV0dXJucyAxLjkxOTAzNDc1MTMzNDk0MzdcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNpbmgsIHNlY2gsIGNvdGhcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgY29zZWNhbnQgb2YgeFxuICAgKi9cbiAgdmFyIGNzY2ggPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmNzY2hOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5jc2NoKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoMSkuZGl2KHguc2luaCgpKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIGNzY2ggaXMgbm8gYW5nbGUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNzY2goeC52YWx1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGNzY2gpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjc2NoO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNzY2ggPSBjcmVhdGVDc2NoOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZWMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdzZWMnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlU2VjID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBzZWNhbnQgb2YgYSB2YWx1ZSwgZGVmaW5lZCBhcyBgc2VjKHgpID0gMS9jb3MoeClgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2VjKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNlYygyKSAgICAgIC8vIHJldHVybnMgbnVtYmVyIC0yLjQwMjk5Nzk2MTcyMjM4MjJcbiAgICogICAgMSAvIG1hdGguY29zKDIpICAvLyByZXR1cm5zIG51bWJlciAtMi40MDI5OTc5NjE3MjIzODIyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb3MsIGNzYywgY290XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBTZWNhbnQgb2YgeFxuICAgKi9cbiAgdmFyIHNlYyA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuc2VjTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguc2VjKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoMSkuZGl2KHguY29zKCkpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICBpZiAoIXguaGFzQmFzZSh4LmNvbnN0cnVjdG9yLkJBU0VfVU5JVFMuQU5HTEUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuaXQgaW4gZnVuY3Rpb24gc2VjIGlzIG5vIGFuZ2xlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZWMoeC52YWx1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHNlYyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHNlYztcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZWMgPSBjcmVhdGVTZWM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNlY2ggPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdzZWNoJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0JpZ051bWJlciddO1xudmFyIGNyZWF0ZVNlY2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgc2VjYW50IG9mIGEgdmFsdWUsXG4gICAqIGRlZmluZWQgYXMgYHNlY2goeCkgPSAxIC8gY29zaCh4KWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zZWNoKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAvLyBzZWNoKHgpID0gMS8gY29zaCh4KVxuICAgKiAgICBtYXRoLnNlY2goMC41KSAgICAgICAvLyByZXR1cm5zIDAuODg2ODE4ODgzOTcwMDc0XG4gICAqICAgIDEgLyBtYXRoLmNvc2goMC41KSAgIC8vIHJldHVybnMgMC44ODY4MTg4ODM5NzAwNzRcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGNvc2gsIGNzY2gsIGNvdGhcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgc2VjYW50IG9mIHhcbiAgICovXG4gIHZhciBzZWNoID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5zZWNoTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguc2VjaCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKDEpLmRpdih4LmNvc2goKSk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIGlmICgheC5oYXNCYXNlKHguY29uc3RydWN0b3IuQkFTRV9VTklUUy5BTkdMRSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5pdCBpbiBmdW5jdGlvbiBzZWNoIGlzIG5vIGFuZ2xlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzZWNoKHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBzZWNoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc2VjaDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZWNoID0gY3JlYXRlU2VjaDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2luID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ3Npbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZVNpbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgc2luZSBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2luKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNpbigyKSAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAwLjkwOTI5NzQyNjgyNTY4MTNcbiAgICogICAgbWF0aC5zaW4obWF0aC5waSAvIDQpICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC43MDcxMDY3ODExODY1NDc1XG4gICAqICAgIG1hdGguc2luKG1hdGgudW5pdCg5MCwgJ2RlZycpKSAgIC8vIHJldHVybnMgbnVtYmVyIDFcbiAgICogICAgbWF0aC5zaW4obWF0aC51bml0KDMwLCAnZGVnJykpICAgLy8gcmV0dXJucyBudW1iZXIgMC41XG4gICAqXG4gICAqICAgIGNvbnN0IGFuZ2xlID0gMC4yXG4gICAqICAgIG1hdGgucG93KG1hdGguc2luKGFuZ2xlKSwgMikgKyBtYXRoLnBvdyhtYXRoLmNvcyhhbmdsZSksIDIpIC8vIHJldHVybnMgbnVtYmVyIH4xXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb3MsIHRhblxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gU2luZSBvZiB4XG4gICAqL1xuICB2YXIgc2luID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogTWF0aC5zaW4sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5zaW4oKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LnNpbigpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICBpZiAoIXguaGFzQmFzZSh4LmNvbnN0cnVjdG9yLkJBU0VfVU5JVFMuQU5HTEUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuaXQgaW4gZnVuY3Rpb24gc2luIGlzIG5vIGFuZ2xlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzaW4oeC52YWx1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIHNpbigwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgc2luLCB0cnVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc2luO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNpbiA9IGNyZWF0ZVNpbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2luaCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3NpbmgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVTaW5oID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIHNpbmUgb2YgYSB2YWx1ZSxcbiAgICogZGVmaW5lZCBhcyBgc2luaCh4KSA9IDEvMiAqIChleHAoeCkgLSBleHAoLXgpKWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zaW5oKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNpbmgoMC41KSAgICAgICAvLyByZXR1cm5zIG51bWJlciAwLjUyMTA5NTMwNTQ5Mzc0NzRcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGNvc2gsIHRhbmhcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgc2luZSBvZiB4XG4gICAqL1xuICB2YXIgc2luaCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuc2luaE51bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LnNpbmgoKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LnNpbmgoKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIHNpbmggaXMgbm8gYW5nbGUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNpbmgoeC52YWx1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIHNpbmgoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHNpbmgsIHRydWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzaW5oO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNpbmggPSBjcmVhdGVTaW5oOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVUYW4gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAndGFuJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlVGFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSB0YW5nZW50IG9mIGEgdmFsdWUuIGB0YW4oeClgIGlzIGVxdWFsIHRvIGBzaW4oeCkgLyBjb3MoeClgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgudGFuKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnRhbigwLjUpICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAwLjU0NjMwMjQ4OTg0Mzc5MDVcbiAgICogICAgbWF0aC5zaW4oMC41KSAvIG1hdGguY29zKDAuNSkgICAgLy8gcmV0dXJucyBudW1iZXIgMC41NDYzMDI0ODk4NDM3OTA1XG4gICAqICAgIG1hdGgudGFuKG1hdGgucGkgLyA0KSAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDFcbiAgICogICAgbWF0aC50YW4obWF0aC51bml0KDQ1LCAnZGVnJykpICAgLy8gcmV0dXJucyBudW1iZXIgMVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYXRhbiwgc2luLCBjb3NcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFRhbmdlbnQgb2YgeFxuICAgKi9cbiAgdmFyIHRhbiA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IE1hdGgudGFuLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHgudGFuKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC50YW4oKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIHRhbiBpcyBubyBhbmdsZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGFuKHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSB0YW4oMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHRhbiwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHRhbjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVUYW4gPSBjcmVhdGVUYW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVRhbmggPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICd0YW5oJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlVGFuaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mIGEgdmFsdWUsXG4gICAqIGRlZmluZWQgYXMgYHRhbmgoeCkgPSAoZXhwKDIgKiB4KSAtIDEpIC8gKGV4cCgyICogeCkgKyAxKWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC50YW5oKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAvLyB0YW5oKHgpID0gc2luaCh4KSAvIGNvc2goeCkgPSAxIC8gY290aCh4KVxuICAgKiAgICBtYXRoLnRhbmgoMC41KSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDAuNDYyMTE3MTU3MjYwMDA5NzRcbiAgICogICAgbWF0aC5zaW5oKDAuNSkgLyBtYXRoLmNvc2goMC41KSAgLy8gcmV0dXJucyAwLjQ2MjExNzE1NzI2MDAwOTc0XG4gICAqICAgIDEgLyBtYXRoLmNvdGgoMC41KSAgICAgICAgICAgICAgIC8vIHJldHVybnMgMC40NjIxMTcxNTcyNjAwMDk3NFxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2luaCwgY29zaCwgY290aFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gSHlwZXJib2xpYyB0YW5nZW50IG9mIHhcbiAgICovXG4gIHZhciB0YW5oID0gdHlwZWQoJ3RhbmgnLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLnRhbmgsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC50YW5oKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC50YW5oKCk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIGlmICgheC5oYXNCYXNlKHguY29uc3RydWN0b3IuQkFTRV9VTklUUy5BTkdMRSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5pdCBpbiBmdW5jdGlvbiB0YW5oIGlzIG5vIGFuZ2xlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0YW5oKHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSB0YW5oKDApID0gMFxuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCB0YW5oLCB0cnVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gdGFuaDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVUYW5oID0gY3JlYXRlVGFuaDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVG8gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgbmFtZSA9ICd0byc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnXTtcbnZhciBjcmVhdGVUbyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIENoYW5nZSB0aGUgdW5pdCBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgudG8oeCwgdW5pdClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgudG8obWF0aC51bml0KCcyIGluY2gnKSwgJ2NtJykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBVbml0IDUuMDggY21cbiAgICogICAgbWF0aC50byhtYXRoLnVuaXQoJzIgaW5jaCcpLCBtYXRoLnVuaXQobnVsbCwgJ2NtJykpICAvLyByZXR1cm5zIFVuaXQgNS4wOCBjbVxuICAgKiAgICBtYXRoLnRvKG1hdGgudW5pdCgxNiwgJ2J5dGVzJyksICdiaXRzJykgICAgICAgICAgICAgIC8vIHJldHVybnMgVW5pdCAxMjggYml0c1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgdW5pdFxuICAgKlxuICAgKiBAcGFyYW0ge1VuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgICAgVGhlIHVuaXQgdG8gYmUgY29udmVydGVkLlxuICAgKiBAcGFyYW0ge1VuaXQgfCBBcnJheSB8IE1hdHJpeH0gdW5pdCAgTmV3IHVuaXQuIENhbiBiZSBhIHN0cmluZyBsaWtlIFwiY21cIlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYSB1bml0IHdpdGhvdXQgdmFsdWUuXG4gICAqIEByZXR1cm4ge1VuaXQgfCBBcnJheSB8IE1hdHJpeH0gdmFsdWUgd2l0aCBjaGFuZ2VkLCBmaXhlZCB1bml0LlxuICAgKi9cblxuICB2YXIgdG8gPSB0eXBlZChuYW1lLCB7XG4gICAgJ1VuaXQsIFVuaXQgfCBzdHJpbmcnOiBmdW5jdGlvbiBVbml0VW5pdFN0cmluZyh4LCB1bml0KSB7XG4gICAgICByZXR1cm4geC50byh1bml0KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIE1hdHJpeCc6IGZ1bmN0aW9uIE1hdHJpeE1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBTcGFyc2VNYXRyaXggZG9lcyBub3Qgc3VwcG9ydCBVbml0c1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIHRvKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiB0byhtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gdG8obWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHRvKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBhbnknOiBmdW5jdGlvbiBNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgLy8gU3BhcnNlTWF0cml4IGRvZXMgbm90IHN1cHBvcnQgVW5pdHNcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCB0bywgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgTWF0cml4JzogZnVuY3Rpb24gYW55TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIFNwYXJzZU1hdHJpeCBkb2VzIG5vdCBzdXBwb3J0IFVuaXRzXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgdG8sIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCB0bywgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgdG8sIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gdG87XG59KTtcbmV4cG9ydHMuY3JlYXRlVG8gPSBjcmVhdGVUbzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ2xvbmUgPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2Nsb25lJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQ2xvbmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDbG9uZSBhbiBvYmplY3QuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguY2xvbmUoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguY2xvbmUoMy41KSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzLjVcbiAgICogICAgbWF0aC5jbG9uZShtYXRoLmNvbXBsZXgoJzItNGknKSAvLyByZXR1cm5zIENvbXBsZXggMiAtIDRpXG4gICAqICAgIG1hdGguY2xvbmUobWF0aC51bml0KDQ1LCAnZGVnJykpICAvLyByZXR1cm5zIFVuaXQgNDUgZGVnXG4gICAqICAgIG1hdGguY2xvbmUoW1sxLCAyXSwgWzMsIDRdXSkgICAgICAvLyByZXR1cm5zIEFycmF5IFtbMSwgMl0sIFszLCA0XV1cbiAgICogICAgbWF0aC5jbG9uZShcImhlbGxvIHdvcmxkXCIpICAgICAgICAgLy8gcmV0dXJucyBzdHJpbmcgXCJoZWxsbyB3b3JsZFwiXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0geCAgIE9iamVjdCB0byBiZSBjbG9uZWRcbiAgICogQHJldHVybiB7Kn0gQSBjbG9uZSBvZiBvYmplY3QgeFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICBhbnk6IF9vYmplY3QuY2xvbmVcbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ2xvbmUgPSBjcmVhdGVDbG9uZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSGFzTnVtZXJpY1ZhbHVlID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnaGFzTnVtZXJpY1ZhbHVlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2lzTnVtZXJpYyddO1xudmFyIGNyZWF0ZUhhc051bWVyaWNWYWx1ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBpc051bWVyaWMgPSBfcmVmLmlzTnVtZXJpYztcblxuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgYW4gbnVtZXJpYyB2YWx1ZS5cbiAgICpcbiAgICogSW4gY2FzZSBvZiBhIHN0cmluZywgdHJ1ZSBpcyByZXR1cm5lZCBpZiB0aGUgc3RyaW5nIGNvbnRhaW5zIGEgbnVtZXJpYyB2YWx1ZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5oYXNOdW1lcmljVmFsdWUoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguaGFzTnVtZXJpY1ZhbHVlKDIpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaGFzTnVtZXJpY1ZhbHVlKCcyJykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNOdW1lcmljKCcyJykgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmhhc051bWVyaWNWYWx1ZSgwKSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmhhc051bWVyaWNWYWx1ZShtYXRoLmJpZ251bWJlcig1MDApKSAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmhhc051bWVyaWNWYWx1ZShtYXRoLmZyYWN0aW9uKDQpKSAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmhhc051bWVyaWNWYWx1ZShtYXRoLmNvbXBsZXgoJzItNGknKSAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5oYXNOdW1lcmljVmFsdWUoWzIuMywgJ2ZvbycsIGZhbHNlXSkgICAvLyByZXR1cm5zIFt0cnVlLCBmYWxzZSwgdHJ1ZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGlzWmVybywgaXNQb3NpdGl2ZSwgaXNOZWdhdGl2ZSwgaXNJbnRlZ2VyLCBpc051bWVyaWNcbiAgICpcbiAgICogQHBhcmFtIHsqfSB4ICAgICAgIFZhbHVlIHRvIGJlIHRlc3RlZFxuICAgKiBAcmV0dXJuIHtib29sZWFufSAgUmV0dXJucyB0cnVlIHdoZW4gYHhgIGlzIGEgYG51bWJlcmAsIGBCaWdOdW1iZXJgLFxuICAgKiAgICAgICAgICAgICAgICAgICAgYEZyYWN0aW9uYCwgYEJvb2xlYW5gLCBvciBhIGBTdHJpbmdgIGNvbnRhaW5pbmcgbnVtYmVyLiBSZXR1cm5zIGZhbHNlIGZvciBvdGhlciB0eXBlcy5cbiAgICogICAgICAgICAgICAgICAgICAgIFRocm93cyBhbiBlcnJvciBpbiBjYXNlIG9mIHVua25vd24gdHlwZXMuXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHtcbiAgICAgIHJldHVybiB4LnRyaW0oKS5sZW5ndGggPiAwICYmICFpc05hTihOdW1iZXIoeCkpO1xuICAgIH0sXG4gICAgYW55OiBmdW5jdGlvbiBhbnkoeCkge1xuICAgICAgcmV0dXJuIGlzTnVtZXJpYyh4KTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUhhc051bWVyaWNWYWx1ZSA9IGNyZWF0ZUhhc051bWVyaWNWYWx1ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSXNJbnRlZ2VyID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnaXNJbnRlZ2VyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlSXNJbnRlZ2VyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgYW4gaW50ZWdlciBudW1iZXIuXG4gICAqIFRoZSBmdW5jdGlvbiBzdXBwb3J0cyBgbnVtYmVyYCwgYEJpZ051bWJlcmAsIGFuZCBgRnJhY3Rpb25gLlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQtd2lzZSBpbiBjYXNlIG9mIEFycmF5IG9yIE1hdHJpeCBpbnB1dC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5pc0ludGVnZXIoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguaXNJbnRlZ2VyKDIpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNJbnRlZ2VyKDApICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNJbnRlZ2VyKDAuNSkgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzSW50ZWdlcihtYXRoLmJpZ251bWJlcig1MDApKSAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzSW50ZWdlcihtYXRoLmZyYWN0aW9uKDQpKSAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzSW50ZWdlcignMycpICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzSW50ZWdlcihbMywgMC41LCAtMl0pICAgICAgICAgIC8vIHJldHVybnMgW3RydWUsIGZhbHNlLCB0cnVlXVxuICAgKiAgICBtYXRoLmlzSW50ZWdlcihtYXRoLmNvbXBsZXgoJzItNGknKSAgIC8vIHRocm93cyBhbiBlcnJvclxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgaXNOdW1lcmljLCBpc1Bvc2l0aXZlLCBpc05lZ2F0aXZlLCBpc1plcm9cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IEFycmF5IHwgTWF0cml4fSB4ICAgVmFsdWUgdG8gYmUgdGVzdGVkXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59ICBSZXR1cm5zIHRydWUgd2hlbiBgeGAgY29udGFpbnMgYSBudW1lcmljLCBpbnRlZ2VyIHZhbHVlLlxuICAgKiAgICAgICAgICAgICAgICAgICAgVGhyb3dzIGFuIGVycm9yIGluIGNhc2Ugb2YgYW4gdW5rbm93biBkYXRhIHR5cGUuXG4gICAqL1xuICB2YXIgaXNJbnRlZ2VyID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5pc0ludGVnZXIsXG4gICAgLy8gVE9ETzogd2hhdCB0byBkbyB3aXRoIGlzSW50ZWdlcihhZGQoMC4xLCAwLjIpKSAgP1xuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmlzSW50KCk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHguZCA9PT0gMSAmJiBpc0Zpbml0ZSh4Lm4pO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBpc0ludGVnZXIpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpc0ludGVnZXI7XG59KTtcbmV4cG9ydHMuY3JlYXRlSXNJbnRlZ2VyID0gY3JlYXRlSXNJbnRlZ2VyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJc05hTiA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2lzTmFOJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlSXNOYU4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBOYU4gKG5vdCBhIG51bWJlcikuXG4gICAqIFRoZSBmdW5jdGlvbiBzdXBwb3J0cyB0eXBlcyBgbnVtYmVyYCwgYEJpZ051bWJlcmAsIGBGcmFjdGlvbmAsIGBVbml0YCBhbmQgYENvbXBsZXhgLlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQtd2lzZSBpbiBjYXNlIG9mIEFycmF5IG9yIE1hdHJpeCBpbnB1dC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5pc05hTih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5pc05hTigzKSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc05hTihOYU4pICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzTmFOKDApICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzTmFOKG1hdGguYmlnbnVtYmVyKE5hTikpICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNOYU4obWF0aC5iaWdudW1iZXIoMCkpICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNOYU4obWF0aC5mcmFjdGlvbigtMiwgNSkpICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNOYU4oJy0yJykgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNOYU4oWzIsIDAsIC0zLCBOYU5dJykgICAgICAvLyByZXR1cm5zIFtmYWxzZSwgZmFsc2UsIGZhbHNlLCB0cnVlXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgaXNOdW1lcmljLCBpc05lZ2F0aXZlLCBpc1Bvc2l0aXZlLCBpc1plcm8sIGlzSW50ZWdlclxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBWYWx1ZSB0byBiZSB0ZXN0ZWRcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gIFJldHVybnMgdHJ1ZSB3aGVuIGB4YCBpcyBOYU4uXG4gICAqICAgICAgICAgICAgICAgICAgICBUaHJvd3MgYW4gZXJyb3IgaW4gY2FzZSBvZiBhbiB1bmtub3duIGRhdGEgdHlwZS5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmlzTmFOTnVtYmVyLFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmlzTmFOKCk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5pc05hTigpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4gTnVtYmVyLmlzTmFOKHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBOdW1iZXIuaXNOYU4pO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlSXNOYU4gPSBjcmVhdGVJc05hTjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSXNOZWdhdGl2ZSA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2lzTmVnYXRpdmUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVJc05lZ2F0aXZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgbmVnYXRpdmU6IHNtYWxsZXIgdGhhbiB6ZXJvLlxuICAgKiBUaGUgZnVuY3Rpb24gc3VwcG9ydHMgdHlwZXMgYG51bWJlcmAsIGBCaWdOdW1iZXJgLCBgRnJhY3Rpb25gLCBhbmQgYFVuaXRgLlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQtd2lzZSBpbiBjYXNlIG9mIEFycmF5IG9yIE1hdHJpeCBpbnB1dC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5pc05lZ2F0aXZlKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmlzTmVnYXRpdmUoMykgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNOZWdhdGl2ZSgtMikgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzTmVnYXRpdmUoMCkgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNOZWdhdGl2ZSgtMCkgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc05lZ2F0aXZlKG1hdGguYmlnbnVtYmVyKDIpKSAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzTmVnYXRpdmUobWF0aC5mcmFjdGlvbigtMiwgNSkpICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc05lZ2F0aXZlKCctMicpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNOZWdhdGl2ZShbMiwgMCwgLTNdJykgICAgICAgICAgIC8vIHJldHVybnMgW2ZhbHNlLCBmYWxzZSwgdHJ1ZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGlzTnVtZXJpYywgaXNQb3NpdGl2ZSwgaXNaZXJvLCBpc0ludGVnZXJcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgVmFsdWUgdG8gYmUgdGVzdGVkXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59ICBSZXR1cm5zIHRydWUgd2hlbiBgeGAgaXMgbGFyZ2VyIHRoYW4gemVyby5cbiAgICogICAgICAgICAgICAgICAgICAgIFRocm93cyBhbiBlcnJvciBpbiBjYXNlIG9mIGFuIHVua25vd24gZGF0YSB0eXBlLlxuICAgKi9cbiAgdmFyIGlzTmVnYXRpdmUgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmlzTmVnYXRpdmVOdW1iZXIsXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguaXNOZWcoKSAmJiAheC5pc1plcm8oKSAmJiAheC5pc05hTigpO1xuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4LnMgPCAwOyAvLyBJdCdzIGVub3VnaCB0byBkZWNpZGUgb24gdGhlIHNpZ25cbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgcmV0dXJuIGlzTmVnYXRpdmUoeC52YWx1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGlzTmVnYXRpdmUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpc05lZ2F0aXZlO1xufSk7XG5leHBvcnRzLmNyZWF0ZUlzTmVnYXRpdmUgPSBjcmVhdGVJc05lZ2F0aXZlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJc051bWVyaWMgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnaXNOdW1lcmljJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlSXNOdW1lcmljID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgYW4gbnVtZXJpYyB2YWx1ZS5cbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50LXdpc2UgaW4gY2FzZSBvZiBBcnJheSBvciBNYXRyaXggaW5wdXQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguaXNOdW1lcmljKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmlzTnVtZXJpYygyKSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzTnVtZXJpYygnMicpICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5oYXNOdW1lcmljVmFsdWUoJzInKSAgICAgICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc051bWVyaWMoMCkgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc051bWVyaWMobWF0aC5iaWdudW1iZXIoNTAwKSkgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc051bWVyaWMobWF0aC5mcmFjdGlvbig0KSkgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc051bWVyaWMobWF0aC5jb21wbGV4KCcyLTRpJykgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNOdW1lcmljKFsyLjMsICdmb28nLCBmYWxzZV0pICAgLy8gcmV0dXJucyBbdHJ1ZSwgZmFsc2UsIHRydWVdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBpc1plcm8sIGlzUG9zaXRpdmUsIGlzTmVnYXRpdmUsIGlzSW50ZWdlciwgaGFzTnVtZXJpY1ZhbHVlXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0geCAgICAgICBWYWx1ZSB0byBiZSB0ZXN0ZWRcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gIFJldHVybnMgdHJ1ZSB3aGVuIGB4YCBpcyBhIGBudW1iZXJgLCBgQmlnTnVtYmVyYCxcbiAgICogICAgICAgICAgICAgICAgICAgIGBGcmFjdGlvbmAsIG9yIGBib29sZWFuYC4gUmV0dXJucyBmYWxzZSBmb3Igb3RoZXIgdHlwZXMuXG4gICAqICAgICAgICAgICAgICAgICAgICBUaHJvd3MgYW4gZXJyb3IgaW4gY2FzZSBvZiB1bmtub3duIHR5cGVzLlxuICAgKi9cbiAgdmFyIGlzTnVtZXJpYyA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyRnJhY3Rpb25Cb29sZWFuKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICAnQ29tcGxleCB8IFVuaXQgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkIHwgTm9kZSc6IGZ1bmN0aW9uIENvbXBsZXhVbml0U3RyaW5nTnVsbFVuZGVmaW5lZE5vZGUoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGlzTnVtZXJpYyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzTnVtZXJpYztcbn0pO1xuZXhwb3J0cy5jcmVhdGVJc051bWVyaWMgPSBjcmVhdGVJc051bWVyaWM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUlzUG9zaXRpdmUgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdpc1Bvc2l0aXZlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlSXNQb3NpdGl2ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciBhIHZhbHVlIGlzIHBvc2l0aXZlOiBsYXJnZXIgdGhhbiB6ZXJvLlxuICAgKiBUaGUgZnVuY3Rpb24gc3VwcG9ydHMgdHlwZXMgYG51bWJlcmAsIGBCaWdOdW1iZXJgLCBgRnJhY3Rpb25gLCBhbmQgYFVuaXRgLlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQtd2lzZSBpbiBjYXNlIG9mIEFycmF5IG9yIE1hdHJpeCBpbnB1dC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5pc1Bvc2l0aXZlKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmlzUG9zaXRpdmUoMykgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc1Bvc2l0aXZlKC0yKSAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzUG9zaXRpdmUoMCkgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNQb3NpdGl2ZSgtMCkgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc1Bvc2l0aXZlKDAuNSkgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNQb3NpdGl2ZShtYXRoLmJpZ251bWJlcigyKSkgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzUG9zaXRpdmUobWF0aC5mcmFjdGlvbigtMiwgNSkpICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNQb3NpdGl2ZShtYXRoLmZyYWN0aW9uKDEsMykpICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc1Bvc2l0aXZlKCcyJykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNQb3NpdGl2ZShbMiwgMCwgLTNdKSAgICAgICAgICAgIC8vIHJldHVybnMgW3RydWUsIGZhbHNlLCBmYWxzZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGlzTnVtZXJpYywgaXNaZXJvLCBpc05lZ2F0aXZlLCBpc0ludGVnZXJcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgVmFsdWUgdG8gYmUgdGVzdGVkXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59ICBSZXR1cm5zIHRydWUgd2hlbiBgeGAgaXMgbGFyZ2VyIHRoYW4gemVyby5cbiAgICogICAgICAgICAgICAgICAgICAgIFRocm93cyBhbiBlcnJvciBpbiBjYXNlIG9mIGFuIHVua25vd24gZGF0YSB0eXBlLlxuICAgKi9cbiAgdmFyIGlzUG9zaXRpdmUgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmlzUG9zaXRpdmVOdW1iZXIsXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuICF4LmlzTmVnKCkgJiYgIXguaXNaZXJvKCkgJiYgIXguaXNOYU4oKTtcbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4geC5zID4gMCAmJiB4Lm4gPiAwO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4gaXNQb3NpdGl2ZSh4LnZhbHVlKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgaXNQb3NpdGl2ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzUG9zaXRpdmU7XG59KTtcbmV4cG9ydHMuY3JlYXRlSXNQb3NpdGl2ZSA9IGNyZWF0ZUlzUG9zaXRpdmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUlzUHJpbWUgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnaXNQcmltZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUlzUHJpbWUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBwcmltZTogaGFzIG5vIGRpdmlzb3JzIG90aGVyIHRoYW4gaXRzZWxmIGFuZCBvbmUuXG4gICAqIFRoZSBmdW5jdGlvbiBzdXBwb3J0cyB0eXBlIGBudW1iZXJgLCBgYmlnbnVtYmVyYC5cbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50LXdpc2UgaW4gY2FzZSBvZiBBcnJheSBvciBNYXRyaXggaW5wdXQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguaXNQcmltZSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5pc1ByaW1lKDMpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNQcmltZSgtMikgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc1ByaW1lKDApICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzUHJpbWUoLTApICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNQcmltZSgwLjUpICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc1ByaW1lKCcyJykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNQcmltZShbMiwgMTcsIDEwMF0pICAgICAgICAgICAvLyByZXR1cm5zIFt0cnVlLCB0cnVlLCBmYWxzZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGlzTnVtZXJpYywgaXNaZXJvLCBpc05lZ2F0aXZlLCBpc0ludGVnZXJcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geCAgVmFsdWUgdG8gYmUgdGVzdGVkXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59ICBSZXR1cm5zIHRydWUgd2hlbiBgeGAgaXMgbGFyZ2VyIHRoYW4gemVyby5cbiAgICogICAgICAgICAgICAgICAgICAgIFRocm93cyBhbiBlcnJvciBpbiBjYXNlIG9mIGFuIHVua25vd24gZGF0YSB0eXBlLlxuICAgKi9cbiAgdmFyIGlzUHJpbWUgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgaWYgKHggKiAwICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKHggPD0gMykge1xuICAgICAgICByZXR1cm4geCA+IDE7XG4gICAgICB9XG5cbiAgICAgIGlmICh4ICUgMiA9PT0gMCB8fCB4ICUgMyA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSA1OyBpICogaSA8PSB4OyBpICs9IDYpIHtcbiAgICAgICAgaWYgKHggJSBpID09PSAwIHx8IHggJSAoaSArIDIpID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIobikge1xuICAgICAgaWYgKG4udG9OdW1iZXIoKSAqIDAgIT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAobi5sdGUoMykpIHJldHVybiBuLmd0KDEpO1xuICAgICAgaWYgKG4ubW9kKDIpLmVxKDApIHx8IG4ubW9kKDMpLmVxKDApKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgIGZvciAodmFyIGkgPSA1OyBuLmd0ZShpICogaSk7IGkgKz0gNikge1xuICAgICAgICBpZiAobi5tb2QoaSkuZXEoMCkgfHwgbi5tb2QoaSArIDIpLmVxKDApKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBpc1ByaW1lKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaXNQcmltZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVJc1ByaW1lID0gY3JlYXRlSXNQcmltZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSXNaZXJvID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnaXNaZXJvJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlSXNaZXJvID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgemVyby5cbiAgICogVGhlIGZ1bmN0aW9uIGNhbiBjaGVjayBmb3IgemVybyBmb3IgdHlwZXMgYG51bWJlcmAsIGBCaWdOdW1iZXJgLCBgRnJhY3Rpb25gLFxuICAgKiBgQ29tcGxleGAsIGFuZCBgVW5pdGAuXG4gICAqXG4gICAqIFRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudC13aXNlIGluIGNhc2Ugb2YgQXJyYXkgb3IgTWF0cml4IGlucHV0LlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmlzWmVybyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5pc1plcm8oMCkgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc1plcm8oMikgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNaZXJvKDAuNSkgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzWmVybyhtYXRoLmJpZ251bWJlcigwKSkgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzWmVybyhtYXRoLmZyYWN0aW9uKDApKSAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzWmVybyhtYXRoLmZyYWN0aW9uKDEsMykpICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc1plcm8obWF0aC5jb21wbGV4KCcyIC0gNGknKSAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNaZXJvKG1hdGguY29tcGxleCgnMGknKSAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNaZXJvKCcwJykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNaZXJvKCcyJykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzWmVybyhbMiwgMCwgLTNdJykgICAgICAgICAgIC8vIHJldHVybnMgW2ZhbHNlLCB0cnVlLCBmYWxzZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGlzTnVtZXJpYywgaXNQb3NpdGl2ZSwgaXNOZWdhdGl2ZSwgaXNJbnRlZ2VyXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEZyYWN0aW9uIHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICAgICAgIFZhbHVlIHRvIGJlIHRlc3RlZFxuICAgKiBAcmV0dXJuIHtib29sZWFufSAgUmV0dXJucyB0cnVlIHdoZW4gYHhgIGlzIHplcm8uXG4gICAqICAgICAgICAgICAgICAgICAgICBUaHJvd3MgYW4gZXJyb3IgaW4gY2FzZSBvZiBhbiB1bmtub3duIGRhdGEgdHlwZS5cbiAgICovXG4gIHZhciBpc1plcm8gPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmlzWmVyb051bWJlcixcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5pc1plcm8oKTtcbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHgucmUgPT09IDAgJiYgeC5pbSA9PT0gMDtcbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4geC5kID09PSAxICYmIHgubiA9PT0gMDtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgcmV0dXJuIGlzWmVybyh4LnZhbHVlKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgaXNaZXJvKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaXNaZXJvO1xufSk7XG5leHBvcnRzLmNyZWF0ZUlzWmVybyA9IGNyZWF0ZUlzWmVybzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTnVtZXJpYyA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbm9vcCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9ub29wXCIpO1xuXG52YXIgbmFtZSA9ICdudW1lcmljJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ251bWJlcicsICc/YmlnbnVtYmVyJywgJz9mcmFjdGlvbiddO1xudmFyIGNyZWF0ZU51bWVyaWMgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgX251bWJlciA9IF9yZWYubnVtYmVyLFxuICAgICAgYmlnbnVtYmVyID0gX3JlZi5iaWdudW1iZXIsXG4gICAgICBmcmFjdGlvbiA9IF9yZWYuZnJhY3Rpb247XG4gIHZhciB2YWxpZElucHV0VHlwZXMgPSB7XG4gICAgc3RyaW5nOiB0cnVlLFxuICAgIG51bWJlcjogdHJ1ZSxcbiAgICBCaWdOdW1iZXI6IHRydWUsXG4gICAgRnJhY3Rpb246IHRydWVcbiAgfTsgLy8gTG9hZCB0aGUgY29udmVyc2lvbiBmdW5jdGlvbnMgZm9yIGVhY2ggb3V0cHV0IHR5cGVcblxuICB2YXIgdmFsaWRPdXRwdXRUeXBlcyA9IHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4gX251bWJlcih4KTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogYmlnbnVtYmVyID8gZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBiaWdudW1iZXIoeCk7XG4gICAgfSA6IF9ub29wLm5vQmlnbnVtYmVyLFxuICAgIEZyYWN0aW9uOiBmcmFjdGlvbiA/IGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gZnJhY3Rpb24oeCk7XG4gICAgfSA6IF9ub29wLm5vRnJhY3Rpb25cbiAgfTtcbiAgLyoqXG4gICAqIENvbnZlcnQgYSBudW1lcmljIGlucHV0IHRvIGEgc3BlY2lmaWMgbnVtZXJpYyB0eXBlOiBudW1iZXIsIEJpZ051bWJlciwgb3IgRnJhY3Rpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5udW1lcmljKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLm51bWVyaWMoJzQnKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDRcbiAgICogICAgbWF0aC5udW1lcmljKCc0JywgJ251bWJlcicpICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA0XG4gICAqICAgIG1hdGgubnVtZXJpYygnNCcsICdCaWdOdW1iZXInKSAgICAgICAgICAgICAgLy8gcmV0dXJucyBCaWdOdW1iZXIgNFxuICAgKiAgICBtYXRoLm51bWVyaWMoJzQnLCAnRnJhY3Rpb24nKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgRnJhY3Rpb24gNFxuICAgKiAgICBtYXRoLm51bWVyaWMoNCwgJ0ZyYWN0aW9uJykgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgRnJhY3Rpb24gNFxuICAgKiAgICBtYXRoLm51bWVyaWMobWF0aC5mcmFjdGlvbigyLCA1KSwgJ251bWJlcicpIC8vIHJldHVybnMgbnVtYmVyIDAuNFxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbnVtYmVyLCBmcmFjdGlvbiwgYmlnbnVtYmVyLCBzdHJpbmcsIGZvcm1hdFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIH0gdmFsdWVcbiAgICogICAgICAgICAgICAgIEEgbnVtZXJpYyB2YWx1ZSBvciBhIHN0cmluZyBjb250YWluaW5nIGEgbnVtZXJpYyB2YWx1ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3V0cHV0VHlwZVxuICAgKiAgICAgICAgICAgICAgRGVzaXJlZCBudW1lcmljIG91dHB1dCB0eXBlLlxuICAgKiAgICAgICAgICAgICAgQXZhaWxhYmxlIHZhbHVlczogJ251bWJlcicsICdCaWdOdW1iZXInLCBvciAnRnJhY3Rpb24nXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9ufVxuICAgKiAgICAgICAgICAgICAgUmV0dXJucyBhbiBpbnN0YW5jZSBvZiB0aGUgbnVtZXJpYyBpbiB0aGUgcmVxdWVzdGVkIHR5cGVcbiAgICovXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIG51bWVyaWModmFsdWUsIG91dHB1dFR5cGUpIHtcbiAgICB2YXIgaW5wdXRUeXBlID0gKDAsIF9pcy50eXBlT2YpKHZhbHVlKTtcblxuICAgIGlmICghKGlucHV0VHlwZSBpbiB2YWxpZElucHV0VHlwZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY29udmVydCAnICsgdmFsdWUgKyAnIG9mIHR5cGUgXCInICsgaW5wdXRUeXBlICsgJ1wiOyB2YWxpZCBpbnB1dCB0eXBlcyBhcmUgJyArIE9iamVjdC5rZXlzKHZhbGlkSW5wdXRUeXBlcykuam9pbignLCAnKSk7XG4gICAgfVxuXG4gICAgaWYgKCEob3V0cHV0VHlwZSBpbiB2YWxpZE91dHB1dFR5cGVzKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgJyArIHZhbHVlICsgJyB0byB0eXBlIFwiJyArIG91dHB1dFR5cGUgKyAnXCI7IHZhbGlkIG91dHB1dCB0eXBlcyBhcmUgJyArIE9iamVjdC5rZXlzKHZhbGlkT3V0cHV0VHlwZXMpLmpvaW4oJywgJykpO1xuICAgIH1cblxuICAgIGlmIChvdXRwdXRUeXBlID09PSBpbnB1dFR5cGUpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHZhbGlkT3V0cHV0VHlwZXNbb3V0cHV0VHlwZV0odmFsdWUpO1xuICAgIH1cbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVOdW1lcmljID0gY3JlYXRlTnVtZXJpYzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRGVwcmVjYXRlZFR5cGVvZiA9IGV4cG9ydHMuY3JlYXRlVHlwZU9mID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9sb2cgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbG9nXCIpO1xuXG52YXIgbmFtZSA9ICd0eXBlT2YnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVUeXBlT2YgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIHR5cGUgb2YgYSB2YXJpYWJsZS5cbiAgICpcbiAgICogRnVuY3Rpb24gYHR5cGVPZmAgcmVjb2duaXplcyB0aGUgZm9sbG93aW5nIHR5cGVzIG9mIG9iamVjdHM6XG4gICAqXG4gICAqIE9iamVjdCAgICAgICAgICAgICAgICAgfCBSZXR1cm5zICAgICAgIHwgRXhhbXBsZVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBudWxsICAgICAgICAgICAgICAgICAgIHwgYCdudWxsJ2AgICAgICB8IGBtYXRoLnR5cGVPZihudWxsKWBcbiAgICogbnVtYmVyICAgICAgICAgICAgICAgICB8IGAnbnVtYmVyJ2AgICAgfCBgbWF0aC50eXBlT2YoMy41KWBcbiAgICogYm9vbGVhbiAgICAgICAgICAgICAgICB8IGAnYm9vbGVhbidgICAgfCBgbWF0aC50eXBlT2YodHJ1ZSlgXG4gICAqIHN0cmluZyAgICAgICAgICAgICAgICAgfCBgJ3N0cmluZydgICAgIHwgYG1hdGgudHlwZU9mKCdoZWxsbyB3b3JsZCcpYFxuICAgKiBBcnJheSAgICAgICAgICAgICAgICAgIHwgYCdBcnJheSdgICAgICB8IGBtYXRoLnR5cGVPZihbMSwgMiwgM10pYFxuICAgKiBEYXRlICAgICAgICAgICAgICAgICAgIHwgYCdEYXRlJ2AgICAgICB8IGBtYXRoLnR5cGVPZihuZXcgRGF0ZSgpKWBcbiAgICogRnVuY3Rpb24gICAgICAgICAgICAgICB8IGAnRnVuY3Rpb24nYCAgfCBgbWF0aC50eXBlT2YoZnVuY3Rpb24gKCkge30pYFxuICAgKiBPYmplY3QgICAgICAgICAgICAgICAgIHwgYCdPYmplY3QnYCAgICB8IGBtYXRoLnR5cGVPZih7YTogMiwgYjogM30pYFxuICAgKiBSZWdFeHAgICAgICAgICAgICAgICAgIHwgYCdSZWdFeHAnYCAgICB8IGBtYXRoLnR5cGVPZigvYSByZWdleHAvKWBcbiAgICogdW5kZWZpbmVkICAgICAgICAgICAgICB8IGAndW5kZWZpbmVkJ2AgfCBgbWF0aC50eXBlT2YodW5kZWZpbmVkKWBcbiAgICogbWF0aC5CaWdOdW1iZXIgICAgICAgICB8IGAnQmlnTnVtYmVyJ2AgfCBgbWF0aC50eXBlT2YobWF0aC5iaWdudW1iZXIoJzIuM2U1MDAnKSlgXG4gICAqIG1hdGguQ2hhaW4gICAgICAgICAgICAgfCBgJ0NoYWluJ2AgICAgIHwgYG1hdGgudHlwZU9mKG1hdGguY2hhaW4oMikpYFxuICAgKiBtYXRoLkNvbXBsZXggICAgICAgICAgIHwgYCdDb21wbGV4J2AgICB8IGBtYXRoLnR5cGVPZihtYXRoLmNvbXBsZXgoMiwgMykpYFxuICAgKiBtYXRoLkZyYWN0aW9uICAgICAgICAgIHwgYCdGcmFjdGlvbidgICB8IGBtYXRoLnR5cGVPZihtYXRoLmZyYWN0aW9uKDEsIDMpKWBcbiAgICogbWF0aC5IZWxwICAgICAgICAgICAgICB8IGAnSGVscCdgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5oZWxwKCdzcXJ0JykpYFxuICAgKiBtYXRoLkhlbHAgICAgICAgICAgICAgIHwgYCdIZWxwJ2AgICAgICB8IGBtYXRoLnR5cGVPZihtYXRoLmhlbHAoJ3NxcnQnKSlgXG4gICAqIG1hdGguSW5kZXggICAgICAgICAgICAgfCBgJ0luZGV4J2AgICAgIHwgYG1hdGgudHlwZU9mKG1hdGguaW5kZXgoMSwgMykpYFxuICAgKiBtYXRoLk1hdHJpeCAgICAgICAgICAgIHwgYCdNYXRyaXgnYCAgICB8IGBtYXRoLnR5cGVPZihtYXRoLm1hdHJpeChbWzEsMl0sIFszLCA0XV0pKWBcbiAgICogbWF0aC5SYW5nZSAgICAgICAgICAgICB8IGAnUmFuZ2UnYCAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5yYW5nZSgwLCAxMCkpYFxuICAgKiBtYXRoLlJlc3VsdFNldCAgICAgICAgIHwgYCdSZXN1bHRTZXQnYCB8IGBtYXRoLnR5cGVPZihtYXRoLmV2YWx1YXRlKCdhPTJcXG5iPTMnKSlgXG4gICAqIG1hdGguVW5pdCAgICAgICAgICAgICAgfCBgJ1VuaXQnYCAgICAgIHwgYG1hdGgudHlwZU9mKG1hdGgudW5pdCgnNDUgZGVnJykpYFxuICAgKiBtYXRoLkFjY2Vzc29yTm9kZSAgICAgICAgICAgIHwgYCdBY2Nlc3Nvck5vZGUnYCAgICAgICAgICAgIHwgYG1hdGgudHlwZU9mKG1hdGgucGFyc2UoJ0FbMl0nKSlgXG4gICAqIG1hdGguQXJyYXlOb2RlICAgICAgICAgICAgICAgfCBgJ0FycmF5Tm9kZSdgICAgICAgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgnWzEsMiwzXScpKWBcbiAgICogbWF0aC5Bc3NpZ25tZW50Tm9kZSAgICAgICAgICB8IGAnQXNzaWdubWVudE5vZGUnYCAgICAgICAgICB8IGBtYXRoLnR5cGVPZihtYXRoLnBhcnNlKCd4PTInKSlgXG4gICAqIG1hdGguQmxvY2tOb2RlICAgICAgICAgICAgICAgfCBgJ0Jsb2NrTm9kZSdgICAgICAgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgnYT0yOyBiPTMnKSlgXG4gICAqIG1hdGguQ29uZGl0aW9uYWxOb2RlICAgICAgICAgfCBgJ0NvbmRpdGlvbmFsTm9kZSdgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgneDwwID8gLXggOiB4JykpYFxuICAgKiBtYXRoLkNvbnN0YW50Tm9kZSAgICAgICAgICAgIHwgYCdDb25zdGFudE5vZGUnYCAgICAgICAgICAgIHwgYG1hdGgudHlwZU9mKG1hdGgucGFyc2UoJzIuMycpKWBcbiAgICogbWF0aC5GdW5jdGlvbkFzc2lnbm1lbnROb2RlICB8IGAnRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSdgICB8IGBtYXRoLnR5cGVPZihtYXRoLnBhcnNlKCdmKHgpPXheMicpKWBcbiAgICogbWF0aC5GdW5jdGlvbk5vZGUgICAgICAgICAgICB8IGAnRnVuY3Rpb25Ob2RlJ2AgICAgICAgICAgICB8IGBtYXRoLnR5cGVPZihtYXRoLnBhcnNlKCdzcXJ0KDQpJykpYFxuICAgKiBtYXRoLkluZGV4Tm9kZSAgICAgICAgICAgICAgIHwgYCdJbmRleE5vZGUnYCAgICAgICAgICAgICAgIHwgYG1hdGgudHlwZU9mKG1hdGgucGFyc2UoJ0FbMl0nKS5pbmRleClgXG4gICAqIG1hdGguT2JqZWN0Tm9kZSAgICAgICAgICAgICAgfCBgJ09iamVjdE5vZGUnYCAgICAgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgne2E6Mn0nKSlgXG4gICAqIG1hdGguUGFyZW50aGVzaXNOb2RlICAgICAgICAgfCBgJ1BhcmVudGhlc2lzTm9kZSdgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgnKDIrMyknKSlgXG4gICAqIG1hdGguUmFuZ2VOb2RlICAgICAgICAgICAgICAgfCBgJ1JhbmdlTm9kZSdgICAgICAgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgnMToxMCcpKWBcbiAgICogbWF0aC5TeW1ib2xOb2RlICAgICAgICAgICAgICB8IGAnU3ltYm9sTm9kZSdgICAgICAgICAgICAgICB8IGBtYXRoLnR5cGVPZihtYXRoLnBhcnNlKCd4JykpYFxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgudHlwZU9mKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnR5cGVPZigzLjUpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAnbnVtYmVyJ1xuICAgKiAgICBtYXRoLnR5cGVPZihtYXRoLmNvbXBsZXgoJzItNGknKSkgICAgLy8gcmV0dXJucyAnQ29tcGxleCdcbiAgICogICAgbWF0aC50eXBlT2YobWF0aC51bml0KCc0NSBkZWcnKSkgICAgIC8vIHJldHVybnMgJ1VuaXQnXG4gICAqICAgIG1hdGgudHlwZU9mKCdoZWxsbyB3b3JsZCcpICAgICAgICAgICAvLyByZXR1cm5zICdzdHJpbmcnXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0geCAgICAgVGhlIHZhcmlhYmxlIGZvciB3aGljaCB0byB0ZXN0IHRoZSB0eXBlLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHR5cGUuIFByaW1pdGl2ZSB0eXBlcyBhcmUgbG93ZXIgY2FzZSxcbiAgICogICAgICAgICAgICAgICAgICBub24tcHJpbWl0aXZlIHR5cGVzIGFyZSB1cHBlci1jYW1lbC1jYXNlLlxuICAgKiAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlICdudW1iZXInLCAnc3RyaW5nJywgJ0FycmF5JywgJ0RhdGUnLlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICBhbnk6IF9pcy50eXBlT2ZcbiAgfSk7XG59KTsgLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA2LjAuMC4gRGF0ZTogMjAxOC0xMS0wNlxuXG5leHBvcnRzLmNyZWF0ZVR5cGVPZiA9IGNyZWF0ZVR5cGVPZjtcbnZhciBjcmVhdGVEZXByZWNhdGVkVHlwZW9mID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKCd0eXBlb2YnLCBbXSwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICgwLCBfbG9nLndhcm5PbmNlKSgnRnVuY3Rpb24gXCJ0eXBlb2ZcIiBoYXMgYmVlbiByZW5hbWVkIHRvIFwidHlwZU9mXCIgaW4gdjYuMC4wLCBwbGVhc2UgdXNlIHRoZSBuZXcgZnVuY3Rpb24gaW5zdGVhZC4nKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2lzLnR5cGVPZi5hcHBseShfaXMudHlwZU9mLCBhcmdzKTtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVEZXByZWNhdGVkVHlwZW9mID0gY3JlYXRlRGVwcmVjYXRlZFR5cGVvZjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmVwbGFjZXIgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdyZXBsYWNlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gW107XG52YXIgY3JlYXRlUmVwbGFjZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBTdHJpbmdpZnkgZGF0YSB0eXBlcyBpbnRvIHRoZWlyIEpTT04gcmVwcmVzZW50YXRpb24uXG4gICAqIE1vc3QgZGF0YSB0eXBlcyBjYW4gYmUgc2VyaWFsaXplZCB1c2luZyB0aGVpciBgLnRvSlNPTmAgbWV0aG9kLFxuICAgKiBidXQgbm90IGFsbCwgZm9yIGV4YW1wbGUgdGhlIG51bWJlciBgSW5maW5pdHlgLiBGb3IgdGhlc2UgY2FzZXMgeW91IGhhdmVcbiAgICogdG8gdXNlIHRoZSByZXBsYWNlci4gRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICAgIEpTT04uc3RyaW5naWZ5KFsyLCBJbmZpbml0eV0sIG1hdGgucmVwbGFjZXIpXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgcmVwbGFjZWQgb2JqZWN0XG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gcmVwbGFjZXIoa2V5LCB2YWx1ZSkge1xuICAgIC8vIHRoZSBudW1lcmljIHZhbHVlcyBJbmZpbml0aXksIC1JbmZpbml0eSwgYW5kIE5hTiBjYW5ub3QgYmUgc2VyaWFsaXplZCB0byBKU09OXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgKCFpc0Zpbml0ZSh2YWx1ZSkgfHwgaXNOYU4odmFsdWUpKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWF0aGpzOiAnbnVtYmVyJyxcbiAgICAgICAgdmFsdWU6IFN0cmluZyh2YWx1ZSlcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufSk7XG5leHBvcnRzLmNyZWF0ZVJlcGxhY2VyID0gY3JlYXRlUmVwbGFjZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJldml2ZXIgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdyZXZpdmVyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ2NsYXNzZXMnXTtcbnZhciBjcmVhdGVSZXZpdmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGNsYXNzZXMgPSBfcmVmLmNsYXNzZXM7XG5cbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIG1hdGhqcyBkYXRhIHR5cGVzIGZyb20gdGhlaXIgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJldml2ZWQgb2JqZWN0XG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gcmV2aXZlcihrZXksIHZhbHVlKSB7XG4gICAgdmFyIGNvbnN0cnVjdG9yID0gY2xhc3Nlc1t2YWx1ZSAmJiB2YWx1ZS5tYXRoanNdO1xuXG4gICAgaWYgKGNvbnN0cnVjdG9yICYmIHR5cGVvZiBjb25zdHJ1Y3Rvci5mcm9tSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGNvbnN0cnVjdG9yLmZyb21KU09OKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlUmV2aXZlciA9IGNyZWF0ZVJldml2ZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFic051bWJlciA9IGFic051bWJlcjtcbmV4cG9ydHMuYWRkTnVtYmVyID0gYWRkTnVtYmVyO1xuZXhwb3J0cy5zdWJ0cmFjdE51bWJlciA9IHN1YnRyYWN0TnVtYmVyO1xuZXhwb3J0cy5tdWx0aXBseU51bWJlciA9IG11bHRpcGx5TnVtYmVyO1xuZXhwb3J0cy5kaXZpZGVOdW1iZXIgPSBkaXZpZGVOdW1iZXI7XG5leHBvcnRzLnVuYXJ5TWludXNOdW1iZXIgPSB1bmFyeU1pbnVzTnVtYmVyO1xuZXhwb3J0cy51bmFyeVBsdXNOdW1iZXIgPSB1bmFyeVBsdXNOdW1iZXI7XG5leHBvcnRzLmNicnROdW1iZXIgPSBjYnJ0TnVtYmVyO1xuZXhwb3J0cy5jZWlsTnVtYmVyID0gY2VpbE51bWJlcjtcbmV4cG9ydHMuY3ViZU51bWJlciA9IGN1YmVOdW1iZXI7XG5leHBvcnRzLmV4cE51bWJlciA9IGV4cE51bWJlcjtcbmV4cG9ydHMuZXhwbTFOdW1iZXIgPSBleHBtMU51bWJlcjtcbmV4cG9ydHMuZml4TnVtYmVyID0gZml4TnVtYmVyO1xuZXhwb3J0cy5mbG9vck51bWJlciA9IGZsb29yTnVtYmVyO1xuZXhwb3J0cy5nY2ROdW1iZXIgPSBnY2ROdW1iZXI7XG5leHBvcnRzLmxjbU51bWJlciA9IGxjbU51bWJlcjtcbmV4cG9ydHMubG9nTnVtYmVyID0gbG9nTnVtYmVyO1xuZXhwb3J0cy5sb2cxME51bWJlciA9IGxvZzEwTnVtYmVyO1xuZXhwb3J0cy5sb2cyTnVtYmVyID0gbG9nMk51bWJlcjtcbmV4cG9ydHMubG9nMXBOdW1iZXIgPSBsb2cxcE51bWJlcjtcbmV4cG9ydHMubW9kTnVtYmVyID0gbW9kTnVtYmVyO1xuZXhwb3J0cy5udGhSb290TnVtYmVyID0gbnRoUm9vdE51bWJlcjtcbmV4cG9ydHMuc2lnbk51bWJlciA9IHNpZ25OdW1iZXI7XG5leHBvcnRzLnNxcnROdW1iZXIgPSBzcXJ0TnVtYmVyO1xuZXhwb3J0cy5zcXVhcmVOdW1iZXIgPSBzcXVhcmVOdW1iZXI7XG5leHBvcnRzLnhnY2ROdW1iZXIgPSB4Z2NkTnVtYmVyO1xuZXhwb3J0cy5wb3dOdW1iZXIgPSBwb3dOdW1iZXI7XG5leHBvcnRzLnJvdW5kTnVtYmVyID0gcm91bmROdW1iZXI7XG5leHBvcnRzLm5vcm1OdW1iZXIgPSBub3JtTnVtYmVyO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBuMSA9ICdudW1iZXInO1xudmFyIG4yID0gJ251bWJlciwgbnVtYmVyJztcblxuZnVuY3Rpb24gYWJzTnVtYmVyKGEpIHtcbiAgcmV0dXJuIE1hdGguYWJzKGEpO1xufVxuXG5hYnNOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGFkZE51bWJlcihhLCBiKSB7XG4gIHJldHVybiBhICsgYjtcbn1cblxuYWRkTnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuXG5mdW5jdGlvbiBzdWJ0cmFjdE51bWJlcihhLCBiKSB7XG4gIHJldHVybiBhIC0gYjtcbn1cblxuc3VidHJhY3ROdW1iZXIuc2lnbmF0dXJlID0gbjI7XG5cbmZ1bmN0aW9uIG11bHRpcGx5TnVtYmVyKGEsIGIpIHtcbiAgcmV0dXJuIGEgKiBiO1xufVxuXG5tdWx0aXBseU51bWJlci5zaWduYXR1cmUgPSBuMjtcblxuZnVuY3Rpb24gZGl2aWRlTnVtYmVyKGEsIGIpIHtcbiAgcmV0dXJuIGEgLyBiO1xufVxuXG5kaXZpZGVOdW1iZXIuc2lnbmF0dXJlID0gbjI7XG5cbmZ1bmN0aW9uIHVuYXJ5TWludXNOdW1iZXIoeCkge1xuICByZXR1cm4gLXg7XG59XG5cbnVuYXJ5TWludXNOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIHVuYXJ5UGx1c051bWJlcih4KSB7XG4gIHJldHVybiB4O1xufVxuXG51bmFyeVBsdXNOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGNicnROdW1iZXIoeCkge1xuICByZXR1cm4gKDAsIF9udW1iZXIuY2JydCkoeCk7XG59XG5cbmNicnROdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGNlaWxOdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5jZWlsKHgpO1xufVxuXG5jZWlsTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBjdWJlTnVtYmVyKHgpIHtcbiAgcmV0dXJuIHggKiB4ICogeDtcbn1cblxuY3ViZU51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gZXhwTnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGguZXhwKHgpO1xufVxuXG5leHBOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGV4cG0xTnVtYmVyKHgpIHtcbiAgcmV0dXJuICgwLCBfbnVtYmVyLmV4cG0xKSh4KTtcbn1cblxuZXhwbTFOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGZpeE51bWJlcih4KSB7XG4gIHJldHVybiB4ID4gMCA/IE1hdGguZmxvb3IoeCkgOiBNYXRoLmNlaWwoeCk7XG59XG5cbmZpeE51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gZmxvb3JOdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5mbG9vcih4KTtcbn1cblxuZmxvb3JOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG4vKipcbiAqIENhbGN1bGF0ZSBnY2QgZm9yIG51bWJlcnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgZ3JlYXRlc3QgY29tbW9uIGRlbm9taW5hdG9yIG9mIGEgYW5kIGJcbiAqL1xuXG5mdW5jdGlvbiBnY2ROdW1iZXIoYSwgYikge1xuICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoYSkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoYikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24gZ2NkIG11c3QgYmUgaW50ZWdlciBudW1iZXJzJyk7XG4gIH0gLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRXVjbGlkZWFuX2FsZ29yaXRobVxuXG5cbiAgdmFyIHI7XG5cbiAgd2hpbGUgKGIgIT09IDApIHtcbiAgICByID0gYSAlIGI7XG4gICAgYSA9IGI7XG4gICAgYiA9IHI7XG4gIH1cblxuICByZXR1cm4gYSA8IDAgPyAtYSA6IGE7XG59XG5cbmdjZE51bWJlci5zaWduYXR1cmUgPSBuMjtcbi8qKlxuICogQ2FsY3VsYXRlIGxjbSBmb3IgdHdvIG51bWJlcnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbGVhc3QgY29tbW9uIG11bHRpcGxlIG9mIGEgYW5kIGJcbiAqL1xuXG5mdW5jdGlvbiBsY21OdW1iZXIoYSwgYikge1xuICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoYSkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoYikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24gbGNtIG11c3QgYmUgaW50ZWdlciBudW1iZXJzJyk7XG4gIH1cblxuICBpZiAoYSA9PT0gMCB8fCBiID09PSAwKSB7XG4gICAgcmV0dXJuIDA7XG4gIH0gLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRXVjbGlkZWFuX2FsZ29yaXRobVxuICAvLyBldmFsdWF0ZSBsY20gaGVyZSBpbmxpbmUgdG8gcmVkdWNlIG92ZXJoZWFkXG5cblxuICB2YXIgdDtcbiAgdmFyIHByb2QgPSBhICogYjtcblxuICB3aGlsZSAoYiAhPT0gMCkge1xuICAgIHQgPSBiO1xuICAgIGIgPSBhICUgdDtcbiAgICBhID0gdDtcbiAgfVxuXG4gIHJldHVybiBNYXRoLmFicyhwcm9kIC8gYSk7XG59XG5cbmxjbU51bWJlci5zaWduYXR1cmUgPSBuMjtcbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBsb2dhcml0aG0gb2YgYSB2YWx1ZS5cbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblxuZnVuY3Rpb24gbG9nTnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nKHgpO1xufVxuXG5sb2dOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgMTAtYmFzZSBsb2dhcml0aG0gb2YgYSBudW1iZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cblxuZnVuY3Rpb24gbG9nMTBOdW1iZXIoeCkge1xuICByZXR1cm4gKDAsIF9udW1iZXIubG9nMTApKHgpO1xufVxuXG5sb2cxME51bWJlci5zaWduYXR1cmUgPSBuMTtcbi8qKlxuICogQ2FsY3VsYXRlIHRoZSAyLWJhc2UgbG9nYXJpdGhtIG9mIGEgbnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5cbmZ1bmN0aW9uIGxvZzJOdW1iZXIoeCkge1xuICByZXR1cm4gKDAsIF9udW1iZXIubG9nMikoeCk7XG59XG5cbmxvZzJOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgYSBgbnVtYmVyKzFgXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuXG5mdW5jdGlvbiBsb2cxcE51bWJlcih4KSB7XG4gIHJldHVybiAoMCwgX251bWJlci5sb2cxcCkoeCk7XG59XG5cbmxvZzFwTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIG1vZHVsdXMgb2YgdHdvIG51bWJlcnNcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHJldHVybnMge251bWJlcn0gcmVzXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIG1vZE51bWJlcih4LCB5KSB7XG4gIGlmICh5ID4gMCkge1xuICAgIC8vIFdlIGRvbid0IHVzZSBKYXZhU2NyaXB0J3MgJSBvcGVyYXRvciBoZXJlIGFzIHRoaXMgZG9lc24ndCB3b3JrXG4gICAgLy8gY29ycmVjdGx5IGZvciB4IDwgMCBhbmQgeCA9PT0gMFxuICAgIC8vIHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9Nb2R1bG9fb3BlcmF0aW9uXG4gICAgcmV0dXJuIHggLSB5ICogTWF0aC5mbG9vcih4IC8geSk7XG4gIH0gZWxzZSBpZiAoeSA9PT0gMCkge1xuICAgIHJldHVybiB4O1xuICB9IGVsc2Uge1xuICAgIC8vIHkgPCAwXG4gICAgLy8gVE9ETzogaW1wbGVtZW50IG1vZCBmb3IgYSBuZWdhdGl2ZSBkaXZpc29yXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIG1vZCBmb3IgYSBuZWdhdGl2ZSBkaXZpc29yJyk7XG4gIH1cbn1cblxubW9kTnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIG50aCByb290IG9mIGEsIHNvbHZlIHhecm9vdCA9PSBhXG4gKiBodHRwOi8vcm9zZXR0YWNvZGUub3JnL3dpa2kvTnRoX3Jvb3QjSmF2YVNjcmlwdFxuICogQHBhcmFtIHtudW1iZXJ9IGFcbiAqIEBwYXJhbSB7bnVtYmVyfSByb290XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIG50aFJvb3ROdW1iZXIoYSwgcm9vdCkge1xuICB2YXIgaW52ID0gcm9vdCA8IDA7XG5cbiAgaWYgKGludikge1xuICAgIHJvb3QgPSAtcm9vdDtcbiAgfVxuXG4gIGlmIChyb290ID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSb290IG11c3QgYmUgbm9uLXplcm8nKTtcbiAgfVxuXG4gIGlmIChhIDwgMCAmJiBNYXRoLmFicyhyb290KSAlIDIgIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3QgbXVzdCBiZSBvZGQgd2hlbiBhIGlzIG5lZ2F0aXZlLicpO1xuICB9IC8vIGVkZ2UgY2FzZXMgemVybyBhbmQgaW5maW5pdHlcblxuXG4gIGlmIChhID09PSAwKSB7XG4gICAgcmV0dXJuIGludiA/IEluZmluaXR5IDogMDtcbiAgfVxuXG4gIGlmICghaXNGaW5pdGUoYSkpIHtcbiAgICByZXR1cm4gaW52ID8gMCA6IGE7XG4gIH1cblxuICB2YXIgeCA9IE1hdGgucG93KE1hdGguYWJzKGEpLCAxIC8gcm9vdCk7IC8vIElmIGEgPCAwLCB3ZSByZXF1aXJlIHRoYXQgcm9vdCBpcyBhbiBvZGQgaW50ZWdlcixcbiAgLy8gc28gKC0xKSBeICgxL3Jvb3QpID0gLTFcblxuICB4ID0gYSA8IDAgPyAteCA6IHg7XG4gIHJldHVybiBpbnYgPyAxIC8geCA6IHg7IC8vIFZlcnkgbmljZSBhbGdvcml0aG0sIGJ1dCBmYWlscyB3aXRoIG50aFJvb3QoLTIsIDMpLlxuICAvLyBOZXd0b24ncyBtZXRob2QgaGFzIHNvbWUgd2VsbC1rbm93biBwcm9ibGVtcyBhdCB0aW1lczpcbiAgLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTmV3dG9uJTI3c19tZXRob2QjRmFpbHVyZV9hbmFseXNpc1xuXG4gIC8qXG4gIGxldCB4ID0gMSAvLyBJbml0aWFsIGd1ZXNzXG4gIGxldCB4UHJldiA9IDFcbiAgbGV0IGkgPSAwXG4gIGNvbnN0IGlNYXggPSAxMDAwMFxuICBkbyB7XG4gICAgY29uc3QgZGVsdGEgPSAoYSAvIE1hdGgucG93KHgsIHJvb3QgLSAxKSAtIHgpIC8gcm9vdFxuICAgIHhQcmV2ID0geFxuICAgIHggPSB4ICsgZGVsdGFcbiAgICBpKytcbiAgfVxuICB3aGlsZSAoeFByZXYgIT09IHggJiYgaSA8IGlNYXgpXG4gICBpZiAoeFByZXYgIT09IHgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Z1bmN0aW9uIG50aFJvb3QgZmFpbGVkIHRvIGNvbnZlcmdlJylcbiAgfVxuICAgcmV0dXJuIGludiA/IDEgLyB4IDogeFxuICAqL1xufVxuXG5udGhSb290TnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuXG5mdW5jdGlvbiBzaWduTnVtYmVyKHgpIHtcbiAgcmV0dXJuICgwLCBfbnVtYmVyLnNpZ24pKHgpO1xufVxuXG5zaWduTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBzcXJ0TnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGguc3FydCh4KTtcbn1cblxuc3FydE51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gc3F1YXJlTnVtYmVyKHgpIHtcbiAgcmV0dXJuIHggKiB4O1xufVxuXG5zcXVhcmVOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG4vKipcbiAqIENhbGN1bGF0ZSB4Z2NkIGZvciB0d28gbnVtYmVyc1xuICogQHBhcmFtIHtudW1iZXJ9IGFcbiAqIEBwYXJhbSB7bnVtYmVyfSBiXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHJlc3VsdFxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiB4Z2NkTnVtYmVyKGEsIGIpIHtcbiAgLy8gc291cmNlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FeHRlbmRlZF9FdWNsaWRlYW5fYWxnb3JpdGhtXG4gIHZhciB0OyAvLyB1c2VkIHRvIHN3YXAgdHdvIHZhcmlhYmxlc1xuXG4gIHZhciBxOyAvLyBxdW90aWVudFxuXG4gIHZhciByOyAvLyByZW1haW5kZXJcblxuICB2YXIgeCA9IDA7XG4gIHZhciBsYXN0eCA9IDE7XG4gIHZhciB5ID0gMTtcbiAgdmFyIGxhc3R5ID0gMDtcblxuICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoYSkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoYikpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24geGdjZCBtdXN0IGJlIGludGVnZXIgbnVtYmVycycpO1xuICB9XG5cbiAgd2hpbGUgKGIpIHtcbiAgICBxID0gTWF0aC5mbG9vcihhIC8gYik7XG4gICAgciA9IGEgLSBxICogYjtcbiAgICB0ID0geDtcbiAgICB4ID0gbGFzdHggLSBxICogeDtcbiAgICBsYXN0eCA9IHQ7XG4gICAgdCA9IHk7XG4gICAgeSA9IGxhc3R5IC0gcSAqIHk7XG4gICAgbGFzdHkgPSB0O1xuICAgIGEgPSBiO1xuICAgIGIgPSByO1xuICB9XG5cbiAgdmFyIHJlcztcblxuICBpZiAoYSA8IDApIHtcbiAgICByZXMgPSBbLWEsIC1sYXN0eCwgLWxhc3R5XTtcbiAgfSBlbHNlIHtcbiAgICByZXMgPSBbYSwgYSA/IGxhc3R4IDogMCwgbGFzdHldO1xuICB9XG5cbiAgcmV0dXJuIHJlcztcbn1cblxueGdjZE51bWJlci5zaWduYXR1cmUgPSBuMjtcbi8qKlxuICogQ2FsY3VsYXRlcyB0aGUgcG93ZXIgb2YgeCB0byB5LCB4XnksIGZvciB0d28gbnVtYmVycy5cbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcGFyYW0ge251bWJlcn0geVxuICogQHJldHVybiB7bnVtYmVyfSByZXNcbiAqL1xuXG5mdW5jdGlvbiBwb3dOdW1iZXIoeCwgeSkge1xuICAvLyB4XkluZmluaXR5ID09PSAwIGlmIC0xIDwgeCA8IDFcbiAgLy8gQSByZWFsIG51bWJlciAwIGlzIHJldHVybmVkIGluc3RlYWQgb2YgY29tcGxleCgwKVxuICBpZiAoeCAqIHggPCAxICYmIHkgPT09IEluZmluaXR5IHx8IHggKiB4ID4gMSAmJiB5ID09PSAtSW5maW5pdHkpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHJldHVybiBNYXRoLnBvdyh4LCB5KTtcbn1cblxucG93TnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuLyoqXG4gKiByb3VuZCBhIG51bWJlciB0byB0aGUgZ2l2ZW4gbnVtYmVyIG9mIGRlY2ltYWxzLCBvciB0byB6ZXJvIGlmIGRlY2ltYWxzIGlzXG4gKiBub3QgcHJvdmlkZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGRlY2ltYWxzICAgICAgIG51bWJlciBvZiBkZWNpbWFscywgYmV0d2VlbiAwIGFuZCAxNSAoMCBieSBkZWZhdWx0KVxuICogQHJldHVybiB7bnVtYmVyfSByb3VuZGVkVmFsdWVcbiAqL1xuXG5mdW5jdGlvbiByb3VuZE51bWJlcih2YWx1ZSkge1xuICB2YXIgZGVjaW1hbHMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IDA7XG4gIHJldHVybiBwYXJzZUZsb2F0KCgwLCBfbnVtYmVyLnRvRml4ZWQpKHZhbHVlLCBkZWNpbWFscykpO1xufVxuXG5yb3VuZE51bWJlci5zaWduYXR1cmUgPSBuMjtcbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBub3JtIG9mIGEgbnVtYmVyLCB0aGUgYWJzb2x1dGUgdmFsdWUuXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5cbmZ1bmN0aW9uIG5vcm1OdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5hYnMoeCk7XG59XG5cbm5vcm1OdW1iZXIuc2lnbmF0dXJlID0gbjE7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdEFuZE51bWJlciA9IGJpdEFuZE51bWJlcjtcbmV4cG9ydHMuYml0Tm90TnVtYmVyID0gYml0Tm90TnVtYmVyO1xuZXhwb3J0cy5iaXRPck51bWJlciA9IGJpdE9yTnVtYmVyO1xuZXhwb3J0cy5iaXRYb3JOdW1iZXIgPSBiaXRYb3JOdW1iZXI7XG5leHBvcnRzLmxlZnRTaGlmdE51bWJlciA9IGxlZnRTaGlmdE51bWJlcjtcbmV4cG9ydHMucmlnaHRBcml0aFNoaWZ0TnVtYmVyID0gcmlnaHRBcml0aFNoaWZ0TnVtYmVyO1xuZXhwb3J0cy5yaWdodExvZ1NoaWZ0TnVtYmVyID0gcmlnaHRMb2dTaGlmdE51bWJlcjtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgbjEgPSAnbnVtYmVyJztcbnZhciBuMiA9ICdudW1iZXIsIG51bWJlcic7XG5cbmZ1bmN0aW9uIGJpdEFuZE51bWJlcih4LCB5KSB7XG4gIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh4KSB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW50ZWdlcnMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gYml0QW5kJyk7XG4gIH1cblxuICByZXR1cm4geCAmIHk7XG59XG5cbmJpdEFuZE51bWJlci5zaWduYXR1cmUgPSBuMjtcblxuZnVuY3Rpb24gYml0Tm90TnVtYmVyKHgpIHtcbiAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKHgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VyIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGJpdE5vdCcpO1xuICB9XG5cbiAgcmV0dXJuIH54O1xufVxuXG5iaXROb3ROdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGJpdE9yTnVtYmVyKHgsIHkpIHtcbiAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKHgpIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKHkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiBiaXRPcicpO1xuICB9XG5cbiAgcmV0dXJuIHggfCB5O1xufVxuXG5iaXRPck51bWJlci5zaWduYXR1cmUgPSBuMjtcblxuZnVuY3Rpb24gYml0WG9yTnVtYmVyKHgsIHkpIHtcbiAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKHgpIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKHkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiBiaXRYb3InKTtcbiAgfVxuXG4gIHJldHVybiB4IF4geTtcbn1cblxuYml0WG9yTnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuXG5mdW5jdGlvbiBsZWZ0U2hpZnROdW1iZXIoeCwgeSkge1xuICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeCkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVnZXJzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGxlZnRTaGlmdCcpO1xuICB9XG5cbiAgcmV0dXJuIHggPDwgeTtcbn1cblxubGVmdFNoaWZ0TnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuXG5mdW5jdGlvbiByaWdodEFyaXRoU2hpZnROdW1iZXIoeCwgeSkge1xuICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeCkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVnZXJzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIHJpZ2h0QXJpdGhTaGlmdCcpO1xuICB9XG5cbiAgcmV0dXJuIHggPj4geTtcbn1cblxucmlnaHRBcml0aFNoaWZ0TnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuXG5mdW5jdGlvbiByaWdodExvZ1NoaWZ0TnVtYmVyKHgsIHkpIHtcbiAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKHgpIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKHkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiByaWdodExvZ1NoaWZ0Jyk7XG4gIH1cblxuICByZXR1cm4geCA+Pj4geTtcbn1cblxucmlnaHRMb2dTaGlmdE51bWJlci5zaWduYXR1cmUgPSBuMjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tYmluYXRpb25zTnVtYmVyID0gY29tYmluYXRpb25zTnVtYmVyO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfcHJvZHVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9wcm9kdWN0XCIpO1xuXG5mdW5jdGlvbiBjb21iaW5hdGlvbnNOdW1iZXIobiwgaykge1xuICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikobikgfHwgbiA8IDApIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGNvbWJpbmF0aW9ucycpO1xuICB9XG5cbiAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKGspIHx8IGsgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21iaW5hdGlvbnMnKTtcbiAgfVxuXG4gIGlmIChrID4gbikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2sgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbicpO1xuICB9XG5cbiAgdmFyIG5NaW51c2sgPSBuIC0gaztcbiAgdmFyIHByb2RyYW5nZTtcblxuICBpZiAoayA8IG5NaW51c2spIHtcbiAgICBwcm9kcmFuZ2UgPSAoMCwgX3Byb2R1Y3QucHJvZHVjdCkobk1pbnVzayArIDEsIG4pO1xuICAgIHJldHVybiBwcm9kcmFuZ2UgLyAoMCwgX3Byb2R1Y3QucHJvZHVjdCkoMSwgayk7XG4gIH1cblxuICBwcm9kcmFuZ2UgPSAoMCwgX3Byb2R1Y3QucHJvZHVjdCkoayArIDEsIG4pO1xuICByZXR1cm4gcHJvZHJhbmdlIC8gKDAsIF9wcm9kdWN0LnByb2R1Y3QpKDEsIG5NaW51c2spO1xufVxuXG5jb21iaW5hdGlvbnNOdW1iZXIuc2lnbmF0dXJlID0gJ251bWJlciwgbnVtYmVyJzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucGhpID0gZXhwb3J0cy5lID0gZXhwb3J0cy50YXUgPSBleHBvcnRzLnBpID0gdm9pZCAwO1xudmFyIHBpID0gTWF0aC5QSTtcbmV4cG9ydHMucGkgPSBwaTtcbnZhciB0YXUgPSAyICogTWF0aC5QSTtcbmV4cG9ydHMudGF1ID0gdGF1O1xudmFyIGUgPSBNYXRoLkU7XG5leHBvcnRzLmUgPSBlO1xudmFyIHBoaSA9IDEuNjE4MDMzOTg4NzQ5ODk0ODQ4MjA0NTg2ODM0MzY1NjM4MTE3NzIwMzA5MTc5ODA1NzYyODYyMTM1NDU7XG5leHBvcnRzLnBoaSA9IHBoaTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcblxudmFyIF9hcml0aG1ldGljID0gcmVxdWlyZShcIi4vYXJpdGhtZXRpY1wiKTtcblxuT2JqZWN0LmtleXMoX2FyaXRobWV0aWMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF9hcml0aG1ldGljW2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX2JpdHdpc2UgPSByZXF1aXJlKFwiLi9iaXR3aXNlXCIpO1xuXG5PYmplY3Qua2V5cyhfYml0d2lzZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX2JpdHdpc2Vba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbnZhciBfY29tYmluYXRpb25zID0gcmVxdWlyZShcIi4vY29tYmluYXRpb25zXCIpO1xuXG5PYmplY3Qua2V5cyhfY29tYmluYXRpb25zKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBfY29tYmluYXRpb25zW2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX2NvbnN0YW50cyA9IHJlcXVpcmUoXCIuL2NvbnN0YW50c1wiKTtcblxuT2JqZWN0LmtleXMoX2NvbnN0YW50cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX2NvbnN0YW50c1trZXldO1xuICAgIH1cbiAgfSk7XG59KTtcblxudmFyIF9sb2dpY2FsID0gcmVxdWlyZShcIi4vbG9naWNhbFwiKTtcblxuT2JqZWN0LmtleXMoX2xvZ2ljYWwpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF9sb2dpY2FsW2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX3JlbGF0aW9uYWwgPSByZXF1aXJlKFwiLi9yZWxhdGlvbmFsXCIpO1xuXG5PYmplY3Qua2V5cyhfcmVsYXRpb25hbCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX3JlbGF0aW9uYWxba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbnZhciBfcHJvYmFiaWxpdHkgPSByZXF1aXJlKFwiLi9wcm9iYWJpbGl0eVwiKTtcblxuT2JqZWN0LmtleXMoX3Byb2JhYmlsaXR5KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBfcHJvYmFiaWxpdHlba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbnZhciBfdHJpZ29ub21ldHJ5ID0gcmVxdWlyZShcIi4vdHJpZ29ub21ldHJ5XCIpO1xuXG5PYmplY3Qua2V5cyhfdHJpZ29ub21ldHJ5KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBfdHJpZ29ub21ldHJ5W2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX3V0aWxzID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG5cbk9iamVjdC5rZXlzKF91dGlscykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX3V0aWxzW2tleV07XG4gICAgfVxuICB9KTtcbn0pOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ub3ROdW1iZXIgPSBub3ROdW1iZXI7XG5leHBvcnRzLm9yTnVtYmVyID0gb3JOdW1iZXI7XG5leHBvcnRzLnhvck51bWJlciA9IHhvck51bWJlcjtcbmV4cG9ydHMuYW5kTnVtYmVyID0gYW5kTnVtYmVyO1xudmFyIG4xID0gJ251bWJlcic7XG52YXIgbjIgPSAnbnVtYmVyLCBudW1iZXInO1xuXG5mdW5jdGlvbiBub3ROdW1iZXIoeCkge1xuICByZXR1cm4gIXg7XG59XG5cbm5vdE51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gb3JOdW1iZXIoeCwgeSkge1xuICByZXR1cm4gISEoeCB8fCB5KTtcbn1cblxub3JOdW1iZXIuc2lnbmF0dXJlID0gbjI7XG5cbmZ1bmN0aW9uIHhvck51bWJlcih4LCB5KSB7XG4gIHJldHVybiAhIXggIT09ICEheTtcbn1cblxueG9yTnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuXG5mdW5jdGlvbiBhbmROdW1iZXIoeCwgeSkge1xuICByZXR1cm4gISEoeCAmJiB5KTtcbn1cblxuYW5kTnVtYmVyLnNpZ25hdHVyZSA9IG4yOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nYW1tYU51bWJlciA9IGdhbW1hTnVtYmVyO1xuZXhwb3J0cy5nYW1tYVAgPSBleHBvcnRzLmdhbW1hRyA9IHZvaWQgMDtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX3Byb2R1Y3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvcHJvZHVjdFwiKTtcblxuZnVuY3Rpb24gZ2FtbWFOdW1iZXIobikge1xuICB2YXIgeDtcblxuICBpZiAoKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShuKSkge1xuICAgIGlmIChuIDw9IDApIHtcbiAgICAgIHJldHVybiBpc0Zpbml0ZShuKSA/IEluZmluaXR5IDogTmFOO1xuICAgIH1cblxuICAgIGlmIChuID4gMTcxKSB7XG4gICAgICByZXR1cm4gSW5maW5pdHk7IC8vIFdpbGwgb3ZlcmZsb3dcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF9wcm9kdWN0LnByb2R1Y3QpKDEsIG4gLSAxKTtcbiAgfVxuXG4gIGlmIChuIDwgMC41KSB7XG4gICAgcmV0dXJuIE1hdGguUEkgLyAoTWF0aC5zaW4oTWF0aC5QSSAqIG4pICogZ2FtbWFOdW1iZXIoMSAtIG4pKTtcbiAgfVxuXG4gIGlmIChuID49IDE3MS4zNSkge1xuICAgIHJldHVybiBJbmZpbml0eTsgLy8gd2lsbCBvdmVyZmxvd1xuICB9XG5cbiAgaWYgKG4gPiA4NS4wKSB7XG4gICAgLy8gRXh0ZW5kZWQgU3RpcmxpbmcgQXBwcm94XG4gICAgdmFyIHR3b04gPSBuICogbjtcbiAgICB2YXIgdGhyZWVOID0gdHdvTiAqIG47XG4gICAgdmFyIGZvdXJOID0gdGhyZWVOICogbjtcbiAgICB2YXIgZml2ZU4gPSBmb3VyTiAqIG47XG4gICAgcmV0dXJuIE1hdGguc3FydCgyICogTWF0aC5QSSAvIG4pICogTWF0aC5wb3cobiAvIE1hdGguRSwgbikgKiAoMSArIDEgLyAoMTIgKiBuKSArIDEgLyAoMjg4ICogdHdvTikgLSAxMzkgLyAoNTE4NDAgKiB0aHJlZU4pIC0gNTcxIC8gKDI0ODgzMjAgKiBmb3VyTikgKyAxNjM4NzkgLyAoMjA5MDE4ODgwICogZml2ZU4pICsgNTI0NjgxOSAvICg3NTI0Njc5NjgwMCAqIGZpdmVOICogbikpO1xuICB9XG5cbiAgLS1uO1xuICB4ID0gZ2FtbWFQWzBdO1xuXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgZ2FtbWFQLmxlbmd0aDsgKytpKSB7XG4gICAgeCArPSBnYW1tYVBbaV0gLyAobiArIGkpO1xuICB9XG5cbiAgdmFyIHQgPSBuICsgZ2FtbWFHICsgMC41O1xuICByZXR1cm4gTWF0aC5zcXJ0KDIgKiBNYXRoLlBJKSAqIE1hdGgucG93KHQsIG4gKyAwLjUpICogTWF0aC5leHAoLXQpICogeDtcbn1cblxuZ2FtbWFOdW1iZXIuc2lnbmF0dXJlID0gJ251bWJlcic7IC8vIFRPRE86IGNvbW1lbnQgb24gdGhlIHZhcmlhYmxlcyBnIGFuZCBwXG5cbnZhciBnYW1tYUcgPSA0Ljc0MjE4NzU7XG5leHBvcnRzLmdhbW1hRyA9IGdhbW1hRztcbnZhciBnYW1tYVAgPSBbMC45OTk5OTk5OTk5OTk5OTcwOTE4MiwgNTcuMTU2MjM1NjY1ODYyOTIzNTE3LCAtNTkuNTk3OTYwMzU1NDc1NDkxMjQ4LCAxNC4xMzYwOTc5NzQ3NDE3NDcxNzQsIC0wLjQ5MTkxMzgxNjA5NzYyMDE5OTc4LCAwLjMzOTk0NjQ5OTg0ODExODg4Njk5ZS00LCAwLjQ2NTIzNjI4OTI3MDQ4NTc1NjY1ZS00LCAtMC45ODM3NDQ3NTMwNDg3OTU2NDY3N2UtNCwgMC4xNTgwODg3MDMyMjQ5MTI0ODg4NGUtMywgLTAuMjEwMjY0NDQxNzI0MTA0ODgzMTllLTMsIDAuMjE3NDM5NjE4MTE1MjEyNjQzMjBlLTMsIC0wLjE2NDMxODEwNjUzNjc2Mzg5MDIyZS0zLCAwLjg0NDE4MjIzOTgzODUyNzQzMjkzZS00LCAtMC4yNjE5MDgzODQwMTU4MTQwODY3MGUtNCwgMC4zNjg5OTE4MjY1OTUzMTYyMjcwNGUtNV07XG5leHBvcnRzLmdhbW1hUCA9IGdhbW1hUDsiLCJcInVzZSBzdHJpY3RcIjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNvc051bWJlciA9IGFjb3NOdW1iZXI7XG5leHBvcnRzLmFjb3NoTnVtYmVyID0gYWNvc2hOdW1iZXI7XG5leHBvcnRzLmFjb3ROdW1iZXIgPSBhY290TnVtYmVyO1xuZXhwb3J0cy5hY290aE51bWJlciA9IGFjb3RoTnVtYmVyO1xuZXhwb3J0cy5hY3NjTnVtYmVyID0gYWNzY051bWJlcjtcbmV4cG9ydHMuYWNzY2hOdW1iZXIgPSBhY3NjaE51bWJlcjtcbmV4cG9ydHMuYXNlY051bWJlciA9IGFzZWNOdW1iZXI7XG5leHBvcnRzLmFzZWNoTnVtYmVyID0gYXNlY2hOdW1iZXI7XG5leHBvcnRzLmFzaW5OdW1iZXIgPSBhc2luTnVtYmVyO1xuZXhwb3J0cy5hc2luaE51bWJlciA9IGFzaW5oTnVtYmVyO1xuZXhwb3J0cy5hdGFuTnVtYmVyID0gYXRhbk51bWJlcjtcbmV4cG9ydHMuYXRhbjJOdW1iZXIgPSBhdGFuMk51bWJlcjtcbmV4cG9ydHMuYXRhbmhOdW1iZXIgPSBhdGFuaE51bWJlcjtcbmV4cG9ydHMuY29zTnVtYmVyID0gY29zTnVtYmVyO1xuZXhwb3J0cy5jb3NoTnVtYmVyID0gY29zaE51bWJlcjtcbmV4cG9ydHMuY290TnVtYmVyID0gY290TnVtYmVyO1xuZXhwb3J0cy5jb3RoTnVtYmVyID0gY290aE51bWJlcjtcbmV4cG9ydHMuY3NjTnVtYmVyID0gY3NjTnVtYmVyO1xuZXhwb3J0cy5jc2NoTnVtYmVyID0gY3NjaE51bWJlcjtcbmV4cG9ydHMuc2VjTnVtYmVyID0gc2VjTnVtYmVyO1xuZXhwb3J0cy5zZWNoTnVtYmVyID0gc2VjaE51bWJlcjtcbmV4cG9ydHMuc2luTnVtYmVyID0gc2luTnVtYmVyO1xuZXhwb3J0cy5zaW5oTnVtYmVyID0gc2luaE51bWJlcjtcbmV4cG9ydHMudGFuTnVtYmVyID0gdGFuTnVtYmVyO1xuZXhwb3J0cy50YW5oTnVtYmVyID0gdGFuaE51bWJlcjtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgbjEgPSAnbnVtYmVyJztcbnZhciBuMiA9ICdudW1iZXIsIG51bWJlcic7XG5cbmZ1bmN0aW9uIGFjb3NOdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5hY29zKHgpO1xufVxuXG5hY29zTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBhY29zaE51bWJlcih4KSB7XG4gIHJldHVybiAoMCwgX251bWJlci5hY29zaCkoeCk7XG59XG5cbmFjb3NoTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBhY290TnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGguYXRhbigxIC8geCk7XG59XG5cbmFjb3ROdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGFjb3RoTnVtYmVyKHgpIHtcbiAgcmV0dXJuIGlzRmluaXRlKHgpID8gKE1hdGgubG9nKCh4ICsgMSkgLyB4KSArIE1hdGgubG9nKHggLyAoeCAtIDEpKSkgLyAyIDogMDtcbn1cblxuYWNvdGhOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGFjc2NOdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5hc2luKDEgLyB4KTtcbn1cblxuYWNzY051bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gYWNzY2hOdW1iZXIoeCkge1xuICB2YXIgeEludiA9IDEgLyB4O1xuICByZXR1cm4gTWF0aC5sb2coeEludiArIE1hdGguc3FydCh4SW52ICogeEludiArIDEpKTtcbn1cblxuYWNzY2hOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGFzZWNOdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5hY29zKDEgLyB4KTtcbn1cblxuYXNlY051bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gYXNlY2hOdW1iZXIoeCkge1xuICB2YXIgeEludiA9IDEgLyB4O1xuICB2YXIgcmV0ID0gTWF0aC5zcXJ0KHhJbnYgKiB4SW52IC0gMSk7XG4gIHJldHVybiBNYXRoLmxvZyhyZXQgKyB4SW52KTtcbn1cblxuYXNlY2hOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGFzaW5OdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5hc2luKHgpO1xufVxuXG5hc2luTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBhc2luaE51bWJlcih4KSB7XG4gIHJldHVybiAoMCwgX251bWJlci5hc2luaCkoeCk7XG59XG5cbmFzaW5oTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBhdGFuTnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGguYXRhbih4KTtcbn1cblxuYXRhbk51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gYXRhbjJOdW1iZXIoeSwgeCkge1xuICByZXR1cm4gTWF0aC5hdGFuMih5LCB4KTtcbn1cblxuYXRhbjJOdW1iZXIuc2lnbmF0dXJlID0gbjI7XG5cbmZ1bmN0aW9uIGF0YW5oTnVtYmVyKHgpIHtcbiAgcmV0dXJuICgwLCBfbnVtYmVyLmF0YW5oKSh4KTtcbn1cblxuYXRhbmhOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGNvc051bWJlcih4KSB7XG4gIHJldHVybiBNYXRoLmNvcyh4KTtcbn1cblxuY29zTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBjb3NoTnVtYmVyKHgpIHtcbiAgcmV0dXJuICgwLCBfbnVtYmVyLmNvc2gpKHgpO1xufVxuXG5jb3NoTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBjb3ROdW1iZXIoeCkge1xuICByZXR1cm4gMSAvIE1hdGgudGFuKHgpO1xufVxuXG5jb3ROdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGNvdGhOdW1iZXIoeCkge1xuICB2YXIgZSA9IE1hdGguZXhwKDIgKiB4KTtcbiAgcmV0dXJuIChlICsgMSkgLyAoZSAtIDEpO1xufVxuXG5jb3RoTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBjc2NOdW1iZXIoeCkge1xuICByZXR1cm4gMSAvIE1hdGguc2luKHgpO1xufVxuXG5jc2NOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGNzY2hOdW1iZXIoeCkge1xuICAvLyBjb25zaWRlciB2YWx1ZXMgY2xvc2UgdG8gemVybyAoKy8tKVxuICBpZiAoeCA9PT0gMCkge1xuICAgIHJldHVybiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIE1hdGguYWJzKDIgLyAoTWF0aC5leHAoeCkgLSBNYXRoLmV4cCgteCkpKSAqICgwLCBfbnVtYmVyLnNpZ24pKHgpO1xuICB9XG59XG5cbmNzY2hOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIHNlY051bWJlcih4KSB7XG4gIHJldHVybiAxIC8gTWF0aC5jb3MoeCk7XG59XG5cbnNlY051bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gc2VjaE51bWJlcih4KSB7XG4gIHJldHVybiAyIC8gKE1hdGguZXhwKHgpICsgTWF0aC5leHAoLXgpKTtcbn1cblxuc2VjaE51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gc2luTnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGguc2luKHgpO1xufVxuXG5zaW5OdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIHNpbmhOdW1iZXIoeCkge1xuICByZXR1cm4gKDAsIF9udW1iZXIuc2luaCkoeCk7XG59XG5cbnNpbmhOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIHRhbk51bWJlcih4KSB7XG4gIHJldHVybiBNYXRoLnRhbih4KTtcbn1cblxudGFuTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiB0YW5oTnVtYmVyKHgpIHtcbiAgcmV0dXJuICgwLCBfbnVtYmVyLnRhbmgpKHgpO1xufVxuXG50YW5oTnVtYmVyLnNpZ25hdHVyZSA9IG4xOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc0ludGVnZXJOdW1iZXIgPSBpc0ludGVnZXJOdW1iZXI7XG5leHBvcnRzLmlzTmVnYXRpdmVOdW1iZXIgPSBpc05lZ2F0aXZlTnVtYmVyO1xuZXhwb3J0cy5pc1Bvc2l0aXZlTnVtYmVyID0gaXNQb3NpdGl2ZU51bWJlcjtcbmV4cG9ydHMuaXNaZXJvTnVtYmVyID0gaXNaZXJvTnVtYmVyO1xuZXhwb3J0cy5pc05hTk51bWJlciA9IGlzTmFOTnVtYmVyO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBuMSA9ICdudW1iZXInO1xuXG5mdW5jdGlvbiBpc0ludGVnZXJOdW1iZXIoeCkge1xuICByZXR1cm4gKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh4KTtcbn1cblxuaXNJbnRlZ2VyTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBpc05lZ2F0aXZlTnVtYmVyKHgpIHtcbiAgcmV0dXJuIHggPCAwO1xufVxuXG5pc05lZ2F0aXZlTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBpc1Bvc2l0aXZlTnVtYmVyKHgpIHtcbiAgcmV0dXJuIHggPiAwO1xufVxuXG5pc1Bvc2l0aXZlTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBpc1plcm9OdW1iZXIoeCkge1xuICByZXR1cm4geCA9PT0gMDtcbn1cblxuaXNaZXJvTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBpc05hTk51bWJlcih4KSB7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4oeCk7XG59XG5cbmlzTmFOTnVtYmVyLnNpZ25hdHVyZSA9IG4xOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVCaWdOdW1iZXJDbGFzcyA9IHZvaWQgMDtcblxudmFyIF9kZWNpbWFsID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiZGVjaW1hbC5qc1wiKSk7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxudmFyIG5hbWUgPSAnQmlnTnVtYmVyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJz9vbicsICdjb25maWcnXTtcbnZhciBjcmVhdGVCaWdOdW1iZXJDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBvbiA9IF9yZWYub24sXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZztcblxuICB2YXIgQmlnTnVtYmVyID0gX2RlY2ltYWxbXCJkZWZhdWx0XCJdLmNsb25lKHtcbiAgICBwcmVjaXNpb246IGNvbmZpZy5wcmVjaXNpb25cbiAgfSk7XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIEJpZ051bWJlci5wcm90b3R5cGUudHlwZSA9ICdCaWdOdW1iZXInO1xuICBCaWdOdW1iZXIucHJvdG90eXBlLmlzQmlnTnVtYmVyID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgYSBCaWdOdW1iZXIgY29udGFpbmluZ1xuICAgKiB0eXBlIGluZm9ybWF0aW9uXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYSBKU09OIG9iamVjdCBzdHJ1Y3R1cmVkIGFzOlxuICAgKiAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiQmlnTnVtYmVyXCIsIFwidmFsdWVcIjogXCIwLjJcIn1gXG4gICAqL1xuXG4gIEJpZ051bWJlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdCaWdOdW1iZXInLFxuICAgICAgdmFsdWU6IHRoaXMudG9TdHJpbmcoKVxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhIEJpZ051bWJlciBmcm9tIGEgSlNPTiBvYmplY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIGEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczpcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJCaWdOdW1iZXJcIiwgXCJ2YWx1ZVwiOiBcIjAuMlwifWBcbiAgICogQHJldHVybiB7QmlnTnVtYmVyfVxuICAgKi9cblxuXG4gIEJpZ051bWJlci5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoanNvbi52YWx1ZSk7XG4gIH07XG5cbiAgaWYgKG9uKSB7XG4gICAgLy8gbGlzdGVuIGZvciBjaGFuZ2VkIGluIHRoZSBjb25maWd1cmF0aW9uLCBhdXRvbWF0aWNhbGx5IGFwcGx5IGNoYW5nZWQgcHJlY2lzaW9uXG4gICAgb24oJ2NvbmZpZycsIGZ1bmN0aW9uIChjdXJyLCBwcmV2KSB7XG4gICAgICBpZiAoY3Vyci5wcmVjaXNpb24gIT09IHByZXYucHJlY2lzaW9uKSB7XG4gICAgICAgIEJpZ051bWJlci5jb25maWcoe1xuICAgICAgICAgIHByZWNpc2lvbjogY3Vyci5wcmVjaXNpb25cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gQmlnTnVtYmVyO1xufSwge1xuICBpc0NsYXNzOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQmlnTnVtYmVyQ2xhc3MgPSBjcmVhdGVCaWdOdW1iZXJDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQmlnbnVtYmVyID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ2JpZ251bWJlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdCaWdOdW1iZXInXTtcbnZhciBjcmVhdGVCaWdudW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIEJpZ051bWJlciwgd2hpY2ggY2FuIHN0b3JlIG51bWJlcnMgd2l0aCBhcmJpdHJhcnkgcHJlY2lzaW9uLlxuICAgKiBXaGVuIGEgbWF0cml4IGlzIHByb3ZpZGVkLCBhbGwgZWxlbWVudHMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gQmlnTnVtYmVyLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYmlnbnVtYmVyKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAwLjEgKyAwLjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC4zMDAwMDAwMDAwMDAwMDAwNFxuICAgKiAgICBtYXRoLmJpZ251bWJlcigwLjEpICsgbWF0aC5iaWdudW1iZXIoMC4yKSAgLy8gcmV0dXJucyBCaWdOdW1iZXIgMC4zXG4gICAqXG4gICAqXG4gICAqICAgIDcuMmU1MDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciBJbmZpbml0eVxuICAgKiAgICBtYXRoLmJpZ251bWJlcignNy4yZTUwMCcpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBCaWdOdW1iZXIgNy4yZTUwMFxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYm9vbGVhbiwgY29tcGxleCwgaW5kZXgsIG1hdHJpeCwgc3RyaW5nLCB1bml0XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nIHwgRnJhY3Rpb24gfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeCB8IGJvb2xlYW4gfCBudWxsfSBbdmFsdWVdICBWYWx1ZSBmb3IgdGhlIGJpZyBudW1iZXIsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgYnkgZGVmYXVsdC5cbiAgICogQHJldHVybnMge0JpZ051bWJlcn0gVGhlIGNyZWF0ZWQgYmlnbnVtYmVyXG4gICAqL1xuICB2YXIgYmlnbnVtYmVyID0gdHlwZWQoJ2JpZ251bWJlcicsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKDApO1xuICAgIH0sXG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgLy8gY29udmVydCB0byBzdHJpbmcgdG8gcHJldmVudCBlcnJvcnMgaW4gY2FzZSBvZiA+MTUgZGlnaXRzXG4gICAgICByZXR1cm4gbmV3IEJpZ051bWJlcih4ICsgJycpO1xuICAgIH0sXG4gICAgc3RyaW5nOiBmdW5jdGlvbiBzdHJpbmcoeCkge1xuICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICAvLyB3ZSBhc3N1bWUgYSBCaWdOdW1iZXIgaXMgaW1tdXRhYmxlXG4gICAgICByZXR1cm4geDtcbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4gbmV3IEJpZ051bWJlcih4Lm4pLmRpdih4LmQpLnRpbWVzKHgucyk7XG4gICAgfSxcbiAgICBcIm51bGxcIjogZnVuY3Rpb24gX251bGwoeCkge1xuICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoMCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGJpZ251bWJlcik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGJpZ251bWJlcjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVCaWdudW1iZXIgPSBjcmVhdGVCaWdudW1iZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJvb2xlYW4gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAnYm9vbGVhbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUJvb2xlYW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBib29sZWFuIG9yIGNvbnZlcnQgYSBzdHJpbmcgb3IgbnVtYmVyIHRvIGEgYm9vbGVhbi5cbiAgICogSW4gY2FzZSBvZiBhIG51bWJlciwgYHRydWVgIGlzIHJldHVybmVkIGZvciBub24temVybyBudW1iZXJzLCBhbmQgYGZhbHNlYCBpblxuICAgKiBjYXNlIG9mIHplcm8uXG4gICAqIFN0cmluZ3MgY2FuIGJlIGAndHJ1ZSdgIG9yIGAnZmFsc2UnYCwgb3IgY2FuIGNvbnRhaW4gYSBudW1iZXIuXG4gICAqIFdoZW4gdmFsdWUgaXMgYSBtYXRyaXgsIGFsbCBlbGVtZW50cyB3aWxsIGJlIGNvbnZlcnRlZCB0byBib29sZWFuLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYm9vbGVhbih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5ib29sZWFuKDApICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguYm9vbGVhbigxKSAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguYm9vbGVhbigtMykgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmJvb2xlYW4oJ3RydWUnKSAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguYm9vbGVhbignZmFsc2UnKSAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmJvb2xlYW4oWzEsIDAsIDEsIDFdKSAgICAgLy8gcmV0dXJucyBbdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWVdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaWdudW1iZXIsIGNvbXBsZXgsIGluZGV4LCBtYXRyaXgsIHN0cmluZywgdW5pdFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IGJvb2xlYW4gfCBBcnJheSB8IE1hdHJpeCB8IG51bGx9IHZhbHVlICBBIHZhbHVlIG9mIGFueSB0eXBlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH0gVGhlIGJvb2xlYW4gdmFsdWVcbiAgICovXG4gIHZhciBib29sID0gdHlwZWQobmFtZSwge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgXCJib29sZWFuXCI6IGZ1bmN0aW9uIGJvb2xlYW4oeCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfSxcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4gISF4O1xuICAgIH0sXG4gICAgXCJudWxsXCI6IGZ1bmN0aW9uIF9udWxsKHgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiAheC5pc1plcm8oKTtcbiAgICB9LFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHtcbiAgICAgIC8vIHRyeSBjYXNlIGluc2Vuc2l0aXZlXG4gICAgICB2YXIgbGNhc2UgPSB4LnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgIGlmIChsY2FzZSA9PT0gJ3RydWUnKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChsY2FzZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9IC8vIHRlc3Qgd2hldGhlciB2YWx1ZSBpcyBhIHZhbGlkIG51bWJlclxuXG5cbiAgICAgIHZhciBudW0gPSBOdW1iZXIoeCk7XG5cbiAgICAgIGlmICh4ICE9PSAnJyAmJiAhaXNOYU4obnVtKSkge1xuICAgICAgICByZXR1cm4gISFudW07XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgXCInICsgeCArICdcIiB0byBhIGJvb2xlYW4nKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYm9vbCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGJvb2w7XG59KTtcbmV4cG9ydHMuY3JlYXRlQm9vbGVhbiA9IGNyZWF0ZUJvb2xlYW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNoYWluQ2xhc3MgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnQ2hhaW4nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnP29uJywgJ21hdGgnXTtcbnZhciBjcmVhdGVDaGFpbkNsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIG9uID0gX3JlZi5vbixcbiAgICAgIG1hdGggPSBfcmVmLm1hdGg7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBDaGFpblxuICAgKiBXcmFwIGFueSB2YWx1ZSBpbiBhIGNoYWluLCBhbGxvd2luZyB0byBwZXJmb3JtIGNoYWluZWQgb3BlcmF0aW9ucyBvblxuICAgKiB0aGUgdmFsdWUuXG4gICAqXG4gICAqIEFsbCBtZXRob2RzIGF2YWlsYWJsZSBpbiB0aGUgbWF0aC5qcyBsaWJyYXJ5IGNhbiBiZSBjYWxsZWQgdXBvbiB0aGUgY2hhaW4sXG4gICAqIGFuZCB0aGVuIHdpbGwgYmUgZXZhbHVhdGVkIHdpdGggdGhlIHZhbHVlIGl0c2VsZiBhcyBmaXJzdCBhcmd1bWVudC5cbiAgICogVGhlIGNoYWluIGNhbiBiZSBjbG9zZWQgYnkgZXhlY3V0aW5nIGNoYWluLmRvbmUoKSwgd2hpY2ggd2lsbCByZXR1cm5cbiAgICogdGhlIGZpbmFsIHZhbHVlLlxuICAgKlxuICAgKiBUaGUgQ2hhaW4gaGFzIGEgbnVtYmVyIG9mIHNwZWNpYWwgZnVuY3Rpb25zOlxuICAgKiAtIGRvbmUoKSAgICAgICAgICAgICBGaW5hbGl6ZSB0aGUgY2hhaW5lZCBvcGVyYXRpb24gYW5kIHJldHVybiB0aGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgY2hhaW4ncyB2YWx1ZS5cbiAgICogLSB2YWx1ZU9mKCkgICAgICAgICAgVGhlIHNhbWUgYXMgZG9uZSgpXG4gICAqIC0gdG9TdHJpbmcoKSAgICAgICAgIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGNoYWluJ3MgdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gW3ZhbHVlXVxuICAgKi9cbiAgZnVuY3Rpb24gQ2hhaW4odmFsdWUpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQ2hhaW4pKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2lzLmlzQ2hhaW4pKHZhbHVlKSkge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlLnZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIENoYWluLnByb3RvdHlwZS50eXBlID0gJ0NoYWluJztcbiAgQ2hhaW4ucHJvdG90eXBlLmlzQ2hhaW4gPSB0cnVlO1xuICAvKipcbiAgICogQ2xvc2UgdGhlIGNoYWluLiBSZXR1cm5zIHRoZSBmaW5hbCB2YWx1ZS5cbiAgICogRG9lcyB0aGUgc2FtZSBhcyBtZXRob2QgdmFsdWVPZigpXG4gICAqIEByZXR1cm5zIHsqfSB2YWx1ZVxuICAgKi9cblxuICBDaGFpbi5wcm90b3R5cGUuZG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfTtcbiAgLyoqXG4gICAqIENsb3NlIHRoZSBjaGFpbi4gUmV0dXJucyB0aGUgZmluYWwgdmFsdWUuXG4gICAqIERvZXMgdGhlIHNhbWUgYXMgbWV0aG9kIGRvbmUoKVxuICAgKiBAcmV0dXJucyB7Kn0gdmFsdWVcbiAgICovXG5cblxuICBDaGFpbi5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWUgaW4gdGhlIGNoYWluXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgQ2hhaW4ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAoMCwgX3N0cmluZy5mb3JtYXQpKHRoaXMudmFsdWUpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgY2hhaW5cbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBDaGFpbi5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdDaGFpbicsXG4gICAgICB2YWx1ZTogdGhpcy52YWx1ZVxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhIENoYWluIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJDaGFpblwiLCB2YWx1ZTogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0NoYWlufVxuICAgKi9cblxuXG4gIENoYWluLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IENoYWluKGpzb24udmFsdWUpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgcHJveHkgbWV0aG9kIGZvciB0aGUgY2hhaW5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICAgICBUaGUgZnVuY3Rpb24gdG8gYmUgcHJveGllZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIGZuIGlzIG5vIGZ1bmN0aW9uLCBpdCBpcyBzaWxlbnRseSBpZ25vcmVkLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNyZWF0ZVByb3h5KG5hbWUsIGZuKSB7XG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgQ2hhaW4ucHJvdG90eXBlW25hbWVdID0gY2hhaW5pZnkoZm4pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgcHJveHkgbWV0aG9kIGZvciB0aGUgY2hhaW5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gcmVzb2x2ZXIgICBUaGUgZnVuY3Rpb24gcmVzb2x2aW5nIHdpdGggdGhlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gdG8gYmUgcHJveGllZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUxhenlQcm94eShuYW1lLCByZXNvbHZlcikge1xuICAgICgwLCBfb2JqZWN0LmxhenkpKENoYWluLnByb3RvdHlwZSwgbmFtZSwgZnVuY3Rpb24gb3V0ZXJSZXNvbHZlcigpIHtcbiAgICAgIHZhciBmbiA9IHJlc29sdmVyKCk7XG5cbiAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmV0dXJuIGNoYWluaWZ5KGZuKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDsgLy8gaWYgbm90IGEgZnVuY3Rpb24sIGlnbm9yZVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBNYWtlIGEgZnVuY3Rpb24gY2hhaW5hYmxlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufSBjaGFpbiBmdW5jdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNoYWluaWZ5KGZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBhcmdzID0gW3RoaXMudmFsdWVdOyAvLyBgdGhpc2Agd2lsbCBiZSB0aGUgY29udGV4dCBvZiBhIENoYWluIGluc3RhbmNlXG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFyZ3NbaSArIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENoYWluKGZuLmFwcGx5KGZuLCBhcmdzKSk7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgcHJveHkgZm9yIGEgc2luZ2xlIG1ldGhvZCwgb3IgYW4gb2JqZWN0IHdpdGggbXVsdGlwbGUgbWV0aG9kcy5cbiAgICogRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICBDaGFpbi5jcmVhdGVQcm94eSgnYWRkJywgZnVuY3Rpb24gYWRkICh4LCB5KSB7Li4ufSlcbiAgICogICBDaGFpbi5jcmVhdGVQcm94eSh7XG4gICAqICAgICBhZGQ6ICAgICAgZnVuY3Rpb24gYWRkICh4LCB5KSB7Li4ufSxcbiAgICogICAgIHN1YnRyYWN0OiBmdW5jdGlvbiBzdWJ0cmFjdCAoeCwgeSkgey4uLn1cbiAgICogICB9XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgT2JqZWN0fSBhcmcwICAgQSBuYW1lIChzdHJpbmcpLCBvciBhbiBvYmplY3Qgd2l0aFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uc1xuICAgKiBAcGFyYW0geyp9IFthcmcxXSAgICAgICAgICAgICAgIEEgZnVuY3Rpb24sIHdoZW4gYXJnMCBpcyBhIG5hbWVcbiAgICovXG5cblxuICBDaGFpbi5jcmVhdGVQcm94eSA9IGZ1bmN0aW9uIChhcmcwLCBhcmcxKSB7XG4gICAgaWYgKHR5cGVvZiBhcmcwID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gY3JlYXRlUHJveHkobmFtZSwgdmFsdWUpXG4gICAgICBjcmVhdGVQcm94eShhcmcwLCBhcmcxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoX25hbWUpIHtcbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShhcmcwLCBfbmFtZSkgJiYgZXhjbHVkZWROYW1lc1tfbmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGNyZWF0ZUxhenlQcm94eShfbmFtZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyZzBbX25hbWVdO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAvLyBjcmVhdGVQcm94eSh2YWx1ZXMpXG4gICAgICBmb3IgKHZhciBfbmFtZSBpbiBhcmcwKSB7XG4gICAgICAgIF9sb29wKF9uYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdmFyIGV4Y2x1ZGVkTmFtZXMgPSB7XG4gICAgZXhwcmVzc2lvbjogdHJ1ZSxcbiAgICBkb2NzOiB0cnVlLFxuICAgIHR5cGU6IHRydWUsXG4gICAgY2xhc3NlczogdHJ1ZSxcbiAgICBqc29uOiB0cnVlLFxuICAgIGVycm9yOiB0cnVlLFxuICAgIGlzQ2hhaW46IHRydWUgLy8gY29uZmxpY3RzIHdpdGggdGhlIHByb3BlcnR5IGlzQ2hhaW4gb2YgYSBDaGFpbiBpbnN0YW5jZVxuXG4gIH07IC8vIGNyZWF0ZSBwcm94eSBmb3IgZXZlcnl0aGluZyB0aGF0IGlzIGluIG1hdGguanNcblxuICBDaGFpbi5jcmVhdGVQcm94eShtYXRoKTsgLy8gcmVnaXN0ZXIgb24gdGhlIGltcG9ydCBldmVudCwgYXV0b21hdGljYWxseSBhZGQgYSBwcm94eSBmb3IgZXZlcnkgaW1wb3J0ZWQgZnVuY3Rpb24uXG5cbiAgaWYgKG9uKSB7XG4gICAgb24oJ2ltcG9ydCcsIGZ1bmN0aW9uIChuYW1lLCByZXNvbHZlciwgcGF0aCkge1xuICAgICAgaWYgKCFwYXRoKSB7XG4gICAgICAgIC8vIGFuIGltcG9ydGVkIGZ1bmN0aW9uIChub3QgYSBkYXRhIHR5cGUgb3Igc29tZXRoaW5nIHNwZWNpYWwpXG4gICAgICAgIGNyZWF0ZUxhenlQcm94eShuYW1lLCByZXNvbHZlcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gQ2hhaW47XG59LCB7XG4gIGlzQ2xhc3M6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDaGFpbkNsYXNzID0gY3JlYXRlQ2hhaW5DbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ2hhaW4gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdjaGFpbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdDaGFpbiddO1xudmFyIGNyZWF0ZUNoYWluID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIENoYWluID0gX3JlZi5DaGFpbjtcblxuICAvKipcbiAgICogV3JhcCBhbnkgdmFsdWUgaW4gYSBjaGFpbiwgYWxsb3dpbmcgdG8gcGVyZm9ybSBjaGFpbmVkIG9wZXJhdGlvbnMgb25cbiAgICogdGhlIHZhbHVlLlxuICAgKlxuICAgKiBBbGwgbWV0aG9kcyBhdmFpbGFibGUgaW4gdGhlIG1hdGguanMgbGlicmFyeSBjYW4gYmUgY2FsbGVkIHVwb24gdGhlIGNoYWluLFxuICAgKiBhbmQgdGhlbiB3aWxsIGJlIGV2YWx1YXRlZCB3aXRoIHRoZSB2YWx1ZSBpdHNlbGYgYXMgZmlyc3QgYXJndW1lbnQuXG4gICAqIFRoZSBjaGFpbiBjYW4gYmUgY2xvc2VkIGJ5IGV4ZWN1dGluZyBgY2hhaW4uZG9uZSgpYCwgd2hpY2ggcmV0dXJuc1xuICAgKiB0aGUgZmluYWwgdmFsdWUuXG4gICAqXG4gICAqIFRoZSBjaGFpbiBoYXMgYSBudW1iZXIgb2Ygc3BlY2lhbCBmdW5jdGlvbnM6XG4gICAqXG4gICAqIC0gYGRvbmUoKWAgICAgIEZpbmFsaXplIHRoZSBjaGFpbiBhbmQgcmV0dXJuIHRoZSBjaGFpbidzIHZhbHVlLlxuICAgKiAtIGB2YWx1ZU9mKClgICBUaGUgc2FtZSBhcyBgZG9uZSgpYFxuICAgKiAtIGB0b1N0cmluZygpYCBFeGVjdXRlcyBgbWF0aC5mb3JtYXQoKWAgb250byB0aGUgY2hhaW4ncyB2YWx1ZSwgcmV0dXJuaW5nXG4gICAqICAgICAgICAgICAgICAgIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB2YWx1ZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNoYWluKHZhbHVlKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGguY2hhaW4oMylcbiAgICogICAgICAgICAuYWRkKDQpXG4gICAqICAgICAgICAgLnN1YnRyYWN0KDIpXG4gICAqICAgICAgICAgLmRvbmUoKSAgICAgLy8gNVxuICAgKlxuICAgKiAgICAgbWF0aC5jaGFpbiggW1sxLCAyXSwgWzMsIDRdXSApXG4gICAqICAgICAgICAgLnN1YnNldChtYXRoLmluZGV4KDAsIDApLCA4KVxuICAgKiAgICAgICAgIC5tdWx0aXBseSgzKVxuICAgKiAgICAgICAgIC5kb25lKCkgICAgIC8vIFtbMjQsIDZdLCBbOSwgMTJdXVxuICAgKlxuICAgKiBAcGFyYW0geyp9IFt2YWx1ZV0gICBBIHZhbHVlIG9mIGFueSB0eXBlIG9uIHdoaWNoIHRvIHN0YXJ0IGEgY2hhaW5lZCBvcGVyYXRpb24uXG4gICAqIEByZXR1cm4ge21hdGguQ2hhaW59IFRoZSBjcmVhdGVkIGNoYWluXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIG5ldyBDaGFpbigpO1xuICAgIH0sXG4gICAgYW55OiBmdW5jdGlvbiBhbnkodmFsdWUpIHtcbiAgICAgIHJldHVybiBuZXcgQ2hhaW4odmFsdWUpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ2hhaW4gPSBjcmVhdGVDaGFpbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29tcGxleENsYXNzID0gdm9pZCAwO1xuXG52YXIgX2NvbXBsZXggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJjb21wbGV4LmpzXCIpKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxudmFyIG5hbWUgPSAnQ29tcGxleCc7XG52YXIgZGVwZW5kZW5jaWVzID0gW107XG52YXIgY3JlYXRlQ29tcGxleENsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQXR0YWNoIHR5cGUgaW5mb3JtYXRpb25cbiAgICovXG4gIF9jb21wbGV4W1wiZGVmYXVsdFwiXS5wcm90b3R5cGUudHlwZSA9ICdDb21wbGV4JztcbiAgX2NvbXBsZXhbXCJkZWZhdWx0XCJdLnByb3RvdHlwZS5pc0NvbXBsZXggPSB0cnVlO1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tcGxleCBudW1iZXJcbiAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBhIEpTT04gb2JqZWN0IHN0cnVjdHVyZWQgYXM6XG4gICAqICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJDb21wbGV4XCIsIFwicmVcIjogMiwgXCJpbVwiOiAzfWBcbiAgICovXG5cbiAgX2NvbXBsZXhbXCJkZWZhdWx0XCJdLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ0NvbXBsZXgnLFxuICAgICAgcmU6IHRoaXMucmUsXG4gICAgICBpbTogdGhpcy5pbVxuICAgIH07XG4gIH07XG4gIC8qXG4gICAqIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGNvbXBsZXggbnVtYmVyIGluIHBvbGFyIG5vdGF0aW9uXG4gICAqIFRoZSBhbmdsZSBwaGkgd2lsbCBiZSBzZXQgaW4gdGhlIGludGVydmFsIG9mIFstcGksIHBpXS5cbiAgICogQHJldHVybiB7e3I6IG51bWJlciwgcGhpOiBudW1iZXJ9fSBSZXR1cm5zIGFuZCBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIHIgYW5kIHBoaS5cbiAgICovXG5cblxuICBfY29tcGxleFtcImRlZmF1bHRcIl0ucHJvdG90eXBlLnRvUG9sYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHI6IHRoaXMuYWJzKCksXG4gICAgICBwaGk6IHRoaXMuYXJnKClcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjb21wbGV4IG51bWJlcixcbiAgICogd2l0aCBvcHRpb25hbCBmb3JtYXR0aW5nIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvdXRpbHMvbnVtYmVyOmZvcm1hdCBmb3IgYVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIF9jb21wbGV4W1wiZGVmYXVsdFwiXS5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgc3RyID0gJyc7XG4gICAgdmFyIGltID0gdGhpcy5pbTtcbiAgICB2YXIgcmUgPSB0aGlzLnJlO1xuICAgIHZhciBzdHJSZSA9ICgwLCBfbnVtYmVyLmZvcm1hdCkodGhpcy5yZSwgb3B0aW9ucyk7XG4gICAgdmFyIHN0ckltID0gKDAsIF9udW1iZXIuZm9ybWF0KSh0aGlzLmltLCBvcHRpb25zKTsgLy8gcm91bmQgZWl0aGVyIHJlIG9yIGltIHdoZW4gc21hbGxlciB0aGFuIHRoZSBjb25maWd1cmVkIHByZWNpc2lvblxuXG4gICAgdmFyIHByZWNpc2lvbiA9ICgwLCBfaXMuaXNOdW1iZXIpKG9wdGlvbnMpID8gb3B0aW9ucyA6IG9wdGlvbnMgPyBvcHRpb25zLnByZWNpc2lvbiA6IG51bGw7XG5cbiAgICBpZiAocHJlY2lzaW9uICE9PSBudWxsKSB7XG4gICAgICB2YXIgZXBzaWxvbiA9IE1hdGgucG93KDEwLCAtcHJlY2lzaW9uKTtcblxuICAgICAgaWYgKE1hdGguYWJzKHJlIC8gaW0pIDwgZXBzaWxvbikge1xuICAgICAgICByZSA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmIChNYXRoLmFicyhpbSAvIHJlKSA8IGVwc2lsb24pIHtcbiAgICAgICAgaW0gPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbSA9PT0gMCkge1xuICAgICAgLy8gcmVhbCB2YWx1ZVxuICAgICAgc3RyID0gc3RyUmU7XG4gICAgfSBlbHNlIGlmIChyZSA9PT0gMCkge1xuICAgICAgLy8gcHVyZWx5IGNvbXBsZXggdmFsdWVcbiAgICAgIGlmIChpbSA9PT0gMSkge1xuICAgICAgICBzdHIgPSAnaSc7XG4gICAgICB9IGVsc2UgaWYgKGltID09PSAtMSkge1xuICAgICAgICBzdHIgPSAnLWknO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RyID0gc3RySW0gKyAnaSc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGNvbXBsZXggdmFsdWVcbiAgICAgIGlmIChpbSA8IDApIHtcbiAgICAgICAgaWYgKGltID09PSAtMSkge1xuICAgICAgICAgIHN0ciA9IHN0clJlICsgJyAtIGknO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ciA9IHN0clJlICsgJyAtICcgKyBzdHJJbS5zdWJzdHJpbmcoMSkgKyAnaSc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpbSA9PT0gMSkge1xuICAgICAgICAgIHN0ciA9IHN0clJlICsgJyArIGknO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHN0ciA9IHN0clJlICsgJyArICcgKyBzdHJJbSArICdpJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdHI7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjb21wbGV4IG51bWJlciBmcm9tIHBvbGFyIGNvb3JkaW5hdGVzXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKlxuICAgKiAgICAgQ29tcGxleC5mcm9tUG9sYXIocjogbnVtYmVyLCBwaGk6IG51bWJlcikgOiBDb21wbGV4XG4gICAqICAgICBDb21wbGV4LmZyb21Qb2xhcih7cjogbnVtYmVyLCBwaGk6IG51bWJlcn0pIDogQ29tcGxleFxuICAgKlxuICAgKiBAcGFyYW0geyp9IGFyZ3MuLi5cbiAgICogQHJldHVybiB7Q29tcGxleH1cbiAgICovXG5cblxuICBfY29tcGxleFtcImRlZmF1bHRcIl0uZnJvbVBvbGFyID0gZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAge1xuICAgICAgICAgIHZhciBhcmcgPSBhcmd1bWVudHNbMF07XG5cbiAgICAgICAgICBpZiAoX3R5cGVvZihhcmcpID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuICgwLCBfY29tcGxleFtcImRlZmF1bHRcIl0pKGFyZyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0lucHV0IGhhcyB0byBiZSBhbiBvYmplY3Qgd2l0aCByIGFuZCBwaGkga2V5cy4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAyOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIHIgPSBhcmd1bWVudHNbMF07XG4gICAgICAgICAgdmFyIHBoaSA9IGFyZ3VtZW50c1sxXTtcblxuICAgICAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShyKSkge1xuICAgICAgICAgICAgaWYgKCgwLCBfaXMuaXNVbml0KShwaGkpICYmIHBoaS5oYXNCYXNlKCdBTkdMRScpKSB7XG4gICAgICAgICAgICAgIC8vIGNvbnZlcnQgdW5pdCB0byBhIG51bWJlciBpbiByYWRpYW5zXG4gICAgICAgICAgICAgIHBoaSA9IHBoaS50b051bWJlcigncmFkJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShwaGkpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgX2NvbXBsZXhbXCJkZWZhdWx0XCJdKHtcbiAgICAgICAgICAgICAgICByOiByLFxuICAgICAgICAgICAgICAgIHBoaTogcGhpXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQaGkgaXMgbm90IGEgbnVtYmVyIG5vciBhbiBhbmdsZSB1bml0LicpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSYWRpdXMgciBpcyBub3QgYSBudW1iZXIuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBpbiBmdW5jdGlvbiBmcm9tUG9sYXInKTtcbiAgICB9XG4gIH07XG5cbiAgX2NvbXBsZXhbXCJkZWZhdWx0XCJdLnByb3RvdHlwZS52YWx1ZU9mID0gX2NvbXBsZXhbXCJkZWZhdWx0XCJdLnByb3RvdHlwZS50b1N0cmluZztcbiAgLyoqXG4gICAqIENyZWF0ZSBhIENvbXBsZXggbnVtYmVyIGZyb20gYSBKU09OIG9iamVjdFxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQSBKU09OIE9iamVjdCBzdHJ1Y3R1cmVkIGFzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB7XCJtYXRoanNcIjogXCJDb21wbGV4XCIsIFwicmVcIjogMiwgXCJpbVwiOiAzfVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgQWxsIHByb3BlcnRpZXMgYXJlIG9wdGlvbmFsLCBkZWZhdWx0IHZhbHVlc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgZm9yIGByZWAgYW5kIGBpbWAgYXJlIDAuXG4gICAqIEByZXR1cm4ge0NvbXBsZXh9IFJldHVybnMgYSBuZXcgQ29tcGxleCBudW1iZXJcbiAgICovXG5cbiAgX2NvbXBsZXhbXCJkZWZhdWx0XCJdLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IF9jb21wbGV4W1wiZGVmYXVsdFwiXShqc29uKTtcbiAgfTtcbiAgLyoqXG4gICAqIENvbXBhcmUgdHdvIGNvbXBsZXggbnVtYmVycywgYGFgIGFuZCBgYmA6XG4gICAqXG4gICAqIC0gUmV0dXJucyAxIHdoZW4gdGhlIHJlYWwgcGFydCBvZiBgYWAgaXMgbGFyZ2VyIHRoYW4gdGhlIHJlYWwgcGFydCBvZiBgYmBcbiAgICogLSBSZXR1cm5zIC0xIHdoZW4gdGhlIHJlYWwgcGFydCBvZiBgYWAgaXMgc21hbGxlciB0aGFuIHRoZSByZWFsIHBhcnQgb2YgYGJgXG4gICAqIC0gUmV0dXJucyAxIHdoZW4gdGhlIHJlYWwgcGFydHMgYXJlIGVxdWFsXG4gICAqICAgYW5kIHRoZSBpbWFnaW5hcnkgcGFydCBvZiBgYWAgaXMgbGFyZ2VyIHRoYW4gdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGBiYFxuICAgKiAtIFJldHVybnMgLTEgd2hlbiB0aGUgcmVhbCBwYXJ0cyBhcmUgZXF1YWxcbiAgICogICBhbmQgdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGBhYCBpcyBzbWFsbGVyIHRoYW4gdGhlIGltYWdpbmFyeSBwYXJ0IG9mIGBiYFxuICAgKiAtIFJldHVybnMgMCB3aGVuIGJvdGggcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnRzIGFyZSBlcXVhbC5cbiAgICpcbiAgICogQHBhcmFtcyB7Q29tcGxleH0gYVxuICAgKiBAcGFyYW1zIHtDb21wbGV4fSBiXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbXBhcmlzb24gcmVzdWx0OiAtMSwgMCwgb3IgMVxuICAgKi9cblxuXG4gIF9jb21wbGV4W1wiZGVmYXVsdFwiXS5jb21wYXJlID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICBpZiAoYS5yZSA+IGIucmUpIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGlmIChhLnJlIDwgYi5yZSkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIGlmIChhLmltID4gYi5pbSkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgaWYgKGEuaW0gPCBiLmltKSB7XG4gICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH07XG5cbiAgcmV0dXJuIF9jb21wbGV4W1wiZGVmYXVsdFwiXTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbXBsZXhDbGFzcyA9IGNyZWF0ZUNvbXBsZXhDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29tcGxleCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgbmFtZSA9ICdjb21wbGV4JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0NvbXBsZXgnXTtcbnZhciBjcmVhdGVDb21wbGV4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIENvbXBsZXggPSBfcmVmLkNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNvbXBsZXggdmFsdWUgb3IgY29udmVydCBhIHZhbHVlIHRvIGEgY29tcGxleCB2YWx1ZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5jb21wbGV4KCkgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjcmVhdGVzIGEgY29tcGxleCB2YWx1ZSB3aXRoIHplcm9cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXMgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQuXG4gICAqICAgICBtYXRoLmNvbXBsZXgocmUgOiBudW1iZXIsIGltIDogc3RyaW5nKSAgIC8vIGNyZWF0ZXMgYSBjb21wbGV4IHZhbHVlIHdpdGggcHJvdmlkZWRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWVzIGZvciByZWFsIGFuZCBpbWFnaW5hcnkgcGFydC5cbiAgICogICAgIG1hdGguY29tcGxleChyZSA6IG51bWJlcikgICAgICAgICAgICAgICAgLy8gY3JlYXRlcyBhIGNvbXBsZXggdmFsdWUgd2l0aCBwcm92aWRlZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWFsIHZhbHVlIGFuZCB6ZXJvIGltYWdpbmFyeSBwYXJ0LlxuICAgKiAgICAgbWF0aC5jb21wbGV4KGNvbXBsZXggOiBDb21wbGV4KSAgICAgICAgICAvLyBjbG9uZXMgdGhlIHByb3ZpZGVkIGNvbXBsZXggdmFsdWUuXG4gICAqICAgICBtYXRoLmNvbXBsZXgoYXJnIDogc3RyaW5nKSAgICAgICAgICAgICAgIC8vIHBhcnNlcyBhIHN0cmluZyBpbnRvIGEgY29tcGxleCB2YWx1ZS5cbiAgICogICAgIG1hdGguY29tcGxleChhcnJheSA6IEFycmF5KSAgICAgICAgICAgICAgLy8gY29udmVydHMgdGhlIGVsZW1lbnRzIG9mIHRoZSBhcnJheVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvciBtYXRyaXggZWxlbWVudCB3aXNlIGludG8gYVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb21wbGV4IHZhbHVlLlxuICAgKiAgICAgbWF0aC5jb21wbGV4KHtyZTogbnVtYmVyLCBpbTogbnVtYmVyfSkgICAvLyBjcmVhdGVzIGEgY29tcGxleCB2YWx1ZSB3aXRoIHByb3ZpZGVkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlcyBmb3IgcmVhbCBhbiBpbWFnaW5hcnkgcGFydC5cbiAgICogICAgIG1hdGguY29tcGxleCh7cjogbnVtYmVyLCBwaGk6IG51bWJlcn0pICAgLy8gY3JlYXRlcyBhIGNvbXBsZXggdmFsdWUgd2l0aCBwcm92aWRlZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwb2xhciBjb29yZGluYXRlc1xuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCgzLCAtNCkgICAgIC8vIGEgPSBDb21wbGV4IDMgLSA0aVxuICAgKiAgICBhLnJlID0gNSAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSA9IENvbXBsZXggNSAtIDRpXG4gICAqICAgIGNvbnN0IGkgPSBhLmltICAgICAgICAgICAgICAgICAgICAvLyBOdW1iZXIgLTRcbiAgICogICAgY29uc3QgYiA9IG1hdGguY29tcGxleCgnMiArIDZpJykgIC8vIENvbXBsZXggMiArIDZpXG4gICAqICAgIGNvbnN0IGMgPSBtYXRoLmNvbXBsZXgoKSAgICAgICAgICAvLyBDb21wbGV4IDAgKyAwaVxuICAgKiAgICBjb25zdCBkID0gbWF0aC5hZGQoYSwgYikgICAgICAgICAgLy8gQ29tcGxleCA1ICsgMmlcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGJpZ251bWJlciwgYm9vbGVhbiwgaW5kZXgsIG1hdHJpeCwgbnVtYmVyLCBzdHJpbmcsIHVuaXRcbiAgICpcbiAgICogQHBhcmFtIHsqIHwgQXJyYXkgfCBNYXRyaXh9IFthcmdzXVxuICAgKiAgICAgICAgICAgIEFyZ3VtZW50cyBzcGVjaWZ5aW5nIHRoZSByZWFsIGFuZCBpbWFnaW5hcnkgcGFydCBvZiB0aGUgY29tcGxleCBudW1iZXJcbiAgICogQHJldHVybiB7Q29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBSZXR1cm5zIGEgY29tcGxleCB2YWx1ZVxuICAgKi9cbiAgdmFyIGNvbXBsZXggPSB0eXBlZCgnY29tcGxleCcsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiBDb21wbGV4LlpFUk87XG4gICAgfSxcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoeCwgMCk7XG4gICAgfSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIocmUsIGltKSB7XG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgocmUsIGltKTtcbiAgICB9LFxuICAgIC8vIFRPRE86IHRoaXMgc2lnbmF0dXJlIHNob3VsZCBiZSByZWR1bmRhbnRcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIocmUsIGltKSB7XG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgocmUudG9OdW1iZXIoKSwgaW0udG9OdW1iZXIoKSk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgudmFsdWVPZigpLCAwKTtcbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguY2xvbmUoKTtcbiAgICB9LFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHtcbiAgICAgIHJldHVybiBDb21wbGV4KHgpOyAvLyBmb3IgZXhhbXBsZSAnMiArIDNpJ1xuICAgIH0sXG4gICAgXCJudWxsXCI6IGZ1bmN0aW9uIF9udWxsKHgpIHtcbiAgICAgIHJldHVybiBDb21wbGV4KDApO1xuICAgIH0sXG4gICAgT2JqZWN0OiBmdW5jdGlvbiBPYmplY3QoeCkge1xuICAgICAgaWYgKCdyZScgaW4geCAmJiAnaW0nIGluIHgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgucmUsIHguaW0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoJ3InIGluIHggJiYgJ3BoaScgaW4geCB8fCAnYWJzJyBpbiB4ICYmICdhcmcnIGluIHgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgpO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgKHJlIGFuZCBpbSkgb3IgKHIgYW5kIHBoaSkgb3IgKGFicyBhbmQgYXJnKScpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBjb21wbGV4KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY29tcGxleDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wbGV4ID0gY3JlYXRlQ29tcGxleDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRnJhY3Rpb25DbGFzcyA9IHZvaWQgMDtcblxudmFyIF9mcmFjdGlvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcImZyYWN0aW9uLmpzXCIpKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG52YXIgbmFtZSA9ICdGcmFjdGlvbic7XG52YXIgZGVwZW5kZW5jaWVzID0gW107XG52YXIgY3JlYXRlRnJhY3Rpb25DbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uXG4gICAqL1xuICBfZnJhY3Rpb25bXCJkZWZhdWx0XCJdLnByb3RvdHlwZS50eXBlID0gJ0ZyYWN0aW9uJztcbiAgX2ZyYWN0aW9uW1wiZGVmYXVsdFwiXS5wcm90b3R5cGUuaXNGcmFjdGlvbiA9IHRydWU7XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgRnJhY3Rpb24gY29udGFpbmluZyB0eXBlIGluZm9ybWF0aW9uXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYSBKU09OIG9iamVjdCBzdHJ1Y3R1cmVkIGFzOlxuICAgKiAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiRnJhY3Rpb25cIiwgXCJuXCI6IDMsIFwiZFwiOiA4fWBcbiAgICovXG5cbiAgX2ZyYWN0aW9uW1wiZGVmYXVsdFwiXS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdGcmFjdGlvbicsXG4gICAgICBuOiB0aGlzLnMgKiB0aGlzLm4sXG4gICAgICBkOiB0aGlzLmRcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYSBGcmFjdGlvbiBmcm9tIGEgSlNPTiBvYmplY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIGEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczpcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJGcmFjdGlvblwiLCBcIm5cIjogMywgXCJkXCI6IDh9YFxuICAgKiBAcmV0dXJuIHtCaWdOdW1iZXJ9XG4gICAqL1xuXG5cbiAgX2ZyYWN0aW9uW1wiZGVmYXVsdFwiXS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBfZnJhY3Rpb25bXCJkZWZhdWx0XCJdKGpzb24pO1xuICB9O1xuXG4gIHJldHVybiBfZnJhY3Rpb25bXCJkZWZhdWx0XCJdO1xufSwge1xuICBpc0NsYXNzOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRnJhY3Rpb25DbGFzcyA9IGNyZWF0ZUZyYWN0aW9uQ2xhc3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZyYWN0aW9uID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ2ZyYWN0aW9uJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0ZyYWN0aW9uJ107XG52YXIgY3JlYXRlRnJhY3Rpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgRnJhY3Rpb24gPSBfcmVmLkZyYWN0aW9uO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBmcmFjdGlvbiBjb252ZXJ0IGEgdmFsdWUgdG8gYSBmcmFjdGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKiAgICAgbWF0aC5mcmFjdGlvbihudW1lcmF0b3IsIGRlbm9taW5hdG9yKVxuICAgKiAgICAgbWF0aC5mcmFjdGlvbih7bjogbnVtZXJhdG9yLCBkOiBkZW5vbWluYXRvcn0pXG4gICAqICAgICBtYXRoLmZyYWN0aW9uKG1hdHJpeDogQXJyYXkgfCBNYXRyaXgpICAgICAgICAgVHVybiBhbGwgbWF0cml4IGVudHJpZXNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRvIGZyYWN0aW9uc1xuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGguZnJhY3Rpb24oMSwgMylcbiAgICogICAgIG1hdGguZnJhY3Rpb24oJzIvMycpXG4gICAqICAgICBtYXRoLmZyYWN0aW9uKHtuOiAyLCBkOiAzfSlcbiAgICogICAgIG1hdGguZnJhY3Rpb24oWzAuMiwgMC4yNSwgMS4yNV0pXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaWdudW1iZXIsIG51bWJlciwgc3RyaW5nLCB1bml0XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nIHwgRnJhY3Rpb24gfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gW2FyZ3NdXG4gICAqICAgICAgICAgICAgQXJndW1lbnRzIHNwZWNpZnlpbmcgdGhlIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3Igb2ZcbiAgICogICAgICAgICAgICB0aGUgZnJhY3Rpb25cbiAgICogQHJldHVybiB7RnJhY3Rpb24gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyBhIGZyYWN0aW9uXG4gICAqL1xuICB2YXIgZnJhY3Rpb24gPSB0eXBlZCgnZnJhY3Rpb24nLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgaWYgKCFpc0Zpbml0ZSh4KSB8fCBpc05hTih4KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoeCArICcgY2Fubm90IGJlIHJlcHJlc2VudGVkIGFzIGEgZnJhY3Rpb24nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih4KTtcbiAgICB9LFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHtcbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oeCk7XG4gICAgfSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIobnVtZXJhdG9yLCBkZW5vbWluYXRvcikge1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihudW1lcmF0b3IsIGRlbm9taW5hdG9yKTtcbiAgICB9LFxuICAgIFwibnVsbFwiOiBmdW5jdGlvbiBfbnVsbCh4KSB7XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKDApO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih4LnRvU3RyaW5nKCkpO1xuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4OyAvLyBmcmFjdGlvbnMgYXJlIGltbXV0YWJsZVxuICAgIH0sXG4gICAgT2JqZWN0OiBmdW5jdGlvbiBPYmplY3QoeCkge1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbih4KTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgZnJhY3Rpb24pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBmcmFjdGlvbjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVGcmFjdGlvbiA9IGNyZWF0ZUZyYWN0aW9uOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEZW5zZU1hdHJpeENsYXNzID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnRGVuc2VNYXRyaXgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnTWF0cml4J107XG52YXIgY3JlYXRlRGVuc2VNYXRyaXhDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBNYXRyaXggPSBfcmVmLk1hdHJpeDtcblxuICAvKipcbiAgICogRGVuc2UgTWF0cml4IGltcGxlbWVudGF0aW9uLiBBIHJlZ3VsYXIsIGRlbnNlIG1hdHJpeCwgc3VwcG9ydGluZyBtdWx0aS1kaW1lbnNpb25hbCBtYXRyaWNlcy4gVGhpcyBpcyB0aGUgZGVmYXVsdCBtYXRyaXggdHlwZS5cbiAgICogQGNsYXNzIERlbnNlTWF0cml4XG4gICAqL1xuICBmdW5jdGlvbiBEZW5zZU1hdHJpeChkYXRhLCBkYXRhdHlwZSkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEZW5zZU1hdHJpeCkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGF0eXBlICYmICEoMCwgX2lzLmlzU3RyaW5nKShkYXRhdHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkYXRhdHlwZTogJyArIGRhdGF0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF9pcy5pc01hdHJpeCkoZGF0YSkpIHtcbiAgICAgIC8vIGNoZWNrIGRhdGEgaXMgYSBEZW5zZU1hdHJpeFxuICAgICAgaWYgKGRhdGEudHlwZSA9PT0gJ0RlbnNlTWF0cml4Jykge1xuICAgICAgICAvLyBjbG9uZSBkYXRhICYgc2l6ZVxuICAgICAgICB0aGlzLl9kYXRhID0gKDAsIF9vYmplY3QuY2xvbmUpKGRhdGEuX2RhdGEpO1xuICAgICAgICB0aGlzLl9zaXplID0gKDAsIF9vYmplY3QuY2xvbmUpKGRhdGEuX3NpemUpO1xuICAgICAgICB0aGlzLl9kYXRhdHlwZSA9IGRhdGF0eXBlIHx8IGRhdGEuX2RhdGF0eXBlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYnVpbGQgZGF0YSBmcm9tIGV4aXN0aW5nIG1hdHJpeFxuICAgICAgICB0aGlzLl9kYXRhID0gZGF0YS50b0FycmF5KCk7XG4gICAgICAgIHRoaXMuX3NpemUgPSBkYXRhLnNpemUoKTtcbiAgICAgICAgdGhpcy5fZGF0YXR5cGUgPSBkYXRhdHlwZSB8fCBkYXRhLl9kYXRhdHlwZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRhdGEgJiYgKDAsIF9pcy5pc0FycmF5KShkYXRhLmRhdGEpICYmICgwLCBfaXMuaXNBcnJheSkoZGF0YS5zaXplKSkge1xuICAgICAgLy8gaW5pdGlhbGl6ZSBmaWVsZHMgZnJvbSBKU09OIHJlcHJlc2VudGF0aW9uXG4gICAgICB0aGlzLl9kYXRhID0gZGF0YS5kYXRhO1xuICAgICAgdGhpcy5fc2l6ZSA9IGRhdGEuc2l6ZTsgLy8gdmVyaWZ5IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBhcnJheVxuXG4gICAgICAoMCwgX2FycmF5LnZhbGlkYXRlKSh0aGlzLl9kYXRhLCB0aGlzLl9zaXplKTtcbiAgICAgIHRoaXMuX2RhdGF0eXBlID0gZGF0YXR5cGUgfHwgZGF0YS5kYXRhdHlwZTtcbiAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNBcnJheSkoZGF0YSkpIHtcbiAgICAgIC8vIHJlcGxhY2UgbmVzdGVkIE1hdHJpY2VzIHdpdGggQXJyYXlzXG4gICAgICB0aGlzLl9kYXRhID0gcHJlcHJvY2VzcyhkYXRhKTsgLy8gZ2V0IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBhcnJheVxuXG4gICAgICB0aGlzLl9zaXplID0gKDAsIF9hcnJheS5hcnJheVNpemUpKHRoaXMuX2RhdGEpOyAvLyB2ZXJpZnkgdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGFycmF5LCBUT0RPOiBjb21wdXRlIHNpemUgd2hpbGUgcHJvY2Vzc2luZyBhcnJheVxuXG4gICAgICAoMCwgX2FycmF5LnZhbGlkYXRlKSh0aGlzLl9kYXRhLCB0aGlzLl9zaXplKTsgLy8gZGF0YSB0eXBlIHVua25vd25cblxuICAgICAgdGhpcy5fZGF0YXR5cGUgPSBkYXRhdHlwZTtcbiAgICB9IGVsc2UgaWYgKGRhdGEpIHtcbiAgICAgIC8vIHVuc3VwcG9ydGVkIHR5cGVcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vuc3VwcG9ydGVkIHR5cGUgb2YgZGF0YSAoJyArICgwLCBfaXMudHlwZU9mKShkYXRhKSArICcpJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG5vdGhpbmcgcHJvdmlkZWRcbiAgICAgIHRoaXMuX2RhdGEgPSBbXTtcbiAgICAgIHRoaXMuX3NpemUgPSBbMF07XG4gICAgICB0aGlzLl9kYXRhdHlwZSA9IGRhdGF0eXBlO1xuICAgIH1cbiAgfVxuXG4gIERlbnNlTWF0cml4LnByb3RvdHlwZSA9IG5ldyBNYXRyaXgoKTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBEZW5zZU1hdHJpeFxuICAgKi9cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuY3JlYXRlRGVuc2VNYXRyaXggPSBmdW5jdGlvbiAoZGF0YSwgZGF0YXR5cGUpIHtcbiAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KGRhdGEsIGRhdGF0eXBlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uXG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLnR5cGUgPSAnRGVuc2VNYXRyaXgnO1xuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuaXNEZW5zZU1hdHJpeCA9IHRydWU7XG4gIC8qKlxuICAgKiBHZXQgdGhlIG1hdHJpeCB0eXBlXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICBjb25zdCBtYXRyaXhUeXBlID0gbWF0cml4LmdldERhdGFUeXBlKCkgIC8vIHJldHJpZXZlcyB0aGUgbWF0cml4IHR5cGVcbiAgICpcbiAgICogQG1lbWJlck9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm4ge3N0cmluZ30gICB0eXBlIGluZm9ybWF0aW9uOyBpZiBtdWx0aXBsZSB0eXBlcyBhcmUgZm91bmQgZnJvbSB0aGUgTWF0cml4LCBpdCB3aWxsIHJldHVybiBcIm1peGVkXCJcbiAgICovXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLmdldERhdGFUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAoMCwgX2FycmF5LmdldEFycmF5RGF0YVR5cGUpKHRoaXMuX2RhdGEsIF9pcy50eXBlT2YpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHRoZSBzdG9yYWdlIGZvcm1hdCB1c2VkIGJ5IHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3QgZm9ybWF0ID0gbWF0cml4LnN0b3JhZ2UoKSAgLy8gcmV0cmlldmUgc3RvcmFnZSBmb3JtYXRcbiAgICpcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgIFRoZSBzdG9yYWdlIGZvcm1hdC5cbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuc3RvcmFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gJ2RlbnNlJztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgZGF0YXR5cGUgb2YgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3QgZm9ybWF0ID0gbWF0cml4LmRhdGF0eXBlKCkgICAvLyByZXRyaWV2ZSBtYXRyaXggZGF0YXR5cGVcbiAgICpcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgIFRoZSBkYXRhdHlwZS5cbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuZGF0YXR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGF0eXBlO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IERlbnNlTWF0cml4XG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcGFyYW0ge0FycmF5fSBkYXRhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGF0YXR5cGVdXG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uIChkYXRhLCBkYXRhdHlwZSkge1xuICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoZGF0YSwgZGF0YXR5cGUpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgc3Vic2V0IG9mIHRoZSBtYXRyaXgsIG9yIHJlcGxhY2UgYSBzdWJzZXQgb2YgdGhlIG1hdHJpeC5cbiAgICpcbiAgICogVXNhZ2U6XG4gICAqICAgICBjb25zdCBzdWJzZXQgPSBtYXRyaXguc3Vic2V0KGluZGV4KSAgICAgICAgICAgICAgIC8vIHJldHJpZXZlIHN1YnNldFxuICAgKiAgICAgY29uc3QgdmFsdWUgPSBtYXRyaXguc3Vic2V0KGluZGV4LCByZXBsYWNlbWVudCkgICAvLyByZXBsYWNlIHN1YnNldFxuICAgKlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeCB8ICp9IFtyZXBsYWNlbWVudF1cbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlPTBdICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLiBJZiBub3QgcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBtYXRyaXggZWxlbWVudHMgd2lsbCBiZSBmaWxsZWQgd2l0aCB6ZXJvcy5cbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuc3Vic2V0ID0gZnVuY3Rpb24gKGluZGV4LCByZXBsYWNlbWVudCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBfZ2V0KHRoaXMsIGluZGV4KTtcbiAgICAgIC8vIGludGVudGlvbmFsIGZhbGwgdGhyb3VnaFxuXG4gICAgICBjYXNlIDI6XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHJldHVybiBfc2V0KHRoaXMsIGluZGV4LCByZXBsYWNlbWVudCwgZGVmYXVsdFZhbHVlKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzJyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogR2V0IGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUgbWF0cml4LlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gaW5kZXggICBaZXJvLWJhc2VkIGluZGV4XG4gICAqIEByZXR1cm4geyp9IHZhbHVlXG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgIGlmICghKDAsIF9pcy5pc0FycmF5KShpbmRleCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKGluZGV4Lmxlbmd0aCAhPT0gdGhpcy5fc2l6ZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaW5kZXgubGVuZ3RoLCB0aGlzLl9zaXplLmxlbmd0aCk7XG4gICAgfSAvLyBjaGVjayBpbmRleFxuXG5cbiAgICBmb3IgKHZhciB4ID0gMDsgeCA8IGluZGV4Lmxlbmd0aDsgeCsrKSB7XG4gICAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGluZGV4W3hdLCB0aGlzLl9zaXplW3hdKTtcbiAgICB9XG5cbiAgICB2YXIgZGF0YSA9IHRoaXMuX2RhdGE7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBpbmRleC5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgaW5kZXhJID0gaW5kZXhbaV07XG4gICAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGluZGV4SSwgZGF0YS5sZW5ndGgpO1xuICAgICAgZGF0YSA9IGRhdGFbaW5kZXhJXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfTtcbiAgLyoqXG4gICAqIFJlcGxhY2UgYSBzaW5nbGUgZWxlbWVudCBpbiB0aGUgbWF0cml4LlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gaW5kZXggICBaZXJvLWJhc2VkIGluZGV4XG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSAgICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLiBJZiBub3QgcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBtYXRyaXggZWxlbWVudHMgd2lsbCBiZSBsZWZ0IHVuZGVmaW5lZC5cbiAgICogQHJldHVybiB7RGVuc2VNYXRyaXh9IHNlbGZcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGluZGV4LCB2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgaWYgKCEoMCwgX2lzLmlzQXJyYXkpKGluZGV4KSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgZXhwZWN0ZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXgubGVuZ3RoIDwgdGhpcy5fc2l6ZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaW5kZXgubGVuZ3RoLCB0aGlzLl9zaXplLmxlbmd0aCwgJzwnKTtcbiAgICB9XG5cbiAgICB2YXIgaSwgaWksIGluZGV4STsgLy8gZW5sYXJnZSBtYXRyaXggd2hlbiBuZWVkZWRcblxuICAgIHZhciBzaXplID0gaW5kZXgubWFwKGZ1bmN0aW9uIChpKSB7XG4gICAgICByZXR1cm4gaSArIDE7XG4gICAgfSk7XG5cbiAgICBfZml0KHRoaXMsIHNpemUsIGRlZmF1bHRWYWx1ZSk7IC8vIHRyYXZlcnNlIG92ZXIgdGhlIGRpbWVuc2lvbnNcblxuXG4gICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXG4gICAgZm9yIChpID0gMCwgaWkgPSBpbmRleC5sZW5ndGggLSAxOyBpIDwgaWk7IGkrKykge1xuICAgICAgaW5kZXhJID0gaW5kZXhbaV07XG4gICAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGluZGV4SSwgZGF0YS5sZW5ndGgpO1xuICAgICAgZGF0YSA9IGRhdGFbaW5kZXhJXTtcbiAgICB9IC8vIHNldCBuZXcgdmFsdWVcblxuXG4gICAgaW5kZXhJID0gaW5kZXhbaW5kZXgubGVuZ3RoIC0gMV07XG4gICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpbmRleEksIGRhdGEubGVuZ3RoKTtcbiAgICBkYXRhW2luZGV4SV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN1Ym1hdHJpeCBvZiB0aGlzIG1hdHJpeFxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtEZW5zZU1hdHJpeH0gbWF0cml4XG4gICAqIEBwYXJhbSB7SW5kZXh9IGluZGV4ICAgWmVyby1iYXNlZCBpbmRleFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9nZXQobWF0cml4LCBpbmRleCkge1xuICAgIGlmICghKDAsIF9pcy5pc0luZGV4KShpbmRleCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgaW5kZXgnKTtcbiAgICB9XG5cbiAgICB2YXIgaXNTY2FsYXIgPSBpbmRleC5pc1NjYWxhcigpO1xuXG4gICAgaWYgKGlzU2NhbGFyKSB7XG4gICAgICAvLyByZXR1cm4gYSBzY2FsYXJcbiAgICAgIHJldHVybiBtYXRyaXguZ2V0KGluZGV4Lm1pbigpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuICAgICAgdmFyIHNpemUgPSBpbmRleC5zaXplKCk7XG5cbiAgICAgIGlmIChzaXplLmxlbmd0aCAhPT0gbWF0cml4Ll9zaXplLmxlbmd0aCkge1xuICAgICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKHNpemUubGVuZ3RoLCBtYXRyaXguX3NpemUubGVuZ3RoKTtcbiAgICAgIH0gLy8gdmFsaWRhdGUgaWYgYW55IG9mIHRoZSByYW5nZXMgaW4gdGhlIGluZGV4IGlzIG91dCBvZiByYW5nZVxuXG5cbiAgICAgIHZhciBtaW4gPSBpbmRleC5taW4oKTtcbiAgICAgIHZhciBtYXggPSBpbmRleC5tYXgoKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDAsIGlpID0gbWF0cml4Ll9zaXplLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShtaW5baV0sIG1hdHJpeC5fc2l6ZVtpXSk7XG4gICAgICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkobWF4W2ldLCBtYXRyaXguX3NpemVbaV0pO1xuICAgICAgfSAvLyByZXRyaWV2ZSBzdWJtYXRyaXhcbiAgICAgIC8vIFRPRE86IG1vcmUgZWZmaWNpZW50IHdoZW4gY3JlYXRpbmcgYW4gZW1wdHkgbWF0cml4IGFuZCBzZXR0aW5nIF9kYXRhIGFuZCBfc2l6ZSBtYW51YWxseVxuXG5cbiAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoX2dldFN1Ym1hdHJpeChtYXRyaXguX2RhdGEsIGluZGV4LCBzaXplLmxlbmd0aCwgMCksIG1hdHJpeC5fZGF0YXR5cGUpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgZ2V0IGEgc3VibWF0cml4IG9mIGEgbXVsdGkgZGltZW5zaW9uYWwgbWF0cml4LlxuICAgKiBJbmRleCBpcyBub3QgY2hlY2tlZCBmb3IgY29ycmVjdCBudW1iZXIgb3IgbGVuZ3RoIG9mIGRpbWVuc2lvbnMuXG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcGFyYW0ge0FycmF5fSBkYXRhXG4gICAqIEBwYXJhbSB7SW5kZXh9IGluZGV4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkaW1zICAgVG90YWwgbnVtYmVyIG9mIGRpbWVuc2lvbnNcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgICBDdXJyZW50IGRpbWVuc2lvblxuICAgKiBAcmV0dXJuIHtBcnJheX0gc3VibWF0cml4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2dldFN1Ym1hdHJpeChkYXRhLCBpbmRleCwgZGltcywgZGltKSB7XG4gICAgdmFyIGxhc3QgPSBkaW0gPT09IGRpbXMgLSAxO1xuICAgIHZhciByYW5nZSA9IGluZGV4LmRpbWVuc2lvbihkaW0pO1xuXG4gICAgaWYgKGxhc3QpIHtcbiAgICAgIHJldHVybiByYW5nZS5tYXAoZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpLCBkYXRhLmxlbmd0aCk7XG4gICAgICAgIHJldHVybiBkYXRhW2ldO1xuICAgICAgfSkudmFsdWVPZigpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmFuZ2UubWFwKGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkoaSwgZGF0YS5sZW5ndGgpO1xuICAgICAgICB2YXIgY2hpbGQgPSBkYXRhW2ldO1xuICAgICAgICByZXR1cm4gX2dldFN1Ym1hdHJpeChjaGlsZCwgaW5kZXgsIGRpbXMsIGRpbSArIDEpO1xuICAgICAgfSkudmFsdWVPZigpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmVwbGFjZSBhIHN1Ym1hdHJpeCBpbiB0aGlzIG1hdHJpeFxuICAgKiBJbmRleGVzIGFyZSB6ZXJvLWJhc2VkLlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtEZW5zZU1hdHJpeH0gbWF0cml4XG4gICAqIEBwYXJhbSB7SW5kZXh9IGluZGV4XG4gICAqIEBwYXJhbSB7RGVuc2VNYXRyaXggfCBBcnJheSB8ICp9IHN1Ym1hdHJpeFxuICAgKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1ZSAgICAgICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMgd2hlblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWF0cml4IGlzIHJlc2l6ZWQuXG4gICAqIEByZXR1cm4ge0RlbnNlTWF0cml4fSBtYXRyaXhcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfc2V0KG1hdHJpeCwgaW5kZXgsIHN1Ym1hdHJpeCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgaWYgKCFpbmRleCB8fCBpbmRleC5pc0luZGV4ICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGluZGV4Jyk7XG4gICAgfSAvLyBnZXQgaW5kZXggc2l6ZSBhbmQgY2hlY2sgd2hldGhlciB0aGUgaW5kZXggY29udGFpbnMgYSBzaW5nbGUgdmFsdWVcblxuXG4gICAgdmFyIGlTaXplID0gaW5kZXguc2l6ZSgpO1xuICAgIHZhciBpc1NjYWxhciA9IGluZGV4LmlzU2NhbGFyKCk7IC8vIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgc3VibWF0cml4LCBhbmQgY29udmVydCBpdCBpbnRvIGFuIEFycmF5IGlmIG5lZWRlZFxuXG4gICAgdmFyIHNTaXplO1xuXG4gICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKHN1Ym1hdHJpeCkpIHtcbiAgICAgIHNTaXplID0gc3VibWF0cml4LnNpemUoKTtcbiAgICAgIHN1Ym1hdHJpeCA9IHN1Ym1hdHJpeC52YWx1ZU9mKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNTaXplID0gKDAsIF9hcnJheS5hcnJheVNpemUpKHN1Ym1hdHJpeCk7XG4gICAgfVxuXG4gICAgaWYgKGlzU2NhbGFyKSB7XG4gICAgICAvLyBzZXQgYSBzY2FsYXJcbiAgICAgIC8vIGNoZWNrIHdoZXRoZXIgc3VibWF0cml4IGlzIGEgc2NhbGFyXG4gICAgICBpZiAoc1NpemUubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NjYWxhciBleHBlY3RlZCcpO1xuICAgICAgfVxuXG4gICAgICBtYXRyaXguc2V0KGluZGV4Lm1pbigpLCBzdWJtYXRyaXgsIGRlZmF1bHRWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNldCBhIHN1Ym1hdHJpeFxuICAgICAgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuICAgICAgaWYgKGlTaXplLmxlbmd0aCA8IG1hdHJpeC5fc2l6ZS5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihpU2l6ZS5sZW5ndGgsIG1hdHJpeC5fc2l6ZS5sZW5ndGgsICc8Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzU2l6ZS5sZW5ndGggPCBpU2l6ZS5sZW5ndGgpIHtcbiAgICAgICAgLy8gY2FsY3VsYXRlIG51bWJlciBvZiBtaXNzaW5nIG91dGVyIGRpbWVuc2lvbnNcbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICB2YXIgb3V0ZXIgPSAwO1xuXG4gICAgICAgIHdoaWxlIChpU2l6ZVtpXSA9PT0gMSAmJiBzU2l6ZVtpXSA9PT0gMSkge1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChpU2l6ZVtpXSA9PT0gMSkge1xuICAgICAgICAgIG91dGVyKys7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9IC8vIHVuc3F1ZWV6ZSBib3RoIG91dGVyIGFuZCBpbm5lciBkaW1lbnNpb25zXG5cblxuICAgICAgICBzdWJtYXRyaXggPSAoMCwgX2FycmF5LnVuc3F1ZWV6ZSkoc3VibWF0cml4LCBpU2l6ZS5sZW5ndGgsIG91dGVyLCBzU2l6ZSk7XG4gICAgICB9IC8vIGNoZWNrIHdoZXRoZXIgdGhlIHNpemUgb2YgdGhlIHN1Ym1hdHJpeCBtYXRjaGVzIHRoZSBpbmRleCBzaXplXG5cblxuICAgICAgaWYgKCEoMCwgX29iamVjdC5kZWVwU3RyaWN0RXF1YWwpKGlTaXplLCBzU2l6ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihpU2l6ZSwgc1NpemUsICc+Jyk7XG4gICAgICB9IC8vIGVubGFyZ2UgbWF0cml4IHdoZW4gbmVlZGVkXG5cblxuICAgICAgdmFyIHNpemUgPSBpbmRleC5tYXgoKS5tYXAoZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgcmV0dXJuIGkgKyAxO1xuICAgICAgfSk7XG5cbiAgICAgIF9maXQobWF0cml4LCBzaXplLCBkZWZhdWx0VmFsdWUpOyAvLyBpbnNlcnQgdGhlIHN1YiBtYXRyaXhcblxuXG4gICAgICB2YXIgZGltcyA9IGlTaXplLmxlbmd0aDtcbiAgICAgIHZhciBkaW0gPSAwO1xuXG4gICAgICBfc2V0U3VibWF0cml4KG1hdHJpeC5fZGF0YSwgaW5kZXgsIHN1Ym1hdHJpeCwgZGltcywgZGltKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWF0cml4O1xuICB9XG4gIC8qKlxuICAgKiBSZXBsYWNlIGEgc3VibWF0cml4IG9mIGEgbXVsdGkgZGltZW5zaW9uYWwgbWF0cml4LlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtBcnJheX0gZGF0YVxuICAgKiBAcGFyYW0ge0luZGV4fSBpbmRleFxuICAgKiBAcGFyYW0ge0FycmF5fSBzdWJtYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpbXMgICBUb3RhbCBudW1iZXIgb2YgZGltZW5zaW9uc1xuICAgKiBAcGFyYW0ge251bWJlcn0gZGltXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3NldFN1Ym1hdHJpeChkYXRhLCBpbmRleCwgc3VibWF0cml4LCBkaW1zLCBkaW0pIHtcbiAgICB2YXIgbGFzdCA9IGRpbSA9PT0gZGltcyAtIDE7XG4gICAgdmFyIHJhbmdlID0gaW5kZXguZGltZW5zaW9uKGRpbSk7XG5cbiAgICBpZiAobGFzdCkge1xuICAgICAgcmFuZ2UuZm9yRWFjaChmdW5jdGlvbiAoZGF0YUluZGV4LCBzdWJJbmRleCkge1xuICAgICAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGRhdGFJbmRleCk7XG4gICAgICAgIGRhdGFbZGF0YUluZGV4XSA9IHN1Ym1hdHJpeFtzdWJJbmRleFswXV07XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmFuZ2UuZm9yRWFjaChmdW5jdGlvbiAoZGF0YUluZGV4LCBzdWJJbmRleCkge1xuICAgICAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGRhdGFJbmRleCk7XG5cbiAgICAgICAgX3NldFN1Ym1hdHJpeChkYXRhW2RhdGFJbmRleF0sIGluZGV4LCBzdWJtYXRyaXhbc3ViSW5kZXhbMF1dLCBkaW1zLCBkaW0gKyAxKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmVzaXplIHRoZSBtYXRyaXggdG8gdGhlIGdpdmVuIHNpemUuIFJldHVybnMgYSBjb3B5IG9mIHRoZSBtYXRyaXggd2hlblxuICAgKiBgY29weT10cnVlYCwgb3RoZXJ3aXNlIHJldHVybiB0aGUgbWF0cml4IGl0c2VsZiAocmVzaXplIGluIHBsYWNlKS5cbiAgICpcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyW119IHNpemUgICAgICAgICAgIFRoZSBuZXcgc2l6ZSB0aGUgbWF0cml4IHNob3VsZCBoYXZlLlxuICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWU9MF0gICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vdCBwcm92aWRlZCwgdGhlIG1hdHJpeCBlbGVtZW50cyB3aWxsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIGZpbGxlZCB3aXRoIHplcm9zLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjb3B5XSAgICAgICAgICBSZXR1cm4gYSByZXNpemVkIGNvcHkgb2YgdGhlIG1hdHJpeFxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICBUaGUgcmVzaXplZCBtYXRyaXhcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHNpemUsIGRlZmF1bHRWYWx1ZSwgY29weSkge1xuICAgIC8vIHZhbGlkYXRlIGFyZ3VtZW50c1xuICAgIGlmICghKDAsIF9pcy5pc0FycmF5KShzaXplKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgZXhwZWN0ZWQnKTtcbiAgICB9IC8vIG1hdHJpeCB0byByZXNpemVcblxuXG4gICAgdmFyIG0gPSBjb3B5ID8gdGhpcy5jbG9uZSgpIDogdGhpczsgLy8gcmVzaXplIG1hdHJpeFxuXG4gICAgcmV0dXJuIF9yZXNpemUobSwgc2l6ZSwgZGVmYXVsdFZhbHVlKTtcbiAgfTtcblxuICBmdW5jdGlvbiBfcmVzaXplKG1hdHJpeCwgc2l6ZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgLy8gY2hlY2sgc2l6ZVxuICAgIGlmIChzaXplLmxlbmd0aCA9PT0gMCkge1xuICAgICAgLy8gZmlyc3QgdmFsdWUgaW4gbWF0cml4XG4gICAgICB2YXIgdiA9IG1hdHJpeC5fZGF0YTsgLy8gZ28gZGVlcFxuXG4gICAgICB3aGlsZSAoKDAsIF9pcy5pc0FycmF5KSh2KSkge1xuICAgICAgICB2ID0gdlswXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHY7XG4gICAgfSAvLyByZXNpemUgbWF0cml4XG5cblxuICAgIG1hdHJpeC5fc2l6ZSA9IHNpemUuc2xpY2UoMCk7IC8vIGNvcHkgdGhlIGFycmF5XG5cbiAgICBtYXRyaXguX2RhdGEgPSAoMCwgX2FycmF5LnJlc2l6ZSkobWF0cml4Ll9kYXRhLCBtYXRyaXguX3NpemUsIGRlZmF1bHRWYWx1ZSk7IC8vIHJldHVybiBtYXRyaXhcblxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cbiAgLyoqXG4gICAqIFJlc2hhcGUgdGhlIG1hdHJpeCB0byB0aGUgZ2l2ZW4gc2l6ZS4gUmV0dXJucyBhIGNvcHkgb2YgdGhlIG1hdHJpeCB3aGVuXG4gICAqIGBjb3B5PXRydWVgLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBtYXRyaXggaXRzZWxmIChyZXNoYXBlIGluIHBsYWNlKS5cbiAgICpcbiAgICogTk9URTogVGhpcyBtaWdodCBiZSBiZXR0ZXIgc3VpdGVkIHRvIGNvcHkgYnkgZGVmYXVsdCwgaW5zdGVhZCBvZiBtb2RpZnlpbmdcbiAgICogICAgICAgaW4gcGxhY2UuIEZvciBub3csIGl0IG9wZXJhdGVzIGluIHBsYWNlIHRvIHJlbWFpbiBjb25zaXN0ZW50IHdpdGhcbiAgICogICAgICAgcmVzaXplKCkuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlcltdfSBzaXplICAgICAgICAgICBUaGUgbmV3IHNpemUgdGhlIG1hdHJpeCBzaG91bGQgaGF2ZS5cbiAgICogQHBhcmFtIHtib29sZWFufSBbY29weV0gICAgICAgICAgUmV0dXJuIGEgcmVzaGFwZWQgY29weSBvZiB0aGUgbWF0cml4XG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgIFRoZSByZXNoYXBlZCBtYXRyaXhcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUucmVzaGFwZSA9IGZ1bmN0aW9uIChzaXplLCBjb3B5KSB7XG4gICAgdmFyIG0gPSBjb3B5ID8gdGhpcy5jbG9uZSgpIDogdGhpcztcbiAgICBtLl9kYXRhID0gKDAsIF9hcnJheS5yZXNoYXBlKShtLl9kYXRhLCBzaXplKTtcbiAgICBtLl9zaXplID0gc2l6ZS5zbGljZSgwKTtcbiAgICByZXR1cm4gbTtcbiAgfTtcbiAgLyoqXG4gICAqIEVubGFyZ2UgdGhlIG1hdHJpeCB3aGVuIGl0IGlzIHNtYWxsZXIgdGhhbiBnaXZlbiBzaXplLlxuICAgKiBJZiB0aGUgbWF0cml4IGlzIGxhcmdlciBvciBlcXVhbCBzaXplZCwgbm90aGluZyBpcyBkb25lLlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtEZW5zZU1hdHJpeH0gbWF0cml4ICAgICAgICAgICBUaGUgbWF0cml4IHRvIGJlIHJlc2l6ZWRcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZVxuICAgKiBAcGFyYW0geyp9IGRlZmF1bHRWYWx1ZSAgICAgICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2ZpdChtYXRyaXgsIHNpemUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHZhciAvLyBjb3B5IHRoZSBhcnJheVxuICAgIG5ld1NpemUgPSBtYXRyaXguX3NpemUuc2xpY2UoMCk7XG5cbiAgICB2YXIgY2hhbmdlZCA9IGZhbHNlOyAvLyBhZGQgZGltZW5zaW9ucyB3aGVuIG5lZWRlZFxuXG4gICAgd2hpbGUgKG5ld1NpemUubGVuZ3RoIDwgc2l6ZS5sZW5ndGgpIHtcbiAgICAgIG5ld1NpemUucHVzaCgwKTtcbiAgICAgIGNoYW5nZWQgPSB0cnVlO1xuICAgIH0gLy8gZW5sYXJnZSBzaXplIHdoZW4gbmVlZGVkXG5cblxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHNpemUubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgaWYgKHNpemVbaV0gPiBuZXdTaXplW2ldKSB7XG4gICAgICAgIG5ld1NpemVbaV0gPSBzaXplW2ldO1xuICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgLy8gcmVzaXplIG9ubHkgd2hlbiBzaXplIGlzIGNoYW5nZWRcbiAgICAgIF9yZXNpemUobWF0cml4LCBuZXdTaXplLCBkZWZhdWx0VmFsdWUpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhlIG1hdHJpeFxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHJldHVybiB7RGVuc2VNYXRyaXh9IGNsb25lXG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBtID0gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6ICgwLCBfb2JqZWN0LmNsb25lKSh0aGlzLl9kYXRhKSxcbiAgICAgIHNpemU6ICgwLCBfb2JqZWN0LmNsb25lKSh0aGlzLl9zaXplKSxcbiAgICAgIGRhdGF0eXBlOiB0aGlzLl9kYXRhdHlwZVxuICAgIH0pO1xuICAgIHJldHVybiBtO1xuICB9O1xuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHNpemUgb2YgdGhlIG1hdHJpeC5cbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm5zIHtudW1iZXJbXX0gc2l6ZVxuICAgKi9cblxuXG4gIERlbnNlTWF0cml4LnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9zaXplLnNsaWNlKDApOyAvLyByZXR1cm4gYSBjbG9uZSBvZiBfc2l6ZVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG1hdHJpeCB3aXRoIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleGVjdXRlZCBvblxuICAgKiBlYWNoIGVudHJ5IG9mIHRoZSBtYXRyaXguXG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQsIHRoZSBpbmRleFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBlbGVtZW50LCBhbmQgdGhlIE1hdHJpeCBiZWluZyB0cmF2ZXJzZWQuXG4gICAqXG4gICAqIEByZXR1cm4ge0RlbnNlTWF0cml4fSBtYXRyaXhcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgLy8gbWF0cml4IGluc3RhbmNlXG4gICAgdmFyIG1lID0gdGhpcztcblxuICAgIHZhciByZWN1cnNlID0gZnVuY3Rpb24gcmVjdXJzZSh2YWx1ZSwgaW5kZXgpIHtcbiAgICAgIGlmICgoMCwgX2lzLmlzQXJyYXkpKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUubWFwKGZ1bmN0aW9uIChjaGlsZCwgaSkge1xuICAgICAgICAgIHJldHVybiByZWN1cnNlKGNoaWxkLCBpbmRleC5jb25jYXQoaSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayh2YWx1ZSwgaW5kZXgsIG1lKTtcbiAgICAgIH1cbiAgICB9OyAvLyBkZXRlcm1pbmUgdGhlIG5ldyBkYXRhdHlwZSB3aGVuIHRoZSBvcmlnaW5hbCBtYXRyaXggaGFzIGRhdGF0eXBlIGRlZmluZWRcbiAgICAvLyBUT0RPOiBzaG91bGQgYmUgZG9uZSBpbiBtYXRyaXggY29uc3RydWN0b3IgaW5zdGVhZFxuXG5cbiAgICB2YXIgZGF0YSA9IHJlY3Vyc2UodGhpcy5fZGF0YSwgW10pO1xuICAgIHZhciBkYXRhdHlwZSA9IHRoaXMuX2RhdGF0eXBlICE9PSB1bmRlZmluZWQgPyAoMCwgX2FycmF5LmdldEFycmF5RGF0YVR5cGUpKGRhdGEsIF9pcy50eXBlT2YpIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoZGF0YSwgZGF0YXR5cGUpO1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIG9uIGVhY2ggZW50cnkgb2YgdGhlIG1hdHJpeC5cbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCwgdGhlIGluZGV4XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGVsZW1lbnQsIGFuZCB0aGUgTWF0cml4IGJlaW5nIHRyYXZlcnNlZC5cbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIC8vIG1hdHJpeCBpbnN0YW5jZVxuICAgIHZhciBtZSA9IHRoaXM7XG5cbiAgICB2YXIgcmVjdXJzZSA9IGZ1bmN0aW9uIHJlY3Vyc2UodmFsdWUsIGluZGV4KSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc0FycmF5KSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQsIGkpIHtcbiAgICAgICAgICByZWN1cnNlKGNoaWxkLCBpbmRleC5jb25jYXQoaSkpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKHZhbHVlLCBpbmRleCwgbWUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZWN1cnNlKHRoaXMuX2RhdGEsIFtdKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBBcnJheSB3aXRoIGEgY29weSBvZiB0aGUgZGF0YSBvZiB0aGUgRGVuc2VNYXRyaXhcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXlcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX2RhdGEpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHRoZSBwcmltaXRpdmUgdmFsdWUgb2YgdGhlIERlbnNlTWF0cml4OiBhIG11bHRpZGltZW5zaW9uYWwgYXJyYXlcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXlcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4LCB3aXRoIG9wdGlvbmFsIGZvcm1hdHRpbmcgb3B0aW9ucy5cbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvdXRpbHMvbnVtYmVyOmZvcm1hdCBmb3IgYVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKDAsIF9zdHJpbmcuZm9ybWF0KSh0aGlzLl9kYXRhLCBvcHRpb25zKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4XG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICgwLCBfc3RyaW5nLmZvcm1hdCkodGhpcy5fZGF0YSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXhcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnRGVuc2VNYXRyaXgnLFxuICAgICAgZGF0YTogdGhpcy5fZGF0YSxcbiAgICAgIHNpemU6IHRoaXMuX3NpemUsXG4gICAgICBkYXRhdHlwZTogdGhpcy5fZGF0YXR5cGVcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogR2V0IHRoZSBrdGggTWF0cml4IGRpYWdvbmFsLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IFtrPTBdICAgICBUaGUga3RoIGRpYWdvbmFsIHdoZXJlIHRoZSB2ZWN0b3Igd2lsbCByZXRyaWV2ZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIHtNYXRyaXh9ICAgICAgICAgICAgICAgICAgICAgVGhlIG1hdHJpeCB3aXRoIHRoZSBkaWFnb25hbCB2YWx1ZXMuXG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLmRpYWdvbmFsID0gZnVuY3Rpb24gKGspIHtcbiAgICAvLyB2YWxpZGF0ZSBrIGlmIGFueVxuICAgIGlmIChrKSB7XG4gICAgICAvLyBjb252ZXJ0IEJpZ051bWJlciB0byBhIG51bWJlclxuICAgICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGspKSB7XG4gICAgICAgIGsgPSBrLnRvTnVtYmVyKCk7XG4gICAgICB9IC8vIGlzIG11c3QgYmUgYW4gaW50ZWdlclxuXG5cbiAgICAgIGlmICghKDAsIF9pcy5pc051bWJlcikoaykgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHBhcmFtZXRlciBrIG11c3QgYmUgYW4gaW50ZWdlciBudW1iZXInKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGVmYXVsdCB2YWx1ZVxuICAgICAgayA9IDA7XG4gICAgfVxuXG4gICAgdmFyIGtTdXBlciA9IGsgPiAwID8gayA6IDA7XG4gICAgdmFyIGtTdWIgPSBrIDwgMCA/IC1rIDogMDsgLy8gcm93cyAmIGNvbHVtbnNcblxuICAgIHZhciByb3dzID0gdGhpcy5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IHRoaXMuX3NpemVbMV07IC8vIG51bWJlciBkaWFnb25hbCB2YWx1ZXNcblxuICAgIHZhciBuID0gTWF0aC5taW4ocm93cyAtIGtTdWIsIGNvbHVtbnMgLSBrU3VwZXIpOyAvLyB4IGlzIGEgbWF0cml4IGdldCBkaWFnb25hbCBmcm9tIG1hdHJpeFxuXG4gICAgdmFyIGRhdGEgPSBbXTsgLy8gbG9vcCByb3dzXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgZGF0YVtpXSA9IHRoaXMuX2RhdGFbaSArIGtTdWJdW2kgKyBrU3VwZXJdO1xuICAgIH0gLy8gY3JlYXRlIERlbnNlTWF0cml4XG5cblxuICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIHNpemU6IFtuXSxcbiAgICAgIGRhdGF0eXBlOiB0aGlzLl9kYXRhdHlwZVxuICAgIH0pO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgZGlhZ29uYWwgbWF0cml4LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtBcnJheX0gc2l6ZSAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXRyaXggc2l6ZS5cbiAgICogQHBhcmFtIHtudW1iZXIgfCBNYXRyaXggfCBBcnJheSB9IHZhbHVlIFRoZSB2YWx1ZXMgZm9yIHRoZSBkaWFnb25hbC5cbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IFtrPTBdICAgICAgIFRoZSBrdGggZGlhZ29uYWwgd2hlcmUgdGhlIHZlY3RvciB3aWxsIGJlIGZpbGxlZCBpbi5cbiAgICogQHBhcmFtIHtudW1iZXJ9IFtkZWZhdWx0VmFsdWVdICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBub24tZGlhZ29uYWxcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkYXRhdHlwZV0gICAgICAgICAgICAgIFRoZSBkYXRhdHlwZSBmb3IgdGhlIGRpYWdvbmFsXG4gICAqXG4gICAqIEByZXR1cm5zIHtEZW5zZU1hdHJpeH1cbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5kaWFnb25hbCA9IGZ1bmN0aW9uIChzaXplLCB2YWx1ZSwgaywgZGVmYXVsdFZhbHVlKSB7XG4gICAgaWYgKCEoMCwgX2lzLmlzQXJyYXkpKHNpemUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBleHBlY3RlZCwgc2l6ZSBwYXJhbWV0ZXInKTtcbiAgICB9XG5cbiAgICBpZiAoc2l6ZS5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25seSB0d28gZGltZW5zaW9ucyBtYXRyaXggYXJlIHN1cHBvcnRlZCcpO1xuICAgIH0gLy8gbWFwIHNpemUgJiB2YWxpZGF0ZVxuXG5cbiAgICBzaXplID0gc2l6ZS5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICAgIC8vIGNoZWNrIGl0IGlzIGEgYmlnIG51bWJlclxuICAgICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHMpKSB7XG4gICAgICAgIC8vIGNvbnZlcnQgaXRcbiAgICAgICAgcyA9IHMudG9OdW1iZXIoKTtcbiAgICAgIH0gLy8gdmFsaWRhdGUgYXJndW1lbnRzXG5cblxuICAgICAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKShzKSB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShzKSB8fCBzIDwgMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpemUgdmFsdWVzIG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcnMnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHM7XG4gICAgfSk7IC8vIHZhbGlkYXRlIGsgaWYgYW55XG5cbiAgICBpZiAoaykge1xuICAgICAgLy8gY29udmVydCBCaWdOdW1iZXIgdG8gYSBudW1iZXJcbiAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShrKSkge1xuICAgICAgICBrID0gay50b051bWJlcigpO1xuICAgICAgfSAvLyBpcyBtdXN0IGJlIGFuIGludGVnZXJcblxuXG4gICAgICBpZiAoISgwLCBfaXMuaXNOdW1iZXIpKGspIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKGspKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBwYXJhbWV0ZXIgayBtdXN0IGJlIGFuIGludGVnZXIgbnVtYmVyJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRlZmF1bHQgdmFsdWVcbiAgICAgIGsgPSAwO1xuICAgIH1cblxuICAgIHZhciBrU3VwZXIgPSBrID4gMCA/IGsgOiAwO1xuICAgIHZhciBrU3ViID0gayA8IDAgPyAtayA6IDA7IC8vIHJvd3MgYW5kIGNvbHVtbnNcblxuICAgIHZhciByb3dzID0gc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IHNpemVbMV07IC8vIG51bWJlciBvZiBub24temVybyBpdGVtc1xuXG4gICAgdmFyIG4gPSBNYXRoLm1pbihyb3dzIC0ga1N1YiwgY29sdW1ucyAtIGtTdXBlcik7IC8vIHZhbHVlIGV4dHJhY3Rpb24gZnVuY3Rpb25cblxuICAgIHZhciBfdmFsdWU7IC8vIGNoZWNrIHZhbHVlXG5cblxuICAgIGlmICgoMCwgX2lzLmlzQXJyYXkpKHZhbHVlKSkge1xuICAgICAgLy8gdmFsaWRhdGUgYXJyYXlcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggIT09IG4pIHtcbiAgICAgICAgLy8gbnVtYmVyIG9mIHZhbHVlcyBpbiBhcnJheSBtdXN0IGJlIG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHZhbHVlIGFycmF5IGxlbmd0aCcpO1xuICAgICAgfSAvLyBkZWZpbmUgZnVuY3Rpb25cblxuXG4gICAgICBfdmFsdWUgPSBmdW5jdGlvbiBfdmFsdWUoaSkge1xuICAgICAgICAvLyByZXR1cm4gdmFsdWUgQCBpXG4gICAgICAgIHJldHVybiB2YWx1ZVtpXTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzTWF0cml4KSh2YWx1ZSkpIHtcbiAgICAgIC8vIG1hdHJpeCBzaXplXG4gICAgICB2YXIgbXMgPSB2YWx1ZS5zaXplKCk7IC8vIHZhbGlkYXRlIG1hdHJpeFxuXG4gICAgICBpZiAobXMubGVuZ3RoICE9PSAxIHx8IG1zWzBdICE9PSBuKSB7XG4gICAgICAgIC8vIG51bWJlciBvZiB2YWx1ZXMgaW4gYXJyYXkgbXVzdCBiZSBuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtYXRyaXggbGVuZ3RoJyk7XG4gICAgICB9IC8vIGRlZmluZSBmdW5jdGlvblxuXG5cbiAgICAgIF92YWx1ZSA9IGZ1bmN0aW9uIF92YWx1ZShpKSB7XG4gICAgICAgIC8vIHJldHVybiB2YWx1ZSBAIGlcbiAgICAgICAgcmV0dXJuIHZhbHVlLmdldChbaV0pO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGVmaW5lIGZ1bmN0aW9uXG4gICAgICBfdmFsdWUgPSBmdW5jdGlvbiBfdmFsdWUoKSB7XG4gICAgICAgIC8vIHJldHVybiB2YWx1ZVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgIH0gLy8gZGlzY292ZXIgZGVmYXVsdCB2YWx1ZSBpZiBuZWVkZWRcblxuXG4gICAgaWYgKCFkZWZhdWx0VmFsdWUpIHtcbiAgICAgIC8vIGNoZWNrIGZpcnN0IHZhbHVlIGluIGFycmF5XG4gICAgICBkZWZhdWx0VmFsdWUgPSAoMCwgX2lzLmlzQmlnTnVtYmVyKShfdmFsdWUoMCkpID8gX3ZhbHVlKDApLm11bCgwKSAvLyB0cmljayB0byBjcmVhdGUgYSBCaWdOdW1iZXIgd2l0aCB2YWx1ZSB6ZXJvXG4gICAgICA6IDA7XG4gICAgfSAvLyBlbXB0eSBhcnJheVxuXG5cbiAgICB2YXIgZGF0YSA9IFtdOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHJlc2l6ZSBhcnJheVxuXG4gICAgaWYgKHNpemUubGVuZ3RoID4gMCkge1xuICAgICAgLy8gcmVzaXplIGFycmF5XG4gICAgICBkYXRhID0gKDAsIF9hcnJheS5yZXNpemUpKGRhdGEsIHNpemUsIGRlZmF1bHRWYWx1ZSk7IC8vIGZpbGwgZGlhZ29uYWxcblxuICAgICAgZm9yICh2YXIgZCA9IDA7IGQgPCBuOyBkKyspIHtcbiAgICAgICAgZGF0YVtkICsga1N1Yl1bZCArIGtTdXBlcl0gPSBfdmFsdWUoZCk7XG4gICAgICB9XG4gICAgfSAvLyBjcmVhdGUgRGVuc2VNYXRyaXhcblxuXG4gICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiBkYXRhLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdXG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIG1hdHJpeCBmcm9tIGEgSlNPTiBvYmplY3RcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiRGVuc2VNYXRyaXhcIiwgZGF0YTogW10sIHNpemU6IFtdfWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0RlbnNlTWF0cml4fVxuICAgKi9cblxuXG4gIERlbnNlTWF0cml4LmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KGpzb24pO1xuICB9O1xuICAvKipcbiAgICogU3dhcCByb3dzIGkgYW5kIGogaW4gTWF0cml4LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGkgICAgICAgTWF0cml4IHJvdyBpbmRleCAxXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBqICAgICAgIE1hdHJpeCByb3cgaW5kZXggMlxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICBUaGUgbWF0cml4IHJlZmVyZW5jZVxuICAgKi9cblxuXG4gIERlbnNlTWF0cml4LnByb3RvdHlwZS5zd2FwUm93cyA9IGZ1bmN0aW9uIChpLCBqKSB7XG4gICAgLy8gY2hlY2sgaW5kZXhcbiAgICBpZiAoISgwLCBfaXMuaXNOdW1iZXIpKGkpIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKGkpIHx8ICEoMCwgX2lzLmlzTnVtYmVyKShqKSB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShqKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSb3cgaW5kZXggbXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VycycpO1xuICAgIH0gLy8gY2hlY2sgZGltZW5zaW9uc1xuXG5cbiAgICBpZiAodGhpcy5fc2l6ZS5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25seSB0d28gZGltZW5zaW9uYWwgbWF0cml4IGlzIHN1cHBvcnRlZCcpO1xuICAgIH0gLy8gdmFsaWRhdGUgaW5kZXhcblxuXG4gICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpLCB0aGlzLl9zaXplWzBdKTtcbiAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGosIHRoaXMuX3NpemVbMF0pOyAvLyBzd2FwIHJvd3NcblxuICAgIERlbnNlTWF0cml4Ll9zd2FwUm93cyhpLCBqLCB0aGlzLl9kYXRhKTsgLy8gcmV0dXJuIGN1cnJlbnQgaW5zdGFuY2VcblxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBTd2FwIHJvd3MgaSBhbmQgaiBpbiBEZW5zZSBNYXRyaXggZGF0YSBzdHJ1Y3R1cmUuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpICAgICAgIE1hdHJpeCByb3cgaW5kZXggMVxuICAgKiBAcGFyYW0ge251bWJlcn0gaiAgICAgICBNYXRyaXggcm93IGluZGV4IDJcbiAgICogQHBhcmFtIHtBcnJheX0gZGF0YSAgICAgTWF0cml4IGRhdGFcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5fc3dhcFJvd3MgPSBmdW5jdGlvbiAoaSwgaiwgZGF0YSkge1xuICAgIC8vIHN3YXAgdmFsdWVzIGkgPC0+IGpcbiAgICB2YXIgdmkgPSBkYXRhW2ldO1xuICAgIGRhdGFbaV0gPSBkYXRhW2pdO1xuICAgIGRhdGFbal0gPSB2aTtcbiAgfTtcbiAgLyoqXG4gICAqIFByZXByb2Nlc3MgZGF0YSwgd2hpY2ggY2FuIGJlIGFuIEFycmF5IG9yIERlbnNlTWF0cml4IHdpdGggbmVzdGVkIEFycmF5cyBhbmRcbiAgICogTWF0cmljZXMuIFJlcGxhY2VzIGFsbCBuZXN0ZWQgTWF0cmljZXMgd2l0aCBBcnJheXNcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7QXJyYXl9IGRhdGFcbiAgICogQHJldHVybiB7QXJyYXl9IGRhdGFcbiAgICovXG5cblxuICBmdW5jdGlvbiBwcmVwcm9jZXNzKGRhdGEpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBkYXRhLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHZhciBlbGVtID0gZGF0YVtpXTtcblxuICAgICAgaWYgKCgwLCBfaXMuaXNBcnJheSkoZWxlbSkpIHtcbiAgICAgICAgZGF0YVtpXSA9IHByZXByb2Nlc3MoZWxlbSk7XG4gICAgICB9IGVsc2UgaWYgKGVsZW0gJiYgZWxlbS5pc01hdHJpeCA9PT0gdHJ1ZSkge1xuICAgICAgICBkYXRhW2ldID0gcHJlcHJvY2VzcyhlbGVtLnZhbHVlT2YoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cblxuICByZXR1cm4gRGVuc2VNYXRyaXg7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEZW5zZU1hdHJpeENsYXNzID0gY3JlYXRlRGVuc2VNYXRyaXhDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRmlib25hY2NpSGVhcENsYXNzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnRmlib25hY2NpSGVhcCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydzbWFsbGVyJywgJ2xhcmdlciddO1xudmFyIGNyZWF0ZUZpYm9uYWNjaUhlYXBDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBzbWFsbGVyID0gX3JlZi5zbWFsbGVyLFxuICAgICAgbGFyZ2VyID0gX3JlZi5sYXJnZXI7XG4gIHZhciBvbmVPdmVyTG9nUGhpID0gMS4wIC8gTWF0aC5sb2coKDEuMCArIE1hdGguc3FydCg1LjApKSAvIDIuMCk7XG4gIC8qKlxuICAgKiBGaWJvbmFjY2kgSGVhcCBpbXBsZW1lbnRhdGlvbiwgdXNlZCBpbnRlcmFsbHkgZm9yIE1hdHJpeCBtYXRoLlxuICAgKiBAY2xhc3MgRmlib25hY2NpSGVhcFxuICAgKiBAY29uc3RydWN0b3IgRmlib25hY2NpSGVhcFxuICAgKi9cblxuICBmdW5jdGlvbiBGaWJvbmFjY2lIZWFwKCkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBGaWJvbmFjY2lIZWFwKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9IC8vIGluaXRpYWxpemUgZmllbGRzXG5cblxuICAgIHRoaXMuX21pbmltdW0gPSBudWxsO1xuICAgIHRoaXMuX3NpemUgPSAwO1xuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIEZpYm9uYWNjaUhlYXAucHJvdG90eXBlLnR5cGUgPSAnRmlib25hY2NpSGVhcCc7XG4gIEZpYm9uYWNjaUhlYXAucHJvdG90eXBlLmlzRmlib25hY2NpSGVhcCA9IHRydWU7XG4gIC8qKlxuICAgKiBJbnNlcnRzIGEgbmV3IGRhdGEgZWxlbWVudCBpbnRvIHRoZSBoZWFwLiBObyBoZWFwIGNvbnNvbGlkYXRpb24gaXNcbiAgICogcGVyZm9ybWVkIGF0IHRoaXMgdGltZSwgdGhlIG5ldyBub2RlIGlzIHNpbXBseSBpbnNlcnRlZCBpbnRvIHRoZSByb290XG4gICAqIGxpc3Qgb2YgdGhpcyBoZWFwLiBSdW5uaW5nIHRpbWU6IE8oMSkgYWN0dWFsLlxuICAgKiBAbWVtYmVyb2YgRmlib25hY2NpSGVhcFxuICAgKi9cblxuICBGaWJvbmFjY2lIZWFwLnByb3RvdHlwZS5pbnNlcnQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIC8vIGNyZWF0ZSBub2RlXG4gICAgdmFyIG5vZGUgPSB7XG4gICAgICBrZXk6IGtleSxcbiAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgIGRlZ3JlZTogMFxuICAgIH07IC8vIGNoZWNrIHdlIGhhdmUgYSBub2RlIGluIHRoZSBtaW5pbXVtXG5cbiAgICBpZiAodGhpcy5fbWluaW11bSkge1xuICAgICAgLy8gbWluaW11bSBub2RlXG4gICAgICB2YXIgbWluaW11bSA9IHRoaXMuX21pbmltdW07IC8vIHVwZGF0ZSBsZWZ0ICYgcmlnaHQgb2Ygbm9kZVxuXG4gICAgICBub2RlLmxlZnQgPSBtaW5pbXVtO1xuICAgICAgbm9kZS5yaWdodCA9IG1pbmltdW0ucmlnaHQ7XG4gICAgICBtaW5pbXVtLnJpZ2h0ID0gbm9kZTtcbiAgICAgIG5vZGUucmlnaHQubGVmdCA9IG5vZGU7IC8vIHVwZGF0ZSBtaW5pbXVtIG5vZGUgaW4gaGVhcCBpZiBuZWVkZWRcblxuICAgICAgaWYgKHNtYWxsZXIoa2V5LCBtaW5pbXVtLmtleSkpIHtcbiAgICAgICAgLy8gbm9kZSBoYXMgYSBzbWFsbGVyIGtleSwgdXNlIGl0IGFzIG1pbmltdW1cbiAgICAgICAgdGhpcy5fbWluaW11bSA9IG5vZGU7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHNldCBsZWZ0ICYgcmlnaHRcbiAgICAgIG5vZGUubGVmdCA9IG5vZGU7XG4gICAgICBub2RlLnJpZ2h0ID0gbm9kZTsgLy8gdGhpcyBpcyB0aGUgZmlyc3Qgbm9kZVxuXG4gICAgICB0aGlzLl9taW5pbXVtID0gbm9kZTtcbiAgICB9IC8vIGluY3JlbWVudCBudW1iZXIgb2Ygbm9kZXMgaW4gaGVhcFxuXG5cbiAgICB0aGlzLl9zaXplKys7IC8vIHJldHVybiBub2RlXG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBub2RlcyBpbiBoZWFwLiBSdW5uaW5nIHRpbWU6IE8oMSkgYWN0dWFsLlxuICAgKiBAbWVtYmVyb2YgRmlib25hY2NpSGVhcFxuICAgKi9cblxuXG4gIEZpYm9uYWNjaUhlYXAucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NpemU7XG4gIH07XG4gIC8qKlxuICAgKiBSZW1vdmVzIGFsbCBlbGVtZW50cyBmcm9tIHRoaXMgaGVhcC5cbiAgICogQG1lbWJlcm9mIEZpYm9uYWNjaUhlYXBcbiAgICovXG5cblxuICBGaWJvbmFjY2lIZWFwLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLl9taW5pbXVtID0gbnVsbDtcbiAgICB0aGlzLl9zaXplID0gMDtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgaGVhcCBpcyBlbXB0eSwgb3RoZXJ3aXNlIGZhbHNlLlxuICAgKiBAbWVtYmVyb2YgRmlib25hY2NpSGVhcFxuICAgKi9cblxuXG4gIEZpYm9uYWNjaUhlYXAucHJvdG90eXBlLmlzRW1wdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NpemUgPT09IDA7XG4gIH07XG4gIC8qKlxuICAgKiBFeHRyYWN0cyB0aGUgbm9kZSB3aXRoIG1pbmltdW0ga2V5IGZyb20gaGVhcC4gQW1vcnRpemVkIHJ1bm5pbmdcbiAgICogdGltZTogTyhsb2cgbikuXG4gICAqIEBtZW1iZXJvZiBGaWJvbmFjY2lIZWFwXG4gICAqL1xuXG5cbiAgRmlib25hY2NpSGVhcC5wcm90b3R5cGUuZXh0cmFjdE1pbmltdW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gbm9kZSB0byByZW1vdmVcbiAgICB2YXIgbm9kZSA9IHRoaXMuX21pbmltdW07IC8vIGNoZWNrIHdlIGhhdmUgYSBtaW5pbXVtXG5cbiAgICBpZiAobm9kZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSAvLyBjdXJyZW50IG1pbmltdW1cblxuXG4gICAgdmFyIG1pbmltdW0gPSB0aGlzLl9taW5pbXVtOyAvLyBnZXQgbnVtYmVyIG9mIGNoaWxkcmVuXG5cbiAgICB2YXIgbnVtYmVyT2ZDaGlsZHJlbiA9IG5vZGUuZGVncmVlOyAvLyBwb2ludGVyIHRvIHRoZSBmaXJzdCBjaGlsZFxuXG4gICAgdmFyIHggPSBub2RlLmNoaWxkOyAvLyBmb3IgZWFjaCBjaGlsZCBvZiBub2RlIGRvLi4uXG5cbiAgICB3aGlsZSAobnVtYmVyT2ZDaGlsZHJlbiA+IDApIHtcbiAgICAgIC8vIHN0b3JlIG5vZGUgaW4gcmlnaHQgc2lkZVxuICAgICAgdmFyIHRlbXBSaWdodCA9IHgucmlnaHQ7IC8vIHJlbW92ZSB4IGZyb20gY2hpbGQgbGlzdFxuXG4gICAgICB4LmxlZnQucmlnaHQgPSB4LnJpZ2h0O1xuICAgICAgeC5yaWdodC5sZWZ0ID0geC5sZWZ0OyAvLyBhZGQgeCB0byByb290IGxpc3Qgb2YgaGVhcFxuXG4gICAgICB4LmxlZnQgPSBtaW5pbXVtO1xuICAgICAgeC5yaWdodCA9IG1pbmltdW0ucmlnaHQ7XG4gICAgICBtaW5pbXVtLnJpZ2h0ID0geDtcbiAgICAgIHgucmlnaHQubGVmdCA9IHg7IC8vIHNldCBQYXJlbnRbeF0gdG8gbnVsbFxuXG4gICAgICB4LnBhcmVudCA9IG51bGw7XG4gICAgICB4ID0gdGVtcFJpZ2h0O1xuICAgICAgbnVtYmVyT2ZDaGlsZHJlbi0tO1xuICAgIH0gLy8gcmVtb3ZlIG5vZGUgZnJvbSByb290IGxpc3Qgb2YgaGVhcFxuXG5cbiAgICBub2RlLmxlZnQucmlnaHQgPSBub2RlLnJpZ2h0O1xuICAgIG5vZGUucmlnaHQubGVmdCA9IG5vZGUubGVmdDsgLy8gdXBkYXRlIG1pbmltdW1cblxuICAgIGlmIChub2RlID09PSBub2RlLnJpZ2h0KSB7XG4gICAgICAvLyBlbXB0eVxuICAgICAgbWluaW11bSA9IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHVwZGF0ZSBtaW5pbXVtXG4gICAgICBtaW5pbXVtID0gbm9kZS5yaWdodDsgLy8gd2UgbmVlZCB0byB1cGRhdGUgdGhlIHBvaW50ZXIgdG8gdGhlIHJvb3Qgd2l0aCBtaW5pbXVtIGtleVxuXG4gICAgICBtaW5pbXVtID0gX2ZpbmRNaW5pbXVtTm9kZShtaW5pbXVtLCB0aGlzLl9zaXplKTtcbiAgICB9IC8vIGRlY3JlbWVudCBzaXplIG9mIGhlYXBcblxuXG4gICAgdGhpcy5fc2l6ZS0tOyAvLyB1cGRhdGUgbWluaW11bVxuXG4gICAgdGhpcy5fbWluaW11bSA9IG1pbmltdW07IC8vIHJldHVybiBub2RlXG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfTtcbiAgLyoqXG4gICAqIFJlbW92ZXMgYSBub2RlIGZyb20gdGhlIGhlYXAgZ2l2ZW4gdGhlIHJlZmVyZW5jZSB0byB0aGUgbm9kZS4gVGhlIHRyZWVzXG4gICAqIGluIHRoZSBoZWFwIHdpbGwgYmUgY29uc29saWRhdGVkLCBpZiBuZWNlc3NhcnkuIFRoaXMgb3BlcmF0aW9uIG1heSBmYWlsXG4gICAqIHRvIHJlbW92ZSB0aGUgY29ycmVjdCBlbGVtZW50IGlmIHRoZXJlIGFyZSBub2RlcyB3aXRoIGtleSB2YWx1ZSAtSW5maW5pdHkuXG4gICAqIFJ1bm5pbmcgdGltZTogTyhsb2cgbikgYW1vcnRpemVkLlxuICAgKiBAbWVtYmVyb2YgRmlib25hY2NpSGVhcFxuICAgKi9cblxuXG4gIEZpYm9uYWNjaUhlYXAucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgLy8gZGVjcmVhc2Uga2V5IHZhbHVlXG4gICAgdGhpcy5fbWluaW11bSA9IF9kZWNyZWFzZUtleSh0aGlzLl9taW5pbXVtLCBub2RlLCAtMSk7IC8vIHJlbW92ZSB0aGUgc21hbGxlc3RcblxuICAgIHRoaXMuZXh0cmFjdE1pbmltdW0oKTtcbiAgfTtcbiAgLyoqXG4gICAqIERlY3JlYXNlcyB0aGUga2V5IHZhbHVlIGZvciBhIGhlYXAgbm9kZSwgZ2l2ZW4gdGhlIG5ldyB2YWx1ZSB0byB0YWtlIG9uLlxuICAgKiBUaGUgc3RydWN0dXJlIG9mIHRoZSBoZWFwIG1heSBiZSBjaGFuZ2VkIGFuZCB3aWxsIG5vdCBiZSBjb25zb2xpZGF0ZWQuXG4gICAqIFJ1bm5pbmcgdGltZTogTygxKSBhbW9ydGl6ZWQuXG4gICAqIEBtZW1iZXJvZiBGaWJvbmFjY2lIZWFwXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2RlY3JlYXNlS2V5KG1pbmltdW0sIG5vZGUsIGtleSkge1xuICAgIC8vIHNldCBub2RlIGtleVxuICAgIG5vZGUua2V5ID0ga2V5OyAvLyBnZXQgcGFyZW50IG5vZGVcblxuICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudDtcblxuICAgIGlmIChwYXJlbnQgJiYgc21hbGxlcihub2RlLmtleSwgcGFyZW50LmtleSkpIHtcbiAgICAgIC8vIHJlbW92ZSBub2RlIGZyb20gcGFyZW50XG4gICAgICBfY3V0KG1pbmltdW0sIG5vZGUsIHBhcmVudCk7IC8vIHJlbW92ZSBhbGwgbm9kZXMgZnJvbSBwYXJlbnQgdG8gdGhlIHJvb3QgcGFyZW50XG5cblxuICAgICAgX2Nhc2NhZGluZ0N1dChtaW5pbXVtLCBwYXJlbnQpO1xuICAgIH0gLy8gdXBkYXRlIG1pbmltdW0gbm9kZSBpZiBuZWVkZWRcblxuXG4gICAgaWYgKHNtYWxsZXIobm9kZS5rZXksIG1pbmltdW0ua2V5KSkge1xuICAgICAgbWluaW11bSA9IG5vZGU7XG4gICAgfSAvLyByZXR1cm4gbWluaW11bVxuXG5cbiAgICByZXR1cm4gbWluaW11bTtcbiAgfVxuICAvKipcbiAgICogVGhlIHJldmVyc2Ugb2YgdGhlIGxpbmsgb3BlcmF0aW9uOiByZW1vdmVzIG5vZGUgZnJvbSB0aGUgY2hpbGQgbGlzdCBvZiBwYXJlbnQuXG4gICAqIFRoaXMgbWV0aG9kIGFzc3VtZXMgdGhhdCBtaW4gaXMgbm9uLW51bGwuIFJ1bm5pbmcgdGltZTogTygxKS5cbiAgICogQG1lbWJlcm9mIEZpYm9uYWNjaUhlYXBcbiAgICovXG5cblxuICBmdW5jdGlvbiBfY3V0KG1pbmltdW0sIG5vZGUsIHBhcmVudCkge1xuICAgIC8vIHJlbW92ZSBub2RlIGZyb20gcGFyZW50IGNoaWxkcmVuIGFuZCBkZWNyZW1lbnQgRGVncmVlW3BhcmVudF1cbiAgICBub2RlLmxlZnQucmlnaHQgPSBub2RlLnJpZ2h0O1xuICAgIG5vZGUucmlnaHQubGVmdCA9IG5vZGUubGVmdDtcbiAgICBwYXJlbnQuZGVncmVlLS07IC8vIHJlc2V0IHkuY2hpbGQgaWYgbmVjZXNzYXJ5XG5cbiAgICBpZiAocGFyZW50LmNoaWxkID09PSBub2RlKSB7XG4gICAgICBwYXJlbnQuY2hpbGQgPSBub2RlLnJpZ2h0O1xuICAgIH0gLy8gcmVtb3ZlIGNoaWxkIGlmIGRlZ3JlZSBpcyAwXG5cblxuICAgIGlmIChwYXJlbnQuZGVncmVlID09PSAwKSB7XG4gICAgICBwYXJlbnQuY2hpbGQgPSBudWxsO1xuICAgIH0gLy8gYWRkIG5vZGUgdG8gcm9vdCBsaXN0IG9mIGhlYXBcblxuXG4gICAgbm9kZS5sZWZ0ID0gbWluaW11bTtcbiAgICBub2RlLnJpZ2h0ID0gbWluaW11bS5yaWdodDtcbiAgICBtaW5pbXVtLnJpZ2h0ID0gbm9kZTtcbiAgICBub2RlLnJpZ2h0LmxlZnQgPSBub2RlOyAvLyBzZXQgcGFyZW50W25vZGVdIHRvIG51bGxcblxuICAgIG5vZGUucGFyZW50ID0gbnVsbDsgLy8gc2V0IG1hcmtbbm9kZV0gdG8gZmFsc2VcblxuICAgIG5vZGUubWFyayA9IGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBQZXJmb3JtcyBhIGNhc2NhZGluZyBjdXQgb3BlcmF0aW9uLiBUaGlzIGN1dHMgbm9kZSBmcm9tIGl0cyBwYXJlbnQgYW5kIHRoZW5cbiAgICogZG9lcyB0aGUgc2FtZSBmb3IgaXRzIHBhcmVudCwgYW5kIHNvIG9uIHVwIHRoZSB0cmVlLlxuICAgKiBSdW5uaW5nIHRpbWU6IE8obG9nIG4pOyBPKDEpIGV4Y2x1ZGluZyB0aGUgcmVjdXJzaW9uLlxuICAgKiBAbWVtYmVyb2YgRmlib25hY2NpSGVhcFxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9jYXNjYWRpbmdDdXQobWluaW11bSwgbm9kZSkge1xuICAgIC8vIHN0b3JlIHBhcmVudCBub2RlXG4gICAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50OyAvLyBpZiB0aGVyZSdzIGEgcGFyZW50Li4uXG5cbiAgICBpZiAoIXBhcmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gaWYgbm9kZSBpcyB1bm1hcmtlZCwgc2V0IGl0IG1hcmtlZFxuXG5cbiAgICBpZiAoIW5vZGUubWFyaykge1xuICAgICAgbm9kZS5tYXJrID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaXQncyBtYXJrZWQsIGN1dCBpdCBmcm9tIHBhcmVudFxuICAgICAgX2N1dChtaW5pbXVtLCBub2RlLCBwYXJlbnQpOyAvLyBjdXQgaXRzIHBhcmVudCBhcyB3ZWxsXG5cblxuICAgICAgX2Nhc2NhZGluZ0N1dChwYXJlbnQpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogTWFrZSB0aGUgZmlyc3Qgbm9kZSBhIGNoaWxkIG9mIHRoZSBzZWNvbmQgb25lLiBSdW5uaW5nIHRpbWU6IE8oMSkgYWN0dWFsLlxuICAgKiBAbWVtYmVyb2YgRmlib25hY2NpSGVhcFxuICAgKi9cblxuXG4gIHZhciBfbGlua05vZGVzID0gZnVuY3Rpb24gX2xpbmtOb2Rlcyhub2RlLCBwYXJlbnQpIHtcbiAgICAvLyByZW1vdmUgbm9kZSBmcm9tIHJvb3QgbGlzdCBvZiBoZWFwXG4gICAgbm9kZS5sZWZ0LnJpZ2h0ID0gbm9kZS5yaWdodDtcbiAgICBub2RlLnJpZ2h0LmxlZnQgPSBub2RlLmxlZnQ7IC8vIG1ha2Ugbm9kZSBhIENoaWxkIG9mIHBhcmVudFxuXG4gICAgbm9kZS5wYXJlbnQgPSBwYXJlbnQ7XG5cbiAgICBpZiAoIXBhcmVudC5jaGlsZCkge1xuICAgICAgcGFyZW50LmNoaWxkID0gbm9kZTtcbiAgICAgIG5vZGUucmlnaHQgPSBub2RlO1xuICAgICAgbm9kZS5sZWZ0ID0gbm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgbm9kZS5sZWZ0ID0gcGFyZW50LmNoaWxkO1xuICAgICAgbm9kZS5yaWdodCA9IHBhcmVudC5jaGlsZC5yaWdodDtcbiAgICAgIHBhcmVudC5jaGlsZC5yaWdodCA9IG5vZGU7XG4gICAgICBub2RlLnJpZ2h0LmxlZnQgPSBub2RlO1xuICAgIH0gLy8gaW5jcmVhc2UgZGVncmVlW3BhcmVudF1cblxuXG4gICAgcGFyZW50LmRlZ3JlZSsrOyAvLyBzZXQgbWFya1tub2RlXSBmYWxzZVxuXG4gICAgbm9kZS5tYXJrID0gZmFsc2U7XG4gIH07XG5cbiAgZnVuY3Rpb24gX2ZpbmRNaW5pbXVtTm9kZShtaW5pbXVtLCBzaXplKSB7XG4gICAgLy8gdG8gZmluZCB0cmVlcyBvZiB0aGUgc2FtZSBkZWdyZWUgZWZmaWNpZW50bHkgd2UgdXNlIGFuIGFycmF5IG9mIGxlbmd0aCBPKGxvZyBuKSBpbiB3aGljaCB3ZSBrZWVwIGEgcG9pbnRlciB0byBvbmUgcm9vdCBvZiBlYWNoIGRlZ3JlZVxuICAgIHZhciBhcnJheVNpemUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHNpemUpICogb25lT3ZlckxvZ1BoaSkgKyAxOyAvLyBjcmVhdGUgbGlzdCB3aXRoIGluaXRpYWwgY2FwYWNpdHlcblxuICAgIHZhciBhcnJheSA9IG5ldyBBcnJheShhcnJheVNpemUpOyAvLyBmaW5kIHRoZSBudW1iZXIgb2Ygcm9vdCBub2Rlcy5cblxuICAgIHZhciBudW1Sb290cyA9IDA7XG4gICAgdmFyIHggPSBtaW5pbXVtO1xuXG4gICAgaWYgKHgpIHtcbiAgICAgIG51bVJvb3RzKys7XG4gICAgICB4ID0geC5yaWdodDtcblxuICAgICAgd2hpbGUgKHggIT09IG1pbmltdW0pIHtcbiAgICAgICAgbnVtUm9vdHMrKztcbiAgICAgICAgeCA9IHgucmlnaHQ7XG4gICAgICB9XG4gICAgfSAvLyB2YXJzXG5cblxuICAgIHZhciB5OyAvLyBGb3IgZWFjaCBub2RlIGluIHJvb3QgbGlzdCBkby4uLlxuXG4gICAgd2hpbGUgKG51bVJvb3RzID4gMCkge1xuICAgICAgLy8gYWNjZXNzIHRoaXMgbm9kZSdzIGRlZ3JlZS4uXG4gICAgICB2YXIgZCA9IHguZGVncmVlOyAvLyBnZXQgbmV4dCBub2RlXG5cbiAgICAgIHZhciBuZXh0ID0geC5yaWdodDsgLy8gY2hlY2sgaWYgdGhlcmUgaXMgYSBub2RlIGFscmVhZHkgaW4gYXJyYXkgd2l0aCB0aGUgc2FtZSBkZWdyZWVcblxuICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgLy8gZ2V0IG5vZGUgd2l0aCB0aGUgc2FtZSBkZWdyZWUgaXMgYW55XG4gICAgICAgIHkgPSBhcnJheVtkXTtcblxuICAgICAgICBpZiAoIXkpIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSAvLyBtYWtlIG9uZSBub2RlIHdpdGggdGhlIHNhbWUgZGVncmVlIGEgY2hpbGQgb2YgdGhlIG90aGVyLCBkbyB0aGlzIGJhc2VkIG9uIHRoZSBrZXkgdmFsdWUuXG5cblxuICAgICAgICBpZiAobGFyZ2VyKHgua2V5LCB5LmtleSkpIHtcbiAgICAgICAgICB2YXIgdGVtcCA9IHk7XG4gICAgICAgICAgeSA9IHg7XG4gICAgICAgICAgeCA9IHRlbXA7XG4gICAgICAgIH0gLy8gbWFrZSB5IGEgY2hpbGQgb2YgeFxuXG5cbiAgICAgICAgX2xpbmtOb2Rlcyh5LCB4KTsgLy8gd2UgaGF2ZSBoYW5kbGVkIHRoaXMgZGVncmVlLCBnbyB0byBuZXh0IG9uZS5cblxuXG4gICAgICAgIGFycmF5W2RdID0gbnVsbDtcbiAgICAgICAgZCsrO1xuICAgICAgfSAvLyBzYXZlIHRoaXMgbm9kZSBmb3IgbGF0ZXIgd2hlbiB3ZSBtaWdodCBlbmNvdW50ZXIgYW5vdGhlciBvZiB0aGUgc2FtZSBkZWdyZWUuXG5cblxuICAgICAgYXJyYXlbZF0gPSB4OyAvLyBtb3ZlIGZvcndhcmQgdGhyb3VnaCBsaXN0LlxuXG4gICAgICB4ID0gbmV4dDtcbiAgICAgIG51bVJvb3RzLS07XG4gICAgfSAvLyBTZXQgbWluIHRvIG51bGwgKGVmZmVjdGl2ZWx5IGxvc2luZyB0aGUgcm9vdCBsaXN0KSBhbmQgcmVjb25zdHJ1Y3QgdGhlIHJvb3QgbGlzdCBmcm9tIHRoZSBhcnJheSBlbnRyaWVzIGluIGFycmF5W10uXG5cblxuICAgIG1pbmltdW0gPSBudWxsOyAvLyBsb29wIG5vZGVzIGluIGFycmF5XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5U2l6ZTsgaSsrKSB7XG4gICAgICAvLyBnZXQgY3VycmVudCBub2RlXG4gICAgICB5ID0gYXJyYXlbaV07XG5cbiAgICAgIGlmICgheSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gY2hlY2sgaWYgd2UgaGF2ZSBhIGxpbmtlZCBsaXN0XG5cblxuICAgICAgaWYgKG1pbmltdW0pIHtcbiAgICAgICAgLy8gRmlyc3QgcmVtb3ZlIG5vZGUgZnJvbSByb290IGxpc3QuXG4gICAgICAgIHkubGVmdC5yaWdodCA9IHkucmlnaHQ7XG4gICAgICAgIHkucmlnaHQubGVmdCA9IHkubGVmdDsgLy8gbm93IGFkZCB0byByb290IGxpc3QsIGFnYWluLlxuXG4gICAgICAgIHkubGVmdCA9IG1pbmltdW07XG4gICAgICAgIHkucmlnaHQgPSBtaW5pbXVtLnJpZ2h0O1xuICAgICAgICBtaW5pbXVtLnJpZ2h0ID0geTtcbiAgICAgICAgeS5yaWdodC5sZWZ0ID0geTsgLy8gY2hlY2sgaWYgdGhpcyBpcyBhIG5ldyBtaW4uXG5cbiAgICAgICAgaWYgKHNtYWxsZXIoeS5rZXksIG1pbmltdW0ua2V5KSkge1xuICAgICAgICAgIG1pbmltdW0gPSB5O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtaW5pbXVtID0geTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWluaW11bTtcbiAgfVxuXG4gIHJldHVybiBGaWJvbmFjY2lIZWFwO1xufSwge1xuICBpc0NsYXNzOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRmlib25hY2NpSGVhcENsYXNzID0gY3JlYXRlRmlib25hY2NpSGVhcENsYXNzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJbW11dGFibGVEZW5zZU1hdHJpeENsYXNzID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdJbW11dGFibGVEZW5zZU1hdHJpeCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydzbWFsbGVyJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBzbWFsbGVyID0gX3JlZi5zbWFsbGVyLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuXG4gIGZ1bmN0aW9uIEltbXV0YWJsZURlbnNlTWF0cml4KGRhdGEsIGRhdGF0eXBlKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEltbXV0YWJsZURlbnNlTWF0cml4KSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YXR5cGUgJiYgISgwLCBfaXMuaXNTdHJpbmcpKGRhdGF0eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRhdGF0eXBlOiAnICsgZGF0YXR5cGUpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KShkYXRhKSB8fCAoMCwgX2lzLmlzQXJyYXkpKGRhdGEpKSB7XG4gICAgICAvLyB1c2UgRGVuc2VNYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHZhciBtYXRyaXggPSBuZXcgRGVuc2VNYXRyaXgoZGF0YSwgZGF0YXR5cGUpOyAvLyBpbnRlcm5hbCBzdHJ1Y3R1cmVzXG5cbiAgICAgIHRoaXMuX2RhdGEgPSBtYXRyaXguX2RhdGE7XG4gICAgICB0aGlzLl9zaXplID0gbWF0cml4Ll9zaXplO1xuICAgICAgdGhpcy5fZGF0YXR5cGUgPSBtYXRyaXguX2RhdGF0eXBlO1xuICAgICAgdGhpcy5fbWluID0gbnVsbDtcbiAgICAgIHRoaXMuX21heCA9IG51bGw7XG4gICAgfSBlbHNlIGlmIChkYXRhICYmICgwLCBfaXMuaXNBcnJheSkoZGF0YS5kYXRhKSAmJiAoMCwgX2lzLmlzQXJyYXkpKGRhdGEuc2l6ZSkpIHtcbiAgICAgIC8vIGluaXRpYWxpemUgZmllbGRzIGZyb20gSlNPTiByZXByZXNlbnRhdGlvblxuICAgICAgdGhpcy5fZGF0YSA9IGRhdGEuZGF0YTtcbiAgICAgIHRoaXMuX3NpemUgPSBkYXRhLnNpemU7XG4gICAgICB0aGlzLl9kYXRhdHlwZSA9IGRhdGEuZGF0YXR5cGU7XG4gICAgICB0aGlzLl9taW4gPSB0eXBlb2YgZGF0YS5taW4gIT09ICd1bmRlZmluZWQnID8gZGF0YS5taW4gOiBudWxsO1xuICAgICAgdGhpcy5fbWF4ID0gdHlwZW9mIGRhdGEubWF4ICE9PSAndW5kZWZpbmVkJyA/IGRhdGEubWF4IDogbnVsbDtcbiAgICB9IGVsc2UgaWYgKGRhdGEpIHtcbiAgICAgIC8vIHVuc3VwcG9ydGVkIHR5cGVcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vuc3VwcG9ydGVkIHR5cGUgb2YgZGF0YSAoJyArICgwLCBfaXMudHlwZU9mKShkYXRhKSArICcpJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG5vdGhpbmcgcHJvdmlkZWRcbiAgICAgIHRoaXMuX2RhdGEgPSBbXTtcbiAgICAgIHRoaXMuX3NpemUgPSBbMF07XG4gICAgICB0aGlzLl9kYXRhdHlwZSA9IGRhdGF0eXBlO1xuICAgICAgdGhpcy5fbWluID0gbnVsbDtcbiAgICAgIHRoaXMuX21heCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXgucHJvdG90eXBlID0gbmV3IERlbnNlTWF0cml4KCk7XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuICBJbW11dGFibGVEZW5zZU1hdHJpeC5wcm90b3R5cGUudHlwZSA9ICdJbW11dGFibGVEZW5zZU1hdHJpeCc7XG4gIEltbXV0YWJsZURlbnNlTWF0cml4LnByb3RvdHlwZS5pc0ltbXV0YWJsZURlbnNlTWF0cml4ID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEdldCBhIHN1YnNldCBvZiB0aGUgbWF0cml4LCBvciByZXBsYWNlIGEgc3Vic2V0IG9mIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3Qgc3Vic2V0ID0gbWF0cml4LnN1YnNldChpbmRleCkgICAgICAgICAgICAgICAvLyByZXRyaWV2ZSBzdWJzZXRcbiAgICogICAgIGNvbnN0IHZhbHVlID0gbWF0cml4LnN1YnNldChpbmRleCwgcmVwbGFjZW1lbnQpICAgLy8gcmVwbGFjZSBzdWJzZXRcbiAgICpcbiAgICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAgICogQHBhcmFtIHtBcnJheSB8IEltbXV0YWJsZURlbnNlTWF0cml4IHwgKn0gW3JlcGxhY2VtZW50XVxuICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWU9MF0gICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMgd2hlblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWF0cml4IGlzIHJlc2l6ZWQuIElmIG5vdCBwcm92aWRlZCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IG1hdHJpeCBlbGVtZW50cyB3aWxsIGJlIGZpbGxlZCB3aXRoIHplcm9zLlxuICAgKi9cblxuICBJbW11dGFibGVEZW5zZU1hdHJpeC5wcm90b3R5cGUuc3Vic2V0ID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyB1c2UgYmFzZSBpbXBsZW1lbnRhdGlvblxuICAgICAgICAgIHZhciBtID0gRGVuc2VNYXRyaXgucHJvdG90eXBlLnN1YnNldC5jYWxsKHRoaXMsIGluZGV4KTsgLy8gY2hlY2sgcmVzdWx0IGlzIGEgbWF0cml4XG5cbiAgICAgICAgICBpZiAoKDAsIF9pcy5pc01hdHJpeCkobSkpIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBpbW11dGFibGUgbWF0cml4XG4gICAgICAgICAgICByZXR1cm4gbmV3IEltbXV0YWJsZURlbnNlTWF0cml4KHtcbiAgICAgICAgICAgICAgZGF0YTogbS5fZGF0YSxcbiAgICAgICAgICAgICAgc2l6ZTogbS5fc2l6ZSxcbiAgICAgICAgICAgICAgZGF0YXR5cGU6IG0uX2RhdGF0eXBlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbTtcbiAgICAgICAgfVxuICAgICAgLy8gaW50ZW50aW9uYWwgZmFsbCB0aHJvdWdoXG5cbiAgICAgIGNhc2UgMjpcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHNldCBzdWJzZXQgb24gYW4gSW1tdXRhYmxlIE1hdHJpeCBpbnN0YW5jZScpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1dyb25nIG51bWJlciBvZiBhcmd1bWVudHMnKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBSZXBsYWNlIGEgc2luZ2xlIGVsZW1lbnQgaW4gdGhlIG1hdHJpeC5cbiAgICogQHBhcmFtIHtOdW1iZXJbXX0gaW5kZXggICBaZXJvLWJhc2VkIGluZGV4XG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSAgICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLiBJZiBub3QgcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBtYXRyaXggZWxlbWVudHMgd2lsbCBiZSBsZWZ0IHVuZGVmaW5lZC5cbiAgICogQHJldHVybiB7SW1tdXRhYmxlRGVuc2VNYXRyaXh9IHNlbGZcbiAgICovXG5cblxuICBJbW11dGFibGVEZW5zZU1hdHJpeC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBzZXQgb24gYW4gSW1tdXRhYmxlIE1hdHJpeCBpbnN0YW5jZScpO1xuICB9O1xuICAvKipcbiAgICogUmVzaXplIHRoZSBtYXRyaXggdG8gdGhlIGdpdmVuIHNpemUuIFJldHVybnMgYSBjb3B5IG9mIHRoZSBtYXRyaXggd2hlblxuICAgKiBgY29weT10cnVlYCwgb3RoZXJ3aXNlIHJldHVybiB0aGUgbWF0cml4IGl0c2VsZiAocmVzaXplIGluIHBsYWNlKS5cbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJbXX0gc2l6ZSAgICAgICAgICAgVGhlIG5ldyBzaXplIHRoZSBtYXRyaXggc2hvdWxkIGhhdmUuXG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZT0wXSAgICAgIERlZmF1bHQgdmFsdWUsIGZpbGxlZCBpbiBvbiBuZXcgZW50cmllcy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm90IHByb3ZpZGVkLCB0aGUgbWF0cml4IGVsZW1lbnRzIHdpbGxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgZmlsbGVkIHdpdGggemVyb3MuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvcHldICAgICAgICAgIFJldHVybiBhIHJlc2l6ZWQgY29weSBvZiB0aGUgbWF0cml4XG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgIFRoZSByZXNpemVkIG1hdHJpeFxuICAgKi9cblxuXG4gIEltbXV0YWJsZURlbnNlTWF0cml4LnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHJlc2l6ZSBvbiBhbiBJbW11dGFibGUgTWF0cml4IGluc3RhbmNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBEaXNhbGxvd3MgcmVzaGFwaW5nIGluIGZhdm9yIG9mIGltbXV0YWJpbGl0eS5cbiAgICpcbiAgICogQHRocm93cyB7RXJyb3J9IE9wZXJhdGlvbiBub3QgYWxsb3dlZFxuICAgKi9cblxuXG4gIEltbXV0YWJsZURlbnNlTWF0cml4LnByb3RvdHlwZS5yZXNoYXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSByZXNoYXBlIG9uIGFuIEltbXV0YWJsZSBNYXRyaXggaW5zdGFuY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoZSBtYXRyaXhcbiAgICogQHJldHVybiB7SW1tdXRhYmxlRGVuc2VNYXRyaXh9IGNsb25lXG4gICAqL1xuXG5cbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXgucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgSW1tdXRhYmxlRGVuc2VNYXRyaXgoe1xuICAgICAgZGF0YTogKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX2RhdGEpLFxuICAgICAgc2l6ZTogKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX3NpemUpLFxuICAgICAgZGF0YXR5cGU6IHRoaXMuX2RhdGF0eXBlXG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXhcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBJbW11dGFibGVEZW5zZU1hdHJpeC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdJbW11dGFibGVEZW5zZU1hdHJpeCcsXG4gICAgICBkYXRhOiB0aGlzLl9kYXRhLFxuICAgICAgc2l6ZTogdGhpcy5fc2l6ZSxcbiAgICAgIGRhdGF0eXBlOiB0aGlzLl9kYXRhdHlwZVxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIG1hdHJpeCBmcm9tIGEgSlNPTiBvYmplY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJJbW11dGFibGVEZW5zZU1hdHJpeFwiLCBkYXRhOiBbXSwgc2l6ZTogW119YCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG1hdGhqcyBpcyBvcHRpb25hbFxuICAgKiBAcmV0dXJucyB7SW1tdXRhYmxlRGVuc2VNYXRyaXh9XG4gICAqL1xuXG5cbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXguZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgSW1tdXRhYmxlRGVuc2VNYXRyaXgoanNvbik7XG4gIH07XG4gIC8qKlxuICAgKiBTd2FwIHJvd3MgaSBhbmQgaiBpbiBNYXRyaXguXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBpICAgICAgIE1hdHJpeCByb3cgaW5kZXggMVxuICAgKiBAcGFyYW0ge051bWJlcn0gaiAgICAgICBNYXRyaXggcm93IGluZGV4IDJcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgVGhlIG1hdHJpeCByZWZlcmVuY2VcbiAgICovXG5cblxuICBJbW11dGFibGVEZW5zZU1hdHJpeC5wcm90b3R5cGUuc3dhcFJvd3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHN3YXBSb3dzIG9uIGFuIEltbXV0YWJsZSBNYXRyaXggaW5zdGFuY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbWluaW11bSB2YWx1ZSBpbiB0aGUgc2V0XG4gICAqIEByZXR1cm4ge051bWJlciB8IHVuZGVmaW5lZH0gbWluXG4gICAqL1xuXG5cbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXgucHJvdG90eXBlLm1pbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBjaGVjayBtaW4gaGFzIGJlZW4gY2FsY3VsYXRlZCBiZWZvcmVcbiAgICBpZiAodGhpcy5fbWluID09PSBudWxsKSB7XG4gICAgICAvLyBtaW5pbXVtXG4gICAgICB2YXIgbSA9IG51bGw7IC8vIGNvbXB1dGUgbWluXG5cbiAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgICAgICBpZiAobSA9PT0gbnVsbCB8fCBzbWFsbGVyKHYsIG0pKSB7XG4gICAgICAgICAgbSA9IHY7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5fbWluID0gbSAhPT0gbnVsbCA/IG0gOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX21pbjtcbiAgfTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbWF4aW11bSB2YWx1ZSBpbiB0aGUgc2V0XG4gICAqIEByZXR1cm4ge051bWJlciB8IHVuZGVmaW5lZH0gbWF4XG4gICAqL1xuXG5cbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXgucHJvdG90eXBlLm1heCA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBjaGVjayBtYXggaGFzIGJlZW4gY2FsY3VsYXRlZCBiZWZvcmVcbiAgICBpZiAodGhpcy5fbWF4ID09PSBudWxsKSB7XG4gICAgICAvLyBtYXhpbXVtXG4gICAgICB2YXIgbSA9IG51bGw7IC8vIGNvbXB1dGUgbWF4XG5cbiAgICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAodikge1xuICAgICAgICBpZiAobSA9PT0gbnVsbCB8fCBzbWFsbGVyKG0sIHYpKSB7XG4gICAgICAgICAgbSA9IHY7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdGhpcy5fbWF4ID0gbSAhPT0gbnVsbCA/IG0gOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX21heDtcbiAgfTtcblxuICByZXR1cm4gSW1tdXRhYmxlRGVuc2VNYXRyaXg7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJbW11dGFibGVEZW5zZU1hdHJpeENsYXNzID0gY3JlYXRlSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTWF0cml4Q2xhc3MgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdNYXRyaXgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFtdO1xudmFyIGNyZWF0ZU1hdHJpeENsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIE1hdHJpeFxuICAgKlxuICAgKiBBIE1hdHJpeCBpcyBhIHdyYXBwZXIgYXJvdW5kIGFuIEFycmF5LiBBIG1hdHJpeCBjYW4gaG9sZCBhIG11bHRpIGRpbWVuc2lvbmFsXG4gICAqIGFycmF5LiBBIG1hdHJpeCBjYW4gYmUgY29uc3RydWN0ZWQgYXM6XG4gICAqXG4gICAqICAgICBsZXQgbWF0cml4ID0gbWF0aC5tYXRyaXgoZGF0YSlcbiAgICpcbiAgICogTWF0cml4IGNvbnRhaW5zIHRoZSBmdW5jdGlvbnMgdG8gcmVzaXplLCBnZXQgYW5kIHNldCB2YWx1ZXMsIGdldCB0aGUgc2l6ZSxcbiAgICogY2xvbmUgdGhlIG1hdHJpeCBhbmQgdG8gY29udmVydCB0aGUgbWF0cml4IHRvIGEgdmVjdG9yLCBhcnJheSwgb3Igc2NhbGFyLlxuICAgKiBGdXJ0aGVybW9yZSwgb25lIGNhbiBpdGVyYXRlIG92ZXIgdGhlIG1hdHJpeCB1c2luZyBtYXAgYW5kIGZvckVhY2guXG4gICAqIFRoZSBpbnRlcm5hbCBBcnJheSBvZiB0aGUgTWF0cml4IGNhbiBiZSBhY2Nlc3NlZCB1c2luZyB0aGUgZnVuY3Rpb24gdmFsdWVPZi5cbiAgICpcbiAgICogRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICAgIGxldCBtYXRyaXggPSBtYXRoLm1hdHJpeChbWzEsIDJdLCBbMywgNF1dKVxuICAgKiAgICAgbWF0aXguc2l6ZSgpICAgICAgICAgICAgICAvLyBbMiwgMl1cbiAgICogICAgIG1hdHJpeC5yZXNpemUoWzMsIDJdLCA1KVxuICAgKiAgICAgbWF0cml4LnZhbHVlT2YoKSAgICAgICAgICAvLyBbWzEsIDJdLCBbMywgNF0sIFs1LCA1XV1cbiAgICogICAgIG1hdHJpeC5zdWJzZXQoWzEsMl0pICAgICAgIC8vIDMgKGluZGV4ZXMgYXJlIHplcm8tYmFzZWQpXG4gICAqXG4gICAqL1xuICBmdW5jdGlvbiBNYXRyaXgoKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE1hdHJpeCkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIE1hdHJpeC5wcm90b3R5cGUudHlwZSA9ICdNYXRyaXgnO1xuICBNYXRyaXgucHJvdG90eXBlLmlzTWF0cml4ID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEdldCB0aGUgTWF0cml4IHN0b3JhZ2UgY29uc3RydWN0b3IgZm9yIHRoZSBnaXZlbiBmb3JtYXQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgICAgICAgVGhlIE1hdHJpeCBzdG9yYWdlIGZvcm1hdC5cbiAgICpcbiAgICogQHJldHVybiB7RnVuY3Rpb259ICAgICAgICAgICBUaGUgTWF0cml4IHN0b3JhZ2UgY29uc3RydWN0b3IuXG4gICAqL1xuXG4gIE1hdHJpeC5zdG9yYWdlID0gZnVuY3Rpb24gKGZvcm1hdCkge1xuICAgIC8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdjYuMC4wLiBDbGVhbiB1cCBzb21lIGRheVxuICAgIHRocm93IG5ldyBFcnJvcignTWF0cml4LnN0b3JhZ2UgaXMgZGVwcmVjYXRlZCBzaW5jZSB2Ni4wLjAuICcgKyAnVXNlIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIG1hdGgubWF0cml4IGluc3RlYWQuJyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0b3JhZ2UgZm9ybWF0IHVzZWQgYnkgdGhlIG1hdHJpeC5cbiAgICpcbiAgICogVXNhZ2U6XG4gICAqICAgICBjb25zdCBmb3JtYXQgPSBtYXRyaXguc3RvcmFnZSgpICAgLy8gcmV0cmlldmUgc3RvcmFnZSBmb3JtYXRcbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgVGhlIHN0b3JhZ2UgZm9ybWF0LlxuICAgKi9cblxuXG4gIE1hdHJpeC5wcm90b3R5cGUuc3RvcmFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE1hdHJpeCBpbXBsZW1lbnRhdGlvbnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2Ugc3RvcmFnZSBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgZGF0YXR5cGUgb2YgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3QgZm9ybWF0ID0gbWF0cml4LmRhdGF0eXBlKCkgICAgLy8gcmV0cmlldmUgbWF0cml4IGRhdGF0eXBlXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgIFRoZSBkYXRhdHlwZS5cbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLmRhdGF0eXBlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBkYXRhdHlwZSBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBNYXRyaXggV2l0aCB0aGUgdHlwZSBvZiB0aGUgY3VycmVudCBtYXRyaXggaW5zdGFuY2VcbiAgICogQHBhcmFtIHtBcnJheSB8IE9iamVjdH0gZGF0YVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2RhdGF0eXBlXVxuICAgKi9cblxuXG4gIE1hdHJpeC5wcm90b3R5cGUuY3JlYXRlID0gZnVuY3Rpb24gKGRhdGEsIGRhdGF0eXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIGNyZWF0ZSBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN1YnNldCBvZiB0aGUgbWF0cml4LCBvciByZXBsYWNlIGEgc3Vic2V0IG9mIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3Qgc3Vic2V0ID0gbWF0cml4LnN1YnNldChpbmRleCkgICAgICAgICAgICAgICAvLyByZXRyaWV2ZSBzdWJzZXRcbiAgICogICAgIGNvbnN0IHZhbHVlID0gbWF0cml4LnN1YnNldChpbmRleCwgcmVwbGFjZW1lbnQpICAgLy8gcmVwbGFjZSBzdWJzZXRcbiAgICpcbiAgICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeCB8ICp9IFtyZXBsYWNlbWVudF1cbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlPTBdICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLiBJZiBub3QgcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBtYXRyaXggZWxlbWVudHMgd2lsbCBiZSBmaWxsZWQgd2l0aCB6ZXJvcy5cbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLnN1YnNldCA9IGZ1bmN0aW9uIChpbmRleCwgcmVwbGFjZW1lbnQsIGRlZmF1bHRWYWx1ZSkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBzdWJzZXQgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBzaW5nbGUgZWxlbWVudCBmcm9tIHRoZSBtYXRyaXguXG4gICAqIEBwYXJhbSB7bnVtYmVyW119IGluZGV4ICAgWmVyby1iYXNlZCBpbmRleFxuICAgKiBAcmV0dXJuIHsqfSB2YWx1ZVxuICAgKi9cblxuXG4gIE1hdHJpeC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIGdldCBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIFJlcGxhY2UgYSBzaW5nbGUgZWxlbWVudCBpbiB0aGUgbWF0cml4LlxuICAgKiBAcGFyYW0ge251bWJlcltdfSBpbmRleCAgIFplcm8tYmFzZWQgaW5kZXhcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdICAgICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMgd2hlblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWF0cml4IGlzIHJlc2l6ZWQuIElmIG5vdCBwcm92aWRlZCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IG1hdHJpeCBlbGVtZW50cyB3aWxsIGJlIGxlZnQgdW5kZWZpbmVkLlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9IHNlbGZcbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChpbmRleCwgdmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBzZXQgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBSZXNpemUgdGhlIG1hdHJpeCB0byB0aGUgZ2l2ZW4gc2l6ZS4gUmV0dXJucyBhIGNvcHkgb2YgdGhlIG1hdHJpeCB3aGVuXG4gICAqIGBjb3B5PXRydWVgLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBtYXRyaXggaXRzZWxmIChyZXNpemUgaW4gcGxhY2UpLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcltdfSBzaXplICAgICAgICAgICBUaGUgbmV3IHNpemUgdGhlIG1hdHJpeCBzaG91bGQgaGF2ZS5cbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlPTBdICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBub3QgcHJvdmlkZWQsIHRoZSBtYXRyaXggZWxlbWVudHMgd2lsbFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBmaWxsZWQgd2l0aCB6ZXJvcy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbY29weV0gICAgICAgICAgUmV0dXJuIGEgcmVzaXplZCBjb3B5IG9mIHRoZSBtYXRyaXhcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgVGhlIHJlc2l6ZWQgbWF0cml4XG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS5yZXNpemUgPSBmdW5jdGlvbiAoc2l6ZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHJlc2l6ZSBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIFJlc2hhcGUgdGhlIG1hdHJpeCB0byB0aGUgZ2l2ZW4gc2l6ZS4gUmV0dXJucyBhIGNvcHkgb2YgdGhlIG1hdHJpeCB3aGVuXG4gICAqIGBjb3B5PXRydWVgLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBtYXRyaXggaXRzZWxmIChyZXNoYXBlIGluIHBsYWNlKS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZSAgICAgICAgICAgVGhlIG5ldyBzaXplIHRoZSBtYXRyaXggc2hvdWxkIGhhdmUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvcHldICAgICAgICAgIFJldHVybiBhIHJlc2hhcGVkIGNvcHkgb2YgdGhlIG1hdHJpeFxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICBUaGUgcmVzaGFwZWQgbWF0cml4XG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS5yZXNoYXBlID0gZnVuY3Rpb24gKHNpemUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSByZXNoYXBlIG9uIGEgTWF0cml4IGludGVyZmFjZScpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhlIG1hdHJpeFxuICAgKiBAcmV0dXJuIHtNYXRyaXh9IGNsb25lXG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE1hdHJpeCBpbXBsZW1lbnRhdGlvbnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2UgY2xvbmUgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgc2l6ZSBvZiB0aGUgbWF0cml4LlxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119IHNpemVcbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHNpemUgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgbWF0cml4IHdpdGggdGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGV4ZWN1dGVkIG9uXG4gICAqIGVhY2ggZW50cnkgb2YgdGhlIG1hdHJpeC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50LCB0aGUgaW5kZXhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZWxlbWVudCwgYW5kIHRoZSBNYXRyaXggYmVpbmcgdHJhdmVyc2VkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtza2lwWmVyb3NdIEludm9rZSBjYWxsYmFjayBmdW5jdGlvbiBmb3Igbm9uLXplcm8gdmFsdWVzIG9ubHkuXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gbWF0cml4XG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHNraXBaZXJvcykge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBtYXAgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24gb24gZWFjaCBlbnRyeSBvZiB0aGUgbWF0cml4LlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQsIHRoZSBpbmRleFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBlbGVtZW50LCBhbmQgdGhlIE1hdHJpeCBiZWluZyB0cmF2ZXJzZWQuXG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIGZvckVhY2ggb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gQXJyYXkgd2l0aCBhIGNvcHkgb2YgdGhlIGRhdGEgb2YgdGhlIE1hdHJpeFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IGFycmF5XG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSB0b0FycmF5IG9uIGEgTWF0cml4IGludGVyZmFjZScpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHRoZSBwcmltaXRpdmUgdmFsdWUgb2YgdGhlIE1hdHJpeDogYSBtdWx0aWRpbWVuc2lvbmFsIGFycmF5XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXlcbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLnZhbHVlT2YgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHZhbHVlT2Ygb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeCwgd2l0aCBvcHRpb25hbCBmb3JtYXR0aW5nIG9wdGlvbnMuXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvdXRpbHMvbnVtYmVyOmZvcm1hdCBmb3IgYVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIGZvcm1hdCBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIE1hdHJpeC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHRvU3RyaW5nIG9uIGEgTWF0cml4IGludGVyZmFjZScpO1xuICB9O1xuXG4gIHJldHVybiBNYXRyaXg7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNYXRyaXhDbGFzcyA9IGNyZWF0ZU1hdHJpeENsYXNzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJbmRleENsYXNzID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ0luZGV4JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ0ltbXV0YWJsZURlbnNlTWF0cml4J107XG52YXIgY3JlYXRlSW5kZXhDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBJbW11dGFibGVEZW5zZU1hdHJpeCA9IF9yZWYuSW1tdXRhYmxlRGVuc2VNYXRyaXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbmRleC4gQW4gSW5kZXggY2FuIHN0b3JlIHJhbmdlcyBhbmQgc2V0cyBmb3IgbXVsdGlwbGUgZGltZW5zaW9ucy5cbiAgICogTWF0cml4LmdldCwgTWF0cml4LnNldCwgYW5kIG1hdGguc3Vic2V0IGFjY2VwdCBhbiBJbmRleCBhcyBpbnB1dC5cbiAgICpcbiAgICogVXNhZ2U6XG4gICAqICAgICBjb25zdCBpbmRleCA9IG5ldyBJbmRleChyYW5nZTEsIHJhbmdlMiwgbWF0cml4MSwgYXJyYXkxLCAuLi4pXG4gICAqXG4gICAqIFdoZXJlIGVhY2ggcGFyYW1ldGVyIGNhbiBiZSBhbnkgb2Y6XG4gICAqICAgICBBIG51bWJlclxuICAgKiAgICAgQSBzdHJpbmcgKGNvbnRhaW5pbmcgYSBuYW1lIG9mIGFuIG9iamVjdCBwcm9wZXJ0eSlcbiAgICogICAgIEFuIGluc3RhbmNlIG9mIFJhbmdlXG4gICAqICAgICBBbiBBcnJheSB3aXRoIHRoZSBTZXQgdmFsdWVzXG4gICAqICAgICBBIE1hdHJpeCB3aXRoIHRoZSBTZXQgdmFsdWVzXG4gICAqXG4gICAqIFRoZSBwYXJhbWV0ZXJzIHN0YXJ0LCBlbmQsIGFuZCBzdGVwIG11c3QgYmUgaW50ZWdlciBudW1iZXJzLlxuICAgKlxuICAgKiBAY2xhc3MgSW5kZXhcbiAgICogQENvbnN0cnVjdG9yIEluZGV4XG4gICAqIEBwYXJhbSB7Li4uKn0gcmFuZ2VzXG4gICAqL1xuICBmdW5jdGlvbiBJbmRleChyYW5nZXMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSW5kZXgpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIHRoaXMuX2RpbWVuc2lvbnMgPSBbXTtcbiAgICB0aGlzLl9pc1NjYWxhciA9IHRydWU7XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgaWYgKCgwLCBfaXMuaXNSYW5nZSkoYXJnKSkge1xuICAgICAgICB0aGlzLl9kaW1lbnNpb25zLnB1c2goYXJnKTtcblxuICAgICAgICB0aGlzLl9pc1NjYWxhciA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGFyZykgfHwgKDAsIF9pcy5pc01hdHJpeCkoYXJnKSkge1xuICAgICAgICAvLyBjcmVhdGUgbWF0cml4XG4gICAgICAgIHZhciBtID0gX2NyZWF0ZUltbXV0YWJsZU1hdHJpeChhcmcudmFsdWVPZigpKTtcblxuICAgICAgICB0aGlzLl9kaW1lbnNpb25zLnB1c2gobSk7IC8vIHNpemVcblxuXG4gICAgICAgIHZhciBzaXplID0gbS5zaXplKCk7IC8vIHNjYWxhclxuXG4gICAgICAgIGlmIChzaXplLmxlbmd0aCAhPT0gMSB8fCBzaXplWzBdICE9PSAxKSB7XG4gICAgICAgICAgdGhpcy5faXNTY2FsYXIgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgICAgICB0aGlzLl9kaW1lbnNpb25zLnB1c2goX2NyZWF0ZUltbXV0YWJsZU1hdHJpeChbYXJnXSkpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXJnID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBvYmplY3QgcHJvcGVydHkgKGFyZ3VtZW50cy5jb3VudCBzaG91bGQgYmUgMSlcbiAgICAgICAgdGhpcy5fZGltZW5zaW9ucy5wdXNoKGFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdEaW1lbnNpb24gbXVzdCBiZSBhbiBBcnJheSwgTWF0cml4LCBudW1iZXIsIHN0cmluZywgb3IgUmFuZ2UnKTtcbiAgICAgIH0gLy8gVE9ETzogaW1wbGVtZW50IHN1cHBvcnQgZm9yIHdpbGRjYXJkICcqJ1xuXG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIEluZGV4LnByb3RvdHlwZS50eXBlID0gJ0luZGV4JztcbiAgSW5kZXgucHJvdG90eXBlLmlzSW5kZXggPSB0cnVlO1xuXG4gIGZ1bmN0aW9uIF9jcmVhdGVJbW11dGFibGVNYXRyaXgoYXJnKSB7XG4gICAgLy8gbG9vcCBhcnJheSBlbGVtZW50c1xuICAgIGZvciAodmFyIGkgPSAwLCBsID0gYXJnLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgaWYgKHR5cGVvZiBhcmdbaV0gIT09ICdudW1iZXInIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKGFyZ1tpXSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5kZXggcGFyYW1ldGVycyBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXIgbnVtYmVycycpO1xuICAgICAgfVxuICAgIH0gLy8gY3JlYXRlIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbmV3IEltbXV0YWJsZURlbnNlTWF0cml4KGFyZyk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoZSBpbmRleFxuICAgKiBAbWVtYmVyb2YgSW5kZXhcbiAgICogQHJldHVybiB7SW5kZXh9IGNsb25lXG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBpbmRleCA9IG5ldyBJbmRleCgpO1xuICAgIGluZGV4Ll9kaW1lbnNpb25zID0gKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX2RpbWVuc2lvbnMpO1xuICAgIGluZGV4Ll9pc1NjYWxhciA9IHRoaXMuX2lzU2NhbGFyO1xuICAgIHJldHVybiBpbmRleDtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbmRleCBmcm9tIGFuIGFycmF5IHdpdGggcmFuZ2VzL251bWJlcnNcbiAgICogQG1lbWJlcm9mIEluZGV4XG4gICAqIEBwYXJhbSB7QXJyYXkuPEFycmF5IHwgbnVtYmVyPn0gcmFuZ2VzXG4gICAqIEByZXR1cm4ge0luZGV4fSBpbmRleFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIEluZGV4LmNyZWF0ZSA9IGZ1bmN0aW9uIChyYW5nZXMpIHtcbiAgICB2YXIgaW5kZXggPSBuZXcgSW5kZXgoKTtcbiAgICBJbmRleC5hcHBseShpbmRleCwgcmFuZ2VzKTtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH07XG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgc2l6ZSBvZiB0aGUgaW5kZXgsIHRoZSBudW1iZXIgb2YgZWxlbWVudHMgZm9yIGVhY2ggZGltZW5zaW9uLlxuICAgKiBAbWVtYmVyb2YgSW5kZXhcbiAgICogQHJldHVybnMge251bWJlcltdfSBzaXplXG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLnNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNpemUgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHRoaXMuX2RpbWVuc2lvbnMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIGQgPSB0aGlzLl9kaW1lbnNpb25zW2ldO1xuICAgICAgc2l6ZVtpXSA9IHR5cGVvZiBkID09PSAnc3RyaW5nJyA/IDEgOiBkLnNpemUoKVswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2l6ZTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgbWF4aW11bSB2YWx1ZSBmb3IgZWFjaCBvZiB0aGUgaW5kZXhlcyByYW5nZXMuXG4gICAqIEBtZW1iZXJvZiBJbmRleFxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119IG1heFxuICAgKi9cblxuXG4gIEluZGV4LnByb3RvdHlwZS5tYXggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5fZGltZW5zaW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgcmFuZ2UgPSB0aGlzLl9kaW1lbnNpb25zW2ldO1xuICAgICAgdmFsdWVzW2ldID0gdHlwZW9mIHJhbmdlID09PSAnc3RyaW5nJyA/IHJhbmdlIDogcmFuZ2UubWF4KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgbWluaW11bSB2YWx1ZSBmb3IgZWFjaCBvZiB0aGUgaW5kZXhlcyByYW5nZXMuXG4gICAqIEBtZW1iZXJvZiBJbmRleFxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119IG1pblxuICAgKi9cblxuXG4gIEluZGV4LnByb3RvdHlwZS5taW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5fZGltZW5zaW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgcmFuZ2UgPSB0aGlzLl9kaW1lbnNpb25zW2ldO1xuICAgICAgdmFsdWVzW2ldID0gdHlwZW9mIHJhbmdlID09PSAnc3RyaW5nJyA/IHJhbmdlIDogcmFuZ2UubWluKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlcztcbiAgfTtcbiAgLyoqXG4gICAqIExvb3Agb3ZlciBlYWNoIG9mIHRoZSByYW5nZXMgb2YgdGhlIGluZGV4XG4gICAqIEBtZW1iZXJvZiBJbmRleFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIENhbGxlZCBmb3IgZWFjaCByYW5nZSB3aXRoIGEgUmFuZ2UgYXMgZmlyc3RcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd1bWVudCwgdGhlIGRpbWVuc2lvbiBhcyBzZWNvbmQsIGFuZCB0aGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCBvYmplY3QgYXMgdGhpcmQuXG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSB0aGlzLl9kaW1lbnNpb25zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGNhbGxiYWNrKHRoaXMuX2RpbWVuc2lvbnNbaV0sIGksIHRoaXMpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBkaW1lbnNpb24gZm9yIHRoZSBnaXZlbiBpbmRleFxuICAgKiBAbWVtYmVyb2YgSW5kZXhcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGRpbSAgICAgICAgICAgICAgICAgIE51bWJlciBvZiB0aGUgZGltZW5zaW9uXG4gICAqIEByZXR1cm5zIHtSYW5nZSB8IG51bGx9IHJhbmdlXG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLmRpbWVuc2lvbiA9IGZ1bmN0aW9uIChkaW0pIHtcbiAgICByZXR1cm4gdGhpcy5fZGltZW5zaW9uc1tkaW1dIHx8IG51bGw7XG4gIH07XG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgdGhpcyBpbmRleCBjb250YWlucyBhbiBvYmplY3QgcHJvcGVydHlcbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB0aGUgaW5kZXggaXMgYW4gb2JqZWN0IHByb3BlcnR5XG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLmlzT2JqZWN0UHJvcGVydHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RpbWVuc2lvbnMubGVuZ3RoID09PSAxICYmIHR5cGVvZiB0aGlzLl9kaW1lbnNpb25zWzBdID09PSAnc3RyaW5nJztcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9iamVjdCBwcm9wZXJ0eSBuYW1lIHdoZW4gdGhlIEluZGV4IGhvbGRzIGEgc2luZ2xlIG9iamVjdCBwcm9wZXJ0eSxcbiAgICogZWxzZSByZXR1cm5zIG51bGxcbiAgICogQHJldHVybnMge3N0cmluZyB8IG51bGx9XG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLmdldE9iamVjdFByb3BlcnR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmlzT2JqZWN0UHJvcGVydHkoKSA/IHRoaXMuX2RpbWVuc2lvbnNbMF0gOiBudWxsO1xuICB9O1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHRoaXMgaW5kZXggY29udGFpbnMgb25seSBhIHNpbmdsZSB2YWx1ZS5cbiAgICpcbiAgICogVGhpcyBpcyB0aGUgY2FzZSB3aGVuIHRoZSBpbmRleCBpcyBjcmVhdGVkIHdpdGggb25seSBzY2FsYXIgdmFsdWVzIGFzIHJhbmdlcyxcbiAgICogbm90IGZvciByYW5nZXMgcmVzb2x2aW5nIGludG8gYSBzaW5nbGUgdmFsdWUuXG4gICAqIEBtZW1iZXJvZiBJbmRleFxuICAgKiBAcmV0dXJuIHtib29sZWFufSBpc1NjYWxhclxuICAgKi9cblxuXG4gIEluZGV4LnByb3RvdHlwZS5pc1NjYWxhciA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTY2FsYXI7XG4gIH07XG4gIC8qKlxuICAgKiBFeHBhbmQgdGhlIEluZGV4IGludG8gYW4gYXJyYXkuXG4gICAqIEZvciBleGFtcGxlIG5ldyBJbmRleChbMCwzXSwgWzIsN10pIHJldHVybnMgW1swLDEsMl0sIFsyLDMsNCw1LDZdXVxuICAgKiBAbWVtYmVyb2YgSW5kZXhcbiAgICogQHJldHVybnMge0FycmF5fSBhcnJheVxuICAgKi9cblxuXG4gIEluZGV4LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5fZGltZW5zaW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgZGltZW5zaW9uID0gdGhpcy5fZGltZW5zaW9uc1tpXTtcbiAgICAgIGFycmF5LnB1c2godHlwZW9mIGRpbWVuc2lvbiA9PT0gJ3N0cmluZycgPyBkaW1lbnNpb24gOiBkaW1lbnNpb24udG9BcnJheSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIHByaW1pdGl2ZSB2YWx1ZSBvZiB0aGUgSW5kZXgsIGEgdHdvIGRpbWVuc2lvbmFsIGFycmF5LlxuICAgKiBFcXVpdmFsZW50IHRvIEluZGV4LnRvQXJyYXkoKS5cbiAgICogQG1lbWJlcm9mIEluZGV4XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXlcbiAgICovXG5cblxuICBJbmRleC5wcm90b3R5cGUudmFsdWVPZiA9IEluZGV4LnByb3RvdHlwZS50b0FycmF5O1xuICAvKipcbiAgICogR2V0IHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGluZGV4LCBmb3IgZXhhbXBsZSAnWzI6Nl0nIG9yICdbMDoyOjEwLCA0OjcsIFsxLDIsM11dJ1xuICAgKiBAbWVtYmVyb2YgSW5kZXhcbiAgICogQHJldHVybnMge1N0cmluZ30gc3RyXG4gICAqL1xuXG4gIEluZGV4LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3RyaW5ncyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5fZGltZW5zaW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgZGltZW5zaW9uID0gdGhpcy5fZGltZW5zaW9uc1tpXTtcblxuICAgICAgaWYgKHR5cGVvZiBkaW1lbnNpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHN0cmluZ3MucHVzaChKU09OLnN0cmluZ2lmeShkaW1lbnNpb24pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0cmluZ3MucHVzaChkaW1lbnNpb24udG9TdHJpbmcoKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICdbJyArIHN0cmluZ3Muam9pbignLCAnKSArICddJztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIEluZGV4XG4gICAqIEBtZW1iZXJvZiBJbmRleFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczpcbiAgICogICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkluZGV4XCIsIFwicmFuZ2VzXCI6IFt7XCJtYXRoanNcIjogXCJSYW5nZVwiLCBzdGFydDogMCwgZW5kOiAxMCwgc3RlcDoxfSwgLi4uXX1gXG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnSW5kZXgnLFxuICAgICAgZGltZW5zaW9uczogdGhpcy5fZGltZW5zaW9uc1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBJbmRleCBmcm9tIGEgSlNPTiBvYmplY3RcbiAgICogQG1lbWJlcm9mIEluZGV4XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uIEEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczpcbiAgICogICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiSW5kZXhcIiwgXCJkaW1lbnNpb25zXCI6IFt7XCJtYXRoanNcIjogXCJSYW5nZVwiLCBzdGFydDogMCwgZW5kOiAxMCwgc3RlcDoxfSwgLi4uXX1gXG4gICAqIEByZXR1cm4ge0luZGV4fVxuICAgKi9cblxuXG4gIEluZGV4LmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gSW5kZXguY3JlYXRlKGpzb24uZGltZW5zaW9ucyk7XG4gIH07XG5cbiAgcmV0dXJuIEluZGV4O1xufSwge1xuICBpc0NsYXNzOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSW5kZXhDbGFzcyA9IGNyZWF0ZUluZGV4Q2xhc3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhbmdlQ2xhc3MgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ1JhbmdlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbXTtcbnZhciBjcmVhdGVSYW5nZUNsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQ3JlYXRlIGEgcmFuZ2UuIEEgcmFuZ2UgaGFzIGEgc3RhcnQsIHN0ZXAsIGFuZCBlbmQsIGFuZCBjb250YWlucyBmdW5jdGlvbnNcbiAgICogdG8gaXRlcmF0ZSBvdmVyIHRoZSByYW5nZS5cbiAgICpcbiAgICogQSByYW5nZSBjYW4gYmUgY29uc3RydWN0ZWQgYXM6XG4gICAqXG4gICAqICAgICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZShzdGFydCwgZW5kKVxuICAgKiAgICAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnQsIGVuZCwgc3RlcClcbiAgICpcbiAgICogVG8gZ2V0IHRoZSByZXN1bHQgb2YgdGhlIHJhbmdlOlxuICAgKiAgICAgcmFuZ2UuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgKiAgICAgICAgIGNvbnNvbGUubG9nKHgpXG4gICAqICAgICB9KVxuICAgKiAgICAgcmFuZ2UubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAqICAgICAgICAgcmV0dXJuIG1hdGguc2luKHgpXG4gICAqICAgICB9KVxuICAgKiAgICAgcmFuZ2UudG9BcnJheSgpXG4gICAqXG4gICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAqXG4gICAqICAgICBjb25zdCBjID0gbmV3IFJhbmdlKDIsIDYpICAgICAgIC8vIDI6MTo1XG4gICAqICAgICBjLnRvQXJyYXkoKSAgICAgICAgICAgICAgICAgICAgIC8vIFsyLCAzLCA0LCA1XVxuICAgKiAgICAgY29uc3QgZCA9IG5ldyBSYW5nZSgyLCAtMywgLTEpICAvLyAyOi0xOi0yXG4gICAqICAgICBkLnRvQXJyYXkoKSAgICAgICAgICAgICAgICAgICAgIC8vIFsyLCAxLCAwLCAtMSwgLTJdXG4gICAqXG4gICAqIEBjbGFzcyBSYW5nZVxuICAgKiBAY29uc3RydWN0b3IgUmFuZ2VcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0ICBpbmNsdWRlZCBsb3dlciBib3VuZFxuICAgKiBAcGFyYW0ge251bWJlcn0gZW5kICAgIGV4Y2x1ZGVkIHVwcGVyIGJvdW5kXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc3RlcF0gc3RlcCBzaXplLCBkZWZhdWx0IHZhbHVlIGlzIDFcbiAgICovXG4gIGZ1bmN0aW9uIFJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmFuZ2UpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIHZhciBoYXNTdGFydCA9IHN0YXJ0ICE9PSBudWxsICYmIHN0YXJ0ICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGhhc0VuZCA9IGVuZCAhPT0gbnVsbCAmJiBlbmQgIT09IHVuZGVmaW5lZDtcbiAgICB2YXIgaGFzU3RlcCA9IHN0ZXAgIT09IG51bGwgJiYgc3RlcCAhPT0gdW5kZWZpbmVkO1xuXG4gICAgaWYgKGhhc1N0YXJ0KSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikoc3RhcnQpKSB7XG4gICAgICAgIHN0YXJ0ID0gc3RhcnQudG9OdW1iZXIoKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHN0YXJ0ICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgc3RhcnQgbXVzdCBiZSBhIG51bWJlcicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChoYXNFbmQpIHtcbiAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShlbmQpKSB7XG4gICAgICAgIGVuZCA9IGVuZC50b051bWJlcigpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZW5kICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgZW5kIG11c3QgYmUgYSBudW1iZXInKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFzU3RlcCkge1xuICAgICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHN0ZXApKSB7XG4gICAgICAgIHN0ZXAgPSBzdGVwLnRvTnVtYmVyKCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGVwICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgc3RlcCBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zdGFydCA9IGhhc1N0YXJ0ID8gcGFyc2VGbG9hdChzdGFydCkgOiAwO1xuICAgIHRoaXMuZW5kID0gaGFzRW5kID8gcGFyc2VGbG9hdChlbmQpIDogMDtcbiAgICB0aGlzLnN0ZXAgPSBoYXNTdGVwID8gcGFyc2VGbG9hdChzdGVwKSA6IDE7XG4gIH1cbiAgLyoqXG4gICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uXG4gICAqL1xuXG5cbiAgUmFuZ2UucHJvdG90eXBlLnR5cGUgPSAnUmFuZ2UnO1xuICBSYW5nZS5wcm90b3R5cGUuaXNSYW5nZSA9IHRydWU7XG4gIC8qKlxuICAgKiBQYXJzZSBhIHN0cmluZyBpbnRvIGEgcmFuZ2UsXG4gICAqIFRoZSBzdHJpbmcgY29udGFpbnMgdGhlIHN0YXJ0LCBvcHRpb25hbCBzdGVwLCBhbmQgZW5kLCBzZXBhcmF0ZWQgYnkgYSBjb2xvbi5cbiAgICogSWYgdGhlIHN0cmluZyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgcmFuZ2UsIG51bGwgaXMgcmV0dXJuZWQuXG4gICAqIEZvciBleGFtcGxlIHN0cj0nMDoyOjExJy5cbiAgICogQG1lbWJlcm9mIFJhbmdlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHJldHVybiB7UmFuZ2UgfCBudWxsfSByYW5nZVxuICAgKi9cblxuICBSYW5nZS5wYXJzZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBhcmdzID0gc3RyLnNwbGl0KCc6Jyk7XG4gICAgdmFyIG51bXMgPSBhcmdzLm1hcChmdW5jdGlvbiAoYXJnKSB7XG4gICAgICByZXR1cm4gcGFyc2VGbG9hdChhcmcpO1xuICAgIH0pO1xuICAgIHZhciBpbnZhbGlkID0gbnVtcy5zb21lKGZ1bmN0aW9uIChudW0pIHtcbiAgICAgIHJldHVybiBpc05hTihudW0pO1xuICAgIH0pO1xuXG4gICAgaWYgKGludmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHN3aXRjaCAobnVtcy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShudW1zWzBdLCBudW1zWzFdKTtcblxuICAgICAgY2FzZSAzOlxuICAgICAgICByZXR1cm4gbmV3IFJhbmdlKG51bXNbMF0sIG51bXNbMl0sIG51bXNbMV0pO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGUgcmFuZ2VcbiAgICogQHJldHVybiB7UmFuZ2V9IGNsb25lXG4gICAqL1xuXG5cbiAgUmFuZ2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgUmFuZ2UodGhpcy5zdGFydCwgdGhpcy5lbmQsIHRoaXMuc3RlcCk7XG4gIH07XG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgc2l6ZSBvZiB0aGUgcmFuZ2UuXG4gICAqIFJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyBvbmUgbnVtYmVyLCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSByYW5nZS5cbiAgICogQG1lbWJlcm9mIFJhbmdlXG4gICAqIEByZXR1cm5zIHtudW1iZXJbXX0gc2l6ZVxuICAgKi9cblxuXG4gIFJhbmdlLnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsZW4gPSAwO1xuICAgIHZhciBzdGFydCA9IHRoaXMuc3RhcnQ7XG4gICAgdmFyIHN0ZXAgPSB0aGlzLnN0ZXA7XG4gICAgdmFyIGVuZCA9IHRoaXMuZW5kO1xuICAgIHZhciBkaWZmID0gZW5kIC0gc3RhcnQ7XG5cbiAgICBpZiAoKDAsIF9udW1iZXIuc2lnbikoc3RlcCkgPT09ICgwLCBfbnVtYmVyLnNpZ24pKGRpZmYpKSB7XG4gICAgICBsZW4gPSBNYXRoLmNlaWwoZGlmZiAvIHN0ZXApO1xuICAgIH0gZWxzZSBpZiAoZGlmZiA9PT0gMCkge1xuICAgICAgbGVuID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaXNOYU4obGVuKSkge1xuICAgICAgbGVuID0gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gW2xlbl07XG4gIH07XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIG1pbmltdW0gdmFsdWUgaW4gdGhlIHJhbmdlXG4gICAqIEBtZW1iZXJvZiBSYW5nZVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCB1bmRlZmluZWR9IG1pblxuICAgKi9cblxuXG4gIFJhbmdlLnByb3RvdHlwZS5taW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNpemUgPSB0aGlzLnNpemUoKVswXTtcblxuICAgIGlmIChzaXplID4gMCkge1xuICAgICAgaWYgKHRoaXMuc3RlcCA+IDApIHtcbiAgICAgICAgLy8gcG9zaXRpdmUgc3RlcFxuICAgICAgICByZXR1cm4gdGhpcy5zdGFydDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG5lZ2F0aXZlIHN0ZXBcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQgKyAoc2l6ZSAtIDEpICogdGhpcy5zdGVwO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbWF4aW11bSB2YWx1ZSBpbiB0aGUgcmFuZ2VcbiAgICogQG1lbWJlcm9mIFJhbmdlXG4gICAqIEByZXR1cm4ge251bWJlciB8IHVuZGVmaW5lZH0gbWF4XG4gICAqL1xuXG5cbiAgUmFuZ2UucHJvdG90eXBlLm1heCA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc2l6ZSA9IHRoaXMuc2l6ZSgpWzBdO1xuXG4gICAgaWYgKHNpemUgPiAwKSB7XG4gICAgICBpZiAodGhpcy5zdGVwID4gMCkge1xuICAgICAgICAvLyBwb3NpdGl2ZSBzdGVwXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0ICsgKHNpemUgLSAxKSAqIHRoaXMuc3RlcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG5lZ2F0aXZlIHN0ZXBcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIHZhbHVlIGluIHRoZSByYW5nZS5cbiAgICogQG1lbWJlcm9mIFJhbmdlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIG1ldGhvZCBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQsIHRoZSBpbmRleFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBlbGVtZW50LCBhbmQgdGhlIFJhbmdlIGJlaW5nIHRyYXZlcnNlZC5cbiAgICovXG5cblxuICBSYW5nZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciB4ID0gdGhpcy5zdGFydDtcbiAgICB2YXIgc3RlcCA9IHRoaXMuc3RlcDtcbiAgICB2YXIgZW5kID0gdGhpcy5lbmQ7XG4gICAgdmFyIGkgPSAwO1xuXG4gICAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICB3aGlsZSAoeCA8IGVuZCkge1xuICAgICAgICBjYWxsYmFjayh4LCBbaV0sIHRoaXMpO1xuICAgICAgICB4ICs9IHN0ZXA7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0ZXAgPCAwKSB7XG4gICAgICB3aGlsZSAoeCA+IGVuZCkge1xuICAgICAgICBjYWxsYmFjayh4LCBbaV0sIHRoaXMpO1xuICAgICAgICB4ICs9IHN0ZXA7XG4gICAgICAgIGkrKztcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggdmFsdWUgaW4gdGhlIFJhbmdlLCBhbmQgcmV0dXJuIHRoZVxuICAgKiByZXN1bHRzIGFzIGFuIGFycmF5XG4gICAqIEBtZW1iZXJvZiBSYW5nZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayBtZXRob2QgaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50LCB0aGUgaW5kZXhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZWxlbWVudCwgYW5kIHRoZSBNYXRyaXggYmVpbmcgdHJhdmVyc2VkLlxuICAgKiBAcmV0dXJucyB7QXJyYXl9IGFycmF5XG4gICAqL1xuXG5cbiAgUmFuZ2UucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBvYmopIHtcbiAgICAgIGFycmF5W2luZGV4WzBdXSA9IGNhbGxiYWNrKHZhbHVlLCBpbmRleCwgb2JqKTtcbiAgICB9KTtcbiAgICByZXR1cm4gYXJyYXk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gQXJyYXkgd2l0aCBhIGNvcHkgb2YgdGhlIFJhbmdlcyBkYXRhXG4gICAqIEBtZW1iZXJvZiBSYW5nZVxuICAgKiBAcmV0dXJucyB7QXJyYXl9IGFycmF5XG4gICAqL1xuXG5cbiAgUmFuZ2UucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgpIHtcbiAgICAgIGFycmF5W2luZGV4WzBdXSA9IHZhbHVlO1xuICAgIH0pO1xuICAgIHJldHVybiBhcnJheTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgcHJpbWl0aXZlIHZhbHVlIG9mIHRoZSBSYW5nZSwgYSBvbmUgZGltZW5zaW9uYWwgYXJyYXlcbiAgICogQG1lbWJlcm9mIFJhbmdlXG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXlcbiAgICovXG5cblxuICBSYW5nZS5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUT0RPOiBpbXBsZW1lbnQgYSBjYWNoaW5nIG1lY2hhbmlzbSBmb3IgcmFuZ2UudmFsdWVPZigpXG4gICAgcmV0dXJuIHRoaXMudG9BcnJheSgpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByYW5nZSwgd2l0aCBvcHRpb25hbCBmb3JtYXR0aW5nIG9wdGlvbnMuXG4gICAqIE91dHB1dCBpcyBmb3JtYXR0ZWQgYXMgJ3N0YXJ0OnN0ZXA6ZW5kJywgZm9yIGV4YW1wbGUgJzI6Nicgb3IgJzA6MC4yOjExJ1xuICAgKiBAbWVtYmVyb2YgUmFuZ2VcbiAgICogQHBhcmFtIHtPYmplY3QgfCBudW1iZXIgfCBmdW5jdGlvbn0gW29wdGlvbnNdICBGb3JtYXR0aW5nIG9wdGlvbnMuIFNlZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYi91dGlscy9udW1iZXI6Zm9ybWF0IGZvciBhXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gb2YgdGhlIGF2YWlsYWJsZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIFJhbmdlLnByb3RvdHlwZS5mb3JtYXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBzdHIgPSAoMCwgX251bWJlci5mb3JtYXQpKHRoaXMuc3RhcnQsIG9wdGlvbnMpO1xuXG4gICAgaWYgKHRoaXMuc3RlcCAhPT0gMSkge1xuICAgICAgc3RyICs9ICc6JyArICgwLCBfbnVtYmVyLmZvcm1hdCkodGhpcy5zdGVwLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBzdHIgKz0gJzonICsgKDAsIF9udW1iZXIuZm9ybWF0KSh0aGlzLmVuZCwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcmFuZ2UuXG4gICAqIEBtZW1iZXJvZiBSYW5nZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuXG4gIFJhbmdlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtYXQoKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIHJhbmdlXG4gICAqIEBtZW1iZXJvZiBSYW5nZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczpcbiAgICogICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlJhbmdlXCIsIFwic3RhcnRcIjogMiwgXCJlbmRcIjogNCwgXCJzdGVwXCI6IDF9YFxuICAgKi9cblxuXG4gIFJhbmdlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ1JhbmdlJyxcbiAgICAgIHN0YXJ0OiB0aGlzLnN0YXJ0LFxuICAgICAgZW5kOiB0aGlzLmVuZCxcbiAgICAgIHN0ZXA6IHRoaXMuc3RlcFxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhIFJhbmdlIGZyb20gYSBKU09OIG9iamVjdFxuICAgKiBAbWVtYmVyb2YgUmFuZ2VcbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gQSBKU09OIG9iamVjdCBzdHJ1Y3R1cmVkIGFzOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiUmFuZ2VcIiwgXCJzdGFydFwiOiAyLCBcImVuZFwiOiA0LCBcInN0ZXBcIjogMX1gXG4gICAqIEByZXR1cm4ge1JhbmdlfVxuICAgKi9cblxuXG4gIFJhbmdlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlKGpzb24uc3RhcnQsIGpzb24uZW5kLCBqc29uLnN0ZXApO1xuICB9O1xuXG4gIHJldHVybiBSYW5nZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhbmdlQ2xhc3MgPSBjcmVhdGVSYW5nZUNsYXNzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcGFDbGFzcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ1NwYSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydhZGRTY2FsYXInLCAnZXF1YWxTY2FsYXInLCAnRmlib25hY2NpSGVhcCddO1xudmFyIGNyZWF0ZVNwYUNsYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgRmlib25hY2NpSGVhcCA9IF9yZWYuRmlib25hY2NpSGVhcDtcblxuICAvKipcbiAgICogQW4gb3JkZXJlZCBTcGFyc2UgQWNjdW11bGF0b3IgaXMgYSByZXByZXNlbnRhdGlvbiBmb3IgYSBzcGFyc2UgdmVjdG9yIHRoYXQgaW5jbHVkZXMgYSBkZW5zZSBhcnJheVxuICAgKiBvZiB0aGUgdmVjdG9yIGVsZW1lbnRzIGFuZCBhbiBvcmRlcmVkIGxpc3Qgb2Ygbm9uLXplcm8gZWxlbWVudHMuXG4gICAqL1xuICBmdW5jdGlvbiBTcGEoKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNwYSkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfSAvLyBhbGxvY2F0ZSB2ZWN0b3IsIFRPRE8gdXNlIHR5cGVkIGFycmF5c1xuXG5cbiAgICB0aGlzLl92YWx1ZXMgPSBbXTtcbiAgICB0aGlzLl9oZWFwID0gbmV3IEZpYm9uYWNjaUhlYXAoKTtcbiAgfVxuICAvKipcbiAgICogQXR0YWNoIHR5cGUgaW5mb3JtYXRpb25cbiAgICovXG5cblxuICBTcGEucHJvdG90eXBlLnR5cGUgPSAnU3BhJztcbiAgU3BhLnByb3RvdHlwZS5pc1NwYSA9IHRydWU7XG4gIC8qKlxuICAgKiBTZXQgdGhlIHZhbHVlIGZvciBpbmRleCBpLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaSAgICAgICAgICAgICAgICAgICAgICAgVGhlIGluZGV4XG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleH0gICBUaGUgdmFsdWUgYXQgaW5kZXggaVxuICAgKi9cblxuICBTcGEucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChpLCB2KSB7XG4gICAgLy8gY2hlY2sgd2UgaGF2ZSBhIHZhbHVlIEAgaVxuICAgIGlmICghdGhpcy5fdmFsdWVzW2ldKSB7XG4gICAgICAvLyBpbnNlcnQgaW4gaGVhcFxuICAgICAgdmFyIG5vZGUgPSB0aGlzLl9oZWFwLmluc2VydChpLCB2KTsgLy8gc2V0IHRoZSB2YWx1ZSBAIGlcblxuXG4gICAgICB0aGlzLl92YWx1ZXNbaV0gPSBub2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1cGRhdGUgdGhlIHZhbHVlIEAgaVxuICAgICAgdGhpcy5fdmFsdWVzW2ldLnZhbHVlID0gdjtcbiAgICB9XG4gIH07XG5cbiAgU3BhLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoaSkge1xuICAgIHZhciBub2RlID0gdGhpcy5fdmFsdWVzW2ldO1xuXG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlLnZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9O1xuXG4gIFNwYS5wcm90b3R5cGUuYWNjdW11bGF0ZSA9IGZ1bmN0aW9uIChpLCB2KSB7XG4gICAgLy8gbm9kZSBAIGlcbiAgICB2YXIgbm9kZSA9IHRoaXMuX3ZhbHVlc1tpXTtcblxuICAgIGlmICghbm9kZSkge1xuICAgICAgLy8gaW5zZXJ0IGluIGhlYXBcbiAgICAgIG5vZGUgPSB0aGlzLl9oZWFwLmluc2VydChpLCB2KTsgLy8gaW5pdGlhbGl6ZSB2YWx1ZVxuXG4gICAgICB0aGlzLl92YWx1ZXNbaV0gPSBub2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhY2N1bXVsYXRlIHZhbHVlXG4gICAgICBub2RlLnZhbHVlID0gYWRkU2NhbGFyKG5vZGUudmFsdWUsIHYpO1xuICAgIH1cbiAgfTtcblxuICBTcGEucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoZnJvbSwgdG8sIGNhbGxiYWNrKSB7XG4gICAgLy8gcmVmZXJlbmNlc1xuICAgIHZhciBoZWFwID0gdGhpcy5faGVhcDtcbiAgICB2YXIgdmFsdWVzID0gdGhpcy5fdmFsdWVzOyAvLyBub2Rlc1xuXG4gICAgdmFyIG5vZGVzID0gW107IC8vIG5vZGUgd2l0aCBtaW5pbXVtIGtleSwgc2F2ZSBpdFxuXG4gICAgdmFyIG5vZGUgPSBoZWFwLmV4dHJhY3RNaW5pbXVtKCk7XG5cbiAgICBpZiAobm9kZSkge1xuICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICB9IC8vIGV4dHJhY3Qgbm9kZXMgZnJvbSBoZWFwIChvcmRlcmVkKVxuXG5cbiAgICB3aGlsZSAobm9kZSAmJiBub2RlLmtleSA8PSB0bykge1xuICAgICAgLy8gY2hlY2sgaXQgaXMgaW4gcmFuZ2VcbiAgICAgIGlmIChub2RlLmtleSA+PSBmcm9tKSB7XG4gICAgICAgIC8vIGNoZWNrIHZhbHVlIGlzIG5vdCB6ZXJvXG4gICAgICAgIGlmICghZXF1YWxTY2FsYXIobm9kZS52YWx1ZSwgMCkpIHtcbiAgICAgICAgICAvLyBpbnZva2UgY2FsbGJhY2tcbiAgICAgICAgICBjYWxsYmFjayhub2RlLmtleSwgbm9kZS52YWx1ZSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gZXh0cmFjdCBuZXh0IG5vZGUsIHNhdmUgaXRcblxuXG4gICAgICBub2RlID0gaGVhcC5leHRyYWN0TWluaW11bSgpO1xuXG4gICAgICBpZiAobm9kZSkge1xuICAgICAgICBub2Rlcy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH0gLy8gcmVpbnNlcnQgYWxsIG5vZGVzIGluIGhlYXBcblxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gY3VycmVudCBub2RlXG4gICAgICB2YXIgbiA9IG5vZGVzW2ldOyAvLyBpbnNlcnQgbm9kZSBpbiBoZWFwXG5cbiAgICAgIG5vZGUgPSBoZWFwLmluc2VydChuLmtleSwgbi52YWx1ZSk7IC8vIHVwZGF0ZSB2YWx1ZXNcblxuICAgICAgdmFsdWVzW25vZGUua2V5XSA9IG5vZGU7XG4gICAgfVxuICB9O1xuXG4gIFNwYS5wcm90b3R5cGUuc3dhcCA9IGZ1bmN0aW9uIChpLCBqKSB7XG4gICAgLy8gbm9kZSBAIGkgYW5kIGpcbiAgICB2YXIgbm9kZWkgPSB0aGlzLl92YWx1ZXNbaV07XG4gICAgdmFyIG5vZGVqID0gdGhpcy5fdmFsdWVzW2pdOyAvLyBjaGVjayB3ZSBuZWVkIHRvIGluc2VydCBpbmRlY2VzXG5cbiAgICBpZiAoIW5vZGVpICYmIG5vZGVqKSB7XG4gICAgICAvLyBpbnNlcnQgaW4gaGVhcFxuICAgICAgbm9kZWkgPSB0aGlzLl9oZWFwLmluc2VydChpLCBub2Rlai52YWx1ZSk7IC8vIHJlbW92ZSBmcm9tIGhlYXBcblxuICAgICAgdGhpcy5faGVhcC5yZW1vdmUobm9kZWopOyAvLyBzZXQgdmFsdWVzXG5cblxuICAgICAgdGhpcy5fdmFsdWVzW2ldID0gbm9kZWk7XG4gICAgICB0aGlzLl92YWx1ZXNbal0gPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmIChub2RlaSAmJiAhbm9kZWopIHtcbiAgICAgIC8vIGluc2VydCBpbiBoZWFwXG4gICAgICBub2RlaiA9IHRoaXMuX2hlYXAuaW5zZXJ0KGosIG5vZGVpLnZhbHVlKTsgLy8gcmVtb3ZlIGZyb20gaGVhcFxuXG4gICAgICB0aGlzLl9oZWFwLnJlbW92ZShub2RlaSk7IC8vIHNldCB2YWx1ZXNcblxuXG4gICAgICB0aGlzLl92YWx1ZXNbal0gPSBub2RlajtcbiAgICAgIHRoaXMuX3ZhbHVlc1tpXSA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKG5vZGVpICYmIG5vZGVqKSB7XG4gICAgICAvLyBzd2FwIHZhbHVlc1xuICAgICAgdmFyIHYgPSBub2RlaS52YWx1ZTtcbiAgICAgIG5vZGVpLnZhbHVlID0gbm9kZWoudmFsdWU7XG4gICAgICBub2Rlai52YWx1ZSA9IHY7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBTcGE7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcGFDbGFzcyA9IGNyZWF0ZVNwYUNsYXNzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcGFyc2VNYXRyaXhDbGFzcyA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBuYW1lID0gJ1NwYXJzZU1hdHJpeCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdlcXVhbFNjYWxhcicsICdNYXRyaXgnXTtcbnZhciBjcmVhdGVTcGFyc2VNYXRyaXhDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBNYXRyaXggPSBfcmVmLk1hdHJpeDtcblxuICAvKipcbiAgICogU3BhcnNlIE1hdHJpeCBpbXBsZW1lbnRhdGlvbi4gVGhpcyB0eXBlIGltcGxlbWVudHMgYSBDb21wcmVzc2VkIENvbHVtbiBTdG9yYWdlIGZvcm1hdFxuICAgKiBmb3Igc3BhcnNlIG1hdHJpY2VzLlxuICAgKiBAY2xhc3MgU3BhcnNlTWF0cml4XG4gICAqL1xuICBmdW5jdGlvbiBTcGFyc2VNYXRyaXgoZGF0YSwgZGF0YXR5cGUpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU3BhcnNlTWF0cml4KSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YXR5cGUgJiYgISgwLCBfaXMuaXNTdHJpbmcpKGRhdGF0eXBlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGRhdGF0eXBlOiAnICsgZGF0YXR5cGUpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KShkYXRhKSkge1xuICAgICAgLy8gY3JlYXRlIGZyb20gbWF0cml4XG4gICAgICBfY3JlYXRlRnJvbU1hdHJpeCh0aGlzLCBkYXRhLCBkYXRhdHlwZSk7XG4gICAgfSBlbHNlIGlmIChkYXRhICYmICgwLCBfaXMuaXNBcnJheSkoZGF0YS5pbmRleCkgJiYgKDAsIF9pcy5pc0FycmF5KShkYXRhLnB0cikgJiYgKDAsIF9pcy5pc0FycmF5KShkYXRhLnNpemUpKSB7XG4gICAgICAvLyBpbml0aWFsaXplIGZpZWxkc1xuICAgICAgdGhpcy5fdmFsdWVzID0gZGF0YS52YWx1ZXM7XG4gICAgICB0aGlzLl9pbmRleCA9IGRhdGEuaW5kZXg7XG4gICAgICB0aGlzLl9wdHIgPSBkYXRhLnB0cjtcbiAgICAgIHRoaXMuX3NpemUgPSBkYXRhLnNpemU7XG4gICAgICB0aGlzLl9kYXRhdHlwZSA9IGRhdGF0eXBlIHx8IGRhdGEuZGF0YXR5cGU7XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQXJyYXkpKGRhdGEpKSB7XG4gICAgICAvLyBjcmVhdGUgZnJvbSBhcnJheVxuICAgICAgX2NyZWF0ZUZyb21BcnJheSh0aGlzLCBkYXRhLCBkYXRhdHlwZSk7XG4gICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAvLyB1bnN1cHBvcnRlZCB0eXBlXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbnN1cHBvcnRlZCB0eXBlIG9mIGRhdGEgKCcgKyAoMCwgX2lzLnR5cGVPZikoZGF0YSkgKyAnKScpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBub3RoaW5nIHByb3ZpZGVkXG4gICAgICB0aGlzLl92YWx1ZXMgPSBbXTtcbiAgICAgIHRoaXMuX2luZGV4ID0gW107XG4gICAgICB0aGlzLl9wdHIgPSBbMF07XG4gICAgICB0aGlzLl9zaXplID0gWzAsIDBdO1xuICAgICAgdGhpcy5fZGF0YXR5cGUgPSBkYXRhdHlwZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBfY3JlYXRlRnJvbU1hdHJpeChtYXRyaXgsIHNvdXJjZSwgZGF0YXR5cGUpIHtcbiAgICAvLyBjaGVjayBtYXRyaXggdHlwZVxuICAgIGlmIChzb3VyY2UudHlwZSA9PT0gJ1NwYXJzZU1hdHJpeCcpIHtcbiAgICAgIC8vIGNsb25lIGFycmF5c1xuICAgICAgbWF0cml4Ll92YWx1ZXMgPSBzb3VyY2UuX3ZhbHVlcyA/ICgwLCBfb2JqZWN0LmNsb25lKShzb3VyY2UuX3ZhbHVlcykgOiB1bmRlZmluZWQ7XG4gICAgICBtYXRyaXguX2luZGV4ID0gKDAsIF9vYmplY3QuY2xvbmUpKHNvdXJjZS5faW5kZXgpO1xuICAgICAgbWF0cml4Ll9wdHIgPSAoMCwgX29iamVjdC5jbG9uZSkoc291cmNlLl9wdHIpO1xuICAgICAgbWF0cml4Ll9zaXplID0gKDAsIF9vYmplY3QuY2xvbmUpKHNvdXJjZS5fc2l6ZSk7XG4gICAgICBtYXRyaXguX2RhdGF0eXBlID0gZGF0YXR5cGUgfHwgc291cmNlLl9kYXRhdHlwZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYnVpbGQgZnJvbSBtYXRyaXggZGF0YVxuICAgICAgX2NyZWF0ZUZyb21BcnJheShtYXRyaXgsIHNvdXJjZS52YWx1ZU9mKCksIGRhdGF0eXBlIHx8IHNvdXJjZS5fZGF0YXR5cGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF9jcmVhdGVGcm9tQXJyYXkobWF0cml4LCBkYXRhLCBkYXRhdHlwZSkge1xuICAgIC8vIGluaXRpYWxpemUgZmllbGRzXG4gICAgbWF0cml4Ll92YWx1ZXMgPSBbXTtcbiAgICBtYXRyaXguX2luZGV4ID0gW107XG4gICAgbWF0cml4Ll9wdHIgPSBbXTtcbiAgICBtYXRyaXguX2RhdGF0eXBlID0gZGF0YXR5cGU7IC8vIGRpc2NvdmVyIHJvd3MgJiBjb2x1bW5zLCBkbyBub3QgdXNlIG1hdGguc2l6ZSgpIHRvIGF2b2lkIGxvb3BpbmcgYXJyYXkgdHdpY2VcblxuICAgIHZhciByb3dzID0gZGF0YS5sZW5ndGg7XG4gICAgdmFyIGNvbHVtbnMgPSAwOyAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwO1xuXG4gICAgaWYgKCgwLCBfaXMuaXNTdHJpbmcpKGRhdGF0eXBlKSkge1xuICAgICAgLy8gZmluZCBzaWduYXR1cmUgdGhhdCBtYXRjaGVzIChkYXRhdHlwZSwgZGF0YXR5cGUpXG4gICAgICBlcSA9IHR5cGVkLmZpbmQoZXF1YWxTY2FsYXIsIFtkYXRhdHlwZSwgZGF0YXR5cGVdKSB8fCBlcXVhbFNjYWxhcjsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGRhdGF0eXBlKTtcbiAgICB9IC8vIGNoZWNrIHdlIGhhdmUgcm93cyAoZW1wdHkgYXJyYXkpXG5cblxuICAgIGlmIChyb3dzID4gMCkge1xuICAgICAgLy8gY29sdW1uIGluZGV4XG4gICAgICB2YXIgaiA9IDA7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgLy8gc3RvcmUgcG9pbnRlciB0byB2YWx1ZXMgaW5kZXhcbiAgICAgICAgbWF0cml4Ll9wdHIucHVzaChtYXRyaXguX2luZGV4Lmxlbmd0aCk7IC8vIGxvb3Agcm93c1xuXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAvLyBjdXJyZW50IHJvd1xuICAgICAgICAgIHZhciByb3cgPSBkYXRhW2ldOyAvLyBjaGVjayByb3cgaXMgYW4gYXJyYXlcblxuICAgICAgICAgIGlmICgoMCwgX2lzLmlzQXJyYXkpKHJvdykpIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBjb2x1bW5zIGlmIG5lZWRlZCAob25seSBvbiBmaXJzdCBjb2x1bW4pXG4gICAgICAgICAgICBpZiAoaiA9PT0gMCAmJiBjb2x1bW5zIDwgcm93Lmxlbmd0aCkge1xuICAgICAgICAgICAgICBjb2x1bW5zID0gcm93Lmxlbmd0aDtcbiAgICAgICAgICAgIH0gLy8gY2hlY2sgcm93IGhhcyBjb2x1bW5cblxuXG4gICAgICAgICAgICBpZiAoaiA8IHJvdy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgLy8gdmFsdWVcbiAgICAgICAgICAgICAgdmFyIHYgPSByb3dbal07IC8vIGNoZWNrIHZhbHVlICE9IDBcblxuICAgICAgICAgICAgICBpZiAoIWVxKHYsIHplcm8pKSB7XG4gICAgICAgICAgICAgICAgLy8gc3RvcmUgdmFsdWVcbiAgICAgICAgICAgICAgICBtYXRyaXguX3ZhbHVlcy5wdXNoKHYpOyAvLyBpbmRleFxuXG5cbiAgICAgICAgICAgICAgICBtYXRyaXguX2luZGV4LnB1c2goaSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gdXBkYXRlIGNvbHVtbnMgaWYgbmVlZGVkIChvbmx5IG9uIGZpcnN0IGNvbHVtbilcbiAgICAgICAgICAgIGlmIChqID09PSAwICYmIGNvbHVtbnMgPCAxKSB7XG4gICAgICAgICAgICAgIGNvbHVtbnMgPSAxO1xuICAgICAgICAgICAgfSAvLyBjaGVjayB2YWx1ZSAhPSAwIChyb3cgaXMgYSBzY2FsYXIpXG5cblxuICAgICAgICAgICAgaWYgKCFlcShyb3csIHplcm8pKSB7XG4gICAgICAgICAgICAgIC8vIHN0b3JlIHZhbHVlXG4gICAgICAgICAgICAgIG1hdHJpeC5fdmFsdWVzLnB1c2gocm93KTsgLy8gaW5kZXhcblxuXG4gICAgICAgICAgICAgIG1hdHJpeC5faW5kZXgucHVzaChpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gaW5jcmVtZW50IGluZGV4XG5cblxuICAgICAgICBqKys7XG4gICAgICB9IHdoaWxlIChqIDwgY29sdW1ucyk7XG4gICAgfSAvLyBzdG9yZSBudW1iZXIgb2YgdmFsdWVzIGluIHB0clxuXG5cbiAgICBtYXRyaXguX3B0ci5wdXNoKG1hdHJpeC5faW5kZXgubGVuZ3RoKTsgLy8gc2l6ZVxuXG5cbiAgICBtYXRyaXguX3NpemUgPSBbcm93cywgY29sdW1uc107XG4gIH1cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlID0gbmV3IE1hdHJpeCgpO1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IFNwYXJzZU1hdHJpeFxuICAgKi9cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmNyZWF0ZVNwYXJzZU1hdHJpeCA9IGZ1bmN0aW9uIChkYXRhLCBkYXRhdHlwZSkge1xuICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KGRhdGEsIGRhdGF0eXBlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uXG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS50eXBlID0gJ1NwYXJzZU1hdHJpeCc7XG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuaXNTcGFyc2VNYXRyaXggPSB0cnVlO1xuICAvKipcbiAgICogR2V0IHRoZSBtYXRyaXggdHlwZVxuICAgKlxuICAgKiBVc2FnZTpcbiAgICogICAgY29uc3QgbWF0cml4VHlwZSA9IG1hdHJpeC5nZXREYXRhVHlwZSgpICAvLyByZXRyaWV2ZXMgdGhlIG1hdHJpeCB0eXBlXG4gICAqXG4gICAqIEBtZW1iZXJPZiBTcGFyc2VNYXRyaXhcbiAgICogQHJldHVybiB7c3RyaW5nfSAgIHR5cGUgaW5mb3JtYXRpb247IGlmIG11bHRpcGxlIHR5cGVzIGFyZSBmb3VuZCBmcm9tIHRoZSBNYXRyaXgsIGl0IHdpbGwgcmV0dXJuIFwibWl4ZWRcIlxuICAgKi9cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmdldERhdGFUeXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAoMCwgX2FycmF5LmdldEFycmF5RGF0YVR5cGUpKHRoaXMuX3ZhbHVlcywgX2lzLnR5cGVPZik7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIHN0b3JhZ2UgZm9ybWF0IHVzZWQgYnkgdGhlIG1hdHJpeC5cbiAgICpcbiAgICogVXNhZ2U6XG4gICAqICAgICBjb25zdCBmb3JtYXQgPSBtYXRyaXguc3RvcmFnZSgpICAgLy8gcmV0cmlldmUgc3RvcmFnZSBmb3JtYXRcbiAgICpcbiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICBUaGUgc3RvcmFnZSBmb3JtYXQuXG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5zdG9yYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAnc3BhcnNlJztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgZGF0YXR5cGUgb2YgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3QgZm9ybWF0ID0gbWF0cml4LmRhdGF0eXBlKCkgICAgLy8gcmV0cmlldmUgbWF0cml4IGRhdGF0eXBlXG4gICAqXG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgVGhlIGRhdGF0eXBlLlxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuZGF0YXR5cGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGF0eXBlO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IFNwYXJzZU1hdHJpeFxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7QXJyYXl9IGRhdGFcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkYXRhdHlwZV1cbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uIChkYXRhLCBkYXRhdHlwZSkge1xuICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KGRhdGEsIGRhdGF0eXBlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgbWF0cml4IGRlbnNpdHkuXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3QgZGVuc2l0eSA9IG1hdHJpeC5kZW5zaXR5KCkgICAgICAgICAgICAgICAgICAgLy8gcmV0cmlldmUgbWF0cml4IGRlbnNpdHlcbiAgICpcbiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeFxuICAgKiBAcmV0dXJuIHtudW1iZXJ9ICAgICAgICAgICBUaGUgbWF0cml4IGRlbnNpdHkuXG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5kZW5zaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIHJvd3MgJiBjb2x1bW5zXG4gICAgdmFyIHJvd3MgPSB0aGlzLl9zaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gdGhpcy5fc2l6ZVsxXTsgLy8gY2FsY3VsYXRlIGRlbnNpdHlcblxuICAgIHJldHVybiByb3dzICE9PSAwICYmIGNvbHVtbnMgIT09IDAgPyB0aGlzLl9pbmRleC5sZW5ndGggLyAocm93cyAqIGNvbHVtbnMpIDogMDtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN1YnNldCBvZiB0aGUgbWF0cml4LCBvciByZXBsYWNlIGEgc3Vic2V0IG9mIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3Qgc3Vic2V0ID0gbWF0cml4LnN1YnNldChpbmRleCkgICAgICAgICAgICAgICAvLyByZXRyaWV2ZSBzdWJzZXRcbiAgICogICAgIGNvbnN0IHZhbHVlID0gbWF0cml4LnN1YnNldChpbmRleCwgcmVwbGFjZW1lbnQpICAgLy8gcmVwbGFjZSBzdWJzZXRcbiAgICpcbiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeFxuICAgKiBAcGFyYW0ge0luZGV4fSBpbmRleFxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IHwgKn0gW3JlcGxhY2VtZW50XVxuICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWU9MF0gICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMgd2hlblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgbWF0cml4IGlzIHJlc2l6ZWQuIElmIG5vdCBwcm92aWRlZCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IG1hdHJpeCBlbGVtZW50cyB3aWxsIGJlIGZpbGxlZCB3aXRoIHplcm9zLlxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuc3Vic2V0ID0gZnVuY3Rpb24gKGluZGV4LCByZXBsYWNlbWVudCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgLy8gY2hlY2sgaXQgaXMgYSBwYXR0ZXJuIG1hdHJpeFxuICAgIGlmICghdGhpcy5fdmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2Ugc3Vic2V0IG9uIGEgUGF0dGVybiBvbmx5IG1hdHJpeCcpO1xuICAgIH0gLy8gY2hlY2sgYXJndW1lbnRzXG5cblxuICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gX2dldHN1YnNldCh0aGlzLCBpbmRleCk7XG4gICAgICAvLyBpbnRlbnRpb25hbCBmYWxsIHRocm91Z2hcblxuICAgICAgY2FzZSAyOlxuICAgICAgY2FzZSAzOlxuICAgICAgICByZXR1cm4gX3NldHN1YnNldCh0aGlzLCBpbmRleCwgcmVwbGFjZW1lbnQsIGRlZmF1bHRWYWx1ZSk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cycpO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBfZ2V0c3Vic2V0KG1hdHJpeCwgaWR4KSB7XG4gICAgLy8gY2hlY2sgaWR4XG4gICAgaWYgKCEoMCwgX2lzLmlzSW5kZXgpKGlkeCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgaW5kZXgnKTtcbiAgICB9XG5cbiAgICB2YXIgaXNTY2FsYXIgPSBpZHguaXNTY2FsYXIoKTtcblxuICAgIGlmIChpc1NjYWxhcikge1xuICAgICAgLy8gcmV0dXJuIGEgc2NhbGFyXG4gICAgICByZXR1cm4gbWF0cml4LmdldChpZHgubWluKCkpO1xuICAgIH0gLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG5cbiAgICB2YXIgc2l6ZSA9IGlkeC5zaXplKCk7XG5cbiAgICBpZiAoc2l6ZS5sZW5ndGggIT09IG1hdHJpeC5fc2l6ZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3Ioc2l6ZS5sZW5ndGgsIG1hdHJpeC5fc2l6ZS5sZW5ndGgpO1xuICAgIH0gLy8gdmFyc1xuXG5cbiAgICB2YXIgaSwgaWksIGssIGtrOyAvLyB2YWxpZGF0ZSBpZiBhbnkgb2YgdGhlIHJhbmdlcyBpbiB0aGUgaW5kZXggaXMgb3V0IG9mIHJhbmdlXG5cbiAgICB2YXIgbWluID0gaWR4Lm1pbigpO1xuICAgIHZhciBtYXggPSBpZHgubWF4KCk7XG5cbiAgICBmb3IgKGkgPSAwLCBpaSA9IG1hdHJpeC5fc2l6ZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKG1pbltpXSwgbWF0cml4Ll9zaXplW2ldKTtcbiAgICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkobWF4W2ldLCBtYXRyaXguX3NpemVbaV0pO1xuICAgIH0gLy8gbWF0cml4IGFycmF5c1xuXG5cbiAgICB2YXIgbXZhbHVlcyA9IG1hdHJpeC5fdmFsdWVzO1xuICAgIHZhciBtaW5kZXggPSBtYXRyaXguX2luZGV4O1xuICAgIHZhciBtcHRyID0gbWF0cml4Ll9wdHI7IC8vIHJvd3MgJiBjb2x1bW5zIGRpbWVuc2lvbnMgZm9yIHJlc3VsdCBtYXRyaXhcblxuICAgIHZhciByb3dzID0gaWR4LmRpbWVuc2lvbigwKTtcbiAgICB2YXIgY29sdW1ucyA9IGlkeC5kaW1lbnNpb24oMSk7IC8vIHdvcmtzcGFjZSAmIHBlcm11dGF0aW9uIHZlY3RvclxuXG4gICAgdmFyIHcgPSBbXTtcbiAgICB2YXIgcHYgPSBbXTsgLy8gbG9vcCByb3dzIGluIHJlc3VsdGluZyBtYXRyaXhcblxuICAgIHJvd3MuZm9yRWFjaChmdW5jdGlvbiAoaSwgcikge1xuICAgICAgLy8gdXBkYXRlIHBlcm11dGF0aW9uIHZlY3RvclxuICAgICAgcHZbaV0gPSByWzBdOyAvLyBtYXJrIGkgaW4gd29ya3NwYWNlXG5cbiAgICAgIHdbaV0gPSB0cnVlO1xuICAgIH0pOyAvLyByZXN1bHQgbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIHZhbHVlcyA9IG12YWx1ZXMgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgaW5kZXggPSBbXTtcbiAgICB2YXIgcHRyID0gW107IC8vIGxvb3AgY29sdW1ucyBpbiByZXN1bHQgbWF0cml4XG5cbiAgICBjb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGopIHtcbiAgICAgIC8vIHVwZGF0ZSBwdHJcbiAgICAgIHB0ci5wdXNoKGluZGV4Lmxlbmd0aCk7IC8vIGxvb3AgdmFsdWVzIGluIGNvbHVtbiBqXG5cbiAgICAgIGZvciAoayA9IG1wdHJbal0sIGtrID0gbXB0cltqICsgMV07IGsgPCBrazsgaysrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICBpID0gbWluZGV4W2tdOyAvLyBjaGVjayByb3cgaXMgaW4gcmVzdWx0IG1hdHJpeFxuXG4gICAgICAgIGlmICh3W2ldID09PSB0cnVlKSB7XG4gICAgICAgICAgLy8gcHVzaCBpbmRleFxuICAgICAgICAgIGluZGV4LnB1c2gocHZbaV0pOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzXG5cbiAgICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgICB2YWx1ZXMucHVzaChtdmFsdWVzW2tdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTsgLy8gdXBkYXRlIHB0clxuXG4gICAgcHRyLnB1c2goaW5kZXgubGVuZ3RoKTsgLy8gcmV0dXJuIG1hdHJpeFxuXG4gICAgcmV0dXJuIG5ldyBTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiB2YWx1ZXMsXG4gICAgICBpbmRleDogaW5kZXgsXG4gICAgICBwdHI6IHB0cixcbiAgICAgIHNpemU6IHNpemUsXG4gICAgICBkYXRhdHlwZTogbWF0cml4Ll9kYXRhdHlwZVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gX3NldHN1YnNldChtYXRyaXgsIGluZGV4LCBzdWJtYXRyaXgsIGRlZmF1bHRWYWx1ZSkge1xuICAgIC8vIGNoZWNrIGluZGV4XG4gICAgaWYgKCFpbmRleCB8fCBpbmRleC5pc0luZGV4ICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGluZGV4Jyk7XG4gICAgfSAvLyBnZXQgaW5kZXggc2l6ZSBhbmQgY2hlY2sgd2hldGhlciB0aGUgaW5kZXggY29udGFpbnMgYSBzaW5nbGUgdmFsdWVcblxuXG4gICAgdmFyIGlTaXplID0gaW5kZXguc2l6ZSgpO1xuICAgIHZhciBpc1NjYWxhciA9IGluZGV4LmlzU2NhbGFyKCk7IC8vIGNhbGN1bGF0ZSB0aGUgc2l6ZSBvZiB0aGUgc3VibWF0cml4LCBhbmQgY29udmVydCBpdCBpbnRvIGFuIEFycmF5IGlmIG5lZWRlZFxuXG4gICAgdmFyIHNTaXplO1xuXG4gICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKHN1Ym1hdHJpeCkpIHtcbiAgICAgIC8vIHN1Ym1hdHJpeCBzaXplXG4gICAgICBzU2l6ZSA9IHN1Ym1hdHJpeC5zaXplKCk7IC8vIHVzZSBhcnJheSByZXByZXNlbnRhdGlvblxuXG4gICAgICBzdWJtYXRyaXggPSBzdWJtYXRyaXgudG9BcnJheSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBnZXQgc3VibWF0cml4IHNpemUgKGFycmF5LCBzY2FsYXIpXG4gICAgICBzU2l6ZSA9ICgwLCBfYXJyYXkuYXJyYXlTaXplKShzdWJtYXRyaXgpO1xuICAgIH0gLy8gY2hlY2sgaW5kZXggaXMgYSBzY2FsYXJcblxuXG4gICAgaWYgKGlzU2NhbGFyKSB7XG4gICAgICAvLyB2ZXJpZnkgc3VibWF0cml4IGlzIGEgc2NhbGFyXG4gICAgICBpZiAoc1NpemUubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NjYWxhciBleHBlY3RlZCcpO1xuICAgICAgfSAvLyBzZXQgdmFsdWVcblxuXG4gICAgICBtYXRyaXguc2V0KGluZGV4Lm1pbigpLCBzdWJtYXRyaXgsIGRlZmF1bHRWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHZhbGlkYXRlIGRpbWVuc2lvbnMsIGluZGV4IHNpemUgbXVzdCBiZSBvbmUgb3IgdHdvIGRpbWVuc2lvbnNcbiAgICAgIGlmIChpU2l6ZS5sZW5ndGggIT09IDEgJiYgaVNpemUubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaVNpemUubGVuZ3RoLCBtYXRyaXguX3NpemUubGVuZ3RoLCAnPCcpO1xuICAgICAgfSAvLyBjaGVjayBzdWJtYXRyaXggYW5kIGluZGV4IGhhdmUgdGhlIHNhbWUgZGltZW5zaW9uc1xuXG5cbiAgICAgIGlmIChzU2l6ZS5sZW5ndGggPCBpU2l6ZS5sZW5ndGgpIHtcbiAgICAgICAgLy8gY2FsY3VsYXRlIG51bWJlciBvZiBtaXNzaW5nIG91dGVyIGRpbWVuc2lvbnNcbiAgICAgICAgdmFyIGkgPSAwO1xuICAgICAgICB2YXIgb3V0ZXIgPSAwO1xuXG4gICAgICAgIHdoaWxlIChpU2l6ZVtpXSA9PT0gMSAmJiBzU2l6ZVtpXSA9PT0gMSkge1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChpU2l6ZVtpXSA9PT0gMSkge1xuICAgICAgICAgIG91dGVyKys7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9IC8vIHVuc3F1ZWV6ZSBib3RoIG91dGVyIGFuZCBpbm5lciBkaW1lbnNpb25zXG5cblxuICAgICAgICBzdWJtYXRyaXggPSAoMCwgX2FycmF5LnVuc3F1ZWV6ZSkoc3VibWF0cml4LCBpU2l6ZS5sZW5ndGgsIG91dGVyLCBzU2l6ZSk7XG4gICAgICB9IC8vIGNoZWNrIHdoZXRoZXIgdGhlIHNpemUgb2YgdGhlIHN1Ym1hdHJpeCBtYXRjaGVzIHRoZSBpbmRleCBzaXplXG5cblxuICAgICAgaWYgKCEoMCwgX29iamVjdC5kZWVwU3RyaWN0RXF1YWwpKGlTaXplLCBzU2l6ZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihpU2l6ZSwgc1NpemUsICc+Jyk7XG4gICAgICB9IC8vIG9mZnNldHNcblxuXG4gICAgICB2YXIgeDAgPSBpbmRleC5taW4oKVswXTtcbiAgICAgIHZhciB5MCA9IGluZGV4Lm1pbigpWzFdOyAvLyBzdWJtYXRyaXggcm93cyBhbmQgY29sdW1uc1xuXG4gICAgICB2YXIgbSA9IHNTaXplWzBdO1xuICAgICAgdmFyIG4gPSBzU2l6ZVsxXTsgLy8gbG9vcCBzdWJtYXRyaXhcblxuICAgICAgZm9yICh2YXIgeCA9IDA7IHggPCBtOyB4KyspIHtcbiAgICAgICAgLy8gbG9vcCBjb2x1bW5zXG4gICAgICAgIGZvciAodmFyIHkgPSAwOyB5IDwgbjsgeSsrKSB7XG4gICAgICAgICAgLy8gdmFsdWUgYXQgaSwgalxuICAgICAgICAgIHZhciB2ID0gc3VibWF0cml4W3hdW3ldOyAvLyBpbnZva2Ugc2V0ICh6ZXJvIHZhbHVlIHdpbGwgcmVtb3ZlIGVudHJ5IGZyb20gbWF0cml4KVxuXG4gICAgICAgICAgbWF0cml4LnNldChbeCArIHgwLCB5ICsgeTBdLCB2LCBkZWZhdWx0VmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdHJpeDtcbiAgfVxuICAvKipcbiAgICogR2V0IGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUgbWF0cml4LlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyW119IGluZGV4ICAgWmVyby1iYXNlZCBpbmRleFxuICAgKiBAcmV0dXJuIHsqfSB2YWx1ZVxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgaWYgKCEoMCwgX2lzLmlzQXJyYXkpKGluZGV4KSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgZXhwZWN0ZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoaW5kZXgubGVuZ3RoICE9PSB0aGlzLl9zaXplLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihpbmRleC5sZW5ndGgsIHRoaXMuX3NpemUubGVuZ3RoKTtcbiAgICB9IC8vIGNoZWNrIGl0IGlzIGEgcGF0dGVybiBtYXRyaXhcblxuXG4gICAgaWYgKCF0aGlzLl92YWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBnZXQgb24gYSBQYXR0ZXJuIG9ubHkgbWF0cml4Jyk7XG4gICAgfSAvLyByb3cgYW5kIGNvbHVtblxuXG5cbiAgICB2YXIgaSA9IGluZGV4WzBdO1xuICAgIHZhciBqID0gaW5kZXhbMV07IC8vIGNoZWNrIGksIGogYXJlIHZhbGlkXG5cbiAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGksIHRoaXMuX3NpemVbMF0pO1xuICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkoaiwgdGhpcy5fc2l6ZVsxXSk7IC8vIGZpbmQgdmFsdWUgaW5kZXhcblxuICAgIHZhciBrID0gX2dldFZhbHVlSW5kZXgoaSwgdGhpcy5fcHRyW2pdLCB0aGlzLl9wdHJbaiArIDFdLCB0aGlzLl9pbmRleCk7IC8vIGNoZWNrIGsgaXMgcHJpb3IgdG8gbmV4dCBjb2x1bW4gayBhbmQgaXQgaXMgaW4gdGhlIGNvcnJlY3Qgcm93XG5cblxuICAgIGlmIChrIDwgdGhpcy5fcHRyW2ogKyAxXSAmJiB0aGlzLl9pbmRleFtrXSA9PT0gaSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlc1trXTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfTtcbiAgLyoqXG4gICAqIFJlcGxhY2UgYSBzaW5nbGUgZWxlbWVudCBpbiB0aGUgbWF0cml4LlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyW119IGluZGV4ICAgWmVyby1iYXNlZCBpbmRleFxuICAgKiBAcGFyYW0geyp9IHZcbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSAgICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLiBJZiBub3QgcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBtYXRyaXggZWxlbWVudHMgd2lsbCBiZSBzZXQgdG8gemVyby5cbiAgICogQHJldHVybiB7U3BhcnNlTWF0cml4fSBzZWxmXG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoaW5kZXgsIHYsIGRlZmF1bHRWYWx1ZSkge1xuICAgIGlmICghKDAsIF9pcy5pc0FycmF5KShpbmRleCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKGluZGV4Lmxlbmd0aCAhPT0gdGhpcy5fc2l6ZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaW5kZXgubGVuZ3RoLCB0aGlzLl9zaXplLmxlbmd0aCk7XG4gICAgfSAvLyBjaGVjayBpdCBpcyBhIHBhdHRlcm4gbWF0cml4XG5cblxuICAgIGlmICghdGhpcy5fdmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2Ugc2V0IG9uIGEgUGF0dGVybiBvbmx5IG1hdHJpeCcpO1xuICAgIH0gLy8gcm93IGFuZCBjb2x1bW5cblxuXG4gICAgdmFyIGkgPSBpbmRleFswXTtcbiAgICB2YXIgaiA9IGluZGV4WzFdOyAvLyByb3dzICYgY29sdW1uc1xuXG4gICAgdmFyIHJvd3MgPSB0aGlzLl9zaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gdGhpcy5fc2l6ZVsxXTsgLy8gZXF1YWwgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGVxID0gZXF1YWxTY2FsYXI7IC8vIHplcm8gdmFsdWVcblxuICAgIHZhciB6ZXJvID0gMDtcblxuICAgIGlmICgoMCwgX2lzLmlzU3RyaW5nKSh0aGlzLl9kYXRhdHlwZSkpIHtcbiAgICAgIC8vIGZpbmQgc2lnbmF0dXJlIHRoYXQgbWF0Y2hlcyAoZGF0YXR5cGUsIGRhdGF0eXBlKVxuICAgICAgZXEgPSB0eXBlZC5maW5kKGVxdWFsU2NhbGFyLCBbdGhpcy5fZGF0YXR5cGUsIHRoaXMuX2RhdGF0eXBlXSkgfHwgZXF1YWxTY2FsYXI7IC8vIGNvbnZlcnQgMCB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICB6ZXJvID0gdHlwZWQuY29udmVydCgwLCB0aGlzLl9kYXRhdHlwZSk7XG4gICAgfSAvLyBjaGVjayB3ZSBuZWVkIHRvIHJlc2l6ZSBtYXRyaXhcblxuXG4gICAgaWYgKGkgPiByb3dzIC0gMSB8fCBqID4gY29sdW1ucyAtIDEpIHtcbiAgICAgIC8vIHJlc2l6ZSBtYXRyaXhcbiAgICAgIF9yZXNpemUodGhpcywgTWF0aC5tYXgoaSArIDEsIHJvd3MpLCBNYXRoLm1heChqICsgMSwgY29sdW1ucyksIGRlZmF1bHRWYWx1ZSk7IC8vIHVwZGF0ZSByb3dzICYgY29sdW1uc1xuXG5cbiAgICAgIHJvd3MgPSB0aGlzLl9zaXplWzBdO1xuICAgICAgY29sdW1ucyA9IHRoaXMuX3NpemVbMV07XG4gICAgfSAvLyBjaGVjayBpLCBqIGFyZSB2YWxpZFxuXG5cbiAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGksIHJvd3MpO1xuICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkoaiwgY29sdW1ucyk7IC8vIGZpbmQgdmFsdWUgaW5kZXhcblxuICAgIHZhciBrID0gX2dldFZhbHVlSW5kZXgoaSwgdGhpcy5fcHRyW2pdLCB0aGlzLl9wdHJbaiArIDFdLCB0aGlzLl9pbmRleCk7IC8vIGNoZWNrIGsgaXMgcHJpb3IgdG8gbmV4dCBjb2x1bW4gayBhbmQgaXQgaXMgaW4gdGhlIGNvcnJlY3Qgcm93XG5cblxuICAgIGlmIChrIDwgdGhpcy5fcHRyW2ogKyAxXSAmJiB0aGlzLl9pbmRleFtrXSA9PT0gaSkge1xuICAgICAgLy8gY2hlY2sgdmFsdWUgIT0gMFxuICAgICAgaWYgKCFlcSh2LCB6ZXJvKSkge1xuICAgICAgICAvLyB1cGRhdGUgdmFsdWVcbiAgICAgICAgdGhpcy5fdmFsdWVzW2tdID0gdjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHJlbW92ZSB2YWx1ZSBmcm9tIG1hdHJpeFxuICAgICAgICBfcmVtb3ZlKGssIGosIHRoaXMuX3ZhbHVlcywgdGhpcy5faW5kZXgsIHRoaXMuX3B0cik7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGluc2VydCB2YWx1ZSBAIChpLCBqKVxuICAgICAgX2luc2VydChrLCBpLCBqLCB2LCB0aGlzLl92YWx1ZXMsIHRoaXMuX2luZGV4LCB0aGlzLl9wdHIpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuXG4gIGZ1bmN0aW9uIF9nZXRWYWx1ZUluZGV4KGksIHRvcCwgYm90dG9tLCBpbmRleCkge1xuICAgIC8vIGNoZWNrIHJvdyBpcyBvbiB0aGUgYm90dG9tIHNpZGVcbiAgICBpZiAoYm90dG9tIC0gdG9wID09PSAwKSB7XG4gICAgICByZXR1cm4gYm90dG9tO1xuICAgIH0gLy8gbG9vcCByb3dzIFt0b3AsIGJvdHRvbVtcblxuXG4gICAgZm9yICh2YXIgciA9IHRvcDsgciA8IGJvdHRvbTsgcisrKSB7XG4gICAgICAvLyBjaGVjayB3ZSBmb3VuZCB2YWx1ZSBpbmRleFxuICAgICAgaWYgKGluZGV4W3JdID09PSBpKSB7XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfVxuICAgIH0gLy8gd2UgZGlkIG5vdCBmaW5kIHJvd1xuXG5cbiAgICByZXR1cm4gdG9wO1xuICB9XG5cbiAgZnVuY3Rpb24gX3JlbW92ZShrLCBqLCB2YWx1ZXMsIGluZGV4LCBwdHIpIHtcbiAgICAvLyByZW1vdmUgdmFsdWUgQCBrXG4gICAgdmFsdWVzLnNwbGljZShrLCAxKTtcbiAgICBpbmRleC5zcGxpY2UoaywgMSk7IC8vIHVwZGF0ZSBwb2ludGVyc1xuXG4gICAgZm9yICh2YXIgeCA9IGogKyAxOyB4IDwgcHRyLmxlbmd0aDsgeCsrKSB7XG4gICAgICBwdHJbeF0tLTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBfaW5zZXJ0KGssIGksIGosIHYsIHZhbHVlcywgaW5kZXgsIHB0cikge1xuICAgIC8vIGluc2VydCB2YWx1ZVxuICAgIHZhbHVlcy5zcGxpY2UoaywgMCwgdik7IC8vIHVwZGF0ZSByb3cgZm9yIGtcblxuICAgIGluZGV4LnNwbGljZShrLCAwLCBpKTsgLy8gdXBkYXRlIGNvbHVtbiBwb2ludGVyc1xuXG4gICAgZm9yICh2YXIgeCA9IGogKyAxOyB4IDwgcHRyLmxlbmd0aDsgeCsrKSB7XG4gICAgICBwdHJbeF0rKztcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlc2l6ZSB0aGUgbWF0cml4IHRvIHRoZSBnaXZlbiBzaXplLiBSZXR1cm5zIGEgY29weSBvZiB0aGUgbWF0cml4IHdoZW5cbiAgICogYGNvcHk9dHJ1ZWAsIG90aGVyd2lzZSByZXR1cm4gdGhlIG1hdHJpeCBpdHNlbGYgKHJlc2l6ZSBpbiBwbGFjZSkuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZSAgICAgICAgICAgVGhlIG5ldyBzaXplIHRoZSBtYXRyaXggc2hvdWxkIGhhdmUuXG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZT0wXSAgICAgIERlZmF1bHQgdmFsdWUsIGZpbGxlZCBpbiBvbiBuZXcgZW50cmllcy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm90IHByb3ZpZGVkLCB0aGUgbWF0cml4IGVsZW1lbnRzIHdpbGxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgZmlsbGVkIHdpdGggemVyb3MuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvcHldICAgICAgICAgIFJldHVybiBhIHJlc2l6ZWQgY29weSBvZiB0aGUgbWF0cml4XG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgIFRoZSByZXNpemVkIG1hdHJpeFxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHNpemUsIGRlZmF1bHRWYWx1ZSwgY29weSkge1xuICAgIC8vIHZhbGlkYXRlIGFyZ3VtZW50c1xuICAgIGlmICghKDAsIF9pcy5pc0FycmF5KShzaXplKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgZXhwZWN0ZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoc2l6ZS5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25seSB0d28gZGltZW5zaW9ucyBtYXRyaXggYXJlIHN1cHBvcnRlZCcpO1xuICAgIH0gLy8gY2hlY2sgc2l6ZXNcblxuXG4gICAgc2l6ZS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKSh2YWx1ZSkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikodmFsdWUpIHx8IHZhbHVlIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHNpemUsIG11c3QgY29udGFpbiBwb3NpdGl2ZSBpbnRlZ2VycyAnICsgJyhzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICB9XG4gICAgfSk7IC8vIG1hdHJpeCB0byByZXNpemVcblxuICAgIHZhciBtID0gY29weSA/IHRoaXMuY2xvbmUoKSA6IHRoaXM7IC8vIHJlc2l6ZSBtYXRyaXhcblxuICAgIHJldHVybiBfcmVzaXplKG0sIHNpemVbMF0sIHNpemVbMV0sIGRlZmF1bHRWYWx1ZSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gX3Jlc2l6ZShtYXRyaXgsIHJvd3MsIGNvbHVtbnMsIGRlZmF1bHRWYWx1ZSkge1xuICAgIC8vIHZhbHVlIHRvIGluc2VydCBhdCB0aGUgdGltZSBvZiBncm93aW5nIG1hdHJpeFxuICAgIHZhciB2YWx1ZSA9IGRlZmF1bHRWYWx1ZSB8fCAwOyAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwO1xuXG4gICAgaWYgKCgwLCBfaXMuaXNTdHJpbmcpKG1hdHJpeC5fZGF0YXR5cGUpKSB7XG4gICAgICAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGRhdGF0eXBlLCBkYXRhdHlwZSlcbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW21hdHJpeC5fZGF0YXR5cGUsIG1hdHJpeC5fZGF0YXR5cGVdKSB8fCBlcXVhbFNjYWxhcjsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIG1hdHJpeC5fZGF0YXR5cGUpOyAvLyBjb252ZXJ0IHZhbHVlIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHZhbHVlID0gdHlwZWQuY29udmVydCh2YWx1ZSwgbWF0cml4Ll9kYXRhdHlwZSk7XG4gICAgfSAvLyBzaG91bGQgd2UgaW5zZXJ0IHRoZSB2YWx1ZT9cblxuXG4gICAgdmFyIGlucyA9ICFlcSh2YWx1ZSwgemVybyk7IC8vIG9sZCBjb2x1bW5zIGFuZCByb3dzXG5cbiAgICB2YXIgciA9IG1hdHJpeC5fc2l6ZVswXTtcbiAgICB2YXIgYyA9IG1hdHJpeC5fc2l6ZVsxXTtcbiAgICB2YXIgaSwgaiwgazsgLy8gY2hlY2sgd2UgbmVlZCB0byBpbmNyZWFzZSBjb2x1bW5zXG5cbiAgICBpZiAoY29sdW1ucyA+IGMpIHtcbiAgICAgIC8vIGxvb3AgbmV3IGNvbHVtbnNcbiAgICAgIGZvciAoaiA9IGM7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgLy8gdXBkYXRlIG1hdHJpeC5fcHRyIGZvciBjdXJyZW50IGNvbHVtblxuICAgICAgICBtYXRyaXguX3B0cltqXSA9IG1hdHJpeC5fdmFsdWVzLmxlbmd0aDsgLy8gY2hlY2sgd2UgbmVlZCB0byBpbnNlcnQgbWF0cml4Ll92YWx1ZXNcblxuICAgICAgICBpZiAoaW5zKSB7XG4gICAgICAgICAgLy8gbG9vcCByb3dzXG4gICAgICAgICAgZm9yIChpID0gMDsgaSA8IHI7IGkrKykge1xuICAgICAgICAgICAgLy8gYWRkIG5ldyBtYXRyaXguX3ZhbHVlc1xuICAgICAgICAgICAgbWF0cml4Ll92YWx1ZXMucHVzaCh2YWx1ZSk7IC8vIHVwZGF0ZSBtYXRyaXguX2luZGV4XG5cblxuICAgICAgICAgICAgbWF0cml4Ll9pbmRleC5wdXNoKGkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyBzdG9yZSBudW1iZXIgb2YgbWF0cml4Ll92YWx1ZXMgaW4gbWF0cml4Ll9wdHJcblxuXG4gICAgICBtYXRyaXguX3B0cltjb2x1bW5zXSA9IG1hdHJpeC5fdmFsdWVzLmxlbmd0aDtcbiAgICB9IGVsc2UgaWYgKGNvbHVtbnMgPCBjKSB7XG4gICAgICAvLyB0cnVuY2F0ZSBtYXRyaXguX3B0clxuICAgICAgbWF0cml4Ll9wdHIuc3BsaWNlKGNvbHVtbnMgKyAxLCBjIC0gY29sdW1ucyk7IC8vIHRydW5jYXRlIG1hdHJpeC5fdmFsdWVzIGFuZCBtYXRyaXguX2luZGV4XG5cblxuICAgICAgbWF0cml4Ll92YWx1ZXMuc3BsaWNlKG1hdHJpeC5fcHRyW2NvbHVtbnNdLCBtYXRyaXguX3ZhbHVlcy5sZW5ndGgpO1xuXG4gICAgICBtYXRyaXguX2luZGV4LnNwbGljZShtYXRyaXguX3B0cltjb2x1bW5zXSwgbWF0cml4Ll9pbmRleC5sZW5ndGgpO1xuICAgIH0gLy8gdXBkYXRlIGNvbHVtbnNcblxuXG4gICAgYyA9IGNvbHVtbnM7IC8vIGNoZWNrIHdlIG5lZWQgdG8gaW5jcmVhc2Ugcm93c1xuXG4gICAgaWYgKHJvd3MgPiByKSB7XG4gICAgICAvLyBjaGVjayB3ZSBoYXZlIHRvIGluc2VydCB2YWx1ZXNcbiAgICAgIGlmIChpbnMpIHtcbiAgICAgICAgLy8gaW5zZXJ0c1xuICAgICAgICB2YXIgbiA9IDA7IC8vIGxvb3AgY29sdW1uc1xuXG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBjOyBqKyspIHtcbiAgICAgICAgICAvLyB1cGRhdGUgbWF0cml4Ll9wdHIgZm9yIGN1cnJlbnQgY29sdW1uXG4gICAgICAgICAgbWF0cml4Ll9wdHJbal0gPSBtYXRyaXguX3B0cltqXSArIG47IC8vIHdoZXJlIHRvIGluc2VydCBtYXRyaXguX3ZhbHVlc1xuXG4gICAgICAgICAgayA9IG1hdHJpeC5fcHRyW2ogKyAxXSArIG47IC8vIHBvaW50ZXJcblxuICAgICAgICAgIHZhciBwID0gMDsgLy8gbG9vcCBuZXcgcm93cywgaW5pdGlhbGl6ZSBwb2ludGVyXG5cbiAgICAgICAgICBmb3IgKGkgPSByOyBpIDwgcm93czsgaSsrLCBwKyspIHtcbiAgICAgICAgICAgIC8vIGFkZCB2YWx1ZVxuICAgICAgICAgICAgbWF0cml4Ll92YWx1ZXMuc3BsaWNlKGsgKyBwLCAwLCB2YWx1ZSk7IC8vIHVwZGF0ZSBtYXRyaXguX2luZGV4XG5cblxuICAgICAgICAgICAgbWF0cml4Ll9pbmRleC5zcGxpY2UoayArIHAsIDAsIGkpOyAvLyBpbmNyZW1lbnQgaW5zZXJ0c1xuXG5cbiAgICAgICAgICAgIG4rKztcbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gc3RvcmUgbnVtYmVyIG9mIG1hdHJpeC5fdmFsdWVzIGluIG1hdHJpeC5fcHRyXG5cblxuICAgICAgICBtYXRyaXguX3B0cltjXSA9IG1hdHJpeC5fdmFsdWVzLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJvd3MgPCByKSB7XG4gICAgICAvLyBkZWxldGVzXG4gICAgICB2YXIgZCA9IDA7IC8vIGxvb3AgY29sdW1uc1xuXG4gICAgICBmb3IgKGogPSAwOyBqIDwgYzsgaisrKSB7XG4gICAgICAgIC8vIHVwZGF0ZSBtYXRyaXguX3B0ciBmb3IgY3VycmVudCBjb2x1bW5cbiAgICAgICAgbWF0cml4Ll9wdHJbal0gPSBtYXRyaXguX3B0cltqXSAtIGQ7IC8vIHdoZXJlIG1hdHJpeC5fdmFsdWVzIHN0YXJ0IGZvciBuZXh0IGNvbHVtblxuXG4gICAgICAgIHZhciBrMCA9IG1hdHJpeC5fcHRyW2pdO1xuICAgICAgICB2YXIgazEgPSBtYXRyaXguX3B0cltqICsgMV0gLSBkOyAvLyBsb29wIG1hdHJpeC5faW5kZXhcblxuICAgICAgICBmb3IgKGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICBpID0gbWF0cml4Ll9pbmRleFtrXTsgLy8gY2hlY2sgd2UgbmVlZCB0byBkZWxldGUgdmFsdWUgYW5kIG1hdHJpeC5faW5kZXhcblxuICAgICAgICAgIGlmIChpID4gcm93cyAtIDEpIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB2YWx1ZVxuICAgICAgICAgICAgbWF0cml4Ll92YWx1ZXMuc3BsaWNlKGssIDEpOyAvLyByZW1vdmUgaXRlbSBmcm9tIG1hdHJpeC5faW5kZXhcblxuXG4gICAgICAgICAgICBtYXRyaXguX2luZGV4LnNwbGljZShrLCAxKTsgLy8gaW5jcmVhc2UgZGVsZXRlc1xuXG5cbiAgICAgICAgICAgIGQrKztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gdXBkYXRlIG1hdHJpeC5fcHRyIGZvciBjdXJyZW50IGNvbHVtblxuXG5cbiAgICAgIG1hdHJpeC5fcHRyW2pdID0gbWF0cml4Ll92YWx1ZXMubGVuZ3RoO1xuICAgIH0gLy8gdXBkYXRlIG1hdHJpeC5fc2l6ZVxuXG5cbiAgICBtYXRyaXguX3NpemVbMF0gPSByb3dzO1xuICAgIG1hdHJpeC5fc2l6ZVsxXSA9IGNvbHVtbnM7IC8vIHJldHVybiBtYXRyaXhcblxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cbiAgLyoqXG4gICAqIFJlc2hhcGUgdGhlIG1hdHJpeCB0byB0aGUgZ2l2ZW4gc2l6ZS4gUmV0dXJucyBhIGNvcHkgb2YgdGhlIG1hdHJpeCB3aGVuXG4gICAqIGBjb3B5PXRydWVgLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBtYXRyaXggaXRzZWxmIChyZXNoYXBlIGluIHBsYWNlKS5cbiAgICpcbiAgICogTk9URTogVGhpcyBtaWdodCBiZSBiZXR0ZXIgc3VpdGVkIHRvIGNvcHkgYnkgZGVmYXVsdCwgaW5zdGVhZCBvZiBtb2RpZnlpbmdcbiAgICogICAgICAgaW4gcGxhY2UuIEZvciBub3csIGl0IG9wZXJhdGVzIGluIHBsYWNlIHRvIHJlbWFpbiBjb25zaXN0ZW50IHdpdGhcbiAgICogICAgICAgcmVzaXplKCkuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZSAgICAgICAgICAgVGhlIG5ldyBzaXplIHRoZSBtYXRyaXggc2hvdWxkIGhhdmUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvcHldICAgICAgICAgIFJldHVybiBhIHJlc2hhcGVkIGNvcHkgb2YgdGhlIG1hdHJpeFxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICBUaGUgcmVzaGFwZWQgbWF0cml4XG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5yZXNoYXBlID0gZnVuY3Rpb24gKHNpemUsIGNvcHkpIHtcbiAgICAvLyB2YWxpZGF0ZSBhcmd1bWVudHNcbiAgICBpZiAoISgwLCBfaXMuaXNBcnJheSkoc2l6ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKHNpemUubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NwYXJzZSBtYXRyaWNlcyBjYW4gb25seSBiZSByZXNoYXBlZCBpbiB0d28gZGltZW5zaW9ucycpO1xuICAgIH0gLy8gY2hlY2sgc2l6ZXNcblxuXG4gICAgc2l6ZS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKSh2YWx1ZSkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikodmFsdWUpIHx8IHZhbHVlIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHNpemUsIG11c3QgY29udGFpbiBwb3NpdGl2ZSBpbnRlZ2VycyAnICsgJyhzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICB9XG4gICAgfSk7IC8vIG0gKiBuIG11c3Qgbm90IGNoYW5nZVxuXG4gICAgaWYgKHRoaXMuX3NpemVbMF0gKiB0aGlzLl9zaXplWzFdICE9PSBzaXplWzBdICogc2l6ZVsxXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdSZXNoYXBpbmcgc3BhcnNlIG1hdHJpeCB3aWxsIHJlc3VsdCBpbiB0aGUgd3JvbmcgbnVtYmVyIG9mIGVsZW1lbnRzJyk7XG4gICAgfSAvLyBtYXRyaXggdG8gcmVzaGFwZVxuXG5cbiAgICB2YXIgbSA9IGNvcHkgPyB0aGlzLmNsb25lKCkgOiB0aGlzOyAvLyByZXR1cm4gdW5jaGFuZ2VkIGlmIHRoZSBzYW1lIHNoYXBlXG5cbiAgICBpZiAodGhpcy5fc2l6ZVswXSA9PT0gc2l6ZVswXSAmJiB0aGlzLl9zaXplWzFdID09PSBzaXplWzFdKSB7XG4gICAgICByZXR1cm4gbTtcbiAgICB9IC8vIENvbnZlcnQgdG8gQ09PIGZvcm1hdCAoZ2VuZXJhdGUgYSBjb2x1bW4gaW5kZXgpXG5cblxuICAgIHZhciBjb2xJbmRleCA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtLl9wdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbS5fcHRyW2kgKyAxXSAtIG0uX3B0cltpXTsgaisrKSB7XG4gICAgICAgIGNvbEluZGV4LnB1c2goaSk7XG4gICAgICB9XG4gICAgfSAvLyBDbG9uZSB0aGUgdmFsdWVzIGFycmF5XG5cblxuICAgIHZhciB2YWx1ZXMgPSBtLl92YWx1ZXMuc2xpY2UoKTsgLy8gQ2xvbmUgdGhlIHJvdyBpbmRleCBhcnJheVxuXG5cbiAgICB2YXIgcm93SW5kZXggPSBtLl9pbmRleC5zbGljZSgpOyAvLyBUcmFuc2Zvcm0gdGhlIChyb3csIGNvbHVtbikgaW5kaWNlc1xuXG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbS5faW5kZXgubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgcjEgPSByb3dJbmRleFtfaV07XG4gICAgICB2YXIgYzEgPSBjb2xJbmRleFtfaV07XG4gICAgICB2YXIgZmxhdCA9IHIxICogbS5fc2l6ZVsxXSArIGMxO1xuICAgICAgY29sSW5kZXhbX2ldID0gZmxhdCAlIHNpemVbMV07XG4gICAgICByb3dJbmRleFtfaV0gPSBNYXRoLmZsb29yKGZsYXQgLyBzaXplWzFdKTtcbiAgICB9IC8vIE5vdyByZXNoYXBpbmcgaXMgc3VwcG9zZWQgdG8gcHJlc2VydmUgdGhlIHJvdy1tYWpvciBvcmRlciwgQlVUIHRoZXNlIHNwYXJzZSBtYXRyaWNlcyBhcmUgc3RvcmVkXG4gICAgLy8gaW4gY29sdW1uLW1ham9yIG9yZGVyLCBzbyB3ZSBoYXZlIHRvIHJlb3JkZXIgdGhlIHZhbHVlIGFycmF5IG5vdy4gT25lIG9wdGlvbiBpcyB0byB1c2UgYSBtdWx0aXNvcnQsXG4gICAgLy8gc29ydGluZyBzZXZlcmFsIGFycmF5cyBiYXNlZCBvbiBzb21lIG90aGVyIGFycmF5LlxuICAgIC8vIE9SLCB3ZSBjb3VsZCBlYXNpbHkganVzdDpcbiAgICAvLyAxLiBSZW1vdmUgYWxsIHZhbHVlcyBmcm9tIHRoZSBtYXRyaXhcblxuXG4gICAgbS5fdmFsdWVzLmxlbmd0aCA9IDA7XG4gICAgbS5faW5kZXgubGVuZ3RoID0gMDtcbiAgICBtLl9wdHIubGVuZ3RoID0gc2l6ZVsxXSArIDE7XG4gICAgbS5fc2l6ZSA9IHNpemUuc2xpY2UoKTtcblxuICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IG0uX3B0ci5sZW5ndGg7IF9pMisrKSB7XG4gICAgICBtLl9wdHJbX2kyXSA9IDA7XG4gICAgfSAvLyAyLiBSZS1pbnNlcnQgYWxsIGVsZW1lbnRzIGluIHRoZSBwcm9wZXIgb3JkZXIgKHNpbXBsaWZpZWQgY29kZSBmcm9tIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuc2V0KVxuICAgIC8vIFRoaXMgc3RlcCBpcyBwcm9iYWJseSB0aGUgbW9zdCB0aW1lLWNvbnN1bWluZ1xuXG5cbiAgICBmb3IgKHZhciBoID0gMDsgaCA8IHZhbHVlcy5sZW5ndGg7IGgrKykge1xuICAgICAgdmFyIF9pMyA9IHJvd0luZGV4W2hdO1xuICAgICAgdmFyIF9qID0gY29sSW5kZXhbaF07XG4gICAgICB2YXIgdiA9IHZhbHVlc1toXTtcblxuICAgICAgdmFyIGsgPSBfZ2V0VmFsdWVJbmRleChfaTMsIG0uX3B0cltfal0sIG0uX3B0cltfaiArIDFdLCBtLl9pbmRleCk7XG5cbiAgICAgIF9pbnNlcnQoaywgX2kzLCBfaiwgdiwgbS5fdmFsdWVzLCBtLl9pbmRleCwgbS5fcHRyKTtcbiAgICB9IC8vIFRoZSB2YWx1ZSBpbmRpY2VzIGFyZSBpbnNlcnRlZCBvdXQgb2Ygb3JkZXIsIGJ1dCBhcHBhcmVudGx5IHRoYXQncy4uLiBzdGlsbCBPSz9cblxuXG4gICAgcmV0dXJuIG07XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGUgbWF0cml4XG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHJldHVybiB7U3BhcnNlTWF0cml4fSBjbG9uZVxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG0gPSBuZXcgU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogdGhpcy5fdmFsdWVzID8gKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX3ZhbHVlcykgOiB1bmRlZmluZWQsXG4gICAgICBpbmRleDogKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX2luZGV4KSxcbiAgICAgIHB0cjogKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX3B0ciksXG4gICAgICBzaXplOiAoMCwgX29iamVjdC5jbG9uZSkodGhpcy5fc2l6ZSksXG4gICAgICBkYXRhdHlwZTogdGhpcy5fZGF0YXR5cGVcbiAgICB9KTtcbiAgICByZXR1cm4gbTtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBzaXplIG9mIHRoZSBtYXRyaXguXG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHJldHVybnMge251bWJlcltdfSBzaXplXG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9zaXplLnNsaWNlKDApOyAvLyBjb3B5IHRoZSBBcnJheVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG1hdHJpeCB3aXRoIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleGVjdXRlZCBvblxuICAgKiBlYWNoIGVudHJ5IG9mIHRoZSBtYXRyaXguXG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50LCB0aGUgaW5kZXhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZWxlbWVudCwgYW5kIHRoZSBNYXRyaXggYmVpbmcgdHJhdmVyc2VkLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtza2lwWmVyb3NdIEludm9rZSBjYWxsYmFjayBmdW5jdGlvbiBmb3Igbm9uLXplcm8gdmFsdWVzIG9ubHkuXG4gICAqXG4gICAqIEByZXR1cm4ge1NwYXJzZU1hdHJpeH0gbWF0cml4XG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHNraXBaZXJvcykge1xuICAgIC8vIGNoZWNrIGl0IGlzIGEgcGF0dGVybiBtYXRyaXhcbiAgICBpZiAoIXRoaXMuX3ZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIG1hcCBvbiBhIFBhdHRlcm4gb25seSBtYXRyaXgnKTtcbiAgICB9IC8vIG1hdHJpeCBpbnN0YW5jZVxuXG5cbiAgICB2YXIgbWUgPSB0aGlzOyAvLyByb3dzIGFuZCBjb2x1bW5zXG5cbiAgICB2YXIgcm93cyA9IHRoaXMuX3NpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSB0aGlzLl9zaXplWzFdOyAvLyBpbnZva2UgY2FsbGJhY2tcblxuICAgIHZhciBpbnZva2UgPSBmdW5jdGlvbiBpbnZva2UodiwgaSwgaikge1xuICAgICAgLy8gaW52b2tlIGNhbGxiYWNrXG4gICAgICByZXR1cm4gY2FsbGJhY2sodiwgW2ksIGpdLCBtZSk7XG4gICAgfTsgLy8gaW52b2tlIF9tYXBcblxuXG4gICAgcmV0dXJuIF9tYXAodGhpcywgMCwgcm93cyAtIDEsIDAsIGNvbHVtbnMgLSAxLCBpbnZva2UsIHNraXBaZXJvcyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgbWF0cml4IHdpdGggdGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGV4ZWN1dGVkIG9uIHRoZSBpbnRlcnZhbFxuICAgKiBbbWluUm93Li5tYXhSb3csIG1pbkNvbHVtbi4ubWF4Q29sdW1uXS5cbiAgICovXG5cblxuICBmdW5jdGlvbiBfbWFwKG1hdHJpeCwgbWluUm93LCBtYXhSb3csIG1pbkNvbHVtbiwgbWF4Q29sdW1uLCBjYWxsYmFjaywgc2tpcFplcm9zKSB7XG4gICAgLy8gcmVzdWx0IGFycmF5c1xuICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICB2YXIgaW5kZXggPSBbXTtcbiAgICB2YXIgcHRyID0gW107IC8vIGVxdWFsIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7XG5cbiAgICBpZiAoKDAsIF9pcy5pc1N0cmluZykobWF0cml4Ll9kYXRhdHlwZSkpIHtcbiAgICAgIC8vIGZpbmQgc2lnbmF0dXJlIHRoYXQgbWF0Y2hlcyAoZGF0YXR5cGUsIGRhdGF0eXBlKVxuICAgICAgZXEgPSB0eXBlZC5maW5kKGVxdWFsU2NhbGFyLCBbbWF0cml4Ll9kYXRhdHlwZSwgbWF0cml4Ll9kYXRhdHlwZV0pIHx8IGVxdWFsU2NhbGFyOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgbWF0cml4Ll9kYXRhdHlwZSk7XG4gICAgfSAvLyBpbnZva2UgY2FsbGJhY2tcblxuXG4gICAgdmFyIGludm9rZSA9IGZ1bmN0aW9uIGludm9rZSh2LCB4LCB5KSB7XG4gICAgICAvLyBpbnZva2UgY2FsbGJhY2tcbiAgICAgIHYgPSBjYWxsYmFjayh2LCB4LCB5KTsgLy8gY2hlY2sgdmFsdWUgIT0gMFxuXG4gICAgICBpZiAoIWVxKHYsIHplcm8pKSB7XG4gICAgICAgIC8vIHN0b3JlIHZhbHVlXG4gICAgICAgIHZhbHVlcy5wdXNoKHYpOyAvLyBpbmRleFxuXG4gICAgICAgIGluZGV4LnB1c2goeCk7XG4gICAgICB9XG4gICAgfTsgLy8gbG9vcCBjb2x1bW5zXG5cblxuICAgIGZvciAodmFyIGogPSBtaW5Db2x1bW47IGogPD0gbWF4Q29sdW1uOyBqKyspIHtcbiAgICAgIC8vIHN0b3JlIHBvaW50ZXIgdG8gdmFsdWVzIGluZGV4XG4gICAgICBwdHIucHVzaCh2YWx1ZXMubGVuZ3RoKTsgLy8gazAgPD0gayA8IGsxIHdoZXJlIGswID0gX3B0cltqXSAmJiBrMSA9IF9wdHJbaisxXVxuXG4gICAgICB2YXIgazAgPSBtYXRyaXguX3B0cltqXTtcbiAgICAgIHZhciBrMSA9IG1hdHJpeC5fcHRyW2ogKyAxXTtcblxuICAgICAgaWYgKHNraXBaZXJvcykge1xuICAgICAgICAvLyBsb29wIGsgd2l0aGluIFtrMCwgazFbXG4gICAgICAgIGZvciAodmFyIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgICAvLyByb3cgaW5kZXhcbiAgICAgICAgICB2YXIgaSA9IG1hdHJpeC5faW5kZXhba107IC8vIGNoZWNrIGkgaXMgaW4gcmFuZ2VcblxuICAgICAgICAgIGlmIChpID49IG1pblJvdyAmJiBpIDw9IG1heFJvdykge1xuICAgICAgICAgICAgLy8gdmFsdWUgQCBrXG4gICAgICAgICAgICBpbnZva2UobWF0cml4Ll92YWx1ZXNba10sIGkgLSBtaW5Sb3csIGogLSBtaW5Db2x1bW4pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY3JlYXRlIGEgY2FjaGUgaG9sZGluZyBhbGwgZGVmaW5lZCB2YWx1ZXNcbiAgICAgICAgdmFyIF92YWx1ZXMgPSB7fTtcblxuICAgICAgICBmb3IgKHZhciBfayA9IGswOyBfayA8IGsxOyBfaysrKSB7XG4gICAgICAgICAgdmFyIF9pNCA9IG1hdHJpeC5faW5kZXhbX2tdO1xuICAgICAgICAgIF92YWx1ZXNbX2k0XSA9IG1hdHJpeC5fdmFsdWVzW19rXTtcbiAgICAgICAgfSAvLyBsb29wIG92ZXIgYWxsIHJvd3MgKGluZGV4ZXMgY2FuIGJlIHVub3JkZXJlZCBzbyB3ZSBjYW4ndCB1c2UgdGhhdCksXG4gICAgICAgIC8vIGFuZCBlaXRoZXIgcmVhZCB0aGUgdmFsdWUgb3IgemVyb1xuXG5cbiAgICAgICAgZm9yICh2YXIgX2k1ID0gbWluUm93OyBfaTUgPD0gbWF4Um93OyBfaTUrKykge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IF9pNSBpbiBfdmFsdWVzID8gX3ZhbHVlc1tfaTVdIDogMDtcbiAgICAgICAgICBpbnZva2UodmFsdWUsIF9pNSAtIG1pblJvdywgaiAtIG1pbkNvbHVtbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHN0b3JlIG51bWJlciBvZiB2YWx1ZXMgaW4gcHRyXG5cblxuICAgIHB0ci5wdXNoKHZhbHVlcy5sZW5ndGgpOyAvLyByZXR1cm4gc3BhcnNlIG1hdHJpeFxuXG4gICAgcmV0dXJuIG5ldyBTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiB2YWx1ZXMsXG4gICAgICBpbmRleDogaW5kZXgsXG4gICAgICBwdHI6IHB0cixcbiAgICAgIHNpemU6IFttYXhSb3cgLSBtaW5Sb3cgKyAxLCBtYXhDb2x1bW4gLSBtaW5Db2x1bW4gKyAxXVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZnVuY3Rpb24gb24gZWFjaCBlbnRyeSBvZiB0aGUgbWF0cml4LlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCwgdGhlIGluZGV4XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGVsZW1lbnQsIGFuZCB0aGUgTWF0cml4IGJlaW5nIHRyYXZlcnNlZC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbc2tpcFplcm9zXSBJbnZva2UgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIG5vbi16ZXJvIHZhbHVlcyBvbmx5LlxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaywgc2tpcFplcm9zKSB7XG4gICAgLy8gY2hlY2sgaXQgaXMgYSBwYXR0ZXJuIG1hdHJpeFxuICAgIGlmICghdGhpcy5fdmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2UgZm9yRWFjaCBvbiBhIFBhdHRlcm4gb25seSBtYXRyaXgnKTtcbiAgICB9IC8vIG1hdHJpeCBpbnN0YW5jZVxuXG5cbiAgICB2YXIgbWUgPSB0aGlzOyAvLyByb3dzIGFuZCBjb2x1bW5zXG5cbiAgICB2YXIgcm93cyA9IHRoaXMuX3NpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSB0aGlzLl9zaXplWzFdOyAvLyBsb29wIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBrMCA8PSBrIDwgazEgd2hlcmUgazAgPSBfcHRyW2pdICYmIGsxID0gX3B0cltqKzFdXG4gICAgICB2YXIgazAgPSB0aGlzLl9wdHJbal07XG4gICAgICB2YXIgazEgPSB0aGlzLl9wdHJbaiArIDFdO1xuXG4gICAgICBpZiAoc2tpcFplcm9zKSB7XG4gICAgICAgIC8vIGxvb3AgayB3aXRoaW4gW2swLCBrMVtcbiAgICAgICAgZm9yICh2YXIgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgICAgIC8vIHJvdyBpbmRleFxuICAgICAgICAgIHZhciBpID0gdGhpcy5faW5kZXhba107IC8vIHZhbHVlIEAga1xuXG4gICAgICAgICAgY2FsbGJhY2sodGhpcy5fdmFsdWVzW2tdLCBbaSwgal0sIG1lKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gY3JlYXRlIGEgY2FjaGUgaG9sZGluZyBhbGwgZGVmaW5lZCB2YWx1ZXNcbiAgICAgICAgdmFyIHZhbHVlcyA9IHt9O1xuXG4gICAgICAgIGZvciAodmFyIF9rMiA9IGswOyBfazIgPCBrMTsgX2syKyspIHtcbiAgICAgICAgICB2YXIgX2k2ID0gdGhpcy5faW5kZXhbX2syXTtcbiAgICAgICAgICB2YWx1ZXNbX2k2XSA9IHRoaXMuX3ZhbHVlc1tfazJdO1xuICAgICAgICB9IC8vIGxvb3Agb3ZlciBhbGwgcm93cyAoaW5kZXhlcyBjYW4gYmUgdW5vcmRlcmVkIHNvIHdlIGNhbid0IHVzZSB0aGF0KSxcbiAgICAgICAgLy8gYW5kIGVpdGhlciByZWFkIHRoZSB2YWx1ZSBvciB6ZXJvXG5cblxuICAgICAgICBmb3IgKHZhciBfaTcgPSAwOyBfaTcgPCByb3dzOyBfaTcrKykge1xuICAgICAgICAgIHZhciB2YWx1ZSA9IF9pNyBpbiB2YWx1ZXMgPyB2YWx1ZXNbX2k3XSA6IDA7XG4gICAgICAgICAgY2FsbGJhY2sodmFsdWUsIFtfaTcsIGpdLCBtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gQXJyYXkgd2l0aCBhIGNvcHkgb2YgdGhlIGRhdGEgb2YgdGhlIFNwYXJzZU1hdHJpeFxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXlcbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF90b0FycmF5KHRoaXMuX3ZhbHVlcywgdGhpcy5faW5kZXgsIHRoaXMuX3B0ciwgdGhpcy5fc2l6ZSwgdHJ1ZSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIHByaW1pdGl2ZSB2YWx1ZSBvZiB0aGUgU3BhcnNlTWF0cml4OiBhIHR3byBkaW1lbnNpb25zIGFycmF5XG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHJldHVybnMge0FycmF5fSBhcnJheVxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gX3RvQXJyYXkodGhpcy5fdmFsdWVzLCB0aGlzLl9pbmRleCwgdGhpcy5fcHRyLCB0aGlzLl9zaXplLCBmYWxzZSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gX3RvQXJyYXkodmFsdWVzLCBpbmRleCwgcHRyLCBzaXplLCBjb3B5KSB7XG4gICAgLy8gcm93cyBhbmQgY29sdW1uc1xuICAgIHZhciByb3dzID0gc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IHNpemVbMV07IC8vIHJlc3VsdFxuXG4gICAgdmFyIGEgPSBbXTsgLy8gdmFyc1xuXG4gICAgdmFyIGksIGo7IC8vIGluaXRpYWxpemUgYXJyYXlcblxuICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIGFbaV0gPSBbXTtcblxuICAgICAgZm9yIChqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgICBhW2ldW2pdID0gMDtcbiAgICAgIH1cbiAgICB9IC8vIGxvb3AgY29sdW1uc1xuXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBrMCA8PSBrIDwgazEgd2hlcmUgazAgPSBfcHRyW2pdICYmIGsxID0gX3B0cltqKzFdXG4gICAgICB2YXIgazAgPSBwdHJbal07XG4gICAgICB2YXIgazEgPSBwdHJbaiArIDFdOyAvLyBsb29wIGsgd2l0aGluIFtrMCwgazFbXG5cbiAgICAgIGZvciAodmFyIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93IGluZGV4XG4gICAgICAgIGkgPSBpbmRleFtrXTsgLy8gc2V0IHZhbHVlICh1c2Ugb25lIGZvciBwYXR0ZXJuIG1hdHJpeClcblxuICAgICAgICBhW2ldW2pdID0gdmFsdWVzID8gY29weSA/ICgwLCBfb2JqZWN0LmNsb25lKSh2YWx1ZXNba10pIDogdmFsdWVzW2tdIDogMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYTtcbiAgfVxuICAvKipcbiAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXgsIHdpdGggb3B0aW9uYWwgZm9ybWF0dGluZyBvcHRpb25zLlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvdXRpbHMvbnVtYmVyOmZvcm1hdCBmb3IgYVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgLy8gcm93cyBhbmQgY29sdW1uc1xuICAgIHZhciByb3dzID0gdGhpcy5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IHRoaXMuX3NpemVbMV07IC8vIGRlbnNpdHlcblxuICAgIHZhciBkZW5zaXR5ID0gdGhpcy5kZW5zaXR5KCk7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgc3RyID0gJ1NwYXJzZSBNYXRyaXggWycgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHJvd3MsIG9wdGlvbnMpICsgJyB4ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKGNvbHVtbnMsIG9wdGlvbnMpICsgJ10gZGVuc2l0eTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoZGVuc2l0eSwgb3B0aW9ucykgKyAnXFxuJzsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gazAgPD0gayA8IGsxIHdoZXJlIGswID0gX3B0cltqXSAmJiBrMSA9IF9wdHJbaisxXVxuICAgICAgdmFyIGswID0gdGhpcy5fcHRyW2pdO1xuICAgICAgdmFyIGsxID0gdGhpcy5fcHRyW2ogKyAxXTsgLy8gbG9vcCBrIHdpdGhpbiBbazAsIGsxW1xuXG4gICAgICBmb3IgKHZhciBrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIHJvdyBpbmRleFxuICAgICAgICB2YXIgaSA9IHRoaXMuX2luZGV4W2tdOyAvLyBhcHBlbmQgdmFsdWVcblxuICAgICAgICBzdHIgKz0gJ1xcbiAgICAoJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoaSwgb3B0aW9ucykgKyAnLCAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShqLCBvcHRpb25zKSArICcpID09PiAnICsgKHRoaXMuX3ZhbHVlcyA/ICgwLCBfc3RyaW5nLmZvcm1hdCkodGhpcy5fdmFsdWVzW2tdLCBvcHRpb25zKSA6ICdYJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4XG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHJldHVybnMge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKDAsIF9zdHJpbmcuZm9ybWF0KSh0aGlzLnRvQXJyYXkoKSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXhcbiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdTcGFyc2VNYXRyaXgnLFxuICAgICAgdmFsdWVzOiB0aGlzLl92YWx1ZXMsXG4gICAgICBpbmRleDogdGhpcy5faW5kZXgsXG4gICAgICBwdHI6IHRoaXMuX3B0cixcbiAgICAgIHNpemU6IHRoaXMuX3NpemUsXG4gICAgICBkYXRhdHlwZTogdGhpcy5fZGF0YXR5cGVcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogR2V0IHRoZSBrdGggTWF0cml4IGRpYWdvbmFsLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyfSBbaz0wXSAgICAgVGhlIGt0aCBkaWFnb25hbCB3aGVyZSB0aGUgdmVjdG9yIHdpbGwgcmV0cmlldmVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXRyaXggdmVjdG9yIHdpdGggdGhlIGRpYWdvbmFsIHZhbHVlcy5cbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmRpYWdvbmFsID0gZnVuY3Rpb24gKGspIHtcbiAgICAvLyB2YWxpZGF0ZSBrIGlmIGFueVxuICAgIGlmIChrKSB7XG4gICAgICAvLyBjb252ZXJ0IEJpZ051bWJlciB0byBhIG51bWJlclxuICAgICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGspKSB7XG4gICAgICAgIGsgPSBrLnRvTnVtYmVyKCk7XG4gICAgICB9IC8vIGlzIG11c3QgYmUgYW4gaW50ZWdlclxuXG5cbiAgICAgIGlmICghKDAsIF9pcy5pc051bWJlcikoaykgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHBhcmFtZXRlciBrIG11c3QgYmUgYW4gaW50ZWdlciBudW1iZXInKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGVmYXVsdCB2YWx1ZVxuICAgICAgayA9IDA7XG4gICAgfVxuXG4gICAgdmFyIGtTdXBlciA9IGsgPiAwID8gayA6IDA7XG4gICAgdmFyIGtTdWIgPSBrIDwgMCA/IC1rIDogMDsgLy8gcm93cyAmIGNvbHVtbnNcblxuICAgIHZhciByb3dzID0gdGhpcy5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IHRoaXMuX3NpemVbMV07IC8vIG51bWJlciBkaWFnb25hbCB2YWx1ZXNcblxuICAgIHZhciBuID0gTWF0aC5taW4ocm93cyAtIGtTdWIsIGNvbHVtbnMgLSBrU3VwZXIpOyAvLyBkaWFnb25hbCBhcnJheXNcblxuICAgIHZhciB2YWx1ZXMgPSBbXTtcbiAgICB2YXIgaW5kZXggPSBbXTtcbiAgICB2YXIgcHRyID0gW107IC8vIGluaXRpYWwgcHRyIHZhbHVlXG5cbiAgICBwdHJbMF0gPSAwOyAvLyBsb29wIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGogPSBrU3VwZXI7IGogPCBjb2x1bW5zICYmIHZhbHVlcy5sZW5ndGggPCBuOyBqKyspIHtcbiAgICAgIC8vIGswIDw9IGsgPCBrMSB3aGVyZSBrMCA9IF9wdHJbal0gJiYgazEgPSBfcHRyW2orMV1cbiAgICAgIHZhciBrMCA9IHRoaXMuX3B0cltqXTtcbiAgICAgIHZhciBrMSA9IHRoaXMuX3B0cltqICsgMV07IC8vIGxvb3AgeCB3aXRoaW4gW2swLCBrMVtcblxuICAgICAgZm9yICh2YXIgeCA9IGswOyB4IDwgazE7IHgrKykge1xuICAgICAgICAvLyByb3cgaW5kZXhcbiAgICAgICAgdmFyIGkgPSB0aGlzLl9pbmRleFt4XTsgLy8gY2hlY2sgcm93XG5cbiAgICAgICAgaWYgKGkgPT09IGogLSBrU3VwZXIgKyBrU3ViKSB7XG4gICAgICAgICAgLy8gdmFsdWUgb24gdGhpcyBjb2x1bW5cbiAgICAgICAgICB2YWx1ZXMucHVzaCh0aGlzLl92YWx1ZXNbeF0pOyAvLyBzdG9yZSByb3dcblxuICAgICAgICAgIGluZGV4W3ZhbHVlcy5sZW5ndGggLSAxXSA9IGkgLSBrU3ViOyAvLyBleGl0IGxvb3BcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBjbG9zZSBwdHJcblxuXG4gICAgcHRyLnB1c2godmFsdWVzLmxlbmd0aCk7IC8vIHJldHVybiBtYXRyaXhcblxuICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogdmFsdWVzLFxuICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgcHRyOiBwdHIsXG4gICAgICBzaXplOiBbbiwgMV1cbiAgICB9KTtcbiAgfTtcbiAgLyoqXG4gICAqIEdlbmVyYXRlIGEgbWF0cml4IGZyb20gYSBKU09OIG9iamVjdFxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiU3BhcnNlTWF0cml4XCIsIFwidmFsdWVzXCI6IFtdLCBcImluZGV4XCI6IFtdLCBcInB0clwiOiBbXSwgXCJzaXplXCI6IFtdfWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge1NwYXJzZU1hdHJpeH1cbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXguZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KGpzb24pO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgZGlhZ29uYWwgbWF0cml4LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7QXJyYXl9IHNpemUgICAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXRyaXggc2l6ZS5cbiAgICogQHBhcmFtIHtudW1iZXIgfCBBcnJheSB8IE1hdHJpeCB9IHZhbHVlICAgVGhlIHZhbHVlcyBmb3IgdGhlIGRpYWdvbmFsLlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gW2s9MF0gICAgICAgICBUaGUga3RoIGRpYWdvbmFsIHdoZXJlIHRoZSB2ZWN0b3Igd2lsbCBiZSBmaWxsZWQgaW4uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVmYXVsdFZhbHVlXSAgICAgICAgICAgIFRoZSBkZWZhdWx0IHZhbHVlIGZvciBub24tZGlhZ29uYWxcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkYXRhdHlwZV0gICAgICAgICAgICAgICAgVGhlIE1hdHJpeCBkYXRhdHlwZSwgdmFsdWVzIG11c3QgYmUgb2YgdGhpcyBkYXRhdHlwZS5cbiAgICpcbiAgICogQHJldHVybnMge1NwYXJzZU1hdHJpeH1cbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXguZGlhZ29uYWwgPSBmdW5jdGlvbiAoc2l6ZSwgdmFsdWUsIGssIGRlZmF1bHRWYWx1ZSwgZGF0YXR5cGUpIHtcbiAgICBpZiAoISgwLCBfaXMuaXNBcnJheSkoc2l6ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkLCBzaXplIHBhcmFtZXRlcicpO1xuICAgIH1cblxuICAgIGlmIChzaXplLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IHR3byBkaW1lbnNpb25zIG1hdHJpeCBhcmUgc3VwcG9ydGVkJyk7XG4gICAgfSAvLyBtYXAgc2l6ZSAmIHZhbGlkYXRlXG5cblxuICAgIHNpemUgPSBzaXplLm1hcChmdW5jdGlvbiAocykge1xuICAgICAgLy8gY2hlY2sgaXQgaXMgYSBiaWcgbnVtYmVyXG4gICAgICBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikocykpIHtcbiAgICAgICAgLy8gY29udmVydCBpdFxuICAgICAgICBzID0gcy50b051bWJlcigpO1xuICAgICAgfSAvLyB2YWxpZGF0ZSBhcmd1bWVudHNcblxuXG4gICAgICBpZiAoISgwLCBfaXMuaXNOdW1iZXIpKHMpIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKHMpIHx8IHMgPCAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2l6ZSB2YWx1ZXMgbXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VycycpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcztcbiAgICB9KTsgLy8gdmFsaWRhdGUgayBpZiBhbnlcblxuICAgIGlmIChrKSB7XG4gICAgICAvLyBjb252ZXJ0IEJpZ051bWJlciB0byBhIG51bWJlclxuICAgICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGspKSB7XG4gICAgICAgIGsgPSBrLnRvTnVtYmVyKCk7XG4gICAgICB9IC8vIGlzIG11c3QgYmUgYW4gaW50ZWdlclxuXG5cbiAgICAgIGlmICghKDAsIF9pcy5pc051bWJlcikoaykgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoaykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHBhcmFtZXRlciBrIG11c3QgYmUgYW4gaW50ZWdlciBudW1iZXInKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGVmYXVsdCB2YWx1ZVxuICAgICAgayA9IDA7XG4gICAgfSAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlXG5cblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7XG5cbiAgICBpZiAoKDAsIF9pcy5pc1N0cmluZykoZGF0YXR5cGUpKSB7XG4gICAgICAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGRhdGF0eXBlLCBkYXRhdHlwZSlcbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2RhdGF0eXBlLCBkYXRhdHlwZV0pIHx8IGVxdWFsU2NhbGFyOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZGF0YXR5cGUpO1xuICAgIH1cblxuICAgIHZhciBrU3VwZXIgPSBrID4gMCA/IGsgOiAwO1xuICAgIHZhciBrU3ViID0gayA8IDAgPyAtayA6IDA7IC8vIHJvd3MgYW5kIGNvbHVtbnNcblxuICAgIHZhciByb3dzID0gc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IHNpemVbMV07IC8vIG51bWJlciBvZiBub24temVybyBpdGVtc1xuXG4gICAgdmFyIG4gPSBNYXRoLm1pbihyb3dzIC0ga1N1YiwgY29sdW1ucyAtIGtTdXBlcik7IC8vIHZhbHVlIGV4dHJhY3Rpb24gZnVuY3Rpb25cblxuICAgIHZhciBfdmFsdWU7IC8vIGNoZWNrIHZhbHVlXG5cblxuICAgIGlmICgoMCwgX2lzLmlzQXJyYXkpKHZhbHVlKSkge1xuICAgICAgLy8gdmFsaWRhdGUgYXJyYXlcbiAgICAgIGlmICh2YWx1ZS5sZW5ndGggIT09IG4pIHtcbiAgICAgICAgLy8gbnVtYmVyIG9mIHZhbHVlcyBpbiBhcnJheSBtdXN0IGJlIG5cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHZhbHVlIGFycmF5IGxlbmd0aCcpO1xuICAgICAgfSAvLyBkZWZpbmUgZnVuY3Rpb25cblxuXG4gICAgICBfdmFsdWUgPSBmdW5jdGlvbiBfdmFsdWUoaSkge1xuICAgICAgICAvLyByZXR1cm4gdmFsdWUgQCBpXG4gICAgICAgIHJldHVybiB2YWx1ZVtpXTtcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzTWF0cml4KSh2YWx1ZSkpIHtcbiAgICAgIC8vIG1hdHJpeCBzaXplXG4gICAgICB2YXIgbXMgPSB2YWx1ZS5zaXplKCk7IC8vIHZhbGlkYXRlIG1hdHJpeFxuXG4gICAgICBpZiAobXMubGVuZ3RoICE9PSAxIHx8IG1zWzBdICE9PSBuKSB7XG4gICAgICAgIC8vIG51bWJlciBvZiB2YWx1ZXMgaW4gYXJyYXkgbXVzdCBiZSBuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBtYXRyaXggbGVuZ3RoJyk7XG4gICAgICB9IC8vIGRlZmluZSBmdW5jdGlvblxuXG5cbiAgICAgIF92YWx1ZSA9IGZ1bmN0aW9uIF92YWx1ZShpKSB7XG4gICAgICAgIC8vIHJldHVybiB2YWx1ZSBAIGlcbiAgICAgICAgcmV0dXJuIHZhbHVlLmdldChbaV0pO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGVmaW5lIGZ1bmN0aW9uXG4gICAgICBfdmFsdWUgPSBmdW5jdGlvbiBfdmFsdWUoKSB7XG4gICAgICAgIC8vIHJldHVybiB2YWx1ZVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgIH0gLy8gY3JlYXRlIGFycmF5c1xuXG5cbiAgICB2YXIgdmFsdWVzID0gW107XG4gICAgdmFyIGluZGV4ID0gW107XG4gICAgdmFyIHB0ciA9IFtdOyAvLyBsb29wIGl0ZW1zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gbnVtYmVyIG9mIHJvd3Mgd2l0aCB2YWx1ZVxuICAgICAgcHRyLnB1c2godmFsdWVzLmxlbmd0aCk7IC8vIGRpYWdvbmFsIGluZGV4XG5cbiAgICAgIHZhciBpID0gaiAtIGtTdXBlcjsgLy8gY2hlY2sgd2UgbmVlZCB0byBzZXQgZGlhZ29uYWwgdmFsdWVcblxuICAgICAgaWYgKGkgPj0gMCAmJiBpIDwgbikge1xuICAgICAgICAvLyBnZXQgdmFsdWUgQCBpXG4gICAgICAgIHZhciB2ID0gX3ZhbHVlKGkpOyAvLyBjaGVjayBmb3IgemVyb1xuXG5cbiAgICAgICAgaWYgKCFlcSh2LCB6ZXJvKSkge1xuICAgICAgICAgIC8vIGNvbHVtblxuICAgICAgICAgIGluZGV4LnB1c2goaSArIGtTdWIpOyAvLyBhZGQgdmFsdWVcblxuICAgICAgICAgIHZhbHVlcy5wdXNoKHYpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBsYXN0IHZhbHVlIHNob3VsZCBiZSBudW1iZXIgb2YgdmFsdWVzXG5cblxuICAgIHB0ci5wdXNoKHZhbHVlcy5sZW5ndGgpOyAvLyBjcmVhdGUgU3BhcnNlTWF0cml4XG5cbiAgICByZXR1cm4gbmV3IFNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IHZhbHVlcyxcbiAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgIHB0cjogcHRyLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdXG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBTd2FwIHJvd3MgaSBhbmQgaiBpbiBNYXRyaXguXG4gICAqXG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGkgICAgICAgTWF0cml4IHJvdyBpbmRleCAxXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBqICAgICAgIE1hdHJpeCByb3cgaW5kZXggMlxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICBUaGUgbWF0cml4IHJlZmVyZW5jZVxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuc3dhcFJvd3MgPSBmdW5jdGlvbiAoaSwgaikge1xuICAgIC8vIGNoZWNrIGluZGV4XG4gICAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKShpKSB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShpKSB8fCAhKDAsIF9pcy5pc051bWJlcikoaikgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoaikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUm93IGluZGV4IG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcnMnKTtcbiAgICB9IC8vIGNoZWNrIGRpbWVuc2lvbnNcblxuXG4gICAgaWYgKHRoaXMuX3NpemUubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgdHdvIGRpbWVuc2lvbmFsIG1hdHJpeCBpcyBzdXBwb3J0ZWQnKTtcbiAgICB9IC8vIHZhbGlkYXRlIGluZGV4XG5cblxuICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkoaSwgdGhpcy5fc2l6ZVswXSk7XG4gICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShqLCB0aGlzLl9zaXplWzBdKTsgLy8gc3dhcCByb3dzXG5cbiAgICBTcGFyc2VNYXRyaXguX3N3YXBSb3dzKGksIGosIHRoaXMuX3NpemVbMV0sIHRoaXMuX3ZhbHVlcywgdGhpcy5faW5kZXgsIHRoaXMuX3B0cik7IC8vIHJldHVybiBjdXJyZW50IGluc3RhbmNlXG5cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogTG9vcCByb3dzIHdpdGggZGF0YSBpbiBjb2x1bW4gai5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGogICAgICAgICAgICBDb2x1bW5cbiAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzICAgICAgICBNYXRyaXggdmFsdWVzXG4gICAqIEBwYXJhbSB7QXJyYXl9IGluZGV4ICAgICAgICAgTWF0cml4IHJvdyBpbmRlY2VzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHB0ciAgICAgICAgICAgTWF0cml4IGNvbHVtbiBwb2ludGVyc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgZm9yIGV2ZXJ5IHJvdyBpbiBjb2x1bW4galxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5fZm9yRWFjaFJvdyA9IGZ1bmN0aW9uIChqLCB2YWx1ZXMsIGluZGV4LCBwdHIsIGNhbGxiYWNrKSB7XG4gICAgLy8gaW5kZWNlcyBmb3IgY29sdW1uIGpcbiAgICB2YXIgazAgPSBwdHJbal07XG4gICAgdmFyIGsxID0gcHRyW2ogKyAxXTsgLy8gbG9vcFxuXG4gICAgZm9yICh2YXIgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgLy8gaW52b2tlIGNhbGxiYWNrXG4gICAgICBjYWxsYmFjayhpbmRleFtrXSwgdmFsdWVzW2tdKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBTd2FwIHJvd3MgeCBhbmQgeSBpbiBTcGFyc2UgTWF0cml4IGRhdGEgc3RydWN0dXJlcy5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHggICAgICAgICBNYXRyaXggcm93IGluZGV4IDFcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgICAgICAgICBNYXRyaXggcm93IGluZGV4IDJcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbnMgICBOdW1iZXIgb2YgY29sdW1ucyBpbiBtYXRyaXhcbiAgICogQHBhcmFtIHtBcnJheX0gdmFsdWVzICAgICBNYXRyaXggdmFsdWVzXG4gICAqIEBwYXJhbSB7QXJyYXl9IGluZGV4ICAgICAgTWF0cml4IHJvdyBpbmRlY2VzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHB0ciAgICAgICAgTWF0cml4IGNvbHVtbiBwb2ludGVyc1xuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5fc3dhcFJvd3MgPSBmdW5jdGlvbiAoeCwgeSwgY29sdW1ucywgdmFsdWVzLCBpbmRleCwgcHRyKSB7XG4gICAgLy8gbG9vcCBjb2x1bW5zXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIGswIDw9IGsgPCBrMSB3aGVyZSBrMCA9IF9wdHJbal0gJiYgazEgPSBfcHRyW2orMV1cbiAgICAgIHZhciBrMCA9IHB0cltqXTtcbiAgICAgIHZhciBrMSA9IHB0cltqICsgMV07IC8vIGZpbmQgdmFsdWUgaW5kZXggQCB4XG5cbiAgICAgIHZhciBreCA9IF9nZXRWYWx1ZUluZGV4KHgsIGswLCBrMSwgaW5kZXgpOyAvLyBmaW5kIHZhbHVlIGluZGV4IEAgeFxuXG5cbiAgICAgIHZhciBreSA9IF9nZXRWYWx1ZUluZGV4KHksIGswLCBrMSwgaW5kZXgpOyAvLyBjaGVjayBib3RoIHJvd3MgZXhpc3QgaW4gbWF0cml4XG5cblxuICAgICAgaWYgKGt4IDwgazEgJiYga3kgPCBrMSAmJiBpbmRleFtreF0gPT09IHggJiYgaW5kZXhba3ldID09PSB5KSB7XG4gICAgICAgIC8vIHN3YXAgdmFsdWVzIChjaGVjayBmb3IgcGF0dGVybiBtYXRyaXgpXG4gICAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgICB2YXIgdiA9IHZhbHVlc1treF07XG4gICAgICAgICAgdmFsdWVzW2t4XSA9IHZhbHVlc1treV07XG4gICAgICAgICAgdmFsdWVzW2t5XSA9IHY7XG4gICAgICAgIH0gLy8gbmV4dCBjb2x1bW5cblxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBjaGVjayB4IHJvdyBleGlzdCAmIG5vIHkgcm93XG5cblxuICAgICAgaWYgKGt4IDwgazEgJiYgaW5kZXhba3hdID09PSB4ICYmIChreSA+PSBrMSB8fCBpbmRleFtreV0gIT09IHkpKSB7XG4gICAgICAgIC8vIHZhbHVlIEAgeCAoY2hlY2sgZm9yIHBhdHRlcm4gbWF0cml4KVxuICAgICAgICB2YXIgdnggPSB2YWx1ZXMgPyB2YWx1ZXNba3hdIDogdW5kZWZpbmVkOyAvLyBpbnNlcnQgdmFsdWUgQCB5XG5cbiAgICAgICAgaW5kZXguc3BsaWNlKGt5LCAwLCB5KTtcblxuICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgdmFsdWVzLnNwbGljZShreSwgMCwgdngpO1xuICAgICAgICB9IC8vIHJlbW92ZSB2YWx1ZSBAIHggKGFkanVzdCBhcnJheSBpbmRleCBpZiBuZWVkZWQpXG5cblxuICAgICAgICBpbmRleC5zcGxpY2Uoa3kgPD0ga3ggPyBreCArIDEgOiBreCwgMSk7XG5cbiAgICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICAgIHZhbHVlcy5zcGxpY2Uoa3kgPD0ga3ggPyBreCArIDEgOiBreCwgMSk7XG4gICAgICAgIH0gLy8gbmV4dCBjb2x1bW5cblxuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBjaGVjayB5IHJvdyBleGlzdCAmIG5vIHggcm93XG5cblxuICAgICAgaWYgKGt5IDwgazEgJiYgaW5kZXhba3ldID09PSB5ICYmIChreCA+PSBrMSB8fCBpbmRleFtreF0gIT09IHgpKSB7XG4gICAgICAgIC8vIHZhbHVlIEAgeSAoY2hlY2sgZm9yIHBhdHRlcm4gbWF0cml4KVxuICAgICAgICB2YXIgdnkgPSB2YWx1ZXMgPyB2YWx1ZXNba3ldIDogdW5kZWZpbmVkOyAvLyBpbnNlcnQgdmFsdWUgQCB4XG5cbiAgICAgICAgaW5kZXguc3BsaWNlKGt4LCAwLCB4KTtcblxuICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgdmFsdWVzLnNwbGljZShreCwgMCwgdnkpO1xuICAgICAgICB9IC8vIHJlbW92ZSB2YWx1ZSBAIHkgKGFkanVzdCBhcnJheSBpbmRleCBpZiBuZWVkZWQpXG5cblxuICAgICAgICBpbmRleC5zcGxpY2Uoa3ggPD0ga3kgPyBreSArIDEgOiBreSwgMSk7XG5cbiAgICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICAgIHZhbHVlcy5zcGxpY2Uoa3ggPD0ga3kgPyBreSArIDEgOiBreSwgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIFNwYXJzZU1hdHJpeDtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNwYXJzZU1hdHJpeENsYXNzID0gY3JlYXRlU3BhcnNlTWF0cml4Q2xhc3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUluZGV4ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9pc1wiKTtcblxudmFyIG5hbWUgPSAnaW5kZXgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnSW5kZXgnXTtcbnZhciBjcmVhdGVJbmRleCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBJbmRleCA9IF9yZWYuSW5kZXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbmRleC4gQW4gSW5kZXggY2FuIHN0b3JlIHJhbmdlcyBoYXZpbmcgc3RhcnQsIHN0ZXAsIGFuZCBlbmRcbiAgICogZm9yIG11bHRpcGxlIGRpbWVuc2lvbnMuXG4gICAqIE1hdHJpeC5nZXQsIE1hdHJpeC5zZXQsIGFuZCBtYXRoLnN1YnNldCBhY2NlcHQgYW4gSW5kZXggYXMgaW5wdXQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguaW5kZXgocmFuZ2UxLCByYW5nZTIsIC4uLilcbiAgICpcbiAgICogV2hlcmUgZWFjaCByYW5nZSBjYW4gYmUgYW55IG9mOlxuICAgKlxuICAgKiAtIEEgbnVtYmVyXG4gICAqIC0gQSBzdHJpbmcgZm9yIGdldHRpbmcvc2V0dGluZyBhbiBvYmplY3QgcHJvcGVydHlcbiAgICogLSBBbiBpbnN0YW5jZSBvZiBgUmFuZ2VgXG4gICAqIC0gQSBvbmUtZGltZW5zaW9uYWwgQXJyYXkgb3IgYSBNYXRyaXggd2l0aCBudW1iZXJzXG4gICAqXG4gICAqIEluZGV4ZXMgbXVzdCBiZSB6ZXJvLWJhc2VkLCBpbnRlZ2VyIG51bWJlcnMuXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBjb25zdCBiID0gWzEsIDIsIDMsIDQsIDVdXG4gICAqICAgIG1hdGguc3Vic2V0KGIsIG1hdGguaW5kZXgoWzEsIDIsIDNdKSkgICAgIC8vIHJldHVybnMgWzIsIDMsIDRdXG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLm1hdHJpeChbWzEsIDJdLCBbMywgNF1dKVxuICAgKiAgICBhLnN1YnNldChtYXRoLmluZGV4KDAsIDEpKSAgICAgICAgICAgICAvLyByZXR1cm5zIDJcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGJpZ251bWJlciwgYm9vbGVhbiwgY29tcGxleCwgbWF0cml4LCBudW1iZXIsIHN0cmluZywgdW5pdFxuICAgKlxuICAgKiBAcGFyYW0gey4uLip9IHJhbmdlcyAgIFplcm8gb3IgbW9yZSByYW5nZXMgb3IgbnVtYmVycy5cbiAgICogQHJldHVybiB7SW5kZXh9ICAgICAgICBSZXR1cm5zIHRoZSBjcmVhdGVkIGluZGV4XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcuLi5udW1iZXIgfCBzdHJpbmcgfCBCaWdOdW1iZXIgfCBSYW5nZSB8IEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyU3RyaW5nQmlnTnVtYmVyUmFuZ2VBcnJheU1hdHJpeChhcmdzKSB7XG4gICAgICB2YXIgcmFuZ2VzID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikoYXJnKSkge1xuICAgICAgICAgIHJldHVybiBhcmcudG9OdW1iZXIoKTsgLy8gY29udmVydCBCaWdOdW1iZXIgdG8gTnVtYmVyXG4gICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpIHx8ICgwLCBfaXMuaXNNYXRyaXgpKGFyZykpIHtcbiAgICAgICAgICByZXR1cm4gYXJnLm1hcChmdW5jdGlvbiAoZWxlbSkge1xuICAgICAgICAgICAgLy8gY29udmVydCBCaWdOdW1iZXIgdG8gTnVtYmVyXG4gICAgICAgICAgICByZXR1cm4gKDAsIF9pcy5pc0JpZ051bWJlcikoZWxlbSkgPyBlbGVtLnRvTnVtYmVyKCkgOiBlbGVtO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgdmFyIHJlcyA9IG5ldyBJbmRleCgpO1xuICAgICAgSW5kZXguYXBwbHkocmVzLCByYW5nZXMpO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUluZGV4ID0gY3JlYXRlSW5kZXg7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1hdHJpeCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ21hdHJpeCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdNYXRyaXgnLCAnRGVuc2VNYXRyaXgnLCAnU3BhcnNlTWF0cml4J107XG52YXIgY3JlYXRlTWF0cml4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIE1hdHJpeCA9IF9yZWYuTWF0cml4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4LFxuICAgICAgU3BhcnNlTWF0cml4ID0gX3JlZi5TcGFyc2VNYXRyaXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIE1hdHJpeC4gVGhlIGZ1bmN0aW9uIGNyZWF0ZXMgYSBuZXcgYG1hdGguTWF0cml4YCBvYmplY3QgZnJvbVxuICAgKiBhbiBgQXJyYXlgLiBBIE1hdHJpeCBoYXMgdXRpbGl0eSBmdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSB0aGUgZGF0YSBpbiB0aGVcbiAgICogbWF0cml4LCBsaWtlIGdldHRpbmcgdGhlIHNpemUgYW5kIGdldHRpbmcgb3Igc2V0dGluZyB2YWx1ZXMgaW4gdGhlIG1hdHJpeC5cbiAgICogU3VwcG9ydGVkIHN0b3JhZ2UgZm9ybWF0cyBhcmUgJ2RlbnNlJyBhbmQgJ3NwYXJzZScuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5tYXRyaXgoKSAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjcmVhdGVzIGFuIGVtcHR5IG1hdHJpeCB1c2luZyBkZWZhdWx0IHN0b3JhZ2UgZm9ybWF0IChkZW5zZSkuXG4gICAqICAgIG1hdGgubWF0cml4KGRhdGEpICAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlcyBhIG1hdHJpeCB3aXRoIGluaXRpYWwgZGF0YSB1c2luZyBkZWZhdWx0IHN0b3JhZ2UgZm9ybWF0IChkZW5zZSkuXG4gICAqICAgIG1hdGgubWF0cml4KCdkZW5zZScpICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlcyBhbiBlbXB0eSBtYXRyaXggdXNpbmcgdGhlIGdpdmVuIHN0b3JhZ2UgZm9ybWF0LlxuICAgKiAgICBtYXRoLm1hdHJpeChkYXRhLCAnZGVuc2UnKSAgICAgICAgICAgIC8vIGNyZWF0ZXMgYSBtYXRyaXggd2l0aCBpbml0aWFsIGRhdGEgdXNpbmcgdGhlIGdpdmVuIHN0b3JhZ2UgZm9ybWF0LlxuICAgKiAgICBtYXRoLm1hdHJpeChkYXRhLCAnc3BhcnNlJykgICAgICAgICAgIC8vIGNyZWF0ZXMgYSBzcGFyc2UgbWF0cml4IHdpdGggaW5pdGlhbCBkYXRhLlxuICAgKiAgICBtYXRoLm1hdHJpeChkYXRhLCAnc3BhcnNlJywgJ251bWJlcicpIC8vIGNyZWF0ZXMgYSBzcGFyc2UgbWF0cml4IHdpdGggaW5pdGlhbCBkYXRhLCBudW1iZXIgZGF0YSB0eXBlLlxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbGV0IG0gPSBtYXRoLm1hdHJpeChbWzEsIDJdLCBbMywgNF1dKVxuICAgKiAgICBtLnNpemUoKSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFycmF5IFsyLCAyXVxuICAgKiAgICBtLnJlc2l6ZShbMywgMl0sIDUpXG4gICAqICAgIG0udmFsdWVPZigpICAgICAgICAgICAgICAgICAgICAgLy8gQXJyYXkgW1sxLCAyXSwgWzMsIDRdLCBbNSwgNV1dXG4gICAqICAgIG0uZ2V0KFsxLCAwXSkgICAgICAgICAgICAgICAgICAgIC8vIG51bWJlciAzXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaWdudW1iZXIsIGJvb2xlYW4sIGNvbXBsZXgsIGluZGV4LCBudW1iZXIsIHN0cmluZywgdW5pdCwgc3BhcnNlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IFtkYXRhXSAgICBBIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZm9ybWF0XSAgICAgICAgICBUaGUgTWF0cml4IHN0b3JhZ2UgZm9ybWF0XG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gVGhlIGNyZWF0ZWQgbWF0cml4XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIF9jcmVhdGUoW10pO1xuICAgIH0sXG4gICAgc3RyaW5nOiBmdW5jdGlvbiBzdHJpbmcoZm9ybWF0KSB7XG4gICAgICByZXR1cm4gX2NyZWF0ZShbXSwgZm9ybWF0KTtcbiAgICB9LFxuICAgICdzdHJpbmcsIHN0cmluZyc6IGZ1bmN0aW9uIHN0cmluZ1N0cmluZyhmb3JtYXQsIGRhdGF0eXBlKSB7XG4gICAgICByZXR1cm4gX2NyZWF0ZShbXSwgZm9ybWF0LCBkYXRhdHlwZSk7XG4gICAgfSxcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoZGF0YSkge1xuICAgICAgcmV0dXJuIF9jcmVhdGUoZGF0YSk7XG4gICAgfSxcbiAgICBNYXRyaXg6IGZ1bmN0aW9uIE1hdHJpeChkYXRhKSB7XG4gICAgICByZXR1cm4gX2NyZWF0ZShkYXRhLCBkYXRhLnN0b3JhZ2UoKSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgsIHN0cmluZyc6IF9jcmVhdGUsXG4gICAgJ0FycmF5IHwgTWF0cml4LCBzdHJpbmcsIHN0cmluZyc6IF9jcmVhdGVcbiAgfSk7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgTWF0cml4IHdpdGggZ2l2ZW4gc3RvcmFnZSBmb3JtYXRcbiAgICogQHBhcmFtIHtBcnJheX0gZGF0YVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdF1cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkYXRhdHlwZV1cbiAgICogQHJldHVybnMge01hdHJpeH0gUmV0dXJucyBhIG5ldyBNYXRyaXhcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX2NyZWF0ZShkYXRhLCBmb3JtYXQsIGRhdGF0eXBlKSB7XG4gICAgLy8gZ2V0IHN0b3JhZ2UgZm9ybWF0IGNvbnN0cnVjdG9yXG4gICAgaWYgKGZvcm1hdCA9PT0gJ2RlbnNlJyB8fCBmb3JtYXQgPT09ICdkZWZhdWx0JyB8fCBmb3JtYXQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeChkYXRhLCBkYXRhdHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKGZvcm1hdCA9PT0gJ3NwYXJzZScpIHtcbiAgICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KGRhdGEsIGRhdGF0eXBlKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIG1hdHJpeCB0eXBlICcgKyBKU09OLnN0cmluZ2lmeShmb3JtYXQpICsgJy4nKTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZU1hdHJpeCA9IGNyZWF0ZU1hdHJpeDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3BhcnNlID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc3BhcnNlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ1NwYXJzZU1hdHJpeCddO1xudmFyIGNyZWF0ZVNwYXJzZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBTcGFyc2VNYXRyaXggPSBfcmVmLlNwYXJzZU1hdHJpeDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgU3BhcnNlIE1hdHJpeC4gVGhlIGZ1bmN0aW9uIGNyZWF0ZXMgYSBuZXcgYG1hdGguTWF0cml4YCBvYmplY3QgZnJvbVxuICAgKiBhbiBgQXJyYXlgLiBBIE1hdHJpeCBoYXMgdXRpbGl0eSBmdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSB0aGUgZGF0YSBpbiB0aGVcbiAgICogbWF0cml4LCBsaWtlIGdldHRpbmcgdGhlIHNpemUgYW5kIGdldHRpbmcgb3Igc2V0dGluZyB2YWx1ZXMgaW4gdGhlIG1hdHJpeC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNwYXJzZSgpICAgICAgICAgICAgICAgLy8gY3JlYXRlcyBhbiBlbXB0eSBzcGFyc2UgbWF0cml4LlxuICAgKiAgICBtYXRoLnNwYXJzZShkYXRhKSAgICAgICAgICAgLy8gY3JlYXRlcyBhIHNwYXJzZSBtYXRyaXggd2l0aCBpbml0aWFsIGRhdGEuXG4gICAqICAgIG1hdGguc3BhcnNlKGRhdGEsICdudW1iZXInKSAvLyBjcmVhdGVzIGEgc3BhcnNlIG1hdHJpeCB3aXRoIGluaXRpYWwgZGF0YSwgbnVtYmVyIGRhdGF0eXBlLlxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbGV0IG0gPSBtYXRoLnNwYXJzZShbWzEsIDJdLCBbMywgNF1dKVxuICAgKiAgICBtLnNpemUoKSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEFycmF5IFsyLCAyXVxuICAgKiAgICBtLnJlc2l6ZShbMywgMl0sIDUpXG4gICAqICAgIG0udmFsdWVPZigpICAgICAgICAgICAgICAgICAgICAgLy8gQXJyYXkgW1sxLCAyXSwgWzMsIDRdLCBbNSwgNV1dXG4gICAqICAgIG0uZ2V0KFsxLCAwXSkgICAgICAgICAgICAgICAgICAgIC8vIG51bWJlciAzXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaWdudW1iZXIsIGJvb2xlYW4sIGNvbXBsZXgsIGluZGV4LCBudW1iZXIsIHN0cmluZywgdW5pdCwgbWF0cml4XG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IFtkYXRhXSAgICBBIHR3byBkaW1lbnNpb25hbCBhcnJheVxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9IFRoZSBjcmVhdGVkIG1hdHJpeFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KFtdKTtcbiAgICB9LFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKGRhdGF0eXBlKSB7XG4gICAgICByZXR1cm4gbmV3IFNwYXJzZU1hdHJpeChbXSwgZGF0YXR5cGUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoZGF0YSkge1xuICAgICAgcmV0dXJuIG5ldyBTcGFyc2VNYXRyaXgoZGF0YSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgsIHN0cmluZyc6IGZ1bmN0aW9uIEFycmF5TWF0cml4U3RyaW5nKGRhdGEsIGRhdGF0eXBlKSB7XG4gICAgICByZXR1cm4gbmV3IFNwYXJzZU1hdHJpeChkYXRhLCBkYXRhdHlwZSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcGFyc2UgPSBjcmVhdGVTcGFyc2U7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTAxID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9EaW1lbnNpb25FcnJvciA9IHJlcXVpcmUoXCIuLi8uLi8uLi9lcnJvci9EaW1lbnNpb25FcnJvclwiKTtcblxudmFyIG5hbWUgPSAnYWxnb3JpdGhtMDEnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVBbGdvcml0aG0wMSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIG92ZXIgU3BhcnNlTWF0cml4IG5vbnplcm8gaXRlbXMgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoRGlqLCBTaWopLlxuICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIE5OWiB0aW1lcyAobnVtYmVyIG9mIG5vbnplcm8gaXRlbXMgaW4gU3BhcnNlTWF0cml4KS5cbiAgICpcbiAgICpcbiAgICogICAgICAgICAg4pSMICBmKERpaiwgU2lqKSAgOyBTKGksaikgIT09IDBcbiAgICogQyhpLGopID0g4pSkXG4gICAqICAgICAgICAgIOKUlCAgRGlqICAgICAgICAgIDsgb3RoZXJ3aXNlXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGRlbnNlTWF0cml4ICAgICAgIFRoZSBEZW5zZU1hdHJpeCBpbnN0YW5jZSAoRClcbiAgICogQHBhcmFtIHtNYXRyaXh9ICAgc3BhcnNlTWF0cml4ICAgICAgVGhlIFNwYXJzZU1hdHJpeCBpbnN0YW5jZSAoUylcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICAgICAgICAgVGhlIGYoRGlqLFNpaikgb3BlcmF0aW9uIHRvIGludm9rZSwgd2hlcmUgRGlqID0gRGVuc2VNYXRyaXgoaSxqKSBhbmQgU2lqID0gU3BhcnNlTWF0cml4KGksailcbiAgICogQHBhcmFtIHtib29sZWFufSAgaW52ZXJzZSAgICAgICAgICAgQSB0cnVlIHZhbHVlIGluZGljYXRlcyBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZCBmKFNpaixEaWopXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIERlbnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NDc3NTcxXG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gYWxnb3JpdGhtMShkZW5zZU1hdHJpeCwgc3BhcnNlTWF0cml4LCBjYWxsYmFjaywgaW52ZXJzZSkge1xuICAgIC8vIGRlbnNlIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgYWRhdGEgPSBkZW5zZU1hdHJpeC5fZGF0YTtcbiAgICB2YXIgYXNpemUgPSBkZW5zZU1hdHJpeC5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gZGVuc2VNYXRyaXguX2RhdGF0eXBlOyAvLyBzcGFyc2UgbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIGJ2YWx1ZXMgPSBzcGFyc2VNYXRyaXguX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gc3BhcnNlTWF0cml4Ll9pbmRleDtcbiAgICB2YXIgYnB0ciA9IHNwYXJzZU1hdHJpeC5fcHRyO1xuICAgIHZhciBic2l6ZSA9IHNwYXJzZU1hdHJpeC5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gc3BhcnNlTWF0cml4Ll9kYXRhdHlwZTsgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG4gICAgaWYgKGFzaXplLmxlbmd0aCAhPT0gYnNpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGFzaXplLmxlbmd0aCwgYnNpemUubGVuZ3RoKTtcbiAgICB9IC8vIGNoZWNrIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIGlmIChhc2l6ZVswXSAhPT0gYnNpemVbMF0gfHwgYXNpemVbMV0gIT09IGJzaXplWzFdKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTtcbiAgICB9IC8vIHNwYXJzZSBtYXRyaXggY2Fubm90IGJlIGEgUGF0dGVybiBtYXRyaXhcblxuXG4gICAgaWYgKCFidmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwZXJmb3JtIG9wZXJhdGlvbiBvbiBEZW5zZSBNYXRyaXggYW5kIFBhdHRlcm4gU3BhcnNlIE1hdHJpeCcpO1xuICAgIH0gLy8gcm93cyAmIGNvbHVtbnNcblxuXG4gICAgdmFyIHJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IGFzaXplWzFdOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIHZhciBkdCA9IHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnICYmIGFkdCA9PT0gYmR0ID8gYWR0IDogdW5kZWZpbmVkOyAvLyBjYWxsYmFjayBmdW5jdGlvblxuXG4gICAgdmFyIGNmID0gZHQgPyB0eXBlZC5maW5kKGNhbGxiYWNrLCBbZHQsIGR0XSkgOiBjYWxsYmFjazsgLy8gdmFyc1xuXG4gICAgdmFyIGksIGo7IC8vIHJlc3VsdCAoRGVuc2VNYXRyaXgpXG5cbiAgICB2YXIgY2RhdGEgPSBbXTsgLy8gaW5pdGlhbGl6ZSBjXG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBjZGF0YVtpXSA9IFtdO1xuICAgIH0gLy8gd29ya3NwYWNlXG5cblxuICAgIHZhciB4ID0gW107IC8vIG1hcmtzIGluZGljYXRpbmcgd2UgaGF2ZSBhIHZhbHVlIGluIHggZm9yIGEgZ2l2ZW4gY29sdW1uXG5cbiAgICB2YXIgdyA9IFtdOyAvLyBsb29wIGNvbHVtbnMgaW4gYlxuXG4gICAgZm9yIChqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gY29sdW1uIG1hcmtcbiAgICAgIHZhciBtYXJrID0gaiArIDE7IC8vIHZhbHVlcyBpbiBjb2x1bW4galxuXG4gICAgICBmb3IgKHZhciBrMCA9IGJwdHJbal0sIGsxID0gYnB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIGkgPSBiaW5kZXhba107IC8vIHVwZGF0ZSB3b3Jrc3BhY2VcblxuICAgICAgICB4W2ldID0gaW52ZXJzZSA/IGNmKGJ2YWx1ZXNba10sIGFkYXRhW2ldW2pdKSA6IGNmKGFkYXRhW2ldW2pdLCBidmFsdWVzW2tdKTsgLy8gbWFyayBpIGFzIHVwZGF0ZWRcblxuICAgICAgICB3W2ldID0gbWFyaztcbiAgICAgIH0gLy8gbG9vcCByb3dzXG5cblxuICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAvLyBjaGVjayByb3cgaXMgaW4gd29ya3NwYWNlXG4gICAgICAgIGlmICh3W2ldID09PSBtYXJrKSB7XG4gICAgICAgICAgLy8gY1tpXVtqXSB3YXMgYWxyZWFkeSBjYWxjdWxhdGVkXG4gICAgICAgICAgY2RhdGFbaV1bal0gPSB4W2ldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGl0ZW0gZG9lcyBub3QgZXhpc3QgaW4gU1xuICAgICAgICAgIGNkYXRhW2ldW2pdID0gYWRhdGFbaV1bal07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiBkZW5zZSBtYXRyaXhcblxuXG4gICAgcmV0dXJuIGRlbnNlTWF0cml4LmNyZWF0ZURlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGNkYXRhLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDEgPSBjcmVhdGVBbGdvcml0aG0wMTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDIgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgbmFtZSA9ICdhbGdvcml0aG0wMic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdlcXVhbFNjYWxhciddO1xudmFyIGNyZWF0ZUFsZ29yaXRobTAyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcjtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBTcGFyc2VNYXRyaXggbm9uemVybyBpdGVtcyBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZihEaWosIFNpaikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTk5aIHRpbWVzIChudW1iZXIgb2Ygbm9uemVybyBpdGVtcyBpbiBTcGFyc2VNYXRyaXgpLlxuICAgKlxuICAgKlxuICAgKiAgICAgICAgICDilIwgIGYoRGlqLCBTaWopICA7IFMoaSxqKSAhPT0gMFxuICAgKiBDKGksaikgPSDilKRcbiAgICogICAgICAgICAg4pSUICAwICAgICAgICAgICAgOyBvdGhlcndpc2VcbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9ICAgZGVuc2VNYXRyaXggICAgICAgVGhlIERlbnNlTWF0cml4IGluc3RhbmNlIChEKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBzcGFyc2VNYXRyaXggICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChTKVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihEaWosU2lqKSBvcGVyYXRpb24gdG8gaW52b2tlLCB3aGVyZSBEaWogPSBEZW5zZU1hdHJpeChpLGopIGFuZCBTaWogPSBTcGFyc2VNYXRyaXgoaSxqKVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBpbnZlcnNlICAgICAgICAgICBBIHRydWUgdmFsdWUgaW5kaWNhdGVzIGNhbGxiYWNrIHNob3VsZCBiZSBpbnZva2VkIGYoU2lqLERpailcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgU3BhcnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NDc3NTcxXG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gYWxnb3JpdGhtMDIoZGVuc2VNYXRyaXgsIHNwYXJzZU1hdHJpeCwgY2FsbGJhY2ssIGludmVyc2UpIHtcbiAgICAvLyBkZW5zZSBtYXRyaXggYXJyYXlzXG4gICAgdmFyIGFkYXRhID0gZGVuc2VNYXRyaXguX2RhdGE7XG4gICAgdmFyIGFzaXplID0gZGVuc2VNYXRyaXguX3NpemU7XG4gICAgdmFyIGFkdCA9IGRlbnNlTWF0cml4Ll9kYXRhdHlwZTsgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcblxuICAgIHZhciBidmFsdWVzID0gc3BhcnNlTWF0cml4Ll92YWx1ZXM7XG4gICAgdmFyIGJpbmRleCA9IHNwYXJzZU1hdHJpeC5faW5kZXg7XG4gICAgdmFyIGJwdHIgPSBzcGFyc2VNYXRyaXguX3B0cjtcbiAgICB2YXIgYnNpemUgPSBzcGFyc2VNYXRyaXguX3NpemU7XG4gICAgdmFyIGJkdCA9IHNwYXJzZU1hdHJpeC5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnNcblxuICAgIGlmIChhc2l6ZS5sZW5ndGggIT09IGJzaXplLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihhc2l6ZS5sZW5ndGgsIGJzaXplLmxlbmd0aCk7XG4gICAgfSAvLyBjaGVjayByb3dzICYgY29sdW1uc1xuXG5cbiAgICBpZiAoYXNpemVbMF0gIT09IGJzaXplWzBdIHx8IGFzaXplWzFdICE9PSBic2l6ZVsxXSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IEEgKCcgKyBhc2l6ZSArICcpIG11c3QgbWF0Y2ggTWF0cml4IEIgKCcgKyBic2l6ZSArICcpJyk7XG4gICAgfSAvLyBzcGFyc2UgbWF0cml4IGNhbm5vdCBiZSBhIFBhdHRlcm4gbWF0cml4XG5cblxuICAgIGlmICghYnZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGVyZm9ybSBvcGVyYXRpb24gb24gRGVuc2UgTWF0cml4IGFuZCBQYXR0ZXJuIFNwYXJzZSBNYXRyaXgnKTtcbiAgICB9IC8vIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIHZhciByb3dzID0gYXNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBhc2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gZXF1YWwgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGVxID0gZXF1YWxTY2FsYXI7IC8vIHplcm8gdmFsdWVcblxuICAgIHZhciB6ZXJvID0gMDsgLy8gY2FsbGJhY2sgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGNmID0gY2FsbGJhY2s7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnICYmIGFkdCA9PT0gYmR0KSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlIHRoYXQgbWF0Y2hlcyAoZHQsIGR0KVxuXG4gICAgICBlcSA9IHR5cGVkLmZpbmQoZXF1YWxTY2FsYXIsIFtkdCwgZHRdKTsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTsgLy8gY2FsbGJhY2tcblxuICAgICAgY2YgPSB0eXBlZC5maW5kKGNhbGxiYWNrLCBbZHQsIGR0XSk7XG4gICAgfSAvLyByZXN1bHQgKFNwYXJzZU1hdHJpeClcblxuXG4gICAgdmFyIGN2YWx1ZXMgPSBbXTtcbiAgICB2YXIgY2luZGV4ID0gW107XG4gICAgdmFyIGNwdHIgPSBbXTsgLy8gbG9vcCBjb2x1bW5zIGluIGJcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyB1cGRhdGUgY3B0clxuICAgICAgY3B0cltqXSA9IGNpbmRleC5sZW5ndGg7IC8vIHZhbHVlcyBpbiBjb2x1bW4galxuXG4gICAgICBmb3IgKHZhciBrMCA9IGJwdHJbal0sIGsxID0gYnB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIHZhciBpID0gYmluZGV4W2tdOyAvLyB1cGRhdGUgQyhpLGopXG5cbiAgICAgICAgdmFyIGNpaiA9IGludmVyc2UgPyBjZihidmFsdWVzW2tdLCBhZGF0YVtpXVtqXSkgOiBjZihhZGF0YVtpXVtqXSwgYnZhbHVlc1trXSk7IC8vIGNoZWNrIGZvciBub256ZXJvXG5cbiAgICAgICAgaWYgKCFlcShjaWosIHplcm8pKSB7XG4gICAgICAgICAgLy8gcHVzaCBpICYgdlxuICAgICAgICAgIGNpbmRleC5wdXNoKGkpO1xuICAgICAgICAgIGN2YWx1ZXMucHVzaChjaWopO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyB1cGRhdGUgY3B0clxuXG5cbiAgICBjcHRyW2NvbHVtbnNdID0gY2luZGV4Lmxlbmd0aDsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXhcblxuICAgIHJldHVybiBzcGFyc2VNYXRyaXguY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbcm93cywgY29sdW1uc10sXG4gICAgICBkYXRhdHlwZTogZHRcbiAgICB9KTtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0wMiA9IGNyZWF0ZUFsZ29yaXRobTAyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0wMyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBuYW1lID0gJ2FsZ29yaXRobTAzJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQWxnb3JpdGhtMDMgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyBvdmVyIFNwYXJzZU1hdHJpeCBpdGVtcyBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZihEaWosIFNpaikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTSpOIHRpbWVzLlxuICAgKlxuICAgKlxuICAgKiAgICAgICAgICDilIwgIGYoRGlqLCBTaWopICA7IFMoaSxqKSAhPT0gMFxuICAgKiBDKGksaikgPSDilKRcbiAgICogICAgICAgICAg4pSUICBmKERpaiwgMCkgICAgOyBvdGhlcndpc2VcbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9ICAgZGVuc2VNYXRyaXggICAgICAgVGhlIERlbnNlTWF0cml4IGluc3RhbmNlIChEKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBzcGFyc2VNYXRyaXggICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChDKVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihEaWosU2lqKSBvcGVyYXRpb24gdG8gaW52b2tlLCB3aGVyZSBEaWogPSBEZW5zZU1hdHJpeChpLGopIGFuZCBTaWogPSBTcGFyc2VNYXRyaXgoaSxqKVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBpbnZlcnNlICAgICAgICAgICBBIHRydWUgdmFsdWUgaW5kaWNhdGVzIGNhbGxiYWNrIHNob3VsZCBiZSBpbnZva2VkIGYoU2lqLERpailcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgRGVuc2VNYXRyaXggKEMpXG4gICAqXG4gICAqIHNlZSBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9wdWxsLzM0NiNpc3N1ZWNvbW1lbnQtOTc0Nzc1NzFcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBhbGdvcml0aG0wMyhkZW5zZU1hdHJpeCwgc3BhcnNlTWF0cml4LCBjYWxsYmFjaywgaW52ZXJzZSkge1xuICAgIC8vIGRlbnNlIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgYWRhdGEgPSBkZW5zZU1hdHJpeC5fZGF0YTtcbiAgICB2YXIgYXNpemUgPSBkZW5zZU1hdHJpeC5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gZGVuc2VNYXRyaXguX2RhdGF0eXBlOyAvLyBzcGFyc2UgbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIGJ2YWx1ZXMgPSBzcGFyc2VNYXRyaXguX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gc3BhcnNlTWF0cml4Ll9pbmRleDtcbiAgICB2YXIgYnB0ciA9IHNwYXJzZU1hdHJpeC5fcHRyO1xuICAgIHZhciBic2l6ZSA9IHNwYXJzZU1hdHJpeC5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gc3BhcnNlTWF0cml4Ll9kYXRhdHlwZTsgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG4gICAgaWYgKGFzaXplLmxlbmd0aCAhPT0gYnNpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGFzaXplLmxlbmd0aCwgYnNpemUubGVuZ3RoKTtcbiAgICB9IC8vIGNoZWNrIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIGlmIChhc2l6ZVswXSAhPT0gYnNpemVbMF0gfHwgYXNpemVbMV0gIT09IGJzaXplWzFdKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTtcbiAgICB9IC8vIHNwYXJzZSBtYXRyaXggY2Fubm90IGJlIGEgUGF0dGVybiBtYXRyaXhcblxuXG4gICAgaWYgKCFidmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwZXJmb3JtIG9wZXJhdGlvbiBvbiBEZW5zZSBNYXRyaXggYW5kIFBhdHRlcm4gU3BhcnNlIE1hdHJpeCcpO1xuICAgIH0gLy8gcm93cyAmIGNvbHVtbnNcblxuXG4gICAgdmFyIHJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IGFzaXplWzFdOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBjZiA9IGNhbGxiYWNrOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmICh0eXBlb2YgYWR0ID09PSAnc3RyaW5nJyAmJiBhZHQgPT09IGJkdCkge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZHQpOyAvLyBjYWxsYmFja1xuXG4gICAgICBjZiA9IHR5cGVkLmZpbmQoY2FsbGJhY2ssIFtkdCwgZHRdKTtcbiAgICB9IC8vIHJlc3VsdCAoRGVuc2VNYXRyaXgpXG5cblxuICAgIHZhciBjZGF0YSA9IFtdOyAvLyBpbml0aWFsaXplIGRlbnNlIG1hdHJpeFxuXG4gICAgZm9yICh2YXIgeiA9IDA7IHogPCByb3dzOyB6KyspIHtcbiAgICAgIC8vIGluaXRpYWxpemUgcm93XG4gICAgICBjZGF0YVt6XSA9IFtdO1xuICAgIH0gLy8gd29ya3NwYWNlXG5cblxuICAgIHZhciB4ID0gW107IC8vIG1hcmtzIGluZGljYXRpbmcgd2UgaGF2ZSBhIHZhbHVlIGluIHggZm9yIGEgZ2l2ZW4gY29sdW1uXG5cbiAgICB2YXIgdyA9IFtdOyAvLyBsb29wIGNvbHVtbnMgaW4gYlxuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIGNvbHVtbiBtYXJrXG4gICAgICB2YXIgbWFyayA9IGogKyAxOyAvLyB2YWx1ZXMgaW4gY29sdW1uIGpcblxuICAgICAgZm9yICh2YXIgazAgPSBicHRyW2pdLCBrMSA9IGJwdHJbaiArIDFdLCBrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICB2YXIgaSA9IGJpbmRleFtrXTsgLy8gdXBkYXRlIHdvcmtzcGFjZVxuXG4gICAgICAgIHhbaV0gPSBpbnZlcnNlID8gY2YoYnZhbHVlc1trXSwgYWRhdGFbaV1bal0pIDogY2YoYWRhdGFbaV1bal0sIGJ2YWx1ZXNba10pO1xuICAgICAgICB3W2ldID0gbWFyaztcbiAgICAgIH0gLy8gcHJvY2VzcyB3b3Jrc3BhY2VcblxuXG4gICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IHJvd3M7IHkrKykge1xuICAgICAgICAvLyBjaGVjayB3ZSBoYXZlIGEgY2FsY3VsYXRlZCB2YWx1ZSBmb3IgY3VycmVudCByb3dcbiAgICAgICAgaWYgKHdbeV0gPT09IG1hcmspIHtcbiAgICAgICAgICAvLyB1c2UgY2FsY3VsYXRlZCB2YWx1ZVxuICAgICAgICAgIGNkYXRhW3ldW2pdID0geFt5XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBjYWxjdWxhdGUgdmFsdWVcbiAgICAgICAgICBjZGF0YVt5XVtqXSA9IGludmVyc2UgPyBjZih6ZXJvLCBhZGF0YVt5XVtqXSkgOiBjZihhZGF0YVt5XVtqXSwgemVybyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiBkZW5zZSBtYXRyaXhcblxuXG4gICAgcmV0dXJuIGRlbnNlTWF0cml4LmNyZWF0ZURlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGNkYXRhLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDMgPSBjcmVhdGVBbGdvcml0aG0wMzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDQgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgbmFtZSA9ICdhbGdvcml0aG0wNCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdlcXVhbFNjYWxhciddO1xudmFyIGNyZWF0ZUFsZ29yaXRobTA0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcjtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBTcGFyc2VNYXRyaXggQSBhbmQgU3BhcnNlTWF0cml4IEIgbm9uemVybyBpdGVtcyBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZihBaWosIEJpaikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTUFYKE5OWkEsIE5OWkIpIHRpbWVzXG4gICAqXG4gICAqXG4gICAqICAgICAgICAgIOKUjCAgZihBaWosIEJpaikgIDsgQShpLGopICE9PSAwICYmIEIoaSxqKSAhPT0gMFxuICAgKiBDKGksaikgPSDilKQgIEEoaSxqKSAgICAgICA7IEEoaSxqKSAhPT0gMFxuICAgKiAgICAgICAgICDilJQgIEIoaSxqKSAgICAgICA7IEIoaSxqKSAhPT0gMFxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBhICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChBKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBiICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChCKVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWosQmlqKSBvcGVyYXRpb24gdG8gaW52b2tlXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAoQylcbiAgICpcbiAgICogc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NkZWpvbmcvbWF0aGpzL3B1bGwvMzQ2I2lzc3VlY29tbWVudC05NzYyMDI5NFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTA0KGEsIGIsIGNhbGxiYWNrKSB7XG4gICAgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgYXZhbHVlcyA9IGEuX3ZhbHVlcztcbiAgICB2YXIgYWluZGV4ID0gYS5faW5kZXg7XG4gICAgdmFyIGFwdHIgPSBhLl9wdHI7XG4gICAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgYnZhbHVlcyA9IGIuX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gYi5faW5kZXg7XG4gICAgdmFyIGJwdHIgPSBiLl9wdHI7XG4gICAgdmFyIGJzaXplID0gYi5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnNcblxuICAgIGlmIChhc2l6ZS5sZW5ndGggIT09IGJzaXplLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihhc2l6ZS5sZW5ndGgsIGJzaXplLmxlbmd0aCk7XG4gICAgfSAvLyBjaGVjayByb3dzICYgY29sdW1uc1xuXG5cbiAgICBpZiAoYXNpemVbMF0gIT09IGJzaXplWzBdIHx8IGFzaXplWzFdICE9PSBic2l6ZVsxXSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IEEgKCcgKyBhc2l6ZSArICcpIG11c3QgbWF0Y2ggTWF0cml4IEIgKCcgKyBic2l6ZSArICcpJyk7XG4gICAgfSAvLyByb3dzICYgY29sdW1uc1xuXG5cbiAgICB2YXIgcm93cyA9IGFzaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gYXNpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGVxdWFsIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBjZiA9IGNhbGxiYWNrOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmICh0eXBlb2YgYWR0ID09PSAnc3RyaW5nJyAmJiBhZHQgPT09IGJkdCkge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgZXEgPSB0eXBlZC5maW5kKGVxdWFsU2NhbGFyLCBbZHQsIGR0XSk7IC8vIGNvbnZlcnQgMCB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICB6ZXJvID0gdHlwZWQuY29udmVydCgwLCBkdCk7IC8vIGNhbGxiYWNrXG5cbiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0IGFycmF5c1xuXG5cbiAgICB2YXIgY3ZhbHVlcyA9IGF2YWx1ZXMgJiYgYnZhbHVlcyA/IFtdIDogdW5kZWZpbmVkO1xuICAgIHZhciBjaW5kZXggPSBbXTtcbiAgICB2YXIgY3B0ciA9IFtdOyAvLyB3b3Jrc3BhY2VcblxuICAgIHZhciB4YSA9IGF2YWx1ZXMgJiYgYnZhbHVlcyA/IFtdIDogdW5kZWZpbmVkO1xuICAgIHZhciB4YiA9IGF2YWx1ZXMgJiYgYnZhbHVlcyA/IFtdIDogdW5kZWZpbmVkOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHdlIGhhdmUgYSB2YWx1ZSBpbiB4IGZvciBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHdhID0gW107XG4gICAgdmFyIHdiID0gW107IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrLCBrMCwgazE7IC8vIGxvb3AgY29sdW1uc1xuXG4gICAgZm9yIChqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gdXBkYXRlIGNwdHJcbiAgICAgIGNwdHJbal0gPSBjaW5kZXgubGVuZ3RoOyAvLyBjb2x1bW5zIG1hcmtcblxuICAgICAgdmFyIG1hcmsgPSBqICsgMTsgLy8gbG9vcCBBKDosailcblxuICAgICAgZm9yIChrMCA9IGFwdHJbal0sIGsxID0gYXB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIGkgPSBhaW5kZXhba107IC8vIHVwZGF0ZSBjXG5cbiAgICAgICAgY2luZGV4LnB1c2goaSk7IC8vIHVwZGF0ZSB3b3Jrc3BhY2VcblxuICAgICAgICB3YVtpXSA9IG1hcms7IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyB2YWx1ZXNcblxuICAgICAgICBpZiAoeGEpIHtcbiAgICAgICAgICB4YVtpXSA9IGF2YWx1ZXNba107XG4gICAgICAgIH1cbiAgICAgIH0gLy8gbG9vcCBCKDosailcblxuXG4gICAgICBmb3IgKGswID0gYnB0cltqXSwgazEgPSBicHRyW2ogKyAxXSwgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgICAvLyByb3dcbiAgICAgICAgaSA9IGJpbmRleFtrXTsgLy8gY2hlY2sgcm93IGV4aXN0cyBpbiBBXG5cbiAgICAgICAgaWYgKHdhW2ldID09PSBtYXJrKSB7XG4gICAgICAgICAgLy8gdXBkYXRlIHJlY29yZCBpbiB4YSBAIGlcbiAgICAgICAgICBpZiAoeGEpIHtcbiAgICAgICAgICAgIC8vIGludm9rZSBjYWxsYmFja1xuICAgICAgICAgICAgdmFyIHYgPSBjZih4YVtpXSwgYnZhbHVlc1trXSk7IC8vIGNoZWNrIGZvciB6ZXJvXG5cbiAgICAgICAgICAgIGlmICghZXEodiwgemVybykpIHtcbiAgICAgICAgICAgICAgLy8gdXBkYXRlIHdvcmtzcGFjZVxuICAgICAgICAgICAgICB4YVtpXSA9IHY7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyByZW1vdmUgbWFyayAoaW5kZXggd2lsbCBiZSByZW1vdmVkIGxhdGVyKVxuICAgICAgICAgICAgICB3YVtpXSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHVwZGF0ZSBjXG4gICAgICAgICAgY2luZGV4LnB1c2goaSk7IC8vIHVwZGF0ZSB3b3Jrc3BhY2VcblxuICAgICAgICAgIHdiW2ldID0gbWFyazsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlc1xuXG4gICAgICAgICAgaWYgKHhiKSB7XG4gICAgICAgICAgICB4YltpXSA9IGJ2YWx1ZXNba107XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyB2YWx1ZXMgKG5vbiBwYXR0ZXJuIG1hdHJpeClcblxuXG4gICAgICBpZiAoeGEgJiYgeGIpIHtcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBmaXJzdCBpbmRleCBpbiBqXG4gICAgICAgIGsgPSBjcHRyW2pdOyAvLyBsb29wIGluZGV4IGluIGpcblxuICAgICAgICB3aGlsZSAoayA8IGNpbmRleC5sZW5ndGgpIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICBpID0gY2luZGV4W2tdOyAvLyBjaGVjayB3b3Jrc3BhY2UgaGFzIHZhbHVlIEAgaVxuXG4gICAgICAgICAgaWYgKHdhW2ldID09PSBtYXJrKSB7XG4gICAgICAgICAgICAvLyBwdXNoIHZhbHVlIChBaWogIT0gMCB8fCAoQWlqICE9IDAgJiYgQmlqICE9IDApKVxuICAgICAgICAgICAgY3ZhbHVlc1trXSA9IHhhW2ldOyAvLyBpbmNyZW1lbnQgcG9pbnRlclxuXG4gICAgICAgICAgICBrKys7XG4gICAgICAgICAgfSBlbHNlIGlmICh3YltpXSA9PT0gbWFyaykge1xuICAgICAgICAgICAgLy8gcHVzaCB2YWx1ZSAoYmlqICE9IDApXG4gICAgICAgICAgICBjdmFsdWVzW2tdID0geGJbaV07IC8vIGluY3JlbWVudCBwb2ludGVyXG5cbiAgICAgICAgICAgIGsrKztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gcmVtb3ZlIGluZGV4IEAga1xuICAgICAgICAgICAgY2luZGV4LnNwbGljZShrLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHVwZGF0ZSBjcHRyXG5cblxuICAgIGNwdHJbY29sdW1uc10gPSBjaW5kZXgubGVuZ3RoOyAvLyByZXR1cm4gc3BhcnNlIG1hdHJpeFxuXG4gICAgcmV0dXJuIGEuY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbcm93cywgY29sdW1uc10sXG4gICAgICBkYXRhdHlwZTogZHRcbiAgICB9KTtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0wNCA9IGNyZWF0ZUFsZ29yaXRobTA0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0wNSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBuYW1lID0gJ2FsZ29yaXRobTA1JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2VxdWFsU2NhbGFyJ107XG52YXIgY3JlYXRlQWxnb3JpdGhtMDUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyO1xuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyBvdmVyIFNwYXJzZU1hdHJpeCBBIGFuZCBTcGFyc2VNYXRyaXggQiBub256ZXJvIGl0ZW1zIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKEFpaiwgQmlqKS5cbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBNQVgoTk5aQSwgTk5aQikgdGltZXNcbiAgICpcbiAgICpcbiAgICogICAgICAgICAg4pSMICBmKEFpaiwgQmlqKSAgOyBBKGksaikgIT09IDAgfHwgQihpLGopICE9PSAwXG4gICAqIEMoaSxqKSA9IOKUpFxuICAgKiAgICAgICAgICDilJQgIDAgICAgICAgICAgICA7IG90aGVyd2lzZVxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBhICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChBKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBiICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChCKVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWosQmlqKSBvcGVyYXRpb24gdG8gaW52b2tlXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAoQylcbiAgICpcbiAgICogc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NkZWpvbmcvbWF0aGpzL3B1bGwvMzQ2I2lzc3VlY29tbWVudC05NzYyMDI5NFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTA1KGEsIGIsIGNhbGxiYWNrKSB7XG4gICAgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgYXZhbHVlcyA9IGEuX3ZhbHVlcztcbiAgICB2YXIgYWluZGV4ID0gYS5faW5kZXg7XG4gICAgdmFyIGFwdHIgPSBhLl9wdHI7XG4gICAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgYnZhbHVlcyA9IGIuX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gYi5faW5kZXg7XG4gICAgdmFyIGJwdHIgPSBiLl9wdHI7XG4gICAgdmFyIGJzaXplID0gYi5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnNcblxuICAgIGlmIChhc2l6ZS5sZW5ndGggIT09IGJzaXplLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihhc2l6ZS5sZW5ndGgsIGJzaXplLmxlbmd0aCk7XG4gICAgfSAvLyBjaGVjayByb3dzICYgY29sdW1uc1xuXG5cbiAgICBpZiAoYXNpemVbMF0gIT09IGJzaXplWzBdIHx8IGFzaXplWzFdICE9PSBic2l6ZVsxXSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IEEgKCcgKyBhc2l6ZSArICcpIG11c3QgbWF0Y2ggTWF0cml4IEIgKCcgKyBic2l6ZSArICcpJyk7XG4gICAgfSAvLyByb3dzICYgY29sdW1uc1xuXG5cbiAgICB2YXIgcm93cyA9IGFzaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gYXNpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGVxdWFsIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBjZiA9IGNhbGxiYWNrOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmICh0eXBlb2YgYWR0ID09PSAnc3RyaW5nJyAmJiBhZHQgPT09IGJkdCkge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgZXEgPSB0eXBlZC5maW5kKGVxdWFsU2NhbGFyLCBbZHQsIGR0XSk7IC8vIGNvbnZlcnQgMCB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICB6ZXJvID0gdHlwZWQuY29udmVydCgwLCBkdCk7IC8vIGNhbGxiYWNrXG5cbiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0IGFycmF5c1xuXG5cbiAgICB2YXIgY3ZhbHVlcyA9IGF2YWx1ZXMgJiYgYnZhbHVlcyA/IFtdIDogdW5kZWZpbmVkO1xuICAgIHZhciBjaW5kZXggPSBbXTtcbiAgICB2YXIgY3B0ciA9IFtdOyAvLyB3b3Jrc3BhY2VzXG5cbiAgICB2YXIgeGEgPSBjdmFsdWVzID8gW10gOiB1bmRlZmluZWQ7XG4gICAgdmFyIHhiID0gY3ZhbHVlcyA/IFtdIDogdW5kZWZpbmVkOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHdlIGhhdmUgYSB2YWx1ZSBpbiB4IGZvciBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHdhID0gW107XG4gICAgdmFyIHdiID0gW107IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrLCBrMTsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyB1cGRhdGUgY3B0clxuICAgICAgY3B0cltqXSA9IGNpbmRleC5sZW5ndGg7IC8vIGNvbHVtbnMgbWFya1xuXG4gICAgICB2YXIgbWFyayA9IGogKyAxOyAvLyBsb29wIHZhbHVlcyBBKDosailcblxuICAgICAgZm9yIChrID0gYXB0cltqXSwgazEgPSBhcHRyW2ogKyAxXTsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIGkgPSBhaW5kZXhba107IC8vIHB1c2ggaW5kZXhcblxuICAgICAgICBjaW5kZXgucHVzaChpKTsgLy8gdXBkYXRlIHdvcmtzcGFjZVxuXG4gICAgICAgIHdhW2ldID0gbWFyazsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlc1xuXG4gICAgICAgIGlmICh4YSkge1xuICAgICAgICAgIHhhW2ldID0gYXZhbHVlc1trXTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBsb29wIHZhbHVlcyBCKDosailcblxuXG4gICAgICBmb3IgKGsgPSBicHRyW2pdLCBrMSA9IGJwdHJbaiArIDFdOyBrIDwgazE7IGsrKykge1xuICAgICAgICAvLyByb3dcbiAgICAgICAgaSA9IGJpbmRleFtrXTsgLy8gY2hlY2sgcm93IGV4aXN0ZWQgaW4gQVxuXG4gICAgICAgIGlmICh3YVtpXSAhPT0gbWFyaykge1xuICAgICAgICAgIC8vIHB1c2ggaW5kZXhcbiAgICAgICAgICBjaW5kZXgucHVzaChpKTtcbiAgICAgICAgfSAvLyB1cGRhdGUgd29ya3NwYWNlXG5cblxuICAgICAgICB3YltpXSA9IG1hcms7IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyB2YWx1ZXNcblxuICAgICAgICBpZiAoeGIpIHtcbiAgICAgICAgICB4YltpXSA9IGJ2YWx1ZXNba107XG4gICAgICAgIH1cbiAgICAgIH0gLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlcyAobm9uIHBhdHRlcm4gbWF0cml4KVxuXG5cbiAgICAgIGlmIChjdmFsdWVzKSB7XG4gICAgICAgIC8vIGluaXRpYWxpemUgZmlyc3QgaW5kZXggaW4galxuICAgICAgICBrID0gY3B0cltqXTsgLy8gbG9vcCBpbmRleCBpbiBqXG5cbiAgICAgICAgd2hpbGUgKGsgPCBjaW5kZXgubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gcm93XG4gICAgICAgICAgaSA9IGNpbmRleFtrXTsgLy8gbWFya3NcblxuICAgICAgICAgIHZhciB3YWkgPSB3YVtpXTtcbiAgICAgICAgICB2YXIgd2JpID0gd2JbaV07IC8vIGNoZWNrIEFpaiBvciBCaWogYXJlIG5vbnplcm9cblxuICAgICAgICAgIGlmICh3YWkgPT09IG1hcmsgfHwgd2JpID09PSBtYXJrKSB7XG4gICAgICAgICAgICAvLyBtYXRyaXggdmFsdWVzIEAgaSxqXG4gICAgICAgICAgICB2YXIgdmEgPSB3YWkgPT09IG1hcmsgPyB4YVtpXSA6IHplcm87XG4gICAgICAgICAgICB2YXIgdmIgPSB3YmkgPT09IG1hcmsgPyB4YltpXSA6IHplcm87IC8vIENpalxuXG4gICAgICAgICAgICB2YXIgdmMgPSBjZih2YSwgdmIpOyAvLyBjaGVjayBmb3IgemVyb1xuXG4gICAgICAgICAgICBpZiAoIWVxKHZjLCB6ZXJvKSkge1xuICAgICAgICAgICAgICAvLyBwdXNoIHZhbHVlXG4gICAgICAgICAgICAgIGN2YWx1ZXMucHVzaCh2Yyk7IC8vIGluY3JlbWVudCBwb2ludGVyXG5cbiAgICAgICAgICAgICAgaysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gcmVtb3ZlIHZhbHVlIEAgaSwgZG8gbm90IGluY3JlbWVudCBwb2ludGVyXG4gICAgICAgICAgICAgIGNpbmRleC5zcGxpY2UoaywgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyB1cGRhdGUgY3B0clxuXG5cbiAgICBjcHRyW2NvbHVtbnNdID0gY2luZGV4Lmxlbmd0aDsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXhcblxuICAgIHJldHVybiBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IGN2YWx1ZXMsXG4gICAgICBpbmRleDogY2luZGV4LFxuICAgICAgcHRyOiBjcHRyLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDUgPSBjcmVhdGVBbGdvcml0aG0wNTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDYgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAnYWxnb3JpdGhtMDYnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnZXF1YWxTY2FsYXInXTtcbnZhciBjcmVhdGVBbGdvcml0aG0wNiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXI7XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIG92ZXIgU3BhcnNlTWF0cml4IEEgYW5kIFNwYXJzZU1hdHJpeCBCIG5vbnplcm8gaXRlbXMgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoQWlqLCBCaWopLlxuICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIChBbnogVSBCbnopIHRpbWVzLCB3aGVyZSBBbnogYW5kIEJueiBhcmUgdGhlIG5vbnplcm8gZWxlbWVudHMgaW4gYm90aCBtYXRyaWNlcy5cbiAgICpcbiAgICpcbiAgICogICAgICAgICAg4pSMICBmKEFpaiwgQmlqKSAgOyBBKGksaikgIT09IDAgJiYgQihpLGopICE9PSAwXG4gICAqIEMoaSxqKSA9IOKUpFxuICAgKiAgICAgICAgICDilJQgIDAgICAgICAgICAgICA7IG90aGVyd2lzZVxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBhICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChBKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBiICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChCKVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWosQmlqKSBvcGVyYXRpb24gdG8gaW52b2tlXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAoQylcbiAgICpcbiAgICogc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NkZWpvbmcvbWF0aGpzL3B1bGwvMzQ2I2lzc3VlY29tbWVudC05NzYyMDI5NFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTA2KGEsIGIsIGNhbGxiYWNrKSB7XG4gICAgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgYXZhbHVlcyA9IGEuX3ZhbHVlcztcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcblxuICAgIHZhciBidmFsdWVzID0gYi5fdmFsdWVzO1xuICAgIHZhciBic2l6ZSA9IGIuX3NpemU7XG4gICAgdmFyIGJkdCA9IGIuX2RhdGF0eXBlOyAvLyB2YWxpZGF0ZSBkaW1lbnNpb25zXG5cbiAgICBpZiAoYXNpemUubGVuZ3RoICE9PSBic2l6ZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoYXNpemUubGVuZ3RoLCBic2l6ZS5sZW5ndGgpO1xuICAgIH0gLy8gY2hlY2sgcm93cyAmIGNvbHVtbnNcblxuXG4gICAgaWYgKGFzaXplWzBdICE9PSBic2l6ZVswXSB8fCBhc2l6ZVsxXSAhPT0gYnNpemVbMV0pIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBBICgnICsgYXNpemUgKyAnKSBtdXN0IG1hdGNoIE1hdHJpeCBCICgnICsgYnNpemUgKyAnKScpO1xuICAgIH0gLy8gcm93cyAmIGNvbHVtbnNcblxuXG4gICAgdmFyIHJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IGFzaXplWzFdOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwOyAvLyBjYWxsYmFjayBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAodHlwZW9mIGFkdCA9PT0gJ3N0cmluZycgJiYgYWR0ID09PSBiZHQpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gZmluZCBzaWduYXR1cmUgdGhhdCBtYXRjaGVzIChkdCwgZHQpXG5cbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZHQpOyAvLyBjYWxsYmFja1xuXG4gICAgICBjZiA9IHR5cGVkLmZpbmQoY2FsbGJhY2ssIFtkdCwgZHRdKTtcbiAgICB9IC8vIHJlc3VsdCBhcnJheXNcblxuXG4gICAgdmFyIGN2YWx1ZXMgPSBhdmFsdWVzICYmIGJ2YWx1ZXMgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgY2luZGV4ID0gW107XG4gICAgdmFyIGNwdHIgPSBbXTsgLy8gd29ya3NwYWNlc1xuXG4gICAgdmFyIHggPSBjdmFsdWVzID8gW10gOiB1bmRlZmluZWQ7IC8vIG1hcmtzIGluZGljYXRpbmcgd2UgaGF2ZSBhIHZhbHVlIGluIHggZm9yIGEgZ2l2ZW4gY29sdW1uXG5cbiAgICB2YXIgdyA9IFtdOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHZhbHVlIGluIGEgZ2l2ZW4gcm93IGhhcyBiZWVuIHVwZGF0ZWRcblxuICAgIHZhciB1ID0gW107IC8vIGxvb3AgY29sdW1uc1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIHVwZGF0ZSBjcHRyXG4gICAgICBjcHRyW2pdID0gY2luZGV4Lmxlbmd0aDsgLy8gY29sdW1ucyBtYXJrXG5cbiAgICAgIHZhciBtYXJrID0gaiArIDE7IC8vIHNjYXR0ZXIgdGhlIHZhbHVlcyBvZiBBKDosaikgaW50byB3b3Jrc3BhY2VcblxuICAgICAgKDAsIF9jb2xsZWN0aW9uLnNjYXR0ZXIpKGEsIGosIHcsIHgsIHUsIG1hcmssIGNpbmRleCwgY2YpOyAvLyBzY2F0dGVyIHRoZSB2YWx1ZXMgb2YgQig6LGopIGludG8gd29ya3NwYWNlXG5cbiAgICAgICgwLCBfY29sbGVjdGlvbi5zY2F0dGVyKShiLCBqLCB3LCB4LCB1LCBtYXJrLCBjaW5kZXgsIGNmKTsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlcyAobm9uIHBhdHRlcm4gbWF0cml4KVxuXG4gICAgICBpZiAoeCkge1xuICAgICAgICAvLyBpbml0aWFsaXplIGZpcnN0IGluZGV4IGluIGpcbiAgICAgICAgdmFyIGsgPSBjcHRyW2pdOyAvLyBsb29wIGluZGV4IGluIGpcblxuICAgICAgICB3aGlsZSAoayA8IGNpbmRleC5sZW5ndGgpIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICB2YXIgaSA9IGNpbmRleFtrXTsgLy8gY2hlY2sgZnVuY3Rpb24gd2FzIGludm9rZWQgb24gY3VycmVudCByb3cgKEFpaiAhPTAgJiYgQmlqICE9IDApXG5cbiAgICAgICAgICBpZiAodVtpXSA9PT0gbWFyaykge1xuICAgICAgICAgICAgLy8gdmFsdWUgQCBpXG4gICAgICAgICAgICB2YXIgdiA9IHhbaV07IC8vIGNoZWNrIGZvciB6ZXJvIHZhbHVlXG5cbiAgICAgICAgICAgIGlmICghZXEodiwgemVybykpIHtcbiAgICAgICAgICAgICAgLy8gcHVzaCB2YWx1ZVxuICAgICAgICAgICAgICBjdmFsdWVzLnB1c2godik7IC8vIGluY3JlbWVudCBwb2ludGVyXG5cbiAgICAgICAgICAgICAgaysrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gcmVtb3ZlIHZhbHVlIEAgaSwgZG8gbm90IGluY3JlbWVudCBwb2ludGVyXG4gICAgICAgICAgICAgIGNpbmRleC5zcGxpY2UoaywgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSB2YWx1ZSBAIGksIGRvIG5vdCBpbmNyZW1lbnQgcG9pbnRlclxuICAgICAgICAgICAgY2luZGV4LnNwbGljZShrLCAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGluaXRpYWxpemUgZmlyc3QgaW5kZXggaW4galxuICAgICAgICB2YXIgcCA9IGNwdHJbal07IC8vIGxvb3AgaW5kZXggaW4galxuXG4gICAgICAgIHdoaWxlIChwIDwgY2luZGV4Lmxlbmd0aCkge1xuICAgICAgICAgIC8vIHJvd1xuICAgICAgICAgIHZhciByID0gY2luZGV4W3BdOyAvLyBjaGVjayBmdW5jdGlvbiB3YXMgaW52b2tlZCBvbiBjdXJyZW50IHJvdyAoQWlqICE9MCAmJiBCaWogIT0gMClcblxuICAgICAgICAgIGlmICh1W3JdICE9PSBtYXJrKSB7XG4gICAgICAgICAgICAvLyByZW1vdmUgdmFsdWUgQCBpLCBkbyBub3QgaW5jcmVtZW50IHBvaW50ZXJcbiAgICAgICAgICAgIGNpbmRleC5zcGxpY2UocCwgMSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGluY3JlbWVudCBwb2ludGVyXG4gICAgICAgICAgICBwKys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyB1cGRhdGUgY3B0clxuXG5cbiAgICBjcHRyW2NvbHVtbnNdID0gY2luZGV4Lmxlbmd0aDsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXhcblxuICAgIHJldHVybiBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IGN2YWx1ZXMsXG4gICAgICBpbmRleDogY2luZGV4LFxuICAgICAgcHRyOiBjcHRyLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDYgPSBjcmVhdGVBbGdvcml0aG0wNjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDcgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgbmFtZSA9ICdhbGdvcml0aG0wNyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZUFsZ29yaXRobTA3ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBTcGFyc2VNYXRyaXggQSBhbmQgU3BhcnNlTWF0cml4IEIgaXRlbXMgKHplcm8gYW5kIG5vbnplcm8pIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKEFpaiwgQmlqKS5cbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBNeE4gdGltZXMuXG4gICAqXG4gICAqIEMoaSxqKSA9IGYoQWlqLCBCaWopXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEEpXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGIgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEIpXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgICAgIFRoZSBmKEFpaixCaWopIG9wZXJhdGlvbiB0byBpbnZva2VcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgRGVuc2VNYXRyaXggKEMpXG4gICAqXG4gICAqIHNlZSBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9wdWxsLzM0NiNpc3N1ZWNvbW1lbnQtOTc2MjAyOTRcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBhbGdvcml0aG0wNyhhLCBiLCBjYWxsYmFjaykge1xuICAgIC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG4gICAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgYnNpemUgPSBiLl9zaXplO1xuICAgIHZhciBiZHQgPSBiLl9kYXRhdHlwZTsgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG4gICAgaWYgKGFzaXplLmxlbmd0aCAhPT0gYnNpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGFzaXplLmxlbmd0aCwgYnNpemUubGVuZ3RoKTtcbiAgICB9IC8vIGNoZWNrIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIGlmIChhc2l6ZVswXSAhPT0gYnNpemVbMF0gfHwgYXNpemVbMV0gIT09IGJzaXplWzFdKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTtcbiAgICB9IC8vIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIHZhciByb3dzID0gYXNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBhc2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwOyAvLyBjYWxsYmFjayBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAodHlwZW9mIGFkdCA9PT0gJ3N0cmluZycgJiYgYWR0ID09PSBiZHQpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTsgLy8gY2FsbGJhY2tcblxuICAgICAgY2YgPSB0eXBlZC5maW5kKGNhbGxiYWNrLCBbZHQsIGR0XSk7XG4gICAgfSAvLyB2YXJzXG5cblxuICAgIHZhciBpLCBqOyAvLyByZXN1bHQgYXJyYXlzXG5cbiAgICB2YXIgY2RhdGEgPSBbXTsgLy8gaW5pdGlhbGl6ZSBjXG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBjZGF0YVtpXSA9IFtdO1xuICAgIH0gLy8gd29ya3NwYWNlc1xuXG5cbiAgICB2YXIgeGEgPSBbXTtcbiAgICB2YXIgeGIgPSBbXTsgLy8gbWFya3MgaW5kaWNhdGluZyB3ZSBoYXZlIGEgdmFsdWUgaW4geCBmb3IgYSBnaXZlbiBjb2x1bW5cblxuICAgIHZhciB3YSA9IFtdO1xuICAgIHZhciB3YiA9IFtdOyAvLyBsb29wIGNvbHVtbnNcblxuICAgIGZvciAoaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIGNvbHVtbnMgbWFya1xuICAgICAgdmFyIG1hcmsgPSBqICsgMTsgLy8gc2NhdHRlciB0aGUgdmFsdWVzIG9mIEEoOixqKSBpbnRvIHdvcmtzcGFjZVxuXG4gICAgICBfc2NhdHRlcihhLCBqLCB3YSwgeGEsIG1hcmspOyAvLyBzY2F0dGVyIHRoZSB2YWx1ZXMgb2YgQig6LGopIGludG8gd29ya3NwYWNlXG5cblxuICAgICAgX3NjYXR0ZXIoYiwgaiwgd2IsIHhiLCBtYXJrKTsgLy8gbG9vcCByb3dzXG5cblxuICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAvLyBtYXRyaXggdmFsdWVzIEAgaSxqXG4gICAgICAgIHZhciB2YSA9IHdhW2ldID09PSBtYXJrID8geGFbaV0gOiB6ZXJvO1xuICAgICAgICB2YXIgdmIgPSB3YltpXSA9PT0gbWFyayA/IHhiW2ldIDogemVybzsgLy8gaW52b2tlIGNhbGxiYWNrXG5cbiAgICAgICAgY2RhdGFbaV1bal0gPSBjZih2YSwgdmIpO1xuICAgICAgfVxuICAgIH0gLy8gcmV0dXJuIGRlbnNlIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGNkYXRhLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gX3NjYXR0ZXIobSwgaiwgdywgeCwgbWFyaykge1xuICAgIC8vIGEgYXJyYXlzXG4gICAgdmFyIHZhbHVlcyA9IG0uX3ZhbHVlcztcbiAgICB2YXIgaW5kZXggPSBtLl9pbmRleDtcbiAgICB2YXIgcHRyID0gbS5fcHRyOyAvLyBsb29wIHZhbHVlcyBpbiBjb2x1bW4galxuXG4gICAgZm9yICh2YXIgayA9IHB0cltqXSwgazEgPSBwdHJbaiArIDFdOyBrIDwgazE7IGsrKykge1xuICAgICAgLy8gcm93XG4gICAgICB2YXIgaSA9IGluZGV4W2tdOyAvLyB1cGRhdGUgd29ya3NwYWNlXG5cbiAgICAgIHdbaV0gPSBtYXJrO1xuICAgICAgeFtpXSA9IHZhbHVlc1trXTtcbiAgICB9XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0wNyA9IGNyZWF0ZUFsZ29yaXRobTA3OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0wOCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBuYW1lID0gJ2FsZ29yaXRobTA4JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2VxdWFsU2NhbGFyJ107XG52YXIgY3JlYXRlQWxnb3JpdGhtMDggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyO1xuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyBvdmVyIFNwYXJzZU1hdHJpeCBBIGFuZCBTcGFyc2VNYXRyaXggQiBub256ZXJvIGl0ZW1zIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKEFpaiwgQmlqKS5cbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBNQVgoTk5aQSwgTk5aQikgdGltZXNcbiAgICpcbiAgICpcbiAgICogICAgICAgICAg4pSMICBmKEFpaiwgQmlqKSAgOyBBKGksaikgIT09IDAgJiYgQihpLGopICE9PSAwXG4gICAqIEMoaSxqKSA9IOKUpCAgQShpLGopICAgICAgIDsgQShpLGopICE9PSAwXG4gICAqICAgICAgICAgIOKUlCAgMCAgICAgICAgICAgIDsgb3RoZXJ3aXNlXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEEpXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGIgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEIpXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgICAgIFRoZSBmKEFpaixCaWopIG9wZXJhdGlvbiB0byBpbnZva2VcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgU3BhcnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NjIwMjk0XG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gYWxnb3JpdGhtMDgoYSwgYiwgY2FsbGJhY2spIHtcbiAgICAvLyBzcGFyc2UgbWF0cml4IGFycmF5c1xuICAgIHZhciBhdmFsdWVzID0gYS5fdmFsdWVzO1xuICAgIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgICB2YXIgYXB0ciA9IGEuX3B0cjtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcblxuICAgIHZhciBidmFsdWVzID0gYi5fdmFsdWVzO1xuICAgIHZhciBiaW5kZXggPSBiLl9pbmRleDtcbiAgICB2YXIgYnB0ciA9IGIuX3B0cjtcbiAgICB2YXIgYnNpemUgPSBiLl9zaXplO1xuICAgIHZhciBiZHQgPSBiLl9kYXRhdHlwZTsgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG4gICAgaWYgKGFzaXplLmxlbmd0aCAhPT0gYnNpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGFzaXplLmxlbmd0aCwgYnNpemUubGVuZ3RoKTtcbiAgICB9IC8vIGNoZWNrIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIGlmIChhc2l6ZVswXSAhPT0gYnNpemVbMF0gfHwgYXNpemVbMV0gIT09IGJzaXplWzFdKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTtcbiAgICB9IC8vIHNwYXJzZSBtYXRyaXggY2Fubm90IGJlIGEgUGF0dGVybiBtYXRyaXhcblxuXG4gICAgaWYgKCFhdmFsdWVzIHx8ICFidmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwZXJmb3JtIG9wZXJhdGlvbiBvbiBQYXR0ZXJuIFNwYXJzZSBNYXRyaWNlcycpO1xuICAgIH0gLy8gcm93cyAmIGNvbHVtbnNcblxuXG4gICAgdmFyIHJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IGFzaXplWzFdOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwOyAvLyBjYWxsYmFjayBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAodHlwZW9mIGFkdCA9PT0gJ3N0cmluZycgJiYgYWR0ID09PSBiZHQpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gZmluZCBzaWduYXR1cmUgdGhhdCBtYXRjaGVzIChkdCwgZHQpXG5cbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZHQpOyAvLyBjYWxsYmFja1xuXG4gICAgICBjZiA9IHR5cGVkLmZpbmQoY2FsbGJhY2ssIFtkdCwgZHRdKTtcbiAgICB9IC8vIHJlc3VsdCBhcnJheXNcblxuXG4gICAgdmFyIGN2YWx1ZXMgPSBbXTtcbiAgICB2YXIgY2luZGV4ID0gW107XG4gICAgdmFyIGNwdHIgPSBbXTsgLy8gd29ya3NwYWNlXG5cbiAgICB2YXIgeCA9IFtdOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHdlIGhhdmUgYSB2YWx1ZSBpbiB4IGZvciBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHcgPSBbXTsgLy8gdmFyc1xuXG4gICAgdmFyIGssIGswLCBrMSwgaTsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gdXBkYXRlIGNwdHJcbiAgICAgIGNwdHJbal0gPSBjaW5kZXgubGVuZ3RoOyAvLyBjb2x1bW5zIG1hcmtcblxuICAgICAgdmFyIG1hcmsgPSBqICsgMTsgLy8gbG9vcCB2YWx1ZXMgaW4gYVxuXG4gICAgICBmb3IgKGswID0gYXB0cltqXSwgazEgPSBhcHRyW2ogKyAxXSwgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgICAvLyByb3dcbiAgICAgICAgaSA9IGFpbmRleFtrXTsgLy8gbWFyayB3b3Jrc3BhY2VcblxuICAgICAgICB3W2ldID0gbWFyazsgLy8gc2V0IHZhbHVlXG5cbiAgICAgICAgeFtpXSA9IGF2YWx1ZXNba107IC8vIGFkZCBpbmRleFxuXG4gICAgICAgIGNpbmRleC5wdXNoKGkpO1xuICAgICAgfSAvLyBsb29wIHZhbHVlcyBpbiBiXG5cblxuICAgICAgZm9yIChrMCA9IGJwdHJbal0sIGsxID0gYnB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIGkgPSBiaW5kZXhba107IC8vIGNoZWNrIHZhbHVlIGV4aXN0cyBpbiB3b3Jrc3BhY2VcblxuICAgICAgICBpZiAod1tpXSA9PT0gbWFyaykge1xuICAgICAgICAgIC8vIGV2YWx1YXRlIGNhbGxiYWNrXG4gICAgICAgICAgeFtpXSA9IGNmKHhbaV0sIGJ2YWx1ZXNba10pO1xuICAgICAgICB9XG4gICAgICB9IC8vIGluaXRpYWxpemUgZmlyc3QgaW5kZXggaW4galxuXG5cbiAgICAgIGsgPSBjcHRyW2pdOyAvLyBsb29wIGluZGV4IGluIGpcblxuICAgICAgd2hpbGUgKGsgPCBjaW5kZXgubGVuZ3RoKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICBpID0gY2luZGV4W2tdOyAvLyB2YWx1ZSBAIGlcblxuICAgICAgICB2YXIgdiA9IHhbaV07IC8vIGNoZWNrIGZvciB6ZXJvIHZhbHVlXG5cbiAgICAgICAgaWYgKCFlcSh2LCB6ZXJvKSkge1xuICAgICAgICAgIC8vIHB1c2ggdmFsdWVcbiAgICAgICAgICBjdmFsdWVzLnB1c2godik7IC8vIGluY3JlbWVudCBwb2ludGVyXG5cbiAgICAgICAgICBrKys7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gcmVtb3ZlIHZhbHVlIEAgaSwgZG8gbm90IGluY3JlbWVudCBwb2ludGVyXG4gICAgICAgICAgY2luZGV4LnNwbGljZShrLCAxKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gdXBkYXRlIGNwdHJcblxuXG4gICAgY3B0cltjb2x1bW5zXSA9IGNpbmRleC5sZW5ndGg7IC8vIHJldHVybiBzcGFyc2UgbWF0cml4XG5cbiAgICByZXR1cm4gYS5jcmVhdGVTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiBjdmFsdWVzLFxuICAgICAgaW5kZXg6IGNpbmRleCxcbiAgICAgIHB0cjogY3B0cixcbiAgICAgIHNpemU6IFtyb3dzLCBjb2x1bW5zXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pO1xuICB9O1xufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTA4ID0gY3JlYXRlQWxnb3JpdGhtMDg7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTA5ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9EaW1lbnNpb25FcnJvciA9IHJlcXVpcmUoXCIuLi8uLi8uLi9lcnJvci9EaW1lbnNpb25FcnJvclwiKTtcblxudmFyIG5hbWUgPSAnYWxnb3JpdGhtMDknO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnZXF1YWxTY2FsYXInXTtcbnZhciBjcmVhdGVBbGdvcml0aG0wOSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXI7XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIG92ZXIgU3BhcnNlTWF0cml4IEEgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoQWlqLCBCaWopLlxuICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIE5aQSB0aW1lcywgbnVtYmVyIG9mIG5vbnplcm8gZWxlbWVudHMgaW4gQS5cbiAgICpcbiAgICpcbiAgICogICAgICAgICAg4pSMICBmKEFpaiwgQmlqKSAgOyBBKGksaikgIT09IDBcbiAgICogQyhpLGopID0g4pSkXG4gICAqICAgICAgICAgIOKUlCAgMCAgICAgICAgICAgIDsgb3RoZXJ3aXNlXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEEpXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGIgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKEIpXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgICAgIFRoZSBmKEFpaixCaWopIG9wZXJhdGlvbiB0byBpbnZva2VcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgU3BhcnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NjIwMjk0XG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gYWxnb3JpdGhtMDkoYSwgYiwgY2FsbGJhY2spIHtcbiAgICAvLyBzcGFyc2UgbWF0cml4IGFycmF5c1xuICAgIHZhciBhdmFsdWVzID0gYS5fdmFsdWVzO1xuICAgIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgICB2YXIgYXB0ciA9IGEuX3B0cjtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcblxuICAgIHZhciBidmFsdWVzID0gYi5fdmFsdWVzO1xuICAgIHZhciBiaW5kZXggPSBiLl9pbmRleDtcbiAgICB2YXIgYnB0ciA9IGIuX3B0cjtcbiAgICB2YXIgYnNpemUgPSBiLl9zaXplO1xuICAgIHZhciBiZHQgPSBiLl9kYXRhdHlwZTsgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG4gICAgaWYgKGFzaXplLmxlbmd0aCAhPT0gYnNpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGFzaXplLmxlbmd0aCwgYnNpemUubGVuZ3RoKTtcbiAgICB9IC8vIGNoZWNrIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIGlmIChhc2l6ZVswXSAhPT0gYnNpemVbMF0gfHwgYXNpemVbMV0gIT09IGJzaXplWzFdKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTtcbiAgICB9IC8vIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIHZhciByb3dzID0gYXNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBhc2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gZXF1YWwgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGVxID0gZXF1YWxTY2FsYXI7IC8vIHplcm8gdmFsdWVcblxuICAgIHZhciB6ZXJvID0gMDsgLy8gY2FsbGJhY2sgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGNmID0gY2FsbGJhY2s7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnICYmIGFkdCA9PT0gYmR0KSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlIHRoYXQgbWF0Y2hlcyAoZHQsIGR0KVxuXG4gICAgICBlcSA9IHR5cGVkLmZpbmQoZXF1YWxTY2FsYXIsIFtkdCwgZHRdKTsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTsgLy8gY2FsbGJhY2tcblxuICAgICAgY2YgPSB0eXBlZC5maW5kKGNhbGxiYWNrLCBbZHQsIGR0XSk7XG4gICAgfSAvLyByZXN1bHQgYXJyYXlzXG5cblxuICAgIHZhciBjdmFsdWVzID0gYXZhbHVlcyAmJiBidmFsdWVzID8gW10gOiB1bmRlZmluZWQ7XG4gICAgdmFyIGNpbmRleCA9IFtdO1xuICAgIHZhciBjcHRyID0gW107IC8vIHdvcmtzcGFjZXNcblxuICAgIHZhciB4ID0gY3ZhbHVlcyA/IFtdIDogdW5kZWZpbmVkOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHdlIGhhdmUgYSB2YWx1ZSBpbiB4IGZvciBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHcgPSBbXTsgLy8gdmFyc1xuXG4gICAgdmFyIGksIGosIGssIGswLCBrMTsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyB1cGRhdGUgY3B0clxuICAgICAgY3B0cltqXSA9IGNpbmRleC5sZW5ndGg7IC8vIGNvbHVtbiBtYXJrXG5cbiAgICAgIHZhciBtYXJrID0gaiArIDE7IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyB2YWx1ZXNcblxuICAgICAgaWYgKHgpIHtcbiAgICAgICAgLy8gbG9vcCBCKDosailcbiAgICAgICAgZm9yIChrMCA9IGJwdHJbal0sIGsxID0gYnB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICBpID0gYmluZGV4W2tdOyAvLyB1cGRhdGUgd29ya3NwYWNlXG5cbiAgICAgICAgICB3W2ldID0gbWFyaztcbiAgICAgICAgICB4W2ldID0gYnZhbHVlc1trXTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBsb29wIEEoOixqKVxuXG5cbiAgICAgIGZvciAoazAgPSBhcHRyW2pdLCBrMSA9IGFwdHJbaiArIDFdLCBrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICBpID0gYWluZGV4W2tdOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzXG5cbiAgICAgICAgaWYgKHgpIHtcbiAgICAgICAgICAvLyBiIHZhbHVlIEAgaSxqXG4gICAgICAgICAgdmFyIHZiID0gd1tpXSA9PT0gbWFyayA/IHhbaV0gOiB6ZXJvOyAvLyBpbnZva2UgZlxuXG4gICAgICAgICAgdmFyIHZjID0gY2YoYXZhbHVlc1trXSwgdmIpOyAvLyBjaGVjayB6ZXJvIHZhbHVlXG5cbiAgICAgICAgICBpZiAoIWVxKHZjLCB6ZXJvKSkge1xuICAgICAgICAgICAgLy8gcHVzaCBpbmRleFxuICAgICAgICAgICAgY2luZGV4LnB1c2goaSk7IC8vIHB1c2ggdmFsdWVcblxuICAgICAgICAgICAgY3ZhbHVlcy5wdXNoKHZjKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gcHVzaCBpbmRleFxuICAgICAgICAgIGNpbmRleC5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyB1cGRhdGUgY3B0clxuXG5cbiAgICBjcHRyW2NvbHVtbnNdID0gY2luZGV4Lmxlbmd0aDsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXhcblxuICAgIHJldHVybiBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IGN2YWx1ZXMsXG4gICAgICBpbmRleDogY2luZGV4LFxuICAgICAgcHRyOiBjcHRyLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDkgPSBjcmVhdGVBbGdvcml0aG0wOTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMTAgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdhbGdvcml0aG0xMCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZUFsZ29yaXRobTEwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBTcGFyc2VNYXRyaXggUyBub256ZXJvIGl0ZW1zIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKFNpaiwgYikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTlogdGltZXMgKG51bWJlciBvZiBub256ZXJvIGl0ZW1zIGluIFMpLlxuICAgKlxuICAgKlxuICAgKiAgICAgICAgICDilIwgIGYoU2lqLCBiKSAgOyBTKGksaikgIT09IDBcbiAgICogQyhpLGopID0g4pSkXG4gICAqICAgICAgICAgIOKUlCAgYiAgICAgICAgICA7IG90aGVyd2lzZVxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBzICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChTKVxuICAgKiBAcGFyYW0ge1NjYWxhcn0gICBiICAgICAgICAgICAgICAgICBUaGUgU2NhbGFyIHZhbHVlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgICAgIFRoZSBmKEFpaixiKSBvcGVyYXRpb24gdG8gaW52b2tlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gIGludmVyc2UgICAgICAgICAgIEEgdHJ1ZSB2YWx1ZSBpbmRpY2F0ZXMgY2FsbGJhY2sgc2hvdWxkIGJlIGludm9rZWQgZihiLFNpailcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgRGVuc2VNYXRyaXggKEMpXG4gICAqXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NkZWpvbmcvbWF0aGpzL3B1bGwvMzQ2I2lzc3VlY29tbWVudC05NzYyNjgxM1xuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTEwKHMsIGIsIGNhbGxiYWNrLCBpbnZlcnNlKSB7XG4gICAgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgYXZhbHVlcyA9IHMuX3ZhbHVlcztcbiAgICB2YXIgYWluZGV4ID0gcy5faW5kZXg7XG4gICAgdmFyIGFwdHIgPSBzLl9wdHI7XG4gICAgdmFyIGFzaXplID0gcy5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gcy5fZGF0YXR5cGU7IC8vIHNwYXJzZSBtYXRyaXggY2Fubm90IGJlIGEgUGF0dGVybiBtYXRyaXhcblxuICAgIGlmICghYXZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGVyZm9ybSBvcGVyYXRpb24gb24gUGF0dGVybiBTcGFyc2UgTWF0cml4IGFuZCBTY2FsYXIgdmFsdWUnKTtcbiAgICB9IC8vIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIHZhciByb3dzID0gYXNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBhc2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gY2FsbGJhY2sgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGNmID0gY2FsbGJhY2s7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGNvbnZlcnQgYiB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICBiID0gdHlwZWQuY29udmVydChiLCBkdCk7IC8vIGNhbGxiYWNrXG5cbiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0IGFycmF5c1xuXG5cbiAgICB2YXIgY2RhdGEgPSBbXTsgLy8gd29ya3NwYWNlc1xuXG4gICAgdmFyIHggPSBbXTsgLy8gbWFya3MgaW5kaWNhdGluZyB3ZSBoYXZlIGEgdmFsdWUgaW4geCBmb3IgYSBnaXZlbiBjb2x1bW5cblxuICAgIHZhciB3ID0gW107IC8vIGxvb3AgY29sdW1uc1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIGNvbHVtbnMgbWFya1xuICAgICAgdmFyIG1hcmsgPSBqICsgMTsgLy8gdmFsdWVzIGluIGpcblxuICAgICAgZm9yICh2YXIgazAgPSBhcHRyW2pdLCBrMSA9IGFwdHJbaiArIDFdLCBrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICB2YXIgciA9IGFpbmRleFtrXTsgLy8gdXBkYXRlIHdvcmtzcGFjZVxuXG4gICAgICAgIHhbcl0gPSBhdmFsdWVzW2tdO1xuICAgICAgICB3W3JdID0gbWFyaztcbiAgICAgIH0gLy8gbG9vcCByb3dzXG5cblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBDIG9uIGZpcnN0IGNvbHVtblxuICAgICAgICBpZiAoaiA9PT0gMCkge1xuICAgICAgICAgIC8vIGNyZWF0ZSByb3cgYXJyYXlcbiAgICAgICAgICBjZGF0YVtpXSA9IFtdO1xuICAgICAgICB9IC8vIGNoZWNrIHNwYXJzZSBtYXRyaXggaGFzIGEgdmFsdWUgQCBpLGpcblxuXG4gICAgICAgIGlmICh3W2ldID09PSBtYXJrKSB7XG4gICAgICAgICAgLy8gaW52b2tlIGNhbGxiYWNrLCB1cGRhdGUgQ1xuICAgICAgICAgIGNkYXRhW2ldW2pdID0gaW52ZXJzZSA/IGNmKGIsIHhbaV0pIDogY2YoeFtpXSwgYik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZGVuc2UgbWF0cml4IHZhbHVlIEAgaSwgalxuICAgICAgICAgIGNkYXRhW2ldW2pdID0gYjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gcmV0dXJuIGRlbnNlIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGNkYXRhLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMTAgPSBjcmVhdGVBbGdvcml0aG0xMDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMTEgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdhbGdvcml0aG0xMSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdlcXVhbFNjYWxhciddO1xudmFyIGNyZWF0ZUFsZ29yaXRobTExID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcjtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBTcGFyc2VNYXRyaXggUyBub256ZXJvIGl0ZW1zIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKFNpaiwgYikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTlogdGltZXMgKG51bWJlciBvZiBub256ZXJvIGl0ZW1zIGluIFMpLlxuICAgKlxuICAgKlxuICAgKiAgICAgICAgICDilIwgIGYoU2lqLCBiKSAgOyBTKGksaikgIT09IDBcbiAgICogQyhpLGopID0g4pSkXG4gICAqICAgICAgICAgIOKUlCAgMCAgICAgICAgICA7IG90aGVyd2lzZVxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBzICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChTKVxuICAgKiBAcGFyYW0ge1NjYWxhcn0gICBiICAgICAgICAgICAgICAgICBUaGUgU2NhbGFyIHZhbHVlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgICAgIFRoZSBmKEFpaixiKSBvcGVyYXRpb24gdG8gaW52b2tlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gIGludmVyc2UgICAgICAgICAgIEEgdHJ1ZSB2YWx1ZSBpbmRpY2F0ZXMgY2FsbGJhY2sgc2hvdWxkIGJlIGludm9rZWQgZihiLFNpailcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgU3BhcnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9wdWxsLzM0NiNpc3N1ZWNvbW1lbnQtOTc2MjY4MTNcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBhbGdvcml0aG0xMShzLCBiLCBjYWxsYmFjaywgaW52ZXJzZSkge1xuICAgIC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG4gICAgdmFyIGF2YWx1ZXMgPSBzLl92YWx1ZXM7XG4gICAgdmFyIGFpbmRleCA9IHMuX2luZGV4O1xuICAgIHZhciBhcHRyID0gcy5fcHRyO1xuICAgIHZhciBhc2l6ZSA9IHMuX3NpemU7XG4gICAgdmFyIGFkdCA9IHMuX2RhdGF0eXBlOyAvLyBzcGFyc2UgbWF0cml4IGNhbm5vdCBiZSBhIFBhdHRlcm4gbWF0cml4XG5cbiAgICBpZiAoIWF2YWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHBlcmZvcm0gb3BlcmF0aW9uIG9uIFBhdHRlcm4gU3BhcnNlIE1hdHJpeCBhbmQgU2NhbGFyIHZhbHVlJyk7XG4gICAgfSAvLyByb3dzICYgY29sdW1uc1xuXG5cbiAgICB2YXIgcm93cyA9IGFzaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gYXNpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGVxdWFsIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBjZiA9IGNhbGxiYWNrOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmICh0eXBlb2YgYWR0ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgZXEgPSB0eXBlZC5maW5kKGVxdWFsU2NhbGFyLCBbZHQsIGR0XSk7IC8vIGNvbnZlcnQgMCB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICB6ZXJvID0gdHlwZWQuY29udmVydCgwLCBkdCk7IC8vIGNvbnZlcnQgYiB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICBiID0gdHlwZWQuY29udmVydChiLCBkdCk7IC8vIGNhbGxiYWNrXG5cbiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0IGFycmF5c1xuXG5cbiAgICB2YXIgY3ZhbHVlcyA9IFtdO1xuICAgIHZhciBjaW5kZXggPSBbXTtcbiAgICB2YXIgY3B0ciA9IFtdOyAvLyBsb29wIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBpbml0aWFsaXplIHB0clxuICAgICAgY3B0cltqXSA9IGNpbmRleC5sZW5ndGg7IC8vIHZhbHVlcyBpbiBqXG5cbiAgICAgIGZvciAodmFyIGswID0gYXB0cltqXSwgazEgPSBhcHRyW2ogKyAxXSwgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgICAvLyByb3dcbiAgICAgICAgdmFyIGkgPSBhaW5kZXhba107IC8vIGludm9rZSBjYWxsYmFja1xuXG4gICAgICAgIHZhciB2ID0gaW52ZXJzZSA/IGNmKGIsIGF2YWx1ZXNba10pIDogY2YoYXZhbHVlc1trXSwgYik7IC8vIGNoZWNrIHZhbHVlIGlzIHplcm9cblxuICAgICAgICBpZiAoIWVxKHYsIHplcm8pKSB7XG4gICAgICAgICAgLy8gcHVzaCBpbmRleCAmIHZhbHVlXG4gICAgICAgICAgY2luZGV4LnB1c2goaSk7XG4gICAgICAgICAgY3ZhbHVlcy5wdXNoKHYpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyB1cGRhdGUgcHRyXG5cblxuICAgIGNwdHJbY29sdW1uc10gPSBjaW5kZXgubGVuZ3RoOyAvLyByZXR1cm4gc3BhcnNlIG1hdHJpeFxuXG4gICAgcmV0dXJuIHMuY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbcm93cywgY29sdW1uc10sXG4gICAgICBkYXRhdHlwZTogZHRcbiAgICB9KTtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0xMSA9IGNyZWF0ZUFsZ29yaXRobTExOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0xMiA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2FsZ29yaXRobTEyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlQWxnb3JpdGhtMTIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyBvdmVyIFNwYXJzZU1hdHJpeCBTIG5vbnplcm8gaXRlbXMgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoU2lqLCBiKS5cbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBNeE4gdGltZXMuXG4gICAqXG4gICAqXG4gICAqICAgICAgICAgIOKUjCAgZihTaWosIGIpICA7IFMoaSxqKSAhPT0gMFxuICAgKiBDKGksaikgPSDilKRcbiAgICogICAgICAgICAg4pSUICBmKDAsIGIpICAgIDsgb3RoZXJ3aXNlXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIHMgICAgICAgICAgICAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKFMpXG4gICAqIEBwYXJhbSB7U2NhbGFyfSAgIGIgICAgICAgICAgICAgICAgIFRoZSBTY2FsYXIgdmFsdWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICAgICAgICAgVGhlIGYoQWlqLGIpIG9wZXJhdGlvbiB0byBpbnZva2VcbiAgICogQHBhcmFtIHtib29sZWFufSAgaW52ZXJzZSAgICAgICAgICAgQSB0cnVlIHZhbHVlIGluZGljYXRlcyBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZCBmKGIsU2lqKVxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICAgICBEZW5zZU1hdHJpeCAoQylcbiAgICpcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NjI2ODEzXG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gYWxnb3JpdGhtMTIocywgYiwgY2FsbGJhY2ssIGludmVyc2UpIHtcbiAgICAvLyBzcGFyc2UgbWF0cml4IGFycmF5c1xuICAgIHZhciBhdmFsdWVzID0gcy5fdmFsdWVzO1xuICAgIHZhciBhaW5kZXggPSBzLl9pbmRleDtcbiAgICB2YXIgYXB0ciA9IHMuX3B0cjtcbiAgICB2YXIgYXNpemUgPSBzLl9zaXplO1xuICAgIHZhciBhZHQgPSBzLl9kYXRhdHlwZTsgLy8gc3BhcnNlIG1hdHJpeCBjYW5ub3QgYmUgYSBQYXR0ZXJuIG1hdHJpeFxuXG4gICAgaWYgKCFhdmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwZXJmb3JtIG9wZXJhdGlvbiBvbiBQYXR0ZXJuIFNwYXJzZSBNYXRyaXggYW5kIFNjYWxhciB2YWx1ZScpO1xuICAgIH0gLy8gcm93cyAmIGNvbHVtbnNcblxuXG4gICAgdmFyIHJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IGFzaXplWzFdOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyBjYWxsYmFjayBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAodHlwZW9mIGFkdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gY29udmVydCBiIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIGIgPSB0eXBlZC5jb252ZXJ0KGIsIGR0KTsgLy8gY2FsbGJhY2tcblxuICAgICAgY2YgPSB0eXBlZC5maW5kKGNhbGxiYWNrLCBbZHQsIGR0XSk7XG4gICAgfSAvLyByZXN1bHQgYXJyYXlzXG5cblxuICAgIHZhciBjZGF0YSA9IFtdOyAvLyB3b3Jrc3BhY2VzXG5cbiAgICB2YXIgeCA9IFtdOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHdlIGhhdmUgYSB2YWx1ZSBpbiB4IGZvciBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHcgPSBbXTsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gY29sdW1ucyBtYXJrXG4gICAgICB2YXIgbWFyayA9IGogKyAxOyAvLyB2YWx1ZXMgaW4galxuXG4gICAgICBmb3IgKHZhciBrMCA9IGFwdHJbal0sIGsxID0gYXB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIHZhciByID0gYWluZGV4W2tdOyAvLyB1cGRhdGUgd29ya3NwYWNlXG5cbiAgICAgICAgeFtyXSA9IGF2YWx1ZXNba107XG4gICAgICAgIHdbcl0gPSBtYXJrO1xuICAgICAgfSAvLyBsb29wIHJvd3NcblxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAvLyBpbml0aWFsaXplIEMgb24gZmlyc3QgY29sdW1uXG4gICAgICAgIGlmIChqID09PSAwKSB7XG4gICAgICAgICAgLy8gY3JlYXRlIHJvdyBhcnJheVxuICAgICAgICAgIGNkYXRhW2ldID0gW107XG4gICAgICAgIH0gLy8gY2hlY2sgc3BhcnNlIG1hdHJpeCBoYXMgYSB2YWx1ZSBAIGksalxuXG5cbiAgICAgICAgaWYgKHdbaV0gPT09IG1hcmspIHtcbiAgICAgICAgICAvLyBpbnZva2UgY2FsbGJhY2ssIHVwZGF0ZSBDXG4gICAgICAgICAgY2RhdGFbaV1bal0gPSBpbnZlcnNlID8gY2YoYiwgeFtpXSkgOiBjZih4W2ldLCBiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBkZW5zZSBtYXRyaXggdmFsdWUgQCBpLCBqXG4gICAgICAgICAgY2RhdGFbaV1bal0gPSBpbnZlcnNlID8gY2YoYiwgMCkgOiBjZigwLCBiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gcmV0dXJuIGRlbnNlIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGNkYXRhLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMTIgPSBjcmVhdGVBbGdvcml0aG0xMjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMTMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgbmFtZSA9ICdhbGdvcml0aG0xMyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUFsZ29yaXRobTEzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBEZW5zZU1hdHJpeCBpdGVtcyBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZihBaWouLnosIEJpai4ueikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTXhOIHRpbWVzLlxuICAgKlxuICAgKiBDKGksaiwuLi56KSA9IGYoQWlqLi56LCBCaWouLnopXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgICAgIFRoZSBEZW5zZU1hdHJpeCBpbnN0YW5jZSAoQSlcbiAgICogQHBhcmFtIHtNYXRyaXh9ICAgYiAgICAgICAgICAgICAgICAgVGhlIERlbnNlTWF0cml4IGluc3RhbmNlIChCKVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWouLnosQmlqLi56KSBvcGVyYXRpb24gdG8gaW52b2tlXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIERlbnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9wdWxsLzM0NiNpc3N1ZWNvbW1lbnQtOTc2NTg2NThcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBhbGdvcml0aG0xMyhhLCBiLCBjYWxsYmFjaykge1xuICAgIC8vIGEgYXJyYXlzXG4gICAgdmFyIGFkYXRhID0gYS5fZGF0YTtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gYiBhcnJheXNcblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7XG4gICAgdmFyIGJzaXplID0gYi5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIGMgYXJyYXlzXG5cbiAgICB2YXIgY3NpemUgPSBbXTsgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG4gICAgaWYgKGFzaXplLmxlbmd0aCAhPT0gYnNpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGFzaXplLmxlbmd0aCwgYnNpemUubGVuZ3RoKTtcbiAgICB9IC8vIHZhbGlkYXRlIGVhY2ggb25lIG9mIHRoZSBkaW1lbnNpb24gc2l6ZXNcblxuXG4gICAgZm9yICh2YXIgcyA9IDA7IHMgPCBhc2l6ZS5sZW5ndGg7IHMrKykge1xuICAgICAgLy8gbXVzdCBtYXRjaFxuICAgICAgaWYgKGFzaXplW3NdICE9PSBic2l6ZVtzXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTtcbiAgICAgIH0gLy8gdXBkYXRlIGRpbWVuc2lvbiBpbiBjXG5cblxuICAgICAgY3NpemVbc10gPSBhc2l6ZVtzXTtcbiAgICB9IC8vIGRhdGF0eXBlXG5cblxuICAgIHZhciBkdDsgLy8gY2FsbGJhY2sgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGNmID0gY2FsbGJhY2s7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnICYmIGFkdCA9PT0gYmR0KSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGNhbGxiYWNrXG5cbiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pO1xuICAgIH0gLy8gcG9wdWxhdGUgY2RhdGEsIGl0ZXJhdGUgdGhyb3VnaCBkaW1lbnNpb25zXG5cblxuICAgIHZhciBjZGF0YSA9IGNzaXplLmxlbmd0aCA+IDAgPyBfaXRlcmF0ZShjZiwgMCwgY3NpemUsIGNzaXplWzBdLCBhZGF0YSwgYmRhdGEpIDogW107IC8vIGMgbWF0cml4XG5cbiAgICByZXR1cm4gYS5jcmVhdGVEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiBjZGF0YSxcbiAgICAgIHNpemU6IGNzaXplLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07IC8vIHJlY3Vyc2l2ZSBmdW5jdGlvblxuXG4gIGZ1bmN0aW9uIF9pdGVyYXRlKGYsIGxldmVsLCBzLCBuLCBhdiwgYnYpIHtcbiAgICAvLyBpbml0aWFsaXplIGFycmF5IGZvciB0aGlzIGxldmVsXG4gICAgdmFyIGN2ID0gW107IC8vIGNoZWNrIHdlIHJlYWNoIHRoZSBsYXN0IGxldmVsXG5cbiAgICBpZiAobGV2ZWwgPT09IHMubGVuZ3RoIC0gMSkge1xuICAgICAgLy8gbG9vcCBhcnJheXMgaW4gbGFzdCBsZXZlbFxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgLy8gaW52b2tlIGNhbGxiYWNrIGFuZCBzdG9yZSB2YWx1ZVxuICAgICAgICBjdltpXSA9IGYoYXZbaV0sIGJ2W2ldKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaXRlcmF0ZSBjdXJyZW50IGxldmVsXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICAvLyBpdGVyYXRlIG5leHQgbGV2ZWxcbiAgICAgICAgY3Zbal0gPSBfaXRlcmF0ZShmLCBsZXZlbCArIDEsIHMsIHNbbGV2ZWwgKyAxXSwgYXZbal0sIGJ2W2pdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY3Y7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0xMyA9IGNyZWF0ZUFsZ29yaXRobTEzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0xNCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIG5hbWUgPSAnYWxnb3JpdGhtMTQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVBbGdvcml0aG0xNCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIG92ZXIgRGVuc2VNYXRyaXggaXRlbXMgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoQWlqLi56LCBiKS5cbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBNeE4gdGltZXMuXG4gICAqXG4gICAqIEMoaSxqLC4uLnopID0gZihBaWouLnosIGIpXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGEgICAgICAgICAgICAgICAgIFRoZSBEZW5zZU1hdHJpeCBpbnN0YW5jZSAoQSlcbiAgICogQHBhcmFtIHtTY2FsYXJ9ICAgYiAgICAgICAgICAgICAgICAgVGhlIFNjYWxhciB2YWx1ZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWouLnosYikgb3BlcmF0aW9uIHRvIGludm9rZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBpbnZlcnNlICAgICAgICAgICBBIHRydWUgdmFsdWUgaW5kaWNhdGVzIGNhbGxiYWNrIHNob3VsZCBiZSBpbnZva2VkIGYoYixBaWouLnopXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIERlbnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9wdWxsLzM0NiNpc3N1ZWNvbW1lbnQtOTc2NTkwNDJcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBhbGdvcml0aG0xNChhLCBiLCBjYWxsYmFjaywgaW52ZXJzZSkge1xuICAgIC8vIGEgYXJyYXlzXG4gICAgdmFyIGFkYXRhID0gYS5fZGF0YTtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gY2FsbGJhY2sgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGNmID0gY2FsbGJhY2s7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGNvbnZlcnQgYiB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICBiID0gdHlwZWQuY29udmVydChiLCBkdCk7IC8vIGNhbGxiYWNrXG5cbiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pO1xuICAgIH0gLy8gcG9wdWxhdGUgY2RhdGEsIGl0ZXJhdGUgdGhyb3VnaCBkaW1lbnNpb25zXG5cblxuICAgIHZhciBjZGF0YSA9IGFzaXplLmxlbmd0aCA+IDAgPyBfaXRlcmF0ZShjZiwgMCwgYXNpemUsIGFzaXplWzBdLCBhZGF0YSwgYiwgaW52ZXJzZSkgOiBbXTsgLy8gYyBtYXRyaXhcblxuICAgIHJldHVybiBhLmNyZWF0ZURlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGNkYXRhLFxuICAgICAgc2l6ZTogKDAsIF9vYmplY3QuY2xvbmUpKGFzaXplKSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pO1xuICB9OyAvLyByZWN1cnNpdmUgZnVuY3Rpb25cblxuICBmdW5jdGlvbiBfaXRlcmF0ZShmLCBsZXZlbCwgcywgbiwgYXYsIGJ2LCBpbnZlcnNlKSB7XG4gICAgLy8gaW5pdGlhbGl6ZSBhcnJheSBmb3IgdGhpcyBsZXZlbFxuICAgIHZhciBjdiA9IFtdOyAvLyBjaGVjayB3ZSByZWFjaCB0aGUgbGFzdCBsZXZlbFxuXG4gICAgaWYgKGxldmVsID09PSBzLmxlbmd0aCAtIDEpIHtcbiAgICAgIC8vIGxvb3AgYXJyYXlzIGluIGxhc3QgbGV2ZWxcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgIC8vIGludm9rZSBjYWxsYmFjayBhbmQgc3RvcmUgdmFsdWVcbiAgICAgICAgY3ZbaV0gPSBpbnZlcnNlID8gZihidiwgYXZbaV0pIDogZihhdltpXSwgYnYpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpdGVyYXRlIGN1cnJlbnQgbGV2ZWxcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgIC8vIGl0ZXJhdGUgbmV4dCBsZXZlbFxuICAgICAgICBjdltqXSA9IF9pdGVyYXRlKGYsIGxldmVsICsgMSwgcywgc1tsZXZlbCArIDFdLCBhdltqXSwgYnYsIGludmVyc2UpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjdjtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTE0ID0gY3JlYXRlQWxnb3JpdGhtMTQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU51bWJlciA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgbmFtZSA9ICdudW1iZXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVOdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBudW1iZXIgb3IgY29udmVydCBhIHN0cmluZywgYm9vbGVhbiwgb3IgdW5pdCB0byBhIG51bWJlci5cbiAgICogV2hlbiB2YWx1ZSBpcyBhIG1hdHJpeCwgYWxsIGVsZW1lbnRzIHdpbGwgYmUgY29udmVydGVkIHRvIG51bWJlci5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLm51bWJlcih2YWx1ZSlcbiAgICogICAgbWF0aC5udW1iZXIodW5pdCwgdmFsdWVsZXNzVW5pdClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgubnVtYmVyKDIpICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDJcbiAgICogICAgbWF0aC5udW1iZXIoJzcuMicpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNy4yXG4gICAqICAgIG1hdGgubnVtYmVyKHRydWUpICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDFcbiAgICogICAgbWF0aC5udW1iZXIoW3RydWUsIGZhbHNlLCB0cnVlLCB0cnVlXSkgLy8gcmV0dXJucyBbMSwgMCwgMSwgMV1cbiAgICogICAgbWF0aC5udW1iZXIobWF0aC51bml0KCc1MmNtJyksICdtJykgICAgLy8gcmV0dXJucyAwLjUyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaWdudW1iZXIsIGJvb2xlYW4sIGNvbXBsZXgsIGluZGV4LCBtYXRyaXgsIHN0cmluZywgdW5pdFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgYm9vbGVhbiB8IEFycmF5IHwgTWF0cml4IHwgVW5pdCB8IG51bGx9IFt2YWx1ZV0gIFZhbHVlIHRvIGJlIGNvbnZlcnRlZFxuICAgKiBAcGFyYW0ge1VuaXQgfCBzdHJpbmd9IFt2YWx1ZWxlc3NVbml0XSBBIHZhbHVlbGVzcyB1bml0LCB1c2VkIHRvIGNvbnZlcnQgYSB1bml0IHRvIGEgbnVtYmVyXG4gICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSBUaGUgY3JlYXRlZCBudW1iZXJcbiAgICovXG4gIHZhciBudW1iZXIgPSB0eXBlZCgnbnVtYmVyJywge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSxcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9LFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHtcbiAgICAgIGlmICh4ID09PSAnTmFOJykgcmV0dXJuIE5hTjtcbiAgICAgIHZhciBudW0gPSBOdW1iZXIoeCk7XG5cbiAgICAgIGlmIChpc05hTihudW0pKSB7XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignU3RyaW5nIFwiJyArIHggKyAnXCIgaXMgbm8gdmFsaWQgbnVtYmVyJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudW07XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC50b051bWJlcigpO1xuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4LnZhbHVlT2YoKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTZWNvbmQgYXJndW1lbnQgd2l0aCB2YWx1ZWxlc3MgdW5pdCBleHBlY3RlZCcpO1xuICAgIH0sXG4gICAgXCJudWxsXCI6IGZ1bmN0aW9uIF9udWxsKHgpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH0sXG4gICAgJ1VuaXQsIHN0cmluZyB8IFVuaXQnOiBmdW5jdGlvbiBVbml0U3RyaW5nVW5pdCh1bml0LCB2YWx1ZWxlc3NVbml0KSB7XG4gICAgICByZXR1cm4gdW5pdC50b051bWJlcih2YWx1ZWxlc3NVbml0KTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgbnVtYmVyKTtcbiAgICB9XG4gIH0pOyAvLyByZXZpdmVyIGZ1bmN0aW9uIHRvIHBhcnNlIGEgSlNPTiBvYmplY3QgbGlrZTpcbiAgLy9cbiAgLy8gICAgIHtcIm1hdGhqc1wiOlwibnVtYmVyXCIsXCJ2YWx1ZVwiOlwiMi4zXCJ9XG4gIC8vXG4gIC8vIGludG8gYSBudW1iZXIgMi4zXG5cbiAgbnVtYmVyLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gcGFyc2VGbG9hdChqc29uLnZhbHVlKTtcbiAgfTtcblxuICByZXR1cm4gbnVtYmVyO1xufSk7XG5leHBvcnRzLmNyZWF0ZU51bWJlciA9IGNyZWF0ZU51bWJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmVzdWx0U2V0ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnUmVzdWx0U2V0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbXTtcbnZhciBjcmVhdGVSZXN1bHRTZXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBBIFJlc3VsdFNldCBjb250YWlucyBhIGxpc3Qgb3IgcmVzdWx0c1xuICAgKiBAY2xhc3MgUmVzdWx0U2V0XG4gICAqIEBwYXJhbSB7QXJyYXl9IGVudHJpZXNcbiAgICogQGNvbnN0cnVjdG9yIFJlc3VsdFNldFxuICAgKi9cbiAgZnVuY3Rpb24gUmVzdWx0U2V0KGVudHJpZXMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVzdWx0U2V0KSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICB0aGlzLmVudHJpZXMgPSBlbnRyaWVzIHx8IFtdO1xuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIFJlc3VsdFNldC5wcm90b3R5cGUudHlwZSA9ICdSZXN1bHRTZXQnO1xuICBSZXN1bHRTZXQucHJvdG90eXBlLmlzUmVzdWx0U2V0ID0gdHJ1ZTtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGFycmF5IHdpdGggcmVzdWx0cyBob2xkIGJ5IHRoaXMgUmVzdWx0U2V0XG4gICAqIEBtZW1iZXJvZiBSZXN1bHRTZXRcbiAgICogQHJldHVybnMge0FycmF5fSBlbnRyaWVzXG4gICAqL1xuXG4gIFJlc3VsdFNldC5wcm90b3R5cGUudmFsdWVPZiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyaWVzO1xuICB9O1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgc3RyaW5naWZpZWQgcmVzdWx0cyBvZiB0aGUgUmVzdWx0U2V0XG4gICAqIEBtZW1iZXJvZiBSZXN1bHRTZXRcbiAgICogQHJldHVybnMge3N0cmluZ30gc3RyaW5nXG4gICAqL1xuXG5cbiAgUmVzdWx0U2V0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gJ1snICsgdGhpcy5lbnRyaWVzLmpvaW4oJywgJykgKyAnXSc7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBSZXN1bHRTZXRcbiAgICogQG1lbWJlcm9mIFJlc3VsdFNldFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczpcbiAgICogICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlJlc3VsdFNldFwiLCBcImVudHJpZXNcIjogWy4uLl19YFxuICAgKi9cblxuXG4gIFJlc3VsdFNldC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdSZXN1bHRTZXQnLFxuICAgICAgZW50cmllczogdGhpcy5lbnRyaWVzXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGEgUmVzdWx0U2V0IGZyb20gYSBKU09OIG9iamVjdFxuICAgKiBAbWVtYmVyb2YgUmVzdWx0U2V0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBIEpTT04gb2JqZWN0IHN0cnVjdHVyZWQgYXM6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiUmVzdWx0U2V0XCIsIFwiZW50cmllc1wiOiBbLi4uXX1gXG4gICAqIEByZXR1cm4ge1Jlc3VsdFNldH1cbiAgICovXG5cblxuICBSZXN1bHRTZXQuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgUmVzdWx0U2V0KGpzb24uZW50cmllcyk7XG4gIH07XG5cbiAgcmV0dXJuIFJlc3VsdFNldDtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJlc3VsdFNldCA9IGNyZWF0ZVJlc3VsdFNldDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3RyaW5nID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnc3RyaW5nJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlU3RyaW5nID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgc3RyaW5nIG9yIGNvbnZlcnQgYW55IG9iamVjdCBpbnRvIGEgc3RyaW5nLlxuICAgKiBFbGVtZW50cyBvZiBBcnJheXMgYW5kIE1hdHJpY2VzIGFyZSBwcm9jZXNzZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc3RyaW5nKHZhbHVlKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zdHJpbmcoNC4yKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgc3RyaW5nICc0LjInXG4gICAqICAgIG1hdGguc3RyaW5nKG1hdGguY29tcGxleCgzLCAyKSAvLyByZXR1cm5zIHN0cmluZyAnMyArIDJpJ1xuICAgKlxuICAgKiAgICBjb25zdCB1ID0gbWF0aC51bml0KDUsICdrbScpXG4gICAqICAgIG1hdGguc3RyaW5nKHUudG8oJ20nKSkgICAgICAgICAvLyByZXR1cm5zIHN0cmluZyAnNTAwMCBtJ1xuICAgKlxuICAgKiAgICBtYXRoLnN0cmluZyhbdHJ1ZSwgZmFsc2VdKSAgICAgLy8gcmV0dXJucyBbJ3RydWUnLCAnZmFsc2UnXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYmlnbnVtYmVyLCBib29sZWFuLCBjb21wbGV4LCBpbmRleCwgbWF0cml4LCBudW1iZXIsIHVuaXRcbiAgICpcbiAgICogQHBhcmFtIHsqIHwgQXJyYXkgfCBNYXRyaXggfCBudWxsfSBbdmFsdWVdICBBIHZhbHVlIHRvIGNvbnZlcnQgdG8gYSBzdHJpbmdcbiAgICogQHJldHVybiB7c3RyaW5nIHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBjcmVhdGVkIHN0cmluZ1xuICAgKi9cbiAgdmFyIHN0cmluZyA9IHR5cGVkKG5hbWUsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9LFxuICAgIG51bWJlcjogX251bWJlci5mb3JtYXQsXG4gICAgXCJudWxsXCI6IGZ1bmN0aW9uIF9udWxsKHgpIHtcbiAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfSxcbiAgICBcImJvb2xlYW5cIjogZnVuY3Rpb24gYm9vbGVhbih4KSB7XG4gICAgICByZXR1cm4geCArICcnO1xuICAgIH0sXG4gICAgc3RyaW5nOiBmdW5jdGlvbiBzdHJpbmcoeCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHN0cmluZyk7XG4gICAgfSxcbiAgICBhbnk6IGZ1bmN0aW9uIGFueSh4KSB7XG4gICAgICByZXR1cm4gU3RyaW5nKHgpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzdHJpbmc7XG59KTtcbmV4cG9ydHMuY3JlYXRlU3RyaW5nID0gY3JlYXRlU3RyaW5nOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbml0Q2xhc3MgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9jb25zdGFudHMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL2NvbnN0YW50c1wiKTtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG52YXIgbmFtZSA9ICdVbml0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJz9vbicsICdjb25maWcnLCAnYWRkU2NhbGFyJywgJ3N1YnRyYWN0JywgJ211bHRpcGx5U2NhbGFyJywgJ2RpdmlkZVNjYWxhcicsICdwb3cnLCAnYWJzJywgJ2ZpeCcsICdyb3VuZCcsICdlcXVhbCcsICdpc051bWVyaWMnLCAnZm9ybWF0JywgJ251bWJlcicsICdDb21wbGV4JywgJ0JpZ051bWJlcicsICdGcmFjdGlvbiddO1xudmFyIGNyZWF0ZVVuaXRDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBvbiA9IF9yZWYub24sXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBwb3cgPSBfcmVmLnBvdyxcbiAgICAgIGFicyA9IF9yZWYuYWJzLFxuICAgICAgZml4ID0gX3JlZi5maXgsXG4gICAgICByb3VuZCA9IF9yZWYucm91bmQsXG4gICAgICBlcXVhbCA9IF9yZWYuZXF1YWwsXG4gICAgICBpc051bWVyaWMgPSBfcmVmLmlzTnVtZXJpYyxcbiAgICAgIGZvcm1hdCA9IF9yZWYuZm9ybWF0LFxuICAgICAgbnVtYmVyID0gX3JlZi5udW1iZXIsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4LFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgX0ZyYWN0aW9uID0gX3JlZi5GcmFjdGlvbjtcbiAgdmFyIHRvTnVtYmVyID0gbnVtYmVyO1xuICAvKipcbiAgICogQSB1bml0IGNhbiBiZSBjb25zdHJ1Y3RlZCBpbiB0aGUgZm9sbG93aW5nIHdheXM6XG4gICAqXG4gICAqICAgICBjb25zdCBhID0gbmV3IFVuaXQodmFsdWUsIG5hbWUpXG4gICAqICAgICBjb25zdCBiID0gbmV3IFVuaXQobnVsbCwgbmFtZSlcbiAgICogICAgIGNvbnN0IGMgPSBVbml0LnBhcnNlKHN0cilcbiAgICpcbiAgICogRXhhbXBsZSB1c2FnZTpcbiAgICpcbiAgICogICAgIGNvbnN0IGEgPSBuZXcgVW5pdCg1LCAnY20nKSAgICAgICAgICAgICAgIC8vIDUwIG1tXG4gICAqICAgICBjb25zdCBiID0gVW5pdC5wYXJzZSgnMjMga2cnKSAgICAgICAgICAgICAvLyAyMyBrZ1xuICAgKiAgICAgY29uc3QgYyA9IG1hdGguaW4oYSwgbmV3IFVuaXQobnVsbCwgJ20nKSAgLy8gMC4wNSBtXG4gICAqICAgICBjb25zdCBkID0gbmV3IFVuaXQoOS44MSwgXCJtL3NeMlwiKSAgICAgICAgIC8vIDkuODEgbS9zXjJcbiAgICpcbiAgICogQGNsYXNzIFVuaXRcbiAgICogQGNvbnN0cnVjdG9yIFVuaXRcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBib29sZWFufSBbdmFsdWVdICBBIHZhbHVlIGxpa2UgNS4yXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV0gICBBIHVuaXQgbmFtZSBsaWtlIFwiY21cIiBvciBcImluY2hcIiwgb3IgYSBkZXJpdmVkIHVuaXQgb2YgdGhlIGZvcm06IFwidTFbXmV4MV0gW3UyW15leDJdIC4uLl0gWy8gdTNbXmV4M10gW3U0W15leDRdXV1cIiwgc3VjaCBhcyBcImtnIG1eMi9zXjJcIiwgd2hlcmUgZWFjaCB1bml0IGFwcGVhcmluZyBhZnRlciB0aGUgZm9yd2FyZCBzbGFzaCBpcyB0YWtlbiB0byBiZSBpbiB0aGUgZGVub21pbmF0b3IuIFwia2cgbV4yIHNeLTJcIiBpcyBhIHN5bm9ueW0gYW5kIGlzIGFsc28gYWNjZXB0YWJsZS4gQW55IG9mIHRoZSB1bml0cyBjYW4gaW5jbHVkZSBhIHByZWZpeC5cbiAgICovXG5cbiAgZnVuY3Rpb24gVW5pdCh2YWx1ZSwgbmFtZSkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBVbml0KSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoISh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGlzTnVtZXJpYyh2YWx1ZSkgfHwgKDAsIF9pcy5pc0NvbXBsZXgpKHZhbHVlKSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZpcnN0IHBhcmFtZXRlciBpbiBVbml0IGNvbnN0cnVjdG9yIG11c3QgYmUgbnVtYmVyLCBCaWdOdW1iZXIsIEZyYWN0aW9uLCBDb21wbGV4LCBvciB1bmRlZmluZWQnKTtcbiAgICB9XG5cbiAgICBpZiAobmFtZSAhPT0gdW5kZWZpbmVkICYmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycgfHwgbmFtZSA9PT0gJycpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTZWNvbmQgcGFyYW1ldGVyIGluIFVuaXQgY29uc3RydWN0b3IgbXVzdCBiZSBhIHN0cmluZycpO1xuICAgIH1cblxuICAgIGlmIChuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhciB1ID0gVW5pdC5wYXJzZShuYW1lKTtcbiAgICAgIHRoaXMudW5pdHMgPSB1LnVuaXRzO1xuICAgICAgdGhpcy5kaW1lbnNpb25zID0gdS5kaW1lbnNpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVuaXRzID0gW3tcbiAgICAgICAgdW5pdDogVU5JVF9OT05FLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkUsXG4gICAgICAgIC8vIGxpbmsgdG8gYSBsaXN0IHdpdGggc3VwcG9ydGVkIHByZWZpeGVzXG4gICAgICAgIHBvd2VyOiAwXG4gICAgICB9XTtcbiAgICAgIHRoaXMuZGltZW5zaW9ucyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzLmRpbWVuc2lvbnNbaV0gPSAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkICYmIHZhbHVlICE9PSBudWxsID8gdGhpcy5fbm9ybWFsaXplKHZhbHVlKSA6IG51bGw7XG4gICAgdGhpcy5maXhQcmVmaXggPSBmYWxzZTsgLy8gaWYgdHJ1ZSwgZnVuY3Rpb24gZm9ybWF0IHdpbGwgbm90IHNlYXJjaCBmb3IgdGhlXG4gICAgLy8gYmVzdCBwcmVmaXggYnV0IGxlYXZlIGl0IGFzIGluaXRpYWxseSBwcm92aWRlZC5cbiAgICAvLyBmaXhQcmVmaXggaXMgc2V0IHRydWUgYnkgdGhlIG1ldGhvZCBVbml0LnRvXG4gICAgLy8gVGhlIGp1c3RpZmljYXRpb24gYmVoaW5kIHRoaXMgaXMgdGhhdCBpZiB0aGUgY29uc3RydWN0b3IgaXMgZXhwbGljaXRseSBjYWxsZWQsXG4gICAgLy8gdGhlIGNhbGxlciB3aXNoZXMgdGhlIHVuaXRzIHRvIGJlIHJldHVybmVkIGV4YWN0bHkgYXMgaGUgc3VwcGxpZWQuXG5cbiAgICB0aGlzLnNraXBBdXRvbWF0aWNTaW1wbGlmaWNhdGlvbiA9IHRydWU7XG4gIH1cbiAgLyoqXG4gICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUudHlwZSA9ICdVbml0JztcbiAgVW5pdC5wcm90b3R5cGUuaXNVbml0ID0gdHJ1ZTsgLy8gcHJpdmF0ZSB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlIFVuaXQgcGFyc2VyXG5cbiAgdmFyIHRleHQsIGluZGV4LCBjO1xuXG4gIGZ1bmN0aW9uIHNraXBXaGl0ZXNwYWNlKCkge1xuICAgIHdoaWxlIChjID09PSAnICcgfHwgYyA9PT0gJ1xcdCcpIHtcbiAgICAgIG5leHQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBpc0RpZ2l0RG90KGMpIHtcbiAgICByZXR1cm4gYyA+PSAnMCcgJiYgYyA8PSAnOScgfHwgYyA9PT0gJy4nO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNEaWdpdChjKSB7XG4gICAgcmV0dXJuIGMgPj0gJzAnICYmIGMgPD0gJzknO1xuICB9XG5cbiAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICBpbmRleCsrO1xuICAgIGMgPSB0ZXh0LmNoYXJBdChpbmRleCk7XG4gIH1cblxuICBmdW5jdGlvbiByZXZlcnQob2xkSW5kZXgpIHtcbiAgICBpbmRleCA9IG9sZEluZGV4O1xuICAgIGMgPSB0ZXh0LmNoYXJBdChpbmRleCk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZU51bWJlcigpIHtcbiAgICB2YXIgbnVtYmVyID0gJyc7XG4gICAgdmFyIG9sZEluZGV4ID0gaW5kZXg7XG5cbiAgICBpZiAoYyA9PT0gJysnKSB7XG4gICAgICBuZXh0KCk7XG4gICAgfSBlbHNlIGlmIChjID09PSAnLScpIHtcbiAgICAgIG51bWJlciArPSBjO1xuICAgICAgbmV4dCgpO1xuICAgIH1cblxuICAgIGlmICghaXNEaWdpdERvdChjKSkge1xuICAgICAgLy8gYSArIG9yIC0gbXVzdCBiZSBmb2xsb3dlZCBieSBhIGRpZ2l0XG4gICAgICByZXZlcnQob2xkSW5kZXgpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSAvLyBnZXQgbnVtYmVyLCBjYW4gaGF2ZSBhIHNpbmdsZSBkb3RcblxuXG4gICAgaWYgKGMgPT09ICcuJykge1xuICAgICAgbnVtYmVyICs9IGM7XG4gICAgICBuZXh0KCk7XG5cbiAgICAgIGlmICghaXNEaWdpdChjKSkge1xuICAgICAgICAvLyB0aGlzIGlzIG5vIGxlZ2FsIG51bWJlciwgaXQgaXMganVzdCBhIGRvdFxuICAgICAgICByZXZlcnQob2xkSW5kZXgpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgd2hpbGUgKGlzRGlnaXQoYykpIHtcbiAgICAgICAgbnVtYmVyICs9IGM7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGMgPT09ICcuJykge1xuICAgICAgICBudW1iZXIgKz0gYztcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHdoaWxlIChpc0RpZ2l0KGMpKSB7XG4gICAgICBudW1iZXIgKz0gYztcbiAgICAgIG5leHQoKTtcbiAgICB9IC8vIGNoZWNrIGZvciBleHBvbmVudGlhbCBub3RhdGlvbiBsaWtlIFwiMi4zZS00XCIgb3IgXCIxLjIzZTUwXCJcblxuXG4gICAgaWYgKGMgPT09ICdFJyB8fCBjID09PSAnZScpIHtcbiAgICAgIC8vIFRoZSBncmFtbWFyIGJyYW5jaGVzIGhlcmUuIFRoaXMgY291bGQgZWl0aGVyIGJlIHBhcnQgb2YgYW4gZXhwb25lbnQgb3IgdGhlIHN0YXJ0IG9mIGEgdW5pdCB0aGF0IGJlZ2lucyB3aXRoIHRoZSBsZXR0ZXIgZSwgc3VjaCBhcyBcIjRleGFieXRlc1wiXG4gICAgICB2YXIgdGVudGF0aXZlTnVtYmVyID0gJyc7XG4gICAgICB2YXIgdGVudGF0aXZlSW5kZXggPSBpbmRleDtcbiAgICAgIHRlbnRhdGl2ZU51bWJlciArPSBjO1xuICAgICAgbmV4dCgpO1xuXG4gICAgICBpZiAoYyA9PT0gJysnIHx8IGMgPT09ICctJykge1xuICAgICAgICB0ZW50YXRpdmVOdW1iZXIgKz0gYztcbiAgICAgICAgbmV4dCgpO1xuICAgICAgfSAvLyBTY2llbnRpZmljIG5vdGF0aW9uIE1VU1QgYmUgZm9sbG93ZWQgYnkgYW4gZXhwb25lbnQgKG90aGVyd2lzZSB3ZSBhc3N1bWUgaXQgaXMgbm90IHNjaWVudGlmaWMgbm90YXRpb24pXG5cblxuICAgICAgaWYgKCFpc0RpZ2l0KGMpKSB7XG4gICAgICAgIC8vIFRoZSBlIG9yIEUgbXVzdCBiZWxvbmcgdG8gc29tZXRoaW5nIGVsc2UsIHNvIHJldHVybiB0aGUgbnVtYmVyIHdpdGhvdXQgdGhlIGUgb3IgRS5cbiAgICAgICAgcmV2ZXJ0KHRlbnRhdGl2ZUluZGV4KTtcbiAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICAgIH0gLy8gV2UgY2FuIG5vdyBzYWZlbHkgc2F5IHRoYXQgdGhpcyBpcyBzY2llbnRpZmljIG5vdGF0aW9uLlxuXG5cbiAgICAgIG51bWJlciA9IG51bWJlciArIHRlbnRhdGl2ZU51bWJlcjtcblxuICAgICAgd2hpbGUgKGlzRGlnaXQoYykpIHtcbiAgICAgICAgbnVtYmVyICs9IGM7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVtYmVyO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VVbml0KCkge1xuICAgIHZhciB1bml0TmFtZSA9ICcnOyAvLyBBbHBoYW51bWVyaWMgY2hhcmFjdGVycyBvbmx5OyBtYXRjaGVzIFthLXpBLVowLTldXG5cbiAgICB2YXIgY29kZSA9IHRleHQuY2hhckNvZGVBdChpbmRleCk7XG5cbiAgICB3aGlsZSAoY29kZSA+PSA0OCAmJiBjb2RlIDw9IDU3IHx8IGNvZGUgPj0gNjUgJiYgY29kZSA8PSA5MCB8fCBjb2RlID49IDk3ICYmIGNvZGUgPD0gMTIyKSB7XG4gICAgICB1bml0TmFtZSArPSBjO1xuICAgICAgbmV4dCgpO1xuICAgICAgY29kZSA9IHRleHQuY2hhckNvZGVBdChpbmRleCk7XG4gICAgfSAvLyBNdXN0IGJlZ2luIHdpdGggW2EtekEtWl1cblxuXG4gICAgY29kZSA9IHVuaXROYW1lLmNoYXJDb2RlQXQoMCk7XG5cbiAgICBpZiAoY29kZSA+PSA2NSAmJiBjb2RlIDw9IDkwIHx8IGNvZGUgPj0gOTcgJiYgY29kZSA8PSAxMjIpIHtcbiAgICAgIHJldHVybiB1bml0TmFtZSB8fCBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUNoYXJhY3Rlcih0b0ZpbmQpIHtcbiAgICBpZiAoYyA9PT0gdG9GaW5kKSB7XG4gICAgICBuZXh0KCk7XG4gICAgICByZXR1cm4gdG9GaW5kO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFBhcnNlIGEgc3RyaW5nIGludG8gYSB1bml0LiBUaGUgdmFsdWUgb2YgdGhlIHVuaXQgaXMgcGFyc2VkIGFzIG51bWJlcixcbiAgICogQmlnTnVtYmVyLCBvciBGcmFjdGlvbiBkZXBlbmRpbmcgb24gdGhlIG1hdGguanMgY29uZmlnIHNldHRpbmcgYG51bWJlcmAuXG4gICAqXG4gICAqIFRocm93cyBhbiBleGNlcHRpb24gaWYgdGhlIHByb3ZpZGVkIHN0cmluZyBkb2VzIG5vdCBjb250YWluIGEgdmFsaWQgdW5pdCBvclxuICAgKiBjYW5ub3QgYmUgcGFyc2VkLlxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyICAgICAgICBBIHN0cmluZyBsaWtlIFwiNS4yIGluY2hcIiwgXCI0ZTIgY20vc14yXCJcbiAgICogQHJldHVybiB7VW5pdH0gdW5pdFxuICAgKi9cblxuXG4gIFVuaXQucGFyc2UgPSBmdW5jdGlvbiAoc3RyLCBvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdGV4dCA9IHN0cjtcbiAgICBpbmRleCA9IC0xO1xuICAgIGMgPSAnJztcblxuICAgIGlmICh0eXBlb2YgdGV4dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgYXJndW1lbnQgaW4gVW5pdC5wYXJzZSwgc3RyaW5nIGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgdmFyIHVuaXQgPSBuZXcgVW5pdCgpO1xuICAgIHVuaXQudW5pdHMgPSBbXTtcbiAgICB2YXIgcG93ZXJNdWx0aXBsaWVyQ3VycmVudCA9IDE7XG4gICAgdmFyIGV4cGVjdGluZ1VuaXQgPSBmYWxzZTsgLy8gQSB1bml0IHNob3VsZCBmb2xsb3cgdGhpcyBwYXR0ZXJuOlxuICAgIC8vIFtudW1iZXJdIC4uLlsgWyovXSB1bml0W15udW1iZXJdIF1cbiAgICAvLyB1bml0W15udW1iZXJdIC4uLiBbIFsqL10gdW5pdFtebnVtYmVyXSBdXG4gICAgLy8gUnVsZXM6XG4gICAgLy8gbnVtYmVyIGlzIGFueSBmbG9hdGluZyBwb2ludCBudW1iZXIuXG4gICAgLy8gdW5pdCBpcyBhbnkgYWxwaGFudW1lcmljIHN0cmluZyBiZWdpbm5pbmcgd2l0aCBhbiBhbHBoYS4gVW5pdHMgd2l0aCBuYW1lcyBsaWtlIGUzIHNob3VsZCBiZSBhdm9pZGVkIGJlY2F1c2UgdGhleSBsb29rIGxpa2UgdGhlIGV4cG9uZW50IG9mIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIVxuICAgIC8vIFRoZSBzdHJpbmcgbWF5IG9wdGlvbmFsbHkgYmVnaW4gd2l0aCBhIG51bWJlci5cbiAgICAvLyBFYWNoIHVuaXQgbWF5IG9wdGlvbmFsbHkgYmUgZm9sbG93ZWQgYnkgXm51bWJlci5cbiAgICAvLyBXaGl0ZXNwYWNlIG9yIGEgZm9yd2FyZCBzbGFzaCBpcyByZWNvbW1lbmRlZCBiZXR3ZWVuIGNvbnNlY3V0aXZlIHVuaXRzLCBhbHRob3VnaCB0aGUgZm9sbG93aW5nIHRlY2huaWNhbGx5IGlzIHBhcnNlYWJsZTpcbiAgICAvLyAgIDJtXjJrZy9zXjJcbiAgICAvLyBpdCBpcyBub3QgZ29vZCBmb3JtLiBJZiBhIHVuaXQgc3RhcnRzIHdpdGggZSwgdGhlbiBpdCBjb3VsZCBiZSBjb25mdXNlZCBhcyBhIGZsb2F0aW5nIHBvaW50IG51bWJlcjpcbiAgICAvLyAgIDRlcmdcblxuICAgIG5leHQoKTtcbiAgICBza2lwV2hpdGVzcGFjZSgpOyAvLyBPcHRpb25hbCBudW1iZXIgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmdcblxuICAgIHZhciB2YWx1ZVN0ciA9IHBhcnNlTnVtYmVyKCk7XG4gICAgdmFyIHZhbHVlID0gbnVsbDtcblxuICAgIGlmICh2YWx1ZVN0cikge1xuICAgICAgaWYgKGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInKSB7XG4gICAgICAgIHZhbHVlID0gbmV3IF9CaWdOdW1iZXIodmFsdWVTdHIpO1xuICAgICAgfSBlbHNlIGlmIChjb25maWcubnVtYmVyID09PSAnRnJhY3Rpb24nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gbm90IGFsbCBudW1iZXJzIGNhbiBiZSB0dXJuZWQgaW4gRnJhY3Rpb25zLCBmb3IgZXhhbXBsZSB2ZXJ5IHNtYWxsIG51bWJlcnMgbm90XG4gICAgICAgICAgdmFsdWUgPSBuZXcgX0ZyYWN0aW9uKHZhbHVlU3RyKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlU3RyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbnVtYmVyXG4gICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZVN0cik7XG4gICAgICB9XG5cbiAgICAgIHNraXBXaGl0ZXNwYWNlKCk7IC8vIFdoaXRlc3BhY2UgaXMgbm90IHJlcXVpcmVkIGhlcmVcbiAgICAgIC8vIGhhbmRsZSBtdWx0aXBsaWNhdGlvbiBvciBkaXZpc2lvbiByaWdodCBhZnRlciB0aGUgdmFsdWUsIGxpa2UgJzEvcydcblxuICAgICAgaWYgKHBhcnNlQ2hhcmFjdGVyKCcqJykpIHtcbiAgICAgICAgcG93ZXJNdWx0aXBsaWVyQ3VycmVudCA9IDE7XG4gICAgICAgIGV4cGVjdGluZ1VuaXQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChwYXJzZUNoYXJhY3RlcignLycpKSB7XG4gICAgICAgIHBvd2VyTXVsdGlwbGllckN1cnJlbnQgPSAtMTtcbiAgICAgICAgZXhwZWN0aW5nVW5pdCA9IHRydWU7XG4gICAgICB9XG4gICAgfSAvLyBTdGFjayB0byBrZWVwIHRyYWNrIG9mIHBvd2VyTXVsdGlwbGllcnMgYXBwbGllZCB0byBlYWNoIHBhcmVudGhlc2VzIGdyb3VwXG5cblxuICAgIHZhciBwb3dlck11bHRpcGxpZXJTdGFjayA9IFtdOyAvLyBSdW5uaW5nIHByb2R1Y3Qgb2YgYWxsIGVsZW1lbnRzIGluIHBvd2VyTXVsdGlwbGllclN0YWNrXG5cbiAgICB2YXIgcG93ZXJNdWx0aXBsaWVyU3RhY2tQcm9kdWN0ID0gMTtcblxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBza2lwV2hpdGVzcGFjZSgpOyAvLyBDaGVjayBmb3IgYW5kIGNvbnN1bWUgb3BlbmluZyBwYXJlbnRoZXNlcywgcHVzaGluZyBwb3dlck11bHRpcGxpZXJDdXJyZW50IHRvIHRoZSBzdGFja1xuICAgICAgLy8gQSAnKCcgd2lsbCBhbHdheXMgYXBwZWFyIGRpcmVjdGx5IGJlZm9yZSBhIHVuaXQuXG5cbiAgICAgIHdoaWxlIChjID09PSAnKCcpIHtcbiAgICAgICAgcG93ZXJNdWx0aXBsaWVyU3RhY2sucHVzaChwb3dlck11bHRpcGxpZXJDdXJyZW50KTtcbiAgICAgICAgcG93ZXJNdWx0aXBsaWVyU3RhY2tQcm9kdWN0ICo9IHBvd2VyTXVsdGlwbGllckN1cnJlbnQ7XG4gICAgICAgIHBvd2VyTXVsdGlwbGllckN1cnJlbnQgPSAxO1xuICAgICAgICBuZXh0KCk7XG4gICAgICAgIHNraXBXaGl0ZXNwYWNlKCk7XG4gICAgICB9IC8vIElzIHRoZXJlIHNvbWV0aGluZyBoZXJlP1xuXG5cbiAgICAgIHZhciB1U3RyID0gdm9pZCAwO1xuXG4gICAgICBpZiAoYykge1xuICAgICAgICB2YXIgb2xkQyA9IGM7XG4gICAgICAgIHVTdHIgPSBwYXJzZVVuaXQoKTtcblxuICAgICAgICBpZiAodVN0ciA9PT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVW5leHBlY3RlZCBcIicgKyBvbGRDICsgJ1wiIGluIFwiJyArIHRleHQgKyAnXCIgYXQgaW5kZXggJyArIGluZGV4LnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBFbmQgb2YgaW5wdXQuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfSAvLyBWZXJpZnkgdGhlIHVuaXQgZXhpc3RzIGFuZCBnZXQgdGhlIHByZWZpeCAoaWYgYW55KVxuXG5cbiAgICAgIHZhciByZXMgPSBfZmluZFVuaXQodVN0cik7XG5cbiAgICAgIGlmIChyZXMgPT09IG51bGwpIHtcbiAgICAgICAgLy8gVW5pdCBub3QgZm91bmQuXG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVW5pdCBcIicgKyB1U3RyICsgJ1wiIG5vdCBmb3VuZC4nKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHBvd2VyID0gcG93ZXJNdWx0aXBsaWVyQ3VycmVudCAqIHBvd2VyTXVsdGlwbGllclN0YWNrUHJvZHVjdDsgLy8gSXMgdGhlcmUgYSBcIl4gbnVtYmVyXCI/XG5cbiAgICAgIHNraXBXaGl0ZXNwYWNlKCk7XG5cbiAgICAgIGlmIChwYXJzZUNoYXJhY3RlcignXicpKSB7XG4gICAgICAgIHNraXBXaGl0ZXNwYWNlKCk7XG4gICAgICAgIHZhciBwID0gcGFyc2VOdW1iZXIoKTtcblxuICAgICAgICBpZiAocCA9PT0gbnVsbCkge1xuICAgICAgICAgIC8vIE5vIHZhbGlkIG51bWJlciBmb3VuZCBmb3IgdGhlIHBvd2VyIVxuICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignSW4gXCInICsgc3RyICsgJ1wiLCBcIl5cIiBtdXN0IGJlIGZvbGxvd2VkIGJ5IGEgZmxvYXRpbmctcG9pbnQgbnVtYmVyJyk7XG4gICAgICAgIH1cblxuICAgICAgICBwb3dlciAqPSBwO1xuICAgICAgfSAvLyBBZGQgdGhlIHVuaXQgdG8gdGhlIGxpc3RcblxuXG4gICAgICB1bml0LnVuaXRzLnB1c2goe1xuICAgICAgICB1bml0OiByZXMudW5pdCxcbiAgICAgICAgcHJlZml4OiByZXMucHJlZml4LFxuICAgICAgICBwb3dlcjogcG93ZXJcbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IGkrKykge1xuICAgICAgICB1bml0LmRpbWVuc2lvbnNbaV0gKz0gKHJlcy51bml0LmRpbWVuc2lvbnNbaV0gfHwgMCkgKiBwb3dlcjtcbiAgICAgIH0gLy8gQ2hlY2sgZm9yIGFuZCBjb25zdW1lIGNsb3NpbmcgcGFyZW50aGVzZXMsIHBvcHBpbmcgZnJvbSB0aGUgc3RhY2suXG4gICAgICAvLyBBICcpJyB3aWxsIGFsd2F5cyBmb2xsb3cgYSB1bml0LlxuXG5cbiAgICAgIHNraXBXaGl0ZXNwYWNlKCk7XG5cbiAgICAgIHdoaWxlIChjID09PSAnKScpIHtcbiAgICAgICAgaWYgKHBvd2VyTXVsdGlwbGllclN0YWNrLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVW5tYXRjaGVkIFwiKVwiIGluIFwiJyArIHRleHQgKyAnXCIgYXQgaW5kZXggJyArIGluZGV4LnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcG93ZXJNdWx0aXBsaWVyU3RhY2tQcm9kdWN0IC89IHBvd2VyTXVsdGlwbGllclN0YWNrLnBvcCgpO1xuICAgICAgICBuZXh0KCk7XG4gICAgICAgIHNraXBXaGl0ZXNwYWNlKCk7XG4gICAgICB9IC8vIFwiKlwiIGFuZCBcIi9cIiBzaG91bGQgbWVhbiB3ZSBhcmUgZXhwZWN0aW5nIHNvbWV0aGluZyB0byBjb21lIG5leHQuXG4gICAgICAvLyBJcyB0aGVyZSBhIGZvcndhcmQgc2xhc2g/IElmIHNvLCBuZWdhdGUgcG93ZXJNdWx0aXBsaWVyQ3VycmVudC4gVGhlIG5leHQgdW5pdCBvciBwYXJlbiBncm91cCBpcyBpbiB0aGUgZGVub21pbmF0b3IuXG5cblxuICAgICAgZXhwZWN0aW5nVW5pdCA9IGZhbHNlO1xuXG4gICAgICBpZiAocGFyc2VDaGFyYWN0ZXIoJyonKSkge1xuICAgICAgICAvLyBleHBsaWNpdCBtdWx0aXBsaWNhdGlvblxuICAgICAgICBwb3dlck11bHRpcGxpZXJDdXJyZW50ID0gMTtcbiAgICAgICAgZXhwZWN0aW5nVW5pdCA9IHRydWU7XG4gICAgICB9IGVsc2UgaWYgKHBhcnNlQ2hhcmFjdGVyKCcvJykpIHtcbiAgICAgICAgLy8gZGl2aXNpb25cbiAgICAgICAgcG93ZXJNdWx0aXBsaWVyQ3VycmVudCA9IC0xO1xuICAgICAgICBleHBlY3RpbmdVbml0ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGltcGxpY2l0IG11bHRpcGxpY2F0aW9uXG4gICAgICAgIHBvd2VyTXVsdGlwbGllckN1cnJlbnQgPSAxO1xuICAgICAgfSAvLyBSZXBsYWNlIHRoZSB1bml0IGludG8gdGhlIGF1dG8gdW5pdCBzeXN0ZW1cblxuXG4gICAgICBpZiAocmVzLnVuaXQuYmFzZSkge1xuICAgICAgICB2YXIgYmFzZURpbSA9IHJlcy51bml0LmJhc2Uua2V5O1xuICAgICAgICBVTklUX1NZU1RFTVMuYXV0b1tiYXNlRGltXSA9IHtcbiAgICAgICAgICB1bml0OiByZXMudW5pdCxcbiAgICAgICAgICBwcmVmaXg6IHJlcy5wcmVmaXhcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9IC8vIEhhcyB0aGUgc3RyaW5nIGJlZW4gZW50aXJlbHkgY29uc3VtZWQ/XG5cblxuICAgIHNraXBXaGl0ZXNwYWNlKCk7XG5cbiAgICBpZiAoYykge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb3VsZCBub3QgcGFyc2U6IFwiJyArIHN0ciArICdcIicpO1xuICAgIH0gLy8gSXMgdGhlcmUgYSB0cmFpbGluZyBzbGFzaD9cblxuXG4gICAgaWYgKGV4cGVjdGluZ1VuaXQpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVHJhaWxpbmcgY2hhcmFjdGVyczogXCInICsgc3RyICsgJ1wiJyk7XG4gICAgfSAvLyBJcyB0aGUgcGFyZW50aGVzZXMgc3RhY2sgZW1wdHk/XG5cblxuICAgIGlmIChwb3dlck11bHRpcGxpZXJTdGFjay5sZW5ndGggIT09IDApIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVW5tYXRjaGVkIFwiKFwiIGluIFwiJyArIHRleHQgKyAnXCInKTtcbiAgICB9IC8vIEFyZSB0aGVyZSBhbnkgdW5pdHMgYXQgYWxsP1xuXG5cbiAgICBpZiAodW5pdC51bml0cy5sZW5ndGggPT09IDAgJiYgIW9wdGlvbnMuYWxsb3dOb1VuaXRzKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1wiJyArIHN0ciArICdcIiBjb250YWlucyBubyB1bml0cycpO1xuICAgIH1cblxuICAgIHVuaXQudmFsdWUgPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdW5pdC5fbm9ybWFsaXplKHZhbHVlKSA6IG51bGw7XG4gICAgcmV0dXJuIHVuaXQ7XG4gIH07XG4gIC8qKlxuICAgKiBjcmVhdGUgYSBjb3B5IG9mIHRoaXMgdW5pdFxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcmV0dXJuIHtVbml0fSBSZXR1cm5zIGEgY2xvbmVkIHZlcnNpb24gb2YgdGhlIHVuaXRcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgdW5pdCA9IG5ldyBVbml0KCk7XG4gICAgdW5pdC5maXhQcmVmaXggPSB0aGlzLmZpeFByZWZpeDtcbiAgICB1bml0LnNraXBBdXRvbWF0aWNTaW1wbGlmaWNhdGlvbiA9IHRoaXMuc2tpcEF1dG9tYXRpY1NpbXBsaWZpY2F0aW9uO1xuICAgIHVuaXQudmFsdWUgPSAoMCwgX29iamVjdC5jbG9uZSkodGhpcy52YWx1ZSk7XG4gICAgdW5pdC5kaW1lbnNpb25zID0gdGhpcy5kaW1lbnNpb25zLnNsaWNlKDApO1xuICAgIHVuaXQudW5pdHMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51bml0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdW5pdC51bml0c1tpXSA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBwIGluIHRoaXMudW5pdHNbaV0pIHtcbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KSh0aGlzLnVuaXRzW2ldLCBwKSkge1xuICAgICAgICAgIHVuaXQudW5pdHNbaV1bcF0gPSB0aGlzLnVuaXRzW2ldW3BdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuaXQ7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgdW5pdCBpcyBkZXJpdmVkIChzdWNoIGFzIG0vcywgb3IgY21eMiwgYnV0IG5vdCBOKVxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSB1bml0IGlzIGRlcml2ZWRcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5faXNEZXJpdmVkID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnVuaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnVuaXRzLmxlbmd0aCA+IDEgfHwgTWF0aC5hYnModGhpcy51bml0c1swXS5wb3dlciAtIDEuMCkgPiAxZS0xNTtcbiAgfTtcbiAgLyoqXG4gICAqIE5vcm1hbGl6ZSBhIHZhbHVlLCBiYXNlZCBvbiBpdHMgY3VycmVudGx5IHNldCB1bml0KHMpXG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFufSB2YWx1ZVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW59IG5vcm1hbGl6ZWQgdmFsdWVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5fbm9ybWFsaXplID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgdmFyIHVuaXRWYWx1ZSwgdW5pdE9mZnNldCwgdW5pdFBvd2VyLCB1bml0UHJlZml4VmFsdWU7XG4gICAgdmFyIGNvbnZlcnQ7XG5cbiAgICBpZiAodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0aGlzLnVuaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSBpZiAodGhpcy5faXNEZXJpdmVkKCkpIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBkZXJpdmVkIHVuaXQsIHNvIGRvIG5vdCBhcHBseSBvZmZzZXRzLlxuICAgICAgLy8gRm9yIGV4YW1wbGUsIHdpdGggSiBrZ14tMSBkZWdDXi0xIHlvdSB3b3VsZCBOT1Qgd2FudCB0byBhcHBseSB0aGUgb2Zmc2V0LlxuICAgICAgdmFyIHJlcyA9IHZhbHVlO1xuICAgICAgY29udmVydCA9IFVuaXQuX2dldE51bWJlckNvbnZlcnRlcigoMCwgX2lzLnR5cGVPZikodmFsdWUpKTsgLy8gY29udmVydCB0byBGcmFjdGlvbiBvciBCaWdOdW1iZXIgaWYgbmVlZGVkXG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51bml0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICB1bml0VmFsdWUgPSBjb252ZXJ0KHRoaXMudW5pdHNbaV0udW5pdC52YWx1ZSk7XG4gICAgICAgIHVuaXRQcmVmaXhWYWx1ZSA9IGNvbnZlcnQodGhpcy51bml0c1tpXS5wcmVmaXgudmFsdWUpO1xuICAgICAgICB1bml0UG93ZXIgPSBjb252ZXJ0KHRoaXMudW5pdHNbaV0ucG93ZXIpO1xuICAgICAgICByZXMgPSBtdWx0aXBseVNjYWxhcihyZXMsIHBvdyhtdWx0aXBseVNjYWxhcih1bml0VmFsdWUsIHVuaXRQcmVmaXhWYWx1ZSksIHVuaXRQb3dlcikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIGlzIGEgc2luZ2xlIHVuaXQgb2YgcG93ZXIgMSwgbGlrZSBrZyBvciBkZWdDXG4gICAgICBjb252ZXJ0ID0gVW5pdC5fZ2V0TnVtYmVyQ29udmVydGVyKCgwLCBfaXMudHlwZU9mKSh2YWx1ZSkpOyAvLyBjb252ZXJ0IHRvIEZyYWN0aW9uIG9yIEJpZ051bWJlciBpZiBuZWVkZWRcblxuICAgICAgdW5pdFZhbHVlID0gY29udmVydCh0aGlzLnVuaXRzWzBdLnVuaXQudmFsdWUpO1xuICAgICAgdW5pdE9mZnNldCA9IGNvbnZlcnQodGhpcy51bml0c1swXS51bml0Lm9mZnNldCk7XG4gICAgICB1bml0UHJlZml4VmFsdWUgPSBjb252ZXJ0KHRoaXMudW5pdHNbMF0ucHJlZml4LnZhbHVlKTtcbiAgICAgIHJldHVybiBtdWx0aXBseVNjYWxhcihhZGRTY2FsYXIodmFsdWUsIHVuaXRPZmZzZXQpLCBtdWx0aXBseVNjYWxhcih1bml0VmFsdWUsIHVuaXRQcmVmaXhWYWx1ZSkpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIERlbm9ybWFsaXplIGEgdmFsdWUsIGJhc2VkIG9uIGl0cyBjdXJyZW50bHkgc2V0IHVuaXQocylcbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlZml4VmFsdWVdICAgIE9wdGlvbmFsIHByZWZpeCB2YWx1ZSB0byBiZSB1c2VkIChpZ25vcmVkIGlmIHRoaXMgaXMgYSBkZXJpdmVkIHVuaXQpXG4gICAqIEByZXR1cm4ge251bWJlcn0gZGVub3JtYWxpemVkIHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUuX2Rlbm9ybWFsaXplID0gZnVuY3Rpb24gKHZhbHVlLCBwcmVmaXhWYWx1ZSkge1xuICAgIHZhciB1bml0VmFsdWUsIHVuaXRPZmZzZXQsIHVuaXRQb3dlciwgdW5pdFByZWZpeFZhbHVlO1xuICAgIHZhciBjb252ZXJ0O1xuXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdGhpcy51bml0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lzRGVyaXZlZCgpKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgZGVyaXZlZCB1bml0LCBzbyBkbyBub3QgYXBwbHkgb2Zmc2V0cy5cbiAgICAgIC8vIEZvciBleGFtcGxlLCB3aXRoIEoga2deLTEgZGVnQ14tMSB5b3Ugd291bGQgTk9UIHdhbnQgdG8gYXBwbHkgdGhlIG9mZnNldC5cbiAgICAgIC8vIEFsc28sIHByZWZpeFZhbHVlIGlzIGlnbm9yZWQtLWJ1dCB3ZSB3aWxsIHN0aWxsIHVzZSB0aGUgcHJlZml4IHZhbHVlIHN0b3JlZCBpbiBlYWNoIHVuaXQsIHNpbmNlIGtnIGlzIHVzdWFsbHkgcHJlZmVyYWJsZSB0byBnIHVubGVzcyB0aGUgdXNlciBkZWNpZGVzIG90aGVyd2lzZS5cbiAgICAgIHZhciByZXMgPSB2YWx1ZTtcbiAgICAgIGNvbnZlcnQgPSBVbml0Ll9nZXROdW1iZXJDb252ZXJ0ZXIoKDAsIF9pcy50eXBlT2YpKHZhbHVlKSk7IC8vIGNvbnZlcnQgdG8gRnJhY3Rpb24gb3IgQmlnTnVtYmVyIGlmIG5lZWRlZFxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudW5pdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdW5pdFZhbHVlID0gY29udmVydCh0aGlzLnVuaXRzW2ldLnVuaXQudmFsdWUpO1xuICAgICAgICB1bml0UHJlZml4VmFsdWUgPSBjb252ZXJ0KHRoaXMudW5pdHNbaV0ucHJlZml4LnZhbHVlKTtcbiAgICAgICAgdW5pdFBvd2VyID0gY29udmVydCh0aGlzLnVuaXRzW2ldLnBvd2VyKTtcbiAgICAgICAgcmVzID0gZGl2aWRlU2NhbGFyKHJlcywgcG93KG11bHRpcGx5U2NhbGFyKHVuaXRWYWx1ZSwgdW5pdFByZWZpeFZhbHVlKSwgdW5pdFBvd2VyKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFRoaXMgaXMgYSBzaW5nbGUgdW5pdCBvZiBwb3dlciAxLCBsaWtlIGtnIG9yIGRlZ0NcbiAgICAgIGNvbnZlcnQgPSBVbml0Ll9nZXROdW1iZXJDb252ZXJ0ZXIoKDAsIF9pcy50eXBlT2YpKHZhbHVlKSk7IC8vIGNvbnZlcnQgdG8gRnJhY3Rpb24gb3IgQmlnTnVtYmVyIGlmIG5lZWRlZFxuXG4gICAgICB1bml0VmFsdWUgPSBjb252ZXJ0KHRoaXMudW5pdHNbMF0udW5pdC52YWx1ZSk7XG4gICAgICB1bml0UHJlZml4VmFsdWUgPSBjb252ZXJ0KHRoaXMudW5pdHNbMF0ucHJlZml4LnZhbHVlKTtcbiAgICAgIHVuaXRPZmZzZXQgPSBjb252ZXJ0KHRoaXMudW5pdHNbMF0udW5pdC5vZmZzZXQpO1xuXG4gICAgICBpZiAocHJlZml4VmFsdWUgPT09IHVuZGVmaW5lZCB8fCBwcmVmaXhWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gc3VidHJhY3QoZGl2aWRlU2NhbGFyKGRpdmlkZVNjYWxhcih2YWx1ZSwgdW5pdFZhbHVlKSwgdW5pdFByZWZpeFZhbHVlKSwgdW5pdE9mZnNldCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gc3VidHJhY3QoZGl2aWRlU2NhbGFyKGRpdmlkZVNjYWxhcih2YWx1ZSwgdW5pdFZhbHVlKSwgcHJlZml4VmFsdWUpLCB1bml0T2Zmc2V0KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBGaW5kIGEgdW5pdCBmcm9tIGEgc3RyaW5nXG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgICAgICAgICAgICAgIEEgc3RyaW5nIGxpa2UgJ2NtJyBvciAnaW5jaCdcbiAgICogQHJldHVybnMge09iamVjdCB8IG51bGx9IHJlc3VsdCAgV2hlbiBmb3VuZCwgYW4gb2JqZWN0IHdpdGggZmllbGRzIHVuaXQgYW5kXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeCBpcyByZXR1cm5lZC4gRWxzZSwgbnVsbCBpcyByZXR1cm5lZC5cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfZmluZFVuaXQoc3RyKSB7XG4gICAgLy8gRmlyc3QsIG1hdGNoIHVuaXRzIG5hbWVzIGV4YWN0bHkuIEZvciBleGFtcGxlLCBhIHVzZXIgY291bGQgZGVmaW5lICdtbScgYXMgMTBeLTQgbSwgd2hpY2ggaXMgc2lsbHksIGJ1dCB0aGVuIHdlIHdvdWxkIHdhbnQgJ21tJyB0byBtYXRjaCB0aGUgdXNlci1kZWZpbmVkIHVuaXQuXG4gICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShVTklUUywgc3RyKSkge1xuICAgICAgdmFyIHVuaXQgPSBVTklUU1tzdHJdO1xuICAgICAgdmFyIHByZWZpeCA9IHVuaXQucHJlZml4ZXNbJyddO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdW5pdDogdW5pdCxcbiAgICAgICAgcHJlZml4OiBwcmVmaXhcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX25hbWUgaW4gVU5JVFMpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoVU5JVFMsIF9uYW1lKSkge1xuICAgICAgICBpZiAoKDAsIF9zdHJpbmcuZW5kc1dpdGgpKHN0ciwgX25hbWUpKSB7XG4gICAgICAgICAgdmFyIF91bml0ID0gVU5JVFNbX25hbWVdO1xuICAgICAgICAgIHZhciBwcmVmaXhMZW4gPSBzdHIubGVuZ3RoIC0gX25hbWUubGVuZ3RoO1xuICAgICAgICAgIHZhciBwcmVmaXhOYW1lID0gc3RyLnN1YnN0cmluZygwLCBwcmVmaXhMZW4pO1xuXG4gICAgICAgICAgdmFyIF9wcmVmaXggPSAoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoX3VuaXQucHJlZml4ZXMsIHByZWZpeE5hbWUpID8gX3VuaXQucHJlZml4ZXNbcHJlZml4TmFtZV0gOiB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBpZiAoX3ByZWZpeCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBzdG9yZSB1bml0LCBwcmVmaXgsIGFuZCB2YWx1ZVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdW5pdDogX3VuaXQsXG4gICAgICAgICAgICAgIHByZWZpeDogX3ByZWZpeFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvKipcbiAgICogVGVzdCBpZiB0aGUgZ2l2ZW4gZXhwcmVzc2lvbiBpcyBhIHVuaXQuXG4gICAqIFRoZSB1bml0IGNhbiBoYXZlIGEgcHJlZml4IGJ1dCBjYW5ub3QgaGF2ZSBhIHZhbHVlLlxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgIEEgc3RyaW5nIHRvIGJlIHRlc3RlZCB3aGV0aGVyIGl0IGlzIGEgdmFsdWUgbGVzcyB1bml0LlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIFRoZSB1bml0IGNhbiBoYXZlIHByZWZpeCwgbGlrZSBcImNtXCJcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gICAgICB0cnVlIGlmIHRoZSBnaXZlbiBzdHJpbmcgaXMgYSB1bml0XG4gICAqL1xuXG5cbiAgVW5pdC5pc1ZhbHVlbGVzc1VuaXQgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiBfZmluZFVuaXQobmFtZSkgIT09IG51bGw7XG4gIH07XG4gIC8qKlxuICAgKiBjaGVjayBpZiB0aGlzIHVuaXQgaGFzIGdpdmVuIGJhc2UgdW5pdFxuICAgKiBJZiB0aGlzIHVuaXQgaXMgYSBkZXJpdmVkIHVuaXQsIHRoaXMgd2lsbCBBTFdBWVMgcmV0dXJuIGZhbHNlLCBzaW5jZSBieSBkZWZpbml0aW9uIGJhc2UgdW5pdHMgYXJlIG5vdCBkZXJpdmVkLlxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge0JBU0VfVU5JVFMgfCBzdHJpbmcgfCB1bmRlZmluZWR9IGJhc2VcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5oYXNCYXNlID0gZnVuY3Rpb24gKGJhc2UpIHtcbiAgICBpZiAodHlwZW9mIGJhc2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBiYXNlID0gQkFTRV9VTklUU1tiYXNlXTtcbiAgICB9XG5cbiAgICBpZiAoIWJhc2UpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IC8vIEFsbCBkaW1lbnNpb25zIG11c3QgYmUgdGhlIHNhbWVcblxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBCQVNFX0RJTUVOU0lPTlMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChNYXRoLmFicygodGhpcy5kaW1lbnNpb25zW2ldIHx8IDApIC0gKGJhc2UuZGltZW5zaW9uc1tpXSB8fCAwKSkgPiAxZS0xMikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGlzIHVuaXQgaGFzIGEgYmFzZSBvciBiYXNlcyBlcXVhbCB0byBhbm90aGVyIGJhc2Ugb3IgYmFzZXNcbiAgICogRm9yIGRlcml2ZWQgdW5pdHMsIHRoZSBleHBvbmVudCBvbiBlYWNoIGJhc2UgYWxzbyBtdXN0IG1hdGNoXG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7VW5pdH0gb3RoZXJcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBlcXVhbCBiYXNlXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUuZXF1YWxCYXNlID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgLy8gQWxsIGRpbWVuc2lvbnMgbXVzdCBiZSB0aGUgc2FtZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgQkFTRV9ESU1FTlNJT05TLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoTWF0aC5hYnMoKHRoaXMuZGltZW5zaW9uc1tpXSB8fCAwKSAtIChvdGhlci5kaW1lbnNpb25zW2ldIHx8IDApKSA+IDFlLTEyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfTtcbiAgLyoqXG4gICAqIENoZWNrIGlmIHRoaXMgdW5pdCBlcXVhbHMgYW5vdGhlciB1bml0XG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7VW5pdH0gb3RoZXJcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gdHJ1ZSBpZiBib3RoIHVuaXRzIGFyZSBlcXVhbFxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChvdGhlcikge1xuICAgIHJldHVybiB0aGlzLmVxdWFsQmFzZShvdGhlcikgJiYgZXF1YWwodGhpcy52YWx1ZSwgb3RoZXIudmFsdWUpO1xuICB9O1xuICAvKipcbiAgICogTXVsdGlwbHkgdGhpcyB1bml0IHdpdGggYW5vdGhlciBvbmVcbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHBhcmFtIHtVbml0fSBvdGhlclxuICAgKiBAcmV0dXJuIHtVbml0fSBwcm9kdWN0IG9mIHRoaXMgdW5pdCBhbmQgdGhlIG90aGVyIHVuaXRcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5tdWx0aXBseSA9IGZ1bmN0aW9uIChvdGhlcikge1xuICAgIHZhciByZXMgPSB0aGlzLmNsb25lKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gRGltZW5zaW9ucyBhcnJheXMgbWF5IGJlIG9mIGRpZmZlcmVudCBsZW5ndGhzLiBEZWZhdWx0IHRvIDAuXG4gICAgICByZXMuZGltZW5zaW9uc1tpXSA9ICh0aGlzLmRpbWVuc2lvbnNbaV0gfHwgMCkgKyAob3RoZXIuZGltZW5zaW9uc1tpXSB8fCAwKTtcbiAgICB9IC8vIEFwcGVuZCBvdGhlcidzIHVuaXRzIGxpc3Qgb250byByZXNcblxuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG90aGVyLnVuaXRzLmxlbmd0aDsgX2krKykge1xuICAgICAgLy8gTWFrZSBhIGRlZXAgY29weVxuICAgICAgdmFyIGludmVydGVkID0ge307XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBvdGhlci51bml0c1tfaV0pIHtcbiAgICAgICAgaW52ZXJ0ZWRba2V5XSA9IG90aGVyLnVuaXRzW19pXVtrZXldO1xuICAgICAgfVxuXG4gICAgICByZXMudW5pdHMucHVzaChpbnZlcnRlZCk7XG4gICAgfSAvLyBJZiBhdCBsZWFzdCBvbmUgb3BlcmFuZCBoYXMgYSB2YWx1ZSwgdGhlbiB0aGUgcmVzdWx0IHNob3VsZCBhbHNvIGhhdmUgYSB2YWx1ZVxuXG5cbiAgICBpZiAodGhpcy52YWx1ZSAhPT0gbnVsbCB8fCBvdGhlci52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgdmFyIHZhbFRoaXMgPSB0aGlzLnZhbHVlID09PSBudWxsID8gdGhpcy5fbm9ybWFsaXplKDEpIDogdGhpcy52YWx1ZTtcbiAgICAgIHZhciB2YWxPdGhlciA9IG90aGVyLnZhbHVlID09PSBudWxsID8gb3RoZXIuX25vcm1hbGl6ZSgxKSA6IG90aGVyLnZhbHVlO1xuICAgICAgcmVzLnZhbHVlID0gbXVsdGlwbHlTY2FsYXIodmFsVGhpcywgdmFsT3RoZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMudmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIHJlcy5za2lwQXV0b21hdGljU2ltcGxpZmljYXRpb24gPSBmYWxzZTtcbiAgICByZXR1cm4gZ2V0TnVtZXJpY0lmVW5pdGxlc3MocmVzKTtcbiAgfTtcbiAgLyoqXG4gICAqIERpdmlkZSB0aGlzIHVuaXQgYnkgYW5vdGhlciBvbmVcbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHBhcmFtIHtVbml0fSBvdGhlclxuICAgKiBAcmV0dXJuIHtVbml0fSByZXN1bHQgb2YgZGl2aWRpbmcgdGhpcyB1bml0IGJ5IHRoZSBvdGhlciB1bml0XG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUuZGl2aWRlID0gZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgdmFyIHJlcyA9IHRoaXMuY2xvbmUoKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgQkFTRV9ESU1FTlNJT05TLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBEaW1lbnNpb25zIGFycmF5cyBtYXkgYmUgb2YgZGlmZmVyZW50IGxlbmd0aHMuIERlZmF1bHQgdG8gMC5cbiAgICAgIHJlcy5kaW1lbnNpb25zW2ldID0gKHRoaXMuZGltZW5zaW9uc1tpXSB8fCAwKSAtIChvdGhlci5kaW1lbnNpb25zW2ldIHx8IDApO1xuICAgIH0gLy8gSW52ZXJ0IGFuZCBhcHBlbmQgb3RoZXIncyB1bml0cyBsaXN0IG9udG8gcmVzXG5cblxuICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IG90aGVyLnVuaXRzLmxlbmd0aDsgX2kyKyspIHtcbiAgICAgIC8vIE1ha2UgYSBkZWVwIGNvcHlcbiAgICAgIHZhciBpbnZlcnRlZCA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gb3RoZXIudW5pdHNbX2kyXSkge1xuICAgICAgICBpbnZlcnRlZFtrZXldID0gb3RoZXIudW5pdHNbX2kyXVtrZXldO1xuICAgICAgfVxuXG4gICAgICBpbnZlcnRlZC5wb3dlciA9IC1pbnZlcnRlZC5wb3dlcjtcbiAgICAgIHJlcy51bml0cy5wdXNoKGludmVydGVkKTtcbiAgICB9IC8vIElmIGF0IGxlYXN0IG9uZSBvcGVyYW5kIGhhcyBhIHZhbHVlLCB0aGUgcmVzdWx0IHNob3VsZCBoYXZlIGEgdmFsdWVcblxuXG4gICAgaWYgKHRoaXMudmFsdWUgIT09IG51bGwgfHwgb3RoZXIudmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHZhciB2YWxUaGlzID0gdGhpcy52YWx1ZSA9PT0gbnVsbCA/IHRoaXMuX25vcm1hbGl6ZSgxKSA6IHRoaXMudmFsdWU7XG4gICAgICB2YXIgdmFsT3RoZXIgPSBvdGhlci52YWx1ZSA9PT0gbnVsbCA/IG90aGVyLl9ub3JtYWxpemUoMSkgOiBvdGhlci52YWx1ZTtcbiAgICAgIHJlcy52YWx1ZSA9IGRpdmlkZVNjYWxhcih2YWxUaGlzLCB2YWxPdGhlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcy52YWx1ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmVzLnNraXBBdXRvbWF0aWNTaW1wbGlmaWNhdGlvbiA9IGZhbHNlO1xuICAgIHJldHVybiBnZXROdW1lcmljSWZVbml0bGVzcyhyZXMpO1xuICB9O1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBwb3dlciBvZiBhIHVuaXRcbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHBhcmFtIHtudW1iZXIgfCBGcmFjdGlvbiB8IEJpZ051bWJlcn0gcFxuICAgKiBAcmV0dXJucyB7VW5pdH0gICAgICBUaGUgcmVzdWx0OiB0aGlzXnBcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5wb3cgPSBmdW5jdGlvbiAocCkge1xuICAgIHZhciByZXMgPSB0aGlzLmNsb25lKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gRGltZW5zaW9ucyBhcnJheXMgbWF5IGJlIG9mIGRpZmZlcmVudCBsZW5ndGhzLiBEZWZhdWx0IHRvIDAuXG4gICAgICByZXMuZGltZW5zaW9uc1tpXSA9ICh0aGlzLmRpbWVuc2lvbnNbaV0gfHwgMCkgKiBwO1xuICAgIH0gLy8gQWRqdXN0IHRoZSBwb3dlciBvZiBlYWNoIHVuaXQgaW4gdGhlIGxpc3RcblxuXG4gICAgZm9yICh2YXIgX2kzID0gMDsgX2kzIDwgcmVzLnVuaXRzLmxlbmd0aDsgX2kzKyspIHtcbiAgICAgIHJlcy51bml0c1tfaTNdLnBvd2VyICo9IHA7XG4gICAgfVxuXG4gICAgaWYgKHJlcy52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgcmVzLnZhbHVlID0gcG93KHJlcy52YWx1ZSwgcCk7IC8vIG9ubHkgYWxsb3cgbnVtZXJpYyBvdXRwdXQsIHdlIGRvbid0IHdhbnQgdG8gcmV0dXJuIGEgQ29tcGxleCBudW1iZXJcbiAgICAgIC8vIGlmICghaXNOdW1lcmljKHJlcy52YWx1ZSkpIHtcbiAgICAgIC8vICByZXMudmFsdWUgPSBOYU5cbiAgICAgIC8vIH1cbiAgICAgIC8vIFVwZGF0ZTogQ29tcGxleCBzdXBwb3J0ZWQgbm93XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcy52YWx1ZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmVzLnNraXBBdXRvbWF0aWNTaW1wbGlmaWNhdGlvbiA9IGZhbHNlO1xuICAgIHJldHVybiBnZXROdW1lcmljSWZVbml0bGVzcyhyZXMpO1xuICB9O1xuICAvKipcbiAgICogUmV0dXJuIHRoZSBudW1lcmljIHZhbHVlIG9mIHRoaXMgdW5pdCBpZiBpdCBpcyBkaW1lbnNpb25sZXNzLCBoYXMgYSB2YWx1ZSwgYW5kIGNvbmZpZy5wcmVkaWN0YWJsZSA9PSBmYWxzZTsgb3IgdGhlIG9yaWdpbmFsIHVuaXQgb3RoZXJ3aXNlXG4gICAqIEBwYXJhbSB7VW5pdH0gdW5pdFxuICAgKiBAcmV0dXJucyB7bnVtYmVyIHwgRnJhY3Rpb24gfCBCaWdOdW1iZXIgfCBVbml0fSAgVGhlIG51bWVyaWMgdmFsdWUgb2YgdGhlIHVuaXQgaWYgY29uZGl0aW9ucyBhcmUgbWV0LCBvciB0aGUgb3JpZ2luYWwgdW5pdCBvdGhlcndpc2VcbiAgICovXG5cblxuICBmdW5jdGlvbiBnZXROdW1lcmljSWZVbml0bGVzcyh1bml0KSB7XG4gICAgaWYgKHVuaXQuZXF1YWxCYXNlKEJBU0VfVU5JVFMuTk9ORSkgJiYgdW5pdC52YWx1ZSAhPT0gbnVsbCAmJiAhY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICByZXR1cm4gdW5pdC52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuaXQ7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGFic29sdXRlIHZhbHVlIG9mIGEgdW5pdFxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge251bWJlciB8IEZyYWN0aW9uIHwgQmlnTnVtYmVyfSB4XG4gICAqIEByZXR1cm5zIHtVbml0fSAgICAgIFRoZSByZXN1bHQ6IHx4fCwgYWJzb2x1dGUgdmFsdWUgb2YgeFxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLmFicyA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBUaGlzIGdpdmVzIGNvcnJlY3QsIGJ1dCB1bmV4cGVjdGVkLCByZXN1bHRzIGZvciB1bml0cyB3aXRoIGFuIG9mZnNldC5cbiAgICAvLyBGb3IgZXhhbXBsZSwgYWJzKC0yODMuMTUgZGVnQykgPSAtMjYzLjE1IGRlZ0MgISEhXG4gICAgdmFyIHJldCA9IHRoaXMuY2xvbmUoKTtcbiAgICByZXQudmFsdWUgPSByZXQudmFsdWUgIT09IG51bGwgPyBhYnMocmV0LnZhbHVlKSA6IG51bGw7XG5cbiAgICBmb3IgKHZhciBpIGluIHJldC51bml0cykge1xuICAgICAgaWYgKHJldC51bml0c1tpXS51bml0Lm5hbWUgPT09ICdWQScgfHwgcmV0LnVuaXRzW2ldLnVuaXQubmFtZSA9PT0gJ1ZBUicpIHtcbiAgICAgICAgcmV0LnVuaXRzW2ldLnVuaXQgPSBVTklUUy5XO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIC8qKlxuICAgKiBDb252ZXJ0IHRoZSB1bml0IHRvIGEgc3BlY2lmaWMgdW5pdCBuYW1lLlxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVuaXR9IHZhbHVlbGVzc1VuaXQgICBBIHVuaXQgd2l0aG91dCB2YWx1ZS4gQ2FuIGhhdmUgcHJlZml4LCBsaWtlIFwiY21cIlxuICAgKiBAcmV0dXJucyB7VW5pdH0gUmV0dXJucyBhIGNsb25lIG9mIHRoZSB1bml0IHdpdGggYSBmaXhlZCBwcmVmaXggYW5kIHVuaXQuXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUudG8gPSBmdW5jdGlvbiAodmFsdWVsZXNzVW5pdCkge1xuICAgIHZhciBvdGhlcjtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlID09PSBudWxsID8gdGhpcy5fbm9ybWFsaXplKDEpIDogdGhpcy52YWx1ZTtcblxuICAgIGlmICh0eXBlb2YgdmFsdWVsZXNzVW5pdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIG90aGVyID0gbmV3IFVuaXQobnVsbCwgdmFsdWVsZXNzVW5pdClcbiAgICAgIG90aGVyID0gVW5pdC5wYXJzZSh2YWx1ZWxlc3NVbml0KTtcblxuICAgICAgaWYgKCF0aGlzLmVxdWFsQmFzZShvdGhlcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5pdHMgZG8gbm90IG1hdGNoICgnXCIuY29uY2F0KG90aGVyLnRvU3RyaW5nKCksIFwiJyAhPSAnXCIpLmNvbmNhdCh0aGlzLnRvU3RyaW5nKCksIFwiJylcIikpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3RoZXIudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29udmVydCB0byBhIHVuaXQgd2l0aCBhIHZhbHVlJyk7XG4gICAgICB9XG5cbiAgICAgIG90aGVyLnZhbHVlID0gKDAsIF9vYmplY3QuY2xvbmUpKHZhbHVlKTtcbiAgICAgIG90aGVyLmZpeFByZWZpeCA9IHRydWU7XG4gICAgICBvdGhlci5za2lwQXV0b21hdGljU2ltcGxpZmljYXRpb24gPSB0cnVlO1xuICAgICAgcmV0dXJuIG90aGVyO1xuICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc1VuaXQpKHZhbHVlbGVzc1VuaXQpKSB7XG4gICAgICBpZiAoIXRoaXMuZXF1YWxCYXNlKHZhbHVlbGVzc1VuaXQpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuaXRzIGRvIG5vdCBtYXRjaCAoJ1wiLmNvbmNhdCh2YWx1ZWxlc3NVbml0LnRvU3RyaW5nKCksIFwiJyAhPSAnXCIpLmNvbmNhdCh0aGlzLnRvU3RyaW5nKCksIFwiJylcIikpO1xuICAgICAgfVxuXG4gICAgICBpZiAodmFsdWVsZXNzVW5pdC52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IHRvIGEgdW5pdCB3aXRoIGEgdmFsdWUnKTtcbiAgICAgIH1cblxuICAgICAgb3RoZXIgPSB2YWx1ZWxlc3NVbml0LmNsb25lKCk7XG4gICAgICBvdGhlci52YWx1ZSA9ICgwLCBfb2JqZWN0LmNsb25lKSh2YWx1ZSk7XG4gICAgICBvdGhlci5maXhQcmVmaXggPSB0cnVlO1xuICAgICAgb3RoZXIuc2tpcEF1dG9tYXRpY1NpbXBsaWZpY2F0aW9uID0gdHJ1ZTtcbiAgICAgIHJldHVybiBvdGhlcjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdHJpbmcgb3IgVW5pdCBleHBlY3RlZCBhcyBwYXJhbWV0ZXInKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSB1bml0IHdoZW4gcmVwcmVzZW50ZWQgd2l0aCBnaXZlbiB2YWx1ZWxlc3MgdW5pdFxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge3N0cmluZyB8IFVuaXR9IHZhbHVlbGVzc1VuaXQgICAgRm9yIGV4YW1wbGUgJ2NtJyBvciAnaW5jaCdcbiAgICogQHJldHVybiB7bnVtYmVyfSBSZXR1cm5zIHRoZSB1bml0IHZhbHVlIGFzIG51bWJlci5cbiAgICovXG4gIC8vIFRPRE86IGRlcHJlY2F0ZSBVbml0LnRvTnVtYmVyPyBJdCdzIGFsd2F5cyBiZXR0ZXIgdG8gdXNlIHRvTnVtZXJpY1xuXG5cbiAgVW5pdC5wcm90b3R5cGUudG9OdW1iZXIgPSBmdW5jdGlvbiAodmFsdWVsZXNzVW5pdCkge1xuICAgIHJldHVybiB0b051bWJlcih0aGlzLnRvTnVtZXJpYyh2YWx1ZWxlc3NVbml0KSk7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSB1bml0IGluIHRoZSBvcmlnaW5hbCBudW1lcmljIHR5cGVcbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVbml0fSB2YWx1ZWxlc3NVbml0ICAgIEZvciBleGFtcGxlICdjbScgb3IgJ2luY2gnXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9ufSBSZXR1cm5zIHRoZSB1bml0IHZhbHVlXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUudG9OdW1lcmljID0gZnVuY3Rpb24gKHZhbHVlbGVzc1VuaXQpIHtcbiAgICB2YXIgb3RoZXI7XG5cbiAgICBpZiAodmFsdWVsZXNzVW5pdCkge1xuICAgICAgLy8gQWxsb3cgZ2V0dGluZyB0aGUgbnVtZXJpYyB2YWx1ZSB3aXRob3V0IGNvbnZlcnRpbmcgdG8gYSBkaWZmZXJlbnQgdW5pdFxuICAgICAgb3RoZXIgPSB0aGlzLnRvKHZhbHVlbGVzc1VuaXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdGhlciA9IHRoaXMuY2xvbmUoKTtcbiAgICB9XG5cbiAgICBpZiAob3RoZXIuX2lzRGVyaXZlZCgpIHx8IG90aGVyLnVuaXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG90aGVyLl9kZW5vcm1hbGl6ZShvdGhlci52YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvdGhlci5fZGVub3JtYWxpemUob3RoZXIudmFsdWUsIG90aGVyLnVuaXRzWzBdLnByZWZpeC52YWx1ZSk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB1bml0LlxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0KCk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB1bml0XG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYSBKU09OIG9iamVjdCBzdHJ1Y3R1cmVkIGFzOlxuICAgKiAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiVW5pdFwiLCBcInZhbHVlXCI6IDIsIFwidW5pdFwiOiBcImNtXCIsIFwiZml4UHJlZml4XCI6IGZhbHNlfWBcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ1VuaXQnLFxuICAgICAgdmFsdWU6IHRoaXMuX2Rlbm9ybWFsaXplKHRoaXMudmFsdWUpLFxuICAgICAgdW5pdDogdGhpcy5mb3JtYXRVbml0cygpLFxuICAgICAgZml4UHJlZml4OiB0aGlzLmZpeFByZWZpeFxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhIFVuaXQgZnJvbSBhIEpTT04gb2JqZWN0XG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBIEpTT04gb2JqZWN0IHN0cnVjdHVyZWQgYXM6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiVW5pdFwiLCBcInZhbHVlXCI6IDIsIFwidW5pdFwiOiBcImNtXCIsIFwiZml4UHJlZml4XCI6IGZhbHNlfWBcbiAgICogQHJldHVybiB7VW5pdH1cbiAgICovXG5cblxuICBVbml0LmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICB2YXIgdW5pdCA9IG5ldyBVbml0KGpzb24udmFsdWUsIGpzb24udW5pdCk7XG4gICAgdW5pdC5maXhQcmVmaXggPSBqc29uLmZpeFByZWZpeCB8fCBmYWxzZTtcbiAgICByZXR1cm4gdW5pdDtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdW5pdC5cbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLnZhbHVlT2YgPSBVbml0LnByb3RvdHlwZS50b1N0cmluZztcbiAgLyoqXG4gICAqIFNpbXBsaWZ5IHRoaXMgVW5pdCdzIHVuaXQgbGlzdCBhbmQgcmV0dXJuIGEgbmV3IFVuaXQgd2l0aCB0aGUgc2ltcGxpZmllZCBsaXN0LlxuICAgKiBUaGUgcmV0dXJuZWQgVW5pdCB3aWxsIGNvbnRhaW4gYSBsaXN0IG9mIHRoZSBcImJlc3RcIiB1bml0cyBmb3IgZm9ybWF0dGluZy5cbiAgICovXG5cbiAgVW5pdC5wcm90b3R5cGUuc2ltcGxpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJldCA9IHRoaXMuY2xvbmUoKTtcbiAgICB2YXIgcHJvcG9zZWRVbml0TGlzdCA9IFtdOyAvLyBTZWFyY2ggZm9yIGEgbWF0Y2hpbmcgYmFzZVxuXG4gICAgdmFyIG1hdGNoaW5nQmFzZTtcblxuICAgIGZvciAodmFyIGtleSBpbiBjdXJyZW50VW5pdFN5c3RlbSkge1xuICAgICAgaWYgKHJldC5oYXNCYXNlKEJBU0VfVU5JVFNba2V5XSkpIHtcbiAgICAgICAgbWF0Y2hpbmdCYXNlID0ga2V5O1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWF0Y2hpbmdCYXNlID09PSAnTk9ORScpIHtcbiAgICAgIHJldC51bml0cyA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbWF0Y2hpbmdVbml0O1xuXG4gICAgICBpZiAobWF0Y2hpbmdCYXNlKSB7XG4gICAgICAgIC8vIERvZXMgdGhlIHVuaXQgc3lzdGVtIGhhdmUgYSBtYXRjaGluZyB1bml0P1xuICAgICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKGN1cnJlbnRVbml0U3lzdGVtLCBtYXRjaGluZ0Jhc2UpKSB7XG4gICAgICAgICAgbWF0Y2hpbmdVbml0ID0gY3VycmVudFVuaXRTeXN0ZW1bbWF0Y2hpbmdCYXNlXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobWF0Y2hpbmdVbml0KSB7XG4gICAgICAgIHJldC51bml0cyA9IFt7XG4gICAgICAgICAgdW5pdDogbWF0Y2hpbmdVbml0LnVuaXQsXG4gICAgICAgICAgcHJlZml4OiBtYXRjaGluZ1VuaXQucHJlZml4LFxuICAgICAgICAgIHBvd2VyOiAxLjBcbiAgICAgICAgfV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBNdWx0aXBsZSB1bml0cyBvciB1bml0cyB3aXRoIHBvd2VycyBhcmUgZm9ybWF0dGVkIGxpa2UgdGhpczpcbiAgICAgICAgLy8gNSAoa2cgbV4yKSAvIChzXjMgbW9sKVxuICAgICAgICAvLyBCdWlsZCBhbiByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBiYXNlIHVuaXRzIG9mIHRoZSBjdXJyZW50IHVuaXQgc3lzdGVtXG4gICAgICAgIHZhciBtaXNzaW5nQmFzZURpbSA9IGZhbHNlO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgQkFTRV9ESU1FTlNJT05TLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgdmFyIGJhc2VEaW0gPSBCQVNFX0RJTUVOU0lPTlNbaV07XG5cbiAgICAgICAgICBpZiAoTWF0aC5hYnMocmV0LmRpbWVuc2lvbnNbaV0gfHwgMCkgPiAxZS0xMikge1xuICAgICAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShjdXJyZW50VW5pdFN5c3RlbSwgYmFzZURpbSkpIHtcbiAgICAgICAgICAgICAgcHJvcG9zZWRVbml0TGlzdC5wdXNoKHtcbiAgICAgICAgICAgICAgICB1bml0OiBjdXJyZW50VW5pdFN5c3RlbVtiYXNlRGltXS51bml0LFxuICAgICAgICAgICAgICAgIHByZWZpeDogY3VycmVudFVuaXRTeXN0ZW1bYmFzZURpbV0ucHJlZml4LFxuICAgICAgICAgICAgICAgIHBvd2VyOiByZXQuZGltZW5zaW9uc1tpXSB8fCAwXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbWlzc2luZ0Jhc2VEaW0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBJcyB0aGUgcHJvcG9zZWQgdW5pdCBsaXN0IFwic2ltcGxlclwiIHRoYW4gdGhlIGV4aXN0aW5nIG9uZT9cblxuXG4gICAgICAgIGlmIChwcm9wb3NlZFVuaXRMaXN0Lmxlbmd0aCA8IHJldC51bml0cy5sZW5ndGggJiYgIW1pc3NpbmdCYXNlRGltKSB7XG4gICAgICAgICAgLy8gUmVwbGFjZSB0aGlzIHVuaXQgbGlzdCB3aXRoIHRoZSBwcm9wb3NlZCBsaXN0XG4gICAgICAgICAgcmV0LnVuaXRzID0gcHJvcG9zZWRVbml0TGlzdDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgbmV3IFVuaXQgaW4gdGhlIFNJIHN5c3RlbSB3aXRoIHRoZSBzYW1lIHZhbHVlIGFzIHRoaXMgb25lXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUudG9TSSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmV0ID0gdGhpcy5jbG9uZSgpO1xuICAgIHZhciBwcm9wb3NlZFVuaXRMaXN0ID0gW107IC8vIE11bHRpcGxlIHVuaXRzIG9yIHVuaXRzIHdpdGggcG93ZXJzIGFyZSBmb3JtYXR0ZWQgbGlrZSB0aGlzOlxuICAgIC8vIDUgKGtnIG1eMikgLyAoc14zIG1vbClcbiAgICAvLyBCdWlsZCBhbiByZXByZXNlbnRhdGlvbiBmcm9tIHRoZSBiYXNlIHVuaXRzIG9mIHRoZSBTSSB1bml0IHN5c3RlbVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBCQVNFX0RJTUVOU0lPTlMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBiYXNlRGltID0gQkFTRV9ESU1FTlNJT05TW2ldO1xuXG4gICAgICBpZiAoTWF0aC5hYnMocmV0LmRpbWVuc2lvbnNbaV0gfHwgMCkgPiAxZS0xMikge1xuICAgICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKFVOSVRfU1lTVEVNUy5zaSwgYmFzZURpbSkpIHtcbiAgICAgICAgICBwcm9wb3NlZFVuaXRMaXN0LnB1c2goe1xuICAgICAgICAgICAgdW5pdDogVU5JVF9TWVNURU1TLnNpW2Jhc2VEaW1dLnVuaXQsXG4gICAgICAgICAgICBwcmVmaXg6IFVOSVRfU1lTVEVNUy5zaVtiYXNlRGltXS5wcmVmaXgsXG4gICAgICAgICAgICBwb3dlcjogcmV0LmRpbWVuc2lvbnNbaV0gfHwgMFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGV4cHJlc3MgY3VzdG9tIHVuaXQgJyArIGJhc2VEaW0gKyAnIGluIFNJIHVuaXRzJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIFJlcGxhY2UgdGhpcyB1bml0IGxpc3Qgd2l0aCB0aGUgcHJvcG9zZWQgbGlzdFxuXG5cbiAgICByZXQudW5pdHMgPSBwcm9wb3NlZFVuaXRMaXN0O1xuICAgIHJldC5maXhQcmVmaXggPSB0cnVlO1xuICAgIHJldC5za2lwQXV0b21hdGljU2ltcGxpZmljYXRpb24gPSB0cnVlO1xuICAgIHJldHVybiByZXQ7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHVuaXRzIG9mIHRoaXMgVW5pdCwgd2l0aG91dCB0aGUgdmFsdWUuIFRoZSB1bml0IGxpc3QgaXMgZm9ybWF0dGVkIGFzLWlzIHdpdGhvdXQgZmlyc3QgYmVpbmcgc2ltcGxpZmllZC5cbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLmZvcm1hdFVuaXRzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzdHJOdW0gPSAnJztcbiAgICB2YXIgc3RyRGVuID0gJyc7XG4gICAgdmFyIG5OdW0gPSAwO1xuICAgIHZhciBuRGVuID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy51bml0cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHRoaXMudW5pdHNbaV0ucG93ZXIgPiAwKSB7XG4gICAgICAgIG5OdW0rKztcbiAgICAgICAgc3RyTnVtICs9ICcgJyArIHRoaXMudW5pdHNbaV0ucHJlZml4Lm5hbWUgKyB0aGlzLnVuaXRzW2ldLnVuaXQubmFtZTtcblxuICAgICAgICBpZiAoTWF0aC5hYnModGhpcy51bml0c1tpXS5wb3dlciAtIDEuMCkgPiAxZS0xNSkge1xuICAgICAgICAgIHN0ck51bSArPSAnXicgKyB0aGlzLnVuaXRzW2ldLnBvd2VyO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMudW5pdHNbaV0ucG93ZXIgPCAwKSB7XG4gICAgICAgIG5EZW4rKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobkRlbiA+IDApIHtcbiAgICAgIGZvciAodmFyIF9pNCA9IDA7IF9pNCA8IHRoaXMudW5pdHMubGVuZ3RoOyBfaTQrKykge1xuICAgICAgICBpZiAodGhpcy51bml0c1tfaTRdLnBvd2VyIDwgMCkge1xuICAgICAgICAgIGlmIChuTnVtID4gMCkge1xuICAgICAgICAgICAgc3RyRGVuICs9ICcgJyArIHRoaXMudW5pdHNbX2k0XS5wcmVmaXgubmFtZSArIHRoaXMudW5pdHNbX2k0XS51bml0Lm5hbWU7XG5cbiAgICAgICAgICAgIGlmIChNYXRoLmFicyh0aGlzLnVuaXRzW19pNF0ucG93ZXIgKyAxLjApID4gMWUtMTUpIHtcbiAgICAgICAgICAgICAgc3RyRGVuICs9ICdeJyArIC10aGlzLnVuaXRzW19pNF0ucG93ZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0ckRlbiArPSAnICcgKyB0aGlzLnVuaXRzW19pNF0ucHJlZml4Lm5hbWUgKyB0aGlzLnVuaXRzW19pNF0udW5pdC5uYW1lO1xuICAgICAgICAgICAgc3RyRGVuICs9ICdeJyArIHRoaXMudW5pdHNbX2k0XS5wb3dlcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIFJlbW92ZSBsZWFkaW5nIFwiIFwiXG5cblxuICAgIHN0ck51bSA9IHN0ck51bS5zdWJzdHIoMSk7XG4gICAgc3RyRGVuID0gc3RyRGVuLnN1YnN0cigxKTsgLy8gQWRkIHBhcmFucyBmb3IgYmV0dGVyIGNvcHkvcGFzdGUgYmFjayBpbnRvIGV2YWx1YXRlLCBmb3IgZXhhbXBsZSwgb3IgZm9yIGJldHRlciBwcmV0dHkgcHJpbnQgZm9ybWF0dGluZ1xuXG4gICAgaWYgKG5OdW0gPiAxICYmIG5EZW4gPiAwKSB7XG4gICAgICBzdHJOdW0gPSAnKCcgKyBzdHJOdW0gKyAnKSc7XG4gICAgfVxuXG4gICAgaWYgKG5EZW4gPiAxICYmIG5OdW0gPiAwKSB7XG4gICAgICBzdHJEZW4gPSAnKCcgKyBzdHJEZW4gKyAnKSc7XG4gICAgfVxuXG4gICAgdmFyIHN0ciA9IHN0ck51bTtcblxuICAgIGlmIChuTnVtID4gMCAmJiBuRGVuID4gMCkge1xuICAgICAgc3RyICs9ICcgLyAnO1xuICAgIH1cblxuICAgIHN0ciArPSBzdHJEZW47XG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgVW5pdCwgd2l0aCBvcHRpb25hbCBmb3JtYXR0aW5nIG9wdGlvbnMuXG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvdXRpbHMvbnVtYmVyOmZvcm1hdCBmb3IgYVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAvLyBTaW1wbGZ5IHRoZSB1bml0IGxpc3QsIHVubGVzcyBpdCBpcyB2YWx1ZWxlc3Mgb3Igd2FzIGNyZWF0ZWQgZGlyZWN0bHkgaW4gdGhlXG4gICAgLy8gY29uc3RydWN0b3Igb3IgYXMgdGhlIHJlc3VsdCBvZiB0byBvciB0b1NJXG4gICAgdmFyIHNpbXAgPSB0aGlzLnNraXBBdXRvbWF0aWNTaW1wbGlmaWNhdGlvbiB8fCB0aGlzLnZhbHVlID09PSBudWxsID8gdGhpcy5jbG9uZSgpIDogdGhpcy5zaW1wbGlmeSgpOyAvLyBBcHBseSBzb21lIGN1c3RvbSBsb2dpYyBmb3IgaGFuZGxpbmcgVkEgYW5kIFZBUi4gVGhlIGdvYWwgaXMgdG8gZXhwcmVzcyB0aGUgdmFsdWUgb2YgdGhlIHVuaXQgYXMgYSByZWFsIHZhbHVlLCBpZiBwb3NzaWJsZS4gT3RoZXJ3aXNlLCB1c2UgYSByZWFsLXZhbHVlZCB1bml0IGluc3RlYWQgb2YgYSBjb21wbGV4LXZhbHVlZCBvbmUuXG5cbiAgICB2YXIgaXNJbWFnaW5hcnkgPSBmYWxzZTtcblxuICAgIGlmICh0eXBlb2Ygc2ltcC52YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgJiYgc2ltcC52YWx1ZSAhPT0gbnVsbCAmJiAoMCwgX2lzLmlzQ29tcGxleCkoc2ltcC52YWx1ZSkpIHtcbiAgICAgIC8vIFRPRE86IE1ha2UgdGhpcyBiZXR0ZXIsIGZvciBleGFtcGxlLCB1c2UgcmVsYXRpdmUgbWFnbml0dWRlIG9mIHJlIGFuZCBpbSByYXRoZXIgdGhhbiBhYnNvbHV0ZVxuICAgICAgaXNJbWFnaW5hcnkgPSBNYXRoLmFicyhzaW1wLnZhbHVlLnJlKSA8IDFlLTE0O1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgaW4gc2ltcC51bml0cykge1xuICAgICAgaWYgKHNpbXAudW5pdHNbaV0udW5pdCkge1xuICAgICAgICBpZiAoc2ltcC51bml0c1tpXS51bml0Lm5hbWUgPT09ICdWQScgJiYgaXNJbWFnaW5hcnkpIHtcbiAgICAgICAgICBzaW1wLnVuaXRzW2ldLnVuaXQgPSBVTklUUy5WQVI7XG4gICAgICAgIH0gZWxzZSBpZiAoc2ltcC51bml0c1tpXS51bml0Lm5hbWUgPT09ICdWQVInICYmICFpc0ltYWdpbmFyeSkge1xuICAgICAgICAgIHNpbXAudW5pdHNbaV0udW5pdCA9IFVOSVRTLlZBO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBOb3cgYXBwbHkgdGhlIGJlc3QgcHJlZml4XG4gICAgLy8gVW5pdHMgbXVzdCBoYXZlIG9ubHkgb25lIHVuaXQgYW5kIG5vdCBoYXZlIHRoZSBmaXhQcmVmaXggZmxhZyBzZXRcblxuXG4gICAgaWYgKHNpbXAudW5pdHMubGVuZ3RoID09PSAxICYmICFzaW1wLmZpeFByZWZpeCkge1xuICAgICAgLy8gVW5pdHMgbXVzdCBoYXZlIGludGVnZXIgcG93ZXJzLCBvdGhlcndpc2UgdGhlIHByZWZpeCB3aWxsIGNoYW5nZSB0aGVcbiAgICAgIC8vIG91dHB1dHRlZCB2YWx1ZSBieSBub3QtYW4taW50ZWdlci1wb3dlci1vZi10ZW5cbiAgICAgIGlmIChNYXRoLmFicyhzaW1wLnVuaXRzWzBdLnBvd2VyIC0gTWF0aC5yb3VuZChzaW1wLnVuaXRzWzBdLnBvd2VyKSkgPCAxZS0xNCkge1xuICAgICAgICAvLyBBcHBseSB0aGUgYmVzdCBwcmVmaXhcbiAgICAgICAgc2ltcC51bml0c1swXS5wcmVmaXggPSBzaW1wLl9iZXN0UHJlZml4KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlID0gc2ltcC5fZGVub3JtYWxpemUoc2ltcC52YWx1ZSk7XG5cbiAgICB2YXIgc3RyID0gc2ltcC52YWx1ZSAhPT0gbnVsbCA/IGZvcm1hdCh2YWx1ZSwgb3B0aW9ucyB8fCB7fSkgOiAnJztcbiAgICB2YXIgdW5pdFN0ciA9IHNpbXAuZm9ybWF0VW5pdHMoKTtcblxuICAgIGlmIChzaW1wLnZhbHVlICYmICgwLCBfaXMuaXNDb21wbGV4KShzaW1wLnZhbHVlKSkge1xuICAgICAgc3RyID0gJygnICsgc3RyICsgJyknOyAvLyBTdXJyb3VuZCBjb21wbGV4IHZhbHVlcyB3aXRoICggKSB0byBlbmFibGUgYmV0dGVyIHBhcnNpbmdcbiAgICB9XG5cbiAgICBpZiAodW5pdFN0ci5sZW5ndGggPiAwICYmIHN0ci5sZW5ndGggPiAwKSB7XG4gICAgICBzdHIgKz0gJyAnO1xuICAgIH1cblxuICAgIHN0ciArPSB1bml0U3RyO1xuICAgIHJldHVybiBzdHI7XG4gIH07XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGJlc3QgcHJlZml4IHVzaW5nIGN1cnJlbnQgdmFsdWUuXG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEByZXR1cm5zIHtPYmplY3R9IHByZWZpeFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLl9iZXN0UHJlZml4ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnVuaXRzLmxlbmd0aCAhPT0gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBjb21wdXRlIHRoZSBiZXN0IHByZWZpeCBmb3Igc2luZ2xlIHVuaXRzIHdpdGggaW50ZWdlciBwb3dlcnMsIGxpa2Uga2csIHNeMiwgTl4tMSwgYW5kIHNvIGZvcnRoIScpO1xuICAgIH1cblxuICAgIGlmIChNYXRoLmFicyh0aGlzLnVuaXRzWzBdLnBvd2VyIC0gTWF0aC5yb3VuZCh0aGlzLnVuaXRzWzBdLnBvd2VyKSkgPj0gMWUtMTQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG9ubHkgY29tcHV0ZSB0aGUgYmVzdCBwcmVmaXggZm9yIHNpbmdsZSB1bml0cyB3aXRoIGludGVnZXIgcG93ZXJzLCBsaWtlIGtnLCBzXjIsIE5eLTEsIGFuZCBzbyBmb3J0aCEnKTtcbiAgICB9IC8vIGZpbmQgdGhlIGJlc3QgcHJlZml4IHZhbHVlIChyZXN1bHRpbmcgaW4gdGhlIHZhbHVlIG9mIHdoaWNoXG4gICAgLy8gdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoZSBsb2cxMCBpcyBjbG9zZXN0IHRvIHplcm8sXG4gICAgLy8gdGhvdWdoIHdpdGggYSBsaXR0bGUgb2Zmc2V0IG9mIDEuMiBmb3IgbmljZXIgdmFsdWVzOiB5b3UgZ2V0IGFcbiAgICAvLyBzZXF1ZW5jZSAxbW0gMTAwbW0gNTAwbW0gMC42bSAxbSAxMG0gMTAwbSA1MDBtIDAuNmttIDFrbSAuLi5cbiAgICAvLyBOb3RlOiB0aGUgdW5pdHMgdmFsdWUgY2FuIGJlIGFueSBudW1lcmljIHR5cGUsIGJ1dCB0byBmaW5kIHRoZSBiZXN0XG4gICAgLy8gcHJlZml4IGl0J3MgZW5vdWdoIHRvIHdvcmsgd2l0aCBsaW1pdGVkIHByZWNpc2lvbiBvZiBhIHJlZ3VsYXIgbnVtYmVyXG4gICAgLy8gVXBkYXRlOiB1c2luZyBtYXRoanMgYWJzIHNpbmNlIHdlIGFsc28gYWxsb3cgY29tcGxleCBudW1iZXJzXG5cblxuICAgIHZhciBhYnNWYWx1ZSA9IHRoaXMudmFsdWUgIT09IG51bGwgPyBhYnModGhpcy52YWx1ZSkgOiAwO1xuICAgIHZhciBhYnNVbml0VmFsdWUgPSBhYnModGhpcy51bml0c1swXS51bml0LnZhbHVlKTtcbiAgICB2YXIgYmVzdFByZWZpeCA9IHRoaXMudW5pdHNbMF0ucHJlZml4O1xuXG4gICAgaWYgKGFic1ZhbHVlID09PSAwKSB7XG4gICAgICByZXR1cm4gYmVzdFByZWZpeDtcbiAgICB9XG5cbiAgICB2YXIgcG93ZXIgPSB0aGlzLnVuaXRzWzBdLnBvd2VyO1xuICAgIHZhciBiZXN0RGlmZiA9IE1hdGgubG9nKGFic1ZhbHVlIC8gTWF0aC5wb3coYmVzdFByZWZpeC52YWx1ZSAqIGFic1VuaXRWYWx1ZSwgcG93ZXIpKSAvIE1hdGguTE4xMCAtIDEuMjtcbiAgICBpZiAoYmVzdERpZmYgPiAtMi4yMDAwMDEgJiYgYmVzdERpZmYgPCAxLjgwMDAwMSkgcmV0dXJuIGJlc3RQcmVmaXg7IC8vIEFsbG93IHRoZSBvcmlnaW5hbCBwcmVmaXhcblxuICAgIGJlc3REaWZmID0gTWF0aC5hYnMoYmVzdERpZmYpO1xuICAgIHZhciBwcmVmaXhlcyA9IHRoaXMudW5pdHNbMF0udW5pdC5wcmVmaXhlcztcblxuICAgIGZvciAodmFyIHAgaW4gcHJlZml4ZXMpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkocHJlZml4ZXMsIHApKSB7XG4gICAgICAgIHZhciBwcmVmaXggPSBwcmVmaXhlc1twXTtcblxuICAgICAgICBpZiAocHJlZml4LnNjaWVudGlmaWMpIHtcbiAgICAgICAgICB2YXIgZGlmZiA9IE1hdGguYWJzKE1hdGgubG9nKGFic1ZhbHVlIC8gTWF0aC5wb3cocHJlZml4LnZhbHVlICogYWJzVW5pdFZhbHVlLCBwb3dlcikpIC8gTWF0aC5MTjEwIC0gMS4yKTtcblxuICAgICAgICAgIGlmIChkaWZmIDwgYmVzdERpZmYgfHwgZGlmZiA9PT0gYmVzdERpZmYgJiYgcHJlZml4Lm5hbWUubGVuZ3RoIDwgYmVzdFByZWZpeC5uYW1lLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gY2hvb3NlIHRoZSBwcmVmaXggd2l0aCB0aGUgc21hbGxlc3QgZGlmZiwgb3IgaWYgZXF1YWwsIGNob29zZSB0aGUgb25lXG4gICAgICAgICAgICAvLyB3aXRoIHRoZSBzaG9ydGVzdCBuYW1lIChjYW4gaGFwcGVuIHdpdGggU0hPUlRMT05HIGZvciBleGFtcGxlKVxuICAgICAgICAgICAgYmVzdFByZWZpeCA9IHByZWZpeDtcbiAgICAgICAgICAgIGJlc3REaWZmID0gZGlmZjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYmVzdFByZWZpeDtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgYW4gYXJyYXkgb2YgdW5pdHMgd2hvc2Ugc3VtIGlzIGVxdWFsIHRvIHRoaXMgdW5pdFxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge0FycmF5fSBbcGFydHNdIEFuIGFycmF5IG9mIHN0cmluZ3Mgb3IgdmFsdWVsZXNzIHVuaXRzLlxuICAgKlxuICAgKiAgIEV4YW1wbGU6XG4gICAqXG4gICAqICAgY29uc3QgdSA9IG5ldyBVbml0KDEsICdtJylcbiAgICogICB1LnNwbGl0VW5pdChbJ2ZlZXQnLCAnaW5jaCddKVxuICAgKiAgICAgWyAzIGZlZXQsIDMuMzcwMDc4NzQwMTU3NSBpbmNoIF1cbiAgICpcbiAgICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIHVuaXRzLlxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLnNwbGl0VW5pdCA9IGZ1bmN0aW9uIChwYXJ0cykge1xuICAgIHZhciB4ID0gdGhpcy5jbG9uZSgpO1xuICAgIHZhciByZXQgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIENvbnZlcnQgeCB0byB0aGUgcmVxdWVzdGVkIHVuaXRcbiAgICAgIHggPSB4LnRvKHBhcnRzW2ldKTtcbiAgICAgIGlmIChpID09PSBwYXJ0cy5sZW5ndGggLSAxKSBicmVhazsgLy8gR2V0IHRoZSBudW1lcmljIHZhbHVlIG9mIHRoaXMgdW5pdFxuXG4gICAgICB2YXIgeE51bWVyaWMgPSB4LnRvTnVtZXJpYygpOyAvLyBDaGVjayB0byBzZWUgaWYgeE51bWVyaWMgaXMgbmVhcmx5IGVxdWFsIHRvIGFuIGludGVnZXIsXG4gICAgICAvLyBzaW5jZSBmaXggY2FuIGluY29ycmVjdGx5IHJvdW5kIGRvd24gaWYgdGhlcmUgaXMgcm91bmQtb2ZmIGVycm9yXG5cbiAgICAgIHZhciB4Um91bmRlZCA9IHJvdW5kKHhOdW1lcmljKTtcbiAgICAgIHZhciB4Rml4ZWQgPSB2b2lkIDA7XG4gICAgICB2YXIgaXNOZWFybHlFcXVhbCA9IGVxdWFsKHhSb3VuZGVkLCB4TnVtZXJpYyk7XG5cbiAgICAgIGlmIChpc05lYXJseUVxdWFsKSB7XG4gICAgICAgIHhGaXhlZCA9IHhSb3VuZGVkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgeEZpeGVkID0gZml4KHgudG9OdW1lcmljKCkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgeSA9IG5ldyBVbml0KHhGaXhlZCwgcGFydHNbaV0udG9TdHJpbmcoKSk7XG4gICAgICByZXQucHVzaCh5KTtcbiAgICAgIHggPSBzdWJ0cmFjdCh4LCB5KTtcbiAgICB9IC8vIFRoaXMgbGl0dGxlIGJpdCBmaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgcmVtYWluZGVyIHNob3VsZCBiZSAwIGJ1dCBpcyBhIGxpdHRsZSBiaXQgb2ZmLlxuICAgIC8vIEJ1dCBpbnN0ZWFkIG9mIGNvbXBhcmluZyB4LCB0aGUgcmVtYWluZGVyLCB3aXRoIHplcm8tLXdlIHdpbGwgY29tcGFyZSB0aGUgc3VtIG9mXG4gICAgLy8gYWxsIHRoZSBwYXJ0cyBzbyBmYXIgd2l0aCB0aGUgb3JpZ2luYWwgdmFsdWUuIElmIHRoZXkgYXJlIG5lYXJseSBlcXVhbCxcbiAgICAvLyB3ZSBzZXQgdGhlIHJlbWFpbmRlciB0byAwLlxuXG5cbiAgICB2YXIgdGVzdFN1bSA9IDA7XG5cbiAgICBmb3IgKHZhciBfaTUgPSAwOyBfaTUgPCByZXQubGVuZ3RoOyBfaTUrKykge1xuICAgICAgdGVzdFN1bSA9IGFkZFNjYWxhcih0ZXN0U3VtLCByZXRbX2k1XS52YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGVxdWFsKHRlc3RTdW0sIHRoaXMudmFsdWUpKSB7XG4gICAgICB4LnZhbHVlID0gMDtcbiAgICB9XG5cbiAgICByZXQucHVzaCh4KTtcbiAgICByZXR1cm4gcmV0O1xuICB9O1xuXG4gIHZhciBQUkVGSVhFUyA9IHtcbiAgICBOT05FOiB7XG4gICAgICAnJzoge1xuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIFNIT1JUOiB7XG4gICAgICAnJzoge1xuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBkYToge1xuICAgICAgICBuYW1lOiAnZGEnLFxuICAgICAgICB2YWx1ZTogMWUxLFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGg6IHtcbiAgICAgICAgbmFtZTogJ2gnLFxuICAgICAgICB2YWx1ZTogMWUyLFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGs6IHtcbiAgICAgICAgbmFtZTogJ2snLFxuICAgICAgICB2YWx1ZTogMWUzLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgTToge1xuICAgICAgICBuYW1lOiAnTScsXG4gICAgICAgIHZhbHVlOiAxZTYsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBHOiB7XG4gICAgICAgIG5hbWU6ICdHJyxcbiAgICAgICAgdmFsdWU6IDFlOSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFQ6IHtcbiAgICAgICAgbmFtZTogJ1QnLFxuICAgICAgICB2YWx1ZTogMWUxMixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFA6IHtcbiAgICAgICAgbmFtZTogJ1AnLFxuICAgICAgICB2YWx1ZTogMWUxNSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIEU6IHtcbiAgICAgICAgbmFtZTogJ0UnLFxuICAgICAgICB2YWx1ZTogMWUxOCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFo6IHtcbiAgICAgICAgbmFtZTogJ1onLFxuICAgICAgICB2YWx1ZTogMWUyMSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFk6IHtcbiAgICAgICAgbmFtZTogJ1knLFxuICAgICAgICB2YWx1ZTogMWUyNCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGQ6IHtcbiAgICAgICAgbmFtZTogJ2QnLFxuICAgICAgICB2YWx1ZTogMWUtMSxcbiAgICAgICAgc2NpZW50aWZpYzogZmFsc2VcbiAgICAgIH0sXG4gICAgICBjOiB7XG4gICAgICAgIG5hbWU6ICdjJyxcbiAgICAgICAgdmFsdWU6IDFlLTIsXG4gICAgICAgIHNjaWVudGlmaWM6IGZhbHNlXG4gICAgICB9LFxuICAgICAgbToge1xuICAgICAgICBuYW1lOiAnbScsXG4gICAgICAgIHZhbHVlOiAxZS0zLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgdToge1xuICAgICAgICBuYW1lOiAndScsXG4gICAgICAgIHZhbHVlOiAxZS02LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgbjoge1xuICAgICAgICBuYW1lOiAnbicsXG4gICAgICAgIHZhbHVlOiAxZS05LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgcDoge1xuICAgICAgICBuYW1lOiAncCcsXG4gICAgICAgIHZhbHVlOiAxZS0xMixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGY6IHtcbiAgICAgICAgbmFtZTogJ2YnLFxuICAgICAgICB2YWx1ZTogMWUtMTUsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBhOiB7XG4gICAgICAgIG5hbWU6ICdhJyxcbiAgICAgICAgdmFsdWU6IDFlLTE4LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgejoge1xuICAgICAgICBuYW1lOiAneicsXG4gICAgICAgIHZhbHVlOiAxZS0yMSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHk6IHtcbiAgICAgICAgbmFtZTogJ3knLFxuICAgICAgICB2YWx1ZTogMWUtMjQsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIExPTkc6IHtcbiAgICAgICcnOiB7XG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGRlY2E6IHtcbiAgICAgICAgbmFtZTogJ2RlY2EnLFxuICAgICAgICB2YWx1ZTogMWUxLFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGhlY3RvOiB7XG4gICAgICAgIG5hbWU6ICdoZWN0bycsXG4gICAgICAgIHZhbHVlOiAxZTIsXG4gICAgICAgIHNjaWVudGlmaWM6IGZhbHNlXG4gICAgICB9LFxuICAgICAga2lsbzoge1xuICAgICAgICBuYW1lOiAna2lsbycsXG4gICAgICAgIHZhbHVlOiAxZTMsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBtZWdhOiB7XG4gICAgICAgIG5hbWU6ICdtZWdhJyxcbiAgICAgICAgdmFsdWU6IDFlNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGdpZ2E6IHtcbiAgICAgICAgbmFtZTogJ2dpZ2EnLFxuICAgICAgICB2YWx1ZTogMWU5LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgdGVyYToge1xuICAgICAgICBuYW1lOiAndGVyYScsXG4gICAgICAgIHZhbHVlOiAxZTEyLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgcGV0YToge1xuICAgICAgICBuYW1lOiAncGV0YScsXG4gICAgICAgIHZhbHVlOiAxZTE1LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgZXhhOiB7XG4gICAgICAgIG5hbWU6ICdleGEnLFxuICAgICAgICB2YWx1ZTogMWUxOCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHpldHRhOiB7XG4gICAgICAgIG5hbWU6ICd6ZXR0YScsXG4gICAgICAgIHZhbHVlOiAxZTIxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgeW90dGE6IHtcbiAgICAgICAgbmFtZTogJ3lvdHRhJyxcbiAgICAgICAgdmFsdWU6IDFlMjQsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBkZWNpOiB7XG4gICAgICAgIG5hbWU6ICdkZWNpJyxcbiAgICAgICAgdmFsdWU6IDFlLTEsXG4gICAgICAgIHNjaWVudGlmaWM6IGZhbHNlXG4gICAgICB9LFxuICAgICAgY2VudGk6IHtcbiAgICAgICAgbmFtZTogJ2NlbnRpJyxcbiAgICAgICAgdmFsdWU6IDFlLTIsXG4gICAgICAgIHNjaWVudGlmaWM6IGZhbHNlXG4gICAgICB9LFxuICAgICAgbWlsbGk6IHtcbiAgICAgICAgbmFtZTogJ21pbGxpJyxcbiAgICAgICAgdmFsdWU6IDFlLTMsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBtaWNybzoge1xuICAgICAgICBuYW1lOiAnbWljcm8nLFxuICAgICAgICB2YWx1ZTogMWUtNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIG5hbm86IHtcbiAgICAgICAgbmFtZTogJ25hbm8nLFxuICAgICAgICB2YWx1ZTogMWUtOSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHBpY286IHtcbiAgICAgICAgbmFtZTogJ3BpY28nLFxuICAgICAgICB2YWx1ZTogMWUtMTIsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBmZW10bzoge1xuICAgICAgICBuYW1lOiAnZmVtdG8nLFxuICAgICAgICB2YWx1ZTogMWUtMTUsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBhdHRvOiB7XG4gICAgICAgIG5hbWU6ICdhdHRvJyxcbiAgICAgICAgdmFsdWU6IDFlLTE4LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgemVwdG86IHtcbiAgICAgICAgbmFtZTogJ3plcHRvJyxcbiAgICAgICAgdmFsdWU6IDFlLTIxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgeW9jdG86IHtcbiAgICAgICAgbmFtZTogJ3lvY3RvJyxcbiAgICAgICAgdmFsdWU6IDFlLTI0LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9XG4gICAgfSxcbiAgICBTUVVBUkVEOiB7XG4gICAgICAnJzoge1xuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBkYToge1xuICAgICAgICBuYW1lOiAnZGEnLFxuICAgICAgICB2YWx1ZTogMWUyLFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGg6IHtcbiAgICAgICAgbmFtZTogJ2gnLFxuICAgICAgICB2YWx1ZTogMWU0LFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGs6IHtcbiAgICAgICAgbmFtZTogJ2snLFxuICAgICAgICB2YWx1ZTogMWU2LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgTToge1xuICAgICAgICBuYW1lOiAnTScsXG4gICAgICAgIHZhbHVlOiAxZTEyLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgRzoge1xuICAgICAgICBuYW1lOiAnRycsXG4gICAgICAgIHZhbHVlOiAxZTE4LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgVDoge1xuICAgICAgICBuYW1lOiAnVCcsXG4gICAgICAgIHZhbHVlOiAxZTI0LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgUDoge1xuICAgICAgICBuYW1lOiAnUCcsXG4gICAgICAgIHZhbHVlOiAxZTMwLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgRToge1xuICAgICAgICBuYW1lOiAnRScsXG4gICAgICAgIHZhbHVlOiAxZTM2LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgWjoge1xuICAgICAgICBuYW1lOiAnWicsXG4gICAgICAgIHZhbHVlOiAxZTQyLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgWToge1xuICAgICAgICBuYW1lOiAnWScsXG4gICAgICAgIHZhbHVlOiAxZTQ4LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgZDoge1xuICAgICAgICBuYW1lOiAnZCcsXG4gICAgICAgIHZhbHVlOiAxZS0yLFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGM6IHtcbiAgICAgICAgbmFtZTogJ2MnLFxuICAgICAgICB2YWx1ZTogMWUtNCxcbiAgICAgICAgc2NpZW50aWZpYzogZmFsc2VcbiAgICAgIH0sXG4gICAgICBtOiB7XG4gICAgICAgIG5hbWU6ICdtJyxcbiAgICAgICAgdmFsdWU6IDFlLTYsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICB1OiB7XG4gICAgICAgIG5hbWU6ICd1JyxcbiAgICAgICAgdmFsdWU6IDFlLTEyLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgbjoge1xuICAgICAgICBuYW1lOiAnbicsXG4gICAgICAgIHZhbHVlOiAxZS0xOCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHA6IHtcbiAgICAgICAgbmFtZTogJ3AnLFxuICAgICAgICB2YWx1ZTogMWUtMjQsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBmOiB7XG4gICAgICAgIG5hbWU6ICdmJyxcbiAgICAgICAgdmFsdWU6IDFlLTMwLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgYToge1xuICAgICAgICBuYW1lOiAnYScsXG4gICAgICAgIHZhbHVlOiAxZS0zNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHo6IHtcbiAgICAgICAgbmFtZTogJ3onLFxuICAgICAgICB2YWx1ZTogMWUtNDIsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICB5OiB7XG4gICAgICAgIG5hbWU6ICd5JyxcbiAgICAgICAgdmFsdWU6IDFlLTQ4LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9XG4gICAgfSxcbiAgICBDVUJJQzoge1xuICAgICAgJyc6IHtcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgZGE6IHtcbiAgICAgICAgbmFtZTogJ2RhJyxcbiAgICAgICAgdmFsdWU6IDFlMyxcbiAgICAgICAgc2NpZW50aWZpYzogZmFsc2VcbiAgICAgIH0sXG4gICAgICBoOiB7XG4gICAgICAgIG5hbWU6ICdoJyxcbiAgICAgICAgdmFsdWU6IDFlNixcbiAgICAgICAgc2NpZW50aWZpYzogZmFsc2VcbiAgICAgIH0sXG4gICAgICBrOiB7XG4gICAgICAgIG5hbWU6ICdrJyxcbiAgICAgICAgdmFsdWU6IDFlOSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIE06IHtcbiAgICAgICAgbmFtZTogJ00nLFxuICAgICAgICB2YWx1ZTogMWUxOCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIEc6IHtcbiAgICAgICAgbmFtZTogJ0cnLFxuICAgICAgICB2YWx1ZTogMWUyNyxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFQ6IHtcbiAgICAgICAgbmFtZTogJ1QnLFxuICAgICAgICB2YWx1ZTogMWUzNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFA6IHtcbiAgICAgICAgbmFtZTogJ1AnLFxuICAgICAgICB2YWx1ZTogMWU0NSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIEU6IHtcbiAgICAgICAgbmFtZTogJ0UnLFxuICAgICAgICB2YWx1ZTogMWU1NCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFo6IHtcbiAgICAgICAgbmFtZTogJ1onLFxuICAgICAgICB2YWx1ZTogMWU2MyxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFk6IHtcbiAgICAgICAgbmFtZTogJ1knLFxuICAgICAgICB2YWx1ZTogMWU3MixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGQ6IHtcbiAgICAgICAgbmFtZTogJ2QnLFxuICAgICAgICB2YWx1ZTogMWUtMyxcbiAgICAgICAgc2NpZW50aWZpYzogZmFsc2VcbiAgICAgIH0sXG4gICAgICBjOiB7XG4gICAgICAgIG5hbWU6ICdjJyxcbiAgICAgICAgdmFsdWU6IDFlLTYsXG4gICAgICAgIHNjaWVudGlmaWM6IGZhbHNlXG4gICAgICB9LFxuICAgICAgbToge1xuICAgICAgICBuYW1lOiAnbScsXG4gICAgICAgIHZhbHVlOiAxZS05LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgdToge1xuICAgICAgICBuYW1lOiAndScsXG4gICAgICAgIHZhbHVlOiAxZS0xOCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIG46IHtcbiAgICAgICAgbmFtZTogJ24nLFxuICAgICAgICB2YWx1ZTogMWUtMjcsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBwOiB7XG4gICAgICAgIG5hbWU6ICdwJyxcbiAgICAgICAgdmFsdWU6IDFlLTM2LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgZjoge1xuICAgICAgICBuYW1lOiAnZicsXG4gICAgICAgIHZhbHVlOiAxZS00NSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGE6IHtcbiAgICAgICAgbmFtZTogJ2EnLFxuICAgICAgICB2YWx1ZTogMWUtNTQsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICB6OiB7XG4gICAgICAgIG5hbWU6ICd6JyxcbiAgICAgICAgdmFsdWU6IDFlLTYzLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgeToge1xuICAgICAgICBuYW1lOiAneScsXG4gICAgICAgIHZhbHVlOiAxZS03MixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfVxuICAgIH0sXG4gICAgQklOQVJZX1NIT1JUX1NJOiB7XG4gICAgICAnJzoge1xuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBrOiB7XG4gICAgICAgIG5hbWU6ICdrJyxcbiAgICAgICAgdmFsdWU6IDFlMyxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIE06IHtcbiAgICAgICAgbmFtZTogJ00nLFxuICAgICAgICB2YWx1ZTogMWU2LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgRzoge1xuICAgICAgICBuYW1lOiAnRycsXG4gICAgICAgIHZhbHVlOiAxZTksXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBUOiB7XG4gICAgICAgIG5hbWU6ICdUJyxcbiAgICAgICAgdmFsdWU6IDFlMTIsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBQOiB7XG4gICAgICAgIG5hbWU6ICdQJyxcbiAgICAgICAgdmFsdWU6IDFlMTUsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBFOiB7XG4gICAgICAgIG5hbWU6ICdFJyxcbiAgICAgICAgdmFsdWU6IDFlMTgsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBaOiB7XG4gICAgICAgIG5hbWU6ICdaJyxcbiAgICAgICAgdmFsdWU6IDFlMjEsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBZOiB7XG4gICAgICAgIG5hbWU6ICdZJyxcbiAgICAgICAgdmFsdWU6IDFlMjQsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIEJJTkFSWV9TSE9SVF9JRUM6IHtcbiAgICAgICcnOiB7XG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIEtpOiB7XG4gICAgICAgIG5hbWU6ICdLaScsXG4gICAgICAgIHZhbHVlOiAxMDI0LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgTWk6IHtcbiAgICAgICAgbmFtZTogJ01pJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDIpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgR2k6IHtcbiAgICAgICAgbmFtZTogJ0dpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDMpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgVGk6IHtcbiAgICAgICAgbmFtZTogJ1RpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDQpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgUGk6IHtcbiAgICAgICAgbmFtZTogJ1BpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDUpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgRWk6IHtcbiAgICAgICAgbmFtZTogJ0VpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDYpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgWmk6IHtcbiAgICAgICAgbmFtZTogJ1ppJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDcpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgWWk6IHtcbiAgICAgICAgbmFtZTogJ1lpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDgpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9XG4gICAgfSxcbiAgICBCSU5BUllfTE9OR19TSToge1xuICAgICAgJyc6IHtcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAga2lsbzoge1xuICAgICAgICBuYW1lOiAna2lsbycsXG4gICAgICAgIHZhbHVlOiAxZTMsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBtZWdhOiB7XG4gICAgICAgIG5hbWU6ICdtZWdhJyxcbiAgICAgICAgdmFsdWU6IDFlNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGdpZ2E6IHtcbiAgICAgICAgbmFtZTogJ2dpZ2EnLFxuICAgICAgICB2YWx1ZTogMWU5LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgdGVyYToge1xuICAgICAgICBuYW1lOiAndGVyYScsXG4gICAgICAgIHZhbHVlOiAxZTEyLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgcGV0YToge1xuICAgICAgICBuYW1lOiAncGV0YScsXG4gICAgICAgIHZhbHVlOiAxZTE1LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgZXhhOiB7XG4gICAgICAgIG5hbWU6ICdleGEnLFxuICAgICAgICB2YWx1ZTogMWUxOCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHpldHRhOiB7XG4gICAgICAgIG5hbWU6ICd6ZXR0YScsXG4gICAgICAgIHZhbHVlOiAxZTIxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgeW90dGE6IHtcbiAgICAgICAgbmFtZTogJ3lvdHRhJyxcbiAgICAgICAgdmFsdWU6IDFlMjQsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIEJJTkFSWV9MT05HX0lFQzoge1xuICAgICAgJyc6IHtcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAga2liaToge1xuICAgICAgICBuYW1lOiAna2liaScsXG4gICAgICAgIHZhbHVlOiAxMDI0LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgbWViaToge1xuICAgICAgICBuYW1lOiAnbWViaScsXG4gICAgICAgIHZhbHVlOiBNYXRoLnBvdygxMDI0LCAyKSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGdpYmk6IHtcbiAgICAgICAgbmFtZTogJ2dpYmknLFxuICAgICAgICB2YWx1ZTogTWF0aC5wb3coMTAyNCwgMyksXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICB0ZWJpOiB7XG4gICAgICAgIG5hbWU6ICd0ZWJpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDQpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgcGViaToge1xuICAgICAgICBuYW1lOiAncGViaScsXG4gICAgICAgIHZhbHVlOiBNYXRoLnBvdygxMDI0LCA1KSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGV4aToge1xuICAgICAgICBuYW1lOiAnZXhpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDYpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgemViaToge1xuICAgICAgICBuYW1lOiAnemViaScsXG4gICAgICAgIHZhbHVlOiBNYXRoLnBvdygxMDI0LCA3KSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHlvYmk6IHtcbiAgICAgICAgbmFtZTogJ3lvYmknLFxuICAgICAgICB2YWx1ZTogTWF0aC5wb3coMTAyNCwgOCksXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIEJUVToge1xuICAgICAgJyc6IHtcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgTU06IHtcbiAgICAgICAgbmFtZTogJ01NJyxcbiAgICAgICAgdmFsdWU6IDFlNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgUFJFRklYRVMuU0hPUlRMT05HID0gX2V4dGVuZHMoe30sIFBSRUZJWEVTLlNIT1JULCBQUkVGSVhFUy5MT05HKTtcbiAgUFJFRklYRVMuQklOQVJZX1NIT1JUID0gX2V4dGVuZHMoe30sIFBSRUZJWEVTLkJJTkFSWV9TSE9SVF9TSSwgUFJFRklYRVMuQklOQVJZX1NIT1JUX0lFQyk7XG4gIFBSRUZJWEVTLkJJTkFSWV9MT05HID0gX2V4dGVuZHMoe30sIFBSRUZJWEVTLkJJTkFSWV9MT05HX1NJLCBQUkVGSVhFUy5CSU5BUllfTE9OR19JRUMpO1xuICAvKiBJbnRlcm5hbGx5LCBlYWNoIHVuaXQgaXMgcmVwcmVzZW50ZWQgYnkgYSB2YWx1ZSBhbmQgYSBkaW1lbnNpb24gYXJyYXkuIFRoZSBlbGVtZW50cyBvZiB0aGUgZGltZW5zaW9ucyBhcnJheSBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZzpcbiAgICogSW5kZXggIERpbWVuc2lvblxuICAgKiAtLS0tLSAgLS0tLS0tLS0tXG4gICAqICAgMCAgICBMZW5ndGhcbiAgICogICAxICAgIE1hc3NcbiAgICogICAyICAgIFRpbWVcbiAgICogICAzICAgIEN1cnJlbnRcbiAgICogICA0ICAgIFRlbXBlcmF0dXJlXG4gICAqICAgNSAgICBMdW1pbm91cyBpbnRlbnNpdHlcbiAgICogICA2ICAgIEFtb3VudCBvZiBzdWJzdGFuY2VcbiAgICogICA3ICAgIEFuZ2xlXG4gICAqICAgOCAgICBCaXQgKGRpZ2l0YWwpXG4gICAqIEZvciBleGFtcGxlLCB0aGUgdW5pdCBcIjI5OC4xNSBLXCIgaXMgYSBwdXJlIHRlbXBlcmF0dXJlIGFuZCB3b3VsZCBoYXZlIGEgdmFsdWUgb2YgMjk4LjE1IGFuZCBhIGRpbWVuc2lvbiBhcnJheSBvZiBbMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMF0uIFRoZSB1bml0IFwiMSBjYWwgLyAoZ20gwrBDKVwiIGNhbiBiZSB3cml0dGVuIGluIHRlcm1zIG9mIHRoZSA5IGZ1bmRhbWVudGFsIGRpbWVuc2lvbnMgYXMgW2xlbmd0aF4yXSAvIChbdGltZV4yXSAqIFt0ZW1wZXJhdHVyZV0pLCBhbmQgd291bGQgYSB2YWx1ZSBvZiAoYWZ0ZXIgY29udmVyc2lvbiB0byBTSSkgNDE4NC4wIGFuZCBhIGRpbWVuc2lvbnMgYXJyYXkgb2YgWzIsIDAsIC0yLCAwLCAtMSwgMCwgMCwgMCwgMF0uXG4gICAqXG4gICAqL1xuXG4gIHZhciBCQVNFX0RJTUVOU0lPTlMgPSBbJ01BU1MnLCAnTEVOR1RIJywgJ1RJTUUnLCAnQ1VSUkVOVCcsICdURU1QRVJBVFVSRScsICdMVU1JTk9VU19JTlRFTlNJVFknLCAnQU1PVU5UX09GX1NVQlNUQU5DRScsICdBTkdMRScsICdCSVQnXTtcbiAgdmFyIEJBU0VfVU5JVFMgPSB7XG4gICAgTk9ORToge1xuICAgICAgZGltZW5zaW9uczogWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBNQVNTOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIExFTkdUSDoge1xuICAgICAgZGltZW5zaW9uczogWzAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBUSU1FOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIENVUlJFTlQ6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFswLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgVEVNUEVSQVRVUkU6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFswLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgTFVNSU5PVVNfSU5URU5TSVRZOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMF1cbiAgICB9LFxuICAgIEFNT1VOVF9PRl9TVUJTVEFOQ0U6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFswLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwXVxuICAgIH0sXG4gICAgRk9SQ0U6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFsxLCAxLCAtMiwgMCwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIFNVUkZBQ0U6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFswLCAyLCAwLCAwLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgVk9MVU1FOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMCwgMywgMCwgMCwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIEVORVJHWToge1xuICAgICAgZGltZW5zaW9uczogWzEsIDIsIC0yLCAwLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgUE9XRVI6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFsxLCAyLCAtMywgMCwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIFBSRVNTVVJFOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMSwgLTEsIC0yLCAwLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgRUxFQ1RSSUNfQ0hBUkdFOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMCwgMCwgMSwgMSwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIEVMRUNUUklDX0NBUEFDSVRBTkNFOiB7XG4gICAgICBkaW1lbnNpb25zOiBbLTEsIC0yLCA0LCAyLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgRUxFQ1RSSUNfUE9URU5USUFMOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMSwgMiwgLTMsIC0xLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgRUxFQ1RSSUNfUkVTSVNUQU5DRToge1xuICAgICAgZGltZW5zaW9uczogWzEsIDIsIC0zLCAtMiwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIEVMRUNUUklDX0lORFVDVEFOQ0U6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFsxLCAyLCAtMiwgLTIsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBFTEVDVFJJQ19DT05EVUNUQU5DRToge1xuICAgICAgZGltZW5zaW9uczogWy0xLCAtMiwgMywgMiwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIE1BR05FVElDX0ZMVVg6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFsxLCAyLCAtMiwgLTEsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBNQUdORVRJQ19GTFVYX0RFTlNJVFk6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFsxLCAwLCAtMiwgLTEsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBGUkVRVUVOQ1k6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFswLCAwLCAtMSwgMCwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIEFOR0xFOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMF1cbiAgICB9LFxuICAgIEJJVDoge1xuICAgICAgZGltZW5zaW9uczogWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDFdXG4gICAgfVxuICB9O1xuXG4gIGZvciAodmFyIGtleSBpbiBCQVNFX1VOSVRTKSB7XG4gICAgQkFTRV9VTklUU1trZXldLmtleSA9IGtleTtcbiAgfVxuXG4gIHZhciBCQVNFX1VOSVRfTk9ORSA9IHt9O1xuICB2YXIgVU5JVF9OT05FID0ge1xuICAgIG5hbWU6ICcnLFxuICAgIGJhc2U6IEJBU0VfVU5JVF9OT05FLFxuICAgIHZhbHVlOiAxLFxuICAgIG9mZnNldDogMCxcbiAgICBkaW1lbnNpb25zOiBCQVNFX0RJTUVOU0lPTlMubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9KVxuICB9O1xuICB2YXIgVU5JVFMgPSB7XG4gICAgLy8gbGVuZ3RoXG4gICAgbWV0ZXI6IHtcbiAgICAgIG5hbWU6ICdtZXRlcicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGluY2g6IHtcbiAgICAgIG5hbWU6ICdpbmNoJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMjU0LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBmb290OiB7XG4gICAgICBuYW1lOiAnZm9vdCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMzA0OCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgeWFyZDoge1xuICAgICAgbmFtZTogJ3lhcmQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjkxNDQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIG1pbGU6IHtcbiAgICAgIG5hbWU6ICdtaWxlJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMTYwOS4zNDQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGxpbms6IHtcbiAgICAgIG5hbWU6ICdsaW5rJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4yMDExNjgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHJvZDoge1xuICAgICAgbmFtZTogJ3JvZCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDUuMDI5MixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgY2hhaW46IHtcbiAgICAgIG5hbWU6ICdjaGFpbicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDIwLjExNjgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGFuZ3N0cm9tOiB7XG4gICAgICBuYW1lOiAnYW5nc3Ryb20nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxZS0xMCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgbToge1xuICAgICAgbmFtZTogJ20nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgXCJpblwiOiB7XG4gICAgICBuYW1lOiAnaW4nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAyNTQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGZ0OiB7XG4gICAgICBuYW1lOiAnZnQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjMwNDgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHlkOiB7XG4gICAgICBuYW1lOiAneWQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjkxNDQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIG1pOiB7XG4gICAgICBuYW1lOiAnbWknLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxNjA5LjM0NCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgbGk6IHtcbiAgICAgIG5hbWU6ICdsaScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMjAxMTY4LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICByZDoge1xuICAgICAgbmFtZTogJ3JkJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNS4wMjkyMTAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGNoOiB7XG4gICAgICBuYW1lOiAnY2gnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAyMC4xMTY4LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBtaWw6IHtcbiAgICAgIG5hbWU6ICdtaWwnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAwMDAyNTQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDEvMTAwMCBpbmNoXG4gICAgLy8gU3VyZmFjZVxuICAgIG0yOiB7XG4gICAgICBuYW1lOiAnbTInLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5TVVJGQUNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNRVUFSRUQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgc3Fpbjoge1xuICAgICAgbmFtZTogJ3NxaW4nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5TVVJGQUNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDA2NDUxNixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gNjQ1LjE2IG1tMlxuICAgIHNxZnQ6IHtcbiAgICAgIG5hbWU6ICdzcWZ0JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuU1VSRkFDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDkyOTAzMDQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDAuMDkyOTAzMDQgbTJcbiAgICBzcXlkOiB7XG4gICAgICBuYW1lOiAnc3F5ZCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlNVUkZBQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjgzNjEyNzM2LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAwLjgzNjEyNzM2IG0yXG4gICAgc3FtaToge1xuICAgICAgbmFtZTogJ3NxbWknLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5TVVJGQUNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMjU4OTk4OC4xMTAzMzYsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDIuNTg5OTg4MTEwMzM2IGttMlxuICAgIHNxcmQ6IHtcbiAgICAgIG5hbWU6ICdzcXJkJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuU1VSRkFDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDI1LjI5Mjk1LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAyNS4yOTI5NSBtMlxuICAgIHNxY2g6IHtcbiAgICAgIG5hbWU6ICdzcWNoJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuU1VSRkFDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDQwNC42ODczLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyA0MDQuNjg3MyBtMlxuICAgIHNxbWlsOiB7XG4gICAgICBuYW1lOiAnc3FtaWwnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5TVVJGQUNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNi40NTE2ZS0xMCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gNi40NTE2ICogMTBeLTEwIG0yXG4gICAgYWNyZToge1xuICAgICAgbmFtZTogJ2FjcmUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5TVVJGQUNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNDA0Ni44NixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gNDA0Ni44NiBtMlxuICAgIGhlY3RhcmU6IHtcbiAgICAgIG5hbWU6ICdoZWN0YXJlJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuU1VSRkFDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEwMDAwLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAxMDAwMCBtMlxuICAgIC8vIFZvbHVtZVxuICAgIG0zOiB7XG4gICAgICBuYW1lOiAnbTMnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuQ1VCSUMsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgTDoge1xuICAgICAgbmFtZTogJ0wnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMC4wMDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIGxpdHJlXG4gICAgbDoge1xuICAgICAgbmFtZTogJ2wnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMC4wMDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIGxpdHJlXG4gICAgbGl0cmU6IHtcbiAgICAgIG5hbWU6ICdsaXRyZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDAuMDAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBjdWluOiB7XG4gICAgICBuYW1lOiAnY3VpbicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEuNjM4NzA2NGUtNSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMS42Mzg3MDY0ZS01IG0zXG4gICAgY3VmdDoge1xuICAgICAgbmFtZTogJ2N1ZnQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAyODMxNjg0NjU5MixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMjguMzE2IDg0NiA1OTIgTFxuICAgIGN1eWQ6IHtcbiAgICAgIG5hbWU6ICdjdXlkJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC43NjQ1NTQ4NTc5ODQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDc2NC41NTQgODU3IDk4NCBMXG4gICAgdGVhc3Bvb246IHtcbiAgICAgIG5hbWU6ICd0ZWFzcG9vbicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDAwMDA1LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyA1IG1MXG4gICAgdGFibGVzcG9vbjoge1xuICAgICAgbmFtZTogJ3RhYmxlc3Bvb24nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAwMDAxNSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMTUgbUxcbiAgICAvLyB7bmFtZTogJ2N1cCcsIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLCBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwgdmFsdWU6IDAuMDAwMjQwLCBvZmZzZXQ6IDB9LCAvLyAyNDAgbUwgIC8vIG5vdCBwb3NzaWJsZSwgd2UgaGF2ZSBhbHJlYWR5IGFub3RoZXIgY3VwXG4gICAgZHJvcDoge1xuICAgICAgbmFtZTogJ2Ryb3AnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiA1ZS04LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAwLjA1IG1MID0gNWUtOCBtM1xuICAgIGd0dDoge1xuICAgICAgbmFtZTogJ2d0dCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDVlLTgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDAuMDUgbUwgPSA1ZS04IG0zXG4gICAgLy8gTGlxdWlkIHZvbHVtZVxuICAgIG1pbmltOiB7XG4gICAgICBuYW1lOiAnbWluaW0nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAwMDAwMDA2MTYxMTUyLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAwLjA2MTYxMTUyIG1MXG4gICAgZmx1aWRkcmFtOiB7XG4gICAgICBuYW1lOiAnZmx1aWRkcmFtJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDAwMDM2OTY2OTExLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAzLjY5NjY5MSBtTFxuICAgIGZsdWlkb3VuY2U6IHtcbiAgICAgIG5hbWU6ICdmbHVpZG91bmNlJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDAwMjk1NzM1MyxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMjkuNTczNTMgbUxcbiAgICBnaWxsOiB7XG4gICAgICBuYW1lOiAnZ2lsbCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDAwMTE4Mjk0MSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMTE4LjI5NDEgbUxcbiAgICBjYzoge1xuICAgICAgbmFtZTogJ2NjJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMWUtNixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMWUtNiBMXG4gICAgY3VwOiB7XG4gICAgICBuYW1lOiAnY3VwJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDAyMzY1ODgyLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAyMzYuNTg4MiBtTFxuICAgIHBpbnQ6IHtcbiAgICAgIG5hbWU6ICdwaW50JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDA0NzMxNzY1LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyA0NzMuMTc2NSBtTFxuICAgIHF1YXJ0OiB7XG4gICAgICBuYW1lOiAncXVhcnQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAwMDk0NjM1MjksXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDk0Ni4zNTI5IG1MXG4gICAgZ2FsbG9uOiB7XG4gICAgICBuYW1lOiAnZ2FsbG9uJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDM3ODU0MTIsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDMuNzg1NDEyIExcbiAgICBiZWVyYmFycmVsOiB7XG4gICAgICBuYW1lOiAnYmVlcmJhcnJlbCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMTE3MzQ3OCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMTE3LjM0NzggTFxuICAgIG9pbGJhcnJlbDoge1xuICAgICAgbmFtZTogJ29pbGJhcnJlbCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMTU4OTg3MyxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMTU4Ljk4NzMgTFxuICAgIGhvZ3NoZWFkOiB7XG4gICAgICBuYW1lOiAnaG9nc2hlYWQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjIzODQ4MTAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDIzOC40ODEwIExcbiAgICAvLyB7bmFtZTogJ21pbicsIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLCBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwgdmFsdWU6IDAuMDAwMDAwMDYxNjExNTIsIG9mZnNldDogMH0sIC8vIDAuMDYxNjExNTIgbUwgLy8gbWluIGlzIGFscmVhZHkgaW4gdXNlIGFzIG1pbnV0ZVxuICAgIGZsZHI6IHtcbiAgICAgIG5hbWU6ICdmbGRyJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDAwMDM2OTY2OTExLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAzLjY5NjY5MSBtTFxuICAgIGZsb3o6IHtcbiAgICAgIG5hbWU6ICdmbG96JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDAwMjk1NzM1MyxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMjkuNTczNTMgbUxcbiAgICBnaToge1xuICAgICAgbmFtZTogJ2dpJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDAxMTgyOTQxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAxMTguMjk0MSBtTFxuICAgIGNwOiB7XG4gICAgICBuYW1lOiAnY3AnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAwMDIzNjU4ODIsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDIzNi41ODgyIG1MXG4gICAgcHQ6IHtcbiAgICAgIG5hbWU6ICdwdCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDAwNDczMTc2NSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gNDczLjE3NjUgbUxcbiAgICBxdDoge1xuICAgICAgbmFtZTogJ3F0JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDA5NDYzNTI5LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyA5NDYuMzUyOSBtTFxuICAgIGdhbDoge1xuICAgICAgbmFtZTogJ2dhbCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDAzNzg1NDEyLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAzLjc4NTQxMiBMXG4gICAgYmJsOiB7XG4gICAgICBuYW1lOiAnYmJsJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4xMTczNDc4LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAxMTcuMzQ3OCBMXG4gICAgb2JsOiB7XG4gICAgICBuYW1lOiAnb2JsJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4xNTg5ODczLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAxNTguOTg3MyBMXG4gICAgLy8ge25hbWU6ICdob2dzaGVhZCcsIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLCBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwgdmFsdWU6IDAuMjM4NDgxMCwgb2Zmc2V0OiAwfSwgLy8gMjM4LjQ4MTAgTCAvLyBUT0RPOiBoaD9cbiAgICAvLyBNYXNzXG4gICAgZzoge1xuICAgICAgbmFtZTogJ2cnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDAuMDAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBncmFtOiB7XG4gICAgICBuYW1lOiAnZ3JhbScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAwLjAwMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgdG9uOiB7XG4gICAgICBuYW1lOiAndG9uJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUyxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiA5MDcuMTg0NzQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHQ6IHtcbiAgICAgIG5hbWU6ICd0JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUyxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxMDAwLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICB0b25uZToge1xuICAgICAgbmFtZTogJ3Rvbm5lJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUyxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEwMDAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGdyYWluOiB7XG4gICAgICBuYW1lOiAnZ3JhaW4nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNjQuNzk4OTFlLTYsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGRyYW06IHtcbiAgICAgIG5hbWU6ICdkcmFtJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUyxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEuNzcxODQ1MTk1MzEyNWUtMyxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgb3VuY2U6IHtcbiAgICAgIG5hbWU6ICdvdW5jZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAyOC4zNDk1MjMxMjVlLTMsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHBvdW5kbWFzczoge1xuICAgICAgbmFtZTogJ3BvdW5kbWFzcycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiA0NTMuNTkyMzdlLTMsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGh1bmRyZWR3ZWlnaHQ6IHtcbiAgICAgIG5hbWU6ICdodW5kcmVkd2VpZ2h0JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUyxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDQ1LjM1OTIzNyxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgc3RpY2s6IHtcbiAgICAgIG5hbWU6ICdzdGljaycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxMTVlLTMsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHN0b25lOiB7XG4gICAgICBuYW1lOiAnc3RvbmUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNi4zNTAyOTMxOCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZ3I6IHtcbiAgICAgIG5hbWU6ICdncicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiA2NC43OTg5MWUtNixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZHI6IHtcbiAgICAgIG5hbWU6ICdkcicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxLjc3MTg0NTE5NTMxMjVlLTMsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIG96OiB7XG4gICAgICBuYW1lOiAnb3onLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMjguMzQ5NTIzMTI1ZS0zLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBsYm06IHtcbiAgICAgIG5hbWU6ICdsYm0nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNDUzLjU5MjM3ZS0zLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBjd3Q6IHtcbiAgICAgIG5hbWU6ICdjd3QnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNDUuMzU5MjM3LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBUaW1lXG4gICAgczoge1xuICAgICAgbmFtZTogJ3MnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIG1pbjoge1xuICAgICAgbmFtZTogJ21pbicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlRJTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiA2MCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgaDoge1xuICAgICAgbmFtZTogJ2gnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMzYwMCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgc2Vjb25kOiB7XG4gICAgICBuYW1lOiAnc2Vjb25kJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVElNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHNlYzoge1xuICAgICAgbmFtZTogJ3NlYycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlRJTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBtaW51dGU6IHtcbiAgICAgIG5hbWU6ICdtaW51dGUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNjAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGhvdXI6IHtcbiAgICAgIG5hbWU6ICdob3VyJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVElNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDM2MDAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGRheToge1xuICAgICAgbmFtZTogJ2RheScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlRJTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiA4NjQwMCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgd2Vlazoge1xuICAgICAgbmFtZTogJ3dlZWsnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNyAqIDg2NDAwLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBtb250aDoge1xuICAgICAgbmFtZTogJ21vbnRoJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVElNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDI2Mjk4MDAsXG4gICAgICAvLyAxLzEydGggb2YgSnVsaWFuIHllYXJcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgeWVhcjoge1xuICAgICAgbmFtZTogJ3llYXInLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMzE1NTc2MDAsXG4gICAgICAvLyBKdWxpYW4geWVhclxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBkZWNhZGU6IHtcbiAgICAgIG5hbWU6ICdkZWNhZGUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMzE1NTc2MDAwLFxuICAgICAgLy8gSnVsaWFuIGRlY2FkZVxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBjZW50dXJ5OiB7XG4gICAgICBuYW1lOiAnY2VudHVyeScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlRJTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAzMTU1NzYwMDAwLFxuICAgICAgLy8gSnVsaWFuIGNlbnR1cnlcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgbWlsbGVubml1bToge1xuICAgICAgbmFtZTogJ21pbGxlbm5pdW0nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMzE1NTc2MDAwMDAsXG4gICAgICAvLyBKdWxpYW4gbWlsbGVubml1bVxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBGcmVxdWVuY3lcbiAgICBoZXJ0ejoge1xuICAgICAgbmFtZTogJ0hlcnR6JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRlJFUVVFTkNZLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMCxcbiAgICAgIHJlY2lwcm9jYWw6IHRydWVcbiAgICB9LFxuICAgIEh6OiB7XG4gICAgICBuYW1lOiAnSHonLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5GUkVRVUVOQ1ksXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMCxcbiAgICAgIHJlY2lwcm9jYWw6IHRydWVcbiAgICB9LFxuICAgIC8vIEFuZ2xlXG4gICAgcmFkOiB7XG4gICAgICBuYW1lOiAncmFkJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQU5HTEUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgcmFkaWFuOiB7XG4gICAgICBuYW1lOiAncmFkaWFuJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQU5HTEUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBkZWcgPSByYWQgLyAoMipwaSkgKiAzNjAgPSByYWQgLyAwLjAxNzQ1MzI5MjUxOTk0MzI5NTc2OTIzNjkwNzY4NDg4OFxuICAgIGRlZzoge1xuICAgICAgbmFtZTogJ2RlZycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkFOR0xFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAvLyB3aWxsIGJlIGZpbGxlZCBpbiBieSBjYWxjdWxhdGVBbmdsZVZhbHVlcygpXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGRlZ3JlZToge1xuICAgICAgbmFtZTogJ2RlZ3JlZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkFOR0xFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIC8vIHdpbGwgYmUgZmlsbGVkIGluIGJ5IGNhbGN1bGF0ZUFuZ2xlVmFsdWVzKClcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gZ3JhZCA9IHJhZCAvICgyKnBpKSAqIDQwMCAgPSByYWQgLyAwLjAxNTcwNzk2MzI2Nzk0ODk2NjE5MjMxMzIxNjkxNjM5OVxuICAgIGdyYWQ6IHtcbiAgICAgIG5hbWU6ICdncmFkJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQU5HTEUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIC8vIHdpbGwgYmUgZmlsbGVkIGluIGJ5IGNhbGN1bGF0ZUFuZ2xlVmFsdWVzKClcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZ3JhZGlhbjoge1xuICAgICAgbmFtZTogJ2dyYWRpYW4nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5BTkdMRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAvLyB3aWxsIGJlIGZpbGxlZCBpbiBieSBjYWxjdWxhdGVBbmdsZVZhbHVlcygpXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIGN5Y2xlID0gcmFkIC8gKDIqcGkpID0gcmFkIC8gNi4yODMxODUzMDcxNzk1ODY0NzY5MjUyODY3NjY1NzkzXG4gICAgY3ljbGU6IHtcbiAgICAgIG5hbWU6ICdjeWNsZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkFOR0xFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIC8vIHdpbGwgYmUgZmlsbGVkIGluIGJ5IGNhbGN1bGF0ZUFuZ2xlVmFsdWVzKClcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gYXJjc2VjID0gcmFkIC8gKDM2MDAgKiAoMzYwIC8gMiAqIHBpKSkgPSByYWQgLyAwLjAwMDAwNDg0ODEzNjgxMTA5NTM1OTkzNTg5OTE0MTAyMzU3OTVcbiAgICBhcmNzZWM6IHtcbiAgICAgIG5hbWU6ICdhcmNzZWMnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5BTkdMRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAvLyB3aWxsIGJlIGZpbGxlZCBpbiBieSBjYWxjdWxhdGVBbmdsZVZhbHVlcygpXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIGFyY21pbiA9IHJhZCAvICg2MCAqICgzNjAgLyAyICogcGkpKSA9IHJhZCAvIDAuMDAwMjkwODg4MjA4NjY1NzIxNTk2MTUzOTQ4NDYxNDE0NzdcbiAgICBhcmNtaW46IHtcbiAgICAgIG5hbWU6ICdhcmNtaW4nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5BTkdMRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAvLyB3aWxsIGJlIGZpbGxlZCBpbiBieSBjYWxjdWxhdGVBbmdsZVZhbHVlcygpXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIEVsZWN0cmljIGN1cnJlbnRcbiAgICBBOiB7XG4gICAgICBuYW1lOiAnQScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkNVUlJFTlQsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgYW1wZXJlOiB7XG4gICAgICBuYW1lOiAnYW1wZXJlJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQ1VSUkVOVCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIFRlbXBlcmF0dXJlXG4gICAgLy8gSyhDKSA9IMKwQyArIDI3My4xNVxuICAgIC8vIEsoRikgPSAowrBGICsgNDU5LjY3KSAvIDEuOFxuICAgIC8vIEsoUikgPSDCsFIgLyAxLjhcbiAgICBLOiB7XG4gICAgICBuYW1lOiAnSycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlRFTVBFUkFUVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZGVnQzoge1xuICAgICAgbmFtZTogJ2RlZ0MnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5URU1QRVJBVFVSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDI3My4xNVxuICAgIH0sXG4gICAgZGVnRjoge1xuICAgICAgbmFtZTogJ2RlZ0YnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5URU1QRVJBVFVSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEgLyAxLjgsXG4gICAgICBvZmZzZXQ6IDQ1OS42N1xuICAgIH0sXG4gICAgZGVnUjoge1xuICAgICAgbmFtZTogJ2RlZ1InLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5URU1QRVJBVFVSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEgLyAxLjgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGtlbHZpbjoge1xuICAgICAgbmFtZTogJ2tlbHZpbicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlRFTVBFUkFUVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgY2Vsc2l1czoge1xuICAgICAgbmFtZTogJ2NlbHNpdXMnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5URU1QRVJBVFVSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDI3My4xNVxuICAgIH0sXG4gICAgZmFocmVuaGVpdDoge1xuICAgICAgbmFtZTogJ2ZhaHJlbmhlaXQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5URU1QRVJBVFVSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEgLyAxLjgsXG4gICAgICBvZmZzZXQ6IDQ1OS42N1xuICAgIH0sXG4gICAgcmFua2luZToge1xuICAgICAgbmFtZTogJ3JhbmtpbmUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5URU1QRVJBVFVSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEgLyAxLjgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIGFtb3VudCBvZiBzdWJzdGFuY2VcbiAgICBtb2w6IHtcbiAgICAgIG5hbWU6ICdtb2wnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5BTU9VTlRfT0ZfU1VCU1RBTkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIG1vbGU6IHtcbiAgICAgIG5hbWU6ICdtb2xlJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQU1PVU5UX09GX1NVQlNUQU5DRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIGx1bWlub3VzIGludGVuc2l0eVxuICAgIGNkOiB7XG4gICAgICBuYW1lOiAnY2QnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MVU1JTk9VU19JTlRFTlNJVFksXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgY2FuZGVsYToge1xuICAgICAgbmFtZTogJ2NhbmRlbGEnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MVU1JTk9VU19JTlRFTlNJVFksXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBUT0RPOiB1bml0cyBTVEVSQURJQU5cbiAgICAvLyB7bmFtZTogJ3NyJywgYmFzZTogQkFTRV9VTklUUy5TVEVSQURJQU4sIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLCB2YWx1ZTogMSwgb2Zmc2V0OiAwfSxcbiAgICAvLyB7bmFtZTogJ3N0ZXJhZGlhbicsIGJhc2U6IEJBU0VfVU5JVFMuU1RFUkFESUFOLCBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwgdmFsdWU6IDEsIG9mZnNldDogMH0sXG4gICAgLy8gRm9yY2VcbiAgICBOOiB7XG4gICAgICBuYW1lOiAnTicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkZPUkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIG5ld3Rvbjoge1xuICAgICAgbmFtZTogJ25ld3RvbicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkZPUkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZHluOiB7XG4gICAgICBuYW1lOiAnZHluJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRk9SQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMC4wMDAwMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZHluZToge1xuICAgICAgbmFtZTogJ2R5bmUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5GT1JDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDAuMDAwMDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGxiZjoge1xuICAgICAgbmFtZTogJ2xiZicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkZPUkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNC40NDgyMjE2MTUyNjA1LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBwb3VuZGZvcmNlOiB7XG4gICAgICBuYW1lOiAncG91bmRmb3JjZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkZPUkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNC40NDgyMjE2MTUyNjA1LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBraXA6IHtcbiAgICAgIG5hbWU6ICdraXAnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5GT1JDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDQ0NDguMjIxNixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gRW5lcmd5XG4gICAgSjoge1xuICAgICAgbmFtZTogJ0onLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTkVSR1ksXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgam91bGU6IHtcbiAgICAgIG5hbWU6ICdqb3VsZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVORVJHWSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBlcmc6IHtcbiAgICAgIG5hbWU6ICdlcmcnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTkVSR1ksXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxZS03LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBXaDoge1xuICAgICAgbmFtZTogJ1doJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRU5FUkdZLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDM2MDAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIEJUVToge1xuICAgICAgbmFtZTogJ0JUVScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVORVJHWSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5CVFUsXG4gICAgICB2YWx1ZTogMTA1NS4wNTU4NTI2MixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZVY6IHtcbiAgICAgIG5hbWU6ICdlVicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVORVJHWSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLjYwMjE3NjU2NWUtMTksXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGVsZWN0cm9udm9sdDoge1xuICAgICAgbmFtZTogJ2VsZWN0cm9udm9sdCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVORVJHWSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEuNjAyMTc2NTY1ZS0xOSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gUG93ZXJcbiAgICBXOiB7XG4gICAgICBuYW1lOiAnVycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBPV0VSLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHdhdHQ6IHtcbiAgICAgIG5hbWU6ICd3YXR0JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuUE9XRVIsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBocDoge1xuICAgICAgbmFtZTogJ2hwJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuUE9XRVIsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiA3NDUuNjk5ODcxNTM4NixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gRWxlY3RyaWNhbCBwb3dlciB1bml0c1xuICAgIFZBUjoge1xuICAgICAgbmFtZTogJ1ZBUicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBPV0VSLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IENvbXBsZXguSSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgVkE6IHtcbiAgICAgIG5hbWU6ICdWQScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBPV0VSLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIFByZXNzdXJlXG4gICAgUGE6IHtcbiAgICAgIG5hbWU6ICdQYScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBSRVNTVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHBzaToge1xuICAgICAgbmFtZTogJ3BzaScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBSRVNTVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNjg5NC43NTcyOTI3NjQ1OSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgYXRtOiB7XG4gICAgICBuYW1lOiAnYXRtJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuUFJFU1NVUkUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxMDEzMjUsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGJhcjoge1xuICAgICAgbmFtZTogJ2JhcicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBSRVNTVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JUTE9ORyxcbiAgICAgIHZhbHVlOiAxMDAwMDAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHRvcnI6IHtcbiAgICAgIG5hbWU6ICd0b3JyJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuUFJFU1NVUkUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxMzMuMzIyLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBtbUhnOiB7XG4gICAgICBuYW1lOiAnbW1IZycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBSRVNTVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMTMzLjMyMixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgbW1IMk86IHtcbiAgICAgIG5hbWU6ICdtbUgyTycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBSRVNTVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogOS44MDY2NSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgY21IMk86IHtcbiAgICAgIG5hbWU6ICdjbUgyTycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBSRVNTVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogOTguMDY2NSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gRWxlY3RyaWMgY2hhcmdlXG4gICAgY291bG9tYjoge1xuICAgICAgbmFtZTogJ2NvdWxvbWInLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTEVDVFJJQ19DSEFSR0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBDOiB7XG4gICAgICBuYW1lOiAnQycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX0NIQVJHRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBFbGVjdHJpYyBjYXBhY2l0YW5jZVxuICAgIGZhcmFkOiB7XG4gICAgICBuYW1lOiAnZmFyYWQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTEVDVFJJQ19DQVBBQ0lUQU5DRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIEY6IHtcbiAgICAgIG5hbWU6ICdGJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRUxFQ1RSSUNfQ0FQQUNJVEFOQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gRWxlY3RyaWMgcG90ZW50aWFsXG4gICAgdm9sdDoge1xuICAgICAgbmFtZTogJ3ZvbHQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTEVDVFJJQ19QT1RFTlRJQUwsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBWOiB7XG4gICAgICBuYW1lOiAnVicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX1BPVEVOVElBTCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBFbGVjdHJpYyByZXNpc3RhbmNlXG4gICAgb2htOiB7XG4gICAgICBuYW1lOiAnb2htJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRUxFQ1RSSUNfUkVTSVNUQU5DRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVExPTkcsXG4gICAgICAvLyBCb3RoIE1vaG0gYW5kIG1lZ2FvaG0gYXJlIGFjY2VwdGFibGVcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcblxuICAgIC8qXG4gICAgICogVW5pY29kZSBicmVha3MgaW4gYnJvd3NlcnMgaWYgY2hhcnNldCBpcyBub3Qgc3BlY2lmaWVkXG4gICAgzqk6IHtcbiAgICAgIG5hbWU6ICfOqScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX1JFU0lTVEFOQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgKi9cbiAgICAvLyBFbGVjdHJpYyBpbmR1Y3RhbmNlXG4gICAgaGVucnk6IHtcbiAgICAgIG5hbWU6ICdoZW5yeScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX0lORFVDVEFOQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBIOiB7XG4gICAgICBuYW1lOiAnSCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX0lORFVDVEFOQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gRWxlY3RyaWMgY29uZHVjdGFuY2VcbiAgICBzaWVtZW5zOiB7XG4gICAgICBuYW1lOiAnc2llbWVucycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX0NPTkRVQ1RBTkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgUzoge1xuICAgICAgbmFtZTogJ1MnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTEVDVFJJQ19DT05EVUNUQU5DRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBNYWduZXRpYyBmbHV4XG4gICAgd2ViZXI6IHtcbiAgICAgIG5hbWU6ICd3ZWJlcicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BR05FVElDX0ZMVVgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBXYjoge1xuICAgICAgbmFtZTogJ1diJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFHTkVUSUNfRkxVWCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBNYWduZXRpYyBmbHV4IGRlbnNpdHlcbiAgICB0ZXNsYToge1xuICAgICAgbmFtZTogJ3Rlc2xhJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFHTkVUSUNfRkxVWF9ERU5TSVRZLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgVDoge1xuICAgICAgbmFtZTogJ1QnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQUdORVRJQ19GTFVYX0RFTlNJVFksXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gQmluYXJ5XG4gICAgYjoge1xuICAgICAgbmFtZTogJ2InLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5CSVQsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuQklOQVJZX1NIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGJpdHM6IHtcbiAgICAgIG5hbWU6ICdiaXRzJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQklULFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkJJTkFSWV9MT05HLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIEI6IHtcbiAgICAgIG5hbWU6ICdCJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQklULFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkJJTkFSWV9TSE9SVCxcbiAgICAgIHZhbHVlOiA4LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBieXRlczoge1xuICAgICAgbmFtZTogJ2J5dGVzJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQklULFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkJJTkFSWV9MT05HLFxuICAgICAgdmFsdWU6IDgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9XG4gIH07IC8vIGFsaWFzZXMgKGZvcm1lcmx5IHBsdXJhbHMpXG5cbiAgdmFyIEFMSUFTRVMgPSB7XG4gICAgbWV0ZXJzOiAnbWV0ZXInLFxuICAgIGluY2hlczogJ2luY2gnLFxuICAgIGZlZXQ6ICdmb290JyxcbiAgICB5YXJkczogJ3lhcmQnLFxuICAgIG1pbGVzOiAnbWlsZScsXG4gICAgbGlua3M6ICdsaW5rJyxcbiAgICByb2RzOiAncm9kJyxcbiAgICBjaGFpbnM6ICdjaGFpbicsXG4gICAgYW5nc3Ryb21zOiAnYW5nc3Ryb20nLFxuICAgIGx0OiAnbCcsXG4gICAgbGl0cmVzOiAnbGl0cmUnLFxuICAgIGxpdGVyOiAnbGl0cmUnLFxuICAgIGxpdGVyczogJ2xpdHJlJyxcbiAgICB0ZWFzcG9vbnM6ICd0ZWFzcG9vbicsXG4gICAgdGFibGVzcG9vbnM6ICd0YWJsZXNwb29uJyxcbiAgICBtaW5pbXM6ICdtaW5pbScsXG4gICAgZmx1aWRkcmFtczogJ2ZsdWlkZHJhbScsXG4gICAgZmx1aWRvdW5jZXM6ICdmbHVpZG91bmNlJyxcbiAgICBnaWxsczogJ2dpbGwnLFxuICAgIGN1cHM6ICdjdXAnLFxuICAgIHBpbnRzOiAncGludCcsXG4gICAgcXVhcnRzOiAncXVhcnQnLFxuICAgIGdhbGxvbnM6ICdnYWxsb24nLFxuICAgIGJlZXJiYXJyZWxzOiAnYmVlcmJhcnJlbCcsXG4gICAgb2lsYmFycmVsczogJ29pbGJhcnJlbCcsXG4gICAgaG9nc2hlYWRzOiAnaG9nc2hlYWQnLFxuICAgIGd0dHM6ICdndHQnLFxuICAgIGdyYW1zOiAnZ3JhbScsXG4gICAgdG9uczogJ3RvbicsXG4gICAgdG9ubmVzOiAndG9ubmUnLFxuICAgIGdyYWluczogJ2dyYWluJyxcbiAgICBkcmFtczogJ2RyYW0nLFxuICAgIG91bmNlczogJ291bmNlJyxcbiAgICBwb3VuZG1hc3NlczogJ3BvdW5kbWFzcycsXG4gICAgaHVuZHJlZHdlaWdodHM6ICdodW5kcmVkd2VpZ2h0JyxcbiAgICBzdGlja3M6ICdzdGljaycsXG4gICAgbGI6ICdsYm0nLFxuICAgIGxiczogJ2xibScsXG4gICAga2lwczogJ2tpcCcsXG4gICAgYWNyZXM6ICdhY3JlJyxcbiAgICBoZWN0YXJlczogJ2hlY3RhcmUnLFxuICAgIHNxZmVldDogJ3NxZnQnLFxuICAgIHNxeWFyZDogJ3NxeWQnLFxuICAgIHNxbWlsZTogJ3NxbWknLFxuICAgIHNxbWlsZXM6ICdzcW1pJyxcbiAgICBtbWhnOiAnbW1IZycsXG4gICAgbW1oMm86ICdtbUgyTycsXG4gICAgY21oMm86ICdjbUgyTycsXG4gICAgc2Vjb25kczogJ3NlY29uZCcsXG4gICAgc2VjczogJ3NlY29uZCcsXG4gICAgbWludXRlczogJ21pbnV0ZScsXG4gICAgbWluczogJ21pbnV0ZScsXG4gICAgaG91cnM6ICdob3VyJyxcbiAgICBocjogJ2hvdXInLFxuICAgIGhyczogJ2hvdXInLFxuICAgIGRheXM6ICdkYXknLFxuICAgIHdlZWtzOiAnd2VlaycsXG4gICAgbW9udGhzOiAnbW9udGgnLFxuICAgIHllYXJzOiAneWVhcicsXG4gICAgZGVjYWRlczogJ2RlY2FkZScsXG4gICAgY2VudHVyaWVzOiAnY2VudHVyeScsXG4gICAgbWlsbGVubmlhOiAnbWlsbGVubml1bScsXG4gICAgaGVydHo6ICdoZXJ0eicsXG4gICAgcmFkaWFuczogJ3JhZGlhbicsXG4gICAgZGVncmVlczogJ2RlZ3JlZScsXG4gICAgZ3JhZGlhbnM6ICdncmFkaWFuJyxcbiAgICBjeWNsZXM6ICdjeWNsZScsXG4gICAgYXJjc2Vjb25kOiAnYXJjc2VjJyxcbiAgICBhcmNzZWNvbmRzOiAnYXJjc2VjJyxcbiAgICBhcmNtaW51dGU6ICdhcmNtaW4nLFxuICAgIGFyY21pbnV0ZXM6ICdhcmNtaW4nLFxuICAgIEJUVXM6ICdCVFUnLFxuICAgIHdhdHRzOiAnd2F0dCcsXG4gICAgam91bGVzOiAnam91bGUnLFxuICAgIGFtcGVyZXM6ICdhbXBlcmUnLFxuICAgIGNvdWxvbWJzOiAnY291bG9tYicsXG4gICAgdm9sdHM6ICd2b2x0JyxcbiAgICBvaG1zOiAnb2htJyxcbiAgICBmYXJhZHM6ICdmYXJhZCcsXG4gICAgd2ViZXJzOiAnd2ViZXInLFxuICAgIHRlc2xhczogJ3Rlc2xhJyxcbiAgICBlbGVjdHJvbnZvbHRzOiAnZWxlY3Ryb252b2x0JyxcbiAgICBtb2xlczogJ21vbGUnLFxuICAgIGJpdDogJ2JpdHMnLFxuICAgIFwiYnl0ZVwiOiAnYnl0ZXMnXG4gIH07XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHZhbHVlcyBmb3IgdGhlIGFuZ2xlIHVuaXRzLlxuICAgKiBWYWx1ZSBpcyBjYWxjdWxhdGVkIGFzIG51bWJlciBvciBCaWdOdW1iZXIgZGVwZW5kaW5nIG9uIHRoZSBjb25maWd1cmF0aW9uXG4gICAqIEBwYXJhbSB7e251bWJlcjogJ251bWJlcicgfCAnQmlnTnVtYmVyJ319IGNvbmZpZ1xuICAgKi9cblxuICBmdW5jdGlvbiBjYWxjdWxhdGVBbmdsZVZhbHVlcyhjb25maWcpIHtcbiAgICBpZiAoY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicpIHtcbiAgICAgIHZhciBwaSA9ICgwLCBfY29uc3RhbnRzLmNyZWF0ZUJpZ051bWJlclBpKShfQmlnTnVtYmVyKTtcbiAgICAgIFVOSVRTLnJhZC52YWx1ZSA9IG5ldyBfQmlnTnVtYmVyKDEpO1xuICAgICAgVU5JVFMuZGVnLnZhbHVlID0gcGkuZGl2KDE4MCk7IC8vIDIgKiBwaSAvIDM2MFxuXG4gICAgICBVTklUUy5ncmFkLnZhbHVlID0gcGkuZGl2KDIwMCk7IC8vIDIgKiBwaSAvIDQwMFxuXG4gICAgICBVTklUUy5jeWNsZS52YWx1ZSA9IHBpLnRpbWVzKDIpOyAvLyAyICogcGlcblxuICAgICAgVU5JVFMuYXJjc2VjLnZhbHVlID0gcGkuZGl2KDY0ODAwMCk7IC8vIDIgKiBwaSAvIDM2MCAvIDM2MDBcblxuICAgICAgVU5JVFMuYXJjbWluLnZhbHVlID0gcGkuZGl2KDEwODAwKTsgLy8gMiAqIHBpIC8gMzYwIC8gNjBcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbnVtYmVyXG4gICAgICBVTklUUy5yYWQudmFsdWUgPSAxO1xuICAgICAgVU5JVFMuZGVnLnZhbHVlID0gTWF0aC5QSSAvIDE4MDsgLy8gMiAqIHBpIC8gMzYwXG5cbiAgICAgIFVOSVRTLmdyYWQudmFsdWUgPSBNYXRoLlBJIC8gMjAwOyAvLyAyICogcGkgLyA0MDBcblxuICAgICAgVU5JVFMuY3ljbGUudmFsdWUgPSBNYXRoLlBJICogMjsgLy8gMiAqIHBpXG5cbiAgICAgIFVOSVRTLmFyY3NlYy52YWx1ZSA9IE1hdGguUEkgLyA2NDgwMDA7IC8vIDIgKiBwaSAvIDM2MCAvIDM2MDBcblxuICAgICAgVU5JVFMuYXJjbWluLnZhbHVlID0gTWF0aC5QSSAvIDEwODAwOyAvLyAyICogcGkgLyAzNjAgLyA2MFxuICAgIH0gLy8gY29weSB0byB0aGUgZnVsbCBuYW1lcyBvZiB0aGUgYW5nbGVzXG5cblxuICAgIFVOSVRTLnJhZGlhbi52YWx1ZSA9IFVOSVRTLnJhZC52YWx1ZTtcbiAgICBVTklUUy5kZWdyZWUudmFsdWUgPSBVTklUUy5kZWcudmFsdWU7XG4gICAgVU5JVFMuZ3JhZGlhbi52YWx1ZSA9IFVOSVRTLmdyYWQudmFsdWU7XG4gIH0gLy8gYXBwbHkgdGhlIGFuZ2xlIHZhbHVlcyBub3dcblxuXG4gIGNhbGN1bGF0ZUFuZ2xlVmFsdWVzKGNvbmZpZyk7XG5cbiAgaWYgKG9uKSB7XG4gICAgLy8gcmVjYWxjdWxhdGUgdGhlIHZhbHVlcyBvbiBjaGFuZ2Ugb2YgY29uZmlndXJhdGlvblxuICAgIG9uKCdjb25maWcnLCBmdW5jdGlvbiAoY3VyciwgcHJldikge1xuICAgICAgaWYgKGN1cnIubnVtYmVyICE9PSBwcmV2Lm51bWJlcikge1xuICAgICAgICBjYWxjdWxhdGVBbmdsZVZhbHVlcyhjdXJyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQSB1bml0IHN5c3RlbSBpcyBhIHNldCBvZiBkaW1lbnNpb25hbGx5IGluZGVwZW5kZW50IGJhc2UgdW5pdHMgcGx1cyBhIHNldCBvZiBkZXJpdmVkIHVuaXRzLCBmb3JtZWQgYnkgbXVsdGlwbGljYXRpb24gYW5kIGRpdmlzaW9uIG9mIHRoZSBiYXNlIHVuaXRzLCB0aGF0IGFyZSBieSBjb252ZW50aW9uIHVzZWQgd2l0aCB0aGUgdW5pdCBzeXN0ZW0uXG4gICAqIEEgdXNlciBwZXJoYXBzIGNvdWxkIGlzc3VlIGEgY29tbWFuZCB0byBzZWxlY3QgYSBwcmVmZXJyZWQgdW5pdCBzeXN0ZW0sIG9yIHVzZSB0aGUgZGVmYXVsdCAoc2VlIGJlbG93KS5cbiAgICogQXV0byB1bml0IHN5c3RlbTogVGhlIGRlZmF1bHQgdW5pdCBzeXN0ZW0gaXMgdXBkYXRlZCBvbiB0aGUgZmx5IGFueXRpbWUgYSB1bml0IGlzIHBhcnNlZC4gVGhlIGNvcnJlc3BvbmRpbmcgdW5pdCBpbiB0aGUgZGVmYXVsdCB1bml0IHN5c3RlbSBpcyB1cGRhdGVkLCBzbyB0aGF0IGFuc3dlcnMgYXJlIGdpdmVuIGluIHRoZSBzYW1lIHVuaXRzIHRoZSB1c2VyIHN1cHBsaWVzLlxuICAgKi9cblxuXG4gIHZhciBVTklUX1NZU1RFTVMgPSB7XG4gICAgc2k6IHtcbiAgICAgIC8vIEJhc2UgdW5pdHNcbiAgICAgIE5PTkU6IHtcbiAgICAgICAgdW5pdDogVU5JVF9OT05FLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddXG4gICAgICB9LFxuICAgICAgTEVOR1RIOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLm0sXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgTUFTUzoge1xuICAgICAgICB1bml0OiBVTklUUy5nLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JULmtcbiAgICAgIH0sXG4gICAgICBUSU1FOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLnMsXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgQ1VSUkVOVDoge1xuICAgICAgICB1bml0OiBVTklUUy5BLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIFRFTVBFUkFUVVJFOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLkssXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgTFVNSU5PVVNfSU5URU5TSVRZOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLmNkLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIEFNT1VOVF9PRl9TVUJTVEFOQ0U6IHtcbiAgICAgICAgdW5pdDogVU5JVFMubW9sLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIEFOR0xFOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLnJhZCxcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICBCSVQ6IHtcbiAgICAgICAgdW5pdDogVU5JVFMuYml0cyxcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICAvLyBEZXJpdmVkIHVuaXRzXG4gICAgICBGT1JDRToge1xuICAgICAgICB1bml0OiBVTklUUy5OLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIEVORVJHWToge1xuICAgICAgICB1bml0OiBVTklUUy5KLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIFBPV0VSOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLlcsXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgUFJFU1NVUkU6IHtcbiAgICAgICAgdW5pdDogVU5JVFMuUGEsXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgRUxFQ1RSSUNfQ0hBUkdFOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLkMsXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgRUxFQ1RSSUNfQ0FQQUNJVEFOQ0U6IHtcbiAgICAgICAgdW5pdDogVU5JVFMuRixcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICBFTEVDVFJJQ19QT1RFTlRJQUw6IHtcbiAgICAgICAgdW5pdDogVU5JVFMuVixcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICBFTEVDVFJJQ19SRVNJU1RBTkNFOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLm9obSxcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICBFTEVDVFJJQ19JTkRVQ1RBTkNFOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLkgsXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgRUxFQ1RSSUNfQ09ORFVDVEFOQ0U6IHtcbiAgICAgICAgdW5pdDogVU5JVFMuUyxcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICBNQUdORVRJQ19GTFVYOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLldiLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIE1BR05FVElDX0ZMVVhfREVOU0lUWToge1xuICAgICAgICB1bml0OiBVTklUUy5ULFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIEZSRVFVRU5DWToge1xuICAgICAgICB1bml0OiBVTklUUy5IeixcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH1cbiAgICB9XG4gIH07IC8vIENsb25lIHRvIGNyZWF0ZSB0aGUgb3RoZXIgdW5pdCBzeXN0ZW1zXG5cbiAgVU5JVF9TWVNURU1TLmNncyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoVU5JVF9TWVNURU1TLnNpKSk7XG4gIFVOSVRfU1lTVEVNUy5jZ3MuTEVOR1RIID0ge1xuICAgIHVuaXQ6IFVOSVRTLm0sXG4gICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVC5jXG4gIH07XG4gIFVOSVRfU1lTVEVNUy5jZ3MuTUFTUyA9IHtcbiAgICB1bml0OiBVTklUUy5nLFxuICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gIH07XG4gIFVOSVRfU1lTVEVNUy5jZ3MuRk9SQ0UgPSB7XG4gICAgdW5pdDogVU5JVFMuZHluLFxuICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gIH07XG4gIFVOSVRfU1lTVEVNUy5jZ3MuRU5FUkdZID0ge1xuICAgIHVuaXQ6IFVOSVRTLmVyZyxcbiAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddXG4gIH07IC8vIHRoZXJlIGFyZSB3aG9sbHkgNCB1bmlxdWUgY2dzIHN5c3RlbXMgZm9yIGVsZWN0cmljaXR5IGFuZCBtYWduZXRpc20sXG4gIC8vIHNvIGxldCdzIG5vdCB3b3JyeSBhYm91dCBpdCB1bmxlc3Mgc29tZWJvZHkgY29tcGxhaW5zXG5cbiAgVU5JVF9TWVNURU1TLnVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShVTklUX1NZU1RFTVMuc2kpKTtcbiAgVU5JVF9TWVNURU1TLnVzLkxFTkdUSCA9IHtcbiAgICB1bml0OiBVTklUUy5mdCxcbiAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddXG4gIH07XG4gIFVOSVRfU1lTVEVNUy51cy5NQVNTID0ge1xuICAgIHVuaXQ6IFVOSVRTLmxibSxcbiAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddXG4gIH07XG4gIFVOSVRfU1lTVEVNUy51cy5URU1QRVJBVFVSRSA9IHtcbiAgICB1bml0OiBVTklUUy5kZWdGLFxuICAgIHByZWZpeDogUFJFRklYRVMuTk9ORVsnJ11cbiAgfTtcbiAgVU5JVF9TWVNURU1TLnVzLkZPUkNFID0ge1xuICAgIHVuaXQ6IFVOSVRTLmxiZixcbiAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddXG4gIH07XG4gIFVOSVRfU1lTVEVNUy51cy5FTkVSR1kgPSB7XG4gICAgdW5pdDogVU5JVFMuQlRVLFxuICAgIHByZWZpeDogUFJFRklYRVMuQlRVWycnXVxuICB9O1xuICBVTklUX1NZU1RFTVMudXMuUE9XRVIgPSB7XG4gICAgdW5pdDogVU5JVFMuaHAsXG4gICAgcHJlZml4OiBQUkVGSVhFUy5OT05FWycnXVxuICB9O1xuICBVTklUX1NZU1RFTVMudXMuUFJFU1NVUkUgPSB7XG4gICAgdW5pdDogVU5JVFMucHNpLFxuICAgIHByZWZpeDogUFJFRklYRVMuTk9ORVsnJ11cbiAgfTsgLy8gQWRkIGFkZGl0aW9uYWwgdW5pdCBzeXN0ZW1zIGhlcmUuXG4gIC8vIENob29zZSBhIHVuaXQgc3lzdGVtIHRvIHNlZWQgdGhlIGF1dG8gdW5pdCBzeXN0ZW0uXG5cbiAgVU5JVF9TWVNURU1TLmF1dG8gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KFVOSVRfU1lTVEVNUy5zaSkpOyAvLyBTZXQgdGhlIGN1cnJlbnQgdW5pdCBzeXN0ZW1cblxuICB2YXIgY3VycmVudFVuaXRTeXN0ZW0gPSBVTklUX1NZU1RFTVMuYXV0bztcbiAgLyoqXG4gICAqIFNldCBhIHVuaXQgc3lzdGVtIGZvciBmb3JtYXR0aW5nIGRlcml2ZWQgdW5pdHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV0gVGhlIG5hbWUgb2YgdGhlIHVuaXQgc3lzdGVtLlxuICAgKi9cblxuICBVbml0LnNldFVuaXRTeXN0ZW0gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoVU5JVF9TWVNURU1TLCBuYW1lKSkge1xuICAgICAgY3VycmVudFVuaXRTeXN0ZW0gPSBVTklUX1NZU1RFTVNbbmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5pdCBzeXN0ZW0gJyArIG5hbWUgKyAnIGRvZXMgbm90IGV4aXN0LiBDaG9pY2VzIGFyZTogJyArIE9iamVjdC5rZXlzKFVOSVRfU1lTVEVNUykuam9pbignLCAnKSk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogUmV0dXJuIHRoZSBjdXJyZW50IHVuaXQgc3lzdGVtLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjdXJyZW50IHVuaXQgc3lzdGVtLlxuICAgKi9cblxuXG4gIFVuaXQuZ2V0VW5pdFN5c3RlbSA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBfa2V5IGluIFVOSVRfU1lTVEVNUykge1xuICAgICAgaWYgKFVOSVRfU1lTVEVNU1tfa2V5XSA9PT0gY3VycmVudFVuaXRTeXN0ZW0pIHtcbiAgICAgICAgcmV0dXJuIF9rZXk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ29udmVydGVycyB0byBjb252ZXJ0IGZyb20gbnVtYmVyIHRvIGFuIG90aGVyIG51bWVyaWMgdHlwZSBsaWtlIEJpZ051bWJlclxuICAgKiBvciBGcmFjdGlvblxuICAgKi9cblxuXG4gIFVuaXQudHlwZUNvbnZlcnRlcnMgPSB7XG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKHggKyAnJyk7IC8vIHN0cmluZ2lmeSB0byBwcmV2ZW50IGNvbnN0cnVjdG9yIGVycm9yXG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIG5ldyBfRnJhY3Rpb24oeCk7XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH0sXG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHJpZ2h0IGNvbnZlcnRvciBmdW5jdGlvbiBjb3JyZXNwb25kaW5nIHdpdGggdGhlIHR5cGVcbiAgICogb2YgcHJvdmlkZWQgZXhhbXBsZVZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAgIEEgc3RyaW5nICdudW1iZXInLCAnQmlnTnVtYmVyJywgb3IgJ0ZyYWN0aW9uJ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIEluIGNhc2Ugb2YgYW4gdW5rbm93biB0eXBlLFxuICAgKiBAcmV0dXJuIHtGdW5jdGlvbn1cbiAgICovXG5cbiAgVW5pdC5fZ2V0TnVtYmVyQ29udmVydGVyID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICBpZiAoIVVuaXQudHlwZUNvbnZlcnRlcnNbdHlwZV0pIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vuc3VwcG9ydGVkIHR5cGUgXCInICsgdHlwZSArICdcIicpO1xuICAgIH1cblxuICAgIHJldHVybiBVbml0LnR5cGVDb252ZXJ0ZXJzW3R5cGVdO1xuICB9OyAvLyBBZGQgZGltZW5zaW9ucyB0byBlYWNoIGJ1aWx0LWluIHVuaXRcblxuXG4gIGZvciAodmFyIF9rZXkyIGluIFVOSVRTKSB7XG4gICAgdmFyIHVuaXQgPSBVTklUU1tfa2V5Ml07XG4gICAgdW5pdC5kaW1lbnNpb25zID0gdW5pdC5iYXNlLmRpbWVuc2lvbnM7XG4gIH0gLy8gQ3JlYXRlIGFsaWFzZXNcblxuXG4gIGZvciAodmFyIF9uYW1lMiBpbiBBTElBU0VTKSB7XG4gICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShBTElBU0VTLCBfbmFtZTIpKSB7XG4gICAgICB2YXIgX3VuaXQyID0gVU5JVFNbQUxJQVNFU1tfbmFtZTJdXTtcbiAgICAgIHZhciBhbGlhcyA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBfa2V5MyBpbiBfdW5pdDIpIHtcbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShfdW5pdDIsIF9rZXkzKSkge1xuICAgICAgICAgIGFsaWFzW19rZXkzXSA9IF91bml0Mltfa2V5M107XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgYWxpYXMubmFtZSA9IF9uYW1lMjtcbiAgICAgIFVOSVRTW19uYW1lMl0gPSBhbGlhcztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBhc3NlcnRVbml0TmFtZUlzVmFsaWQobmFtZSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZS5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIF9jID0gbmFtZS5jaGFyQXQoaSk7XG5cbiAgICAgIHZhciBpc1ZhbGlkQWxwaGEgPSBmdW5jdGlvbiBpc1ZhbGlkQWxwaGEocCkge1xuICAgICAgICByZXR1cm4gL15bYS16QS1aXSQvLnRlc3QocCk7XG4gICAgICB9O1xuXG4gICAgICB2YXIgX2lzRGlnaXQgPSBmdW5jdGlvbiBfaXNEaWdpdChjKSB7XG4gICAgICAgIHJldHVybiBjID49ICcwJyAmJiBjIDw9ICc5JztcbiAgICAgIH07XG5cbiAgICAgIGlmIChpID09PSAwICYmICFpc1ZhbGlkQWxwaGEoX2MpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1bml0IG5hbWUgKG11c3QgYmVnaW4gd2l0aCBhbHBoYSBjaGFyYWN0ZXIpOiBcIicgKyBuYW1lICsgJ1wiJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChpID4gMCAmJiAhKGlzVmFsaWRBbHBoYShfYykgfHwgX2lzRGlnaXQoX2MpKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdW5pdCBuYW1lIChvbmx5IGFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkKTogXCInICsgbmFtZSArICdcIicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogV3JhcHBlciBhcm91bmQgY3JlYXRlVW5pdFNpbmdsZS5cbiAgICogRXhhbXBsZTpcbiAgICogIGNyZWF0ZVVuaXQoe1xuICAgKiAgICBmb286IHsgfSxcbiAgICogICAgYmFyOiB7XG4gICAqICAgICAgZGVmaW5pdGlvbjogJ2tnL2ZvbycsXG4gICAqICAgICAgYWxpYXNlczogWydiYScsICdiYXJyJywgJ2JhcnMnXSxcbiAgICogICAgICBvZmZzZXQ6IDIwMFxuICAgKiAgICB9LFxuICAgKiAgICBiYXo6ICc0IGJhcidcbiAgICogIH0sXG4gICAqICB7XG4gICAqICAgIG92ZXJyaWRlOiB0cnVlXG4gICAqICB9KVxuICAgKiBAcGFyYW0ge29iamVjdH0gb2JqICAgICAgT2JqZWN0IG1hcC4gRWFjaCBrZXkgYmVjb21lcyBhIHVuaXQgd2hpY2ggaXMgZGVmaW5lZCBieSBpdHMgdmFsdWUuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gICAqL1xuXG5cbiAgVW5pdC5jcmVhdGVVbml0ID0gZnVuY3Rpb24gKG9iaiwgb3B0aW9ucykge1xuICAgIGlmIChfdHlwZW9mKG9iaikgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiY3JlYXRlVW5pdCBleHBlY3RzIGZpcnN0IHBhcmFtZXRlciB0byBiZSBvZiB0eXBlICdPYmplY3QnXCIpO1xuICAgIH0gLy8gUmVtb3ZlIGFsbCB1bml0cyBhbmQgYWxpYXNlcyB3ZSBhcmUgb3ZlcnJpZGluZ1xuXG5cbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLm92ZXJyaWRlKSB7XG4gICAgICBmb3IgKHZhciBfa2V5NCBpbiBvYmopIHtcbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShvYmosIF9rZXk0KSkge1xuICAgICAgICAgIFVuaXQuZGVsZXRlVW5pdChfa2V5NCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob2JqW19rZXk0XS5hbGlhc2VzKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmpbX2tleTRdLmFsaWFzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIFVuaXQuZGVsZXRlVW5pdChvYmpbX2tleTRdLmFsaWFzZXNbaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gVE9ETzogdHJhdmVyc2UgbXVsdGlwbGUgdGltZXMgdW50aWwgYWxsIHVuaXRzIGhhdmUgYmVlbiBhZGRlZFxuXG5cbiAgICB2YXIgbGFzdFVuaXQ7XG5cbiAgICBmb3IgKHZhciBfa2V5NSBpbiBvYmopIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkob2JqLCBfa2V5NSkpIHtcbiAgICAgICAgbGFzdFVuaXQgPSBVbml0LmNyZWF0ZVVuaXRTaW5nbGUoX2tleTUsIG9ialtfa2V5NV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBsYXN0VW5pdDtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIHVzZXItZGVmaW5lZCB1bml0IGFuZCByZWdpc3RlciBpdCB3aXRoIHRoZSBVbml0IHR5cGUuXG4gICAqIEV4YW1wbGU6XG4gICAqICBjcmVhdGVVbml0U2luZ2xlKCdrbm90JywgJzAuNTE0NDQ0NDQ0IG0vcycpXG4gICAqICBjcmVhdGVVbml0U2luZ2xlKCdhY3JlJywgbmV3IFVuaXQoNDM1NjAsICdmdF4yJykpXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lICAgICAgVGhlIG5hbWUgb2YgdGhlIG5ldyB1bml0LiBNdXN0IGJlIHVuaXF1ZS4gRXhhbXBsZTogJ2tub3QnXG4gICAqIEBwYXJhbSB7c3RyaW5nLCBVbml0LCBPYmplY3R9IGRlZmluaXRpb24gICAgICBEZWZpbml0aW9uIG9mIHRoZSB1bml0IGluIHRlcm1zXG4gICAqIG9mIGV4aXN0aW5nIHVuaXRzLiBGb3IgZXhhbXBsZSwgJzAuNTE0NDQ0NDQ0IG0gLyBzJy4gQ2FuIGJlIGEgVW5pdCwgYSBzdHJpbmcsXG4gICAqIG9yIGFuIE9iamVjdC4gSWYgYW4gT2JqZWN0LCBtYXkgaGF2ZSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAqICAgLSBkZWZpbml0aW9uIHtzdHJpbmd8VW5pdH0gVGhlIGRlZmluaXRpb24gb2YgdGhpcyB1bml0LlxuICAgKiAgIC0gcHJlZml4ZXMge3N0cmluZ30gXCJub25lXCIsIFwic2hvcnRcIiwgXCJsb25nXCIsIFwiYmluYXJ5X3Nob3J0XCIsIG9yIFwiYmluYXJ5X2xvbmdcIi5cbiAgICogICAgIFRoZSBkZWZhdWx0IGlzIFwibm9uZVwiLlxuICAgKiAgIC0gYWxpYXNlcyB7QXJyYXl9IEFycmF5IG9mIHN0cmluZ3MuIEV4YW1wbGU6IFsna25vdHMnLCAna3QnLCAna3RzJ11cbiAgICogICAtIG9mZnNldCB7TnVtZXJpY30gQW4gb2Zmc2V0IHRvIGFwcGx5IHdoZW4gY29udmVydGluZyBmcm9tIHRoZSB1bml0LiBGb3JcbiAgICogICAgIGV4YW1wbGUsIHRoZSBvZmZzZXQgZm9yIGNlbHNpdXMgaXMgMjczLjE1IGFuZCB0aGUgb2Zmc2V0IGZvciBmYXJoZW5oZWl0XG4gICAqICAgICBpcyA0NTkuNjcuIERlZmF1bHQgaXMgMC5cbiAgICogICAtIGJhc2VOYW1lIHtzdHJpbmd9IElmIHRoZSB1bml0J3MgZGltZW5zaW9uIGRvZXMgbm90IG1hdGNoIHRoYXQgb2YgYW55IG90aGVyXG4gICAqICAgICBiYXNlIHVuaXQsIHRoZSBuYW1lIG9mIHRoZSBuZXdseSBjcmVhdGUgYmFzZSB1bml0LiBPdGhlcndpc2UsIHRoaXMgcHJvcGVydHlcbiAgICogICAgIGhhcyBubyBlZmZlY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zICAgKG9wdGlvbmFsKSBBbiBvYmplY3QgY29udGFpbmluZyBhbnkgb2YgdGhlIGZvbGxvd2luZ1xuICAgKiBwcm9wZXJ0aWVzOlxuICAgKiAgIC0gb3ZlcnJpZGUge2Jvb2xlYW59IFdoZXRoZXIgdGhpcyB1bml0IHNob3VsZCBiZSBhbGxvd2VkIHRvIG92ZXJyaWRlIGV4aXN0aW5nXG4gICAqICAgICB1bml0cy5cbiAgICpcbiAgICogQHJldHVybiB7VW5pdH1cbiAgICovXG5cblxuICBVbml0LmNyZWF0ZVVuaXRTaW5nbGUgPSBmdW5jdGlvbiAobmFtZSwgb2JqLCBvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnIHx8IG9iaiA9PT0gbnVsbCkge1xuICAgICAgb2JqID0ge307XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImNyZWF0ZVVuaXRTaW5nbGUgZXhwZWN0cyBmaXJzdCBwYXJhbWV0ZXIgdG8gYmUgb2YgdHlwZSAnc3RyaW5nJ1wiKTtcbiAgICB9IC8vIENoZWNrIGNvbGxpc2lvbnMgd2l0aCBleGlzdGluZyB1bml0c1xuXG5cbiAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKFVOSVRTLCBuYW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY3JlYXRlIHVuaXQgXCInICsgbmFtZSArICdcIjogYSB1bml0IHdpdGggdGhhdCBuYW1lIGFscmVhZHkgZXhpc3RzJyk7XG4gICAgfSAvLyBUT0RPOiBWYWxpZGF0ZSBuYW1lIGZvciBjb2xsaXNpb25zIHdpdGggb3RoZXIgYnVpbHQtaW4gZnVuY3Rpb25zIChsaWtlIGFicyBvciBjb3MsIGZvciBleGFtcGxlKSwgYW5kIGZvciBhY2NlcHRhYmxlIHZhcmlhYmxlIG5hbWVzLiBGb3IgZXhhbXBsZSwgJzQyJyBpcyBwcm9iYWJseSBub3QgYSB2YWxpZCB1bml0LiBOb3IgaXMgJyUnLCBzaW5jZSBpdCBpcyBhbHNvIGFuIG9wZXJhdG9yLlxuXG5cbiAgICBhc3NlcnRVbml0TmFtZUlzVmFsaWQobmFtZSk7XG4gICAgdmFyIGRlZlVuaXQgPSBudWxsOyAvLyBUaGUgVW5pdCBmcm9tIHdoaWNoIHRoZSBuZXcgdW5pdCB3aWxsIGJlIGNyZWF0ZWQuXG5cbiAgICB2YXIgYWxpYXNlcyA9IFtdO1xuICAgIHZhciBvZmZzZXQgPSAwO1xuICAgIHZhciBkZWZpbml0aW9uO1xuICAgIHZhciBwcmVmaXhlcztcbiAgICB2YXIgYmFzZU5hbWU7XG5cbiAgICBpZiAob2JqICYmIG9iai50eXBlID09PSAnVW5pdCcpIHtcbiAgICAgIGRlZlVuaXQgPSBvYmouY2xvbmUoKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAob2JqICE9PSAnJykge1xuICAgICAgICBkZWZpbml0aW9uID0gb2JqO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoX3R5cGVvZihvYmopID09PSAnb2JqZWN0Jykge1xuICAgICAgZGVmaW5pdGlvbiA9IG9iai5kZWZpbml0aW9uO1xuICAgICAgcHJlZml4ZXMgPSBvYmoucHJlZml4ZXM7XG4gICAgICBvZmZzZXQgPSBvYmoub2Zmc2V0O1xuICAgICAgYmFzZU5hbWUgPSBvYmouYmFzZU5hbWU7XG5cbiAgICAgIGlmIChvYmouYWxpYXNlcykge1xuICAgICAgICBhbGlhc2VzID0gb2JqLmFsaWFzZXMudmFsdWVPZigpOyAvLyBhbGlhc2VzIGNvdWxkIGJlIGEgTWF0cml4LCBzbyBjb252ZXJ0IHRvIEFycmF5XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjcmVhdGUgdW5pdCBcIicgKyBuYW1lICsgJ1wiIGZyb20gXCInICsgb2JqLnRvU3RyaW5nKCkgKyAnXCI6IGV4cGVjdGluZyBcInN0cmluZ1wiIG9yIFwiVW5pdFwiIG9yIFwiT2JqZWN0XCInKTtcbiAgICB9XG5cbiAgICBpZiAoYWxpYXNlcykge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGlhc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoVU5JVFMsIGFsaWFzZXNbaV0pKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY3JlYXRlIGFsaWFzIFwiJyArIGFsaWFzZXNbaV0gKyAnXCI6IGEgdW5pdCB3aXRoIHRoYXQgbmFtZSBhbHJlYWR5IGV4aXN0cycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRlZmluaXRpb24gJiYgdHlwZW9mIGRlZmluaXRpb24gPT09ICdzdHJpbmcnICYmICFkZWZVbml0KSB7XG4gICAgICB0cnkge1xuICAgICAgICBkZWZVbml0ID0gVW5pdC5wYXJzZShkZWZpbml0aW9uLCB7XG4gICAgICAgICAgYWxsb3dOb1VuaXRzOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgZXgubWVzc2FnZSA9ICdDb3VsZCBub3QgY3JlYXRlIHVuaXQgXCInICsgbmFtZSArICdcIiBmcm9tIFwiJyArIGRlZmluaXRpb24gKyAnXCI6ICcgKyBleC5tZXNzYWdlO1xuICAgICAgICB0aHJvdyBleDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGRlZmluaXRpb24gJiYgZGVmaW5pdGlvbi50eXBlID09PSAnVW5pdCcpIHtcbiAgICAgIGRlZlVuaXQgPSBkZWZpbml0aW9uLmNsb25lKCk7XG4gICAgfVxuXG4gICAgYWxpYXNlcyA9IGFsaWFzZXMgfHwgW107XG4gICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cbiAgICBpZiAocHJlZml4ZXMgJiYgcHJlZml4ZXMudG9VcHBlckNhc2UpIHtcbiAgICAgIHByZWZpeGVzID0gUFJFRklYRVNbcHJlZml4ZXMudG9VcHBlckNhc2UoKV0gfHwgUFJFRklYRVMuTk9ORTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJlZml4ZXMgPSBQUkVGSVhFUy5OT05FO1xuICAgIH0gLy8gSWYgZGVmVW5pdCBpcyBudWxsLCBpdCBpcyBiZWNhdXNlIHRoZSB1c2VyIGRpZCBub3RcbiAgICAvLyBzcGVjaWZ5IGEgZGVmaW50aW9uLiBTbyBjcmVhdGUgYSBuZXcgYmFzZSBkaW1lbnNpb24uXG5cblxuICAgIHZhciBuZXdVbml0ID0ge307XG5cbiAgICBpZiAoIWRlZlVuaXQpIHtcbiAgICAgIC8vIEFkZCBhIG5ldyBiYXNlIGRpbWVuc2lvblxuICAgICAgYmFzZU5hbWUgPSBiYXNlTmFtZSB8fCBuYW1lICsgJ19TVFVGRic7IC8vIGZvbyAtLT4gZm9vX1NUVUZGLCBvciB0aGUgZXNzZW5jZSBvZiBmb29cblxuICAgICAgaWYgKEJBU0VfRElNRU5TSU9OUy5pbmRleE9mKGJhc2VOYW1lKSA+PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNyZWF0ZSBuZXcgYmFzZSB1bml0IFwiJyArIG5hbWUgKyAnXCI6IGEgYmFzZSB1bml0IHdpdGggdGhhdCBuYW1lIGFscmVhZHkgZXhpc3RzIChhbmQgY2Fubm90IGJlIG92ZXJyaWRkZW4pJyk7XG4gICAgICB9XG5cbiAgICAgIEJBU0VfRElNRU5TSU9OUy5wdXNoKGJhc2VOYW1lKTsgLy8gUHVzaCAwIG9udG8gZXhpc3RpbmcgYmFzZSB1bml0c1xuXG4gICAgICBmb3IgKHZhciBiIGluIEJBU0VfVU5JVFMpIHtcbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShCQVNFX1VOSVRTLCBiKSkge1xuICAgICAgICAgIEJBU0VfVU5JVFNbYl0uZGltZW5zaW9uc1tCQVNFX0RJTUVOU0lPTlMubGVuZ3RoIC0gMV0gPSAwO1xuICAgICAgICB9XG4gICAgICB9IC8vIEFkZCB0aGUgbmV3IGJhc2UgdW5pdFxuXG5cbiAgICAgIHZhciBuZXdCYXNlVW5pdCA9IHtcbiAgICAgICAgZGltZW5zaW9uczogW11cbiAgICAgIH07XG5cbiAgICAgIGZvciAodmFyIF9pNiA9IDA7IF9pNiA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IF9pNisrKSB7XG4gICAgICAgIG5ld0Jhc2VVbml0LmRpbWVuc2lvbnNbX2k2XSA9IDA7XG4gICAgICB9XG5cbiAgICAgIG5ld0Jhc2VVbml0LmRpbWVuc2lvbnNbQkFTRV9ESU1FTlNJT05TLmxlbmd0aCAtIDFdID0gMTtcbiAgICAgIG5ld0Jhc2VVbml0LmtleSA9IGJhc2VOYW1lO1xuICAgICAgQkFTRV9VTklUU1tiYXNlTmFtZV0gPSBuZXdCYXNlVW5pdDtcbiAgICAgIG5ld1VuaXQgPSB7XG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBkaW1lbnNpb25zOiBCQVNFX1VOSVRTW2Jhc2VOYW1lXS5kaW1lbnNpb25zLnNsaWNlKDApLFxuICAgICAgICBwcmVmaXhlczogcHJlZml4ZXMsXG4gICAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgICBiYXNlOiBCQVNFX1VOSVRTW2Jhc2VOYW1lXVxuICAgICAgfTtcbiAgICAgIGN1cnJlbnRVbml0U3lzdGVtW2Jhc2VOYW1lXSA9IHtcbiAgICAgICAgdW5pdDogbmV3VW5pdCxcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5OT05FWycnXVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3VW5pdCA9IHtcbiAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgdmFsdWU6IGRlZlVuaXQudmFsdWUsXG4gICAgICAgIGRpbWVuc2lvbnM6IGRlZlVuaXQuZGltZW5zaW9ucy5zbGljZSgwKSxcbiAgICAgICAgcHJlZml4ZXM6IHByZWZpeGVzLFxuICAgICAgICBvZmZzZXQ6IG9mZnNldFxuICAgICAgfTsgLy8gQ3JlYXRlIGEgbmV3IGJhc2UgaWYgbm8gbWF0Y2hpbmcgYmFzZSBleGlzdHNcblxuICAgICAgdmFyIGFueU1hdGNoID0gZmFsc2U7XG5cbiAgICAgIGZvciAodmFyIF9pNyBpbiBCQVNFX1VOSVRTKSB7XG4gICAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoQkFTRV9VTklUUywgX2k3KSkge1xuICAgICAgICAgIHZhciBtYXRjaCA9IHRydWU7XG5cbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgaWYgKE1hdGguYWJzKChuZXdVbml0LmRpbWVuc2lvbnNbal0gfHwgMCkgLSAoQkFTRV9VTklUU1tfaTddLmRpbWVuc2lvbnNbal0gfHwgMCkpID4gMWUtMTIpIHtcbiAgICAgICAgICAgICAgbWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBhbnlNYXRjaCA9IHRydWU7XG4gICAgICAgICAgICBuZXdVbml0LmJhc2UgPSBCQVNFX1VOSVRTW19pN107XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKCFhbnlNYXRjaCkge1xuICAgICAgICBiYXNlTmFtZSA9IGJhc2VOYW1lIHx8IG5hbWUgKyAnX1NUVUZGJzsgLy8gZm9vIC0tPiBmb29fU1RVRkYsIG9yIHRoZSBlc3NlbmNlIG9mIGZvb1xuICAgICAgICAvLyBBZGQgdGhlIG5ldyBiYXNlIHVuaXRcblxuICAgICAgICB2YXIgX25ld0Jhc2VVbml0ID0ge1xuICAgICAgICAgIGRpbWVuc2lvbnM6IGRlZlVuaXQuZGltZW5zaW9ucy5zbGljZSgwKVxuICAgICAgICB9O1xuICAgICAgICBfbmV3QmFzZVVuaXQua2V5ID0gYmFzZU5hbWU7XG4gICAgICAgIEJBU0VfVU5JVFNbYmFzZU5hbWVdID0gX25ld0Jhc2VVbml0O1xuICAgICAgICBjdXJyZW50VW5pdFN5c3RlbVtiYXNlTmFtZV0gPSB7XG4gICAgICAgICAgdW5pdDogbmV3VW5pdCxcbiAgICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddXG4gICAgICAgIH07XG4gICAgICAgIG5ld1VuaXQuYmFzZSA9IEJBU0VfVU5JVFNbYmFzZU5hbWVdO1xuICAgICAgfVxuICAgIH1cblxuICAgIFVuaXQuVU5JVFNbbmFtZV0gPSBuZXdVbml0O1xuXG4gICAgZm9yICh2YXIgX2k4ID0gMDsgX2k4IDwgYWxpYXNlcy5sZW5ndGg7IF9pOCsrKSB7XG4gICAgICB2YXIgYWxpYXNOYW1lID0gYWxpYXNlc1tfaThdO1xuICAgICAgdmFyIF9hbGlhcyA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBfa2V5NiBpbiBuZXdVbml0KSB7XG4gICAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkobmV3VW5pdCwgX2tleTYpKSB7XG4gICAgICAgICAgX2FsaWFzW19rZXk2XSA9IG5ld1VuaXRbX2tleTZdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIF9hbGlhcy5uYW1lID0gYWxpYXNOYW1lO1xuICAgICAgVW5pdC5VTklUU1thbGlhc05hbWVdID0gX2FsaWFzO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgVW5pdChudWxsLCBuYW1lKTtcbiAgfTtcblxuICBVbml0LmRlbGV0ZVVuaXQgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIGRlbGV0ZSBVbml0LlVOSVRTW25hbWVdO1xuICB9OyAvLyBleHBvc2UgYXJyYXlzIHdpdGggcHJlZml4ZXMsIGRpbWVuc2lvbnMsIHVuaXRzLCBzeXN0ZW1zXG5cblxuICBVbml0LlBSRUZJWEVTID0gUFJFRklYRVM7XG4gIFVuaXQuQkFTRV9ESU1FTlNJT05TID0gQkFTRV9ESU1FTlNJT05TO1xuICBVbml0LkJBU0VfVU5JVFMgPSBCQVNFX1VOSVRTO1xuICBVbml0LlVOSVRfU1lTVEVNUyA9IFVOSVRfU1lTVEVNUztcbiAgVW5pdC5VTklUUyA9IFVOSVRTO1xuICByZXR1cm4gVW5pdDtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVVuaXRDbGFzcyA9IGNyZWF0ZVVuaXRDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ3JlYXRlVW5pdCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2NyZWF0ZVVuaXQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnVW5pdCddO1xudmFyIGNyZWF0ZUNyZWF0ZVVuaXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgVW5pdCA9IF9yZWYuVW5pdDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgdXNlci1kZWZpbmVkIHVuaXQgYW5kIHJlZ2lzdGVyIGl0IHdpdGggdGhlIFVuaXQgdHlwZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5jcmVhdGVVbml0KHtcbiAgICogICAgICAgYmFzZVVuaXQxOiB7XG4gICAqICAgICAgICAgYWxpYXNlczogW3N0cmluZywgLi4uXVxuICAgKiAgICAgICAgIHByZWZpeGVzOiBvYmplY3RcbiAgICogICAgICAgfSxcbiAgICogICAgICAgdW5pdDI6IHtcbiAgICogICAgICAgICBkZWZpbml0aW9uOiBzdHJpbmcsXG4gICAqICAgICAgICAgYWxpYXNlczogW3N0cmluZywgLi4uXVxuICAgKiAgICAgICAgIHByZWZpeGVzOiBvYmplY3QsXG4gICAqICAgICAgICAgb2Zmc2V0OiBudW1iZXJcbiAgICogICAgICAgfSxcbiAgICogICAgICAgdW5pdDM6IHN0cmluZyAgICAvLyBTaG9ydGN1dFxuICAgKiAgICAgfSlcbiAgICpcbiAgICogICAgIC8vIEFub3RoZXIgc2hvcnRjdXQ6XG4gICAqICAgICBtYXRoLmNyZWF0ZVVuaXQoc3RyaW5nLCB1bml0IDogc3RyaW5nLCBbb2JqZWN0XSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLmNyZWF0ZVVuaXQoJ2ZvbycpXG4gICAqICAgICBtYXRoLmNyZWF0ZVVuaXQoJ2tub3QnLCB7ZGVmaW5pdGlvbjogJzAuNTE0NDQ0NDQ0IG0vcycsIGFsaWFzZXM6IFsna25vdHMnLCAna3QnLCAna3RzJ119KVxuICAgKiAgICAgbWF0aC5jcmVhdGVVbml0KCdtcGgnLCAnMSBtaWxlL2hvdXInKVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgICAgIFRoZSBuYW1lIG9mIHRoZSBuZXcgdW5pdC4gTXVzdCBiZSB1bmlxdWUuIEV4YW1wbGU6ICdrbm90J1xuICAgKiBAcGFyYW0ge3N0cmluZywgVW5pdH0gZGVmaW5pdGlvbiAgICAgIERlZmluaXRpb24gb2YgdGhlIHVuaXQgaW4gdGVybXMgb2YgZXhpc3RpbmcgdW5pdHMuIEZvciBleGFtcGxlLCAnMC41MTQ0NDQ0NDQgbSAvIHMnLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAgIChvcHRpb25hbCkgQW4gb2JqZWN0IGNvbnRhaW5pbmcgYW55IG9mIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbiAgICogICAgIC0gYHByZWZpeGVzIHtzdHJpbmd9YCBcIm5vbmVcIiwgXCJzaG9ydFwiLCBcImxvbmdcIiwgXCJiaW5hcnlfc2hvcnRcIiwgb3IgXCJiaW5hcnlfbG9uZ1wiLiBUaGUgZGVmYXVsdCBpcyBcIm5vbmVcIi5cbiAgICogICAgIC0gYGFsaWFzZXMge0FycmF5fWAgQXJyYXkgb2Ygc3RyaW5ncy4gRXhhbXBsZTogWydrbm90cycsICdrdCcsICdrdHMnXVxuICAgKiAgICAgLSBgb2Zmc2V0IHtOdW1lcmljfWAgQW4gb2Zmc2V0IHRvIGFwcGx5IHdoZW4gY29udmVydGluZyBmcm9tIHRoZSB1bml0LiBGb3IgZXhhbXBsZSwgdGhlIG9mZnNldCBmb3IgY2Vsc2l1cyBpcyAyNzMuMTUuIERlZmF1bHQgaXMgMC5cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICB1bml0XG4gICAqXG4gICAqIEByZXR1cm4ge1VuaXR9IFRoZSBuZXcgdW5pdFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyBHZW5lcmFsIGZ1bmN0aW9uIHNpZ25hdHVyZS4gRmlyc3QgcGFyYW1ldGVyIGlzIGFuIG9iamVjdCB3aGVyZSBlYWNoIHByb3BlcnR5IGlzIHRoZSBkZWZpbml0aW9uIG9mIGEgbmV3IHVuaXQuIFRoZSBvYmplY3Qga2V5cyBhcmUgdGhlIHVuaXQgbmFtZXMgYW5kIHRoZSB2YWx1ZXMgYXJlIHRoZSBkZWZpbml0aW9ucy4gVGhlIHZhbHVlcyBjYW4gYmUgb2JqZWN0cywgc3RyaW5ncywgb3IgVW5pdHMuIElmIGEgcHJvcGVydHkgaXMgYW4gZW1wdHkgb2JqZWN0IG9yIGFuIGVtcHR5IHN0cmluZywgYSBuZXcgYmFzZSB1bml0IGlzIGNyZWF0ZWQuIFRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHRoZSBvcHRpb25zLlxuICAgICdPYmplY3QsIE9iamVjdCc6IGZ1bmN0aW9uIE9iamVjdE9iamVjdChvYmosIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBVbml0LmNyZWF0ZVVuaXQob2JqLCBvcHRpb25zKTtcbiAgICB9LFxuICAgIC8vIFNhbWUgYXMgYWJvdmUgYnV0IHdpdGhvdXQgdGhlIG9wdGlvbnMuXG4gICAgT2JqZWN0OiBmdW5jdGlvbiBPYmplY3Qob2JqKSB7XG4gICAgICByZXR1cm4gVW5pdC5jcmVhdGVVbml0KG9iaiwge30pO1xuICAgIH0sXG4gICAgLy8gU2hvcnRjdXQgbWV0aG9kIGZvciBjcmVhdGluZyBvbmUgdW5pdC5cbiAgICAnc3RyaW5nLCBVbml0IHwgc3RyaW5nIHwgT2JqZWN0LCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdVbml0U3RyaW5nT2JqZWN0T2JqZWN0KG5hbWUsIGRlZiwgb3B0aW9ucykge1xuICAgICAgdmFyIG9iaiA9IHt9O1xuICAgICAgb2JqW25hbWVdID0gZGVmO1xuICAgICAgcmV0dXJuIFVuaXQuY3JlYXRlVW5pdChvYmosIG9wdGlvbnMpO1xuICAgIH0sXG4gICAgLy8gU2FtZSBhcyBhYm92ZSBidXQgd2l0aG91dCB0aGUgb3B0aW9ucy5cbiAgICAnc3RyaW5nLCBVbml0IHwgc3RyaW5nIHwgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nVW5pdFN0cmluZ09iamVjdChuYW1lLCBkZWYpIHtcbiAgICAgIHZhciBvYmogPSB7fTtcbiAgICAgIG9ialtuYW1lXSA9IGRlZjtcbiAgICAgIHJldHVybiBVbml0LmNyZWF0ZVVuaXQob2JqLCB7fSk7XG4gICAgfSxcbiAgICAvLyBXaXRob3V0IGEgZGVmaW5pdGlvbiwgY3JlYXRlcyBhIGJhc2UgdW5pdC5cbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhuYW1lKSB7XG4gICAgICB2YXIgb2JqID0ge307XG4gICAgICBvYmpbbmFtZV0gPSB7fTtcbiAgICAgIHJldHVybiBVbml0LmNyZWF0ZVVuaXQob2JqLCB7fSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDcmVhdGVVbml0ID0gY3JlYXRlQ3JlYXRlVW5pdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3BsaXRVbml0ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc3BsaXRVbml0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlU3BsaXRVbml0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogU3BsaXQgYSB1bml0IGluIGFuIGFycmF5IG9mIHVuaXRzIHdob3NlIHN1bSBpcyBlcXVhbCB0byB0aGUgb3JpZ2luYWwgdW5pdC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgc3BsaXRVbml0KHVuaXQ6IFVuaXQsIHBhcnRzOiBBcnJheS48VW5pdD4pXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqXG4gICAqICAgICBtYXRoLnNwbGl0VW5pdChuZXcgVW5pdCgxLCAnbScpLCBbJ2ZlZXQnLCAnaW5jaCddKVxuICAgKiAgICAgLy8gWyAzIGZlZXQsIDMuMzcwMDc4NzQwMTU3NSBpbmNoIF1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICB1bml0XG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IFtwYXJ0c10gQW4gYXJyYXkgb2Ygc3RyaW5ncyBvciB2YWx1ZWxlc3MgdW5pdHMuXG4gICAqIEByZXR1cm4ge0FycmF5fSBBbiBhcnJheSBvZiB1bml0cy5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ1VuaXQsIEFycmF5JzogZnVuY3Rpb24gVW5pdEFycmF5KHVuaXQsIHBhcnRzKSB7XG4gICAgICByZXR1cm4gdW5pdC5zcGxpdFVuaXQocGFydHMpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU3BsaXRVbml0ID0gY3JlYXRlU3BsaXRVbml0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbml0RnVuY3Rpb24gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAndW5pdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdVbml0J107IC8vIFRoaXMgZnVuY3Rpb24gaXMgbmFtZWQgY3JlYXRlVW5pdEZ1bmN0aW9uIHRvIHByZXZlbnQgYSBuYW1pbmcgY29uZmxpY3Qgd2l0aCBjcmVhdGVVbml0XG5cbnZhciBjcmVhdGVVbml0RnVuY3Rpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgVW5pdCA9IF9yZWYuVW5pdDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgdW5pdC4gRGVwZW5kaW5nIG9uIHRoZSBwYXNzZWQgYXJndW1lbnRzLCB0aGUgZnVuY3Rpb25cbiAgICogd2lsbCBjcmVhdGUgYW5kIHJldHVybiBhIG5ldyBtYXRoLlVuaXQgb2JqZWN0LlxuICAgKiBXaGVuIGEgbWF0cml4IGlzIHByb3ZpZGVkLCBhbGwgZWxlbWVudHMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdW5pdHMuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgudW5pdCh1bml0IDogc3RyaW5nKVxuICAgKiAgICAgbWF0aC51bml0KHZhbHVlIDogbnVtYmVyLCB1bml0IDogc3RyaW5nKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGgudW5pdCg1LCAnY20nKSAgICAvLyByZXR1cm5zIFVuaXQgNTAgbW1cbiAgICogICAgY29uc3QgYiA9IG1hdGgudW5pdCgnMjMga2cnKSAgICAvLyByZXR1cm5zIFVuaXQgMjMga2dcbiAgICogICAgYS50bygnbScpICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIFVuaXQgMC4wNSBtXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaWdudW1iZXIsIGJvb2xlYW4sIGNvbXBsZXgsIGluZGV4LCBtYXRyaXgsIG51bWJlciwgc3RyaW5nLCBjcmVhdGVVbml0XG4gICAqXG4gICAqIEBwYXJhbSB7KiB8IEFycmF5IHwgTWF0cml4fSBhcmdzICAgQSBudW1iZXIgYW5kIHVuaXQuXG4gICAqIEByZXR1cm4ge1VuaXQgfCBBcnJheSB8IE1hdHJpeH0gICAgVGhlIGNyZWF0ZWQgdW5pdFxuICAgKi9cbiAgdmFyIHVuaXQgPSB0eXBlZChuYW1lLCB7XG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgIH0sXG4gICAgc3RyaW5nOiBmdW5jdGlvbiBzdHJpbmcoeCkge1xuICAgICAgaWYgKFVuaXQuaXNWYWx1ZWxlc3NVbml0KHgpKSB7XG4gICAgICAgIHJldHVybiBuZXcgVW5pdChudWxsLCB4KTsgLy8gYSBwdXJlIHVuaXRcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFVuaXQucGFyc2UoeCwge1xuICAgICAgICBhbGxvd05vVW5pdHM6IHRydWVcbiAgICAgIH0pOyAvLyBhIHVuaXQgd2l0aCB2YWx1ZSwgbGlrZSAnNWNtJ1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCwgc3RyaW5nJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyRnJhY3Rpb25Db21wbGV4U3RyaW5nKHZhbHVlLCB1bml0KSB7XG4gICAgICByZXR1cm4gbmV3IFVuaXQodmFsdWUsIHVuaXQpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCB1bml0KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gdW5pdDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbml0RnVuY3Rpb24gPSBjcmVhdGVVbml0RnVuY3Rpb247IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVBsYW5ja1RlbXBlcmF0dXJlID0gZXhwb3J0cy5jcmVhdGVQbGFuY2tDaGFyZ2UgPSBleHBvcnRzLmNyZWF0ZVBsYW5ja1RpbWUgPSBleHBvcnRzLmNyZWF0ZVBsYW5ja01hc3MgPSBleHBvcnRzLmNyZWF0ZVBsYW5ja0xlbmd0aCA9IGV4cG9ydHMuY3JlYXRlR3Jhdml0eSA9IGV4cG9ydHMuY3JlYXRlTW9sYXJNYXNzQzEyID0gZXhwb3J0cy5jcmVhdGVNb2xhck1hc3MgPSBleHBvcnRzLmNyZWF0ZVdpZW5EaXNwbGFjZW1lbnQgPSBleHBvcnRzLmNyZWF0ZVN0ZWZhbkJvbHR6bWFubiA9IGV4cG9ydHMuY3JlYXRlU2Vjb25kUmFkaWF0aW9uID0gZXhwb3J0cy5jcmVhdGVTYWNrdXJUZXRyb2RlID0gZXhwb3J0cy5jcmVhdGVNb2xhclZvbHVtZSA9IGV4cG9ydHMuY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudCA9IGV4cG9ydHMuY3JlYXRlR2FzQ29uc3RhbnQgPSBleHBvcnRzLmNyZWF0ZUxvc2NobWlkdCA9IGV4cG9ydHMuY3JlYXRlRmlyc3RSYWRpYXRpb24gPSBleHBvcnRzLmNyZWF0ZUZhcmFkYXkgPSBleHBvcnRzLmNyZWF0ZUJvbHR6bWFubiA9IGV4cG9ydHMuY3JlYXRlQXZvZ2Fkcm8gPSBleHBvcnRzLmNyZWF0ZUF0b21pY01hc3MgPSBleHBvcnRzLmNyZWF0ZUVmaW1vdkZhY3RvciA9IGV4cG9ydHMuY3JlYXRlV2Vha01peGluZ0FuZ2xlID0gZXhwb3J0cy5jcmVhdGVUaG9tc29uQ3Jvc3NTZWN0aW9uID0gZXhwb3J0cy5jcmVhdGVSeWRiZXJnID0gZXhwb3J0cy5jcmVhdGVRdWFudHVtT2ZDaXJjdWxhdGlvbiA9IGV4cG9ydHMuY3JlYXRlTmV1dHJvbk1hc3MgPSBleHBvcnRzLmNyZWF0ZURldXRlcm9uTWFzcyA9IGV4cG9ydHMuY3JlYXRlUHJvdG9uTWFzcyA9IGV4cG9ydHMuY3JlYXRlSGFydHJlZUVuZXJneSA9IGV4cG9ydHMuY3JlYXRlRmluZVN0cnVjdHVyZSA9IGV4cG9ydHMuY3JlYXRlRmVybWlDb3VwbGluZyA9IGV4cG9ydHMuY3JlYXRlRWxlY3Ryb25NYXNzID0gZXhwb3J0cy5jcmVhdGVDbGFzc2ljYWxFbGVjdHJvblJhZGl1cyA9IGV4cG9ydHMuY3JlYXRlQm9oclJhZGl1cyA9IGV4cG9ydHMuY3JlYXRlSm9zZXBoc29uID0gZXhwb3J0cy5jcmVhdGVLbGl0emluZyA9IGV4cG9ydHMuY3JlYXRlTnVjbGVhck1hZ25ldG9uID0gZXhwb3J0cy5jcmVhdGVNYWduZXRpY0ZsdXhRdWFudHVtID0gZXhwb3J0cy5jcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtID0gZXhwb3J0cy5jcmVhdGVDb25kdWN0YW5jZVF1YW50dW0gPSBleHBvcnRzLmNyZWF0ZUJvaHJNYWduZXRvbiA9IGV4cG9ydHMuY3JlYXRlRWxlbWVudGFyeUNoYXJnZSA9IGV4cG9ydHMuY3JlYXRlQ291bG9tYiA9IGV4cG9ydHMuY3JlYXRlVmFjdXVtSW1wZWRhbmNlID0gZXhwb3J0cy5jcmVhdGVFbGVjdHJpY0NvbnN0YW50ID0gZXhwb3J0cy5jcmVhdGVNYWduZXRpY0NvbnN0YW50ID0gZXhwb3J0cy5jcmVhdGVSZWR1Y2VkUGxhbmNrQ29uc3RhbnQgPSBleHBvcnRzLmNyZWF0ZVBsYW5ja0NvbnN0YW50ID0gZXhwb3J0cy5jcmVhdGVHcmF2aXRhdGlvbkNvbnN0YW50ID0gZXhwb3J0cy5jcmVhdGVTcGVlZE9mTGlnaHQgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG4vLyBTb3VyY2U6IGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1BoeXNpY2FsX2NvbnN0YW50XG4vLyBVbml2ZXJzYWwgY29uc3RhbnRzXG52YXIgY3JlYXRlU3BlZWRPZkxpZ2h0ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3NwZWVkT2ZMaWdodCcsICcyOTk3OTI0NTgnLCAnbSBzXi0xJyk7XG5leHBvcnRzLmNyZWF0ZVNwZWVkT2ZMaWdodCA9IGNyZWF0ZVNwZWVkT2ZMaWdodDtcbnZhciBjcmVhdGVHcmF2aXRhdGlvbkNvbnN0YW50ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2dyYXZpdGF0aW9uQ29uc3RhbnQnLCAnNi42NzQzMGUtMTEnLCAnbV4zIGtnXi0xIHNeLTInKTtcbmV4cG9ydHMuY3JlYXRlR3Jhdml0YXRpb25Db25zdGFudCA9IGNyZWF0ZUdyYXZpdGF0aW9uQ29uc3RhbnQ7XG52YXIgY3JlYXRlUGxhbmNrQ29uc3RhbnQgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgncGxhbmNrQ29uc3RhbnQnLCAnNi42MjYwNzAxNWUtMzQnLCAnSiBzJyk7XG5leHBvcnRzLmNyZWF0ZVBsYW5ja0NvbnN0YW50ID0gY3JlYXRlUGxhbmNrQ29uc3RhbnQ7XG52YXIgY3JlYXRlUmVkdWNlZFBsYW5ja0NvbnN0YW50ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3JlZHVjZWRQbGFuY2tDb25zdGFudCcsICcxLjA1NDU3MTgxNzY0NjE1NjVlLTM0JywgJ0ogcycpOyAvLyBFbGVjdHJvbWFnbmV0aWMgY29uc3RhbnRzXG5cbmV4cG9ydHMuY3JlYXRlUmVkdWNlZFBsYW5ja0NvbnN0YW50ID0gY3JlYXRlUmVkdWNlZFBsYW5ja0NvbnN0YW50O1xudmFyIGNyZWF0ZU1hZ25ldGljQ29uc3RhbnQgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnbWFnbmV0aWNDb25zdGFudCcsICcxLjI1NjYzNzA2MjEyZS02JywgJ04gQV4tMicpO1xuZXhwb3J0cy5jcmVhdGVNYWduZXRpY0NvbnN0YW50ID0gY3JlYXRlTWFnbmV0aWNDb25zdGFudDtcbnZhciBjcmVhdGVFbGVjdHJpY0NvbnN0YW50ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2VsZWN0cmljQ29uc3RhbnQnLCAnOC44NTQxODc4MTI4ZS0xMicsICdGIG1eLTEnKTtcbmV4cG9ydHMuY3JlYXRlRWxlY3RyaWNDb25zdGFudCA9IGNyZWF0ZUVsZWN0cmljQ29uc3RhbnQ7XG52YXIgY3JlYXRlVmFjdXVtSW1wZWRhbmNlID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3ZhY3V1bUltcGVkYW5jZScsICczNzYuNzMwMzEzNjY3JywgJ29obScpO1xuZXhwb3J0cy5jcmVhdGVWYWN1dW1JbXBlZGFuY2UgPSBjcmVhdGVWYWN1dW1JbXBlZGFuY2U7XG52YXIgY3JlYXRlQ291bG9tYiA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdjb3Vsb21iJywgJzguOTg3NTUxNzkyMjYxMTcxZTknLCAnTiBtXjIgQ14tMicpO1xuZXhwb3J0cy5jcmVhdGVDb3Vsb21iID0gY3JlYXRlQ291bG9tYjtcbnZhciBjcmVhdGVFbGVtZW50YXJ5Q2hhcmdlID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2VsZW1lbnRhcnlDaGFyZ2UnLCAnMS42MDIxNzY2MzRlLTE5JywgJ0MnKTtcbmV4cG9ydHMuY3JlYXRlRWxlbWVudGFyeUNoYXJnZSA9IGNyZWF0ZUVsZW1lbnRhcnlDaGFyZ2U7XG52YXIgY3JlYXRlQm9ock1hZ25ldG9uID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2JvaHJNYWduZXRvbicsICc5LjI3NDAxMDA3ODNlLTI0JywgJ0ogVF4tMScpO1xuZXhwb3J0cy5jcmVhdGVCb2hyTWFnbmV0b24gPSBjcmVhdGVCb2hyTWFnbmV0b247XG52YXIgY3JlYXRlQ29uZHVjdGFuY2VRdWFudHVtID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2NvbmR1Y3RhbmNlUXVhbnR1bScsICc3Ljc0ODA5MTcyOTg2MzY0OWUtNScsICdTJyk7XG5leHBvcnRzLmNyZWF0ZUNvbmR1Y3RhbmNlUXVhbnR1bSA9IGNyZWF0ZUNvbmR1Y3RhbmNlUXVhbnR1bTtcbnZhciBjcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2ludmVyc2VDb25kdWN0YW5jZVF1YW50dW0nLCAnMTI5MDYuNDAzNzI5NjUyMjU3JywgJ29obScpO1xuZXhwb3J0cy5jcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtID0gY3JlYXRlSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bTtcbnZhciBjcmVhdGVNYWduZXRpY0ZsdXhRdWFudHVtID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ21hZ25ldGljRmx1eFF1YW50dW0nLCAnMi4wNjc4MzM4NDg0NjE5Mjk1ZS0xNScsICdXYicpO1xuZXhwb3J0cy5jcmVhdGVNYWduZXRpY0ZsdXhRdWFudHVtID0gY3JlYXRlTWFnbmV0aWNGbHV4UXVhbnR1bTtcbnZhciBjcmVhdGVOdWNsZWFyTWFnbmV0b24gPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnbnVjbGVhck1hZ25ldG9uJywgJzUuMDUwNzgzNzQ2MWUtMjcnLCAnSiBUXi0xJyk7XG5leHBvcnRzLmNyZWF0ZU51Y2xlYXJNYWduZXRvbiA9IGNyZWF0ZU51Y2xlYXJNYWduZXRvbjtcbnZhciBjcmVhdGVLbGl0emluZyA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdrbGl0emluZycsICcyNTgxMi44MDc0NTkzMDQ1MTMnLCAnb2htJyk7XG5leHBvcnRzLmNyZWF0ZUtsaXR6aW5nID0gY3JlYXRlS2xpdHppbmc7XG52YXIgY3JlYXRlSm9zZXBoc29uID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2pvc2VwaHNvbicsICc0LjgzNTk3ODQ4NDE2OTgzNmUxNCBIeiBWJywgJ0h6IFZeLTEnKTsgLy8gVE9ETzogc3VwcG9ydCBmb3IgSHogbmVlZGVkXG4vLyBBdG9taWMgYW5kIG51Y2xlYXIgY29uc3RhbnRzXG5cbmV4cG9ydHMuY3JlYXRlSm9zZXBoc29uID0gY3JlYXRlSm9zZXBoc29uO1xudmFyIGNyZWF0ZUJvaHJSYWRpdXMgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnYm9oclJhZGl1cycsICc1LjI5MTc3MjEwOTAzZS0xMScsICdtJyk7XG5leHBvcnRzLmNyZWF0ZUJvaHJSYWRpdXMgPSBjcmVhdGVCb2hyUmFkaXVzO1xudmFyIGNyZWF0ZUNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2NsYXNzaWNhbEVsZWN0cm9uUmFkaXVzJywgJzIuODE3OTQwMzI2MmUtMTUnLCAnbScpO1xuZXhwb3J0cy5jcmVhdGVDbGFzc2ljYWxFbGVjdHJvblJhZGl1cyA9IGNyZWF0ZUNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzO1xudmFyIGNyZWF0ZUVsZWN0cm9uTWFzcyA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdlbGVjdHJvbk1hc3MnLCAnOS4xMDkzODM3MDE1ZS0zMScsICdrZycpO1xuZXhwb3J0cy5jcmVhdGVFbGVjdHJvbk1hc3MgPSBjcmVhdGVFbGVjdHJvbk1hc3M7XG52YXIgY3JlYXRlRmVybWlDb3VwbGluZyA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdmZXJtaUNvdXBsaW5nJywgJzEuMTY2Mzc4N2UtNScsICdHZVZeLTInKTtcbmV4cG9ydHMuY3JlYXRlRmVybWlDb3VwbGluZyA9IGNyZWF0ZUZlcm1pQ291cGxpbmc7XG52YXIgY3JlYXRlRmluZVN0cnVjdHVyZSA9IG51bWJlckZhY3RvcnkoJ2ZpbmVTdHJ1Y3R1cmUnLCA3LjI5NzM1MjU2OTNlLTMpO1xuZXhwb3J0cy5jcmVhdGVGaW5lU3RydWN0dXJlID0gY3JlYXRlRmluZVN0cnVjdHVyZTtcbnZhciBjcmVhdGVIYXJ0cmVlRW5lcmd5ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2hhcnRyZWVFbmVyZ3knLCAnNC4zNTk3NDQ3MjIyMDcxZS0xOCcsICdKJyk7XG5leHBvcnRzLmNyZWF0ZUhhcnRyZWVFbmVyZ3kgPSBjcmVhdGVIYXJ0cmVlRW5lcmd5O1xudmFyIGNyZWF0ZVByb3Rvbk1hc3MgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgncHJvdG9uTWFzcycsICcxLjY3MjYyMTkyMzY5ZS0yNycsICdrZycpO1xuZXhwb3J0cy5jcmVhdGVQcm90b25NYXNzID0gY3JlYXRlUHJvdG9uTWFzcztcbnZhciBjcmVhdGVEZXV0ZXJvbk1hc3MgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnZGV1dGVyb25NYXNzJywgJzMuMzQzNTgzMDkyNmUtMjcnLCAna2cnKTtcbmV4cG9ydHMuY3JlYXRlRGV1dGVyb25NYXNzID0gY3JlYXRlRGV1dGVyb25NYXNzO1xudmFyIGNyZWF0ZU5ldXRyb25NYXNzID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ25ldXRyb25NYXNzJywgJzEuNjc0OTI3MTYxM2UtMjcnLCAna2cnKTtcbmV4cG9ydHMuY3JlYXRlTmV1dHJvbk1hc3MgPSBjcmVhdGVOZXV0cm9uTWFzcztcbnZhciBjcmVhdGVRdWFudHVtT2ZDaXJjdWxhdGlvbiA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdxdWFudHVtT2ZDaXJjdWxhdGlvbicsICczLjYzNjk0NzU1MTZlLTQnLCAnbV4yIHNeLTEnKTtcbmV4cG9ydHMuY3JlYXRlUXVhbnR1bU9mQ2lyY3VsYXRpb24gPSBjcmVhdGVRdWFudHVtT2ZDaXJjdWxhdGlvbjtcbnZhciBjcmVhdGVSeWRiZXJnID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3J5ZGJlcmcnLCAnMTA5NzM3MzEuNTY4MTYwJywgJ21eLTEnKTtcbmV4cG9ydHMuY3JlYXRlUnlkYmVyZyA9IGNyZWF0ZVJ5ZGJlcmc7XG52YXIgY3JlYXRlVGhvbXNvbkNyb3NzU2VjdGlvbiA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCd0aG9tc29uQ3Jvc3NTZWN0aW9uJywgJzYuNjUyNDU4NzMyMWUtMjknLCAnbV4yJyk7XG5leHBvcnRzLmNyZWF0ZVRob21zb25Dcm9zc1NlY3Rpb24gPSBjcmVhdGVUaG9tc29uQ3Jvc3NTZWN0aW9uO1xudmFyIGNyZWF0ZVdlYWtNaXhpbmdBbmdsZSA9IG51bWJlckZhY3RvcnkoJ3dlYWtNaXhpbmdBbmdsZScsIDAuMjIyOTApO1xuZXhwb3J0cy5jcmVhdGVXZWFrTWl4aW5nQW5nbGUgPSBjcmVhdGVXZWFrTWl4aW5nQW5nbGU7XG52YXIgY3JlYXRlRWZpbW92RmFjdG9yID0gbnVtYmVyRmFjdG9yeSgnZWZpbW92RmFjdG9yJywgMjIuNyk7IC8vIFBoeXNpY28tY2hlbWljYWwgY29uc3RhbnRzXG5cbmV4cG9ydHMuY3JlYXRlRWZpbW92RmFjdG9yID0gY3JlYXRlRWZpbW92RmFjdG9yO1xudmFyIGNyZWF0ZUF0b21pY01hc3MgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnYXRvbWljTWFzcycsICcxLjY2MDUzOTA2NjYwZS0yNycsICdrZycpO1xuZXhwb3J0cy5jcmVhdGVBdG9taWNNYXNzID0gY3JlYXRlQXRvbWljTWFzcztcbnZhciBjcmVhdGVBdm9nYWRybyA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdhdm9nYWRybycsICc2LjAyMjE0MDc2ZTIzJywgJ21vbF4tMScpO1xuZXhwb3J0cy5jcmVhdGVBdm9nYWRybyA9IGNyZWF0ZUF2b2dhZHJvO1xudmFyIGNyZWF0ZUJvbHR6bWFubiA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdib2x0em1hbm4nLCAnMS4zODA2NDllLTIzJywgJ0ogS14tMScpO1xuZXhwb3J0cy5jcmVhdGVCb2x0em1hbm4gPSBjcmVhdGVCb2x0em1hbm47XG52YXIgY3JlYXRlRmFyYWRheSA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdmYXJhZGF5JywgJzk2NDg1LjMzMjEyMzMxMDAxJywgJ0MgbW9sXi0xJyk7XG5leHBvcnRzLmNyZWF0ZUZhcmFkYXkgPSBjcmVhdGVGYXJhZGF5O1xudmFyIGNyZWF0ZUZpcnN0UmFkaWF0aW9uID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2ZpcnN0UmFkaWF0aW9uJywgJzMuNzQxNzcxODUyMTkyNzU3M2UtMTYnLCAnVyBtXjInKTsgLy8gZXhwb3J0IGNvbnN0IGNyZWF0ZVNwZWN0cmFsUmFkaWFuY2UgPSAvKiAjX19QVVJFX18gKi8gdW5pdEZhY3RvcnkoJ3NwZWN0cmFsUmFkaWFuY2UnLCAnMS4xOTEwNDI5NzIzOTcxODgxZS0xNicsICdXIG1eMiBzcl4tMScpIC8vIFRPRE8gc3BlY3RyYWxSYWRpYW5jZVxuXG5leHBvcnRzLmNyZWF0ZUZpcnN0UmFkaWF0aW9uID0gY3JlYXRlRmlyc3RSYWRpYXRpb247XG52YXIgY3JlYXRlTG9zY2htaWR0ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2xvc2NobWlkdCcsICcyLjY4Njc4MDExMTc5ODQ0NGUyNScsICdtXi0zJyk7XG5leHBvcnRzLmNyZWF0ZUxvc2NobWlkdCA9IGNyZWF0ZUxvc2NobWlkdDtcbnZhciBjcmVhdGVHYXNDb25zdGFudCA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdnYXNDb25zdGFudCcsICc4LjMxNDQ2MjYxODE1MzI0JywgJ0ogS14tMSBtb2xeLTEnKTtcbmV4cG9ydHMuY3JlYXRlR2FzQ29uc3RhbnQgPSBjcmVhdGVHYXNDb25zdGFudDtcbnZhciBjcmVhdGVNb2xhclBsYW5ja0NvbnN0YW50ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ21vbGFyUGxhbmNrQ29uc3RhbnQnLCAnMy45OTAzMTI3MTI4OTM0MzFlLTEwJywgJ0ogcyBtb2xeLTEnKTtcbmV4cG9ydHMuY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudCA9IGNyZWF0ZU1vbGFyUGxhbmNrQ29uc3RhbnQ7XG52YXIgY3JlYXRlTW9sYXJWb2x1bWUgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnbW9sYXJWb2x1bWUnLCAnMC4wMjI0MTM5Njk1NDUwMTQxMzcnLCAnbV4zIG1vbF4tMScpO1xuZXhwb3J0cy5jcmVhdGVNb2xhclZvbHVtZSA9IGNyZWF0ZU1vbGFyVm9sdW1lO1xudmFyIGNyZWF0ZVNhY2t1clRldHJvZGUgPSBudW1iZXJGYWN0b3J5KCdzYWNrdXJUZXRyb2RlJywgLTEuMTY0ODcwNTIzNTgpO1xuZXhwb3J0cy5jcmVhdGVTYWNrdXJUZXRyb2RlID0gY3JlYXRlU2Fja3VyVGV0cm9kZTtcbnZhciBjcmVhdGVTZWNvbmRSYWRpYXRpb24gPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnc2Vjb25kUmFkaWF0aW9uJywgJzAuMDE0Mzg3NzY4Nzc1MDM5MzM3JywgJ20gSycpO1xuZXhwb3J0cy5jcmVhdGVTZWNvbmRSYWRpYXRpb24gPSBjcmVhdGVTZWNvbmRSYWRpYXRpb247XG52YXIgY3JlYXRlU3RlZmFuQm9sdHptYW5uID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3N0ZWZhbkJvbHR6bWFubicsICc1LjY3MDM3NDQxOTE4NDQzZS04JywgJ1cgbV4tMiBLXi00Jyk7XG5leHBvcnRzLmNyZWF0ZVN0ZWZhbkJvbHR6bWFubiA9IGNyZWF0ZVN0ZWZhbkJvbHR6bWFubjtcbnZhciBjcmVhdGVXaWVuRGlzcGxhY2VtZW50ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3dpZW5EaXNwbGFjZW1lbnQnLCAnMi44OTc3NzE5NTVlLTMnLCAnbSBLJyk7IC8vIEFkb3B0ZWQgdmFsdWVzXG5cbmV4cG9ydHMuY3JlYXRlV2llbkRpc3BsYWNlbWVudCA9IGNyZWF0ZVdpZW5EaXNwbGFjZW1lbnQ7XG52YXIgY3JlYXRlTW9sYXJNYXNzID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ21vbGFyTWFzcycsICcwLjk5OTk5OTk5OTY1ZS0zJywgJ2tnIG1vbF4tMScpO1xuZXhwb3J0cy5jcmVhdGVNb2xhck1hc3MgPSBjcmVhdGVNb2xhck1hc3M7XG52YXIgY3JlYXRlTW9sYXJNYXNzQzEyID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ21vbGFyTWFzc0MxMicsICcxMS45OTk5OTk5OTU4ZS0zJywgJ2tnIG1vbF4tMScpO1xuZXhwb3J0cy5jcmVhdGVNb2xhck1hc3NDMTIgPSBjcmVhdGVNb2xhck1hc3NDMTI7XG52YXIgY3JlYXRlR3Jhdml0eSA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdncmF2aXR5JywgJzkuODA2NjUnLCAnbSBzXi0yJyk7IC8vIGF0bSBpcyBkZWZpbmVkIGluIFVuaXQuanNcbi8vIE5hdHVyYWwgdW5pdHNcblxuZXhwb3J0cy5jcmVhdGVHcmF2aXR5ID0gY3JlYXRlR3Jhdml0eTtcbnZhciBjcmVhdGVQbGFuY2tMZW5ndGggPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgncGxhbmNrTGVuZ3RoJywgJzEuNjE2MjU1ZS0zNScsICdtJyk7XG5leHBvcnRzLmNyZWF0ZVBsYW5ja0xlbmd0aCA9IGNyZWF0ZVBsYW5ja0xlbmd0aDtcbnZhciBjcmVhdGVQbGFuY2tNYXNzID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3BsYW5ja01hc3MnLCAnMi4xNzY0MzVlLTgnLCAna2cnKTtcbmV4cG9ydHMuY3JlYXRlUGxhbmNrTWFzcyA9IGNyZWF0ZVBsYW5ja01hc3M7XG52YXIgY3JlYXRlUGxhbmNrVGltZSA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdwbGFuY2tUaW1lJywgJzUuMzkxMjQ1ZS00NCcsICdzJyk7XG5leHBvcnRzLmNyZWF0ZVBsYW5ja1RpbWUgPSBjcmVhdGVQbGFuY2tUaW1lO1xudmFyIGNyZWF0ZVBsYW5ja0NoYXJnZSA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdwbGFuY2tDaGFyZ2UnLCAnMS44NzU1NDYwMzc3OGUtMTgnLCAnQycpO1xuZXhwb3J0cy5jcmVhdGVQbGFuY2tDaGFyZ2UgPSBjcmVhdGVQbGFuY2tDaGFyZ2U7XG52YXIgY3JlYXRlUGxhbmNrVGVtcGVyYXR1cmUgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgncGxhbmNrVGVtcGVyYXR1cmUnLCAnMS40MTY3ODVlKzMyJywgJ0snKTsgLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGZhY3RvcnkgZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIHBoeXNpY2FsIGNvbnN0YW50LFxuLy8gYSBVbml0IHdpdGggZWl0aGVyIGEgbnVtYmVyIHZhbHVlIG9yIGEgQmlnTnVtYmVyIHZhbHVlIGRlcGVuZGluZyBvbiB0aGUgY29uZmlndXJhdGlvblxuXG5leHBvcnRzLmNyZWF0ZVBsYW5ja1RlbXBlcmF0dXJlID0gY3JlYXRlUGxhbmNrVGVtcGVyYXR1cmU7XG5cbmZ1bmN0aW9uIHVuaXRGYWN0b3J5KG5hbWUsIHZhbHVlU3RyLCB1bml0U3RyKSB7XG4gIHZhciBkZXBlbmRlbmNpZXMgPSBbJ2NvbmZpZycsICdVbml0JywgJ0JpZ051bWJlciddO1xuICByZXR1cm4gKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgICB2YXIgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICAgIFVuaXQgPSBfcmVmLlVuaXQsXG4gICAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuICAgIC8vIE5vdGUgdGhhdCB3ZSBjYW4gcGFyc2UgaW50byBudW1iZXIgb3IgQmlnTnVtYmVyLlxuICAgIC8vIFdlIGRvIG5vdCBwYXJzZSBpbnRvIEZyYWN0aW9ucyBhcyB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZTogd2Ugd291bGQgbG9zZSBwcmVjaXNpb24gb2YgdGhlIHZhbHVlc1xuICAgIC8vIFRoZXJlZm9yZSB3ZSBkb250IHVzZSBVbml0LnBhcnNlKClcbiAgICB2YXIgdmFsdWUgPSBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIodmFsdWVTdHIpIDogcGFyc2VGbG9hdCh2YWx1ZVN0cik7XG4gICAgdmFyIHVuaXQgPSBuZXcgVW5pdCh2YWx1ZSwgdW5pdFN0cik7XG4gICAgdW5pdC5maXhQcmVmaXggPSB0cnVlO1xuICAgIHJldHVybiB1bml0O1xuICB9KTtcbn0gLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGZhY3RvcnkgZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG51bWVyaWMgY29uc3RhbnQsXG4vLyBlaXRoZXIgYSBudW1iZXIgb3IgQmlnTnVtYmVyIGRlcGVuZGluZyBvbiB0aGUgY29uZmlndXJhdGlvblxuXG5cbmZ1bmN0aW9uIG51bWJlckZhY3RvcnkobmFtZSwgdmFsdWUpIHtcbiAgdmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ0JpZ051bWJlciddO1xuICByZXR1cm4gKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgdmFyIGNvbmZpZyA9IF9yZWYyLmNvbmZpZyxcbiAgICAgICAgQmlnTnVtYmVyID0gX3JlZjIuQmlnTnVtYmVyO1xuICAgIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIodmFsdWUpIDogdmFsdWU7XG4gIH0pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hcnJheVNpemUgPSBhcnJheVNpemU7XG5leHBvcnRzLnZhbGlkYXRlID0gdmFsaWRhdGU7XG5leHBvcnRzLnZhbGlkYXRlSW5kZXggPSB2YWxpZGF0ZUluZGV4O1xuZXhwb3J0cy5yZXNpemUgPSByZXNpemU7XG5leHBvcnRzLnJlc2hhcGUgPSByZXNoYXBlO1xuZXhwb3J0cy5zcXVlZXplID0gc3F1ZWV6ZTtcbmV4cG9ydHMudW5zcXVlZXplID0gdW5zcXVlZXplO1xuZXhwb3J0cy5mbGF0dGVuID0gZmxhdHRlbjtcbmV4cG9ydHMubWFwID0gbWFwO1xuZXhwb3J0cy5mb3JFYWNoID0gZm9yRWFjaDtcbmV4cG9ydHMuZmlsdGVyID0gZmlsdGVyO1xuZXhwb3J0cy5maWx0ZXJSZWdFeHAgPSBmaWx0ZXJSZWdFeHA7XG5leHBvcnRzLmpvaW4gPSBqb2luO1xuZXhwb3J0cy5pZGVudGlmeSA9IGlkZW50aWZ5O1xuZXhwb3J0cy5nZW5lcmFsaXplID0gZ2VuZXJhbGl6ZTtcbmV4cG9ydHMuZ2V0QXJyYXlEYXRhVHlwZSA9IGdldEFycmF5RGF0YVR5cGU7XG5leHBvcnRzLmxhc3QgPSBsYXN0O1xuZXhwb3J0cy5pbml0aWFsID0gaW5pdGlhbDtcbmV4cG9ydHMuY29udGFpbnMgPSBjb250YWlucztcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi9udW1iZXJcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi9pc1wiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi9zdHJpbmdcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBfSW5kZXhFcnJvciA9IHJlcXVpcmUoXCIuLi9lcnJvci9JbmRleEVycm9yXCIpO1xuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgc2l6ZSBvZiBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5LlxuICogVGhpcyBmdW5jdGlvbiBjaGVja3MgdGhlIHNpemUgb2YgdGhlIGZpcnN0IGVudHJ5LCBpdCBkb2VzIG5vdCB2YWxpZGF0ZVxuICogd2hldGhlciBhbGwgZGltZW5zaW9ucyBtYXRjaC4gKHVzZSBmdW5jdGlvbiBgdmFsaWRhdGVgIGZvciB0aGF0KVxuICogQHBhcmFtIHtBcnJheX0geFxuICogQFJldHVybiB7TnVtYmVyW119IHNpemVcbiAqL1xuZnVuY3Rpb24gYXJyYXlTaXplKHgpIHtcbiAgdmFyIHMgPSBbXTtcblxuICB3aGlsZSAoQXJyYXkuaXNBcnJheSh4KSkge1xuICAgIHMucHVzaCh4Lmxlbmd0aCk7XG4gICAgeCA9IHhbMF07XG4gIH1cblxuICByZXR1cm4gcztcbn1cbi8qKlxuICogUmVjdXJzaXZlbHkgdmFsaWRhdGUgd2hldGhlciBlYWNoIGVsZW1lbnQgaW4gYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheVxuICogaGFzIGEgc2l6ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm92aWRlZCBzaXplIGFycmF5LlxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgICAgQXJyYXkgdG8gYmUgdmFsaWRhdGVkXG4gKiBAcGFyYW0ge251bWJlcltdfSBzaXplICBBcnJheSB3aXRoIHRoZSBzaXplIG9mIGVhY2ggZGltZW5zaW9uXG4gKiBAcGFyYW0ge251bWJlcn0gZGltICAgQ3VycmVudCBkaW1lbnNpb25cbiAqIEB0aHJvd3MgRGltZW5zaW9uRXJyb3JcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBfdmFsaWRhdGUoYXJyYXksIHNpemUsIGRpbSkge1xuICB2YXIgaTtcbiAgdmFyIGxlbiA9IGFycmF5Lmxlbmd0aDtcblxuICBpZiAobGVuICE9PSBzaXplW2RpbV0pIHtcbiAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGxlbiwgc2l6ZVtkaW1dKTtcbiAgfVxuXG4gIGlmIChkaW0gPCBzaXplLmxlbmd0aCAtIDEpIHtcbiAgICAvLyByZWN1cnNpdmVseSB2YWxpZGF0ZSBlYWNoIGNoaWxkIGFycmF5XG4gICAgdmFyIGRpbU5leHQgPSBkaW0gKyAxO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB2YXIgY2hpbGQgPSBhcnJheVtpXTtcblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuICAgICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKHNpemUubGVuZ3RoIC0gMSwgc2l6ZS5sZW5ndGgsICc8Jyk7XG4gICAgICB9XG5cbiAgICAgIF92YWxpZGF0ZShhcnJheVtpXSwgc2l6ZSwgZGltTmV4dCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGxhc3QgZGltZW5zaW9uLiBub25lIG9mIHRoZSBjaGlsZHMgbWF5IGJlIGFuIGFycmF5XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhcnJheVtpXSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihzaXplLmxlbmd0aCArIDEsIHNpemUubGVuZ3RoLCAnPicpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBWYWxpZGF0ZSB3aGV0aGVyIGVhY2ggZWxlbWVudCBpbiBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5IGhhc1xuICogYSBzaXplIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3ZpZGVkIHNpemUgYXJyYXkuXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSAgICBBcnJheSB0byBiZSB2YWxpZGF0ZWRcbiAqIEBwYXJhbSB7bnVtYmVyW119IHNpemUgIEFycmF5IHdpdGggdGhlIHNpemUgb2YgZWFjaCBkaW1lbnNpb25cbiAqIEB0aHJvd3MgRGltZW5zaW9uRXJyb3JcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlKGFycmF5LCBzaXplKSB7XG4gIHZhciBpc1NjYWxhciA9IHNpemUubGVuZ3RoID09PSAwO1xuXG4gIGlmIChpc1NjYWxhcikge1xuICAgIC8vIHNjYWxhclxuICAgIGlmIChBcnJheS5pc0FycmF5KGFycmF5KSkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihhcnJheS5sZW5ndGgsIDApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBhcnJheVxuICAgIF92YWxpZGF0ZShhcnJheSwgc2l6ZSwgMCk7XG4gIH1cbn1cbi8qKlxuICogVGVzdCB3aGV0aGVyIGluZGV4IGlzIGFuIGludGVnZXIgbnVtYmVyIHdpdGggaW5kZXggPj0gMCBhbmQgaW5kZXggPCBsZW5ndGhcbiAqIHdoZW4gbGVuZ3RoIGlzIHByb3ZpZGVkXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggICAgWmVyby1iYXNlZCBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IFtsZW5ndGhdIExlbmd0aCBvZiB0aGUgYXJyYXlcbiAqL1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlSW5kZXgoaW5kZXgsIGxlbmd0aCkge1xuICBpZiAoISgwLCBfaXMuaXNOdW1iZXIpKGluZGV4KSB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShpbmRleCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmRleCBtdXN0IGJlIGFuIGludGVnZXIgKHZhbHVlOiAnICsgaW5kZXggKyAnKScpO1xuICB9XG5cbiAgaWYgKGluZGV4IDwgMCB8fCB0eXBlb2YgbGVuZ3RoID09PSAnbnVtYmVyJyAmJiBpbmRleCA+PSBsZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgX0luZGV4RXJyb3IuSW5kZXhFcnJvcihpbmRleCwgbGVuZ3RoKTtcbiAgfVxufVxuLyoqXG4gKiBSZXNpemUgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheS4gVGhlIHJlc2l6ZWQgYXJyYXkgaXMgcmV0dXJuZWQuXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSAgICAgICAgIEFycmF5IHRvIGJlIHJlc2l6ZWRcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHNpemUgQXJyYXkgd2l0aCB0aGUgc2l6ZSBvZiBlYWNoIGRpbWVuc2lvblxuICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlPTBdICBWYWx1ZSB0byBiZSBmaWxsZWQgaW4gaW4gbmV3IGVudHJpZXMsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHplcm8gYnkgZGVmYXVsdC4gU3BlY2lmeSBmb3IgZXhhbXBsZSBgbnVsbGAsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGNsZWFybHkgc2VlIGVudHJpZXMgdGhhdCBhcmUgbm90IGV4cGxpY2l0bHlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0LlxuICogQHJldHVybiB7QXJyYXl9IGFycmF5ICAgICAgICAgVGhlIHJlc2l6ZWQgYXJyYXlcbiAqL1xuXG5cbmZ1bmN0aW9uIHJlc2l6ZShhcnJheSwgc2l6ZSwgZGVmYXVsdFZhbHVlKSB7XG4gIC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciBzY2FsYXJzLCBoYXZpbmcgc2l6ZT1bXSA/XG4gIC8vIGNoZWNrIHRoZSB0eXBlIG9mIHRoZSBhcmd1bWVudHNcbiAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5KSB8fCAhQXJyYXkuaXNBcnJheShzaXplKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gIH1cblxuICBpZiAoc2l6ZS5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jlc2l6aW5nIHRvIHNjYWxhciBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gIH0gLy8gY2hlY2sgd2hldGhlciBzaXplIGNvbnRhaW5zIHBvc2l0aXZlIGludGVnZXJzXG5cblxuICBzaXplLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKSh2YWx1ZSkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikodmFsdWUpIHx8IHZhbHVlIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBzaXplLCBtdXN0IGNvbnRhaW4gcG9zaXRpdmUgaW50ZWdlcnMgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgIH1cbiAgfSk7IC8vIHJlY3Vyc2l2ZWx5IHJlc2l6ZSB0aGUgYXJyYXlcblxuICB2YXIgX2RlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkID8gZGVmYXVsdFZhbHVlIDogMDtcblxuICBfcmVzaXplKGFycmF5LCBzaXplLCAwLCBfZGVmYXVsdFZhbHVlKTtcblxuICByZXR1cm4gYXJyYXk7XG59XG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHJlc2l6ZSBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSAgICAgICAgIEFycmF5IHRvIGJlIHJlc2l6ZWRcbiAqIEBwYXJhbSB7bnVtYmVyW119IHNpemUgICAgICAgQXJyYXkgd2l0aCB0aGUgc2l6ZSBvZiBlYWNoIGRpbWVuc2lvblxuICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgICAgICAgICBDdXJyZW50IGRpbWVuc2lvblxuICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSAgICBWYWx1ZSB0byBiZSBmaWxsZWQgaW4gaW4gbmV3IGVudHJpZXMsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCBieSBkZWZhdWx0LlxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIF9yZXNpemUoYXJyYXksIHNpemUsIGRpbSwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciBpO1xuICB2YXIgZWxlbTtcbiAgdmFyIG9sZExlbiA9IGFycmF5Lmxlbmd0aDtcbiAgdmFyIG5ld0xlbiA9IHNpemVbZGltXTtcbiAgdmFyIG1pbkxlbiA9IE1hdGgubWluKG9sZExlbiwgbmV3TGVuKTsgLy8gYXBwbHkgbmV3IGxlbmd0aFxuXG4gIGFycmF5Lmxlbmd0aCA9IG5ld0xlbjtcblxuICBpZiAoZGltIDwgc2l6ZS5sZW5ndGggLSAxKSB7XG4gICAgLy8gbm9uLWxhc3QgZGltZW5zaW9uXG4gICAgdmFyIGRpbU5leHQgPSBkaW0gKyAxOyAvLyByZXNpemUgZXhpc3RpbmcgY2hpbGQgYXJyYXlzXG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbWluTGVuOyBpKyspIHtcbiAgICAgIC8vIHJlc2l6ZSBjaGlsZCBhcnJheVxuICAgICAgZWxlbSA9IGFycmF5W2ldO1xuXG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZWxlbSkpIHtcbiAgICAgICAgZWxlbSA9IFtlbGVtXTsgLy8gYWRkIGEgZGltZW5zaW9uXG5cbiAgICAgICAgYXJyYXlbaV0gPSBlbGVtO1xuICAgICAgfVxuXG4gICAgICBfcmVzaXplKGVsZW0sIHNpemUsIGRpbU5leHQsIGRlZmF1bHRWYWx1ZSk7XG4gICAgfSAvLyBjcmVhdGUgbmV3IGNoaWxkIGFycmF5c1xuXG5cbiAgICBmb3IgKGkgPSBtaW5MZW47IGkgPCBuZXdMZW47IGkrKykge1xuICAgICAgLy8gZ2V0IGNoaWxkIGFycmF5XG4gICAgICBlbGVtID0gW107XG4gICAgICBhcnJheVtpXSA9IGVsZW07IC8vIHJlc2l6ZSBuZXcgY2hpbGQgYXJyYXlcblxuICAgICAgX3Jlc2l6ZShlbGVtLCBzaXplLCBkaW1OZXh0LCBkZWZhdWx0VmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBsYXN0IGRpbWVuc2lvblxuICAgIC8vIHJlbW92ZSBkaW1lbnNpb25zIG9mIGV4aXN0aW5nIHZhbHVlc1xuICAgIGZvciAoaSA9IDA7IGkgPCBtaW5MZW47IGkrKykge1xuICAgICAgd2hpbGUgKEFycmF5LmlzQXJyYXkoYXJyYXlbaV0pKSB7XG4gICAgICAgIGFycmF5W2ldID0gYXJyYXlbaV1bMF07XG4gICAgICB9XG4gICAgfSAvLyBmaWxsIG5ldyBlbGVtZW50cyB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlXG5cblxuICAgIGZvciAoaSA9IG1pbkxlbjsgaSA8IG5ld0xlbjsgaSsrKSB7XG4gICAgICBhcnJheVtpXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogUmUtc2hhcGUgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheSB0byBmaXQgdGhlIHNwZWNpZmllZCBkaW1lbnNpb25zXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSAgICAgICAgICAgQXJyYXkgdG8gYmUgcmVzaGFwZWRcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHNpemVzICBMaXN0IG9mIHNpemVzIGZvciBlYWNoIGRpbWVuc2lvblxuICogQHJldHVybnMge0FycmF5fSAgICAgICAgICAgICAgIEFycmF5IHdob3NlIGRhdGEgaGFzIGJlZW4gZm9ybWF0dGVkIHRvIGZpdCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgZGltZW5zaW9uc1xuICpcbiAqIEB0aHJvd3Mge0RpbWVuc2lvbkVycm9yfSAgICAgICBJZiB0aGUgcHJvZHVjdCBvZiB0aGUgbmV3IGRpbWVuc2lvbiBzaXplcyBkb2VzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90IGVxdWFsIHRoYXQgb2YgdGhlIG9sZCBvbmVzXG4gKi9cblxuXG5mdW5jdGlvbiByZXNoYXBlKGFycmF5LCBzaXplcykge1xuICB2YXIgZmxhdEFycmF5ID0gZmxhdHRlbihhcnJheSk7XG4gIHZhciBuZXdBcnJheTtcblxuICBmdW5jdGlvbiBwcm9kdWN0KGFycikge1xuICAgIHJldHVybiBhcnIucmVkdWNlKGZ1bmN0aW9uIChwcmV2LCBjdXJyKSB7XG4gICAgICByZXR1cm4gcHJldiAqIGN1cnI7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXkpIHx8ICFBcnJheS5pc0FycmF5KHNpemVzKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gIH1cblxuICBpZiAoc2l6ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcigwLCBwcm9kdWN0KGFycmF5U2l6ZShhcnJheSkpLCAnIT0nKTtcbiAgfVxuXG4gIHZhciB0b3RhbFNpemUgPSAxO1xuXG4gIGZvciAodmFyIHNpemVJbmRleCA9IDA7IHNpemVJbmRleCA8IHNpemVzLmxlbmd0aDsgc2l6ZUluZGV4KyspIHtcbiAgICB0b3RhbFNpemUgKj0gc2l6ZXNbc2l6ZUluZGV4XTtcbiAgfVxuXG4gIGlmIChmbGF0QXJyYXkubGVuZ3RoICE9PSB0b3RhbFNpemUpIHtcbiAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKHByb2R1Y3Qoc2l6ZXMpLCBwcm9kdWN0KGFycmF5U2l6ZShhcnJheSkpLCAnIT0nKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgbmV3QXJyYXkgPSBfcmVzaGFwZShmbGF0QXJyYXksIHNpemVzKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIGlmIChlIGluc3RhbmNlb2YgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKHByb2R1Y3Qoc2l6ZXMpLCBwcm9kdWN0KGFycmF5U2l6ZShhcnJheSkpLCAnIT0nKTtcbiAgICB9XG5cbiAgICB0aHJvdyBlO1xuICB9XG5cbiAgcmV0dXJuIG5ld0FycmF5O1xufVxuLyoqXG4gKiBJdGVyYXRpdmVseSByZS1zaGFwZSBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5IHRvIGZpdCB0aGUgc3BlY2lmaWVkIGRpbWVuc2lvbnNcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5ICAgICAgICAgICBBcnJheSB0byBiZSByZXNoYXBlZFxuICogQHBhcmFtIHtBcnJheS48bnVtYmVyPn0gc2l6ZXMgIExpc3Qgb2Ygc2l6ZXMgZm9yIGVhY2ggZGltZW5zaW9uXG4gKiBAcmV0dXJucyB7QXJyYXl9ICAgICAgICAgICAgICAgQXJyYXkgd2hvc2UgZGF0YSBoYXMgYmVlbiBmb3JtYXR0ZWQgdG8gZml0IHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCBkaW1lbnNpb25zXG4gKi9cblxuXG5mdW5jdGlvbiBfcmVzaGFwZShhcnJheSwgc2l6ZXMpIHtcbiAgLy8gdGVzdGluZyBpZiB0aGVyZSBhcmUgZW5vdWdoIGVsZW1lbnRzIGZvciB0aGUgcmVxdWVzdGVkIHNoYXBlXG4gIHZhciB0bXBBcnJheSA9IGFycmF5O1xuICB2YXIgdG1wQXJyYXkyOyAvLyBmb3IgZWFjaCBkaW1lbnNpb25zIHN0YXJ0aW5nIGJ5IHRoZSBsYXN0IG9uZSBhbmQgaWdub3JpbmcgdGhlIGZpcnN0IG9uZVxuXG4gIGZvciAodmFyIHNpemVJbmRleCA9IHNpemVzLmxlbmd0aCAtIDE7IHNpemVJbmRleCA+IDA7IHNpemVJbmRleC0tKSB7XG4gICAgdmFyIHNpemUgPSBzaXplc1tzaXplSW5kZXhdO1xuICAgIHRtcEFycmF5MiA9IFtdOyAvLyBhZ2dyZWdhdGUgdGhlIGVsZW1lbnRzIG9mIHRoZSBjdXJyZW50IHRtcEFycmF5IGluIGVsZW1lbnRzIG9mIHRoZSByZXF1ZXN0ZWQgc2l6ZVxuXG4gICAgdmFyIGxlbmd0aCA9IHRtcEFycmF5Lmxlbmd0aCAvIHNpemU7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICB0bXBBcnJheTIucHVzaCh0bXBBcnJheS5zbGljZShpICogc2l6ZSwgKGkgKyAxKSAqIHNpemUpKTtcbiAgICB9IC8vIHNldCBpdCBhcyB0aGUgbmV3IHRtcEFycmF5IGZvciB0aGUgbmV4dCBsb29wIHR1cm4gb3IgZm9yIHJldHVyblxuXG5cbiAgICB0bXBBcnJheSA9IHRtcEFycmF5MjtcbiAgfVxuXG4gIHJldHVybiB0bXBBcnJheTtcbn1cbi8qKlxuICogU3F1ZWV6ZSBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICogQHBhcmFtIHtBcnJheX0gW3NpemVdXG4gKiBAcmV0dXJucyB7QXJyYXl9IHJldHVybnMgdGhlIGFycmF5IGl0c2VsZlxuICovXG5cblxuZnVuY3Rpb24gc3F1ZWV6ZShhcnJheSwgc2l6ZSkge1xuICB2YXIgcyA9IHNpemUgfHwgYXJyYXlTaXplKGFycmF5KTsgLy8gc3F1ZWV6ZSBvdXRlciBkaW1lbnNpb25zXG5cbiAgd2hpbGUgKEFycmF5LmlzQXJyYXkoYXJyYXkpICYmIGFycmF5Lmxlbmd0aCA9PT0gMSkge1xuICAgIGFycmF5ID0gYXJyYXlbMF07XG4gICAgcy5zaGlmdCgpO1xuICB9IC8vIGZpbmQgdGhlIGZpcnN0IGRpbWVuc2lvbiB0byBiZSBzcXVlZXplZFxuXG5cbiAgdmFyIGRpbXMgPSBzLmxlbmd0aDtcblxuICB3aGlsZSAoc1tkaW1zIC0gMV0gPT09IDEpIHtcbiAgICBkaW1zLS07XG4gIH0gLy8gc3F1ZWV6ZSBpbm5lciBkaW1lbnNpb25zXG5cblxuICBpZiAoZGltcyA8IHMubGVuZ3RoKSB7XG4gICAgYXJyYXkgPSBfc3F1ZWV6ZShhcnJheSwgZGltcywgMCk7XG4gICAgcy5sZW5ndGggPSBkaW1zO1xuICB9XG5cbiAgcmV0dXJuIGFycmF5O1xufVxuLyoqXG4gKiBSZWN1cnNpdmVseSBzcXVlZXplIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge251bWJlcn0gZGltcyBSZXF1aXJlZCBudW1iZXIgb2YgZGltZW5zaW9uc1xuICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgQ3VycmVudCBkaW1lbnNpb25cbiAqIEByZXR1cm5zIHtBcnJheSB8ICp9IFJldHVybnMgdGhlIHNxdWVlemVkIGFycmF5XG4gKiBAcHJpdmF0ZVxuICovXG5cblxuZnVuY3Rpb24gX3NxdWVlemUoYXJyYXksIGRpbXMsIGRpbSkge1xuICB2YXIgaSwgaWk7XG5cbiAgaWYgKGRpbSA8IGRpbXMpIHtcbiAgICB2YXIgbmV4dCA9IGRpbSArIDE7XG5cbiAgICBmb3IgKGkgPSAwLCBpaSA9IGFycmF5Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGFycmF5W2ldID0gX3NxdWVlemUoYXJyYXlbaV0sIGRpbXMsIG5leHQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoQXJyYXkuaXNBcnJheShhcnJheSkpIHtcbiAgICAgIGFycmF5ID0gYXJyYXlbMF07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFycmF5O1xufVxuLyoqXG4gKiBVbnNxdWVlemUgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheTogYWRkIGRpbWVuc2lvbnMgd2hlbiBtaXNzaW5nXG4gKlxuICogUGFyYW10ZXIgYHNpemVgIHdpbGwgYmUgbXV0YXRlZCB0byBtYXRjaCB0aGUgbmV3LCB1bnF1ZWV6ZWQgbWF0cml4IHNpemUuXG4gKlxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW1zICAgICAgIERlc2lyZWQgbnVtYmVyIG9mIGRpbWVuc2lvbnMgb2YgdGhlIGFycmF5XG4gKiBAcGFyYW0ge251bWJlcn0gW291dGVyXSAgICBOdW1iZXIgb2Ygb3V0ZXIgZGltZW5zaW9ucyB0byBiZSBhZGRlZFxuICogQHBhcmFtIHtBcnJheX0gW3NpemVdIEN1cnJlbnQgc2l6ZSBvZiBhcnJheS5cbiAqIEByZXR1cm5zIHtBcnJheX0gcmV0dXJucyB0aGUgYXJyYXkgaXRzZWxmXG4gKiBAcHJpdmF0ZVxuICovXG5cblxuZnVuY3Rpb24gdW5zcXVlZXplKGFycmF5LCBkaW1zLCBvdXRlciwgc2l6ZSkge1xuICB2YXIgcyA9IHNpemUgfHwgYXJyYXlTaXplKGFycmF5KTsgLy8gdW5zcXVlZXplIG91dGVyIGRpbWVuc2lvbnNcblxuICBpZiAob3V0ZXIpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG91dGVyOyBpKyspIHtcbiAgICAgIGFycmF5ID0gW2FycmF5XTtcbiAgICAgIHMudW5zaGlmdCgxKTtcbiAgICB9XG4gIH0gLy8gdW5zcXVlZXplIGlubmVyIGRpbWVuc2lvbnNcblxuXG4gIGFycmF5ID0gX3Vuc3F1ZWV6ZShhcnJheSwgZGltcywgMCk7XG5cbiAgd2hpbGUgKHMubGVuZ3RoIDwgZGltcykge1xuICAgIHMucHVzaCgxKTtcbiAgfVxuXG4gIHJldHVybiBhcnJheTtcbn1cbi8qKlxuICogUmVjdXJzaXZlbHkgdW5zcXVlZXplIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge251bWJlcn0gZGltcyBSZXF1aXJlZCBudW1iZXIgb2YgZGltZW5zaW9uc1xuICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgQ3VycmVudCBkaW1lbnNpb25cbiAqIEByZXR1cm5zIHtBcnJheSB8ICp9IFJldHVybnMgdGhlIHNxdWVlemVkIGFycmF5XG4gKiBAcHJpdmF0ZVxuICovXG5cblxuZnVuY3Rpb24gX3Vuc3F1ZWV6ZShhcnJheSwgZGltcywgZGltKSB7XG4gIHZhciBpLCBpaTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShhcnJheSkpIHtcbiAgICB2YXIgbmV4dCA9IGRpbSArIDE7XG5cbiAgICBmb3IgKGkgPSAwLCBpaSA9IGFycmF5Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGFycmF5W2ldID0gX3Vuc3F1ZWV6ZShhcnJheVtpXSwgZGltcywgbmV4dCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGQgPSBkaW07IGQgPCBkaW1zOyBkKyspIHtcbiAgICAgIGFycmF5ID0gW2FycmF5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYXJyYXk7XG59XG4vKipcbiAqIEZsYXR0ZW4gYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheSwgcHV0IGFsbCBlbGVtZW50cyBpbiBhIG9uZSBkaW1lbnNpb25hbFxuICogYXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5ICAgQSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheVxuICogQHJldHVybiB7QXJyYXl9ICAgICAgICBUaGUgZmxhdHRlbmVkIGFycmF5ICgxIGRpbWVuc2lvbmFsKVxuICovXG5cblxuZnVuY3Rpb24gZmxhdHRlbihhcnJheSkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyYXkpKSB7XG4gICAgLy8gaWYgbm90IGFuIGFycmF5LCByZXR1cm4gYXMgaXNcbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICB2YXIgZmxhdCA9IFtdO1xuICBhcnJheS5mb3JFYWNoKGZ1bmN0aW9uIGNhbGxiYWNrKHZhbHVlKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2YWx1ZS5mb3JFYWNoKGNhbGxiYWNrKTsgLy8gdHJhdmVyc2UgdGhyb3VnaCBzdWItYXJyYXlzIHJlY3Vyc2l2ZWx5XG4gICAgfSBlbHNlIHtcbiAgICAgIGZsYXQucHVzaCh2YWx1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGZsYXQ7XG59XG4vKipcbiAqIEEgc2FmZSBtYXBcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICovXG5cblxuZnVuY3Rpb24gbWFwKGFycmF5LCBjYWxsYmFjaykge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKGFycmF5LCBjYWxsYmFjayk7XG59XG4vKipcbiAqIEEgc2FmZSBmb3JFYWNoXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqL1xuXG5cbmZ1bmN0aW9uIGZvckVhY2goYXJyYXksIGNhbGxiYWNrKSB7XG4gIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoYXJyYXksIGNhbGxiYWNrKTtcbn1cbi8qKlxuICogQSBzYWZlIGZpbHRlclxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cblxuXG5mdW5jdGlvbiBmaWx0ZXIoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGlmIChhcnJheVNpemUoYXJyYXkpLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignT25seSBvbmUgZGltZW5zaW9uYWwgbWF0cmljZXMgc3VwcG9ydGVkJyk7XG4gIH1cblxuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKGFycmF5LCBjYWxsYmFjayk7XG59XG4vKipcbiAqIEZpbHRlciB2YWx1ZXMgaW4gYSBjYWxsYmFjayBnaXZlbiBhIHJlZ3VsYXIgZXhwcmVzc2lvblxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAqIEBwYXJhbSB7UmVnRXhwfSByZWdleHBcbiAqIEByZXR1cm4ge0FycmF5fSBSZXR1cm5zIHRoZSBmaWx0ZXJlZCBhcnJheVxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIGZpbHRlclJlZ0V4cChhcnJheSwgcmVnZXhwKSB7XG4gIGlmIChhcnJheVNpemUoYXJyYXkpLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignT25seSBvbmUgZGltZW5zaW9uYWwgbWF0cmljZXMgc3VwcG9ydGVkJyk7XG4gIH1cblxuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmZpbHRlci5jYWxsKGFycmF5LCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICByZXR1cm4gcmVnZXhwLnRlc3QoZW50cnkpO1xuICB9KTtcbn1cbi8qKlxuICogQSBzYWZlIGpvaW5cbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge3N0cmluZ30gc2VwYXJhdG9yXG4gKi9cblxuXG5mdW5jdGlvbiBqb2luKGFycmF5LCBzZXBhcmF0b3IpIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5qb2luLmNhbGwoYXJyYXksIHNlcGFyYXRvcik7XG59XG4vKipcbiAqIEFzc2lnbiBhIG51bWVyaWMgaWRlbnRpZmllciB0byBldmVyeSBlbGVtZW50IG9mIGEgc29ydGVkIGFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhICBBbiBhcnJheVxuICogQHJldHVybiB7QXJyYXl9IEFuIGFycmF5IG9mIG9iamVjdHMgY29udGFpbmluZyB0aGUgb3JpZ2luYWwgdmFsdWUgYW5kIGl0cyBpZGVudGlmaWVyXG4gKi9cblxuXG5mdW5jdGlvbiBpZGVudGlmeShhKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShhKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGlucHV0IGV4cGVjdGVkJyk7XG4gIH1cblxuICBpZiAoYS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gYTtcbiAgfVxuXG4gIHZhciBiID0gW107XG4gIHZhciBjb3VudCA9IDA7XG4gIGJbMF0gPSB7XG4gICAgdmFsdWU6IGFbMF0sXG4gICAgaWRlbnRpZmllcjogMFxuICB9O1xuXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhW2ldID09PSBhW2kgLSAxXSkge1xuICAgICAgY291bnQrKztcbiAgICB9IGVsc2Uge1xuICAgICAgY291bnQgPSAwO1xuICAgIH1cblxuICAgIGIucHVzaCh7XG4gICAgICB2YWx1ZTogYVtpXSxcbiAgICAgIGlkZW50aWZpZXI6IGNvdW50XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gYjtcbn1cbi8qKlxuICogUmVtb3ZlIHRoZSBudW1lcmljIGlkZW50aWZpZXIgZnJvbSB0aGUgZWxlbWVudHNcbiAqIEBwYXJhbSB7YXJyYXl9IGEgIEFuIGFycmF5XG4gKiBAcmV0dXJuIHthcnJheX0gQW4gYXJyYXkgb2YgdmFsdWVzIHdpdGhvdXQgaWRlbnRpZmllcnNcbiAqL1xuXG5cbmZ1bmN0aW9uIGdlbmVyYWxpemUoYSkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBpbnB1dCBleHBlY3RlZCcpO1xuICB9XG5cbiAgaWYgKGEubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGE7XG4gIH1cblxuICB2YXIgYiA9IFtdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgIGIucHVzaChhW2ldLnZhbHVlKTtcbiAgfVxuXG4gIHJldHVybiBiO1xufVxuLyoqXG4gKiBDaGVjayB0aGUgZGF0YXR5cGUgb2YgYSBnaXZlbiBvYmplY3RcbiAqIFRoaXMgaXMgYSBsb3cgbGV2ZWwgaW1wbGVtZW50YXRpb24gdGhhdCBzaG91bGQgb25seSBiZSB1c2VkIGJ5XG4gKiBwYXJlbnQgTWF0cml4IGNsYXNzZXMgc3VjaCBhcyBTcGFyc2VNYXRyaXggb3IgRGVuc2VNYXRyaXhcbiAqIFRoaXMgbWV0aG9kIGRvZXMgbm90IHZhbGlkYXRlIEFycmF5IE1hdHJpeCBzaGFwZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHR5cGVPZiAgIENhbGxiYWNrIGZ1bmN0aW9uIHRvIHVzZSB0byBkZXRlcm1pbmUgdGhlIHR5cGUgb2YgYSB2YWx1ZVxuICogQHJldHVybiBzdHJpbmdcbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEFycmF5RGF0YVR5cGUoYXJyYXksIHR5cGVPZikge1xuICB2YXIgdHlwZTsgLy8gdG8gaG9sZCB0eXBlIGluZm9cblxuICB2YXIgbGVuZ3RoID0gMDsgLy8gdG8gaG9sZCBsZW5ndGggdmFsdWUgdG8gZW5zdXJlIGl0IGhhcyBjb25zaXN0ZW50IHNpemVzXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gYXJyYXlbaV07XG4gICAgdmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGl0ZW0pOyAvLyBTYXZpbmcgdGhlIHRhcmdldCBtYXRyaXggcm93IHNpemVcblxuICAgIGlmIChpID09PSAwICYmIGlzQXJyYXkpIHtcbiAgICAgIGxlbmd0aCA9IGl0ZW0ubGVuZ3RoO1xuICAgIH0gLy8gSWYgdGhlIGN1cnJlbnQgaXRlbSBpcyBhbiBhcnJheSBidXQgdGhlIGxlbmd0aCBkb2VzIG5vdCBlcXVhbCB0aGUgdGFyZ2V0VmVjdG9yU2l6ZVxuXG5cbiAgICBpZiAoaXNBcnJheSAmJiBpdGVtLmxlbmd0aCAhPT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHZhciBpdGVtVHlwZSA9IGlzQXJyYXkgPyBnZXRBcnJheURhdGFUeXBlKGl0ZW0sIHR5cGVPZikgLy8gcmVjdXJzZSBpbnRvIGEgbmVzdGVkIGFycmF5XG4gICAgOiB0eXBlT2YoaXRlbSk7XG5cbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0eXBlID0gaXRlbVR5cGU7IC8vIGZpcnN0IGl0ZW1cbiAgICB9IGVsc2UgaWYgKHR5cGUgIT09IGl0ZW1UeXBlKSB7XG4gICAgICByZXR1cm4gJ21peGVkJztcbiAgICB9IGVsc2Ugey8vIHdlJ3JlIGdvb2QsIGV2ZXJ5dGhpbmcgaGFzIHRoZSBzYW1lIHR5cGUgc28gZmFyXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHR5cGU7XG59XG4vKipcbiAqIFJldHVybiB0aGUgbGFzdCBpdGVtIGZyb20gYW4gYXJyYXlcbiAqIEBwYXJhbSBhcnJheVxuICogQHJldHVybnMgeyp9XG4gKi9cblxuXG5mdW5jdGlvbiBsYXN0KGFycmF5KSB7XG4gIHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTtcbn1cbi8qKlxuICogR2V0IGFsbCBidXQgdGhlIGxhc3QgZWxlbWVudCBvZiBhcnJheS5cbiAqL1xuXG5cbmZ1bmN0aW9uIGluaXRpYWwoYXJyYXkpIHtcbiAgcmV0dXJuIGFycmF5LnNsaWNlKDAsIGFycmF5Lmxlbmd0aCAtIDEpO1xufVxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgYW4gYXJyYXkgb3Igc3RyaW5nIGNvbnRhaW5zIGFuIGl0ZW1cbiAqIEBwYXJhbSB7QXJyYXkgfCBzdHJpbmd9IGFycmF5XG4gKiBAcGFyYW0geyp9IGl0ZW1cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cblxuXG5mdW5jdGlvbiBjb250YWlucyhhcnJheSwgaXRlbSkge1xuICByZXR1cm4gYXJyYXkuaW5kZXhPZihpdGVtKSAhPT0gLTE7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJpdEFuZEJpZ051bWJlciA9IGJpdEFuZEJpZ051bWJlcjtcbmV4cG9ydHMuYml0Tm90QmlnTnVtYmVyID0gYml0Tm90QmlnTnVtYmVyO1xuZXhwb3J0cy5iaXRPckJpZ051bWJlciA9IGJpdE9yQmlnTnVtYmVyO1xuZXhwb3J0cy5iaXR3aXNlID0gYml0d2lzZTtcbmV4cG9ydHMuYml0WG9yID0gYml0WG9yO1xuZXhwb3J0cy5sZWZ0U2hpZnRCaWdOdW1iZXIgPSBsZWZ0U2hpZnRCaWdOdW1iZXI7XG5leHBvcnRzLnJpZ2h0QXJpdGhTaGlmdEJpZ051bWJlciA9IHJpZ2h0QXJpdGhTaGlmdEJpZ051bWJlcjtcblxuLyoqXG4gKiBCaXR3aXNlIGFuZCBmb3IgQmlnbnVtYmVyc1xuICpcbiAqIFNwZWNpYWwgQ2FzZXM6XG4gKiAgIE4gJiAgbiA9ICBOXG4gKiAgIG4gJiAgMCA9ICAwXG4gKiAgIG4gJiAtMSA9ICBuXG4gKiAgIG4gJiAgbiA9ICBuXG4gKiAgIEkgJiAgSSA9ICBJXG4gKiAgLUkgJiAtSSA9IC1JXG4gKiAgIEkgJiAtSSA9ICAwXG4gKiAgIEkgJiAgbiA9ICBuXG4gKiAgIEkgJiAtbiA9ICBJXG4gKiAgLUkgJiAgbiA9ICAwXG4gKiAgLUkgJiAtbiA9IC1JXG4gKlxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHhcbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtCaWdOdW1iZXJ9IFJlc3VsdCBvZiBgeGAgJiBgeWAsIGlzIGZ1bGx5IHByZWNpc2VcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGJpdEFuZEJpZ051bWJlcih4LCB5KSB7XG4gIGlmICh4LmlzRmluaXRlKCkgJiYgIXguaXNJbnRlZ2VyKCkgfHwgeS5pc0Zpbml0ZSgpICYmICF5LmlzSW50ZWdlcigpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiBiaXRBbmQnKTtcbiAgfVxuXG4gIHZhciBCaWdOdW1iZXIgPSB4LmNvbnN0cnVjdG9yO1xuXG4gIGlmICh4LmlzTmFOKCkgfHwgeS5pc05hTigpKSB7XG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcbiAgfVxuXG4gIGlmICh4LmlzWmVybygpIHx8IHkuZXEoLTEpIHx8IHguZXEoeSkpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuXG4gIGlmICh5LmlzWmVybygpIHx8IHguZXEoLTEpKSB7XG4gICAgcmV0dXJuIHk7XG4gIH1cblxuICBpZiAoIXguaXNGaW5pdGUoKSB8fCAheS5pc0Zpbml0ZSgpKSB7XG4gICAgaWYgKCF4LmlzRmluaXRlKCkgJiYgIXkuaXNGaW5pdGUoKSkge1xuICAgICAgaWYgKHguaXNOZWdhdGl2ZSgpID09PSB5LmlzTmVnYXRpdmUoKSkge1xuICAgICAgICByZXR1cm4geDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoMCk7XG4gICAgfVxuXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHtcbiAgICAgIGlmICh5LmlzTmVnYXRpdmUoKSkge1xuICAgICAgICByZXR1cm4geDtcbiAgICAgIH1cblxuICAgICAgaWYgKHguaXNOZWdhdGl2ZSgpKSB7XG4gICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geTtcbiAgICB9XG5cbiAgICBpZiAoIXkuaXNGaW5pdGUoKSkge1xuICAgICAgaWYgKHguaXNOZWdhdGl2ZSgpKSB7XG4gICAgICAgIHJldHVybiB5O1xuICAgICAgfVxuXG4gICAgICBpZiAoeS5pc05lZ2F0aXZlKCkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoMCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB4O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBiaXR3aXNlKHgsIHksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGEgJiBiO1xuICB9KTtcbn1cbi8qKlxuICogQml0d2lzZSBub3RcbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB4XG4gKiBAcmV0dXJuIHtCaWdOdW1iZXJ9IFJlc3VsdCBvZiB+YHhgLCBmdWxseSBwcmVjaXNlXG4gKlxuICovXG5cblxuZnVuY3Rpb24gYml0Tm90QmlnTnVtYmVyKHgpIHtcbiAgaWYgKHguaXNGaW5pdGUoKSAmJiAheC5pc0ludGVnZXIoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW50ZWdlciBleHBlY3RlZCBpbiBmdW5jdGlvbiBiaXROb3QnKTtcbiAgfVxuXG4gIHZhciBCaWdOdW1iZXIgPSB4LmNvbnN0cnVjdG9yO1xuICB2YXIgcHJldlByZWMgPSBCaWdOdW1iZXIucHJlY2lzaW9uO1xuICBCaWdOdW1iZXIuY29uZmlnKHtcbiAgICBwcmVjaXNpb246IDFFOVxuICB9KTtcbiAgdmFyIHJlc3VsdCA9IHgucGx1cyhuZXcgQmlnTnVtYmVyKDEpKTtcbiAgcmVzdWx0LnMgPSAtcmVzdWx0LnMgfHwgbnVsbDtcbiAgQmlnTnVtYmVyLmNvbmZpZyh7XG4gICAgcHJlY2lzaW9uOiBwcmV2UHJlY1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogQml0d2lzZSBPUiBmb3IgQmlnTnVtYmVyc1xuICpcbiAqIFNwZWNpYWwgQ2FzZXM6XG4gKiAgIE4gfCAgbiA9ICBOXG4gKiAgIG4gfCAgMCA9ICBuXG4gKiAgIG4gfCAtMSA9IC0xXG4gKiAgIG4gfCAgbiA9ICBuXG4gKiAgIEkgfCAgSSA9ICBJXG4gKiAgLUkgfCAtSSA9IC1JXG4gKiAgIEkgfCAtbiA9IC0xXG4gKiAgIEkgfCAtSSA9IC0xXG4gKiAgIEkgfCAgbiA9ICBJXG4gKiAgLUkgfCAgbiA9IC1JXG4gKiAgLUkgfCAtbiA9IC1uXG4gKlxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHhcbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtCaWdOdW1iZXJ9IFJlc3VsdCBvZiBgeGAgfCBgeWAsIGZ1bGx5IHByZWNpc2VcbiAqL1xuXG5cbmZ1bmN0aW9uIGJpdE9yQmlnTnVtYmVyKHgsIHkpIHtcbiAgaWYgKHguaXNGaW5pdGUoKSAmJiAheC5pc0ludGVnZXIoKSB8fCB5LmlzRmluaXRlKCkgJiYgIXkuaXNJbnRlZ2VyKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVnZXJzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGJpdE9yJyk7XG4gIH1cblxuICB2YXIgQmlnTnVtYmVyID0geC5jb25zdHJ1Y3RvcjtcblxuICBpZiAoeC5pc05hTigpIHx8IHkuaXNOYU4oKSkge1xuICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XG4gIH1cblxuICB2YXIgbmVnT25lID0gbmV3IEJpZ051bWJlcigtMSk7XG5cbiAgaWYgKHguaXNaZXJvKCkgfHwgeS5lcShuZWdPbmUpIHx8IHguZXEoeSkpIHtcbiAgICByZXR1cm4geTtcbiAgfVxuXG4gIGlmICh5LmlzWmVybygpIHx8IHguZXEobmVnT25lKSkge1xuICAgIHJldHVybiB4O1xuICB9XG5cbiAgaWYgKCF4LmlzRmluaXRlKCkgfHwgIXkuaXNGaW5pdGUoKSkge1xuICAgIGlmICgheC5pc0Zpbml0ZSgpICYmICF4LmlzTmVnYXRpdmUoKSAmJiB5LmlzTmVnYXRpdmUoKSB8fCB4LmlzTmVnYXRpdmUoKSAmJiAheS5pc05lZ2F0aXZlKCkgJiYgIXkuaXNGaW5pdGUoKSkge1xuICAgICAgcmV0dXJuIG5lZ09uZTtcbiAgICB9XG5cbiAgICBpZiAoeC5pc05lZ2F0aXZlKCkgJiYgeS5pc05lZ2F0aXZlKCkpIHtcbiAgICAgIHJldHVybiB4LmlzRmluaXRlKCkgPyB4IDogeTtcbiAgICB9XG5cbiAgICByZXR1cm4geC5pc0Zpbml0ZSgpID8geSA6IHg7XG4gIH1cblxuICByZXR1cm4gYml0d2lzZSh4LCB5LCBmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBhIHwgYjtcbiAgfSk7XG59XG4vKipcbiAqIEFwcGxpZXMgYml0d2lzZSBmdW5jdGlvbiB0byBudW1iZXJzXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0geFxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHlcbiAqIEBwYXJhbSB7ZnVuY3Rpb24gKGEsIGIpfSBmdW5jXG4gKiBAcmV0dXJuIHtCaWdOdW1iZXJ9XG4gKi9cblxuXG5mdW5jdGlvbiBiaXR3aXNlKHgsIHksIGZ1bmMpIHtcbiAgdmFyIEJpZ051bWJlciA9IHguY29uc3RydWN0b3I7XG4gIHZhciB4Qml0cywgeUJpdHM7XG4gIHZhciB4U2lnbiA9ICsoeC5zIDwgMCk7XG4gIHZhciB5U2lnbiA9ICsoeS5zIDwgMCk7XG5cbiAgaWYgKHhTaWduKSB7XG4gICAgeEJpdHMgPSBkZWNDb2VmZmljaWVudFRvQmluYXJ5U3RyaW5nKGJpdE5vdEJpZ051bWJlcih4KSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHhCaXRzLmxlbmd0aDsgKytpKSB7XG4gICAgICB4Qml0c1tpXSBePSAxO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB4Qml0cyA9IGRlY0NvZWZmaWNpZW50VG9CaW5hcnlTdHJpbmcoeCk7XG4gIH1cblxuICBpZiAoeVNpZ24pIHtcbiAgICB5Qml0cyA9IGRlY0NvZWZmaWNpZW50VG9CaW5hcnlTdHJpbmcoYml0Tm90QmlnTnVtYmVyKHkpKTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCB5Qml0cy5sZW5ndGg7ICsrX2kpIHtcbiAgICAgIHlCaXRzW19pXSBePSAxO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB5Qml0cyA9IGRlY0NvZWZmaWNpZW50VG9CaW5hcnlTdHJpbmcoeSk7XG4gIH1cblxuICB2YXIgbWluQml0cywgbWF4Qml0cywgbWluU2lnbjtcblxuICBpZiAoeEJpdHMubGVuZ3RoIDw9IHlCaXRzLmxlbmd0aCkge1xuICAgIG1pbkJpdHMgPSB4Qml0cztcbiAgICBtYXhCaXRzID0geUJpdHM7XG4gICAgbWluU2lnbiA9IHhTaWduO1xuICB9IGVsc2Uge1xuICAgIG1pbkJpdHMgPSB5Qml0cztcbiAgICBtYXhCaXRzID0geEJpdHM7XG4gICAgbWluU2lnbiA9IHlTaWduO1xuICB9XG5cbiAgdmFyIHNob3J0TGVuID0gbWluQml0cy5sZW5ndGg7XG4gIHZhciBsb25nTGVuID0gbWF4Qml0cy5sZW5ndGg7XG4gIHZhciBleHBGdW5jVmFsID0gZnVuYyh4U2lnbiwgeVNpZ24pIF4gMTtcbiAgdmFyIG91dFZhbCA9IG5ldyBCaWdOdW1iZXIoZXhwRnVuY1ZhbCBeIDEpO1xuICB2YXIgdHdvUG93ZXIgPSBuZXcgQmlnTnVtYmVyKDEpO1xuICB2YXIgdHdvID0gbmV3IEJpZ051bWJlcigyKTtcbiAgdmFyIHByZXZQcmVjID0gQmlnTnVtYmVyLnByZWNpc2lvbjtcbiAgQmlnTnVtYmVyLmNvbmZpZyh7XG4gICAgcHJlY2lzaW9uOiAxRTlcbiAgfSk7XG5cbiAgd2hpbGUgKHNob3J0TGVuID4gMCkge1xuICAgIGlmIChmdW5jKG1pbkJpdHNbLS1zaG9ydExlbl0sIG1heEJpdHNbLS1sb25nTGVuXSkgPT09IGV4cEZ1bmNWYWwpIHtcbiAgICAgIG91dFZhbCA9IG91dFZhbC5wbHVzKHR3b1Bvd2VyKTtcbiAgICB9XG5cbiAgICB0d29Qb3dlciA9IHR3b1Bvd2VyLnRpbWVzKHR3byk7XG4gIH1cblxuICB3aGlsZSAobG9uZ0xlbiA+IDApIHtcbiAgICBpZiAoZnVuYyhtaW5TaWduLCBtYXhCaXRzWy0tbG9uZ0xlbl0pID09PSBleHBGdW5jVmFsKSB7XG4gICAgICBvdXRWYWwgPSBvdXRWYWwucGx1cyh0d29Qb3dlcik7XG4gICAgfVxuXG4gICAgdHdvUG93ZXIgPSB0d29Qb3dlci50aW1lcyh0d28pO1xuICB9XG5cbiAgQmlnTnVtYmVyLmNvbmZpZyh7XG4gICAgcHJlY2lzaW9uOiBwcmV2UHJlY1xuICB9KTtcblxuICBpZiAoZXhwRnVuY1ZhbCA9PT0gMCkge1xuICAgIG91dFZhbC5zID0gLW91dFZhbC5zO1xuICB9XG5cbiAgcmV0dXJuIG91dFZhbDtcbn1cbi8qIEV4dHJhY3RlZCBmcm9tIGRlY2ltYWwuanMsIGFuZCBlZGl0ZWQgdG8gc3BlY2lhbGl6ZS4gKi9cblxuXG5mdW5jdGlvbiBkZWNDb2VmZmljaWVudFRvQmluYXJ5U3RyaW5nKHgpIHtcbiAgLy8gQ29udmVydCB0byBzdHJpbmdcbiAgdmFyIGEgPSB4LmQ7IC8vIGFycmF5IHdpdGggZGlnaXRzXG5cbiAgdmFyIHIgPSBhWzBdICsgJyc7XG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhLmxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHMgPSBhW2ldICsgJyc7XG5cbiAgICBmb3IgKHZhciB6ID0gNyAtIHMubGVuZ3RoOyB6LS07KSB7XG4gICAgICBzID0gJzAnICsgcztcbiAgICB9XG5cbiAgICByICs9IHM7XG4gIH1cblxuICB2YXIgaiA9IHIubGVuZ3RoO1xuXG4gIHdoaWxlIChyLmNoYXJBdChqKSA9PT0gJzAnKSB7XG4gICAgai0tO1xuICB9XG5cbiAgdmFyIHhlID0geC5lO1xuICB2YXIgc3RyID0gci5zbGljZSgwLCBqICsgMSB8fCAxKTtcbiAgdmFyIHN0ckwgPSBzdHIubGVuZ3RoO1xuXG4gIGlmICh4ZSA+IDApIHtcbiAgICBpZiAoKyt4ZSA+IHN0ckwpIHtcbiAgICAgIC8vIEFwcGVuZCB6ZXJvcy5cbiAgICAgIHhlIC09IHN0ckw7XG5cbiAgICAgIHdoaWxlICh4ZS0tKSB7XG4gICAgICAgIHN0ciArPSAnMCc7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh4ZSA8IHN0ckwpIHtcbiAgICAgIHN0ciA9IHN0ci5zbGljZSgwLCB4ZSkgKyAnLicgKyBzdHIuc2xpY2UoeGUpO1xuICAgIH1cbiAgfSAvLyBDb252ZXJ0IGZyb20gYmFzZSAxMCAoZGVjaW1hbCkgdG8gYmFzZSAyXG5cblxuICB2YXIgYXJyID0gWzBdO1xuXG4gIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IHN0ci5sZW5ndGg7KSB7XG4gICAgdmFyIGFyckwgPSBhcnIubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGFyckwtLSkge1xuICAgICAgYXJyW2FyckxdICo9IDEwO1xuICAgIH1cblxuICAgIGFyclswXSArPSBwYXJzZUludChzdHIuY2hhckF0KF9pMisrKSk7IC8vIGNvbnZlcnQgdG8gaW50XG5cbiAgICBmb3IgKHZhciBfaiA9IDA7IF9qIDwgYXJyLmxlbmd0aDsgKytfaikge1xuICAgICAgaWYgKGFycltfal0gPiAxKSB7XG4gICAgICAgIGlmIChhcnJbX2ogKyAxXSA9PT0gbnVsbCB8fCBhcnJbX2ogKyAxXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYXJyW19qICsgMV0gPSAwO1xuICAgICAgICB9XG5cbiAgICAgICAgYXJyW19qICsgMV0gKz0gYXJyW19qXSA+PiAxO1xuICAgICAgICBhcnJbX2pdICY9IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFyci5yZXZlcnNlKCk7XG59XG4vKipcbiAqIEJpdHdpc2UgWE9SIGZvciBCaWdOdW1iZXJzXG4gKlxuICogU3BlY2lhbCBDYXNlczpcbiAqICAgTiBeICBuID0gIE5cbiAqICAgbiBeICAwID0gIG5cbiAqICAgbiBeICBuID0gIDBcbiAqICAgbiBeIC0xID0gfm5cbiAqICAgSSBeICBuID0gIElcbiAqICAgSSBeIC1uID0gLUlcbiAqICAgSSBeIC1JID0gLTFcbiAqICAtSSBeICBuID0gLUlcbiAqICAtSSBeIC1uID0gIElcbiAqXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0geFxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHlcbiAqIEByZXR1cm4ge0JpZ051bWJlcn0gUmVzdWx0IG9mIGB4YCBeIGB5YCwgZnVsbHkgcHJlY2lzZVxuICpcbiAqL1xuXG5cbmZ1bmN0aW9uIGJpdFhvcih4LCB5KSB7XG4gIGlmICh4LmlzRmluaXRlKCkgJiYgIXguaXNJbnRlZ2VyKCkgfHwgeS5pc0Zpbml0ZSgpICYmICF5LmlzSW50ZWdlcigpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiBiaXRYb3InKTtcbiAgfVxuXG4gIHZhciBCaWdOdW1iZXIgPSB4LmNvbnN0cnVjdG9yO1xuXG4gIGlmICh4LmlzTmFOKCkgfHwgeS5pc05hTigpKSB7XG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcbiAgfVxuXG4gIGlmICh4LmlzWmVybygpKSB7XG4gICAgcmV0dXJuIHk7XG4gIH1cblxuICBpZiAoeS5pc1plcm8oKSkge1xuICAgIHJldHVybiB4O1xuICB9XG5cbiAgaWYgKHguZXEoeSkpIHtcbiAgICByZXR1cm4gbmV3IEJpZ051bWJlcigwKTtcbiAgfVxuXG4gIHZhciBuZWdPbmUgPSBuZXcgQmlnTnVtYmVyKC0xKTtcblxuICBpZiAoeC5lcShuZWdPbmUpKSB7XG4gICAgcmV0dXJuIGJpdE5vdEJpZ051bWJlcih5KTtcbiAgfVxuXG4gIGlmICh5LmVxKG5lZ09uZSkpIHtcbiAgICByZXR1cm4gYml0Tm90QmlnTnVtYmVyKHgpO1xuICB9XG5cbiAgaWYgKCF4LmlzRmluaXRlKCkgfHwgIXkuaXNGaW5pdGUoKSkge1xuICAgIGlmICgheC5pc0Zpbml0ZSgpICYmICF5LmlzRmluaXRlKCkpIHtcbiAgICAgIHJldHVybiBuZWdPbmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeC5pc05lZ2F0aXZlKCkgPT09IHkuaXNOZWdhdGl2ZSgpID8gSW5maW5pdHkgOiAtSW5maW5pdHkpO1xuICB9XG5cbiAgcmV0dXJuIGJpdHdpc2UoeCwgeSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gYSBeIGI7XG4gIH0pO1xufVxuLyoqXG4gKiBCaXR3aXNlIGxlZnQgc2hpZnRcbiAqXG4gKiBTcGVjaWFsIENhc2VzOlxuICogIG4gPDwgLW4gPSBOXG4gKiAgbiA8PCAgTiA9IE5cbiAqICBOIDw8ICBuID0gTlxuICogIG4gPDwgIDAgPSBuXG4gKiAgMCA8PCAgbiA9IDBcbiAqICBJIDw8ICBJID0gTlxuICogIEkgPDwgIG4gPSBJXG4gKiAgbiA8PCAgSSA9IElcbiAqXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0geFxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHlcbiAqIEByZXR1cm4ge0JpZ051bWJlcn0gUmVzdWx0IG9mIGB4YCA8PCBgeWBcbiAqXG4gKi9cblxuXG5mdW5jdGlvbiBsZWZ0U2hpZnRCaWdOdW1iZXIoeCwgeSkge1xuICBpZiAoeC5pc0Zpbml0ZSgpICYmICF4LmlzSW50ZWdlcigpIHx8IHkuaXNGaW5pdGUoKSAmJiAheS5pc0ludGVnZXIoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW50ZWdlcnMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gbGVmdFNoaWZ0Jyk7XG4gIH1cblxuICB2YXIgQmlnTnVtYmVyID0geC5jb25zdHJ1Y3RvcjtcblxuICBpZiAoeC5pc05hTigpIHx8IHkuaXNOYU4oKSB8fCB5LmlzTmVnYXRpdmUoKSAmJiAheS5pc1plcm8oKSkge1xuICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XG4gIH1cblxuICBpZiAoeC5pc1plcm8oKSB8fCB5LmlzWmVybygpKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cblxuICBpZiAoIXguaXNGaW5pdGUoKSAmJiAheS5pc0Zpbml0ZSgpKSB7XG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcbiAgfSAvLyBNYXRoLnBvdygyLCB5KSBpcyBmdWxseSBwcmVjaXNlIGZvciB5IDwgNTUsIGFuZCBmYXN0XG5cblxuICBpZiAoeS5sdCg1NSkpIHtcbiAgICByZXR1cm4geC50aW1lcyhNYXRoLnBvdygyLCB5LnRvTnVtYmVyKCkpICsgJycpO1xuICB9XG5cbiAgcmV0dXJuIHgudGltZXMobmV3IEJpZ051bWJlcigyKS5wb3coeSkpO1xufVxuLypcbiAqIFNwZWNpYWwgQ2FzZXM6XG4gKiAgIG4gPj4gLW4gPSAgTlxuICogICBuID4+ICBOID0gIE5cbiAqICAgTiA+PiAgbiA9ICBOXG4gKiAgIEkgPj4gIEkgPSAgTlxuICogICBuID4+ICAwID0gIG5cbiAqICAgSSA+PiAgbiA9ICBJXG4gKiAgLUkgPj4gIG4gPSAtSVxuICogIC1JID4+ICBJID0gLUlcbiAqICAgbiA+PiAgSSA9ICBJXG4gKiAgLW4gPj4gIEkgPSAtMVxuICogICAwID4+ICBuID0gIDBcbiAqXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7QmlnTnVtYmVyfSBSZXN1bHQgb2YgYHhgID4+IGB5YFxuICpcbiAqL1xuXG5cbmZ1bmN0aW9uIHJpZ2h0QXJpdGhTaGlmdEJpZ051bWJlcih4LCB5KSB7XG4gIGlmICh4LmlzRmluaXRlKCkgJiYgIXguaXNJbnRlZ2VyKCkgfHwgeS5pc0Zpbml0ZSgpICYmICF5LmlzSW50ZWdlcigpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiByaWdodEFyaXRoU2hpZnQnKTtcbiAgfVxuXG4gIHZhciBCaWdOdW1iZXIgPSB4LmNvbnN0cnVjdG9yO1xuXG4gIGlmICh4LmlzTmFOKCkgfHwgeS5pc05hTigpIHx8IHkuaXNOZWdhdGl2ZSgpICYmICF5LmlzWmVybygpKSB7XG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoTmFOKTtcbiAgfVxuXG4gIGlmICh4LmlzWmVybygpIHx8IHkuaXNaZXJvKCkpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuXG4gIGlmICgheS5pc0Zpbml0ZSgpKSB7XG4gICAgaWYgKHguaXNOZWdhdGl2ZSgpKSB7XG4gICAgICByZXR1cm4gbmV3IEJpZ051bWJlcigtMSk7XG4gICAgfVxuXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHtcbiAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoMCk7XG4gIH0gLy8gTWF0aC5wb3coMiwgeSkgaXMgZnVsbHkgcHJlY2lzZSBmb3IgeSA8IDU1LCBhbmQgZmFzdFxuXG5cbiAgaWYgKHkubHQoNTUpKSB7XG4gICAgcmV0dXJuIHguZGl2KE1hdGgucG93KDIsIHkudG9OdW1iZXIoKSkgKyAnJykuZmxvb3IoKTtcbiAgfVxuXG4gIHJldHVybiB4LmRpdihuZXcgQmlnTnVtYmVyKDIpLnBvdyh5KSkuZmxvb3IoKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQmlnTnVtYmVyVGF1ID0gZXhwb3J0cy5jcmVhdGVCaWdOdW1iZXJQaSA9IGV4cG9ydHMuY3JlYXRlQmlnTnVtYmVyUGhpID0gZXhwb3J0cy5jcmVhdGVCaWdOdW1iZXJFID0gdm9pZCAwO1xuXG52YXIgX2Z1bmN0aW9uID0gcmVxdWlyZShcIi4uL2Z1bmN0aW9uXCIpO1xuXG4vKipcbiAqIENhbGN1bGF0ZSBCaWdOdW1iZXIgZVxuICogQHBhcmFtIHtmdW5jdGlvbn0gQmlnTnVtYmVyICAgQmlnTnVtYmVyIGNvbnN0cnVjdG9yXG4gKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIGVcbiAqL1xudmFyIGNyZWF0ZUJpZ051bWJlckUgPSAoMCwgX2Z1bmN0aW9uLm1lbW9pemUpKGZ1bmN0aW9uIChCaWdOdW1iZXIpIHtcbiAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoMSkuZXhwKCk7XG59LCBoYXNoZXIpO1xuLyoqXG4gKiBDYWxjdWxhdGUgQmlnTnVtYmVyIGdvbGRlbiByYXRpbywgcGhpID0gKDErc3FydCg1KSkvMlxuICogQHBhcmFtIHtmdW5jdGlvbn0gQmlnTnVtYmVyICAgQmlnTnVtYmVyIGNvbnN0cnVjdG9yXG4gKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIHBoaVxuICovXG5cbmV4cG9ydHMuY3JlYXRlQmlnTnVtYmVyRSA9IGNyZWF0ZUJpZ051bWJlckU7XG52YXIgY3JlYXRlQmlnTnVtYmVyUGhpID0gKDAsIF9mdW5jdGlvbi5tZW1vaXplKShmdW5jdGlvbiAoQmlnTnVtYmVyKSB7XG4gIHJldHVybiBuZXcgQmlnTnVtYmVyKDEpLnBsdXMobmV3IEJpZ051bWJlcig1KS5zcXJ0KCkpLmRpdigyKTtcbn0sIGhhc2hlcik7XG4vKipcbiAqIENhbGN1bGF0ZSBCaWdOdW1iZXIgcGkuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBCaWdOdW1iZXIgICBCaWdOdW1iZXIgY29uc3RydWN0b3JcbiAqIEByZXR1cm5zIHtCaWdOdW1iZXJ9IFJldHVybnMgcGlcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZUJpZ051bWJlclBoaSA9IGNyZWF0ZUJpZ051bWJlclBoaTtcbnZhciBjcmVhdGVCaWdOdW1iZXJQaSA9ICgwLCBfZnVuY3Rpb24ubWVtb2l6ZSkoZnVuY3Rpb24gKEJpZ051bWJlcikge1xuICByZXR1cm4gQmlnTnVtYmVyLmFjb3MoLTEpO1xufSwgaGFzaGVyKTtcbi8qKlxuICogQ2FsY3VsYXRlIEJpZ051bWJlciB0YXUsIHRhdSA9IDIgKiBwaVxuICogQHBhcmFtIHtmdW5jdGlvbn0gQmlnTnVtYmVyICAgQmlnTnVtYmVyIGNvbnN0cnVjdG9yXG4gKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIHRhdVxuICovXG5cbmV4cG9ydHMuY3JlYXRlQmlnTnVtYmVyUGkgPSBjcmVhdGVCaWdOdW1iZXJQaTtcbnZhciBjcmVhdGVCaWdOdW1iZXJUYXUgPSAoMCwgX2Z1bmN0aW9uLm1lbW9pemUpKGZ1bmN0aW9uIChCaWdOdW1iZXIpIHtcbiAgcmV0dXJuIGNyZWF0ZUJpZ051bWJlclBpKEJpZ051bWJlcikudGltZXMoMik7XG59LCBoYXNoZXIpO1xuLyoqXG4gKiBDcmVhdGUgYSBoYXNoIGZvciBhIEJpZ051bWJlciBjb25zdHJ1Y3RvciBmdW5jdGlvbi4gVGhlIGNyZWF0ZWQgaGFzIGlzXG4gKiB0aGUgY29uZmlndXJlZCBwcmVjaXNpb25cbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgICAgICAgICBTdXBwb3NlZCB0byBjb250YWluIGEgc2luZ2xlIGVudHJ5IHdpdGhcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIEJpZ051bWJlciBjb25zdHJ1Y3RvclxuICogQHJldHVybiB7bnVtYmVyfSBwcmVjaXNpb25cbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVCaWdOdW1iZXJUYXUgPSBjcmVhdGVCaWdOdW1iZXJUYXU7XG5cbmZ1bmN0aW9uIGhhc2hlcihhcmdzKSB7XG4gIHJldHVybiBhcmdzWzBdLnByZWNpc2lvbjtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZm9ybWF0ID0gZm9ybWF0O1xuZXhwb3J0cy50b0VuZ2luZWVyaW5nID0gdG9FbmdpbmVlcmluZztcbmV4cG9ydHMudG9FeHBvbmVudGlhbCA9IHRvRXhwb25lbnRpYWw7XG5leHBvcnRzLnRvRml4ZWQgPSB0b0ZpeGVkO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi9vYmplY3RcIik7XG5cbi8qKlxuICogQ29udmVydCBhIEJpZ051bWJlciB0byBhIGZvcm1hdHRlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gKlxuICogU3ludGF4OlxuICpcbiAqICAgIGZvcm1hdCh2YWx1ZSlcbiAqICAgIGZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAqICAgIGZvcm1hdCh2YWx1ZSwgcHJlY2lzaW9uKVxuICogICAgZm9ybWF0KHZhbHVlLCBmbilcbiAqXG4gKiBXaGVyZTpcbiAqXG4gKiAgICB7bnVtYmVyfSB2YWx1ZSAgIFRoZSB2YWx1ZSB0byBiZSBmb3JtYXR0ZWRcbiAqICAgIHtPYmplY3R9IG9wdGlvbnMgQW4gb2JqZWN0IHdpdGggZm9ybWF0dGluZyBvcHRpb25zLiBBdmFpbGFibGUgb3B0aW9uczpcbiAqICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gbm90YXRpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBub3RhdGlvbi4gQ2hvb3NlIGZyb206XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQnICAgICAgICAgIEFsd2F5cyB1c2UgcmVndWxhciBudW1iZXIgbm90YXRpb24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlICcxMjMuNDAnIGFuZCAnMTQwMDAwMDAnXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAnZXhwb25lbnRpYWwnICAgIEFsd2F5cyB1c2UgZXhwb25lbnRpYWwgbm90YXRpb24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlICcxLjIzNGUrMicgYW5kICcxLjRlKzcnXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAnYXV0bycgKGRlZmF1bHQpIFJlZ3VsYXIgbnVtYmVyIG5vdGF0aW9uIGZvciBudW1iZXJzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmluZyBhbiBhYnNvbHV0ZSB2YWx1ZSBiZXR3ZWVuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBsb3dlcmAgYW5kIGB1cHBlcmAgYm91bmRzLCBhbmQgdXNlc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBvbmVudGlhbCBub3RhdGlvbiBlbHNld2hlcmUuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvd2VyIGJvdW5kIGlzIGluY2x1ZGVkLCB1cHBlciBib3VuZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBleGNsdWRlZC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgJzEyMy40JyBhbmQgJzEuNGU3Jy5cbiAqICAgICAgICAgICAgICAgICAgICAge251bWJlcn0gcHJlY2lzaW9uICAgQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxNiB0byByb3VuZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGlnaXRzIG9mIHRoZSBudW1iZXIuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIGNhc2Ugb2Ygbm90YXRpb25zICdleHBvbmVudGlhbCcsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbmdpbmVlcmluZycsIGFuZCAnYXV0bycsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBwcmVjaXNpb25gIGRlZmluZXMgdGhlIHRvdGFsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgcmV0dXJuZWQuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIGNhc2Ugb2Ygbm90YXRpb24gJ2ZpeGVkJyxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHByZWNpc2lvbmAgZGVmaW5lcyB0aGUgbnVtYmVyIG9mXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW50IGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHByZWNpc2lvbmAgaXMgdW5kZWZpbmVkIGJ5IGRlZmF1bHQuXG4gKiAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IGxvd2VyRXhwICAgIEV4cG9uZW50IGRldGVybWluaW5nIHRoZSBsb3dlciBib3VuZGFyeVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZm9ybWF0dGluZyBhIHZhbHVlIHdpdGggYW4gZXhwb25lbnRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBgbm90YXRpb249J2F1dG9gLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0IHZhbHVlIGlzIGAtM2AuXG4gKiAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IHVwcGVyRXhwICAgIEV4cG9uZW50IGRldGVybWluaW5nIHRoZSB1cHBlciBib3VuZGFyeVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgZm9ybWF0dGluZyBhIHZhbHVlIHdpdGggYW4gZXhwb25lbnRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiBgbm90YXRpb249J2F1dG9gLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0IHZhbHVlIGlzIGA1YC5cbiAqICAgIHtGdW5jdGlvbn0gZm4gICAgQSBjdXN0b20gZm9ybWF0dGluZyBmdW5jdGlvbi4gQ2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgIGJ1aWx0LWluIG5vdGF0aW9ucy4gRnVuY3Rpb24gYGZuYCBpcyBjYWxsZWQgd2l0aCBgdmFsdWVgIGFzXG4gKiAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciBhbmQgbXVzdCByZXR1cm4gYSBzdHJpbmcuIElzIHVzZWZ1bCBmb3IgZXhhbXBsZSB0b1xuICogICAgICAgICAgICAgICAgICAgICBmb3JtYXQgYWxsIHZhbHVlcyBpbnNpZGUgYSBtYXRyaXggaW4gYSBwYXJ0aWN1bGFyIHdheS5cbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICBmb3JtYXQoNi40KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnNi40J1xuICogICAgZm9ybWF0KDEyNDAwMDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzEuMjRlNidcbiAqICAgIGZvcm1hdCgxLzMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICcwLjMzMzMzMzMzMzMzMzMzMzMnXG4gKiAgICBmb3JtYXQoMS8zLCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnMC4zMzMnXG4gKiAgICBmb3JtYXQoMjEzODUsIDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnMjEwMDAnXG4gKiAgICBmb3JtYXQoMTJlOCwge25vdGF0aW9uOiAnZml4ZWQnfSkgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zICcxMjAwMDAwMDAwJ1xuICogICAgZm9ybWF0KDIuMywgICAge25vdGF0aW9uOiAnZml4ZWQnLCBwcmVjaXNpb246IDR9KSAgLy8gcmV0dXJucyAnMi4zMDAwJ1xuICogICAgZm9ybWF0KDUyLjgsICAge25vdGF0aW9uOiAnZXhwb25lbnRpYWwnfSkgICAgICAgICAgLy8gcmV0dXJucyAnNS4yOGUrMSdcbiAqICAgIGZvcm1hdCgxMjQwMCwgIHtub3RhdGlvbjogJ2VuZ2luZWVyaW5nJ30pICAgICAgICAgIC8vIHJldHVybnMgJzEyLjQwMGUrMydcbiAqXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7T2JqZWN0IHwgRnVuY3Rpb24gfCBudW1iZXJ9IFtvcHRpb25zXVxuICogQHJldHVybiB7c3RyaW5nfSBzdHIgVGhlIGZvcm1hdHRlZCB2YWx1ZVxuICovXG5mdW5jdGlvbiBmb3JtYXQodmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gaGFuZGxlIGZvcm1hdCh2YWx1ZSwgZm4pXG4gICAgcmV0dXJuIG9wdGlvbnModmFsdWUpO1xuICB9IC8vIGhhbmRsZSBzcGVjaWFsIGNhc2VzXG5cblxuICBpZiAoIXZhbHVlLmlzRmluaXRlKCkpIHtcbiAgICByZXR1cm4gdmFsdWUuaXNOYU4oKSA/ICdOYU4nIDogdmFsdWUuZ3QoMCkgPyAnSW5maW5pdHknIDogJy1JbmZpbml0eSc7XG4gIH0gLy8gZGVmYXVsdCB2YWx1ZXMgZm9yIG9wdGlvbnNcblxuXG4gIHZhciBub3RhdGlvbiA9ICdhdXRvJztcbiAgdmFyIHByZWNpc2lvbjtcblxuICBpZiAob3B0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gZGV0ZXJtaW5lIG5vdGF0aW9uIGZyb20gb3B0aW9uc1xuICAgIGlmIChvcHRpb25zLm5vdGF0aW9uKSB7XG4gICAgICBub3RhdGlvbiA9IG9wdGlvbnMubm90YXRpb247XG4gICAgfSAvLyBkZXRlcm1pbmUgcHJlY2lzaW9uIGZyb20gb3B0aW9uc1xuXG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdudW1iZXInKSB7XG4gICAgICBwcmVjaXNpb24gPSBvcHRpb25zO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5wcmVjaXNpb24pIHtcbiAgICAgIHByZWNpc2lvbiA9IG9wdGlvbnMucHJlY2lzaW9uO1xuICAgIH1cbiAgfSAvLyBoYW5kbGUgdGhlIHZhcmlvdXMgbm90YXRpb25zXG5cblxuICBzd2l0Y2ggKG5vdGF0aW9uKSB7XG4gICAgY2FzZSAnZml4ZWQnOlxuICAgICAgcmV0dXJuIHRvRml4ZWQodmFsdWUsIHByZWNpc2lvbik7XG5cbiAgICBjYXNlICdleHBvbmVudGlhbCc6XG4gICAgICByZXR1cm4gdG9FeHBvbmVudGlhbCh2YWx1ZSwgcHJlY2lzaW9uKTtcblxuICAgIGNhc2UgJ2VuZ2luZWVyaW5nJzpcbiAgICAgIHJldHVybiB0b0VuZ2luZWVyaW5nKHZhbHVlLCBwcmVjaXNpb24pO1xuXG4gICAgY2FzZSAnYXV0byc6XG4gICAgICB7XG4gICAgICAgIC8vIFRPRE86IGNsZWFuIHVwIHNvbWUgZGF5LiBEZXByZWNhdGVkIHNpbmNlOiAyMDE4LTAxLTI0XG4gICAgICAgIC8vIEBkZXByZWNhdGVkIHVwcGVyIGFuZCBsb3dlciBhcmUgcmVwbGFjZWQgd2l0aCB1cHBlckV4cCBhbmQgbG93ZXJFeHAgc2luY2UgdjQuMC4wXG4gICAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZXhwb25lbnRpYWwgJiYgKG9wdGlvbnMuZXhwb25lbnRpYWwubG93ZXIgIT09IHVuZGVmaW5lZCB8fCBvcHRpb25zLmV4cG9uZW50aWFsLnVwcGVyICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgdmFyIGZpeGVkT3B0aW9ucyA9ICgwLCBfb2JqZWN0Lm1hcE9iamVjdCkob3B0aW9ucywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgIHJldHVybiB4O1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGZpeGVkT3B0aW9ucy5leHBvbmVudGlhbCA9IHVuZGVmaW5lZDtcblxuICAgICAgICAgIGlmIChvcHRpb25zLmV4cG9uZW50aWFsLmxvd2VyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZpeGVkT3B0aW9ucy5sb3dlckV4cCA9IE1hdGgucm91bmQoTWF0aC5sb2cob3B0aW9ucy5leHBvbmVudGlhbC5sb3dlcikgLyBNYXRoLkxOMTApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChvcHRpb25zLmV4cG9uZW50aWFsLnVwcGVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGZpeGVkT3B0aW9ucy51cHBlckV4cCA9IE1hdGgucm91bmQoTWF0aC5sb2cob3B0aW9ucy5leHBvbmVudGlhbC51cHBlcikgLyBNYXRoLkxOMTApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnNvbGUud2FybignRGVwcmVjYXRpb24gd2FybmluZzogRm9ybWF0dGluZyBvcHRpb25zIGV4cG9uZW50aWFsLmxvd2VyIGFuZCBleHBvbmVudGlhbC51cHBlciAnICsgJyhtaW5pbXVtIGFuZCBtYXhpbXVtIHZhbHVlKSAnICsgJ2FyZSByZXBsYWNlZCB3aXRoIGV4cG9uZW50aWFsLmxvd2VyRXhwIGFuZCBleHBvbmVudGlhbC51cHBlckV4cCAnICsgJyhtaW5pbXVtIGFuZCBtYXhpbXVtIGV4cG9uZW50KSBzaW5jZSB2ZXJzaW9uIDQuMC4wLiAnICsgJ1JlcGxhY2UgJyArIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpICsgJyB3aXRoICcgKyBKU09OLnN0cmluZ2lmeShmaXhlZE9wdGlvbnMpKTtcbiAgICAgICAgICByZXR1cm4gZm9ybWF0KHZhbHVlLCBmaXhlZE9wdGlvbnMpO1xuICAgICAgICB9IC8vIGRldGVybWluZSBsb3dlciBhbmQgdXBwZXIgYm91bmQgZm9yIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxuICAgICAgICAvLyBUT0RPOiBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgdXBwZXIgYW5kIGxvd2VyIHRvIGJlIEJpZ051bWJlcnMgdGhlbXNlbHZlc1xuXG5cbiAgICAgICAgdmFyIGxvd2VyRXhwID0gb3B0aW9ucyAmJiBvcHRpb25zLmxvd2VyRXhwICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmxvd2VyRXhwIDogLTM7XG4gICAgICAgIHZhciB1cHBlckV4cCA9IG9wdGlvbnMgJiYgb3B0aW9ucy51cHBlckV4cCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy51cHBlckV4cCA6IDU7IC8vIGhhbmRsZSBzcGVjaWFsIGNhc2UgemVyb1xuXG4gICAgICAgIGlmICh2YWx1ZS5pc1plcm8oKSkgcmV0dXJuICcwJzsgLy8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRvIG91dHB1dCBleHBvbmVudGlhbCBub3RhdGlvblxuXG4gICAgICAgIHZhciBzdHI7XG4gICAgICAgIHZhciByb3VuZGVkID0gdmFsdWUudG9TaWduaWZpY2FudERpZ2l0cyhwcmVjaXNpb24pO1xuICAgICAgICB2YXIgZXhwID0gcm91bmRlZC5lO1xuXG4gICAgICAgIGlmIChleHAgPj0gbG93ZXJFeHAgJiYgZXhwIDwgdXBwZXJFeHApIHtcbiAgICAgICAgICAvLyBub3JtYWwgbnVtYmVyIG5vdGF0aW9uXG4gICAgICAgICAgc3RyID0gcm91bmRlZC50b0ZpeGVkKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZXhwb25lbnRpYWwgbm90YXRpb25cbiAgICAgICAgICBzdHIgPSB0b0V4cG9uZW50aWFsKHZhbHVlLCBwcmVjaXNpb24pO1xuICAgICAgICB9IC8vIHJlbW92ZSB0cmFpbGluZyB6ZXJvcyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludFxuXG5cbiAgICAgICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oKFxcLlxcZCo/KSgwKykpKCR8ZSkvLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIGRpZ2l0cyA9IGFyZ3VtZW50c1syXTtcbiAgICAgICAgICB2YXIgZSA9IGFyZ3VtZW50c1s0XTtcbiAgICAgICAgICByZXR1cm4gZGlnaXRzICE9PSAnLicgPyBkaWdpdHMgKyBlIDogZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIG5vdGF0aW9uIFwiJyArIG5vdGF0aW9uICsgJ1wiLiAnICsgJ0Nob29zZSBcImF1dG9cIiwgXCJleHBvbmVudGlhbFwiLCBvciBcImZpeGVkXCIuJyk7XG4gIH1cbn1cbi8qKlxuICogRm9ybWF0IGEgQmlnTnVtYmVyIGluIGVuZ2luZWVyaW5nIG5vdGF0aW9uLiBMaWtlICcxLjIzZSs2JywgJzIuM2UrMCcsICczLjUwMGUtMydcbiAqIEBwYXJhbSB7QmlnTnVtYmVyIHwgc3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IFtwcmVjaXNpb25dICAgICAgICBPcHRpb25hbCBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZmlndXJlcyB0byByZXR1cm4uXG4gKi9cblxuXG5mdW5jdGlvbiB0b0VuZ2luZWVyaW5nKHZhbHVlLCBwcmVjaXNpb24pIHtcbiAgLy8gZmluZCBuZWFyZXN0IGxvd2VyIG11bHRpcGxlIG9mIDMgZm9yIGV4cG9uZW50XG4gIHZhciBlID0gdmFsdWUuZTtcbiAgdmFyIG5ld0V4cCA9IGUgJSAzID09PSAwID8gZSA6IGUgPCAwID8gZSAtIDMgLSBlICUgMyA6IGUgLSBlICUgMzsgLy8gZmluZCBkaWZmZXJlbmNlIGluIGV4cG9uZW50cywgYW5kIGNhbGN1bGF0ZSB0aGUgdmFsdWUgd2l0aG91dCBleHBvbmVudFxuXG4gIHZhciB2YWx1ZVdpdGhvdXRFeHAgPSB2YWx1ZS5tdWwoTWF0aC5wb3coMTAsIC1uZXdFeHApKTtcbiAgdmFyIHZhbHVlU3RyID0gdmFsdWVXaXRob3V0RXhwLnRvUHJlY2lzaW9uKHByZWNpc2lvbik7XG5cbiAgaWYgKHZhbHVlU3RyLmluZGV4T2YoJ2UnKSAhPT0gLTEpIHtcbiAgICB2YWx1ZVN0ciA9IHZhbHVlV2l0aG91dEV4cC50b1N0cmluZygpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlU3RyICsgJ2UnICsgKGUgPj0gMCA/ICcrJyA6ICcnKSArIG5ld0V4cC50b1N0cmluZygpO1xufVxuLyoqXG4gKiBGb3JtYXQgYSBudW1iZXIgaW4gZXhwb25lbnRpYWwgbm90YXRpb24uIExpa2UgJzEuMjNlKzUnLCAnMi4zZSswJywgJzMuNTAwZS0zJ1xuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbl0gIE51bWJlciBvZiBkaWdpdHMgaW4gZm9ybWF0dGVkIG91dHB1dC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm90IHByb3ZpZGVkLCB0aGUgbWF4aW11bSBhdmFpbGFibGUgZGlnaXRzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHVzZWQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJcbiAqL1xuXG5cbmZ1bmN0aW9uIHRvRXhwb25lbnRpYWwodmFsdWUsIHByZWNpc2lvbikge1xuICBpZiAocHJlY2lzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdmFsdWUudG9FeHBvbmVudGlhbChwcmVjaXNpb24gLSAxKTsgLy8gTm90ZSB0aGUgb2Zmc2V0IG9mIG9uZVxuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWx1ZS50b0V4cG9uZW50aWFsKCk7XG4gIH1cbn1cbi8qKlxuICogRm9ybWF0IGEgbnVtYmVyIHdpdGggZml4ZWQgbm90YXRpb24uXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uPXVuZGVmaW5lZF0gT3B0aW9uYWwgbnVtYmVyIG9mIGRlY2ltYWxzIGFmdGVyIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNpbWFsIHBvaW50LiBVbmRlZmluZWQgYnkgZGVmYXVsdC5cbiAqL1xuXG5cbmZ1bmN0aW9uIHRvRml4ZWQodmFsdWUsIHByZWNpc2lvbikge1xuICByZXR1cm4gdmFsdWUudG9GaXhlZChwcmVjaXNpb24pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5uZWFybHlFcXVhbCA9IG5lYXJseUVxdWFsO1xuXG4vKipcbiAqIENvbXBhcmVzIHR3byBCaWdOdW1iZXJzLlxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHggICAgICAgRmlyc3QgdmFsdWUgdG8gY29tcGFyZVxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHkgICAgICAgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZXBzaWxvbl0gIFRoZSBtYXhpbXVtIHJlbGF0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbiB4IGFuZCB5XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBlcHNpbG9uIGlzIHVuZGVmaW5lZCBvciBudWxsLCB0aGUgZnVuY3Rpb24gd2lsbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCB3aGV0aGVyIHggYW5kIHkgYXJlIGV4YWN0bHkgZXF1YWwuXG4gKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZSB0d28gbnVtYmVycyBhcmUgbmVhcmx5IGVxdWFsXG4gKi9cbmZ1bmN0aW9uIG5lYXJseUVxdWFsKHgsIHksIGVwc2lsb24pIHtcbiAgLy8gaWYgZXBzaWxvbiBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGVzdCB3aGV0aGVyIHggYW5kIHkgYXJlIGV4YWN0bHkgZXF1YWxcbiAgaWYgKGVwc2lsb24gPT09IG51bGwgfHwgZXBzaWxvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHguZXEoeSk7XG4gIH0gLy8gdXNlIFwiPT1cIiBvcGVyYXRvciwgaGFuZGxlcyBpbmZpbml0aWVzXG5cblxuICBpZiAoeC5lcSh5KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIE5hTlxuXG5cbiAgaWYgKHguaXNOYU4oKSB8fCB5LmlzTmFOKCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gYXQgdGhpcyBwb2ludCB4IGFuZCB5IHNob3VsZCBiZSBmaW5pdGVcblxuXG4gIGlmICh4LmlzRmluaXRlKCkgJiYgeS5pc0Zpbml0ZSgpKSB7XG4gICAgLy8gY2hlY2sgbnVtYmVycyBhcmUgdmVyeSBjbG9zZSwgbmVlZGVkIHdoZW4gY29tcGFyaW5nIG51bWJlcnMgbmVhciB6ZXJvXG4gICAgdmFyIGRpZmYgPSB4Lm1pbnVzKHkpLmFicygpO1xuXG4gICAgaWYgKGRpZmYuaXNaZXJvKCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1c2UgcmVsYXRpdmUgZXJyb3JcbiAgICAgIHZhciBtYXggPSB4LmNvbnN0cnVjdG9yLm1heCh4LmFicygpLCB5LmFicygpKTtcbiAgICAgIHJldHVybiBkaWZmLmx0ZShtYXgudGltZXMoZXBzaWxvbikpO1xuICAgIH1cbiAgfSAvLyBJbmZpbml0ZSBhbmQgTnVtYmVyIG9yIG5lZ2F0aXZlIEluZmluaXRlIGFuZCBwb3NpdGl2ZSBJbmZpbml0ZSBjYXNlc1xuXG5cbiAgcmV0dXJuIGZhbHNlO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb250YWluc0NvbGxlY3Rpb25zID0gY29udGFpbnNDb2xsZWN0aW9ucztcbmV4cG9ydHMuZGVlcEZvckVhY2ggPSBkZWVwRm9yRWFjaDtcbmV4cG9ydHMuZGVlcE1hcCA9IGRlZXBNYXA7XG5leHBvcnRzLnJlZHVjZSA9IHJlZHVjZTtcbmV4cG9ydHMuc2NhdHRlciA9IHNjYXR0ZXI7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi9pc1wiKTtcblxudmFyIF9JbmRleEVycm9yID0gcmVxdWlyZShcIi4uL2Vycm9yL0luZGV4RXJyb3JcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheVwiKTtcblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgYW4gYXJyYXkgY29udGFpbnMgY29sbGVjdGlvbnNcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIGFycmF5IGNvbnRhaW5zIG9uZSBvciBtdWx0aXBsZVxuICogICAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb25zIChBcnJheXMgb3IgTWF0cmljZXMpLiBSZXR1cm5zIGZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gY29udGFpbnNDb2xsZWN0aW9ucyhhcnJheSkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCgwLCBfaXMuaXNDb2xsZWN0aW9uKShhcnJheVtpXSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICogUmVjdXJzaXZlbHkgbG9vcCBvdmVyIGFsbCBlbGVtZW50cyBpbiBhIGdpdmVuIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5XG4gKiBhbmQgaW52b2tlIHRoZSBjYWxsYmFjayBvbiBlYWNoIG9mIHRoZSBlbGVtZW50cy5cbiAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IGFycmF5XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgVGhlIGNhbGxiYWNrIG1ldGhvZCBpcyBpbnZva2VkIHdpdGggb25lXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyOiB0aGUgY3VycmVudCBlbGVtZW50IGluIHRoZSBhcnJheVxuICovXG5cblxuZnVuY3Rpb24gZGVlcEZvckVhY2goYXJyYXksIGNhbGxiYWNrKSB7XG4gIGlmICgoMCwgX2lzLmlzTWF0cml4KShhcnJheSkpIHtcbiAgICBhcnJheSA9IGFycmF5LnZhbHVlT2YoKTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwLCBpaSA9IGFycmF5Lmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICB2YXIgdmFsdWUgPSBhcnJheVtpXTtcblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgZGVlcEZvckVhY2godmFsdWUsIGNhbGxiYWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2sodmFsdWUpO1xuICAgIH1cbiAgfVxufVxuLyoqXG4gKiBFeGVjdXRlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBlbGVtZW50IHdpc2UgZm9yIGVhY2ggZWxlbWVudCBpbiBhcnJheSBhbmQgYW55XG4gKiBuZXN0ZWQgYXJyYXlcbiAqIFJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgcmVzdWx0c1xuICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gYXJyYXlcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIGlzIGNhbGxlZCB3aXRoIHR3byBwYXJhbWV0ZXJzOlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTEgYW5kIHZhbHVlMiwgd2hpY2ggY29udGFpbiB0aGUgY3VycmVudFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50IG9mIGJvdGggYXJyYXlzLlxuICogQHBhcmFtIHtib29sZWFufSBbc2tpcFplcm9zXSBJbnZva2UgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIG5vbi16ZXJvIHZhbHVlcyBvbmx5LlxuICpcbiAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSByZXNcbiAqL1xuXG5cbmZ1bmN0aW9uIGRlZXBNYXAoYXJyYXksIGNhbGxiYWNrLCBza2lwWmVyb3MpIHtcbiAgaWYgKGFycmF5ICYmIHR5cGVvZiBhcnJheS5tYXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUT0RPOiByZXBsYWNlIGFycmF5Lm1hcCB3aXRoIGEgZm9yIGxvb3AgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZVxuICAgIHJldHVybiBhcnJheS5tYXAoZnVuY3Rpb24gKHgpIHtcbiAgICAgIHJldHVybiBkZWVwTWFwKHgsIGNhbGxiYWNrLCBza2lwWmVyb3MpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBjYWxsYmFjayhhcnJheSk7XG4gIH1cbn1cbi8qKlxuICogUmVkdWNlIGEgZ2l2ZW4gbWF0cml4IG9yIGFycmF5IHRvIGEgbmV3IG1hdHJpeCBvclxuICogYXJyYXkgd2l0aCBvbmUgbGVzcyBkaW1lbnNpb24sIGFwcGx5aW5nIHRoZSBnaXZlblxuICogY2FsbGJhY2sgaW4gdGhlIHNlbGVjdGVkIGRpbWVuc2lvbi5cbiAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IG1hdFxuICogQHBhcmFtIHtudW1iZXJ9IGRpbVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSByZXNcbiAqL1xuXG5cbmZ1bmN0aW9uIHJlZHVjZShtYXQsIGRpbSwgY2FsbGJhY2spIHtcbiAgdmFyIHNpemUgPSBBcnJheS5pc0FycmF5KG1hdCkgPyAoMCwgX2FycmF5LmFycmF5U2l6ZSkobWF0KSA6IG1hdC5zaXplKCk7XG5cbiAgaWYgKGRpbSA8IDAgfHwgZGltID49IHNpemUubGVuZ3RoKSB7XG4gICAgLy8gVE9ETzogd291bGQgYmUgbW9yZSBjbGVhciB3aGVuIHRocm93aW5nIGEgRGltZW5zaW9uRXJyb3IgaGVyZVxuICAgIHRocm93IG5ldyBfSW5kZXhFcnJvci5JbmRleEVycm9yKGRpbSwgc2l6ZS5sZW5ndGgpO1xuICB9XG5cbiAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKG1hdCkpIHtcbiAgICByZXR1cm4gbWF0LmNyZWF0ZShfcmVkdWNlKG1hdC52YWx1ZU9mKCksIGRpbSwgY2FsbGJhY2spKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gX3JlZHVjZShtYXQsIGRpbSwgY2FsbGJhY2spO1xuICB9XG59XG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHJlZHVjZSBhIG1hdHJpeFxuICogQHBhcmFtIHtBcnJheX0gbWF0XG4gKiBAcGFyYW0ge251bWJlcn0gZGltXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0FycmF5fSByZXRcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBfcmVkdWNlKG1hdCwgZGltLCBjYWxsYmFjaykge1xuICB2YXIgaSwgcmV0LCB2YWwsIHRyYW47XG5cbiAgaWYgKGRpbSA8PSAwKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG1hdFswXSkpIHtcbiAgICAgIHZhbCA9IG1hdFswXTtcblxuICAgICAgZm9yIChpID0gMTsgaSA8IG1hdC5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YWwgPSBjYWxsYmFjayh2YWwsIG1hdFtpXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRyYW4gPSBfc3dpdGNoKG1hdCk7XG4gICAgICByZXQgPSBbXTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IHRyYW4ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmV0W2ldID0gX3JlZHVjZSh0cmFuW2ldLCBkaW0gLSAxLCBjYWxsYmFjayk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldCA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG1hdC5sZW5ndGg7IGkrKykge1xuICAgICAgcmV0W2ldID0gX3JlZHVjZShtYXRbaV0sIGRpbSAtIDEsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9XG59XG4vKipcbiAqIFRyYW5zcG9zZSBhIG1hdHJpeFxuICogQHBhcmFtIHtBcnJheX0gbWF0XG4gKiBAcmV0dXJucyB7QXJyYXl9IHJldFxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIF9zd2l0Y2gobWF0KSB7XG4gIHZhciBJID0gbWF0Lmxlbmd0aDtcbiAgdmFyIEogPSBtYXRbMF0ubGVuZ3RoO1xuICB2YXIgaSwgajtcbiAgdmFyIHJldCA9IFtdO1xuXG4gIGZvciAoaiA9IDA7IGogPCBKOyBqKyspIHtcbiAgICB2YXIgdG1wID0gW107XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgSTsgaSsrKSB7XG4gICAgICB0bXAucHVzaChtYXRbaV1bal0pO1xuICAgIH1cblxuICAgIHJldC5wdXNoKHRtcCk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufSAvLyBUT0RPOiBkb2N1bWVudCBmdW5jdGlvbiBzY2F0dGVyXG5cblxuZnVuY3Rpb24gc2NhdHRlcihhLCBqLCB3LCB4LCB1LCBtYXJrLCBjaW5kZXgsIGYsIGludmVyc2UsIHVwZGF0ZSwgdmFsdWUpIHtcbiAgLy8gYSBhcnJheXNcbiAgdmFyIGF2YWx1ZXMgPSBhLl92YWx1ZXM7XG4gIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgdmFyIGFwdHIgPSBhLl9wdHI7IC8vIHZhcnNcblxuICB2YXIgaywgazAsIGsxLCBpOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzIChwYXR0ZXJuIG1hdHJpeClcblxuICBpZiAoeCkge1xuICAgIC8vIHZhbHVlcyBpbiBqXG4gICAgZm9yIChrMCA9IGFwdHJbal0sIGsxID0gYXB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgIC8vIHJvd1xuICAgICAgaSA9IGFpbmRleFtrXTsgLy8gY2hlY2sgdmFsdWUgZXhpc3RzIGluIGN1cnJlbnQgalxuXG4gICAgICBpZiAod1tpXSAhPT0gbWFyaykge1xuICAgICAgICAvLyBpIGlzIG5ldyBlbnRyeSBpbiBqXG4gICAgICAgIHdbaV0gPSBtYXJrOyAvLyBhZGQgaSB0byBwYXR0ZXJuIG9mIENcblxuICAgICAgICBjaW5kZXgucHVzaChpKTsgLy8geChpKSA9IEEsIGNoZWNrIHdlIG5lZWQgdG8gY2FsbCBmdW5jdGlvbiB0aGlzIHRpbWVcblxuICAgICAgICBpZiAodXBkYXRlKSB7XG4gICAgICAgICAgLy8gY29weSB2YWx1ZSB0byB3b3Jrc3BhY2UgY2FsbGluZyBjYWxsYmFjayBmdW5jdGlvblxuICAgICAgICAgIHhbaV0gPSBpbnZlcnNlID8gZihhdmFsdWVzW2tdLCB2YWx1ZSkgOiBmKHZhbHVlLCBhdmFsdWVzW2tdKTsgLy8gZnVuY3Rpb24gd2FzIGNhbGxlZCBvbiBjdXJyZW50IHJvd1xuXG4gICAgICAgICAgdVtpXSA9IG1hcms7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gY29weSB2YWx1ZSB0byB3b3Jrc3BhY2VcbiAgICAgICAgICB4W2ldID0gYXZhbHVlc1trXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaSBleGlzdHMgaW4gQyBhbHJlYWR5XG4gICAgICAgIHhbaV0gPSBpbnZlcnNlID8gZihhdmFsdWVzW2tdLCB4W2ldKSA6IGYoeFtpXSwgYXZhbHVlc1trXSk7IC8vIGZ1bmN0aW9uIHdhcyBjYWxsZWQgb24gY3VycmVudCByb3dcblxuICAgICAgICB1W2ldID0gbWFyaztcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gdmFsdWVzIGluIGpcbiAgICBmb3IgKGswID0gYXB0cltqXSwgazEgPSBhcHRyW2ogKyAxXSwgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgLy8gcm93XG4gICAgICBpID0gYWluZGV4W2tdOyAvLyBjaGVjayB2YWx1ZSBleGlzdHMgaW4gY3VycmVudCBqXG5cbiAgICAgIGlmICh3W2ldICE9PSBtYXJrKSB7XG4gICAgICAgIC8vIGkgaXMgbmV3IGVudHJ5IGluIGpcbiAgICAgICAgd1tpXSA9IG1hcms7IC8vIGFkZCBpIHRvIHBhdHRlcm4gb2YgQ1xuXG4gICAgICAgIGNpbmRleC5wdXNoKGkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaW5kaWNhdGUgZnVuY3Rpb24gd2FzIGNhbGxlZCBvbiBjdXJyZW50IHJvd1xuICAgICAgICB1W2ldID0gbWFyaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcGxleEVxdWFscyA9IGNvbXBsZXhFcXVhbHM7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4vbnVtYmVyXCIpO1xuXG4vKipcbiAqIFRlc3Qgd2hldGhlciB0d28gY29tcGxleCB2YWx1ZXMgYXJlIGVxdWFsIHByb3ZpZGVkIGEgZ2l2ZW4gZXBzaWxvbi5cbiAqIERvZXMgbm90IHVzZSBvciBjaGFuZ2UgdGhlIGdsb2JhbCBDb21wbGV4LkVQU0lMT04gc2V0dGluZ1xuICogQHBhcmFtIHtDb21wbGV4fSB4XG4gKiBAcGFyYW0ge0NvbXBsZXh9IHlcbiAqIEBwYXJhbSB7bnVtYmVyfSBlcHNpbG9uXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY29tcGxleEVxdWFscyh4LCB5LCBlcHNpbG9uKSB7XG4gIHJldHVybiAoMCwgX251bWJlci5uZWFybHlFcXVhbCkoeC5yZSwgeS5yZSwgZXBzaWxvbikgJiYgKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHguaW0sIHkuaW0sIGVwc2lsb24pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nZXRTYWZlUHJvcGVydHkgPSBnZXRTYWZlUHJvcGVydHk7XG5leHBvcnRzLnNldFNhZmVQcm9wZXJ0eSA9IHNldFNhZmVQcm9wZXJ0eTtcbmV4cG9ydHMuaXNTYWZlUHJvcGVydHkgPSBpc1NhZmVQcm9wZXJ0eTtcbmV4cG9ydHMudmFsaWRhdGVTYWZlTWV0aG9kID0gdmFsaWRhdGVTYWZlTWV0aG9kO1xuZXhwb3J0cy5pc1NhZmVNZXRob2QgPSBpc1NhZmVNZXRob2Q7XG5leHBvcnRzLmlzUGxhaW5PYmplY3QgPSBpc1BsYWluT2JqZWN0O1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuL29iamVjdFwiKTtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4vKipcbiAqIEdldCBhIHByb3BlcnR5IG9mIGEgcGxhaW4gb2JqZWN0XG4gKiBUaHJvd3MgYW4gZXJyb3IgaW4gY2FzZSB0aGUgb2JqZWN0IGlzIG5vdCBhIHBsYWluIG9iamVjdCBvciB0aGVcbiAqIHByb3BlcnR5IGlzIG5vdCBkZWZpbmVkIG9uIHRoZSBvYmplY3QgaXRzZWxmXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcFxuICogQHJldHVybiB7Kn0gUmV0dXJucyB0aGUgcHJvcGVydHkgdmFsdWUgd2hlbiBzYWZlXG4gKi9cbmZ1bmN0aW9uIGdldFNhZmVQcm9wZXJ0eShvYmplY3QsIHByb3ApIHtcbiAgLy8gb25seSBhbGxvdyBnZXR0aW5nIHNhZmUgcHJvcGVydGllcyBvZiBhIHBsYWluIG9iamVjdFxuICBpZiAoaXNQbGFpbk9iamVjdChvYmplY3QpICYmIGlzU2FmZVByb3BlcnR5KG9iamVjdCwgcHJvcCkpIHtcbiAgICByZXR1cm4gb2JqZWN0W3Byb3BdO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBvYmplY3RbcHJvcF0gPT09ICdmdW5jdGlvbicgJiYgaXNTYWZlTWV0aG9kKG9iamVjdCwgcHJvcCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhY2Nlc3MgbWV0aG9kIFwiJyArIHByb3AgKyAnXCIgYXMgYSBwcm9wZXJ0eScpO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdObyBhY2Nlc3MgdG8gcHJvcGVydHkgXCInICsgcHJvcCArICdcIicpO1xufVxuLyoqXG4gKiBTZXQgYSBwcm9wZXJ0eSBvbiBhIHBsYWluIG9iamVjdC5cbiAqIFRocm93cyBhbiBlcnJvciBpbiBjYXNlIHRoZSBvYmplY3QgaXMgbm90IGEgcGxhaW4gb2JqZWN0IG9yIHRoZVxuICogcHJvcGVydHkgd291bGQgb3ZlcnJpZGUgYW4gaW5oZXJpdGVkIHByb3BlcnR5IGxpa2UgLmNvbnN0cnVjdG9yIG9yIC50b1N0cmluZ1xuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4geyp9IFJldHVybnMgdGhlIHZhbHVlXG4gKi9cbi8vIFRPRE86IG1lcmdlIHRoaXMgZnVuY3Rpb24gaW50byBhY2Nlc3MuanM/XG5cblxuZnVuY3Rpb24gc2V0U2FmZVByb3BlcnR5KG9iamVjdCwgcHJvcCwgdmFsdWUpIHtcbiAgLy8gb25seSBhbGxvdyBzZXR0aW5nIHNhZmUgcHJvcGVydGllcyBvZiBhIHBsYWluIG9iamVjdFxuICBpZiAoaXNQbGFpbk9iamVjdChvYmplY3QpICYmIGlzU2FmZVByb3BlcnR5KG9iamVjdCwgcHJvcCkpIHtcbiAgICBvYmplY3RbcHJvcF0gPSB2YWx1ZTtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ05vIGFjY2VzcyB0byBwcm9wZXJ0eSBcIicgKyBwcm9wICsgJ1wiJyk7XG59XG4vKipcbiAqIFRlc3Qgd2hldGhlciBhIHByb3BlcnR5IGlzIHNhZmUgdG8gdXNlIGZvciBhbiBvYmplY3QuXG4gKiBGb3IgZXhhbXBsZSAudG9TdHJpbmcgYW5kIC5jb25zdHJ1Y3RvciBhcmUgbm90IHNhZmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wXG4gKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBzYWZlXG4gKi9cblxuXG5mdW5jdGlvbiBpc1NhZmVQcm9wZXJ0eShvYmplY3QsIHByb3ApIHtcbiAgaWYgKCFvYmplY3QgfHwgX3R5cGVvZihvYmplY3QpICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBTQUZFOiB3aGl0ZWxpc3RlZFxuICAvLyBlLmcgbGVuZ3RoXG5cblxuICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKHNhZmVOYXRpdmVQcm9wZXJ0aWVzLCBwcm9wKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIFVOU0FGRTogaW5oZXJpdGVkIGZyb20gT2JqZWN0IHByb3RvdHlwZVxuICAvLyBlLmcgY29uc3RydWN0b3JcblxuXG4gIGlmIChwcm9wIGluIE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICAvLyAnaW4nIGlzIHVzZWQgaW5zdGVhZCBvZiBoYXNPd25Qcm9wZXJ0eSBmb3Igbm9kZWpzIHYwLjEwXG4gICAgLy8gd2hpY2ggaXMgaW5jb25zaXN0ZW50IG9uIHJvb3QgcHJvdG90eXBlcy4gSXQgaXMgc2FmZVxuICAgIC8vIGhlcmUgYmVjYXVzZSBPYmplY3QucHJvdG90eXBlIGlzIGEgcm9vdCBvYmplY3RcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gVU5TQUZFOiBpbmhlcml0ZWQgZnJvbSBGdW5jdGlvbiBwcm90b3R5cGVcbiAgLy8gZS5nIGNhbGwsIGFwcGx5XG5cblxuICBpZiAocHJvcCBpbiBGdW5jdGlvbi5wcm90b3R5cGUpIHtcbiAgICAvLyAnaW4nIGlzIHVzZWQgaW5zdGVhZCBvZiBoYXNPd25Qcm9wZXJ0eSBmb3Igbm9kZWpzIHYwLjEwXG4gICAgLy8gd2hpY2ggaXMgaW5jb25zaXN0ZW50IG9uIHJvb3QgcHJvdG90eXBlcy4gSXQgaXMgc2FmZVxuICAgIC8vIGhlcmUgYmVjYXVzZSBGdW5jdGlvbi5wcm90b3R5cGUgaXMgYSByb290IG9iamVjdFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuLyoqXG4gKiBWYWxpZGF0ZSB3aGV0aGVyIGEgbWV0aG9kIGlzIHNhZmUuXG4gKiBUaHJvd3MgYW4gZXJyb3Igd2hlbiB0aGF0J3Mgbm90IHRoZSBjYXNlLlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZFxuICovXG4vLyBUT0RPOiBtZXJnZSB0aGlzIGZ1bmN0aW9uIGludG8gYXNzaWduLmpzP1xuXG5cbmZ1bmN0aW9uIHZhbGlkYXRlU2FmZU1ldGhvZChvYmplY3QsIG1ldGhvZCkge1xuICBpZiAoIWlzU2FmZU1ldGhvZChvYmplY3QsIG1ldGhvZCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGFjY2VzcyB0byBtZXRob2QgXCInICsgbWV0aG9kICsgJ1wiJyk7XG4gIH1cbn1cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIG1ldGhvZCBpcyBzYWZlLlxuICogVGhyb3dzIGFuIGVycm9yIHdoZW4gdGhhdCdzIG5vdCB0aGUgY2FzZSAoZm9yIGV4YW1wbGUgZm9yIGBjb25zdHJ1Y3RvcmApLlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZFxuICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW4gc2FmZSwgZmFsc2Ugb3RoZXJ3aXNlXG4gKi9cblxuXG5mdW5jdGlvbiBpc1NhZmVNZXRob2Qob2JqZWN0LCBtZXRob2QpIHtcbiAgaWYgKG9iamVjdCA9PT0gbnVsbCB8fCBvYmplY3QgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2Ygb2JqZWN0W21ldGhvZF0gIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gVU5TQUZFOiBnaG9zdGVkXG4gIC8vIGUuZyBvdmVycmlkZGVuIHRvU3RyaW5nXG4gIC8vIE5vdGUgdGhhdCBJRTEwIGRvZXNuJ3Qgc3VwcG9ydCBfX3Byb3RvX18gYW5kIHdlIGNhbid0IGRvIHRoaXMgY2hlY2sgdGhlcmUuXG5cblxuICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG9iamVjdCwgbWV0aG9kKSAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YgJiYgbWV0aG9kIGluIE9iamVjdC5nZXRQcm90b3R5cGVPZihvYmplY3QpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIFNBRkU6IHdoaXRlbGlzdGVkXG4gIC8vIGUuZyB0b1N0cmluZ1xuXG5cbiAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShzYWZlTmF0aXZlTWV0aG9kcywgbWV0aG9kKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIFVOU0FGRTogaW5oZXJpdGVkIGZyb20gT2JqZWN0IHByb3RvdHlwZVxuICAvLyBlLmcgY29uc3RydWN0b3JcblxuXG4gIGlmIChtZXRob2QgaW4gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIC8vICdpbicgaXMgdXNlZCBpbnN0ZWFkIG9mIGhhc093blByb3BlcnR5IGZvciBub2RlanMgdjAuMTBcbiAgICAvLyB3aGljaCBpcyBpbmNvbnNpc3RlbnQgb24gcm9vdCBwcm90b3R5cGVzLiBJdCBpcyBzYWZlXG4gICAgLy8gaGVyZSBiZWNhdXNlIE9iamVjdC5wcm90b3R5cGUgaXMgYSByb290IG9iamVjdFxuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBVTlNBRkU6IGluaGVyaXRlZCBmcm9tIEZ1bmN0aW9uIHByb3RvdHlwZVxuICAvLyBlLmcgY2FsbCwgYXBwbHlcblxuXG4gIGlmIChtZXRob2QgaW4gRnVuY3Rpb24ucHJvdG90eXBlKSB7XG4gICAgLy8gJ2luJyBpcyB1c2VkIGluc3RlYWQgb2YgaGFzT3duUHJvcGVydHkgZm9yIG5vZGVqcyB2MC4xMFxuICAgIC8vIHdoaWNoIGlzIGluY29uc2lzdGVudCBvbiByb290IHByb3RvdHlwZXMuIEl0IGlzIHNhZmVcbiAgICAvLyBoZXJlIGJlY2F1c2UgRnVuY3Rpb24ucHJvdG90eXBlIGlzIGEgcm9vdCBvYmplY3RcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gaXNQbGFpbk9iamVjdChvYmplY3QpIHtcbiAgcmV0dXJuIF90eXBlb2Yob2JqZWN0KSA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICYmIG9iamVjdC5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0O1xufVxuXG52YXIgc2FmZU5hdGl2ZVByb3BlcnRpZXMgPSB7XG4gIGxlbmd0aDogdHJ1ZSxcbiAgbmFtZTogdHJ1ZVxufTtcbnZhciBzYWZlTmF0aXZlTWV0aG9kcyA9IHtcbiAgdG9TdHJpbmc6IHRydWUsXG4gIHZhbHVlT2Y6IHRydWUsXG4gIHRvTG9jYWxlU3RyaW5nOiB0cnVlXG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5taXhpbiA9IG1peGluO1xuXG52YXIgX3RpbnlFbWl0dGVyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwidGlueS1lbWl0dGVyXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbi8qKlxuICogRXh0ZW5kIGdpdmVuIG9iamVjdCB3aXRoIGVtaXR0ZXIgZnVuY3Rpb25zIGBvbmAsIGBvZmZgLCBgb25jZWAsIGBlbWl0YFxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHJldHVybiB7T2JqZWN0fSBvYmpcbiAqL1xuZnVuY3Rpb24gbWl4aW4ob2JqKSB7XG4gIC8vIGNyZWF0ZSBldmVudCBlbWl0dGVyXG4gIHZhciBlbWl0dGVyID0gbmV3IF90aW55RW1pdHRlcltcImRlZmF1bHRcIl0oKTsgLy8gYmluZCBtZXRob2RzIHRvIG9iaiAod2UgZG9uJ3Qgd2FudCB0byBleHBvc2UgdGhlIGVtaXR0ZXIuZSBBcnJheS4uLilcblxuICBvYmoub24gPSBlbWl0dGVyLm9uLmJpbmQoZW1pdHRlcik7XG4gIG9iai5vZmYgPSBlbWl0dGVyLm9mZi5iaW5kKGVtaXR0ZXIpO1xuICBvYmoub25jZSA9IGVtaXR0ZXIub25jZS5iaW5kKGVtaXR0ZXIpO1xuICBvYmouZW1pdCA9IGVtaXR0ZXIuZW1pdC5iaW5kKGVtaXR0ZXIpO1xuICByZXR1cm4gb2JqO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mYWN0b3J5ID0gZmFjdG9yeTtcbmV4cG9ydHMuc29ydEZhY3RvcmllcyA9IHNvcnRGYWN0b3JpZXM7XG5leHBvcnRzLmNyZWF0ZSA9IGNyZWF0ZTtcbmV4cG9ydHMuaXNGYWN0b3J5ID0gaXNGYWN0b3J5O1xuZXhwb3J0cy5hc3NlcnREZXBlbmRlbmNpZXMgPSBhc3NlcnREZXBlbmRlbmNpZXM7XG5leHBvcnRzLmlzT3B0aW9uYWxEZXBlbmRlbmN5ID0gaXNPcHRpb25hbERlcGVuZGVuY3k7XG5leHBvcnRzLnN0cmlwT3B0aW9uYWxOb3RhdGlvbiA9IHN0cmlwT3B0aW9uYWxOb3RhdGlvbjtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5XCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuL29iamVjdFwiKTtcblxuLyoqXG4gKiBDcmVhdGUgYSBmYWN0b3J5IGZ1bmN0aW9uLCB3aGljaCBjYW4gYmUgdXNlZCB0byBpbmplY3QgZGVwZW5kZW5jaWVzLlxuICpcbiAqIFRoZSBjcmVhdGVkIGZ1bmN0aW9ucyBhcmUgbWVtb2l6ZWQsIGEgY29uc2VjdXRpdmUgY2FsbCBvZiB0aGUgZmFjdG9yeVxuICogd2l0aCB0aGUgZXhhY3Qgc2FtZSBpbnB1dHMgd2lsbCByZXR1cm4gdGhlIHNhbWUgZnVuY3Rpb24gaW5zdGFuY2UuXG4gKiBUaGUgbWVtb2l6ZWQgY2FjaGUgaXMgZXhwb3NlZCBvbiBgZmFjdG9yeS5jYWNoZWAgYW5kIGNhbiBiZSBjbGVhcmVkXG4gKiBpZiBuZWVkZWQuXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiAgICAgY29uc3QgbmFtZSA9ICdsb2cnXG4gKiAgICAgY29uc3QgZGVwZW5kZW5jaWVzID0gWydjb25maWcnLCAndHlwZWQnLCAnZGl2aWRlU2NhbGFyJywgJ0NvbXBsZXgnXVxuICpcbiAqICAgICBleHBvcnQgY29uc3QgY3JlYXRlTG9nID0gZmFjdG9yeShuYW1lLCBkZXBlbmRlbmNpZXMsICh7IHR5cGVkLCBjb25maWcsIGRpdmlkZVNjYWxhciwgQ29tcGxleCB9KSA9PiB7XG4gKiAgICAgICAvLyAuLi4gY3JlYXRlIHRoZSBmdW5jdGlvbiBsb2cgaGVyZSBhbmQgcmV0dXJuIGl0XG4gKiAgICAgfVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lICAgICAgICAgICBOYW1lIG9mIHRoZSBmdW5jdGlvbiB0byBiZSBjcmVhdGVkXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBkZXBlbmRlbmNpZXMgVGhlIG5hbWVzIG9mIGFsbCByZXF1aXJlZCBkZXBlbmRlbmNpZXNcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNyZWF0ZSAgICAgICBDYWxsYmFjayBmdW5jdGlvbiBjYWxsZWQgd2l0aCBhbiBvYmplY3Qgd2l0aCBhbGwgZGVwZW5kZW5jaWVzXG4gKiBAcGFyYW0ge09iamVjdH0gW21ldGFdICAgICAgICAgT3B0aW9uYWwgb2JqZWN0IHdpdGggbWV0YSBpbmZvcm1hdGlvbiB0aGF0IHdpbGwgYmUgYXR0YWNoZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgY3JlYXRlZCBmYWN0b3J5IGZ1bmN0aW9uIGFzIHByb3BlcnR5IGBtZXRhYC5cbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gZmFjdG9yeShuYW1lLCBkZXBlbmRlbmNpZXMsIGNyZWF0ZSwgbWV0YSkge1xuICBmdW5jdGlvbiBhc3NlcnRBbmRDcmVhdGUoc2NvcGUpIHtcbiAgICAvLyB3ZSBvbmx5IHBhc3MgdGhlIHJlcXVlc3RlZCBkZXBlbmRlbmNpZXMgdG8gdGhlIGZhY3RvcnkgZnVuY3Rpb25cbiAgICAvLyB0byBwcmV2ZW50IGZ1bmN0aW9ucyB0byByZWx5IG9uIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBub3QgZXhwbGljaXRseVxuICAgIC8vIHJlcXVlc3RlZC5cbiAgICB2YXIgZGVwcyA9ICgwLCBfb2JqZWN0LnBpY2tTaGFsbG93KShzY29wZSwgZGVwZW5kZW5jaWVzLm1hcChzdHJpcE9wdGlvbmFsTm90YXRpb24pKTtcbiAgICBhc3NlcnREZXBlbmRlbmNpZXMobmFtZSwgZGVwZW5kZW5jaWVzLCBzY29wZSk7XG4gICAgcmV0dXJuIGNyZWF0ZShkZXBzKTtcbiAgfVxuXG4gIGFzc2VydEFuZENyZWF0ZS5pc0ZhY3RvcnkgPSB0cnVlO1xuICBhc3NlcnRBbmRDcmVhdGUuZm4gPSBuYW1lO1xuICBhc3NlcnRBbmRDcmVhdGUuZGVwZW5kZW5jaWVzID0gZGVwZW5kZW5jaWVzLnNsaWNlKCkuc29ydCgpO1xuXG4gIGlmIChtZXRhKSB7XG4gICAgYXNzZXJ0QW5kQ3JlYXRlLm1ldGEgPSBtZXRhO1xuICB9XG5cbiAgcmV0dXJuIGFzc2VydEFuZENyZWF0ZTtcbn1cbi8qKlxuICogU29ydCBhbGwgZmFjdG9yaWVzIHN1Y2ggdGhhdCB3aGVuIGxvYWRpbmcgaW4gb3JkZXIsIHRoZSBkZXBlbmRlbmNpZXMgYXJlIHJlc29sdmVkLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGZhY3Rvcmllc1xuICogQHJldHVybnMge0FycmF5fSBSZXR1cm5zIGEgbmV3IGFycmF5IHdpdGggdGhlIHNvcnRlZCBmYWN0b3JpZXMuXG4gKi9cblxuXG5mdW5jdGlvbiBzb3J0RmFjdG9yaWVzKGZhY3Rvcmllcykge1xuICB2YXIgZmFjdG9yaWVzQnlOYW1lID0ge307XG4gIGZhY3Rvcmllcy5mb3JFYWNoKGZ1bmN0aW9uIChmYWN0b3J5KSB7XG4gICAgZmFjdG9yaWVzQnlOYW1lW2ZhY3RvcnkuZm5dID0gZmFjdG9yeTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gY29udGFpbnNEZXBlbmRlbmN5KGZhY3RvcnksIGRlcGVuZGVuY3kpIHtcbiAgICAvLyBUT0RPOiBkZXRlY3QgY2lyY3VsYXIgcmVmZXJlbmNlc1xuICAgIGlmIChpc0ZhY3RvcnkoZmFjdG9yeSkpIHtcbiAgICAgIGlmICgoMCwgX2FycmF5LmNvbnRhaW5zKShmYWN0b3J5LmRlcGVuZGVuY2llcywgZGVwZW5kZW5jeS5mbiB8fCBkZXBlbmRlbmN5Lm5hbWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZmFjdG9yeS5kZXBlbmRlbmNpZXMuc29tZShmdW5jdGlvbiAoZCkge1xuICAgICAgICByZXR1cm4gY29udGFpbnNEZXBlbmRlbmN5KGZhY3Rvcmllc0J5TmFtZVtkXSwgZGVwZW5kZW5jeSk7XG4gICAgICB9KSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgc29ydGVkID0gW107XG5cbiAgZnVuY3Rpb24gYWRkRmFjdG9yeShmYWN0b3J5KSB7XG4gICAgdmFyIGluZGV4ID0gMDtcblxuICAgIHdoaWxlIChpbmRleCA8IHNvcnRlZC5sZW5ndGggJiYgIWNvbnRhaW5zRGVwZW5kZW5jeShzb3J0ZWRbaW5kZXhdLCBmYWN0b3J5KSkge1xuICAgICAgaW5kZXgrKztcbiAgICB9XG5cbiAgICBzb3J0ZWQuc3BsaWNlKGluZGV4LCAwLCBmYWN0b3J5KTtcbiAgfSAvLyBzb3J0IHJlZ3VsYXIgZmFjdG9yeSBmdW5jdGlvbnNcblxuXG4gIGZhY3Rvcmllcy5maWx0ZXIoaXNGYWN0b3J5KS5mb3JFYWNoKGFkZEZhY3RvcnkpOyAvLyBzb3J0IGxlZ2FjeSBmYWN0b3J5IGZ1bmN0aW9ucyBBRlRFUiB0aGUgcmVndWxhciBmYWN0b3J5IGZ1bmN0aW9uc1xuXG4gIGZhY3Rvcmllcy5maWx0ZXIoZnVuY3Rpb24gKGZhY3RvcnkpIHtcbiAgICByZXR1cm4gIWlzRmFjdG9yeShmYWN0b3J5KTtcbiAgfSkuZm9yRWFjaChhZGRGYWN0b3J5KTtcbiAgcmV0dXJuIHNvcnRlZDtcbn0gLy8gVE9ETzogY29tbWVudCBvciBjbGVhbnVwIGlmIHVudXNlZCBpbiB0aGUgZW5kXG5cblxuZnVuY3Rpb24gY3JlYXRlKGZhY3Rvcmllcykge1xuICB2YXIgc2NvcGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICBzb3J0RmFjdG9yaWVzKGZhY3RvcmllcykuZm9yRWFjaChmdW5jdGlvbiAoZmFjdG9yeSkge1xuICAgIHJldHVybiBmYWN0b3J5KHNjb3BlKTtcbiAgfSk7XG4gIHJldHVybiBzY29wZTtcbn1cbi8qKlxuICogVGVzdCB3aGV0aGVyIGFuIG9iamVjdCBpcyBhIGZhY3RvcnkuIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiBpdCBoYXNcbiAqIHByb3BlcnRpZXMgbmFtZSwgZGVwZW5kZW5jaWVzLCBhbmQgYSBmdW5jdGlvbiBjcmVhdGUuXG4gKiBAcGFyYW0geyp9IG9ialxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cblxuXG5mdW5jdGlvbiBpc0ZhY3Rvcnkob2JqKSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmouZm4gPT09ICdzdHJpbmcnICYmIEFycmF5LmlzQXJyYXkob2JqLmRlcGVuZGVuY2llcyk7XG59XG4vKipcbiAqIEFzc2VydCB0aGF0IGFsbCBkZXBlbmRlbmNpZXMgb2YgYSBsaXN0IHdpdGggZGVwZW5kZW5jaWVzIGFyZSBhdmFpbGFibGUgaW4gdGhlIHByb3ZpZGVkIHNjb3BlLlxuICpcbiAqIFdpbGwgdGhyb3cgYW4gZXhjZXB0aW9uIHdoZW4gdGhlcmUgYXJlIGRlcGVuZGVuY2llcyBtaXNzaW5nLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lICAgTmFtZSBmb3IgdGhlIGZ1bmN0aW9uIHRvIGJlIGNyZWF0ZWQuIFVzZWQgdG8gZ2VuZXJhdGUgYSB1c2VmdWwgZXJyb3IgbWVzc2FnZVxuICogQHBhcmFtIHtzdHJpbmdbXX0gZGVwZW5kZW5jaWVzXG4gKiBAcGFyYW0ge09iamVjdH0gc2NvcGVcbiAqL1xuXG5cbmZ1bmN0aW9uIGFzc2VydERlcGVuZGVuY2llcyhuYW1lLCBkZXBlbmRlbmNpZXMsIHNjb3BlKSB7XG4gIHZhciBhbGxEZWZpbmVkID0gZGVwZW5kZW5jaWVzLmZpbHRlcihmdW5jdGlvbiAoZGVwZW5kZW5jeSkge1xuICAgIHJldHVybiAhaXNPcHRpb25hbERlcGVuZGVuY3koZGVwZW5kZW5jeSk7XG4gIH0pIC8vIGZpbHRlciBvcHRpb25hbHNcbiAgLmV2ZXJ5KGZ1bmN0aW9uIChkZXBlbmRlbmN5KSB7XG4gICAgcmV0dXJuIHNjb3BlW2RlcGVuZGVuY3ldICE9PSB1bmRlZmluZWQ7XG4gIH0pO1xuXG4gIGlmICghYWxsRGVmaW5lZCkge1xuICAgIHZhciBtaXNzaW5nRGVwZW5kZW5jaWVzID0gZGVwZW5kZW5jaWVzLmZpbHRlcihmdW5jdGlvbiAoZGVwZW5kZW5jeSkge1xuICAgICAgcmV0dXJuIHNjb3BlW2RlcGVuZGVuY3ldID09PSB1bmRlZmluZWQ7XG4gICAgfSk7IC8vIFRPRE86IGNyZWF0ZSBhIGN1c3RvbSBlcnJvciBjbGFzcyBmb3IgdGhpcywgYSBNYXRoanNFcnJvciBvciBzb21ldGhpbmcgbGlrZSB0aGF0XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY3JlYXRlIGZ1bmN0aW9uIFxcXCJcIi5jb25jYXQobmFtZSwgXCJcXFwiLCBcIikgKyBcInNvbWUgZGVwZW5kZW5jaWVzIGFyZSBtaXNzaW5nOiBcIi5jb25jYXQobWlzc2luZ0RlcGVuZGVuY2llcy5tYXAoZnVuY3Rpb24gKGQpIHtcbiAgICAgIHJldHVybiBcIlxcXCJcIi5jb25jYXQoZCwgXCJcXFwiXCIpO1xuICAgIH0pLmpvaW4oJywgJyksIFwiLlwiKSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNPcHRpb25hbERlcGVuZGVuY3koZGVwZW5kZW5jeSkge1xuICByZXR1cm4gZGVwZW5kZW5jeSAmJiBkZXBlbmRlbmN5WzBdID09PSAnPyc7XG59XG5cbmZ1bmN0aW9uIHN0cmlwT3B0aW9uYWxOb3RhdGlvbihkZXBlbmRlbmN5KSB7XG4gIHJldHVybiBkZXBlbmRlbmN5ICYmIGRlcGVuZGVuY3lbMF0gPT09ICc/JyA/IGRlcGVuZGVuY3kuc2xpY2UoMSkgOiBkZXBlbmRlbmN5O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tZW1vaXplID0gbWVtb2l6ZTtcbmV4cG9ydHMubWVtb2l6ZUNvbXBhcmUgPSBtZW1vaXplQ29tcGFyZTtcbmV4cG9ydHMubWF4QXJndW1lbnRDb3VudCA9IG1heEFyZ3VtZW50Q291bnQ7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuLy8gZnVuY3Rpb24gdXRpbHNcblxuLyoqXG4gKiBNZW1vaXplIGEgZ2l2ZW4gZnVuY3Rpb24gYnkgY2FjaGluZyB0aGUgY29tcHV0ZWQgcmVzdWx0LlxuICogVGhlIGNhY2hlIG9mIGEgbWVtb2l6ZWQgZnVuY3Rpb24gY2FuIGJlIGNsZWFyZWQgYnkgZGVsZXRpbmcgdGhlIGBjYWNoZWBcbiAqIHByb3BlcnR5IG9mIHRoZSBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmbiAgICAgICAgICAgICAgICAgICAgIFRoZSBmdW5jdGlvbiB0byBiZSBtZW1vaXplZC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXVzdCBiZSBhIHB1cmUgZnVuY3Rpb24uXG4gKiBAcGFyYW0ge2Z1bmN0aW9uKGFyZ3M6IEFycmF5KX0gW2hhc2hlcl0gIEEgY3VzdG9tIGhhc2ggYnVpbGRlci5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXMgSlNPTi5zdHJpbmdpZnkgYnkgZGVmYXVsdC5cbiAqIEByZXR1cm4ge2Z1bmN0aW9ufSAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgbWVtb2l6ZWQgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gbWVtb2l6ZShmbiwgaGFzaGVyKSB7XG4gIHJldHVybiBmdW5jdGlvbiBtZW1vaXplKCkge1xuICAgIGlmIChfdHlwZW9mKG1lbW9pemUuY2FjaGUpICE9PSAnb2JqZWN0Jykge1xuICAgICAgbWVtb2l6ZS5jYWNoZSA9IHt9O1xuICAgIH1cblxuICAgIHZhciBhcmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IGFyZ3VtZW50c1tpXTtcbiAgICB9XG5cbiAgICB2YXIgaGFzaCA9IGhhc2hlciA/IGhhc2hlcihhcmdzKSA6IEpTT04uc3RyaW5naWZ5KGFyZ3MpO1xuXG4gICAgaWYgKCEoaGFzaCBpbiBtZW1vaXplLmNhY2hlKSkge1xuICAgICAgbWVtb2l6ZS5jYWNoZVtoYXNoXSA9IGZuLmFwcGx5KGZuLCBhcmdzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVtb2l6ZS5jYWNoZVtoYXNoXTtcbiAgfTtcbn1cbi8qKlxuICogTWVtb2l6ZSBhIGdpdmVuIGZ1bmN0aW9uIGJ5IGNhY2hpbmcgYWxsIHJlc3VsdHMgYW5kIHRoZSBhcmd1bWVudHMsXG4gKiBhbmQgY29tcGFyaW5nIGFnYWluc3QgdGhlIGFyZ3VtZW50cyBvZiBwcmV2aW91cyByZXN1bHRzIGJlZm9yZVxuICogZXhlY3V0aW5nIGFnYWluLlxuICogVGhpcyBpcyBsZXNzIHBlcmZvcm1hbnQgdGhhbiBgbWVtb2l6ZWAgd2hpY2ggY2FsY3VsYXRlcyBhIGhhc2gsXG4gKiB3aGljaCBpcyB2ZXJ5IGZhc3QgdG8gY29tcGFyZS4gVXNlIGBtZW1vaXplQ29tcGFyZWAgb25seSB3aGVuIGl0IGlzXG4gKiBub3QgcG9zc2libGUgdG8gY3JlYXRlIGEgdW5pcXVlIHNlcmlhbGl6YWJsZSBoYXNoIGZyb20gdGhlIGZ1bmN0aW9uXG4gKiBhcmd1bWVudHMuXG4gKiBUaGUgaXNFcXVhbCBmdW5jdGlvbiBtdXN0IGNvbXBhcmUgdHdvIHNldHMgb2YgYXJndW1lbnRzXG4gKiBhbmQgcmV0dXJuIHRydWUgd2hlbiBlcXVhbCAoY2FuIGJlIGEgZGVlcCBlcXVhbGl0eSBjaGVjayBmb3IgZXhhbXBsZSkuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtmdW5jdGlvbihhOiAqLCBiOiAqKSA6IGJvb2xlYW59IGlzRXF1YWxcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xuXG5cbmZ1bmN0aW9uIG1lbW9pemVDb21wYXJlKGZuLCBpc0VxdWFsKSB7XG4gIHZhciBtZW1vaXplID0gZnVuY3Rpb24gbWVtb2l6ZSgpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgZm9yICh2YXIgYyA9IDA7IGMgPCBtZW1vaXplLmNhY2hlLmxlbmd0aDsgYysrKSB7XG4gICAgICB2YXIgY2FjaGVkID0gbWVtb2l6ZS5jYWNoZVtjXTtcblxuICAgICAgaWYgKGlzRXF1YWwoYXJncywgY2FjaGVkLmFyZ3MpKSB7XG4gICAgICAgIC8vIFRPRE86IG1vdmUgdGhpcyBjYWNoZSBlbnRyeSB0byB0aGUgdG9wIHNvIHJlY2VudGx5IHVzZWQgZW50cmllcyBtb3ZlIHVwP1xuICAgICAgICByZXR1cm4gY2FjaGVkLnJlcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcmVzID0gZm4uYXBwbHkoZm4sIGFyZ3MpO1xuICAgIG1lbW9pemUuY2FjaGUudW5zaGlmdCh7XG4gICAgICBhcmdzOiBhcmdzLFxuICAgICAgcmVzOiByZXNcbiAgICB9KTtcbiAgICByZXR1cm4gcmVzO1xuICB9O1xuXG4gIG1lbW9pemUuY2FjaGUgPSBbXTtcbiAgcmV0dXJuIG1lbW9pemU7XG59XG4vKipcbiAqIEZpbmQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cyBleHBlY3RlZCBieSBhIHR5cGVkIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gZm4gICBBIHR5cGVkIGZ1bmN0aW9uXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGV4cGVjdGVkIGFyZ3VtZW50cy5cbiAqICAgICAgICAgICAgICAgICAgUmV0dXJucyAtMSB3aGVuIG5vIHNpZ25hdHVyZXMgd2hlcmUgZm91bmQgb24gdGhlIGZ1bmN0aW9uLlxuICovXG5cblxuZnVuY3Rpb24gbWF4QXJndW1lbnRDb3VudChmbikge1xuICByZXR1cm4gT2JqZWN0LmtleXMoZm4uc2lnbmF0dXJlcyB8fCB7fSkucmVkdWNlKGZ1bmN0aW9uIChhcmdzLCBzaWduYXR1cmUpIHtcbiAgICB2YXIgY291bnQgPSAoc2lnbmF0dXJlLm1hdGNoKC8sL2cpIHx8IFtdKS5sZW5ndGggKyAxO1xuICAgIHJldHVybiBNYXRoLm1heChhcmdzLCBjb3VudCk7XG4gIH0sIC0xKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNOdW1iZXIgPSBpc051bWJlcjtcbmV4cG9ydHMuaXNCaWdOdW1iZXIgPSBpc0JpZ051bWJlcjtcbmV4cG9ydHMuaXNDb21wbGV4ID0gaXNDb21wbGV4O1xuZXhwb3J0cy5pc0ZyYWN0aW9uID0gaXNGcmFjdGlvbjtcbmV4cG9ydHMuaXNVbml0ID0gaXNVbml0O1xuZXhwb3J0cy5pc1N0cmluZyA9IGlzU3RyaW5nO1xuZXhwb3J0cy5pc01hdHJpeCA9IGlzTWF0cml4O1xuZXhwb3J0cy5pc0NvbGxlY3Rpb24gPSBpc0NvbGxlY3Rpb247XG5leHBvcnRzLmlzRGVuc2VNYXRyaXggPSBpc0RlbnNlTWF0cml4O1xuZXhwb3J0cy5pc1NwYXJzZU1hdHJpeCA9IGlzU3BhcnNlTWF0cml4O1xuZXhwb3J0cy5pc1JhbmdlID0gaXNSYW5nZTtcbmV4cG9ydHMuaXNJbmRleCA9IGlzSW5kZXg7XG5leHBvcnRzLmlzQm9vbGVhbiA9IGlzQm9vbGVhbjtcbmV4cG9ydHMuaXNSZXN1bHRTZXQgPSBpc1Jlc3VsdFNldDtcbmV4cG9ydHMuaXNIZWxwID0gaXNIZWxwO1xuZXhwb3J0cy5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcbmV4cG9ydHMuaXNEYXRlID0gaXNEYXRlO1xuZXhwb3J0cy5pc1JlZ0V4cCA9IGlzUmVnRXhwO1xuZXhwb3J0cy5pc09iamVjdCA9IGlzT2JqZWN0O1xuZXhwb3J0cy5pc051bGwgPSBpc051bGw7XG5leHBvcnRzLmlzVW5kZWZpbmVkID0gaXNVbmRlZmluZWQ7XG5leHBvcnRzLmlzQWNjZXNzb3JOb2RlID0gaXNBY2Nlc3Nvck5vZGU7XG5leHBvcnRzLmlzQXJyYXlOb2RlID0gaXNBcnJheU5vZGU7XG5leHBvcnRzLmlzQXNzaWdubWVudE5vZGUgPSBpc0Fzc2lnbm1lbnROb2RlO1xuZXhwb3J0cy5pc0Jsb2NrTm9kZSA9IGlzQmxvY2tOb2RlO1xuZXhwb3J0cy5pc0NvbmRpdGlvbmFsTm9kZSA9IGlzQ29uZGl0aW9uYWxOb2RlO1xuZXhwb3J0cy5pc0NvbnN0YW50Tm9kZSA9IGlzQ29uc3RhbnROb2RlO1xuZXhwb3J0cy5pc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUgPSBpc0Z1bmN0aW9uQXNzaWdubWVudE5vZGU7XG5leHBvcnRzLmlzRnVuY3Rpb25Ob2RlID0gaXNGdW5jdGlvbk5vZGU7XG5leHBvcnRzLmlzSW5kZXhOb2RlID0gaXNJbmRleE5vZGU7XG5leHBvcnRzLmlzTm9kZSA9IGlzTm9kZTtcbmV4cG9ydHMuaXNPYmplY3ROb2RlID0gaXNPYmplY3ROb2RlO1xuZXhwb3J0cy5pc09wZXJhdG9yTm9kZSA9IGlzT3BlcmF0b3JOb2RlO1xuZXhwb3J0cy5pc1BhcmVudGhlc2lzTm9kZSA9IGlzUGFyZW50aGVzaXNOb2RlO1xuZXhwb3J0cy5pc1JhbmdlTm9kZSA9IGlzUmFuZ2VOb2RlO1xuZXhwb3J0cy5pc1N5bWJvbE5vZGUgPSBpc1N5bWJvbE5vZGU7XG5leHBvcnRzLmlzQ2hhaW4gPSBpc0NoYWluO1xuZXhwb3J0cy50eXBlT2YgPSB0eXBlT2Y7XG5leHBvcnRzLmlzQXJyYXkgPSB2b2lkIDA7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuLy8gdHlwZSBjaGVja3MgZm9yIGFsbCBrbm93biB0eXBlc1xuLy9cbi8vIG5vdGUgdGhhdDpcbi8vXG4vLyAtIGNoZWNrIGJ5IGR1Y2stdHlwaW5nIG9uIGEgcHJvcGVydHkgbGlrZSBgaXNVbml0YCwgaW5zdGVhZCBvZiBjaGVja2luZyBpbnN0YW5jZW9mLlxuLy8gICBpbnN0YW5jZW9mIGNhbm5vdCBiZSB1c2VkIGJlY2F1c2UgdGhhdCB3b3VsZCBub3QgYWxsb3cgdG8gcGFzcyBkYXRhIGZyb21cbi8vICAgb25lIGluc3RhbmNlIG9mIG1hdGguanMgdG8gYW5vdGhlciBzaW5jZSBlYWNoIGhhcyBpdCdzIG93biBpbnN0YW5jZSBvZiBVbml0LlxuLy8gLSBjaGVjayB0aGUgYGlzVW5pdGAgcHJvcGVydHkgdmlhIHRoZSBjb25zdHJ1Y3Rvciwgc28gdGhlcmUgd2lsbCBiZSBub1xuLy8gICBtYXRjaGVzIGZvciBcImZha2VcIiBpbnN0YW5jZXMgbGlrZSBwbGFpbiBvYmplY3RzIHdpdGggYSBwcm9wZXJ0eSBgaXNVbml0YC5cbi8vICAgVGhhdCBpcyBpbXBvcnRhbnQgZm9yIHNlY3VyaXR5IHJlYXNvbnMuXG4vLyAtIEl0IG11c3Qgbm90IGJlIHBvc3NpYmxlIHRvIG92ZXJyaWRlIHRoZSB0eXBlIGNoZWNrcyB1c2VkIGludGVybmFsbHksXG4vLyAgIGZvciBzZWN1cml0eSByZWFzb25zLCBzbyB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdCBleHBvc2VkIGluIHRoZSBleHByZXNzaW9uXG4vLyAgIHBhcnNlci5cbmZ1bmN0aW9uIGlzTnVtYmVyKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJztcbn1cblxuZnVuY3Rpb24gaXNCaWdOdW1iZXIoeCkge1xuICByZXR1cm4geCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc0JpZ051bWJlciA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNDb21wbGV4KHgpIHtcbiAgcmV0dXJuIHggJiYgX3R5cGVvZih4KSA9PT0gJ29iamVjdCcgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKHgpLmlzQ29tcGxleCA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNGcmFjdGlvbih4KSB7XG4gIHJldHVybiB4ICYmIF90eXBlb2YoeCkgPT09ICdvYmplY3QnICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih4KS5pc0ZyYWN0aW9uID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc1VuaXQoeCkge1xuICByZXR1cm4geCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc1VuaXQgPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU3RyaW5nKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnc3RyaW5nJztcbn1cblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuZXhwb3J0cy5pc0FycmF5ID0gaXNBcnJheTtcblxuZnVuY3Rpb24gaXNNYXRyaXgoeCkge1xuICByZXR1cm4geCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc01hdHJpeCA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cbi8qKlxuICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgYSBjb2xsZWN0aW9uOiBhbiBBcnJheSBvciBNYXRyaXhcbiAqIEBwYXJhbSB7Kn0geFxuICogQHJldHVybnMge2Jvb2xlYW59IGlzQ29sbGVjdGlvblxuICovXG5cblxuZnVuY3Rpb24gaXNDb2xsZWN0aW9uKHgpIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoeCkgfHwgaXNNYXRyaXgoeCk7XG59XG5cbmZ1bmN0aW9uIGlzRGVuc2VNYXRyaXgoeCkge1xuICByZXR1cm4geCAmJiB4LmlzRGVuc2VNYXRyaXggJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNNYXRyaXggPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU3BhcnNlTWF0cml4KHgpIHtcbiAgcmV0dXJuIHggJiYgeC5pc1NwYXJzZU1hdHJpeCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc01hdHJpeCA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNSYW5nZSh4KSB7XG4gIHJldHVybiB4ICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzUmFuZ2UgPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzSW5kZXgoeCkge1xuICByZXR1cm4geCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc0luZGV4ID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0Jvb2xlYW4oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdib29sZWFuJztcbn1cblxuZnVuY3Rpb24gaXNSZXN1bHRTZXQoeCkge1xuICByZXR1cm4geCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc1Jlc3VsdFNldCA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNIZWxwKHgpIHtcbiAgcmV0dXJuIHggJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNIZWxwID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBpc0RhdGUoeCkge1xuICByZXR1cm4geCBpbnN0YW5jZW9mIERhdGU7XG59XG5cbmZ1bmN0aW9uIGlzUmVnRXhwKHgpIHtcbiAgcmV0dXJuIHggaW5zdGFuY2VvZiBSZWdFeHA7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0KHgpIHtcbiAgcmV0dXJuICEhKHggJiYgX3R5cGVvZih4KSA9PT0gJ29iamVjdCcgJiYgeC5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0ICYmICFpc0NvbXBsZXgoeCkgJiYgIWlzRnJhY3Rpb24oeCkpO1xufVxuXG5mdW5jdGlvbiBpc051bGwoeCkge1xuICByZXR1cm4geCA9PT0gbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWQoeCkge1xuICByZXR1cm4geCA9PT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBpc0FjY2Vzc29yTm9kZSh4KSB7XG4gIHJldHVybiB4ICYmIHguaXNBY2Nlc3Nvck5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0FycmF5Tm9kZSh4KSB7XG4gIHJldHVybiB4ICYmIHguaXNBcnJheU5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0Fzc2lnbm1lbnROb2RlKHgpIHtcbiAgcmV0dXJuIHggJiYgeC5pc0Fzc2lnbm1lbnROb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCbG9ja05vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzQmxvY2tOb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNDb25kaXRpb25hbE5vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzQ29uZGl0aW9uYWxOb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNDb25zdGFudE5vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzQ29uc3RhbnROb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlKHgpIHtcbiAgcmV0dXJuIHggJiYgeC5pc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uTm9kZSh4KSB7XG4gIHJldHVybiB4ICYmIHguaXNGdW5jdGlvbk5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0luZGV4Tm9kZSh4KSB7XG4gIHJldHVybiB4ICYmIHguaXNJbmRleE5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc05vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzTm9kZSA9PT0gdHJ1ZSAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc05vZGUgPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzT2JqZWN0Tm9kZSh4KSB7XG4gIHJldHVybiB4ICYmIHguaXNPYmplY3ROb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNPcGVyYXRvck5vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzT3BlcmF0b3JOb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNQYXJlbnRoZXNpc05vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzUGFyZW50aGVzaXNOb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNSYW5nZU5vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzUmFuZ2VOb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNTeW1ib2xOb2RlKHgpIHtcbiAgcmV0dXJuIHggJiYgeC5pc1N5bWJvbE5vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0NoYWluKHgpIHtcbiAgcmV0dXJuIHggJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNDaGFpbiA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdHlwZU9mKHgpIHtcbiAgdmFyIHQgPSBfdHlwZW9mKHgpO1xuXG4gIGlmICh0ID09PSAnb2JqZWN0Jykge1xuICAgIC8vIEphdmFTY3JpcHQgdHlwZXNcbiAgICBpZiAoeCA9PT0gbnVsbCkgcmV0dXJuICdudWxsJztcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh4KSkgcmV0dXJuICdBcnJheSc7XG4gICAgaWYgKHggaW5zdGFuY2VvZiBEYXRlKSByZXR1cm4gJ0RhdGUnO1xuICAgIGlmICh4IGluc3RhbmNlb2YgUmVnRXhwKSByZXR1cm4gJ1JlZ0V4cCc7IC8vIG1hdGguanMgdHlwZXNcblxuICAgIGlmIChpc0JpZ051bWJlcih4KSkgcmV0dXJuICdCaWdOdW1iZXInO1xuICAgIGlmIChpc0NvbXBsZXgoeCkpIHJldHVybiAnQ29tcGxleCc7XG4gICAgaWYgKGlzRnJhY3Rpb24oeCkpIHJldHVybiAnRnJhY3Rpb24nO1xuICAgIGlmIChpc01hdHJpeCh4KSkgcmV0dXJuICdNYXRyaXgnO1xuICAgIGlmIChpc1VuaXQoeCkpIHJldHVybiAnVW5pdCc7XG4gICAgaWYgKGlzSW5kZXgoeCkpIHJldHVybiAnSW5kZXgnO1xuICAgIGlmIChpc1JhbmdlKHgpKSByZXR1cm4gJ1JhbmdlJztcbiAgICBpZiAoaXNSZXN1bHRTZXQoeCkpIHJldHVybiAnUmVzdWx0U2V0JztcbiAgICBpZiAoaXNOb2RlKHgpKSByZXR1cm4geC50eXBlO1xuICAgIGlmIChpc0NoYWluKHgpKSByZXR1cm4gJ0NoYWluJztcbiAgICBpZiAoaXNIZWxwKHgpKSByZXR1cm4gJ0hlbHAnO1xuICAgIHJldHVybiAnT2JqZWN0JztcbiAgfVxuXG4gIGlmICh0ID09PSAnZnVuY3Rpb24nKSByZXR1cm4gJ0Z1bmN0aW9uJztcbiAgcmV0dXJuIHQ7IC8vIGNhbiBiZSAnc3RyaW5nJywgJ251bWJlcicsICdib29sZWFuJywgLi4uXG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmVzY2FwZUxhdGV4ID0gZXNjYXBlTGF0ZXg7XG5leHBvcnRzLnRvU3ltYm9sID0gdG9TeW1ib2w7XG5leHBvcnRzLmRlZmF1bHRUZW1wbGF0ZSA9IGV4cG9ydHMubGF0ZXhGdW5jdGlvbnMgPSBleHBvcnRzLmxhdGV4T3BlcmF0b3JzID0gZXhwb3J0cy5sYXRleFN5bWJvbHMgPSB2b2lkIDA7XG5cbnZhciBfZXNjYXBlTGF0ZXggPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJlc2NhcGUtbGF0ZXhcIikpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuL29iamVjdFwiKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbi8qIGVzbGludCBuby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmc6IFwib2ZmXCIgKi9cbnZhciBsYXRleFN5bWJvbHMgPSB7XG4gIC8vIEdSRUVLIExFVFRFUlNcbiAgQWxwaGE6ICdBJyxcbiAgYWxwaGE6ICdcXFxcYWxwaGEnLFxuICBCZXRhOiAnQicsXG4gIGJldGE6ICdcXFxcYmV0YScsXG4gIEdhbW1hOiAnXFxcXEdhbW1hJyxcbiAgZ2FtbWE6ICdcXFxcZ2FtbWEnLFxuICBEZWx0YTogJ1xcXFxEZWx0YScsXG4gIGRlbHRhOiAnXFxcXGRlbHRhJyxcbiAgRXBzaWxvbjogJ0UnLFxuICBlcHNpbG9uOiAnXFxcXGVwc2lsb24nLFxuICB2YXJlcHNpbG9uOiAnXFxcXHZhcmVwc2lsb24nLFxuICBaZXRhOiAnWicsXG4gIHpldGE6ICdcXFxcemV0YScsXG4gIEV0YTogJ0gnLFxuICBldGE6ICdcXFxcZXRhJyxcbiAgVGhldGE6ICdcXFxcVGhldGEnLFxuICB0aGV0YTogJ1xcXFx0aGV0YScsXG4gIHZhcnRoZXRhOiAnXFxcXHZhcnRoZXRhJyxcbiAgSW90YTogJ0knLFxuICBpb3RhOiAnXFxcXGlvdGEnLFxuICBLYXBwYTogJ0snLFxuICBrYXBwYTogJ1xcXFxrYXBwYScsXG4gIHZhcmthcHBhOiAnXFxcXHZhcmthcHBhJyxcbiAgTGFtYmRhOiAnXFxcXExhbWJkYScsXG4gIGxhbWJkYTogJ1xcXFxsYW1iZGEnLFxuICBNdTogJ00nLFxuICBtdTogJ1xcXFxtdScsXG4gIE51OiAnTicsXG4gIG51OiAnXFxcXG51JyxcbiAgWGk6ICdcXFxcWGknLFxuICB4aTogJ1xcXFx4aScsXG4gIE9taWNyb246ICdPJyxcbiAgb21pY3JvbjogJ28nLFxuICBQaTogJ1xcXFxQaScsXG4gIHBpOiAnXFxcXHBpJyxcbiAgdmFycGk6ICdcXFxcdmFycGknLFxuICBSaG86ICdQJyxcbiAgcmhvOiAnXFxcXHJobycsXG4gIHZhcnJobzogJ1xcXFx2YXJyaG8nLFxuICBTaWdtYTogJ1xcXFxTaWdtYScsXG4gIHNpZ21hOiAnXFxcXHNpZ21hJyxcbiAgdmFyc2lnbWE6ICdcXFxcdmFyc2lnbWEnLFxuICBUYXU6ICdUJyxcbiAgdGF1OiAnXFxcXHRhdScsXG4gIFVwc2lsb246IFwiXFxcXFVwc2lsb25cIixcbiAgdXBzaWxvbjogXCJcXFxcdXBzaWxvblwiLFxuICBQaGk6ICdcXFxcUGhpJyxcbiAgcGhpOiAnXFxcXHBoaScsXG4gIHZhcnBoaTogJ1xcXFx2YXJwaGknLFxuICBDaGk6ICdYJyxcbiAgY2hpOiAnXFxcXGNoaScsXG4gIFBzaTogJ1xcXFxQc2knLFxuICBwc2k6ICdcXFxccHNpJyxcbiAgT21lZ2E6ICdcXFxcT21lZ2EnLFxuICBvbWVnYTogJ1xcXFxvbWVnYScsXG4gIC8vIGxvZ2ljXG4gIFwidHJ1ZVwiOiAnXFxcXG1hdGhybXtUcnVlfScsXG4gIFwiZmFsc2VcIjogJ1xcXFxtYXRocm17RmFsc2V9JyxcbiAgLy8gb3RoZXJcbiAgaTogJ2knLFxuICAvLyBUT0RPIHVzZSBcXGkgPz9cbiAgaW5mOiAnXFxcXGluZnR5JyxcbiAgSW5mOiAnXFxcXGluZnR5JyxcbiAgaW5maW5pdHk6ICdcXFxcaW5mdHknLFxuICBJbmZpbml0eTogJ1xcXFxpbmZ0eScsXG4gIG9vOiAnXFxcXGluZnR5JyxcbiAgbGltOiAnXFxcXGxpbScsXG4gIHVuZGVmaW5lZDogJ1xcXFxtYXRoYmZ7P30nXG59O1xuZXhwb3J0cy5sYXRleFN5bWJvbHMgPSBsYXRleFN5bWJvbHM7XG52YXIgbGF0ZXhPcGVyYXRvcnMgPSB7XG4gIHRyYW5zcG9zZTogJ15cXFxcdG9wJyxcbiAgY3RyYW5zcG9zZTogJ15IJyxcbiAgZmFjdG9yaWFsOiAnIScsXG4gIHBvdzogJ14nLFxuICBkb3RQb3c6ICcuXlxcXFx3ZWRnZScsXG4gIC8vIFRPRE8gZmluZCBpZGVhbCBzb2x1dGlvblxuICB1bmFyeVBsdXM6ICcrJyxcbiAgdW5hcnlNaW51czogJy0nLFxuICBiaXROb3Q6ICdcXFxcficsXG4gIC8vIFRPRE8gZmluZCBpZGVhbCBzb2x1dGlvblxuICBub3Q6ICdcXFxcbmVnJyxcbiAgbXVsdGlwbHk6ICdcXFxcY2RvdCcsXG4gIGRpdmlkZTogJ1xcXFxmcmFjJyxcbiAgLy8gVE9ETyBob3cgdG8gaGFuZGxlIHRoYXQgcHJvcGVybHk/XG4gIGRvdE11bHRpcGx5OiAnLlxcXFxjZG90JyxcbiAgLy8gVE9ETyBmaW5kIGlkZWFsIHNvbHV0aW9uXG4gIGRvdERpdmlkZTogJy46JyxcbiAgLy8gVE9ETyBmaW5kIGlkZWFsIHNvbHV0aW9uXG4gIG1vZDogJ1xcXFxtb2QnLFxuICBhZGQ6ICcrJyxcbiAgc3VidHJhY3Q6ICctJyxcbiAgdG86ICdcXFxccmlnaHRhcnJvdycsXG4gIGxlZnRTaGlmdDogJzw8JyxcbiAgcmlnaHRBcml0aFNoaWZ0OiAnPj4nLFxuICByaWdodExvZ1NoaWZ0OiAnPj4+JyxcbiAgZXF1YWw6ICc9JyxcbiAgdW5lcXVhbDogJ1xcXFxuZXEnLFxuICBzbWFsbGVyOiAnPCcsXG4gIGxhcmdlcjogJz4nLFxuICBzbWFsbGVyRXE6ICdcXFxcbGVxJyxcbiAgbGFyZ2VyRXE6ICdcXFxcZ2VxJyxcbiAgYml0QW5kOiAnXFxcXCYnLFxuICBiaXRYb3I6IFwiXFxcXHVuZGVybGluZXt8fVwiLFxuICBiaXRPcjogJ3wnLFxuICBhbmQ6ICdcXFxcd2VkZ2UnLFxuICB4b3I6ICdcXFxcdmVlYmFyJyxcbiAgb3I6ICdcXFxcdmVlJ1xufTtcbmV4cG9ydHMubGF0ZXhPcGVyYXRvcnMgPSBsYXRleE9wZXJhdG9ycztcbnZhciBsYXRleEZ1bmN0aW9ucyA9IHtcbiAgLy8gYXJpdGhtZXRpY1xuICBhYnM6IHtcbiAgICAxOiAnXFxcXGxlZnR8JHthcmdzWzBdfVxcXFxyaWdodHwnXG4gIH0sXG4gIGFkZDoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5hZGQsIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgY2JydDoge1xuICAgIDE6ICdcXFxcc3FydFszXXske2FyZ3NbMF19fSdcbiAgfSxcbiAgY2VpbDoge1xuICAgIDE6ICdcXFxcbGVmdFxcXFxsY2VpbCR7YXJnc1swXX1cXFxccmlnaHRcXFxccmNlaWwnXG4gIH0sXG4gIGN1YmU6IHtcbiAgICAxOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCleMydcbiAgfSxcbiAgZGl2aWRlOiB7XG4gICAgMjogJ1xcXFxmcmFjeyR7YXJnc1swXX19eyR7YXJnc1sxXX19J1xuICB9LFxuICBkb3REaXZpZGU6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuZG90RGl2aWRlLCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIGRvdE11bHRpcGx5OiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmRvdE11bHRpcGx5LCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIGRvdFBvdzoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5kb3RQb3csIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgZXhwOiB7XG4gICAgMTogJ1xcXFxleHBcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgZXhwbTE6IFwiXFxcXGxlZnQoZVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5wb3csIFwieyR7YXJnc1swXX19LTFcXFxccmlnaHQpXCIpLFxuICBmaXg6IHtcbiAgICAxOiAnXFxcXG1hdGhybXske25hbWV9fVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBmbG9vcjoge1xuICAgIDE6ICdcXFxcbGVmdFxcXFxsZmxvb3Ike2FyZ3NbMF19XFxcXHJpZ2h0XFxcXHJmbG9vcidcbiAgfSxcbiAgZ2NkOiAnXFxcXGdjZFxcXFxsZWZ0KCR7YXJnc31cXFxccmlnaHQpJyxcbiAgaHlwb3Q6ICdcXFxcaHlwb3RcXFxcbGVmdCgke2FyZ3N9XFxcXHJpZ2h0KScsXG4gIGxvZzoge1xuICAgIDE6ICdcXFxcbG5cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KScsXG4gICAgMjogJ1xcXFxsb2dfeyR7YXJnc1sxXX19XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGxvZzEwOiB7XG4gICAgMTogJ1xcXFxsb2dfezEwfVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBsb2cxcDoge1xuICAgIDE6ICdcXFxcbG5cXFxcbGVmdCgke2FyZ3NbMF19KzFcXFxccmlnaHQpJyxcbiAgICAyOiAnXFxcXGxvZ197JHthcmdzWzFdfX1cXFxcbGVmdCgke2FyZ3NbMF19KzFcXFxccmlnaHQpJ1xuICB9LFxuICBsb2cyOiAnXFxcXGxvZ197Mn1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KScsXG4gIG1vZDoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5tb2QsIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgbXVsdGlwbHk6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMubXVsdGlwbHksIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgbm9ybToge1xuICAgIDE6ICdcXFxcbGVmdFxcXFx8JHthcmdzWzBdfVxcXFxyaWdodFxcXFx8JyxcbiAgICAyOiB1bmRlZmluZWQgLy8gdXNlIGRlZmF1bHQgdGVtcGxhdGVcblxuICB9LFxuICBudGhSb290OiB7XG4gICAgMjogJ1xcXFxzcXJ0WyR7YXJnc1sxXX1deyR7YXJnc1swXX19J1xuICB9LFxuICBudGhSb290czoge1xuICAgIDI6ICdcXFxce3kgOiAkeV57YXJnc1sxXX0gPSB7JHthcmdzWzBdfX1cXFxcfSdcbiAgfSxcbiAgcG93OiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5wb3csIFwieyR7YXJnc1sxXX19XCIpXG4gIH0sXG4gIHJvdW5kOiB7XG4gICAgMTogJ1xcXFxsZWZ0XFxcXGxmbG9vciR7YXJnc1swXX1cXFxccmlnaHRcXFxccmNlaWwnLFxuICAgIDI6IHVuZGVmaW5lZCAvLyB1c2UgZGVmYXVsdCB0ZW1wbGF0ZVxuXG4gIH0sXG4gIHNpZ246IHtcbiAgICAxOiAnXFxcXG1hdGhybXske25hbWV9fVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBzcXJ0OiB7XG4gICAgMTogJ1xcXFxzcXJ0eyR7YXJnc1swXX19J1xuICB9LFxuICBzcXVhcmU6IHtcbiAgICAxOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCleMidcbiAgfSxcbiAgc3VidHJhY3Q6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuc3VidHJhY3QsIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgdW5hcnlNaW51czoge1xuICAgIDE6IFwiXCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLnVuYXJ5TWludXMsIFwiXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgdW5hcnlQbHVzOiB7XG4gICAgMTogXCJcIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMudW5hcnlQbHVzLCBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIC8vIGJpdHdpc2VcbiAgYml0QW5kOiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmJpdEFuZCwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICBiaXROb3Q6IHtcbiAgICAxOiBsYXRleE9wZXJhdG9ycy5iaXROb3QgKyAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGJpdE9yOiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmJpdE9yLCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIGJpdFhvcjoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5iaXRYb3IsIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgbGVmdFNoaWZ0OiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmxlZnRTaGlmdCwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICByaWdodEFyaXRoU2hpZnQ6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMucmlnaHRBcml0aFNoaWZ0LCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIHJpZ2h0TG9nU2hpZnQ6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMucmlnaHRMb2dTaGlmdCwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICAvLyBjb21iaW5hdG9yaWNzXG4gIGJlbGxOdW1iZXJzOiB7XG4gICAgMTogJ1xcXFxtYXRocm17Qn1feyR7YXJnc1swXX19J1xuICB9LFxuICBjYXRhbGFuOiB7XG4gICAgMTogJ1xcXFxtYXRocm17Q31feyR7YXJnc1swXX19J1xuICB9LFxuICBzdGlybGluZ1MyOiB7XG4gICAgMjogJ1xcXFxtYXRocm17U31cXFxcbGVmdCgke2FyZ3N9XFxcXHJpZ2h0KSdcbiAgfSxcbiAgLy8gY29tcGxleFxuICBhcmc6IHtcbiAgICAxOiAnXFxcXGFyZ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBjb25qOiB7XG4gICAgMTogJ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpXionXG4gIH0sXG4gIGltOiB7XG4gICAgMTogJ1xcXFxJbVxcXFxsZWZ0XFxcXGxicmFjZSR7YXJnc1swXX1cXFxccmlnaHRcXFxccmJyYWNlJ1xuICB9LFxuICByZToge1xuICAgIDE6ICdcXFxcUmVcXFxcbGVmdFxcXFxsYnJhY2Uke2FyZ3NbMF19XFxcXHJpZ2h0XFxcXHJicmFjZSdcbiAgfSxcbiAgLy8gbG9naWNhbFxuICBhbmQ6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuYW5kLCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIG5vdDoge1xuICAgIDE6IGxhdGV4T3BlcmF0b3JzLm5vdCArICdcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgb3I6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMub3IsIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgeG9yOiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLnhvciwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICAvLyBtYXRyaXhcbiAgY3Jvc3M6IHtcbiAgICAyOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodClcXFxcdGltZXNcXFxcbGVmdCgke2FyZ3NbMV19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgY3RyYW5zcG9zZToge1xuICAgIDE6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodClcIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuY3RyYW5zcG9zZSlcbiAgfSxcbiAgZGV0OiB7XG4gICAgMTogJ1xcXFxkZXRcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgZG90OiB7XG4gICAgMjogJ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxcY2RvdCR7YXJnc1sxXX1cXFxccmlnaHQpJ1xuICB9LFxuICBleHBtOiB7XG4gICAgMTogJ1xcXFxleHBcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgaW52OiB7XG4gICAgMTogJ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpXnstMX0nXG4gIH0sXG4gIHNxcnRtOiB7XG4gICAgMTogXCJ7JHthcmdzWzBdfX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMucG93LCBcIntcXFxcZnJhY3sxfXsyfX1cIilcbiAgfSxcbiAgdHJhY2U6IHtcbiAgICAxOiAnXFxcXG1hdGhybXt0cn1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgdHJhbnNwb3NlOiB7XG4gICAgMTogXCJcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy50cmFuc3Bvc2UpXG4gIH0sXG4gIC8vIHByb2JhYmlsaXR5XG4gIGNvbWJpbmF0aW9uczoge1xuICAgIDI6ICdcXFxcYmlub217JHthcmdzWzBdfX17JHthcmdzWzFdfX0nXG4gIH0sXG4gIGNvbWJpbmF0aW9uc1dpdGhSZXA6IHtcbiAgICAyOiAnXFxcXGxlZnQoXFxcXCFcXFxcIXtcXFxcYmlub217JHthcmdzWzBdfX17JHthcmdzWzFdfX19XFxcXCFcXFxcIVxcXFxyaWdodCknXG4gIH0sXG4gIGZhY3RvcmlhbDoge1xuICAgIDE6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodClcIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuZmFjdG9yaWFsKVxuICB9LFxuICBnYW1tYToge1xuICAgIDE6ICdcXFxcR2FtbWFcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgLy8gcmVsYXRpb25hbFxuICBlcXVhbDoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5lcXVhbCwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICBsYXJnZXI6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMubGFyZ2VyLCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIGxhcmdlckVxOiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmxhcmdlckVxLCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIHNtYWxsZXI6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuc21hbGxlciwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICBzbWFsbGVyRXE6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuc21hbGxlckVxLCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIHVuZXF1YWw6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMudW5lcXVhbCwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICAvLyBzcGVjaWFsXG4gIGVyZjoge1xuICAgIDE6ICdlcmZcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgLy8gc3RhdGlzdGljc1xuICBtYXg6ICdcXFxcbWF4XFxcXGxlZnQoJHthcmdzfVxcXFxyaWdodCknLFxuICBtaW46ICdcXFxcbWluXFxcXGxlZnQoJHthcmdzfVxcXFxyaWdodCknLFxuICB2YXJpYW5jZTogJ1xcXFxtYXRocm17VmFyfVxcXFxsZWZ0KCR7YXJnc31cXFxccmlnaHQpJyxcbiAgLy8gdHJpZ29ub21ldHJ5XG4gIGFjb3M6IHtcbiAgICAxOiAnXFxcXGNvc157LTF9XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGFjb3NoOiB7XG4gICAgMTogJ1xcXFxjb3NoXnstMX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYWNvdDoge1xuICAgIDE6ICdcXFxcY290XnstMX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYWNvdGg6IHtcbiAgICAxOiAnXFxcXGNvdGheey0xfVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBhY3NjOiB7XG4gICAgMTogJ1xcXFxjc2Neey0xfVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBhY3NjaDoge1xuICAgIDE6ICdcXFxcbWF0aHJte2NzY2h9XnstMX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYXNlYzoge1xuICAgIDE6ICdcXFxcc2VjXnstMX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYXNlY2g6IHtcbiAgICAxOiAnXFxcXG1hdGhybXtzZWNofV57LTF9XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGFzaW46IHtcbiAgICAxOiAnXFxcXHNpbl57LTF9XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGFzaW5oOiB7XG4gICAgMTogJ1xcXFxzaW5oXnstMX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYXRhbjoge1xuICAgIDE6ICdcXFxcdGFuXnstMX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYXRhbjI6IHtcbiAgICAyOiAnXFxcXG1hdGhybXthdGFuMn1cXFxcbGVmdCgke2FyZ3N9XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYXRhbmg6IHtcbiAgICAxOiAnXFxcXHRhbmheey0xfVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBjb3M6IHtcbiAgICAxOiAnXFxcXGNvc1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBjb3NoOiB7XG4gICAgMTogJ1xcXFxjb3NoXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGNvdDoge1xuICAgIDE6ICdcXFxcY290XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGNvdGg6IHtcbiAgICAxOiAnXFxcXGNvdGhcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgY3NjOiB7XG4gICAgMTogJ1xcXFxjc2NcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgY3NjaDoge1xuICAgIDE6ICdcXFxcbWF0aHJte2NzY2h9XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIHNlYzoge1xuICAgIDE6ICdcXFxcc2VjXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIHNlY2g6IHtcbiAgICAxOiAnXFxcXG1hdGhybXtzZWNofVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBzaW46IHtcbiAgICAxOiAnXFxcXHNpblxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBzaW5oOiB7XG4gICAgMTogJ1xcXFxzaW5oXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIHRhbjoge1xuICAgIDE6ICdcXFxcdGFuXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIHRhbmg6IHtcbiAgICAxOiAnXFxcXHRhbmhcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgLy8gdW5pdFxuICB0bzoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy50bywgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICAvLyB1dGlsc1xuICBudW1lcmljOiBmdW5jdGlvbiBudW1lcmljKG5vZGUsIG9wdGlvbnMpIHtcbiAgICAvLyBOb3Qgc3VyZSBpZiB0aGlzIGlzIHN0cmljdGx5IHJpZ2h0IGJ1dCBzaG91bGQgd29yayBjb3JyZWN0bHkgZm9yIHRoZSB2YXN0IG1ham9yaXR5IG9mIHVzZSBjYXNlcy5cbiAgICByZXR1cm4gbm9kZS5hcmdzWzBdLnRvVGV4KCk7XG4gIH0sXG4gIC8vIHR5cGVcbiAgbnVtYmVyOiB7XG4gICAgMDogJzAnLFxuICAgIDE6ICdcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KScsXG4gICAgMjogJ1xcXFxsZWZ0KFxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJHthcmdzWzFdfVxcXFxyaWdodCknXG4gIH0sXG4gIHN0cmluZzoge1xuICAgIDA6ICdcXFxcbWF0aHR0e1wiXCJ9JyxcbiAgICAxOiAnXFxcXG1hdGhybXtzdHJpbmd9XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGJpZ251bWJlcjoge1xuICAgIDA6ICcwJyxcbiAgICAxOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGNvbXBsZXg6IHtcbiAgICAwOiAnMCcsXG4gICAgMTogJ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJyxcbiAgICAyOiBcIlxcXFxsZWZ0KFxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpK1wiLmNvbmNhdChsYXRleFN5bWJvbHMuaSwgXCJcXFxcY2RvdFxcXFxsZWZ0KCR7YXJnc1sxXX1cXFxccmlnaHQpXFxcXHJpZ2h0KVwiKVxuICB9LFxuICBtYXRyaXg6IHtcbiAgICAwOiAnXFxcXGJlZ2lue2JtYXRyaXh9XFxcXGVuZHtibWF0cml4fScsXG4gICAgMTogJ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJyxcbiAgICAyOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIHNwYXJzZToge1xuICAgIDA6ICdcXFxcYmVnaW57YnNwYXJzZX1cXFxcZW5ke2JzcGFyc2V9JyxcbiAgICAxOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIHVuaXQ6IHtcbiAgICAxOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknLFxuICAgIDI6ICdcXFxcbGVmdChcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSR7YXJnc1sxXX1cXFxccmlnaHQpJ1xuICB9XG59O1xuZXhwb3J0cy5sYXRleEZ1bmN0aW9ucyA9IGxhdGV4RnVuY3Rpb25zO1xudmFyIGRlZmF1bHRUZW1wbGF0ZSA9ICdcXFxcbWF0aHJteyR7bmFtZX19XFxcXGxlZnQoJHthcmdzfVxcXFxyaWdodCknO1xuZXhwb3J0cy5kZWZhdWx0VGVtcGxhdGUgPSBkZWZhdWx0VGVtcGxhdGU7XG52YXIgbGF0ZXhVbml0cyA9IHtcbiAgZGVnOiAnXlxcXFxjaXJjJ1xufTtcblxuZnVuY3Rpb24gZXNjYXBlTGF0ZXgoc3RyaW5nKSB7XG4gIHJldHVybiAoMCwgX2VzY2FwZUxhdGV4W1wiZGVmYXVsdFwiXSkoc3RyaW5nLCB7XG4gICAgcHJlc2VydmVGb3JtYXR0aW5nOiB0cnVlXG4gIH0pO1xufSAvLyBAcGFyYW0ge3N0cmluZ30gbmFtZVxuLy8gQHBhcmFtIHtib29sZWFufSBpc1VuaXRcblxuXG5mdW5jdGlvbiB0b1N5bWJvbChuYW1lLCBpc1VuaXQpIHtcbiAgaXNVbml0ID0gdHlwZW9mIGlzVW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBmYWxzZSA6IGlzVW5pdDtcblxuICBpZiAoaXNVbml0KSB7XG4gICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShsYXRleFVuaXRzLCBuYW1lKSkge1xuICAgICAgcmV0dXJuIGxhdGV4VW5pdHNbbmFtZV07XG4gICAgfVxuXG4gICAgcmV0dXJuICdcXFxcbWF0aHJteycgKyBlc2NhcGVMYXRleChuYW1lKSArICd9JztcbiAgfVxuXG4gIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkobGF0ZXhTeW1ib2xzLCBuYW1lKSkge1xuICAgIHJldHVybiBsYXRleFN5bWJvbHNbbmFtZV07XG4gIH1cblxuICByZXR1cm4gZXNjYXBlTGF0ZXgobmFtZSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLndhcm5PbmNlID0gdm9pZCAwO1xuXG4vKipcbiAqIExvZyBhIGNvbnNvbGUud2FybiBtZXNzYWdlIG9ubHkgb25jZVxuICovXG52YXIgd2Fybk9uY2UgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBtZXNzYWdlcyA9IHt9O1xuICByZXR1cm4gZnVuY3Rpb24gd2Fybk9uY2UoKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHZhciBtZXNzYWdlID0gYXJncy5qb2luKCcsICcpO1xuXG4gICAgaWYgKCFtZXNzYWdlc1ttZXNzYWdlXSkge1xuICAgICAgdmFyIF9jb25zb2xlO1xuXG4gICAgICBtZXNzYWdlc1ttZXNzYWdlXSA9IHRydWU7XG5cbiAgICAgIChfY29uc29sZSA9IGNvbnNvbGUpLndhcm4uYXBwbHkoX2NvbnNvbGUsIFsnV2FybmluZzonXS5jb25jYXQoYXJncykpO1xuICAgIH1cbiAgfTtcbn0oKTtcblxuZXhwb3J0cy53YXJuT25jZSA9IHdhcm5PbmNlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ub0JpZ251bWJlciA9IG5vQmlnbnVtYmVyO1xuZXhwb3J0cy5ub0ZyYWN0aW9uID0gbm9GcmFjdGlvbjtcbmV4cG9ydHMubm9NYXRyaXggPSBub01hdHJpeDtcbmV4cG9ydHMubm9JbmRleCA9IG5vSW5kZXg7XG5leHBvcnRzLm5vU3Vic2V0ID0gbm9TdWJzZXQ7XG5cbmZ1bmN0aW9uIG5vQmlnbnVtYmVyKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ05vIFwiYmlnbnVtYmVyXCIgaW1wbGVtZW50YXRpb24gYXZhaWxhYmxlJyk7XG59XG5cbmZ1bmN0aW9uIG5vRnJhY3Rpb24oKSB7XG4gIHRocm93IG5ldyBFcnJvcignTm8gXCJmcmFjdGlvblwiIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZScpO1xufVxuXG5mdW5jdGlvbiBub01hdHJpeCgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdObyBcIm1hdHJpeFwiIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZScpO1xufVxuXG5mdW5jdGlvbiBub0luZGV4KCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ05vIFwiaW5kZXhcIiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUnKTtcbn1cblxuZnVuY3Rpb24gbm9TdWJzZXQoKSB7XG4gIHRocm93IG5ldyBFcnJvcignTm8gXCJtYXRyaXhcIiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUnKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNJbnRlZ2VyID0gaXNJbnRlZ2VyO1xuZXhwb3J0cy5mb3JtYXQgPSBmb3JtYXQ7XG5leHBvcnRzLnNwbGl0TnVtYmVyID0gc3BsaXROdW1iZXI7XG5leHBvcnRzLnRvRW5naW5lZXJpbmcgPSB0b0VuZ2luZWVyaW5nO1xuZXhwb3J0cy50b0ZpeGVkID0gdG9GaXhlZDtcbmV4cG9ydHMudG9FeHBvbmVudGlhbCA9IHRvRXhwb25lbnRpYWw7XG5leHBvcnRzLnRvUHJlY2lzaW9uID0gdG9QcmVjaXNpb247XG5leHBvcnRzLnJvdW5kRGlnaXRzID0gcm91bmREaWdpdHM7XG5leHBvcnRzLmRpZ2l0cyA9IGRpZ2l0cztcbmV4cG9ydHMubmVhcmx5RXF1YWwgPSBuZWFybHlFcXVhbDtcbmV4cG9ydHMudGFuaCA9IGV4cG9ydHMuc2luaCA9IGV4cG9ydHMuY29zaCA9IGV4cG9ydHMuYXRhbmggPSBleHBvcnRzLmFzaW5oID0gZXhwb3J0cy5hY29zaCA9IGV4cG9ydHMuREJMX0VQU0lMT04gPSBleHBvcnRzLmV4cG0xID0gZXhwb3J0cy5jYnJ0ID0gZXhwb3J0cy5sb2cxcCA9IGV4cG9ydHMubG9nMTAgPSBleHBvcnRzLmxvZzIgPSBleHBvcnRzLnNpZ24gPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4vb2JqZWN0XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4vaXNcIik7XG5cbi8qKlxuICogQHR5cGVkZWYge3tzaWduOiAnKycgfCAnLScgfCAnJywgY29lZmZpY2llbnRzOiBudW1iZXJbXSwgZXhwb25lbnQ6IG51bWJlcn19IFNwbGl0VmFsdWVcbiAqL1xuXG4vKipcbiAqIENoZWNrIGlmIGEgbnVtYmVyIGlzIGludGVnZXJcbiAqIEBwYXJhbSB7bnVtYmVyIHwgYm9vbGVhbn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59IGlzSW50ZWdlclxuICovXG5mdW5jdGlvbiBpc0ludGVnZXIodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gaXNGaW5pdGUodmFsdWUpID8gdmFsdWUgPT09IE1hdGgucm91bmQodmFsdWUpIDogZmFsc2U7IC8vIE5vdGU6IHdlIHVzZSA9PSwgbm90ID09PSwgYXMgd2UgY2FuIGhhdmUgQm9vbGVhbnMgYXMgd2VsbFxufVxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHNpZ24gb2YgYSBudW1iZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5cblxudmFyIHNpZ24gPSAvKiAjX19QVVJFX18gKi9NYXRoLnNpZ24gfHwgZnVuY3Rpb24gKHgpIHtcbiAgaWYgKHggPiAwKSB7XG4gICAgcmV0dXJuIDE7XG4gIH0gZWxzZSBpZiAoeCA8IDApIHtcbiAgICByZXR1cm4gLTE7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn07XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgYmFzZS0yIGxvZ2FyaXRobSBvZiBhIG51bWJlclxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblxuXG5leHBvcnRzLnNpZ24gPSBzaWduO1xuXG52YXIgbG9nMiA9IC8qICNfX1BVUkVfXyAqL01hdGgubG9nMiB8fCBmdW5jdGlvbiBsb2cyKHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nKHgpIC8gTWF0aC5MTjI7XG59O1xuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIGJhc2UtMTAgbG9nYXJpdGhtIG9mIGEgbnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuXG5cbmV4cG9ydHMubG9nMiA9IGxvZzI7XG5cbnZhciBsb2cxMCA9IC8qICNfX1BVUkVfXyAqL01hdGgubG9nMTAgfHwgZnVuY3Rpb24gbG9nMTAoeCkge1xuICByZXR1cm4gTWF0aC5sb2coeCkgLyBNYXRoLkxOMTA7XG59O1xuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIGEgbnVtYmVyICsgMVxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblxuXG5leHBvcnRzLmxvZzEwID0gbG9nMTA7XG5cbnZhciBsb2cxcCA9IC8qICNfX1BVUkVfXyAqL01hdGgubG9nMXAgfHwgZnVuY3Rpb24gKHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nKHggKyAxKTtcbn07XG4vKipcbiAqIENhbGN1bGF0ZSBjdWJpYyByb290IGZvciBhIG51bWJlclxuICpcbiAqIENvZGUgZnJvbSBlczYtc2hpbS5qczpcbiAqICAgaHR0cHM6Ly9naXRodWIuY29tL3BhdWxtaWxsci9lczYtc2hpbS9ibG9iL21hc3Rlci9lczYtc2hpbS5qcyNMMTU2NC1MMTU3N1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjdWJpYyByb290IG9mIHhcbiAqL1xuXG5cbmV4cG9ydHMubG9nMXAgPSBsb2cxcDtcblxudmFyIGNicnQgPSAvKiAjX19QVVJFX18gKi9NYXRoLmNicnQgfHwgZnVuY3Rpb24gY2JydCh4KSB7XG4gIGlmICh4ID09PSAwKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cblxuICB2YXIgbmVnYXRlID0geCA8IDA7XG4gIHZhciByZXN1bHQ7XG5cbiAgaWYgKG5lZ2F0ZSkge1xuICAgIHggPSAteDtcbiAgfVxuXG4gIGlmIChpc0Zpbml0ZSh4KSkge1xuICAgIHJlc3VsdCA9IE1hdGguZXhwKE1hdGgubG9nKHgpIC8gMyk7IC8vIGZyb20gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ3ViZV9yb290I051bWVyaWNhbF9tZXRob2RzXG5cbiAgICByZXN1bHQgPSAoeCAvIChyZXN1bHQgKiByZXN1bHQpICsgMiAqIHJlc3VsdCkgLyAzO1xuICB9IGVsc2Uge1xuICAgIHJlc3VsdCA9IHg7XG4gIH1cblxuICByZXR1cm4gbmVnYXRlID8gLXJlc3VsdCA6IHJlc3VsdDtcbn07XG4vKipcbiAqIENhbGN1bGF0ZXMgZXhwb25lbnRpYXRpb24gbWludXMgMVxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEByZXR1cm4ge251bWJlcn0gcmVzXG4gKi9cblxuXG5leHBvcnRzLmNicnQgPSBjYnJ0O1xuXG52YXIgZXhwbTEgPSAvKiAjX19QVVJFX18gKi9NYXRoLmV4cG0xIHx8IGZ1bmN0aW9uIGV4cG0xKHgpIHtcbiAgcmV0dXJuIHggPj0gMmUtNCB8fCB4IDw9IC0yZS00ID8gTWF0aC5leHAoeCkgLSAxIDogeCArIHggKiB4IC8gMiArIHggKiB4ICogeCAvIDY7XG59O1xuLyoqXG4gKiBDb252ZXJ0IGEgbnVtYmVyIHRvIGEgZm9ybWF0dGVkIHN0cmluZyByZXByZXNlbnRhdGlvbi5cbiAqXG4gKiBTeW50YXg6XG4gKlxuICogICAgZm9ybWF0KHZhbHVlKVxuICogICAgZm9ybWF0KHZhbHVlLCBvcHRpb25zKVxuICogICAgZm9ybWF0KHZhbHVlLCBwcmVjaXNpb24pXG4gKiAgICBmb3JtYXQodmFsdWUsIGZuKVxuICpcbiAqIFdoZXJlOlxuICpcbiAqICAgIHtudW1iZXJ9IHZhbHVlICAgVGhlIHZhbHVlIHRvIGJlIGZvcm1hdHRlZFxuICogICAge09iamVjdH0gb3B0aW9ucyBBbiBvYmplY3Qgd2l0aCBmb3JtYXR0aW5nIG9wdGlvbnMuIEF2YWlsYWJsZSBvcHRpb25zOlxuICogICAgICAgICAgICAgICAgICAgICB7c3RyaW5nfSBub3RhdGlvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG5vdGF0aW9uLiBDaG9vc2UgZnJvbTpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICdmaXhlZCcgICAgICAgICAgQWx3YXlzIHVzZSByZWd1bGFyIG51bWJlciBub3RhdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgJzEyMy40MCcgYW5kICcxNDAwMDAwMCdcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICdleHBvbmVudGlhbCcgICAgQWx3YXlzIHVzZSBleHBvbmVudGlhbCBub3RhdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgJzEuMjM0ZSsyJyBhbmQgJzEuNGUrNydcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICdlbmdpbmVlcmluZycgICAgQWx3YXlzIHVzZSBlbmdpbmVlcmluZyBub3RhdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgJzEyMy40ZSswJyBhbmQgJzE0LjBlKzYnXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAnYXV0bycgKGRlZmF1bHQpIFJlZ3VsYXIgbnVtYmVyIG5vdGF0aW9uIGZvciBudW1iZXJzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhdmluZyBhbiBhYnNvbHV0ZSB2YWx1ZSBiZXR3ZWVuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBsb3dlckV4cGAgYW5kIGB1cHBlckV4cGAgYm91bmRzLCBhbmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcyBleHBvbmVudGlhbCBub3RhdGlvbiBlbHNld2hlcmUuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvd2VyIGJvdW5kIGlzIGluY2x1ZGVkLCB1cHBlciBib3VuZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBleGNsdWRlZC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGV4YW1wbGUgJzEyMy40JyBhbmQgJzEuNGU3Jy5cbiAqICAgICAgICAgICAgICAgICAgICAge251bWJlcn0gcHJlY2lzaW9uICAgQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxNiB0byByb3VuZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZGlnaXRzIG9mIHRoZSBudW1iZXIuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIGNhc2Ugb2Ygbm90YXRpb25zICdleHBvbmVudGlhbCcsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlbmdpbmVlcmluZycsIGFuZCAnYXV0bycsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBwcmVjaXNpb25gIGRlZmluZXMgdGhlIHRvdGFsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgcmV0dXJuZWQuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluIGNhc2Ugb2Ygbm90YXRpb24gJ2ZpeGVkJyxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHByZWNpc2lvbmAgZGVmaW5lcyB0aGUgbnVtYmVyIG9mXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25pZmljYW50IGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2ludC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHByZWNpc2lvbmAgaXMgdW5kZWZpbmVkIGJ5IGRlZmF1bHQsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCByb3VuZGluZyBhbnkgZGlnaXRzLlxuICogICAgICAgICAgICAgICAgICAgICB7bnVtYmVyfSBsb3dlckV4cCAgICBFeHBvbmVudCBkZXRlcm1pbmluZyB0aGUgbG93ZXIgYm91bmRhcnlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZvcm1hdHRpbmcgYSB2YWx1ZSB3aXRoIGFuIGV4cG9uZW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYG5vdGF0aW9uPSdhdXRvYC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCB2YWx1ZSBpcyBgLTNgLlxuICogICAgICAgICAgICAgICAgICAgICB7bnVtYmVyfSB1cHBlckV4cCAgICBFeHBvbmVudCBkZXRlcm1pbmluZyB0aGUgdXBwZXIgYm91bmRhcnlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZvcm1hdHRpbmcgYSB2YWx1ZSB3aXRoIGFuIGV4cG9uZW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYG5vdGF0aW9uPSdhdXRvYC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCB2YWx1ZSBpcyBgNWAuXG4gKiAgICB7RnVuY3Rpb259IGZuICAgIEEgY3VzdG9tIGZvcm1hdHRpbmcgZnVuY3Rpb24uIENhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZVxuICogICAgICAgICAgICAgICAgICAgICBidWlsdC1pbiBub3RhdGlvbnMuIEZ1bmN0aW9uIGBmbmAgaXMgY2FsbGVkIHdpdGggYHZhbHVlYCBhc1xuICogICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgYW5kIG11c3QgcmV0dXJuIGEgc3RyaW5nLiBJcyB1c2VmdWwgZm9yIGV4YW1wbGUgdG9cbiAqICAgICAgICAgICAgICAgICAgICAgZm9ybWF0IGFsbCB2YWx1ZXMgaW5zaWRlIGEgbWF0cml4IGluIGEgcGFydGljdWxhciB3YXkuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgZm9ybWF0KDYuNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzYuNCdcbiAqICAgIGZvcm1hdCgxMjQwMDAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICcxLjI0ZTYnXG4gKiAgICBmb3JtYXQoMS8zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnMC4zMzMzMzMzMzMzMzMzMzMzJ1xuICogICAgZm9ybWF0KDEvMywgMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzAuMzMzJ1xuICogICAgZm9ybWF0KDIxMzg1LCAyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzIxMDAwJ1xuICogICAgZm9ybWF0KDEyLjA3MSwge25vdGF0aW9uOiAnZml4ZWQnfSkgICAgICAgICAgICAgICAgLy8gJzEyJ1xuICogICAgZm9ybWF0KDIuMywgICAge25vdGF0aW9uOiAnZml4ZWQnLCBwcmVjaXNpb246IDJ9KSAgLy8gJzIuMzAnXG4gKiAgICBmb3JtYXQoNTIuOCwgICB7bm90YXRpb246ICdleHBvbmVudGlhbCd9KSAgICAgICAgICAvLyAnNS4yOGUrMSdcbiAqICAgIGZvcm1hdCgxMjM0NTY3OCwge25vdGF0aW9uOiAnZW5naW5lZXJpbmcnfSkgICAgICAgIC8vICcxMi4zNDU2NzhlKzYnXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge09iamVjdCB8IEZ1bmN0aW9uIHwgbnVtYmVyfSBbb3B0aW9uc11cbiAqIEByZXR1cm4ge3N0cmluZ30gc3RyIFRoZSBmb3JtYXR0ZWQgdmFsdWVcbiAqL1xuXG5cbmV4cG9ydHMuZXhwbTEgPSBleHBtMTtcblxuZnVuY3Rpb24gZm9ybWF0KHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIGhhbmRsZSBmb3JtYXQodmFsdWUsIGZuKVxuICAgIHJldHVybiBvcHRpb25zKHZhbHVlKTtcbiAgfSAvLyBoYW5kbGUgc3BlY2lhbCBjYXNlc1xuXG5cbiAgaWYgKHZhbHVlID09PSBJbmZpbml0eSkge1xuICAgIHJldHVybiAnSW5maW5pdHknO1xuICB9IGVsc2UgaWYgKHZhbHVlID09PSAtSW5maW5pdHkpIHtcbiAgICByZXR1cm4gJy1JbmZpbml0eSc7XG4gIH0gZWxzZSBpZiAoaXNOYU4odmFsdWUpKSB7XG4gICAgcmV0dXJuICdOYU4nO1xuICB9IC8vIGRlZmF1bHQgdmFsdWVzIGZvciBvcHRpb25zXG5cblxuICB2YXIgbm90YXRpb24gPSAnYXV0byc7XG4gIHZhciBwcmVjaXNpb247XG5cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICAvLyBkZXRlcm1pbmUgbm90YXRpb24gZnJvbSBvcHRpb25zXG4gICAgaWYgKG9wdGlvbnMubm90YXRpb24pIHtcbiAgICAgIG5vdGF0aW9uID0gb3B0aW9ucy5ub3RhdGlvbjtcbiAgICB9IC8vIGRldGVybWluZSBwcmVjaXNpb24gZnJvbSBvcHRpb25zXG5cblxuICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShvcHRpb25zKSkge1xuICAgICAgcHJlY2lzaW9uID0gb3B0aW9ucztcbiAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKG9wdGlvbnMucHJlY2lzaW9uKSkge1xuICAgICAgcHJlY2lzaW9uID0gb3B0aW9ucy5wcmVjaXNpb247XG4gICAgfVxuICB9IC8vIGhhbmRsZSB0aGUgdmFyaW91cyBub3RhdGlvbnNcblxuXG4gIHN3aXRjaCAobm90YXRpb24pIHtcbiAgICBjYXNlICdmaXhlZCc6XG4gICAgICByZXR1cm4gdG9GaXhlZCh2YWx1ZSwgcHJlY2lzaW9uKTtcblxuICAgIGNhc2UgJ2V4cG9uZW50aWFsJzpcbiAgICAgIHJldHVybiB0b0V4cG9uZW50aWFsKHZhbHVlLCBwcmVjaXNpb24pO1xuXG4gICAgY2FzZSAnZW5naW5lZXJpbmcnOlxuICAgICAgcmV0dXJuIHRvRW5naW5lZXJpbmcodmFsdWUsIHByZWNpc2lvbik7XG5cbiAgICBjYXNlICdhdXRvJzpcbiAgICAgIC8vIFRPRE86IGNsZWFuIHVwIHNvbWUgZGF5LiBEZXByZWNhdGVkIHNpbmNlOiAyMDE4LTAxLTI0XG4gICAgICAvLyBAZGVwcmVjYXRlZCB1cHBlciBhbmQgbG93ZXIgYXJlIHJlcGxhY2VkIHdpdGggdXBwZXJFeHAgYW5kIGxvd2VyRXhwIHNpbmNlIHY0LjAuMFxuICAgICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5leHBvbmVudGlhbCAmJiAob3B0aW9ucy5leHBvbmVudGlhbC5sb3dlciAhPT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMuZXhwb25lbnRpYWwudXBwZXIgIT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgdmFyIGZpeGVkT3B0aW9ucyA9ICgwLCBfb2JqZWN0Lm1hcE9iamVjdCkob3B0aW9ucywgZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgfSk7XG4gICAgICAgIGZpeGVkT3B0aW9ucy5leHBvbmVudGlhbCA9IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAob3B0aW9ucy5leHBvbmVudGlhbC5sb3dlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZml4ZWRPcHRpb25zLmxvd2VyRXhwID0gTWF0aC5yb3VuZChNYXRoLmxvZyhvcHRpb25zLmV4cG9uZW50aWFsLmxvd2VyKSAvIE1hdGguTE4xMCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAob3B0aW9ucy5leHBvbmVudGlhbC51cHBlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZml4ZWRPcHRpb25zLnVwcGVyRXhwID0gTWF0aC5yb3VuZChNYXRoLmxvZyhvcHRpb25zLmV4cG9uZW50aWFsLnVwcGVyKSAvIE1hdGguTE4xMCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zb2xlLndhcm4oJ0RlcHJlY2F0aW9uIHdhcm5pbmc6IEZvcm1hdHRpbmcgb3B0aW9ucyBleHBvbmVudGlhbC5sb3dlciBhbmQgZXhwb25lbnRpYWwudXBwZXIgJyArICcobWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZSkgJyArICdhcmUgcmVwbGFjZWQgd2l0aCBleHBvbmVudGlhbC5sb3dlckV4cCBhbmQgZXhwb25lbnRpYWwudXBwZXJFeHAgJyArICcobWluaW11bSBhbmQgbWF4aW11bSBleHBvbmVudCkgc2luY2UgdmVyc2lvbiA0LjAuMC4gJyArICdSZXBsYWNlICcgKyBKU09OLnN0cmluZ2lmeShvcHRpb25zKSArICcgd2l0aCAnICsgSlNPTi5zdHJpbmdpZnkoZml4ZWRPcHRpb25zKSk7XG4gICAgICAgIHJldHVybiB0b1ByZWNpc2lvbih2YWx1ZSwgcHJlY2lzaW9uLCBmaXhlZE9wdGlvbnMpO1xuICAgICAgfSAvLyByZW1vdmUgdHJhaWxpbmcgemVyb3MgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnRcblxuXG4gICAgICByZXR1cm4gdG9QcmVjaXNpb24odmFsdWUsIHByZWNpc2lvbiwgb3B0aW9ucyAmJiBvcHRpb25zKS5yZXBsYWNlKC8oKFxcLlxcZCo/KSgwKykpKCR8ZSkvLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkaWdpdHMgPSBhcmd1bWVudHNbMl07XG4gICAgICAgIHZhciBlID0gYXJndW1lbnRzWzRdO1xuICAgICAgICByZXR1cm4gZGlnaXRzICE9PSAnLicgPyBkaWdpdHMgKyBlIDogZTtcbiAgICAgIH0pO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBub3RhdGlvbiBcIicgKyBub3RhdGlvbiArICdcIi4gJyArICdDaG9vc2UgXCJhdXRvXCIsIFwiZXhwb25lbnRpYWxcIiwgb3IgXCJmaXhlZFwiLicpO1xuICB9XG59XG4vKipcbiAqIFNwbGl0IGEgbnVtYmVyIGludG8gc2lnbiwgY29lZmZpY2llbnRzLCBhbmQgZXhwb25lbnRcbiAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7U3BsaXRWYWx1ZX1cbiAqICAgICAgICAgICAgICBSZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHNpZ24sIGNvZWZmaWNpZW50cywgYW5kIGV4cG9uZW50XG4gKi9cblxuXG5mdW5jdGlvbiBzcGxpdE51bWJlcih2YWx1ZSkge1xuICAvLyBwYXJzZSB0aGUgaW5wdXQgdmFsdWVcbiAgdmFyIG1hdGNoID0gU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpLm1hdGNoKC9eMCo/KC0/KShcXGQrXFwuP1xcZCopKGUoWystXT9cXGQrKSk/JC8pO1xuXG4gIGlmICghbWF0Y2gpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0ludmFsaWQgbnVtYmVyICcgKyB2YWx1ZSk7XG4gIH1cblxuICB2YXIgc2lnbiA9IG1hdGNoWzFdO1xuICB2YXIgZGlnaXRzID0gbWF0Y2hbMl07XG4gIHZhciBleHBvbmVudCA9IHBhcnNlRmxvYXQobWF0Y2hbNF0gfHwgJzAnKTtcbiAgdmFyIGRvdCA9IGRpZ2l0cy5pbmRleE9mKCcuJyk7XG4gIGV4cG9uZW50ICs9IGRvdCAhPT0gLTEgPyBkb3QgLSAxIDogZGlnaXRzLmxlbmd0aCAtIDE7XG4gIHZhciBjb2VmZmljaWVudHMgPSBkaWdpdHMucmVwbGFjZSgnLicsICcnKSAvLyByZW1vdmUgdGhlIGRvdCAobXVzdCBiZSByZW1vdmVkIGJlZm9yZSByZW1vdmluZyBsZWFkaW5nIHplcm9zKVxuICAucmVwbGFjZSgvXjAqLywgZnVuY3Rpb24gKHplcm9zKSB7XG4gICAgLy8gcmVtb3ZlIGxlYWRpbmcgemVyb3MsIGFkZCB0aGVpciBjb3VudCB0byB0aGUgZXhwb25lbnRcbiAgICBleHBvbmVudCAtPSB6ZXJvcy5sZW5ndGg7XG4gICAgcmV0dXJuICcnO1xuICB9KS5yZXBsYWNlKC8wKiQvLCAnJykgLy8gcmVtb3ZlIHRyYWlsaW5nIHplcm9zXG4gIC5zcGxpdCgnJykubWFwKGZ1bmN0aW9uIChkKSB7XG4gICAgcmV0dXJuIHBhcnNlSW50KGQpO1xuICB9KTtcblxuICBpZiAoY29lZmZpY2llbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvZWZmaWNpZW50cy5wdXNoKDApO1xuICAgIGV4cG9uZW50Kys7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNpZ246IHNpZ24sXG4gICAgY29lZmZpY2llbnRzOiBjb2VmZmljaWVudHMsXG4gICAgZXhwb25lbnQ6IGV4cG9uZW50XG4gIH07XG59XG4vKipcbiAqIEZvcm1hdCBhIG51bWJlciBpbiBlbmdpbmVlcmluZyBub3RhdGlvbi4gTGlrZSAnMS4yM2UrNicsICcyLjNlKzAnLCAnMy41MDBlLTMnXG4gKiBAcGFyYW0ge251bWJlciB8IHN0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uXSAgICAgICAgT3B0aW9uYWwgbnVtYmVyIG9mIHNpZ25pZmljYW50IGZpZ3VyZXMgdG8gcmV0dXJuLlxuICovXG5cblxuZnVuY3Rpb24gdG9FbmdpbmVlcmluZyh2YWx1ZSwgcHJlY2lzaW9uKSB7XG4gIGlmIChpc05hTih2YWx1ZSkgfHwgIWlzRmluaXRlKHZhbHVlKSkge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG5cbiAgdmFyIHNwbGl0ID0gc3BsaXROdW1iZXIodmFsdWUpO1xuICB2YXIgcm91bmRlZCA9IHJvdW5kRGlnaXRzKHNwbGl0LCBwcmVjaXNpb24pO1xuICB2YXIgZSA9IHJvdW5kZWQuZXhwb25lbnQ7XG4gIHZhciBjID0gcm91bmRlZC5jb2VmZmljaWVudHM7IC8vIGZpbmQgbmVhcmVzdCBsb3dlciBtdWx0aXBsZSBvZiAzIGZvciBleHBvbmVudFxuXG4gIHZhciBuZXdFeHAgPSBlICUgMyA9PT0gMCA/IGUgOiBlIDwgMCA/IGUgLSAzIC0gZSAlIDMgOiBlIC0gZSAlIDM7XG5cbiAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKHByZWNpc2lvbikpIHtcbiAgICAvLyBhZGQgemVyb2VzIHRvIGdpdmUgY29ycmVjdCBzaWcgZmlnc1xuICAgIHdoaWxlIChwcmVjaXNpb24gPiBjLmxlbmd0aCB8fCBlIC0gbmV3RXhwICsgMSA+IGMubGVuZ3RoKSB7XG4gICAgICBjLnB1c2goMCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIGNvbmNhdGVuYXRlIGNvZWZmaWNpZW50cyB3aXRoIG5lY2Vzc2FyeSB6ZXJvc1xuICAgIC8vIGFkZCB6ZXJvcyBpZiBuZWNlc3NhcnkgKGZvciBleGFtcGxlOiAxZSs4IC0+IDEwMGUrNilcbiAgICB2YXIgbWlzc2luZ1plcm9zID0gTWF0aC5hYnMoZSAtIG5ld0V4cCkgLSAoYy5sZW5ndGggLSAxKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbWlzc2luZ1plcm9zOyBpKyspIHtcbiAgICAgIGMucHVzaCgwKTtcbiAgICB9XG4gIH0gLy8gZmluZCBkaWZmZXJlbmNlIGluIGV4cG9uZW50c1xuXG5cbiAgdmFyIGV4cERpZmYgPSBNYXRoLmFicyhlIC0gbmV3RXhwKTtcbiAgdmFyIGRlY2ltYWxJZHggPSAxOyAvLyBwdXNoIGRlY2ltYWwgaW5kZXggb3ZlciBieSBleHBEaWZmIHRpbWVzXG5cbiAgd2hpbGUgKGV4cERpZmYgPiAwKSB7XG4gICAgZGVjaW1hbElkeCsrO1xuICAgIGV4cERpZmYtLTtcbiAgfSAvLyBpZiBhbGwgY29lZmZpY2llbnQgdmFsdWVzIGFyZSB6ZXJvIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50IGFuZCBwcmVjaXNpb24gaXMgdW5zZXQsIGRvbid0IGFkZCBhIGRlY2ltYWwgdmFsdWUuXG4gIC8vIG90aGVyd2lzZSBjb25jYXQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgY29lZmZpY2llbnRzXG5cblxuICB2YXIgZGVjaW1hbHMgPSBjLnNsaWNlKGRlY2ltYWxJZHgpLmpvaW4oJycpO1xuICB2YXIgZGVjaW1hbFZhbCA9ICgwLCBfaXMuaXNOdW1iZXIpKHByZWNpc2lvbikgJiYgZGVjaW1hbHMubGVuZ3RoIHx8IGRlY2ltYWxzLm1hdGNoKC9bMS05XS8pID8gJy4nICsgZGVjaW1hbHMgOiAnJztcbiAgdmFyIHN0ciA9IGMuc2xpY2UoMCwgZGVjaW1hbElkeCkuam9pbignJykgKyBkZWNpbWFsVmFsICsgJ2UnICsgKGUgPj0gMCA/ICcrJyA6ICcnKSArIG5ld0V4cC50b1N0cmluZygpO1xuICByZXR1cm4gcm91bmRlZC5zaWduICsgc3RyO1xufVxuLyoqXG4gKiBGb3JtYXQgYSBudW1iZXIgd2l0aCBmaXhlZCBub3RhdGlvbi5cbiAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IFtwcmVjaXNpb249dW5kZWZpbmVkXSAgT3B0aW9uYWwgbnVtYmVyIG9mIGRlY2ltYWxzIGFmdGVyIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjaW1hbCBwb2ludC4gbnVsbCBieSBkZWZhdWx0LlxuICovXG5cblxuZnVuY3Rpb24gdG9GaXhlZCh2YWx1ZSwgcHJlY2lzaW9uKSB7XG4gIGlmIChpc05hTih2YWx1ZSkgfHwgIWlzRmluaXRlKHZhbHVlKSkge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9XG5cbiAgdmFyIHNwbGl0VmFsdWUgPSBzcGxpdE51bWJlcih2YWx1ZSk7XG4gIHZhciByb3VuZGVkID0gdHlwZW9mIHByZWNpc2lvbiA9PT0gJ251bWJlcicgPyByb3VuZERpZ2l0cyhzcGxpdFZhbHVlLCBzcGxpdFZhbHVlLmV4cG9uZW50ICsgMSArIHByZWNpc2lvbikgOiBzcGxpdFZhbHVlO1xuICB2YXIgYyA9IHJvdW5kZWQuY29lZmZpY2llbnRzO1xuICB2YXIgcCA9IHJvdW5kZWQuZXhwb25lbnQgKyAxOyAvLyBleHBvbmVudCBtYXkgaGF2ZSBjaGFuZ2VkXG4gIC8vIGFwcGVuZCB6ZXJvcyBpZiBuZWVkZWRcblxuICB2YXIgcHAgPSBwICsgKHByZWNpc2lvbiB8fCAwKTtcblxuICBpZiAoYy5sZW5ndGggPCBwcCkge1xuICAgIGMgPSBjLmNvbmNhdCh6ZXJvcyhwcCAtIGMubGVuZ3RoKSk7XG4gIH0gLy8gcHJlcGVuZCB6ZXJvcyBpZiBuZWVkZWRcblxuXG4gIGlmIChwIDwgMCkge1xuICAgIGMgPSB6ZXJvcygtcCArIDEpLmNvbmNhdChjKTtcbiAgICBwID0gMTtcbiAgfSAvLyBpbnNlcnQgYSBkb3QgaWYgbmVlZGVkXG5cblxuICBpZiAocCA8IGMubGVuZ3RoKSB7XG4gICAgYy5zcGxpY2UocCwgMCwgcCA9PT0gMCA/ICcwLicgOiAnLicpO1xuICB9XG5cbiAgcmV0dXJuIHJvdW5kZWQuc2lnbiArIGMuam9pbignJyk7XG59XG4vKipcbiAqIEZvcm1hdCBhIG51bWJlciBpbiBleHBvbmVudGlhbCBub3RhdGlvbi4gTGlrZSAnMS4yM2UrNScsICcyLjNlKzAnLCAnMy41MDBlLTMnXG4gKiBAcGFyYW0ge251bWJlciB8IHN0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uXSAgTnVtYmVyIG9mIGRpZ2l0cyBpbiBmb3JtYXR0ZWQgb3V0cHV0LlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBub3QgcHJvdmlkZWQsIHRoZSBtYXhpbXVtIGF2YWlsYWJsZSBkaWdpdHNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdXNlZC5cbiAqL1xuXG5cbmZ1bmN0aW9uIHRvRXhwb25lbnRpYWwodmFsdWUsIHByZWNpc2lvbikge1xuICBpZiAoaXNOYU4odmFsdWUpIHx8ICFpc0Zpbml0ZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfSAvLyByb3VuZCBpZiBuZWVkZWQsIGVsc2UgY3JlYXRlIGEgY2xvbmVcblxuXG4gIHZhciBzcGxpdCA9IHNwbGl0TnVtYmVyKHZhbHVlKTtcbiAgdmFyIHJvdW5kZWQgPSBwcmVjaXNpb24gPyByb3VuZERpZ2l0cyhzcGxpdCwgcHJlY2lzaW9uKSA6IHNwbGl0O1xuICB2YXIgYyA9IHJvdW5kZWQuY29lZmZpY2llbnRzO1xuICB2YXIgZSA9IHJvdW5kZWQuZXhwb25lbnQ7IC8vIGFwcGVuZCB6ZXJvcyBpZiBuZWVkZWRcblxuICBpZiAoYy5sZW5ndGggPCBwcmVjaXNpb24pIHtcbiAgICBjID0gYy5jb25jYXQoemVyb3MocHJlY2lzaW9uIC0gYy5sZW5ndGgpKTtcbiAgfSAvLyBmb3JtYXQgYXMgYEMuQ0NDZStFRUVgIG9yIGBDLkNDQ2UtRUVFYFxuXG5cbiAgdmFyIGZpcnN0ID0gYy5zaGlmdCgpO1xuICByZXR1cm4gcm91bmRlZC5zaWduICsgZmlyc3QgKyAoYy5sZW5ndGggPiAwID8gJy4nICsgYy5qb2luKCcnKSA6ICcnKSArICdlJyArIChlID49IDAgPyAnKycgOiAnJykgKyBlO1xufVxuLyoqXG4gKiBGb3JtYXQgYSBudW1iZXIgd2l0aCBhIGNlcnRhaW4gcHJlY2lzaW9uXG4gKiBAcGFyYW0ge251bWJlciB8IHN0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uPXVuZGVmaW5lZF0gT3B0aW9uYWwgbnVtYmVyIG9mIGRpZ2l0cy5cbiAqIEBwYXJhbSB7e2xvd2VyRXhwOiBudW1iZXIgfCB1bmRlZmluZWQsIHVwcGVyRXhwOiBudW1iZXIgfCB1bmRlZmluZWR9fSBbb3B0aW9uc11cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnkgZGVmYXVsdDpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb3dlckV4cCA9IC0zIChpbmNsKVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwcGVyID0gKzUgKGV4Y2wpXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cblxuXG5mdW5jdGlvbiB0b1ByZWNpc2lvbih2YWx1ZSwgcHJlY2lzaW9uLCBvcHRpb25zKSB7XG4gIGlmIChpc05hTih2YWx1ZSkgfHwgIWlzRmluaXRlKHZhbHVlKSkge1xuICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICB9IC8vIGRldGVybWluZSBsb3dlciBhbmQgdXBwZXIgYm91bmQgZm9yIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxuXG5cbiAgdmFyIGxvd2VyRXhwID0gb3B0aW9ucyAmJiBvcHRpb25zLmxvd2VyRXhwICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmxvd2VyRXhwIDogLTM7XG4gIHZhciB1cHBlckV4cCA9IG9wdGlvbnMgJiYgb3B0aW9ucy51cHBlckV4cCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy51cHBlckV4cCA6IDU7XG4gIHZhciBzcGxpdCA9IHNwbGl0TnVtYmVyKHZhbHVlKTtcbiAgdmFyIHJvdW5kZWQgPSBwcmVjaXNpb24gPyByb3VuZERpZ2l0cyhzcGxpdCwgcHJlY2lzaW9uKSA6IHNwbGl0O1xuXG4gIGlmIChyb3VuZGVkLmV4cG9uZW50IDwgbG93ZXJFeHAgfHwgcm91bmRlZC5leHBvbmVudCA+PSB1cHBlckV4cCkge1xuICAgIC8vIGV4cG9uZW50aWFsIG5vdGF0aW9uXG4gICAgcmV0dXJuIHRvRXhwb25lbnRpYWwodmFsdWUsIHByZWNpc2lvbik7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGMgPSByb3VuZGVkLmNvZWZmaWNpZW50cztcbiAgICB2YXIgZSA9IHJvdW5kZWQuZXhwb25lbnQ7IC8vIGFwcGVuZCB0cmFpbGluZyB6ZXJvc1xuXG4gICAgaWYgKGMubGVuZ3RoIDwgcHJlY2lzaW9uKSB7XG4gICAgICBjID0gYy5jb25jYXQoemVyb3MocHJlY2lzaW9uIC0gYy5sZW5ndGgpKTtcbiAgICB9IC8vIGFwcGVuZCB0cmFpbGluZyB6ZXJvc1xuICAgIC8vIFRPRE86IHNpbXBsaWZ5IHRoZSBuZXh0IHN0YXRlbWVudFxuXG5cbiAgICBjID0gYy5jb25jYXQoemVyb3MoZSAtIGMubGVuZ3RoICsgMSArIChjLmxlbmd0aCA8IHByZWNpc2lvbiA/IHByZWNpc2lvbiAtIGMubGVuZ3RoIDogMCkpKTsgLy8gcHJlcGVuZCB6ZXJvc1xuXG4gICAgYyA9IHplcm9zKC1lKS5jb25jYXQoYyk7XG4gICAgdmFyIGRvdCA9IGUgPiAwID8gZSA6IDA7XG5cbiAgICBpZiAoZG90IDwgYy5sZW5ndGggLSAxKSB7XG4gICAgICBjLnNwbGljZShkb3QgKyAxLCAwLCAnLicpO1xuICAgIH1cblxuICAgIHJldHVybiByb3VuZGVkLnNpZ24gKyBjLmpvaW4oJycpO1xuICB9XG59XG4vKipcbiAqIFJvdW5kIHRoZSBudW1iZXIgb2YgZGlnaXRzIG9mIGEgbnVtYmVyICpcbiAqIEBwYXJhbSB7U3BsaXRWYWx1ZX0gc3BsaXQgICAgICAgQSB2YWx1ZSBzcGxpdCB3aXRoIC5zcGxpdE51bWJlcih2YWx1ZSlcbiAqIEBwYXJhbSB7bnVtYmVyfSBwcmVjaXNpb24gIEEgcG9zaXRpdmUgaW50ZWdlclxuICogQHJldHVybiB7U3BsaXRWYWx1ZX1cbiAqICAgICAgICAgICAgICBSZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHNpZ24sIGNvZWZmaWNpZW50cywgYW5kIGV4cG9uZW50XG4gKiAgICAgICAgICAgICAgd2l0aCByb3VuZGVkIGRpZ2l0c1xuICovXG5cblxuZnVuY3Rpb24gcm91bmREaWdpdHMoc3BsaXQsIHByZWNpc2lvbikge1xuICAvLyBjcmVhdGUgYSBjbG9uZVxuICB2YXIgcm91bmRlZCA9IHtcbiAgICBzaWduOiBzcGxpdC5zaWduLFxuICAgIGNvZWZmaWNpZW50czogc3BsaXQuY29lZmZpY2llbnRzLFxuICAgIGV4cG9uZW50OiBzcGxpdC5leHBvbmVudFxuICB9O1xuICB2YXIgYyA9IHJvdW5kZWQuY29lZmZpY2llbnRzOyAvLyBwcmVwZW5kIHplcm9zIGlmIG5lZWRlZFxuXG4gIHdoaWxlIChwcmVjaXNpb24gPD0gMCkge1xuICAgIGMudW5zaGlmdCgwKTtcbiAgICByb3VuZGVkLmV4cG9uZW50Kys7XG4gICAgcHJlY2lzaW9uKys7XG4gIH1cblxuICBpZiAoYy5sZW5ndGggPiBwcmVjaXNpb24pIHtcbiAgICB2YXIgcmVtb3ZlZCA9IGMuc3BsaWNlKHByZWNpc2lvbiwgYy5sZW5ndGggLSBwcmVjaXNpb24pO1xuXG4gICAgaWYgKHJlbW92ZWRbMF0gPj0gNSkge1xuICAgICAgdmFyIGkgPSBwcmVjaXNpb24gLSAxO1xuICAgICAgY1tpXSsrO1xuXG4gICAgICB3aGlsZSAoY1tpXSA9PT0gMTApIHtcbiAgICAgICAgYy5wb3AoKTtcblxuICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgIGMudW5zaGlmdCgwKTtcbiAgICAgICAgICByb3VuZGVkLmV4cG9uZW50Kys7XG4gICAgICAgICAgaSsrO1xuICAgICAgICB9XG5cbiAgICAgICAgaS0tO1xuICAgICAgICBjW2ldKys7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJvdW5kZWQ7XG59XG4vKipcbiAqIENyZWF0ZSBhbiBhcnJheSBmaWxsZWQgd2l0aCB6ZXJvcy5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge0FycmF5fVxuICovXG5cblxuZnVuY3Rpb24gemVyb3MobGVuZ3RoKSB7XG4gIHZhciBhcnIgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgYXJyLnB1c2goMCk7XG4gIH1cblxuICByZXR1cm4gYXJyO1xufVxuLyoqXG4gKiBDb3VudCB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBvZiBhIG51bWJlci5cbiAqXG4gKiBGb3IgZXhhbXBsZTpcbiAqICAgMi4zNCByZXR1cm5zIDNcbiAqICAgMC4wMDM0IHJldHVybnMgMlxuICogICAxMjAuNWUrMzAgcmV0dXJucyA0XG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9IGRpZ2l0cyAgIE51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHNcbiAqL1xuXG5cbmZ1bmN0aW9uIGRpZ2l0cyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUudG9FeHBvbmVudGlhbCgpLnJlcGxhY2UoL2UuKiQvLCAnJykgLy8gcmVtb3ZlIGV4cG9uZW50aWFsIG5vdGF0aW9uXG4gIC5yZXBsYWNlKC9eMFxcLj8wKnxcXC4vLCAnJykgLy8gcmVtb3ZlIGRlY2ltYWwgcG9pbnQgYW5kIGxlYWRpbmcgemVyb3NcbiAgLmxlbmd0aDtcbn1cbi8qKlxuICogTWluaW11bSBudW1iZXIgYWRkZWQgdG8gb25lIHRoYXQgbWFrZXMgdGhlIHJlc3VsdCBkaWZmZXJlbnQgdGhhbiBvbmVcbiAqL1xuXG5cbnZhciBEQkxfRVBTSUxPTiA9IE51bWJlci5FUFNJTE9OIHx8IDIuMjIwNDQ2MDQ5MjUwMzEzMDgwODQ3MjYzMzM2MTgxNkUtMTY7XG4vKipcbiAqIENvbXBhcmVzIHR3byBmbG9hdGluZyBwb2ludCBudW1iZXJzLlxuICogQHBhcmFtIHtudW1iZXJ9IHggICAgICAgICAgRmlyc3QgdmFsdWUgdG8gY29tcGFyZVxuICogQHBhcmFtIHtudW1iZXJ9IHkgICAgICAgICAgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbZXBzaWxvbl0gIFRoZSBtYXhpbXVtIHJlbGF0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbiB4IGFuZCB5XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBlcHNpbG9uIGlzIHVuZGVmaW5lZCBvciBudWxsLCB0aGUgZnVuY3Rpb24gd2lsbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdCB3aGV0aGVyIHggYW5kIHkgYXJlIGV4YWN0bHkgZXF1YWwuXG4gKiBAcmV0dXJuIHtib29sZWFufSB3aGV0aGVyIHRoZSB0d28gbnVtYmVycyBhcmUgbmVhcmx5IGVxdWFsXG4qL1xuXG5leHBvcnRzLkRCTF9FUFNJTE9OID0gREJMX0VQU0lMT047XG5cbmZ1bmN0aW9uIG5lYXJseUVxdWFsKHgsIHksIGVwc2lsb24pIHtcbiAgLy8gaWYgZXBzaWxvbiBpcyBudWxsIG9yIHVuZGVmaW5lZCwgdGVzdCB3aGV0aGVyIHggYW5kIHkgYXJlIGV4YWN0bHkgZXF1YWxcbiAgaWYgKGVwc2lsb24gPT09IG51bGwgfHwgZXBzaWxvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHggPT09IHk7XG4gIH1cblxuICBpZiAoeCA9PT0geSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIE5hTlxuXG5cbiAgaWYgKGlzTmFOKHgpIHx8IGlzTmFOKHkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIGF0IHRoaXMgcG9pbnQgeCBhbmQgeSBzaG91bGQgYmUgZmluaXRlXG5cblxuICBpZiAoaXNGaW5pdGUoeCkgJiYgaXNGaW5pdGUoeSkpIHtcbiAgICAvLyBjaGVjayBudW1iZXJzIGFyZSB2ZXJ5IGNsb3NlLCBuZWVkZWQgd2hlbiBjb21wYXJpbmcgbnVtYmVycyBuZWFyIHplcm9cbiAgICB2YXIgZGlmZiA9IE1hdGguYWJzKHggLSB5KTtcblxuICAgIGlmIChkaWZmIDwgREJMX0VQU0lMT04pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1c2UgcmVsYXRpdmUgZXJyb3JcbiAgICAgIHJldHVybiBkaWZmIDw9IE1hdGgubWF4KE1hdGguYWJzKHgpLCBNYXRoLmFicyh5KSkgKiBlcHNpbG9uO1xuICAgIH1cbiAgfSAvLyBJbmZpbml0ZSBhbmQgTnVtYmVyIG9yIG5lZ2F0aXZlIEluZmluaXRlIGFuZCBwb3NpdGl2ZSBJbmZpbml0ZSBjYXNlc1xuXG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjY29zIG9mIGEgbnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5cblxudmFyIGFjb3NoID0gTWF0aC5hY29zaCB8fCBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gTWF0aC5sb2coTWF0aC5zcXJ0KHggKiB4IC0gMSkgKyB4KTtcbn07XG5cbmV4cG9ydHMuYWNvc2ggPSBhY29zaDtcblxudmFyIGFzaW5oID0gTWF0aC5hc2luaCB8fCBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gTWF0aC5sb2coTWF0aC5zcXJ0KHggKiB4ICsgMSkgKyB4KTtcbn07XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBhcmN0YW5nZW50IG9mIGEgbnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5cblxuZXhwb3J0cy5hc2luaCA9IGFzaW5oO1xuXG52YXIgYXRhbmggPSBNYXRoLmF0YW5oIHx8IGZ1bmN0aW9uICh4KSB7XG4gIHJldHVybiBNYXRoLmxvZygoMSArIHgpIC8gKDEgLSB4KSkgLyAyO1xufTtcbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGNvc2luZSBvZiBhIG51bWJlclxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblxuXG5leHBvcnRzLmF0YW5oID0gYXRhbmg7XG5cbnZhciBjb3NoID0gTWF0aC5jb3NoIHx8IGZ1bmN0aW9uICh4KSB7XG4gIHJldHVybiAoTWF0aC5leHAoeCkgKyBNYXRoLmV4cCgteCkpIC8gMjtcbn07XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBzaW5lIG9mIGEgbnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuXG5cbmV4cG9ydHMuY29zaCA9IGNvc2g7XG5cbnZhciBzaW5oID0gTWF0aC5zaW5oIHx8IGZ1bmN0aW9uICh4KSB7XG4gIHJldHVybiAoTWF0aC5leHAoeCkgLSBNYXRoLmV4cCgteCkpIC8gMjtcbn07XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mIGEgbnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuXG5cbmV4cG9ydHMuc2luaCA9IHNpbmg7XG5cbnZhciB0YW5oID0gTWF0aC50YW5oIHx8IGZ1bmN0aW9uICh4KSB7XG4gIHZhciBlID0gTWF0aC5leHAoMiAqIHgpO1xuICByZXR1cm4gKGUgLSAxKSAvIChlICsgMSk7XG59O1xuXG5leHBvcnRzLnRhbmggPSB0YW5oOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jbG9uZSA9IGNsb25lO1xuZXhwb3J0cy5tYXBPYmplY3QgPSBtYXBPYmplY3Q7XG5leHBvcnRzLmV4dGVuZCA9IGV4dGVuZDtcbmV4cG9ydHMuZGVlcEV4dGVuZCA9IGRlZXBFeHRlbmQ7XG5leHBvcnRzLmRlZXBTdHJpY3RFcXVhbCA9IGRlZXBTdHJpY3RFcXVhbDtcbmV4cG9ydHMuZGVlcEZsYXR0ZW4gPSBkZWVwRmxhdHRlbjtcbmV4cG9ydHMuY2FuRGVmaW5lUHJvcGVydHkgPSBjYW5EZWZpbmVQcm9wZXJ0eTtcbmV4cG9ydHMubGF6eSA9IGxhenk7XG5leHBvcnRzLnRyYXZlcnNlID0gdHJhdmVyc2U7XG5leHBvcnRzLmhhc093blByb3BlcnR5ID0gaGFzT3duUHJvcGVydHk7XG5leHBvcnRzLmlzTGVnYWN5RmFjdG9yeSA9IGlzTGVnYWN5RmFjdG9yeTtcbmV4cG9ydHMuZ2V0ID0gZ2V0O1xuZXhwb3J0cy5zZXQgPSBzZXQ7XG5leHBvcnRzLnBpY2sgPSBwaWNrO1xuZXhwb3J0cy5waWNrU2hhbGxvdyA9IHBpY2tTaGFsbG93O1xuZXhwb3J0cy52YWx1ZXMgPSB2YWx1ZXM7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi9pc1wiKTtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4vKipcbiAqIENsb25lIGFuIG9iamVjdFxuICpcbiAqICAgICBjbG9uZSh4KVxuICpcbiAqIENhbiBjbG9uZSBhbnkgcHJpbWl0aXZlIHR5cGUsIGFycmF5LCBhbmQgb2JqZWN0LlxuICogSWYgeCBoYXMgYSBmdW5jdGlvbiBjbG9uZSwgdGhpcyBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgdG8gY2xvbmUgdGhlIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0geyp9IHhcbiAqIEByZXR1cm4geyp9IGNsb25lXG4gKi9cbmZ1bmN0aW9uIGNsb25lKHgpIHtcbiAgdmFyIHR5cGUgPSBfdHlwZW9mKHgpOyAvLyBpbW11dGFibGUgcHJpbWl0aXZlIHR5cGVzXG5cblxuICBpZiAodHlwZSA9PT0gJ251bWJlcicgfHwgdHlwZSA9PT0gJ3N0cmluZycgfHwgdHlwZSA9PT0gJ2Jvb2xlYW4nIHx8IHggPT09IG51bGwgfHwgeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHg7XG4gIH0gLy8gdXNlIGNsb25lIGZ1bmN0aW9uIG9mIHRoZSBvYmplY3Qgd2hlbiBhdmFpbGFibGVcblxuXG4gIGlmICh0eXBlb2YgeC5jbG9uZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB4LmNsb25lKCk7XG4gIH0gLy8gYXJyYXlcblxuXG4gIGlmIChBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgcmV0dXJuIHgubWFwKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIGNsb25lKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh4IGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuIG5ldyBEYXRlKHgudmFsdWVPZigpKTtcbiAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHgpKSByZXR1cm4geDsgLy8gYmlnbnVtYmVycyBhcmUgaW1tdXRhYmxlXG5cbiAgaWYgKHggaW5zdGFuY2VvZiBSZWdFeHApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjbG9uZSAnICsgeCk7IC8vIFRPRE86IGNsb25lIGEgUmVnRXhwXG4gIC8vIG9iamVjdFxuXG4gIHJldHVybiBtYXBPYmplY3QoeCwgY2xvbmUpO1xufVxuLyoqXG4gKiBBcHBseSBtYXAgdG8gYWxsIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7T2JqZWN0fSBSZXR1cm5zIGEgY29weSBvZiB0aGUgb2JqZWN0IHdpdGggbWFwcGVkIHByb3BlcnRpZXNcbiAqL1xuXG5cbmZ1bmN0aW9uIG1hcE9iamVjdChvYmplY3QsIGNhbGxiYWNrKSB7XG4gIHZhciBjbG9uZSA9IHt9O1xuXG4gIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkob2JqZWN0LCBrZXkpKSB7XG4gICAgICBjbG9uZVtrZXldID0gY2FsbGJhY2sob2JqZWN0W2tleV0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbG9uZTtcbn1cbi8qKlxuICogRXh0ZW5kIG9iamVjdCBhIHdpdGggdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGJcbiAqIEBwYXJhbSB7T2JqZWN0fSBhXG4gKiBAcGFyYW0ge09iamVjdH0gYlxuICogQHJldHVybiB7T2JqZWN0fSBhXG4gKi9cblxuXG5mdW5jdGlvbiBleHRlbmQoYSwgYikge1xuICBmb3IgKHZhciBwcm9wIGluIGIpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkoYiwgcHJvcCkpIHtcbiAgICAgIGFbcHJvcF0gPSBiW3Byb3BdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhO1xufVxuLyoqXG4gKiBEZWVwIGV4dGVuZCBhbiBvYmplY3QgYSB3aXRoIHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiXG4gKiBAcGFyYW0ge09iamVjdH0gYVxuICogQHBhcmFtIHtPYmplY3R9IGJcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cblxuXG5mdW5jdGlvbiBkZWVwRXh0ZW5kKGEsIGIpIHtcbiAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIEFycmF5cyB0byBkZWVwRXh0ZW5kXG4gIGlmIChBcnJheS5pc0FycmF5KGIpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGRlZXBFeHRlbmQnKTtcbiAgfVxuXG4gIGZvciAodmFyIHByb3AgaW4gYikge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eShiLCBwcm9wKSkge1xuICAgICAgaWYgKGJbcHJvcF0gJiYgYltwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XG4gICAgICAgIGlmIChhW3Byb3BdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBhW3Byb3BdID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYVtwcm9wXSAmJiBhW3Byb3BdLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcbiAgICAgICAgICBkZWVwRXh0ZW5kKGFbcHJvcF0sIGJbcHJvcF0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGFbcHJvcF0gPSBiW3Byb3BdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYltwcm9wXSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXlzIGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGRlZXBFeHRlbmQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFbcHJvcF0gPSBiW3Byb3BdO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhO1xufVxuLyoqXG4gKiBEZWVwIHRlc3QgZXF1YWxpdHkgb2YgYWxsIGZpZWxkcyBpbiB0d28gcGFpcnMgb2YgYXJyYXlzIG9yIG9iamVjdHMuXG4gKiBDb21wYXJlcyB2YWx1ZXMgYW5kIGZ1bmN0aW9ucyBzdHJpY3RseSAoaWUuIDIgaXMgbm90IHRoZSBzYW1lIGFzICcyJykuXG4gKiBAcGFyYW0ge0FycmF5IHwgT2JqZWN0fSBhXG4gKiBAcGFyYW0ge0FycmF5IHwgT2JqZWN0fSBiXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGRlZXBTdHJpY3RFcXVhbChhLCBiKSB7XG4gIHZhciBwcm9wLCBpLCBsZW47XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChpID0gMCwgbGVuID0gYS5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKCFkZWVwU3RyaWN0RXF1YWwoYVtpXSwgYltpXSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGEgPT09IGI7XG4gIH0gZWxzZSBpZiAoYSBpbnN0YW5jZW9mIE9iamVjdCkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGIpIHx8ICEoYiBpbnN0YW5jZW9mIE9iamVjdCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBmb3IgKHByb3AgaW4gYSkge1xuICAgICAgLy8gbm9pbnNwZWN0aW9uIEpTVW5maWx0ZXJlZEZvckluTG9vcFxuICAgICAgaWYgKCEocHJvcCBpbiBiKSB8fCAhZGVlcFN0cmljdEVxdWFsKGFbcHJvcF0sIGJbcHJvcF0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHByb3AgaW4gYikge1xuICAgICAgLy8gbm9pbnNwZWN0aW9uIEpTVW5maWx0ZXJlZEZvckluTG9vcFxuICAgICAgaWYgKCEocHJvcCBpbiBhKSB8fCAhZGVlcFN0cmljdEVxdWFsKGFbcHJvcF0sIGJbcHJvcF0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYSA9PT0gYjtcbiAgfVxufVxuLyoqXG4gKiBSZWN1cnNpdmVseSBmbGF0dGVuIGEgbmVzdGVkIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0fSBuZXN0ZWRPYmplY3RcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyB0aGUgZmxhdHRlbmVkIG9iamVjdFxuICovXG5cblxuZnVuY3Rpb24gZGVlcEZsYXR0ZW4obmVzdGVkT2JqZWN0KSB7XG4gIHZhciBmbGF0dGVuZWRPYmplY3QgPSB7fTtcblxuICBfZGVlcEZsYXR0ZW4obmVzdGVkT2JqZWN0LCBmbGF0dGVuZWRPYmplY3QpO1xuXG4gIHJldHVybiBmbGF0dGVuZWRPYmplY3Q7XG59IC8vIGhlbHBlciBmdW5jdGlvbiB1c2VkIGJ5IGRlZXBGbGF0dGVuXG5cblxuZnVuY3Rpb24gX2RlZXBGbGF0dGVuKG5lc3RlZE9iamVjdCwgZmxhdHRlbmVkT2JqZWN0KSB7XG4gIGZvciAodmFyIHByb3AgaW4gbmVzdGVkT2JqZWN0KSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5KG5lc3RlZE9iamVjdCwgcHJvcCkpIHtcbiAgICAgIHZhciB2YWx1ZSA9IG5lc3RlZE9iamVjdFtwcm9wXTtcblxuICAgICAgaWYgKF90eXBlb2YodmFsdWUpID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBfZGVlcEZsYXR0ZW4odmFsdWUsIGZsYXR0ZW5lZE9iamVjdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmbGF0dGVuZWRPYmplY3RbcHJvcF0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogVGVzdCB3aGV0aGVyIHRoZSBjdXJyZW50IEphdmFTY3JpcHQgZW5naW5lIHN1cHBvcnRzIE9iamVjdC5kZWZpbmVQcm9wZXJ0eVxuICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybnMgdHJ1ZSBpZiBzdXBwb3J0ZWRcbiAqL1xuXG5cbmZ1bmN0aW9uIGNhbkRlZmluZVByb3BlcnR5KCkge1xuICAvLyB0ZXN0IG5lZWRlZCBmb3IgYnJva2VuIElFOCBpbXBsZW1lbnRhdGlvblxuICB0cnkge1xuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSwgJ3gnLCB7XG4gICAgICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge31cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9IGNhdGNoIChlKSB7fVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICogQXR0YWNoIGEgbGF6eSBsb2FkaW5nIHByb3BlcnR5IHRvIGEgY29uc3RhbnQuXG4gKiBUaGUgZ2l2ZW4gZnVuY3Rpb24gYGZuYCBpcyBjYWxsZWQgb25jZSB3aGVuIHRoZSBwcm9wZXJ0eSBpcyBmaXJzdCByZXF1ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdCAgICAgICAgIE9iamVjdCB3aGVyZSB0byBhZGQgdGhlIHByb3BlcnR5XG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcCAgICAgICAgICAgUHJvcGVydHkgbmFtZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gdmFsdWVSZXNvbHZlciBGdW5jdGlvbiByZXR1cm5pbmcgdGhlIHByb3BlcnR5IHZhbHVlLiBDYWxsZWRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRob3V0IGFyZ3VtZW50cy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGxhenkob2JqZWN0LCBwcm9wLCB2YWx1ZVJlc29sdmVyKSB7XG4gIHZhciBfdW5pbml0aWFsaXplZCA9IHRydWU7XG5cbiAgdmFyIF92YWx1ZTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqZWN0LCBwcm9wLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICBpZiAoX3VuaW5pdGlhbGl6ZWQpIHtcbiAgICAgICAgX3ZhbHVlID0gdmFsdWVSZXNvbHZlcigpO1xuICAgICAgICBfdW5pbml0aWFsaXplZCA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3ZhbHVlO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQodmFsdWUpIHtcbiAgICAgIF92YWx1ZSA9IHZhbHVlO1xuICAgICAgX3VuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICB9LFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlXG4gIH0pO1xufVxuLyoqXG4gKiBUcmF2ZXJzZSBhIHBhdGggaW50byBhbiBvYmplY3QuXG4gKiBXaGVuIGEgbmFtZXNwYWNlIGlzIG1pc3NpbmcsIGl0IHdpbGwgYmUgY3JlYXRlZFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXX0gcGF0aCAgIEEgZG90IHNlcGFyYXRlZCBzdHJpbmcgbGlrZSAnbmFtZS5zcGFjZSdcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyB0aGUgb2JqZWN0IGF0IHRoZSBlbmQgb2YgdGhlIHBhdGhcbiAqL1xuXG5cbmZ1bmN0aW9uIHRyYXZlcnNlKG9iamVjdCwgcGF0aCkge1xuICBpZiAocGF0aCAmJiB0eXBlb2YgcGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdHJhdmVyc2Uob2JqZWN0LCBwYXRoLnNwbGl0KCcuJykpO1xuICB9XG5cbiAgdmFyIG9iaiA9IG9iamVjdDtcblxuICBpZiAocGF0aCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGtleSA9IHBhdGhbaV07XG5cbiAgICAgIGlmICghKGtleSBpbiBvYmopKSB7XG4gICAgICAgIG9ialtrZXldID0ge307XG4gICAgICB9XG5cbiAgICAgIG9iaiA9IG9ialtrZXldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG4vKipcbiAqIEEgc2FmZSBoYXNPd25Qcm9wZXJ0eVxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5XG4gKi9cblxuXG5mdW5jdGlvbiBoYXNPd25Qcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5KSB7XG4gIHJldHVybiBvYmplY3QgJiYgT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7XG59XG4vKipcbiAqIFRlc3Qgd2hldGhlciBhbiBvYmplY3QgaXMgYSBmYWN0b3J5LiBhIGZhY3RvcnkgaGFzIGZpZWxkczpcbiAqXG4gKiAtIGZhY3Rvcnk6IGZ1bmN0aW9uICh0eXBlOiBPYmplY3QsIGNvbmZpZzogT2JqZWN0LCBsb2FkOiBmdW5jdGlvbiwgdHlwZWQ6IGZ1bmN0aW9uIFssIG1hdGg6IE9iamVjdF0pICAgKHJlcXVpcmVkKVxuICogLSBuYW1lOiBzdHJpbmcgKG9wdGlvbmFsKVxuICogLSBwYXRoOiBzdHJpbmcgICAgQSBkb3Qgc2VwYXJhdGVkIHBhdGggKG9wdGlvbmFsKVxuICogLSBtYXRoOiBib29sZWFuICAgSWYgdHJ1ZSAoZmFsc2UgYnkgZGVmYXVsdCksIHRoZSBtYXRoIG5hbWVzcGFjZSBpcyBwYXNzZWRcbiAqICAgICAgICAgICAgICAgICAgIGFzIGZpZnRoIGFyZ3VtZW50IG9mIHRoZSBmYWN0b3J5IGZ1bmN0aW9uXG4gKlxuICogQHBhcmFtIHsqfSBvYmplY3RcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5cblxuZnVuY3Rpb24gaXNMZWdhY3lGYWN0b3J5KG9iamVjdCkge1xuICByZXR1cm4gb2JqZWN0ICYmIHR5cGVvZiBvYmplY3QuZmFjdG9yeSA9PT0gJ2Z1bmN0aW9uJztcbn1cbi8qKlxuICogR2V0IGEgbmVzdGVkIHByb3BlcnR5IGZyb20gYW4gb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZyB8IHN0cmluZ1tdfSBwYXRoXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5cblxuZnVuY3Rpb24gZ2V0KG9iamVjdCwgcGF0aCkge1xuICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKGlzUGF0aChwYXRoKSkge1xuICAgICAgcmV0dXJuIGdldChvYmplY3QsIHBhdGguc3BsaXQoJy4nKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBvYmplY3RbcGF0aF07XG4gICAgfVxuICB9XG5cbiAgdmFyIGNoaWxkID0gb2JqZWN0O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBwYXRoW2ldO1xuICAgIGNoaWxkID0gY2hpbGQgPyBjaGlsZFtrZXldIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkO1xufVxuLyoqXG4gKiBTZXQgYSBuZXN0ZWQgcHJvcGVydHkgaW4gYW4gb2JqZWN0XG4gKiBNdXRhdGVzIHRoZSBvYmplY3QgaXRzZWxmXG4gKiBJZiB0aGUgcGF0aCBkb2Vzbid0IGV4aXN0LCBpdCB3aWxsIGJlIGNyZWF0ZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW119IHBhdGhcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cblxuXG5mdW5jdGlvbiBzZXQob2JqZWN0LCBwYXRoLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKGlzUGF0aChwYXRoKSkge1xuICAgICAgcmV0dXJuIHNldChvYmplY3QsIHBhdGguc3BsaXQoJy4nKSwgdmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvYmplY3RbcGF0aF0gPSB2YWx1ZTtcbiAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNoaWxkID0gb2JqZWN0O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGF0aC5sZW5ndGggLSAxOyBpKyspIHtcbiAgICB2YXIga2V5ID0gcGF0aFtpXTtcblxuICAgIGlmIChjaGlsZFtrZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNoaWxkW2tleV0gPSB7fTtcbiAgICB9XG5cbiAgICBjaGlsZCA9IGNoaWxkW2tleV07XG4gIH1cblxuICBpZiAocGF0aC5sZW5ndGggPiAwKSB7XG4gICAgdmFyIGxhc3RLZXkgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XG4gICAgY2hpbGRbbGFzdEtleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiBvYmplY3Q7XG59XG4vKipcbiAqIENyZWF0ZSBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlIHBpY2tlZCBvYmplY3QgcHJvcGVydGllc1xuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcHJvcGVydGllc1xuICogQHBhcmFtIHtmdW5jdGlvbn0gW3RyYW5zZm9ybV0gT3B0aW9uYWwgdmFsdWUgdG8gdHJhbnNmb3JtIGEgdmFsdWUgd2hlbiBwaWNraW5nIGl0XG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cblxuXG5mdW5jdGlvbiBwaWNrKG9iamVjdCwgcHJvcGVydGllcywgdHJhbnNmb3JtKSB7XG4gIHZhciBjb3B5ID0ge307XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGtleSA9IHByb3BlcnRpZXNbaV07XG4gICAgdmFyIHZhbHVlID0gZ2V0KG9iamVjdCwga2V5KTtcblxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzZXQoY29weSwga2V5LCB0cmFuc2Zvcm0gPyB0cmFuc2Zvcm0odmFsdWUsIGtleSkgOiB2YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvcHk7XG59XG4vKipcbiAqIFNoYWxsb3cgdmVyc2lvbiBvZiBwaWNrLCBjcmVhdGluZyBhbiBvYmplY3QgY29tcG9zZWQgb2YgdGhlIHBpY2tlZCBvYmplY3QgcHJvcGVydGllc1xuICogYnV0IG5vdCBmb3IgbmVzdGVkIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb3BlcnRpZXNcbiAqIEByZXR1cm4ge09iamVjdH1cbiAqL1xuXG5cbmZ1bmN0aW9uIHBpY2tTaGFsbG93KG9iamVjdCwgcHJvcGVydGllcykge1xuICB2YXIgY29weSA9IHt9O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBwcm9wZXJ0aWVzW2ldO1xuICAgIHZhciB2YWx1ZSA9IG9iamVjdFtrZXldO1xuXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvcHlba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb3B5O1xufVxuXG5mdW5jdGlvbiB2YWx1ZXMob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIG9iamVjdFtrZXldO1xuICB9KTtcbn0gLy8gaGVscGVyIGZ1bmN0aW9uIHRvIHRlc3Qgd2hldGhlciBhIHN0cmluZyBjb250YWlucyBhIHBhdGggbGlrZSAndXNlci5uYW1lJ1xuXG5cbmZ1bmN0aW9uIGlzUGF0aChzdHIpIHtcbiAgcmV0dXJuIHN0ci5pbmRleE9mKCcuJykgIT09IC0xO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG4vLyBUT0RPOiByZW1vdmUgdGhlc2UgcG9seWZpbGxzIGFzIHNvb24gYXMgd2UgaGF2ZSBhIGJ1aWxkIHByb2Nlc3MgdGhhdCB0cmFuc3BpbGVzIHRoZSBjb2RlIHRvIEVTNVxuLy8gUG9seWZpbGwgZm9yIElFIDExIChOdW1iZXIuaXNGaW5pdGUgaXMgdXNlZCBpbiBgY29tcGxleC5qc2ApXG4vLyBzb3VyY2U6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL051bWJlci9pc0Zpbml0ZVxuTnVtYmVyLmlzRmluaXRlID0gTnVtYmVyLmlzRmluaXRlIHx8IGZ1bmN0aW9uICh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWx1ZSk7XG59OyAvLyBQb2x5ZmlsbCBmb3IgSUUgMTFcbi8vIHNvdXJjZTogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTnVtYmVyL2lzTmFOXG5cblxuTnVtYmVyLmlzTmFOID0gTnVtYmVyLmlzTmFOIHx8IGZ1bmN0aW9uICh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZhbHVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXNlbGYtY29tcGFyZVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucHJvZHVjdCA9IHByb2R1Y3Q7XG5cbi8qKiBAcGFyYW0ge251bWJlcn0gaVxuICogIEBwYXJhbSB7bnVtYmVyfSBuXG4gKiAgQHJldHVybnMge251bWJlcn0gcHJvZHVjdCBvZiBpIHRvIG5cbiAqL1xuZnVuY3Rpb24gcHJvZHVjdChpLCBuKSB7XG4gIGlmIChuIDwgaSkge1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgaWYgKG4gPT09IGkpIHtcbiAgICByZXR1cm4gbjtcbiAgfVxuXG4gIHZhciBoYWxmID0gbiArIGkgPj4gMTsgLy8gZGl2aWRlIChuICsgaSkgYnkgMiBhbmQgdHJ1bmNhdGUgdG8gaW50ZWdlclxuXG4gIHJldHVybiBwcm9kdWN0KGksIGhhbGYpICogcHJvZHVjdChoYWxmICsgMSwgbik7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmVuZHNXaXRoID0gZW5kc1dpdGg7XG5leHBvcnRzLmZvcm1hdCA9IGZvcm1hdDtcbmV4cG9ydHMuc3RyaW5naWZ5ID0gc3RyaW5naWZ5O1xuZXhwb3J0cy5lc2NhcGUgPSBlc2NhcGU7XG5leHBvcnRzLmNvbXBhcmVUZXh0ID0gY29tcGFyZVRleHQ7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi9pc1wiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi9udW1iZXJcIik7XG5cbnZhciBfZm9ybWF0dGVyID0gcmVxdWlyZShcIi4vYmlnbnVtYmVyL2Zvcm1hdHRlclwiKTtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG4vKipcbiAqIENoZWNrIGlmIGEgdGV4dCBlbmRzIHdpdGggYSBjZXJ0YWluIHN0cmluZy5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG4gKiBAcGFyYW0ge3N0cmluZ30gc2VhcmNoXG4gKi9cbmZ1bmN0aW9uIGVuZHNXaXRoKHRleHQsIHNlYXJjaCkge1xuICB2YXIgc3RhcnQgPSB0ZXh0Lmxlbmd0aCAtIHNlYXJjaC5sZW5ndGg7XG4gIHZhciBlbmQgPSB0ZXh0Lmxlbmd0aDtcbiAgcmV0dXJuIHRleHQuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpID09PSBzZWFyY2g7XG59XG4vKipcbiAqIEZvcm1hdCBhIHZhbHVlIG9mIGFueSB0eXBlIGludG8gYSBzdHJpbmcuXG4gKlxuICogVXNhZ2U6XG4gKiAgICAgbWF0aC5mb3JtYXQodmFsdWUpXG4gKiAgICAgbWF0aC5mb3JtYXQodmFsdWUsIHByZWNpc2lvbilcbiAqXG4gKiBXaGVuIHZhbHVlIGlzIGEgZnVuY3Rpb246XG4gKlxuICogLSBXaGVuIHRoZSBmdW5jdGlvbiBoYXMgYSBwcm9wZXJ0eSBgc3ludGF4YCwgaXQgcmV0dXJucyB0aGlzXG4gKiAgIHN5bnRheCBkZXNjcmlwdGlvbi5cbiAqIC0gSW4gb3RoZXIgY2FzZXMsIGEgc3RyaW5nIGAnZnVuY3Rpb24nYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBXaGVuIGB2YWx1ZWAgaXMgYW4gT2JqZWN0OlxuICpcbiAqIC0gV2hlbiB0aGUgb2JqZWN0IGNvbnRhaW5zIGEgcHJvcGVydHkgYGZvcm1hdGAgYmVpbmcgYSBmdW5jdGlvbiwgdGhpc1xuICogICBmdW5jdGlvbiBpcyBpbnZva2VkIGFzIGB2YWx1ZS5mb3JtYXQob3B0aW9ucylgIGFuZCB0aGUgcmVzdWx0IGlzIHJldHVybmVkLlxuICogLSBXaGVuIHRoZSBvYmplY3QgaGFzIGl0cyBvd24gYHRvU3RyaW5nYCBtZXRob2QsIHRoaXMgbWV0aG9kIGlzIGludm9rZWRcbiAqICAgYW5kIHRoZSByZXN1bHQgaXMgcmV0dXJuZWQuXG4gKiAtIEluIG90aGVyIGNhc2VzIHRoZSBmdW5jdGlvbiB3aWxsIGxvb3Agb3ZlciBhbGwgb2JqZWN0IHByb3BlcnRpZXMgYW5kXG4gKiAgIHJldHVybiBKU09OIG9iamVjdCBub3RhdGlvbiBsaWtlICd7XCJhXCI6IDIsIFwiYlwiOiAzfScuXG4gKlxuICogRXhhbXBsZSB1c2FnZTpcbiAqICAgICBtYXRoLmZvcm1hdCgyLzcpICAgICAgICAgICAgICAgIC8vICcwLjI4NTcxNDI4NTcxNDI4NTcnXG4gKiAgICAgbWF0aC5mb3JtYXQobWF0aC5waSwgMykgICAgICAgICAvLyAnMy4xNCdcbiAqICAgICBtYXRoLmZvcm1hdChuZXcgQ29tcGxleCgyLCAzKSkgIC8vICcyICsgM2knXG4gKiAgICAgbWF0aC5mb3JtYXQoJ2hlbGxvJykgICAgICAgICAgICAvLyAnXCJoZWxsb1wiJ1xuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgICAgICAgICAgICAgVmFsdWUgdG8gYmUgc3RyaW5naWZpZWRcbiAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliL3V0aWxzL251bWJlcjpmb3JtYXQgZm9yIGFcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gb2YgdGhlIGF2YWlsYWJsZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAqL1xuXG5cbmZ1bmN0aW9uIGZvcm1hdCh2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiAoMCwgX251bWJlci5mb3JtYXQpKHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuXG4gIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gKDAsIF9mb3JtYXR0ZXIuZm9ybWF0KSh2YWx1ZSwgb3B0aW9ucyk7XG4gIH0gLy8gbm90ZTogd2UgdXNlIHVuc2FmZSBkdWNrLXR5cGluZyBoZXJlIHRvIGNoZWNrIGZvciBGcmFjdGlvbnMsIHRoaXMgaXNcbiAgLy8gb2sgaGVyZSBzaW5jZSB3ZSdyZSBvbmx5IGludm9raW5nIHRvU3RyaW5nIG9yIGNvbmNhdGVuYXRpbmcgaXRzIHZhbHVlc1xuXG5cbiAgaWYgKGxvb2tzTGlrZUZyYWN0aW9uKHZhbHVlKSkge1xuICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLmZyYWN0aW9uICE9PSAnZGVjaW1hbCcpIHtcbiAgICAgIC8vIG91dHB1dCBhcyByYXRpbywgbGlrZSAnMS8zJ1xuICAgICAgcmV0dXJuIHZhbHVlLnMgKiB2YWx1ZS5uICsgJy8nICsgdmFsdWUuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gb3V0cHV0IGFzIGRlY2ltYWwsIGxpa2UgJzAuKDMpJ1xuICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgfVxuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZvcm1hdEFycmF5KHZhbHVlLCBvcHRpb25zKTtcbiAgfVxuXG4gIGlmICgoMCwgX2lzLmlzU3RyaW5nKSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJ1wiJyArIHZhbHVlICsgJ1wiJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gdmFsdWUuc3ludGF4ID8gU3RyaW5nKHZhbHVlLnN5bnRheCkgOiAnZnVuY3Rpb24nO1xuICB9XG5cbiAgaWYgKHZhbHVlICYmIF90eXBlb2YodmFsdWUpID09PSAnb2JqZWN0Jykge1xuICAgIGlmICh0eXBlb2YgdmFsdWUuZm9ybWF0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdmFsdWUuZm9ybWF0KG9wdGlvbnMpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgJiYgdmFsdWUudG9TdHJpbmcob3B0aW9ucykgIT09IHt9LnRvU3RyaW5nKCkpIHtcbiAgICAgIC8vIHRoaXMgb2JqZWN0IGhhcyBhIG5vbi1uYXRpdmUgdG9TdHJpbmcgbWV0aG9kLCB1c2UgdGhhdCBvbmVcbiAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZyhvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIGVudHJpZXMgPSBPYmplY3Qua2V5cyh2YWx1ZSkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmV0dXJuICdcIicgKyBrZXkgKyAnXCI6ICcgKyBmb3JtYXQodmFsdWVba2V5XSwgb3B0aW9ucyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiAneycgKyBlbnRyaWVzLmpvaW4oJywgJykgKyAnfSc7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG59XG4vKipcbiAqIFN0cmluZ2lmeSBhIHZhbHVlIGludG8gYSBzdHJpbmcgZW5jbG9zZWQgaW4gZG91YmxlIHF1b3Rlcy5cbiAqIFVuZXNjYXBlZCBkb3VibGUgcXVvdGVzIGFuZCBiYWNrc2xhc2hlcyBpbnNpZGUgdGhlIHZhbHVlIGFyZSBlc2NhcGVkLlxuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gc3RyaW5naWZ5KHZhbHVlKSB7XG4gIHZhciB0ZXh0ID0gU3RyaW5nKHZhbHVlKTtcbiAgdmFyIGVzY2FwZWQgPSAnJztcbiAgdmFyIGkgPSAwO1xuXG4gIHdoaWxlIChpIDwgdGV4dC5sZW5ndGgpIHtcbiAgICB2YXIgYyA9IHRleHQuY2hhckF0KGkpO1xuXG4gICAgaWYgKGMgPT09ICdcXFxcJykge1xuICAgICAgZXNjYXBlZCArPSBjO1xuICAgICAgaSsrO1xuICAgICAgYyA9IHRleHQuY2hhckF0KGkpO1xuXG4gICAgICBpZiAoYyA9PT0gJycgfHwgJ1wiXFxcXC9iZm5ydHUnLmluZGV4T2YoYykgPT09IC0xKSB7XG4gICAgICAgIGVzY2FwZWQgKz0gJ1xcXFwnOyAvLyBubyB2YWxpZCBlc2NhcGUgY2hhcmFjdGVyIC0+IGVzY2FwZSBpdFxuICAgICAgfVxuXG4gICAgICBlc2NhcGVkICs9IGM7XG4gICAgfSBlbHNlIGlmIChjID09PSAnXCInKSB7XG4gICAgICBlc2NhcGVkICs9ICdcXFxcXCInO1xuICAgIH0gZWxzZSB7XG4gICAgICBlc2NhcGVkICs9IGM7XG4gICAgfVxuXG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuICdcIicgKyBlc2NhcGVkICsgJ1wiJztcbn1cbi8qKlxuICogRXNjYXBlIHNwZWNpYWwgSFRNTCBjaGFyYWN0ZXJzXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cblxuXG5mdW5jdGlvbiBlc2NhcGUodmFsdWUpIHtcbiAgdmFyIHRleHQgPSBTdHJpbmcodmFsdWUpO1xuICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoL1wiL2csICcmcXVvdDsnKS5yZXBsYWNlKC8nL2csICcmIzM5OycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC8+L2csICcmZ3Q7Jyk7XG4gIHJldHVybiB0ZXh0O1xufVxuLyoqXG4gKiBSZWN1cnNpdmVseSBmb3JtYXQgYW4gbi1kaW1lbnNpb25hbCBtYXRyaXhcbiAqIEV4YW1wbGUgb3V0cHV0OiBcIltbMSwgMl0sIFszLCA0XV1cIlxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgRnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliL3V0aWxzL251bWJlcjpmb3JtYXQgZm9yIGFcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24gb2YgdGhlIGF2YWlsYWJsZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICogQHJldHVybnMge3N0cmluZ30gc3RyXG4gKi9cblxuXG5mdW5jdGlvbiBmb3JtYXRBcnJheShhcnJheSwgb3B0aW9ucykge1xuICBpZiAoQXJyYXkuaXNBcnJheShhcnJheSkpIHtcbiAgICB2YXIgc3RyID0gJ1snO1xuICAgIHZhciBsZW4gPSBhcnJheS5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBpZiAoaSAhPT0gMCkge1xuICAgICAgICBzdHIgKz0gJywgJztcbiAgICAgIH1cblxuICAgICAgc3RyICs9IGZvcm1hdEFycmF5KGFycmF5W2ldLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBzdHIgKz0gJ10nO1xuICAgIHJldHVybiBzdHI7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZvcm1hdChhcnJheSwgb3B0aW9ucyk7XG4gIH1cbn1cbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIHZhbHVlIGxvb2tzIGxpa2UgYSBGcmFjdGlvbiAodW5zYWZlIGR1Y2stdHlwZSBjaGVjaylcbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cblxuXG5mdW5jdGlvbiBsb29rc0xpa2VGcmFjdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgJiYgX3R5cGVvZih2YWx1ZSkgPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YWx1ZS5zID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgdmFsdWUubiA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHZhbHVlLmQgPT09ICdudW1iZXInIHx8IGZhbHNlO1xufVxuLyoqXG4gKiBDb21wYXJlIHR3byBzdHJpbmdzXG4gKiBAcGFyYW0ge3N0cmluZ30geFxuICogQHBhcmFtIHtzdHJpbmd9IHlcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblxuXG5mdW5jdGlvbiBjb21wYXJlVGV4dCh4LCB5KSB7XG4gIC8vIHdlIGRvbid0IHdhbnQgdG8gY29udmVydCBudW1iZXJzIHRvIHN0cmluZywgb25seSBhY2NlcHQgc3RyaW5nIGlucHV0XG4gIGlmICghKDAsIF9pcy5pc1N0cmluZykoeCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmV4cGVjdGVkIHR5cGUgb2YgYXJndW1lbnQgaW4gZnVuY3Rpb24gY29tcGFyZVRleHQgJyArICcoZXhwZWN0ZWQ6IHN0cmluZyBvciBBcnJheSBvciBNYXRyaXgsIGFjdHVhbDogJyArICgwLCBfaXMudHlwZU9mKSh4KSArICcsIGluZGV4OiAwKScpO1xuICB9XG5cbiAgaWYgKCEoMCwgX2lzLmlzU3RyaW5nKSh5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgdHlwZSBvZiBhcmd1bWVudCBpbiBmdW5jdGlvbiBjb21wYXJlVGV4dCAnICsgJyhleHBlY3RlZDogc3RyaW5nIG9yIEFycmF5IG9yIE1hdHJpeCwgYWN0dWFsOiAnICsgKDAsIF9pcy50eXBlT2YpKHkpICsgJywgaW5kZXg6IDEpJyk7XG4gIH1cblxuICByZXR1cm4geCA9PT0geSA/IDAgOiB4ID4geSA/IDEgOiAtMTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudmVyc2lvbiA9IHZvaWQgMDtcbnZhciB2ZXJzaW9uID0gJzYuNi41JzsgLy8gTm90ZTogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIHdoZW4gYnVpbGRpbmcgbWF0aC5qcy5cbi8vIENoYW5nZXMgbWFkZSBpbiB0aGlzIGZpbGUgd2lsbCBiZSBvdmVyd3JpdHRlbi5cblxuZXhwb3J0cy52ZXJzaW9uID0gdmVyc2lvbjsiLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL2xpYi9lbnRyeS9tYWluQW55JylcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciB3aWR0aCA9IDI1NjsvLyBlYWNoIFJDNCBvdXRwdXQgaXMgMCA8PSB4IDwgMjU2XHJcbnZhciBjaHVua3MgPSA2Oy8vIGF0IGxlYXN0IHNpeCBSQzQgb3V0cHV0cyBmb3IgZWFjaCBkb3VibGVcclxudmFyIGRpZ2l0cyA9IDUyOy8vIHRoZXJlIGFyZSA1MiBzaWduaWZpY2FudCBkaWdpdHMgaW4gYSBkb3VibGVcclxudmFyIHBvb2wgPSBbXTsvLyBwb29sOiBlbnRyb3B5IHBvb2wgc3RhcnRzIGVtcHR5XHJcbnZhciBHTE9CQUwgPSB0eXBlb2YgZ2xvYmFsID09PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbDtcclxuXHJcbi8vXHJcbi8vIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWxhdGVkIHRvIElFRUUgNzU0IGxpbWl0cy5cclxuLy9cclxudmFyIHN0YXJ0ZGVub20gPSBNYXRoLnBvdyh3aWR0aCwgY2h1bmtzKSxcclxuICAgIHNpZ25pZmljYW5jZSA9IE1hdGgucG93KDIsIGRpZ2l0cyksXHJcbiAgICBvdmVyZmxvdyA9IHNpZ25pZmljYW5jZSAqIDIsXHJcbiAgICBtYXNrID0gd2lkdGggLSAxO1xyXG5cclxuXHJcbnZhciBvbGRSYW5kb20gPSBNYXRoLnJhbmRvbTtcclxuXHJcbi8vXHJcbi8vIHNlZWRyYW5kb20oKVxyXG4vLyBUaGlzIGlzIHRoZSBzZWVkcmFuZG9tIGZ1bmN0aW9uIGRlc2NyaWJlZCBhYm92ZS5cclxuLy9cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihzZWVkLCBvcHRpb25zKSB7XHJcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5nbG9iYWwgPT09IHRydWUpIHtcclxuICAgIG9wdGlvbnMuZ2xvYmFsID0gZmFsc2U7XHJcbiAgICBNYXRoLnJhbmRvbSA9IG1vZHVsZS5leHBvcnRzKHNlZWQsIG9wdGlvbnMpO1xyXG4gICAgb3B0aW9ucy5nbG9iYWwgPSB0cnVlO1xyXG4gICAgcmV0dXJuIE1hdGgucmFuZG9tO1xyXG4gIH1cclxuICB2YXIgdXNlX2VudHJvcHkgPSAob3B0aW9ucyAmJiBvcHRpb25zLmVudHJvcHkpIHx8IGZhbHNlO1xyXG4gIHZhciBrZXkgPSBbXTtcclxuXHJcbiAgLy8gRmxhdHRlbiB0aGUgc2VlZCBzdHJpbmcgb3IgYnVpbGQgb25lIGZyb20gbG9jYWwgZW50cm9weSBpZiBuZWVkZWQuXHJcbiAgdmFyIHNob3J0c2VlZCA9IG1peGtleShmbGF0dGVuKFxyXG4gICAgdXNlX2VudHJvcHkgPyBbc2VlZCwgdG9zdHJpbmcocG9vbCldIDpcclxuICAgIDAgaW4gYXJndW1lbnRzID8gc2VlZCA6IGF1dG9zZWVkKCksIDMpLCBrZXkpO1xyXG5cclxuICAvLyBVc2UgdGhlIHNlZWQgdG8gaW5pdGlhbGl6ZSBhbiBBUkM0IGdlbmVyYXRvci5cclxuICB2YXIgYXJjNCA9IG5ldyBBUkM0KGtleSk7XHJcblxyXG4gIC8vIE1peCB0aGUgcmFuZG9tbmVzcyBpbnRvIGFjY3VtdWxhdGVkIGVudHJvcHkuXHJcbiAgbWl4a2V5KHRvc3RyaW5nKGFyYzQuUyksIHBvb2wpO1xyXG5cclxuICAvLyBPdmVycmlkZSBNYXRoLnJhbmRvbVxyXG5cclxuICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSByYW5kb20gZG91YmxlIGluIFswLCAxKSB0aGF0IGNvbnRhaW5zXHJcbiAgLy8gcmFuZG9tbmVzcyBpbiBldmVyeSBiaXQgb2YgdGhlIG1hbnRpc3NhIG9mIHRoZSBJRUVFIDc1NCB2YWx1ZS5cclxuXHJcbiAgcmV0dXJuIGZ1bmN0aW9uKCkgeyAgICAgICAgIC8vIENsb3N1cmUgdG8gcmV0dXJuIGEgcmFuZG9tIGRvdWJsZTpcclxuICAgIHZhciBuID0gYXJjNC5nKGNodW5rcyksICAgICAgICAgICAgIC8vIFN0YXJ0IHdpdGggYSBudW1lcmF0b3IgbiA8IDIgXiA0OFxyXG4gICAgICAgIGQgPSBzdGFydGRlbm9tLCAgICAgICAgICAgICAgICAgLy8gICBhbmQgZGVub21pbmF0b3IgZCA9IDIgXiA0OC5cclxuICAgICAgICB4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgYW5kIG5vICdleHRyYSBsYXN0IGJ5dGUnLlxyXG4gICAgd2hpbGUgKG4gPCBzaWduaWZpY2FuY2UpIHsgICAgICAgICAgLy8gRmlsbCB1cCBhbGwgc2lnbmlmaWNhbnQgZGlnaXRzIGJ5XHJcbiAgICAgIG4gPSAobiArIHgpICogd2lkdGg7ICAgICAgICAgICAgICAvLyAgIHNoaWZ0aW5nIG51bWVyYXRvciBhbmRcclxuICAgICAgZCAqPSB3aWR0aDsgICAgICAgICAgICAgICAgICAgICAgIC8vICAgZGVub21pbmF0b3IgYW5kIGdlbmVyYXRpbmcgYVxyXG4gICAgICB4ID0gYXJjNC5nKDEpOyAgICAgICAgICAgICAgICAgICAgLy8gICBuZXcgbGVhc3Qtc2lnbmlmaWNhbnQtYnl0ZS5cclxuICAgIH1cclxuICAgIHdoaWxlIChuID49IG92ZXJmbG93KSB7ICAgICAgICAgICAgIC8vIFRvIGF2b2lkIHJvdW5kaW5nIHVwLCBiZWZvcmUgYWRkaW5nXHJcbiAgICAgIG4gLz0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGxhc3QgYnl0ZSwgc2hpZnQgZXZlcnl0aGluZ1xyXG4gICAgICBkIC89IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICByaWdodCB1c2luZyBpbnRlZ2VyIE1hdGggdW50aWxcclxuICAgICAgeCA+Pj49IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgd2UgaGF2ZSBleGFjdGx5IHRoZSBkZXNpcmVkIGJpdHMuXHJcbiAgICB9XHJcbiAgICByZXR1cm4gKG4gKyB4KSAvIGQ7ICAgICAgICAgICAgICAgICAvLyBGb3JtIHRoZSBudW1iZXIgd2l0aGluIFswLCAxKS5cclxuICB9O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMucmVzZXRHbG9iYWwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgTWF0aC5yYW5kb20gPSBvbGRSYW5kb207XHJcbn07XHJcblxyXG4vL1xyXG4vLyBBUkM0XHJcbi8vXHJcbi8vIEFuIEFSQzQgaW1wbGVtZW50YXRpb24uICBUaGUgY29uc3RydWN0b3IgdGFrZXMgYSBrZXkgaW4gdGhlIGZvcm0gb2ZcclxuLy8gYW4gYXJyYXkgb2YgYXQgbW9zdCAod2lkdGgpIGludGVnZXJzIHRoYXQgc2hvdWxkIGJlIDAgPD0geCA8ICh3aWR0aCkuXHJcbi8vXHJcbi8vIFRoZSBnKGNvdW50KSBtZXRob2QgcmV0dXJucyBhIHBzZXVkb3JhbmRvbSBpbnRlZ2VyIHRoYXQgY29uY2F0ZW5hdGVzXHJcbi8vIHRoZSBuZXh0IChjb3VudCkgb3V0cHV0cyBmcm9tIEFSQzQuICBJdHMgcmV0dXJuIHZhbHVlIGlzIGEgbnVtYmVyIHhcclxuLy8gdGhhdCBpcyBpbiB0aGUgcmFuZ2UgMCA8PSB4IDwgKHdpZHRoIF4gY291bnQpLlxyXG4vL1xyXG4vKiogQGNvbnN0cnVjdG9yICovXHJcbmZ1bmN0aW9uIEFSQzQoa2V5KSB7XHJcbiAgdmFyIHQsIGtleWxlbiA9IGtleS5sZW5ndGgsXHJcbiAgICAgIG1lID0gdGhpcywgaSA9IDAsIGogPSBtZS5pID0gbWUuaiA9IDAsIHMgPSBtZS5TID0gW107XHJcblxyXG4gIC8vIFRoZSBlbXB0eSBrZXkgW10gaXMgdHJlYXRlZCBhcyBbMF0uXHJcbiAgaWYgKCFrZXlsZW4pIHsga2V5ID0gW2tleWxlbisrXTsgfVxyXG5cclxuICAvLyBTZXQgdXAgUyB1c2luZyB0aGUgc3RhbmRhcmQga2V5IHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxyXG4gIHdoaWxlIChpIDwgd2lkdGgpIHtcclxuICAgIHNbaV0gPSBpKys7XHJcbiAgfVxyXG4gIGZvciAoaSA9IDA7IGkgPCB3aWR0aDsgaSsrKSB7XHJcbiAgICBzW2ldID0gc1tqID0gbWFzayAmIChqICsga2V5W2kgJSBrZXlsZW5dICsgKHQgPSBzW2ldKSldO1xyXG4gICAgc1tqXSA9IHQ7XHJcbiAgfVxyXG5cclxuICAvLyBUaGUgXCJnXCIgbWV0aG9kIHJldHVybnMgdGhlIG5leHQgKGNvdW50KSBvdXRwdXRzIGFzIG9uZSBudW1iZXIuXHJcbiAgKG1lLmcgPSBmdW5jdGlvbihjb3VudCkge1xyXG4gICAgLy8gVXNpbmcgaW5zdGFuY2UgbWVtYmVycyBpbnN0ZWFkIG9mIGNsb3N1cmUgc3RhdGUgbmVhcmx5IGRvdWJsZXMgc3BlZWQuXHJcbiAgICB2YXIgdCwgciA9IDAsXHJcbiAgICAgICAgaSA9IG1lLmksIGogPSBtZS5qLCBzID0gbWUuUztcclxuICAgIHdoaWxlIChjb3VudC0tKSB7XHJcbiAgICAgIHQgPSBzW2kgPSBtYXNrICYgKGkgKyAxKV07XHJcbiAgICAgIHIgPSByICogd2lkdGggKyBzW21hc2sgJiAoKHNbaV0gPSBzW2ogPSBtYXNrICYgKGogKyB0KV0pICsgKHNbal0gPSB0KSldO1xyXG4gICAgfVxyXG4gICAgbWUuaSA9IGk7IG1lLmogPSBqO1xyXG4gICAgcmV0dXJuIHI7XHJcbiAgICAvLyBGb3Igcm9idXN0IHVucHJlZGljdGFiaWxpdHkgZGlzY2FyZCBhbiBpbml0aWFsIGJhdGNoIG9mIHZhbHVlcy5cclxuICAgIC8vIFNlZSBodHRwOi8vd3d3LnJzYS5jb20vcnNhbGFicy9ub2RlLmFzcD9pZD0yMDA5XHJcbiAgfSkod2lkdGgpO1xyXG59XHJcblxyXG4vL1xyXG4vLyBmbGF0dGVuKClcclxuLy8gQ29udmVydHMgYW4gb2JqZWN0IHRyZWUgdG8gbmVzdGVkIGFycmF5cyBvZiBzdHJpbmdzLlxyXG4vL1xyXG5mdW5jdGlvbiBmbGF0dGVuKG9iaiwgZGVwdGgpIHtcclxuICB2YXIgcmVzdWx0ID0gW10sIHR5cCA9ICh0eXBlb2Ygb2JqKVswXSwgcHJvcDtcclxuICBpZiAoZGVwdGggJiYgdHlwID09ICdvJykge1xyXG4gICAgZm9yIChwcm9wIGluIG9iaikge1xyXG4gICAgICB0cnkgeyByZXN1bHQucHVzaChmbGF0dGVuKG9ialtwcm9wXSwgZGVwdGggLSAxKSk7IH0gY2F0Y2ggKGUpIHt9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiAocmVzdWx0Lmxlbmd0aCA/IHJlc3VsdCA6IHR5cCA9PSAncycgPyBvYmogOiBvYmogKyAnXFwwJyk7XHJcbn1cclxuXHJcbi8vXHJcbi8vIG1peGtleSgpXHJcbi8vIE1peGVzIGEgc3RyaW5nIHNlZWQgaW50byBhIGtleSB0aGF0IGlzIGFuIGFycmF5IG9mIGludGVnZXJzLCBhbmRcclxuLy8gcmV0dXJucyBhIHNob3J0ZW5lZCBzdHJpbmcgc2VlZCB0aGF0IGlzIGVxdWl2YWxlbnQgdG8gdGhlIHJlc3VsdCBrZXkuXHJcbi8vXHJcbmZ1bmN0aW9uIG1peGtleShzZWVkLCBrZXkpIHtcclxuICB2YXIgc3RyaW5nc2VlZCA9IHNlZWQgKyAnJywgc21lYXIsIGogPSAwO1xyXG4gIHdoaWxlIChqIDwgc3RyaW5nc2VlZC5sZW5ndGgpIHtcclxuICAgIGtleVttYXNrICYgal0gPVxyXG4gICAgICBtYXNrICYgKChzbWVhciBePSBrZXlbbWFzayAmIGpdICogMTkpICsgc3RyaW5nc2VlZC5jaGFyQ29kZUF0KGorKykpO1xyXG4gIH1cclxuICByZXR1cm4gdG9zdHJpbmcoa2V5KTtcclxufVxyXG5cclxuLy9cclxuLy8gYXV0b3NlZWQoKVxyXG4vLyBSZXR1cm5zIGFuIG9iamVjdCBmb3IgYXV0b3NlZWRpbmcsIHVzaW5nIHdpbmRvdy5jcnlwdG8gaWYgYXZhaWxhYmxlLlxyXG4vL1xyXG4vKiogQHBhcmFtIHtVaW50OEFycmF5PX0gc2VlZCAqL1xyXG5mdW5jdGlvbiBhdXRvc2VlZChzZWVkKSB7XHJcbiAgdHJ5IHtcclxuICAgIEdMT0JBTC5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHNlZWQgPSBuZXcgVWludDhBcnJheSh3aWR0aCkpO1xyXG4gICAgcmV0dXJuIHRvc3RyaW5nKHNlZWQpO1xyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHJldHVybiBbK25ldyBEYXRlLCBHTE9CQUwsIEdMT0JBTC5uYXZpZ2F0b3IgJiYgR0xPQkFMLm5hdmlnYXRvci5wbHVnaW5zLFxyXG4gICAgICAgICAgICBHTE9CQUwuc2NyZWVuLCB0b3N0cmluZyhwb29sKV07XHJcbiAgfVxyXG59XHJcblxyXG4vL1xyXG4vLyB0b3N0cmluZygpXHJcbi8vIENvbnZlcnRzIGFuIGFycmF5IG9mIGNoYXJjb2RlcyB0byBhIHN0cmluZ1xyXG4vL1xyXG5mdW5jdGlvbiB0b3N0cmluZyhhKSB7XHJcbiAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoMCwgYSk7XHJcbn1cclxuXHJcbi8vXHJcbi8vIFdoZW4gc2VlZHJhbmRvbS5qcyBpcyBsb2FkZWQsIHdlIGltbWVkaWF0ZWx5IG1peCBhIGZldyBiaXRzXHJcbi8vIGZyb20gdGhlIGJ1aWx0LWluIFJORyBpbnRvIHRoZSBlbnRyb3B5IHBvb2wuICBCZWNhdXNlIHdlIGRvXHJcbi8vIG5vdCB3YW50IHRvIGludGVmZXJlIHdpdGggZGV0ZXJtaW5zdGljIFBSTkcgc3RhdGUgbGF0ZXIsXHJcbi8vIHNlZWRyYW5kb20gd2lsbCBub3QgY2FsbCBNYXRoLnJhbmRvbSBvbiBpdHMgb3duIGFnYWluIGFmdGVyXHJcbi8vIGluaXRpYWxpemF0aW9uLlxyXG4vL1xyXG5taXhrZXkoTWF0aC5yYW5kb20oKSwgcG9vbCk7XHJcbiIsImZ1bmN0aW9uIEUgKCkge1xuICAvLyBLZWVwIHRoaXMgZW1wdHkgc28gaXQncyBlYXNpZXIgdG8gaW5oZXJpdCBmcm9tXG4gIC8vICh2aWEgaHR0cHM6Ly9naXRodWIuY29tL2xpcHNtYWNrIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL3Njb3R0Y29yZ2FuL3RpbnktZW1pdHRlci9pc3N1ZXMvMylcbn1cblxuRS5wcm90b3R5cGUgPSB7XG4gIG9uOiBmdW5jdGlvbiAobmFtZSwgY2FsbGJhY2ssIGN0eCkge1xuICAgIHZhciBlID0gdGhpcy5lIHx8ICh0aGlzLmUgPSB7fSk7XG5cbiAgICAoZVtuYW1lXSB8fCAoZVtuYW1lXSA9IFtdKSkucHVzaCh7XG4gICAgICBmbjogY2FsbGJhY2ssXG4gICAgICBjdHg6IGN0eFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG5cbiAgb25jZTogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrLCBjdHgpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgZnVuY3Rpb24gbGlzdGVuZXIgKCkge1xuICAgICAgc2VsZi5vZmYobmFtZSwgbGlzdGVuZXIpO1xuICAgICAgY2FsbGJhY2suYXBwbHkoY3R4LCBhcmd1bWVudHMpO1xuICAgIH07XG5cbiAgICBsaXN0ZW5lci5fID0gY2FsbGJhY2tcbiAgICByZXR1cm4gdGhpcy5vbihuYW1lLCBsaXN0ZW5lciwgY3R4KTtcbiAgfSxcblxuICBlbWl0OiBmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhciBkYXRhID0gW10uc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgIHZhciBldnRBcnIgPSAoKHRoaXMuZSB8fCAodGhpcy5lID0ge30pKVtuYW1lXSB8fCBbXSkuc2xpY2UoKTtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGxlbiA9IGV2dEFyci5sZW5ndGg7XG5cbiAgICBmb3IgKGk7IGkgPCBsZW47IGkrKykge1xuICAgICAgZXZ0QXJyW2ldLmZuLmFwcGx5KGV2dEFycltpXS5jdHgsIGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIG9mZjogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIGUgPSB0aGlzLmUgfHwgKHRoaXMuZSA9IHt9KTtcbiAgICB2YXIgZXZ0cyA9IGVbbmFtZV07XG4gICAgdmFyIGxpdmVFdmVudHMgPSBbXTtcblxuICAgIGlmIChldnRzICYmIGNhbGxiYWNrKSB7XG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZXZ0cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBpZiAoZXZ0c1tpXS5mbiAhPT0gY2FsbGJhY2sgJiYgZXZ0c1tpXS5mbi5fICE9PSBjYWxsYmFjaylcbiAgICAgICAgICBsaXZlRXZlbnRzLnB1c2goZXZ0c1tpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGV2ZW50IGZyb20gcXVldWUgdG8gcHJldmVudCBtZW1vcnkgbGVha1xuICAgIC8vIFN1Z2dlc3RlZCBieSBodHRwczovL2dpdGh1Yi5jb20vbGF6ZFxuICAgIC8vIFJlZjogaHR0cHM6Ly9naXRodWIuY29tL3Njb3R0Y29yZ2FuL3RpbnktZW1pdHRlci9jb21taXQvYzZlYmZhYTliYzk3M2IzM2QxMTBhODRhMzA3NzQyYjdjZjk0Yzk1MyNjb21taXRjb21tZW50LTUwMjQ5MTBcblxuICAgIChsaXZlRXZlbnRzLmxlbmd0aClcbiAgICAgID8gZVtuYW1lXSA9IGxpdmVFdmVudHNcbiAgICAgIDogZGVsZXRlIGVbbmFtZV07XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBFO1xubW9kdWxlLmV4cG9ydHMuVGlueUVtaXR0ZXIgPSBFO1xuIiwiLyoqXG4gKiB0eXBlZC1mdW5jdGlvblxuICpcbiAqIFR5cGUgY2hlY2tpbmcgZm9yIEphdmFTY3JpcHQgZnVuY3Rpb25zXG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy90eXBlZC1mdW5jdGlvblxuICovXG4ndXNlIHN0cmljdCc7XG5cbihmdW5jdGlvbiAocm9vdCwgZmFjdG9yeSkge1xuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgLy8gQU1ELiBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgbW9kdWxlLlxuICAgIGRlZmluZShbXSwgZmFjdG9yeSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgLy8gT2xkTm9kZS4gRG9lcyBub3Qgd29yayB3aXRoIHN0cmljdCBDb21tb25KUywgYnV0XG4gICAgLy8gb25seSBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgbW9kdWxlLmV4cG9ydHMsXG4gICAgLy8gbGlrZSBPbGROb2RlLlxuICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICB9IGVsc2Uge1xuICAgIC8vIEJyb3dzZXIgZ2xvYmFscyAocm9vdCBpcyB3aW5kb3cpXG4gICAgcm9vdC50eXBlZCA9IGZhY3RvcnkoKTtcbiAgfVxufSh0aGlzLCBmdW5jdGlvbiAoKSB7XG5cbiAgZnVuY3Rpb24gb2sgKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gbm90T2sgKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVuZGVmICgpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEB0eXBlZGVmIHt7XG4gICAqICAgcGFyYW1zOiBQYXJhbVtdLFxuICAgKiAgIGZuOiBmdW5jdGlvblxuICAgKiB9fSBTaWduYXR1cmVcbiAgICpcbiAgICogQHR5cGVkZWYge3tcbiAgICogICB0eXBlczogVHlwZVtdLFxuICAgKiAgIHJlc3RQYXJhbTogYm9vbGVhblxuICAgKiB9fSBQYXJhbVxuICAgKlxuICAgKiBAdHlwZWRlZiB7e1xuICAgKiAgIG5hbWU6IHN0cmluZyxcbiAgICogICB0eXBlSW5kZXg6IG51bWJlcixcbiAgICogICB0ZXN0OiBmdW5jdGlvbixcbiAgICogICBjb252ZXJzaW9uPzogQ29udmVyc2lvbkRlZixcbiAgICogICBjb252ZXJzaW9uSW5kZXg6IG51bWJlcixcbiAgICogfX0gVHlwZVxuICAgKlxuICAgKiBAdHlwZWRlZiB7e1xuICAgKiAgIGZyb206IHN0cmluZyxcbiAgICogICB0bzogc3RyaW5nLFxuICAgKiAgIGNvbnZlcnQ6IGZ1bmN0aW9uICgqKSA6ICpcbiAgICogfX0gQ29udmVyc2lvbkRlZlxuICAgKlxuICAgKiBAdHlwZWRlZiB7e1xuICAgKiAgIG5hbWU6IHN0cmluZyxcbiAgICogICB0ZXN0OiBmdW5jdGlvbigqKSA6IGJvb2xlYW5cbiAgICogfX0gVHlwZURlZlxuICAgKi9cblxuICAvLyBjcmVhdGUgYSBuZXcgaW5zdGFuY2Ugb2YgdHlwZWQtZnVuY3Rpb25cbiAgZnVuY3Rpb24gY3JlYXRlICgpIHtcbiAgICAvLyBkYXRhIHR5cGUgdGVzdHNcbiAgICB2YXIgX3R5cGVzID0gW1xuICAgICAgeyBuYW1lOiAnbnVtYmVyJywgICAgdGVzdDogZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnbnVtYmVyJyB9IH0sXG4gICAgICB7IG5hbWU6ICdzdHJpbmcnLCAgICB0ZXN0OiBmdW5jdGlvbiAoeCkgeyByZXR1cm4gdHlwZW9mIHggPT09ICdzdHJpbmcnIH0gfSxcbiAgICAgIHsgbmFtZTogJ2Jvb2xlYW4nLCAgIHRlc3Q6IGZ1bmN0aW9uICh4KSB7IHJldHVybiB0eXBlb2YgeCA9PT0gJ2Jvb2xlYW4nIH0gfSxcbiAgICAgIHsgbmFtZTogJ0Z1bmN0aW9uJywgIHRlc3Q6IGZ1bmN0aW9uICh4KSB7IHJldHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJ30gfSxcbiAgICAgIHsgbmFtZTogJ0FycmF5JywgICAgIHRlc3Q6IEFycmF5LmlzQXJyYXkgfSxcbiAgICAgIHsgbmFtZTogJ0RhdGUnLCAgICAgIHRlc3Q6IGZ1bmN0aW9uICh4KSB7IHJldHVybiB4IGluc3RhbmNlb2YgRGF0ZSB9IH0sXG4gICAgICB7IG5hbWU6ICdSZWdFeHAnLCAgICB0ZXN0OiBmdW5jdGlvbiAoeCkgeyByZXR1cm4geCBpbnN0YW5jZW9mIFJlZ0V4cCB9IH0sXG4gICAgICB7IG5hbWU6ICdPYmplY3QnLCAgICB0ZXN0OiBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51bGwgJiYgeC5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0XG4gICAgICB9fSxcbiAgICAgIHsgbmFtZTogJ251bGwnLCAgICAgIHRlc3Q6IGZ1bmN0aW9uICh4KSB7IHJldHVybiB4ID09PSBudWxsIH0gfSxcbiAgICAgIHsgbmFtZTogJ3VuZGVmaW5lZCcsIHRlc3Q6IGZ1bmN0aW9uICh4KSB7IHJldHVybiB4ID09PSB1bmRlZmluZWQgfSB9XG4gICAgXTtcblxuICAgIHZhciBhbnlUeXBlID0ge1xuICAgICAgbmFtZTogJ2FueScsXG4gICAgICB0ZXN0OiBva1xuICAgIH1cblxuICAgIC8vIHR5cGVzIHdoaWNoIG5lZWQgdG8gYmUgaWdub3JlZFxuICAgIHZhciBfaWdub3JlID0gW107XG5cbiAgICAvLyB0eXBlIGNvbnZlcnNpb25zXG4gICAgdmFyIF9jb252ZXJzaW9ucyA9IFtdO1xuXG4gICAgLy8gVGhpcyBpcyBhIHRlbXBvcmFyeSBvYmplY3QsIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIHR5cGVkIGZ1bmN0aW9uIGF0IHRoZSBlbmRcbiAgICB2YXIgdHlwZWQgPSB7XG4gICAgICB0eXBlczogX3R5cGVzLFxuICAgICAgY29udmVyc2lvbnM6IF9jb252ZXJzaW9ucyxcbiAgICAgIGlnbm9yZTogX2lnbm9yZVxuICAgIH07XG5cbiAgICAvKipcbiAgICAgKiBGaW5kIHRoZSB0ZXN0IGZ1bmN0aW9uIGZvciBhIHR5cGVcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdHlwZU5hbWVcbiAgICAgKiBAcmV0dXJuIHtUeXBlRGVmfSBSZXR1cm5zIHRoZSB0eXBlIGRlZmluaXRpb24gd2hlbiBmb3VuZCxcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgVGhyb3dzIGEgVHlwZUVycm9yIG90aGVyd2lzZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmRUeXBlQnlOYW1lICh0eXBlTmFtZSkge1xuICAgICAgdmFyIGVudHJ5ID0gZmluZEluQXJyYXkodHlwZWQudHlwZXMsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICByZXR1cm4gZW50cnkubmFtZSA9PT0gdHlwZU5hbWU7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiBlbnRyeTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVOYW1lID09PSAnYW55JykgeyAvLyBzcGVjaWFsIGJha2VkLWluIGNhc2UgJ2FueSdcbiAgICAgICAgcmV0dXJuIGFueVR5cGU7XG4gICAgICB9XG5cbiAgICAgIHZhciBoaW50ID0gZmluZEluQXJyYXkodHlwZWQudHlwZXMsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICByZXR1cm4gZW50cnkubmFtZS50b0xvd2VyQ2FzZSgpID09PSB0eXBlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgfSk7XG5cbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gdHlwZSBcIicgKyB0eXBlTmFtZSArICdcIicgK1xuICAgICAgICAgIChoaW50ID8gKCcuIERpZCB5b3UgbWVhbiBcIicgKyBoaW50Lm5hbWUgKyAnXCI/JykgOiAnJykpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmQgdGhlIGluZGV4IG9mIGEgdHlwZSBkZWZpbml0aW9uLiBIYW5kbGVzIHNwZWNpYWwgY2FzZSAnYW55J1xuICAgICAqIEBwYXJhbSB7VHlwZURlZn0gdHlwZVxuICAgICAqIEByZXR1cm4ge251bWJlcn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaW5kVHlwZUluZGV4KHR5cGUpIHtcbiAgICAgIGlmICh0eXBlID09PSBhbnlUeXBlKSB7XG4gICAgICAgIHJldHVybiA5OTk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0eXBlZC50eXBlcy5pbmRleE9mKHR5cGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmQgYSB0eXBlIHRoYXQgbWF0Y2hlcyBhIHZhbHVlLlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IFJldHVybnMgdGhlIG5hbWUgb2YgdGhlIGZpcnN0IHR5cGUgZm9yIHdoaWNoXG4gICAgICogICAgICAgICAgICAgICAgICB0aGUgdHlwZSB0ZXN0IG1hdGNoZXMgdGhlIHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmRUeXBlTmFtZSh2YWx1ZSkge1xuICAgICAgdmFyIGVudHJ5ID0gZmluZEluQXJyYXkodHlwZWQudHlwZXMsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICByZXR1cm4gZW50cnkudGVzdCh2YWx1ZSk7XG4gICAgICB9KTtcblxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIHJldHVybiBlbnRyeS5uYW1lO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZSBoYXMgdW5rbm93biB0eXBlLiBWYWx1ZTogJyArIHZhbHVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kIGEgc3BlY2lmaWMgc2lnbmF0dXJlIGZyb20gYSAoY29tcG9zZWQpIHR5cGVkIGZ1bmN0aW9uLCBmb3IgZXhhbXBsZTpcbiAgICAgKlxuICAgICAqICAgdHlwZWQuZmluZChmbiwgWydudW1iZXInLCAnc3RyaW5nJ10pXG4gICAgICogICB0eXBlZC5maW5kKGZuLCAnbnVtYmVyLCBzdHJpbmcnKVxuICAgICAqXG4gICAgICogRnVuY3Rpb24gZmluZCBvbmx5IG9ubHkgd29ya3MgZm9yIGV4YWN0IG1hdGNoZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiAgICAgICAgICAgICAgICAgICBBIHR5cGVkLWZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXX0gc2lnbmF0dXJlICAgU2lnbmF0dXJlIHRvIGJlIGZvdW5kLCBjYW4gYmVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbiBhcnJheSBvciBhIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcuXG4gICAgICogQHJldHVybiB7RnVuY3Rpb259ICAgICAgICAgICAgICAgICAgICAgUmV0dXJucyB0aGUgbWF0Y2hpbmcgc2lnbmF0dXJlLCBvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93cyBhbiBlcnJvciB3aGVuIG5vIHNpZ25hdHVyZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIGZvdW5kLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmQgKGZuLCBzaWduYXR1cmUpIHtcbiAgICAgIGlmICghZm4uc2lnbmF0dXJlcykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGdW5jdGlvbiBpcyBubyB0eXBlZC1mdW5jdGlvbicpO1xuICAgICAgfVxuXG4gICAgICAvLyBub3JtYWxpemUgaW5wdXRcbiAgICAgIHZhciBhcnI7XG4gICAgICBpZiAodHlwZW9mIHNpZ25hdHVyZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgYXJyID0gc2lnbmF0dXJlLnNwbGl0KCcsJyk7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgYXJyW2ldID0gYXJyW2ldLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZWxzZSBpZiAoQXJyYXkuaXNBcnJheShzaWduYXR1cmUpKSB7XG4gICAgICAgIGFyciA9IHNpZ25hdHVyZTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdHJpbmcgYXJyYXkgb3IgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nIGV4cGVjdGVkJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdHIgPSBhcnIuam9pbignLCcpO1xuXG4gICAgICAvLyBmaW5kIGFuIGV4YWN0IG1hdGNoXG4gICAgICB2YXIgbWF0Y2ggPSBmbi5zaWduYXR1cmVzW3N0cl07XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgcmV0dXJuIG1hdGNoO1xuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiBleHRlbmQgZmluZCB0byBtYXRjaCBub24tZXhhY3Qgc2lnbmF0dXJlc1xuXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTaWduYXR1cmUgbm90IGZvdW5kIChzaWduYXR1cmU6ICcgKyAoZm4ubmFtZSB8fCAndW5uYW1lZCcpICsgJygnICsgYXJyLmpvaW4oJywgJykgKyAnKSknKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGEgZ2l2ZW4gdmFsdWUgdG8gYW5vdGhlciBkYXRhIHR5cGUuXG4gICAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29udmVydCAodmFsdWUsIHR5cGUpIHtcbiAgICAgIHZhciBmcm9tID0gZmluZFR5cGVOYW1lKHZhbHVlKTtcblxuICAgICAgLy8gY2hlY2sgY29udmVyc2lvbiBpcyBuZWVkZWRcbiAgICAgIGlmICh0eXBlID09PSBmcm9tKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlZC5jb252ZXJzaW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY29udmVyc2lvbiA9IHR5cGVkLmNvbnZlcnNpb25zW2ldO1xuICAgICAgICBpZiAoY29udmVyc2lvbi5mcm9tID09PSBmcm9tICYmIGNvbnZlcnNpb24udG8gPT09IHR5cGUpIHtcbiAgICAgICAgICByZXR1cm4gY29udmVyc2lvbi5jb252ZXJ0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGZyb20gJyArIGZyb20gKyAnIHRvICcgKyB0eXBlKTtcbiAgICB9XG4gICAgXG4gICAgLyoqXG4gICAgICogU3RyaW5naWZ5IHBhcmFtZXRlcnMgaW4gYSBub3JtYWxpemVkIHdheVxuICAgICAqIEBwYXJhbSB7UGFyYW1bXX0gcGFyYW1zXG4gICAgICogQHJldHVybiB7c3RyaW5nfVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHN0cmluZ2lmeVBhcmFtcyAocGFyYW1zKSB7XG4gICAgICByZXR1cm4gcGFyYW1zXG4gICAgICAgICAgLm1hcChmdW5jdGlvbiAocGFyYW0pIHtcbiAgICAgICAgICAgIHZhciB0eXBlTmFtZXMgPSBwYXJhbS50eXBlcy5tYXAoZ2V0VHlwZU5hbWUpO1xuXG4gICAgICAgICAgICByZXR1cm4gKHBhcmFtLnJlc3RQYXJhbSA/ICcuLi4nIDogJycpICsgdHlwZU5hbWVzLmpvaW4oJ3wnKTtcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5qb2luKCcsJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFyc2UgYSBwYXJhbWV0ZXIsIGxpa2UgXCIuLi5udW1iZXIgfCBib29sZWFuXCJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcGFyYW1cbiAgICAgKiBAcGFyYW0ge0NvbnZlcnNpb25EZWZbXX0gY29udmVyc2lvbnNcbiAgICAgKiBAcmV0dXJuIHtQYXJhbX0gcGFyYW1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYXJzZVBhcmFtIChwYXJhbSwgY29udmVyc2lvbnMpIHtcbiAgICAgIHZhciByZXN0UGFyYW0gPSBwYXJhbS5pbmRleE9mKCcuLi4nKSA9PT0gMDtcbiAgICAgIHZhciB0eXBlcyA9ICghcmVzdFBhcmFtKVxuICAgICAgICAgID8gcGFyYW1cbiAgICAgICAgICA6IChwYXJhbS5sZW5ndGggPiAzKVxuICAgICAgICAgICAgICA/IHBhcmFtLnNsaWNlKDMpXG4gICAgICAgICAgICAgIDogJ2FueSc7XG5cbiAgICAgIHZhciB0eXBlTmFtZXMgPSB0eXBlcy5zcGxpdCgnfCcpLm1hcCh0cmltKVxuICAgICAgICAgIC5maWx0ZXIobm90RW1wdHkpXG4gICAgICAgICAgLmZpbHRlcihub3RJZ25vcmUpO1xuXG4gICAgICB2YXIgbWF0Y2hpbmdDb252ZXJzaW9ucyA9IGZpbHRlckNvbnZlcnNpb25zKGNvbnZlcnNpb25zLCB0eXBlTmFtZXMpO1xuXG4gICAgICB2YXIgZXhhY3RUeXBlcyA9IHR5cGVOYW1lcy5tYXAoZnVuY3Rpb24gKHR5cGVOYW1lKSB7XG4gICAgICAgIHZhciB0eXBlID0gZmluZFR5cGVCeU5hbWUodHlwZU5hbWUpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogdHlwZU5hbWUsXG4gICAgICAgICAgdHlwZUluZGV4OiBmaW5kVHlwZUluZGV4KHR5cGUpLFxuICAgICAgICAgIHRlc3Q6IHR5cGUudGVzdCxcbiAgICAgICAgICBjb252ZXJzaW9uOiBudWxsLFxuICAgICAgICAgIGNvbnZlcnNpb25JbmRleDogLTFcbiAgICAgICAgfTtcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgY29udmVydGlibGVUeXBlcyA9IG1hdGNoaW5nQ29udmVyc2lvbnMubWFwKGZ1bmN0aW9uIChjb252ZXJzaW9uKSB7XG4gICAgICAgIHZhciB0eXBlID0gZmluZFR5cGVCeU5hbWUoY29udmVyc2lvbi5mcm9tKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IGNvbnZlcnNpb24uZnJvbSxcbiAgICAgICAgICB0eXBlSW5kZXg6IGZpbmRUeXBlSW5kZXgodHlwZSksXG4gICAgICAgICAgdGVzdDogdHlwZS50ZXN0LFxuICAgICAgICAgIGNvbnZlcnNpb246IGNvbnZlcnNpb24sXG4gICAgICAgICAgY29udmVyc2lvbkluZGV4OiBjb252ZXJzaW9ucy5pbmRleE9mKGNvbnZlcnNpb24pXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZXM6IGV4YWN0VHlwZXMuY29uY2F0KGNvbnZlcnRpYmxlVHlwZXMpLFxuICAgICAgICByZXN0UGFyYW06IHJlc3RQYXJhbVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYXJzZSBhIHNpZ25hdHVyZSB3aXRoIGNvbW1hIHNlcGFyYXRlZCBwYXJhbWV0ZXJzLFxuICAgICAqIGxpa2UgXCJudW1iZXIgfCBib29sZWFuLCAuLi5zdHJpbmdcIlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzaWduYXR1cmVcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmblxuICAgICAqIEBwYXJhbSB7Q29udmVyc2lvbkRlZltdfSBjb252ZXJzaW9uc1xuICAgICAqIEByZXR1cm4ge1NpZ25hdHVyZSB8IG51bGx9IHNpZ25hdHVyZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHBhcnNlU2lnbmF0dXJlIChzaWduYXR1cmUsIGZuLCBjb252ZXJzaW9ucykge1xuICAgICAgdmFyIHBhcmFtcyA9IFtdO1xuXG4gICAgICBpZiAoc2lnbmF0dXJlLnRyaW0oKSAhPT0gJycpIHtcbiAgICAgICAgcGFyYW1zID0gc2lnbmF0dXJlXG4gICAgICAgICAgICAuc3BsaXQoJywnKVxuICAgICAgICAgICAgLm1hcCh0cmltKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAocGFyYW0sIGluZGV4LCBhcnJheSkge1xuICAgICAgICAgICAgICB2YXIgcGFyc2VkUGFyYW0gPSBwYXJzZVBhcmFtKHBhcmFtLCBjb252ZXJzaW9ucyk7XG5cbiAgICAgICAgICAgICAgaWYgKHBhcnNlZFBhcmFtLnJlc3RQYXJhbSAmJiAoaW5kZXggIT09IGFycmF5Lmxlbmd0aCAtIDEpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdVbmV4cGVjdGVkIHJlc3QgcGFyYW1ldGVyIFwiJyArIHBhcmFtICsgJ1wiOiAnICtcbiAgICAgICAgICAgICAgICAgICAgJ29ubHkgYWxsb3dlZCBmb3IgdGhlIGxhc3QgcGFyYW1ldGVyJyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkUGFyYW07XG4gICAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJhbXMuc29tZShpc0ludmFsaWRQYXJhbSkpIHtcbiAgICAgICAgLy8gaW52YWxpZCBzaWduYXR1cmU6IGF0IGxlYXN0IG9uZSBwYXJhbWV0ZXIgaGFzIG5vIHR5cGVzXG4gICAgICAgIC8vICh0aGV5IG1heSBoYXZlIGJlZW4gZmlsdGVyZWQpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgZm46IGZuXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRlc3Qgd2hldGhlciBhIHNldCBvZiBwYXJhbXMgY29udGFpbnMgYSByZXN0UGFyYW1cbiAgICAgKiBAcGFyYW0ge1BhcmFtW119IHBhcmFtc1xuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBsYXN0IHBhcmFtZXRlciBpcyBhIHJlc3RQYXJhbVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc1Jlc3RQYXJhbShwYXJhbXMpIHtcbiAgICAgIHZhciBwYXJhbSA9IGxhc3QocGFyYW1zKVxuICAgICAgcmV0dXJuIHBhcmFtID8gcGFyYW0ucmVzdFBhcmFtIDogZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGVzdCB3aGV0aGVyIGEgcGFyYW1ldGVyIGNvbnRhaW5zIGNvbnZlcnNpb25zXG4gICAgICogQHBhcmFtIHtQYXJhbX0gcGFyYW1cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBhdCBsZWFzdCBvbmUgb2YgdGhlIHBhcmFtZXRlcnNcbiAgICAgKiAgICAgICAgICAgICAgICAgICBjb250YWlucyBhIGNvbnZlcnNpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzQ29udmVyc2lvbnMocGFyYW0pIHtcbiAgICAgIHJldHVybiBwYXJhbS50eXBlcy5zb21lKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIHJldHVybiB0eXBlLmNvbnZlcnNpb24gIT0gbnVsbDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZSBhIHR5cGUgdGVzdCBmb3IgYSBzaW5nbGUgcGFyYW1ldGVyLCB3aGljaCBjYW4gaGF2ZSBvbmUgb3IgbXVsdGlwbGVcbiAgICAgKiB0eXBlcy5cbiAgICAgKiBAcGFyYW0ge1BhcmFtfSBwYXJhbVxuICAgICAqIEByZXR1cm4ge2Z1bmN0aW9uKHg6ICopIDogYm9vbGVhbn0gUmV0dXJucyBhIHRlc3QgZnVuY3Rpb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21waWxlVGVzdChwYXJhbSkge1xuICAgICAgaWYgKCFwYXJhbSB8fCBwYXJhbS50eXBlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgLy8gbm90aGluZyB0byBkb1xuICAgICAgICByZXR1cm4gb2s7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChwYXJhbS50eXBlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmV0dXJuIGZpbmRUeXBlQnlOYW1lKHBhcmFtLnR5cGVzWzBdLm5hbWUpLnRlc3Q7XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChwYXJhbS50eXBlcy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgdmFyIHRlc3QwID0gZmluZFR5cGVCeU5hbWUocGFyYW0udHlwZXNbMF0ubmFtZSkudGVzdDtcbiAgICAgICAgdmFyIHRlc3QxID0gZmluZFR5cGVCeU5hbWUocGFyYW0udHlwZXNbMV0ubmFtZSkudGVzdDtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIG9yKHgpIHtcbiAgICAgICAgICByZXR1cm4gdGVzdDAoeCkgfHwgdGVzdDEoeCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgeyAvLyBwYXJhbS50eXBlcy5sZW5ndGggPiAyXG4gICAgICAgIHZhciB0ZXN0cyA9IHBhcmFtLnR5cGVzLm1hcChmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICAgIHJldHVybiBmaW5kVHlwZUJ5TmFtZSh0eXBlLm5hbWUpLnRlc3Q7XG4gICAgICAgIH0pXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBvcih4KSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRlc3RzW2ldKHgpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSB0ZXN0IGZvciBhbGwgcGFyYW1ldGVycyBvZiBhIHNpZ25hdHVyZVxuICAgICAqIEBwYXJhbSB7UGFyYW1bXX0gcGFyYW1zXG4gICAgICogQHJldHVybiB7ZnVuY3Rpb24oYXJnczogQXJyYXk8Kj4pIDogYm9vbGVhbn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21waWxlVGVzdHMocGFyYW1zKSB7XG4gICAgICB2YXIgdGVzdHMsIHRlc3QwLCB0ZXN0MTtcblxuICAgICAgaWYgKGhhc1Jlc3RQYXJhbShwYXJhbXMpKSB7XG4gICAgICAgIC8vIHZhcmlhYmxlIGFyZ3VtZW50cyBsaWtlICcuLi5udW1iZXInXG4gICAgICAgIHRlc3RzID0gaW5pdGlhbChwYXJhbXMpLm1hcChjb21waWxlVGVzdCk7XG4gICAgICAgIHZhciB2YXJJbmRleCA9IHRlc3RzLmxlbmd0aDtcbiAgICAgICAgdmFyIGxhc3RUZXN0ID0gY29tcGlsZVRlc3QobGFzdChwYXJhbXMpKTtcbiAgICAgICAgdmFyIHRlc3RSZXN0UGFyYW0gPSBmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgIGZvciAodmFyIGkgPSB2YXJJbmRleDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghbGFzdFRlc3QoYXJnc1tpXSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiB0ZXN0QXJncyhhcmdzKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKCF0ZXN0c1tpXShhcmdzW2ldKSkge1xuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0ZXN0UmVzdFBhcmFtKGFyZ3MpICYmIChhcmdzLmxlbmd0aCA+PSB2YXJJbmRleCArIDEpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIC8vIG5vIHZhcmlhYmxlIGFyZ3VtZW50c1xuICAgICAgICBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiB0ZXN0QXJncyhhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJncy5sZW5ndGggPT09IDA7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwYXJhbXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgdGVzdDAgPSBjb21waWxlVGVzdChwYXJhbXNbMF0pO1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiB0ZXN0QXJncyhhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gdGVzdDAoYXJnc1swXSkgJiYgYXJncy5sZW5ndGggPT09IDE7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwYXJhbXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgdGVzdDAgPSBjb21waWxlVGVzdChwYXJhbXNbMF0pO1xuICAgICAgICAgIHRlc3QxID0gY29tcGlsZVRlc3QocGFyYW1zWzFdKTtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gdGVzdEFyZ3MoYXJncykge1xuICAgICAgICAgICAgcmV0dXJuIHRlc3QwKGFyZ3NbMF0pICYmIHRlc3QxKGFyZ3NbMV0pICYmIGFyZ3MubGVuZ3RoID09PSAyO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7IC8vIGFyZ3VtZW50cy5sZW5ndGggPiAyXG4gICAgICAgICAgdGVzdHMgPSBwYXJhbXMubWFwKGNvbXBpbGVUZXN0KTtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gdGVzdEFyZ3MoYXJncykge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZiAoIXRlc3RzW2ldKGFyZ3NbaV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXJncy5sZW5ndGggPT09IHRlc3RzLmxlbmd0aDtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluZCB0aGUgcGFyYW1ldGVyIGF0IGEgc3BlY2lmaWMgaW5kZXggb2YgYSBzaWduYXR1cmUuXG4gICAgICogSGFuZGxlcyByZXN0IHBhcmFtZXRlcnMuXG4gICAgICogQHBhcmFtIHtTaWduYXR1cmV9IHNpZ25hdHVyZVxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICAgICAqIEByZXR1cm4ge1BhcmFtIHwgbnVsbH0gUmV0dXJucyB0aGUgbWF0Y2hpbmcgcGFyYW1ldGVyIHdoZW4gZm91bmQsXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICBudWxsIG90aGVyd2lzZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRQYXJhbUF0SW5kZXgoc2lnbmF0dXJlLCBpbmRleCkge1xuICAgICAgcmV0dXJuIGluZGV4IDwgc2lnbmF0dXJlLnBhcmFtcy5sZW5ndGhcbiAgICAgICAgICA/IHNpZ25hdHVyZS5wYXJhbXNbaW5kZXhdXG4gICAgICAgICAgOiBoYXNSZXN0UGFyYW0oc2lnbmF0dXJlLnBhcmFtcylcbiAgICAgICAgICAgICAgPyBsYXN0KHNpZ25hdHVyZS5wYXJhbXMpXG4gICAgICAgICAgICAgIDogbnVsbFxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBhbGwgdHlwZSBuYW1lcyBvZiBhIHBhcmFtZXRlclxuICAgICAqIEBwYXJhbSB7U2lnbmF0dXJlfSBzaWduYXR1cmVcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV4Y2x1ZGVDb252ZXJzaW9uc1xuICAgICAqIEByZXR1cm4ge3N0cmluZ1tdfSBSZXR1cm5zIGFuIGFycmF5IHdpdGggdHlwZSBuYW1lc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldEV4cGVjdGVkVHlwZU5hbWVzIChzaWduYXR1cmUsIGluZGV4LCBleGNsdWRlQ29udmVyc2lvbnMpIHtcbiAgICAgIHZhciBwYXJhbSA9IGdldFBhcmFtQXRJbmRleChzaWduYXR1cmUsIGluZGV4KTtcbiAgICAgIHZhciB0eXBlcyA9IHBhcmFtXG4gICAgICAgICAgPyBleGNsdWRlQ29udmVyc2lvbnNcbiAgICAgICAgICAgICAgICAgID8gcGFyYW0udHlwZXMuZmlsdGVyKGlzRXhhY3RUeXBlKVxuICAgICAgICAgICAgICAgICAgOiBwYXJhbS50eXBlc1xuICAgICAgICAgIDogW107XG5cbiAgICAgIHJldHVybiB0eXBlcy5tYXAoZ2V0VHlwZU5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIG5hbWUgb2YgYSB0eXBlXG4gICAgICogQHBhcmFtIHtUeXBlfSB0eXBlXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBSZXR1cm5zIHRoZSB0eXBlIG5hbWVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRUeXBlTmFtZSh0eXBlKSB7XG4gICAgICByZXR1cm4gdHlwZS5uYW1lO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRlc3Qgd2hldGhlciBhIHR5cGUgaXMgYW4gZXhhY3QgdHlwZSBvciBjb252ZXJzaW9uXG4gICAgICogQHBhcmFtIHtUeXBlfSB0eXBlXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0V4YWN0VHlwZSh0eXBlKSB7XG4gICAgICByZXR1cm4gdHlwZS5jb252ZXJzaW9uID09PSBudWxsIHx8IHR5cGUuY29udmVyc2lvbiA9PT0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhlbHBlciBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgZXJyb3IgbWVzc2FnZXM6IGNyZWF0ZSBhbiBhcnJheSB3aXRoXG4gICAgICogYWxsIGF2YWlsYWJsZSB0eXBlcyBvbiBhIHNwZWNpZmljIGFyZ3VtZW50IGluZGV4LlxuICAgICAqIEBwYXJhbSB7U2lnbmF0dXJlW119IHNpZ25hdHVyZXNcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gUmV0dXJucyBhbiBhcnJheSB3aXRoIGF2YWlsYWJsZSB0eXBlc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIG1lcmdlRXhwZWN0ZWRQYXJhbXMoc2lnbmF0dXJlcywgaW5kZXgpIHtcbiAgICAgIHZhciB0eXBlTmFtZXMgPSB1bmlxKGZsYXRNYXAoc2lnbmF0dXJlcywgZnVuY3Rpb24gKHNpZ25hdHVyZSkge1xuICAgICAgICByZXR1cm4gZ2V0RXhwZWN0ZWRUeXBlTmFtZXMoc2lnbmF0dXJlLCBpbmRleCwgZmFsc2UpO1xuICAgICAgfSkpO1xuXG4gICAgICByZXR1cm4gKHR5cGVOYW1lcy5pbmRleE9mKCdhbnknKSAhPT0gLTEpID8gWydhbnknXSA6IHR5cGVOYW1lcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgICAgICAgICAgICBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge2FycmF5LjwqPn0gYXJncyAgICAgICAgICBUaGUgYWN0dWFsIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHtTaWduYXR1cmVbXX0gc2lnbmF0dXJlcyAgQSBsaXN0IHdpdGggYXZhaWxhYmxlIHNpZ25hdHVyZXNcbiAgICAgKiBAcmV0dXJuIHtUeXBlRXJyb3J9IFJldHVybnMgYSB0eXBlIGVycm9yIHdpdGggYWRkaXRpb25hbCBkYXRhXG4gICAgICogICAgICAgICAgICAgICAgICAgICBhdHRhY2hlZCB0byBpdCBpbiB0aGUgcHJvcGVydHkgYGRhdGFgXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlRXJyb3IobmFtZSwgYXJncywgc2lnbmF0dXJlcykge1xuICAgICAgdmFyIGVyciwgZXhwZWN0ZWQ7XG4gICAgICB2YXIgX25hbWUgPSBuYW1lIHx8ICd1bm5hbWVkJztcblxuICAgICAgLy8gdGVzdCBmb3Igd3JvbmcgdHlwZSBhdCBzb21lIGluZGV4XG4gICAgICB2YXIgbWF0Y2hpbmdTaWduYXR1cmVzID0gc2lnbmF0dXJlcztcbiAgICAgIHZhciBpbmRleDtcbiAgICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGFyZ3MubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgIHZhciBuZXh0TWF0Y2hpbmdEZWZzID0gbWF0Y2hpbmdTaWduYXR1cmVzLmZpbHRlcihmdW5jdGlvbiAoc2lnbmF0dXJlKSB7XG4gICAgICAgICAgdmFyIHRlc3QgPSBjb21waWxlVGVzdChnZXRQYXJhbUF0SW5kZXgoc2lnbmF0dXJlLCBpbmRleCkpO1xuICAgICAgICAgIHJldHVybiAoaW5kZXggPCBzaWduYXR1cmUucGFyYW1zLmxlbmd0aCB8fCBoYXNSZXN0UGFyYW0oc2lnbmF0dXJlLnBhcmFtcykpICYmXG4gICAgICAgICAgICAgIHRlc3QoYXJnc1tpbmRleF0pO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAobmV4dE1hdGNoaW5nRGVmcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAvLyBubyBtYXRjaGluZyBzaWduYXR1cmVzIGFueW1vcmUsIHRocm93IGVycm9yIFwid3JvbmcgdHlwZVwiXG4gICAgICAgICAgZXhwZWN0ZWQgPSBtZXJnZUV4cGVjdGVkUGFyYW1zKG1hdGNoaW5nU2lnbmF0dXJlcywgaW5kZXgpO1xuICAgICAgICAgIGlmIChleHBlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB2YXIgYWN0dWFsVHlwZSA9IGZpbmRUeXBlTmFtZShhcmdzW2luZGV4XSk7XG5cbiAgICAgICAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgdHlwZSBvZiBhcmd1bWVudCBpbiBmdW5jdGlvbiAnICsgX25hbWUgK1xuICAgICAgICAgICAgICAgICcgKGV4cGVjdGVkOiAnICsgZXhwZWN0ZWQuam9pbignIG9yICcpICtcbiAgICAgICAgICAgICAgICAnLCBhY3R1YWw6ICcgKyBhY3R1YWxUeXBlICsgJywgaW5kZXg6ICcgKyBpbmRleCArICcpJyk7XG4gICAgICAgICAgICBlcnIuZGF0YSA9IHtcbiAgICAgICAgICAgICAgY2F0ZWdvcnk6ICd3cm9uZ1R5cGUnLFxuICAgICAgICAgICAgICBmbjogX25hbWUsXG4gICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgYWN0dWFsOiBhY3R1YWxUeXBlLFxuICAgICAgICAgICAgICBleHBlY3RlZDogZXhwZWN0ZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBlcnI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIG1hdGNoaW5nU2lnbmF0dXJlcyA9IG5leHRNYXRjaGluZ0RlZnM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gdGVzdCBmb3IgdG9vIGZldyBhcmd1bWVudHNcbiAgICAgIHZhciBsZW5ndGhzID0gbWF0Y2hpbmdTaWduYXR1cmVzLm1hcChmdW5jdGlvbiAoc2lnbmF0dXJlKSB7XG4gICAgICAgIHJldHVybiBoYXNSZXN0UGFyYW0oc2lnbmF0dXJlLnBhcmFtcykgPyBJbmZpbml0eSA6IHNpZ25hdHVyZS5wYXJhbXMubGVuZ3RoO1xuICAgICAgfSk7XG4gICAgICBpZiAoYXJncy5sZW5ndGggPCBNYXRoLm1pbi5hcHBseShudWxsLCBsZW5ndGhzKSkge1xuICAgICAgICBleHBlY3RlZCA9IG1lcmdlRXhwZWN0ZWRQYXJhbXMobWF0Y2hpbmdTaWduYXR1cmVzLCBpbmRleCk7XG4gICAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ1RvbyBmZXcgYXJndW1lbnRzIGluIGZ1bmN0aW9uICcgKyBfbmFtZSArXG4gICAgICAgICAgICAnIChleHBlY3RlZDogJyArIGV4cGVjdGVkLmpvaW4oJyBvciAnKSArXG4gICAgICAgICAgICAnLCBpbmRleDogJyArIGFyZ3MubGVuZ3RoICsgJyknKTtcbiAgICAgICAgZXJyLmRhdGEgPSB7XG4gICAgICAgICAgY2F0ZWdvcnk6ICd0b29GZXdBcmdzJyxcbiAgICAgICAgICBmbjogX25hbWUsXG4gICAgICAgICAgaW5kZXg6IGFyZ3MubGVuZ3RoLFxuICAgICAgICAgIGV4cGVjdGVkOiBleHBlY3RlZFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcnI7XG4gICAgICB9XG5cbiAgICAgIC8vIHRlc3QgZm9yIHRvbyBtYW55IGFyZ3VtZW50c1xuICAgICAgdmFyIG1heExlbmd0aCA9IE1hdGgubWF4LmFwcGx5KG51bGwsIGxlbmd0aHMpO1xuICAgICAgaWYgKGFyZ3MubGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ1RvbyBtYW55IGFyZ3VtZW50cyBpbiBmdW5jdGlvbiAnICsgX25hbWUgK1xuICAgICAgICAgICAgJyAoZXhwZWN0ZWQ6ICcgKyBtYXhMZW5ndGggKyAnLCBhY3R1YWw6ICcgKyBhcmdzLmxlbmd0aCArICcpJyk7XG4gICAgICAgIGVyci5kYXRhID0ge1xuICAgICAgICAgIGNhdGVnb3J5OiAndG9vTWFueUFyZ3MnLFxuICAgICAgICAgIGZuOiBfbmFtZSxcbiAgICAgICAgICBpbmRleDogYXJncy5sZW5ndGgsXG4gICAgICAgICAgZXhwZWN0ZWRMZW5ndGg6IG1heExlbmd0aFxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcnI7XG4gICAgICB9XG5cbiAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyBvZiB0eXBlIFwiJyArIGFyZ3Muam9pbignLCAnKSArXG4gICAgICAgICAgJ1wiIGRvIG5vdCBtYXRjaCBhbnkgb2YgdGhlIGRlZmluZWQgc2lnbmF0dXJlcyBvZiBmdW5jdGlvbiAnICsgX25hbWUgKyAnLicpO1xuICAgICAgZXJyLmRhdGEgPSB7XG4gICAgICAgIGNhdGVnb3J5OiAnbWlzbWF0Y2gnLFxuICAgICAgICBhY3R1YWw6IGFyZ3MubWFwKGZpbmRUeXBlTmFtZSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBlcnI7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluZCB0aGUgbG93ZXN0IGluZGV4IG9mIGFsbCBleGFjdCB0eXBlcyBvZiBhIHBhcmFtZXRlciAobm8gY29udmVyc2lvbnMpXG4gICAgICogQHBhcmFtIHtQYXJhbX0gcGFyYW1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBsb3dlc3QgdHlwZSBpbiB0eXBlZC50eXBlc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldExvd2VzdFR5cGVJbmRleCAocGFyYW0pIHtcbiAgICAgIHZhciBtaW4gPSA5OTk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcGFyYW0udHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGlzRXhhY3RUeXBlKHBhcmFtLnR5cGVzW2ldKSkge1xuICAgICAgICAgIG1pbiA9IE1hdGgubWluKG1pbiwgcGFyYW0udHlwZXNbaV0udHlwZUluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWluO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmQgdGhlIGxvd2VzdCBpbmRleCBvZiB0aGUgY29udmVyc2lvbiBvZiBhbGwgdHlwZXMgb2YgdGhlIHBhcmFtZXRlclxuICAgICAqIGhhdmluZyBhIGNvbnZlcnNpb25cbiAgICAgKiBAcGFyYW0ge1BhcmFtfSBwYXJhbVxuICAgICAqIEByZXR1cm4ge251bWJlcn0gUmV0dXJucyB0aGUgbG93ZXN0IGluZGV4IG9mIHRoZSBjb252ZXJzaW9ucyBvZiB0aGlzIHR5cGVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRMb3dlc3RDb252ZXJzaW9uSW5kZXggKHBhcmFtKSB7XG4gICAgICB2YXIgbWluID0gOTk5O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtLnR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghaXNFeGFjdFR5cGUocGFyYW0udHlwZXNbaV0pKSB7XG4gICAgICAgICAgbWluID0gTWF0aC5taW4obWluLCBwYXJhbS50eXBlc1tpXS5jb252ZXJzaW9uSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtaW47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcGFyZSB0d28gcGFyYW1zXG4gICAgICogQHBhcmFtIHtQYXJhbX0gcGFyYW0xXG4gICAgICogQHBhcmFtIHtQYXJhbX0gcGFyYW0yXG4gICAgICogQHJldHVybiB7bnVtYmVyfSByZXR1cm5zIGEgbmVnYXRpdmUgbnVtYmVyIHdoZW4gcGFyYW0xIG11c3QgZ2V0IGEgbG93ZXJcbiAgICAgKiAgICAgICAgICAgICAgICAgIGluZGV4IHRoYW4gcGFyYW0yLCBhIHBvc2l0aXZlIG51bWJlciB3aGVuIHRoZSBvcHBvc2l0ZSxcbiAgICAgKiAgICAgICAgICAgICAgICAgIG9yIHplcm8gd2hlbiBib3RoIGFyZSBlcXVhbFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBhcmVQYXJhbXMgKHBhcmFtMSwgcGFyYW0yKSB7XG4gICAgICB2YXIgYztcblxuICAgICAgLy8gY29tcGFyZSBoYXZpbmcgYSByZXN0IHBhcmFtZXRlciBvciBub3RcbiAgICAgIGMgPSBwYXJhbTEucmVzdFBhcmFtIC0gcGFyYW0yLnJlc3RQYXJhbTtcbiAgICAgIGlmIChjICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfVxuXG4gICAgICAvLyBjb21wYXJlIGhhdmluZyBjb252ZXJzaW9ucyBvciBub3RcbiAgICAgIGMgPSBoYXNDb252ZXJzaW9ucyhwYXJhbTEpIC0gaGFzQ29udmVyc2lvbnMocGFyYW0yKTtcbiAgICAgIGlmIChjICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfVxuXG4gICAgICAvLyBjb21wYXJlIHRoZSBpbmRleCBvZiB0aGUgdHlwZXNcbiAgICAgIGMgPSBnZXRMb3dlc3RUeXBlSW5kZXgocGFyYW0xKSAtIGdldExvd2VzdFR5cGVJbmRleChwYXJhbTIpO1xuICAgICAgaWYgKGMgIT09IDApIHtcbiAgICAgICAgcmV0dXJuIGM7XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbXBhcmUgdGhlIGluZGV4IG9mIGFueSBjb252ZXJzaW9uXG4gICAgICByZXR1cm4gZ2V0TG93ZXN0Q29udmVyc2lvbkluZGV4KHBhcmFtMSkgLSBnZXRMb3dlc3RDb252ZXJzaW9uSW5kZXgocGFyYW0yKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wYXJlIHR3byBzaWduYXR1cmVzXG4gICAgICogQHBhcmFtIHtTaWduYXR1cmV9IHNpZ25hdHVyZTFcbiAgICAgKiBAcGFyYW0ge1NpZ25hdHVyZX0gc2lnbmF0dXJlMlxuICAgICAqIEByZXR1cm4ge251bWJlcn0gcmV0dXJucyBhIG5lZ2F0aXZlIG51bWJlciB3aGVuIHBhcmFtMSBtdXN0IGdldCBhIGxvd2VyXG4gICAgICogICAgICAgICAgICAgICAgICBpbmRleCB0aGFuIHBhcmFtMiwgYSBwb3NpdGl2ZSBudW1iZXIgd2hlbiB0aGUgb3Bwb3NpdGUsXG4gICAgICogICAgICAgICAgICAgICAgICBvciB6ZXJvIHdoZW4gYm90aCBhcmUgZXF1YWxcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21wYXJlU2lnbmF0dXJlcyAoc2lnbmF0dXJlMSwgc2lnbmF0dXJlMikge1xuICAgICAgdmFyIGxlbiA9IE1hdGgubWluKHNpZ25hdHVyZTEucGFyYW1zLmxlbmd0aCwgc2lnbmF0dXJlMi5wYXJhbXMubGVuZ3RoKTtcbiAgICAgIHZhciBpO1xuICAgICAgdmFyIGM7XG5cbiAgICAgIC8vIGNvbXBhcmUgd2hldGhlciB0aGUgcGFyYW1zIGhhdmUgY29udmVyc2lvbnMgYXQgYWxsIG9yIG5vdFxuICAgICAgYyA9IHNpZ25hdHVyZTEucGFyYW1zLnNvbWUoaGFzQ29udmVyc2lvbnMpIC0gc2lnbmF0dXJlMi5wYXJhbXMuc29tZShoYXNDb252ZXJzaW9ucylcbiAgICAgIGlmIChjICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfVxuXG4gICAgICAvLyBuZXh0IGNvbXBhcmUgd2hldGhlciB0aGUgcGFyYW1zIGhhdmUgY29udmVyc2lvbnMgb25lIGJ5IG9uZVxuICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGMgPSBoYXNDb252ZXJzaW9ucyhzaWduYXR1cmUxLnBhcmFtc1tpXSkgLSBoYXNDb252ZXJzaW9ucyhzaWduYXR1cmUyLnBhcmFtc1tpXSk7XG4gICAgICAgIGlmIChjICE9PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gY29tcGFyZSB0aGUgdHlwZXMgb2YgdGhlIHBhcmFtcyBvbmUgYnkgb25lXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgYyA9IGNvbXBhcmVQYXJhbXMoc2lnbmF0dXJlMS5wYXJhbXNbaV0sIHNpZ25hdHVyZTIucGFyYW1zW2ldKTtcbiAgICAgICAgaWYgKGMgIT09IDApIHtcbiAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBjb21wYXJlIHRoZSBudW1iZXIgb2YgcGFyYW1zXG4gICAgICByZXR1cm4gc2lnbmF0dXJlMS5wYXJhbXMubGVuZ3RoIC0gc2lnbmF0dXJlMi5wYXJhbXMubGVuZ3RoO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEdldCBwYXJhbXMgY29udGFpbmluZyBhbGwgdHlwZXMgdGhhdCBjYW4gYmUgY29udmVydGVkIHRvIHRoZSBkZWZpbmVkIHR5cGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtDb252ZXJzaW9uRGVmW119IGNvbnZlcnNpb25zXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gdHlwZU5hbWVzXG4gICAgICogQHJldHVybiB7Q29udmVyc2lvbkRlZltdfSBSZXR1cm5zIHRoZSBjb252ZXJzaW9ucyB0aGF0IGFyZSBhdmFpbGFibGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGZvciBldmVyeSB0eXBlIChpZiBhbnkpXG4gICAgICovXG4gICAgZnVuY3Rpb24gZmlsdGVyQ29udmVyc2lvbnMoY29udmVyc2lvbnMsIHR5cGVOYW1lcykge1xuICAgICAgdmFyIG1hdGNoZXMgPSB7fTtcblxuICAgICAgY29udmVyc2lvbnMuZm9yRWFjaChmdW5jdGlvbiAoY29udmVyc2lvbikge1xuICAgICAgICBpZiAodHlwZU5hbWVzLmluZGV4T2YoY29udmVyc2lvbi5mcm9tKSA9PT0gLTEgJiZcbiAgICAgICAgICAgIHR5cGVOYW1lcy5pbmRleE9mKGNvbnZlcnNpb24udG8pICE9PSAtMSAmJlxuICAgICAgICAgICAgIW1hdGNoZXNbY29udmVyc2lvbi5mcm9tXSkge1xuICAgICAgICAgIG1hdGNoZXNbY29udmVyc2lvbi5mcm9tXSA9IGNvbnZlcnNpb247XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMobWF0Y2hlcykubWFwKGZ1bmN0aW9uIChmcm9tKSB7XG4gICAgICAgIHJldHVybiBtYXRjaGVzW2Zyb21dO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJlcHJvY2VzcyBhcmd1bWVudHMgYmVmb3JlIGNhbGxpbmcgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uOlxuICAgICAqIC0gaWYgbmVlZGVkIGNvbnZlcnQgdGhlIHBhcmFtZXRlcnNcbiAgICAgKiAtIGluIGNhc2Ugb2YgcmVzdCBwYXJhbWV0ZXJzLCBtb3ZlIHRoZSByZXN0IHBhcmFtZXRlcnMgaW50byBhbiBBcnJheVxuICAgICAqIEBwYXJhbSB7UGFyYW1bXX0gcGFyYW1zXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gZm5cbiAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIHdyYXBwZWQgZnVuY3Rpb25cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21waWxlQXJnc1ByZXByb2Nlc3NpbmcocGFyYW1zLCBmbikge1xuICAgICAgdmFyIGZuQ29udmVydCA9IGZuO1xuXG4gICAgICAvLyBUT0RPOiBjYW4gd2UgbWFrZSB0aGlzIHdyYXBwZXIgZnVuY3Rpb24gc21hcnRlci9zaW1wbGVyP1xuXG4gICAgICBpZiAocGFyYW1zLnNvbWUoaGFzQ29udmVyc2lvbnMpKSB7XG4gICAgICAgIHZhciByZXN0UGFyYW0gPSBoYXNSZXN0UGFyYW0ocGFyYW1zKTtcbiAgICAgICAgdmFyIGNvbXBpbGVkQ29udmVyc2lvbnMgPSBwYXJhbXMubWFwKGNvbXBpbGVBcmdDb252ZXJzaW9uKVxuXG4gICAgICAgIGZuQ29udmVydCA9IGZ1bmN0aW9uIGNvbnZlcnRBcmdzKCkge1xuICAgICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgICAgdmFyIGxhc3QgPSByZXN0UGFyYW0gPyBhcmd1bWVudHMubGVuZ3RoIC0gMSA6IGFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0OyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaV0gPSBjb21waWxlZENvbnZlcnNpb25zW2ldKGFyZ3VtZW50c1tpXSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChyZXN0UGFyYW0pIHtcbiAgICAgICAgICAgIGFyZ3NbbGFzdF0gPSBhcmd1bWVudHNbbGFzdF0ubWFwKGNvbXBpbGVkQ29udmVyc2lvbnNbbGFzdF0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgZm5QcmVwcm9jZXNzID0gZm5Db252ZXJ0O1xuICAgICAgaWYgKGhhc1Jlc3RQYXJhbShwYXJhbXMpKSB7XG4gICAgICAgIHZhciBvZmZzZXQgPSBwYXJhbXMubGVuZ3RoIC0gMTtcblxuICAgICAgICBmblByZXByb2Nlc3MgPSBmdW5jdGlvbiBwcmVwcm9jZXNzUmVzdFBhcmFtcyAoKSB7XG4gICAgICAgICAgcmV0dXJuIGZuQ29udmVydC5hcHBseShudWxsLFxuICAgICAgICAgICAgICBzbGljZShhcmd1bWVudHMsIDAsIG9mZnNldCkuY29uY2F0KFtzbGljZShhcmd1bWVudHMsIG9mZnNldCldKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZuUHJlcHJvY2VzcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21waWxlIGNvbnZlcnNpb24gZm9yIGEgcGFyYW1ldGVyIHRvIHRoZSByaWdodCB0eXBlXG4gICAgICogQHBhcmFtIHtQYXJhbX0gcGFyYW1cbiAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyB0aGUgd3JhcHBlZCBmdW5jdGlvbiB0aGF0IHdpbGwgY29udmVydCBhcmd1bWVudHNcbiAgICAgKlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbXBpbGVBcmdDb252ZXJzaW9uKHBhcmFtKSB7XG4gICAgICB2YXIgdGVzdDAsIHRlc3QxLCBjb252ZXJzaW9uMCwgY29udmVyc2lvbjE7XG4gICAgICB2YXIgdGVzdHMgPSBbXTtcbiAgICAgIHZhciBjb252ZXJzaW9ucyA9IFtdO1xuXG4gICAgICBwYXJhbS50eXBlcy5mb3JFYWNoKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgIGlmICh0eXBlLmNvbnZlcnNpb24pIHtcbiAgICAgICAgICB0ZXN0cy5wdXNoKGZpbmRUeXBlQnlOYW1lKHR5cGUuY29udmVyc2lvbi5mcm9tKS50ZXN0KTtcbiAgICAgICAgICBjb252ZXJzaW9ucy5wdXNoKHR5cGUuY29udmVyc2lvbi5jb252ZXJ0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIGNyZWF0ZSBvcHRpbWl6ZWQgY29udmVyc2lvbiBmdW5jdGlvbnMgZGVwZW5kaW5nIG9uIHRoZSBudW1iZXIgb2YgY29udmVyc2lvbnNcbiAgICAgIHN3aXRjaCAoY29udmVyc2lvbnMubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gY29udmVydEFyZyhhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICB0ZXN0MCA9IHRlc3RzWzBdXG4gICAgICAgICAgY29udmVyc2lvbjAgPSBjb252ZXJzaW9uc1swXTtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gY29udmVydEFyZyhhcmcpIHtcbiAgICAgICAgICAgIGlmICh0ZXN0MChhcmcpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjb252ZXJzaW9uMChhcmcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgdGVzdDAgPSB0ZXN0c1swXVxuICAgICAgICAgIHRlc3QxID0gdGVzdHNbMV1cbiAgICAgICAgICBjb252ZXJzaW9uMCA9IGNvbnZlcnNpb25zWzBdO1xuICAgICAgICAgIGNvbnZlcnNpb24xID0gY29udmVyc2lvbnNbMV07XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbnZlcnRBcmcoYXJnKSB7XG4gICAgICAgICAgICBpZiAodGVzdDAoYXJnKSkge1xuICAgICAgICAgICAgICByZXR1cm4gY29udmVyc2lvbjAoYXJnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRlc3QxKGFyZykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnNpb24xKGFyZylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbnZlcnRBcmcoYXJnKSB7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNvbnZlcnNpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgIGlmICh0ZXN0c1tpXShhcmcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnNpb25zW2ldKGFyZyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcmc7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbnZlcnQgYW4gYXJyYXkgd2l0aCBzaWduYXR1cmVzIGludG8gYSBtYXAgd2l0aCBzaWduYXR1cmVzLFxuICAgICAqIHdoZXJlIHNpZ25hdHVyZXMgd2l0aCB1bmlvbiB0eXBlcyBhcmUgc3BsaXQgaW50byBzZXBhcmF0ZSBzaWduYXR1cmVzXG4gICAgICpcbiAgICAgKiBUaHJvd3MgYW4gZXJyb3Igd2hlbiB0aGVyZSBhcmUgY29uZmxpY3RpbmcgdHlwZXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U2lnbmF0dXJlW119IHNpZ25hdHVyZXNcbiAgICAgKiBAcmV0dXJuIHtPYmplY3QuPHN0cmluZywgZnVuY3Rpb24+fSAgUmV0dXJucyBhIG1hcCB3aXRoIHNpZ25hdHVyZXNcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMga2V5IGFuZCB0aGUgb3JpZ2luYWwgZnVuY3Rpb25cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhpcyBzaWduYXR1cmUgYXMgdmFsdWUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlU2lnbmF0dXJlc01hcChzaWduYXR1cmVzKSB7XG4gICAgICB2YXIgc2lnbmF0dXJlc01hcCA9IHt9O1xuICAgICAgc2lnbmF0dXJlcy5mb3JFYWNoKGZ1bmN0aW9uIChzaWduYXR1cmUpIHtcbiAgICAgICAgaWYgKCFzaWduYXR1cmUucGFyYW1zLnNvbWUoaGFzQ29udmVyc2lvbnMpKSB7XG4gICAgICAgICAgc3BsaXRQYXJhbXMoc2lnbmF0dXJlLnBhcmFtcywgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgICAgICBzaWduYXR1cmVzTWFwW3N0cmluZ2lmeVBhcmFtcyhwYXJhbXMpXSA9IHNpZ25hdHVyZS5mbjtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBzaWduYXR1cmVzTWFwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNwbGl0IHBhcmFtcyB3aXRoIHVuaW9uIHR5cGVzIGluIHRvIHNlcGFyYXRlIHBhcmFtcy5cbiAgICAgKlxuICAgICAqIEZvciBleGFtcGxlOlxuICAgICAqXG4gICAgICogICAgIHNwbGl0UGFyYW1zKFtbJ0FycmF5JywgJ09iamVjdCddLCBbJ3N0cmluZycsICdSZWdFeHAnXSlcbiAgICAgKiAgICAgLy8gcmV0dXJuczpcbiAgICAgKiAgICAgLy8gW1xuICAgICAqICAgICAvLyAgIFsnQXJyYXknLCAnc3RyaW5nJ10sXG4gICAgICogICAgIC8vICAgWydBcnJheScsICdSZWdFeHAnXSxcbiAgICAgKiAgICAgLy8gICBbJ09iamVjdCcsICdzdHJpbmcnXSxcbiAgICAgKiAgICAgLy8gICBbJ09iamVjdCcsICdSZWdFeHAnXVxuICAgICAqICAgICAvLyBdXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1BhcmFtW119IHBhcmFtc1xuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaWdub3JlQ29udmVyc2lvblR5cGVzXG4gICAgICogQHJldHVybiB7UGFyYW1bXX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzcGxpdFBhcmFtcyhwYXJhbXMsIGlnbm9yZUNvbnZlcnNpb25UeXBlcykge1xuICAgICAgZnVuY3Rpb24gX3NwbGl0UGFyYW1zKHBhcmFtcywgaW5kZXgsIHR5cGVzKSB7XG4gICAgICAgIGlmIChpbmRleCA8IHBhcmFtcy5sZW5ndGgpIHtcbiAgICAgICAgICB2YXIgcGFyYW0gPSBwYXJhbXNbaW5kZXhdXG4gICAgICAgICAgdmFyIGZpbHRlcmVkVHlwZXMgPSBpZ25vcmVDb252ZXJzaW9uVHlwZXNcbiAgICAgICAgICAgICAgPyBwYXJhbS50eXBlcy5maWx0ZXIoaXNFeGFjdFR5cGUpXG4gICAgICAgICAgICAgIDogcGFyYW0udHlwZXM7XG4gICAgICAgICAgdmFyIHR5cGVHcm91cHNcblxuICAgICAgICAgIGlmIChwYXJhbS5yZXN0UGFyYW0pIHtcbiAgICAgICAgICAgIC8vIHNwbGl0IHRoZSB0eXBlcyBvZiBhIHJlc3QgcGFyYW1ldGVyIGluIHR3bzpcbiAgICAgICAgICAgIC8vIG9uZSB3aXRoIG9ubHkgZXhhY3QgdHlwZXMsIGFuZCBvbmUgd2l0aCBleGFjdCB0eXBlcyBhbmQgY29udmVyc2lvbnNcbiAgICAgICAgICAgIHZhciBleGFjdFR5cGVzID0gZmlsdGVyZWRUeXBlcy5maWx0ZXIoaXNFeGFjdFR5cGUpXG4gICAgICAgICAgICB0eXBlR3JvdXBzID0gZXhhY3RUeXBlcy5sZW5ndGggPCBmaWx0ZXJlZFR5cGVzLmxlbmd0aFxuICAgICAgICAgICAgICAgID8gW2V4YWN0VHlwZXMsIGZpbHRlcmVkVHlwZXNdXG4gICAgICAgICAgICAgICAgOiBbZmlsdGVyZWRUeXBlc11cblxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIHNwbGl0IGFsbCB0aGUgdHlwZXMgb2YgYSByZWd1bGFyIHBhcmFtZXRlciBpbnRvIG9uZSB0eXBlIHBlciBncm91cFxuICAgICAgICAgICAgdHlwZUdyb3VwcyA9IGZpbHRlcmVkVHlwZXMubWFwKGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICAgICAgICAgIHJldHVybiBbdHlwZV1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gcmVjdXJzZSBvdmVyIHRoZSBncm91cHMgd2l0aCB0eXBlc1xuICAgICAgICAgIHJldHVybiBmbGF0TWFwKHR5cGVHcm91cHMsIGZ1bmN0aW9uICh0eXBlR3JvdXApIHtcbiAgICAgICAgICAgIHJldHVybiBfc3BsaXRQYXJhbXMocGFyYW1zLCBpbmRleCArIDEsIHR5cGVzLmNvbmNhdChbdHlwZUdyb3VwXSkpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgLy8gd2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBwYXJhbWV0ZXJzLiBOb3cgYnVpbGQgYSBuZXcgUGFyYW1cbiAgICAgICAgICB2YXIgc3BsaXR0ZWRQYXJhbXMgPSB0eXBlcy5tYXAoZnVuY3Rpb24gKHR5cGUsIHR5cGVJbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgdHlwZXM6IHR5cGUsXG4gICAgICAgICAgICAgIHJlc3RQYXJhbTogKHR5cGVJbmRleCA9PT0gcGFyYW1zLmxlbmd0aCAtIDEpICYmIGhhc1Jlc3RQYXJhbShwYXJhbXMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICByZXR1cm4gW3NwbGl0dGVkUGFyYW1zXTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3NwbGl0UGFyYW1zKHBhcmFtcywgMCwgW10pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRlc3Qgd2hldGhlciB0d28gc2lnbmF0dXJlcyBoYXZlIGEgY29uZmxpY3Rpbmcgc2lnbmF0dXJlXG4gICAgICogQHBhcmFtIHtTaWduYXR1cmV9IHNpZ25hdHVyZTFcbiAgICAgKiBAcGFyYW0ge1NpZ25hdHVyZX0gc2lnbmF0dXJlMlxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBzaWduYXR1cmVzIGNvbmZsaWN0LCBmYWxzZSBvdGhlcndpc2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzQ29uZmxpY3RpbmdQYXJhbXMoc2lnbmF0dXJlMSwgc2lnbmF0dXJlMikge1xuICAgICAgdmFyIGlpID0gTWF0aC5tYXgoc2lnbmF0dXJlMS5wYXJhbXMubGVuZ3RoLCBzaWduYXR1cmUyLnBhcmFtcy5sZW5ndGgpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGlpOyBpKyspIHtcbiAgICAgICAgdmFyIHR5cGVzTmFtZXMxID0gZ2V0RXhwZWN0ZWRUeXBlTmFtZXMoc2lnbmF0dXJlMSwgaSwgdHJ1ZSk7XG4gICAgICAgIHZhciB0eXBlc05hbWVzMiA9IGdldEV4cGVjdGVkVHlwZU5hbWVzKHNpZ25hdHVyZTIsIGksIHRydWUpO1xuXG4gICAgICAgIGlmICghaGFzT3ZlcmxhcCh0eXBlc05hbWVzMSwgdHlwZXNOYW1lczIpKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBsZW4xID0gc2lnbmF0dXJlMS5wYXJhbXMubGVuZ3RoO1xuICAgICAgdmFyIGxlbjIgPSBzaWduYXR1cmUyLnBhcmFtcy5sZW5ndGg7XG4gICAgICB2YXIgcmVzdFBhcmFtMSA9IGhhc1Jlc3RQYXJhbShzaWduYXR1cmUxLnBhcmFtcyk7XG4gICAgICB2YXIgcmVzdFBhcmFtMiA9IGhhc1Jlc3RQYXJhbShzaWduYXR1cmUyLnBhcmFtcyk7XG5cbiAgICAgIHJldHVybiByZXN0UGFyYW0xXG4gICAgICAgICAgPyByZXN0UGFyYW0yID8gKGxlbjEgPT09IGxlbjIpIDogKGxlbjIgPj0gbGVuMSlcbiAgICAgICAgICA6IHJlc3RQYXJhbTIgPyAobGVuMSA+PSBsZW4yKSAgOiAobGVuMSA9PT0gbGVuMilcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSB0eXBlZCBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lICAgICAgICAgICAgICAgVGhlIG5hbWUgZm9yIHRoZSB0eXBlZCBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsIGZ1bmN0aW9uPn0gc2lnbmF0dXJlc01hcFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW4gb2JqZWN0IHdpdGggb25lIG9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZSBzaWduYXR1cmVzIGFzIGtleSwgYW5kIHRoZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gY29ycmVzcG9uZGluZyB0byB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSBhcyB2YWx1ZS5cbiAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gIFJldHVybnMgdGhlIGNyZWF0ZWQgdHlwZWQgZnVuY3Rpb24uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY3JlYXRlVHlwZWRGdW5jdGlvbihuYW1lLCBzaWduYXR1cmVzTWFwKSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXMoc2lnbmF0dXJlc01hcCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignTm8gc2lnbmF0dXJlcyBwcm92aWRlZCcpO1xuICAgICAgfVxuXG4gICAgICAvLyBwYXJzZSB0aGUgc2lnbmF0dXJlcywgYW5kIGNoZWNrIGZvciBjb25mbGljdHNcbiAgICAgIHZhciBwYXJzZWRTaWduYXR1cmVzID0gW107XG4gICAgICBPYmplY3Qua2V5cyhzaWduYXR1cmVzTWFwKVxuICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHNpZ25hdHVyZSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlU2lnbmF0dXJlKHNpZ25hdHVyZSwgc2lnbmF0dXJlc01hcFtzaWduYXR1cmVdLCB0eXBlZC5jb252ZXJzaW9ucyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmlsdGVyKG5vdE51bGwpXG4gICAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKHBhcnNlZFNpZ25hdHVyZSkge1xuICAgICAgICAgICAgLy8gY2hlY2sgd2hldGhlciB0aGlzIHBhcmFtZXRlciBjb25mbGljdHMgd2l0aCBhbHJlYWR5IHBhcnNlZCBzaWduYXR1cmVzXG4gICAgICAgICAgICB2YXIgY29uZmxpY3RpbmdTaWduYXR1cmUgPSBmaW5kSW5BcnJheShwYXJzZWRTaWduYXR1cmVzLCBmdW5jdGlvbiAocykge1xuICAgICAgICAgICAgICByZXR1cm4gaGFzQ29uZmxpY3RpbmdQYXJhbXMocywgcGFyc2VkU2lnbmF0dXJlKVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoY29uZmxpY3RpbmdTaWduYXR1cmUpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29uZmxpY3Rpbmcgc2lnbmF0dXJlcyBcIicgK1xuICAgICAgICAgICAgICAgICAgc3RyaW5naWZ5UGFyYW1zKGNvbmZsaWN0aW5nU2lnbmF0dXJlLnBhcmFtcykgKyAnXCIgYW5kIFwiJyArXG4gICAgICAgICAgICAgICAgICBzdHJpbmdpZnlQYXJhbXMocGFyc2VkU2lnbmF0dXJlLnBhcmFtcykgKyAnXCIuJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHBhcnNlZFNpZ25hdHVyZXMucHVzaChwYXJzZWRTaWduYXR1cmUpO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAvLyBzcGxpdCBhbmQgZmlsdGVyIHRoZSB0eXBlcyBvZiB0aGUgc2lnbmF0dXJlcywgYW5kIHRoZW4gb3JkZXIgdGhlbVxuICAgICAgdmFyIHNpZ25hdHVyZXMgPSBmbGF0TWFwKHBhcnNlZFNpZ25hdHVyZXMsIGZ1bmN0aW9uIChwYXJzZWRTaWduYXR1cmUpIHtcbiAgICAgICAgdmFyIHBhcmFtcyA9IHBhcnNlZFNpZ25hdHVyZSA/IHNwbGl0UGFyYW1zKHBhcnNlZFNpZ25hdHVyZS5wYXJhbXMsIGZhbHNlKSA6IFtdXG5cbiAgICAgICAgcmV0dXJuIHBhcmFtcy5tYXAoZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgICAgIGZuOiBwYXJzZWRTaWduYXR1cmUuZm5cbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH0pLmZpbHRlcihub3ROdWxsKTtcblxuICAgICAgc2lnbmF0dXJlcy5zb3J0KGNvbXBhcmVTaWduYXR1cmVzKTtcblxuICAgICAgLy8gd2UgY3JlYXRlIGEgaGlnaGx5IG9wdGltaXplZCBjaGVja3MgZm9yIHRoZSBmaXJzdCBjb3VwbGUgb2Ygc2lnbmF0dXJlcyB3aXRoIG1heCAyIGFyZ3VtZW50c1xuICAgICAgdmFyIG9rMCA9IHNpZ25hdHVyZXNbMF0gJiYgc2lnbmF0dXJlc1swXS5wYXJhbXMubGVuZ3RoIDw9IDIgJiYgIWhhc1Jlc3RQYXJhbShzaWduYXR1cmVzWzBdLnBhcmFtcyk7XG4gICAgICB2YXIgb2sxID0gc2lnbmF0dXJlc1sxXSAmJiBzaWduYXR1cmVzWzFdLnBhcmFtcy5sZW5ndGggPD0gMiAmJiAhaGFzUmVzdFBhcmFtKHNpZ25hdHVyZXNbMV0ucGFyYW1zKTtcbiAgICAgIHZhciBvazIgPSBzaWduYXR1cmVzWzJdICYmIHNpZ25hdHVyZXNbMl0ucGFyYW1zLmxlbmd0aCA8PSAyICYmICFoYXNSZXN0UGFyYW0oc2lnbmF0dXJlc1syXS5wYXJhbXMpO1xuICAgICAgdmFyIG9rMyA9IHNpZ25hdHVyZXNbM10gJiYgc2lnbmF0dXJlc1szXS5wYXJhbXMubGVuZ3RoIDw9IDIgJiYgIWhhc1Jlc3RQYXJhbShzaWduYXR1cmVzWzNdLnBhcmFtcyk7XG4gICAgICB2YXIgb2s0ID0gc2lnbmF0dXJlc1s0XSAmJiBzaWduYXR1cmVzWzRdLnBhcmFtcy5sZW5ndGggPD0gMiAmJiAhaGFzUmVzdFBhcmFtKHNpZ25hdHVyZXNbNF0ucGFyYW1zKTtcbiAgICAgIHZhciBvazUgPSBzaWduYXR1cmVzWzVdICYmIHNpZ25hdHVyZXNbNV0ucGFyYW1zLmxlbmd0aCA8PSAyICYmICFoYXNSZXN0UGFyYW0oc2lnbmF0dXJlc1s1XS5wYXJhbXMpO1xuICAgICAgdmFyIGFsbE9rID0gb2swICYmIG9rMSAmJiBvazIgJiYgb2szICYmIG9rNCAmJiBvazU7XG5cbiAgICAgIC8vIGNvbXBpbGUgdGhlIHRlc3RzXG4gICAgICB2YXIgdGVzdHMgPSBzaWduYXR1cmVzLm1hcChmdW5jdGlvbiAoc2lnbmF0dXJlKSB7XG4gICAgICAgIHJldHVybiBjb21waWxlVGVzdHMoc2lnbmF0dXJlLnBhcmFtcyk7XG4gICAgICB9KTtcblxuICAgICAgdmFyIHRlc3QwMCA9IG9rMCA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbMF0ucGFyYW1zWzBdKSA6IG5vdE9rO1xuICAgICAgdmFyIHRlc3QxMCA9IG9rMSA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbMV0ucGFyYW1zWzBdKSA6IG5vdE9rO1xuICAgICAgdmFyIHRlc3QyMCA9IG9rMiA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbMl0ucGFyYW1zWzBdKSA6IG5vdE9rO1xuICAgICAgdmFyIHRlc3QzMCA9IG9rMyA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbM10ucGFyYW1zWzBdKSA6IG5vdE9rO1xuICAgICAgdmFyIHRlc3Q0MCA9IG9rNCA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbNF0ucGFyYW1zWzBdKSA6IG5vdE9rO1xuICAgICAgdmFyIHRlc3Q1MCA9IG9rNSA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbNV0ucGFyYW1zWzBdKSA6IG5vdE9rO1xuXG4gICAgICB2YXIgdGVzdDAxID0gb2swID8gY29tcGlsZVRlc3Qoc2lnbmF0dXJlc1swXS5wYXJhbXNbMV0pIDogbm90T2s7XG4gICAgICB2YXIgdGVzdDExID0gb2sxID8gY29tcGlsZVRlc3Qoc2lnbmF0dXJlc1sxXS5wYXJhbXNbMV0pIDogbm90T2s7XG4gICAgICB2YXIgdGVzdDIxID0gb2syID8gY29tcGlsZVRlc3Qoc2lnbmF0dXJlc1syXS5wYXJhbXNbMV0pIDogbm90T2s7XG4gICAgICB2YXIgdGVzdDMxID0gb2szID8gY29tcGlsZVRlc3Qoc2lnbmF0dXJlc1szXS5wYXJhbXNbMV0pIDogbm90T2s7XG4gICAgICB2YXIgdGVzdDQxID0gb2s0ID8gY29tcGlsZVRlc3Qoc2lnbmF0dXJlc1s0XS5wYXJhbXNbMV0pIDogbm90T2s7XG4gICAgICB2YXIgdGVzdDUxID0gb2s1ID8gY29tcGlsZVRlc3Qoc2lnbmF0dXJlc1s1XS5wYXJhbXNbMV0pIDogbm90T2s7XG5cbiAgICAgIC8vIGNvbXBpbGUgdGhlIGZ1bmN0aW9uc1xuICAgICAgdmFyIGZucyA9IHNpZ25hdHVyZXMubWFwKGZ1bmN0aW9uKHNpZ25hdHVyZSkge1xuICAgICAgICByZXR1cm4gY29tcGlsZUFyZ3NQcmVwcm9jZXNzaW5nKHNpZ25hdHVyZS5wYXJhbXMsIHNpZ25hdHVyZS5mbilcbiAgICAgIH0pO1xuXG4gICAgICB2YXIgZm4wID0gb2swID8gZm5zWzBdIDogdW5kZWY7XG4gICAgICB2YXIgZm4xID0gb2sxID8gZm5zWzFdIDogdW5kZWY7XG4gICAgICB2YXIgZm4yID0gb2syID8gZm5zWzJdIDogdW5kZWY7XG4gICAgICB2YXIgZm4zID0gb2szID8gZm5zWzNdIDogdW5kZWY7XG4gICAgICB2YXIgZm40ID0gb2s0ID8gZm5zWzRdIDogdW5kZWY7XG4gICAgICB2YXIgZm41ID0gb2s1ID8gZm5zWzVdIDogdW5kZWY7XG5cbiAgICAgIHZhciBsZW4wID0gb2swID8gc2lnbmF0dXJlc1swXS5wYXJhbXMubGVuZ3RoIDogLTE7XG4gICAgICB2YXIgbGVuMSA9IG9rMSA/IHNpZ25hdHVyZXNbMV0ucGFyYW1zLmxlbmd0aCA6IC0xO1xuICAgICAgdmFyIGxlbjIgPSBvazIgPyBzaWduYXR1cmVzWzJdLnBhcmFtcy5sZW5ndGggOiAtMTtcbiAgICAgIHZhciBsZW4zID0gb2szID8gc2lnbmF0dXJlc1szXS5wYXJhbXMubGVuZ3RoIDogLTE7XG4gICAgICB2YXIgbGVuNCA9IG9rNCA/IHNpZ25hdHVyZXNbNF0ucGFyYW1zLmxlbmd0aCA6IC0xO1xuICAgICAgdmFyIGxlbjUgPSBvazUgPyBzaWduYXR1cmVzWzVdLnBhcmFtcy5sZW5ndGggOiAtMTtcblxuICAgICAgLy8gc2ltcGxlIGFuZCBnZW5lcmljLCBidXQgYWxzbyBzbG93XG4gICAgICB2YXIgaVN0YXJ0ID0gYWxsT2sgPyA2IDogMDtcbiAgICAgIHZhciBpRW5kID0gc2lnbmF0dXJlcy5sZW5ndGg7XG4gICAgICB2YXIgZ2VuZXJpYyA9IGZ1bmN0aW9uIGdlbmVyaWMoKSB7XG4gICAgICAgICd1c2Ugc3RyaWN0JztcblxuICAgICAgICBmb3IgKHZhciBpID0gaVN0YXJ0OyBpIDwgaUVuZDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHRlc3RzW2ldKGFyZ3VtZW50cykpIHtcbiAgICAgICAgICAgIHJldHVybiBmbnNbaV0uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBjcmVhdGVFcnJvcihuYW1lLCBhcmd1bWVudHMsIHNpZ25hdHVyZXMpO1xuICAgICAgfVxuXG4gICAgICAvLyBjcmVhdGUgdGhlIHR5cGVkIGZ1bmN0aW9uXG4gICAgICAvLyBmYXN0LCBzcGVjaWFsaXplZCB2ZXJzaW9uLiBGYWxscyBiYWNrIHRvIHRoZSBzbG93ZXIsIGdlbmVyaWMgb25lIGlmIG5lZWRlZFxuICAgICAgdmFyIGZuID0gZnVuY3Rpb24gZm4oYXJnMCwgYXJnMSkge1xuICAgICAgICAndXNlIHN0cmljdCc7XG5cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IGxlbjAgJiYgdGVzdDAwKGFyZzApICYmIHRlc3QwMShhcmcxKSkgeyByZXR1cm4gZm4wLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IGxlbjEgJiYgdGVzdDEwKGFyZzApICYmIHRlc3QxMShhcmcxKSkgeyByZXR1cm4gZm4xLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IGxlbjIgJiYgdGVzdDIwKGFyZzApICYmIHRlc3QyMShhcmcxKSkgeyByZXR1cm4gZm4yLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IGxlbjMgJiYgdGVzdDMwKGFyZzApICYmIHRlc3QzMShhcmcxKSkgeyByZXR1cm4gZm4zLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IGxlbjQgJiYgdGVzdDQwKGFyZzApICYmIHRlc3Q0MShhcmcxKSkgeyByZXR1cm4gZm40LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IGxlbjUgJiYgdGVzdDUwKGFyZzApICYmIHRlc3Q1MShhcmcxKSkgeyByZXR1cm4gZm41LmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7IH1cblxuICAgICAgICByZXR1cm4gZ2VuZXJpYy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xuICAgICAgfVxuXG4gICAgICAvLyBhdHRhY2ggbmFtZSB0aGUgdHlwZWQgZnVuY3Rpb25cbiAgICAgIHRyeSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmbiwgJ25hbWUnLCB7dmFsdWU6IG5hbWV9KTtcbiAgICAgIH1cbiAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgLy8gb2xkIGJyb3dzZXJzIGRvIG5vdCBzdXBwb3J0IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSBhbmQgc29tZSBkb24ndCBzdXBwb3J0IHNldHRpbmcgdGhlIG5hbWUgcHJvcGVydHlcbiAgICAgICAgLy8gdGhlIGZ1bmN0aW9uIG5hbWUgaXMgbm90IGVzc2VudGlhbCBmb3IgdGhlIGZ1bmN0aW9uaW5nLCBpdCdzIG1vc3RseSB1c2VmdWwgZm9yIGRlYnVnZ2luZyxcbiAgICAgICAgLy8gc28gaXQncyBmaW5lIHRvIGhhdmUgdW5uYW1lZCBmdW5jdGlvbnMuXG4gICAgICB9XG5cbiAgICAgIC8vIGF0dGFjaCBzaWduYXR1cmVzIHRvIHRoZSBmdW5jdGlvblxuICAgICAgZm4uc2lnbmF0dXJlcyA9IGNyZWF0ZVNpZ25hdHVyZXNNYXAoc2lnbmF0dXJlcyk7XG5cbiAgICAgIHJldHVybiBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUZXN0IHdoZXRoZXIgYSB0eXBlIHNob3VsZCBiZSBOT1QgYmUgaWdub3JlZFxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlTmFtZVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgZnVuY3Rpb24gbm90SWdub3JlKHR5cGVOYW1lKSB7XG4gICAgICByZXR1cm4gdHlwZWQuaWdub3JlLmluZGV4T2YodHlwZU5hbWUpID09PSAtMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0cmltIGEgc3RyaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB0cmltKHN0cikge1xuICAgICAgcmV0dXJuIHN0ci50cmltKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGVzdCB3aGV0aGVyIGEgc3RyaW5nIGlzIG5vdCBlbXB0eVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vdEVtcHR5KHN0cikge1xuICAgICAgcmV0dXJuICEhc3RyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHRlc3Qgd2hldGhlciBhIHZhbHVlIGlzIG5vdCBzdHJpY3QgZXF1YWwgdG8gbnVsbFxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vdE51bGwodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSAhPT0gbnVsbDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUZXN0IHdoZXRoZXIgYSBwYXJhbWV0ZXIgaGFzIG5vIHR5cGVzIGRlZmluZWRcbiAgICAgKiBAcGFyYW0ge1BhcmFtfSBwYXJhbVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNJbnZhbGlkUGFyYW0gKHBhcmFtKSB7XG4gICAgICByZXR1cm4gcGFyYW0udHlwZXMubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiBhbGwgYnV0IHRoZSBsYXN0IGl0ZW1zIG9mIGFuIGFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyXG4gICAgICogQHJldHVybiB7QXJyYXl9XG4gICAgICovXG4gICAgZnVuY3Rpb24gaW5pdGlhbChhcnIpIHtcbiAgICAgIHJldHVybiBhcnIuc2xpY2UoMCwgYXJyLmxlbmd0aCAtIDEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybiB0aGUgbGFzdCBpdGVtIG9mIGFuIGFycmF5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyXG4gICAgICogQHJldHVybiB7Kn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBsYXN0KGFycikge1xuICAgICAgcmV0dXJuIGFyclthcnIubGVuZ3RoIC0gMV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2xpY2UgYW4gYXJyYXkgb3IgZnVuY3Rpb24gQXJndW1lbnRzXG4gICAgICogQHBhcmFtIHtBcnJheSB8IEFyZ3VtZW50cyB8IElBcmd1bWVudHN9IGFyclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBbZW5kXVxuICAgICAqIEByZXR1cm4ge0FycmF5fVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIHNsaWNlKGFyciwgc3RhcnQsIGVuZCkge1xuICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyciwgc3RhcnQsIGVuZCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGVzdCB3aGV0aGVyIGFuIGFycmF5IGNvbnRhaW5zIHNvbWUgaXRlbVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gICAgICogQHBhcmFtIHsqfSBpdGVtXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGFycmF5IGNvbnRhaW5zIGl0ZW0sIGZhbHNlIGlmIG5vdC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb250YWlucyhhcnJheSwgaXRlbSkge1xuICAgICAgcmV0dXJuIGFycmF5LmluZGV4T2YoaXRlbSkgIT09IC0xO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRlc3Qgd2hldGhlciB0d28gYXJyYXlzIGhhdmUgb3ZlcmxhcHBpbmcgaXRlbXNcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheTFcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheTJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBhdCBsZWFzdCBvbmUgaXRlbSBleGlzdHMgaW4gYm90aCBhcnJheXNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoYXNPdmVybGFwKGFycmF5MSwgYXJyYXkyKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5MS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoY29udGFpbnMoYXJyYXkyLCBhcnJheTFbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybiB0aGUgZmlyc3QgaXRlbSBmcm9tIGFuIGFycmF5IGZvciB3aGljaCB0ZXN0KGFycltpXSkgcmV0dXJucyB0cnVlXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gdGVzdFxuICAgICAqIEByZXR1cm4geyogfCB1bmRlZmluZWR9IFJldHVybnMgdGhlIGZpcnN0IG1hdGNoaW5nIGl0ZW1cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBvciB1bmRlZmluZWQgd2hlbiB0aGVyZSBpcyBubyBtYXRjaFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmRJbkFycmF5KGFyciwgdGVzdCkge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHRlc3QoYXJyW2ldKSkge1xuICAgICAgICAgIHJldHVybiBhcnJbaV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmlsdGVyIHVuaXF1ZSBpdGVtcyBvZiBhbiBhcnJheSB3aXRoIHN0cmluZ3NcbiAgICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBhcnJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiB1bmlxKGFycikge1xuICAgICAgdmFyIGVudHJpZXMgPSB7fVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZW50cmllc1thcnJbaV1dID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhlbnRyaWVzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGbGF0IG1hcCB0aGUgcmVzdWx0IGludm9raW5nIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGl0ZW0gaW4gYW4gYXJyYXkuXG4gICAgICogaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vc2FtZ2lsZXMvNzYyZWUzMzdkZmY0ODYyM2U3MjlcbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICAgICAqIEByZXR1cm4ge0FycmF5fVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZsYXRNYXAoYXJyLCBjYWxsYmFjaykge1xuICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIGFyci5tYXAoY2FsbGJhY2spKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXRyaWV2ZSB0aGUgZnVuY3Rpb24gbmFtZSBmcm9tIGEgc2V0IG9mIHR5cGVkIGZ1bmN0aW9ucyxcbiAgICAgKiBhbmQgY2hlY2sgd2hldGhlciB0aGUgbmFtZSBvZiBhbGwgZnVuY3Rpb25zIG1hdGNoIChpZiBnaXZlbilcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9uW119IGZuc1xuICAgICAqL1xuICAgIGZ1bmN0aW9uIGdldE5hbWUgKGZucykge1xuICAgICAgdmFyIG5hbWUgPSAnJztcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGZuID0gZm5zW2ldO1xuXG4gICAgICAgIC8vIGNoZWNrIHdoZXRoZXIgdGhlIG5hbWVzIGFyZSB0aGUgc2FtZSB3aGVuIGRlZmluZWRcbiAgICAgICAgaWYgKCh0eXBlb2YgZm4uc2lnbmF0dXJlcyA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGZuLnNpZ25hdHVyZSA9PT0gJ3N0cmluZycpICYmIGZuLm5hbWUgIT09ICcnKSB7XG4gICAgICAgICAgaWYgKG5hbWUgPT09ICcnKSB7XG4gICAgICAgICAgICBuYW1lID0gZm4ubmFtZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZiAobmFtZSAhPT0gZm4ubmFtZSkge1xuICAgICAgICAgICAgdmFyIGVyciA9IG5ldyBFcnJvcignRnVuY3Rpb24gbmFtZXMgZG8gbm90IG1hdGNoIChleHBlY3RlZDogJyArIG5hbWUgKyAnLCBhY3R1YWw6ICcgKyBmbi5uYW1lICsgJyknKTtcbiAgICAgICAgICAgIGVyci5kYXRhID0ge1xuICAgICAgICAgICAgICBhY3R1YWw6IGZuLm5hbWUsXG4gICAgICAgICAgICAgIGV4cGVjdGVkOiBuYW1lXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmFtZTtcbiAgICB9XG5cbiAgICAvLyBleHRyYWN0IGFuZCBtZXJnZSBhbGwgc2lnbmF0dXJlcyBvZiBhIGxpc3Qgd2l0aCB0eXBlZCBmdW5jdGlvbnNcbiAgICBmdW5jdGlvbiBleHRyYWN0U2lnbmF0dXJlcyhmbnMpIHtcbiAgICAgIHZhciBlcnI7XG4gICAgICB2YXIgc2lnbmF0dXJlc01hcCA9IHt9O1xuXG4gICAgICBmdW5jdGlvbiB2YWxpZGF0ZVVuaXF1ZShfc2lnbmF0dXJlLCBfZm4pIHtcbiAgICAgICAgaWYgKHNpZ25hdHVyZXNNYXAuaGFzT3duUHJvcGVydHkoX3NpZ25hdHVyZSkgJiYgX2ZuICE9PSBzaWduYXR1cmVzTWFwW19zaWduYXR1cmVdKSB7XG4gICAgICAgICAgZXJyID0gbmV3IEVycm9yKCdTaWduYXR1cmUgXCInICsgX3NpZ25hdHVyZSArICdcIiBpcyBkZWZpbmVkIHR3aWNlJyk7XG4gICAgICAgICAgZXJyLmRhdGEgPSB7c2lnbmF0dXJlOiBfc2lnbmF0dXJlfTtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgLy8gZWxzZTogYm90aCBzaWduYXR1cmVzIHBvaW50IHRvIHRoZSBzYW1lIGZ1bmN0aW9uLCB0aGF0J3MgZmluZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBmbiA9IGZuc1tpXTtcblxuICAgICAgICAvLyB0ZXN0IHdoZXRoZXIgdGhpcyBpcyBhIHR5cGVkLWZ1bmN0aW9uXG4gICAgICAgIGlmICh0eXBlb2YgZm4uc2lnbmF0dXJlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAvLyBtZXJnZSB0aGUgc2lnbmF0dXJlc1xuICAgICAgICAgIGZvciAodmFyIHNpZ25hdHVyZSBpbiBmbi5zaWduYXR1cmVzKSB7XG4gICAgICAgICAgICBpZiAoZm4uc2lnbmF0dXJlcy5oYXNPd25Qcm9wZXJ0eShzaWduYXR1cmUpKSB7XG4gICAgICAgICAgICAgIHZhbGlkYXRlVW5pcXVlKHNpZ25hdHVyZSwgZm4uc2lnbmF0dXJlc1tzaWduYXR1cmVdKTtcbiAgICAgICAgICAgICAgc2lnbmF0dXJlc01hcFtzaWduYXR1cmVdID0gZm4uc2lnbmF0dXJlc1tzaWduYXR1cmVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgZm4uc2lnbmF0dXJlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHZhbGlkYXRlVW5pcXVlKGZuLnNpZ25hdHVyZSwgZm4pO1xuICAgICAgICAgIHNpZ25hdHVyZXNNYXBbZm4uc2lnbmF0dXJlXSA9IGZuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGVyciA9IG5ldyBUeXBlRXJyb3IoJ0Z1bmN0aW9uIGlzIG5vIHR5cGVkLWZ1bmN0aW9uIChpbmRleDogJyArIGkgKyAnKScpO1xuICAgICAgICAgIGVyci5kYXRhID0ge2luZGV4OiBpfTtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNpZ25hdHVyZXNNYXA7XG4gICAgfVxuXG4gICAgdHlwZWQgPSBjcmVhdGVUeXBlZEZ1bmN0aW9uKCd0eXBlZCcsIHtcbiAgICAgICdzdHJpbmcsIE9iamVjdCc6IGNyZWF0ZVR5cGVkRnVuY3Rpb24sXG4gICAgICAnT2JqZWN0JzogZnVuY3Rpb24gKHNpZ25hdHVyZXNNYXApIHtcbiAgICAgICAgLy8gZmluZCBleGlzdGluZyBuYW1lXG4gICAgICAgIHZhciBmbnMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgc2lnbmF0dXJlIGluIHNpZ25hdHVyZXNNYXApIHtcbiAgICAgICAgICBpZiAoc2lnbmF0dXJlc01hcC5oYXNPd25Qcm9wZXJ0eShzaWduYXR1cmUpKSB7XG4gICAgICAgICAgICBmbnMucHVzaChzaWduYXR1cmVzTWFwW3NpZ25hdHVyZV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB2YXIgbmFtZSA9IGdldE5hbWUoZm5zKTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVkRnVuY3Rpb24obmFtZSwgc2lnbmF0dXJlc01hcCk7XG4gICAgICB9LFxuICAgICAgJy4uLkZ1bmN0aW9uJzogZnVuY3Rpb24gKGZucykge1xuICAgICAgICByZXR1cm4gY3JlYXRlVHlwZWRGdW5jdGlvbihnZXROYW1lKGZucyksIGV4dHJhY3RTaWduYXR1cmVzKGZucykpO1xuICAgICAgfSxcbiAgICAgICdzdHJpbmcsIC4uLkZ1bmN0aW9uJzogZnVuY3Rpb24gKG5hbWUsIGZucykge1xuICAgICAgICByZXR1cm4gY3JlYXRlVHlwZWRGdW5jdGlvbihuYW1lLCBleHRyYWN0U2lnbmF0dXJlcyhmbnMpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHR5cGVkLmNyZWF0ZSA9IGNyZWF0ZTtcbiAgICB0eXBlZC50eXBlcyA9IF90eXBlcztcbiAgICB0eXBlZC5jb252ZXJzaW9ucyA9IF9jb252ZXJzaW9ucztcbiAgICB0eXBlZC5pZ25vcmUgPSBfaWdub3JlO1xuICAgIHR5cGVkLmNvbnZlcnQgPSBjb252ZXJ0O1xuICAgIHR5cGVkLmZpbmQgPSBmaW5kO1xuXG4gICAgLyoqXG4gICAgICogYWRkIGEgdHlwZVxuICAgICAqIEBwYXJhbSB7e25hbWU6IHN0cmluZywgdGVzdDogZnVuY3Rpb259fSB0eXBlXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbYmVmb3JlT2JqZWN0VGVzdD10cnVlXVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICBJZiB0cnVlLCB0aGUgbmV3IHRlc3Qgd2lsbCBiZSBpbnNlcnRlZCBiZWZvcmVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHRlc3Qgd2l0aCBuYW1lICdPYmplY3QnIChpZiBhbnkpLCBzaW5jZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0cyBmb3IgT2JqZWN0IG1hdGNoIEFycmF5IGFuZCBjbGFzc2VzIHRvby5cbiAgICAgKi9cbiAgICB0eXBlZC5hZGRUeXBlID0gZnVuY3Rpb24gKHR5cGUsIGJlZm9yZU9iamVjdFRlc3QpIHtcbiAgICAgIGlmICghdHlwZSB8fCB0eXBlb2YgdHlwZS5uYW1lICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgdHlwZS50ZXN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdCB3aXRoIHByb3BlcnRpZXMge25hbWU6IHN0cmluZywgdGVzdDogZnVuY3Rpb259IGV4cGVjdGVkJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChiZWZvcmVPYmplY3RUZXN0ICE9PSBmYWxzZSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHR5cGVkLnR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHR5cGVkLnR5cGVzW2ldLm5hbWUgPT09ICdPYmplY3QnKSB7XG4gICAgICAgICAgICB0eXBlZC50eXBlcy5zcGxpY2UoaSwgMCwgdHlwZSk7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHlwZWQudHlwZXMucHVzaCh0eXBlKTtcbiAgICB9O1xuXG4gICAgLy8gYWRkIGEgY29udmVyc2lvblxuICAgIHR5cGVkLmFkZENvbnZlcnNpb24gPSBmdW5jdGlvbiAoY29udmVyc2lvbikge1xuICAgICAgaWYgKCFjb252ZXJzaW9uXG4gICAgICAgICAgfHwgdHlwZW9mIGNvbnZlcnNpb24uZnJvbSAhPT0gJ3N0cmluZydcbiAgICAgICAgICB8fCB0eXBlb2YgY29udmVyc2lvbi50byAhPT0gJ3N0cmluZydcbiAgICAgICAgICB8fCB0eXBlb2YgY29udmVyc2lvbi5jb252ZXJ0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdCB3aXRoIHByb3BlcnRpZXMge2Zyb206IHN0cmluZywgdG86IHN0cmluZywgY29udmVydDogZnVuY3Rpb259IGV4cGVjdGVkJyk7XG4gICAgICB9XG5cbiAgICAgIHR5cGVkLmNvbnZlcnNpb25zLnB1c2goY29udmVyc2lvbik7XG4gICAgfTtcblxuICAgIHJldHVybiB0eXBlZDtcbiAgfVxuXG4gIHJldHVybiBjcmVhdGUoKTtcbn0pKTsiXX0= +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJsaWIvcWFzbV9pbXBvcnQvUUFTTUltcG9ydC5qcyIsImxpYi9xYXNtX2ltcG9ydC9RQVNNTGV4ZXIuanMiLCJsaWIvcWFzbV9pbXBvcnQvUUFTTUxpc3RlbmVyLmpzIiwibGliL3Fhc21faW1wb3J0L1FBU01QYXJzZXIuanMiLCJsaWIvcXVhbnR1bS1jaXJjdWl0LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9CdWZmZXJlZFRva2VuU3RyZWFtLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9DaGFyU3RyZWFtcy5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvQ29tbW9uVG9rZW5GYWN0b3J5LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9Db21tb25Ub2tlblN0cmVhbS5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvRmlsZVN0cmVhbS5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvSW5wdXRTdHJlYW0uanMiLCJub2RlX21vZHVsZXMvYW50bHI0L0ludGVydmFsU2V0LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9MTDFBbmFseXplci5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvTGV4ZXIuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L1BhcnNlci5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvUGFyc2VyUnVsZUNvbnRleHQuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L1ByZWRpY3Rpb25Db250ZXh0LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9SZWNvZ25pemVyLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9SdWxlQ29udGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvVG9rZW4uanMiLCJub2RlX21vZHVsZXMvYW50bHI0L1V0aWxzLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVROLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVROQ29uZmlnLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVROQ29uZmlnU2V0LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvYXRuL0FUTkRlc2VyaWFsaXplci5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvYXRuL0FUTlNpbXVsYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvYXRuL0FUTlN0YXRlLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vQVROVHlwZS5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvYXRuL0xleGVyQVROU2ltdWxhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vTGV4ZXJBY3Rpb24uanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2F0bi9MZXhlckFjdGlvbkV4ZWN1dG9yLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vUGFyc2VyQVROU2ltdWxhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vUHJlZGljdGlvbk1vZGUuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2F0bi9TZW1hbnRpY0NvbnRleHQuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2F0bi9UcmFuc2l0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9hdG4vaW5kZXguanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2RmYS9ERkEuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2RmYS9ERkFTZXJpYWxpemVyLmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9kZmEvREZBU3RhdGUuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2RmYS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvZXJyb3IvRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXIuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2Vycm9yL0Vycm9yTGlzdGVuZXIuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2Vycm9yL0Vycm9yU3RyYXRlZ3kuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2Vycm9yL0Vycm9ycy5qcyIsIm5vZGVfbW9kdWxlcy9hbnRscjQvZXJyb3IvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYW50bHI0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC9wb2x5ZmlsbHMvY29kZXBvaW50YXQuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L3BvbHlmaWxscy9mcm9tY29kZXBvaW50LmpzIiwibm9kZV9tb2R1bGVzL2FudGxyNC90cmVlL1RyZWUuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L3RyZWUvVHJlZXMuanMiLCJub2RlX21vZHVsZXMvYW50bHI0L3RyZWUvaW5kZXguanMiLCJub2RlX21vZHVsZXMvYnJvd3NlcmlmeS9saWIvX2VtcHR5LmpzIiwibm9kZV9tb2R1bGVzL2NvbXBsZXguanMvY29tcGxleC5qcyIsIm5vZGVfbW9kdWxlcy9kZWNpbWFsLmpzL2RlY2ltYWwuanMiLCJub2RlX21vZHVsZXMvZXNjYXBlLWxhdGV4L2Rpc3QvaW5kZXguanMiLCJub2RlX21vZHVsZXMvZnJhY3Rpb24uanMvZnJhY3Rpb24uanMiLCJub2RlX21vZHVsZXMvamF2YXNjcmlwdC1uYXR1cmFsLXNvcnQvbmF0dXJhbFNvcnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9jb3JlL2NvbmZpZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2NvcmUvY3JlYXRlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvY29yZS9mdW5jdGlvbi9jb25maWcuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9jb3JlL2Z1bmN0aW9uL2RlcHJlY2F0ZWRJbXBvcnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9jb3JlL2Z1bmN0aW9uL2ltcG9ydC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2NvcmUvZnVuY3Rpb24vdHlwZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9hbGxGYWN0b3JpZXNBbnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9jb25maWdSZWFkb25seS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWJzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBY2Nlc3Nvck5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Fjb3NoLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBY290LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBY290aC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWNzYy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWNzY2guZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBbmQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FwcGx5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBcHBseVRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXJnLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBcnJheU5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzZWMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FzZWNoLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBc2luLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBc2luaC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXNzaWdubWVudE5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0F0YW4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0F0YW4yLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBdGFuaC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXRvbWljTWFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXZvZ2Fkcm8uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JlbGxOdW1iZXJzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCaXRBbmQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JpdE5vdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQml0T3IuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JpdFhvci5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQmxvY2tOb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCb2hyTWFnbmV0b24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JvaHJSYWRpdXMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JvbHR6bWFubi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQm9vbGVhbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2F0YWxhbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2JydC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2VpbC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2hhaW4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NoYWluQ2xhc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NsYXNzaWNhbEVsZWN0cm9uUmFkaXVzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDbG9uZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29sdW1uLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb2x1bW5UcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbWJpbmF0aW9ucy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tYmluYXRpb25zV2l0aFJlcC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tcGFyZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBhcmVUZXh0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21waWxlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21wbGV4LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBvc2l0aW9uLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb25jYXQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbmNhdFRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29uZGl0aW9uYWxOb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb25kdWN0YW5jZVF1YW50dW0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbmouZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbnN0YW50Tm9kZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29zLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb3NoLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb3QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvdGguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvdWxvbWIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NyZWF0ZVVuaXQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Nyb3NzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDc2MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NzY2guZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0N0cmFuc3Bvc2UuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0N1YmUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlZXBFcXVhbC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGVwcmVjYXRlZEV2YWwuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRUeXBlb2YuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRWYXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Rlcml2YXRpdmUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RldC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGV1dGVyb25NYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEaWFnLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEaXN0YW5jZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGl2aWRlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RvdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRG90RGl2aWRlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEb3RNdWx0aXBseS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRG90UG93LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFZmltb3ZGYWN0b3IuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VpZ3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VsZWN0cmljQ29uc3RhbnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VsZWN0cm9uTWFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRWxlbWVudGFyeUNoYXJnZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXF1YWwuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFcXVhbFRleHQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VyZi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXZhbHVhdGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0V4cC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXhwbS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXhwbTEuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0V5ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmFjdG9yaWFsLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGYWxzZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmFyYWRheS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmVybWlDb3VwbGluZy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmlib25hY2NpSGVhcENsYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGaWx0ZXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpbHRlclRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmluZVN0cnVjdHVyZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmlyc3RSYWRpYXRpb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpeC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmxhdHRlbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmxvb3IuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZvckVhY2guZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZvckVhY2hUcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Zvcm1hdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRnJhY3Rpb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzR2FtbWEuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0dhc0NvbnN0YW50LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHY2QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0dldE1hdHJpeERhdGFUeXBlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHcmF2aXRhdGlvbkNvbnN0YW50LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHcmF2aXR5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNIYXJ0cmVlRW5lcmd5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNIYXNOdW1lcmljVmFsdWUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0hlbHAuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0hlbHBDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSHlwb3QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0kuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0lkZW50aXR5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW5kZXguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0luZGV4Tm9kZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW5kZXhUcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0luZmluaXR5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbnRlcnNlY3QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ludi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc05hTi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSXNOdW1lcmljLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1ByaW1lLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1plcm8uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0tsZGl2ZXJnZW5jZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzS2xpdHppbmcuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0tyb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xOMTAuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xOMi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTE9HMTBFLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMT0cyRS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTGFyZ2VyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMYXJnZXJFcS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTGNtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMZWZ0U2hpZnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvZy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTG9nMTAuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvZzFwLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMb2cyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMb3NjaG1pZHQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xzb2x2ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTHVwLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMdXNvbHZlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYWQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hZ25ldGljQ29uc3RhbnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hZ25ldGljRmx1eFF1YW50dW0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hcC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWFwVHJhbnNmb3JtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hdHJpeENsYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYXguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01heFRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWVhbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWVhblRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWVkaWFuLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNaW4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01pblRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTW9kLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2xhck1hc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01vbGFyTWFzc0MxMi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTW9sYXJQbGFuY2tDb25zdGFudC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTW9sYXJWb2x1bWUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc011bHRpbm9taWFsLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05hTi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTmV1dHJvbk1hc3MuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05vcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc05vdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnRoUm9vdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnRoUm9vdHMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc051Y2xlYXJNYWduZXRvbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnVsbC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnVtYmVyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOdW1lcmljLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPYmplY3ROb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPbmVzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPcGVyYXRvck5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc09yLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BhcnNlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJzZXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BhcnNlckNsYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJ0aXRpb25TZWxlY3QuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Blcm11dGF0aW9ucy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGhpLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQaS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGlja1JhbmRvbS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrQ2hhcmdlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQbGFuY2tDb25zdGFudC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrTGVuZ3RoLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQbGFuY2tNYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQbGFuY2tUZW1wZXJhdHVyZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrVGltZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUG93LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQcmludC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUHJvZC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUHJvdG9uTWFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUXIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1F1YW50aWxlU2VxLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNRdWFudHVtT2ZDaXJjdWxhdGlvbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmFuZG9tLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5kb21JbnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JhbmdlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZUNsYXNzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYW5nZU5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JhbmdlVHJhbnNmb3JtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSYXRpb25hbGl6ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JlZHVjZWRQbGFuY2tDb25zdGFudC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmVsYXRpb25hbE5vZGUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JlcGxhY2VyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSZXNoYXBlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSZXNpemUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Jlc3VsdFNldC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmV2aXZlci5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmlnaHRBcml0aFNoaWZ0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSaWdodExvZ1NoaWZ0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSb3VuZC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUm93LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSb3dUcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1J5ZGJlcmcuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NRUlQxXzIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NRUlQyLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTYWNrdXJUZXRyb2RlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZWMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NlY2guZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NlY29uZFJhZGlhdGlvbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0Q2FydGVzaWFuLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXREaWZmZXJlbmNlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXREaXN0aW5jdC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0SW50ZXJzZWN0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXRJc1N1YnNldC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0TXVsdGlwbGljaXR5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXRQb3dlcnNldC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0U2l6ZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0U3ltRGlmZmVyZW5jZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0VW5pb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpZ24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpbXBsaWZ5LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTaW4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpbmguZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NsdS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU21hbGxlci5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU21hbGxlckVxLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTb3J0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGFDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3BhcnNlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3BlZWRPZkxpZ2h0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGxpdFVuaXQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NxcnQuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NxcnRtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcXVhcmUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NxdWVlemUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N0ZC5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3RkVHJhbnNmb3JtLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdGVmYW5Cb2x0em1hbm4uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N0aXJsaW5nUzIuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N0cmluZy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdWJzZXRUcmFuc2Zvcm0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdW0uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N1bVRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVGFuLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUYW5oLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUYXUuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Rob21zb25Dcm9zc1NlY3Rpb24uZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1RvLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUcmFjZS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVHJhbnNwb3NlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUcnVlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUeXBlT2YuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVbmFyeVBsdXMuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VuZXF1YWwuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVW5pdEZ1bmN0aW9uLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVcHBlcmNhc2VFLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVcHBlcmNhc2VQaS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVXNvbHZlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNWYWN1dW1JbXBlZGFuY2UuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1ZhcmlhbmNlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNWYXJpYW5jZVRyYW5zZm9ybS5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVmVyc2lvbi5nZW5lcmF0ZWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzV2Vha01peGluZ0FuZ2xlLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNXaWVuRGlzcGxhY2VtZW50LmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNYZ2NkLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNYb3IuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1plcm9zLmdlbmVyYXRlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L2RlcHJlY2F0ZWRBbnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lbnRyeS9pbXB1cmVGdW5jdGlvbnNBbnkuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvbWFpbkFueS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2VudHJ5L3B1cmVGdW5jdGlvbnNBbnkuZ2VuZXJhdGVkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZW50cnkvdHlwZUNoZWNrcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Vycm9yL0FyZ3VtZW50c0Vycm9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXJyb3IvRGltZW5zaW9uRXJyb3IuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9lcnJvci9JbmRleEVycm9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9IZWxwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9QYXJzZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvSW5maW5pdHkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvTE4xMC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy9MTjIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvTE9HMTBFLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL0xPRzJFLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL05hTi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy9TUVJUMV8yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL1NRUlQyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvZmFsc2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvaS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy9udWxsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RhbnRzL3BoaS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy9waS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy90YXUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdGFudHMvdHJ1ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0YW50cy92ZXJzaW9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RydWN0aW9uL2JpZ251bWJlci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9ib29sZWFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RydWN0aW9uL2NvbXBsZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdHJ1Y3Rpb24vY3JlYXRlVW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9mcmFjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9tYXRyaXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdHJ1Y3Rpb24vbnVtYmVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RydWN0aW9uL3NwYXJzZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvbnN0cnVjdGlvbi9zcGxpdFVuaXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb25zdHJ1Y3Rpb24vc3RyaW5nLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29uc3RydWN0aW9uL3VuaXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9jb3JlL2NvbmZpZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2NvcmUvaW1wb3J0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvY29yZS90eXBlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2VtYmVkZGVkRG9jcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FsZ2VicmEvZGVyaXZhdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FsZ2VicmEvbHNvbHZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYWxnZWJyYS9sdXAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hbGdlYnJhL2x1c29sdmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hbGdlYnJhL3FyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYWxnZWJyYS9yYXRpb25hbGl6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FsZ2VicmEvc2ltcGxpZnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hbGdlYnJhL3NsdS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FsZ2VicmEvdXNvbHZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9hYnMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2FkZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvY2JydC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvY2VpbC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvY3ViZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvZGl2aWRlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9kb3REaXZpZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2RvdE11bHRpcGx5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9kb3RQb3cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2V4cC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvZXhwbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvZXhwbTEuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2ZpeC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvZmxvb3IuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2djZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvaHlwb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2xjbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9sb2cxMC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMXAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL2xvZzIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL21vZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvbXVsdGlwbHkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL25vcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL250aFJvb3RzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9wb3cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9hcml0aG1ldGljL3JvdW5kLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9zaWduLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9zcXJ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9zcXJ0bS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvc3F1YXJlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy9zdWJ0cmFjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvdW5hcnlNaW51cy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2FyaXRobWV0aWMvdW5hcnlQbHVzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYXJpdGhtZXRpYy94Z2NkLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYml0d2lzZS9iaXRBbmQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9iaXR3aXNlL2JpdE5vdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2JpdHdpc2UvYml0T3IuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9iaXR3aXNlL2JpdFhvci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2JpdHdpc2UvbGVmdFNoaWZ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vYml0d2lzZS9yaWdodEFyaXRoU2hpZnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9iaXR3aXNlL3JpZ2h0TG9nU2hpZnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL2JlbGxOdW1iZXJzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vY29tYmluYXRvcmljcy9jYXRhbGFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vY29tYmluYXRvcmljcy9jb21wb3NpdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2NvbWJpbmF0b3JpY3Mvc3RpcmxpbmdTMi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2NvbXBsZXgvYXJnLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vY29tcGxleC9jb25qLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vY29tcGxleC9pbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2NvbXBsZXgvcmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9leHByZXNzaW9uL2V2YWx1YXRlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vZXhwcmVzc2lvbi9oZWxwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vZ2VvbWV0cnkvZGlzdGFuY2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9nZW9tZXRyeS9pbnRlcnNlY3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9sb2dpY2FsL2FuZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2xvZ2ljYWwvbm90LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbG9naWNhbC9vci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL2xvZ2ljYWwveG9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2NvbHVtbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9jb25jYXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvY3Jvc3MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvY3RyYW5zcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9kZXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvZGlhZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9kb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvZWlncy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9maWx0ZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvZmxhdHRlbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9mb3JFYWNoLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2dldE1hdHJpeERhdGFUeXBlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2lkZW50aXR5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L2ludi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9rcm9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L21hcC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9vbmVzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3BhcnRpdGlvblNlbGVjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9yYW5nZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9yZXNoYXBlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3Jlc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9yb3cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC9zb3J0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3NxdWVlemUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9tYXRyaXgvc3Vic2V0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3RyYWNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vbWF0cml4L3RyYW5zcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL21hdHJpeC96ZXJvcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9uc1dpdGhSZXAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9wcm9iYWJpbGl0eS9mYWN0b3JpYWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9wcm9iYWJpbGl0eS9nYW1tYS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2tsZGl2ZXJnZW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L211bHRpbm9taWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcHJvYmFiaWxpdHkvcGVybXV0YXRpb25zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcHJvYmFiaWxpdHkvcGlja1JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbUludC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZU5hdHVyYWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL2NvbXBhcmVUZXh0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcmVsYXRpb25hbC9kZWVwRXF1YWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vcmVsYXRpb25hbC9lcXVhbFRleHQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL2xhcmdlci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3JlbGF0aW9uYWwvbGFyZ2VyRXEuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL3NtYWxsZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9yZWxhdGlvbmFsL3NtYWxsZXJFcS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3JlbGF0aW9uYWwvdW5lcXVhbC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NldC9zZXRDYXJ0ZXNpYW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zZXQvc2V0RGlmZmVyZW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NldC9zZXREaXN0aW5jdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NldC9zZXRJbnRlcnNlY3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zZXQvc2V0SXNTdWJzZXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zZXQvc2V0TXVsdGlwbGljaXR5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc2V0L3NldFBvd2Vyc2V0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc2V0L3NldFNpemUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zZXQvc2V0U3ltRGlmZmVyZW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NldC9zZXRVbmlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3NwZWNpYWwvZXJmLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc3RhdGlzdGljcy9tYWQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL21heC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWVhbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWVkaWFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc3RhdGlzdGljcy9taW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL21vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL3Byb2QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL3F1YW50aWxlU2VxLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vc3RhdGlzdGljcy9zdGQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi9zdGF0aXN0aWNzL3N1bS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3N0YXRpc3RpY3MvdmFyaWFuY2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY29zaC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY290LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3RoLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjc2MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNzY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXNlYy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2VjaC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2luLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzaW5oLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2F0YW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbjIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvY29zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Nvc2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvY290LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NvdGguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvY3NjLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NzY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2VjLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NlY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2luLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi90cmlnb25vbWV0cnkvdGFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi91bml0cy90by5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3V0aWxzL2Nsb25lLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvZm9ybWF0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaGFzTnVtZXJpY1ZhbHVlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaXNJbnRlZ2VyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaXNOYU4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi91dGlscy9pc05lZ2F0aXZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaXNOdW1lcmljLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvaXNQb3NpdGl2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZW1iZWRkZWREb2NzL2Z1bmN0aW9uL3V0aWxzL2lzUHJpbWUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi91dGlscy9pc1plcm8uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL2VtYmVkZGVkRG9jcy9mdW5jdGlvbi91dGlscy9udW1lcmljLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZnVuY3Rpb24vdXRpbHMvdHlwZU9mLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9mdW5jdGlvbi9jb21waWxlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9mdW5jdGlvbi9ldmFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9mdW5jdGlvbi9ldmFsdWF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZnVuY3Rpb24vaGVscC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vZnVuY3Rpb24vcGFyc2VyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9rZXl3b3Jkcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS9BY2Nlc3Nvck5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvQXJyYXlOb2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL0Fzc2lnbm1lbnROb2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL0Jsb2NrTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS9Db25kaXRpb25hbE5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvQ29uc3RhbnROb2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL0Z1bmN0aW9uQXNzaWdubWVudE5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvRnVuY3Rpb25Ob2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL0luZGV4Tm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS9Ob2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL09iamVjdE5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvT3BlcmF0b3JOb2RlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9ub2RlL1BhcmVudGhlc2lzTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS9SYW5nZU5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvUmVsYXRpb25hbE5vZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvU3ltYm9sTm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vbm9kZS91dGlscy9hY2Nlc3MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL25vZGUvdXRpbHMvYXNzaWduLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi9vcGVyYXRvcnMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3BhcnNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vYXBwbHkudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vY29sdW1uLnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL2NvbmNhdC50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS9maWx0ZXIudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vZm9yRWFjaC50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS9pbmRleC50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS9tYXAudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vbWF4LnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL21lYW4udHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vbWluLnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL3JhbmdlLnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL3Jvdy50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS9zdGQudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vc3Vic2V0LnRyYW5zZm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL3N1bS50cmFuc2Zvcm0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9leHByZXNzaW9uL3RyYW5zZm9ybS91dGlscy9jb21waWxlSW5saW5lRXhwcmVzc2lvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2V4cHJlc3Npb24vdHJhbnNmb3JtL3V0aWxzL2Vycm9yVHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZXhwcmVzc2lvbi90cmFuc2Zvcm0vdmFyaWFuY2UudHJhbnNmb3JtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZmFjdG9yaWVzQW55LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9kZWNvbXBvc2l0aW9uL2x1cC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvZGVjb21wb3NpdGlvbi9xci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvZGVjb21wb3NpdGlvbi9zbHUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL2Rlcml2YXRpdmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3JhdGlvbmFsaXplLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zaW1wbGlmeS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc2ltcGxpZnkvcmVzb2x2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc2ltcGxpZnkvc2ltcGxpZnlDb25zdGFudC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc2ltcGxpZnkvc2ltcGxpZnlDb3JlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zaW1wbGlmeS91dGlsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zb2x2ZXIvbHNvbHZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zb2x2ZXIvbHVzb2x2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc29sdmVyL3Vzb2x2ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc29sdmVyL3V0aWxzL3NvbHZlVmFsaWRhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzQW1kLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zcGFyc2UvY3NDb3VudHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc0Rmcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzRXRyZWUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc0ZrZWVwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zcGFyc2UvY3NGbGlwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYWxnZWJyYS9zcGFyc2UvY3NJcHZlYy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzTGVhZi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzTHUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc01hcmsuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc01hcmtlZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzUGVybXV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzUG9zdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzUmVhY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc1Nwc29sdmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hbGdlYnJhL3NwYXJzZS9jc1Nxci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzVGRmcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FsZ2VicmEvc3BhcnNlL2NzVW5mbGlwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9hYnMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2FkZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvYWRkU2NhbGFyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9jYnJ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9jZWlsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9jdWJlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9kaXZpZGUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2RpdmlkZVNjYWxhci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90RGl2aWRlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9kb3RNdWx0aXBseS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90UG93LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9leHAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2V4cG0xLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9maXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2Zsb29yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9nY2QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2h5cG90LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9sY20uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2xvZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMTAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL2xvZzFwLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9sb2cyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9tb2QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL211bHRpcGx5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYXJpdGhtZXRpYy9tdWx0aXBseVNjYWxhci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvbm9ybS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvbnRoUm9vdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvbnRoUm9vdHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3Bvdy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvcm91bmQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3NpZ24uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3NxcnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3NxdWFyZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMvc3VidHJhY3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3VuYXJ5TWludXMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9hcml0aG1ldGljL3VuYXJ5UGx1cy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2FyaXRobWV0aWMveGdjZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2JpdHdpc2UvYml0QW5kLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYml0d2lzZS9iaXROb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9iaXR3aXNlL2JpdE9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYml0d2lzZS9iaXRYb3IuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9iaXR3aXNlL2xlZnRTaGlmdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2JpdHdpc2UvcmlnaHRBcml0aFNoaWZ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vYml0d2lzZS9yaWdodExvZ1NoaWZ0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vY29tYmluYXRvcmljcy9iZWxsTnVtYmVycy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2NvbWJpbmF0b3JpY3MvY2F0YWxhbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2NvbWJpbmF0b3JpY3MvY29tcG9zaXRpb24uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9jb21iaW5hdG9yaWNzL3N0aXJsaW5nUzIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9jb21wbGV4L2FyZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2NvbXBsZXgvY29uai5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2NvbXBsZXgvaW0uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9jb21wbGV4L3JlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vZ2VvbWV0cnkvZGlzdGFuY2UuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9nZW9tZXRyeS9pbnRlcnNlY3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9sb2dpY2FsL2FuZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2xvZ2ljYWwvbm90LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbG9naWNhbC9vci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL2xvZ2ljYWwveG9yLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2FwcGx5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2NvbHVtbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9jb25jYXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvY3Jvc3MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvY3RyYW5zcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9kZXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvZGlhZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9kb3QuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvZWlncy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9leHBtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2V5ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9maWx0ZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvZmxhdHRlbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9mb3JFYWNoLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2dldE1hdHJpeERhdGFUeXBlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2lkZW50aXR5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L2ludi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9rcm9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L21hcC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9vbmVzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3BhcnRpdGlvblNlbGVjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9yYW5nZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9yZXNoYXBlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3Jlc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9yb3cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC9zb3J0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3NxcnRtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3NxdWVlemUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9tYXRyaXgvc3Vic2V0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3RyYWNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vbWF0cml4L3RyYW5zcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL21hdHJpeC96ZXJvcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9ucy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9uc1dpdGhSZXAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9mYWN0b3JpYWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9nYW1tYS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2tsZGl2ZXJnZW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L211bHRpbm9taWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcHJvYmFiaWxpdHkvcGVybXV0YXRpb25zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcHJvYmFiaWxpdHkvcGlja1JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbUludC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3V0aWwvcmFuZG9tTWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcHJvYmFiaWxpdHkvdXRpbC9zZWVkZWRSTkcuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9yZWxhdGlvbmFsL2NvbXBhcmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9yZWxhdGlvbmFsL2NvbXBhcmVOYXR1cmFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcmVsYXRpb25hbC9jb21wYXJlVGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZGVlcEVxdWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcmVsYXRpb25hbC9lcXVhbC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZXF1YWxTY2FsYXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsVGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvbGFyZ2VyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcmVsYXRpb25hbC9sYXJnZXJFcS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvc21hbGxlci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3JlbGF0aW9uYWwvc21hbGxlckVxLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vcmVsYXRpb25hbC91bmVxdWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc2V0L3NldENhcnRlc2lhbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3NldC9zZXREaWZmZXJlbmNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc2V0L3NldERpc3RpbmN0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc2V0L3NldEludGVyc2VjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3NldC9zZXRJc1N1YnNldC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3NldC9zZXRNdWx0aXBsaWNpdHkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zZXQvc2V0UG93ZXJzZXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zZXQvc2V0U2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3NldC9zZXRTeW1EaWZmZXJlbmNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc2V0L3NldFVuaW9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3BlY2lhbC9lcmYuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zdGF0aXN0aWNzL21hZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWF4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3RhdGlzdGljcy9tZWFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3RhdGlzdGljcy9tZWRpYW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zdGF0aXN0aWNzL21pbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbW9kZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3MvcHJvZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3MvcXVhbnRpbGVTZXEuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zdGF0aXN0aWNzL3N0ZC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0YXRpc3RpY3Mvc3VtLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3RhdGlzdGljcy91dGlscy9pbXByb3ZlRXJyb3JNZXNzYWdlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vc3RhdGlzdGljcy92YXJpYW5jZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3N0cmluZy9mb3JtYXQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi9zdHJpbmcvcHJpbnQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvcy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY29zaC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY290LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3RoLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjc2MuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNzY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXNlYy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2VjaC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2luLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzaW5oLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2F0YW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbjIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvY29zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Nvc2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvY290LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NvdGguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvY3NjLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2NzY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2VjLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NlY2guanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2luLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi90cmlnb25vbWV0cnkvdGFuLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3RhbmguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91bml0L3RvLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdXRpbHMvY2xvbmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9oYXNOdW1lcmljVmFsdWUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9pc0ludGVnZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9pc05hTi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3V0aWxzL2lzTmVnYXRpdmUuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9pc051bWVyaWMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy9pc1Bvc2l0aXZlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvZnVuY3Rpb24vdXRpbHMvaXNQcmltZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3V0aWxzL2lzWmVyby5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL2Z1bmN0aW9uL3V0aWxzL251bWVyaWMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9mdW5jdGlvbi91dGlscy90eXBlT2YuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9qc29uL3JlcGxhY2VyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvanNvbi9yZXZpdmVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvcGxhaW4vbnVtYmVyL2FyaXRobWV0aWMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvYml0d2lzZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3BsYWluL251bWJlci9jb21iaW5hdGlvbnMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvY29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvcGxhaW4vbnVtYmVyL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvcGxhaW4vbnVtYmVyL2xvZ2ljYWwuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvcHJvYmFiaWxpdHkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvcmVsYXRpb25hbC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3BsYWluL251bWJlci90cmlnb25vbWV0cnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi9wbGFpbi9udW1iZXIvdXRpbHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2JpZ251bWJlci9CaWdOdW1iZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2JpZ251bWJlci9mdW5jdGlvbi9iaWdudW1iZXIuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2Jvb2xlYW4uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2NoYWluL0NoYWluLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9jaGFpbi9mdW5jdGlvbi9jaGFpbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvY29tcGxleC9Db21wbGV4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9jb21wbGV4L2Z1bmN0aW9uL2NvbXBsZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL2ZyYWN0aW9uL0ZyYWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9mcmFjdGlvbi9mdW5jdGlvbi9mcmFjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L0RlbnNlTWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvRmlib25hY2NpSGVhcC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L0ltbXV0YWJsZURlbnNlTWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvTWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvTWF0cml4SW5kZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC9SYW5nZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L1NwYS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L1NwYXJzZU1hdHJpeC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L2Z1bmN0aW9uL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvZnVuY3Rpb24vbWF0cml4LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvZnVuY3Rpb24vc3BhcnNlLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDEuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDQuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA2LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDcuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wOC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA5LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTAuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvbnVtYmVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9yZXN1bHRzZXQvUmVzdWx0U2V0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS9zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi90eXBlL3VuaXQvVW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvdW5pdC9mdW5jdGlvbi9jcmVhdGVVbml0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS91bml0L2Z1bmN0aW9uL3NwbGl0VW5pdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3R5cGUvdW5pdC9mdW5jdGlvbi91bml0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdHlwZS91bml0L3BoeXNpY2FsQ29uc3RhbnRzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvYXJyYXkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9iaWdudW1iZXIvYml0d2lzZS5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL2JpZ251bWJlci9jb25zdGFudHMuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9iaWdudW1iZXIvZm9ybWF0dGVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvYmlnbnVtYmVyL25lYXJseUVxdWFsLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvY29sbGVjdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL2NvbXBsZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9jdXN0b21zLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvZW1pdHRlci5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL2ZhY3RvcnkuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9mdW5jdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL2lzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvbGF0ZXguanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9sb2cuanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL2xpYi91dGlscy9ub29wLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvbnVtYmVyLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvb2JqZWN0LmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvcG9seWZpbGxzLmpzIiwibm9kZV9tb2R1bGVzL21hdGhqcy9saWIvdXRpbHMvcHJvZHVjdC5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3V0aWxzL3N0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9tYXRoanMvbGliL3ZlcnNpb24uanMiLCJub2RlX21vZHVsZXMvbWF0aGpzL21haW4vZXM1L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NlZWQtcmFuZG9tL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3RpbnktZW1pdHRlci9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy90eXBlZC1mdW5jdGlvbi90eXBlZC1mdW5jdGlvbi5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcGtCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNudEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlqYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdlhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMVNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdk1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqcUJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5YkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0tBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9QQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcnFCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RVQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdXQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9pQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BaQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzVEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNWQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNUQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwdkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDektBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNYQTs7QUNBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1M0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3d0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2wwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaFBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9kQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1WUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNWlGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDam5CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlzREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMU9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9JQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3oyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNkQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9VQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hQQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdmRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pyQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0tBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4U0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4T0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeE5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOXJEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMTVFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwYUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0dBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25uQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbDNCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0ekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDelVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25NQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcE1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0xBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN01BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwQkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5TUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9KQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0tBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1NkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbkRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdldBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqTkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZiQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDZkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2pGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4RUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3pEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0T0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9GQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkxBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9KQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9KQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0VBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN6REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVGQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNuR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzVMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25HQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMzSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMvREE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaEVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDOURBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzFEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN4RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDamFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0RkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcENBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDNURBOztBQ0FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDak1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDM0NBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3JFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDcEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzc2QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzNZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeFBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDL1FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2VEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxVkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNoS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdGdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3RFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekRBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzlIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN2TEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2hMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDN0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM5SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNqSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUMxR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNwR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDakZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDeEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbEZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ2xFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzM0SEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNyRkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdkNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQy9EQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDckpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDdG9CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdlQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM1TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaERBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3BPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25CQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDMUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDekJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUN0R0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDblBBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUM3QkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQzdCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUNsckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDbmNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ3ZCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FDaE9BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ1RBO0FBQ0E7OztBQ0RBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQzdLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQ25FQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6ImdlbmVyYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwiLyoqXG4gKiBAbGljZW5zZVxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNiwgUGV0YXIgS29ycG9uYWnEhyA8cGV0YXIua29ycG9uYWljQGdtYWlsLmNvbT5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZSwgZm91bmQgaW5cbiAqIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbnZhciBhbnRscjQgPSByZXF1aXJlKCdhbnRscjQvaW5kZXgnKTtcbnZhciBRQVNNTGV4ZXIgPSByZXF1aXJlKCcuL1FBU01MZXhlcicpO1xudmFyIFFBU01QYXJzZXIgPSByZXF1aXJlKCcuL1FBU01QYXJzZXInKTtcbnZhciBRQVNNTGlzdGVuZXIgPSByZXF1aXJlKCcuL1FBU01MaXN0ZW5lcicpLlFBU01MaXN0ZW5lcjtcblxudmFyIEVycm9yTGlzdGVuZXIgPSBmdW5jdGlvbihlcnJvcnMpIHtcbiAgYW50bHI0LmVycm9yLkVycm9yTGlzdGVuZXIuY2FsbCh0aGlzKTtcbiAgdGhpcy5lcnJvcnMgPSBlcnJvcnM7XG4gIHJldHVybiB0aGlzO1xufTtcblxuRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5lcnJvci5FcnJvckxpc3RlbmVyLnByb3RvdHlwZSk7XG5FcnJvckxpc3RlbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVycm9yTGlzdGVuZXI7XG5FcnJvckxpc3RlbmVyLnByb3RvdHlwZS5zeW50YXhFcnJvciA9IGZ1bmN0aW9uKHJlYywgc3ltLCBsaW5lLCBjb2wsIG1zZywgZSkge1xuICB0aGlzLmVycm9ycy5wdXNoKHtcbiAgXHRsaW5lOiBsaW5lLFxuICBcdGNvbDogY29sLFxuICBcdG1zZzogbXNnXG4gIH0pO1xufTtcblxudmFyIFFDUUFTTUxpc3RlbmVyID0gZnVuY3Rpb24oY2lyY3VpdCwgY29tcGF0aWJpbGl0eU1vZGUpIHtcbiAgICB0aGlzLmNpcmN1aXQgPSBjaXJjdWl0O1xuICAgIHRoaXMucXJlZ01hcCA9IHt9O1xuICAgIHRoaXMuY29uZGl0aW9uID0ge307XG4gICAgdGhpcy5jb21wYXRpYmlsaXR5TW9kZSA9IGNvbXBhdGliaWxpdHlNb2RlO1xuXG4gICAgUUFTTUxpc3RlbmVyLmNhbGwodGhpcyk7IC8vIGluaGVyaXQgZGVmYXVsdCBsaXN0ZW5lclxuICAgIHJldHVybiB0aGlzO1xufTtcblxudmFyIFFBU01JbXBvcnQgPSBmdW5jdGlvbihjaXJjdWl0LCBpbnB1dCwgZXJyb3JDYWxsYmFjaywgY29tcGF0aWJpbGl0eU1vZGUpIHtcblx0dmFyIGNoYXJzID0gbmV3IGFudGxyNC5JbnB1dFN0cmVhbShpbnB1dCk7XG5cdHZhciBsZXhlciA9IG5ldyBRQVNNTGV4ZXIuUUFTTUxleGVyKGNoYXJzKTtcblx0dmFyIHRva2VucyAgPSBuZXcgYW50bHI0LkNvbW1vblRva2VuU3RyZWFtKGxleGVyKTtcblx0dmFyIHBhcnNlciA9IG5ldyBRQVNNUGFyc2VyLlFBU01QYXJzZXIodG9rZW5zKTtcblx0cGFyc2VyLmJ1aWxkUGFyc2VUcmVlcyA9IHRydWU7XG5cblx0cGFyc2VyLnJlbW92ZUVycm9yTGlzdGVuZXJzKCk7XG5cdHZhciBlcnJvcnMgPSBbXTtcblx0dmFyIGVycm9yTGlzdGVuZXIgPSBuZXcgRXJyb3JMaXN0ZW5lcihlcnJvcnMpO1xuXHRwYXJzZXIuYWRkRXJyb3JMaXN0ZW5lcihlcnJvckxpc3RlbmVyKTtcblxuXHR2YXIgdHJlZSA9IHBhcnNlci5tYWlucHJvZygpOyAgIFxuXHR2YXIgUUFTTSA9IG5ldyBRQ1FBU01MaXN0ZW5lcihjaXJjdWl0LCBjb21wYXRpYmlsaXR5TW9kZSk7XG5cdGFudGxyNC50cmVlLlBhcnNlVHJlZVdhbGtlci5ERUZBVUxULndhbGsoUUFTTSwgdHJlZSk7XG5cdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRlcnJvckNhbGxiYWNrKGVycm9ycyk7XG5cdH1cbn07XG5cbiBcbi8vIGluaGVyaXQgZGVmYXVsdCBsaXN0ZW5lclxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShRQVNNTGlzdGVuZXIucHJvdG90eXBlKTtcblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFFDUUFTTUxpc3RlbmVyO1xuXG5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5udW1RYml0ID0gZnVuY3Rpb24oKSB7XG5cdHZhciBudW0gPSAwO1xuXHRmb3IodmFyIHJlZyBpbiB0aGlzLnFyZWdNYXApIHtcblx0XHRudW0gKz0gdGhpcy5xcmVnTWFwW3JlZ107XG5cdH1cblx0cmV0dXJuIG51bTtcbn07XG5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5xcmVnQmFzZSA9IGZ1bmN0aW9uKHFyZWcpIHtcblx0dmFyIGJhc2UgPSAwO1xuXHRmb3IodmFyIHJlZyBpbiB0aGlzLnFyZWdNYXApIHtcblx0XHRpZihyZWcgPT0gcXJlZykge1xuXHRcdFx0cmV0dXJuIGJhc2U7XG5cdFx0fVxuXHRcdGJhc2UgKz0gdGhpcy5xcmVnTWFwW3JlZ107XG5cdH1cblx0cmV0dXJuIGJhc2U7XG59O1xuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUucXJlZ0xlbiA9IGZ1bmN0aW9uKHJlZykge1xuXHRyZXR1cm4gdGhpcy5xcmVnTWFwW3JlZ10gfHwgMDtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjbWFpbnByb2cuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJNYWlucHJvZyA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNtYWlucHJvZy5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0TWFpbnByb2cgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjc3RhdGVtZW50LlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyU3RhdGVtZW50ID0gZnVuY3Rpb24oY3R4KSB7XG5cdHZhciBzZWxmID0gdGhpcztcblxuXHQvLyBjb25kaXRpb25cblx0dmFyIG5hbWUgPSBjdHguZ2V0Q2hpbGRDb3VudCgpID8gY3R4LmdldENoaWxkKDApLmdldFRleHQoKSA6IFwiXCI7XG5cdGlmKG5hbWUgPT0gXCJpZlwiKSB7XG5cdFx0dGhpcy5jb25kaXRpb24gPSB7XG5cdFx0XHRjcmVnOiBjdHguSUQoKS5nZXRUZXh0KCksXG5cdFx0XHR2YWx1ZTogcGFyc2VJbnQoY3R4LklOVCgpLmdldFRleHQoKSlcblx0XHR9XG5cdH1cblxuXHQvLyBzdWJyb3V0aW5lIChnYXRlIGRlY2xhcmF0aW9uKVxuXHRpZihjdHguZ2F0ZWRlY2woKSkge1xuXHRcdHZhciBnYXRlZGVjbCA9IGN0eC5nYXRlZGVjbCgpO1xuXHRcdHZhciBhcmdzID0gW107XG5cdFx0dmFyIHBhcmFtcyA9IFtdO1xuXG5cdFx0dmFyIGNjb3VudCA9IGdhdGVkZWNsLmdldENoaWxkQ291bnQoKTtcblx0XHRpZihjY291bnQgPiAyICYmIGdhdGVkZWNsLmdldENoaWxkKDIpLklEKSB7XG5cdFx0XHQvLyBubyBwYXJhbXNcblx0XHRcdGFyZ3MgPSBnYXRlZGVjbC5nZXRDaGlsZCgyKS5JRCgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZihjY291bnQgPiAzICYmIGdhdGVkZWNsLmdldENoaWxkKDMpLklEKSB7XG5cdFx0XHRcdHBhcmFtcyA9IGdhdGVkZWNsLmdldENoaWxkKDMpLklEKCk7XG5cdFx0XHR9XG5cdFx0XHRpZihjY291bnQgPiA1ICYmIGdhdGVkZWNsLmdldENoaWxkKDUpLklEKSB7XG5cdFx0XHRcdC8vIG5vIHBhcmFtc1xuXHRcdFx0XHRhcmdzID0gZ2F0ZWRlY2wuZ2V0Q2hpbGQoNSkuSUQoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcy5jaXJjdWl0KTtcblx0XHR2YXIgY3VzdG9tR2F0ZSA9IG5ldyBwcm90by5jb25zdHJ1Y3RvcihhcmdzLmxlbmd0aCk7XG5cdFx0dmFyIGN1c3RvbUdhdGVOYW1lID0gZ2F0ZWRlY2wuSUQoKS5nZXRUZXh0KCk7XG5cdFx0dmFyIGN1c3RvbUdhdGVSZWdzID0gW107XG5cblx0XHRhcmdzLm1hcChmdW5jdGlvbihyZWcpIHtcblx0XHRcdGN1c3RvbUdhdGVSZWdzLnB1c2gocmVnLmdldFRleHQoKSk7XG5cdFx0fSk7XG5cblx0XHRwYXJhbXMubWFwKGZ1bmN0aW9uKHBhcikge1xuXHRcdFx0dmFyIHBhck5hbWUgPSBwYXIuZ2V0VGV4dCgpO1xuXHRcdFx0Y3VzdG9tR2F0ZS5wYXJhbXMucHVzaChwYXJOYW1lKTtcblx0XHR9KTtcblxuXHRcdGlmKGN0eC5nb3BsaXN0KCkpIHtcblx0XHRcdHZhciBnb3BsaXN0ID0gY3R4LmdvcGxpc3QoKTtcblx0XHRcdGdvcGxpc3QudW9wKCkubWFwKGZ1bmN0aW9uKHVvcCkge1xuXHRcdFx0XHR2YXIgZ2F0ZU5hbWUgPSB1b3AuSUQoKSA/IHVvcC5JRCgpLmdldFRleHQoKSA6IFwiXCI7XG5cdFx0XHRcdGlmKGdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0dmFyIGlkbGlzdCA9IHVvcC5hbnlsaXN0KCkgPyB1b3AuYW55bGlzdCgpLmlkbGlzdCgpIDogbnVsbDtcblx0XHRcdFx0XHR2YXIgbWl4ZWRsaXN0ID0gdW9wLmFueWxpc3QoKSA/IHVvcC5hbnlsaXN0KCkubWl4ZWRsaXN0KCkgOiBudWxsO1xuXHRcdFx0XHRcdHZhciBleHBsaXN0ID0gdW9wLmV4cGxpc3QoKTtcblxuXG5cdFx0XHRcdFx0c3dpdGNoKGdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwiQ1hcIjogZ2F0ZU5hbWUgPSBcImN4XCI7IGJyZWFrO1xuXHRcdFx0XHRcdFx0Y2FzZSBcIlVcIjogZ2F0ZU5hbWUgPSBcInUzXCI7IGJyZWFrO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKCFzZWxmLmNpcmN1aXQuYmFzaWNHYXRlc1tnYXRlTmFtZV0gJiYgIXNlbGYuY2lyY3VpdC5jdXN0b21HYXRlc1tnYXRlTmFtZV0pIHtcblx0XHRcdFx0XHRcdC8vIGZpbmQgZ2F0ZSBieSBxYXNtIG5hbWVcblx0XHRcdFx0XHRcdGZvcih2YXIgdG1wTmFtZSBpbiBzZWxmLmNpcmN1aXQuYmFzaWNHYXRlcykge1xuXHRcdFx0XHRcdFx0XHR2YXIgdG1wRGVmID0gc2VsZi5jaXJjdWl0LmJhc2ljR2F0ZXNbdG1wTmFtZV07XG5cdFx0XHRcdFx0XHRcdGlmKHRtcERlZi5leHBvcnRJbmZvICYmIHRtcERlZi5leHBvcnRJbmZvLnFhc20gJiYgdG1wRGVmLmV4cG9ydEluZm8ucWFzbS5uYW1lICYmIHRtcERlZi5leHBvcnRJbmZvLnFhc20ubmFtZSA9PSBnYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdGdhdGVOYW1lID0gdG1wTmFtZTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQvLyBuZXdlciB2ZXJzaW9ucyBvZiBxaXNraXQgZXhwb3J0cyB0byBxYXNtIHdpdGggZ2F0ZSBuYW1lcyB1bmRlZmluZWQgYnkgcWFzbSAyLjAgZGVmaW5pdGlvbi4uLlxuXHRcdFx0XHRcdFx0XHRpZih0bXBEZWYuZXhwb3J0SW5mbyAmJiB0bXBEZWYuZXhwb3J0SW5mby5xaXNraXQgJiYgdG1wRGVmLmV4cG9ydEluZm8ucWlza2l0Lm5hbWUgJiYgdG1wRGVmLmV4cG9ydEluZm8ucWlza2l0Lm5hbWUgPT0gZ2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRnYXRlTmFtZSA9IHRtcE5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblxuXHRcdFx0XHRcdHZhciBwYXJhbXMgPSB7fTtcblx0XHRcdFx0XHRpZihleHBsaXN0ICYmIGV4cGxpc3QuZXhwKCkpIHtcblx0XHRcdFx0XHRcdHZhciBnYXRlRGVmID0gc2VsZi5jaXJjdWl0LmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0XHRcdFx0aWYoIWdhdGVEZWYpIHtcblx0XHRcdFx0XHRcdFx0Z2F0ZURlZiA9IHNlbGYuY2lyY3VpdC5jdXN0b21HYXRlc1tnYXRlTmFtZV07XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGdhdGVEZWYpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtTGlzdCA9IGV4cGxpc3QuZXhwKCk7XG5cdFx0XHRcdFx0XHRcdHZhciBwYXJhbURlZiA9IGdhdGVEZWYucGFyYW1zIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRwYXJhbUxpc3QubWFwKGZ1bmN0aW9uKHBhcmFtSXRlbSwgcGFyYW1JbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbVZhbHVlID0gcGFyYW1JdGVtLmdldFRleHQoKTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gcGFyYW1EZWYubGVuZ3RoID49IHBhcmFtSW5kZXggPyBwYXJhbURlZltwYXJhbUluZGV4XSA6IFwiXCI7XG5cdFx0XHRcdFx0XHRcdFx0aWYocGFyYW1OYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbXNbcGFyYW1OYW1lXSA9IHBhcmFtVmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgb3B0aW9ucyA9IHsgcGFyYW1zOiBwYXJhbXMgfTtcblxuXG5cdFx0XHRcdFx0dmFyIHdpcmVzID0gW107XG5cblx0XHRcdFx0XHRpZihpZGxpc3QpIHtcblx0XHRcdFx0XHRcdHZhciBjb3VudCA9IGlkbGlzdC5JRCgpLmxlbmd0aDtcblx0XHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdHdpcmVzLnB1c2goY3VzdG9tR2F0ZVJlZ3MuaW5kZXhPZihpZGxpc3QuSUQoKVtpXS5nZXRUZXh0KCkpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihtaXhlZGxpc3QpIHtcblx0XHRcdFx0XHRcdC8vID9cblx0XHRcdFx0XHR9XG5cbi8qXG5cdFx0XHRcdFx0aWYoIXNlbGYuY29tcGF0aWJpbGl0eU1vZGUpIHtcblx0XHRcdFx0XHRcdHN3aXRjaChnYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwicnpcIjoge1xuXHRcdFx0XHRcdFx0XHRcdGdhdGVOYW1lID0gXCJ1MVwiO1xuXHRcdFx0XHRcdFx0XHRcdGlmKG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJhbXMgJiYgb3B0aW9ucy5wYXJhbXMucGhpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvcHRpb25zLnBhcmFtcy5sYW1iZGEgPSBvcHRpb25zLnBhcmFtcy5waGk7XG5cdFx0XHRcdFx0XHRcdFx0XHRkZWxldGUgb3B0aW9ucy5wYXJhbXMucGhpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuKi9cblx0XHRcdFx0XHR2YXIgZXh0ZXJuYWwgPSBzZWxmLmNpcmN1aXQuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0XHRcdGlmKGV4dGVybmFsKSB7XG5cdFx0XHRcdFx0XHRjdXN0b21HYXRlLnJlZ2lzdGVyR2F0ZShnYXRlTmFtZSwgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShleHRlcm5hbCkpKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjdXN0b21HYXRlLmFkZEdhdGUoZ2F0ZU5hbWUsIC0xLCB3aXJlcywgb3B0aW9ucyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHRoaXMuY2lyY3VpdC5yZWdpc3RlckdhdGUoY3VzdG9tR2F0ZU5hbWUsIGN1c3RvbUdhdGUuc2F2ZShmYWxzZSkpO1xuXHR9XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3N0YXRlbWVudC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0U3RhdGVtZW50ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3ZlcnNpb24uXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJWZXJzaW9uID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3ZlcnNpb24uXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdFZlcnNpb24gPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZGVjbC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckRlY2wgPSBmdW5jdGlvbihjdHgpIHtcblx0c3dpdGNoKGN0eC5nZXRDaGlsZCgwKS5nZXRUZXh0KCkpIHtcblx0XHRjYXNlIFwicXJlZ1wiOiB0aGlzLnFyZWdNYXBbY3R4LmdldENoaWxkKDEpLmdldFRleHQoKV0gPSBwYXJzZUludChjdHguZ2V0Q2hpbGQoMykuZ2V0VGV4dCgpKTsgYnJlYWs7XG5cdFx0Y2FzZSBcImNyZWdcIjogdGhpcy5jaXJjdWl0LmNyZWF0ZUNyZWcoY3R4LmdldENoaWxkKDEpLmdldFRleHQoKSwgcGFyc2VJbnQoY3R4LmdldENoaWxkKDMpLmdldFRleHQoKSkpOyBicmVhaztcblx0fVx0XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2RlY2wuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdERlY2wgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZ2F0ZWRlY2wuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJHYXRlZGVjbCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNnYXRlZGVjbC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0R2F0ZWRlY2wgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZ29wbGlzdC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckdvcGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZ29wbGlzdC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0R29wbGlzdCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjcW9wLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyUW9wID0gZnVuY3Rpb24oY3R4KSB7XG5cdHZhciBzZWxmID0gdGhpcztcblx0dmFyIGNvbmRpdGlvbiA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jb25kaXRpb24pKTtcblx0dGhpcy5jb25kaXRpb24gPSB7fTtcblxuXHR2YXIgbmFtZSA9IGN0eC5nZXRDaGlsZENvdW50KCkgPyBjdHguZ2V0Q2hpbGQoMCkuZ2V0VGV4dCgpIDogXCJcIjtcblxuXHRpZihuYW1lID09IFwicmVzZXRcIikge1xuXHRcdHZhciBxcmVnID0gXCJcIjtcblx0XHR2YXIgcWJpdCA9IC0xO1xuXHRcdHZhciBjb3VudCA9IGN0eC5hcmd1bWVudCgpLmxlbmd0aDtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuXHRcdFx0dmFyIGFyZyA9IGN0eC5hcmd1bWVudCgpW2ldO1xuXHRcdFx0aWYoaSA9PSAwKSB7XG5cdFx0XHRcdHFyZWcgPSBhcmcuSUQoKS5nZXRUZXh0KCk7XG5cdFx0XHRcdHFiaXQgPSBhcmcuSU5UKCkgPyBwYXJzZUludChhcmcuSU5UKCkuZ2V0VGV4dCgpKSA6IC0xO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmKHFyZWcpIHtcblx0XHRcdHZhciBudW1CaXRzID0gc2VsZi5xcmVnTGVuKHFyZWcpO1xuXHRcdFx0aWYocWJpdCA8IDApIHtcblx0XHRcdFx0Ly9cblx0XHRcdFx0Ly8gYXJndW1lbnQgaXMgZW50aXJlIHJlZ2lzdGVyXG5cdFx0XHRcdC8vXG5cdFx0XHRcdGZvcih2YXIgeCA9IDA7IHggPCBudW1CaXRzOyB4KyspIHtcblx0XHRcdFx0XHRzZWxmLmNpcmN1aXQuYWRkR2F0ZShcInJlc2V0XCIsIC0xLCB4ICsgc2VsZi5xcmVnQmFzZShxcmVnKSwgeyBjb25kaXRpb246IGNvbmRpdGlvbiB8fCB7fSB9ICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly9cblx0XHRcdFx0Ly8gYm90aCBhcmd1bWVudHMgYXJlIHNpbmdsZSBiaXRzXG5cdFx0XHRcdC8vXG5cdFx0XHRcdHNlbGYuY2lyY3VpdC5hZGRHYXRlKFwicmVzZXRcIiwgLTEsIHFiaXQgKyBzZWxmLnFyZWdCYXNlKHFyZWcpLCB7IGNvbmRpdGlvbjogY29uZGl0aW9uIHx8IHt9IH0gKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZihuYW1lID09IFwibWVhc3VyZVwiKSB7XG5cdFx0dmFyIHFyZWcgPSBcIlwiO1xuXHRcdHZhciBxYml0ID0gLTE7XG5cdFx0dmFyIGNyZWcgPSBcIlwiO1xuXHRcdHZhciBjYml0ID0gLTE7XG5cdFx0dmFyIGNvdW50ID0gY3R4LmFyZ3VtZW50KCkubGVuZ3RoO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XG5cdFx0XHR2YXIgYXJnID0gY3R4LmFyZ3VtZW50KClbaV07XG5cdFx0XHRpZihpID09IDApIHtcblx0XHRcdFx0cXJlZyA9IGFyZy5JRCgpLmdldFRleHQoKTtcblx0XHRcdFx0cWJpdCA9IGFyZy5JTlQoKSA/IHBhcnNlSW50KGFyZy5JTlQoKS5nZXRUZXh0KCkpIDogLTE7XG5cdFx0XHR9XG5cdFx0XHRpZihpID09IDEpIHtcblx0XHRcdFx0Y3JlZyA9IGFyZy5JRCgpLmdldFRleHQoKTtcblx0XHRcdFx0Y2JpdCA9IGFyZy5JTlQoKSA/IHBhcnNlSW50KGFyZy5JTlQoKS5nZXRUZXh0KCkpIDogLTE7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYocXJlZyAmJiBjcmVnKSB7XG5cdFx0XHR2YXIgbnVtQml0cyA9IHNlbGYucXJlZ0xlbihxcmVnKTtcblx0XHRcdGlmKHFiaXQgPCAwICYmIGNiaXQgPCAwKSB7XG5cdFx0XHRcdC8vXG5cdFx0XHRcdC8vIGJvdGggYXJndW1lbnRzIGFyZSBlbnRpcmUgcmVnaXN0ZXJzXG5cdFx0XHRcdC8vXG5cdFx0XHRcdGZvcih2YXIgeCA9IDA7IHggPCBudW1CaXRzOyB4KyspIHtcblx0XHRcdFx0XHRzZWxmLmNpcmN1aXQuYWRkR2F0ZShcIm1lYXN1cmVcIiwgLTEsIHggKyBzZWxmLnFyZWdCYXNlKHFyZWcpLCB7IGNyZWc6IHsgbmFtZTogY3JlZywgYml0OiB4IH0sIGNvbmRpdGlvbjogY29uZGl0aW9uIHx8IHt9IH0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZihxYml0ID49IDAgJiYgY2JpdCA+PSAwKSB7XG5cdFx0XHRcdFx0Ly9cblx0XHRcdFx0XHQvLyBib3RoIGFyZ3VtZW50cyBhcmUgc2luZ2xlIGJpdHNcblx0XHRcdFx0XHQvL1xuXHRcdFx0XHRcdHNlbGYuY2lyY3VpdC5hZGRHYXRlKFwibWVhc3VyZVwiLCAtMSwgcWJpdCArIHNlbGYucXJlZ0Jhc2UocXJlZyksIHsgY3JlZzogeyBuYW1lOiBjcmVnLCBiaXQ6IGNiaXQgfSwgY29uZGl0aW9uOiBjb25kaXRpb24gfHwge30gfSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmKHFiaXQgPj0gMCAmJiBjYml0IDwgMCkge1xuXHRcdFx0XHRcdFx0Ly9cblx0XHRcdFx0XHRcdC8vIHFiaXQgaXMgc2luZ2xlLCBjcmVnIGlzIGVudGlyZSByZWdpc3RlclxuXHRcdFx0XHRcdFx0Ly9cblx0XHRcdFx0XHRcdGZvcih2YXIgeCA9IDA7IHggPCBudW1CaXRzOyB4KyspIHtcblx0XHRcdFx0XHRcdFx0c2VsZi5jaXJjdWl0LmFkZEdhdGUoXCJtZWFzdXJlXCIsIC0xLCBxYml0ICsgc2VsZi5xcmVnQmFzZShxcmVnKSwgeyBjcmVnOiB7IG5hbWU6IGNyZWcsIGJpdDogeCB9LCBjb25kaXRpb246IGNvbmRpdGlvbiB8fCB7fSB9ICk7XG5cdFx0XHRcdFx0XHR9XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdC8vXG5cdFx0XHRcdFx0XHQvLyBxYml0IGlzIGVudGlyZSByZWdpc3RlciwgY3JlZyBpcyBzaW5nbGUgYml0XG5cdFx0XHRcdFx0XHQvL1xuXHRcdFx0XHRcdFx0Zm9yKHZhciB4ID0gMDsgeCA8IG51bUJpdHM7IHgrKykge1xuXHRcdFx0XHRcdFx0XHRzZWxmLmNpcmN1aXQuYWRkR2F0ZShcIm1lYXN1cmVcIiwgLTEsIHggKyBzZWxmLnFyZWdCYXNlKHFyZWcpLCB7IGNyZWc6IHsgbmFtZTogY3JlZywgYml0OiBjYml0IH0sIGNvbmRpdGlvbjogY29uZGl0aW9uIHx8IHt9IH0gKTtcblx0XHRcdFx0XHRcdH1cdFx0XHRcdFx0XHRcblxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHZhciB1b3AgPSBjdHgudW9wKCk7XG5cdGlmKHVvcCAmJiB1b3AuSUQoKSkge1xuXHRcdHZhciBnYXRlTmFtZSA9IHVvcC5JRCgpLmdldFRleHQoKTtcblx0XHR2YXIgaWRsaXN0ID0gdW9wLmFueWxpc3QoKSA/IHVvcC5hbnlsaXN0KCkuaWRsaXN0KCkgOiBudWxsO1xuXHRcdHZhciBtaXhlZGxpc3QgPSB1b3AuYW55bGlzdCgpID8gdW9wLmFueWxpc3QoKS5taXhlZGxpc3QoKSA6IG51bGw7XG5cdFx0dmFyIGV4cGxpc3QgPSB1b3AuZXhwbGlzdCgpO1xuXG5cdFx0c3dpdGNoKGdhdGVOYW1lKSB7XG5cdFx0XHRjYXNlIFwiQ1hcIjogZ2F0ZU5hbWUgPSBcImN4XCI7IGJyZWFrO1xuXHRcdFx0Y2FzZSBcIlVcIjogZ2F0ZU5hbWUgPSBcInUzXCI7IGJyZWFrO1xuXHRcdH1cblxuXHRcdGlmKCFzZWxmLmNpcmN1aXQuYmFzaWNHYXRlc1tnYXRlTmFtZV0gJiYgIXNlbGYuY2lyY3VpdC5jdXN0b21HYXRlc1tnYXRlTmFtZV0pIHtcblx0XHRcdC8vIGZpbmQgZ2F0ZSBieSBxYXNtIG5hbWVcblx0XHRcdGZvcih2YXIgdG1wTmFtZSBpbiBzZWxmLmNpcmN1aXQuYmFzaWNHYXRlcykge1xuXHRcdFx0XHR2YXIgdG1wRGVmID0gc2VsZi5jaXJjdWl0LmJhc2ljR2F0ZXNbdG1wTmFtZV07XG5cdFx0XHRcdGlmKHRtcERlZi5leHBvcnRJbmZvICYmIHRtcERlZi5leHBvcnRJbmZvLnFhc20gJiYgdG1wRGVmLmV4cG9ydEluZm8ucWFzbS5uYW1lICYmIHRtcERlZi5leHBvcnRJbmZvLnFhc20ubmFtZSA9PSBnYXRlTmFtZSkge1xuXHRcdFx0XHRcdGdhdGVOYW1lID0gdG1wTmFtZTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBuZXdlciB2ZXJzaW9ucyBvZiBxaXNraXQgZXhwb3J0cyB0byBxYXNtIHdpdGggZ2F0ZSBuYW1lcyB1bmRlZmluZWQgYnkgcWFzbSAyLjAgZGVmaW5pdGlvbi4uLlxuXHRcdFx0XHRpZih0bXBEZWYuZXhwb3J0SW5mbyAmJiB0bXBEZWYuZXhwb3J0SW5mby5xaXNraXQgJiYgdG1wRGVmLmV4cG9ydEluZm8ucWlza2l0Lm5hbWUgJiYgdG1wRGVmLmV4cG9ydEluZm8ucWlza2l0Lm5hbWUgPT0gZ2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRnYXRlTmFtZSA9IHRtcE5hbWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgcGFyYW1zID0ge307XG5cdFx0aWYoZXhwbGlzdCAmJiBleHBsaXN0LmV4cCgpKSB7XG5cdFx0XHR2YXIgZ2F0ZURlZiA9IHNlbGYuY2lyY3VpdC5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblx0XHRcdGlmKCFnYXRlRGVmKSB7XG5cdFx0XHRcdGdhdGVEZWYgPSBzZWxmLmNpcmN1aXQuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0fVxuXHRcdFx0aWYoZ2F0ZURlZikge1xuXHRcdFx0XHR2YXIgcGFyYW1MaXN0ID0gZXhwbGlzdC5leHAoKTtcblx0XHRcdFx0dmFyIHBhcmFtRGVmID0gZ2F0ZURlZi5wYXJhbXMgfHwgW107XG5cdFx0XHRcdHBhcmFtTGlzdC5tYXAoZnVuY3Rpb24ocGFyYW1JdGVtLCBwYXJhbUluZGV4KSB7XG5cdFx0XHRcdFx0dmFyIHBhcmFtVmFsdWUgPSBwYXJhbUl0ZW0uZ2V0VGV4dCgpO1xuXHRcdFx0XHRcdHZhciBwYXJhbU5hbWUgPSBwYXJhbURlZi5sZW5ndGggPj0gcGFyYW1JbmRleCA/IHBhcmFtRGVmW3BhcmFtSW5kZXhdIDogXCJcIjtcblx0XHRcdFx0XHRpZihwYXJhbU5hbWUpIHtcblx0XHRcdFx0XHRcdHBhcmFtc1twYXJhbU5hbWVdID0gcGFyYW1WYWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHZhciBvcHRpb25zID0geyBwYXJhbXM6IHBhcmFtcywgY29uZGl0aW9uOiBjb25kaXRpb24gfHwge30gfTtcblxuXHRcdGlmKGlkbGlzdCkge1xuXHRcdFx0Ly9cblx0XHRcdC8vIGFyZ3VtZW50cyBhcmUgZW50aXJlIHJlZ2lzdGVyc1xuXHRcdFx0Ly8gICBleGFtcGxlOiBjeCBxLHI7XG5cdFx0XHQvL1xuXHRcdFx0dmFyIG51bUJpdHMgPSBzZWxmLnFyZWdMZW4oaWRsaXN0LklEKClbMF0uZ2V0VGV4dCgpKTtcblx0XHRcdGZvcih2YXIgeCA9IDA7IHggPCBudW1CaXRzOyB4KyspIHtcblx0XHRcdFx0dmFyIGFyZ3MgPSBbXTtcblx0XHRcdFx0dmFyIGNvdW50ID0gaWRsaXN0LklEKCkubGVuZ3RoO1xuXHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuXHRcdFx0XHRcdGFyZ3MucHVzaCh7IHJlZzogaWRsaXN0LklEKClbaV0uZ2V0VGV4dCgpLCBiaXQ6IHggfSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgd2lyZXMgPSBbXTtcblx0XHRcdFx0YXJncy5tYXAoZnVuY3Rpb24oYSkge1xuXHRcdFx0XHRcdHdpcmVzLnB1c2goYS5iaXQgKyBzZWxmLnFyZWdCYXNlKGEucmVnKSk7XG5cdFx0XHRcdH0pO1xuLypcblx0XHRcdFx0aWYoIXNlbGYuY29tcGF0aWJpbGl0eU1vZGUpIHtcblx0XHRcdFx0XHRzd2l0Y2goZ2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRcdGNhc2UgXCJyelwiOiB7XG5cdFx0XHRcdFx0XHRcdGdhdGVOYW1lID0gXCJ1MVwiO1xuXHRcdFx0XHRcdFx0XHRpZihvcHRpb25zICYmIG9wdGlvbnMucGFyYW1zICYmIG9wdGlvbnMucGFyYW1zLnBoaSkge1xuXHRcdFx0XHRcdFx0XHRcdG9wdGlvbnMucGFyYW1zLmxhbWJkYSA9IG9wdGlvbnMucGFyYW1zLnBoaTtcblx0XHRcdFx0XHRcdFx0XHRkZWxldGUgb3B0aW9ucy5wYXJhbXMucGhpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9OyBicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cbiovXG5cdFx0XHRcdHNlbGYuY2lyY3VpdC5hZGRHYXRlKGdhdGVOYW1lLCAtMSwgd2lyZXMsIG9wdGlvbnMpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIGFyZ3VtZW50cyBhcmUgcWJpdHMgb3IgbWl4ZWRcblx0XHRpZihtaXhlZGxpc3QpIHtcblx0XHRcdGlmKG1peGVkbGlzdC5JRCgpLmxlbmd0aCAhPSBtaXhlZGxpc3QuSU5UKCkubGVuZ3RoKSB7XG5cdFx0XHRcdC8vIFxuXHRcdFx0XHQvLyBUT0RPOiBtaXhlZCBxYml0cyBhbmQgZW50aXJlIHJlZ2lzdGVyc1xuXHRcdFx0XHQvLyAgICAgICBleGFtcGxlOiBjeCBxLHJbMF07XG5cdFx0XHRcdC8vXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvL1xuXHRcdFx0XHQvLyBxYml0cywgZm9yIGV4YW1wbGU6IGN4IHFbMF0sclswXTtcblx0XHRcdFx0Ly9cblx0XHRcdFx0dmFyIGFyZ3MgPSBbXTtcblx0XHRcdFx0dmFyIGNvdW50ID0gbWl4ZWRsaXN0LklEKCkubGVuZ3RoO1xuXHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuXHRcdFx0XHRcdGFyZ3MucHVzaCh7IHJlZzogbWl4ZWRsaXN0LklEKClbaV0uZ2V0VGV4dCgpLCBiaXQ6IHBhcnNlSW50KG1peGVkbGlzdC5JTlQoKVtpXS5nZXRUZXh0KCkpIH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIHdpcmVzID0gW107XG5cdFx0XHRcdGFyZ3MubWFwKGZ1bmN0aW9uKGEpIHtcblx0XHRcdFx0XHR3aXJlcy5wdXNoKGEuYml0ICsgc2VsZi5xcmVnQmFzZShhLnJlZykpO1xuXHRcdFx0XHR9KTtcbi8qXG5cdFx0XHRcdGlmKCFzZWxmLmNvbXBhdGliaWxpdHlNb2RlKSB7XG5cdFx0XHRcdFx0c3dpdGNoKGdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRjYXNlIFwicnpcIjoge1xuXHRcdFx0XHRcdFx0XHRnYXRlTmFtZSA9IFwidTFcIjtcblx0XHRcdFx0XHRcdFx0aWYob3B0aW9ucyAmJiBvcHRpb25zLnBhcmFtcyAmJiBvcHRpb25zLnBhcmFtcy5waGkpIHtcblx0XHRcdFx0XHRcdFx0XHRvcHRpb25zLnBhcmFtcy5sYW1iZGEgPSBvcHRpb25zLnBhcmFtcy5waGk7XG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIG9wdGlvbnMucGFyYW1zLnBoaTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTsgYnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG4qL1xuXHRcdFx0XHRzZWxmLmNpcmN1aXQuYWRkR2F0ZShnYXRlTmFtZSwgLTEsIHdpcmVzLCBvcHRpb25zKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjcW9wLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRRb3AgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjdW9wLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyVW9wID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3VvcC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0VW9wID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2FueWxpc3QuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJBbnlsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2FueWxpc3QuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdEFueWxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjaWRsaXN0LlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVySWRsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2lkbGlzdC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0SWRsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI21peGVkbGlzdC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlck1peGVkbGlzdCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNtaXhlZGxpc3QuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdE1peGVkbGlzdCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNhcmd1bWVudC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckFyZ3VtZW50ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2FyZ3VtZW50LlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRBcmd1bWVudCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNleHBsaXN0LlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyRXhwbGlzdCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNleHBsaXN0LlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRFeHBsaXN0ID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2V4cC5cblFDUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckV4cCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNleHAuXG5RQ1FBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdEV4cCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN1bmFyeW9wLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyVW5hcnlvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN1bmFyeW9wLlxuUUNRQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRVbmFyeW9wID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFFBU01JbXBvcnQ7XG4iLCIvLyBHZW5lcmF0ZWQgZnJvbSBRQVNNLmc0IGJ5IEFOVExSIDQuNy4xXG4vLyBqc2hpbnQgaWdub3JlOiBzdGFydFxudmFyIGFudGxyNCA9IHJlcXVpcmUoJ2FudGxyNC9pbmRleCcpO1xuXG5cbnZhciBzZXJpYWxpemVkQVROID0gW1wiXFx1MDAwM1xcdTYwOGJcXHVhNzJhXFx1ODEzM1xcdWI5ZWRcXHU0MTdjXFx1M2JlN1xcdTc3ODZcXHU1OTY0XCIsXG4gICAgXCJcXHUwMDAyLVxcdTAxMjRcXGJcXHUwMDAxXFx1MDAwNFxcdTAwMDJcXHRcXHUwMDAyXFx1MDAwNFxcdTAwMDNcXHRcXHUwMDAzXFx1MDAwNFwiLFxuICAgIFwiXFx1MDAwNFxcdFxcdTAwMDRcXHUwMDA0XFx1MDAwNVxcdFxcdTAwMDVcXHUwMDA0XFx1MDAwNlxcdFxcdTAwMDZcXHUwMDA0XFx1MDAwN1xcdFwiLFxuICAgIFwiXFx1MDAwN1xcdTAwMDRcXGJcXHRcXGJcXHUwMDA0XFx0XFx0XFx0XFx1MDAwNFxcblxcdFxcblxcdTAwMDRcXHUwMDBiXFx0XFx1MDAwYlxcdTAwMDRcIixcbiAgICBcIlxcZlxcdFxcZlxcdTAwMDRcXHJcXHRcXHJcXHUwMDA0XFx1MDAwZVxcdFxcdTAwMGVcXHUwMDA0XFx1MDAwZlxcdFxcdTAwMGZcXHUwMDA0XFx1MDAxMFwiLFxuICAgIFwiXFx0XFx1MDAxMFxcdTAwMDRcXHUwMDExXFx0XFx1MDAxMVxcdTAwMDRcXHUwMDEyXFx0XFx1MDAxMlxcdTAwMDRcXHUwMDEzXFx0XFx1MDAxM1wiLFxuICAgIFwiXFx1MDAwNFxcdTAwMTRcXHRcXHUwMDE0XFx1MDAwNFxcdTAwMTVcXHRcXHUwMDE1XFx1MDAwNFxcdTAwMTZcXHRcXHUwMDE2XFx1MDAwNFxcdTAwMTdcIixcbiAgICBcIlxcdFxcdTAwMTdcXHUwMDA0XFx1MDAxOFxcdFxcdTAwMThcXHUwMDA0XFx1MDAxOVxcdFxcdTAwMTlcXHUwMDA0XFx1MDAxYVxcdFxcdTAwMWFcIixcbiAgICBcIlxcdTAwMDRcXHUwMDFiXFx0XFx1MDAxYlxcdTAwMDRcXHUwMDFjXFx0XFx1MDAxY1xcdTAwMDRcXHUwMDFkXFx0XFx1MDAxZFxcdTAwMDRcXHUwMDFlXCIsXG4gICAgXCJcXHRcXHUwMDFlXFx1MDAwNFxcdTAwMWZcXHRcXHUwMDFmXFx1MDAwNCBcXHQgXFx1MDAwNCFcXHQhXFx1MDAwNFxcXCJcXHRcXFwiXFx1MDAwNCNcIixcbiAgICBcIlxcdCNcXHUwMDA0JFxcdCRcXHUwMDA0JVxcdCVcXHUwMDA0JlxcdCZcXHUwMDA0XFwnXFx0XFwnXFx1MDAwNChcXHQoXFx1MDAwNClcXHQpXFx1MDAwNFwiLFxuICAgIFwiKlxcdCpcXHUwMDA0K1xcdCtcXHUwMDA0LFxcdCxcXHUwMDAzXFx1MDAwMlxcdTAwMDNcXHUwMDAyXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDA0XCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwNFxcdTAwMDNcXHUwMDA1XFx1MDAwM1xcdTAwMDVcXHUwMDAzXFx1MDAwNlxcdTAwMDNcXHUwMDA2XFx1MDAwM1xcdTAwMDdcIixcbiAgICBcIlxcdTAwMDNcXHUwMDA3XFx1MDAwM1xcdTAwMDdcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFx0XFx1MDAwM1xcdFxcdTAwMDNcIixcbiAgICBcIlxcdFxcdTAwMDNcXHRcXHUwMDAzXFx0XFx1MDAwM1xcdFxcdTAwMDNcXHRcXHUwMDAzXFx0XFx1MDAwM1xcblxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1wiLFxuICAgIFwiXFxuXFx1MDAwM1xcblxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcblxcdTAwMDNcXG5cXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXCIsXG4gICAgXCJcXGZcXHUwMDAzXFxmXFx1MDAwM1xcZlxcdTAwMDNcXGZcXHUwMDAzXFxmXFx1MDAwM1xcclxcdTAwMDNcXHJcXHUwMDAzXFx1MDAwZVxcdTAwMDNcIixcbiAgICBcIlxcdTAwMGVcXHUwMDAzXFx1MDAwZlxcdTAwMDNcXHUwMDBmXFx1MDAwM1xcdTAwMGZcXHUwMDAzXFx1MDAwZlxcdTAwMDNcXHUwMDBmXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAxMFxcdTAwMDNcXHUwMDEwXFx1MDAwM1xcdTAwMTBcXHUwMDAzXFx1MDAxMFxcdTAwMDNcXHUwMDEwXFx1MDAwM1xcdTAwMTFcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDExXFx1MDAwM1xcdTAwMTJcXHUwMDAzXFx1MDAxMlxcdTAwMDNcXHUwMDEyXFx1MDAwM1xcdTAwMTJcXHUwMDAzXFx1MDAxMlxcdTAwMDNcIixcbiAgICBcIlxcdTAwMTJcXHUwMDAzXFx1MDAxMlxcdTAwMDNcXHUwMDEyXFx1MDAwM1xcdTAwMTNcXHUwMDAzXFx1MDAxM1xcdTAwMDNcXHUwMDEzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAxNFxcdTAwMDNcXHUwMDE0XFx1MDAwM1xcdTAwMTRcXHUwMDAzXFx1MDAxNFxcdTAwMDNcXHUwMDE0XFx1MDAwM1xcdTAwMTRcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDE1XFx1MDAwM1xcdTAwMTVcXHUwMDAzXFx1MDAxNlxcdTAwMDNcXHUwMDE2XFx1MDAwM1xcdTAwMTZcXHUwMDAzXFx1MDAxN1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMTdcXHUwMDAzXFx1MDAxOFxcdTAwMDNcXHUwMDE4XFx1MDAwM1xcdTAwMTlcXHUwMDAzXFx1MDAxOVxcdTAwMDNcXHUwMDFhXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAxYVxcdTAwMDNcXHUwMDFiXFx1MDAwM1xcdTAwMWJcXHUwMDAzXFx1MDAxY1xcdTAwMDNcXHUwMDFjXFx1MDAwM1xcdTAwMWRcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDFkXFx1MDAwM1xcdTAwMWRcXHUwMDAzXFx1MDAxZFxcdTAwMDNcXHUwMDFlXFx1MDAwM1xcdTAwMWVcXHUwMDAzXFx1MDAxZVxcdTAwMDNcIixcbiAgICBcIlxcdTAwMWVcXHUwMDAzXFx1MDAxZlxcdTAwMDNcXHUwMDFmXFx1MDAwM1xcdTAwMWZcXHUwMDAzXFx1MDAxZlxcdTAwMDMgXFx1MDAwM1wiLFxuICAgIFwiIFxcdTAwMDMgXFx1MDAwMyBcXHUwMDAzIVxcdTAwMDMhXFx1MDAwMyFcXHUwMDAzXFxcIlxcdTAwMDNcXFwiXFx1MDAwM1xcXCJcXHUwMDAzXFxcIlwiLFxuICAgIFwiXFx1MDAwM1xcXCJcXHUwMDAzI1xcdTAwMDMjXFx1MDAwMyNcXHUwMDAzJFxcdTAwMDMkXFx1MDAwMyRcXHUwMDAzJFxcdTAwMDMkXFx1MDAwM1wiLFxuICAgIFwiJFxcdTAwMDMkXFx1MDAwNSRcXHUwMGUxXFxuJFxcdTAwMDMlXFx1MDAwMyVcXHUwMDAzJVxcdTAwMDYlXFx1MDBlNlxcbiVcXHIlXFx1MDAwZVwiLFxuICAgIFwiJVxcdTAwZTdcXHUwMDAzJlxcdTAwMDMmXFx1MDAwMyZcXHUwMDA2JlxcdTAwZWRcXG4mXFxyJlxcdTAwMGUmXFx1MDBlZVxcdTAwMDNcXCdcIixcbiAgICBcIlxcdTAwMDZcXCdcXHUwMGYyXFxuXFwnXFxyXFwnXFx1MDAwZVxcJ1xcdTAwZjNcXHUwMDAzKFxcdTAwMDMoXFx1MDAwNyhcXHUwMGY4XFxuKFxcZlwiLFxuICAgIFwiKFxcdTAwMGUoXFx1MDBmYlxcdTAwMGIoXFx1MDAwMylcXHUwMDA2KVxcdTAwZmVcXG4pXFxyKVxcdTAwMGUpXFx1MDBmZlxcdTAwMDMpXCIsXG4gICAgXCJcXHUwMDAzKVxcdTAwMDMqXFx1MDAwMypcXHUwMDA2KlxcdTAxMDZcXG4qXFxyKlxcdTAwMGUqXFx1MDEwN1xcdTAwMDMqXFx1MDAwMypcIixcbiAgICBcIlxcdTAwMDMrXFx1MDAwMytcXHUwMDAzK1xcdTAwMDMrXFx1MDAwNytcXHUwMTEwXFxuK1xcZitcXHUwMDBlK1xcdTAxMTNcXHUwMDBiK1wiLFxuICAgIFwiXFx1MDAwMytcXHUwMDAzK1xcdTAwMDMrXFx1MDAwMytcXHUwMDAzK1xcdTAwMDMsXFx1MDAwMyxcXHUwMDAzLFxcdTAwMDMsXFx1MDAwN1wiLFxuICAgIFwiLFxcdTAxMWVcXG4sXFxmLFxcdTAwMGUsXFx1MDEyMVxcdTAwMGIsXFx1MDAwMyxcXHUwMDAzLFxcdTAwMDNcXHUwMTExXFx1MDAwMi1cXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwNVxcdTAwMDRcXHUwMDA3XFx1MDAwNVxcdFxcdTAwMDZcXHUwMDBiXFx1MDAwN1xcclxcYlxcdTAwMGZcXHRcXHUwMDExXCIsXG4gICAgXCJcXG5cXHUwMDEzXFx1MDAwYlxcdTAwMTVcXGZcXHUwMDE3XFxyXFx1MDAxOVxcdTAwMGVcXHUwMDFiXFx1MDAwZlxcdTAwMWRcXHUwMDEwXFx1MDAxZlwiLFxuICAgIFwiXFx1MDAxMSFcXHUwMDEyI1xcdTAwMTMlXFx1MDAxNFxcJ1xcdTAwMTUpXFx1MDAxNitcXHUwMDE3LVxcdTAwMTgvXFx1MDAxOTFcXHUwMDFhXCIsXG4gICAgXCIzXFx1MDAxYjVcXHUwMDFjN1xcdTAwMWQ5XFx1MDAxZTtcXHUwMDFmPSA/IUFcXFwiQyNFJEclSSZLXFwnTShPKVEqUytVLFctXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcblxcdTAwMDNcXHUwMDAyMjtcXHUwMDA0XFx1MDAwMkdHZ2dcXHUwMDA0XFx1MDAwMi0tLy9cXHUwMDAzXFx1MDAwMmNcIixcbiAgICBcInxcXHUwMDA2XFx1MDAwMjI7Q1xcXFxhYWN8XFx1MDAwNVxcdTAwMDJcXHUwMDBiXFxmXFx1MDAwZVxcdTAwMGZcXFwiXFxcIlxcdTAwMDdcXHUwMDAyXCIsXG4gICAgXCIvMDI7Q1xcXFxhYWN8XFx1MDAwNFxcdTAwMDJcXGZcXGZcXHUwMDBmXFx1MDAwZlxcdTAwMDJcXHUwMTJkXFx1MDAwMlxcdTAwMDNcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwNVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwN1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMGJcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFxyXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDBmXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTNcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxNVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxN1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDE5XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDFiXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMWRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMWZcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyIVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyI1xcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDIlXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXCdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyKVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyK1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDItXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDIvXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIjFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMjNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMjVcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyN1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyOVxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDI7XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDI9XFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMj9cXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMkFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyQ1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyRVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJHXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJJXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJLXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMk1cXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwMk9cXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyUVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDAyU1xcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJVXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMDJXXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwM1lcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwNVtcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwN1wiLFxuICAgIFwiYlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHRkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMGJmXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFxyaFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDBma1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMTFuXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTN2XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTVcIixcbiAgICBcIlxcdTAwN2ZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxN1xcdTAwODdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxOVwiLFxuICAgIFwiXFx1MDA4Y1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDFiXFx1MDA4ZVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDFkXCIsXG4gICAgXCJcXHUwMDkwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMWZcXHUwMDk1XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMiFcIixcbiAgICBcIlxcdTAwOWFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyI1xcdTAwOWNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyJVxcdTAwYTRcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXCdcXHUwMGE3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMilcXHUwMGFkXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyK1xcdTAwYWZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyLVxcdTAwYjJcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDIvXFx1MDBiNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDIxXFx1MDBiNlxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMjNcXHUwMGI4XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMjVcXHUwMGJhXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiN1xcdTAwYmNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyOVxcdTAwYmVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyO1xcdTAwYzJcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDI9XFx1MDBjNlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDI/XFx1MDBjYVxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMkFcXHUwMGNlXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMkNcXHUwMGQxXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyRVxcdTAwZDZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyR1xcdTAwZTBcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJJXFx1MDBlMlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJLXFx1MDBlOVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIk1cXHUwMGYxXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMk9cXHUwMGY1XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlFcXHUwMGZkXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyU1xcdTAxMDNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyVVxcdTAxMGJcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJXXFx1MDExOVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJZWlxcdTAwMDdcXHUwMDdmXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlpcXHUwMDA0XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMltcXFxcXFx1MDAwN3FcXHUwMDAyXFx1MDAwMlxcXFxdXFx1MDAwN1wiLFxuICAgIFwiclxcdTAwMDJcXHUwMDAyXV5cXHUwMDA3Y1xcdTAwMDJcXHUwMDAyXl9cXHUwMDA3c1xcdTAwMDJcXHUwMDAyX2BcXHUwMDA3d1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJgYVxcdTAwMDdnXFx1MDAwMlxcdTAwMDJhXFx1MDAwNlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJiY1xcdTAwMDc9XCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMmNcXGJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyZGVcXHUwMDA3KlxcdTAwMDJcXHUwMDAyZVxcblxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMmZnXFx1MDAwNytcXHUwMDAyXFx1MDAwMmdcXGZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyaFwiLFxuICAgIFwiaVxcdTAwMDdrXFx1MDAwMlxcdTAwMDJpalxcdTAwMDdoXFx1MDAwMlxcdTAwMDJqXFx1MDAwZVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcImtsXFx1MDAwNz9cXHUwMDAyXFx1MDAwMmxtXFx1MDAwNz9cXHUwMDAyXFx1MDAwMm1cXHUwMDEwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAybm9cXHUwMDA3ZFxcdTAwMDJcXHUwMDAyb3BcXHUwMDA3Y1xcdTAwMDJcXHUwMDAycHFcXHUwMDA3dFxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJxclxcdTAwMDd0XFx1MDAwMlxcdTAwMDJyc1xcdTAwMDdrXFx1MDAwMlxcdTAwMDJzdFxcdTAwMDdnXFx1MDAwMlxcdTAwMDJ0dVxcdTAwMDdcIixcbiAgICBcInRcXHUwMDAyXFx1MDAwMnVcXHUwMDEyXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMnZ3XFx1MDAwN1FcXHUwMDAyXFx1MDAwMnd4XCIsXG4gICAgXCJcXHUwMDA3UlxcdTAwMDJcXHUwMDAyeHlcXHUwMDA3R1xcdTAwMDJcXHUwMDAyeXpcXHUwMDA3UFxcdTAwMDJcXHUwMDAyentcXHUwMDA3XCIsXG4gICAgXCJTXFx1MDAwMlxcdTAwMDJ7fFxcdTAwMDdDXFx1MDAwMlxcdTAwMDJ8fVxcdTAwMDdVXFx1MDAwMlxcdTAwMDJ9flxcdTAwMDdPXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMn5cXHUwMDE0XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwN2ZcXHUwMDgwXFx1MDAwN2tcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDA4MFxcdTAwODFcXHUwMDA3cFxcdTAwMDJcXHUwMDAyXFx1MDA4MVxcdTAwODJcXHUwMDA3ZVxcdTAwMDJcXHUwMDAyXFx1MDA4MlwiLFxuICAgIFwiXFx1MDA4M1xcdTAwMDduXFx1MDAwMlxcdTAwMDJcXHUwMDgzXFx1MDA4NFxcdTAwMDd3XFx1MDAwMlxcdTAwMDJcXHUwMDg0XFx1MDA4NVwiLFxuICAgIFwiXFx1MDAwN2ZcXHUwMDAyXFx1MDAwMlxcdTAwODVcXHUwMDg2XFx1MDAwN2dcXHUwMDAyXFx1MDAwMlxcdTAwODZcXHUwMDE2XFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDA4N1xcdTAwODhcXHUwMDA3c1xcdTAwMDJcXHUwMDAyXFx1MDA4OFxcdTAwODlcXHUwMDA3XCIsXG4gICAgXCJ0XFx1MDAwMlxcdTAwMDJcXHUwMDg5XFx1MDA4YVxcdTAwMDdnXFx1MDAwMlxcdTAwMDJcXHUwMDhhXFx1MDA4YlxcdTAwMDdpXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOGJcXHUwMDE4XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwOGNcXHUwMDhkXFx1MDAwN11cXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA4ZFxcdTAwMWFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDA4ZVxcdTAwOGZcXHUwMDA3X1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDhmXFx1MDAxY1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDkwXFx1MDA5MVxcdTAwMDdlXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOTFcXHUwMDkyXFx1MDAwN3RcXHUwMDAyXFx1MDAwMlxcdTAwOTJcXHUwMDkzXFx1MDAwN2dcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDA5M1xcdTAwOTRcXHUwMDA3aVxcdTAwMDJcXHUwMDAyXFx1MDA5NFxcdTAwMWVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDk1XFx1MDA5NlxcdTAwMDdpXFx1MDAwMlxcdTAwMDJcXHUwMDk2XFx1MDA5N1xcdTAwMDdjXFx1MDAwMlxcdTAwMDJcXHUwMDk3XCIsXG4gICAgXCJcXHUwMDk4XFx1MDAwN3ZcXHUwMDAyXFx1MDAwMlxcdTAwOThcXHUwMDk5XFx1MDAwN2dcXHUwMDAyXFx1MDAwMlxcdTAwOTkgXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDA5YVxcdTAwOWJcXHUwMDA3fVxcdTAwMDJcXHUwMDAyXFx1MDA5YlxcXCJcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDljXFx1MDA5ZFxcdTAwMDdvXFx1MDAwMlxcdTAwMDJcXHUwMDlkXFx1MDA5ZVxcdTAwMDdnXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOWVcXHUwMDlmXFx1MDAwN2NcXHUwMDAyXFx1MDAwMlxcdTAwOWZcXHUwMGEwXFx1MDAwN3VcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBhMFxcdTAwYTFcXHUwMDA3d1xcdTAwMDJcXHUwMDAyXFx1MDBhMVxcdTAwYTJcXHUwMDA3dFxcdTAwMDJcXHUwMDAyXFx1MDBhMlwiLFxuICAgIFwiXFx1MDBhM1xcdTAwMDdnXFx1MDAwMlxcdTAwMDJcXHUwMGEzJFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGE0XFx1MDBhNVwiLFxuICAgIFwiXFx1MDAwNy9cXHUwMDAyXFx1MDAwMlxcdTAwYTVcXHUwMGE2XFx1MDAwN0BcXHUwMDAyXFx1MDAwMlxcdTAwYTYmXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDBhN1xcdTAwYThcXHUwMDA3dFxcdTAwMDJcXHUwMDAyXFx1MDBhOFxcdTAwYTlcXHUwMDA3Z1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGE5XFx1MDBhYVxcdTAwMDd1XFx1MDAwMlxcdTAwMDJcXHUwMGFhXFx1MDBhYlxcdTAwMDdnXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwYWJcXHUwMGFjXFx1MDAwN3ZcXHUwMDAyXFx1MDAwMlxcdTAwYWMoXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYWRcIixcbiAgICBcIlxcdTAwYWVcXHUwMDA3V1xcdTAwMDJcXHUwMDAyXFx1MDBhZSpcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBhZlxcdTAwYjBcIixcbiAgICBcIlxcdTAwMDdFXFx1MDAwMlxcdTAwMDJcXHUwMGIwXFx1MDBiMVxcdTAwMDdaXFx1MDAwMlxcdTAwMDJcXHUwMGIxLFxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwYjJcXHUwMGIzXFx1MDAwNy5cXHUwMDAyXFx1MDAwMlxcdTAwYjMuXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBiNFxcdTAwYjVcXHUwMDA3YFxcdTAwMDJcXHUwMDAyXFx1MDBiNTBcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGI2XFx1MDBiN1xcdTAwMDcsXFx1MDAwMlxcdTAwMDJcXHUwMGI3MlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGI4XCIsXG4gICAgXCJcXHUwMGI5XFx1MDAwNzFcXHUwMDAyXFx1MDAwMlxcdTAwYjk0XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYmFcXHUwMGJiXCIsXG4gICAgXCJcXHUwMDA3LVxcdTAwMDJcXHUwMDAyXFx1MDBiYjZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBiY1xcdTAwYmRcXHUwMDA3XCIsXG4gICAgXCIvXFx1MDAwMlxcdTAwMDJcXHUwMGJkOFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGJlXFx1MDBiZlxcdTAwMDd1XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYmZcXHUwMGMwXFx1MDAwN2tcXHUwMDAyXFx1MDAwMlxcdTAwYzBcXHUwMGMxXFx1MDAwN3BcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBjMTpcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBjMlxcdTAwYzNcXHUwMDA3ZVxcdTAwMDJcXHUwMDAyXFx1MDBjM1wiLFxuICAgIFwiXFx1MDBjNFxcdTAwMDdxXFx1MDAwMlxcdTAwMDJcXHUwMGM0XFx1MDBjNVxcdTAwMDd1XFx1MDAwMlxcdTAwMDJcXHUwMGM1PFxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYzZcXHUwMGM3XFx1MDAwN3ZcXHUwMDAyXFx1MDAwMlxcdTAwYzdcXHUwMGM4XFx1MDAwN1wiLFxuICAgIFwiY1xcdTAwMDJcXHUwMDAyXFx1MDBjOFxcdTAwYzlcXHUwMDA3cFxcdTAwMDJcXHUwMDAyXFx1MDBjOT5cXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGNhXFx1MDBjYlxcdTAwMDdnXFx1MDAwMlxcdTAwMDJcXHUwMGNiXFx1MDBjY1xcdTAwMDd6XFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwY2NcXHUwMGNkXFx1MDAwN3JcXHUwMDAyXFx1MDAwMlxcdTAwY2RAXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwY2VcIixcbiAgICBcIlxcdTAwY2ZcXHUwMDA3blxcdTAwMDJcXHUwMDAyXFx1MDBjZlxcdTAwZDBcXHUwMDA3cFxcdTAwMDJcXHUwMDAyXFx1MDBkMEJcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGQxXFx1MDBkMlxcdTAwMDd1XFx1MDAwMlxcdTAwMDJcXHUwMGQyXFx1MDBkM1xcdTAwMDdcIixcbiAgICBcInNcXHUwMDAyXFx1MDAwMlxcdTAwZDNcXHUwMGQ0XFx1MDAwN3RcXHUwMDAyXFx1MDAwMlxcdTAwZDRcXHUwMGQ1XFx1MDAwN3ZcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBkNURcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBkNlxcdTAwZDdcXHUwMDA3clxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGQ3XFx1MDBkOFxcdTAwMDdrXFx1MDAwMlxcdTAwMDJcXHUwMGQ4RlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGQ5XCIsXG4gICAgXCJcXHUwMGRhXFx1MDAwNUklXFx1MDAwMlxcdTAwZGFcXHUwMGRiXFx1MDAwNUsmXFx1MDAwMlxcdTAwZGJcXHUwMGUxXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDBkY1xcdTAwZGRcXHUwMDA1TVxcJ1xcdTAwMDJcXHUwMGRkXFx1MDBkZVxcdTAwMDVLJlxcdTAwMDJcXHUwMGRlXCIsXG4gICAgXCJcXHUwMGUxXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZGZcXHUwMGUxXFx1MDAwNUklXFx1MDAwMlxcdTAwZTBcXHUwMGQ5XCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlMFxcdTAwZGNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlMFxcdTAwZGZcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGUxSFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGUyXFx1MDBlM1wiLFxuICAgIFwiXFx1MDAwNU1cXCdcXHUwMDAyXFx1MDBlM1xcdTAwZTVcXHUwMDA3MFxcdTAwMDJcXHUwMDAyXFx1MDBlNFxcdTAwZTZcXHRcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwZTVcXHUwMGU0XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZTZcXHUwMGU3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBlN1xcdTAwZTVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlN1xcdTAwZThcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGU4SlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGU5XFx1MDBlYVxcdFxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBlYVxcdTAwZWNcXHRcXHUwMDA0XFx1MDAwMlxcdTAwMDJcXHUwMGViXFx1MDBlZFxcdFxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZWNcIixcbiAgICBcIlxcdTAwZWJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlZFxcdTAwZWVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlZVwiLFxuICAgIFwiXFx1MDBlY1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGVlXFx1MDBlZlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGVmXCIsXG4gICAgXCJMXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZjBcXHUwMGYyXFx0XFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmMVxcdTAwZjBcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGYyXFx1MDBmM1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGYzXFx1MDBmMVwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZjNcXHUwMGY0XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZjROXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmNVxcdTAwZjlcXHRcXHUwMDA1XFx1MDAwMlxcdTAwMDJcXHUwMGY2XFx1MDBmOFwiLFxuICAgIFwiXFx0XFx1MDAwNlxcdTAwMDJcXHUwMDAyXFx1MDBmN1xcdTAwZjZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmOFxcdTAwZmJcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGY5XFx1MDBmN1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGY5XFx1MDBmYVwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZmFQXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZmJcXHUwMGY5XCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmY1xcdTAwZmVcXHRcXHUwMDA3XFx1MDAwMlxcdTAwMDJcXHUwMGZkXFx1MDBmY1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZmVcXHUwMGZmXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZmZcXHUwMGZkXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmZlxcdTAxMDBcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwMFxcdTAxMDFcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTAxXFx1MDEwMlxcYilcXHUwMDAyXFx1MDAwMlxcdTAxMDJSXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDEwM1xcdTAxMDVcXHUwMDA3JFxcdTAwMDJcXHUwMDAyXFx1MDEwNFxcdTAxMDZcXHRcXGJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDEwNVxcdTAxMDRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwNlxcdTAxMDdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMTA3XFx1MDEwNVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTA3XFx1MDEwOFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAxMDhcXHUwMTA5XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMDlcXHUwMTBhXFx1MDAwNyRcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDEwYVRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwYlxcdTAxMGNcXHUwMDA3MVxcdTAwMDJcXHUwMDAyXFx1MDEwY1wiLFxuICAgIFwiXFx1MDEwZFxcdTAwMDcsXFx1MDAwMlxcdTAwMDJcXHUwMTBkXFx1MDExMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTBlXCIsXG4gICAgXCJcXHUwMTEwXFx1MDAwYlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMGZcXHUwMTBlXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMTBcIixcbiAgICBcIlxcdTAxMTNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExMVxcdTAxMTJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExMVwiLFxuICAgIFwiXFx1MDEwZlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTEyXFx1MDExNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTEzXCIsXG4gICAgXCJcXHUwMTExXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMTRcXHUwMTE1XFx1MDAwNyxcXHUwMDAyXFx1MDAwMlxcdTAxMTVcIixcbiAgICBcIlxcdTAxMTZcXHUwMDA3MVxcdTAwMDJcXHUwMDAyXFx1MDExNlxcdTAxMTdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExN1wiLFxuICAgIFwiXFx1MDExOFxcYitcXHUwMDAyXFx1MDAwMlxcdTAxMThWXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMTlcXHUwMTFhXFx1MDAwN1wiLFxuICAgIFwiMVxcdTAwMDJcXHUwMDAyXFx1MDExYVxcdTAxMWJcXHUwMDA3MVxcdTAwMDJcXHUwMDAyXFx1MDExYlxcdTAxMWZcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMTFjXFx1MDExZVxcblxcdFxcdTAwMDJcXHUwMDAyXFx1MDExZFxcdTAxMWNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMTFlXFx1MDEyMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTFmXFx1MDExZFxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAxMWZcXHUwMTIwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMjBcXHUwMTIyXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDEyMVxcdTAxMWZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEyMlxcdTAxMjNcXGIsXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAxMjNYXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcZlxcdTAwMDJcXHUwMGUwXFx1MDBlN1xcdTAwZWVcXHUwMGYzXFx1MDBmOVwiLFxuICAgIFwiXFx1MDBmZlxcdTAxMDdcXHUwMTExXFx1MDExZlxcdTAwMDNcXGJcXHUwMDAyXFx1MDAwMlwiXS5qb2luKFwiXCIpO1xuXG5cbnZhciBhdG4gPSBuZXcgYW50bHI0LmF0bi5BVE5EZXNlcmlhbGl6ZXIoKS5kZXNlcmlhbGl6ZShzZXJpYWxpemVkQVROKTtcblxudmFyIGRlY2lzaW9uc1RvREZBID0gYXRuLmRlY2lzaW9uVG9TdGF0ZS5tYXAoIGZ1bmN0aW9uKGRzLCBpbmRleCkgeyByZXR1cm4gbmV3IGFudGxyNC5kZmEuREZBKGRzLCBpbmRleCk7IH0pO1xuXG5mdW5jdGlvbiBRQVNNTGV4ZXIoaW5wdXQpIHtcblx0YW50bHI0LkxleGVyLmNhbGwodGhpcywgaW5wdXQpO1xuICAgIHRoaXMuX2ludGVycCA9IG5ldyBhbnRscjQuYXRuLkxleGVyQVROU2ltdWxhdG9yKHRoaXMsIGF0biwgZGVjaXNpb25zVG9ERkEsIG5ldyBhbnRscjQuUHJlZGljdGlvbkNvbnRleHRDYWNoZSgpKTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuUUFTTUxleGVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LkxleGVyLnByb3RvdHlwZSk7XG5RQVNNTGV4ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUUFTTUxleGVyO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUUFTTUxleGVyLnByb3RvdHlwZSwgXCJhdG5cIiwge1xuICAgICAgICBnZXQgOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXRuO1xuICAgICAgICB9XG59KTtcblxuUUFTTUxleGVyLkVPRiA9IGFudGxyNC5Ub2tlbi5FT0Y7XG5RQVNNTGV4ZXIuVF9fMCA9IDE7XG5RQVNNTGV4ZXIuVF9fMSA9IDI7XG5RQVNNTGV4ZXIuVF9fMiA9IDM7XG5RQVNNTGV4ZXIuVF9fMyA9IDQ7XG5RQVNNTGV4ZXIuVF9fNCA9IDU7XG5RQVNNTGV4ZXIuVF9fNSA9IDY7XG5RQVNNTGV4ZXIuVF9fNiA9IDc7XG5RQVNNTGV4ZXIuVF9fNyA9IDg7XG5RQVNNTGV4ZXIuVF9fOCA9IDk7XG5RQVNNTGV4ZXIuVF9fOSA9IDEwO1xuUUFTTUxleGVyLlRfXzEwID0gMTE7XG5RQVNNTGV4ZXIuVF9fMTEgPSAxMjtcblFBU01MZXhlci5UX18xMiA9IDEzO1xuUUFTTUxleGVyLlRfXzEzID0gMTQ7XG5RQVNNTGV4ZXIuVF9fMTQgPSAxNTtcblFBU01MZXhlci5UX18xNSA9IDE2O1xuUUFTTUxleGVyLlRfXzE2ID0gMTc7XG5RQVNNTGV4ZXIuVF9fMTcgPSAxODtcblFBU01MZXhlci5UX18xOCA9IDE5O1xuUUFTTUxleGVyLlRfXzE5ID0gMjA7XG5RQVNNTGV4ZXIuVF9fMjAgPSAyMTtcblFBU01MZXhlci5UX18yMSA9IDIyO1xuUUFTTUxleGVyLlRfXzIyID0gMjM7XG5RQVNNTGV4ZXIuVF9fMjMgPSAyNDtcblFBU01MZXhlci5UX18yNCA9IDI1O1xuUUFTTUxleGVyLlRfXzI1ID0gMjY7XG5RQVNNTGV4ZXIuVF9fMjYgPSAyNztcblFBU01MZXhlci5UX18yNyA9IDI4O1xuUUFTTUxleGVyLlRfXzI4ID0gMjk7XG5RQVNNTGV4ZXIuVF9fMjkgPSAzMDtcblFBU01MZXhlci5UX18zMCA9IDMxO1xuUUFTTUxleGVyLlRfXzMxID0gMzI7XG5RQVNNTGV4ZXIuVF9fMzIgPSAzMztcblFBU01MZXhlci5QSSA9IDM0O1xuUUFTTUxleGVyLlJFQUwgPSAzNTtcblFBU01MZXhlci5TVUJSRUFMID0gMzY7XG5RQVNNTGV4ZXIuRVhQUkVBTCA9IDM3O1xuUUFTTUxleGVyLklOVCA9IDM4O1xuUUFTTUxleGVyLklEID0gMzk7XG5RQVNNTGV4ZXIuV1MgPSA0MDtcblFBU01MZXhlci5GSUxFTkFNRSA9IDQxO1xuUUFTTUxleGVyLkNPTU1FTlQgPSA0MjtcblFBU01MZXhlci5MSU5FX0NPTU1FTlQgPSA0MztcblxuUUFTTUxleGVyLnByb3RvdHlwZS5jaGFubmVsTmFtZXMgPSBbIFwiREVGQVVMVF9UT0tFTl9DSEFOTkVMXCIsIFwiSElEREVOXCIgXTtcblxuUUFTTUxleGVyLnByb3RvdHlwZS5tb2RlTmFtZXMgPSBbIFwiREVGQVVMVF9NT0RFXCIgXTtcblxuUUFTTUxleGVyLnByb3RvdHlwZS5saXRlcmFsTmFtZXMgPSBbIG51bGwsIFwiJ30nXCIsIFwiJ29wYXF1ZSdcIiwgXCInOydcIiwgXCInKCdcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCInKSdcIiwgXCInaWYnXCIsIFwiJz09J1wiLCBcIidiYXJyaWVyJ1wiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIidPUEVOUUFTTSdcIiwgXCInaW5jbHVkZSdcIiwgXCIncXJlZydcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCInWydcIiwgXCInXSdcIiwgXCInY3JlZydcIiwgXCInZ2F0ZSdcIiwgXCIneydcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCInbWVhc3VyZSdcIiwgXCInLT4nXCIsIFwiJ3Jlc2V0J1wiLCBcIidVJ1wiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIidDWCdcIiwgXCInLCdcIiwgXCInXidcIiwgXCInKidcIiwgXCInLydcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCInKydcIiwgXCInLSdcIiwgXCInc2luJ1wiLCBcIidjb3MnXCIsIFwiJ3RhbidcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCInZXhwJ1wiLCBcIidsbidcIiwgXCInc3FydCdcIiwgXCIncGknXCIgXTtcblxuUUFTTUxleGVyLnByb3RvdHlwZS5zeW1ib2xpY05hbWVzID0gWyBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsIG51bGwsIG51bGwsIG51bGwsIFwiUElcIiwgXCJSRUFMXCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlNVQlJFQUxcIiwgXCJFWFBSRUFMXCIsIFwiSU5UXCIsIFwiSURcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiV1NcIiwgXCJGSUxFTkFNRVwiLCBcIkNPTU1FTlRcIiwgXCJMSU5FX0NPTU1FTlRcIiBdO1xuXG5RQVNNTGV4ZXIucHJvdG90eXBlLnJ1bGVOYW1lcyA9IFsgXCJUX18wXCIsIFwiVF9fMVwiLCBcIlRfXzJcIiwgXCJUX18zXCIsIFwiVF9fNFwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRfXzVcIiwgXCJUX182XCIsIFwiVF9fN1wiLCBcIlRfXzhcIiwgXCJUX185XCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVF9fMTBcIiwgXCJUX18xMVwiLCBcIlRfXzEyXCIsIFwiVF9fMTNcIiwgXCJUX18xNFwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRfXzE1XCIsIFwiVF9fMTZcIiwgXCJUX18xN1wiLCBcIlRfXzE4XCIsIFwiVF9fMTlcIiwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJUX18yMFwiLCBcIlRfXzIxXCIsIFwiVF9fMjJcIiwgXCJUX18yM1wiLCBcIlRfXzI0XCIsIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiVF9fMjVcIiwgXCJUX18yNlwiLCBcIlRfXzI3XCIsIFwiVF9fMjhcIiwgXCJUX18yOVwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlRfXzMwXCIsIFwiVF9fMzFcIiwgXCJUX18zMlwiLCBcIlBJXCIsIFwiUkVBTFwiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlNVQlJFQUxcIiwgXCJFWFBSRUFMXCIsIFwiSU5UXCIsIFwiSURcIiwgXCJXU1wiLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIkZJTEVOQU1FXCIsIFwiQ09NTUVOVFwiLCBcIkxJTkVfQ09NTUVOVFwiIF07XG5cblFBU01MZXhlci5wcm90b3R5cGUuZ3JhbW1hckZpbGVOYW1lID0gXCJRQVNNLmc0XCI7XG5cblxuXG5leHBvcnRzLlFBU01MZXhlciA9IFFBU01MZXhlcjtcblxuIiwiLy8gR2VuZXJhdGVkIGZyb20gUUFTTS5nNCBieSBBTlRMUiA0LjcuMVxuLy8ganNoaW50IGlnbm9yZTogc3RhcnRcbnZhciBhbnRscjQgPSByZXF1aXJlKCdhbnRscjQvaW5kZXgnKTtcblxuLy8gVGhpcyBjbGFzcyBkZWZpbmVzIGEgY29tcGxldGUgbGlzdGVuZXIgZm9yIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyLlxuZnVuY3Rpb24gUUFTTUxpc3RlbmVyKCkge1xuXHRhbnRscjQudHJlZS5QYXJzZVRyZWVMaXN0ZW5lci5jYWxsKHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LnRyZWUuUGFyc2VUcmVlTGlzdGVuZXIucHJvdG90eXBlKTtcblFBU01MaXN0ZW5lci5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBRQVNNTGlzdGVuZXI7XG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI21haW5wcm9nLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlck1haW5wcm9nID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI21haW5wcm9nLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0TWFpbnByb2cgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjc3RhdGVtZW50LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlclN0YXRlbWVudCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNzdGF0ZW1lbnQuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRTdGF0ZW1lbnQgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjdmVyc2lvbi5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJWZXJzaW9uID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3ZlcnNpb24uXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRWZXJzaW9uID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2luY2x1ZGUuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVySW5jbHVkZSA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNpbmNsdWRlLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0SW5jbHVkZSA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNmaWxlbmFtZS5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJGaWxlbmFtZSA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNmaWxlbmFtZS5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdEZpbGVuYW1lID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2RlY2wuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyRGVjbCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNkZWNsLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0RGVjbCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNnYXRlZGVjbC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJHYXRlZGVjbCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNnYXRlZGVjbC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdEdhdGVkZWNsID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2dvcGxpc3QuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyR29wbGlzdCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNnb3BsaXN0LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0R29wbGlzdCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNxb3AuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyUW9wID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3FvcC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdFFvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN1b3AuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyVW9wID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3VvcC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdFVvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNhbnlsaXN0LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckFueWxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjYW55bGlzdC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdEFueWxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjaWRsaXN0LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlcklkbGlzdCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNpZGxpc3QuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRJZGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjbWl4ZWRsaXN0LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlck1peGVkbGlzdCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNtaXhlZGxpc3QuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRNaXhlZGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjYXJndW1lbnQuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyQXJndW1lbnQgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjYXJndW1lbnQuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRBcmd1bWVudCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG4vLyBFbnRlciBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNleHBsaXN0LlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckV4cGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cbi8vIEV4aXQgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZXhwbGlzdC5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZXhpdEV4cGxpc3QgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjZXhwLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5lbnRlckV4cCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciNleHAuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRFeHAgPSBmdW5jdGlvbihjdHgpIHtcbn07XG5cblxuLy8gRW50ZXIgYSBwYXJzZSB0cmVlIHByb2R1Y2VkIGJ5IFFBU01QYXJzZXIjYXRvbS5cblFBU01MaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJBdG9tID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG4vLyBFeGl0IGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI2F0b20uXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmV4aXRBdG9tID0gZnVuY3Rpb24oY3R4KSB7XG59O1xuXG5cbi8vIEVudGVyIGEgcGFyc2UgdHJlZSBwcm9kdWNlZCBieSBRQVNNUGFyc2VyI3VuYXJ5b3AuXG5RQVNNTGlzdGVuZXIucHJvdG90eXBlLmVudGVyVW5hcnlvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuLy8gRXhpdCBhIHBhcnNlIHRyZWUgcHJvZHVjZWQgYnkgUUFTTVBhcnNlciN1bmFyeW9wLlxuUUFTTUxpc3RlbmVyLnByb3RvdHlwZS5leGl0VW5hcnlvcCA9IGZ1bmN0aW9uKGN0eCkge1xufTtcblxuXG5cbmV4cG9ydHMuUUFTTUxpc3RlbmVyID0gUUFTTUxpc3RlbmVyOyIsIi8vIEdlbmVyYXRlZCBmcm9tIFFBU00uZzQgYnkgQU5UTFIgNC43LjFcbi8vIGpzaGludCBpZ25vcmU6IHN0YXJ0XG52YXIgYW50bHI0ID0gcmVxdWlyZSgnYW50bHI0L2luZGV4Jyk7XG52YXIgUUFTTUxpc3RlbmVyID0gcmVxdWlyZSgnLi9RQVNNTGlzdGVuZXInKS5RQVNNTGlzdGVuZXI7XG52YXIgZ3JhbW1hckZpbGVOYW1lID0gXCJRQVNNLmc0XCI7XG5cbnZhciBzZXJpYWxpemVkQVROID0gW1wiXFx1MDAwM1xcdTYwOGJcXHVhNzJhXFx1ODEzM1xcdWI5ZWRcXHU0MTdjXFx1M2JlN1xcdTc3ODZcXHU1OTY0XCIsXG4gICAgXCJcXHUwMDAzLVxcdTAxMzBcXHUwMDA0XFx1MDAwMlxcdFxcdTAwMDJcXHUwMDA0XFx1MDAwM1xcdFxcdTAwMDNcXHUwMDA0XFx1MDAwNFxcdFwiLFxuICAgIFwiXFx1MDAwNFxcdTAwMDRcXHUwMDA1XFx0XFx1MDAwNVxcdTAwMDRcXHUwMDA2XFx0XFx1MDAwNlxcdTAwMDRcXHUwMDA3XFx0XFx1MDAwN1xcdTAwMDRcIixcbiAgICBcIlxcYlxcdFxcYlxcdTAwMDRcXHRcXHRcXHRcXHUwMDA0XFxuXFx0XFxuXFx1MDAwNFxcdTAwMGJcXHRcXHUwMDBiXFx1MDAwNFxcZlxcdFxcZlxcdTAwMDRcIixcbiAgICBcIlxcclxcdFxcclxcdTAwMDRcXHUwMDBlXFx0XFx1MDAwZVxcdTAwMDRcXHUwMDBmXFx0XFx1MDAwZlxcdTAwMDRcXHUwMDEwXFx0XFx1MDAxMFxcdTAwMDRcIixcbiAgICBcIlxcdTAwMTFcXHRcXHUwMDExXFx1MDAwNFxcdTAwMTJcXHRcXHUwMDEyXFx1MDAwNFxcdTAwMTNcXHRcXHUwMDEzXFx1MDAwM1xcdTAwMDJcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwN1xcdTAwMDIpXFxuXFx1MDAwMlxcZlxcdTAwMDJcXHUwMDBlXFx1MDAwMixcXHUwMDBiXFx1MDAwMlxcdTAwMDNcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcIixcbiAgICBcIlxcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDNcXHUwMDAzXFx1MDAwM1xcdTAwMDVcXHUwMDAzV1xcblxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDNcXHUwMDA0XFx1MDAwM1xcdTAwMDRcXHUwMDAzXFx1MDAwNFxcdTAwMDNcXHUwMDA0XFx1MDAwM1xcdTAwMDVcXHUwMDAzXFx1MDAwNVwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDVcXHUwMDAzXFx1MDAwNVxcdTAwMDNcXHUwMDA2XFx1MDAwM1xcdTAwMDZcXHUwMDAzXFx1MDAwN1xcdTAwMDNcXHUwMDA3XCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwN1xcdTAwMDNcXHUwMDA3XFx1MDAwM1xcdTAwMDdcXHUwMDAzXFx1MDAwN1xcdTAwMDNcXHUwMDA3XFx1MDAwM1xcdTAwMDdcIixcbiAgICBcIlxcdTAwMDNcXHUwMDA3XFx1MDAwM1xcdTAwMDdcXHUwMDAzXFx1MDAwN1xcdTAwMDNcXHUwMDA3XFx1MDAwNVxcdTAwMDdvXFxuXFx1MDAwN1wiLFxuICAgIFwiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXCIsXG4gICAgXCJcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwM1xcYlxcdTAwMDNcIixcbiAgICBcIlxcYlxcdTAwMDNcXGJcXHUwMDAzXFxiXFx1MDAwNVxcYlxcdTAwODVcXG5cXGJcXHUwMDAzXFx0XFx1MDAwM1xcdFxcdTAwMDNcXHRcXHUwMDAzXFx0XCIsXG4gICAgXCJcXHUwMDAzXFx0XFx1MDAwNlxcdFxcdTAwOGNcXG5cXHRcXHJcXHRcXHUwMDBlXFx0XFx1MDA4ZFxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcblwiLFxuICAgIFwiXFx1MDAwM1xcblxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcblxcdTAwMDNcXG5cXHUwMDAzXFxuXFx1MDAwM1xcblxcdTAwMDNcXG5cXHUwMDA1XCIsXG4gICAgXCJcXG5cXHUwMDliXFxuXFxuXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcIixcbiAgICBcIlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXFx1MDAwM1xcdTAwMGJcXHUwMDAzXFx1MDAwYlxcdTAwMDNcXHUwMDBiXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwYlxcdTAwMDVcXHUwMDBiXFx1MDBiYlxcblxcdTAwMGJcXHUwMDAzXFxmXFx1MDAwM1xcZlxcdTAwMDVcXGZcXHUwMGJmXCIsXG4gICAgXCJcXG5cXGZcXHUwMDAzXFxyXFx1MDAwM1xcclxcdTAwMDdcXHJcXHUwMGMzXFxuXFxyXFxmXFxyXFx1MDAwZVxcclxcdTAwYzZcXHUwMDBiXFxyXFx1MDAwM1wiLFxuICAgIFwiXFxyXFx1MDAwM1xcclxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcIixcbiAgICBcIlxcdTAwMDdcXHUwMDBlXFx1MDBjZlxcblxcdTAwMGVcXGZcXHUwMDBlXFx1MDAwZVxcdTAwMGVcXHUwMGQyXFx1MDAwYlxcdTAwMGVcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDdcIixcbiAgICBcIlxcdTAwMGVcXHUwMGRhXFxuXFx1MDAwZVxcZlxcdTAwMGVcXHUwMDBlXFx1MDAwZVxcdTAwZGRcXHUwMDBiXFx1MDAwZVxcdTAwMDNcXHUwMDBlXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwN1xcdTAwMGVcIixcbiAgICBcIlxcdTAwZTVcXG5cXHUwMDBlXFxmXFx1MDAwZVxcdTAwMGVcXHUwMDBlXFx1MDBlOFxcdTAwMGJcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDBlXFx1MDAwN1xcdTAwMGVcXHUwMGVjXFxuXFx1MDAwZVxcZlxcdTAwMGVcXHUwMDBlXFx1MDAwZVxcdTAwZWZcXHUwMDBiXFx1MDAwZVwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMGVcXHUwMDAzXFx1MDAwZVxcdTAwMDNcXHUwMDBlXFx1MDAwM1xcdTAwMGVcXHUwMDA1XFx1MDAwZVxcdTAwZjVcXG5cIixcbiAgICBcIlxcdTAwMGVcXHUwMDAzXFx1MDAwZlxcdTAwMDNcXHUwMDBmXFx1MDAwM1xcdTAwMGZcXHUwMDAzXFx1MDAwZlxcdTAwMDNcXHUwMDBmXFx1MDAwNVwiLFxuICAgIFwiXFx1MDAwZlxcdTAwZmNcXG5cXHUwMDBmXFx1MDAwM1xcdTAwMTBcXHUwMDAzXFx1MDAxMFxcdTAwMDNcXHUwMDEwXFx1MDAwN1xcdTAwMTBcIixcbiAgICBcIlxcdTAxMDFcXG5cXHUwMDEwXFxmXFx1MDAxMFxcdTAwMGVcXHUwMDEwXFx1MDEwNFxcdTAwMGJcXHUwMDEwXFx1MDAwM1xcdTAwMTBcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDEwXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDVcXHUwMDExXFx1MDEwYVxcblxcdTAwMTFcXHUwMDAzXFx1MDAxMVwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDA1XFx1MDAxMVxcdTAxMTFcXG5cIixcbiAgICBcIlxcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDNcXHUwMDExXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAxMVxcdTAwMDVcXHUwMDExXFx1MDExOVxcblxcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDVcXHUwMDExXFx1MDExY1xcblxcdTAwMTFcIixcbiAgICBcIlxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDNcXHUwMDExXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVwiLFxuICAgIFwiXFx1MDAwM1xcdTAwMTFcXHUwMDAzXFx1MDAxMVxcdTAwMDNcXHUwMDExXFx1MDAwN1xcdTAwMTFcXHUwMTI3XFxuXFx1MDAxMVxcZlxcdTAwMTFcIixcbiAgICBcIlxcdTAwMGVcXHUwMDExXFx1MDEyYVxcdTAwMGJcXHUwMDExXFx1MDAwM1xcdTAwMTJcXHUwMDAzXFx1MDAxMlxcdTAwMDNcXHUwMDEzXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAxM1xcdTAwMDNcXHUwMDEzXFx1MDAwMlxcdTAwMDMgXFx1MDAxNFxcdTAwMDJcXHUwMDA0XFx1MDAwNlxcYlxcblxcZlxcdTAwMGVcIixcbiAgICBcIlxcdTAwMTBcXHUwMDEyXFx1MDAxNFxcdTAwMTZcXHUwMDE4XFx1MDAxYVxcdTAwMWNcXHUwMDFlIFxcXCIkXFx1MDAwMlxcdTAwMDZcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAxY1xcdTAwMWRcXHUwMDAzXFx1MDAwMlxcdTAwMWFcXHUwMDFiXFx1MDAwNFxcdTAwMDIkJSgpXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMWUjXFx1MDAwMlxcdTAxNDRcXHUwMDAyJlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDA0VlxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDZYXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcYlxcXFxcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXG5gXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcZm5cXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAwZVxcdTAwODRcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDEwXFx1MDA4YlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDEyXFx1MDA5YVxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTRcXHUwMGJhXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwMTZcXHUwMGJlXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxOFxcdTAwYzRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxYVxcdTAwZjRcXHUwMDAzXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDFjXFx1MDBmYlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDFlXFx1MDEwMlxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMiBcXHUwMTFiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcXCJcXHUwMTJiXFx1MDAwM1xcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyJFxcdTAxMmRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyJipcXHUwMDA1XFx1MDAwNlxcdTAwMDRcXHUwMDAyXCIsXG4gICAgXCJcXCcpXFx1MDAwNVxcdTAwMDRcXHUwMDAzXFx1MDAwMihcXCdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyKSxcXHUwMDAzXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDIqKFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDIqK1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDIrXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMiwqXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMi1XXFx1MDAwNVxcZlxcdTAwMDdcXHUwMDAyXCIsXG4gICAgXCIuL1xcdTAwMDVcXHUwMDBlXFxiXFx1MDAwMi8wXFx1MDAwNVxcdTAwMTBcXHRcXHUwMDAyMDFcXHUwMDA3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCIxV1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDIyM1xcdTAwMDVcXHUwMDBlXFxiXFx1MDAwMjM0XFx1MDAwN1xcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyNFdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyNTZcXHUwMDA3XFx1MDAwNFxcdTAwMDJcXHUwMDAyNjdcXHUwMDA3KVwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDI3OFxcdTAwMDVcXHUwMDE4XFxyXFx1MDAwMjg5XFx1MDAwN1xcdTAwMDVcXHUwMDAyXFx1MDAwMjlXXFx1MDAwM1wiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJcXHUwMDAyOjtcXHUwMDA3XFx1MDAwNFxcdTAwMDJcXHUwMDAyOzxcXHUwMDA3KVxcdTAwMDJcXHUwMDAyPD1cIixcbiAgICBcIlxcdTAwMDdcXHUwMDA2XFx1MDAwMlxcdTAwMDI9PlxcdTAwMDdcXHUwMDA3XFx1MDAwMlxcdTAwMDI+P1xcdTAwMDVcXHUwMDE4XFxyXFx1MDAwMlwiLFxuICAgIFwiP0BcXHUwMDA3XFx1MDAwNVxcdTAwMDJcXHUwMDAyQFdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyQUJcXHUwMDA3XFx1MDAwNFxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJCQ1xcdTAwMDcpXFx1MDAwMlxcdTAwMDJDRFxcdTAwMDdcXHUwMDA2XFx1MDAwMlxcdTAwMDJERVxcdTAwMDVcXHUwMDE4XCIsXG4gICAgXCJcXHJcXHUwMDAyRUZcXHUwMDA3XFx1MDAwN1xcdTAwMDJcXHUwMDAyRkdcXHUwMDA1XFx1MDAxOFxcclxcdTAwMDJHSFxcdTAwMDdcXHUwMDA1XCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMkhXXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMklXXFx1MDAwNVxcdTAwMTJcXG5cXHUwMDAySktcXHUwMDA3XCIsXG4gICAgXCJcXGJcXHUwMDAyXFx1MDAwMktMXFx1MDAwN1xcdTAwMDZcXHUwMDAyXFx1MDAwMkxNXFx1MDAwNylcXHUwMDAyXFx1MDAwMk1OXFx1MDAwN1wiLFxuICAgIFwiXFx0XFx1MDAwMlxcdTAwMDJOT1xcdTAwMDcoXFx1MDAwMlxcdTAwMDJPUFxcdTAwMDdcXHUwMDA3XFx1MDAwMlxcdTAwMDJQV1xcdTAwMDVcIixcbiAgICBcIlxcdTAwMTJcXG5cXHUwMDAyUVJcXHUwMDA3XFxuXFx1MDAwMlxcdTAwMDJSU1xcdTAwMDVcXHUwMDE2XFxmXFx1MDAwMlNUXFx1MDAwN1xcdTAwMDVcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyVFdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyVVdcXHUwMDA1XFxiXFx1MDAwNVxcdTAwMDJWLVxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDAwMlYuXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlYyXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiVjVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyVjpcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyVkFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJWSVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJWSlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJWUVxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlZVXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMldcXHUwMDA1XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiWFlcXHUwMDA3XFx1MDAwYlxcdTAwMDJcXHUwMDAyWVpcXHUwMDA3JVxcdTAwMDJcXHUwMDAyWltcXHUwMDA3XFx1MDAwNVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJbXFx1MDAwN1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXFxcXVxcdTAwMDdcXGZcXHUwMDAyXFx1MDAwMl1eXFx1MDAwNVwiLFxuICAgIFwiXFxuXFx1MDAwNlxcdTAwMDJeX1xcdTAwMDdcXHUwMDA1XFx1MDAwMlxcdTAwMDJfXFx0XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiYGFcXHUwMDA3K1xcdTAwMDJcXHUwMDAyYVxcdTAwMGJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyYmNcXHUwMDA3XFxyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMmNkXFx1MDAwNylcXHUwMDAyXFx1MDAwMmRlXFx1MDAwN1xcdTAwMGVcXHUwMDAyXFx1MDAwMmVmXFx1MDAwNyhcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyZmdcXHUwMDA3XFx1MDAwZlxcdTAwMDJcXHUwMDAyZ29cXHUwMDA3XFx1MDAwNVxcdTAwMDJcXHUwMDAyaGlcXHUwMDA3XFx1MDAxMFwiLFxuICAgIFwiXFx1MDAwMlxcdTAwMDJpalxcdTAwMDcpXFx1MDAwMlxcdTAwMDJqa1xcdTAwMDdcXHUwMDBlXFx1MDAwMlxcdTAwMDJrbFxcdTAwMDdcIixcbiAgICBcIihcXHUwMDAyXFx1MDAwMmxtXFx1MDAwN1xcdTAwMGZcXHUwMDAyXFx1MDAwMm1vXFx1MDAwN1xcdTAwMDVcXHUwMDAyXFx1MDAwMm5iXCIsXG4gICAgXCJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAybmhcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyb1xcclxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMnBxXFx1MDAwN1xcdTAwMTFcXHUwMDAyXFx1MDAwMnFyXFx1MDAwNylcXHUwMDAyXFx1MDAwMnJzXFx1MDAwNVxcdTAwMThcIixcbiAgICBcIlxcclxcdTAwMDJzdFxcdTAwMDdcXHUwMDEyXFx1MDAwMlxcdTAwMDJ0XFx1MDA4NVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJ1dlwiLFxuICAgIFwiXFx1MDAwN1xcdTAwMTFcXHUwMDAyXFx1MDAwMnZ3XFx1MDAwNylcXHUwMDAyXFx1MDAwMnd4XFx1MDAwN1xcdTAwMDZcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwieHlcXHUwMDA3XFx1MDAwN1xcdTAwMDJcXHUwMDAyeXpcXHUwMDA1XFx1MDAxOFxcclxcdTAwMDJ6e1xcdTAwMDdcXHUwMDEyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMntcXHUwMDg1XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMnx9XFx1MDAwN1xcdTAwMTFcXHUwMDAyXFx1MDAwMn1+XFx1MDAwN1wiLFxuICAgIFwiKVxcdTAwMDJcXHUwMDAyflxcdTAwN2ZcXHUwMDA3XFx1MDAwNlxcdTAwMDJcXHUwMDAyXFx1MDA3ZlxcdTAwODBcXHUwMDA1XFx1MDAxOFwiLFxuICAgIFwiXFxyXFx1MDAwMlxcdTAwODBcXHUwMDgxXFx1MDAwN1xcdTAwMDdcXHUwMDAyXFx1MDAwMlxcdTAwODFcXHUwMDgyXFx1MDAwNVxcdTAwMThcIixcbiAgICBcIlxcclxcdTAwMDJcXHUwMDgyXFx1MDA4M1xcdTAwMDdcXHUwMDEyXFx1MDAwMlxcdTAwMDJcXHUwMDgzXFx1MDA4NVxcdTAwMDNcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDAwMlxcdTAwODRwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwODR1XFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA4NHxcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDA4NVxcdTAwMGZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDg2XFx1MDA4Y1xcdTAwMDVcXHUwMDE0XFx1MDAwYlxcdTAwMDJcXHUwMDg3XFx1MDA4OFxcdTAwMDdcXG5cXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA4OFxcdTAwODlcXHUwMDA1XFx1MDAxOFxcclxcdTAwMDJcXHUwMDg5XFx1MDA4YVxcdTAwMDdcXHUwMDA1XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOGFcXHUwMDhjXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwOGJcXHUwMDg2XFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA4YlxcdTAwODdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDA4Y1xcdTAwOGRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDhkXFx1MDA4YlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMDhkXFx1MDA4ZVxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOGVcXHUwMDExXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwOGZcXHUwMDliXFx1MDAwNVxcdTAwMTRcXHUwMDBiXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA5MFxcdTAwOTFcXHUwMDA3XFx1MDAxM1xcdTAwMDJcXHUwMDAyXFx1MDA5MVxcdTAwOTJcXHUwMDA1XFx1MDAxY1xcdTAwMGZcIixcbiAgICBcIlxcdTAwMDJcXHUwMDkyXFx1MDA5M1xcdTAwMDdcXHUwMDE0XFx1MDAwMlxcdTAwMDJcXHUwMDkzXFx1MDA5NFxcdTAwMDVcXHUwMDFjXFx1MDAwZlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOTRcXHUwMDk1XFx1MDAwN1xcdTAwMDVcXHUwMDAyXFx1MDAwMlxcdTAwOTVcXHUwMDliXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA5NlxcdTAwOTdcXHUwMDA3XFx1MDAxNVxcdTAwMDJcXHUwMDAyXFx1MDA5N1xcdTAwOThcXHUwMDA1XFx1MDAxY1xcdTAwMGZcIixcbiAgICBcIlxcdTAwMDJcXHUwMDk4XFx1MDA5OVxcdTAwMDdcXHUwMDA1XFx1MDAwMlxcdTAwMDJcXHUwMDk5XFx1MDA5YlxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOWFcXHUwMDhmXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwOWFcXHUwMDkwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDA5YVxcdTAwOTZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDA5YlxcdTAwMTNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMDljXFx1MDA5ZFxcdTAwMDdcXHUwMDE2XFx1MDAwMlxcdTAwMDJcXHUwMDlkXFx1MDA5ZVxcdTAwMDdcXHUwMDA2XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwOWVcXHUwMDlmXFx1MDAwNVxcdTAwMWVcXHUwMDEwXFx1MDAwMlxcdTAwOWZcXHUwMGEwXFx1MDAwN1xcdTAwMDdcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBhMFxcdTAwYTFcXHUwMDA1XFx1MDAxY1xcdTAwMGZcXHUwMDAyXFx1MDBhMVxcdTAwYTJcXHUwMDA3XFx1MDAwNVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGEyXFx1MDBiYlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGEzXFx1MDBhNFxcdTAwMDdcXHUwMDE3XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYTRcXHUwMGE1XFx1MDAwNVxcdTAwMWNcXHUwMDBmXFx1MDAwMlxcdTAwYTVcXHUwMGE2XFx1MDAwN1xcdTAwMThcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBhNlxcdTAwYTdcXHUwMDA1XFx1MDAxY1xcdTAwMGZcXHUwMDAyXFx1MDBhN1xcdTAwYThcXHUwMDA3XFx1MDAwNVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGE4XFx1MDBiYlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGE5XFx1MDBhYVxcdTAwMDcpXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYWFcXHUwMGFiXFx1MDAwNVxcdTAwMTZcXGZcXHUwMDAyXFx1MDBhYlxcdTAwYWNcXHUwMDA3XFx1MDAwNVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGFjXFx1MDBiYlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGFkXFx1MDBhZVxcdTAwMDcpXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYWVcXHUwMGFmXFx1MDAwN1xcdTAwMDZcXHUwMDAyXFx1MDAwMlxcdTAwYWZcXHUwMGIwXFx1MDAwN1xcdTAwMDdcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBiMFxcdTAwYjFcXHUwMDA1XFx1MDAxNlxcZlxcdTAwMDJcXHUwMGIxXFx1MDBiMlxcdTAwMDdcXHUwMDA1XFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYjJcXHUwMGJiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYjNcXHUwMGI0XFx1MDAwNylcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBiNFxcdTAwYjVcXHUwMDA3XFx1MDAwNlxcdTAwMDJcXHUwMDAyXFx1MDBiNVxcdTAwYjZcXHUwMDA1XFx1MDAxZVxcdTAwMTBcIixcbiAgICBcIlxcdTAwMDJcXHUwMGI2XFx1MDBiN1xcdTAwMDdcXHUwMDA3XFx1MDAwMlxcdTAwMDJcXHUwMGI3XFx1MDBiOFxcdTAwMDVcXHUwMDE2XFxmXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBiOFxcdTAwYjlcXHUwMDA3XFx1MDAwNVxcdTAwMDJcXHUwMDAyXFx1MDBiOVxcdTAwYmJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGJhXFx1MDA5Y1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGJhXFx1MDBhM1xcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYmFcXHUwMGE5XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYmFcXHUwMGFkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBiYVxcdTAwYjNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBiYlxcdTAwMTVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGJjXFx1MDBiZlxcdTAwMDVcXHUwMDE4XFxyXFx1MDAwMlxcdTAwYmRcXHUwMGJmXFx1MDAwNVxcdTAwMWFcXHUwMDBlXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBiZVxcdTAwYmNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBiZVxcdTAwYmRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGJmXFx1MDAxN1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGMwXFx1MDBjMVxcdTAwMDcpXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYzFcXHUwMGMzXFx1MDAwN1xcdTAwMThcXHUwMDAyXFx1MDAwMlxcdTAwYzJcXHUwMGMwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBjM1xcdTAwYzZcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBjNFxcdTAwYzJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGM0XFx1MDBjNVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGM1XFx1MDBjN1xcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwYzZcXHUwMGM0XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwYzdcXHUwMGM4XFx1MDAwNylcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBjOFxcdTAwMTlcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBjOVxcdTAwY2FcXHUwMDA3KVxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGNhXFx1MDBjYlxcdTAwMDdcXHUwMDBlXFx1MDAwMlxcdTAwMDJcXHUwMGNiXFx1MDBjY1xcdTAwMDcoXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwY2NcXHUwMGNkXFx1MDAwN1xcdTAwMGZcXHUwMDAyXFx1MDAwMlxcdTAwY2RcXHUwMGNmXFx1MDAwN1xcdTAwMThcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBjZVxcdTAwYzlcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBjZlxcdTAwZDJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwMDJcXHUwMGQwXFx1MDBjZVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGQwXFx1MDBkMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDAwMlxcdTAwZDFcXHUwMGQzXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZDJcXHUwMGQwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMDAyXFx1MDBkM1xcdTAwZjVcXHUwMDA3KVxcdTAwMDJcXHUwMDAyXFx1MDBkNFxcdTAwZDVcXHUwMDA3KVxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGQ1XFx1MDBkNlxcdTAwMDdcXHUwMDBlXFx1MDAwMlxcdTAwMDJcXHUwMGQ2XFx1MDBkN1xcdTAwMDcoXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZDdcXHUwMGQ4XFx1MDAwN1xcdTAwMGZcXHUwMDAyXFx1MDAwMlxcdTAwZDhcXHUwMGRhXFx1MDAwN1xcdTAwMThcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBkOVxcdTAwZDRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBkYVxcdTAwZGRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGRiXFx1MDBkOVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGRiXFx1MDBkY1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZGNcXHUwMGRlXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZGRcXHUwMGRiXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBkZVxcdTAwZGZcXHUwMDA3KVxcdTAwMDJcXHUwMDAyXFx1MDBkZlxcdTAwZTBcXHUwMDA3XFx1MDAwZVxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGUwXFx1MDBlMVxcdTAwMDcoXFx1MDAwMlxcdTAwMDJcXHUwMGUxXFx1MDBmNVxcdTAwMDdcXHUwMDBmXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZTJcXHUwMGUzXFx1MDAwNylcXHUwMDAyXFx1MDAwMlxcdTAwZTNcXHUwMGU1XFx1MDAwN1xcdTAwMThcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBlNFxcdTAwZTJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlNVxcdTAwZThcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGU2XFx1MDBlNFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGU2XFx1MDBlN1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZTdcXHUwMGU5XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZThcXHUwMGU2XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBlOVxcdTAwZWFcXHUwMDA3KVxcdTAwMDJcXHUwMDAyXFx1MDBlYVxcdTAwZWNcXHUwMDA3XFx1MDAxOFxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGViXFx1MDBlNlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGVjXFx1MDBlZlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZWRcXHUwMGViXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZWRcXHUwMGVlXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBlZVxcdTAwZjBcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBlZlxcdTAwZWRcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGYwXFx1MDBmMVxcdTAwMDcpXFx1MDAwMlxcdTAwMDJcXHUwMGYxXFx1MDBmMlxcdTAwMDdcXHUwMDBlXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZjJcXHUwMGYzXFx1MDAwNyhcXHUwMDAyXFx1MDAwMlxcdTAwZjNcXHUwMGY1XFx1MDAwN1xcdTAwMGZcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDBmNFxcdTAwZDBcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDBmNFxcdTAwZGJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXCIsXG4gICAgXCJcXHUwMGY0XFx1MDBlZFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGY1XFx1MDAxYlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcIixcbiAgICBcIlxcdTAwZjZcXHUwMGZjXFx1MDAwNylcXHUwMDAyXFx1MDAwMlxcdTAwZjdcXHUwMGY4XFx1MDAwNylcXHUwMDAyXFx1MDAwMlxcdTAwZjhcIixcbiAgICBcIlxcdTAwZjlcXHUwMDA3XFx1MDAwZVxcdTAwMDJcXHUwMDAyXFx1MDBmOVxcdTAwZmFcXHUwMDA3KFxcdTAwMDJcXHUwMDAyXFx1MDBmYVwiLFxuICAgIFwiXFx1MDBmY1xcdTAwMDdcXHUwMDBmXFx1MDAwMlxcdTAwMDJcXHUwMGZiXFx1MDBmNlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMGZiXCIsXG4gICAgXCJcXHUwMGY3XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZmNcXHUwMDFkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAwZmRcIixcbiAgICBcIlxcdTAwZmVcXHUwMDA1IFxcdTAwMTFcXHUwMDAyXFx1MDBmZVxcdTAwZmZcXHUwMDA3XFx1MDAxOFxcdTAwMDJcXHUwMDAyXFx1MDBmZlwiLFxuICAgIFwiXFx1MDEwMVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTAwXFx1MDBmZFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTAxXCIsXG4gICAgXCJcXHUwMTA0XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMDJcXHUwMTAwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMDJcIixcbiAgICBcIlxcdTAxMDNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwM1xcdTAxMDVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwNFwiLFxuICAgIFwiXFx1MDEwMlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTA1XFx1MDEwNlxcdTAwMDUgXFx1MDAxMVxcdTAwMDJcXHUwMTA2XCIsXG4gICAgXCJcXHUwMDFmXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMDdcXHUwMTA5XFxiXFx1MDAxMVxcdTAwMDFcXHUwMDAyXFx1MDEwOFwiLFxuICAgIFwiXFx1MDEwYVxcdFxcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMDlcXHUwMTA4XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMDlcIixcbiAgICBcIlxcdTAxMGFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwYVxcdTAxMGJcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEwYlwiLFxuICAgIFwiXFx1MDEwY1xcdTAwMDdcXHUwMDA2XFx1MDAwMlxcdTAwMDJcXHUwMTBjXFx1MDEwZFxcdTAwMDUgXFx1MDAxMVxcdTAwMDJcXHUwMTBkXCIsXG4gICAgXCJcXHUwMTBlXFx1MDAwN1xcdTAwMDdcXHUwMDAyXFx1MDAwMlxcdTAxMGVcXHUwMTFjXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMGZcIixcbiAgICBcIlxcdTAxMTFcXHRcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTEwXFx1MDEwZlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTEwXCIsXG4gICAgXCJcXHUwMTExXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMTFcXHUwMTEyXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMTJcIixcbiAgICBcIlxcdTAxMTNcXHUwMDA1JFxcdTAwMTNcXHUwMDAyXFx1MDExM1xcdTAxMTRcXHUwMDA3XFx1MDAwNlxcdTAwMDJcXHUwMDAyXFx1MDExNFwiLFxuICAgIFwiXFx1MDExNVxcdTAwMDUgXFx1MDAxMVxcdTAwMDJcXHUwMTE1XFx1MDExNlxcdTAwMDdcXHUwMDA3XFx1MDAwMlxcdTAwMDJcXHUwMTE2XCIsXG4gICAgXCJcXHUwMTFjXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMTdcXHUwMTE5XFx0XFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExOFwiLFxuICAgIFwiXFx1MDExN1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTE4XFx1MDExOVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTE5XCIsXG4gICAgXCJcXHUwMTFhXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMWFcXHUwMTFjXFx1MDAwNVxcXCJcXHUwMDEyXFx1MDAwMlxcdTAxMWJcIixcbiAgICBcIlxcdTAxMDdcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExYlxcdTAxMTBcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDExYlwiLFxuICAgIFwiXFx1MDExOFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTFjXFx1MDEyOFxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTFkXCIsXG4gICAgXCJcXHUwMTFlXFxmXFxiXFx1MDAwMlxcdTAwMDJcXHUwMTFlXFx1MDExZlxcdTAwMDdcXHUwMDE5XFx1MDAwMlxcdTAwMDJcXHUwMTFmXFx1MDEyN1wiLFxuICAgIFwiXFx1MDAwNSBcXHUwMDExXFx0XFx1MDEyMFxcdTAxMjFcXGZcXHUwMDA3XFx1MDAwMlxcdTAwMDJcXHUwMTIxXFx1MDEyMlxcdFxcdTAwMDNcIixcbiAgICBcIlxcdTAwMDJcXHUwMDAyXFx1MDEyMlxcdTAxMjdcXHUwMDA1IFxcdTAwMTFcXGJcXHUwMTIzXFx1MDEyNFxcZlxcdTAwMDZcXHUwMDAyXFx1MDAwMlwiLFxuICAgIFwiXFx1MDEyNFxcdTAxMjVcXHRcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTI1XFx1MDEyN1xcdTAwMDUgXFx1MDAxMVxcdTAwMDdcXHUwMTI2XCIsXG4gICAgXCJcXHUwMTFkXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMjZcXHUwMTIwXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMjZcIixcbiAgICBcIlxcdTAxMjNcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEyN1xcdTAxMmFcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDEyOFwiLFxuICAgIFwiXFx1MDEyNlxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTI4XFx1MDEyOVxcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTI5XCIsXG4gICAgXCIhXFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMmFcXHUwMTI4XFx1MDAwM1xcdTAwMDJcXHUwMDAyXFx1MDAwMlxcdTAxMmJcIixcbiAgICBcIlxcdTAxMmNcXHRcXHUwMDA0XFx1MDAwMlxcdTAwMDJcXHUwMTJjI1xcdTAwMDNcXHUwMDAyXFx1MDAwMlxcdTAwMDJcXHUwMTJkXFx1MDEyZVwiLFxuICAgIFwiXFx0XFx1MDAwNVxcdTAwMDJcXHUwMDAyXFx1MDEyZSVcXHUwMDAzXFx1MDAwMlxcdTAwMDJcXHUwMDAyXFx1MDAxOSpWblxcdTAwODRcXHUwMDhiXCIsXG4gICAgXCJcXHUwMDhkXFx1MDA5YVxcdTAwYmFcXHUwMGJlXFx1MDBjNFxcdTAwZDBcXHUwMGRiXFx1MDBlNlxcdTAwZWRcXHUwMGY0XFx1MDBmYlxcdTAxMDJcIixcbiAgICBcIlxcdTAxMDlcXHUwMTEwXFx1MDExOFxcdTAxMWJcXHUwMTI2XFx1MDEyOFwiXS5qb2luKFwiXCIpO1xuXG5cbnZhciBhdG4gPSBuZXcgYW50bHI0LmF0bi5BVE5EZXNlcmlhbGl6ZXIoKS5kZXNlcmlhbGl6ZShzZXJpYWxpemVkQVROKTtcblxudmFyIGRlY2lzaW9uc1RvREZBID0gYXRuLmRlY2lzaW9uVG9TdGF0ZS5tYXAoIGZ1bmN0aW9uKGRzLCBpbmRleCkgeyByZXR1cm4gbmV3IGFudGxyNC5kZmEuREZBKGRzLCBpbmRleCk7IH0pO1xuXG52YXIgc2hhcmVkQ29udGV4dENhY2hlID0gbmV3IGFudGxyNC5QcmVkaWN0aW9uQ29udGV4dENhY2hlKCk7XG5cbnZhciBsaXRlcmFsTmFtZXMgPSBbIG51bGwsIFwiJ30nXCIsIFwiJ29wYXF1ZSdcIiwgXCInOydcIiwgXCInKCdcIiwgXCInKSdcIiwgXCInaWYnXCIsIFxuICAgICAgICAgICAgICAgICAgICAgXCInPT0nXCIsIFwiJ2JhcnJpZXInXCIsIFwiJ09QRU5RQVNNJ1wiLCBcIidpbmNsdWRlJ1wiLCBcIidxcmVnJ1wiLCBcbiAgICAgICAgICAgICAgICAgICAgIFwiJ1snXCIsIFwiJ10nXCIsIFwiJ2NyZWcnXCIsIFwiJ2dhdGUnXCIsIFwiJ3snXCIsIFwiJ21lYXN1cmUnXCIsIFxuICAgICAgICAgICAgICAgICAgICAgXCInLT4nXCIsIFwiJ3Jlc2V0J1wiLCBcIidVJ1wiLCBcIidDWCdcIiwgXCInLCdcIiwgXCInXidcIiwgXCInKidcIiwgXG4gICAgICAgICAgICAgICAgICAgICBcIicvJ1wiLCBcIicrJ1wiLCBcIictJ1wiLCBcIidzaW4nXCIsIFwiJ2NvcydcIiwgXCIndGFuJ1wiLCBcIidleHAnXCIsIFxuICAgICAgICAgICAgICAgICAgICAgXCInbG4nXCIsIFwiJ3NxcnQnXCIsIFwiJ3BpJ1wiIF07XG5cbnZhciBzeW1ib2xpY05hbWVzID0gWyBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBcbiAgICAgICAgICAgICAgICAgICAgICBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBcbiAgICAgICAgICAgICAgICAgICAgICBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBcbiAgICAgICAgICAgICAgICAgICAgICBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBcIlBJXCIsIFwiUkVBTFwiLCBcbiAgICAgICAgICAgICAgICAgICAgICBcIlNVQlJFQUxcIiwgXCJFWFBSRUFMXCIsIFwiSU5UXCIsIFwiSURcIiwgXCJXU1wiLCBcIkZJTEVOQU1FXCIsIFxuICAgICAgICAgICAgICAgICAgICAgIFwiQ09NTUVOVFwiLCBcIkxJTkVfQ09NTUVOVFwiIF07XG5cbnZhciBydWxlTmFtZXMgPSAgWyBcIm1haW5wcm9nXCIsIFwic3RhdGVtZW50XCIsIFwidmVyc2lvblwiLCBcImluY2x1ZGVcIiwgXCJmaWxlbmFtZVwiLCBcbiAgICAgICAgICAgICAgICAgICBcImRlY2xcIiwgXCJnYXRlZGVjbFwiLCBcImdvcGxpc3RcIiwgXCJxb3BcIiwgXCJ1b3BcIiwgXCJhbnlsaXN0XCIsIFxuICAgICAgICAgICAgICAgICAgIFwiaWRsaXN0XCIsIFwibWl4ZWRsaXN0XCIsIFwiYXJndW1lbnRcIiwgXCJleHBsaXN0XCIsIFwiZXhwXCIsIFxuICAgICAgICAgICAgICAgICAgIFwiYXRvbVwiLCBcInVuYXJ5b3BcIiBdO1xuXG5mdW5jdGlvbiBRQVNNUGFyc2VyIChpbnB1dCkge1xuXHRhbnRscjQuUGFyc2VyLmNhbGwodGhpcywgaW5wdXQpO1xuICAgIHRoaXMuX2ludGVycCA9IG5ldyBhbnRscjQuYXRuLlBhcnNlckFUTlNpbXVsYXRvcih0aGlzLCBhdG4sIGRlY2lzaW9uc1RvREZBLCBzaGFyZWRDb250ZXh0Q2FjaGUpO1xuICAgIHRoaXMucnVsZU5hbWVzID0gcnVsZU5hbWVzO1xuICAgIHRoaXMubGl0ZXJhbE5hbWVzID0gbGl0ZXJhbE5hbWVzO1xuICAgIHRoaXMuc3ltYm9saWNOYW1lcyA9IHN5bWJvbGljTmFtZXM7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblFBU01QYXJzZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShhbnRscjQuUGFyc2VyLnByb3RvdHlwZSk7XG5RQVNNUGFyc2VyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFFBU01QYXJzZXI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShRQVNNUGFyc2VyLnByb3RvdHlwZSwgXCJhdG5cIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gYXRuO1xuXHR9XG59KTtcblxuUUFTTVBhcnNlci5FT0YgPSBhbnRscjQuVG9rZW4uRU9GO1xuUUFTTVBhcnNlci5UX18wID0gMTtcblFBU01QYXJzZXIuVF9fMSA9IDI7XG5RQVNNUGFyc2VyLlRfXzIgPSAzO1xuUUFTTVBhcnNlci5UX18zID0gNDtcblFBU01QYXJzZXIuVF9fNCA9IDU7XG5RQVNNUGFyc2VyLlRfXzUgPSA2O1xuUUFTTVBhcnNlci5UX182ID0gNztcblFBU01QYXJzZXIuVF9fNyA9IDg7XG5RQVNNUGFyc2VyLlRfXzggPSA5O1xuUUFTTVBhcnNlci5UX185ID0gMTA7XG5RQVNNUGFyc2VyLlRfXzEwID0gMTE7XG5RQVNNUGFyc2VyLlRfXzExID0gMTI7XG5RQVNNUGFyc2VyLlRfXzEyID0gMTM7XG5RQVNNUGFyc2VyLlRfXzEzID0gMTQ7XG5RQVNNUGFyc2VyLlRfXzE0ID0gMTU7XG5RQVNNUGFyc2VyLlRfXzE1ID0gMTY7XG5RQVNNUGFyc2VyLlRfXzE2ID0gMTc7XG5RQVNNUGFyc2VyLlRfXzE3ID0gMTg7XG5RQVNNUGFyc2VyLlRfXzE4ID0gMTk7XG5RQVNNUGFyc2VyLlRfXzE5ID0gMjA7XG5RQVNNUGFyc2VyLlRfXzIwID0gMjE7XG5RQVNNUGFyc2VyLlRfXzIxID0gMjI7XG5RQVNNUGFyc2VyLlRfXzIyID0gMjM7XG5RQVNNUGFyc2VyLlRfXzIzID0gMjQ7XG5RQVNNUGFyc2VyLlRfXzI0ID0gMjU7XG5RQVNNUGFyc2VyLlRfXzI1ID0gMjY7XG5RQVNNUGFyc2VyLlRfXzI2ID0gMjc7XG5RQVNNUGFyc2VyLlRfXzI3ID0gMjg7XG5RQVNNUGFyc2VyLlRfXzI4ID0gMjk7XG5RQVNNUGFyc2VyLlRfXzI5ID0gMzA7XG5RQVNNUGFyc2VyLlRfXzMwID0gMzE7XG5RQVNNUGFyc2VyLlRfXzMxID0gMzI7XG5RQVNNUGFyc2VyLlRfXzMyID0gMzM7XG5RQVNNUGFyc2VyLlBJID0gMzQ7XG5RQVNNUGFyc2VyLlJFQUwgPSAzNTtcblFBU01QYXJzZXIuU1VCUkVBTCA9IDM2O1xuUUFTTVBhcnNlci5FWFBSRUFMID0gMzc7XG5RQVNNUGFyc2VyLklOVCA9IDM4O1xuUUFTTVBhcnNlci5JRCA9IDM5O1xuUUFTTVBhcnNlci5XUyA9IDQwO1xuUUFTTVBhcnNlci5GSUxFTkFNRSA9IDQxO1xuUUFTTVBhcnNlci5DT01NRU5UID0gNDI7XG5RQVNNUGFyc2VyLkxJTkVfQ09NTUVOVCA9IDQzO1xuXG5RQVNNUGFyc2VyLlJVTEVfbWFpbnByb2cgPSAwO1xuUUFTTVBhcnNlci5SVUxFX3N0YXRlbWVudCA9IDE7XG5RQVNNUGFyc2VyLlJVTEVfdmVyc2lvbiA9IDI7XG5RQVNNUGFyc2VyLlJVTEVfaW5jbHVkZSA9IDM7XG5RQVNNUGFyc2VyLlJVTEVfZmlsZW5hbWUgPSA0O1xuUUFTTVBhcnNlci5SVUxFX2RlY2wgPSA1O1xuUUFTTVBhcnNlci5SVUxFX2dhdGVkZWNsID0gNjtcblFBU01QYXJzZXIuUlVMRV9nb3BsaXN0ID0gNztcblFBU01QYXJzZXIuUlVMRV9xb3AgPSA4O1xuUUFTTVBhcnNlci5SVUxFX3VvcCA9IDk7XG5RQVNNUGFyc2VyLlJVTEVfYW55bGlzdCA9IDEwO1xuUUFTTVBhcnNlci5SVUxFX2lkbGlzdCA9IDExO1xuUUFTTVBhcnNlci5SVUxFX21peGVkbGlzdCA9IDEyO1xuUUFTTVBhcnNlci5SVUxFX2FyZ3VtZW50ID0gMTM7XG5RQVNNUGFyc2VyLlJVTEVfZXhwbGlzdCA9IDE0O1xuUUFTTVBhcnNlci5SVUxFX2V4cCA9IDE1O1xuUUFTTVBhcnNlci5SVUxFX2F0b20gPSAxNjtcblFBU01QYXJzZXIuUlVMRV91bmFyeW9wID0gMTc7XG5cbmZ1bmN0aW9uIE1haW5wcm9nQ29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX21haW5wcm9nO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5NYWlucHJvZ0NvbnRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlKTtcbk1haW5wcm9nQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBNYWlucHJvZ0NvbnRleHQ7XG5cbk1haW5wcm9nQ29udGV4dC5wcm90b3R5cGUudmVyc2lvbiA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHQoVmVyc2lvbkNvbnRleHQsMCk7XG59O1xuXG5NYWlucHJvZ0NvbnRleHQucHJvdG90eXBlLnN0YXRlbWVudCA9IGZ1bmN0aW9uKGkpIHtcbiAgICBpZihpPT09dW5kZWZpbmVkKSB7XG4gICAgICAgIGkgPSBudWxsO1xuICAgIH1cbiAgICBpZihpPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0cyhTdGF0ZW1lbnRDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KFN0YXRlbWVudENvbnRleHQsaSk7XG4gICAgfVxufTtcblxuTWFpbnByb2dDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlck1haW5wcm9nKHRoaXMpO1xuXHR9XG59O1xuXG5NYWlucHJvZ0NvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdE1haW5wcm9nKHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLk1haW5wcm9nQ29udGV4dCA9IE1haW5wcm9nQ29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUubWFpbnByb2cgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBNYWlucHJvZ0NvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgMCwgUUFTTVBhcnNlci5SVUxFX21haW5wcm9nKTtcbiAgICB2YXIgX2xhID0gMDsgLy8gVG9rZW4gdHlwZVxuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAzNjtcbiAgICAgICAgdGhpcy52ZXJzaW9uKCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSA0MDtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgd2hpbGUoKCgoX2xhKSAmIH4weDFmKSA9PSAwICYmICgoMSA8PCBfbGEpICYgKCgxIDw8IFFBU01QYXJzZXIuVF9fMSkgfCAoMSA8PCBRQVNNUGFyc2VyLlRfXzUpIHwgKDEgPDwgUUFTTVBhcnNlci5UX183KSB8ICgxIDw8IFFBU01QYXJzZXIuVF9fOSkgfCAoMSA8PCBRQVNNUGFyc2VyLlRfXzEwKSB8ICgxIDw8IFFBU01QYXJzZXIuVF9fMTMpIHwgKDEgPDwgUUFTTVBhcnNlci5UX18xNCkgfCAoMSA8PCBRQVNNUGFyc2VyLlRfXzE2KSB8ICgxIDw8IFFBU01QYXJzZXIuVF9fMTgpIHwgKDEgPDwgUUFTTVBhcnNlci5UX18xOSkgfCAoMSA8PCBRQVNNUGFyc2VyLlRfXzIwKSkpICE9PSAwKSB8fCBfbGE9PT1RQVNNUGFyc2VyLklEKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMzc7XG4gICAgICAgICAgICB0aGlzLnN0YXRlbWVudCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDQyO1xuICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICAgICAgX2xhID0gdGhpcy5faW5wdXQuTEEoMSk7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBTdGF0ZW1lbnRDb250ZXh0KHBhcnNlciwgcGFyZW50LCBpbnZva2luZ1N0YXRlKSB7XG5cdGlmKHBhcmVudD09PXVuZGVmaW5lZCkge1xuXHQgICAgcGFyZW50ID0gbnVsbDtcblx0fVxuXHRpZihpbnZva2luZ1N0YXRlPT09dW5kZWZpbmVkIHx8IGludm9raW5nU3RhdGU9PT1udWxsKSB7XG5cdFx0aW52b2tpbmdTdGF0ZSA9IC0xO1xuXHR9XG5cdGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5jYWxsKHRoaXMsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBRQVNNUGFyc2VyLlJVTEVfc3RhdGVtZW50O1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5TdGF0ZW1lbnRDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5TdGF0ZW1lbnRDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN0YXRlbWVudENvbnRleHQ7XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLmRlY2wgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KERlY2xDb250ZXh0LDApO1xufTtcblxuU3RhdGVtZW50Q29udGV4dC5wcm90b3R5cGUuZ2F0ZWRlY2wgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KEdhdGVkZWNsQ29udGV4dCwwKTtcbn07XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLmdvcGxpc3QgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KEdvcGxpc3RDb250ZXh0LDApO1xufTtcblxuU3RhdGVtZW50Q29udGV4dC5wcm90b3R5cGUuSUQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUb2tlbihRQVNNUGFyc2VyLklELCAwKTtcbn07XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLmlkbGlzdCA9IGZ1bmN0aW9uKGkpIHtcbiAgICBpZihpPT09dW5kZWZpbmVkKSB7XG4gICAgICAgIGkgPSBudWxsO1xuICAgIH1cbiAgICBpZihpPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0cyhJZGxpc3RDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KElkbGlzdENvbnRleHQsaSk7XG4gICAgfVxufTtcblxuU3RhdGVtZW50Q29udGV4dC5wcm90b3R5cGUucW9wID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChRb3BDb250ZXh0LDApO1xufTtcblxuU3RhdGVtZW50Q29udGV4dC5wcm90b3R5cGUuSU5UID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW4oUUFTTVBhcnNlci5JTlQsIDApO1xufTtcblxuU3RhdGVtZW50Q29udGV4dC5wcm90b3R5cGUuYW55bGlzdCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHQoQW55bGlzdENvbnRleHQsMCk7XG59O1xuXG5TdGF0ZW1lbnRDb250ZXh0LnByb3RvdHlwZS5pbmNsdWRlID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChJbmNsdWRlQ29udGV4dCwwKTtcbn07XG5cblN0YXRlbWVudENvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmVudGVyU3RhdGVtZW50KHRoaXMpO1xuXHR9XG59O1xuXG5TdGF0ZW1lbnRDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRTdGF0ZW1lbnQodGhpcyk7XG5cdH1cbn07XG5cblxuXG5cblFBU01QYXJzZXIuU3RhdGVtZW50Q29udGV4dCA9IFN0YXRlbWVudENvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLnN0YXRlbWVudCA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIGxvY2FsY3R4ID0gbmV3IFN0YXRlbWVudENvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgMiwgUUFTTVBhcnNlci5SVUxFX3N0YXRlbWVudCk7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDg0O1xuICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgIHZhciBsYV8gPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDEsdGhpcy5fY3R4KTtcbiAgICAgICAgc3dpdGNoKGxhXykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDQzO1xuICAgICAgICAgICAgdGhpcy5kZWNsKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDIpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDQ0O1xuICAgICAgICAgICAgdGhpcy5nYXRlZGVjbCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDQ1O1xuICAgICAgICAgICAgdGhpcy5nb3BsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNDY7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDMpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDQ4O1xuICAgICAgICAgICAgdGhpcy5nYXRlZGVjbCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDQ5O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzApO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCA0KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA1MTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA1MjtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNTM7XG4gICAgICAgICAgICB0aGlzLmlkbGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDU0O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCA1KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA1NjtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA1NztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNTg7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNTk7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNjA7XG4gICAgICAgICAgICB0aGlzLmlkbGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDYxO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCA2KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA2MztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA2NDtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNjU7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNjY7XG4gICAgICAgICAgICB0aGlzLmlkbGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDY3O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDY4O1xuICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA2OTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgNyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNzE7XG4gICAgICAgICAgICB0aGlzLnFvcCgpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCA4KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA3MjtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX181KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA3MztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18zKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA3NDtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNzU7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gNzY7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSU5UKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA3NztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX180KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA3ODtcbiAgICAgICAgICAgIHRoaXMucW9wKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDkpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDc5O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzcpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDgwO1xuICAgICAgICAgICAgdGhpcy5hbnlsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gODE7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxMCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gODM7XG4gICAgICAgICAgICB0aGlzLmluY2x1ZGUoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBWZXJzaW9uQ29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX3ZlcnNpb247XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblZlcnNpb25Db250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5WZXJzaW9uQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBWZXJzaW9uQ29udGV4dDtcblxuVmVyc2lvbkNvbnRleHQucHJvdG90eXBlLlJFQUwgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUb2tlbihRQVNNUGFyc2VyLlJFQUwsIDApO1xufTtcblxuVmVyc2lvbkNvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmVudGVyVmVyc2lvbih0aGlzKTtcblx0fVxufTtcblxuVmVyc2lvbkNvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdFZlcnNpb24odGhpcyk7XG5cdH1cbn07XG5cblxuXG5cblFBU01QYXJzZXIuVmVyc2lvbkNvbnRleHQgPSBWZXJzaW9uQ29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUudmVyc2lvbiA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIGxvY2FsY3R4ID0gbmV3IFZlcnNpb25Db250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDQsIFFBU01QYXJzZXIuUlVMRV92ZXJzaW9uKTtcbiAgICB0cnkge1xuICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gODY7XG4gICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX184KTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDg3O1xuICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuUkVBTCk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSA4ODtcbiAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgIH0gY2F0Y2ggKHJlKSB7XG4gICAgXHRpZihyZSBpbnN0YW5jZW9mIGFudGxyNC5lcnJvci5SZWNvZ25pdGlvbkV4Y2VwdGlvbikge1xuXHQgICAgICAgIGxvY2FsY3R4LmV4Y2VwdGlvbiA9IHJlO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgXHR0aHJvdyByZTtcblx0ICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmV4aXRSdWxlKCk7XG4gICAgfVxuICAgIHJldHVybiBsb2NhbGN0eDtcbn07XG5cbmZ1bmN0aW9uIEluY2x1ZGVDb250ZXh0KHBhcnNlciwgcGFyZW50LCBpbnZva2luZ1N0YXRlKSB7XG5cdGlmKHBhcmVudD09PXVuZGVmaW5lZCkge1xuXHQgICAgcGFyZW50ID0gbnVsbDtcblx0fVxuXHRpZihpbnZva2luZ1N0YXRlPT09dW5kZWZpbmVkIHx8IGludm9raW5nU3RhdGU9PT1udWxsKSB7XG5cdFx0aW52b2tpbmdTdGF0ZSA9IC0xO1xuXHR9XG5cdGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5jYWxsKHRoaXMsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBRQVNNUGFyc2VyLlJVTEVfaW5jbHVkZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuSW5jbHVkZUNvbnRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlKTtcbkluY2x1ZGVDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEluY2x1ZGVDb250ZXh0O1xuXG5JbmNsdWRlQ29udGV4dC5wcm90b3R5cGUuZmlsZW5hbWUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KEZpbGVuYW1lQ29udGV4dCwwKTtcbn07XG5cbkluY2x1ZGVDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlckluY2x1ZGUodGhpcyk7XG5cdH1cbn07XG5cbkluY2x1ZGVDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRJbmNsdWRlKHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLkluY2x1ZGVDb250ZXh0ID0gSW5jbHVkZUNvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLmluY2x1ZGUgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBJbmNsdWRlQ29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCA2LCBRQVNNUGFyc2VyLlJVTEVfaW5jbHVkZSk7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDkwO1xuICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fOSk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSA5MTtcbiAgICAgICAgdGhpcy5maWxlbmFtZSgpO1xuICAgICAgICB0aGlzLnN0YXRlID0gOTI7XG4gICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yKTtcbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBGaWxlbmFtZUNvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV9maWxlbmFtZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuRmlsZW5hbWVDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5GaWxlbmFtZUNvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRmlsZW5hbWVDb250ZXh0O1xuXG5GaWxlbmFtZUNvbnRleHQucHJvdG90eXBlLkZJTEVOQU1FID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW4oUUFTTVBhcnNlci5GSUxFTkFNRSwgMCk7XG59O1xuXG5GaWxlbmFtZUNvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmVudGVyRmlsZW5hbWUodGhpcyk7XG5cdH1cbn07XG5cbkZpbGVuYW1lQ29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0RmlsZW5hbWUodGhpcyk7XG5cdH1cbn07XG5cblxuXG5cblFBU01QYXJzZXIuRmlsZW5hbWVDb250ZXh0ID0gRmlsZW5hbWVDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5maWxlbmFtZSA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIGxvY2FsY3R4ID0gbmV3IEZpbGVuYW1lQ29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCA4LCBRQVNNUGFyc2VyLlJVTEVfZmlsZW5hbWUpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSA5NDtcbiAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLkZJTEVOQU1FKTtcbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBEZWNsQ29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX2RlY2w7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkRlY2xDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5EZWNsQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEZWNsQ29udGV4dDtcblxuRGVjbENvbnRleHQucHJvdG90eXBlLklEID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW4oUUFTTVBhcnNlci5JRCwgMCk7XG59O1xuXG5EZWNsQ29udGV4dC5wcm90b3R5cGUuSU5UID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW4oUUFTTVBhcnNlci5JTlQsIDApO1xufTtcblxuRGVjbENvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmVudGVyRGVjbCh0aGlzKTtcblx0fVxufTtcblxuRGVjbENvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdERlY2wodGhpcyk7XG5cdH1cbn07XG5cblxuXG5cblFBU01QYXJzZXIuRGVjbENvbnRleHQgPSBEZWNsQ29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuZGVjbCA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIGxvY2FsY3R4ID0gbmV3IERlY2xDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDEwLCBRQVNNUGFyc2VyLlJVTEVfZGVjbCk7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDEwODtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICBzd2l0Y2godGhpcy5faW5wdXQuTEEoMSkpIHtcbiAgICAgICAgY2FzZSBRQVNNUGFyc2VyLlRfXzEwOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA5NjtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gOTc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDk4O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzExKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSA5OTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JTlQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEwMDtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTAxO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgUUFTTVBhcnNlci5UX18xMzpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTAyO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzEzKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMDM7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEwNDtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTA1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklOVCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTA2O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzEyKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMDc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBhbnRscjQuZXJyb3IuTm9WaWFibGVBbHRFeGNlcHRpb24odGhpcyk7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBHYXRlZGVjbENvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV9nYXRlZGVjbDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuR2F0ZWRlY2xDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5HYXRlZGVjbENvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gR2F0ZWRlY2xDb250ZXh0O1xuXG5HYXRlZGVjbENvbnRleHQucHJvdG90eXBlLklEID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW4oUUFTTVBhcnNlci5JRCwgMCk7XG59O1xuXG5HYXRlZGVjbENvbnRleHQucHJvdG90eXBlLmlkbGlzdCA9IGZ1bmN0aW9uKGkpIHtcbiAgICBpZihpPT09dW5kZWZpbmVkKSB7XG4gICAgICAgIGkgPSBudWxsO1xuICAgIH1cbiAgICBpZihpPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0cyhJZGxpc3RDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KElkbGlzdENvbnRleHQsaSk7XG4gICAgfVxufTtcblxuR2F0ZWRlY2xDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlckdhdGVkZWNsKHRoaXMpO1xuXHR9XG59O1xuXG5HYXRlZGVjbENvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdEdhdGVkZWNsKHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLkdhdGVkZWNsQ29udGV4dCA9IEdhdGVkZWNsQ29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuZ2F0ZWRlY2wgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBHYXRlZGVjbENvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgMTIsIFFBU01QYXJzZXIuUlVMRV9nYXRlZGVjbCk7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDEzMDtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICB2YXIgbGFfID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwzLHRoaXMuX2N0eCk7XG4gICAgICAgIHN3aXRjaChsYV8pIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMTA7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDExMTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTEyO1xuICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMTM7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAyKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMTU7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDExNjtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTE3O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzMpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDExODtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX180KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMTk7XG4gICAgICAgICAgICB0aGlzLmlkbGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEyMDtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xNSk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDMpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEyMjtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTIzO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMjQ7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTI1O1xuICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMjY7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTI3O1xuICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMjg7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTUpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKHJlKSB7XG4gICAgXHRpZihyZSBpbnN0YW5jZW9mIGFudGxyNC5lcnJvci5SZWNvZ25pdGlvbkV4Y2VwdGlvbikge1xuXHQgICAgICAgIGxvY2FsY3R4LmV4Y2VwdGlvbiA9IHJlO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgXHR0aHJvdyByZTtcblx0ICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmV4aXRSdWxlKCk7XG4gICAgfVxuICAgIHJldHVybiBsb2NhbGN0eDtcbn07XG5cbmZ1bmN0aW9uIEdvcGxpc3RDb250ZXh0KHBhcnNlciwgcGFyZW50LCBpbnZva2luZ1N0YXRlKSB7XG5cdGlmKHBhcmVudD09PXVuZGVmaW5lZCkge1xuXHQgICAgcGFyZW50ID0gbnVsbDtcblx0fVxuXHRpZihpbnZva2luZ1N0YXRlPT09dW5kZWZpbmVkIHx8IGludm9raW5nU3RhdGU9PT1udWxsKSB7XG5cdFx0aW52b2tpbmdTdGF0ZSA9IC0xO1xuXHR9XG5cdGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5jYWxsKHRoaXMsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBRQVNNUGFyc2VyLlJVTEVfZ29wbGlzdDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuR29wbGlzdENvbnRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlKTtcbkdvcGxpc3RDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEdvcGxpc3RDb250ZXh0O1xuXG5Hb3BsaXN0Q29udGV4dC5wcm90b3R5cGUudW9wID0gZnVuY3Rpb24oaSkge1xuICAgIGlmKGk9PT11bmRlZmluZWQpIHtcbiAgICAgICAgaSA9IG51bGw7XG4gICAgfVxuICAgIGlmKGk9PT1udWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHRzKFVvcENvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHQoVW9wQ29udGV4dCxpKTtcbiAgICB9XG59O1xuXG5Hb3BsaXN0Q29udGV4dC5wcm90b3R5cGUuaWRsaXN0ID0gZnVuY3Rpb24oaSkge1xuICAgIGlmKGk9PT11bmRlZmluZWQpIHtcbiAgICAgICAgaSA9IG51bGw7XG4gICAgfVxuICAgIGlmKGk9PT1udWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHRzKElkbGlzdENvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHQoSWRsaXN0Q29udGV4dCxpKTtcbiAgICB9XG59O1xuXG5Hb3BsaXN0Q29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJHb3BsaXN0KHRoaXMpO1xuXHR9XG59O1xuXG5Hb3BsaXN0Q29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0R29wbGlzdCh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5Hb3BsaXN0Q29udGV4dCA9IEdvcGxpc3RDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5nb3BsaXN0ID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgR29wbGlzdENvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgMTQsIFFBU01QYXJzZXIuUlVMRV9nb3BsaXN0KTtcbiAgICB2YXIgX2xhID0gMDsgLy8gVG9rZW4gdHlwZVxuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAxMzc7IFxuICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICBkbyB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTM3O1xuICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICAgICAgc3dpdGNoKHRoaXMuX2lucHV0LkxBKDEpKSB7XG4gICAgICAgICAgICBjYXNlIFFBU01QYXJzZXIuVF9fMTk6XG4gICAgICAgICAgICBjYXNlIFFBU01QYXJzZXIuVF9fMjA6XG4gICAgICAgICAgICBjYXNlIFFBU01QYXJzZXIuSUQ6XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEzMjtcbiAgICAgICAgICAgICAgICB0aGlzLnVvcCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBRQVNNUGFyc2VyLlRfXzc6XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEzMztcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEzNDtcbiAgICAgICAgICAgICAgICB0aGlzLmlkbGlzdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxMzU7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgYW50bHI0LmVycm9yLk5vVmlhYmxlQWx0RXhjZXB0aW9uKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDEzOTsgXG4gICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgfSB3aGlsZSgoKCgoX2xhIC0gOCkpICYgfjB4MWYpID09IDAgJiYgKCgxIDw8IChfbGEgLSA4KSkgJiAoKDEgPDwgKFFBU01QYXJzZXIuVF9fNyAtIDgpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlRfXzE5IC0gOCkpIHwgKDEgPDwgKFFBU01QYXJzZXIuVF9fMjAgLSA4KSkgfCAoMSA8PCAoUUFTTVBhcnNlci5JRCAtIDgpKSkpICE9PSAwKSk7XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gUW9wQ29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX3FvcDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuUW9wQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuUW9wQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBRb3BDb250ZXh0O1xuXG5Rb3BDb250ZXh0LnByb3RvdHlwZS51b3AgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KFVvcENvbnRleHQsMCk7XG59O1xuXG5Rb3BDb250ZXh0LnByb3RvdHlwZS5hcmd1bWVudCA9IGZ1bmN0aW9uKGkpIHtcbiAgICBpZihpPT09dW5kZWZpbmVkKSB7XG4gICAgICAgIGkgPSBudWxsO1xuICAgIH1cbiAgICBpZihpPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0cyhBcmd1bWVudENvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHQoQXJndW1lbnRDb250ZXh0LGkpO1xuICAgIH1cbn07XG5cblFvcENvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmVudGVyUW9wKHRoaXMpO1xuXHR9XG59O1xuXG5Rb3BDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRRb3AodGhpcyk7XG5cdH1cbn07XG5cblxuXG5cblFBU01QYXJzZXIuUW9wQ29udGV4dCA9IFFvcENvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLnFvcCA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIGxvY2FsY3R4ID0gbmV3IFFvcENvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgMTYsIFFBU01QYXJzZXIuUlVMRV9xb3ApO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAxNTI7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgc3dpdGNoKHRoaXMuX2lucHV0LkxBKDEpKSB7XG4gICAgICAgIGNhc2UgUUFTTVBhcnNlci5UX18xOTpcbiAgICAgICAgY2FzZSBRQVNNUGFyc2VyLlRfXzIwOlxuICAgICAgICBjYXNlIFFBU01QYXJzZXIuSUQ6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE0MTtcbiAgICAgICAgICAgIHRoaXMudW9wKCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBRQVNNUGFyc2VyLlRfXzE2OlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAyKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNDI7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTYpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE0MztcbiAgICAgICAgICAgIHRoaXMuYXJndW1lbnQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNDQ7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTcpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE0NTtcbiAgICAgICAgICAgIHRoaXMuYXJndW1lbnQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNDY7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBRQVNNUGFyc2VyLlRfXzE4OlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAzKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNDg7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE0OTtcbiAgICAgICAgICAgIHRoaXMuYXJndW1lbnQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNTA7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBhbnRscjQuZXJyb3IuTm9WaWFibGVBbHRFeGNlcHRpb24odGhpcyk7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBVb3BDb250ZXh0KHBhcnNlciwgcGFyZW50LCBpbnZva2luZ1N0YXRlKSB7XG5cdGlmKHBhcmVudD09PXVuZGVmaW5lZCkge1xuXHQgICAgcGFyZW50ID0gbnVsbDtcblx0fVxuXHRpZihpbnZva2luZ1N0YXRlPT09dW5kZWZpbmVkIHx8IGludm9raW5nU3RhdGU9PT1udWxsKSB7XG5cdFx0aW52b2tpbmdTdGF0ZSA9IC0xO1xuXHR9XG5cdGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5jYWxsKHRoaXMsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBRQVNNUGFyc2VyLlJVTEVfdW9wO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5Vb3BDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5Vb3BDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFVvcENvbnRleHQ7XG5cblVvcENvbnRleHQucHJvdG90eXBlLmV4cGxpc3QgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KEV4cGxpc3RDb250ZXh0LDApO1xufTtcblxuVW9wQ29udGV4dC5wcm90b3R5cGUuYXJndW1lbnQgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYoaT09PXVuZGVmaW5lZCkge1xuICAgICAgICBpID0gbnVsbDtcbiAgICB9XG4gICAgaWYoaT09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dHMoQXJndW1lbnRDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KEFyZ3VtZW50Q29udGV4dCxpKTtcbiAgICB9XG59O1xuXG5Vb3BDb250ZXh0LnByb3RvdHlwZS5JRCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSUQsIDApO1xufTtcblxuVW9wQ29udGV4dC5wcm90b3R5cGUuYW55bGlzdCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHQoQW55bGlzdENvbnRleHQsMCk7XG59O1xuXG5Vb3BDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlclVvcCh0aGlzKTtcblx0fVxufTtcblxuVW9wQ29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0VW9wKHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLlVvcENvbnRleHQgPSBVb3BDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS51b3AgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBVb3BDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDE4LCBRQVNNUGFyc2VyLlJVTEVfdW9wKTtcbiAgICB0cnkge1xuICAgICAgICB0aGlzLnN0YXRlID0gMTg0O1xuICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgIHZhciBsYV8gPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDcsdGhpcy5fY3R4KTtcbiAgICAgICAgc3dpdGNoKGxhXykge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE1NDtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xOSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTU1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzMpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE1NjtcbiAgICAgICAgICAgIHRoaXMuZXhwbGlzdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE1NztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX180KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNTg7XG4gICAgICAgICAgICB0aGlzLmFyZ3VtZW50KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTU5O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAyKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNjE7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMjApO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE2MjtcbiAgICAgICAgICAgIHRoaXMuYXJndW1lbnQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNjM7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMjEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE2NDtcbiAgICAgICAgICAgIHRoaXMuYXJndW1lbnQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNjU7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDMpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE2NztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTY4O1xuICAgICAgICAgICAgdGhpcy5hbnlsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTY5O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCA0KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNzE7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE3MjtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18zKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNzM7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTc0O1xuICAgICAgICAgICAgdGhpcy5hbnlsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTc1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCA1KTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNzc7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE3ODtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18zKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxNzk7XG4gICAgICAgICAgICB0aGlzLmV4cGxpc3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxODA7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTgxO1xuICAgICAgICAgICAgdGhpcy5hbnlsaXN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTgyO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKHJlKSB7XG4gICAgXHRpZihyZSBpbnN0YW5jZW9mIGFudGxyNC5lcnJvci5SZWNvZ25pdGlvbkV4Y2VwdGlvbikge1xuXHQgICAgICAgIGxvY2FsY3R4LmV4Y2VwdGlvbiA9IHJlO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgXHR0aHJvdyByZTtcblx0ICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmV4aXRSdWxlKCk7XG4gICAgfVxuICAgIHJldHVybiBsb2NhbGN0eDtcbn07XG5cbmZ1bmN0aW9uIEFueWxpc3RDb250ZXh0KHBhcnNlciwgcGFyZW50LCBpbnZva2luZ1N0YXRlKSB7XG5cdGlmKHBhcmVudD09PXVuZGVmaW5lZCkge1xuXHQgICAgcGFyZW50ID0gbnVsbDtcblx0fVxuXHRpZihpbnZva2luZ1N0YXRlPT09dW5kZWZpbmVkIHx8IGludm9raW5nU3RhdGU9PT1udWxsKSB7XG5cdFx0aW52b2tpbmdTdGF0ZSA9IC0xO1xuXHR9XG5cdGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5jYWxsKHRoaXMsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBRQVNNUGFyc2VyLlJVTEVfYW55bGlzdDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuQW55bGlzdENvbnRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlKTtcbkFueWxpc3RDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFueWxpc3RDb250ZXh0O1xuXG5BbnlsaXN0Q29udGV4dC5wcm90b3R5cGUuaWRsaXN0ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChJZGxpc3RDb250ZXh0LDApO1xufTtcblxuQW55bGlzdENvbnRleHQucHJvdG90eXBlLm1peGVkbGlzdCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHQoTWl4ZWRsaXN0Q29udGV4dCwwKTtcbn07XG5cbkFueWxpc3RDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlckFueWxpc3QodGhpcyk7XG5cdH1cbn07XG5cbkFueWxpc3RDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRBbnlsaXN0KHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLkFueWxpc3RDb250ZXh0ID0gQW55bGlzdENvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLmFueWxpc3QgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBBbnlsaXN0Q29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCAyMCwgUUFTTVBhcnNlci5SVUxFX2FueWxpc3QpO1xuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAxODg7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgdmFyIGxhXyA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsOCx0aGlzLl9jdHgpO1xuICAgICAgICBzd2l0Y2gobGFfKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTg2O1xuICAgICAgICAgICAgdGhpcy5pZGxpc3QoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTg3O1xuICAgICAgICAgICAgdGhpcy5taXhlZGxpc3QoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBJZGxpc3RDb250ZXh0KHBhcnNlciwgcGFyZW50LCBpbnZva2luZ1N0YXRlKSB7XG5cdGlmKHBhcmVudD09PXVuZGVmaW5lZCkge1xuXHQgICAgcGFyZW50ID0gbnVsbDtcblx0fVxuXHRpZihpbnZva2luZ1N0YXRlPT09dW5kZWZpbmVkIHx8IGludm9raW5nU3RhdGU9PT1udWxsKSB7XG5cdFx0aW52b2tpbmdTdGF0ZSA9IC0xO1xuXHR9XG5cdGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5jYWxsKHRoaXMsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBRQVNNUGFyc2VyLlJVTEVfaWRsaXN0O1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5JZGxpc3RDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5JZGxpc3RDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IElkbGlzdENvbnRleHQ7XG5cbklkbGlzdENvbnRleHQucHJvdG90eXBlLklEID0gZnVuY3Rpb24oaSkge1xuXHRpZihpPT09dW5kZWZpbmVkKSB7XG5cdFx0aSA9IG51bGw7XG5cdH1cbiAgICBpZihpPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUb2tlbnMoUUFTTVBhcnNlci5JRCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW4oUUFTTVBhcnNlci5JRCwgaSk7XG4gICAgfVxufTtcblxuXG5JZGxpc3RDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlcklkbGlzdCh0aGlzKTtcblx0fVxufTtcblxuSWRsaXN0Q29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0SWRsaXN0KHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLklkbGlzdENvbnRleHQgPSBJZGxpc3RDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5pZGxpc3QgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBJZGxpc3RDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDIyLCBRQVNNUGFyc2VyLlJVTEVfaWRsaXN0KTtcbiAgICB0cnkge1xuICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gMTk0O1xuICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgIHZhciBfYWx0ID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCw5LHRoaXMuX2N0eClcbiAgICAgICAgd2hpbGUoX2FsdCE9MiAmJiBfYWx0IT1hbnRscjQuYXRuLkFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgICAgIGlmKF9hbHQ9PT0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE5MDtcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAxOTE7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIxKTsgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMTk2O1xuICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICAgICAgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsOSx0aGlzLl9jdHgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zdGF0ZSA9IDE5NztcbiAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBNaXhlZGxpc3RDb250ZXh0KHBhcnNlciwgcGFyZW50LCBpbnZva2luZ1N0YXRlKSB7XG5cdGlmKHBhcmVudD09PXVuZGVmaW5lZCkge1xuXHQgICAgcGFyZW50ID0gbnVsbDtcblx0fVxuXHRpZihpbnZva2luZ1N0YXRlPT09dW5kZWZpbmVkIHx8IGludm9raW5nU3RhdGU9PT1udWxsKSB7XG5cdFx0aW52b2tpbmdTdGF0ZSA9IC0xO1xuXHR9XG5cdGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5jYWxsKHRoaXMsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBRQVNNUGFyc2VyLlJVTEVfbWl4ZWRsaXN0O1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5NaXhlZGxpc3RDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5NaXhlZGxpc3RDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IE1peGVkbGlzdENvbnRleHQ7XG5cbk1peGVkbGlzdENvbnRleHQucHJvdG90eXBlLklEID0gZnVuY3Rpb24oaSkge1xuXHRpZihpPT09dW5kZWZpbmVkKSB7XG5cdFx0aSA9IG51bGw7XG5cdH1cbiAgICBpZihpPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUb2tlbnMoUUFTTVBhcnNlci5JRCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW4oUUFTTVBhcnNlci5JRCwgaSk7XG4gICAgfVxufTtcblxuXG5NaXhlZGxpc3RDb250ZXh0LnByb3RvdHlwZS5JTlQgPSBmdW5jdGlvbihpKSB7XG5cdGlmKGk9PT11bmRlZmluZWQpIHtcblx0XHRpID0gbnVsbDtcblx0fVxuICAgIGlmKGk9PT1udWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFRva2VucyhRQVNNUGFyc2VyLklOVCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW4oUUFTTVBhcnNlci5JTlQsIGkpO1xuICAgIH1cbn07XG5cblxuTWl4ZWRsaXN0Q29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJNaXhlZGxpc3QodGhpcyk7XG5cdH1cbn07XG5cbk1peGVkbGlzdENvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdE1peGVkbGlzdCh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5NaXhlZGxpc3RDb250ZXh0ID0gTWl4ZWRsaXN0Q29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUubWl4ZWRsaXN0ID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgTWl4ZWRsaXN0Q29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCAyNCwgUUFTTVBhcnNlci5SVUxFX21peGVkbGlzdCk7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDI0MjtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICB2YXIgbGFfID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxNCx0aGlzLl9jdHgpO1xuICAgICAgICBzd2l0Y2gobGFfKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjA2O1xuICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICAgICAgdmFyIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDEwLHRoaXMuX2N0eClcbiAgICAgICAgICAgIHdoaWxlKF9hbHQhPTIgJiYgX2FsdCE9YW50bHI0LmF0bi5BVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICAgICAgaWYoX2FsdD09PTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDE5OTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIwMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzExKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIwMTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklOVCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMDI7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMDM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yMSk7IFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjA4O1xuICAgICAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgICAgICBfYWx0ID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxMCx0aGlzLl9jdHgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjA5O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMik7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjE3O1xuICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICAgICAgdmFyIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDExLHRoaXMuX2N0eClcbiAgICAgICAgICAgIHdoaWxlKF9hbHQhPTIgJiYgX2FsdCE9YW50bHI0LmF0bi5BVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICAgICAgaWYoX2FsdD09PTEpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIxMDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIxMTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzExKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIxMjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklOVCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMTM7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMTQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yMSk7IFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjE5O1xuICAgICAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgICAgICBfYWx0ID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxMSx0aGlzLl9jdHgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjIwO1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMjE7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIyMjtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JTlQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIyMztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDMpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIzNTtcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIHZhciBfYWx0ID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxMyx0aGlzLl9jdHgpXG4gICAgICAgICAgICB3aGlsZShfYWx0IT0yICYmIF9hbHQhPWFudGxyNC5hdG4uQVROLklOVkFMSURfQUxUX05VTUJFUikge1xuICAgICAgICAgICAgICAgIGlmKF9hbHQ9PT0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMjg7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDEyLHRoaXMuX2N0eClcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUoX2FsdCE9MiAmJiBfYWx0IT1hbnRscjQuYXRuLkFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKF9hbHQ9PT0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDIyNDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMjU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIxKTsgXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjMwO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMTIsdGhpcy5fY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMzE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JRCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMzI7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18yMSk7IFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjM3O1xuICAgICAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgICAgICBfYWx0ID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwxMyx0aGlzLl9jdHgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjM4O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklEKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyMzk7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fMTEpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI0MDtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5JTlQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI0MTtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMik7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuZnVuY3Rpb24gQXJndW1lbnRDb250ZXh0KHBhcnNlciwgcGFyZW50LCBpbnZva2luZ1N0YXRlKSB7XG5cdGlmKHBhcmVudD09PXVuZGVmaW5lZCkge1xuXHQgICAgcGFyZW50ID0gbnVsbDtcblx0fVxuXHRpZihpbnZva2luZ1N0YXRlPT09dW5kZWZpbmVkIHx8IGludm9raW5nU3RhdGU9PT1udWxsKSB7XG5cdFx0aW52b2tpbmdTdGF0ZSA9IC0xO1xuXHR9XG5cdGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5jYWxsKHRoaXMsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBRQVNNUGFyc2VyLlJVTEVfYXJndW1lbnQ7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkFyZ3VtZW50Q29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUpO1xuQXJndW1lbnRDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEFyZ3VtZW50Q29udGV4dDtcblxuQXJndW1lbnRDb250ZXh0LnByb3RvdHlwZS5JRCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSUQsIDApO1xufTtcblxuQXJndW1lbnRDb250ZXh0LnByb3RvdHlwZS5JTlQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUb2tlbihRQVNNUGFyc2VyLklOVCwgMCk7XG59O1xuXG5Bcmd1bWVudENvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmVudGVyQXJndW1lbnQodGhpcyk7XG5cdH1cbn07XG5cbkFyZ3VtZW50Q29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0QXJndW1lbnQodGhpcyk7XG5cdH1cbn07XG5cblxuXG5cblFBU01QYXJzZXIuQXJndW1lbnRDb250ZXh0ID0gQXJndW1lbnRDb250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5hcmd1bWVudCA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIGxvY2FsY3R4ID0gbmV3IEFyZ3VtZW50Q29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCAyNiwgUUFTTVBhcnNlci5SVUxFX2FyZ3VtZW50KTtcbiAgICB0cnkge1xuICAgICAgICB0aGlzLnN0YXRlID0gMjQ5O1xuICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgIHZhciBsYV8gPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDE1LHRoaXMuX2N0eCk7XG4gICAgICAgIHN3aXRjaChsYV8pIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNDQ7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAyKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNDU7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuSUQpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI0NjtcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18xMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjQ3O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLklOVCk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjQ4O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzEyKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChyZSkge1xuICAgIFx0aWYocmUgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSByZTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIHJlKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgcmUpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgcmU7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy5leGl0UnVsZSgpO1xuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBFeHBsaXN0Q29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX2V4cGxpc3Q7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkV4cGxpc3RDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5FeHBsaXN0Q29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFeHBsaXN0Q29udGV4dDtcblxuRXhwbGlzdENvbnRleHQucHJvdG90eXBlLmV4cCA9IGZ1bmN0aW9uKGkpIHtcbiAgICBpZihpPT09dW5kZWZpbmVkKSB7XG4gICAgICAgIGkgPSBudWxsO1xuICAgIH1cbiAgICBpZihpPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0cyhFeHBDb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KEV4cENvbnRleHQsaSk7XG4gICAgfVxufTtcblxuRXhwbGlzdENvbnRleHQucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmVudGVyRXhwbGlzdCh0aGlzKTtcblx0fVxufTtcblxuRXhwbGlzdENvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdEV4cGxpc3QodGhpcyk7XG5cdH1cbn07XG5cblxuXG5cblFBU01QYXJzZXIuRXhwbGlzdENvbnRleHQgPSBFeHBsaXN0Q29udGV4dDtcblxuUUFTTVBhcnNlci5wcm90b3R5cGUuZXhwbGlzdCA9IGZ1bmN0aW9uKCkge1xuXG4gICAgdmFyIGxvY2FsY3R4ID0gbmV3IEV4cGxpc3RDb250ZXh0KHRoaXMsIHRoaXMuX2N0eCwgdGhpcy5zdGF0ZSk7XG4gICAgdGhpcy5lbnRlclJ1bGUobG9jYWxjdHgsIDI4LCBRQVNNUGFyc2VyLlJVTEVfZXhwbGlzdCk7XG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDI1NjtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICB2YXIgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMTYsdGhpcy5fY3R4KVxuICAgICAgICB3aGlsZShfYWx0IT0yICYmIF9hbHQhPWFudGxyNC5hdG4uQVROLklOVkFMSURfQUxUX05VTUJFUikge1xuICAgICAgICAgICAgaWYoX2FsdD09PTEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjUxO1xuICAgICAgICAgICAgICAgIHRoaXMuZXhwKDApO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNTI7XG4gICAgICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIxKTsgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjU4O1xuICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICAgICAgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMTYsdGhpcy5fY3R4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhdGUgPSAyNTk7XG4gICAgICAgIHRoaXMuZXhwKDApO1xuICAgIH0gY2F0Y2ggKHJlKSB7XG4gICAgXHRpZihyZSBpbnN0YW5jZW9mIGFudGxyNC5lcnJvci5SZWNvZ25pdGlvbkV4Y2VwdGlvbikge1xuXHQgICAgICAgIGxvY2FsY3R4LmV4Y2VwdGlvbiA9IHJlO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgXHR0aHJvdyByZTtcblx0ICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmV4aXRSdWxlKCk7XG4gICAgfVxuICAgIHJldHVybiBsb2NhbGN0eDtcbn07XG5cbmZ1bmN0aW9uIEV4cENvbnRleHQocGFyc2VyLCBwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0aWYocGFyZW50PT09dW5kZWZpbmVkKSB7XG5cdCAgICBwYXJlbnQgPSBudWxsO1xuXHR9XG5cdGlmKGludm9raW5nU3RhdGU9PT11bmRlZmluZWQgfHwgaW52b2tpbmdTdGF0ZT09PW51bGwpIHtcblx0XHRpbnZva2luZ1N0YXRlID0gLTE7XG5cdH1cblx0YW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LmNhbGwodGhpcywgcGFyZW50LCBpbnZva2luZ1N0YXRlKTtcbiAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IFFBU01QYXJzZXIuUlVMRV9leHA7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkV4cENvbnRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlKTtcbkV4cENvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRXhwQ29udGV4dDtcblxuRXhwQ29udGV4dC5wcm90b3R5cGUuZXhwID0gZnVuY3Rpb24oaSkge1xuICAgIGlmKGk9PT11bmRlZmluZWQpIHtcbiAgICAgICAgaSA9IG51bGw7XG4gICAgfVxuICAgIGlmKGk9PT1udWxsKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHRzKEV4cENvbnRleHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldFR5cGVkUnVsZUNvbnRleHQoRXhwQ29udGV4dCxpKTtcbiAgICB9XG59O1xuXG5FeHBDb250ZXh0LnByb3RvdHlwZS51bmFyeW9wID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VHlwZWRSdWxlQ29udGV4dChVbmFyeW9wQ29udGV4dCwwKTtcbn07XG5cbkV4cENvbnRleHQucHJvdG90eXBlLmF0b20gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRUeXBlZFJ1bGVDb250ZXh0KEF0b21Db250ZXh0LDApO1xufTtcblxuRXhwQ29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJFeHAodGhpcyk7XG5cdH1cbn07XG5cbkV4cENvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZXhpdEV4cCh0aGlzKTtcblx0fVxufTtcblxuXG5cblFBU01QYXJzZXIucHJvdG90eXBlLmV4cCA9IGZ1bmN0aW9uKF9wKSB7XG5cdGlmKF9wPT09dW5kZWZpbmVkKSB7XG5cdCAgICBfcCA9IDA7XG5cdH1cbiAgICB2YXIgX3BhcmVudGN0eCA9IHRoaXMuX2N0eDtcbiAgICB2YXIgX3BhcmVudFN0YXRlID0gdGhpcy5zdGF0ZTtcbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgRXhwQ29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIF9wYXJlbnRTdGF0ZSk7XG4gICAgdmFyIF9wcmV2Y3R4ID0gbG9jYWxjdHg7XG4gICAgdmFyIF9zdGFydFN0YXRlID0gMzA7XG4gICAgdGhpcy5lbnRlclJlY3Vyc2lvblJ1bGUobG9jYWxjdHgsIDMwLCBRQVNNUGFyc2VyLlJVTEVfZXhwLCBfcCk7XG4gICAgdmFyIF9sYSA9IDA7IC8vIFRva2VuIHR5cGVcbiAgICB0cnkge1xuICAgICAgICB0aGlzLmVudGVyT3V0ZXJBbHQobG9jYWxjdHgsIDEpO1xuICAgICAgICB0aGlzLnN0YXRlID0gMjgxO1xuICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgIHZhciBsYV8gPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDIwLHRoaXMuX2N0eCk7XG4gICAgICAgIHN3aXRjaChsYV8pIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI2MztcbiAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICAgICAgaWYoX2xhPT09UUFTTVBhcnNlci5UX18yNSB8fCBfbGE9PT1RQVNNUGFyc2VyLlRfXzI2KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI2MjtcbiAgICAgICAgICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgICAgICAgICBpZighKF9sYT09PVFBU01QYXJzZXIuVF9fMjUgfHwgX2xhPT09UUFTTVBhcnNlci5UX18yNikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUodGhpcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIFx0dGhpcy5fZXJySGFuZGxlci5yZXBvcnRNYXRjaCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjY1O1xuICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzMpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI2NjtcbiAgICAgICAgICAgIHRoaXMuZXhwKDApO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI2NztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX180KTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNzA7XG4gICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnN5bmModGhpcyk7XG4gICAgICAgICAgICBfbGEgPSB0aGlzLl9pbnB1dC5MQSgxKTtcbiAgICAgICAgICAgIGlmKF9sYT09PVFBU01QYXJzZXIuVF9fMjUgfHwgX2xhPT09UUFTTVBhcnNlci5UX18yNikge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNjk7XG4gICAgICAgICAgICAgICAgX2xhID0gdGhpcy5faW5wdXQuTEEoMSk7XG4gICAgICAgICAgICAgICAgaWYoIShfbGE9PT1RQVNNUGFyc2VyLlRfXzI1IHx8IF9sYT09PVFBU01QYXJzZXIuVF9fMjYpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBcdHRoaXMuX2VyckhhbmRsZXIucmVwb3J0TWF0Y2godGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI3MjtcbiAgICAgICAgICAgIHRoaXMudW5hcnlvcCgpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI3MztcbiAgICAgICAgICAgIHRoaXMubWF0Y2goUUFTTVBhcnNlci5UX18zKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNzQ7XG4gICAgICAgICAgICB0aGlzLmV4cCgwKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyNzU7XG4gICAgICAgICAgICB0aGlzLm1hdGNoKFFBU01QYXJzZXIuVF9fNCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjc4O1xuICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICAgICAgX2xhID0gdGhpcy5faW5wdXQuTEEoMSk7XG4gICAgICAgICAgICBpZihfbGE9PT1RQVNNUGFyc2VyLlRfXzI1IHx8IF9sYT09PVFBU01QYXJzZXIuVF9fMjYpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjc3O1xuICAgICAgICAgICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICAgICAgICAgIGlmKCEoX2xhPT09UUFTTVBhcnNlci5UX18yNSB8fCBfbGE9PT1RQVNNUGFyc2VyLlRfXzI2KSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgXHR0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydE1hdGNoKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyODA7XG4gICAgICAgICAgICB0aGlzLmF0b20oKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3R4LnN0b3AgPSB0aGlzLl9pbnB1dC5MVCgtMSk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAyOTQ7XG4gICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgdmFyIF9hbHQgPSB0aGlzLl9pbnRlcnAuYWRhcHRpdmVQcmVkaWN0KHRoaXMuX2lucHV0LDIyLHRoaXMuX2N0eClcbiAgICAgICAgd2hpbGUoX2FsdCE9MiAmJiBfYWx0IT1hbnRscjQuYXRuLkFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgICAgIGlmKF9hbHQ9PT0xKSB7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5fcGFyc2VMaXN0ZW5lcnMhPT1udWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudHJpZ2dlckV4aXRSdWxlRXZlbnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX3ByZXZjdHggPSBsb2NhbGN0eDtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjkyO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VyckhhbmRsZXIuc3luYyh0aGlzKTtcbiAgICAgICAgICAgICAgICB2YXIgbGFfID0gdGhpcy5faW50ZXJwLmFkYXB0aXZlUHJlZGljdCh0aGlzLl9pbnB1dCwyMSx0aGlzLl9jdHgpO1xuICAgICAgICAgICAgICAgIHN3aXRjaChsYV8pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsY3R4ID0gbmV3IEV4cENvbnRleHQodGhpcywgX3BhcmVudGN0eCwgX3BhcmVudFN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoTmV3UmVjdXJzaW9uQ29udGV4dChsb2NhbGN0eCwgX3N0YXJ0U3RhdGUsIFFBU01QYXJzZXIuUlVMRV9leHApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjgzO1xuICAgICAgICAgICAgICAgICAgICBpZiAoISggdGhpcy5wcmVjcHJlZCh0aGlzLl9jdHgsIDYpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGFudGxyNC5lcnJvci5GYWlsZWRQcmVkaWNhdGVFeGNlcHRpb24odGhpcywgXCJ0aGlzLnByZWNwcmVkKHRoaXMuX2N0eCwgNilcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI4NDtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXRjaChRQVNNUGFyc2VyLlRfXzIyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI4NTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leHAoNyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBsb2NhbGN0eCA9IG5ldyBFeHBDb250ZXh0KHRoaXMsIF9wYXJlbnRjdHgsIF9wYXJlbnRTdGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHVzaE5ld1JlY3Vyc2lvbkNvbnRleHQobG9jYWxjdHgsIF9zdGFydFN0YXRlLCBRQVNNUGFyc2VyLlJVTEVfZXhwKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI4NjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEoIHRoaXMucHJlY3ByZWQodGhpcy5fY3R4LCA1KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBhbnRscjQuZXJyb3IuRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uKHRoaXMsIFwidGhpcy5wcmVjcHJlZCh0aGlzLl9jdHgsIDUpXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyODc7XG4gICAgICAgICAgICAgICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICAgICAgICAgICAgICBpZighKF9sYT09PVFBU01QYXJzZXIuVF9fMjMgfHwgX2xhPT09UUFTTVBhcnNlci5UX18yNCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBcdHRoaXMuX2VyckhhbmRsZXIucmVwb3J0TWF0Y2godGhpcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjg4O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4cCg2KTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsY3R4ID0gbmV3IEV4cENvbnRleHQodGhpcywgX3BhcmVudGN0eCwgX3BhcmVudFN0YXRlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdXNoTmV3UmVjdXJzaW9uQ29udGV4dChsb2NhbGN0eCwgX3N0YXJ0U3RhdGUsIFFBU01QYXJzZXIuUlVMRV9leHApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gMjg5O1xuICAgICAgICAgICAgICAgICAgICBpZiAoISggdGhpcy5wcmVjcHJlZCh0aGlzLl9jdHgsIDQpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGFudGxyNC5lcnJvci5GYWlsZWRQcmVkaWNhdGVFeGNlcHRpb24odGhpcywgXCJ0aGlzLnByZWNwcmVkKHRoaXMuX2N0eCwgNClcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IDI5MDtcbiAgICAgICAgICAgICAgICAgICAgX2xhID0gdGhpcy5faW5wdXQuTEEoMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmKCEoX2xhPT09UUFTTVBhcnNlci5UX18yNSB8fCBfbGE9PT1RQVNNUGFyc2VyLlRfXzI2KSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUodGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIFx0dGhpcy5fZXJySGFuZGxlci5yZXBvcnRNYXRjaCh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSAyOTE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwKDUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICAgIH0gXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gMjk2O1xuICAgICAgICAgICAgdGhpcy5fZXJySGFuZGxlci5zeW5jKHRoaXMpO1xuICAgICAgICAgICAgX2FsdCA9IHRoaXMuX2ludGVycC5hZGFwdGl2ZVByZWRpY3QodGhpcy5faW5wdXQsMjIsdGhpcy5fY3R4KTtcbiAgICAgICAgfVxuXG4gICAgfSBjYXRjaCggZXJyb3IpIHtcbiAgICAgICAgaWYoZXJyb3IgaW5zdGFuY2VvZiBhbnRscjQuZXJyb3IuUmVjb2duaXRpb25FeGNlcHRpb24pIHtcblx0ICAgICAgICBsb2NhbGN0eC5leGNlcHRpb24gPSBlcnJvcjtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydEVycm9yKHRoaXMsIGVycm9yKTtcblx0ICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXIodGhpcywgZXJyb3IpO1xuXHQgICAgfSBlbHNlIHtcblx0ICAgIFx0dGhyb3cgZXJyb3I7XG5cdCAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy51bnJvbGxSZWN1cnNpb25Db250ZXh0cyhfcGFyZW50Y3R4KVxuICAgIH1cbiAgICByZXR1cm4gbG9jYWxjdHg7XG59O1xuXG5mdW5jdGlvbiBBdG9tQ29udGV4dChwYXJzZXIsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSkge1xuXHRpZihwYXJlbnQ9PT11bmRlZmluZWQpIHtcblx0ICAgIHBhcmVudCA9IG51bGw7XG5cdH1cblx0aWYoaW52b2tpbmdTdGF0ZT09PXVuZGVmaW5lZCB8fCBpbnZva2luZ1N0YXRlPT09bnVsbCkge1xuXHRcdGludm9raW5nU3RhdGUgPSAtMTtcblx0fVxuXHRhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQuY2FsbCh0aGlzLCBwYXJlbnQsIGludm9raW5nU3RhdGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMucnVsZUluZGV4ID0gUUFTTVBhcnNlci5SVUxFX2F0b207XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkF0b21Db250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoYW50bHI0LlBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5BdG9tQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBdG9tQ29udGV4dDtcblxuQXRvbUNvbnRleHQucHJvdG90eXBlLklOVCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuSU5ULCAwKTtcbn07XG5cbkF0b21Db250ZXh0LnByb3RvdHlwZS5SRUFMID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW4oUUFTTVBhcnNlci5SRUFMLCAwKTtcbn07XG5cbkF0b21Db250ZXh0LnByb3RvdHlwZS5QSSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuKFFBU01QYXJzZXIuUEksIDApO1xufTtcblxuQXRvbUNvbnRleHQucHJvdG90eXBlLklEID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW4oUUFTTVBhcnNlci5JRCwgMCk7XG59O1xuXG5BdG9tQ29udGV4dC5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbiAgICBpZihsaXN0ZW5lciBpbnN0YW5jZW9mIFFBU01MaXN0ZW5lciApIHtcbiAgICAgICAgbGlzdGVuZXIuZW50ZXJBdG9tKHRoaXMpO1xuXHR9XG59O1xuXG5BdG9tQ29udGV4dC5wcm90b3R5cGUuZXhpdFJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5leGl0QXRvbSh0aGlzKTtcblx0fVxufTtcblxuXG5cblxuUUFTTVBhcnNlci5BdG9tQ29udGV4dCA9IEF0b21Db250ZXh0O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5hdG9tID0gZnVuY3Rpb24oKSB7XG5cbiAgICB2YXIgbG9jYWxjdHggPSBuZXcgQXRvbUNvbnRleHQodGhpcywgdGhpcy5fY3R4LCB0aGlzLnN0YXRlKTtcbiAgICB0aGlzLmVudGVyUnVsZShsb2NhbGN0eCwgMzIsIFFBU01QYXJzZXIuUlVMRV9hdG9tKTtcbiAgICB2YXIgX2xhID0gMDsgLy8gVG9rZW4gdHlwZVxuICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZW50ZXJPdXRlckFsdChsb2NhbGN0eCwgMSk7XG4gICAgICAgIHRoaXMuc3RhdGUgPSAyOTc7XG4gICAgICAgIF9sYSA9IHRoaXMuX2lucHV0LkxBKDEpO1xuICAgICAgICBpZighKCgoKChfbGEgLSAzNCkpICYgfjB4MWYpID09IDAgJiYgKCgxIDw8IChfbGEgLSAzNCkpICYgKCgxIDw8IChRQVNNUGFyc2VyLlBJIC0gMzQpKSB8ICgxIDw8IChRQVNNUGFyc2VyLlJFQUwgLSAzNCkpIHwgKDEgPDwgKFFBU01QYXJzZXIuSU5UIC0gMzQpKSB8ICgxIDw8IChRQVNNUGFyc2VyLklEIC0gMzQpKSkpICE9PSAwKSkpIHtcbiAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVySW5saW5lKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICBcdHRoaXMuX2VyckhhbmRsZXIucmVwb3J0TWF0Y2godGhpcyk7XG4gICAgICAgICAgICB0aGlzLmNvbnN1bWUoKTtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKHJlKSB7XG4gICAgXHRpZihyZSBpbnN0YW5jZW9mIGFudGxyNC5lcnJvci5SZWNvZ25pdGlvbkV4Y2VwdGlvbikge1xuXHQgICAgICAgIGxvY2FsY3R4LmV4Y2VwdGlvbiA9IHJlO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVwb3J0RXJyb3IodGhpcywgcmUpO1xuXHQgICAgICAgIHRoaXMuX2VyckhhbmRsZXIucmVjb3Zlcih0aGlzLCByZSk7XG5cdCAgICB9IGVsc2Uge1xuXHQgICAgXHR0aHJvdyByZTtcblx0ICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLmV4aXRSdWxlKCk7XG4gICAgfVxuICAgIHJldHVybiBsb2NhbGN0eDtcbn07XG5cbmZ1bmN0aW9uIFVuYXJ5b3BDb250ZXh0KHBhcnNlciwgcGFyZW50LCBpbnZva2luZ1N0YXRlKSB7XG5cdGlmKHBhcmVudD09PXVuZGVmaW5lZCkge1xuXHQgICAgcGFyZW50ID0gbnVsbDtcblx0fVxuXHRpZihpbnZva2luZ1N0YXRlPT09dW5kZWZpbmVkIHx8IGludm9raW5nU3RhdGU9PT1udWxsKSB7XG5cdFx0aW52b2tpbmdTdGF0ZSA9IC0xO1xuXHR9XG5cdGFudGxyNC5QYXJzZXJSdWxlQ29udGV4dC5jYWxsKHRoaXMsIHBhcmVudCwgaW52b2tpbmdTdGF0ZSk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBRQVNNUGFyc2VyLlJVTEVfdW5hcnlvcDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuVW5hcnlvcENvbnRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShhbnRscjQuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlKTtcblVuYXJ5b3BDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFVuYXJ5b3BDb250ZXh0O1xuXG5cblVuYXJ5b3BDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuICAgIGlmKGxpc3RlbmVyIGluc3RhbmNlb2YgUUFTTUxpc3RlbmVyICkge1xuICAgICAgICBsaXN0ZW5lci5lbnRlclVuYXJ5b3AodGhpcyk7XG5cdH1cbn07XG5cblVuYXJ5b3BDb250ZXh0LnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgaWYobGlzdGVuZXIgaW5zdGFuY2VvZiBRQVNNTGlzdGVuZXIgKSB7XG4gICAgICAgIGxpc3RlbmVyLmV4aXRVbmFyeW9wKHRoaXMpO1xuXHR9XG59O1xuXG5cblxuXG5RQVNNUGFyc2VyLlVuYXJ5b3BDb250ZXh0ID0gVW5hcnlvcENvbnRleHQ7XG5cblFBU01QYXJzZXIucHJvdG90eXBlLnVuYXJ5b3AgPSBmdW5jdGlvbigpIHtcblxuICAgIHZhciBsb2NhbGN0eCA9IG5ldyBVbmFyeW9wQ29udGV4dCh0aGlzLCB0aGlzLl9jdHgsIHRoaXMuc3RhdGUpO1xuICAgIHRoaXMuZW50ZXJSdWxlKGxvY2FsY3R4LCAzNCwgUUFTTVBhcnNlci5SVUxFX3VuYXJ5b3ApO1xuICAgIHZhciBfbGEgPSAwOyAvLyBUb2tlbiB0eXBlXG4gICAgdHJ5IHtcbiAgICAgICAgdGhpcy5lbnRlck91dGVyQWx0KGxvY2FsY3R4LCAxKTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IDI5OTtcbiAgICAgICAgX2xhID0gdGhpcy5faW5wdXQuTEEoMSk7XG4gICAgICAgIGlmKCEoKCgoKF9sYSAtIDI4KSkgJiB+MHgxZikgPT0gMCAmJiAoKDEgPDwgKF9sYSAtIDI4KSkgJiAoKDEgPDwgKFFBU01QYXJzZXIuVF9fMjcgLSAyOCkpIHwgKDEgPDwgKFFBU01QYXJzZXIuVF9fMjggLSAyOCkpIHwgKDEgPDwgKFFBU01QYXJzZXIuVF9fMjkgLSAyOCkpIHwgKDEgPDwgKFFBU01QYXJzZXIuVF9fMzAgLSAyOCkpIHwgKDEgPDwgKFFBU01QYXJzZXIuVF9fMzEgLSAyOCkpIHwgKDEgPDwgKFFBU01QYXJzZXIuVF9fMzIgLSAyOCkpKSkgIT09IDApKSkge1xuICAgICAgICB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgIFx0dGhpcy5fZXJySGFuZGxlci5yZXBvcnRNYXRjaCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuY29uc3VtZSgpO1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAocmUpIHtcbiAgICBcdGlmKHJlIGluc3RhbmNlb2YgYW50bHI0LmVycm9yLlJlY29nbml0aW9uRXhjZXB0aW9uKSB7XG5cdCAgICAgICAgbG9jYWxjdHguZXhjZXB0aW9uID0gcmU7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZXBvcnRFcnJvcih0aGlzLCByZSk7XG5cdCAgICAgICAgdGhpcy5fZXJySGFuZGxlci5yZWNvdmVyKHRoaXMsIHJlKTtcblx0ICAgIH0gZWxzZSB7XG5cdCAgICBcdHRocm93IHJlO1xuXHQgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuZXhpdFJ1bGUoKTtcbiAgICB9XG4gICAgcmV0dXJuIGxvY2FsY3R4O1xufTtcblxuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5zZW1wcmVkID0gZnVuY3Rpb24obG9jYWxjdHgsIHJ1bGVJbmRleCwgcHJlZEluZGV4KSB7XG5cdHN3aXRjaChydWxlSW5kZXgpIHtcblx0Y2FzZSAxNTpcblx0XHRcdHJldHVybiB0aGlzLmV4cF9zZW1wcmVkKGxvY2FsY3R4LCBwcmVkSW5kZXgpO1xuICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IFwiTm8gcHJlZGljYXRlIHdpdGggaW5kZXg6XCIgKyBydWxlSW5kZXg7XG4gICB9XG59O1xuXG5RQVNNUGFyc2VyLnByb3RvdHlwZS5leHBfc2VtcHJlZCA9IGZ1bmN0aW9uKGxvY2FsY3R4LCBwcmVkSW5kZXgpIHtcblx0c3dpdGNoKHByZWRJbmRleCkge1xuXHRcdGNhc2UgMDpcblx0XHRcdHJldHVybiB0aGlzLnByZWNwcmVkKHRoaXMuX2N0eCwgNik7XG5cdFx0Y2FzZSAxOlxuXHRcdFx0cmV0dXJuIHRoaXMucHJlY3ByZWQodGhpcy5fY3R4LCA1KTtcblx0XHRjYXNlIDI6XG5cdFx0XHRyZXR1cm4gdGhpcy5wcmVjcHJlZCh0aGlzLl9jdHgsIDQpO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHR0aHJvdyBcIk5vIHByZWRpY2F0ZSB3aXRoIGluZGV4OlwiICsgcHJlZEluZGV4O1xuXHR9XG59O1xuXG5cbmV4cG9ydHMuUUFTTVBhcnNlciA9IFFBU01QYXJzZXI7XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LCBQZXRhciBLb3Jwb25hacSHIDxwZXRhci5rb3Jwb25haWNAZ21haWwuY29tPlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLCBmb3VuZCBpblxuICogdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxudmFyIG1hdGggPSByZXF1aXJlKFwibWF0aGpzXCIpO1xuXG52YXIgUUFTTUltcG9ydCA9IHJlcXVpcmUoXCIuL3Fhc21faW1wb3J0L1FBU01JbXBvcnQuanNcIik7XG5cblxudmFyIGZvcm1hdENvbXBsZXgyID0gZnVuY3Rpb24ocmUsIGltLCBvcHRpb25zKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBzcmUgPSBmb3JtYXRGbG9hdChyZSwgb3B0aW9ucyk7XG5cblx0dmFyIG9wdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3B0aW9ucykpO1xuXHRvcHQucGx1c0NoYXIgPSBcIitcIjtcblx0dmFyIHNpbSA9IGZvcm1hdEZsb2F0KGltLCBvcHQpO1xuXHRyZXR1cm4gc3JlICsgc2ltICsgKG9wdGlvbnMuaW90YUNoYXIgPyBvcHRpb25zLmlvdGFDaGFyIDogXCJpXCIpO1xufTtcblxudmFyIGZvcm1hdEZsb2F0ID0gZnVuY3Rpb24oZiwgb3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRpZihvcHRpb25zLmRlY2ltYWxQbGFjZXMpIHtcblx0XHRmID0gbWF0aC5yb3VuZChmLCBvcHRpb25zLmRlY2ltYWxQbGFjZXMpO1xuXHR9XG5cblx0dmFyIHMgPSBmICsgXCJcIjtcblxuXHRpZihvcHRpb25zLmZpeGVkV2lkdGgpIHtcblx0XHRzID0gZi50b0ZpeGVkKG9wdGlvbnMuZGVjaW1hbFBsYWNlcyB8fCAxNCk7XG5cdH1cblxuXHR2YXIgcGx1c0NoYXIgPSBvcHRpb25zLnBsdXNDaGFyO1xuXHRpZihvcHRpb25zLmZpeGVkV2lkdGggJiYgIXBsdXNDaGFyKSB7XG5cdFx0cGx1c0NoYXIgPSBcIiBcIjtcblx0fVxuXG5cdGlmKHBsdXNDaGFyICYmIGYgPj0gMCkge1xuXHRcdHMgPSBwbHVzQ2hhciArIHM7XG5cdH1cblxuXHRyZXR1cm4gcztcbn07XG5cbnZhciB6ZXJvZXNNYXRyaXggPSBmdW5jdGlvbihuKSB7XG5cdHZhciBtYXRyaXggPSBbXTtcblx0Zm9yKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuXHRcdG1hdHJpeFtpXSA9IFtdO1xuXHRcdGZvcih2YXIgaiA9IDA7IGogPCBuOyBqKyspIHtcblx0XHRcdG1hdHJpeFtpXVtqXSA9IDA7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtYXRyaXg7XG59O1xuXG52YXIgaWRlbnRpdHlNYXRyaXggPSBmdW5jdGlvbihuKSB7XG5cdHZhciBtYXRyaXggPSBbXTtcblx0Zm9yKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuXHRcdG1hdHJpeFtpXSA9IFtdO1xuXHRcdGZvcih2YXIgaiA9IDA7IGogPCBuOyBqKyspIHtcblx0XHRcdG1hdHJpeFtpXVtqXSA9IGogPT0gaSA/IDEgOiAwO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbWF0cml4O1xufTtcblxuXG52YXIgbWFrZUNvbnRyb2xsZWQgPSBmdW5jdGlvbihVKSB7XG5cdHZhciBtID0gVS5sZW5ndGg7XG5cdHZhciBDID0gaWRlbnRpdHlNYXRyaXgobSAqIDIpO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IG07IGkrKykge1xuXHRcdGZvciAodmFyIGogPSAwOyBqIDwgbTsgaisrKSB7XG5cdFx0XHRDW2kgKyBtXVtqICsgbV0gPSBVW2ldW2pdO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gQztcbn07XG5cbnZhciB1bmlxdWVBcnJheSA9IGZ1bmN0aW9uKGFycmF5KSB7XG4gIHJldHVybiBhcnJheS5maWx0ZXIoZnVuY3Rpb24odmFsdWUsIGluZGV4LCBzZWxmKSB7XG5cdHJldHVybiBzZWxmLmluZGV4T2YodmFsdWUpID09PSBpbmRleDtcbiAgfSk7XG59O1xuXG52YXIgcXViaXRMZXR0ZXIgPSBmdW5jdGlvbihuLCBtYXgpIHtcblx0bWF4TiA9IG1heCB8fCAobiArIDEpO1xuXG5cdGlmKG1heE4gPiAwKSB7XG5cdFx0bWF4TiA9IG1heE4gLSAxO1xuXHR9XG5cblx0bWF4TGVuID0gbWF4Ti50b1N0cmluZygyNikubGVuZ3RoO1xuXG5cdHZhciBuU3RyID0gbi50b1N0cmluZygyNik7XG5cdHdoaWxlKG5TdHIubGVuZ3RoIDwgbWF4TGVuKSB7XG5cdFx0blN0ciA9IFwiMFwiICsgblN0cjtcblx0fVxuXG5cdHZhciByZXMgPSBcIlwiO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgblN0ci5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBjb2RlID0gblN0ci5jaGFyQ29kZUF0KGkpO1xuXHRcdHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGUgPCA5NyA/IGNvZGUgKyA0OSA6IGNvZGUgKyAxMCk7XG5cdH1cblxuXHRyZXR1cm4gcmVzO1xufTtcblxudmFyIFF1YW50dW1DaXJjdWl0ID0gZnVuY3Rpb24obnVtUXViaXRzKSB7XG5cdHRoaXMuYmFzaWNHYXRlcyA9IHtcblx0XHRpZDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiU2luZ2xlIHF1Yml0IGlkZW50aXR5IGdhdGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwgMF0sXG5cdFx0XHRcdFswLCAxXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIklEXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIklcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJJXCIsXG5cdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb21wYWN0VW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogeyBhbHBoYTogXCIoQ29tcGxleCkgeyAucmVhbCA9IDEsIC5pbWFnID0gMCB9XCIsXG5cdFx0XHRcdFx0XHRcdGJldGE6IFwiKENvbXBsZXgpIHsucmVhbCA9IDAsIC5pbWFnID0gMH1cIn1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJJXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJpZFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiaVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJJXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR4OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJQYXVsaSBYIChQSSByb3RhdGlvbiBvdmVyIFgtYXhpcykgYWthIFxcXCJOT1RcXFwiIGdhdGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMCwxXSxcblx0XHRcdFx0WzEsMF1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJYXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJYXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInBhdWxpWFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJYXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ4XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlhcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHk6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlBhdWxpIFkgKFBJIHJvdGF0aW9uIG92ZXIgWS1heGlzKVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFswLFwiLWlcIl0sXG5cdFx0XHRcdFtcImlcIiwwXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIllcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIllcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicGF1bGlZXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJZXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIllcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInlcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiWVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0ejoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUGF1bGkgWiAoUEkgcm90YXRpb24gb3ZlciBaLWF4aXMpXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMF0sXG5cdFx0XHRcdFswLC0xXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlpcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWlwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicGF1bGlaXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJaXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInpcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiWlwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0aDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiSGFkYW1hcmQgZ2F0ZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFtcIjEgLyBzcXJ0KDIpXCIsXCIxIC8gc3FydCgyKVwiXSxcblx0XHRcdFx0W1wiMSAvIHNxcnQoMilcIixcIi0xIC8gc3FydCgyKVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIkhcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiSFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiaGFkYW1hcmRcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiSFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiaFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJIXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzcm46IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlNxdWFyZSByb290IG9mIE5PVFwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFtcIjAuNSswLjVpXCIsXCIwLjUtMC41aVwiXSxcblx0XHRcdFx0W1wiMC41LTAuNWlcIixcIjAuNSswLjVpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiJiN4MjIxQTtYXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcInNyblwiLFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSBzcm46XFxuICAgIDAuNSswLjVpLCAwLjUtMC41aVxcbiAgICAwLjUtMC41aSwgMC41KzAuNWlcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcInNyblwiLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMC41KzAuNWosIDAuNS0wLjVqXSwgWzAuNS0wLjVqLCAwLjUrMC41al1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiWCoqKDEvMilcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdG1hdHJpeDogW1tbXCIwLjVcIiwgXCIwLjVcIl0sIFtcIjAuNVwiLCBcIi0wLjVcIl1dLFxuXHRcdFx0XHRcdFx0W1tcIjAuNVwiLCBcIi0wLjVcIl0sW1wiMC41XCIsIFwiMC41XCJdXV1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwic3hcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInN4XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ2XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRtYXRyaXg6IFtbXCIwLjUrMC41aVwiLFwiMC41LTAuNWlcIl0sW1wiMC41LTAuNWlcIixcIjAuNSswLjVpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzAuNSswLjVqLCAwLjUtMC41al0sIFswLjUtMC41aiwgMC41KzAuNWpdXVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0c3JuZGc6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkludmVyc2Ugc3F1YXJlIHJvb3Qgb2YgTk9UXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0W1wiMC41LTAuNWlcIixcIjAuNSswLjVpXCJdLFxuXHRcdFx0XHRbXCIwLjUrMC41aVwiLFwiMC41LTAuNWlcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCImI3gyMjFBO1gmIzgyMjQ7XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcInNybmRnXCIsXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIHNybmRnOlxcbiAgICAwLjUtMC41aSwgMC41KzAuNWlcXG4gICAgMC41KzAuNWksIDAuNS0wLjVpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzcm5kZ1wiLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMC41LTAuNWosIDAuNSswLjVqXSwgWzAuNSswLjVqLCAwLjUtMC41al1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiWCoqKC0xLzIpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRtYXRyaXg6IFtbW1wiMC41XCIsIFwiLTAuNVwiXSwgW1wiMC41XCIsIFwiMC41XCJdXSxcblx0XHRcdFx0XHRcdFtbXCIwLjVcIiwgXCIwLjVcIl0sW1wiMC41XCIsIFwiLTAuNVwiXV1dXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcInN4ZGdcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInN4ZGdcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInZpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRtYXRyaXg6IFtbXCIwLjUtMC41aVwiLFwiMC41KzAuNWlcIl0sW1wiMC41KzAuNWlcIixcIjAuNS0wLjVpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzAuNS0wLjVqLCAwLjUrMC41al0sIFswLjUrMC41aiwgMC41LTAuNWpdXVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0cjI6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlBJLzIgcm90YXRpb24gb3ZlciBaLWF4aXMgYWthIFxcXCJQaGFzZSBQSS8yXFxcIlwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDBdLFxuXHRcdFx0XHRbMCxcImV4cChpICogcGkgLyAyKVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlomI3gxRDZEMTsvMlwiXG5cdFx0XHR9LFxuXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJzXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJzXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzR2F0ZVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInNcIixcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInNcIiwgcGFyYW1zOiB7fSB9XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJzXCIsIHBhcmFtczoge30gfVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJaXsK9XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHI0OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJQSS80IHJvdGF0aW9uIG92ZXIgWi1heGlzIGFrYSBcXFwiUGhhc2UgUEkvNFxcXCJcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwXSxcblx0XHRcdFx0WzAsXCJleHAoaSAqIHBpIC8gNClcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJaJiN4MUQ2RDE7LzRcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInRcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInRcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInRHYXRlXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwidFwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ0XCIsIHBhcmFtczoge30gfVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidFwiLCBwYXJhbXM6IHt9IH1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJUXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRyODoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUEkvOCByb3RhdGlvbiBvdmVyIFotYXhpcyBha2EgXFxcIlBoYXNlIFBJLzhcXFwiXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMF0sXG5cdFx0XHRcdFswLFwiZXhwKGkgKiBwaSAvIDgpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiWiYjeDFENkQxOy84XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS84XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJ1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS84XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJwaGFzZVNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiB7dGhldGE6IFwiTV9QSS84XCJ9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInUxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzhcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTFcIiwgcGFyYW1zOiB7IGxhbWJkYTogXCJwaS84XCIgfSB9XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1MVwiLCBwYXJhbXM6IHsgbGFtYmRhOiBcInBpLzhcIiB9IH1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7ihZtcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInBoYXNlc2hpZnRcIixcblx0XHRcdFx0XHRwYXJhbXM6IHt0aGV0YTogXCJwaS84XCJ9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bWF0cml4OiBbWzEsMF0sWzAsXCJleHAoaSAqIHBpIC8gOClcIl1dLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwXSxbMCxucC5leHAoMWogKiBucC5waSAvIDgpXV1cIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHJ4OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJSb3RhdGlvbiBhcm91bmQgdGhlIFgtYXhpcyBieSBnaXZlbiBhbmdsZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFtcImNvcyh0aGV0YSAvIDIpXCIsIFwiLWkgKiBzaW4odGhldGEgLyAyKVwiXSxcblx0XHRcdFx0W1wiLWkgKiBzaW4odGhldGEgLyAyKVwiLCBcImNvcyh0aGV0YSAvIDIpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiUlhcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiUlhcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ4XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicm90YXRlWFwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJSeFwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyeFwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJYXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRyeToge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUm90YXRpb24gYXJvdW5kIHRoZSBZLWF4aXMgYnkgZ2l2ZW4gYW5nbGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbXCJjb3ModGhldGEgLyAyKVwiLCBcIi0xICogc2luKHRoZXRhIC8gMilcIl0sXG5cdFx0XHRcdFtcInNpbih0aGV0YSAvIDIpXCIsIFwiY29zKHRoZXRhIC8gMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJSWVwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJSWVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwicnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyb3RhdGVZXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiUllcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHJ6OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJSb3RhdGlvbiBhcm91bmQgdGhlIFotYXhpcyBieSBnaXZlbiBhbmdsZVwiLFxuXHRcdFx0XG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0W1wiY29zKHBoaSAvIDIpIC0gaSAqIHNpbihwaGkgLyAyKVwiLCAwXSxcblx0XHRcdFx0WzAsIFwiY29zKHBoaSAvIDIpICsgaSAqIHNpbihwaGkgLyAyKVwiXVxuXHRcdFx0XSxcblxuXHRcdFx0cGFyYW1zOiBbXCJwaGlcIl0sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlJaXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJaXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwicnpcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiUnpcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicnpcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiUlpcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHUxOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJTaW5nbGUtcXViaXQgcm90YXRpb24gYWJvdXQgdGhlIFogYXhpc1wiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDBdLFxuXHRcdFx0XHRbMCxcImV4cChpICogbGFtYmRhKVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW1wibGFtYmRhXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJVMVwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJQSEFTRVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wibGFtYmRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcInUxXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLCAwXSwgWzAsIG5wLmV4cCgxaipwX2xhbWJkYSldXVwiLFxuXHRcdFx0XHRcdG5vdFRmcVN1cHBvcnRlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicGhhc2VTaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wibGFtYmRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicGhhc2VzaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wibGFtYmRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJQSFwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0dTI6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlNpbmdsZS1xdWJpdCByb3RhdGlvbiBhYm91dCB0aGUgWCtaIGF4aXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbXCIxIC8gc3FydCgyKVwiLCBcIi1leHAoaSAqIGxhbWJkYSkgKiAxIC8gc3FydCgyKVwiXSxcblx0XHRcdFx0W1wiZXhwKGkgKiBwaGkpICogMSAvIHNxcnQoMilcIiwgXCJleHAoaSAqIGxhbWJkYSArIGkgKiBwaGkpICogMSAvIHNxcnQoMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiVTJcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidTJcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgdTIoJXBoaSwgJWxhbWJkYSk6XFxuICAgIDEvU1FSVCgyKSwgLTEqRVhQKGkqJWxhbWJkYSkqMS9TUVJUKDIpXFxuICAgIEVYUChpKiVwaGkpKjEvU1FSVCgyKSwgRVhQKGkqJWxhbWJkYSArIGkqJXBoaSkqMS9TUVJUKDIpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1MlwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMS9xdWlsX3NxcnQoMiksLXF1aWxfZXhwKDFqKnBfbGFtYmRhKSoxL3F1aWxfc3FydCgyKV0sW3F1aWxfZXhwKDFqKnBfcGhpKSoxL3F1aWxfc3FydCgyKSxxdWlsX2V4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqMS9xdWlsX3NxcnQoMildXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcInUyXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxL25wLnNxcnQoMiksIC1ucC5leHAoMWoqcF9sYW1iZGEpKjEvbnAuc3FydCgyKV0sIFtucC5leHAoMWoqcF9waGkpKjEvbnAuc3FydCgyKSwgbnAuZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSoxL25wLnNxcnQoMildXVwiLFxuXHRcdFx0XHRcdG5vdFRmcVN1cHBvcnRlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdG1hdHJpeDogW1tbXCIxL3NxcnQoMilcIiwgXCIwXCJdLCBbXCItY29zKGxhbWJkYSkvc3FydCgyKVwiLCBcIi1zaW4obGFtYmRhKS9zcXJ0KDIpXCJdXSxcblx0XHRcdFx0XHRcdFx0IFtbXCJjb3MocGhpKS9zcXJ0KDIpXCIsIFwic2luKHBoaSkvc3FydCgyKVwiXSwgW1wiY29zKGxhbWJkYStwaGkpL3NxcnQoMilcIiwgXCJzaW4obGFtYmRhK3BoaSkvc3FydCgyKVwiXV1dXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMS9ucC5zcXJ0KDIpLCAtbnAuZXhwKDFqKnBfbGFtYmRhKSoxL25wLnNxcnQoMildLCBbbnAuZXhwKDFqKnBfcGhpKSoxL25wLnNxcnQoMiksIG5wLmV4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqMS9ucC5zcXJ0KDIpXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1tcIjEgLyBzcXJ0KDIpXCIsIFwiLWV4cChpICogbGFtYmRhKSAqIDEgLyBzcXJ0KDIpXCJdLFtcImV4cChpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCIsIFwiZXhwKGkgKiBsYW1iZGEgKyBpICogcGhpKSAqIDEgLyBzcXJ0KDIpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEvbnAuc3FydCgyKSwgLW5wLmV4cCgxaipwX2xhbWJkYSkqMS9ucC5zcXJ0KDIpXSwgW25wLmV4cCgxaipwX3BoaSkqMS9ucC5zcXJ0KDIpLCBucC5leHAoMWoqcF9sYW1iZGErMWoqcF9waGkpKjEvbnAuc3FydCgyKV1dXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIiwgXCJsYW1iZGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwicGhpXCIsIGxhbWJkYTogXCJsYW1iZGFcIiB9IH1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHUzOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJHZW5lcmljIHNpbmdsZS1xdWJpdCByb3RhdGlvbiBnYXRlIHdpdGggMyBFdWxlciBhbmdsZXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbIFwiY29zKHRoZXRhLzIpXCIsIFwiLWV4cChpICogbGFtYmRhKSAqIHNpbih0aGV0YSAvIDIpXCIgXSxcblx0XHRcdFx0WyBcImV4cChpICogcGhpKSAqIHNpbih0aGV0YSAvIDIpXCIsIFwiZXhwKGkgKiBsYW1iZGEgKyBpICogcGhpKSAqIGNvcyh0aGV0YSAvIDIpXCIgXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlUzXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcInUzXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiLCBcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgdTMoJXRoZXRhLCAlcGhpLCAlbGFtYmRhKTpcXG4gICAgQ09TKCV0aGV0YS8yKSwgLTEqRVhQKGkqJWxhbWJkYSkqU0lOKCV0aGV0YS8yKVxcbiAgICBFWFAoaSolcGhpKSpTSU4oJXRoZXRhLzIpLCBFWFAoaSolbGFtYmRhICsgaSolcGhpKSpDT1MoJXRoZXRhLzIpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1M1wiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1txdWlsX2NvcyhwX3RoZXRhLzIpLC1xdWlsX2V4cCgxaipwX2xhbWJkYSkqcXVpbF9zaW4ocF90aGV0YS8yKV0sW3F1aWxfZXhwKDFqKnBfcGhpKSpxdWlsX3NpbihwX3RoZXRhLzIpLHF1aWxfZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSpxdWlsX2NvcyhwX3RoZXRhLzIpXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1M1wiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1tucC5jb3MocF90aGV0YS8yKSwgLW5wLmV4cCgxaipwX2xhbWJkYSkqbnAuc2luKHBfdGhldGEvMildLCBbbnAuZXhwKDFqKnBfcGhpKSpucC5zaW4ocF90aGV0YS8yKSwgbnAuZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSpucC5jb3MocF90aGV0YS8yKV1dXCIsXG5cdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiLCBcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRtYXRyaXg6IFtbW1wiY29zKHRoZXRhLzIpXCIsIFwiMFwiXSwgW1wiLWNvcyhsYW1iZGEpKnNpbih0aGV0YS8yKVwiLCBcIi1zaW4obGFtYmRhKSpzaW4odGhldGEvMilcIl1dLFxuXHRcdFx0XHRcdFx0XHQgW1tcImNvcyhwaGkpKnNpbih0aGV0YS8yKVwiLCBcInNpbihwaGkpKnNpbih0aGV0YS8yKVwiXSwgW1wiY29zKGxhbWJkYStwaGkpKmNvcyh0aGV0YS8yKVwiLCBcInNpbihsYW1iZGErcGhpKSpjb3ModGhldGEvMilcIl1dXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbbnAuY29zKHBfdGhldGEvMiksIC1ucC5leHAoMWoqcF9sYW1iZGEpKm5wLnNpbihwX3RoZXRhLzIpXSwgW25wLmV4cCgxaipwX3BoaSkqbnAuc2luKHBfdGhldGEvMiksIG5wLmV4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqbnAuY29zKHBfdGhldGEvMildXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bWF0cml4OiBbWyBcImNvcyh0aGV0YS8yKVwiLCBcIi1leHAoaSAqIGxhbWJkYSkgKiBzaW4odGhldGEgLyAyKVwiIF0sWyBcImV4cChpICogcGhpKSAqIHNpbih0aGV0YSAvIDIpXCIsIFwiZXhwKGkgKiBsYW1iZGEgKyBpICogcGhpKSAqIGNvcyh0aGV0YSAvIDIpXCIgXV0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1tucC5jb3MocF90aGV0YS8yKSwgLW5wLmV4cCgxaipwX2xhbWJkYSkqbnAuc2luKHBfdGhldGEvMildLCBbbnAuZXhwKDFqKnBfcGhpKSpucC5zaW4ocF90aGV0YS8yKSwgbnAuZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSpucC5jb3MocF90aGV0YS8yKV1dXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiLCBcInBoaVwiLCBcImxhbWJkYVwiXVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHM6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlBJLzIgcm90YXRpb24gb3ZlciBaLWF4aXMgKHN5bm9ueW0gZm9yIGByMmApXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMF0sXG5cdFx0XHRcdFswLFwiZXhwKGkgKiBwaSAvIDIpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiU1wiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiU1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzR2F0ZVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiU1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJaXsK9XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHQ6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlBJLzQgcm90YXRpb24gb3ZlciBaLWF4aXMgKHN5bm9ueW0gZm9yIGByNGApXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMF0sXG5cdFx0XHRcdFswLFwiZXhwKGkgKiBwaSAvIDQpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiVFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJUXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiVFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ0R2F0ZVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiVFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJaXsK8XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ0XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHNkZzoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiKC1QSS8yKSByb3RhdGlvbiBvdmVyIFotYXhpc1wiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDBdLFxuXHRcdFx0XHRbMCxcImV4cCgtaSAqIHBpIC8gMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJTJiM4MjI0O1wiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwidTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwiLXBpLzJcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInUxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcIi1waS8yXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJwaGFzZVNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiB7IHRoZXRhOiBcIi1NX1BJLzJcIiB9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInUxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcIi1waS8yXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJaXi3CvVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic2lcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiU1wiLFxuXHRcdFx0XHRcdGRhZ2dlcjogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHRkZzoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiKC1QSS80KSByb3RhdGlvbiBvdmVyIFotYXhpc1wiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDBdLFxuXHRcdFx0XHRbMCxcImV4cCgtaSAqIHBpIC8gNClcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJUJiM4MjI0O1wiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwidTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwiLXBpLzRcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInUxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcIi1waS80XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJwaGFzZVNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiB7IHRoZXRhOiBcIi1NX1BJLzRcIiB9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInUxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcIi1waS80XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJaXi3CvFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidGlcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiVFwiLFxuXHRcdFx0XHRcdGRhZ2dlcjogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGdwaToge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiR1BpIGdhdGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMCwgXCJleHAoLWkqcGhpKVwiXSxcblx0XHRcdFx0W1wiZXhwKGkqcGhpKVwiLCAwXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW1wicGhpXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJHUGlcIlxuXHRcdFx0fSxcblxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJncGlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiXSxcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgZ3BpKCVwaGkpOlxcbiAgICAwLCBFWFAoLWkgKiAlcGhpKVxcbiAgICBFWFAoaSAqICVwaGkpLCAwXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJncGlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbIFsgMCwgcXVpbF9leHAoLTFqKnBfcGhpKSBdLCBbIHF1aWxfZXhwKDFqKnBfcGhpKSwgMCBdIF1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJncGlcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiZ3BpXCIsXG5cdFx0XHRcdFx0Ly9AVE9ETyBhZGQgZnVuY3Rpb25cblx0XHRcdFx0XHRmdW5jOiBcIlRPRE9cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJncGlcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImdwaVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIlsgWyAwLCBucC5leHAoLTFqKnBfcGhpKSBdLCBbIG5wLmV4cCgxaipwX3BoaSksIDAgXSBdXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRtYXRyaXg6IFsgWyAwLCBcImV4cCgtaSpwaGkpXCIgXSwgWyBcImV4cChpKnBoaSlcIiwgMF0gXSxcblx0XHRcdFx0XHRhcnJheTogXCJbIFsgMCwgbnAuZXhwKC0xaipwX3BoaSkgXSwgWyBucC5leHAoMWoqcF9waGkpLCAwIF0gXVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCJdXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Z3BpMjoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiR1BpMiBnYXRlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0W1wiMS9zcXJ0KDIpXCIsIFwiKC1pKmV4cCgtaSpwaGkpKS9zcXJ0KDIpXCJdLFxuXHRcdFx0XHRbXCIoLWkqZXhwKGkqcGhpKSkvc3FydCgyKVwiLCBcIjEvc3FydCgyKVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW1wicGhpXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJHUGkyXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImdwaTJcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiXSxcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgZ3BpMiglcGhpKTpcXG4gICAgMS9TUVJUKDIpLCAoLWkqRVhQKC1pICogJXBoaSkpIC8gU1FSVCgyKVxcbiAgICAoLWkqRVhQKGkgKiAlcGhpKSkgLyBTUVJUKDIpLCAxL1NRUlQoMilcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImdwaTJcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbIFsgMS9xdWlsX3NxcnQoMiksICgtMWoqcXVpbF9leHAoLTFqKnBfcGhpKSkvcXVpbF9zcXJ0KDIpIF0sIFsgKC0xaipxdWlsX2V4cCgxaipwX3BoaSkpL3F1aWxfc3FydCgyKSwgMS9xdWlsX3NxcnQoMikgXSBdXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiZ3BpMlwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJncGkyXCIsXG5cdFx0XHRcdFx0Ly9AVE9ETyBhZGQgZnVuY3Rpb25cblx0XHRcdFx0XHRmdW5jOiBcIlRPRE9cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJncGkyXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJncGkyXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiWyBbIDEvbnAuc3FydCgyKSwgKC0xaipucC5leHAoLTFqKnBfcGhpKSkvbnAuc3FydCgyKSBdLCBbICgtMWoqbnAuZXhwKDFqKnBfcGhpKSkvbnAuc3FydCgyKSwgMS9ucC5zcXJ0KDIpIF0gXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bWF0cml4OiBbIFsgXCIxL3NxcnQoMilcIiwgXCIoLWkqZXhwKC1pKnBoaSkpL3NxcnQoMilcIiBdLCBbIFwiKC1pKmV4cChpKnBoaSkpL3NxcnQoMilcIiwgXCIxL3NxcnQoMilcIiBdIF0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiWyBbIDEvbnAuc3FydCgyKSwgKC0xaipucC5leHAoLTFqKnBfcGhpKSkvbnAuc3FydCgyKSBdLCBbICgtMWoqbnAuZXhwKDFqKnBfcGhpKSkvbnAuc3FydCgyKSwgMS9ucC5zcXJ0KDIpIF0gXVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCJdXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0dno6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlZpcnR1YWxaIGdhdGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbXCJleHAoLWkqdGhldGEvMilcIiwgMF0sXG5cdFx0XHRcdFswLCBcImV4cChpKnRoZXRhLzIpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiVnJ0WlwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ2elwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIHZ6KCV0aGV0YSk6XFxuICAgIEVYUCgtaSAqICV0aGV0YS8yKSwgMFxcbiAgICAwLCBFWFAoLWkgKiAldGhldGEvMilcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcInZ6XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbIFsgcXVpbF9leHAoLTFqKnBfdGhldGEvMiksIDAgXSwgWyAwLCBxdWlsX2V4cCgxaipwX3RoZXRhLzIpIF0gXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcInZ6XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInZ6XCIsXG5cdFx0XHRcdFx0Ly9AVE9ETyBhZGQgZnVuY3Rpb25cblx0XHRcdFx0XHRmdW5jOiBcIlRPRE9cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ2elwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidnpcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIlsgWyBucC5leHAoLTFqKnBfdGhldGEvMiksIDAgXSwgWyAwLCBucC5leHAoMWoqcF90aGV0YS8yKSBdIF1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogWyBbIFwiZXhwKC1pKnRoZXRhLzIpXCIsIDAgXSwgWyAwLCBcImV4cChpKnRoZXRhLzIpXCJdIF0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiWyBbIG5wLmV4cCgtMWoqcF90aGV0YS8yKSwgMCBdLCBbIDAsIG5wLmV4cCgxaipwX3RoZXRhLzIpIF0gXVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjeDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCBOT1QgKENOT1QpIGdhdGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDFdLFxuXHRcdFx0XHRbMCwwLDEsMF1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJub3RcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlhcIixcblx0XHRcdFx0cm9vdDogXCJ4XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNOT1RcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDTk9UXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWROb3RcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNOT1RcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjbm90XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNOT1RcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGN5OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIFkgZ2F0ZSAoY29udHJvbGxlZCByb3RhdGlvbiBvdmVyIFktYXhpcyBieSBQSSlcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwwLFwiLWlcIl0sXG5cdFx0XHRcdFswLDAsXCJpXCIsMF1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIllcIixcblx0XHRcdFx0cm9vdDogXCJ5XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkUGF1bGlZXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInlcIixcblx0XHRcdFx0XHRcdHR5cGU6IFwiY29udHJvbGxlZFwiLFxuXHRcdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjeVwiLFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSBjeTpcXG4gICAgMSwgMCwgMCwgMFxcbiAgICAwLCAxLCAwLCAwXFxuICAgIDAsIDAsIDAsIC1pXFxuICAgIDAsIDAsIGksIDBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsMCwwLC0xal0sWzAsMCwxaiwwXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNvbnRyb2xsZWQgWVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJZXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN5XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIllcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3o6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgWiBnYXRlIChjb250cm9sbGVkIHJvdGF0aW9uIG92ZXIgWi1heGlzIGJ5IFBJKVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDEsMF0sXG5cdFx0XHRcdFswLDAsMCwtMV1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJkb3RcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlpcIixcblx0XHRcdFx0cm9vdDogXCJ6XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNaXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ1pcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udHJvbGxlZFBoYXNlRmxpcFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ29udHJvbGxlZCBaXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlpcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3pcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ1NJR05cIlxuXHRcdFx0XHR9XG5cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y2g6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgSGFkYW1hcmQgZ2F0ZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLFwiMSAvIHNxcnQoMilcIixcIjEgLyBzcXJ0KDIpXCJdLFxuXHRcdFx0XHRbMCwwLFwiMSAvIHNxcnQoMilcIixcIi0xIC8gc3FydCgyKVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJkb3RcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiSFwiLFxuXHRcdFx0XHRyb290OiBcImhcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRVbml0YXJ5XCIsXG5cdFx0XHRcdFx0bWF0cml4OiBbW1tcIjEvc3FydCgyKVwiLCBcIjBcIl0sIFtcIjEvc3FydCgyKVwiLCBcIjBcIl1dLFxuXHRcdFx0XHRcdFx0XHQgW1tcIjEvc3FydCgyKVwiLCBcIjBcIl0sIFtcIi0xL3NxcnQoMilcIiwgXCIwXCJdXV1cblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImhcIixcblx0XHRcdFx0XHRcdHR5cGU6IFwiY29udHJvbGxlZFwiLFxuXHRcdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjaFwiLFx0XHRcdFx0XHRcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgY2g6XFxuICAgIDEsIDAsIDAsIDBcXG4gICAgMCwgMSwgMCwgMFxcbiAgICAwLCAwLCAwLjcwNzEwNjc4MTE4NjU0NzUsIDAuNzA3MTA2NzgxMTg2NTQ3NVxcbiAgICAwLCAwLCAwLjcwNzEwNjc4MTE4NjU0NzUsIC0wLjcwNzEwNjc4MTE4NjU0NzVcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNoXCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsMCwxL25wLnNxcnQoMiksMS9ucC5zcXJ0KDIpXSxbMCwwLDEvbnAuc3FydCgyKSwtMS9ucC5zcXJ0KDIpXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNvbnRyb2xsZWQgSFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJIXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDEvbnAuc3FydCgyKSwxL25wLnNxcnQoMildLFswLDAsMS9ucC5zcXJ0KDIpLC0xL25wLnNxcnQoMildXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJIXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNzcm46IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgc3F1YXJlIHJvb3Qgb2YgTk9UXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLDAsXCIwLjUrMC41aVwiLFwiMC41LTAuNWlcIl0sXG5cdFx0XHRcdFswLDAsXCIwLjUtMC41aVwiLFwiMC41KzAuNWlcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIiYjeDIyMUE7WFwiLFxuXHRcdFx0XHRyb290OiBcInNyblwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udHJvbGxlZFVuaXRhcnlcIixcblx0XHRcdFx0XHRtYXRyaXg6IFtbW1wiLTEvc3FydCgyKVwiLCBcIjBcIl0sIFtcIi0xL3NxcnQoMilcIiwgXCIwXCJdXSxcblx0XHRcdFx0XHRcdFx0IFtbXCItMS9zcXJ0KDIpXCIsIFwiMFwiXSwgW1wiMS9zcXJ0KDIpXCIsIFwiMFwiXV1dXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJzcm5cIixcblx0XHRcdFx0XHRcdHR5cGU6IFwiY29udHJvbGxlZFwiLFxuXHRcdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjc3JuXCIsXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIGNzcm46XFxuICAgIDEsIDAsIDAsIDBcXG4gICAgMCwgMSwgMCwgMFxcbiAgICAwLCAwLCAwLjUrMC41aSwgMC41LTAuNWlcXG4gICAgMCwgMCwgMC41LTAuNWksIDAuNSswLjVpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3N4XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjc3hcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNzcm5cIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDAuNSswLjVqLDAuNS0wLjVqXSxbMCwwLDAuNS0wLjVqLDAuNSswLjVqXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDAuNSswLjVqLDAuNS0wLjVqXSxbMCwwLDAuNS0wLjVqLDAuNSswLjVqXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsMCxcIjAuNSswLjVpXCIsXCIwLjUtMC41aVwiXSxbMCwwLFwiMC41LTAuNWlcIixcIjAuNSswLjVpXCJdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwwLDAuNSswLjVqLDAuNS0wLjVqXSxbMCwwLDAuNS0wLjVqLDAuNSswLjVqXV1cIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHN3YXA6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlN3YXBzIHRoZSBzdGF0ZSBvZiB0d28gcXViaXRzLlwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMCwxLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLDAsMCwxXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJ4XCIsXCJ4XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJTV1BcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiU1dBUFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNXQVBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic3dhcFwiLFxuXHRcdFx0XHRcdGZ1bmM6IFwidm9pZCBzd2FwKFF1cmVnIHF1Yml0cywgY29uc3QgaW50IHExLCBjb25zdCBpbnQgcTIpIHtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHExLCBxMik7XFxuXCIgK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTIsIHExKTtcXG5cIiArXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMSwgcTIpO1xcbn1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNXQVBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiU3dhcFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic3dhcFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTV0FQXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzcnN3YXA6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlNxdWFyZSByb290IG9mIHN3YXBcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLFwiMC41ICogKDEgKyBpKVwiLFwiMC41ICogKDEgLSBpKVwiLDBdLFxuXHRcdFx0XHRbMCxcIjAuNSAqICgxIC0gaSlcIixcIjAuNSAqICgxICsgaSlcIiwwXSxcblx0XHRcdFx0WzAsMCwwLDFdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiLFwiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCImI3gyMjFBO1NXUFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzcnN3YXBcIixcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgc3Jzd2FwOlxcbiAgICAxLCAwLCAwLCAwXFxuICAgIDAsIDAuNSswLjVpLCAwLjUtMC41aSwgMFxcbiAgICAwLCAwLjUtMC41aSwgMC41KzAuNWksIDBcXG4gICAgMCwgMCwgMCwgMVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNXQVAqKigxLzIpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJzcnN3YXBcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDAuNSAqICgxICsgMWopLDAuNSAqICgxIC0gMWopLDBdLFswLDAuNSAqICgxIC0gMWopLDAuNSAqICgxICsgMWopLDBdLFswLDAsMCwxXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwic3Jzd2FwXCIsXG5cdFx0XHRcdFx0ZnVuYzogXCJ2b2lkIHNyc3dhcChRdXJlZyBxdWJpdHMsIGNvbnN0IGludCBxMSwgY29uc3QgaW50IHEyKSB7XFxuXCIgK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTIsIHExKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgcm90YXRlWShxdWJpdHMsIHEyLCBNX1BJLzIpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICByb3RhdGVaKHF1Yml0cywgcTIsIE1fUEkvMTYpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEyKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgcm90YXRlWihxdWJpdHMsIHExLCBNX1BJLzgpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICByb3RhdGVaKHF1Yml0cywgcTIsIC1NX1BJLzgpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTEsIHEyKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgcm90YXRlWihxdWJpdHMsIHEyLCBNX1BJLzE2KTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgcm90YXRlWShxdWJpdHMsIHEyLCAtTV9QSS8yKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHEyLCBxMSk7XFxufVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRlcXVpdmFsZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcInBpLzJcIiwgbGFtYmRhOiBcIi0xKnBpXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIi0xKnBpLzJcIiwgbGFtYmRhOiBcInBpXCIgfSwgd2lyZXM6IFsxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzRcIiwgcGhpOiBcIi0xKnBpLzJcIiwgbGFtYmRhOiBcIi0xKnBpLzJcIiB9LCB3aXJlczogWzBdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiMFwiLCBsYW1iZGE6IFwiNypwaS80XCIgfSwgd2lyZXM6IFsxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzRcIiwgcGhpOiBcIi0xKnBpXCIsIGxhbWJkYTogXCItMSpwaS8yXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcInBpXCIsIGxhbWJkYTogXCJwaS8yXCIgfSwgd2lyZXM6IFsxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIi0zKnBpLzJcIiB9LCB3aXJlczogWzBdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwicGkvMlwiLCBsYW1iZGE6IFwiMFwiIH0sIHdpcmVzOiBbMV19LFxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdGVxdWl2YWxlbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwicGkvMlwiLCBsYW1iZGE6IFwiLTEqcGlcIiB9LCB3aXJlczogWzBdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiLTEqcGkvMlwiLCBsYW1iZGE6IFwicGlcIiB9LCB3aXJlczogWzFdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjeFwiLCB3aXJlczogWzAsIDFdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvNFwiLCBwaGk6IFwiLTEqcGkvMlwiLCBsYW1iZGE6IFwiLTEqcGkvMlwiIH0sIHdpcmVzOiBbMF19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCIwXCIsIGxhbWJkYTogXCI3KnBpLzRcIiB9LCB3aXJlczogWzFdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjeFwiLCB3aXJlczogWzAsIDFdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvNFwiLCBwaGk6IFwiLTEqcGlcIiwgbGFtYmRhOiBcIi0xKnBpLzJcIiB9LCB3aXJlczogWzBdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwicGlcIiwgbGFtYmRhOiBcInBpLzJcIiB9LCB3aXJlczogWzFdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjeFwiLCB3aXJlczogWzAsIDFdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiMFwiLCBsYW1iZGE6IFwiLTMqcGkvMlwiIH0sIHdpcmVzOiBbMF19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCJwaS8yXCIsIGxhbWJkYTogXCIwXCIgfSwgd2lyZXM6IFsxXX0sXG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwwLjUgKiAoMSArIDFqKSwwLjUgKiAoMSAtIDFqKSwwXSxbMCwwLjUgKiAoMSAtIDFqKSwwLjUgKiAoMSArIDFqKSwwXSxbMCwwLDAsMV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlNRUlRTV0FQXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRpc3dhcDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiU3dhcHMgdGhlIHN0YXRlIG9mIHR3byBxdWJpdHMsIGFwcGx5aW5nIGEgLWkgcGhhc2UgdG8gcTEgd2hlbiBpdCBpcyBpbiB0aGUgMSBzdGF0ZSBhbmQgYSAtaSBwaGFzZSB0byBxMiB3aGVuIGl0IGlzIGluIHRoZSAwIHN0YXRlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwwLFwiMCtpXCIsMF0sXG5cdFx0XHRcdFswLFwiMCtpXCIsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDFdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiLFwiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJpU1dQXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIklTV0FQXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiSVNXQVBcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0ZXF1aXZhbGVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCItMSpwaS8yXCIsIGxhbWJkYTogXCItMSpwaVwiIH0sIHdpcmVzOiBbMF19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCItMSpwaS8yXCIsIGxhbWJkYTogXCJwaVwiIH0sIHdpcmVzOiBbMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN4XCIsIHdpcmVzOiBbMCwgMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCIwXCIsIGxhbWJkYTogXCIzKnBpLzJcIiB9LCB3aXJlczogWzBdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiMypwaS8yXCIsIGxhbWJkYTogXCIwXCIgfSwgd2lyZXM6IFsxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3hcIiwgd2lyZXM6IFswLCAxXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIjBcIiwgbGFtYmRhOiBcIjBcIiB9LCB3aXJlczogWzBdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGlcIiwgcGhpOiBcInBpLzRcIiwgbGFtYmRhOiBcIi0xKnBpLzRcIiB9LCB3aXJlczogWzFdfVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdGVxdWl2YWxlbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiLTEqcGkvMlwiLCBsYW1iZGE6IFwiLTEqcGlcIiB9LCB3aXJlczogWzBdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiLTEqcGkvMlwiLCBsYW1iZGE6IFwicGlcIiB9LCB3aXJlczogWzFdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjeFwiLCB3aXJlczogWzAsIDFdfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwiLCBwaGk6IFwiMFwiLCBsYW1iZGE6IFwiMypwaS8yXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIiwgcGhpOiBcIjMqcGkvMlwiLCBsYW1iZGE6IFwiMFwiIH0sIHdpcmVzOiBbMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN4XCIsIHdpcmVzOiBbMCwgMV19LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInUzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCIwXCIsIGxhbWJkYTogXCIwXCIgfSwgd2lyZXM6IFswXX0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpXCIsIHBoaTogXCJwaS80XCIsIGxhbWJkYTogXCItMSpwaS80XCIgfSwgd2lyZXM6IFsxXX1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImlzd2FwXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIklTV0FQXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR4eDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiWFggZ2F0ZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFtcImNvcyh0aGV0YSlcIiwgMCwgMCwgXCItaSpzaW4odGhldGEpXCJdLFxuXG5cdFx0XHRcdFswLCBcImNvcyh0aGV0YSlcIiwgXCItaSpzaW4odGhldGEpXCIsIDBdLFxuXG5cdFx0XHRcdFswLCBcIi1pKnNpbih0aGV0YSlcIiwgXCJjb3ModGhldGEpXCIsIDBdLFxuXG5cdFx0XHRcdFtcIi1pKnNpbih0aGV0YSlcIiwgMCwgMCwgXCJjb3ModGhldGEpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiLFwiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJYWFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ4eFwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIHh4KCV0aGV0YSk6XFxuICAgIENPUygldGhldGEpLCAwLCAwLCAtaSpTSU4oJXRoZXRhKVxcbiAgICAwLCBDT1MoJXRoZXRhKSwgLWkqU0lOKCV0aGV0YSksIDBcXG4gICAgMCwgLWkqU0lOKCV0aGV0YSksIENPUygldGhldGEpLCAwXFxuICAgIC1pKlNJTigldGhldGEpLCAwLCAwLCBDT1MoJXRoZXRhKVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwieHhcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIlsgW3F1aWxfY29zKHBfdGhldGEpLCAwLCAwLCAtMWoqcXVpbF9zaW4ocF90aGV0YSldLCBbMCwgcXVpbF9jb3MocF90aGV0YSksIC0xaipxdWlsX3NpbihwX3RoZXRhKSwgMF0sIFswLCAtMWoqcXVpbF9zaW4ocF90aGV0YSksIHF1aWxfY29zKHBfdGhldGEpLCAwXSwgWy0xaipxdWlsX3NpbihwX3RoZXRhKSwgMCwgMCwgcXVpbF9jb3MocF90aGV0YSldIF1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ4eFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ4eFwiLFxuXHRcdFx0XHRcdC8vQFRPRE8gYWRkIGZ1bmN0aW9uXG5cdFx0XHRcdFx0ZnVuYzogXCJUT0RPXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwicnh4XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyeHhcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbbnAuY29zKHBfdGhldGEpLCAwLCAwLCAtMWoqbnAuc2luKHBfdGhldGEpXSwgWzAsIG5wLmNvcyhwX3RoZXRhKSwgLTFqKm5wLnNpbihwX3RoZXRhKSwgMF0sIFswLCAtMWoqbnAuc2luKHBfdGhldGEpLCBucC5jb3MocF90aGV0YSksIDBdLCBbLTFqKm5wLnNpbihwX3RoZXRhKSwgMCwgMCwgbnAuY29zKHBfdGhldGEpXSBdXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRtYXRyaXg6IFtbXCJjb3ModGhldGEpXCIsIDAsIDAsIFwiLWkqc2luKHRoZXRhKVwiXSxbMCwgXCJjb3ModGhldGEpXCIsIFwiLWkqc2luKHRoZXRhKVwiLCAwXSxbMCwgXCItaSpzaW4odGhldGEpXCIsIFwiY29zKHRoZXRhKVwiLCAwXSxbXCItaSpzaW4odGhldGEpXCIsIDAsIDAsIFwiY29zKHRoZXRhKVwiXV0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1tucC5jb3MocF90aGV0YSksIDAsIDAsIC0xaipucC5zaW4ocF90aGV0YSldLCBbMCwgbnAuY29zKHBfdGhldGEpLCAtMWoqbnAuc2luKHBfdGhldGEpLCAwXSwgWzAsIC0xaipucC5zaW4ocF90aGV0YSksIG5wLmNvcyhwX3RoZXRhKSwgMF0sIFstMWoqbnAuc2luKHBfdGhldGEpLCAwLCAwLCBucC5jb3MocF90aGV0YSldIF1cIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdFxuXHRcdHl5OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJZWSBnYXRlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0W1wiY29zKHRoZXRhKVwiLCAwLCAwLCBcImkqc2luKHRoZXRhKVwiXSxcblxuXHRcdFx0XHRbMCwgXCJjb3ModGhldGEpXCIsIFwiLWkqc2luKHRoZXRhKVwiLCAwXSxcblxuXHRcdFx0XHRbMCwgXCItaSpzaW4odGhldGEpXCIsIFwiY29zKHRoZXRhKVwiLCAwXSxcblxuXHRcdFx0XHRbXCJpKnNpbih0aGV0YSlcIiwgMCwgMCwgXCJjb3ModGhldGEpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiLFwiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJZWVwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ5eVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIHl5KCV0aGV0YSk6XFxuICAgIENPUygldGhldGEpLCAwLCAwLCBpKlNJTigldGhldGEpXFxuICAgIDAsIENPUygldGhldGEpLCAtaSpTSU4oJXRoZXRhKSwgMFxcbiAgICAwLCAtaSpTSU4oJXRoZXRhKSwgQ09TKCV0aGV0YSksIDBcXG4gICAgaSpTSU4oJXRoZXRhKSwgMCwgMCwgQ09TKCV0aGV0YSlcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJZWVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwieXlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIlsgW3F1aWxfY29zKHBfdGhldGEpLCAwLCAwLCAxaipxdWlsX3NpbihwX3RoZXRhKV0sIFswLCBxdWlsX2NvcyhwX3RoZXRhKSwgLTFqKnF1aWxfc2luKHBfdGhldGEpLCAwXSwgWzAsIC0xaipxdWlsX3NpbihwX3RoZXRhKSwgcXVpbF9jb3MocF90aGV0YSksIDBdLCBbMWoqcXVpbF9zaW4ocF90aGV0YSksIDAsIDAsIHF1aWxfY29zKHBfdGhldGEpXSBdXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInl5XCIsXG5cdFx0XHRcdFx0Ly9AVE9ETyBhZGQgZnVuY3Rpb25cblx0XHRcdFx0XHRmdW5jOiBcIlRPRE9cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInl5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG1hdHJpeDogW1tcImNvcyh0aGV0YSlcIiwgMCwgMCwgXCJpKnNpbih0aGV0YSlcIl0sWzAsIFwiY29zKHRoZXRhKVwiLCBcIi1pKnNpbih0aGV0YSlcIiwgMF0sWzAsIFwiLWkqc2luKHRoZXRhKVwiLCBcImNvcyh0aGV0YSlcIiwgMF0sW1wiaSpzaW4odGhldGEpXCIsIDAsIDAsIFwiY29zKHRoZXRhKVwiXV0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1tucC5jb3MocF90aGV0YSksIDAsIDAsIDFqKm5wLnNpbihwX3RoZXRhKV0sIFswLCBucC5jb3MocF90aGV0YSksIC0xaipucC5zaW4ocF90aGV0YSksIDBdLCBbMCwgLTFqKm5wLnNpbihwX3RoZXRhKSwgbnAuY29zKHBfdGhldGEpLCAwXSwgWzFqKm5wLnNpbihwX3RoZXRhKSwgMCwgMCwgbnAuY29zKHBfdGhldGEpXSBdXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJyeXlcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ5eVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0eno6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIlBhcmFtZXRyaWMgMi1xdWJpdCByb3RhdGlvbiBhYm91dCBaWlwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsgXCJleHAoLWkgKiB0aGV0YSAvIDIpXCIsIDAsIDAsIDAgXSxcblx0XHRcdFx0WyAwLCBcImV4cChpICogdGhldGEgLyAyKVwiLCAwLCAwICBdLFxuXHRcdFx0XHRbIDAsIDAsIFwiZXhwKGkgKiB0aGV0YSAvIDIpXCIsIDAgIF0sXG5cdFx0XHRcdFsgMCwgMCwgMCwgXCJleHAoLWkgKiB0aGV0YSAvIDIpXCIgXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiWlpcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwienpcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSB6eigldGhldGEpOlxcbiAgICBFWFAoLWkgKiAldGhldGEgLyAyKSwgMCwgMCwgMFxcbiAgICAwLCBFWFAoaSAqICV0aGV0YSAvIDIpLCAwLCAwXFxuICAgIDAsIDAsIEVYUChpICogJXRoZXRhIC8gMiksIDBcXG4gICAgMCwgMCwgMCwgRVhQKC1pICogJXRoZXRhIC8gMilcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcInp6XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbIFsgcXVpbF9leHAoLTFqICogcF90aGV0YSAvIDIpLCAwLCAwLCAwIF0sIFsgMCwgcXVpbF9leHAoMWogKiBwX3RoZXRhIC8gMiksIDAsIDBdLCBbIDAsIDAsIHF1aWxfZXhwKDFqICogcF90aGV0YSAvIDIpLCAwIF0sIFsgMCwgMCwgMCwgcXVpbF9leHAoLTFqICogcF90aGV0YSAvIDIpIF0gXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcInJ6elwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwicnp6XCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHR4eToge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiWFkgZ2F0ZVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLCAwLCAwLCAwXSxcblx0XHRcdFx0WzAsIFwiY29zKHBoaSAvIDIpXCIsIFwiaSAqIHNpbihwaGkgLyAyKVwiLCAwXSxcblx0XHRcdFx0WzAsIFwiaSAqIHNpbihwaGkgLyAyKVwiLCBcImNvcyhwaGkgLyAyKVwiLCAwXSxcblx0XHRcdFx0WzAsIDAsIDAsIDFdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJwaGlcIl0sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJib3hcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiWFlcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWFlcIixcblx0XHRcdFx0XHRcInBhcmFtc1wiOiBbXG5cdFx0XHRcdFx0XHRcInBoaVwiXG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0ZXF1aXZhbGVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwiMypwaS80XCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcIi0zKnBpLzRcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN6XCIsIHdpcmVzOiBbMSwgMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcIi0xKnBpLzJcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwicGhpLzJcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwiLTEqcGkvMlwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwicGkvMlwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCJwaGkvMlwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCItMSpwaS8yXCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3pcIiwgd2lyZXM6IFsxLCAwXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwiLTEqcGkvMlwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCJwaS80XCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCItMSpwaS8yXCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcIi0xKnBpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcIjMqcGkvNFwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdGVxdWl2YWxlbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcIjMqcGkvNFwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCItMypwaS80XCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjelwiLCB3aXJlczogWzEsIDBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCItMSpwaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInBpLzJcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcInBoaS8yXCJ9LCB3aXJlczogWzBdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnhcIiwgcGFyYW1zOiB7IHRoZXRhOiBcIi0xKnBpLzJcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcInBpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwicGhpLzJcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwiLTEqcGkvMlwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN6XCIsIHdpcmVzOiBbMSwgMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyelwiLCBwYXJhbXM6IHsgcGhpOiBcIi0xKnBpLzJcIn0sIHdpcmVzOiBbMF0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJyeFwiLCBwYXJhbXM6IHsgdGhldGE6IFwicGkvMlwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwicGkvNFwifSwgd2lyZXM6IFswXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ6XCIsIHBhcmFtczogeyBwaGk6IFwiLTEqcGkvMlwifSwgd2lyZXM6IFsxXSB9LFxuXHRcdFx0XHRcdFx0eyBuYW1lOiBcInJ4XCIsIHBhcmFtczogeyB0aGV0YTogXCItMSpwaS8yXCJ9LCB3aXJlczogWzFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwicnpcIiwgcGFyYW1zOiB7IHBoaTogXCIzKnBpLzRcIn0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ4eVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwgMCwgMCwgMF0sIFswLCBucC5jb3MocF9waGkvMiksIDFqKm5wLnNpbihwX3BoaS8yKSwgMF0sIFswLCAxaipucC5zaW4ocF9waGkvMiksIG5wLmNvcyhwX3BoaS8yKSwgMF0sIFswLCAwLCAwLCAxXV1cIixcblx0XHRcdFx0XHRub3RUZnFTdXBwb3J0ZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ4eVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bWF0cml4OiBbWzEsIDAsIDAsIDBdLFswLCBcImNvcyhwaGkgLyAyKVwiLCBcImkgKiBzaW4ocGhpIC8gMilcIiwgMF0sWzAsIFwiaSAqIHNpbihwaGkgLyAyKVwiLCBcImNvcyhwaGkgLyAyKVwiLCAwXSxbMCwgMCwgMCwgMV1dLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwgMCwgMCwgMF0sIFswLCBucC5jb3MocF9waGkvMiksIDFqKm5wLnNpbihwX3BoaS8yKSwgMF0sIFswLCAxaipucC5zaW4ocF9waGkvMiksIG5wLmNvcyhwX3BoaS8yKSwgMF0sIFswLCAwLCAwLCAxXV1cIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiXVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdG1zOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJNw7hsbWVyLVPDuHJlbnNlbiBnYXRlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0W1wiMS9zcXJ0KDIpXCIsIDAsIDAsIFwiKC1pKmV4cCgtaSoocGhpMCtwaGkxKSkpL3NxcnQoMilcIl0sXG5cblx0XHRcdFx0WzAsIFwiMS9zcXJ0KDIpXCIsIFwiKC1pKmV4cCgtaSoocGhpMC1waGkxKSkpL3NxcnQoMilcIiwgMF0sXG5cblx0XHRcdFx0WzAsIFwiKC1pKmV4cChpKihwaGkwLXBoaTEpKSkvc3FydCgyKVwiLCBcIjEvc3FydCgyKVwiLCAwXSxcblxuXHRcdFx0XHRbXCIoLWkqZXhwKGkqKHBoaTArcGhpMSkpKS9zcXJ0KDIpXCIsIDAsIDAsIFwiMS9zcXJ0KDIpXCJdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJwaGkwXCIsIFwicGhpMVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiLFwiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJNU1wiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJtc1wiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpMFwiLCBcInBoaTFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIG1zKCVwaGkwLCAlcGhpMSk6XFxuICAgIDEvU1FSVCgyKSwgMCwgMCwgKC1pKkVYUCgtaSooJXBoaTArJXBoaTEpKSkvU1FSVCgyKVxcbiAgICAwLCAxL1NRUlQoMiksICgtaSpFWFAoLWkqKCVwaGkwLSVwaGkxKSkpL1NRUlQoMiksIDBcXG4gICAgMCwgKC1pKkVYUChpKiglcGhpMC0lcGhpMSkpKS9TUVJUKDIpLCAxL1NRUlQoMiksIDBcXG4gICAgKC1pKkVYUChpKiglcGhpMCslcGhpMSkpKS9TUVJUKDIpLCAwLCAwLCAxL1NRUlQoMilcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIm1zXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGkwXCIsIFwicGhpMVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbIFsgMS9xdWlsX3NxcnQoMiksIDAsIDAsICgtMWoqcXVpbF9leHAoLTFqKihwX3BoaTArcF9waGkxKSkpL3F1aWxfc3FydCgyKSBdLCBbIDAsIDEvcXVpbF9zcXJ0KDIpLCAoLTFqKnF1aWxfZXhwKC0xaioocF9waGkwLXBfcGhpMSkpKS9xdWlsX3NxcnQoMiksIDAgXSwgWyAwLCAoLTFqKnF1aWxfZXhwKDFqKihwX3BoaTAtcF9waGkxKSkpL3F1aWxfc3FydCgyKSwgMS9xdWlsX3NxcnQoMiksIDAgXSwgWyAoLTFqKnF1aWxfZXhwKDFqKihwX3BoaTArcF9waGkxKSkpL3F1aWxfc3FydCgyKSwgMCwgMCwgMS9xdWlsX3NxcnQoMikgXSBdXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwibXNcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwibXNcIixcblx0XHRcdFx0XHQvL0BUT0RPIGFkZCBmdW5jdGlvblxuXHRcdFx0XHRcdGZ1bmM6IFwiVE9ET1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIm1zXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJtc1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpMFwiLCBcInBoaTFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiWyBbIDEvbnAuc3FydCgyKSwgMCwgMCwgKC0xaipucC5leHAoLTFqKihwX3BoaTArcF9waGkxKSkpL25wLnNxcnQoMikgXSwgWyAwLCAxL25wLnNxcnQoMiksICgtMWoqbnAuZXhwKC0xaioocF9waGkwLXBfcGhpMSkpKS9ucC5zcXJ0KDIpLCAwIF0sIFsgMCwgKC0xaipucC5leHAoMWoqKHBfcGhpMC1wX3BoaTEpKSkvbnAuc3FydCgyKSwgMS9ucC5zcXJ0KDIpLCAwIF0sIFsgKC0xaipucC5leHAoMWoqKHBfcGhpMCtwX3BoaTEpKSkvbnAuc3FydCgyKSwgMCwgMCwgMS9ucC5zcXJ0KDIpIF0gXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bWF0cml4OiBbW1wiY29zKHRoZXRhKVwiLCAwLCAwLCBcIi1pKnNpbih0aGV0YSlcIl0sWzAsIFwiY29zKHRoZXRhKVwiLCBcIi1pKnNpbih0aGV0YSlcIiwgMF0sWzAsIFwiLWkqc2luKHRoZXRhKVwiLCBcImNvcyh0aGV0YSlcIiwgMF0sW1wiLWkqc2luKHRoZXRhKVwiLCAwLCAwLCBcImNvcyh0aGV0YSlcIl1dLFxuXHRcdFx0XHRcdGFycmF5OiBcIlsgWyAxL25wLnNxcnQoMiksIDAsIDAsICgtMWoqbnAuZXhwKC0xaioocF9waGkwK3BfcGhpMSkpKS9ucC5zcXJ0KDIpIF0sIFsgMCwgMS9ucC5zcXJ0KDIpLCAoLTFqKm5wLmV4cCgtMWoqKHBfcGhpMC1wX3BoaTEpKSkvbnAuc3FydCgyKSwgMCBdLCBbIDAsICgtMWoqbnAuZXhwKDFqKihwX3BoaTAtcF9waGkxKSkpL25wLnNxcnQoMiksIDEvbnAuc3FydCgyKSwgMCBdLCBbICgtMWoqbnAuZXhwKDFqKihwX3BoaTArcF9waGkxKSkpL25wLnNxcnQoMiksIDAsIDAsIDEvbnAuc3FydCgyKSBdIF1cIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaTBcIiwgXCJwaGkxXCJdXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3IyOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIFBJLzIgcm90YXRpb24gb3ZlciBaLWF4aXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwxLDBdLFxuXHRcdFx0XHRbMCwwLDAsXCJleHAoaSAqIHBpIC8gMilcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlomI3gxRDZEMTsvMlwiLFxuXHRcdFx0XHRyb290OiBcInIyXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvMlwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzJcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRQaGFzZVNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiB7dGhldGE6XCJNX1BJLzJcIn1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzJcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvMlwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjdTFcIiwgcGFyYW1zOiB7IGxhbWJkYTogXCJwaS8yXCIgfX1cblx0XHRcdFx0XHRdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJaXsK9XCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgMSwgMCwgMF0sIFswLCAwLCAxLCAwXSwgWzAsIDAsIDAsIG5wLmV4cCgxaiAqIG5wLnBpIC8gMildIF1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiU1wiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjcjQ6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgUEkvNCByb3RhdGlvbiBvdmVyIFotYXhpc1wiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDEsMF0sXG5cdFx0XHRcdFswLDAsMCxcImV4cChpICogcGkgLyA0KVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJkb3RcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiWiYjeDFENkQxOy80XCIsXG5cdFx0XHRcdHJvb3Q6IFwicjRcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS80XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvNFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udHJvbGxlZFBoYXNlU2hpZnRcIixcblx0XHRcdFx0XHRwYXJhbXM6IHt0aGV0YTpcIk1fUEkvNFwifVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvNFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjdTFcIiwgcGFyYW1zOiB7IGxhbWJkYTogXCJwaS80XCIgfX1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1MVwiLCBwYXJhbXM6IHsgbGFtYmRhOiBcInBpLzRcIiB9fVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJaXsK8XCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgMSwgMCwgMF0sIFswLCAwLCAxLCAwXSwgWzAsIDAsIDAsIG5wLmV4cCgxaiAqIG5wLnBpIC8gNCldIF1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiVFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjcjg6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgUEkvOCByb3RhdGlvbiBvdmVyIFotYXhpc1wiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDEsMF0sXG5cdFx0XHRcdFswLDAsMCxcImV4cChpICogcGkgLyA4KVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJkb3RcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiWiYjeDFENkQxOy84XCIsXG5cdFx0XHRcdHJvb3Q6IFwicjhcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS84XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvOFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udHJvbGxlZFBoYXNlU2hpZnRcIixcblx0XHRcdFx0XHRwYXJhbXM6IHt0aGV0YTpcIk1fUEkvOFwifVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvOFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjdTFcIiwgcGFyYW1zOiB7IGxhbWJkYTogXCJwaS84XCIgfX1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1MVwiLCBwYXJhbXM6IHsgbGFtYmRhOiBcInBpLzhcIiB9fVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJaXuKFm1wiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLCAwLCAwLCAwXSwgWzAsIDEsIDAsIDBdLCBbMCwgMCwgMSwgMF0sIFswLCAwLCAwLCBucC5leHAoMWogKiBucC5waSAvIDgpXSBdXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRtYXRyaXg6IFtbMSwwLDAsMF0sWzAsMSwwLDBdLFswLDAsMSwwXSxbMCwwLDAsXCJleHAoaSAqIHBpIC8gOClcIl1dLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwgMCwgMCwgMF0sIFswLCAxLCAwLCAwXSwgWzAsIDAsIDEsIDBdLCBbMCwgMCwgMCwgbnAuZXhwKDFqICogbnAucGkgLyA4KV0gXVwiXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3J4OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIHJvdGF0aW9uIGFyb3VuZCB0aGUgWC1heGlzIGJ5IGdpdmVuIGFuZ2xlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WyAxLCAwLCAwLCAwIF0sXG5cdFx0XHRcdFsgMCwgMSwgMCwgMCBdLFxuXHRcdFx0XHRbIDAsIDAsIFwiY29zKHRoZXRhIC8gMilcIiwgXCItaSAqIHNpbih0aGV0YSAvIDIpXCIgXSxcblx0XHRcdFx0WyAwLCAwLCBcIi1pICogc2luKHRoZXRhIC8gMilcIiwgXCJjb3ModGhldGEgLyAyKVwiIF1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlJYXCIsXG5cdFx0XHRcdHJvb3Q6IFwicnhcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3J4XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgY3J4KCV0aGV0YSk6XFxuICAgIDEsIDAsIDAsIDBcXG4gICAgMCwgMSwgMCwgMFxcbiAgICAwLCAwLCBDT1MoJXRoZXRhLzIpLCAtaSpTSU4oJXRoZXRhLzIpXFxuICAgIDAsIDAsIC1pKlNJTigldGhldGEvMiksIENPUygldGhldGEvMilcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwicnhcIixcblx0XHRcdFx0XHRcdHBhcmFtczogeyB0aGV0YTogXCJ0aGV0YVwiIH0sXG5cdFx0XHRcdFx0XHR0eXBlOiBcImNvbnRyb2xsZWRcIixcblx0XHRcdFx0XHRcdG5vdFRmcVN1cHBvcnRlZDogdHJ1ZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjcnhcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbIDEsIDAsIDAsIDAgXSwgWyAwLCAxLCAwLCAwIF0sIFsgMCwgMCwgcXVpbF9jb3MocF90aGV0YSAvIDIpLCAtMWoqcXVpbF9zaW4ocF90aGV0YSAvIDIpIF0sIFsgMCwgMCwgLTFqKnF1aWxfc2luKHBfdGhldGEgLyAyKSwgcXVpbF9jb3MocF90aGV0YSAvIDIpIF1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRVbml0YXJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdFx0XHRtYXRyaXg6IFtbW1wiY29zKHRoZXRhLzIpXCIsIFwiMFwiXSwgW1wiMFwiLCBcIi1zaW4odGhldGEvMilcIl1dLFxuXHRcdFx0XHRcdFx0XHQgW1tcIjBcIiwgXCItc2luKHRoZXRhLzIpXCJdLCBbXCJjb3ModGhldGEvMilcIiwgXCIwXCJdXV1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDb250cm9sbGVkIFJ4XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjdTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInRoZXRhXCIsIHBoaTogXCItMSpwaS8yXCIsIGxhbWJkYTogXCJwaS8yXCIgfX0sXG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjdTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcInRoZXRhXCIsIHBoaTogXCItMSpwaS8yXCIsIGxhbWJkYTogXCJwaS8yXCIgfX0sXG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWyAxLCAwLCAwLCAwIF0sIFsgMCwgMSwgMCwgMCBdLCBbIDAsIDAsIG5wLmNvcyhwX3RoZXRhIC8gMiksIC0xaipucC5zaW4ocF90aGV0YSAvIDIpIF0sIFsgMCwgMCwgLTFqKm5wLnNpbihwX3RoZXRhIC8gMiksIG5wLmNvcyhwX3RoZXRhIC8gMikgXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiUlhcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3J5OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIHJvdGF0aW9uIGFyb3VuZCB0aGUgWS1heGlzIGJ5IGdpdmVuIGFuZ2xlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WyAxLCAwLCAwLCAwIF0sXG5cdFx0XHRcdFsgMCwgMSwgMCwgMCBdLFxuXHRcdFx0XHRbIDAsIDAsIFwiY29zKHRoZXRhIC8gMilcIiwgXCItMSAqIHNpbih0aGV0YSAvIDIpXCIgXSxcblx0XHRcdFx0WyAwLCAwLCBcInNpbih0aGV0YSAvIDIpXCIsIFwiY29zKHRoZXRhIC8gMilcIiBdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJSWVwiLFxuXHRcdFx0XHRyb290OiBcInJ5XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIGNyeSgldGhldGEpOlxcbiAgICAxLCAwLCAwLCAwXFxuICAgIDAsIDEsIDAsIDBcXG4gICAgMCwgMCwgQ09TKCV0aGV0YS8yKSwgLTEqU0lOKCV0aGV0YS8yKVxcbiAgICAwLCAwLCBTSU4oJXRoZXRhLzIpLCBDT1MoJXRoZXRhLzIpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInJ5XCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHsgdGhldGE6IFwidGhldGFcIiB9LFxuXHRcdFx0XHRcdFx0dHlwZTogXCJjb250cm9sbGVkXCIsXG5cdFx0XHRcdFx0XHRub3RUZnFTdXBwb3J0ZWQ6IHRydWVcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB5cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3J5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWyAxLCAwLCAwLCAwIF0sWyAwLCAxLCAwLCAwIF0sWyAwLCAwLCBxdWlsX2NvcyhwX3RoZXRhIC8gMiksIC0xKnF1aWxfc2luKHBfdGhldGEgLyAyKSBdLFsgMCwgMCwgcXVpbF9zaW4ocF90aGV0YSAvIDIpLCBxdWlsX2NvcyhwX3RoZXRhIC8gMikgXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udHJvbGxlZFVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdLFxuXHRcdFx0XHRcdG1hdHJpeDogW1tbXCJjb3ModGhldGEvMilcIiwgXCIwXCJdLCBbXCItc2luKHRoZXRhLzIpXCIsIFwiMFwiXV0sXG5cdFx0XHRcdFx0XHRcdCBbW1wic2luKHRoZXRhLzIpXCIsIFwiMFwiXSwgW1wiY29zKHRoZXRhLzIpXCIsIFwiMFwiXV1dXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFzaGFycDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ29udHJvbGxlZCBSeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdGVxdWl2YWxlbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwidGhldGEvMlwiLCBwaGk6IFwiMFwiLCBsYW1iZGE6IFwiMFwiIH0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjeFwiLCB3aXJlczogWzAsIDFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcIi0xKnRoZXRhIC8gMlwiLCBwaGk6IFwiMFwiLCBsYW1iZGE6IFwiMFwiIH0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjeFwiLCB3aXJlczogWzAsIDFdIH1cblx0XHRcdFx0XHRdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdGVxdWl2YWxlbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJ1M1wiLCBwYXJhbXM6IHsgdGhldGE6IFwidGhldGEvMlwiLCBwaGk6IFwiMFwiLCBsYW1iZGE6IFwiMFwiIH0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjeFwiLCB3aXJlczogWzAsIDFdIH0sXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwidTNcIiwgcGFyYW1zOiB7IHRoZXRhOiBcIi0xKnRoZXRhIC8gMlwiLCBwaGk6IFwiMFwiLCBsYW1iZGE6IFwiMFwiIH0sIHdpcmVzOiBbMV0gfSxcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjeFwiLCB3aXJlczogWzAsIDFdIH1cblx0XHRcdFx0XHRdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sgMSwgMCwgMCwgMCBdLFsgMCwgMSwgMCwgMCBdLFsgMCwgMCwgbnAuY29zKHBfdGhldGEgLyAyKSwgLTEqbnAuc2luKHBfdGhldGEgLyAyKSBdLFsgMCwgMCwgbnAuc2luKHBfdGhldGEgLyAyKSwgbnAuY29zKHBfdGhldGEgLyAyKSBdXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJSWVwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjcno6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgcm90YXRpb24gYXJvdW5kIHRoZSBaLWF4aXMgYnkgZ2l2ZW4gYW5nbGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsIDAsIFwiY29zKHBoaSAvIDIpIC0gaSAqIHNpbihwaGkgLyAyKVwiLCAwXSxcblx0XHRcdFx0WzAsIDAsIDAsIFwiY29zKHBoaSAvIDIpICsgaSAqIHNpbihwaGkgLyAyKVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW1wicGhpXCJdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJkb3RcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlJaXCIsXG5cdFx0XHRcdHJvb3Q6IFwicnpcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3J6XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIGNyeiglcGhpKTpcXG4gICAgMSwgMCwgMCwgMFxcbiAgICAwLCAxLCAwLCAwXFxuICAgIDAsIDAsIENPUyglcGhpIC8gMikgLSBpICogU0lOKCVwaGkgLyAyKSwgMFxcbiAgICAwLCAwLCAwLCBDT1MoJXBoaSAvIDIpICsgaSAqIFNJTiglcGhpIC8gMilcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNyelwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwgMCwgMCwgMF0sIFswLCAxLCAwLCAwXSwgWzAsIDAsIHF1aWxfY29zKHBfcGhpIC8gMikgLSAxaiAqIHF1aWxfc2luKHBfcGhpIC8gMiksIDBdLCBbMCwgMCwgMCwgcXVpbF9jb3MocF9waGkgLyAyKSArIDFqICogcXVpbF9zaW4ocF9waGkgLyAyKV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcInJ6XCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHsgcGhpOiBcInBoaVwiIH0sXG5cdFx0XHRcdFx0XHR0eXBlOiBcImNvbnRyb2xsZWRcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRSb3RhdGVaXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNvbnRyb2xsZWQgUnpcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgMSwgMCwgMF0sIFswLCAwLCBucC5jb3MocF9waGkgLyAyKSAtIDFqICogbnAuc2luKHBfcGhpIC8gMiksIDBdLCBbMCwgMCwgMCwgbnAuY29zKHBfcGhpIC8gMikgKyAxaiAqIG5wLnNpbihwX3BoaSAvIDIpXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiUlpcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3UxOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIHJvdGF0aW9uIGFib3V0IHRoZSBaIGF4aXNcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwxLDBdLFxuXHRcdFx0XHRbMCwwLDAsXCJleHAoaSAqIGxhbWJkYSlcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtcImxhbWJkYVwiXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwiYm94XCJdLFxuXHRcdFx0XHRsYWJlbDogXCJDVTFcIixcblx0XHRcdFx0cm9vdDogXCJ1MVwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDUEhBU0VcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcImxhbWJkYVwiXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsIDAsIDAsIDBdLCBbMCwgMSwgMCwgMF0sIFswLCAwLCAxLCAwXSwgWzAsIDAsIDAsIG5wLmV4cCgxaipwX2xhbWJkYSldXVwiLFxuXHRcdFx0XHRcdG5vdFRmcVN1cHBvcnRlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udHJvbGxlZFBoYXNlU2hpZnRcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwgMCwgMCwgMF0sIFswLCAxLCAwLCAwXSwgWzAsIDAsIDEsIDBdLCBbMCwgMCwgMCwgbnAuZXhwKDFqKnBfbGFtYmRhKV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlBIXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNwXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjdTI6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgcm90YXRpb24gYWJvdXQgdGhlIFgrWiBheGlzXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WyAxLCAwLCAwLCAwIF0sXG5cdFx0XHRcdFsgMCwgMSwgMCwgMCBdLFxuXHRcdFx0XHRbIDAsIDAsIFwiMSAvIHNxcnQoMilcIiwgXCItZXhwKGkgKiBsYW1iZGEpICogMSAvIHNxcnQoMilcIiBdLFxuXHRcdFx0XHRbIDAsIDAsIFwiZXhwKGkgKiBwaGkpICogMSAvIHNxcnQoMilcIiwgXCJleHAoaSAqIGxhbWJkYSArIGkgKiBwaGkpICogMSAvIHNxcnQoMilcIiBdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJkb3RcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiQ1UyXCIsXG5cdFx0XHRcdHJvb3Q6IFwidTJcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3UyXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0ZGVmZ2F0ZTogXCJERUZHQVRFIGN1MiglcGhpLCAlbGFtYmRhKTpcXG4gICAgMSwgMCwgMCwgMFxcbiAgICAwLCAxLCAwLCAwXFxuICAgIDAsIDAsIDEvU1FSVCgyKSwgLTEqRVhQKGkqJWxhbWJkYSkqMS9TUVJUKDIpXFxuICAgIDAsIDAsIEVYUChpKiVwaGkpKjEvU1FSVCgyKSwgRVhQKGkqJWxhbWJkYSArIGkqJXBoaSkqMS9TUVJUKDIpXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjdTJcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwgMCwgMS9xdWlsX3NxcnQoMiksIC1xdWlsX2V4cCgxaipwX2xhbWJkYSkqMS9xdWlsX3NxcnQoMildLFswLCAwLCBxdWlsX2V4cCgxaipwX3BoaSkqMS9xdWlsX3NxcnQoMiksIHF1aWxfZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSoxL3F1aWxfc3FydCgyKV1dXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3UyXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsIDAsIDEvbnAuc3FydCgyKSwgLW5wLmV4cCgxaipwX2xhbWJkYSkqMS9ucC5zcXJ0KDIpXSxbMCwgMCwgbnAuZXhwKDFqKnBfcGhpKSoxL25wLnNxcnQoMiksIG5wLmV4cCgxaipwX2xhbWJkYSsxaipwX3BoaSkqMS9ucC5zcXJ0KDIpXV1cIixcblx0XHRcdFx0XHRub3RUZnFTdXBwb3J0ZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRVbml0YXJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0bWF0cml4OiBbW1tcIjEvc3FydCgyKVwiLCBcIjBcIl0sIFtcIi1jb3MobGFtYmRhKS9zcXJ0KDIpXCIsIFwiLXNpbihsYW1iZGEpL3NxcnQoMilcIl1dLFxuXHRcdFx0XHRcdFx0XHQgW1tcImNvcyhwaGkpL3NxcnQoMilcIiwgXCJzaW4ocGhpKS9zcXJ0KDIpXCJdLCBbXCJjb3MobGFtYmRhK3BoaSkvc3FydCgyKVwiLCBcInNpbihsYW1iZGErcGhpKS9zcXJ0KDIpXCJdXV1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCJwaGlcIiwgbGFtYmRhOiBcImxhbWJkYVwiIH0gfVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UzXCIsIHBhcmFtczogeyB0aGV0YTogXCJwaS8yXCIsIHBoaTogXCJwaGlcIiwgbGFtYmRhOiBcImxhbWJkYVwiIH0gfVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCAxL25wLnNxcnQoMiksIC1ucC5leHAoMWoqcF9sYW1iZGEpKjEvbnAuc3FydCgyKV0sWzAsIDAsIG5wLmV4cCgxaipwX3BoaSkqMS9ucC5zcXJ0KDIpLCBucC5leHAoMWoqcF9sYW1iZGErMWoqcF9waGkpKjEvbnAuc3FydCgyKV1dXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bWF0cml4OiBbWyAxLCAwLCAwLCAwIF0sWyAwLCAxLCAwLCAwIF0sWyAwLCAwLCBcIjEgLyBzcXJ0KDIpXCIsIFwiLWV4cChpICogbGFtYmRhKSAqIDEgLyBzcXJ0KDIpXCIgXSxbIDAsIDAsIFwiZXhwKGkgKiBwaGkpICogMSAvIHNxcnQoMilcIiwgXCJleHAoaSAqIGxhbWJkYSArIGkgKiBwaGkpICogMSAvIHNxcnQoMilcIiBdXSxcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwgMCwgMS9ucC5zcXJ0KDIpLCAtbnAuZXhwKDFqKnBfbGFtYmRhKSoxL25wLnNxcnQoMildLFswLCAwLCBucC5leHAoMWoqcF9waGkpKjEvbnAuc3FydCgyKSwgbnAuZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSoxL25wLnNxcnQoMildXVwiLFxuXHRcdFx0XHRcdHBhcmFtczogW1wicGhpXCIsIFwibGFtYmRhXCJdXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3UzOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIHJvdGF0aW9uIGdhdGUgd2l0aCAzIEV1bGVyIGFuZ2xlc1wiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsgMSwgMCwgMCwgMCBdLFxuXHRcdFx0XHRbIDAsIDEsIDAsIDAgXSxcblx0XHRcdFx0WyAwLCAwLCBcImNvcyh0aGV0YS8yKVwiLCBcIi1leHAoaSAqIGxhbWJkYSkgKiBzaW4odGhldGEgLyAyKVwiIF0sXG5cdFx0XHRcdFsgMCwgMCwgXCJleHAoaSAqIHBoaSkgKiBzaW4odGhldGEgLyAyKVwiLCBcImV4cChpICogbGFtYmRhICsgaSAqIHBoaSkgKiBjb3ModGhldGEgLyAyKVwiIF1cblx0XHRcdF0sXG5cblx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJkb3RcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiQ1UzXCIsXG5cdFx0XHRcdHJvb3Q6IFwidTNcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3UzXCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiLCBcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRkZWZnYXRlOiBcIkRFRkdBVEUgY3UzKCV0aGV0YSwgJXBoaSwgJWxhbWJkYSk6XFxuICAgIDEsIDAsIDAsIDBcXG4gICAgMCwgMSwgMCwgMFxcbiAgICAwLCAwLCBDT1MoJXRoZXRhLzIpLCAtMSpFWFAoaSolbGFtYmRhKSpTSU4oJXRoZXRhLzIpXFxuICAgIDAsIDAsIEVYUChpKiVwaGkpKlNJTigldGhldGEvMiksIEVYUChpKiVsYW1iZGEgKyBpKiVwaGkpKkNPUygldGhldGEvMilcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRweXF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN1M1wiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsIDAsIHF1aWxfY29zKHBfdGhldGEvMiksLXF1aWxfZXhwKDFqKnBfbGFtYmRhKSpxdWlsX3NpbihwX3RoZXRhLzIpXSxbMCwgMCwgcXVpbF9leHAoMWoqcF9waGkpKnF1aWxfc2luKHBfdGhldGEvMikscXVpbF9leHAoMWoqcF9sYW1iZGErMWoqcF9waGkpKnF1aWxfY29zKHBfdGhldGEvMildXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRuYW1lOiBcImN1M1wiLFxuXHRcdFx0XHRcdHBhcmFtczogW1widGhldGFcIiwgXCJwaGlcIiwgXCJsYW1iZGFcIl0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsIDAsIG5wLmNvcyhwX3RoZXRhLzIpLC1ucC5leHAoMWoqcF9sYW1iZGEpKm5wLnNpbihwX3RoZXRhLzIpXSxbMCwgMCwgbnAuZXhwKDFqKnBfcGhpKSpucC5zaW4ocF90aGV0YS8yKSxucC5leHAoMWoqcF9sYW1iZGErMWoqcF9waGkpKm5wLmNvcyhwX3RoZXRhLzIpXV1cIixcblx0XHRcdFx0XHRub3RUZnFTdXBwb3J0ZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRVbml0YXJ5XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiBbXCJ0aGV0YVwiLCBcInBoaVwiLCBcImxhbWJkYVwiXSxcblx0XHRcdFx0XHRtYXRyaXg6IFtbW1wiY29zKHRoZXRhLzIpXCIsIFwiMFwiXSwgW1wiLWNvcyhsYW1iZGEpKnNpbih0aGV0YS8yKVwiLCBcIi1zaW4obGFtYmRhKSpzaW4odGhldGEvMilcIl1dLFxuXHRcdFx0XHRcdFx0XHQgW1tcImNvcyhwaGkpKnNpbih0aGV0YS8yKVwiLCBcInNpbihwaGkpKnNpbih0aGV0YS8yKVwiXSwgW1wiY29zKGxhbWJkYStwaGkpKmNvcyh0aGV0YS8yKVwiLCBcInNpbihsYW1iZGErcGhpKSpjb3ModGhldGEvMilcIl1dXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCBucC5jb3MocF90aGV0YS8yKSwtbnAuZXhwKDFqKnBfbGFtYmRhKSpucC5zaW4ocF90aGV0YS8yKV0sWzAsIDAsIG5wLmV4cCgxaipwX3BoaSkqbnAuc2luKHBfdGhldGEvMiksbnAuZXhwKDFqKnBfbGFtYmRhKzFqKnBfcGhpKSpucC5jb3MocF90aGV0YS8yKV1dXCIsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bWF0cml4OiBbWyAxLCAwLCAwLCAwIF0sWyAwLCAxLCAwLCAwIF0sWyAwLCAwLCBcImNvcyh0aGV0YS8yKVwiLCBcIi1leHAoaSAqIGxhbWJkYSkgKiBzaW4odGhldGEgLyAyKVwiIF0sWyAwLCAwLCBcImV4cChpICogcGhpKSAqIHNpbih0aGV0YSAvIDIpXCIsIFwiZXhwKGkgKiBsYW1iZGEgKyBpICogcGhpKSAqIGNvcyh0aGV0YSAvIDIpXCIgXV0sXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsIDAsIG5wLmNvcyhwX3RoZXRhLzIpLC1ucC5leHAoMWoqcF9sYW1iZGEpKm5wLnNpbihwX3RoZXRhLzIpXSxbMCwgMCwgbnAuZXhwKDFqKnBfcGhpKSpucC5zaW4ocF90aGV0YS8yKSxucC5leHAoMWoqcF9sYW1iZGErMWoqcF9waGkpKm5wLmNvcyhwX3RoZXRhLzIpXV1cIixcblx0XHRcdFx0XHRwYXJhbXM6IFtcInRoZXRhXCIsIFwicGhpXCIsIFwibGFtYmRhXCJdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHFpc2tpdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY3VcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNzOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIFBJLzIgcm90YXRpb24gb3ZlciBaLWF4aXMgKHN5bm9ueW0gZm9yIGBjcjJgKVwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDEsMF0sXG5cdFx0XHRcdFswLDAsMCxcImV4cChpICogcGkgLyAyKVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJkb3RcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiU1wiLFxuXHRcdFx0XHRyb290OiBcInNcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCJwaS8yXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvMlwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWVzdDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY29udHJvbGxlZFBoYXNlU2hpZnRcIixcblx0XHRcdFx0XHRwYXJhbXM6IHt0aGV0YTpcIk1fUEkvMlwifVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvMlwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxYXNtOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjdTFcIiwgcGFyYW1zOiB7IGxhbWJkYTogXCJwaS8yXCIgfX1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxaXNraXQ6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImN1MVwiLCBwYXJhbXM6IHsgbGFtYmRhOiBcInBpLzJcIiB9fVxuXHRcdFx0XHQgICBdXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJaXsK9XCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDBdLFswLDEsMCwwXSxbMCwgMCwgMSwgMF0sWzAsIDAsIDAsIG5wLmV4cCgxaiAqIG5wLnBpIC8gMildXVwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiU1wiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRjdDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCBQSS80IHJvdGF0aW9uIG92ZXIgWi1heGlzIChzeW5vbnltIGZvciBgY3I0YClcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwXSxcblx0XHRcdFx0WzAsMCwxLDBdLFxuXHRcdFx0XHRbMCwwLDAsXCJleHAoaSAqIHBpIC8gNClcIl1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlRcIixcblx0XHRcdFx0cm9vdDogXCJ0XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwicGkvNFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzRcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNvbnRyb2xsZWRQaGFzZVNoaWZ0XCIsXG5cdFx0XHRcdFx0cGFyYW1zOiB7dGhldGE6XCJNX1BJLzRcIn1cblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcInBpLzRcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwicGkvNFwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjdTFcIiwgcGFyYW1zOiB7IGxhbWJkYTogXCJwaS80XCIgfX1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl7CvFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0YnJha2V0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJ1bml0YXJ5XCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwXSxbMCwxLDAsMF0sWzAsIDAsIDEsIDBdLFswLCAwLCAwLCBucC5leHAoMWogKiBucC5waSAvIDQpXV1cIixcblx0XHRcdFx0fSxcblx0XHRcdFx0YXFhc206IHtcblx0XHRcdFx0XHRuYW1lOiBcIlRcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3NkZzoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCAoLVBJLzIpIHJvdGF0aW9uIG92ZXIgWi1heGlzXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLDAsMSwwXSxcblx0XHRcdFx0WzAsMCwwLFwiZXhwKC1pICogcGkgLyAyKVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJkb3RcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiUyYjODIyNDtcIixcblx0XHRcdFx0cm9vdDogXCJzZGdcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvMlwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcIi1waS8yXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkUGhhc2VTaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczoge3RoZXRhOlwiLU1fUEkvMlwifVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwiLXBpLzJcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwiLTEqcGkvMlwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjdTFcIiwgcGFyYW1zOiB7IGxhbWJkYTogXCItMSpwaS8yXCIgfX1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl4twr1cIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCAxLCAwXSxbMCwgMCwgMCwgbnAuZXhwKC0xaiAqIG5wLnBpIC8gMildXVwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiU1wiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWUsXG5cdFx0XHRcdFx0ZGFnZ2VyOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y3RkZzoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiQ29udHJvbGxlZCAoLVBJLzQpIHJvdGF0aW9uIG92ZXIgWi1heGlzXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMF0sXG5cdFx0XHRcdFswLDAsMSwwXSxcblx0XHRcdFx0WzAsMCwwLFwiZXhwKC1pICogcGkgLyA0KVwiXVxuXHRcdFx0XSxcblx0XHRcdHBhcmFtczogW10sXG5cdFx0XHRkcmF3aW5nSW5mbzoge1xuXHRcdFx0XHRjb25uZWN0b3JzOiBbXCJkb3RcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiVCYjODIyNDtcIixcblx0XHRcdFx0cm9vdDogXCJ0ZGdcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVpbDoge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiB7XG5cdFx0XHRcdFx0XHRuYW1lOiBcImN1MVwiLFxuXHRcdFx0XHRcdFx0cGFyYW1zOiB7XG5cdFx0XHRcdFx0XHRcdGxhbWJkYTogXCItcGkvNFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IHtcblx0XHRcdFx0XHRcdG5hbWU6IFwiY3UxXCIsXG5cdFx0XHRcdFx0XHRwYXJhbXM6IHtcblx0XHRcdFx0XHRcdFx0bGFtYmRhOiBcIi1waS80XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjb250cm9sbGVkUGhhc2VTaGlmdFwiLFxuXHRcdFx0XHRcdHBhcmFtczoge3RoZXRhOlwiLU1fUEkvNFwifVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjdTFcIixcblx0XHRcdFx0XHRcdHBhcmFtczoge1xuXHRcdFx0XHRcdFx0XHRsYW1iZGE6IFwiLXBpLzRcIlxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWFzbToge1xuXHRcdFx0XHRcdHJlcGxhY2VtZW50OiBbXG5cdFx0XHRcdFx0XHR7IG5hbWU6IFwiY3UxXCIsIHBhcmFtczogeyBsYW1iZGE6IFwiLTEqcGkvNFwiIH19XG5cdFx0XHRcdCAgIF1cblx0XHRcdFx0fSxcblx0XHRcdFx0cWlza2l0OiB7XG5cdFx0XHRcdFx0cmVwbGFjZW1lbnQ6IFtcblx0XHRcdFx0XHRcdHsgbmFtZTogXCJjdTFcIiwgcGFyYW1zOiB7IGxhbWJkYTogXCItMSpwaS80XCIgfX1cblx0XHRcdFx0ICAgXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlyazoge1xuXHRcdFx0XHRcdG5hbWU6IFwiWl4twrxcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwidW5pdGFyeVwiLFxuXHRcdFx0XHRcdGFycmF5OiBcIltbMSwwLDAsMF0sWzAsMSwwLDBdLFswLCAwLCAxLCAwXSxbMCwgMCwgMCwgbnAuZXhwKC0xaiAqIG5wLnBpIC8gNCldXVwiLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiVFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWUsXG5cdFx0XHRcdFx0ZGFnZ2VyOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Y2N4OiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJUb2Zmb2xpIGFrYSBcXFwiQ0NOT1RcXFwiIGdhdGVcIixcblx0XHRcdG1hdHJpeDogW1xuXHRcdFx0XHRbMSwwLDAsMCwwLDAsMCwwXSxcblx0XHRcdFx0WzAsMSwwLDAsMCwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMSwwLDAsMCwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMSwwLDAsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDAsMSwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMCwwLDAsMSwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMCwwLDAsMCwxXSxcblx0XHRcdFx0WzAsMCwwLDAsMCwwLDEsMF1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJkb3RcIixcIm5vdFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiQ0NOT1RcIixcblx0XHRcdFx0cm9vdDogXCJ4XCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNDTk9UXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ0NYXCIsXG5cdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjY3hcIixcblx0XHRcdFx0XHRmdW5jOiBcInZvaWQgY2N4KFF1cmVnIHF1Yml0cywgY29uc3QgaW50IHExLCBjb25zdCBpbnQgcTIsIGNvbnN0IGludCBxMykge1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBoYWRhbWFyZChxdWJpdHMsIHEzKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHEyLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHBoYXNlU2hpZnQocXViaXRzLCBxMywgLU1fUEkvNCk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMSwgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICB0R2F0ZShxdWJpdHMsIHEzKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHEyLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHBoYXNlU2hpZnQocXViaXRzLCBxMywgLU1fUEkvNCk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMSwgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICB0R2F0ZShxdWJpdHMsIHEyKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgdEdhdGUocXViaXRzLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMSwgcTIpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBoYWRhbWFyZChxdWJpdHMsIHEzKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgdEdhdGUocXViaXRzLCBxMSk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHBoYXNlU2hpZnQocXViaXRzLCBxMiwgLU1fUEkvNCk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMSwgcTIpO1xcbn1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNDTk9UXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVpcms6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlhcIixcblx0XHRcdFx0XHRjb250cm9sbGVkOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGJyYWtldDoge1xuXHRcdFx0XHRcdG5hbWU6IFwiY2Nub3RcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhcWFzbToge1xuXHRcdFx0XHRcdG5hbWU6IFwiQ0NOT1RcIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNzd2FwOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJDb250cm9sbGVkIHN3YXAgYWthIFxcXCJGcmVka2luXFxcIiBnYXRlXCIsXG5cdFx0XHRtYXRyaXg6IFtcblx0XHRcdFx0WzEsMCwwLDAsMCwwLDAsMF0sXG5cdFx0XHRcdFswLDEsMCwwLDAsMCwwLDBdLFxuXHRcdFx0XHRbMCwwLDEsMCwwLDAsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDEsMCwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMCwwLDEsMCwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMCwwLDAsMSwwXSxcblx0XHRcdFx0WzAsMCwwLDAsMCwxLDAsMF0sXG5cdFx0XHRcdFswLDAsMCwwLDAsMCwwLDFdXG5cdFx0XHRdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImRvdFwiLFwieFwiLFwieFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiU1dQXCIsXG5cdFx0XHRcdHJvb3Q6IFwic3dhcFwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRjaXJxOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDU1dBUFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjc3dhcFwiLFxuXHRcdFx0XHRcdGZ1bmM6IFwidm9pZCBjc3dhcChRdXJlZyBxdWJpdHMsIGNvbnN0IGludCBxMSwgY29uc3QgaW50IHEyLCBjb25zdCBpbnQgcTMpIHtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHEzLCBxMik7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGhhZGFtYXJkKHF1Yml0cywgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTIsIHEzKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgcGhhc2VTaGlmdChxdWJpdHMsIHEzLCAtTV9QSS80KTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHExLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHRHYXRlKHF1Yml0cywgcTMpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICBjb250cm9sbGVkTm90KHF1Yml0cywgcTIsIHEzKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgcGhhc2VTaGlmdChxdWJpdHMsIHEzLCAtTV9QSS80KTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHExLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIHRHYXRlKHF1Yml0cywgcTIpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICB0R2F0ZShxdWJpdHMsIHEzKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgaGFkYW1hcmQocXViaXRzLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMSwgcTIpO1xcblwiK1xuXHRcdFx0XHRcdFx0ICBcIiAgICB0R2F0ZShxdWJpdHMsIHExKTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgcGhhc2VTaGlmdChxdWJpdHMsIHEyLCAtTV9QSS80KTtcXG5cIitcblx0XHRcdFx0XHRcdCAgXCIgICAgY29udHJvbGxlZE5vdChxdWJpdHMsIHEyLCBxMyk7XFxuXCIrXG5cdFx0XHRcdFx0XHQgIFwiICAgIGNvbnRyb2xsZWROb3QocXViaXRzLCBxMywgcTIpO1xcbn1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNvbnRyb2xsZWQgU1dBUFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIkNTV0FQXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJDU1dBUFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1aXJrOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTd2FwXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDAsMCwwLDAsMF0sIFswLDEsMCwwLDAsMCwwLDBdLCBbMCwwLDEsMCwwLDAsMCwwXSwgWzAsMCwwLDEsMCwwLDAsMF0sIFswLDAsMCwwLDEsMCwwLDBdLCBbMCwwLDAsMCwwLDAsMSwwXSwgWzAsMCwwLDAsMCwxLDAsMF0sIFswLDAsMCwwLDAsMCwwLDFdXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTV0FQXCIsXG5cdFx0XHRcdFx0Y29udHJvbGxlZDogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGNzcnN3YXA6IHtcblx0XHRcdGRlc2NyaXB0aW9uOiBcIkNvbnRyb2xsZWQgc3F1YXJlIHJvb3Qgb2Ygc3dhcFwiLFxuXHRcdFx0bWF0cml4OiBbXG5cdFx0XHRcdFsxLDAsMCwwLDAsMCwwLDBdLFxuXHRcdFx0XHRbMCwxLDAsMCwwLDAsMCwwXSxcblx0XHRcdFx0WzAsMCwxLDAsMCwwLDAsMF0sXG5cdFx0XHRcdFswLDAsMCwxLDAsMCwwLDBdLFxuXHRcdFx0XHRbMCwwLDAsMCwxLDAsMCwwXSxcblx0XHRcdFx0WzAsMCwwLDAsMCxcIjAuNSAqICgxICsgaSlcIixcIjAuNSAqICgxIC0gaSlcIiwwXSxcblx0XHRcdFx0WzAsMCwwLDAsMCxcIjAuNSAqICgxIC0gaSlcIixcIjAuNSAqICgxICsgaSlcIiwwXSxcblx0XHRcdFx0WzAsMCwwLDAsMCwwLDAsMV1cblx0XHRcdF0sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZG90XCIsXCJib3hcIixcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiJiN4MjIxQTtTV1BcIixcblx0XHRcdFx0cm9vdDogXCJzcnN3YXBcIlxuXHRcdFx0fSxcblx0XHRcdGV4cG9ydEluZm86IHtcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcImNzcnN3YXBcIixcblx0XHRcdFx0XHQvL0BUT0RPIGFkZCBmdW5jdGlvblxuXHRcdFx0XHRcdGZ1bmM6IFwiVE9ET1wiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNpcnE6IHtcblx0XHRcdFx0XHRyZXBsYWNlbWVudDoge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJzcnN3YXBcIixcblx0XHRcdFx0XHRcdHR5cGU6IFwiY29udHJvbGxlZFwiLFxuXHRcdFx0XHRcdFx0bm90VGZxU3VwcG9ydGVkOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjc3Jzd2FwXCIsXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGRlZmdhdGU6IFwiREVGR0FURSBjc3Jzd2FwOlxcbiAgICAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwXFxuICAgIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDBcXG4gICAgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMFxcbiAgICAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwXFxuICAgIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDBcXG4gICAgMCwgMCwgMCwgMCwgMCwgMC41KzAuNWksIDAuNS0wLjVpLCAwXFxuICAgIDAsIDAsIDAsIDAsIDAsIDAuNS0wLjVpLCAwLjUrMC41aSwgMFxcbiAgICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cHlxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJjc3Jzd2FwXCIsXG5cdFx0XHRcdFx0YXJyYXk6IFwiW1sxLDAsMCwwLDAsMCwwLDBdLFswLDEsMCwwLDAsMCwwLDBdLFswLDAsMSwwLDAsMCwwLDBdLFswLDAsMCwxLDAsMCwwLDBdLFswLDAsMCwwLDEsMCwwLDBdLFswLDAsMCwwLDAsMC41ICogKDEgKyAxaiksMC41ICogKDEgLSAxaiksMF0sWzAsMCwwLDAsMCwwLjUgKiAoMSAtIDFqKSwwLjUgKiAoMSArIDFqKSwwXSxbMCwwLDAsMCwwLDAsMCwxXV1cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRicmFrZXQ6IHtcblx0XHRcdFx0XHRuYW1lOiBcInVuaXRhcnlcIixcblx0XHRcdFx0XHRhcnJheTogXCJbWzEsMCwwLDAsMCwwLDAsMF0sWzAsMSwwLDAsMCwwLDAsMF0sWzAsMCwxLDAsMCwwLDAsMF0sWzAsMCwwLDEsMCwwLDAsMF0sWzAsMCwwLDAsMSwwLDAsMF0sWzAsMCwwLDAsMCwwLjUgKiAoMSArIDFqKSwwLjUgKiAoMSAtIDFqKSwwXSxbMCwwLDAsMCwwLDAuNSAqICgxIC0gMWopLDAuNSAqICgxICsgMWopLDBdLFswLDAsMCwwLDAsMCwwLDFdXVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFxYXNtOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJTUVJUU1dBUFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xsZWQ6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRyZXNldDoge1xuXHRcdFx0ZGVzY3JpcHRpb246IFwiUmVzZXRzIHF1Yml0XCIsXG5cdFx0XHRtYXRyaXg6IFtdLFxuXHRcdFx0cGFyYW1zOiBbXSxcblx0XHRcdGRyYXdpbmdJbmZvOiB7XG5cdFx0XHRcdGNvbm5lY3RvcnM6IFtcImJveFwiXSxcblx0XHRcdFx0bGFiZWw6IFwiUlNUXCJcblx0XHRcdH0sXG5cdFx0XHRleHBvcnRJbmZvOiB7XG5cdFx0XHRcdHF1aWw6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJFU0VUXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwicmVzZXRcIixcblx0XHRcdFx0XHRub3RUZnFTdXBwb3J0ZWQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0cXVlc3Q6IHtcblx0XHRcdFx0XHRuYW1lOiBcInJlc2V0XCIsXG5cdFx0XHRcdFx0Ly9AVE9ETyBhZGQgZnVuY3Rpb25cblx0XHRcdFx0XHRmdW5jOiBcIlRPRE9cIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRxc2hhcnA6IHtcblx0XHRcdFx0XHRuYW1lOiBcIlJlc2V0XCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRtZWFzdXJlOiB7XG5cdFx0XHRkZXNjcmlwdGlvbjogXCJNZWFzdXJlcyBxdWJpdCBhbmQgc3RvcmVzIGNoYW5jZSAoMCBvciAxKSBpbnRvIGNsYXNzaWNhbCBiaXRcIixcblx0XHRcdG1hdHJpeDogW10sXG5cdFx0XHRwYXJhbXM6IFtdLFxuXHRcdFx0ZHJhd2luZ0luZm86IHtcblx0XHRcdFx0Y29ubmVjdG9yczogW1wiZ2F1Z2VcIl0sXG5cdFx0XHRcdGxhYmVsOiBcIlwiXG5cdFx0XHR9LFxuXHRcdFx0ZXhwb3J0SW5mbzoge1xuXHRcdFx0XHRxdWlsOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJNRUFTVVJFXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Y2lycToge1xuXHRcdFx0XHRcdG5hbWU6IFwibWVhc3VyZVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHF1ZXN0OiB7XG5cdFx0XHRcdFx0bmFtZTogXCJtZWFzdXJlXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cXNoYXJwOiB7XG5cdFx0XHRcdFx0bmFtZTogXCJNXCJcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR0aGlzLmluaXQobnVtUXViaXRzKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5kZWZhdWx0SHlicmlkT3B0aW9ucyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4ge1xuXHRcdG9wdGltaXplcjogXCJQb3dlbGxcIixcblx0XHR0b2xlcmFuY2U6IDAuMDAxLFxuXHRcdGNvc3RGdW5jdGlvbjoge1xuXHRcdFx0cHl0aG9uOiBcIlwiLFxuXHRcdFx0amF2YXNjcmlwdDogXCJcIlxuXHRcdH1cblx0fTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24obnVtUXViaXRzLCBvcHRpb25zKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHRoaXMubnVtUXViaXRzID0gbnVtUXViaXRzIHx8IDE7XG5cdHRoaXMuZ2F0ZXMgPSBbXTtcblx0dGhpcy5wYXJ0aXRpb25NYXAgPSBbXTtcblx0dGhpcy5wYXJ0aXRpb25Db3VudCA9IDA7XG5cdHRoaXMucGFydGl0aW9uSW5mbyA9IHt9O1xuXG5cdHRoaXMucGFyYW1zID0gW107XG5cdHRoaXMub3B0aW9ucyA9IHtcblx0XHRwYXJhbXM6IHt9LFxuXG5cdFx0aHlicmlkOiBmYWxzZSxcblx0XHRoeWJyaWRPcHRpb25zOiB0aGlzLmRlZmF1bHRIeWJyaWRPcHRpb25zKClcblx0fTtcblxuXHRpZighb3B0aW9ucy5rZWVwQ3VzdG9tR2F0ZXMpIHtcblx0XHR0aGlzLmN1c3RvbUdhdGVzID0ge307XG5cdH1cblxuXHR0aGlzLmNyZWdzID0ge307XG5cdHRoaXMuY29sbGFwc2VkID0gW107XG5cdHRoaXMucHJvYiA9IFtdO1xuXHR0aGlzLm1lYXN1cmVSZXNldHNRdWJpdCA9IGZhbHNlO1xuXHR0aGlzLnJldmVyc2VCaXRPcmRlciA9IGZhbHNlO1xuXG5cdHRoaXMuY2xlYXIoKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5jbGVhckdhdGVzID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuZ2F0ZXMgPSBbXTtcblx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMubnVtUXViaXRzOyBpKyspIHtcblx0XHR0aGlzLmdhdGVzLnB1c2goW10pO1xuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5jbGVhckdhdGVzKCk7XG5cdHRoaXMuaW5pdFN0YXRlKCk7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yZXNldFN0YXRlID0gZnVuY3Rpb24oKSB7XG5cdC8vIHJlc2V0IHN0YXRlXG5cdHRoaXMuc3RhdGUgPSB7fTtcblx0dGhpcy5zdGF0ZUJpdHMgPSAwO1xuXHR0aGlzLnBhcnRpdGlvbkNhY2hlID0ge307XG5cblx0Ly8gcmVzZXQgY3JlZ3Ncblx0Zm9yKHZhciBjcmVnIGluIHRoaXMuY3JlZ3MpIHtcblx0XHR2YXIgbGVuID0gdGhpcy5jcmVnc1tjcmVnXS5sZW5ndGggfHwgMDtcblx0XHR0aGlzLmNyZWdzW2NyZWddID0gW107XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0XHR0aGlzLmNyZWdzW2NyZWddLnB1c2goMCk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gcmVzZXQgbWVhc3VyZW1lbnRcblx0dGhpcy5jb2xsYXBzZWQgPSBbXTtcblx0dGhpcy5wcm9iID0gW107XG5cblx0Ly8gcmVzZXQgc3RhdGlzdGljc1xuXHR0aGlzLnN0YXRzID0ge1xuXHRcdGR1cmF0aW9uOiAwXG5cdH07XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaW5pdFN0YXRlID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMucmVzZXRTdGF0ZSgpO1xuXHR0aGlzLnN0YXRlW1wiMFwiXSA9IG1hdGguY29tcGxleCgxLCAwKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5mb3JtYXRDb21wbGV4ID0gZnVuY3Rpb24oY29tcGxleCwgb3B0aW9ucykge1xuXHRyZXR1cm4gZm9ybWF0Q29tcGxleDIoY29tcGxleC5yZSwgY29tcGxleC5pbSwgb3B0aW9ucyk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUubXVsdGlwbHlTcXVhcmVNYXRyaWNlcyA9IGZ1bmN0aW9uKG0xLCBtMikge1xuXHR2YXIgbGVuID0gbTEubGVuZ3RoO1xuXG5cdHZhciBjID0gbGVuO1xuXHR2YXIgZCA9IGxlbjtcblx0dmFyIGsgPSBsZW47XG5cblx0dmFyIHJlcyA9IFtdO1xuXHR3aGlsZShjLS0pIHtcblx0XHRyZXNbY10gPSBbXTtcblx0XHRkID0gbGVuO1xuXHRcdHdoaWxlKGQtLSkge1xuXHRcdFx0cmVzW2NdW2RdID0gMDtcblx0XHRcdGsgPSBsZW47XG5cdFx0XHR3aGlsZShrLS0pIHtcblx0XHRcdFx0aWYobTFbY11ba10gJiYgbTJba11bZF0pIHtcblx0XHRcdFx0XHRpZihyZXNbY11bZF0pIHtcblx0XHRcdFx0XHRcdHJlc1tjXVtkXSA9IG1hdGguYWRkKHJlc1tjXVtkXSwgbWF0aC5tdWx0aXBseShtMVtjXVtrXSwgbTJba11bZF0pKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVzW2NdW2RdID0gbWF0aC5tdWx0aXBseShtMVtjXVtrXSwgbTJba11bZF0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gcmVzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmlzSWRlbnRpdHlNYXRyaXggPSBmdW5jdGlvbihtLCBwcmVjaXNpb24pIHtcblx0aWYodHlwZW9mIHByZWNpc2lvbiA9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0cHJlY2lzaW9uID0gMTQ7XG5cdH1cblxuXHRmb3IodmFyIGkgPSAwOyBpIDwgbS5sZW5ndGg7IGkrKykge1xuXHRcdGZvcih2YXIgaiA9IDA7IGogPCBtLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRpZihtYXRoLnJvdW5kKG1baV1bal0sIHByZWNpc2lvbikgIT0gKGkgPT0gaiA/IDEgOiAwKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0cnVlO1xufVxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaXNVbml0YXJ5TWF0cml4ID0gZnVuY3Rpb24oVSwgcHJlY2lzaW9uKSB7XG5cdHJldHVybiB0aGlzLmlzSWRlbnRpdHlNYXRyaXgobWF0aC5tdWx0aXBseShVLCBtYXRoLmN0cmFuc3Bvc2UoVSkpLCBwcmVjaXNpb24pO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaXNIZXJtaXRpYW5NYXRyaXggPSBmdW5jdGlvbihILCBwcmVjaXNpb24pIHtcblx0dmFyIGRpZmYgPSB0aGlzLm1hdHJpeERpZmYoSCwgbWF0aC5jdHJhbnNwb3NlKEgpKVxuXG5cdHJldHVybiBkaWZmIDw9IG1hdGgucG93KDEwLCAtMSAqIChwcmVjaXNpb24gfHwgMTQpKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm1hdHJpeERpZmYgPSBmdW5jdGlvbihtYXRyaXgxLCBtYXRyaXgyKSB7XG5cdHZhciB0b3RhbCA9IDA7XG5cdHZhciBjb3VudCA9IDA7XG5cdGZvcih2YXIgciA9IDA7IHIgPCBtYXRyaXgxLmxlbmd0aDsgcisrKSB7XG5cdFx0dmFyIHJvdzEgPSBtYXRyaXgxW3JdO1xuXHRcdHZhciByb3cyID0gbWF0cml4MltyXTtcblx0XHRmb3IodmFyIGMgPSAwOyBjIDwgcm93MS5sZW5ndGg7IGMrKykge1xuXHRcdFx0dmFyIGl0ZW0xID0gcm93MVtjXTtcblx0XHRcdHZhciBpdGVtMiA9IHJvdzJbY107XG5cblx0XHRcdHZhciBpMSA9ICh0eXBlb2YgaXRlbTEgPT0gXCJvYmplY3RcIikgPyBpdGVtMSA6IG1hdGguY29tcGxleChpdGVtMSk7XG5cdFx0XHR2YXIgaTIgPSAodHlwZW9mIGl0ZW0yID09IFwib2JqZWN0XCIpID8gaXRlbTIgOiBtYXRoLmNvbXBsZXgoaXRlbTIpO1xuXG5cdFx0XHQvLyBkaXN0YW5jZSBpbiB0aGUgY29tcGxleCBwbGFuZVxuXHRcdFx0dmFyIGRpc3RhbmNlID0gbWF0aC5hYnMobWF0aC5zdWJ0cmFjdChpMSwgaTIpKTtcblxuXHRcdFx0dG90YWwgKz0gZGlzdGFuY2U7XG5cblx0XHRcdGNvdW50Kys7XG5cdFx0fVxuXHR9XG5cblx0dmFyIGRpZmYgPSBjb3VudCA/ICh0b3RhbCAvIGNvdW50KSA6IDA7XG5cblx0cmV0dXJuIGRpZmY7XG59O1xuXG5cbi8vXG4vLyBFeHRyYWN0IHZhcmlhYmxlcyBmcm9tIGV4cHJlc3Npb24gc3RyaW5nIGFuZCByZXR1cm5zIG9iamVjdCB3aXRoIGV4cHJlc3Npb24gc3RyaW5nIGFuZCBhcnJheSBvZiB2YXJpYWJsZSBuYW1lc1xuLy8gTm90ZSB0aGF0IHN5bWJvbCBcImpcIiBpcyBhdXRvbWF0aWNhbGx5IGNvbnZlcnRlZCB0byBcImlcIiAoaW1hZ2luYXJ5IHVuaXQgdXNlZCBpbiBweXRob24gaXMgXCJqXCIgYnV0IHdlIG5lZWQgXCJpXCIpXG4vL1xuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnBhcnNlTWF0aFN0cmluZyA9IGZ1bmN0aW9uKHN0cikge1xuXHR2YXIgdmFyaWFibGVzID0gW107XG5cblx0Ly8gY29udmVydCBpbWFnaW5hcnkgdW5pdCBcImpcIiB0byBcImlcIlxuXHR2YXIgbWF0aFRvU3RyaW5nSGFuZGxlciA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMpIHtcblx0XHRpZihub2RlLmlzU3ltYm9sTm9kZSkge1xuXHRcdFx0aWYobm9kZS5uYW1lID09IFwialwiKSB7XG5cdFx0XHRcdHJldHVybiBcImlcIjtcblx0XHRcdH1cblxuXHRcdFx0aWYodmFyaWFibGVzLmluZGV4T2Yobm9kZS5uYW1lKSA8IDApIHtcblx0XHRcdFx0dmFyaWFibGVzLnB1c2gobm9kZS5uYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKHN0ci5yZXBsYWNlKC9bXFx0XFxuXFxyXS9nbSwgXCJcIikpO1xuXG5cdHZhciBleHByZXNzaW9uID0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cblx0cmV0dXJuIHtcblx0XHRleHByZXNzaW9uOiBleHByZXNzaW9uLFxuXHRcdHZhcmlhYmxlczogdmFyaWFibGVzLFxuXHRcdG5vZGU6IG5vZGVcblx0fTtcbn07XG5cbi8vXG4vLyBFdmFsdWF0ZSBleHByZXNzaW9uXG4vL1xuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV2YWxNYXRoU3RyaW5nID0gZnVuY3Rpb24oc3RyLCB2YXJzKSB7XG5cdHZhcnMgPSB2YXJzIHx8IHt9O1xuXG5cdHZhciBwYXJzZWQgPSB0aGlzLnBhcnNlTWF0aFN0cmluZyhzdHIpO1xuXG5cdHZhciByZXMgPSBtYXRoLmV2YWx1YXRlKHBhcnNlZC5leHByZXNzaW9uLCB2YXJzKTtcblx0aWYocmVzIGluc3RhbmNlb2YgbWF0aC5NYXRyaXgpIHtcblx0XHRyZXR1cm4gcmVzLnRvQXJyYXkoKTtcblx0fVxuXG5cdHJldHVybiByZXM7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucGFyc2VNYXRyaXggPSBmdW5jdGlvbihNLCB2YXJzKSB7XG5cdHZhciBzZWxmID0gdGhpcztcblxuXHR2YXIgQSA9IG51bGw7XG5cdGlmKHR5cGVvZiBNID09IFwic3RyaW5nXCIpIHtcblx0XHRBID0gc2VsZi5ldmFsTWF0aFN0cmluZyhNLCB2YXJzKTtcblx0fSBlbHNlIHtcblx0XHRBID0gTTtcblx0fVxuXG5cdHZhciByZXMgPSBbXTtcblxuXHRBLm1hcChmdW5jdGlvbihyb3csIHJvd0luZGV4KSB7XG5cdFx0aWYoQXJyYXkuaXNBcnJheShyb3cpKSB7XG5cdFx0XHRyZXMucHVzaChbXSk7XG5cdFx0XHRyb3cubWFwKGZ1bmN0aW9uKHZhbCwgY29sSW5kZXgpIHtcblx0XHRcdFx0aWYodHlwZW9mIHZhbCA9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0cmVzW3Jvd0luZGV4XS5wdXNoKHNlbGYuZXZhbE1hdGhTdHJpbmcodmFsLCB2YXJzKSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmVzW3Jvd0luZGV4XS5wdXNoKHZhbCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZih0eXBlb2Ygcm93ID09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0cmVzLnB1c2goc2VsZi5ldmFsTWF0aFN0cmluZyhyb3csIHZhcnMpKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlcy5wdXNoKHJvdyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRyZXR1cm4gcmVzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm1hdHJpeEhhc0NvbXBsZXhFbGVtZW50ID0gZnVuY3Rpb24oTSkge1xuXHRmb3IodmFyIHIgPSAwOyByIDwgTS5sZW5ndGg7IHIrKykge1xuXHRcdHZhciByb3cgPSBNW3JdO1xuXG5cdFx0aWYocm93IGluc3RhbmNlb2YgQXJyYXkpIHtcblx0XHRcdGZvcih2YXIgYyA9IDA7IGMgPCByb3cubGVuZ3RoOyBjKyspIHtcblx0XHRcdFx0dmFyIGNlbGwgPSByb3dbY107XG5cblx0XHRcdFx0aWYoY2VsbCBpbnN0YW5jZW9mIG1hdGguQ29tcGxleCB8fCAoKHR5cGVvZiBjZWxsID09IFwib2JqZWN0XCIpICYmICgoY2VsbC5tYXRoanMgJiYgY2VsbC5tYXRoanMgPT0gXCJDb21wbGV4XCIpIHx8IChjZWxsLnR5cGUgJiYgY2VsbC50eXBlID09IFwiQ29tcGxleFwiKSkpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYocm93IGluc3RhbmNlb2YgbWF0aC5Db21wbGV4IHx8ICgodHlwZW9mIHJvdyA9PSBcIm9iamVjdFwiKSAmJiAoKHJvdy5tYXRoanMgJiYgcm93Lm1hdGhqcyA9PSBcIkNvbXBsZXhcIikgfHwgKHJvdy50eXBlICYmIHJvdy50eXBlID09IFwiQ29tcGxleFwiKSkpKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5cbi8vXG4vLyBPcHRpb25zOiB7XG4vLyAgICAgbWluaWZ5OiAgICAgICAgIGZhbHNlXG4vL1x0ICAgZml4ZWRXaWR0aDogICAgIGZhbHNlXG4vLyAgICAgZGVjaW1hbFBsYWNlczogIDE0LFxuLy8gICAgIGlvdGFDaGFyOiAgICAgICBcImlcIlxuLy8gfVxuLy9cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5zdHJpbmdpZnlNYXRyaXggPSBmdW5jdGlvbihNLCBvcHRpb25zKSB7XG5cdHZhciBzZWxmID0gdGhpcztcblxuXHQvLyBtYXRoanMgTWF0cml4IHRvIGFycmF5XG5cdHZhciBBID0gTS50b0FycmF5ID8gTS50b0FycmF5KCkgOiBNO1xuXG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBmb3JjZUNvbXBsZXggPSBmYWxzZTtcblx0aWYob3B0aW9ucy5maXhlZFdpZHRoKSB7XG5cdFx0Ly8gZm9yY2VDb21wbGV4IGlmIG1hdHJpeCBoYXMgYXQgbGVhc3Qgb25lIGNvbXBsZXggZWxlbWVudFxuXHRcdGZvcmNlQ29tcGxleCA9IHRoaXMubWF0cml4SGFzQ29tcGxleEVsZW1lbnQoQSk7XG5cdH1cblxuXHR2YXIgc3RyID0gXCJcIjtcblx0c3RyICs9IFwiW1wiO1xuXHRBLm1hcChmdW5jdGlvbihyb3csIHJvd0luZGV4KSB7XG5cdFx0aWYocm93SW5kZXggPiAwKSB7XG5cdFx0XHRzdHIgKz0gXCIsXCI7XG5cdFx0fVxuXHRcdGlmKCFvcHRpb25zLm1pbmlmeSkge1xuXHRcdFx0c3RyICs9IFwiXFxuICBcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3RyICs9IFwiIFwiO1xuXHRcdH1cblxuXHRcdGlmKHJvdyBpbnN0YW5jZW9mIEFycmF5KSB7XG5cdFx0XHRzdHIgKz0gXCJbXCI7XG5cdFx0XHRyb3cubWFwKGZ1bmN0aW9uKGVsLCBlbEluZGV4KSB7XG5cdFx0XHRcdGlmKGVsSW5kZXggPiAwKSB7XG5cdFx0XHRcdFx0c3RyICs9IFwiLCBcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZihlbCBpbnN0YW5jZW9mIG1hdGguQ29tcGxleCkge1xuXHRcdFx0XHRcdHN0ciArPSBzZWxmLmZvcm1hdENvbXBsZXgoZWwsIG9wdGlvbnMpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmKCh0eXBlb2YgZWwgPT0gXCJvYmplY3RcIikgJiYgKChlbC5tYXRoanMgJiYgZWwubWF0aGpzID09IFwiQ29tcGxleFwiKSB8fCAoZWwudHlwZSAmJiBlbC50eXBlID09IFwiQ29tcGxleFwiKSkpIHtcblx0XHRcdFx0XHRcdHN0ciArPSBmb3JtYXRDb21wbGV4MihlbC5yZSwgZWwuaW0sIG9wdGlvbnMpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZih0eXBlb2YgZWwgPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdFx0XHQvLyBleHByZXNzaW9uXG5cdFx0XHRcdFx0XHRcdHN0ciArPSBlbDtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGlmKGZvcmNlQ29tcGxleCkge1xuXHRcdFx0XHRcdFx0XHRcdHN0ciArPSBmb3JtYXRDb21wbGV4MihlbCwgMCwgb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0c3RyICs9IGZvcm1hdEZsb2F0KGVsLCBvcHRpb25zKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRzdHIgKz0gXCJdXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmKHJvdyBpbnN0YW5jZW9mIG1hdGguQ29tcGxleCkge1xuXHRcdFx0XHRzdHIgKz0gc2VsZi5mb3JtYXRDb21wbGV4KHJvdywgb3B0aW9ucyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZigodHlwZW9mIHJvdyA9PSBcIm9iamVjdFwiKSAmJiAoKHJvdy5tYXRoanMgJiYgcm93Lm1hdGhqcyA9PSBcIkNvbXBsZXhcIikgfHwgKHJvdy50eXBlICYmIHJvdy50eXBlID09IFwiQ29tcGxleFwiKSkpIHtcblx0XHRcdFx0XHRzdHIgKz0gZm9ybWF0Q29tcGxleDIoZWwucmUsIGVsLmltLCBvcHRpb25zKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZih0eXBlb2Ygcm93ID09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHRcdC8vIGV4cHJlc3Npb25cblx0XHRcdFx0XHRcdHN0ciArPSByb3c7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmKGZvcmNlQ29tcGxleCkge1xuXHRcdFx0XHRcdFx0XHRzdHIgKz0gZm9ybWF0Q29tcGxleDIocm93LCAwLCBvcHRpb25zKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHN0ciArPSBmb3JtYXRGbG9hdChyb3csIG9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdGlmKEEubGVuZ3RoKSB7XG5cdFx0aWYoIW9wdGlvbnMubWluaWZ5KSB7XG5cdFx0XHRzdHIgKz0gXCJcXG5cIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3RyICs9IFwiIFwiO1xuXHRcdH1cblx0fVxuXHRzdHIgKz0gXCJdXCI7XG5cblx0cmV0dXJuIHN0cjtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm1hdHJpeFJlID0gZnVuY3Rpb24oVSkge1xuXHR2YXIgcmVzID0gW107XG5cdGZvcih2YXIgciA9IDA7IHIgPCBVLmxlbmd0aDsgcisrKSB7XG5cdFx0dmFyIHJvdyA9IFVbcl07XG5cdFx0aWYoQXJyYXkuaXNBcnJheShyb3cpKSB7XG5cdFx0XHR2YXIgbmV3Um93ID0gW107XG5cdFx0XHRmb3IodmFyIGMgPSAwOyBjIDwgcm93Lmxlbmd0aDsgYysrKSB7XG5cdFx0XHRcdGlmKHR5cGVvZiByb3dbY10gPT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdG5ld1Jvdy5wdXNoKHJvd1tjXS5yZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bmV3Um93LnB1c2gocm93W2NdKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmVzLnB1c2gobmV3Um93KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYodHlwZW9mIHJvdyA9PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdG5ld1Jvdy5wdXNoKHJvdy5yZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRuZXdSb3cucHVzaChyb3cpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXM7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUubWF0cml4SW0gPSBmdW5jdGlvbihVKSB7XG5cdHZhciByZXMgPSBbXTtcblx0Zm9yKHZhciByID0gMDsgciA8IFUubGVuZ3RoOyByKyspIHtcblx0XHR2YXIgcm93ID0gVVtyXTtcblx0XHRpZihBcnJheS5pc0FycmF5KHJvdykpIHtcblx0XHRcdHZhciBuZXdSb3cgPSBbXTtcblx0XHRcdGZvcih2YXIgYyA9IDA7IGMgPCByb3cubGVuZ3RoOyBjKyspIHtcblx0XHRcdFx0aWYodHlwZW9mIHJvd1tjXSA9PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0bmV3Um93LnB1c2gocm93W2NdLmltKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRuZXdSb3cucHVzaCgwKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmVzLnB1c2gobmV3Um93KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYodHlwZW9mIHJvdyA9PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdG5ld1Jvdy5wdXNoKHJvdy5pbSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRuZXdSb3cucHVzaCgwKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm1hdHJpeEFicyA9IGZ1bmN0aW9uKFUpIHtcblx0dmFyIHJlcyA9IFtdO1xuXHRmb3IodmFyIHIgPSAwOyByIDwgVS5sZW5ndGg7IHIrKykge1xuXHRcdHZhciByb3cgPSBVW3JdO1xuXHRcdGlmKEFycmF5LmlzQXJyYXkocm93KSkge1xuXHRcdFx0dmFyIG5ld1JvdyA9IFtdO1xuXHRcdFx0Zm9yKHZhciBjID0gMDsgYyA8IHJvdy5sZW5ndGg7IGMrKykge1xuXHRcdFx0XHRuZXdSb3cucHVzaChtYXRoLmFicyhyb3dbY10pKTtcblx0XHRcdH1cblx0XHRcdHJlcy5wdXNoKG5ld1Jvdyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlcy5wdXNoKG1hdGguYWJzKHJvdykpO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXM7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUubWF0cml4QXJnID0gZnVuY3Rpb24oVSkge1xuXHR2YXIgcmVzID0gW107XG5cdGZvcih2YXIgciA9IDA7IHIgPCBVLmxlbmd0aDsgcisrKSB7XG5cdFx0dmFyIHJvdyA9IFVbcl07XG5cdFx0aWYoQXJyYXkuaXNBcnJheShyb3cpKSB7XG5cdFx0XHR2YXIgbmV3Um93ID0gW107XG5cdFx0XHRmb3IodmFyIGMgPSAwOyBjIDwgcm93Lmxlbmd0aDsgYysrKSB7XG5cdFx0XHRcdG5ld1Jvdy5wdXNoKG1hdGguYXJnKHJvd1tjXSkpO1xuXHRcdFx0fVxuXHRcdFx0cmVzLnB1c2gobmV3Um93KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzLnB1c2gobWF0aC5hcmcocm93KSk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJlcztcbn07XG5cblxuLy9cbi8vIGNvbWJpbmVMaXN0IGlzIGFycmF5IG9mIG9iamVjdHM6XG4vL1xuLy8ge1xuLy8gICAgIGNpcmN1aXQ6IDxRdWFudHVtQ2lyY3VpdD5cbi8vICAgICB3aXJlczogWzAsIDEsIDJdIC8vIGFycmF5IG9mIGRlc3RpbmF0aW9uIHF1Yml0cyAoZm9yIGVhY2ggd2lyZSBpbiBnaXZlbiBjaXJjdWl0KVxuLy8gfVxuLy9cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnNldENvbWJpbmVkU3RhdGUgPSBmdW5jdGlvbihjb21iaW5lTGlzdCkge1xuXHR2YXIgbmV3U3RhdGUgPSB7fTtcblx0dmFyIG5ld1N0YXRlQml0cyA9IDA7XG5cdHZhciB0b3RhbFF1Yml0cyA9IDA7XG5cdGZvcih2YXIgaXRlbUluZGV4ID0gMDsgaXRlbUluZGV4IDwgY29tYmluZUxpc3QubGVuZ3RoOyBpdGVtSW5kZXgrKykge1xuXHRcdHZhciBpdGVtID0gY29tYmluZUxpc3RbaXRlbUluZGV4XTtcblx0XHQvLyBjYWxjdWxhdGUgbnVtYmVyIG9mIHF1Yml0cyBiYXNlZCBvbiB3aXJlTWFwXG5cdFx0aXRlbS53aXJlcy5tYXAoZnVuY3Rpb24oZGVzdCkge1xuXHRcdFx0aWYoZGVzdCArIDEgPiB0b3RhbFF1Yml0cykge1xuXHRcdFx0XHR0b3RhbFF1Yml0cyA9IGRlc3QgKyAxO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0dmFyIGJpdE1hcHMgPSBbXTtcblx0Zm9yKHZhciBpdGVtSW5kZXggPSAwOyBpdGVtSW5kZXggPCBjb21iaW5lTGlzdC5sZW5ndGg7IGl0ZW1JbmRleCsrKSB7XG5cdFx0dmFyIGl0ZW0gPSBjb21iaW5lTGlzdFtpdGVtSW5kZXhdO1xuXG5cdFx0dmFyIGNtYXAgPSBbXTtcblx0XHRpdGVtLndpcmVzLm1hcChmdW5jdGlvbihkZXN0LCBzb3VyY2UpIHtcblx0XHRcdGNtYXAucHVzaCh7XG5cdFx0XHRcdGFuZDogMSA8PCAoKHRvdGFsUXViaXRzIC0gMSkgLSBkZXN0KSxcblx0XHRcdFx0b3I6IDEgPDwgKChpdGVtLmNpcmN1aXQubnVtUXViaXRzIC0gMSkgLSBzb3VyY2UpXG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdGJpdE1hcHMucHVzaChjbWFwKTtcblx0fVxuXG5cdHZhciBuMyA9IDEgPDwgdG90YWxRdWJpdHM7XG5cdGZvcih2YXIgYTMgPSAwOyBhMyA8IG4zOyBhMysrKSB7XG5cdFx0dmFyIHMzID0gbnVsbDtcblx0XHRmb3IodmFyIGl0ZW1JbmRleCA9IDA7IGl0ZW1JbmRleCA8IGNvbWJpbmVMaXN0Lmxlbmd0aDsgaXRlbUluZGV4KyspIHtcblx0XHRcdHZhciBtYXAgPSBiaXRNYXBzW2l0ZW1JbmRleF07XG5cblx0XHRcdHZhciBhMSA9IDA7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgbWFwLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmKGEzICYgbWFwW2ldLmFuZCkge1xuXHRcdFx0XHRcdGExIHw9IG1hcFtpXS5vcjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHR2YXIgaXRlbSA9IGNvbWJpbmVMaXN0W2l0ZW1JbmRleF07XG5cdFx0XHR2YXIgczEgPSBpdGVtLmNpcmN1aXQuc3RhdGVbYTFdO1xuXHRcdFx0aWYoczEpIHtcblx0XHRcdFx0aWYoczMgPT0gbnVsbCkge1xuXHRcdFx0XHRcdHMzID0gczE7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0czMgPSBtYXRoLm11bHRpcGx5KHMxLCBzMyk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHMzID0gbWF0aC5jb21wbGV4KDAsIDApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmKHMzICYmIChzMy5yZSB8fCBzMy5pbSkpIHtcblx0XHRcdG5ld1N0YXRlW2EzXSA9IHMzO1xuXHRcdFx0bmV3U3RhdGVCaXRzIHw9IGEzO1xuXHRcdH1cblx0fVxuXG5cdHRoaXMucmVzZXRTdGF0ZSgpO1xuXHQvLyBleHBhbmQgY2lyY3VpdCBpZiBuZWVkZWRcblx0aWYodGhpcy5udW1RdWJpdHMgPCB0b3RhbFF1Yml0cykge1xuXHRcdHRoaXMubnVtUXViaXRzID0gdG90YWxRdWJpdHM7XG5cblx0XHR3aGlsZSh0aGlzLmdhdGVzLmxlbmd0aCA8IHRoaXMubnVtUXViaXRzKSB7XG5cdFx0XHR0aGlzLmdhdGVzLnB1c2goW10pO1xuXHRcdH1cblxuXHRcdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMuZ2F0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHdoaWxlKHRoaXMuZ2F0ZXNbaV0ubGVuZ3RoIDwgbnVtQ29scykge1xuXHRcdFx0XHR0aGlzLmdhdGVzW2ldLnB1c2gobnVsbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5zdGF0ZSA9IG5ld1N0YXRlO1xuXHR0aGlzLnN0YXRlQml0cyA9IG5ld1N0YXRlQml0cztcblxuXHRpZih0aGlzLnN0YXRlQml0cyA9PSAwICYmIE9iamVjdC5rZXlzKHRoaXMuc3RhdGUpLmxlbmd0aCA9PSAwKSB7XG5cdFx0dGhpcy5zdGF0ZVtcIjBcIl0gPSBtYXRoLmNvbXBsZXgoMSwgMCk7XG5cdH1cbn07XG5cbi8vXG4vLyBDb21iaW5lcyBzdGF0ZSB2ZWN0b3JzIG9mIHR3byBldmFsdWF0ZWQgY2lyY3VpdHMgYW5kIHN0b3JlcyByZXN1bHRpbmcgdmVjdG9yIGludG8gdGhpcy5cbi8vXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuX3NldENvbWJpbmVkU3RhdGUgPSBmdW5jdGlvbihjMSwgYzIsIG9wdGlvbnMpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIHExID0gYzEubnVtUXViaXRzO1xuXHR2YXIgcTIgPSBjMi5udW1RdWJpdHM7XG5cblx0Ly8gY3JlYXRlIHdpcmVNYXAgaWYgbm90IHByb3ZpZGVkXG5cdGlmKCFvcHRpb25zLndpcmVNYXApIHtcblx0XHRvcHRpb25zLndpcmVNYXAgPSB7XG5cdFx0XHRjMTogW10sXG5cdFx0XHRjMjogW11cblx0XHR9XG5cblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgcTE7IGkrKykge1xuXHRcdFx0b3B0aW9ucy53aXJlTWFwLmMxLnB1c2goaSk7XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHEyOyBpKyspIHtcblx0XHRcdG9wdGlvbnMud2lyZU1hcC5jMi5wdXNoKGkgKyBxMSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gY2FsY3VsYXRlIG51bWJlciBvZiBxdWJpdHMgYmFzZWQgb24gd2lyZU1hcFxuXHR2YXIgcTMgPSAwO1xuXHRvcHRpb25zLndpcmVNYXAuYzEubWFwKGZ1bmN0aW9uKGRlc3QpIHtcblx0XHRpZihkZXN0ICsgMSA+IHEzKSB7XG5cdFx0XHRxMyA9IGRlc3QgKyAxO1xuXHRcdH1cblx0fSk7XG5cdG9wdGlvbnMud2lyZU1hcC5jMi5tYXAoZnVuY3Rpb24oZGVzdCkge1xuXHRcdGlmKGRlc3QgKyAxID4gcTMpIHtcblx0XHRcdHEzID0gZGVzdCArIDE7XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBjcmVhdGUgYml0IG1hcCBmb3IgY2lyY3VpdCAxXG5cdHZhciBjMW1hcCA9IFtdO1xuXHRvcHRpb25zLndpcmVNYXAuYzEubWFwKGZ1bmN0aW9uKGRlc3QsIHNvdXJjZSkge1xuXHRcdGMxbWFwLnB1c2goeyBhbmQ6IDEgPDwgKChxMyAtIDEpIC0gZGVzdCksIG9yOiAxIDw8ICgocTEgLSAxKSAtIHNvdXJjZSkgfSk7XG5cdH0pO1xuXG5cdC8vIGNyZWF0ZSBiaXQgbWFwIGZvciBjaXJjdWl0IDJcblx0dmFyIGMybWFwID0gW107XG5cdG9wdGlvbnMud2lyZU1hcC5jMi5tYXAoZnVuY3Rpb24oZGVzdCwgc291cmNlKSB7XG5cdFx0YzJtYXAucHVzaCh7IGFuZDogMSA8PCAoKHEzIC0gMSkgLSBkZXN0KSwgb3I6IDEgPDwgKChxMiAtIDEpIC0gc291cmNlKSB9KTtcblx0fSk7XG5cblx0dmFyIHVudXNlZCA9IDA7XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBxMzsgaSsrKSB7XG5cdFx0aWYob3B0aW9ucy53aXJlTWFwLmMxLmluZGV4T2YoaSkgPCAwICYmIG9wdGlvbnMud2lyZU1hcC5jMi5pbmRleE9mKGkpIDwgMCkge1xuXHRcdFx0dW51c2VkIHw9IDEgPDwgKChxMyAtIDEpIC0gaSk7XG5cdFx0fVxuXHR9XG5cblx0dmFyIG5ld1N0YXRlID0ge307XG5cdHZhciBuZXdTdGF0ZUJpdHMgPSAwO1xuXG5cdHZhciBuMyA9IDEgPDwgcTM7XG5cdGZvcih2YXIgYTMgPSAwOyBhMyA8IG4zOyBhMysrKSB7XG5cdFx0aWYoIShhMyAmIHVudXNlZCkpIHtcblx0XHRcdHZhciBhMSA9IDA7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgYzFtYXAubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYoYTMgJiBjMW1hcFtpXS5hbmQpIGExIHw9IGMxbWFwW2ldLm9yO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgYTIgPSAwO1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGMybWFwLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmKGEzICYgYzJtYXBbaV0uYW5kKSBhMiB8PSBjMm1hcFtpXS5vcjtcblx0XHRcdH1cblxuXHRcdFx0dmFyIHMxID0gYzEuc3RhdGVbYTFdO1xuXHRcdFx0aWYoczEpIHtcblx0XHRcdFx0dmFyIHMyID0gYzIuc3RhdGVbYTJdO1xuXHRcdFx0XHRpZihzMikge1xuXHRcdFx0XHRcdHZhciBzMyA9IG1hdGgubXVsdGlwbHkoczEsIHMyKTtcblx0XHRcdFx0XHRpZihzMy5yZSB8fCBzMy5pbSkge1xuXHRcdFx0XHRcdFx0bmV3U3RhdGVbYTNdID0gczM7XG5cdFx0XHRcdFx0XHRuZXdTdGF0ZUJpdHMgfD0gYTM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5yZXNldFN0YXRlKCk7XG5cdC8vIGV4cGFuZCBjaXJjdWl0IGlmIG5lZWRlZFxuXHRpZih0aGlzLm51bVF1Yml0cyA8IHEzKSB7XG5cdFx0dGhpcy5udW1RdWJpdHMgPSBxMztcblxuXHRcdHdoaWxlKHRoaXMuZ2F0ZXMubGVuZ3RoIDwgdGhpcy5udW1RdWJpdHMpIHtcblx0XHRcdHRoaXMuZ2F0ZXMucHVzaChbXSk7XG5cdFx0fVxuXHRcdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMuZ2F0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHdoaWxlKHRoaXMuZ2F0ZXNbaV0ubGVuZ3RoIDwgbnVtQ29scykge1xuXHRcdFx0XHR0aGlzLmdhdGVzW2ldLnB1c2gobnVsbCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5zdGF0ZSA9IG5ld1N0YXRlO1xuXHR0aGlzLnN0YXRlQml0cyA9IG5ld1N0YXRlQml0cztcblxuXHRpZih0aGlzLnN0YXRlQml0cyA9PSAwICYmIE9iamVjdC5rZXlzKHRoaXMuc3RhdGUpLmxlbmd0aCA9PSAwKSB7XG5cdFx0dGhpcy5zdGF0ZVtcIjBcIl0gPSBtYXRoLmNvbXBsZXgoMSwgMCk7XG5cdH1cbn07XG5cbi8vIEFkZCBxdWJpdHMgcHJlc2VydmluZyBzdGF0ZVxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmFwcGVuZFF1Yml0cyA9IGZ1bmN0aW9uKG51bVF1Yml0cykge1xuXHR2YXIgYyA9IG5ldyBRdWFudHVtQ2lyY3VpdChudW1RdWJpdHMpO1xuXHR0aGlzLl9zZXRDb21iaW5lZFN0YXRlKHRoaXMsIGMpO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLm51bUFtcGxpdHVkZXMgPSBmdW5jdGlvbihvbmx5UG9zc2libGUpIHtcblx0aWYob25seVBvc3NpYmxlKSB7XG5cdFx0dmFyIHBvc3NpYmxlQ291bnQgPSAwO1xuXHRcdGZvcih2YXIgaXMgaW4gdGhpcy5zdGF0ZSkge1xuXHRcdFx0dmFyIHN0YXRlID0gbWF0aC5yb3VuZCh0aGlzLnN0YXRlW2lzXSwgMTQpO1xuXHRcdFx0aWYoc3RhdGUucmUgfHwgc3RhdGUuaW0pIHtcblx0XHRcdFx0cG9zc2libGVDb3VudCsrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcG9zc2libGVDb3VudDtcblx0fVxuXG5cdHJldHVybiBtYXRoLnBvdygyLCB0aGlzLm51bVF1Yml0cyk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUubnVtQ29scyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5nYXRlcy5sZW5ndGggPyB0aGlzLmdhdGVzWzBdLmxlbmd0aCA6IDA7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUubnVtR2F0ZXMgPSBmdW5jdGlvbihkZWNvbXBvc2UpIHtcblx0dmFyIGNpcmN1aXQgPSBudWxsO1xuXHRpZihkZWNvbXBvc2UpIHtcblx0XHRjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZSh0cnVlKSk7XG5cdH0gZWxzZSB7XG5cdFx0Y2lyY3VpdCA9IHRoaXM7XG5cdH1cblxuXHR2YXIgbnVtR2F0ZXMgPSAwO1xuXHR2YXIgbnVtQ29scyA9IGNpcmN1aXQubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGNpcmN1aXQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHRudW1HYXRlcysrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBudW1HYXRlcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5pc0VtcHR5Q2VsbCA9IGZ1bmN0aW9uKGNvbCwgd2lyZSkge1xuXHRpZih0aGlzLmdhdGVzW3dpcmVdICYmIHRoaXMuZ2F0ZXNbd2lyZV1bY29sXSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGZvcih2YXIgdyA9IDA7IHcgPCB0aGlzLm51bVF1Yml0czsgdysrKSB7XG5cdFx0dmFyIGdhdGUgPSB0aGlzLmdldEdhdGVBdChjb2wsIHcpO1xuXHRcdGlmKGdhdGUpIHtcblx0XHRcdGlmKGdhdGUubmFtZSA9PSBcIm1lYXN1cmVcIiB8fCAoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKSB8fCAoTWF0aC5taW4uYXBwbHkobnVsbCwgZ2F0ZS53aXJlcykgPCB3aXJlICYmIE1hdGgubWF4LmFwcGx5KG51bGwsIGdhdGUud2lyZXMpID4gd2lyZSkpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmlzRW1wdHlQbGFjZSA9IGZ1bmN0aW9uKGNvbCwgd2lyZXMsIHVzaW5nQ3JlZ3MpIHtcblx0dmFyIG1pbldpcmUgPSBNYXRoLm1pbi5hcHBseShudWxsLCB3aXJlcyk7XG5cdHZhciBtYXhXaXJlID0gTWF0aC5tYXguYXBwbHkobnVsbCwgd2lyZXMpO1xuXG5cdGlmKHVzaW5nQ3JlZ3MpIHtcblx0XHR2YXIgbXggPSB0aGlzLm51bVF1Yml0cyAtIDE7XG5cdFx0aWYobXggPiBtYXhXaXJlKSB7XG5cdFx0XHRtYXhXaXJlID0gbXg7XG5cdFx0fVxuXHR9XG5cblx0dmFyIGFsbEVtcHR5ID0gdHJ1ZTtcblx0Zm9yKHZhciB3aXJlID0gbWluV2lyZTsgd2lyZSA8PSBtYXhXaXJlOyB3aXJlKyspIHtcblx0XHRpZighdGhpcy5pc0VtcHR5Q2VsbChjb2wsIHdpcmUpKSB7XG5cdFx0XHRhbGxFbXB0eSA9IGZhbHNlO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGFsbEVtcHR5O1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmxhc3ROb25FbXB0eVBsYWNlID0gZnVuY3Rpb24od2lyZXMsIHVzaW5nQ3JlZ3MpIHtcblx0dmFyIGNvbCA9IHRoaXMubnVtQ29scygpO1xuXHR2YXIgYWxsRW1wdHkgPSB0cnVlO1xuXG5cdHZhciBtaW5XaXJlID0gTWF0aC5taW4uYXBwbHkobnVsbCwgd2lyZXMpO1xuXHR2YXIgbWF4V2lyZSA9IE1hdGgubWF4LmFwcGx5KG51bGwsIHdpcmVzKTtcblxuXHRpZih1c2luZ0NyZWdzKSB7XG5cdFx0dmFyIG14ID0gdGhpcy5udW1RdWJpdHMgLSAxO1xuXHRcdGlmKG14ID4gbWF4V2lyZSkge1xuXHRcdFx0bWF4V2lyZSA9IG14O1xuXHRcdH1cblx0fVxuXG5cdHdoaWxlKGFsbEVtcHR5ICYmIGNvbC0tKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gbWluV2lyZTsgd2lyZSA8PSBtYXhXaXJlOyB3aXJlKyspIHtcblx0XHRcdGlmKCF0aGlzLmlzRW1wdHlDZWxsKGNvbCwgd2lyZSkpIHtcblx0XHRcdFx0YWxsRW1wdHkgPSBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNvbDtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5pbnNlcnRDb2x1bW4gPSBmdW5jdGlvbihjb2xJbmRleCkge1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5udW1RdWJpdHM7IGkrKykge1xuXHRcdHRoaXMuZ2F0ZXNbaV0uc3BsaWNlKGNvbEluZGV4IHx8IDAsIDAsIG51bGwpO1xuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmFuZG9tU3RyaW5nID0gZnVuY3Rpb24obGVuKSB7XG5cdGxlbiA9IGxlbiB8fCAxNztcblxuXHR2YXIgdGV4dCA9IFwiXCI7XG5cdC8vIGxldCBmaXJzdCBjaGFyIHRvIGJlIGxldHRlclxuXHR2YXIgY2hhcnNldCA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5elwiO1xuXHR0ZXh0ICs9IGNoYXJzZXQuY2hhckF0KE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNoYXJzZXQubGVuZ3RoKSk7XG5cblx0Ly8gb3RoZXIgY2hhcnMgY2FuIGJlIGxldHRlcnMgYW5kIG51bWJlcnNcblx0Y2hhcnNldCArPSBcIjAxMjM0NTY3ODlcIjtcblx0Zm9yKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG5cdFx0dGV4dCArPSBjaGFyc2V0LmNoYXJBdChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBjaGFyc2V0Lmxlbmd0aCkpO1xuXHR9XG5cblx0cmV0dXJuIHRleHQ7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5hZGRHYXRlID0gZnVuY3Rpb24oZ2F0ZU5hbWUsIGNvbHVtbiwgd2lyZXMsIG9wdGlvbnMpIHtcblx0dmFyIHdpcmVMaXN0ID0gW107XG5cdGlmKEFycmF5LmlzQXJyYXkod2lyZXMpKSB7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHdpcmVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR3aXJlTGlzdC5wdXNoKHdpcmVzW2ldKTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0d2lyZUxpc3QucHVzaCh3aXJlcyk7XG5cdH1cblxuXHRpZihjb2x1bW4gPCAwKSB7XG5cdFx0Y29sdW1uID0gdGhpcy5sYXN0Tm9uRW1wdHlQbGFjZSh3aXJlTGlzdCwgZ2F0ZU5hbWUgPT0gXCJtZWFzdXJlXCIgfHwgKG9wdGlvbnMgJiYgb3B0aW9ucy5jb25kaXRpb24gJiYgb3B0aW9ucy5jb25kaXRpb24uY3JlZykpICsgMTtcblx0fVxuXG5cdHZhciBudW1Db25uZWN0b3JzID0gd2lyZUxpc3QubGVuZ3RoO1xuXHR2YXIgaWQgPSB0aGlzLnJhbmRvbVN0cmluZygpO1xuXHRmb3IodmFyIGNvbm5lY3RvciA9IDA7IGNvbm5lY3RvciA8IG51bUNvbm5lY3RvcnM7IGNvbm5lY3RvcisrKSB7XG5cdFx0dmFyIHdpcmUgPSB3aXJlTGlzdFtjb25uZWN0b3JdO1xuXG5cdFx0aWYoKHdpcmUgKyAxKSA+IHRoaXMubnVtUXViaXRzKSB7XG5cdFx0XHR0aGlzLm51bVF1Yml0cyA9IHdpcmUgKyAxO1xuXHRcdH1cblxuXHRcdHdoaWxlKHRoaXMuZ2F0ZXMubGVuZ3RoIDwgdGhpcy5udW1RdWJpdHMpIHtcblx0XHRcdHRoaXMuZ2F0ZXMucHVzaChbXSk7XG5cdFx0fVxuXG5cdFx0dmFyIG51bUNvbHMgPSB0aGlzLm51bUNvbHMoKTtcblx0XHRpZigoY29sdW1uICsgMSkgPiBudW1Db2xzKSB7XG5cdFx0XHRudW1Db2xzID0gY29sdW1uICsgMTtcblx0XHR9XG5cblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5nYXRlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0d2hpbGUodGhpcy5nYXRlc1tpXS5sZW5ndGggPCBudW1Db2xzKSB7XG5cdFx0XHRcdHRoaXMuZ2F0ZXNbaV0ucHVzaChudWxsKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgZ2F0ZSA9IHtcblx0XHRcdGlkOiBpZCxcblx0XHRcdG5hbWU6IGdhdGVOYW1lLFxuXHRcdFx0Y29ubmVjdG9yOiBjb25uZWN0b3IsXG5cdFx0XHRvcHRpb25zOiB7fVxuXHRcdH1cblxuXHRcdGlmKG9wdGlvbnMpIHtcblx0XHRcdGdhdGUub3B0aW9ucyA9IG9wdGlvbnM7XG5cblx0XHRcdC8vIGV4dGVuZCBjcmVnIGlmIHJlcXVpcmVkXG5cdFx0XHRpZihvcHRpb25zLmNyZWcgJiYgb3B0aW9ucy5jcmVnW1wibmFtZVwiXSAmJiB0eXBlb2Ygb3B0aW9ucy5jcmVnW1wiYml0XCJdICE9IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0dmFyIGNyZWdCaXQgPSBwYXJzZUludChvcHRpb25zLmNyZWcuYml0IHx8IDApO1xuXHRcdFx0XHRpZihpc05hTihjcmVnQml0KSkge1xuXHRcdFx0XHRcdGNyZWdCaXQgPSAwO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBleGlzdGluZ0NyZWcgPSB0aGlzLmNyZWdzW29wdGlvbnMuY3JlZy5uYW1lXSB8fCBbXTtcblx0XHRcdFx0dmFyIGN1cnJlbnRWYWx1ZSA9IChleGlzdGluZ0NyZWcubGVuZ3RoID4gY3JlZ0JpdCkgPyBleGlzdGluZ0NyZWdbb3B0aW9ucy5jcmVnLmJpdF0gOiAwO1xuXHRcdFx0XHR0aGlzLnNldENyZWdCaXQob3B0aW9ucy5jcmVnLm5hbWUsIGNyZWdCaXQsIGN1cnJlbnRWYWx1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5nYXRlc1t3aXJlXVtjb2x1bW5dID0gZ2F0ZTtcblx0fVxuXHRyZXR1cm4gaWQ7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuYXBwZW5kR2F0ZSA9IGZ1bmN0aW9uKGdhdGVOYW1lLCB3aXJlcywgb3B0aW9ucykge1xuXHRyZXR1cm4gdGhpcy5hZGRHYXRlKGdhdGVOYW1lLCAtMSwgd2lyZXMsIG9wdGlvbnMpO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaW5zZXJ0R2F0ZSA9IGZ1bmN0aW9uKGdhdGVOYW1lLCBjb2x1bW4sIHdpcmVzLCBvcHRpb25zKSB7XG5cdHZhciB3aXJlTGlzdCA9IFtdO1xuXHRpZihBcnJheS5pc0FycmF5KHdpcmVzKSkge1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCB3aXJlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0d2lyZUxpc3QucHVzaCh3aXJlc1tpXSk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHdpcmVMaXN0LnB1c2god2lyZXMpO1xuXHR9XG5cblx0aWYoY29sdW1uIDwgMCkge1xuXHRcdGNvbHVtbiA9IHRoaXMubGFzdE5vbkVtcHR5UGxhY2Uod2lyZUxpc3QsICghIWdhdGVOYW1lICYmIGdhdGVOYW1lID09IFwibWVhc3VyZVwiKSB8fCAob3B0aW9ucyAmJiBvcHRpb25zLmNvbmRpdGlvbiAmJiBvcHRpb25zLmNvbmRpdGlvbi5jcmVnKSkgKyAxO1xuXHR9XG5cblx0dmFyIHNwYWNlSXNFbXB0eSA9IHRydWU7XG5cdHZhciBudW1Db25uZWN0b3JzID0gd2lyZUxpc3QubGVuZ3RoO1xuXHRmb3IodmFyIGNvbm5lY3RvciA9IDA7IGNvbm5lY3RvciA8IG51bUNvbm5lY3RvcnM7IGNvbm5lY3RvcisrKSB7XG5cdFx0dmFyIHdpcmUgPSB3aXJlTGlzdFtjb25uZWN0b3JdO1xuXG5cdFx0aWYoKHdpcmUgKyAxKSA+IHRoaXMubnVtUXViaXRzKSB7XG5cdFx0XHR0aGlzLm51bVF1Yml0cyA9IHdpcmUgKyAxO1xuXHRcdH1cblxuXHRcdHdoaWxlKHRoaXMuZ2F0ZXMubGVuZ3RoIDwgdGhpcy5udW1RdWJpdHMpIHtcblx0XHRcdHRoaXMuZ2F0ZXMucHVzaChbXSk7XG5cdFx0fVxuXG5cdFx0dmFyIG51bUNvbHMgPSB0aGlzLm51bUNvbHMoKTtcblx0XHRpZigoY29sdW1uICsgMSkgPiBudW1Db2xzKSB7XG5cdFx0XHRudW1Db2xzID0gY29sdW1uICsgMTtcblx0XHR9XG5cblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5nYXRlcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0d2hpbGUodGhpcy5nYXRlc1tpXS5sZW5ndGggPCBudW1Db2xzKSB7XG5cdFx0XHRcdHRoaXMuZ2F0ZXNbaV0ucHVzaChudWxsKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZighdGhpcy5pc0VtcHR5UGxhY2UoY29sdW1uLCB3aXJlTGlzdCwgKCEhZ2F0ZU5hbWUgJiYgZ2F0ZU5hbWUgPT0gXCJtZWFzdXJlXCIpIHx8IChvcHRpb25zICYmIG9wdGlvbnMuY29uZGl0aW9uICYmIG9wdGlvbnMuY29uZGl0aW9uLmNyZWcpKSkge1xuXHRcdHRoaXMuaW5zZXJ0Q29sdW1uKGNvbHVtbik7XG5cdH1cblxuXHR2YXIgaWQgPSBudWxsO1xuXHRpZihnYXRlTmFtZSkge1xuXHRcdGlkID0gdGhpcy5hZGRHYXRlKGdhdGVOYW1lLCBjb2x1bW4sIHdpcmVMaXN0LCBvcHRpb25zKTtcblx0fVxuXHRyZXR1cm4gaWQ7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaW5zZXJ0U3BhY2UgPSBmdW5jdGlvbihjb2x1bW4sIHdpcmVzKSB7XG5cdHJldHVybiB0aGlzLmluc2VydEdhdGUobnVsbCwgY29sdW1uLCB3aXJlcywgbnVsbCk7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yZW1vdmVHYXRlQXQgPSBmdW5jdGlvbihjb2x1bW4sIHdpcmUpIHtcblx0aWYoIXRoaXMuZ2F0ZXNbd2lyZV0pIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR2YXIgZ2F0ZSA9IHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXTtcblx0aWYoIWdhdGUpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR2YXIgaWQgPSBnYXRlLmlkO1xuXG5cdHZhciBudW1XaXJlcyA9IHRoaXMuZ2F0ZXMubGVuZ3RoO1xuXHRmb3IodmFyIHcgPSAwOyB3IDwgbnVtV2lyZXM7IHcrKykge1xuXHRcdHZhciBjZWxsID0gdGhpcy5nYXRlc1t3XVtjb2x1bW5dO1xuXHRcdGlmKGNlbGwgJiYgY2VsbC5pZCA9PSBpZCkge1xuXHRcdFx0dGhpcy5nYXRlc1t3XVtjb2x1bW5dID0gbnVsbDtcblx0XHR9XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yZW1vdmVHYXRlID0gZnVuY3Rpb24oZ2F0ZUlkKSB7XG5cdHZhciBnYXRlUG9zID0gdGhpcy5nZXRHYXRlUG9zQnlJZChnYXRlSWQpO1xuXHRpZighZ2F0ZVBvcyB8fCBnYXRlUG9zLmNvbCA8IDAgfHwgIWdhdGVQb3Mud2lyZXMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dGhpcy5yZW1vdmVHYXRlQXQoZ2F0ZVBvcy5jb2wsIGdhdGVQb3Mud2lyZXNbMF0pO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuYWRkTWVhc3VyZSA9IGZ1bmN0aW9uKHdpcmUsIGNyZWcsIGNiaXQpIHtcblx0dGhpcy5hZGRHYXRlKFwibWVhc3VyZVwiLCAtMSwgd2lyZSwgeyBjcmVnOiB7IG5hbWU6IGNyZWcsIGJpdDogY2JpdCB9IH0pO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmFwcGVuZENpcmN1aXQgPSBmdW5jdGlvbihjaXJjdWl0LCBwYWNrKSB7XG5cdHZhciBjb2xPZmZzZXQgPSB0aGlzLm51bUNvbHMoKTtcblxuXHR2YXIgbnVtQ29scyA9IGNpcmN1aXQubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGNpcmN1aXQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXG5cdFx0XHRcdGlmKCF0aGlzLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXSAmJiBjaXJjdWl0LmN1c3RvbUdhdGVzW2dhdGUubmFtZV0pIHtcblx0XHRcdFx0XHR0aGlzLnJlZ2lzdGVyR2F0ZShnYXRlLm5hbWUsIGNpcmN1aXQuY3VzdG9tR2F0ZXNbZ2F0ZS5uYW1lXSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmFkZEdhdGUoZ2F0ZS5uYW1lLCBjb2x1bW4gKyBjb2xPZmZzZXQsIGdhdGUud2lyZXMsIGdhdGUub3B0aW9ucyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG5cblxuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yZW1vdmVUcmFpbGluZ0NvbHVtbnMgPSBmdW5jdGlvbigpIHtcblx0dmFyIG51bUNvbHMgPSB0aGlzLm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSBudW1Db2xzIC0gMTsgY29sdW1uID49IDA7IGNvbHVtbi0tKSB7XG5cdFx0dmFyIGlzRW1wdHlDb2wgPSB0cnVlO1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXTtcblx0XHRcdGlmKGdhdGUpIHtcblx0XHRcdFx0aXNFbXB0eUNvbCA9IGZhbHNlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZighaXNFbXB0eUNvbCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR0aGlzLmdhdGVzW3dpcmVdLnBvcCgpO1xuXHRcdH1cblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlbW92ZUxlYWRpbmdDb2x1bW5zID0gZnVuY3Rpb24oKSB7XG5cdHZhciBlbXB0eUNvdW50ID0gMDtcblx0dmFyIG51bUNvbHMgPSB0aGlzLm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdHZhciBpc0VtcHR5Q29sID0gdHJ1ZTtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdhdGVzW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRpZihnYXRlKSB7XG5cdFx0XHRcdGlzRW1wdHlDb2wgPSBmYWxzZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYoIWlzRW1wdHlDb2wpIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblxuXHRcdGVtcHR5Q291bnQrKztcblx0fVxuXG5cdGZvcih2YXIgaSA9IDA7IGkgPCBlbXB0eUNvdW50OyBpKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dGhpcy5nYXRlc1t3aXJlXS5zaGlmdCgpO1xuXHRcdH1cblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlbW92ZVRyYWlsaW5nUm93cyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRmb3IodmFyIHdpcmUgPSB0aGlzLm51bVF1Yml0cyAtIDE7IHdpcmUgPj0gMDsgd2lyZS0tKSB7XG5cdFx0dmFyIGlzRW1wdHlSb3cgPSB0cnVlO1xuXHRcdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRcdHZhciBnYXRlID0gdGhpcy5nYXRlc1t3aXJlXVtjb2x1bW5dO1xuXHRcdFx0aWYoZ2F0ZSkge1xuXHRcdFx0XHRpc0VtcHR5Um93ID0gZmFsc2U7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmKCFpc0VtcHR5Um93KSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuZ2F0ZXMucG9wKCk7XG5cdFx0dGhpcy5udW1RdWJpdHMtLTtcblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlbW92ZVF1Yml0ID0gZnVuY3Rpb24od2lyZSkge1xuXHRpZighdGhpcy5nYXRlc1t3aXJlXSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHRoaXMucmVzZXRTdGF0ZSgpO1xuXG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sID0gMDsgY29sIDwgbnVtQ29sczsgY29sKyspIHtcblx0XHR0aGlzLnJlbW92ZUdhdGVBdChjb2wsIHdpcmUpO1xuXHR9XG5cblx0Zm9yKHZhciB3ID0gd2lyZSArIDE7IHcgPCB0aGlzLm51bVF1Yml0czsgdysrKSB7XG5cdFx0Zm9yKHZhciBjb2wgPSAwOyBjb2wgPCBudW1Db2xzOyBjb2wrKykge1xuXHRcdFx0dGhpcy5nYXRlc1t3IC0gMV1bY29sXSA9IHRoaXMuZ2F0ZXNbd11bY29sXTtcblx0XHR9XG5cdH1cblxuXHR0aGlzLmdhdGVzLnBvcCgpO1xuXHR0aGlzLm51bVF1Yml0cy0tO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZmxpcFZlcnRpY2FsbHkgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5yZXNldFN0YXRlKCk7XG5cblx0dmFyIG51bUNvbHMgPSB0aGlzLm51bUNvbHMoKTtcblx0dmFyIGxhc3RRdWJpdCA9IHRoaXMubnVtUXViaXRzIC0gMTtcblx0Zm9yKHZhciB3ID0gMDsgdyA8IHRoaXMubnVtUXViaXRzIC8gMjsgdysrKSB7XG5cdFx0Zm9yKHZhciBjb2wgPSAwOyBjb2wgPCBudW1Db2xzOyBjb2wrKykge1xuXHRcdFx0dmFyIHRtcCA9IHRoaXMuZ2F0ZXNbd11bY29sXTtcblx0XHRcdHRoaXMuZ2F0ZXNbd11bY29sXSA9IHRoaXMuZ2F0ZXNbbGFzdFF1Yml0IC0gd11bY29sXTtcblx0XHRcdHRoaXMuZ2F0ZXNbbGFzdFF1Yml0IC0gd11bY29sXSA9IHRtcDtcblx0XHR9XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5mbGlwSG9yaXpvbnRhbGx5ID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMucmVzZXRTdGF0ZSgpO1xuXG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdHZhciBsYXN0Q29sID0gbnVtQ29scyAtIDE7XG5cdGZvcih2YXIgdyA9IDA7IHcgPCB0aGlzLm51bVF1Yml0czsgdysrKSB7XG5cdFx0Zm9yKHZhciBjb2wgPSAwOyBjb2wgPCBudW1Db2xzIC8gMjsgY29sKyspIHtcblx0XHRcdHZhciB0bXAgPSB0aGlzLmdhdGVzW3ddW2NvbF07XG5cdFx0XHR0aGlzLmdhdGVzW3ddW2NvbF0gPSB0aGlzLmdhdGVzW3ddW2xhc3RDb2wgLSBjb2xdO1xuXHRcdFx0dGhpcy5nYXRlc1t3XVtsYXN0Q29sIC0gY29sXSA9IHRtcDtcblx0XHR9XG5cdH1cbn07XG5cblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuYXBwbHlUcmFuc2Zvcm0gPSBmdW5jdGlvbihVLCBxdWJpdHMpIHtcblx0dmFyIG5ld1N0YXRlID0ge307XG5cdHZhciBuZXdTdGF0ZUJpdHMgPSAwO1xuXG5cdC8vIGNsb25lIGxpc3Qgb2Ygd2lyZXMgdG8gaXRzZWxmIChyZW1vdmUgcmVmZXJlbmNlIHRvIG9yaWdpbmFsIGFycmF5KVxuXHRxdWJpdHMgPSBxdWJpdHMuc2xpY2UoMCk7XG5cblx0Ly8gcmV2ZXJzZSBiaXQgb3JkZXJcblx0aWYodGhpcy5yZXZlcnNlQml0T3JkZXIpIHtcblx0XHQvLyBjb252ZXJ0IGluZGV4IGZyb20gMC1iYXNlZCB0byBlbmQtYmFzZWRcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgcXViaXRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRxdWJpdHNbaV0gPSAodGhpcy5udW1RdWJpdHMgLSAxKSAtIHF1Yml0c1tpXTtcblx0XHR9XG5cdH1cblxuXHRxdWJpdHMucmV2ZXJzZSgpO1xuXG5cdC8vIGxpc3Qgb2Ygd2lyZXMgbm90IHVzZWQgYnkgdGhpcyBnYXRlXG5cdHZhciB1bnVzZWQgPSBbXTtcblx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMubnVtUXViaXRzOyBpKyspIHtcblx0XHRpZihxdWJpdHMuaW5kZXhPZihpKSA8IDApIHtcblx0XHRcdHVudXNlZC5wdXNoKGkpO1xuXHRcdH1cblx0fVxuXG5cdHZhciB1bnVzZWRDb3VudCA9IHVudXNlZC5sZW5ndGg7XG5cdHZhciB1bnVzZWRTcGFjZSA9ICgxIDw8IHVudXNlZENvdW50KTtcblxuXHRmdW5jdGlvbiBnZXRFbE1hc2soZWwpIHtcblx0XHR2YXIgcmVzID0gMDtcblx0XHRxdWJpdHMubWFwKGZ1bmN0aW9uKHF1Yml0LCBpbmRleCkge1xuXHRcdFx0aWYoZWwgJiAoMSA8PCBpbmRleCkpIHtcblx0XHRcdFx0cmVzIHw9ICgxIDw8IHF1Yml0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0SW5jTWFzaygpIHtcblx0XHR2YXIgcmVzID0gMDtcblx0XHRxdWJpdHMubWFwKGZ1bmN0aW9uKHF1Yml0LCBpbmRleCkge1xuXHRcdFx0cmVzIHw9ICgxIDw8IHF1Yml0KTtcblx0XHR9KTtcblx0XHRyZXR1cm4gcmVzICsgMTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldE5vdE1hc2soKSB7XG5cdFx0dmFyIHJlcyA9IDA7XG5cdFx0dW51c2VkLm1hcChmdW5jdGlvbihxdWJpdCwgaW5kZXgpIHtcblx0XHRcdHJlcyB8PSAoMSA8PCBxdWJpdCk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHJlcztcblx0fVxuXG5cdHZhciBaRVJPID0gbWF0aC5jb21wbGV4KDAsIDApO1xuXG5cdGZvcih2YXIgZWxyb3cgPSAwOyBlbHJvdyA8IFUubGVuZ3RoOyBlbHJvdysrKSB7XG5cblx0XHR2YXIgcm93bWFzayA9IGdldEVsTWFzayhlbHJvdyk7XG5cblx0XHRmb3IodmFyIGVsY29sID0gMDsgZWxjb2wgPCBVW2Vscm93XS5sZW5ndGg7IGVsY29sKyspIHtcblxuXHRcdFx0dmFyIGNvbG1hc2sgPSBnZXRFbE1hc2soZWxjb2wpO1xuXG5cdFx0XHRpZigodGhpcy5zdGF0ZUJpdHMgJiBjb2xtYXNrKSA9PSBjb2xtYXNrKSB7XG5cblx0XHRcdFx0dmFyIHV2YWwgPSBVW2Vscm93XVtlbGNvbF07XG5cdFx0XHRcdGlmKHV2YWwpIHtcblx0XHRcdFx0XHR2YXIgcm93ID0gcm93bWFzaztcblx0XHRcdFx0XHR2YXIgY29sID0gY29sbWFzaztcblxuXHRcdFx0XHRcdHZhciBjb3VudGVyID0gdW51c2VkU3BhY2U7XG5cdFx0XHRcdFx0dmFyIGNvdW50ZXJtYXNrID0gZ2V0RWxNYXNrKDApO1xuXHRcdFx0XHRcdHZhciBpbmNtYXNrID0gZ2V0SW5jTWFzaygpO1xuXHRcdFx0XHRcdHZhciBub3RtYXNrID0gZ2V0Tm90TWFzaygpO1xuXHRcdFx0XHRcdHZhciB0b290aGxlc3MgPSBjb3VudGVybWFzaztcblx0XHRcdFx0XHR3aGlsZShjb3VudGVyLS0pIHtcblx0XHRcdFx0XHRcdHZhciBzdGF0ZSA9IHRoaXMuc3RhdGVbY29sXTtcblx0XHRcdFx0XHRcdGlmKHN0YXRlKSB7XG5cdFx0XHRcdFx0XHRcdHJvdyA9IHRvb3RobGVzcyB8IHJvd21hc2s7XG5cblx0XHRcdFx0XHRcdFx0aWYodXZhbCA9PSAxKSB7XG5cdFx0XHRcdFx0XHRcdFx0bmV3U3RhdGVbcm93XSA9IG1hdGguYWRkKG5ld1N0YXRlW3Jvd10gfHwgWkVSTywgc3RhdGUpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdG5ld1N0YXRlW3Jvd10gPSBtYXRoLmFkZChuZXdTdGF0ZVtyb3ddIHx8IFpFUk8sIG1hdGgubXVsdGlwbHkodXZhbCwgc3RhdGUpKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRuZXdTdGF0ZUJpdHMgfD0gcm93O1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR0b290aGxlc3MgPSAodG9vdGhsZXNzICsgaW5jbWFzaykgJiBub3RtYXNrO1xuXHRcdFx0XHRcdFx0Y29sID0gdG9vdGhsZXNzIHwgY29sbWFzaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0Ly8gcmVwbGFjZSBjdXJyZW50IHN0YXRlIHdpdGggbmV3IHN0YXRlXG5cdHRoaXMuc3RhdGUgPSBuZXdTdGF0ZTtcblx0dGhpcy5zdGF0ZUJpdHMgPSBuZXdTdGF0ZUJpdHM7XG5cblx0aWYodGhpcy5zdGF0ZUJpdHMgPT0gMCAmJiBPYmplY3Qua2V5cyh0aGlzLnN0YXRlKS5sZW5ndGggPT0gMCkge1xuXHRcdHRoaXMuc3RhdGVbXCIwXCJdID0gbWF0aC5jb21wbGV4KDEsIDApO1xuXHR9XG59O1xuXG4vL1xuLy8gYGVuZGlhbm5lc3NgIGNhbiBiZTpcbi8vICAgICBudWxsIC0gdGhpcyBpcyBkZWZhdWx0IGFuZCBkZXBlbmRzIG9uIHRoaXMucmV2ZXJzZUJpdE9yZGVyXG4vLyAgICAgXCJiaWdcIiAtIGJpZyBlbmRpYW4gKGxpa2UgUmlnZXR0aS9weVF1aWwpXG4vLyAgICAgXCJsaXR0bGVcIiAtIGxpdHRsZSBlbmRpYW4gKGxpa2UgSUJNL1Fpc2tpdClcbi8vXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUudHJhbnNmb3JtTWF0cml4ID0gZnVuY3Rpb24odG90YWxRdWJpdHMsIFUsIHRhcmdldFF1Yml0cywgZW5kaWFubmVzcykge1xuXHQvLyBjbG9uZSBsaXN0IG9mIHdpcmVzIHRvIGl0c2VsZiAocmVtb3ZlIHJlZmVyZW5jZSB0byBvcmlnaW5hbCBhcnJheSlcblx0dGFyZ2V0UXViaXRzID0gdGFyZ2V0UXViaXRzLnNsaWNlKDApO1xuXG5cdHZhciByZXZlcnNlQml0cyA9IGZhbHNlO1xuXHRpZighZW5kaWFubmVzcykge1xuXHRcdHJldmVyc2VCaXRzID0gIXRoaXMucmV2ZXJzZUJpdE9yZGVyO1xuXHR9IGVsc2Uge1xuXHRcdHJldmVyc2VCaXRzID0gZW5kaWFubmVzcyA9PSBcImJpZ1wiO1xuXHR9XG5cblx0Ly8gcmV2ZXJzZSBiaXQgb3JkZXJcblx0aWYocmV2ZXJzZUJpdHMpIHtcblx0XHQvLyBjb252ZXJ0IGluZGV4IGZyb20gMC1iYXNlZCB0byBlbmQtYmFzZWRcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGFyZ2V0UXViaXRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR0YXJnZXRRdWJpdHNbaV0gPSAodG90YWxRdWJpdHMgLSAxKSAtIHRhcmdldFF1Yml0c1tpXTtcblx0XHR9XG5cdH1cblxuXHR0YXJnZXRRdWJpdHMucmV2ZXJzZSgpO1xuXG5cdC8vIGxpc3Qgb2Ygd2lyZXMgbm90IHVzZWQgYnkgdGhpcyBnYXRlXG5cdHZhciB1bnVzZWQgPSBbXTtcblx0Zm9yKHZhciBpID0gMDsgaSA8IHRvdGFsUXViaXRzOyBpKyspIHtcblx0XHRpZih0YXJnZXRRdWJpdHMuaW5kZXhPZihpKSA8IDApIHtcblx0XHRcdHVudXNlZC5wdXNoKGkpO1xuXHRcdH1cblx0fVxuXG5cdHZhciB1bnVzZWRDb3VudCA9IHVudXNlZC5sZW5ndGg7XG5cdHZhciB1bnVzZWRTcGFjZSA9ICgxIDw8IHVudXNlZENvdW50KTtcblxuXHRmdW5jdGlvbiBnZXRFbE1hc2soZWwpIHtcblx0XHR2YXIgcmVzID0gMDtcblx0XHR0YXJnZXRRdWJpdHMubWFwKGZ1bmN0aW9uKHF1Yml0LCBpbmRleCkge1xuXHRcdFx0aWYoZWwgJiAoMSA8PCBpbmRleCkpIHtcblx0XHRcdFx0cmVzIHw9ICgxIDw8IHF1Yml0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gcmVzO1xuXHR9XG5cblx0ZnVuY3Rpb24gZ2V0SW5jTWFzaygpIHtcblx0XHR2YXIgcmVzID0gMDtcblx0XHR0YXJnZXRRdWJpdHMubWFwKGZ1bmN0aW9uKHF1Yml0LCBpbmRleCkge1xuXHRcdFx0cmVzIHw9ICgxIDw8IHF1Yml0KTtcblx0XHR9KTtcblx0XHRyZXR1cm4gcmVzICsgMTtcblx0fVxuXG5cdGZ1bmN0aW9uIGdldE5vdE1hc2soKSB7XG5cdFx0dmFyIHJlcyA9IDA7XG5cdFx0dW51c2VkLm1hcChmdW5jdGlvbihxdWJpdCwgaW5kZXgpIHtcblx0XHRcdHJlcyB8PSAoMSA8PCBxdWJpdCk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHJlcztcblx0fVxuXG5cdHZhciBUID0gbWF0aC56ZXJvcyhbIDEgPDwgdG90YWxRdWJpdHMsIDEgPDwgdG90YWxRdWJpdHMgXSk7XG5cblx0Zm9yKHZhciBlbHJvdyA9IDA7IGVscm93IDwgVS5sZW5ndGg7IGVscm93KyspIHtcblxuXHRcdHZhciByb3dtYXNrID0gZ2V0RWxNYXNrKGVscm93KTtcblxuXHRcdGZvcih2YXIgZWxjb2wgPSAwOyBlbGNvbCA8IFVbZWxyb3ddLmxlbmd0aDsgZWxjb2wrKykge1xuXG5cdFx0XHR2YXIgY29sbWFzayA9IGdldEVsTWFzayhlbGNvbCk7XG5cblx0XHRcdHZhciB1dmFsID0gVVtlbHJvd11bZWxjb2xdO1xuXHRcdFx0aWYodXZhbCkge1xuXHRcdFx0XHR2YXIgcm93ID0gcm93bWFzaztcblx0XHRcdFx0dmFyIGNvbCA9IGNvbG1hc2s7XG5cblx0XHRcdFx0dmFyIGNvdW50ZXIgPSB1bnVzZWRTcGFjZTtcblx0XHRcdFx0dmFyIGNvdW50ZXJtYXNrID0gZ2V0RWxNYXNrKDApO1xuXHRcdFx0XHR2YXIgaW5jbWFzayA9IGdldEluY01hc2soKTtcblx0XHRcdFx0dmFyIG5vdG1hc2sgPSBnZXROb3RNYXNrKCk7XG5cdFx0XHRcdHZhciB0b290aGxlc3MgPSBjb3VudGVybWFzaztcblx0XHRcdFx0d2hpbGUoY291bnRlci0tKSB7XG5cdFx0XHRcdFx0cm93ID0gdG9vdGhsZXNzIHwgcm93bWFzaztcblxuXHRcdFx0XHRcdFRbcm93XVtjb2xdID0gdXZhbDtcblxuXHRcdFx0XHRcdHRvb3RobGVzcyA9ICh0b290aGxlc3MgKyBpbmNtYXNrKSAmIG5vdG1hc2s7XG5cdFx0XHRcdFx0Y29sID0gdG9vdGhsZXNzIHwgY29sbWFzaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gVDtcbn07XG5cbi8vXG4vLyBGdW5jdGlvbiByZXR1cm5zIHVuaXRhcnkgb2YgdGhlIHdob2xlIGNpcmN1aXRcbi8vXG4vLyBgZW5kaWFubmVzc2AgY2FuIGJlOlxuLy8gICAgIG51bGwgLSB0aGlzIGlzIGRlZmF1bHQgYW5kIGRlcGVuZHMgb24gdGhpcy5yZXZlcnNlQml0T3JkZXJcbi8vICAgICBcImJpZ1wiIC0gYmlnIGVuZGlhbiAobGlrZSBSaWdldHRpL3B5UXVpbClcbi8vICAgICBcImxpdHRsZVwiIC0gbGl0dGxlIGVuZGlhbiAobGlrZSBJQk0vUWlza2l0KVxuLy9cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5jaXJjdWl0TWF0cml4ID0gZnVuY3Rpb24oZW5kaWFubmVzcykge1xuXHR2YXIgZGVjb21wb3NlZCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRkZWNvbXBvc2VkLmxvYWQodGhpcy5zYXZlKHRydWUpKTtcblxuXHRpZihkZWNvbXBvc2VkLmdvdENsYXNzaWNhbENvbnRyb2woKSkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdHZhciBtYXRyaXggPSBbXTtcblx0Zm9yKHZhciBjb2wgPSBkZWNvbXBvc2VkLm51bUNvbHMoKSAtIDE7IGNvbCA+PSAwOyBjb2wtLSkge1xuXHRcdGZvcih2YXIgd2lyZSA9IGRlY29tcG9zZWQubnVtUXViaXRzIC0gMTsgd2lyZSA+PSAwOyB3aXJlLS0pIHtcblx0XHRcdHZhciBnYXRlID0gZGVjb21wb3NlZC5nZXRHYXRlQXQoY29sLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHR2YXIgZ2F0ZURlZiA9IGRlY29tcG9zZWQuYmFzaWNHYXRlc1tnYXRlLm5hbWVdO1xuXHRcdFx0XHRpZighZ2F0ZURlZikge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIlVua25vd24gZ2F0ZSBcXFwiXCIgKyBnYXRlLm5hbWUgKyBcIlxcXCJcIik7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmKGdhdGVEZWYubWF0cml4ICYmIGdhdGVEZWYubWF0cml4Lmxlbmd0aCkge1xuXHRcdFx0XHRcdHZhciByYXdHYXRlID0gZGVjb21wb3NlZC5nZXRSYXdHYXRlKGdhdGVEZWYsIGdhdGUub3B0aW9ucyk7XG5cblx0XHRcdFx0XHR2YXIgVSA9IGRlY29tcG9zZWQudHJhbnNmb3JtTWF0cml4KGRlY29tcG9zZWQubnVtUXViaXRzLCByYXdHYXRlLCBnYXRlLndpcmVzLCBlbmRpYW5uZXNzKTtcblxuXHRcdFx0XHRcdGlmKCFtYXRyaXggfHwgIW1hdHJpeC5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdG1hdHJpeCA9IFU7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG1hdHJpeCA9IHRoaXMubXVsdGlwbHlTcXVhcmVNYXRyaWNlcyhtYXRyaXgsIFUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBtYXRyaXg7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5laWdlbnZhbHVlczJ4MiA9IGZ1bmN0aW9uKEEpIHtcblx0dmFyIE0gPSB0aGlzLnBhcnNlTWF0cml4KEEpO1xuXG5cdHZhciBlaWdlbiA9IFswLCAwXTtcblxuXHR2YXIgeCA9IG1hdGguYWRkKE1bMF1bMF0sIE1bMV1bMV0pO1xuXG5cdGVpZ2VuWzBdID0gbWF0aC5kaXZpZGUobWF0aC5hZGQoeCwgbWF0aC5zcXJ0KCBtYXRoLmFkZChtYXRoLm11bHRpcGx5KG1hdGgubXVsdGlwbHkoNCwgTVswXVsxXSksIE1bMV1bMF0pLCBtYXRoLnBvdyggbWF0aC5zdWJ0cmFjdChNWzBdWzBdLCBNWzFdWzFdKSwgMikpKSksIDIpO1xuXHRlaWdlblsxXSA9IG1hdGguZGl2aWRlKG1hdGguc3VidHJhY3QoeCwgbWF0aC5zcXJ0KCBtYXRoLmFkZChtYXRoLm11bHRpcGx5KG1hdGgubXVsdGlwbHkoNCwgTVswXVsxXSksIE1bMV1bMF0pLCBtYXRoLnBvdyggbWF0aC5zdWJ0cmFjdChNWzBdWzBdLCBNWzFdWzFdKSwgMikpKSksIDIpO1xuXG5cdHJldHVybiBlaWdlbjtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRCaXBhcnRpdGVTdGF0ZSA9IGZ1bmN0aW9uKHExLCBxMikge1xuXHR2YXIgYmlwYXJ0aXRlU3RhdGUgPSB7fTtcblx0dmFyIGFtcENvdW50ID0gMDtcblxuXHRmdW5jdGlvbiBzcGVjU3VtQ29tcGxleChhLCBiKSB7XG5cdFx0dmFyIHJhd1N1bSA9IG1hdGguYWRkKGEsIGIpO1xuXHRcdHZhciBhcmcgPSByYXdTdW0uYXJnKCk7XG5cdFx0cmV0dXJuIG1hdGguY29tcGxleCh7IGFiczogbWF0aC5zcXJ0KG1hdGgucG93KG1hdGguYWJzKGEpLCAyKSArIG1hdGgucG93KG1hdGguYWJzKGIpLCAyKSksIGFyZzogYXJnIH0pO1xuXHR9XG5cblx0Zm9yKHZhciBpcyBpbiB0aGlzLnN0YXRlKSB7XG5cdFx0dmFyIGkgPSBwYXJzZUludChpcyk7XG5cdFx0dmFyIGluZGV4ID0gMDtcblx0XHR2YXIgYml0MSA9IChpICYgKDEgPDwgcTEpKSA/IDEgOiAwO1xuXHRcdHZhciBiaXQyID0gKGkgJiAoMSA8PCBxMikpID8gMiA6IDA7XG5cblx0XHRpbmRleCB8PSBiaXQxO1xuXHRcdGluZGV4IHw9IGJpdDI7XG5cblx0XHRpZih0eXBlb2YgYmlwYXJ0aXRlU3RhdGVbaW5kZXhdICE9IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdGJpcGFydGl0ZVN0YXRlW2luZGV4XSA9IHNwZWNTdW1Db21wbGV4KGJpcGFydGl0ZVN0YXRlW2luZGV4XSwgdGhpcy5zdGF0ZVtpc10pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRiaXBhcnRpdGVTdGF0ZVtpbmRleF0gPSB0aGlzLnN0YXRlW2lzXTtcblx0XHR9XG5cblx0XHRhbXBDb3VudCsrO1xuXHR9XG5cblx0aWYoIWFtcENvdW50KSB7XG5cdFx0YmlwYXJ0aXRlU3RhdGVbXCIwXCJdID0gbWF0aC5jb21wbGV4KDEsIDApO1xuXHR9XG5cblx0cmV0dXJuIGJpcGFydGl0ZVN0YXRlO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuY2hhbmNlTWFwID0gZnVuY3Rpb24oKSB7XG5cdHZhciBzZWxmID0gdGhpcztcblxuXG5cdHZhciBtYXAgPSB7fTtcblx0Zm9yKHZhciBzb3VyID0gMDsgc291ciA8IHRoaXMubnVtUXViaXRzOyBzb3VyKyspIHtcblx0XHRmb3IodmFyIGRlc3QgPSAwOyBkZXN0IDwgdGhpcy5udW1RdWJpdHM7IGRlc3QrKykge1xuXHRcdFx0aWYoIW1hcFtzb3VyXSkge1xuXHRcdFx0XHRtYXBbc291cl0gPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmKGRlc3QgPT0gc291cikge1xuXHRcdFx0XHRtYXBbc291cl1bZGVzdF0gPSBudWxsO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWFwW3NvdXJdW2Rlc3RdID0ge307XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Zm9yKHZhciBzb3VyID0gMDsgc291ciA8IHRoaXMubnVtUXViaXRzOyBzb3VyKyspIHtcblx0XHRmb3IodmFyIGRlc3QgPSBzb3VyICsgMTsgZGVzdCA8IHRoaXMubnVtUXViaXRzOyBkZXN0KyspIHtcblx0XHRcdHZhciByZWR1Y2VkU3RhdGUgPSB0aGlzLmdldEJpcGFydGl0ZVN0YXRlKHNvdXIsIGRlc3QpO1xuXG5cdFx0XHR2YXIgY2lyYyA9IG5ldyBRdWFudHVtQ2lyY3VpdCgyKTtcblx0XHRcdGNpcmMuc3RhdGUgPSByZWR1Y2VkU3RhdGU7XG5cblx0XHRcdHZhciByYWRpdXMgPSBtYXRoLmFicyhjaXJjLmFuZ2xlcygpWzBdLnJhZGl1cyk7XG5cblx0XHRcdHZhciBjb25jdXJlbmNlID0gbWF0aC5yb3VuZCgxIC0gbWF0aC5wb3cocmFkaXVzLCAyKSwgNyk7XG5cblx0XHRcdG1hcFtzb3VyXVtkZXN0XS5lbnRhbmdsZWQgPSBjb25jdXJlbmNlID4gMDtcblx0XHRcdG1hcFtzb3VyXVtkZXN0XS5jb25jdXJlbmNlID0gY29uY3VyZW5jZTtcblx0XHRcdG1hcFtzb3VyXVtkZXN0XS5jb25jdXJlbmNlUGVyY2VudCA9IG1hdGgucm91bmQoY29uY3VyZW5jZSAqIDEwMCwgMik7XG5cblxuXHRcdFx0bWFwW2Rlc3RdW3NvdXJdLmVudGFuZ2xlZCA9IGNvbmN1cmVuY2UgPiAwO1xuXHRcdFx0bWFwW2Rlc3RdW3NvdXJdLmNvbmN1cmVuY2UgPSBjb25jdXJlbmNlO1xuXHRcdFx0bWFwW2Rlc3RdW3NvdXJdLmNvbmN1cmVuY2VQZXJjZW50ID0gbWF0aC5yb3VuZChjb25jdXJlbmNlICogMTAwLCAyKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbWFwO1xufTtcblxuXG5mdW5jdGlvbiBiaW5TdHIobiwgbGVuKSB7XG5cdHZhciBiaW4gPSBuLnRvU3RyaW5nKDIpO1xuXHR3aGlsZShiaW4ubGVuZ3RoIDwgbGVuKSB7XG5cdFx0YmluID0gXCIwXCIgKyBiaW47XG5cdH1cblx0cmV0dXJuIGJpbjtcbn1cblxuXG5mdW5jdGlvbiByZXZlcnNlQml0d2lzZShuLCBsZW4pIHtcblx0cmV0dXJuIHBhcnNlSW50KGJpblN0cihuLCBsZW4pLnNwbGl0KFwiXCIpLnJldmVyc2UoKS5qb2luKFwiXCIpLCAyKTtcbn1cblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVzZXRRdWJpdCA9IGZ1bmN0aW9uKHdpcmUsIHZhbHVlKSB7XG5cdHZhciBVID0gW1xuXHRcdFswLCAwXSxcblx0XHRbMCwgMF1cblx0XTtcblxuXHR2YXIgYml0ID0gbnVsbDtcblx0aWYodGhpcy5yZXZlcnNlQml0T3JkZXIpIHtcblx0XHRiaXQgPSBtYXRoLnBvdygyLCAodGhpcy5udW1RdWJpdHMgLSAxKSAtIHdpcmUpO1xuXHR9IGVsc2Uge1xuXHRcdGJpdCA9IG1hdGgucG93KDIsIHdpcmUpO1xuXHR9XG5cblx0dmFyIHByb2IgPSAwO1xuXHRmb3IodmFyIGlzIGluIHRoaXMuc3RhdGUpIHtcblx0XHR2YXIgaSA9IHBhcnNlSW50KGlzKTtcblx0XHRpZih2YWx1ZSA/ICEhKGkgJiBiaXQpIDogIShpICYgYml0KSkge1xuXHRcdFx0cHJvYiArPSBtYXRoLnBvdyhtYXRoLmFicyh0aGlzLnN0YXRlW2lzXSksIDIpO1xuXHRcdH1cblx0fVxuXG5cdHByb2IgPSBtYXRoLnJvdW5kKHByb2IsIDE0KTtcblxuXHRpZihwcm9iID09IDEpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZih2YWx1ZSkge1xuXHRcdGlmKHByb2IgPT0gMCkge1xuXHRcdFx0VVsxXVswXSA9IDE7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFVbMV1bMV0gPSBtYXRoLnNxcnQoMSAvIHByb2IpO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRpZihwcm9iID09IDApIHtcblx0XHRcdFVbMF1bMV0gPSAxO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRVWzBdWzBdID0gbWF0aC5zcXJ0KDEgLyBwcm9iKTtcblx0XHR9XG5cdH07XG5cblx0dGhpcy5jb2xsYXBzZWQgPSBbXTtcblx0dGhpcy5wcm9iID0gW107XG5cdHRoaXMuYXBwbHlUcmFuc2Zvcm0oVSwgW3dpcmVdKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmFwcGx5R2F0ZSA9IGZ1bmN0aW9uKGdhdGVOYW1lLCBjb2x1bW4sIHdpcmVzLCBvcHRpb25zKSB7XG5cdGlmKGdhdGVOYW1lID09IFwibWVhc3VyZVwiKSB7XG5cdFx0aWYoIW9wdGlvbnMuY3JlZykge1xuXHRcdFx0dGhyb3cgXCJFcnJvcjogXFxcIm1lYXN1cmVcXFwiIGdhdGUgcmVxdWlyZXMgZGVzdGluYXRpb24uXCI7XG5cdFx0fVxuXG5cdFx0dmFyIHZhbHVlID0gdGhpcy5tZWFzdXJlKHdpcmVzWzBdLCBvcHRpb25zLmNyZWcubmFtZSwgb3B0aW9ucy5jcmVnLmJpdCk7XG5cblx0XHR2YXIgZG9SZXNldCA9IHRoaXMubWVhc3VyZVJlc2V0c1F1Yml0O1xuXHRcdGlmKCFkb1Jlc2V0KSB7XG5cdFx0XHRmb3IodmFyIGNvbCA9IGNvbHVtbjsgY29sIDwgdGhpcy5udW1Db2xzKCk7IGNvbCsrKSB7XG5cdFx0XHRcdHZhciBmcm9tUm93ID0gY29sID09IGNvbHVtbiA/IHdpcmVzWzBdIDogMDtcblx0XHRcdFx0Zm9yKHZhciByb3cgPSBmcm9tUm93OyByb3cgPCB0aGlzLm51bVF1Yml0czsgcm93KyspIHtcblx0XHRcdFx0XHR2YXIgZyA9IHRoaXMuZ2F0ZXNbcm93XVtjb2xdO1xuXHRcdFx0XHRcdGlmKGcgJiYgZy5uYW1lICE9IFwibWVhc3VyZVwiKSB7XG5cdFx0XHRcdFx0XHRkb1Jlc2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRpZihkb1Jlc2V0KSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZihkb1Jlc2V0KSB7XG5cdFx0XHR0aGlzLnJlc2V0UXViaXQod2lyZXNbMF0sIHZhbHVlKTtcblx0XHR9XG5cblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZihnYXRlTmFtZSA9PSBcInJlc2V0XCIpIHtcblx0XHR0aGlzLnJlc2V0UXViaXQod2lyZXNbMF0sIDApO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHZhciBnYXRlID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblx0aWYoIWdhdGUpIHtcblx0XHRjb25zb2xlLmxvZyhcIlVua25vd24gZ2F0ZSBcXFwiXCIgKyBnYXRlTmFtZSArIFwiXFxcIi5cIik7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0dmFyIHJhd0dhdGUgPSB0aGlzLmdldFJhd0dhdGUoZ2F0ZSwgb3B0aW9ucyk7XG5cblx0dGhpcy5jb2xsYXBzZWQgPSBbXTtcblx0dGhpcy5wcm9iID0gW107XG5cblx0dGhpcy5hcHBseVRyYW5zZm9ybShyYXdHYXRlLCB3aXJlcyk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ2V0UmF3R2F0ZSA9IGZ1bmN0aW9uKGdhdGUsIGdhdGVPcHRpb25zLCBnbG9iYWxPcHRpb25zKSB7XG5cdHZhciBnbG9iYWxQYXJhbXMgPSBnbG9iYWxPcHRpb25zICYmIGdsb2JhbE9wdGlvbnMucGFyYW1zID8gZ2xvYmFsT3B0aW9ucy5wYXJhbXMgOiAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wYXJhbXMgPyB0aGlzLm9wdGlvbnMucGFyYW1zIDoge30pO1xuXG5cdHZhciBnbG9iYWxQYXJhbXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdsb2JhbFBhcmFtcykpO1xuXHRmb3IodmFyIGdsb2JhbFBhcmFtTmFtZSBpbiBnbG9iYWxQYXJhbXMpIHtcblx0XHRnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSA9IG1hdGguZXZhbHVhdGUoZ2xvYmFsUGFyYW1zW2dsb2JhbFBhcmFtTmFtZV0pO1xuXHR9XG5cblx0dmFyIHJhd0dhdGUgPSBbXTtcblx0Z2F0ZS5tYXRyaXgubWFwKGZ1bmN0aW9uKHJvdykge1xuXHRcdHZhciByYXdHYXRlUm93ID0gW107XG5cdFx0cm93Lm1hcChmdW5jdGlvbihpdGVtKSB7XG5cdFx0XHRpZih0eXBlb2YgaXRlbSA9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdHZhciBwYXJhbXMgPSBnYXRlT3B0aW9ucyA/IGdhdGVPcHRpb25zLnBhcmFtcyB8fCB7fSA6IHt9O1xuXG5cdFx0XHRcdHZhciB2YXJzID0ge307XG5cdFx0XHRcdGdhdGUucGFyYW1zLm1hcChmdW5jdGlvbih2YXJOYW1lLCB2YXJJbmRleCkge1xuXHRcdFx0XHRcdGlmKEFycmF5LmlzQXJyYXkocGFyYW1zKSkge1xuXHRcdFx0XHRcdFx0Ly8gRGVwcmVjYXRlZC4gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgb25seS4gXCJwYXJhbXNcIiBzaG91bGQgYmUgb2JqZWN0IC0gbm90IGFycmF5LlxuXHRcdFx0XHRcdFx0dmFyc1t2YXJOYW1lXSA9IHBhcmFtcy5sZW5ndGggPiB2YXJJbmRleCA/IG1hdGguZXZhbHVhdGUocGFyYW1zW3ZhckluZGV4XSwgZ2xvYmFsUGFyYW1zKSA6IG51bGw7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHZhcnNbdmFyTmFtZV0gPSBtYXRoLmV2YWx1YXRlKHBhcmFtc1t2YXJOYW1lXSwgZ2xvYmFsUGFyYW1zKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHZhciBldiA9IG1hdGguZXZhbHVhdGUoaXRlbSwgdmFycyk7XG5cdFx0XHRcdHJhd0dhdGVSb3cucHVzaChldik7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyYXdHYXRlUm93LnB1c2goaXRlbSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmF3R2F0ZS5wdXNoKHJhd0dhdGVSb3cpO1xuXHR9KTtcblx0cmV0dXJuIHJhd0dhdGU7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZmluZEdsb2JhbFBhcmFtcyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgcmVzID0ge1xuXHRcdGdsb2JhbFBhcmFtczogW10sXG5cdFx0Y2VsbHM6IFtdXG5cdH07XG5cblx0dmFyIGV4dHJhY3RWYXJpYWJsZXMgPSBmdW5jdGlvbihzKSB7XG5cdFx0dmFyIHZhcnMgPSBbXTtcblxuXHRcdHZhciBtYXRoVG9TdHJpbmdIYW5kbGVyID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucykge1xuXHRcdFx0aWYobm9kZS5pc1N5bWJvbE5vZGUgJiYgIW5vZGUuaXNGdW5jdGlvbk5vZGUgJiYgIW1hdGhbbm9kZS5uYW1lXSkge1xuXHRcdFx0XHR2YXJzLnB1c2gobm9kZS5uYW1lKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKHMpO1xuXHRcdG5vZGUudG9TdHJpbmcoeyBoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyIH0pO1xuXG5cdFx0cmV0dXJuIHZhcnM7XG5cdH07XG5cblx0dmFyIG51bUNvbHMgPSB0aGlzLm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHR2YXIgY2VsbEFkZGVkID0gZmFsc2U7XG5cdFx0XHRcdFx0Zm9yKHZhciBnYXRlUGFyYW1OYW1lIGluIGdhdGUub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdHZhciBnYXRlUGFyYW1WYWx1ZSA9IGdhdGUub3B0aW9ucy5wYXJhbXNbZ2F0ZVBhcmFtTmFtZV07XG5cdFx0XHRcdFx0XHRpZih0eXBlb2YgZ2F0ZVBhcmFtVmFsdWUgPT0gXCJzdHJpbmdcIikge1xuXHRcdFx0XHRcdFx0XHR2YXIgZ2xvYmFscyA9IGV4dHJhY3RWYXJpYWJsZXMoZ2F0ZVBhcmFtVmFsdWUpO1xuXG5cdFx0XHRcdFx0XHRcdGlmKGdsb2JhbHMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBnID0gMDsgZyA8IGdsb2JhbHMubGVuZ3RoOyBnKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKHJlcy5nbG9iYWxQYXJhbXMuaW5kZXhPZihnbG9iYWxzW2ddKSA8IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzLmdsb2JhbFBhcmFtcy5wdXNoKGdsb2JhbHNbZ10pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmKCFjZWxsQWRkZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBtYXhXaXJlID0gTWF0aC5tYXguYXBwbHkobnVsbCwgZ2F0ZS53aXJlcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXMuY2VsbHMucHVzaChbY29sdW1uLCBtYXhXaXJlXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRjZWxsQWRkZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXM7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ2V0R2xvYmFsUGFyYW1zID0gZnVuY3Rpb24oKSB7XG5cdHZhciBnbG9iYWxQYXJhbXMgPSB0aGlzLmZpbmRHbG9iYWxQYXJhbXMoKS5nbG9iYWxQYXJhbXM7XG5cdHJldHVybiBnbG9iYWxQYXJhbXM7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ290R2xvYmFsUGFyYW1zID0gZnVuY3Rpb24oKSB7XG5cdHZhciBnbG9iYWxQYXJhbXMgPSB0aGlzLmdldEdsb2JhbFBhcmFtcygpO1xuXG5cdHJldHVybiBnbG9iYWxQYXJhbXMubGVuZ3RoID4gMDtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS51cGRhdGVHbG9iYWxQYXJhbXMgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5wYXJhbXMgPSB0aGlzLmdldEdsb2JhbFBhcmFtcygpO1xuXG5cdHRoaXMub3B0aW9ucyA9IHRoaXMub3B0aW9ucyB8fCB7fTtcblx0dGhpcy5vcHRpb25zLnBhcmFtcyA9IHRoaXMub3B0aW9ucy5wYXJhbXMgfHwge307XG5cblx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIHBhcmFtTmFtZSA9IHRoaXMucGFyYW1zW2ldO1xuXHRcdGlmKHR5cGVvZiB0aGlzLm9wdGlvbnMucGFyYW1zW3BhcmFtTmFtZV0gPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0dGhpcy5vcHRpb25zLnBhcmFtc1twYXJhbU5hbWVdID0gMDtcblx0XHR9XG5cdH1cblxuXHRmb3IodmFyIHBhcmFtTmFtZSBpbiB0aGlzLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0aWYodGhpcy5wYXJhbXMuaW5kZXhPZihwYXJhbU5hbWUpIDwgMCkge1xuXHRcdFx0ZGVsZXRlIHRoaXMub3B0aW9ucy5wYXJhbXNbcGFyYW1OYW1lXTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGhpcy5wYXJhbXM7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZGVjb21wb3NlID0gZnVuY3Rpb24ob2JqKSB7XG5cdGlmKCFvYmouZ2F0ZXMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIG9iajtcblx0fVxuXG5cdHRoaXMudXBkYXRlR2xvYmFsUGFyYW1zKCk7XG5cblx0ZnVuY3Rpb24gaW5qZWN0QXJyYXkoYTEsIGEyLCBwb3MpIHtcblx0XHRyZXR1cm4gYTEuc2xpY2UoIDAsIHBvcyApLmNvbmNhdCggYTIgKS5jb25jYXQoIGExLnNsaWNlKCBwb3MgKSApO1xuXHR9XG5cblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBvYmouZ2F0ZXNbMF0ubGVuZ3RoOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBvYmoubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gb2JqLmdhdGVzW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDAgJiYgIXRoaXMuYmFzaWNHYXRlc1tnYXRlLm5hbWVdKSB7XG5cdFx0XHRcdHZhciB0bXAgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0dmFyIGN1c3RvbSA9IG9iai5jdXN0b21HYXRlc1tnYXRlLm5hbWVdO1xuXHRcdFx0XHRpZihjdXN0b20pIHtcblx0XHRcdFx0XHR0bXAubG9hZChjdXN0b20pO1xuXHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdC8vIGNpcmN1aXQgd2l0aCBwYXJhbXNcblx0XHRcdFx0XHRpZih0bXAucGFyYW1zLmxlbmd0aCAmJiBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcykge1xuXHRcdFx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtcyA9IGdhdGUub3B0aW9ucy5wYXJhbXM7XG5cdFx0XHRcdFx0XHRmb3IodmFyIGNjID0gMDsgY2MgPCB0bXAuZ2F0ZXNbMF0ubGVuZ3RoOyBjYysrKSB7XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgd3cgPSAwOyB3dyA8IHRtcC5udW1RdWJpdHM7IHd3KyspIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZ2cgPSB0bXAuZ2F0ZXNbd3ddW2NjXTtcblx0XHRcdFx0XHRcdFx0XHRpZihnZyAmJiBnZy5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZ2cub3B0aW9ucyAmJiBnZy5vcHRpb25zLnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGRlc3RQYXJhbSBpbiBnZy5vcHRpb25zLnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIHBhcnNlIHBhcmFtLCByZXBsYWNlIHZhcmlhYmxlIHdpdGggZ2xvYmFsIHBhcmFtIGFuZCBhc3NlbWJsZSBpdCBiYWNrXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdnLm9wdGlvbnMucGFyYW1zW2Rlc3RQYXJhbV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciB0cmFuc2Zvcm1lZCA9IG5vZGUudHJhbnNmb3JtKGZ1bmN0aW9uIChub2RlLCBwYXRoLCBwYXJlbnQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKG5vZGUuaXNTeW1ib2xOb2RlICYmIGdsb2JhbFBhcmFtcy5oYXNPd25Qcm9wZXJ0eShub2RlLm5hbWUpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBtYXRoLnBhcnNlKFwiKFwiICsgZ2xvYmFsUGFyYW1zW25vZGUubmFtZV0gKyBcIilcIik7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gbm9kZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRnZy5vcHRpb25zLnBhcmFtc1tkZXN0UGFyYW1dID0gdHJhbnNmb3JtZWQudG9TdHJpbmcoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uKSB7XG5cdFx0XHRcdFx0XHRmb3IodmFyIGNjID0gMDsgY2MgPCB0bXAuZ2F0ZXNbMF0ubGVuZ3RoOyBjYysrKSB7XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgd3cgPSAwOyB3dyA8IHRtcC5udW1RdWJpdHM7IHd3KyspIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZ2cgPSB0bXAuZ2F0ZXNbd3ddW2NjXTtcblx0XHRcdFx0XHRcdFx0XHRpZihnZykge1xuXHRcdFx0XHRcdFx0XHRcdFx0Z2cub3B0aW9ucyA9IGdnLm9wdGlvbnMgfHwge307XG5cdFx0XHRcdFx0XHRcdFx0XHRnZy5vcHRpb25zLmNvbmRpdGlvbiA9IGdhdGUub3B0aW9ucy5jb25kaXRpb247XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIC0tLVxuXG5cdFx0XHRcdFx0dmFyIGRlY29tcG9zZWQgPSB0bXAuc2F2ZSh0cnVlKTtcblx0XHRcdFx0XHRpZighZGVjb21wb3NlZC5nYXRlc1swXS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdGZvcih2YXIgdG1wcSA9IDA7IHRtcHEgPCBkZWNvbXBvc2VkLmdhdGVzLmxlbmd0aDsgdG1wcSsrKSB7XG5cdFx0XHRcdFx0XHRcdGRlY29tcG9zZWQuZ2F0ZXNbdG1wcV0ucHVzaChudWxsKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgZW1wdHkgPSBbXTtcblx0XHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgZGVjb21wb3NlZC5nYXRlc1swXS5sZW5ndGggLSAxOyBpKyspIHtcblx0XHRcdFx0XHRcdGVtcHR5LnB1c2gobnVsbCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gc2hpZnQgY29sdW1ucyByaWdodFxuXHRcdFx0XHRcdGZvcih2YXIgdyA9IDA7IHcgPCBvYmoubnVtUXViaXRzOyB3KyspIHtcblx0XHRcdFx0XHRcdHZhciBnID0gb2JqLmdhdGVzW3ddW2NvbHVtbl07XG5cdFx0XHRcdFx0XHRpZihnICYmIGcuaWQgPT0gZ2F0ZS5pZCkge1xuXHRcdFx0XHRcdFx0XHRvYmouZ2F0ZXNbd10uc3BsaWNlKGNvbHVtbiwgMSk7XG5cdFx0XHRcdFx0XHRcdHZhciBpbnNlcnRHYXRlID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShkZWNvbXBvc2VkLmdhdGVzW2cuY29ubmVjdG9yXSkpO1xuXHRcdFx0XHRcdFx0XHQvLyB1bmlxdWUgaWRcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciB0bXBxID0gMDsgdG1wcSA8IGluc2VydEdhdGUubGVuZ3RoOyB0bXBxKyspIHtcblx0XHRcdFx0XHRcdFx0XHRpZihpbnNlcnRHYXRlW3RtcHFdKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpbnNlcnRHYXRlW3RtcHFdLmlkID0gaW5zZXJ0R2F0ZVt0bXBxXS5pZCArIFwiX1wiICsgZ2F0ZS5pZDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0b2JqLmdhdGVzW3ddID0gaW5qZWN0QXJyYXkob2JqLmdhdGVzW3ddLCBpbnNlcnRHYXRlLCBjb2x1bW4pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0b2JqLmdhdGVzW3ddID0gaW5qZWN0QXJyYXkob2JqLmdhdGVzW3ddLCBlbXB0eSwgY29sdW1uICsgMSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0b2JqLmN1c3RvbUdhdGVzID0ge307XG5cblx0cmV0dXJuIG9iajtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5kZWNvbXBvc2VHYXRlQXQgPSBmdW5jdGlvbihjb2x1bW4sIHdpcmUpIHtcblx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdC8vIGlmIHRoZXJlIGlzIG5vIGdhdGUgLSByZXR1cm5cblx0dmFyIGdhdGUgPSB0aGlzLmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRpZighZ2F0ZSkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIGlmIGdhdGUgaXMgbm90IGNvbXBvc2l0ZSAtIHJldHVyblxuXHRpZighdGhpcy5jdXN0b21HYXRlc1tnYXRlLm5hbWVdKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gY29weSBjaXJjdWl0XG5cdHZhciBvYmogPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0b2JqLmxvYWQodGhpcy5zYXZlKCkpO1xuXG5cdC8vIHJlbW92ZSBhbGwgZ2F0ZXMgZXhjZXB0IHRoaXNcblx0Zm9yKHZhciBjb2wgPSAwOyBjb2wgPCBvYmouZ2F0ZXNbMF0ubGVuZ3RoOyBjb2wrKykge1xuXHRcdGZvcih2YXIgcm93ID0gMDsgcm93IDwgb2JqLm51bVF1Yml0czsgcm93KyspIHtcblx0XHRcdHZhciBnID0gb2JqLmdhdGVzW3Jvd11bY29sXTtcblx0XHRcdGlmKGcgJiYgZy5pZCAhPSBnYXRlLmlkKSB7XG5cdFx0XHRcdG9iai5yZW1vdmVHYXRlQXQoY29sLCByb3cpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIGRlY29tcG9zZSBjaXJjdWl0XG5cdHZhciBjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmN1aXQubG9hZChvYmouc2F2ZSh0cnVlKSk7XG5cdGNpcmN1aXQucmVtb3ZlTGVhZGluZ0NvbHVtbnMoKTtcblx0Y2lyY3VpdC5yZW1vdmVUcmFpbGluZ0NvbHVtbnMoKTtcblxuXHRmb3IodmFyIGkgPSAwOyBpIDwgY2lyY3VpdC5nYXRlc1swXS5sZW5ndGggLSAxOyBpKyspIHtcblx0XHR0aGlzLmluc2VydFNwYWNlKGNvbHVtbiArIGksIGdhdGUud2lyZXMpO1xuXHR9XG5cdHRoaXMucmVtb3ZlR2F0ZShnYXRlLmlkKTtcblxuXHR2YXIgZGVzdENvbCA9IGNvbHVtbjtcblx0Zm9yKHZhciBjb2wgPSAwOyBjb2wgPCBjaXJjdWl0LmdhdGVzWzBdLmxlbmd0aDsgY29sKyspIHtcblx0XHR2YXIgZ2F0ZXMgPSBjaXJjdWl0LmdldEdhdGVzQXRDb2x1bW4oY29sKTtcblx0XHRnYXRlcy5tYXAoZnVuY3Rpb24oZykge1xuXHRcdFx0c2VsZi5hZGRHYXRlKGcubmFtZSwgZGVzdENvbCwgZy53aXJlcywgZy5vcHRpb25zKTtcblx0XHR9KTtcblx0XHRkZXN0Q29sKys7XG5cdH1cblxuXHRyZXR1cm4gY2lyY3VpdDtcbn07XG5cblxuLy9cbi8vIENvbnZlcnQgdGhpcyBjaXJjdWl0IHRvIGN1c3RvbSBnYXRlXG4vL1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuY29udmVydFRvQ3VzdG9tR2F0ZSA9IGZ1bmN0aW9uKGdhdGVOYW1lLCBkZWNvbXBvc2UsIGFkZFRvQ2lyY3VpdCkge1xuXHQvLyByZW1vdmUgbWVhc3VyZW1lbnQgYW5kIGNsYXNzaWNhbCBjb250cm9sXG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdhdGVzW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRpZihnYXRlKSB7XG5cdFx0XHRcdC8vIHJlbW92ZSBtZWFzdXJlbWVudFxuXHRcdFx0XHRpZihnYXRlLm5hbWUgPT0gXCJtZWFzdXJlXCIpIHtcblx0XHRcdFx0XHR0aGlzLmdhdGVzW3dpcmVdW2NvbHVtbl0gPSBudWxsO1xuXHRcdFx0XHRcdGdhdGUgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmKGdhdGUpIHtcblx0XHRcdFx0Ly8gcmVtb3ZlIGNvbmRpdGlvbnNcblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24pIHtcblx0XHRcdFx0XHRkZWxldGUgdGhpcy5nYXRlc1t3aXJlXVtjb2x1bW5dLm9wdGlvbnMuY29uZGl0aW9uO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gcmVtb3ZlIGNyZWdzXG5cdHRoaXMuY3JlZ3MgPSB7fTtcblxuXHR2YXIgc291cmNlID0gdGhpcy5zYXZlKGRlY29tcG9zZSk7XG5cdGlmKHNvdXJjZS5vcHRpb25zKSB7XG5cdFx0c291cmNlLm9wdGlvbnMuaHlicmlkID0gZmFsc2U7XG5cdFx0aWYoc291cmNlLm9wdGlvbnMuaHlicmlkT3B0aW9ucykge1xuXHRcdFx0ZGVsZXRlIHNvdXJjZS5vcHRpb25zLmh5YnJpZE9wdGlvbnM7XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5jbGVhcigpO1xuXHR0aGlzLmN1c3RvbUdhdGVzW2dhdGVOYW1lXSA9IHNvdXJjZTtcblxuXHRpZihhZGRUb0NpcmN1aXQpIHtcblx0XHR2YXIgd2lyZXMgPSBbXTtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5udW1RdWJpdHM7IGkrKykge1xuXHRcdFx0d2lyZXMucHVzaChpKTtcblx0XHR9XG5cblx0XHR2YXIgZ2F0ZU9wdGlvbnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdLm9wdGlvbnMpKTtcblxuXHRcdHRoaXMuYWRkR2F0ZShnYXRlTmFtZSwgLTEsIHdpcmVzLCBnYXRlT3B0aW9ucyk7XG5cdH0gZWxzZSB7XG5cdFx0dGhpcy5yZW1vdmVUcmFpbGluZ1Jvd3MoKTtcblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnZhbGlkQ3VzdG9tR2F0ZU5hbWUgPSBmdW5jdGlvbihiYXNlTmFtZSkge1xuXHRiYXNlTmFtZSA9IChiYXNlTmFtZSB8fCBcInN1YlwiKSArIFwiXCI7XG5cblx0dmFyIGN1c3RvbUdhdGVOYW1lcyA9IFtdO1xuXHRpZih0aGlzLmN1c3RvbUdhdGVzKSB7XG5cdFx0aWYoIXRoaXMuYmFzaWNHYXRlc1tiYXNlTmFtZV0pIHtcblx0XHRcdGlmKCF0aGlzLmN1c3RvbUdhdGVzW2Jhc2VOYW1lXSkge1xuXHRcdFx0XHRyZXR1cm4gYmFzZU5hbWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciBnYXRlTmFtZSBpbiB0aGlzLmJhc2ljR2F0ZXMpIHtcblx0XHRcdGN1c3RvbUdhdGVOYW1lcy5wdXNoKGdhdGVOYW1lKTtcblx0XHR9XG5cblx0XHRmb3IodmFyIGdhdGVOYW1lIGluIHRoaXMuY3VzdG9tR2F0ZXMpIHtcblx0XHRcdGN1c3RvbUdhdGVOYW1lcy5wdXNoKGdhdGVOYW1lKTtcblx0XHR9XG5cdH1cblxuXHR2YXIgaW5kZXggPSAwO1xuXHR2YXIgdmFsaWROYW1lID0gXCJcIjtcblx0ZG8ge1xuXHRcdGluZGV4Kys7XG5cdFx0dmFsaWROYW1lID0gYmFzZU5hbWUgKyBpbmRleDtcblx0fSB3aGlsZShjdXN0b21HYXRlTmFtZXMuaW5kZXhPZih2YWxpZE5hbWUpID49IDApO1xuXG5cdHJldHVybiB2YWxpZE5hbWU7XG59O1xuXG5cbi8vXG4vLyBTcGxpdCBjaXJjdWl0IGludG8gY29tcG9zaXRlIGdhdGVzLCBlYWNoIG9mIFwiYmxvY2tTaXplXCIgcXViaXRzXG4vL1xuLy8gT3B0aW9uczpcbi8vICAge1xuLy8gICAgICBmbGV4aWJsZUJsb2NrU2l6ZTogYm9vbCAvLyBBbGxvdyBsYXJnZXIgYmxvY2tzIGZvciBnYXRlcyB3aXRoIG1vcmUgcXViaXRzIHRoYW4gYmxvY2sgc2l6ZVxuLy8gICAgICB2ZXJ0aWNhbE9ubHk6IGJvb2wgLy8gRG9uJ3QgZXh0ZW5kIGJsb2NrcyBob3Jpem9udGFsbHlcbi8vICAgfVxuLy9cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnNwbGl0SW50b0Jsb2NrcyA9IGZ1bmN0aW9uKGJsb2NrU2l6ZSwgb3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgYmxvY2tzID0gW107XG5cdHZhciBwcmV2Q29uZGl0aW9uID0gXCJ7fVwiO1xuXHR2YXIgcHJldklzVW5pdGFyeSA9IHRydWU7XG5cblx0dmFyIGN1cnJlbnRCbG9jayA9IG51bGw7XG5cblx0dmFyIGRlY29tcG9zZWQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0ZGVjb21wb3NlZC5sb2FkKHRoaXMuc2F2ZSh0cnVlKSk7XG5cblx0dmFyIG51bUNvbHMgPSBkZWNvbXBvc2VkLm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBkZWNvbXBvc2VkLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGRlY29tcG9zZWQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDAgJiYgIWdhdGUuYWRkZWRUb0Jsb2NrKSB7XG5cdFx0XHRcdHZhciBnYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdHZhciBjdXJyZW50Q29uZGl0aW9uID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gPyBKU09OLnN0cmluZ2lmeShnYXRlLm9wdGlvbnMuY29uZGl0aW9uKSA6IFwie31cIjtcblx0XHRcdFx0dmFyIGN1cnJlbnRJc1VuaXRhcnkgPSBnYXRlRGVmICYmICEhKGdhdGVEZWYubWF0cml4ICYmIGdhdGVEZWYubWF0cml4Lmxlbmd0aCk7XG5cblx0XHRcdFx0dmFyIG5ld1dpcmVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShjdXJyZW50QmxvY2sgPyBjdXJyZW50QmxvY2sud2lyZXMgOiBbXSkpO1xuXHRcdFx0XHRnYXRlLndpcmVzLm1hcChmdW5jdGlvbih3aXJlKSB7XG5cdFx0XHRcdFx0aWYobmV3V2lyZXMuaW5kZXhPZih3aXJlKSA8IDApIHtcblx0XHRcdFx0XHRcdG5ld1dpcmVzLnB1c2god2lyZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpZihcblx0XHRcdFx0XHQhYmxvY2tzLmxlbmd0aCB8fFxuXHRcdFx0XHRcdCEoY3VycmVudENvbmRpdGlvbiA9PSBwcmV2Q29uZGl0aW9uKSB8fFxuXHRcdFx0XHRcdCFjdXJyZW50SXNVbml0YXJ5IHx8XG5cdFx0XHRcdFx0IXByZXZJc1VuaXRhcnkgfHxcblx0XHRcdFx0XHQhKG5ld1dpcmVzLmxlbmd0aCA8PSBibG9ja1NpemUpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdGN1cnJlbnRCbG9jayA9IHtcblx0XHRcdFx0XHRcdHdpcmVzOiBnYXRlLndpcmVzLFxuXHRcdFx0XHRcdFx0Z2F0ZXM6IFtnYXRlXVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0YmxvY2tzLnB1c2goY3VycmVudEJsb2NrKTtcblxuXHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uKSB7XG5cdFx0XHRcdFx0XHRjdXJyZW50QmxvY2suY29uZGl0aW9uID0gZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y3VycmVudEJsb2NrLndpcmVzID0gbmV3V2lyZXM7XG5cdFx0XHRcdFx0Y3VycmVudEJsb2NrLmdhdGVzLnB1c2goZ2F0ZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRnYXRlLndpcmVzLm1hcChmdW5jdGlvbih3dykge1xuXHRcdFx0XHRcdGRlY29tcG9zZWQuZ2F0ZXNbd3ddW2NvbHVtbl0uYWRkZWRUb0Jsb2NrID0gdHJ1ZTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cHJldkNvbmRpdGlvbiA9IGN1cnJlbnRDb25kaXRpb247XG5cdFx0XHRcdHByZXZJc1VuaXRhcnkgPSBjdXJyZW50SXNVbml0YXJ5O1xuXG5cdFx0XHRcdGlmKCFvcHRpb25zLnZlcnRpY2FsT25seSkge1xuXHRcdFx0XHRcdC8vIHRyeSB0byBleHRlbmQgdGhlIGJsb2NrIGhvcml6b250YWxseVxuXHRcdFx0XHRcdHZhciBleHRDb2x1bW4gPSBjb2x1bW4gKyAxO1xuXHRcdFx0XHRcdHZhciBleHRXaXJlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY3VycmVudEJsb2NrLndpcmVzKSk7XG5cdFx0XHRcdFx0ZXh0V2lyZXMuc29ydCgpO1xuXHRcdFx0XHRcdHdoaWxlKGV4dENvbHVtbiA8IG51bUNvbHMgJiYgZXh0V2lyZXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRleHRXaXJlID0gZXh0V2lyZXNbMF07XG5cblx0XHRcdFx0XHRcdHdoaWxlKGV4dFdpcmVzLmxlbmd0aCAmJiBleHRXaXJlIDw9IGV4dFdpcmVzW2V4dFdpcmVzLmxlbmd0aCAtIDFdKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBleHRHYXRlID0gZGVjb21wb3NlZC5nZXRHYXRlQXQoZXh0Q29sdW1uLCBleHRXaXJlKTtcblx0XHRcdFx0XHRcdFx0aWYoZXh0R2F0ZSAmJiAhZXh0R2F0ZS5hZGRlZFRvQmxvY2spIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZXh0R2F0ZURlZiA9IHRoaXMuYmFzaWNHYXRlc1tleHRHYXRlLm5hbWVdO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBleHRDb25kaXRpb24gPSBleHRHYXRlLm9wdGlvbnMgJiYgZXh0R2F0ZS5vcHRpb25zLmNvbmRpdGlvbiA/IEpTT04uc3RyaW5naWZ5KGV4dEdhdGUub3B0aW9ucy5jb25kaXRpb24pIDogXCJ7fVwiO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBleHRJc1VuaXRhcnkgPSBleHRHYXRlRGVmICYmICEhKGV4dEdhdGVEZWYubWF0cml4ICYmIGV4dEdhdGVEZWYubWF0cml4Lmxlbmd0aCk7XG5cblx0XHRcdFx0XHRcdFx0XHQvL1xuXHRcdFx0XHRcdFx0XHRcdC8vIENoZWNrIGlmIGdhdGUgaXMgdmFsaWQgZm9yIGJsb2NrXG5cdFx0XHRcdFx0XHRcdFx0Ly9cblx0XHRcdFx0XHRcdFx0XHR2YXIgZ2F0ZVZhbGlkID0gZXh0SXNVbml0YXJ5ICYmIChleHRDb25kaXRpb24gPT0gY3VycmVudENvbmRpdGlvbik7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBDaGVjayBpZiBhbGwgZ2F0ZSdzIHdpcmVzIGFyZSBpbnNpZGUgYmxvY2tcblx0XHRcdFx0XHRcdFx0XHRpZihnYXRlVmFsaWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgd3cgPSAwOyB3dyA8IGV4dEdhdGUud2lyZXMubGVuZ3RoOyB3dysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGV4dFdpcmVzLmluZGV4T2YoZXh0R2F0ZS53aXJlc1t3d10pIDwgMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGdhdGVWYWxpZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZVZhbGlkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBhZGQgZ2F0ZSB0byBibG9ja1xuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudEJsb2NrLmdhdGVzLnB1c2goZXh0R2F0ZSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGV4dEdhdGUud2lyZXMubWFwKGZ1bmN0aW9uKHd3KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRlY29tcG9zZWQuZ2F0ZXNbd3ddW2V4dENvbHVtbl0uYWRkZWRUb0Jsb2NrID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyByZW1vdmUgZ2F0ZSdzIHdpcmVzIGZyb20gc2NhblxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHZhbGlkRXh0V2lyZXMgPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgd3cgPSAwOyB3dyA8IGV4dFdpcmVzLmxlbmd0aDsgd3crKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXh0VyA9IGV4dFdpcmVzW3d3XTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoZXh0R2F0ZS53aXJlcy5pbmRleE9mKGV4dFcpIDwgMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhbGlkRXh0V2lyZXMucHVzaChleHRXKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0ZXh0V2lyZXMgPSB2YWxpZEV4dFdpcmVzO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQvLyBnb3RvIG5leHQgdmFsaWQgd2lyZVxuXHRcdFx0XHRcdFx0XHRpZihleHRXaXJlcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbmV3RXh0V2lyZSA9IGV4dFdpcmVzW2V4dFdpcmVzLmxlbmd0aCAtIDFdICsgMTtcblx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIHd3ID0gZXh0V2lyZXMubGVuZ3RoIC0gMTsgd3cgPj0gMDsgd3ctLSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGV4dFcgPSBleHRXaXJlc1t3d107XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihleHRXID4gZXh0V2lyZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRuZXdFeHRXaXJlID0gZXh0Vztcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0ZXh0V2lyZSA9IG5ld0V4dFdpcmU7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZXh0Q29sdW1uKys7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblxuXHR2YXIgYmxvY2tDb3VudGVyID0gMDtcblx0Zm9yKHZhciBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IGJsb2Nrcy5sZW5ndGg7IGJsb2NrSW5kZXgrKykge1xuXHRcdHZhciBibG9jayA9IGJsb2Nrc1tibG9ja0luZGV4XTtcblxuXHRcdHZhciBpc0Jsb2NrID0gZmFsc2U7XG5cdFx0aWYoYmxvY2sud2lyZXMubGVuZ3RoIDw9IGJsb2NrU2l6ZSB8fCAhIW9wdGlvbnMuZmxleGlibGVCbG9ja1NpemUpIHtcblx0XHRcdGZvcih2YXIgeCA9IDA7IHggPCBibG9jay5nYXRlcy5sZW5ndGg7IHgrKykge1xuXHRcdFx0XHR2YXIgZ2F0ZSA9IGJsb2NrLmdhdGVzW3hdO1xuXHRcdFx0XHR2YXIgZ2F0ZURlZiA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlLm5hbWVdO1xuXG5cdFx0XHRcdGlmKGdhdGVEZWYubWF0cml4ICYmIGdhdGVEZWYubWF0cml4Lmxlbmd0aCkge1xuXHRcdFx0XHRcdGlzQmxvY2sgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYoaXNCbG9jaykge1xuXHRcdFx0YmxvY2tDb3VudGVyKys7XG5cblx0XHRcdHZhciBjdXN0b21HYXRlID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRmb3IodmFyIHggPSAwOyB4IDwgYmxvY2suZ2F0ZXMubGVuZ3RoOyB4KyspIHtcblx0XHRcdFx0dmFyIGdhdGUgPSBibG9jay5nYXRlc1t4XTtcblxuXHRcdFx0XHRpZihnYXRlLm9wdGlvbnMuY29uZGl0aW9uKSB7XG5cdFx0XHRcdFx0ZGVsZXRlIGdhdGUub3B0aW9ucy5jb25kaXRpb247XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBVcGRhdGUgZ2F0ZSB3aXJlc1xuXHRcdFx0XHR2YXIgd2lyZXMgPSBbXTtcblx0XHRcdFx0Z2F0ZS53aXJlcy5tYXAoZnVuY3Rpb24od2lyZSkge1xuXHRcdFx0XHRcdHdpcmVzLnB1c2goYmxvY2sud2lyZXMuaW5kZXhPZih3aXJlKSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRnYXRlLndpcmVzID0gd2lyZXM7XG5cblx0XHRcdFx0Ly8gYWRkIGdhdGUgdG8gY3VzdG9tIGdhdGVcblx0XHRcdFx0Y3VzdG9tR2F0ZS5hcHBlbmRHYXRlKGdhdGUubmFtZSwgd2lyZXMsIGdhdGUub3B0aW9ucyk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHJlZ2lzdGVyIGN1c3RvbSBnYXRlXG5cdFx0XHR2YXIgY3VzdG9tR2F0ZU5hbWUgPSBcImJsb2NrXCIgKyBibG9ja0NvdW50ZXI7XG5cdFx0XHRjaXJjdWl0LnJlZ2lzdGVyR2F0ZShjdXN0b21HYXRlTmFtZSwgY3VzdG9tR2F0ZSk7XG5cblx0XHRcdC8vIGFkZCBjdXN0b20gZ2F0ZSB0byBjaXJjdWl0XG5cdFx0XHR2YXIgY3VzdG9tR2F0ZU9wdGlvbnMgPSB7fTtcblx0XHRcdGlmKGJsb2NrLmNvbmRpdGlvbikge1xuXHRcdFx0XHRjdXN0b21HYXRlT3B0aW9ucy5jb25kaXRpb24gPSBibG9jay5jb25kaXRpb247XG5cdFx0XHR9XG5cdFx0XHRjaXJjdWl0LmFwcGVuZEdhdGUoY3VzdG9tR2F0ZU5hbWUsIGJsb2NrLndpcmVzLCBjdXN0b21HYXRlT3B0aW9ucyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIC0tLVxuXHRcdFx0Ly8gYWRkIG9yaWdpbmFsIGdhdGUgKG5vbi11bml0YXJ5IGdhdGVzIFthbmQgZ2F0ZXMgd2l0aCBtb3JlIHRoYW4gYmxvY2tTaXplIHdpcmVzIGlmIGFsbG93RmxleGlibGVCbG9ja1NpemUgPSBmYWxzZV0pXG5cdFx0XHQvLyAtLS1cblx0XHRcdGJsb2NrLmdhdGVzLm1hcChmdW5jdGlvbihnYXRlKSB7XG5cdFx0XHRcdGNpcmN1aXQuYXBwZW5kR2F0ZShnYXRlLm5hbWUsIGdhdGUud2lyZXMsIGdhdGUub3B0aW9ucyk7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHR0aGlzLmxvYWQoY2lyY3VpdC5zYXZlKGZhbHNlKSk7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS51c2VkR2F0ZXMgPSBmdW5jdGlvbihvcHRpb25zKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBkZWNvbXBvc2VkID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGRlY29tcG9zZWQubG9hZCh0aGlzLnNhdmUodHJ1ZSkpO1xuXHR2YXIgdXNlZCA9IFtdO1xuXHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgZGVjb21wb3NlZC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdGZvcih2YXIgY29sID0gMDsgY29sIDwgZGVjb21wb3NlZC5udW1Db2xzKCk7IGNvbCsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGRlY29tcG9zZWQuZ2F0ZXNbd2lyZV1bY29sXTtcblx0XHRcdGlmKGdhdGUgJiYgdXNlZC5pbmRleE9mKGdhdGUubmFtZSkgPCAwKSB7XG5cdFx0XHRcdHZhciBza2lwR2F0ZSA9IGZhbHNlO1xuXG5cdFx0XHRcdGlmKG9wdGlvbnMudW5pdGFyaWVzT25seSkge1xuXHRcdFx0XHRcdHZhciBiYXNpY0dhdGUgPSBkZWNvbXBvc2VkLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXTtcblx0XHRcdFx0XHRpZighYmFzaWNHYXRlIHx8ICFiYXNpY0dhdGUubWF0cml4IHx8ICFiYXNpY0dhdGUubWF0cml4Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0c2tpcEdhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKCFza2lwR2F0ZSkge1xuXHRcdFx0XHRcdHVzZWQucHVzaChnYXRlLm5hbWUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ3VzdG9tIGdhdGVzXG5cdGlmKCFvcHRpb25zLm5vQ3VzdG9tR2F0ZXMpIHtcblx0XHRmb3IodmFyIGN1c3RvbUdhdGVOYW1lIGluIHRoaXMuY3VzdG9tR2F0ZXMpIHtcblx0XHRcdHZhciBjdXN0b21HYXRlID0gdGhpcy5jdXN0b21HYXRlc1tjdXN0b21HYXRlTmFtZV07XG5cblx0XHRcdGlmKHVzZWQuaW5kZXhPZihjdXN0b21HYXRlTmFtZSkgPCAwKSB7XG5cdFx0XHRcdHVzZWQucHVzaChjdXN0b21HYXRlTmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHVzZWQ7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5jb3VudE9wcyA9IGZ1bmN0aW9uKG9iaiwgb3B0aW9ucykge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblx0b3B0aW9ucy5zaGFsbG93ID0gb3B0aW9ucy5zaGFsbG93IHx8IGZhbHNlO1xuXG5cdGlmKCFvYmopIHtcblx0XHRvYmogPSB0aGlzO1xuXHR9XG5cblx0dmFyIG9wcyA9IHt9O1xuXHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgb2JqLmdhdGVzLmxlbmd0aDsgd2lyZSsrKSB7XG5cdFx0Zm9yKHZhciBjb2wgPSAwOyBjb2wgPCBvYmouZ2F0ZXNbd2lyZV0ubGVuZ3RoOyBjb2wrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBvYmouZ2F0ZXNbd2lyZV1bY29sXTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHR2YXIgYmFzaWNHYXRlID0gdGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdGlmKGJhc2ljR2F0ZSkge1xuXHRcdFx0XHRcdGlmKG9wc1tnYXRlLm5hbWVdKSB7XG5cdFx0XHRcdFx0XHRvcHNbZ2F0ZS5uYW1lXSsrO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRvcHNbZ2F0ZS5uYW1lXSA9IDE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhciBjdXN0b21HYXRlID0gdGhpcy5jdXN0b21HYXRlc1tnYXRlLm5hbWVdO1xuXHRcdFx0XHRcdGlmKGN1c3RvbUdhdGUpIHtcblx0XHRcdFx0XHRcdGlmKG9wc1tnYXRlLm5hbWVdKSB7XG5cdFx0XHRcdFx0XHRcdG9wc1tnYXRlLm5hbWVdKys7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRvcHNbZ2F0ZS5uYW1lXSA9IDE7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKCFvcHRpb25zLnNoYWxsb3cpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHN1Yk9wcyA9IHRoaXMuY291bnRPcHMoY3VzdG9tR2F0ZSwgb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRcdGZvcihzdWJOYW1lIGluIHN1Yk9wcykge1xuXHRcdFx0XHRcdFx0XHRcdGlmKG9wc1tzdWJOYW1lXSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b3BzW3N1Yk5hbWVdICs9IHN1Yk9wc1tzdWJOYW1lXTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0b3BzW3N1Yk5hbWVdID0gc3ViT3BzW3N1Yk5hbWVdO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBvcHM7XG59O1xuXG5cbi8vXG4vLyBSZXR1cm5zIGFycmF5cyBvZiBxdWJpdHMgd2hlcmUgZ2F0ZXMgYXJlIHByZXNlbnRcbi8vXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ2V0Q291cGxpbmdNYXAgPSBmdW5jdGlvbihvcHRpb25zKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBjb3VwbGluZ01hcCA9IFwiXCI7XG5cblx0dmFyIGRlY29tcG9zZWQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0ZGVjb21wb3NlZC5sb2FkKHRoaXMuc2F2ZSh0cnVlKSk7XG5cblx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGRlY29tcG9zZWQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRmb3IodmFyIGNvbCA9IDA7IGNvbCA8IGRlY29tcG9zZWQubnVtQ29scygpOyBjb2wrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBkZWNvbXBvc2VkLmdldEdhdGVBdChjb2wsIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdHZhciBza2lwR2F0ZSA9IGZhbHNlO1xuXG5cdFx0XHRcdGlmKG9wdGlvbnMudW5pdGFyaWVzT25seSkge1xuXHRcdFx0XHRcdHZhciBiYXNpY0dhdGUgPSBkZWNvbXBvc2VkLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXTtcblx0XHRcdFx0XHRpZighYmFzaWNHYXRlIHx8ICFiYXNpY0dhdGUubWF0cml4IHx8ICFiYXNpY0dhdGUubWF0cml4Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0c2tpcEdhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKCFza2lwR2F0ZSkge1xuXHRcdFx0XHRcdHZhciB3aXJlc1N0ciA9IEpTT04uc3RyaW5naWZ5KGdhdGUud2lyZXMpO1xuXHRcdFx0XHRcdGlmKGNvdXBsaW5nTWFwLmluZGV4T2Yod2lyZXNTdHIpIDwgMCkge1xuXHRcdFx0XHRcdFx0aWYoY291cGxpbmdNYXApIHtcblx0XHRcdFx0XHRcdFx0Y291cGxpbmdNYXAgKz0gXCIsXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb3VwbGluZ01hcCArPSB3aXJlc1N0cjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gSlNPTi5wYXJzZShcIltcIiArIGNvdXBsaW5nTWFwICsgXCJdXCIpO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldEdhdGVEZWYgPSBmdW5jdGlvbihuYW1lKSB7XG5cdHZhciBnYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW25hbWVdO1xuXHRpZighZ2F0ZURlZikge1xuXHRcdGdhdGVEZWYgPSB0aGlzLmN1c3RvbUdhdGVzW25hbWVdO1xuXHR9XG5cdHJldHVybiBnYXRlRGVmO1xufTtcblxuLy8gLS0tXG4vLyBJbXBvcnQgZnJvbSBRdWJpdCBUb2FzdGVyXG4vLyAtLS1cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5pbXBvcnRSYXcgPSBmdW5jdGlvbihkYXRhLCBlcnJvckNhbGxiYWNrKSB7XG5cdHZhciBudW1RdWJpdHMgPSBkYXRhID8gKGRhdGEucXViaXRzIHx8IDApIDogMDtcblxuXHR0aGlzLmluaXQobnVtUXViaXRzKTtcblxuXHRpZighZGF0YSkge1xuXHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdGVycm9yQ2FsbGJhY2soW10pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHR9XG5cblx0Ly8gaW1wb3J0IGNsYXNzaWNhbCByZWdpc3RlcnNcblx0aWYoZGF0YS5jcmVncykge1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBkYXRhLmNyZWdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgY3JlZyA9IGRhdGEuY3JlZ3NbaV07XG5cblx0XHRcdGlmKCFjcmVnLm5hbWUpIHtcblx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiQ2xhc3NpY2FsIHJlZ2lzdGVyIFwiICsgaSArIFwiIGRvZXNuJ3QgaGF2ZSBhIFxcXCJuYW1lXFxcIi5cIjtcblx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlLCBsaW5lOiAwLCBjb2w6IDAgfSBdKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0dGhpcy5jcmVhdGVDcmVnKGNyZWcubmFtZSwgY3JlZy5sZW4gfHwgMCk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gaW1wb3J0IHByb2dyYW1cblx0aWYoZGF0YS5wcm9ncmFtKSB7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGRhdGEucHJvZ3JhbS5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBkYXRhLnByb2dyYW1baV07XG5cblx0XHRcdC8vIEltcG9ydCBmcm9tIG1hdHJpeCBpcyBub3QgaW1wbGVtZW50ZWQgeWV0LCBzbyBiZXN0IHdlIGhhdmUgaXMgZ2F0ZSBuYW1lXG5cdFx0XHQvLyBDaGVjayBpZiBnYXRlIGhhcyBuYW1lXG5cdFx0XHRpZighZ2F0ZS5uYW1lKSB7XG5cdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkdhdGUgXCIgKyBpICsgXCIgZG9lc24ndCBoYXZlIGEgXFxcIm5hbWVcXFwiLiBOYW1lIGlzIG9wdGlvbmFsIGFuZCB0aGlzIGlzIE9LIGZvciBRdWJpdFRvYXN0ZXIgYnV0IHdlIGNhbm5vdCBpbXBvcnQgZ2F0ZSBmcm9tIG1hdHJpeC4gTm90IGltcGxlbWVudGVkIHlldC5cIjtcblx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlLCBsaW5lOiAwLCBjb2w6IDAgfSBdKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2hlY2sgaWYgZ2F0ZSBuYW1lIGV4aXN0cyBpbiB0aGlzLmJhc2ljR2F0ZXNcblx0XHRcdHZhciBiYXNpY0dhdGUgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXTtcblx0XHRcdGlmKCFiYXNpY0dhdGUpIHtcblx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiVW5rbm93biBnYXRlIFxcXCJcIiArIGdhdGUubmFtZSArIFwiXFxcIi4gTmFtZSBpcyBvcHRpb25hbCBhbmQgdGhpcyBpcyBPSyBmb3IgUXViaXRUb2FzdGVyIGJ1dCB3ZSBjYW5ub3QgaW1wb3J0IGdhdGUgZnJvbSBtYXRyaXguIFdlIGNhbiBpbXBvcnQgb25seSBnYXRlcyBieSBuYW1lIGZyb20gc2V0IG9mIGtub3duIGdhdGVzLlwiO1xuXHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IDAsIGNvbDogMCB9IF0pO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cblx0XHRcdHZhciB3aXJlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZ2F0ZS53aXJlcyB8fCBbXSkpO1xuXHRcdFx0dmFyIG9wdGlvbnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdhdGUub3B0aW9ucyB8fCB7fSkpO1xuXG5cdFx0XHQvLyBjaGVjayBpZiBudW1iZXIgb2Ygd2lyZXMgaXMgY29ycmVjdFxuXHRcdFx0dmFyIGJhc2ljR2F0ZVF1Yml0cyA9IGJhc2ljR2F0ZS5tYXRyaXggJiYgYmFzaWNHYXRlLm1hdHJpeC5sZW5ndGggPyBtYXRoLmxvZzIoYmFzaWNHYXRlLm1hdHJpeC5sZW5ndGgpIDogMTtcblx0XHRcdGlmKHdpcmVzLmxlbmd0aCAhPSBiYXNpY0dhdGVRdWJpdHMpIHtcblx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiR2F0ZSBcXFwiXCIgKyBnYXRlLm5hbWUgKyBcIlxcXCIgaGFzIFwiICsgd2lyZXMubGVuZ3RoICsgXCIgd2lyZXMgYnV0IHNob3VsZCBoYXZlIFwiICsgYmFzaWNHYXRlUXViaXRzICsgXCIgd2lyZXMuXCI7XG5cdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSwgbGluZTogMCwgY29sOiAwIH0gXSk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIGlmIGFsbCBwYXJhbWV0ZXJzIGFyZSBwcmVzZW50XG5cdFx0XHRpZihiYXNpY0dhdGUucGFyYW1zICYmIGJhc2ljR2F0ZS5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRcdGlmKCFvcHRpb25zLnBhcmFtcykge1xuXHRcdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIk1pc3NpbmcgcGFyYW1ldGVycyBmb3IgZ2F0ZSBcXFwiXCIgKyBnYXRlLm5hbWUgKyBcIlxcXCIuIEV4cGVjdGluZyBcIiArIGJhc2ljR2F0ZS5wYXJhbXMubGVuZ3RoICsgXCIgcGFyYW1ldGVycy5cIjtcblx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSwgbGluZTogMCwgY29sOiAwIH0gXSk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGZvcih2YXIgcCA9IDA7IHAgPCBiYXNpY0dhdGUucGFyYW1zLmxlbmd0aDsgcCsrKSB7XG5cdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IGJhc2ljR2F0ZS5wYXJhbXNbcF07XG5cblx0XHRcdFx0XHRpZih0eXBlb2Ygb3B0aW9ucy5wYXJhbXNbcGFyYW1OYW1lXSA9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJNaXNzaW5nIHBhcmFtZXRlciBcXFwiXCIgKyBwYXJhbU5hbWUgKyBcIlxcXCIgZm9yIGdhdGUgXFxcIlwiICsgZ2F0ZS5uYW1lICsgXCJcXFwiLlwiO1xuXHRcdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSwgbGluZTogMCwgY29sOiAwIH0gXSk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHR0aGlzLmFwcGVuZEdhdGUoZ2F0ZS5uYW1lLCB3aXJlcywgb3B0aW9ucyk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gVGhpcyBlcnJvciBoYW5kbGluZyBpcyBjcipwIGJ1dCBsZXQncyBiZSBjb25zaXN0ZW50IHdpdGggaW1wb3J0UUFTTSgpIGZvciBub3dcblx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdGVycm9yQ2FsbGJhY2soW10pO1xuXHR9XG59O1xuXG4vLyAtLS1cbi8vIEV4cG9ydCB0byBRdWJpdCBUb2FzdGVyXG4vLyAtLS1cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRSYXcgPSBmdW5jdGlvbigpIHtcblx0dmFyIGdsb2JhbFBhcmFtcyA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucGFyYW1zID8gdGhpcy5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXHR2YXIgZ2xvYmFsUGFyYW1zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShnbG9iYWxQYXJhbXMpKTtcblx0Zm9yKHZhciBnbG9iYWxQYXJhbU5hbWUgaW4gZ2xvYmFsUGFyYW1zKSB7XG5cdFx0Z2xvYmFsUGFyYW1zW2dsb2JhbFBhcmFtTmFtZV0gPSBtYXRoLmV2YWx1YXRlKGdsb2JhbFBhcmFtc1tnbG9iYWxQYXJhbU5hbWVdKTtcblx0fVxuXG5cdHZhciBkZWNvbXBvc2VkID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGRlY29tcG9zZWQubG9hZCh0aGlzLnNhdmUodHJ1ZSkpO1xuXG5cdHZhciBudW1Db2xzID0gZGVjb21wb3NlZC5udW1Db2xzKCk7XG5cdHZhciBzZXF1ZW5jZSA9IFtdO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGRlY29tcG9zZWQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gZGVjb21wb3NlZC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHR2YXIgZ3QgPSBkZWNvbXBvc2VkLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXTtcblx0XHRcdFx0aWYoIWd0KSB7XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coXCJVbmtub3duIGdhdGUgXFxcIlwiICsgZ2F0ZS5uYW1lICsgXCJcXFwiLlwiKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgcmF3R2F0ZSA9IGRlY29tcG9zZWQuZ2V0UmF3R2F0ZShndCwgZ2F0ZS5vcHRpb25zKTtcblxuXHRcdFx0XHR2YXIgcmF3TWF0cml4ID0gW107XG5cdFx0XHRcdHJhd0dhdGUubWFwKGZ1bmN0aW9uKHJvdykge1xuXHRcdFx0XHRcdHZhciByYXdSb3cgPSBbXTtcblx0XHRcdFx0XHRyb3cubWFwKGZ1bmN0aW9uKGNlbGwpIHtcblx0XHRcdFx0XHRcdGNlbGwgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGNlbGwpKTtcblx0XHRcdFx0XHRcdGlmKHR5cGVvZiBjZWxsID09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRcdFx0aWYoY2VsbFtcIm1hdGhqc1wiXSAmJiB0eXBlb2YgY2VsbFtcIm1hdGhqc1wiXSA9PSBcInN0cmluZ1wiKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2VsbFtcInR5cGVcIl0gPSBjZWxsW1wibWF0aGpzXCJdLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIGNlbGwubWF0aGpzO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyYXdSb3cucHVzaChjZWxsKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRyYXdNYXRyaXgucHVzaChyYXdSb3cpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHR2YXIgb3B0aW9ucyA9IHt9O1xuXHRcdFx0XHRpZihnYXRlLm9wdGlvbnMpIHtcblx0XHRcdFx0XHRvcHRpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShnYXRlLm9wdGlvbnMpKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKG9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0Zm9yKHZhciBwYXJhbU5hbWUgaW4gb3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdG9wdGlvbnMucGFyYW1zW3BhcmFtTmFtZV0gPSBtYXRoLmV2YWx1YXRlKG9wdGlvbnMucGFyYW1zW3BhcmFtTmFtZV0sIGdsb2JhbFBhcmFtcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0c2VxdWVuY2UucHVzaCh7XG5cdFx0XHRcdFx0bmFtZTogZ2F0ZS5uYW1lLFxuXHRcdFx0XHRcdG1hdHJpeDogcmF3TWF0cml4LFxuXHRcdFx0XHRcdHdpcmVzOiBnYXRlLndpcmVzLFxuXHRcdFx0XHRcdG9wdGlvbnM6IG9wdGlvbnNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dmFyIGNyZWdzID0gW107XG5cdGZvcih2YXIgY3JlZyBpbiBkZWNvbXBvc2VkLmNyZWdzKSB7XG5cdFx0Y3JlZ3MucHVzaCh7XG5cdFx0XHRuYW1lOiBjcmVnLFxuXHRcdFx0bGVuOiBkZWNvbXBvc2VkLmNyZWdzW2NyZWddLmxlbmd0aCB8fCAwXG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4ge1xuXHRcdHF1Yml0czogZGVjb21wb3NlZC5udW1RdWJpdHMsXG5cdFx0Y3JlZ3M6IGNyZWdzLFxuXHRcdHByb2dyYW06IHNlcXVlbmNlXG5cdH07XG59O1xuXG4vL1xuLy8gUmV0dXJucyBpbnB1dCBmaWxlIGZvciBRdWFudHVtIEdlbmVyYXRvclxuLy9cbi8vIG9wdGlvbnM6IHsgXG4vLyAgICAgbm9WZWN0b3JzOiBib29sIChkZWZhdWx0OiBmYWxzZSkgLy8gc2V0IHRydWUgZm9yIHRyYW5zcGlsaW5nIHdpdGggXCJyZXBsYWNlX2Jsb2Nrc1wiICYgXCJyZXBsYWNlX2dhdGVzXCIgbWV0aG9kcyB0byBhdm9pZCBnZW5lcmF0aW5nIChsYXJnZSkgdmVjdG9yc1xuLy8gICAgIGZyb21NYXRyaXg6IGJvb2wgKGRlZmF1bHQ6IGZhbHNlKSAvLyBkaXJlY3RseSBzZW5kIG1hdHJpeCB0byBnZW5lcmF0b3IgKGluc3RlYWQgdmVjdG9ycylcbi8vICAgICBudW1TYW1wbGVzOiBpbnQgKGRlZmF1bHQ6IGF1dG8pIC8vIG51bWJlciBvZiByYW5kb20gdmVjdG9yc1xuLy8gICAgIHVzZUdhdGVzOiBhcnJheSBvZiBzdHJpbmcgKGRlZmF1bHQ6IFtcInUzLCBcImN4XCJdKSAvLyBnYXRlcyB0byB1c2Ugd2hlbiBnZW5lcmF0aW5nIHJhbmRvbSB2ZWN0b3JzXG4vLyB9XG4vL1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0VG9HZW5lcmF0b3IgPSBmdW5jdGlvbihvcHRpb25zKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBxYXNtID0gdGhpcy5leHBvcnRRQVNNKG51bGwsIGZhbHNlLCBudWxsLCBmYWxzZSwgdHJ1ZSk7XG5cdHZhciB1c2VkR2F0ZXMgPSB0aGlzLnVzZWRHYXRlcyh7IG5vQ3VzdG9tR2F0ZXM6IHRydWUsIHVuaXRhcmllc09ubHk6IHRydWUgfSk7XG5cdHZhciBjb3VwbGluZ01hcCA9IHRoaXMuZ2V0Q291cGxpbmdNYXAoeyB1bml0YXJpZXNPbmx5OiB0cnVlIH0pO1xuXG5cdHZhciBvdXRwdXQgPSB7XG5cdFx0c291cmNlOiB7IFxuXHRcdFx0Y2lyY3VpdDogeyBcblx0XHRcdFx0cWFzbTogcWFzbVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRwcm9ibGVtOiBbXSxcblxuXHRcdHR5cGU6IFwiY2lyY3VpdFwiLFxuXG5cdFx0c2V0dGluZ3M6IHtcblx0XHRcdGFsbG93ZWRfZ2F0ZXM6IHVzZWRHYXRlcy5qb2luKFwiLFwiKSxcblx0XHRcdGNvdXBsaW5nX21hcDogY291cGxpbmdNYXBcblx0XHR9XG5cdH07XG5cblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZSh0cnVlKSk7XG5cblx0aWYob3B0aW9ucy5mcm9tTWF0cml4KSB7XG5cdFx0dmFyIG1hdHJpeCA9IGNpcmN1aXQuY2lyY3VpdE1hdHJpeCgpO1xuXHRcdHZhciB1bml0YXJ5ID0gW107XG5cblx0XHRtYXRyaXgubWFwKGZ1bmN0aW9uKHJvdykge1xuXHRcdFx0cm93Lm1hcChmdW5jdGlvbih2YWx1ZSkge1xuXHRcdFx0XHRpZih0eXBlb2YgdmFsdWUgPT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdHVuaXRhcnkucHVzaChbdmFsdWUucmUsIHZhbHVlLmltXSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dW5pdGFyeS5wdXNoKHZhbHVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRvdXRwdXQucHJvYmxlbS5wdXNoKHtcblx0XHRcdHVuaXRhcnk6IHVuaXRhcnlcblx0XHR9KTtcblxuXHRcdHJldHVybiBvdXRwdXQ7XG5cdH1cblxuXHRpZighb3B0aW9ucy5ub1ZlY3RvcnMpIHtcblx0XHR2YXIgc3RhdGVDaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cblx0XHR2YXIgbnVtU2FtcGxlcyA9IG9wdGlvbnMubnVtU2FtcGxlcyB8fCAodGhpcy5udW1RdWJpdHMgPCAzID8gOCA6ICh0aGlzLm51bVF1Yml0cyA8IDUgPyAoKDEgPDwgdGhpcy5udW1RdWJpdHMpICsgMSkgOiAodGhpcy5udW1RdWJpdHMgPCA5ID8gKHRoaXMubnVtUXViaXRzICogNCkgOiB0aGlzLm51bVF1Yml0cykpKTtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgbnVtU2FtcGxlcyArIDE7IGkrKykge1xuXG5cdFx0XHR2YXIgc2V0ID0geyBpbnB1dDogW10sIG91dHB1dDogW10gfTtcblxuXHRcdFx0dmFyIGluaXRpYWxWZWN0b3IgPSBbXTtcblxuXHRcdFx0aWYoaSA+IDApIHtcblx0XHRcdFx0c3RhdGVDaXJjdWl0LnJhbmRvbUNpcmN1aXQodGhpcy5udW1RdWJpdHMsIDIwLCB7IHVzZUdhdGVzOiBvcHRpb25zLnVzZUdhdGVzIHx8IFtcInUzXCIsIFwiY3hcIl0sIG5vQ2xhc3NpY0NvbnRyb2w6IHRydWUsIG5vTWVhc3VyZTogdHJ1ZSwgbm9SZXNldDogdHJ1ZSB9KTtcblx0XHRcdFx0c3RhdGVDaXJjdWl0LnJ1bigpO1xuXG5cdFx0XHRcdHN0YXRlQ2lyY3VpdC5zdGF0ZUFzQXJyYXkoKS5tYXAoZnVuY3Rpb24oc3RhdGUpIHtcblx0XHRcdFx0XHRzZXQuaW5wdXQucHVzaChbIHN0YXRlLmFtcGxpdHVkZS5yZSwgc3RhdGUuYW1wbGl0dWRlLmltIF0pO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRpbml0aWFsVmVjdG9yID0gc3RhdGVDaXJjdWl0LnN0YXRlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2lyY3VpdC5pbml0U3RhdGUoKTtcblxuXHRcdFx0XHRjaXJjdWl0LnN0YXRlQXNBcnJheSgpLm1hcChmdW5jdGlvbihzdGF0ZSkge1xuXHRcdFx0XHRcdHNldC5pbnB1dC5wdXNoKFsgc3RhdGUuYW1wbGl0dWRlLnJlLCBzdGF0ZS5hbXBsaXR1ZGUuaW0gXSk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGluaXRpYWxWZWN0b3IgPSBjaXJjdWl0LnN0YXRlO1xuXHRcdFx0fVxuXG5cdFx0XHRjaXJjdWl0LnJ1bihudWxsLCB7IGluaXRpYWxTdGF0ZTogaW5pdGlhbFZlY3RvciB9KTtcblxuXHRcdFx0Y2lyY3VpdC5zdGF0ZUFzQXJyYXkoKS5tYXAoZnVuY3Rpb24oc3RhdGUpIHtcblx0XHRcdFx0c2V0Lm91dHB1dC5wdXNoKFsgc3RhdGUuYW1wbGl0dWRlLnJlLCBzdGF0ZS5hbXBsaXR1ZGUuaW0gXSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0b3V0cHV0LnByb2JsZW0ucHVzaChzZXQpO1xuXHRcdH1cblx0XHRyZXR1cm4gb3V0cHV0O1xuXHR9XG5cblx0cmV0dXJuIG91dHB1dDtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnNhdmUgPSBmdW5jdGlvbihkZWNvbXBvc2UsIGxpZ2h0d2VpZ2h0KSB7XG5cdHRoaXMudXBkYXRlR2xvYmFsUGFyYW1zKCk7XG5cblx0dmFyIGRhdGEgPSB7XG5cdFx0bnVtUXViaXRzOiB0aGlzLm51bVF1Yml0cyxcblx0XHRwYXJhbXM6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5wYXJhbXMpKSxcblx0XHRvcHRpb25zOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMub3B0aW9ucykpLFxuXHRcdGdhdGVzOiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuZ2F0ZXMpKSxcblx0XHRjdXN0b21HYXRlczogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmN1c3RvbUdhdGVzKSksXG5cdFx0Y3JlZ3M6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jcmVncykpXG5cdH1cblxuXHR2YXIgcmVzID0gbnVsbDtcblx0aWYoZGVjb21wb3NlKSB7XG5cdFx0cmVzID0gdGhpcy5kZWNvbXBvc2UoZGF0YSk7XG5cdH0gZWxzZSB7XG5cdFx0cmVzID0gZGF0YTtcblx0fVxuXG5cdC8vIC0tLVxuXHQvLyByZW1vdmUgSWQgZnJvbSBnYXRlcz9cblx0Ly8gLS0tXG5cdGlmKGxpZ2h0d2VpZ2h0KSB7XG5cdFx0aWYocmVzLmdhdGVzKSB7XG5cdFx0XHRyZXMuZ2F0ZXMubWFwKGZ1bmN0aW9uKHJvdykge1xuXHRcdFx0XHRpZihyb3cpIHtcblx0XHRcdFx0XHRyb3cubWFwKGZ1bmN0aW9uKGNlbGwpIHtcblx0XHRcdFx0XHRcdGlmKGNlbGwgJiYgY2VsbC5pZCkge1xuXHRcdFx0XHRcdFx0XHRkZWxldGUgY2VsbC5pZDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0aWYocmVzLmN1c3RvbUdhdGVzKSB7XG5cdFx0XHRmb3IodmFyIGN1c3RvbUdhdGVOYW1lIGluIHJlcy5jdXN0b21HYXRlcykge1xuXHRcdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHJlcy5jdXN0b21HYXRlc1tjdXN0b21HYXRlTmFtZV07XG5cdFx0XHRcdGlmKGN1c3RvbUdhdGUgJiYgY3VzdG9tR2F0ZS5nYXRlcykge1xuXHRcdFx0XHRcdGN1c3RvbUdhdGUuZ2F0ZXMubWFwKGZ1bmN0aW9uKHJvdykge1xuXHRcdFx0XHRcdFx0aWYocm93KSB7XG5cdFx0XHRcdFx0XHRcdHJvdy5tYXAoZnVuY3Rpb24oY2VsbCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmKGNlbGwgJiYgY2VsbC5pZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIGNlbGwuaWQ7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHQvLyAtLS1cblxuXHRyZXR1cm4gcmVzO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmxvYWQgPSBmdW5jdGlvbihvYmopIHtcblx0dGhpcy5udW1RdWJpdHMgPSBvYmoubnVtUXViaXRzIHx8IDE7XG5cdHRoaXMuY2xlYXIoKTtcblx0dGhpcy5wYXJhbXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iai5wYXJhbXMgfHwgW10pKTtcblx0dGhpcy5vcHRpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmoub3B0aW9ucyB8fCB7fSkpO1xuXHR0aGlzLmdhdGVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmouZ2F0ZXMgfHwgW10pKTtcblx0dGhpcy5jdXN0b21HYXRlcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqLmN1c3RvbUdhdGVzIHx8IHt9KSk7XG5cdHRoaXMuY3JlZ3MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iai5jcmVncyB8fCB7fSkpO1xuXHQvLyBkZWZhdWx0IG9wdGlvbnNcblx0dGhpcy5vcHRpb25zLnBhcmFtcyA9IHRoaXMub3B0aW9ucy5wYXJhbXMgfHwge307XG5cdHRoaXMub3B0aW9ucy5oeWJyaWQgPSB0aGlzLm9wdGlvbnMuaHlicmlkIHx8IGZhbHNlO1xuXHRpZighdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMpIHtcblx0XHR0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucyA9IHRoaXMuZGVmYXVsdEh5YnJpZE9wdGlvbnMoKTtcblx0fVxufTtcblxuXG52YXIgZ2VuZXJhdGVHcmF5Q29kZSA9IGZ1bmN0aW9uKG51bUJpdHMpIHtcblx0aWYobnVtQml0cyA8PSAwKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGdlbmVyYXRlIHRoZSBncmF5IGNvZGUgZm9yIGxlc3MgdGhhbiAxIGJpdC5cIik7XG5cdH1cblxuXHR2YXIgcmVzdWx0ID0gWzBdO1xuXHRmb3IoaSA9IDA7IGkgPCBudW1CaXRzOyBpKyspIHtcblx0XHR2YXIgcmV2ZXJzZWQgPSBbXS5jb25jYXQocmVzdWx0KS5yZXZlcnNlKCk7XG5cdFx0cmV2ZXJzZWQubWFwKGZ1bmN0aW9uKHgpIHtcblx0XHRcdHJlc3VsdC5wdXNoKHggKyBtYXRoLnBvdygyLCBpKSk7XG5cdFx0fSk7XG5cdH1cblxuXHR2YXIgZ3JheSA9IFtdO1xuXHRyZXN1bHQubWFwKGZ1bmN0aW9uKGRlYykge1xuXHRcdGdyYXkucHVzaChiaW5TdHIoZGVjLCBudW1CaXRzKSk7XG5cdH0pO1xuXG5cdHJldHVybiBncmF5O1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ3JheUNvZGVDaGFpbiA9IGZ1bmN0aW9uKG51bUN0cmxRdWJpdHMsIGdhdGVOYW1lLCBnYXRlT3B0aW9ucykge1xuXG5cdGZ1bmN0aW9uIGNvbXBhcmVTdHJpbmdzKHMxLCBzMikge1xuXHRcdHZhciBjb21wID0gW107XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IHMxLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb21wLnB1c2goczFbaV0gIT0gczJbaV0pO1xuXHRcdH1cblx0XHRyZXR1cm4gY29tcDtcblx0fVxuXG5cdGZ1bmN0aW9uIGluZGljZXNPZkNoYXIocywgY2gpIHtcblx0XHR2YXIgaW5kaWNlcyA9IFtdO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZihzW2ldID09IGNoKSB7XG5cdFx0XHRcdGluZGljZXMucHVzaChpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGluZGljZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBjb3VudENoYXIocywgY2gpIHtcblx0XHR2YXIgY291bnQgPSAwO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZihzW2ldID09IGNoKSB7XG5cdFx0XHRcdGNvdW50Kys7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBjb3VudDtcblx0fVxuXG5cdHZhciBxQ29udHJvbHMgPSBbXTtcblx0Zm9yKHZhciBpID0gMDsgaSA8IG51bUN0cmxRdWJpdHM7IGkrKykge1xuXHRcdHFDb250cm9scy5wdXNoKGkpO1xuXHR9XG5cblx0dmFyIHFUYXJnZXQgPSBudW1DdHJsUXViaXRzO1xuXHR2YXIgZ3JheUNvZGUgPSBnZW5lcmF0ZUdyYXlDb2RlKG51bUN0cmxRdWJpdHMpO1xuXHR2YXIgbGFzdFBhdHRlcm4gPSBudWxsO1xuXG5cdHZhciBydWxlcyA9IFtdO1xuXHRncmF5Q29kZS5tYXAoZnVuY3Rpb24ocGF0dGVybikge1xuXHRcdHZhciBsbVBvcyA9IHBhdHRlcm4uaW5kZXhPZihcIjFcIik7XG5cdFx0aWYobG1Qb3MgPj0gMCkge1xuXHRcdFx0aWYoIWxhc3RQYXR0ZXJuKSB7XG5cdFx0XHRcdGxhc3RQYXR0ZXJuID0gcGF0dGVybjtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGNvbXAgPSBjb21wYXJlU3RyaW5ncyhwYXR0ZXJuLCBsYXN0UGF0dGVybik7XG5cdFx0XHR2YXIgcG9zID0gY29tcC5pbmRleE9mKHRydWUpO1xuXHRcdFx0aWYocG9zID49IDApIHtcblx0XHRcdFx0aWYocG9zICE9IGxtUG9zKSB7XG5cdFx0XHRcdFx0cnVsZXMucHVzaCh7IGdhdGVOYW1lOiBcImN4XCIsIHdpcmVzOiBbIHFDb250cm9sc1twb3NdLCBxQ29udHJvbHNbbG1Qb3NdIF0sIG9wdGlvbnM6IG51bGwgfSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFyIGluZGljZXMgPSBpbmRpY2VzT2ZDaGFyKHBhdHRlcm4sIFwiMVwiKTtcblx0XHRcdFx0XHRmb3IodmFyIGlkeCA9IDE7IGlkeCA8IGluZGljZXMubGVuZ3RoOyBpZHgrKykge1xuXHRcdFx0XHRcdFx0cnVsZXMucHVzaCh7IGdhdGVOYW1lOiBcImN4XCIsIHdpcmVzOiBbIHFDb250cm9sc1tpbmRpY2VzW2lkeF1dLCBxQ29udHJvbHNbbG1Qb3NdIF0sIG9wdGlvbnM6IG51bGwgfSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmKCEoY291bnRDaGFyKHBhdHRlcm4sIFwiMVwiKSAlIDIpKSB7XG5cdFx0XHRcdC8vIGludmVyc2Vcblx0XHRcdFx0Ly8gISEhXG5cdFx0XHRcdC8vIFdhcm5pbmcgLSB0aGlzIHdvcmtzIG9ubHkgd2l0aCBnYXRlIHdoaWNoIGlzIG93biBpbnZlcnNlXG5cdFx0XHRcdC8vIFRPRE86IGltcGxlbWVudCBwcm9wZXIgaW52ZXJzZSBmb3IgYWxsIGdhdGVzXG5cdFx0XHRcdC8vICEhIVxuXHRcdFx0XHR2YXIgaW52ZXJzZU9wdGlvbnMgPSBudWxsO1xuXHRcdFx0XHRpZihnYXRlT3B0aW9ucykge1xuXHRcdFx0XHRcdGludmVyc2VPcHRpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShnYXRlT3B0aW9ucykpO1xuXHRcdFx0XHRcdGlmKGludmVyc2VPcHRpb25zLnBhcmFtcykge1xuXHRcdFx0XHRcdFx0Zm9yKGtleSBpbiBpbnZlcnNlT3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHZhbCA9IGludmVyc2VPcHRpb25zLnBhcmFtc1trZXldO1xuXHRcdFx0XHRcdFx0XHRpZih0eXBlb2YgdmFsID09IFwibnVtYmVyXCIpIHtcblx0XHRcdFx0XHRcdFx0XHR2YWwgPSAwIC0gdmFsO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHZhbCA9IFwiLShcIiArIHZhbCArIFwiKVwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGludmVyc2VPcHRpb25zLnBhcmFtc1trZXldID0gdmFsO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRydWxlcy5wdXNoKHsgZ2F0ZU5hbWU6IGdhdGVOYW1lLCB3aXJlczogWyBxQ29udHJvbHNbbG1Qb3NdLCBxVGFyZ2V0IF0sIG9wdGlvbnM6IGludmVyc2VPcHRpb25zIH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cnVsZXMucHVzaCh7IGdhdGVOYW1lOiBnYXRlTmFtZSwgd2lyZXM6IFsgcUNvbnRyb2xzW2xtUG9zXSwgcVRhcmdldCBdLCBvcHRpb25zOiBnYXRlT3B0aW9ucyB9KTtcblx0XHRcdH1cblx0XHRcdGxhc3RQYXR0ZXJuID0gcGF0dGVybjtcblx0XHR9XG5cdH0pO1xuXG5cdHJldHVybiBydWxlcztcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLk1DVTFDaXJjdWl0ID0gZnVuY3Rpb24oY3RybFF1Yml0cykge1xuXHR2YXIgbnVtQ3RybFF1Yml0cyA9IDA7XG5cdHZhciBpbnZlcnRDb250cm9scyA9IFtdO1xuXHRpZih0eXBlb2YgY3RybFF1Yml0cyA9PSBcIm51bWJlclwiKSB7XG5cdFx0bnVtQ3RybFF1Yml0cyA9IGN0cmxRdWJpdHM7XG5cdH0gZWxzZSB7XG5cdFx0bnVtQ3RybFF1Yml0cyA9IGN0cmxRdWJpdHMubGVuZ3RoIHx8IDA7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IG51bUN0cmxRdWJpdHM7IGkrKykge1xuXHRcdFx0aWYoIWN0cmxRdWJpdHNbaV0gfHwgKHR5cGVvZiBjdHJsUXViaXRzW2ldID09IFwibnVtYmVyXCIgJiYgY3RybFF1Yml0c1tpXSA8IDApKSB7XG5cdFx0XHRcdGludmVydENvbnRyb2xzLnB1c2goaSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYobnVtQ3RybFF1Yml0cyA9PSAwKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNyZWF0ZSBtdWx0aS1jb250cm9sbGVkIGdhdGUgd2l0aCB6ZXJvIGNvbnRyb2wgcXViaXRzLlwiKTtcblx0fVxuXG5cdGZ1bmN0aW9uIGFkZFgoY2lyY3VpdCwgd2lyZXMpIHtcblx0XHR3aXJlcy5tYXAoZnVuY3Rpb24od2lyZSkge1xuXHRcdFx0Y2lyY3VpdC5hcHBlbmRHYXRlKFwieFwiLCB3aXJlKTtcblx0XHR9KTtcblx0fVxuXG5cdHZhciBzY2FsZWRMYW1iZGEgPSBcImxhbWJkYSAvIFwiICsgbWF0aC5wb3coMiwgbnVtQ3RybFF1Yml0cyAtIDEpO1xuXHR2YXIgZ2F0ZU9wdGlvbnMgPSB7IHBhcmFtczogeyBsYW1iZGE6IHNjYWxlZExhbWJkYSB9IH07XG5cblx0dmFyIHFjID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cblx0aWYobnVtQ3RybFF1Yml0cyA9PSAxKSB7XG5cdFx0YWRkWChxYywgaW52ZXJ0Q29udHJvbHMpO1xuXHRcdHFjLmFwcGVuZEdhdGUoXCJjdTFcIiwgWzAsIDFdLCBnYXRlT3B0aW9ucyk7XG5cdFx0YWRkWChxYywgaW52ZXJ0Q29udHJvbHMpO1xuXHRcdHJldHVybiBxYztcblx0fVxuXG5cdGFkZFgocWMsIGludmVydENvbnRyb2xzKTtcblx0dmFyIHJ1bGVzID0gdGhpcy5ncmF5Q29kZUNoYWluKG51bUN0cmxRdWJpdHMsIFwiY3UxXCIsIGdhdGVPcHRpb25zKTtcblx0cnVsZXMubWFwKGZ1bmN0aW9uKHJ1bGUpIHtcblx0XHRxYy5hcHBlbmRHYXRlKHJ1bGUuZ2F0ZU5hbWUsIHJ1bGUud2lyZXMsIHJ1bGUub3B0aW9ucyk7XG5cdH0pO1xuXHRhZGRYKHFjLCBpbnZlcnRDb250cm9scyk7XG5cblx0cmV0dXJuIHFjO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuTUNYQ2lyY3VpdCA9IGZ1bmN0aW9uKGN0cmxRdWJpdHMpIHtcblx0dmFyIG51bUN0cmxRdWJpdHMgPSAwO1xuXHR2YXIgaW52ZXJ0Q29udHJvbHMgPSBbXTtcblx0aWYodHlwZW9mIGN0cmxRdWJpdHMgPT0gXCJudW1iZXJcIikge1xuXHRcdG51bUN0cmxRdWJpdHMgPSBjdHJsUXViaXRzO1xuXHR9IGVsc2Uge1xuXHRcdG51bUN0cmxRdWJpdHMgPSBjdHJsUXViaXRzLmxlbmd0aCB8fCAwO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBudW1DdHJsUXViaXRzOyBpKyspIHtcblx0XHRcdGlmKCFjdHJsUXViaXRzW2ldIHx8ICh0eXBlb2YgY3RybFF1Yml0c1tpXSA9PSBcIm51bWJlclwiICYmIGN0cmxRdWJpdHNbaV0gPCAwKSkge1xuXHRcdFx0XHRpbnZlcnRDb250cm9scy5wdXNoKGkpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHZhciBxYyA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRpZihudW1DdHJsUXViaXRzID09IDApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY3JlYXRlIG11bHRpLWNvbnRyb2xsZWQgZ2F0ZSB3aXRoIHplcm8gY29udHJvbCBxdWJpdHMuXCIpO1xuXHR9XG5cblx0ZnVuY3Rpb24gYWRkWChjaXJjdWl0LCB3aXJlcykge1xuXHRcdHdpcmVzLm1hcChmdW5jdGlvbih3aXJlKSB7XG5cdFx0XHRjaXJjdWl0LmFwcGVuZEdhdGUoXCJ4XCIsIHdpcmUpO1xuXHRcdH0pO1xuXHR9XG5cblx0aWYobnVtQ3RybFF1Yml0cyA9PSAxKSB7XG5cdFx0YWRkWChxYywgaW52ZXJ0Q29udHJvbHMpO1xuXHRcdHFjLmFwcGVuZEdhdGUoXCJjeFwiLCBbMCwgMV0pO1xuXHRcdGFkZFgocWMsIGludmVydENvbnRyb2xzKTtcblx0XHRyZXR1cm4gcWM7XG5cdH1cblxuXHRpZihudW1DdHJsUXViaXRzID09IDIpIHtcblx0XHRhZGRYKHFjLCBpbnZlcnRDb250cm9scyk7XG5cdFx0cWMuYXBwZW5kR2F0ZShcImNjeFwiLCBbMCwgMSwgMl0pO1xuXHRcdGFkZFgocWMsIGludmVydENvbnRyb2xzKTtcblx0XHRyZXR1cm4gcWM7XG5cdH1cblxuXHR2YXIgbWN1MSA9IHFjLk1DVTFDaXJjdWl0KG51bUN0cmxRdWJpdHMpO1xuXHR2YXIgbWN1MW5hbWUgPSBcIm1jdTFfXCIgKyBudW1DdHJsUXViaXRzO1xuXHR2YXIgbWN1MXdpcmVzID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBudW1DdHJsUXViaXRzICsgMTsgaSsrKSB7XG5cdFx0bWN1MXdpcmVzLnB1c2goaSk7XG5cdH1cblxuXHRxYy5yZWdpc3RlckdhdGUobWN1MW5hbWUsIG1jdTEpO1xuXHRhZGRYKHFjLCBpbnZlcnRDb250cm9scyk7XG5cdHFjLmFwcGVuZEdhdGUoXCJoXCIsIG51bUN0cmxRdWJpdHMpO1xuXHRxYy5hcHBlbmRHYXRlKG1jdTFuYW1lLCBtY3Uxd2lyZXMsIHsgcGFyYW1zOiB7IGxhbWJkYTogXCJwaVwiIH19KTtcblx0YWRkWChxYywgaW52ZXJ0Q29udHJvbHMpO1xuXHRxYy5hcHBlbmRHYXRlKFwiaFwiLCBudW1DdHJsUXViaXRzKTtcblxuXHRyZXR1cm4gcWM7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yZWdpc3RlckdhdGUgPSBmdW5jdGlvbihuYW1lLCBvYmopIHtcblx0aWYob2JqIGluc3RhbmNlb2YgUXVhbnR1bUNpcmN1aXQpIHtcblx0XHR0aGlzLmN1c3RvbUdhdGVzW25hbWVdID0gb2JqLnNhdmUoKTtcblx0fSBlbHNlIHtcblx0XHR0aGlzLmN1c3RvbUdhdGVzW25hbWVdID0gb2JqO1xuXHR9XG5cblx0aWYodGhpcy5pc011bHRpQ29udHJvbGxlZEdhdGUobmFtZSkpIHtcblx0XHR2YXIgbWNJbmZvID0gdGhpcy5kZWNvZGVNdWx0aUNvbnRyb2xsZWRHYXRlTmFtZShuYW1lKTtcblx0XHRpZihtY0luZm8ubnVtQ3RybFF1Yml0cyAhPSB0aGlzLmN1c3RvbUdhdGVzW25hbWVdLm51bVF1Yml0cyAtIDEpIHtcblx0XHRcdG1jSW5mby5udW1DdHJsUXViaXRzID0gdGhpcy5jdXN0b21HYXRlc1tuYW1lXS5udW1RdWJpdHMgLSAxO1xuXHRcdFx0dmFyIGN0cmxRdWJpdHMgPSBbXTtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBtY0luZm8ubnVtQ3RybFF1Yml0czsgaSsrKSB7XG5cdFx0XHRcdGN0cmxRdWJpdHMucHVzaCh0eXBlb2YgbWNJbmZvLmN0cmxRdWJpdHNbaV0gPT0gXCJ1bmRlZmluZWRcIiA/IHRydWUgOiBtY0luZm8uY3RybFF1Yml0c1tpXSk7XG5cdFx0XHR9XG5cdFx0XHRtY0luZm8uY3RybFF1Yml0cyA9IGN0cmxRdWJpdHM7XG5cdFx0fVxuXG5cdFx0dmFyIHJvb3RHYXRlID0gdGhpcy5iYXNpY0dhdGVzW21jSW5mby5yb290TmFtZV07XG5cdFx0aWYocm9vdEdhdGUgJiYgcm9vdEdhdGUuZHJhd2luZ0luZm8gJiYgcm9vdEdhdGUuZHJhd2luZ0luZm8uY29ubmVjdG9ycykge1xuXHRcdFx0aWYoIXRoaXMuY3VzdG9tR2F0ZXNbbmFtZV0uZHJhd2luZ0luZm8pIHtcblx0XHRcdFx0dGhpcy5jdXN0b21HYXRlc1tuYW1lXS5kcmF3aW5nSW5mbyA9IHt9O1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgY29ubmVjdG9ycyA9IFtdO1xuXHRcdFx0bWNJbmZvLmN0cmxRdWJpdHMubWFwKGZ1bmN0aW9uKGN0cmxRdWJpdCkge1xuXHRcdFx0XHRpZihjdHJsUXViaXQpIHtcblx0XHRcdFx0XHRjb25uZWN0b3JzLnB1c2goXCJkb3RcIik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29ubmVjdG9ycy5wdXNoKFwibmRvdFwiKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRjb25uZWN0b3JzLnB1c2gocm9vdEdhdGUuZHJhd2luZ0luZm8uY29ubmVjdG9yc1tyb290R2F0ZS5kcmF3aW5nSW5mby5jb25uZWN0b3JzLmxlbmd0aCAtIDFdKTtcblxuXHRcdFx0dGhpcy5jdXN0b21HYXRlc1tuYW1lXS5kcmF3aW5nSW5mby5jb25uZWN0b3JzID0gY29ubmVjdG9ycztcblx0XHRcdHRoaXMuY3VzdG9tR2F0ZXNbbmFtZV0uZHJhd2luZ0luZm8ucm9vdCA9IHJvb3RHYXRlLmRyYXdpbmdJbmZvLnJvb3Q7XG5cdFx0fVxuXHR9XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yZWdpc3Rlck1DWEdhdGUgPSBmdW5jdGlvbihjdHJsUXViaXRzKSB7XG5cdHZhciBnYXRlTmFtZSA9IHRoaXMubXVsdGlDb250cm9sbGVkR2F0ZU5hbWUoXCJtY3hcIiwgY3RybFF1Yml0cyk7XG5cdHRoaXMucmVnaXN0ZXJHYXRlKGdhdGVOYW1lLCB0aGlzLk1DWENpcmN1aXQoY3RybFF1Yml0cykuc2F2ZSh0cnVlKSk7XG5cdHJldHVybiBnYXRlTmFtZTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlZ2lzdGVyTUNVMUdhdGUgPSBmdW5jdGlvbihjdHJsUXViaXRzKSB7XG5cdHZhciBnYXRlTmFtZSA9IHRoaXMubXVsdGlDb250cm9sbGVkR2F0ZU5hbWUoXCJtY3UxXCIsIGN0cmxRdWJpdHMpO1xuXHR0aGlzLnJlZ2lzdGVyR2F0ZShnYXRlTmFtZSwgdGhpcy5NQ1UxQ2lyY3VpdChjdHJsUXViaXRzKS5zYXZlKHRydWUpKTtcblx0cmV0dXJuIGdhdGVOYW1lO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVnaXN0ZXJNdWx0aUNvbnRyb2xsZWRHYXRlID0gZnVuY3Rpb24ocm9vdE5hbWUsIGN0cmxRdWJpdHMpIHtcblx0c3dpdGNoKHJvb3ROYW1lKSB7XG5cdFx0Y2FzZSBcImN4XCI6IHJldHVybiB0aGlzLnJlZ2lzdGVyTUNYR2F0ZShjdHJsUXViaXRzKTsgYnJlYWs7XG5cdFx0Y2FzZSBcImN1MVwiOiByZXR1cm4gdGhpcy5yZWdpc3Rlck1DVTFHYXRlKGN0cmxRdWJpdHMpOyBicmVhaztcblx0fVxuXG5cdHJldHVybiBcIlwiO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldE9yUmVnaXN0ZXJNdWx0aUNvbnRyb2xsZWRFcXVpdmFsZW50ID0gZnVuY3Rpb24oZ2F0ZU5hbWUsIGludmVyc2VDb250cm9sKSB7XG5cdHZhciBnYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblx0aWYoZ2F0ZURlZikge1xuXHRcdGlmKGdhdGVEZWYuZHJhd2luZ0luZm8pIHtcblx0XHRcdC8vIEJhc2ljIGdhdGUgd2l0aCBtdWx0aS1jb250cm9sbGVkL2ludmVyc2UgY29udHJvbGxlZCBpbXBsZW1lbnRhdGlvblxuXHRcdFx0aWYoZ2F0ZU5hbWUgPT0gXCJ4XCIgfHwgZ2F0ZU5hbWUgPT0gXCJ1MVwiIHx8IGdhdGVEZWYuZHJhd2luZ0luZm8ucm9vdCA9PSBcInhcIiB8fCBnYXRlRGVmLmRyYXdpbmdJbmZvLnJvb3QgPT0gXCJ1MVwiKSB7XG5cdFx0XHRcdGlmKCF0aGlzLmJhc2ljR2F0ZXNbXCJjXCIgKyBnYXRlTmFtZV0gfHwgaW52ZXJzZUNvbnRyb2wpIHtcblx0XHRcdFx0XHQvLyBjcmVhdGUgbXVsdGkgY29udHJvbGxlZCB2ZXJzaW9uIGFuZCByZXR1cm4gaXRzIG5hbWVcblx0XHRcdFx0XHR2YXIgcm9vdE5hbWUgPSBcImNcIiArIChnYXRlRGVmLmRyYXdpbmdJbmZvLnJvb3QgfHwgZ2F0ZU5hbWUpO1xuXHRcdFx0XHRcdHZhciBudW1DdHJsUXViaXRzID0gbWF0aC5sb2cyKGdhdGVEZWYubWF0cml4Lmxlbmd0aCk7XG5cdFx0XHRcdFx0dmFyIGN0cmxRdWJpdHMgPSBbXTtcblx0XHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgbnVtQ3RybFF1Yml0cyAtIDE7IGkrKykge1xuXHRcdFx0XHRcdFx0Y3RybFF1Yml0cy5wdXNoKHRydWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjdHJsUXViaXRzLnVuc2hpZnQoIWludmVyc2VDb250cm9sKTtcblxuXHRcdFx0XHRcdHJldHVybiB0aGlzLnJlZ2lzdGVyTXVsdGlDb250cm9sbGVkR2F0ZShyb290TmFtZSwgY3RybFF1Yml0cyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gdGhlcmUgaXMgYmFzaWMgZ2F0ZSB3aXRoIGFkZGl0aW9uYWwgY29udHJvbFxuXHRcdFx0XHRcdHJldHVybiBcImNcIiArIGdhdGVOYW1lO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQmFzaWMgZ2F0ZSBmb3Igd2hpY2ggd2UgZG9uJ3QgaGF2ZSBtdWx0aS1jb250cm9sbGVkIG9yIGludmVyc2UgY29udHJvbGxlZCBpbXBsZW1lbnRhdGlvblxuXHRcdC8vIGJ1dCBtYXliZSB3ZSBoYXZlIGJhc2ljIGdhdGUgd2l0aCBhZGRpdGlvbmFsIGNvbnRyb2xcblx0XHRmb3IodmFyIGduIGluIHRoaXMuYmFzaWNHYXRlcykge1xuXHRcdFx0dmFyIHRtcEdhdGVEZWYgPSB0aGlzLmJhc2ljR2F0ZXNbZ25dO1xuXHRcdFx0aWYodG1wR2F0ZURlZiAmJiB0bXBHYXRlRGVmLmRyYXdpbmdJbmZvICYmIHRtcEdhdGVEZWYuZHJhd2luZ0luZm8ucm9vdCAmJiB0bXBHYXRlRGVmLmRyYXdpbmdJbmZvLnJvb3QgPT0gZ2F0ZU5hbWUpIHtcblx0XHRcdFx0aWYoIWludmVyc2VDb250cm9sKSB7XG5cdFx0XHRcdFx0Ly8gdGhlcmUgaXMgYmFzaWMgZ2F0ZSB3aXRoIGFkZGl0aW9uYWwgY29udHJvbFxuXHRcdFx0XHRcdHJldHVybiBnbjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdGlmKHRoaXMuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdKSB7XG5cdFx0dmFyIG1jSW5mbyA9IHRoaXMuZGVjb2RlTXVsdGlDb250cm9sbGVkR2F0ZU5hbWUoZ2F0ZU5hbWUpO1xuXHRcdGlmKCFtY0luZm8gfHwgIW1jSW5mby5udW1DdHJsUXViaXRzKSB7XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9XG5cblx0XHRpZihtY0luZm8ucm9vdE5hbWUgPT0gXCJjeFwiIHx8IG1jSW5mby5yb290TmFtZSA9PSBcImN1MVwiKSB7XG5cdFx0XHQvLyBjcmVhdGUgbXVsdGkgY29udHJvbGxlZCB2ZXJzaW9uIGFuZCByZXR1cm4gaXRzIG5hbWVcblx0XHRcdG1jSW5mby5jdHJsUXViaXRzLnVuc2hpZnQoIWludmVyc2VDb250cm9sKTtcblx0XHRcdHJldHVybiB0aGlzLnJlZ2lzdGVyTXVsdGlDb250cm9sbGVkR2F0ZShtY0luZm8ucm9vdE5hbWUsIG1jSW5mby5jdHJsUXViaXRzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHJldHVybiBudWxsO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmVtb3ZlVW51c2VkTXVsdGlDb250cm9sbGVkR2F0ZXMgPSBmdW5jdGlvbigpIHtcblx0dmFyIG9wcyA9IHRoaXMuY291bnRPcHMobnVsbCwgeyBzaGFsbG93OiBmYWxzZSB9KTtcblxuXHRmb3IoZ2F0ZU5hbWUgaW4gdGhpcy5jdXN0b21HYXRlcykge1xuXHRcdGlmKCFvcHNbZ2F0ZU5hbWVdKSB7XG5cdFx0XHRpZih0aGlzLmlzTXVsdGlDb250cm9sbGVkR2F0ZShnYXRlTmFtZSkpIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXMuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZGVjb2RlTXVsdGlDb250cm9sbGVkR2F0ZU5hbWUgPSBmdW5jdGlvbihnYXRlTmFtZSkge1xuXHRpZighZ2F0ZU5hbWUpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHZhciBtY0luZm8gPSB7fTtcblx0dmFyIHNwbGl0dGVkID0gZ2F0ZU5hbWUuc3BsaXQoXCJfXCIpO1xuXG5cdC8vIG5hbWVcblx0aWYoc3BsaXR0ZWQubGVuZ3RoID4gMCkge1xuXHRcdG1jSW5mby5uYW1lID0gc3BsaXR0ZWRbMF07XG5cdFx0bWNJbmZvLnJvb3ROYW1lID0gbWNJbmZvLm5hbWUuc3Vic3RyaW5nKDEpO1xuXHR9XG5cblx0Ly8gbnVtQ3RybFF1Yml0c1xuXHRpZihzcGxpdHRlZC5sZW5ndGggPiAxKSB7XG5cdFx0dmFyIG51bUN0cmxRdWJpdHMgPSBwYXJzZUludChzcGxpdHRlZFsxXSk7XG5cdFx0aWYoIWlzTmFOKG51bUN0cmxRdWJpdHMpKSB7XG5cdFx0XHRtY0luZm8ubnVtQ3RybFF1Yml0cyA9IG51bUN0cmxRdWJpdHM7XG5cdFx0fVxuXHR9XG5cblx0Ly8gY3RybFF1Yml0c1xuXHRpZihtY0luZm8ubnVtQ3RybFF1Yml0cykge1xuXHRcdHZhciBjdHJsUXViaXRzID0gW107XG5cdFx0aWYoc3BsaXR0ZWQubGVuZ3RoID4gMikge1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IHNwbGl0dGVkWzJdLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmKHNwbGl0dGVkWzJdW2ldID09IFwiMFwiKSB7XG5cdFx0XHRcdFx0Y3RybFF1Yml0cy5wdXNoKGZhbHNlKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZihzcGxpdHRlZFsyXVtpXSA9PSBcIjFcIikge1xuXHRcdFx0XHRcdGN0cmxRdWJpdHMucHVzaCh0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmKCFjdHJsUXViaXRzLmxlbmd0aCkge1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IG51bUN0cmxRdWJpdHM7IGkrKykge1xuXHRcdFx0XHRjdHJsUXViaXRzLnB1c2godHJ1ZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdG1jSW5mby5jdHJsUXViaXRzID0gY3RybFF1Yml0cztcblx0fVxuXG5cdHJldHVybiBtY0luZm87XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5tdWx0aUNvbnRyb2xsZWRHYXRlTmFtZSA9IGZ1bmN0aW9uKG5hbWVQcmVmaXgsIGN0cmxRdWJpdHMpIHtcblx0dmFyIGdhdGVOYW1lID0gbmFtZVByZWZpeCArIFwiX1wiO1xuXHRpZih0eXBlb2YgY3RybFF1Yml0cyA9PSBcIm51bWJlclwiKSB7XG5cdFx0Z2F0ZU5hbWUgKz0gY3RybFF1Yml0cztcblx0fSBlbHNlIHtcblx0XHRnYXRlTmFtZSArPSAoY3RybFF1Yml0cy5sZW5ndGggfHwgMCk7XG5cblx0XHR2YXIgd2lyZXMgPSBcIlwiO1xuXHRcdGN0cmxRdWJpdHMubWFwKGZ1bmN0aW9uKHdpcmUpIHtcblx0XHRcdGlmKCF3aXJlIHx8ICh0eXBlb2Ygd2lyZSA9PSBcIm51bWJlclwiICYmIHdpcmUgPCAwKSkge1xuXHRcdFx0XHR3aXJlcyArPSBcIjBcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdpcmVzICs9IFwiMVwiO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGlmKHdpcmVzLmluZGV4T2YoXCIwXCIpIDwgMCkge1xuXHRcdFx0d2lyZXMgPSBcIlwiO1xuXHRcdH1cblx0XHRpZih3aXJlcykge1xuXHRcdFx0Z2F0ZU5hbWUgKz0gXCJfXCIgKyB3aXJlcztcblx0XHR9XG5cdH1cblx0cmV0dXJuIGdhdGVOYW1lO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaXNNdWx0aUNvbnRyb2xsZWRHYXRlID0gZnVuY3Rpb24oZ2F0ZU5hbWUpIHtcblx0dmFyIG1jSW5mbyA9IHRoaXMuZGVjb2RlTXVsdGlDb250cm9sbGVkR2F0ZU5hbWUoZ2F0ZU5hbWUpO1xuXHRyZXR1cm4gISF0aGlzLmN1c3RvbUdhdGVzW2dhdGVOYW1lXSAmJiAhIW1jSW5mbyAmJiAhIW1jSW5mby5udW1DdHJsUXViaXRzO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuaXNDb250cm9sbGFibGVHYXRlID0gZnVuY3Rpb24oZ2F0ZU5hbWUpIHtcblx0dmFyIGdhdGVEZWYgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRpZihnYXRlRGVmKSB7XG5cdFx0aWYoZ2F0ZURlZi5kcmF3aW5nSW5mbykge1xuXHRcdFx0aWYoZ2F0ZURlZi5kcmF3aW5nSW5mby5yb290ID09IFwieFwiIHx8IGdhdGVEZWYuZHJhd2luZ0luZm8ucm9vdCA9PSBcInUxXCIpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGZvcih2YXIgZ24gaW4gdGhpcy5iYXNpY0dhdGVzKSB7XG5cdFx0XHR2YXIgZ2F0ZURlZiA9IHRoaXMuYmFzaWNHYXRlc1tnbl07XG5cdFx0XHRpZihnYXRlRGVmICYmIGdhdGVEZWYuZHJhd2luZ0luZm8gJiYgZ2F0ZURlZi5kcmF3aW5nSW5mby5yb290ICYmIGdhdGVEZWYuZHJhd2luZ0luZm8ucm9vdCA9PSBnYXRlTmFtZSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdGhpcy5pc011bHRpQ29udHJvbGxlZEdhdGUoZ2F0ZU5hbWUpO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldEdhdGVQb3NCeUlkID0gZnVuY3Rpb24oZ2F0ZUlkKSB7XG5cdHZhciBjaXJjdWl0ID0gdGhpcztcblxuXHR2YXIgbnVtQ29scyA9IGNpcmN1aXQubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGNpcmN1aXQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5pZCA9PSBnYXRlSWQpIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHR3aXJlczogZ2F0ZS53aXJlcyxcblx0XHRcdFx0XHRjb2w6IGNvbHVtblxuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7XG5cdFx0d2lyZXM6IFtdLFxuXHRcdGNvbDogLTFcblx0fTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRHYXRlQnlJZCA9IGZ1bmN0aW9uKGdhdGVJZCkge1xuXHR2YXIgY2lyY3VpdCA9IHRoaXM7XG5cblx0dmFyIG51bUNvbHMgPSBjaXJjdWl0Lm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuaWQgPT0gZ2F0ZUlkKSB7XG5cdFx0XHRcdHJldHVybiBnYXRlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBudWxsO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ2V0R2F0ZUJlZm9yZSA9IGZ1bmN0aW9uKGNvbHVtbiwgd2lyZSkge1xuXHR2YXIgZ2F0ZSA9IG51bGw7XG5cdHZhciBjb2wgPSBjb2x1bW4gLSAxO1xuXHR3aGlsZShjb2wgPj0gMCAmJiAhZ2F0ZSkge1xuXHRcdGdhdGUgPSB0aGlzLmdldEdhdGVBdChjb2wsIHdpcmUpO1xuXHRcdGNvbC0tO1xuXHR9XG5cdHJldHVybiBnYXRlO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldEdhdGVBdCA9IGZ1bmN0aW9uKGNvbHVtbiwgd2lyZSkge1xuXHRpZighdGhpcy5nYXRlc1t3aXJlXSB8fCAhdGhpcy5nYXRlc1t3aXJlXVtjb2x1bW5dKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHR2YXIgZ2F0ZSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5nYXRlc1t3aXJlXVtjb2x1bW5dKSk7XG5cdGlmKCFnYXRlKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHRnYXRlLmNvbHVtbiA9IGNvbHVtbjtcblx0Z2F0ZS53aXJlcyA9IFtdO1xuXG5cdHZhciBpZCA9IGdhdGUuaWQ7XG5cdHZhciBudW1XaXJlcyA9IHRoaXMuZ2F0ZXMubGVuZ3RoO1xuXHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgbnVtV2lyZXM7IHdpcmUrKykge1xuXHRcdHZhciBnID0gdGhpcy5nYXRlc1t3aXJlXVtjb2x1bW5dO1xuXHRcdGlmKGcgJiYgZy5pZCA9PSBpZCkge1xuXHRcdFx0Z2F0ZS53aXJlc1tnLmNvbm5lY3Rvcl0gPSB3aXJlO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZ2F0ZTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRHYXRlc0F0Q29sdW1uID0gZnVuY3Rpb24oY29sdW1uKSB7XG5cdHZhciBnYXRlcyA9IFtdO1xuXHR2YXIgbnVtV2lyZXMgPSB0aGlzLmdhdGVzLmxlbmd0aDtcblx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IG51bVdpcmVzOyB3aXJlKyspIHtcblx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRnYXRlcy5wdXNoKGdhdGUpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZ2F0ZXM7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ2V0Q29udHJvbGxhYmxlR2F0ZXNBdENvbHVtbiA9IGZ1bmN0aW9uKGNvbHVtbikge1xuXHR2YXIgZ2F0ZXMgPSB0aGlzLmdldEdhdGVzQXRDb2x1bW4oY29sdW1uKTtcblx0dmFyIGNvbnRyb2xsYWJsZUdhdGVzID0gW107XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBnYXRlcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBnYXRlID0gZ2F0ZXNbaV07XG5cdFx0aWYodGhpcy5pc0NvbnRyb2xsYWJsZUdhdGUoZ2F0ZS5uYW1lKSkge1xuXHRcdFx0Y29udHJvbGxhYmxlR2F0ZXMucHVzaChnYXRlKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGNvbnRyb2xsYWJsZUdhdGVzO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0SmF2YVNjcmlwdCA9IGZ1bmN0aW9uKGNvbW1lbnQsIGRlY29tcG9zZSwgZXhwb3J0QXNHYXRlTmFtZSwgYXNKdXB5dGVyKSB7XG5cdHZhciBzZWxmID0gdGhpcztcblxuXHR2YXIgY2lyY3VpdCA9IG51bGw7XG5cblx0Ly8gZGVjb21wb3NlXG5cdGlmKGRlY29tcG9zZSkge1xuXHRcdGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRjaXJjdWl0LmxvYWQodGhpcy5zYXZlKHRydWUpKTtcblx0fSBlbHNlIHtcblx0XHRjaXJjdWl0ID0gdGhpcztcblx0fVxuXG5cdHZhciBqcyA9IFwiXCI7XG5cblx0Ly8gY29tbWVudFxuXHRpZihjb21tZW50KSB7XG5cdFx0dmFyIGNvbW0gPSAoY29tbWVudCB8fCBcIlwiKS5zcGxpdChcIlxcblwiKTtcblx0XHRjb21tLm1hcChmdW5jdGlvbihjbGluZSkge1xuXHRcdFx0aWYoY2xpbmUubGVuZ3RoID49IDIgJiYgY2xpbmVbMF0gIT0gXCIvXCIgJiYgY2xpbmVbMV0gIT0gXCIvXCIpIHtcblx0XHRcdFx0anMgKz0gXCIvLyBcIjtcblx0XHRcdH1cblx0XHRcdGpzICs9IGNsaW5lO1xuXHRcdFx0anMgKz0gXCJcXG5cIjtcblx0XHR9KTtcblx0fVxuXG5cdHZhciBpbmRlbnQgPSBcIlwiO1xuXHR2YXIgY2lyY3VpdFZhciA9IFwiXCI7XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdGluZGVudCA9IFwiICAgIFwiO1xuXHRcdGNpcmN1aXRWYXIgPSBcImNpcmNcIjtcblxuXHRcdGpzICs9IFwiY29uc3QgXCIgKyBleHBvcnRBc0dhdGVOYW1lICsgXCIgPSBmdW5jdGlvbigpIHtcXG5cIjtcblxuXHRcdGpzICs9IGluZGVudCArIFwiY29uc3QgXCIgKyBjaXJjdWl0VmFyICsgXCIgPSBuZXcgUXVhbnR1bUNpcmN1aXQoXCIgKyBjaXJjdWl0Lm51bVF1Yml0cyArIFwiKTtcXG5cXG5cIjtcblx0XHRpZihjaXJjdWl0LnBhcmFtcyAmJiBjaXJjdWl0LnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdGpzICs9IGluZGVudCArIGNpcmN1aXRWYXIgKyBcIi5wYXJhbXMgPSBcIiArIEpTT04uc3RyaW5naWZ5KGNpcmN1aXQucGFyYW1zKSArIFwiXFxuXFxuXCI7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGluZGVudCA9IFwiXCI7XG5cdFx0Y2lyY3VpdFZhciA9IFwiY2lyY3VpdFwiO1xuXG5cdFx0anMgKz0gaW5kZW50ICsgXCJjb25zdCBRdWFudHVtQ2lyY3VpdCA9IHJlcXVpcmUoXFxcInF1YW50dW0tY2lyY3VpdFxcXCIpO1xcblxcblwiO1xuXG5cdFx0anMgKz0gaW5kZW50ICsgXCJjb25zdCBcIiArIGNpcmN1aXRWYXIgKyBcIiA9IG5ldyBRdWFudHVtQ2lyY3VpdChcIiArIGNpcmN1aXQubnVtUXViaXRzICsgXCIpO1xcblxcblwiO1xuXG5cdFx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdFx0aWYoIWRlY29tcG9zZSkge1xuXHRcdFx0dmFyIGN1c3RvbUdhdGVzQWRkZWQgPSBbXTtcblx0XHRcdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0XHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0aWYoIWJhc2ljR2F0ZSkge1xuXHRcdFx0XHRcdHZhciBjdXN0b21HYXRlID0gc2VsZi5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRcdGlmKGN1c3RvbUdhdGUpIHtcblx0XHRcdFx0XHRcdHZhciBjdXN0b21DaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRjdXN0b21DaXJjdWl0LmxvYWQoY3VzdG9tR2F0ZSk7XG5cdFx0XHRcdFx0XHRqcyArPSBjdXN0b21DaXJjdWl0LmV4cG9ydEphdmFTY3JpcHQoXCJcIiwgdHJ1ZSwgdXNlZEdhdGVOYW1lKTtcblx0XHRcdFx0XHRcdGN1c3RvbUdhdGVzQWRkZWQucHVzaCh1c2VkR2F0ZU5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGN1c3RvbUdhdGVzQWRkZWQubWFwKGZ1bmN0aW9uKGN1c3RvbUdhdGVOYW1lKSB7XG5cdFx0XHRcdGpzICs9IGluZGVudCArIGNpcmN1aXRWYXIgKyBcIi5yZWdpc3RlckdhdGUoXFxcIlwiICsgY3VzdG9tR2F0ZU5hbWUgKyBcIlxcXCIsIFwiICsgY3VzdG9tR2F0ZU5hbWUgKyBcIigpKTtcXG5cIjtcblx0XHRcdH0pO1xuXG5cdFx0XHRpZihjdXN0b21HYXRlc0FkZGVkLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0anMgKz0gXCJcXG5cIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR2YXIgY3JlZ0NvdW50ID0gMDtcblx0Zm9yKHZhciBjcmVnTmFtZSBpbiB0aGlzLmNyZWdzKSB7XG5cdFx0anMgKz0gaW5kZW50ICsgY2lyY3VpdFZhciArIFwiLmNyZWF0ZUNyZWcoXFxcIlwiICsgY3JlZ05hbWUgKyBcIlxcXCIsIFwiICsgKHRoaXMuY3JlZ3NbY3JlZ05hbWVdLmxlbmd0aCB8fCAxKSArIFwiKTtcXG5cIjtcblx0XHRjcmVnQ291bnQrKztcblx0fVxuXHRpZihjcmVnQ291bnQgPiAwKSB7XG5cdFx0anMgKz0gXCJcXG5cIjtcblx0fVxuXG5cdHZhciBudW1Db2xzID0gY2lyY3VpdC5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdHZhciBnYXRlTmFtZSA9IGdhdGUubmFtZTtcblxuXHRcdFx0XHRpZihnYXRlTmFtZSA9PSBcIm1lYXN1cmVcIiAmJiBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNyZWcpIHtcblx0XHRcdFx0XHRqcyArPSBpbmRlbnQgKyBjaXJjdWl0VmFyICsgXCIuYWRkTWVhc3VyZShcIiArIHdpcmUgKyBcIiwgXFxcIlwiICsgZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSArIFwiXFxcIiwgXCIgKyBnYXRlLm9wdGlvbnMuY3JlZy5iaXQgKyBcIik7XFxuXCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0anMgKz0gaW5kZW50ICsgY2lyY3VpdFZhciArIFwiLmFwcGVuZEdhdGUoXFxcIlwiICsgZ2F0ZS5uYW1lICsgXCJcXFwiXCI7XG5cblx0XHRcdFx0XHRpZihnYXRlLndpcmVzLmxlbmd0aCA9PSAxKSB7XG5cdFx0XHRcdFx0XHRqcyArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRqcyArPSBnYXRlLndpcmVzWzBdO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRqcyArPSBcIiwgW1wiO1xuXHRcdFx0XHRcdFx0Zm9yKHZhciB3ID0gMDsgdyA8IGdhdGUud2lyZXMubGVuZ3RoOyB3KyspIHtcblx0XHRcdFx0XHRcdFx0aWYodyA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRqcyArPSBcIixcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRqcyArPSBnYXRlLndpcmVzW3ddO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0anMgKz0gXCJdXCI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zKSB7XG5cdFx0XHRcdFx0XHR2YXIgb3B0ID0ge307XG5cdFx0XHRcdFx0XHRmb3IodmFyIG9wdEtleSBpbiBnYXRlLm9wdGlvbnMpIHtcblx0XHRcdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zW29wdEtleV0pIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgb2JqID0gZ2F0ZS5vcHRpb25zW29wdEtleV07XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHNraXAgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRpZih0eXBlb2Ygb2JqID09IFwib2JqZWN0XCIgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDAgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBPYmplY3QpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHNraXAgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmKCFza2lwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvcHRbb3B0S2V5XSA9IG9iajtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGpzICs9IFwiLCBcIiArIEpTT04uc3RyaW5naWZ5KG9wdCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGpzICs9IFwiKTtcXG5cIlxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdGpzICs9IFwiXFxuXCI7XG5cdFx0anMgKz0gaW5kZW50ICsgXCJyZXR1cm4gXCIgKyBjaXJjdWl0VmFyICsgXCI7XFxuXCI7XG5cdFx0anMgKz0gXCJ9O1xcblxcblwiO1xuXHR9IGVsc2Uge1xuXHRcdGpzICs9IFwiXFxuXCI7XG5cblx0XHRqcyArPSBpbmRlbnQgKyBjaXJjdWl0VmFyICsgXCIucnVuKCk7XFxuXFxuXCI7XG5cblx0XHRqcyArPSBpbmRlbnQgKyBcImNvbnNvbGUubG9nKFxcXCJQcm9iYWJpbGl0aWVzOlxcXCIpO1xcblwiO1xuXHRcdGpzICs9IGluZGVudCArIFwiY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkoY2lyY3VpdC5wcm9iYWJpbGl0aWVzKCkpKTtcXG5cXG5cIjtcblx0XHRqcyArPSBpbmRlbnQgKyBcImNvbnNvbGUubG9nKFxcXCJNZWFzdXJlIGFsbDpcXFwiKTtcXG5cIjtcblx0XHRqcyArPSBpbmRlbnQgKyBcImNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGNpcmN1aXQubWVhc3VyZUFsbCgpKSk7XFxuXFxuXCI7XG5cdFx0aWYoY2lyY3VpdC5jcmVnQ291bnQoKSkge1xuXHRcdFx0anMgKz0gaW5kZW50ICsgXCJjb25zb2xlLmxvZyhcXFwiQ2xhc3NpY2FsIHJlZ2lzdGVyczpcXFwiKTtcXG5cIjtcblx0XHRcdGpzICs9IGluZGVudCArIFwiY29uc29sZS5sb2coY2lyY3VpdC5jcmVnc0FzU3RyaW5nKCkpO1xcblxcblwiO1xuXHRcdH1cblx0fVxuXG5cblx0aWYoYXNKdXB5dGVyKSB7XG5cdFx0dmFyIG5vdGVib29rID0ge1xuXHRcdFx0XCJtZXRhZGF0YVwiOiB7XG5cdFx0XHRcdFwia2VybmVsc3BlY1wiOiB7XG5cdFx0XHRcdFx0XCJkaXNwbGF5X25hbWVcIjogXCJKYXZhc2NyaXB0IChOb2RlLmpzKVwiLFxuXHRcdFx0XHRcdFwibGFuZ3VhZ2VcIjogXCJqYXZhc2NyaXB0XCIsXG5cdFx0XHRcdFx0XCJuYW1lXCI6IFwiamF2YXNjcmlwdFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdFwibGFuZ3VhZ2VfaW5mb1wiOiB7XG5cdFx0XHRcdFx0XCJmaWxlX2V4dGVuc2lvblwiOiBcIi5qc1wiLFxuXHRcdFx0XHRcdFwibWltZXR5cGVcIjogXCJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0XCIsXG5cdFx0XHRcdFx0XCJuYW1lXCI6IFwiamF2YXNjcmlwdFwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRuYmZvcm1hdDogNCxcblx0XHRcdG5iZm9ybWF0X21pbm9yOiAwLFxuXHRcdFx0Y2VsbHM6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNlbGxfdHlwZTogXCJjb2RlXCIsXG5cdFx0XHRcdFx0c291cmNlOiBqcyxcblx0XHRcdFx0XHRtZXRhZGF0YToge1xuXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRvdXRwdXRzOiBbXSxcblx0XHRcdFx0XHRleGVjdXRpb25fY291bnQ6IG51bGxcblx0XHRcdFx0fVxuXHRcdFx0XVxuXHRcdH07XG5cdFx0cmV0dXJuIEpTT04uc3RyaW5naWZ5KG5vdGVib29rKTtcblx0fVxuXG5cdHJldHVybiBqcztcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFFpc2tpdCA9IGZ1bmN0aW9uKGNvbW1lbnQsIGRlY29tcG9zZSwgZXhwb3J0QXNHYXRlTmFtZSwgdmVyc2lvblN0ciwgcHJvdmlkZXJOYW1lLCBiYWNrZW5kTmFtZSwgYXNKdXB5dGVyLCBzaG90cywgY2lyY3VpdFJlcGxhY2VtZW50LCBpbnNpZGVTdWJtb2R1bGUsIGh5YnJpZCkge1xuXHR2YXIgb3B0aW9ucyA9IHtcblx0XHRjb21tZW50OiBjb21tZW50LFxuXHRcdGRlY29tcG9zZTogZGVjb21wb3NlLFxuXHRcdHZlcnNpb25TdHI6IHZlcnNpb25TdHIsXG5cdFx0cHJvdmlkZXJOYW1lOiBwcm92aWRlck5hbWUsXG5cdFx0YmFja2VuZE5hbWU6IGJhY2tlbmROYW1lLFxuXHRcdGFzSnVweXRlcjogYXNKdXB5dGVyLFxuXHRcdHNob3RzOiBzaG90cyxcblx0XHRoeWJyaWQ6IGh5YnJpZFxuXHR9O1xuXHRcblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9RaXNraXQob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSwgY2lyY3VpdFJlcGxhY2VtZW50LCBpbnNpZGVTdWJtb2R1bGUpXG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRRdUVTVCA9IGZ1bmN0aW9uKGNvbW1lbnQsIGRlY29tcG9zZSwgZXhwb3J0QXNHYXRlTmFtZSwgZGVmaW5lZEZ1bmMpIHtcblx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0Y29tbWVudDogY29tbWVudCxcblx0XHRkZWNvbXBvc2U6IGRlY29tcG9zZVxuXHR9O1xuXG5cdHJldHVybiB0aGlzLmV4cG9ydFRvUXVFU1QobmV3T3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSwgZGVmaW5lZEZ1bmMpO1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0UUFTTSA9IGZ1bmN0aW9uKGNvbW1lbnQsIGRlY29tcG9zZSwgZXhwb3J0QXNHYXRlTmFtZSwgY2lyY3VpdFJlcGxhY2VtZW50LCBjb21wYXRpYmlsaXR5TW9kZSwgaW5zaWRlU3VibW9kdWxlKSB7XG5cdHZhciBvcHRpb25zID0ge1xuXHRcdGNvbW1lbnQ6IGNvbW1lbnQsXG5cdFx0ZGVjb21wb3NlOiBkZWNvbXBvc2UsXG5cdFx0Y29tcGF0aWJpbGl0eU1vZGU6IGNvbXBhdGliaWxpdHlNb2RlXG5cdH07XG5cdFxuXHRyZXR1cm4gdGhpcy5leHBvcnRUb1FBU00ob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSwgY2lyY3VpdFJlcGxhY2VtZW50LCBpbnNpZGVTdWJtb2R1bGUpXHRcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmltcG9ydFFBU00gPSBmdW5jdGlvbihpbnB1dCwgZXJyb3JDYWxsYmFjaywgY29tcGF0aWJpbGl0eU1vZGUpIHtcblx0dGhpcy5pbml0KCk7XG5cdFFBU01JbXBvcnQodGhpcywgaW5wdXQsIGVycm9yQ2FsbGJhY2ssIGNvbXBhdGliaWxpdHlNb2RlKTtcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFB5cXVpbCA9IGZ1bmN0aW9uKGNvbW1lbnQsIGRlY29tcG9zZSwgZXhwb3J0QXNHYXRlTmFtZSwgdmVyc2lvblN0ciwgbGF0dGljZSwgYXNRVk0sIGFzSnVweXRlciwgc2hvdHMsIGh5YnJpZCkge1xuXHR2YXIgb3B0aW9ucyA9IHtcblx0XHRjb21tZW50OiBjb21tZW50LFxuXHRcdGRlY29tcG9zZTogZGVjb21wb3NlLFxuXHRcdHZlcnNpb25TdHI6IHZlcnNpb25TdHIsXG5cdFx0bGF0dGljZTogbGF0dGljZSxcblx0XHRhc1FWTTogYXNRVk0sXG5cdFx0YXNKdXB5dGVyOiBhc0p1cHl0ZXIsXG5cdFx0c2hvdHM6IHNob3RzLFxuXHRcdGh5YnJpZDogaHlicmlkXG5cdH07XG5cdHJldHVybiB0aGlzLmV4cG9ydFRvUHlxdWlsKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpO1xufVxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0UXVpbCA9IGZ1bmN0aW9uKGNvbW1lbnQsIGRlY29tcG9zZSwgZXhwb3J0QXNHYXRlTmFtZSwgdmVyc2lvblN0cikge1xuXHR2YXIgb3B0aW9ucyA9IHtcblx0XHRjb21tZW50OiBjb21tZW50LFxuXHRcdGRlY29tcG9zZTogZGVjb21wb3NlLFxuXHRcdHZlcnNpb25TdHI6IHZlcnNpb25TdHJcblx0fTtcblxuXHRyZXR1cm4gdGhpcy5leHBvcnRUb1F1aWwob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSk7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5pbXBvcnRRdWlsID0gZnVuY3Rpb24ocXVpbCwgZXJyb3JDYWxsYmFjaywgb3B0aW9ucywgcXViaXROYW1lcywgcmVuYW1lZEdhdGVzLCBsaW5lT2Zmc2V0KSB7XG5cdHZhciBzZWxmID0gdGhpcztcblxuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRzZWxmLmluaXQoKTtcblxuXHRyZW5hbWVkR2F0ZXMgPSByZW5hbWVkR2F0ZXMgfHwge307XG5cdGxpbmVPZmZzZXQgPSBsaW5lT2Zmc2V0IHx8IDA7XG5cblx0ZnVuY3Rpb24gZ2V0R2F0ZUluZm8oZ2F0ZU5hbWUpIHtcblx0XHRpZihzZWxmLmN1c3RvbUdhdGVzICYmIHNlbGYuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdKSB7XG5cdFx0XHRyZXR1cm4geyBuYW1lOiBnYXRlTmFtZSwgY3VzdG9tR2F0ZTogc2VsZi5jdXN0b21HYXRlc1tnYXRlTmFtZV0gfTtcblx0XHR9XG5cblx0XHRmb3IodmFyIGduYW1lIGluIHNlbGYuYmFzaWNHYXRlcykge1xuXHRcdFx0dmFyIGdkZWYgPSBzZWxmLmJhc2ljR2F0ZXNbZ25hbWVdO1xuXHRcdFx0aWYoZ2RlZi5leHBvcnRJbmZvKSB7XG5cdFx0XHRcdGlmKGdkZWYuZXhwb3J0SW5mby5xdWlsICYmIGdkZWYuZXhwb3J0SW5mby5xdWlsLm5hbWUgPT0gZ2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRyZXR1cm4geyBuYW1lOiBnbmFtZSwgZ2F0ZURlZjogZ2RlZiwgcXVpbERlZjogZ2RlZi5leHBvcnRJbmZvLnF1aWwgfTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZihnZGVmLmV4cG9ydEluZm8ucHlxdWlsICYmIGdkZWYuZXhwb3J0SW5mby5weXF1aWwubmFtZSA9PSBnYXRlTmFtZSkge1xuXHRcdFx0XHRcdHJldHVybiB7IG5hbWU6IGduYW1lLCBnYXRlRGVmOiBnZGVmLCBxdWlsRGVmOiBnZGVmLmV4cG9ydEluZm8ucHlxdWlsIH07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cblx0dmFyIGxpbmVzID0gcXVpbC5zcGxpdChcIlxcblwiKTtcblxuXHR2YXIgY29tbWFuZHMgPSBbXTtcblx0dmFyIG11bHRpbGluZSA9IGZhbHNlO1xuXHRsaW5lcy5tYXAoZnVuY3Rpb24obGluZSwgbGluZUluZGV4KSB7XG5cdFx0Ly8gcmVtb3ZlIGNvbW1lbnRzXG5cdFx0bGluZSA9IGxpbmUuc3BsaXQoXCIjXCIpWzBdO1xuXG5cdFx0aWYoIWxpbmUubGVuZ3RoKSB7XG5cdFx0XHRtdWx0aWxpbmUgPSBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gcmVtb3ZlIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNwYWNlc1xuXHRcdFx0bGluZSA9IGxpbmUudHJpbSgpO1xuXHRcdH1cblxuXHRcdGlmKCFtdWx0aWxpbmUpIHtcblx0XHRcdGlmKGxpbmUubGVuZ3RoKSB7XG5cdFx0XHRcdHZhciBjbGluZXMgPSBsaW5lLnNwbGl0KFwiO1wiKTtcblx0XHRcdFx0dmFyIGNvZGVsaW5lcyA9IFtdO1xuXHRcdFx0XHRjbGluZXMubWFwKGZ1bmN0aW9uKGNsaW5lKSB7XG5cdFx0XHRcdFx0aWYoY2xpbmUudHJpbSgpLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0Y29kZWxpbmVzLnB1c2goY2xpbmUudHJpbSgpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGNvZGVsaW5lcy5tYXAoZnVuY3Rpb24oY29kZWxpbmUpIHtcblxuXHRcdFx0XHRcdHZhciB0b2tlbnMgPSBjb2RlbGluZS5zcGxpdChcIiBcIik7XG5cdFx0XHRcdFx0dmFyIGxhc3RUb2tlbiA9IHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV07XG5cdFx0XHRcdFx0aWYobGFzdFRva2VuLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0aWYobGFzdFRva2VuW2xhc3RUb2tlbi5sZW5ndGggLSAxXSA9PSBcIjpcIikge1xuXHRcdFx0XHRcdFx0XHRtdWx0aWxpbmUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHQvLyByZW1vdmUgXCI6XCJcblx0XHRcdFx0XHRcdFx0bGFzdFRva2VuID0gbGFzdFRva2VuLnN1YnN0cmluZygwLCBsYXN0VG9rZW4ubGVuZ3RoIC0gMSk7XG5cdFx0XHRcdFx0XHRcdHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0gPSBsYXN0VG9rZW47XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKHRva2Vucy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHR5cGUgPSBcIkdBVEVcIjtcblx0XHRcdFx0XHRcdFx0aWYodG9rZW5zWzBdID09IFwiREVGR0FURVwiIHx8IHRva2Vuc1swXSA9PSBcIkRFRkNJUkNVSVRcIikge1xuXHRcdFx0XHRcdFx0XHRcdHR5cGUgPSB0b2tlbnNbMF07XG5cdFx0XHRcdFx0XHRcdFx0dG9rZW5zLnNwbGljZSgwLCAxKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHZhciBuYW1lID0gdG9rZW5zLmpvaW4oXCIgXCIpO1xuXG5cdFx0XHRcdFx0XHRcdHZhciBwYXJhbXMgPSBbXTtcblx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtU3RhcnQgPSBuYW1lLmluZGV4T2YoXCIoXCIpO1xuXHRcdFx0XHRcdFx0XHRpZihwYXJhbVN0YXJ0ID49IDApIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1FbmQgPSBuYW1lLmluZGV4T2YoXCIpXCIpO1xuXHRcdFx0XHRcdFx0XHRcdGlmKHBhcmFtRW5kID4gcGFyYW1TdGFydCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1zID0gbmFtZS5zdWJzdHJpbmcocGFyYW1TdGFydCArIDEsIHBhcmFtRW5kKS5zcGxpdChcIixcIik7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbXMubWFwKGZ1bmN0aW9uKHBhciwgbmR4KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhciA9IHBhci50cmltKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHdoaWxlKHBhci5sZW5ndGggJiYgcGFyWzBdID09IFwiJVwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyID0gcGFyLnNsaWNlKDEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtc1tuZHhdID0gcGFyO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmKChwYXJhbUVuZCArIDEpIDw9IG5hbWUubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRvayA9IG5hbWUuc3Vic3RyaW5nKHBhcmFtRW5kICsgMSwgbmFtZS5sZW5ndGgpLnNwbGl0KFwiIFwiKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0b2tlbnMgPSBbXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dG9rLm1hcChmdW5jdGlvbih0aykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRrID0gdGsudHJpbSgpOyBcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZih0ay5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRva2Vucy5wdXNoKHRrKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dG9rZW5zID0gW107XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgPSBuYW1lLnN1YnN0cmluZygwLCBwYXJhbVN0YXJ0KS50cmltKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgPSB0b2tlbnMuc3BsaWNlKDAsIDEpWzBdLnRyaW0oKTtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdHZhciBhcmdzID0gW107XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgdCA9IDA7IHQgPCB0b2tlbnMubGVuZ3RoOyB0KyspIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgdG9rZW4gPSB0b2tlbnNbdF07XG5cdFx0XHRcdFx0XHRcdFx0aWYocXViaXROYW1lcykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHFpbmRleCA9IHF1Yml0TmFtZXMuaW5kZXhPZih0b2tlbik7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihxaW5kZXggPj0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnB1c2gocWluZGV4KTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MucHVzaCh0b2tlbik7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MucHVzaCh0b2tlbik7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Y29tbWFuZHMucHVzaCh7IHR5cGU6IHR5cGUsIG5hbWU6IG5hbWUsIHBhcmFtczogcGFyYW1zLCBhcmdzOiBhcmdzLCBib2R5OiBbXSwgbGluZTogbGluZUluZGV4LCBjb2w6IDAgfSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIGNvZGVsaW5lcyA9IGxpbmUuc3BsaXQoXCI7XCIpO1xuXHRcdFx0Y29kZWxpbmVzLm1hcChmdW5jdGlvbihjb2RlbGluZSkge1xuXHRcdFx0XHRpZihjb2RlbGluZS50cmltKCkubGVuZ3RoKSB7XG5cdFx0XHRcdFx0Y29tbWFuZHNbY29tbWFuZHMubGVuZ3RoIC0gMV0uYm9keS5wdXNoKGNvZGVsaW5lLnRyaW0oKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fSk7XG5cblx0dmFyIGNvbW1hbmRDb3VudCA9IGNvbW1hbmRzLmxlbmd0aDtcblx0Zm9yKHZhciBjb21tYW5kSW5kZXggPSAwOyBjb21tYW5kSW5kZXggPCBjb21tYW5kQ291bnQ7IGNvbW1hbmRJbmRleCsrKSB7XG5cdFx0dmFyIGNvbW1hbmQgPSBjb21tYW5kc1tjb21tYW5kSW5kZXhdO1xuXG5cdFx0aWYocmVuYW1lZEdhdGVzW2NvbW1hbmQubmFtZV0pIHtcblx0XHRcdGNvbW1hbmQubmFtZSA9IHJlbmFtZWRHYXRlc1tjb21tYW5kLm5hbWVdO1xuXHRcdH1cblxuXHRcdHN3aXRjaChjb21tYW5kLnR5cGUpIHtcblx0XHRcdGNhc2UgXCJERUZHQVRFXCI6IHtcblx0XHRcdFx0aWYoY29tbWFuZC5uYW1lID09IGNvbW1hbmQubmFtZS50b1VwcGVyQ2FzZSgpKSB7XG5cdFx0XHRcdFx0dmFyIG5ld05hbWUgPSBjb21tYW5kLm5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0XHRyZW5hbWVkR2F0ZXNbY29tbWFuZC5uYW1lXSA9IG5ld05hbWU7XG5cdFx0XHRcdFx0Y29tbWFuZC5uYW1lID0gbmV3TmFtZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIE5PVCBJTVBMRU1FTlRFRCBZRVQgISEhXG5cblx0XHRcdH07IGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiREVGQ0lSQ1VJVFwiOiB7XG5cdFx0XHRcdGlmKGNvbW1hbmQubmFtZSA9PSBjb21tYW5kLm5hbWUudG9VcHBlckNhc2UoKSkge1xuXHRcdFx0XHRcdHZhciBuZXdOYW1lID0gY29tbWFuZC5uYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0cmVuYW1lZEdhdGVzW2NvbW1hbmQubmFtZV0gPSBuZXdOYW1lO1xuXHRcdFx0XHRcdGNvbW1hbmQubmFtZSA9IG5ld05hbWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgc3ViUXVpbCA9IGNvbW1hbmQuYm9keS5qb2luKFwiXFxuXCIpO1xuXHRcdFx0XHR2YXIgc3ViUXViaXROYW1lcyA9IGNvbW1hbmQuYXJncztcblx0XHRcdFx0dmFyIHN1YkNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblxuXHRcdFx0XHRzdWJDaXJjdWl0LmltcG9ydFF1aWwoc3ViUXVpbCwgZXJyb3JDYWxsYmFjaywgb3B0aW9ucywgc3ViUXViaXROYW1lcywgcmVuYW1lZEdhdGVzLCBjb21tYW5kLmxpbmUgKyAxKTtcblxuXHRcdFx0XHRzdWJDaXJjdWl0LnBhcmFtcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoY29tbWFuZC5wYXJhbXMpKTtcblxuXHRcdFx0XHRzZWxmLnJlZ2lzdGVyR2F0ZShjb21tYW5kLm5hbWUsIHN1YkNpcmN1aXQuc2F2ZSgpKTtcblx0XHRcdH07IGJyZWFrO1xuXG5cdFx0XHRjYXNlIFwiR0FURVwiOiB7XG5cdFx0XHRcdHN3aXRjaChjb21tYW5kLm5hbWUpIHtcblx0XHRcdFx0XHRjYXNlIFwiREVDTEFSRVwiOiB7XG5cdFx0XHRcdFx0XHQvLyBOT1QgSU1QTEVNRU5URUQgWUVUICEhIVxuXG5cdFx0XHRcdFx0fTsgYnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlIFwiSEFMVFwiOiB7XG5cdFx0XHRcdFx0XHQvLyBXaGF0IT9cblxuXHRcdFx0XHRcdH07IGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSBcIlBSQUdNQVwiOiB7XG5cdFx0XHRcdFx0XHQvLyBXaGF0IT9cblxuXHRcdFx0XHRcdH07IGJyZWFrO1xuXG5cdFx0XHRcdFx0ZGVmYXVsdDoge1xuXHRcdFx0XHRcdFx0dmFyIGdhdGVJbmZvID0gZ2V0R2F0ZUluZm8oY29tbWFuZC5uYW1lKTtcblx0XHRcdFx0XHRcdGlmKCFnYXRlSW5mbykge1xuXHRcdFx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJDYW5ub3QgcmVjb2duaXplIFxcXCJcIiArIGNvbW1hbmQubmFtZSArIFwiXFxcIi5cIjtcblx0XHRcdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlLCBsaW5lOiBsaW5lT2Zmc2V0ICsgY29tbWFuZC5saW5lLCBjb2w6IGNvbW1hbmQuY29sIH0gXSk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1zID0ge307XG5cblx0XHRcdFx0XHRcdFx0aWYoZ2F0ZUluZm8uZ2F0ZURlZikge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBnYXRlRGVmID0gZ2F0ZUluZm8uZ2F0ZURlZjtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcXVpbERlZiA9IGdhdGVJbmZvLnF1aWxEZWY7XG5cblx0XHRcdFx0XHRcdFx0XHRpZigocXVpbERlZi5wYXJhbXMgfHwgW10pLmxlbmd0aCAhPSAoY29tbWFuZC5wYXJhbXMgfHwgW10pLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBudW1iZXIgb2YgcGFyYW1zLiBFeHBlY3RlZCBcIiArIChxdWlsRGVmLnBhcmFtcyB8fCBbXSkubGVuZ3RoICsgXCIgZ290IFwiICsgKGNvbW1hbmQucGFyYW1zIHx8IFtdKS5sZW5ndGggKyBcIi5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IGxpbmVPZmZzZXQgKyBjb21tYW5kLmxpbmUsIGNvbDogY29tbWFuZC5jb2wgfSBdKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGdhdGVEZWYucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbU5hbWUgPSBnYXRlRGVmLnBhcmFtc1tpXTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1JbmRleCA9IHF1aWxEZWYucGFyYW1zLmluZGV4T2YocGFyYW1OYW1lKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihwYXJhbUluZGV4IDwgMCB8fCBwYXJhbUluZGV4ID49IGNvbW1hbmQucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkludGVybmFsIGVycm9yOiBRVUlMIGRlZmluaXRpb24gZm9yIGdhdGUgXFxcIlwiICsgY29tbWFuZC5uYW1lICsgXCIgaXMgaW52YWxpZC5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSwgbGluZTogbGluZU9mZnNldCArIGNvbW1hbmQubGluZSwgY29sOiBjb21tYW5kLmNvbCB9IF0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1zW3BhcmFtTmFtZV0gPSBjb21tYW5kLnBhcmFtc1twYXJhbUluZGV4XTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZ2F0ZURlZiA9IGdhdGVJbmZvLmN1c3RvbUdhdGU7XG5cdFx0XHRcdFx0XHRcdFx0aWYoKGdhdGVEZWYucGFyYW1zIHx8IFtdKS5sZW5ndGggIT0gKGNvbW1hbmQucGFyYW1zIHx8IFtdKS5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgbnVtYmVyIG9mIHBhcmFtcy4gRXhwZWN0ZWQgXCIgKyAoZ2F0ZURlZi5wYXJhbXMgfHwgW10pLmxlbmd0aCArIFwiIGdvdCBcIiArIChjb21tYW5kLnBhcmFtcyB8fCBbXSkubGVuZ3RoICsgXCIuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlLCBsaW5lOiBsaW5lT2Zmc2V0ICsgY29tbWFuZC5saW5lLCBjb2w6IGNvbW1hbmQuY29sIH0gXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgZ2F0ZURlZi5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IGdhdGVEZWYucGFyYW1zW2ldO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbXNbcGFyYW1OYW1lXSA9IGNvbW1hbmQucGFyYW1zW2ldO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdC8vIENoZWNrIGlmIG51bWJlciBvZiBhcmd1bWVudHMgbWF0Y2ggZ2F0ZURlZlxuXHRcdFx0XHRcdFx0XHRpZihjb21tYW5kLm5hbWUgPT0gXCJNRUFTVVJFXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRpZihjb21tYW5kLmFyZ3MubGVuZ3RoICE9IDIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkV4cGVjdGluZyAyIGFyZ3VtZW50cyAocXViaXQgYW5kIHRhcmdldCByZWdpc3RlcikgYnV0IGZvdW5kIFwiICsgY29tbWFuZC5hcmdzLmxlbmd0aCArIFwiLlwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSwgbGluZTogbGluZU9mZnNldCArIGNvbW1hbmQubGluZSwgY29sOiBjb21tYW5kLmNvbCB9IF0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHF1Yml0Q291bnQgPSAxO1xuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYubnVtUXViaXRzKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWJpdENvdW50ID0gZ2F0ZURlZi5udW1RdWJpdHM7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYubWF0cml4ICYmIGdhdGVEZWYubWF0cml4Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRxdWJpdENvdW50ID0gbWF0aC5sb2cyKGdhdGVEZWYubWF0cml4Lmxlbmd0aCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0aWYoY29tbWFuZC5hcmdzLmxlbmd0aCAhPSBxdWJpdENvdW50KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXJyb3JNZXNzYWdlID0gXCJFeHBlY3RpbmcgXCIgKyBxdWJpdENvdW50ICsgXCIgYXJndW1lbnRzIGJ1dCBmb3VuZCBcIiArIGNvbW1hbmQuYXJncy5sZW5ndGggKyBcIi5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UsIGxpbmU6IGxpbmVPZmZzZXQgKyBjb21tYW5kLmxpbmUsIGNvbDogY29tbWFuZC5jb2wgfSBdKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0dmFyIGFyZ3MgPSBbXTtcblx0XHRcdFx0XHRcdFx0dmFyIGNyZWcgPSB7fTtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNvbW1hbmQuYXJncy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRcdHZhciBhcmcgPSBjb21tYW5kLmFyZ3NbaV07XG5cdFx0XHRcdFx0XHRcdFx0aWYoY29tbWFuZC5uYW1lID09IFwiTUVBU1VSRVwiKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdHZhciBjcmVnU3RhcnQgPSBhcmcuaW5kZXhPZihcIltcIik7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihjcmVnU3RhcnQgPj0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgY3JlZ0VuZCA9IGFyZy5pbmRleE9mKFwiXVwiKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoY3JlZ0VuZCA+IGNyZWdTdGFydCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNyZWdCaXQgPSBhcmcuc3Vic3RyaW5nKGNyZWdTdGFydCArIDEsIGNyZWdFbmQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNyZWdOYW1lID0gYXJnLnN1YnN0cmluZygwLCBjcmVnU3RhcnQpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y3JlZyA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJpdDogY3JlZ0JpdCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5hbWU6IGNyZWdOYW1lXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGFyZ0ludCA9IHBhcnNlSW50KGFyZyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGlzTmFOKGFyZ0ludCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihpID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncy5wdXNoKGFyZyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgYXJndW1lbnQgXFxcIlwiICsgYXJnICsgXCJcXFwiXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soWyB7IG1zZzogZXJyb3JNZXNzYWdlLCBsaW5lOiBsaW5lT2Zmc2V0ICsgY29tbWFuZC5saW5lLCBjb2w6IGNvbW1hbmQuY29sIH0gXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihlcnJvck1lc3NhZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzLnB1c2goYXJnSW50KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGFyZ0ludCA9IHBhcnNlSW50KGFyZyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihpc05hTihhcmdJbnQpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgYXJndW1lbnQgXFxcIlwiICsgYXJnICsgXCJcXFwiXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSwgbGluZTogbGluZU9mZnNldCArIGNvbW1hbmQubGluZSwgY29sOiBjb21tYW5kLmNvbCB9IF0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0YXJncy5wdXNoKGFyZ0ludCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0c2VsZi5hcHBlbmRHYXRlKGdhdGVJbmZvLm5hbWUsIGFyZ3MsIHsgcGFyYW1zOiBwYXJhbXMsIGNyZWc6IGNyZWcgfSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdH07IGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdC8vIFRoaXMgZXJyb3IgaGFuZGxpbmcgaXMgY3IqcCBidXQgbGV0J3MgYmUgY29uc2lzdGVudCB3aXRoIGltcG9ydFFBU00oKSBmb3Igbm93XG5cdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRlcnJvckNhbGxiYWNrKFtdKTtcblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFF1aXJrID0gZnVuY3Rpb24oZGVjb21wb3NlKSB7XG5cdHZhciBzZWxmID0gdGhpcztcblxuXHR2YXIgY2lyY3VpdCA9IG51bGw7XG5cblx0ZnVuY3Rpb24gcmFuZ2Uobikge1xuXHRcdHZhciBhcnIgPSBbXTtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG5cdFx0XHRhcnIucHVzaChpKTtcblx0XHR9XG5cdFx0cmV0dXJuIGFycjtcblx0fVxuXG5cdGZ1bmN0aW9uIGlzV2lyZUluUmFuZ2Uod2lyZSwgd2lyZVJhbmdlKXtcblx0XHRpZih3aXJlUmFuZ2UuaW5kZXhPZih3aXJlKSA+IC0xKXtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBmb3JjZSBkZWNvbXBvc2Vcblx0ZGVjb21wb3NlID0gdHJ1ZTtcblx0dmFyIG9iaiA9IHRoaXMuc2F2ZShkZWNvbXBvc2UpO1xuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHR2YXIgdGVtcENpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKG9iaik7XG5cdHRlbXBDaXJjdWl0LmxvYWQob2JqKTtcblxuXHR2YXIgcXVpcmsgPSB7XG5cdFx0Y29sczogW10sXG5cdFx0Z2F0ZXM6IFtdXG5cdH07XG5cblx0dmFyIGdhdGVNYXRyaXggPSBudWxsO1xuXG5cdHZhciBnbG9iYWxQYXJhbXMgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnBhcmFtcyA/IHRoaXMub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0XG5cdHZhciBnYXRlTG9jYXRpb25zID0ge307XG5cdHZhciBjdXN0b21HYXRlQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXG5cdFxuXHRcblx0dmFyIGdhdGVzVG9CZUFkZGVkID0gW107XG5cdFxuXHR2YXIgZ2F0ZUluZm9ybWF0aW9uID0ge307XG5cblx0aWYoIWRlY29tcG9zZSkge1xuXHRcdHZhciBudW1Db2xzID0gdGVtcENpcmN1aXQubnVtQ29scygpO1xuXHRcdGZvcih2YXIgY29sdW1uID0gbnVtQ29scyAtIDE7IGNvbHVtbiA+PSAwOyBjb2x1bW4tLSkge1xuXHRcdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRlbXBDaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHRcdHZhciBnYXRlID0gdGVtcENpcmN1aXQuZ2F0ZXNbd2lyZV1bY29sdW1uXTtcblx0XHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwICYmICF0ZW1wQ2lyY3VpdC5iYXNpY0dhdGVzW2dhdGUubmFtZV0pIHtcblx0XHRcdFx0XHRjdXN0b21EZWNvbXBvc2VkQ2lyY3VpdCA9IHRlbXBDaXJjdWl0LmRlY29tcG9zZUdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0XHRcdHZhciBpc0RlY29tcG9zZUN1c3RvbUNpcmN1aXQgPSBmYWxzZTtcblx0XHRcdFx0XHRnYXRlSW5mb3JtYXRpb25bZ2F0ZS5uYW1lXSA9IHtpbmZvOltdLCBpc0RlY29tcG9zZUN1c3RvbUNpcmN1aXQ6bnVsbH07XG5cdFx0XHRcdFx0Zm9yKHZhciBkZWNvbXBvc2VkQ29sdW1uID0gMDsgZGVjb21wb3NlZENvbHVtbiA8IGN1c3RvbURlY29tcG9zZWRDaXJjdWl0Lm51bUNvbHMoKTsgZGVjb21wb3NlZENvbHVtbisrKSB7XG5cdFx0XHRcdFx0XHRmb3IodmFyIGRlY29tcG9zZWRXaXJlID0gMDsgZGVjb21wb3NlZFdpcmUgPCBjdXN0b21EZWNvbXBvc2VkQ2lyY3VpdC5udW1RdWJpdHM7IGRlY29tcG9zZWRXaXJlKyspIHtcblx0XHRcdFx0XHRcdFx0dmFyIGdhdGVJbkN1c3RvbUNpcmN1aXQgPSBjdXN0b21EZWNvbXBvc2VkQ2lyY3VpdC5nZXRHYXRlQXQoZGVjb21wb3NlZENvbHVtbiwgZGVjb21wb3NlZFdpcmUpO1xuXG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVJbkN1c3RvbUNpcmN1aXQpe1xuXHRcdFx0XHRcdFx0XHRcdHZhciBiYXNpY0dhdGVJbkN1c3RvbUNpcmN1aXQgPSBjdXN0b21EZWNvbXBvc2VkQ2lyY3VpdC5iYXNpY0dhdGVzW2dhdGVJbkN1c3RvbUNpcmN1aXQubmFtZV07XG5cdFx0XHRcdFx0XHRcdFx0aWYoYmFzaWNHYXRlSW5DdXN0b21DaXJjdWl0LmV4cG9ydEluZm8gJiYgIWJhc2ljR2F0ZUluQ3VzdG9tQ2lyY3VpdC5leHBvcnRJbmZvLnF1aXJrKXtcblx0XHRcdFx0XHRcdFx0XHRcdGlzRGVjb21wb3NlQ3VzdG9tQ2lyY3VpdCA9IGlzRGVjb21wb3NlQ3VzdG9tQ2lyY3VpdCB8fCB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHRpZihnYXRlSW5DdXN0b21DaXJjdWl0LmNvbm5lY3RvciA9PSAwKXtcdFxuXHRcdFx0XHRcdFx0XHRcdFx0Z2F0ZUluZm9ybWF0aW9uW2dhdGUubmFtZV0uaW5mby5wdXNoKHtnYXRlSW5DdXN0b21DaXJjdWl0OmdhdGVJbkN1c3RvbUNpcmN1aXQsIGNvbHVtbjpjb2x1bW59KTtcblx0XHRcdFx0XHRcdFx0XHRcdGdhdGVzVG9CZUFkZGVkLnB1c2goZ2F0ZUluZm9ybWF0aW9uKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Z2F0ZUluZm9ybWF0aW9uW2dhdGUubmFtZV0uaXNEZWNvbXBvc2VDdXN0b21DaXJjdWl0PSBpc0RlY29tcG9zZUN1c3RvbUNpcmN1aXQ7XG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHRpZihpc0RlY29tcG9zZUN1c3RvbUNpcmN1aXQpe1xuXHRcdFx0XHRcdFx0Y2lyY3VpdC5nYXRlcy5tYXAoZnVuY3Rpb24oY2lyY3VpdEdhdGUsIGluZGV4KXtcblx0XHRcdFx0XHRcdFx0Y2lyY3VpdEdhdGUubWFwKGZ1bmN0aW9uKGdhdGVUb1JlbW92ZSl7XG5cdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZVRvUmVtb3ZlICYmIGdhdGVUb1JlbW92ZS5uYW1lID09IGdhdGUubmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRjaXJjdWl0LnJlbW92ZUdhdGUoZ2F0ZVRvUmVtb3ZlLmlkKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGdhdGVLZXlzID0gT2JqZWN0LmtleXMoZ2F0ZUluZm9ybWF0aW9uKTtcblx0Zm9yKHZhciBnYXRlTnVtYmVyID0gIDA7IGdhdGVOdW1iZXIgPCBnYXRlS2V5cy5sZW5ndGg7IGdhdGVOdW1iZXIrKyl7XG5cdFx0Z2F0ZUtleSA9IGdhdGVLZXlzW2dhdGVOdW1iZXJdO1xuXHRcdGlmKGdhdGVJbmZvcm1hdGlvbltnYXRlS2V5XS5pc0RlY29tcG9zZUN1c3RvbUNpcmN1aXQpe1xuXHRcdFx0Zm9yKHZhciBpID0gZ2F0ZUluZm9ybWF0aW9uW2dhdGVLZXldLmluZm8ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pe1xuXHRcdFx0XHR2YXIgZ2F0ZUluZm8gPSBnYXRlSW5mb3JtYXRpb25bZ2F0ZUtleV0uaW5mb1tpXTtcblx0XHRcdFx0dmFyIGdhdGVUb0FkZCA9IGdhdGVJbmZvLmdhdGVJbkN1c3RvbUNpcmN1aXQ7XG5cdFx0XHRcdGNpcmN1aXQuaW5zZXJ0R2F0ZShnYXRlVG9BZGQubmFtZSwgZ2F0ZUluZm8uY29sdW1uLCBnYXRlVG9BZGQud2lyZXMsIGdhdGVUb0FkZC5vcHRpb25zKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR2YXIgcHJldmlvdXNDb2x1bW4gPSBudWxsO1xuXHR2YXIgcHJldmlvdXNHYXRlID0gbnVsbDtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlKXtcblx0XHRcdFx0aWYocHJldmlvdXNHYXRlICYmIHByZXZpb3VzR2F0ZS5uYW1lICE9IGdhdGUubmFtZSAmJiBwcmV2aW91c0dhdGUuY29ubmVjdG9yICE9IDAgJiYgcHJldmlvdXNDb2x1bW4gPT0gY29sdW1uKXtcblx0XHRcdFx0XHRjaXJjdWl0LnJlbW92ZUdhdGUoZ2F0ZS5pZCk7XG5cdFx0XHRcdFx0Y2lyY3VpdC5pbnNlcnRHYXRlKGdhdGUubmFtZSwgZ2F0ZS5jb2x1bW4gKyAxLCBnYXRlLndpcmVzLCBnYXRlLm9wdGlvbnMpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHByZXZpb3VzR2F0ZSA9IGdhdGU7XG5cdFx0XHRcdHByZXZpb3VzQ29sdW1uID0gY29sdW1uO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHZhciBudW1Db2xzID0gY2lyY3VpdC5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHR2YXIgcXVpcmtDb2x1bW4gPSBbXTtcblx0XHR2YXIgd2lyZVJhbmdlID0gW107XG5cdFx0dmFyIGlzQmFzaWNHYXRlID0gZmFsc2U7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGNpcmN1aXQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKCFnYXRlIHx8IGdhdGUubmFtZSA9PSBcIm1lYXN1cmVcIiB8fCBnYXRlLm5hbWUgPT0gXCJyZXNldFwiKSB7XG5cdFx0XHRcdGlmKGlzQmFzaWNHYXRlIHx8ICFpc1dpcmVJblJhbmdlKHdpcmUsIHdpcmVSYW5nZSkpe1xuXHRcdFx0XHRcdHF1aXJrQ29sdW1uLnB1c2goMSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXTtcblx0XHRcdFx0dmFyIG1heFdpcmUgPSBtYXRoLm1heChnYXRlLndpcmVzKTtcblx0XHRcdFx0dmFyIG1pbldpcmUgPSBtYXRoLm1pbihnYXRlLndpcmVzKTtcblx0XHRcdFx0dmFyIGdhdGVXaXJlcyA9IGdhdGUud2lyZXMuc2xpY2UoKTtcblx0XHRcdFx0dmFyIHdpcmVSYW5nZSA9IHJhbmdlKG1heFdpcmUpO1xuXHRcdFx0XHRpZihiYXNpY0dhdGUpIHtcblx0XHRcdFx0XHR2YXIgcXVpcmtOYW1lID0gXCJcIjtcblx0XHRcdFx0XHR2YXIgY29udHJvbGxlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdGlzQmFzaWNHYXRlID0gdHJ1ZTtcblx0XHRcdFx0XHRpZihiYXNpY0dhdGUuZXhwb3J0SW5mbyAmJiBiYXNpY0dhdGUuZXhwb3J0SW5mby5xdWlyayl7XG5cdFx0XHRcdFx0XHRxdWlya05hbWUgPSBiYXNpY0dhdGUuZXhwb3J0SW5mby5xdWlyay5uYW1lO1xuXHRcdFx0XHRcdFx0Y29udHJvbGxlZCA9IGJhc2ljR2F0ZS5leHBvcnRJbmZvLnF1aXJrLmNvbnRyb2xsZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIHR3by1xdWJpdCBnYXRlXG5cdFx0XHRcdFx0aWYoYmFzaWNHYXRlLm1hdHJpeC5sZW5ndGggPT0gNCkge1xuXHRcdFx0XHRcdFx0Ly8ga25vd24gZ2F0ZSwgYnV0IHRoaXMgaXMgY29udHJvbCBiaXRcblx0XHRcdFx0XHRcdGlmKHF1aXJrTmFtZSAmJiAoZ2F0ZS5uYW1lID09IFwic3dhcFwiICYmIGdhdGUuY29ubmVjdG9yIDwgZ2F0ZS53aXJlcy5sZW5ndGggLSAyICYmIGNvbnRyb2xsZWQpIHx8IChnYXRlLm5hbWUgIT0gXCJzd2FwXCIgJiYgZ2F0ZS5jb25uZWN0b3IgPCBnYXRlLndpcmVzLmxlbmd0aCAtIDEgJiYgY29udHJvbGxlZCkpIHtcblx0XHRcdFx0XHRcdFx0cXVpcmtOYW1lID0gXCLigKJcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyB0aHJlZS1xdWJpdCBnYXRlXG5cdFx0XHRcdFx0aWYoYmFzaWNHYXRlLm1hdHJpeC5sZW5ndGggPT0gOCkge1xuXHRcdFx0XHRcdFx0Ly8ga25vd24gZ2F0ZSwgYnV0IHRoaXMgaXMgY29udHJvbCBiaXRcblx0XHRcdFx0XHRcdGlmKHF1aXJrTmFtZSAmJiAoZ2F0ZS5uYW1lID09IFwiY3N3YXBcIiAmJiBnYXRlLmNvbm5lY3RvciA8IGdhdGUud2lyZXMubGVuZ3RoIC0gMiAmJiBjb250cm9sbGVkKSB8fCAoZ2F0ZS5uYW1lICE9IFwiY3N3YXBcIiAmJiBnYXRlLmNvbm5lY3RvciA8IGdhdGUud2lyZXMubGVuZ3RoIC0gMSAmJiBjb250cm9sbGVkKSkge1xuXHRcdFx0XHRcdFx0XHRxdWlya05hbWUgPSBcIuKAolwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKHF1aXJrTmFtZSkge1xuXHRcdFx0XHRcdFx0Ly8gYWRkIGdhdGUgdG8gY29sdW1uXG5cdFx0XHRcdFx0XHRxdWlya0NvbHVtbi5wdXNoKHF1aXJrTmFtZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gTm90IGRpcmVjdGx5IHN1cHBvcnRlZCBieSBxdWlya1xuXHRcdFx0XHRcdGlmKCFxdWlya05hbWUpIHtcblx0XHRcdFx0XHRcdHF1aXJrTmFtZSA9IFwiflwiICsgZ2F0ZS5uYW1lO1xuXG5cdFx0XHRcdFx0XHRpZihiYXNpY0dhdGUucGFyYW1zLmxlbmd0aCAmJiBnYXRlLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdGJhc2ljR2F0ZS5wYXJhbXMubWFwKGZ1bmN0aW9uKHBhcmFtKXtcblx0XHRcdFx0XHRcdFx0XHRhbmdsZSA9IG1hdGgucm91bmQobWF0aC5ldmFsdWF0ZShnYXRlLm9wdGlvbnMucGFyYW1zW3BhcmFtXSwgZ2xvYmFsUGFyYW1zKSwgMyk7XG5cdFx0XHRcdFx0XHRcdFx0cXVpcmtOYW1lICs9IFwiX1wiICsgYW5nbGU7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR2YXIgbWF0cml4ID0gXCJcIjtcblx0XHRcdFx0XHRcdG1hdHJpeCArPSBcIntcIjtcblxuXHRcdFx0XHRcdFx0dmFyIHJhd01hdHJpeCA9IHNlbGYuZ2V0UmF3R2F0ZShiYXNpY0dhdGUsIGdhdGUub3B0aW9ucyk7XG5cblx0XHRcdFx0XHRcdHZhciB0YXJnZXRXaXJlc1NvcnRlZCA9IGdhdGVXaXJlcy5zb3J0KCk7XG5cdFx0XHRcdFx0XHR2YXIgdGFyZ2V0V2lyZXMgPSBbXTtcblx0XHRcdFx0XHRcdGdhdGUud2lyZXMubWFwKGZ1bmN0aW9uKHRXaXJlKSB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldFdpcmVzLnB1c2godGFyZ2V0V2lyZXNTb3J0ZWQuaW5kZXhPZih0V2lyZSkpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRpZihtYXhXaXJlIC0gbWluV2lyZSArIDEgPiBnYXRlLndpcmVzLmxlbmd0aCB8fCBnYXRlLndpcmVzWzBdID4gZ2F0ZS53aXJlc1sxXSkge1xuXHRcdFx0XHRcdFx0XHRnYXRlTWF0cml4ID0gY2lyY3VpdC50cmFuc2Zvcm1NYXRyaXgobWF4V2lyZSAtIG1pbldpcmUgKyAxLCByYXdNYXRyaXgsIHRhcmdldFdpcmVzKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGdhdGVNYXRyaXggPSByYXdNYXRyaXg7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGdhdGVNYXRyaXgubWFwKGZ1bmN0aW9uKHJvdywgcm93SW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0aWYocm93SW5kZXggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0bWF0cml4ICs9IFwiLFwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdG1hdHJpeCArPSBcIntcIjtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHJvdy5tYXAoZnVuY3Rpb24oY29sLCBjb2xJbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmKGNvbEluZGV4ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bWF0cml4ICs9IFwiLFwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmKHR5cGVvZiBjb2wgIT0gXCJvYmplY3RcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29sID0gbWF0aC5jb21wbGV4KGNvbCkudG9TdHJpbmcoKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29sID0gY29sLnRvU3RyaW5nKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0bWF0cml4ICs9IGNvbDtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdG1hdHJpeCArPSBcIn1cIjtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0bWF0cml4ICs9IFwifVwiO1xuXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRpZihnYXRlLmNvbm5lY3RvciA9PSAwKSB7XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHZhciBhbHJlYWR5RGVmaW5lZCA9IHF1aXJrLmdhdGVzLmZpbmQoZnVuY3Rpb24oZ3QpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZ3QuaWQgPT0gcXVpcmtOYW1lO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdGlmKCFhbHJlYWR5RGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0XHRcdHF1aXJrLmdhdGVzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdFx0aWQ6IHF1aXJrTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdG1hdHJpeDogbWF0cml4XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHZhciBnYXRlUHJlc2VudEluQ29sID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgY29sdW1uRWxlbWVudCA9IDA7IGNvbHVtbkVsZW1lbnQgPCBxdWlya0NvbHVtbi5sZW5ndGg7IGNvbHVtbkVsZW1lbnQrKyl7XG5cdFx0XHRcdFx0XHRcdFx0aWYocXVpcmtDb2x1bW5bY29sdW1uRWxlbWVudF0gPT0gcXVpcmtOYW1lKXtcblx0XHRcdFx0XHRcdFx0XHRcdGdhdGVQcmVzZW50SW5Db2wgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0aWYoIWdhdGVQcmVzZW50SW5Db2wpe1xuXHRcdFx0XHRcdFx0XHRcdHF1aXJrQ29sdW1uLnB1c2gocXVpcmtOYW1lKTtcblx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHF1aXJrQ29sdW1uLnB1c2goMSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGlmKHdpcmUgPCBnYXRlLndpcmVzWzBdKXtcblx0XHRcdFx0XHRcdFx0XHRxdWlyay5nYXRlcy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdGlkOiBxdWlya05hbWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRtYXRyaXg6IG1hdHJpeFxuXHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBhbHJlYWR5RGVmaW5lZCA9IHF1aXJrLmdhdGVzLmZpbmQoZnVuY3Rpb24oZ3QpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBndC5pZCA9PSBxdWlya05hbWU7XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0aWYoIWFscmVhZHlEZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlyay5nYXRlcy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ6IHF1aXJrTmFtZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWF0cml4OiBtYXRyaXhcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHR2YXIgZ2F0ZVByZXNlbnRJbkNvbCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgY29sdW1uRWxlbWVudCA9IDA7IGNvbHVtbkVsZW1lbnQgPCBxdWlya0NvbHVtbi5sZW5ndGg7IGNvbHVtbkVsZW1lbnQrKyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihxdWlya0NvbHVtbltjb2x1bW5FbGVtZW50XSA9PSBxdWlya05hbWUpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRnYXRlUHJlc2VudEluQ29sID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0aWYoIWdhdGVQcmVzZW50SW5Db2wpe1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpcmtDb2x1bW4ucHVzaChxdWlya05hbWUpO1xuXHRcdFx0XHRcdFx0XHRcdH1lbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aXJrQ29sdW1uLnB1c2goMSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhciBjdXN0b21HYXRlV2lyZXMgPSBbXTtcblx0XHRcdFx0XHRpc0Jhc2ljR2F0ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdGlmKGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0XHRcdHZhciBjdXN0b21HYXRlRXhpc3RzID0gY3VzdG9tR2F0ZUNpcmN1aXQuZ2F0ZXMuZmluZChmdW5jdGlvbihjdXN0b21HYXRlKXtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGN1c3RvbUdhdGUgJiYgY3VzdG9tR2F0ZVswXSAmJiBjdXN0b21HYXRlWzBdW1wibmFtZVwiXSA9PSBnYXRlLm5hbWU7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGlmKCFjdXN0b21HYXRlRXhpc3RzKXtcblx0XHRcdFx0XHRcdFx0dmFyIHdpcmVPZmZzZXQgPSBnYXRlLndpcmVzWzBdO1xuXHRcdFx0XHRcdFx0XHRnYXRlLndpcmVzLm1hcChmdW5jdGlvbihnYXRlV2lyZSl7XG5cdFx0XHRcdFx0XHRcdFx0Y3VzdG9tR2F0ZVdpcmVzLnB1c2goZ2F0ZVdpcmUgLSB3aXJlT2Zmc2V0KTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdGN1c3RvbUdhdGVDaXJjdWl0LnJlZ2lzdGVyR2F0ZShnYXRlLm5hbWUsIHNlbGYuY3VzdG9tR2F0ZXNbZ2F0ZS5uYW1lXSk7XG5cdFx0XHRcdFx0XHRcdGN1c3RvbUdhdGVDaXJjdWl0LmFwcGVuZEdhdGUoZ2F0ZS5uYW1lLCBjdXN0b21HYXRlV2lyZXMpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cXVpcmtDb2x1bW4ucHVzaChcIn5cIiArIGdhdGUubmFtZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHF1aXJrQ29sdW1uLnB1c2goMSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHF1aXJrLmNvbHMucHVzaChxdWlya0NvbHVtbik7XG5cdH1cdFx0XG5cdFxuXHRcblx0Ly8gdXNlciBkZWZpbmVkIGdhdGVzXG5cdGlmKCFkZWNvbXBvc2UpIHtcblx0XHR2YXIgdXNlZEdhdGVzID0gY2lyY3VpdC51c2VkR2F0ZXMoKTtcblx0XHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0aWYoIWJhc2ljR2F0ZSkge1xuXHRcdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHNlbGYuY3VzdG9tR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0aWYoY3VzdG9tR2F0ZSkge1xuXHRcdFx0XHRcdHZhciBjdXN0b21DaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0Zm9yKGN1c3RvbUNvbCA9IDA7IGN1c3RvbUNvbCA8IGN1c3RvbUdhdGVDaXJjdWl0Lm51bUNvbHMoKTsgY3VzdG9tQ29sKyspe1xuXHRcdFx0XHRcdFx0Zm9yKGN1c3RvbVdpcmUgPSAwOyBjdXN0b21XaXJlIDwgY3VzdG9tR2F0ZUNpcmN1aXQubnVtR2F0ZXMoKTsgY3VzdG9tV2lyZSsrKXtcblx0XHRcdFx0XHRcdFx0dmFyIGNpcmN1aXRHYXRlID0gY3VzdG9tR2F0ZUNpcmN1aXQuZ2V0R2F0ZUF0KGN1c3RvbUNvbCwgY3VzdG9tV2lyZSk7XG5cdFx0XHRcdFx0XHRcdGlmKGNpcmN1aXRHYXRlICYmIGNpcmN1aXRHYXRlLm5hbWUgPT0gdXNlZEdhdGVOYW1lKXtcblx0XHRcdFx0XHRcdFx0XHRjdXN0b21HYXRlT2JqID0gY3VzdG9tR2F0ZUNpcmN1aXQuZGVjb21wb3NlR2F0ZUF0KGN1c3RvbUNvbCwgY3VzdG9tV2lyZSk7XG5cdFx0XHRcdFx0XHRcdFx0Y3VzdG9tQ2lyY3VpdC5sb2FkKGN1c3RvbUdhdGVPYmopO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHF1aXJrLmdhdGVzLnB1c2goe1xuXHRcdFx0XHRcdFx0aWQ6IFwiflwiICsgdXNlZEdhdGVOYW1lLFxuXHRcdFx0XHRcdFx0Y2lyY3VpdDogY3VzdG9tQ2lyY3VpdC5leHBvcnRRdWlyayh0cnVlKVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gcXVpcms7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRDaXJxID0gZnVuY3Rpb24oY29tbWVudCwgZGVjb21wb3NlLCBleHBvcnRBc0dhdGVOYW1lLCB2ZXJzaW9uU3RyLCBhc0p1cHl0ZXIsIHNob3RzLCBleHBvcnRUZnEpIHtcblx0dmFyIG9wdGlvbnMgPSB7XG5cdFx0Y29tbWVudDogY29tbWVudCxcblx0XHRkZWNvbXBvc2U6IGRlY29tcG9zZSxcblx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyLFxuXHRcdGFzSnVweXRlcjogYXNKdXB5dGVyLFxuXHRcdHNob3RzOiBzaG90cyxcblx0XHRleHBvcnRUZnE6IGV4cG9ydFRmcVxuXHR9O1xuXHRyZXR1cm4gdGhpcy5leHBvcnRUb0NpcnEob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSk7XG59XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFFTaGFycCA9IGZ1bmN0aW9uKGNvbW1lbnQsIGRlY29tcG9zZSwgZXhwb3J0QXNHYXRlTmFtZSwgdmVyc2lvblN0ciwgYXNKdXB5dGVyLCBjaXJjdWl0TmFtZSwgaW5kZW50RGVwdGgpIHtcblx0dmFyIG9wdGlvbnMgPSB7XG5cdFx0Y29tbWVudDogY29tbWVudCxcblx0XHRkZWNvbXBvc2U6IGRlY29tcG9zZSxcblx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyLFxuXHRcdGFzSnVweXRlcjogYXNKdXB5dGVyLFxuXHRcdGNpcmN1aXROYW1lOiBjaXJjdWl0TmFtZSxcblx0XHRpbmRlbnREZXB0aDogaW5kZW50RGVwdGhcblx0fTtcblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9RU2hhcnAob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSk7XG59XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRRb2JqID0gZnVuY3Rpb24oY2lyY3VpdE5hbWUsIGV4cGVyaW1lbnROYW1lLCBudW1TaG90cywgY2lyY3VpdFJlcGxhY2VtZW50KSB7XG5cdHZhciBvcHRpb25zID0ge1xuXHRcdGNpcmN1aXROYW1lOiBjaXJjdWl0TmFtZSxcblx0XHRleHBlcmltZW50TmFtZTogZXhwZXJpbWVudE5hbWUsXG5cdFx0bnVtU2hvdHM6IG51bVNob3RzXG5cdH07XG5cdFxuXHRyZXR1cm4gdGhpcy5leHBvcnRUb1FvYmoob3B0aW9ucywgY2lyY3VpdFJlcGxhY2VtZW50KVx0XG59XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmltcG9ydFFvYmogPSBmdW5jdGlvbihxb2JqLCBlcnJvckNhbGxiYWNrKSB7XG5cdHZhciBzZWxmID0gdGhpcztcblxuXHR0aGlzLmluaXQoKTtcblxuXHRpZighcW9iaiB8fCAhcW9iai5leHBlcmltZW50cyB8fCAhcW9iai5leHBlcmltZW50cy5sZW5ndGgpIHtcblx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IFwiSW52YWxpZCBpbnB1dCBmaWxlOiBubyBleHBlcmltZW50cyBmb3VuZC5cIiB9IF0pO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH1cblxuXHR2YXIgZXhwZXJpbWVudCA9IHFvYmouZXhwZXJpbWVudHNbMF07XG5cblx0dmFyIGhlYWRlciA9IGV4cGVyaW1lbnQuaGVhZGVyIHx8IHt9O1xuXG5cdC8vIEFkZCBxdWJpdHNcblx0dGhpcy5pbml0KHBhcnNlSW50KGhlYWRlci5uX3F1Yml0cyB8fCAwKSk7XG5cblx0Ly8gQ2xhc3NpY2FsIHJlZ2lzdGVyc1xuXHR2YXIgY3JlZ0RhdGEgPSB7fTtcblx0aWYoaGVhZGVyLmNyZWdfc2l6ZXMgJiYgaGVhZGVyLmNyZWdfc2l6ZXMubGVuZ3RoKSB7XG5cdFx0dmFyIHRvdGFsQml0cyA9IDA7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGhlYWRlci5jcmVnX3NpemVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgY3JlZ0RlZiA9IGhlYWRlci5jcmVnX3NpemVzW2ldO1xuXHRcdFx0aWYoY3JlZ0RlZi5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdHZhciBjcmVnTmFtZSA9IGNyZWdEZWZbMF0gKyBcIlwiO1xuXHRcdFx0XHR2YXIgY3JlZ0xlbiA9IHBhcnNlSW50KGNyZWdEZWZbMV0pO1xuXHRcdFx0XHR0aGlzLmNyZWF0ZUNyZWcoY3JlZ05hbWUsIGNyZWdMZW4pO1xuXG5cdFx0XHRcdHZhciBjcmVnTWFzayA9ICgoMSA8PCAodG90YWxCaXRzICsgY3JlZ0xlbikpIC0gKDEgPDwgdG90YWxCaXRzKSk7XG5cblx0XHRcdFx0Y3JlZ0RhdGFbY3JlZ05hbWVdID0ge1xuXHRcdFx0XHRcdG1hc2s6IGNyZWdNYXNrLFxuXHRcdFx0XHRcdG9mZnNldDogdG90YWxCaXRzXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0dG90YWxCaXRzICs9IGNyZWdMZW47XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIGNsYXNzaWNhbCBjb25kaXRpb24gYXJndW1lbnQgZm9yIGdhdGUgZnJvbSBiZnVuYyBtYXNrIGFuZCB2YWx1ZVxuXHRmdW5jdGlvbiBjb25kaXRpb25Gcm9tTWFza0FuZFZhbHVlKG1hc2ssIHZhbHVlKSB7XG5cdFx0Zm9yKHZhciBjcmVnTmFtZSBpbiBjcmVnRGF0YSkge1xuXHRcdFx0dmFyIGRhdGEgPSBjcmVnRGF0YVtjcmVnTmFtZV07XG5cblx0XHRcdGlmKGRhdGEubWFzayA9PSBtYXNrKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0Y3JlZzogY3JlZ05hbWUsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlID4+IGRhdGEub2Zmc2V0XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBPYnRhaW4gY2xhc3NpY2FsIHJlZ2lzdGVyIG5hbWUgYW5kIGxvY2FsIGJpdCBudW1iZXIgZnJvbSBnbG9iYWwgYml0IG51bWJlclxuXHRmdW5jdGlvbiBtZW1vcnlUb0NyZWcobWVtb3J5KSB7XG5cdFx0dmFyIHRvdGFsQml0cyA9IDA7XG5cdFx0Zm9yKHZhciBjcmVnTmFtZSBpbiBzZWxmLmNyZWdzKSB7XG5cdFx0XHR2YXIgY3JlZyA9IHNlbGYuY3JlZ3NbY3JlZ05hbWVdO1xuXHRcdFx0aWYoKHRvdGFsQml0cyArIGNyZWcubGVuZ3RoKSA+IG1lbW9yeSkge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdG5hbWU6IGNyZWdOYW1lLFxuXHRcdFx0XHRcdGJpdDogbWVtb3J5IC0gdG90YWxCaXRzXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0XHR0b3RhbEJpdHMgKz0gY3JlZy5sZW5ndGg7XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gQWRkIGdhdGVzXG5cdHZhciBpbnN0cnVjdGlvbnMgPSBleHBlcmltZW50Lmluc3RydWN0aW9ucyB8fCBbXTtcblx0dmFyIGNvbmRpdGlvbnMgPSB7fTtcblx0Zm9yKHZhciBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBleHBlcmltZW50Lmluc3RydWN0aW9ucy5sZW5ndGg7IGluc3RJbmRleCsrKSB7XG5cdFx0dmFyIGluc3QgPSBleHBlcmltZW50Lmluc3RydWN0aW9uc1tpbnN0SW5kZXhdO1xuXG5cdFx0c3dpdGNoKGluc3QubmFtZSkge1xuXHRcdFx0Ly8gY2xhc3NpY2FsIGNvbnRyb2xcblx0XHRcdGNhc2UgXCJiZnVuY1wiOiB7XG5cdFx0XHRcdHZhciBjb25kaXRpb24gPSBjb25kaXRpb25Gcm9tTWFza0FuZFZhbHVlKHBhcnNlSW50KGluc3QubWFzayksIHBhcnNlSW50KGluc3QudmFsKSk7XG5cblx0XHRcdFx0aWYoIWNvbmRpdGlvbikge1xuXHRcdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgY2xhc3NpY2FsIGNvbmRpdGlvbi5cIjtcblx0XHRcdFx0XHRpZihlcnJvckNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSB9IF0pO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25kaXRpb25zW2luc3QucmVnaXN0ZXJdID0gY29uZGl0aW9uO1xuXHRcdFx0fTsgYnJlYWs7XG5cblx0XHRcdC8vIE1lYXN1cmVtZW50XG5cdFx0XHRjYXNlIFwibWVhc3VyZVwiOiB7XG5cdFx0XHRcdGZvcih2YXIgcUluZGV4ID0gMDsgcUluZGV4IDwgaW5zdC5xdWJpdHMubGVuZ3RoOyBxSW5kZXgrKykge1xuXHRcdFx0XHRcdHZhciBxdWJpdCA9IGluc3QucXViaXRzW3FJbmRleF07XG5cdFx0XHRcdFx0dmFyIG1lbW9yeSA9IGluc3QubWVtb3J5W3FJbmRleF07XG5cdFx0XHRcdFx0dmFyIGNyZWcgPSBtZW1vcnlUb0NyZWcobWVtb3J5KTtcblx0XHRcdFx0XHRpZighY3JlZykge1xuXHRcdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBtZWFzdXJlbWVudCBkZXN0aW5hdGlvbi5cIjtcblx0XHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UgfSBdKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHR9XHRcdFx0XHRcdFxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHZhciBvcHRpb25zID0geyBjcmVnOiBjcmVnIH07XG5cblx0XHRcdFx0XHR0aGlzLmFwcGVuZEdhdGUoXCJtZWFzdXJlXCIsIHF1Yml0LCBvcHRpb25zKTtcblx0XHRcdFx0fVxuXHRcdFx0fTsgYnJlYWs7XG5cblx0XHRcdGNhc2UgXCJiYXJyaWVyXCI6IHtcblx0XHRcdFx0Ly8gISEhIE5vdCBpbXBsZW1lbnRlZCB5ZXQuIElnbm9yZSBmb3Igbm93LlxuXHRcdFx0fTsgYnJlYWs7XG5cblx0XHRcdC8vIE5vcm1hbCBnYXRlXG5cdFx0XHRkZWZhdWx0OiB7XG5cdFx0XHRcdHZhciBvcHRpb25zID0ge1xuXHRcdFx0XHRcdHBhcmFtczoge30sXG5cdFx0XHRcdFx0Y29uZGl0aW9uOiB7fVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdC8vIEZpbmQgZ2F0ZSBkZWZpbml0aW9uXG5cdFx0XHRcdHZhciBnYXRlTmFtZSA9IGluc3QubmFtZTtcblx0XHRcdFx0c3dpdGNoKGdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0Y2FzZSBcImlkZW5cIjogZ2F0ZU5hbWUgPSBcImlkXCI7IGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIGdhdGVEZWYgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0XHRpZighZ2F0ZURlZikge1xuXHRcdFx0XHRcdHZhciBlcnJvck1lc3NhZ2UgPSBcIlVua25vd24gZ2F0ZSBcXFwiXCIgKyBpbnN0Lm5hbWUgKyBcIlxcXCIuXCI7XG5cdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UgfSBdKTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gR2F0ZSBwYXJhbXMgKGlmIGFueSlcblx0XHRcdFx0aWYoZ2F0ZURlZi5wYXJhbXMgJiYgZ2F0ZURlZi5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0aWYoIWluc3QucGFyYW1zIHx8ICFpbnN0LnBhcmFtcy5sZW5ndGggfHwgaW5zdC5wYXJhbXMubGVuZ3RoICE9IGdhdGVEZWYucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBudW1iZXIgb2YgcGFyYW1zIGZvciBnYXRlIFxcXCJcIiArIGluc3QubmFtZSArIFwiXFxcIi5cIjtcblx0XHRcdFx0XHRcdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjayhbIHsgbXNnOiBlcnJvck1lc3NhZ2UgfSBdKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Zm9yKHZhciBwYXJJbmRleCA9IDA7IHBhckluZGV4IDwgZ2F0ZURlZi5wYXJhbXMubGVuZ3RoOyBwYXJJbmRleCsrKSB7XG5cdFx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gZ2F0ZURlZi5wYXJhbXNbcGFySW5kZXhdO1xuXHRcdFx0XHRcdFx0b3B0aW9ucy5wYXJhbXNbcGFyYW1OYW1lXSA9IGluc3QucGFyYW1zW3BhckluZGV4XTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDbGFzc2ljYWwgY29udHJvbCAoaWYgYW55KVxuXHRcdFx0XHRpZih0eXBlb2YgaW5zdC5jb25kaXRpb25hbCAhPSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdFx0dmFyIGNvbmRpdGlvbiA9IGNvbmRpdGlvbnNbaW5zdC5jb25kaXRpb25hbF07XG5cdFx0XHRcdFx0aWYoIWNvbmRpdGlvbikge1xuXHRcdFx0XHRcdFx0dmFyIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBjbGFzc2ljYWwgY29uZGl0aW9uLlwiO1xuXHRcdFx0XHRcdFx0aWYoZXJyb3JDYWxsYmFjaykge1xuXHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKFsgeyBtc2c6IGVycm9yTWVzc2FnZSB9IF0pO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0b3B0aW9ucy5jb25kaXRpb24gPSBjb25kaXRpb247XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBZGQgZ2F0ZSB0byBjaXJjdWl0XG5cdFx0XHRcdHRoaXMuYXBwZW5kR2F0ZShnYXRlTmFtZSwgaW5zdC5xdWJpdHMsIG9wdGlvbnMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFRoaXMgZXJyb3IgaGFuZGxpbmcgaXMgY3IqcCBidXQgbGV0J3MgYmUgY29uc2lzdGVudCB3aXRoIGltcG9ydFFBU00oKSBmb3Igbm93XG5cdGlmKGVycm9yQ2FsbGJhY2spIHtcblx0XHRlcnJvckNhbGxiYWNrKFtdKTtcblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRGUSA9IGZ1bmN0aW9uKGNvbW1lbnQsIGRlY29tcG9zZSwgZXhwb3J0QXNHYXRlTmFtZSwgdmVyc2lvblN0ciwgYXNKdXB5dGVyLCBzaG90cykge1xuXHR2YXIgb3B0aW9ucyA9IHtcblx0XHRjb21tZW50OiBjb21tZW50LFxuXHRcdGRlY29tcG9zZTogZGVjb21wb3NlLFxuXHRcdHZlcnNpb25TdHI6IHZlcnNpb25TdHIsXG5cdFx0YXNKdXB5dGVyOiBhc0p1cHl0ZXIsXG5cdFx0c2hvdHM6IHNob3RzXG5cdH07XG5cdHJldHVybiB0aGlzLmV4cG9ydFRvVEZRKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpO1xufVxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0QnJha2V0ID0gZnVuY3Rpb24oY29tbWVudCwgZGVjb21wb3NlLCBleHBvcnRBc0dhdGVOYW1lLCB2ZXJzaW9uU3RyLCBhc0p1cHl0ZXIsIHNob3RzLCBoeWJyaWQsIGluZGVudERlcHRoKSB7XG5cdHZhciBvcHRpb25zID0ge1xuXHRcdGNvbW1lbnQ6IGNvbW1lbnQsXG5cdFx0ZGVjb21wb3NlOiBkZWNvbXBvc2UsXG5cdFx0dmVyc2lvblN0cjogdmVyc2lvblN0cixcblx0XHRhc0p1cHl0ZXI6IGFzSnVweXRlcixcblx0XHRzaG90czogc2hvdHMsXG5cdFx0aHlicmlkOiBoeWJyaWQsXG5cdFx0aW5kZW50RGVwdGg6IGluZGVudERlcHRoXG5cdH07XG5cblx0cmV0dXJuIHRoaXMuZXhwb3J0VG9CcmFrZXQob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSk7XG59XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRTVkcgPSBmdW5jdGlvbihlbWJlZGRlZCwgb3B0aW9ucykge1xuXHR2YXIgbmV3T3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cdG5ld09wdGlvbnMuZW1iZWRkZWQgPSAhIWVtYmVkZGVkO1xuXG5cdHJldHVybiB0aGlzLmV4cG9ydFRvU1ZHKG5ld09wdGlvbnMpO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvU1ZHID0gZnVuY3Rpb24ob3B0aW9ucykge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cdHZhciBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRvcHRpb25zLmVtYmVkZGVkID0gb3B0aW9ucy5lbWJlZGRlZCB8fCBmYWxzZTtcblx0b3B0aW9ucy5jZWxsV2lkdGggPSBvcHRpb25zLmNlbGxXaWR0aCB8fCA0MDtcblx0b3B0aW9ucy5jZWxsSGVpZ2h0ID0gb3B0aW9ucy5jZWxsSGVpZ2h0IHx8IDQwO1xuXHRvcHRpb25zLmhTcGFjaW5nID0gb3B0aW9ucy5oU3BhY2luZyB8fCAyODtcblx0b3B0aW9ucy52U3BhY2luZyA9IG9wdGlvbnMudlNwYWNpbmcgfHwgMzQ7XG5cdG9wdGlvbnMuYmxhY2tib3hQYWRkaW5nWCA9IG9wdGlvbnMuYmxhY2tib3hQYWRkaW5nWCB8fCAyO1xuXHRvcHRpb25zLmJsYWNrYm94UGFkZGluZ1kgPSBvcHRpb25zLmJsYWNrYm94UGFkZGluZ1kgfHwgMjtcblx0b3B0aW9ucy5ibGFja2JveExpbmVDb2xvciA9IG9wdGlvbnMuYmxhY2tib3hMaW5lQ29sb3IgfHwgXCJibGFja1wiO1xuXHRvcHRpb25zLmJsYWNrYm94U2VsZWN0ZWRMaW5lQ29sb3IgPSBvcHRpb25zLmJsYWNrYm94U2VsZWN0ZWRMaW5lQ29sb3IgfHwgXCJibGFja1wiO1xuXHRvcHRpb25zLndpcmVDb2xvciA9IG9wdGlvbnMud2lyZUNvbG9yIHx8IFwiYmxhY2tcIjtcblx0b3B0aW9ucy5nYXRlTGluZUNvbG9yID0gb3B0aW9ucy5nYXRlTGluZUNvbG9yIHx8IFwiYmxhY2tcIjtcblx0b3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgPSBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciB8fCBcImJsYWNrXCI7XG5cdG9wdGlvbnMuY1dpcmVDb2xvciA9IG9wdGlvbnMuY1dpcmVDb2xvciB8fCBcInNpbHZlclwiO1xuXHRvcHRpb25zLmNXaXJlU2VsZWN0ZWRDb2xvciA9IG9wdGlvbnMuY1dpcmVTZWxlY3RlZENvbG9yIHx8IFwic2lsdmVyXCI7XG5cdG9wdGlvbnMuY0Fycm93U2l6ZSA9IG9wdGlvbnMuY0Fycm93U2l6ZSB8fCAxMDtcblx0b3B0aW9ucy5oV2lyZUNvbG9yID0gb3B0aW9ucy5oV2lyZUNvbG9yIHx8IFwiYmxhY2tcIjtcblx0b3B0aW9ucy53aXJlV2lkdGggPSBvcHRpb25zLndpcmVXaWR0aCB8fCAxO1xuXHRvcHRpb25zLndpcmVUZXh0SGVpZ2h0ID0gb3B0aW9ucy53aXJlVGV4dEhlaWdodCB8fCA4O1xuXHRvcHRpb25zLndpcmVUZXh0RG93biA9IG9wdGlvbnMud2lyZVRleHREb3duIHx8IDE2O1xuXHRvcHRpb25zLndpcmVNYXJnaW4gPSBvcHRpb25zLndpcmVNYXJnaW4gfHwgMjA7XG5cdG9wdGlvbnMud2lyZUxhYmVsV2lkdGggPSBvcHRpb25zLndpcmVMYWJlbFdpZHRoIHx8IDQwO1xuXHRvcHRpb25zLmRvdFJhZGl1cyA9IG9wdGlvbnMuZG90UmFkaXVzIHx8IDU7XG5cdG9wdGlvbnMucGFyYW1UZXh0SGVpZ2h0ID0gb3B0aW9ucy5wYXJhbVRleHRIZWlnaHQgfHwgNjtcblx0b3B0aW9ucy5zZWxlY3Rpb25QYWRkaW5nWCA9IG9wdGlvbnMuc2VsZWN0aW9uUGFkZGluZ1ggfHwgNDtcblx0b3B0aW9ucy5zZWxlY3Rpb25QYWRkaW5nWSA9IG9wdGlvbnMuc2VsZWN0aW9uUGFkZGluZ1kgfHwgNDtcblx0b3B0aW9ucy5zZWxlY3Rpb25MaW5lQ29sb3IgPSBvcHRpb25zLnNlbGVjdGlvbkxpbmVDb2xvciB8fCBcIiMyMTg1RDBcIjtcblx0b3B0aW9ucy5kcmF3QmxvY2hTcGhlcmVzID0gb3B0aW9ucy5kcmF3QmxvY2hTcGhlcmVzIHx8IGZhbHNlO1xuXG5cdGlmKHR5cGVvZiBvcHRpb25zLmRyYXdIeWJyaWQgPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdG9wdGlvbnMuZHJhd0h5YnJpZCA9IHRoaXMub3B0aW9ucyA/ICEhdGhpcy5vcHRpb25zLmh5YnJpZCA6IGZhbHNlO1xuXHR9XG5cblx0dmFyIGdldENyZWdJbmRleCA9IGZ1bmN0aW9uKG5hbWUpIHtcblx0XHR2YXIgY3JlZ0luZGV4ID0gMDtcblx0XHRmb3IodmFyIGNyZWdOYW1lIGluIHNlbGYuY3JlZ3MpIHtcblx0XHRcdGlmKGNyZWdOYW1lID09IG5hbWUpIHtcblx0XHRcdFx0cmV0dXJuIGNyZWdJbmRleDtcblx0XHRcdH1cblx0XHRcdGNyZWdJbmRleCsrO1xuXHRcdH1cblx0XHRyZXR1cm4gY3JlZ0luZGV4O1xuXHR9O1xuXG5cdHZhciBnZXRDZWxsWCA9IGZ1bmN0aW9uKGNvbCkge1xuXHRcdHJldHVybiBvcHRpb25zLndpcmVMYWJlbFdpZHRoICsgKChvcHRpb25zLmNlbGxXaWR0aCArIG9wdGlvbnMuaFNwYWNpbmcpICogY29sKSArIG9wdGlvbnMuaFNwYWNpbmc7XG5cdH07XG5cblx0dmFyIGdldENlbGxZID0gZnVuY3Rpb24od2lyZSkge1xuXHRcdHJldHVybiAoKG9wdGlvbnMuY2VsbEhlaWdodCArIG9wdGlvbnMudlNwYWNpbmcpICogd2lyZSkgKyBvcHRpb25zLnZTcGFjaW5nO1xuXHR9O1xuXG5cdHZhciBudW1Sb3dzID0gdGhpcy5udW1RdWJpdHM7XG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdHZhciBudW1DcmVncyA9IHRoaXMuY3JlZ0NvdW50KCk7XG5cblx0dmFyIHRvdGFsQ29scyA9IG51bUNvbHM7XG5cdC8vIHJlc2VydmUgY29sIGZvciBibG9jaCBzcGhlcmVzXG5cdGlmKG9wdGlvbnMuZHJhd0Jsb2NoU3BoZXJlcykge1xuXHRcdHRvdGFsQ29scysrO1xuXHR9XG5cblx0dmFyIHRvdGFsV2lyZUNvbHMgPSB0b3RhbENvbHM7XG5cblx0Ly8gcmVzZXJ2ZSAyIGNvbHMgZm9yIGh5YnJpZCBxdWFudHVtLWNsYXNzaWNhbCBjb25uZWN0b3Jcblx0aWYob3B0aW9ucy5kcmF3SHlicmlkKSB7XG5cdFx0dG90YWxDb2xzICs9IDI7XG5cdH1cblxuXHR2YXIgdG90YWxXaWR0aCA9IGdldENlbGxYKHRvdGFsQ29scyk7XG5cdHZhciB0b3RhbFdpcmVXaWR0aCA9IGdldENlbGxYKHRvdGFsV2lyZUNvbHMpO1xuXHR2YXIgdG90YWxIZWlnaHQgPSAoKG9wdGlvbnMuY2VsbEhlaWdodCArIG9wdGlvbnMudlNwYWNpbmcpICogKG51bVJvd3MgKyBudW1DcmVncyArIChvcHRpb25zLmRyYXdIeWJyaWQgPyAxIDogMCkpKSArIG9wdGlvbnMudlNwYWNpbmc7XG5cblx0dmFyIGh5YnJpZFkgPSAoKG9wdGlvbnMuY2VsbEhlaWdodCArIG9wdGlvbnMudlNwYWNpbmcpICogKG51bVJvd3MgKyBudW1DcmVncykpICsgb3B0aW9ucy52U3BhY2luZztcblx0dmFyIGh5YnJpZFdpcmVZID0gKChvcHRpb25zLmNlbGxIZWlnaHQgKyBvcHRpb25zLnZTcGFjaW5nKSAqIChudW1Sb3dzICsgbnVtQ3JlZ3MpKSArIChvcHRpb25zLnZTcGFjaW5nICsgKG9wdGlvbnMuY2VsbEhlaWdodCAvIDIpKTtcblxuXHRmdW5jdGlvbiBwb2xhclRvQ2FydGVzaWFuKGNlbnRlclgsIGNlbnRlclksIHJhZGl1cywgYW5nbGVJbkRlZ3JlZXMpIHtcblx0XHR2YXIgYW5nbGVJblJhZGlhbnMgPSAoYW5nbGVJbkRlZ3JlZXMgLSA5MCkgKiBNYXRoLlBJIC8gMTgwLjA7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0XHR4OiBjZW50ZXJYICsgKHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlSW5SYWRpYW5zKSksXG5cdFx0XHRcdHk6IGNlbnRlclkgKyAocmFkaXVzICogTWF0aC5zaW4oYW5nbGVJblJhZGlhbnMpKVxuXHRcdH07XG5cdH1cblxuXHRmdW5jdGlvbiBkZXNjcmliZUFyYyh4LCB5LCByYWRpdXMsIHN0YXJ0QW5nbGUsIGVuZEFuZ2xlKXtcblxuXHRcdHZhciBzdGFydCA9IHBvbGFyVG9DYXJ0ZXNpYW4oeCwgeSwgcmFkaXVzLCBlbmRBbmdsZSk7XG5cdFx0dmFyIGVuZCA9IHBvbGFyVG9DYXJ0ZXNpYW4oeCwgeSwgcmFkaXVzLCBzdGFydEFuZ2xlKTtcblxuXHRcdHZhciBsYXJnZUFyY0ZsYWcgPSBlbmRBbmdsZSAtIHN0YXJ0QW5nbGUgPD0gMTgwID8gXCIwXCIgOiBcIjFcIjtcblxuXHRcdHZhciBkID0gW1xuXHRcdFx0XCJNXCIsIHN0YXJ0LngsIHN0YXJ0LnksXG5cdFx0XHRcIkFcIiwgcmFkaXVzLCByYWRpdXMsIDAsIGxhcmdlQXJjRmxhZywgMCwgZW5kLngsIGVuZC55XG5cdFx0XS5qb2luKFwiIFwiKTtcblxuXHRcdHJldHVybiBkO1xuXHR9XG5cblx0dmFyIHFXaXJlWSA9IGZ1bmN0aW9uKHdpcmUpIHtcblx0XHRyZXR1cm4gKChvcHRpb25zLmNlbGxIZWlnaHQgKyBvcHRpb25zLnZTcGFjaW5nKSAqIHdpcmUpICsgKG9wdGlvbnMudlNwYWNpbmcgKyAob3B0aW9ucy5jZWxsSGVpZ2h0IC8gMikpO1xuXHR9O1xuXG5cdHZhciBxR2F0ZVkgPSBmdW5jdGlvbih3aXJlKSB7XG5cdFx0cmV0dXJuICgob3B0aW9ucy5jZWxsSGVpZ2h0ICsgb3B0aW9ucy52U3BhY2luZykgKiB3aXJlKSArIG9wdGlvbnMudlNwYWNpbmc7XG5cdH07XG5cblx0dmFyIGNXaXJlWSA9IGZ1bmN0aW9uKGNyZWdOYW1lKSB7XG5cdFx0cmV0dXJuICgob3B0aW9ucy5jZWxsSGVpZ2h0ICsgb3B0aW9ucy52U3BhY2luZykgKiAobnVtUm93cyArIGdldENyZWdJbmRleChjcmVnTmFtZSkpKSArIChvcHRpb25zLnZTcGFjaW5nICsgKG9wdGlvbnMuY2VsbEhlaWdodCAvIDIpKTtcblx0fTtcblxuXG5cdGZ1bmN0aW9uIGdhdGVCb3hTVkcoZ2F0ZVgsIGdhdGVZLCBnYXRlTmFtZSwgZ2F0ZUxhYmVsLCBzZWxlY3RlZCkge1xuXG5cdFx0dmFyIGdhdGVXaWR0aCA9IG9wdGlvbnMuY2VsbFdpZHRoO1xuXHRcdHZhciBnYXRlSGVpZ2h0ID0gb3B0aW9ucy5jZWxsSGVpZ2h0O1xuXG5cdFx0dmFyIHJlcyA9IFwiXCI7XG5cblx0XHRyZXMgKz0gXCI8cmVjdCBjbGFzcz1cXFwicWMtZ2F0ZS1ib3hcXFwiIHg9XFxcIlwiICsgZ2F0ZVggKyBcIlxcXCIgeT1cXFwiXCIgKyBnYXRlWSArIFwiXFxcIiB3aWR0aD1cXFwiXCIgKyBnYXRlV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIGdhdGVIZWlnaHQgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy5nYXRlTGluZUNvbG9yKSArIFwiXFxcIiBmaWxsPVxcXCJ3aGl0ZVxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXHRcdGlmKGdhdGVMYWJlbCkge1xuXHRcdFx0cmVzICs9IFwiPHRleHQgY2xhc3M9XFxcInFjLWdhdGUtbGFiZWxcXFwiIHg9XFxcIlwiICsgKGdhdGVYICsgKGdhdGVXaWR0aCAvIDIpKSArIFwiXFxcIiB5PVxcXCJcIiArIChnYXRlWSArIChnYXRlSGVpZ2h0IC8gMikpICsgXCJcXFwiIGRvbWluYW50LWJhc2VsaW5lPVxcXCJtaWRkbGVcXFwiIHRleHQtYW5jaG9yPVxcXCJtaWRkbGVcXFwiIGZpbGw9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLmdhdGVMaW5lQ29sb3IpICsgXCJcXFwiPlwiICsgZ2F0ZUxhYmVsICsgXCI8L3RleHQ+XCI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGdhdGVSZWN0U1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIGdhdGVMYWJlbCwgc2VsZWN0ZWQpIHtcblxuXHRcdHZhciBnYXRlV2lkdGggPSBvcHRpb25zLmNlbGxXaWR0aCAqIDI7XG5cdFx0dmFyIGdhdGVIZWlnaHQgPSBvcHRpb25zLmNlbGxIZWlnaHQ7XG5cblx0XHR2YXIgcmVzID0gXCJcIjtcblxuXHRcdHJlcyArPSBcIjxyZWN0IGNsYXNzPVxcXCJxYy1nYXRlLXJlY3RcXFwiIHg9XFxcIlwiICsgZ2F0ZVggKyBcIlxcXCIgeT1cXFwiXCIgKyBnYXRlWSArIFwiXFxcIiB3aWR0aD1cXFwiXCIgKyBnYXRlV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIGdhdGVIZWlnaHQgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy5nYXRlTGluZUNvbG9yKSArIFwiXFxcIiBmaWxsPVxcXCJ3aGl0ZVxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXHRcdGlmKGdhdGVMYWJlbCkge1xuXHRcdFx0cmVzICs9IFwiPHRleHQgY2xhc3M9XFxcInFjLWdhdGUtbGFiZWxcXFwiIHg9XFxcIlwiICsgKGdhdGVYICsgKGdhdGVXaWR0aCAvIDIpKSArIFwiXFxcIiB5PVxcXCJcIiArIChnYXRlWSArIChnYXRlSGVpZ2h0IC8gMikpICsgXCJcXFwiIGRvbWluYW50LWJhc2VsaW5lPVxcXCJtaWRkbGVcXFwiIHRleHQtYW5jaG9yPVxcXCJtaWRkbGVcXFwiPlwiICsgZ2F0ZUxhYmVsICsgXCI8L3RleHQ+XCI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGdhdGVDaXJjbGVTVkcoY2VsbFgsIGNlbGxZLCBnYXRlTmFtZSwgZ2F0ZUxhYmVsLCBzZWxlY3RlZCkge1xuXHRcdHZhciBjZW50ZXJYID0gY2VsbFggKyAob3B0aW9ucy5jZWxsV2lkdGggLyAyKTtcblx0XHR2YXIgY2VudGVyWSA9IGNlbGxZICsgKG9wdGlvbnMuY2VsbEhlaWdodCAvIDIpO1xuXG5cdFx0dmFyIGdhdGVXaWR0aCA9IG9wdGlvbnMuY2VsbFdpZHRoICogMC44O1xuXHRcdHZhciBnYXRlSGVpZ2h0ID0gb3B0aW9ucy5jZWxsSGVpZ2h0ICogMC44O1xuXHRcdHZhciBnYXRlWCA9IGNlbGxYICsgKChvcHRpb25zLmNlbGxXaWR0aCAtIGdhdGVXaWR0aCkgLyAyKTtcblx0XHR2YXIgZ2F0ZVkgPSBjZWxsWSArICgob3B0aW9ucy5jZWxsSGVpZ2h0IC0gZ2F0ZUhlaWdodCkgLyAyKTtcblxuXHRcdHZhciByZXMgPSBcIlwiO1xuXG5cdFx0cmVzICs9IFwiPGVsbGlwc2UgY2xhc3M9XFxcInFjLWdhdGUtbm90XFxcIiBjeD1cXFwiXCIgKyBjZW50ZXJYICsgXCJcXFwiIGN5PVxcXCJcIiArIGNlbnRlclkgKyBcIlxcXCIgcng9XFxcIlwiICsgKGdhdGVXaWR0aCAvIDIpICsgXCJcXFwiIHJ5PVxcXCJcIiArIChnYXRlSGVpZ2h0IC8gMikgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy5nYXRlTGluZUNvbG9yKSArIFwiXFxcIiBmaWxsPVxcXCJ3aGl0ZVxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXHRcdGlmKGdhdGVMYWJlbCkge1xuXHRcdFx0cmVzICs9IFwiPHRleHQgY2xhc3M9XFxcInFjLWdhdGUtbGFiZWxcXFwiIHg9XFxcIlwiICsgKGdhdGVYICsgKGdhdGVXaWR0aCAvIDIpKSArIFwiXFxcIiB5PVxcXCJcIiArIChnYXRlWSArIChnYXRlSGVpZ2h0IC8gMikpICsgXCJcXFwiIGRvbWluYW50LWJhc2VsaW5lPVxcXCJtaWRkbGVcXFwiIHRleHQtYW5jaG9yPVxcXCJtaWRkbGVcXFwiPlwiICsgZ2F0ZUxhYmVsICsgXCI8L3RleHQ+XCI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGdhdGVOb3RTVkcoY2VsbFgsIGNlbGxZLCBnYXRlTmFtZSwgc2VsZWN0ZWQpIHtcblx0XHR2YXIgY2VudGVyWCA9IGNlbGxYICsgKG9wdGlvbnMuY2VsbFdpZHRoIC8gMik7XG5cdFx0dmFyIGNlbnRlclkgPSBjZWxsWSArIChvcHRpb25zLmNlbGxIZWlnaHQgLyAyKTtcblxuXHRcdHZhciBnYXRlV2lkdGggPSBvcHRpb25zLmNlbGxXaWR0aCAqIDAuODtcblx0XHR2YXIgZ2F0ZUhlaWdodCA9IG9wdGlvbnMuY2VsbEhlaWdodCAqIDAuODtcblx0XHR2YXIgZ2F0ZVggPSBjZWxsWCArICgob3B0aW9ucy5jZWxsV2lkdGggLSBnYXRlV2lkdGgpIC8gMik7XG5cdFx0dmFyIGdhdGVZID0gY2VsbFkgKyAoKG9wdGlvbnMuY2VsbEhlaWdodCAtIGdhdGVIZWlnaHQpIC8gMik7XG5cblxuXHRcdHZhciByZXMgPSBcIlwiO1xuXG5cdFx0cmVzICs9IFwiPGVsbGlwc2UgY2xhc3M9XFxcInFjLWdhdGUtbm90XFxcIiBjeD1cXFwiXCIgKyBjZW50ZXJYICsgXCJcXFwiIGN5PVxcXCJcIiArIGNlbnRlclkgKyBcIlxcXCIgcng9XFxcIlwiICsgKGdhdGVXaWR0aCAvIDIpICsgXCJcXFwiIHJ5PVxcXCJcIiArIChnYXRlSGVpZ2h0IC8gMikgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy5nYXRlTGluZUNvbG9yKSArIFwiXFxcIiBmaWxsPVxcXCJ3aGl0ZVxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXHRcdHJlcyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy1nYXRlLW5vdC1saW5lXFxcIiB4MT1cXFwiXCIgKyBjZW50ZXJYICsgXCJcXFwiIHgyPVxcXCJcIiArIGNlbnRlclggKyBcIlxcXCIgeTE9XFxcIlwiICsgZ2F0ZVkgK1wiXFxcIiB5Mj1cXFwiXCIgKyAoZ2F0ZVkgKyBnYXRlSGVpZ2h0KSArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLmdhdGVMaW5lQ29sb3IpICsgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRyZXMgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtZ2F0ZS1ub3QtbGluZVxcXCIgeDE9XFxcIlwiICsgZ2F0ZVggKyBcIlxcXCIgeDI9XFxcIlwiICsgKGdhdGVYICsgZ2F0ZVdpZHRoKSArIFwiXFxcIiB5MT1cXFwiXCIgKyBjZW50ZXJZICtcIlxcXCIgeTI9XFxcIlwiICsgY2VudGVyWSArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLmdhdGVMaW5lQ29sb3IpICsgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblxuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBnYXRlR2F1Z2VTVkcoZ2F0ZVgsIGdhdGVZLCBnYXRlTmFtZSwgc2VsZWN0ZWQpIHtcblx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGg7XG5cdFx0dmFyIGdhdGVIZWlnaHQgPSBvcHRpb25zLmNlbGxIZWlnaHQ7XG5cdFx0dmFyIGNlbnRlclggPSBnYXRlWCArIChnYXRlV2lkdGggLyAyKTtcblx0XHR2YXIgY2VudGVyWSA9IGdhdGVZICsgKGdhdGVIZWlnaHQgLyAyKTtcblx0XHR2YXIgbW92ZWRvd24gPSBnYXRlSGVpZ2h0IC8gNTtcblxuXHRcdHZhciByZXMgPSBcIlwiO1xuXG5cdFx0cmVzICs9IFwiPHJlY3QgY2xhc3M9XFxcInFjLWdhdGUtYm94XFxcIiB4PVxcXCJcIiArIGdhdGVYICsgXCJcXFwiIHk9XFxcIlwiICsgZ2F0ZVkgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgZ2F0ZVdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBnYXRlSGVpZ2h0ICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvcikgKyBcIlxcXCIgZmlsbD1cXFwid2hpdGVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRyZXMgKz0gXCI8cGF0aCBjbGFzcz1cXFwiZ2MtZ2F0ZS1nYXVnZS1hcmNcXFwiIGQ9XFxcIlwiICsgZGVzY3JpYmVBcmMoY2VudGVyWCwgY2VudGVyWSArIG1vdmVkb3duLCBnYXRlV2lkdGggLyAyLjMsIDMwMCwgNjApICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvcikgKyBcIlxcXCIgZmlsbD1cXFwibm9uZVxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXHRcdHJlcyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy1nYXRlLWdhdWdlLXNjYWxlXFxcIiB4MT1cXFwiXCIgKyBjZW50ZXJYICsgXCJcXFwiIHgyPVxcXCJcIiArICgoZ2F0ZVggKyBnYXRlV2lkdGgpIC0gbW92ZWRvd24pICsgXCJcXFwiIHkxPVxcXCJcIiArIChjZW50ZXJZICsgbW92ZWRvd24pICsgXCJcXFwiIHkyPVxcXCJcIiArIChnYXRlWSArIG1vdmVkb3duKSArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLmdhdGVMaW5lQ29sb3IpICsgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblxuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBnYXRlWFNWRyhjZWxsWCwgY2VsbFksIGdhdGVOYW1lLCBzZWxlY3RlZCkge1xuXHRcdHZhciBnYXRlV2lkdGggPSBvcHRpb25zLmNlbGxXaWR0aCAqIDAuNDtcblx0XHR2YXIgZ2F0ZUhlaWdodCA9IG9wdGlvbnMuY2VsbEhlaWdodCAqIDAuNDtcblx0XHR2YXIgZ2F0ZVggPSBjZWxsWCArICgob3B0aW9ucy5jZWxsV2lkdGggLSBnYXRlV2lkdGgpIC8gMik7XG5cdFx0dmFyIGdhdGVZID0gY2VsbFkgKyAoKG9wdGlvbnMuY2VsbEhlaWdodCAtIGdhdGVIZWlnaHQpIC8gMik7XG5cblx0XHR2YXIgcmVzID0gXCJcIjtcblx0XHRyZXMgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtZ2F0ZS14XFxcIiB4MT1cXFwiXCIgKyBnYXRlWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyAoZ2F0ZVggKyBnYXRlV2lkdGgpICsgXCJcXFwiIHkxPVxcXCJcIiArIGdhdGVZICtcIlxcXCIgeTI9XFxcIlwiICsgKGdhdGVZICsgZ2F0ZUhlaWdodCkgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy5nYXRlTGluZUNvbG9yKSArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0cmVzICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLWdhdGUteFxcXCIgeDE9XFxcIlwiICsgZ2F0ZVggKyBcIlxcXCIgeDI9XFxcIlwiICsgKGdhdGVYICsgZ2F0ZVdpZHRoKSArIFwiXFxcIiB5MT1cXFwiXCIgKyAoZ2F0ZVkgKyBnYXRlSGVpZ2h0KSArXCJcXFwiIHkyPVxcXCJcIiArIGdhdGVZICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmdhdGVTZWxlY3RlZExpbmVDb2xvciA6IG9wdGlvbnMuZ2F0ZUxpbmVDb2xvcikgKyBcIlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBnYXRlRG90U1ZHKGNlbGxYLCBjZWxsWSwgZ2F0ZU5hbWUsIHNlbGVjdGVkKSB7XG5cdFx0dmFyIGdhdGVXaWR0aCA9IG9wdGlvbnMuY2VsbFdpZHRoO1xuXHRcdHZhciBnYXRlSGVpZ2h0ID0gb3B0aW9ucy5jZWxsSGVpZ2h0O1xuXHRcdHZhciBjZW50ZXJYID0gY2VsbFggKyAoZ2F0ZVdpZHRoIC8gMik7XG5cdFx0dmFyIGNlbnRlclkgPSBjZWxsWSArIChnYXRlSGVpZ2h0IC8gMik7XG5cblx0XHR2YXIgcmVzID0gXCJcIjtcblx0XHRyZXMgKz0gXCI8Y2lyY2xlIGNsYXNzPVxcXCJxYy1nYXRlLWRvdFxcXCIgY3g9XFxcIlwiICsgY2VudGVyWCArIFwiXFxcIiBjeT1cXFwiXCIgKyBjZW50ZXJZICsgXCJcXFwiIHI9XFxcIlwiICsgb3B0aW9ucy5kb3RSYWRpdXMgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy53aXJlQ29sb3IpICsgXCJcXFwiIGZpbGw9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLndpcmVDb2xvcikgKyBcIlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXHRcdHJldHVybiByZXM7XG5cdH1cblxuXHRmdW5jdGlvbiBnYXRlSW52ZXJ0ZWREb3RTVkcoY2VsbFgsIGNlbGxZLCBnYXRlTmFtZSwgc2VsZWN0ZWQpIHtcblx0XHR2YXIgZ2F0ZVdpZHRoID0gb3B0aW9ucy5jZWxsV2lkdGg7XG5cdFx0dmFyIGdhdGVIZWlnaHQgPSBvcHRpb25zLmNlbGxIZWlnaHQ7XG5cdFx0dmFyIGNlbnRlclggPSBjZWxsWCArIChnYXRlV2lkdGggLyAyKTtcblx0XHR2YXIgY2VudGVyWSA9IGNlbGxZICsgKGdhdGVIZWlnaHQgLyAyKTtcblxuXHRcdHZhciByZXMgPSBcIlwiO1xuXHRcdHJlcyArPSBcIjxjaXJjbGUgY2xhc3M9XFxcInFjLWdhdGUtbmRvdFxcXCIgY3g9XFxcIlwiICsgY2VudGVyWCArIFwiXFxcIiBjeT1cXFwiXCIgKyBjZW50ZXJZICsgXCJcXFwiIHI9XFxcIlwiICsgb3B0aW9ucy5kb3RSYWRpdXMgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIChzZWxlY3RlZCA/IG9wdGlvbnMuZ2F0ZVNlbGVjdGVkTGluZUNvbG9yIDogb3B0aW9ucy53aXJlQ29sb3IpICsgXCJcXFwiIGZpbGw9XFxcIndoaXRlXFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cdFx0cmV0dXJuIHJlcztcblx0fVxuXG5cdGZ1bmN0aW9uIGdhdGVTVkcoZ2F0ZVgsIGdhdGVZLCBnYXRlTmFtZSwgZ2F0ZUxhYmVsLCBjb25uZWN0b3IsIGRyYXdCb3gsIHNlbGVjdGVkKSB7XG5cdFx0dmFyIHJlcyA9IFwiXCI7XG5cblx0XHRpZihjb25uZWN0b3IgIT0gXCJib3hcIiAmJiBkcmF3Qm94KSB7XG5cdFx0XHRyZXMgKz0gZ2F0ZUJveFNWRyhnYXRlWCwgZ2F0ZVksIGdhdGVOYW1lLCBcIlwiLCBzZWxlY3RlZCk7XG5cdFx0fVxuXG5cdFx0c3dpdGNoKGNvbm5lY3Rvcikge1xuXHRcdFx0Y2FzZSBcImJveFwiOiByZXMgKz0gZ2F0ZUJveFNWRyhnYXRlWCwgZ2F0ZVksIGdhdGVOYW1lLCBnYXRlTGFiZWwsIHNlbGVjdGVkKTsgYnJlYWs7XG5cdFx0XHRjYXNlIFwicmVjdFwiOiByZXMgKz0gZ2F0ZVJlY3RTVkcoZ2F0ZVgsIGdhdGVZLCBnYXRlTmFtZSwgZ2F0ZUxhYmVsLCBzZWxlY3RlZCk7IGJyZWFrO1xuXHRcdFx0Y2FzZSBcImNpcmNsZVwiOiByZXMgKz0gZ2F0ZUNpcmNsZVNWRyhnYXRlWCwgZ2F0ZVksIGdhdGVOYW1lLCBnYXRlTGFiZWwsIHNlbGVjdGVkKTsgYnJlYWs7XG5cdFx0XHRjYXNlIFwibm90XCI6IHJlcyArPSBnYXRlTm90U1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIHNlbGVjdGVkKTsgYnJlYWs7XG5cdFx0XHRjYXNlIFwieFwiOiByZXMgKz0gZ2F0ZVhTVkcoZ2F0ZVgsIGdhdGVZLCBnYXRlTmFtZSwgc2VsZWN0ZWQpOyBicmVhaztcblx0XHRcdGNhc2UgXCJkb3RcIjogcmVzICs9IGdhdGVEb3RTVkcoZ2F0ZVgsIGdhdGVZLCBnYXRlTmFtZSwgc2VsZWN0ZWQpOyBicmVhaztcblx0XHRcdGNhc2UgXCJuZG90XCI6IHJlcyArPSBnYXRlSW52ZXJ0ZWREb3RTVkcoZ2F0ZVgsIGdhdGVZLCBnYXRlTmFtZSwgc2VsZWN0ZWQpOyBicmVhaztcblx0XHRcdGNhc2UgXCJnYXVnZVwiOiByZXMgKz0gZ2F0ZUdhdWdlU1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZU5hbWUsIHNlbGVjdGVkKTsgYnJlYWs7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlcztcblx0fVxuXG5cblx0ZnVuY3Rpb24gZHJhd0dhdGUoZ2F0ZSwgY29sSW5kZXgsIHJvd0luZGV4KSB7XG5cdFx0dmFyIGRpbmZvID0gc2VsZi5iYXNpY0dhdGVzW2dhdGUubmFtZV0gPyBzZWxmLmJhc2ljR2F0ZXNbZ2F0ZS5uYW1lXS5kcmF3aW5nSW5mbyA6IG51bGw7XG5cdFx0aWYoIWRpbmZvKSB7XG5cdFx0XHRkaW5mbyA9IHNlbGYuY3VzdG9tR2F0ZXNbZ2F0ZS5uYW1lXSA/IHNlbGYuY3VzdG9tR2F0ZXNbZ2F0ZS5uYW1lXS5kcmF3aW5nSW5mbyA6IG51bGw7XG5cdFx0fVxuXG5cdFx0dmFyIGJsYWNrYm94ID0gZmFsc2U7XG5cdFx0dmFyIHNlbGVjdGVkID0gb3B0aW9ucyAmJiBvcHRpb25zLnNlbGVjdGlvbiAmJiBvcHRpb25zLnNlbGVjdGlvbi5pbmRleE9mKGdhdGUuaWQpID49IDA7XG5cdFx0aWYoIWRpbmZvKSB7XG5cdFx0XHRpZihnYXRlLndpcmVzLmxlbmd0aCA9PSAxKSB7XG5cdFx0XHRcdGRpbmZvID0geyBjb25uZWN0b3JzOiBbXCJib3hcIl0gfTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRpbmZvID0geyBjb25uZWN0b3JzOiBbXSB9O1xuXHRcdFx0XHRibGFja2JveCA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHdoaWxlKGRpbmZvLmNvbm5lY3RvcnMubGVuZ3RoIDwgZ2F0ZS53aXJlcy5sZW5ndGgpIHtcblx0XHRcdGRpbmZvLmNvbm5lY3RvcnMucHVzaChcImJveFwiKTtcblx0XHR9XG5cblx0XHR2YXIgdG9wV2lyZSA9IE1hdGgubWluLmFwcGx5KG51bGwsIGdhdGUud2lyZXMpO1xuXHRcdHZhciBib3R0b21XaXJlID0gTWF0aC5tYXguYXBwbHkobnVsbCwgZ2F0ZS53aXJlcyk7XG5cdFx0dmFyIGNMaW5rVG9wWSA9IGNXaXJlWShib3R0b21XaXJlKTtcblxuXHRcdHZhciBzdmcgPSBcIlwiO1xuXHRcdHN2ZyArPSBcIjxnIGNsYXNzPVxcXCJxYy1nYXRlLWdyb3VwXFxcIiBkYXRhLWlkPVxcXCJcIiArIGdhdGUuaWQgKyBcIlxcXCIgZGF0YS1nYXRlPVxcXCJcIiArIGdhdGUubmFtZSArIFwiXFxcIj5cIjtcblx0XHRpZihibGFja2JveCkge1xuXHRcdFx0dmFyIGdhdGVYID0gZ2V0Q2VsbFgoY29sSW5kZXgpIC0gb3B0aW9ucy5ibGFja2JveFBhZGRpbmdYO1xuXHRcdFx0dmFyIGdhdGVZID0gcUdhdGVZKHRvcFdpcmUpIC0gb3B0aW9ucy5ibGFja2JveFBhZGRpbmdZO1xuXHRcdFx0dmFyIGdhdGVXaWR0aCA9IG9wdGlvbnMuY2VsbFdpZHRoICsgKDIgKiBvcHRpb25zLmJsYWNrYm94UGFkZGluZ1gpO1xuXHRcdFx0dmFyIGdhdGVIZWlnaHQgPSAoKHFHYXRlWShib3R0b21XaXJlKSArIG9wdGlvbnMuY2VsbEhlaWdodCkgLSBnYXRlWSkgKyBvcHRpb25zLmJsYWNrYm94UGFkZGluZ1k7XG5cblx0XHRcdHZhciBjZW50ZXJYID0gZ2F0ZVggKyAoZ2F0ZVdpZHRoIC8gMik7XG5cblx0XHRcdGNMaW5rVG9wWSA9IGdhdGVZICsgZ2F0ZUhlaWdodDtcblxuXHRcdFx0c3ZnICs9IFwiPHRleHQgY2xhc3M9XFxcInFjLWJsYWNrYm94LWxhYmVsXFxcIiB4PVxcXCJcIiArIGNlbnRlclggKyBcIlxcXCIgeT1cXFwiXCIgKyAoZ2F0ZVkgLSBvcHRpb25zLndpcmVUZXh0SGVpZ2h0IC0gKG9wdGlvbnMuYmxhY2tib3hQYWRkaW5nWSAqIDIpKSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwiaGFuZ2luZ1xcXCIgdGV4dC1hbmNob3I9XFxcIm1pZGRsZVxcXCIgZm9udC1zaXplPVxcXCI3NSVcXFwiPlwiICsgKGRpbmZvLmxhYmVsIHx8IGdhdGUubmFtZSkgKyBcIjwvdGV4dD5cIjtcblx0XHRcdHN2ZyArPSBcIjxyZWN0IGNsYXNzPVxcXCJxYy1nYXRlLWJsYWNrYm94XFxcIiB4PVxcXCJcIiArIGdhdGVYICsgXCJcXFwiIHk9XFxcIlwiICsgZ2F0ZVkgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgZ2F0ZVdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBnYXRlSGVpZ2h0ICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmJsYWNrYm94U2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLmJsYWNrYm94TGluZUNvbG9yKSArIFwiXFxcIiBmaWxsPVxcXCJ0cmFuc3BhcmVudFxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXHRcdH1cblxuXHRcdGlmKHNlbGVjdGVkKSB7XG5cdFx0XHR2YXIgZ2F0ZVggPSBnZXRDZWxsWChjb2xJbmRleCkgLSBvcHRpb25zLnNlbGVjdGlvblBhZGRpbmdYO1xuXHRcdFx0dmFyIGdhdGVZID0gcUdhdGVZKHRvcFdpcmUpIC0gb3B0aW9ucy5zZWxlY3Rpb25QYWRkaW5nWTtcblx0XHRcdHZhciBnYXRlV2lkdGggPSBvcHRpb25zLmNlbGxXaWR0aCArICgyICogb3B0aW9ucy5zZWxlY3Rpb25QYWRkaW5nWCk7XG5cdFx0XHR2YXIgZ2F0ZUhlaWdodCA9ICgocUdhdGVZKGJvdHRvbVdpcmUpICsgb3B0aW9ucy5jZWxsSGVpZ2h0KSAtIGdhdGVZKSArIG9wdGlvbnMuc2VsZWN0aW9uUGFkZGluZ1k7XG5cblx0XHRcdHZhciBjZW50ZXJYID0gZ2F0ZVggKyAoZ2F0ZVdpZHRoIC8gMik7XG5cblx0XHRcdGNMaW5rVG9wWSA9IGdhdGVZICsgZ2F0ZUhlaWdodDtcblxuXHRcdFx0c3ZnICs9IFwiPHJlY3QgY2xhc3M9XFxcInFjLWdhdGUtc2VsZWN0aW9uXFxcIiB4PVxcXCJcIiArIGdhdGVYICsgXCJcXFwiIHk9XFxcIlwiICsgZ2F0ZVkgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgZ2F0ZVdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBnYXRlSGVpZ2h0ICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyBvcHRpb25zLnNlbGVjdGlvbkxpbmVDb2xvciArIFwiXFxcIiBmaWxsPVxcXCJ0cmFuc3BhcmVudFxcXCIgc3Ryb2tlLWRhc2hhcnJheT1cXFwiNFxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXHRcdH1cblxuXHRcdC8vIGxpbmtcblx0XHRpZih0b3BXaXJlICE9IGJvdHRvbVdpcmUgJiYgIWJsYWNrYm94KSB7XG5cdFx0XHR2YXIgbGlua1ggPSBnZXRDZWxsWChjb2xJbmRleCkgKyAob3B0aW9ucy5jZWxsV2lkdGggLyAyKTtcblx0XHRcdHZhciBsaW5rWTEgPSBnZXRDZWxsWSh0b3BXaXJlKSArIChvcHRpb25zLmNlbGxIZWlnaHQgLyAyKTtcblx0XHRcdHZhciBsaW5rWTIgPSBnZXRDZWxsWShib3R0b21XaXJlKSArIChvcHRpb25zLmNlbGxIZWlnaHQgLyAyKTtcblx0XHRcdHN2ZyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy1nYXRlLWxpbmtcXFwiIHgxPVxcXCJcIiArIGxpbmtYICsgXCJcXFwiIHgyPVxcXCJcIiArIGxpbmtYICsgXCJcXFwiIHkxPVxcXCJcIiArIGxpbmtZMSArXCJcXFwiIHkyPVxcXCJcIiArIGxpbmtZMiArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5nYXRlU2VsZWN0ZWRMaW5lQ29sb3IgOiBvcHRpb25zLndpcmVDb2xvcikgKyBcIlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXHRcdH1cblxuXHRcdC8vIGNvbm5lY3RvcnNcblx0XHR2YXIgbWF4V2lyZSA9IE1hdGgubWF4LmFwcGx5KG51bGwsIGdhdGUud2lyZXMpO1xuXHRcdGdhdGUud2lyZXMubWFwKGZ1bmN0aW9uKHdpcmUsIGNvbm5lY3Rvcikge1xuXG5cdFx0XHRzd2l0Y2goZGluZm8uY29ubmVjdG9yc1tjb25uZWN0b3JdKSB7XG5cdFx0XHRcdGNhc2UgXCJib3hcIjoge1xuXHRcdFx0XHRcdHZhciBnYXRlWCA9IGdldENlbGxYKGNvbEluZGV4KTtcblx0XHRcdFx0XHR2YXIgZ2F0ZVkgPSBnZXRDZWxsWSh3aXJlKTtcblxuXHRcdFx0XHRcdHN2ZyA9IHN2ZyArIGdhdGVCb3hTVkcoZ2F0ZVgsIGdhdGVZLCBnYXRlLm5hbWUsIChibGFja2JveCA/IHF1Yml0TGV0dGVyKGNvbm5lY3RvciwgbnVtUm93cykgOiAoZGluZm8ubGFiZWwgfHwgZ2F0ZS5uYW1lKSksIHNlbGVjdGVkKTtcblxuXHRcdFx0XHRcdGlmKCFibGFja2JveCAmJiB3aXJlID09IGJvdHRvbVdpcmUpIHtcblx0XHRcdFx0XHRcdGNMaW5rVG9wWSA9IGdhdGVZICsgb3B0aW9ucy5jZWxsSGVpZ2h0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTsgYnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcImNpcmNsZVwiOiB7XG5cdFx0XHRcdFx0dmFyIGdhdGVYID0gZ2V0Q2VsbFgoY29sSW5kZXgpO1xuXHRcdFx0XHRcdHZhciBnYXRlWSA9IGdldENlbGxZKHdpcmUpO1xuXG5cdFx0XHRcdFx0c3ZnID0gc3ZnICsgZ2F0ZUNpcmNsZVNWRyhnYXRlWCwgZ2F0ZVksIGdhdGUubmFtZSwgKGJsYWNrYm94ID8gcXViaXRMZXR0ZXIoY29ubmVjdG9yLCBudW1Sb3dzKSA6IChkaW5mby5sYWJlbCB8fCBnYXRlLm5hbWUpKSwgc2VsZWN0ZWQpO1xuXG5cdFx0XHRcdFx0aWYoIWJsYWNrYm94ICYmIHdpcmUgPT0gYm90dG9tV2lyZSkge1xuXHRcdFx0XHRcdFx0dmFyIGdhdGVIZWlnaHQgPSAob3B0aW9ucy5jZWxsSGVpZ2h0ICogMC44KTtcblx0XHRcdFx0XHRcdGNMaW5rVG9wWSA9IGdhdGVZICsgZ2F0ZUhlaWdodCArICgob3B0aW9ucy5jZWxsSGVpZ2h0IC0gZ2F0ZUhlaWdodCkgLyAyKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07IGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJub3RcIjoge1xuXHRcdFx0XHRcdHZhciBjZWxsWCA9IGdldENlbGxYKGNvbEluZGV4KTtcblx0XHRcdFx0XHR2YXIgY2VsbFkgPSBnZXRDZWxsWSh3aXJlKTtcblxuXHRcdFx0XHRcdHN2ZyA9IHN2ZyArIGdhdGVOb3RTVkcoY2VsbFgsIGNlbGxZLCBnYXRlLm5hbWUsIHNlbGVjdGVkKTtcblxuXHRcdFx0XHRcdGlmKCFibGFja2JveCAmJiB3aXJlID09IGJvdHRvbVdpcmUpIHtcblx0XHRcdFx0XHRcdHZhciBnYXRlSGVpZ2h0ID0gKG9wdGlvbnMuY2VsbEhlaWdodCAqIDAuOCk7XG5cdFx0XHRcdFx0XHRjTGlua1RvcFkgPSBjZWxsWSArIGdhdGVIZWlnaHQgKyAoKG9wdGlvbnMuY2VsbEhlaWdodCAtIGdhdGVIZWlnaHQpIC8gMik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9OyBicmVhaztcblxuXHRcdFx0XHRjYXNlIFwieFwiOiB7XG5cdFx0XHRcdFx0dmFyIGNlbGxYID0gZ2V0Q2VsbFgoY29sSW5kZXgpO1xuXHRcdFx0XHRcdHZhciBjZWxsWSA9IGdldENlbGxZKHdpcmUpO1xuXG5cdFx0XHRcdFx0c3ZnID0gc3ZnICsgZ2F0ZVhTVkcoY2VsbFgsIGNlbGxZLCBnYXRlLm5hbWUsIHNlbGVjdGVkKTtcblxuXHRcdFx0XHRcdGlmKCFibGFja2JveCAmJiB3aXJlID09IGJvdHRvbVdpcmUpIHtcblx0XHRcdFx0XHRcdGNMaW5rVG9wWSA9IHFXaXJlWShib3R0b21XaXJlKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0fTsgYnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcImRvdFwiOiB7XG5cdFx0XHRcdFx0dmFyIGNlbGxYID0gZ2V0Q2VsbFgoY29sSW5kZXgpO1xuXHRcdFx0XHRcdHZhciBjZWxsWSA9IGdldENlbGxZKHdpcmUpO1xuXG5cdFx0XHRcdFx0c3ZnID0gc3ZnICsgZ2F0ZURvdFNWRyhjZWxsWCwgY2VsbFksIGdhdGUubmFtZSwgc2VsZWN0ZWQpO1xuXG5cdFx0XHRcdFx0aWYoIWJsYWNrYm94ICYmIHdpcmUgPT0gYm90dG9tV2lyZSkge1xuXHRcdFx0XHRcdFx0Y0xpbmtUb3BZID0gcVdpcmVZKGJvdHRvbVdpcmUpICsgb3B0aW9ucy5kb3RSYWRpdXM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9OyBicmVhaztcblxuXHRcdFx0XHRjYXNlIFwibmRvdFwiOiB7XG5cdFx0XHRcdFx0dmFyIGNlbGxYID0gZ2V0Q2VsbFgoY29sSW5kZXgpO1xuXHRcdFx0XHRcdHZhciBjZWxsWSA9IGdldENlbGxZKHdpcmUpO1xuXG5cdFx0XHRcdFx0c3ZnID0gc3ZnICsgZ2F0ZUludmVydGVkRG90U1ZHKGNlbGxYLCBjZWxsWSwgZ2F0ZS5uYW1lLCBzZWxlY3RlZCk7XG5cblx0XHRcdFx0XHRpZighYmxhY2tib3ggJiYgd2lyZSA9PSBib3R0b21XaXJlKSB7XG5cdFx0XHRcdFx0XHRjTGlua1RvcFkgPSBxV2lyZVkoYm90dG9tV2lyZSkgKyBvcHRpb25zLmRvdFJhZGl1cztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07IGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJnYXVnZVwiOiB7XG5cdFx0XHRcdFx0dmFyIGdhdGVYID0gZ2V0Q2VsbFgoY29sSW5kZXgpO1xuXHRcdFx0XHRcdHZhciBnYXRlWSA9IGdldENlbGxZKHdpcmUpO1xuXG5cdFx0XHRcdFx0c3ZnID0gc3ZnICsgZ2F0ZUdhdWdlU1ZHKGdhdGVYLCBnYXRlWSwgZ2F0ZS5uYW1lLCBzZWxlY3RlZCk7XG5cblx0XHRcdFx0XHRpZighYmxhY2tib3ggJiYgd2lyZSA9PSBib3R0b21XaXJlKSB7XG5cdFx0XHRcdFx0XHRjTGlua1RvcFkgPSBnYXRlWSArIG9wdGlvbnMuY2VsbEhlaWdodDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07IGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBwYXJhbXNcblx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zICYmIHdpcmUgPT0gbWF4V2lyZSkge1xuXHRcdFx0XHR2YXIgZ2F0ZVggPSBnZXRDZWxsWChjb2xJbmRleCk7XG5cdFx0XHRcdHZhciBnYXRlWSA9IGdldENlbGxZKHdpcmUpO1xuXHRcdFx0XHR2YXIgY2VudGVyWCA9IGdhdGVYICsgKG9wdGlvbnMuY2VsbFdpZHRoIC8gMik7XG5cblx0XHRcdFx0dmFyIHBhcmFtc1N0ciA9IFwiXCI7XG5cdFx0XHRcdHZhciBwYXJhbXNDb3VudCA9IDA7XG5cdFx0XHRcdGZvcih2YXIgcGFyYW1OYW1lIGluIGdhdGUub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRpZihwYXJhbXNTdHIpIHtcblx0XHRcdFx0XHRcdHBhcmFtc1N0ciArPSBcIiwgXCI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIHBhcmFtVmFsID0gZ2F0ZS5vcHRpb25zLnBhcmFtc1twYXJhbU5hbWVdO1xuXHRcdFx0XHRcdGlmKHR5cGVvZiBwYXJhbVZhbCA9PSBcInN0cmluZ1wiICYmIHBhcmFtVmFsLm1hdGNoKC9eW1xcK1xcLV0/XFxkKlxcLj9cXGQrKD86W0VlXVtcXCtcXC1dP1xcZCspPyQvKSkge1xuXHRcdFx0XHRcdFx0cGFyYW1WYWwgPSBwYXJzZUZsb2F0KHBhcmFtVmFsKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZih0eXBlb2YgcGFyYW1WYWwgPT0gXCJudW1iZXJcIikge1xuXHRcdFx0XHRcdFx0cGFyYW1WYWwgPSBtYXRoLnJvdW5kKHBhcmFtVmFsLCAzKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRwYXJhbXNTdHIgKz0gcGFyYW1WYWw7XG5cdFx0XHRcdFx0cGFyYW1zQ291bnQrKztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKHBhcmFtc1N0ci5sZW5ndGggPiAyNikge1xuXHRcdFx0XHRcdHBhcmFtc1N0ciA9IFwiKFwiICsgcGFyYW1zQ291bnQgKyBcIiBwYXJhbXMpXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3ZnICs9IFwiPHRleHQgY2xhc3M9XFxcInFjLWdhdGUtcGFyYW1zXFxcIiB4PVxcXCJcIiArIGNlbnRlclggKyBcIlxcXCIgeT1cXFwiXCIgKyAoZ2F0ZVkgKyBvcHRpb25zLmNlbGxIZWlnaHQgKyBvcHRpb25zLnBhcmFtVGV4dEhlaWdodCkgKyBcIlxcXCIgZG9taW5hbnQtYmFzZWxpbmU9XFxcImhhbmdpbmdcXFwiIHRleHQtYW5jaG9yPVxcXCJtaWRkbGVcXFwiIGZvbnQtc2l6ZT1cXFwiNzUlXFxcIj5cIiArIHBhcmFtc1N0ciArIFwiPC90ZXh0PlwiO1xuXHRcdFx0fVxuXG5cdFx0fSk7XG5cblx0XHQvLyBtZWFzdXJlXG5cdFx0aWYoZ2F0ZS5uYW1lID09IFwibWVhc3VyZVwiICYmIGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY3JlZyAmJiBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lKSB7XG5cdFx0XHR2YXIgbGlua1ggPSBnZXRDZWxsWChjb2xJbmRleCkgKyAob3B0aW9ucy5jZWxsV2lkdGggLyAyKTtcblx0XHRcdHZhciBsaW5rWTEgPSBjTGlua1RvcFk7XG5cdFx0XHR2YXIgbGlua1kyID0gY1dpcmVZKGdhdGUub3B0aW9ucy5jcmVnLm5hbWUpO1xuXG5cdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtZ2F0ZS1saW5rLWNcXFwiIHgxPVxcXCJcIiArIGxpbmtYICsgXCJcXFwiIHgyPVxcXCJcIiArIGxpbmtYICsgXCJcXFwiIHkxPVxcXCJcIiArIGxpbmtZMSArXCJcXFwiIHkyPVxcXCJcIiArIGxpbmtZMiArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5jV2lyZVNlbGVjdGVkQ29sb3IgOiBvcHRpb25zLmNXaXJlQ29sb3IpICsgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblxuXHRcdFx0c3ZnICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLWdhdGUtbGluay1jXFxcIiB4Mj1cXFwiXCIgKyBsaW5rWCArIFwiXFxcIiB4MT1cXFwiXCIgKyAobGlua1ggLSAob3B0aW9ucy5jQXJyb3dTaXplIC8gMikpICsgXCJcXFwiIHkxPVxcXCJcIiArIChsaW5rWTIgLSBvcHRpb25zLmNBcnJvd1NpemUpICtcIlxcXCIgeTI9XFxcIlwiICsgbGlua1kyICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmNXaXJlU2VsZWN0ZWRDb2xvciA6IG9wdGlvbnMuY1dpcmVDb2xvcikgKyBcIlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXHRcdFx0c3ZnICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLWdhdGUtbGluay1jXFxcIiB4Mj1cXFwiXCIgKyBsaW5rWCArIFwiXFxcIiB4MT1cXFwiXCIgKyAobGlua1ggKyAob3B0aW9ucy5jQXJyb3dTaXplIC8gMikpICsgXCJcXFwiIHkxPVxcXCJcIiArIChsaW5rWTIgLSBvcHRpb25zLmNBcnJvd1NpemUpICtcIlxcXCIgeTI9XFxcIlwiICsgbGlua1kyICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmNXaXJlU2VsZWN0ZWRDb2xvciA6IG9wdGlvbnMuY1dpcmVDb2xvcikgKyBcIlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXG5cdFx0XHRzdmcgKz0gXCI8dGV4dCBjbGFzcz1cXFwicWMtd2lyZS1sYWJlbFxcXCIgeD1cXFwiXCIgKyBsaW5rWCArIFwiXFxcIiB5PVxcXCJcIiArIChsaW5rWTIgKyBvcHRpb25zLndpcmVUZXh0SGVpZ2h0KSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwiaGFuZ2luZ1xcXCIgdGV4dC1hbmNob3I9XFxcIm1pZGRsZVxcXCIgZm9udC1zaXplPVxcXCI3NSVcXFwiPlwiICsgZ2F0ZS5vcHRpb25zLmNyZWcuYml0ICsgXCI8L3RleHQ+XCI7XG5cdFx0fVxuXG5cdFx0Ly8gY29udHJvbGxlZCBieSBjbGFzc2ljIHJlZ2lzdGVyXG5cdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKSB7XG5cdFx0XHR2YXIgbGlua1ggPSBnZXRDZWxsWChjb2xJbmRleCkgKyAob3B0aW9ucy5jZWxsV2lkdGggLyAyKTtcblx0XHRcdHZhciBsaW5rWTEgPSBjTGlua1RvcFk7XG5cdFx0XHR2YXIgbGlua1kyID0gY1dpcmVZKGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyk7XG5cblx0XHRcdHN2ZyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy1nYXRlLWxpbmstY1xcXCIgeDE9XFxcIlwiICsgbGlua1ggKyBcIlxcXCIgeDI9XFxcIlwiICsgbGlua1ggKyBcIlxcXCIgeTE9XFxcIlwiICsgbGlua1kxICtcIlxcXCIgeTI9XFxcIlwiICsgbGlua1kyICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyAoc2VsZWN0ZWQgPyBvcHRpb25zLmNXaXJlU2VsZWN0ZWRDb2xvciA6IG9wdGlvbnMuY1dpcmVDb2xvcikgKyBcIlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXG5cdFx0XHRzdmcgKz0gXCI8Y2lyY2xlIGNsYXNzPVxcXCJxYy1nYXRlLWRvdC1jXFxcIiBjeD1cXFwiXCIgKyBsaW5rWCArIFwiXFxcIiBjeT1cXFwiXCIgKyBsaW5rWTIgKyBcIlxcXCIgcj1cXFwiXCIgKyBvcHRpb25zLmRvdFJhZGl1cyArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5jV2lyZVNlbGVjdGVkQ29sb3IgOiBvcHRpb25zLmNXaXJlQ29sb3IpICsgXCJcXFwiIGZpbGw9XFxcIlwiICsgKHNlbGVjdGVkID8gb3B0aW9ucy5jV2lyZVNlbGVjdGVkQ29sb3IgOiBvcHRpb25zLmNXaXJlQ29sb3IpICsgXCJcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblxuXHRcdFx0c3ZnICs9IFwiPHRleHQgY2xhc3M9XFxcInFjLXdpcmUtbGFiZWxcXFwiIHg9XFxcIlwiICsgbGlua1ggKyBcIlxcXCIgeT1cXFwiXCIgKyAobGlua1kyICsgb3B0aW9ucy53aXJlVGV4dEhlaWdodCkgKyBcIlxcXCIgZG9taW5hbnQtYmFzZWxpbmU9XFxcImhhbmdpbmdcXFwiIHRleHQtYW5jaG9yPVxcXCJtaWRkbGVcXFwiIGZvbnQtc2l6ZT1cXFwiNzUlXFxcIj49PSBcIiArIGdhdGUub3B0aW9ucy5jb25kaXRpb24udmFsdWUgKyBcIjwvdGV4dD5cIjtcblx0XHR9XG5cblx0XHRzdmcgKz0gXCI8L2c+XCI7XG5cblx0XHRyZXR1cm4gc3ZnO1xuXHR9XG5cblx0ZnVuY3Rpb24gZHJhd0dhdGVQbGFjZWhvbGRlcihjb2xJbmRleCwgd2lyZSkge1xuXHRcdHZhciBzdmcgPSBcIlwiO1xuXG5cdFx0dmFyIGdhdGVXaWR0aCA9IG9wdGlvbnMuY2VsbFdpZHRoICsgb3B0aW9ucy5oU3BhY2luZztcblx0XHR2YXIgZ2F0ZUhlaWdodCA9IG9wdGlvbnMuY2VsbEhlaWdodCArIG9wdGlvbnMudlNwYWNpbmc7XG5cdFx0dmFyIGdhdGVYID0gZ2V0Q2VsbFgoY29sSW5kZXgpIC0gb3B0aW9ucy5oU3BhY2luZztcblx0XHR2YXIgZ2F0ZVkgPSBnZXRDZWxsWSh3aXJlKSAtIG9wdGlvbnMudlNwYWNpbmc7XG5cblx0XHRpZih3aXJlID09IG51bVJvd3MpIHtcblx0XHRcdGdhdGVIZWlnaHQgPSBvcHRpb25zLnZTcGFjaW5nO1xuXHRcdH1cblxuXHRcdGlmKGNvbEluZGV4ID09IG51bUNvbHMpIHtcblx0XHRcdGdhdGVXaWR0aCA9IG9wdGlvbnMuaFNwYWNpbmc7XG5cdFx0fVxuXG5cdFx0c3ZnICs9IFwiPHJlY3QgY2xhc3M9XFxcInFjLWdhdGUtcGxhY2Vob2xkZXJcXFwiIGRhdGEtcm93PVxcXCJcIiArIHdpcmUgKyBcIlxcXCIgZGF0YS1jb2w9XFxcIlwiICsgY29sSW5kZXggKyBcIlxcXCIgeD1cXFwiXCIgKyBnYXRlWCArIFwiXFxcIiB5PVxcXCJcIiArIGdhdGVZICsgXCJcXFwiIHdpZHRoPVxcXCJcIiArIGdhdGVXaWR0aCArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgZ2F0ZUhlaWdodCArIFwiXFxcIiBzdHJva2U9XFxcIm5vbmVcXFwiIGZpbGw9XFxcInRyYW5zcGFyZW50XFxcIiBzdHJva2Utd2lkdGg9XFxcIjBcXFwiIC8+XCI7XG5cblx0XHRyZXR1cm4gc3ZnO1xuXHR9XG5cblx0ZnVuY3Rpb24gZHJhd0dhdGVIYW5kbGUoZ2F0ZSwgY29sSW5kZXgsIHdpcmUpIHtcblx0XHR2YXIgc3ZnID0gXCJcIjtcblxuXHRcdHZhciBnYXRlV2lkdGggPSBvcHRpb25zLmNlbGxXaWR0aDtcblx0XHR2YXIgZ2F0ZUhlaWdodCA9IG9wdGlvbnMuY2VsbEhlaWdodDtcblx0XHR2YXIgZ2F0ZVggPSBnZXRDZWxsWChjb2xJbmRleCk7XG5cdFx0dmFyIGdhdGVZID0gZ2V0Q2VsbFkod2lyZSk7XG5cblx0XHRzdmcgKz0gXCI8cmVjdCBjbGFzcz1cXFwicWMtZ2F0ZS1oYW5kbGVcXFwiIGRhdGEtaWQ9XFxcIlwiICsgZ2F0ZS5pZCArIFwiXFxcIiBkYXRhLWdhdGU9XFxcIlwiICsgZ2F0ZS5uYW1lICsgXCJcXFwiIGRhdGEtcm93PVxcXCJcIiArIHdpcmUgKyBcIlxcXCIgZGF0YS1jb2w9XFxcIlwiICsgY29sSW5kZXggKyBcIlxcXCIgeD1cXFwiXCIgKyBnYXRlWCArIFwiXFxcIiB5PVxcXCJcIiArIGdhdGVZICsgXCJcXFwiIHdpZHRoPVxcXCJcIiArIGdhdGVXaWR0aCArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgZ2F0ZUhlaWdodCArIFwiXFxcIiBzdHJva2U9XFxcIm5vbmVcXFwiIGZpbGw9XFxcInRyYW5zcGFyZW50XFxcIiBzdHJva2Utd2lkdGg9XFxcIjBcXFwiIC8+XCI7XG5cblx0XHRyZXR1cm4gc3ZnO1xuXHR9XG5cblx0ZnVuY3Rpb24gZHJhd0dhdGVDYW52YXMoY29sSW5kZXgsIHdpcmUsIGNsYXNzTmFtZSwgY2FudmFzSWQpIHtcblx0XHR2YXIgc3ZnID0gXCJcIjtcblxuXHRcdHZhciBnYXRlV2lkdGggPSBvcHRpb25zLmNlbGxXaWR0aDtcblx0XHR2YXIgZ2F0ZUhlaWdodCA9IG9wdGlvbnMuY2VsbEhlaWdodDtcblx0XHR2YXIgZ2F0ZVggPSBnZXRDZWxsWChjb2xJbmRleCk7XG5cdFx0dmFyIGdhdGVZID0gZ2V0Q2VsbFkod2lyZSk7XG5cblxuXHRcdHN2ZyArPSBcIjxnIGNsYXNzPVxcXCJcIiArIChjbGFzc05hbWUgfHwgXCJxYy1jYW52YXMtZ3JvdXBcIikgKyBcIlxcXCIgZGF0YS1yb3c9XFxcIlwiICsgd2lyZSArIFwiXFxcIj5cIjtcblx0XHRzdmcgKz0gXCI8cmVjdCBjbGFzcz1cXFwicWMtY2FudmFzLWJveFxcXCIgeD1cXFwiXCIgKyBnYXRlWCArIFwiXFxcIiB5PVxcXCJcIiArIGdhdGVZICsgXCJcXFwiIHdpZHRoPVxcXCJcIiArIGdhdGVXaWR0aCArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgZ2F0ZUhlaWdodCArIFwiXFxcIiBzdHJva2U9XFxcInRyYW5zcGFyZW50XFxcIiBmaWxsPVxcXCJ3aGl0ZVxcXCIgc3Ryb2tlLXdpZHRoPVxcXCIxXFxcIiAvPlwiO1xuXHRcdHN2ZyArPSBcIjxmb3JlaWduT2JqZWN0IGNsYXNzPVxcXCJxYy1jYW52YXMtb2JqZWN0XFxcIiB4PVxcXCJcIiArIGdhdGVYICsgXCJcXFwiIHk9XFxcIlwiICsgZ2F0ZVkgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgZ2F0ZVdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBnYXRlSGVpZ2h0ICsgXCJcXFwiPlwiO1xuXHRcdHN2ZyArPSBcIjxkaXYgc3R5bGU9XFxcInBvc2l0aW9uOnJlbGF0aXZlO1xcXCI+XCI7XG5cdFx0c3ZnICs9IFwiPGNhbnZhcyBpZD1cXFwiXCIgKyBjYW52YXNJZCArIFwiLVwiICsgd2lyZSArIFwiXFxcIiBjbGFzcz1cXFwiXCIgKyBjYW52YXNJZCArIFwiXFxcIiB3aWR0aD1cXFwiXCIgKyBnYXRlV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIGdhdGVIZWlnaHQgKyBcIlxcXCI+XCI7XG5cdFx0c3ZnICs9IFwiPC9jYW52YXM+XCI7XG5cdFx0c3ZnICs9IFwiPC9kaXY+XCI7XG5cdFx0c3ZnICs9IFwiPC9mb3JlaWduT2JqZWN0PlwiO1xuXHRcdHN2ZyArPSBcIjwvZz5cIjtcblxuXHRcdHJldHVybiBzdmc7XG5cdH1cblxuXG5cdGZ1bmN0aW9uIGVzY2FwZUh0bWwoc3RyKSB7XG5cdFx0cmV0dXJuIHN0clxuXHRcdFx0LnJlcGxhY2UoLyYvZywgXCImYW1wO1wiKVxuXHRcdFx0LnJlcGxhY2UoLzwvZywgXCImbHQ7XCIpXG5cdFx0XHQucmVwbGFjZSgvPi9nLCBcIiZndDtcIilcblx0XHRcdC5yZXBsYWNlKC9cIi9nLCBcIiZxdW90O1wiKVxuXHRcdFx0LnJlcGxhY2UoLycvZywgXCImIzAzOTtcIik7XG5cdH1cblxuXHQvLyBcblx0Ly8gLSBnYXRlR2FsbGVyeSBhbmQgY3VzdG9tR2F0ZUdhbGxlcnkgaXMgdXNlZCBmb3IgdG9vbGJveCBwYWxldHRlIGluIGRyYWcgJiBkcm9wIGVkaXRvci5cblx0Ly8gLSBnYXRlR2FsbGVyeVJhdyBpcyB1c2VkIHRvIGdlbmVyYXRlIGxpc3Qgb2YgYWxsIGdhdGUgc3ltYm9scyB0aGF0IGxvb2sgdGhlIHNhbWUgYXMgaW4gZGlhZ3JhbVxuXHQvLyAgIChnYXRlIHN5bWJvbCBvbmx5IHdpdGhvdXQgY29udHJvbGxpbmcgd2lyZSkuIFVzZWZ1bCB0byBnZW5lcmF0ZSB0cmFpbmluZyBzZXQgZm9yIGNpcmN1aXQgaW1hZ2UgcmVjb2duaXRpb24uXG5cdC8vXG5cdGlmKG9wdGlvbnMuZ2F0ZUdhbGxlcnkgfHwgb3B0aW9ucy5nYXRlR2FsbGVyeVJhdyB8fCBvcHRpb25zLmN1c3RvbUdhdGVHYWxsZXJ5KSB7XG5cdFx0dmFyIGdhdGVMaXN0ID0gW107XG5cblx0XHQvLyBiYXNpYyBnYXRlc1xuXHRcdGlmKG9wdGlvbnMuZ2F0ZUdhbGxlcnkgfHwgb3B0aW9ucy5nYXRlR2FsbGVyeVJhdykge1xuXG5cdFx0XHR2YXIgdW5pcSA9IFtdO1xuXHRcdFx0Zm9yKHZhciBnYXRlTmFtZSBpbiB0aGlzLmJhc2ljR2F0ZXMpIHtcblx0XHRcdFx0dmFyIGdhdGUgPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0XHR2YXIgZGluZm8gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdhdGUuZHJhd2luZ0luZm8gfHwgeyBjb25uZWN0b3JzOiBbXCJib3hcIl0gfSkpO1xuXHRcdFx0XHRpZihkaW5mby5jb25uZWN0b3JzKSB7XG5cdFx0XHRcdFx0dmFyIGdhdGVMYWJlbCA9IGRpbmZvLmxhYmVsIHx8IGdhdGVOYW1lO1xuXHRcdFx0XHRcdHZhciBjb25uZWN0b3IgPSBkaW5mby5jb25uZWN0b3JzID8gZGluZm8uY29ubmVjdG9yc1tkaW5mby5jb25uZWN0b3JzLmxlbmd0aCAtIDFdIDogXCJib3hcIjtcblxuXHRcdFx0XHRcdGlmKG9wdGlvbnMuZ2F0ZUdhbGxlcnkpIHtcblx0XHRcdFx0XHRcdC8vIERyYXcgXCJzd2FwXCIsIFwiY3UxXCIgYW5kIFwiY3pcIiBnYXRlcyBhcyBib3hcblx0XHRcdFx0XHRcdGlmKGNvbm5lY3RvciA9PSBcInhcIiB8fCBjb25uZWN0b3IgPT0gXCJkb3RcIikge1xuXHRcdFx0XHRcdFx0XHRjb25uZWN0b3IgPSBcImJveFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHZhciB1bmlxU3RyID0gZ2F0ZUxhYmVsICsgXCJ8XCIgKyBjb25uZWN0b3I7XG5cblx0XHRcdFx0XHRpZih1bmlxLmluZGV4T2YodW5pcVN0cikgPCAwICYmIGdhdGVOYW1lICE9IFwiY2N4XCIpIHtcblx0XHRcdFx0XHRcdHVuaXEucHVzaCh1bmlxU3RyKTtcblxuXHRcdFx0XHRcdFx0dmFyIHN2ZyA9IFwiXCI7XG5cdFx0XHRcdFx0XHRpZighb3B0aW9ucy5lbWJlZGRlZCkge1xuXHRcdFx0XHRcdFx0XHRzdmcgKz0gXCI8P3htbCB2ZXJzaW9uPVxcXCIxLjBcXFwiPz5cIjtcblx0XHRcdFx0XHRcdFx0c3ZnICs9XCI8IURPQ1RZUEUgc3ZnIFBVQkxJQyBcXFwiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU5cXFwiIFxcXCJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGRcXFwiPlwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0c3ZnICs9IFwiPHN2ZyBjbGFzcz1cXFwicWMtZ2F0ZS1nYWxsZXJ5LWl0ZW1cXFwiIGRhdGEtZ2F0ZT1cXFwiXCIgKyBlc2NhcGVIdG1sKGdhdGVOYW1lKSArIFwiXFxcIiBkYXRhLWNvbnRlbnQ9XFxcIlwiICsgZXNjYXBlSHRtbChnYXRlLmRlc2NyaXB0aW9uKSArIFwiXFxcIiB3aWR0aD1cXFwiXCIgKyBvcHRpb25zLmNlbGxXaWR0aCArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgb3B0aW9ucy5jZWxsSGVpZ2h0ICsgXCJcXFwiIHZlcnNpb249XFxcIjEuMVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj5cIjtcblx0XHRcdFx0XHRcdHN2ZyA9IHN2ZyArIGdhdGVTVkcoMCwgMCwgZ2F0ZU5hbWUsIGdhdGVMYWJlbCwgY29ubmVjdG9yLCAhIW9wdGlvbnMuZ2F0ZUdhbGxlcnksIGZhbHNlKTtcblx0XHRcdFx0XHRcdHN2ZyArPSBcIjwvc3ZnPlwiO1xuXG5cdFx0XHRcdFx0XHRpZihvcHRpb25zLmdhdGVHYWxsZXJ5KSB7XG5cdFx0XHRcdFx0XHRcdGdhdGVMaXN0LnB1c2goc3ZnKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGdhdGVMaXN0LnB1c2goeyBuYW1lOiBnYXRlTmFtZSwgc3ZnOiBzdmcgfSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIHNwZWNpYWwgaXRlbTogZG90XG5cdFx0XHR2YXIgZG90c3ZnID0gXCJcIjtcblx0XHRcdGlmKCFvcHRpb25zLmVtYmVkZGVkKSB7XG5cdFx0XHRcdGRvdHN2ZyArPSBcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCI/PlwiO1xuXHRcdFx0XHRkb3RzdmcgKz1cIjwhRE9DVFlQRSBzdmcgUFVCTElDIFxcXCItLy9XM0MvL0RURCBTVkcgMS4xLy9FTlxcXCIgXFxcImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZFxcXCI+XCI7XG5cdFx0XHR9XG5cdFx0XHRkb3RzdmcgKz0gXCI8c3ZnIGNsYXNzPVxcXCJxYy1nYXRlLWdhbGxlcnktaXRlbVxcXCIgZGF0YS1nYXRlPVxcXCJkb3RcXFwiIGRhdGEtY29udGVudD1cXFwiQ29udHJvbFxcXCIgd2lkdGg9XFxcIlwiICsgb3B0aW9ucy5jZWxsV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIG9wdGlvbnMuY2VsbEhlaWdodCArIFwiXFxcIiB2ZXJzaW9uPVxcXCIxLjFcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+XCI7XG5cdFx0XHRkb3RzdmcgPSBkb3RzdmcgKyBnYXRlU1ZHKDAsIDAsIFwiZG90XCIsIFwiZG90XCIsIFwiZG90XCIsICEhb3B0aW9ucy5nYXRlR2FsbGVyeSwgZmFsc2UpO1xuXHRcdFx0ZG90c3ZnICs9IFwiPC9zdmc+XCI7XG5cblx0XHRcdGlmKG9wdGlvbnMuZ2F0ZUdhbGxlcnkpIHtcblx0XHRcdFx0Z2F0ZUxpc3QucHVzaChkb3RzdmcpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Z2F0ZUxpc3QucHVzaCh7IG5hbWU6IFwiZG90XCIsIHN2ZzogZG90c3ZnIH0pO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBzcGVjaWFsIGl0ZW06IGludmVydGVkIGRvdFxuXHRcdFx0dmFyIG5kb3RzdmcgPSBcIlwiO1xuXHRcdFx0aWYoIW9wdGlvbnMuZW1iZWRkZWQpIHtcblx0XHRcdFx0bmRvdHN2ZyArPSBcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCI/PlwiO1xuXHRcdFx0XHRuZG90c3ZnICs9XCI8IURPQ1RZUEUgc3ZnIFBVQkxJQyBcXFwiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU5cXFwiIFxcXCJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGRcXFwiPlwiO1xuXHRcdFx0fVxuXHRcdFx0bmRvdHN2ZyArPSBcIjxzdmcgY2xhc3M9XFxcInFjLWdhdGUtZ2FsbGVyeS1pdGVtXFxcIiBkYXRhLWdhdGU9XFxcIm5kb3RcXFwiIGRhdGEtY29udGVudD1cXFwiQ29udHJvbFxcXCIgd2lkdGg9XFxcIlwiICsgb3B0aW9ucy5jZWxsV2lkdGggKyBcIlxcXCIgaGVpZ2h0PVxcXCJcIiArIG9wdGlvbnMuY2VsbEhlaWdodCArIFwiXFxcIiB2ZXJzaW9uPVxcXCIxLjFcXFwiIHhtbG5zPVxcXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1xcXCI+XCI7XG5cdFx0XHRuZG90c3ZnID0gbmRvdHN2ZyArIGdhdGVTVkcoMCwgMCwgXCJuZG90XCIsIFwibmRvdFwiLCBcIm5kb3RcIiwgISFvcHRpb25zLmdhdGVHYWxsZXJ5LCBmYWxzZSk7XG5cdFx0XHRuZG90c3ZnICs9IFwiPC9zdmc+XCI7XG5cblx0XHRcdGlmKG9wdGlvbnMuZ2F0ZUdhbGxlcnkpIHtcblx0XHRcdFx0Z2F0ZUxpc3QucHVzaChuZG90c3ZnKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGdhdGVMaXN0LnB1c2goeyBuYW1lOiBcImRvdFwiLCBzdmc6IG5kb3RzdmcgfSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gY3VzdG9tIGdhdGVzXG5cdFx0aWYob3B0aW9ucy5jdXN0b21HYXRlR2FsbGVyeSkge1xuXHRcdFx0Zm9yKHZhciBnYXRlTmFtZSBpbiB0aGlzLmN1c3RvbUdhdGVzKSB7XG5cdFx0XHRcdHZhciBzdmcgPSBcIlwiO1xuXHRcdFx0XHRpZighb3B0aW9ucy5lbWJlZGRlZCkge1xuXHRcdFx0XHRcdHN2ZyArPSBcIjw/eG1sIHZlcnNpb249XFxcIjEuMFxcXCI/PlwiO1xuXHRcdFx0XHRcdHN2ZyArPVwiPCFET0NUWVBFIHN2ZyBQVUJMSUMgXFxcIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOXFxcIiBcXFwiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkXFxcIj5cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRzdmcgKz0gXCI8c3ZnIGNsYXNzPVxcXCJxYy1jdXN0b20tZ2F0ZS1nYWxsZXJ5LWl0ZW1cXFwiIGRhdGEtZ2F0ZT1cXFwiXCIgKyBnYXRlTmFtZSArIFwiXFxcIiB3aWR0aD1cXFwiXCIgKyAob3B0aW9ucy5jZWxsV2lkdGggKiAyKSArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgb3B0aW9ucy5jZWxsSGVpZ2h0ICsgXCJcXFwiIHZlcnNpb249XFxcIjEuMVxcXCIgeG1sbnM9XFxcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXFxcIj5cIjtcblx0XHRcdFx0c3ZnID0gc3ZnICsgZ2F0ZVNWRygwLCAwLCBnYXRlTmFtZSwgZ2F0ZU5hbWUsIFwicmVjdFwiLCBmYWxzZSwgZmFsc2UpO1xuXHRcdFx0XHRzdmcgKz0gXCI8L3N2Zz5cIjtcblx0XHRcdFx0Z2F0ZUxpc3QucHVzaChzdmcpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBnYXRlTGlzdDtcblx0fSBlbHNlIHtcblx0XHR2YXIgc3ZnID0gXCJcIjtcblx0XHRpZighb3B0aW9ucy5lbWJlZGRlZCkge1xuXHRcdFx0c3ZnICs9IFwiPD94bWwgdmVyc2lvbj1cXFwiMS4wXFxcIj8+XCI7XG5cdFx0XHRzdmcgKz1cIjwhRE9DVFlQRSBzdmcgUFVCTElDIFxcXCItLy9XM0MvL0RURCBTVkcgMS4xLy9FTlxcXCIgXFxcImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZFxcXCI+XCI7XG5cdFx0fVxuXG5cdFx0c3ZnICs9IFwiPHN2ZyBjbGFzcz1cXFwicWMtY2lyY3VpdFxcXCIgd2lkdGg9XFxcIlwiICsgdG90YWxXaWR0aCArIFwiXFxcIiBoZWlnaHQ9XFxcIlwiICsgdG90YWxIZWlnaHQgKyBcIlxcXCIgdmVyc2lvbj1cXFwiMS4xXFxcIiB4bWxucz1cXFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcXFwiPlwiO1xuXG5cdFx0aWYob3B0aW9ucy5wbGFjZWhvbGRlcnMpIHtcblx0XHRcdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDw9IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0XHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPD0gdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0XHRcdHN2ZyArPSBkcmF3R2F0ZVBsYWNlaG9sZGVyKGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBRdWFudHVtIHdpcmVzXG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IG51bVJvd3M7IHdpcmUrKykge1xuXHRcdFx0dmFyIHdpcmVZID0gcVdpcmVZKHdpcmUpO1xuXHRcdFx0dmFyIGluaXRTeW1ib2wgPSBcIjBcIjtcblx0XHRcdGlmKG9wdGlvbnMuY3VzdG9tR2F0ZSkge1xuXHRcdFx0XHRpbml0U3ltYm9sID0gcXViaXRMZXR0ZXIod2lyZSwgbnVtUm93cyk7XG5cdFx0XHR9XG5cdFx0XHRzdmcgKz0gXCI8dGV4dCBjbGFzcz1cXFwicWMtd2lyZS1pbml0XFxcIiB4PVxcXCIwXFxcIiB5PVxcXCJcIiArIHdpcmVZICsgXCJcXFwiIGRvbWluYW50LWJhc2VsaW5lPVxcXCJtaWRkbGVcXFwiIHRleHQtYW5jaG9yPVxcXCJzdGFydFxcXCI+fFwiICsgaW5pdFN5bWJvbCArIFwiJiN4MjdFOTs8L3RleHQ+XCI7XG5cdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtd2lyZVxcXCIgeDE9XFxcIlwiICsgb3B0aW9ucy53aXJlTWFyZ2luICsgXCJcXFwiIHgyPVxcXCJcIiArIHRvdGFsV2lyZVdpZHRoICsgXCJcXFwiIHkxPVxcXCJcIiArIHdpcmVZICsgXCJcXFwiIHkyPVxcXCJcIiArIHdpcmVZICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyBvcHRpb25zLndpcmVDb2xvciArIFwiXFxcIiBzdHJva2Utd2lkdGg9XFxcIlwiICsgb3B0aW9ucy53aXJlV2lkdGggKyBcIlxcXCIgLz5cIjtcblx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy13aXJlLWxhYmVsXFxcIiB4PVxcXCJcIiArIG9wdGlvbnMud2lyZU1hcmdpbiArIFwiXFxcIiB5PVxcXCJcIiArICh3aXJlWSAtIChvcHRpb25zLndpcmVUZXh0SGVpZ2h0KjIpKSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwiaGFuZ2luZ1xcXCIgdGV4dC1hbmNob3I9XFxcInN0YXJ0XFxcIiBmb250LXNpemU9XFxcIjc1JVxcXCI+cVwiICsgd2lyZSArIFwiPC90ZXh0PlwiO1xuXHRcdH1cblxuXHRcdC8vIENsYXNzaWNhbCB3aXJlc1xuXHRcdGZvcih2YXIgY3JlZ05hbWUgaW4gdGhpcy5jcmVncykge1xuXHRcdFx0dmFyIHdpcmVZID0gY1dpcmVZKGNyZWdOYW1lKTtcblx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy13aXJlLWluaXRcXFwiIHg9XFxcIjBcXFwiIHk9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgZG9taW5hbnQtYmFzZWxpbmU9XFxcIm1pZGRsZVxcXCIgdGV4dC1hbmNob3I9XFxcInN0YXJ0XFxcIj4wPC90ZXh0PlwiO1xuXHRcdFx0c3ZnICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLXdpcmUtY1xcXCIgeDE9XFxcIlwiICsgb3B0aW9ucy53aXJlTWFyZ2luICsgXCJcXFwiIHgyPVxcXCJcIiArIHRvdGFsV2lyZVdpZHRoICsgXCJcXFwiIHkxPVxcXCJcIiArIHdpcmVZICsgXCJcXFwiIHkyPVxcXCJcIiArIHdpcmVZICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyBvcHRpb25zLmNXaXJlQ29sb3IgKyBcIlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCJcIiArIG9wdGlvbnMud2lyZVdpZHRoICsgXCJcXFwiIC8+XCI7XG5cdFx0XHRzdmcgKz0gXCI8dGV4dCBjbGFzcz1cXFwicWMtd2lyZS1sYWJlbFxcXCIgeD1cXFwiXCIgKyBvcHRpb25zLndpcmVNYXJnaW4gKyBcIlxcXCIgeT1cXFwiXCIgKyAod2lyZVkgLSAob3B0aW9ucy53aXJlVGV4dEhlaWdodCAqIDIpKSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwiaGFuZ2luZ1xcXCIgdGV4dC1hbmNob3I9XFxcInN0YXJ0XFxcIiBmb250LXNpemU9XFxcIjc1JVxcXCI+XCIgKyBjcmVnTmFtZSArIFwiPC90ZXh0PlwiO1xuXHRcdH1cblxuXHRcdC8vIEdhdGVzXG5cdFx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0XHRpZihnYXRlKSB7XG5cdFx0XHRcdFx0aWYoZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHRcdFx0c3ZnICs9IGRyYXdHYXRlKGdhdGUsIGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gR2F0ZSBoYW5kbGVzIChmb3IgZHJhZyAmIGRyb3AgZWRpdG9yKVxuXHRcdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHRcdHZhciBnYXRlID0gdGhpcy5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdFx0aWYoZ2F0ZSkge1xuXHRcdFx0XHRcdGlmKG9wdGlvbnMucGxhY2Vob2xkZXJzKSB7XG5cdFx0XHRcdFx0XHRzdmcgKz0gZHJhd0dhdGVIYW5kbGUoZ2F0ZSwgY29sdW1uLCB3aXJlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBQbGFjZSBmb3IgYmxvY2ggc3BoZXJlIG9uIGVhY2ggcXVhbnR1bSB3aXJlXG5cdFx0aWYob3B0aW9ucy5kcmF3QmxvY2hTcGhlcmVzKSB7XG5cdFx0XHR2YXIgY3VycmVudENvbCA9IHRvdGFsQ29scyAtIDE7XG5cdFx0XHRpZihvcHRpb25zLmRyYXdIeWJyaWQpIHtcblx0XHRcdFx0Y3VycmVudENvbCAtPSAyO1xuXHRcdFx0fVxuXHRcdFx0XG5cdFx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0XHRzdmcgKz0gZHJhd0dhdGVDYW52YXMoY3VycmVudENvbCwgd2lyZSwgXCJxYy1ibG9jaC1ncm91cFwiLCBcInFjLWJsb2NoLWNhbnZhc1wiKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBoeWJyaWQgcXVhbnR1bS1jbGFzc2ljYWxcblx0XHRpZihvcHRpb25zLmRyYXdIeWJyaWQpIHtcblx0XHRcdHZhciBjdXJyZW50Q29sID0gdG90YWxDb2xzIC0gMjtcblx0XHRcdC8vIGNvbm5lY3RvclxuXHRcdFx0dmFyIGNvbEluZGV4ID0gY3VycmVudENvbDtcblxuXHRcdFx0dmFyIGdhdGVYID0gZ2V0Q2VsbFgoY29sSW5kZXgpICsgb3B0aW9ucy5ibGFja2JveFBhZGRpbmdYO1xuXHRcdFx0dmFyIGdhdGVZID0gcUdhdGVZKDApICsgb3B0aW9ucy5ibGFja2JveFBhZGRpbmdZO1xuXHRcdFx0dmFyIGdhdGVXaWR0aCA9IG9wdGlvbnMuY2VsbFdpZHRoIC0gKDIgKiBvcHRpb25zLmJsYWNrYm94UGFkZGluZ1gpO1xuXHRcdFx0dmFyIGdhdGVIZWlnaHQgPSAoKHFHYXRlWShudW1Sb3dzICsgbnVtQ3JlZ3MgLSAxKSArIG9wdGlvbnMuY2VsbEhlaWdodCkgLSBnYXRlWSkgLSBvcHRpb25zLmJsYWNrYm94UGFkZGluZ1k7XG5cblx0XHRcdHZhciBjZW50ZXJYID0gZ2F0ZVggKyAoZ2F0ZVdpZHRoIC8gMik7XG5cdFx0XHR2YXIgY2VudGVyWSA9IGdhdGVZICsgKGdhdGVIZWlnaHQgLyAyKTtcblxuXHRcdFx0Y0xpbmtUb3BZID0gZ2F0ZVkgKyBnYXRlSGVpZ2h0O1xuXG5cdFx0XHQvLyBjb3N0XG5cdFx0XHRzdmcgKz0gXCI8cmVjdCBjbGFzcz1cXFwicWMtY29zdC1oXFxcIiB4PVxcXCJcIiArIGdhdGVYICsgXCJcXFwiIHk9XFxcIlwiICsgZ2F0ZVkgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgZ2F0ZVdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBnYXRlSGVpZ2h0ICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyBvcHRpb25zLmhXaXJlQ29sb3IgKyBcIlxcXCIgZmlsbD1cXFwid2hpdGVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgcng9XFxcIjhcXFwiIC8+XCI7XG5cdFx0XHRzdmcgKz0gXCI8dGV4dCBjbGFzcz1cXFwicWMtbGFiZWwtaFxcXCIgeD1cXFwiXCIgKyBjZW50ZXJYICsgXCJcXFwiIHk9XFxcIlwiICsgY2VudGVyWSArIFwiXFxcIiBkb21pbmFudC1iYXNlbGluZT1cXFwibWlkZGxlXFxcIiB0ZXh0LWFuY2hvcj1cXFwibWlkZGxlXFxcIiBmaWxsPVxcXCJcIiArIG9wdGlvbnMuaFdpcmVDb2xvciArIFwiXFxcIiB0cmFuc2Zvcm09XFxcInJvdGF0ZSgtOTAsIFwiICsgY2VudGVyWCArIFwiLCBcIiArIGNlbnRlclkgKyBcIilcXFwiPkNvc3Q8L3RleHQ+XCI7XG5cblxuXHRcdFx0dmFyIGdhdGUyWCA9IGdldENlbGxYKGNvbEluZGV4ICsgMSkgKyBvcHRpb25zLmJsYWNrYm94UGFkZGluZ1g7XG5cdFx0XHR2YXIgY2VudGVyMlggPSBnYXRlMlggKyAoZ2F0ZVdpZHRoIC8gMik7XG5cblx0XHRcdC8vIGFycm93XG5cdFx0XHRzdmcgKz0gXCI8bWFya2VyIGlkPVxcXCJxYy1hcnJvdy1oZWFkXFxcIiBvcmllbnQ9XFxcImF1dG9cXFwiIG1hcmtlcldpZHRoPVxcXCI4XFxcIiBtYXJrZXJIZWlnaHQ9XFxcIjEwXFxcIiByZWZYPVxcXCI4XFxcIiByZWZZPVxcXCI1XFxcIj48cGF0aCBkPVxcXCJNMCwwIFYxMCBMOCw1IFpcXFwiIGZpbGw9XFxcIlwiICsgb3B0aW9ucy5oV2lyZUNvbG9yICsgXCJcXFwiLz48L21hcmtlcj5cIjtcblx0XHRcdHN2ZyArPSBcIjxsaW5lIGNsYXNzPVxcXCJxYy1saW5rLWhcXFwiIHgxPVxcXCJcIiArIChnYXRlWCArIGdhdGVXaWR0aCkgKyBcIlxcXCIgeDI9XFxcIlwiICsgZ2F0ZTJYICsgXCJcXFwiIHkxPVxcXCJcIiArIGNlbnRlclkgK1wiXFxcIiB5Mj1cXFwiXCIgKyBjZW50ZXJZICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyBvcHRpb25zLmhXaXJlQ29sb3IgKyBcIlxcXCIgc3Ryb2tlLXdpZHRoPVxcXCJcIiArIG9wdGlvbnMud2lyZVdpZHRoICsgXCJcXFwiIG1hcmtlci1lbmQ9XFxcInVybCgjcWMtYXJyb3ctaGVhZClcXFwiIC8+XCI7XG5cblxuXHRcdFx0Ly8gb3B0aW1pemVyXG5cdFx0XHRzdmcgKz0gXCI8cmVjdCBjbGFzcz1cXFwicWMtb3B0aW1pemVyLWhcXFwiIHg9XFxcIlwiICsgZ2F0ZTJYICsgXCJcXFwiIHk9XFxcIlwiICsgZ2F0ZVkgKyBcIlxcXCIgd2lkdGg9XFxcIlwiICsgZ2F0ZVdpZHRoICsgXCJcXFwiIGhlaWdodD1cXFwiXCIgKyBnYXRlSGVpZ2h0ICsgXCJcXFwiIHN0cm9rZT1cXFwiXCIgKyBvcHRpb25zLmhXaXJlQ29sb3IgKyBcIlxcXCIgZmlsbD1cXFwid2hpdGVcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgcng9XFxcIjhcXFwiIC8+XCI7XG5cdFx0XHRzdmcgKz0gXCI8dGV4dCBjbGFzcz1cXFwicWMtbGFiZWwtaFxcXCIgeD1cXFwiXCIgKyBjZW50ZXIyWCArIFwiXFxcIiB5PVxcXCJcIiArIGNlbnRlclkgKyBcIlxcXCIgZG9taW5hbnQtYmFzZWxpbmU9XFxcIm1pZGRsZVxcXCIgdGV4dC1hbmNob3I9XFxcIm1pZGRsZVxcXCIgZmlsbD1cXFwiXCIgKyBvcHRpb25zLmhXaXJlQ29sb3IgKyBcIlxcXCIgdHJhbnNmb3JtPVxcXCJyb3RhdGUoLTkwLCBcIiArIGNlbnRlcjJYICsgXCIsIFwiICsgY2VudGVyWSArIFwiKVxcXCI+T3B0aW1pemVyPC90ZXh0PlwiO1xuXG5cdFx0XHQvLyBsaW5rXG5cdFx0XHR2YXIgbGlua1ggPSBjZW50ZXIyWDtcblx0XHRcdHZhciBsaW5rWTEgPSBjTGlua1RvcFk7XG5cdFx0XHR2YXIgbGlua1kyID0gaHlicmlkV2lyZVk7XG5cdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtd2lyZS1oXFxcIiB4MT1cXFwiXCIgKyBsaW5rWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyBsaW5rWCArIFwiXFxcIiB5MT1cXFwiXCIgKyBsaW5rWTEgK1wiXFxcIiB5Mj1cXFwiXCIgKyBsaW5rWTIgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIG9wdGlvbnMuaFdpcmVDb2xvciArIFwiXFxcIiBzdHJva2UtZGFzaGFycmF5PVxcXCI0XFxcIiBzdHJva2Utd2lkdGg9XFxcIjFcXFwiIC8+XCI7XG5cblx0XHRcdC8vIENvbm5lY3QgYWxsIGdsb2JhbGx5IHBhcmFtZXRyaXplZCBnYXRlc1xuXHRcdFx0dmFyIGhXaXJlWCA9IDA7XG5cdFx0XHR2YXIgZ2xvYmFsUGFyYW1zSW5mbyA9IHRoaXMuZmluZEdsb2JhbFBhcmFtcygpO1xuXHRcdFx0aWYoZ2xvYmFsUGFyYW1zSW5mby5nbG9iYWxQYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRcdGhXaXJlWCA9IGdldENlbGxYKGdsb2JhbFBhcmFtc0luZm8uY2VsbHNbMF1bMF0pICsgb3B0aW9ucy5jZWxsV2lkdGggKyAob3B0aW9ucy5oU3BhY2luZyAvIDIpO1xuXHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgZ2xvYmFsUGFyYW1zSW5mby5jZWxscy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciBjZWxsID0gZ2xvYmFsUGFyYW1zSW5mby5jZWxsc1tpXTtcblxuXHRcdFx0XHRcdHZhciBsaW5rMlggPSBnZXRDZWxsWChjZWxsWzBdKSArIG9wdGlvbnMuY2VsbFdpZHRoICsgKG9wdGlvbnMuaFNwYWNpbmcgLyAyKTtcblx0XHRcdFx0XHR2YXIgbGluazJZMiA9IGdldENlbGxZKGNlbGxbMV0pICsgb3B0aW9ucy5jZWxsSGVpZ2h0ICsgb3B0aW9ucy52U3BhY2luZyAtIChvcHRpb25zLnBhcmFtVGV4dEhlaWdodCAvIDIpO1xuXHRcdFx0XHRcdHZhciBsaW5rMlkxID0gaHlicmlkV2lyZVk7XG5cdFx0XHRcdFx0dmFyIGNlbGxCb3R0b21SaWdodFggPSBnZXRDZWxsWChjZWxsWzBdKSArIG9wdGlvbnMuY2VsbFdpZHRoO1xuXHRcdFx0XHRcdHZhciBjZWxsQm90dG9tUmlnaHRZID0gZ2V0Q2VsbFkoY2VsbFsxXSkgKyBvcHRpb25zLmNlbGxIZWlnaHQgKyAob3B0aW9ucy5wYXJhbVRleHRIZWlnaHQgKiAyKSArIDQ7XG5cdFx0XHRcdFx0c3ZnICs9IFwiPGxpbmUgY2xhc3M9XFxcInFjLXdpcmUtaFxcXCIgeDE9XFxcIlwiICsgbGluazJYICsgXCJcXFwiIHgyPVxcXCJcIiArIGxpbmsyWCArIFwiXFxcIiB5MT1cXFwiXCIgKyBsaW5rMlkxICtcIlxcXCIgeTI9XFxcIlwiICsgbGluazJZMiArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgb3B0aW9ucy5oV2lyZUNvbG9yICsgXCJcXFwiIHN0cm9rZS1kYXNoYXJyYXk9XFxcIjRcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgLz5cIjtcblx0XHRcdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtd2lyZS1oXFxcIiB4MT1cXFwiXCIgKyBsaW5rMlggKyBcIlxcXCIgeDI9XFxcIlwiICsgY2VsbEJvdHRvbVJpZ2h0WCArIFwiXFxcIiB5MT1cXFwiXCIgKyBsaW5rMlkyICtcIlxcXCIgeTI9XFxcIlwiICsgY2VsbEJvdHRvbVJpZ2h0WSArIFwiXFxcIiBzdHJva2U9XFxcIlwiICsgb3B0aW9ucy5oV2lyZUNvbG9yICsgXCJcXFwiIHN0cm9rZS1kYXNoYXJyYXk9XFxcIjRcXFwiIHN0cm9rZS13aWR0aD1cXFwiMVxcXCIgbWFya2VyLWVuZD1cXFwidXJsKCNxYy1hcnJvdy1oZWFkKVxcXCIgLz5cIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciB3aXJlWSA9IGh5YnJpZFdpcmVZO1xuXHRcdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtd2lyZS1oXFxcIiB4MT1cXFwiXCIgKyBoV2lyZVggKyBcIlxcXCIgeDI9XFxcIlwiICsgY2VudGVyMlggKyBcIlxcXCIgeTE9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgeTI9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIG9wdGlvbnMuaFdpcmVDb2xvciArIFwiXFxcIiBzdHJva2UtZGFzaGFycmF5PVxcXCI0XFxcIiBzdHJva2Utd2lkdGg9XFxcIlwiICsgb3B0aW9ucy53aXJlV2lkdGggKyBcIlxcXCIgLz5cIjtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gTm8gZ2F0ZXMgd2l0aCBnbG9iYWwgcGFyYW1zXG5cdFx0XHRcdGhXaXJlWCA9IGdldENlbGxYKHRvdGFsV2lyZUNvbHMpO1xuXG5cdFx0XHRcdHZhciB3aXJlWSA9IGh5YnJpZFdpcmVZO1xuXHRcdFx0XHRzdmcgKz0gXCI8bGluZSBjbGFzcz1cXFwicWMtd2lyZS1oXFxcIiB4MT1cXFwiXCIgKyBjZW50ZXIyWCArIFwiXFxcIiB4Mj1cXFwiXCIgKyBoV2lyZVggKyBcIlxcXCIgeTE9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgeTI9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgc3Ryb2tlPVxcXCJcIiArIG9wdGlvbnMuaFdpcmVDb2xvciArIFwiXFxcIiBzdHJva2UtZGFzaGFycmF5PVxcXCI0XFxcIiBzdHJva2Utd2lkdGg9XFxcIlwiICsgb3B0aW9ucy53aXJlV2lkdGggKyBcIlxcXCIgIG1hcmtlci1lbmQ9XFxcInVybCgjcWMtYXJyb3ctaGVhZClcXFwiIC8+XCI7XG5cdFx0XHRcdHN2ZyArPSBcIjx0ZXh0IGNsYXNzPVxcXCJxYy13YXJuaW5nLWhcXFwiIHg9XFxcIlwiICsgKGhXaXJlWCAtIDUpICsgXCJcXFwiIHk9XFxcIlwiICsgd2lyZVkgKyBcIlxcXCIgZG9taW5hbnQtYmFzZWxpbmU9XFxcIm1pZGRsZVxcXCIgdGV4dC1hbmNob3I9XFxcImVuZFxcXCI+PzwvdGV4dD5cIjtcblx0XHRcdH1cblxuXHRcdH1cblxuXHRcdHN2ZyArPSBcIjwvc3ZnPlwiO1xuXHR9XG5cblx0cmV0dXJuIHN2Zztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb1Fpc2tpdCA9IGZ1bmN0aW9uKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUsIGNpcmN1aXRSZXBsYWNlbWVudCwgaW5zaWRlU3VibW9kdWxlKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBjb21tZW50ID0gb3B0aW9ucy5jb21tZW50O1xuXHR2YXIgZGVjb21wb3NlID0gb3B0aW9ucy5kZWNvbXBvc2U7XG5cdHZhciB2ZXJzaW9uU3RyID0gb3B0aW9ucy52ZXJzaW9uU3RyO1xuXHR2YXIgcHJvdmlkZXJOYW1lID0gb3B0aW9ucy5wcm92aWRlck5hbWU7XG5cdHZhciBiYWNrZW5kTmFtZSA9IG9wdGlvbnMuYmFja2VuZE5hbWU7XG5cdHZhciBhc0p1cHl0ZXIgPSBvcHRpb25zLmFzSnVweXRlcjtcblx0dmFyIHNob3RzID0gb3B0aW9ucy5zaG90cztcblx0dmFyIGh5YnJpZCA9IG9wdGlvbnMuaHlicmlkO1xuXG5cdHZhciBzZWxmID0gdGhpcztcblxuXHRwcm92aWRlck5hbWUgPSBwcm92aWRlck5hbWUgfHwgXCJBZXJcIjtcblxuXHRiYWNrZW5kTmFtZSA9IGJhY2tlbmROYW1lIHx8IFwiXCI7XG5cdGlmKCFiYWNrZW5kTmFtZSAmJiBwcm92aWRlck5hbWUgPT0gXCJBZXJcIikge1xuXHRcdGJhY2tlbmROYW1lID0gXCJxYXNtX3NpbXVsYXRvclwiO1xuXHR9XG5cblx0c2hvdHMgPSBzaG90cyB8fCAxMDI0O1xuXG5cdHZhciB2ZXJzaW9uID0gcGFyc2VGbG9hdCh2ZXJzaW9uU3RyIHx8IFwiMC43XCIpO1xuXHRpZihpc05hTih2ZXJzaW9uKSkge1xuXHRcdHZlcnNpb24gPSAwLjc7XG5cdH1cblxuXHRpZih0eXBlb2YgaHlicmlkID09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRoeWJyaWQgPSB0aGlzLm9wdGlvbnMgPyAhIXRoaXMub3B0aW9ucy5oeWJyaWQgOiBmYWxzZTtcblx0fVxuXG5cdC8vIGRlY29tcG9zZSA/XG5cdHZhciBjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmN1aXQubG9hZCh0aGlzLnNhdmUoZGVjb21wb3NlKSk7XG5cblx0dmFyIHFpc2tpdCA9IFwiXCI7XG5cblx0Ly8gY29tbWVudFxuXHRpZihjb21tZW50KSB7XG5cdFx0dmFyIGNvbW0gPSAoY29tbWVudCB8fCBcIlwiKS5zcGxpdChcIlxcblwiKTtcblx0XHRjb21tLm1hcChmdW5jdGlvbihjbGluZSkge1xuXHRcdFx0aWYoY2xpbmUubGVuZ3RoID49IDEgJiYgY2xpbmVbMF0gIT0gXCIjXCIpIHtcblx0XHRcdFx0cWlza2l0ICs9IFwiIyBcIjtcblx0XHRcdH1cblx0XHRcdHFpc2tpdCArPSBjbGluZTtcblx0XHRcdHFpc2tpdCArPSBcIlxcblwiO1xuXHRcdH0pO1xuXHR9XG5cblx0dmFyIG1hdGhUb1N0cmluZ0hhbmRsZXIgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zKSB7XG5cdFx0aWYobm9kZS5pc1N5bWJvbE5vZGUpIHtcblx0XHRcdHZhciBudW1weXMgPSBbXCJwaVwiLCBcInNpblwiLCBcImNvc1wiLCBcInRhblwiLCBcImFzaW5cIiwgXCJhY29zXCIsIFwiYXRhblwiXTtcblx0XHRcdGlmKG51bXB5cy5pbmRleE9mKG5vZGUubmFtZSkgPj0gMCkge1xuXHRcdFx0XHRyZXR1cm4gXCJucC5cIiArIG5vZGUubmFtZTtcblx0XHRcdH1cblxuXHRcdFx0aWYoc2VsZi5wYXJhbXMuaW5kZXhPZihub2RlLm5hbWUpID49IDAgJiYgaHlicmlkKSB7XG5cdFx0XHRcdHJldHVybiBcInBhcmFtc1tcIiArIHNlbGYucGFyYW1zLmluZGV4T2Yobm9kZS5uYW1lKSArIFwiXVwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR2YXIgYWRqdXN0SWRlbnRhdGlvbiA9IGZ1bmN0aW9uKGFkZFN0ciwgaWRlbnQpIHtcblx0XHR2YXIgc3RyID0gXCJcIjtcblxuXHRcdC8vIGFkZCB1c2VyIGRlZmluZWQgY29zdCBmdW5jdGlvbiB3aXRoIHByb3BlciBpZGVudGF0aW9uXG5cdFx0dmFyIGNmTGluZXMgPSBhZGRTdHIuc3BsaXQoXCJcXG5cIik7XG5cdFx0dmFyIG1pbklkZW50ID0gLTE7XG5cdFx0Y2ZMaW5lcy5tYXAoZnVuY3Rpb24oY2ZMaW5lKSB7XG5cdFx0XHR2YXIgdG1wSWRlbnQgPSBjZkxpbmUuc2VhcmNoKC9cXFMvKTtcblx0XHRcdGlmKHRtcElkZW50ID49IDAgJiYgKG1pbklkZW50IDwgMCB8fCB0bXBJZGVudCA8IG1pbklkZW50KSkge1xuXHRcdFx0XHRtaW5JZGVudCA9IHRtcElkZW50O1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aWYobWluSWRlbnQgPCAwKSB7XG5cdFx0XHRtaW5JZGVudCA9IDA7XG5cdFx0fVxuXG5cdFx0dmFyIGFkZElkZW50ID0gXCJcIjtcblx0XHRpZihtaW5JZGVudCA8IGlkZW50Lmxlbmd0aCkge1xuXHRcdFx0Zm9yKHZhciB0bXAgPSAwOyB0bXAgPCAoaWRlbnQubGVuZ3RoIC0gbWluSWRlbnQpOyB0bXArKykge1xuXHRcdFx0XHRhZGRJZGVudCArPSBcIiBcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjZkxpbmVzLm1hcChmdW5jdGlvbihjZkxpbmUpIHtcblx0XHRcdHN0ciArPSBhZGRJZGVudCArIGNmTGluZSArIFwiXFxuXCI7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gc3RyO1xuXHR9O1xuXG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRxaXNraXQgKz0gXCJkZWYgXCIgKyBleHBvcnRBc0dhdGVOYW1lICsgXCIocWNcIjtcblxuXHRcdHZhciBhcmdjID0gMDtcblx0XHRpZihjaXJjdWl0LnBhcmFtcyAmJiBjaXJjdWl0LnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdGZvcih2YXIgcGMgPSAwOyBwYyA8IGNpcmN1aXQucGFyYW1zLmxlbmd0aDsgcGMrKykge1xuXHRcdFx0XHRxaXNraXQgKz0gXCIsIFwiO1xuXHRcdFx0XHRhcmdjKys7XG5cdFx0XHRcdHFpc2tpdCArPSBjaXJjdWl0LnBhcmFtc1twY107XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQubnVtUXViaXRzOyBpKyspIHtcblx0XHRcdHFpc2tpdCArPSBcIiwgXCI7XG5cdFx0XHRhcmdjKys7XG5cdFx0XHRxaXNraXQgKz0gcXViaXRMZXR0ZXIoaSwgY2lyY3VpdC5udW1RdWJpdHMpO1xuXHRcdH1cblx0XHRxaXNraXQgKz0gXCIpOlxcblwiO1xuXHR9IGVsc2Uge1xuXHRcdGlmKCFjaXJjdWl0UmVwbGFjZW1lbnQpIHtcblx0XHRcdHFpc2tpdCArPSBcImZyb20gcWlza2l0IGltcG9ydCBRdWFudHVtUmVnaXN0ZXIsIENsYXNzaWNhbFJlZ2lzdGVyXFxuXCI7XG5cdFx0XHRxaXNraXQgKz0gXCJmcm9tIHFpc2tpdCBpbXBvcnQgUXVhbnR1bUNpcmN1aXQsIGV4ZWN1dGUsIFwiICsgcHJvdmlkZXJOYW1lICsgXCJcXG5cIjtcblxuXHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdHFpc2tpdCArPSBcImZyb20gc2NpcHkub3B0aW1pemUgaW1wb3J0IG1pbmltaXplXFxuXCI7XG5cdFx0XHRcdHFpc2tpdCArPSBcImZyb20gY29sbGVjdGlvbnMgaW1wb3J0IENvdW50ZXJcXG5cIjtcblx0XHRcdH1cblxuXHRcdFx0cWlza2l0ICs9IFwiaW1wb3J0IG51bXB5IGFzIG5wXFxuXCI7XG5cdFx0XHRxaXNraXQgKz0gXCJcXG5cIjtcblxuXHRcdFx0aWYoc2hvdHMpIHtcblx0XHRcdFx0cWlza2l0ICs9IFwic2hvdHMgPSBcIiArIHNob3RzICsgXCJcXG5cIjtcblx0XHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBnbG9iYWxQYXJhbXMgPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLnBhcmFtcyA/IHRoaXMub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0XHRcdGlmKHRoaXMucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHR2YXIgZ2xvYmFsUGFyYW1OYW1lID0gdGhpcy5wYXJhbXNbaV07XG5cblx0XHRcdFx0XHR2YXIgbm9kZSA9IG1hdGgucGFyc2UoZ2xvYmFsUGFyYW1zW2dsb2JhbFBhcmFtTmFtZV0pO1xuXHRcdFx0XHRcdHZhciBnbG9iYWxQYXJhbVZhbHVlID0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cblx0XHRcdFx0XHRxaXNraXQgKz0gZ2xvYmFsUGFyYW1OYW1lICsgXCIgPSBcIiArIGdsb2JhbFBhcmFtVmFsdWUgKyBcIlxcblwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHFpc2tpdCArPSBcIlxcblwiO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0cWlza2l0ICs9IFwidG9sZXJhbmNlID0gXCIgKyAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLnRvbGVyYW5jZSA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLnRvbGVyYW5jZSB8fCBcIjAuMDAxXCIgOiBcIjAuMDAxXCIpICsgXCJcXG5cIjtcblx0XHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cdFx0XHR9XG5cblx0XHRcdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHRcdFx0aWYoIWRlY29tcG9zZSkge1xuXHRcdFx0XHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdFx0XHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0XHRpZighYmFzaWNHYXRlKSB7XG5cdFx0XHRcdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHNlbGYuY3VzdG9tR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0XHRcdGlmKGN1c3RvbUdhdGUpIHtcblx0XHRcdFx0XHRcdFx0dmFyIGN1c3RvbUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0XHRcdFx0Y3VzdG9tQ2lyY3VpdC5sb2FkKGN1c3RvbUdhdGUpO1xuXHRcdFx0XHRcdFx0XHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRcdFx0XHRcdFx0XHRjb21tZW50OiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdGRlY29tcG9zZTogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyLFxuXHRcdFx0XHRcdFx0XHRcdHByb3ZpZGVyTmFtZTogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRiYWNrZW5kTmFtZTogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0YXNKdXB5dGVyOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRzaG90czogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0aHlicmlkOiBudWxsXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdHFpc2tpdCArPSBjdXN0b21DaXJjdWl0LmV4cG9ydFRvUWlza2l0KG5ld09wdGlvbnMsIHVzZWRHYXRlTmFtZSwgY2lyY3VpdFJlcGxhY2VtZW50LCBpbnNpZGVTdWJtb2R1bGUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBpZGVudGF0aW9uID0gXCJcIjtcblx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRpZGVudGF0aW9uID0gXCIgIFwiO1xuXG5cdFx0XHRcdHFpc2tpdCArPSBcImRlZiBvYmplY3RpdmVfZnVuY3Rpb24ocGFyYW1zKTpcXG5cIlxuXHRcdFx0fVxuXG5cdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwicWMgPSBRdWFudHVtQ2lyY3VpdCgpXFxuXCI7XG5cdFx0XHRxaXNraXQgKz0gXCJcXG5cIjtcblxuXHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcInEgPSBRdWFudHVtUmVnaXN0ZXIoXCIgKyBjaXJjdWl0Lm51bVF1Yml0cyArIFwiLCAncScpXFxuXCI7XG5cdFx0XHRmb3IodmFyIGNyZWdOYW1lIGluIHRoaXMuY3JlZ3MpIHtcblx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBjcmVnTmFtZSArIFwiID0gQ2xhc3NpY2FsUmVnaXN0ZXIoXCIgKyAodGhpcy5jcmVnc1tjcmVnTmFtZV0ubGVuZ3RoIHx8IDEpICsgXCIsICdcIiArIGNyZWdOYW1lICsgXCInKVxcblwiO1xuXHRcdFx0fVxuXHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cblx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJxYy5hZGRfcmVnaXN0ZXIocSlcXG5cIjtcblx0XHRcdGZvcih2YXIgY3JlZ05hbWUgaW4gdGhpcy5jcmVncykge1xuXHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwicWMuYWRkX3JlZ2lzdGVyKFwiICsgY3JlZ05hbWUgKyBcIilcXG5cIjtcblx0XHRcdH1cblx0XHRcdHFpc2tpdCArPSBcIlxcblwiO1xuXHRcdH1cblx0fVxuXG5cdHZhciBudW1Db2xzID0gY2lyY3VpdC5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1x0XG5cdFx0XHR2YXIgcWlza2l0UmVwbGFjZW1lbnQgPSBudWxsO1xuXHRcdFx0dmFyIHFpc2tpdEVxdWl2YWxlbnQgPSBudWxsO1xuXHRcdFx0dmFyIHFpc2tpdENvbmRpdGlvbiA9IG51bGw7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0XG5cdFx0XHRcdHFpc2tpdENvbmRpdGlvbiA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyA/IGdhdGUub3B0aW9ucy5jb25kaXRpb24gOiBudWxsO1xuXG5cdFx0XHRcdHZhciBnYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGdhdGUubmFtZSk7XG5cdFx0XHRcdGlmKGdhdGVEZWYpe1xuXHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mbykge1xuXHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLnFpc2tpdCAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucWlza2l0LnJlcGxhY2VtZW50KXtcblx0XHRcdFx0XHRcdFx0cWlza2l0UmVwbGFjZW1lbnQgPSBnYXRlRGVmLmV4cG9ydEluZm8ucWlza2l0LnJlcGxhY2VtZW50O1xuXHRcdFx0XHRcdFx0XHRxaXNraXRSZXBsYWNlbWVudC5tYXAoZnVuY3Rpb24ocmVwbGFjZW1lbnQpe1xuXHRcdFx0XHRcdFx0XHRcdHZhciByZXBsYWNlbWVudENpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcyl7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1zID0gT2JqZWN0LmtleXMoZ2F0ZS5vcHRpb25zLnBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmVwbGFjZW1lbnRQYXJhbXMgPSBPYmplY3Qua2V5cyhyZXBsYWNlbWVudC5wYXJhbXMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1zLm1hcChmdW5jdGlvbihwYXJhbSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHJlcGxhY2VtZW50UGFyYW1zLmluZGV4T2YocGFyYW0pID4gLTEpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlcGxhY2VtZW50LnBhcmFtc1twYXJhbV0gPSBnYXRlLm9wdGlvbnMucGFyYW1zW3BhcmFtXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fVx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdFx0cmVwbGFjZW1lbnRDaXJjdWl0LmFkZEdhdGUocmVwbGFjZW1lbnQubmFtZSwgY29sdW1uLCBnYXRlLndpcmVzLCB7cGFyYW1zOiByZXBsYWNlbWVudC5wYXJhbXMsIGNvbmRpdGlvbjogcWlza2l0Q29uZGl0aW9ufSk7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21tZW50OiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdHZlcnNpb25TdHI6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0cHJvdmlkZXJOYW1lOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdGJhY2tlbmROYW1lOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdGFzSnVweXRlcjogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRzaG90czogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRoeWJyaWQ6IG51bGxcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdHFpc2tpdCArPSByZXBsYWNlbWVudENpcmN1aXQuZXhwb3J0VG9RaXNraXQobmV3T3B0aW9ucywgZmFsc2UsIHRydWUsICEhZXhwb3J0QXNHYXRlTmFtZSB8fCBpbnNpZGVTdWJtb2R1bGUpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZihnYXRlRGVmLmV4cG9ydEluZm8ucWlza2l0ICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xaXNraXQuZXF1aXZhbGVudCl7XG5cdFx0XHRcdFx0XHRcdHFpc2tpdEVxdWl2YWxlbnQgPSBnYXRlRGVmLmV4cG9ydEluZm8ucWlza2l0LmVxdWl2YWxlbnQ7XG5cdFx0XHRcdFx0XHRcdHFpc2tpdEVxdWl2YWxlbnQubWFwKGZ1bmN0aW9uKGVxdWl2YWxlbnQpe1xuXHRcdFx0XHRcdFx0XHRcdHZhciBlcXVpdmFsZW50Q2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBnYXRlV2lyZXMgPSBlcXVpdmFsZW50LndpcmVzLmxlbmd0aCA+IDEgPyBnYXRlLndpcmVzIDogZ2F0ZS53aXJlc1tlcXVpdmFsZW50LndpcmVzWzBdXTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZXFQYXJhbXMgPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRpZihlcXVpdmFsZW50LnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVQYXJhbXMgPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZ2F0ZVBhcmFtTmFtZSBpbiBnYXRlLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Z2F0ZVBhcmFtc1tnYXRlUGFyYW1OYW1lXSA9IG1hdGguZXZhbHVhdGUoZ2F0ZS5vcHRpb25zLnBhcmFtc1tnYXRlUGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBlcVBhcmFtTmFtZSBpbiBlcXVpdmFsZW50LnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRlcVBhcmFtc1tlcVBhcmFtTmFtZV0gPSBtYXRoLmV2YWx1YXRlKGVxdWl2YWxlbnQucGFyYW1zW2VxUGFyYW1OYW1lXSwgZ2F0ZVBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0ZXF1aXZhbGVudENpcmN1aXQuYWRkR2F0ZShlcXVpdmFsZW50Lm5hbWUsIGNvbHVtbiwgZ2F0ZVdpcmVzLCB7IHBhcmFtczogZXFQYXJhbXMsIGNvbmRpdGlvbjogcWlza2l0Q29uZGl0aW9uIH0pO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tbWVudDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdGRlY29tcG9zZTogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHR2ZXJzaW9uU3RyOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdHByb3ZpZGVyTmFtZTogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRiYWNrZW5kTmFtZTogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0XHRhc0p1cHl0ZXI6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0c2hvdHM6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0aHlicmlkOiBudWxsXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRxaXNraXQgKz0gZXF1aXZhbGVudENpcmN1aXQuZXhwb3J0VG9RaXNraXQobmV3T3B0aW9ucywgZmFsc2UsIHRydWUsICEhZXhwb3J0QXNHYXRlTmFtZSB8fCBpbnNpZGVTdWJtb2R1bGUpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZighcWlza2l0UmVwbGFjZW1lbnQgJiYgIXFpc2tpdEVxdWl2YWxlbnQpIHtcblx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lIHx8IGluc2lkZVN1Ym1vZHVsZSB8fCBoeWJyaWQpIHtcblx0XHRcdFx0XHRcdHFpc2tpdCArPSBcIiAgXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoIXFpc2tpdFJlcGxhY2VtZW50ICYmICFxaXNraXRFcXVpdmFsZW50KSB7XG5cblx0XHRcdFx0XHR2YXIgZ2F0ZU5hbWUgPSBnYXRlLm5hbWU7XG5cblx0XHRcdFx0XHR2YXIgZ2F0ZVBhcmFtcyA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zID8gZ2F0ZS5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdGlmKHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV0pIHtcblx0XHRcdFx0XHRcdHFpc2tpdCArPSBcInFjLlwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHRpZihnYXRlRGVmICYmIGdhdGVEZWYuZXhwb3J0SW5mbyAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucWlza2l0ICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xaXNraXQubmFtZSl7XG5cdFx0XHRcdFx0XHRnYXRlTmFtZSA9IGdhdGVEZWYuZXhwb3J0SW5mby5xaXNraXQubmFtZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Z2F0ZU5hbWUgPSBnYXRlLm5hbWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFxuXHRcdFx0XHRcdHFpc2tpdCArPSBnYXRlTmFtZSArIFwiKFwiO1xuXG5cdFx0XHRcdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRcdFx0XHRpZihnYXRlUGFyYW1zKSB7XG5cdFx0XHRcdFx0XHR2YXIgZ2F0ZURlZiA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlLm5hbWVdO1xuXHRcdFx0XHRcdFx0aWYoIWdhdGVEZWYpIHtcblx0XHRcdFx0XHRcdFx0Z2F0ZURlZiA9IHRoaXMuY3VzdG9tR2F0ZXNbZ2F0ZS5uYW1lXTtcblxuXHRcdFx0XHRcdFx0XHRxaXNraXQgKz0gXCJxY1wiO1xuXHRcdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBwYXJhbURlZiA9IGdhdGVEZWYucGFyYW1zIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1Db3VudCA9IHBhcmFtRGVmLmxlbmd0aDtcblx0XHRcdFx0XHRcdFx0aWYocGFyYW1Db3VudCkge1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgcCA9IDA7IHAgPCBwYXJhbUNvdW50OyBwKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRxaXNraXQgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IHBhcmFtRGVmW3BdO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0XHRcdC8vIHByZXBlbmQgJ25wJyB0byBtYXRoIGNvbnN0YW50c1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZVBhcmFtc1twYXJhbU5hbWVdIHx8IGdhdGVQYXJhbXNbcGFyYW1OYW1lXS50b1N0cmluZygpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW3BhcmFtTmFtZV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRxaXNraXQgKz0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblxuXHRcdFx0XHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZihnYXRlTmFtZSA9PSBcImN1XCIgJiYgIWdhdGVQYXJhbXNbXCJnYW1tYVwiXSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cWlza2l0ICs9IFwiLCAwXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Zm9yKHZhciB3ID0gMDsgdyA8IGdhdGUud2lyZXMubGVuZ3RoOyB3KyspIHtcblx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRxaXNraXQgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSB8fCBpbnNpZGVTdWJtb2R1bGUpIHtcblx0XHRcdFx0XHRcdFx0cWlza2l0ICs9IHF1Yml0TGV0dGVyKGdhdGUud2lyZXNbd10sIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHFpc2tpdCArPSBcInFbXCIgKyBnYXRlLndpcmVzW3ddICsgXCJdXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGdhdGVOYW1lID09IFwibWVhc3VyZVwiICYmIGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY3JlZykge1xuXHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdHFpc2tpdCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHFpc2tpdCArPSBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lICsgXCJbXCIgKyBnYXRlLm9wdGlvbnMuY3JlZy5iaXQgKyBcIl1cIjtcblx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cWlza2l0ICs9IFwiKVwiO1x0XHRcdFx0XHRcblxuXHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZykge1xuXHRcdFx0XHRcdFx0cWlza2l0ICs9IFwiLmNfaWYoXCIgKyBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcgKyBcIiwgXCIgKyBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLnZhbHVlICsgXCIpXCI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZighY2lyY3VpdFJlcGxhY2VtZW50KSB7XG5cdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdFx0cWlza2l0ICs9IFwiXFxuXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHFpc2tpdCArPSBcIlxcblwiO1xuXG5cdFx0XHR2YXIgaWRlbnRhdGlvbiA9IFwiXCI7XG5cdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0aWRlbnRhdGlvbiA9IFwiICBcIjtcblx0XHRcdH1cblxuXHRcdFx0aWYocHJvdmlkZXJOYW1lID09IFwiQWVyXCIpIHtcblx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcImJhY2tlbmQgPSBBZXIuZ2V0X2JhY2tlbmQoJ1wiICsgYmFja2VuZE5hbWUgKyBcIicpXFxuXCI7XG5cdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJqb2IgPSBleGVjdXRlKHFjLCBiYWNrZW5kPWJhY2tlbmRcIjtcblx0XHRcdFx0aWYoc2hvdHMpIHtcblx0XHRcdFx0XHRxaXNraXQgKz0gXCIsIHNob3RzPXNob3RzXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cWlza2l0ICs9IFwiKVxcblwiO1xuXHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwiam9iX3Jlc3VsdCA9IGpvYi5yZXN1bHQoKVxcblwiO1xuXG5cdFx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJjb3VudHMgPSBDb3VudGVyKGpvYl9yZXN1bHQuZ2V0X2NvdW50cyhxYykpXFxuXCI7XG5cdFx0XHRcdFx0cWlza2l0ICs9IFwiXFxuXCJcblx0XHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwiIyBDQUxDVUxBVEUgQ09TVCBIRVJFXFxuXCI7XG5cblx0XHRcdFx0XHR2YXIgY29zdEZ1bmN0aW9uID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbiA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbi5weXRob24gfHwgXCJcIiA6IFwiXCI7XG5cdFx0XHRcdFx0aWYoIWNvc3RGdW5jdGlvbi50cmltKCkpIHtcblx0XHRcdFx0XHRcdGNvc3RGdW5jdGlvbiA9IFwiY29zdCA9IDBcIjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRxaXNraXQgKz0gYWRqdXN0SWRlbnRhdGlvbihjb3N0RnVuY3Rpb24sIGlkZW50YXRpb24pO1xuXG5cdFx0XHRcdFx0cWlza2l0ICs9IFwiXFxuXCJcblx0XHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwicmV0dXJuIGNvc3RcXG5cIlxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJwcmludChqb2JfcmVzdWx0LmdldF9jb3VudHMocWMpKVxcblwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmKHByb3ZpZGVyTmFtZSA9PSBcIklCTVFcIikge1xuXHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwiSUJNUS5sb2FkX2FjY291bnQoKVxcblwiO1xuXHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwicHJvdmlkZXIgPSBJQk1RLmdldF9wcm92aWRlcihodWI9XFxcImlibS1xXFxcIiwgZ3JvdXA9XFxcIm9wZW5cXFwiLCBwcm9qZWN0PVxcXCJtYWluXFxcIilcXG5cIjtcblx0XHRcdFx0aWYoYmFja2VuZE5hbWUpIHtcblx0XHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwiYmFja2VuZCA9IHByb3ZpZGVyLmdldF9iYWNrZW5kKFxcXCJcIiArIGJhY2tlbmROYW1lICsgXCJcXFwiKVxcblwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQgIHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJiYWNrZW5kcyA9IHByb3ZpZGVyLmJhY2tlbmRzKClcXG5cIjtcblx0XHRcdFx0XHRxaXNraXQgKz0gaWRlbnRhdGlvbiArIFwiYmFja2VuZCA9IGxlYXN0X2J1c3koYmFja2VuZHMpXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcImpvYiA9IGV4ZWN1dGUocWMsIGJhY2tlbmQ9YmFja2VuZFwiO1xuXHRcdFx0XHRpZihzaG90cykge1xuXHRcdFx0XHRcdHFpc2tpdCArPSBcIiwgc2hvdHM9c2hvdHNcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRxaXNraXQgKz0gXCIpXFxuXCI7XG5cdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJqb2JfcmVzdWx0ID0gam9iLnJlc3VsdCgpXFxuXCI7XG5cblx0XHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcImNvdW50cyA9IENvdW50ZXIoam9iX3Jlc3VsdC5nZXRfY291bnRzKHFjKSlcXG5cIjtcblx0XHRcdFx0XHRxaXNraXQgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCIjIENBTENVTEFURSBDT1NUIEhFUkVcXG5cIjtcblxuXHRcdFx0XHRcdHZhciBjb3N0RnVuY3Rpb24gPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uLnB5dGhvbiB8fCBcIlwiIDogXCJcIjtcblx0XHRcdFx0XHRpZighY29zdEZ1bmN0aW9uLnRyaW0oKSkge1xuXHRcdFx0XHRcdFx0Y29zdEZ1bmN0aW9uID0gXCJjb3N0ID0gMFwiO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHFpc2tpdCArPSBhZGp1c3RJZGVudGF0aW9uKGNvc3RGdW5jdGlvbiwgaWRlbnRhdGlvbik7XG5cblx0XHRcdFx0XHRxaXNraXQgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdHFpc2tpdCArPSBpZGVudGF0aW9uICsgXCJyZXR1cm4gY29zdFxcblwiXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cWlza2l0ICs9IGlkZW50YXRpb24gKyBcInByaW50KGpvYl9yZXN1bHQuZ2V0X2NvdW50cyhxYykpXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdHZhciBnbG9iYWxQYXJhbUxpc3QgPSBcIlwiO1xuXHRcdFx0XHR0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24oZ2xvYmFsUGFyYW1OYW1lLCBnbG9iYWxQYXJhbUluZGV4KSB7XG5cdFx0XHRcdFx0aWYoZ2xvYmFsUGFyYW1JbmRleCA+IDApIHtcblx0XHRcdFx0XHRcdGdsb2JhbFBhcmFtTGlzdCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGdsb2JhbFBhcmFtTGlzdCArPSBnbG9iYWxQYXJhbU5hbWU7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHFpc2tpdCArPSBcIlxcblwiO1xuXHRcdFx0XHRxaXNraXQgKz0gXCJwYXJhbXMgPSBucC5hcnJheShbXCIgKyBnbG9iYWxQYXJhbUxpc3QgKyBcIl0pXFxuXCI7XG5cdFx0XHRcdHFpc2tpdCArPSBcIlxcblwiO1xuXHRcdFx0XHRxaXNraXQgKz0gXCJtaW5pbXVtID0gbWluaW1pemUob2JqZWN0aXZlX2Z1bmN0aW9uLCBwYXJhbXMsIG1ldGhvZD1cXFwiXCIgKyAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLm9wdGltaXplciA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLm9wdGltaXplciA6IFwiUG93ZWxsXCIpICsgXCJcXFwiLCB0b2w9dG9sZXJhbmNlKVxcblwiO1xuXHRcdFx0XHRxaXNraXQgKz0gXCJwcmludChcXFwiY29zdDpcXFwiLCBtaW5pbXVtLmZ1biwgXFxcInBhcmFtczpcXFwiLCBtaW5pbXVtLngpXFxuXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cblx0XHRpZihhc0p1cHl0ZXIpIHtcblx0XHRcdHZhciBub3RlYm9vayA9IHtcblx0XHRcdFx0bWV0YWRhdGE6IHtcblx0XHRcdFx0XHRrZXJuZWxzcGVjOiB7XG5cdFx0XHRcdFx0XHRkaXNwbGF5X25hbWU6IFwiUHl0aG9uIDNcIixcblx0XHRcdFx0XHRcdGxhbmd1YWdlOiBcInB5dGhvblwiLFxuXHRcdFx0XHRcdFx0bmFtZTogXCJweXRob24zXCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdG5iZm9ybWF0OiA0LFxuXHRcdFx0XHRuYmZvcm1hdF9taW5vcjogMCxcblx0XHRcdFx0Y2VsbHM6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRjZWxsX3R5cGU6IFwiY29kZVwiLFxuXHRcdFx0XHRcdFx0c291cmNlOiBxaXNraXQsXG5cdFx0XHRcdFx0XHRtZXRhZGF0YToge1xuXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0b3V0cHV0czogW10sXG5cdFx0XHRcdFx0XHRleGVjdXRpb25fY291bnQ6IG51bGxcblx0XHRcdFx0XHR9XG5cdFx0XHRcdF1cblx0XHRcdH07XG5cdFx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkobm90ZWJvb2spO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBxaXNraXQ7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0VG9RdUVTVCA9IGZ1bmN0aW9uKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUsIGRlZmluZWRGdW5jKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBjb21tZW50ID0gb3B0aW9ucy5jb21tZW50O1xuXHR2YXIgZGVjb21wb3NlID0gb3B0aW9ucy5kZWNvbXBvc2U7XG5cblx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cdGRlZmluZWRGdW5jID0gZGVmaW5lZEZ1bmMgfHwgW107XG5cblx0dmFyIGNpcmN1aXQgPSBudWxsO1xuXHR2YXIgZnVuY3Rpb25zID0gW1widW5pdGFyeVwiLFwiY29udHJvbGxlZFVuaXRhcnlcIl07XG5cblx0Ly8gZGVjb21wb3NlID9cblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZShkZWNvbXBvc2UpKTtcblxuXHR2YXIgcXVlc3QgPSBcIlwiO1xuXG5cdC8vIGNvbW1lbnRcblx0aWYoY29tbWVudCkge1xuXHRcdHZhciBjb21tID0gKGNvbW1lbnQgfHwgXCJcIikuc3BsaXQoXCJcXG5cIik7XG5cdFx0Y29tbS5tYXAoZnVuY3Rpb24oY2xpbmUpIHtcblx0XHRcdGlmKGNsaW5lLmxlbmd0aCA+PSAyICYmIGNsaW5lWzBdICE9IFwiL1wiICYmIGNsaW5lWzFdICE9IFwiL1wiKSB7XG5cdFx0XHRcdHF1ZXN0ICs9IFwiLy8gXCI7XG5cdFx0XHR9XG5cdFx0XHRxdWVzdCArPSBjbGluZTtcblx0XHRcdHF1ZXN0ICs9IFwiXFxuXCI7XG5cdFx0fSk7XG5cdH1cblxuXHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5udW1RdWJpdHM7IGkrKykge1xuXHRcdHZhciBnYXRlcyA9IHRoaXMuZ2F0ZXNbaV07XG5cdFx0Zm9yKHZhciBqID0gMDsgaiA8IGdhdGVzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGdhdGVzW2pdO1xuXHRcdFx0aWYoIWdhdGUgfHwgIXRoaXMuYmFzaWNHYXRlc1tnYXRlLm5hbWVdKXtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdGlmKHRoaXMuYmFzaWNHYXRlc1tnYXRlLm5hbWVdLmV4cG9ydEluZm8gJiYgdGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV0uZXhwb3J0SW5mby5xdWVzdCkge1xuXHRcdFx0XHR2YXIgcXVlc3ROYW1lID0gdGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV0uZXhwb3J0SW5mby5xdWVzdC5uYW1lO1xuXHRcdFx0XHRpZihkZWZpbmVkRnVuYy5pbmNsdWRlcyhnYXRlLm5hbWUpKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoZnVuY3Rpb25zLmluY2x1ZGVzKHF1ZXN0TmFtZSkgfHwgdGhpcy5iYXNpY0dhdGVzW2dhdGUubmFtZV0uZXhwb3J0SW5mby5xdWVzdC5mdW5jICkge1xuXHRcdFx0XHRcdGRlZmluZWRGdW5jLnB1c2goZ2F0ZS5uYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRxdWVzdCArPSBcIlF1cmVnIFwiICsgZXhwb3J0QXNHYXRlTmFtZSArIFwiKFF1cmVnIHF1Yml0c1wiO1xuXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQubnVtUXViaXRzOyBpKyspIHtcblx0XHRcdHF1ZXN0ICs9IFwiLCBjb25zdCBpbnQgcVwiO1xuXHRcdFx0cXVlc3QgKz0gaTtcblx0XHR9XG5cblx0XHRpZihjaXJjdWl0LnBhcmFtcyAmJiBjaXJjdWl0LnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0LnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRxdWVzdCArPSBcIiwgZG91YmxlIFwiICsgY2lyY3VpdC5wYXJhbXNbaV07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHF1ZXN0ICs9IFwiKSB7XFxuXCI7XG5cdH0gZWxzZSB7XG5cdFx0cXVlc3QgKz0gXCIjaW5jbHVkZSA8bWF0aC5oPlxcbiNpbmNsdWRlIFxcXCJRdUVTVC5oXFxcIlxcblxcblwiO1xuXHRcdHF1ZXN0ICs9IFwiI2lmbmRlZiBNX1BJXFxuI2RlZmluZSBNX1BJIDMuMTQxNTkyNjVcXG4jZW5kaWZcXG5cXG5cIjtcblxuXHRcdHZhciBjdXN0b21RdUVTVCA9IFtdO1xuXG5cblx0XHR2YXIgdXNlZEdhdGVzID0gY2lyY3VpdC51c2VkR2F0ZXMoKTtcblx0XHRpZighZGVjb21wb3NlKSB7XG5cdFx0XHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdFx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdGlmKCFiYXNpY0dhdGUpIHtcblx0XHRcdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHNlbGYuY3VzdG9tR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0XHRpZihjdXN0b21HYXRlKSB7XG5cdFx0XHRcdFx0XHR2YXIgY3VzdG9tQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0Y3VzdG9tQ2lyY3VpdC5sb2FkKGN1c3RvbUdhdGUpO1xuXHRcdFx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdGNvbW1lbnQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdGRlY29tcG9zZTogZmFsc2Vcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRjdXN0b21RdUVTVC5wdXNoKGN1c3RvbUNpcmN1aXQuZXhwb3J0VG9RdUVTVChuZXdPcHRpb25zLCB1c2VkR2F0ZU5hbWUsIGRlZmluZWRGdW5jKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgZGVmaW5lZEZ1bmMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBnYXRlTmFtZSA9IGRlZmluZWRGdW5jW2ldO1xuXHRcdFx0dmFyIHF1ZXN0TmFtZSA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV0uZXhwb3J0SW5mby5xdWVzdC5uYW1lO1xuXHRcdFx0c3dpdGNoKHF1ZXN0TmFtZSkge1xuXHRcdFx0XHRjYXNlIFwidW5pdGFyeVwiOlxuXHRcdFx0XHRjYXNlIFwiY29udHJvbGxlZFVuaXRhcnlcIjoge1xuXHRcdFx0XHRcdG1hdHJpeCA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV0uZXhwb3J0SW5mby5xdWVzdC5tYXRyaXg7XG5cdFx0XHRcdFx0dmFyIHF1ZXN0UGFyYW1zID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXS5leHBvcnRJbmZvLnF1ZXN0LnBhcmFtcztcblx0XHRcdFx0XHRxdWVzdCArPSBcInZvaWQgXCIgKyBnYXRlTmFtZSArIFwiKFF1cmVnIHF1Yml0cywgY29uc3QgaW50IHFcIjtcblx0XHRcdFx0XHRpZihxdWVzdE5hbWUgPT0gXCJjb250cm9sbGVkVW5pdGFyeVwiKSB7XG5cdFx0XHRcdFx0XHRxdWVzdCArPSBcIjEsIGNvbnN0IGludCBxMlwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAocXVlc3RQYXJhbXMpIHtcblx0XHRcdFx0XHRcdGZvcih2YXIgaj0wOyBqIDwgcXVlc3RQYXJhbXMubGVuZ3RoOyBqKyspIHtcblx0XHRcdFx0XHRcdFx0cXVlc3QgKz0gXCIsIGRvdWJsZSBcIiArIHF1ZXN0UGFyYW1zW2pdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRxdWVzdCArPSBcIikge1xcblwiO1xuXHRcdFx0XHRcdHF1ZXN0ICs9IFwiICAgIENvbXBsZXhNYXRyaXgyIHU7XFxuXCI7XG5cdFx0XHRcdFx0cXVlc3QgKz0gXCIgICAgdS5yMGMwID0gKENvbXBsZXgpIHsucmVhbD1cIiArIG1hdHJpeFswXVswXVswXSArIFwiLCAuaW1hZz0gXCIgKyBtYXRyaXhbMF1bMF1bMV0gKyBcIn07XFxuXCI7XG5cdFx0XHRcdFx0cXVlc3QgKz0gXCIgICAgdS5yMGMxID0gKENvbXBsZXgpIHsucmVhbD1cIiArIG1hdHJpeFswXVsxXVswXSArIFwiLCAuaW1hZz0gXCIgKyBtYXRyaXhbMF1bMV1bMV0gKyBcIn07XFxuXCI7XG5cdFx0XHRcdFx0cXVlc3QgKz0gXCIgICAgdS5yMWMwID0gKENvbXBsZXgpIHsucmVhbD1cIiArIG1hdHJpeFsxXVswXVswXSArIFwiLCAuaW1hZz0gXCIgKyBtYXRyaXhbMV1bMF1bMV0gKyBcIn07XFxuXCI7XG5cdFx0XHRcdFx0cXVlc3QgKz0gXCIgICAgdS5yMWMxID0gKENvbXBsZXgpIHsucmVhbD1cIiArIG1hdHJpeFsxXVsxXVswXSArIFwiLCAuaW1hZz0gXCIgKyBtYXRyaXhbMV1bMV1bMV0gKyBcIn07XFxuXCI7XG5cdFx0XHRcdFx0cXVlc3QgKz0gXCIgICAgXCIgKyBxdWVzdE5hbWUgKyBcIihxdWJpdHMsIHFcIlxuXHRcdFx0XHRcdGlmKHF1ZXN0TmFtZSA9PSBcImNvbnRyb2xsZWRVbml0YXJ5XCIpIHtcblx0XHRcdFx0XHRcdHF1ZXN0ICs9IFwiMSwgcTJcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cXVlc3QgKz0gXCIsIHUpO1xcbn1cXG5cXG5cIjtcblx0XHRcdFx0fSBicmVhaztcblx0XHRcdFx0ZGVmYXVsdDogeyBxdWVzdCArPSB0aGlzLmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdLmV4cG9ydEluZm8ucXVlc3QuZnVuYyArIFwiXFxuXFxuXCI7IH0gYnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGN1c3RvbVF1RVNULmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRxdWVzdCArPSBjdXN0b21RdUVTVFtpXTtcblx0XHR9XG5cblx0XHRxdWVzdCArPSBcImludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHtcXG5cIjtcblx0XHRxdWVzdCArPSBcIiAgICBRdUVTVEVudiBlbnYgPSBjcmVhdGVRdUVTVEVudigpO1xcblwiO1xuXHRcdHF1ZXN0ICs9IFwiICAgIFF1cmVnIHF1Yml0cyA9IGNyZWF0ZVF1cmVnKFwiICsgY2lyY3VpdC5udW1RdWJpdHMgK1wiLCBlbnYpO1xcblwiO1xuXHRcdHF1ZXN0ICs9IFwiICAgIGludCBtZWFzdXJlZFtcIiArIGNpcmN1aXQubnVtUXViaXRzICtcIl07XFxuXFxuXCI7XG5cdH1cblxuXHRxdWVzdCArPSBcIlxcblwiO1xuXG5cdHZhciBudW1Db2xzID0gY2lyY3VpdC5udW1Db2xzKCk7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKSB7XG5cdFx0XHRcdFx0cXVlc3QgKz0gXCJpZihcIiArIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyArIFwiPT1cIiArIGdhdGUub3B0aW9ucy5jb25kaXRpb24udmFsdWUgKyBcIikge1xcblwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIGdhdGVOYW1lID0gZ2F0ZS5uYW1lO1xuXHRcdFx0XHR2YXIgZ2F0ZVBhcmFtcyA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zID8gZ2F0ZS5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXHRcdFx0XHR2YXIgZ2F0ZURlZiA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV07XG5cblx0XHRcdFx0aWYoZ2F0ZU5hbWUgPT0gXCJtZWFzdXJlXCIpIHtcblx0XHRcdFx0XHRxdWVzdCArPSBcIiAgICBtZWFzdXJlZFtcIiArIGdhdGUud2lyZXNbMF0gKyBcIl0gPSBtZWFzdXJlKHF1Yml0cywgXCIgKyBnYXRlLndpcmVzWzBdO1xuXHRcdFx0XHR9IGVsc2UgaWYoZ2F0ZURlZikge1xuXHRcdFx0XHRcdHZhciBxdWVzdE5hbWUgPSBnYXRlRGVmLmV4cG9ydEluZm8ucXVlc3QubmFtZTtcblx0XHRcdFx0XHR2YXIgcXVlc3RQYXJhbXMgPSBnYXRlRGVmLmV4cG9ydEluZm8ucXVlc3QucGFyYW1zO1xuXG5cdFx0XHRcdFx0aWYoZnVuY3Rpb25zLmluY2x1ZGVzKHF1ZXN0TmFtZSkpIHtcblx0XHRcdFx0XHRcdHF1ZXN0ICs9IFwiICAgIFwiICsgZ2F0ZU5hbWUgKyBcIihxdWJpdHNcIjtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cXVlc3QgKz0gXCIgICAgXCIgKyBxdWVzdE5hbWUgKyBcIihxdWJpdHNcIjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdFx0XHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0XHRcdFx0XHRcdFx0cXVlc3QgKz0gXCIsIHFcIiArIGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cXVlc3QgKz0gXCIsIFwiICsgZ2F0ZS53aXJlc1t3XTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKHF1ZXN0UGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRzd2l0Y2gocXVlc3ROYW1lKXtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcImNvbXBhY3RVbml0YXJ5XCI6IHtcblx0XHRcdFx0XHRcdFx0XHRxdWVzdCArPSBcIiwgXCIgKyBxdWVzdFBhcmFtcy5hbHBoYTtcblx0XHRcdFx0XHRcdFx0XHRxdWVzdCArPSBcIiwgXCIgKyBxdWVzdFBhcmFtcy5iZXRhO1xuXHRcdFx0XHRcdFx0XHR9IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwicGhhc2VTaGlmdFwiOlxuXHRcdFx0XHRcdFx0XHRjYXNlIFwiY29udHJvbGxlZFBoYXNlU2hpZnRcIjoge1xuXHRcdFx0XHRcdFx0XHRcdGlmKHF1ZXN0UGFyYW1zLnRoZXRhKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWVzdCArPSBcIiwgXCIgKyBxdWVzdFBhcmFtcy50aGV0YTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gYnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGdhdGVEZWYgPSB0aGlzLmN1c3RvbUdhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0XHRxdWVzdCArPSBcIiAgICBxdWJpdHMgPSBcIiArIGdhdGVOYW1lICsgXCIocXViaXRzXCI7XG5cblx0XHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdFx0XHRxdWVzdCArPSBcIiwgXCIgKyBnYXRlLndpcmVzW3ddO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKGdhdGVQYXJhbXMpIHtcblx0XHRcdFx0XHR2YXIgZ2F0ZURlZiA9IHRoaXMuYmFzaWNHYXRlc1tnYXRlTmFtZV07XG5cdFx0XHRcdFx0aWYoIWdhdGVEZWYpIHtcblx0XHRcdFx0XHRcdGdhdGVEZWYgPSB0aGlzLmN1c3RvbUdhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihnYXRlRGVmKSB7XG5cdFx0XHRcdFx0XHR2YXIgcGFyYW1EZWYgPSBnYXRlRGVmLnBhcmFtcyB8fCBbXTtcblx0XHRcdFx0XHRcdHZhciBwYXJhbUNvdW50ID0gcGFyYW1EZWYubGVuZ3RoO1xuXG5cdFx0XHRcdFx0XHRpZihwYXJhbUNvdW50KSB7XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgcCA9IDA7IHAgPCBwYXJhbUNvdW50OyBwKyspIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1OYW1lID0gcGFyYW1EZWZbcF07XG5cdFx0XHRcdFx0XHRcdFx0cXVlc3QgKz0gXCIsIFwiICsgZ2F0ZVBhcmFtc1twYXJhbU5hbWVdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cXVlc3QgKz0gXCIpO1xcblwiO1xuXG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZykge1xuXHRcdFx0XHRcdHF1ZXN0ICs9IFwifVxcblwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHF1ZXN0ICs9IFwiXFxuICAgIHJldHVybiBxdWJpdHM7XFxufVxcblxcblwiO1xuXHR9IGVsc2Uge1xuXHRcdHF1ZXN0ICs9IFwiXFxuICAgIGRlc3Ryb3lRdXJlZyhxdWJpdHMsIGVudik7XFxuXCI7XG5cdFx0cXVlc3QgKz0gXCIgICAgZGVzdHJveVF1RVNURW52KGVudik7XFxuXCI7XG5cdFx0cXVlc3QgKz0gXCIgICAgcmV0dXJuIDA7XFxufVxcblwiO1xuXHR9XG5cblx0cmV0dXJuIHF1ZXN0O1xufTtcblxuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0VG9RQVNNID0gZnVuY3Rpb24ob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSwgY2lyY3VpdFJlcGxhY2VtZW50LCBpbnNpZGVTdWJtb2R1bGUpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGNvbW1lbnQgPSBvcHRpb25zLmNvbW1lbnQ7XG5cdHZhciBkZWNvbXBvc2UgPSBvcHRpb25zLmRlY29tcG9zZTtcblx0dmFyIGNvbXBhdGliaWxpdHlNb2RlID0gb3B0aW9ucy5jb21wYXRpYmlsaXR5TW9kZTtcblxuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0dmFyIGdsb2JhbFBhcmFtcyA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucGFyYW1zID8gdGhpcy5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXG5cdHZhciBtYXRoVG9TdHJpbmdIYW5kbGVyID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucykge1xuXHRcdGlmKG5vZGUuaXNTeW1ib2xOb2RlKSB7XG5cdFx0XHRpZighY29tcGF0aWJpbGl0eU1vZGUgJiYgc2VsZi5wYXJhbXMuaW5kZXhPZihub2RlLm5hbWUpID49IDApIHtcblx0XHRcdFx0cmV0dXJuIGdsb2JhbFBhcmFtc1tub2RlLm5hbWVdO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR2YXIgY2lyY3VpdCA9IG51bGw7XG5cblx0Ly8gZGVjb21wb3NlID9cblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZShkZWNvbXBvc2UpKTtcblxuXHR2YXIgcWFzbSA9IFwiXCI7XG5cblx0Ly8gY29tbWVudFxuXHRpZihjb21tZW50KSB7XG5cdFx0dmFyIGNvbW0gPSAoY29tbWVudCB8fCBcIlwiKS5zcGxpdChcIlxcblwiKTtcblx0XHRjb21tLm1hcChmdW5jdGlvbihjbGluZSkge1xuXHRcdFx0aWYoY2xpbmUubGVuZ3RoID49IDIgJiYgY2xpbmVbMF0gIT0gXCIvXCIgJiYgY2xpbmVbMV0gIT0gXCIvXCIpIHtcblx0XHRcdFx0cWFzbSArPSBcIi8vIFwiO1xuXHRcdFx0fVxuXHRcdFx0cWFzbSArPSBjbGluZTtcblx0XHRcdHFhc20gKz0gXCJcXG5cIjtcblx0XHR9KTtcblx0fVxuXG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRxYXNtICs9IFwiZ2F0ZSBcIiArIGV4cG9ydEFzR2F0ZU5hbWU7XG5cblx0XHRpZihjaXJjdWl0LnBhcmFtcyAmJiBjaXJjdWl0LnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdHFhc20gKz0gXCIoXCI7XG5cdFx0XHRmb3IodmFyIHBjID0gMDsgcGMgPCBjaXJjdWl0LnBhcmFtcy5sZW5ndGg7IHBjKyspIHtcblx0XHRcdFx0aWYocGMgPiAwKSB7XG5cdFx0XHRcdFx0cWFzbSArPSBcIiwgXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cWFzbSArPSBjaXJjdWl0LnBhcmFtc1twY107XG5cdFx0XHR9XG5cdFx0XHRxYXNtICs9IFwiKVwiO1xuXHRcdH1cblxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0Lm51bVF1Yml0czsgaSsrKSB7XG5cdFx0XHRpZihpID09IDApIHtcblx0XHRcdFx0cWFzbSArPSBcIiBcIjtcblx0XHRcdH1cblx0XHRcdGlmKGkgPiAwKSB7XG5cdFx0XHRcdHFhc20gKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0cWFzbSArPSBxdWJpdExldHRlcihpLCBjaXJjdWl0Lm51bVF1Yml0cyk7XG5cdFx0fVxuXHRcdHFhc20gKz0gXCJcXG57XFxuXCI7XG5cdH0gZWxzZSB7XG5cdFx0aWYoIWNpcmN1aXRSZXBsYWNlbWVudCl7XG5cdFx0XHRxYXNtICs9IFwiT1BFTlFBU00gMi4wO1xcblwiO1xuXHRcdFx0cWFzbSArPSBcImluY2x1ZGUgXFxcInFlbGliMS5pbmNcXFwiO1xcblwiO1xuXHRcdFx0cWFzbSArPSBcInFyZWcgcVtcIiArIGNpcmN1aXQubnVtUXViaXRzICsgXCJdO1xcblwiO1xuXG5cdFx0XHRmb3IodmFyIGNyZWdOYW1lIGluIGNpcmN1aXQuY3JlZ3MpIHtcblx0XHRcdFx0cWFzbSArPSBcImNyZWcgXCIgKyBjcmVnTmFtZSArIFwiW1wiICsgKGNpcmN1aXQuY3JlZ3NbY3JlZ05hbWVdLmxlbmd0aCB8fCAxKSArIFwiXTtcXG5cIjtcblx0XHRcdH1cblxuXHRcdFx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdFx0XHRpZighZGVjb21wb3NlKSB7XG5cdFx0XHRcdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRcdGlmKCFiYXNpY0dhdGUpIHtcblx0XHRcdFx0XHRcdHZhciBjdXN0b21HYXRlID0gc2VsZi5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRcdFx0aWYoY3VzdG9tR2F0ZSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgY3VzdG9tQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0XHRjdXN0b21DaXJjdWl0LmxvYWQoY3VzdG9tR2F0ZSk7XG5cdFx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbW1lbnQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRjb21wYXRpYmlsaXR5TW9kZTogY29tcGF0aWJpbGl0eU1vZGVcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0cWFzbSArPSBjdXN0b21DaXJjdWl0LmV4cG9ydFRvUUFTTShuZXdPcHRpb25zLCB1c2VkR2F0ZU5hbWUsIGZhbHNlLCBmYWxzZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR2YXIgbnVtQ29scyA9IGNpcmN1aXQubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGNpcmN1aXQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdHZhciBxYXNtUmVwbGFjZW1lbnQgPSBudWxsO1xuXHRcdFx0dmFyIHFhc21FcXVpdmFsZW50ID0gbnVsbDtcblx0XHRcdFxuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdHZhciBxYXNtTmFtZSA9IGdhdGUubmFtZTtcblx0XHRcdFx0aWYoIWNvbXBhdGliaWxpdHlNb2RlKSB7XG5cdFx0XHRcdFx0dmFyIGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZS5uYW1lKTtcblx0XHRcdFx0XHRpZihnYXRlRGVmKXtcblx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mbyl7XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtLm5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRxYXNtTmFtZSA9IGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtLm5hbWU7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZihnYXRlRGVmLmV4cG9ydEluZm8ucWFzbSAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucWFzbS5yZXBsYWNlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRcdHFhc21SZXBsYWNlbWVudCA9IGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtLnJlcGxhY2VtZW50O1xuXHRcdFx0XHRcdFx0XHRcdHFhc21SZXBsYWNlbWVudC5tYXAoZnVuY3Rpb24ocmVwbGFjZW1lbnQpe1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJlcGxhY2VtZW50Q2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVwbGFjZW1lbnRDaXJjdWl0LmNyZWdzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzZWxmLmNyZWdzKSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtcyA9IE9iamVjdC5rZXlzKGdhdGUub3B0aW9ucy5wYXJhbXMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmVwbGFjZW1lbnRQYXJhbXMgPSBPYmplY3Qua2V5cyhyZXBsYWNlbWVudC5wYXJhbXMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbXMubWFwKGZ1bmN0aW9uKHBhcmFtKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihyZXBsYWNlbWVudFBhcmFtcy5pbmRleE9mKHBhcmFtKSA+PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXBsYWNlbWVudC5wYXJhbXNbcGFyYW1dID0gZ2F0ZS5vcHRpb25zLnBhcmFtc1twYXJhbV07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJlcGxhY2VtZW50Q29uZGl0aW9uID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gPyBnYXRlLm9wdGlvbnMuY29uZGl0aW9uIDoge307XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXBsYWNlbWVudENpcmN1aXQuYWRkR2F0ZShyZXBsYWNlbWVudC5uYW1lLCBjb2x1bW4sIGdhdGUud2lyZXMsIHsgcGFyYW1zOiByZXBsYWNlbWVudC5wYXJhbXMsIGNvbmRpdGlvbjogcmVwbGFjZW1lbnRDb25kaXRpb24gfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29tbWVudDogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y29tcGF0aWJpbGl0eU1vZGU6IGNvbXBhdGliaWxpdHlNb2RlXG5cdFx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRcdFx0cWFzbSArPSByZXBsYWNlbWVudENpcmN1aXQuZXhwb3J0VG9RQVNNKG5ld09wdGlvbnMsIGZhbHNlLCB0cnVlLCAhIWV4cG9ydEFzR2F0ZU5hbWUgfHwgaW5zaWRlU3VibW9kdWxlKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtLmVxdWl2YWxlbnQpe1xuXHRcdFx0XHRcdFx0XHRcdHFhc21FcXVpdmFsZW50ID0gZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20uZXF1aXZhbGVudDtcblx0XHRcdFx0XHRcdFx0XHRxYXNtRXF1aXZhbGVudC5tYXAoZnVuY3Rpb24oZXF1aXZhbGVudCl7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZXF1aXZhbGVudENpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdGVxdWl2YWxlbnRDaXJjdWl0LmNyZWdzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzZWxmLmNyZWdzKSk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdHZhciBnYXRlV2lyZXMgPSBlcXVpdmFsZW50LndpcmVzLmxlbmd0aCA+IDEgPyBnYXRlLndpcmVzIDogZ2F0ZS53aXJlc1tlcXVpdmFsZW50LndpcmVzWzBdXTtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBlcVBhcmFtcyA9IHt9O1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoZXF1aXZhbGVudC5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gLS0tXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGVxdWl2YWxlbnQgZ2F0ZSBwYXJhbXMgY2FuIGNvbnRhaW4gdmFyaWFibGUgZnJvbSBnYXRlIHBhcmFtc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBFdmFsdWF0ZSBnYXRlJ3MgcGFyYW1zXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBnYXRlUGFyYW1zID0ge307XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBnYXRlUGFyYW1OYW1lIGluIGdhdGUub3B0aW9ucy5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGdhdGVQYXJhbXNbZ2F0ZVBhcmFtTmFtZV0gPSBtYXRoLmV2YWx1YXRlKGdhdGUub3B0aW9ucy5wYXJhbXNbZ2F0ZVBhcmFtTmFtZV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEV2YWx1YXRlIGVxdWl2YWxlbnQgZ2F0ZSdzIHBhcmFtc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGVxUGFyYW1OYW1lIGluIGVxdWl2YWxlbnQucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZXFQYXJhbXNbZXFQYXJhbU5hbWVdID0gbWF0aC5ldmFsdWF0ZShlcXVpdmFsZW50LnBhcmFtc1tlcVBhcmFtTmFtZV0sIGdhdGVQYXJhbXMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdHZhciBlcUNvbmRpdGlvbiA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uID8gZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiA6IHt9O1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRlcXVpdmFsZW50Q2lyY3VpdC5hZGRHYXRlKGVxdWl2YWxlbnQubmFtZSwgY29sdW1uLCBnYXRlV2lyZXMsIHsgcGFyYW1zOiBlcVBhcmFtcywgY29uZGl0aW9uOiBlcUNvbmRpdGlvbiB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb21tZW50OiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkZWNvbXBvc2U6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb21wYXRpYmlsaXR5TW9kZTogY29tcGF0aWJpbGl0eU1vZGVcblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0XHRxYXNtICs9IGVxdWl2YWxlbnRDaXJjdWl0LmV4cG9ydFRvUUFTTShuZXdPcHRpb25zLCBcIlwiLCB0cnVlLCAhIWV4cG9ydEFzR2F0ZU5hbWUgfHwgaW5zaWRlU3VibW9kdWxlKTtcblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKCFxYXNtUmVwbGFjZW1lbnQgJiYgIXFhc21FcXVpdmFsZW50KSB7XG5cdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSB8fCBpbnNpZGVTdWJtb2R1bGUpIHtcblx0XHRcdFx0XHRcdHFhc20gKz0gXCIgIFwiO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpIHtcblx0XHRcdFx0XHRcdHFhc20gKz0gXCJpZihcIiArIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyArIFwiPT1cIiArIGdhdGUub3B0aW9ucy5jb25kaXRpb24udmFsdWUgKyBcIikgXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoKCFxYXNtUmVwbGFjZW1lbnQgJiYgIXFhc21FcXVpdmFsZW50KSB8fCBjb21wYXRpYmlsaXR5TW9kZSkge1xuXHRcdFx0XHRcdHZhciBnYXRlTmFtZSA9IGdhdGUubmFtZTtcblx0XHRcdFx0XHR2YXIgZ2F0ZVBhcmFtcyA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zID8gZ2F0ZS5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXG5cdFx0XHRcdFx0cWFzbSArPSBjb21wYXRpYmlsaXR5TW9kZSA/IGdhdGUubmFtZSA6IHFhc21OYW1lO1xuXG5cdFx0XHRcdFx0aWYoZ2F0ZVBhcmFtcykge1xuXHRcdFx0XHRcdFx0dmFyIGdhdGVEZWYgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0XHRcdFx0aWYoIWdhdGVEZWYpIHtcblx0XHRcdFx0XHRcdFx0Z2F0ZURlZiA9IGNpcmN1aXQuY3VzdG9tR2F0ZXNbZ2F0ZU5hbWVdO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBwYXJhbURlZiA9IGdhdGVEZWYucGFyYW1zIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1Db3VudCA9IHBhcmFtRGVmLmxlbmd0aDtcblx0XHRcdFx0XHRcdFx0aWYocGFyYW1Db3VudCkge1xuXHRcdFx0XHRcdFx0XHRcdHFhc20gKz0gXCIgKFwiO1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgcCA9IDA7IHAgPCBwYXJhbUNvdW50OyBwKyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKHAgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHFhc20gKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IHBhcmFtRGVmW3BdO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1WYWx1ZSA9IGdhdGVQYXJhbXNbcGFyYW1OYW1lXTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKCFleHBvcnRBc0dhdGVOYW1lICYmICFpbnNpZGVTdWJtb2R1bGUgJiYgIWNvbXBhdGliaWxpdHlNb2RlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW3BhcmFtTmFtZV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbVZhbHVlID0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRxYXNtICs9IHBhcmFtVmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHFhc20gKz0gXCIpXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cdFxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGZvcih2YXIgdyA9IDA7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKSB7XG5cdFx0XHRcdFx0XHRpZih3ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRxYXNtICs9IFwiLFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSB8fCBpbnNpZGVTdWJtb2R1bGUpIHtcblx0XHRcdFx0XHRcdFx0cWFzbSArPSBcIiBcIiArIHF1Yml0TGV0dGVyKGdhdGUud2lyZXNbd10sIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHFhc20gKz0gXCIgcVtcIiArIGdhdGUud2lyZXNbd10gKyBcIl1cIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihnYXRlTmFtZSA9PSBcIm1lYXN1cmVcIiAmJiBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNyZWcpIHtcblx0XHRcdFx0XHRcdHFhc20gKz0gXCIgLT4gXCI7XG5cdFx0XHRcdFx0XHRxYXNtICs9IGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgKyBcIltcIiArIGdhdGUub3B0aW9ucy5jcmVnLmJpdCArIFwiXVwiO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHFhc20gKz0gXCI7XFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZihleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0cWFzbSArPSBcIn1cXG5cXG5cIjtcblx0fVxuXG5cdHJldHVybiBxYXNtO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvUHlxdWlsID0gZnVuY3Rpb24ob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgY29tbWVudCA9IG9wdGlvbnMuY29tbWVudDtcblx0dmFyIGRlY29tcG9zZSA9IG9wdGlvbnMuZGVjb21wb3NlO1xuXHR2YXIgdmVyc2lvblN0ciA9IG9wdGlvbnMudmVyc2lvblN0cjtcblx0dmFyIGxhdHRpY2UgPSBvcHRpb25zLmxhdHRpY2U7XG5cdHZhciBhc1FWTSA9IG9wdGlvbnMuYXNRVk07XG5cdHZhciBhc0p1cHl0ZXIgPSBvcHRpb25zLmFzSnVweXRlcjtcblx0dmFyIHNob3RzID0gb3B0aW9ucy5zaG90cztcblx0dmFyIGh5YnJpZCA9IG9wdGlvbnMuaHlicmlkO1xuXG5cdHZhciBzZWxmID0gdGhpcztcblxuXHR2YXIgdmVyc2lvbiA9IHBhcnNlRmxvYXQodmVyc2lvblN0ciB8fCBcIjIuMTJcIik7XG5cdGlmKGlzTmFOKHZlcnNpb24pKSB7XG5cdFx0dmVyc2lvbiA9IDIuMTtcblx0fVxuXG5cdGlmKCFzaG90cykge1xuXHRcdHNob3RzID0gMTAyNDtcblx0fVxuXG5cdGlmKHR5cGVvZiBoeWJyaWQgPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdGh5YnJpZCA9IHRoaXMub3B0aW9ucyA/ICEhdGhpcy5vcHRpb25zLmh5YnJpZCA6IGZhbHNlO1xuXHR9XG5cblx0Ly8gZGVjb21wb3NlID9cblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZShkZWNvbXBvc2UpKTtcblxuXHR2YXIgbWF0aFRvU3RyaW5nSGFuZGxlciA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMpIHtcblx0XHRpZihub2RlLmlzU3ltYm9sTm9kZSkge1xuXHRcdFx0dmFyIG51bXB5cyA9IFtcInBpXCIsIFwic2luXCIsIFwiY29zXCIsIFwidGFuXCIsIFwiYXNpblwiLCBcImFjb3NcIiwgXCJhdGFuXCJdO1xuXHRcdFx0aWYobnVtcHlzLmluZGV4T2Yobm9kZS5uYW1lKSA+PSAwKSB7XG5cdFx0XHRcdHJldHVybiBcIm5wLlwiICsgbm9kZS5uYW1lO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihzZWxmLnBhcmFtcy5pbmRleE9mKG5vZGUubmFtZSkgPj0gMCAmJiBoeWJyaWQpIHtcblx0XHRcdFx0cmV0dXJuIFwicGFyYW1zW1wiICsgc2VsZi5wYXJhbXMuaW5kZXhPZihub2RlLm5hbWUpICsgXCJdXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBhZGp1c3RJZGVudGF0aW9uID0gZnVuY3Rpb24oYWRkU3RyLCBpZGVudCkge1xuXHRcdHZhciBzdHIgPSBcIlwiO1xuXG5cdFx0Ly8gYWRkIHVzZXIgZGVmaW5lZCBjb3N0IGZ1bmN0aW9uIHdpdGggcHJvcGVyIGlkZW50YXRpb25cblx0XHR2YXIgY2ZMaW5lcyA9IGFkZFN0ci5zcGxpdChcIlxcblwiKTtcblx0XHR2YXIgbWluSWRlbnQgPSAtMTtcblx0XHRjZkxpbmVzLm1hcChmdW5jdGlvbihjZkxpbmUpIHtcblx0XHRcdHZhciB0bXBJZGVudCA9IGNmTGluZS5zZWFyY2goL1xcUy8pO1xuXHRcdFx0aWYodG1wSWRlbnQgPj0gMCAmJiAobWluSWRlbnQgPCAwIHx8IHRtcElkZW50IDwgbWluSWRlbnQpKSB7XG5cdFx0XHRcdG1pbklkZW50ID0gdG1wSWRlbnQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRpZihtaW5JZGVudCA8IDApIHtcblx0XHRcdG1pbklkZW50ID0gMDtcblx0XHR9XG5cblx0XHR2YXIgYWRkSWRlbnQgPSBcIlwiO1xuXHRcdGlmKG1pbklkZW50IDwgaWRlbnQubGVuZ3RoKSB7XG5cdFx0XHRmb3IodmFyIHRtcCA9IDA7IHRtcCA8IChpZGVudC5sZW5ndGggLSBtaW5JZGVudCk7IHRtcCsrKSB7XG5cdFx0XHRcdGFkZElkZW50ICs9IFwiIFwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGNmTGluZXMubWFwKGZ1bmN0aW9uKGNmTGluZSkge1xuXHRcdFx0c3RyICs9IGFkZElkZW50ICsgY2ZMaW5lICsgXCJcXG5cIjtcblx0XHR9KTtcblxuXHRcdHJldHVybiBzdHI7XG5cdH07XG5cblx0dmFyIGltcG9ydEdhdGVzID0gXCJcIjtcblx0dmFyIGRlZlBhcmFtcyA9IFtdO1xuXHR2YXIgZGVmR2F0ZXMgPSBcIlwiO1xuXHR2YXIgZGVmUnVuID0gXCJcIjtcblx0dmFyIGRlZkFycmF5cyA9IFwiXCI7XG5cdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHR2YXIgZ290TWVhc3VyZW1lbnQgPSBjaXJjdWl0LmdvdE1lYXN1cmVtZW50KCk7XG5cblx0dmFyIGRlZkdhdGVOYW1lcyA9IFtdO1xuXHR2YXIgZGVmQ2lyY05hbWVzID0gW107XG5cdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdGlmKGJhc2ljR2F0ZSkge1xuXHRcdFx0aWYoYmFzaWNHYXRlLmV4cG9ydEluZm8gJiYgYmFzaWNHYXRlLmV4cG9ydEluZm8ucHlxdWlsKSB7XG5cdFx0XHRcdHZhciBxdWlsSW5mbyA9IGJhc2ljR2F0ZS5leHBvcnRJbmZvLnB5cXVpbDtcblx0XHRcdFx0aWYocXVpbEluZm8uYXJyYXkpIHtcblxuXHRcdFx0XHRcdC8vIGRlZmdhdGVcblxuXHRcdFx0XHRcdHZhciBwYXJhbUxpc3QgPSBcIlwiO1xuXHRcdFx0XHRcdGlmKHF1aWxJbmZvLnBhcmFtcykge1xuXHRcdFx0XHRcdFx0cGFyYW1MaXN0ICs9IFwiLCBbXCI7XG5cdFx0XHRcdFx0XHRxdWlsSW5mby5wYXJhbXMubWFwKGZ1bmN0aW9uKHBhcmFtTmFtZSwgcGFyYW1JbmRleCkge1xuXHRcdFx0XHRcdFx0XHRpZihwYXJhbUluZGV4ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdHBhcmFtTGlzdCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cGFyYW1MaXN0ICs9IFwicF9cIiArIHBhcmFtTmFtZTtcblx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtVGV4dCA9IFwicF9cIiArIHBhcmFtTmFtZSArIFwiID0gUGFyYW1ldGVyKFxcJ1wiICsgcGFyYW1OYW1lICsgXCJcXCcpXCI7XG5cdFx0XHRcdFx0XHRcdGlmKGRlZlBhcmFtcy5pbmRleE9mKHBhcmFtVGV4dCkgPCAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZGVmUGFyYW1zLnB1c2gocGFyYW1UZXh0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRwYXJhbUxpc3QgKz0gXCJdXCI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZGVmUnVuICs9IFwicC5pbnN0KFwiICsgcXVpbEluZm8ubmFtZSArIFwiX2RlZmdhdGUpXFxuXCI7XG5cdFx0XHRcdFx0ZGVmQXJyYXlzICs9IHF1aWxJbmZvLm5hbWUgKyBcIl9hcnJheSA9IG5wLmFycmF5KFwiICsgcXVpbEluZm8uYXJyYXkgKyBcIilcXG5cIjtcblx0XHRcdFx0XHRkZWZHYXRlcyArPSBxdWlsSW5mby5uYW1lICsgXCJfZGVmZ2F0ZSA9IERlZkdhdGUoXFwnXCIgKyBxdWlsSW5mby5uYW1lICsgXCJcXCcsIFwiICsgcXVpbEluZm8ubmFtZSArIFwiX2FycmF5XCIgKyBwYXJhbUxpc3QgKyBcIilcXG5cIjtcblx0XHRcdFx0XHRkZWZHYXRlcyArPSBxdWlsSW5mby5uYW1lICsgXCIgPSBcIiArIHF1aWxJbmZvLm5hbWUgKyBcIl9kZWZnYXRlLmdldF9jb25zdHJ1Y3RvcigpXFxuXCI7XG5cblx0XHRcdFx0XHRkZWZHYXRlTmFtZXMucHVzaChxdWlsSW5mby5uYW1lKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgaW1wb3J0TmFtZSA9IFwiXCI7XG5cdFx0XHRcdFx0aWYocXVpbEluZm8ucmVwbGFjZW1lbnQpIHtcblx0XHRcdFx0XHRcdHZhciBiZyA9IGNpcmN1aXQuYmFzaWNHYXRlc1txdWlsSW5mby5yZXBsYWNlbWVudC5uYW1lXTtcblx0XHRcdFx0XHRcdGlmKGJnKSB7XG5cdFx0XHRcdFx0XHRcdGlmKGJnLmV4cG9ydEluZm8pIHtcblx0XHRcdFx0XHRcdFx0XHRpZihiZy5leHBvcnRJbmZvLnB5cXVpbCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aW1wb3J0TmFtZSA9IGJnLmV4cG9ydEluZm8ucHlxdWlsLm5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGJnLmV4cG9ydEluZm8ucXVpbCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpbXBvcnROYW1lID0gYmcuZXhwb3J0SW5mby5xdWlsLm5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGltcG9ydE5hbWUgPSBxdWlsSW5mby5uYW1lO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGltcG9ydE5hbWUpIHtcblx0XHRcdFx0XHRcdGlmKGltcG9ydEdhdGVzKSB7XG5cdFx0XHRcdFx0XHRcdGltcG9ydEdhdGVzICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGltcG9ydEdhdGVzICs9IGltcG9ydE5hbWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZihiYXNpY0dhdGUuZXhwb3J0SW5mbyAmJiBiYXNpY0dhdGUuZXhwb3J0SW5mby5xdWlsKSB7XG5cdFx0XHRcdFx0dmFyIHF1aWxJbmZvID0gYmFzaWNHYXRlLmV4cG9ydEluZm8ucXVpbDtcblxuXHRcdFx0XHRcdGlmKCFxdWlsSW5mby5kZWZnYXRlKSB7XG5cblx0XHRcdFx0XHRcdHZhciBpbXBvcnROYW1lID0gXCJcIjtcblx0XHRcdFx0XHRcdGlmKHF1aWxJbmZvLnJlcGxhY2VtZW50KSB7XG5cdFx0XHRcdFx0XHRcdHZhciBiZyA9IGNpcmN1aXQuYmFzaWNHYXRlc1txdWlsSW5mby5yZXBsYWNlbWVudC5uYW1lXTtcblx0XHRcdFx0XHRcdFx0aWYoYmcpIHtcblx0XHRcdFx0XHRcdFx0XHRpZihiZy5leHBvcnRJbmZvKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZihiZy5leHBvcnRJbmZvLnB5cXVpbCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpbXBvcnROYW1lID0gYmcuZXhwb3J0SW5mby5weXF1aWwubmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGJnLmV4cG9ydEluZm8ucXVpbCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGltcG9ydE5hbWUgPSBiZy5leHBvcnRJbmZvLnF1aWwubmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0aW1wb3J0TmFtZSA9IHF1aWxJbmZvLm5hbWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGltcG9ydE5hbWUpIHtcblx0XHRcdFx0XHRcdFx0aWYoaW1wb3J0R2F0ZXMpIHtcblx0XHRcdFx0XHRcdFx0XHRpbXBvcnRHYXRlcyArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aW1wb3J0R2F0ZXMgKz0gaW1wb3J0TmFtZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBiYXNpYyBnYXRlIG5vdCBzdXBwb3J0ZWQgYnkgcHlxdWlsXG5cdFx0XHRcdFx0Ly8gVE9ETzogYWRkIHB5cXVpbCBkZWZpbmUgZ2F0ZSBjb2RlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdC8vIGltcG9ydCBNT1ZFLCBBTkQsIE9SIGlmIGNpcmN1aXQgaGFzIGNvbmRpdGlvbnNcblx0dmFyIGdvdENvbmRpdGlvbnMgPSBjaXJjdWl0LmdvdENsYXNzaWNhbENvbnRyb2woKTtcblx0aWYoZ290Q29uZGl0aW9ucykge1xuXHRcdGlmKGltcG9ydEdhdGVzKSB7XG5cdFx0XHRpbXBvcnRHYXRlcyArPSBcIiwgXCI7XG5cdFx0fVxuXHRcdGlmKHZlcnNpb24gPCAyKSB7XG5cdFx0XHRpbXBvcnRHYXRlcyArPSBcIkZBTFNFLCBOT1QsIE9SLCBBTkRcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aW1wb3J0R2F0ZXMgKz0gXCJNT1ZFLCBOT1QsIElPUiwgQU5EXCI7XG5cdFx0fVxuXHR9XG5cblx0dmFyIGltcG9ydHNGb3JEZWZnYXRlID0gXCJcIjtcblx0aWYoZGVmR2F0ZXMpIHtcblx0XHRpZih2ZXJzaW9uIDwgMi4xMikge1xuXHRcdFx0aW1wb3J0c0ZvckRlZmdhdGUgPSBcImZyb20gcHlxdWlsLnBhcmFtZXRlcnMgaW1wb3J0IFBhcmFtZXRlciwgcXVpbF9zaW4sIHF1aWxfY29zLCBxdWlsX3NxcnQsIHF1aWxfZXhwLCBxdWlsX2Npc1xcbmZyb20gcHlxdWlsLnF1aWxiYXNlIGltcG9ydCBEZWZHYXRlXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGltcG9ydHNGb3JEZWZnYXRlID0gXCJmcm9tIHB5cXVpbC5xdWlsYXRvbSBpbXBvcnQgUGFyYW1ldGVyLCBxdWlsX3NpbiwgcXVpbF9jb3MsIHF1aWxfc3FydCwgcXVpbF9leHAsIHF1aWxfY2lzXFxuZnJvbSBweXF1aWwucXVpbGJhc2UgaW1wb3J0IERlZkdhdGVcIjtcdFx0XHRcblx0XHR9XG5cdH1cblxuXHR2YXIgcHlxdWlsID0gXCJcIjtcblxuXHQvLyBjb21tZW50XG5cdGlmKGNvbW1lbnQpIHtcblx0XHR2YXIgY29tbSA9IChjb21tZW50IHx8IFwiXCIpLnNwbGl0KFwiXFxuXCIpO1xuXHRcdGNvbW0ubWFwKGZ1bmN0aW9uKGNsaW5lKSB7XG5cdFx0XHRpZihjbGluZS5sZW5ndGggPj0gMSAmJiBjbGluZVswXSAhPSBcIiNcIikge1xuXHRcdFx0XHRweXF1aWwgKz0gXCIjIFwiO1xuXHRcdFx0fVxuXHRcdFx0cHlxdWlsICs9IGNsaW5lO1xuXHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0fSk7XG5cdH1cblxuXHR2YXIgaW5kZW50ID0gXCJcIjtcblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHZhciBhcmdzID0gXCJcIjtcblx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0LnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdGFyZ3MgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0YXJncyArPSBjaXJjdWl0LnBhcmFtc1tpXTtcblx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0fVxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0Lm51bVF1Yml0czsgaSsrKSB7XG5cdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0YXJncyArPSBcIiwgXCI7XG5cdFx0XHR9XG5cdFx0XHRhcmdzICs9IFwicVwiICsgaTtcblx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0fVxuXHRcdHB5cXVpbCArPSBcImRlZiBcIiArIGV4cG9ydEFzR2F0ZU5hbWUgKyAoYXJncyA/IFwiKFwiICsgYXJncyArIFwiKVwiIDogXCJcIikgKyBcIjpcXG5cIjtcblx0XHRpbmRlbnQgPSBcIiAgXCI7XG5cdH0gZWxzZSB7XG5cdFx0aWYodmVyc2lvbiA8IDIpIHtcblx0XHRcdHB5cXVpbCArPSBcImZyb20gcHlxdWlsLmFwaSBpbXBvcnQgUVZNQ29ubmVjdGlvblxcblwiO1xuXHRcdFx0cHlxdWlsICs9IFwiZnJvbSBweXF1aWwucXVpbCBpbXBvcnQgUHJvZ3JhbVxcblwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRweXF1aWwgKz0gXCJmcm9tIHB5cXVpbCBpbXBvcnQgUHJvZ3JhbSwgZ2V0X3FjXFxuXCI7XG5cdFx0fVxuXG5cdFx0aWYoaW1wb3J0R2F0ZXMpIHtcblx0XHRcdHB5cXVpbCArPSBcImZyb20gcHlxdWlsLmdhdGVzIGltcG9ydCBcIiArIGltcG9ydEdhdGVzICsgXCJcXG5cIjtcblx0XHR9XG5cdFx0aWYoaW1wb3J0c0ZvckRlZmdhdGUpIHtcblx0XHRcdHB5cXVpbCArPSBpbXBvcnRzRm9yRGVmZ2F0ZSArIFwiXFxuXCI7XG5cdFx0fVxuXG5cdFx0cHlxdWlsICs9IFwiZnJvbSBmdW5jdG9vbHMgaW1wb3J0IHJlZHVjZVxcblwiO1xuXG5cdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRweXF1aWwgKz0gXCJmcm9tIHNjaXB5Lm9wdGltaXplIGltcG9ydCBtaW5pbWl6ZVxcblwiO1xuXHRcdFx0cHlxdWlsICs9IFwiZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlclxcblwiO1xuXG5cdFx0fVxuXG5cdFx0cHlxdWlsICs9IFwiaW1wb3J0IG51bXB5IGFzIG5wXFxuXCI7XG5cblxuXHRcdGlmKHNob3RzKSB7XG5cdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdHB5cXVpbCArPSBcInNob3RzID0gXCIgKyBzaG90cyArIFwiXFxuXCI7XG5cdFx0fVxuXG5cdFx0dmFyIGdsb2JhbFBhcmFtcyA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucGFyYW1zID8gdGhpcy5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXHRcdGlmKHRoaXMucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtTmFtZSA9IHRoaXMucGFyYW1zW2ldO1xuXG5cdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSk7XG5cdFx0XHRcdHZhciBnbG9iYWxQYXJhbVZhbHVlID0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cblx0XHRcdFx0cHlxdWlsICs9IGdsb2JhbFBhcmFtTmFtZSArIFwiID0gXCIgKyBnbG9iYWxQYXJhbVZhbHVlICsgXCJcXG5cIjtcblx0XHRcdH1cblx0XHRcdHB5cXVpbCArPSBcIlxcblwiO1xuXHRcdH1cblxuXHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0cHlxdWlsICs9IFwidG9sZXJhbmNlID0gXCIgKyAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLnRvbGVyYW5jZSA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLnRvbGVyYW5jZSB8fCBcIjAuMDAxXCIgOiBcIjAuMDAxXCIpICsgXCJcXG5cIjtcblx0XHRcdHB5cXVpbCArPSBcIlxcblwiO1xuXHRcdH1cblxuXHRcdGlmKGRlZkdhdGVzKSB7XG5cdFx0XHRkZWZQYXJhbXMubWFwKGZ1bmN0aW9uKGRlZlBhcmFtSXRlbSwgZGVmSW5kZXgpIHtcblx0XHRcdFx0aWYoZGVmSW5kZXggPT0gMCkge1xuXHRcdFx0XHRcdHB5cXVpbCArPSBcIlxcblwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHB5cXVpbCArPSBkZWZQYXJhbUl0ZW0gKyBcIlxcblwiO1xuXHRcdFx0fSk7XG5cdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdHB5cXVpbCArPSBkZWZBcnJheXMgKyBcIlxcblwiO1xuXHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0XHRweXF1aWwgKz0gZGVmR2F0ZXMgKyBcIlxcblwiO1xuXHRcdH1cblx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblxuXHRcdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHRcdGlmKCFkZWNvbXBvc2UpIHtcblx0XHRcdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0XHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0aWYoIWJhc2ljR2F0ZSkge1xuXHRcdFx0XHRcdHZhciBjdXN0b21HYXRlID0gc2VsZi5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRcdGlmKGN1c3RvbUdhdGUpIHtcblx0XHRcdFx0XHRcdHZhciBjdXN0b21DaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRjdXN0b21DaXJjdWl0LmxvYWQoY3VzdG9tR2F0ZSk7XG5cdFx0XHRcdFx0XHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRcdFx0XHRcdFx0Y29tbWVudDogXCJcIixcblx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0dmVyc2lvblN0cjogdmVyc2lvblN0cixcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gY3VzdG9tQ2lyY3VpdC5leHBvcnRUb1B5cXVpbChuZXdPcHRpb25zLCB1c2VkR2F0ZU5hbWUpO1xuXHRcdFx0XHRcdFx0ZGVmQ2lyY05hbWVzLnB1c2godXNlZEdhdGVOYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGlmKGh5YnJpZCkge1xuXHRcdGluZGVudCArPSBcIiAgXCI7XG5cblx0XHRweXF1aWwgKz0gXCJkZWYgb2JqZWN0aXZlX2Z1bmN0aW9uKHBhcmFtcyk6XFxuXCJcblx0fVxuXG5cdGlmKHZlcnNpb24gPj0gMiAmJiAhZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdGlmKGFzUVZNIHx8IGxhdHRpY2UpIHtcblx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAgPSBQcm9ncmFtKCdQUkFHTUEgSU5JVElBTF9SRVdJUklORyBcXFwiUEFSVElBTFxcXCInKVxcblxcblwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwID0gUHJvZ3JhbSgpXFxuXFxuXCI7XG5cdFx0fVxuXG5cdFx0dmFyIHRvdGFsQml0cyA9IGNpcmN1aXQuY3JlZ1RvdGFsQml0cygpO1xuXHRcdGlmKGdvdENvbmRpdGlvbnMpIHtcblx0XHRcdHRvdGFsQml0cyArPSAxO1xuXHRcdH07XG5cdFx0aWYodG90YWxCaXRzKSB7XG5cdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJybyA9IHAuZGVjbGFyZSgncm8nLCBtZW1vcnlfdHlwZT0nQklUJywgbWVtb3J5X3NpemU9XCIgKyB0b3RhbEJpdHMgKyBcIilcXG5cIjtcblx0XHRcdHB5cXVpbCArPSBcIlxcblwiO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwID0gUHJvZ3JhbSgpXFxuXFxuXCI7XG5cdH1cblxuXHRweXF1aWwgKz0gZGVmUnVuID8gKGluZGVudCArIGRlZlJ1biArIFwiXFxuXCIpIDogXCJcIjtcblxuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IGNpcmN1aXQubnVtQ29scygpOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0dmFyIGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZS5uYW1lKTtcblx0XHRcdFx0dmFyIGdhdGVQYXJhbXMgPSBnYXRlUGFyYW1zID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMgPyBnYXRlLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0XHRcdHZhciBxdWlsSW5mbyA9IG51bGw7XG5cdFx0XHRcdGlmKGdhdGVEZWYpIHtcblx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8pIHtcblx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5weXF1aWwgJiYgZ2F0ZURlZi5leHBvcnRJbmZvLnB5cXVpbC5yZXBsYWNlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8ucHlxdWlsLnJlcGxhY2VtZW50LnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdGdhdGVQYXJhbXMgPSBnYXRlRGVmLmV4cG9ydEluZm8ucHlxdWlsLnJlcGxhY2VtZW50LnBhcmFtcztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRnYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGdhdGVEZWYuZXhwb3J0SW5mby5weXF1aWwucmVwbGFjZW1lbnQubmFtZSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8ucXVpbCAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucXVpbC5yZXBsYWNlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsLnJlcGxhY2VtZW50LnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdFx0Z2F0ZVBhcmFtcyA9IGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsLnJlcGxhY2VtZW50LnBhcmFtcztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0Z2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihnYXRlRGVmLmV4cG9ydEluZm8ucXVpbC5yZXBsYWNlbWVudC5uYW1lKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmICYmIGdhdGVEZWYuZXhwb3J0SW5mbykge1xuXHRcdFx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8ucHlxdWlsKSB7XG5cdFx0XHRcdFx0XHRcdFx0cXVpbEluZm8gPSBnYXRlRGVmLmV4cG9ydEluZm8ucHlxdWlsO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsSW5mbyA9IGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHZhciBpc0RlZkdhdGUgPSBmYWxzZTtcblx0XHRcdFx0XHR2YXIgaXNEZWZDaXJjID0gZmFsc2U7XG5cdFx0XHRcdFx0aWYocXVpbEluZm8pIHtcblx0XHRcdFx0XHRcdGlzRGVmR2F0ZSA9IGRlZkdhdGVOYW1lcy5pbmRleE9mKHF1aWxJbmZvLm5hbWUpID49IDA7XG5cdFx0XHRcdFx0XHRpc0RlZkNpcmMgPSBkZWZDaXJjTmFtZXMuaW5kZXhPZihxdWlsSW5mby5uYW1lKSA+PSAwO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpc0RlZkdhdGUgPSBkZWZHYXRlTmFtZXMuaW5kZXhPZihnYXRlLm5hbWUpID49IDA7XG5cdFx0XHRcdFx0XHRpc0RlZkNpcmMgPSBkZWZDaXJjTmFtZXMuaW5kZXhPZihnYXRlLm5hbWUpID49IDA7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIGluc2lkZUNvbnRyb2wgPSBmYWxzZTtcblx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpIHtcblx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0Ly8gRmxvdyBjb250cm9sXG5cdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdGluc2lkZUNvbnRyb2wgPSB0cnVlO1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cblx0XHRcdFx0XHRcdHZhciB0ZXN0Qml0ID0gc2VsZi5jcmVnVG90YWxCaXRzKCk7XG5cdFx0XHRcdFx0XHR2YXIgY29uZGl0aW9uID0gZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbjtcblx0XHRcdFx0XHRcdHZhciBjb25kaXRpb25WYWx1ZSA9IGNvbmRpdGlvbi52YWx1ZSB8fCAwO1xuXHRcdFx0XHRcdFx0dmFyIGNyZWdCYXNlID0gc2VsZi5jcmVnQmFzZShjb25kaXRpb24uY3JlZyk7XG5cblx0XHRcdFx0XHRcdGlmKGNvbmRpdGlvblZhbHVlID09IDApIHtcblx0XHRcdFx0XHRcdFx0dmFyIGNyZWdTaXplID0gc2VsZi5jcmVnc1tjb25kaXRpb24uY3JlZ10ubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRpZih2ZXJzaW9uIDwgMikge1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChGQUxTRShcIiArIHRlc3RCaXQgKyBcIikpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBiaXRJbmRleCA9IDA7IGJpdEluZGV4IDwgY3JlZ1NpemU7IGJpdEluZGV4KyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChPUihcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiLCBcIiArIHRlc3RCaXQgKyBcIikpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChOT1QoXCIgKyB0ZXN0Qml0ICsgXCIpKVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaWZfdGhlbihcIiArIHRlc3RCaXQgKyBcIiwgUHJvZ3JhbShcIjtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwLmluc3QoTU9WRShyb1tcIiArIHRlc3RCaXQgKyBcIl0sIDApKVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgYml0SW5kZXggPSAwOyBiaXRJbmRleCA8IGNyZWdTaXplOyBiaXRJbmRleCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwLmluc3QoSU9SKHJvW1wiICsgdGVzdEJpdCArIFwiXSwgcm9bXCIgKyAoYml0SW5kZXggKyBjcmVnQmFzZSkgKyBcIl0pKVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwLmluc3QoTk9UKHJvW1wiICsgdGVzdEJpdCArIFwiXSkpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pZl90aGVuKHJvW1wiICsgdGVzdEJpdCArIFwiXSwgUHJvZ3JhbShcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dmFyIGJpdFN0ciA9IGNvbmRpdGlvblZhbHVlLnRvU3RyaW5nKDIpLnNwbGl0KFwiXCIpLnJldmVyc2UoKTtcblx0XHRcdFx0XHRcdFx0dmFyIGJpdENvdW50ID0gMDtcblx0XHRcdFx0XHRcdFx0dmFyIHNpbmdsZUJpdEluZGV4ID0gMDtcblx0XHRcdFx0XHRcdFx0Yml0U3RyLm1hcChmdW5jdGlvbihiaXRWYWx1ZSwgYml0SW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgYml0VmFsID0gcGFyc2VJbnQoYml0VmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdGJpdFN0cltiaXRJbmRleF0gPSBiaXRWYWw7XG5cdFx0XHRcdFx0XHRcdFx0aWYoYml0VmFsKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRiaXRDb3VudCsrO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2luZ2xlQml0SW5kZXggPSBiaXRJbmRleDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdGlmKGJpdENvdW50ID09IDEpIHtcblx0XHRcdFx0XHRcdFx0XHRpZih2ZXJzaW9uIDwgMikge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pZl90aGVuKFwiICsgKHNpbmdsZUJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCIsIFByb2dyYW0oXCI7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaWZfdGhlbihyb1tcIiArIChzaW5nbGVCaXRJbmRleCArIGNyZWdCYXNlKSArIFwiXSwgUHJvZ3JhbShcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYodmVyc2lvbiA8IDIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChGQUxTRShcIiArIHRlc3RCaXQgKyBcIikpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZmlyc3RTZXQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0Yml0U3RyLm1hcChmdW5jdGlvbihiaXRWYWx1ZSwgYml0SW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYml0VmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihmaXJzdFNldCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zmlyc3RTZXQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChPUihcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiLCBcIiArIHRlc3RCaXQgKyBcIikpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChBTkQoXCIgKyAoYml0SW5kZXggKyBjcmVnQmFzZSkgKyBcIiwgXCIgKyB0ZXN0Qml0ICsgXCIpKVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwLmlmX3RoZW4oXCIgKyB0ZXN0Qml0ICsgXCIsIFByb2dyYW0oXCI7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChNT1ZFKHJvW1wiICsgdGVzdEJpdCArIFwiXSwgMCkpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZmlyc3RTZXQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0Yml0U3RyLm1hcChmdW5jdGlvbihiaXRWYWx1ZSwgYml0SW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYml0VmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihmaXJzdFNldCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zmlyc3RTZXQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChJT1Iocm9bXCIgKyB0ZXN0Qml0ICsgXCJdLCByb1tcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiXSkpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaW5zdChBTkQocm9bXCIgKyB0ZXN0Qml0ICsgXCJdLCByb1tcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiXSkpXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAuaWZfdGhlbihyb1tcIiArIHRlc3RCaXQgKyBcIl0sIFByb2dyYW0oXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicC5pbnN0KFwiO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKHF1aWxJbmZvKSB7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gcXVpbEluZm8ubmFtZTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGdhdGUubmFtZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgZ290T3BlbkJyYWNlID0gZmFsc2U7XG5cdFx0XHRcdFx0aWYocXVpbEluZm8gJiYgcXVpbEluZm8ucGFyYW1zICYmIHF1aWxJbmZvLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIoXCI7XG5cdFx0XHRcdFx0XHRnb3RPcGVuQnJhY2UgPSB0cnVlO1xuXHRcdFx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IHF1aWxJbmZvLnBhcmFtcy5sZW5ndGg7IHArKykge1xuXHRcdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8gLS0tXG5cdFx0XHRcdFx0XHRcdC8vIHByZXBlbmQgJ25wJyB0byBtYXRoIGNvbnN0YW50c1xuXHRcdFx0XHRcdFx0XHRpZih0eXBlb2YgZ2F0ZVBhcmFtc1txdWlsSW5mby5wYXJhbXNbcF1dICE9IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbm9kZSA9IG1hdGgucGFyc2UoZ2F0ZVBhcmFtc1txdWlsSW5mby5wYXJhbXNbcF1dKTtcblx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Ly8gLS0tXG5cblx0XHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmKHZlcnNpb24gPCAyIHx8IGlzRGVmR2F0ZSkge1xuXHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIpXCI7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmICYmIGdhdGVEZWYucGFyYW1zICYmIGdhdGVEZWYucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIoXCI7XG5cdFx0XHRcdFx0XHRcdGdvdE9wZW5CcmFjZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgcCA9IDA7IHAgPCBnYXRlRGVmLnBhcmFtcy5sZW5ndGg7IHArKykge1xuXHRcdFx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0XHQvLyBwcmVwZW5kICducCcgdG8gbWF0aCBjb25zdGFudHNcblx0XHRcdFx0XHRcdFx0XHRpZih0eXBlb2YgZ2F0ZVBhcmFtc1tnYXRlRGVmLnBhcmFtc1twXV0gIT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbZ2F0ZURlZi5wYXJhbXNbcF1dKTtcblx0XHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0Ly8gLS0tXG5cblx0XHRcdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlmKHZlcnNpb24gPCAyIHx8IGlzRGVmR2F0ZSkge1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIilcIjtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoZ2F0ZS53aXJlcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0XHRcdFx0XHRpZih2ZXJzaW9uIDwgMiB8fCAhZ290T3BlbkJyYWNlIHx8IGlzRGVmR2F0ZSkge1xuXHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIoXCI7XG5cdFx0XHRcdFx0XHRcdGdvdE9wZW5CcmFjZSA9IHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcInFcIiArIGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiXCIgKyBnYXRlLndpcmVzW3ddO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoZ2F0ZS5uYW1lID09IFwibWVhc3VyZVwiICYmIGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY3JlZykge1xuXHRcdFx0XHRcdFx0XHR2YXIgdGFyZ2V0Qml0ID0gcGFyc2VJbnQoZ2F0ZS5vcHRpb25zLmNyZWcuYml0KSB8fCAwO1xuXHRcdFx0XHRcdFx0XHRpZihpc05hTih0YXJnZXRCaXQpKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGFyZ2V0Qml0ID0gMDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZih2ZXJzaW9uIDwgMikge1xuXHRcdFx0XHRcdFx0XHRcdHB5cXVpbCArPSAodGFyZ2V0Qml0ICsgc2VsZi5jcmVnQmFzZShnYXRlLm9wdGlvbnMuY3JlZy5uYW1lKSk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cHlxdWlsICs9IFwicm9bXCIgKyAodGFyZ2V0Qml0ICsgc2VsZi5jcmVnQmFzZShnYXRlLm9wdGlvbnMuY3JlZy5uYW1lKSkgKyBcIl1cIjtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gXCIpXCI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cHlxdWlsICs9IFwiKVwiO1xuXHRcdFx0XHRcdGlmKGluc2lkZUNvbnRyb2wpIHtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIilcXG5cIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gdW5rbm93biBnYXRlP1xuXHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcIiMgRXhwb3J0IHRvIHB5cXVpbCBXQVJOSU5HOiB1bmtub3duIGdhdGUgXFxcIlwiICsgZ2F0ZS5uYW1lICsgXCJcXFwiLlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInJldHVybiBwXFxuXCI7XG5cdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdH0gZWxzZSB7XG5cdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0aWYodmVyc2lvbiA8IDIpIHtcblx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInF2bSA9IFFWTUNvbm5lY3Rpb24oKVxcblwiO1xuXG5cdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0cHlxdWlsICs9IFwiXFxuXCJcblxuXHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCIjIENBTENVTEFURSBDT1NUIEhFUkVcXG5cIjtcblxuXHRcdFx0XHR2YXIgY29zdEZ1bmN0aW9uID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbiA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbi5weXRob24gfHwgXCJcIiA6IFwiXCI7XG5cdFx0XHRcdGlmKCFjb3N0RnVuY3Rpb24udHJpbSgpKSB7XG5cdFx0XHRcdFx0Y29zdEZ1bmN0aW9uID0gXCJjb3N0ID0gMFwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cHlxdWlsICs9IGFkanVzdElkZW50YXRpb24oY29zdEZ1bmN0aW9uLCBpbmRlbnQpO1xuXG5cdFx0XHRcdHB5cXVpbCArPSBcIlxcblwiXG5cdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInJldHVybiBjb3N0XFxuXCJcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInByaW50KHF2bS5ydW4ocCkpXFxuXCI7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmKHNob3RzKSB7XG5cdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInAud3JhcF9pbl9udW1zaG90c19sb29wKHNob3RzKVxcblwiO1xuXHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdH1cblxuXHRcdFx0dmFyIGxhdHRpY2VOYW1lID0gbGF0dGljZTtcblx0XHRcdGlmKCFsYXR0aWNlTmFtZSkge1xuXHRcdFx0XHRpZih2ZXJzaW9uIDwgMi4xKSB7XG5cdFx0XHRcdFx0bGF0dGljZU5hbWUgPSB0aGlzLm51bVF1Yml0cyArIFwicS1nZW5lcmljLXF2bVwiO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGxhdHRpY2VOYW1lID0gdGhpcy5udW1RdWJpdHMgKyBcInEtcXZtXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicWMgPSBnZXRfcWMoJ1wiICsgbGF0dGljZU5hbWUgKyBcIidcIiArIChsYXR0aWNlID8gKFwiLCBhc19xdm09XCIgKyAoYXNRVk0gPyBcIlRydWVcIiA6IFwiRmFsc2VcIikpIDogXCJcIikgKyBcIilcXG5cIjtcblxuXHRcdFx0aWYobGF0dGljZSkge1xuXHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJlcCA9IHFjLmNvbXBpbGUocClcXG5cIjtcblxuXHRcdFx0XHRpZihnb3RNZWFzdXJlbWVudCkge1xuXG5cdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicmVzdWx0c19saXN0ID0gcWMucnVuKGVwKS5yZWFkb3V0X2RhdGEuZ2V0KFxcXCJyb1xcXCIpXFxuXCI7XG5cdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicmVzdWx0cyA9IGxpc3QobWFwKGxhbWJkYSBhcnI6IHJlZHVjZShsYW1iZGEgeCwgeTogc3RyKHgpICsgc3RyKHkpLCBhcnJbOjotMV0sIFxcXCJcXFwiKSwgcmVzdWx0c19saXN0KSlcXG5cIjtcblxuXHRcdFx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwiY291bnRzID0gQ291bnRlcihkaWN0KHppcChyZXN1bHRzLFtyZXN1bHRzLmNvdW50KGkpIGZvciBpIGluIHJlc3VsdHNdKSkpXFxuXCI7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwiIyBDQUxDVUxBVEUgQ09TVCBIRVJFXFxuXCI7XG5cblx0XHRcdFx0XHRcdHZhciBjb3N0RnVuY3Rpb24gPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uLnB5dGhvbiB8fCBcIlwiIDogXCJcIjtcblx0XHRcdFx0XHRcdGlmKCFjb3N0RnVuY3Rpb24udHJpbSgpKSB7XG5cdFx0XHRcdFx0XHRcdGNvc3RGdW5jdGlvbiA9IFwiY29zdCA9IDBcIjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGFkanVzdElkZW50YXRpb24oY29zdEZ1bmN0aW9uLCBpbmRlbnQpO1xuXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicmV0dXJuIGNvc3RcXG5cIlxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJjb3VudHMgPSBkaWN0KHppcChyZXN1bHRzLFtyZXN1bHRzLmNvdW50KGkpIGZvciBpIGluIHJlc3VsdHNdKSlcXG5cIjtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInByaW50KGNvdW50cylcXG5cIjtcdFx0XHRcdFx0XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwiY291bnRzID0gQ291bnRlcihkaWN0KHppcChyZXN1bHRzLFtyZXN1bHRzLmNvdW50KGkpIGZvciBpIGluIHJlc3VsdHNdKSkpXFxuXCI7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwiIyBDQUxDVUxBVEUgQ09TVCBIRVJFXFxuXCI7XG5cblx0XHRcdFx0XHRcdHZhciBjb3N0RnVuY3Rpb24gPSB0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMuY29zdEZ1bmN0aW9uLnB5dGhvbiB8fCBcIlwiIDogXCJcIjtcblx0XHRcdFx0XHRcdGlmKCFjb3N0RnVuY3Rpb24udHJpbSgpKSB7XG5cdFx0XHRcdFx0XHRcdGNvc3RGdW5jdGlvbiA9IFwiY29zdCA9IDBcIjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGFkanVzdElkZW50YXRpb24oY29zdEZ1bmN0aW9uLCBpbmRlbnQpO1xuXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gXCJcXG5cIlxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicmV0dXJuIGNvc3RcXG5cIlxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwcmludChxYy5ydW4oZXApLnJlYWRvdXRfZGF0YS5nZXQoXFxcInJvXFxcIikpXFxuXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpZihnb3RNZWFzdXJlbWVudCkge1xuXHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInJlc3VsdHNfbGlzdCA9IHFjLnJ1bihwKS5yZWFkb3V0X2RhdGEuZ2V0KFxcXCJyb1xcXCIpXFxuXCI7XG5cdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwicmVzdWx0cyA9IGxpc3QobWFwKGxhbWJkYSBhcnI6IHJlZHVjZShsYW1iZGEgeCwgeTogc3RyKHgpICsgc3RyKHkpLCBhcnJbOjotMV0sIFxcXCJcXFwiKSwgcmVzdWx0c19saXN0KSlcXG5cIjtcblx0XHRcdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcImNvdW50cyA9IENvdW50ZXIoZGljdCh6aXAocmVzdWx0cyxbcmVzdWx0cy5jb3VudChpKSBmb3IgaSBpbiByZXN1bHRzXSkpKVxcblwiO1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiXFxuXCJcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcIiMgQ0FMQ1VMQVRFIENPU1QgSEVSRVxcblwiO1xuXG5cdFx0XHRcdFx0XHR2YXIgY29zdEZ1bmN0aW9uID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbiA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbi5weXRob24gfHwgXCJcIiA6IFwiXCI7XG5cdFx0XHRcdFx0XHRpZighY29zdEZ1bmN0aW9uLnRyaW0oKSkge1xuXHRcdFx0XHRcdFx0XHRjb3N0RnVuY3Rpb24gPSBcImNvc3QgPSAwXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHB5cXVpbCArPSBhZGp1c3RJZGVudGF0aW9uKGNvc3RGdW5jdGlvbiwgaW5kZW50KTtcblxuXHRcdFx0XHRcdFx0cHlxdWlsICs9IFwiXFxuXCJcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInJldHVybiBjb3N0XFxuXCJcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cHlxdWlsICs9IGluZGVudCArIFwiY291bnRzID0gZGljdCh6aXAocmVzdWx0cyxbcmVzdWx0cy5jb3VudChpKSBmb3IgaSBpbiByZXN1bHRzXSkpXFxuXCI7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJwcmludChjb3VudHMpXFxuXCI7XHRcdFx0XHRcdFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJyZXN1bHRzX2xpc3QgPSBxYy5ydW4ocCkucmVhZG91dF9kYXRhLmdldChcXFwicm9cXFwiKVxcblwiO1xuXHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInJlc3VsdHMgPSBsaXN0KG1hcChsYW1iZGEgYXJyOiByZWR1Y2UobGFtYmRhIHgsIHk6IHN0cih4KSArIHN0cih5KSwgYXJyWzo6LTFdLCBcXFwiXFxcIiksIHJlc3VsdHNfbGlzdCkpXFxuXCI7XG5cdFx0XHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJjb3VudHMgPSBDb3VudGVyKGRpY3QoemlwKHJlc3VsdHMsW3Jlc3VsdHMuY291bnQoaSkgZm9yIGkgaW4gcmVzdWx0c10pKSlcXG5cIjtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIlxcblwiXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCIjIENBTENVTEFURSBDT1NUIEhFUkVcXG5cIjtcblxuXHRcdFx0XHRcdFx0dmFyIGNvc3RGdW5jdGlvbiA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24gPyB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24ucHl0aG9uIHx8IFwiXCIgOiBcIlwiO1xuXHRcdFx0XHRcdFx0aWYoIWNvc3RGdW5jdGlvbi50cmltKCkpIHtcblx0XHRcdFx0XHRcdFx0Y29zdEZ1bmN0aW9uID0gXCJjb3N0ID0gMFwiO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gYWRqdXN0SWRlbnRhdGlvbihjb3N0RnVuY3Rpb24sIGluZGVudCk7XG5cblx0XHRcdFx0XHRcdHB5cXVpbCArPSBcIlxcblwiXG5cdFx0XHRcdFx0XHRweXF1aWwgKz0gaW5kZW50ICsgXCJyZXR1cm4gY29zdFxcblwiXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHB5cXVpbCArPSBpbmRlbnQgKyBcInByaW50KHJlc3VsdHMpXFxuXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYoaHlicmlkKSB7XG5cdFx0XHR2YXIgZ2xvYmFsUGFyYW1MaXN0ID0gXCJcIjtcblx0XHRcdHRoaXMucGFyYW1zLm1hcChmdW5jdGlvbihnbG9iYWxQYXJhbU5hbWUsIGdsb2JhbFBhcmFtSW5kZXgpIHtcblx0XHRcdFx0aWYoZ2xvYmFsUGFyYW1JbmRleCA+IDApIHtcblx0XHRcdFx0XHRnbG9iYWxQYXJhbUxpc3QgKz0gXCIsIFwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGdsb2JhbFBhcmFtTGlzdCArPSBnbG9iYWxQYXJhbU5hbWU7XG5cdFx0XHR9KTtcblxuXHRcdFx0cHlxdWlsICs9IFwiXFxuXCI7XG5cdFx0XHRweXF1aWwgKz0gXCJwYXJhbXMgPSBucC5hcnJheShbXCIgKyBnbG9iYWxQYXJhbUxpc3QgKyBcIl0pXFxuXCI7XG5cdFx0XHRweXF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdHB5cXVpbCArPSBcIm1pbmltdW0gPSBtaW5pbWl6ZShvYmplY3RpdmVfZnVuY3Rpb24sIHBhcmFtcywgbWV0aG9kPVxcXCJcIiArICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMub3B0aW1pemVyID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMub3B0aW1pemVyIDogXCJQb3dlbGxcIikgKyBcIlxcXCIsIHRvbD10b2xlcmFuY2UpXFxuXCI7XG5cdFx0XHRweXF1aWwgKz0gXCJwcmludChcXFwiY29zdDpcXFwiLCBtaW5pbXVtLmZ1biwgXFxcInBhcmFtczpcXFwiLCBtaW5pbXVtLngpXFxuXCI7XG5cdFx0fVxuXHR9XG5cblx0aWYoYXNKdXB5dGVyKSB7XG5cdFx0dmFyIG5vdGVib29rID0ge1xuXHRcdFx0bWV0YWRhdGE6IHtcblx0XHRcdFx0a2VybmVsc3BlYzoge1xuXHRcdFx0XHRcdGRpc3BsYXlfbmFtZTogXCJQeXRob24gM1wiLFxuXHRcdFx0XHRcdGxhbmd1YWdlOiBcInB5dGhvblwiLFxuXHRcdFx0XHRcdG5hbWU6IFwicHl0aG9uM1wiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRuYmZvcm1hdDogNCxcblx0XHRcdG5iZm9ybWF0X21pbm9yOiAwLFxuXHRcdFx0Y2VsbHM6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNlbGxfdHlwZTogXCJjb2RlXCIsXG5cdFx0XHRcdFx0c291cmNlOiBweXF1aWwsXG5cdFx0XHRcdFx0bWV0YWRhdGE6IHtcblxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b3V0cHV0czogW10sXG5cdFx0XHRcdFx0ZXhlY3V0aW9uX2NvdW50OiBudWxsXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShub3RlYm9vayk7XG5cdH1cblxuXHRyZXR1cm4gcHlxdWlsO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvUXVpbCA9IGZ1bmN0aW9uKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGNvbW1lbnQgPSBvcHRpb25zLmNvbW1lbnQ7XG5cblx0Ly8gUVVJTCBTdWJtb2R1bGVzIG5vdCBzdXBwb3J0ZWRcblx0dmFyIGRlY29tcG9zZSA9IHRydWU7IC8vIG9wdGlvbnMuZGVjb21wb3NlO1xuXHR2YXIgdmVyc2lvblN0ciA9IG9wdGlvbnMudmVyc2lvblN0cjtcblxuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0dmFyIHZlcnNpb24gPSBwYXJzZUZsb2F0KHZlcnNpb25TdHIgfHwgXCIyLjBcIik7XG5cdGlmKGlzTmFOKHZlcnNpb24pKSB7XG5cdFx0dmVyc2lvbiA9IDIuMDtcblx0fVxuXG5cdC8vIGRlY29tcG9zZSA/XG5cdHZhciBjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmN1aXQubG9hZCh0aGlzLnNhdmUoZGVjb21wb3NlKSk7XG5cblx0dmFyIHF1aWwgPSBcIlwiO1xuXG5cdC8vIGNvbW1lbnRcblx0aWYoY29tbWVudCkge1xuXHRcdHZhciBjb21tID0gKGNvbW1lbnQgfHwgXCJcIikuc3BsaXQoXCJcXG5cIik7XG5cdFx0Y29tbS5tYXAoZnVuY3Rpb24oY2xpbmUpIHtcblx0XHRcdGlmKGNsaW5lLmxlbmd0aCA+PSAxICYmIGNsaW5lWzBdICE9IFwiI1wiKSB7XG5cdFx0XHRcdHF1aWwgKz0gXCIjIFwiO1xuXHRcdFx0fVxuXHRcdFx0cXVpbCArPSBjbGluZTtcblx0XHRcdHF1aWwgKz0gXCJcXG5cIjtcblx0XHR9KTtcblx0fVxuXG5cdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRpZihiYXNpY0dhdGUpIHtcblx0XHRcdGlmKGJhc2ljR2F0ZS5leHBvcnRJbmZvICYmIGJhc2ljR2F0ZS5leHBvcnRJbmZvLnF1aWwpIHtcblx0XHRcdFx0aWYoYmFzaWNHYXRlLmV4cG9ydEluZm8ucXVpbC5kZWZnYXRlKSB7XG5cdFx0XHRcdFx0cXVpbCArPSBiYXNpY0dhdGUuZXhwb3J0SW5mby5xdWlsLmRlZmdhdGU7XG5cdFx0XHRcdFx0cXVpbCArPSBcIlxcblxcblwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBiYXNpYyBnYXRlIG5vdCBzdXBwb3J0ZWQgYnkgcXVpbFxuXHRcdFx0XHQvLyBUT0RPOiBhZGQgcXVpbCBkZWZpbmUgZ2F0ZSBjb2RlXG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHR2YXIgZ290Q29uZGl0aW9ucyA9IHRoaXMuZ290Q2xhc3NpY2FsQ29udHJvbCgpO1xuXHR2YXIgaW5kZW50ID0gXCJcIjtcblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHZhciBwYXJhbXMgPSBcIlwiO1xuXHRcdGlmKGNpcmN1aXQucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0cGFyYW1zICs9IFwiKFwiO1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmKGkgPiAwKSB7XG5cdFx0XHRcdFx0cGFyYW1zICs9IFwiLCBcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRwYXJhbXMgKz0gXCIlXCIgKyBjaXJjdWl0LnBhcmFtc1tpXTtcblx0XHRcdH1cblx0XHRcdHBhcmFtcyArPSBcIilcIjtcblx0XHR9XG5cblx0XHR2YXIgYXJncyA9IFwiXCI7XG5cdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQubnVtUXViaXRzOyBpKyspIHtcblx0XHRcdGlmKGkgPiAwKSB7XG5cdFx0XHRcdGFyZ3MgKz0gXCIgXCI7XG5cdFx0XHR9XG5cdFx0XHRhcmdzICs9IFwicVwiICsgaTtcblx0XHR9XG5cdFx0cXVpbCArPSBcIkRFRkNJUkNVSVQgXCIgKyBleHBvcnRBc0dhdGVOYW1lICsgKHBhcmFtcyA/IFwiIFwiICsgcGFyYW1zIDogXCJcIikgKyAoYXJncyA/IFwiIFwiICsgYXJncyA6IFwiXCIpICsgXCI6XFxuXCI7XG5cdFx0aW5kZW50ID0gXCIgICAgXCI7XG5cdH0gZWxzZSB7XG5cdFx0cXVpbCArPSBcIlxcblwiO1xuXG5cdFx0aWYodmVyc2lvbiA+PSAyKSB7XG5cdFx0XHR2YXIgdG90YWxCaXRzID0gY2lyY3VpdC5jcmVnVG90YWxCaXRzKCk7XG5cdFx0XHRpZihnb3RDb25kaXRpb25zKSB7XG5cdFx0XHRcdHRvdGFsQml0cyArPSAxO1xuXHRcdFx0fTtcblx0XHRcdGlmKHRvdGFsQml0cykge1xuXHRcdFx0XHRxdWlsICs9IFwiREVDTEFSRSBybyBCSVRbXCIgKyB0b3RhbEJpdHMgKyBcIl1cXG5cIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wYXJhbXMgPyB0aGlzLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0aWYodGhpcy5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRxdWlsICs9IFwiXFxuXCI7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtTmFtZSA9IHRoaXMucGFyYW1zW2ldO1xuXG5cdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSk7XG5cdFx0XHRcdHZhciBnbG9iYWxQYXJhbVZhbHVlID0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cblx0XHRcdFx0cXVpbCArPSBcIkRFQ0xBUkUgXCIgKyBnbG9iYWxQYXJhbU5hbWUgKyBcIiBSRUFMWzFdXFxuXCI7XG5cdFx0XHR9XG5cdFx0XHRxdWlsICs9IFwiXFxuXCI7XG5cdFx0fVxuXG5cdFx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdFx0aWYoIWRlY29tcG9zZSkge1xuXHRcdFx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpIHtcblx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRpZighYmFzaWNHYXRlKSB7XG5cdFx0XHRcdFx0dmFyIGN1c3RvbUdhdGUgPSBzZWxmLmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdFx0aWYoY3VzdG9tR2F0ZSkge1xuXHRcdFx0XHRcdFx0dmFyIGN1c3RvbUNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0XHRcdFx0XHRcdGN1c3RvbUNpcmN1aXQubG9hZChjdXN0b21HYXRlKTtcblx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRjb21tZW50OiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRkZWNvbXBvc2U6IGZhbHNlXG5cdFx0XHRcdFx0XHR9O1x0XHRcdFx0XHRcblx0XHRcdFx0XHRcdHF1aWwgKz0gY3VzdG9tQ2lyY3VpdC5leHBvcnRUb1F1aWwobmV3T3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHR2YXIgbWF0aFRvU3RyaW5nSGFuZGxlciA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMpIHtcblx0XHRpZihub2RlLmlzU3ltYm9sTm9kZSAmJiBjaXJjdWl0LnBhcmFtcy5pbmRleE9mKG5vZGUubmFtZSkgPj0gMCkge1xuXHRcdFx0cmV0dXJuIFwiJVwiICsgbm9kZS5uYW1lO1xuXHRcdH1cblx0fTtcblxuXHR2YXIgbGFiZWxDb3VudGVyID0gMTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBjaXJjdWl0Lm51bUNvbHMoKTsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgY2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdHZhciBnYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGdhdGUubmFtZSk7XG5cdFx0XHRcdHZhciBnYXRlUGFyYW1zID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMgPyBnYXRlLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0XHRcdHZhciBxdWlsSW5mbyA9IG51bGw7XG5cdFx0XHRcdGlmKGdhdGVEZWYpIHtcblx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8pIHtcblx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsICYmIGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsLnJlcGxhY2VtZW50KSB7XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xdWlsLnJlcGxhY2VtZW50LnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRcdGdhdGVQYXJhbXMgPSBnYXRlRGVmLmV4cG9ydEluZm8ucXVpbC5yZXBsYWNlbWVudC5wYXJhbXM7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Z2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihnYXRlRGVmLmV4cG9ydEluZm8ucXVpbC5yZXBsYWNlbWVudC5uYW1lKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cXVpbEluZm8gPSAoZ2F0ZURlZiAmJiBnYXRlRGVmLmV4cG9ydEluZm8gJiYgZ2F0ZURlZi5leHBvcnRJbmZvLnF1aWwpID8gZ2F0ZURlZi5leHBvcnRJbmZvLnF1aWwgOiBudWxsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHZhciBpbnNpZGVDb250cm9sID0gZmFsc2U7XG5cdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKSB7XG5cdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdC8vIEZsb3cgY29udHJvbFxuXHRcdFx0XHRcdFx0Ly8gLS0tXG5cdFx0XHRcdFx0XHRpbnNpZGVDb250cm9sID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHF1aWwgKz0gXCJcXG5cIjtcblxuXHRcdFx0XHRcdFx0dmFyIHRlc3RCaXQgPSBzZWxmLmNyZWdUb3RhbEJpdHMoKTtcblx0XHRcdFx0XHRcdHZhciBjb25kaXRpb24gPSBnYXRlLm9wdGlvbnMuY29uZGl0aW9uO1xuXHRcdFx0XHRcdFx0dmFyIGNvbmRpdGlvblZhbHVlID0gY29uZGl0aW9uLnZhbHVlIHx8IDA7XG5cdFx0XHRcdFx0XHR2YXIgY3JlZ0Jhc2UgPSBzZWxmLmNyZWdCYXNlKGNvbmRpdGlvbi5jcmVnKTtcblxuXHRcdFx0XHRcdFx0aWYoY29uZGl0aW9uVmFsdWUgPT0gMCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgY3JlZ1NpemUgPSBzZWxmLmNyZWdzW2NvbmRpdGlvbi5jcmVnXS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdGlmKHZlcnNpb24gPCAyKSB7XG5cdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBcIkZBTFNFIFtcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGJpdEluZGV4ID0gMDsgYml0SW5kZXggPCBjcmVnU2l6ZTsgYml0SW5kZXgrKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBcIk9SIFtcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiXSBbXCIgKyB0ZXN0Qml0ICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gaW5kZW50ICsgXCJOT1QgW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QLVdIRU4gQFRIRU5cIiArIGxhYmVsQ291bnRlciArIFwiIFtcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiSlVNUCBARU5EXCIgKyAobGFiZWxDb3VudGVyICsgMSkgKyBcIlxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJMQUJFTCBAVEhFTlwiICsgbGFiZWxDb3VudGVyICsgXCJcXG5cIjtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IGluZGVudCArIFwiRkFMU0Ugcm9bXCIgKyB0ZXN0Qml0ICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBiaXRJbmRleCA9IDA7IGJpdEluZGV4IDwgY3JlZ1NpemU7IGJpdEluZGV4KyspIHtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gaW5kZW50ICsgXCJPUiByb1tcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiXSByb1tcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBcIk5PVCByb1tcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiSlVNUC1XSEVOIEBUSEVOXCIgKyBsYWJlbENvdW50ZXIgKyBcIiByb1tcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiSlVNUCBARU5EXCIgKyAobGFiZWxDb3VudGVyICsgMSkgKyBcIlxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJMQUJFTCBAVEhFTlwiICsgbGFiZWxDb3VudGVyICsgXCJcXG5cIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dmFyIGJpdFN0ciA9IGNvbmRpdGlvblZhbHVlLnRvU3RyaW5nKDIpLnNwbGl0KFwiXCIpLnJldmVyc2UoKTtcblx0XHRcdFx0XHRcdFx0dmFyIGJpdENvdW50ID0gMDtcblx0XHRcdFx0XHRcdFx0dmFyIHNpbmdsZUJpdEluZGV4ID0gMDtcblx0XHRcdFx0XHRcdFx0Yml0U3RyLm1hcChmdW5jdGlvbihiaXRWYWx1ZSwgYml0SW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgYml0VmFsID0gcGFyc2VJbnQoYml0VmFsdWUpO1xuXHRcdFx0XHRcdFx0XHRcdGJpdFN0cltiaXRJbmRleF0gPSBiaXRWYWw7XG5cdFx0XHRcdFx0XHRcdFx0aWYoYml0VmFsKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRiaXRDb3VudCsrO1xuXHRcdFx0XHRcdFx0XHRcdFx0c2luZ2xlQml0SW5kZXggPSBiaXRJbmRleDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdGlmKGJpdENvdW50ID09IDEpIHtcblx0XHRcdFx0XHRcdFx0XHRpZih2ZXJzaW9uIDwgMikge1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkpVTVAtV0hFTiBAVEhFTlwiICsgbGFiZWxDb3VudGVyICsgXCIgW1wiICsgKHNpbmdsZUJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiSlVNUCBARU5EXCIgKyAobGFiZWxDb3VudGVyICsgMSkgKyBcIlxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkxBQkVMIEBUSEVOXCIgKyBsYWJlbENvdW50ZXIgKyBcIlxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiSlVNUC1XSEVOIEBUSEVOXCIgKyBsYWJlbENvdW50ZXIgKyBcIiByb1tcIiArIChzaW5nbGVCaXRJbmRleCArIGNyZWdCYXNlKSArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIkpVTVAgQEVORFwiICsgKGxhYmVsQ291bnRlciArIDEpICsgXCJcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJMQUJFTCBAVEhFTlwiICsgbGFiZWxDb3VudGVyICsgXCJcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYodmVyc2lvbiA8IDIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gaW5kZW50ICsgXCJGQUxTRSBbXCIgKyB0ZXN0Qml0ICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgZmlyc3RTZXQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0Yml0U3RyLm1hcChmdW5jdGlvbihiaXRWYWx1ZSwgYml0SW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoYml0VmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihmaXJzdFNldCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Zmlyc3RTZXQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gaW5kZW50ICsgXCJPUiBbXCIgKyAoYml0SW5kZXggKyBjcmVnQmFzZSkgKyBcIl0gW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IGluZGVudCArIFwiQU5EIFtcIiArIChiaXRJbmRleCArIGNyZWdCYXNlKSArIFwiXSBbXCIgKyB0ZXN0Qml0ICsgXCJdXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QLVdIRU4gQFRIRU5cIiArIGxhYmVsQ291bnRlciArIFwiIFtcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QIEBFTkRcIiArIChsYWJlbENvdW50ZXIgKyAxKSArIFwiXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiTEFCRUwgQFRIRU5cIiArIGxhYmVsQ291bnRlciArIFwiXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gaW5kZW50ICsgXCJGQUxTRSByb1tcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBmaXJzdFNldCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRiaXRTdHIubWFwKGZ1bmN0aW9uKGJpdFZhbHVlLCBiaXRJbmRleCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZihiaXRWYWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGZpcnN0U2V0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRmaXJzdFNldCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBcIk9SIHJvW1wiICsgKGJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdIHJvW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IGluZGVudCArIFwiQU5EIHJvW1wiICsgKGJpdEluZGV4ICsgY3JlZ0Jhc2UpICsgXCJdIHJvW1wiICsgdGVzdEJpdCArIFwiXVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiSlVNUC1XSEVOIEBUSEVOXCIgKyBsYWJlbENvdW50ZXIgKyBcIiByb1tcIiArIHRlc3RCaXQgKyBcIl1cXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCJKVU1QIEBFTkRcIiArIChsYWJlbENvdW50ZXIgKyAxKSArIFwiXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiTEFCRUwgQFRIRU5cIiArIGxhYmVsQ291bnRlciArIFwiXFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihxdWlsSW5mbykge1xuXHRcdFx0XHRcdFx0cXVpbCArPSBpbmRlbnQgKyBxdWlsSW5mby5uYW1lO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRxdWlsICs9IGluZGVudCArIGdhdGUubmFtZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRxdWlsICs9IFwiIFwiO1xuXHRcdFx0XHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0XHRcdFx0aWYocXVpbEluZm8gJiYgcXVpbEluZm8ucGFyYW1zICYmIHF1aWxJbmZvLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdHF1aWwgKz0gXCIoXCI7XG5cdFx0XHRcdFx0XHRmb3IodmFyIHAgPSAwOyBwIDwgcXVpbEluZm8ucGFyYW1zLmxlbmd0aDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8gLS0tXG5cdFx0XHRcdFx0XHRcdC8vIHByZXBlbmQgJyUnIHRvIGdsb2JhbCBwYXJhbXNcblx0XHRcdFx0XHRcdFx0aWYodHlwZW9mIGdhdGVQYXJhbXNbcXVpbEluZm8ucGFyYW1zW3BdXSAhPSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIG5vZGUgPSBtYXRoLnBhcnNlKGdhdGVQYXJhbXNbcXVpbEluZm8ucGFyYW1zW3BdXSk7XG5cdFx0XHRcdFx0XHRcdFx0cXVpbCArPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHQvLyAtLS1cblxuXHRcdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cXVpbCArPSBcIilcIjtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYoZ2F0ZURlZiAmJiBnYXRlRGVmLnBhcmFtcyAmJiBnYXRlRGVmLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIihcIjtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IGdhdGVEZWYucGFyYW1zLmxlbmd0aDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0XHQvLyBwcmVwZW5kICclJyB0byBnbG9iYWwgcGFyYW1zXG5cdFx0XHRcdFx0XHRcdFx0aWYodHlwZW9mIGdhdGVQYXJhbXNbZ2F0ZURlZi5wYXJhbXNbcF1dICE9IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW2dhdGVEZWYucGFyYW1zW3BdXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRxdWlsICs9IG5vZGUudG9TdHJpbmcoeyBoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyIH0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblxuXHRcdFx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cXVpbCArPSBcIilcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdHF1aWwgKz0gXCIgXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0cXVpbCArPSBcInFcIiArIGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiXCIgKyBnYXRlLndpcmVzW3ddO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGdhdGUubmFtZSA9PSBcIm1lYXN1cmVcIiAmJiBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNyZWcpIHtcblx0XHRcdFx0XHRcdHZhciB0YXJnZXRCaXQgPSBwYXJzZUludChnYXRlLm9wdGlvbnMuY3JlZy5iaXQpIHx8IDA7XG5cdFx0XHRcdFx0XHRpZihpc05hTih0YXJnZXRCaXQpKSB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldEJpdCA9IDA7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiIFwiO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZih2ZXJzaW9uIDwgMikge1xuXHRcdFx0XHRcdFx0XHRxdWlsICs9IFwiW1wiICsgKHRhcmdldEJpdCArIHNlbGYuY3JlZ0Jhc2UoZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSkpICsgXCJdXCI7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRxdWlsICs9IFwicm9bXCIgKyAodGFyZ2V0Qml0ICsgc2VsZi5jcmVnQmFzZShnYXRlLm9wdGlvbnMuY3JlZy5uYW1lKSkgKyBcIl1cIjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRxdWlsICs9IFwiXFxuXCI7XG5cblx0XHRcdFx0XHRpZihpbnNpZGVDb250cm9sKSB7XG5cdFx0XHRcdFx0XHRxdWlsICs9IFwiTEFCRUwgQEVORFwiICsgKGxhYmVsQ291bnRlciArIDEpICsgXCJcXG5cIjtcblx0XHRcdFx0XHRcdHF1aWwgKz0gXCJcXG5cIjtcblx0XHRcdFx0XHRcdGxhYmVsQ291bnRlciArPSAyO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyB1bmtub3duIGdhdGU/XG5cdFx0XHRcdFx0Y29uc29sZS5sb2coXCJ1bmtub3duIGdhdGVcIiwgZ2F0ZS5uYW1lKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRxdWlsICs9IFwiXFxuXCI7XG5cdH1cblxuXHRyZXR1cm4gcXVpbDtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb0FRQVNNID0gZnVuY3Rpb24ob3B0aW9ucywgaXNFeHBvcnRQeUFRQVNNLCBleHBvcnRBc0dhdGVOYW1lLCBpbmRlbnREZXB0aCkge1xuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGNvbW1lbnQgPSBvcHRpb25zLmNvbW1lbnQ7XG5cdHZhciBkZWNvbXBvc2UgPSBvcHRpb25zLmRlY29tcG9zZTtcblx0dmFyIGFzSnVweXRlciA9IG9wdGlvbnMuYXNKdXB5dGVyO1xuXHR2YXIgc2hvdHMgPSBvcHRpb25zLnNob3RzO1xuXHR2YXIgaHlicmlkID0gISFpc0V4cG9ydFB5QVFBU00gPyBvcHRpb25zLmh5YnJpZCA6IGZhbHNlO1xuXG5cdHZhciBjaXJjdWl0ID0gbnVsbDtcblx0dmFyIHRlbXBDaXJjdWl0ID0gbnVsbDtcblxuXHRzaG90cyA9IHNob3RzIHx8IDEwMjQ7XG5cblx0aWYodHlwZW9mIGh5YnJpZCA9PSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0aHlicmlkID0gdGhpcy5vcHRpb25zID8gISF0aGlzLm9wdGlvbnMuaHlicmlkIDogZmFsc2U7XG5cdH1cblxuXHR2YXIgb2JqID0gdGhpcy5zYXZlKCEhZGVjb21wb3NlKTtcblxuXHRjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdHRlbXBDaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmN1aXQubG9hZChvYmopO1xuXHR0ZW1wQ2lyY3VpdC5sb2FkKG9iaik7XG5cblx0dmFyIG1hdGhUb1N0cmluZ0hhbmRsZXIgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zKSB7XG5cdFx0XG5cdFx0aWYobm9kZS5pc1N5bWJvbE5vZGUpIHtcblx0XHRcdHZhciBudW1weXMgPSBbXCJwaVwiXTtcblx0XHRcdGlmKG51bXB5cy5pbmRleE9mKG5vZGUubmFtZSkgPj0gMCkge1xuXHRcdFx0XHRyZXR1cm4gXCJucC5cIiArIG5vZGUubmFtZTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dmFyIGFkanVzdElkZW50YXRpb24gPSBmdW5jdGlvbihhZGRTdHIsIGlkZW50KSB7XG5cdFx0dmFyIHN0ciA9IFwiXCI7XG5cblx0XHQvLyBhZGQgdXNlciBkZWZpbmVkIGNvc3QgZnVuY3Rpb24gd2l0aCBwcm9wZXIgaWRlbnRhdGlvblxuXHRcdHZhciBjZkxpbmVzID0gYWRkU3RyLnNwbGl0KFwiXFxuXCIpO1xuXHRcdHZhciBtaW5JZGVudCA9IC0xO1xuXHRcdGNmTGluZXMubWFwKGZ1bmN0aW9uKGNmTGluZSkge1xuXHRcdFx0dmFyIHRtcElkZW50ID0gY2ZMaW5lLnNlYXJjaCgvXFxTLyk7XG5cdFx0XHRpZih0bXBJZGVudCA+PSAwICYmIChtaW5JZGVudCA8IDAgfHwgdG1wSWRlbnQgPCBtaW5JZGVudCkpIHtcblx0XHRcdFx0bWluSWRlbnQgPSB0bXBJZGVudDtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGlmKG1pbklkZW50IDwgMCkge1xuXHRcdFx0bWluSWRlbnQgPSAwO1xuXHRcdH1cblxuXHRcdHZhciBhZGRJZGVudCA9IFwiXCI7XG5cdFx0aWYobWluSWRlbnQgPCBpZGVudC5sZW5ndGgpIHtcblx0XHRcdGZvcih2YXIgdG1wID0gMDsgdG1wIDwgKGlkZW50Lmxlbmd0aCAtIG1pbklkZW50KTsgdG1wKyspIHtcblx0XHRcdFx0YWRkSWRlbnQgKz0gXCIgXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y2ZMaW5lcy5tYXAoZnVuY3Rpb24oY2ZMaW5lKSB7XG5cdFx0XHRzdHIgKz0gYWRkSWRlbnQgKyBjZkxpbmUgKyBcIlxcblwiO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHN0cjtcblx0fTtcblxuXHR2YXIgZ2V0SW5kZW50ID0gZnVuY3Rpb24oZGVwdGgpIHtcblx0XHR2YXIgaW5kZW50ID0gXCJcIjtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgZGVwdGg7IGkrKykge1xuXHRcdFx0aW5kZW50ICs9IFwiICAgIFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gaW5kZW50O1xuXHR9XG5cblx0aW5kZW50RGVwdGggPSBpbmRlbnREZXB0aCB8fCAwO1xuXG5cdHZhciBnYXRlc1RvQmVBZGRlZCA9IFtdO1xuXHRpZighaXNFeHBvcnRQeUFRQVNNKXtcblx0XHRpZighZGVjb21wb3NlKSB7XG5cdFx0XHR2YXIgbnVtQ29scyA9IHRlbXBDaXJjdWl0Lm51bUNvbHMoKTtcblx0XHRcdGZvcih2YXIgY29sdW1uID0gbnVtQ29scyAtIDE7IGNvbHVtbiA+PSAwOyBjb2x1bW4tLSkge1xuXHRcdFx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGVtcENpcmN1aXQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdFx0XHR2YXIgZ2F0ZSA9IHRlbXBDaXJjdWl0LmdhdGVzW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwICYmICF0ZW1wQ2lyY3VpdC5iYXNpY0dhdGVzW2dhdGUubmFtZV0pIHtcblx0XHRcdFx0XHRcdGN1c3RvbURlY29tcG9zZWRDaXJjdWl0ID0gdGVtcENpcmN1aXQuZGVjb21wb3NlR2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRcdFx0XHR2YXIgaXNEZWNvbXBvc2VDdXN0b21DaXJjdWl0ID0gZmFsc2U7XG5cdFx0XHRcdFx0XHRmb3IodmFyIGRlY29tcG9zZWRDb2x1bW4gPSAwOyBkZWNvbXBvc2VkQ29sdW1uIDwgY3VzdG9tRGVjb21wb3NlZENpcmN1aXQubnVtQ29scygpOyBkZWNvbXBvc2VkQ29sdW1uKyspIHtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciBkZWNvbXBvc2VkV2lyZSA9IDA7IGRlY29tcG9zZWRXaXJlIDwgY3VzdG9tRGVjb21wb3NlZENpcmN1aXQubnVtUXViaXRzOyBkZWNvbXBvc2VkV2lyZSsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVJbkN1c3RvbUNpcmN1aXQgPSBjdXN0b21EZWNvbXBvc2VkQ2lyY3VpdC5nZXRHYXRlQXQoZGVjb21wb3NlZENvbHVtbiwgZGVjb21wb3NlZFdpcmUpO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZUluQ3VzdG9tQ2lyY3VpdCAmJiBnYXRlSW5DdXN0b21DaXJjdWl0LmNvbm5lY3RvciA9PSAwKXtcblx0XHRcdFx0XHRcdFx0XHRcdGdhdGVzVG9CZUFkZGVkLnB1c2goZ2F0ZUluQ3VzdG9tQ2lyY3VpdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdGNpcmN1aXQuZ2F0ZXMubWFwKGZ1bmN0aW9uKGNpcmN1aXRHYXRlLCBpbmRleCl7XG5cdFx0XHRcdFx0XHRcdFx0XHRjaXJjdWl0R2F0ZS5tYXAoZnVuY3Rpb24oZ2F0ZVRvUmVtb3ZlKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZVRvUmVtb3ZlICYmIGdhdGVUb1JlbW92ZS5uYW1lID09IGdhdGUubmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2lyY3VpdC5yZW1vdmVHYXRlKGdhdGVUb1JlbW92ZS5pZCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH0pO1x0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHR9KTtcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGdhdGVzVG9CZUFkZGVkLm1hcChmdW5jdGlvbihnYXRlVG9BZGQpe1xuXHRcdFx0aWYoZ2F0ZVRvQWRkKXtcblx0XHRcdFx0Y2lyY3VpdC5pbnNlcnRHYXRlKGdhdGVUb0FkZC5uYW1lLCBnYXRlVG9BZGQuY29sdW1uLCBnYXRlVG9BZGQud2lyZXMsIGdhdGVUb0FkZC5vcHRpb25zKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHZhciBhcWFzbSA9IFwiXCI7XG5cdHZhciBpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHR2YXIgdXNlZEdhdGVzID0gY2lyY3VpdC51c2VkR2F0ZXMoKTtcblx0dmFyIG51bVF1Yml0cyA9IGNpcmN1aXQubnVtUXViaXRzO1xuXHRcblx0aWYoIWlzRXhwb3J0UHlBUUFTTSl7XG5cdFx0YXFhc20gKz0gaW5kZW50ICsgIFwiQkVHSU5cXG5cIjtcblx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCJxdWJpdHMgXCIgKyBudW1RdWJpdHMgKyBcIlxcblwiO1xuXG5cdFx0aWYgKGNpcmN1aXQuY3JlZ3Mpe1xuXHRcdFx0dmFyIGNyZWdMZW5ndGggPSAwO1xuXHRcdFx0Zm9yKHZhciBjcmVnIGluIGNpcmN1aXQuY3JlZ3Mpe1xuXHRcdFx0XHRjcmVnTGVuZ3RoICs9IGNpcmN1aXQuY3JlZ3NbY3JlZ10ubGVuZ3RoO1xuXHRcdFx0fVxuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCJjYml0cyBcIiArIGNyZWdMZW5ndGggKyBcIlxcblwiO1xuXHRcdH1cblx0fWVsc2Uge1xuXHRcdGlmKGV4cG9ydEFzR2F0ZU5hbWUpe1xuXHRcdFx0dmFyIGFyZ3MgPSBcIlwiO1xuXHRcdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0LnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRhcmdzICs9IFwiLCBcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRhcmdzICs9IGNpcmN1aXQucGFyYW1zW2ldO1xuXHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0fVxuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNpcmN1aXQubnVtUXViaXRzOyBpKyspIHtcblx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0YXJncyArPSBcIiwgXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0YXJncyArPSBxdWJpdExldHRlcihpLCBjaXJjdWl0Lm51bVF1Yml0cyk7XG5cdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHR9XG5cdFx0fWVsc2Uge1xuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCJmcm9tIHFhdC5sYW5nLkFRQVNNIGltcG9ydCAqXFxuXCI7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyBcImZyb20gcWF0LnFwdXMgaW1wb3J0IGdldF9kZWZhdWx0X3FwdVxcblwiO1xuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCJmcm9tIGNvbGxlY3Rpb25zIGltcG9ydCBDb3VudGVyXFxuXCI7XG5cblx0XHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0XHRhcWFzbSArPSBpbmRlbnQgKyBcImZyb20gc2NpcHkub3B0aW1pemUgaW1wb3J0IG1pbmltaXplXFxuXCI7XG5cdFx0XHR9XG5cdFx0XHRcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcImltcG9ydCBudW1weSBhcyBucFxcblwiO1xuXG5cdFx0XHRhcWFzbSArPSBcIlxcblwiO1xuXG5cdFx0XHR2YXIgdW5zdXBwb3J0ZWRHYXRlRGVmaW5pdGlvbiA9IFwiXCI7XG5cdFx0XHR2YXIgc3VibW9kdWxlQ291bnQgPSAwO1xuXHRcdFx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpIHtcblx0XHRcdFx0dmFyIGJhc2ljR2F0ZSA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRpZihiYXNpY0dhdGUpIHtcblx0XHRcdFx0XHRpZighZGVjb21wb3NlKXtcblx0XHRcdFx0XHRcdGlmKGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdLmV4cG9ydEluZm8uYXFhc20gJiYgY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV0uZXhwb3J0SW5mby5hcWFzbS5hcnJheSkge1xuXHRcdFx0XHRcdFx0XHR1bnN1cHBvcnRlZEFxYXNtSW5mbyA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdLmV4cG9ydEluZm8uYXFhc207XG5cdFx0XHRcblx0XHRcdFx0XHRcdFx0Z2F0ZVVuaXRhcnkgPSB1c2VkR2F0ZU5hbWUgKyBcIl9nYXRlXCI7XG5cdFx0XHRcdFx0XHRcdGFxYXNtICs9IGluZGVudCArIFwiZGVmIFwiICsgZ2F0ZVVuaXRhcnkgK1wiKFwiO1xuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0aWYodW5zdXBwb3J0ZWRBcWFzbUluZm8ucGFyYW1zICYmIHVuc3VwcG9ydGVkQXFhc21JbmZvLnBhcmFtcy5sZW5ndGgpe1xuXHRcdFx0XHRcdFx0XHRcdHZhciBhcmdDb3VudCA9IDA7XG5cdFx0XHRcdFx0XHRcdFx0dW5zdXBwb3J0ZWRBcWFzbUluZm8ucGFyYW1zLm1hcChmdW5jdGlvbihwYXJhbU5hbWUpe1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFxYXNtICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdGFxYXNtICs9IGluZGVudCArIFwicF9cIiArIHBhcmFtTmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0YXFhc20gKz0gXCIpOlxcblwiO1xuXHRcdFx0XHRcdFx0XHRhcWFzbSArPSBnZXRJbmRlbnQoaW5kZW50RGVwdGggKyAxKSArIFwicmV0dXJuIG5wLmFycmF5KFwiICsgIHVuc3VwcG9ydGVkQXFhc21JbmZvLmFycmF5ICsgXCIpXFxuXFxuXCI7XHRcdFx0XHRcdFx0XHRcblxuXHRcdFx0XHRcdFx0XHR1bnN1cHBvcnRlZEdhdGVEZWZpbml0aW9uICs9IHVzZWRHYXRlTmFtZSArIFwiID0gQWJzdHJhY3RHYXRlKFxcXCJcIiArIHVzZWRHYXRlTmFtZSArIFwiXFxcIiwgW1wiO1xuXHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0dmFyIGNvdW50ID0gMDtcblxuXHRcdFx0XHRcdFx0XHRpZih1bnN1cHBvcnRlZEFxYXNtSW5mby5wYXJhbXMpe1xuXHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCB1bnN1cHBvcnRlZEFxYXNtSW5mby5wYXJhbXMubGVuZ3RoOyBpKyspe1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoY291bnQgPiAwKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dW5zdXBwb3J0ZWRHYXRlRGVmaW5pdGlvbiArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR1bnN1cHBvcnRlZEdhdGVEZWZpbml0aW9uICs9IFwiZmxvYXRcIjtcblx0XHRcdFx0XHRcdFx0XHRcdGNvdW50Kys7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYoYmFzaWNHYXRlLm1hdHJpeCl7XG5cdFx0XHRcdFx0XHRcdFx0YXJpdHkgPSBtYXRoLmxvZzIoYmFzaWNHYXRlLm1hdHJpeC5sZW5ndGgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0dW5zdXBwb3J0ZWRHYXRlRGVmaW5pdGlvbiArPSBcIl0sIG1hdHJpeF9nZW5lcmF0b3I9XCIgKyBnYXRlVW5pdGFyeSArIFwiLCBhcml0eT1cIiArIGFyaXR5ICtcIilcXG5cIjtcblx0XHRcdFx0XHRcdH1cdFx0XHRcdFx0XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHZhciBjdXN0b21HYXRlID0gc2VsZi5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRcdGlmKGN1c3RvbUdhdGUpIHtcblx0XHRcdFx0XHRcdHZhciBjdXN0b21DaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRjdXN0b21DaXJjdWl0LmxvYWQoY3VzdG9tR2F0ZSk7XG5cblx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRjb21tZW50OiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRkZWNvbXBvc2U6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGFzSnVweXRlcjogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdHNob3RzOiBudWxsLFxuXHRcdFx0XHRcdFx0XHRoeWJyaWQ6IGZhbHNlXG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRhcWFzbSArPSBjdXN0b21DaXJjdWl0LmV4cG9ydFRvQVFBU00obmV3T3B0aW9ucywgaXNFeHBvcnRQeUFRQVNNLCB1c2VkR2F0ZU5hbWUsIGluZGVudERlcHRoKTtcblx0XHRcdFx0XHRcdHN1Ym1vZHVsZUNvdW50Kys7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0YXFhc20gKz0gdW5zdXBwb3J0ZWRHYXRlRGVmaW5pdGlvbjtcblxuXHRcdFx0YXFhc20gKz0gXCJcXG5cIjtcblxuXHRcdFx0aWYoc2hvdHMpIHtcblx0XHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCJzaG90cyA9IFwiICsgc2hvdHMgKyBcIlxcblwiO1xuXHRcdFx0XHRhcWFzbSArPSBcIlxcblwiO1xuXHRcdFx0fVxuXG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCJwcm9ncmFtID0gUHJvZ3JhbSgpXFxuXCI7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCJxdWJpdHNfcmVnID0gcHJvZ3JhbS5xYWxsb2MoXCIrIGNpcmN1aXQubnVtUXViaXRzICtcIilcXG5cIjtcdFxuXHRcdFx0XG5cdFx0XHRmb3IodmFyIGNyZWdOYW1lIGluIGNpcmN1aXQuY3JlZ3Mpe1xuXHRcdFx0XHRhcWFzbSArPSBpbmRlbnQgKyBjcmVnTmFtZSArIFwiID0gcHJvZ3JhbS5jYWxsb2MoXCIgKyBjaXJjdWl0LmNyZWdzW2NyZWdOYW1lXS5sZW5ndGggKyBcIilcXG5cIjtcblx0XHRcdH1cblxuXHRcdFx0YXFhc20gKz0gXCJcXG5cIjtcblxuXHRcdFx0dmFyIGdsb2JhbFBhcmFtcyA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucGFyYW1zID8gdGhpcy5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXHRcdFx0aWYodGhpcy5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCB0aGlzLnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRcdHZhciBnbG9iYWxQYXJhbU5hbWUgPSB0aGlzLnBhcmFtc1tpXTtcblxuXHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtVmFsdWUgPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcblxuXHRcdFx0XHRcdGFxYXNtICs9IGdsb2JhbFBhcmFtTmFtZSArIFwiID0gXCIgKyBnbG9iYWxQYXJhbVZhbHVlICsgXCJcXG5cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRhcWFzbSArPSBcIlxcblwiO1xuXHRcdFx0fVxuXG5cdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCJ0b2xlcmFuY2UgPSBcIiArICh0aGlzLm9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMgJiYgdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMudG9sZXJhbmNlID8gdGhpcy5vcHRpb25zLmh5YnJpZE9wdGlvbnMudG9sZXJhbmNlIHx8IFwiMC4wMDFcIiA6IFwiMC4wMDFcIikgKyBcIlxcblwiO1xuXHRcdFx0XHRhcWFzbSArPSBcIlxcblwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpe1xuXHRcdGFxYXNtICs9IFwiZGVmIFwiICsgZXhwb3J0QXNHYXRlTmFtZSArIChhcmdzID8gXCIoXCIgKyBhcmdzICsgXCIpXCIgOiBcIlwiKSArIFwiOlxcblwiO1xuXHRcdGluZGVudERlcHRoKys7XG5cdFx0aW5kZW50ID0gZ2V0SW5kZW50KGluZGVudERlcHRoKTtcblx0XHRhcWFzbSArPSBpbmRlbnQgKyBcImNpcmN1aXQgPSBRUm91dGluZSgpXFxuXCJcdFxuXHR9IGVsc2Uge1xuXHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0YXFhc20gKz0gXCJkZWYgb2JqZWN0aXZlX2Z1bmN0aW9uKHBhcmFtcyk6XFxuXCJcblx0XHRcdGluZGVudERlcHRoKys7XG5cdFx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHRcdH1cblx0fVxuXG5cdGlmKCFleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0aWYoc3VibW9kdWxlQ291bnQpIHtcblx0XHRcdGFxYXNtICs9IFwiXFxuXCI7XG5cdFx0XHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdFx0XHRpZighY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV0gJiYgY2lyY3VpdC5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdKSB7XG5cdFx0XHRcdFx0YXFhc20gKz0gaW5kZW50ICsgdXNlZEdhdGVOYW1lICsgXCIoXCI7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgY2lyY3VpdC5udW1Db2xzKCk7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGNpcmN1aXQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gY2lyY3VpdC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHR2YXIgZ2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihnYXRlLm5hbWUpO1xuXHRcdFx0XHR2YXIgbmFtZSA9IFwiXCI7XG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zKXtcblx0XHRcdFx0XHRnYXRlUGFyYW1zID0gZ2F0ZS5vcHRpb25zLnBhcmFtcztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKGdhdGUubmFtZSA9PSBcIm1lYXN1cmVcIil7XG5cdFx0XHRcdFx0aWYoIWlzRXhwb3J0UHlBUUFTTSkge1xuXHRcdFx0XHRcdFx0bmFtZSArPSBcIk1FQVNcIlxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRuYW1lICs9IFwicHJvZ3JhbS5tZWFzdXJlXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoZ2F0ZS5uYW1lID09IFwicmVzZXRcIil7XG5cdFx0XHRcdFx0aWYoIWlzRXhwb3J0UHlBUUFTTSkge1xuXHRcdFx0XHRcdFx0bmFtZSArPSBcIlJFU0VUXCJcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0bmFtZSArPSBcInByb2dyYW0ucmVzZXRcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihnYXRlRGVmICYmIGdhdGVEZWYuZXhwb3J0SW5mbyl7XG5cdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLmFxYXNtKXtcblx0XHRcdFx0XHRcdHZhciBhcWFzbUluZm8gPSBnYXRlRGVmLmV4cG9ydEluZm8uYXFhc207XG5cdFx0XHRcdFx0XHR2YXIgYXFhc21JbmZvTmFtZSA9IFwiXCI7XG5cdFx0XHRcdFx0XHRpZihhcWFzbUluZm8ubmFtZSl7XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRpZihnYXRlRGVmLnBhcmFtcy5sZW5ndGgpe1xuXHRcdFx0XHRcdFx0XHRcdGdhdGVEZWYucGFyYW1zLm1hcChmdW5jdGlvbihwYXJhbSl7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgbm9kZSA9IG1hdGgucGFyc2UoZ2F0ZVBhcmFtc1twYXJhbV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtVmFsdWUgPSBub2RlLnRvU3RyaW5nKHtoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRhcWFzbUluZm9OYW1lID0gYXFhc21JbmZvLm5hbWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZighaXNFeHBvcnRQeUFRQVNNKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0YXFhc21JbmZvTmFtZSArPSBcIltcIiArIHBhcmFtVmFsdWUgKyBcIl1cIjtcblx0XHRcdFx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRhcWFzbUluZm9OYW1lICs9IFwiKFwiICsgcGFyYW1WYWx1ZSArIFwiKVwiO1x0XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH1lbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRhcWFzbUluZm9OYW1lICs9IGFxYXNtSW5mby5uYW1lO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0aWYoYXFhc21JbmZvLmNvbnRyb2xsZWQgJiYgYXFhc21JbmZvLmRhZ2dlcil7XG5cdFx0XHRcdFx0XHRcdFx0aWYoIWlzRXhwb3J0UHlBUUFTTSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IFwiQ1RSTChEQUcoXCIgKyBhcWFzbUluZm9OYW1lICsgXCIpKVwiO1xuXHRcdFx0XHRcdFx0XHRcdH1lbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gYXFhc21JbmZvTmFtZSArIFwiLmRhZygpLmN0cmwoKVwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fWVsc2UgaWYoYXFhc21JbmZvLmNvbnRyb2xsZWQpe1xuXHRcdFx0XHRcdFx0XHRcdGlmKCFpc0V4cG9ydFB5QVFBU00pe1xuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZSArPSBcIkNUUkwoXCIgKyBhcWFzbUluZm9OYW1lICsgXCIpXCI7XG5cdFx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZSArPSBhcWFzbUluZm9OYW1lICsgXCIuY3RybCgpXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ZWxzZSBpZihhcWFzbUluZm8uZGFnZ2VyKXtcblx0XHRcdFx0XHRcdFx0XHRpZighaXNFeHBvcnRQeUFRQVNNKXtcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gXCJEQUcoXCIgKyBhcWFzbUluZm9OYW1lICsgXCIpXCI7XG5cdFx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmFtZSArPSBhcWFzbUluZm9OYW1lICsgXCIuZGFnKClcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1lbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IGFxYXNtSW5mb05hbWU7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fWVsc2UgaWYoYXFhc21JbmZvLm1hdHJpeCl7XG5cdFx0XHRcdFx0XHRcdGlmKCFpc0V4cG9ydFB5QVFBU00pe1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgPSBcIltcIjtcblx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGsgPSAwIDsgayA8IGFxYXNtSW5mby5tYXRyaXgubGVuZ3RoOyBrKyspe1xuXHRcdFx0XHRcdFx0XHRcdFx0cm93ID0gYXFhc21JbmZvLm1hdHJpeFtrXTtcblx0XHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gXCJbXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgcm93Lmxlbmd0aDsgaSsrKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bmFtZSArPSBcIihcIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cm93X2VsZW1lbnQgPSByb3dbaV07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKGFxYXNtSW5mby5wYXJhbXMpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFxYXNtSW5mby5wYXJhbXMubWFwKGZ1bmN0aW9uKHBhcmFtTmFtZSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW0gPSBnYXRlUGFyYW1zW3BhcmFtTmFtZV07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZihyb3dfZWxlbWVudC50b1N0cmluZygpLmluZGV4T2YocGFyYW1OYW1lKSA+IDApe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyb3dfZWxlbWVudCA9IHJvd19lbGVtZW50LnJlcGxhY2UocGFyYW1OYW1lLCBwYXJhbSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZXZhbHVhdGVkX2V4cHJlc3Npb24gPSBtYXRoLmV2YWx1YXRlKHJvd19lbGVtZW50KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWF0cml4X2VsZW1lbnQgPSBtYXRoLmNvbXBsZXgoZXZhbHVhdGVkX2V4cHJlc3Npb24pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRtYXRyaXhfZWxlbWVudF9yZWFsID0gbWF0cml4X2VsZW1lbnRbXCJyZVwiXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWF0cml4X2VsZW1lbnRfaW0gPSBtYXRyaXhfZWxlbWVudFtcImltXCJdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IG1hdHJpeF9lbGVtZW50X3JlYWwgKyBcIiwgXCIgKyBtYXRyaXhfZWxlbWVudF9pbSArIFwiKVwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoaSA8IHJvdy5sZW5ndGggLSAxKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IFwiIFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IFwiXVwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKGsgPCBhcWFzbUluZm8ubWF0cml4Lmxlbmd0aCAtIDEpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IFwiIFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IFwiXVwiO1x0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgKz0gZ2F0ZS5uYW1lICsgXCIoXCI7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtQ291bnQgPSAwO1xuXHRcdFx0XHRcdFx0XHRcdGdhdGVEZWYucGFyYW1zLm1hcChmdW5jdGlvbihwYXJhbU5hbWUpe1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYocGFyYW1Db3VudCA+IDApe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW3BhcmFtTmFtZV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtVmFsdWUgPSBub2RlLnRvU3RyaW5nKHtoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyfSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IHBhcmFtVmFsdWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbUNvdW50Kys7XG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0XHRuYW1lICs9IFwiKVwiO1xuXHRcdFx0XHRcdFx0XHR9XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRhcWFzbSArPSBpbmRlbnQgKyAgbmFtZTtcblxuXHRcdFx0XHRcdGlmKCFpc0V4cG9ydFB5QVFBU00pe1xuXHRcdFx0XHRcdFx0YXFhc20gKz0gXCIgXCI7XG5cdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0YXFhc20gKz0gXCIoXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdFxuXHRcdFx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKyl7XG5cdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKXtcblx0XHRcdFx0XHRcdGFxYXNtICs9ICBcIiwgXCI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoIWlzRXhwb3J0UHlBUUFTTSl7XG5cdFx0XHRcdFx0XHRhcWFzbSArPSBcInFbXCIgKyBnYXRlLndpcmVzW3ddICsgXCJdXCI7XG5cdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRhcWFzbSArPSBxdWJpdExldHRlcihnYXRlLndpcmVzW3ddLCBjaXJjdWl0Lm51bVF1Yml0cyk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRhcWFzbSArPSBcInF1Yml0c19yZWdbXCIgKyBnYXRlLndpcmVzW3ddICsgXCJdXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YXJnQ291bnQgPSBhcmdDb3VudCArIDE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNyZWcpe1xuXHRcdFx0XHRcdGFxYXNtICs9IFwiLCBcIiArIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgKyBcIltcIiArIGdhdGUub3B0aW9ucy5jcmVnLmJpdCArIFwiXVwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoaXNFeHBvcnRQeUFRQVNNKXtcblx0XHRcdFx0XHRhcWFzbSArPSBcIilcIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGFxYXNtICs9IFwiXFxuXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdGFxYXNtICs9IGluZGVudCArIFwicmV0dXJuIGNpcmN1aXRcXG5cXG5cIjtcblx0fVxuXG5cdGlmKCFpc0V4cG9ydFB5QVFBU00pIHtcblx0XHRhcWFzbSArPSBcIkVORFwiO1xuXHR9IGVsc2Uge1xuXHRcdGlmKCFleHBvcnRBc0dhdGVOYW1lKXtcdFx0XHRcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcIlxcblwiO1xuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgIFwiY2lyY3VpdCA9IHByb2dyYW0udG9fY2lyYygpXFxuXCI7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCJqb2IgPSBjaXJjdWl0LnRvX2pvYihuYnNob3RzPXNob3RzLCBhZ2dyZWdhdGVfZGF0YT1GYWxzZSlcXG5cIjtcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcInFwdSA9IGdldF9kZWZhdWx0X3FwdSgpXFxuXCI7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCJqb2JfcmVzdWx0ID0gcXB1LnN1Ym1pdChqb2IpXFxuXCI7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCJjb3VudHMgPSBDb3VudGVyKClcXG5cXG5cIjtcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcImZvciBzdGF0ZSBpbiBqb2JfcmVzdWx0OlxcblwiO1xuXHRcdFx0YXFhc20gKz0gaW5kZW50ICsgIFwiICAgIHN0cmluZ19zdGF0ZSA9IHN0cihzdGF0ZS5zdGF0ZSlcXG5cIjtcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcIiAgICBzdHJpbmdfc3RhdGUgPSBzdHJpbmdfc3RhdGVbc3RyaW5nX3N0YXRlLmZpbmQoJ3wnKSArIDE6IHN0cmluZ19zdGF0ZS5maW5kKCc+JyldXFxuXCI7XG5cdFx0XHRhcWFzbSArPSBpbmRlbnQgKyAgXCIgICAgc3RyaW5nX3N0YXRlID0gc3RyaW5nX3N0YXRlWzo6LTFdXFxuXCJcblx0XHRcdGFxYXNtICs9IGluZGVudCArICBcIiAgICBjb3VudHNbc3RyaW5nX3N0YXRlXSArPSAxXFxuXFxuXCJcblxuXHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdGFxYXNtICs9IGluZGVudCArIFwiIyBDQUxDVUxBVEUgQ09TVCBIRVJFXFxuXCI7XG5cdFxuXHRcdFx0XHR2YXIgY29zdEZ1bmN0aW9uID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbiA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLmNvc3RGdW5jdGlvbi5weXRob24gfHwgXCJcIiA6IFwiXCI7XG5cdFx0XHRcdGlmKCFjb3N0RnVuY3Rpb24udHJpbSgpKSB7XG5cdFx0XHRcdFx0Y29zdEZ1bmN0aW9uID0gXCJjb3N0ID0gMFwiO1xuXHRcdFx0XHR9XG5cdFxuXHRcdFx0XHRhcWFzbSArPSBhZGp1c3RJZGVudGF0aW9uKGNvc3RGdW5jdGlvbiwgaW5kZW50KTtcblx0XG5cdFx0XHRcdGFxYXNtICs9IFwiXFxuXCJcblx0XHRcdFx0YXFhc20gKz0gaW5kZW50ICsgXCJyZXR1cm4gY29zdFxcblwiO1x0XG5cdFxuXHRcdFx0XHRpbmRlbnREZXB0aC0tO1xuXHRcdFx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHRcdFx0XHRpZihoeWJyaWQpIHtcblx0XHRcdFx0XHR2YXIgZ2xvYmFsUGFyYW1MaXN0ID0gXCJcIjtcblx0XHRcdFx0XHR0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24oZ2xvYmFsUGFyYW1OYW1lLCBnbG9iYWxQYXJhbUluZGV4KSB7XG5cdFx0XHRcdFx0XHRpZihnbG9iYWxQYXJhbUluZGV4ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRnbG9iYWxQYXJhbUxpc3QgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Z2xvYmFsUGFyYW1MaXN0ICs9IGdsb2JhbFBhcmFtTmFtZTtcblx0XHRcdFx0XHR9KTtcblx0XG5cdFx0XHRcdFx0YXFhc20gKz0gXCJcXG5cIjtcblx0XHRcdFx0XHRhcWFzbSArPSBcInBhcmFtcyA9IG5wLmFycmF5KFtcIiArIGdsb2JhbFBhcmFtTGlzdCArIFwiXSlcXG5cIjtcblx0XHRcdFx0XHRhcWFzbSArPSBcIlxcblwiO1xuXHRcdFx0XHRcdGFxYXNtICs9IFwibWluaW11bSA9IG1pbmltaXplKG9iamVjdGl2ZV9mdW5jdGlvbiwgcGFyYW1zLCBtZXRob2Q9XFxcIlwiICsgKHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5vcHRpbWl6ZXIgPyB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5vcHRpbWl6ZXIgOiBcIlBvd2VsbFwiKSArIFwiXFxcIiwgdG9sPXRvbGVyYW5jZSlcXG5cIjtcblx0XHRcdFx0XHRhcWFzbSArPSBcInByaW50KFxcXCJjb3N0OlxcXCIsIG1pbmltdW0uZnVuLCBcXFwicGFyYW1zOlxcXCIsIG1pbmltdW0ueClcXG5cIjtcblx0XHRcdFx0fVxuXHRcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGFxYXNtICs9IGluZGVudCArIFwicHJpbnQoY291bnRzKVwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKGFzSnVweXRlciAmJiBpc0V4cG9ydFB5QVFBU00pIHtcblx0XHR2YXIgbm90ZWJvb2sgPSB7XG5cdFx0XHRtZXRhZGF0YToge1xuXHRcdFx0XHRrZXJuZWxzcGVjOiB7XG5cdFx0XHRcdFx0ZGlzcGxheV9uYW1lOiBcIlB5dGhvbiAzXCIsXG5cdFx0XHRcdFx0bGFuZ3VhZ2U6IFwicHl0aG9uXCIsXG5cdFx0XHRcdFx0bmFtZTogXCJweXRob24zXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG5iZm9ybWF0OiA0LFxuXHRcdFx0bmJmb3JtYXRfbWlub3I6IDAsXG5cdFx0XHRjZWxsczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2VsbF90eXBlOiBcImNvZGVcIixcblx0XHRcdFx0XHRzb3VyY2U6IGFxYXNtLFxuXHRcdFx0XHRcdG1ldGFkYXRhOiB7XG5cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG91dHB1dHM6IFtdLFxuXHRcdFx0XHRcdGV4ZWN1dGlvbl9jb3VudDogbnVsbFxuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fTtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkobm90ZWJvb2spO1xuXHR9XG5cblx0cmV0dXJuIGFxYXNtXG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0QVFBU00gPSBmdW5jdGlvbihjb21tZW50LCBkZWNvbXBvc2UsIGlzRXhwb3J0UHlBUUFTTSwgZXhwb3J0QXNHYXRlTmFtZSwgYXNKdXB5dGVyLCBzaG90cywgaHlicmlkLCBpbmRlbnREZXB0aCkge1xuXHR2YXIgb3B0aW9ucyA9IHtcblx0XHRjb21tZW50OiBjb21tZW50LFxuXHRcdGRlY29tcG9zZTogZGVjb21wb3NlLFxuXHRcdGFzSnVweXRlcjogYXNKdXB5dGVyLFxuXHRcdHNob3RzOiBzaG90cyxcblx0XHRoeWJyaWQ6IGh5YnJpZFxuXHR9O1xuXG5cdHJldHVybiB0aGlzLmV4cG9ydFRvQVFBU00ob3B0aW9ucywgaXNFeHBvcnRQeUFRQVNNLCBleHBvcnRBc0dhdGVOYW1lLCBpbmRlbnREZXB0aCk7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb1B5QVFBU00gPSBmdW5jdGlvbihvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKSB7XG5cdHJldHVybiB0aGlzLmV4cG9ydFRvQVFBU00ob3B0aW9ucywgdHJ1ZSwgZXhwb3J0QXNHYXRlTmFtZSk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXhwb3J0UHlBUUFTTSA9IGZ1bmN0aW9uKGNvbW1lbnQsIGRlY29tcG9zZSwgZXhwb3J0QXNHYXRlTmFtZSwgYXNKdXB5dGVyLCBzaG90cywgaHlicmlkKSB7XG5cdHZhciBvcHRpb25zID0ge1xuXHRcdGNvbW1lbnQ6IGNvbW1lbnQsXG5cdFx0ZGVjb21wb3NlOiBkZWNvbXBvc2UsXG5cdFx0YXNKdXB5dGVyOiBhc0p1cHl0ZXIsXG5cdFx0c2hvdHM6IHNob3RzLFxuXHRcdGh5YnJpZDogaHlicmlkXG5cdH07XG5cdHJldHVybiB0aGlzLmV4cG9ydFRvUHlBUUFTTShvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb0NpcnEgPSBmdW5jdGlvbihvcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHZhciBjb21tZW50ID0gb3B0aW9ucy5jb21tZW50O1xuXHR2YXIgZGVjb21wb3NlID0gb3B0aW9ucy5kZWNvbXBvc2U7XG5cdHZhciB2ZXJzaW9uU3RyID0gb3B0aW9ucy52ZXJzaW9uU3RyO1xuXHR2YXIgYXNKdXB5dGVyID0gb3B0aW9ucy5hc0p1cHl0ZXI7XG5cdHZhciBzaG90cyA9IG9wdGlvbnMuc2hvdHM7XG5cdHZhciBleHBvcnRUZnEgPSBvcHRpb25zLmV4cG9ydFRmcTtcblxuXHR2YXIgc2VsZiA9IHRoaXM7XG5cblx0dmFyIHBsYXRmb3JtID0gXCJcIjtcblx0aWYoZXhwb3J0VGZxKSB7XG5cdFx0cGxhdGZvcm0gPSBcIlRGUVwiO1xuXHR9IGVsc2Uge1xuXHRcdHBsYXRmb3JtID0gXCJjaXJxXCI7XG5cdH1cblxuXHR2YXIgdmVyc2lvbiA9IHBhcnNlRmxvYXQodmVyc2lvblN0ciB8fCBcIjAuN1wiKTtcblx0aWYoaXNOYU4odmVyc2lvbikpIHtcblx0XHR2ZXJzaW9uID0gMC43O1xuXHR9XG5cblx0aWYodHlwZW9mIHNob3RzID09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRzaG90cyA9IDEwMjQ7XG5cdH1cblxuXHQvLyBkZWNvbXBvc2UgP1xuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRjaXJjdWl0LmxvYWQodGhpcy5zYXZlKGRlY29tcG9zZSkpO1xuXG5cdHZhciBjaXJxID0gXCJcIjtcblx0dmFyIGluZGVudCA9IFwiXCI7XG5cblx0Ly8gY29tbWVudFxuXHRpZihjb21tZW50KSB7XG5cdFx0dmFyIGNvbW0gPSAoY29tbWVudCB8fCBcIlwiKS5zcGxpdChcIlxcblwiKTtcblx0XHRjb21tLm1hcChmdW5jdGlvbihjbGluZSkge1xuXHRcdFx0aWYoY2xpbmUubGVuZ3RoID49IDEgJiYgY2xpbmVbMF0gIT0gXCIjXCIpIHtcblx0XHRcdFx0Y2lycSArPSBcIiMgXCI7XG5cdFx0XHR9XG5cdFx0XHRjaXJxICs9IGNsaW5lO1xuXHRcdFx0Y2lycSArPSBcIlxcblwiO1xuXHRcdH0pO1xuXHR9XG5cblx0dmFyIG1hdGhUb1N0cmluZ0hhbmRsZXIgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zKSB7XG5cdFx0aWYobm9kZS5pc1N5bWJvbE5vZGUpIHtcblx0XHRcdHZhciBudW1weXMgPSBbXCJwaVwiLCBcInNpblwiLCBcImNvc1wiLCBcInRhblwiLCBcImFzaW5cIiwgXCJhY29zXCIsIFwiYXRhblwiXTtcblx0XHRcdGlmKG51bXB5cy5pbmRleE9mKG5vZGUubmFtZSkgPj0gMCkge1xuXHRcdFx0XHRyZXR1cm4gXCJucC5cIiArIG5vZGUubmFtZTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dmFyIHBhcmFtc1RvQXJnID0gZnVuY3Rpb24oZ2F0ZU5hbWUsIGdhdGVQYXJhbXMpIHtcblx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdGlmKGdhdGVQYXJhbXMpIHtcblx0XHRcdHZhciBnYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblx0XHRcdGlmKCFnYXRlRGVmKSB7XG5cdFx0XHRcdGdhdGVEZWYgPSB0aGlzLmN1c3RvbUdhdGVzW2dhdGVOYW1lXTtcblx0XHRcdH1cblxuXHRcdFx0aWYoZ2F0ZURlZikge1xuXHRcdFx0XHR2YXIgcGFyYW1EZWYgPSBnYXRlRGVmLnBhcmFtcyB8fCBbXTtcblx0XHRcdFx0dmFyIHBhcmFtQ291bnQgPSBwYXJhbURlZi5sZW5ndGg7XG5cdFx0XHRcdGlmKHBhcmFtQ291bnQpIHtcdFx0XG5cdFx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IHBhcmFtQ291bnQ7IHArKykge1xuXHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGNpcnEgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IHBhcmFtRGVmW3BdO1xuXG5cdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdC8vIHByZXBlbmQgJ25wJyB0byBtYXRoIGNvbnN0YW50c1xuXHRcdFx0XHRcdFx0aWYoZ2F0ZVBhcmFtc1twYXJhbU5hbWVdKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW3BhcmFtTmFtZV0pO1xuXHRcdFx0XHRcdFx0XHRjaXJxICs9IG5vZGUudG9TdHJpbmcoeyBoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyIH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Ly8gLS0tXG5cblx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHR2YXIgYXJncyA9IFwiXCI7XG5cdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY2lyY3VpdC5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRhcmdzICs9IFwiLCBcIjtcblx0XHRcdH1cblx0XHRcdGFyZ3MgKz0gY2lyY3VpdC5wYXJhbXNbaV07XG5cdFx0XHRhcmdDb3VudCsrO1xuXHRcdH1cblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY2lyY3VpdC5udW1RdWJpdHM7IGkrKykge1xuXHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdGFyZ3MgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0YXJncyArPSBxdWJpdExldHRlcihpLCBjaXJjdWl0Lm51bVF1Yml0cyk7XG5cdFx0XHRhcmdDb3VudCsrO1xuXHRcdH1cblx0XHRjaXJxICs9IFwiZGVmIFwiICsgZXhwb3J0QXNHYXRlTmFtZSArIChhcmdzID8gXCIoXCIgKyBhcmdzICsgXCIpXCIgOiBcIlwiKSArIFwiOlxcblwiO1xuXHRcdGNpcnEgKz0gXCIgICAgcmV0dXJuIFtcXG5cIjtcblx0XHRpbmRlbnQgPSBcIiAgICAgICAgXCI7XG5cdH0gZWxzZSB7XG5cdFx0aWYoZXhwb3J0VGZxKXtcblx0XHRcdGNpcnEgKz0gXCJpbXBvcnQgdGVuc29yZmxvd19xdWFudHVtIGFzIHRmcVxcblwiXG5cdFx0fVxuXG5cdFx0Y2lycSArPSBcImltcG9ydCBjaXJxXFxuXCI7XG5cdFx0Y2lycSArPSBcImltcG9ydCBudW1weSBhcyBucFxcblwiO1xuXHRcdGNpcnEgKz0gXCJmcm9tIGZ1bmN0b29scyBpbXBvcnQgcmVkdWNlXFxuXCI7XG5cdFx0Y2lycSArPSBcIlxcblwiO1xuXG5cdFx0dmFyIGdsb2JhbFBhcmFtcyA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMucGFyYW1zID8gdGhpcy5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXHRcdGlmKHRoaXMucGFyYW1zLmxlbmd0aCkge1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IHRoaXMucGFyYW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdHZhciBnbG9iYWxQYXJhbU5hbWUgPSB0aGlzLnBhcmFtc1tpXTtcblxuXHRcdFx0XHR2YXIgbm9kZSA9IG1hdGgucGFyc2UoZ2xvYmFsUGFyYW1zW2dsb2JhbFBhcmFtTmFtZV0pO1xuXHRcdFx0XHR2YXIgZ2xvYmFsUGFyYW1WYWx1ZSA9IG5vZGUudG9TdHJpbmcoeyBoYW5kbGVyOiBtYXRoVG9TdHJpbmdIYW5kbGVyIH0pO1xuXG5cdFx0XHRcdGNpcnEgKz0gZ2xvYmFsUGFyYW1OYW1lICsgXCIgPSBcIiArIGdsb2JhbFBhcmFtVmFsdWUgKyBcIlxcblwiO1xuXHRcdFx0fVxuXHRcdFx0Y2lycSArPSBcIlxcblwiO1xuXHRcdH1cblxuXHRcdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHRcdGlmKCFkZWNvbXBvc2UpIHtcblx0XHRcdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKSB7XG5cdFx0XHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0aWYoIWJhc2ljR2F0ZSkge1xuXHRcdFx0XHRcdHZhciBjdXN0b21HYXRlID0gc2VsZi5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdO1xuXHRcdFx0XHRcdGlmKGN1c3RvbUdhdGUpIHtcblx0XHRcdFx0XHRcdHZhciBjdXN0b21DaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRjdXN0b21DaXJjdWl0LmxvYWQoY3VzdG9tR2F0ZSk7XG5cdFx0XHRcdFx0XHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRcdFx0XHRcdFx0Y29tbWVudDogXCJcIixcblx0XHRcdFx0XHRcdFx0ZGVjb21wb3NlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHR2ZXJzaW9uU3RyOiB2ZXJzaW9uU3RyXG5cdFx0XHRcdFx0XHR9O1x0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0Y2lycSArPSBjdXN0b21DaXJjdWl0LmV4cG9ydFRvQ2lycShuZXdPcHRpb25zLCBleHBvcnRBc0dhdGVOYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblxuXHRcdHZhciBkZWZHYXRlcyA9IFwiXCI7XG5cdFx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdFx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpIHtcblx0XHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdGlmKGJhc2ljR2F0ZSkge1xuXHRcdFx0XHRpZihiYXNpY0dhdGUuZXhwb3J0SW5mbyAmJiBiYXNpY0dhdGUuZXhwb3J0SW5mby5jaXJxKSB7XG5cdFx0XHRcdFx0dmFyIGNpcnFJbmZvID0gYmFzaWNHYXRlLmV4cG9ydEluZm8uY2lycTtcblx0XHRcdFx0XHR2YXIgaXNSZXBsYWNlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdGlmIChjaXJxSW5mby5yZXBsYWNlbWVudCkge1xuXHRcdFx0XHRcdFx0dmFyIHJlcGxhY2VtZW50R2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihjaXJxSW5mby5yZXBsYWNlbWVudC5uYW1lKVxuXHRcdFx0XHRcdFx0Y2lycUluZm8gPSByZXBsYWNlbWVudEdhdGVEZWYuZXhwb3J0SW5mby5jaXJxXG5cdFx0XHRcdFx0XHRpc1JlcGxhY2VkID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYoY2lycUluZm8uYXJyYXkpIHtcblx0XHRcdFx0XHRcdGlmKCFleHBvcnRUZnEpe1xuXHRcdFx0XHRcdFx0XHQvLyBkZWZnYXRlXG5cdFx0XHRcdFx0XHRcdHZhciBkZWZOYW1lID0gaXNSZXBsYWNlZCA/IGNpcnFJbmZvLm5hbWUgOiB1c2VkR2F0ZU5hbWVcblx0XHRcdFx0XHRcdFx0aWYgKGRlZkdhdGVzLmluZGV4T2YoZGVmTmFtZSkgPCAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZGVmR2F0ZXMgKz0gXCJkZWYgXCIgKyBkZWZOYW1lICsgXCIoXCI7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtTGlzdCA9IFwiXCI7XG5cdFx0XHRcdFx0XHRcdFx0aWYoY2lycUluZm8ucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbUxpc3QgKz0gXCIsIFtcIjtcblx0XHRcdFx0XHRcdFx0XHRcdGNpcnFJbmZvLnBhcmFtcy5tYXAoZnVuY3Rpb24ocGFyYW1OYW1lLCBwYXJhbUluZGV4KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHBhcmFtSW5kZXggPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmR2F0ZXMgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRlZkdhdGVzICs9IFwicF9cIiArIHBhcmFtTmFtZTtcblx0XHRcdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1MaXN0ICs9IFwiXVwiO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRkZWZHYXRlcyArPSBcIik6XFxuXCI7XG5cdFx0XHRcdFx0XHRcdFx0aWYoYmFzaWNHYXRlLm1hdHJpeCAmJiBiYXNpY0dhdGUubWF0cml4Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYodmVyc2lvbiA8IDAuNykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRzd2l0Y2goYmFzaWNHYXRlLm1hdHJpeC5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIDI6IGRlZkdhdGVzICs9IFwiICAgIHJldHVybiBjaXJxLlNpbmdsZVF1Yml0TWF0cml4R2F0ZShucC5hcnJheShcIiArIGNpcnFJbmZvLmFycmF5ICsgXCIpKVxcblwiOyBicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjYXNlIDQ6IGRlZkdhdGVzICs9IFwiICAgIHJldHVybiBjaXJxLlR3b1F1Yml0TWF0cml4R2F0ZShucC5hcnJheShcIiArIGNpcnFJbmZvLmFycmF5ICsgXCIpKVxcblwiOyBicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OiBkZWZHYXRlcyArPSBcIiAgICAjIEV4cG9ydCB0byBcIiArIHBsYXRmb3JtICsgXCIgV0FSTklORzogQ2Fubm90IGRlZmluZSBcIiArIGJhc2ljR2F0ZS5tYXRyaXgubGVuZ3RoICsgXCIgeCBcIiArIGJhc2ljR2F0ZS5tYXRyaXgubGVuZ3RoICsgXCIgbWF0cml4IGdhdGVcXG5cIjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmR2F0ZXMgKz0gXCIgICAgcmV0dXJuIGNpcnEuTWF0cml4R2F0ZShucC5hcnJheShcIiArIGNpcnFJbmZvLmFycmF5ICsgXCIpKVxcblwiO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRkZWZHYXRlcyArPSBcIlxcblwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Y2lycSArPSBkZWZHYXRlcztcblxuXHRcdGlmKGV4cG9ydFRmcSl7XG5cdFx0XHRjaXJxICs9IFwicSA9IGNpcnEuR3JpZFF1Yml0LnJlY3QoMSwgXCIgKyBjaXJjdWl0Lm51bVF1Yml0cyArIFwiKVxcblwiO1xuXHRcdH1lbHNle1xuXHRcdFx0Y2lycSArPSBcInEgPSBbY2lycS5OYW1lZFF1Yml0KCdxJyArIHN0cihpKSkgZm9yIGkgaW4gcmFuZ2UoXCIgKyBjaXJjdWl0Lm51bVF1Yml0cyArIFwiKV1cXG5cIjtcblx0XHR9XG5cblx0XHRjaXJxICs9IFwiXFxuXCI7XG5cblx0XHRpZih2ZXJzaW9uIDwgMC43KSB7XG5cdFx0XHRjaXJxICs9IFwiY2lyY3VpdCA9IGNpcnEuQ2lyY3VpdC5mcm9tX29wcyhcXG5cIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2lycSArPSBcImNpcmN1aXQgPSBjaXJxLkNpcmN1aXQoXFxuXCI7XG5cdFx0fVxuXHRcdGluZGVudCA9IFwiICAgIFwiO1xuXHR9XG5cdFxuXHR2YXIgbnVtQ29scyA9IGNpcmN1aXQubnVtQ29scygpO1xuXHR2YXIgZ2F0ZUNvdW50ZXIgPSAwO1xuXHR2YXIgbXVsdGlzaG90S2V5cyA9ICcnO1xuXHR2YXIgdGVtcEdhdGVEZWYgPSBudWxsO1xuXHR2YXIgbm9UZnFTdXBwb3J0ID0gZmFsc2U7XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSBjaXJjdWl0LmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdGlmKGdhdGVDb3VudGVyID4gMCl7XG5cdFx0XHRcdFx0Y2lycSArPSBcIixcIjtcblx0XHRcdFx0XHRpZihleHBvcnRUZnEgJiYgbm9UZnFTdXBwb3J0KXtcblx0XHRcdFx0XHRcdGNpcnEgKz0gaW5kZW50ICsgXCIjIEV4cG9ydCB0byBURlEgV0FSTklORzogR2F0ZSBub3QgeWV0IHN1cHBvcnRlZCBieSBUZW5zb3JmbG93IFF1YW50dW1cIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y2lycSArPSBcIlxcblwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBnYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGdhdGUubmFtZSk7XG5cdFx0XHRcdHZhciBnYXRlUGFyYW1zID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMgPyBnYXRlLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0XHRcdHZhciBjaXJxSW5mbyA9IG51bGw7XG5cdFx0XHRcdHZhciBpc0NvbnRyb2xsZWRHYXRlID0gZmFsc2U7XG5cdFx0XHRcdHZhciBpc0Jhc2ljR2F0ZSA9ICEhY2lyY3VpdC5iYXNpY0dhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdGlmKGdhdGVEZWYpIHtcblx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8pIHtcblx0XHRcdFx0XHRcdFx0bm9UZnFTdXBwb3J0ID0gZ2F0ZURlZi5leHBvcnRJbmZvLmNpcnEubm90VGZxU3VwcG9ydGVkID8gdHJ1ZSA6IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8uY2lycSAmJiBnYXRlRGVmLmV4cG9ydEluZm8uY2lycS5yZXBsYWNlbWVudCkge1xuXHRcdFx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8uY2lycS5yZXBsYWNlbWVudC5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRnYXRlUGFyYW1zID0gZ2F0ZURlZi5leHBvcnRJbmZvLmNpcnEucmVwbGFjZW1lbnQucGFyYW1zO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGlzQ29udHJvbGxlZEdhdGUgPSAoZ2F0ZURlZi5leHBvcnRJbmZvLmNpcnEucmVwbGFjZW1lbnQudHlwZSAmJiAoZ2F0ZURlZi5leHBvcnRJbmZvLmNpcnEucmVwbGFjZW1lbnQudHlwZSA9PSBcImNvbnRyb2xsZWRcIikpID8gdHJ1ZSA6IGZhbHNlO1x0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdG5vVGZxU3VwcG9ydCA9IGdhdGVEZWYuZXhwb3J0SW5mby5jaXJxLnJlcGxhY2VtZW50Lm5vdFRmcVN1cHBvcnRlZCA/IHRydWUgOiBmYWxzZTtcblx0XHRcdFx0XHRcdFx0Z2F0ZURlZiA9IGNpcmN1aXQuZ2V0R2F0ZURlZihnYXRlRGVmLmV4cG9ydEluZm8uY2lycS5yZXBsYWNlbWVudC5uYW1lKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNpcnFJbmZvID0gKGdhdGVEZWYgJiYgZ2F0ZURlZi5leHBvcnRJbmZvICYmIGdhdGVEZWYuZXhwb3J0SW5mby5jaXJxKSA/IGdhdGVEZWYuZXhwb3J0SW5mby5jaXJxIDogbnVsbDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0Z2F0ZUNvdW50ZXIrKztcblxuXHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZykge1xuXHRcdFx0XHRcdFx0Y2lycSArPSBpbmRlbnQgKyBcIiMgRXhwb3J0IHRvIFwiICsgcGxhdGZvcm0gK1wiIFdBUk5JTkc6IGNsYXNzaWNhbCBjb250cm9sIG5vdCBpbXBsZW1lbnRlZCB5ZXQuXFxuXCI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIHRtcFBhcmFtQ291bnQgPSAwO1xuXHRcdFx0XHRcdHZhciBwYXJhbVN0cmluZyA9IFwiXCI7XG5cblxuXHRcdFx0XHRcdGlmKGdhdGVQYXJhbXMpIHtcblx0XHRcdFx0XHRcdHZhciBwYXJhbURlZiA9IGdhdGVEZWYucGFyYW1zIHx8IFtdO1xuXHRcdFx0XHRcdFx0aWYoZ2F0ZS5uYW1lID09IFwieXlcIil7XG5cdFx0XHRcdFx0XHRcdHBhcmFtRGVmID0gW107XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR2YXIgcGFyYW1Db3VudCA9IHBhcmFtRGVmLmxlbmd0aDtcblx0XHRcdFx0XHRcdGlmKHBhcmFtQ291bnQpIHtcblx0XHRcdFx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IHBhcmFtQ291bnQ7IHArKykge1xuXHRcdFx0XHRcdFx0XHRcdGlmKHRtcFBhcmFtQ291bnQgPT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1TdHJpbmcgKz0gXCIoXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGlmKHRtcFBhcmFtQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbVN0cmluZyArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHZhciBwYXJhbU5hbWUgPSBwYXJhbURlZltwXTtcblx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0XHQvLyBwcmVwZW5kICducCcgdG8gbWF0aCBjb25zdGFudHNcblx0XHRcdFx0XHRcdFx0XHRpZihnYXRlUGFyYW1zW3BhcmFtTmFtZV0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW3BhcmFtTmFtZV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoIW5vZGUuYXJncyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgcGFyYW0gaW4gZ2F0ZS5vcHRpb25zLnBhcmFtcyl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZSA9IG1hdGgucGFyc2UoZ2F0ZS5vcHRpb25zLnBhcmFtc1twYXJhbV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXJhbVN0cmluZyArPSBub2RlLnRvU3RyaW5nKHsgaGFuZGxlcjogbWF0aFRvU3RyaW5nSGFuZGxlciB9KTtcdFx0XHRcdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0Ly8gLS0tXG5cdFx0XHRcdFx0XHRcdFx0aWYodG1wUGFyYW1Db3VudCA9PSBwYXJhbUNvdW50IC0gMSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYoaXNCYXNpY0dhdGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1TdHJpbmcgKz0gXCIpXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbVN0cmluZyArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHRtcFBhcmFtQ291bnQrKztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKGNpcnFJbmZvKSB7XG5cdFx0XHRcdFx0XHR2YXIgYWRkQnJhY2VzID0gY2lycUluZm8ubmFtZS5pbmRleE9mKFwiKipcIikgPj0gMDtcblxuXHRcdFx0XHRcdFx0Y2lycSArPSBpbmRlbnQ7XG5cblx0XHRcdFx0XHRcdGlmKGFkZEJyYWNlcykge1xuXHRcdFx0XHRcdFx0XHRjaXJxICs9IFwiKFwiO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZighY2lycUluZm8uYXJyYXkpIHtcblx0XHRcdFx0XHRcdFx0Y2lycSArPSBcImNpcnEuXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGV4cG9ydFRmcSAmJiBjaXJxSW5mby50ZnFSZXBsYWNlbWVudCAmJiBjaXJxSW5mby50ZnFSZXBsYWNlbWVudC5uYW1lKXtcblx0XHRcdFx0XHRcdFx0Y2lycSArPSBcImNpcnEuXCIgKyBjaXJxSW5mby50ZnFSZXBsYWNlbWVudC5uYW1lXG5cdFx0XHRcdFx0XHR9ZWxzZXtcblx0XHRcdFx0XHRcdFx0Y2lycSArPSBjaXJxSW5mby5uYW1lO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihhZGRCcmFjZXMpIHtcblx0XHRcdFx0XHRcdFx0Y2lycSArPSBcIilcIjtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjaXJxICs9IGluZGVudCArIGdhdGUubmFtZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRjaXJxICs9IHBhcmFtU3RyaW5nO1x0XHRcdFx0XHRcblx0XHRcdFx0XHRcblxuXHRcdFx0XHRcdGlmKGlzQ29udHJvbGxlZEdhdGUpIHtcblx0XHRcdFx0XHRcdGNpcnEgKz0gXCIuY29udHJvbGxlZCgpLm9uKFwiXG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmKGlzQmFzaWNHYXRlKSB7XG5cdFx0XHRcdFx0XHRcdGNpcnEgKz0gXCIoXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRcdFx0XHRmb3IodmFyIHcgPSAwOyB3IDwgZ2F0ZS53aXJlcy5sZW5ndGg7IHcrKykge1xuXHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdGNpcnEgKz0gXCIsIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRjaXJxICs9IHF1Yml0TGV0dGVyKGdhdGUud2lyZXNbd10sIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNpcnEgKz0gXCJxW1wiICsgZ2F0ZS53aXJlc1t3XSArIFwiXVwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihnYXRlLm5hbWUgPT0gXCJtZWFzdXJlXCIgJiYgZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jcmVnKSB7XG5cdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0Y2lycSArPSBcIiwga2V5PVwiO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjaXJxICs9IFwiJ1wiICsgZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSArIGdhdGUub3B0aW9ucy5jcmVnLmJpdCArIFwiJ1wiO1xuXG5cdFx0XHRcdFx0XHRpZihjb2x1bW4gPT0gbnVtQ29scyAtIDEgJiYgd2lyZSA9PSB0aGlzLm51bVF1Yml0cyAtIDEpe1xuXHRcdFx0XHRcdFx0XHRtdWx0aXNob3RLZXlzICs9IFwiJ1wiICsgZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSArIGdhdGUub3B0aW9ucy5jcmVnLmJpdCArIFwiJ1wiO1xuXHRcdFx0XHRcdFx0fWVsc2V7XG5cdFx0XHRcdFx0XHRcdG11bHRpc2hvdEtleXMgKz0gXCInXCIgKyBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lICsgZ2F0ZS5vcHRpb25zLmNyZWcuYml0ICsgXCInLCBcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y2lycSArPSBcIilcIjtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNpcnEgKz0gaW5kZW50ICsgXCIjIEV4cG9ydCB0byBcIiArIHBsYXRmb3JtICsgXCIgV0FSTklORzogdW5rbm93biBnYXRlIFxcXCJcIiArIGdhdGUubmFtZSArIFwiXFxcIi5cIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmKGV4cG9ydFRmcSAmJiBub1RmcVN1cHBvcnQpe1xuXHRcdGNpcnEgKz0gaW5kZW50ICsgXCIjIEV4cG9ydCB0byBURlEgV0FSTklORzogR2F0ZSBub3QgeWV0IHN1cHBvcnRlZCBieSBUZW5zb3JmbG93IFF1YW50dVwiO1xuXHR9XG5cblx0aWYoIWV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRjaXJxICs9IFwiXFxuKVxcblwiO1xuXHRcdGNpcnEgKz0gXCJcXG5cIjtcblx0XHRpZighZXhwb3J0VGZxKXtcblx0XHRcdGNpcnEgKz0gXCJzaW11bGF0b3IgPSBjaXJxLlNpbXVsYXRvcigpXFxuXCI7XG5cdFx0XHRjaXJxICs9IFwicmVzdWx0ID0gc2ltdWxhdG9yLnJ1bihjaXJjdWl0LCByZXBldGl0aW9ucz1cIisgc2hvdHMgK1wiKVxcblwiO1xuXHRcdFx0Y2lycSArPSBcInJlc3VsdF9kaWN0ID0gZGljdChyZXN1bHQubXVsdGlfbWVhc3VyZW1lbnRfaGlzdG9ncmFtKGtleXM9W1wiICsgbXVsdGlzaG90S2V5cyArIFwiXSkpXFxuXCI7XG5cdFx0XHRjaXJxICs9IFwia2V5cyA9IGxpc3QobWFwKGxhbWJkYSBhcnI6IHJlZHVjZShsYW1iZGEgeCwgeTogc3RyKHgpICsgc3RyKHkpLCBhcnJbOjotMV0pLCByZXN1bHRfZGljdC5rZXlzKCkpKVxcblwiO1xuXHRcdFx0Y2lycSArPSBcImNvdW50cyA9IGRpY3QoemlwKGtleXMsW3ZhbHVlIGZvciB2YWx1ZSBpbiByZXN1bHRfZGljdC52YWx1ZXMoKV0pKVxcblwiO1xuXHRcdFx0Y2lycSArPSBcInByaW50KGNvdW50cylcIjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Y2lycSArPSBcIlxcbiAgICBdXFxuXCI7XG5cdFx0Y2lycSArPSBcIlxcblwiO1xuXHR9XG5cblx0aWYoYXNKdXB5dGVyKSB7XG5cdFx0dmFyIG5vdGVib29rID0ge1xuXHRcdFx0bWV0YWRhdGE6IHtcblx0XHRcdFx0a2VybmVsc3BlYzoge1xuXHRcdFx0XHRcdGRpc3BsYXlfbmFtZTogXCJQeXRob24gM1wiLFxuXHRcdFx0XHRcdGxhbmd1YWdlOiBcInB5dGhvblwiLFxuXHRcdFx0XHRcdG5hbWU6IFwicHl0aG9uM1wiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRuYmZvcm1hdDogNCxcblx0XHRcdG5iZm9ybWF0X21pbm9yOiAwLFxuXHRcdFx0Y2VsbHM6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNlbGxfdHlwZTogXCJjb2RlXCIsXG5cdFx0XHRcdFx0c291cmNlOiBjaXJxLFxuXHRcdFx0XHRcdG1ldGFkYXRhOiB7XG5cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG91dHB1dHM6IFtdLFxuXHRcdFx0XHRcdGV4ZWN1dGlvbl9jb3VudDogbnVsbFxuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fTtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkobm90ZWJvb2spO1xuXHR9XG5cblx0cmV0dXJuIGNpcnE7XG59XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb1RGUSA9IGZ1bmN0aW9uKG9wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGNvbW1lbnQgPSBvcHRpb25zLmNvbW1lbnQ7XG5cdHZhciBkZWNvbXBvc2UgPSBvcHRpb25zLmRlY29tcG9zZTtcblx0dmFyIHZlcnNpb25TdHIgPSBvcHRpb25zLnZlcnNpb25TdHI7XG5cdHZhciBhc0p1cHl0ZXIgPSBvcHRpb25zLmFzSnVweXRlcjtcblx0dmFyIHNob3RzID0gb3B0aW9ucy5zaG90cztcblx0XG5cdHZhciBzZWxmID0gdGhpcztcblxuXHRpZih0eXBlb2Ygc2hvdHMgPT0gXCJ1bmRlZmluZWRcIikge1xuXHRcdHNob3RzID0gMTAyNDtcblx0fVxuXG5cdC8vIGRlY29tcG9zZSA/XG5cdHZhciBjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmN1aXQubG9hZCh0aGlzLnNhdmUoZGVjb21wb3NlKSk7XG5cblx0dmFyIHRmcSA9IFwiXCI7XG5cdHZhciBpbmRlbnQgPSBcIlwiO1xuXG5cdC8vIGNvbW1lbnRcblx0aWYoY29tbWVudCkge1xuXHRcdHZhciBjb21tID0gKGNvbW1lbnQgfHwgXCJcIikuc3BsaXQoXCJcXG5cIik7XG5cdFx0Y29tbS5tYXAoZnVuY3Rpb24oY2xpbmUpIHtcblx0XHRcdGlmKGNsaW5lLmxlbmd0aCA+PSAxICYmIGNsaW5lWzBdICE9IFwiI1wiKSB7XG5cdFx0XHRcdGNpcnEgKz0gXCIjIFwiO1xuXHRcdFx0fVxuXHRcdFx0Y2lycSArPSBjbGluZTtcblx0XHRcdGNpcnEgKz0gXCJcXG5cIjtcblx0XHR9KTtcblx0fVxuXG5cdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdGNvbW1lbnQ6IGNvbW1lbnQsXG5cdFx0ZGVjb21wb3NlOiBkZWNvbXBvc2UsXG5cdFx0dmVyc2lvblN0cjogdmVyc2lvblN0cixcblx0XHRhc0p1cHl0ZXI6IGZhbHNlLFxuXHRcdHNob3RzOiBzaG90cyxcblx0XHRleHBvcnRUZnE6IHRydWVcblx0fTtcdFx0XHRcdFx0XHRcblx0dGZxICs9IGNpcmN1aXQuZXhwb3J0VG9DaXJxKG5ld09wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpO1xuXHR0ZnEgKz0gXCJyZXN1bHRzX2xpc3QgPSB0ZnEubGF5ZXJzLlNhbXBsZSgpKGNpcmN1aXQsIHJlcGV0aXRpb25zPVwiK3Nob3RzK1wiKS50b19saXN0KClbMF1cXG5cIjtcblx0dGZxICs9IFwicmVzdWx0cyA9IGxpc3QobWFwKGxhbWJkYSBhcnI6IHJlZHVjZShsYW1iZGEgeCwgeTogc3RyKHgpICsgc3RyKHkpLCBhcnJbOjotMV0pLCByZXN1bHRzX2xpc3QpKVxcblwiO1xuXHR0ZnEgKz0gXCJjb3VudHMgPSBkaWN0KHppcChyZXN1bHRzLFtyZXN1bHRzLmNvdW50KGkpIGZvciBpIGluIHJlc3VsdHNdKSlcXG5cIjtcblx0dGZxICs9IFwicHJpbnQoY291bnRzKVwiO1xuXG5cdGlmKGFzSnVweXRlcikge1xuXHRcdHZhciBub3RlYm9vayA9IHtcblx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdGtlcm5lbHNwZWM6IHtcblx0XHRcdFx0XHRkaXNwbGF5X25hbWU6IFwiUHl0aG9uIDNcIixcblx0XHRcdFx0XHRsYW5ndWFnZTogXCJweXRob25cIixcblx0XHRcdFx0XHRuYW1lOiBcInB5dGhvbjNcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0bmJmb3JtYXQ6IDQsXG5cdFx0XHRuYmZvcm1hdF9taW5vcjogMCxcblx0XHRcdGNlbGxzOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjZWxsX3R5cGU6IFwiY29kZVwiLFxuXHRcdFx0XHRcdHNvdXJjZTogdGZxLFxuXHRcdFx0XHRcdG1ldGFkYXRhOiB7XG5cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG91dHB1dHM6IFtdLFxuXHRcdFx0XHRcdGV4ZWN1dGlvbl9jb3VudDogbnVsbFxuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fTtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkobm90ZWJvb2spO1xuXHR9XG5cblx0cmV0dXJuIHRmcTtcbn1cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvUVNoYXJwID0gZnVuY3Rpb24ob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgY29tbWVudCA9IG9wdGlvbnMuY29tbWVudDtcblx0dmFyIGRlY29tcG9zZSA9IG9wdGlvbnMuZGVjb21wb3NlO1xuXHR2YXIgdmVyc2lvblN0ciA9IG9wdGlvbnMudmVyc2lvblN0cjtcblx0dmFyIGFzSnVweXRlciA9IG9wdGlvbnMuYXNKdXB5dGVyO1xuXHR2YXIgY2lyY3VpdE5hbWUgPSBvcHRpb25zLmNpcmN1aXROYW1lO1xuXHR2YXIgaW5kZW50RGVwdGggPSBvcHRpb25zLmluZGVudERlcHRoO1xuXG5cdHZhciBzZWxmID0gdGhpcztcblx0XG5cdHZhciBtYXRoVG9TdHJpbmdIYW5kbGVyID0gZnVuY3Rpb24obm9kZSwgb3B0aW9ucykge1xuXG5cdFx0Ly8gc3ltYm9sc1xuXHRcdGlmKG5vZGUuaXNTeW1ib2xOb2RlKSB7XG5cdFx0XHR2YXIgcGFyYW1ldGVySnNvbiA9IHsgXCJwaVwiOiBcIlBJKClcIiB9O1xuXHRcdFx0aWYocGFyYW1ldGVySnNvbltub2RlLm5hbWVdKXtcblx0XHRcdFx0cmV0dXJuIHBhcmFtZXRlckpzb25bbm9kZS5uYW1lXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBjb25zdGFudFxuXHRcdGlmKG5vZGUuaXNDb25zdGFudE5vZGUpIHtcblx0XHRcdC8vIGNvbnZlcnQgaW50ZWdlciB0byBmbG9hdFxuXHRcdFx0aWYoTnVtYmVyLmlzSW50ZWdlcihub2RlLnZhbHVlKSkge1xuXHRcdFx0XHRyZXR1cm4gKG5vZGUudmFsdWUpLnRvRml4ZWQoMSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBvcGVyYXRpb25OYW1lID0gY2lyY3VpdE5hbWUgfHwgXCJDaXJjdWl0XCI7XG5cblx0aW5kZW50RGVwdGggPSBpbmRlbnREZXB0aCB8fCAwO1xuXG5cdGZ1bmN0aW9uIGdldEluZGVudChkZXB0aCkge1xuXHRcdHZhciBpbmRlbnQgPSBcIlwiO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBkZXB0aDsgaSsrKSB7XG5cdFx0XHRpbmRlbnQgKz0gXCIgICAgXCI7XG5cdFx0fVxuXHRcdHJldHVybiBpbmRlbnQ7XG5cdH1cblxuXHQvLyBkZWNvbXBvc2UgP1xuXHR2YXIgY2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRjaXJjdWl0LmxvYWQodGhpcy5zYXZlKGRlY29tcG9zZSkpO1xuXG5cdHZhciBxc2hhcnAgPSBcIlwiO1xuXHR2YXIgaW5kZW50ID0gZ2V0SW5kZW50KGluZGVudERlcHRoKTtcblxuXHRpZighZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdGlmKCFhc0p1cHl0ZXIpIHtcblx0XHRcdC8vIG9wZW5pbmcgbmFtZXNwYWNlXG5cdFx0XHRxc2hhcnAgKz0gXCJuYW1lc3BhY2UgUXVhbnR1bSB7XFxuXCI7XG5cdFx0XHRpbmRlbnREZXB0aCsrO1xuXHRcdFx0aW5kZW50ID0gZ2V0SW5kZW50KGluZGVudERlcHRoKTtcblx0XHR9XG5cblx0XHRxc2hhcnAgKz0gaW5kZW50K1wib3BlbiBNaWNyb3NvZnQuUXVhbnR1bS5JbnRyaW5zaWM7XFxuXCI7XG5cdFx0cXNoYXJwICs9IGluZGVudCtcIm9wZW4gTWljcm9zb2Z0LlF1YW50dW0uQ2Fub247XFxuXCI7XG5cdFx0cXNoYXJwICs9IGluZGVudCtcIm9wZW4gTWljcm9zb2Z0LlF1YW50dW0uTWF0aDtcXG5cIjtcblx0XHRxc2hhcnAgKz0gaW5kZW50K1wib3BlbiBNaWNyb3NvZnQuUXVhbnR1bS5Db252ZXJ0O1xcblwiO1xuXG5cdFx0cXNoYXJwICs9IFwiXFxuXCI7XG5cblx0XHRxc2hhcnAgKz0gaW5kZW50K1wiZnVuY3Rpb24gU2V0Qml0VmFsdWUocmVnOiBJbnQsIGJpdDogSW50LCB2YWx1ZTogQm9vbCk6IEludCB7XFxuXCI7XG5cdFx0cXNoYXJwICs9IGluZGVudCtcIiAgICBpZih2YWx1ZSkge1xcblwiO1xuXHRcdHFzaGFycCArPSBpbmRlbnQrXCIgICAgICAgIHJldHVybiByZWcgfHx8ICgxIDw8PCBiaXQpO1xcblwiO1xuXHRcdHFzaGFycCArPSBpbmRlbnQrXCIgICAgfSBlbHNlIHtcXG5cIjtcblx0XHRxc2hhcnAgKz0gaW5kZW50K1wiICAgICAgICByZXR1cm4gcmVnICYmJiB+fn4oMSA8PDwgYml0KTtcXG5cIjtcblx0XHRxc2hhcnAgKz0gaW5kZW50K1wiICAgIH1cXG5cIjtcblx0XHRxc2hhcnAgKz0gaW5kZW50K1wifVxcblwiO1xuXG5cdFx0cXNoYXJwICs9IGluZGVudCtcIlxcblwiO1xuXHR9XG5cblx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdHZhciBhcmdzID0gXCJcIjtcblx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0LnBhcmFtcy5sZW5ndGg7IGkrKykge1xuXHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdGFyZ3MgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0YXJncyArPSBjaXJjdWl0LnBhcmFtc1tpXTtcblx0XHRcdGFyZ0NvdW50Kys7XG5cdFx0fVxuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBjaXJjdWl0Lm51bVF1Yml0czsgaSsrKSB7XG5cdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0YXJncyArPSBcIiwgXCI7XG5cdFx0XHR9XG5cdFx0XHRhcmdzICs9IHF1Yml0TGV0dGVyKGksIGNpcmN1aXQubnVtUXViaXRzKSArIFwiOiBRdWJpdFwiO1xuXHRcdFx0YXJnQ291bnQrKztcblx0XHR9XG5cdFx0cXNoYXJwICs9IGluZGVudCArIFwib3BlcmF0aW9uIFwiICsgZXhwb3J0QXNHYXRlTmFtZSArIChhcmdzID8gXCIoXCIgKyBhcmdzICsgXCIpXCIgOiBcIlwiKTtcblx0XHQvLyBxc2hhcnAgKz0gXCIgICAgcmV0dXJuIFtcXG5cIjtcblx0XHQvLyBpbmRlbnQgPSBcIiAgICAgICAgXCI7XG5cdH0gZWxzZXtcblx0XHR2YXIgdXNlZEdhdGVzID0gY2lyY3VpdC51c2VkR2F0ZXMoKTtcblx0XHRpZighZGVjb21wb3NlKSB7XG5cdFx0XHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdFx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRcdGlmKCFiYXNpY0dhdGUpIHtcblx0XHRcdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHNlbGYuY3VzdG9tR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdFx0XHRpZihjdXN0b21HYXRlKSB7XG5cdFx0XHRcdFx0XHR2YXIgY3VzdG9tQ2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0Y3VzdG9tQ2lyY3VpdC5sb2FkKGN1c3RvbUdhdGUpO1xuXHRcdFx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0XHRcdGNvbW1lbnQ6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdGRlY29tcG9zZTogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0dmVyc2lvblN0cjogdmVyc2lvblN0cixcblx0XHRcdFx0XHRcdFx0YXNKdXB5dGVyOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0Y2lyY3VpdE5hbWU6IG51bGwsXG5cdFx0XHRcdFx0XHRcdGluZGVudERlcHRoOiBpbmRlbnREZXB0aFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHFzaGFycCArPSBjdXN0b21DaXJjdWl0LmV4cG9ydFRvUVNoYXJwKG5ld09wdGlvbnMsIGV4cG9ydEFzR2F0ZU5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXG5cdFx0cXNoYXJwICs9IGluZGVudCtcIm9wZXJhdGlvbiBcIiArIG9wZXJhdGlvbk5hbWUgKyBcIigpXCI7XG5cdH1cblxuXHRpbmRlbnREZXB0aCsrO1xuXHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXG5cdHZhciBjcmVnQ291bnQgPSAwO1xuXHRmb3IoY3JlZ05hbWUgaW4gY2lyY3VpdC5jcmVncykge1xuXHRcdGNyZWdDb3VudCsrO1xuXHR9XG5cblx0dmFyIGNyZWdMaXN0ID0gXCJcIjtcblx0aWYoY3JlZ0NvdW50KSB7XG5cdFx0cXNoYXJwICs9IFwiIDogKFwiXG5cdFx0Zm9yKGNyZWdOYW1lIGluIGNpcmN1aXQuY3JlZ3MpIHtcblx0XHRcdGlmKGNyZWdMaXN0KSB7XG5cdFx0XHRcdHFzaGFycCArPSBcIiwgXCI7XG5cdFx0XHRcdGNyZWdMaXN0ICs9IFwiLCBcIjtcblx0XHRcdH1cblx0XHRcdHFzaGFycCArPSBcIkludFwiO1xuXHRcdFx0Y3JlZ0xpc3QgKz0gY3JlZ05hbWU7XG5cdFx0fVxuXHRcdHFzaGFycCArPSBcIilcIjtcblx0fSBlbHNlIHtcblx0XHRxc2hhcnAgKz0gXCIgOiBVbml0XCI7XG5cdH1cblx0cXNoYXJwICs9IFwiIHtcXG5cIjtcblx0Ly8gLS0tXG5cblx0Ly8gZGVjbGFyZSBjcmVnc1xuXHRpZihjcmVnQ291bnQpIHtcblx0XHRmb3IoY3JlZ05hbWUgaW4gY2lyY3VpdC5jcmVncykge1xuXHRcdFx0cXNoYXJwICs9IGluZGVudCArIFwibXV0YWJsZSBcIiArIGNyZWdOYW1lICsgXCIgPSAwO1xcblwiO1xuXHRcdH1cblx0fVxuXG5cdHFyZWdfbmFtZSA9IFwicXViaXRzXCI7XG5cblx0aWYoIWV4cG9ydEFzR2F0ZU5hbWUpe1xuXHRcdHFzaGFycCArPSBpbmRlbnQrXCJ1c2luZyhcIjtcblx0XHRxc2hhcnAgKz0gcXJlZ19uYW1lICsgXCIgPSBRdWJpdFtcIiArIGNpcmN1aXQubnVtUXViaXRzICsgXCJdXCI7XG5cdFx0cXNoYXJwICs9IFwiKSB7XFxuXCI7XG5cdFx0aW5kZW50RGVwdGgrKztcblx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHR9XG5cblx0dmFyIGRlZkdhdGVzID0gXCJcIjtcblx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cblx0dmFyIG51bUNvbHMgPSBjaXJjdWl0Lm51bUNvbHMoKTtcblx0dmFyIGdhdGVDb3VudGVyID0gMDtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0dmFyIGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZS5uYW1lKTtcblxuXHRcdFx0XHRpZighZ2F0ZURlZikge1xuXHRcdFx0XHRcdGdhdGVEZWYgPSBjaXJjdWl0LmN1c3RvbUdhdGVzW2dhdGUubmFtZV07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgZ2F0ZVBhcmFtcyA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zID8gZ2F0ZS5vcHRpb25zLnBhcmFtcyA6IHt9O1xuXHRcdFx0XHR2YXIgcXNoYXJwSW5mbyA9IG51bGw7XG5cdFx0XHRcdHZhciBpc0NvbnRyb2xsZWRHYXRlID0gZmFsc2U7XG5cdFx0XHRcdHZhciB3aXJlSWR4ID0gMDtcblx0XHRcdFx0aWYoZ2F0ZURlZikge1xuXHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mbykge1xuXHRcdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvLnFzaGFycCAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucXNoYXJwLnJlcGxhY2VtZW50KSB7XG5cdFx0XHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mby5xc2hhcnAucmVwbGFjZW1lbnQucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0Z2F0ZVBhcmFtcyA9IGdhdGVEZWYuZXhwb3J0SW5mby5xc2hhcnAucmVwbGFjZW1lbnQucGFyYW1zO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZURlZi5leHBvcnRJbmZvLnFzaGFycC5yZXBsYWNlbWVudC5uYW1lKTtcblx0XHRcdFx0XHRcdH1cdFx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdHFzaGFycEluZm8gPSAoZ2F0ZURlZiAmJiBnYXRlRGVmLmV4cG9ydEluZm8gJiYgZ2F0ZURlZi5leHBvcnRJbmZvLnFzaGFycCkgPyBnYXRlRGVmLmV4cG9ydEluZm8ucXNoYXJwIDogbnVsbDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihnYXRlRGVmLmRyYXdpbmdJbmZvICYmIGdhdGVEZWYuZHJhd2luZ0luZm8ucm9vdCAmJiBnYXRlLm5hbWUgIT0gXCJjeFwiICYmIGdhdGUubmFtZSAhPSBcImNjeFwiKSB7XG5cdFx0XHRcdFx0XHRpc0NvbnRyb2xsZWRHYXRlID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblxuXHRcdFx0XHRcdHZhciB0bXBQYXJhbUNvdW50ID0gMDtcblx0XHRcdFx0XHR2YXIgcGFyYW1TdHJpbmcgPSBcIlwiO1xuXHRcdFx0XHRcdGlmKGdhdGVQYXJhbXMpIHtcblx0XHRcdFx0XHRcdHZhciBwYXJhbURlZiA9IGdhdGVEZWYucGFyYW1zIHx8IFtdO1xuXHRcdFx0XHRcdFx0dmFyIHBhcmFtQ291bnQgPSBwYXJhbURlZi5sZW5ndGg7XG5cdFx0XHRcdFx0XHRpZihwYXJhbUNvdW50KSB7XHRcdFxuXHRcdFx0XHRcdFx0XHRmb3IodmFyIHAgPSAwOyBwIDwgcGFyYW1Db3VudDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gaWYodG1wUGFyYW1Db3VudCA9PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gXHRwYXJhbVN0cmluZyArPSBcIihcIjtcblx0XHRcdFx0XHRcdFx0XHQvLyB9XG5cdFx0XHRcdFx0XHRcdFx0aWYodG1wUGFyYW1Db3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtU3RyaW5nICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IHBhcmFtRGVmW3BdO1x0XG5cblx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0XHQvLyBwcmVwZW5kICducCcgdG8gbWF0aCBjb25zdGFudHNcblx0XHRcdFx0XHRcdFx0XHRpZihnYXRlUGFyYW1zW3BhcmFtTmFtZV0pIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW3BhcmFtTmFtZV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1TdHJpbmcgKz0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gaWYodG1wUGFyYW1Db3VudCA9PSBwYXJhbUNvdW50IC0gMSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIFx0cGFyYW1TdHJpbmcgKz0gXCIpXCI7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gfVxuXHRcdFx0XHRcdFx0XHRcdHRtcFBhcmFtQ291bnQrKztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRpZihnYXRlLm5hbWUgPT0gXCJtZWFzdXJlXCIpIHtcblx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY3JlZykge1xuXHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gaW5kZW50ICsgXCJzZXQgXCIgKyBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lICsgXCIgPSBTZXRCaXRWYWx1ZShcIiArIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgKyBcIiwgXCIgKyBnYXRlLm9wdGlvbnMuY3JlZy5iaXQgKyBcIiwgUmVzdWx0QXNCb29sKE0oXCI7XG5cdFx0XHRcdFx0XHRcdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gcXViaXRMZXR0ZXIoZ2F0ZS53aXJlc1swXSwgY2lyY3VpdC5udW1RdWJpdHMpICsgXCIpKSk7XFxuXCI7XG5cdFx0XHRcdFx0XHRcdH1lbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gcXJlZ19uYW1lICsgXCJbXCIgKyBnYXRlLndpcmVzWzBdICsgXCJdKSkpO1xcblwiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gaW5kZW50ICsgXCIvLyBFeHBvcnQgdG8gcXNoYXJwIFdBUk5JTkc6IG1pc3NpbmcgZGVzdGluYXRpb24gcmVnaXN0ZXJcXG5cIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cXNoYXJwICs9IGluZGVudDtcblxuXHRcdFx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnKSB7XG5cdFx0XHRcdFx0XHRcdHFzaGFycCArPSBcImlmKFwiICsgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnICsgXCIgPT0gXCIgKyBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLnZhbHVlICsgXCIpIHtcXG5cIjtcblx0XHRcdFx0XHRcdFx0aW5kZW50RGVwdGgrKztcblx0XHRcdFx0XHRcdFx0aW5kZW50ID0gZ2V0SW5kZW50KGluZGVudERlcHRoKTtcblx0XHRcdFx0XHRcdFx0cXNoYXJwICs9IGluZGVudDtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYocXNoYXJwSW5mbykge1xuXHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gcXNoYXJwSW5mby5uYW1lICsgXCIoXCI7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gZ2F0ZS5uYW1lICsgXCIoXCI7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGlzQ29udHJvbGxlZEdhdGUpIHtcblx0XHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdHFzaGFycCArPSBcIltcIiArIHF1Yml0TGV0dGVyKGdhdGUud2lyZXNbMF0sIGNpcmN1aXQubnVtUXViaXRzKSArIFwiXSwgKFwiO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHFzaGFycCArPSBcIltcIiArIHFyZWdfbmFtZSArIFwiW1wiICsgZ2F0ZS53aXJlc1swXSArIFwiXV0sIChcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR3aXJlSWR4ID0gMTtcblx0XHRcdFx0XHRcdH1lbHNle1xuXHRcdFx0XHRcdFx0XHR3aXJlSWR4ID0gMDtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYocGFyYW1TdHJpbmcpe1xuXHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gcGFyYW1TdHJpbmcgKyBcIiwgXCI7XG5cdFx0XHRcdFx0XHR9IFxuXHRcdFx0XHRcdFx0Ly8gZWxzZSB7XG5cdFx0XHRcdFx0XHQvLyBcdHFzaGFycCArPSBwYXJhbVN0cmluZyArIFwiKFwiO1xuXHRcdFx0XHRcdFx0Ly8gfVxuXHRcdFx0XHRcdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRcdFx0XHRcdGZvcih2YXIgdyA9IHdpcmVJZHg7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKSB7XG5cdFx0XHRcdFx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRcdFx0XHRcdHFzaGFycCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYoZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRcdFx0XHRcdFx0XHRcdHFzaGFycCArPSBxdWJpdExldHRlcihnYXRlLndpcmVzW3ddLCBjaXJjdWl0Lm51bVF1Yml0cyk7XG5cdFx0XHRcdFx0XHRcdH1lbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRxc2hhcnAgKz0gcXJlZ19uYW1lICsgXCJbXCIgKyBnYXRlLndpcmVzW3ddICsgXCJdXCI7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZihpc0NvbnRyb2xsZWRHYXRlKXtcblx0XHRcdFx0XHRcdFx0cXNoYXJwICs9IFwiKVwiO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRxc2hhcnAgKz0gXCIpO1xcblwiO1xuXG5cdFx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpIHtcblx0XHRcdFx0XHRcdFx0Ly8gZW5kIGlmXG5cdFx0XHRcdFx0XHRcdGluZGVudERlcHRoLS07XG5cdFx0XHRcdFx0XHRcdGluZGVudCA9IGdldEluZGVudChpbmRlbnREZXB0aCk7XG5cdFx0XHRcdFx0XHRcdHFzaGFycCArPSBpbmRlbnQgKyBcIn1cXG5cIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYoIWV4cG9ydEFzR2F0ZU5hbWUpe1xuXHRcdHFzaGFycCArPSBpbmRlbnQgKyBcIlJlc2V0QWxsKFwiICsgcXJlZ19uYW1lICsgXCIpO1xcblwiO1xuXG5cdFx0aW5kZW50RGVwdGgtLTtcblx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXG5cdFx0cXNoYXJwICs9IGluZGVudCArIFwifVxcblwiO1xuXHR9XG5cblx0aWYoY3JlZ0NvdW50KSB7XG5cdFx0cXNoYXJwICs9IGluZGVudCArIFwicmV0dXJuIChcIiArIGNyZWdMaXN0ICsgXCIpO1xcblwiO1xuXHR9XG5cblx0aW5kZW50RGVwdGgtLTtcblx0aW5kZW50ID0gZ2V0SW5kZW50KGluZGVudERlcHRoKTtcblx0cXNoYXJwICs9IGluZGVudCArIFwifVxcblwiO1xuXG5cdGlmKCFleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0aWYoIWFzSnVweXRlcikge1xuXHRcdFx0Ly8gY2xvc2luZyBuYW1lc3BhY2Vcblx0XHRcdHFzaGFycCArPSBcIn1cXG5cIjtcblxuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRxc2hhcnAgKz0gXCJcXG5cIjtcblx0fVxuXG5cdGlmKGFzSnVweXRlcikge1xuXHRcdHZhciBub3RlYm9vayA9IHtcblx0XHRcdFwibWV0YWRhdGFcIjoge1xuXHRcdFx0XHRcImtlcm5lbHNwZWNcIjoge1xuXHRcdFx0XHRcdFwiZGlzcGxheV9uYW1lXCI6IFwiUSNcIixcblx0XHRcdFx0XHRcImxhbmd1YWdlXCI6IFwicXNoYXJwXCIsXG5cdFx0XHRcdFx0XCJuYW1lXCI6IFwiaXFzaGFycFwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdFwibGFuZ3VhZ2VfaW5mb1wiOiB7XG5cdFx0XHRcdFx0XCJuYW1lXCI6IFwiXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG5iZm9ybWF0OiA0LFxuXHRcdFx0bmJmb3JtYXRfbWlub3I6IDAsXG5cdFx0XHRjZWxsczogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0Y2VsbF90eXBlOiBcImNvZGVcIixcblx0XHRcdFx0XHRzb3VyY2U6IHFzaGFycCxcblx0XHRcdFx0XHRtZXRhZGF0YToge1xuXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRvdXRwdXRzOiBbXSxcblx0XHRcdFx0XHRleGVjdXRpb25fY291bnQ6IG51bGxcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNlbGxfdHlwZTogXCJjb2RlXCIsXG5cdFx0XHRcdFx0c291cmNlOiBcIiVzaW11bGF0ZSBcIiArIG9wZXJhdGlvbk5hbWUsXG5cdFx0XHRcdFx0bWV0YWRhdGE6IHtcblxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0b3V0cHV0czogW10sXG5cdFx0XHRcdFx0ZXhlY3V0aW9uX2NvdW50OiBudWxsXG5cdFx0XHRcdH1cblx0XHRcdF1cblx0XHR9O1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeShub3RlYm9vayk7XG5cdH1cblxuXHRyZXR1cm4gcXNoYXJwO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmV4cG9ydFRvQnJha2V0ID0gZnVuY3Rpb24ob3B0aW9ucywgZXhwb3J0QXNHYXRlTmFtZSkge1xuXHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHR2YXIgY29tbWVudCA9IG9wdGlvbnMuY29tbWVudDtcblx0dmFyIGRlY29tcG9zZSA9IG9wdGlvbnMuZGVjb21wb3NlO1xuXHR2YXIgdmVyc2lvblN0ciA9IG9wdGlvbnMudmVyc2lvblN0cjtcblx0dmFyIGFzSnVweXRlciA9IG9wdGlvbnMuYXNKdXB5dGVyO1xuXHR2YXIgc2hvdHMgPSBvcHRpb25zLnNob3RzO1xuXHR2YXIgaHlicmlkID0gb3B0aW9ucy5oeWJyaWQ7XG5cdHZhciBpbmRlbnREZXB0aCA9IG9wdGlvbnMuaW5kZW50RGVwdGg7XG5cblx0dmFyIHNlbGYgPSB0aGlzO1xuXG5cblx0c2hvdHMgPSBzaG90cyB8fCAxMDI0O1xuXG5cdHZhciB2ZXJzaW9uID0gcGFyc2VGbG9hdCh2ZXJzaW9uU3RyIHx8IFwiMS4wXCIpO1xuXHRpZihpc05hTih2ZXJzaW9uKSkge1xuXHRcdHZlcnNpb24gPSAxLjA7XG5cdH1cblxuXHRpZih0eXBlb2YgaHlicmlkID09IFwidW5kZWZpbmVkXCIpIHtcblx0XHRoeWJyaWQgPSB0aGlzLm9wdGlvbnMgPyAhIXRoaXMub3B0aW9ucy5oeWJyaWQgOiBmYWxzZTtcblx0fVxuXG5cdC8vIGRlY29tcG9zZSA/XG5cdHZhciBjaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmN1aXQubG9hZCh0aGlzLnNhdmUoZGVjb21wb3NlKSk7XG5cblx0dmFyIG1hdGhUb1N0cmluZ0hhbmRsZXIgPSBmdW5jdGlvbihub2RlLCBvcHRpb25zKSB7XG5cdFx0aWYobm9kZS5pc1N5bWJvbE5vZGUpIHtcblx0XHRcdHZhciBudW1weXMgPSBbXCJwaVwiLCBcInNpblwiLCBcImNvc1wiLCBcInRhblwiLCBcImFzaW5cIiwgXCJhY29zXCIsIFwiYXRhblwiXTtcblx0XHRcdGlmKG51bXB5cy5pbmRleE9mKG5vZGUubmFtZSkgPj0gMCkge1xuXHRcdFx0XHRyZXR1cm4gXCJucC5cIiArIG5vZGUubmFtZTtcblx0XHRcdH1cblxuXHRcdFx0aWYoc2VsZi5wYXJhbXMuaW5kZXhPZihub2RlLm5hbWUpID49IDAgJiYgaHlicmlkKSB7XG5cdFx0XHRcdHJldHVybiBcInBhcmFtc1tcIiArIHNlbGYucGFyYW1zLmluZGV4T2Yobm9kZS5uYW1lKSArIFwiXVwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR2YXIgYWRqdXN0SWRlbnRhdGlvbiA9IGZ1bmN0aW9uKGFkZFN0ciwgaWRlbnQpIHtcblx0XHR2YXIgc3RyID0gXCJcIjtcblxuXHRcdC8vIGFkZCB1c2VyIGRlZmluZWQgY29zdCBmdW5jdGlvbiB3aXRoIHByb3BlciBpZGVudGF0aW9uXG5cdFx0dmFyIGNmTGluZXMgPSBhZGRTdHIuc3BsaXQoXCJcXG5cIik7XG5cdFx0dmFyIG1pbklkZW50ID0gLTE7XG5cdFx0Y2ZMaW5lcy5tYXAoZnVuY3Rpb24oY2ZMaW5lKSB7XG5cdFx0XHR2YXIgdG1wSWRlbnQgPSBjZkxpbmUuc2VhcmNoKC9cXFMvKTtcblx0XHRcdGlmKHRtcElkZW50ID49IDAgJiYgKG1pbklkZW50IDwgMCB8fCB0bXBJZGVudCA8IG1pbklkZW50KSkge1xuXHRcdFx0XHRtaW5JZGVudCA9IHRtcElkZW50O1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0aWYobWluSWRlbnQgPCAwKSB7XG5cdFx0XHRtaW5JZGVudCA9IDA7XG5cdFx0fVxuXG5cdFx0dmFyIGFkZElkZW50ID0gXCJcIjtcblx0XHRpZihtaW5JZGVudCA8IGlkZW50Lmxlbmd0aCkge1xuXHRcdFx0Zm9yKHZhciB0bXAgPSAwOyB0bXAgPCAoaWRlbnQubGVuZ3RoIC0gbWluSWRlbnQpOyB0bXArKykge1xuXHRcdFx0XHRhZGRJZGVudCArPSBcIiBcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjZkxpbmVzLm1hcChmdW5jdGlvbihjZkxpbmUpIHtcblx0XHRcdHN0ciArPSBhZGRJZGVudCArIGNmTGluZSArIFwiXFxuXCI7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gc3RyO1xuXHR9O1xuXG5cdHZhciBnZXRJbmRlbnQgPSBmdW5jdGlvbihkZXB0aCkge1xuXHRcdHZhciBpbmRlbnQgPSBcIlwiO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBkZXB0aDsgaSsrKSB7XG5cdFx0XHRpbmRlbnQgKz0gXCIgICAgXCI7XG5cdFx0fVxuXHRcdHJldHVybiBpbmRlbnQ7XG5cdH1cblxuXHRpbmRlbnREZXB0aCA9IGluZGVudERlcHRoIHx8IDA7XG5cblx0dmFyIGJyYWtldCA9IFwiXCI7XG5cdHZhciBpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXG5cdHZhciB1c2VkR2F0ZXMgPSBjaXJjdWl0LnVzZWRHYXRlcygpO1xuXHR2YXIgaXNTdWJNb2R1bGUgPSBmYWxzZTtcblx0dXNlZEdhdGVzLm1hcChmdW5jdGlvbih1c2VkR2F0ZU5hbWUpe1xuXHRcdGlmKCFjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXSl7XG5cdFx0XHRpc1N1Yk1vZHVsZSA9IHRydWU7XG5cdFx0fVxuXHR9KTtcblxuXHR2YXIgYXJncyA9IFwiXCI7XG5cdHZhciBhcmdDb3VudCA9IDA7XG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY2lyY3VpdC5udW1RdWJpdHM7IGkrKykge1xuXHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdGFyZ3MgKz0gXCIsIFwiO1xuXHRcdFx0fVxuXHRcdFx0YXJncyArPSBxdWJpdExldHRlcihpLCBjaXJjdWl0Lm51bVF1Yml0cyk7XG5cdFx0XHRhcmdDb3VudCsrO1xuXHRcdH1cblx0XHRmb3IodmFyIGkgPSAwOyBpIDwgY2lyY3VpdC5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmKGFyZ0NvdW50ID4gMCkge1xuXHRcdFx0XHRhcmdzICs9IFwiLCBcIjtcblx0XHRcdH1cblx0XHRcdGFyZ3MgKz0gY2lyY3VpdC5wYXJhbXNbaV07XG5cdFx0XHRhcmdDb3VudCsrO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJpbXBvcnQgbnVtcHkgYXMgbnBcXG5cIjtcblx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJmcm9tIGJyYWtldC5kZXZpY2VzIGltcG9ydCBMb2NhbFNpbXVsYXRvclxcblwiO1xuXHRcdGJyYWtldCArPSBpbmRlbnQgKyBcImZyb20gYnJha2V0LmNpcmN1aXRzIGltcG9ydCBDaXJjdWl0XFxuXCI7XG5cdFx0YnJha2V0ICs9IGluZGVudCArIFwiZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlclxcblwiO1xuXG5cdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJmcm9tIHNjaXB5Lm9wdGltaXplIGltcG9ydCBtaW5pbWl6ZVxcblwiO1xuXHRcdH1cblxuXHRcdGJyYWtldCArPSBcIlxcblwiO1xuXG5cdFx0aWYoc2hvdHMpIHtcblx0XHRcdGJyYWtldCArPSBpbmRlbnQgKyBcInNob3RzID0gXCIgKyBzaG90cyArIFwiXFxuXCI7XG5cdFx0XHRicmFrZXQgKz0gXCJcXG5cIjtcblx0XHR9XG5cblx0XHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wYXJhbXMgPyB0aGlzLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0aWYodGhpcy5wYXJhbXMubGVuZ3RoKSB7XG5cdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXJhbXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0dmFyIGdsb2JhbFBhcmFtTmFtZSA9IHRoaXMucGFyYW1zW2ldO1xuXG5cdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSk7XG5cdFx0XHRcdHZhciBnbG9iYWxQYXJhbVZhbHVlID0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cblx0XHRcdFx0YnJha2V0ICs9IGdsb2JhbFBhcmFtTmFtZSArIFwiID0gXCIgKyBnbG9iYWxQYXJhbVZhbHVlICsgXCJcXG5cIjtcblx0XHRcdH1cblx0XHRcdGJyYWtldCArPSBcIlxcblwiO1xuXHRcdH1cblxuXHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0YnJha2V0ICs9IGluZGVudCArIFwidG9sZXJhbmNlID0gXCIgKyAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLnRvbGVyYW5jZSA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLnRvbGVyYW5jZSB8fCBcIjAuMDAxXCIgOiBcIjAuMDAxXCIpICsgXCJcXG5cIjtcblx0XHRcdGJyYWtldCArPSBcIlxcblwiO1xuXHRcdH1cblx0fVxuXG5cdHZhciB1bnN1cHBvcnRlZEJyYWtldEluZm8gPSBudWxsO1xuXHR2YXIgZ2F0ZVVuaXRhcnkgPSBudWxsO1xuXHR2YXIgc3VibW9kdWxlQ291bnQgPSAwO1xuXHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdHZhciBiYXNpY0dhdGUgPSBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRpZihiYXNpY0dhdGUpIHtcblx0XHRcdGlmKCFkZWNvbXBvc2Upe1xuXHRcdFx0XHRpZihjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXS5leHBvcnRJbmZvLmJyYWtldCAmJiBjaXJjdWl0LmJhc2ljR2F0ZXNbdXNlZEdhdGVOYW1lXS5leHBvcnRJbmZvLmJyYWtldC5hcnJheSkge1xuXHRcdFx0XHRcdHVuc3VwcG9ydGVkQnJha2V0SW5mbyA9IGNpcmN1aXQuYmFzaWNHYXRlc1t1c2VkR2F0ZU5hbWVdLmV4cG9ydEluZm8uYnJha2V0O1xuXHRcblx0XHRcdFx0XHRpZih1bnN1cHBvcnRlZEJyYWtldEluZm8ubmFtZSA9PSBcInVuaXRhcnlcIil7XG5cdFx0XHRcdFx0XHRnYXRlVW5pdGFyeSA9IHVzZWRHYXRlTmFtZSArIFwiX3VuaXRhcnlcIjtcblx0XHRcdFx0XHRcdGJyYWtldCArPSBpbmRlbnQgKyBcImRlZiBcIiArIGdhdGVVbml0YXJ5ICtcIihcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0aWYodW5zdXBwb3J0ZWRCcmFrZXRJbmZvLnBhcmFtcyAmJiB1bnN1cHBvcnRlZEJyYWtldEluZm8ucGFyYW1zLmxlbmd0aCl7XG5cdFx0XHRcdFx0XHR2YXIgYXJnQ291bnQgPSAwO1xuXHRcdFx0XHRcdFx0dW5zdXBwb3J0ZWRCcmFrZXRJbmZvLnBhcmFtcy5tYXAoZnVuY3Rpb24ocGFyYW1OYW1lKXtcblx0XHRcdFx0XHRcdFx0aWYoYXJnQ291bnQgPiAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0YnJha2V0ICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJwX1wiICsgcGFyYW1OYW1lO1xuXHRcdFx0XHRcdFx0XHRhcmdDb3VudCsrO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XG5cdFx0XHRcdFx0YnJha2V0ICs9IFwiKTpcXG5cIjtcblx0XHRcdFx0XHRicmFrZXQgKz0gZ2V0SW5kZW50KGluZGVudERlcHRoICsgMSkgKyBcInJldHVybiBucC5hcnJheShcIiArICB1bnN1cHBvcnRlZEJyYWtldEluZm8uYXJyYXkgKyBcIik7XFxuXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0dmFyIGN1c3RvbUdhdGUgPSBzZWxmLmN1c3RvbUdhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0XHRpZihjdXN0b21HYXRlKSB7XG5cdFx0XHRcdHZhciBjdXN0b21DaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdGN1c3RvbUNpcmN1aXQubG9hZChjdXN0b21HYXRlKTtcblx0XHRcdFx0YnJha2V0ICs9IGN1c3RvbUNpcmN1aXQuZXhwb3J0QnJha2V0KFwiXCIsIHRydWUsIHVzZWRHYXRlTmFtZSwgdmVyc2lvblN0ciwgZmFsc2UsIG51bGwsIGZhbHNlLCBpbmRlbnREZXB0aCk7XG5cdFx0XHRcdHN1Ym1vZHVsZUNvdW50Kys7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcdFxuXHRcdFx0XHRcdFxuXHRpZihleHBvcnRBc0dhdGVOYW1lKXtcblx0XHRicmFrZXQgKz0gXCJkZWYgXCIgKyBleHBvcnRBc0dhdGVOYW1lICsgKGFyZ3MgPyBcIihcIiArIGFyZ3MgKyBcIilcIiA6IFwiXCIpICsgXCI6XFxuXCI7XG5cdFx0aW5kZW50RGVwdGgrKztcblx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHR9IGVsc2Uge1xuXHRcdGlmKGh5YnJpZCkge1xuXHRcdFx0YnJha2V0ICs9IFwiZGVmIG9iamVjdGl2ZV9mdW5jdGlvbihwYXJhbXMpOlxcblwiXG5cdFx0XHRpbmRlbnREZXB0aCsrO1xuXHRcdFx0aW5kZW50ID0gZ2V0SW5kZW50KGluZGVudERlcHRoKTtcblx0XHR9XG5cdH1cblxuXHRicmFrZXQgKz0gaW5kZW50ICsgXCJjaXJjdWl0ID0gQ2lyY3VpdCgpXFxuXCI7XG5cblx0aWYoIWV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRpZihzdWJtb2R1bGVDb3VudCkge1xuXHRcdFx0YnJha2V0ICs9IFwiXFxuXCI7XG5cdFx0XHR1c2VkR2F0ZXMubWFwKGZ1bmN0aW9uKHVzZWRHYXRlTmFtZSkge1xuXHRcdFx0XHRpZighY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV0gJiYgY2lyY3VpdC5jdXN0b21HYXRlc1t1c2VkR2F0ZU5hbWVdKSB7XG5cdFx0XHRcdFx0YnJha2V0ICs9IGluZGVudCArIFwiY2lyY3VpdC5yZWdpc3Rlcl9zdWJyb3V0aW5lKFwiICsgdXNlZEdhdGVOYW1lICsgXCIpXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0YnJha2V0ICs9IFwiXFxuXCI7XG5cdFx0fVxuXHR9XG5cblx0dmFyIG51bUNvbHMgPSBjaXJjdWl0Lm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBjaXJjdWl0Lm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0dmFyIGdhdGVEZWYgPSBjaXJjdWl0LmdldEdhdGVEZWYoZ2F0ZS5uYW1lKTtcblx0XHRcdFx0dmFyIGdhdGVQYXJhbXMgPSBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcyA/IGdhdGUub3B0aW9ucy5wYXJhbXMgOiB7fTtcblx0XHRcdFx0dmFyIHBhcmFtRGVmID0gZ2F0ZURlZi5wYXJhbXMgfHwgW107XG5cdFx0XHRcdHZhciBicmFrZXRJbmZvID0gbnVsbDtcblxuXHRcdFx0XHR2YXIgZ2F0ZU5hbWUgPSBnYXRlLm5hbWU7XG5cdFx0XHRcdHZhciBwYXJhbVN0cmluZyA9IFwiXCI7XG5cdFx0XHRcdHZhciBpc1VuaXRhcnkgPSBmYWxzZTtcblxuXHRcdFx0XHRpZihnYXRlRGVmKSB7XG5cdFx0XHRcdFx0aWYoZ2F0ZURlZi5leHBvcnRJbmZvICYmIGdhdGVEZWYuZXhwb3J0SW5mby5icmFrZXQpIHtcblx0XHRcdFx0XHRcdGJyYWtldEluZm8gPSBnYXRlRGVmLmV4cG9ydEluZm8uYnJha2V0O1xuXG5cdFx0XHRcdFx0XHRpZihicmFrZXRJbmZvLnBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHRpZihBcnJheS5pc0FycmF5KGJyYWtldEluZm8ucGFyYW1zKSkge1xuXHRcdFx0XHRcdFx0XHRcdHBhcmFtRGVmID0gYnJha2V0SW5mby5wYXJhbXM7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Z2F0ZVBhcmFtcyA9IGJyYWtldEluZm8ucGFyYW1zO1xuXHRcdFx0XHRcdFx0XHRcdHBhcmFtRGVmID0gT2JqZWN0LmtleXMoZ2F0ZVBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYoYnJha2V0SW5mby5uYW1lID09IFwidW5pdGFyeVwiKSB7XG5cdFx0XHRcdFx0XHRcdGlzVW5pdGFyeSA9IHRydWU7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRnYXRlTmFtZSA9IGJyYWtldEluZm8ubmFtZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZighYnJha2V0SW5mbyAmJiAhY2lyY3VpdC5jdXN0b21HYXRlc1tnYXRlLm5hbWVdKSB7XG5cdFx0XHRcdFx0YnJha2V0ICs9IGluZGVudCArIFwiIyBVbnN1cHBvcnRlZCBnYXRlIFxcXCJcIiArIGdhdGUubmFtZSArIFwiXFxcIi5cXG5cIjtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgdG1wUGFyYW1Db3VudCA9IDA7XG5cdFx0XHRcdFx0aWYoZ2F0ZVBhcmFtcykge1xuXHRcdFx0XHRcdFx0dmFyIHBhcmFtQ291bnQgPSBwYXJhbURlZi5sZW5ndGg7XG5cdFx0XHRcdFx0XHRpZihwYXJhbUNvdW50KSB7XHRcdFxuXHRcdFx0XHRcdFx0XHRmb3IodmFyIHAgPSAwOyBwIDwgcGFyYW1Db3VudDsgcCsrKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYodG1wUGFyYW1Db3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhcmFtU3RyaW5nICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHBhcmFtTmFtZSA9IHBhcmFtRGVmW3BdO1x0XG5cblx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblx0XHRcdFx0XHRcdFx0XHQvLyBwcmVwZW5kICducCcgdG8gbWF0aCBjb25zdGFudHNcblx0XHRcdFx0XHRcdFx0XHRpZih0eXBlb2YgZ2F0ZVBhcmFtc1twYXJhbU5hbWVdICE9IFwidW5kZWZpbmVkXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciBub2RlID0gbWF0aC5wYXJzZShnYXRlUGFyYW1zW3BhcmFtTmFtZV0pO1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1TdHJpbmcgKz0gbm9kZS50b1N0cmluZyh7IGhhbmRsZXI6IG1hdGhUb1N0cmluZ0hhbmRsZXIgfSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHRtcFBhcmFtQ291bnQrKztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyYWtldCArPSBpbmRlbnQgKyBcImNpcmN1aXQuXCI7XG5cblx0XHRcdFx0XHRpZihpc1VuaXRhcnkpIHtcblx0XHRcdFx0XHRcdGJyYWtldCArPSBcInVuaXRhcnkobWF0cml4PVwiICsgZ2F0ZU5hbWUgKyBcIl91bml0YXJ5KFwiICsgcGFyYW1TdHJpbmcgKyBcIiksIHRhcmdldHM9W1wiO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRicmFrZXQgKz0gZ2F0ZU5hbWUgKyBcIihcIjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XG5cdFx0XHRcdFx0dmFyIGFyZ0NvdW50ID0gMDtcblx0XHRcdFx0XHRmb3IodyA9IDA7IHcgPCBnYXRlLndpcmVzLmxlbmd0aDsgdysrKSB7XG5cdFx0XHRcdFx0XHRpZihhcmdDb3VudCA+IDApIHtcblx0XHRcdFx0XHRcdFx0YnJha2V0ICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmKGV4cG9ydEFzR2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0YnJha2V0ICs9IHF1Yml0TGV0dGVyKGdhdGUud2lyZXNbd10sIGNpcmN1aXQubnVtUXViaXRzKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGJyYWtldCArPSBnYXRlLndpcmVzW3ddO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YXJnQ291bnQrKztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihpc1VuaXRhcnkpIHtcblx0XHRcdFx0XHRcdGJyYWtldCArPSBcIl1cIjtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYocGFyYW1TdHJpbmcpIHtcblx0XHRcdFx0XHRcdFx0YnJha2V0ICs9IFwiLCBcIjtcblx0XHRcdFx0XHRcdFx0YnJha2V0ICs9IHBhcmFtU3RyaW5nO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmFrZXQgKz0gXCIpXCI7XG5cdFx0XHRcdFx0YnJha2V0ICs9IFwiXFxuXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0XG5cdGlmKGV4cG9ydEFzR2F0ZU5hbWUpe1xuXHRcdGJyYWtldCArPSBpbmRlbnQgKyBcInJldHVybiBjaXJjdWl0XCI7XG5cdH1cblxuXHRicmFrZXQgKz0gXCJcXG5cXG5cIjtcblx0XG5cdGlmKCFleHBvcnRBc0dhdGVOYW1lKSB7XG5cdFx0YnJha2V0ICs9IGluZGVudCArIFwibG9jYWxfc2ltID0gTG9jYWxTaW11bGF0b3IoKVxcblwiO1xuXHRcdGJyYWtldCArPSBpbmRlbnQgKyBcInJlc3VsdCA9IGxvY2FsX3NpbS5ydW4oY2lyY3VpdCwgc2hvdHM9c2hvdHMpLnJlc3VsdCgpXFxuXCI7XG5cdFx0YnJha2V0ICs9IGluZGVudCArIFwiY291bnRzID0gQ291bnRlcih7IFxcXCJcXFwiLmpvaW4ocmV2ZXJzZWQoaykpOiB2IGZvciBrLCB2IGluIHJlc3VsdC5tZWFzdXJlbWVudF9jb3VudHMuaXRlbXMoKSB9KVxcblwiO1xuXHRcdGJyYWtldCArPSBcIlxcblwiO1xuXG5cdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCIjIENBTENVTEFURSBDT1NUIEhFUkVcXG5cIjtcblxuXHRcdFx0dmFyIGNvc3RGdW5jdGlvbiA9IHRoaXMub3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucyAmJiB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24gPyB0aGlzLm9wdGlvbnMuaHlicmlkT3B0aW9ucy5jb3N0RnVuY3Rpb24ucHl0aG9uIHx8IFwiXCIgOiBcIlwiO1xuXHRcdFx0aWYoIWNvc3RGdW5jdGlvbi50cmltKCkpIHtcblx0XHRcdFx0Y29zdEZ1bmN0aW9uID0gXCJjb3N0ID0gMFwiO1xuXHRcdFx0fVxuXG5cdFx0XHRicmFrZXQgKz0gYWRqdXN0SWRlbnRhdGlvbihjb3N0RnVuY3Rpb24sIGluZGVudCk7XG5cblx0XHRcdGJyYWtldCArPSBcIlxcblwiXG5cdFx0XHRicmFrZXQgKz0gaW5kZW50ICsgXCJyZXR1cm4gY29zdFxcblwiO1xuXG5cblx0XHRcdGluZGVudERlcHRoLS07XG5cdFx0XHRpbmRlbnQgPSBnZXRJbmRlbnQoaW5kZW50RGVwdGgpO1xuXHRcdFx0aWYoaHlicmlkKSB7XG5cdFx0XHRcdHZhciBnbG9iYWxQYXJhbUxpc3QgPSBcIlwiO1xuXHRcdFx0XHR0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24oZ2xvYmFsUGFyYW1OYW1lLCBnbG9iYWxQYXJhbUluZGV4KSB7XG5cdFx0XHRcdFx0aWYoZ2xvYmFsUGFyYW1JbmRleCA+IDApIHtcblx0XHRcdFx0XHRcdGdsb2JhbFBhcmFtTGlzdCArPSBcIiwgXCI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGdsb2JhbFBhcmFtTGlzdCArPSBnbG9iYWxQYXJhbU5hbWU7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGJyYWtldCArPSBcIlxcblwiO1xuXHRcdFx0XHRicmFrZXQgKz0gXCJwYXJhbXMgPSBucC5hcnJheShbXCIgKyBnbG9iYWxQYXJhbUxpc3QgKyBcIl0pXFxuXCI7XG5cdFx0XHRcdGJyYWtldCArPSBcIlxcblwiO1xuXHRcdFx0XHRicmFrZXQgKz0gXCJtaW5pbXVtID0gbWluaW1pemUob2JqZWN0aXZlX2Z1bmN0aW9uLCBwYXJhbXMsIG1ldGhvZD1cXFwiXCIgKyAodGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zICYmIHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLm9wdGltaXplciA/IHRoaXMub3B0aW9ucy5oeWJyaWRPcHRpb25zLm9wdGltaXplciA6IFwiUG93ZWxsXCIpICsgXCJcXFwiLCB0b2w9dG9sZXJhbmNlKVxcblwiO1xuXHRcdFx0XHRicmFrZXQgKz0gXCJwcmludChcXFwiY29zdDpcXFwiLCBtaW5pbXVtLmZ1biwgXFxcInBhcmFtczpcXFwiLCBtaW5pbXVtLngpXFxuXCI7XG5cdFx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0YnJha2V0ICs9IGluZGVudCArIFwicHJpbnQoY291bnRzKVwiO1xuXHRcdH1cblx0fVxuXG5cdGlmKGFzSnVweXRlcikge1xuXHRcdHZhciBub3RlYm9vayA9IHtcblx0XHRcdG1ldGFkYXRhOiB7XG5cdFx0XHRcdGtlcm5lbHNwZWM6IHtcblx0XHRcdFx0XHRkaXNwbGF5X25hbWU6IFwiUHl0aG9uIDNcIixcblx0XHRcdFx0XHRsYW5ndWFnZTogXCJweXRob25cIixcblx0XHRcdFx0XHRuYW1lOiBcInB5dGhvbjNcIlxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0bmJmb3JtYXQ6IDQsXG5cdFx0XHRuYmZvcm1hdF9taW5vcjogMCxcblx0XHRcdGNlbGxzOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjZWxsX3R5cGU6IFwiY29kZVwiLFxuXHRcdFx0XHRcdHNvdXJjZTogYnJha2V0LFxuXHRcdFx0XHRcdG1ldGFkYXRhOiB7XG5cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG91dHB1dHM6IFtdLFxuXHRcdFx0XHRcdGV4ZWN1dGlvbl9jb3VudDogbnVsbFxuXHRcdFx0XHR9XG5cdFx0XHRdXG5cdFx0fTtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkobm90ZWJvb2spO1xuXHR9XG5cblx0cmV0dXJuIGJyYWtldDtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5leHBvcnRUb1FvYmogPSBmdW5jdGlvbihvcHRpb25zLCBjaXJjdWl0UmVwbGFjZW1lbnQpIHtcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGNpcmN1aXROYW1lID0gb3B0aW9ucy5jaXJjdWl0TmFtZTtcblx0dmFyIGV4cGVyaW1lbnROYW1lID0gb3B0aW9ucy5leHBlcmltZW50TmFtZTtcblx0dmFyIG51bVNob3RzID0gb3B0aW9ucy5udW1TaG90cztcblxuXHR2YXIgc2VsZiA9IHRoaXM7XG5cdFxuXHR2YXIgZ2xvYmFsUGFyYW1zID0gdGhpcy5vcHRpb25zICYmIHRoaXMub3B0aW9ucy5wYXJhbXMgPyB0aGlzLm9wdGlvbnMucGFyYW1zIDoge307XG5cdHZhciBnbG9iYWxQYXJhbXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGdsb2JhbFBhcmFtcykpO1xuXHRmb3IodmFyIGdsb2JhbFBhcmFtTmFtZSBpbiBnbG9iYWxQYXJhbXMpIHtcblx0XHRnbG9iYWxQYXJhbXNbZ2xvYmFsUGFyYW1OYW1lXSA9IG1hdGguZXZhbHVhdGUoZ2xvYmFsUGFyYW1zW2dsb2JhbFBhcmFtTmFtZV0pO1xuXHR9XG5cblx0Y2lyY3VpdE5hbWUgPSBjaXJjdWl0TmFtZSB8fCBcIlwiO1xuXHRleHBlcmltZW50TmFtZSA9IGV4cGVyaW1lbnROYW1lIHx8IFwiXCI7XG5cdG51bVNob3RzID0gbnVtU2hvdHMgfHwgMTtcblxuXHQvLyAtLS1cblx0Ly8gZGVjb21wb3NlIGNpcmN1aXRcblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0Y2lyY3VpdC5sb2FkKHRoaXMuc2F2ZSh0cnVlKSk7XG5cdC8vIC0tLVxuXG5cdHZhciBpZCA9IHRoaXMucmFuZG9tU3RyaW5nKCk7XG5cdHZhciBwYXJlbnRRb2JqID0ge3FvYmpfaWQ6IFwicW9ial9cIiArIGlkLCB0eXBlOiBcIlFBU01cIiwgc2NoZW1hX3ZlcnNpb246IFwiMS4wXCIsIGV4cGVyaW1lbnRzOiBbXSwgaGVhZGVyOiB7ZGVzY3JpcHRpb246IGNpcmN1aXROYW1lfSwgY29uZmlnOntzaG90czogbnVtU2hvdHMsIG1lbW9yeV9zbG90czogMH19O1xuXHR2YXIgcW9iaiA9IHtoZWFkZXI6IHttZW1vcnlfc2xvdHM6IDAsIG5fcXViaXRzOiAwLCBxcmVnX3NpemVzOiBbXSwgcXViaXRfbGFiZWxzOiBbXSwgY3JlZ19zaXplczogW10sIGNsYml0X2xhYmVsczogW10sIG5hbWU6IFwiY2lyY3VpdDBcIn0sIGNvbmZpZzoge25fcXViaXRzOiAwLCBtZW1vcnlfc2xvdHM6IDB9LCBpbnN0cnVjdGlvbnM6IFtdfTtcblx0dmFyIGNyZWdOYW1lcyA9IE9iamVjdC5rZXlzKGNpcmN1aXQuY3JlZ3MpO1xuXG5cdHZhciBpbnRUb0RvdWJsZSA9IGZ1bmN0aW9uKG5vZGUsIG9wdGlvbnMpIHtcblx0XHRpZihOdW1iZXIuaXNJbnRlZ2VyKG5vZGUpKSB7XG5cdFx0XHRyZXR1cm4gbm9kZS50b0ZpeGVkKDEpO1xuXHRcdH1cblx0XHRyZXR1cm4gbm9kZTtcblx0fTtcblxuXHRpZighY2lyY3VpdFJlcGxhY2VtZW50KXtcblx0XHRpZihleHBlcmltZW50TmFtZSl7XG5cdFx0XHRxb2JqLmhlYWRlci5kZXNjcmlwdGlvbiA9IGV4cGVyaW1lbnROYW1lO1xuXHRcdH1cblx0XHRmb3IoY3JlZ05hbWUgaW4gY2lyY3VpdC5jcmVncyl7XG5cdFx0XHR2YXIgY3JlZ0xlbmd0aCA9IGNpcmN1aXQuY3JlZ3NbY3JlZ05hbWVdLmxlbmd0aDtcblx0XHRcdHBhcmVudFFvYmouY29uZmlnLm1lbW9yeV9zbG90cyArPSBjcmVnTGVuZ3RoO1xuXHRcdFx0cW9iai5oZWFkZXIuY3JlZ19zaXplcy5wdXNoKFtjcmVnTmFtZSwgY3JlZ0xlbmd0aF0pO1xuXHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGNyZWdMZW5ndGg7IGkrKyl7XG5cdFx0XHRcdHFvYmouaGVhZGVyLmNsYml0X2xhYmVscy5wdXNoKFtjcmVnTmFtZSwgaV0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRxb2JqLmhlYWRlci5tZW1vcnlfc2xvdHMgPSBwYXJlbnRRb2JqLmNvbmZpZy5tZW1vcnlfc2xvdHM7XG5cdFx0cW9iai5oZWFkZXIubl9xdWJpdHMgPSBjaXJjdWl0Lm51bVF1Yml0cztcblx0XHRxb2JqLmNvbmZpZy5tZW1vcnlfc2xvdHMgPSBwYXJlbnRRb2JqLmNvbmZpZy5tZW1vcnlfc2xvdHM7XG5cdFx0cW9iai5jb25maWcubl9xdWJpdHMgPSBjaXJjdWl0Lm51bVF1Yml0cztcblx0XHRxb2JqLmhlYWRlci5xcmVnX3NpemVzLnB1c2goW1wicVwiLCBjaXJjdWl0Lm51bVF1Yml0c10pO1xuXHR9XG5cblx0dmFyIHJlZ2lzdGVyU2xvdHMgPSBwYXJlbnRRb2JqLmNvbmZpZy5tZW1vcnlfc2xvdHM7XG5cblx0dmFyIHVzZWRHYXRlcyA9IGNpcmN1aXQudXNlZEdhdGVzKCk7XG5cdHVzZWRHYXRlcy5tYXAoZnVuY3Rpb24odXNlZEdhdGVOYW1lKXtcblx0XHR2YXIgYmFzaWNHYXRlID0gY2lyY3VpdC5iYXNpY0dhdGVzW3VzZWRHYXRlTmFtZV07XG5cdFx0aWYoIWJhc2ljR2F0ZSl7XG5cdFx0XHR2YXIgY3VzdG9tR2F0ZSA9IHNlbGYuY3VzdG9tR2F0ZXNbdXNlZEdhdGVOYW1lXTtcblx0XHRcdGlmKGN1c3RvbUdhdGUpe1xuXHRcdFx0XHRjdXN0b21DaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdGN1c3RvbUNpcmN1aXQubG9hZChjdXN0b21HYXRlKTtcblx0XHRcdFx0dmFyIG5ld09wdGlvbnMgPSB7XG5cdFx0XHRcdFx0Y2lyY3VpdE5hbWU6IGNpcmN1aXROYW1lLFxuXHRcdFx0XHRcdGV4cGVyaW1lbnROYW1lOiBleHBlcmltZW50TmFtZSxcblx0XHRcdFx0XHRudW1TaG90czogbnVtU2hvdHNcblx0XHRcdFx0fTtcblx0XHRcdFx0cGFyZW50UW9iaiArPSBjdXN0b21DaXJjdWl0LmV4cG9ydFRvUW9iaihuZXdPcHRpb25zLCBmYWxzZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHR2YXIgbnVtQ29scyA9IGNpcmN1aXQubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKXtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgY2lyY3VpdC5udW1RdWJpdHM7IHdpcmUrKyl7XG5cdFx0XHR2YXIgZ2F0ZSA9IGNpcmN1aXQuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHR2YXIgcW9iakluc3RydWN0aW9uID0ge25hbWUgOiBcIlwiLCBxdWJpdHM6IFtdfTtcblx0XHRcdHZhciBxb2JqUmVwbGFjZW1lbnQgPSBudWxsO1xuXHRcdFx0dmFyIHFvYmpFcXVpdmFsZW50ID0gbnVsbDtcblx0XHRcdGlmKGNvbHVtbiA9PSAwKXtcblx0XHRcdFx0cW9iai5oZWFkZXIucXViaXRfbGFiZWxzLnB1c2goW1wicVwiLCB3aXJlXSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCl7XG5cdFx0XHRcdHZhciBnYXRlRGVmID0gY2lyY3VpdC5nZXRHYXRlRGVmKGdhdGUubmFtZSk7XG5cdFx0XHRcdGlmKGdhdGVEZWYpe1xuXHRcdFx0XHRcdGlmKGdhdGVEZWYuZXhwb3J0SW5mbyl7XG5cdFx0XHRcdFx0XHRpZihnYXRlRGVmLmV4cG9ydEluZm8ucWFzbSAmJiBnYXRlRGVmLmV4cG9ydEluZm8ucWFzbS5yZXBsYWNlbWVudCl7XG5cdFx0XHRcdFx0XHRcdHFvYmpSZXBsYWNlbWVudCA9IGdhdGVEZWYuZXhwb3J0SW5mby5xYXNtLnJlcGxhY2VtZW50O1xuXHRcdFx0XHRcdFx0XHRxb2JqUmVwbGFjZW1lbnQubWFwKGZ1bmN0aW9uKHJlcGxhY2VtZW50KXtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmVwbGFjZW1lbnRDaXJjdWl0ID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdFx0XHRcdFx0XHRcdFx0cmVwbGFjZW1lbnRDaXJjdWl0LmNyZWdzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzZWxmLmNyZWdzKSk7XG5cblx0XHRcdFx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLnBhcmFtcyl7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcGFyYW1zID0gT2JqZWN0LmtleXMoZ2F0ZS5vcHRpb25zLnBhcmFtcyk7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmVwbGFjZW1lbnRQYXJhbXMgPSBPYmplY3Qua2V5cyhyZXBsYWNlbWVudC5wYXJhbXMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0cGFyYW1zLm1hcChmdW5jdGlvbihwYXJhbSl7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmKHJlcGxhY2VtZW50UGFyYW1zLmluZGV4T2YocGFyYW0pID4gLTEpe1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlcGxhY2VtZW50LnBhcmFtc1twYXJhbV0gPSBnYXRlLm9wdGlvbnMucGFyYW1zW3BhcmFtXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHZhciByZXBsYWNlbWVudENvbmRpdGlvbiA9IGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uID8gZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiA6IHt9O1xuXHRcdFx0XHRcdFx0XHRcdHJlcGxhY2VtZW50Q2lyY3VpdC5hZGRHYXRlKHJlcGxhY2VtZW50Lm5hbWUsIGNvbHVtbiwgZ2F0ZS53aXJlcywgeyBwYXJhbXM6IHJlcGxhY2VtZW50LnBhcmFtcywgY29uZGl0aW9uOiByZXBsYWNlbWVudENvbmRpdGlvbiB9KTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbmV3T3B0aW9ucyA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNpcmN1aXROYW1lOiBcIlwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZXhwZXJpbWVudE5hbWU6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRudW1TaG90czogXCJcIlxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdFx0cW9iai5pbnN0cnVjdGlvbnMgPSBxb2JqLmluc3RydWN0aW9ucy5jb25jYXQocmVwbGFjZW1lbnRDaXJjdWl0LmV4cG9ydFRvUW9iaihuZXdPcHRpb25zLCB0cnVlKSk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fWVsc2UgaWYoZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20gJiYgZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20uZXF1aXZhbGVudCl7XG5cdFx0XHRcdFx0XHRcdHFvYmpFcXVpdmFsZW50ID0gZ2F0ZURlZi5leHBvcnRJbmZvLnFhc20uZXF1aXZhbGVudDtcblx0XHRcdFx0XHRcdFx0cW9iakVxdWl2YWxlbnQubWFwKGZ1bmN0aW9uKGVxdWl2YWxlbnQpe1xuXHRcdFx0XHRcdFx0XHRcdHZhciBlcXVpdmFsZW50Q2lyY3VpdCA9IG5ldyBRdWFudHVtQ2lyY3VpdCgpO1xuXHRcdFx0XHRcdFx0XHRcdGVxdWl2YWxlbnRDaXJjdWl0LmNyZWdzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShzZWxmLmNyZWdzKSk7XG5cblx0XHRcdFx0XHRcdFx0XHR2YXIgZ2F0ZVdpcmVzID0gZXF1aXZhbGVudC53aXJlcy5sZW5ndGggPiAxID8gZ2F0ZS53aXJlcyA6IGdhdGUud2lyZXNbZXF1aXZhbGVudC53aXJlc1swXV07XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGVxUGFyYW1zID0ge307XG5cdFx0XHRcdFx0XHRcdFx0aWYoZXF1aXZhbGVudC5wYXJhbXMpIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIC0tLVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gZXF1aXZhbGVudCBnYXRlIHBhcmFtcyBjYW4gY29udGFpbiB2YXJpYWJsZSBmcm9tIGdhdGUgcGFyYW1zXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyAtLS1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gRXZhbHVhdGUgZ2F0ZSdzIHBhcmFtc1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIGdhdGVQYXJhbXMgPSB7fTtcblx0XHRcdFx0XHRcdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZvcih2YXIgZ2F0ZVBhcmFtTmFtZSBpbiBnYXRlLm9wdGlvbnMucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Z2F0ZVBhcmFtc1tnYXRlUGFyYW1OYW1lXSA9IG1hdGguZXZhbHVhdGUoZ2F0ZS5vcHRpb25zLnBhcmFtc1tnYXRlUGFyYW1OYW1lXSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gRXZhbHVhdGUgZXF1aXZhbGVudCBnYXRlJ3MgcGFyYW1zXG5cdFx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGVxUGFyYW1OYW1lIGluIGVxdWl2YWxlbnQucGFyYW1zKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGVxUGFyYW1zW2VxUGFyYW1OYW1lXSA9IG1hdGguZXZhbHVhdGUoZXF1aXZhbGVudC5wYXJhbXNbZXFQYXJhbU5hbWVdLCBnYXRlUGFyYW1zKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHR2YXIgZXFDb25kaXRpb24gPSBnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiA/IGdhdGUub3B0aW9ucy5jb25kaXRpb24gOiB7fTtcblxuXHRcdFx0XHRcdFx0XHRcdGVxdWl2YWxlbnRDaXJjdWl0LmFkZEdhdGUoZXF1aXZhbGVudC5uYW1lLCBjb2x1bW4sIGdhdGVXaXJlcywgeyBwYXJhbXM6IGVxUGFyYW1zLCBjb25kaXRpb246IGVxQ29uZGl0aW9uIH0pO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBuZXdPcHRpb25zID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2lyY3VpdE5hbWU6IFwiXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHRleHBlcmltZW50TmFtZTogXCJcIixcblx0XHRcdFx0XHRcdFx0XHRcdG51bVNob3RzOiBcIlwiXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0XHRxb2JqLmluc3RydWN0aW9ucyA9IHFvYmouaW5zdHJ1Y3Rpb25zLmNvbmNhdChlcXVpdmFsZW50Q2lyY3VpdC5leHBvcnRUb1FvYmoobmV3T3B0aW9ucywgdHJ1ZSkpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZighcW9ialJlcGxhY2VtZW50ICYmICFxb2JqRXF1aXZhbGVudCl7XG5cdFx0XHRcdFx0dmFyIGdhdGVOYW1lID0gZ2F0ZS5uYW1lO1xuXHRcdFx0XHRcdHZhciBnYXRlUGFyYW1zID0gZ2F0ZS5vcHRpb25zICYmIGdhdGUub3B0aW9ucy5wYXJhbXMgPyBnYXRlLm9wdGlvbnMucGFyYW1zIDoge307XG5cdFx0XHRcdFx0aWYodGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXSl7XG5cdFx0XHRcdFx0XHRzd2l0Y2goZ2F0ZU5hbWUpIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcImlkXCI6IHtcblx0XHRcdFx0XHRcdFx0XHRnYXRlTmFtZSA9IFwiaWRlblwiO1xuXHRcdFx0XHRcdFx0XHR9OyBicmVhaztcblx0XHRcblx0XHRcdFx0XHRcdFx0Ly8gY2FzZSBcInIyXCI6IHtcblx0XHRcdFx0XHRcdFx0Ly8gXHRnYXRlTmFtZSA9IFwidTFcIjtcblx0XHRcdFx0XHRcdFx0Ly8gXHRnYXRlUGFyYW1zID0geyBsYW1iZGE6IFwicGkvMlwiIH07XG5cdFx0XHRcdFx0XHRcdC8vIH07IGJyZWFrO1xuXHRcdFxuXHRcdFx0XHRcdFx0XHQvLyBjYXNlIFwicjRcIjoge1xuXHRcdFx0XHRcdFx0XHQvLyBcdGdhdGVOYW1lID0gXCJ1MVwiO1xuXHRcdFx0XHRcdFx0XHQvLyBcdGdhdGVQYXJhbXMgPSB7IGxhbWJkYTogXCJwaS80XCIgfTtcblx0XHRcdFx0XHRcdFx0Ly8gfTsgYnJlYWs7XG5cdFx0XG5cdFx0XHRcdFx0XHRcdC8vIGNhc2UgXCJyOFwiOiB7XG5cdFx0XHRcdFx0XHRcdC8vIFx0Z2F0ZU5hbWUgPSBcInUxXCI7XG5cdFx0XHRcdFx0XHRcdC8vIFx0Z2F0ZVBhcmFtcyA9IHsgbGFtYmRhOiBcInBpLzhcIiB9O1xuXHRcdFx0XHRcdFx0XHQvLyB9OyBicmVhaztcblx0XHRcblx0XHRcdFx0XHRcdFx0Ly8gY2FzZSBcImNyMlwiOiB7XG5cdFx0XHRcdFx0XHRcdC8vIFx0Z2F0ZU5hbWUgPSBcImN1MVwiO1xuXHRcdFx0XHRcdFx0XHQvLyBcdGdhdGVQYXJhbXMgPSB7IGxhbWJkYTogXCJwaS8yXCIgfTtcblx0XHRcdFx0XHRcdFx0Ly8gfTsgYnJlYWs7XG5cdFx0XG5cdFx0XHRcdFx0XHRcdC8vIGNhc2UgXCJjcjRcIjoge1xuXHRcdFx0XHRcdFx0XHQvLyBcdGdhdGVOYW1lID0gXCJjdTFcIjtcblx0XHRcdFx0XHRcdFx0Ly8gXHRnYXRlUGFyYW1zID0geyBsYW1iZGE6IFwicGkvNFwiIH07XG5cdFx0XHRcdFx0XHRcdC8vIH07IGJyZWFrO1xuXHRcdFxuXHRcdFx0XHRcdFx0XHQvLyBjYXNlIFwiY3I4XCI6IHtcblx0XHRcdFx0XHRcdFx0Ly8gXHRnYXRlTmFtZSA9IFwiY3UxXCI7XG5cdFx0XHRcdFx0XHRcdC8vIFx0Z2F0ZVBhcmFtcyA9IHsgbGFtYmRhOiBcInBpLzhcIiB9O1xuXHRcdFx0XHRcdFx0XHQvLyB9OyBicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcblx0XHRcdFx0XHRcdHFvYmpJbnN0cnVjdGlvbi5uYW1lID0gZ2F0ZU5hbWU7XHRcdFx0XHRcblx0XHRcdFx0XHRcdHFvYmpJbnN0cnVjdGlvbi5xdWJpdHMgPSBnYXRlLndpcmVzO1xuXG5cdFx0XHRcdFx0XHRpZihnYXRlLm9wdGlvbnMgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpe1xuXHRcdFx0XHRcdFx0XHR2YXIgYm9vbGVhbkluc3RydWN0aW9uID0ge25hbWU6IFwiXCIsIHJlZ2lzdGVyOiByZWdpc3RlclNsb3RzLCByZWxhdGlvbjogXCI9PVwiLCBtYXNrOiBcIlwiLCB2YWw6IFwiXCJ9O1xuXHRcdFx0XHRcdFx0XHR2YXIgY3JlZ1NpemUgPSBjaXJjdWl0LmNyZWdzW2dhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZ10ubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHR2YXIgbnVtYmVyT2ZCaXRzU2hpZnQgPSAwO1xuXHRcdFx0XHRcdFx0XHR2YXIgbWFza1ZhbHVlID0gMDtcblx0XHRcdFx0XHRcdFx0dmFyIG1hc2sgPSBcIlwiO1xuXHRcdFx0XHRcdFx0XHR2YXIgdmFsID0gXCJcIjtcblx0XHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRcdHZhciBpbmRleE9mUmVnaXN0ZXIgPSBjcmVnTmFtZXMuaW5kZXhPZihnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpO1xuXHRcdFx0XHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgaW5kZXhPZlJlZ2lzdGVyOyBpKyspe1xuXHRcdFx0XHRcdFx0XHRcdG51bWJlck9mQml0c1NoaWZ0ICs9IGNpcmN1aXQuY3JlZ3NbY3JlZ05hbWVzW2ldXS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHR2YXIgdmFsdWUgPSAoZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi52YWx1ZSAlIE1hdGgucG93KDIsIGNyZWdTaXplKSkqTWF0aC5wb3coMiwgbnVtYmVyT2ZCaXRzU2hpZnQpO1xuXHRcdFx0XHRcdFx0XHR2YWwgPSBcIjB4XCIgKyB2YWx1ZS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblxuXHRcdFx0XHRcdFx0XHRpZihudW1iZXJPZkJpdHNTaGlmdCA+IDApe1xuXHRcdFx0XHRcdFx0XHRcdHZhciBleHBvbmVudCA9IE1hdGgucG93KDIsIG51bWJlck9mQml0c1NoaWZ0KTtcblx0XHRcdFx0XHRcdFx0XHRmb3IodmFyIGJpdCA9IDA7IGJpdCA8IGNyZWdTaXplOyBiaXQrKyl7XHRcdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0XHRcdFx0bWFza1ZhbHVlICs9IGV4cG9uZW50O1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXhwb25lbnQgKj0gMjtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0bWFzayA9IFwiMHhcIiArIG1hc2tWYWx1ZS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblx0XHRcdFx0XHRcdFx0fWVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdG1hc2sgPSBcIjB4XCIgKyAoTWF0aC5wb3coMiwgY3JlZ1NpemUpIC0gMSkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0Ym9vbGVhbkluc3RydWN0aW9uLm5hbWUgPSBcImJmdW5jXCI7XG5cdFx0XHRcdFx0XHRcdHFvYmpJbnN0cnVjdGlvbi5jb25kaXRpb25hbCA9IHJlZ2lzdGVyU2xvdHM7XG5cdFx0XHRcdFx0XHRcdGJvb2xlYW5JbnN0cnVjdGlvbi5tYXNrID0gbWFzaztcblx0XHRcdFx0XHRcdFx0Ym9vbGVhbkluc3RydWN0aW9uLnZhbCA9IHZhbDtcblx0XHRcdFx0XHRcdFx0cW9iai5pbnN0cnVjdGlvbnMucHVzaChib29sZWFuSW5zdHJ1Y3Rpb24pO1xuXHRcdFx0XHRcdFx0XHRyZWdpc3RlclNsb3RzICs9IDE7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGdhdGVOYW1lID09IFwibWVhc3VyZVwiICYmIGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY3JlZyl7XG5cdFx0XHRcdFx0XHRcdHFvYmpJbnN0cnVjdGlvbi5tZW1vcnkgPSBbXTtcblx0XHRcdFx0XHRcdFx0cW9iakluc3RydWN0aW9uLnJlZ2lzdGVyID0gW107XG5cdFx0XHRcdFx0XHRcdHZhciBwcmV2UmVnaXN0ZXJMZW5ndGggPSAwO1xuXHRcdFx0XHRcdFx0XHR2YXIgaW5kZXhPZlJlZ2lzdGVyID0gY3JlZ05hbWVzLmluZGV4T2YoZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSk7XG5cdFx0XHRcdFx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBpbmRleE9mUmVnaXN0ZXI7IGkrKyl7XG5cdFx0XHRcdFx0XHRcdFx0cHJldlJlZ2lzdGVyTGVuZ3RoICs9IGNpcmN1aXQuY3JlZ3NbY3JlZ05hbWVzW2ldXS5sZW5ndGg7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0dmFyIGNyZWdCaXQgPSBwcmV2UmVnaXN0ZXJMZW5ndGggKyBnYXRlLm9wdGlvbnMuY3JlZy5iaXQ7XG5cdFx0XHRcdFx0XHRcdHFvYmpJbnN0cnVjdGlvbi5tZW1vcnkucHVzaChjcmVnQml0KTtcblx0XHRcdFx0XHRcdFx0cW9iakluc3RydWN0aW9uLnJlZ2lzdGVyLnB1c2goY3JlZ0JpdCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmKGdhdGVQYXJhbXMpe1xuXHRcdFx0XHRcdFx0XHRnYXRlRGVmID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblx0XHRcdFx0XHRcdFx0aWYoIWdhdGVEZWYpIHtcblx0XHRcdFx0XHRcdFx0XHRnYXRlRGVmID0gdGhpcy5jdXN0b21HYXRlc1tnYXRlTmFtZV07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0aWYoZ2F0ZURlZil7XG5cdFx0XHRcdFx0XHRcdFx0cGFyYW1EZWYgPSBnYXRlRGVmLnBhcmFtcyB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRwYXJhbUNvdW50ID0gcGFyYW1EZWYubGVuZ3RoO1xuXHRcdFx0XHRcdFx0XHRcdGlmKHBhcmFtQ291bnQpe1xuXHRcdFx0XHRcdFx0XHRcdFx0cW9iakluc3RydWN0aW9uLnBhcmFtcyA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBwID0gMDsgcCA8IHBhcmFtQ291bnQ7IHArKykge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJhbU5hbWUgPSBwYXJhbURlZltwXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYoZ2F0ZVBhcmFtc1twYXJhbU5hbWVdIHx8IGdhdGVQYXJhbXNbcGFyYW1OYW1lXS50b1N0cmluZygpKXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YXIgbm9kZSA9IG1hdGguZXZhbHVhdGUoZ2F0ZVBhcmFtc1twYXJhbU5hbWVdLCBnbG9iYWxQYXJhbXMpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHFvYmpJbnN0cnVjdGlvbi5wYXJhbXMucHVzaChub2RlKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XG5cdFx0XHRcdFx0XHRxb2JqLmluc3RydWN0aW9ucy5wdXNoKHFvYmpJbnN0cnVjdGlvbik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdFxuXHRpZihjaXJjdWl0UmVwbGFjZW1lbnQpe1xuXHRcdHJldHVybiBxb2JqLmluc3RydWN0aW9ucztcblx0fVxuXG5cdGlmKHFvYmouaW5zdHJ1Y3Rpb25zLmxlbmd0aCl7XG5cdFx0cGFyZW50UW9iai5leHBlcmltZW50cy5wdXNoKHFvYmopO1xuXHR9XG5cblx0cmV0dXJuIHBhcmVudFFvYmo7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5jbGVhclBhcnRpdGlvbnMgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5wYXJ0aXRpb25NYXAgPSBbXTtcblx0dGhpcy5wYXJ0aXRpb25Db3VudCA9IDA7XG5cdHRoaXMucGFydGl0aW9uSW5mbyA9IHt9O1xuXG5cdHZhciBudW1Db2xzID0gdGhpcy5udW1Db2xzKCk7XG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0dGhpcy5wYXJ0aXRpb25NYXAucHVzaChbXSk7XG5cdFx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdFx0dGhpcy5wYXJ0aXRpb25NYXBbd2lyZV0ucHVzaCgtMSk7XG5cdFx0fVxuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuY3JlYXRlUGFydGl0aW9ucyA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLmNsZWFyUGFydGl0aW9ucygpO1xuXG5cdHZhciB3aXJlUGFydGl0aW9ucyA9IFtdO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5udW1RdWJpdHM7IGkrKykge1xuXHRcdHdpcmVQYXJ0aXRpb25zLnB1c2goLTEpO1xuXHR9XG5cblx0dmFyIHBhcnRpdGlvbkNvdW50ZXIgPSAwO1xuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gdGhpcy5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS53aXJlcykge1xuXHRcdFx0XHR2YXIgcHJldlBhcnRpdGlvbnMgPSBbXTtcblx0XHRcdFx0Zm9yKHZhciB3ID0gMDsgdyA8IGdhdGUud2lyZXMubGVuZ3RoOyB3KyspIHtcblx0XHRcdFx0XHR2YXIgd3IgPSBnYXRlLndpcmVzW3ddO1xuXHRcdFx0XHRcdHZhciBwcmV2UGFydGl0aW9uID0gd2lyZVBhcnRpdGlvbnNbd3JdO1xuXHRcdFx0XHRcdGlmKHByZXZQYXJ0aXRpb25zLmluZGV4T2YocHJldlBhcnRpdGlvbikgPCAwKSB7XG5cdFx0XHRcdFx0XHRwcmV2UGFydGl0aW9ucy5wdXNoKHByZXZQYXJ0aXRpb24pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgcGFydGl0aW9uID0gLTE7XG5cdFx0XHRcdGlmKHByZXZQYXJ0aXRpb25zLmxlbmd0aCAhPSAxIHx8IHByZXZQYXJ0aXRpb25zWzBdID09IC0xKSB7XG5cdFx0XHRcdFx0cGFydGl0aW9uID0gcGFydGl0aW9uQ291bnRlcisrO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHBhcnRpdGlvbiA9IHByZXZQYXJ0aXRpb25zWzBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yKHZhciB3ID0gMDsgdyA8IGdhdGUud2lyZXMubGVuZ3RoOyB3KyspIHtcblx0XHRcdFx0XHR2YXIgd3IgPSBnYXRlLndpcmVzW3ddO1xuXG5cdFx0XHRcdFx0b2xkUGFydGl0aW9uID0gd2lyZVBhcnRpdGlvbnNbd3JdO1xuXHRcdFx0XHRcdGlmKG9sZFBhcnRpdGlvbiA9PSAtMSkge1xuXHRcdFx0XHRcdFx0d2lyZVBhcnRpdGlvbnNbd3JdID0gcGFydGl0aW9uO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRmb3IodmFyIGkgPSAwOyBpIDwgdGhpcy5udW1RdWJpdHM7IGkrKykge1xuXHRcdFx0XHRcdFx0XHRpZih3aXJlUGFydGl0aW9uc1tpXSA9PSBvbGRQYXJ0aXRpb24pIHtcblx0XHRcdFx0XHRcdFx0XHR3aXJlUGFydGl0aW9uc1tpXSA9IHBhcnRpdGlvbjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR0aGlzLnBhcnRpdGlvbk1hcFt3aXJlXVtjb2x1bW5dID0gd2lyZVBhcnRpdGlvbnNbd2lyZV07XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5wYXJ0aXRpb25Db3VudCA9IHBhcnRpdGlvbkNvdW50ZXI7XG5cblx0Zm9yKHZhciBwYXJ0aXRpb24gPSAwOyBwYXJ0aXRpb24gPCBwYXJ0aXRpb25Db3VudGVyOyBwYXJ0aXRpb24rKykge1xuXHRcdHRoaXMucGFydGl0aW9uSW5mb1twYXJ0aXRpb25dID0gdGhpcy5wYXJ0aXRpb25Cb3VuZHMocGFydGl0aW9uKTtcblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnByaW50UGFydGl0aW9ucyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdHZhciByb3cgPSBcIlwiO1xuXHRcdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRcdHZhciBwYXJ0ID0gdGhpcy5wYXJ0aXRpb25NYXBbd2lyZV1bY29sdW1uXTtcblx0XHRcdGlmKHBhcnQgPT0gLTEpIHBhcnQgPSBcIiBcIjtcblx0XHRcdGlmKHRoaXMuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSkpIHtcblx0XHRcdFx0cGFydCA9IHBhcnQgKyBcIipcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHBhcnQgPSBwYXJ0ICsgXCIgXCI7XG5cdFx0XHR9XG5cdFx0XHR3aGlsZShwYXJ0Lmxlbmd0aCA8IDQpIHtcblx0XHRcdFx0cGFydCA9IFwiIFwiICsgcGFydDtcblx0XHRcdH1cblx0XHRcdHJvdyArPSBwYXJ0O1xuXHRcdH1cblx0XHR2YXIgdyA9IHdpcmUgKyBcIlwiO1xuXHRcdHdoaWxlKHcubGVuZ3RoIDwgMikge1xuXHRcdFx0dyA9IFwiMFwiICsgdztcblx0XHR9XG5cdFx0cm93ID0gXCJxXCIgKyB3ICsgcm93O1xuXHRcdGNvbnNvbGUubG9nKHJvdyk7XG5cdH1cbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnBhcnRpdGlvbkJvdW5kcyA9IGZ1bmN0aW9uKHBhcnRpdGlvbkluZGV4KSB7XG5cdHZhciBib3VuZHMgPSB7XG5cdFx0d2lyZToge1xuXHRcdFx0dG9wOiAtMSxcblx0XHRcdGJvdHRvbTogLTFcblx0XHR9LFxuXHRcdGNvbHVtbjoge1xuXHRcdFx0bGVmdDogLTEsXG5cdFx0XHRyaWdodDogLTFcblx0XHR9LFxuXHRcdHdpcmVNYXA6IHtcblxuXHRcdH0sXG5cdFx0cGFyZW50czoge1xuXG5cdFx0fVxuXHR9O1xuXG5cdHZhciBmb3VuZCA9IGZhbHNlO1xuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBwYXJ0aXRpb24gPSB0aGlzLnBhcnRpdGlvbk1hcFt3aXJlXVtjb2x1bW5dO1xuXHRcdFx0aWYocGFydGl0aW9uID09IHBhcnRpdGlvbkluZGV4KSB7XG5cdFx0XHRcdGZvdW5kID0gdHJ1ZTtcblxuXHRcdFx0XHRpZihib3VuZHMud2lyZS50b3AgPCAwKSB7XG5cdFx0XHRcdFx0Ym91bmRzLndpcmUudG9wID0gd2lyZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZihib3VuZHMud2lyZS5ib3R0b20gPCB3aXJlKSB7XG5cdFx0XHRcdFx0Ym91bmRzLndpcmUuYm90dG9tID0gd2lyZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmKGJvdW5kcy5jb2x1bW4ubGVmdCA8IDApIHtcblx0XHRcdFx0XHRib3VuZHMuY29sdW1uLmxlZnQgPSBjb2x1bW47XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYoYm91bmRzLmNvbHVtbi5yaWdodCA8IGNvbHVtbikge1xuXHRcdFx0XHRcdGJvdW5kcy5jb2x1bW4ucmlnaHQgPSBjb2x1bW47XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZighZm91bmQpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdHZhciBwYXJ0aXRpb25XaXJlID0gMDtcblx0Zm9yKHZhciB3aXJlID0gYm91bmRzLndpcmUudG9wOyB3aXJlIDw9IGJvdW5kcy53aXJlLmJvdHRvbTsgd2lyZSsrKSB7XG5cdFx0dmFyIHBhcnRpdGlvbiA9IHRoaXMucGFydGl0aW9uTWFwW3dpcmVdW2JvdW5kcy5jb2x1bW4ubGVmdF07XG5cdFx0aWYocGFydGl0aW9uID09IHBhcnRpdGlvbkluZGV4KSB7XG5cdFx0XHRib3VuZHMud2lyZU1hcFt3aXJlXSA9IHBhcnRpdGlvbldpcmU7XG5cblx0XHRcdHBhcnRpdGlvbldpcmUrKztcblx0XHR9XG5cdH1cblx0Ym91bmRzLm51bVF1Yml0cyA9IHBhcnRpdGlvbldpcmU7XG5cblx0aWYoYm91bmRzLmNvbHVtbi5sZWZ0ID4gMCkge1xuXHRcdGZvcih2YXIgd2lyZSBpbiBib3VuZHMud2lyZU1hcCkge1xuXHRcdFx0dmFyIHBhcmVudFBhcnRpdGlvbiA9IHRoaXMucGFydGl0aW9uTWFwW3dpcmVdW2JvdW5kcy5jb2x1bW4ubGVmdCAtIDFdO1xuXHRcdFx0aWYocGFyZW50UGFydGl0aW9uID49IDApIHtcblx0XHRcdFx0aWYoIWJvdW5kcy5wYXJlbnRzW3BhcmVudFBhcnRpdGlvbl0pIHtcblx0XHRcdFx0XHRib3VuZHMucGFyZW50c1twYXJlbnRQYXJ0aXRpb25dID0ge307XG5cdFx0XHRcdFx0Ym91bmRzLnBhcmVudHNbcGFyZW50UGFydGl0aW9uXS5saW5rcyA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHZhciBwYXJlbnRCb3VuZHMgPSB0aGlzLnBhcnRpdGlvbkluZm9bcGFyZW50UGFydGl0aW9uXTtcblx0XHRcdFx0Zm9yKHZhciBwd2lyZSBpbiBwYXJlbnRCb3VuZHMud2lyZU1hcCkge1xuXHRcdFx0XHRcdGlmKHB3aXJlID09IHdpcmUpIHtcblx0XHRcdFx0XHRcdGJvdW5kcy5wYXJlbnRzW3BhcmVudFBhcnRpdGlvbl0ubGlua3MucHVzaChib3VuZHMud2lyZU1hcFt3aXJlXSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGJvdW5kcztcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnBhcnRpdGlvbkNpcmN1aXQgPSBmdW5jdGlvbihwYXJ0aXRpb25JbmRleCkge1xuXHR2YXIgYm91bmRzID0gdGhpcy5wYXJ0aXRpb25JbmZvW3BhcnRpdGlvbkluZGV4XTtcblx0aWYoIWJvdW5kcykge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0dmFyIGNvbWJpbmVMaXN0ID0gW107XG5cdHZhciB1c2VkV2lyZXMgPSBbXTtcblx0Zm9yKHZhciBwYXJlbnRQYXJ0aXRpb24gaW4gYm91bmRzLnBhcmVudHMpIHtcblx0XHR2YXIgY29tYmluZUl0ZW0gPSB7fTtcblxuXHRcdGNvbWJpbmVJdGVtLmNpcmN1aXQgPSB0aGlzLnBhcnRpdGlvbkNhY2hlW3BhcmVudFBhcnRpdGlvbl07XG5cdFx0Y29tYmluZUl0ZW0ud2lyZXMgPSBbXTtcblx0XHRjb21iaW5lSXRlbS53aXJlcyA9IGJvdW5kcy5wYXJlbnRzW3BhcmVudFBhcnRpdGlvbl0ubGlua3M7XG5cblx0XHR1c2VkV2lyZXMgPSB1c2VkV2lyZXMuY29uY2F0KGNvbWJpbmVJdGVtLndpcmVzKTtcblxuXHRcdGNvbWJpbmVMaXN0LnB1c2goY29tYmluZUl0ZW0pO1xuXHR9XG5cblx0dmFyIGNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblxuXHQvLyBjb21iaW5lIHN0YXRlIGZyb20gcGFyZW50IHBhcnRpdGlvbnNcblx0aWYoY29tYmluZUxpc3QubGVuZ3RoID4gMCkge1xuXHRcdGlmKGJvdW5kcy5udW1RdWJpdHMgPiB1c2VkV2lyZXMubGVuZ3RoKSB7XG5cdFx0XHR2YXIgY29tYmluZUl0ZW0gPSB7fTtcblx0XHRcdGNvbWJpbmVJdGVtLmNpcmN1aXQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoYm91bmRzLm51bVF1Yml0cyAtIHVzZWRXaXJlcy5sZW5ndGgpO1xuXHRcdFx0Y29tYmluZUl0ZW0ud2lyZXMgPSBbXTtcblx0XHRcdGZvcih2YXIgaSA9IDA7IGkgPCBib3VuZHMubnVtUXViaXRzOyBpKyspIHtcblx0XHRcdFx0aWYodXNlZFdpcmVzLmluZGV4T2YoaSkgPCAwKSB7XG5cdFx0XHRcdFx0Y29tYmluZUl0ZW0ud2lyZXMucHVzaChpKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29tYmluZUxpc3QucHVzaChjb21iaW5lSXRlbSk7XG5cdFx0fVxuXHRcdGNpcmN1aXQuc2V0Q29tYmluZWRTdGF0ZShjb21iaW5lTGlzdCk7XG5cdH1cblxuXHQvLyBhZGQgZ2F0ZXMgdG8gdGhlIGNpcmN1aXRcblx0Zm9yKHZhciBjb2x1bW4gPSBib3VuZHMuY29sdW1uLmxlZnQ7IGNvbHVtbiA8PSBib3VuZHMuY29sdW1uLnJpZ2h0OyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IGJvdW5kcy53aXJlLnRvcDsgd2lyZSA8PSBib3VuZHMud2lyZS5ib3R0b207IHdpcmUrKykge1xuXHRcdFx0dmFyIHBhcnRpdGlvbiA9IHRoaXMucGFydGl0aW9uTWFwW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRpZihwYXJ0aXRpb24gPT0gcGFydGl0aW9uSW5kZXgpIHtcblx0XHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0XHR2YXIgZ2F0ZVdpcmVzID0gW107XG5cdFx0XHRcdFx0Zm9yKHZhciB3ID0gMDsgdyA8IGdhdGUud2lyZXMubGVuZ3RoOyB3KyspIHtcblx0XHRcdFx0XHRcdHZhciB3ciA9IGdhdGUud2lyZXNbd107XG5cdFx0XHRcdFx0XHRnYXRlV2lyZXMucHVzaChib3VuZHMud2lyZU1hcFt3cl0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjaXJjdWl0LmFkZEdhdGUoZ2F0ZS5uYW1lLCBjb2x1bW4gLSBib3VuZHMuY29sdW1uLmxlZnQsIGdhdGVXaXJlcywgZ2F0ZS5vcHRpb25zKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjaXJjdWl0O1xufTtcblxuLy9cbi8vIE9wdGlvbnM6XG4vLyAgIHtcbi8vICAgICBzdHJpY3RNb2RlOiBib29sLFxuLy8gICAgIHBhcnRpdGlvbmluZzogYm9vbCxcbi8vICAgICBjb250aW51ZTogYm9vbCxcbi8vICAgICBpbml0aWFsU3RhdGU6IEFycmF5XG4vLyAgICAgb25HYXRlOiBmdW5jdGlvbihjb2x1bW4sIHdpcmUsIGdhdGVDb3VudGVyKSB7IC4uLiB9LFxuLy8gICAgIG9uQ29sdW1uOiBmdW5jdGlvbihjb2x1bW4pIHsgLi4uIH1cbi8vICAgfVxuLy9cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbihpbml0aWFsVmFsdWVzLCBvcHRpb25zKSB7XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdHRoaXMubWVhc3VyZVJlc2V0c1F1Yml0ID0gISFvcHRpb25zLnN0cmljdE1vZGU7XG5cblx0aWYoIW9wdGlvbnMuY29udGludWUpIHtcblx0XHR0aGlzLmluaXRTdGF0ZSgpO1xuXHRcdHRoaXMuc3RhdHMuZHVyYXRpb24gPSAwO1xuXHR9XG5cblx0aWYob3B0aW9ucy5pbml0aWFsU3RhdGUpIHtcblx0XHRpZihBcnJheS5pc0FycmF5KG9wdGlvbnMuaW5pdGlhbFN0YXRlKSkge1xuXHRcdFx0dGhpcy5zdGF0ZSA9IHt9O1xuXHRcdFx0Zm9yKHZhciB2YWxJbmRleCA9IDA7IHZhbEluZGV4IDwgb3B0aW9ucy5pbml0aWFsU3RhdGUubGVuZ3RoOyB2YWxJbmRleCsrKSB7XG5cdFx0XHRcdHZhciB2YWwgPSBvcHRpb25zLmluaXRpYWxTdGF0ZVt2YWxJbmRleF07XG5cblx0XHRcdFx0aWYoQXJyYXkuaXNBcnJheSh2YWwpICYmIHZhbC5sZW5ndGggPT0gMikge1xuXHRcdFx0XHRcdHZhbCA9IG1hdGguY29tcGxleCh2YWxbMF0sIHZhbFsxXSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZih0eXBlb2YgdmFsID09IFwic3RyaW5nXCIpIHtcblx0XHRcdFx0XHR2YWwgPSB0aGlzLmV2YWxNYXRoU3RyaW5nKHZhbCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYodHlwZW9mIHZhbCA9PSBcIm51bWJlclwiKSB7XG5cdFx0XHRcdFx0dmFsID0gbWF0aC5jb21wbGV4KHZhbCwgMCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5zdGF0ZVt2YWxJbmRleCArIFwiXCJdID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnN0YXRlID0gb3B0aW9ucy5pbml0aWFsU3RhdGU7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdGF0ZUJpdHMgPSAwO1xuXHRcdGZvcih2YXIgYWluZGV4IGluIHRoaXMuc3RhdGUpIHtcblx0XHRcdHRoaXMuc3RhdGVCaXRzIHw9IHBhcnNlSW50KGFpbmRleCk7XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5zdGF0cy5zdGFydCA9IG5ldyBEYXRlKCk7XG5cblx0dmFyIGRlY29tcG9zZWQgPSBuZXcgUXVhbnR1bUNpcmN1aXQoKTtcblx0ZGVjb21wb3NlZC5sb2FkKHRoaXMuc2F2ZSh0cnVlKSk7XG5cblx0aWYoaW5pdGlhbFZhbHVlcykge1xuXHRcdGRlY29tcG9zZWQuaW5zZXJ0Q29sdW1uKDApO1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBkZWNvbXBvc2VkLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHRpZihpbml0aWFsVmFsdWVzW3dpcmVdKSB7XG5cdFx0XHRcdGRlY29tcG9zZWQuYWRkR2F0ZShcInhcIiwgMCwgd2lyZSwge30pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHZhciBwYXJ0aXRpb25pbmcgPSBvcHRpb25zLnBhcnRpdGlvbmluZztcblxuXHRpZihwYXJ0aXRpb25pbmcpIHtcblx0XHRkZWNvbXBvc2VkLmNyZWF0ZVBhcnRpdGlvbnMoKTtcbi8vXHRcdGRlY29tcG9zZWQucHJpbnRQYXJ0aXRpb25zKCk7XG5cdH1cblxuXHR2YXIgbnVtQ29scyA9IGRlY29tcG9zZWQubnVtQ29scygpO1xuXHR2YXIgZ2F0ZUNvdW50ZXIgPSAwO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IGRlY29tcG9zZWQubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gZGVjb21wb3NlZC5nZXRHYXRlQXQoY29sdW1uLCB3aXJlKTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5jb25uZWN0b3IgPT0gMCkge1xuXHRcdFx0XHRnYXRlQ291bnRlcisrO1xuXG5cdFx0XHRcdHZhciBleGVjdXRlR2F0ZSA9IHRydWU7XG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZykge1xuXHRcdFx0XHRcdHZhciBjcmVnVmFsdWUgPSB0aGlzLmdldENyZWdWYWx1ZShnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcpO1xuXHRcdFx0XHRcdGV4ZWN1dGVHYXRlID0gY3JlZ1ZhbHVlID09PSBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLnZhbHVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoZXhlY3V0ZUdhdGUpIHtcblxuXHRcdFx0XHRcdGlmKHBhcnRpdGlvbmluZykge1xuXHRcdFx0XHRcdFx0dmFyIHBhcnRpdGlvbiA9IGRlY29tcG9zZWQucGFydGl0aW9uTWFwW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRcdFx0XHRpZighZGVjb21wb3NlZC5wYXJ0aXRpb25DYWNoZVtwYXJ0aXRpb25dKSB7XG5cdFx0XHRcdFx0XHRcdGRlY29tcG9zZWQucGFydGl0aW9uQ2FjaGVbcGFydGl0aW9uXSA9IGRlY29tcG9zZWQucGFydGl0aW9uQ2lyY3VpdChwYXJ0aXRpb24pO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR2YXIgcGNpcmMgPSBkZWNvbXBvc2VkLnBhcnRpdGlvbkNhY2hlW3BhcnRpdGlvbl07XG5cdFx0XHRcdFx0XHR2YXIgYm91bmRzID0gZGVjb21wb3NlZC5wYXJ0aXRpb25JbmZvW3BhcnRpdGlvbl07XG5cblx0XHRcdFx0XHRcdHZhciBwY29sdW1uID0gY29sdW1uIC0gYm91bmRzLmNvbHVtbi5sZWZ0O1xuXG5cdFx0XHRcdFx0XHR2YXIgcGdhdGUgPSBwY2lyYy5nZXRHYXRlQXQocGNvbHVtbiwgYm91bmRzLndpcmVNYXBbd2lyZV0pO1xuXG5cdFx0XHRcdFx0XHRwY2lyYy5jcmVncyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jcmVncykpO1xuXHRcdFx0XHRcdFx0cGNpcmMuYXBwbHlHYXRlKHBnYXRlLm5hbWUsIHBjb2x1bW4sIHBnYXRlLndpcmVzLCBwZ2F0ZS5vcHRpb25zKTtcblx0XHRcdFx0XHRcdHRoaXMuY3JlZ3MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHBjaXJjLmNyZWdzKSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuYXBwbHlHYXRlKGdhdGUubmFtZSwgY29sdW1uLCBnYXRlLndpcmVzLCBnYXRlLm9wdGlvbnMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGNhbGxiYWNrIGFmdGVyIGdhdGUgaXMgZmluaXNoZWRcblx0XHRcdFx0aWYob3B0aW9ucyAmJiBvcHRpb25zLm9uR2F0ZSkge1xuXHRcdFx0XHRcdG9wdGlvbnMub25HYXRlKGNvbHVtbiwgd2lyZSwgZ2F0ZUNvdW50ZXIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIGNhbGxiYWNrIGFmdGVyIGNvbHVtbiBpcyBmaW5pc2hlZFxuXHRcdGlmKG9wdGlvbnMgJiYgb3B0aW9ucy5vbkNvbHVtbikge1xuXHRcdFx0b3B0aW9ucy5vbkNvbHVtbihjb2x1bW4pO1xuXHRcdH1cblx0fVxuXG5cdGlmKHBhcnRpdGlvbmluZykge1xuXHRcdHZhciBsYXN0UGFydGl0aW9ucyA9IFtdO1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCBkZWNvbXBvc2VkLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgcGFydGl0aW9uID0gZGVjb21wb3NlZC5wYXJ0aXRpb25NYXBbd2lyZV1bbnVtQ29scyAtIDFdO1xuXHRcdFx0aWYocGFydGl0aW9uID49IDAgJiYgbGFzdFBhcnRpdGlvbnMuaW5kZXhPZihwYXJ0aXRpb24pIDwgMCkge1xuXHRcdFx0XHRsYXN0UGFydGl0aW9ucy5wdXNoKHBhcnRpdGlvbik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmKGxhc3RQYXJ0aXRpb25zLmxlbmd0aCkge1xuXHRcdFx0aWYobGFzdFBhcnRpdGlvbnMubGVuZ3RoID09IDEpIHtcblx0XHRcdFx0dGhpcy5zdGF0ZSA9IGRlY29tcG9zZWQucGFydGl0aW9uQ2FjaGVbbGFzdFBhcnRpdGlvbnNbMF1dLnN0YXRlO1xuXHRcdFx0XHR0aGlzLnN0YXRlQml0cyA9IGRlY29tcG9zZWQucGFydGl0aW9uQ2FjaGVbbGFzdFBhcnRpdGlvbnNbMF1dLnN0YXRlQml0cztcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhciBzdGFydFRpbWUgPSB0aGlzLnN0YXRzLnN0YXJ0O1xuXHRcdFx0XHR2YXIgY29tYmluZUxpc3QgPSBbXTtcblx0XHRcdFx0Zm9yKHZhciBpID0gMDsgaSA8IGxhc3RQYXJ0aXRpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0dmFyIGxhc3RQYXJ0aXRpb24gPSBsYXN0UGFydGl0aW9uc1tpXTtcblxuXHRcdFx0XHRcdHZhciBjb21iaW5lSXRlbSA9IHt9O1xuXG5cdFx0XHRcdFx0Y29tYmluZUl0ZW0uY2lyY3VpdCA9IGRlY29tcG9zZWQucGFydGl0aW9uQ2FjaGVbbGFzdFBhcnRpdGlvbl07XG5cdFx0XHRcdFx0Y29tYmluZUl0ZW0ud2lyZXMgPSBbXTtcblxuXHRcdFx0XHRcdHZhciBsYXN0Qm91bmRzID0gZGVjb21wb3NlZC5wYXJ0aXRpb25JbmZvW2xhc3RQYXJ0aXRpb25dO1xuXHRcdFx0XHRcdGZvcih2YXIgd2lyZSBpbiBsYXN0Qm91bmRzLndpcmVNYXApIHtcblx0XHRcdFx0XHRcdGNvbWJpbmVJdGVtLndpcmVzLnB1c2gocGFyc2VJbnQod2lyZSkpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbWJpbmVMaXN0LnB1c2goY29tYmluZUl0ZW0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuc2V0Q29tYmluZWRTdGF0ZShjb21iaW5lTGlzdCk7XG5cdFx0XHRcdHRoaXMuc3RhdHMuc3RhcnQgPSBzdGFydFRpbWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0dGhpcy5zdGF0cy5lbmQgPSBuZXcgRGF0ZSgpO1xuXHR0aGlzLnN0YXRzLmR1cmF0aW9uICs9IHRoaXMuc3RhdHMuZW5kIC0gdGhpcy5zdGF0cy5zdGFydDtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5jb250aW51ZSA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnJ1bihudWxsLCB7XG5cdFx0Y29udGludWU6IHRydWVcblx0fSk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuc3RhdGVBc0FycmF5ID0gZnVuY3Rpb24ob25seVBvc3NpYmxlLCBza2lwSXRlbXMsIGJsb2NrU2l6ZSwgcmV2ZXJzZUJpdHMpIHtcblx0dmFyIHN0YXRlID0gW107XG5cblx0dmFyIG51bUFtcGxpdHVkZXMgPSB0aGlzLm51bUFtcGxpdHVkZXMoKTtcblxuXHRza2lwSXRlbXMgPSBza2lwSXRlbXMgfHwgMDtcblx0YmxvY2tTaXplID0gYmxvY2tTaXplIHx8IChvbmx5UG9zc2libGUgPyB0aGlzLm51bUFtcGxpdHVkZXMob25seVBvc3NpYmxlKSA6IG51bUFtcGxpdHVkZXMpO1xuXG5cdHZhciBjb3VudCA9IDA7XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBudW1BbXBsaXR1ZGVzOyBpKyspIHtcblx0XHR2YXIgYW1wSW5kZXggPSBpO1xuXHRcdGlmKHJldmVyc2VCaXRzKSB7XG5cdFx0XHRhbXBJbmRleCA9IHJldmVyc2VCaXR3aXNlKGksIHRoaXMubnVtUXViaXRzKTtcblx0XHR9XG5cblx0XHR2YXIgYW1wbGl0dWRlID0gbWF0aC5yb3VuZCh0aGlzLnN0YXRlW2FtcEluZGV4XSB8fCBtYXRoLmNvbXBsZXgoMCwgMCksIDE0KTtcblxuXHRcdGlmKCFvbmx5UG9zc2libGUgfHwgKGFtcGxpdHVkZS5yZSB8fCBhbXBsaXR1ZGUuaW0pKSB7XG5cdFx0XHRpZihjb3VudCA+PSBza2lwSXRlbXMpIHtcblx0XHRcdFx0dmFyIGluZGV4QmluU3RyID0gaS50b1N0cmluZygyKTtcblx0XHRcdFx0d2hpbGUoaW5kZXhCaW5TdHIubGVuZ3RoIDwgdGhpcy5udW1RdWJpdHMpIHtcblx0XHRcdFx0XHRpbmRleEJpblN0ciA9IFwiMFwiICsgaW5kZXhCaW5TdHI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgYW1wbGl0dWRlU3RyID0gdGhpcy5mb3JtYXRDb21wbGV4KGFtcGxpdHVkZSwgeyBmaXhlZFdpZHRoOiB0cnVlLCBkZWNpbWFsUGxhY2VzOiA4LCBpb3RhQ2hhcjogXCJpXCIgfSk7XG5cdFx0XHRcdHZhciBtYWduaXR1ZGUgPSBtYXRoLnBvdyhtYXRoLmFicyhhbXBsaXR1ZGUpLCAyKTtcblx0XHRcdFx0dmFyIGNoYW5jZSA9IG1hZ25pdHVkZSAqIDEwMDtcblx0XHRcdFx0dmFyIGNoYW5jZVN0ciA9IGNoYW5jZS50b0ZpeGVkKDUpO1xuXHRcdFx0XHR2YXIgcGhhc2UgPSBtYXRoLmFyZyhhbXBsaXR1ZGUpO1xuXHRcdFx0XHR2YXIgcGhhc2VTdHIgPSBwaGFzZS50b0ZpeGVkKDUpO1xuXG5cdFx0XHRcdHN0YXRlLnB1c2goe1xuXHRcdFx0XHRcdGluZGV4OiBpLFxuXHRcdFx0XHRcdGluZGV4QmluU3RyOiBpbmRleEJpblN0cixcblx0XHRcdFx0XHRhbXBsaXR1ZGU6IGFtcGxpdHVkZSxcblx0XHRcdFx0XHRhbXBsaXR1ZGVTdHI6IGFtcGxpdHVkZVN0cixcblx0XHRcdFx0XHRtYWduaXR1ZGU6IG1hZ25pdHVkZSxcblx0XHRcdFx0XHRjaGFuY2U6IGNoYW5jZSxcblx0XHRcdFx0XHRjaGFuY2VTdHI6IGNoYW5jZVN0cixcblx0XHRcdFx0XHRwaGFzZTogcGhhc2UsXG5cdFx0XHRcdFx0cGhhc2VTdHI6IHBoYXNlU3RyXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRjb3VudCsrO1xuXG5cdFx0XHRpZihzdGF0ZS5sZW5ndGggPT0gYmxvY2tTaXplKSB7XG5cdFx0XHRcdHJldHVybiBzdGF0ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gc3RhdGU7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuc3RhdGVBc1NpbXBsZUFycmF5ID0gZnVuY3Rpb24ocmV2ZXJzZUJpdHMpIHtcblxuXHR2YXIgbnVtQW1wbGl0dWRlcyA9IHRoaXMubnVtQW1wbGl0dWRlcygpO1xuXHRpZighdGhpcy5zdGF0ZSkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXG5cdHZhciBzdGF0ZSA9IFtdO1xuXHRmb3IodmFyIGkgPSAwOyBpIDwgbnVtQW1wbGl0dWRlczsgaSsrKSB7XG5cdFx0dmFyIGFtcEluZGV4ID0gaTtcblx0XHRpZihyZXZlcnNlQml0cykge1xuXHRcdFx0YW1wSW5kZXggPSByZXZlcnNlQml0d2lzZShpLCB0aGlzLm51bVF1Yml0cyk7XG5cdFx0fVxuXG5cdFx0c3RhdGUucHVzaChtYXRoLnJvdW5kKHRoaXMuc3RhdGVbYW1wSW5kZXhdIHx8IG1hdGguY29tcGxleCgwLCAwKSwgMTQpKTtcblx0fVxuXHRyZXR1cm4gc3RhdGU7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5zdGF0ZUFzU3RyaW5nID0gZnVuY3Rpb24ob25seVBvc3NpYmxlKSB7XG5cblx0dmFyIG51bUFtcGxpdHVkZXMgPSB0aGlzLm51bUFtcGxpdHVkZXMoKTtcblx0aWYoIXRoaXMuc3RhdGUpIHtcblx0XHRyZXR1cm4gXCJFcnJvcjogY2lyY3VpdCBpcyBub3QgaW5pdGlhbGl6ZWQuIFBsZWFzZSBjYWxsIGluaXRTdGF0ZSgpIG9yIHJ1bigpIG1ldGhvZC5cIjtcblx0fVxuXG5cdHZhciBzID0gXCJcIjtcblx0dmFyIGNvdW50ID0gMDtcblx0Zm9yKHZhciBpID0gMDsgaSA8IG51bUFtcGxpdHVkZXM7IGkrKykge1xuXHRcdHZhciBzdGF0ZSA9IG1hdGgucm91bmQodGhpcy5zdGF0ZVtpXSB8fCBtYXRoLmNvbXBsZXgoMCwgMCksIDE0KTtcblx0XHRpZighb25seVBvc3NpYmxlIHx8IChzdGF0ZS5yZSB8fCBzdGF0ZS5pbSkpIHtcblx0XHRcdHZhciBtID0gbWF0aC5wb3cobWF0aC5hYnMoc3RhdGUpLCAyKSAqIDEwMDtcblxuXHRcdFx0Ly8gYmluYXJ5IHN0cmluZ1xuXHRcdFx0dmFyIGJpbiA9IGkudG9TdHJpbmcoMik7XG5cdFx0XHR3aGlsZShiaW4ubGVuZ3RoIDwgdGhpcy5udW1RdWJpdHMpIHtcblx0XHRcdFx0YmluID0gXCIwXCIgKyBiaW47XG5cdFx0XHR9XG5cblx0XHRcdC8vIHJpZ2h0IGFsaWduZWQgcGVyY2VudFxuXHRcdFx0dmFyIHBlcmMgPSBtLnRvRml4ZWQoNSk7XG5cdFx0XHR3aGlsZShwZXJjLmxlbmd0aCA8IDkpIHtcblx0XHRcdFx0cGVyYyA9IFwiIFwiICsgcGVyYztcblx0XHRcdH1cblxuXHRcdFx0cyArPSB0aGlzLmZvcm1hdENvbXBsZXgoc3RhdGUsIHsgZml4ZWRXaWR0aDogdHJ1ZSwgZGVjaW1hbFBsYWNlczogOCwgaW90YUNoYXI6IFwiaVwiIH0pICsgXCJ8XCIgKyBiaW4gKyBcIj5cXHRcIiArIHBlcmMgKyBcIiVcXG5cIjtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHM7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucHJpbnQgPSBmdW5jdGlvbihvbmx5UG9zc2libGUpIHtcblx0Y29uc29sZS5sb2codGhpcy5zdGF0ZUFzU3RyaW5nKG9ubHlQb3NzaWJsZSkpO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdvdENsYXNzaWNhbENvbnRyb2wgPSBmdW5jdGlvbigpIHtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCB0aGlzLm51bUNvbHMoKTsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdldEdhdGVBdChjb2x1bW4sIHdpcmUpO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLmNvbm5lY3RvciA9PSAwKSB7XG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZykge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nb3RNZWFzdXJlbWVudCA9IGZ1bmN0aW9uKCkge1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IHRoaXMubnVtQ29scygpOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2V0R2F0ZUF0KGNvbHVtbiwgd2lyZSk7XG5cdFx0XHRpZihnYXRlICYmIGdhdGUuY29ubmVjdG9yID09IDApIHtcblx0XHRcdFx0aWYoZ2F0ZS5uYW1lID09IFwibWVhc3VyZVwiKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0cmV0dXJuIGZhbHNlO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNyZWdDb3VudCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgY3JlZ0NvdW50ID0gMDtcblx0Zm9yKHZhciBjcmVnTmFtZSBpbiB0aGlzLmNyZWdzKSB7XG5cdFx0Y3JlZ0NvdW50Kys7XG5cdH1cblx0cmV0dXJuIGNyZWdDb3VudDtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRDcmVncyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgcmVzID0ge307XG5cdGZvcih2YXIgY3JlZyBpbiB0aGlzLmNyZWdzKSB7XG5cdFx0cmVzW2NyZWddID0gdGhpcy5nZXRDcmVnVmFsdWUoY3JlZyk7XG5cdH1cblx0cmV0dXJuIHJlcztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5jcmVnc0FzU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHZhciBzID0gXCJyZWdcXHRiaW5cXHRkZWNcXG5cIjtcblx0Zm9yKHZhciBjcmVnIGluIHRoaXMuY3JlZ3MpIHtcblx0XHR2YXIgdmFsdWUgPSB0aGlzLmdldENyZWdWYWx1ZShjcmVnKTtcblxuXHRcdC8vIGJpbmFyeSBzdHJpbmdcblx0XHR2YXIgYmluID0gdmFsdWUudG9TdHJpbmcoMik7XG5cdFx0dmFyIGxlbiA9IHRoaXMuY3JlZ3NbY3JlZ10gPyB0aGlzLmNyZWdzW2NyZWddLmxlbmd0aCB8fCAxIDogMTtcblx0XHR3aGlsZShiaW4ubGVuZ3RoIDwgbGVuKSB7XG5cdFx0XHRiaW4gPSBcIjBcIiArIGJpbjtcblx0XHR9XG5cblx0XHRzICs9IGNyZWcgKyBcIlxcdFwiICsgYmluICsgXCJcXHRcIiArIHZhbHVlICsgXCJcXG5cIjtcblx0fVxuXHRyZXR1cm4gcztcbn07XG5cblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmNyZWF0ZUNyZWcgPSBmdW5jdGlvbihjcmVnLCBsZW4pIHtcblx0dGhpcy5jcmVnc1tjcmVnXSA9IFtdO1xuXG5cdC8vIGV4dGVuZCByZWdpc3RlclxuXHR3aGlsZSh0aGlzLmNyZWdzW2NyZWddLmxlbmd0aCA8IChsZW4gfHwgMSkpIHtcblx0XHR0aGlzLmNyZWdzW2NyZWddLnB1c2goMCk7XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yZW1vdmVDcmVnID0gZnVuY3Rpb24oY3JlZykge1xuXHQvLyByZW1vdmUgcmVmZXJlbmNlIHRvIGNyZWdcblx0dmFyIG51bUNvbHMgPSB0aGlzLm51bUNvbHMoKTtcblx0dmFyIHJlbW92ZUdhdGVzID0gW107XG5cdGZvcih2YXIgY29sdW1uID0gMDsgY29sdW1uIDwgbnVtQ29sczsgY29sdW1uKyspIHtcblx0XHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdFx0dmFyIGdhdGUgPSB0aGlzLmdhdGVzW3dpcmVdW2NvbHVtbl07XG5cdFx0XHRpZihnYXRlICYmIGdhdGUub3B0aW9ucykge1xuXHRcdFx0XHQvLyBnYXRlIHdyaXRpbmcgdG8gY3JlZ1xuXHRcdFx0XHRpZihnYXRlLm9wdGlvbnMuY3JlZyAmJiBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lICYmIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgPT0gY3JlZykge1xuXHRcdFx0XHRcdGlmKHJlbW92ZUdhdGVzLmluZGV4T2YoZ2F0ZS5pZCkgPCAwKSB7XG5cdFx0XHRcdFx0XHRyZW1vdmVHYXRlcy5wdXNoKGdhdGUuaWQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGdhdGUgY29udHJvbGxlZCBieSBjcmVnXG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucy5jb25kaXRpb24gJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyA9PSBjcmVnKSB7XG5cdFx0XHRcdFx0ZGVsZXRlIGdhdGUub3B0aW9ucy5jb25kaXRpb247XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBkZWxldGUgcmVnaXN0ZXJcblx0ZGVsZXRlIHRoaXMuY3JlZ3NbY3JlZ107XG5cblx0Zm9yKHZhciBpID0gMDsgaSA8IHJlbW92ZUdhdGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dGhpcy5yZW1vdmVHYXRlKHJlbW92ZUdhdGVzW2ldKTtcblx0fVxufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlbmFtZUNyZWcgPSBmdW5jdGlvbihvbGROYW1lLCBuZXdOYW1lKSB7XG5cdC8vIHJlbmFtZSByZWZlcmVuY2Vcblx0dmFyIG51bUNvbHMgPSB0aGlzLm51bUNvbHMoKTtcblx0Zm9yKHZhciBjb2x1bW4gPSAwOyBjb2x1bW4gPCBudW1Db2xzOyBjb2x1bW4rKykge1xuXHRcdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0XHR2YXIgZ2F0ZSA9IHRoaXMuZ2F0ZXNbd2lyZV1bY29sdW1uXTtcblx0XHRcdGlmKGdhdGUgJiYgZ2F0ZS5vcHRpb25zKSB7XG5cdFx0XHRcdC8vIGdhdGUgd3JpdGluZyB0byBjcmVnXG5cdFx0XHRcdGlmKGdhdGUub3B0aW9ucy5jcmVnICYmIGdhdGUub3B0aW9ucy5jcmVnLm5hbWUgJiYgZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSA9PSBvbGROYW1lKSB7XG5cdFx0XHRcdFx0Z2F0ZS5vcHRpb25zLmNyZWcubmFtZSA9IG5ld05hbWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBnYXRlIGNvbnRyb2xsZWQgYnkgY3JlZ1xuXHRcdFx0XHRpZihnYXRlLm9wdGlvbnMuY29uZGl0aW9uICYmIGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcgPT0gb2xkTmFtZSkge1xuXHRcdFx0XHRcdGdhdGUub3B0aW9ucy5jb25kaXRpb24uY3JlZyA9IG5ld05hbWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyByZW5hbWUgcmVnaXN0ZXJcblx0dGhpcy5jcmVnc1tuZXdOYW1lXSA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5jcmVnc1tvbGROYW1lXSkpO1xuXHRkZWxldGUgdGhpcy5jcmVnc1tvbGROYW1lXTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5taW5DcmVnU2l6ZSA9IGZ1bmN0aW9uKGNyZWcpIHtcblx0dmFyIGxhcmdlc3RCaXQgPSAwO1xuXHR2YXIgbnVtQ29scyA9IHRoaXMubnVtQ29scygpO1xuXHRmb3IodmFyIGNvbHVtbiA9IDA7IGNvbHVtbiA8IG51bUNvbHM7IGNvbHVtbisrKSB7XG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBnYXRlID0gdGhpcy5nYXRlc1t3aXJlXVtjb2x1bW5dO1xuXHRcdFx0aWYoZ2F0ZSAmJiBnYXRlLm9wdGlvbnMpIHtcblx0XHRcdFx0Ly8gZ2F0ZSB3cml0aW5nIHRvIGNyZWdcblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zLmNyZWcgJiYgZ2F0ZS5vcHRpb25zLmNyZWcubmFtZSAmJiBnYXRlLm9wdGlvbnMuY3JlZy5uYW1lID09IGNyZWcpIHtcblx0XHRcdFx0XHR2YXIgdGFyZ2V0Qml0ID0gcGFyc2VJbnQoZ2F0ZS5vcHRpb25zLmNyZWcuYml0IHx8IDApO1xuXHRcdFx0XHRcdGlmKGlzTmFOKHRhcmdldEJpdCkpIHtcblx0XHRcdFx0XHRcdHRhcmdldEJpdCA9IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmKHRhcmdldEJpdCA+IGxhcmdlc3RCaXQpIHtcblx0XHRcdFx0XHRcdGxhcmdlc3RCaXQgPSB0YXJnZXRCaXQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gZ2F0ZSBjb250cm9sbGVkIGJ5IGNyZWdcblx0XHRcdFx0aWYoZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbiAmJiBnYXRlLm9wdGlvbnMuY29uZGl0aW9uLmNyZWcgJiYgZ2F0ZS5vcHRpb25zLmNvbmRpdGlvbi5jcmVnID09IGNyZWcpIHtcblx0XHRcdFx0XHR2YXIgbGIgPSBNYXRoLmZsb29yKE1hdGgubG9nMihnYXRlLm9wdGlvbnMuY29uZGl0aW9uLnZhbHVlKSk7XG5cdFx0XHRcdFx0aWYobGIgPiBsYXJnZXN0Qml0KSB7XG5cdFx0XHRcdFx0XHRsYXJnZXN0Qml0ID0gbGI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGxhcmdlc3RCaXQgKyAxO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnJlc2l6ZUNyZWcgPSBmdW5jdGlvbihjcmVnLCBzaXplKSB7XG5cdGlmKHNpemUgPCB0aGlzLm1pbkNyZWdTaXplKGNyZWcpKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0d2hpbGUodGhpcy5jcmVnc1tjcmVnXS5sZW5ndGggPCBzaXplKSB7XG5cdFx0dGhpcy5jcmVnc1tjcmVnXS5wdXNoKDApO1xuXHR9XG5cblx0d2hpbGUodGhpcy5jcmVnc1tjcmVnXS5sZW5ndGggPiBzaXplKSB7XG5cdFx0dGhpcy5jcmVnc1tjcmVnXS5wb3AoKTtcblx0fVxuXG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZ2V0Q3JlZyA9IGZ1bmN0aW9uKGNyZWcpIHtcblx0cmV0dXJuIHRoaXMuY3JlZ3NbY3JlZ107XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuc2V0Q3JlZ0JpdCA9IGZ1bmN0aW9uKGNyZWcsIGNiaXQsIHZhbHVlKSB7XG5cdC8vIHNlZSBpZiBjYml0IGlzIGludGVnZXJcblx0dmFyIGJpdCA9IHBhcnNlSW50KGNiaXQpO1xuXHRpZihpc05hTihiaXQpKSB7XG5cdFx0dGhyb3cgXCJFcnJvcjogaW52YWxpZCBcXFwiY2JpdFxcXCIgYXJndW1lbnQgdG8gXFxcInNldENyZWdCaXRcXFwiIG1ldGhvZDogZXhwZWN0ZWQgXFxcImludGVnZXJcXFwiIGdvdCBcXFwiXCIgKyB0eXBlb2YgY2JpdCArIFwiXFxcIi5cIjtcblx0fVxuXG5cdC8vIGNyZWF0ZSByZWdpc3RlciBpZiBkb2VzIG5vdCBleGlzdFxuXHRpZighdGhpcy5jcmVnc1tjcmVnXSkge1xuXHRcdHRoaXMuY3JlZ3NbY3JlZ10gPSBbXTtcblx0fVxuXG5cdC8vIGV4dGVuZCByZWdpc3RlciBpZiBuZWVkZWRcblx0d2hpbGUoYml0ID49IHRoaXMuY3JlZ3NbY3JlZ10ubGVuZ3RoKSB7XG5cdFx0dGhpcy5jcmVnc1tjcmVnXS5wdXNoKDApO1xuXHR9XG5cblx0Ly8gc2V0IGJpdFxuXHR0aGlzLmNyZWdzW2NyZWddW2JpdF0gPSB2YWx1ZSA/IDEgOiAwO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLmdldENyZWdCaXQgPSBmdW5jdGlvbihjcmVnLCBjYml0KSB7XG5cdGlmKCF0aGlzLmNyZWdzW2NyZWddKSB7XG5cdFx0dGhyb3cgXCJFcnJvcjogXFxcImdldENyZWdCaXRcXFwiOiB1bmtub3duIHJlZ2lzdGVyIFxcXCJcIiArIGNyZWcgKyBcIlxcXCIuXCI7XG5cdH1cblxuXHR2YXIgYml0ID0gcGFyc2VJbnQoY2JpdCk7XG5cdGlmKGlzTmFOKGJpdCkgfHwgYml0ID49IHRoaXMuY3JlZ3NbY3JlZ10ubGVuZ3RoKSB7XG5cdFx0dGhyb3cgXCJFcnJvcjogXFxcImdldENyZWdCaXRcXFwiOiBiaXQgXFxcIlwiICsgY2JpdCArIFwiXFxcIiBub3QgZm91bmQuXCI7XG5cdH1cblx0cmV0dXJuIHRoaXMuY3JlZ3NbY3JlZ11bYml0XTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5jcmVnQmFzZSA9IGZ1bmN0aW9uKGNyZWcpIHtcblx0aWYoIXRoaXMuY3JlZ3NbY3JlZ10pIHtcblx0XHR0aHJvdyBcIkVycm9yOiBcXFwiZ2V0Q3JlZ0JpdFxcXCI6IHVua25vd24gcmVnaXN0ZXIgXFxcIlwiICsgY3JlZyArIFwiXFxcIi5cIjtcblx0fVxuXG5cdHZhciBiYXNlID0gMDtcblx0Zm9yKHZhciByZWdOYW1lIGluIHRoaXMuY3JlZ3MpIHtcblx0XHRpZihyZWdOYW1lID09IGNyZWcpIHtcblx0XHRcdHJldHVybiBiYXNlO1xuXHRcdH1cblx0XHRiYXNlICs9IHRoaXMuY3JlZ3NbcmVnTmFtZV0ubGVuZ3RoO1xuXHR9XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuY3JlZ1RvdGFsQml0cyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgYml0cyA9IDA7XG5cdGZvcih2YXIgcmVnTmFtZSBpbiB0aGlzLmNyZWdzKSB7XG5cdFx0Yml0cyArPSB0aGlzLmNyZWdzW3JlZ05hbWVdLmxlbmd0aDtcblx0fVxuXHRyZXR1cm4gYml0cztcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5nZXRDcmVnVmFsdWUgPSBmdW5jdGlvbihjcmVnKSB7XG5cdGlmKCF0aGlzLmNyZWdzW2NyZWddKSB7XG5cdFx0dGhyb3cgXCJFcnJvcjogXFxcImdldENyZWdCaXRcXFwiOiB1bmtub3duIHJlZ2lzdGVyIFxcXCJcIiArIGNyZWcgKyBcIlxcXCIuXCI7XG5cdH1cblxuXHR2YXIgbGVuID0gdGhpcy5jcmVnc1tjcmVnXS5sZW5ndGg7XG5cdHZhciB2YWx1ZSA9IDA7XG5cdGZvcih2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuXHRcdGlmKHRoaXMuY3JlZ3NbY3JlZ11baV0pIHtcblx0XHRcdHZhbHVlICs9IG1hdGgucG93KDIsIGkpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBzaW11bGF0ZXMgbWVhc3VyZW1lbnQgb2YgYWxsIHF1Yml0cyBvbiBjdXJyZW50IHN0YXRlIHZlY3Rvciwgd2l0aG91dCBtb2RpZnlpbmcgc3RhdGVcbi8vICAgUmV0dXJucyBhcnJheSBvZiAwcyBhbmQgMXMgZm9yIGVhY2ggcXViaXQuIFxuLy8gICBGb3IgZXhhbXBsZSwgYmVsbCBzdGF0ZSB3aWxsIHJldHVybjogWzAsIDBdIG9yIFsxLCAxXVxuLy8gICBJZiB5b3UgbmVlZCBtdWx0aXBsZSBzaG90cyB0aGVuIHVzZSBcIm1lYXN1cmVBbGxNdWx0aXNob3RcIiBtZXRob2QgKGl0IHJ1bnMgbXVjaCBmYXN0ZXIpLlxuLy9cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5tZWFzdXJlQWxsID0gZnVuY3Rpb24oZm9yY2UpIHtcblx0aWYodGhpcy5jb2xsYXBzZWQgJiYgdGhpcy5jb2xsYXBzZWQubGVuZ3RoID09IHRoaXMubnVtUXViaXRzICYmICFmb3JjZSkge1xuXHRcdHJldHVybiB0aGlzLmNvbGxhcHNlZDtcblx0fVxuXG5cdHRoaXMuY29sbGFwc2VkID0gW107XG5cblx0dmFyIHJhbmRvbVdlaWdodCA9IE1hdGgucmFuZG9tKCk7XG5cdGZvcih2YXIgaXMgaW4gdGhpcy5zdGF0ZSkge1xuXHRcdHZhciBzdGF0ZSA9IG1hdGgucm91bmQodGhpcy5zdGF0ZVtpc10sIDE0KTtcblx0XHRpZihzdGF0ZS5yZSB8fCBzdGF0ZS5pbSkge1xuXHRcdFx0dmFyIGNoYW5jZSA9IG1hdGgucm91bmQobWF0aC5wb3cobWF0aC5hYnMoc3RhdGUpLCAyKSwgMTQpO1xuXHRcdFx0cmFuZG9tV2VpZ2h0IC09IGNoYW5jZTtcblx0XHRcdGlmKHJhbmRvbVdlaWdodCA8PSAwKSB7XG5cdFx0XHRcdHZhciBpID0gcGFyc2VJbnQoaXMpO1xuXHRcdFx0XHRpZih0aGlzLnJldmVyc2VCaXRPcmRlcikge1xuXHRcdFx0XHRcdGZvcih2YXIgcSA9IHRoaXMubnVtUXViaXRzIC0gMTsgcSA+PSAwOyBxLS0pIHtcblx0XHRcdFx0XHRcdHRoaXMuY29sbGFwc2VkLnB1c2goMSA8PCBxICYgaSA/IDEgOiAwKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Zm9yKHZhciBxID0gMDsgcSA8IHRoaXMubnVtUXViaXRzOyBxKyspIHtcblx0XHRcdFx0XHRcdHRoaXMuY29sbGFwc2VkLnB1c2goMSA8PCBxICYgaSA/IDEgOiAwKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXMuY29sbGFwc2VkO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFRoaXMgc2hvbGQgbmV2ZXIgaGFwcGVuLCBidXQgXCJuYXR1cmUgaXMgbm90IGNsYXNzaWNhbFwiIDopXG5cdGlmKCF0aGlzLmNvbGxhcHNlZC5sZW5ndGgpIHtcblx0XHR3aGlsZSh0aGlzLmNvbGxhcHNlZC5sZW5ndGggPCB0aGlzLm51bVF1Yml0cykge1xuXHRcdFx0dGhpcy5jb2xsYXBzZWQucHVzaCgwKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHRoaXMuY29sbGFwc2VkO1xufTtcblxuXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBzaW11bGF0ZXMgbWVhc3VyZW1lbnQgb2YgYWxsIHF1Yml0cyBvbiBjdXJyZW50IHN0YXRlIHZlY3Rvciwgd2l0aG91dCBtb2RpZnlpbmcgc3RhdGUsIG11bHRpcGxlIHRpbWVzXG4vLyAgIFJldHVybnMgb2JqZWN0IChkaWN0aW9uYXJ5KSB3aXRoIG1lYXN1cmVkIHZhbHVlcyAoYmluYXJ5KSBhcyBrZXlzIGFuZCBjb3VudHMgYXMgdmFsdWVzXG4vLyAgIEZvciBleGFtcGxlLCAxMDI0IHNob3RzIG9uIGJlbGwgc3RhdGUgd2lsbCByZXR1cm4gc29tZXRoaW5nIGxpa2U6IHsgXCIwMFwiOiA1MTQsIFwiMTFcIjogNTEwIH1cbi8vXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUubWVhc3VyZUFsbE11bHRpc2hvdCA9IGZ1bmN0aW9uKHNob3RzKSB7XG5cdHNob3RzID0gc2hvdHMgfHwgMTtcblxuXHR2YXIgY291bnRzID0ge307XG5cblx0dmFyIHJhbmRvbVdlaWdodHMgPSBbXTtcblx0Zm9yKHZhciBpID0gMDsgaSA8IHNob3RzOyBpKyspIHtcblx0XHRyYW5kb21XZWlnaHRzLnB1c2goTWF0aC5yYW5kb20oKSk7XG5cdH1cblxuXHR2YXIgc2hvdENvdW50ID0gMDtcblx0ZG8ge1xuXHRcdGZvcih2YXIgaXMgaW4gdGhpcy5zdGF0ZSkge1xuXHRcdFx0dmFyIHN0YXRlID0gbWF0aC5yb3VuZCh0aGlzLnN0YXRlW2lzXSwgMTQpO1xuXHRcdFx0aWYoc3RhdGUucmUgfHwgc3RhdGUuaW0pIHtcblx0XHRcdFx0dmFyIGNoYW5jZSA9IG1hdGgucm91bmQobWF0aC5wb3cobWF0aC5hYnMoc3RhdGUpLCAyKSwgMTQpO1xuXG5cdFx0XHRcdGZvcih2YXIgc2ggPSAwOyBzaCA8IHNob3RzOyBzaCsrKSB7XG5cdFx0XHRcdFx0aWYocmFuZG9tV2VpZ2h0c1tzaF0gPiAwKSB7XG5cdFx0XHRcdFx0XHRyYW5kb21XZWlnaHRzW3NoXSAtPSBjaGFuY2U7XG5cblx0XHRcdFx0XHRcdGlmKHJhbmRvbVdlaWdodHNbc2hdIDw9IDApIHtcblx0XHRcdFx0XHRcdFx0dmFyIGJpbiA9IHBhcnNlSW50KGlzKS50b1N0cmluZygyKTtcblx0XHRcdFx0XHRcdFx0d2hpbGUoYmluLmxlbmd0aCA8IHRoaXMubnVtUXViaXRzKSB7XG5cdFx0XHRcdFx0XHRcdFx0YmluID0gXCIwXCIgKyBiaW47XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRpZihjb3VudHNbYmluXSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvdW50c1tiaW5dKys7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Y291bnRzW2Jpbl0gPSAxO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0c2hvdENvdW50Kys7XG5cblx0XHRcdFx0XHRcdFx0aWYoc2hvdENvdW50ID09IHNob3RzKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGNvdW50cztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSB3aGlsZShzaG90Q291bnQgPCBzaG90cyk7XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5tZWFzdXJlID0gZnVuY3Rpb24od2lyZSwgY3JlZywgY2JpdCwgZm9yY2UpIHtcblx0aWYoZm9yY2UgfHwgIXRoaXMuY29sbGFwc2VkIHx8IHRoaXMuY29sbGFwc2VkLmxlbmd0aCAhPSB0aGlzLm51bVF1Yml0cykge1xuXHRcdHRoaXMubWVhc3VyZUFsbChmb3JjZSk7XG5cdH1cblxuXHR2YXIgdmFsID0gdGhpcy5jb2xsYXBzZWRbd2lyZV07XG5cblx0aWYoY3JlZyAmJiB0eXBlb2YgY2JpdCAhPSBcInVuZGVmaW5lZFwiKSB7XG5cdFx0dGhpcy5zZXRDcmVnQml0KGNyZWcsIGNiaXQsIHZhbCk7XG5cdH1cblxuXHRyZXR1cm4gdmFsO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnByb2JhYmlsaXRpZXMgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5wcm9iID0gW107XG5cblx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHR0aGlzLnByb2IucHVzaCgwKTtcblx0fVxuXG5cdGZvcih2YXIgaXMgaW4gdGhpcy5zdGF0ZSkge1xuXHRcdHZhciBpID0gcGFyc2VJbnQoaXMpO1xuXG5cdFx0Zm9yKHZhciB3aXJlID0gMDsgd2lyZSA8IHRoaXMubnVtUXViaXRzOyB3aXJlKyspIHtcblx0XHRcdHZhciBiaXQgPSBudWxsO1xuXG5cdFx0XHRpZih0aGlzLnJldmVyc2VCaXRPcmRlcikge1xuXHRcdFx0XHRiaXQgPSBtYXRoLnBvdygyLCAodGhpcy5udW1RdWJpdHMgLSAxKSAtIHdpcmUpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Yml0ID0gbWF0aC5wb3coMiwgd2lyZSk7XG5cdFx0XHR9XG5cblx0XHRcdGlmKGkgJiBiaXQpIHtcblx0XHRcdFx0dmFyIHN0YXRlID0gdGhpcy5zdGF0ZVtpc107XG5cdFx0XHRcdGlmKHN0YXRlLnJlIHx8IHN0YXRlLmltKSB7XG5cdFx0XHRcdFx0dGhpcy5wcm9iW3dpcmVdICs9IG1hdGgucG93KG1hdGguYWJzKHN0YXRlKSwgMik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdHRoaXMucHJvYlt3aXJlXSA9IG1hdGgucm91bmQodGhpcy5wcm9iW3dpcmVdLCAxNCk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcy5wcm9iO1xufTtcblxuUXVhbnR1bUNpcmN1aXQucHJvdG90eXBlLnByb2JhYmlsaXR5ID0gZnVuY3Rpb24od2lyZSkge1xuXHRpZighdGhpcy5wcm9iIHx8IHRoaXMucHJvYi5sZW5ndGggIT0gdGhpcy5udW1RdWJpdHMpIHtcblx0XHR0aGlzLnByb2JhYmlsaXRpZXMoKTtcblx0fVxuXG5cdHJldHVybiB0aGlzLnByb2Jbd2lyZV07XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZGVuc2l0eU1hdHJpeCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgZGVuc2l0eSA9IFtdO1xuXHR2YXIgbnVtQW1wbGl0dWRlcyA9IHRoaXMubnVtQW1wbGl0dWRlcygpO1xuXHRmb3Iocm93ID0gMDsgcm93IDwgbnVtQW1wbGl0dWRlczsgcm93KyspIHtcblx0XHR2YXIgciA9IFtdO1xuXHRcdHZhciByb3dWYWwgPSB0aGlzLnN0YXRlW3Jvd10gfHwgbWF0aC5jb21wbGV4KDAsIDApO1xuXHRcdGZvcih2YXIgY29sID0gMDsgY29sIDwgbnVtQW1wbGl0dWRlczsgY29sKyspIHtcblx0XHRcdHZhciBjb2xWYWwgPSB0aGlzLnN0YXRlW2NvbF0gfHwgbWF0aC5jb21wbGV4KDAsIDApO1xuXHRcdFx0aWYoY29sVmFsLnJlIHx8IGNvbFZhbC5pbSkge1xuXHRcdFx0XHRjb2xWYWwgPSBtYXRoLmNvbmooY29sVmFsKTtcblx0XHRcdH1cblx0XHRcdHIucHVzaChtYXRoLm11bHRpcGx5KHJvd1ZhbCwgY29sVmFsKSk7XG5cdFx0fVxuXHRcdGRlbnNpdHkucHVzaChyKTtcblx0fVxuXHRyZXR1cm4gZGVuc2l0eTtcbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5wYXJ0aWFsVHJhY2UgPSBmdW5jdGlvbihxdWJpdCkge1xuXG5cdGZ1bmN0aW9uIGluc2VydEJpdChpbnB1dCwgcG9zLCBiaXQpIHtcblx0XHR2YXIgb3V0ID0gaW5wdXQgPDwgMTtcblx0XHR2YXIgbSA9ICgyIDw8IHBvcykgLSAxO1xuXHRcdHZhciBwb3NCaXQgPSAxIDw8IHBvcztcblx0XHR2YXIgb3V0ID0gKG91dCBeICgob3V0IF4gaW5wdXQpICYgbSkpIHwgcG9zQml0O1xuXHRcdGlmKCFiaXQpIHtcblx0XHRcdG91dCA9IG91dCBeIHBvc0JpdDtcblx0XHR9XG5cdFx0cmV0dXJuIG91dDtcblx0fVxuXG5cdHZhciB0cmFjZSA9IFtdO1xuXG5cdHZhciB1bnVzZWRDb3VudCA9IHRoaXMubnVtUXViaXRzIC0gMTtcblx0dmFyIHVudXNlZExlbiA9IG1hdGgucG93KDIsIHVudXNlZENvdW50KTtcblxuXHR2YXIgcXBvcyA9IG51bGw7XG5cdGlmKHRoaXMucmV2ZXJzZUJpdE9yZGVyKSB7XG5cdFx0cXBvcyA9ICh0aGlzLm51bVF1Yml0cyAtIDEpIC0gcXViaXQ7XG5cdH0gZWxzZSB7XG5cdFx0cXBvcyA9IHF1Yml0O1xuXHR9XG5cblx0Zm9yKHZhciBlbCA9IDA7IGVsIDwgNDsgZWwrKykge1xuXHRcdHRyYWNlLnB1c2gobWF0aC5jb21wbGV4KDAsIDApKTtcblx0XHR2YXIgYmFzZSA9IHVudXNlZExlbjtcblx0XHR3aGlsZShiYXNlLS0pIHtcblx0XHRcdHZhciByb3cgPSBpbnNlcnRCaXQoYmFzZSwgcXBvcywgZWwgJiAyID8gMSA6IDApO1xuXHRcdFx0aWYodGhpcy5zdGF0ZVtyb3ddKSB7XG5cdFx0XHRcdHZhciBjb2wgPSBpbnNlcnRCaXQoYmFzZSwgcXBvcywgZWwgJiAxID8gMSA6IDApO1xuXHRcdFx0XHRpZih0aGlzLnN0YXRlW2NvbF0pIHtcblx0XHRcdFx0XHR0cmFjZVtlbF0gPSBtYXRoLmFkZCh0cmFjZVtlbF0sIG1hdGgubXVsdGlwbHkodGhpcy5zdGF0ZVtyb3ddLCBtYXRoLmNvbmoodGhpcy5zdGF0ZVtjb2xdKSkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBbXG5cdFx0WyB0cmFjZVswXSwgdHJhY2VbMV0gXSxcblx0XHRbIHRyYWNlWzJdLCB0cmFjZVszXSBdXG5cdF07XG59O1xuXG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5hbmdsZXMgPSBmdW5jdGlvbigpIHtcblx0dmFyIGFuZ2xlcyA9IFtdO1xuXHRmb3IodmFyIHdpcmUgPSAwOyB3aXJlIDwgdGhpcy5udW1RdWJpdHM7IHdpcmUrKykge1xuXHRcdGFuZ2xlcy5wdXNoKHsgdGhldGE6IDAsIHBoaTogMCB9KTtcblx0fVxuXG5cdGZvcih2YXIgd2lyZSA9IDA7IHdpcmUgPCB0aGlzLm51bVF1Yml0czsgd2lyZSsrKSB7XG5cdFx0dmFyIHRyYWNlID0gdGhpcy5wYXJ0aWFsVHJhY2Uod2lyZSk7XG5cdFx0dmFyIGFscGhhID0gbWF0aC5yb3VuZChtYXRoLnNxcnQodHJhY2VbMF1bMF0pLCAxMik7XG5cdFx0dmFyIGJldGEgPSBtYXRoLnJvdW5kKG1hdGgubXVsdGlwbHkodHJhY2VbMV1bMF0sIG1hdGguc3FydCgyKSksIDEyKTtcblx0XHR2YXIgcmFkaXVzID0gbWF0aC5yb3VuZChtYXRoLmFicyhtYXRoLnNxcnQoMiptYXRoLmFicyhtYXRoLnRyYWNlKG1hdGgucG93KHRyYWNlLCAyKSkpLTEpKSwgMTIpO1xuXG5cdFx0dmFyIHRoZXRhID0gbWF0aC5tdWx0aXBseSgyLCBtYXRoLmFjb3MoYWxwaGEpKTtcblx0XHR2YXIgcGhpID0gMDtcblxuXHRcdGlmKCEobWF0aC5yb3VuZChiZXRhLnJlLCA4KSA9PSAwICYmIG1hdGgucm91bmQoYmV0YS5pbSwgOCkgPT0gMCkpIHtcblx0XHRcdHBoaSA9IG1hdGgubXVsdGlwbHkobWF0aC5jb21wbGV4KDAsIC0xKSwgbWF0aC5sb2cobWF0aC5tdWx0aXBseShiZXRhLCBtYXRoLmNzYyhtYXRoLmRpdmlkZSh0aGV0YSwgMikpKSkpLnJlO1xuXHRcdFx0aWYoaXNOYU4ocGhpKSkge1xuXHRcdFx0XHRwaGkgPSAwO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGFuZ2xlc1t3aXJlXS50aGV0YSA9IG1hdGgucm91bmQobWF0aC5hYnModGhldGEpLCAxMik7XG5cdFx0YW5nbGVzW3dpcmVdLnBoaSA9IG1hdGgucm91bmQocGhpLCAxMik7XG5cdFx0YW5nbGVzW3dpcmVdLnRoZXRhRGVnID0gbWF0aC5yb3VuZChtYXRoLm11bHRpcGx5KG1hdGguYWJzKHRoZXRhKSwgKDE4MCAvIG1hdGgucGkpKSwgNyk7XG5cdFx0YW5nbGVzW3dpcmVdLnBoaURlZyA9IG1hdGgucm91bmQobWF0aC5tdWx0aXBseShwaGksICgxODAgLyBtYXRoLnBpKSksIDcpO1xuXHRcdGFuZ2xlc1t3aXJlXS5yYWRpdXMgPSBtYXRoLnJvdW5kKHJhZGl1cywgNyk7XG5cdH1cblxuXHRyZXR1cm4gYW5nbGVzO1xufTtcblxuXG4vL1xuLy8gT3B0aW9uczogXG4vLyAgeyBcbi8vXHRcdHVzZUdhdGVzOiBbIFwicnlcIiwgXCJyelwiLCBcImNyelwiLCAuLi4gXSxcbi8vICBcdG5vTWVhc3VyZTogZmFsc2Vcbi8vICAgICAgbm9SZXNldDogZmFsc2Vcbi8vICAgICAgbm9DbGFzc2ljQ29udHJvbDogZmFsc2Vcbi8vICB9XG4vL1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUucmFuZG9tQ2lyY3VpdCA9IGZ1bmN0aW9uKG51bVF1Yml0cywgbnVtR2F0ZXMsIG9wdGlvbnMpIHtcblx0dGhpcy5pbml0KG51bVF1Yml0cyk7XG5cblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0dmFyIGdhdGVzID0gKG9wdGlvbnMudXNlR2F0ZXMgJiYgb3B0aW9ucy51c2VHYXRlcy5sZW5ndGgpID8gb3B0aW9ucy51c2VHYXRlcyA6IE9iamVjdC5rZXlzKHRoaXMuYmFzaWNHYXRlcyk7XG5cblx0aWYob3B0aW9ucy5ub01lYXN1cmUgJiYgZ2F0ZXMuaW5kZXhPZihcIm1lYXN1cmVcIikgPj0gMCkge1xuXHRcdGdhdGVzLnNwbGljZShnYXRlcy5pbmRleE9mKFwibWVhc3VyZVwiKSwgMSk7XG5cdH1cblxuXHRpZihvcHRpb25zLm5vUmVzZXQgJiYgZ2F0ZXMuaW5kZXhPZihcInJlc2V0XCIpID49IDApIHtcblx0XHRnYXRlcy5zcGxpY2UoZ2F0ZXMuaW5kZXhPZihcInJlc2V0XCIpLCAxKTtcblx0fVxuXG5cdHZhciBnYXRlQ291bnQgPSAwO1xuXHR3aGlsZShnYXRlQ291bnQgPCBudW1HYXRlcykge1xuXHRcdHZhciBnYXRlTmFtZSA9IGdhdGVzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGdhdGVzLmxlbmd0aCldO1xuXHRcdHZhciBnYXRlID0gdGhpcy5iYXNpY0dhdGVzW2dhdGVOYW1lXTtcblx0XHRpZihnYXRlKSB7XG5cdFx0XHR2YXIgZ2F0ZVF1Yml0cyA9IGdhdGUubWF0cml4ICYmIGdhdGUubWF0cml4Lmxlbmd0aCA/IG1hdGgubG9nMihnYXRlLm1hdHJpeC5sZW5ndGgpIDogMTtcblxuXHRcdFx0aWYoZ2F0ZVF1Yml0cyA8PSBudW1RdWJpdHMpIHtcblx0XHRcdFx0Ly8gZ2F0ZSB3aXJlc1xuXHRcdFx0XHR2YXIgZ2F0ZVdpcmVzID0gW107XG5cdFx0XHRcdHdoaWxlKGdhdGVXaXJlcy5sZW5ndGggPCBnYXRlUXViaXRzKSB7XG5cdFx0XHRcdFx0dmFyIGdhdGVXaXJlID0gLTE7XG5cdFx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdFx0Z2F0ZVdpcmUgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBudW1RdWJpdHMpO1xuXHRcdFx0XHRcdH0gd2hpbGUoZ2F0ZVdpcmVzLmluZGV4T2YoZ2F0ZVdpcmUpID49IDApO1xuXHRcdFx0XHRcdGdhdGVXaXJlcy5wdXNoKGdhdGVXaXJlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBvcHQgPSB7fTtcblxuXHRcdFx0XHQvLyBnYXRlIHBhcmFtc1xuXHRcdFx0XHRpZihnYXRlLnBhcmFtcyAmJiBnYXRlLnBhcmFtcy5sZW5ndGgpIHtcblx0XHRcdFx0XHR2YXIgcGFyYW1zID0ge307XG5cdFx0XHRcdFx0Z2F0ZS5wYXJhbXMubWFwKGZ1bmN0aW9uKHBhcmFtTmFtZSkge1xuXHRcdFx0XHRcdFx0cGFyYW1zW3BhcmFtTmFtZV0gPSBNYXRoLlBJICogMiAqIE1hdGgucmFuZG9tKCk7XG5cblx0XHRcdFx0XHRcdC8vIC1QSS4uUElcblx0XHRcdFx0XHRcdGlmKHBhcmFtc1twYXJhbU5hbWVdID4gTWF0aC5QSSkge1xuXHRcdFx0XHRcdFx0XHRwYXJhbXNbcGFyYW1OYW1lXSA9IE1hdGguUEkgLSBwYXJhbXNbcGFyYW1OYW1lXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRvcHQucGFyYW1zID0gcGFyYW1zO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYoZ2F0ZU5hbWUgPT0gXCJtZWFzdXJlXCIpIHtcblx0XHRcdFx0XHQvLyBtZWFzdXJlbWVudCBkZXN0aW5hdGlvblxuXHRcdFx0XHRcdG9wdC5jcmVnID0ge1xuXHRcdFx0XHRcdFx0bmFtZTogXCJjXCIsXG5cdFx0XHRcdFx0XHRiaXQ6IGdhdGVXaXJlc1swXVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYoIW9wdGlvbnMubm9DbGFzc2ljQ29udHJvbCkge1xuXHRcdFx0XHRcdFx0Ly8gbWF5YmUgYWRkIGNvbmRpdGlvblxuXHRcdFx0XHRcdFx0aWYoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNCkgPT0gMCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgY3JlZ0JpdHMgPSB0aGlzLmNyZWdUb3RhbEJpdHMoKTtcblx0XHRcdFx0XHRcdFx0aWYoY3JlZ0JpdHMpIHtcblx0XHRcdFx0XHRcdFx0XHRvcHQuY29uZGl0aW9uID0ge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y3JlZzogXCJjXCIsXG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZTogTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1hdGgucG93KDIsIGNyZWdCaXRzKSkpXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuYXBwZW5kR2F0ZShnYXRlTmFtZSwgZ2F0ZVdpcmVzLCBvcHQpO1xuXHRcdFx0XHRnYXRlQ291bnQrKztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cblF1YW50dW1DaXJjdWl0LnByb3RvdHlwZS5yYW5kb21Vbml0YXJ5ID0gZnVuY3Rpb24obnVtUXViaXRzKSB7XG5cdHZhciBjaXJjID0gbmV3IFF1YW50dW1DaXJjdWl0KCk7XG5cdGNpcmMucmFuZG9tQ2lyY3VpdCgobnVtUXViaXRzIHx8IDEpLCAobnVtUXViaXRzIHx8IDEpICogOCwge1xuXHRcdHVzZUdhdGVzOiBbIFwicnhcIiwgXCJyelwiLCBcImN6XCIgXSxcblx0XHRub01lYXN1cmU6IHRydWUsXG5cdFx0bm9SZXNldDogdHJ1ZSxcblx0XHRub0NsYXNzaWNDb250cm9sOiB0cnVlXG5cdH0pO1xuXHRyZXR1cm4gY2lyYy5jaXJjdWl0TWF0cml4KCk7XG59O1xuXG5RdWFudHVtQ2lyY3VpdC5wcm90b3R5cGUuZXVsZXJBbmdsZXNaWVogPSBmdW5jdGlvbihpbnB1dE1hdHJpeCkge1xuXHR2YXIgZXVsZXJBbmdsZXMgPSB7dGhldGE6IG51bGwsIHBoaTogbnVsbCwgbGFtYmRhOiBudWxsLCBwaGFzZTogbnVsbH07XG5cdHZhciBjb2VmZiA9IG1hdGgucG93KG1hdGguZGV0KGlucHV0TWF0cml4KSwgLTAuNSk7XG5cdGV1bGVyQW5nbGVzLnBoYXNlID0gLTEgKiBtYXRoLmNvbXBsZXgoY29lZmYpLnRvUG9sYXIoKS5waGk7XG5cdHZhciBzdV9tYXQgPSBtYXRoLm11bHRpcGx5KGNvZWZmLCBpbnB1dE1hdHJpeCk7XG5cdGV1bGVyQW5nbGVzLnRoZXRhID0gMiAqIG1hdGguYXRhbjIobWF0aC5hYnMoc3VfbWF0WzFdWzBdKSwgbWF0aC5hYnMoc3VfbWF0WzBdWzBdKSk7XG5cdHZhciBwaGlwbGFtYmRhID0gMiAqIG1hdGguY29tcGxleChzdV9tYXRbMV1bMV0pLnRvUG9sYXIoKS5waGk7XG5cdHZhciBwaGltbGFtZGEgPSAyICogbWF0aC5jb21wbGV4KHN1X21hdFsxXVswXSkudG9Qb2xhcigpLnBoaTtcblx0ZXVsZXJBbmdsZXMucGhpID0gKHBoaXBsYW1iZGEgKyBwaGltbGFtZGEpIC8gMi4wO1xuXHRldWxlckFuZ2xlcy5sYW1iZGEgPSAocGhpcGxhbWJkYSAtIHBoaW1sYW1kYSkgLyAyLjA7XG5cdHJldHVybiBldWxlckFuZ2xlcztcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUXVhbnR1bUNpcmN1aXQ7XG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG4vLyBUaGlzIGltcGxlbWVudGF0aW9uIG9mIHtAbGluayBUb2tlblN0cmVhbX0gbG9hZHMgdG9rZW5zIGZyb20gYVxuLy8ge0BsaW5rIFRva2VuU291cmNlfSBvbi1kZW1hbmQsIGFuZCBwbGFjZXMgdGhlIHRva2VucyBpbiBhIGJ1ZmZlciB0byBwcm92aWRlXG4vLyBhY2Nlc3MgdG8gYW55IHByZXZpb3VzIHRva2VuIGJ5IGluZGV4LlxuLy9cbi8vIDxwPlxuLy8gVGhpcyB0b2tlbiBzdHJlYW0gaWdub3JlcyB0aGUgdmFsdWUgb2Yge0BsaW5rIFRva2VuLy9nZXRDaGFubmVsfS4gSWYgeW91clxuLy8gcGFyc2VyIHJlcXVpcmVzIHRoZSB0b2tlbiBzdHJlYW0gZmlsdGVyIHRva2VucyB0byBvbmx5IHRob3NlIG9uIGEgcGFydGljdWxhclxuLy8gY2hhbm5lbCwgc3VjaCBhcyB7QGxpbmsgVG9rZW4vL0RFRkFVTFRfQ0hBTk5FTH0gb3Jcbi8vIHtAbGluayBUb2tlbi8vSElEREVOX0NIQU5ORUx9LCB1c2UgYSBmaWx0ZXJpbmcgdG9rZW4gc3RyZWFtIHN1Y2ggYVxuLy8ge0BsaW5rIENvbW1vblRva2VuU3RyZWFtfS48L3A+XG5cbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vVG9rZW4nKS5Ub2tlbjtcbnZhciBMZXhlciA9IHJlcXVpcmUoJy4vTGV4ZXInKS5MZXhlcjtcbnZhciBJbnRlcnZhbCA9IHJlcXVpcmUoJy4vSW50ZXJ2YWxTZXQnKS5JbnRlcnZhbDtcblxuLy8gdGhpcyBpcyBqdXN0IHRvIGtlZXAgbWVhbmluZ2Z1bCBwYXJhbWV0ZXIgdHlwZXMgdG8gUGFyc2VyXG5mdW5jdGlvbiBUb2tlblN0cmVhbSgpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIEJ1ZmZlcmVkVG9rZW5TdHJlYW0odG9rZW5Tb3VyY2UpIHtcblxuXHRUb2tlblN0cmVhbS5jYWxsKHRoaXMpO1xuXHQvLyBUaGUge0BsaW5rIFRva2VuU291cmNlfSBmcm9tIHdoaWNoIHRva2VucyBmb3IgdGhpcyBzdHJlYW0gYXJlIGZldGNoZWQuXG5cdHRoaXMudG9rZW5Tb3VyY2UgPSB0b2tlblNvdXJjZTtcblxuXHQvLyBBIGNvbGxlY3Rpb24gb2YgYWxsIHRva2VucyBmZXRjaGVkIGZyb20gdGhlIHRva2VuIHNvdXJjZS4gVGhlIGxpc3QgaXNcblx0Ly8gY29uc2lkZXJlZCBhIGNvbXBsZXRlIHZpZXcgb2YgdGhlIGlucHV0IG9uY2Uge0BsaW5rIC8vZmV0Y2hlZEVPRn0gaXMgc2V0XG5cdC8vIHRvIHtAY29kZSB0cnVlfS5cblx0dGhpcy50b2tlbnMgPSBbXTtcblxuXHQvLyBUaGUgaW5kZXggaW50byB7QGxpbmsgLy90b2tlbnN9IG9mIHRoZSBjdXJyZW50IHRva2VuIChuZXh0IHRva2VuIHRvXG5cdC8vIHtAbGluayAvL2NvbnN1bWV9KS4ge0BsaW5rIC8vdG9rZW5zfXtAY29kZSBbfXtAbGluayAvL3B9e0Bjb2RlIF19IHNob3VsZFxuXHQvLyBiZVxuXHQvLyB7QGxpbmsgLy9MVCBMVCgxKX0uXG5cdC8vXG5cdC8vIDxwPlRoaXMgZmllbGQgaXMgc2V0IHRvIC0xIHdoZW4gdGhlIHN0cmVhbSBpcyBmaXJzdCBjb25zdHJ1Y3RlZCBvciB3aGVuXG5cdC8vIHtAbGluayAvL3NldFRva2VuU291cmNlfSBpcyBjYWxsZWQsIGluZGljYXRpbmcgdGhhdCB0aGUgZmlyc3QgdG9rZW4gaGFzXG5cdC8vIG5vdCB5ZXQgYmVlbiBmZXRjaGVkIGZyb20gdGhlIHRva2VuIHNvdXJjZS4gRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sXG5cdC8vIHNlZSB0aGUgZG9jdW1lbnRhdGlvbiBvZiB7QGxpbmsgSW50U3RyZWFtfSBmb3IgYSBkZXNjcmlwdGlvbiBvZlxuXHQvLyBJbml0aWFsaXppbmcgTWV0aG9kcy48L3A+XG5cdHRoaXMuaW5kZXggPSAtMTtcblxuXHQvLyBJbmRpY2F0ZXMgd2hldGhlciB0aGUge0BsaW5rIFRva2VuLy9FT0Z9IHRva2VuIGhhcyBiZWVuIGZldGNoZWQgZnJvbVxuXHQvLyB7QGxpbmsgLy90b2tlblNvdXJjZX0gYW5kIGFkZGVkIHRvIHtAbGluayAvL3Rva2Vuc30uIFRoaXMgZmllbGQgaW1wcm92ZXNcblx0Ly8gcGVyZm9ybWFuY2UgZm9yIHRoZSBmb2xsb3dpbmcgY2FzZXM6XG5cdC8vXG5cdC8vIDx1bD5cblx0Ly8gPGxpPntAbGluayAvL2NvbnN1bWV9OiBUaGUgbG9va2FoZWFkIGNoZWNrIGluIHtAbGluayAvL2NvbnN1bWV9IHRvXG5cdC8vIHByZXZlbnRcblx0Ly8gY29uc3VtaW5nIHRoZSBFT0Ygc3ltYm9sIGlzIG9wdGltaXplZCBieSBjaGVja2luZyB0aGUgdmFsdWVzIG9mXG5cdC8vIHtAbGluayAvL2ZldGNoZWRFT0Z9IGFuZCB7QGxpbmsgLy9wfSBpbnN0ZWFkIG9mIGNhbGxpbmcge0BsaW5rXG5cdC8vIC8vTEF9LjwvbGk+XG5cdC8vIDxsaT57QGxpbmsgLy9mZXRjaH06IFRoZSBjaGVjayB0byBwcmV2ZW50IGFkZGluZyBtdWx0aXBsZSBFT0Ygc3ltYm9sc1xuXHQvLyBpbnRvXG5cdC8vIHtAbGluayAvL3Rva2Vuc30gaXMgdHJpdmlhbCB3aXRoIHRoaXMgZmllbGQuPC9saT5cblx0Ly8gPHVsPlxuXHR0aGlzLmZldGNoZWRFT0YgPSBmYWxzZTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUb2tlblN0cmVhbS5wcm90b3R5cGUpO1xuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCdWZmZXJlZFRva2VuU3RyZWFtO1xuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5tYXJrID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiAwO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUucmVsZWFzZSA9IGZ1bmN0aW9uKG1hcmtlcikge1xuXHQvLyBubyByZXNvdXJjZXMgdG8gcmVsZWFzZVxufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5zZWVrKDApO1xufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuc2VlayA9IGZ1bmN0aW9uKGluZGV4KSB7XG5cdHRoaXMubGF6eUluaXQoKTtcblx0dGhpcy5pbmRleCA9IHRoaXMuYWRqdXN0U2Vla0luZGV4KGluZGV4KTtcbn07XG5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uKGluZGV4KSB7XG5cdHRoaXMubGF6eUluaXQoKTtcblx0cmV0dXJuIHRoaXMudG9rZW5zW2luZGV4XTtcbn07XG5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLmNvbnN1bWUgPSBmdW5jdGlvbigpIHtcblx0dmFyIHNraXBFb2ZDaGVjayA9IGZhbHNlO1xuXHRpZiAodGhpcy5pbmRleCA+PSAwKSB7XG5cdFx0aWYgKHRoaXMuZmV0Y2hlZEVPRikge1xuXHRcdFx0Ly8gdGhlIGxhc3QgdG9rZW4gaW4gdG9rZW5zIGlzIEVPRi4gc2tpcCBjaGVjayBpZiBwIGluZGV4ZXMgYW55XG5cdFx0XHQvLyBmZXRjaGVkIHRva2VuIGV4Y2VwdCB0aGUgbGFzdC5cblx0XHRcdHNraXBFb2ZDaGVjayA9IHRoaXMuaW5kZXggPCB0aGlzLnRva2Vucy5sZW5ndGggLSAxO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBubyBFT0YgdG9rZW4gaW4gdG9rZW5zLiBza2lwIGNoZWNrIGlmIHAgaW5kZXhlcyBhIGZldGNoZWQgdG9rZW4uXG5cdFx0XHRza2lwRW9mQ2hlY2sgPSB0aGlzLmluZGV4IDwgdGhpcy50b2tlbnMubGVuZ3RoO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBub3QgeWV0IGluaXRpYWxpemVkXG5cdFx0c2tpcEVvZkNoZWNrID0gZmFsc2U7XG5cdH1cblx0aWYgKCFza2lwRW9mQ2hlY2sgJiYgdGhpcy5MQSgxKSA9PT0gVG9rZW4uRU9GKSB7XG5cdFx0dGhyb3cgXCJjYW5ub3QgY29uc3VtZSBFT0ZcIjtcblx0fVxuXHRpZiAodGhpcy5zeW5jKHRoaXMuaW5kZXggKyAxKSkge1xuXHRcdHRoaXMuaW5kZXggPSB0aGlzLmFkanVzdFNlZWtJbmRleCh0aGlzLmluZGV4ICsgMSk7XG5cdH1cbn07XG5cbi8vIE1ha2Ugc3VyZSBpbmRleCB7QGNvZGUgaX0gaW4gdG9rZW5zIGhhcyBhIHRva2VuLlxuLy9cbi8vIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIGEgdG9rZW4gaXMgbG9jYXRlZCBhdCBpbmRleCB7QGNvZGUgaX0sIG90aGVyd2lzZVxuLy8ge0Bjb2RlIGZhbHNlfS5cbi8vIEBzZWUgLy9nZXQoaW50IGkpXG4vLyAvXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24oaSkge1xuXHR2YXIgbiA9IGkgLSB0aGlzLnRva2Vucy5sZW5ndGggKyAxOyAvLyBob3cgbWFueSBtb3JlIGVsZW1lbnRzIHdlIG5lZWQ/XG5cdGlmIChuID4gMCkge1xuXHRcdHZhciBmZXRjaGVkID0gdGhpcy5mZXRjaChuKTtcblx0XHRyZXR1cm4gZmV0Y2hlZCA+PSBuO1xuXHR9XG5cdHJldHVybiB0cnVlO1xufTtcblxuLy8gQWRkIHtAY29kZSBufSBlbGVtZW50cyB0byBidWZmZXIuXG4vL1xuLy8gQHJldHVybiBUaGUgYWN0dWFsIG51bWJlciBvZiBlbGVtZW50cyBhZGRlZCB0byB0aGUgYnVmZmVyLlxuLy8gL1xuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuZmV0Y2ggPSBmdW5jdGlvbihuKSB7XG5cdGlmICh0aGlzLmZldGNoZWRFT0YpIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXHRmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuXHRcdHZhciB0ID0gdGhpcy50b2tlblNvdXJjZS5uZXh0VG9rZW4oKTtcblx0XHR0LnRva2VuSW5kZXggPSB0aGlzLnRva2Vucy5sZW5ndGg7XG5cdFx0dGhpcy50b2tlbnMucHVzaCh0KTtcblx0XHRpZiAodC50eXBlID09PSBUb2tlbi5FT0YpIHtcblx0XHRcdHRoaXMuZmV0Y2hlZEVPRiA9IHRydWU7XG5cdFx0XHRyZXR1cm4gaSArIDE7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBuO1xufTtcblxuLy8gR2V0IGFsbCB0b2tlbnMgZnJvbSBzdGFydC4uc3RvcCBpbmNsdXNpdmVseS8vL1xuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuZ2V0VG9rZW5zID0gZnVuY3Rpb24oc3RhcnQsIHN0b3AsIHR5cGVzKSB7XG5cdGlmICh0eXBlcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dHlwZXMgPSBudWxsO1xuXHR9XG5cdGlmIChzdGFydCA8IDAgfHwgc3RvcCA8IDApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHR0aGlzLmxhenlJbml0KCk7XG5cdHZhciBzdWJzZXQgPSBbXTtcblx0aWYgKHN0b3AgPj0gdGhpcy50b2tlbnMubGVuZ3RoKSB7XG5cdFx0c3RvcCA9IHRoaXMudG9rZW5zLmxlbmd0aCAtIDE7XG5cdH1cblx0Zm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgc3RvcDsgaSsrKSB7XG5cdFx0dmFyIHQgPSB0aGlzLnRva2Vuc1tpXTtcblx0XHRpZiAodC50eXBlID09PSBUb2tlbi5FT0YpIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRpZiAodHlwZXMgPT09IG51bGwgfHwgdHlwZXMuY29udGFpbnModC50eXBlKSkge1xuXHRcdFx0c3Vic2V0LnB1c2godCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBzdWJzZXQ7XG59O1xuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5MQSA9IGZ1bmN0aW9uKGkpIHtcblx0cmV0dXJuIHRoaXMuTFQoaSkudHlwZTtcbn07XG5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLkxCID0gZnVuY3Rpb24oaykge1xuXHRpZiAodGhpcy5pbmRleCAtIGsgPCAwKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0cmV0dXJuIHRoaXMudG9rZW5zW3RoaXMuaW5kZXggLSBrXTtcbn07XG5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLkxUID0gZnVuY3Rpb24oaykge1xuXHR0aGlzLmxhenlJbml0KCk7XG5cdGlmIChrID09PSAwKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0aWYgKGsgPCAwKSB7XG5cdFx0cmV0dXJuIHRoaXMuTEIoLWspO1xuXHR9XG5cdHZhciBpID0gdGhpcy5pbmRleCArIGsgLSAxO1xuXHR0aGlzLnN5bmMoaSk7XG5cdGlmIChpID49IHRoaXMudG9rZW5zLmxlbmd0aCkgeyAvLyByZXR1cm4gRU9GIHRva2VuXG5cdFx0Ly8gRU9GIG11c3QgYmUgbGFzdCB0b2tlblxuXHRcdHJldHVybiB0aGlzLnRva2Vuc1t0aGlzLnRva2Vucy5sZW5ndGggLSAxXTtcblx0fVxuXHRyZXR1cm4gdGhpcy50b2tlbnNbaV07XG59O1xuXG4vLyBBbGxvd2VkIGRlcml2ZWQgY2xhc3NlcyB0byBtb2RpZnkgdGhlIGJlaGF2aW9yIG9mIG9wZXJhdGlvbnMgd2hpY2ggY2hhbmdlXG4vLyB0aGUgY3VycmVudCBzdHJlYW0gcG9zaXRpb24gYnkgYWRqdXN0aW5nIHRoZSB0YXJnZXQgdG9rZW4gaW5kZXggb2YgYSBzZWVrXG4vLyBvcGVyYXRpb24uIFRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHNpbXBseSByZXR1cm5zIHtAY29kZSBpfS4gSWYgYW5cbi8vIGV4Y2VwdGlvbiBpcyB0aHJvd24gaW4gdGhpcyBtZXRob2QsIHRoZSBjdXJyZW50IHN0cmVhbSBpbmRleCBzaG91bGQgbm90IGJlXG4vLyBjaGFuZ2VkLlxuLy9cbi8vIDxwPkZvciBleGFtcGxlLCB7QGxpbmsgQ29tbW9uVG9rZW5TdHJlYW19IG92ZXJyaWRlcyB0aGlzIG1ldGhvZCB0byBlbnN1cmVcbi8vIHRoYXRcbi8vIHRoZSBzZWVrIHRhcmdldCBpcyBhbHdheXMgYW4gb24tY2hhbm5lbCB0b2tlbi48L3A+XG4vL1xuLy8gQHBhcmFtIGkgVGhlIHRhcmdldCB0b2tlbiBpbmRleC5cbi8vIEByZXR1cm4gVGhlIGFkanVzdGVkIHRhcmdldCB0b2tlbiBpbmRleC5cblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuYWRqdXN0U2Vla0luZGV4ID0gZnVuY3Rpb24oaSkge1xuXHRyZXR1cm4gaTtcbn07XG5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLmxhenlJbml0ID0gZnVuY3Rpb24oKSB7XG5cdGlmICh0aGlzLmluZGV4ID09PSAtMSkge1xuXHRcdHRoaXMuc2V0dXAoKTtcblx0fVxufTtcblxuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUuc2V0dXAgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5zeW5jKDApO1xuXHR0aGlzLmluZGV4ID0gdGhpcy5hZGp1c3RTZWVrSW5kZXgoMCk7XG59O1xuXG4vLyBSZXNldCB0aGlzIHRva2VuIHN0cmVhbSBieSBzZXR0aW5nIGl0cyB0b2tlbiBzb3VyY2UuLy8vXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5zZXRUb2tlblNvdXJjZSA9IGZ1bmN0aW9uKHRva2VuU291cmNlKSB7XG5cdHRoaXMudG9rZW5Tb3VyY2UgPSB0b2tlblNvdXJjZTtcblx0dGhpcy50b2tlbnMgPSBbXTtcblx0dGhpcy5pbmRleCA9IC0xO1xuXHR0aGlzLmZldGNoZWRFT0YgPSBmYWxzZTtcbn07XG5cblxuLy8gR2l2ZW4gYSBzdGFydGluZyBpbmRleCwgcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgbmV4dCB0b2tlbiBvbiBjaGFubmVsLlxuLy8gUmV0dXJuIGkgaWYgdG9rZW5zW2ldIGlzIG9uIGNoYW5uZWwuIFJldHVybiAtMSBpZiB0aGVyZSBhcmUgbm8gdG9rZW5zXG4vLyBvbiBjaGFubmVsIGJldHdlZW4gaSBhbmQgRU9GLlxuLy8gL1xuQnVmZmVyZWRUb2tlblN0cmVhbS5wcm90b3R5cGUubmV4dFRva2VuT25DaGFubmVsID0gZnVuY3Rpb24oaSwgY2hhbm5lbCkge1xuXHR0aGlzLnN5bmMoaSk7XG5cdGlmIChpID49IHRoaXMudG9rZW5zLmxlbmd0aCkge1xuXHRcdHJldHVybiAtMTtcblx0fVxuXHR2YXIgdG9rZW4gPSB0aGlzLnRva2Vuc1tpXTtcblx0d2hpbGUgKHRva2VuLmNoYW5uZWwgIT09IHRoaXMuY2hhbm5lbCkge1xuXHRcdGlmICh0b2tlbi50eXBlID09PSBUb2tlbi5FT0YpIHtcblx0XHRcdHJldHVybiAtMTtcblx0XHR9XG5cdFx0aSArPSAxO1xuXHRcdHRoaXMuc3luYyhpKTtcblx0XHR0b2tlbiA9IHRoaXMudG9rZW5zW2ldO1xuXHR9XG5cdHJldHVybiBpO1xufTtcblxuLy8gR2l2ZW4gYSBzdGFydGluZyBpbmRleCwgcmV0dXJuIHRoZSBpbmRleCBvZiB0aGUgcHJldmlvdXMgdG9rZW4gb24gY2hhbm5lbC5cbi8vIFJldHVybiBpIGlmIHRva2Vuc1tpXSBpcyBvbiBjaGFubmVsLiBSZXR1cm4gLTEgaWYgdGhlcmUgYXJlIG5vIHRva2Vuc1xuLy8gb24gY2hhbm5lbCBiZXR3ZWVuIGkgYW5kIDAuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5wcmV2aW91c1Rva2VuT25DaGFubmVsID0gZnVuY3Rpb24oaSwgY2hhbm5lbCkge1xuXHR3aGlsZSAoaSA+PSAwICYmIHRoaXMudG9rZW5zW2ldLmNoYW5uZWwgIT09IGNoYW5uZWwpIHtcblx0XHRpIC09IDE7XG5cdH1cblx0cmV0dXJuIGk7XG59O1xuXG4vLyBDb2xsZWN0IGFsbCB0b2tlbnMgb24gc3BlY2lmaWVkIGNoYW5uZWwgdG8gdGhlIHJpZ2h0IG9mXG4vLyB0aGUgY3VycmVudCB0b2tlbiB1cCB1bnRpbCB3ZSBzZWUgYSB0b2tlbiBvbiBERUZBVUxUX1RPS0VOX0NIQU5ORUwgb3Jcbi8vIEVPRi4gSWYgY2hhbm5lbCBpcyAtMSwgZmluZCBhbnkgbm9uIGRlZmF1bHQgY2hhbm5lbCB0b2tlbi5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLmdldEhpZGRlblRva2Vuc1RvUmlnaHQgPSBmdW5jdGlvbih0b2tlbkluZGV4LFxuXHRcdGNoYW5uZWwpIHtcblx0aWYgKGNoYW5uZWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdGNoYW5uZWwgPSAtMTtcblx0fVxuXHR0aGlzLmxhenlJbml0KCk7XG5cdGlmICh0b2tlbkluZGV4IDwgMCB8fCB0b2tlbkluZGV4ID49IHRoaXMudG9rZW5zLmxlbmd0aCkge1xuXHRcdHRocm93IFwiXCIgKyB0b2tlbkluZGV4ICsgXCIgbm90IGluIDAuLlwiICsgdGhpcy50b2tlbnMubGVuZ3RoIC0gMTtcblx0fVxuXHR2YXIgbmV4dE9uQ2hhbm5lbCA9IHRoaXMubmV4dFRva2VuT25DaGFubmVsKHRva2VuSW5kZXggKyAxLCBMZXhlci5ERUZBVUxUX1RPS0VOX0NIQU5ORUwpO1xuXHR2YXIgZnJvbV8gPSB0b2tlbkluZGV4ICsgMTtcblx0Ly8gaWYgbm9uZSBvbmNoYW5uZWwgdG8gcmlnaHQsIG5leHRPbkNoYW5uZWw9LTEgc28gc2V0IHRvID0gbGFzdCB0b2tlblxuXHR2YXIgdG8gPSBuZXh0T25DaGFubmVsID09PSAtMSA/IHRoaXMudG9rZW5zLmxlbmd0aCAtIDEgOiBuZXh0T25DaGFubmVsO1xuXHRyZXR1cm4gdGhpcy5maWx0ZXJGb3JDaGFubmVsKGZyb21fLCB0bywgY2hhbm5lbCk7XG59O1xuXG4vLyBDb2xsZWN0IGFsbCB0b2tlbnMgb24gc3BlY2lmaWVkIGNoYW5uZWwgdG8gdGhlIGxlZnQgb2Zcbi8vIHRoZSBjdXJyZW50IHRva2VuIHVwIHVudGlsIHdlIHNlZSBhIHRva2VuIG9uIERFRkFVTFRfVE9LRU5fQ0hBTk5FTC5cbi8vIElmIGNoYW5uZWwgaXMgLTEsIGZpbmQgYW55IG5vbiBkZWZhdWx0IGNoYW5uZWwgdG9rZW4uXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5nZXRIaWRkZW5Ub2tlbnNUb0xlZnQgPSBmdW5jdGlvbih0b2tlbkluZGV4LFxuXHRcdGNoYW5uZWwpIHtcblx0aWYgKGNoYW5uZWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdGNoYW5uZWwgPSAtMTtcblx0fVxuXHR0aGlzLmxhenlJbml0KCk7XG5cdGlmICh0b2tlbkluZGV4IDwgMCB8fCB0b2tlbkluZGV4ID49IHRoaXMudG9rZW5zLmxlbmd0aCkge1xuXHRcdHRocm93IFwiXCIgKyB0b2tlbkluZGV4ICsgXCIgbm90IGluIDAuLlwiICsgdGhpcy50b2tlbnMubGVuZ3RoIC0gMTtcblx0fVxuXHR2YXIgcHJldk9uQ2hhbm5lbCA9IHRoaXMucHJldmlvdXNUb2tlbk9uQ2hhbm5lbCh0b2tlbkluZGV4IC0gMSwgTGV4ZXIuREVGQVVMVF9UT0tFTl9DSEFOTkVMKTtcblx0aWYgKHByZXZPbkNoYW5uZWwgPT09IHRva2VuSW5kZXggLSAxKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0Ly8gaWYgbm9uZSBvbiBjaGFubmVsIHRvIGxlZnQsIHByZXZPbkNoYW5uZWw9LTEgdGhlbiBmcm9tPTBcblx0dmFyIGZyb21fID0gcHJldk9uQ2hhbm5lbCArIDE7XG5cdHZhciB0byA9IHRva2VuSW5kZXggLSAxO1xuXHRyZXR1cm4gdGhpcy5maWx0ZXJGb3JDaGFubmVsKGZyb21fLCB0bywgY2hhbm5lbCk7XG59O1xuXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5maWx0ZXJGb3JDaGFubmVsID0gZnVuY3Rpb24obGVmdCwgcmlnaHQsIGNoYW5uZWwpIHtcblx0dmFyIGhpZGRlbiA9IFtdO1xuXHRmb3IgKHZhciBpID0gbGVmdDsgaSA8IHJpZ2h0ICsgMTsgaSsrKSB7XG5cdFx0dmFyIHQgPSB0aGlzLnRva2Vuc1tpXTtcblx0XHRpZiAoY2hhbm5lbCA9PT0gLTEpIHtcblx0XHRcdGlmICh0LmNoYW5uZWwgIT09IExleGVyLkRFRkFVTFRfVE9LRU5fQ0hBTk5FTCkge1xuXHRcdFx0XHRoaWRkZW4ucHVzaCh0KTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHQuY2hhbm5lbCA9PT0gY2hhbm5lbCkge1xuXHRcdFx0aGlkZGVuLnB1c2godCk7XG5cdFx0fVxuXHR9XG5cdGlmIChoaWRkZW4ubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0cmV0dXJuIGhpZGRlbjtcbn07XG5cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLmdldFNvdXJjZU5hbWUgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMudG9rZW5Tb3VyY2UuZ2V0U291cmNlTmFtZSgpO1xufTtcblxuLy8gR2V0IHRoZSB0ZXh0IG9mIGFsbCB0b2tlbnMgaW4gdGhpcyBidWZmZXIuLy8vXG5CdWZmZXJlZFRva2VuU3RyZWFtLnByb3RvdHlwZS5nZXRUZXh0ID0gZnVuY3Rpb24oaW50ZXJ2YWwpIHtcblx0dGhpcy5sYXp5SW5pdCgpO1xuXHR0aGlzLmZpbGwoKTtcblx0aWYgKGludGVydmFsID09PSB1bmRlZmluZWQgfHwgaW50ZXJ2YWwgPT09IG51bGwpIHtcblx0XHRpbnRlcnZhbCA9IG5ldyBJbnRlcnZhbCgwLCB0aGlzLnRva2Vucy5sZW5ndGggLSAxKTtcblx0fVxuXHR2YXIgc3RhcnQgPSBpbnRlcnZhbC5zdGFydDtcblx0aWYgKHN0YXJ0IGluc3RhbmNlb2YgVG9rZW4pIHtcblx0XHRzdGFydCA9IHN0YXJ0LnRva2VuSW5kZXg7XG5cdH1cblx0dmFyIHN0b3AgPSBpbnRlcnZhbC5zdG9wO1xuXHRpZiAoc3RvcCBpbnN0YW5jZW9mIFRva2VuKSB7XG5cdFx0c3RvcCA9IHN0b3AudG9rZW5JbmRleDtcblx0fVxuXHRpZiAoc3RhcnQgPT09IG51bGwgfHwgc3RvcCA9PT0gbnVsbCB8fCBzdGFydCA8IDAgfHwgc3RvcCA8IDApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXHRpZiAoc3RvcCA+PSB0aGlzLnRva2Vucy5sZW5ndGgpIHtcblx0XHRzdG9wID0gdGhpcy50b2tlbnMubGVuZ3RoIC0gMTtcblx0fVxuXHR2YXIgcyA9IFwiXCI7XG5cdGZvciAodmFyIGkgPSBzdGFydDsgaSA8IHN0b3AgKyAxOyBpKyspIHtcblx0XHR2YXIgdCA9IHRoaXMudG9rZW5zW2ldO1xuXHRcdGlmICh0LnR5cGUgPT09IFRva2VuLkVPRikge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHRcdHMgPSBzICsgdC50ZXh0O1xuXHR9XG5cdHJldHVybiBzO1xufTtcblxuLy8gR2V0IGFsbCB0b2tlbnMgZnJvbSBsZXhlciB1bnRpbCBFT0YvLy9cbkJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5sYXp5SW5pdCgpO1xuXHR3aGlsZSAodGhpcy5mZXRjaCgxMDAwKSA9PT0gMTAwMCkge1xuXHRcdGNvbnRpbnVlO1xuXHR9XG59O1xuXG5leHBvcnRzLkJ1ZmZlcmVkVG9rZW5TdHJlYW0gPSBCdWZmZXJlZFRva2VuU3RyZWFtO1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vXG5cbnZhciBJbnB1dFN0cmVhbSA9IHJlcXVpcmUoJy4vSW5wdXRTdHJlYW0nKS5JbnB1dFN0cmVhbTtcblxudmFyIGlzTm9kZUpzID0gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGltcG9ydFNjcmlwdHMgPT09ICd1bmRlZmluZWQnO1xudmFyIGZzID0gaXNOb2RlSnMgPyByZXF1aXJlKFwiZnNcIikgOiBudWxsO1xuXG4vLyBVdGlsaXR5IGZ1bmN0aW9ucyB0byBjcmVhdGUgSW5wdXRTdHJlYW1zIGZyb20gdmFyaW91cyBzb3VyY2VzLlxuLy9cbi8vIEFsbCByZXR1cm5lZCBJbnB1dFN0cmVhbXMgc3VwcG9ydCB0aGUgZnVsbCByYW5nZSBvZiBVbmljb2RlXG4vLyB1cCB0byBVKzEwRkZGRiAodGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgSW5wdXRTdHJlYW0gb25seSBzdXBwb3J0c1xuLy8gY29kZSBwb2ludHMgdXAgdG8gVStGRkZGKS5cbnZhciBDaGFyU3RyZWFtcyA9IHtcbiAgLy8gQ3JlYXRlcyBhbiBJbnB1dFN0cmVhbSBmcm9tIGEgc3RyaW5nLlxuICBmcm9tU3RyaW5nOiBmdW5jdGlvbihzdHIpIHtcbiAgICByZXR1cm4gbmV3IElucHV0U3RyZWFtKHN0ciwgdHJ1ZSk7XG4gIH0sXG5cbiAgLy8gQXN5bmNocm9ub3VzbHkgY3JlYXRlcyBhbiBJbnB1dFN0cmVhbSBmcm9tIGEgYmxvYiBnaXZlbiB0aGVcbiAgLy8gZW5jb2Rpbmcgb2YgdGhlIGJ5dGVzIGluIHRoYXQgYmxvYiAoZGVmYXVsdHMgdG8gJ3V0ZjgnIGlmXG4gIC8vIGVuY29kaW5nIGlzIG51bGwpLlxuICAvL1xuICAvLyBJbnZva2VzIG9uTG9hZChyZXN1bHQpIG9uIHN1Y2Nlc3MsIG9uRXJyb3IoZXJyb3IpIG9uXG4gIC8vIGZhaWx1cmUuXG4gIGZyb21CbG9iOiBmdW5jdGlvbihibG9iLCBlbmNvZGluZywgb25Mb2FkLCBvbkVycm9yKSB7XG4gICAgdmFyIHJlYWRlciA9IEZpbGVSZWFkZXIoKTtcbiAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oZSkge1xuICAgICAgdmFyIGlzID0gbmV3IElucHV0U3RyZWFtKGUudGFyZ2V0LnJlc3VsdCwgdHJ1ZSk7XG4gICAgICBvbkxvYWQoaXMpO1xuICAgIH07XG4gICAgcmVhZGVyLm9uZXJyb3IgPSBvbkVycm9yO1xuICAgIHJlYWRlci5yZWFkQXNUZXh0KGJsb2IsIGVuY29kaW5nKTtcbiAgfSxcblxuICAvLyBDcmVhdGVzIGFuIElucHV0U3RyZWFtIGZyb20gYSBCdWZmZXIgZ2l2ZW4gdGhlXG4gIC8vIGVuY29kaW5nIG9mIHRoZSBieXRlcyBpbiB0aGF0IGJ1ZmZlciAoZGVmYXVsdHMgdG8gJ3V0ZjgnIGlmXG4gIC8vIGVuY29kaW5nIGlzIG51bGwpLlxuICBmcm9tQnVmZmVyOiBmdW5jdGlvbihidWZmZXIsIGVuY29kaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBJbnB1dFN0cmVhbShidWZmZXIudG9TdHJpbmcoZW5jb2RpbmcpLCB0cnVlKTtcbiAgfSxcblxuICAvLyBBc3luY2hyb25vdXNseSBjcmVhdGVzIGFuIElucHV0U3RyZWFtIGZyb20gYSBmaWxlIG9uIGRpc2sgZ2l2ZW5cbiAgLy8gdGhlIGVuY29kaW5nIG9mIHRoZSBieXRlcyBpbiB0aGF0IGZpbGUgKGRlZmF1bHRzIHRvICd1dGY4JyBpZlxuICAvLyBlbmNvZGluZyBpcyBudWxsKS5cbiAgLy9cbiAgLy8gSW52b2tlcyBjYWxsYmFjayhlcnJvciwgcmVzdWx0KSBvbiBjb21wbGV0aW9uLlxuICBmcm9tUGF0aDogZnVuY3Rpb24ocGF0aCwgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgZnMucmVhZEZpbGUocGF0aCwgZW5jb2RpbmcsIGZ1bmN0aW9uKGVyciwgZGF0YSkge1xuICAgICAgdmFyIGlzID0gbnVsbDtcbiAgICAgIGlmIChkYXRhICE9PSBudWxsKSB7XG4gICAgICAgIGlzID0gbmV3IElucHV0U3RyZWFtKGRhdGEsIHRydWUpO1xuICAgICAgfVxuICAgICAgY2FsbGJhY2soZXJyLCBpcyk7XG4gICAgfSk7XG4gIH0sXG5cbiAgLy8gU3luY2hyb25vdXNseSBjcmVhdGVzIGFuIElucHV0U3RyZWFtIGdpdmVuIGEgcGF0aCB0byBhIGZpbGVcbiAgLy8gb24gZGlzayBhbmQgdGhlIGVuY29kaW5nIG9mIHRoZSBieXRlcyBpbiB0aGF0IGZpbGUgKGRlZmF1bHRzIHRvXG4gIC8vICd1dGY4JyBpZiBlbmNvZGluZyBpcyBudWxsKS5cbiAgZnJvbVBhdGhTeW5jOiBmdW5jdGlvbihwYXRoLCBlbmNvZGluZykge1xuICAgIHZhciBkYXRhID0gZnMucmVhZEZpbGVTeW5jKHBhdGgsIGVuY29kaW5nKTtcbiAgICByZXR1cm4gbmV3IElucHV0U3RyZWFtKGRhdGEsIHRydWUpO1xuICB9XG59O1xuXG5leHBvcnRzLkNoYXJTdHJlYW1zID0gQ2hhclN0cmVhbXM7XG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cblxuLy9cbi8vIFRoaXMgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgVG9rZW5GYWN0b3J5fSBjcmVhdGVzXG4vLyB7QGxpbmsgQ29tbW9uVG9rZW59IG9iamVjdHMuXG4vL1xuXG52YXIgQ29tbW9uVG9rZW4gPSByZXF1aXJlKCcuL1Rva2VuJykuQ29tbW9uVG9rZW47XG5cbmZ1bmN0aW9uIFRva2VuRmFjdG9yeSgpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIENvbW1vblRva2VuRmFjdG9yeShjb3B5VGV4dCkge1xuXHRUb2tlbkZhY3RvcnkuY2FsbCh0aGlzKTtcbiAgICAvLyBJbmRpY2F0ZXMgd2hldGhlciB7QGxpbmsgQ29tbW9uVG9rZW4vL3NldFRleHR9IHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXJcbiAgICAvLyBjb25zdHJ1Y3RpbmcgdG9rZW5zIHRvIGV4cGxpY2l0bHkgc2V0IHRoZSB0ZXh0LiBUaGlzIGlzIHVzZWZ1bCBmb3IgY2FzZXNcbiAgICAvLyB3aGVyZSB0aGUgaW5wdXQgc3RyZWFtIG1pZ2h0IG5vdCBiZSBhYmxlIHRvIHByb3ZpZGUgYXJiaXRyYXJ5IHN1YnN0cmluZ3NcbiAgICAvLyBvZiB0ZXh0IGZyb20gdGhlIGlucHV0IGFmdGVyIHRoZSBsZXhlciBjcmVhdGVzIGEgdG9rZW4gKGUuZy4gdGhlXG4gICAgLy8gaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIENoYXJTdHJlYW0vL2dldFRleHR9IGluXG4gICAgLy8ge0BsaW5rIFVuYnVmZmVyZWRDaGFyU3RyZWFtfSB0aHJvd3MgYW5cbiAgICAvLyB7QGxpbmsgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb259KS4gRXhwbGljaXRseSBzZXR0aW5nIHRoZSB0b2tlbiB0ZXh0XG4gICAgLy8gYWxsb3dzIHtAbGluayBUb2tlbi8vZ2V0VGV4dH0gdG8gYmUgY2FsbGVkIGF0IGFueSB0aW1lIHJlZ2FyZGxlc3Mgb2YgdGhlXG4gICAgLy8gaW5wdXQgc3RyZWFtIGltcGxlbWVudGF0aW9uLlxuICAgIC8vXG4gICAgLy8gPHA+XG4gICAgLy8gVGhlIGRlZmF1bHQgdmFsdWUgaXMge0Bjb2RlIGZhbHNlfSB0byBhdm9pZCB0aGUgcGVyZm9ybWFuY2UgYW5kIG1lbW9yeVxuICAgIC8vIG92ZXJoZWFkIG9mIGNvcHlpbmcgdGV4dCBmb3IgZXZlcnkgdG9rZW4gdW5sZXNzIGV4cGxpY2l0bHkgcmVxdWVzdGVkLjwvcD5cbiAgICAvL1xuICAgIHRoaXMuY29weVRleHQgPSBjb3B5VGV4dD09PXVuZGVmaW5lZCA/IGZhbHNlIDogY29weVRleHQ7XG5cdHJldHVybiB0aGlzO1xufVxuXG5Db21tb25Ub2tlbkZhY3RvcnkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUb2tlbkZhY3RvcnkucHJvdG90eXBlKTtcbkNvbW1vblRva2VuRmFjdG9yeS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb21tb25Ub2tlbkZhY3Rvcnk7XG5cbi8vXG4vLyBUaGUgZGVmYXVsdCB7QGxpbmsgQ29tbW9uVG9rZW5GYWN0b3J5fSBpbnN0YW5jZS5cbi8vXG4vLyA8cD5cbi8vIFRoaXMgdG9rZW4gZmFjdG9yeSBkb2VzIG5vdCBleHBsaWNpdGx5IGNvcHkgdG9rZW4gdGV4dCB3aGVuIGNvbnN0cnVjdGluZ1xuLy8gdG9rZW5zLjwvcD5cbi8vXG5Db21tb25Ub2tlbkZhY3RvcnkuREVGQVVMVCA9IG5ldyBDb21tb25Ub2tlbkZhY3RvcnkoKTtcblxuQ29tbW9uVG9rZW5GYWN0b3J5LnByb3RvdHlwZS5jcmVhdGUgPSBmdW5jdGlvbihzb3VyY2UsIHR5cGUsIHRleHQsIGNoYW5uZWwsIHN0YXJ0LCBzdG9wLCBsaW5lLCBjb2x1bW4pIHtcbiAgICB2YXIgdCA9IG5ldyBDb21tb25Ub2tlbihzb3VyY2UsIHR5cGUsIGNoYW5uZWwsIHN0YXJ0LCBzdG9wKTtcbiAgICB0LmxpbmUgPSBsaW5lO1xuICAgIHQuY29sdW1uID0gY29sdW1uO1xuICAgIGlmICh0ZXh0ICE9PW51bGwpIHtcbiAgICAgICAgdC50ZXh0ID0gdGV4dDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY29weVRleHQgJiYgc291cmNlWzFdICE9PW51bGwpIHtcbiAgICAgICAgdC50ZXh0ID0gc291cmNlWzFdLmdldFRleHQoc3RhcnQsc3RvcCk7XG4gICAgfVxuICAgIHJldHVybiB0O1xufTtcblxuQ29tbW9uVG9rZW5GYWN0b3J5LnByb3RvdHlwZS5jcmVhdGVUaGluID0gZnVuY3Rpb24odHlwZSwgdGV4dCkge1xuICAgIHZhciB0ID0gbmV3IENvbW1vblRva2VuKG51bGwsIHR5cGUpO1xuICAgIHQudGV4dCA9IHRleHQ7XG4gICAgcmV0dXJuIHQ7XG59O1xuXG5leHBvcnRzLkNvbW1vblRva2VuRmFjdG9yeSA9IENvbW1vblRva2VuRmFjdG9yeTtcbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxuLy9cbi8vIFRoaXMgY2xhc3MgZXh0ZW5kcyB7QGxpbmsgQnVmZmVyZWRUb2tlblN0cmVhbX0gd2l0aCBmdW5jdGlvbmFsaXR5IHRvIGZpbHRlclxuLy8gdG9rZW4gc3RyZWFtcyB0byB0b2tlbnMgb24gYSBwYXJ0aWN1bGFyIGNoYW5uZWwgKHRva2VucyB3aGVyZVxuLy8ge0BsaW5rIFRva2VuLy9nZXRDaGFubmVsfSByZXR1cm5zIGEgcGFydGljdWxhciB2YWx1ZSkuXG4vL1xuLy8gPHA+XG4vLyBUaGlzIHRva2VuIHN0cmVhbSBwcm92aWRlcyBhY2Nlc3MgdG8gYWxsIHRva2VucyBieSBpbmRleCBvciB3aGVuIGNhbGxpbmdcbi8vIG1ldGhvZHMgbGlrZSB7QGxpbmsgLy9nZXRUZXh0fS4gVGhlIGNoYW5uZWwgZmlsdGVyaW5nIGlzIG9ubHkgdXNlZCBmb3IgY29kZVxuLy8gYWNjZXNzaW5nIHRva2VucyB2aWEgdGhlIGxvb2thaGVhZCBtZXRob2RzIHtAbGluayAvL0xBfSwge0BsaW5rIC8vTFR9LCBhbmRcbi8vIHtAbGluayAvL0xCfS48L3A+XG4vL1xuLy8gPHA+XG4vLyBCeSBkZWZhdWx0LCB0b2tlbnMgYXJlIHBsYWNlZCBvbiB0aGUgZGVmYXVsdCBjaGFubmVsXG4vLyAoe0BsaW5rIFRva2VuLy9ERUZBVUxUX0NIQU5ORUx9KSwgYnV0IG1heSBiZSByZWFzc2lnbmVkIGJ5IHVzaW5nIHRoZVxuLy8ge0Bjb2RlIC0+Y2hhbm5lbChISURERU4pfSBsZXhlciBjb21tYW5kLCBvciBieSB1c2luZyBhbiBlbWJlZGRlZCBhY3Rpb24gdG9cbi8vIGNhbGwge0BsaW5rIExleGVyLy9zZXRDaGFubmVsfS5cbi8vIDwvcD5cbi8vXG4vLyA8cD5cbi8vIE5vdGU6IGxleGVyIHJ1bGVzIHdoaWNoIHVzZSB0aGUge0Bjb2RlIC0+c2tpcH0gbGV4ZXIgY29tbWFuZCBvciBjYWxsXG4vLyB7QGxpbmsgTGV4ZXIvL3NraXB9IGRvIG5vdCBwcm9kdWNlIHRva2VucyBhdCBhbGwsIHNvIGlucHV0IHRleHQgbWF0Y2hlZCBieVxuLy8gc3VjaCBhIHJ1bGUgd2lsbCBub3QgYmUgYXZhaWxhYmxlIGFzIHBhcnQgb2YgdGhlIHRva2VuIHN0cmVhbSwgcmVnYXJkbGVzcyBvZlxuLy8gY2hhbm5lbC48L3A+XG4vLy9cblxudmFyIFRva2VuID0gcmVxdWlyZSgnLi9Ub2tlbicpLlRva2VuO1xudmFyIEJ1ZmZlcmVkVG9rZW5TdHJlYW0gPSByZXF1aXJlKCcuL0J1ZmZlcmVkVG9rZW5TdHJlYW0nKS5CdWZmZXJlZFRva2VuU3RyZWFtO1xuXG5mdW5jdGlvbiBDb21tb25Ub2tlblN0cmVhbShsZXhlciwgY2hhbm5lbCkge1xuXHRCdWZmZXJlZFRva2VuU3RyZWFtLmNhbGwodGhpcywgbGV4ZXIpO1xuICAgIHRoaXMuY2hhbm5lbCA9IGNoYW5uZWw9PT11bmRlZmluZWQgPyBUb2tlbi5ERUZBVUxUX0NIQU5ORUwgOiBjaGFubmVsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5Db21tb25Ub2tlblN0cmVhbS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEJ1ZmZlcmVkVG9rZW5TdHJlYW0ucHJvdG90eXBlKTtcbkNvbW1vblRva2VuU3RyZWFtLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbW1vblRva2VuU3RyZWFtO1xuXG5Db21tb25Ub2tlblN0cmVhbS5wcm90b3R5cGUuYWRqdXN0U2Vla0luZGV4ID0gZnVuY3Rpb24oaSkge1xuICAgIHJldHVybiB0aGlzLm5leHRUb2tlbk9uQ2hhbm5lbChpLCB0aGlzLmNoYW5uZWwpO1xufTtcblxuQ29tbW9uVG9rZW5TdHJlYW0ucHJvdG90eXBlLkxCID0gZnVuY3Rpb24oaykge1xuICAgIGlmIChrPT09MCB8fCB0aGlzLmluZGV4LWs8MCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIGkgPSB0aGlzLmluZGV4O1xuICAgIHZhciBuID0gMTtcbiAgICAvLyBmaW5kIGsgZ29vZCB0b2tlbnMgbG9va2luZyBiYWNrd2FyZHNcbiAgICB3aGlsZSAobiA8PSBrKSB7XG4gICAgICAgIC8vIHNraXAgb2ZmLWNoYW5uZWwgdG9rZW5zXG4gICAgICAgIGkgPSB0aGlzLnByZXZpb3VzVG9rZW5PbkNoYW5uZWwoaSAtIDEsIHRoaXMuY2hhbm5lbCk7XG4gICAgICAgIG4gKz0gMTtcbiAgICB9XG4gICAgaWYgKGkgPCAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50b2tlbnNbaV07XG59O1xuXG5Db21tb25Ub2tlblN0cmVhbS5wcm90b3R5cGUuTFQgPSBmdW5jdGlvbihrKSB7XG4gICAgdGhpcy5sYXp5SW5pdCgpO1xuICAgIGlmIChrID09PSAwKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAoayA8IDApIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuTEIoLWspO1xuICAgIH1cbiAgICB2YXIgaSA9IHRoaXMuaW5kZXg7XG4gICAgdmFyIG4gPSAxOyAvLyB3ZSBrbm93IHRva2Vuc1twb3NdIGlzIGEgZ29vZCBvbmVcbiAgICAvLyBmaW5kIGsgZ29vZCB0b2tlbnNcbiAgICB3aGlsZSAobiA8IGspIHtcbiAgICAgICAgLy8gc2tpcCBvZmYtY2hhbm5lbCB0b2tlbnMsIGJ1dCBtYWtlIHN1cmUgdG8gbm90IGxvb2sgcGFzdCBFT0ZcbiAgICAgICAgaWYgKHRoaXMuc3luYyhpICsgMSkpIHtcbiAgICAgICAgICAgIGkgPSB0aGlzLm5leHRUb2tlbk9uQ2hhbm5lbChpICsgMSwgdGhpcy5jaGFubmVsKTtcbiAgICAgICAgfVxuICAgICAgICBuICs9IDE7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRva2Vuc1tpXTtcbn07XG5cbi8vIENvdW50IEVPRiBqdXN0IG9uY2UuLy8vXG5Db21tb25Ub2tlblN0cmVhbS5wcm90b3R5cGUuZ2V0TnVtYmVyT2ZPbkNoYW5uZWxUb2tlbnMgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbiA9IDA7XG4gICAgdGhpcy5maWxsKCk7XG4gICAgZm9yICh2YXIgaSA9MDsgaTwgdGhpcy50b2tlbnMubGVuZ3RoO2krKykge1xuICAgICAgICB2YXIgdCA9IHRoaXMudG9rZW5zW2ldO1xuICAgICAgICBpZiggdC5jaGFubmVsPT09dGhpcy5jaGFubmVsKSB7XG4gICAgICAgICAgICBuICs9IDE7XG4gICAgICAgIH1cbiAgICAgICAgaWYoIHQudHlwZT09PVRva2VuLkVPRikge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG47XG59O1xuXG5leHBvcnRzLkNvbW1vblRva2VuU3RyZWFtID0gQ29tbW9uVG9rZW5TdHJlYW07IiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vXG5cbi8vXG4vLyAgVGhpcyBpcyBhbiBJbnB1dFN0cmVhbSB0aGF0IGlzIGxvYWRlZCBmcm9tIGEgZmlsZSBhbGwgYXQgb25jZVxuLy8gIHdoZW4geW91IGNvbnN0cnVjdCB0aGUgb2JqZWN0LlxuLy9cbnZhciBJbnB1dFN0cmVhbSA9IHJlcXVpcmUoJy4vSW5wdXRTdHJlYW0nKS5JbnB1dFN0cmVhbTtcbnZhciBpc05vZGVKcyA9IHR5cGVvZiB3aW5kb3cgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBpbXBvcnRTY3JpcHRzID09PSAndW5kZWZpbmVkJztcbnZhciBmcyA9IGlzTm9kZUpzID8gcmVxdWlyZShcImZzXCIpIDogbnVsbDtcblxuZnVuY3Rpb24gRmlsZVN0cmVhbShmaWxlTmFtZSwgZGVjb2RlVG9Vbmljb2RlQ29kZVBvaW50cykge1xuXHR2YXIgZGF0YSA9IGZzLnJlYWRGaWxlU3luYyhmaWxlTmFtZSwgXCJ1dGY4XCIpO1xuXHRJbnB1dFN0cmVhbS5jYWxsKHRoaXMsIGRhdGEsIGRlY29kZVRvVW5pY29kZUNvZGVQb2ludHMpO1xuXHR0aGlzLmZpbGVOYW1lID0gZmlsZU5hbWU7XG5cdHJldHVybiB0aGlzO1xufVxuXG5GaWxlU3RyZWFtLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSW5wdXRTdHJlYW0ucHJvdG90eXBlKTtcbkZpbGVTdHJlYW0ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRmlsZVN0cmVhbTtcblxuZXhwb3J0cy5GaWxlU3RyZWFtID0gRmlsZVN0cmVhbTtcbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vL1xuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuL1Rva2VuJykuVG9rZW47XG5yZXF1aXJlKCcuL3BvbHlmaWxscy9jb2RlcG9pbnRhdCcpO1xucmVxdWlyZSgnLi9wb2x5ZmlsbHMvZnJvbWNvZGVwb2ludCcpO1xuXG4vLyBWYWN1dW0gYWxsIGlucHV0IGZyb20gYSBzdHJpbmcgYW5kIHRoZW4gdHJlYXQgaXQgbGlrZSBhIGJ1ZmZlci5cblxuZnVuY3Rpb24gX2xvYWRTdHJpbmcoc3RyZWFtKSB7XG5cdHN0cmVhbS5faW5kZXggPSAwO1xuXHRzdHJlYW0uZGF0YSA9IFtdO1xuXHRpZiAoc3RyZWFtLmRlY29kZVRvVW5pY29kZUNvZGVQb2ludHMpIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN0cmVhbS5zdHJkYXRhLmxlbmd0aDsgKSB7XG5cdFx0XHR2YXIgY29kZVBvaW50ID0gc3RyZWFtLnN0cmRhdGEuY29kZVBvaW50QXQoaSk7XG5cdFx0XHRzdHJlYW0uZGF0YS5wdXNoKGNvZGVQb2ludCk7XG5cdFx0XHRpICs9IGNvZGVQb2ludCA8PSAweEZGRkYgPyAxIDogMjtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzdHJlYW0uc3RyZGF0YS5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGNvZGVVbml0ID0gc3RyZWFtLnN0cmRhdGEuY2hhckNvZGVBdChpKTtcblx0XHRcdHN0cmVhbS5kYXRhLnB1c2goY29kZVVuaXQpO1xuXHRcdH1cblx0fVxuXHRzdHJlYW0uX3NpemUgPSBzdHJlYW0uZGF0YS5sZW5ndGg7XG59XG5cbi8vIElmIGRlY29kZVRvVW5pY29kZUNvZGVQb2ludHMgaXMgdHJ1ZSwgdGhlIGlucHV0IGlzIHRyZWF0ZWRcbi8vIGFzIGEgc2VyaWVzIG9mIFVuaWNvZGUgY29kZSBwb2ludHMuXG4vL1xuLy8gT3RoZXJ3aXNlLCB0aGUgaW5wdXQgaXMgdHJlYXRlZCBhcyBhIHNlcmllcyBvZiAxNi1iaXQgVVRGLTE2IGNvZGVcbi8vIHVuaXRzLlxuZnVuY3Rpb24gSW5wdXRTdHJlYW0oZGF0YSwgZGVjb2RlVG9Vbmljb2RlQ29kZVBvaW50cykge1xuXHR0aGlzLm5hbWUgPSBcIjxlbXB0eT5cIjtcblx0dGhpcy5zdHJkYXRhID0gZGF0YTtcblx0dGhpcy5kZWNvZGVUb1VuaWNvZGVDb2RlUG9pbnRzID0gZGVjb2RlVG9Vbmljb2RlQ29kZVBvaW50cyB8fCBmYWxzZTtcblx0X2xvYWRTdHJpbmcodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoSW5wdXRTdHJlYW0ucHJvdG90eXBlLCBcImluZGV4XCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2luZGV4O1xuXHR9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KElucHV0U3RyZWFtLnByb3RvdHlwZSwgXCJzaXplXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX3NpemU7XG5cdH1cbn0pO1xuXG4vLyBSZXNldCB0aGUgc3RyZWFtIHNvIHRoYXQgaXQncyBpbiB0aGUgc2FtZSBzdGF0ZSBpdCB3YXNcbi8vIHdoZW4gdGhlIG9iamVjdCB3YXMgY3JlYXRlZCAqZXhjZXB0KiB0aGUgZGF0YSBhcnJheSBpcyBub3Rcbi8vIHRvdWNoZWQuXG4vL1xuSW5wdXRTdHJlYW0ucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuX2luZGV4ID0gMDtcbn07XG5cbklucHV0U3RyZWFtLnByb3RvdHlwZS5jb25zdW1lID0gZnVuY3Rpb24oKSB7XG5cdGlmICh0aGlzLl9pbmRleCA+PSB0aGlzLl9zaXplKSB7XG5cdFx0Ly8gYXNzZXJ0IHRoaXMuTEEoMSkgPT0gVG9rZW4uRU9GXG5cdFx0dGhyb3cgKFwiY2Fubm90IGNvbnN1bWUgRU9GXCIpO1xuXHR9XG5cdHRoaXMuX2luZGV4ICs9IDE7XG59O1xuXG5JbnB1dFN0cmVhbS5wcm90b3R5cGUuTEEgPSBmdW5jdGlvbihvZmZzZXQpIHtcblx0aWYgKG9mZnNldCA9PT0gMCkge1xuXHRcdHJldHVybiAwOyAvLyB1bmRlZmluZWRcblx0fVxuXHRpZiAob2Zmc2V0IDwgMCkge1xuXHRcdG9mZnNldCArPSAxOyAvLyBlLmcuLCB0cmFuc2xhdGUgTEEoLTEpIHRvIHVzZSBvZmZzZXQ9MFxuXHR9XG5cdHZhciBwb3MgPSB0aGlzLl9pbmRleCArIG9mZnNldCAtIDE7XG5cdGlmIChwb3MgPCAwIHx8IHBvcyA+PSB0aGlzLl9zaXplKSB7IC8vIGludmFsaWRcblx0XHRyZXR1cm4gVG9rZW4uRU9GO1xuXHR9XG5cdHJldHVybiB0aGlzLmRhdGFbcG9zXTtcbn07XG5cbklucHV0U3RyZWFtLnByb3RvdHlwZS5MVCA9IGZ1bmN0aW9uKG9mZnNldCkge1xuXHRyZXR1cm4gdGhpcy5MQShvZmZzZXQpO1xufTtcblxuLy8gbWFyay9yZWxlYXNlIGRvIG5vdGhpbmc7IHdlIGhhdmUgZW50aXJlIGJ1ZmZlclxuSW5wdXRTdHJlYW0ucHJvdG90eXBlLm1hcmsgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIC0xO1xufTtcblxuSW5wdXRTdHJlYW0ucHJvdG90eXBlLnJlbGVhc2UgPSBmdW5jdGlvbihtYXJrZXIpIHtcbn07XG5cbi8vIGNvbnN1bWUoKSBhaGVhZCB1bnRpbCBwPT1faW5kZXg7IGNhbid0IGp1c3Qgc2V0IHA9X2luZGV4IGFzIHdlIG11c3Rcbi8vIHVwZGF0ZSBsaW5lIGFuZCBjb2x1bW4uIElmIHdlIHNlZWsgYmFja3dhcmRzLCBqdXN0IHNldCBwXG4vL1xuSW5wdXRTdHJlYW0ucHJvdG90eXBlLnNlZWsgPSBmdW5jdGlvbihfaW5kZXgpIHtcblx0aWYgKF9pbmRleCA8PSB0aGlzLl9pbmRleCkge1xuXHRcdHRoaXMuX2luZGV4ID0gX2luZGV4OyAvLyBqdXN0IGp1bXA7IGRvbid0IHVwZGF0ZSBzdHJlYW0gc3RhdGUgKGxpbmUsXG5cdFx0XHRcdFx0XHRcdFx0Ly8gLi4uKVxuXHRcdHJldHVybjtcblx0fVxuXHQvLyBzZWVrIGZvcndhcmRcblx0dGhpcy5faW5kZXggPSBNYXRoLm1pbihfaW5kZXgsIHRoaXMuX3NpemUpO1xufTtcblxuSW5wdXRTdHJlYW0ucHJvdG90eXBlLmdldFRleHQgPSBmdW5jdGlvbihzdGFydCwgc3RvcCkge1xuXHRpZiAoc3RvcCA+PSB0aGlzLl9zaXplKSB7XG5cdFx0c3RvcCA9IHRoaXMuX3NpemUgLSAxO1xuXHR9XG5cdGlmIChzdGFydCA+PSB0aGlzLl9zaXplKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH0gZWxzZSB7XG5cdFx0aWYgKHRoaXMuZGVjb2RlVG9Vbmljb2RlQ29kZVBvaW50cykge1xuXHRcdFx0dmFyIHJlc3VsdCA9IFwiXCI7XG5cdFx0XHRmb3IgKHZhciBpID0gc3RhcnQ7IGkgPD0gc3RvcDsgaSsrKSB7XG5cdFx0XHRcdHJlc3VsdCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludCh0aGlzLmRhdGFbaV0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuc3RyZGF0YS5zbGljZShzdGFydCwgc3RvcCArIDEpO1xuXHRcdH1cblx0fVxufTtcblxuSW5wdXRTdHJlYW0ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnN0cmRhdGE7XG59O1xuXG5leHBvcnRzLklucHV0U3RyZWFtID0gSW5wdXRTdHJlYW07XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbi8qanNsaW50IHNtYXJ0dGFiczp0cnVlICovXG5cbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vVG9rZW4nKS5Ub2tlbjtcblxuLyogc3RvcCBpcyBub3QgaW5jbHVkZWQhICovXG5mdW5jdGlvbiBJbnRlcnZhbChzdGFydCwgc3RvcCkge1xuXHR0aGlzLnN0YXJ0ID0gc3RhcnQ7XG5cdHRoaXMuc3RvcCA9IHN0b3A7XG5cdHJldHVybiB0aGlzO1xufVxuXG5JbnRlcnZhbC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbihpdGVtKSB7XG5cdHJldHVybiBpdGVtID49IHRoaXMuc3RhcnQgJiYgaXRlbSA8IHRoaXMuc3RvcDtcbn07XG5cbkludGVydmFsLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRpZih0aGlzLnN0YXJ0PT09dGhpcy5zdG9wLTEpIHtcblx0XHRyZXR1cm4gdGhpcy5zdGFydC50b1N0cmluZygpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB0aGlzLnN0YXJ0LnRvU3RyaW5nKCkgKyBcIi4uXCIgKyAodGhpcy5zdG9wLTEpLnRvU3RyaW5nKCk7XG5cdH1cbn07XG5cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEludGVydmFsLnByb3RvdHlwZSwgXCJsZW5ndGhcIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5zdG9wIC0gdGhpcy5zdGFydDtcblx0fVxufSk7XG5cbmZ1bmN0aW9uIEludGVydmFsU2V0KCkge1xuXHR0aGlzLmludGVydmFscyA9IG51bGw7XG5cdHRoaXMucmVhZE9ubHkgPSBmYWxzZTtcbn1cblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLmZpcnN0ID0gZnVuY3Rpb24odikge1xuXHRpZiAodGhpcy5pbnRlcnZhbHMgPT09IG51bGwgfHwgdGhpcy5pbnRlcnZhbHMubGVuZ3RoPT09MCkge1xuXHRcdHJldHVybiBUb2tlbi5JTlZBTElEX1RZUEU7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMuaW50ZXJ2YWxzWzBdLnN0YXJ0O1xuXHR9XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuYWRkT25lID0gZnVuY3Rpb24odikge1xuXHR0aGlzLmFkZEludGVydmFsKG5ldyBJbnRlcnZhbCh2LCB2ICsgMSkpO1xufTtcblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLmFkZFJhbmdlID0gZnVuY3Rpb24obCwgaCkge1xuXHR0aGlzLmFkZEludGVydmFsKG5ldyBJbnRlcnZhbChsLCBoICsgMSkpO1xufTtcblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLmFkZEludGVydmFsID0gZnVuY3Rpb24odikge1xuXHRpZiAodGhpcy5pbnRlcnZhbHMgPT09IG51bGwpIHtcblx0XHR0aGlzLmludGVydmFscyA9IFtdO1xuXHRcdHRoaXMuaW50ZXJ2YWxzLnB1c2godik7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZmluZCBpbnNlcnQgcG9zXG5cdFx0Zm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmludGVydmFscy5sZW5ndGg7IGsrKykge1xuXHRcdFx0dmFyIGkgPSB0aGlzLmludGVydmFsc1trXTtcblx0XHRcdC8vIGRpc3RpbmN0IHJhbmdlIC0+IGluc2VydFxuXHRcdFx0aWYgKHYuc3RvcCA8IGkuc3RhcnQpIHtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbHMuc3BsaWNlKGssIDAsIHYpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBjb250aWd1b3VzIHJhbmdlIC0+IGFkanVzdFxuXHRcdFx0ZWxzZSBpZiAodi5zdG9wID09PSBpLnN0YXJ0KSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxzW2tdLnN0YXJ0ID0gdi5zdGFydDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Ly8gb3ZlcmxhcHBpbmcgcmFuZ2UgLT4gYWRqdXN0IGFuZCByZWR1Y2Vcblx0XHRcdGVsc2UgaWYgKHYuc3RhcnQgPD0gaS5zdG9wKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxzW2tdID0gbmV3IEludGVydmFsKE1hdGgubWluKGkuc3RhcnQsIHYuc3RhcnQpLCBNYXRoLm1heChpLnN0b3AsIHYuc3RvcCkpO1xuXHRcdFx0XHR0aGlzLnJlZHVjZShrKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBncmVhdGVyIHRoYW4gYW55IGV4aXN0aW5nXG5cdFx0dGhpcy5pbnRlcnZhbHMucHVzaCh2KTtcblx0fVxufTtcblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLmFkZFNldCA9IGZ1bmN0aW9uKG90aGVyKSB7XG5cdGlmIChvdGhlci5pbnRlcnZhbHMgIT09IG51bGwpIHtcblx0XHRmb3IgKHZhciBrID0gMDsgayA8IG90aGVyLmludGVydmFscy5sZW5ndGg7IGsrKykge1xuXHRcdFx0dmFyIGkgPSBvdGhlci5pbnRlcnZhbHNba107XG5cdFx0XHR0aGlzLmFkZEludGVydmFsKG5ldyBJbnRlcnZhbChpLnN0YXJ0LCBpLnN0b3ApKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUucmVkdWNlID0gZnVuY3Rpb24oaykge1xuXHQvLyBvbmx5IG5lZWQgdG8gcmVkdWNlIGlmIGsgaXMgbm90IHRoZSBsYXN0XG5cdGlmIChrIDwgdGhpcy5pbnRlcnZhbHNsZW5ndGggLSAxKSB7XG5cdFx0dmFyIGwgPSB0aGlzLmludGVydmFsc1trXTtcblx0XHR2YXIgciA9IHRoaXMuaW50ZXJ2YWxzW2sgKyAxXTtcblx0XHQvLyBpZiByIGNvbnRhaW5lZCBpbiBsXG5cdFx0aWYgKGwuc3RvcCA+PSByLnN0b3ApIHtcblx0XHRcdHRoaXMuaW50ZXJ2YWxzLnBvcChrICsgMSk7XG5cdFx0XHR0aGlzLnJlZHVjZShrKTtcblx0XHR9IGVsc2UgaWYgKGwuc3RvcCA+PSByLnN0YXJ0KSB7XG5cdFx0XHR0aGlzLmludGVydmFsc1trXSA9IG5ldyBJbnRlcnZhbChsLnN0YXJ0LCByLnN0b3ApO1xuXHRcdFx0dGhpcy5pbnRlcnZhbHMucG9wKGsgKyAxKTtcblx0XHR9XG5cdH1cbn07XG5cbkludGVydmFsU2V0LnByb3RvdHlwZS5jb21wbGVtZW50ID0gZnVuY3Rpb24oc3RhcnQsIHN0b3ApIHtcbiAgICB2YXIgcmVzdWx0ID0gbmV3IEludGVydmFsU2V0KCk7XG4gICAgcmVzdWx0LmFkZEludGVydmFsKG5ldyBJbnRlcnZhbChzdGFydCxzdG9wKzEpKTtcbiAgICBmb3IodmFyIGk9MDsgaTx0aGlzLmludGVydmFscy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXN1bHQucmVtb3ZlUmFuZ2UodGhpcy5pbnRlcnZhbHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24oaXRlbSkge1xuXHRpZiAodGhpcy5pbnRlcnZhbHMgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0Zm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmludGVydmFscy5sZW5ndGg7IGsrKykge1xuXHRcdFx0aWYodGhpcy5pbnRlcnZhbHNba10uY29udGFpbnMoaXRlbSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEludGVydmFsU2V0LnByb3RvdHlwZSwgXCJsZW5ndGhcIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgbGVuID0gMDtcblx0XHR0aGlzLmludGVydmFscy5tYXAoZnVuY3Rpb24oaSkge2xlbiArPSBpLmxlbmd0aDt9KTtcblx0XHRyZXR1cm4gbGVuO1xuXHR9XG59KTtcblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLnJlbW92ZVJhbmdlID0gZnVuY3Rpb24odikge1xuICAgIGlmKHYuc3RhcnQ9PT12LnN0b3AtMSkge1xuICAgICAgICB0aGlzLnJlbW92ZU9uZSh2LnN0YXJ0KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaW50ZXJ2YWxzIT09bnVsbCkge1xuICAgICAgICB2YXIgayA9IDA7XG4gICAgICAgIGZvcih2YXIgbj0wOyBuPHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgbisrKSB7XG4gICAgICAgICAgICB2YXIgaSA9IHRoaXMuaW50ZXJ2YWxzW2tdO1xuICAgICAgICAgICAgLy8gaW50ZXJ2YWxzIGFyZSBvcmRlcmVkXG4gICAgICAgICAgICBpZiAodi5zdG9wPD1pLnN0YXJ0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIGluY2x1ZGluZyByYW5nZSwgc3BsaXQgaXRcbiAgICAgICAgICAgIGVsc2UgaWYodi5zdGFydD5pLnN0YXJ0ICYmIHYuc3RvcDxpLnN0b3ApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmludGVydmFsc1trXSA9IG5ldyBJbnRlcnZhbChpLnN0YXJ0LCB2LnN0YXJ0KTtcbiAgICAgICAgICAgICAgICB2YXIgeCA9IG5ldyBJbnRlcnZhbCh2LnN0b3AsIGkuc3RvcCk7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcnZhbHMuc3BsaWNlKGssIDAsIHgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNoZWNrIGZvciBpbmNsdWRlZCByYW5nZSwgcmVtb3ZlIGl0XG4gICAgICAgICAgICBlbHNlIGlmKHYuc3RhcnQ8PWkuc3RhcnQgJiYgdi5zdG9wPj1pLnN0b3ApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmludGVydmFscy5zcGxpY2UoaywgMSk7XG4gICAgICAgICAgICAgICAgayA9IGsgLSAxOyAvLyBuZWVkIGFub3RoZXIgcGFzc1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY2hlY2sgZm9yIGxvd2VyIGJvdW5kYXJ5XG4gICAgICAgICAgICBlbHNlIGlmKHYuc3RhcnQ8aS5zdG9wKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcnZhbHNba10gPSBuZXcgSW50ZXJ2YWwoaS5zdGFydCwgdi5zdGFydCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjaGVjayBmb3IgdXBwZXIgYm91bmRhcnlcbiAgICAgICAgICAgIGVsc2UgaWYodi5zdG9wPGkuc3RvcCkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWxzW2tdID0gbmV3IEludGVydmFsKHYuc3RvcCwgaS5zdG9wKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGsgKz0gMTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbkludGVydmFsU2V0LnByb3RvdHlwZS5yZW1vdmVPbmUgPSBmdW5jdGlvbih2KSB7XG5cdGlmICh0aGlzLmludGVydmFscyAhPT0gbnVsbCkge1xuXHRcdGZvciAodmFyIGsgPSAwOyBrIDwgdGhpcy5pbnRlcnZhbHMubGVuZ3RoOyBrKyspIHtcblx0XHRcdHZhciBpID0gdGhpcy5pbnRlcnZhbHNba107XG5cdFx0XHQvLyBpbnRlcnZhbHMgaXMgb3JkZXJlZFxuXHRcdFx0aWYgKHYgPCBpLnN0YXJ0KSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIGNoZWNrIGZvciBzaW5nbGUgdmFsdWUgcmFuZ2Vcblx0XHRcdGVsc2UgaWYgKHYgPT09IGkuc3RhcnQgJiYgdiA9PT0gaS5zdG9wIC0gMSkge1xuXHRcdFx0XHR0aGlzLmludGVydmFscy5zcGxpY2UoaywgMSk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdC8vIGNoZWNrIGZvciBsb3dlciBib3VuZGFyeVxuXHRcdFx0ZWxzZSBpZiAodiA9PT0gaS5zdGFydCkge1xuXHRcdFx0XHR0aGlzLmludGVydmFsc1trXSA9IG5ldyBJbnRlcnZhbChpLnN0YXJ0ICsgMSwgaS5zdG9wKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdFx0Ly8gY2hlY2sgZm9yIHVwcGVyIGJvdW5kYXJ5XG5cdFx0XHRlbHNlIGlmICh2ID09PSBpLnN0b3AgLSAxKSB7XG5cdFx0XHRcdHRoaXMuaW50ZXJ2YWxzW2tdID0gbmV3IEludGVydmFsKGkuc3RhcnQsIGkuc3RvcCAtIDEpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHQvLyBzcGxpdCBleGlzdGluZyByYW5nZVxuXHRcdFx0ZWxzZSBpZiAodiA8IGkuc3RvcCAtIDEpIHtcblx0XHRcdFx0dmFyIHggPSBuZXcgSW50ZXJ2YWwoaS5zdGFydCwgdik7XG5cdFx0XHRcdGkuc3RhcnQgPSB2ICsgMTtcblx0XHRcdFx0dGhpcy5pbnRlcnZhbHMuc3BsaWNlKGssIDAsIHgpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbihsaXRlcmFsTmFtZXMsIHN5bWJvbGljTmFtZXMsIGVsZW1zQXJlQ2hhcikge1xuXHRsaXRlcmFsTmFtZXMgPSBsaXRlcmFsTmFtZXMgfHwgbnVsbDtcblx0c3ltYm9saWNOYW1lcyA9IHN5bWJvbGljTmFtZXMgfHwgbnVsbDtcblx0ZWxlbXNBcmVDaGFyID0gZWxlbXNBcmVDaGFyIHx8IGZhbHNlO1xuXHRpZiAodGhpcy5pbnRlcnZhbHMgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gXCJ7fVwiO1xuXHR9IGVsc2UgaWYobGl0ZXJhbE5hbWVzIT09bnVsbCB8fCBzeW1ib2xpY05hbWVzIT09bnVsbCkge1xuXHRcdHJldHVybiB0aGlzLnRvVG9rZW5TdHJpbmcobGl0ZXJhbE5hbWVzLCBzeW1ib2xpY05hbWVzKTtcblx0fSBlbHNlIGlmKGVsZW1zQXJlQ2hhcikge1xuXHRcdHJldHVybiB0aGlzLnRvQ2hhclN0cmluZygpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB0aGlzLnRvSW5kZXhTdHJpbmcoKTtcblx0fVxufTtcblxuSW50ZXJ2YWxTZXQucHJvdG90eXBlLnRvQ2hhclN0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgbmFtZXMgPSBbXTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmludGVydmFscy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciB2ID0gdGhpcy5pbnRlcnZhbHNbaV07XG5cdFx0aWYodi5zdG9wPT09di5zdGFydCsxKSB7XG5cdFx0XHRpZiAoIHYuc3RhcnQ9PT1Ub2tlbi5FT0YgKSB7XG5cdFx0XHRcdG5hbWVzLnB1c2goXCI8RU9GPlwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG5hbWVzLnB1c2goXCInXCIgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKHYuc3RhcnQpICsgXCInXCIpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRuYW1lcy5wdXNoKFwiJ1wiICsgU3RyaW5nLmZyb21DaGFyQ29kZSh2LnN0YXJ0KSArIFwiJy4uJ1wiICsgU3RyaW5nLmZyb21DaGFyQ29kZSh2LnN0b3AtMSkgKyBcIidcIik7XG5cdFx0fVxuXHR9XG5cdGlmIChuYW1lcy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIFwie1wiICsgbmFtZXMuam9pbihcIiwgXCIpICsgXCJ9XCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG5hbWVzWzBdO1xuXHR9XG59O1xuXG5cbkludGVydmFsU2V0LnByb3RvdHlwZS50b0luZGV4U3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHZhciBuYW1lcyA9IFtdO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIHYgPSB0aGlzLmludGVydmFsc1tpXTtcblx0XHRpZih2LnN0b3A9PT12LnN0YXJ0KzEpIHtcblx0XHRcdGlmICggdi5zdGFydD09PVRva2VuLkVPRiApIHtcblx0XHRcdFx0bmFtZXMucHVzaChcIjxFT0Y+XCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bmFtZXMucHVzaCh2LnN0YXJ0LnRvU3RyaW5nKCkpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRuYW1lcy5wdXNoKHYuc3RhcnQudG9TdHJpbmcoKSArIFwiLi5cIiArICh2LnN0b3AtMSkudG9TdHJpbmcoKSk7XG5cdFx0fVxuXHR9XG5cdGlmIChuYW1lcy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIFwie1wiICsgbmFtZXMuam9pbihcIiwgXCIpICsgXCJ9XCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG5hbWVzWzBdO1xuXHR9XG59O1xuXG5cbkludGVydmFsU2V0LnByb3RvdHlwZS50b1Rva2VuU3RyaW5nID0gZnVuY3Rpb24obGl0ZXJhbE5hbWVzLCBzeW1ib2xpY05hbWVzKSB7XG5cdHZhciBuYW1lcyA9IFtdO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW50ZXJ2YWxzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIHYgPSB0aGlzLmludGVydmFsc1tpXTtcblx0XHRmb3IgKHZhciBqID0gdi5zdGFydDsgaiA8IHYuc3RvcDsgaisrKSB7XG5cdFx0XHRuYW1lcy5wdXNoKHRoaXMuZWxlbWVudE5hbWUobGl0ZXJhbE5hbWVzLCBzeW1ib2xpY05hbWVzLCBqKSk7XG5cdFx0fVxuXHR9XG5cdGlmIChuYW1lcy5sZW5ndGggPiAxKSB7XG5cdFx0cmV0dXJuIFwie1wiICsgbmFtZXMuam9pbihcIiwgXCIpICsgXCJ9XCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG5hbWVzWzBdO1xuXHR9XG59O1xuXG5JbnRlcnZhbFNldC5wcm90b3R5cGUuZWxlbWVudE5hbWUgPSBmdW5jdGlvbihsaXRlcmFsTmFtZXMsIHN5bWJvbGljTmFtZXMsIGEpIHtcblx0aWYgKGEgPT09IFRva2VuLkVPRikge1xuXHRcdHJldHVybiBcIjxFT0Y+XCI7XG5cdH0gZWxzZSBpZiAoYSA9PT0gVG9rZW4uRVBTSUxPTikge1xuXHRcdHJldHVybiBcIjxFUFNJTE9OPlwiO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBsaXRlcmFsTmFtZXNbYV0gfHwgc3ltYm9saWNOYW1lc1thXTtcblx0fVxufTtcblxuZXhwb3J0cy5JbnRlcnZhbCA9IEludGVydmFsO1xuZXhwb3J0cy5JbnRlcnZhbFNldCA9IEludGVydmFsU2V0O1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vL1xuXG52YXIgU2V0ID0gcmVxdWlyZSgnLi9VdGlscycpLlNldDtcbnZhciBCaXRTZXQgPSByZXF1aXJlKCcuL1V0aWxzJykuQml0U2V0O1xudmFyIFRva2VuID0gcmVxdWlyZSgnLi9Ub2tlbicpLlRva2VuO1xudmFyIEFUTkNvbmZpZyA9IHJlcXVpcmUoJy4vYXRuL0FUTkNvbmZpZycpLkFUTkNvbmZpZztcbnZhciBJbnRlcnZhbCA9IHJlcXVpcmUoJy4vSW50ZXJ2YWxTZXQnKS5JbnRlcnZhbDtcbnZhciBJbnRlcnZhbFNldCA9IHJlcXVpcmUoJy4vSW50ZXJ2YWxTZXQnKS5JbnRlcnZhbFNldDtcbnZhciBSdWxlU3RvcFN0YXRlID0gcmVxdWlyZSgnLi9hdG4vQVROU3RhdGUnKS5SdWxlU3RvcFN0YXRlO1xudmFyIFJ1bGVUcmFuc2l0aW9uID0gcmVxdWlyZSgnLi9hdG4vVHJhbnNpdGlvbicpLlJ1bGVUcmFuc2l0aW9uO1xudmFyIE5vdFNldFRyYW5zaXRpb24gPSByZXF1aXJlKCcuL2F0bi9UcmFuc2l0aW9uJykuTm90U2V0VHJhbnNpdGlvbjtcbnZhciBXaWxkY2FyZFRyYW5zaXRpb24gPSByZXF1aXJlKCcuL2F0bi9UcmFuc2l0aW9uJykuV2lsZGNhcmRUcmFuc2l0aW9uO1xudmFyIEFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbiA9IHJlcXVpcmUoJy4vYXRuL1RyYW5zaXRpb24nKS5BYnN0cmFjdFByZWRpY2F0ZVRyYW5zaXRpb247XG5cbnZhciBwYyA9IHJlcXVpcmUoJy4vUHJlZGljdGlvbkNvbnRleHQnKTtcbnZhciBwcmVkaWN0aW9uQ29udGV4dEZyb21SdWxlQ29udGV4dCA9IHBjLnByZWRpY3Rpb25Db250ZXh0RnJvbVJ1bGVDb250ZXh0O1xudmFyIFByZWRpY3Rpb25Db250ZXh0ID0gcGMuUHJlZGljdGlvbkNvbnRleHQ7XG52YXIgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQgPSBwYy5TaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dDtcblxuZnVuY3Rpb24gTEwxQW5hbHl6ZXIgKGF0bikge1xuICAgIHRoaXMuYXRuID0gYXRuO1xufVxuXG4vLyogU3BlY2lhbCB2YWx1ZSBhZGRlZCB0byB0aGUgbG9va2FoZWFkIHNldHMgdG8gaW5kaWNhdGUgdGhhdCB3ZSBoaXRcbi8vICBhIHByZWRpY2F0ZSBkdXJpbmcgYW5hbHlzaXMgaWYge0Bjb2RlIHNlZVRocnVQcmVkcz09ZmFsc2V9LlxuLy8vXG5MTDFBbmFseXplci5ISVRfUFJFRCA9IFRva2VuLklOVkFMSURfVFlQRTtcblxuXG4vLypcbi8vIENhbGN1bGF0ZXMgdGhlIFNMTCgxKSBleHBlY3RlZCBsb29rYWhlYWQgc2V0IGZvciBlYWNoIG91dGdvaW5nIHRyYW5zaXRpb25cbi8vIG9mIGFuIHtAbGluayBBVE5TdGF0ZX0uIFRoZSByZXR1cm5lZCBhcnJheSBoYXMgb25lIGVsZW1lbnQgZm9yIGVhY2hcbi8vIG91dGdvaW5nIHRyYW5zaXRpb24gaW4ge0Bjb2RlIHN9LiBJZiB0aGUgY2xvc3VyZSBmcm9tIHRyYW5zaXRpb25cbi8vIDxlbT5pPC9lbT4gbGVhZHMgdG8gYSBzZW1hbnRpYyBwcmVkaWNhdGUgYmVmb3JlIG1hdGNoaW5nIGEgc3ltYm9sLCB0aGVcbi8vIGVsZW1lbnQgYXQgaW5kZXggPGVtPmk8L2VtPiBvZiB0aGUgcmVzdWx0IHdpbGwgYmUge0Bjb2RlIG51bGx9LlxuLy9cbi8vIEBwYXJhbSBzIHRoZSBBVE4gc3RhdGVcbi8vIEByZXR1cm4gdGhlIGV4cGVjdGVkIHN5bWJvbHMgZm9yIGVhY2ggb3V0Z29pbmcgdHJhbnNpdGlvbiBvZiB7QGNvZGUgc30uXG4vLy9cbkxMMUFuYWx5emVyLnByb3RvdHlwZS5nZXREZWNpc2lvbkxvb2thaGVhZCA9IGZ1bmN0aW9uKHMpIHtcbiAgICBpZiAocyA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFyIGNvdW50ID0gcy50cmFuc2l0aW9ucy5sZW5ndGg7XG4gICAgdmFyIGxvb2sgPSBbXTtcbiAgICBmb3IodmFyIGFsdD0wOyBhbHQ8IGNvdW50OyBhbHQrKykge1xuICAgICAgICBsb29rW2FsdF0gPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICAgICAgdmFyIGxvb2tCdXN5ID0gbmV3IFNldCgpO1xuICAgICAgICB2YXIgc2VlVGhydVByZWRzID0gZmFsc2U7IC8vIGZhaWwgdG8gZ2V0IGxvb2thaGVhZCB1cG9uIHByZWRcbiAgICAgICAgdGhpcy5fTE9PSyhzLnRyYW5zaXRpb24oYWx0KS50YXJnZXQsIG51bGwsIFByZWRpY3Rpb25Db250ZXh0LkVNUFRZLFxuICAgICAgICAgICAgICBsb29rW2FsdF0sIGxvb2tCdXN5LCBuZXcgQml0U2V0KCksIHNlZVRocnVQcmVkcywgZmFsc2UpO1xuICAgICAgICAvLyBXaXBlIG91dCBsb29rYWhlYWQgZm9yIHRoaXMgYWx0ZXJuYXRpdmUgaWYgd2UgZm91bmQgbm90aGluZ1xuICAgICAgICAvLyBvciB3ZSBoYWQgYSBwcmVkaWNhdGUgd2hlbiB3ZSAhc2VlVGhydVByZWRzXG4gICAgICAgIGlmIChsb29rW2FsdF0ubGVuZ3RoPT09MCB8fCBsb29rW2FsdF0uY29udGFpbnMoTEwxQW5hbHl6ZXIuSElUX1BSRUQpKSB7XG4gICAgICAgICAgICBsb29rW2FsdF0gPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsb29rO1xufTtcblxuLy8qXG4vLyBDb21wdXRlIHNldCBvZiB0b2tlbnMgdGhhdCBjYW4gZm9sbG93IHtAY29kZSBzfSBpbiB0aGUgQVROIGluIHRoZVxuLy8gc3BlY2lmaWVkIHtAY29kZSBjdHh9LlxuLy9cbi8vIDxwPklmIHtAY29kZSBjdHh9IGlzIHtAY29kZSBudWxsfSBhbmQgdGhlIGVuZCBvZiB0aGUgcnVsZSBjb250YWluaW5nXG4vLyB7QGNvZGUgc30gaXMgcmVhY2hlZCwge0BsaW5rIFRva2VuLy9FUFNJTE9OfSBpcyBhZGRlZCB0byB0aGUgcmVzdWx0IHNldC5cbi8vIElmIHtAY29kZSBjdHh9IGlzIG5vdCB7QGNvZGUgbnVsbH0gYW5kIHRoZSBlbmQgb2YgdGhlIG91dGVybW9zdCBydWxlIGlzXG4vLyByZWFjaGVkLCB7QGxpbmsgVG9rZW4vL0VPRn0gaXMgYWRkZWQgdG8gdGhlIHJlc3VsdCBzZXQuPC9wPlxuLy9cbi8vIEBwYXJhbSBzIHRoZSBBVE4gc3RhdGVcbi8vIEBwYXJhbSBzdG9wU3RhdGUgdGhlIEFUTiBzdGF0ZSB0byBzdG9wIGF0LiBUaGlzIGNhbiBiZSBhXG4vLyB7QGxpbmsgQmxvY2tFbmRTdGF0ZX0gdG8gZGV0ZWN0IGVwc2lsb24gcGF0aHMgdGhyb3VnaCBhIGNsb3N1cmUuXG4vLyBAcGFyYW0gY3R4IHRoZSBjb21wbGV0ZSBwYXJzZXIgY29udGV4dCwgb3Ige0Bjb2RlIG51bGx9IGlmIHRoZSBjb250ZXh0XG4vLyBzaG91bGQgYmUgaWdub3JlZFxuLy9cbi8vIEByZXR1cm4gVGhlIHNldCBvZiB0b2tlbnMgdGhhdCBjYW4gZm9sbG93IHtAY29kZSBzfSBpbiB0aGUgQVROIGluIHRoZVxuLy8gc3BlY2lmaWVkIHtAY29kZSBjdHh9LlxuLy8vXG5MTDFBbmFseXplci5wcm90b3R5cGUuTE9PSyA9IGZ1bmN0aW9uKHMsIHN0b3BTdGF0ZSwgY3R4KSB7XG4gICAgdmFyIHIgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICB2YXIgc2VlVGhydVByZWRzID0gdHJ1ZTsgLy8gaWdub3JlIHByZWRzOyBnZXQgYWxsIGxvb2thaGVhZFxuXHRjdHggPSBjdHggfHwgbnVsbDtcbiAgICB2YXIgbG9va0NvbnRleHQgPSBjdHghPT1udWxsID8gcHJlZGljdGlvbkNvbnRleHRGcm9tUnVsZUNvbnRleHQocy5hdG4sIGN0eCkgOiBudWxsO1xuICAgIHRoaXMuX0xPT0socywgc3RvcFN0YXRlLCBsb29rQ29udGV4dCwgciwgbmV3IFNldCgpLCBuZXcgQml0U2V0KCksIHNlZVRocnVQcmVkcywgdHJ1ZSk7XG4gICAgcmV0dXJuIHI7XG59O1xuXG4vLypcbi8vIENvbXB1dGUgc2V0IG9mIHRva2VucyB0aGF0IGNhbiBmb2xsb3cge0Bjb2RlIHN9IGluIHRoZSBBVE4gaW4gdGhlXG4vLyBzcGVjaWZpZWQge0Bjb2RlIGN0eH0uXG4vL1xuLy8gPHA+SWYge0Bjb2RlIGN0eH0gaXMge0Bjb2RlIG51bGx9IGFuZCB7QGNvZGUgc3RvcFN0YXRlfSBvciB0aGUgZW5kIG9mIHRoZVxuLy8gcnVsZSBjb250YWluaW5nIHtAY29kZSBzfSBpcyByZWFjaGVkLCB7QGxpbmsgVG9rZW4vL0VQU0lMT059IGlzIGFkZGVkIHRvXG4vLyB0aGUgcmVzdWx0IHNldC4gSWYge0Bjb2RlIGN0eH0gaXMgbm90IHtAY29kZSBudWxsfSBhbmQge0Bjb2RlIGFkZEVPRn0gaXNcbi8vIHtAY29kZSB0cnVlfSBhbmQge0Bjb2RlIHN0b3BTdGF0ZX0gb3IgdGhlIGVuZCBvZiB0aGUgb3V0ZXJtb3N0IHJ1bGUgaXNcbi8vIHJlYWNoZWQsIHtAbGluayBUb2tlbi8vRU9GfSBpcyBhZGRlZCB0byB0aGUgcmVzdWx0IHNldC48L3A+XG4vL1xuLy8gQHBhcmFtIHMgdGhlIEFUTiBzdGF0ZS5cbi8vIEBwYXJhbSBzdG9wU3RhdGUgdGhlIEFUTiBzdGF0ZSB0byBzdG9wIGF0LiBUaGlzIGNhbiBiZSBhXG4vLyB7QGxpbmsgQmxvY2tFbmRTdGF0ZX0gdG8gZGV0ZWN0IGVwc2lsb24gcGF0aHMgdGhyb3VnaCBhIGNsb3N1cmUuXG4vLyBAcGFyYW0gY3R4IFRoZSBvdXRlciBjb250ZXh0LCBvciB7QGNvZGUgbnVsbH0gaWYgdGhlIG91dGVyIGNvbnRleHQgc2hvdWxkXG4vLyBub3QgYmUgdXNlZC5cbi8vIEBwYXJhbSBsb29rIFRoZSByZXN1bHQgbG9va2FoZWFkIHNldC5cbi8vIEBwYXJhbSBsb29rQnVzeSBBIHNldCB1c2VkIGZvciBwcmV2ZW50aW5nIGVwc2lsb24gY2xvc3VyZXMgaW4gdGhlIEFUTlxuLy8gZnJvbSBjYXVzaW5nIGEgc3RhY2sgb3ZlcmZsb3cuIE91dHNpZGUgY29kZSBzaG91bGQgcGFzc1xuLy8ge0Bjb2RlIG5ldyBTZXQ8QVROQ29uZmlnPn0gZm9yIHRoaXMgYXJndW1lbnQuXG4vLyBAcGFyYW0gY2FsbGVkUnVsZVN0YWNrIEEgc2V0IHVzZWQgZm9yIHByZXZlbnRpbmcgbGVmdCByZWN1cnNpb24gaW4gdGhlXG4vLyBBVE4gZnJvbSBjYXVzaW5nIGEgc3RhY2sgb3ZlcmZsb3cuIE91dHNpZGUgY29kZSBzaG91bGQgcGFzc1xuLy8ge0Bjb2RlIG5ldyBCaXRTZXQoKX0gZm9yIHRoaXMgYXJndW1lbnQuXG4vLyBAcGFyYW0gc2VlVGhydVByZWRzIHtAY29kZSB0cnVlfSB0byB0cnVlIHNlbWFudGljIHByZWRpY2F0ZXMgYXNcbi8vIGltcGxpY2l0bHkge0Bjb2RlIHRydWV9IGFuZCBcInNlZSB0aHJvdWdoIHRoZW1cIiwgb3RoZXJ3aXNlIHtAY29kZSBmYWxzZX1cbi8vIHRvIHRyZWF0IHNlbWFudGljIHByZWRpY2F0ZXMgYXMgb3BhcXVlIGFuZCBhZGQge0BsaW5rIC8vSElUX1BSRUR9IHRvIHRoZVxuLy8gcmVzdWx0IGlmIG9uZSBpcyBlbmNvdW50ZXJlZC5cbi8vIEBwYXJhbSBhZGRFT0YgQWRkIHtAbGluayBUb2tlbi8vRU9GfSB0byB0aGUgcmVzdWx0IGlmIHRoZSBlbmQgb2YgdGhlXG4vLyBvdXRlcm1vc3QgY29udGV4dCBpcyByZWFjaGVkLiBUaGlzIHBhcmFtZXRlciBoYXMgbm8gZWZmZWN0IGlmIHtAY29kZSBjdHh9XG4vLyBpcyB7QGNvZGUgbnVsbH0uXG4vLy9cbkxMMUFuYWx5emVyLnByb3RvdHlwZS5fTE9PSyA9IGZ1bmN0aW9uKHMsIHN0b3BTdGF0ZSAsIGN0eCwgbG9vaywgbG9va0J1c3ksIGNhbGxlZFJ1bGVTdGFjaywgc2VlVGhydVByZWRzLCBhZGRFT0YpIHtcbiAgICB2YXIgYyA9IG5ldyBBVE5Db25maWcoe3N0YXRlOnMsIGFsdDowLCBjb250ZXh0OiBjdHh9LCBudWxsKTtcbiAgICBpZiAobG9va0J1c3kuY29udGFpbnMoYykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsb29rQnVzeS5hZGQoYyk7XG4gICAgaWYgKHMgPT09IHN0b3BTdGF0ZSkge1xuICAgICAgICBpZiAoY3R4ID09PW51bGwpIHtcbiAgICAgICAgICAgIGxvb2suYWRkT25lKFRva2VuLkVQU0lMT04pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2UgaWYgKGN0eC5pc0VtcHR5KCkgJiYgYWRkRU9GKSB7XG4gICAgICAgICAgICBsb29rLmFkZE9uZShUb2tlbi5FT0YpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChzIGluc3RhbmNlb2YgUnVsZVN0b3BTdGF0ZSApIHtcbiAgICAgICAgaWYgKGN0eCA9PT1udWxsKSB7XG4gICAgICAgICAgICBsb29rLmFkZE9uZShUb2tlbi5FUFNJTE9OKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmIChjdHguaXNFbXB0eSgpICYmIGFkZEVPRikge1xuICAgICAgICAgICAgbG9vay5hZGRPbmUoVG9rZW4uRU9GKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3R4ICE9PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWSkge1xuICAgICAgICAgICAgLy8gcnVuIHRocnUgYWxsIHBvc3NpYmxlIHN0YWNrIHRvcHMgaW4gY3R4XG4gICAgICAgICAgICBmb3IodmFyIGk9MDsgaTxjdHgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgcmV0dXJuU3RhdGUgPSB0aGlzLmF0bi5zdGF0ZXNbY3R4LmdldFJldHVyblN0YXRlKGkpXTtcbiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IGNhbGxlZFJ1bGVTdGFjay5jb250YWlucyhyZXR1cm5TdGF0ZS5ydWxlSW5kZXgpO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxlZFJ1bGVTdGFjay5yZW1vdmUocmV0dXJuU3RhdGUucnVsZUluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fTE9PSyhyZXR1cm5TdGF0ZSwgc3RvcFN0YXRlLCBjdHguZ2V0UGFyZW50KGkpLCBsb29rLCBsb29rQnVzeSwgY2FsbGVkUnVsZVN0YWNrLCBzZWVUaHJ1UHJlZHMsIGFkZEVPRik7XG4gICAgICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlbW92ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxlZFJ1bGVTdGFjay5hZGQocmV0dXJuU3RhdGUucnVsZUluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IodmFyIGo9MDsgajxzLnRyYW5zaXRpb25zLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHZhciB0ID0gcy50cmFuc2l0aW9uc1tqXTtcbiAgICAgICAgaWYgKHQuY29uc3RydWN0b3IgPT09IFJ1bGVUcmFuc2l0aW9uKSB7XG4gICAgICAgICAgICBpZiAoY2FsbGVkUnVsZVN0YWNrLmNvbnRhaW5zKHQudGFyZ2V0LnJ1bGVJbmRleCkpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBuZXdDb250ZXh0ID0gU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQuY3JlYXRlKGN0eCwgdC5mb2xsb3dTdGF0ZS5zdGF0ZU51bWJlcik7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGNhbGxlZFJ1bGVTdGFjay5hZGQodC50YXJnZXQucnVsZUluZGV4KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9MT09LKHQudGFyZ2V0LCBzdG9wU3RhdGUsIG5ld0NvbnRleHQsIGxvb2ssIGxvb2tCdXN5LCBjYWxsZWRSdWxlU3RhY2ssIHNlZVRocnVQcmVkcywgYWRkRU9GKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgY2FsbGVkUnVsZVN0YWNrLnJlbW92ZSh0LnRhcmdldC5ydWxlSW5kZXgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHQgaW5zdGFuY2VvZiBBYnN0cmFjdFByZWRpY2F0ZVRyYW5zaXRpb24gKSB7XG4gICAgICAgICAgICBpZiAoc2VlVGhydVByZWRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fTE9PSyh0LnRhcmdldCwgc3RvcFN0YXRlLCBjdHgsIGxvb2ssIGxvb2tCdXN5LCBjYWxsZWRSdWxlU3RhY2ssIHNlZVRocnVQcmVkcywgYWRkRU9GKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbG9vay5hZGRPbmUoTEwxQW5hbHl6ZXIuSElUX1BSRUQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYoIHQuaXNFcHNpbG9uKSB7XG4gICAgICAgICAgICB0aGlzLl9MT09LKHQudGFyZ2V0LCBzdG9wU3RhdGUsIGN0eCwgbG9vaywgbG9va0J1c3ksIGNhbGxlZFJ1bGVTdGFjaywgc2VlVGhydVByZWRzLCBhZGRFT0YpO1xuICAgICAgICB9IGVsc2UgaWYgKHQuY29uc3RydWN0b3IgPT09IFdpbGRjYXJkVHJhbnNpdGlvbikge1xuICAgICAgICAgICAgbG9vay5hZGRSYW5nZSggVG9rZW4uTUlOX1VTRVJfVE9LRU5fVFlQRSwgdGhpcy5hdG4ubWF4VG9rZW5UeXBlICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgc2V0ID0gdC5sYWJlbDtcbiAgICAgICAgICAgIGlmIChzZXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAodCBpbnN0YW5jZW9mIE5vdFNldFRyYW5zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0ID0gc2V0LmNvbXBsZW1lbnQoVG9rZW4uTUlOX1VTRVJfVE9LRU5fVFlQRSwgdGhpcy5hdG4ubWF4VG9rZW5UeXBlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbG9vay5hZGRTZXQoc2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmV4cG9ydHMuTEwxQW5hbHl6ZXIgPSBMTDFBbmFseXplcjtcblxuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy8vXG5cbi8vIEEgbGV4ZXIgaXMgcmVjb2duaXplciB0aGF0IGRyYXdzIGlucHV0IHN5bWJvbHMgZnJvbSBhIGNoYXJhY3RlciBzdHJlYW0uXG4vLyAgbGV4ZXIgZ3JhbW1hcnMgcmVzdWx0IGluIGEgc3ViY2xhc3Mgb2YgdGhpcyBvYmplY3QuIEEgTGV4ZXIgb2JqZWN0XG4vLyAgdXNlcyBzaW1wbGlmaWVkIG1hdGNoKCkgYW5kIGVycm9yIHJlY292ZXJ5IG1lY2hhbmlzbXMgaW4gdGhlIGludGVyZXN0IG9mIHNwZWVkLlxuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuL1Rva2VuJykuVG9rZW47XG52YXIgUmVjb2duaXplciA9IHJlcXVpcmUoJy4vUmVjb2duaXplcicpLlJlY29nbml6ZXI7XG52YXIgQ29tbW9uVG9rZW5GYWN0b3J5ID0gcmVxdWlyZSgnLi9Db21tb25Ub2tlbkZhY3RvcnknKS5Db21tb25Ub2tlbkZhY3Rvcnk7XG52YXIgUmVjb2duaXRpb25FeGNlcHRpb24gID0gcmVxdWlyZSgnLi9lcnJvci9FcnJvcnMnKS5SZWNvZ25pdGlvbkV4Y2VwdGlvbjtcbnZhciBMZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uID0gcmVxdWlyZSgnLi9lcnJvci9FcnJvcnMnKS5MZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uO1xuXG5mdW5jdGlvbiBUb2tlblNvdXJjZSgpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIExleGVyKGlucHV0KSB7XG5cdFJlY29nbml6ZXIuY2FsbCh0aGlzKTtcblx0dGhpcy5faW5wdXQgPSBpbnB1dDtcblx0dGhpcy5fZmFjdG9yeSA9IENvbW1vblRva2VuRmFjdG9yeS5ERUZBVUxUO1xuXHR0aGlzLl90b2tlbkZhY3RvcnlTb3VyY2VQYWlyID0gWyB0aGlzLCBpbnB1dCBdO1xuXG5cdHRoaXMuX2ludGVycCA9IG51bGw7IC8vIGNoaWxkIGNsYXNzZXMgbXVzdCBwb3B1bGF0ZSB0aGlzXG5cblx0Ly8gVGhlIGdvYWwgb2YgYWxsIGxleGVyIHJ1bGVzL21ldGhvZHMgaXMgdG8gY3JlYXRlIGEgdG9rZW4gb2JqZWN0LlxuXHQvLyB0aGlzIGlzIGFuIGluc3RhbmNlIHZhcmlhYmxlIGFzIG11bHRpcGxlIHJ1bGVzIG1heSBjb2xsYWJvcmF0ZSB0b1xuXHQvLyBjcmVhdGUgYSBzaW5nbGUgdG9rZW4uIG5leHRUb2tlbiB3aWxsIHJldHVybiB0aGlzIG9iamVjdCBhZnRlclxuXHQvLyBtYXRjaGluZyBsZXhlciBydWxlKHMpLiBJZiB5b3Ugc3ViY2xhc3MgdG8gYWxsb3cgbXVsdGlwbGUgdG9rZW5cblx0Ly8gZW1pc3Npb25zLCB0aGVuIHNldCB0aGlzIHRvIHRoZSBsYXN0IHRva2VuIHRvIGJlIG1hdGNoZWQgb3Jcblx0Ly8gc29tZXRoaW5nIG5vbm51bGwgc28gdGhhdCB0aGUgYXV0byB0b2tlbiBlbWl0IG1lY2hhbmlzbSB3aWxsIG5vdFxuXHQvLyBlbWl0IGFub3RoZXIgdG9rZW4uXG5cdHRoaXMuX3Rva2VuID0gbnVsbDtcblxuXHQvLyBXaGF0IGNoYXJhY3RlciBpbmRleCBpbiB0aGUgc3RyZWFtIGRpZCB0aGUgY3VycmVudCB0b2tlbiBzdGFydCBhdD9cblx0Ly8gTmVlZGVkLCBmb3IgZXhhbXBsZSwgdG8gZ2V0IHRoZSB0ZXh0IGZvciBjdXJyZW50IHRva2VuLiBTZXQgYXRcblx0Ly8gdGhlIHN0YXJ0IG9mIG5leHRUb2tlbi5cblx0dGhpcy5fdG9rZW5TdGFydENoYXJJbmRleCA9IC0xO1xuXG5cdC8vIFRoZSBsaW5lIG9uIHdoaWNoIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHRva2VuIHJlc2lkZXMvLy9cblx0dGhpcy5fdG9rZW5TdGFydExpbmUgPSAtMTtcblxuXHQvLyBUaGUgY2hhcmFjdGVyIHBvc2l0aW9uIG9mIGZpcnN0IGNoYXJhY3RlciB3aXRoaW4gdGhlIGxpbmUvLy9cblx0dGhpcy5fdG9rZW5TdGFydENvbHVtbiA9IC0xO1xuXG5cdC8vIE9uY2Ugd2Ugc2VlIEVPRiBvbiBjaGFyIHN0cmVhbSwgbmV4dCB0b2tlbiB3aWxsIGJlIEVPRi5cblx0Ly8gSWYgeW91IGhhdmUgRE9ORSA6IEVPRiA7IHRoZW4geW91IHNlZSBET05FIEVPRi5cblx0dGhpcy5faGl0RU9GID0gZmFsc2U7XG5cblx0Ly8gVGhlIGNoYW5uZWwgbnVtYmVyIGZvciB0aGUgY3VycmVudCB0b2tlbi8vL1xuXHR0aGlzLl9jaGFubmVsID0gVG9rZW4uREVGQVVMVF9DSEFOTkVMO1xuXG5cdC8vIFRoZSB0b2tlbiB0eXBlIGZvciB0aGUgY3VycmVudCB0b2tlbi8vL1xuXHR0aGlzLl90eXBlID0gVG9rZW4uSU5WQUxJRF9UWVBFO1xuXG5cdHRoaXMuX21vZGVTdGFjayA9IFtdO1xuXHR0aGlzLl9tb2RlID0gTGV4ZXIuREVGQVVMVF9NT0RFO1xuXG5cdC8vIFlvdSBjYW4gc2V0IHRoZSB0ZXh0IGZvciB0aGUgY3VycmVudCB0b2tlbiB0byBvdmVycmlkZSB3aGF0IGlzIGluXG5cdC8vIHRoZSBpbnB1dCBjaGFyIGJ1ZmZlci4gVXNlIHNldFRleHQoKSBvciBjYW4gc2V0IHRoaXMgaW5zdGFuY2UgdmFyLlxuXHQvLyAvXG5cdHRoaXMuX3RleHQgPSBudWxsO1xuXG5cdHJldHVybiB0aGlzO1xufVxuXG5MZXhlci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJlY29nbml6ZXIucHJvdG90eXBlKTtcbkxleGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExleGVyO1xuXG5MZXhlci5ERUZBVUxUX01PREUgPSAwO1xuTGV4ZXIuTU9SRSA9IC0yO1xuTGV4ZXIuU0tJUCA9IC0zO1xuXG5MZXhlci5ERUZBVUxUX1RPS0VOX0NIQU5ORUwgPSBUb2tlbi5ERUZBVUxUX0NIQU5ORUw7XG5MZXhlci5ISURERU4gPSBUb2tlbi5ISURERU5fQ0hBTk5FTDtcbkxleGVyLk1JTl9DSEFSX1ZBTFVFID0gMHgwMDAwO1xuTGV4ZXIuTUFYX0NIQVJfVkFMVUUgPSAweDEwRkZGRjtcblxuTGV4ZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7XG5cdC8vIHdhY2sgTGV4ZXIgc3RhdGUgdmFyaWFibGVzXG5cdGlmICh0aGlzLl9pbnB1dCAhPT0gbnVsbCkge1xuXHRcdHRoaXMuX2lucHV0LnNlZWsoMCk7IC8vIHJld2luZCB0aGUgaW5wdXRcblx0fVxuXHR0aGlzLl90b2tlbiA9IG51bGw7XG5cdHRoaXMuX3R5cGUgPSBUb2tlbi5JTlZBTElEX1RZUEU7XG5cdHRoaXMuX2NoYW5uZWwgPSBUb2tlbi5ERUZBVUxUX0NIQU5ORUw7XG5cdHRoaXMuX3Rva2VuU3RhcnRDaGFySW5kZXggPSAtMTtcblx0dGhpcy5fdG9rZW5TdGFydENvbHVtbiA9IC0xO1xuXHR0aGlzLl90b2tlblN0YXJ0TGluZSA9IC0xO1xuXHR0aGlzLl90ZXh0ID0gbnVsbDtcblxuXHR0aGlzLl9oaXRFT0YgPSBmYWxzZTtcblx0dGhpcy5fbW9kZSA9IExleGVyLkRFRkFVTFRfTU9ERTtcblx0dGhpcy5fbW9kZVN0YWNrID0gW107XG5cblx0dGhpcy5faW50ZXJwLnJlc2V0KCk7XG59O1xuXG4vLyBSZXR1cm4gYSB0b2tlbiBmcm9tIHRoaXMgc291cmNlOyBpLmUuLCBtYXRjaCBhIHRva2VuIG9uIHRoZSBjaGFyIHN0cmVhbS5cbkxleGVyLnByb3RvdHlwZS5uZXh0VG9rZW4gPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuX2lucHV0ID09PSBudWxsKSB7XG5cdFx0dGhyb3cgXCJuZXh0VG9rZW4gcmVxdWlyZXMgYSBub24tbnVsbCBpbnB1dCBzdHJlYW0uXCI7XG5cdH1cblxuXHQvLyBNYXJrIHN0YXJ0IGxvY2F0aW9uIGluIGNoYXIgc3RyZWFtIHNvIHVuYnVmZmVyZWQgc3RyZWFtcyBhcmVcblx0Ly8gZ3VhcmFudGVlZCBhdCBsZWFzdCBoYXZlIHRleHQgb2YgY3VycmVudCB0b2tlblxuXHR2YXIgdG9rZW5TdGFydE1hcmtlciA9IHRoaXMuX2lucHV0Lm1hcmsoKTtcblx0dHJ5IHtcblx0XHR3aGlsZSAodHJ1ZSkge1xuXHRcdFx0aWYgKHRoaXMuX2hpdEVPRikge1xuXHRcdFx0XHR0aGlzLmVtaXRFT0YoKTtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX3Rva2VuO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5fdG9rZW4gPSBudWxsO1xuXHRcdFx0dGhpcy5fY2hhbm5lbCA9IFRva2VuLkRFRkFVTFRfQ0hBTk5FTDtcblx0XHRcdHRoaXMuX3Rva2VuU3RhcnRDaGFySW5kZXggPSB0aGlzLl9pbnB1dC5pbmRleDtcblx0XHRcdHRoaXMuX3Rva2VuU3RhcnRDb2x1bW4gPSB0aGlzLl9pbnRlcnAuY29sdW1uO1xuXHRcdFx0dGhpcy5fdG9rZW5TdGFydExpbmUgPSB0aGlzLl9pbnRlcnAubGluZTtcblx0XHRcdHRoaXMuX3RleHQgPSBudWxsO1xuXHRcdFx0dmFyIGNvbnRpbnVlT3V0ZXIgPSBmYWxzZTtcblx0XHRcdHdoaWxlICh0cnVlKSB7XG5cdFx0XHRcdHRoaXMuX3R5cGUgPSBUb2tlbi5JTlZBTElEX1RZUEU7XG5cdFx0XHRcdHZhciB0dHlwZSA9IExleGVyLlNLSVA7XG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0dHR5cGUgPSB0aGlzLl9pbnRlcnAubWF0Y2godGhpcy5faW5wdXQsIHRoaXMuX21vZGUpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdCAgICBpZihlIGluc3RhbmNlb2YgUmVjb2duaXRpb25FeGNlcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5TGlzdGVuZXJzKGUpOyAvLyByZXBvcnQgZXJyb3JcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucmVjb3ZlcihlKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGUuc3RhY2spO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLl9pbnB1dC5MQSgxKSA9PT0gVG9rZW4uRU9GKSB7XG5cdFx0XHRcdFx0dGhpcy5faGl0RU9GID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy5fdHlwZSA9PT0gVG9rZW4uSU5WQUxJRF9UWVBFKSB7XG5cdFx0XHRcdFx0dGhpcy5fdHlwZSA9IHR0eXBlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLl90eXBlID09PSBMZXhlci5TS0lQKSB7XG5cdFx0XHRcdFx0Y29udGludWVPdXRlciA9IHRydWU7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKHRoaXMuX3R5cGUgIT09IExleGVyLk1PUkUpIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKGNvbnRpbnVlT3V0ZXIpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRpZiAodGhpcy5fdG9rZW4gPT09IG51bGwpIHtcblx0XHRcdFx0dGhpcy5lbWl0KCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcy5fdG9rZW47XG5cdFx0fVxuXHR9IGZpbmFsbHkge1xuXHRcdC8vIG1ha2Ugc3VyZSB3ZSByZWxlYXNlIG1hcmtlciBhZnRlciBtYXRjaCBvclxuXHRcdC8vIHVuYnVmZmVyZWQgY2hhciBzdHJlYW0gd2lsbCBrZWVwIGJ1ZmZlcmluZ1xuXHRcdHRoaXMuX2lucHV0LnJlbGVhc2UodG9rZW5TdGFydE1hcmtlcik7XG5cdH1cbn07XG5cbi8vIEluc3RydWN0IHRoZSBsZXhlciB0byBza2lwIGNyZWF0aW5nIGEgdG9rZW4gZm9yIGN1cnJlbnQgbGV4ZXIgcnVsZVxuLy8gYW5kIGxvb2sgZm9yIGFub3RoZXIgdG9rZW4uIG5leHRUb2tlbigpIGtub3dzIHRvIGtlZXAgbG9va2luZyB3aGVuXG4vLyBhIGxleGVyIHJ1bGUgZmluaXNoZXMgd2l0aCB0b2tlbiBzZXQgdG8gU0tJUF9UT0tFTi4gUmVjYWxsIHRoYXRcbi8vIGlmIHRva2VuPT1udWxsIGF0IGVuZCBvZiBhbnkgdG9rZW4gcnVsZSwgaXQgY3JlYXRlcyBvbmUgZm9yIHlvdVxuLy8gYW5kIGVtaXRzIGl0LlxuLy8gL1xuTGV4ZXIucHJvdG90eXBlLnNraXAgPSBmdW5jdGlvbigpIHtcblx0dGhpcy5fdHlwZSA9IExleGVyLlNLSVA7XG59O1xuXG5MZXhlci5wcm90b3R5cGUubW9yZSA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLl90eXBlID0gTGV4ZXIuTU9SRTtcbn07XG5cbkxleGVyLnByb3RvdHlwZS5tb2RlID0gZnVuY3Rpb24obSkge1xuXHR0aGlzLl9tb2RlID0gbTtcbn07XG5cbkxleGVyLnByb3RvdHlwZS5wdXNoTW9kZSA9IGZ1bmN0aW9uKG0pIHtcblx0aWYgKHRoaXMuX2ludGVycC5kZWJ1Zykge1xuXHRcdGNvbnNvbGUubG9nKFwicHVzaE1vZGUgXCIgKyBtKTtcblx0fVxuXHR0aGlzLl9tb2RlU3RhY2sucHVzaCh0aGlzLl9tb2RlKTtcblx0dGhpcy5tb2RlKG0pO1xufTtcblxuTGV4ZXIucHJvdG90eXBlLnBvcE1vZGUgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuX21vZGVTdGFjay5sZW5ndGggPT09IDApIHtcblx0XHR0aHJvdyBcIkVtcHR5IFN0YWNrXCI7XG5cdH1cblx0aWYgKHRoaXMuX2ludGVycC5kZWJ1Zykge1xuXHRcdGNvbnNvbGUubG9nKFwicG9wTW9kZSBiYWNrIHRvIFwiICsgdGhpcy5fbW9kZVN0YWNrLnNsaWNlKDAsIC0xKSk7XG5cdH1cblx0dGhpcy5tb2RlKHRoaXMuX21vZGVTdGFjay5wb3AoKSk7XG5cdHJldHVybiB0aGlzLl9tb2RlO1xufTtcblxuLy8gU2V0IHRoZSBjaGFyIHN0cmVhbSBhbmQgcmVzZXQgdGhlIGxleGVyXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTGV4ZXIucHJvdG90eXBlLCBcImlucHV0U3RyZWFtXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2lucHV0O1xuXHR9LFxuXHRzZXQgOiBmdW5jdGlvbihpbnB1dCkge1xuXHRcdHRoaXMuX2lucHV0ID0gbnVsbDtcblx0XHR0aGlzLl90b2tlbkZhY3RvcnlTb3VyY2VQYWlyID0gWyB0aGlzLCB0aGlzLl9pbnB1dCBdO1xuXHRcdHRoaXMucmVzZXQoKTtcblx0XHR0aGlzLl9pbnB1dCA9IGlucHV0O1xuXHRcdHRoaXMuX3Rva2VuRmFjdG9yeVNvdXJjZVBhaXIgPSBbIHRoaXMsIHRoaXMuX2lucHV0IF07XG5cdH1cbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTGV4ZXIucHJvdG90eXBlLCBcInNvdXJjZU5hbWVcIiwge1xuXHRnZXQgOiBmdW5jdGlvbiBzb3VyY2VOYW1lKCkge1xuXHRcdHJldHVybiB0aGlzLl9pbnB1dC5zb3VyY2VOYW1lO1xuXHR9XG59KTtcblxuLy8gQnkgZGVmYXVsdCBkb2VzIG5vdCBzdXBwb3J0IG11bHRpcGxlIGVtaXRzIHBlciBuZXh0VG9rZW4gaW52b2NhdGlvblxuLy8gZm9yIGVmZmljaWVuY3kgcmVhc29ucy4gU3ViY2xhc3MgYW5kIG92ZXJyaWRlIHRoaXMgbWV0aG9kLCBuZXh0VG9rZW4sXG4vLyBhbmQgZ2V0VG9rZW4gKHRvIHB1c2ggdG9rZW5zIGludG8gYSBsaXN0IGFuZCBwdWxsIGZyb20gdGhhdCBsaXN0XG4vLyByYXRoZXIgdGhhbiBhIHNpbmdsZSB2YXJpYWJsZSBhcyB0aGlzIGltcGxlbWVudGF0aW9uIGRvZXMpLlxuLy8gL1xuTGV4ZXIucHJvdG90eXBlLmVtaXRUb2tlbiA9IGZ1bmN0aW9uKHRva2VuKSB7XG5cdHRoaXMuX3Rva2VuID0gdG9rZW47XG59O1xuXG4vLyBUaGUgc3RhbmRhcmQgbWV0aG9kIGNhbGxlZCB0byBhdXRvbWF0aWNhbGx5IGVtaXQgYSB0b2tlbiBhdCB0aGVcbi8vIG91dGVybW9zdCBsZXhpY2FsIHJ1bGUuIFRoZSB0b2tlbiBvYmplY3Qgc2hvdWxkIHBvaW50IGludG8gdGhlXG4vLyBjaGFyIGJ1ZmZlciBzdGFydC4uc3RvcC4gSWYgdGhlcmUgaXMgYSB0ZXh0IG92ZXJyaWRlIGluICd0ZXh0Jyxcbi8vIHVzZSB0aGF0IHRvIHNldCB0aGUgdG9rZW4ncyB0ZXh0LiBPdmVycmlkZSB0aGlzIG1ldGhvZCB0byBlbWl0XG4vLyBjdXN0b20gVG9rZW4gb2JqZWN0cyBvciBwcm92aWRlIGEgbmV3IGZhY3RvcnkuXG4vLyAvXG5MZXhlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgdCA9IHRoaXMuX2ZhY3RvcnkuY3JlYXRlKHRoaXMuX3Rva2VuRmFjdG9yeVNvdXJjZVBhaXIsIHRoaXMuX3R5cGUsXG5cdFx0XHR0aGlzLl90ZXh0LCB0aGlzLl9jaGFubmVsLCB0aGlzLl90b2tlblN0YXJ0Q2hhckluZGV4LCB0aGlzXG5cdFx0XHRcdFx0LmdldENoYXJJbmRleCgpIC0gMSwgdGhpcy5fdG9rZW5TdGFydExpbmUsXG5cdFx0XHR0aGlzLl90b2tlblN0YXJ0Q29sdW1uKTtcblx0dGhpcy5lbWl0VG9rZW4odCk7XG5cdHJldHVybiB0O1xufTtcblxuTGV4ZXIucHJvdG90eXBlLmVtaXRFT0YgPSBmdW5jdGlvbigpIHtcblx0dmFyIGNwb3MgPSB0aGlzLmNvbHVtbjtcblx0dmFyIGxwb3MgPSB0aGlzLmxpbmU7XG5cdHZhciBlb2YgPSB0aGlzLl9mYWN0b3J5LmNyZWF0ZSh0aGlzLl90b2tlbkZhY3RvcnlTb3VyY2VQYWlyLCBUb2tlbi5FT0YsXG5cdFx0XHRudWxsLCBUb2tlbi5ERUZBVUxUX0NIQU5ORUwsIHRoaXMuX2lucHV0LmluZGV4LFxuXHRcdFx0dGhpcy5faW5wdXQuaW5kZXggLSAxLCBscG9zLCBjcG9zKTtcblx0dGhpcy5lbWl0VG9rZW4oZW9mKTtcblx0cmV0dXJuIGVvZjtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMZXhlci5wcm90b3R5cGUsIFwidHlwZVwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnR5cGU7XG5cdH0sXG5cdHNldCA6IGZ1bmN0aW9uKHR5cGUpIHtcblx0XHR0aGlzLl90eXBlID0gdHlwZTtcblx0fVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMZXhlci5wcm90b3R5cGUsIFwibGluZVwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLl9pbnRlcnAubGluZTtcblx0fSxcblx0c2V0IDogZnVuY3Rpb24obGluZSkge1xuXHRcdHRoaXMuX2ludGVycC5saW5lID0gbGluZTtcblx0fVxufSk7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMZXhlci5wcm90b3R5cGUsIFwiY29sdW1uXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2ludGVycC5jb2x1bW47XG5cdH0sXG5cdHNldCA6IGZ1bmN0aW9uKGNvbHVtbikge1xuXHRcdHRoaXMuX2ludGVycC5jb2x1bW4gPSBjb2x1bW47XG5cdH1cbn0pO1xuXG5cbi8vIFdoYXQgaXMgdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50IGNoYXJhY3RlciBvZiBsb29rYWhlYWQ/Ly8vXG5MZXhlci5wcm90b3R5cGUuZ2V0Q2hhckluZGV4ID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLl9pbnB1dC5pbmRleDtcbn07XG5cbi8vIFJldHVybiB0aGUgdGV4dCBtYXRjaGVkIHNvIGZhciBmb3IgdGhlIGN1cnJlbnQgdG9rZW4gb3IgYW55IHRleHQgb3ZlcnJpZGUuXG4vL1NldCB0aGUgY29tcGxldGUgdGV4dCBvZiB0aGlzIHRva2VuOyBpdCB3aXBlcyBhbnkgcHJldmlvdXMgY2hhbmdlcyB0byB0aGUgdGV4dC5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShMZXhlci5wcm90b3R5cGUsIFwidGV4dFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICh0aGlzLl90ZXh0ICE9PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fdGV4dDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuX2ludGVycC5nZXRUZXh0KHRoaXMuX2lucHV0KTtcblx0XHR9XG5cdH0sXG5cdHNldCA6IGZ1bmN0aW9uKHRleHQpIHtcblx0XHR0aGlzLl90ZXh0ID0gdGV4dDtcblx0fVxufSk7XG4vLyBSZXR1cm4gYSBsaXN0IG9mIGFsbCBUb2tlbiBvYmplY3RzIGluIGlucHV0IGNoYXIgc3RyZWFtLlxuLy8gRm9yY2VzIGxvYWQgb2YgYWxsIHRva2Vucy4gRG9lcyBub3QgaW5jbHVkZSBFT0YgdG9rZW4uXG4vLyAvXG5MZXhlci5wcm90b3R5cGUuZ2V0QWxsVG9rZW5zID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0b2tlbnMgPSBbXTtcblx0dmFyIHQgPSB0aGlzLm5leHRUb2tlbigpO1xuXHR3aGlsZSAodC50eXBlICE9PSBUb2tlbi5FT0YpIHtcblx0XHR0b2tlbnMucHVzaCh0KTtcblx0XHR0ID0gdGhpcy5uZXh0VG9rZW4oKTtcblx0fVxuXHRyZXR1cm4gdG9rZW5zO1xufTtcblxuTGV4ZXIucHJvdG90eXBlLm5vdGlmeUxpc3RlbmVycyA9IGZ1bmN0aW9uKGUpIHtcblx0dmFyIHN0YXJ0ID0gdGhpcy5fdG9rZW5TdGFydENoYXJJbmRleDtcblx0dmFyIHN0b3AgPSB0aGlzLl9pbnB1dC5pbmRleDtcblx0dmFyIHRleHQgPSB0aGlzLl9pbnB1dC5nZXRUZXh0KHN0YXJ0LCBzdG9wKTtcblx0dmFyIG1zZyA9IFwidG9rZW4gcmVjb2duaXRpb24gZXJyb3IgYXQ6ICdcIiArIHRoaXMuZ2V0RXJyb3JEaXNwbGF5KHRleHQpICsgXCInXCI7XG5cdHZhciBsaXN0ZW5lciA9IHRoaXMuZ2V0RXJyb3JMaXN0ZW5lckRpc3BhdGNoKCk7XG5cdGxpc3RlbmVyLnN5bnRheEVycm9yKHRoaXMsIG51bGwsIHRoaXMuX3Rva2VuU3RhcnRMaW5lLFxuXHRcdFx0dGhpcy5fdG9rZW5TdGFydENvbHVtbiwgbXNnLCBlKTtcbn07XG5cbkxleGVyLnByb3RvdHlwZS5nZXRFcnJvckRpc3BsYXkgPSBmdW5jdGlvbihzKSB7XG5cdHZhciBkID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgcy5sZW5ndGg7IGkrKykge1xuXHRcdGQucHVzaChzW2ldKTtcblx0fVxuXHRyZXR1cm4gZC5qb2luKCcnKTtcbn07XG5cbkxleGVyLnByb3RvdHlwZS5nZXRFcnJvckRpc3BsYXlGb3JDaGFyID0gZnVuY3Rpb24oYykge1xuXHRpZiAoYy5jaGFyQ29kZUF0KDApID09PSBUb2tlbi5FT0YpIHtcblx0XHRyZXR1cm4gXCI8RU9GPlwiO1xuXHR9IGVsc2UgaWYgKGMgPT09ICdcXG4nKSB7XG5cdFx0cmV0dXJuIFwiXFxcXG5cIjtcblx0fSBlbHNlIGlmIChjID09PSAnXFx0Jykge1xuXHRcdHJldHVybiBcIlxcXFx0XCI7XG5cdH0gZWxzZSBpZiAoYyA9PT0gJ1xccicpIHtcblx0XHRyZXR1cm4gXCJcXFxcclwiO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBjO1xuXHR9XG59O1xuXG5MZXhlci5wcm90b3R5cGUuZ2V0Q2hhckVycm9yRGlzcGxheSA9IGZ1bmN0aW9uKGMpIHtcblx0cmV0dXJuIFwiJ1wiICsgdGhpcy5nZXRFcnJvckRpc3BsYXlGb3JDaGFyKGMpICsgXCInXCI7XG59O1xuXG4vLyBMZXhlcnMgY2FuIG5vcm1hbGx5IG1hdGNoIGFueSBjaGFyIGluIGl0J3Mgdm9jYWJ1bGFyeSBhZnRlciBtYXRjaGluZ1xuLy8gYSB0b2tlbiwgc28gZG8gdGhlIGVhc3kgdGhpbmcgYW5kIGp1c3Qga2lsbCBhIGNoYXJhY3RlciBhbmQgaG9wZVxuLy8gaXQgYWxsIHdvcmtzIG91dC4gWW91IGNhbiBpbnN0ZWFkIHVzZSB0aGUgcnVsZSBpbnZvY2F0aW9uIHN0YWNrXG4vLyB0byBkbyBzb3BoaXN0aWNhdGVkIGVycm9yIHJlY292ZXJ5IGlmIHlvdSBhcmUgaW4gYSBmcmFnbWVudCBydWxlLlxuLy8gL1xuTGV4ZXIucHJvdG90eXBlLnJlY292ZXIgPSBmdW5jdGlvbihyZSkge1xuXHRpZiAodGhpcy5faW5wdXQuTEEoMSkgIT09IFRva2VuLkVPRikge1xuXHRcdGlmIChyZSBpbnN0YW5jZW9mIExleGVyTm9WaWFibGVBbHRFeGNlcHRpb24pIHtcblx0XHRcdC8vIHNraXAgYSBjaGFyIGFuZCB0cnkgYWdhaW5cblx0XHRcdHRoaXMuX2ludGVycC5jb25zdW1lKHRoaXMuX2lucHV0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gVE9ETzogRG8gd2UgbG9zZSBjaGFyYWN0ZXIgb3IgbGluZSBwb3NpdGlvbiBpbmZvcm1hdGlvbj9cblx0XHRcdHRoaXMuX2lucHV0LmNvbnN1bWUoKTtcblx0XHR9XG5cdH1cbn07XG5cbmV4cG9ydHMuTGV4ZXIgPSBMZXhlcjtcbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxudmFyIFRva2VuID0gcmVxdWlyZSgnLi9Ub2tlbicpLlRva2VuO1xudmFyIFBhcnNlVHJlZUxpc3RlbmVyID0gcmVxdWlyZSgnLi90cmVlL1RyZWUnKS5QYXJzZVRyZWVMaXN0ZW5lcjtcbnZhciBSZWNvZ25pemVyID0gcmVxdWlyZSgnLi9SZWNvZ25pemVyJykuUmVjb2duaXplcjtcbnZhciBEZWZhdWx0RXJyb3JTdHJhdGVneSA9IHJlcXVpcmUoJy4vZXJyb3IvRXJyb3JTdHJhdGVneScpLkRlZmF1bHRFcnJvclN0cmF0ZWd5O1xudmFyIEFUTkRlc2VyaWFsaXplciA9IHJlcXVpcmUoJy4vYXRuL0FUTkRlc2VyaWFsaXplcicpLkFUTkRlc2VyaWFsaXplcjtcbnZhciBBVE5EZXNlcmlhbGl6YXRpb25PcHRpb25zID0gcmVxdWlyZSgnLi9hdG4vQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucycpLkFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnM7XG52YXIgVGVybWluYWxOb2RlID0gcmVxdWlyZSgnLi90cmVlL1RyZWUnKS5UZXJtaW5hbE5vZGU7XG52YXIgRXJyb3JOb2RlID0gcmVxdWlyZSgnLi90cmVlL1RyZWUnKS5FcnJvck5vZGU7XG5cbmZ1bmN0aW9uIFRyYWNlTGlzdGVuZXIocGFyc2VyKSB7XG5cdFBhcnNlVHJlZUxpc3RlbmVyLmNhbGwodGhpcyk7XG4gICAgdGhpcy5wYXJzZXIgPSBwYXJzZXI7XG5cdHJldHVybiB0aGlzO1xufVxuXG5UcmFjZUxpc3RlbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUGFyc2VUcmVlTGlzdGVuZXIucHJvdG90eXBlKTtcblRyYWNlTGlzdGVuZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVHJhY2VMaXN0ZW5lcjtcblxuVHJhY2VMaXN0ZW5lci5wcm90b3R5cGUuZW50ZXJFdmVyeVJ1bGUgPSBmdW5jdGlvbihjdHgpIHtcblx0Y29uc29sZS5sb2coXCJlbnRlciAgIFwiICsgdGhpcy5wYXJzZXIucnVsZU5hbWVzW2N0eC5ydWxlSW5kZXhdICsgXCIsIExUKDEpPVwiICsgdGhpcy5wYXJzZXIuX2lucHV0LkxUKDEpLnRleHQpO1xufTtcblxuVHJhY2VMaXN0ZW5lci5wcm90b3R5cGUudmlzaXRUZXJtaW5hbCA9IGZ1bmN0aW9uKCBub2RlKSB7XG5cdGNvbnNvbGUubG9nKFwiY29uc3VtZSBcIiArIG5vZGUuc3ltYm9sICsgXCIgcnVsZSBcIiArIHRoaXMucGFyc2VyLnJ1bGVOYW1lc1t0aGlzLnBhcnNlci5fY3R4LnJ1bGVJbmRleF0pO1xufTtcblxuVHJhY2VMaXN0ZW5lci5wcm90b3R5cGUuZXhpdEV2ZXJ5UnVsZSA9IGZ1bmN0aW9uKGN0eCkge1xuXHRjb25zb2xlLmxvZyhcImV4aXQgICAgXCIgKyB0aGlzLnBhcnNlci5ydWxlTmFtZXNbY3R4LnJ1bGVJbmRleF0gKyBcIiwgTFQoMSk9XCIgKyB0aGlzLnBhcnNlci5faW5wdXQuTFQoMSkudGV4dCk7XG59O1xuXG4vLyB0aGlzIGlzIGFsbCB0aGUgcGFyc2luZyBzdXBwb3J0IGNvZGUgZXNzZW50aWFsbHk7IG1vc3Qgb2YgaXQgaXMgZXJyb3Jcbi8vIHJlY292ZXJ5IHN0dWZmLi8vXG5mdW5jdGlvbiBQYXJzZXIoaW5wdXQpIHtcblx0UmVjb2duaXplci5jYWxsKHRoaXMpO1xuXHQvLyBUaGUgaW5wdXQgc3RyZWFtLlxuXHR0aGlzLl9pbnB1dCA9IG51bGw7XG5cdC8vIFRoZSBlcnJvciBoYW5kbGluZyBzdHJhdGVneSBmb3IgdGhlIHBhcnNlci4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgYSBuZXdcblx0Ly8gaW5zdGFuY2Ugb2Yge0BsaW5rIERlZmF1bHRFcnJvclN0cmF0ZWd5fS5cblx0dGhpcy5fZXJySGFuZGxlciA9IG5ldyBEZWZhdWx0RXJyb3JTdHJhdGVneSgpO1xuXHR0aGlzLl9wcmVjZWRlbmNlU3RhY2sgPSBbXTtcblx0dGhpcy5fcHJlY2VkZW5jZVN0YWNrLnB1c2goMCk7XG5cdC8vIFRoZSB7QGxpbmsgUGFyc2VyUnVsZUNvbnRleHR9IG9iamVjdCBmb3IgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgcnVsZS5cblx0Ly8gdGhpcyBpcyBhbHdheXMgbm9uLW51bGwgZHVyaW5nIHRoZSBwYXJzaW5nIHByb2Nlc3MuXG5cdHRoaXMuX2N0eCA9IG51bGw7XG5cdC8vIFNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0aGUgcGFyc2VyIHNob3VsZCBjb25zdHJ1Y3QgYSBwYXJzZSB0cmVlIGR1cmluZ1xuXHQvLyB0aGUgcGFyc2luZyBwcm9jZXNzLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB7QGNvZGUgdHJ1ZX0uXG5cdHRoaXMuYnVpbGRQYXJzZVRyZWVzID0gdHJ1ZTtcblx0Ly8gV2hlbiB7QGxpbmsgLy9zZXRUcmFjZX17QGNvZGUgKHRydWUpfSBpcyBjYWxsZWQsIGEgcmVmZXJlbmNlIHRvIHRoZVxuXHQvLyB7QGxpbmsgVHJhY2VMaXN0ZW5lcn0gaXMgc3RvcmVkIGhlcmUgc28gaXQgY2FuIGJlIGVhc2lseSByZW1vdmVkIGluIGFcblx0Ly8gbGF0ZXIgY2FsbCB0byB7QGxpbmsgLy9zZXRUcmFjZX17QGNvZGUgKGZhbHNlKX0uIFRoZSBsaXN0ZW5lciBpdHNlbGYgaXNcblx0Ly8gaW1wbGVtZW50ZWQgYXMgYSBwYXJzZXIgbGlzdGVuZXIgc28gdGhpcyBmaWVsZCBpcyBub3QgZGlyZWN0bHkgdXNlZCBieVxuXHQvLyBvdGhlciBwYXJzZXIgbWV0aG9kcy5cblx0dGhpcy5fdHJhY2VyID0gbnVsbDtcblx0Ly8gVGhlIGxpc3Qgb2Yge0BsaW5rIFBhcnNlVHJlZUxpc3RlbmVyfSBsaXN0ZW5lcnMgcmVnaXN0ZXJlZCB0byByZWNlaXZlXG5cdC8vIGV2ZW50cyBkdXJpbmcgdGhlIHBhcnNlLlxuXHR0aGlzLl9wYXJzZUxpc3RlbmVycyA9IG51bGw7XG5cdC8vIFRoZSBudW1iZXIgb2Ygc3ludGF4IGVycm9ycyByZXBvcnRlZCBkdXJpbmcgcGFyc2luZy4gdGhpcyB2YWx1ZSBpc1xuXHQvLyBpbmNyZW1lbnRlZCBlYWNoIHRpbWUge0BsaW5rIC8vbm90aWZ5RXJyb3JMaXN0ZW5lcnN9IGlzIGNhbGxlZC5cblx0dGhpcy5fc3ludGF4RXJyb3JzID0gMDtcblx0dGhpcy5zZXRJbnB1dFN0cmVhbShpbnB1dCk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5QYXJzZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZWNvZ25pemVyLnByb3RvdHlwZSk7XG5QYXJzZXIucHJvdG90eXBlLmNvbnRydWN0b3IgPSBQYXJzZXI7XG5cbi8vIHRoaXMgZmllbGQgbWFwcyBmcm9tIHRoZSBzZXJpYWxpemVkIEFUTiBzdHJpbmcgdG8gdGhlIGRlc2VyaWFsaXplZCB7QGxpbmtcbi8vIEFUTn0gd2l0aFxuLy8gYnlwYXNzIGFsdGVybmF0aXZlcy5cbi8vXG4vLyBAc2VlIEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMvL2lzR2VuZXJhdGVSdWxlQnlwYXNzVHJhbnNpdGlvbnMoKVxuLy9cblBhcnNlci5ieXBhc3NBbHRzQXRuQ2FjaGUgPSB7fTtcblxuLy8gcmVzZXQgdGhlIHBhcnNlcidzIHN0YXRlLy9cblBhcnNlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuX2lucHV0ICE9PSBudWxsKSB7XG5cdFx0dGhpcy5faW5wdXQuc2VlaygwKTtcblx0fVxuXHR0aGlzLl9lcnJIYW5kbGVyLnJlc2V0KHRoaXMpO1xuXHR0aGlzLl9jdHggPSBudWxsO1xuXHR0aGlzLl9zeW50YXhFcnJvcnMgPSAwO1xuXHR0aGlzLnNldFRyYWNlKGZhbHNlKTtcblx0dGhpcy5fcHJlY2VkZW5jZVN0YWNrID0gW107XG5cdHRoaXMuX3ByZWNlZGVuY2VTdGFjay5wdXNoKDApO1xuXHRpZiAodGhpcy5faW50ZXJwICE9PSBudWxsKSB7XG5cdFx0dGhpcy5faW50ZXJwLnJlc2V0KCk7XG5cdH1cbn07XG5cbi8vIE1hdGNoIGN1cnJlbnQgaW5wdXQgc3ltYm9sIGFnYWluc3Qge0Bjb2RlIHR0eXBlfS4gSWYgdGhlIHN5bWJvbCB0eXBlXG4vLyBtYXRjaGVzLCB7QGxpbmsgQU5UTFJFcnJvclN0cmF0ZWd5Ly9yZXBvcnRNYXRjaH0gYW5kIHtAbGluayAvL2NvbnN1bWV9IGFyZVxuLy8gY2FsbGVkIHRvIGNvbXBsZXRlIHRoZSBtYXRjaCBwcm9jZXNzLlxuLy9cbi8vIDxwPklmIHRoZSBzeW1ib2wgdHlwZSBkb2VzIG5vdCBtYXRjaCxcbi8vIHtAbGluayBBTlRMUkVycm9yU3RyYXRlZ3kvL3JlY292ZXJJbmxpbmV9IGlzIGNhbGxlZCBvbiB0aGUgY3VycmVudCBlcnJvclxuLy8gc3RyYXRlZ3kgdG8gYXR0ZW1wdCByZWNvdmVyeS4gSWYge0BsaW5rIC8vZ2V0QnVpbGRQYXJzZVRyZWV9IGlzXG4vLyB7QGNvZGUgdHJ1ZX0gYW5kIHRoZSB0b2tlbiBpbmRleCBvZiB0aGUgc3ltYm9sIHJldHVybmVkIGJ5XG4vLyB7QGxpbmsgQU5UTFJFcnJvclN0cmF0ZWd5Ly9yZWNvdmVySW5saW5lfSBpcyAtMSwgdGhlIHN5bWJvbCBpcyBhZGRlZCB0b1xuLy8gdGhlIHBhcnNlIHRyZWUgYnkgY2FsbGluZyB7QGxpbmsgUGFyc2VyUnVsZUNvbnRleHQvL2FkZEVycm9yTm9kZX0uPC9wPlxuLy9cbi8vIEBwYXJhbSB0dHlwZSB0aGUgdG9rZW4gdHlwZSB0byBtYXRjaFxuLy8gQHJldHVybiB0aGUgbWF0Y2hlZCBzeW1ib2xcbi8vIEB0aHJvd3MgUmVjb2duaXRpb25FeGNlcHRpb24gaWYgdGhlIGN1cnJlbnQgaW5wdXQgc3ltYm9sIGRpZCBub3QgbWF0Y2hcbi8vIHtAY29kZSB0dHlwZX0gYW5kIHRoZSBlcnJvciBzdHJhdGVneSBjb3VsZCBub3QgcmVjb3ZlciBmcm9tIHRoZVxuLy8gbWlzbWF0Y2hlZCBzeW1ib2xcblxuUGFyc2VyLnByb3RvdHlwZS5tYXRjaCA9IGZ1bmN0aW9uKHR0eXBlKSB7XG5cdHZhciB0ID0gdGhpcy5nZXRDdXJyZW50VG9rZW4oKTtcblx0aWYgKHQudHlwZSA9PT0gdHR5cGUpIHtcblx0XHR0aGlzLl9lcnJIYW5kbGVyLnJlcG9ydE1hdGNoKHRoaXMpO1xuXHRcdHRoaXMuY29uc3VtZSgpO1xuXHR9IGVsc2Uge1xuXHRcdHQgPSB0aGlzLl9lcnJIYW5kbGVyLnJlY292ZXJJbmxpbmUodGhpcyk7XG5cdFx0aWYgKHRoaXMuYnVpbGRQYXJzZVRyZWVzICYmIHQudG9rZW5JbmRleCA9PT0gLTEpIHtcblx0XHRcdC8vIHdlIG11c3QgaGF2ZSBjb25qdXJlZCB1cCBhIG5ldyB0b2tlbiBkdXJpbmcgc2luZ2xlIHRva2VuXG5cdFx0XHQvLyBpbnNlcnRpb25cblx0XHRcdC8vIGlmIGl0J3Mgbm90IHRoZSBjdXJyZW50IHN5bWJvbFxuXHRcdFx0dGhpcy5fY3R4LmFkZEVycm9yTm9kZSh0KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHQ7XG59O1xuLy8gTWF0Y2ggY3VycmVudCBpbnB1dCBzeW1ib2wgYXMgYSB3aWxkY2FyZC4gSWYgdGhlIHN5bWJvbCB0eXBlIG1hdGNoZXNcbi8vIChpLmUuIGhhcyBhIHZhbHVlIGdyZWF0ZXIgdGhhbiAwKSwge0BsaW5rIEFOVExSRXJyb3JTdHJhdGVneS8vcmVwb3J0TWF0Y2h9XG4vLyBhbmQge0BsaW5rIC8vY29uc3VtZX0gYXJlIGNhbGxlZCB0byBjb21wbGV0ZSB0aGUgbWF0Y2ggcHJvY2Vzcy5cbi8vXG4vLyA8cD5JZiB0aGUgc3ltYm9sIHR5cGUgZG9lcyBub3QgbWF0Y2gsXG4vLyB7QGxpbmsgQU5UTFJFcnJvclN0cmF0ZWd5Ly9yZWNvdmVySW5saW5lfSBpcyBjYWxsZWQgb24gdGhlIGN1cnJlbnQgZXJyb3Jcbi8vIHN0cmF0ZWd5IHRvIGF0dGVtcHQgcmVjb3ZlcnkuIElmIHtAbGluayAvL2dldEJ1aWxkUGFyc2VUcmVlfSBpc1xuLy8ge0Bjb2RlIHRydWV9IGFuZCB0aGUgdG9rZW4gaW5kZXggb2YgdGhlIHN5bWJvbCByZXR1cm5lZCBieVxuLy8ge0BsaW5rIEFOVExSRXJyb3JTdHJhdGVneS8vcmVjb3ZlcklubGluZX0gaXMgLTEsIHRoZSBzeW1ib2wgaXMgYWRkZWQgdG9cbi8vIHRoZSBwYXJzZSB0cmVlIGJ5IGNhbGxpbmcge0BsaW5rIFBhcnNlclJ1bGVDb250ZXh0Ly9hZGRFcnJvck5vZGV9LjwvcD5cbi8vXG4vLyBAcmV0dXJuIHRoZSBtYXRjaGVkIHN5bWJvbFxuLy8gQHRocm93cyBSZWNvZ25pdGlvbkV4Y2VwdGlvbiBpZiB0aGUgY3VycmVudCBpbnB1dCBzeW1ib2wgZGlkIG5vdCBtYXRjaFxuLy8gYSB3aWxkY2FyZCBhbmQgdGhlIGVycm9yIHN0cmF0ZWd5IGNvdWxkIG5vdCByZWNvdmVyIGZyb20gdGhlIG1pc21hdGNoZWRcbi8vIHN5bWJvbFxuXG5QYXJzZXIucHJvdG90eXBlLm1hdGNoV2lsZGNhcmQgPSBmdW5jdGlvbigpIHtcblx0dmFyIHQgPSB0aGlzLmdldEN1cnJlbnRUb2tlbigpO1xuXHRpZiAodC50eXBlID4gMCkge1xuXHRcdHRoaXMuX2VyckhhbmRsZXIucmVwb3J0TWF0Y2godGhpcyk7XG5cdFx0dGhpcy5jb25zdW1lKCk7XG5cdH0gZWxzZSB7XG5cdFx0dCA9IHRoaXMuX2VyckhhbmRsZXIucmVjb3ZlcklubGluZSh0aGlzKTtcblx0XHRpZiAodGhpcy5fYnVpbGRQYXJzZVRyZWVzICYmIHQudG9rZW5JbmRleCA9PT0gLTEpIHtcblx0XHRcdC8vIHdlIG11c3QgaGF2ZSBjb25qdXJlZCB1cCBhIG5ldyB0b2tlbiBkdXJpbmcgc2luZ2xlIHRva2VuXG5cdFx0XHQvLyBpbnNlcnRpb25cblx0XHRcdC8vIGlmIGl0J3Mgbm90IHRoZSBjdXJyZW50IHN5bWJvbFxuXHRcdFx0dGhpcy5fY3R4LmFkZEVycm9yTm9kZSh0KTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIHQ7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLmdldFBhcnNlTGlzdGVuZXJzID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLl9wYXJzZUxpc3RlbmVycyB8fCBbXTtcbn07XG5cbi8vIFJlZ2lzdGVycyB7QGNvZGUgbGlzdGVuZXJ9IHRvIHJlY2VpdmUgZXZlbnRzIGR1cmluZyB0aGUgcGFyc2luZyBwcm9jZXNzLlxuLy9cbi8vIDxwPlRvIHN1cHBvcnQgb3V0cHV0LXByZXNlcnZpbmcgZ3JhbW1hciB0cmFuc2Zvcm1hdGlvbnMgKGluY2x1ZGluZyBidXQgbm90XG4vLyBsaW1pdGVkIHRvIGxlZnQtcmVjdXJzaW9uIHJlbW92YWwsIGF1dG9tYXRlZCBsZWZ0LWZhY3RvcmluZywgYW5kXG4vLyBvcHRpbWl6ZWQgY29kZSBnZW5lcmF0aW9uKSwgY2FsbHMgdG8gbGlzdGVuZXIgbWV0aG9kcyBkdXJpbmcgdGhlIHBhcnNlXG4vLyBtYXkgZGlmZmVyIHN1YnN0YW50aWFsbHkgZnJvbSBjYWxscyBtYWRlIGJ5XG4vLyB7QGxpbmsgUGFyc2VUcmVlV2Fsa2VyLy9ERUZBVUxUfSB1c2VkIGFmdGVyIHRoZSBwYXJzZSBpcyBjb21wbGV0ZS4gSW5cbi8vIHBhcnRpY3VsYXIsIHJ1bGUgZW50cnkgYW5kIGV4aXQgZXZlbnRzIG1heSBvY2N1ciBpbiBhIGRpZmZlcmVudCBvcmRlclxuLy8gZHVyaW5nIHRoZSBwYXJzZSB0aGFuIGFmdGVyIHRoZSBwYXJzZXIuIEluIGFkZGl0aW9uLCBjYWxscyB0byBjZXJ0YWluXG4vLyBydWxlIGVudHJ5IG1ldGhvZHMgbWF5IGJlIG9taXR0ZWQuPC9wPlxuLy9cbi8vIDxwPldpdGggdGhlIGZvbGxvd2luZyBzcGVjaWZpYyBleGNlcHRpb25zLCBjYWxscyB0byBsaXN0ZW5lciBldmVudHMgYXJlXG4vLyA8ZW0+ZGV0ZXJtaW5pc3RpYzwvZW0+LCBpLmUuIGZvciBpZGVudGljYWwgaW5wdXQgdGhlIGNhbGxzIHRvIGxpc3RlbmVyXG4vLyBtZXRob2RzIHdpbGwgYmUgdGhlIHNhbWUuPC9wPlxuLy9cbi8vIDx1bD5cbi8vIDxsaT5BbHRlcmF0aW9ucyB0byB0aGUgZ3JhbW1hciB1c2VkIHRvIGdlbmVyYXRlIGNvZGUgbWF5IGNoYW5nZSB0aGVcbi8vIGJlaGF2aW9yIG9mIHRoZSBsaXN0ZW5lciBjYWxscy48L2xpPlxuLy8gPGxpPkFsdGVyYXRpb25zIHRvIHRoZSBjb21tYW5kIGxpbmUgb3B0aW9ucyBwYXNzZWQgdG8gQU5UTFIgNCB3aGVuXG4vLyBnZW5lcmF0aW5nIHRoZSBwYXJzZXIgbWF5IGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgdGhlIGxpc3RlbmVyIGNhbGxzLjwvbGk+XG4vLyA8bGk+Q2hhbmdpbmcgdGhlIHZlcnNpb24gb2YgdGhlIEFOVExSIFRvb2wgdXNlZCB0byBnZW5lcmF0ZSB0aGUgcGFyc2VyXG4vLyBtYXkgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiB0aGUgbGlzdGVuZXIgY2FsbHMuPC9saT5cbi8vIDwvdWw+XG4vL1xuLy8gQHBhcmFtIGxpc3RlbmVyIHRoZSBsaXN0ZW5lciB0byBhZGRcbi8vXG4vLyBAdGhyb3dzIE51bGxQb2ludGVyRXhjZXB0aW9uIGlmIHtAY29kZX0gbGlzdGVuZXIgaXMge0Bjb2RlIG51bGx9XG4vL1xuUGFyc2VyLnByb3RvdHlwZS5hZGRQYXJzZUxpc3RlbmVyID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcblx0aWYgKGxpc3RlbmVyID09PSBudWxsKSB7XG5cdFx0dGhyb3cgXCJsaXN0ZW5lclwiO1xuXHR9XG5cdGlmICh0aGlzLl9wYXJzZUxpc3RlbmVycyA9PT0gbnVsbCkge1xuXHRcdHRoaXMuX3BhcnNlTGlzdGVuZXJzID0gW107XG5cdH1cblx0dGhpcy5fcGFyc2VMaXN0ZW5lcnMucHVzaChsaXN0ZW5lcik7XG59O1xuXG4vL1xuLy8gUmVtb3ZlIHtAY29kZSBsaXN0ZW5lcn0gZnJvbSB0aGUgbGlzdCBvZiBwYXJzZSBsaXN0ZW5lcnMuXG4vL1xuLy8gPHA+SWYge0Bjb2RlIGxpc3RlbmVyfSBpcyB7QGNvZGUgbnVsbH0gb3IgaGFzIG5vdCBiZWVuIGFkZGVkIGFzIGEgcGFyc2Vcbi8vIGxpc3RlbmVyLCB0aGlzIG1ldGhvZCBkb2VzIG5vdGhpbmcuPC9wPlxuLy8gQHBhcmFtIGxpc3RlbmVyIHRoZSBsaXN0ZW5lciB0byByZW1vdmVcbi8vXG5QYXJzZXIucHJvdG90eXBlLnJlbW92ZVBhcnNlTGlzdGVuZXIgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xuXHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwpIHtcblx0XHR2YXIgaWR4ID0gdGhpcy5fcGFyc2VMaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG5cdFx0aWYgKGlkeCA+PSAwKSB7XG5cdFx0XHR0aGlzLl9wYXJzZUxpc3RlbmVycy5zcGxpY2UoaWR4LCAxKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuX3BhcnNlTGlzdGVuZXJzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5fcGFyc2VMaXN0ZW5lcnMgPSBudWxsO1xuXHRcdH1cblx0fVxufTtcblxuLy8gUmVtb3ZlIGFsbCBwYXJzZSBsaXN0ZW5lcnMuXG5QYXJzZXIucHJvdG90eXBlLnJlbW92ZVBhcnNlTGlzdGVuZXJzID0gZnVuY3Rpb24oKSB7XG5cdHRoaXMuX3BhcnNlTGlzdGVuZXJzID0gbnVsbDtcbn07XG5cbi8vIE5vdGlmeSBhbnkgcGFyc2UgbGlzdGVuZXJzIG9mIGFuIGVudGVyIHJ1bGUgZXZlbnQuXG5QYXJzZXIucHJvdG90eXBlLnRyaWdnZXJFbnRlclJ1bGVFdmVudCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5fcGFyc2VMaXN0ZW5lcnMgIT09IG51bGwpIHtcbiAgICAgICAgdmFyIGN0eCA9IHRoaXMuX2N0eDtcblx0XHR0aGlzLl9wYXJzZUxpc3RlbmVycy5tYXAoZnVuY3Rpb24obGlzdGVuZXIpIHtcblx0XHRcdGxpc3RlbmVyLmVudGVyRXZlcnlSdWxlKGN0eCk7XG5cdFx0XHRjdHguZW50ZXJSdWxlKGxpc3RlbmVyKTtcblx0XHR9KTtcblx0fVxufTtcblxuLy9cbi8vIE5vdGlmeSBhbnkgcGFyc2UgbGlzdGVuZXJzIG9mIGFuIGV4aXQgcnVsZSBldmVudC5cbi8vXG4vLyBAc2VlIC8vYWRkUGFyc2VMaXN0ZW5lclxuLy9cblBhcnNlci5wcm90b3R5cGUudHJpZ2dlckV4aXRSdWxlRXZlbnQgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuX3BhcnNlTGlzdGVuZXJzICE9PSBudWxsKSB7XG5cdFx0Ly8gcmV2ZXJzZSBvcmRlciB3YWxrIG9mIGxpc3RlbmVyc1xuICAgICAgICB2YXIgY3R4ID0gdGhpcy5fY3R4O1xuXHRcdHRoaXMuX3BhcnNlTGlzdGVuZXJzLnNsaWNlKDApLnJldmVyc2UoKS5tYXAoZnVuY3Rpb24obGlzdGVuZXIpIHtcblx0XHRcdGN0eC5leGl0UnVsZShsaXN0ZW5lcik7XG5cdFx0XHRsaXN0ZW5lci5leGl0RXZlcnlSdWxlKGN0eCk7XG5cdFx0fSk7XG5cdH1cbn07XG5cblBhcnNlci5wcm90b3R5cGUuZ2V0VG9rZW5GYWN0b3J5ID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLl9pbnB1dC50b2tlblNvdXJjZS5fZmFjdG9yeTtcbn07XG5cbi8vIFRlbGwgb3VyIHRva2VuIHNvdXJjZSBhbmQgZXJyb3Igc3RyYXRlZ3kgYWJvdXQgYSBuZXcgd2F5IHRvIGNyZWF0ZSB0b2tlbnMuLy9cblBhcnNlci5wcm90b3R5cGUuc2V0VG9rZW5GYWN0b3J5ID0gZnVuY3Rpb24oZmFjdG9yeSkge1xuXHR0aGlzLl9pbnB1dC50b2tlblNvdXJjZS5fZmFjdG9yeSA9IGZhY3Rvcnk7XG59O1xuXG4vLyBUaGUgQVROIHdpdGggYnlwYXNzIGFsdGVybmF0aXZlcyBpcyBleHBlbnNpdmUgdG8gY3JlYXRlIHNvIHdlIGNyZWF0ZSBpdFxuLy8gbGF6aWx5LlxuLy9cbi8vIEB0aHJvd3MgVW5zdXBwb3J0ZWRPcGVyYXRpb25FeGNlcHRpb24gaWYgdGhlIGN1cnJlbnQgcGFyc2VyIGRvZXMgbm90XG4vLyBpbXBsZW1lbnQgdGhlIHtAbGluayAvL2dldFNlcmlhbGl6ZWRBVE4oKX0gbWV0aG9kLlxuLy9cblBhcnNlci5wcm90b3R5cGUuZ2V0QVROV2l0aEJ5cGFzc0FsdHMgPSBmdW5jdGlvbigpIHtcblx0dmFyIHNlcmlhbGl6ZWRBdG4gPSB0aGlzLmdldFNlcmlhbGl6ZWRBVE4oKTtcblx0aWYgKHNlcmlhbGl6ZWRBdG4gPT09IG51bGwpIHtcblx0XHR0aHJvdyBcIlRoZSBjdXJyZW50IHBhcnNlciBkb2VzIG5vdCBzdXBwb3J0IGFuIEFUTiB3aXRoIGJ5cGFzcyBhbHRlcm5hdGl2ZXMuXCI7XG5cdH1cblx0dmFyIHJlc3VsdCA9IHRoaXMuYnlwYXNzQWx0c0F0bkNhY2hlW3NlcmlhbGl6ZWRBdG5dO1xuXHRpZiAocmVzdWx0ID09PSBudWxsKSB7XG5cdFx0dmFyIGRlc2VyaWFsaXphdGlvbk9wdGlvbnMgPSBuZXcgQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucygpO1xuXHRcdGRlc2VyaWFsaXphdGlvbk9wdGlvbnMuZ2VuZXJhdGVSdWxlQnlwYXNzVHJhbnNpdGlvbnMgPSB0cnVlO1xuXHRcdHJlc3VsdCA9IG5ldyBBVE5EZXNlcmlhbGl6ZXIoZGVzZXJpYWxpemF0aW9uT3B0aW9ucylcblx0XHRcdFx0LmRlc2VyaWFsaXplKHNlcmlhbGl6ZWRBdG4pO1xuXHRcdHRoaXMuYnlwYXNzQWx0c0F0bkNhY2hlW3NlcmlhbGl6ZWRBdG5dID0gcmVzdWx0O1xuXHR9XG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG4vLyBUaGUgcHJlZmVycmVkIG1ldGhvZCBvZiBnZXR0aW5nIGEgdHJlZSBwYXR0ZXJuLiBGb3IgZXhhbXBsZSwgaGVyZSdzIGFcbi8vIHNhbXBsZSB1c2U6XG4vL1xuLy8gPHByZT5cbi8vIFBhcnNlVHJlZSB0ID0gcGFyc2VyLmV4cHIoKTtcbi8vIFBhcnNlVHJlZVBhdHRlcm4gcCA9IHBhcnNlci5jb21waWxlUGFyc2VUcmVlUGF0dGVybihcIiZsdDtJRCZndDsrMFwiLFxuLy8gTXlQYXJzZXIuUlVMRV9leHByKTtcbi8vIFBhcnNlVHJlZU1hdGNoIG0gPSBwLm1hdGNoKHQpO1xuLy8gU3RyaW5nIGlkID0gbS5nZXQoXCJJRFwiKTtcbi8vIDwvcHJlPlxuXG52YXIgTGV4ZXIgPSByZXF1aXJlKCcuL0xleGVyJykuTGV4ZXI7XG5cblBhcnNlci5wcm90b3R5cGUuY29tcGlsZVBhcnNlVHJlZVBhdHRlcm4gPSBmdW5jdGlvbihwYXR0ZXJuLCBwYXR0ZXJuUnVsZUluZGV4LCBsZXhlcikge1xuXHRsZXhlciA9IGxleGVyIHx8IG51bGw7XG5cdGlmIChsZXhlciA9PT0gbnVsbCkge1xuXHRcdGlmICh0aGlzLmdldFRva2VuU3RyZWFtKCkgIT09IG51bGwpIHtcblx0XHRcdHZhciB0b2tlblNvdXJjZSA9IHRoaXMuZ2V0VG9rZW5TdHJlYW0oKS50b2tlblNvdXJjZTtcblx0XHRcdGlmICh0b2tlblNvdXJjZSBpbnN0YW5jZW9mIExleGVyKSB7XG5cdFx0XHRcdGxleGVyID0gdG9rZW5Tb3VyY2U7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdGlmIChsZXhlciA9PT0gbnVsbCkge1xuXHRcdHRocm93IFwiUGFyc2VyIGNhbid0IGRpc2NvdmVyIGEgbGV4ZXIgdG8gdXNlXCI7XG5cdH1cblx0dmFyIG0gPSBuZXcgUGFyc2VUcmVlUGF0dGVybk1hdGNoZXIobGV4ZXIsIHRoaXMpO1xuXHRyZXR1cm4gbS5jb21waWxlKHBhdHRlcm4sIHBhdHRlcm5SdWxlSW5kZXgpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5nZXRJbnB1dFN0cmVhbSA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5nZXRUb2tlblN0cmVhbSgpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5zZXRJbnB1dFN0cmVhbSA9IGZ1bmN0aW9uKGlucHV0KSB7XG5cdHRoaXMuc2V0VG9rZW5TdHJlYW0oaW5wdXQpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5nZXRUb2tlblN0cmVhbSA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5faW5wdXQ7XG59O1xuXG4vLyBTZXQgdGhlIHRva2VuIHN0cmVhbSBhbmQgcmVzZXQgdGhlIHBhcnNlci4vL1xuUGFyc2VyLnByb3RvdHlwZS5zZXRUb2tlblN0cmVhbSA9IGZ1bmN0aW9uKGlucHV0KSB7XG5cdHRoaXMuX2lucHV0ID0gbnVsbDtcblx0dGhpcy5yZXNldCgpO1xuXHR0aGlzLl9pbnB1dCA9IGlucHV0O1xufTtcblxuLy8gTWF0Y2ggbmVlZHMgdG8gcmV0dXJuIHRoZSBjdXJyZW50IGlucHV0IHN5bWJvbCwgd2hpY2ggZ2V0cyBwdXRcbi8vIGludG8gdGhlIGxhYmVsIGZvciB0aGUgYXNzb2NpYXRlZCB0b2tlbiByZWY7IGUuZy4sIHg9SUQuXG4vL1xuUGFyc2VyLnByb3RvdHlwZS5nZXRDdXJyZW50VG9rZW4gPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuX2lucHV0LkxUKDEpO1xufTtcblxuUGFyc2VyLnByb3RvdHlwZS5ub3RpZnlFcnJvckxpc3RlbmVycyA9IGZ1bmN0aW9uKG1zZywgb2ZmZW5kaW5nVG9rZW4sIGVycikge1xuXHRvZmZlbmRpbmdUb2tlbiA9IG9mZmVuZGluZ1Rva2VuIHx8IG51bGw7XG5cdGVyciA9IGVyciB8fCBudWxsO1xuXHRpZiAob2ZmZW5kaW5nVG9rZW4gPT09IG51bGwpIHtcblx0XHRvZmZlbmRpbmdUb2tlbiA9IHRoaXMuZ2V0Q3VycmVudFRva2VuKCk7XG5cdH1cblx0dGhpcy5fc3ludGF4RXJyb3JzICs9IDE7XG5cdHZhciBsaW5lID0gb2ZmZW5kaW5nVG9rZW4ubGluZTtcblx0dmFyIGNvbHVtbiA9IG9mZmVuZGluZ1Rva2VuLmNvbHVtbjtcblx0dmFyIGxpc3RlbmVyID0gdGhpcy5nZXRFcnJvckxpc3RlbmVyRGlzcGF0Y2goKTtcblx0bGlzdGVuZXIuc3ludGF4RXJyb3IodGhpcywgb2ZmZW5kaW5nVG9rZW4sIGxpbmUsIGNvbHVtbiwgbXNnLCBlcnIpO1xufTtcblxuLy9cbi8vIENvbnN1bWUgYW5kIHJldHVybiB0aGUge0BsaW5rcGxhaW4gLy9nZXRDdXJyZW50VG9rZW4gY3VycmVudCBzeW1ib2x9LlxuLy9cbi8vIDxwPkUuZy4sIGdpdmVuIHRoZSBmb2xsb3dpbmcgaW5wdXQgd2l0aCB7QGNvZGUgQX0gYmVpbmcgdGhlIGN1cnJlbnRcbi8vIGxvb2thaGVhZCBzeW1ib2wsIHRoaXMgZnVuY3Rpb24gbW92ZXMgdGhlIGN1cnNvciB0byB7QGNvZGUgQn0gYW5kIHJldHVybnNcbi8vIHtAY29kZSBBfS48L3A+XG4vL1xuLy8gPHByZT5cbi8vIEEgQlxuLy8gXlxuLy8gPC9wcmU+XG4vL1xuLy8gSWYgdGhlIHBhcnNlciBpcyBub3QgaW4gZXJyb3IgcmVjb3ZlcnkgbW9kZSwgdGhlIGNvbnN1bWVkIHN5bWJvbCBpcyBhZGRlZFxuLy8gdG8gdGhlIHBhcnNlIHRyZWUgdXNpbmcge0BsaW5rIFBhcnNlclJ1bGVDb250ZXh0Ly9hZGRDaGlsZChUb2tlbil9LCBhbmRcbi8vIHtAbGluayBQYXJzZVRyZWVMaXN0ZW5lci8vdmlzaXRUZXJtaW5hbH0gaXMgY2FsbGVkIG9uIGFueSBwYXJzZSBsaXN0ZW5lcnMuXG4vLyBJZiB0aGUgcGFyc2VyIDxlbT5pczwvZW0+IGluIGVycm9yIHJlY292ZXJ5IG1vZGUsIHRoZSBjb25zdW1lZCBzeW1ib2wgaXNcbi8vIGFkZGVkIHRvIHRoZSBwYXJzZSB0cmVlIHVzaW5nXG4vLyB7QGxpbmsgUGFyc2VyUnVsZUNvbnRleHQvL2FkZEVycm9yTm9kZShUb2tlbil9LCBhbmRcbi8vIHtAbGluayBQYXJzZVRyZWVMaXN0ZW5lci8vdmlzaXRFcnJvck5vZGV9IGlzIGNhbGxlZCBvbiBhbnkgcGFyc2Vcbi8vIGxpc3RlbmVycy5cbi8vXG5QYXJzZXIucHJvdG90eXBlLmNvbnN1bWUgPSBmdW5jdGlvbigpIHtcblx0dmFyIG8gPSB0aGlzLmdldEN1cnJlbnRUb2tlbigpO1xuXHRpZiAoby50eXBlICE9PSBUb2tlbi5FT0YpIHtcblx0XHR0aGlzLmdldElucHV0U3RyZWFtKCkuY29uc3VtZSgpO1xuXHR9XG5cdHZhciBoYXNMaXN0ZW5lciA9IHRoaXMuX3BhcnNlTGlzdGVuZXJzICE9PSBudWxsICYmIHRoaXMuX3BhcnNlTGlzdGVuZXJzLmxlbmd0aCA+IDA7XG5cdGlmICh0aGlzLmJ1aWxkUGFyc2VUcmVlcyB8fCBoYXNMaXN0ZW5lcikge1xuXHRcdHZhciBub2RlO1xuXHRcdGlmICh0aGlzLl9lcnJIYW5kbGVyLmluRXJyb3JSZWNvdmVyeU1vZGUodGhpcykpIHtcblx0XHRcdG5vZGUgPSB0aGlzLl9jdHguYWRkRXJyb3JOb2RlKG8pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRub2RlID0gdGhpcy5fY3R4LmFkZFRva2VuTm9kZShvKTtcblx0XHR9XG4gICAgICAgIG5vZGUuaW52b2tpbmdTdGF0ZSA9IHRoaXMuc3RhdGU7XG5cdFx0aWYgKGhhc0xpc3RlbmVyKSB7XG5cdFx0XHR0aGlzLl9wYXJzZUxpc3RlbmVycy5tYXAoZnVuY3Rpb24obGlzdGVuZXIpIHtcblx0XHRcdFx0aWYgKG5vZGUgaW5zdGFuY2VvZiBFcnJvck5vZGUgfHwgKG5vZGUuaXNFcnJvck5vZGUgIT09IHVuZGVmaW5lZCAmJiBub2RlLmlzRXJyb3JOb2RlKCkpKSB7XG5cdFx0XHRcdFx0bGlzdGVuZXIudmlzaXRFcnJvck5vZGUobm9kZSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAobm9kZSBpbnN0YW5jZW9mIFRlcm1pbmFsTm9kZSkge1xuXHRcdFx0XHRcdGxpc3RlbmVyLnZpc2l0VGVybWluYWwobm9kZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbztcbn07XG5cblBhcnNlci5wcm90b3R5cGUuYWRkQ29udGV4dFRvUGFyc2VUcmVlID0gZnVuY3Rpb24oKSB7XG5cdC8vIGFkZCBjdXJyZW50IGNvbnRleHQgdG8gcGFyZW50IGlmIHdlIGhhdmUgYSBwYXJlbnRcblx0aWYgKHRoaXMuX2N0eC5wYXJlbnRDdHggIT09IG51bGwpIHtcblx0XHR0aGlzLl9jdHgucGFyZW50Q3R4LmFkZENoaWxkKHRoaXMuX2N0eCk7XG5cdH1cbn07XG5cbi8vIEFsd2F5cyBjYWxsZWQgYnkgZ2VuZXJhdGVkIHBhcnNlcnMgdXBvbiBlbnRyeSB0byBhIHJ1bGUuIEFjY2VzcyBmaWVsZFxuLy8ge0BsaW5rIC8vX2N0eH0gZ2V0IHRoZSBjdXJyZW50IGNvbnRleHQuXG5cblBhcnNlci5wcm90b3R5cGUuZW50ZXJSdWxlID0gZnVuY3Rpb24obG9jYWxjdHgsIHN0YXRlLCBydWxlSW5kZXgpIHtcblx0dGhpcy5zdGF0ZSA9IHN0YXRlO1xuXHR0aGlzLl9jdHggPSBsb2NhbGN0eDtcblx0dGhpcy5fY3R4LnN0YXJ0ID0gdGhpcy5faW5wdXQuTFQoMSk7XG5cdGlmICh0aGlzLmJ1aWxkUGFyc2VUcmVlcykge1xuXHRcdHRoaXMuYWRkQ29udGV4dFRvUGFyc2VUcmVlKCk7XG5cdH1cblx0aWYgKHRoaXMuX3BhcnNlTGlzdGVuZXJzICE9PSBudWxsKSB7XG5cdFx0dGhpcy50cmlnZ2VyRW50ZXJSdWxlRXZlbnQoKTtcblx0fVxufTtcblxuUGFyc2VyLnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLl9jdHguc3RvcCA9IHRoaXMuX2lucHV0LkxUKC0xKTtcblx0Ly8gdHJpZ2dlciBldmVudCBvbiBfY3R4LCBiZWZvcmUgaXQgcmV2ZXJ0cyB0byBwYXJlbnRcblx0aWYgKHRoaXMuX3BhcnNlTGlzdGVuZXJzICE9PSBudWxsKSB7XG5cdFx0dGhpcy50cmlnZ2VyRXhpdFJ1bGVFdmVudCgpO1xuXHR9XG5cdHRoaXMuc3RhdGUgPSB0aGlzLl9jdHguaW52b2tpbmdTdGF0ZTtcblx0dGhpcy5fY3R4ID0gdGhpcy5fY3R4LnBhcmVudEN0eDtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuZW50ZXJPdXRlckFsdCA9IGZ1bmN0aW9uKGxvY2FsY3R4LCBhbHROdW0pIHtcbiAgIFx0bG9jYWxjdHguc2V0QWx0TnVtYmVyKGFsdE51bSk7XG5cdC8vIGlmIHdlIGhhdmUgbmV3IGxvY2FsY3R4LCBtYWtlIHN1cmUgd2UgcmVwbGFjZSBleGlzdGluZyBjdHhcblx0Ly8gdGhhdCBpcyBwcmV2aW91cyBjaGlsZCBvZiBwYXJzZSB0cmVlXG5cdGlmICh0aGlzLmJ1aWxkUGFyc2VUcmVlcyAmJiB0aGlzLl9jdHggIT09IGxvY2FsY3R4KSB7XG5cdFx0aWYgKHRoaXMuX2N0eC5wYXJlbnRDdHggIT09IG51bGwpIHtcblx0XHRcdHRoaXMuX2N0eC5wYXJlbnRDdHgucmVtb3ZlTGFzdENoaWxkKCk7XG5cdFx0XHR0aGlzLl9jdHgucGFyZW50Q3R4LmFkZENoaWxkKGxvY2FsY3R4KTtcblx0XHR9XG5cdH1cblx0dGhpcy5fY3R4ID0gbG9jYWxjdHg7XG59O1xuXG4vLyBHZXQgdGhlIHByZWNlZGVuY2UgbGV2ZWwgZm9yIHRoZSB0b3AtbW9zdCBwcmVjZWRlbmNlIHJ1bGUuXG4vL1xuLy8gQHJldHVybiBUaGUgcHJlY2VkZW5jZSBsZXZlbCBmb3IgdGhlIHRvcC1tb3N0IHByZWNlZGVuY2UgcnVsZSwgb3IgLTEgaWZcbi8vIHRoZSBwYXJzZXIgY29udGV4dCBpcyBub3QgbmVzdGVkIHdpdGhpbiBhIHByZWNlZGVuY2UgcnVsZS5cblxuUGFyc2VyLnByb3RvdHlwZS5nZXRQcmVjZWRlbmNlID0gZnVuY3Rpb24oKSB7XG5cdGlmICh0aGlzLl9wcmVjZWRlbmNlU3RhY2subGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIC0xO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB0aGlzLl9wcmVjZWRlbmNlU3RhY2tbdGhpcy5fcHJlY2VkZW5jZVN0YWNrLmxlbmd0aC0xXTtcblx0fVxufTtcblxuUGFyc2VyLnByb3RvdHlwZS5lbnRlclJlY3Vyc2lvblJ1bGUgPSBmdW5jdGlvbihsb2NhbGN0eCwgc3RhdGUsIHJ1bGVJbmRleCxcblx0XHRwcmVjZWRlbmNlKSB7XG5cdHRoaXMuc3RhdGUgPSBzdGF0ZTtcblx0dGhpcy5fcHJlY2VkZW5jZVN0YWNrLnB1c2gocHJlY2VkZW5jZSk7XG5cdHRoaXMuX2N0eCA9IGxvY2FsY3R4O1xuXHR0aGlzLl9jdHguc3RhcnQgPSB0aGlzLl9pbnB1dC5MVCgxKTtcblx0aWYgKHRoaXMuX3BhcnNlTGlzdGVuZXJzICE9PSBudWxsKSB7XG5cdFx0dGhpcy50cmlnZ2VyRW50ZXJSdWxlRXZlbnQoKTsgLy8gc2ltdWxhdGVzIHJ1bGUgZW50cnkgZm9yXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGxlZnQtcmVjdXJzaXZlIHJ1bGVzXG5cdH1cbn07XG5cbi8vXG4vLyBMaWtlIHtAbGluayAvL2VudGVyUnVsZX0gYnV0IGZvciByZWN1cnNpdmUgcnVsZXMuXG5cblBhcnNlci5wcm90b3R5cGUucHVzaE5ld1JlY3Vyc2lvbkNvbnRleHQgPSBmdW5jdGlvbihsb2NhbGN0eCwgc3RhdGUsIHJ1bGVJbmRleCkge1xuXHR2YXIgcHJldmlvdXMgPSB0aGlzLl9jdHg7XG5cdHByZXZpb3VzLnBhcmVudEN0eCA9IGxvY2FsY3R4O1xuXHRwcmV2aW91cy5pbnZva2luZ1N0YXRlID0gc3RhdGU7XG5cdHByZXZpb3VzLnN0b3AgPSB0aGlzLl9pbnB1dC5MVCgtMSk7XG5cblx0dGhpcy5fY3R4ID0gbG9jYWxjdHg7XG5cdHRoaXMuX2N0eC5zdGFydCA9IHByZXZpb3VzLnN0YXJ0O1xuXHRpZiAodGhpcy5idWlsZFBhcnNlVHJlZXMpIHtcblx0XHR0aGlzLl9jdHguYWRkQ2hpbGQocHJldmlvdXMpO1xuXHR9XG5cdGlmICh0aGlzLl9wYXJzZUxpc3RlbmVycyAhPT0gbnVsbCkge1xuXHRcdHRoaXMudHJpZ2dlckVudGVyUnVsZUV2ZW50KCk7IC8vIHNpbXVsYXRlcyBydWxlIGVudHJ5IGZvclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBsZWZ0LXJlY3Vyc2l2ZSBydWxlc1xuXHR9XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLnVucm9sbFJlY3Vyc2lvbkNvbnRleHRzID0gZnVuY3Rpb24ocGFyZW50Q3R4KSB7XG5cdHRoaXMuX3ByZWNlZGVuY2VTdGFjay5wb3AoKTtcblx0dGhpcy5fY3R4LnN0b3AgPSB0aGlzLl9pbnB1dC5MVCgtMSk7XG5cdHZhciByZXRDdHggPSB0aGlzLl9jdHg7IC8vIHNhdmUgY3VycmVudCBjdHggKHJldHVybiB2YWx1ZSlcblx0Ly8gdW5yb2xsIHNvIF9jdHggaXMgYXMgaXQgd2FzIGJlZm9yZSBjYWxsIHRvIHJlY3Vyc2l2ZSBtZXRob2Rcblx0aWYgKHRoaXMuX3BhcnNlTGlzdGVuZXJzICE9PSBudWxsKSB7XG5cdFx0d2hpbGUgKHRoaXMuX2N0eCAhPT0gcGFyZW50Q3R4KSB7XG5cdFx0XHR0aGlzLnRyaWdnZXJFeGl0UnVsZUV2ZW50KCk7XG5cdFx0XHR0aGlzLl9jdHggPSB0aGlzLl9jdHgucGFyZW50Q3R4O1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHR0aGlzLl9jdHggPSBwYXJlbnRDdHg7XG5cdH1cblx0Ly8gaG9vayBpbnRvIHRyZWVcblx0cmV0Q3R4LnBhcmVudEN0eCA9IHBhcmVudEN0eDtcblx0aWYgKHRoaXMuYnVpbGRQYXJzZVRyZWVzICYmIHBhcmVudEN0eCAhPT0gbnVsbCkge1xuXHRcdC8vIGFkZCByZXR1cm4gY3R4IGludG8gaW52b2tpbmcgcnVsZSdzIHRyZWVcblx0XHRwYXJlbnRDdHguYWRkQ2hpbGQocmV0Q3R4KTtcblx0fVxufTtcblxuUGFyc2VyLnByb3RvdHlwZS5nZXRJbnZva2luZ0NvbnRleHQgPSBmdW5jdGlvbihydWxlSW5kZXgpIHtcblx0dmFyIGN0eCA9IHRoaXMuX2N0eDtcblx0d2hpbGUgKGN0eCAhPT0gbnVsbCkge1xuXHRcdGlmIChjdHgucnVsZUluZGV4ID09PSBydWxlSW5kZXgpIHtcblx0XHRcdHJldHVybiBjdHg7XG5cdFx0fVxuXHRcdGN0eCA9IGN0eC5wYXJlbnRDdHg7XG5cdH1cblx0cmV0dXJuIG51bGw7XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLnByZWNwcmVkID0gZnVuY3Rpb24obG9jYWxjdHgsIHByZWNlZGVuY2UpIHtcblx0cmV0dXJuIHByZWNlZGVuY2UgPj0gdGhpcy5fcHJlY2VkZW5jZVN0YWNrW3RoaXMuX3ByZWNlZGVuY2VTdGFjay5sZW5ndGgtMV07XG59O1xuXG5QYXJzZXIucHJvdG90eXBlLmluQ29udGV4dCA9IGZ1bmN0aW9uKGNvbnRleHQpIHtcblx0Ly8gVE9ETzogdXNlZnVsIGluIHBhcnNlcj9cblx0cmV0dXJuIGZhbHNlO1xufTtcblxuLy9cbi8vIENoZWNrcyB3aGV0aGVyIG9yIG5vdCB7QGNvZGUgc3ltYm9sfSBjYW4gZm9sbG93IHRoZSBjdXJyZW50IHN0YXRlIGluIHRoZVxuLy8gQVROLiBUaGUgYmVoYXZpb3Igb2YgdGhpcyBtZXRob2QgaXMgZXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nLCBidXQgaXNcbi8vIGltcGxlbWVudGVkIHN1Y2ggdGhhdCB0aGUgY29tcGxldGUgY29udGV4dC1zZW5zaXRpdmUgZm9sbG93IHNldCBkb2VzIG5vdFxuLy8gbmVlZCB0byBiZSBleHBsaWNpdGx5IGNvbnN0cnVjdGVkLlxuLy9cbi8vIDxwcmU+XG4vLyByZXR1cm4gZ2V0RXhwZWN0ZWRUb2tlbnMoKS5jb250YWlucyhzeW1ib2wpO1xuLy8gPC9wcmU+XG4vL1xuLy8gQHBhcmFtIHN5bWJvbCB0aGUgc3ltYm9sIHR5cGUgdG8gY2hlY2tcbi8vIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHtAY29kZSBzeW1ib2x9IGNhbiBmb2xsb3cgdGhlIGN1cnJlbnQgc3RhdGUgaW5cbi8vIHRoZSBBVE4sIG90aGVyd2lzZSB7QGNvZGUgZmFsc2V9LlxuXG5QYXJzZXIucHJvdG90eXBlLmlzRXhwZWN0ZWRUb2tlbiA9IGZ1bmN0aW9uKHN5bWJvbCkge1xuXHR2YXIgYXRuID0gdGhpcy5faW50ZXJwLmF0bjtcblx0dmFyIGN0eCA9IHRoaXMuX2N0eDtcblx0dmFyIHMgPSBhdG4uc3RhdGVzW3RoaXMuc3RhdGVdO1xuXHR2YXIgZm9sbG93aW5nID0gYXRuLm5leHRUb2tlbnMocyk7XG5cdGlmIChmb2xsb3dpbmcuY29udGFpbnMoc3ltYm9sKSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGlmICghZm9sbG93aW5nLmNvbnRhaW5zKFRva2VuLkVQU0lMT04pKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cdHdoaWxlIChjdHggIT09IG51bGwgJiYgY3R4Lmludm9raW5nU3RhdGUgPj0gMCAmJiBmb2xsb3dpbmcuY29udGFpbnMoVG9rZW4uRVBTSUxPTikpIHtcblx0XHR2YXIgaW52b2tpbmdTdGF0ZSA9IGF0bi5zdGF0ZXNbY3R4Lmludm9raW5nU3RhdGVdO1xuXHRcdHZhciBydCA9IGludm9raW5nU3RhdGUudHJhbnNpdGlvbnNbMF07XG5cdFx0Zm9sbG93aW5nID0gYXRuLm5leHRUb2tlbnMocnQuZm9sbG93U3RhdGUpO1xuXHRcdGlmIChmb2xsb3dpbmcuY29udGFpbnMoc3ltYm9sKSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdGN0eCA9IGN0eC5wYXJlbnRDdHg7XG5cdH1cblx0aWYgKGZvbGxvd2luZy5jb250YWlucyhUb2tlbi5FUFNJTE9OKSAmJiBzeW1ib2wgPT09IFRva2VuLkVPRikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufTtcblxuLy8gQ29tcHV0ZXMgdGhlIHNldCBvZiBpbnB1dCBzeW1ib2xzIHdoaWNoIGNvdWxkIGZvbGxvdyB0aGUgY3VycmVudCBwYXJzZXJcbi8vIHN0YXRlIGFuZCBjb250ZXh0LCBhcyBnaXZlbiBieSB7QGxpbmsgLy9nZXRTdGF0ZX0gYW5kIHtAbGluayAvL2dldENvbnRleHR9LFxuLy8gcmVzcGVjdGl2ZWx5LlxuLy9cbi8vIEBzZWUgQVROLy9nZXRFeHBlY3RlZFRva2VucyhpbnQsIFJ1bGVDb250ZXh0KVxuLy9cblBhcnNlci5wcm90b3R5cGUuZ2V0RXhwZWN0ZWRUb2tlbnMgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuX2ludGVycC5hdG4uZ2V0RXhwZWN0ZWRUb2tlbnModGhpcy5zdGF0ZSwgdGhpcy5fY3R4KTtcbn07XG5cblBhcnNlci5wcm90b3R5cGUuZ2V0RXhwZWN0ZWRUb2tlbnNXaXRoaW5DdXJyZW50UnVsZSA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgYXRuID0gdGhpcy5faW50ZXJwLmF0bjtcblx0dmFyIHMgPSBhdG4uc3RhdGVzW3RoaXMuc3RhdGVdO1xuXHRyZXR1cm4gYXRuLm5leHRUb2tlbnMocyk7XG59O1xuXG4vLyBHZXQgYSBydWxlJ3MgaW5kZXggKGkuZS4sIHtAY29kZSBSVUxFX3J1bGVOYW1lfSBmaWVsZCkgb3IgLTEgaWYgbm90IGZvdW5kLi8vXG5QYXJzZXIucHJvdG90eXBlLmdldFJ1bGVJbmRleCA9IGZ1bmN0aW9uKHJ1bGVOYW1lKSB7XG5cdHZhciBydWxlSW5kZXggPSB0aGlzLmdldFJ1bGVJbmRleE1hcCgpW3J1bGVOYW1lXTtcblx0aWYgKHJ1bGVJbmRleCAhPT0gbnVsbCkge1xuXHRcdHJldHVybiBydWxlSW5kZXg7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIC0xO1xuXHR9XG59O1xuXG4vLyBSZXR1cm4gTGlzdCZsdDtTdHJpbmcmZ3Q7IG9mIHRoZSBydWxlIG5hbWVzIGluIHlvdXIgcGFyc2VyIGluc3RhbmNlXG4vLyBsZWFkaW5nIHVwIHRvIGEgY2FsbCB0byB0aGUgY3VycmVudCBydWxlLiBZb3UgY291bGQgb3ZlcnJpZGUgaWZcbi8vIHlvdSB3YW50IG1vcmUgZGV0YWlscyBzdWNoIGFzIHRoZSBmaWxlL2xpbmUgaW5mbyBvZiB3aGVyZVxuLy8gaW4gdGhlIEFUTiBhIHJ1bGUgaXMgaW52b2tlZC5cbi8vXG4vLyB0aGlzIGlzIHZlcnkgdXNlZnVsIGZvciBlcnJvciBtZXNzYWdlcy5cbi8vXG5QYXJzZXIucHJvdG90eXBlLmdldFJ1bGVJbnZvY2F0aW9uU3RhY2sgPSBmdW5jdGlvbihwKSB7XG5cdHAgPSBwIHx8IG51bGw7XG5cdGlmIChwID09PSBudWxsKSB7XG5cdFx0cCA9IHRoaXMuX2N0eDtcblx0fVxuXHR2YXIgc3RhY2sgPSBbXTtcblx0d2hpbGUgKHAgIT09IG51bGwpIHtcblx0XHQvLyBjb21wdXRlIHdoYXQgZm9sbG93cyB3aG8gaW52b2tlZCB1c1xuXHRcdHZhciBydWxlSW5kZXggPSBwLnJ1bGVJbmRleDtcblx0XHRpZiAocnVsZUluZGV4IDwgMCkge1xuXHRcdFx0c3RhY2sucHVzaChcIm4vYVwiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c3RhY2sucHVzaCh0aGlzLnJ1bGVOYW1lc1tydWxlSW5kZXhdKTtcblx0XHR9XG5cdFx0cCA9IHAucGFyZW50Q3R4O1xuXHR9XG5cdHJldHVybiBzdGFjaztcbn07XG5cbi8vIEZvciBkZWJ1Z2dpbmcgYW5kIG90aGVyIHB1cnBvc2VzLi8vXG5QYXJzZXIucHJvdG90eXBlLmdldERGQVN0cmluZ3MgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuX2ludGVycC5kZWNpc2lvblRvREZBLnRvU3RyaW5nKCk7XG59O1xuLy8gRm9yIGRlYnVnZ2luZyBhbmQgb3RoZXIgcHVycG9zZXMuLy9cblBhcnNlci5wcm90b3R5cGUuZHVtcERGQSA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgc2Vlbk9uZSA9IGZhbHNlO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuX2ludGVycC5kZWNpc2lvblRvREZBLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGRmYSA9IHRoaXMuX2ludGVycC5kZWNpc2lvblRvREZBW2ldO1xuXHRcdGlmIChkZmEuc3RhdGVzLmxlbmd0aCA+IDApIHtcblx0XHRcdGlmIChzZWVuT25lKSB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnByaW50ZXIucHJpbnRsbihcIkRlY2lzaW9uIFwiICsgZGZhLmRlY2lzaW9uICsgXCI6XCIpO1xuXHRcdFx0dGhpcy5wcmludGVyLnByaW50KGRmYS50b1N0cmluZyh0aGlzLmxpdGVyYWxOYW1lcywgdGhpcy5zeW1ib2xpY05hbWVzKSk7XG5cdFx0XHRzZWVuT25lID0gdHJ1ZTtcblx0XHR9XG5cdH1cbn07XG5cbi8qXG5cIlx0XHRcdHByaW50ZXIgPSBmdW5jdGlvbigpIHtcXHJcXG5cIiArXG5cIlx0XHRcdFx0dGhpcy5wcmludGxuID0gZnVuY3Rpb24ocykgeyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnb3V0cHV0JykgKz0gcyArICdcXFxcbic7IH1cXHJcXG5cIiArXG5cIlx0XHRcdFx0dGhpcy5wcmludCA9IGZ1bmN0aW9uKHMpIHsgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ291dHB1dCcpICs9IHM7IH1cXHJcXG5cIiArXG5cIlx0XHRcdH07XFxyXFxuXCIgK1xuKi9cblxuUGFyc2VyLnByb3RvdHlwZS5nZXRTb3VyY2VOYW1lID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLl9pbnB1dC5zb3VyY2VOYW1lO1xufTtcblxuLy8gRHVyaW5nIGEgcGFyc2UgaXMgc29tZXRpbWVzIHVzZWZ1bCB0byBsaXN0ZW4gaW4gb24gdGhlIHJ1bGUgZW50cnkgYW5kIGV4aXRcbi8vIGV2ZW50cyBhcyB3ZWxsIGFzIHRva2VuIG1hdGNoZXMuIHRoaXMgaXMgZm9yIHF1aWNrIGFuZCBkaXJ0eSBkZWJ1Z2dpbmcuXG4vL1xuUGFyc2VyLnByb3RvdHlwZS5zZXRUcmFjZSA9IGZ1bmN0aW9uKHRyYWNlKSB7XG5cdGlmICghdHJhY2UpIHtcblx0XHR0aGlzLnJlbW92ZVBhcnNlTGlzdGVuZXIodGhpcy5fdHJhY2VyKTtcblx0XHR0aGlzLl90cmFjZXIgPSBudWxsO1xuXHR9IGVsc2Uge1xuXHRcdGlmICh0aGlzLl90cmFjZXIgIT09IG51bGwpIHtcblx0XHRcdHRoaXMucmVtb3ZlUGFyc2VMaXN0ZW5lcih0aGlzLl90cmFjZXIpO1xuXHRcdH1cblx0XHR0aGlzLl90cmFjZXIgPSBuZXcgVHJhY2VMaXN0ZW5lcih0aGlzKTtcblx0XHR0aGlzLmFkZFBhcnNlTGlzdGVuZXIodGhpcy5fdHJhY2VyKTtcblx0fVxufTtcblxuZXhwb3J0cy5QYXJzZXIgPSBQYXJzZXI7IiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG4vLyogQSBydWxlIGludm9jYXRpb24gcmVjb3JkIGZvciBwYXJzaW5nLlxuLy9cbi8vICBDb250YWlucyBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IHJ1bGUgbm90IHN0b3JlZCBpbiB0aGVcbi8vICBSdWxlQ29udGV4dC4gSXQgaGFuZGxlcyBwYXJzZSB0cmVlIGNoaWxkcmVuIGxpc3QsIEFueSBBVE4gc3RhdGVcbi8vICB0cmFjaW5nLCBhbmQgdGhlIGRlZmF1bHQgdmFsdWVzIGF2YWlsYWJsZSBmb3IgcnVsZSBpbmRpY2F0aW9uczpcbi8vICBzdGFydCwgc3RvcCwgcnVsZSBpbmRleCwgY3VycmVudCBhbHQgbnVtYmVyLCBjdXJyZW50XG4vLyAgQVROIHN0YXRlLlxuLy9cbi8vICBTdWJjbGFzc2VzIG1hZGUgZm9yIGVhY2ggcnVsZSBhbmQgZ3JhbW1hciB0cmFjayB0aGUgcGFyYW1ldGVycyxcbi8vICByZXR1cm4gdmFsdWVzLCBsb2NhbHMsIGFuZCBsYWJlbHMgc3BlY2lmaWMgdG8gdGhhdCBydWxlLiBUaGVzZVxuLy8gIGFyZSB0aGUgb2JqZWN0cyB0aGF0IGFyZSByZXR1cm5lZCBmcm9tIHJ1bGVzLlxuLy9cbi8vICBOb3RlIHRleHQgaXMgbm90IGFuIGFjdHVhbCBmaWVsZCBvZiBhIHJ1bGUgcmV0dXJuIHZhbHVlOyBpdCBpcyBjb21wdXRlZFxuLy8gIGZyb20gc3RhcnQgYW5kIHN0b3AgdXNpbmcgdGhlIGlucHV0IHN0cmVhbSdzIHRvU3RyaW5nKCkgbWV0aG9kLiAgSVxuLy8gIGNvdWxkIGFkZCBhIGN0b3IgdG8gdGhpcyBzbyB0aGF0IHdlIGNhbiBwYXNzIGluIGFuZCBzdG9yZSB0aGUgaW5wdXRcbi8vICBzdHJlYW0sIGJ1dCBJJ20gbm90IHN1cmUgd2Ugd2FudCB0byBkbyB0aGF0LiAgSXQgd291bGQgc2VlbSB0byBiZSB1bmRlZmluZWRcbi8vICB0byBnZXQgdGhlIC50ZXh0IHByb3BlcnR5IGFueXdheSBpZiB0aGUgcnVsZSBtYXRjaGVzIHRva2VucyBmcm9tIG11bHRpcGxlXG4vLyAgaW5wdXQgc3RyZWFtcy5cbi8vXG4vLyAgSSBkbyBub3QgdXNlIGdldHRlcnMgZm9yIGZpZWxkcyBvZiBvYmplY3RzIHRoYXQgYXJlIHVzZWQgc2ltcGx5IHRvXG4vLyAgZ3JvdXAgdmFsdWVzIHN1Y2ggYXMgdGhpcyBhZ2dyZWdhdGUuICBUaGUgZ2V0dGVycy9zZXR0ZXJzIGFyZSB0aGVyZSB0b1xuLy8gIHNhdGlzZnkgdGhlIHN1cGVyY2xhc3MgaW50ZXJmYWNlLlxuXG52YXIgUnVsZUNvbnRleHQgPSByZXF1aXJlKCcuL1J1bGVDb250ZXh0JykuUnVsZUNvbnRleHQ7XG52YXIgVHJlZSA9IHJlcXVpcmUoJy4vdHJlZS9UcmVlJyk7XG52YXIgSU5WQUxJRF9JTlRFUlZBTCA9IFRyZWUuSU5WQUxJRF9JTlRFUlZBTDtcbnZhciBUZXJtaW5hbE5vZGUgPSBUcmVlLlRlcm1pbmFsTm9kZTtcbnZhciBUZXJtaW5hbE5vZGVJbXBsID0gVHJlZS5UZXJtaW5hbE5vZGVJbXBsO1xudmFyIEVycm9yTm9kZUltcGwgPSBUcmVlLkVycm9yTm9kZUltcGw7XG52YXIgSW50ZXJ2YWwgPSByZXF1aXJlKFwiLi9JbnRlcnZhbFNldFwiKS5JbnRlcnZhbDtcblxuZnVuY3Rpb24gUGFyc2VyUnVsZUNvbnRleHQocGFyZW50LCBpbnZva2luZ1N0YXRlTnVtYmVyKSB7XG5cdHBhcmVudCA9IHBhcmVudCB8fCBudWxsO1xuXHRpbnZva2luZ1N0YXRlTnVtYmVyID0gaW52b2tpbmdTdGF0ZU51bWJlciB8fCBudWxsO1xuXHRSdWxlQ29udGV4dC5jYWxsKHRoaXMsIHBhcmVudCwgaW52b2tpbmdTdGF0ZU51bWJlcik7XG5cdHRoaXMucnVsZUluZGV4ID0gLTE7XG4gICAgLy8gKiBJZiB3ZSBhcmUgZGVidWdnaW5nIG9yIGJ1aWxkaW5nIGEgcGFyc2UgdHJlZSBmb3IgYSB2aXNpdG9yLFxuICAgIC8vIHdlIG5lZWQgdG8gdHJhY2sgYWxsIG9mIHRoZSB0b2tlbnMgYW5kIHJ1bGUgaW52b2NhdGlvbnMgYXNzb2NpYXRlZFxuICAgIC8vIHdpdGggdGhpcyBydWxlJ3MgY29udGV4dC4gVGhpcyBpcyBlbXB0eSBmb3IgcGFyc2luZyB3L28gdHJlZSBjb25zdHIuXG4gICAgLy8gb3BlcmF0aW9uIGJlY2F1c2Ugd2UgZG9uJ3QgdGhlIG5lZWQgdG8gdHJhY2sgdGhlIGRldGFpbHMgYWJvdXRcbiAgICAvLyBob3cgd2UgcGFyc2UgdGhpcyBydWxlLlxuICAgIC8vIC9cbiAgICB0aGlzLmNoaWxkcmVuID0gbnVsbDtcbiAgICB0aGlzLnN0YXJ0ID0gbnVsbDtcbiAgICB0aGlzLnN0b3AgPSBudWxsO1xuICAgIC8vIFRoZSBleGNlcHRpb24gdGhhdCBmb3JjZWQgdGhpcyBydWxlIHRvIHJldHVybi4gSWYgdGhlIHJ1bGUgc3VjY2Vzc2Z1bGx5XG4gICAgLy8gY29tcGxldGVkLCB0aGlzIGlzIHtAY29kZSBudWxsfS5cbiAgICB0aGlzLmV4Y2VwdGlvbiA9IG51bGw7XG59XG5cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUnVsZUNvbnRleHQucHJvdG90eXBlKTtcblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnNlclJ1bGVDb250ZXh0O1xuXG4vLyAqIENPUFkgYSBjdHggKEknbSBkZWxpYmVyYXRlbHkgbm90IHVzaW5nIGNvcHkgY29uc3RydWN0b3IpLy8vXG5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUuY29weUZyb20gPSBmdW5jdGlvbihjdHgpIHtcbiAgICAvLyBmcm9tIFJ1bGVDb250ZXh0XG4gICAgdGhpcy5wYXJlbnRDdHggPSBjdHgucGFyZW50Q3R4O1xuICAgIHRoaXMuaW52b2tpbmdTdGF0ZSA9IGN0eC5pbnZva2luZ1N0YXRlO1xuICAgIHRoaXMuY2hpbGRyZW4gPSBudWxsO1xuICAgIHRoaXMuc3RhcnQgPSBjdHguc3RhcnQ7XG4gICAgdGhpcy5zdG9wID0gY3R4LnN0b3A7XG4gICAgLy8gY29weSBhbnkgZXJyb3Igbm9kZXMgdG8gYWx0IGxhYmVsIG5vZGVcbiAgICBpZihjdHguY2hpbGRyZW4pIHtcbiAgICAgICAgdGhpcy5jaGlsZHJlbiA9IFtdO1xuICAgICAgICAvLyByZXNldCBwYXJlbnQgcG9pbnRlciBmb3IgYW55IGVycm9yIG5vZGVzXG4gICAgXHRjdHguY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKGNoaWxkKSB7XG4gICAgXHRcdGlmIChjaGlsZCBpbnN0YW5jZW9mIEVycm9yTm9kZUltcGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgICAgICAgICAgICAgIGNoaWxkLnBhcmVudEN0eCA9IHRoaXM7XG4gICAgICAgICAgICB9XG5cdFx0fSwgdGhpcyk7XG5cdH1cbn07XG5cbi8vIERvdWJsZSBkaXNwYXRjaCBtZXRob2RzIGZvciBsaXN0ZW5lcnNcblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5lbnRlclJ1bGUgPSBmdW5jdGlvbihsaXN0ZW5lcikge1xufTtcblxuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlLmV4aXRSdWxlID0gZnVuY3Rpb24obGlzdGVuZXIpIHtcbn07XG5cbi8vICogRG9lcyBub3Qgc2V0IHBhcmVudCBsaW5rOyBvdGhlciBhZGQgbWV0aG9kcyBkbyB0aGF0Ly8vXG5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUuYWRkQ2hpbGQgPSBmdW5jdGlvbihjaGlsZCkge1xuICAgIGlmICh0aGlzLmNoaWxkcmVuID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICB9XG4gICAgdGhpcy5jaGlsZHJlbi5wdXNoKGNoaWxkKTtcbiAgICByZXR1cm4gY2hpbGQ7XG59O1xuXG4vLyAqIFVzZWQgYnkgZW50ZXJPdXRlckFsdCB0byB0b3NzIG91dCBhIFJ1bGVDb250ZXh0IHByZXZpb3VzbHkgYWRkZWQgYXNcbi8vIHdlIGVudGVyZWQgYSBydWxlLiBJZiB3ZSBoYXZlIC8vIGxhYmVsLCB3ZSB3aWxsIG5lZWQgdG8gcmVtb3ZlXG4vLyBnZW5lcmljIHJ1bGVDb250ZXh0IG9iamVjdC5cbi8vIC9cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5yZW1vdmVMYXN0Q2hpbGQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5jaGlsZHJlbiAhPT0gbnVsbCkge1xuICAgICAgICB0aGlzLmNoaWxkcmVuLnBvcCgpO1xuICAgIH1cbn07XG5cblBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5hZGRUb2tlbk5vZGUgPSBmdW5jdGlvbih0b2tlbikge1xuICAgIHZhciBub2RlID0gbmV3IFRlcm1pbmFsTm9kZUltcGwodG9rZW4pO1xuICAgIHRoaXMuYWRkQ2hpbGQobm9kZSk7XG4gICAgbm9kZS5wYXJlbnRDdHggPSB0aGlzO1xuICAgIHJldHVybiBub2RlO1xufTtcblxuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlLmFkZEVycm9yTm9kZSA9IGZ1bmN0aW9uKGJhZFRva2VuKSB7XG4gICAgdmFyIG5vZGUgPSBuZXcgRXJyb3JOb2RlSW1wbChiYWRUb2tlbik7XG4gICAgdGhpcy5hZGRDaGlsZChub2RlKTtcbiAgICBub2RlLnBhcmVudEN0eCA9IHRoaXM7XG4gICAgcmV0dXJuIG5vZGU7XG59O1xuXG5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0Q2hpbGQgPSBmdW5jdGlvbihpLCB0eXBlKSB7XG5cdHR5cGUgPSB0eXBlIHx8IG51bGw7XG5cdGlmICh0aGlzLmNoaWxkcmVuID09PSBudWxsIHx8IGkgPCAwIHx8IGkgPj0gdGhpcy5jaGlsZHJlbi5sZW5ndGgpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRpZiAodHlwZSA9PT0gbnVsbCkge1xuXHRcdHJldHVybiB0aGlzLmNoaWxkcmVuW2ldO1xuXHR9IGVsc2Uge1xuXHRcdGZvcih2YXIgaj0wOyBqPHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBqKyspIHtcblx0XHRcdHZhciBjaGlsZCA9IHRoaXMuY2hpbGRyZW5bal07XG5cdFx0XHRpZihjaGlsZCBpbnN0YW5jZW9mIHR5cGUpIHtcblx0XHRcdFx0aWYoaT09PTApIHtcblx0XHRcdFx0XHRyZXR1cm4gY2hpbGQ7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aSAtPSAxO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBudWxsO1xuICAgIH1cbn07XG5cblxuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlLmdldFRva2VuID0gZnVuY3Rpb24odHR5cGUsIGkpIHtcblx0aWYgKHRoaXMuY2hpbGRyZW4gPT09IG51bGwgfHwgaSA8IDAgfHwgaSA+PSB0aGlzLmNoaWxkcmVuLmxlbmd0aCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGZvcih2YXIgaj0wOyBqPHRoaXMuY2hpbGRyZW4ubGVuZ3RoOyBqKyspIHtcblx0XHR2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2pdO1xuXHRcdGlmIChjaGlsZCBpbnN0YW5jZW9mIFRlcm1pbmFsTm9kZSkge1xuXHRcdFx0aWYgKGNoaWxkLnN5bWJvbC50eXBlID09PSB0dHlwZSkge1xuXHRcdFx0XHRpZihpPT09MCkge1xuXHRcdFx0XHRcdHJldHVybiBjaGlsZDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpIC09IDE7XG5cdFx0XHRcdH1cblx0XHRcdH1cbiAgICAgICAgfVxuXHR9XG4gICAgcmV0dXJuIG51bGw7XG59O1xuXG5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0VG9rZW5zID0gZnVuY3Rpb24odHR5cGUgKSB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW49PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfSBlbHNlIHtcblx0XHR2YXIgdG9rZW5zID0gW107XG5cdFx0Zm9yKHZhciBqPTA7IGo8dGhpcy5jaGlsZHJlbi5sZW5ndGg7IGorKykge1xuXHRcdFx0dmFyIGNoaWxkID0gdGhpcy5jaGlsZHJlbltqXTtcblx0XHRcdGlmIChjaGlsZCBpbnN0YW5jZW9mIFRlcm1pbmFsTm9kZSkge1xuXHRcdFx0XHRpZiAoY2hpbGQuc3ltYm9sLnR5cGUgPT09IHR0eXBlKSB7XG5cdFx0XHRcdFx0dG9rZW5zLnB1c2goY2hpbGQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0b2tlbnM7XG4gICAgfVxufTtcblxuUGFyc2VyUnVsZUNvbnRleHQucHJvdG90eXBlLmdldFR5cGVkUnVsZUNvbnRleHQgPSBmdW5jdGlvbihjdHhUeXBlLCBpKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2hpbGQoaSwgY3R4VHlwZSk7XG59O1xuXG5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0VHlwZWRSdWxlQ29udGV4dHMgPSBmdW5jdGlvbihjdHhUeXBlKSB7XG4gICAgaWYgKHRoaXMuY2hpbGRyZW49PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gW107XG4gICAgfSBlbHNlIHtcblx0XHR2YXIgY29udGV4dHMgPSBbXTtcblx0XHRmb3IodmFyIGo9MDsgajx0aGlzLmNoaWxkcmVuLmxlbmd0aDsgaisrKSB7XG5cdFx0XHR2YXIgY2hpbGQgPSB0aGlzLmNoaWxkcmVuW2pdO1xuXHRcdFx0aWYgKGNoaWxkIGluc3RhbmNlb2YgY3R4VHlwZSkge1xuXHRcdFx0XHRjb250ZXh0cy5wdXNoKGNoaWxkKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNvbnRleHRzO1xuXHR9XG59O1xuXG5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0Q2hpbGRDb3VudCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5jaGlsZHJlbj09PSBudWxsKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMuY2hpbGRyZW4ubGVuZ3RoO1xuXHR9XG59O1xuXG5QYXJzZXJSdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0U291cmNlSW50ZXJ2YWwgPSBmdW5jdGlvbigpIHtcbiAgICBpZiggdGhpcy5zdGFydCA9PT0gbnVsbCB8fCB0aGlzLnN0b3AgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIElOVkFMSURfSU5URVJWQUw7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBJbnRlcnZhbCh0aGlzLnN0YXJ0LnRva2VuSW5kZXgsIHRoaXMuc3RvcC50b2tlbkluZGV4KTtcbiAgICB9XG59O1xuXG5SdWxlQ29udGV4dC5FTVBUWSA9IG5ldyBQYXJzZXJSdWxlQ29udGV4dCgpO1xuXG5mdW5jdGlvbiBJbnRlcnByZXRlclJ1bGVDb250ZXh0KHBhcmVudCwgaW52b2tpbmdTdGF0ZU51bWJlciwgcnVsZUluZGV4KSB7XG5cdFBhcnNlclJ1bGVDb250ZXh0LmNhbGwocGFyZW50LCBpbnZva2luZ1N0YXRlTnVtYmVyKTtcbiAgICB0aGlzLnJ1bGVJbmRleCA9IHJ1bGVJbmRleDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuSW50ZXJwcmV0ZXJSdWxlQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFBhcnNlclJ1bGVDb250ZXh0LnByb3RvdHlwZSk7XG5JbnRlcnByZXRlclJ1bGVDb250ZXh0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEludGVycHJldGVyUnVsZUNvbnRleHQ7XG5cbmV4cG9ydHMuUGFyc2VyUnVsZUNvbnRleHQgPSBQYXJzZXJSdWxlQ29udGV4dDsiLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy8vXG5cbnZhciBSdWxlQ29udGV4dCA9IHJlcXVpcmUoJy4vUnVsZUNvbnRleHQnKS5SdWxlQ29udGV4dDtcbnZhciBIYXNoID0gcmVxdWlyZSgnLi9VdGlscycpLkhhc2g7XG5cbmZ1bmN0aW9uIFByZWRpY3Rpb25Db250ZXh0KGNhY2hlZEhhc2hDb2RlKSB7XG5cdHRoaXMuY2FjaGVkSGFzaENvZGUgPSBjYWNoZWRIYXNoQ29kZTtcbn1cblxuLy8gUmVwcmVzZW50cyB7QGNvZGUgJH0gaW4gbG9jYWwgY29udGV4dCBwcmVkaWN0aW9uLCB3aGljaCBtZWFucyB3aWxkY2FyZC5cbi8vIHtAY29kZS8vK3ggPS8vfS5cbi8vIC9cblByZWRpY3Rpb25Db250ZXh0LkVNUFRZID0gbnVsbDtcblxuLy8gUmVwcmVzZW50cyB7QGNvZGUgJH0gaW4gYW4gYXJyYXkgaW4gZnVsbCBjb250ZXh0IG1vZGUsIHdoZW4ge0Bjb2RlICR9XG4vLyBkb2Vzbid0IG1lYW4gd2lsZGNhcmQ6IHtAY29kZSAkICsgeCA9IFskLHhdfS4gSGVyZSxcbi8vIHtAY29kZSAkfSA9IHtAbGluayAvL0VNUFRZX1JFVFVSTl9TVEFURX0uXG4vLyAvXG5QcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEUgPSAweDdGRkZGRkZGO1xuXG5QcmVkaWN0aW9uQ29udGV4dC5nbG9iYWxOb2RlQ291bnQgPSAxO1xuUHJlZGljdGlvbkNvbnRleHQuaWQgPSBQcmVkaWN0aW9uQ29udGV4dC5nbG9iYWxOb2RlQ291bnQ7XG5cbi8vIFN0b3JlcyB0aGUgY29tcHV0ZWQgaGFzaCBjb2RlIG9mIHRoaXMge0BsaW5rIFByZWRpY3Rpb25Db250ZXh0fS4gVGhlIGhhc2hcbi8vIGNvZGUgaXMgY29tcHV0ZWQgaW4gcGFydHMgdG8gbWF0Y2ggdGhlIGZvbGxvd2luZyByZWZlcmVuY2UgYWxnb3JpdGhtLlxuLy9cbi8vIDxwcmU+XG4vLyBwcml2YXRlIGludCByZWZlcmVuY2VIYXNoQ29kZSgpIHtcbi8vIGludCBoYXNoID0ge0BsaW5rIE11cm11ckhhc2gvL2luaXRpYWxpemUgTXVybXVySGFzaC5pbml0aWFsaXplfSh7QGxpbmtcbi8vIC8vSU5JVElBTF9IQVNIfSk7XG4vL1xuLy8gZm9yIChpbnQgaSA9IDA7IGkgJmx0OyB7QGxpbmsgLy9zaXplKCl9OyBpKyspIHtcbi8vIGhhc2ggPSB7QGxpbmsgTXVybXVySGFzaC8vdXBkYXRlIE11cm11ckhhc2gudXBkYXRlfShoYXNoLCB7QGxpbmsgLy9nZXRQYXJlbnRcbi8vIGdldFBhcmVudH0oaSkpO1xuLy8gfVxuLy9cbi8vIGZvciAoaW50IGkgPSAwOyBpICZsdDsge0BsaW5rIC8vc2l6ZSgpfTsgaSsrKSB7XG4vLyBoYXNoID0ge0BsaW5rIE11cm11ckhhc2gvL3VwZGF0ZSBNdXJtdXJIYXNoLnVwZGF0ZX0oaGFzaCwge0BsaW5rXG4vLyAvL2dldFJldHVyblN0YXRlIGdldFJldHVyblN0YXRlfShpKSk7XG4vLyB9XG4vL1xuLy8gaGFzaCA9IHtAbGluayBNdXJtdXJIYXNoLy9maW5pc2ggTXVybXVySGFzaC5maW5pc2h9KGhhc2gsIDIvLyB7QGxpbmtcbi8vIC8vc2l6ZSgpfSk7XG4vLyByZXR1cm4gaGFzaDtcbi8vIH1cbi8vIDwvcHJlPlxuLy8gL1xuXG4vLyBUaGlzIG1lYW5zIG9ubHkgdGhlIHtAbGluayAvL0VNUFRZfSBjb250ZXh0IGlzIGluIHNldC5cblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWTtcbn07XG5cblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5oYXNFbXB0eVBhdGggPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuZ2V0UmV0dXJuU3RhdGUodGhpcy5sZW5ndGggLSAxKSA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFlfUkVUVVJOX1NUQVRFO1xufTtcblxuUHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmhhc2hDb2RlID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLmNhY2hlZEhhc2hDb2RlO1xufTtcblxuXG5QcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5jYWNoZWRIYXNoQ29kZSk7XG59O1xuLypcbmZ1bmN0aW9uIGNhbGN1bGF0ZUhhc2hTdHJpbmcocGFyZW50LCByZXR1cm5TdGF0ZSkge1xuXHRyZXR1cm4gXCJcIiArIHBhcmVudCArIHJldHVyblN0YXRlO1xufVxuKi9cblxuLy8gVXNlZCB0byBjYWNoZSB7QGxpbmsgUHJlZGljdGlvbkNvbnRleHR9IG9iamVjdHMuIEl0cyB1c2VkIGZvciB0aGUgc2hhcmVkXG4vLyBjb250ZXh0IGNhc2ggYXNzb2NpYXRlZCB3aXRoIGNvbnRleHRzIGluIERGQSBzdGF0ZXMuIFRoaXMgY2FjaGVcbi8vIGNhbiBiZSB1c2VkIGZvciBib3RoIGxleGVycyBhbmQgcGFyc2Vycy5cblxuZnVuY3Rpb24gUHJlZGljdGlvbkNvbnRleHRDYWNoZSgpIHtcblx0dGhpcy5jYWNoZSA9IHt9O1xuXHRyZXR1cm4gdGhpcztcbn1cblxuLy8gQWRkIGEgY29udGV4dCB0byB0aGUgY2FjaGUgYW5kIHJldHVybiBpdC4gSWYgdGhlIGNvbnRleHQgYWxyZWFkeSBleGlzdHMsXG4vLyByZXR1cm4gdGhhdCBvbmUgaW5zdGVhZCBhbmQgZG8gbm90IGFkZCBhIG5ldyBjb250ZXh0IHRvIHRoZSBjYWNoZS5cbi8vIFByb3RlY3Qgc2hhcmVkIGNhY2hlIGZyb20gdW5zYWZlIHRocmVhZCBhY2Nlc3MuXG4vL1xuUHJlZGljdGlvbkNvbnRleHRDYWNoZS5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24oY3R4KSB7XG5cdGlmIChjdHggPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZKSB7XG5cdFx0cmV0dXJuIFByZWRpY3Rpb25Db250ZXh0LkVNUFRZO1xuXHR9XG5cdHZhciBleGlzdGluZyA9IHRoaXMuY2FjaGVbY3R4XSB8fCBudWxsO1xuXHRpZiAoZXhpc3RpbmcgIT09IG51bGwpIHtcblx0XHRyZXR1cm4gZXhpc3Rpbmc7XG5cdH1cblx0dGhpcy5jYWNoZVtjdHhdID0gY3R4O1xuXHRyZXR1cm4gY3R4O1xufTtcblxuUHJlZGljdGlvbkNvbnRleHRDYWNoZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24oY3R4KSB7XG5cdHJldHVybiB0aGlzLmNhY2hlW2N0eF0gfHwgbnVsbDtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShQcmVkaWN0aW9uQ29udGV4dENhY2hlLnByb3RvdHlwZSwgXCJsZW5ndGhcIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5jYWNoZS5sZW5ndGg7XG5cdH1cbn0pO1xuXG5mdW5jdGlvbiBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dChwYXJlbnQsIHJldHVyblN0YXRlKSB7XG5cdHZhciBoYXNoQ29kZSA9IDA7XG5cdGlmKHBhcmVudCAhPT0gbnVsbCkge1xuXHRcdHZhciBoYXNoID0gbmV3IEhhc2goKTtcblx0XHRoYXNoLnVwZGF0ZShwYXJlbnQsIHJldHVyblN0YXRlKTtcbiAgICAgICAgaGFzaENvZGUgPSBoYXNoLmZpbmlzaCgpO1xuXHR9XG5cdFByZWRpY3Rpb25Db250ZXh0LmNhbGwodGhpcywgaGFzaENvZGUpO1xuXHR0aGlzLnBhcmVudEN0eCA9IHBhcmVudDtcblx0dGhpcy5yZXR1cm5TdGF0ZSA9IHJldHVyblN0YXRlO1xufVxuXG5TaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZSk7XG5TaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuY29udHJ1Y3RvciA9IFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0O1xuXG5TaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5jcmVhdGUgPSBmdW5jdGlvbihwYXJlbnQsIHJldHVyblN0YXRlKSB7XG5cdGlmIChyZXR1cm5TdGF0ZSA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFlfUkVUVVJOX1NUQVRFICYmIHBhcmVudCA9PT0gbnVsbCkge1xuXHRcdC8vIHNvbWVvbmUgY2FuIHBhc3MgaW4gdGhlIGJpdHMgb2YgYW4gYXJyYXkgY3R4IHRoYXQgbWVhbiAkXG5cdFx0cmV0dXJuIFByZWRpY3Rpb25Db250ZXh0LkVNUFRZO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBuZXcgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQocGFyZW50LCByZXR1cm5TdGF0ZSk7XG5cdH1cbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUsIFwibGVuZ3RoXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cbn0pO1xuXG5TaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuZ2V0UGFyZW50ID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0cmV0dXJuIHRoaXMucGFyZW50Q3R4O1xufTtcblxuU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmdldFJldHVyblN0YXRlID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0cmV0dXJuIHRoaXMucmV0dXJuU3RhdGU7XG59O1xuXG5TaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0aWYgKHRoaXMgPT09IG90aGVyKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0KSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIGlmICh0aGlzLmhhc2hDb2RlKCkgIT09IG90aGVyLmhhc2hDb2RlKCkpIHtcblx0XHRyZXR1cm4gZmFsc2U7IC8vIGNhbid0IGJlIHNhbWUgaWYgaGFzaCBpcyBkaWZmZXJlbnRcblx0fSBlbHNlIHtcblx0XHRpZih0aGlzLnJldHVyblN0YXRlICE9PSBvdGhlci5yZXR1cm5TdGF0ZSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgZWxzZSBpZih0aGlzLnBhcmVudEN0eD09bnVsbClcbiAgICAgICAgICAgIHJldHVybiBvdGhlci5wYXJlbnRDdHg9PW51bGxcblx0XHRlbHNlXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnRDdHguZXF1YWxzKG90aGVyLnBhcmVudEN0eCk7XG5cdH1cbn07XG5cblNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgdXAgPSB0aGlzLnBhcmVudEN0eCA9PT0gbnVsbCA/IFwiXCIgOiB0aGlzLnBhcmVudEN0eC50b1N0cmluZygpO1xuXHRpZiAodXAubGVuZ3RoID09PSAwKSB7XG5cdFx0aWYgKHRoaXMucmV0dXJuU3RhdGUgPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZX1JFVFVSTl9TVEFURSkge1xuXHRcdFx0cmV0dXJuIFwiJFwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJcIiArIHRoaXMucmV0dXJuU3RhdGU7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBcIlwiICsgdGhpcy5yZXR1cm5TdGF0ZSArIFwiIFwiICsgdXA7XG5cdH1cbn07XG5cbmZ1bmN0aW9uIEVtcHR5UHJlZGljdGlvbkNvbnRleHQoKSB7XG5cdFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LmNhbGwodGhpcywgbnVsbCwgUHJlZGljdGlvbkNvbnRleHQuRU1QVFlfUkVUVVJOX1NUQVRFKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkVtcHR5UHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUpO1xuRW1wdHlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFbXB0eVByZWRpY3Rpb25Db250ZXh0O1xuXG5FbXB0eVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0cnVlO1xufTtcblxuRW1wdHlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuZ2V0UGFyZW50ID0gZnVuY3Rpb24oaW5kZXgpIHtcblx0cmV0dXJuIG51bGw7XG59O1xuXG5FbXB0eVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZS5nZXRSZXR1cm5TdGF0ZSA9IGZ1bmN0aW9uKGluZGV4KSB7XG5cdHJldHVybiB0aGlzLnJldHVyblN0YXRlO1xufTtcblxuRW1wdHlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0cmV0dXJuIHRoaXMgPT09IG90aGVyO1xufTtcblxuRW1wdHlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIFwiJFwiO1xufTtcblxuUHJlZGljdGlvbkNvbnRleHQuRU1QVFkgPSBuZXcgRW1wdHlQcmVkaWN0aW9uQ29udGV4dCgpO1xuXG5mdW5jdGlvbiBBcnJheVByZWRpY3Rpb25Db250ZXh0KHBhcmVudHMsIHJldHVyblN0YXRlcykge1xuXHQvLyBQYXJlbnQgY2FuIGJlIG51bGwgb25seSBpZiBmdWxsIGN0eCBtb2RlIGFuZCB3ZSBtYWtlIGFuIGFycmF5XG5cdC8vIGZyb20ge0BsaW5rIC8vRU1QVFl9IGFuZCBub24tZW1wdHkuIFdlIG1lcmdlIHtAbGluayAvL0VNUFRZfSBieSB1c2luZ1xuXHQvLyBudWxsIHBhcmVudCBhbmRcblx0Ly8gcmV0dXJuU3RhdGUgPT0ge0BsaW5rIC8vRU1QVFlfUkVUVVJOX1NUQVRFfS5cblx0dmFyIGggPSBuZXcgSGFzaCgpO1xuXHRoLnVwZGF0ZShwYXJlbnRzLCByZXR1cm5TdGF0ZXMpO1xuXHR2YXIgaGFzaENvZGUgPSBoLmZpbmlzaCgpO1xuXHRQcmVkaWN0aW9uQ29udGV4dC5jYWxsKHRoaXMsIGhhc2hDb2RlKTtcblx0dGhpcy5wYXJlbnRzID0gcGFyZW50cztcblx0dGhpcy5yZXR1cm5TdGF0ZXMgPSByZXR1cm5TdGF0ZXM7XG5cdHJldHVybiB0aGlzO1xufVxuXG5BcnJheVByZWRpY3Rpb25Db250ZXh0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlKTtcbkFycmF5UHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQXJyYXlQcmVkaWN0aW9uQ29udGV4dDtcblxuQXJyYXlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uKCkge1xuXHQvLyBzaW5jZSBFTVBUWV9SRVRVUk5fU1RBVEUgY2FuIG9ubHkgYXBwZWFyIGluIHRoZSBsYXN0IHBvc2l0aW9uLCB3ZVxuXHQvLyBkb24ndCBuZWVkIHRvIHZlcmlmeSB0aGF0IHNpemU9PTFcblx0cmV0dXJuIHRoaXMucmV0dXJuU3RhdGVzWzBdID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEU7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQXJyYXlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUsIFwibGVuZ3RoXCIsIHtcblx0Z2V0IDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucmV0dXJuU3RhdGVzLmxlbmd0aDtcblx0fVxufSk7XG5cbkFycmF5UHJlZGljdGlvbkNvbnRleHQucHJvdG90eXBlLmdldFBhcmVudCA9IGZ1bmN0aW9uKGluZGV4KSB7XG5cdHJldHVybiB0aGlzLnBhcmVudHNbaW5kZXhdO1xufTtcblxuQXJyYXlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuZ2V0UmV0dXJuU3RhdGUgPSBmdW5jdGlvbihpbmRleCkge1xuXHRyZXR1cm4gdGhpcy5yZXR1cm5TdGF0ZXNbaW5kZXhdO1xufTtcblxuQXJyYXlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0aWYgKHRoaXMgPT09IG90aGVyKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gZWxzZSBpZiAoIShvdGhlciBpbnN0YW5jZW9mIEFycmF5UHJlZGljdGlvbkNvbnRleHQpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGVsc2UgaWYgKHRoaXMuaGFzaENvZGUoKSAhPT0gb3RoZXIuaGFzaENvZGUoKSkge1xuXHRcdHJldHVybiBmYWxzZTsgLy8gY2FuJ3QgYmUgc2FtZSBpZiBoYXNoIGlzIGRpZmZlcmVudFxuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB0aGlzLnJldHVyblN0YXRlcyA9PT0gb3RoZXIucmV0dXJuU3RhdGVzICYmXG5cdFx0XHRcdHRoaXMucGFyZW50cyA9PT0gb3RoZXIucGFyZW50cztcblx0fVxufTtcblxuQXJyYXlQcmVkaWN0aW9uQ29udGV4dC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuaXNFbXB0eSgpKSB7XG5cdFx0cmV0dXJuIFwiW11cIjtcblx0fSBlbHNlIHtcblx0XHR2YXIgcyA9IFwiW1wiO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5yZXR1cm5TdGF0ZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGlmIChpID4gMCkge1xuXHRcdFx0XHRzID0gcyArIFwiLCBcIjtcblx0XHRcdH1cblx0XHRcdGlmICh0aGlzLnJldHVyblN0YXRlc1tpXSA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFlfUkVUVVJOX1NUQVRFKSB7XG5cdFx0XHRcdHMgPSBzICsgXCIkXCI7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXHRcdFx0cyA9IHMgKyB0aGlzLnJldHVyblN0YXRlc1tpXTtcblx0XHRcdGlmICh0aGlzLnBhcmVudHNbaV0gIT09IG51bGwpIHtcblx0XHRcdFx0cyA9IHMgKyBcIiBcIiArIHRoaXMucGFyZW50c1tpXTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHMgPSBzICsgXCJudWxsXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBzICsgXCJdXCI7XG5cdH1cbn07XG5cbi8vIENvbnZlcnQgYSB7QGxpbmsgUnVsZUNvbnRleHR9IHRyZWUgdG8gYSB7QGxpbmsgUHJlZGljdGlvbkNvbnRleHR9IGdyYXBoLlxuLy8gUmV0dXJuIHtAbGluayAvL0VNUFRZfSBpZiB7QGNvZGUgb3V0ZXJDb250ZXh0fSBpcyBlbXB0eSBvciBudWxsLlxuLy8gL1xuZnVuY3Rpb24gcHJlZGljdGlvbkNvbnRleHRGcm9tUnVsZUNvbnRleHQoYXRuLCBvdXRlckNvbnRleHQpIHtcblx0aWYgKG91dGVyQ29udGV4dCA9PT0gdW5kZWZpbmVkIHx8IG91dGVyQ29udGV4dCA9PT0gbnVsbCkge1xuXHRcdG91dGVyQ29udGV4dCA9IFJ1bGVDb250ZXh0LkVNUFRZO1xuXHR9XG5cdC8vIGlmIHdlIGFyZSBpbiBSdWxlQ29udGV4dCBvZiBzdGFydCBydWxlLCBzLCB0aGVuIFByZWRpY3Rpb25Db250ZXh0XG5cdC8vIGlzIEVNUFRZLiBOb2JvZHkgY2FsbGVkIHVzLiAoaWYgd2UgYXJlIGVtcHR5LCByZXR1cm4gZW1wdHkpXG5cdGlmIChvdXRlckNvbnRleHQucGFyZW50Q3R4ID09PSBudWxsIHx8IG91dGVyQ29udGV4dCA9PT0gUnVsZUNvbnRleHQuRU1QVFkpIHtcblx0XHRyZXR1cm4gUHJlZGljdGlvbkNvbnRleHQuRU1QVFk7XG5cdH1cblx0Ly8gSWYgd2UgaGF2ZSBhIHBhcmVudCwgY29udmVydCBpdCB0byBhIFByZWRpY3Rpb25Db250ZXh0IGdyYXBoXG5cdHZhciBwYXJlbnQgPSBwcmVkaWN0aW9uQ29udGV4dEZyb21SdWxlQ29udGV4dChhdG4sIG91dGVyQ29udGV4dC5wYXJlbnRDdHgpO1xuXHR2YXIgc3RhdGUgPSBhdG4uc3RhdGVzW291dGVyQ29udGV4dC5pbnZva2luZ1N0YXRlXTtcblx0dmFyIHRyYW5zaXRpb24gPSBzdGF0ZS50cmFuc2l0aW9uc1swXTtcblx0cmV0dXJuIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LmNyZWF0ZShwYXJlbnQsIHRyYW5zaXRpb24uZm9sbG93U3RhdGUuc3RhdGVOdW1iZXIpO1xufVxuLypcbmZ1bmN0aW9uIGNhbGN1bGF0ZUxpc3RzSGFzaFN0cmluZyhwYXJlbnRzLCByZXR1cm5TdGF0ZXMpIHtcblx0dmFyIHMgPSBcIlwiO1xuXHRwYXJlbnRzLm1hcChmdW5jdGlvbihwKSB7XG5cdFx0cyA9IHMgKyBwO1xuXHR9KTtcblx0cmV0dXJuU3RhdGVzLm1hcChmdW5jdGlvbihyKSB7XG5cdFx0cyA9IHMgKyByO1xuXHR9KTtcblx0cmV0dXJuIHM7XG59XG4qL1xuZnVuY3Rpb24gbWVyZ2UoYSwgYiwgcm9vdElzV2lsZGNhcmQsIG1lcmdlQ2FjaGUpIHtcblx0Ly8gc2hhcmUgc2FtZSBncmFwaCBpZiBib3RoIHNhbWVcblx0aWYgKGEgPT09IGIpIHtcblx0XHRyZXR1cm4gYTtcblx0fVxuXHRpZiAoYSBpbnN0YW5jZW9mIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0ICYmIGIgaW5zdGFuY2VvZiBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dCkge1xuXHRcdHJldHVybiBtZXJnZVNpbmdsZXRvbnMoYSwgYiwgcm9vdElzV2lsZGNhcmQsIG1lcmdlQ2FjaGUpO1xuXHR9XG5cdC8vIEF0IGxlYXN0IG9uZSBvZiBhIG9yIGIgaXMgYXJyYXlcblx0Ly8gSWYgb25lIGlzICQgYW5kIHJvb3RJc1dpbGRjYXJkLCByZXR1cm4gJCBhcy8vIHdpbGRjYXJkXG5cdGlmIChyb290SXNXaWxkY2FyZCkge1xuXHRcdGlmIChhIGluc3RhbmNlb2YgRW1wdHlQcmVkaWN0aW9uQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuIGE7XG5cdFx0fVxuXHRcdGlmIChiIGluc3RhbmNlb2YgRW1wdHlQcmVkaWN0aW9uQ29udGV4dCkge1xuXHRcdFx0cmV0dXJuIGI7XG5cdFx0fVxuXHR9XG5cdC8vIGNvbnZlcnQgc2luZ2xldG9uIHNvIGJvdGggYXJlIGFycmF5cyB0byBub3JtYWxpemVcblx0aWYgKGEgaW5zdGFuY2VvZiBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dCkge1xuXHRcdGEgPSBuZXcgQXJyYXlQcmVkaWN0aW9uQ29udGV4dChbYS5nZXRQYXJlbnQoKV0sIFthLnJldHVyblN0YXRlXSk7XG5cdH1cblx0aWYgKGIgaW5zdGFuY2VvZiBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dCkge1xuXHRcdGIgPSBuZXcgQXJyYXlQcmVkaWN0aW9uQ29udGV4dChbYi5nZXRQYXJlbnQoKV0sIFtiLnJldHVyblN0YXRlXSk7XG5cdH1cblx0cmV0dXJuIG1lcmdlQXJyYXlzKGEsIGIsIHJvb3RJc1dpbGRjYXJkLCBtZXJnZUNhY2hlKTtcbn1cblxuLy9cbi8vIE1lcmdlIHR3byB7QGxpbmsgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHR9IGluc3RhbmNlcy5cbi8vXG4vLyA8cD5TdGFjayB0b3BzIGVxdWFsLCBwYXJlbnRzIG1lcmdlIGlzIHNhbWU7IHJldHVybiBsZWZ0IGdyYXBoLjxicj5cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvU2luZ2xldG9uTWVyZ2VfU2FtZVJvb3RTYW1lUGFyLnN2Z1wiXG4vLyB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gPHA+U2FtZSBzdGFjayB0b3AsIHBhcmVudHMgZGlmZmVyOyBtZXJnZSBwYXJlbnRzIGdpdmluZyBhcnJheSBub2RlLCB0aGVuXG4vLyByZW1haW5kZXJzIG9mIHRob3NlIGdyYXBocy4gQSBuZXcgcm9vdCBub2RlIGlzIGNyZWF0ZWQgdG8gcG9pbnQgdG8gdGhlXG4vLyBtZXJnZWQgcGFyZW50cy48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL1NpbmdsZXRvbk1lcmdlX1NhbWVSb290RGlmZlBhci5zdmdcIlxuLy8gdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy9cbi8vIDxwPkRpZmZlcmVudCBzdGFjayB0b3BzIHBvaW50aW5nIHRvIHNhbWUgcGFyZW50LiBNYWtlIGFycmF5IG5vZGUgZm9yIHRoZVxuLy8gcm9vdCB3aGVyZSBib3RoIGVsZW1lbnQgaW4gdGhlIHJvb3QgcG9pbnQgdG8gdGhlIHNhbWUgKG9yaWdpbmFsKVxuLy8gcGFyZW50Ljxicj5cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvU2luZ2xldG9uTWVyZ2VfRGlmZlJvb3RTYW1lUGFyLnN2Z1wiXG4vLyB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gPHA+RGlmZmVyZW50IHN0YWNrIHRvcHMgcG9pbnRpbmcgdG8gZGlmZmVyZW50IHBhcmVudHMuIE1ha2UgYXJyYXkgbm9kZSBmb3Jcbi8vIHRoZSByb290IHdoZXJlIGVhY2ggZWxlbWVudCBwb2ludHMgdG8gdGhlIGNvcnJlc3BvbmRpbmcgb3JpZ2luYWxcbi8vIHBhcmVudC48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL1NpbmdsZXRvbk1lcmdlX0RpZmZSb290RGlmZlBhci5zdmdcIlxuLy8gdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy9cbi8vIEBwYXJhbSBhIHRoZSBmaXJzdCB7QGxpbmsgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHR9XG4vLyBAcGFyYW0gYiB0aGUgc2Vjb25kIHtAbGluayBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dH1cbi8vIEBwYXJhbSByb290SXNXaWxkY2FyZCB7QGNvZGUgdHJ1ZX0gaWYgdGhpcyBpcyBhIGxvY2FsLWNvbnRleHQgbWVyZ2UsXG4vLyBvdGhlcndpc2UgZmFsc2UgdG8gaW5kaWNhdGUgYSBmdWxsLWNvbnRleHQgbWVyZ2Vcbi8vIEBwYXJhbSBtZXJnZUNhY2hlXG4vLyAvXG5mdW5jdGlvbiBtZXJnZVNpbmdsZXRvbnMoYSwgYiwgcm9vdElzV2lsZGNhcmQsIG1lcmdlQ2FjaGUpIHtcblx0aWYgKG1lcmdlQ2FjaGUgIT09IG51bGwpIHtcblx0XHR2YXIgcHJldmlvdXMgPSBtZXJnZUNhY2hlLmdldChhLCBiKTtcblx0XHRpZiAocHJldmlvdXMgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiBwcmV2aW91cztcblx0XHR9XG5cdFx0cHJldmlvdXMgPSBtZXJnZUNhY2hlLmdldChiLCBhKTtcblx0XHRpZiAocHJldmlvdXMgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiBwcmV2aW91cztcblx0XHR9XG5cdH1cblxuXHR2YXIgcm9vdE1lcmdlID0gbWVyZ2VSb290KGEsIGIsIHJvb3RJc1dpbGRjYXJkKTtcblx0aWYgKHJvb3RNZXJnZSAhPT0gbnVsbCkge1xuXHRcdGlmIChtZXJnZUNhY2hlICE9PSBudWxsKSB7XG5cdFx0XHRtZXJnZUNhY2hlLnNldChhLCBiLCByb290TWVyZ2UpO1xuXHRcdH1cblx0XHRyZXR1cm4gcm9vdE1lcmdlO1xuXHR9XG5cdGlmIChhLnJldHVyblN0YXRlID09PSBiLnJldHVyblN0YXRlKSB7XG5cdFx0dmFyIHBhcmVudCA9IG1lcmdlKGEucGFyZW50Q3R4LCBiLnBhcmVudEN0eCwgcm9vdElzV2lsZGNhcmQsIG1lcmdlQ2FjaGUpO1xuXHRcdC8vIGlmIHBhcmVudCBpcyBzYW1lIGFzIGV4aXN0aW5nIGEgb3IgYiBwYXJlbnQgb3IgcmVkdWNlZCB0byBhIHBhcmVudCxcblx0XHQvLyByZXR1cm4gaXRcblx0XHRpZiAocGFyZW50ID09PSBhLnBhcmVudEN0eCkge1xuXHRcdFx0cmV0dXJuIGE7IC8vIGF4ICsgYnggPSBheCwgaWYgYT1iXG5cdFx0fVxuXHRcdGlmIChwYXJlbnQgPT09IGIucGFyZW50Q3R4KSB7XG5cdFx0XHRyZXR1cm4gYjsgLy8gYXggKyBieCA9IGJ4LCBpZiBhPWJcblx0XHR9XG5cdFx0Ly8gZWxzZTogYXggKyBheSA9IGEnW3gseV1cblx0XHQvLyBtZXJnZSBwYXJlbnRzIHggYW5kIHksIGdpdmluZyBhcnJheSBub2RlIHdpdGggeCx5IHRoZW4gcmVtYWluZGVyc1xuXHRcdC8vIG9mIHRob3NlIGdyYXBocy4gZHVwIGEsIGEnIHBvaW50cyBhdCBtZXJnZWQgYXJyYXlcblx0XHQvLyBuZXcgam9pbmVkIHBhcmVudCBzbyBjcmVhdGUgbmV3IHNpbmdsZXRvbiBwb2ludGluZyB0byBpdCwgYSdcblx0XHR2YXIgc3BjID0gU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQuY3JlYXRlKHBhcmVudCwgYS5yZXR1cm5TdGF0ZSk7XG5cdFx0aWYgKG1lcmdlQ2FjaGUgIT09IG51bGwpIHtcblx0XHRcdG1lcmdlQ2FjaGUuc2V0KGEsIGIsIHNwYyk7XG5cdFx0fVxuXHRcdHJldHVybiBzcGM7XG5cdH0gZWxzZSB7IC8vIGEgIT0gYiBwYXlsb2FkcyBkaWZmZXJcblx0XHQvLyBzZWUgaWYgd2UgY2FuIGNvbGxhcHNlIHBhcmVudHMgZHVlIHRvICQreCBwYXJlbnRzIGlmIGxvY2FsIGN0eFxuXHRcdHZhciBzaW5nbGVQYXJlbnQgPSBudWxsO1xuXHRcdGlmIChhID09PSBiIHx8IChhLnBhcmVudEN0eCAhPT0gbnVsbCAmJiBhLnBhcmVudEN0eCA9PT0gYi5wYXJlbnRDdHgpKSB7IC8vIGF4ICtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBieCA9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gW2EsYl14XG5cdFx0XHRzaW5nbGVQYXJlbnQgPSBhLnBhcmVudEN0eDtcblx0XHR9XG5cdFx0aWYgKHNpbmdsZVBhcmVudCAhPT0gbnVsbCkgeyAvLyBwYXJlbnRzIGFyZSBzYW1lXG5cdFx0XHQvLyBzb3J0IHBheWxvYWRzIGFuZCB1c2Ugc2FtZSBwYXJlbnRcblx0XHRcdHZhciBwYXlsb2FkcyA9IFsgYS5yZXR1cm5TdGF0ZSwgYi5yZXR1cm5TdGF0ZSBdO1xuXHRcdFx0aWYgKGEucmV0dXJuU3RhdGUgPiBiLnJldHVyblN0YXRlKSB7XG5cdFx0XHRcdHBheWxvYWRzWzBdID0gYi5yZXR1cm5TdGF0ZTtcblx0XHRcdFx0cGF5bG9hZHNbMV0gPSBhLnJldHVyblN0YXRlO1xuXHRcdFx0fVxuXHRcdFx0dmFyIHBhcmVudHMgPSBbIHNpbmdsZVBhcmVudCwgc2luZ2xlUGFyZW50IF07XG5cdFx0XHR2YXIgYXBjID0gbmV3IEFycmF5UHJlZGljdGlvbkNvbnRleHQocGFyZW50cywgcGF5bG9hZHMpO1xuXHRcdFx0aWYgKG1lcmdlQ2FjaGUgIT09IG51bGwpIHtcblx0XHRcdFx0bWVyZ2VDYWNoZS5zZXQoYSwgYiwgYXBjKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBhcGM7XG5cdFx0fVxuXHRcdC8vIHBhcmVudHMgZGlmZmVyIGFuZCBjYW4ndCBtZXJnZSB0aGVtLiBKdXN0IHBhY2sgdG9nZXRoZXJcblx0XHQvLyBpbnRvIGFycmF5OyBjYW4ndCBtZXJnZS5cblx0XHQvLyBheCArIGJ5ID0gW2F4LGJ5XVxuXHRcdHZhciBwYXlsb2FkcyA9IFsgYS5yZXR1cm5TdGF0ZSwgYi5yZXR1cm5TdGF0ZSBdO1xuXHRcdHZhciBwYXJlbnRzID0gWyBhLnBhcmVudEN0eCwgYi5wYXJlbnRDdHggXTtcblx0XHRpZiAoYS5yZXR1cm5TdGF0ZSA+IGIucmV0dXJuU3RhdGUpIHsgLy8gc29ydCBieSBwYXlsb2FkXG5cdFx0XHRwYXlsb2Fkc1swXSA9IGIucmV0dXJuU3RhdGU7XG5cdFx0XHRwYXlsb2Fkc1sxXSA9IGEucmV0dXJuU3RhdGU7XG5cdFx0XHRwYXJlbnRzID0gWyBiLnBhcmVudEN0eCwgYS5wYXJlbnRDdHggXTtcblx0XHR9XG5cdFx0dmFyIGFfID0gbmV3IEFycmF5UHJlZGljdGlvbkNvbnRleHQocGFyZW50cywgcGF5bG9hZHMpO1xuXHRcdGlmIChtZXJnZUNhY2hlICE9PSBudWxsKSB7XG5cdFx0XHRtZXJnZUNhY2hlLnNldChhLCBiLCBhXyk7XG5cdFx0fVxuXHRcdHJldHVybiBhXztcblx0fVxufVxuXG4vL1xuLy8gSGFuZGxlIGNhc2Ugd2hlcmUgYXQgbGVhc3Qgb25lIG9mIHtAY29kZSBhfSBvciB7QGNvZGUgYn0gaXNcbi8vIHtAbGluayAvL0VNUFRZfS4gSW4gdGhlIGZvbGxvd2luZyBkaWFncmFtcywgdGhlIHN5bWJvbCB7QGNvZGUgJH0gaXMgdXNlZFxuLy8gdG8gcmVwcmVzZW50IHtAbGluayAvL0VNUFRZfS5cbi8vXG4vLyA8aDI+TG9jYWwtQ29udGV4dCBNZXJnZXM8L2gyPlxuLy9cbi8vIDxwPlRoZXNlIGxvY2FsLWNvbnRleHQgbWVyZ2Ugb3BlcmF0aW9ucyBhcmUgdXNlZCB3aGVuIHtAY29kZSByb290SXNXaWxkY2FyZH1cbi8vIGlzIHRydWUuPC9wPlxuLy9cbi8vIDxwPntAbGluayAvL0VNUFRZfSBpcyBzdXBlcnNldCBvZiBhbnkgZ3JhcGg7IHJldHVybiB7QGxpbmsgLy9FTVBUWX0uPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9Mb2NhbE1lcmdlX0VtcHR5Um9vdC5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gPHA+e0BsaW5rIC8vRU1QVFl9IGFuZCBhbnl0aGluZyBpcyB7QGNvZGUgLy9FTVBUWX0sIHNvIG1lcmdlZCBwYXJlbnQgaXNcbi8vIHtAY29kZSAvL0VNUFRZfTsgcmV0dXJuIGxlZnQgZ3JhcGguPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9Mb2NhbE1lcmdlX0VtcHR5UGFyZW50LnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5TcGVjaWFsIGNhc2Ugb2YgbGFzdCBtZXJnZSBpZiBsb2NhbCBjb250ZXh0Ljxicj5cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvTG9jYWxNZXJnZV9EaWZmUm9vdHMuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy9cbi8vIDxoMj5GdWxsLUNvbnRleHQgTWVyZ2VzPC9oMj5cbi8vXG4vLyA8cD5UaGVzZSBmdWxsLWNvbnRleHQgbWVyZ2Ugb3BlcmF0aW9ucyBhcmUgdXNlZCB3aGVuIHtAY29kZSByb290SXNXaWxkY2FyZH1cbi8vIGlzIGZhbHNlLjwvcD5cbi8vXG4vLyA8cD48ZW1iZWQgc3JjPVwiaW1hZ2VzL0Z1bGxNZXJnZV9FbXB0eVJvb3RzLnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5NdXN0IGtlZXAgYWxsIGNvbnRleHRzOyB7QGxpbmsgLy9FTVBUWX0gaW4gYXJyYXkgaXMgYSBzcGVjaWFsIHZhbHVlIChhbmRcbi8vIG51bGwgcGFyZW50KS48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0Z1bGxNZXJnZV9FbXB0eVJvb3Quc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy9cbi8vIDxwPjxlbWJlZCBzcmM9XCJpbWFnZXMvRnVsbE1lcmdlX1NhbWVSb290LnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyBAcGFyYW0gYSB0aGUgZmlyc3Qge0BsaW5rIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0fVxuLy8gQHBhcmFtIGIgdGhlIHNlY29uZCB7QGxpbmsgU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHR9XG4vLyBAcGFyYW0gcm9vdElzV2lsZGNhcmQge0Bjb2RlIHRydWV9IGlmIHRoaXMgaXMgYSBsb2NhbC1jb250ZXh0IG1lcmdlLFxuLy8gb3RoZXJ3aXNlIGZhbHNlIHRvIGluZGljYXRlIGEgZnVsbC1jb250ZXh0IG1lcmdlXG4vLyAvXG5mdW5jdGlvbiBtZXJnZVJvb3QoYSwgYiwgcm9vdElzV2lsZGNhcmQpIHtcblx0aWYgKHJvb3RJc1dpbGRjYXJkKSB7XG5cdFx0aWYgKGEgPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZKSB7XG5cdFx0XHRyZXR1cm4gUHJlZGljdGlvbkNvbnRleHQuRU1QVFk7IC8vIC8vICsgYiA9Ly9cblx0XHR9XG5cdFx0aWYgKGIgPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZKSB7XG5cdFx0XHRyZXR1cm4gUHJlZGljdGlvbkNvbnRleHQuRU1QVFk7IC8vIGEgKy8vID0vL1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRpZiAoYSA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFkgJiYgYiA9PT0gUHJlZGljdGlvbkNvbnRleHQuRU1QVFkpIHtcblx0XHRcdHJldHVybiBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWTsgLy8gJCArICQgPSAkXG5cdFx0fSBlbHNlIGlmIChhID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWSkgeyAvLyAkICsgeCA9IFskLHhdXG5cdFx0XHR2YXIgcGF5bG9hZHMgPSBbIGIucmV0dXJuU3RhdGUsXG5cdFx0XHRcdFx0UHJlZGljdGlvbkNvbnRleHQuRU1QVFlfUkVUVVJOX1NUQVRFIF07XG5cdFx0XHR2YXIgcGFyZW50cyA9IFsgYi5wYXJlbnRDdHgsIG51bGwgXTtcblx0XHRcdHJldHVybiBuZXcgQXJyYXlQcmVkaWN0aW9uQ29udGV4dChwYXJlbnRzLCBwYXlsb2Fkcyk7XG5cdFx0fSBlbHNlIGlmIChiID09PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWSkgeyAvLyB4ICsgJCA9IFskLHhdICgkIGlzIGFsd2F5cyBmaXJzdCBpZiBwcmVzZW50KVxuXHRcdFx0dmFyIHBheWxvYWRzID0gWyBhLnJldHVyblN0YXRlLCBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEUgXTtcblx0XHRcdHZhciBwYXJlbnRzID0gWyBhLnBhcmVudEN0eCwgbnVsbCBdO1xuXHRcdFx0cmV0dXJuIG5ldyBBcnJheVByZWRpY3Rpb25Db250ZXh0KHBhcmVudHMsIHBheWxvYWRzKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG51bGw7XG59XG5cbi8vXG4vLyBNZXJnZSB0d28ge0BsaW5rIEFycmF5UHJlZGljdGlvbkNvbnRleHR9IGluc3RhbmNlcy5cbi8vXG4vLyA8cD5EaWZmZXJlbnQgdG9wcywgZGlmZmVyZW50IHBhcmVudHMuPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9BcnJheU1lcmdlX0RpZmZUb3BEaWZmUGFyLnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPjwvcD5cbi8vXG4vLyA8cD5TaGFyZWQgdG9wLCBzYW1lIHBhcmVudHMuPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9BcnJheU1lcmdlX1NoYXJlVG9wU2FtZVBhci5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gPHA+U2hhcmVkIHRvcCwgZGlmZmVyZW50IHBhcmVudHMuPGJyPlxuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9BcnJheU1lcmdlX1NoYXJlVG9wRGlmZlBhci5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gPHA+U2hhcmVkIHRvcCwgYWxsIHNoYXJlZCBwYXJlbnRzLjxicj5cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvQXJyYXlNZXJnZV9TaGFyZVRvcFNoYXJlUGFyLnN2Z1wiXG4vLyB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz48L3A+XG4vL1xuLy8gPHA+RXF1YWwgdG9wcywgbWVyZ2UgcGFyZW50cyBhbmQgcmVkdWNlIHRvcCB0b1xuLy8ge0BsaW5rIFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0fS48YnI+XG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL0FycmF5TWVyZ2VfRXF1YWxUb3Auc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+PC9wPlxuLy8gL1xuZnVuY3Rpb24gbWVyZ2VBcnJheXMoYSwgYiwgcm9vdElzV2lsZGNhcmQsIG1lcmdlQ2FjaGUpIHtcblx0aWYgKG1lcmdlQ2FjaGUgIT09IG51bGwpIHtcblx0XHR2YXIgcHJldmlvdXMgPSBtZXJnZUNhY2hlLmdldChhLCBiKTtcblx0XHRpZiAocHJldmlvdXMgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiBwcmV2aW91cztcblx0XHR9XG5cdFx0cHJldmlvdXMgPSBtZXJnZUNhY2hlLmdldChiLCBhKTtcblx0XHRpZiAocHJldmlvdXMgIT09IG51bGwpIHtcblx0XHRcdHJldHVybiBwcmV2aW91cztcblx0XHR9XG5cdH1cblx0Ly8gbWVyZ2Ugc29ydGVkIHBheWxvYWRzIGEgKyBiID0+IE1cblx0dmFyIGkgPSAwOyAvLyB3YWxrcyBhXG5cdHZhciBqID0gMDsgLy8gd2Fsa3MgYlxuXHR2YXIgayA9IDA7IC8vIHdhbGtzIHRhcmdldCBNIGFycmF5XG5cblx0dmFyIG1lcmdlZFJldHVyblN0YXRlcyA9IFtdO1xuXHR2YXIgbWVyZ2VkUGFyZW50cyA9IFtdO1xuXHQvLyB3YWxrIGFuZCBtZXJnZSB0byB5aWVsZCBtZXJnZWRQYXJlbnRzLCBtZXJnZWRSZXR1cm5TdGF0ZXNcblx0d2hpbGUgKGkgPCBhLnJldHVyblN0YXRlcy5sZW5ndGggJiYgaiA8IGIucmV0dXJuU3RhdGVzLmxlbmd0aCkge1xuXHRcdHZhciBhX3BhcmVudCA9IGEucGFyZW50c1tpXTtcblx0XHR2YXIgYl9wYXJlbnQgPSBiLnBhcmVudHNbal07XG5cdFx0aWYgKGEucmV0dXJuU3RhdGVzW2ldID09PSBiLnJldHVyblN0YXRlc1tqXSkge1xuXHRcdFx0Ly8gc2FtZSBwYXlsb2FkIChzdGFjayB0b3BzIGFyZSBlcXVhbCksIG11c3QgeWllbGQgbWVyZ2VkIHNpbmdsZXRvblxuXHRcdFx0dmFyIHBheWxvYWQgPSBhLnJldHVyblN0YXRlc1tpXTtcblx0XHRcdC8vICQrJCA9ICRcblx0XHRcdHZhciBib3RoRG9sbGFycyA9IHBheWxvYWQgPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZX1JFVFVSTl9TVEFURSAmJlxuXHRcdFx0XHRcdGFfcGFyZW50ID09PSBudWxsICYmIGJfcGFyZW50ID09PSBudWxsO1xuXHRcdFx0dmFyIGF4X2F4ID0gKGFfcGFyZW50ICE9PSBudWxsICYmIGJfcGFyZW50ICE9PSBudWxsICYmIGFfcGFyZW50ID09PSBiX3BhcmVudCk7IC8vIGF4K2F4XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gLT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBheFxuXHRcdFx0aWYgKGJvdGhEb2xsYXJzIHx8IGF4X2F4KSB7XG5cdFx0XHRcdG1lcmdlZFBhcmVudHNba10gPSBhX3BhcmVudDsgLy8gY2hvb3NlIGxlZnRcblx0XHRcdFx0bWVyZ2VkUmV0dXJuU3RhdGVzW2tdID0gcGF5bG9hZDtcblx0XHRcdH0gZWxzZSB7IC8vIGF4K2F5IC0+IGEnW3gseV1cblx0XHRcdFx0dmFyIG1lcmdlZFBhcmVudCA9IG1lcmdlKGFfcGFyZW50LCBiX3BhcmVudCwgcm9vdElzV2lsZGNhcmQsIG1lcmdlQ2FjaGUpO1xuXHRcdFx0XHRtZXJnZWRQYXJlbnRzW2tdID0gbWVyZ2VkUGFyZW50O1xuXHRcdFx0XHRtZXJnZWRSZXR1cm5TdGF0ZXNba10gPSBwYXlsb2FkO1xuXHRcdFx0fVxuXHRcdFx0aSArPSAxOyAvLyBob3Agb3ZlciBsZWZ0IG9uZSBhcyB1c3VhbFxuXHRcdFx0aiArPSAxOyAvLyBidXQgYWxzbyBza2lwIG9uZSBpbiByaWdodCBzaWRlIHNpbmNlIHdlIG1lcmdlXG5cdFx0fSBlbHNlIGlmIChhLnJldHVyblN0YXRlc1tpXSA8IGIucmV0dXJuU3RhdGVzW2pdKSB7IC8vIGNvcHkgYVtpXSB0byBNXG5cdFx0XHRtZXJnZWRQYXJlbnRzW2tdID0gYV9wYXJlbnQ7XG5cdFx0XHRtZXJnZWRSZXR1cm5TdGF0ZXNba10gPSBhLnJldHVyblN0YXRlc1tpXTtcblx0XHRcdGkgKz0gMTtcblx0XHR9IGVsc2UgeyAvLyBiID4gYSwgY29weSBiW2pdIHRvIE1cblx0XHRcdG1lcmdlZFBhcmVudHNba10gPSBiX3BhcmVudDtcblx0XHRcdG1lcmdlZFJldHVyblN0YXRlc1trXSA9IGIucmV0dXJuU3RhdGVzW2pdO1xuXHRcdFx0aiArPSAxO1xuXHRcdH1cblx0XHRrICs9IDE7XG5cdH1cblx0Ly8gY29weSBvdmVyIGFueSBwYXlsb2FkcyByZW1haW5pbmcgaW4gZWl0aGVyIGFycmF5XG5cdGlmIChpIDwgYS5yZXR1cm5TdGF0ZXMubGVuZ3RoKSB7XG5cdFx0Zm9yICh2YXIgcCA9IGk7IHAgPCBhLnJldHVyblN0YXRlcy5sZW5ndGg7IHArKykge1xuXHRcdFx0bWVyZ2VkUGFyZW50c1trXSA9IGEucGFyZW50c1twXTtcblx0XHRcdG1lcmdlZFJldHVyblN0YXRlc1trXSA9IGEucmV0dXJuU3RhdGVzW3BdO1xuXHRcdFx0ayArPSAxO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHRmb3IgKHZhciBwID0gajsgcCA8IGIucmV0dXJuU3RhdGVzLmxlbmd0aDsgcCsrKSB7XG5cdFx0XHRtZXJnZWRQYXJlbnRzW2tdID0gYi5wYXJlbnRzW3BdO1xuXHRcdFx0bWVyZ2VkUmV0dXJuU3RhdGVzW2tdID0gYi5yZXR1cm5TdGF0ZXNbcF07XG5cdFx0XHRrICs9IDE7XG5cdFx0fVxuXHR9XG5cdC8vIHRyaW0gbWVyZ2VkIGlmIHdlIGNvbWJpbmVkIGEgZmV3IHRoYXQgaGFkIHNhbWUgc3RhY2sgdG9wc1xuXHRpZiAoayA8IG1lcmdlZFBhcmVudHMubGVuZ3RoKSB7IC8vIHdyaXRlIGluZGV4IDwgbGFzdCBwb3NpdGlvbjsgdHJpbVxuXHRcdGlmIChrID09PSAxKSB7IC8vIGZvciBqdXN0IG9uZSBtZXJnZWQgZWxlbWVudCwgcmV0dXJuIHNpbmdsZXRvbiB0b3Bcblx0XHRcdHZhciBhXyA9IFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LmNyZWF0ZShtZXJnZWRQYXJlbnRzWzBdLFxuXHRcdFx0XHRcdG1lcmdlZFJldHVyblN0YXRlc1swXSk7XG5cdFx0XHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRtZXJnZUNhY2hlLnNldChhLCBiLCBhXyk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gYV87XG5cdFx0fVxuXHRcdG1lcmdlZFBhcmVudHMgPSBtZXJnZWRQYXJlbnRzLnNsaWNlKDAsIGspO1xuXHRcdG1lcmdlZFJldHVyblN0YXRlcyA9IG1lcmdlZFJldHVyblN0YXRlcy5zbGljZSgwLCBrKTtcblx0fVxuXG5cdHZhciBNID0gbmV3IEFycmF5UHJlZGljdGlvbkNvbnRleHQobWVyZ2VkUGFyZW50cywgbWVyZ2VkUmV0dXJuU3RhdGVzKTtcblxuXHQvLyBpZiB3ZSBjcmVhdGVkIHNhbWUgYXJyYXkgYXMgYSBvciBiLCByZXR1cm4gdGhhdCBpbnN0ZWFkXG5cdC8vIFRPRE86IHRyYWNrIHdoZXRoZXIgdGhpcyBpcyBwb3NzaWJsZSBhYm92ZSBkdXJpbmcgbWVyZ2Ugc29ydCBmb3Igc3BlZWRcblx0aWYgKE0gPT09IGEpIHtcblx0XHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdFx0bWVyZ2VDYWNoZS5zZXQoYSwgYiwgYSk7XG5cdFx0fVxuXHRcdHJldHVybiBhO1xuXHR9XG5cdGlmIChNID09PSBiKSB7XG5cdFx0aWYgKG1lcmdlQ2FjaGUgIT09IG51bGwpIHtcblx0XHRcdG1lcmdlQ2FjaGUuc2V0KGEsIGIsIGIpO1xuXHRcdH1cblx0XHRyZXR1cm4gYjtcblx0fVxuXHRjb21iaW5lQ29tbW9uUGFyZW50cyhtZXJnZWRQYXJlbnRzKTtcblxuXHRpZiAobWVyZ2VDYWNoZSAhPT0gbnVsbCkge1xuXHRcdG1lcmdlQ2FjaGUuc2V0KGEsIGIsIE0pO1xuXHR9XG5cdHJldHVybiBNO1xufVxuXG4vL1xuLy8gTWFrZSBwYXNzIG92ZXIgYWxsIDxlbT5NPC9lbT4ge0Bjb2RlIHBhcmVudHN9OyBtZXJnZSBhbnkge0Bjb2RlIGVxdWFscygpfVxuLy8gb25lcy5cbi8vIC9cbmZ1bmN0aW9uIGNvbWJpbmVDb21tb25QYXJlbnRzKHBhcmVudHMpIHtcblx0dmFyIHVuaXF1ZVBhcmVudHMgPSB7fTtcblxuXHRmb3IgKHZhciBwID0gMDsgcCA8IHBhcmVudHMubGVuZ3RoOyBwKyspIHtcblx0XHR2YXIgcGFyZW50ID0gcGFyZW50c1twXTtcblx0XHRpZiAoIShwYXJlbnQgaW4gdW5pcXVlUGFyZW50cykpIHtcblx0XHRcdHVuaXF1ZVBhcmVudHNbcGFyZW50XSA9IHBhcmVudDtcblx0XHR9XG5cdH1cblx0Zm9yICh2YXIgcSA9IDA7IHEgPCBwYXJlbnRzLmxlbmd0aDsgcSsrKSB7XG5cdFx0cGFyZW50c1txXSA9IHVuaXF1ZVBhcmVudHNbcGFyZW50c1txXV07XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0Q2FjaGVkUHJlZGljdGlvbkNvbnRleHQoY29udGV4dCwgY29udGV4dENhY2hlLCB2aXNpdGVkKSB7XG5cdGlmIChjb250ZXh0LmlzRW1wdHkoKSkge1xuXHRcdHJldHVybiBjb250ZXh0O1xuXHR9XG5cdHZhciBleGlzdGluZyA9IHZpc2l0ZWRbY29udGV4dF0gfHwgbnVsbDtcblx0aWYgKGV4aXN0aW5nICE9PSBudWxsKSB7XG5cdFx0cmV0dXJuIGV4aXN0aW5nO1xuXHR9XG5cdGV4aXN0aW5nID0gY29udGV4dENhY2hlLmdldChjb250ZXh0KTtcblx0aWYgKGV4aXN0aW5nICE9PSBudWxsKSB7XG5cdFx0dmlzaXRlZFtjb250ZXh0XSA9IGV4aXN0aW5nO1xuXHRcdHJldHVybiBleGlzdGluZztcblx0fVxuXHR2YXIgY2hhbmdlZCA9IGZhbHNlO1xuXHR2YXIgcGFyZW50cyA9IFtdO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHBhcmVudHMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgcGFyZW50ID0gZ2V0Q2FjaGVkUHJlZGljdGlvbkNvbnRleHQoY29udGV4dC5nZXRQYXJlbnQoaSksIGNvbnRleHRDYWNoZSwgdmlzaXRlZCk7XG5cdFx0aWYgKGNoYW5nZWQgfHwgcGFyZW50ICE9PSBjb250ZXh0LmdldFBhcmVudChpKSkge1xuXHRcdFx0aWYgKCFjaGFuZ2VkKSB7XG5cdFx0XHRcdHBhcmVudHMgPSBbXTtcblx0XHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBjb250ZXh0Lmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdFx0cGFyZW50c1tqXSA9IGNvbnRleHQuZ2V0UGFyZW50KGopO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNoYW5nZWQgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cGFyZW50c1tpXSA9IHBhcmVudDtcblx0XHR9XG5cdH1cblx0aWYgKCFjaGFuZ2VkKSB7XG5cdFx0Y29udGV4dENhY2hlLmFkZChjb250ZXh0KTtcblx0XHR2aXNpdGVkW2NvbnRleHRdID0gY29udGV4dDtcblx0XHRyZXR1cm4gY29udGV4dDtcblx0fVxuXHR2YXIgdXBkYXRlZCA9IG51bGw7XG5cdGlmIChwYXJlbnRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdHVwZGF0ZWQgPSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWTtcblx0fSBlbHNlIGlmIChwYXJlbnRzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHVwZGF0ZWQgPSBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dC5jcmVhdGUocGFyZW50c1swXSwgY29udGV4dFxuXHRcdFx0XHQuZ2V0UmV0dXJuU3RhdGUoMCkpO1xuXHR9IGVsc2Uge1xuXHRcdHVwZGF0ZWQgPSBuZXcgQXJyYXlQcmVkaWN0aW9uQ29udGV4dChwYXJlbnRzLCBjb250ZXh0LnJldHVyblN0YXRlcyk7XG5cdH1cblx0Y29udGV4dENhY2hlLmFkZCh1cGRhdGVkKTtcblx0dmlzaXRlZFt1cGRhdGVkXSA9IHVwZGF0ZWQ7XG5cdHZpc2l0ZWRbY29udGV4dF0gPSB1cGRhdGVkO1xuXG5cdHJldHVybiB1cGRhdGVkO1xufVxuXG4vLyB0ZXIncyByZWN1cnNpdmUgdmVyc2lvbiBvZiBTYW0ncyBnZXRBbGxOb2RlcygpXG5mdW5jdGlvbiBnZXRBbGxDb250ZXh0Tm9kZXMoY29udGV4dCwgbm9kZXMsIHZpc2l0ZWQpIHtcblx0aWYgKG5vZGVzID09PSBudWxsKSB7XG5cdFx0bm9kZXMgPSBbXTtcblx0XHRyZXR1cm4gZ2V0QWxsQ29udGV4dE5vZGVzKGNvbnRleHQsIG5vZGVzLCB2aXNpdGVkKTtcblx0fSBlbHNlIGlmICh2aXNpdGVkID09PSBudWxsKSB7XG5cdFx0dmlzaXRlZCA9IHt9O1xuXHRcdHJldHVybiBnZXRBbGxDb250ZXh0Tm9kZXMoY29udGV4dCwgbm9kZXMsIHZpc2l0ZWQpO1xuXHR9IGVsc2Uge1xuXHRcdGlmIChjb250ZXh0ID09PSBudWxsIHx8IHZpc2l0ZWRbY29udGV4dF0gIT09IG51bGwpIHtcblx0XHRcdHJldHVybiBub2Rlcztcblx0XHR9XG5cdFx0dmlzaXRlZFtjb250ZXh0XSA9IGNvbnRleHQ7XG5cdFx0bm9kZXMucHVzaChjb250ZXh0KTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGNvbnRleHQubGVuZ3RoOyBpKyspIHtcblx0XHRcdGdldEFsbENvbnRleHROb2Rlcyhjb250ZXh0LmdldFBhcmVudChpKSwgbm9kZXMsIHZpc2l0ZWQpO1xuXHRcdH1cblx0XHRyZXR1cm4gbm9kZXM7XG5cdH1cbn1cblxuZXhwb3J0cy5tZXJnZSA9IG1lcmdlO1xuZXhwb3J0cy5QcmVkaWN0aW9uQ29udGV4dCA9IFByZWRpY3Rpb25Db250ZXh0O1xuZXhwb3J0cy5QcmVkaWN0aW9uQ29udGV4dENhY2hlID0gUHJlZGljdGlvbkNvbnRleHRDYWNoZTtcbmV4cG9ydHMuU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQgPSBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dDtcbmV4cG9ydHMucHJlZGljdGlvbkNvbnRleHRGcm9tUnVsZUNvbnRleHQgPSBwcmVkaWN0aW9uQ29udGV4dEZyb21SdWxlQ29udGV4dDtcbmV4cG9ydHMuZ2V0Q2FjaGVkUHJlZGljdGlvbkNvbnRleHQgPSBnZXRDYWNoZWRQcmVkaWN0aW9uQ29udGV4dDtcbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vL1xuXG52YXIgVG9rZW4gPSByZXF1aXJlKCcuL1Rva2VuJykuVG9rZW47XG52YXIgQ29uc29sZUVycm9yTGlzdGVuZXIgPSByZXF1aXJlKCcuL2Vycm9yL0Vycm9yTGlzdGVuZXInKS5Db25zb2xlRXJyb3JMaXN0ZW5lcjtcbnZhciBQcm94eUVycm9yTGlzdGVuZXIgPSByZXF1aXJlKCcuL2Vycm9yL0Vycm9yTGlzdGVuZXInKS5Qcm94eUVycm9yTGlzdGVuZXI7XG5cbmZ1bmN0aW9uIFJlY29nbml6ZXIoKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzID0gWyBDb25zb2xlRXJyb3JMaXN0ZW5lci5JTlNUQU5DRSBdO1xuICAgIHRoaXMuX2ludGVycCA9IG51bGw7XG4gICAgdGhpcy5fc3RhdGVOdW1iZXIgPSAtMTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuUmVjb2duaXplci50b2tlblR5cGVNYXBDYWNoZSA9IHt9O1xuUmVjb2duaXplci5ydWxlSW5kZXhNYXBDYWNoZSA9IHt9O1xuXG5cblJlY29nbml6ZXIucHJvdG90eXBlLmNoZWNrVmVyc2lvbiA9IGZ1bmN0aW9uKHRvb2xWZXJzaW9uKSB7XG4gICAgdmFyIHJ1bnRpbWVWZXJzaW9uID0gXCI0LjcuMlwiO1xuICAgIGlmIChydW50aW1lVmVyc2lvbiE9PXRvb2xWZXJzaW9uKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiQU5UTFIgcnVudGltZSBhbmQgZ2VuZXJhdGVkIGNvZGUgdmVyc2lvbnMgZGlzYWdyZWU6IFwiK3J1bnRpbWVWZXJzaW9uK1wiIT1cIit0b29sVmVyc2lvbik7XG4gICAgfVxufTtcblxuUmVjb2duaXplci5wcm90b3R5cGUuYWRkRXJyb3JMaXN0ZW5lciA9IGZ1bmN0aW9uKGxpc3RlbmVyKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xufTtcblxuUmVjb2duaXplci5wcm90b3R5cGUucmVtb3ZlRXJyb3JMaXN0ZW5lcnMgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLl9saXN0ZW5lcnMgPSBbXTtcbn07XG5cblJlY29nbml6ZXIucHJvdG90eXBlLmdldFRva2VuVHlwZU1hcCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB0b2tlbk5hbWVzID0gdGhpcy5nZXRUb2tlbk5hbWVzKCk7XG4gICAgaWYgKHRva2VuTmFtZXM9PT1udWxsKSB7XG4gICAgICAgIHRocm93KFwiVGhlIGN1cnJlbnQgcmVjb2duaXplciBkb2VzIG5vdCBwcm92aWRlIGEgbGlzdCBvZiB0b2tlbiBuYW1lcy5cIik7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSB0aGlzLnRva2VuVHlwZU1hcENhY2hlW3Rva2VuTmFtZXNdO1xuICAgIGlmKHJlc3VsdD09PXVuZGVmaW5lZCkge1xuICAgICAgICByZXN1bHQgPSB0b2tlbk5hbWVzLnJlZHVjZShmdW5jdGlvbihvLCBrLCBpKSB7IG9ba10gPSBpOyB9KTtcbiAgICAgICAgcmVzdWx0LkVPRiA9IFRva2VuLkVPRjtcbiAgICAgICAgdGhpcy50b2tlblR5cGVNYXBDYWNoZVt0b2tlbk5hbWVzXSA9IHJlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIEdldCBhIG1hcCBmcm9tIHJ1bGUgbmFtZXMgdG8gcnVsZSBpbmRleGVzLlxuLy9cbi8vIDxwPlVzZWQgZm9yIFhQYXRoIGFuZCB0cmVlIHBhdHRlcm4gY29tcGlsYXRpb24uPC9wPlxuLy9cblJlY29nbml6ZXIucHJvdG90eXBlLmdldFJ1bGVJbmRleE1hcCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBydWxlTmFtZXMgPSB0aGlzLnJ1bGVOYW1lcztcbiAgICBpZiAocnVsZU5hbWVzPT09bnVsbCkge1xuICAgICAgICB0aHJvdyhcIlRoZSBjdXJyZW50IHJlY29nbml6ZXIgZG9lcyBub3QgcHJvdmlkZSBhIGxpc3Qgb2YgcnVsZSBuYW1lcy5cIik7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSB0aGlzLnJ1bGVJbmRleE1hcENhY2hlW3J1bGVOYW1lc107XG4gICAgaWYocmVzdWx0PT09dW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc3VsdCA9IHJ1bGVOYW1lcy5yZWR1Y2UoZnVuY3Rpb24obywgaywgaSkgeyBvW2tdID0gaTsgfSk7XG4gICAgICAgIHRoaXMucnVsZUluZGV4TWFwQ2FjaGVbcnVsZU5hbWVzXSA9IHJlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblJlY29nbml6ZXIucHJvdG90eXBlLmdldFRva2VuVHlwZSA9IGZ1bmN0aW9uKHRva2VuTmFtZSkge1xuICAgIHZhciB0dHlwZSA9IHRoaXMuZ2V0VG9rZW5UeXBlTWFwKClbdG9rZW5OYW1lXTtcbiAgICBpZiAodHR5cGUgIT09dW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB0dHlwZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gVG9rZW4uSU5WQUxJRF9UWVBFO1xuICAgIH1cbn07XG5cblxuLy8gV2hhdCBpcyB0aGUgZXJyb3IgaGVhZGVyLCBub3JtYWxseSBsaW5lL2NoYXJhY3RlciBwb3NpdGlvbiBpbmZvcm1hdGlvbj8vL1xuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0RXJyb3JIZWFkZXIgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIGxpbmUgPSBlLmdldE9mZmVuZGluZ1Rva2VuKCkubGluZTtcbiAgICB2YXIgY29sdW1uID0gZS5nZXRPZmZlbmRpbmdUb2tlbigpLmNvbHVtbjtcbiAgICByZXR1cm4gXCJsaW5lIFwiICsgbGluZSArIFwiOlwiICsgY29sdW1uO1xufTtcblxuXG4vLyBIb3cgc2hvdWxkIGEgdG9rZW4gYmUgZGlzcGxheWVkIGluIGFuIGVycm9yIG1lc3NhZ2U/IFRoZSBkZWZhdWx0XG4vLyAgaXMgdG8gZGlzcGxheSBqdXN0IHRoZSB0ZXh0LCBidXQgZHVyaW5nIGRldmVsb3BtZW50IHlvdSBtaWdodFxuLy8gIHdhbnQgdG8gaGF2ZSBhIGxvdCBvZiBpbmZvcm1hdGlvbiBzcGl0IG91dC4gIE92ZXJyaWRlIGluIHRoYXQgY2FzZVxuLy8gIHRvIHVzZSB0LnRvU3RyaW5nKCkgKHdoaWNoLCBmb3IgQ29tbW9uVG9rZW4sIGR1bXBzIGV2ZXJ5dGhpbmcgYWJvdXRcbi8vICB0aGUgdG9rZW4pLiBUaGlzIGlzIGJldHRlciB0aGFuIGZvcmNpbmcgeW91IHRvIG92ZXJyaWRlIGEgbWV0aG9kIGluXG4vLyAgeW91ciB0b2tlbiBvYmplY3RzIGJlY2F1c2UgeW91IGRvbid0IGhhdmUgdG8gZ28gbW9kaWZ5IHlvdXIgbGV4ZXJcbi8vICBzbyB0aGF0IGl0IGNyZWF0ZXMgYSBuZXcgSmF2YSB0eXBlLlxuLy9cbi8vIEBkZXByZWNhdGVkIFRoaXMgbWV0aG9kIGlzIG5vdCBjYWxsZWQgYnkgdGhlIEFOVExSIDQgUnVudGltZS4gU3BlY2lmaWNcbi8vIGltcGxlbWVudGF0aW9ucyBvZiB7QGxpbmsgQU5UTFJFcnJvclN0cmF0ZWd5fSBtYXkgcHJvdmlkZSBhIHNpbWlsYXJcbi8vIGZlYXR1cmUgd2hlbiBuZWNlc3NhcnkuIEZvciBleGFtcGxlLCBzZWVcbi8vIHtAbGluayBEZWZhdWx0RXJyb3JTdHJhdGVneS8vZ2V0VG9rZW5FcnJvckRpc3BsYXl9LlxuLy9cblJlY29nbml6ZXIucHJvdG90eXBlLmdldFRva2VuRXJyb3JEaXNwbGF5ID0gZnVuY3Rpb24odCkge1xuICAgIGlmICh0PT09bnVsbCkge1xuICAgICAgICByZXR1cm4gXCI8bm8gdG9rZW4+XCI7XG4gICAgfVxuICAgIHZhciBzID0gdC50ZXh0O1xuICAgIGlmIChzPT09bnVsbCkge1xuICAgICAgICBpZiAodC50eXBlPT09VG9rZW4uRU9GKSB7XG4gICAgICAgICAgICBzID0gXCI8RU9GPlwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcyA9IFwiPFwiICsgdC50eXBlICsgXCI+XCI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcyA9IHMucmVwbGFjZShcIlxcblwiLFwiXFxcXG5cIikucmVwbGFjZShcIlxcclwiLFwiXFxcXHJcIikucmVwbGFjZShcIlxcdFwiLFwiXFxcXHRcIik7XG4gICAgcmV0dXJuIFwiJ1wiICsgcyArIFwiJ1wiO1xufTtcblxuUmVjb2duaXplci5wcm90b3R5cGUuZ2V0RXJyb3JMaXN0ZW5lckRpc3BhdGNoID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBQcm94eUVycm9yTGlzdGVuZXIodGhpcy5fbGlzdGVuZXJzKTtcbn07XG5cbi8vIHN1YmNsYXNzIG5lZWRzIHRvIG92ZXJyaWRlIHRoZXNlIGlmIHRoZXJlIGFyZSBzZW1wcmVkcyBvciBhY3Rpb25zXG4vLyB0aGF0IHRoZSBBVE4gaW50ZXJwIG5lZWRzIHRvIGV4ZWN1dGVcblJlY29nbml6ZXIucHJvdG90eXBlLnNlbXByZWQgPSBmdW5jdGlvbihsb2NhbGN0eCwgcnVsZUluZGV4LCBhY3Rpb25JbmRleCkge1xuICAgIHJldHVybiB0cnVlO1xufTtcblxuUmVjb2duaXplci5wcm90b3R5cGUucHJlY3ByZWQgPSBmdW5jdGlvbihsb2NhbGN0eCAsIHByZWNlZGVuY2UpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbi8vSW5kaWNhdGUgdGhhdCB0aGUgcmVjb2duaXplciBoYXMgY2hhbmdlZCBpbnRlcm5hbCBzdGF0ZSB0aGF0IGlzXG4vL2NvbnNpc3RlbnQgd2l0aCB0aGUgQVROIHN0YXRlIHBhc3NlZCBpbi4gIFRoaXMgd2F5IHdlIGFsd2F5cyBrbm93XG4vL3doZXJlIHdlIGFyZSBpbiB0aGUgQVROIGFzIHRoZSBwYXJzZXIgZ29lcyBhbG9uZy4gVGhlIHJ1bGVcbi8vY29udGV4dCBvYmplY3RzIGZvcm0gYSBzdGFjayB0aGF0IGxldHMgdXMgc2VlIHRoZSBzdGFjayBvZlxuLy9pbnZva2luZyBydWxlcy4gQ29tYmluZSB0aGlzIGFuZCB3ZSBoYXZlIGNvbXBsZXRlIEFUTlxuLy9jb25maWd1cmF0aW9uIGluZm9ybWF0aW9uLlxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUmVjb2duaXplci5wcm90b3R5cGUsIFwic3RhdGVcIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3RhdGVOdW1iZXI7XG5cdH0sXG5cdHNldCA6IGZ1bmN0aW9uKHN0YXRlKSB7XG5cdFx0dGhpcy5fc3RhdGVOdW1iZXIgPSBzdGF0ZTtcblx0fVxufSk7XG5cblxuZXhwb3J0cy5SZWNvZ25pemVyID0gUmVjb2duaXplcjtcbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vL1xuXG4vLyAgQSBydWxlIGNvbnRleHQgaXMgYSByZWNvcmQgb2YgYSBzaW5nbGUgcnVsZSBpbnZvY2F0aW9uLiBJdCBrbm93c1xuLy8gIHdoaWNoIGNvbnRleHQgaW52b2tlZCBpdCwgaWYgYW55LiBJZiB0aGVyZSBpcyBubyBwYXJlbnQgY29udGV4dCwgdGhlblxuLy8gIG5hdHVyYWxseSB0aGUgaW52b2tpbmcgc3RhdGUgaXMgbm90IHZhbGlkLiAgVGhlIHBhcmVudCBsaW5rXG4vLyAgcHJvdmlkZXMgYSBjaGFpbiB1cHdhcmRzIGZyb20gdGhlIGN1cnJlbnQgcnVsZSBpbnZvY2F0aW9uIHRvIHRoZSByb290XG4vLyAgb2YgdGhlIGludm9jYXRpb24gdHJlZSwgZm9ybWluZyBhIHN0YWNrLiBXZSBhY3R1YWxseSBjYXJyeSBub1xuLy8gIGluZm9ybWF0aW9uIGFib3V0IHRoZSBydWxlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGNvbnRleHQgKGV4Y2VwdFxuLy8gIHdoZW4gcGFyc2luZykuIFdlIGtlZXAgb25seSB0aGUgc3RhdGUgbnVtYmVyIG9mIHRoZSBpbnZva2luZyBzdGF0ZSBmcm9tXG4vLyAgdGhlIEFUTiBzdWJtYWNoaW5lIHRoYXQgaW52b2tlZCB0aGlzLiBDb250cmFzdCB0aGlzIHdpdGggdGhlIHNcbi8vICBwb2ludGVyIGluc2lkZSBQYXJzZXJSdWxlQ29udGV4dCB0aGF0IHRyYWNrcyB0aGUgY3VycmVudCBzdGF0ZVxuLy8gIGJlaW5nIFwiZXhlY3V0ZWRcIiBmb3IgdGhlIGN1cnJlbnQgcnVsZS5cbi8vXG4vLyAgVGhlIHBhcmVudCBjb250ZXh0cyBhcmUgdXNlZnVsIGZvciBjb21wdXRpbmcgbG9va2FoZWFkIHNldHMgYW5kXG4vLyAgZ2V0dGluZyBlcnJvciBpbmZvcm1hdGlvbi5cbi8vXG4vLyAgVGhlc2Ugb2JqZWN0cyBhcmUgdXNlZCBkdXJpbmcgcGFyc2luZyBhbmQgcHJlZGljdGlvbi5cbi8vICBGb3IgdGhlIHNwZWNpYWwgY2FzZSBvZiBwYXJzZXJzLCB3ZSB1c2UgdGhlIHN1YmNsYXNzXG4vLyAgUGFyc2VyUnVsZUNvbnRleHQuXG4vL1xuLy8gIEBzZWUgUGFyc2VyUnVsZUNvbnRleHRcbi8vL1xuXG52YXIgUnVsZU5vZGUgPSByZXF1aXJlKCcuL3RyZWUvVHJlZScpLlJ1bGVOb2RlO1xudmFyIElOVkFMSURfSU5URVJWQUwgPSByZXF1aXJlKCcuL3RyZWUvVHJlZScpLklOVkFMSURfSU5URVJWQUw7XG52YXIgSU5WQUxJRF9BTFRfTlVNQkVSID0gcmVxdWlyZSgnLi9hdG4vQVROJykuSU5WQUxJRF9BTFRfTlVNQkVSO1xuXG5mdW5jdGlvbiBSdWxlQ29udGV4dChwYXJlbnQsIGludm9raW5nU3RhdGUpIHtcblx0UnVsZU5vZGUuY2FsbCh0aGlzKTtcblx0Ly8gV2hhdCBjb250ZXh0IGludm9rZWQgdGhpcyBydWxlP1xuXHR0aGlzLnBhcmVudEN0eCA9IHBhcmVudCB8fCBudWxsO1xuXHQvLyBXaGF0IHN0YXRlIGludm9rZWQgdGhlIHJ1bGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29udGV4dD9cblx0Ly8gVGhlIFwicmV0dXJuIGFkZHJlc3NcIiBpcyB0aGUgZm9sbG93U3RhdGUgb2YgaW52b2tpbmdTdGF0ZVxuXHQvLyBJZiBwYXJlbnQgaXMgbnVsbCwgdGhpcyBzaG91bGQgYmUgLTEuXG5cdHRoaXMuaW52b2tpbmdTdGF0ZSA9IGludm9raW5nU3RhdGUgfHwgLTE7XG5cdHJldHVybiB0aGlzO1xufVxuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFJ1bGVOb2RlLnByb3RvdHlwZSk7XG5SdWxlQ29udGV4dC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSdWxlQ29udGV4dDtcblxuUnVsZUNvbnRleHQucHJvdG90eXBlLmRlcHRoID0gZnVuY3Rpb24oKSB7XG5cdHZhciBuID0gMDtcblx0dmFyIHAgPSB0aGlzO1xuXHR3aGlsZSAocCAhPT0gbnVsbCkge1xuXHRcdHAgPSBwLnBhcmVudEN0eDtcblx0XHRuICs9IDE7XG5cdH1cblx0cmV0dXJuIG47XG59O1xuXG4vLyBBIGNvbnRleHQgaXMgZW1wdHkgaWYgdGhlcmUgaXMgbm8gaW52b2tpbmcgc3RhdGU7IG1lYW5pbmcgbm9ib2R5IGNhbGxcbi8vIGN1cnJlbnQgY29udGV4dC5cblJ1bGVDb250ZXh0LnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLmludm9raW5nU3RhdGUgPT09IC0xO1xufTtcblxuLy8gc2F0aXNmeSB0aGUgUGFyc2VUcmVlIC8gU3ludGF4VHJlZSBpbnRlcmZhY2VcblxuUnVsZUNvbnRleHQucHJvdG90eXBlLmdldFNvdXJjZUludGVydmFsID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBJTlZBTElEX0lOVEVSVkFMO1xufTtcblxuUnVsZUNvbnRleHQucHJvdG90eXBlLmdldFJ1bGVDb250ZXh0ID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzO1xufTtcblxuUnVsZUNvbnRleHQucHJvdG90eXBlLmdldFBheWxvYWQgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXM7XG59O1xuXG4vLyBSZXR1cm4gdGhlIGNvbWJpbmVkIHRleHQgb2YgYWxsIGNoaWxkIG5vZGVzLiBUaGlzIG1ldGhvZCBvbmx5IGNvbnNpZGVyc1xuLy8gdG9rZW5zIHdoaWNoIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgcGFyc2UgdHJlZS5cbi8vIDxwPlxuLy8gU2luY2UgdG9rZW5zIG9uIGhpZGRlbiBjaGFubmVscyAoZS5nLiB3aGl0ZXNwYWNlIG9yIGNvbW1lbnRzKSBhcmUgbm90XG4vLyBhZGRlZCB0byB0aGUgcGFyc2UgdHJlZXMsIHRoZXkgd2lsbCBub3QgYXBwZWFyIGluIHRoZSBvdXRwdXQgb2YgdGhpc1xuLy8gbWV0aG9kLlxuLy8gL1xuUnVsZUNvbnRleHQucHJvdG90eXBlLmdldFRleHQgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuZ2V0Q2hpbGRDb3VudCgpID09PSAwKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMuY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKGNoaWxkKSB7XG5cdFx0XHRyZXR1cm4gY2hpbGQuZ2V0VGV4dCgpO1xuXHRcdH0pLmpvaW4oXCJcIik7XG5cdH1cbn07XG5cbi8vIEZvciBydWxlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhcnNlIHRyZWUgaW50ZXJuYWwgbm9kZSwgcmV0dXJuXG4vLyB0aGUgb3V0ZXIgYWx0ZXJuYXRpdmUgbnVtYmVyIHVzZWQgdG8gbWF0Y2ggdGhlIGlucHV0LiBEZWZhdWx0XG4vLyBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBjb21wdXRlIG5vciBzdG9yZSB0aGlzIGFsdCBudW0uIENyZWF0ZVxuLy8gYSBzdWJjbGFzcyBvZiBQYXJzZXJSdWxlQ29udGV4dCB3aXRoIGJhY2tpbmcgZmllbGQgYW5kIHNldFxuLy8gb3B0aW9uIGNvbnRleHRTdXBlckNsYXNzLlxuLy8gdG8gc2V0IGl0LlxuUnVsZUNvbnRleHQucHJvdG90eXBlLmdldEFsdE51bWJlciA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gSU5WQUxJRF9BTFRfTlVNQkVSOyB9XG5cbi8vIFNldCB0aGUgb3V0ZXIgYWx0ZXJuYXRpdmUgbnVtYmVyIGZvciB0aGlzIGNvbnRleHQgbm9kZS4gRGVmYXVsdFxuLy8gaW1wbGVtZW50YXRpb24gZG9lcyBub3RoaW5nIHRvIGF2b2lkIGJhY2tpbmcgZmllbGQgb3ZlcmhlYWQgZm9yXG4vLyB0cmVlcyB0aGF0IGRvbid0IG5lZWQgaXQuICBDcmVhdGVcbi8vIGEgc3ViY2xhc3Mgb2YgUGFyc2VyUnVsZUNvbnRleHQgd2l0aCBiYWNraW5nIGZpZWxkIGFuZCBzZXRcbi8vIG9wdGlvbiBjb250ZXh0U3VwZXJDbGFzcy5cblJ1bGVDb250ZXh0LnByb3RvdHlwZS5zZXRBbHROdW1iZXIgPSBmdW5jdGlvbihhbHROdW1iZXIpIHsgfVxuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuZ2V0Q2hpbGQgPSBmdW5jdGlvbihpKSB7XG5cdHJldHVybiBudWxsO1xufTtcblxuUnVsZUNvbnRleHQucHJvdG90eXBlLmdldENoaWxkQ291bnQgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIDA7XG59O1xuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24odmlzaXRvcikge1xuXHRyZXR1cm4gdmlzaXRvci52aXNpdENoaWxkcmVuKHRoaXMpO1xufTtcblxuLy9uZWVkIHRvIG1hbmFnZSBjaXJjdWxhciBkZXBlbmRlbmNpZXMsIHNvIGV4cG9ydCBub3dcbmV4cG9ydHMuUnVsZUNvbnRleHQgPSBSdWxlQ29udGV4dDtcbnZhciBUcmVlcyA9IHJlcXVpcmUoJy4vdHJlZS9UcmVlcycpLlRyZWVzO1xuXG5cbi8vIFByaW50IG91dCBhIHdob2xlIHRyZWUsIG5vdCBqdXN0IGEgbm9kZSwgaW4gTElTUCBmb3JtYXRcbi8vIChyb290IGNoaWxkMSAuLiBjaGlsZE4pLiBQcmludCBqdXN0IGEgbm9kZSBpZiB0aGlzIGlzIGEgbGVhZi5cbi8vXG5cblJ1bGVDb250ZXh0LnByb3RvdHlwZS50b1N0cmluZ1RyZWUgPSBmdW5jdGlvbihydWxlTmFtZXMsIHJlY29nKSB7XG5cdHJldHVybiBUcmVlcy50b1N0cmluZ1RyZWUodGhpcywgcnVsZU5hbWVzLCByZWNvZyk7XG59O1xuXG5SdWxlQ29udGV4dC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbihydWxlTmFtZXMsIHN0b3ApIHtcblx0cnVsZU5hbWVzID0gcnVsZU5hbWVzIHx8IG51bGw7XG5cdHN0b3AgPSBzdG9wIHx8IG51bGw7XG5cdHZhciBwID0gdGhpcztcblx0dmFyIHMgPSBcIltcIjtcblx0d2hpbGUgKHAgIT09IG51bGwgJiYgcCAhPT0gc3RvcCkge1xuXHRcdGlmIChydWxlTmFtZXMgPT09IG51bGwpIHtcblx0XHRcdGlmICghcC5pc0VtcHR5KCkpIHtcblx0XHRcdFx0cyArPSBwLmludm9raW5nU3RhdGU7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZhciByaSA9IHAucnVsZUluZGV4O1xuXHRcdFx0dmFyIHJ1bGVOYW1lID0gKHJpID49IDAgJiYgcmkgPCBydWxlTmFtZXMubGVuZ3RoKSA/IHJ1bGVOYW1lc1tyaV1cblx0XHRcdFx0XHQ6IFwiXCIgKyByaTtcblx0XHRcdHMgKz0gcnVsZU5hbWU7XG5cdFx0fVxuXHRcdGlmIChwLnBhcmVudEN0eCAhPT0gbnVsbCAmJiAocnVsZU5hbWVzICE9PSBudWxsIHx8ICFwLnBhcmVudEN0eC5pc0VtcHR5KCkpKSB7XG5cdFx0XHRzICs9IFwiIFwiO1xuXHRcdH1cblx0XHRwID0gcC5wYXJlbnRDdHg7XG5cdH1cblx0cyArPSBcIl1cIjtcblx0cmV0dXJuIHM7XG59O1xuXG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vL1xuXG4vLyBBIHRva2VuIGhhcyBwcm9wZXJ0aWVzOiB0ZXh0LCB0eXBlLCBsaW5lLCBjaGFyYWN0ZXIgcG9zaXRpb24gaW4gdGhlIGxpbmVcbi8vIChzbyB3ZSBjYW4gaWdub3JlIHRhYnMpLCB0b2tlbiBjaGFubmVsLCBpbmRleCwgYW5kIHNvdXJjZSBmcm9tIHdoaWNoXG4vLyB3ZSBvYnRhaW5lZCB0aGlzIHRva2VuLlxuXG5mdW5jdGlvbiBUb2tlbigpIHtcblx0dGhpcy5zb3VyY2UgPSBudWxsO1xuXHR0aGlzLnR5cGUgPSBudWxsOyAvLyB0b2tlbiB0eXBlIG9mIHRoZSB0b2tlblxuXHR0aGlzLmNoYW5uZWwgPSBudWxsOyAvLyBUaGUgcGFyc2VyIGlnbm9yZXMgZXZlcnl0aGluZyBub3Qgb24gREVGQVVMVF9DSEFOTkVMXG5cdHRoaXMuc3RhcnQgPSBudWxsOyAvLyBvcHRpb25hbDsgcmV0dXJuIC0xIGlmIG5vdCBpbXBsZW1lbnRlZC5cblx0dGhpcy5zdG9wID0gbnVsbDsgLy8gb3B0aW9uYWw7IHJldHVybiAtMSBpZiBub3QgaW1wbGVtZW50ZWQuXG5cdHRoaXMudG9rZW5JbmRleCA9IG51bGw7IC8vIGZyb20gMC4ubi0xIG9mIHRoZSB0b2tlbiBvYmplY3QgaW4gdGhlIGlucHV0IHN0cmVhbVxuXHR0aGlzLmxpbmUgPSBudWxsOyAvLyBsaW5lPTEuLm4gb2YgdGhlIDFzdCBjaGFyYWN0ZXJcblx0dGhpcy5jb2x1bW4gPSBudWxsOyAvLyBiZWdpbm5pbmcgb2YgdGhlIGxpbmUgYXQgd2hpY2ggaXQgb2NjdXJzLCAwLi5uLTFcblx0dGhpcy5fdGV4dCA9IG51bGw7IC8vIHRleHQgb2YgdGhlIHRva2VuLlxuXHRyZXR1cm4gdGhpcztcbn1cblxuVG9rZW4uSU5WQUxJRF9UWVBFID0gMDtcblxuLy8gRHVyaW5nIGxvb2thaGVhZCBvcGVyYXRpb25zLCB0aGlzIFwidG9rZW5cIiBzaWduaWZpZXMgd2UgaGl0IHJ1bGUgZW5kIEFUTiBzdGF0ZVxuLy8gYW5kIGRpZCBub3QgZm9sbG93IGl0IGRlc3BpdGUgbmVlZGluZyB0by5cblRva2VuLkVQU0lMT04gPSAtMjtcblxuVG9rZW4uTUlOX1VTRVJfVE9LRU5fVFlQRSA9IDE7XG5cblRva2VuLkVPRiA9IC0xO1xuXG4vLyBBbGwgdG9rZW5zIGdvIHRvIHRoZSBwYXJzZXIgKHVubGVzcyBza2lwKCkgaXMgY2FsbGVkIGluIHRoYXQgcnVsZSlcbi8vIG9uIGEgcGFydGljdWxhciBcImNoYW5uZWxcIi4gVGhlIHBhcnNlciB0dW5lcyB0byBhIHBhcnRpY3VsYXIgY2hhbm5lbFxuLy8gc28gdGhhdCB3aGl0ZXNwYWNlIGV0Yy4uLiBjYW4gZ28gdG8gdGhlIHBhcnNlciBvbiBhIFwiaGlkZGVuXCIgY2hhbm5lbC5cblxuVG9rZW4uREVGQVVMVF9DSEFOTkVMID0gMDtcblxuLy8gQW55dGhpbmcgb24gZGlmZmVyZW50IGNoYW5uZWwgdGhhbiBERUZBVUxUX0NIQU5ORUwgaXMgbm90IHBhcnNlZFxuLy8gYnkgcGFyc2VyLlxuXG5Ub2tlbi5ISURERU5fQ0hBTk5FTCA9IDE7XG5cbi8vIEV4cGxpY2l0bHkgc2V0IHRoZSB0ZXh0IGZvciB0aGlzIHRva2VuLiBJZiB7Y29kZSB0ZXh0fSBpcyBub3Rcbi8vIHtAY29kZSBudWxsfSwgdGhlbiB7QGxpbmsgLy9nZXRUZXh0fSB3aWxsIHJldHVybiB0aGlzIHZhbHVlIHJhdGhlciB0aGFuXG4vLyBleHRyYWN0aW5nIHRoZSB0ZXh0IGZyb20gdGhlIGlucHV0LlxuLy9cbi8vIEBwYXJhbSB0ZXh0IFRoZSBleHBsaWNpdCB0ZXh0IG9mIHRoZSB0b2tlbiwgb3Ige0Bjb2RlIG51bGx9IGlmIHRoZSB0ZXh0XG4vLyBzaG91bGQgYmUgb2J0YWluZWQgZnJvbSB0aGUgaW5wdXQgYWxvbmcgd2l0aCB0aGUgc3RhcnQgYW5kIHN0b3AgaW5kZXhlc1xuLy8gb2YgdGhlIHRva2VuLlxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoVG9rZW4ucHJvdG90eXBlLCBcInRleHRcIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5fdGV4dDtcblx0fSxcblx0c2V0IDogZnVuY3Rpb24odGV4dCkge1xuXHRcdHRoaXMuX3RleHQgPSB0ZXh0O1xuXHR9XG59KTtcblxuVG9rZW4ucHJvdG90eXBlLmdldFRva2VuU291cmNlID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnNvdXJjZVswXTtcbn07XG5cblRva2VuLnByb3RvdHlwZS5nZXRJbnB1dFN0cmVhbSA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5zb3VyY2VbMV07XG59O1xuXG5mdW5jdGlvbiBDb21tb25Ub2tlbihzb3VyY2UsIHR5cGUsIGNoYW5uZWwsIHN0YXJ0LCBzdG9wKSB7XG5cdFRva2VuLmNhbGwodGhpcyk7XG5cdHRoaXMuc291cmNlID0gc291cmNlICE9PSB1bmRlZmluZWQgPyBzb3VyY2UgOiBDb21tb25Ub2tlbi5FTVBUWV9TT1VSQ0U7XG5cdHRoaXMudHlwZSA9IHR5cGUgIT09IHVuZGVmaW5lZCA/IHR5cGUgOiBudWxsO1xuXHR0aGlzLmNoYW5uZWwgPSBjaGFubmVsICE9PSB1bmRlZmluZWQgPyBjaGFubmVsIDogVG9rZW4uREVGQVVMVF9DSEFOTkVMO1xuXHR0aGlzLnN0YXJ0ID0gc3RhcnQgIT09IHVuZGVmaW5lZCA/IHN0YXJ0IDogLTE7XG5cdHRoaXMuc3RvcCA9IHN0b3AgIT09IHVuZGVmaW5lZCA/IHN0b3AgOiAtMTtcblx0dGhpcy50b2tlbkluZGV4ID0gLTE7XG5cdGlmICh0aGlzLnNvdXJjZVswXSAhPT0gbnVsbCkge1xuXHRcdHRoaXMubGluZSA9IHNvdXJjZVswXS5saW5lO1xuXHRcdHRoaXMuY29sdW1uID0gc291cmNlWzBdLmNvbHVtbjtcblx0fSBlbHNlIHtcblx0XHR0aGlzLmNvbHVtbiA9IC0xO1xuXHR9XG5cdHJldHVybiB0aGlzO1xufVxuXG5Db21tb25Ub2tlbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRva2VuLnByb3RvdHlwZSk7XG5Db21tb25Ub2tlbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBDb21tb25Ub2tlbjtcblxuLy8gQW4gZW1wdHkge0BsaW5rIFBhaXJ9IHdoaWNoIGlzIHVzZWQgYXMgdGhlIGRlZmF1bHQgdmFsdWUgb2Zcbi8vIHtAbGluayAvL3NvdXJjZX0gZm9yIHRva2VucyB0aGF0IGRvIG5vdCBoYXZlIGEgc291cmNlLlxuQ29tbW9uVG9rZW4uRU1QVFlfU09VUkNFID0gWyBudWxsLCBudWxsIF07XG5cbi8vIENvbnN0cnVjdHMgYSBuZXcge0BsaW5rIENvbW1vblRva2VufSBhcyBhIGNvcHkgb2YgYW5vdGhlciB7QGxpbmsgVG9rZW59LlxuLy9cbi8vIDxwPlxuLy8gSWYge0Bjb2RlIG9sZFRva2VufSBpcyBhbHNvIGEge0BsaW5rIENvbW1vblRva2VufSBpbnN0YW5jZSwgdGhlIG5ld2x5XG4vLyBjb25zdHJ1Y3RlZCB0b2tlbiB3aWxsIHNoYXJlIGEgcmVmZXJlbmNlIHRvIHRoZSB7QGxpbmsgLy90ZXh0fSBmaWVsZCBhbmRcbi8vIHRoZSB7QGxpbmsgUGFpcn0gc3RvcmVkIGluIHtAbGluayAvL3NvdXJjZX0uIE90aGVyd2lzZSwge0BsaW5rIC8vdGV4dH0gd2lsbFxuLy8gYmUgYXNzaWduZWQgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHtAbGluayAvL2dldFRleHR9LCBhbmQge0BsaW5rIC8vc291cmNlfVxuLy8gd2lsbCBiZSBjb25zdHJ1Y3RlZCBmcm9tIHRoZSByZXN1bHQgb2Yge0BsaW5rIFRva2VuLy9nZXRUb2tlblNvdXJjZX0gYW5kXG4vLyB7QGxpbmsgVG9rZW4vL2dldElucHV0U3RyZWFtfS48L3A+XG4vL1xuLy8gQHBhcmFtIG9sZFRva2VuIFRoZSB0b2tlbiB0byBjb3B5LlxuLy9cbkNvbW1vblRva2VuLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgdCA9IG5ldyBDb21tb25Ub2tlbih0aGlzLnNvdXJjZSwgdGhpcy50eXBlLCB0aGlzLmNoYW5uZWwsIHRoaXMuc3RhcnQsXG5cdFx0XHR0aGlzLnN0b3ApO1xuXHR0LnRva2VuSW5kZXggPSB0aGlzLnRva2VuSW5kZXg7XG5cdHQubGluZSA9IHRoaXMubGluZTtcblx0dC5jb2x1bW4gPSB0aGlzLmNvbHVtbjtcblx0dC50ZXh0ID0gdGhpcy50ZXh0O1xuXHRyZXR1cm4gdDtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb21tb25Ub2tlbi5wcm90b3R5cGUsIFwidGV4dFwiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdGlmICh0aGlzLl90ZXh0ICE9PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fdGV4dDtcblx0XHR9XG5cdFx0dmFyIGlucHV0ID0gdGhpcy5nZXRJbnB1dFN0cmVhbSgpO1xuXHRcdGlmIChpbnB1dCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHRcdHZhciBuID0gaW5wdXQuc2l6ZTtcblx0XHRpZiAodGhpcy5zdGFydCA8IG4gJiYgdGhpcy5zdG9wIDwgbikge1xuXHRcdFx0cmV0dXJuIGlucHV0LmdldFRleHQodGhpcy5zdGFydCwgdGhpcy5zdG9wKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiPEVPRj5cIjtcblx0XHR9XG5cdH0sXG5cdHNldCA6IGZ1bmN0aW9uKHRleHQpIHtcblx0XHR0aGlzLl90ZXh0ID0gdGV4dDtcblx0fVxufSk7XG5cbkNvbW1vblRva2VuLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgdHh0ID0gdGhpcy50ZXh0O1xuXHRpZiAodHh0ICE9PSBudWxsKSB7XG5cdFx0dHh0ID0gdHh0LnJlcGxhY2UoL1xcbi9nLCBcIlxcXFxuXCIpLnJlcGxhY2UoL1xcci9nLCBcIlxcXFxyXCIpLnJlcGxhY2UoL1xcdC9nLCBcIlxcXFx0XCIpO1xuXHR9IGVsc2Uge1xuXHRcdHR4dCA9IFwiPG5vIHRleHQ+XCI7XG5cdH1cblx0cmV0dXJuIFwiW0BcIiArIHRoaXMudG9rZW5JbmRleCArIFwiLFwiICsgdGhpcy5zdGFydCArIFwiOlwiICsgdGhpcy5zdG9wICsgXCI9J1wiICtcblx0XHRcdHR4dCArIFwiJyw8XCIgKyB0aGlzLnR5cGUgKyBcIj5cIiArXG5cdFx0XHQodGhpcy5jaGFubmVsID4gMCA/IFwiLGNoYW5uZWw9XCIgKyB0aGlzLmNoYW5uZWwgOiBcIlwiKSArIFwiLFwiICtcblx0XHRcdHRoaXMubGluZSArIFwiOlwiICsgdGhpcy5jb2x1bW4gKyBcIl1cIjtcbn07XG5cbmV4cG9ydHMuVG9rZW4gPSBUb2tlbjtcbmV4cG9ydHMuQ29tbW9uVG9rZW4gPSBDb21tb25Ub2tlbjtcbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxuZnVuY3Rpb24gYXJyYXlUb1N0cmluZyhhKSB7XG4gICAgcmV0dXJuIFwiW1wiICsgYS5qb2luKFwiLCBcIikgKyBcIl1cIjtcbn1cblxuU3RyaW5nLnByb3RvdHlwZS5zZWVkID0gU3RyaW5nLnByb3RvdHlwZS5zZWVkIHx8IE1hdGgucm91bmQoTWF0aC5yYW5kb20oKSAqIE1hdGgucG93KDIsIDMyKSk7XG5cblN0cmluZy5wcm90b3R5cGUuaGFzaENvZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJlbWFpbmRlciwgYnl0ZXMsIGgxLCBoMWIsIGMxLCBjMWIsIGMyLCBjMmIsIGsxLCBpLFxuICAgICAgICBrZXkgPSB0aGlzLnRvU3RyaW5nKCk7XG5cbiAgICByZW1haW5kZXIgPSBrZXkubGVuZ3RoICYgMzsgLy8ga2V5Lmxlbmd0aCAlIDRcbiAgICBieXRlcyA9IGtleS5sZW5ndGggLSByZW1haW5kZXI7XG4gICAgaDEgPSBTdHJpbmcucHJvdG90eXBlLnNlZWQ7XG4gICAgYzEgPSAweGNjOWUyZDUxO1xuICAgIGMyID0gMHgxYjg3MzU5MztcbiAgICBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgYnl0ZXMpIHtcbiAgICAgICAgazEgPVxuICAgICAgICAgICAgKChrZXkuY2hhckNvZGVBdChpKSAmIDB4ZmYpKSB8XG4gICAgICAgICAgICAoKGtleS5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCA4KSB8XG4gICAgICAgICAgICAoKGtleS5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAxNikgfFxuICAgICAgICAgICAgKChrZXkuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMjQpO1xuICAgICAgICArK2k7XG5cbiAgICAgICAgazEgPSAoKCgoazEgJiAweGZmZmYpICogYzEpICsgKCgoKGsxID4+PiAxNikgKiBjMSkgJiAweGZmZmYpIDw8IDE2KSkpICYgMHhmZmZmZmZmZjtcbiAgICAgICAgazEgPSAoazEgPDwgMTUpIHwgKGsxID4+PiAxNyk7XG4gICAgICAgIGsxID0gKCgoKGsxICYgMHhmZmZmKSAqIGMyKSArICgoKChrMSA+Pj4gMTYpICogYzIpICYgMHhmZmZmKSA8PCAxNikpKSAmIDB4ZmZmZmZmZmY7XG5cbiAgICAgICAgaDEgXj0gazE7XG4gICAgICAgIGgxID0gKGgxIDw8IDEzKSB8IChoMSA+Pj4gMTkpO1xuICAgICAgICBoMWIgPSAoKCgoaDEgJiAweGZmZmYpICogNSkgKyAoKCgoaDEgPj4+IDE2KSAqIDUpICYgMHhmZmZmKSA8PCAxNikpKSAmIDB4ZmZmZmZmZmY7XG4gICAgICAgIGgxID0gKCgoaDFiICYgMHhmZmZmKSArIDB4NmI2NCkgKyAoKCgoaDFiID4+PiAxNikgKyAweGU2NTQpICYgMHhmZmZmKSA8PCAxNikpO1xuICAgIH1cblxuICAgIGsxID0gMDtcblxuICAgIHN3aXRjaCAocmVtYWluZGVyKSB7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAgIGsxIF49IChrZXkuY2hhckNvZGVBdChpICsgMikgJiAweGZmKSA8PCAxNjtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgazEgXj0gKGtleS5jaGFyQ29kZUF0KGkgKyAxKSAmIDB4ZmYpIDw8IDg7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgIGsxIF49IChrZXkuY2hhckNvZGVBdChpKSAmIDB4ZmYpO1xuXG4gICAgICAgICAgICBrMSA9ICgoKGsxICYgMHhmZmZmKSAqIGMxKSArICgoKChrMSA+Pj4gMTYpICogYzEpICYgMHhmZmZmKSA8PCAxNikpICYgMHhmZmZmZmZmZjtcbiAgICAgICAgICAgIGsxID0gKGsxIDw8IDE1KSB8IChrMSA+Pj4gMTcpO1xuICAgICAgICAgICAgazEgPSAoKChrMSAmIDB4ZmZmZikgKiBjMikgKyAoKCgoazEgPj4+IDE2KSAqIGMyKSAmIDB4ZmZmZikgPDwgMTYpKSAmIDB4ZmZmZmZmZmY7XG4gICAgICAgICAgICBoMSBePSBrMTtcbiAgICB9XG5cbiAgICBoMSBePSBrZXkubGVuZ3RoO1xuXG4gICAgaDEgXj0gaDEgPj4+IDE2O1xuICAgIGgxID0gKCgoaDEgJiAweGZmZmYpICogMHg4NWViY2E2YikgKyAoKCgoaDEgPj4+IDE2KSAqIDB4ODVlYmNhNmIpICYgMHhmZmZmKSA8PCAxNikpICYgMHhmZmZmZmZmZjtcbiAgICBoMSBePSBoMSA+Pj4gMTM7XG4gICAgaDEgPSAoKCgoaDEgJiAweGZmZmYpICogMHhjMmIyYWUzNSkgKyAoKCgoaDEgPj4+IDE2KSAqIDB4YzJiMmFlMzUpICYgMHhmZmZmKSA8PCAxNikpKSAmIDB4ZmZmZmZmZmY7XG4gICAgaDEgXj0gaDEgPj4+IDE2O1xuXG4gICAgcmV0dXJuIGgxID4+PiAwO1xufTtcblxuZnVuY3Rpb24gc3RhbmRhcmRFcXVhbHNGdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGEuZXF1YWxzKGIpO1xufVxuXG5mdW5jdGlvbiBzdGFuZGFyZEhhc2hDb2RlRnVuY3Rpb24oYSkge1xuICAgIHJldHVybiBhLmhhc2hDb2RlKCk7XG59XG5cbmZ1bmN0aW9uIFNldChoYXNoRnVuY3Rpb24sIGVxdWFsc0Z1bmN0aW9uKSB7XG4gICAgdGhpcy5kYXRhID0ge307XG4gICAgdGhpcy5oYXNoRnVuY3Rpb24gPSBoYXNoRnVuY3Rpb24gfHwgc3RhbmRhcmRIYXNoQ29kZUZ1bmN0aW9uO1xuICAgIHRoaXMuZXF1YWxzRnVuY3Rpb24gPSBlcXVhbHNGdW5jdGlvbiB8fCBzdGFuZGFyZEVxdWFsc0Z1bmN0aW9uO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoU2V0LnByb3RvdHlwZSwgXCJsZW5ndGhcIiwge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbCA9IDA7XG4gICAgICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZihcImhhc2hfXCIpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgbCA9IGwgKyB0aGlzLmRhdGFba2V5XS5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGw7XG4gICAgfVxufSk7XG5cblNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgdmFyIGhhc2ggPSB0aGlzLmhhc2hGdW5jdGlvbih2YWx1ZSk7XG4gICAgdmFyIGtleSA9IFwiaGFzaF9cIiArIGhhc2g7XG4gICAgaWYgKGtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgdmFyIHZhbHVlcyA9IHRoaXMuZGF0YVtrZXldO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHVlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZXF1YWxzRnVuY3Rpb24odmFsdWUsIHZhbHVlc1tpXSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWVzW2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZGF0YVtrZXldID0gW3ZhbHVlXTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbn07XG5cblNldC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5nZXQodmFsdWUpICE9IG51bGw7XG59O1xuXG5TZXQucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHZhciBoYXNoID0gdGhpcy5oYXNoRnVuY3Rpb24odmFsdWUpO1xuICAgIHZhciBrZXkgPSBcImhhc2hfXCIgKyBoYXNoO1xuICAgIGlmIChrZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgIHZhciB2YWx1ZXMgPSB0aGlzLmRhdGFba2V5XTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmVxdWFsc0Z1bmN0aW9uKHZhbHVlLCB2YWx1ZXNbaV0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cblNldC5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBsID0gW107XG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMuZGF0YSkge1xuICAgICAgICBpZiAoa2V5LmluZGV4T2YoXCJoYXNoX1wiKSA9PT0gMCkge1xuICAgICAgICAgICAgbCA9IGwuY29uY2F0KHRoaXMuZGF0YVtrZXldKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbDtcbn07XG5cblNldC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGFycmF5VG9TdHJpbmcodGhpcy52YWx1ZXMoKSk7XG59O1xuXG5mdW5jdGlvbiBCaXRTZXQoKSB7XG4gICAgdGhpcy5kYXRhID0gW107XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkJpdFNldC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgdGhpcy5kYXRhW3ZhbHVlXSA9IHRydWU7XG59O1xuXG5CaXRTZXQucHJvdG90eXBlLm9yID0gZnVuY3Rpb24gKHNldCkge1xuICAgIHZhciBiaXRzID0gdGhpcztcbiAgICBPYmplY3Qua2V5cyhzZXQuZGF0YSkubWFwKGZ1bmN0aW9uIChhbHQpIHtcbiAgICAgICAgYml0cy5hZGQoYWx0KTtcbiAgICB9KTtcbn07XG5cbkJpdFNldC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgZGVsZXRlIHRoaXMuZGF0YVt2YWx1ZV07XG59O1xuXG5CaXRTZXQucHJvdG90eXBlLmNvbnRhaW5zID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVt2YWx1ZV0gPT09IHRydWU7XG59O1xuXG5CaXRTZXQucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5kYXRhKTtcbn07XG5cbkJpdFNldC5wcm90b3R5cGUubWluVmFsdWUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIE1hdGgubWluLmFwcGx5KG51bGwsIHRoaXMudmFsdWVzKCkpO1xufTtcblxuQml0U2V0LnByb3RvdHlwZS5oYXNoQ29kZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG4gICAgaGFzaC51cGRhdGUodGhpcy52YWx1ZXMoKSk7XG4gICAgcmV0dXJuIGhhc2guZmluaXNoKCk7XG59O1xuXG5CaXRTZXQucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChvdGhlcikge1xuICAgIGlmICghKG90aGVyIGluc3RhbmNlb2YgQml0U2V0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhhc2hDb2RlKCkgPT09IG90aGVyLmhhc2hDb2RlKCk7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQml0U2V0LnByb3RvdHlwZSwgXCJsZW5ndGhcIiwge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZXMoKS5sZW5ndGg7XG4gICAgfVxufSk7XG5cbkJpdFNldC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFwie1wiICsgdGhpcy52YWx1ZXMoKS5qb2luKFwiLCBcIikgKyBcIn1cIjtcbn07XG5cbmZ1bmN0aW9uIE1hcChoYXNoRnVuY3Rpb24sIGVxdWFsc0Z1bmN0aW9uKSB7XG4gICAgdGhpcy5kYXRhID0ge307XG4gICAgdGhpcy5oYXNoRnVuY3Rpb24gPSBoYXNoRnVuY3Rpb24gfHwgc3RhbmRhcmRIYXNoQ29kZUZ1bmN0aW9uO1xuICAgIHRoaXMuZXF1YWxzRnVuY3Rpb24gPSBlcXVhbHNGdW5jdGlvbiB8fCBzdGFuZGFyZEVxdWFsc0Z1bmN0aW9uO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoTWFwLnByb3RvdHlwZSwgXCJsZW5ndGhcIiwge1xuICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgbCA9IDA7XG4gICAgICAgIGZvciAodmFyIGhhc2hLZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgICAgICBpZiAoaGFzaEtleS5pbmRleE9mKFwiaGFzaF9cIikgPT09IDApIHtcbiAgICAgICAgICAgICAgICBsID0gbCArIHRoaXMuZGF0YVtoYXNoS2V5XS5sZW5ndGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGw7XG4gICAgfVxufSk7XG5cbk1hcC5wcm90b3R5cGUucHV0ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICB2YXIgaGFzaEtleSA9IFwiaGFzaF9cIiArIHRoaXMuaGFzaEZ1bmN0aW9uKGtleSk7XG4gICAgaWYgKGhhc2hLZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgIHZhciBlbnRyaWVzID0gdGhpcy5kYXRhW2hhc2hLZXldO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaV07XG4gICAgICAgICAgICBpZiAodGhpcy5lcXVhbHNGdW5jdGlvbihrZXksIGVudHJ5LmtleSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgb2xkVmFsdWUgPSBlbnRyeS52YWx1ZTtcbiAgICAgICAgICAgICAgICBlbnRyeS52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIHJldHVybiBvbGRWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbnRyaWVzLnB1c2goe2tleTprZXksIHZhbHVlOnZhbHVlfSk7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRhdGFbaGFzaEtleV0gPSBbe2tleTprZXksIHZhbHVlOnZhbHVlfV07XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG59O1xuXG5NYXAucHJvdG90eXBlLmNvbnRhaW5zS2V5ID0gZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBoYXNoS2V5ID0gXCJoYXNoX1wiICsgdGhpcy5oYXNoRnVuY3Rpb24oa2V5KTtcbiAgICBpZihoYXNoS2V5IGluIHRoaXMuZGF0YSkge1xuICAgICAgICB2YXIgZW50cmllcyA9IHRoaXMuZGF0YVtoYXNoS2V5XTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2ldO1xuICAgICAgICAgICAgaWYgKHRoaXMuZXF1YWxzRnVuY3Rpb24oa2V5LCBlbnRyeS5rZXkpKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbk1hcC5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBoYXNoS2V5ID0gXCJoYXNoX1wiICsgdGhpcy5oYXNoRnVuY3Rpb24oa2V5KTtcbiAgICBpZihoYXNoS2V5IGluIHRoaXMuZGF0YSkge1xuICAgICAgICB2YXIgZW50cmllcyA9IHRoaXMuZGF0YVtoYXNoS2V5XTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBlbnRyaWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2ldO1xuICAgICAgICAgICAgaWYgKHRoaXMuZXF1YWxzRnVuY3Rpb24oa2V5LCBlbnRyeS5rZXkpKVxuICAgICAgICAgICAgICAgIHJldHVybiBlbnRyeS52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbk1hcC5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbCA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLmRhdGEpIHtcbiAgICAgICAgaWYgKGtleS5pbmRleE9mKFwiaGFzaF9cIikgPT09IDApIHtcbiAgICAgICAgICAgIGwgPSBsLmNvbmNhdCh0aGlzLmRhdGFba2V5XSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGw7XG59O1xuXG5cbk1hcC5wcm90b3R5cGUuZ2V0S2V5cyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyaWVzKCkubWFwKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgcmV0dXJuIGUua2V5O1xuICAgIH0pO1xufTtcblxuXG5NYXAucHJvdG90eXBlLmdldFZhbHVlcyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5lbnRyaWVzKCkubWFwKGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlLnZhbHVlO1xuICAgIH0pO1xufTtcblxuXG5NYXAucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzcyA9IHRoaXMuZW50cmllcygpLm1hcChmdW5jdGlvbihlbnRyeSkge1xuICAgICAgICByZXR1cm4gJ3snICsgZW50cnkua2V5ICsgJzonICsgZW50cnkudmFsdWUgKyAnfSc7XG4gICAgfSk7XG4gICAgcmV0dXJuICdbJyArIHNzLmpvaW4oXCIsIFwiKSArICddJztcbn07XG5cblxuZnVuY3Rpb24gQWx0RGljdCgpIHtcbiAgICB0aGlzLmRhdGEgPSB7fTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuXG5BbHREaWN0LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAga2V5ID0gXCJrLVwiICsga2V5O1xuICAgIGlmIChrZXkgaW4gdGhpcy5kYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGFba2V5XTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59O1xuXG5BbHREaWN0LnByb3RvdHlwZS5wdXQgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIGtleSA9IFwiay1cIiArIGtleTtcbiAgICB0aGlzLmRhdGFba2V5XSA9IHZhbHVlO1xufTtcblxuQWx0RGljdC5wcm90b3R5cGUudmFsdWVzID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBkYXRhID0gdGhpcy5kYXRhO1xuICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXModGhpcy5kYXRhKTtcbiAgICByZXR1cm4ga2V5cy5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4gZGF0YVtrZXldO1xuICAgIH0pO1xufTtcblxuZnVuY3Rpb24gRG91YmxlRGljdCgpIHtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuZnVuY3Rpb24gSGFzaCgpIHtcbiAgICB0aGlzLmNvdW50ID0gMDtcbiAgICB0aGlzLmhhc2ggPSAwO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5IYXNoLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgZm9yKHZhciBpPTA7aTxhcmd1bWVudHMubGVuZ3RoO2krKykge1xuICAgICAgICB2YXIgdmFsdWUgPSBhcmd1bWVudHNbaV07XG4gICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGlmKEFycmF5LmlzQXJyYXkodmFsdWUpKVxuICAgICAgICAgICAgdGhpcy51cGRhdGUuYXBwbHkodmFsdWUpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBrID0gMDtcbiAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgICAgICAgICBrID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgIGsgPSB2YWx1ZS5oYXNoQ29kZSgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICB2YWx1ZS51cGRhdGVIYXNoQ29kZSh0aGlzKTtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBrID0gayAqIDB4Q0M5RTJENTE7XG4gICAgICAgICAgICBrID0gKGsgPDwgMTUpIHwgKGsgPj4+ICgzMiAtIDE1KSk7XG4gICAgICAgICAgICBrID0gayAqIDB4MUI4NzM1OTM7XG4gICAgICAgICAgICB0aGlzLmNvdW50ID0gdGhpcy5jb3VudCArIDE7XG4gICAgICAgICAgICB2YXIgaGFzaCA9IHRoaXMuaGFzaCBeIGs7XG4gICAgICAgICAgICBoYXNoID0gKGhhc2ggPDwgMTMpIHwgKGhhc2ggPj4+ICgzMiAtIDEzKSk7XG4gICAgICAgICAgICBoYXNoID0gaGFzaCAqIDUgKyAweEU2NTQ2QjY0O1xuICAgICAgICAgICAgdGhpcy5oYXNoID0gaGFzaDtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuSGFzaC5wcm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBoYXNoID0gdGhpcy5oYXNoIF4gKHRoaXMuY291bnQgKiA0KTtcbiAgICBoYXNoID0gaGFzaCBeIChoYXNoID4+PiAxNik7XG4gICAgaGFzaCA9IGhhc2ggKiAweDg1RUJDQTZCO1xuICAgIGhhc2ggPSBoYXNoIF4gKGhhc2ggPj4+IDEzKTtcbiAgICBoYXNoID0gaGFzaCAqIDB4QzJCMkFFMzU7XG4gICAgaGFzaCA9IGhhc2ggXiAoaGFzaCA+Pj4gMTYpO1xuICAgIHJldHVybiBoYXNoO1xufVxuXG5mdW5jdGlvbiBoYXNoU3R1ZmYoKSB7XG4gICAgdmFyIGhhc2ggPSBuZXcgSGFzaCgpO1xuICAgIGhhc2gudXBkYXRlLmFwcGx5KGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIGhhc2guZmluaXNoKCk7XG59XG5cbkRvdWJsZURpY3QucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgdmFyIGQgPSB0aGlzW2FdIHx8IG51bGw7XG4gICAgcmV0dXJuIGQgPT09IG51bGwgPyBudWxsIDogKGRbYl0gfHwgbnVsbCk7XG59O1xuXG5Eb3VibGVEaWN0LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoYSwgYiwgbykge1xuICAgIHZhciBkID0gdGhpc1thXSB8fCBudWxsO1xuICAgIGlmIChkID09PSBudWxsKSB7XG4gICAgICAgIGQgPSB7fTtcbiAgICAgICAgdGhpc1thXSA9IGQ7XG4gICAgfVxuICAgIGRbYl0gPSBvO1xufTtcblxuXG5mdW5jdGlvbiBlc2NhcGVXaGl0ZXNwYWNlKHMsIGVzY2FwZVNwYWNlcykge1xuICAgIHMgPSBzLnJlcGxhY2UoL1xcdC9nLCBcIlxcXFx0XCIpXG4gICAgICAgICAucmVwbGFjZSgvXFxuL2csIFwiXFxcXG5cIilcbiAgICAgICAgIC5yZXBsYWNlKC9cXHIvZywgXCJcXFxcclwiKTtcbiAgICBpZiAoZXNjYXBlU3BhY2VzKSB7XG4gICAgICAgIHMgPSBzLnJlcGxhY2UoLyAvZywgXCJcXHUwMEI3XCIpO1xuICAgIH1cbiAgICByZXR1cm4gcztcbn1cblxuZnVuY3Rpb24gdGl0bGVDYXNlKHN0cikge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvXFx3XFxTKi9nLCBmdW5jdGlvbiAodHh0KSB7XG4gICAgICAgIHJldHVybiB0eHQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB0eHQuc3Vic3RyKDEpO1xuICAgIH0pO1xufTtcblxuZnVuY3Rpb24gZXF1YWxBcnJheXMoYSwgYilcbntcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYSkgfHwgIUFycmF5LmlzQXJyYXkoYikpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBpZiAoYSA9PSBiKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICBpZiAoYS5sZW5ndGggIT0gYi5sZW5ndGgpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGFbaV0gPT0gYltpXSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAoIWFbaV0uZXF1YWxzKGJbaV0pKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn07XG5cbmV4cG9ydHMuSGFzaCA9IEhhc2g7XG5leHBvcnRzLlNldCA9IFNldDtcbmV4cG9ydHMuTWFwID0gTWFwO1xuZXhwb3J0cy5CaXRTZXQgPSBCaXRTZXQ7XG5leHBvcnRzLkFsdERpY3QgPSBBbHREaWN0O1xuZXhwb3J0cy5Eb3VibGVEaWN0ID0gRG91YmxlRGljdDtcbmV4cG9ydHMuaGFzaFN0dWZmID0gaGFzaFN0dWZmO1xuZXhwb3J0cy5lc2NhcGVXaGl0ZXNwYWNlID0gZXNjYXBlV2hpdGVzcGFjZTtcbmV4cG9ydHMuYXJyYXlUb1N0cmluZyA9IGFycmF5VG9TdHJpbmc7XG5leHBvcnRzLnRpdGxlQ2FzZSA9IHRpdGxlQ2FzZTtcbmV4cG9ydHMuZXF1YWxBcnJheXMgPSBlcXVhbEFycmF5cztcbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxudmFyIExMMUFuYWx5emVyID0gcmVxdWlyZSgnLi8uLi9MTDFBbmFseXplcicpLkxMMUFuYWx5emVyO1xudmFyIEludGVydmFsU2V0ID0gcmVxdWlyZSgnLi8uLi9JbnRlcnZhbFNldCcpLkludGVydmFsU2V0O1xuXG5mdW5jdGlvbiBBVE4oZ3JhbW1hclR5cGUgLCBtYXhUb2tlblR5cGUpIHtcblxuICAgIC8vIFVzZWQgZm9yIHJ1bnRpbWUgZGVzZXJpYWxpemF0aW9uIG9mIEFUTnMgZnJvbSBzdHJpbmdzLy8vXG4gICAgLy8gVGhlIHR5cGUgb2YgdGhlIEFUTi5cbiAgICB0aGlzLmdyYW1tYXJUeXBlID0gZ3JhbW1hclR5cGU7XG4gICAgLy8gVGhlIG1heGltdW0gdmFsdWUgZm9yIGFueSBzeW1ib2wgcmVjb2duaXplZCBieSBhIHRyYW5zaXRpb24gaW4gdGhlIEFUTi5cbiAgICB0aGlzLm1heFRva2VuVHlwZSA9IG1heFRva2VuVHlwZTtcbiAgICB0aGlzLnN0YXRlcyA9IFtdO1xuICAgIC8vIEVhY2ggc3VicnVsZS9ydWxlIGlzIGEgZGVjaXNpb24gcG9pbnQgYW5kIHdlIG11c3QgdHJhY2sgdGhlbSBzbyB3ZVxuICAgIC8vICBjYW4gZ28gYmFjayBsYXRlciBhbmQgYnVpbGQgREZBIHByZWRpY3RvcnMgZm9yIHRoZW0uICBUaGlzIGluY2x1ZGVzXG4gICAgLy8gIGFsbCB0aGUgcnVsZXMsIHN1YnJ1bGVzLCBvcHRpb25hbCBibG9ja3MsICgpKywgKCkqIGV0Yy4uLlxuICAgIHRoaXMuZGVjaXNpb25Ub1N0YXRlID0gW107XG4gICAgLy8gTWFwcyBmcm9tIHJ1bGUgaW5kZXggdG8gc3RhcnRpbmcgc3RhdGUgbnVtYmVyLlxuICAgIHRoaXMucnVsZVRvU3RhcnRTdGF0ZSA9IFtdO1xuICAgIC8vIE1hcHMgZnJvbSBydWxlIGluZGV4IHRvIHN0b3Agc3RhdGUgbnVtYmVyLlxuICAgIHRoaXMucnVsZVRvU3RvcFN0YXRlID0gbnVsbDtcbiAgICB0aGlzLm1vZGVOYW1lVG9TdGFydFN0YXRlID0ge307XG4gICAgLy8gRm9yIGxleGVyIEFUTnMsIHRoaXMgbWFwcyB0aGUgcnVsZSBpbmRleCB0byB0aGUgcmVzdWx0aW5nIHRva2VuIHR5cGUuXG4gICAgLy8gRm9yIHBhcnNlciBBVE5zLCB0aGlzIG1hcHMgdGhlIHJ1bGUgaW5kZXggdG8gdGhlIGdlbmVyYXRlZCBieXBhc3MgdG9rZW5cbiAgICAvLyB0eXBlIGlmIHRoZVxuICAgIC8vIHtAbGluayBBVE5EZXNlcmlhbGl6YXRpb25PcHRpb25zLy9pc0dlbmVyYXRlUnVsZUJ5cGFzc1RyYW5zaXRpb25zfVxuICAgIC8vIGRlc2VyaWFsaXphdGlvbiBvcHRpb24gd2FzIHNwZWNpZmllZDsgb3RoZXJ3aXNlLCB0aGlzIGlzIHtAY29kZSBudWxsfS5cbiAgICB0aGlzLnJ1bGVUb1Rva2VuVHlwZSA9IG51bGw7XG4gICAgLy8gRm9yIGxleGVyIEFUTnMsIHRoaXMgaXMgYW4gYXJyYXkgb2Yge0BsaW5rIExleGVyQWN0aW9ufSBvYmplY3RzIHdoaWNoIG1heVxuICAgIC8vIGJlIHJlZmVyZW5jZWQgYnkgYWN0aW9uIHRyYW5zaXRpb25zIGluIHRoZSBBVE4uXG4gICAgdGhpcy5sZXhlckFjdGlvbnMgPSBudWxsO1xuICAgIHRoaXMubW9kZVRvU3RhcnRTdGF0ZSA9IFtdO1xuXG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIENvbXB1dGUgdGhlIHNldCBvZiB2YWxpZCB0b2tlbnMgdGhhdCBjYW4gb2NjdXIgc3RhcnRpbmcgaW4gc3RhdGUge0Bjb2RlIHN9LlxuLy8gIElmIHtAY29kZSBjdHh9IGlzIG51bGwsIHRoZSBzZXQgb2YgdG9rZW5zIHdpbGwgbm90IGluY2x1ZGUgd2hhdCBjYW4gZm9sbG93XG4vLyAgdGhlIHJ1bGUgc3Vycm91bmRpbmcge0Bjb2RlIHN9LiBJbiBvdGhlciB3b3JkcywgdGhlIHNldCB3aWxsIGJlXG4vLyAgcmVzdHJpY3RlZCB0byB0b2tlbnMgcmVhY2hhYmxlIHN0YXlpbmcgd2l0aGluIHtAY29kZSBzfSdzIHJ1bGUuXG5BVE4ucHJvdG90eXBlLm5leHRUb2tlbnNJbkNvbnRleHQgPSBmdW5jdGlvbihzLCBjdHgpIHtcbiAgICB2YXIgYW5hbCA9IG5ldyBMTDFBbmFseXplcih0aGlzKTtcbiAgICByZXR1cm4gYW5hbC5MT09LKHMsIG51bGwsIGN0eCk7XG59O1xuXG4vLyBDb21wdXRlIHRoZSBzZXQgb2YgdmFsaWQgdG9rZW5zIHRoYXQgY2FuIG9jY3VyIHN0YXJ0aW5nIGluIHtAY29kZSBzfSBhbmRcbi8vIHN0YXlpbmcgaW4gc2FtZSBydWxlLiB7QGxpbmsgVG9rZW4vL0VQU0lMT059IGlzIGluIHNldCBpZiB3ZSByZWFjaCBlbmQgb2Zcbi8vIHJ1bGUuXG5BVE4ucHJvdG90eXBlLm5leHRUb2tlbnNOb0NvbnRleHQgPSBmdW5jdGlvbihzKSB7XG4gICAgaWYgKHMubmV4dFRva2VuV2l0aGluUnVsZSAhPT0gbnVsbCApIHtcbiAgICAgICAgcmV0dXJuIHMubmV4dFRva2VuV2l0aGluUnVsZTtcbiAgICB9XG4gICAgcy5uZXh0VG9rZW5XaXRoaW5SdWxlID0gdGhpcy5uZXh0VG9rZW5zSW5Db250ZXh0KHMsIG51bGwpO1xuICAgIHMubmV4dFRva2VuV2l0aGluUnVsZS5yZWFkT25seSA9IHRydWU7XG4gICAgcmV0dXJuIHMubmV4dFRva2VuV2l0aGluUnVsZTtcbn07XG5cbkFUTi5wcm90b3R5cGUubmV4dFRva2VucyA9IGZ1bmN0aW9uKHMsIGN0eCkge1xuICAgIGlmICggY3R4PT09dW5kZWZpbmVkICkge1xuICAgICAgICByZXR1cm4gdGhpcy5uZXh0VG9rZW5zTm9Db250ZXh0KHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5leHRUb2tlbnNJbkNvbnRleHQocywgY3R4KTtcbiAgICB9XG59O1xuXG5BVE4ucHJvdG90eXBlLmFkZFN0YXRlID0gZnVuY3Rpb24oIHN0YXRlKSB7XG4gICAgaWYgKCBzdGF0ZSAhPT0gbnVsbCApIHtcbiAgICAgICAgc3RhdGUuYXRuID0gdGhpcztcbiAgICAgICAgc3RhdGUuc3RhdGVOdW1iZXIgPSB0aGlzLnN0YXRlcy5sZW5ndGg7XG4gICAgfVxuICAgIHRoaXMuc3RhdGVzLnB1c2goc3RhdGUpO1xufTtcblxuQVROLnByb3RvdHlwZS5yZW1vdmVTdGF0ZSA9IGZ1bmN0aW9uKCBzdGF0ZSkge1xuICAgIHRoaXMuc3RhdGVzW3N0YXRlLnN0YXRlTnVtYmVyXSA9IG51bGw7IC8vIGp1c3QgZnJlZSBtZW0sIGRvbid0IHNoaWZ0IHN0YXRlcyBpbiBsaXN0XG59O1xuXG5BVE4ucHJvdG90eXBlLmRlZmluZURlY2lzaW9uU3RhdGUgPSBmdW5jdGlvbiggcykge1xuICAgIHRoaXMuZGVjaXNpb25Ub1N0YXRlLnB1c2gocyk7XG4gICAgcy5kZWNpc2lvbiA9IHRoaXMuZGVjaXNpb25Ub1N0YXRlLmxlbmd0aC0xO1xuICAgIHJldHVybiBzLmRlY2lzaW9uO1xufTtcblxuQVROLnByb3RvdHlwZS5nZXREZWNpc2lvblN0YXRlID0gZnVuY3Rpb24oIGRlY2lzaW9uKSB7XG4gICAgaWYgKHRoaXMuZGVjaXNpb25Ub1N0YXRlLmxlbmd0aD09PTApIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVjaXNpb25Ub1N0YXRlW2RlY2lzaW9uXTtcbiAgICB9XG59O1xuXG4vLyBDb21wdXRlcyB0aGUgc2V0IG9mIGlucHV0IHN5bWJvbHMgd2hpY2ggY291bGQgZm9sbG93IEFUTiBzdGF0ZSBudW1iZXJcbi8vIHtAY29kZSBzdGF0ZU51bWJlcn0gaW4gdGhlIHNwZWNpZmllZCBmdWxsIHtAY29kZSBjb250ZXh0fS4gVGhpcyBtZXRob2Rcbi8vIGNvbnNpZGVycyB0aGUgY29tcGxldGUgcGFyc2VyIGNvbnRleHQsIGJ1dCBkb2VzIG5vdCBldmFsdWF0ZSBzZW1hbnRpY1xuLy8gcHJlZGljYXRlcyAoaS5lLiBhbGwgcHJlZGljYXRlcyBlbmNvdW50ZXJlZCBkdXJpbmcgdGhlIGNhbGN1bGF0aW9uIGFyZVxuLy8gYXNzdW1lZCB0cnVlKS4gSWYgYSBwYXRoIGluIHRoZSBBVE4gZXhpc3RzIGZyb20gdGhlIHN0YXJ0aW5nIHN0YXRlIHRvIHRoZVxuLy8ge0BsaW5rIFJ1bGVTdG9wU3RhdGV9IG9mIHRoZSBvdXRlcm1vc3QgY29udGV4dCB3aXRob3V0IG1hdGNoaW5nIGFueVxuLy8gc3ltYm9scywge0BsaW5rIFRva2VuLy9FT0Z9IGlzIGFkZGVkIHRvIHRoZSByZXR1cm5lZCBzZXQuXG4vL1xuLy8gPHA+SWYge0Bjb2RlIGNvbnRleHR9IGlzIHtAY29kZSBudWxsfSwgaXQgaXMgdHJlYXRlZCBhc1xuLy8ge0BsaW5rIFBhcnNlclJ1bGVDb250ZXh0Ly9FTVBUWX0uPC9wPlxuLy9cbi8vIEBwYXJhbSBzdGF0ZU51bWJlciB0aGUgQVROIHN0YXRlIG51bWJlclxuLy8gQHBhcmFtIGNvbnRleHQgdGhlIGZ1bGwgcGFyc2UgY29udGV4dFxuLy8gQHJldHVybiBUaGUgc2V0IG9mIHBvdGVudGlhbGx5IHZhbGlkIGlucHV0IHN5bWJvbHMgd2hpY2ggY291bGQgZm9sbG93IHRoZVxuLy8gc3BlY2lmaWVkIHN0YXRlIGluIHRoZSBzcGVjaWZpZWQgY29udGV4dC5cbi8vIEB0aHJvd3MgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIGlmIHRoZSBBVE4gZG9lcyBub3QgY29udGFpbiBhIHN0YXRlIHdpdGhcbi8vIG51bWJlciB7QGNvZGUgc3RhdGVOdW1iZXJ9XG52YXIgVG9rZW4gPSByZXF1aXJlKCcuLy4uL1Rva2VuJykuVG9rZW47XG5cbkFUTi5wcm90b3R5cGUuZ2V0RXhwZWN0ZWRUb2tlbnMgPSBmdW5jdGlvbiggc3RhdGVOdW1iZXIsIGN0eCApIHtcbiAgICBpZiAoIHN0YXRlTnVtYmVyIDwgMCB8fCBzdGF0ZU51bWJlciA+PSB0aGlzLnN0YXRlcy5sZW5ndGggKSB7XG4gICAgICAgIHRocm93KFwiSW52YWxpZCBzdGF0ZSBudW1iZXIuXCIpO1xuICAgIH1cbiAgICB2YXIgcyA9IHRoaXMuc3RhdGVzW3N0YXRlTnVtYmVyXTtcbiAgICB2YXIgZm9sbG93aW5nID0gdGhpcy5uZXh0VG9rZW5zKHMpO1xuICAgIGlmICghZm9sbG93aW5nLmNvbnRhaW5zKFRva2VuLkVQU0lMT04pKSB7XG4gICAgICAgIHJldHVybiBmb2xsb3dpbmc7XG4gICAgfVxuICAgIHZhciBleHBlY3RlZCA9IG5ldyBJbnRlcnZhbFNldCgpO1xuICAgIGV4cGVjdGVkLmFkZFNldChmb2xsb3dpbmcpO1xuICAgIGV4cGVjdGVkLnJlbW92ZU9uZShUb2tlbi5FUFNJTE9OKTtcbiAgICB3aGlsZSAoY3R4ICE9PSBudWxsICYmIGN0eC5pbnZva2luZ1N0YXRlID49IDAgJiYgZm9sbG93aW5nLmNvbnRhaW5zKFRva2VuLkVQU0lMT04pKSB7XG4gICAgICAgIHZhciBpbnZva2luZ1N0YXRlID0gdGhpcy5zdGF0ZXNbY3R4Lmludm9raW5nU3RhdGVdO1xuICAgICAgICB2YXIgcnQgPSBpbnZva2luZ1N0YXRlLnRyYW5zaXRpb25zWzBdO1xuICAgICAgICBmb2xsb3dpbmcgPSB0aGlzLm5leHRUb2tlbnMocnQuZm9sbG93U3RhdGUpO1xuICAgICAgICBleHBlY3RlZC5hZGRTZXQoZm9sbG93aW5nKTtcbiAgICAgICAgZXhwZWN0ZWQucmVtb3ZlT25lKFRva2VuLkVQU0lMT04pO1xuICAgICAgICBjdHggPSBjdHgucGFyZW50Q3R4O1xuICAgIH1cbiAgICBpZiAoZm9sbG93aW5nLmNvbnRhaW5zKFRva2VuLkVQU0lMT04pKSB7XG4gICAgICAgIGV4cGVjdGVkLmFkZE9uZShUb2tlbi5FT0YpO1xuICAgIH1cbiAgICByZXR1cm4gZXhwZWN0ZWQ7XG59O1xuXG5BVE4uSU5WQUxJRF9BTFRfTlVNQkVSID0gMDtcblxuZXhwb3J0cy5BVE4gPSBBVE47IiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vL1xuXG4vLyBBIHR1cGxlOiAoQVROIHN0YXRlLCBwcmVkaWN0ZWQgYWx0LCBzeW50YWN0aWMsIHNlbWFudGljIGNvbnRleHQpLlxuLy8gIFRoZSBzeW50YWN0aWMgY29udGV4dCBpcyBhIGdyYXBoLXN0cnVjdHVyZWQgc3RhY2sgbm9kZSB3aG9zZVxuLy8gIHBhdGgocykgdG8gdGhlIHJvb3QgaXMgdGhlIHJ1bGUgaW52b2NhdGlvbihzKVxuLy8gIGNoYWluIHVzZWQgdG8gYXJyaXZlIGF0IHRoZSBzdGF0ZS4gIFRoZSBzZW1hbnRpYyBjb250ZXh0IGlzXG4vLyAgdGhlIHRyZWUgb2Ygc2VtYW50aWMgcHJlZGljYXRlcyBlbmNvdW50ZXJlZCBiZWZvcmUgcmVhY2hpbmdcbi8vICBhbiBBVE4gc3RhdGUuXG4vLy9cblxudmFyIERlY2lzaW9uU3RhdGUgPSByZXF1aXJlKCcuL0FUTlN0YXRlJykuRGVjaXNpb25TdGF0ZTtcbnZhciBTZW1hbnRpY0NvbnRleHQgPSByZXF1aXJlKCcuL1NlbWFudGljQ29udGV4dCcpLlNlbWFudGljQ29udGV4dDtcbnZhciBIYXNoID0gcmVxdWlyZShcIi4uL1V0aWxzXCIpLkhhc2g7XG5cblxuZnVuY3Rpb24gY2hlY2tQYXJhbXMocGFyYW1zLCBpc0NmZykge1xuXHRpZihwYXJhbXM9PT1udWxsKSB7XG5cdFx0dmFyIHJlc3VsdCA9IHsgc3RhdGU6bnVsbCwgYWx0Om51bGwsIGNvbnRleHQ6bnVsbCwgc2VtYW50aWNDb250ZXh0Om51bGwgfTtcblx0XHRpZihpc0NmZykge1xuXHRcdFx0cmVzdWx0LnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0ID0gMDtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSBlbHNlIHtcblx0XHR2YXIgcHJvcHMgPSB7fTtcblx0XHRwcm9wcy5zdGF0ZSA9IHBhcmFtcy5zdGF0ZSB8fCBudWxsO1xuXHRcdHByb3BzLmFsdCA9IChwYXJhbXMuYWx0ID09PSB1bmRlZmluZWQpID8gbnVsbCA6IHBhcmFtcy5hbHQ7XG5cdFx0cHJvcHMuY29udGV4dCA9IHBhcmFtcy5jb250ZXh0IHx8IG51bGw7XG5cdFx0cHJvcHMuc2VtYW50aWNDb250ZXh0ID0gcGFyYW1zLnNlbWFudGljQ29udGV4dCB8fCBudWxsO1xuXHRcdGlmKGlzQ2ZnKSB7XG5cdFx0XHRwcm9wcy5yZWFjaGVzSW50b091dGVyQ29udGV4dCA9IHBhcmFtcy5yZWFjaGVzSW50b091dGVyQ29udGV4dCB8fCAwO1xuXHRcdFx0cHJvcHMucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQgPSBwYXJhbXMucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQgfHwgZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBwcm9wcztcblx0fVxufVxuXG5mdW5jdGlvbiBBVE5Db25maWcocGFyYW1zLCBjb25maWcpIHtcblx0dGhpcy5jaGVja0NvbnRleHQocGFyYW1zLCBjb25maWcpO1xuXHRwYXJhbXMgPSBjaGVja1BhcmFtcyhwYXJhbXMpO1xuXHRjb25maWcgPSBjaGVja1BhcmFtcyhjb25maWcsIHRydWUpO1xuICAgIC8vIFRoZSBBVE4gc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgY29uZmlndXJhdGlvbi8vL1xuICAgIHRoaXMuc3RhdGUgPSBwYXJhbXMuc3RhdGUhPT1udWxsID8gcGFyYW1zLnN0YXRlIDogY29uZmlnLnN0YXRlO1xuICAgIC8vIFdoYXQgYWx0IChvciBsZXhlciBydWxlKSBpcyBwcmVkaWN0ZWQgYnkgdGhpcyBjb25maWd1cmF0aW9uLy8vXG4gICAgdGhpcy5hbHQgPSBwYXJhbXMuYWx0IT09bnVsbCA/IHBhcmFtcy5hbHQgOiBjb25maWcuYWx0O1xuICAgIC8vIFRoZSBzdGFjayBvZiBpbnZva2luZyBzdGF0ZXMgbGVhZGluZyB0byB0aGUgcnVsZS9zdGF0ZXMgYXNzb2NpYXRlZFxuICAgIC8vICB3aXRoIHRoaXMgY29uZmlnLiAgV2UgdHJhY2sgb25seSB0aG9zZSBjb250ZXh0cyBwdXNoZWQgZHVyaW5nXG4gICAgLy8gIGV4ZWN1dGlvbiBvZiB0aGUgQVROIHNpbXVsYXRvci5cbiAgICB0aGlzLmNvbnRleHQgPSBwYXJhbXMuY29udGV4dCE9PW51bGwgPyBwYXJhbXMuY29udGV4dCA6IGNvbmZpZy5jb250ZXh0O1xuICAgIHRoaXMuc2VtYW50aWNDb250ZXh0ID0gcGFyYW1zLnNlbWFudGljQ29udGV4dCE9PW51bGwgPyBwYXJhbXMuc2VtYW50aWNDb250ZXh0IDpcbiAgICAgICAgKGNvbmZpZy5zZW1hbnRpY0NvbnRleHQhPT1udWxsID8gY29uZmlnLnNlbWFudGljQ29udGV4dCA6IFNlbWFudGljQ29udGV4dC5OT05FKTtcbiAgICAvLyBXZSBjYW5ub3QgZXhlY3V0ZSBwcmVkaWNhdGVzIGRlcGVuZGVudCB1cG9uIGxvY2FsIGNvbnRleHQgdW5sZXNzXG4gICAgLy8gd2Uga25vdyBmb3Igc3VyZSB3ZSBhcmUgaW4gdGhlIGNvcnJlY3QgY29udGV4dC4gQmVjYXVzZSB0aGVyZSBpc1xuICAgIC8vIG5vIHdheSB0byBkbyB0aGlzIGVmZmljaWVudGx5LCB3ZSBzaW1wbHkgY2Fubm90IGV2YWx1YXRlXG4gICAgLy8gZGVwZW5kZW50IHByZWRpY2F0ZXMgdW5sZXNzIHdlIGFyZSBpbiB0aGUgcnVsZSB0aGF0IGluaXRpYWxseVxuICAgIC8vIGludm9rZXMgdGhlIEFUTiBzaW11bGF0b3IuXG4gICAgLy9cbiAgICAvLyBjbG9zdXJlKCkgdHJhY2tzIHRoZSBkZXB0aCBvZiBob3cgZmFyIHdlIGRpcCBpbnRvIHRoZVxuICAgIC8vIG91dGVyIGNvbnRleHQ6IGRlcHRoICZndDsgMC4gIE5vdGUgdGhhdCBpdCBtYXkgbm90IGJlIHRvdGFsbHlcbiAgICAvLyBhY2N1cmF0ZSBkZXB0aCBzaW5jZSBJIGRvbid0IGV2ZXIgZGVjcmVtZW50LiBUT0RPOiBtYWtlIGl0IGEgYm9vbGVhbiB0aGVuXG4gICAgdGhpcy5yZWFjaGVzSW50b091dGVyQ29udGV4dCA9IGNvbmZpZy5yZWFjaGVzSW50b091dGVyQ29udGV4dDtcbiAgICB0aGlzLnByZWNlZGVuY2VGaWx0ZXJTdXBwcmVzc2VkID0gY29uZmlnLnByZWNlZGVuY2VGaWx0ZXJTdXBwcmVzc2VkO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5BVE5Db25maWcucHJvdG90eXBlLmNoZWNrQ29udGV4dCA9IGZ1bmN0aW9uKHBhcmFtcywgY29uZmlnKSB7XG5cdGlmKChwYXJhbXMuY29udGV4dD09PW51bGwgfHwgcGFyYW1zLmNvbnRleHQ9PT11bmRlZmluZWQpICYmXG5cdFx0XHQoY29uZmlnPT09bnVsbCB8fCBjb25maWcuY29udGV4dD09PW51bGwgfHwgY29uZmlnLmNvbnRleHQ9PT11bmRlZmluZWQpKSB7XG5cdFx0dGhpcy5jb250ZXh0ID0gbnVsbDtcblx0fVxufTtcblxuXG5BVE5Db25maWcucHJvdG90eXBlLmhhc2hDb2RlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGhhc2ggPSBuZXcgSGFzaCgpO1xuICAgIHRoaXMudXBkYXRlSGFzaENvZGUoaGFzaCk7XG4gICAgcmV0dXJuIGhhc2guZmluaXNoKCk7XG59O1xuXG5cbkFUTkNvbmZpZy5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5zdGF0ZS5zdGF0ZU51bWJlciwgdGhpcy5hbHQsIHRoaXMuY29udGV4dCwgdGhpcy5zZW1hbnRpY0NvbnRleHQpO1xufTtcblxuLy8gQW4gQVROIGNvbmZpZ3VyYXRpb24gaXMgZXF1YWwgdG8gYW5vdGhlciBpZiBib3RoIGhhdmVcbi8vICB0aGUgc2FtZSBzdGF0ZSwgdGhleSBwcmVkaWN0IHRoZSBzYW1lIGFsdGVybmF0aXZlLCBhbmRcbi8vICBzeW50YWN0aWMvc2VtYW50aWMgY29udGV4dHMgYXJlIHRoZSBzYW1lLlxuXG5BVE5Db25maWcucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgaWYgKHRoaXMgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoISAob3RoZXIgaW5zdGFuY2VvZiBBVE5Db25maWcpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5zdGF0ZU51bWJlcj09PW90aGVyLnN0YXRlLnN0YXRlTnVtYmVyICYmXG4gICAgICAgICAgICB0aGlzLmFsdD09PW90aGVyLmFsdCAmJlxuICAgICAgICAgICAgKHRoaXMuY29udGV4dD09PW51bGwgPyBvdGhlci5jb250ZXh0PT09bnVsbCA6IHRoaXMuY29udGV4dC5lcXVhbHMob3RoZXIuY29udGV4dCkpICYmXG4gICAgICAgICAgICB0aGlzLnNlbWFudGljQ29udGV4dC5lcXVhbHMob3RoZXIuc2VtYW50aWNDb250ZXh0KSAmJlxuICAgICAgICAgICAgdGhpcy5wcmVjZWRlbmNlRmlsdGVyU3VwcHJlc3NlZD09PW90aGVyLnByZWNlZGVuY2VGaWx0ZXJTdXBwcmVzc2VkO1xuICAgIH1cbn07XG5cblxuQVROQ29uZmlnLnByb3RvdHlwZS5oYXNoQ29kZUZvckNvbmZpZ1NldCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBoYXNoID0gbmV3IEhhc2goKTtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLnN0YXRlLnN0YXRlTnVtYmVyLCB0aGlzLmFsdCwgdGhpcy5zZW1hbnRpY0NvbnRleHQpO1xuICAgIHJldHVybiBoYXNoLmZpbmlzaCgpO1xufTtcblxuXG5BVE5Db25maWcucHJvdG90eXBlLmVxdWFsc0ZvckNvbmZpZ1NldCA9IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgaWYgKHRoaXMgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoISAob3RoZXIgaW5zdGFuY2VvZiBBVE5Db25maWcpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZS5zdGF0ZU51bWJlcj09PW90aGVyLnN0YXRlLnN0YXRlTnVtYmVyICYmXG4gICAgICAgICAgICB0aGlzLmFsdD09PW90aGVyLmFsdCAmJlxuICAgICAgICAgICAgdGhpcy5zZW1hbnRpY0NvbnRleHQuZXF1YWxzKG90aGVyLnNlbWFudGljQ29udGV4dCk7XG4gICAgfVxufTtcblxuXG5BVE5Db25maWcucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiKFwiICsgdGhpcy5zdGF0ZSArIFwiLFwiICsgdGhpcy5hbHQgK1xuICAgICAgICAodGhpcy5jb250ZXh0IT09bnVsbCA/IFwiLFtcIiArIHRoaXMuY29udGV4dC50b1N0cmluZygpICsgXCJdXCIgOiBcIlwiKSArXG4gICAgICAgICh0aGlzLnNlbWFudGljQ29udGV4dCAhPT0gU2VtYW50aWNDb250ZXh0Lk5PTkUgP1xuICAgICAgICAgICAgICAgIChcIixcIiArIHRoaXMuc2VtYW50aWNDb250ZXh0LnRvU3RyaW5nKCkpXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArXG4gICAgICAgICh0aGlzLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0PjAgP1xuICAgICAgICAgICAgICAgIChcIix1cD1cIiArIHRoaXMucmVhY2hlc0ludG9PdXRlckNvbnRleHQpXG4gICAgICAgICAgICAgICAgOiBcIlwiKSArIFwiKVwiO1xufTtcblxuXG5mdW5jdGlvbiBMZXhlckFUTkNvbmZpZyhwYXJhbXMsIGNvbmZpZykge1xuXHRBVE5Db25maWcuY2FsbCh0aGlzLCBwYXJhbXMsIGNvbmZpZyk7XG5cbiAgICAvLyBUaGlzIGlzIHRoZSBiYWNraW5nIGZpZWxkIGZvciB7QGxpbmsgLy9nZXRMZXhlckFjdGlvbkV4ZWN1dG9yfS5cblx0dmFyIGxleGVyQWN0aW9uRXhlY3V0b3IgPSBwYXJhbXMubGV4ZXJBY3Rpb25FeGVjdXRvciB8fCBudWxsO1xuICAgIHRoaXMubGV4ZXJBY3Rpb25FeGVjdXRvciA9IGxleGVyQWN0aW9uRXhlY3V0b3IgfHwgKGNvbmZpZyE9PW51bGwgPyBjb25maWcubGV4ZXJBY3Rpb25FeGVjdXRvciA6IG51bGwpO1xuICAgIHRoaXMucGFzc2VkVGhyb3VnaE5vbkdyZWVkeURlY2lzaW9uID0gY29uZmlnIT09bnVsbCA/IHRoaXMuY2hlY2tOb25HcmVlZHlEZWNpc2lvbihjb25maWcsIHRoaXMuc3RhdGUpIDogZmFsc2U7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkxleGVyQVROQ29uZmlnLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQVROQ29uZmlnLnByb3RvdHlwZSk7XG5MZXhlckFUTkNvbmZpZy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlckFUTkNvbmZpZztcblxuTGV4ZXJBVE5Db25maWcucHJvdG90eXBlLnVwZGF0ZUhhc2hDb2RlID0gZnVuY3Rpb24oaGFzaCkge1xuICAgIGhhc2gudXBkYXRlKHRoaXMuc3RhdGUuc3RhdGVOdW1iZXIsIHRoaXMuYWx0LCB0aGlzLmNvbnRleHQsIHRoaXMuc2VtYW50aWNDb250ZXh0LCB0aGlzLnBhc3NlZFRocm91Z2hOb25HcmVlZHlEZWNpc2lvbiwgdGhpcy5sZXhlckFjdGlvbkV4ZWN1dG9yKTtcbn07XG5cbkxleGVyQVROQ29uZmlnLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIHJldHVybiB0aGlzID09PSBvdGhlciB8fFxuICAgICAgICAgICAgKG90aGVyIGluc3RhbmNlb2YgTGV4ZXJBVE5Db25maWcgJiZcbiAgICAgICAgICAgIHRoaXMucGFzc2VkVGhyb3VnaE5vbkdyZWVkeURlY2lzaW9uID09IG90aGVyLnBhc3NlZFRocm91Z2hOb25HcmVlZHlEZWNpc2lvbiAmJlxuICAgICAgICAgICAgKHRoaXMubGV4ZXJBY3Rpb25FeGVjdXRvciA/IHRoaXMubGV4ZXJBY3Rpb25FeGVjdXRvci5lcXVhbHMob3RoZXIubGV4ZXJBY3Rpb25FeGVjdXRvcikgOiAhb3RoZXIubGV4ZXJBY3Rpb25FeGVjdXRvcikgJiZcbiAgICAgICAgICAgIEFUTkNvbmZpZy5wcm90b3R5cGUuZXF1YWxzLmNhbGwodGhpcywgb3RoZXIpKTtcbn07XG5cbkxleGVyQVROQ29uZmlnLnByb3RvdHlwZS5oYXNoQ29kZUZvckNvbmZpZ1NldCA9IExleGVyQVROQ29uZmlnLnByb3RvdHlwZS5oYXNoQ29kZTtcblxuTGV4ZXJBVE5Db25maWcucHJvdG90eXBlLmVxdWFsc0ZvckNvbmZpZ1NldCA9IExleGVyQVROQ29uZmlnLnByb3RvdHlwZS5lcXVhbHM7XG5cblxuTGV4ZXJBVE5Db25maWcucHJvdG90eXBlLmNoZWNrTm9uR3JlZWR5RGVjaXNpb24gPSBmdW5jdGlvbihzb3VyY2UsIHRhcmdldCkge1xuICAgIHJldHVybiBzb3VyY2UucGFzc2VkVGhyb3VnaE5vbkdyZWVkeURlY2lzaW9uIHx8XG4gICAgICAgICh0YXJnZXQgaW5zdGFuY2VvZiBEZWNpc2lvblN0YXRlKSAmJiB0YXJnZXQubm9uR3JlZWR5O1xufTtcblxuZXhwb3J0cy5BVE5Db25maWcgPSBBVE5Db25maWc7XG5leHBvcnRzLkxleGVyQVROQ29uZmlnID0gTGV4ZXJBVE5Db25maWc7IiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxuLy9cbi8vIFNwZWNpYWxpemVkIHtAbGluayBTZXR9e0Bjb2RlIDx9e0BsaW5rIEFUTkNvbmZpZ317QGNvZGUgPn0gdGhhdCBjYW4gdHJhY2tcbi8vIGluZm8gYWJvdXQgdGhlIHNldCwgd2l0aCBzdXBwb3J0IGZvciBjb21iaW5pbmcgc2ltaWxhciBjb25maWd1cmF0aW9ucyB1c2luZyBhXG4vLyBncmFwaC1zdHJ1Y3R1cmVkIHN0YWNrLlxuLy8vXG5cbnZhciBBVE4gPSByZXF1aXJlKCcuL0FUTicpLkFUTjtcbnZhciBVdGlscyA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKTtcbnZhciBIYXNoID0gVXRpbHMuSGFzaDtcbnZhciBTZXQgPSBVdGlscy5TZXQ7XG52YXIgU2VtYW50aWNDb250ZXh0ID0gcmVxdWlyZSgnLi9TZW1hbnRpY0NvbnRleHQnKS5TZW1hbnRpY0NvbnRleHQ7XG52YXIgbWVyZ2UgPSByZXF1aXJlKCcuLy4uL1ByZWRpY3Rpb25Db250ZXh0JykubWVyZ2U7XG5cbmZ1bmN0aW9uIGhhc2hBVE5Db25maWcoYykge1xuXHRyZXR1cm4gYy5oYXNoQ29kZUZvckNvbmZpZ1NldCgpO1xufVxuXG5mdW5jdGlvbiBlcXVhbEFUTkNvbmZpZ3MoYSwgYikge1xuXHRpZiAoIGE9PT1iICkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2UgaWYgKCBhPT09bnVsbCB8fCBiPT09bnVsbCApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZVxuICAgICAgIHJldHVybiBhLmVxdWFsc0ZvckNvbmZpZ1NldChiKTtcbiB9XG5cblxuZnVuY3Rpb24gQVROQ29uZmlnU2V0KGZ1bGxDdHgpIHtcblx0Ly9cblx0Ly8gVGhlIHJlYXNvbiB0aGF0IHdlIG5lZWQgdGhpcyBpcyBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdGhlIGhhc2ggbWFwIHRvIHVzZVxuXHQvLyB0aGUgc3RhbmRhcmQgaGFzaCBjb2RlIGFuZCBlcXVhbHMuIFdlIG5lZWQgYWxsIGNvbmZpZ3VyYXRpb25zIHdpdGggdGhlXG5cdC8vIHNhbWVcblx0Ly8ge0Bjb2RlIChzLGksXyxzZW1jdHgpfSB0byBiZSBlcXVhbC4gVW5mb3J0dW5hdGVseSwgdGhpcyBrZXkgZWZmZWN0aXZlbHlcblx0Ly8gZG91Ymxlc1xuXHQvLyB0aGUgbnVtYmVyIG9mIG9iamVjdHMgYXNzb2NpYXRlZCB3aXRoIEFUTkNvbmZpZ3MuIFRoZSBvdGhlciBzb2x1dGlvbiBpc1xuXHQvLyB0b1xuXHQvLyB1c2UgYSBoYXNoIHRhYmxlIHRoYXQgbGV0cyB1cyBzcGVjaWZ5IHRoZSBlcXVhbHMvaGFzaGNvZGUgb3BlcmF0aW9uLlxuXHQvLyBBbGwgY29uZmlncyBidXQgaGFzaGVkIGJ5IChzLCBpLCBfLCBwaSkgbm90IGluY2x1ZGluZyBjb250ZXh0LiBXaXBlZCBvdXRcblx0Ly8gd2hlbiB3ZSBnbyByZWFkb25seSBhcyB0aGlzIHNldCBiZWNvbWVzIGEgREZBIHN0YXRlLlxuXHR0aGlzLmNvbmZpZ0xvb2t1cCA9IG5ldyBTZXQoaGFzaEFUTkNvbmZpZywgZXF1YWxBVE5Db25maWdzKTtcblx0Ly8gSW5kaWNhdGVzIHRoYXQgdGhpcyBjb25maWd1cmF0aW9uIHNldCBpcyBwYXJ0IG9mIGEgZnVsbCBjb250ZXh0XG5cdC8vIExMIHByZWRpY3Rpb24uIEl0IHdpbGwgYmUgdXNlZCB0byBkZXRlcm1pbmUgaG93IHRvIG1lcmdlICQuIFdpdGggU0xMXG5cdC8vIGl0J3MgYSB3aWxkY2FyZCB3aGVyZWFzIGl0IGlzIG5vdCBmb3IgTEwgY29udGV4dCBtZXJnZS5cblx0dGhpcy5mdWxsQ3R4ID0gZnVsbEN0eCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGZ1bGxDdHg7XG5cdC8vIEluZGljYXRlcyB0aGF0IHRoZSBzZXQgb2YgY29uZmlndXJhdGlvbnMgaXMgcmVhZC1vbmx5LiBEbyBub3Rcblx0Ly8gYWxsb3cgYW55IGNvZGUgdG8gbWFuaXB1bGF0ZSB0aGUgc2V0OyBERkEgc3RhdGVzIHdpbGwgcG9pbnQgYXRcblx0Ly8gdGhlIHNldHMgYW5kIHRoZXkgbXVzdCBub3QgY2hhbmdlLiBUaGlzIGRvZXMgbm90IHByb3RlY3QgdGhlIG90aGVyXG5cdC8vIGZpZWxkczsgaW4gcGFydGljdWxhciwgY29uZmxpY3RpbmdBbHRzIGlzIHNldCBhZnRlclxuXHQvLyB3ZSd2ZSBtYWRlIHRoaXMgcmVhZG9ubHkuXG5cdHRoaXMucmVhZE9ubHkgPSBmYWxzZTtcblx0Ly8gVHJhY2sgdGhlIGVsZW1lbnRzIGFzIHRoZXkgYXJlIGFkZGVkIHRvIHRoZSBzZXQ7IHN1cHBvcnRzIGdldChpKS8vL1xuXHR0aGlzLmNvbmZpZ3MgPSBbXTtcblxuXHQvLyBUT0RPOiB0aGVzZSBmaWVsZHMgbWFrZSBtZSBwcmV0dHkgdW5jb21mb3J0YWJsZSBidXQgbmljZSB0byBwYWNrIHVwIGluZm9cblx0Ly8gdG9nZXRoZXIsIHNhdmVzIHJlY29tcHV0YXRpb25cblx0Ly8gVE9ETzogY2FuIHdlIHRyYWNrIGNvbmZsaWN0cyBhcyB0aGV5IGFyZSBhZGRlZCB0byBzYXZlIHNjYW5uaW5nIGNvbmZpZ3Ncblx0Ly8gbGF0ZXI/XG5cdHRoaXMudW5pcXVlQWx0ID0gMDtcblx0dGhpcy5jb25mbGljdGluZ0FsdHMgPSBudWxsO1xuXG5cdC8vIFVzZWQgaW4gcGFyc2VyIGFuZCBsZXhlci4gSW4gbGV4ZXIsIGl0IGluZGljYXRlcyB3ZSBoaXQgYSBwcmVkXG5cdC8vIHdoaWxlIGNvbXB1dGluZyBhIGNsb3N1cmUgb3BlcmF0aW9uLiBEb24ndCBtYWtlIGEgREZBIHN0YXRlIGZyb20gdGhpcy5cblx0dGhpcy5oYXNTZW1hbnRpY0NvbnRleHQgPSBmYWxzZTtcblx0dGhpcy5kaXBzSW50b091dGVyQ29udGV4dCA9IGZhbHNlO1xuXG5cdHRoaXMuY2FjaGVkSGFzaENvZGUgPSAtMTtcblxuXHRyZXR1cm4gdGhpcztcbn1cblxuLy8gQWRkaW5nIGEgbmV3IGNvbmZpZyBtZWFucyBtZXJnaW5nIGNvbnRleHRzIHdpdGggZXhpc3RpbmcgY29uZmlncyBmb3Jcbi8vIHtAY29kZSAocywgaSwgcGksIF8pfSwgd2hlcmUge0Bjb2RlIHN9IGlzIHRoZVxuLy8ge0BsaW5rIEFUTkNvbmZpZy8vc3RhdGV9LCB7QGNvZGUgaX0gaXMgdGhlIHtAbGluayBBVE5Db25maWcvL2FsdH0sIGFuZFxuLy8ge0Bjb2RlIHBpfSBpcyB0aGUge0BsaW5rIEFUTkNvbmZpZy8vc2VtYW50aWNDb250ZXh0fS4gV2UgdXNlXG4vLyB7QGNvZGUgKHMsaSxwaSl9IGFzIGtleS5cbi8vXG4vLyA8cD5UaGlzIG1ldGhvZCB1cGRhdGVzIHtAbGluayAvL2RpcHNJbnRvT3V0ZXJDb250ZXh0fSBhbmRcbi8vIHtAbGluayAvL2hhc1NlbWFudGljQ29udGV4dH0gd2hlbiBuZWNlc3NhcnkuPC9wPlxuLy8gL1xuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihjb25maWcsIG1lcmdlQ2FjaGUpIHtcblx0aWYgKG1lcmdlQ2FjaGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdG1lcmdlQ2FjaGUgPSBudWxsO1xuXHR9XG5cdGlmICh0aGlzLnJlYWRPbmx5KSB7XG5cdFx0dGhyb3cgXCJUaGlzIHNldCBpcyByZWFkb25seVwiO1xuXHR9XG5cdGlmIChjb25maWcuc2VtYW50aWNDb250ZXh0ICE9PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuXHRcdHRoaXMuaGFzU2VtYW50aWNDb250ZXh0ID0gdHJ1ZTtcblx0fVxuXHRpZiAoY29uZmlnLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0ID4gMCkge1xuXHRcdHRoaXMuZGlwc0ludG9PdXRlckNvbnRleHQgPSB0cnVlO1xuXHR9XG5cdHZhciBleGlzdGluZyA9IHRoaXMuY29uZmlnTG9va3VwLmFkZChjb25maWcpO1xuXHRpZiAoZXhpc3RpbmcgPT09IGNvbmZpZykge1xuXHRcdHRoaXMuY2FjaGVkSGFzaENvZGUgPSAtMTtcblx0XHR0aGlzLmNvbmZpZ3MucHVzaChjb25maWcpOyAvLyB0cmFjayBvcmRlciBoZXJlXG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0Ly8gYSBwcmV2aW91cyAocyxpLHBpLF8pLCBtZXJnZSB3aXRoIGl0IGFuZCBzYXZlIHJlc3VsdFxuXHR2YXIgcm9vdElzV2lsZGNhcmQgPSAhdGhpcy5mdWxsQ3R4O1xuXHR2YXIgbWVyZ2VkID0gbWVyZ2UoZXhpc3RpbmcuY29udGV4dCwgY29uZmlnLmNvbnRleHQsIHJvb3RJc1dpbGRjYXJkLCBtZXJnZUNhY2hlKTtcblx0Ly8gbm8gbmVlZCB0byBjaGVjayBmb3IgZXhpc3RpbmcuY29udGV4dCwgY29uZmlnLmNvbnRleHQgaW4gY2FjaGVcblx0Ly8gc2luY2Ugb25seSB3YXkgdG8gY3JlYXRlIG5ldyBncmFwaHMgaXMgXCJjYWxsIHJ1bGVcIiBhbmQgaGVyZS4gV2Vcblx0Ly8gY2FjaGUgYXQgYm90aCBwbGFjZXMuXG5cdGV4aXN0aW5nLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0ID0gTWF0aC5tYXgoIGV4aXN0aW5nLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0LCBjb25maWcucmVhY2hlc0ludG9PdXRlckNvbnRleHQpO1xuXHQvLyBtYWtlIHN1cmUgdG8gcHJlc2VydmUgdGhlIHByZWNlZGVuY2UgZmlsdGVyIHN1cHByZXNzaW9uIGR1cmluZyB0aGUgbWVyZ2Vcblx0aWYgKGNvbmZpZy5wcmVjZWRlbmNlRmlsdGVyU3VwcHJlc3NlZCkge1xuXHRcdGV4aXN0aW5nLnByZWNlZGVuY2VGaWx0ZXJTdXBwcmVzc2VkID0gdHJ1ZTtcblx0fVxuXHRleGlzdGluZy5jb250ZXh0ID0gbWVyZ2VkOyAvLyByZXBsYWNlIGNvbnRleHQ7IG5vIG5lZWQgdG8gYWx0IG1hcHBpbmdcblx0cmV0dXJuIHRydWU7XG59O1xuXG5BVE5Db25maWdTZXQucHJvdG90eXBlLmdldFN0YXRlcyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgc3RhdGVzID0gbmV3IFNldCgpO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29uZmlncy5sZW5ndGg7IGkrKykge1xuXHRcdHN0YXRlcy5hZGQodGhpcy5jb25maWdzW2ldLnN0YXRlKTtcblx0fVxuXHRyZXR1cm4gc3RhdGVzO1xufTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5nZXRQcmVkaWNhdGVzID0gZnVuY3Rpb24oKSB7XG5cdHZhciBwcmVkcyA9IFtdO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuY29uZmlncy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBjID0gdGhpcy5jb25maWdzW2ldLnNlbWFudGljQ29udGV4dDtcblx0XHRpZiAoYyAhPT0gU2VtYW50aWNDb250ZXh0Lk5PTkUpIHtcblx0XHRcdHByZWRzLnB1c2goYy5zZW1hbnRpY0NvbnRleHQpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gcHJlZHM7XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQVROQ29uZmlnU2V0LnByb3RvdHlwZSwgXCJpdGVtc1wiLCB7XG5cdGdldCA6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmNvbmZpZ3M7XG5cdH1cbn0pO1xuXG5BVE5Db25maWdTZXQucHJvdG90eXBlLm9wdGltaXplQ29uZmlncyA9IGZ1bmN0aW9uKGludGVycHJldGVyKSB7XG5cdGlmICh0aGlzLnJlYWRPbmx5KSB7XG5cdFx0dGhyb3cgXCJUaGlzIHNldCBpcyByZWFkb25seVwiO1xuXHR9XG5cdGlmICh0aGlzLmNvbmZpZ0xvb2t1cC5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm47XG5cdH1cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbmZpZ3MubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgY29uZmlnID0gdGhpcy5jb25maWdzW2ldO1xuXHRcdGNvbmZpZy5jb250ZXh0ID0gaW50ZXJwcmV0ZXIuZ2V0Q2FjaGVkQ29udGV4dChjb25maWcuY29udGV4dCk7XG5cdH1cbn07XG5cbkFUTkNvbmZpZ1NldC5wcm90b3R5cGUuYWRkQWxsID0gZnVuY3Rpb24oY29sbCkge1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGNvbGwubGVuZ3RoOyBpKyspIHtcblx0XHR0aGlzLmFkZChjb2xsW2ldKTtcblx0fVxuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5BVE5Db25maWdTZXQucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG5cdHJldHVybiB0aGlzID09PSBvdGhlciB8fFxuXHRcdChvdGhlciBpbnN0YW5jZW9mIEFUTkNvbmZpZ1NldCAmJlxuXHRcdFV0aWxzLmVxdWFsQXJyYXlzKHRoaXMuY29uZmlncywgb3RoZXIuY29uZmlncykgJiZcblx0XHR0aGlzLmZ1bGxDdHggPT09IG90aGVyLmZ1bGxDdHggJiZcblx0XHR0aGlzLnVuaXF1ZUFsdCA9PT0gb3RoZXIudW5pcXVlQWx0ICYmXG5cdFx0dGhpcy5jb25mbGljdGluZ0FsdHMgPT09IG90aGVyLmNvbmZsaWN0aW5nQWx0cyAmJlxuXHRcdHRoaXMuaGFzU2VtYW50aWNDb250ZXh0ID09PSBvdGhlci5oYXNTZW1hbnRpY0NvbnRleHQgJiZcblx0XHR0aGlzLmRpcHNJbnRvT3V0ZXJDb250ZXh0ID09PSBvdGhlci5kaXBzSW50b091dGVyQ29udGV4dCk7XG59O1xuXG5BVE5Db25maWdTZXQucHJvdG90eXBlLmhhc2hDb2RlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGhhc2ggPSBuZXcgSGFzaCgpO1xuICAgIHRoaXMudXBkYXRlSGFzaENvZGUoaGFzaCk7XG4gICAgcmV0dXJuIGhhc2guZmluaXNoKCk7XG59O1xuXG5cbkFUTkNvbmZpZ1NldC5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG5cdGlmICh0aGlzLnJlYWRPbmx5KSB7XG5cdFx0aWYgKHRoaXMuY2FjaGVkSGFzaENvZGUgPT09IC0xKSB7XG4gICAgICAgICAgICB2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG4gICAgICAgICAgICBoYXNoLnVwZGF0ZSh0aGlzLmNvbmZpZ3MpO1xuXHRcdFx0dGhpcy5jYWNoZWRIYXNoQ29kZSA9IGhhc2guZmluaXNoKCk7XG5cdFx0fVxuICAgICAgICBoYXNoLnVwZGF0ZSh0aGlzLmNhY2hlZEhhc2hDb2RlKTtcblx0fSBlbHNlIHtcbiAgICAgICAgaGFzaC51cGRhdGUodGhpcy5jb25maWdzKTtcblx0fVxufTtcblxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoQVROQ29uZmlnU2V0LnByb3RvdHlwZSwgXCJsZW5ndGhcIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5jb25maWdzLmxlbmd0aDtcblx0fVxufSk7XG5cbkFUTkNvbmZpZ1NldC5wcm90b3R5cGUuaXNFbXB0eSA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5jb25maWdzLmxlbmd0aCA9PT0gMDtcbn07XG5cbkFUTkNvbmZpZ1NldC5wcm90b3R5cGUuY29udGFpbnMgPSBmdW5jdGlvbihpdGVtKSB7XG5cdGlmICh0aGlzLmNvbmZpZ0xvb2t1cCA9PT0gbnVsbCkge1xuXHRcdHRocm93IFwiVGhpcyBtZXRob2QgaXMgbm90IGltcGxlbWVudGVkIGZvciByZWFkb25seSBzZXRzLlwiO1xuXHR9XG5cdHJldHVybiB0aGlzLmNvbmZpZ0xvb2t1cC5jb250YWlucyhpdGVtKTtcbn07XG5cbkFUTkNvbmZpZ1NldC5wcm90b3R5cGUuY29udGFpbnNGYXN0ID0gZnVuY3Rpb24oaXRlbSkge1xuXHRpZiAodGhpcy5jb25maWdMb29rdXAgPT09IG51bGwpIHtcblx0XHR0aHJvdyBcIlRoaXMgbWV0aG9kIGlzIG5vdCBpbXBsZW1lbnRlZCBmb3IgcmVhZG9ubHkgc2V0cy5cIjtcblx0fVxuXHRyZXR1cm4gdGhpcy5jb25maWdMb29rdXAuY29udGFpbnNGYXN0KGl0ZW0pO1xufTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uKCkge1xuXHRpZiAodGhpcy5yZWFkT25seSkge1xuXHRcdHRocm93IFwiVGhpcyBzZXQgaXMgcmVhZG9ubHlcIjtcblx0fVxuXHR0aGlzLmNvbmZpZ3MgPSBbXTtcblx0dGhpcy5jYWNoZWRIYXNoQ29kZSA9IC0xO1xuXHR0aGlzLmNvbmZpZ0xvb2t1cCA9IG5ldyBTZXQoKTtcbn07XG5cbkFUTkNvbmZpZ1NldC5wcm90b3R5cGUuc2V0UmVhZG9ubHkgPSBmdW5jdGlvbihyZWFkT25seSkge1xuXHR0aGlzLnJlYWRPbmx5ID0gcmVhZE9ubHk7XG5cdGlmIChyZWFkT25seSkge1xuXHRcdHRoaXMuY29uZmlnTG9va3VwID0gbnVsbDsgLy8gY2FuJ3QgbW9kLCBubyBuZWVkIGZvciBsb29rdXAgY2FjaGVcblx0fVxufTtcblxuQVROQ29uZmlnU2V0LnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gVXRpbHMuYXJyYXlUb1N0cmluZyh0aGlzLmNvbmZpZ3MpICtcblx0XHQodGhpcy5oYXNTZW1hbnRpY0NvbnRleHQgPyBcIixoYXNTZW1hbnRpY0NvbnRleHQ9XCIgKyB0aGlzLmhhc1NlbWFudGljQ29udGV4dCA6IFwiXCIpICtcblx0XHQodGhpcy51bmlxdWVBbHQgIT09IEFUTi5JTlZBTElEX0FMVF9OVU1CRVIgPyBcIix1bmlxdWVBbHQ9XCIgKyB0aGlzLnVuaXF1ZUFsdCA6IFwiXCIpICtcblx0XHQodGhpcy5jb25mbGljdGluZ0FsdHMgIT09IG51bGwgPyBcIixjb25mbGljdGluZ0FsdHM9XCIgKyB0aGlzLmNvbmZsaWN0aW5nQWx0cyA6IFwiXCIpICtcblx0XHQodGhpcy5kaXBzSW50b091dGVyQ29udGV4dCA/IFwiLGRpcHNJbnRvT3V0ZXJDb250ZXh0XCIgOiBcIlwiKTtcbn07XG5cbmZ1bmN0aW9uIE9yZGVyZWRBVE5Db25maWdTZXQoKSB7XG5cdEFUTkNvbmZpZ1NldC5jYWxsKHRoaXMpO1xuXHR0aGlzLmNvbmZpZ0xvb2t1cCA9IG5ldyBTZXQoKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbk9yZGVyZWRBVE5Db25maWdTZXQucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBVE5Db25maWdTZXQucHJvdG90eXBlKTtcbk9yZGVyZWRBVE5Db25maWdTZXQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gT3JkZXJlZEFUTkNvbmZpZ1NldDtcblxuZXhwb3J0cy5BVE5Db25maWdTZXQgPSBBVE5Db25maWdTZXQ7XG5leHBvcnRzLk9yZGVyZWRBVE5Db25maWdTZXQgPSBPcmRlcmVkQVROQ29uZmlnU2V0O1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG5mdW5jdGlvbiBBVE5EZXNlcmlhbGl6YXRpb25PcHRpb25zKGNvcHlGcm9tKSB7XG5cdGlmKGNvcHlGcm9tPT09dW5kZWZpbmVkKSB7XG5cdFx0Y29weUZyb20gPSBudWxsO1xuXHR9XG5cdHRoaXMucmVhZE9ubHkgPSBmYWxzZTtcbiAgICB0aGlzLnZlcmlmeUFUTiA9IGNvcHlGcm9tPT09bnVsbCA/IHRydWUgOiBjb3B5RnJvbS52ZXJpZnlBVE47XG4gICAgdGhpcy5nZW5lcmF0ZVJ1bGVCeXBhc3NUcmFuc2l0aW9ucyA9IGNvcHlGcm9tPT09bnVsbCA/IGZhbHNlIDogY29weUZyb20uZ2VuZXJhdGVSdWxlQnlwYXNzVHJhbnNpdGlvbnM7XG5cbiAgICByZXR1cm4gdGhpcztcbn1cblxuQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucy5kZWZhdWx0T3B0aW9ucyA9IG5ldyBBVE5EZXNlcmlhbGl6YXRpb25PcHRpb25zKCk7XG5BVE5EZXNlcmlhbGl6YXRpb25PcHRpb25zLmRlZmF1bHRPcHRpb25zLnJlYWRPbmx5ID0gdHJ1ZTtcblxuLy8gICAgZGVmIF9fc2V0YXR0cl9fKHNlbGYsIGtleSwgdmFsdWUpOlxuLy8gICAgICAgIGlmIGtleSE9XCJyZWFkT25seVwiIGFuZCBzZWxmLnJlYWRPbmx5OlxuLy8gICAgICAgICAgICByYWlzZSBFeGNlcHRpb24oXCJUaGUgb2JqZWN0IGlzIHJlYWQgb25seS5cIilcbi8vICAgICAgICBzdXBlcih0eXBlKHNlbGYpLCBzZWxmKS5fX3NldGF0dHJfXyhrZXksdmFsdWUpXG5cbmV4cG9ydHMuQVRORGVzZXJpYWxpemF0aW9uT3B0aW9ucyA9IEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnM7XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vLi4vVG9rZW4nKS5Ub2tlbjtcbnZhciBBVE4gPSByZXF1aXJlKCcuL0FUTicpLkFUTjtcbnZhciBBVE5UeXBlID0gcmVxdWlyZSgnLi9BVE5UeXBlJykuQVROVHlwZTtcbnZhciBBVE5TdGF0ZXMgPSByZXF1aXJlKCcuL0FUTlN0YXRlJyk7XG52YXIgQVROU3RhdGUgPSBBVE5TdGF0ZXMuQVROU3RhdGU7XG52YXIgQmFzaWNTdGF0ZSA9IEFUTlN0YXRlcy5CYXNpY1N0YXRlO1xudmFyIERlY2lzaW9uU3RhdGUgPSBBVE5TdGF0ZXMuRGVjaXNpb25TdGF0ZTtcbnZhciBCbG9ja1N0YXJ0U3RhdGUgPSBBVE5TdGF0ZXMuQmxvY2tTdGFydFN0YXRlO1xudmFyIEJsb2NrRW5kU3RhdGUgPSBBVE5TdGF0ZXMuQmxvY2tFbmRTdGF0ZTtcbnZhciBMb29wRW5kU3RhdGUgPSBBVE5TdGF0ZXMuTG9vcEVuZFN0YXRlO1xudmFyIFJ1bGVTdGFydFN0YXRlID0gQVROU3RhdGVzLlJ1bGVTdGFydFN0YXRlO1xudmFyIFJ1bGVTdG9wU3RhdGUgPSBBVE5TdGF0ZXMuUnVsZVN0b3BTdGF0ZTtcbnZhciBUb2tlbnNTdGFydFN0YXRlID0gQVROU3RhdGVzLlRva2Vuc1N0YXJ0U3RhdGU7XG52YXIgUGx1c0xvb3BiYWNrU3RhdGUgPSBBVE5TdGF0ZXMuUGx1c0xvb3BiYWNrU3RhdGU7XG52YXIgU3Rhckxvb3BiYWNrU3RhdGUgPSBBVE5TdGF0ZXMuU3Rhckxvb3BiYWNrU3RhdGU7XG52YXIgU3Rhckxvb3BFbnRyeVN0YXRlID0gQVROU3RhdGVzLlN0YXJMb29wRW50cnlTdGF0ZTtcbnZhciBQbHVzQmxvY2tTdGFydFN0YXRlID0gQVROU3RhdGVzLlBsdXNCbG9ja1N0YXJ0U3RhdGU7XG52YXIgU3RhckJsb2NrU3RhcnRTdGF0ZSA9IEFUTlN0YXRlcy5TdGFyQmxvY2tTdGFydFN0YXRlO1xudmFyIEJhc2ljQmxvY2tTdGFydFN0YXRlID0gQVROU3RhdGVzLkJhc2ljQmxvY2tTdGFydFN0YXRlO1xudmFyIFRyYW5zaXRpb25zID0gcmVxdWlyZSgnLi9UcmFuc2l0aW9uJyk7XG52YXIgVHJhbnNpdGlvbiA9IFRyYW5zaXRpb25zLlRyYW5zaXRpb247XG52YXIgQXRvbVRyYW5zaXRpb24gPSBUcmFuc2l0aW9ucy5BdG9tVHJhbnNpdGlvbjtcbnZhciBTZXRUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuU2V0VHJhbnNpdGlvbjtcbnZhciBOb3RTZXRUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuTm90U2V0VHJhbnNpdGlvbjtcbnZhciBSdWxlVHJhbnNpdGlvbiA9IFRyYW5zaXRpb25zLlJ1bGVUcmFuc2l0aW9uO1xudmFyIFJhbmdlVHJhbnNpdGlvbiA9IFRyYW5zaXRpb25zLlJhbmdlVHJhbnNpdGlvbjtcbnZhciBBY3Rpb25UcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuQWN0aW9uVHJhbnNpdGlvbjtcbnZhciBFcHNpbG9uVHJhbnNpdGlvbiA9IFRyYW5zaXRpb25zLkVwc2lsb25UcmFuc2l0aW9uO1xudmFyIFdpbGRjYXJkVHJhbnNpdGlvbiA9IFRyYW5zaXRpb25zLldpbGRjYXJkVHJhbnNpdGlvbjtcbnZhciBQcmVkaWNhdGVUcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuUHJlZGljYXRlVHJhbnNpdGlvbjtcbnZhciBQcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbiA9IFRyYW5zaXRpb25zLlByZWNlZGVuY2VQcmVkaWNhdGVUcmFuc2l0aW9uO1xudmFyIEludGVydmFsU2V0ID0gcmVxdWlyZSgnLi8uLi9JbnRlcnZhbFNldCcpLkludGVydmFsU2V0O1xudmFyIEludGVydmFsID0gcmVxdWlyZSgnLi8uLi9JbnRlcnZhbFNldCcpLkludGVydmFsO1xudmFyIEFUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMgPSByZXF1aXJlKCcuL0FUTkRlc2VyaWFsaXphdGlvbk9wdGlvbnMnKS5BVE5EZXNlcmlhbGl6YXRpb25PcHRpb25zO1xudmFyIExleGVyQWN0aW9ucyA9IHJlcXVpcmUoJy4vTGV4ZXJBY3Rpb24nKTtcbnZhciBMZXhlckFjdGlvblR5cGUgPSBMZXhlckFjdGlvbnMuTGV4ZXJBY3Rpb25UeXBlO1xudmFyIExleGVyU2tpcEFjdGlvbiA9IExleGVyQWN0aW9ucy5MZXhlclNraXBBY3Rpb247XG52YXIgTGV4ZXJDaGFubmVsQWN0aW9uID0gTGV4ZXJBY3Rpb25zLkxleGVyQ2hhbm5lbEFjdGlvbjtcbnZhciBMZXhlckN1c3RvbUFjdGlvbiA9IExleGVyQWN0aW9ucy5MZXhlckN1c3RvbUFjdGlvbjtcbnZhciBMZXhlck1vcmVBY3Rpb24gPSBMZXhlckFjdGlvbnMuTGV4ZXJNb3JlQWN0aW9uO1xudmFyIExleGVyVHlwZUFjdGlvbiA9IExleGVyQWN0aW9ucy5MZXhlclR5cGVBY3Rpb247XG52YXIgTGV4ZXJQdXNoTW9kZUFjdGlvbiA9IExleGVyQWN0aW9ucy5MZXhlclB1c2hNb2RlQWN0aW9uO1xudmFyIExleGVyUG9wTW9kZUFjdGlvbiA9IExleGVyQWN0aW9ucy5MZXhlclBvcE1vZGVBY3Rpb247XG52YXIgTGV4ZXJNb2RlQWN0aW9uID0gTGV4ZXJBY3Rpb25zLkxleGVyTW9kZUFjdGlvbjtcbi8vIFRoaXMgaXMgdGhlIGVhcmxpZXN0IHN1cHBvcnRlZCBzZXJpYWxpemVkIFVVSUQuXG4vLyBzdGljayB0byBzZXJpYWxpemVkIHZlcnNpb24gZm9yIG5vdywgd2UgZG9uJ3QgbmVlZCBhIFVVSUQgaW5zdGFuY2VcbnZhciBCQVNFX1NFUklBTElaRURfVVVJRCA9IFwiQUFEQjhEN0UtQUVFRi00NDE1LUFEMkItODIwNEQ2Q0YwNDJFXCI7XG5cbi8vXG4vLyBUaGlzIFVVSUQgaW5kaWNhdGVzIHRoZSBzZXJpYWxpemVkIEFUTiBjb250YWlucyB0d28gc2V0cyBvZlxuLy8gSW50ZXJ2YWxTZXRzLCB3aGVyZSB0aGUgc2Vjb25kIHNldCdzIHZhbHVlcyBhcmUgZW5jb2RlZCBhc1xuLy8gMzItYml0IGludGVnZXJzIHRvIHN1cHBvcnQgdGhlIGZ1bGwgVW5pY29kZSBTTVAgcmFuZ2UgdXAgdG8gVSsxMEZGRkYuXG4vL1xudmFyIEFEREVEX1VOSUNPREVfU01QID0gXCI1OTYyNzc4NC0zQkU1LTQxN0EtQjlFQi04MTMxQTcyODYwODlcIjtcblxuLy8gVGhpcyBsaXN0IGNvbnRhaW5zIGFsbCBvZiB0aGUgY3VycmVudGx5IHN1cHBvcnRlZCBVVUlEcywgb3JkZXJlZCBieSB3aGVuXG4vLyB0aGUgZmVhdHVyZSBmaXJzdCBhcHBlYXJlZCBpbiB0aGlzIGJyYW5jaC5cbnZhciBTVVBQT1JURURfVVVJRFMgPSBbIEJBU0VfU0VSSUFMSVpFRF9VVUlELCBBRERFRF9VTklDT0RFX1NNUCBdO1xuXG52YXIgU0VSSUFMSVpFRF9WRVJTSU9OID0gMztcblxuLy8gVGhpcyBpcyB0aGUgY3VycmVudCBzZXJpYWxpemVkIFVVSUQuXG52YXIgU0VSSUFMSVpFRF9VVUlEID0gQURERURfVU5JQ09ERV9TTVA7XG5cbmZ1bmN0aW9uIGluaXRBcnJheSggbGVuZ3RoLCB2YWx1ZSkge1xuXHR2YXIgdG1wID0gW107XG5cdHRtcFtsZW5ndGgtMV0gPSB2YWx1ZTtcblx0cmV0dXJuIHRtcC5tYXAoZnVuY3Rpb24oaSkge3JldHVybiB2YWx1ZTt9KTtcbn1cblxuZnVuY3Rpb24gQVRORGVzZXJpYWxpemVyIChvcHRpb25zKSB7XG5cbiAgICBpZiAoIG9wdGlvbnM9PT0gdW5kZWZpbmVkIHx8IG9wdGlvbnMgPT09IG51bGwgKSB7XG4gICAgICAgIG9wdGlvbnMgPSBBVE5EZXNlcmlhbGl6YXRpb25PcHRpb25zLmRlZmF1bHRPcHRpb25zO1xuICAgIH1cbiAgICB0aGlzLmRlc2VyaWFsaXphdGlvbk9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMuc3RhdGVGYWN0b3JpZXMgPSBudWxsO1xuICAgIHRoaXMuYWN0aW9uRmFjdG9yaWVzID0gbnVsbDtcblxuICAgIHJldHVybiB0aGlzO1xufVxuXG4vLyBEZXRlcm1pbmVzIGlmIGEgcGFydGljdWxhciBzZXJpYWxpemVkIHJlcHJlc2VudGF0aW9uIG9mIGFuIEFUTiBzdXBwb3J0c1xuLy8gYSBwYXJ0aWN1bGFyIGZlYXR1cmUsIGlkZW50aWZpZWQgYnkgdGhlIHtAbGluayBVVUlEfSB1c2VkIGZvciBzZXJpYWxpemluZ1xuLy8gdGhlIEFUTiBhdCB0aGUgdGltZSB0aGUgZmVhdHVyZSB3YXMgZmlyc3QgaW50cm9kdWNlZC5cbi8vXG4vLyBAcGFyYW0gZmVhdHVyZSBUaGUge0BsaW5rIFVVSUR9IG1hcmtpbmcgdGhlIGZpcnN0IHRpbWUgdGhlIGZlYXR1cmUgd2FzXG4vLyBzdXBwb3J0ZWQgaW4gdGhlIHNlcmlhbGl6ZWQgQVROLlxuLy8gQHBhcmFtIGFjdHVhbFV1aWQgVGhlIHtAbGluayBVVUlEfSBvZiB0aGUgYWN0dWFsIHNlcmlhbGl6ZWQgQVROIHdoaWNoIGlzXG4vLyBjdXJyZW50bHkgYmVpbmcgZGVzZXJpYWxpemVkLlxuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgdGhlIHtAY29kZSBhY3R1YWxVdWlkfSB2YWx1ZSByZXByZXNlbnRzIGFcbi8vIHNlcmlhbGl6ZWQgQVROIGF0IG9yIGFmdGVyIHRoZSBmZWF0dXJlIGlkZW50aWZpZWQgYnkge0Bjb2RlIGZlYXR1cmV9IHdhc1xuLy8gaW50cm9kdWNlZDsgb3RoZXJ3aXNlLCB7QGNvZGUgZmFsc2V9LlxuXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLmlzRmVhdHVyZVN1cHBvcnRlZCA9IGZ1bmN0aW9uKGZlYXR1cmUsIGFjdHVhbFV1aWQpIHtcbiAgICB2YXIgaWR4MSA9IFNVUFBPUlRFRF9VVUlEUy5pbmRleE9mKGZlYXR1cmUpO1xuICAgIGlmIChpZHgxPDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgaWR4MiA9IFNVUFBPUlRFRF9VVUlEUy5pbmRleE9mKGFjdHVhbFV1aWQpO1xuICAgIHJldHVybiBpZHgyID49IGlkeDE7XG59O1xuXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLmRlc2VyaWFsaXplID0gZnVuY3Rpb24oZGF0YSkge1xuICAgIHRoaXMucmVzZXQoZGF0YSk7XG4gICAgdGhpcy5jaGVja1ZlcnNpb24oKTtcbiAgICB0aGlzLmNoZWNrVVVJRCgpO1xuICAgIHZhciBhdG4gPSB0aGlzLnJlYWRBVE4oKTtcbiAgICB0aGlzLnJlYWRTdGF0ZXMoYXRuKTtcbiAgICB0aGlzLnJlYWRSdWxlcyhhdG4pO1xuICAgIHRoaXMucmVhZE1vZGVzKGF0bik7XG4gICAgdmFyIHNldHMgPSBbXTtcbiAgICAvLyBGaXJzdCwgZGVzZXJpYWxpemUgc2V0cyB3aXRoIDE2LWJpdCBhcmd1bWVudHMgPD0gVStGRkZGLlxuICAgIHRoaXMucmVhZFNldHMoYXRuLCBzZXRzLCB0aGlzLnJlYWRJbnQuYmluZCh0aGlzKSk7XG4gICAgLy8gTmV4dCwgaWYgdGhlIEFUTiB3YXMgc2VyaWFsaXplZCB3aXRoIHRoZSBVbmljb2RlIFNNUCBmZWF0dXJlLFxuICAgIC8vIGRlc2VyaWFsaXplIHNldHMgd2l0aCAzMi1iaXQgYXJndW1lbnRzIDw9IFUrMTBGRkZGLlxuICAgIGlmICh0aGlzLmlzRmVhdHVyZVN1cHBvcnRlZChBRERFRF9VTklDT0RFX1NNUCwgdGhpcy51dWlkKSkge1xuICAgICAgICB0aGlzLnJlYWRTZXRzKGF0biwgc2V0cywgdGhpcy5yZWFkSW50MzIuYmluZCh0aGlzKSk7XG4gICAgfVxuICAgIHRoaXMucmVhZEVkZ2VzKGF0biwgc2V0cyk7XG4gICAgdGhpcy5yZWFkRGVjaXNpb25zKGF0bik7XG4gICAgdGhpcy5yZWFkTGV4ZXJBY3Rpb25zKGF0bik7XG4gICAgdGhpcy5tYXJrUHJlY2VkZW5jZURlY2lzaW9ucyhhdG4pO1xuICAgIHRoaXMudmVyaWZ5QVROKGF0bik7XG4gICAgaWYgKHRoaXMuZGVzZXJpYWxpemF0aW9uT3B0aW9ucy5nZW5lcmF0ZVJ1bGVCeXBhc3NUcmFuc2l0aW9ucyAmJiBhdG4uZ3JhbW1hclR5cGUgPT09IEFUTlR5cGUuUEFSU0VSICkge1xuICAgICAgICB0aGlzLmdlbmVyYXRlUnVsZUJ5cGFzc1RyYW5zaXRpb25zKGF0bik7XG4gICAgICAgIC8vIHJlLXZlcmlmeSBhZnRlciBtb2RpZmljYXRpb25cbiAgICAgICAgdGhpcy52ZXJpZnlBVE4oYXRuKTtcbiAgICB9XG4gICAgcmV0dXJuIGF0bjtcbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbihkYXRhKSB7XG5cdHZhciBhZGp1c3QgPSBmdW5jdGlvbihjKSB7XG4gICAgICAgIHZhciB2ID0gYy5jaGFyQ29kZUF0KDApO1xuICAgICAgICByZXR1cm4gdj4xICA/IHYtMiA6IHYgKyA2NTUzMztcblx0fTtcbiAgICB2YXIgdGVtcCA9IGRhdGEuc3BsaXQoXCJcIikubWFwKGFkanVzdCk7XG4gICAgLy8gZG9uJ3QgYWRqdXN0IHRoZSBmaXJzdCB2YWx1ZSBzaW5jZSB0aGF0J3MgdGhlIHZlcnNpb24gbnVtYmVyXG4gICAgdGVtcFswXSA9IGRhdGEuY2hhckNvZGVBdCgwKTtcbiAgICB0aGlzLmRhdGEgPSB0ZW1wO1xuICAgIHRoaXMucG9zID0gMDtcbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUuY2hlY2tWZXJzaW9uID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZlcnNpb24gPSB0aGlzLnJlYWRJbnQoKTtcbiAgICBpZiAoIHZlcnNpb24gIT09IFNFUklBTElaRURfVkVSU0lPTiApIHtcbiAgICAgICAgdGhyb3cgKFwiQ291bGQgbm90IGRlc2VyaWFsaXplIEFUTiB3aXRoIHZlcnNpb24gXCIgKyB2ZXJzaW9uICsgXCIgKGV4cGVjdGVkIFwiICsgU0VSSUFMSVpFRF9WRVJTSU9OICsgXCIpLlwiKTtcbiAgICB9XG59O1xuXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLmNoZWNrVVVJRCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciB1dWlkID0gdGhpcy5yZWFkVVVJRCgpO1xuICAgIGlmIChTVVBQT1JURURfVVVJRFMuaW5kZXhPZih1dWlkKTwwKSB7XG4gICAgICAgIHRocm93IChcIkNvdWxkIG5vdCBkZXNlcmlhbGl6ZSBBVE4gd2l0aCBVVUlEOiBcIiArIHV1aWQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgXCIgKGV4cGVjdGVkIFwiICsgU0VSSUFMSVpFRF9VVUlEICsgXCIgb3IgYSBsZWdhY3kgVVVJRCkuXCIsIHV1aWQsIFNFUklBTElaRURfVVVJRCk7XG4gICAgfVxuICAgIHRoaXMudXVpZCA9IHV1aWQ7XG59O1xuXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLnJlYWRBVE4gPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZ3JhbW1hclR5cGUgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICB2YXIgbWF4VG9rZW5UeXBlID0gdGhpcy5yZWFkSW50KCk7XG4gICAgcmV0dXJuIG5ldyBBVE4oZ3JhbW1hclR5cGUsIG1heFRva2VuVHlwZSk7XG59O1xuXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLnJlYWRTdGF0ZXMgPSBmdW5jdGlvbihhdG4pIHtcblx0dmFyIGosIHBhaXIsIHN0YXRlTnVtYmVyO1xuICAgIHZhciBsb29wQmFja1N0YXRlTnVtYmVycyA9IFtdO1xuICAgIHZhciBlbmRTdGF0ZU51bWJlcnMgPSBbXTtcbiAgICB2YXIgbnN0YXRlcyA9IHRoaXMucmVhZEludCgpO1xuICAgIGZvcih2YXIgaT0wOyBpPG5zdGF0ZXM7IGkrKykge1xuICAgICAgICB2YXIgc3R5cGUgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgLy8gaWdub3JlIGJhZCB0eXBlIG9mIHN0YXRlc1xuICAgICAgICBpZiAoc3R5cGU9PT1BVE5TdGF0ZS5JTlZBTElEX1RZUEUpIHtcbiAgICAgICAgICAgIGF0bi5hZGRTdGF0ZShudWxsKTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBydWxlSW5kZXggPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgaWYgKHJ1bGVJbmRleCA9PT0gMHhGRkZGKSB7XG4gICAgICAgICAgICBydWxlSW5kZXggPSAtMTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcyA9IHRoaXMuc3RhdGVGYWN0b3J5KHN0eXBlLCBydWxlSW5kZXgpO1xuICAgICAgICBpZiAoc3R5cGUgPT09IEFUTlN0YXRlLkxPT1BfRU5EKSB7IC8vIHNwZWNpYWwgY2FzZVxuICAgICAgICAgICAgdmFyIGxvb3BCYWNrU3RhdGVOdW1iZXIgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgICAgIGxvb3BCYWNrU3RhdGVOdW1iZXJzLnB1c2goW3MsIGxvb3BCYWNrU3RhdGVOdW1iZXJdKTtcbiAgICAgICAgfSBlbHNlIGlmKHMgaW5zdGFuY2VvZiBCbG9ja1N0YXJ0U3RhdGUpIHtcbiAgICAgICAgICAgIHZhciBlbmRTdGF0ZU51bWJlciA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICAgICAgZW5kU3RhdGVOdW1iZXJzLnB1c2goW3MsIGVuZFN0YXRlTnVtYmVyXSk7XG4gICAgICAgIH1cbiAgICAgICAgYXRuLmFkZFN0YXRlKHMpO1xuICAgIH1cbiAgICAvLyBkZWxheSB0aGUgYXNzaWdubWVudCBvZiBsb29wIGJhY2sgYW5kIGVuZCBzdGF0ZXMgdW50aWwgd2Uga25vdyBhbGwgdGhlXG5cdC8vIHN0YXRlIGluc3RhbmNlcyBoYXZlIGJlZW4gaW5pdGlhbGl6ZWRcbiAgICBmb3IgKGo9MDsgajxsb29wQmFja1N0YXRlTnVtYmVycy5sZW5ndGg7IGorKykge1xuICAgICAgICBwYWlyID0gbG9vcEJhY2tTdGF0ZU51bWJlcnNbal07XG4gICAgICAgIHBhaXJbMF0ubG9vcEJhY2tTdGF0ZSA9IGF0bi5zdGF0ZXNbcGFpclsxXV07XG4gICAgfVxuXG4gICAgZm9yIChqPTA7IGo8ZW5kU3RhdGVOdW1iZXJzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIHBhaXIgPSBlbmRTdGF0ZU51bWJlcnNbal07XG4gICAgICAgIHBhaXJbMF0uZW5kU3RhdGUgPSBhdG4uc3RhdGVzW3BhaXJbMV1dO1xuICAgIH1cblxuICAgIHZhciBudW1Ob25HcmVlZHlTdGF0ZXMgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICBmb3IgKGo9MDsgajxudW1Ob25HcmVlZHlTdGF0ZXM7IGorKykge1xuICAgICAgICBzdGF0ZU51bWJlciA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICBhdG4uc3RhdGVzW3N0YXRlTnVtYmVyXS5ub25HcmVlZHkgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBudW1QcmVjZWRlbmNlU3RhdGVzID0gdGhpcy5yZWFkSW50KCk7XG4gICAgZm9yIChqPTA7IGo8bnVtUHJlY2VkZW5jZVN0YXRlczsgaisrKSB7XG4gICAgICAgIHN0YXRlTnVtYmVyID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIGF0bi5zdGF0ZXNbc3RhdGVOdW1iZXJdLmlzUHJlY2VkZW5jZVJ1bGUgPSB0cnVlO1xuICAgIH1cbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUucmVhZFJ1bGVzID0gZnVuY3Rpb24oYXRuKSB7XG4gICAgdmFyIGk7XG4gICAgdmFyIG5ydWxlcyA9IHRoaXMucmVhZEludCgpO1xuICAgIGlmIChhdG4uZ3JhbW1hclR5cGUgPT09IEFUTlR5cGUuTEVYRVIgKSB7XG4gICAgICAgIGF0bi5ydWxlVG9Ub2tlblR5cGUgPSBpbml0QXJyYXkobnJ1bGVzLCAwKTtcbiAgICB9XG4gICAgYXRuLnJ1bGVUb1N0YXJ0U3RhdGUgPSBpbml0QXJyYXkobnJ1bGVzLCAwKTtcbiAgICBmb3IgKGk9MDsgaTxucnVsZXM7IGkrKykge1xuICAgICAgICB2YXIgcyA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICB2YXIgc3RhcnRTdGF0ZSA9IGF0bi5zdGF0ZXNbc107XG4gICAgICAgIGF0bi5ydWxlVG9TdGFydFN0YXRlW2ldID0gc3RhcnRTdGF0ZTtcbiAgICAgICAgaWYgKCBhdG4uZ3JhbW1hclR5cGUgPT09IEFUTlR5cGUuTEVYRVIgKSB7XG4gICAgICAgICAgICB2YXIgdG9rZW5UeXBlID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgICAgICBpZiAodG9rZW5UeXBlID09PSAweEZGRkYpIHtcbiAgICAgICAgICAgICAgICB0b2tlblR5cGUgPSBUb2tlbi5FT0Y7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhdG4ucnVsZVRvVG9rZW5UeXBlW2ldID0gdG9rZW5UeXBlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGF0bi5ydWxlVG9TdG9wU3RhdGUgPSBpbml0QXJyYXkobnJ1bGVzLCAwKTtcbiAgICBmb3IgKGk9MDsgaTxhdG4uc3RhdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGF0bi5zdGF0ZXNbaV07XG4gICAgICAgIGlmICghKHN0YXRlIGluc3RhbmNlb2YgUnVsZVN0b3BTdGF0ZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGF0bi5ydWxlVG9TdG9wU3RhdGVbc3RhdGUucnVsZUluZGV4XSA9IHN0YXRlO1xuICAgICAgICBhdG4ucnVsZVRvU3RhcnRTdGF0ZVtzdGF0ZS5ydWxlSW5kZXhdLnN0b3BTdGF0ZSA9IHN0YXRlO1xuICAgIH1cbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUucmVhZE1vZGVzID0gZnVuY3Rpb24oYXRuKSB7XG4gICAgdmFyIG5tb2RlcyA9IHRoaXMucmVhZEludCgpO1xuICAgIGZvciAodmFyIGk9MDsgaTxubW9kZXM7IGkrKykge1xuICAgICAgICB2YXIgcyA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICBhdG4ubW9kZVRvU3RhcnRTdGF0ZS5wdXNoKGF0bi5zdGF0ZXNbc10pO1xuICAgIH1cbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUucmVhZFNldHMgPSBmdW5jdGlvbihhdG4sIHNldHMsIHJlYWRVbmljb2RlKSB7XG4gICAgdmFyIG0gPSB0aGlzLnJlYWRJbnQoKTtcbiAgICBmb3IgKHZhciBpPTA7IGk8bTsgaSsrKSB7XG4gICAgICAgIHZhciBpc2V0ID0gbmV3IEludGVydmFsU2V0KCk7XG4gICAgICAgIHNldHMucHVzaChpc2V0KTtcbiAgICAgICAgdmFyIG4gPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgdmFyIGNvbnRhaW5zRW9mID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIGlmIChjb250YWluc0VvZiE9PTApIHtcbiAgICAgICAgICAgIGlzZXQuYWRkT25lKC0xKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBqPTA7IGo8bjsgaisrKSB7XG4gICAgICAgICAgICB2YXIgaTEgPSByZWFkVW5pY29kZSgpO1xuICAgICAgICAgICAgdmFyIGkyID0gcmVhZFVuaWNvZGUoKTtcbiAgICAgICAgICAgIGlzZXQuYWRkUmFuZ2UoaTEsIGkyKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUucmVhZEVkZ2VzID0gZnVuY3Rpb24oYXRuLCBzZXRzKSB7XG5cdHZhciBpLCBqLCBzdGF0ZSwgdHJhbnMsIHRhcmdldDtcbiAgICB2YXIgbmVkZ2VzID0gdGhpcy5yZWFkSW50KCk7XG4gICAgZm9yIChpPTA7IGk8bmVkZ2VzOyBpKyspIHtcbiAgICAgICAgdmFyIHNyYyA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICB2YXIgdHJnID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHZhciB0dHlwZSA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICB2YXIgYXJnMSA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICB2YXIgYXJnMiA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICB2YXIgYXJnMyA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICB0cmFucyA9IHRoaXMuZWRnZUZhY3RvcnkoYXRuLCB0dHlwZSwgc3JjLCB0cmcsIGFyZzEsIGFyZzIsIGFyZzMsIHNldHMpO1xuICAgICAgICB2YXIgc3JjU3RhdGUgPSBhdG4uc3RhdGVzW3NyY107XG4gICAgICAgIHNyY1N0YXRlLmFkZFRyYW5zaXRpb24odHJhbnMpO1xuICAgIH1cbiAgICAvLyBlZGdlcyBmb3IgcnVsZSBzdG9wIHN0YXRlcyBjYW4gYmUgZGVyaXZlZCwgc28gdGhleSBhcmVuJ3Qgc2VyaWFsaXplZFxuICAgIGZvciAoaT0wOyBpPGF0bi5zdGF0ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgc3RhdGUgPSBhdG4uc3RhdGVzW2ldO1xuICAgICAgICBmb3IgKGo9MDsgajxzdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgdmFyIHQgPSBzdGF0ZS50cmFuc2l0aW9uc1tqXTtcbiAgICAgICAgICAgIGlmICghKHQgaW5zdGFuY2VvZiBSdWxlVHJhbnNpdGlvbikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblx0XHRcdHZhciBvdXRlcm1vc3RQcmVjZWRlbmNlUmV0dXJuID0gLTE7XG5cdFx0XHRpZiAoYXRuLnJ1bGVUb1N0YXJ0U3RhdGVbdC50YXJnZXQucnVsZUluZGV4XS5pc1ByZWNlZGVuY2VSdWxlKSB7XG5cdFx0XHRcdGlmICh0LnByZWNlZGVuY2UgPT09IDApIHtcblx0XHRcdFx0XHRvdXRlcm1vc3RQcmVjZWRlbmNlUmV0dXJuID0gdC50YXJnZXQucnVsZUluZGV4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHRyYW5zID0gbmV3IEVwc2lsb25UcmFuc2l0aW9uKHQuZm9sbG93U3RhdGUsIG91dGVybW9zdFByZWNlZGVuY2VSZXR1cm4pO1xuICAgICAgICAgICAgYXRuLnJ1bGVUb1N0b3BTdGF0ZVt0LnRhcmdldC5ydWxlSW5kZXhdLmFkZFRyYW5zaXRpb24odHJhbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChpPTA7IGk8YXRuLnN0YXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBzdGF0ZSA9IGF0bi5zdGF0ZXNbaV07XG4gICAgICAgIGlmIChzdGF0ZSBpbnN0YW5jZW9mIEJsb2NrU3RhcnRTdGF0ZSkge1xuICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBrbm93IHRoZSBlbmQgc3RhdGUgdG8gc2V0IGl0cyBzdGFydCBzdGF0ZVxuICAgICAgICAgICAgaWYgKHN0YXRlLmVuZFN0YXRlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgKFwiSWxsZWdhbFN0YXRlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gYmxvY2sgZW5kIHN0YXRlcyBjYW4gb25seSBiZSBhc3NvY2lhdGVkIHRvIGEgc2luZ2xlIGJsb2NrIHN0YXJ0XG5cdFx0XHQvLyBzdGF0ZVxuICAgICAgICAgICAgaWYgKCBzdGF0ZS5lbmRTdGF0ZS5zdGFydFN0YXRlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgKFwiSWxsZWdhbFN0YXRlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RhdGUuZW5kU3RhdGUuc3RhcnRTdGF0ZSA9IHN0YXRlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGF0ZSBpbnN0YW5jZW9mIFBsdXNMb29wYmFja1N0YXRlKSB7XG4gICAgICAgICAgICBmb3IgKGo9MDsgajxzdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHRhcmdldCA9IHN0YXRlLnRyYW5zaXRpb25zW2pdLnRhcmdldDtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgUGx1c0Jsb2NrU3RhcnRTdGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXQubG9vcEJhY2tTdGF0ZSA9IHN0YXRlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSBpbnN0YW5jZW9mIFN0YXJMb29wYmFja1N0YXRlKSB7XG4gICAgICAgICAgICBmb3IgKGo9MDsgajxzdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgICAgIHRhcmdldCA9IHN0YXRlLnRyYW5zaXRpb25zW2pdLnRhcmdldDtcbiAgICAgICAgICAgICAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgU3Rhckxvb3BFbnRyeVN0YXRlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5sb29wQmFja1N0YXRlID0gc3RhdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkRGVjaXNpb25zID0gZnVuY3Rpb24oYXRuKSB7XG4gICAgdmFyIG5kZWNpc2lvbnMgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICBmb3IgKHZhciBpPTA7IGk8bmRlY2lzaW9uczsgaSsrKSB7XG4gICAgICAgIHZhciBzID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgIHZhciBkZWNTdGF0ZSA9IGF0bi5zdGF0ZXNbc107XG4gICAgICAgIGF0bi5kZWNpc2lvblRvU3RhdGUucHVzaChkZWNTdGF0ZSk7XG4gICAgICAgIGRlY1N0YXRlLmRlY2lzaW9uID0gaTtcbiAgICB9XG59O1xuXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLnJlYWRMZXhlckFjdGlvbnMgPSBmdW5jdGlvbihhdG4pIHtcbiAgICBpZiAoYXRuLmdyYW1tYXJUeXBlID09PSBBVE5UeXBlLkxFWEVSKSB7XG4gICAgICAgIHZhciBjb3VudCA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICBhdG4ubGV4ZXJBY3Rpb25zID0gaW5pdEFycmF5KGNvdW50LCBudWxsKTtcbiAgICAgICAgZm9yICh2YXIgaT0wOyBpPGNvdW50OyBpKyspIHtcbiAgICAgICAgICAgIHZhciBhY3Rpb25UeXBlID0gdGhpcy5yZWFkSW50KCk7XG4gICAgICAgICAgICB2YXIgZGF0YTEgPSB0aGlzLnJlYWRJbnQoKTtcbiAgICAgICAgICAgIGlmIChkYXRhMSA9PT0gMHhGRkZGKSB7XG4gICAgICAgICAgICAgICAgZGF0YTEgPSAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBkYXRhMiA9IHRoaXMucmVhZEludCgpO1xuICAgICAgICAgICAgaWYgKGRhdGEyID09PSAweEZGRkYpIHtcbiAgICAgICAgICAgICAgICBkYXRhMiA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGxleGVyQWN0aW9uID0gdGhpcy5sZXhlckFjdGlvbkZhY3RvcnkoYWN0aW9uVHlwZSwgZGF0YTEsIGRhdGEyKTtcbiAgICAgICAgICAgIGF0bi5sZXhlckFjdGlvbnNbaV0gPSBsZXhlckFjdGlvbjtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUuZ2VuZXJhdGVSdWxlQnlwYXNzVHJhbnNpdGlvbnMgPSBmdW5jdGlvbihhdG4pIHtcblx0dmFyIGk7XG4gICAgdmFyIGNvdW50ID0gYXRuLnJ1bGVUb1N0YXJ0U3RhdGUubGVuZ3RoO1xuICAgIGZvcihpPTA7IGk8Y291bnQ7IGkrKykge1xuICAgICAgICBhdG4ucnVsZVRvVG9rZW5UeXBlW2ldID0gYXRuLm1heFRva2VuVHlwZSArIGkgKyAxO1xuICAgIH1cbiAgICBmb3IoaT0wOyBpPGNvdW50OyBpKyspIHtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVJ1bGVCeXBhc3NUcmFuc2l0aW9uKGF0biwgaSk7XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5nZW5lcmF0ZVJ1bGVCeXBhc3NUcmFuc2l0aW9uID0gZnVuY3Rpb24oYXRuLCBpZHgpIHtcblx0dmFyIGksIHN0YXRlO1xuICAgIHZhciBieXBhc3NTdGFydCA9IG5ldyBCYXNpY0Jsb2NrU3RhcnRTdGF0ZSgpO1xuICAgIGJ5cGFzc1N0YXJ0LnJ1bGVJbmRleCA9IGlkeDtcbiAgICBhdG4uYWRkU3RhdGUoYnlwYXNzU3RhcnQpO1xuXG4gICAgdmFyIGJ5cGFzc1N0b3AgPSBuZXcgQmxvY2tFbmRTdGF0ZSgpO1xuICAgIGJ5cGFzc1N0b3AucnVsZUluZGV4ID0gaWR4O1xuICAgIGF0bi5hZGRTdGF0ZShieXBhc3NTdG9wKTtcblxuICAgIGJ5cGFzc1N0YXJ0LmVuZFN0YXRlID0gYnlwYXNzU3RvcDtcbiAgICBhdG4uZGVmaW5lRGVjaXNpb25TdGF0ZShieXBhc3NTdGFydCk7XG5cbiAgICBieXBhc3NTdG9wLnN0YXJ0U3RhdGUgPSBieXBhc3NTdGFydDtcblxuICAgIHZhciBleGNsdWRlVHJhbnNpdGlvbiA9IG51bGw7XG4gICAgdmFyIGVuZFN0YXRlID0gbnVsbDtcblxuICAgIGlmIChhdG4ucnVsZVRvU3RhcnRTdGF0ZVtpZHhdLmlzUHJlY2VkZW5jZVJ1bGUpIHtcbiAgICAgICAgLy8gd3JhcCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHJ1bGUgdG8gdGhlIFN0YXJMb29wRW50cnlTdGF0ZVxuICAgICAgICBlbmRTdGF0ZSA9IG51bGw7XG4gICAgICAgIGZvcihpPTA7IGk8YXRuLnN0YXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgc3RhdGUgPSBhdG4uc3RhdGVzW2ldO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGVJc0VuZFN0YXRlRm9yKHN0YXRlLCBpZHgpKSB7XG4gICAgICAgICAgICAgICAgZW5kU3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgICAgICAgICBleGNsdWRlVHJhbnNpdGlvbiA9IHN0YXRlLmxvb3BCYWNrU3RhdGUudHJhbnNpdGlvbnNbMF07XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4Y2x1ZGVUcmFuc2l0aW9uID09PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyAoXCJDb3VsZG4ndCBpZGVudGlmeSBmaW5hbCBzdGF0ZSBvZiB0aGUgcHJlY2VkZW5jZSBydWxlIHByZWZpeCBzZWN0aW9uLlwiKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGVuZFN0YXRlID0gYXRuLnJ1bGVUb1N0b3BTdGF0ZVtpZHhdO1xuICAgIH1cblxuICAgIC8vIGFsbCBub24tZXhjbHVkZWQgdHJhbnNpdGlvbnMgdGhhdCBjdXJyZW50bHkgdGFyZ2V0IGVuZCBzdGF0ZSBuZWVkIHRvXG5cdC8vIHRhcmdldCBibG9ja0VuZCBpbnN0ZWFkXG4gICAgZm9yKGk9MDsgaTxhdG4uc3RhdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHN0YXRlID0gYXRuLnN0YXRlc1tpXTtcbiAgICAgICAgZm9yKHZhciBqPTA7IGo8c3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIHZhciB0cmFuc2l0aW9uID0gc3RhdGUudHJhbnNpdGlvbnNbal07XG4gICAgICAgICAgICBpZiAodHJhbnNpdGlvbiA9PT0gZXhjbHVkZVRyYW5zaXRpb24pIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uLnRhcmdldCA9PT0gZW5kU3RhdGUpIHtcbiAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLnRhcmdldCA9IGJ5cGFzc1N0b3A7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhbGwgdHJhbnNpdGlvbnMgbGVhdmluZyB0aGUgcnVsZSBzdGFydCBzdGF0ZSBuZWVkIHRvIGxlYXZlIGJsb2NrU3RhcnRcblx0Ly8gaW5zdGVhZFxuICAgIHZhciBydWxlVG9TdGFydFN0YXRlID0gYXRuLnJ1bGVUb1N0YXJ0U3RhdGVbaWR4XTtcbiAgICB2YXIgY291bnQgPSBydWxlVG9TdGFydFN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDtcbiAgICB3aGlsZSAoIGNvdW50ID4gMCkge1xuICAgICAgICBieXBhc3NTdGFydC5hZGRUcmFuc2l0aW9uKHJ1bGVUb1N0YXJ0U3RhdGUudHJhbnNpdGlvbnNbY291bnQtMV0pO1xuICAgICAgICBydWxlVG9TdGFydFN0YXRlLnRyYW5zaXRpb25zID0gcnVsZVRvU3RhcnRTdGF0ZS50cmFuc2l0aW9ucy5zbGljZSgtMSk7XG4gICAgfVxuICAgIC8vIGxpbmsgdGhlIG5ldyBzdGF0ZXNcbiAgICBhdG4ucnVsZVRvU3RhcnRTdGF0ZVtpZHhdLmFkZFRyYW5zaXRpb24obmV3IEVwc2lsb25UcmFuc2l0aW9uKGJ5cGFzc1N0YXJ0KSk7XG4gICAgYnlwYXNzU3RvcC5hZGRUcmFuc2l0aW9uKG5ldyBFcHNpbG9uVHJhbnNpdGlvbihlbmRTdGF0ZSkpO1xuXG4gICAgdmFyIG1hdGNoU3RhdGUgPSBuZXcgQmFzaWNTdGF0ZSgpO1xuICAgIGF0bi5hZGRTdGF0ZShtYXRjaFN0YXRlKTtcbiAgICBtYXRjaFN0YXRlLmFkZFRyYW5zaXRpb24obmV3IEF0b21UcmFuc2l0aW9uKGJ5cGFzc1N0b3AsIGF0bi5ydWxlVG9Ub2tlblR5cGVbaWR4XSkpO1xuICAgIGJ5cGFzc1N0YXJ0LmFkZFRyYW5zaXRpb24obmV3IEVwc2lsb25UcmFuc2l0aW9uKG1hdGNoU3RhdGUpKTtcbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUuc3RhdGVJc0VuZFN0YXRlRm9yID0gZnVuY3Rpb24oc3RhdGUsIGlkeCkge1xuICAgIGlmICggc3RhdGUucnVsZUluZGV4ICE9PSBpZHgpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICghKCBzdGF0ZSBpbnN0YW5jZW9mIFN0YXJMb29wRW50cnlTdGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhciBtYXliZUxvb3BFbmRTdGF0ZSA9IHN0YXRlLnRyYW5zaXRpb25zW3N0YXRlLnRyYW5zaXRpb25zLmxlbmd0aCAtIDFdLnRhcmdldDtcbiAgICBpZiAoISggbWF5YmVMb29wRW5kU3RhdGUgaW5zdGFuY2VvZiBMb29wRW5kU3RhdGUpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBpZiAobWF5YmVMb29wRW5kU3RhdGUuZXBzaWxvbk9ubHlUcmFuc2l0aW9ucyAmJlxuICAgICAgICAobWF5YmVMb29wRW5kU3RhdGUudHJhbnNpdGlvbnNbMF0udGFyZ2V0IGluc3RhbmNlb2YgUnVsZVN0b3BTdGF0ZSkpIHtcbiAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn07XG5cbi8vXG4vLyBBbmFseXplIHRoZSB7QGxpbmsgU3Rhckxvb3BFbnRyeVN0YXRlfSBzdGF0ZXMgaW4gdGhlIHNwZWNpZmllZCBBVE4gdG8gc2V0XG4vLyB0aGUge0BsaW5rIFN0YXJMb29wRW50cnlTdGF0ZS8vaXNQcmVjZWRlbmNlRGVjaXNpb259IGZpZWxkIHRvIHRoZVxuLy8gY29ycmVjdCB2YWx1ZS5cbi8vXG4vLyBAcGFyYW0gYXRuIFRoZSBBVE4uXG4vL1xuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5tYXJrUHJlY2VkZW5jZURlY2lzaW9ucyA9IGZ1bmN0aW9uKGF0bikge1xuXHRmb3IodmFyIGk9MDsgaTxhdG4uc3RhdGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIHN0YXRlID0gYXRuLnN0YXRlc1tpXTtcblx0XHRpZiAoISggc3RhdGUgaW5zdGFuY2VvZiBTdGFyTG9vcEVudHJ5U3RhdGUpKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXZSBhbmFseXplIHRoZSBBVE4gdG8gZGV0ZXJtaW5lIGlmIHRoaXMgQVROIGRlY2lzaW9uIHN0YXRlIGlzIHRoZVxuICAgICAgICAvLyBkZWNpc2lvbiBmb3IgdGhlIGNsb3N1cmUgYmxvY2sgdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgYVxuICAgICAgICAvLyBwcmVjZWRlbmNlIHJ1bGUgc2hvdWxkIGNvbnRpbnVlIG9yIGNvbXBsZXRlLlxuICAgICAgICAvL1xuICAgICAgICBpZiAoIGF0bi5ydWxlVG9TdGFydFN0YXRlW3N0YXRlLnJ1bGVJbmRleF0uaXNQcmVjZWRlbmNlUnVsZSkge1xuICAgICAgICAgICAgdmFyIG1heWJlTG9vcEVuZFN0YXRlID0gc3RhdGUudHJhbnNpdGlvbnNbc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoIC0gMV0udGFyZ2V0O1xuICAgICAgICAgICAgaWYgKG1heWJlTG9vcEVuZFN0YXRlIGluc3RhbmNlb2YgTG9vcEVuZFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKCBtYXliZUxvb3BFbmRTdGF0ZS5lcHNpbG9uT25seVRyYW5zaXRpb25zICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAobWF5YmVMb29wRW5kU3RhdGUudHJhbnNpdGlvbnNbMF0udGFyZ2V0IGluc3RhbmNlb2YgUnVsZVN0b3BTdGF0ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdGUuaXNQcmVjZWRlbmNlRGVjaXNpb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXHR9XG59O1xuXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLnZlcmlmeUFUTiA9IGZ1bmN0aW9uKGF0bikge1xuICAgIGlmICghdGhpcy5kZXNlcmlhbGl6YXRpb25PcHRpb25zLnZlcmlmeUFUTikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIHZlcmlmeSBhc3N1bXB0aW9uc1xuXHRmb3IodmFyIGk9MDsgaTxhdG4uc3RhdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGF0bi5zdGF0ZXNbaV07XG4gICAgICAgIGlmIChzdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS5lcHNpbG9uT25seVRyYW5zaXRpb25zIHx8IHN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aCA8PSAxKTtcbiAgICAgICAgaWYgKHN0YXRlIGluc3RhbmNlb2YgUGx1c0Jsb2NrU3RhcnRTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS5sb29wQmFja1N0YXRlICE9PSBudWxsKTtcbiAgICAgICAgfSBlbHNlICBpZiAoc3RhdGUgaW5zdGFuY2VvZiBTdGFyTG9vcEVudHJ5U3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oc3RhdGUubG9vcEJhY2tTdGF0ZSAhPT0gbnVsbCk7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aCA9PT0gMik7XG4gICAgICAgICAgICBpZiAoc3RhdGUudHJhbnNpdGlvbnNbMF0udGFyZ2V0IGluc3RhbmNlb2YgU3RhckJsb2NrU3RhcnRTdGF0ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oc3RhdGUudHJhbnNpdGlvbnNbMV0udGFyZ2V0IGluc3RhbmNlb2YgTG9vcEVuZFN0YXRlKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKCFzdGF0ZS5ub25HcmVlZHkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS50cmFuc2l0aW9uc1swXS50YXJnZXQgaW5zdGFuY2VvZiBMb29wRW5kU3RhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLnRyYW5zaXRpb25zWzFdLnRhcmdldCBpbnN0YW5jZW9mIFN0YXJCbG9ja1N0YXJ0U3RhdGUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oc3RhdGUubm9uR3JlZWR5KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3coXCJJbGxlZ2FsU3RhdGVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgaW5zdGFuY2VvZiBTdGFyTG9vcGJhY2tTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGggPT09IDEpO1xuICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS50cmFuc2l0aW9uc1swXS50YXJnZXQgaW5zdGFuY2VvZiBTdGFyTG9vcEVudHJ5U3RhdGUpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlIGluc3RhbmNlb2YgTG9vcEVuZFN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLmxvb3BCYWNrU3RhdGUgIT09IG51bGwpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlIGluc3RhbmNlb2YgUnVsZVN0YXJ0U3RhdGUpIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oc3RhdGUuc3RvcFN0YXRlICE9PSBudWxsKTtcbiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZSBpbnN0YW5jZW9mIEJsb2NrU3RhcnRTdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS5lbmRTdGF0ZSAhPT0gbnVsbCk7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgaW5zdGFuY2VvZiBCbG9ja0VuZFN0YXRlKSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ29uZGl0aW9uKHN0YXRlLnN0YXJ0U3RhdGUgIT09IG51bGwpO1xuICAgICAgICB9IGVsc2UgaWYgKHN0YXRlIGluc3RhbmNlb2YgRGVjaXNpb25TdGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5jaGVja0NvbmRpdGlvbihzdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGggPD0gMSB8fCBzdGF0ZS5kZWNpc2lvbiA+PSAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tDb25kaXRpb24oc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoIDw9IDEgfHwgKHN0YXRlIGluc3RhbmNlb2YgUnVsZVN0b3BTdGF0ZSkpO1xuICAgICAgICB9XG5cdH1cbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUuY2hlY2tDb25kaXRpb24gPSBmdW5jdGlvbihjb25kaXRpb24sIG1lc3NhZ2UpIHtcbiAgICBpZiAoIWNvbmRpdGlvbikge1xuICAgICAgICBpZiAobWVzc2FnZSA9PT0gdW5kZWZpbmVkIHx8IG1lc3NhZ2U9PT1udWxsKSB7XG4gICAgICAgICAgICBtZXNzYWdlID0gXCJJbGxlZ2FsU3RhdGVcIjtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyAobWVzc2FnZSk7XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5yZWFkSW50ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVt0aGlzLnBvcysrXTtcbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUucmVhZEludDMyID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGxvdyA9IHRoaXMucmVhZEludCgpO1xuICAgIHZhciBoaWdoID0gdGhpcy5yZWFkSW50KCk7XG4gICAgcmV0dXJuIGxvdyB8IChoaWdoIDw8IDE2KTtcbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUucmVhZExvbmcgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbG93ID0gdGhpcy5yZWFkSW50MzIoKTtcbiAgICB2YXIgaGlnaCA9IHRoaXMucmVhZEludDMyKCk7XG4gICAgcmV0dXJuIChsb3cgJiAweDAwMDAwMDAwRkZGRkZGRkYpIHwgKGhpZ2ggPDwgMzIpO1xufTtcblxuZnVuY3Rpb24gY3JlYXRlQnl0ZVRvSGV4KCkge1xuXHR2YXIgYnRoID0gW107XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcblx0XHRidGhbaV0gPSAoaSArIDB4MTAwKS50b1N0cmluZygxNikuc3Vic3RyKDEpLnRvVXBwZXJDYXNlKCk7XG5cdH1cblx0cmV0dXJuIGJ0aDtcbn1cblxudmFyIGJ5dGVUb0hleCA9IGNyZWF0ZUJ5dGVUb0hleCgpO1xuXG5BVE5EZXNlcmlhbGl6ZXIucHJvdG90eXBlLnJlYWRVVUlEID0gZnVuY3Rpb24oKSB7XG5cdHZhciBiYiA9IFtdO1xuXHRmb3IodmFyIGk9NztpPj0wO2ktLSkge1xuXHRcdHZhciBpbnQgPSB0aGlzLnJlYWRJbnQoKTtcblx0XHQvKiBqc2hpbnQgYml0d2lzZTogZmFsc2UgKi9cblx0XHRiYlsoMippKSsxXSA9IGludCAmIDB4RkY7XG5cdFx0YmJbMippXSA9IChpbnQgPj4gOCkgJiAweEZGO1xuXHR9XG4gICAgcmV0dXJuIGJ5dGVUb0hleFtiYlswXV0gKyBieXRlVG9IZXhbYmJbMV1dICtcbiAgICBieXRlVG9IZXhbYmJbMl1dICsgYnl0ZVRvSGV4W2JiWzNdXSArICctJyArXG4gICAgYnl0ZVRvSGV4W2JiWzRdXSArIGJ5dGVUb0hleFtiYls1XV0gKyAnLScgK1xuICAgIGJ5dGVUb0hleFtiYls2XV0gKyBieXRlVG9IZXhbYmJbN11dICsgJy0nICtcbiAgICBieXRlVG9IZXhbYmJbOF1dICsgYnl0ZVRvSGV4W2JiWzldXSArICctJyArXG4gICAgYnl0ZVRvSGV4W2JiWzEwXV0gKyBieXRlVG9IZXhbYmJbMTFdXSArXG4gICAgYnl0ZVRvSGV4W2JiWzEyXV0gKyBieXRlVG9IZXhbYmJbMTNdXSArXG4gICAgYnl0ZVRvSGV4W2JiWzE0XV0gKyBieXRlVG9IZXhbYmJbMTVdXTtcbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUuZWRnZUZhY3RvcnkgPSBmdW5jdGlvbihhdG4sIHR5cGUsIHNyYywgdHJnLCBhcmcxLCBhcmcyLCBhcmczLCBzZXRzKSB7XG4gICAgdmFyIHRhcmdldCA9IGF0bi5zdGF0ZXNbdHJnXTtcbiAgICBzd2l0Y2godHlwZSkge1xuICAgIGNhc2UgVHJhbnNpdGlvbi5FUFNJTE9OOlxuICAgICAgICByZXR1cm4gbmV3IEVwc2lsb25UcmFuc2l0aW9uKHRhcmdldCk7XG4gICAgY2FzZSBUcmFuc2l0aW9uLlJBTkdFOlxuICAgICAgICByZXR1cm4gYXJnMyAhPT0gMCA/IG5ldyBSYW5nZVRyYW5zaXRpb24odGFyZ2V0LCBUb2tlbi5FT0YsIGFyZzIpIDogbmV3IFJhbmdlVHJhbnNpdGlvbih0YXJnZXQsIGFyZzEsIGFyZzIpO1xuICAgIGNhc2UgVHJhbnNpdGlvbi5SVUxFOlxuICAgICAgICByZXR1cm4gbmV3IFJ1bGVUcmFuc2l0aW9uKGF0bi5zdGF0ZXNbYXJnMV0sIGFyZzIsIGFyZzMsIHRhcmdldCk7XG4gICAgY2FzZSBUcmFuc2l0aW9uLlBSRURJQ0FURTpcbiAgICAgICAgcmV0dXJuIG5ldyBQcmVkaWNhdGVUcmFuc2l0aW9uKHRhcmdldCwgYXJnMSwgYXJnMiwgYXJnMyAhPT0gMCk7XG4gICAgY2FzZSBUcmFuc2l0aW9uLlBSRUNFREVOQ0U6XG4gICAgICAgIHJldHVybiBuZXcgUHJlY2VkZW5jZVByZWRpY2F0ZVRyYW5zaXRpb24odGFyZ2V0LCBhcmcxKTtcbiAgICBjYXNlIFRyYW5zaXRpb24uQVRPTTpcbiAgICAgICAgcmV0dXJuIGFyZzMgIT09IDAgPyBuZXcgQXRvbVRyYW5zaXRpb24odGFyZ2V0LCBUb2tlbi5FT0YpIDogbmV3IEF0b21UcmFuc2l0aW9uKHRhcmdldCwgYXJnMSk7XG4gICAgY2FzZSBUcmFuc2l0aW9uLkFDVElPTjpcbiAgICAgICAgcmV0dXJuIG5ldyBBY3Rpb25UcmFuc2l0aW9uKHRhcmdldCwgYXJnMSwgYXJnMiwgYXJnMyAhPT0gMCk7XG4gICAgY2FzZSBUcmFuc2l0aW9uLlNFVDpcbiAgICAgICAgcmV0dXJuIG5ldyBTZXRUcmFuc2l0aW9uKHRhcmdldCwgc2V0c1thcmcxXSk7XG4gICAgY2FzZSBUcmFuc2l0aW9uLk5PVF9TRVQ6XG4gICAgICAgIHJldHVybiBuZXcgTm90U2V0VHJhbnNpdGlvbih0YXJnZXQsIHNldHNbYXJnMV0pO1xuICAgIGNhc2UgVHJhbnNpdGlvbi5XSUxEQ0FSRDpcbiAgICAgICAgcmV0dXJuIG5ldyBXaWxkY2FyZFRyYW5zaXRpb24odGFyZ2V0KTtcbiAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBcIlRoZSBzcGVjaWZpZWQgdHJhbnNpdGlvbiB0eXBlOiBcIiArIHR5cGUgKyBcIiBpcyBub3QgdmFsaWQuXCI7XG4gICAgfVxufTtcblxuQVRORGVzZXJpYWxpemVyLnByb3RvdHlwZS5zdGF0ZUZhY3RvcnkgPSBmdW5jdGlvbih0eXBlLCBydWxlSW5kZXgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZUZhY3RvcmllcyA9PT0gbnVsbCkge1xuICAgICAgICB2YXIgc2YgPSBbXTtcbiAgICAgICAgc2ZbQVROU3RhdGUuSU5WQUxJRF9UWVBFXSA9IG51bGw7XG4gICAgICAgIHNmW0FUTlN0YXRlLkJBU0lDXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IEJhc2ljU3RhdGUoKTsgfTtcbiAgICAgICAgc2ZbQVROU3RhdGUuUlVMRV9TVEFSVF0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIG5ldyBSdWxlU3RhcnRTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5CTE9DS19TVEFSVF0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIG5ldyBCYXNpY0Jsb2NrU3RhcnRTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5QTFVTX0JMT0NLX1NUQVJUXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IFBsdXNCbG9ja1N0YXJ0U3RhdGUoKTsgfTtcbiAgICAgICAgc2ZbQVROU3RhdGUuU1RBUl9CTE9DS19TVEFSVF0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIG5ldyBTdGFyQmxvY2tTdGFydFN0YXRlKCk7IH07XG4gICAgICAgIHNmW0FUTlN0YXRlLlRPS0VOX1NUQVJUXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IFRva2Vuc1N0YXJ0U3RhdGUoKTsgfTtcbiAgICAgICAgc2ZbQVROU3RhdGUuUlVMRV9TVE9QXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IFJ1bGVTdG9wU3RhdGUoKTsgfTtcbiAgICAgICAgc2ZbQVROU3RhdGUuQkxPQ0tfRU5EXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IEJsb2NrRW5kU3RhdGUoKTsgfTtcbiAgICAgICAgc2ZbQVROU3RhdGUuU1RBUl9MT09QX0JBQ0tdID0gZnVuY3Rpb24oKSB7IHJldHVybiBuZXcgU3Rhckxvb3BiYWNrU3RhdGUoKTsgfTtcbiAgICAgICAgc2ZbQVROU3RhdGUuU1RBUl9MT09QX0VOVFJZXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gbmV3IFN0YXJMb29wRW50cnlTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5QTFVTX0xPT1BfQkFDS10gPSBmdW5jdGlvbigpIHsgcmV0dXJuIG5ldyBQbHVzTG9vcGJhY2tTdGF0ZSgpOyB9O1xuICAgICAgICBzZltBVE5TdGF0ZS5MT09QX0VORF0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIG5ldyBMb29wRW5kU3RhdGUoKTsgfTtcbiAgICAgICAgdGhpcy5zdGF0ZUZhY3RvcmllcyA9IHNmO1xuICAgIH1cbiAgICBpZiAodHlwZT50aGlzLnN0YXRlRmFjdG9yaWVzLmxlbmd0aCB8fCB0aGlzLnN0YXRlRmFjdG9yaWVzW3R5cGVdID09PSBudWxsKSB7XG4gICAgICAgIHRocm93KFwiVGhlIHNwZWNpZmllZCBzdGF0ZSB0eXBlIFwiICsgdHlwZSArIFwiIGlzIG5vdCB2YWxpZC5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHMgPSB0aGlzLnN0YXRlRmFjdG9yaWVzW3R5cGVdKCk7XG4gICAgICAgIGlmIChzIT09bnVsbCkge1xuICAgICAgICAgICAgcy5ydWxlSW5kZXggPSBydWxlSW5kZXg7XG4gICAgICAgICAgICByZXR1cm4gcztcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbkFUTkRlc2VyaWFsaXplci5wcm90b3R5cGUubGV4ZXJBY3Rpb25GYWN0b3J5ID0gZnVuY3Rpb24odHlwZSwgZGF0YTEsIGRhdGEyKSB7XG4gICAgaWYgKHRoaXMuYWN0aW9uRmFjdG9yaWVzID09PSBudWxsKSB7XG4gICAgICAgIHZhciBhZiA9IFtdO1xuICAgICAgICBhZltMZXhlckFjdGlvblR5cGUuQ0hBTk5FTF0gPSBmdW5jdGlvbihkYXRhMSwgZGF0YTIpIHsgcmV0dXJuIG5ldyBMZXhlckNoYW5uZWxBY3Rpb24oZGF0YTEpOyB9O1xuICAgICAgICBhZltMZXhlckFjdGlvblR5cGUuQ1VTVE9NXSA9IGZ1bmN0aW9uKGRhdGExLCBkYXRhMikgeyByZXR1cm4gbmV3IExleGVyQ3VzdG9tQWN0aW9uKGRhdGExLCBkYXRhMik7IH07XG4gICAgICAgIGFmW0xleGVyQWN0aW9uVHlwZS5NT0RFXSA9IGZ1bmN0aW9uKGRhdGExLCBkYXRhMikgeyByZXR1cm4gbmV3IExleGVyTW9kZUFjdGlvbihkYXRhMSk7IH07XG4gICAgICAgIGFmW0xleGVyQWN0aW9uVHlwZS5NT1JFXSA9IGZ1bmN0aW9uKGRhdGExLCBkYXRhMikgeyByZXR1cm4gTGV4ZXJNb3JlQWN0aW9uLklOU1RBTkNFOyB9O1xuICAgICAgICBhZltMZXhlckFjdGlvblR5cGUuUE9QX01PREVdID0gZnVuY3Rpb24oZGF0YTEsIGRhdGEyKSB7IHJldHVybiBMZXhlclBvcE1vZGVBY3Rpb24uSU5TVEFOQ0U7IH07XG4gICAgICAgIGFmW0xleGVyQWN0aW9uVHlwZS5QVVNIX01PREVdID0gZnVuY3Rpb24oZGF0YTEsIGRhdGEyKSB7IHJldHVybiBuZXcgTGV4ZXJQdXNoTW9kZUFjdGlvbihkYXRhMSk7IH07XG4gICAgICAgIGFmW0xleGVyQWN0aW9uVHlwZS5TS0lQXSA9IGZ1bmN0aW9uKGRhdGExLCBkYXRhMikgeyByZXR1cm4gTGV4ZXJTa2lwQWN0aW9uLklOU1RBTkNFOyB9O1xuICAgICAgICBhZltMZXhlckFjdGlvblR5cGUuVFlQRV0gPSBmdW5jdGlvbihkYXRhMSwgZGF0YTIpIHsgcmV0dXJuIG5ldyBMZXhlclR5cGVBY3Rpb24oZGF0YTEpOyB9O1xuICAgICAgICB0aGlzLmFjdGlvbkZhY3RvcmllcyA9IGFmO1xuICAgIH1cbiAgICBpZiAodHlwZT50aGlzLmFjdGlvbkZhY3Rvcmllcy5sZW5ndGggfHwgdGhpcy5hY3Rpb25GYWN0b3JpZXNbdHlwZV0gPT09IG51bGwpIHtcbiAgICAgICAgdGhyb3coXCJUaGUgc3BlY2lmaWVkIGxleGVyIGFjdGlvbiB0eXBlIFwiICsgdHlwZSArIFwiIGlzIG5vdCB2YWxpZC5cIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aW9uRmFjdG9yaWVzW3R5cGVdKGRhdGExLCBkYXRhMik7XG4gICAgfVxufTtcblxuXG5leHBvcnRzLkFUTkRlc2VyaWFsaXplciA9IEFUTkRlc2VyaWFsaXplcjsiLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy8vXG5cbnZhciBERkFTdGF0ZSA9IHJlcXVpcmUoJy4vLi4vZGZhL0RGQVN0YXRlJykuREZBU3RhdGU7XG52YXIgQVROQ29uZmlnU2V0ID0gcmVxdWlyZSgnLi9BVE5Db25maWdTZXQnKS5BVE5Db25maWdTZXQ7XG52YXIgZ2V0Q2FjaGVkUHJlZGljdGlvbkNvbnRleHQgPSByZXF1aXJlKCcuLy4uL1ByZWRpY3Rpb25Db250ZXh0JykuZ2V0Q2FjaGVkUHJlZGljdGlvbkNvbnRleHQ7XG5cbmZ1bmN0aW9uIEFUTlNpbXVsYXRvcihhdG4sIHNoYXJlZENvbnRleHRDYWNoZSkge1xuXG4gICAgLy8gVGhlIGNvbnRleHQgY2FjaGUgbWFwcyBhbGwgUHJlZGljdGlvbkNvbnRleHQgb2JqZWN0cyB0aGF0IGFyZSA9PVxuICAgIC8vICB0byBhIHNpbmdsZSBjYWNoZWQgY29weS4gVGhpcyBjYWNoZSBpcyBzaGFyZWQgYWNyb3NzIGFsbCBjb250ZXh0c1xuICAgIC8vICBpbiBhbGwgQVROQ29uZmlncyBpbiBhbGwgREZBIHN0YXRlcy4gIFdlIHJlYnVpbGQgZWFjaCBBVE5Db25maWdTZXRcbiAgICAvLyAgdG8gdXNlIG9ubHkgY2FjaGVkIG5vZGVzL2dyYXBocyBpbiBhZGRERkFTdGF0ZSgpLiBXZSBkb24ndCB3YW50IHRvXG4gICAgLy8gIGZpbGwgdGhpcyBkdXJpbmcgY2xvc3VyZSgpIHNpbmNlIHRoZXJlIGFyZSBsb3RzIG9mIGNvbnRleHRzIHRoYXRcbiAgICAvLyAgcG9wIHVwIGJ1dCBhcmUgbm90IHVzZWQgZXZlciBhZ2Fpbi4gSXQgYWxzbyBncmVhdGx5IHNsb3dzIGRvd24gY2xvc3VyZSgpLlxuICAgIC8vXG4gICAgLy8gIDxwPlRoaXMgY2FjaGUgbWFrZXMgYSBodWdlIGRpZmZlcmVuY2UgaW4gbWVtb3J5IGFuZCBhIGxpdHRsZSBiaXQgaW4gc3BlZWQuXG4gICAgLy8gIEZvciB0aGUgSmF2YSBncmFtbWFyIG9uIGphdmEuKiwgaXQgZHJvcHBlZCB0aGUgbWVtb3J5IHJlcXVpcmVtZW50c1xuICAgIC8vICBhdCB0aGUgZW5kIGZyb20gMjVNIHRvIDE2TS4gV2UgZG9uJ3Qgc3RvcmUgYW55IG9mIHRoZSBmdWxsIGNvbnRleHRcbiAgICAvLyAgZ3JhcGhzIGluIHRoZSBERkEgYmVjYXVzZSB0aGV5IGFyZSBsaW1pdGVkIHRvIGxvY2FsIGNvbnRleHQgb25seSxcbiAgICAvLyAgYnV0IGFwcGFyZW50bHkgdGhlcmUncyBhIGxvdCBvZiByZXBldGl0aW9uIHRoZXJlIGFzIHdlbGwuIFdlIG9wdGltaXplXG4gICAgLy8gIHRoZSBjb25maWcgY29udGV4dHMgYmVmb3JlIHN0b3JpbmcgdGhlIGNvbmZpZyBzZXQgaW4gdGhlIERGQSBzdGF0ZXNcbiAgICAvLyAgYnkgbGl0ZXJhbGx5IHJlYnVpbGRpbmcgdGhlbSB3aXRoIGNhY2hlZCBzdWJncmFwaHMgb25seS48L3A+XG4gICAgLy9cbiAgICAvLyAgPHA+SSB0cmllZCBhIGNhY2hlIGZvciB1c2UgZHVyaW5nIGNsb3N1cmUgb3BlcmF0aW9ucywgdGhhdCB3YXNcbiAgICAvLyAgd2hhY2tlZCBhZnRlciBlYWNoIGFkYXB0aXZlUHJlZGljdCgpLiBJdCBjb3N0IGEgbGl0dGxlIGJpdFxuICAgIC8vICBtb3JlIHRpbWUgSSB0aGluayBhbmQgZG9lc24ndCBzYXZlIG9uIHRoZSBvdmVyYWxsIGZvb3RwcmludFxuICAgIC8vICBzbyBpdCdzIG5vdCB3b3J0aCB0aGUgY29tcGxleGl0eS48L3A+XG4gICAgLy8vXG4gICAgdGhpcy5hdG4gPSBhdG47XG4gICAgdGhpcy5zaGFyZWRDb250ZXh0Q2FjaGUgPSBzaGFyZWRDb250ZXh0Q2FjaGU7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbi8vIE11c3QgZGlzdGluZ3Vpc2ggYmV0d2VlbiBtaXNzaW5nIGVkZ2UgYW5kIGVkZ2Ugd2Uga25vdyBsZWFkcyBub3doZXJlLy8vXG5BVE5TaW11bGF0b3IuRVJST1IgPSBuZXcgREZBU3RhdGUoMHg3RkZGRkZGRiwgbmV3IEFUTkNvbmZpZ1NldCgpKTtcblxuXG5BVE5TaW11bGF0b3IucHJvdG90eXBlLmdldENhY2hlZENvbnRleHQgPSBmdW5jdGlvbihjb250ZXh0KSB7XG4gICAgaWYgKHRoaXMuc2hhcmVkQ29udGV4dENhY2hlID09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRleHQ7XG4gICAgfVxuICAgIHZhciB2aXNpdGVkID0ge307XG4gICAgcmV0dXJuIGdldENhY2hlZFByZWRpY3Rpb25Db250ZXh0KGNvbnRleHQsIHRoaXMuc2hhcmVkQ29udGV4dENhY2hlLCB2aXNpdGVkKTtcbn07XG5cbmV4cG9ydHMuQVROU2ltdWxhdG9yID0gQVROU2ltdWxhdG9yO1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vXG5cbi8vIFRoZSBmb2xsb3dpbmcgaW1hZ2VzIHNob3cgdGhlIHJlbGF0aW9uIG9mIHN0YXRlcyBhbmRcbi8vIHtAbGluayBBVE5TdGF0ZS8vdHJhbnNpdGlvbnN9IGZvciB2YXJpb3VzIGdyYW1tYXIgY29uc3RydWN0cy5cbi8vXG4vLyA8dWw+XG4vL1xuLy8gPGxpPlNvbGlkIGVkZ2VzIG1hcmtlZCB3aXRoIGFuICYvLzA5NDk7IGluZGljYXRlIGEgcmVxdWlyZWRcbi8vIHtAbGluayBFcHNpbG9uVHJhbnNpdGlvbn0uPC9saT5cbi8vXG4vLyA8bGk+RGFzaGVkIGVkZ2VzIGluZGljYXRlIGxvY2F0aW9ucyB3aGVyZSBhbnkgdHJhbnNpdGlvbiBkZXJpdmVkIGZyb21cbi8vIHtAbGluayBUcmFuc2l0aW9ufSBtaWdodCBhcHBlYXIuPC9saT5cbi8vXG4vLyA8bGk+RGFzaGVkIG5vZGVzIGFyZSBwbGFjZSBob2xkZXJzIGZvciBlaXRoZXIgYSBzZXF1ZW5jZSBvZiBsaW5rZWRcbi8vIHtAbGluayBCYXNpY1N0YXRlfSBzdGF0ZXMgb3IgdGhlIGluY2x1c2lvbiBvZiBhIGJsb2NrIHJlcHJlc2VudGluZyBhIG5lc3RlZFxuLy8gY29uc3RydWN0IGluIG9uZSBvZiB0aGUgZm9ybXMgYmVsb3cuPC9saT5cbi8vXG4vLyA8bGk+Tm9kZXMgc2hvd2luZyBtdWx0aXBsZSBvdXRnb2luZyBhbHRlcm5hdGl2ZXMgd2l0aCBhIHtAY29kZSAuLi59IHN1cHBvcnRcbi8vIGFueSBudW1iZXIgb2YgYWx0ZXJuYXRpdmVzIChvbmUgb3IgbW9yZSkuIE5vZGVzIHdpdGhvdXQgdGhlIHtAY29kZSAuLi59IG9ubHlcbi8vIHN1cHBvcnQgdGhlIGV4YWN0IG51bWJlciBvZiBhbHRlcm5hdGl2ZXMgc2hvd24gaW4gdGhlIGRpYWdyYW0uPC9saT5cbi8vXG4vLyA8L3VsPlxuLy9cbi8vIDxoMj5CYXNpYyBCbG9ja3M8L2gyPlxuLy9cbi8vIDxoMz5SdWxlPC9oMz5cbi8vXG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL1J1bGUuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+XG4vL1xuLy8gPGgzPkJsb2NrIG9mIDEgb3IgbW9yZSBhbHRlcm5hdGl2ZXM8L2gzPlxuLy9cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvQmxvY2suc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+XG4vL1xuLy8gPGgyPkdyZWVkeSBMb29wczwvaDI+XG4vL1xuLy8gPGgzPkdyZWVkeSBDbG9zdXJlOiB7QGNvZGUgKC4uLikqfTwvaDM+XG4vL1xuLy8gPGVtYmVkIHNyYz1cImltYWdlcy9DbG9zdXJlR3JlZWR5LnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPlxuLy9cbi8vIDxoMz5HcmVlZHkgUG9zaXRpdmUgQ2xvc3VyZToge0Bjb2RlICguLi4pK308L2gzPlxuLy9cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvUG9zaXRpdmVDbG9zdXJlR3JlZWR5LnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPlxuLy9cbi8vIDxoMz5HcmVlZHkgT3B0aW9uYWw6IHtAY29kZSAoLi4uKT99PC9oMz5cbi8vXG4vLyA8ZW1iZWQgc3JjPVwiaW1hZ2VzL09wdGlvbmFsR3JlZWR5LnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPlxuLy9cbi8vIDxoMj5Ob24tR3JlZWR5IExvb3BzPC9oMj5cbi8vXG4vLyA8aDM+Tm9uLUdyZWVkeSBDbG9zdXJlOiB7QGNvZGUgKC4uLikqP308L2gzPlxuLy9cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvQ2xvc3VyZU5vbkdyZWVkeS5zdmdcIiB0eXBlPVwiaW1hZ2Uvc3ZnK3htbFwiLz5cbi8vXG4vLyA8aDM+Tm9uLUdyZWVkeSBQb3NpdGl2ZSBDbG9zdXJlOiB7QGNvZGUgKC4uLikrP308L2gzPlxuLy9cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvUG9zaXRpdmVDbG9zdXJlTm9uR3JlZWR5LnN2Z1wiIHR5cGU9XCJpbWFnZS9zdmcreG1sXCIvPlxuLy9cbi8vIDxoMz5Ob24tR3JlZWR5IE9wdGlvbmFsOiB7QGNvZGUgKC4uLik/P308L2gzPlxuLy9cbi8vIDxlbWJlZCBzcmM9XCJpbWFnZXMvT3B0aW9uYWxOb25HcmVlZHkuc3ZnXCIgdHlwZT1cImltYWdlL3N2Zyt4bWxcIi8+XG4vL1xuXG52YXIgSU5JVElBTF9OVU1fVFJBTlNJVElPTlMgPSA0O1xuXG5mdW5jdGlvbiBBVE5TdGF0ZSgpIHtcbiAgICAvLyBXaGljaCBBVE4gYXJlIHdlIGluP1xuICAgIHRoaXMuYXRuID0gbnVsbDtcbiAgICB0aGlzLnN0YXRlTnVtYmVyID0gQVROU3RhdGUuSU5WQUxJRF9TVEFURV9OVU1CRVI7XG4gICAgdGhpcy5zdGF0ZVR5cGUgPSBudWxsO1xuICAgIHRoaXMucnVsZUluZGV4ID0gMDsgLy8gYXQgcnVudGltZSwgd2UgZG9uJ3QgaGF2ZSBSdWxlIG9iamVjdHNcbiAgICB0aGlzLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnMgPSBmYWxzZTtcbiAgICAvLyBUcmFjayB0aGUgdHJhbnNpdGlvbnMgZW1hbmF0aW5nIGZyb20gdGhpcyBBVE4gc3RhdGUuXG4gICAgdGhpcy50cmFuc2l0aW9ucyA9IFtdO1xuICAgIC8vIFVzZWQgdG8gY2FjaGUgbG9va2FoZWFkIGR1cmluZyBwYXJzaW5nLCBub3QgdXNlZCBkdXJpbmcgY29uc3RydWN0aW9uXG4gICAgdGhpcy5uZXh0VG9rZW5XaXRoaW5SdWxlID0gbnVsbDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuLy8gY29uc3RhbnRzIGZvciBzZXJpYWxpemF0aW9uXG5BVE5TdGF0ZS5JTlZBTElEX1RZUEUgPSAwO1xuQVROU3RhdGUuQkFTSUMgPSAxO1xuQVROU3RhdGUuUlVMRV9TVEFSVCA9IDI7XG5BVE5TdGF0ZS5CTE9DS19TVEFSVCA9IDM7XG5BVE5TdGF0ZS5QTFVTX0JMT0NLX1NUQVJUID0gNDtcbkFUTlN0YXRlLlNUQVJfQkxPQ0tfU1RBUlQgPSA1O1xuQVROU3RhdGUuVE9LRU5fU1RBUlQgPSA2O1xuQVROU3RhdGUuUlVMRV9TVE9QID0gNztcbkFUTlN0YXRlLkJMT0NLX0VORCA9IDg7XG5BVE5TdGF0ZS5TVEFSX0xPT1BfQkFDSyA9IDk7XG5BVE5TdGF0ZS5TVEFSX0xPT1BfRU5UUlkgPSAxMDtcbkFUTlN0YXRlLlBMVVNfTE9PUF9CQUNLID0gMTE7XG5BVE5TdGF0ZS5MT09QX0VORCA9IDEyO1xuXG5BVE5TdGF0ZS5zZXJpYWxpemF0aW9uTmFtZXMgPSBbXG4gICAgICAgICAgICBcIklOVkFMSURcIixcbiAgICAgICAgICAgIFwiQkFTSUNcIixcbiAgICAgICAgICAgIFwiUlVMRV9TVEFSVFwiLFxuICAgICAgICAgICAgXCJCTE9DS19TVEFSVFwiLFxuICAgICAgICAgICAgXCJQTFVTX0JMT0NLX1NUQVJUXCIsXG4gICAgICAgICAgICBcIlNUQVJfQkxPQ0tfU1RBUlRcIixcbiAgICAgICAgICAgIFwiVE9LRU5fU1RBUlRcIixcbiAgICAgICAgICAgIFwiUlVMRV9TVE9QXCIsXG4gICAgICAgICAgICBcIkJMT0NLX0VORFwiLFxuICAgICAgICAgICAgXCJTVEFSX0xPT1BfQkFDS1wiLFxuICAgICAgICAgICAgXCJTVEFSX0xPT1BfRU5UUllcIixcbiAgICAgICAgICAgIFwiUExVU19MT09QX0JBQ0tcIixcbiAgICAgICAgICAgIFwiTE9PUF9FTkRcIiBdO1xuXG5BVE5TdGF0ZS5JTlZBTElEX1NUQVRFX05VTUJFUiA9IC0xO1xuXG5BVE5TdGF0ZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMuc3RhdGVOdW1iZXI7XG59O1xuXG5BVE5TdGF0ZS5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBpZiAob3RoZXIgaW5zdGFuY2VvZiBBVE5TdGF0ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZU51bWJlcj09PW90aGVyLnN0YXRlTnVtYmVyO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59O1xuXG5BVE5TdGF0ZS5wcm90b3R5cGUuaXNOb25HcmVlZHlFeGl0U3RhdGUgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5cbkFUTlN0YXRlLnByb3RvdHlwZS5hZGRUcmFuc2l0aW9uID0gZnVuY3Rpb24odHJhbnMsIGluZGV4KSB7XG5cdGlmKGluZGV4PT09dW5kZWZpbmVkKSB7XG5cdFx0aW5kZXggPSAtMTtcblx0fVxuICAgIGlmICh0aGlzLnRyYW5zaXRpb25zLmxlbmd0aD09PTApIHtcbiAgICAgICAgdGhpcy5lcHNpbG9uT25seVRyYW5zaXRpb25zID0gdHJhbnMuaXNFcHNpbG9uO1xuICAgIH0gZWxzZSBpZih0aGlzLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnMgIT09IHRyYW5zLmlzRXBzaWxvbikge1xuICAgICAgICB0aGlzLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnMgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGluZGV4PT09LTEpIHtcbiAgICAgICAgdGhpcy50cmFuc2l0aW9ucy5wdXNoKHRyYW5zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRyYW5zaXRpb25zLnNwbGljZShpbmRleCwgMSwgdHJhbnMpO1xuICAgIH1cbn07XG5cbmZ1bmN0aW9uIEJhc2ljU3RhdGUoKSB7XG5cdEFUTlN0YXRlLmNhbGwodGhpcyk7XG4gICAgdGhpcy5zdGF0ZVR5cGUgPSBBVE5TdGF0ZS5CQVNJQztcbiAgICByZXR1cm4gdGhpcztcbn1cblxuQmFzaWNTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFUTlN0YXRlLnByb3RvdHlwZSk7XG5CYXNpY1N0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJhc2ljU3RhdGU7XG5cblxuZnVuY3Rpb24gRGVjaXNpb25TdGF0ZSgpIHtcblx0QVROU3RhdGUuY2FsbCh0aGlzKTtcbiAgICB0aGlzLmRlY2lzaW9uID0gLTE7XG4gICAgdGhpcy5ub25HcmVlZHkgPSBmYWxzZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuRGVjaXNpb25TdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFUTlN0YXRlLnByb3RvdHlwZSk7XG5EZWNpc2lvblN0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERlY2lzaW9uU3RhdGU7XG5cblxuLy8gIFRoZSBzdGFydCBvZiBhIHJlZ3VsYXIge0Bjb2RlICguLi4pfSBibG9jay5cbmZ1bmN0aW9uIEJsb2NrU3RhcnRTdGF0ZSgpIHtcblx0RGVjaXNpb25TdGF0ZS5jYWxsKHRoaXMpO1xuXHR0aGlzLmVuZFN0YXRlID0gbnVsbDtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkJsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKERlY2lzaW9uU3RhdGUucHJvdG90eXBlKTtcbkJsb2NrU3RhcnRTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBCbG9ja1N0YXJ0U3RhdGU7XG5cblxuZnVuY3Rpb24gQmFzaWNCbG9ja1N0YXJ0U3RhdGUoKSB7XG5cdEJsb2NrU3RhcnRTdGF0ZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLkJMT0NLX1NUQVJUO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuQmFzaWNCbG9ja1N0YXJ0U3RhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCbG9ja1N0YXJ0U3RhdGUucHJvdG90eXBlKTtcbkJhc2ljQmxvY2tTdGFydFN0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJhc2ljQmxvY2tTdGFydFN0YXRlO1xuXG5cbi8vIFRlcm1pbmFsIG5vZGUgb2YgYSBzaW1wbGUge0Bjb2RlIChhfGJ8Yyl9IGJsb2NrLlxuZnVuY3Rpb24gQmxvY2tFbmRTdGF0ZSgpIHtcblx0QVROU3RhdGUuY2FsbCh0aGlzKTtcblx0dGhpcy5zdGF0ZVR5cGUgPSBBVE5TdGF0ZS5CTE9DS19FTkQ7XG4gICAgdGhpcy5zdGFydFN0YXRlID0gbnVsbDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuQmxvY2tFbmRTdGF0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFUTlN0YXRlLnByb3RvdHlwZSk7XG5CbG9ja0VuZFN0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEJsb2NrRW5kU3RhdGU7XG5cblxuLy8gVGhlIGxhc3Qgbm9kZSBpbiB0aGUgQVROIGZvciBhIHJ1bGUsIHVubGVzcyB0aGF0IHJ1bGUgaXMgdGhlIHN0YXJ0IHN5bWJvbC5cbi8vICBJbiB0aGF0IGNhc2UsIHRoZXJlIGlzIG9uZSB0cmFuc2l0aW9uIHRvIEVPRi4gTGF0ZXIsIHdlIG1pZ2h0IGVuY29kZVxuLy8gIHJlZmVyZW5jZXMgdG8gYWxsIGNhbGxzIHRvIHRoaXMgcnVsZSB0byBjb21wdXRlIEZPTExPVyBzZXRzIGZvclxuLy8gIGVycm9yIGhhbmRsaW5nLlxuLy9cbmZ1bmN0aW9uIFJ1bGVTdG9wU3RhdGUoKSB7XG5cdEFUTlN0YXRlLmNhbGwodGhpcyk7XG4gICAgdGhpcy5zdGF0ZVR5cGUgPSBBVE5TdGF0ZS5SVUxFX1NUT1A7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblJ1bGVTdG9wU3RhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBVE5TdGF0ZS5wcm90b3R5cGUpO1xuUnVsZVN0b3BTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSdWxlU3RvcFN0YXRlO1xuXG5mdW5jdGlvbiBSdWxlU3RhcnRTdGF0ZSgpIHtcblx0QVROU3RhdGUuY2FsbCh0aGlzKTtcblx0dGhpcy5zdGF0ZVR5cGUgPSBBVE5TdGF0ZS5SVUxFX1NUQVJUO1xuXHR0aGlzLnN0b3BTdGF0ZSA9IG51bGw7XG5cdHRoaXMuaXNQcmVjZWRlbmNlUnVsZSA9IGZhbHNlO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuUnVsZVN0YXJ0U3RhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBVE5TdGF0ZS5wcm90b3R5cGUpO1xuUnVsZVN0YXJ0U3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUnVsZVN0YXJ0U3RhdGU7XG5cbi8vIERlY2lzaW9uIHN0YXRlIGZvciB7QGNvZGUgQSt9IGFuZCB7QGNvZGUgKEF8QikrfS4gIEl0IGhhcyB0d28gdHJhbnNpdGlvbnM6XG4vLyAgb25lIHRvIHRoZSBsb29wIGJhY2sgdG8gc3RhcnQgb2YgdGhlIGJsb2NrIGFuZCBvbmUgdG8gZXhpdC5cbi8vXG5mdW5jdGlvbiBQbHVzTG9vcGJhY2tTdGF0ZSgpIHtcblx0RGVjaXNpb25TdGF0ZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLlBMVVNfTE9PUF9CQUNLO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuUGx1c0xvb3BiYWNrU3RhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEZWNpc2lvblN0YXRlLnByb3RvdHlwZSk7XG5QbHVzTG9vcGJhY2tTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQbHVzTG9vcGJhY2tTdGF0ZTtcblxuXG4vLyBTdGFydCBvZiB7QGNvZGUgKEF8QnwuLi4pK30gbG9vcC4gVGVjaG5pY2FsbHkgYSBkZWNpc2lvbiBzdGF0ZSwgYnV0XG4vLyAgd2UgZG9uJ3QgdXNlIGZvciBjb2RlIGdlbmVyYXRpb247IHNvbWVib2R5IG1pZ2h0IG5lZWQgaXQsIHNvIEknbSBkZWZpbmluZ1xuLy8gIGl0IGZvciBjb21wbGV0ZW5lc3MuIEluIHJlYWxpdHksIHRoZSB7QGxpbmsgUGx1c0xvb3BiYWNrU3RhdGV9IG5vZGUgaXMgdGhlXG4vLyAgcmVhbCBkZWNpc2lvbi1tYWtpbmcgbm90ZSBmb3Ige0Bjb2RlIEErfS5cbi8vXG5mdW5jdGlvbiBQbHVzQmxvY2tTdGFydFN0YXRlKCkge1xuXHRCbG9ja1N0YXJ0U3RhdGUuY2FsbCh0aGlzKTtcblx0dGhpcy5zdGF0ZVR5cGUgPSBBVE5TdGF0ZS5QTFVTX0JMT0NLX1NUQVJUO1xuICAgIHRoaXMubG9vcEJhY2tTdGF0ZSA9IG51bGw7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblBsdXNCbG9ja1N0YXJ0U3RhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCbG9ja1N0YXJ0U3RhdGUucHJvdG90eXBlKTtcblBsdXNCbG9ja1N0YXJ0U3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGx1c0Jsb2NrU3RhcnRTdGF0ZTtcblxuLy8gVGhlIGJsb2NrIHRoYXQgYmVnaW5zIGEgY2xvc3VyZSBsb29wLlxuZnVuY3Rpb24gU3RhckJsb2NrU3RhcnRTdGF0ZSgpIHtcblx0QmxvY2tTdGFydFN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuc3RhdGVUeXBlID0gQVROU3RhdGUuU1RBUl9CTE9DS19TVEFSVDtcblx0cmV0dXJuIHRoaXM7XG59XG5cblN0YXJCbG9ja1N0YXJ0U3RhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShCbG9ja1N0YXJ0U3RhdGUucHJvdG90eXBlKTtcblN0YXJCbG9ja1N0YXJ0U3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3RhckJsb2NrU3RhcnRTdGF0ZTtcblxuXG5mdW5jdGlvbiBTdGFyTG9vcGJhY2tTdGF0ZSgpIHtcblx0QVROU3RhdGUuY2FsbCh0aGlzKTtcblx0dGhpcy5zdGF0ZVR5cGUgPSBBVE5TdGF0ZS5TVEFSX0xPT1BfQkFDSztcblx0cmV0dXJuIHRoaXM7XG59XG5cblN0YXJMb29wYmFja1N0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQVROU3RhdGUucHJvdG90eXBlKTtcblN0YXJMb29wYmFja1N0YXRlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN0YXJMb29wYmFja1N0YXRlO1xuXG5cbmZ1bmN0aW9uIFN0YXJMb29wRW50cnlTdGF0ZSgpIHtcblx0RGVjaXNpb25TdGF0ZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLlNUQVJfTE9PUF9FTlRSWTtcbiAgICB0aGlzLmxvb3BCYWNrU3RhdGUgPSBudWxsO1xuICAgIC8vIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgc3RhdGUgY2FuIGJlbmVmaXQgZnJvbSBhIHByZWNlZGVuY2UgREZBIGR1cmluZyBTTEwgZGVjaXNpb24gbWFraW5nLlxuICAgIHRoaXMuaXNQcmVjZWRlbmNlRGVjaXNpb24gPSBudWxsO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5TdGFyTG9vcEVudHJ5U3RhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEZWNpc2lvblN0YXRlLnByb3RvdHlwZSk7XG5TdGFyTG9vcEVudHJ5U3RhdGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3Rhckxvb3BFbnRyeVN0YXRlO1xuXG5cbi8vIE1hcmsgdGhlIGVuZCBvZiBhICogb3IgKyBsb29wLlxuZnVuY3Rpb24gTG9vcEVuZFN0YXRlKCkge1xuXHRBVE5TdGF0ZS5jYWxsKHRoaXMpO1xuXHR0aGlzLnN0YXRlVHlwZSA9IEFUTlN0YXRlLkxPT1BfRU5EO1xuXHR0aGlzLmxvb3BCYWNrU3RhdGUgPSBudWxsO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuTG9vcEVuZFN0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQVROU3RhdGUucHJvdG90eXBlKTtcbkxvb3BFbmRTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMb29wRW5kU3RhdGU7XG5cblxuLy8gVGhlIFRva2VucyBydWxlIHN0YXJ0IHN0YXRlIGxpbmtpbmcgdG8gZWFjaCBsZXhlciBydWxlIHN0YXJ0IHN0YXRlICovXG5mdW5jdGlvbiBUb2tlbnNTdGFydFN0YXRlKCkge1xuXHREZWNpc2lvblN0YXRlLmNhbGwodGhpcyk7XG5cdHRoaXMuc3RhdGVUeXBlID0gQVROU3RhdGUuVE9LRU5fU1RBUlQ7XG5cdHJldHVybiB0aGlzO1xufVxuXG5Ub2tlbnNTdGFydFN0YXRlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRGVjaXNpb25TdGF0ZS5wcm90b3R5cGUpO1xuVG9rZW5zU3RhcnRTdGF0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBUb2tlbnNTdGFydFN0YXRlO1xuXG5leHBvcnRzLkFUTlN0YXRlID0gQVROU3RhdGU7XG5leHBvcnRzLkJhc2ljU3RhdGUgPSBCYXNpY1N0YXRlO1xuZXhwb3J0cy5EZWNpc2lvblN0YXRlID0gRGVjaXNpb25TdGF0ZTtcbmV4cG9ydHMuQmxvY2tTdGFydFN0YXRlID0gQmxvY2tTdGFydFN0YXRlO1xuZXhwb3J0cy5CbG9ja0VuZFN0YXRlID0gQmxvY2tFbmRTdGF0ZTtcbmV4cG9ydHMuTG9vcEVuZFN0YXRlID0gTG9vcEVuZFN0YXRlO1xuZXhwb3J0cy5SdWxlU3RhcnRTdGF0ZSA9IFJ1bGVTdGFydFN0YXRlO1xuZXhwb3J0cy5SdWxlU3RvcFN0YXRlID0gUnVsZVN0b3BTdGF0ZTtcbmV4cG9ydHMuVG9rZW5zU3RhcnRTdGF0ZSA9IFRva2Vuc1N0YXJ0U3RhdGU7XG5leHBvcnRzLlBsdXNMb29wYmFja1N0YXRlID0gUGx1c0xvb3BiYWNrU3RhdGU7XG5leHBvcnRzLlN0YXJMb29wYmFja1N0YXRlID0gU3Rhckxvb3BiYWNrU3RhdGU7XG5leHBvcnRzLlN0YXJMb29wRW50cnlTdGF0ZSA9IFN0YXJMb29wRW50cnlTdGF0ZTtcbmV4cG9ydHMuUGx1c0Jsb2NrU3RhcnRTdGF0ZSA9IFBsdXNCbG9ja1N0YXJ0U3RhdGU7XG5leHBvcnRzLlN0YXJCbG9ja1N0YXJ0U3RhdGUgPSBTdGFyQmxvY2tTdGFydFN0YXRlO1xuZXhwb3J0cy5CYXNpY0Jsb2NrU3RhcnRTdGF0ZSA9IEJhc2ljQmxvY2tTdGFydFN0YXRlO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy8vXG5cbi8vIFJlcHJlc2VudHMgdGhlIHR5cGUgb2YgcmVjb2duaXplciBhbiBBVE4gYXBwbGllcyB0by5cblxuZnVuY3Rpb24gQVROVHlwZSgpIHtcblxufVxuXG5BVE5UeXBlLkxFWEVSID0gMDtcbkFUTlR5cGUuUEFSU0VSID0gMTtcblxuZXhwb3J0cy5BVE5UeXBlID0gQVROVHlwZTtcblxuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vL1xuXG4vLyBXaGVuIHdlIGhpdCBhbiBhY2NlcHQgc3RhdGUgaW4gZWl0aGVyIHRoZSBERkEgb3IgdGhlIEFUTiwgd2Vcbi8vICBoYXZlIHRvIG5vdGlmeSB0aGUgY2hhcmFjdGVyIHN0cmVhbSB0byBzdGFydCBidWZmZXJpbmcgY2hhcmFjdGVyc1xuLy8gIHZpYSB7QGxpbmsgSW50U3RyZWFtLy9tYXJrfSBhbmQgcmVjb3JkIHRoZSBjdXJyZW50IHN0YXRlLiBUaGUgY3VycmVudCBzaW0gc3RhdGVcbi8vICBpbmNsdWRlcyB0aGUgY3VycmVudCBpbmRleCBpbnRvIHRoZSBpbnB1dCwgdGhlIGN1cnJlbnQgbGluZSxcbi8vICBhbmQgY3VycmVudCBjaGFyYWN0ZXIgcG9zaXRpb24gaW4gdGhhdCBsaW5lLiBOb3RlIHRoYXQgdGhlIExleGVyIGlzXG4vLyAgdHJhY2tpbmcgdGhlIHN0YXJ0aW5nIGxpbmUgYW5kIGNoYXJhY3Rlcml6YXRpb24gb2YgdGhlIHRva2VuLiBUaGVzZVxuLy8gIHZhcmlhYmxlcyB0cmFjayB0aGUgXCJzdGF0ZVwiIG9mIHRoZSBzaW11bGF0b3Igd2hlbiBpdCBoaXRzIGFuIGFjY2VwdCBzdGF0ZS5cbi8vXG4vLyAgPHA+V2UgdHJhY2sgdGhlc2UgdmFyaWFibGVzIHNlcGFyYXRlbHkgZm9yIHRoZSBERkEgYW5kIEFUTiBzaW11bGF0aW9uXG4vLyAgYmVjYXVzZSB0aGUgREZBIHNpbXVsYXRpb24gb2Z0ZW4gaGFzIHRvIGZhaWwgb3ZlciB0byB0aGUgQVROXG4vLyAgc2ltdWxhdGlvbi4gSWYgdGhlIEFUTiBzaW11bGF0aW9uIGZhaWxzLCB3ZSBuZWVkIHRoZSBERkEgdG8gZmFsbFxuLy8gIGJhY2sgdG8gaXRzIHByZXZpb3VzbHkgYWNjZXB0ZWQgc3RhdGUsIGlmIGFueS4gSWYgdGhlIEFUTiBzdWNjZWVkcyxcbi8vICB0aGVuIHRoZSBBVE4gZG9lcyB0aGUgYWNjZXB0IGFuZCB0aGUgREZBIHNpbXVsYXRvciB0aGF0IGludm9rZWQgaXRcbi8vICBjYW4gc2ltcGx5IHJldHVybiB0aGUgcHJlZGljdGVkIHRva2VuIHR5cGUuPC9wPlxuLy8vXG5cbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vLi4vVG9rZW4nKS5Ub2tlbjtcbnZhciBMZXhlciA9IHJlcXVpcmUoJy4vLi4vTGV4ZXInKS5MZXhlcjtcbnZhciBBVE4gPSByZXF1aXJlKCcuL0FUTicpLkFUTjtcbnZhciBBVE5TaW11bGF0b3IgPSByZXF1aXJlKCcuL0FUTlNpbXVsYXRvcicpLkFUTlNpbXVsYXRvcjtcbnZhciBERkFTdGF0ZSA9IHJlcXVpcmUoJy4vLi4vZGZhL0RGQVN0YXRlJykuREZBU3RhdGU7XG52YXIgQVROQ29uZmlnU2V0ID0gcmVxdWlyZSgnLi9BVE5Db25maWdTZXQnKS5BVE5Db25maWdTZXQ7XG52YXIgT3JkZXJlZEFUTkNvbmZpZ1NldCA9IHJlcXVpcmUoJy4vQVROQ29uZmlnU2V0JykuT3JkZXJlZEFUTkNvbmZpZ1NldDtcbnZhciBQcmVkaWN0aW9uQ29udGV4dCA9IHJlcXVpcmUoJy4vLi4vUHJlZGljdGlvbkNvbnRleHQnKS5QcmVkaWN0aW9uQ29udGV4dDtcbnZhciBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dCA9IHJlcXVpcmUoJy4vLi4vUHJlZGljdGlvbkNvbnRleHQnKS5TaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dDtcbnZhciBSdWxlU3RvcFN0YXRlID0gcmVxdWlyZSgnLi9BVE5TdGF0ZScpLlJ1bGVTdG9wU3RhdGU7XG52YXIgTGV4ZXJBVE5Db25maWcgPSByZXF1aXJlKCcuL0FUTkNvbmZpZycpLkxleGVyQVROQ29uZmlnO1xudmFyIFRyYW5zaXRpb24gPSByZXF1aXJlKCcuL1RyYW5zaXRpb24nKS5UcmFuc2l0aW9uO1xudmFyIExleGVyQWN0aW9uRXhlY3V0b3IgPSByZXF1aXJlKCcuL0xleGVyQWN0aW9uRXhlY3V0b3InKS5MZXhlckFjdGlvbkV4ZWN1dG9yO1xudmFyIExleGVyTm9WaWFibGVBbHRFeGNlcHRpb24gPSByZXF1aXJlKCcuLy4uL2Vycm9yL0Vycm9ycycpLkxleGVyTm9WaWFibGVBbHRFeGNlcHRpb247XG5cbmZ1bmN0aW9uIHJlc2V0U2ltU3RhdGUoc2ltKSB7XG5cdHNpbS5pbmRleCA9IC0xO1xuXHRzaW0ubGluZSA9IDA7XG5cdHNpbS5jb2x1bW4gPSAtMTtcblx0c2ltLmRmYVN0YXRlID0gbnVsbDtcbn1cblxuZnVuY3Rpb24gU2ltU3RhdGUoKSB7XG5cdHJlc2V0U2ltU3RhdGUodGhpcyk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5TaW1TdGF0ZS5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbigpIHtcblx0cmVzZXRTaW1TdGF0ZSh0aGlzKTtcbn07XG5cbmZ1bmN0aW9uIExleGVyQVROU2ltdWxhdG9yKHJlY29nLCBhdG4sIGRlY2lzaW9uVG9ERkEsIHNoYXJlZENvbnRleHRDYWNoZSkge1xuXHRBVE5TaW11bGF0b3IuY2FsbCh0aGlzLCBhdG4sIHNoYXJlZENvbnRleHRDYWNoZSk7XG5cdHRoaXMuZGVjaXNpb25Ub0RGQSA9IGRlY2lzaW9uVG9ERkE7XG5cdHRoaXMucmVjb2cgPSByZWNvZztcblx0Ly8gVGhlIGN1cnJlbnQgdG9rZW4ncyBzdGFydGluZyBpbmRleCBpbnRvIHRoZSBjaGFyYWN0ZXIgc3RyZWFtLlxuXHQvLyBTaGFyZWQgYWNyb3NzIERGQSB0byBBVE4gc2ltdWxhdGlvbiBpbiBjYXNlIHRoZSBBVE4gZmFpbHMgYW5kIHRoZVxuXHQvLyBERkEgZGlkIG5vdCBoYXZlIGEgcHJldmlvdXMgYWNjZXB0IHN0YXRlLiBJbiB0aGlzIGNhc2UsIHdlIHVzZSB0aGVcblx0Ly8gQVROLWdlbmVyYXRlZCBleGNlcHRpb24gb2JqZWN0LlxuXHR0aGlzLnN0YXJ0SW5kZXggPSAtMTtcblx0Ly8gbGluZSBudW1iZXIgMS4ubiB3aXRoaW4gdGhlIGlucHV0Ly8vXG5cdHRoaXMubGluZSA9IDE7XG5cdC8vIFRoZSBpbmRleCBvZiB0aGUgY2hhcmFjdGVyIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpbmVcblx0Ly8gMC4ubi0xLy8vXG5cdHRoaXMuY29sdW1uID0gMDtcblx0dGhpcy5tb2RlID0gTGV4ZXIuREVGQVVMVF9NT0RFO1xuXHQvLyBVc2VkIGR1cmluZyBERkEvQVROIGV4ZWMgdG8gcmVjb3JkIHRoZSBtb3N0IHJlY2VudCBhY2NlcHQgY29uZmlndXJhdGlvblxuXHQvLyBpbmZvXG5cdHRoaXMucHJldkFjY2VwdCA9IG5ldyBTaW1TdGF0ZSgpO1xuXHQvLyBkb25lXG5cdHJldHVybiB0aGlzO1xufVxuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFUTlNpbXVsYXRvci5wcm90b3R5cGUpO1xuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGV4ZXJBVE5TaW11bGF0b3I7XG5cbkxleGVyQVROU2ltdWxhdG9yLmRlYnVnID0gZmFsc2U7XG5MZXhlckFUTlNpbXVsYXRvci5kZmFfZGVidWcgPSBmYWxzZTtcblxuTGV4ZXJBVE5TaW11bGF0b3IuTUlOX0RGQV9FREdFID0gMDtcbkxleGVyQVROU2ltdWxhdG9yLk1BWF9ERkFfRURHRSA9IDEyNzsgLy8gZm9yY2VzIHVuaWNvZGUgdG8gc3RheSBpbiBBVE5cblxuTGV4ZXJBVE5TaW11bGF0b3IubWF0Y2hfY2FsbHMgPSAwO1xuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY29weVN0YXRlID0gZnVuY3Rpb24oc2ltdWxhdG9yKSB7XG5cdHRoaXMuY29sdW1uID0gc2ltdWxhdG9yLmNvbHVtbjtcblx0dGhpcy5saW5lID0gc2ltdWxhdG9yLmxpbmU7XG5cdHRoaXMubW9kZSA9IHNpbXVsYXRvci5tb2RlO1xuXHR0aGlzLnN0YXJ0SW5kZXggPSBzaW11bGF0b3Iuc3RhcnRJbmRleDtcbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5tYXRjaCA9IGZ1bmN0aW9uKGlucHV0LCBtb2RlKSB7XG5cdHRoaXMubWF0Y2hfY2FsbHMgKz0gMTtcblx0dGhpcy5tb2RlID0gbW9kZTtcblx0dmFyIG1hcmsgPSBpbnB1dC5tYXJrKCk7XG5cdHRyeSB7XG5cdFx0dGhpcy5zdGFydEluZGV4ID0gaW5wdXQuaW5kZXg7XG5cdFx0dGhpcy5wcmV2QWNjZXB0LnJlc2V0KCk7XG5cdFx0dmFyIGRmYSA9IHRoaXMuZGVjaXNpb25Ub0RGQVttb2RlXTtcblx0XHRpZiAoZGZhLnMwID09PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5tYXRjaEFUTihpbnB1dCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLmV4ZWNBVE4oaW5wdXQsIGRmYS5zMCk7XG5cdFx0fVxuXHR9IGZpbmFsbHkge1xuXHRcdGlucHV0LnJlbGVhc2UobWFyayk7XG5cdH1cbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuXHR0aGlzLnByZXZBY2NlcHQucmVzZXQoKTtcblx0dGhpcy5zdGFydEluZGV4ID0gLTE7XG5cdHRoaXMubGluZSA9IDE7XG5cdHRoaXMuY29sdW1uID0gMDtcblx0dGhpcy5tb2RlID0gTGV4ZXIuREVGQVVMVF9NT0RFO1xufTtcblxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLm1hdGNoQVROID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0dmFyIHN0YXJ0U3RhdGUgPSB0aGlzLmF0bi5tb2RlVG9TdGFydFN0YXRlW3RoaXMubW9kZV07XG5cblx0aWYgKExleGVyQVROU2ltdWxhdG9yLmRlYnVnKSB7XG5cdFx0Y29uc29sZS5sb2coXCJtYXRjaEFUTiBtb2RlIFwiICsgdGhpcy5tb2RlICsgXCIgc3RhcnQ6IFwiICsgc3RhcnRTdGF0ZSk7XG5cdH1cblx0dmFyIG9sZF9tb2RlID0gdGhpcy5tb2RlO1xuXHR2YXIgczBfY2xvc3VyZSA9IHRoaXMuY29tcHV0ZVN0YXJ0U3RhdGUoaW5wdXQsIHN0YXJ0U3RhdGUpO1xuXHR2YXIgc3VwcHJlc3NFZGdlID0gczBfY2xvc3VyZS5oYXNTZW1hbnRpY0NvbnRleHQ7XG5cdHMwX2Nsb3N1cmUuaGFzU2VtYW50aWNDb250ZXh0ID0gZmFsc2U7XG5cblx0dmFyIG5leHQgPSB0aGlzLmFkZERGQVN0YXRlKHMwX2Nsb3N1cmUpO1xuXHRpZiAoIXN1cHByZXNzRWRnZSkge1xuXHRcdHRoaXMuZGVjaXNpb25Ub0RGQVt0aGlzLm1vZGVdLnMwID0gbmV4dDtcblx0fVxuXG5cdHZhciBwcmVkaWN0ID0gdGhpcy5leGVjQVROKGlucHV0LCBuZXh0KTtcblxuXHRpZiAoTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcpIHtcblx0XHRjb25zb2xlLmxvZyhcIkRGQSBhZnRlciBtYXRjaEFUTjogXCIgKyB0aGlzLmRlY2lzaW9uVG9ERkFbb2xkX21vZGVdLnRvTGV4ZXJTdHJpbmcoKSk7XG5cdH1cblx0cmV0dXJuIHByZWRpY3Q7XG59O1xuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZXhlY0FUTiA9IGZ1bmN0aW9uKGlucHV0LCBkczApIHtcblx0aWYgKExleGVyQVROU2ltdWxhdG9yLmRlYnVnKSB7XG5cdFx0Y29uc29sZS5sb2coXCJzdGFydCBzdGF0ZSBjbG9zdXJlPVwiICsgZHMwLmNvbmZpZ3MpO1xuXHR9XG5cdGlmIChkczAuaXNBY2NlcHRTdGF0ZSkge1xuXHRcdC8vIGFsbG93IHplcm8tbGVuZ3RoIHRva2Vuc1xuXHRcdHRoaXMuY2FwdHVyZVNpbVN0YXRlKHRoaXMucHJldkFjY2VwdCwgaW5wdXQsIGRzMCk7XG5cdH1cblx0dmFyIHQgPSBpbnB1dC5MQSgxKTtcblx0dmFyIHMgPSBkczA7IC8vIHMgaXMgY3VycmVudC9mcm9tIERGQSBzdGF0ZVxuXG5cdHdoaWxlICh0cnVlKSB7IC8vIHdoaWxlIG1vcmUgd29ya1xuXHRcdGlmIChMZXhlckFUTlNpbXVsYXRvci5kZWJ1Zykge1xuXHRcdFx0Y29uc29sZS5sb2coXCJleGVjQVROIGxvb3Agc3RhcnRpbmcgY2xvc3VyZTogXCIgKyBzLmNvbmZpZ3MpO1xuXHRcdH1cblxuXHRcdC8vIEFzIHdlIG1vdmUgc3JjLT50cmcsIHNyYy0+dHJnLCB3ZSBrZWVwIHRyYWNrIG9mIHRoZSBwcmV2aW91cyB0cmcgdG9cblx0XHQvLyBhdm9pZCBsb29raW5nIHVwIHRoZSBERkEgc3RhdGUgYWdhaW4sIHdoaWNoIGlzIGV4cGVuc2l2ZS5cblx0XHQvLyBJZiB0aGUgcHJldmlvdXMgdGFyZ2V0IHdhcyBhbHJlYWR5IHBhcnQgb2YgdGhlIERGQSwgd2UgbWlnaHRcblx0XHQvLyBiZSBhYmxlIHRvIGF2b2lkIGRvaW5nIGEgcmVhY2ggb3BlcmF0aW9uIHVwb24gdC4gSWYgcyE9bnVsbCxcblx0XHQvLyBpdCBtZWFucyB0aGF0IHNlbWFudGljIHByZWRpY2F0ZXMgZGlkbid0IHByZXZlbnQgdXMgZnJvbVxuXHRcdC8vIGNyZWF0aW5nIGEgREZBIHN0YXRlLiBPbmNlIHdlIGtub3cgcyE9bnVsbCwgd2UgY2hlY2sgdG8gc2VlIGlmXG5cdFx0Ly8gdGhlIERGQSBzdGF0ZSBoYXMgYW4gZWRnZSBhbHJlYWR5IGZvciB0LiBJZiBzbywgd2UgY2FuIGp1c3QgcmV1c2Vcblx0XHQvLyBpdCdzIGNvbmZpZ3VyYXRpb24gc2V0OyB0aGVyZSdzIG5vIHBvaW50IGluIHJlLWNvbXB1dGluZyBpdC5cblx0XHQvLyBUaGlzIGlzIGtpbmQgb2YgbGlrZSBkb2luZyBERkEgc2ltdWxhdGlvbiB3aXRoaW4gdGhlIEFUTlxuXHRcdC8vIHNpbXVsYXRpb24gYmVjYXVzZSBERkEgc2ltdWxhdGlvbiBpcyByZWFsbHkganVzdCBhIHdheSB0byBhdm9pZFxuXHRcdC8vIGNvbXB1dGluZyByZWFjaC9jbG9zdXJlIHNldHMuIFRlY2huaWNhbGx5LCBvbmNlIHdlIGtub3cgdGhhdFxuXHRcdC8vIHdlIGhhdmUgYSBwcmV2aW91c2x5IGFkZGVkIERGQSBzdGF0ZSwgd2UgY291bGQganVtcCBvdmVyIHRvXG5cdFx0Ly8gdGhlIERGQSBzaW11bGF0b3IuIEJ1dCwgdGhhdCB3b3VsZCBtZWFuIHBvcHBpbmcgYmFjayBhbmQgZm9ydGhcblx0XHQvLyBhIGxvdCBhbmQgbWFraW5nIHRoaW5ncyBtb3JlIGNvbXBsaWNhdGVkIGFsZ29yaXRobWljYWxseS5cblx0XHQvLyBUaGlzIG9wdGltaXphdGlvbiBtYWtlcyBhIGxvdCBvZiBzZW5zZSBmb3IgbG9vcHMgd2l0aGluIERGQS5cblx0XHQvLyBBIGNoYXJhY3RlciB3aWxsIHRha2UgdXMgYmFjayB0byBhbiBleGlzdGluZyBERkEgc3RhdGVcblx0XHQvLyB0aGF0IGFscmVhZHkgaGFzIGxvdHMgb2YgZWRnZXMgb3V0IG9mIGl0LiBlLmcuLCAuKiBpbiBjb21tZW50cy5cblx0XHQvLyBwcmludChcIlRhcmdldCBmb3I6XCIgKyBzdHIocykgKyBcIiBhbmQ6XCIgKyBzdHIodCkpXG5cdFx0dmFyIHRhcmdldCA9IHRoaXMuZ2V0RXhpc3RpbmdUYXJnZXRTdGF0ZShzLCB0KTtcblx0XHQvLyBwcmludChcIkV4aXN0aW5nOlwiICsgc3RyKHRhcmdldCkpXG5cdFx0aWYgKHRhcmdldCA9PT0gbnVsbCkge1xuXHRcdFx0dGFyZ2V0ID0gdGhpcy5jb21wdXRlVGFyZ2V0U3RhdGUoaW5wdXQsIHMsIHQpO1xuXHRcdFx0Ly8gcHJpbnQoXCJDb21wdXRlZDpcIiArIHN0cih0YXJnZXQpKVxuXHRcdH1cblx0XHRpZiAodGFyZ2V0ID09PSBBVE5TaW11bGF0b3IuRVJST1IpIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHQvLyBJZiB0aGlzIGlzIGEgY29uc3VtYWJsZSBpbnB1dCBlbGVtZW50LCBtYWtlIHN1cmUgdG8gY29uc3VtZSBiZWZvcmVcblx0XHQvLyBjYXB0dXJpbmcgdGhlIGFjY2VwdCBzdGF0ZSBzbyB0aGUgaW5wdXQgaW5kZXgsIGxpbmUsIGFuZCBjaGFyXG5cdFx0Ly8gcG9zaXRpb24gYWNjdXJhdGVseSByZWZsZWN0IHRoZSBzdGF0ZSBvZiB0aGUgaW50ZXJwcmV0ZXIgYXQgdGhlXG5cdFx0Ly8gZW5kIG9mIHRoZSB0b2tlbi5cblx0XHRpZiAodCAhPT0gVG9rZW4uRU9GKSB7XG5cdFx0XHR0aGlzLmNvbnN1bWUoaW5wdXQpO1xuXHRcdH1cblx0XHRpZiAodGFyZ2V0LmlzQWNjZXB0U3RhdGUpIHtcblx0XHRcdHRoaXMuY2FwdHVyZVNpbVN0YXRlKHRoaXMucHJldkFjY2VwdCwgaW5wdXQsIHRhcmdldCk7XG5cdFx0XHRpZiAodCA9PT0gVG9rZW4uRU9GKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR0ID0gaW5wdXQuTEEoMSk7XG5cdFx0cyA9IHRhcmdldDsgLy8gZmxpcDsgY3VycmVudCBERkEgdGFyZ2V0IGJlY29tZXMgbmV3IHNyYy9mcm9tIHN0YXRlXG5cdH1cblx0cmV0dXJuIHRoaXMuZmFpbE9yQWNjZXB0KHRoaXMucHJldkFjY2VwdCwgaW5wdXQsIHMuY29uZmlncywgdCk7XG59O1xuXG4vLyBHZXQgYW4gZXhpc3RpbmcgdGFyZ2V0IHN0YXRlIGZvciBhbiBlZGdlIGluIHRoZSBERkEuIElmIHRoZSB0YXJnZXQgc3RhdGVcbi8vIGZvciB0aGUgZWRnZSBoYXMgbm90IHlldCBiZWVuIGNvbXB1dGVkIG9yIGlzIG90aGVyd2lzZSBub3QgYXZhaWxhYmxlLFxuLy8gdGhpcyBtZXRob2QgcmV0dXJucyB7QGNvZGUgbnVsbH0uXG4vL1xuLy8gQHBhcmFtIHMgVGhlIGN1cnJlbnQgREZBIHN0YXRlXG4vLyBAcGFyYW0gdCBUaGUgbmV4dCBpbnB1dCBzeW1ib2xcbi8vIEByZXR1cm4gVGhlIGV4aXN0aW5nIHRhcmdldCBERkEgc3RhdGUgZm9yIHRoZSBnaXZlbiBpbnB1dCBzeW1ib2xcbi8vIHtAY29kZSB0fSwgb3Ige0Bjb2RlIG51bGx9IGlmIHRoZSB0YXJnZXQgc3RhdGUgZm9yIHRoaXMgZWRnZSBpcyBub3Rcbi8vIGFscmVhZHkgY2FjaGVkXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0RXhpc3RpbmdUYXJnZXRTdGF0ZSA9IGZ1bmN0aW9uKHMsIHQpIHtcblx0aWYgKHMuZWRnZXMgPT09IG51bGwgfHwgdCA8IExleGVyQVROU2ltdWxhdG9yLk1JTl9ERkFfRURHRSB8fCB0ID4gTGV4ZXJBVE5TaW11bGF0b3IuTUFYX0RGQV9FREdFKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHR2YXIgdGFyZ2V0ID0gcy5lZGdlc1t0IC0gTGV4ZXJBVE5TaW11bGF0b3IuTUlOX0RGQV9FREdFXTtcblx0aWYodGFyZ2V0PT09dW5kZWZpbmVkKSB7XG5cdFx0dGFyZ2V0ID0gbnVsbDtcblx0fVxuXHRpZiAoTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcgJiYgdGFyZ2V0ICE9PSBudWxsKSB7XG5cdFx0Y29uc29sZS5sb2coXCJyZXVzZSBzdGF0ZSBcIiArIHMuc3RhdGVOdW1iZXIgKyBcIiBlZGdlIHRvIFwiICsgdGFyZ2V0LnN0YXRlTnVtYmVyKTtcblx0fVxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxuLy8gQ29tcHV0ZSBhIHRhcmdldCBzdGF0ZSBmb3IgYW4gZWRnZSBpbiB0aGUgREZBLCBhbmQgYXR0ZW1wdCB0byBhZGQgdGhlXG4vLyBjb21wdXRlZCBzdGF0ZSBhbmQgY29ycmVzcG9uZGluZyBlZGdlIHRvIHRoZSBERkEuXG4vL1xuLy8gQHBhcmFtIGlucHV0IFRoZSBpbnB1dCBzdHJlYW1cbi8vIEBwYXJhbSBzIFRoZSBjdXJyZW50IERGQSBzdGF0ZVxuLy8gQHBhcmFtIHQgVGhlIG5leHQgaW5wdXQgc3ltYm9sXG4vL1xuLy8gQHJldHVybiBUaGUgY29tcHV0ZWQgdGFyZ2V0IERGQSBzdGF0ZSBmb3IgdGhlIGdpdmVuIGlucHV0IHN5bWJvbFxuLy8ge0Bjb2RlIHR9LiBJZiB7QGNvZGUgdH0gZG9lcyBub3QgbGVhZCB0byBhIHZhbGlkIERGQSBzdGF0ZSwgdGhpcyBtZXRob2Rcbi8vIHJldHVybnMge0BsaW5rIC8vRVJST1J9LlxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmNvbXB1dGVUYXJnZXRTdGF0ZSA9IGZ1bmN0aW9uKGlucHV0LCBzLCB0KSB7XG5cdHZhciByZWFjaCA9IG5ldyBPcmRlcmVkQVROQ29uZmlnU2V0KCk7XG5cdC8vIGlmIHdlIGRvbid0IGZpbmQgYW4gZXhpc3RpbmcgREZBIHN0YXRlXG5cdC8vIEZpbGwgcmVhY2ggc3RhcnRpbmcgZnJvbSBjbG9zdXJlLCBmb2xsb3dpbmcgdCB0cmFuc2l0aW9uc1xuXHR0aGlzLmdldFJlYWNoYWJsZUNvbmZpZ1NldChpbnB1dCwgcy5jb25maWdzLCByZWFjaCwgdCk7XG5cblx0aWYgKHJlYWNoLml0ZW1zLmxlbmd0aCA9PT0gMCkgeyAvLyB3ZSBnb3Qgbm93aGVyZSBvbiB0IGZyb20gc1xuXHRcdGlmICghcmVhY2guaGFzU2VtYW50aWNDb250ZXh0KSB7XG5cdFx0XHQvLyB3ZSBnb3Qgbm93aGVyZSBvbiB0LCBkb24ndCB0aHJvdyBvdXQgdGhpcyBrbm93bGVkZ2U7IGl0J2Rcblx0XHRcdC8vIGNhdXNlIGEgZmFpbG92ZXIgZnJvbSBERkEgbGF0ZXIuXG5cdFx0XHR0aGlzLmFkZERGQUVkZ2UocywgdCwgQVROU2ltdWxhdG9yLkVSUk9SKTtcblx0XHR9XG5cdFx0Ly8gc3RvcCB3aGVuIHdlIGNhbid0IG1hdGNoIGFueSBtb3JlIGNoYXJcblx0XHRyZXR1cm4gQVROU2ltdWxhdG9yLkVSUk9SO1xuXHR9XG5cdC8vIEFkZCBhbiBlZGdlIGZyb20gcyB0byB0YXJnZXQgREZBIGZvdW5kL2NyZWF0ZWQgZm9yIHJlYWNoXG5cdHJldHVybiB0aGlzLmFkZERGQUVkZ2UocywgdCwgbnVsbCwgcmVhY2gpO1xufTtcblxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmZhaWxPckFjY2VwdCA9IGZ1bmN0aW9uKHByZXZBY2NlcHQsIGlucHV0LCByZWFjaCwgdCkge1xuXHRpZiAodGhpcy5wcmV2QWNjZXB0LmRmYVN0YXRlICE9PSBudWxsKSB7XG5cdFx0dmFyIGxleGVyQWN0aW9uRXhlY3V0b3IgPSBwcmV2QWNjZXB0LmRmYVN0YXRlLmxleGVyQWN0aW9uRXhlY3V0b3I7XG5cdFx0dGhpcy5hY2NlcHQoaW5wdXQsIGxleGVyQWN0aW9uRXhlY3V0b3IsIHRoaXMuc3RhcnRJbmRleCxcblx0XHRcdFx0cHJldkFjY2VwdC5pbmRleCwgcHJldkFjY2VwdC5saW5lLCBwcmV2QWNjZXB0LmNvbHVtbik7XG5cdFx0cmV0dXJuIHByZXZBY2NlcHQuZGZhU3RhdGUucHJlZGljdGlvbjtcblx0fSBlbHNlIHtcblx0XHQvLyBpZiBubyBhY2NlcHQgYW5kIEVPRiBpcyBmaXJzdCBjaGFyLCByZXR1cm4gRU9GXG5cdFx0aWYgKHQgPT09IFRva2VuLkVPRiAmJiBpbnB1dC5pbmRleCA9PT0gdGhpcy5zdGFydEluZGV4KSB7XG5cdFx0XHRyZXR1cm4gVG9rZW4uRU9GO1xuXHRcdH1cblx0XHR0aHJvdyBuZXcgTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbih0aGlzLnJlY29nLCBpbnB1dCwgdGhpcy5zdGFydEluZGV4LCByZWFjaCk7XG5cdH1cbn07XG5cbi8vIEdpdmVuIGEgc3RhcnRpbmcgY29uZmlndXJhdGlvbiBzZXQsIGZpZ3VyZSBvdXQgYWxsIEFUTiBjb25maWd1cmF0aW9uc1xuLy8gd2UgY2FuIHJlYWNoIHVwb24gaW5wdXQge0Bjb2RlIHR9LiBQYXJhbWV0ZXIge0Bjb2RlIHJlYWNofSBpcyBhIHJldHVyblxuLy8gcGFyYW1ldGVyLlxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmdldFJlYWNoYWJsZUNvbmZpZ1NldCA9IGZ1bmN0aW9uKGlucHV0LCBjbG9zdXJlLFxuXHRcdHJlYWNoLCB0KSB7XG5cdC8vIHRoaXMgaXMgdXNlZCB0byBza2lwIHByb2Nlc3NpbmcgZm9yIGNvbmZpZ3Mgd2hpY2ggaGF2ZSBhIGxvd2VyIHByaW9yaXR5XG5cdC8vIHRoYW4gYSBjb25maWcgdGhhdCBhbHJlYWR5IHJlYWNoZWQgYW4gYWNjZXB0IHN0YXRlIGZvciB0aGUgc2FtZSBydWxlXG5cdHZhciBza2lwQWx0ID0gQVROLklOVkFMSURfQUxUX05VTUJFUjtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjbG9zdXJlLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG5cdFx0dmFyIGNmZyA9IGNsb3N1cmUuaXRlbXNbaV07XG5cdFx0dmFyIGN1cnJlbnRBbHRSZWFjaGVkQWNjZXB0U3RhdGUgPSAoY2ZnLmFsdCA9PT0gc2tpcEFsdCk7XG5cdFx0aWYgKGN1cnJlbnRBbHRSZWFjaGVkQWNjZXB0U3RhdGUgJiYgY2ZnLnBhc3NlZFRocm91Z2hOb25HcmVlZHlEZWNpc2lvbikge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXHRcdGlmIChMZXhlckFUTlNpbXVsYXRvci5kZWJ1Zykge1xuXHRcdFx0Y29uc29sZS5sb2coXCJ0ZXN0aW5nICVzIGF0ICVzXFxuXCIsIHRoaXMuZ2V0VG9rZW5OYW1lKHQpLCBjZmdcblx0XHRcdFx0XHQudG9TdHJpbmcodGhpcy5yZWNvZywgdHJ1ZSkpO1xuXHRcdH1cblx0XHRmb3IgKHZhciBqID0gMDsgaiA8IGNmZy5zdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGg7IGorKykge1xuXHRcdFx0dmFyIHRyYW5zID0gY2ZnLnN0YXRlLnRyYW5zaXRpb25zW2pdOyAvLyBmb3IgZWFjaCB0cmFuc2l0aW9uXG5cdFx0XHR2YXIgdGFyZ2V0ID0gdGhpcy5nZXRSZWFjaGFibGVUYXJnZXQodHJhbnMsIHQpO1xuXHRcdFx0aWYgKHRhcmdldCAhPT0gbnVsbCkge1xuXHRcdFx0XHR2YXIgbGV4ZXJBY3Rpb25FeGVjdXRvciA9IGNmZy5sZXhlckFjdGlvbkV4ZWN1dG9yO1xuXHRcdFx0XHRpZiAobGV4ZXJBY3Rpb25FeGVjdXRvciAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdGxleGVyQWN0aW9uRXhlY3V0b3IgPSBsZXhlckFjdGlvbkV4ZWN1dG9yLmZpeE9mZnNldEJlZm9yZU1hdGNoKGlucHV0LmluZGV4IC0gdGhpcy5zdGFydEluZGV4KTtcblx0XHRcdFx0fVxuXHRcdFx0XHR2YXIgdHJlYXRFb2ZBc0Vwc2lsb24gPSAodCA9PT0gVG9rZW4uRU9GKTtcblx0XHRcdFx0dmFyIGNvbmZpZyA9IG5ldyBMZXhlckFUTkNvbmZpZyh7c3RhdGU6dGFyZ2V0LCBsZXhlckFjdGlvbkV4ZWN1dG9yOmxleGVyQWN0aW9uRXhlY3V0b3J9LCBjZmcpO1xuXHRcdFx0XHRpZiAodGhpcy5jbG9zdXJlKGlucHV0LCBjb25maWcsIHJlYWNoLFxuXHRcdFx0XHRcdFx0Y3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZSwgdHJ1ZSwgdHJlYXRFb2ZBc0Vwc2lsb24pKSB7XG5cdFx0XHRcdFx0Ly8gYW55IHJlbWFpbmluZyBjb25maWdzIGZvciB0aGlzIGFsdCBoYXZlIGEgbG93ZXIgcHJpb3JpdHlcblx0XHRcdFx0XHQvLyB0aGFuIHRoZSBvbmUgdGhhdCBqdXN0IHJlYWNoZWQgYW4gYWNjZXB0IHN0YXRlLlxuXHRcdFx0XHRcdHNraXBBbHQgPSBjZmcuYWx0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24oaW5wdXQsIGxleGVyQWN0aW9uRXhlY3V0b3IsXG5cdFx0c3RhcnRJbmRleCwgaW5kZXgsIGxpbmUsIGNoYXJQb3MpIHtcblx0aWYgKExleGVyQVROU2ltdWxhdG9yLmRlYnVnKSB7XG5cdFx0Y29uc29sZS5sb2coXCJBQ1RJT04gJXNcXG5cIiwgbGV4ZXJBY3Rpb25FeGVjdXRvcik7XG5cdH1cblx0Ly8gc2VlayB0byBhZnRlciBsYXN0IGNoYXIgaW4gdG9rZW5cblx0aW5wdXQuc2VlayhpbmRleCk7XG5cdHRoaXMubGluZSA9IGxpbmU7XG5cdHRoaXMuY29sdW1uID0gY2hhclBvcztcblx0aWYgKGxleGVyQWN0aW9uRXhlY3V0b3IgIT09IG51bGwgJiYgdGhpcy5yZWNvZyAhPT0gbnVsbCkge1xuXHRcdGxleGVyQWN0aW9uRXhlY3V0b3IuZXhlY3V0ZSh0aGlzLnJlY29nLCBpbnB1dCwgc3RhcnRJbmRleCk7XG5cdH1cbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRSZWFjaGFibGVUYXJnZXQgPSBmdW5jdGlvbih0cmFucywgdCkge1xuXHRpZiAodHJhbnMubWF0Y2hlcyh0LCAwLCBMZXhlci5NQVhfQ0hBUl9WQUxVRSkpIHtcblx0XHRyZXR1cm4gdHJhbnMudGFyZ2V0O1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG59O1xuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY29tcHV0ZVN0YXJ0U3RhdGUgPSBmdW5jdGlvbihpbnB1dCwgcCkge1xuXHR2YXIgaW5pdGlhbENvbnRleHQgPSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWTtcblx0dmFyIGNvbmZpZ3MgPSBuZXcgT3JkZXJlZEFUTkNvbmZpZ1NldCgpO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHAudHJhbnNpdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgdGFyZ2V0ID0gcC50cmFuc2l0aW9uc1tpXS50YXJnZXQ7XG4gICAgICAgIHZhciBjZmcgPSBuZXcgTGV4ZXJBVE5Db25maWcoe3N0YXRlOnRhcmdldCwgYWx0OmkrMSwgY29udGV4dDppbml0aWFsQ29udGV4dH0sIG51bGwpO1xuXHRcdHRoaXMuY2xvc3VyZShpbnB1dCwgY2ZnLCBjb25maWdzLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTtcblx0fVxuXHRyZXR1cm4gY29uZmlncztcbn07XG5cbi8vIFNpbmNlIHRoZSBhbHRlcm5hdGl2ZXMgd2l0aGluIGFueSBsZXhlciBkZWNpc2lvbiBhcmUgb3JkZXJlZCBieVxuLy8gcHJlZmVyZW5jZSwgdGhpcyBtZXRob2Qgc3RvcHMgcHVyc3VpbmcgdGhlIGNsb3N1cmUgYXMgc29vbiBhcyBhbiBhY2NlcHRcbi8vIHN0YXRlIGlzIHJlYWNoZWQuIEFmdGVyIHRoZSBmaXJzdCBhY2NlcHQgc3RhdGUgaXMgcmVhY2hlZCBieSBkZXB0aC1maXJzdFxuLy8gc2VhcmNoIGZyb20ge0Bjb2RlIGNvbmZpZ30sIGFsbCBvdGhlciAocG90ZW50aWFsbHkgcmVhY2hhYmxlKSBzdGF0ZXMgZm9yXG4vLyB0aGlzIHJ1bGUgd291bGQgaGF2ZSBhIGxvd2VyIHByaW9yaXR5LlxuLy9cbi8vIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIGFuIGFjY2VwdCBzdGF0ZSBpcyByZWFjaGVkLCBvdGhlcndpc2Vcbi8vIHtAY29kZSBmYWxzZX0uXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY2xvc3VyZSA9IGZ1bmN0aW9uKGlucHV0LCBjb25maWcsIGNvbmZpZ3MsXG5cdFx0Y3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZSwgc3BlY3VsYXRpdmUsIHRyZWF0RW9mQXNFcHNpbG9uKSB7XG5cdHZhciBjZmcgPSBudWxsO1xuXHRpZiAoTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcpIHtcblx0XHRjb25zb2xlLmxvZyhcImNsb3N1cmUoXCIgKyBjb25maWcudG9TdHJpbmcodGhpcy5yZWNvZywgdHJ1ZSkgKyBcIilcIik7XG5cdH1cblx0aWYgKGNvbmZpZy5zdGF0ZSBpbnN0YW5jZW9mIFJ1bGVTdG9wU3RhdGUpIHtcblx0XHRpZiAoTGV4ZXJBVE5TaW11bGF0b3IuZGVidWcpIHtcblx0XHRcdGlmICh0aGlzLnJlY29nICE9PSBudWxsKSB7XG5cdFx0XHRcdGNvbnNvbGUubG9nKFwiY2xvc3VyZSBhdCAlcyBydWxlIHN0b3AgJXNcXG5cIiwgdGhpcy5yZWNvZy5ydWxlTmFtZXNbY29uZmlnLnN0YXRlLnJ1bGVJbmRleF0sIGNvbmZpZyk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zb2xlLmxvZyhcImNsb3N1cmUgYXQgcnVsZSBzdG9wICVzXFxuXCIsIGNvbmZpZyk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChjb25maWcuY29udGV4dCA9PT0gbnVsbCB8fCBjb25maWcuY29udGV4dC5oYXNFbXB0eVBhdGgoKSkge1xuXHRcdFx0aWYgKGNvbmZpZy5jb250ZXh0ID09PSBudWxsIHx8IGNvbmZpZy5jb250ZXh0LmlzRW1wdHkoKSkge1xuXHRcdFx0XHRjb25maWdzLmFkZChjb25maWcpO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNvbmZpZ3MuYWRkKG5ldyBMZXhlckFUTkNvbmZpZyh7IHN0YXRlOmNvbmZpZy5zdGF0ZSwgY29udGV4dDpQcmVkaWN0aW9uQ29udGV4dC5FTVBUWX0sIGNvbmZpZykpO1xuXHRcdFx0XHRjdXJyZW50QWx0UmVhY2hlZEFjY2VwdFN0YXRlID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGNvbmZpZy5jb250ZXh0ICE9PSBudWxsICYmICFjb25maWcuY29udGV4dC5pc0VtcHR5KCkpIHtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgY29uZmlnLmNvbnRleHQubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKGNvbmZpZy5jb250ZXh0LmdldFJldHVyblN0YXRlKGkpICE9PSBQcmVkaWN0aW9uQ29udGV4dC5FTVBUWV9SRVRVUk5fU1RBVEUpIHtcblx0XHRcdFx0XHR2YXIgbmV3Q29udGV4dCA9IGNvbmZpZy5jb250ZXh0LmdldFBhcmVudChpKTsgLy8gXCJwb3BcIiByZXR1cm4gc3RhdGVcblx0XHRcdFx0XHR2YXIgcmV0dXJuU3RhdGUgPSB0aGlzLmF0bi5zdGF0ZXNbY29uZmlnLmNvbnRleHQuZ2V0UmV0dXJuU3RhdGUoaSldO1xuXHRcdFx0XHRcdGNmZyA9IG5ldyBMZXhlckFUTkNvbmZpZyh7IHN0YXRlOnJldHVyblN0YXRlLCBjb250ZXh0Om5ld0NvbnRleHQgfSwgY29uZmlnKTtcblx0XHRcdFx0XHRjdXJyZW50QWx0UmVhY2hlZEFjY2VwdFN0YXRlID0gdGhpcy5jbG9zdXJlKGlucHV0LCBjZmcsXG5cdFx0XHRcdFx0XHRcdGNvbmZpZ3MsIGN1cnJlbnRBbHRSZWFjaGVkQWNjZXB0U3RhdGUsIHNwZWN1bGF0aXZlLFxuXHRcdFx0XHRcdFx0XHR0cmVhdEVvZkFzRXBzaWxvbik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGN1cnJlbnRBbHRSZWFjaGVkQWNjZXB0U3RhdGU7XG5cdH1cblx0Ly8gb3B0aW1pemF0aW9uXG5cdGlmICghY29uZmlnLnN0YXRlLmVwc2lsb25Pbmx5VHJhbnNpdGlvbnMpIHtcblx0XHRpZiAoIWN1cnJlbnRBbHRSZWFjaGVkQWNjZXB0U3RhdGUgfHwgIWNvbmZpZy5wYXNzZWRUaHJvdWdoTm9uR3JlZWR5RGVjaXNpb24pIHtcblx0XHRcdGNvbmZpZ3MuYWRkKGNvbmZpZyk7XG5cdFx0fVxuXHR9XG5cdGZvciAodmFyIGogPSAwOyBqIDwgY29uZmlnLnN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aDsgaisrKSB7XG5cdFx0dmFyIHRyYW5zID0gY29uZmlnLnN0YXRlLnRyYW5zaXRpb25zW2pdO1xuXHRcdGNmZyA9IHRoaXMuZ2V0RXBzaWxvblRhcmdldChpbnB1dCwgY29uZmlnLCB0cmFucywgY29uZmlncywgc3BlY3VsYXRpdmUsIHRyZWF0RW9mQXNFcHNpbG9uKTtcblx0XHRpZiAoY2ZnICE9PSBudWxsKSB7XG5cdFx0XHRjdXJyZW50QWx0UmVhY2hlZEFjY2VwdFN0YXRlID0gdGhpcy5jbG9zdXJlKGlucHV0LCBjZmcsIGNvbmZpZ3MsXG5cdFx0XHRcdFx0Y3VycmVudEFsdFJlYWNoZWRBY2NlcHRTdGF0ZSwgc3BlY3VsYXRpdmUsIHRyZWF0RW9mQXNFcHNpbG9uKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGN1cnJlbnRBbHRSZWFjaGVkQWNjZXB0U3RhdGU7XG59O1xuXG4vLyBzaWRlLWVmZmVjdDogY2FuIGFsdGVyIGNvbmZpZ3MuaGFzU2VtYW50aWNDb250ZXh0XG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0RXBzaWxvblRhcmdldCA9IGZ1bmN0aW9uKGlucHV0LCBjb25maWcsIHRyYW5zLFxuXHRcdGNvbmZpZ3MsIHNwZWN1bGF0aXZlLCB0cmVhdEVvZkFzRXBzaWxvbikge1xuXHR2YXIgY2ZnID0gbnVsbDtcblx0aWYgKHRyYW5zLnNlcmlhbGl6YXRpb25UeXBlID09PSBUcmFuc2l0aW9uLlJVTEUpIHtcblx0XHR2YXIgbmV3Q29udGV4dCA9IFNpbmdsZXRvblByZWRpY3Rpb25Db250ZXh0LmNyZWF0ZShjb25maWcuY29udGV4dCwgdHJhbnMuZm9sbG93U3RhdGUuc3RhdGVOdW1iZXIpO1xuXHRcdGNmZyA9IG5ldyBMZXhlckFUTkNvbmZpZyggeyBzdGF0ZTp0cmFucy50YXJnZXQsIGNvbnRleHQ6bmV3Q29udGV4dH0sIGNvbmZpZyk7XG5cdH0gZWxzZSBpZiAodHJhbnMuc2VyaWFsaXphdGlvblR5cGUgPT09IFRyYW5zaXRpb24uUFJFQ0VERU5DRSkge1xuXHRcdHRocm93IFwiUHJlY2VkZW5jZSBwcmVkaWNhdGVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGxleGVycy5cIjtcblx0fSBlbHNlIGlmICh0cmFucy5zZXJpYWxpemF0aW9uVHlwZSA9PT0gVHJhbnNpdGlvbi5QUkVESUNBVEUpIHtcblx0XHQvLyBUcmFjayB0cmF2ZXJzaW5nIHNlbWFudGljIHByZWRpY2F0ZXMuIElmIHdlIHRyYXZlcnNlLFxuXHRcdC8vIHdlIGNhbm5vdCBhZGQgYSBERkEgc3RhdGUgZm9yIHRoaXMgXCJyZWFjaFwiIGNvbXB1dGF0aW9uXG5cdFx0Ly8gYmVjYXVzZSB0aGUgREZBIHdvdWxkIG5vdCB0ZXN0IHRoZSBwcmVkaWNhdGUgYWdhaW4gaW4gdGhlXG5cdFx0Ly8gZnV0dXJlLiBSYXRoZXIgdGhhbiBjcmVhdGluZyBjb2xsZWN0aW9ucyBvZiBzZW1hbnRpYyBwcmVkaWNhdGVzXG5cdFx0Ly8gbGlrZSB2MyBhbmQgdGVzdGluZyB0aGVtIG9uIHByZWRpY3Rpb24sIHY0IHdpbGwgdGVzdCB0aGVtIG9uIHRoZVxuXHRcdC8vIGZseSBhbGwgdGhlIHRpbWUgdXNpbmcgdGhlIEFUTiBub3QgdGhlIERGQS4gVGhpcyBpcyBzbG93ZXIgYnV0XG5cdFx0Ly8gc2VtYW50aWNhbGx5IGl0J3Mgbm90IHVzZWQgdGhhdCBvZnRlbi4gT25lIG9mIHRoZSBrZXkgZWxlbWVudHMgdG9cblx0XHQvLyB0aGlzIHByZWRpY2F0ZSBtZWNoYW5pc20gaXMgbm90IGFkZGluZyBERkEgc3RhdGVzIHRoYXQgc2VlXG5cdFx0Ly8gcHJlZGljYXRlcyBpbW1lZGlhdGVseSBhZnRlcndhcmRzIGluIHRoZSBBVE4uIEZvciBleGFtcGxlLFxuXG5cdFx0Ly8gYSA6IElEIHtwMX0/IHwgSUQge3AyfT8gO1xuXG5cdFx0Ly8gc2hvdWxkIGNyZWF0ZSB0aGUgc3RhcnQgc3RhdGUgZm9yIHJ1bGUgJ2EnICh0byBzYXZlIHN0YXJ0IHN0YXRlXG5cdFx0Ly8gY29tcGV0aXRpb24pLCBidXQgc2hvdWxkIG5vdCBjcmVhdGUgdGFyZ2V0IG9mIElEIHN0YXRlLiBUaGVcblx0XHQvLyBjb2xsZWN0aW9uIG9mIEFUTiBzdGF0ZXMgdGhlIGZvbGxvd2luZyBJRCByZWZlcmVuY2VzIGluY2x1ZGVzXG5cdFx0Ly8gc3RhdGVzIHJlYWNoZWQgYnkgdHJhdmVyc2luZyBwcmVkaWNhdGVzLiBTaW5jZSB0aGlzIGlzIHdoZW4gd2Vcblx0XHQvLyB0ZXN0IHRoZW0sIHdlIGNhbm5vdCBjYXNoIHRoZSBERkEgc3RhdGUgdGFyZ2V0IG9mIElELlxuXG5cdFx0aWYgKExleGVyQVROU2ltdWxhdG9yLmRlYnVnKSB7XG5cdFx0XHRjb25zb2xlLmxvZyhcIkVWQUwgcnVsZSBcIiArIHRyYW5zLnJ1bGVJbmRleCArIFwiOlwiICsgdHJhbnMucHJlZEluZGV4KTtcblx0XHR9XG5cdFx0Y29uZmlncy5oYXNTZW1hbnRpY0NvbnRleHQgPSB0cnVlO1xuXHRcdGlmICh0aGlzLmV2YWx1YXRlUHJlZGljYXRlKGlucHV0LCB0cmFucy5ydWxlSW5kZXgsIHRyYW5zLnByZWRJbmRleCwgc3BlY3VsYXRpdmUpKSB7XG5cdFx0XHRjZmcgPSBuZXcgTGV4ZXJBVE5Db25maWcoeyBzdGF0ZTp0cmFucy50YXJnZXR9LCBjb25maWcpO1xuXHRcdH1cblx0fSBlbHNlIGlmICh0cmFucy5zZXJpYWxpemF0aW9uVHlwZSA9PT0gVHJhbnNpdGlvbi5BQ1RJT04pIHtcblx0XHRpZiAoY29uZmlnLmNvbnRleHQgPT09IG51bGwgfHwgY29uZmlnLmNvbnRleHQuaGFzRW1wdHlQYXRoKCkpIHtcblx0XHRcdC8vIGV4ZWN1dGUgYWN0aW9ucyBhbnl3aGVyZSBpbiB0aGUgc3RhcnQgcnVsZSBmb3IgYSB0b2tlbi5cblx0XHRcdC8vXG5cdFx0XHQvLyBUT0RPOiBpZiB0aGUgZW50cnkgcnVsZSBpcyBpbnZva2VkIHJlY3Vyc2l2ZWx5LCBzb21lXG5cdFx0XHQvLyBhY3Rpb25zIG1heSBiZSBleGVjdXRlZCBkdXJpbmcgdGhlIHJlY3Vyc2l2ZSBjYWxsLiBUaGVcblx0XHRcdC8vIHByb2JsZW0gY2FuIGFwcGVhciB3aGVuIGhhc0VtcHR5UGF0aCgpIGlzIHRydWUgYnV0XG5cdFx0XHQvLyBpc0VtcHR5KCkgaXMgZmFsc2UuIEluIHRoaXMgY2FzZSwgdGhlIGNvbmZpZyBuZWVkcyB0byBiZVxuXHRcdFx0Ly8gc3BsaXQgaW50byB0d28gY29udGV4dHMgLSBvbmUgd2l0aCBqdXN0IHRoZSBlbXB0eSBwYXRoXG5cdFx0XHQvLyBhbmQgYW5vdGhlciB3aXRoIGV2ZXJ5dGhpbmcgYnV0IHRoZSBlbXB0eSBwYXRoLlxuXHRcdFx0Ly8gVW5mb3J0dW5hdGVseSwgdGhlIGN1cnJlbnQgYWxnb3JpdGhtIGRvZXMgbm90IGFsbG93XG5cdFx0XHQvLyBnZXRFcHNpbG9uVGFyZ2V0IHRvIHJldHVybiB0d28gY29uZmlndXJhdGlvbnMsIHNvXG5cdFx0XHQvLyBhZGRpdGlvbmFsIG1vZGlmaWNhdGlvbnMgYXJlIG5lZWRlZCBiZWZvcmUgd2UgY2FuIHN1cHBvcnRcblx0XHRcdC8vIHRoZSBzcGxpdCBvcGVyYXRpb24uXG5cdFx0XHR2YXIgbGV4ZXJBY3Rpb25FeGVjdXRvciA9IExleGVyQWN0aW9uRXhlY3V0b3IuYXBwZW5kKGNvbmZpZy5sZXhlckFjdGlvbkV4ZWN1dG9yLFxuXHRcdFx0XHRcdHRoaXMuYXRuLmxleGVyQWN0aW9uc1t0cmFucy5hY3Rpb25JbmRleF0pO1xuXHRcdFx0Y2ZnID0gbmV3IExleGVyQVROQ29uZmlnKHsgc3RhdGU6dHJhbnMudGFyZ2V0LCBsZXhlckFjdGlvbkV4ZWN1dG9yOmxleGVyQWN0aW9uRXhlY3V0b3IgfSwgY29uZmlnKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gaWdub3JlIGFjdGlvbnMgaW4gcmVmZXJlbmNlZCBydWxlc1xuXHRcdFx0Y2ZnID0gbmV3IExleGVyQVROQ29uZmlnKCB7IHN0YXRlOnRyYW5zLnRhcmdldH0sIGNvbmZpZyk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKHRyYW5zLnNlcmlhbGl6YXRpb25UeXBlID09PSBUcmFuc2l0aW9uLkVQU0lMT04pIHtcblx0XHRjZmcgPSBuZXcgTGV4ZXJBVE5Db25maWcoeyBzdGF0ZTp0cmFucy50YXJnZXR9LCBjb25maWcpO1xuXHR9IGVsc2UgaWYgKHRyYW5zLnNlcmlhbGl6YXRpb25UeXBlID09PSBUcmFuc2l0aW9uLkFUT00gfHxcblx0XHRcdFx0dHJhbnMuc2VyaWFsaXphdGlvblR5cGUgPT09IFRyYW5zaXRpb24uUkFOR0UgfHxcblx0XHRcdFx0dHJhbnMuc2VyaWFsaXphdGlvblR5cGUgPT09IFRyYW5zaXRpb24uU0VUKSB7XG5cdFx0aWYgKHRyZWF0RW9mQXNFcHNpbG9uKSB7XG5cdFx0XHRpZiAodHJhbnMubWF0Y2hlcyhUb2tlbi5FT0YsIDAsIExleGVyLk1BWF9DSEFSX1ZBTFVFKSkge1xuXHRcdFx0XHRjZmcgPSBuZXcgTGV4ZXJBVE5Db25maWcoIHsgc3RhdGU6dHJhbnMudGFyZ2V0IH0sIGNvbmZpZyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiBjZmc7XG59O1xuXG4vLyBFdmFsdWF0ZSBhIHByZWRpY2F0ZSBzcGVjaWZpZWQgaW4gdGhlIGxleGVyLlxuLy9cbi8vIDxwPklmIHtAY29kZSBzcGVjdWxhdGl2ZX0gaXMge0Bjb2RlIHRydWV9LCB0aGlzIG1ldGhvZCB3YXMgY2FsbGVkIGJlZm9yZVxuLy8ge0BsaW5rIC8vY29uc3VtZX0gZm9yIHRoZSBtYXRjaGVkIGNoYXJhY3Rlci4gVGhpcyBtZXRob2Qgc2hvdWxkIGNhbGxcbi8vIHtAbGluayAvL2NvbnN1bWV9IGJlZm9yZSBldmFsdWF0aW5nIHRoZSBwcmVkaWNhdGUgdG8gZW5zdXJlIHBvc2l0aW9uXG4vLyBzZW5zaXRpdmUgdmFsdWVzLCBpbmNsdWRpbmcge0BsaW5rIExleGVyLy9nZXRUZXh0fSwge0BsaW5rIExleGVyLy9nZXRMaW5lfSxcbi8vIGFuZCB7QGxpbmsgTGV4ZXIvL2dldGNvbHVtbn0sIHByb3Blcmx5IHJlZmxlY3QgdGhlIGN1cnJlbnRcbi8vIGxleGVyIHN0YXRlLiBUaGlzIG1ldGhvZCBzaG91bGQgcmVzdG9yZSB7QGNvZGUgaW5wdXR9IGFuZCB0aGUgc2ltdWxhdG9yXG4vLyB0byB0aGUgb3JpZ2luYWwgc3RhdGUgYmVmb3JlIHJldHVybmluZyAoaS5lLiB1bmRvIHRoZSBhY3Rpb25zIG1hZGUgYnkgdGhlXG4vLyBjYWxsIHRvIHtAbGluayAvL2NvbnN1bWV9LjwvcD5cbi8vXG4vLyBAcGFyYW0gaW5wdXQgVGhlIGlucHV0IHN0cmVhbS5cbi8vIEBwYXJhbSBydWxlSW5kZXggVGhlIHJ1bGUgY29udGFpbmluZyB0aGUgcHJlZGljYXRlLlxuLy8gQHBhcmFtIHByZWRJbmRleCBUaGUgaW5kZXggb2YgdGhlIHByZWRpY2F0ZSB3aXRoaW4gdGhlIHJ1bGUuXG4vLyBAcGFyYW0gc3BlY3VsYXRpdmUge0Bjb2RlIHRydWV9IGlmIHRoZSBjdXJyZW50IGluZGV4IGluIHtAY29kZSBpbnB1dH0gaXNcbi8vIG9uZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBwcmVkaWNhdGUncyBsb2NhdGlvbi5cbi8vXG4vLyBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB0aGUgc3BlY2lmaWVkIHByZWRpY2F0ZSBldmFsdWF0ZXMgdG9cbi8vIHtAY29kZSB0cnVlfS5cbi8vIC9cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5ldmFsdWF0ZVByZWRpY2F0ZSA9IGZ1bmN0aW9uKGlucHV0LCBydWxlSW5kZXgsXG5cdFx0cHJlZEluZGV4LCBzcGVjdWxhdGl2ZSkge1xuXHQvLyBhc3N1bWUgdHJ1ZSBpZiBubyByZWNvZ25pemVyIHdhcyBwcm92aWRlZFxuXHRpZiAodGhpcy5yZWNvZyA9PT0gbnVsbCkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdGlmICghc3BlY3VsYXRpdmUpIHtcblx0XHRyZXR1cm4gdGhpcy5yZWNvZy5zZW1wcmVkKG51bGwsIHJ1bGVJbmRleCwgcHJlZEluZGV4KTtcblx0fVxuXHR2YXIgc2F2ZWRjb2x1bW4gPSB0aGlzLmNvbHVtbjtcblx0dmFyIHNhdmVkTGluZSA9IHRoaXMubGluZTtcblx0dmFyIGluZGV4ID0gaW5wdXQuaW5kZXg7XG5cdHZhciBtYXJrZXIgPSBpbnB1dC5tYXJrKCk7XG5cdHRyeSB7XG5cdFx0dGhpcy5jb25zdW1lKGlucHV0KTtcblx0XHRyZXR1cm4gdGhpcy5yZWNvZy5zZW1wcmVkKG51bGwsIHJ1bGVJbmRleCwgcHJlZEluZGV4KTtcblx0fSBmaW5hbGx5IHtcblx0XHR0aGlzLmNvbHVtbiA9IHNhdmVkY29sdW1uO1xuXHRcdHRoaXMubGluZSA9IHNhdmVkTGluZTtcblx0XHRpbnB1dC5zZWVrKGluZGV4KTtcblx0XHRpbnB1dC5yZWxlYXNlKG1hcmtlcik7XG5cdH1cbn07XG5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5jYXB0dXJlU2ltU3RhdGUgPSBmdW5jdGlvbihzZXR0aW5ncywgaW5wdXQsIGRmYVN0YXRlKSB7XG5cdHNldHRpbmdzLmluZGV4ID0gaW5wdXQuaW5kZXg7XG5cdHNldHRpbmdzLmxpbmUgPSB0aGlzLmxpbmU7XG5cdHNldHRpbmdzLmNvbHVtbiA9IHRoaXMuY29sdW1uO1xuXHRzZXR0aW5ncy5kZmFTdGF0ZSA9IGRmYVN0YXRlO1xufTtcblxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmFkZERGQUVkZ2UgPSBmdW5jdGlvbihmcm9tXywgdGssIHRvLCBjZmdzKSB7XG5cdGlmICh0byA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dG8gPSBudWxsO1xuXHR9XG5cdGlmIChjZmdzID09PSB1bmRlZmluZWQpIHtcblx0XHRjZmdzID0gbnVsbDtcblx0fVxuXHRpZiAodG8gPT09IG51bGwgJiYgY2ZncyAhPT0gbnVsbCkge1xuXHRcdC8vIGxlYWRpbmcgdG8gdGhpcyBjYWxsLCBBVE5Db25maWdTZXQuaGFzU2VtYW50aWNDb250ZXh0IGlzIHVzZWQgYXMgYVxuXHRcdC8vIG1hcmtlciBpbmRpY2F0aW5nIGR5bmFtaWMgcHJlZGljYXRlIGV2YWx1YXRpb24gbWFrZXMgdGhpcyBlZGdlXG5cdFx0Ly8gZGVwZW5kZW50IG9uIHRoZSBzcGVjaWZpYyBpbnB1dCBzZXF1ZW5jZSwgc28gdGhlIHN0YXRpYyBlZGdlIGluIHRoZVxuXHRcdC8vIERGQSBzaG91bGQgYmUgb21pdHRlZC4gVGhlIHRhcmdldCBERkFTdGF0ZSBpcyBzdGlsbCBjcmVhdGVkIHNpbmNlXG5cdFx0Ly8gZXhlY0FUTiBoYXMgdGhlIGFiaWxpdHkgdG8gcmVzeW5jaHJvbml6ZSB3aXRoIHRoZSBERkEgc3RhdGUgY2FjaGVcblx0XHQvLyBmb2xsb3dpbmcgdGhlIHByZWRpY2F0ZSBldmFsdWF0aW9uIHN0ZXAuXG5cdFx0Ly9cblx0XHQvLyBUSlAgbm90ZXM6IG5leHQgdGltZSB0aHJvdWdoIHRoZSBERkEsIHdlIHNlZSBhIHByZWQgYWdhaW4gYW5kIGV2YWwuXG5cdFx0Ly8gSWYgdGhhdCBnZXRzIHVzIHRvIGEgcHJldmlvdXNseSBjcmVhdGVkIChidXQgZGFuZ2xpbmcpIERGQVxuXHRcdC8vIHN0YXRlLCB3ZSBjYW4gY29udGludWUgaW4gcHVyZSBERkEgbW9kZSBmcm9tIHRoZXJlLlxuXHRcdC8vIC9cblx0XHR2YXIgc3VwcHJlc3NFZGdlID0gY2Zncy5oYXNTZW1hbnRpY0NvbnRleHQ7XG5cdFx0Y2Zncy5oYXNTZW1hbnRpY0NvbnRleHQgPSBmYWxzZTtcblxuXHRcdHRvID0gdGhpcy5hZGRERkFTdGF0ZShjZmdzKTtcblxuXHRcdGlmIChzdXBwcmVzc0VkZ2UpIHtcblx0XHRcdHJldHVybiB0bztcblx0XHR9XG5cdH1cblx0Ly8gYWRkIHRoZSBlZGdlXG5cdGlmICh0ayA8IExleGVyQVROU2ltdWxhdG9yLk1JTl9ERkFfRURHRSB8fCB0ayA+IExleGVyQVROU2ltdWxhdG9yLk1BWF9ERkFfRURHRSkge1xuXHRcdC8vIE9ubHkgdHJhY2sgZWRnZXMgd2l0aGluIHRoZSBERkEgYm91bmRzXG5cdFx0cmV0dXJuIHRvO1xuXHR9XG5cdGlmIChMZXhlckFUTlNpbXVsYXRvci5kZWJ1Zykge1xuXHRcdGNvbnNvbGUubG9nKFwiRURHRSBcIiArIGZyb21fICsgXCIgLT4gXCIgKyB0byArIFwiIHVwb24gXCIgKyB0ayk7XG5cdH1cblx0aWYgKGZyb21fLmVkZ2VzID09PSBudWxsKSB7XG5cdFx0Ly8gbWFrZSByb29tIGZvciB0b2tlbnMgMS4ubiBhbmQgLTEgbWFzcXVlcmFkaW5nIGFzIGluZGV4IDBcblx0XHRmcm9tXy5lZGdlcyA9IFtdO1xuXHR9XG5cdGZyb21fLmVkZ2VzW3RrIC0gTGV4ZXJBVE5TaW11bGF0b3IuTUlOX0RGQV9FREdFXSA9IHRvOyAvLyBjb25uZWN0XG5cblx0cmV0dXJuIHRvO1xufTtcblxuLy8gQWRkIGEgbmV3IERGQSBzdGF0ZSBpZiB0aGVyZSBpc24ndCBvbmUgd2l0aCB0aGlzIHNldCBvZlxuLy8gY29uZmlndXJhdGlvbnMgYWxyZWFkeS4gVGhpcyBtZXRob2QgYWxzbyBkZXRlY3RzIHRoZSBmaXJzdFxuLy8gY29uZmlndXJhdGlvbiBjb250YWluaW5nIGFuIEFUTiBydWxlIHN0b3Agc3RhdGUuIExhdGVyLCB3aGVuXG4vLyB0cmF2ZXJzaW5nIHRoZSBERkEsIHdlIHdpbGwga25vdyB3aGljaCBydWxlIHRvIGFjY2VwdC5cbkxleGVyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5hZGRERkFTdGF0ZSA9IGZ1bmN0aW9uKGNvbmZpZ3MpIHtcblx0dmFyIHByb3Bvc2VkID0gbmV3IERGQVN0YXRlKG51bGwsIGNvbmZpZ3MpO1xuXHR2YXIgZmlyc3RDb25maWdXaXRoUnVsZVN0b3BTdGF0ZSA9IG51bGw7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgY29uZmlncy5pdGVtcy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciBjZmcgPSBjb25maWdzLml0ZW1zW2ldO1xuXHRcdGlmIChjZmcuc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSB7XG5cdFx0XHRmaXJzdENvbmZpZ1dpdGhSdWxlU3RvcFN0YXRlID0gY2ZnO1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cdGlmIChmaXJzdENvbmZpZ1dpdGhSdWxlU3RvcFN0YXRlICE9PSBudWxsKSB7XG5cdFx0cHJvcG9zZWQuaXNBY2NlcHRTdGF0ZSA9IHRydWU7XG5cdFx0cHJvcG9zZWQubGV4ZXJBY3Rpb25FeGVjdXRvciA9IGZpcnN0Q29uZmlnV2l0aFJ1bGVTdG9wU3RhdGUubGV4ZXJBY3Rpb25FeGVjdXRvcjtcblx0XHRwcm9wb3NlZC5wcmVkaWN0aW9uID0gdGhpcy5hdG4ucnVsZVRvVG9rZW5UeXBlW2ZpcnN0Q29uZmlnV2l0aFJ1bGVTdG9wU3RhdGUuc3RhdGUucnVsZUluZGV4XTtcblx0fVxuXHR2YXIgZGZhID0gdGhpcy5kZWNpc2lvblRvREZBW3RoaXMubW9kZV07XG5cdHZhciBleGlzdGluZyA9IGRmYS5zdGF0ZXMuZ2V0KHByb3Bvc2VkKTtcblx0aWYgKGV4aXN0aW5nIT09bnVsbCkge1xuXHRcdHJldHVybiBleGlzdGluZztcblx0fVxuXHR2YXIgbmV3U3RhdGUgPSBwcm9wb3NlZDtcblx0bmV3U3RhdGUuc3RhdGVOdW1iZXIgPSBkZmEuc3RhdGVzLmxlbmd0aDtcblx0Y29uZmlncy5zZXRSZWFkb25seSh0cnVlKTtcblx0bmV3U3RhdGUuY29uZmlncyA9IGNvbmZpZ3M7XG5cdGRmYS5zdGF0ZXMuYWRkKG5ld1N0YXRlKTtcblx0cmV0dXJuIG5ld1N0YXRlO1xufTtcblxuTGV4ZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmdldERGQSA9IGZ1bmN0aW9uKG1vZGUpIHtcblx0cmV0dXJuIHRoaXMuZGVjaXNpb25Ub0RGQVttb2RlXTtcbn07XG5cbi8vIEdldCB0aGUgdGV4dCBtYXRjaGVkIHNvIGZhciBmb3IgdGhlIGN1cnJlbnQgdG9rZW4uXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKGlucHV0KSB7XG5cdC8vIGluZGV4IGlzIGZpcnN0IGxvb2thaGVhZCBjaGFyLCBkb24ndCBpbmNsdWRlLlxuXHRyZXR1cm4gaW5wdXQuZ2V0VGV4dCh0aGlzLnN0YXJ0SW5kZXgsIGlucHV0LmluZGV4IC0gMSk7XG59O1xuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY29uc3VtZSA9IGZ1bmN0aW9uKGlucHV0KSB7XG5cdHZhciBjdXJDaGFyID0gaW5wdXQuTEEoMSk7XG5cdGlmIChjdXJDaGFyID09PSBcIlxcblwiLmNoYXJDb2RlQXQoMCkpIHtcblx0XHR0aGlzLmxpbmUgKz0gMTtcblx0XHR0aGlzLmNvbHVtbiA9IDA7XG5cdH0gZWxzZSB7XG5cdFx0dGhpcy5jb2x1bW4gKz0gMTtcblx0fVxuXHRpbnB1dC5jb25zdW1lKCk7XG59O1xuXG5MZXhlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0VG9rZW5OYW1lID0gZnVuY3Rpb24odHQpIHtcblx0aWYgKHR0ID09PSAtMSkge1xuXHRcdHJldHVybiBcIkVPRlwiO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBcIidcIiArIFN0cmluZy5mcm9tQ2hhckNvZGUodHQpICsgXCInXCI7XG5cdH1cbn07XG5cbmV4cG9ydHMuTGV4ZXJBVE5TaW11bGF0b3IgPSBMZXhlckFUTlNpbXVsYXRvcjtcbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4gLy9cblxuZnVuY3Rpb24gTGV4ZXJBY3Rpb25UeXBlKCkge1xufVxuXG5MZXhlckFjdGlvblR5cGUuQ0hBTk5FTCA9IDA7ICAgICAvL1RoZSB0eXBlIG9mIGEge0BsaW5rIExleGVyQ2hhbm5lbEFjdGlvbn0gYWN0aW9uLlxuTGV4ZXJBY3Rpb25UeXBlLkNVU1RPTSA9IDE7ICAgICAgLy9UaGUgdHlwZSBvZiBhIHtAbGluayBMZXhlckN1c3RvbUFjdGlvbn0gYWN0aW9uLlxuTGV4ZXJBY3Rpb25UeXBlLk1PREUgPSAyOyAgICAgICAgLy9UaGUgdHlwZSBvZiBhIHtAbGluayBMZXhlck1vZGVBY3Rpb259IGFjdGlvbi5cbkxleGVyQWN0aW9uVHlwZS5NT1JFID0gMzsgICAgICAgIC8vVGhlIHR5cGUgb2YgYSB7QGxpbmsgTGV4ZXJNb3JlQWN0aW9ufSBhY3Rpb24uXG5MZXhlckFjdGlvblR5cGUuUE9QX01PREUgPSA0OyAgICAvL1RoZSB0eXBlIG9mIGEge0BsaW5rIExleGVyUG9wTW9kZUFjdGlvbn0gYWN0aW9uLlxuTGV4ZXJBY3Rpb25UeXBlLlBVU0hfTU9ERSA9IDU7ICAgLy9UaGUgdHlwZSBvZiBhIHtAbGluayBMZXhlclB1c2hNb2RlQWN0aW9ufSBhY3Rpb24uXG5MZXhlckFjdGlvblR5cGUuU0tJUCA9IDY7ICAgICAgICAvL1RoZSB0eXBlIG9mIGEge0BsaW5rIExleGVyU2tpcEFjdGlvbn0gYWN0aW9uLlxuTGV4ZXJBY3Rpb25UeXBlLlRZUEUgPSA3OyAgICAgICAgLy9UaGUgdHlwZSBvZiBhIHtAbGluayBMZXhlclR5cGVBY3Rpb259IGFjdGlvbi5cblxuZnVuY3Rpb24gTGV4ZXJBY3Rpb24oYWN0aW9uKSB7XG4gICAgdGhpcy5hY3Rpb25UeXBlID0gYWN0aW9uO1xuICAgIHRoaXMuaXNQb3NpdGlvbkRlcGVuZGVudCA9IGZhbHNlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5MZXhlckFjdGlvbi5wcm90b3R5cGUuaGFzaENvZGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgaGFzaCA9IG5ldyBIYXNoKCk7XG4gICAgdGhpcy51cGRhdGVIYXNoQ29kZShoYXNoKTtcbiAgICByZXR1cm4gaGFzaC5maW5pc2goKVxufTtcblxuTGV4ZXJBY3Rpb24ucHJvdG90eXBlLnVwZGF0ZUhhc2hDb2RlID0gZnVuY3Rpb24oaGFzaCkge1xuICAgIGhhc2gudXBkYXRlKHRoaXMuYWN0aW9uVHlwZSk7XG59O1xuXG5MZXhlckFjdGlvbi5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcbiAgICByZXR1cm4gdGhpcyA9PT0gb3RoZXI7XG59O1xuXG5cblxuLy9cbi8vIEltcGxlbWVudHMgdGhlIHtAY29kZSBza2lwfSBsZXhlciBhY3Rpb24gYnkgY2FsbGluZyB7QGxpbmsgTGV4ZXIvL3NraXB9LlxuLy9cbi8vIDxwPlRoZSB7QGNvZGUgc2tpcH0gY29tbWFuZCBkb2VzIG5vdCBoYXZlIGFueSBwYXJhbWV0ZXJzLCBzbyB0aGlzIGFjdGlvbiBpc1xuLy8gaW1wbGVtZW50ZWQgYXMgYSBzaW5nbGV0b24gaW5zdGFuY2UgZXhwb3NlZCBieSB7QGxpbmsgLy9JTlNUQU5DRX0uPC9wPlxuZnVuY3Rpb24gTGV4ZXJTa2lwQWN0aW9uKCkge1xuXHRMZXhlckFjdGlvbi5jYWxsKHRoaXMsIExleGVyQWN0aW9uVHlwZS5TS0lQKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkxleGVyU2tpcEFjdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKExleGVyQWN0aW9uLnByb3RvdHlwZSk7XG5MZXhlclNraXBBY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGV4ZXJTa2lwQWN0aW9uO1xuXG4vLyBQcm92aWRlcyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGlzIHBhcmFtZXRlcmxlc3MgbGV4ZXIgYWN0aW9uLlxuTGV4ZXJTa2lwQWN0aW9uLklOU1RBTkNFID0gbmV3IExleGVyU2tpcEFjdGlvbigpO1xuXG5MZXhlclNraXBBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihsZXhlcikge1xuICAgIGxleGVyLnNraXAoKTtcbn07XG5cbkxleGVyU2tpcEFjdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIFwic2tpcFwiO1xufTtcblxuLy8gIEltcGxlbWVudHMgdGhlIHtAY29kZSB0eXBlfSBsZXhlciBhY3Rpb24gYnkgY2FsbGluZyB7QGxpbmsgTGV4ZXIvL3NldFR5cGV9XG4vLyB3aXRoIHRoZSBhc3NpZ25lZCB0eXBlLlxuZnVuY3Rpb24gTGV4ZXJUeXBlQWN0aW9uKHR5cGUpIHtcblx0TGV4ZXJBY3Rpb24uY2FsbCh0aGlzLCBMZXhlckFjdGlvblR5cGUuVFlQRSk7XG5cdHRoaXMudHlwZSA9IHR5cGU7XG5cdHJldHVybiB0aGlzO1xufVxuXG5MZXhlclR5cGVBY3Rpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMZXhlckFjdGlvbi5wcm90b3R5cGUpO1xuTGV4ZXJUeXBlQWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExleGVyVHlwZUFjdGlvbjtcblxuTGV4ZXJUeXBlQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24obGV4ZXIpIHtcbiAgICBsZXhlci50eXBlID0gdGhpcy50eXBlO1xufTtcblxuTGV4ZXJUeXBlQWN0aW9uLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLmFjdGlvblR5cGUsIHRoaXMudHlwZSk7XG59O1xuXG5cbkxleGVyVHlwZUFjdGlvbi5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBpZih0aGlzID09PSBvdGhlcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCEgKG90aGVyIGluc3RhbmNlb2YgTGV4ZXJUeXBlQWN0aW9uKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gb3RoZXIudHlwZTtcbiAgICB9XG59O1xuXG5MZXhlclR5cGVBY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwidHlwZShcIiArIHRoaXMudHlwZSArIFwiKVwiO1xufTtcblxuLy8gSW1wbGVtZW50cyB0aGUge0Bjb2RlIHB1c2hNb2RlfSBsZXhlciBhY3Rpb24gYnkgY2FsbGluZ1xuLy8ge0BsaW5rIExleGVyLy9wdXNoTW9kZX0gd2l0aCB0aGUgYXNzaWduZWQgbW9kZS5cbmZ1bmN0aW9uIExleGVyUHVzaE1vZGVBY3Rpb24obW9kZSkge1xuXHRMZXhlckFjdGlvbi5jYWxsKHRoaXMsIExleGVyQWN0aW9uVHlwZS5QVVNIX01PREUpO1xuICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkxleGVyUHVzaE1vZGVBY3Rpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMZXhlckFjdGlvbi5wcm90b3R5cGUpO1xuTGV4ZXJQdXNoTW9kZUFjdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlclB1c2hNb2RlQWN0aW9uO1xuXG4vLyA8cD5UaGlzIGFjdGlvbiBpcyBpbXBsZW1lbnRlZCBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vcHVzaE1vZGV9IHdpdGggdGhlXG4vLyB2YWx1ZSBwcm92aWRlZCBieSB7QGxpbmsgLy9nZXRNb2RlfS48L3A+XG5MZXhlclB1c2hNb2RlQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24obGV4ZXIpIHtcbiAgICBsZXhlci5wdXNoTW9kZSh0aGlzLm1vZGUpO1xufTtcblxuTGV4ZXJQdXNoTW9kZUFjdGlvbi5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5hY3Rpb25UeXBlLCB0aGlzLm1vZGUpO1xufTtcblxuTGV4ZXJQdXNoTW9kZUFjdGlvbi5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBpZiAodGhpcyA9PT0gb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghIChvdGhlciBpbnN0YW5jZW9mIExleGVyUHVzaE1vZGVBY3Rpb24pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2RlID09PSBvdGhlci5tb2RlO1xuICAgIH1cbn07XG5cbkxleGVyUHVzaE1vZGVBY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBcInB1c2hNb2RlKFwiICsgdGhpcy5tb2RlICsgXCIpXCI7XG59O1xuXG5cbi8vIEltcGxlbWVudHMgdGhlIHtAY29kZSBwb3BNb2RlfSBsZXhlciBhY3Rpb24gYnkgY2FsbGluZyB7QGxpbmsgTGV4ZXIvL3BvcE1vZGV9LlxuLy9cbi8vIDxwPlRoZSB7QGNvZGUgcG9wTW9kZX0gY29tbWFuZCBkb2VzIG5vdCBoYXZlIGFueSBwYXJhbWV0ZXJzLCBzbyB0aGlzIGFjdGlvbiBpc1xuLy8gaW1wbGVtZW50ZWQgYXMgYSBzaW5nbGV0b24gaW5zdGFuY2UgZXhwb3NlZCBieSB7QGxpbmsgLy9JTlNUQU5DRX0uPC9wPlxuZnVuY3Rpb24gTGV4ZXJQb3BNb2RlQWN0aW9uKCkge1xuXHRMZXhlckFjdGlvbi5jYWxsKHRoaXMsTGV4ZXJBY3Rpb25UeXBlLlBPUF9NT0RFKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkxleGVyUG9wTW9kZUFjdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKExleGVyQWN0aW9uLnByb3RvdHlwZSk7XG5MZXhlclBvcE1vZGVBY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGV4ZXJQb3BNb2RlQWN0aW9uO1xuXG5MZXhlclBvcE1vZGVBY3Rpb24uSU5TVEFOQ0UgPSBuZXcgTGV4ZXJQb3BNb2RlQWN0aW9uKCk7XG5cbi8vIDxwPlRoaXMgYWN0aW9uIGlzIGltcGxlbWVudGVkIGJ5IGNhbGxpbmcge0BsaW5rIExleGVyLy9wb3BNb2RlfS48L3A+XG5MZXhlclBvcE1vZGVBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihsZXhlcikge1xuICAgIGxleGVyLnBvcE1vZGUoKTtcbn07XG5cbkxleGVyUG9wTW9kZUFjdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIFwicG9wTW9kZVwiO1xufTtcblxuLy8gSW1wbGVtZW50cyB0aGUge0Bjb2RlIG1vcmV9IGxleGVyIGFjdGlvbiBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vbW9yZX0uXG4vL1xuLy8gPHA+VGhlIHtAY29kZSBtb3JlfSBjb21tYW5kIGRvZXMgbm90IGhhdmUgYW55IHBhcmFtZXRlcnMsIHNvIHRoaXMgYWN0aW9uIGlzXG4vLyBpbXBsZW1lbnRlZCBhcyBhIHNpbmdsZXRvbiBpbnN0YW5jZSBleHBvc2VkIGJ5IHtAbGluayAvL0lOU1RBTkNFfS48L3A+XG5mdW5jdGlvbiBMZXhlck1vcmVBY3Rpb24oKSB7XG5cdExleGVyQWN0aW9uLmNhbGwodGhpcywgTGV4ZXJBY3Rpb25UeXBlLk1PUkUpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJNb3JlQWN0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTGV4ZXJBY3Rpb24ucHJvdG90eXBlKTtcbkxleGVyTW9yZUFjdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlck1vcmVBY3Rpb247XG5cbkxleGVyTW9yZUFjdGlvbi5JTlNUQU5DRSA9IG5ldyBMZXhlck1vcmVBY3Rpb24oKTtcblxuLy8gPHA+VGhpcyBhY3Rpb24gaXMgaW1wbGVtZW50ZWQgYnkgY2FsbGluZyB7QGxpbmsgTGV4ZXIvL3BvcE1vZGV9LjwvcD5cbkxleGVyTW9yZUFjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGxleGVyKSB7XG4gICAgbGV4ZXIubW9yZSgpO1xufTtcblxuTGV4ZXJNb3JlQWN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBcIm1vcmVcIjtcbn07XG5cblxuLy8gSW1wbGVtZW50cyB0aGUge0Bjb2RlIG1vZGV9IGxleGVyIGFjdGlvbiBieSBjYWxsaW5nIHtAbGluayBMZXhlci8vbW9kZX0gd2l0aFxuLy8gdGhlIGFzc2lnbmVkIG1vZGUuXG5mdW5jdGlvbiBMZXhlck1vZGVBY3Rpb24obW9kZSkge1xuXHRMZXhlckFjdGlvbi5jYWxsKHRoaXMsIExleGVyQWN0aW9uVHlwZS5NT0RFKTtcbiAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5MZXhlck1vZGVBY3Rpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShMZXhlckFjdGlvbi5wcm90b3R5cGUpO1xuTGV4ZXJNb2RlQWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExleGVyTW9kZUFjdGlvbjtcblxuLy8gPHA+VGhpcyBhY3Rpb24gaXMgaW1wbGVtZW50ZWQgYnkgY2FsbGluZyB7QGxpbmsgTGV4ZXIvL21vZGV9IHdpdGggdGhlXG4vLyB2YWx1ZSBwcm92aWRlZCBieSB7QGxpbmsgLy9nZXRNb2RlfS48L3A+XG5MZXhlck1vZGVBY3Rpb24ucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihsZXhlcikge1xuICAgIGxleGVyLm1vZGUodGhpcy5tb2RlKTtcbn07XG5cbkxleGVyTW9kZUFjdGlvbi5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5hY3Rpb25UeXBlLCB0aGlzLm1vZGUpO1xufTtcblxuTGV4ZXJNb2RlQWN0aW9uLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIGlmICh0aGlzID09PSBvdGhlcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCEgKG90aGVyIGluc3RhbmNlb2YgTGV4ZXJNb2RlQWN0aW9uKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubW9kZSA9PT0gb3RoZXIubW9kZTtcbiAgICB9XG59O1xuXG5MZXhlck1vZGVBY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwibW9kZShcIiArIHRoaXMubW9kZSArIFwiKVwiO1xufTtcblxuLy8gRXhlY3V0ZXMgYSBjdXN0b20gbGV4ZXIgYWN0aW9uIGJ5IGNhbGxpbmcge0BsaW5rIFJlY29nbml6ZXIvL2FjdGlvbn0gd2l0aCB0aGVcbi8vIHJ1bGUgYW5kIGFjdGlvbiBpbmRleGVzIGFzc2lnbmVkIHRvIHRoZSBjdXN0b20gYWN0aW9uLiBUaGUgaW1wbGVtZW50YXRpb24gb2Zcbi8vIGEgY3VzdG9tIGFjdGlvbiBpcyBhZGRlZCB0byB0aGUgZ2VuZXJhdGVkIGNvZGUgZm9yIHRoZSBsZXhlciBpbiBhbiBvdmVycmlkZVxuLy8gb2Yge0BsaW5rIFJlY29nbml6ZXIvL2FjdGlvbn0gd2hlbiB0aGUgZ3JhbW1hciBpcyBjb21waWxlZC5cbi8vXG4vLyA8cD5UaGlzIGNsYXNzIG1heSByZXByZXNlbnQgZW1iZWRkZWQgYWN0aW9ucyBjcmVhdGVkIHdpdGggdGhlIDxjb2RlPnsuLi59PC9jb2RlPlxuLy8gc3ludGF4IGluIEFOVExSIDQsIGFzIHdlbGwgYXMgYWN0aW9ucyBjcmVhdGVkIGZvciBsZXhlciBjb21tYW5kcyB3aGVyZSB0aGVcbi8vIGNvbW1hbmQgYXJndW1lbnQgY291bGQgbm90IGJlIGV2YWx1YXRlZCB3aGVuIHRoZSBncmFtbWFyIHdhcyBjb21waWxlZC48L3A+XG5cblxuICAgIC8vIENvbnN0cnVjdHMgYSBjdXN0b20gbGV4ZXIgYWN0aW9uIHdpdGggdGhlIHNwZWNpZmllZCBydWxlIGFuZCBhY3Rpb25cbiAgICAvLyBpbmRleGVzLlxuICAgIC8vXG4gICAgLy8gQHBhcmFtIHJ1bGVJbmRleCBUaGUgcnVsZSBpbmRleCB0byB1c2UgZm9yIGNhbGxzIHRvXG4gICAgLy8ge0BsaW5rIFJlY29nbml6ZXIvL2FjdGlvbn0uXG4gICAgLy8gQHBhcmFtIGFjdGlvbkluZGV4IFRoZSBhY3Rpb24gaW5kZXggdG8gdXNlIGZvciBjYWxscyB0b1xuICAgIC8vIHtAbGluayBSZWNvZ25pemVyLy9hY3Rpb259LlxuXG5mdW5jdGlvbiBMZXhlckN1c3RvbUFjdGlvbihydWxlSW5kZXgsIGFjdGlvbkluZGV4KSB7XG5cdExleGVyQWN0aW9uLmNhbGwodGhpcywgTGV4ZXJBY3Rpb25UeXBlLkNVU1RPTSk7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBydWxlSW5kZXg7XG4gICAgdGhpcy5hY3Rpb25JbmRleCA9IGFjdGlvbkluZGV4O1xuICAgIHRoaXMuaXNQb3NpdGlvbkRlcGVuZGVudCA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkxleGVyQ3VzdG9tQWN0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTGV4ZXJBY3Rpb24ucHJvdG90eXBlKTtcbkxleGVyQ3VzdG9tQWN0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IExleGVyQ3VzdG9tQWN0aW9uO1xuXG4vLyA8cD5DdXN0b20gYWN0aW9ucyBhcmUgaW1wbGVtZW50ZWQgYnkgY2FsbGluZyB7QGxpbmsgTGV4ZXIvL2FjdGlvbn0gd2l0aCB0aGVcbi8vIGFwcHJvcHJpYXRlIHJ1bGUgYW5kIGFjdGlvbiBpbmRleGVzLjwvcD5cbkxleGVyQ3VzdG9tQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24obGV4ZXIpIHtcbiAgICBsZXhlci5hY3Rpb24obnVsbCwgdGhpcy5ydWxlSW5kZXgsIHRoaXMuYWN0aW9uSW5kZXgpO1xufTtcblxuTGV4ZXJDdXN0b21BY3Rpb24ucHJvdG90eXBlLnVwZGF0ZUhhc2hDb2RlID0gZnVuY3Rpb24oaGFzaCkge1xuICAgIGhhc2gudXBkYXRlKHRoaXMuYWN0aW9uVHlwZSwgdGhpcy5ydWxlSW5kZXgsIHRoaXMuYWN0aW9uSW5kZXgpO1xufTtcblxuTGV4ZXJDdXN0b21BY3Rpb24ucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG4gICAgaWYgKHRoaXMgPT09IG90aGVyKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoISAob3RoZXIgaW5zdGFuY2VvZiBMZXhlckN1c3RvbUFjdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJ1bGVJbmRleCA9PT0gb3RoZXIucnVsZUluZGV4ICYmIHRoaXMuYWN0aW9uSW5kZXggPT09IG90aGVyLmFjdGlvbkluZGV4O1xuICAgIH1cbn07XG5cbi8vIEltcGxlbWVudHMgdGhlIHtAY29kZSBjaGFubmVsfSBsZXhlciBhY3Rpb24gYnkgY2FsbGluZ1xuLy8ge0BsaW5rIExleGVyLy9zZXRDaGFubmVsfSB3aXRoIHRoZSBhc3NpZ25lZCBjaGFubmVsLlxuLy8gQ29uc3RydWN0cyBhIG5ldyB7QGNvZGUgY2hhbm5lbH0gYWN0aW9uIHdpdGggdGhlIHNwZWNpZmllZCBjaGFubmVsIHZhbHVlLlxuLy8gQHBhcmFtIGNoYW5uZWwgVGhlIGNoYW5uZWwgdmFsdWUgdG8gcGFzcyB0byB7QGxpbmsgTGV4ZXIvL3NldENoYW5uZWx9LlxuZnVuY3Rpb24gTGV4ZXJDaGFubmVsQWN0aW9uKGNoYW5uZWwpIHtcblx0TGV4ZXJBY3Rpb24uY2FsbCh0aGlzLCBMZXhlckFjdGlvblR5cGUuQ0hBTk5FTCk7XG4gICAgdGhpcy5jaGFubmVsID0gY2hhbm5lbDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuTGV4ZXJDaGFubmVsQWN0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoTGV4ZXJBY3Rpb24ucHJvdG90eXBlKTtcbkxleGVyQ2hhbm5lbEFjdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBMZXhlckNoYW5uZWxBY3Rpb247XG5cbi8vIDxwPlRoaXMgYWN0aW9uIGlzIGltcGxlbWVudGVkIGJ5IGNhbGxpbmcge0BsaW5rIExleGVyLy9zZXRDaGFubmVsfSB3aXRoIHRoZVxuLy8gdmFsdWUgcHJvdmlkZWQgYnkge0BsaW5rIC8vZ2V0Q2hhbm5lbH0uPC9wPlxuTGV4ZXJDaGFubmVsQWN0aW9uLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24obGV4ZXIpIHtcbiAgICBsZXhlci5fY2hhbm5lbCA9IHRoaXMuY2hhbm5lbDtcbn07XG5cbkxleGVyQ2hhbm5lbEFjdGlvbi5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5hY3Rpb25UeXBlLCB0aGlzLmNoYW5uZWwpO1xufTtcblxuTGV4ZXJDaGFubmVsQWN0aW9uLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuICAgIGlmICh0aGlzID09PSBvdGhlcikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKCEgKG90aGVyIGluc3RhbmNlb2YgTGV4ZXJDaGFubmVsQWN0aW9uKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hhbm5lbCA9PT0gb3RoZXIuY2hhbm5lbDtcbiAgICB9XG59O1xuXG5MZXhlckNoYW5uZWxBY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIFwiY2hhbm5lbChcIiArIHRoaXMuY2hhbm5lbCArIFwiKVwiO1xufTtcblxuLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgTGV4ZXJBY3Rpb259IGlzIHVzZWQgZm9yIHRyYWNraW5nIGlucHV0IG9mZnNldHNcbi8vIGZvciBwb3NpdGlvbi1kZXBlbmRlbnQgYWN0aW9ucyB3aXRoaW4gYSB7QGxpbmsgTGV4ZXJBY3Rpb25FeGVjdXRvcn0uXG4vL1xuLy8gPHA+VGhpcyBhY3Rpb24gaXMgbm90IHNlcmlhbGl6ZWQgYXMgcGFydCBvZiB0aGUgQVROLCBhbmQgaXMgb25seSByZXF1aXJlZCBmb3Jcbi8vIHBvc2l0aW9uLWRlcGVuZGVudCBsZXhlciBhY3Rpb25zIHdoaWNoIGFwcGVhciBhdCBhIGxvY2F0aW9uIG90aGVyIHRoYW4gdGhlXG4vLyBlbmQgb2YgYSBydWxlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBERkEgb3B0aW1pemF0aW9ucyBlbXBsb3llZCBmb3Jcbi8vIGxleGVyIGFjdGlvbnMsIHNlZSB7QGxpbmsgTGV4ZXJBY3Rpb25FeGVjdXRvci8vYXBwZW5kfSBhbmRcbi8vIHtAbGluayBMZXhlckFjdGlvbkV4ZWN1dG9yLy9maXhPZmZzZXRCZWZvcmVNYXRjaH0uPC9wPlxuXG4vLyBDb25zdHJ1Y3RzIGEgbmV3IGluZGV4ZWQgY3VzdG9tIGFjdGlvbiBieSBhc3NvY2lhdGluZyBhIGNoYXJhY3RlciBvZmZzZXRcbi8vIHdpdGggYSB7QGxpbmsgTGV4ZXJBY3Rpb259LlxuLy9cbi8vIDxwPk5vdGU6IFRoaXMgY2xhc3MgaXMgb25seSByZXF1aXJlZCBmb3IgbGV4ZXIgYWN0aW9ucyBmb3Igd2hpY2hcbi8vIHtAbGluayBMZXhlckFjdGlvbi8vaXNQb3NpdGlvbkRlcGVuZGVudH0gcmV0dXJucyB7QGNvZGUgdHJ1ZX0uPC9wPlxuLy9cbi8vIEBwYXJhbSBvZmZzZXQgVGhlIG9mZnNldCBpbnRvIHRoZSBpbnB1dCB7QGxpbmsgQ2hhclN0cmVhbX0sIHJlbGF0aXZlIHRvXG4vLyB0aGUgdG9rZW4gc3RhcnQgaW5kZXgsIGF0IHdoaWNoIHRoZSBzcGVjaWZpZWQgbGV4ZXIgYWN0aW9uIHNob3VsZCBiZVxuLy8gZXhlY3V0ZWQuXG4vLyBAcGFyYW0gYWN0aW9uIFRoZSBsZXhlciBhY3Rpb24gdG8gZXhlY3V0ZSBhdCBhIHBhcnRpY3VsYXIgb2Zmc2V0IGluIHRoZVxuLy8gaW5wdXQge0BsaW5rIENoYXJTdHJlYW19LlxuZnVuY3Rpb24gTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uKG9mZnNldCwgYWN0aW9uKSB7XG5cdExleGVyQWN0aW9uLmNhbGwodGhpcywgYWN0aW9uLmFjdGlvblR5cGUpO1xuICAgIHRoaXMub2Zmc2V0ID0gb2Zmc2V0O1xuICAgIHRoaXMuYWN0aW9uID0gYWN0aW9uO1xuICAgIHRoaXMuaXNQb3NpdGlvbkRlcGVuZGVudCA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cbkxleGVySW5kZXhlZEN1c3RvbUFjdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKExleGVyQWN0aW9uLnByb3RvdHlwZSk7XG5MZXhlckluZGV4ZWRDdXN0b21BY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uO1xuXG4vLyA8cD5UaGlzIG1ldGhvZCBjYWxscyB7QGxpbmsgLy9leGVjdXRlfSBvbiB0aGUgcmVzdWx0IG9mIHtAbGluayAvL2dldEFjdGlvbn1cbi8vIHVzaW5nIHRoZSBwcm92aWRlZCB7QGNvZGUgbGV4ZXJ9LjwvcD5cbkxleGVySW5kZXhlZEN1c3RvbUFjdGlvbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGxleGVyKSB7XG4gICAgLy8gYXNzdW1lIHRoZSBpbnB1dCBzdHJlYW0gcG9zaXRpb24gd2FzIHByb3Blcmx5IHNldCBieSB0aGUgY2FsbGluZyBjb2RlXG4gICAgdGhpcy5hY3Rpb24uZXhlY3V0ZShsZXhlcik7XG59O1xuXG5MZXhlckluZGV4ZWRDdXN0b21BY3Rpb24ucHJvdG90eXBlLnVwZGF0ZUhhc2hDb2RlID0gZnVuY3Rpb24oaGFzaCkge1xuICAgIGhhc2gudXBkYXRlKHRoaXMuYWN0aW9uVHlwZSwgdGhpcy5vZmZzZXQsIHRoaXMuYWN0aW9uKTtcbn07XG5cbkxleGVySW5kZXhlZEN1c3RvbUFjdGlvbi5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24ob3RoZXIpIHtcbiAgICBpZiAodGhpcyA9PT0gb3RoZXIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIGlmICghIChvdGhlciBpbnN0YW5jZW9mIExleGVySW5kZXhlZEN1c3RvbUFjdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLm9mZnNldCA9PT0gb3RoZXIub2Zmc2V0ICYmIHRoaXMuYWN0aW9uID09PSBvdGhlci5hY3Rpb247XG4gICAgfVxufTtcblxuXG5leHBvcnRzLkxleGVyQWN0aW9uVHlwZSA9IExleGVyQWN0aW9uVHlwZTtcbmV4cG9ydHMuTGV4ZXJTa2lwQWN0aW9uID0gTGV4ZXJTa2lwQWN0aW9uO1xuZXhwb3J0cy5MZXhlckNoYW5uZWxBY3Rpb24gPSBMZXhlckNoYW5uZWxBY3Rpb247XG5leHBvcnRzLkxleGVyQ3VzdG9tQWN0aW9uID0gTGV4ZXJDdXN0b21BY3Rpb247XG5leHBvcnRzLkxleGVySW5kZXhlZEN1c3RvbUFjdGlvbiA9IExleGVySW5kZXhlZEN1c3RvbUFjdGlvbjtcbmV4cG9ydHMuTGV4ZXJNb3JlQWN0aW9uID0gTGV4ZXJNb3JlQWN0aW9uO1xuZXhwb3J0cy5MZXhlclR5cGVBY3Rpb24gPSBMZXhlclR5cGVBY3Rpb247XG5leHBvcnRzLkxleGVyUHVzaE1vZGVBY3Rpb24gPSBMZXhlclB1c2hNb2RlQWN0aW9uO1xuZXhwb3J0cy5MZXhlclBvcE1vZGVBY3Rpb24gPSBMZXhlclBvcE1vZGVBY3Rpb247XG5leHBvcnRzLkxleGVyTW9kZUFjdGlvbiA9IExleGVyTW9kZUFjdGlvbjsiLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy8vXG5cbi8vIFJlcHJlc2VudHMgYW4gZXhlY3V0b3IgZm9yIGEgc2VxdWVuY2Ugb2YgbGV4ZXIgYWN0aW9ucyB3aGljaCB0cmF2ZXJzZWQgZHVyaW5nXG4vLyB0aGUgbWF0Y2hpbmcgb3BlcmF0aW9uIG9mIGEgbGV4ZXIgcnVsZSAodG9rZW4pLlxuLy9cbi8vIDxwPlRoZSBleGVjdXRvciB0cmFja3MgcG9zaXRpb24gaW5mb3JtYXRpb24gZm9yIHBvc2l0aW9uLWRlcGVuZGVudCBsZXhlciBhY3Rpb25zXG4vLyBlZmZpY2llbnRseSwgZW5zdXJpbmcgdGhhdCBhY3Rpb25zIGFwcGVhcmluZyBvbmx5IGF0IHRoZSBlbmQgb2YgdGhlIHJ1bGUgZG9cbi8vIG5vdCBjYXVzZSBibG9hdGluZyBvZiB0aGUge0BsaW5rIERGQX0gY3JlYXRlZCBmb3IgdGhlIGxleGVyLjwvcD5cblxudmFyIGhhc2hTdHVmZiA9IHJlcXVpcmUoXCIuLi9VdGlsc1wiKS5oYXNoU3R1ZmY7XG52YXIgTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uID0gcmVxdWlyZSgnLi9MZXhlckFjdGlvbicpLkxleGVySW5kZXhlZEN1c3RvbUFjdGlvbjtcblxuZnVuY3Rpb24gTGV4ZXJBY3Rpb25FeGVjdXRvcihsZXhlckFjdGlvbnMpIHtcblx0dGhpcy5sZXhlckFjdGlvbnMgPSBsZXhlckFjdGlvbnMgPT09IG51bGwgPyBbXSA6IGxleGVyQWN0aW9ucztcblx0Ly8gQ2FjaGVzIHRoZSByZXN1bHQgb2Yge0BsaW5rIC8vaGFzaENvZGV9IHNpbmNlIHRoZSBoYXNoIGNvZGUgaXMgYW4gZWxlbWVudFxuXHQvLyBvZiB0aGUgcGVyZm9ybWFuY2UtY3JpdGljYWwge0BsaW5rIExleGVyQVROQ29uZmlnLy9oYXNoQ29kZX0gb3BlcmF0aW9uLlxuXHR0aGlzLmNhY2hlZEhhc2hDb2RlID0gaGFzaFN0dWZmKGxleGVyQWN0aW9ucyk7IC8vIFwiXCIuam9pbihbc3RyKGxhKSBmb3IgbGEgaW5cblx0Ly8gbGV4ZXJBY3Rpb25zXSkpXG5cdHJldHVybiB0aGlzO1xufVxuXG4vLyBDcmVhdGVzIGEge0BsaW5rIExleGVyQWN0aW9uRXhlY3V0b3J9IHdoaWNoIGV4ZWN1dGVzIHRoZSBhY3Rpb25zIGZvclxuLy8gdGhlIGlucHV0IHtAY29kZSBsZXhlckFjdGlvbkV4ZWN1dG9yfSBmb2xsb3dlZCBieSBhIHNwZWNpZmllZFxuLy8ge0Bjb2RlIGxleGVyQWN0aW9ufS5cbi8vXG4vLyBAcGFyYW0gbGV4ZXJBY3Rpb25FeGVjdXRvciBUaGUgZXhlY3V0b3IgZm9yIGFjdGlvbnMgYWxyZWFkeSB0cmF2ZXJzZWQgYnlcbi8vIHRoZSBsZXhlciB3aGlsZSBtYXRjaGluZyBhIHRva2VuIHdpdGhpbiBhIHBhcnRpY3VsYXJcbi8vIHtAbGluayBMZXhlckFUTkNvbmZpZ30uIElmIHRoaXMgaXMge0Bjb2RlIG51bGx9LCB0aGUgbWV0aG9kIGJlaGF2ZXMgYXNcbi8vIHRob3VnaCBpdCB3ZXJlIGFuIGVtcHR5IGV4ZWN1dG9yLlxuLy8gQHBhcmFtIGxleGVyQWN0aW9uIFRoZSBsZXhlciBhY3Rpb24gdG8gZXhlY3V0ZSBhZnRlciB0aGUgYWN0aW9uc1xuLy8gc3BlY2lmaWVkIGluIHtAY29kZSBsZXhlckFjdGlvbkV4ZWN1dG9yfS5cbi8vXG4vLyBAcmV0dXJuIEEge0BsaW5rIExleGVyQWN0aW9uRXhlY3V0b3J9IGZvciBleGVjdXRpbmcgdGhlIGNvbWJpbmUgYWN0aW9uc1xuLy8gb2Yge0Bjb2RlIGxleGVyQWN0aW9uRXhlY3V0b3J9IGFuZCB7QGNvZGUgbGV4ZXJBY3Rpb259LlxuTGV4ZXJBY3Rpb25FeGVjdXRvci5hcHBlbmQgPSBmdW5jdGlvbihsZXhlckFjdGlvbkV4ZWN1dG9yLCBsZXhlckFjdGlvbikge1xuXHRpZiAobGV4ZXJBY3Rpb25FeGVjdXRvciA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBuZXcgTGV4ZXJBY3Rpb25FeGVjdXRvcihbIGxleGVyQWN0aW9uIF0pO1xuXHR9XG5cdHZhciBsZXhlckFjdGlvbnMgPSBsZXhlckFjdGlvbkV4ZWN1dG9yLmxleGVyQWN0aW9ucy5jb25jYXQoWyBsZXhlckFjdGlvbiBdKTtcblx0cmV0dXJuIG5ldyBMZXhlckFjdGlvbkV4ZWN1dG9yKGxleGVyQWN0aW9ucyk7XG59O1xuXG4vLyBDcmVhdGVzIGEge0BsaW5rIExleGVyQWN0aW9uRXhlY3V0b3J9IHdoaWNoIGVuY29kZXMgdGhlIGN1cnJlbnQgb2Zmc2V0XG4vLyBmb3IgcG9zaXRpb24tZGVwZW5kZW50IGxleGVyIGFjdGlvbnMuXG4vL1xuLy8gPHA+Tm9ybWFsbHksIHdoZW4gdGhlIGV4ZWN1dG9yIGVuY291bnRlcnMgbGV4ZXIgYWN0aW9ucyB3aGVyZVxuLy8ge0BsaW5rIExleGVyQWN0aW9uLy9pc1Bvc2l0aW9uRGVwZW5kZW50fSByZXR1cm5zIHtAY29kZSB0cnVlfSwgaXQgY2FsbHNcbi8vIHtAbGluayBJbnRTdHJlYW0vL3NlZWt9IG9uIHRoZSBpbnB1dCB7QGxpbmsgQ2hhclN0cmVhbX0gdG8gc2V0IHRoZSBpbnB1dFxuLy8gcG9zaXRpb24gdG8gdGhlIDxlbT5lbmQ8L2VtPiBvZiB0aGUgY3VycmVudCB0b2tlbi4gVGhpcyBiZWhhdmlvciBwcm92aWRlc1xuLy8gZm9yIGVmZmljaWVudCBERkEgcmVwcmVzZW50YXRpb24gb2YgbGV4ZXIgYWN0aW9ucyB3aGljaCBhcHBlYXIgYXQgdGhlIGVuZFxuLy8gb2YgYSBsZXhlciBydWxlLCBldmVuIHdoZW4gdGhlIGxleGVyIHJ1bGUgbWF0Y2hlcyBhIHZhcmlhYmxlIG51bWJlciBvZlxuLy8gY2hhcmFjdGVycy48L3A+XG4vL1xuLy8gPHA+UHJpb3IgdG8gdHJhdmVyc2luZyBhIG1hdGNoIHRyYW5zaXRpb24gaW4gdGhlIEFUTiwgdGhlIGN1cnJlbnQgb2Zmc2V0XG4vLyBmcm9tIHRoZSB0b2tlbiBzdGFydCBpbmRleCBpcyBhc3NpZ25lZCB0byBhbGwgcG9zaXRpb24tZGVwZW5kZW50IGxleGVyXG4vLyBhY3Rpb25zIHdoaWNoIGhhdmUgbm90IGFscmVhZHkgYmVlbiBhc3NpZ25lZCBhIGZpeGVkIG9mZnNldC4gQnkgc3RvcmluZ1xuLy8gdGhlIG9mZnNldHMgcmVsYXRpdmUgdG8gdGhlIHRva2VuIHN0YXJ0IGluZGV4LCB0aGUgREZBIHJlcHJlc2VudGF0aW9uIG9mXG4vLyBsZXhlciBhY3Rpb25zIHdoaWNoIGFwcGVhciBpbiB0aGUgbWlkZGxlIG9mIHRva2VucyByZW1haW5zIGVmZmljaWVudCBkdWVcbi8vIHRvIHNoYXJpbmcgYW1vbmcgdG9rZW5zIG9mIHRoZSBzYW1lIGxlbmd0aCwgcmVnYXJkbGVzcyBvZiB0aGVpciBhYnNvbHV0ZVxuLy8gcG9zaXRpb24gaW4gdGhlIGlucHV0IHN0cmVhbS48L3A+XG4vL1xuLy8gPHA+SWYgdGhlIGN1cnJlbnQgZXhlY3V0b3IgYWxyZWFkeSBoYXMgb2Zmc2V0cyBhc3NpZ25lZCB0byBhbGxcbi8vIHBvc2l0aW9uLWRlcGVuZGVudCBsZXhlciBhY3Rpb25zLCB0aGUgbWV0aG9kIHJldHVybnMge0Bjb2RlIHRoaXN9LjwvcD5cbi8vXG4vLyBAcGFyYW0gb2Zmc2V0IFRoZSBjdXJyZW50IG9mZnNldCB0byBhc3NpZ24gdG8gYWxsIHBvc2l0aW9uLWRlcGVuZGVudFxuLy8gbGV4ZXIgYWN0aW9ucyB3aGljaCBkbyBub3QgYWxyZWFkeSBoYXZlIG9mZnNldHMgYXNzaWduZWQuXG4vL1xuLy8gQHJldHVybiBBIHtAbGluayBMZXhlckFjdGlvbkV4ZWN1dG9yfSB3aGljaCBzdG9yZXMgaW5wdXQgc3RyZWFtIG9mZnNldHNcbi8vIGZvciBhbGwgcG9zaXRpb24tZGVwZW5kZW50IGxleGVyIGFjdGlvbnMuXG4vLyAvXG5MZXhlckFjdGlvbkV4ZWN1dG9yLnByb3RvdHlwZS5maXhPZmZzZXRCZWZvcmVNYXRjaCA9IGZ1bmN0aW9uKG9mZnNldCkge1xuXHR2YXIgdXBkYXRlZExleGVyQWN0aW9ucyA9IG51bGw7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5sZXhlckFjdGlvbnMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAodGhpcy5sZXhlckFjdGlvbnNbaV0uaXNQb3NpdGlvbkRlcGVuZGVudCAmJlxuXHRcdFx0XHQhKHRoaXMubGV4ZXJBY3Rpb25zW2ldIGluc3RhbmNlb2YgTGV4ZXJJbmRleGVkQ3VzdG9tQWN0aW9uKSkge1xuXHRcdFx0aWYgKHVwZGF0ZWRMZXhlckFjdGlvbnMgPT09IG51bGwpIHtcblx0XHRcdFx0dXBkYXRlZExleGVyQWN0aW9ucyA9IHRoaXMubGV4ZXJBY3Rpb25zLmNvbmNhdChbXSk7XG5cdFx0XHR9XG5cdFx0XHR1cGRhdGVkTGV4ZXJBY3Rpb25zW2ldID0gbmV3IExleGVySW5kZXhlZEN1c3RvbUFjdGlvbihvZmZzZXQsXG5cdFx0XHRcdFx0dGhpcy5sZXhlckFjdGlvbnNbaV0pO1xuXHRcdH1cblx0fVxuXHRpZiAodXBkYXRlZExleGVyQWN0aW9ucyA9PT0gbnVsbCkge1xuXHRcdHJldHVybiB0aGlzO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBuZXcgTGV4ZXJBY3Rpb25FeGVjdXRvcih1cGRhdGVkTGV4ZXJBY3Rpb25zKTtcblx0fVxufTtcblxuLy8gRXhlY3V0ZSB0aGUgYWN0aW9ucyBlbmNhcHN1bGF0ZWQgYnkgdGhpcyBleGVjdXRvciB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYVxuLy8gcGFydGljdWxhciB7QGxpbmsgTGV4ZXJ9LlxuLy9cbi8vIDxwPlRoaXMgbWV0aG9kIGNhbGxzIHtAbGluayBJbnRTdHJlYW0vL3NlZWt9IHRvIHNldCB0aGUgcG9zaXRpb24gb2YgdGhlXG4vLyB7QGNvZGUgaW5wdXR9IHtAbGluayBDaGFyU3RyZWFtfSBwcmlvciB0byBjYWxsaW5nXG4vLyB7QGxpbmsgTGV4ZXJBY3Rpb24vL2V4ZWN1dGV9IG9uIGEgcG9zaXRpb24tZGVwZW5kZW50IGFjdGlvbi4gQmVmb3JlIHRoZVxuLy8gbWV0aG9kIHJldHVybnMsIHRoZSBpbnB1dCBwb3NpdGlvbiB3aWxsIGJlIHJlc3RvcmVkIHRvIHRoZSBzYW1lIHBvc2l0aW9uXG4vLyBpdCB3YXMgaW4gd2hlbiB0aGUgbWV0aG9kIHdhcyBpbnZva2VkLjwvcD5cbi8vXG4vLyBAcGFyYW0gbGV4ZXIgVGhlIGxleGVyIGluc3RhbmNlLlxuLy8gQHBhcmFtIGlucHV0IFRoZSBpbnB1dCBzdHJlYW0gd2hpY2ggaXMgdGhlIHNvdXJjZSBmb3IgdGhlIGN1cnJlbnQgdG9rZW4uXG4vLyBXaGVuIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCwgdGhlIGN1cnJlbnQge0BsaW5rIEludFN0cmVhbS8vaW5kZXh9IGZvclxuLy8ge0Bjb2RlIGlucHV0fSBzaG91bGQgYmUgdGhlIHN0YXJ0IG9mIHRoZSBmb2xsb3dpbmcgdG9rZW4sIGkuZS4gMVxuLy8gY2hhcmFjdGVyIHBhc3QgdGhlIGVuZCBvZiB0aGUgY3VycmVudCB0b2tlbi5cbi8vIEBwYXJhbSBzdGFydEluZGV4IFRoZSB0b2tlbiBzdGFydCBpbmRleC4gVGhpcyB2YWx1ZSBtYXkgYmUgcGFzc2VkIHRvXG4vLyB7QGxpbmsgSW50U3RyZWFtLy9zZWVrfSB0byBzZXQgdGhlIHtAY29kZSBpbnB1dH0gcG9zaXRpb24gdG8gdGhlIGJlZ2lubmluZ1xuLy8gb2YgdGhlIHRva2VuLlxuLy8gL1xuTGV4ZXJBY3Rpb25FeGVjdXRvci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGxleGVyLCBpbnB1dCwgc3RhcnRJbmRleCkge1xuXHR2YXIgcmVxdWlyZXNTZWVrID0gZmFsc2U7XG5cdHZhciBzdG9wSW5kZXggPSBpbnB1dC5pbmRleDtcblx0dHJ5IHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMubGV4ZXJBY3Rpb25zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgbGV4ZXJBY3Rpb24gPSB0aGlzLmxleGVyQWN0aW9uc1tpXTtcblx0XHRcdGlmIChsZXhlckFjdGlvbiBpbnN0YW5jZW9mIExleGVySW5kZXhlZEN1c3RvbUFjdGlvbikge1xuXHRcdFx0XHR2YXIgb2Zmc2V0ID0gbGV4ZXJBY3Rpb24ub2Zmc2V0O1xuXHRcdFx0XHRpbnB1dC5zZWVrKHN0YXJ0SW5kZXggKyBvZmZzZXQpO1xuXHRcdFx0XHRsZXhlckFjdGlvbiA9IGxleGVyQWN0aW9uLmFjdGlvbjtcblx0XHRcdFx0cmVxdWlyZXNTZWVrID0gKHN0YXJ0SW5kZXggKyBvZmZzZXQpICE9PSBzdG9wSW5kZXg7XG5cdFx0XHR9IGVsc2UgaWYgKGxleGVyQWN0aW9uLmlzUG9zaXRpb25EZXBlbmRlbnQpIHtcblx0XHRcdFx0aW5wdXQuc2VlayhzdG9wSW5kZXgpO1xuXHRcdFx0XHRyZXF1aXJlc1NlZWsgPSBmYWxzZTtcblx0XHRcdH1cblx0XHRcdGxleGVyQWN0aW9uLmV4ZWN1dGUobGV4ZXIpO1xuXHRcdH1cblx0fSBmaW5hbGx5IHtcblx0XHRpZiAocmVxdWlyZXNTZWVrKSB7XG5cdFx0XHRpbnB1dC5zZWVrKHN0b3BJbmRleCk7XG5cdFx0fVxuXHR9XG59O1xuXG5MZXhlckFjdGlvbkV4ZWN1dG9yLnByb3RvdHlwZS5oYXNoQ29kZSA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5jYWNoZWRIYXNoQ29kZTtcbn07XG5cbkxleGVyQWN0aW9uRXhlY3V0b3IucHJvdG90eXBlLnVwZGF0ZUhhc2hDb2RlID0gZnVuY3Rpb24oaGFzaCkge1xuICAgIGhhc2gudXBkYXRlKHRoaXMuY2FjaGVkSGFzaENvZGUpO1xufTtcblxuXG5MZXhlckFjdGlvbkV4ZWN1dG9yLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuXHRpZiAodGhpcyA9PT0gb3RoZXIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIGlmICghKG90aGVyIGluc3RhbmNlb2YgTGV4ZXJBY3Rpb25FeGVjdXRvcikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSBpZiAodGhpcy5jYWNoZWRIYXNoQ29kZSAhPSBvdGhlci5jYWNoZWRIYXNoQ29kZSkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIGlmICh0aGlzLmxleGVyQWN0aW9ucy5sZW5ndGggIT0gb3RoZXIubGV4ZXJBY3Rpb25zLmxlbmd0aCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBlbHNlIHtcblx0XHR2YXIgbnVtQWN0aW9ucyA9IHRoaXMubGV4ZXJBY3Rpb25zLmxlbmd0aFxuXHRcdGZvciAodmFyIGlkeCA9IDA7IGlkeCA8IG51bUFjdGlvbnM7ICsraWR4KSB7XG5cdFx0XHRpZiAoIXRoaXMubGV4ZXJBY3Rpb25zW2lkeF0uZXF1YWxzKG90aGVyLmxleGVyQWN0aW9uc1tpZHhdKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59O1xuXG5leHBvcnRzLkxleGVyQWN0aW9uRXhlY3V0b3IgPSBMZXhlckFjdGlvbkV4ZWN1dG9yO1xuIiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vXG5cbi8vXG4vLyBUaGUgZW1ib2RpbWVudCBvZiB0aGUgYWRhcHRpdmUgTEwoKiksIEFMTCgqKSwgcGFyc2luZyBzdHJhdGVneS5cbi8vXG4vLyA8cD5cbi8vIFRoZSBiYXNpYyBjb21wbGV4aXR5IG9mIHRoZSBhZGFwdGl2ZSBzdHJhdGVneSBtYWtlcyBpdCBoYXJkZXIgdG8gdW5kZXJzdGFuZC5cbi8vIFdlIGJlZ2luIHdpdGggQVROIHNpbXVsYXRpb24gdG8gYnVpbGQgcGF0aHMgaW4gYSBERkEuIFN1YnNlcXVlbnQgcHJlZGljdGlvblxuLy8gcmVxdWVzdHMgZ28gdGhyb3VnaCB0aGUgREZBIGZpcnN0LiBJZiB0aGV5IHJlYWNoIGEgc3RhdGUgd2l0aG91dCBhbiBlZGdlIGZvclxuLy8gdGhlIGN1cnJlbnQgc3ltYm9sLCB0aGUgYWxnb3JpdGhtIGZhaWxzIG92ZXIgdG8gdGhlIEFUTiBzaW11bGF0aW9uIHRvXG4vLyBjb21wbGV0ZSB0aGUgREZBIHBhdGggZm9yIHRoZSBjdXJyZW50IGlucHV0ICh1bnRpbCBpdCBmaW5kcyBhIGNvbmZsaWN0IHN0YXRlXG4vLyBvciB1bmlxdWVseSBwcmVkaWN0aW5nIHN0YXRlKS48L3A+XG4vL1xuLy8gPHA+XG4vLyBBbGwgb2YgdGhhdCBpcyBkb25lIHdpdGhvdXQgdXNpbmcgdGhlIG91dGVyIGNvbnRleHQgYmVjYXVzZSB3ZSB3YW50IHRvIGNyZWF0ZVxuLy8gYSBERkEgdGhhdCBpcyBub3QgZGVwZW5kZW50IHVwb24gdGhlIHJ1bGUgaW52b2NhdGlvbiBzdGFjayB3aGVuIHdlIGRvIGFcbi8vIHByZWRpY3Rpb24uIE9uZSBERkEgd29ya3MgaW4gYWxsIGNvbnRleHRzLiBXZSBhdm9pZCB1c2luZyBjb250ZXh0IG5vdFxuLy8gbmVjZXNzYXJpbHkgYmVjYXVzZSBpdCdzIHNsb3dlciwgYWx0aG91Z2ggaXQgY2FuIGJlLCBidXQgYmVjYXVzZSBvZiB0aGUgREZBXG4vLyBjYWNoaW5nIHByb2JsZW0uIFRoZSBjbG9zdXJlIHJvdXRpbmUgb25seSBjb25zaWRlcnMgdGhlIHJ1bGUgaW52b2NhdGlvbiBzdGFja1xuLy8gY3JlYXRlZCBkdXJpbmcgcHJlZGljdGlvbiBiZWdpbm5pbmcgaW4gdGhlIGRlY2lzaW9uIHJ1bGUuIEZvciBleGFtcGxlLCBpZlxuLy8gcHJlZGljdGlvbiBvY2N1cnMgd2l0aG91dCBpbnZva2luZyBhbm90aGVyIHJ1bGUncyBBVE4sIHRoZXJlIGFyZSBubyBjb250ZXh0XG4vLyBzdGFja3MgaW4gdGhlIGNvbmZpZ3VyYXRpb25zLiBXaGVuIGxhY2sgb2YgY29udGV4dCBsZWFkcyB0byBhIGNvbmZsaWN0LCB3ZVxuLy8gZG9uJ3Qga25vdyBpZiBpdCdzIGFuIGFtYmlndWl0eSBvciBhIHdlYWtuZXNzIGluIHRoZSBzdHJvbmcgTEwoKikgcGFyc2luZ1xuLy8gc3RyYXRlZ3kgKHZlcnN1cyBmdWxsIExMKCopKS48L3A+XG4vL1xuLy8gPHA+XG4vLyBXaGVuIFNMTCB5aWVsZHMgYSBjb25maWd1cmF0aW9uIHNldCB3aXRoIGNvbmZsaWN0LCB3ZSByZXdpbmQgdGhlIGlucHV0IGFuZFxuLy8gcmV0cnkgdGhlIEFUTiBzaW11bGF0aW9uLCB0aGlzIHRpbWUgdXNpbmcgZnVsbCBvdXRlciBjb250ZXh0IHdpdGhvdXQgYWRkaW5nXG4vLyB0byB0aGUgREZBLiBDb25maWd1cmF0aW9uIGNvbnRleHQgc3RhY2tzIHdpbGwgYmUgdGhlIGZ1bGwgaW52b2NhdGlvbiBzdGFja3Ncbi8vIGZyb20gdGhlIHN0YXJ0IHJ1bGUuIElmIHdlIGdldCBhIGNvbmZsaWN0IHVzaW5nIGZ1bGwgY29udGV4dCwgdGhlbiB3ZSBjYW5cbi8vIGRlZmluaXRpdmVseSBzYXkgd2UgaGF2ZSBhIHRydWUgYW1iaWd1aXR5IGZvciB0aGF0IGlucHV0IHNlcXVlbmNlLiBJZiB3ZVxuLy8gZG9uJ3QgZ2V0IGEgY29uZmxpY3QsIGl0IGltcGxpZXMgdGhhdCB0aGUgZGVjaXNpb24gaXMgc2Vuc2l0aXZlIHRvIHRoZSBvdXRlclxuLy8gY29udGV4dC4gKEl0IGlzIG5vdCBjb250ZXh0LXNlbnNpdGl2ZSBpbiB0aGUgc2Vuc2Ugb2YgY29udGV4dC1zZW5zaXRpdmVcbi8vIGdyYW1tYXJzLik8L3A+XG4vL1xuLy8gPHA+XG4vLyBUaGUgbmV4dCB0aW1lIHdlIHJlYWNoIHRoaXMgREZBIHN0YXRlIHdpdGggYW4gU0xMIGNvbmZsaWN0LCB0aHJvdWdoIERGQVxuLy8gc2ltdWxhdGlvbiwgd2Ugd2lsbCBhZ2FpbiByZXRyeSB0aGUgQVROIHNpbXVsYXRpb24gdXNpbmcgZnVsbCBjb250ZXh0IG1vZGUuXG4vLyBUaGlzIGlzIHNsb3cgYmVjYXVzZSB3ZSBjYW4ndCBzYXZlIHRoZSByZXN1bHRzIGFuZCBoYXZlIHRvIFwiaW50ZXJwcmV0XCIgdGhlXG4vLyBBVE4gZWFjaCB0aW1lIHdlIGdldCB0aGF0IGlucHV0LjwvcD5cbi8vXG4vLyA8cD5cbi8vIDxzdHJvbmc+Q0FDSElORyBGVUxMIENPTlRFWFQgUFJFRElDVElPTlM8L3N0cm9uZz48L3A+XG4vL1xuLy8gPHA+XG4vLyBXZSBjb3VsZCBjYWNoZSByZXN1bHRzIGZyb20gZnVsbCBjb250ZXh0IHRvIHByZWRpY3RlZCBhbHRlcm5hdGl2ZSBlYXNpbHkgYW5kXG4vLyB0aGF0IHNhdmVzIGEgbG90IG9mIHRpbWUgYnV0IGRvZXNuJ3Qgd29yayBpbiBwcmVzZW5jZSBvZiBwcmVkaWNhdGVzLiBUaGUgc2V0XG4vLyBvZiB2aXNpYmxlIHByZWRpY2F0ZXMgZnJvbSB0aGUgQVROIHN0YXJ0IHN0YXRlIGNoYW5nZXMgZGVwZW5kaW5nIG9uIHRoZVxuLy8gY29udGV4dCwgYmVjYXVzZSBjbG9zdXJlIGNhbiBmYWxsIG9mZiB0aGUgZW5kIG9mIGEgcnVsZS4gSSB0cmllZCB0byBjYWNoZVxuLy8gdHVwbGVzIChzdGFjayBjb250ZXh0LCBzZW1hbnRpYyBjb250ZXh0LCBwcmVkaWN0ZWQgYWx0KSBidXQgaXQgd2FzIHNsb3dlclxuLy8gdGhhbiBpbnRlcnByZXRpbmcgYW5kIG11Y2ggbW9yZSBjb21wbGljYXRlZC4gQWxzbyByZXF1aXJlZCBhIGh1Z2UgYW1vdW50IG9mXG4vLyBtZW1vcnkuIFRoZSBnb2FsIGlzIG5vdCB0byBjcmVhdGUgdGhlIHdvcmxkJ3MgZmFzdGVzdCBwYXJzZXIgYW55d2F5LiBJJ2QgbGlrZVxuLy8gdG8ga2VlcCB0aGlzIGFsZ29yaXRobSBzaW1wbGUuIEJ5IGxhdW5jaGluZyBtdWx0aXBsZSB0aHJlYWRzLCB3ZSBjYW4gaW1wcm92ZVxuLy8gdGhlIHNwZWVkIG9mIHBhcnNpbmcgYWNyb3NzIGEgbGFyZ2UgbnVtYmVyIG9mIGZpbGVzLjwvcD5cbi8vXG4vLyA8cD5cbi8vIFRoZXJlIGlzIG5vIHN0cmljdCBvcmRlcmluZyBiZXR3ZWVuIHRoZSBhbW91bnQgb2YgaW5wdXQgdXNlZCBieSBTTEwgdnMgTEwsXG4vLyB3aGljaCBtYWtlcyBpdCByZWFsbHkgaGFyZCB0byBidWlsZCBhIGNhY2hlIGZvciBmdWxsIGNvbnRleHQuIExldCdzIHNheSB0aGF0XG4vLyB3ZSBoYXZlIGlucHV0IEEgQiBDIHRoYXQgbGVhZHMgdG8gYW4gU0xMIGNvbmZsaWN0IHdpdGggZnVsbCBjb250ZXh0IFguIFRoYXRcbi8vIGltcGxpZXMgdGhhdCB1c2luZyBYIHdlIG1pZ2h0IG9ubHkgdXNlIEEgQiBidXQgd2UgY291bGQgYWxzbyB1c2UgQSBCIEMgRCB0b1xuLy8gcmVzb2x2ZSBjb25mbGljdC4gSW5wdXQgQSBCIEMgRCBjb3VsZCBwcmVkaWN0IGFsdGVybmF0aXZlIDEgaW4gb25lIHBvc2l0aW9uXG4vLyBpbiB0aGUgaW5wdXQgYW5kIEEgQiBDIEUgY291bGQgcHJlZGljdCBhbHRlcm5hdGl2ZSAyIGluIGFub3RoZXIgcG9zaXRpb24gaW5cbi8vIGlucHV0LiBUaGUgY29uZmxpY3RpbmcgU0xMIGNvbmZpZ3VyYXRpb25zIGNvdWxkIHN0aWxsIGJlIG5vbi11bmlxdWUgaW4gdGhlXG4vLyBmdWxsIGNvbnRleHQgcHJlZGljdGlvbiwgd2hpY2ggd291bGQgbGVhZCB1cyB0byByZXF1aXJpbmcgbW9yZSBpbnB1dCB0aGFuIHRoZVxuLy8gb3JpZ2luYWwgQSBCIEMuXHRUbyBtYWtlIGFcdHByZWRpY3Rpb24gY2FjaGUgd29yaywgd2UgaGF2ZSB0byB0cmFja1x0dGhlIGV4YWN0XG4vLyBpbnB1dFx0dXNlZCBkdXJpbmcgdGhlIHByZXZpb3VzIHByZWRpY3Rpb24uIFRoYXQgYW1vdW50cyB0byBhIGNhY2hlIHRoYXQgbWFwc1xuLy8gWCB0byBhIHNwZWNpZmljIERGQSBmb3IgdGhhdCBjb250ZXh0LjwvcD5cbi8vXG4vLyA8cD5cbi8vIFNvbWV0aGluZyBzaG91bGQgYmUgZG9uZSBmb3IgbGVmdC1yZWN1cnNpdmUgZXhwcmVzc2lvbiBwcmVkaWN0aW9ucy4gVGhleSBhcmVcbi8vIGxpa2VseSBMTCgxKSArIHByZWQgZXZhbC4gRWFzaWVyIHRvIGRvIHRoZSB3aG9sZSBTTEwgdW5sZXNzIGVycm9yIGFuZCByZXRyeVxuLy8gd2l0aCBmdWxsIExMIHRoaW5nIFNhbSBkb2VzLjwvcD5cbi8vXG4vLyA8cD5cbi8vIDxzdHJvbmc+QVZPSURJTkcgRlVMTCBDT05URVhUIFBSRURJQ1RJT048L3N0cm9uZz48L3A+XG4vL1xuLy8gPHA+XG4vLyBXZSBhdm9pZCBkb2luZyBmdWxsIGNvbnRleHQgcmV0cnkgd2hlbiB0aGUgb3V0ZXIgY29udGV4dCBpcyBlbXB0eSwgd2UgZGlkIG5vdFxuLy8gZGlwIGludG8gdGhlIG91dGVyIGNvbnRleHQgYnkgZmFsbGluZyBvZmYgdGhlIGVuZCBvZiB0aGUgZGVjaXNpb24gc3RhdGUgcnVsZSxcbi8vIG9yIHdoZW4gd2UgZm9yY2UgU0xMIG1vZGUuPC9wPlxuLy9cbi8vIDxwPlxuLy8gQXMgYW4gZXhhbXBsZSBvZiB0aGUgbm90IGRpcCBpbnRvIG91dGVyIGNvbnRleHQgY2FzZSwgY29uc2lkZXIgYXMgc3VwZXJcbi8vIGNvbnN0cnVjdG9yIGNhbGxzIHZlcnN1cyBmdW5jdGlvbiBjYWxscy4gT25lIGdyYW1tYXIgbWlnaHQgbG9vayBsaWtlXG4vLyB0aGlzOjwvcD5cbi8vXG4vLyA8cHJlPlxuLy8gY3RvckJvZHlcbi8vICAgOiAneycgc3VwZXJDYWxsPyBzdGF0KiAnfSdcbi8vICAgO1xuLy8gPC9wcmU+XG4vL1xuLy8gPHA+XG4vLyBPciwgeW91IG1pZ2h0IHNlZSBzb21ldGhpbmcgbGlrZTwvcD5cbi8vXG4vLyA8cHJlPlxuLy8gc3RhdFxuLy8gICA6IHN1cGVyQ2FsbCAnOydcbi8vICAgfCBleHByZXNzaW9uICc7J1xuLy8gICB8IC4uLlxuLy8gICA7XG4vLyA8L3ByZT5cbi8vXG4vLyA8cD5cbi8vIEluIGJvdGggY2FzZXMgSSBiZWxpZXZlIHRoYXQgbm8gY2xvc3VyZSBvcGVyYXRpb25zIHdpbGwgZGlwIGludG8gdGhlIG91dGVyXG4vLyBjb250ZXh0LiBJbiB0aGUgZmlyc3QgY2FzZSBjdG9yQm9keSBpbiB0aGUgd29yc3QgY2FzZSB3aWxsIHN0b3AgYXQgdGhlICd9Jy5cbi8vIEluIHRoZSAybmQgY2FzZSBpdCBzaG91bGQgc3RvcCBhdCB0aGUgJzsnLiBCb3RoIGNhc2VzIHNob3VsZCBzdGF5IHdpdGhpbiB0aGVcbi8vIGVudHJ5IHJ1bGUgYW5kIG5vdCBkaXAgaW50byB0aGUgb3V0ZXIgY29udGV4dC48L3A+XG4vL1xuLy8gPHA+XG4vLyA8c3Ryb25nPlBSRURJQ0FURVM8L3N0cm9uZz48L3A+XG4vL1xuLy8gPHA+XG4vLyBQcmVkaWNhdGVzIGFyZSBhbHdheXMgZXZhbHVhdGVkIGlmIHByZXNlbnQgaW4gZWl0aGVyIFNMTCBvciBMTCBib3RoLiBTTEwgYW5kXG4vLyBMTCBzaW11bGF0aW9uIGRlYWxzIHdpdGggcHJlZGljYXRlcyBkaWZmZXJlbnRseS4gU0xMIGNvbGxlY3RzIHByZWRpY2F0ZXMgYXNcbi8vIGl0IHBlcmZvcm1zIGNsb3N1cmUgb3BlcmF0aW9ucyBsaWtlIEFOVExSIHYzIGRpZC4gSXQgZGVsYXlzIHByZWRpY2F0ZVxuLy8gZXZhbHVhdGlvbiB1bnRpbCBpdCByZWFjaGVzIGFuZCBhY2NlcHQgc3RhdGUuIFRoaXMgYWxsb3dzIHVzIHRvIGNhY2hlIHRoZSBTTExcbi8vIEFUTiBzaW11bGF0aW9uIHdoZXJlYXMsIGlmIHdlIGhhZCBldmFsdWF0ZWQgcHJlZGljYXRlcyBvbi10aGUtZmx5IGR1cmluZ1xuLy8gY2xvc3VyZSwgdGhlIERGQSBzdGF0ZSBjb25maWd1cmF0aW9uIHNldHMgd291bGQgYmUgZGlmZmVyZW50IGFuZCB3ZSBjb3VsZG4ndFxuLy8gYnVpbGQgdXAgYSBzdWl0YWJsZSBERkEuPC9wPlxuLy9cbi8vIDxwPlxuLy8gV2hlbiBidWlsZGluZyBhIERGQSBhY2NlcHQgc3RhdGUgZHVyaW5nIEFUTiBzaW11bGF0aW9uLCB3ZSBldmFsdWF0ZSBhbnlcbi8vIHByZWRpY2F0ZXMgYW5kIHJldHVybiB0aGUgc29sZSBzZW1hbnRpY2FsbHkgdmFsaWQgYWx0ZXJuYXRpdmUuIElmIHRoZXJlIGlzXG4vLyBtb3JlIHRoYW4gMSBhbHRlcm5hdGl2ZSwgd2UgcmVwb3J0IGFuIGFtYmlndWl0eS4gSWYgdGhlcmUgYXJlIDAgYWx0ZXJuYXRpdmVzLFxuLy8gd2UgdGhyb3cgYW4gZXhjZXB0aW9uLiBBbHRlcm5hdGl2ZXMgd2l0aG91dCBwcmVkaWNhdGVzIGFjdCBsaWtlIHRoZXkgaGF2ZVxuLy8gdHJ1ZSBwcmVkaWNhdGVzLiBUaGUgc2ltcGxlIHdheSB0byB0aGluayBhYm91dCBpdCBpcyB0byBzdHJpcCBhd2F5IGFsbFxuLy8gYWx0ZXJuYXRpdmVzIHdpdGggZmFsc2UgcHJlZGljYXRlcyBhbmQgY2hvb3NlIHRoZSBtaW5pbXVtIGFsdGVybmF0aXZlIHRoYXRcbi8vIHJlbWFpbnMuPC9wPlxuLy9cbi8vIDxwPlxuLy8gV2hlbiB3ZSBzdGFydCBpbiB0aGUgREZBIGFuZCByZWFjaCBhbiBhY2NlcHQgc3RhdGUgdGhhdCdzIHByZWRpY2F0ZWQsIHdlIHRlc3Rcbi8vIHRob3NlIGFuZCByZXR1cm4gdGhlIG1pbmltdW0gc2VtYW50aWNhbGx5IHZpYWJsZSBhbHRlcm5hdGl2ZS4gSWYgbm9cbi8vIGFsdGVybmF0aXZlcyBhcmUgdmlhYmxlLCB3ZSB0aHJvdyBhbiBleGNlcHRpb24uPC9wPlxuLy9cbi8vIDxwPlxuLy8gRHVyaW5nIGZ1bGwgTEwgQVROIHNpbXVsYXRpb24sIGNsb3N1cmUgYWx3YXlzIGV2YWx1YXRlcyBwcmVkaWNhdGVzIGFuZFxuLy8gb24tdGhlLWZseS4gVGhpcyBpcyBjcnVjaWFsIHRvIHJlZHVjaW5nIHRoZSBjb25maWd1cmF0aW9uIHNldCBzaXplIGR1cmluZ1xuLy8gY2xvc3VyZS4gSXQgaGl0cyBhIGxhbmRtaW5lIHdoZW4gcGFyc2luZyB3aXRoIHRoZSBKYXZhIGdyYW1tYXIsIGZvciBleGFtcGxlLFxuLy8gd2l0aG91dCB0aGlzIG9uLXRoZS1mbHkgZXZhbHVhdGlvbi48L3A+XG4vL1xuLy8gPHA+XG4vLyA8c3Ryb25nPlNIQVJJTkcgREZBPC9zdHJvbmc+PC9wPlxuLy9cbi8vIDxwPlxuLy8gQWxsIGluc3RhbmNlcyBvZiB0aGUgc2FtZSBwYXJzZXIgc2hhcmUgdGhlIHNhbWUgZGVjaXNpb24gREZBcyB0aHJvdWdoIGFcbi8vIHN0YXRpYyBmaWVsZC4gRWFjaCBpbnN0YW5jZSBnZXRzIGl0cyBvd24gQVROIHNpbXVsYXRvciBidXQgdGhleSBzaGFyZSB0aGVcbi8vIHNhbWUge0BsaW5rIC8vZGVjaXNpb25Ub0RGQX0gZmllbGQuIFRoZXkgYWxzbyBzaGFyZSBhXG4vLyB7QGxpbmsgUHJlZGljdGlvbkNvbnRleHRDYWNoZX0gb2JqZWN0IHRoYXQgbWFrZXMgc3VyZSB0aGF0IGFsbFxuLy8ge0BsaW5rIFByZWRpY3Rpb25Db250ZXh0fSBvYmplY3RzIGFyZSBzaGFyZWQgYW1vbmcgdGhlIERGQSBzdGF0ZXMuIFRoaXMgbWFrZXNcbi8vIGEgYmlnIHNpemUgZGlmZmVyZW5jZS48L3A+XG4vL1xuLy8gPHA+XG4vLyA8c3Ryb25nPlRIUkVBRCBTQUZFVFk8L3N0cm9uZz48L3A+XG4vL1xuLy8gPHA+XG4vLyBUaGUge0BsaW5rIFBhcnNlckFUTlNpbXVsYXRvcn0gbG9ja3Mgb24gdGhlIHtAbGluayAvL2RlY2lzaW9uVG9ERkF9IGZpZWxkIHdoZW5cbi8vIGl0IGFkZHMgYSBuZXcgREZBIG9iamVjdCB0byB0aGF0IGFycmF5LiB7QGxpbmsgLy9hZGRERkFFZGdlfVxuLy8gbG9ja3Mgb24gdGhlIERGQSBmb3IgdGhlIGN1cnJlbnQgZGVjaXNpb24gd2hlbiBzZXR0aW5nIHRoZVxuLy8ge0BsaW5rIERGQVN0YXRlLy9lZGdlc30gZmllbGQuIHtAbGluayAvL2FkZERGQVN0YXRlfSBsb2NrcyBvblxuLy8gdGhlIERGQSBmb3IgdGhlIGN1cnJlbnQgZGVjaXNpb24gd2hlbiBsb29raW5nIHVwIGEgREZBIHN0YXRlIHRvIHNlZSBpZiBpdFxuLy8gYWxyZWFkeSBleGlzdHMuIFdlIG11c3QgbWFrZSBzdXJlIHRoYXQgYWxsIHJlcXVlc3RzIHRvIGFkZCBERkEgc3RhdGVzIHRoYXRcbi8vIGFyZSBlcXVpdmFsZW50IHJlc3VsdCBpbiB0aGUgc2FtZSBzaGFyZWQgREZBIG9iamVjdC4gVGhpcyBpcyBiZWNhdXNlIGxvdHMgb2Zcbi8vIHRocmVhZHMgd2lsbCBiZSB0cnlpbmcgdG8gdXBkYXRlIHRoZSBERkEgYXQgb25jZS4gVGhlXG4vLyB7QGxpbmsgLy9hZGRERkFTdGF0ZX0gbWV0aG9kIGFsc28gbG9ja3MgaW5zaWRlIHRoZSBERkEgbG9ja1xuLy8gYnV0IHRoaXMgdGltZSBvbiB0aGUgc2hhcmVkIGNvbnRleHQgY2FjaGUgd2hlbiBpdCByZWJ1aWxkcyB0aGVcbi8vIGNvbmZpZ3VyYXRpb25zJyB7QGxpbmsgUHJlZGljdGlvbkNvbnRleHR9IG9iamVjdHMgdXNpbmcgY2FjaGVkXG4vLyBzdWJncmFwaHMvbm9kZXMuIE5vIG90aGVyIGxvY2tpbmcgb2NjdXJzLCBldmVuIGR1cmluZyBERkEgc2ltdWxhdGlvbi4gVGhpcyBpc1xuLy8gc2FmZSBhcyBsb25nIGFzIHdlIGNhbiBndWFyYW50ZWUgdGhhdCBhbGwgdGhyZWFkcyByZWZlcmVuY2luZ1xuLy8ge0Bjb2RlIHMuZWRnZVt0XX0gZ2V0IHRoZSBzYW1lIHBoeXNpY2FsIHRhcmdldCB7QGxpbmsgREZBU3RhdGV9LCBvclxuLy8ge0Bjb2RlIG51bGx9LiBPbmNlIGludG8gdGhlIERGQSwgdGhlIERGQSBzaW11bGF0aW9uIGRvZXMgbm90IHJlZmVyZW5jZSB0aGVcbi8vIHtAbGluayBERkEvL3N0YXRlc30gbWFwLiBJdCBmb2xsb3dzIHRoZSB7QGxpbmsgREZBU3RhdGUvL2VkZ2VzfSBmaWVsZCB0byBuZXdcbi8vIHRhcmdldHMuIFRoZSBERkEgc2ltdWxhdG9yIHdpbGwgZWl0aGVyIGZpbmQge0BsaW5rIERGQVN0YXRlLy9lZGdlc30gdG8gYmVcbi8vIHtAY29kZSBudWxsfSwgdG8gYmUgbm9uLXtAY29kZSBudWxsfSBhbmQge0Bjb2RlIGRmYS5lZGdlc1t0XX0gbnVsbCwgb3Jcbi8vIHtAY29kZSBkZmEuZWRnZXNbdF19IHRvIGJlIG5vbi1udWxsLiBUaGVcbi8vIHtAbGluayAvL2FkZERGQUVkZ2V9IG1ldGhvZCBjb3VsZCBiZSByYWNpbmcgdG8gc2V0IHRoZSBmaWVsZFxuLy8gYnV0IGluIGVpdGhlciBjYXNlIHRoZSBERkEgc2ltdWxhdG9yIHdvcmtzOyBpZiB7QGNvZGUgbnVsbH0sIGFuZCByZXF1ZXN0cyBBVE5cbi8vIHNpbXVsYXRpb24uIEl0IGNvdWxkIGFsc28gcmFjZSB0cnlpbmcgdG8gZ2V0IHtAY29kZSBkZmEuZWRnZXNbdF19LCBidXQgZWl0aGVyXG4vLyB3YXkgaXQgd2lsbCB3b3JrIGJlY2F1c2UgaXQncyBub3QgZG9pbmcgYSB0ZXN0IGFuZCBzZXQgb3BlcmF0aW9uLjwvcD5cbi8vXG4vLyA8cD5cbi8vIDxzdHJvbmc+U3RhcnRpbmcgd2l0aCBTTEwgdGhlbiBmYWlsaW5nIHRvIGNvbWJpbmVkIFNMTC9MTCAoVHdvLVN0YWdlXG4vLyBQYXJzaW5nKTwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5cbi8vIFNhbSBwb2ludGVkIG91dCB0aGF0IGlmIFNMTCBkb2VzIG5vdCBnaXZlIGEgc3ludGF4IGVycm9yLCB0aGVuIHRoZXJlIGlzIG5vXG4vLyBwb2ludCBpbiBkb2luZyBmdWxsIExMLCB3aGljaCBpcyBzbG93ZXIuIFdlIG9ubHkgaGF2ZSB0byB0cnkgTEwgaWYgd2UgZ2V0IGFcbi8vIHN5bnRheCBlcnJvci4gRm9yIG1heGltdW0gc3BlZWQsIFNhbSBzdGFydHMgdGhlIHBhcnNlciBzZXQgdG8gcHVyZSBTTExcbi8vIG1vZGUgd2l0aCB0aGUge0BsaW5rIEJhaWxFcnJvclN0cmF0ZWd5fTo8L3A+XG4vL1xuLy8gPHByZT5cbi8vIHBhcnNlci57QGxpbmsgUGFyc2VyLy9nZXRJbnRlcnByZXRlcigpIGdldEludGVycHJldGVyKCl9LntAbGluayAvL3NldFByZWRpY3Rpb25Nb2RlIHNldFByZWRpY3Rpb25Nb2RlfXtAY29kZSAofXtAbGluayBQcmVkaWN0aW9uTW9kZS8vU0xMfXtAY29kZSApfTtcbi8vIHBhcnNlci57QGxpbmsgUGFyc2VyLy9zZXRFcnJvckhhbmRsZXIgc2V0RXJyb3JIYW5kbGVyfShuZXcge0BsaW5rIEJhaWxFcnJvclN0cmF0ZWd5fSgpKTtcbi8vIDwvcHJlPlxuLy9cbi8vIDxwPlxuLy8gSWYgaXQgZG9lcyBub3QgZ2V0IGEgc3ludGF4IGVycm9yLCB0aGVuIHdlJ3JlIGRvbmUuIElmIGl0IGRvZXMgZ2V0IGEgc3ludGF4XG4vLyBlcnJvciwgd2UgbmVlZCB0byByZXRyeSB3aXRoIHRoZSBjb21iaW5lZCBTTEwvTEwgc3RyYXRlZ3kuPC9wPlxuLy9cbi8vIDxwPlxuLy8gVGhlIHJlYXNvbiB0aGlzIHdvcmtzIGlzIGFzIGZvbGxvd3MuIElmIHRoZXJlIGFyZSBubyBTTEwgY29uZmxpY3RzLCB0aGVuIHRoZVxuLy8gZ3JhbW1hciBpcyBTTEwgKGF0IGxlYXN0IGZvciB0aGF0IGlucHV0IHNldCkuIElmIHRoZXJlIGlzIGFuIFNMTCBjb25mbGljdCxcbi8vIHRoZSBmdWxsIExMIGFuYWx5c2lzIG11c3QgeWllbGQgYSBzZXQgb2YgdmlhYmxlIGFsdGVybmF0aXZlcyB3aGljaCBpcyBhXG4vLyBzdWJzZXQgb2YgdGhlIGFsdGVybmF0aXZlcyByZXBvcnRlZCBieSBTTEwuIElmIHRoZSBMTCBzZXQgaXMgYSBzaW5nbGV0b24sXG4vLyB0aGVuIHRoZSBncmFtbWFyIGlzIExMIGJ1dCBub3QgU0xMLiBJZiB0aGUgTEwgc2V0IGlzIHRoZSBzYW1lIHNpemUgYXMgdGhlIFNMTFxuLy8gc2V0LCB0aGUgZGVjaXNpb24gaXMgU0xMLiBJZiB0aGUgTEwgc2V0IGhhcyBzaXplICZndDsgMSwgdGhlbiB0aGF0IGRlY2lzaW9uXG4vLyBpcyB0cnVseSBhbWJpZ3VvdXMgb24gdGhlIGN1cnJlbnQgaW5wdXQuIElmIHRoZSBMTCBzZXQgaXMgc21hbGxlciwgdGhlbiB0aGVcbi8vIFNMTCBjb25mbGljdCByZXNvbHV0aW9uIG1pZ2h0IGNob29zZSBhbiBhbHRlcm5hdGl2ZSB0aGF0IHRoZSBmdWxsIExMIHdvdWxkXG4vLyBydWxlIG91dCBhcyBhIHBvc3NpYmlsaXR5IGJhc2VkIHVwb24gYmV0dGVyIGNvbnRleHQgaW5mb3JtYXRpb24uIElmIHRoYXQnc1xuLy8gdGhlIGNhc2UsIHRoZW4gdGhlIFNMTCBwYXJzZSB3aWxsIGRlZmluaXRlbHkgZ2V0IGFuIGVycm9yIGJlY2F1c2UgdGhlIGZ1bGwgTExcbi8vIGFuYWx5c2lzIHNheXMgaXQncyBub3QgdmlhYmxlLiBJZiBTTEwgY29uZmxpY3QgcmVzb2x1dGlvbiBjaG9vc2VzIGFuXG4vLyBhbHRlcm5hdGl2ZSB3aXRoaW4gdGhlIExMIHNldCwgdGhlbSBib3RoIFNMTCBhbmQgTEwgd291bGQgY2hvb3NlIHRoZSBzYW1lXG4vLyBhbHRlcm5hdGl2ZSBiZWNhdXNlIHRoZXkgYm90aCBjaG9vc2UgdGhlIG1pbmltdW0gb2YgbXVsdGlwbGUgY29uZmxpY3Rpbmdcbi8vIGFsdGVybmF0aXZlcy48L3A+XG4vL1xuLy8gPHA+XG4vLyBMZXQncyBzYXkgd2UgaGF2ZSBhIHNldCBvZiBTTEwgY29uZmxpY3RpbmcgYWx0ZXJuYXRpdmVzIHtAY29kZSB7MSwgMiwgM319IGFuZFxuLy8gYSBzbWFsbGVyIExMIHNldCBjYWxsZWQgPGVtPnM8L2VtPi4gSWYgPGVtPnM8L2VtPiBpcyB7QGNvZGUgezIsIDN9fSwgdGhlbiBTTExcbi8vIHBhcnNpbmcgd2lsbCBnZXQgYW4gZXJyb3IgYmVjYXVzZSBTTEwgd2lsbCBwdXJzdWUgYWx0ZXJuYXRpdmUgMS4gSWZcbi8vIDxlbT5zPC9lbT4gaXMge0Bjb2RlIHsxLCAyfX0gb3Ige0Bjb2RlIHsxLCAzfX0gdGhlbiBib3RoIFNMTCBhbmQgTEwgd2lsbFxuLy8gY2hvb3NlIHRoZSBzYW1lIGFsdGVybmF0aXZlIGJlY2F1c2UgYWx0ZXJuYXRpdmUgb25lIGlzIHRoZSBtaW5pbXVtIG9mIGVpdGhlclxuLy8gc2V0LiBJZiA8ZW0+czwvZW0+IGlzIHtAY29kZSB7Mn19IG9yIHtAY29kZSB7M319IHRoZW4gU0xMIHdpbGwgZ2V0IGEgc3ludGF4XG4vLyBlcnJvci4gSWYgPGVtPnM8L2VtPiBpcyB7QGNvZGUgezF9fSB0aGVuIFNMTCB3aWxsIHN1Y2NlZWQuPC9wPlxuLy9cbi8vIDxwPlxuLy8gT2YgY291cnNlLCBpZiB0aGUgaW5wdXQgaXMgaW52YWxpZCwgdGhlbiB3ZSB3aWxsIGdldCBhbiBlcnJvciBmb3Igc3VyZSBpblxuLy8gYm90aCBTTEwgYW5kIExMIHBhcnNpbmcuIEVycm9uZW91cyBpbnB1dCB3aWxsIHRoZXJlZm9yZSByZXF1aXJlIDIgcGFzc2VzIG92ZXJcbi8vIHRoZSBpbnB1dC48L3A+XG4vL1xuXG52YXIgVXRpbHMgPSByZXF1aXJlKCcuLy4uL1V0aWxzJyk7XG52YXIgU2V0ID0gVXRpbHMuU2V0O1xudmFyIEJpdFNldCA9IFV0aWxzLkJpdFNldDtcbnZhciBEb3VibGVEaWN0ID0gVXRpbHMuRG91YmxlRGljdDtcbnZhciBBVE4gPSByZXF1aXJlKCcuL0FUTicpLkFUTjtcbnZhciBBVE5TdGF0ZSA9IHJlcXVpcmUoJy4vQVROU3RhdGUnKS5BVE5TdGF0ZTtcbnZhciBBVE5Db25maWcgPSByZXF1aXJlKCcuL0FUTkNvbmZpZycpLkFUTkNvbmZpZztcbnZhciBBVE5Db25maWdTZXQgPSByZXF1aXJlKCcuL0FUTkNvbmZpZ1NldCcpLkFUTkNvbmZpZ1NldDtcbnZhciBUb2tlbiA9IHJlcXVpcmUoJy4vLi4vVG9rZW4nKS5Ub2tlbjtcbnZhciBERkFTdGF0ZSA9IHJlcXVpcmUoJy4vLi4vZGZhL0RGQVN0YXRlJykuREZBU3RhdGU7XG52YXIgUHJlZFByZWRpY3Rpb24gPSByZXF1aXJlKCcuLy4uL2RmYS9ERkFTdGF0ZScpLlByZWRQcmVkaWN0aW9uO1xudmFyIEFUTlNpbXVsYXRvciA9IHJlcXVpcmUoJy4vQVROU2ltdWxhdG9yJykuQVROU2ltdWxhdG9yO1xudmFyIFByZWRpY3Rpb25Nb2RlID0gcmVxdWlyZSgnLi9QcmVkaWN0aW9uTW9kZScpLlByZWRpY3Rpb25Nb2RlO1xudmFyIFJ1bGVDb250ZXh0ID0gcmVxdWlyZSgnLi8uLi9SdWxlQ29udGV4dCcpLlJ1bGVDb250ZXh0O1xudmFyIFBhcnNlclJ1bGVDb250ZXh0ID0gcmVxdWlyZSgnLi8uLi9QYXJzZXJSdWxlQ29udGV4dCcpLlBhcnNlclJ1bGVDb250ZXh0O1xudmFyIFNlbWFudGljQ29udGV4dCA9IHJlcXVpcmUoJy4vU2VtYW50aWNDb250ZXh0JykuU2VtYW50aWNDb250ZXh0O1xudmFyIFN0YXJMb29wRW50cnlTdGF0ZSA9IHJlcXVpcmUoJy4vQVROU3RhdGUnKS5TdGFyTG9vcEVudHJ5U3RhdGU7XG52YXIgUnVsZVN0b3BTdGF0ZSA9IHJlcXVpcmUoJy4vQVROU3RhdGUnKS5SdWxlU3RvcFN0YXRlO1xudmFyIFByZWRpY3Rpb25Db250ZXh0ID0gcmVxdWlyZSgnLi8uLi9QcmVkaWN0aW9uQ29udGV4dCcpLlByZWRpY3Rpb25Db250ZXh0O1xudmFyIEludGVydmFsID0gcmVxdWlyZSgnLi8uLi9JbnRlcnZhbFNldCcpLkludGVydmFsO1xudmFyIFRyYW5zaXRpb25zID0gcmVxdWlyZSgnLi9UcmFuc2l0aW9uJyk7XG52YXIgVHJhbnNpdGlvbiA9IFRyYW5zaXRpb25zLlRyYW5zaXRpb247XG52YXIgU2V0VHJhbnNpdGlvbiA9IFRyYW5zaXRpb25zLlNldFRyYW5zaXRpb247XG52YXIgTm90U2V0VHJhbnNpdGlvbiA9IFRyYW5zaXRpb25zLk5vdFNldFRyYW5zaXRpb247XG52YXIgUnVsZVRyYW5zaXRpb24gPSBUcmFuc2l0aW9ucy5SdWxlVHJhbnNpdGlvbjtcbnZhciBBY3Rpb25UcmFuc2l0aW9uID0gVHJhbnNpdGlvbnMuQWN0aW9uVHJhbnNpdGlvbjtcbnZhciBOb1ZpYWJsZUFsdEV4Y2VwdGlvbiA9IHJlcXVpcmUoJy4vLi4vZXJyb3IvRXJyb3JzJykuTm9WaWFibGVBbHRFeGNlcHRpb247XG5cbnZhciBTaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dCA9IHJlcXVpcmUoJy4vLi4vUHJlZGljdGlvbkNvbnRleHQnKS5TaW5nbGV0b25QcmVkaWN0aW9uQ29udGV4dDtcbnZhciBwcmVkaWN0aW9uQ29udGV4dEZyb21SdWxlQ29udGV4dCA9IHJlcXVpcmUoJy4vLi4vUHJlZGljdGlvbkNvbnRleHQnKS5wcmVkaWN0aW9uQ29udGV4dEZyb21SdWxlQ29udGV4dDtcblxuZnVuY3Rpb24gUGFyc2VyQVROU2ltdWxhdG9yKHBhcnNlciwgYXRuLCBkZWNpc2lvblRvREZBLCBzaGFyZWRDb250ZXh0Q2FjaGUpIHtcblx0QVROU2ltdWxhdG9yLmNhbGwodGhpcywgYXRuLCBzaGFyZWRDb250ZXh0Q2FjaGUpO1xuICAgIHRoaXMucGFyc2VyID0gcGFyc2VyO1xuICAgIHRoaXMuZGVjaXNpb25Ub0RGQSA9IGRlY2lzaW9uVG9ERkE7XG4gICAgLy8gU0xMLCBMTCwgb3IgTEwgKyBleGFjdCBhbWJpZyBkZXRlY3Rpb24/Ly9cbiAgICB0aGlzLnByZWRpY3Rpb25Nb2RlID0gUHJlZGljdGlvbk1vZGUuTEw7XG4gICAgLy8gTEFNRSBnbG9iYWxzIHRvIGF2b2lkIHBhcmFtZXRlcnMhISEhISBJIG5lZWQgdGhlc2UgZG93biBkZWVwIGluIHByZWRUcmFuc2l0aW9uXG4gICAgdGhpcy5faW5wdXQgPSBudWxsO1xuICAgIHRoaXMuX3N0YXJ0SW5kZXggPSAwO1xuICAgIHRoaXMuX291dGVyQ29udGV4dCA9IG51bGw7XG4gICAgdGhpcy5fZGZhID0gbnVsbDtcbiAgICAvLyBFYWNoIHByZWRpY3Rpb24gb3BlcmF0aW9uIHVzZXMgYSBjYWNoZSBmb3IgbWVyZ2Ugb2YgcHJlZGljdGlvbiBjb250ZXh0cy5cbiAgICAvLyAgRG9uJ3Qga2VlcCBhcm91bmQgYXMgaXQgd2FzdGVzIGh1Z2UgYW1vdW50cyBvZiBtZW1vcnkuIERvdWJsZUtleU1hcFxuICAgIC8vICBpc24ndCBzeW5jaHJvbml6ZWQgYnV0IHdlJ3JlIG9rIHNpbmNlIHR3byB0aHJlYWRzIHNob3VsZG4ndCByZXVzZSBzYW1lXG4gICAgLy8gIHBhcnNlci9hdG5zaW0gb2JqZWN0IGJlY2F1c2UgaXQgY2FuIG9ubHkgaGFuZGxlIG9uZSBpbnB1dCBhdCBhIHRpbWUuXG4gICAgLy8gIFRoaXMgbWFwcyBncmFwaHMgYSBhbmQgYiB0byBtZXJnZWQgcmVzdWx0IGMuIChhLGIpJnJhcnI7Yy4gV2UgY2FuIGF2b2lkXG4gICAgLy8gIHRoZSBtZXJnZSBpZiB3ZSBldmVyIHNlZSBhIGFuZCBiIGFnYWluLiAgTm90ZSB0aGF0IChiLGEpJnJhcnI7YyBzaG91bGRcbiAgICAvLyAgYWxzbyBiZSBleGFtaW5lZCBkdXJpbmcgY2FjaGUgbG9va3VwLlxuICAgIC8vXG4gICAgdGhpcy5tZXJnZUNhY2hlID0gbnVsbDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoQVROU2ltdWxhdG9yLnByb3RvdHlwZSk7XG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUGFyc2VyQVROU2ltdWxhdG9yO1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmRlYnVnID0gZmFsc2U7XG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmRlYnVnX2Nsb3N1cmUgPSBmYWxzZTtcblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZGVidWdfYWRkID0gZmFsc2U7XG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmRlYnVnX2xpc3RfYXRuX2RlY2lzaW9ucyA9IGZhbHNlO1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5kZmFfZGVidWcgPSBmYWxzZTtcblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucmV0cnlfZGVidWcgPSBmYWxzZTtcblxuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24oKSB7XG59O1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmFkYXB0aXZlUHJlZGljdCA9IGZ1bmN0aW9uKGlucHV0LCBkZWNpc2lvbiwgb3V0ZXJDb250ZXh0KSB7XG4gICAgaWYgKHRoaXMuZGVidWcgfHwgdGhpcy5kZWJ1Z19saXN0X2F0bl9kZWNpc2lvbnMpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJhZGFwdGl2ZVByZWRpY3QgZGVjaXNpb24gXCIgKyBkZWNpc2lvbiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIgZXhlYyBMQSgxKT09XCIgKyB0aGlzLmdldExvb2thaGVhZE5hbWUoaW5wdXQpICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIiBsaW5lIFwiICsgaW5wdXQuTFQoMSkubGluZSArIFwiOlwiICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dC5MVCgxKS5jb2x1bW4pO1xuICAgIH1cbiAgICB0aGlzLl9pbnB1dCA9IGlucHV0O1xuICAgIHRoaXMuX3N0YXJ0SW5kZXggPSBpbnB1dC5pbmRleDtcbiAgICB0aGlzLl9vdXRlckNvbnRleHQgPSBvdXRlckNvbnRleHQ7XG5cbiAgICB2YXIgZGZhID0gdGhpcy5kZWNpc2lvblRvREZBW2RlY2lzaW9uXTtcbiAgICB0aGlzLl9kZmEgPSBkZmE7XG4gICAgdmFyIG0gPSBpbnB1dC5tYXJrKCk7XG4gICAgdmFyIGluZGV4ID0gaW5wdXQuaW5kZXg7XG5cbiAgICAvLyBOb3cgd2UgYXJlIGNlcnRhaW4gdG8gaGF2ZSBhIHNwZWNpZmljIGRlY2lzaW9uJ3MgREZBXG4gICAgLy8gQnV0LCBkbyB3ZSBzdGlsbCBuZWVkIGFuIGluaXRpYWwgc3RhdGU/XG4gICAgdHJ5IHtcbiAgICAgICAgdmFyIHMwO1xuICAgICAgICBpZiAoZGZhLnByZWNlZGVuY2VEZmEpIHtcbiAgICAgICAgICAgIC8vIHRoZSBzdGFydCBzdGF0ZSBmb3IgYSBwcmVjZWRlbmNlIERGQSBkZXBlbmRzIG9uIHRoZSBjdXJyZW50XG4gICAgICAgICAgICAvLyBwYXJzZXIgcHJlY2VkZW5jZSwgYW5kIGlzIHByb3ZpZGVkIGJ5IGEgREZBIG1ldGhvZC5cbiAgICAgICAgICAgIHMwID0gZGZhLmdldFByZWNlZGVuY2VTdGFydFN0YXRlKHRoaXMucGFyc2VyLmdldFByZWNlZGVuY2UoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyB0aGUgc3RhcnQgc3RhdGUgZm9yIGEgXCJyZWd1bGFyXCIgREZBIGlzIGp1c3QgczBcbiAgICAgICAgICAgIHMwID0gZGZhLnMwO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzMD09PW51bGwpIHtcbiAgICAgICAgICAgIGlmIChvdXRlckNvbnRleHQ9PT1udWxsKSB7XG4gICAgICAgICAgICAgICAgb3V0ZXJDb250ZXh0ID0gUnVsZUNvbnRleHQuRU1QVFk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLmRlYnVnX2xpc3RfYXRuX2RlY2lzaW9ucykge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwicHJlZGljdEFUTiBkZWNpc2lvbiBcIiArIGRmYS5kZWNpc2lvbiArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiIGV4ZWMgTEEoMSk9PVwiICsgdGhpcy5nZXRMb29rYWhlYWROYW1lKGlucHV0KSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiLCBvdXRlckNvbnRleHQ9XCIgKyBvdXRlckNvbnRleHQudG9TdHJpbmcodGhpcy5wYXJzZXIucnVsZU5hbWVzKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBmdWxsQ3R4ID0gZmFsc2U7XG4gICAgICAgICAgICB2YXIgczBfY2xvc3VyZSA9IHRoaXMuY29tcHV0ZVN0YXJ0U3RhdGUoZGZhLmF0blN0YXJ0U3RhdGUsIFJ1bGVDb250ZXh0LkVNUFRZLCBmdWxsQ3R4KTtcblxuICAgICAgICAgICAgaWYoIGRmYS5wcmVjZWRlbmNlRGZhKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHByZWNlZGVuY2UgREZBLCB3ZSB1c2UgYXBwbHlQcmVjZWRlbmNlRmlsdGVyXG4gICAgICAgICAgICAgICAgLy8gdG8gY29udmVydCB0aGUgY29tcHV0ZWQgc3RhcnQgc3RhdGUgdG8gYSBwcmVjZWRlbmNlIHN0YXJ0XG4gICAgICAgICAgICAgICAgLy8gc3RhdGUuIFdlIHRoZW4gdXNlIERGQS5zZXRQcmVjZWRlbmNlU3RhcnRTdGF0ZSB0byBzZXQgdGhlXG4gICAgICAgICAgICAgICAgLy8gYXBwcm9wcmlhdGUgc3RhcnQgc3RhdGUgZm9yIHRoZSBwcmVjZWRlbmNlIGxldmVsIHJhdGhlclxuICAgICAgICAgICAgICAgIC8vIHRoYW4gc2ltcGx5IHNldHRpbmcgREZBLnMwLlxuICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgZGZhLnMwLmNvbmZpZ3MgPSBzMF9jbG9zdXJlOyAvLyBub3QgdXNlZCBmb3IgcHJlZGljdGlvbiBidXQgdXNlZnVsIHRvIGtub3cgc3RhcnQgY29uZmlncyBhbnl3YXlcbiAgICAgICAgICAgICAgICBzMF9jbG9zdXJlID0gdGhpcy5hcHBseVByZWNlZGVuY2VGaWx0ZXIoczBfY2xvc3VyZSk7XG4gICAgICAgICAgICAgICAgczAgPSB0aGlzLmFkZERGQVN0YXRlKGRmYSwgbmV3IERGQVN0YXRlKG51bGwsIHMwX2Nsb3N1cmUpKTtcbiAgICAgICAgICAgICAgICBkZmEuc2V0UHJlY2VkZW5jZVN0YXJ0U3RhdGUodGhpcy5wYXJzZXIuZ2V0UHJlY2VkZW5jZSgpLCBzMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHMwID0gdGhpcy5hZGRERkFTdGF0ZShkZmEsIG5ldyBERkFTdGF0ZShudWxsLCBzMF9jbG9zdXJlKSk7XG4gICAgICAgICAgICAgICAgZGZhLnMwID0gczA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGFsdCA9IHRoaXMuZXhlY0FUTihkZmEsIHMwLCBpbnB1dCwgaW5kZXgsIG91dGVyQ29udGV4dCk7XG4gICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkRGQSBhZnRlciBwcmVkaWN0QVROOiBcIiArIGRmYS50b1N0cmluZyh0aGlzLnBhcnNlci5saXRlcmFsTmFtZXMpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYWx0O1xuICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMuX2RmYSA9IG51bGw7XG4gICAgICAgIHRoaXMubWVyZ2VDYWNoZSA9IG51bGw7IC8vIHdhY2sgY2FjaGUgYWZ0ZXIgZWFjaCBwcmVkaWN0aW9uXG4gICAgICAgIGlucHV0LnNlZWsoaW5kZXgpO1xuICAgICAgICBpbnB1dC5yZWxlYXNlKG0pO1xuICAgIH1cbn07XG4vLyBQZXJmb3JtcyBBVE4gc2ltdWxhdGlvbiB0byBjb21wdXRlIGEgcHJlZGljdGVkIGFsdGVybmF0aXZlIGJhc2VkXG4vLyAgdXBvbiB0aGUgcmVtYWluaW5nIGlucHV0LCBidXQgYWxzbyB1cGRhdGVzIHRoZSBERkEgY2FjaGUgdG8gYXZvaWRcbi8vICBoYXZpbmcgdG8gdHJhdmVyc2UgdGhlIEFUTiBhZ2FpbiBmb3IgdGhlIHNhbWUgaW5wdXQgc2VxdWVuY2UuXG5cbi8vIFRoZXJlIGFyZSBzb21lIGtleSBjb25kaXRpb25zIHdlJ3JlIGxvb2tpbmcgZm9yIGFmdGVyIGNvbXB1dGluZyBhIG5ld1xuLy8gc2V0IG9mIEFUTiBjb25maWdzIChwcm9wb3NlZCBERkEgc3RhdGUpOlxuICAgICAgLy8gaWYgdGhlIHNldCBpcyBlbXB0eSwgdGhlcmUgaXMgbm8gdmlhYmxlIGFsdGVybmF0aXZlIGZvciBjdXJyZW50IHN5bWJvbFxuICAgICAgLy8gZG9lcyB0aGUgc3RhdGUgdW5pcXVlbHkgcHJlZGljdCBhbiBhbHRlcm5hdGl2ZT9cbiAgICAgIC8vIGRvZXMgdGhlIHN0YXRlIGhhdmUgYSBjb25mbGljdCB0aGF0IHdvdWxkIHByZXZlbnQgdXMgZnJvbVxuICAgICAgLy8gICBwdXR0aW5nIGl0IG9uIHRoZSB3b3JrIGxpc3Q/XG5cbi8vIFdlIGFsc28gaGF2ZSBzb21lIGtleSBvcGVyYXRpb25zIHRvIGRvOlxuICAgICAgLy8gYWRkIGFuIGVkZ2UgZnJvbSBwcmV2aW91cyBERkEgc3RhdGUgdG8gcG90ZW50aWFsbHkgbmV3IERGQSBzdGF0ZSwgRCxcbiAgICAgIC8vICAgdXBvbiBjdXJyZW50IHN5bWJvbCBidXQgb25seSBpZiBhZGRpbmcgdG8gd29yayBsaXN0LCB3aGljaCBtZWFucyBpbiBhbGxcbiAgICAgIC8vICAgY2FzZXMgZXhjZXB0IG5vIHZpYWJsZSBhbHRlcm5hdGl2ZSAoYW5kIHBvc3NpYmx5IG5vbi1ncmVlZHkgZGVjaXNpb25zPylcbiAgICAgIC8vIGNvbGxlY3RpbmcgcHJlZGljYXRlcyBhbmQgYWRkaW5nIHNlbWFudGljIGNvbnRleHQgdG8gREZBIGFjY2VwdCBzdGF0ZXNcbiAgICAgIC8vIGFkZGluZyBydWxlIGNvbnRleHQgdG8gY29udGV4dC1zZW5zaXRpdmUgREZBIGFjY2VwdCBzdGF0ZXNcbiAgICAgIC8vIGNvbnN1bWluZyBhbiBpbnB1dCBzeW1ib2xcbiAgICAgIC8vIHJlcG9ydGluZyBhIGNvbmZsaWN0XG4gICAgICAvLyByZXBvcnRpbmcgYW4gYW1iaWd1aXR5XG4gICAgICAvLyByZXBvcnRpbmcgYSBjb250ZXh0IHNlbnNpdGl2aXR5XG4gICAgICAvLyByZXBvcnRpbmcgaW5zdWZmaWNpZW50IHByZWRpY2F0ZXNcblxuLy8gY292ZXIgdGhlc2UgY2FzZXM6XG4vLyAgICBkZWFkIGVuZFxuLy8gICAgc2luZ2xlIGFsdFxuLy8gICAgc2luZ2xlIGFsdCArIHByZWRzXG4vLyAgICBjb25mbGljdFxuLy8gICAgY29uZmxpY3QgKyBwcmVkc1xuLy9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZXhlY0FUTiA9IGZ1bmN0aW9uKGRmYSwgczAsIGlucHV0LCBzdGFydEluZGV4LCBvdXRlckNvbnRleHQgKSB7XG4gICAgaWYgKHRoaXMuZGVidWcgfHwgdGhpcy5kZWJ1Z19saXN0X2F0bl9kZWNpc2lvbnMpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJleGVjQVROIGRlY2lzaW9uIFwiICsgZGZhLmRlY2lzaW9uICtcbiAgICAgICAgICAgICAgICBcIiBleGVjIExBKDEpPT1cIiArIHRoaXMuZ2V0TG9va2FoZWFkTmFtZShpbnB1dCkgK1xuICAgICAgICAgICAgICAgIFwiIGxpbmUgXCIgKyBpbnB1dC5MVCgxKS5saW5lICsgXCI6XCIgKyBpbnB1dC5MVCgxKS5jb2x1bW4pO1xuICAgIH1cbiAgICB2YXIgYWx0O1xuICAgIHZhciBwcmV2aW91c0QgPSBzMDtcblxuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiczAgPSBcIiArIHMwKTtcbiAgICB9XG4gICAgdmFyIHQgPSBpbnB1dC5MQSgxKTtcbiAgICB3aGlsZSh0cnVlKSB7IC8vIHdoaWxlIG1vcmUgd29ya1xuICAgICAgICB2YXIgRCA9IHRoaXMuZ2V0RXhpc3RpbmdUYXJnZXRTdGF0ZShwcmV2aW91c0QsIHQpO1xuICAgICAgICBpZihEPT09bnVsbCkge1xuICAgICAgICAgICAgRCA9IHRoaXMuY29tcHV0ZVRhcmdldFN0YXRlKGRmYSwgcHJldmlvdXNELCB0KTtcbiAgICAgICAgfVxuICAgICAgICBpZihEPT09QVROU2ltdWxhdG9yLkVSUk9SKSB7XG4gICAgICAgICAgICAvLyBpZiBhbnkgY29uZmlncyBpbiBwcmV2aW91cyBkaXBwZWQgaW50byBvdXRlciBjb250ZXh0LCB0aGF0XG4gICAgICAgICAgICAvLyBtZWFucyB0aGF0IGlucHV0IHVwIHRvIHQgYWN0dWFsbHkgZmluaXNoZWQgZW50cnkgcnVsZVxuICAgICAgICAgICAgLy8gYXQgbGVhc3QgZm9yIFNMTCBkZWNpc2lvbi4gRnVsbCBMTCBkb2Vzbid0IGRpcCBpbnRvIG91dGVyXG4gICAgICAgICAgICAvLyBzbyBkb24ndCBuZWVkIHNwZWNpYWwgY2FzZS5cbiAgICAgICAgICAgIC8vIFdlIHdpbGwgZ2V0IGFuIGVycm9yIG5vIG1hdHRlciB3aGF0IHNvIGRlbGF5IHVudGlsIGFmdGVyXG4gICAgICAgICAgICAvLyBkZWNpc2lvbjsgYmV0dGVyIGVycm9yIG1lc3NhZ2UuIEFsc28sIG5vIHJlYWNoYWJsZSB0YXJnZXRcbiAgICAgICAgICAgIC8vIEFUTiBzdGF0ZXMgaW4gU0xMIGltcGxpZXMgTEwgd2lsbCBhbHNvIGdldCBub3doZXJlLlxuICAgICAgICAgICAgLy8gSWYgY29uZmxpY3QgaW4gc3RhdGVzIHRoYXQgZGlwIG91dCwgY2hvb3NlIG1pbiBzaW5jZSB3ZVxuICAgICAgICAgICAgLy8gd2lsbCBnZXQgZXJyb3Igbm8gbWF0dGVyIHdoYXQuXG4gICAgICAgICAgICB2YXIgZSA9IHRoaXMubm9WaWFibGVBbHQoaW5wdXQsIG91dGVyQ29udGV4dCwgcHJldmlvdXNELmNvbmZpZ3MsIHN0YXJ0SW5kZXgpO1xuICAgICAgICAgICAgaW5wdXQuc2VlayhzdGFydEluZGV4KTtcbiAgICAgICAgICAgIGFsdCA9IHRoaXMuZ2V0U3luVmFsaWRPclNlbUludmFsaWRBbHRUaGF0RmluaXNoZWREZWNpc2lvbkVudHJ5UnVsZShwcmV2aW91c0QuY29uZmlncywgb3V0ZXJDb250ZXh0KTtcbiAgICAgICAgICAgIGlmKGFsdCE9PUFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWx0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmKEQucmVxdWlyZXNGdWxsQ29udGV4dCAmJiB0aGlzLnByZWRpY3Rpb25Nb2RlICE9PSBQcmVkaWN0aW9uTW9kZS5TTEwpIHtcbiAgICAgICAgICAgIC8vIElGIFBSRURTLCBNSUdIVCBSRVNPTFZFIFRPIFNJTkdMRSBBTFQgPT4gU0xMIChvciBzeW50YXggZXJyb3IpXG4gICAgICAgICAgICB2YXIgY29uZmxpY3RpbmdBbHRzID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChELnByZWRpY2F0ZXMhPT1udWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJERkEgc3RhdGUgaGFzIHByZWRzIGluIERGQSBzaW0gTEwgZmFpbG92ZXJcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciBjb25mbGljdEluZGV4ID0gaW5wdXQuaW5kZXg7XG4gICAgICAgICAgICAgICAgaWYoY29uZmxpY3RJbmRleCAhPT0gc3RhcnRJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBpbnB1dC5zZWVrKHN0YXJ0SW5kZXgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25mbGljdGluZ0FsdHMgPSB0aGlzLmV2YWxTZW1hbnRpY0NvbnRleHQoRC5wcmVkaWNhdGVzLCBvdXRlckNvbnRleHQsIHRydWUpO1xuICAgICAgICAgICAgICAgIGlmIChjb25mbGljdGluZ0FsdHMubGVuZ3RoPT09MSkge1xuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIkZ1bGwgTEwgYXZvaWRlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uZmxpY3RpbmdBbHRzLm1pblZhbHVlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChjb25mbGljdEluZGV4ICE9PSBzdGFydEluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHJlc3RvcmUgdGhlIGluZGV4IHNvIHJlcG9ydGluZyB0aGUgZmFsbGJhY2sgdG8gZnVsbFxuICAgICAgICAgICAgICAgICAgICAvLyBjb250ZXh0IG9jY3VycyB3aXRoIHRoZSBpbmRleCBhdCB0aGUgY29ycmVjdCBzcG90XG4gICAgICAgICAgICAgICAgICAgIGlucHV0LnNlZWsoY29uZmxpY3RJbmRleCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuZGZhX2RlYnVnKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJjdHggc2Vuc2l0aXZlIHN0YXRlIFwiICsgb3V0ZXJDb250ZXh0ICtcIiBpbiBcIiArIEQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIGZ1bGxDdHggPSB0cnVlO1xuICAgICAgICAgICAgdmFyIHMwX2Nsb3N1cmUgPSB0aGlzLmNvbXB1dGVTdGFydFN0YXRlKGRmYS5hdG5TdGFydFN0YXRlLCBvdXRlckNvbnRleHQsIGZ1bGxDdHgpO1xuICAgICAgICAgICAgdGhpcy5yZXBvcnRBdHRlbXB0aW5nRnVsbENvbnRleHQoZGZhLCBjb25mbGljdGluZ0FsdHMsIEQuY29uZmlncywgc3RhcnRJbmRleCwgaW5wdXQuaW5kZXgpO1xuICAgICAgICAgICAgYWx0ID0gdGhpcy5leGVjQVROV2l0aEZ1bGxDb250ZXh0KGRmYSwgRCwgczBfY2xvc3VyZSwgaW5wdXQsIHN0YXJ0SW5kZXgsIG91dGVyQ29udGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gYWx0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChELmlzQWNjZXB0U3RhdGUpIHtcbiAgICAgICAgICAgIGlmIChELnByZWRpY2F0ZXM9PT1udWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEQucHJlZGljdGlvbjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBzdG9wSW5kZXggPSBpbnB1dC5pbmRleDtcbiAgICAgICAgICAgIGlucHV0LnNlZWsoc3RhcnRJbmRleCk7XG4gICAgICAgICAgICB2YXIgYWx0cyA9IHRoaXMuZXZhbFNlbWFudGljQ29udGV4dChELnByZWRpY2F0ZXMsIG91dGVyQ29udGV4dCwgdHJ1ZSk7XG4gICAgICAgICAgICBpZiAoYWx0cy5sZW5ndGg9PT0wKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgdGhpcy5ub1ZpYWJsZUFsdChpbnB1dCwgb3V0ZXJDb250ZXh0LCBELmNvbmZpZ3MsIHN0YXJ0SW5kZXgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhbHRzLmxlbmd0aD09PTEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWx0cy5taW5WYWx1ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyByZXBvcnQgYW1iaWd1aXR5IGFmdGVyIHByZWRpY2F0ZSBldmFsdWF0aW9uIHRvIG1ha2Ugc3VyZSB0aGUgY29ycmVjdCBzZXQgb2YgYW1iaWcgYWx0cyBpcyByZXBvcnRlZC5cbiAgICAgICAgICAgICAgICB0aGlzLnJlcG9ydEFtYmlndWl0eShkZmEsIEQsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgZmFsc2UsIGFsdHMsIEQuY29uZmlncyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFsdHMubWluVmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBwcmV2aW91c0QgPSBEO1xuXG4gICAgICAgIGlmICh0ICE9PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgICAgIGlucHV0LmNvbnN1bWUoKTtcbiAgICAgICAgICAgIHQgPSBpbnB1dC5MQSgxKTtcbiAgICAgICAgfVxuICAgIH1cbn07XG4vL1xuLy8gR2V0IGFuIGV4aXN0aW5nIHRhcmdldCBzdGF0ZSBmb3IgYW4gZWRnZSBpbiB0aGUgREZBLiBJZiB0aGUgdGFyZ2V0IHN0YXRlXG4vLyBmb3IgdGhlIGVkZ2UgaGFzIG5vdCB5ZXQgYmVlbiBjb21wdXRlZCBvciBpcyBvdGhlcndpc2Ugbm90IGF2YWlsYWJsZSxcbi8vIHRoaXMgbWV0aG9kIHJldHVybnMge0Bjb2RlIG51bGx9LlxuLy9cbi8vIEBwYXJhbSBwcmV2aW91c0QgVGhlIGN1cnJlbnQgREZBIHN0YXRlXG4vLyBAcGFyYW0gdCBUaGUgbmV4dCBpbnB1dCBzeW1ib2xcbi8vIEByZXR1cm4gVGhlIGV4aXN0aW5nIHRhcmdldCBERkEgc3RhdGUgZm9yIHRoZSBnaXZlbiBpbnB1dCBzeW1ib2xcbi8vIHtAY29kZSB0fSwgb3Ige0Bjb2RlIG51bGx9IGlmIHRoZSB0YXJnZXQgc3RhdGUgZm9yIHRoaXMgZWRnZSBpcyBub3Rcbi8vIGFscmVhZHkgY2FjaGVkXG4vL1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRFeGlzdGluZ1RhcmdldFN0YXRlID0gZnVuY3Rpb24ocHJldmlvdXNELCB0KSB7XG4gICAgdmFyIGVkZ2VzID0gcHJldmlvdXNELmVkZ2VzO1xuICAgIGlmIChlZGdlcz09PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGVkZ2VzW3QgKyAxXSB8fCBudWxsO1xuICAgIH1cbn07XG4vL1xuLy8gQ29tcHV0ZSBhIHRhcmdldCBzdGF0ZSBmb3IgYW4gZWRnZSBpbiB0aGUgREZBLCBhbmQgYXR0ZW1wdCB0byBhZGQgdGhlXG4vLyBjb21wdXRlZCBzdGF0ZSBhbmQgY29ycmVzcG9uZGluZyBlZGdlIHRvIHRoZSBERkEuXG4vL1xuLy8gQHBhcmFtIGRmYSBUaGUgREZBXG4vLyBAcGFyYW0gcHJldmlvdXNEIFRoZSBjdXJyZW50IERGQSBzdGF0ZVxuLy8gQHBhcmFtIHQgVGhlIG5leHQgaW5wdXQgc3ltYm9sXG4vL1xuLy8gQHJldHVybiBUaGUgY29tcHV0ZWQgdGFyZ2V0IERGQSBzdGF0ZSBmb3IgdGhlIGdpdmVuIGlucHV0IHN5bWJvbFxuLy8ge0Bjb2RlIHR9LiBJZiB7QGNvZGUgdH0gZG9lcyBub3QgbGVhZCB0byBhIHZhbGlkIERGQSBzdGF0ZSwgdGhpcyBtZXRob2Rcbi8vIHJldHVybnMge0BsaW5rIC8vRVJST1J9LlxuLy9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY29tcHV0ZVRhcmdldFN0YXRlID0gZnVuY3Rpb24oZGZhLCBwcmV2aW91c0QsIHQpIHtcbiAgIHZhciByZWFjaCA9IHRoaXMuY29tcHV0ZVJlYWNoU2V0KHByZXZpb3VzRC5jb25maWdzLCB0LCBmYWxzZSk7XG4gICAgaWYocmVhY2g9PT1udWxsKSB7XG4gICAgICAgIHRoaXMuYWRkREZBRWRnZShkZmEsIHByZXZpb3VzRCwgdCwgQVROU2ltdWxhdG9yLkVSUk9SKTtcbiAgICAgICAgcmV0dXJuIEFUTlNpbXVsYXRvci5FUlJPUjtcbiAgICB9XG4gICAgLy8gY3JlYXRlIG5ldyB0YXJnZXQgc3RhdGU7IHdlJ2xsIGFkZCB0byBERkEgYWZ0ZXIgaXQncyBjb21wbGV0ZVxuICAgIHZhciBEID0gbmV3IERGQVN0YXRlKG51bGwsIHJlYWNoKTtcblxuICAgIHZhciBwcmVkaWN0ZWRBbHQgPSB0aGlzLmdldFVuaXF1ZUFsdChyZWFjaCk7XG5cbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICB2YXIgYWx0U3ViU2V0cyA9IFByZWRpY3Rpb25Nb2RlLmdldENvbmZsaWN0aW5nQWx0U3Vic2V0cyhyZWFjaCk7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiU0xMIGFsdFN1YlNldHM9XCIgKyBVdGlscy5hcnJheVRvU3RyaW5nKGFsdFN1YlNldHMpICtcbiAgICAgICAgICAgICAgICAgICAgXCIsIHByZXZpb3VzPVwiICsgcHJldmlvdXNELmNvbmZpZ3MgK1xuICAgICAgICAgICAgICAgICAgICBcIiwgY29uZmlncz1cIiArIHJlYWNoICtcbiAgICAgICAgICAgICAgICAgICAgXCIsIHByZWRpY3Q9XCIgKyBwcmVkaWN0ZWRBbHQgK1xuICAgICAgICAgICAgICAgICAgICBcIiwgYWxsU3Vic2V0c0NvbmZsaWN0PVwiICtcbiAgICAgICAgICAgICAgICAgICAgUHJlZGljdGlvbk1vZGUuYWxsU3Vic2V0c0NvbmZsaWN0KGFsdFN1YlNldHMpICsgXCIsIGNvbmZsaWN0aW5nQWx0cz1cIiArXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q29uZmxpY3RpbmdBbHRzKHJlYWNoKSk7XG4gICAgfVxuICAgIGlmIChwcmVkaWN0ZWRBbHQhPT1BVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgIC8vIE5PIENPTkZMSUNULCBVTklRVUVMWSBQUkVESUNURUQgQUxUXG4gICAgICAgIEQuaXNBY2NlcHRTdGF0ZSA9IHRydWU7XG4gICAgICAgIEQuY29uZmlncy51bmlxdWVBbHQgPSBwcmVkaWN0ZWRBbHQ7XG4gICAgICAgIEQucHJlZGljdGlvbiA9IHByZWRpY3RlZEFsdDtcbiAgICB9IGVsc2UgaWYgKFByZWRpY3Rpb25Nb2RlLmhhc1NMTENvbmZsaWN0VGVybWluYXRpbmdQcmVkaWN0aW9uKHRoaXMucHJlZGljdGlvbk1vZGUsIHJlYWNoKSkge1xuICAgICAgICAvLyBNT1JFIFRIQU4gT05FIFZJQUJMRSBBTFRFUk5BVElWRVxuICAgICAgICBELmNvbmZpZ3MuY29uZmxpY3RpbmdBbHRzID0gdGhpcy5nZXRDb25mbGljdGluZ0FsdHMocmVhY2gpO1xuICAgICAgICBELnJlcXVpcmVzRnVsbENvbnRleHQgPSB0cnVlO1xuICAgICAgICAvLyBpbiBTTEwtb25seSBtb2RlLCB3ZSB3aWxsIHN0b3AgYXQgdGhpcyBzdGF0ZSBhbmQgcmV0dXJuIHRoZSBtaW5pbXVtIGFsdFxuICAgICAgICBELmlzQWNjZXB0U3RhdGUgPSB0cnVlO1xuICAgICAgICBELnByZWRpY3Rpb24gPSBELmNvbmZpZ3MuY29uZmxpY3RpbmdBbHRzLm1pblZhbHVlKCk7XG4gICAgfVxuICAgIGlmIChELmlzQWNjZXB0U3RhdGUgJiYgRC5jb25maWdzLmhhc1NlbWFudGljQ29udGV4dCkge1xuICAgICAgICB0aGlzLnByZWRpY2F0ZURGQVN0YXRlKEQsIHRoaXMuYXRuLmdldERlY2lzaW9uU3RhdGUoZGZhLmRlY2lzaW9uKSk7XG4gICAgICAgIGlmKCBELnByZWRpY2F0ZXMhPT1udWxsKSB7XG4gICAgICAgICAgICBELnByZWRpY3Rpb24gPSBBVE4uSU5WQUxJRF9BTFRfTlVNQkVSO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGFsbCBhZGRzIHRvIGRmYSBhcmUgZG9uZSBhZnRlciB3ZSd2ZSBjcmVhdGVkIGZ1bGwgRCBzdGF0ZVxuICAgIEQgPSB0aGlzLmFkZERGQUVkZ2UoZGZhLCBwcmV2aW91c0QsIHQsIEQpO1xuICAgIHJldHVybiBEO1xufTtcblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5wcmVkaWNhdGVERkFTdGF0ZSA9IGZ1bmN0aW9uKGRmYVN0YXRlLCBkZWNpc2lvblN0YXRlKSB7XG4gICAgLy8gV2UgbmVlZCB0byB0ZXN0IGFsbCBwcmVkaWNhdGVzLCBldmVuIGluIERGQSBzdGF0ZXMgdGhhdFxuICAgIC8vIHVuaXF1ZWx5IHByZWRpY3QgYWx0ZXJuYXRpdmUuXG4gICAgdmFyIG5hbHRzID0gZGVjaXNpb25TdGF0ZS50cmFuc2l0aW9ucy5sZW5ndGg7XG4gICAgLy8gVXBkYXRlIERGQSBzbyByZWFjaCBiZWNvbWVzIGFjY2VwdCBzdGF0ZSB3aXRoIChwcmVkaWNhdGUsYWx0KVxuICAgIC8vIHBhaXJzIGlmIHByZWRzIGZvdW5kIGZvciBjb25mbGljdGluZyBhbHRzXG4gICAgdmFyIGFsdHNUb0NvbGxlY3RQcmVkc0Zyb20gPSB0aGlzLmdldENvbmZsaWN0aW5nQWx0c09yVW5pcXVlQWx0KGRmYVN0YXRlLmNvbmZpZ3MpO1xuICAgIHZhciBhbHRUb1ByZWQgPSB0aGlzLmdldFByZWRzRm9yQW1iaWdBbHRzKGFsdHNUb0NvbGxlY3RQcmVkc0Zyb20sIGRmYVN0YXRlLmNvbmZpZ3MsIG5hbHRzKTtcbiAgICBpZiAoYWx0VG9QcmVkIT09bnVsbCkge1xuICAgICAgICBkZmFTdGF0ZS5wcmVkaWNhdGVzID0gdGhpcy5nZXRQcmVkaWNhdGVQcmVkaWN0aW9ucyhhbHRzVG9Db2xsZWN0UHJlZHNGcm9tLCBhbHRUb1ByZWQpO1xuICAgICAgICBkZmFTdGF0ZS5wcmVkaWN0aW9uID0gQVROLklOVkFMSURfQUxUX05VTUJFUjsgLy8gbWFrZSBzdXJlIHdlIHVzZSBwcmVkc1xuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFRoZXJlIGFyZSBwcmVkcyBpbiBjb25maWdzIGJ1dCB0aGV5IG1pZ2h0IGdvIGF3YXlcbiAgICAgICAgLy8gd2hlbiBPUidkIHRvZ2V0aGVyIGxpa2Uge3B9PyB8fCBOT05FID09IE5PTkUuIElmIG5laXRoZXJcbiAgICAgICAgLy8gYWx0IGhhcyBwcmVkcywgcmVzb2x2ZSB0byBtaW4gYWx0XG4gICAgICAgIGRmYVN0YXRlLnByZWRpY3Rpb24gPSBhbHRzVG9Db2xsZWN0UHJlZHNGcm9tLm1pblZhbHVlKCk7XG4gICAgfVxufTtcblxuLy8gY29tZXMgYmFjayB3aXRoIHJlYWNoLnVuaXF1ZUFsdCBzZXQgdG8gYSB2YWxpZCBhbHRcblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZXhlY0FUTldpdGhGdWxsQ29udGV4dCA9IGZ1bmN0aW9uKGRmYSwgRCwgLy8gaG93IGZhciB3ZSBnb3QgYmVmb3JlIGZhaWxpbmcgb3ZlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0ZXJDb250ZXh0KSB7XG4gICAgaWYgKHRoaXMuZGVidWcgfHwgdGhpcy5kZWJ1Z19saXN0X2F0bl9kZWNpc2lvbnMpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJleGVjQVROV2l0aEZ1bGxDb250ZXh0IFwiK3MwKTtcbiAgICB9XG4gICAgdmFyIGZ1bGxDdHggPSB0cnVlO1xuICAgIHZhciBmb3VuZEV4YWN0QW1iaWcgPSBmYWxzZTtcbiAgICB2YXIgcmVhY2ggPSBudWxsO1xuICAgIHZhciBwcmV2aW91cyA9IHMwO1xuICAgIGlucHV0LnNlZWsoc3RhcnRJbmRleCk7XG4gICAgdmFyIHQgPSBpbnB1dC5MQSgxKTtcbiAgICB2YXIgcHJlZGljdGVkQWx0ID0gLTE7XG4gICAgd2hpbGUgKHRydWUpIHsgLy8gd2hpbGUgbW9yZSB3b3JrXG4gICAgICAgIHJlYWNoID0gdGhpcy5jb21wdXRlUmVhY2hTZXQocHJldmlvdXMsIHQsIGZ1bGxDdHgpO1xuICAgICAgICBpZiAocmVhY2g9PT1udWxsKSB7XG4gICAgICAgICAgICAvLyBpZiBhbnkgY29uZmlncyBpbiBwcmV2aW91cyBkaXBwZWQgaW50byBvdXRlciBjb250ZXh0LCB0aGF0XG4gICAgICAgICAgICAvLyBtZWFucyB0aGF0IGlucHV0IHVwIHRvIHQgYWN0dWFsbHkgZmluaXNoZWQgZW50cnkgcnVsZVxuICAgICAgICAgICAgLy8gYXQgbGVhc3QgZm9yIExMIGRlY2lzaW9uLiBGdWxsIExMIGRvZXNuJ3QgZGlwIGludG8gb3V0ZXJcbiAgICAgICAgICAgIC8vIHNvIGRvbid0IG5lZWQgc3BlY2lhbCBjYXNlLlxuICAgICAgICAgICAgLy8gV2Ugd2lsbCBnZXQgYW4gZXJyb3Igbm8gbWF0dGVyIHdoYXQgc28gZGVsYXkgdW50aWwgYWZ0ZXJcbiAgICAgICAgICAgIC8vIGRlY2lzaW9uOyBiZXR0ZXIgZXJyb3IgbWVzc2FnZS4gQWxzbywgbm8gcmVhY2hhYmxlIHRhcmdldFxuICAgICAgICAgICAgLy8gQVROIHN0YXRlcyBpbiBTTEwgaW1wbGllcyBMTCB3aWxsIGFsc28gZ2V0IG5vd2hlcmUuXG4gICAgICAgICAgICAvLyBJZiBjb25mbGljdCBpbiBzdGF0ZXMgdGhhdCBkaXAgb3V0LCBjaG9vc2UgbWluIHNpbmNlIHdlXG4gICAgICAgICAgICAvLyB3aWxsIGdldCBlcnJvciBubyBtYXR0ZXIgd2hhdC5cbiAgICAgICAgICAgIHZhciBlID0gdGhpcy5ub1ZpYWJsZUFsdChpbnB1dCwgb3V0ZXJDb250ZXh0LCBwcmV2aW91cywgc3RhcnRJbmRleCk7XG4gICAgICAgICAgICBpbnB1dC5zZWVrKHN0YXJ0SW5kZXgpO1xuICAgICAgICAgICAgdmFyIGFsdCA9IHRoaXMuZ2V0U3luVmFsaWRPclNlbUludmFsaWRBbHRUaGF0RmluaXNoZWREZWNpc2lvbkVudHJ5UnVsZShwcmV2aW91cywgb3V0ZXJDb250ZXh0KTtcbiAgICAgICAgICAgIGlmKGFsdCE9PUFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWx0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHZhciBhbHRTdWJTZXRzID0gUHJlZGljdGlvbk1vZGUuZ2V0Q29uZmxpY3RpbmdBbHRTdWJzZXRzKHJlYWNoKTtcbiAgICAgICAgaWYodGhpcy5kZWJ1Zykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJMTCBhbHRTdWJTZXRzPVwiICsgYWx0U3ViU2V0cyArIFwiLCBwcmVkaWN0PVwiICtcbiAgICAgICAgICAgICAgICAgIFByZWRpY3Rpb25Nb2RlLmdldFVuaXF1ZUFsdChhbHRTdWJTZXRzKSArIFwiLCByZXNvbHZlc1RvSnVzdE9uZVZpYWJsZUFsdD1cIiArXG4gICAgICAgICAgICAgICAgICBQcmVkaWN0aW9uTW9kZS5yZXNvbHZlc1RvSnVzdE9uZVZpYWJsZUFsdChhbHRTdWJTZXRzKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVhY2gudW5pcXVlQWx0ID0gdGhpcy5nZXRVbmlxdWVBbHQocmVhY2gpO1xuICAgICAgICAvLyB1bmlxdWUgcHJlZGljdGlvbj9cbiAgICAgICAgaWYocmVhY2gudW5pcXVlQWx0IT09QVROLklOVkFMSURfQUxUX05VTUJFUikge1xuICAgICAgICAgICAgcHJlZGljdGVkQWx0ID0gcmVhY2gudW5pcXVlQWx0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcmVkaWN0aW9uTW9kZSAhPT0gUHJlZGljdGlvbk1vZGUuTExfRVhBQ1RfQU1CSUdfREVURUNUSU9OKSB7XG4gICAgICAgICAgICBwcmVkaWN0ZWRBbHQgPSBQcmVkaWN0aW9uTW9kZS5yZXNvbHZlc1RvSnVzdE9uZVZpYWJsZUFsdChhbHRTdWJTZXRzKTtcbiAgICAgICAgICAgIGlmKHByZWRpY3RlZEFsdCAhPT0gQVROLklOVkFMSURfQUxUX05VTUJFUikge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSW4gZXhhY3QgYW1iaWd1aXR5IG1vZGUsIHdlIG5ldmVyIHRyeSB0byB0ZXJtaW5hdGUgZWFybHkuXG4gICAgICAgICAgICAvLyBKdXN0IGtlZXBzIHNjYXJmaW5nIHVudGlsIHdlIGtub3cgd2hhdCB0aGUgY29uZmxpY3QgaXNcbiAgICAgICAgICAgIGlmIChQcmVkaWN0aW9uTW9kZS5hbGxTdWJzZXRzQ29uZmxpY3QoYWx0U3ViU2V0cykgJiYgUHJlZGljdGlvbk1vZGUuYWxsU3Vic2V0c0VxdWFsKGFsdFN1YlNldHMpKSB7XG4gICAgICAgICAgICAgICAgZm91bmRFeGFjdEFtYmlnID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBwcmVkaWN0ZWRBbHQgPSBQcmVkaWN0aW9uTW9kZS5nZXRTaW5nbGVWaWFibGVBbHQoYWx0U3ViU2V0cyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBlbHNlIHRoZXJlIGFyZSBtdWx0aXBsZSBub24tY29uZmxpY3Rpbmcgc3Vic2V0cyBvclxuICAgICAgICAgICAgLy8gd2UncmUgbm90IHN1cmUgd2hhdCB0aGUgYW1iaWd1aXR5IGlzIHlldC5cbiAgICAgICAgICAgIC8vIFNvLCBrZWVwIGdvaW5nLlxuICAgICAgICB9XG4gICAgICAgIHByZXZpb3VzID0gcmVhY2g7XG4gICAgICAgIGlmKCB0ICE9PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgICAgIGlucHV0LmNvbnN1bWUoKTtcbiAgICAgICAgICAgIHQgPSBpbnB1dC5MQSgxKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiB0aGUgY29uZmlndXJhdGlvbiBzZXQgdW5pcXVlbHkgcHJlZGljdHMgYW4gYWx0ZXJuYXRpdmUsXG4gICAgLy8gd2l0aG91dCBjb25mbGljdCwgdGhlbiB3ZSBrbm93IHRoYXQgaXQncyBhIGZ1bGwgTEwgZGVjaXNpb25cbiAgICAvLyBub3QgU0xMLlxuICAgIGlmIChyZWFjaC51bmlxdWVBbHQgIT09IEFUTi5JTlZBTElEX0FMVF9OVU1CRVIgKSB7XG4gICAgICAgIHRoaXMucmVwb3J0Q29udGV4dFNlbnNpdGl2aXR5KGRmYSwgcHJlZGljdGVkQWx0LCByZWFjaCwgc3RhcnRJbmRleCwgaW5wdXQuaW5kZXgpO1xuICAgICAgICByZXR1cm4gcHJlZGljdGVkQWx0O1xuICAgIH1cbiAgICAvLyBXZSBkbyBub3QgY2hlY2sgcHJlZGljYXRlcyBoZXJlIGJlY2F1c2Ugd2UgaGF2ZSBjaGVja2VkIHRoZW1cbiAgICAvLyBvbi10aGUtZmx5IHdoZW4gZG9pbmcgZnVsbCBjb250ZXh0IHByZWRpY3Rpb24uXG5cbiAgICAvL1xuICAgIC8vIEluIG5vbi1leGFjdCBhbWJpZ3VpdHkgZGV0ZWN0aW9uIG1vZGUsIHdlIG1pZ2h0XHRhY3R1YWxseSBiZSBhYmxlIHRvXG4gICAgLy8gZGV0ZWN0IGFuIGV4YWN0IGFtYmlndWl0eSwgYnV0IEknbSBub3QgZ29pbmcgdG8gc3BlbmQgdGhlIGN5Y2xlc1xuICAgIC8vIG5lZWRlZCB0byBjaGVjay4gV2Ugb25seSBlbWl0IGFtYmlndWl0eSB3YXJuaW5ncyBpbiBleGFjdCBhbWJpZ3VpdHlcbiAgICAvLyBtb2RlLlxuICAgIC8vXG4gICAgLy8gRm9yIGV4YW1wbGUsIHdlIG1pZ2h0IGtub3cgdGhhdCB3ZSBoYXZlIGNvbmZsaWN0aW5nIGNvbmZpZ3VyYXRpb25zLlxuICAgIC8vIEJ1dCwgdGhhdCBkb2VzIG5vdCBtZWFuIHRoYXQgdGhlcmUgaXMgbm8gd2F5IGZvcndhcmQgd2l0aG91dCBhXG4gICAgLy8gY29uZmxpY3QuIEl0J3MgcG9zc2libGUgdG8gaGF2ZSBub25jb25mbGljdGluZyBhbHQgc3Vic2V0cyBhcyBpbjpcblxuICAgIC8vIGFsdFN1YlNldHM9W3sxLCAyfSwgezEsIDJ9LCB7MX0sIHsxLCAyfV1cblxuICAgIC8vIGZyb21cbiAgICAvL1xuICAgIC8vICAgIFsoMTcsMSxbNSAkXSksICgxMywxLFs1IDEwICRdKSwgKDIxLDEsWzUgMTAgJF0pLCAoMTEsMSxbJF0pLFxuICAgIC8vICAgICAoMTMsMixbNSAxMCAkXSksICgyMSwyLFs1IDEwICRdKSwgKDExLDIsWyRdKV1cbiAgICAvL1xuICAgIC8vIEluIHRoaXMgY2FzZSwgKDE3LDEsWzUgJF0pIGluZGljYXRlcyB0aGVyZSBpcyBzb21lIG5leHQgc2VxdWVuY2UgdGhhdFxuICAgIC8vIHdvdWxkIHJlc29sdmUgdGhpcyB3aXRob3V0IGNvbmZsaWN0IHRvIGFsdGVybmF0aXZlIDEuIEFueSBvdGhlciB2aWFibGVcbiAgICAvLyBuZXh0IHNlcXVlbmNlLCBob3dldmVyLCBpcyBhc3NvY2lhdGVkIHdpdGggYSBjb25mbGljdC4gIFdlIHN0b3BcbiAgICAvLyBsb29raW5nIGZvciBpbnB1dCBiZWNhdXNlIG5vIGFtb3VudCBvZiBmdXJ0aGVyIGxvb2thaGVhZCB3aWxsIGFsdGVyXG4gICAgLy8gdGhlIGZhY3QgdGhhdCB3ZSBzaG91bGQgcHJlZGljdCBhbHRlcm5hdGl2ZSAxLiAgV2UganVzdCBjYW4ndCBzYXkgZm9yXG4gICAgLy8gc3VyZSB0aGF0IHRoZXJlIGlzIGFuIGFtYmlndWl0eSB3aXRob3V0IGxvb2tpbmcgZnVydGhlci5cblxuICAgIHRoaXMucmVwb3J0QW1iaWd1aXR5KGRmYSwgRCwgc3RhcnRJbmRleCwgaW5wdXQuaW5kZXgsIGZvdW5kRXhhY3RBbWJpZywgbnVsbCwgcmVhY2gpO1xuXG4gICAgcmV0dXJuIHByZWRpY3RlZEFsdDtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY29tcHV0ZVJlYWNoU2V0ID0gZnVuY3Rpb24oY2xvc3VyZSwgdCwgZnVsbEN0eCkge1xuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiaW4gY29tcHV0ZVJlYWNoU2V0LCBzdGFydGluZyBjbG9zdXJlOiBcIiArIGNsb3N1cmUpO1xuICAgIH1cbiAgICBpZiggdGhpcy5tZXJnZUNhY2hlPT09bnVsbCkge1xuICAgICAgICB0aGlzLm1lcmdlQ2FjaGUgPSBuZXcgRG91YmxlRGljdCgpO1xuICAgIH1cbiAgICB2YXIgaW50ZXJtZWRpYXRlID0gbmV3IEFUTkNvbmZpZ1NldChmdWxsQ3R4KTtcblxuICAgIC8vIENvbmZpZ3VyYXRpb25zIGFscmVhZHkgaW4gYSBydWxlIHN0b3Agc3RhdGUgaW5kaWNhdGUgcmVhY2hpbmcgdGhlIGVuZFxuICAgIC8vIG9mIHRoZSBkZWNpc2lvbiBydWxlIChsb2NhbCBjb250ZXh0KSBvciBlbmQgb2YgdGhlIHN0YXJ0IHJ1bGUgKGZ1bGxcbiAgICAvLyBjb250ZXh0KS4gT25jZSByZWFjaGVkLCB0aGVzZSBjb25maWd1cmF0aW9ucyBhcmUgbmV2ZXIgdXBkYXRlZCBieSBhXG4gICAgLy8gY2xvc3VyZSBvcGVyYXRpb24sIHNvIHRoZXkgYXJlIGhhbmRsZWQgc2VwYXJhdGVseSBmb3IgdGhlIHBlcmZvcm1hbmNlXG4gICAgLy8gYWR2YW50YWdlIG9mIGhhdmluZyBhIHNtYWxsZXIgaW50ZXJtZWRpYXRlIHNldCB3aGVuIGNhbGxpbmcgY2xvc3VyZS5cbiAgICAvL1xuICAgIC8vIEZvciBmdWxsLWNvbnRleHQgcmVhY2ggb3BlcmF0aW9ucywgc2VwYXJhdGUgaGFuZGxpbmcgaXMgcmVxdWlyZWQgdG9cbiAgICAvLyBlbnN1cmUgdGhhdCB0aGUgYWx0ZXJuYXRpdmUgbWF0Y2hpbmcgdGhlIGxvbmdlc3Qgb3ZlcmFsbCBzZXF1ZW5jZSBpc1xuICAgIC8vIGNob3NlbiB3aGVuIG11bHRpcGxlIHN1Y2ggY29uZmlndXJhdGlvbnMgY2FuIG1hdGNoIHRoZSBpbnB1dC5cblxuICAgIHZhciBza2lwcGVkU3RvcFN0YXRlcyA9IG51bGw7XG5cbiAgICAvLyBGaXJzdCBmaWd1cmUgb3V0IHdoZXJlIHdlIGNhbiByZWFjaCBvbiBpbnB1dCB0XG4gICAgZm9yICh2YXIgaT0wOyBpPGNsb3N1cmUuaXRlbXMubGVuZ3RoO2krKykge1xuICAgICAgICB2YXIgYyA9IGNsb3N1cmUuaXRlbXNbaV07XG4gICAgICAgIGlmKHRoaXMuZGVidWdfYWRkKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInRlc3RpbmcgXCIgKyB0aGlzLmdldFRva2VuTmFtZSh0KSArIFwiIGF0IFwiICsgYyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMuc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSB7XG4gICAgICAgICAgICBpZiAoZnVsbEN0eCB8fCB0ID09PSBUb2tlbi5FT0YpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2tpcHBlZFN0b3BTdGF0ZXM9PT1udWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHNraXBwZWRTdG9wU3RhdGVzID0gW107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNraXBwZWRTdG9wU3RhdGVzLnB1c2goYyk7XG4gICAgICAgICAgICAgICAgaWYodGhpcy5kZWJ1Z19hZGQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJhZGRlZCBcIiArIGMgKyBcIiB0byBza2lwcGVkU3RvcFN0YXRlc1wiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IodmFyIGo9MDtqPGMuc3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoO2orKykge1xuICAgICAgICAgICAgdmFyIHRyYW5zID0gYy5zdGF0ZS50cmFuc2l0aW9uc1tqXTtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSB0aGlzLmdldFJlYWNoYWJsZVRhcmdldCh0cmFucywgdCk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0IT09bnVsbCkge1xuICAgICAgICAgICAgICAgIHZhciBjZmcgPSBuZXcgQVROQ29uZmlnKHtzdGF0ZTp0YXJnZXR9LCBjKTtcbiAgICAgICAgICAgICAgICBpbnRlcm1lZGlhdGUuYWRkKGNmZywgdGhpcy5tZXJnZUNhY2hlKTtcbiAgICAgICAgICAgICAgICBpZih0aGlzLmRlYnVnX2FkZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImFkZGVkIFwiICsgY2ZnICsgXCIgdG8gaW50ZXJtZWRpYXRlXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBOb3cgZmlndXJlIG91dCB3aGVyZSB0aGUgcmVhY2ggb3BlcmF0aW9uIGNhbiB0YWtlIHVzLi4uXG4gICAgdmFyIHJlYWNoID0gbnVsbDtcblxuICAgIC8vIFRoaXMgYmxvY2sgb3B0aW1pemVzIHRoZSByZWFjaCBvcGVyYXRpb24gZm9yIGludGVybWVkaWF0ZSBzZXRzIHdoaWNoXG4gICAgLy8gdHJpdmlhbGx5IGluZGljYXRlIGEgdGVybWluYXRpb24gc3RhdGUgZm9yIHRoZSBvdmVyYWxsXG4gICAgLy8gYWRhcHRpdmVQcmVkaWN0IG9wZXJhdGlvbi5cbiAgICAvL1xuICAgIC8vIFRoZSBjb25kaXRpb25zIGFzc3VtZSB0aGF0IGludGVybWVkaWF0ZVxuICAgIC8vIGNvbnRhaW5zIGFsbCBjb25maWd1cmF0aW9ucyByZWxldmFudCB0byB0aGUgcmVhY2ggc2V0LCBidXQgdGhpc1xuICAgIC8vIGNvbmRpdGlvbiBpcyBub3QgdHJ1ZSB3aGVuIG9uZSBvciBtb3JlIGNvbmZpZ3VyYXRpb25zIGhhdmUgYmVlblxuICAgIC8vIHdpdGhoZWxkIGluIHNraXBwZWRTdG9wU3RhdGVzLCBvciB3aGVuIHRoZSBjdXJyZW50IHN5bWJvbCBpcyBFT0YuXG4gICAgLy9cbiAgICBpZiAoc2tpcHBlZFN0b3BTdGF0ZXM9PT1udWxsICYmIHQhPT1Ub2tlbi5FT0YpIHtcbiAgICAgICAgaWYgKGludGVybWVkaWF0ZS5pdGVtcy5sZW5ndGg9PT0xKSB7XG4gICAgICAgICAgICAvLyBEb24ndCBwdXJzdWUgdGhlIGNsb3N1cmUgaWYgdGhlcmUgaXMganVzdCBvbmUgc3RhdGUuXG4gICAgICAgICAgICAvLyBJdCBjYW4gb25seSBoYXZlIG9uZSBhbHRlcm5hdGl2ZTsganVzdCBhZGQgdG8gcmVzdWx0XG4gICAgICAgICAgICAvLyBBbHNvIGRvbid0IHB1cnN1ZSB0aGUgY2xvc3VyZSBpZiB0aGVyZSBpcyB1bmlxdWUgYWx0ZXJuYXRpdmVcbiAgICAgICAgICAgIC8vIGFtb25nIHRoZSBjb25maWd1cmF0aW9ucy5cbiAgICAgICAgICAgIHJlYWNoID0gaW50ZXJtZWRpYXRlO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuZ2V0VW5pcXVlQWx0KGludGVybWVkaWF0ZSkhPT1BVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgICAgICAvLyBBbHNvIGRvbid0IHB1cnN1ZSB0aGUgY2xvc3VyZSBpZiB0aGVyZSBpcyB1bmlxdWUgYWx0ZXJuYXRpdmVcbiAgICAgICAgICAgIC8vIGFtb25nIHRoZSBjb25maWd1cmF0aW9ucy5cbiAgICAgICAgICAgIHJlYWNoID0gaW50ZXJtZWRpYXRlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIElmIHRoZSByZWFjaCBzZXQgY291bGQgbm90IGJlIHRyaXZpYWxseSBkZXRlcm1pbmVkLCBwZXJmb3JtIGEgY2xvc3VyZVxuICAgIC8vIG9wZXJhdGlvbiBvbiB0aGUgaW50ZXJtZWRpYXRlIHNldCB0byBjb21wdXRlIGl0cyBpbml0aWFsIHZhbHVlLlxuICAgIC8vXG4gICAgaWYgKHJlYWNoPT09bnVsbCkge1xuICAgICAgICByZWFjaCA9IG5ldyBBVE5Db25maWdTZXQoZnVsbEN0eCk7XG4gICAgICAgIHZhciBjbG9zdXJlQnVzeSA9IG5ldyBTZXQoKTtcbiAgICAgICAgdmFyIHRyZWF0RW9mQXNFcHNpbG9uID0gdCA9PT0gVG9rZW4uRU9GO1xuICAgICAgICBmb3IgKHZhciBrPTA7IGs8aW50ZXJtZWRpYXRlLml0ZW1zLmxlbmd0aDtrKyspIHtcbiAgICAgICAgICAgIHRoaXMuY2xvc3VyZShpbnRlcm1lZGlhdGUuaXRlbXNba10sIHJlYWNoLCBjbG9zdXJlQnVzeSwgZmFsc2UsIGZ1bGxDdHgsIHRyZWF0RW9mQXNFcHNpbG9uKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodCA9PT0gVG9rZW4uRU9GKSB7XG4gICAgICAgIC8vIEFmdGVyIGNvbnN1bWluZyBFT0Ygbm8gYWRkaXRpb25hbCBpbnB1dCBpcyBwb3NzaWJsZSwgc28gd2UgYXJlXG4gICAgICAgIC8vIG9ubHkgaW50ZXJlc3RlZCBpbiBjb25maWd1cmF0aW9ucyB3aGljaCByZWFjaGVkIHRoZSBlbmQgb2YgdGhlXG4gICAgICAgIC8vIGRlY2lzaW9uIHJ1bGUgKGxvY2FsIGNvbnRleHQpIG9yIGVuZCBvZiB0aGUgc3RhcnQgcnVsZSAoZnVsbFxuICAgICAgICAvLyBjb250ZXh0KS4gVXBkYXRlIHJlYWNoIHRvIGNvbnRhaW4gb25seSB0aGVzZSBjb25maWd1cmF0aW9ucy4gVGhpc1xuICAgICAgICAvLyBoYW5kbGVzIGJvdGggZXhwbGljaXQgRU9GIHRyYW5zaXRpb25zIGluIHRoZSBncmFtbWFyIGFuZCBpbXBsaWNpdFxuICAgICAgICAvLyBFT0YgdHJhbnNpdGlvbnMgZm9sbG93aW5nIHRoZSBlbmQgb2YgdGhlIGRlY2lzaW9uIG9yIHN0YXJ0IHJ1bGUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFdoZW4gcmVhY2g9PWludGVybWVkaWF0ZSwgbm8gY2xvc3VyZSBvcGVyYXRpb24gd2FzIHBlcmZvcm1lZC4gSW5cbiAgICAgICAgLy8gdGhpcyBjYXNlLCByZW1vdmVBbGxDb25maWdzTm90SW5SdWxlU3RvcFN0YXRlIG5lZWRzIHRvIGNoZWNrIGZvclxuICAgICAgICAvLyByZWFjaGFibGUgcnVsZSBzdG9wIHN0YXRlcyBhcyB3ZWxsIGFzIGNvbmZpZ3VyYXRpb25zIGFscmVhZHkgaW5cbiAgICAgICAgLy8gYSBydWxlIHN0b3Agc3RhdGUuXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFRoaXMgaXMgaGFuZGxlZCBiZWZvcmUgdGhlIGNvbmZpZ3VyYXRpb25zIGluIHNraXBwZWRTdG9wU3RhdGVzLFxuICAgICAgICAvLyBiZWNhdXNlIGFueSBjb25maWd1cmF0aW9ucyBwb3RlbnRpYWxseSBhZGRlZCBmcm9tIHRoYXQgbGlzdCBhcmVcbiAgICAgICAgLy8gYWxyZWFkeSBndWFyYW50ZWVkIHRvIG1lZXQgdGhpcyBjb25kaXRpb24gd2hldGhlciBvciBub3QgaXQnc1xuICAgICAgICAvLyByZXF1aXJlZC5cbiAgICAgICAgLy9cbiAgICAgICAgcmVhY2ggPSB0aGlzLnJlbW92ZUFsbENvbmZpZ3NOb3RJblJ1bGVTdG9wU3RhdGUocmVhY2gsIHJlYWNoID09PSBpbnRlcm1lZGlhdGUpO1xuICAgIH1cbiAgICAvLyBJZiBza2lwcGVkU3RvcFN0YXRlcyE9PW51bGwsIHRoZW4gaXQgY29udGFpbnMgYXQgbGVhc3Qgb25lXG4gICAgLy8gY29uZmlndXJhdGlvbi4gRm9yIGZ1bGwtY29udGV4dCByZWFjaCBvcGVyYXRpb25zLCB0aGVzZVxuICAgIC8vIGNvbmZpZ3VyYXRpb25zIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgc3RhcnQgcnVsZSwgaW4gd2hpY2ggY2FzZSB3ZVxuICAgIC8vIG9ubHkgYWRkIHRoZW0gYmFjayB0byByZWFjaCBpZiBubyBjb25maWd1cmF0aW9uIGR1cmluZyB0aGUgY3VycmVudFxuICAgIC8vIGNsb3N1cmUgb3BlcmF0aW9uIHJlYWNoZWQgc3VjaCBhIHN0YXRlLiBUaGlzIGVuc3VyZXMgYWRhcHRpdmVQcmVkaWN0XG4gICAgLy8gY2hvb3NlcyBhbiBhbHRlcm5hdGl2ZSBtYXRjaGluZyB0aGUgbG9uZ2VzdCBvdmVyYWxsIHNlcXVlbmNlIHdoZW5cbiAgICAvLyBtdWx0aXBsZSBhbHRlcm5hdGl2ZXMgYXJlIHZpYWJsZS5cbiAgICAvL1xuICAgIGlmIChza2lwcGVkU3RvcFN0YXRlcyE9PW51bGwgJiYgKCAoISBmdWxsQ3R4KSB8fCAoISBQcmVkaWN0aW9uTW9kZS5oYXNDb25maWdJblJ1bGVTdG9wU3RhdGUocmVhY2gpKSkpIHtcbiAgICAgICAgZm9yICh2YXIgbD0wOyBsPHNraXBwZWRTdG9wU3RhdGVzLmxlbmd0aDtsKyspIHtcbiAgICAgICAgICAgIHJlYWNoLmFkZChza2lwcGVkU3RvcFN0YXRlc1tsXSwgdGhpcy5tZXJnZUNhY2hlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVhY2guaXRlbXMubGVuZ3RoPT09MCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVhY2g7XG4gICAgfVxufTtcbi8vXG4vLyBSZXR1cm4gYSBjb25maWd1cmF0aW9uIHNldCBjb250YWluaW5nIG9ubHkgdGhlIGNvbmZpZ3VyYXRpb25zIGZyb21cbi8vIHtAY29kZSBjb25maWdzfSB3aGljaCBhcmUgaW4gYSB7QGxpbmsgUnVsZVN0b3BTdGF0ZX0uIElmIGFsbFxuLy8gY29uZmlndXJhdGlvbnMgaW4ge0Bjb2RlIGNvbmZpZ3N9IGFyZSBhbHJlYWR5IGluIGEgcnVsZSBzdG9wIHN0YXRlLCB0aGlzXG4vLyBtZXRob2Qgc2ltcGx5IHJldHVybnMge0Bjb2RlIGNvbmZpZ3N9LlxuLy9cbi8vIDxwPldoZW4ge0Bjb2RlIGxvb2tUb0VuZE9mUnVsZX0gaXMgdHJ1ZSwgdGhpcyBtZXRob2QgdXNlc1xuLy8ge0BsaW5rIEFUTi8vbmV4dFRva2Vuc30gZm9yIGVhY2ggY29uZmlndXJhdGlvbiBpbiB7QGNvZGUgY29uZmlnc30gd2hpY2ggaXNcbi8vIG5vdCBhbHJlYWR5IGluIGEgcnVsZSBzdG9wIHN0YXRlIHRvIHNlZSBpZiBhIHJ1bGUgc3RvcCBzdGF0ZSBpcyByZWFjaGFibGVcbi8vIGZyb20gdGhlIGNvbmZpZ3VyYXRpb24gdmlhIGVwc2lsb24tb25seSB0cmFuc2l0aW9ucy48L3A+XG4vL1xuLy8gQHBhcmFtIGNvbmZpZ3MgdGhlIGNvbmZpZ3VyYXRpb24gc2V0IHRvIHVwZGF0ZVxuLy8gQHBhcmFtIGxvb2tUb0VuZE9mUnVsZSB3aGVuIHRydWUsIHRoaXMgbWV0aG9kIGNoZWNrcyBmb3IgcnVsZSBzdG9wIHN0YXRlc1xuLy8gcmVhY2hhYmxlIGJ5IGVwc2lsb24tb25seSB0cmFuc2l0aW9ucyBmcm9tIGVhY2ggY29uZmlndXJhdGlvbiBpblxuLy8ge0Bjb2RlIGNvbmZpZ3N9LlxuLy9cbi8vIEByZXR1cm4ge0Bjb2RlIGNvbmZpZ3N9IGlmIGFsbCBjb25maWd1cmF0aW9ucyBpbiB7QGNvZGUgY29uZmlnc30gYXJlIGluIGFcbi8vIHJ1bGUgc3RvcCBzdGF0ZSwgb3RoZXJ3aXNlIHJldHVybiBhIG5ldyBjb25maWd1cmF0aW9uIHNldCBjb250YWluaW5nIG9ubHlcbi8vIHRoZSBjb25maWd1cmF0aW9ucyBmcm9tIHtAY29kZSBjb25maWdzfSB3aGljaCBhcmUgaW4gYSBydWxlIHN0b3Agc3RhdGVcbi8vXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLnJlbW92ZUFsbENvbmZpZ3NOb3RJblJ1bGVTdG9wU3RhdGUgPSBmdW5jdGlvbihjb25maWdzLCBsb29rVG9FbmRPZlJ1bGUpIHtcbiAgICBpZiAoUHJlZGljdGlvbk1vZGUuYWxsQ29uZmlnc0luUnVsZVN0b3BTdGF0ZXMoY29uZmlncykpIHtcbiAgICAgICAgcmV0dXJuIGNvbmZpZ3M7XG4gICAgfVxuICAgIHZhciByZXN1bHQgPSBuZXcgQVROQ29uZmlnU2V0KGNvbmZpZ3MuZnVsbEN0eCk7XG4gICAgZm9yKHZhciBpPTA7IGk8Y29uZmlncy5pdGVtcy5sZW5ndGg7aSsrKSB7XG4gICAgICAgIHZhciBjb25maWcgPSBjb25maWdzLml0ZW1zW2ldO1xuICAgICAgICBpZiAoY29uZmlnLnN0YXRlIGluc3RhbmNlb2YgUnVsZVN0b3BTdGF0ZSkge1xuICAgICAgICAgICAgcmVzdWx0LmFkZChjb25maWcsIHRoaXMubWVyZ2VDYWNoZSk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobG9va1RvRW5kT2ZSdWxlICYmIGNvbmZpZy5zdGF0ZS5lcHNpbG9uT25seVRyYW5zaXRpb25zKSB7XG4gICAgICAgICAgICB2YXIgbmV4dFRva2VucyA9IHRoaXMuYXRuLm5leHRUb2tlbnMoY29uZmlnLnN0YXRlKTtcbiAgICAgICAgICAgIGlmIChuZXh0VG9rZW5zLmNvbnRhaW5zKFRva2VuLkVQU0lMT04pKSB7XG4gICAgICAgICAgICAgICAgdmFyIGVuZE9mUnVsZVN0YXRlID0gdGhpcy5hdG4ucnVsZVRvU3RvcFN0YXRlW2NvbmZpZy5zdGF0ZS5ydWxlSW5kZXhdO1xuICAgICAgICAgICAgICAgIHJlc3VsdC5hZGQobmV3IEFUTkNvbmZpZyh7c3RhdGU6ZW5kT2ZSdWxlU3RhdGV9LCBjb25maWcpLCB0aGlzLm1lcmdlQ2FjaGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmNvbXB1dGVTdGFydFN0YXRlID0gZnVuY3Rpb24ocCwgY3R4LCBmdWxsQ3R4KSB7XG4gICAgLy8gYWx3YXlzIGF0IGxlYXN0IHRoZSBpbXBsaWNpdCBjYWxsIHRvIHN0YXJ0IHJ1bGVcbiAgICB2YXIgaW5pdGlhbENvbnRleHQgPSBwcmVkaWN0aW9uQ29udGV4dEZyb21SdWxlQ29udGV4dCh0aGlzLmF0biwgY3R4KTtcbiAgICB2YXIgY29uZmlncyA9IG5ldyBBVE5Db25maWdTZXQoZnVsbEN0eCk7XG4gICAgZm9yKHZhciBpPTA7aTxwLnRyYW5zaXRpb25zLmxlbmd0aDtpKyspIHtcbiAgICAgICAgdmFyIHRhcmdldCA9IHAudHJhbnNpdGlvbnNbaV0udGFyZ2V0O1xuICAgICAgICB2YXIgYyA9IG5ldyBBVE5Db25maWcoeyBzdGF0ZTp0YXJnZXQsIGFsdDppKzEsIGNvbnRleHQ6aW5pdGlhbENvbnRleHQgfSwgbnVsbCk7XG4gICAgICAgIHZhciBjbG9zdXJlQnVzeSA9IG5ldyBTZXQoKTtcbiAgICAgICAgdGhpcy5jbG9zdXJlKGMsIGNvbmZpZ3MsIGNsb3N1cmVCdXN5LCB0cnVlLCBmdWxsQ3R4LCBmYWxzZSk7XG4gICAgfVxuICAgIHJldHVybiBjb25maWdzO1xufTtcblxuLy9cbi8vIFRoaXMgbWV0aG9kIHRyYW5zZm9ybXMgdGhlIHN0YXJ0IHN0YXRlIGNvbXB1dGVkIGJ5XG4vLyB7QGxpbmsgLy9jb21wdXRlU3RhcnRTdGF0ZX0gdG8gdGhlIHNwZWNpYWwgc3RhcnQgc3RhdGUgdXNlZCBieSBhXG4vLyBwcmVjZWRlbmNlIERGQSBmb3IgYSBwYXJ0aWN1bGFyIHByZWNlZGVuY2UgdmFsdWUuIFRoZSB0cmFuc2Zvcm1hdGlvblxuLy8gcHJvY2VzcyBhcHBsaWVzIHRoZSBmb2xsb3dpbmcgY2hhbmdlcyB0byB0aGUgc3RhcnQgc3RhdGUncyBjb25maWd1cmF0aW9uXG4vLyBzZXQuXG4vL1xuLy8gPG9sPlxuLy8gPGxpPkV2YWx1YXRlIHRoZSBwcmVjZWRlbmNlIHByZWRpY2F0ZXMgZm9yIGVhY2ggY29uZmlndXJhdGlvbiB1c2luZ1xuLy8ge0BsaW5rIFNlbWFudGljQ29udGV4dC8vZXZhbFByZWNlZGVuY2V9LjwvbGk+XG4vLyA8bGk+UmVtb3ZlIGFsbCBjb25maWd1cmF0aW9ucyB3aGljaCBwcmVkaWN0IGFuIGFsdGVybmF0aXZlIGdyZWF0ZXIgdGhhblxuLy8gMSwgZm9yIHdoaWNoIGFub3RoZXIgY29uZmlndXJhdGlvbiB0aGF0IHByZWRpY3RzIGFsdGVybmF0aXZlIDEgaXMgaW4gdGhlXG4vLyBzYW1lIEFUTiBzdGF0ZSB3aXRoIHRoZSBzYW1lIHByZWRpY3Rpb24gY29udGV4dC4gVGhpcyB0cmFuc2Zvcm1hdGlvbiBpc1xuLy8gdmFsaWQgZm9yIHRoZSBmb2xsb3dpbmcgcmVhc29uczpcbi8vIDx1bD5cbi8vIDxsaT5UaGUgY2xvc3VyZSBibG9jayBjYW5ub3QgY29udGFpbiBhbnkgZXBzaWxvbiB0cmFuc2l0aW9ucyB3aGljaCBieXBhc3Ncbi8vIHRoZSBib2R5IG9mIHRoZSBjbG9zdXJlLCBzbyBhbGwgc3RhdGVzIHJlYWNoYWJsZSB2aWEgYWx0ZXJuYXRpdmUgMSBhcmVcbi8vIHBhcnQgb2YgdGhlIHByZWNlZGVuY2UgYWx0ZXJuYXRpdmVzIG9mIHRoZSB0cmFuc2Zvcm1lZCBsZWZ0LXJlY3Vyc2l2ZVxuLy8gcnVsZS48L2xpPlxuLy8gPGxpPlRoZSBcInByaW1hcnlcIiBwb3J0aW9uIG9mIGEgbGVmdCByZWN1cnNpdmUgcnVsZSBjYW5ub3QgY29udGFpbiBhblxuLy8gZXBzaWxvbiB0cmFuc2l0aW9uLCBzbyB0aGUgb25seSB3YXkgYW4gYWx0ZXJuYXRpdmUgb3RoZXIgdGhhbiAxIGNhbiBleGlzdFxuLy8gaW4gYSBzdGF0ZSB0aGF0IGlzIGFsc28gcmVhY2hhYmxlIHZpYSBhbHRlcm5hdGl2ZSAxIGlzIGJ5IG5lc3RpbmcgY2FsbHNcbi8vIHRvIHRoZSBsZWZ0LXJlY3Vyc2l2ZSBydWxlLCB3aXRoIHRoZSBvdXRlciBjYWxscyBub3QgYmVpbmcgYXQgdGhlXG4vLyBwcmVmZXJyZWQgcHJlY2VkZW5jZSBsZXZlbC48L2xpPlxuLy8gPC91bD5cbi8vIDwvbGk+XG4vLyA8L29sPlxuLy9cbi8vIDxwPlxuLy8gVGhlIHByZWRpY3Rpb24gY29udGV4dCBtdXN0IGJlIGNvbnNpZGVyZWQgYnkgdGhpcyBmaWx0ZXIgdG8gYWRkcmVzc1xuLy8gc2l0dWF0aW9ucyBsaWtlIHRoZSBmb2xsb3dpbmcuXG4vLyA8L3A+XG4vLyA8Y29kZT5cbi8vIDxwcmU+XG4vLyBncmFtbWFyIFRBO1xuLy8gcHJvZzogc3RhdGVtZW50KiBFT0Y7XG4vLyBzdGF0ZW1lbnQ6IGxldHRlckEgfCBzdGF0ZW1lbnQgbGV0dGVyQSAnYicgO1xuLy8gbGV0dGVyQTogJ2EnO1xuLy8gPC9wcmU+XG4vLyA8L2NvZGU+XG4vLyA8cD5cbi8vIElmIHRoZSBhYm92ZSBncmFtbWFyLCB0aGUgQVROIHN0YXRlIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgdG9rZW5cbi8vIHJlZmVyZW5jZSB7QGNvZGUgJ2EnfSBpbiB7QGNvZGUgbGV0dGVyQX0gaXMgcmVhY2hhYmxlIGZyb20gdGhlIGxlZnQgZWRnZVxuLy8gb2YgYm90aCB0aGUgcHJpbWFyeSBhbmQgY2xvc3VyZSBibG9ja3Mgb2YgdGhlIGxlZnQtcmVjdXJzaXZlIHJ1bGVcbi8vIHtAY29kZSBzdGF0ZW1lbnR9LiBUaGUgcHJlZGljdGlvbiBjb250ZXh0IGFzc29jaWF0ZWQgd2l0aCBlYWNoIG9mIHRoZXNlXG4vLyBjb25maWd1cmF0aW9ucyBkaXN0aW5ndWlzaGVzIGJldHdlZW4gdGhlbSwgYW5kIHByZXZlbnRzIHRoZSBhbHRlcm5hdGl2ZVxuLy8gd2hpY2ggc3RlcHBlZCBvdXQgdG8ge0Bjb2RlIHByb2d9IChhbmQgdGhlbiBiYWNrIGluIHRvIHtAY29kZSBzdGF0ZW1lbnR9XG4vLyBmcm9tIGJlaW5nIGVsaW1pbmF0ZWQgYnkgdGhlIGZpbHRlci5cbi8vIDwvcD5cbi8vXG4vLyBAcGFyYW0gY29uZmlncyBUaGUgY29uZmlndXJhdGlvbiBzZXQgY29tcHV0ZWQgYnlcbi8vIHtAbGluayAvL2NvbXB1dGVTdGFydFN0YXRlfSBhcyB0aGUgc3RhcnQgc3RhdGUgZm9yIHRoZSBERkEuXG4vLyBAcmV0dXJuIFRoZSB0cmFuc2Zvcm1lZCBjb25maWd1cmF0aW9uIHNldCByZXByZXNlbnRpbmcgdGhlIHN0YXJ0IHN0YXRlXG4vLyBmb3IgYSBwcmVjZWRlbmNlIERGQSBhdCBhIHBhcnRpY3VsYXIgcHJlY2VkZW5jZSBsZXZlbCAoZGV0ZXJtaW5lZCBieVxuLy8gY2FsbGluZyB7QGxpbmsgUGFyc2VyLy9nZXRQcmVjZWRlbmNlfSkuXG4vL1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5hcHBseVByZWNlZGVuY2VGaWx0ZXIgPSBmdW5jdGlvbihjb25maWdzKSB7XG5cdHZhciBjb25maWc7XG5cdHZhciBzdGF0ZXNGcm9tQWx0MSA9IFtdO1xuICAgIHZhciBjb25maWdTZXQgPSBuZXcgQVROQ29uZmlnU2V0KGNvbmZpZ3MuZnVsbEN0eCk7XG4gICAgZm9yKHZhciBpPTA7IGk8Y29uZmlncy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25maWcgPSBjb25maWdzLml0ZW1zW2ldO1xuICAgICAgICAvLyBoYW5kbGUgYWx0IDEgZmlyc3RcbiAgICAgICAgaWYgKGNvbmZpZy5hbHQgIT09IDEpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB1cGRhdGVkQ29udGV4dCA9IGNvbmZpZy5zZW1hbnRpY0NvbnRleHQuZXZhbFByZWNlZGVuY2UodGhpcy5wYXJzZXIsIHRoaXMuX291dGVyQ29udGV4dCk7XG4gICAgICAgIGlmICh1cGRhdGVkQ29udGV4dD09PW51bGwpIHtcbiAgICAgICAgICAgIC8vIHRoZSBjb25maWd1cmF0aW9uIHdhcyBlbGltaW5hdGVkXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0ZXNGcm9tQWx0MVtjb25maWcuc3RhdGUuc3RhdGVOdW1iZXJdID0gY29uZmlnLmNvbnRleHQ7XG4gICAgICAgIGlmICh1cGRhdGVkQ29udGV4dCAhPT0gY29uZmlnLnNlbWFudGljQ29udGV4dCkge1xuICAgICAgICAgICAgY29uZmlnU2V0LmFkZChuZXcgQVROQ29uZmlnKHtzZW1hbnRpY0NvbnRleHQ6dXBkYXRlZENvbnRleHR9LCBjb25maWcpLCB0aGlzLm1lcmdlQ2FjaGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uZmlnU2V0LmFkZChjb25maWcsIHRoaXMubWVyZ2VDYWNoZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yKGk9MDsgaTxjb25maWdzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbmZpZyA9IGNvbmZpZ3MuaXRlbXNbaV07XG4gICAgICAgIGlmIChjb25maWcuYWx0ID09PSAxKSB7XG4gICAgICAgICAgICAvLyBhbHJlYWR5IGhhbmRsZWRcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIEluIHRoZSBmdXR1cmUsIHRoaXMgZWxpbWluYXRpb24gc3RlcCBjb3VsZCBiZSB1cGRhdGVkIHRvIGFsc29cbiAgICAgICAgLy8gZmlsdGVyIHRoZSBwcmVkaWN0aW9uIGNvbnRleHQgZm9yIGFsdGVybmF0aXZlcyBwcmVkaWN0aW5nIGFsdD4xXG4gICAgICAgIC8vIChiYXNpY2FsbHkgYSBncmFwaCBzdWJ0cmFjdGlvbiBhbGdvcml0aG0pLlxuXHRcdGlmICghY29uZmlnLnByZWNlZGVuY2VGaWx0ZXJTdXBwcmVzc2VkKSB7XG4gICAgICAgICAgICB2YXIgY29udGV4dCA9IHN0YXRlc0Zyb21BbHQxW2NvbmZpZy5zdGF0ZS5zdGF0ZU51bWJlcl0gfHwgbnVsbDtcbiAgICAgICAgICAgIGlmIChjb250ZXh0IT09bnVsbCAmJiBjb250ZXh0LmVxdWFscyhjb25maWcuY29udGV4dCkpIHtcbiAgICAgICAgICAgICAgICAvLyBlbGltaW5hdGVkXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cdFx0fVxuICAgICAgICBjb25maWdTZXQuYWRkKGNvbmZpZywgdGhpcy5tZXJnZUNhY2hlKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZ1NldDtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0UmVhY2hhYmxlVGFyZ2V0ID0gZnVuY3Rpb24odHJhbnMsIHR0eXBlKSB7XG4gICAgaWYgKHRyYW5zLm1hdGNoZXModHR5cGUsIDAsIHRoaXMuYXRuLm1heFRva2VuVHlwZSkpIHtcbiAgICAgICAgcmV0dXJuIHRyYW5zLnRhcmdldDtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG59O1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmdldFByZWRzRm9yQW1iaWdBbHRzID0gZnVuY3Rpb24oYW1iaWdBbHRzLCBjb25maWdzLCBuYWx0cykge1xuICAgIC8vIFJFQUNIPVsxfDF8W118MDowLCAxfDJ8W118MDoxXVxuICAgIC8vIGFsdFRvUHJlZCBzdGFydHMgYXMgYW4gYXJyYXkgb2YgYWxsIG51bGwgY29udGV4dHMuIFRoZSBlbnRyeSBhdCBpbmRleCBpXG4gICAgLy8gY29ycmVzcG9uZHMgdG8gYWx0ZXJuYXRpdmUgaS4gYWx0VG9QcmVkW2ldIG1heSBoYXZlIG9uZSBvZiB0aHJlZSB2YWx1ZXM6XG4gICAgLy8gICAxLiBudWxsOiBubyBBVE5Db25maWcgYyBpcyBmb3VuZCBzdWNoIHRoYXQgYy5hbHQ9PWlcbiAgICAvLyAgIDIuIFNlbWFudGljQ29udGV4dC5OT05FOiBBdCBsZWFzdCBvbmUgQVROQ29uZmlnIGMgZXhpc3RzIHN1Y2ggdGhhdFxuICAgIC8vICAgICAgYy5hbHQ9PWkgYW5kIGMuc2VtYW50aWNDb250ZXh0PT1TZW1hbnRpY0NvbnRleHQuTk9ORS4gSW4gb3RoZXIgd29yZHMsXG4gICAgLy8gICAgICBhbHQgaSBoYXMgYXQgbGVhc3Qgb25lIHVucHJlZGljYXRlZCBjb25maWcuXG4gICAgLy8gICAzLiBOb24tTk9ORSBTZW1hbnRpYyBDb250ZXh0OiBUaGVyZSBleGlzdHMgYXQgbGVhc3Qgb25lLCBhbmQgZm9yIGFsbFxuICAgIC8vICAgICAgQVROQ29uZmlnIGMgc3VjaCB0aGF0IGMuYWx0PT1pLCBjLnNlbWFudGljQ29udGV4dCE9U2VtYW50aWNDb250ZXh0Lk5PTkUuXG4gICAgLy9cbiAgICAvLyBGcm9tIHRoaXMsIGl0IGlzIGNsZWFyIHRoYXQgTk9ORXx8YW55dGhpbmc9PU5PTkUuXG4gICAgLy9cbiAgICB2YXIgYWx0VG9QcmVkID0gW107XG4gICAgZm9yKHZhciBpPTA7aTxjb25maWdzLml0ZW1zLmxlbmd0aDtpKyspIHtcbiAgICAgICAgdmFyIGMgPSBjb25maWdzLml0ZW1zW2ldO1xuICAgICAgICBpZihhbWJpZ0FsdHMuY29udGFpbnMoIGMuYWx0ICkpIHtcbiAgICAgICAgICAgIGFsdFRvUHJlZFtjLmFsdF0gPSBTZW1hbnRpY0NvbnRleHQub3JDb250ZXh0KGFsdFRvUHJlZFtjLmFsdF0gfHwgbnVsbCwgYy5zZW1hbnRpY0NvbnRleHQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBuUHJlZEFsdHMgPSAwO1xuICAgIGZvciAoaSA9MTtpPCBuYWx0cysxO2krKykge1xuICAgICAgICB2YXIgcHJlZCA9IGFsdFRvUHJlZFtpXSB8fCBudWxsO1xuICAgICAgICBpZiAocHJlZD09PW51bGwpIHtcbiAgICAgICAgICAgIGFsdFRvUHJlZFtpXSA9IFNlbWFudGljQ29udGV4dC5OT05FO1xuICAgICAgICB9IGVsc2UgaWYgKHByZWQgIT09IFNlbWFudGljQ29udGV4dC5OT05FKSB7XG4gICAgICAgICAgICBuUHJlZEFsdHMgKz0gMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBub25hbWJpZyBhbHRzIGFyZSBudWxsIGluIGFsdFRvUHJlZFxuICAgIGlmIChuUHJlZEFsdHM9PT0wKSB7XG4gICAgICAgIGFsdFRvUHJlZCA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiZ2V0UHJlZHNGb3JBbWJpZ0FsdHMgcmVzdWx0IFwiICsgVXRpbHMuYXJyYXlUb1N0cmluZyhhbHRUb1ByZWQpKTtcbiAgICB9XG4gICAgcmV0dXJuIGFsdFRvUHJlZDtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0UHJlZGljYXRlUHJlZGljdGlvbnMgPSBmdW5jdGlvbihhbWJpZ0FsdHMsIGFsdFRvUHJlZCkge1xuICAgIHZhciBwYWlycyA9IFtdO1xuICAgIHZhciBjb250YWluc1ByZWRpY2F0ZSA9IGZhbHNlO1xuICAgIGZvciAodmFyIGk9MTsgaTxhbHRUb1ByZWQubGVuZ3RoO2krKykge1xuICAgICAgICB2YXIgcHJlZCA9IGFsdFRvUHJlZFtpXTtcbiAgICAgICAgLy8gdW5wcmVkaWNhdGVkIGlzIGluZGljYXRlZCBieSBTZW1hbnRpY0NvbnRleHQuTk9ORVxuICAgICAgICBpZiggYW1iaWdBbHRzIT09bnVsbCAmJiBhbWJpZ0FsdHMuY29udGFpbnMoIGkgKSkge1xuICAgICAgICAgICAgcGFpcnMucHVzaChuZXcgUHJlZFByZWRpY3Rpb24ocHJlZCwgaSkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmVkICE9PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuICAgICAgICAgICAgY29udGFpbnNQcmVkaWNhdGUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghIGNvbnRhaW5zUHJlZGljYXRlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gcGFpcnM7XG59O1xuXG4vL1xuLy8gVGhpcyBtZXRob2QgaXMgdXNlZCB0byBpbXByb3ZlIHRoZSBsb2NhbGl6YXRpb24gb2YgZXJyb3IgbWVzc2FnZXMgYnlcbi8vIGNob29zaW5nIGFuIGFsdGVybmF0aXZlIHJhdGhlciB0aGFuIHRocm93aW5nIGFcbi8vIHtAbGluayBOb1ZpYWJsZUFsdEV4Y2VwdGlvbn0gaW4gcGFydGljdWxhciBwcmVkaWN0aW9uIHNjZW5hcmlvcyB3aGVyZSB0aGVcbi8vIHtAbGluayAvL0VSUk9SfSBzdGF0ZSB3YXMgcmVhY2hlZCBkdXJpbmcgQVROIHNpbXVsYXRpb24uXG4vL1xuLy8gPHA+XG4vLyBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGlzIG1ldGhvZCB1c2VzIHRoZSBmb2xsb3dpbmdcbi8vIGFsZ29yaXRobSB0byBpZGVudGlmeSBhbiBBVE4gY29uZmlndXJhdGlvbiB3aGljaCBzdWNjZXNzZnVsbHkgcGFyc2VkIHRoZVxuLy8gZGVjaXNpb24gZW50cnkgcnVsZS4gQ2hvb3Npbmcgc3VjaCBhbiBhbHRlcm5hdGl2ZSBlbnN1cmVzIHRoYXQgdGhlXG4vLyB7QGxpbmsgUGFyc2VyUnVsZUNvbnRleHR9IHJldHVybmVkIGJ5IHRoZSBjYWxsaW5nIHJ1bGUgd2lsbCBiZSBjb21wbGV0ZVxuLy8gYW5kIHZhbGlkLCBhbmQgdGhlIHN5bnRheCBlcnJvciB3aWxsIGJlIHJlcG9ydGVkIGxhdGVyIGF0IGEgbW9yZVxuLy8gbG9jYWxpemVkIGxvY2F0aW9uLjwvcD5cbi8vXG4vLyA8dWw+XG4vLyA8bGk+SWYgYSBzeW50YWN0aWNhbGx5IHZhbGlkIHBhdGggb3IgcGF0aHMgcmVhY2ggdGhlIGVuZCBvZiB0aGUgZGVjaXNpb24gcnVsZSBhbmRcbi8vIHRoZXkgYXJlIHNlbWFudGljYWxseSB2YWxpZCBpZiBwcmVkaWNhdGVkLCByZXR1cm4gdGhlIG1pbiBhc3NvY2lhdGVkIGFsdC48L2xpPlxuLy8gPGxpPkVsc2UsIGlmIGEgc2VtYW50aWNhbGx5IGludmFsaWQgYnV0IHN5bnRhY3RpY2FsbHkgdmFsaWQgcGF0aCBleGlzdFxuLy8gb3IgcGF0aHMgZXhpc3QsIHJldHVybiB0aGUgbWluaW11bSBhc3NvY2lhdGVkIGFsdC5cbi8vIDwvbGk+XG4vLyA8bGk+T3RoZXJ3aXNlLCByZXR1cm4ge0BsaW5rIEFUTi8vSU5WQUxJRF9BTFRfTlVNQkVSfS48L2xpPlxuLy8gPC91bD5cbi8vXG4vLyA8cD5cbi8vIEluIHNvbWUgc2NlbmFyaW9zLCB0aGUgYWxnb3JpdGhtIGRlc2NyaWJlZCBhYm92ZSBjb3VsZCBwcmVkaWN0IGFuXG4vLyBhbHRlcm5hdGl2ZSB3aGljaCB3aWxsIHJlc3VsdCBpbiBhIHtAbGluayBGYWlsZWRQcmVkaWNhdGVFeGNlcHRpb259IGluXG4vLyB0aGUgcGFyc2VyLiBTcGVjaWZpY2FsbHksIHRoaXMgY291bGQgb2NjdXIgaWYgdGhlIDxlbT5vbmx5PC9lbT4gY29uZmlndXJhdGlvblxuLy8gY2FwYWJsZSBvZiBzdWNjZXNzZnVsbHkgcGFyc2luZyB0byB0aGUgZW5kIG9mIHRoZSBkZWNpc2lvbiBydWxlIGlzXG4vLyBibG9ja2VkIGJ5IGEgc2VtYW50aWMgcHJlZGljYXRlLiBCeSBjaG9vc2luZyB0aGlzIGFsdGVybmF0aXZlIHdpdGhpblxuLy8ge0BsaW5rIC8vYWRhcHRpdmVQcmVkaWN0fSBpbnN0ZWFkIG9mIHRocm93aW5nIGFcbi8vIHtAbGluayBOb1ZpYWJsZUFsdEV4Y2VwdGlvbn0sIHRoZSByZXN1bHRpbmdcbi8vIHtAbGluayBGYWlsZWRQcmVkaWNhdGVFeGNlcHRpb259IGluIHRoZSBwYXJzZXIgd2lsbCBpZGVudGlmeSB0aGUgc3BlY2lmaWNcbi8vIHByZWRpY2F0ZSB3aGljaCBpcyBwcmV2ZW50aW5nIHRoZSBwYXJzZXIgZnJvbSBzdWNjZXNzZnVsbHkgcGFyc2luZyB0aGVcbi8vIGRlY2lzaW9uIHJ1bGUsIHdoaWNoIGhlbHBzIGRldmVsb3BlcnMgaWRlbnRpZnkgYW5kIGNvcnJlY3QgbG9naWMgZXJyb3JzXG4vLyBpbiBzZW1hbnRpYyBwcmVkaWNhdGVzLlxuLy8gPC9wPlxuLy9cbi8vIEBwYXJhbSBjb25maWdzIFRoZSBBVE4gY29uZmlndXJhdGlvbnMgd2hpY2ggd2VyZSB2YWxpZCBpbW1lZGlhdGVseSBiZWZvcmVcbi8vIHRoZSB7QGxpbmsgLy9FUlJPUn0gc3RhdGUgd2FzIHJlYWNoZWRcbi8vIEBwYXJhbSBvdXRlckNvbnRleHQgVGhlIGlzIHRoZSBcXGdhbW1hXzAgaW5pdGlhbCBwYXJzZXIgY29udGV4dCBmcm9tIHRoZSBwYXBlclxuLy8gb3IgdGhlIHBhcnNlciBzdGFjayBhdCB0aGUgaW5zdGFudCBiZWZvcmUgcHJlZGljdGlvbiBjb21tZW5jZXMuXG4vL1xuLy8gQHJldHVybiBUaGUgdmFsdWUgdG8gcmV0dXJuIGZyb20ge0BsaW5rIC8vYWRhcHRpdmVQcmVkaWN0fSwgb3Jcbi8vIHtAbGluayBBVE4vL0lOVkFMSURfQUxUX05VTUJFUn0gaWYgYSBzdWl0YWJsZSBhbHRlcm5hdGl2ZSB3YXMgbm90XG4vLyBpZGVudGlmaWVkIGFuZCB7QGxpbmsgLy9hZGFwdGl2ZVByZWRpY3R9IHNob3VsZCByZXBvcnQgYW4gZXJyb3IgaW5zdGVhZC5cbi8vXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmdldFN5blZhbGlkT3JTZW1JbnZhbGlkQWx0VGhhdEZpbmlzaGVkRGVjaXNpb25FbnRyeVJ1bGUgPSBmdW5jdGlvbihjb25maWdzLCBvdXRlckNvbnRleHQpIHtcbiAgICB2YXIgY2ZncyA9IHRoaXMuc3BsaXRBY2NvcmRpbmdUb1NlbWFudGljVmFsaWRpdHkoY29uZmlncywgb3V0ZXJDb250ZXh0KTtcbiAgICB2YXIgc2VtVmFsaWRDb25maWdzID0gY2Znc1swXTtcbiAgICB2YXIgc2VtSW52YWxpZENvbmZpZ3MgPSBjZmdzWzFdO1xuICAgIHZhciBhbHQgPSB0aGlzLmdldEFsdFRoYXRGaW5pc2hlZERlY2lzaW9uRW50cnlSdWxlKHNlbVZhbGlkQ29uZmlncyk7XG4gICAgaWYgKGFsdCE9PUFUTi5JTlZBTElEX0FMVF9OVU1CRVIpIHsgLy8gc2VtYW50aWNhbGx5L3N5bnRhY3RpY2FsbHkgdmlhYmxlIHBhdGggZXhpc3RzXG4gICAgICAgIHJldHVybiBhbHQ7XG4gICAgfVxuICAgIC8vIElzIHRoZXJlIGEgc3ludGFjdGljYWxseSB2YWxpZCBwYXRoIHdpdGggYSBmYWlsZWQgcHJlZD9cbiAgICBpZiAoc2VtSW52YWxpZENvbmZpZ3MuaXRlbXMubGVuZ3RoPjApIHtcbiAgICAgICAgYWx0ID0gdGhpcy5nZXRBbHRUaGF0RmluaXNoZWREZWNpc2lvbkVudHJ5UnVsZShzZW1JbnZhbGlkQ29uZmlncyk7XG4gICAgICAgIGlmIChhbHQhPT1BVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7IC8vIHN5bnRhY3RpY2FsbHkgdmlhYmxlIHBhdGggZXhpc3RzXG4gICAgICAgICAgICByZXR1cm4gYWx0O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBBVE4uSU5WQUxJRF9BTFRfTlVNQkVSO1xufTtcblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRBbHRUaGF0RmluaXNoZWREZWNpc2lvbkVudHJ5UnVsZSA9IGZ1bmN0aW9uKGNvbmZpZ3MpIHtcbiAgICB2YXIgYWx0cyA9IFtdO1xuICAgIGZvcih2YXIgaT0wO2k8Y29uZmlncy5pdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgYyA9IGNvbmZpZ3MuaXRlbXNbaV07XG4gICAgICAgIGlmIChjLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0PjAgfHwgKChjLnN0YXRlIGluc3RhbmNlb2YgUnVsZVN0b3BTdGF0ZSkgJiYgYy5jb250ZXh0Lmhhc0VtcHR5UGF0aCgpKSkge1xuICAgICAgICAgICAgaWYoYWx0cy5pbmRleE9mKGMuYWx0KTwwKSB7XG4gICAgICAgICAgICAgICAgYWx0cy5wdXNoKGMuYWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWx0cy5sZW5ndGg9PT0wKSB7XG4gICAgICAgIHJldHVybiBBVE4uSU5WQUxJRF9BTFRfTlVNQkVSO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1pbi5hcHBseShudWxsLCBhbHRzKTtcbiAgICB9XG59O1xuLy8gV2FsayB0aGUgbGlzdCBvZiBjb25maWd1cmF0aW9ucyBhbmQgc3BsaXQgdGhlbSBhY2NvcmRpbmcgdG9cbi8vICB0aG9zZSB0aGF0IGhhdmUgcHJlZHMgZXZhbHVhdGluZyB0byB0cnVlL2ZhbHNlLiAgSWYgbm8gcHJlZCwgYXNzdW1lXG4vLyAgdHJ1ZSBwcmVkIGFuZCBpbmNsdWRlIGluIHN1Y2NlZWRlZCBzZXQuICBSZXR1cm5zIFBhaXIgb2Ygc2V0cy5cbi8vXG4vLyAgQ3JlYXRlIGEgbmV3IHNldCBzbyBhcyBub3QgdG8gYWx0ZXIgdGhlIGluY29taW5nIHBhcmFtZXRlci5cbi8vXG4vLyAgQXNzdW1wdGlvbjogdGhlIGlucHV0IHN0cmVhbSBoYXMgYmVlbiByZXN0b3JlZCB0byB0aGUgc3RhcnRpbmcgcG9pbnRcbi8vICBwcmVkaWN0aW9uLCB3aGljaCBpcyB3aGVyZSBwcmVkaWNhdGVzIG5lZWQgdG8gZXZhbHVhdGUuXG4vL1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5zcGxpdEFjY29yZGluZ1RvU2VtYW50aWNWYWxpZGl0eSA9IGZ1bmN0aW9uKCBjb25maWdzLCBvdXRlckNvbnRleHQpIHtcbiAgICB2YXIgc3VjY2VlZGVkID0gbmV3IEFUTkNvbmZpZ1NldChjb25maWdzLmZ1bGxDdHgpO1xuICAgIHZhciBmYWlsZWQgPSBuZXcgQVROQ29uZmlnU2V0KGNvbmZpZ3MuZnVsbEN0eCk7XG4gICAgZm9yKHZhciBpPTA7aTxjb25maWdzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjID0gY29uZmlncy5pdGVtc1tpXTtcbiAgICAgICAgaWYgKGMuc2VtYW50aWNDb250ZXh0ICE9PSBTZW1hbnRpY0NvbnRleHQuTk9ORSkge1xuICAgICAgICAgICAgdmFyIHByZWRpY2F0ZUV2YWx1YXRpb25SZXN1bHQgPSBjLnNlbWFudGljQ29udGV4dC5ldmFsdWF0ZSh0aGlzLnBhcnNlciwgb3V0ZXJDb250ZXh0KTtcbiAgICAgICAgICAgIGlmIChwcmVkaWNhdGVFdmFsdWF0aW9uUmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgc3VjY2VlZGVkLmFkZChjKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZmFpbGVkLmFkZChjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN1Y2NlZWRlZC5hZGQoYyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFtzdWNjZWVkZWQsIGZhaWxlZF07XG59O1xuXG4vLyBMb29rIHRocm91Z2ggYSBsaXN0IG9mIHByZWRpY2F0ZS9hbHQgcGFpcnMsIHJldHVybmluZyBhbHRzIGZvciB0aGVcbi8vICBwYWlycyB0aGF0IHdpbi4gQSB7QGNvZGUgTk9ORX0gcHJlZGljYXRlIGluZGljYXRlcyBhbiBhbHQgY29udGFpbmluZyBhblxuLy8gIHVucHJlZGljYXRlZCBjb25maWcgd2hpY2ggYmVoYXZlcyBhcyBcImFsd2F5cyB0cnVlLlwiIElmICFjb21wbGV0ZVxuLy8gIHRoZW4gd2Ugc3RvcCBhdCB0aGUgZmlyc3QgcHJlZGljYXRlIHRoYXQgZXZhbHVhdGVzIHRvIHRydWUuIFRoaXNcbi8vICBpbmNsdWRlcyBwYWlycyB3aXRoIG51bGwgcHJlZGljYXRlcy5cbi8vXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmV2YWxTZW1hbnRpY0NvbnRleHQgPSBmdW5jdGlvbihwcmVkUHJlZGljdGlvbnMsIG91dGVyQ29udGV4dCwgY29tcGxldGUpIHtcbiAgICB2YXIgcHJlZGljdGlvbnMgPSBuZXcgQml0U2V0KCk7XG4gICAgZm9yKHZhciBpPTA7aTxwcmVkUHJlZGljdGlvbnMubGVuZ3RoO2krKykge1xuICAgIFx0dmFyIHBhaXIgPSBwcmVkUHJlZGljdGlvbnNbaV07XG4gICAgICAgIGlmIChwYWlyLnByZWQgPT09IFNlbWFudGljQ29udGV4dC5OT05FKSB7XG4gICAgICAgICAgICBwcmVkaWN0aW9ucy5hZGQocGFpci5hbHQpO1xuICAgICAgICAgICAgaWYgKCEgY29tcGxldGUpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwcmVkaWNhdGVFdmFsdWF0aW9uUmVzdWx0ID0gcGFpci5wcmVkLmV2YWx1YXRlKHRoaXMucGFyc2VyLCBvdXRlckNvbnRleHQpO1xuICAgICAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLmRmYV9kZWJ1Zykge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXCJldmFsIHByZWQgXCIgKyBwYWlyICsgXCI9XCIgKyBwcmVkaWNhdGVFdmFsdWF0aW9uUmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJlZGljYXRlRXZhbHVhdGlvblJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcgfHwgdGhpcy5kZmFfZGVidWcpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcIlBSRURJQ1QgXCIgKyBwYWlyLmFsdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmVkaWN0aW9ucy5hZGQocGFpci5hbHQpO1xuICAgICAgICAgICAgaWYgKCEgY29tcGxldGUpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcHJlZGljdGlvbnM7XG59O1xuXG4vLyBUT0RPOiBJZiB3ZSBhcmUgZG9pbmcgcHJlZGljYXRlcywgdGhlcmUgaXMgbm8gcG9pbnQgaW4gcHVyc3Vpbmdcbi8vICAgICBjbG9zdXJlIG9wZXJhdGlvbnMgaWYgd2UgcmVhY2ggYSBERkEgc3RhdGUgdGhhdCB1bmlxdWVseSBwcmVkaWN0c1xuLy8gICAgIGFsdGVybmF0aXZlLiBXZSB3aWxsIG5vdCBiZSBjYWNoaW5nIHRoYXQgREZBIHN0YXRlIGFuZCBpdCBpcyBhXG4vLyAgICAgd2FzdGUgdG8gcHVyc3VlIHRoZSBjbG9zdXJlLiBNaWdodCBoYXZlIHRvIGFkdmFuY2Ugd2hlbiB3ZSBkb1xuLy8gICAgIGFtYmlnIGRldGVjdGlvbiB0aG91Z2h0IDooXG4vL1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmNsb3N1cmUgPSBmdW5jdGlvbihjb25maWcsIGNvbmZpZ3MsIGNsb3N1cmVCdXN5LCBjb2xsZWN0UHJlZGljYXRlcywgZnVsbEN0eCwgdHJlYXRFb2ZBc0Vwc2lsb24pIHtcbiAgICB2YXIgaW5pdGlhbERlcHRoID0gMDtcbiAgICB0aGlzLmNsb3N1cmVDaGVja2luZ1N0b3BTdGF0ZShjb25maWcsIGNvbmZpZ3MsIGNsb3N1cmVCdXN5LCBjb2xsZWN0UHJlZGljYXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVsbEN0eCwgaW5pdGlhbERlcHRoLCB0cmVhdEVvZkFzRXBzaWxvbik7XG59O1xuXG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuY2xvc3VyZUNoZWNraW5nU3RvcFN0YXRlID0gZnVuY3Rpb24oY29uZmlnLCBjb25maWdzLCBjbG9zdXJlQnVzeSwgY29sbGVjdFByZWRpY2F0ZXMsIGZ1bGxDdHgsIGRlcHRoLCB0cmVhdEVvZkFzRXBzaWxvbikge1xuICAgIGlmICh0aGlzLmRlYnVnIHx8IHRoaXMuZGVidWdfY2xvc3VyZSkge1xuICAgICAgICBjb25zb2xlLmxvZyhcImNsb3N1cmUoXCIgKyBjb25maWcudG9TdHJpbmcodGhpcy5wYXJzZXIsdHJ1ZSkgKyBcIilcIik7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiY29uZmlncyhcIiArIGNvbmZpZ3MudG9TdHJpbmcoKSArIFwiKVwiKTtcbiAgICAgICAgaWYoY29uZmlnLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0PjUwKSB7XG4gICAgICAgICAgICB0aHJvdyBcInByb2JsZW1cIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29uZmlnLnN0YXRlIGluc3RhbmNlb2YgUnVsZVN0b3BTdGF0ZSkge1xuICAgICAgICAvLyBXZSBoaXQgcnVsZSBlbmQuIElmIHdlIGhhdmUgY29udGV4dCBpbmZvLCB1c2UgaXRcbiAgICAgICAgLy8gcnVuIHRocnUgYWxsIHBvc3NpYmxlIHN0YWNrIHRvcHMgaW4gY3R4XG4gICAgICAgIGlmICghIGNvbmZpZy5jb250ZXh0LmlzRW1wdHkoKSkge1xuICAgICAgICAgICAgZm9yICggdmFyIGkgPTA7IGk8Y29uZmlnLmNvbnRleHQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmNvbnRleHQuZ2V0UmV0dXJuU3RhdGUoaSkgPT09IFByZWRpY3Rpb25Db250ZXh0LkVNUFRZX1JFVFVSTl9TVEFURSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZnVsbEN0eCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlncy5hZGQobmV3IEFUTkNvbmZpZyh7c3RhdGU6Y29uZmlnLnN0YXRlLCBjb250ZXh0OlByZWRpY3Rpb25Db250ZXh0LkVNUFRZfSwgY29uZmlnKSwgdGhpcy5tZXJnZUNhY2hlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSBubyBjb250ZXh0IGluZm8sIGp1c3QgY2hhc2UgZm9sbG93IGxpbmtzIChpZiBncmVlZHkpXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiRkFMTElORyBvZmYgcnVsZSBcIiArIHRoaXMuZ2V0UnVsZU5hbWUoY29uZmlnLnN0YXRlLnJ1bGVJbmRleCkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jbG9zdXJlXyhjb25maWcsIGNvbmZpZ3MsIGNsb3N1cmVCdXN5LCBjb2xsZWN0UHJlZGljYXRlcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxDdHgsIGRlcHRoLCB0cmVhdEVvZkFzRXBzaWxvbik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhciByZXR1cm5TdGF0ZSA9IHRoaXMuYXRuLnN0YXRlc1tjb25maWcuY29udGV4dC5nZXRSZXR1cm5TdGF0ZShpKV07XG4gICAgICAgICAgICAgICAgdmFyIG5ld0NvbnRleHQgPSBjb25maWcuY29udGV4dC5nZXRQYXJlbnQoaSk7IC8vIFwicG9wXCIgcmV0dXJuIHN0YXRlXG4gICAgICAgICAgICAgICAgdmFyIHBhcm1zID0ge3N0YXRlOnJldHVyblN0YXRlLCBhbHQ6Y29uZmlnLmFsdCwgY29udGV4dDpuZXdDb250ZXh0LCBzZW1hbnRpY0NvbnRleHQ6Y29uZmlnLnNlbWFudGljQ29udGV4dH07XG4gICAgICAgICAgICAgICAgdmFyIGMgPSBuZXcgQVROQ29uZmlnKHBhcm1zLCBudWxsKTtcbiAgICAgICAgICAgICAgICAvLyBXaGlsZSB3ZSBoYXZlIGNvbnRleHQgdG8gcG9wIGJhY2sgZnJvbSwgd2UgbWF5IGhhdmVcbiAgICAgICAgICAgICAgICAvLyBnb3R0ZW4gdGhhdCBjb250ZXh0IEFGVEVSIGhhdmluZyBmYWxsaW5nIG9mZiBhIHJ1bGUuXG4gICAgICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIHRyYWNrIHRoYXQgd2UgYXJlIG5vdyBvdXQgb2YgY29udGV4dC5cbiAgICAgICAgICAgICAgICBjLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0ID0gY29uZmlnLnJlYWNoZXNJbnRvT3V0ZXJDb250ZXh0O1xuICAgICAgICAgICAgICAgIHRoaXMuY2xvc3VyZUNoZWNraW5nU3RvcFN0YXRlKGMsIGNvbmZpZ3MsIGNsb3N1cmVCdXN5LCBjb2xsZWN0UHJlZGljYXRlcywgZnVsbEN0eCwgZGVwdGggLSAxLCB0cmVhdEVvZkFzRXBzaWxvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSBpZiggZnVsbEN0eCkge1xuICAgICAgICAgICAgLy8gcmVhY2hlZCBlbmQgb2Ygc3RhcnQgcnVsZVxuICAgICAgICAgICAgY29uZmlncy5hZGQoY29uZmlnLCB0aGlzLm1lcmdlQ2FjaGUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gZWxzZSBpZiB3ZSBoYXZlIG5vIGNvbnRleHQgaW5mbywganVzdCBjaGFzZSBmb2xsb3cgbGlua3MgKGlmIGdyZWVkeSlcbiAgICAgICAgICAgIGlmICh0aGlzLmRlYnVnKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJGQUxMSU5HIG9mZiBydWxlIFwiICsgdGhpcy5nZXRSdWxlTmFtZShjb25maWcuc3RhdGUucnVsZUluZGV4KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5jbG9zdXJlXyhjb25maWcsIGNvbmZpZ3MsIGNsb3N1cmVCdXN5LCBjb2xsZWN0UHJlZGljYXRlcywgZnVsbEN0eCwgZGVwdGgsIHRyZWF0RW9mQXNFcHNpbG9uKTtcbn07XG5cblxuLy8gRG8gdGhlIGFjdHVhbCB3b3JrIG9mIHdhbGtpbmcgZXBzaWxvbiBlZGdlcy8vXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmNsb3N1cmVfID0gZnVuY3Rpb24oY29uZmlnLCBjb25maWdzLCBjbG9zdXJlQnVzeSwgY29sbGVjdFByZWRpY2F0ZXMsIGZ1bGxDdHgsIGRlcHRoLCB0cmVhdEVvZkFzRXBzaWxvbikge1xuICAgIHZhciBwID0gY29uZmlnLnN0YXRlO1xuICAgIC8vIG9wdGltaXphdGlvblxuICAgIGlmICghIHAuZXBzaWxvbk9ubHlUcmFuc2l0aW9ucykge1xuICAgICAgICBjb25maWdzLmFkZChjb25maWcsIHRoaXMubWVyZ2VDYWNoZSk7XG4gICAgICAgIC8vIG1ha2Ugc3VyZSB0byBub3QgcmV0dXJuIGhlcmUsIGJlY2F1c2UgRU9GIHRyYW5zaXRpb25zIGNhbiBhY3QgYXNcbiAgICAgICAgLy8gYm90aCBlcHNpbG9uIHRyYW5zaXRpb25zIGFuZCBub24tZXBzaWxvbiB0cmFuc2l0aW9ucy5cbiAgICB9XG4gICAgZm9yKHZhciBpID0gMDtpPHAudHJhbnNpdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYoaT09MCAmJiB0aGlzLmNhbkRyb3BMb29wRW50cnlFZGdlSW5MZWZ0UmVjdXJzaXZlUnVsZShjb25maWcpKVxuICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgdmFyIHQgPSBwLnRyYW5zaXRpb25zW2ldO1xuICAgICAgICB2YXIgY29udGludWVDb2xsZWN0aW5nID0gY29sbGVjdFByZWRpY2F0ZXMgJiYgISh0IGluc3RhbmNlb2YgQWN0aW9uVHJhbnNpdGlvbik7XG4gICAgICAgIHZhciBjID0gdGhpcy5nZXRFcHNpbG9uVGFyZ2V0KGNvbmZpZywgdCwgY29udGludWVDb2xsZWN0aW5nLCBkZXB0aCA9PT0gMCwgZnVsbEN0eCwgdHJlYXRFb2ZBc0Vwc2lsb24pO1xuICAgICAgICBpZiAoYyE9PW51bGwpIHtcbiAgICAgICAgICAgIHZhciBuZXdEZXB0aCA9IGRlcHRoO1xuICAgICAgICAgICAgaWYgKCBjb25maWcuc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSB7XG4gICAgICAgICAgICAgICAgLy8gdGFyZ2V0IGZlbGwgb2ZmIGVuZCBvZiBydWxlOyBtYXJrIHJlc3VsdGluZyBjIGFzIGhhdmluZyBkaXBwZWQgaW50byBvdXRlciBjb250ZXh0XG4gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3QgZ2V0IGhlcmUgaWYgaW5jb21pbmcgY29uZmlnIHdhcyBydWxlIHN0b3AgYW5kIHdlIGhhZCBjb250ZXh0XG4gICAgICAgICAgICAgICAgLy8gdHJhY2sgaG93IGZhciB3ZSBkaXAgaW50byBvdXRlciBjb250ZXh0LiAgTWlnaHRcbiAgICAgICAgICAgICAgICAvLyBjb21lIGluIGhhbmR5IGFuZCB3ZSBhdm9pZCBldmFsdWF0aW5nIGNvbnRleHQgZGVwZW5kZW50XG4gICAgICAgICAgICAgICAgLy8gcHJlZHMgaWYgdGhpcyBpcyA+IDAuXG5cdFx0XHRcdGlmICh0aGlzLl9kZmEgIT09IG51bGwgJiYgdGhpcy5fZGZhLnByZWNlZGVuY2VEZmEpIHtcblx0XHRcdFx0XHRpZiAodC5vdXRlcm1vc3RQcmVjZWRlbmNlUmV0dXJuID09PSB0aGlzLl9kZmEuYXRuU3RhcnRTdGF0ZS5ydWxlSW5kZXgpIHtcblx0XHRcdFx0XHRcdGMucHJlY2VkZW5jZUZpbHRlclN1cHByZXNzZWQgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG4gICAgICAgICAgICAgICAgYy5yZWFjaGVzSW50b091dGVyQ29udGV4dCArPSAxO1xuICAgICAgICAgICAgICAgIGlmIChjbG9zdXJlQnVzeS5hZGQoYykhPT1jKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGF2b2lkIGluZmluaXRlIHJlY3Vyc2lvbiBmb3IgcmlnaHQtcmVjdXJzaXZlIHJ1bGVzXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25maWdzLmRpcHNJbnRvT3V0ZXJDb250ZXh0ID0gdHJ1ZTsgLy8gVE9ETzogY2FuIHJlbW92ZT8gb25seSBjYXJlIHdoZW4gd2UgYWRkIHRvIHNldCBwZXIgbWlkZGxlIG9mIHRoaXMgbWV0aG9kXG4gICAgICAgICAgICAgICAgbmV3RGVwdGggLT0gMTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImRpcHMgaW50byBvdXRlciBjdHg6IFwiICsgYyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoIXQuaXNFcHNpbG9uICYmIGNsb3N1cmVCdXN5LmFkZChjKSE9PWMpe1xuICAgICAgICAgICAgICAgICAgICAvLyBhdm9pZCBpbmZpbml0ZSByZWN1cnNpb24gZm9yIEVPRiogYW5kIEVPRitcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0IGluc3RhbmNlb2YgUnVsZVRyYW5zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbGF0Y2ggd2hlbiBuZXdEZXB0aCBnb2VzIG5lZ2F0aXZlIC0gb25jZSB3ZSBzdGVwIG91dCBvZiB0aGUgZW50cnkgY29udGV4dCB3ZSBjYW4ndCByZXR1cm5cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld0RlcHRoID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld0RlcHRoICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNsb3N1cmVDaGVja2luZ1N0b3BTdGF0ZShjLCBjb25maWdzLCBjbG9zdXJlQnVzeSwgY29udGludWVDb2xsZWN0aW5nLCBmdWxsQ3R4LCBuZXdEZXB0aCwgdHJlYXRFb2ZBc0Vwc2lsb24pO1xuICAgICAgICB9XG4gICAgfVxufTtcblxuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmNhbkRyb3BMb29wRW50cnlFZGdlSW5MZWZ0UmVjdXJzaXZlUnVsZSA9IGZ1bmN0aW9uKGNvbmZpZykge1xuICAgIC8vIHJldHVybiBGYWxzZVxuICAgIHZhciBwID0gY29uZmlnLnN0YXRlO1xuICAgIC8vIEZpcnN0IGNoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgaW4gU3Rhckxvb3BFbnRyeVN0YXRlIGdlbmVyYXRlZCBkdXJpbmdcbiAgICAvLyBsZWZ0LXJlY3Vyc2lvbiBlbGltaW5hdGlvbi4gRm9yIGVmZmljaWVuY3ksIGFsc28gY2hlY2sgaWZcbiAgICAvLyB0aGUgY29udGV4dCBoYXMgYW4gZW1wdHkgc3RhY2sgY2FzZS4gSWYgc28sIGl0IHdvdWxkIG1lYW5cbiAgICAvLyBnbG9iYWwgRk9MTE9XIHNvIHdlIGNhbid0IHBlcmZvcm0gb3B0aW1pemF0aW9uXG4gICAgLy8gQXJlIHdlIHRoZSBzcGVjaWFsIGxvb3AgZW50cnkvZXhpdCBzdGF0ZT8gb3IgU0xMIHdpbGRjYXJkXG4gICAgaWYocC5zdGF0ZVR5cGUgIT0gQVROU3RhdGUuU1RBUl9MT09QX0VOVFJZKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYocC5zdGF0ZVR5cGUgIT0gQVROU3RhdGUuU1RBUl9MT09QX0VOVFJZIHx8ICFwLmlzUHJlY2VkZW5jZURlY2lzaW9uIHx8XG4gICAgICAgICAgIGNvbmZpZy5jb250ZXh0LmlzRW1wdHkoKSB8fCBjb25maWcuY29udGV4dC5oYXNFbXB0eVBhdGgoKSlcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgLy8gUmVxdWlyZSBhbGwgcmV0dXJuIHN0YXRlcyB0byByZXR1cm4gYmFjayB0byB0aGUgc2FtZSBydWxlIHRoYXQgcCBpcyBpbi5cbiAgICB2YXIgbnVtQ3R4cyA9IGNvbmZpZy5jb250ZXh0Lmxlbmd0aDtcbiAgICBmb3IodmFyIGk9MDsgaTxudW1DdHhzOyBpKyspIHsgLy8gZm9yIGVhY2ggc3RhY2sgY29udGV4dFxuICAgICAgICB2YXIgcmV0dXJuU3RhdGUgPSB0aGlzLmF0bi5zdGF0ZXNbY29uZmlnLmNvbnRleHQuZ2V0UmV0dXJuU3RhdGUoaSldO1xuICAgICAgICBpZiAocmV0dXJuU3RhdGUucnVsZUluZGV4ICE9IHAucnVsZUluZGV4KVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBkZWNpc2lvblN0YXJ0U3RhdGUgPSBwLnRyYW5zaXRpb25zWzBdLnRhcmdldDtcbiAgICB2YXIgYmxvY2tFbmRTdGF0ZU51bSA9IGRlY2lzaW9uU3RhcnRTdGF0ZS5lbmRTdGF0ZS5zdGF0ZU51bWJlcjtcbiAgICB2YXIgYmxvY2tFbmRTdGF0ZSA9IHRoaXMuYXRuLnN0YXRlc1tibG9ja0VuZFN0YXRlTnVtXTtcblxuICAgIC8vIFZlcmlmeSB0aGF0IHRoZSB0b3Agb2YgZWFjaCBzdGFjayBjb250ZXh0IGxlYWRzIHRvIGxvb3AgZW50cnkvZXhpdFxuICAgIC8vIHN0YXRlIHRocm91Z2ggZXBzaWxvbiBlZGdlcyBhbmQgdy9vIGxlYXZpbmcgcnVsZS5cbiAgICBmb3IodmFyIGk9MDsgaTxudW1DdHhzOyBpKyspIHsgLy8gZm9yIGVhY2ggc3RhY2sgY29udGV4dFxuICAgICAgICB2YXIgcmV0dXJuU3RhdGVOdW1iZXIgPSBjb25maWcuY29udGV4dC5nZXRSZXR1cm5TdGF0ZShpKTtcbiAgICAgICAgdmFyIHJldHVyblN0YXRlID0gdGhpcy5hdG4uc3RhdGVzW3JldHVyblN0YXRlTnVtYmVyXTtcbiAgICAgICAgLy8gYWxsIHN0YXRlcyBtdXN0IGhhdmUgc2luZ2xlIG91dGdvaW5nIGVwc2lsb24gZWRnZVxuICAgICAgICBpZiAocmV0dXJuU3RhdGUudHJhbnNpdGlvbnMubGVuZ3RoICE9IDEgfHwgIXJldHVyblN0YXRlLnRyYW5zaXRpb25zWzBdLmlzRXBzaWxvbilcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcblxuICAgICAgICAvLyBMb29rIGZvciBwcmVmaXggb3AgY2FzZSBsaWtlICdub3QgZXhwcicsICgnIHR5cGUgJyknIGV4cHJcbiAgICAgICAgdmFyIHJldHVyblN0YXRlVGFyZ2V0ID0gcmV0dXJuU3RhdGUudHJhbnNpdGlvbnNbMF0udGFyZ2V0O1xuICAgICAgICBpZiAoIHJldHVyblN0YXRlLnN0YXRlVHlwZSA9PSBBVE5TdGF0ZS5CTE9DS19FTkQgJiYgcmV0dXJuU3RhdGVUYXJnZXQgPT0gcCApXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAvLyBMb29rIGZvciAnZXhwciBvcCBleHByJyBvciBjYXNlIHdoZXJlIGV4cHIncyByZXR1cm4gc3RhdGUgaXMgYmxvY2sgZW5kXG4gICAgICAgIC8vIG9mICguLi4pKiBpbnRlcm5hbCBibG9jazsgdGhlIGJsb2NrIGVuZCBwb2ludHMgdG8gbG9vcCBiYWNrXG4gICAgICAgIC8vIHdoaWNoIHBvaW50cyB0byBwIGJ1dCB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIHRoYXRcbiAgICAgICAgaWYgKCByZXR1cm5TdGF0ZSA9PSBibG9ja0VuZFN0YXRlIClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIC8vIExvb2sgZm9yIHRlcm5hcnkgZXhwciA/IGV4cHIgOiBleHByLiBUaGUgcmV0dXJuIHN0YXRlIHBvaW50cyBhdCBibG9jayBlbmQsXG4gICAgICAgIC8vIHdoaWNoIHBvaW50cyBhdCBsb29wIGVudHJ5IHN0YXRlXG4gICAgICAgIGlmICggcmV0dXJuU3RhdGVUYXJnZXQgPT0gYmxvY2tFbmRTdGF0ZSApXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAvLyBMb29rIGZvciBjb21wbGV4IHByZWZpeCAnYmV0d2VlbiBleHByIGFuZCBleHByJyBjYXNlIHdoZXJlIDJuZCBleHByJ3NcbiAgICAgICAgLy8gcmV0dXJuIHN0YXRlIHBvaW50cyBhdCBibG9jayBlbmQgc3RhdGUgb2YgKC4uLikqIGludGVybmFsIGJsb2NrXG4gICAgICAgIGlmIChyZXR1cm5TdGF0ZVRhcmdldC5zdGF0ZVR5cGUgPT0gQVROU3RhdGUuQkxPQ0tfRU5EICYmIHJldHVyblN0YXRlVGFyZ2V0LnRyYW5zaXRpb25zLmxlbmd0aCA9PSAxXG4gICAgICAgICAgICAgICAgJiYgcmV0dXJuU3RhdGVUYXJnZXQudHJhbnNpdGlvbnNbMF0uaXNFcHNpbG9uICYmIHJldHVyblN0YXRlVGFyZ2V0LnRyYW5zaXRpb25zWzBdLnRhcmdldCA9PSBwKVxuICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgLy8gYW55dGhpbmcgZWxzZSBhaW4ndCBjb25mb3JtaW5nXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0UnVsZU5hbWUgPSBmdW5jdGlvbiggaW5kZXgpIHtcbiAgICBpZiAodGhpcy5wYXJzZXIhPT1udWxsICYmIGluZGV4Pj0wKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlci5ydWxlTmFtZXNbaW5kZXhdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBcIjxydWxlIFwiICsgaW5kZXggKyBcIj5cIjtcbiAgICB9XG59O1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmdldEVwc2lsb25UYXJnZXQgPSBmdW5jdGlvbihjb25maWcsIHQsIGNvbGxlY3RQcmVkaWNhdGVzLCBpbkNvbnRleHQsIGZ1bGxDdHgsIHRyZWF0RW9mQXNFcHNpbG9uKSB7XG4gICAgc3dpdGNoKHQuc2VyaWFsaXphdGlvblR5cGUpIHtcbiAgICBjYXNlIFRyYW5zaXRpb24uUlVMRTpcbiAgICAgICAgcmV0dXJuIHRoaXMucnVsZVRyYW5zaXRpb24oY29uZmlnLCB0KTtcbiAgICBjYXNlIFRyYW5zaXRpb24uUFJFQ0VERU5DRTpcbiAgICAgICAgcmV0dXJuIHRoaXMucHJlY2VkZW5jZVRyYW5zaXRpb24oY29uZmlnLCB0LCBjb2xsZWN0UHJlZGljYXRlcywgaW5Db250ZXh0LCBmdWxsQ3R4KTtcbiAgICBjYXNlIFRyYW5zaXRpb24uUFJFRElDQVRFOlxuICAgICAgICByZXR1cm4gdGhpcy5wcmVkVHJhbnNpdGlvbihjb25maWcsIHQsIGNvbGxlY3RQcmVkaWNhdGVzLCBpbkNvbnRleHQsIGZ1bGxDdHgpO1xuICAgIGNhc2UgVHJhbnNpdGlvbi5BQ1RJT046XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGlvblRyYW5zaXRpb24oY29uZmlnLCB0KTtcbiAgICBjYXNlIFRyYW5zaXRpb24uRVBTSUxPTjpcbiAgICAgICAgcmV0dXJuIG5ldyBBVE5Db25maWcoe3N0YXRlOnQudGFyZ2V0fSwgY29uZmlnKTtcbiAgICBjYXNlIFRyYW5zaXRpb24uQVRPTTpcbiAgICBjYXNlIFRyYW5zaXRpb24uUkFOR0U6XG4gICAgY2FzZSBUcmFuc2l0aW9uLlNFVDpcbiAgICAgICAgLy8gRU9GIHRyYW5zaXRpb25zIGFjdCBsaWtlIGVwc2lsb24gdHJhbnNpdGlvbnMgYWZ0ZXIgdGhlIGZpcnN0IEVPRlxuICAgICAgICAvLyB0cmFuc2l0aW9uIGlzIHRyYXZlcnNlZFxuICAgICAgICBpZiAodHJlYXRFb2ZBc0Vwc2lsb24pIHtcbiAgICAgICAgICAgIGlmICh0Lm1hdGNoZXMoVG9rZW4uRU9GLCAwLCAxKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQVROQ29uZmlnKHtzdGF0ZTogdC50YXJnZXR9LCBjb25maWcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIGRlZmF1bHQ6XG4gICAgXHRyZXR1cm4gbnVsbDtcbiAgICB9XG59O1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmFjdGlvblRyYW5zaXRpb24gPSBmdW5jdGlvbihjb25maWcsIHQpIHtcbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICB2YXIgaW5kZXggPSB0LmFjdGlvbkluZGV4PT0tMSA/IDY1NTM1IDogdC5hY3Rpb25JbmRleDtcbiAgICAgICAgY29uc29sZS5sb2coXCJBQ1RJT04gZWRnZSBcIiArIHQucnVsZUluZGV4ICsgXCI6XCIgKyBpbmRleCk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQVROQ29uZmlnKHtzdGF0ZTp0LnRhcmdldH0sIGNvbmZpZyk7XG59O1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLnByZWNlZGVuY2VUcmFuc2l0aW9uID0gZnVuY3Rpb24oY29uZmlnLCBwdCwgIGNvbGxlY3RQcmVkaWNhdGVzLCBpbkNvbnRleHQsIGZ1bGxDdHgpIHtcbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhcIlBSRUQgKGNvbGxlY3RQcmVkaWNhdGVzPVwiICsgY29sbGVjdFByZWRpY2F0ZXMgKyBcIikgXCIgK1xuICAgICAgICAgICAgICAgIHB0LnByZWNlZGVuY2UgKyBcIj49X3AsIGN0eCBkZXBlbmRlbnQ9dHJ1ZVwiKTtcbiAgICAgICAgaWYgKHRoaXMucGFyc2VyIT09bnVsbCkge1xuICAgICAgICBcdGNvbnNvbGUubG9nKFwiY29udGV4dCBzdXJyb3VuZGluZyBwcmVkIGlzIFwiICsgVXRpbHMuYXJyYXlUb1N0cmluZyh0aGlzLnBhcnNlci5nZXRSdWxlSW52b2NhdGlvblN0YWNrKCkpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB2YXIgYyA9IG51bGw7XG4gICAgaWYgKGNvbGxlY3RQcmVkaWNhdGVzICYmIGluQ29udGV4dCkge1xuICAgICAgICBpZiAoZnVsbEN0eCkge1xuICAgICAgICAgICAgLy8gSW4gZnVsbCBjb250ZXh0IG1vZGUsIHdlIGNhbiBldmFsdWF0ZSBwcmVkaWNhdGVzIG9uLXRoZS1mbHlcbiAgICAgICAgICAgIC8vIGR1cmluZyBjbG9zdXJlLCB3aGljaCBkcmFtYXRpY2FsbHkgcmVkdWNlcyB0aGUgc2l6ZSBvZlxuICAgICAgICAgICAgLy8gdGhlIGNvbmZpZyBzZXRzLiBJdCBhbHNvIG9idmlhdGVzIHRoZSBuZWVkIHRvIHRlc3QgcHJlZGljYXRlc1xuICAgICAgICAgICAgLy8gbGF0ZXIgZHVyaW5nIGNvbmZsaWN0IHJlc29sdXRpb24uXG4gICAgICAgICAgICB2YXIgY3VycmVudFBvc2l0aW9uID0gdGhpcy5faW5wdXQuaW5kZXg7XG4gICAgICAgICAgICB0aGlzLl9pbnB1dC5zZWVrKHRoaXMuX3N0YXJ0SW5kZXgpO1xuICAgICAgICAgICAgdmFyIHByZWRTdWNjZWVkcyA9IHB0LmdldFByZWRpY2F0ZSgpLmV2YWx1YXRlKHRoaXMucGFyc2VyLCB0aGlzLl9vdXRlckNvbnRleHQpO1xuICAgICAgICAgICAgdGhpcy5faW5wdXQuc2VlayhjdXJyZW50UG9zaXRpb24pO1xuICAgICAgICAgICAgaWYgKHByZWRTdWNjZWVkcykge1xuICAgICAgICAgICAgICAgIGMgPSBuZXcgQVROQ29uZmlnKHtzdGF0ZTpwdC50YXJnZXR9LCBjb25maWcpOyAvLyBubyBwcmVkIGNvbnRleHRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBuZXdTZW1DdHggPSBTZW1hbnRpY0NvbnRleHQuYW5kQ29udGV4dChjb25maWcuc2VtYW50aWNDb250ZXh0LCBwdC5nZXRQcmVkaWNhdGUoKSk7XG4gICAgICAgICAgICBjID0gbmV3IEFUTkNvbmZpZyh7c3RhdGU6cHQudGFyZ2V0LCBzZW1hbnRpY0NvbnRleHQ6bmV3U2VtQ3R4fSwgY29uZmlnKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGMgPSBuZXcgQVROQ29uZmlnKHtzdGF0ZTpwdC50YXJnZXR9LCBjb25maWcpO1xuICAgIH1cbiAgICBpZiAodGhpcy5kZWJ1Zykge1xuICAgICAgICBjb25zb2xlLmxvZyhcImNvbmZpZyBmcm9tIHByZWQgdHJhbnNpdGlvbj1cIiArIGMpO1xuICAgIH1cbiAgICByZXR1cm4gYztcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucHJlZFRyYW5zaXRpb24gPSBmdW5jdGlvbihjb25maWcsIHB0LCBjb2xsZWN0UHJlZGljYXRlcywgaW5Db250ZXh0LCBmdWxsQ3R4KSB7XG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJQUkVEIChjb2xsZWN0UHJlZGljYXRlcz1cIiArIGNvbGxlY3RQcmVkaWNhdGVzICsgXCIpIFwiICsgcHQucnVsZUluZGV4ICtcbiAgICAgICAgICAgICAgICBcIjpcIiArIHB0LnByZWRJbmRleCArIFwiLCBjdHggZGVwZW5kZW50PVwiICsgcHQuaXNDdHhEZXBlbmRlbnQpO1xuICAgICAgICBpZiAodGhpcy5wYXJzZXIhPT1udWxsKSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImNvbnRleHQgc3Vycm91bmRpbmcgcHJlZCBpcyBcIiArIFV0aWxzLmFycmF5VG9TdHJpbmcodGhpcy5wYXJzZXIuZ2V0UnVsZUludm9jYXRpb25TdGFjaygpKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIGMgPSBudWxsO1xuICAgIGlmIChjb2xsZWN0UHJlZGljYXRlcyAmJiAoKHB0LmlzQ3R4RGVwZW5kZW50ICYmIGluQ29udGV4dCkgfHwgISBwdC5pc0N0eERlcGVuZGVudCkpIHtcbiAgICAgICAgaWYgKGZ1bGxDdHgpIHtcbiAgICAgICAgICAgIC8vIEluIGZ1bGwgY29udGV4dCBtb2RlLCB3ZSBjYW4gZXZhbHVhdGUgcHJlZGljYXRlcyBvbi10aGUtZmx5XG4gICAgICAgICAgICAvLyBkdXJpbmcgY2xvc3VyZSwgd2hpY2ggZHJhbWF0aWNhbGx5IHJlZHVjZXMgdGhlIHNpemUgb2ZcbiAgICAgICAgICAgIC8vIHRoZSBjb25maWcgc2V0cy4gSXQgYWxzbyBvYnZpYXRlcyB0aGUgbmVlZCB0byB0ZXN0IHByZWRpY2F0ZXNcbiAgICAgICAgICAgIC8vIGxhdGVyIGR1cmluZyBjb25mbGljdCByZXNvbHV0aW9uLlxuICAgICAgICAgICAgdmFyIGN1cnJlbnRQb3NpdGlvbiA9IHRoaXMuX2lucHV0LmluZGV4O1xuICAgICAgICAgICAgdGhpcy5faW5wdXQuc2Vlayh0aGlzLl9zdGFydEluZGV4KTtcbiAgICAgICAgICAgIHZhciBwcmVkU3VjY2VlZHMgPSBwdC5nZXRQcmVkaWNhdGUoKS5ldmFsdWF0ZSh0aGlzLnBhcnNlciwgdGhpcy5fb3V0ZXJDb250ZXh0KTtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0LnNlZWsoY3VycmVudFBvc2l0aW9uKTtcbiAgICAgICAgICAgIGlmIChwcmVkU3VjY2VlZHMpIHtcbiAgICAgICAgICAgICAgICBjID0gbmV3IEFUTkNvbmZpZyh7c3RhdGU6cHQudGFyZ2V0fSwgY29uZmlnKTsgLy8gbm8gcHJlZCBjb250ZXh0XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgbmV3U2VtQ3R4ID0gU2VtYW50aWNDb250ZXh0LmFuZENvbnRleHQoY29uZmlnLnNlbWFudGljQ29udGV4dCwgcHQuZ2V0UHJlZGljYXRlKCkpO1xuICAgICAgICAgICAgYyA9IG5ldyBBVE5Db25maWcoe3N0YXRlOnB0LnRhcmdldCwgc2VtYW50aWNDb250ZXh0Om5ld1NlbUN0eH0sIGNvbmZpZyk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBjID0gbmV3IEFUTkNvbmZpZyh7c3RhdGU6cHQudGFyZ2V0fSwgY29uZmlnKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJjb25maWcgZnJvbSBwcmVkIHRyYW5zaXRpb249XCIgKyBjKTtcbiAgICB9XG4gICAgcmV0dXJuIGM7XG59O1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLnJ1bGVUcmFuc2l0aW9uID0gZnVuY3Rpb24oY29uZmlnLCB0KSB7XG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJDQUxMIHJ1bGUgXCIgKyB0aGlzLmdldFJ1bGVOYW1lKHQudGFyZ2V0LnJ1bGVJbmRleCkgKyBcIiwgY3R4PVwiICsgY29uZmlnLmNvbnRleHQpO1xuICAgIH1cbiAgICB2YXIgcmV0dXJuU3RhdGUgPSB0LmZvbGxvd1N0YXRlO1xuICAgIHZhciBuZXdDb250ZXh0ID0gU2luZ2xldG9uUHJlZGljdGlvbkNvbnRleHQuY3JlYXRlKGNvbmZpZy5jb250ZXh0LCByZXR1cm5TdGF0ZS5zdGF0ZU51bWJlcik7XG4gICAgcmV0dXJuIG5ldyBBVE5Db25maWcoe3N0YXRlOnQudGFyZ2V0LCBjb250ZXh0Om5ld0NvbnRleHR9LCBjb25maWcgKTtcbn07XG5cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuZ2V0Q29uZmxpY3RpbmdBbHRzID0gZnVuY3Rpb24oY29uZmlncykge1xuICAgIHZhciBhbHRzZXRzID0gUHJlZGljdGlvbk1vZGUuZ2V0Q29uZmxpY3RpbmdBbHRTdWJzZXRzKGNvbmZpZ3MpO1xuICAgIHJldHVybiBQcmVkaWN0aW9uTW9kZS5nZXRBbHRzKGFsdHNldHMpO1xufTtcblxuIC8vIFNhbSBwb2ludGVkIG91dCBhIHByb2JsZW0gd2l0aCB0aGUgcHJldmlvdXMgZGVmaW5pdGlvbiwgdjMsIG9mXG4gLy8gYW1iaWd1b3VzIHN0YXRlcy4gSWYgd2UgaGF2ZSBhbm90aGVyIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCBjb25mbGljdGluZ1xuIC8vIGFsdGVybmF0aXZlcywgd2Ugc2hvdWxkIGtlZXAgZ29pbmcuIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGdyYW1tYXJcbiAvL1xuIC8vIHMgOiAoSUQgfCBJRCBJRD8pICc7JyA7XG4gLy9cbiAvLyBXaGVuIHRoZSBBVE4gc2ltdWxhdGlvbiByZWFjaGVzIHRoZSBzdGF0ZSBiZWZvcmUgJzsnLCBpdCBoYXMgYSBERkFcbiAvLyBzdGF0ZSB0aGF0IGxvb2tzIGxpa2U6IFsxMnwxfFtdLCA2fDJ8W10sIDEyfDJ8W11dLiBOYXR1cmFsbHlcbiAvLyAxMnwxfFtdIGFuZCAxMnwyfFtdIGNvbmZsaWN0LCBidXQgd2UgY2Fubm90IHN0b3AgcHJvY2Vzc2luZyB0aGlzIG5vZGVcbiAvLyBiZWNhdXNlIGFsdGVybmF0aXZlIHRvIGhhcyBhbm90aGVyIHdheSB0byBjb250aW51ZSwgdmlhIFs2fDJ8W11dLlxuIC8vIFRoZSBrZXkgaXMgdGhhdCB3ZSBoYXZlIGEgc2luZ2xlIHN0YXRlIHRoYXQgaGFzIGNvbmZpZydzIG9ubHkgYXNzb2NpYXRlZFxuIC8vIHdpdGggYSBzaW5nbGUgYWx0ZXJuYXRpdmUsIDIsIGFuZCBjcnVjaWFsbHkgdGhlIHN0YXRlIHRyYW5zaXRpb25zXG4gLy8gYW1vbmcgdGhlIGNvbmZpZ3VyYXRpb25zIGFyZSBhbGwgbm9uLWVwc2lsb24gdHJhbnNpdGlvbnMuIFRoYXQgbWVhbnNcbiAvLyB3ZSBkb24ndCBjb25zaWRlciBhbnkgY29uZmxpY3RzIHRoYXQgaW5jbHVkZSBhbHRlcm5hdGl2ZSAyLiBTbywgd2VcbiAvLyBpZ25vcmUgdGhlIGNvbmZsaWN0IGJldHdlZW4gYWx0cyAxIGFuZCAyLiBXZSBpZ25vcmUgYSBzZXQgb2ZcbiAvLyBjb25mbGljdGluZyBhbHRzIHdoZW4gdGhlcmUgaXMgYW4gaW50ZXJzZWN0aW9uIHdpdGggYW4gYWx0ZXJuYXRpdmVcbiAvLyBhc3NvY2lhdGVkIHdpdGggYSBzaW5nbGUgYWx0IHN0YXRlIGluIHRoZSBzdGF0ZSZyYXJyO2NvbmZpZy1saXN0IG1hcC5cbiAvL1xuIC8vIEl0J3MgYWxzbyB0aGUgY2FzZSB0aGF0IHdlIG1pZ2h0IGhhdmUgdHdvIGNvbmZsaWN0aW5nIGNvbmZpZ3VyYXRpb25zIGJ1dFxuIC8vIGFsc28gYSAzcmQgbm9uY29uZmxpY3RpbmcgY29uZmlndXJhdGlvbiBmb3IgYSBkaWZmZXJlbnQgYWx0ZXJuYXRpdmU6XG4gLy8gWzF8MXxbXSwgMXwyfFtdLCA4fDN8W11dLiBUaGlzIGNhbiBjb21lIGFib3V0IGZyb20gZ3JhbW1hcjpcbiAvL1xuIC8vIGEgOiBBIHwgQSB8IEEgQiA7XG4gLy9cbiAvLyBBZnRlciBtYXRjaGluZyBpbnB1dCBBLCB3ZSByZWFjaCB0aGUgc3RvcCBzdGF0ZSBmb3IgcnVsZSBBLCBzdGF0ZSAxLlxuIC8vIFN0YXRlIDggaXMgdGhlIHN0YXRlIHJpZ2h0IGJlZm9yZSBCLiBDbGVhcmx5IGFsdGVybmF0aXZlcyAxIGFuZCAyXG4gLy8gY29uZmxpY3QgYW5kIG5vIGFtb3VudCBvZiBmdXJ0aGVyIGxvb2thaGVhZCB3aWxsIHNlcGFyYXRlIHRoZSB0d28uXG4gLy8gSG93ZXZlciwgYWx0ZXJuYXRpdmUgMyB3aWxsIGJlIGFibGUgdG8gY29udGludWUgYW5kIHNvIHdlIGRvIG5vdFxuIC8vIHN0b3Agd29ya2luZyBvbiB0aGlzIHN0YXRlLiBJbiB0aGUgcHJldmlvdXMgZXhhbXBsZSwgd2UncmUgY29uY2VybmVkXG4gLy8gd2l0aCBzdGF0ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb25mbGljdGluZyBhbHRlcm5hdGl2ZXMuIEhlcmUgYWx0XG4gLy8gMyBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb25mbGljdGluZyBjb25maWdzLCBidXQgc2luY2Ugd2UgY2FuIGNvbnRpbnVlXG4gLy8gbG9va2luZyBmb3IgaW5wdXQgcmVhc29uYWJseSwgSSBkb24ndCBkZWNsYXJlIHRoZSBzdGF0ZSBkb25lLiBXZVxuIC8vIGlnbm9yZSBhIHNldCBvZiBjb25mbGljdGluZyBhbHRzIHdoZW4gd2UgaGF2ZSBhbiBhbHRlcm5hdGl2ZVxuIC8vIHRoYXQgd2Ugc3RpbGwgbmVlZCB0byBwdXJzdWUuXG4vL1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmdldENvbmZsaWN0aW5nQWx0c09yVW5pcXVlQWx0ID0gZnVuY3Rpb24oY29uZmlncykge1xuICAgIHZhciBjb25mbGljdGluZ0FsdHMgPSBudWxsO1xuICAgIGlmIChjb25maWdzLnVuaXF1ZUFsdCE9PSBBVE4uSU5WQUxJRF9BTFRfTlVNQkVSKSB7XG4gICAgICAgIGNvbmZsaWN0aW5nQWx0cyA9IG5ldyBCaXRTZXQoKTtcbiAgICAgICAgY29uZmxpY3RpbmdBbHRzLmFkZChjb25maWdzLnVuaXF1ZUFsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uZmxpY3RpbmdBbHRzID0gY29uZmlncy5jb25mbGljdGluZ0FsdHM7XG4gICAgfVxuICAgIHJldHVybiBjb25mbGljdGluZ0FsdHM7XG59O1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmdldFRva2VuTmFtZSA9IGZ1bmN0aW9uKCB0KSB7XG4gICAgaWYgKHQ9PT1Ub2tlbi5FT0YpIHtcbiAgICAgICAgcmV0dXJuIFwiRU9GXCI7XG4gICAgfVxuICAgIGlmKCB0aGlzLnBhcnNlciE9PW51bGwgJiYgdGhpcy5wYXJzZXIubGl0ZXJhbE5hbWVzIT09bnVsbCkge1xuICAgICAgICBpZiAodCA+PSB0aGlzLnBhcnNlci5saXRlcmFsTmFtZXMubGVuZ3RoICYmIHQgPj0gdGhpcy5wYXJzZXIuc3ltYm9saWNOYW1lcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiXCIgKyB0ICsgXCIgdHR5cGUgb3V0IG9mIHJhbmdlOiBcIiArIHRoaXMucGFyc2VyLmxpdGVyYWxOYW1lcyk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlwiICsgdGhpcy5wYXJzZXIuZ2V0SW5wdXRTdHJlYW0oKS5nZXRUb2tlbnMoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgbmFtZSA9IHRoaXMucGFyc2VyLmxpdGVyYWxOYW1lc1t0XSB8fCB0aGlzLnBhcnNlci5zeW1ib2xpY05hbWVzW3RdO1xuICAgICAgICAgICAgcmV0dXJuIG5hbWUgKyBcIjxcIiArIHQgKyBcIj5cIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gXCJcIiArIHQ7XG59O1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmdldExvb2thaGVhZE5hbWUgPSBmdW5jdGlvbihpbnB1dCkge1xuICAgIHJldHVybiB0aGlzLmdldFRva2VuTmFtZShpbnB1dC5MQSgxKSk7XG59O1xuXG4vLyBVc2VkIGZvciBkZWJ1Z2dpbmcgaW4gYWRhcHRpdmVQcmVkaWN0IGFyb3VuZCBleGVjQVROIGJ1dCBJIGN1dFxuLy8gIGl0IG91dCBmb3IgY2xhcml0eSBub3cgdGhhdCBhbGcuIHdvcmtzIHdlbGwuIFdlIGNhbiBsZWF2ZSB0aGlzXG4vLyAgXCJkZWFkXCIgY29kZSBmb3IgYSBiaXQuXG4vL1xuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5kdW1wRGVhZEVuZENvbmZpZ3MgPSBmdW5jdGlvbihudmFlKSB7XG4gICAgY29uc29sZS5sb2coXCJkZWFkIGVuZCBjb25maWdzOiBcIik7XG4gICAgdmFyIGRlY3MgPSBudmFlLmdldERlYWRFbmRDb25maWdzKCk7XG4gICAgZm9yKHZhciBpPTA7IGk8ZGVjcy5sZW5ndGg7IGkrKykge1xuICAgIFx0dmFyIGMgPSBkZWNzW2ldO1xuICAgICAgICB2YXIgdHJhbnMgPSBcIm5vIGVkZ2VzXCI7XG4gICAgICAgIGlmIChjLnN0YXRlLnRyYW5zaXRpb25zLmxlbmd0aD4wKSB7XG4gICAgICAgICAgICB2YXIgdCA9IGMuc3RhdGUudHJhbnNpdGlvbnNbMF07XG4gICAgICAgICAgICBpZiAodCBpbnN0YW5jZW9mIEF0b21UcmFuc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgdHJhbnMgPSBcIkF0b20gXCIrIHRoaXMuZ2V0VG9rZW5OYW1lKHQubGFiZWwpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0IGluc3RhbmNlb2YgU2V0VHJhbnNpdGlvbikge1xuICAgICAgICAgICAgICAgIHZhciBuZWcgPSAodCBpbnN0YW5jZW9mIE5vdFNldFRyYW5zaXRpb24pO1xuICAgICAgICAgICAgICAgIHRyYW5zID0gKG5lZyA/IFwiflwiIDogXCJcIikgKyBcIlNldCBcIiArIHQuc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYy50b1N0cmluZyh0aGlzLnBhcnNlciwgdHJ1ZSkgKyBcIjpcIiArIHRyYW5zKTtcbiAgICB9XG59O1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLm5vVmlhYmxlQWx0ID0gZnVuY3Rpb24oaW5wdXQsIG91dGVyQ29udGV4dCwgY29uZmlncywgc3RhcnRJbmRleCkge1xuICAgIHJldHVybiBuZXcgTm9WaWFibGVBbHRFeGNlcHRpb24odGhpcy5wYXJzZXIsIGlucHV0LCBpbnB1dC5nZXQoc3RhcnRJbmRleCksIGlucHV0LkxUKDEpLCBjb25maWdzLCBvdXRlckNvbnRleHQpO1xufTtcblxuUGFyc2VyQVROU2ltdWxhdG9yLnByb3RvdHlwZS5nZXRVbmlxdWVBbHQgPSBmdW5jdGlvbihjb25maWdzKSB7XG4gICAgdmFyIGFsdCA9IEFUTi5JTlZBTElEX0FMVF9OVU1CRVI7XG4gICAgZm9yKHZhciBpPTA7aTxjb25maWdzLml0ZW1zLmxlbmd0aDtpKyspIHtcbiAgICBcdHZhciBjID0gY29uZmlncy5pdGVtc1tpXTtcbiAgICAgICAgaWYgKGFsdCA9PT0gQVROLklOVkFMSURfQUxUX05VTUJFUikge1xuICAgICAgICAgICAgYWx0ID0gYy5hbHQgLy8gZm91bmQgZmlyc3QgYWx0XG4gICAgICAgIH0gZWxzZSBpZiggYy5hbHQhPT1hbHQpIHtcbiAgICAgICAgICAgIHJldHVybiBBVE4uSU5WQUxJRF9BTFRfTlVNQkVSO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhbHQ7XG59O1xuXG4vL1xuLy8gQWRkIGFuIGVkZ2UgdG8gdGhlIERGQSwgaWYgcG9zc2libGUuIFRoaXMgbWV0aG9kIGNhbGxzXG4vLyB7QGxpbmsgLy9hZGRERkFTdGF0ZX0gdG8gZW5zdXJlIHRoZSB7QGNvZGUgdG99IHN0YXRlIGlzIHByZXNlbnQgaW4gdGhlXG4vLyBERkEuIElmIHtAY29kZSBmcm9tfSBpcyB7QGNvZGUgbnVsbH0sIG9yIGlmIHtAY29kZSB0fSBpcyBvdXRzaWRlIHRoZVxuLy8gcmFuZ2Ugb2YgZWRnZXMgdGhhdCBjYW4gYmUgcmVwcmVzZW50ZWQgaW4gdGhlIERGQSB0YWJsZXMsIHRoaXMgbWV0aG9kXG4vLyByZXR1cm5zIHdpdGhvdXQgYWRkaW5nIHRoZSBlZGdlIHRvIHRoZSBERkEuXG4vL1xuLy8gPHA+SWYge0Bjb2RlIHRvfSBpcyB7QGNvZGUgbnVsbH0sIHRoaXMgbWV0aG9kIHJldHVybnMge0Bjb2RlIG51bGx9LlxuLy8gT3RoZXJ3aXNlLCB0aGlzIG1ldGhvZCByZXR1cm5zIHRoZSB7QGxpbmsgREZBU3RhdGV9IHJldHVybmVkIGJ5IGNhbGxpbmdcbi8vIHtAbGluayAvL2FkZERGQVN0YXRlfSBmb3IgdGhlIHtAY29kZSB0b30gc3RhdGUuPC9wPlxuLy9cbi8vIEBwYXJhbSBkZmEgVGhlIERGQVxuLy8gQHBhcmFtIGZyb20gVGhlIHNvdXJjZSBzdGF0ZSBmb3IgdGhlIGVkZ2Vcbi8vIEBwYXJhbSB0IFRoZSBpbnB1dCBzeW1ib2xcbi8vIEBwYXJhbSB0byBUaGUgdGFyZ2V0IHN0YXRlIGZvciB0aGUgZWRnZVxuLy9cbi8vIEByZXR1cm4gSWYge0Bjb2RlIHRvfSBpcyB7QGNvZGUgbnVsbH0sIHRoaXMgbWV0aG9kIHJldHVybnMge0Bjb2RlIG51bGx9O1xuLy8gb3RoZXJ3aXNlIHRoaXMgbWV0aG9kIHJldHVybnMgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHtAbGluayAvL2FkZERGQVN0YXRlfVxuLy8gb24ge0Bjb2RlIHRvfVxuLy9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUuYWRkREZBRWRnZSA9IGZ1bmN0aW9uKGRmYSwgZnJvbV8sIHQsIHRvKSB7XG4gICAgaWYoIHRoaXMuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJFREdFIFwiICsgZnJvbV8gKyBcIiAtPiBcIiArIHRvICsgXCIgdXBvbiBcIiArIHRoaXMuZ2V0VG9rZW5OYW1lKHQpKTtcbiAgICB9XG4gICAgaWYgKHRvPT09bnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdG8gPSB0aGlzLmFkZERGQVN0YXRlKGRmYSwgdG8pOyAvLyB1c2VkIGV4aXN0aW5nIGlmIHBvc3NpYmxlIG5vdCBpbmNvbWluZ1xuICAgIGlmIChmcm9tXz09PW51bGwgfHwgdCA8IC0xIHx8IHQgPiB0aGlzLmF0bi5tYXhUb2tlblR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHRvO1xuICAgIH1cbiAgICBpZiAoZnJvbV8uZWRnZXM9PT1udWxsKSB7XG4gICAgICAgIGZyb21fLmVkZ2VzID0gW107XG4gICAgfVxuICAgIGZyb21fLmVkZ2VzW3QrMV0gPSB0bzsgLy8gY29ubmVjdFxuXG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgdmFyIGxpdGVyYWxOYW1lcyA9IHRoaXMucGFyc2VyPT09bnVsbCA/IG51bGwgOiB0aGlzLnBhcnNlci5saXRlcmFsTmFtZXM7XG4gICAgICAgIHZhciBzeW1ib2xpY05hbWVzID0gdGhpcy5wYXJzZXI9PT1udWxsID8gbnVsbCA6IHRoaXMucGFyc2VyLnN5bWJvbGljTmFtZXM7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiREZBPVxcblwiICsgZGZhLnRvU3RyaW5nKGxpdGVyYWxOYW1lcywgc3ltYm9saWNOYW1lcykpO1xuICAgIH1cbiAgICByZXR1cm4gdG87XG59O1xuLy9cbi8vIEFkZCBzdGF0ZSB7QGNvZGUgRH0gdG8gdGhlIERGQSBpZiBpdCBpcyBub3QgYWxyZWFkeSBwcmVzZW50LCBhbmQgcmV0dXJuXG4vLyB0aGUgYWN0dWFsIGluc3RhbmNlIHN0b3JlZCBpbiB0aGUgREZBLiBJZiBhIHN0YXRlIGVxdWl2YWxlbnQgdG8ge0Bjb2RlIER9XG4vLyBpcyBhbHJlYWR5IGluIHRoZSBERkEsIHRoZSBleGlzdGluZyBzdGF0ZSBpcyByZXR1cm5lZC4gT3RoZXJ3aXNlIHRoaXNcbi8vIG1ldGhvZCByZXR1cm5zIHtAY29kZSBEfSBhZnRlciBhZGRpbmcgaXQgdG8gdGhlIERGQS5cbi8vXG4vLyA8cD5JZiB7QGNvZGUgRH0gaXMge0BsaW5rIC8vRVJST1J9LCB0aGlzIG1ldGhvZCByZXR1cm5zIHtAbGluayAvL0VSUk9SfSBhbmRcbi8vIGRvZXMgbm90IGNoYW5nZSB0aGUgREZBLjwvcD5cbi8vXG4vLyBAcGFyYW0gZGZhIFRoZSBkZmFcbi8vIEBwYXJhbSBEIFRoZSBERkEgc3RhdGUgdG8gYWRkXG4vLyBAcmV0dXJuIFRoZSBzdGF0ZSBzdG9yZWQgaW4gdGhlIERGQS4gVGhpcyB3aWxsIGJlIGVpdGhlciB0aGUgZXhpc3Rpbmdcbi8vIHN0YXRlIGlmIHtAY29kZSBEfSBpcyBhbHJlYWR5IGluIHRoZSBERkEsIG9yIHtAY29kZSBEfSBpdHNlbGYgaWYgdGhlXG4vLyBzdGF0ZSB3YXMgbm90IGFscmVhZHkgcHJlc2VudC5cbi8vXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLmFkZERGQVN0YXRlID0gZnVuY3Rpb24oZGZhLCBEKSB7XG4gICAgaWYgKEQgPT0gQVROU2ltdWxhdG9yLkVSUk9SKSB7XG4gICAgICAgIHJldHVybiBEO1xuICAgIH1cbiAgICB2YXIgZXhpc3RpbmcgPSBkZmEuc3RhdGVzLmdldChEKTtcbiAgICBpZihleGlzdGluZyE9PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cbiAgICBELnN0YXRlTnVtYmVyID0gZGZhLnN0YXRlcy5sZW5ndGg7XG4gICAgaWYgKCEgRC5jb25maWdzLnJlYWRPbmx5KSB7XG4gICAgICAgIEQuY29uZmlncy5vcHRpbWl6ZUNvbmZpZ3ModGhpcyk7XG4gICAgICAgIEQuY29uZmlncy5zZXRSZWFkb25seSh0cnVlKTtcbiAgICB9XG4gICAgZGZhLnN0YXRlcy5hZGQoRCk7XG4gICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJhZGRpbmcgbmV3IERGQSBzdGF0ZTogXCIgKyBEKTtcbiAgICB9XG4gICAgcmV0dXJuIEQ7XG59O1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLnJlcG9ydEF0dGVtcHRpbmdGdWxsQ29udGV4dCA9IGZ1bmN0aW9uKGRmYSwgY29uZmxpY3RpbmdBbHRzLCBjb25maWdzLCBzdGFydEluZGV4LCBzdG9wSW5kZXgpIHtcbiAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLnJldHJ5X2RlYnVnKSB7XG4gICAgICAgIHZhciBpbnRlcnZhbCA9IG5ldyBJbnRlcnZhbChzdGFydEluZGV4LCBzdG9wSW5kZXggKyAxKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJyZXBvcnRBdHRlbXB0aW5nRnVsbENvbnRleHQgZGVjaXNpb249XCIgKyBkZmEuZGVjaXNpb24gKyBcIjpcIiArIGNvbmZpZ3MgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIsIGlucHV0PVwiICsgdGhpcy5wYXJzZXIuZ2V0VG9rZW5TdHJlYW0oKS5nZXRUZXh0KGludGVydmFsKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnBhcnNlciE9PW51bGwpIHtcbiAgICAgICAgdGhpcy5wYXJzZXIuZ2V0RXJyb3JMaXN0ZW5lckRpc3BhdGNoKCkucmVwb3J0QXR0ZW1wdGluZ0Z1bGxDb250ZXh0KHRoaXMucGFyc2VyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgY29uZmxpY3RpbmdBbHRzLCBjb25maWdzKTtcbiAgICB9XG59O1xuXG5QYXJzZXJBVE5TaW11bGF0b3IucHJvdG90eXBlLnJlcG9ydENvbnRleHRTZW5zaXRpdml0eSA9IGZ1bmN0aW9uKGRmYSwgcHJlZGljdGlvbiwgY29uZmlncywgc3RhcnRJbmRleCwgc3RvcEluZGV4KSB7XG4gICAgaWYgKHRoaXMuZGVidWcgfHwgdGhpcy5yZXRyeV9kZWJ1Zykge1xuICAgICAgICB2YXIgaW50ZXJ2YWwgPSBuZXcgSW50ZXJ2YWwoc3RhcnRJbmRleCwgc3RvcEluZGV4ICsgMSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFwicmVwb3J0Q29udGV4dFNlbnNpdGl2aXR5IGRlY2lzaW9uPVwiICsgZGZhLmRlY2lzaW9uICsgXCI6XCIgKyBjb25maWdzICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiLCBpbnB1dD1cIiArIHRoaXMucGFyc2VyLmdldFRva2VuU3RyZWFtKCkuZ2V0VGV4dChpbnRlcnZhbCkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5wYXJzZXIhPT1udWxsKSB7XG4gICAgICAgIHRoaXMucGFyc2VyLmdldEVycm9yTGlzdGVuZXJEaXNwYXRjaCgpLnJlcG9ydENvbnRleHRTZW5zaXRpdml0eSh0aGlzLnBhcnNlciwgZGZhLCBzdGFydEluZGV4LCBzdG9wSW5kZXgsIHByZWRpY3Rpb24sIGNvbmZpZ3MpO1xuICAgIH1cbn07XG5cbi8vIElmIGNvbnRleHQgc2Vuc2l0aXZlIHBhcnNpbmcsIHdlIGtub3cgaXQncyBhbWJpZ3VpdHkgbm90IGNvbmZsaWN0Ly9cblBhcnNlckFUTlNpbXVsYXRvci5wcm90b3R5cGUucmVwb3J0QW1iaWd1aXR5ID0gZnVuY3Rpb24oZGZhLCBELCBzdGFydEluZGV4LCBzdG9wSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3QsIGFtYmlnQWx0cywgY29uZmlncyApIHtcbiAgICBpZiAodGhpcy5kZWJ1ZyB8fCB0aGlzLnJldHJ5X2RlYnVnKSB7XG4gICAgICAgIHZhciBpbnRlcnZhbCA9IG5ldyBJbnRlcnZhbChzdGFydEluZGV4LCBzdG9wSW5kZXggKyAxKTtcbiAgICAgICAgY29uc29sZS5sb2coXCJyZXBvcnRBbWJpZ3VpdHkgXCIgKyBhbWJpZ0FsdHMgKyBcIjpcIiArIGNvbmZpZ3MgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgXCIsIGlucHV0PVwiICsgdGhpcy5wYXJzZXIuZ2V0VG9rZW5TdHJlYW0oKS5nZXRUZXh0KGludGVydmFsKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLnBhcnNlciE9PW51bGwpIHtcbiAgICAgICAgdGhpcy5wYXJzZXIuZ2V0RXJyb3JMaXN0ZW5lckRpc3BhdGNoKCkucmVwb3J0QW1iaWd1aXR5KHRoaXMucGFyc2VyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgZXhhY3QsIGFtYmlnQWx0cywgY29uZmlncyk7XG4gICAgfVxufTtcblxuZXhwb3J0cy5QYXJzZXJBVE5TaW11bGF0b3IgPSBQYXJzZXJBVE5TaW11bGF0b3I7IiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbi8vXG4vL1xuLy8gVGhpcyBlbnVtZXJhdGlvbiBkZWZpbmVzIHRoZSBwcmVkaWN0aW9uIG1vZGVzIGF2YWlsYWJsZSBpbiBBTlRMUiA0IGFsb25nIHdpdGhcbi8vIHV0aWxpdHkgbWV0aG9kcyBmb3IgYW5hbHl6aW5nIGNvbmZpZ3VyYXRpb24gc2V0cyBmb3IgY29uZmxpY3RzIGFuZC9vclxuLy8gYW1iaWd1aXRpZXMuXG5cbnZhciBTZXQgPSByZXF1aXJlKCcuLy4uL1V0aWxzJykuU2V0O1xudmFyIE1hcCA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKS5NYXA7XG52YXIgQml0U2V0ID0gcmVxdWlyZSgnLi8uLi9VdGlscycpLkJpdFNldDtcbnZhciBBbHREaWN0ID0gcmVxdWlyZSgnLi8uLi9VdGlscycpLkFsdERpY3Q7XG52YXIgQVROID0gcmVxdWlyZSgnLi9BVE4nKS5BVE47XG52YXIgUnVsZVN0b3BTdGF0ZSA9IHJlcXVpcmUoJy4vQVROU3RhdGUnKS5SdWxlU3RvcFN0YXRlO1xudmFyIEFUTkNvbmZpZ1NldCA9IHJlcXVpcmUoJy4vQVROQ29uZmlnU2V0JykuQVROQ29uZmlnU2V0O1xudmFyIEFUTkNvbmZpZyA9IHJlcXVpcmUoJy4vQVROQ29uZmlnJykuQVROQ29uZmlnO1xudmFyIFNlbWFudGljQ29udGV4dCA9IHJlcXVpcmUoJy4vU2VtYW50aWNDb250ZXh0JykuU2VtYW50aWNDb250ZXh0O1xudmFyIEhhc2ggPSByZXF1aXJlKFwiLi4vVXRpbHNcIikuSGFzaDtcbnZhciBoYXNoU3R1ZmYgPSByZXF1aXJlKCcuLy4uL1V0aWxzJykuaGFzaFN0dWZmO1xudmFyIGVxdWFsQXJyYXlzID0gcmVxdWlyZSgnLi8uLi9VdGlscycpLmVxdWFsQXJyYXlzO1xuXG5mdW5jdGlvbiBQcmVkaWN0aW9uTW9kZSgpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cbi8vXG4vLyBUaGUgU0xMKCopIHByZWRpY3Rpb24gbW9kZS4gVGhpcyBwcmVkaWN0aW9uIG1vZGUgaWdub3JlcyB0aGUgY3VycmVudFxuLy8gcGFyc2VyIGNvbnRleHQgd2hlbiBtYWtpbmcgcHJlZGljdGlvbnMuIFRoaXMgaXMgdGhlIGZhc3Rlc3QgcHJlZGljdGlvblxuLy8gbW9kZSwgYW5kIHByb3ZpZGVzIGNvcnJlY3QgcmVzdWx0cyBmb3IgbWFueSBncmFtbWFycy4gVGhpcyBwcmVkaWN0aW9uXG4vLyBtb2RlIGlzIG1vcmUgcG93ZXJmdWwgdGhhbiB0aGUgcHJlZGljdGlvbiBtb2RlIHByb3ZpZGVkIGJ5IEFOVExSIDMsIGJ1dFxuLy8gbWF5IHJlc3VsdCBpbiBzeW50YXggZXJyb3JzIGZvciBncmFtbWFyIGFuZCBpbnB1dCBjb21iaW5hdGlvbnMgd2hpY2ggYXJlXG4vLyBub3QgU0xMLlxuLy9cbi8vIDxwPlxuLy8gV2hlbiB1c2luZyB0aGlzIHByZWRpY3Rpb24gbW9kZSwgdGhlIHBhcnNlciB3aWxsIGVpdGhlciByZXR1cm4gYSBjb3JyZWN0XG4vLyBwYXJzZSB0cmVlIChpLmUuIHRoZSBzYW1lIHBhcnNlIHRyZWUgdGhhdCB3b3VsZCBiZSByZXR1cm5lZCB3aXRoIHRoZVxuLy8ge0BsaW5rIC8vTEx9IHByZWRpY3Rpb24gbW9kZSksIG9yIGl0IHdpbGwgcmVwb3J0IGEgc3ludGF4IGVycm9yLiBJZiBhXG4vLyBzeW50YXggZXJyb3IgaXMgZW5jb3VudGVyZWQgd2hlbiB1c2luZyB0aGUge0BsaW5rIC8vU0xMfSBwcmVkaWN0aW9uIG1vZGUsXG4vLyBpdCBtYXkgYmUgZHVlIHRvIGVpdGhlciBhbiBhY3R1YWwgc3ludGF4IGVycm9yIGluIHRoZSBpbnB1dCBvciBpbmRpY2F0ZVxuLy8gdGhhdCB0aGUgcGFydGljdWxhciBjb21iaW5hdGlvbiBvZiBncmFtbWFyIGFuZCBpbnB1dCByZXF1aXJlcyB0aGUgbW9yZVxuLy8gcG93ZXJmdWwge0BsaW5rIC8vTEx9IHByZWRpY3Rpb24gYWJpbGl0aWVzIHRvIGNvbXBsZXRlIHN1Y2Nlc3NmdWxseS48L3A+XG4vL1xuLy8gPHA+XG4vLyBUaGlzIHByZWRpY3Rpb24gbW9kZSBkb2VzIG5vdCBwcm92aWRlIGFueSBndWFyYW50ZWVzIGZvciBwcmVkaWN0aW9uXG4vLyBiZWhhdmlvciBmb3Igc3ludGFjdGljYWxseS1pbmNvcnJlY3QgaW5wdXRzLjwvcD5cbi8vXG5QcmVkaWN0aW9uTW9kZS5TTEwgPSAwO1xuLy9cbi8vIFRoZSBMTCgqKSBwcmVkaWN0aW9uIG1vZGUuIFRoaXMgcHJlZGljdGlvbiBtb2RlIGFsbG93cyB0aGUgY3VycmVudCBwYXJzZXJcbi8vIGNvbnRleHQgdG8gYmUgdXNlZCBmb3IgcmVzb2x2aW5nIFNMTCBjb25mbGljdHMgdGhhdCBvY2N1ciBkdXJpbmdcbi8vIHByZWRpY3Rpb24uIFRoaXMgaXMgdGhlIGZhc3Rlc3QgcHJlZGljdGlvbiBtb2RlIHRoYXQgZ3VhcmFudGVlcyBjb3JyZWN0XG4vLyBwYXJzZSByZXN1bHRzIGZvciBhbGwgY29tYmluYXRpb25zIG9mIGdyYW1tYXJzIHdpdGggc3ludGFjdGljYWxseSBjb3JyZWN0XG4vLyBpbnB1dHMuXG4vL1xuLy8gPHA+XG4vLyBXaGVuIHVzaW5nIHRoaXMgcHJlZGljdGlvbiBtb2RlLCB0aGUgcGFyc2VyIHdpbGwgbWFrZSBjb3JyZWN0IGRlY2lzaW9uc1xuLy8gZm9yIGFsbCBzeW50YWN0aWNhbGx5LWNvcnJlY3QgZ3JhbW1hciBhbmQgaW5wdXQgY29tYmluYXRpb25zLiBIb3dldmVyLCBpblxuLy8gY2FzZXMgd2hlcmUgdGhlIGdyYW1tYXIgaXMgdHJ1bHkgYW1iaWd1b3VzIHRoaXMgcHJlZGljdGlvbiBtb2RlIG1pZ2h0IG5vdFxuLy8gcmVwb3J0IGEgcHJlY2lzZSBhbnN3ZXIgZm9yIDxlbT5leGFjdGx5IHdoaWNoPC9lbT4gYWx0ZXJuYXRpdmVzIGFyZVxuLy8gYW1iaWd1b3VzLjwvcD5cbi8vXG4vLyA8cD5cbi8vIFRoaXMgcHJlZGljdGlvbiBtb2RlIGRvZXMgbm90IHByb3ZpZGUgYW55IGd1YXJhbnRlZXMgZm9yIHByZWRpY3Rpb25cbi8vIGJlaGF2aW9yIGZvciBzeW50YWN0aWNhbGx5LWluY29ycmVjdCBpbnB1dHMuPC9wPlxuLy9cblByZWRpY3Rpb25Nb2RlLkxMID0gMTtcbi8vXG4vLyBUaGUgTEwoKikgcHJlZGljdGlvbiBtb2RlIHdpdGggZXhhY3QgYW1iaWd1aXR5IGRldGVjdGlvbi4gSW4gYWRkaXRpb24gdG9cbi8vIHRoZSBjb3JyZWN0bmVzcyBndWFyYW50ZWVzIHByb3ZpZGVkIGJ5IHRoZSB7QGxpbmsgLy9MTH0gcHJlZGljdGlvbiBtb2RlLFxuLy8gdGhpcyBwcmVkaWN0aW9uIG1vZGUgaW5zdHJ1Y3RzIHRoZSBwcmVkaWN0aW9uIGFsZ29yaXRobSB0byBkZXRlcm1pbmUgdGhlXG4vLyBjb21wbGV0ZSBhbmQgZXhhY3Qgc2V0IG9mIGFtYmlndW91cyBhbHRlcm5hdGl2ZXMgZm9yIGV2ZXJ5IGFtYmlndW91c1xuLy8gZGVjaXNpb24gZW5jb3VudGVyZWQgd2hpbGUgcGFyc2luZy5cbi8vXG4vLyA8cD5cbi8vIFRoaXMgcHJlZGljdGlvbiBtb2RlIG1heSBiZSB1c2VkIGZvciBkaWFnbm9zaW5nIGFtYmlndWl0aWVzIGR1cmluZ1xuLy8gZ3JhbW1hciBkZXZlbG9wbWVudC4gRHVlIHRvIHRoZSBwZXJmb3JtYW5jZSBvdmVyaGVhZCBvZiBjYWxjdWxhdGluZyBzZXRzXG4vLyBvZiBhbWJpZ3VvdXMgYWx0ZXJuYXRpdmVzLCB0aGlzIHByZWRpY3Rpb24gbW9kZSBzaG91bGQgYmUgYXZvaWRlZCB3aGVuXG4vLyB0aGUgZXhhY3QgcmVzdWx0cyBhcmUgbm90IG5lY2Vzc2FyeS48L3A+XG4vL1xuLy8gPHA+XG4vLyBUaGlzIHByZWRpY3Rpb24gbW9kZSBkb2VzIG5vdCBwcm92aWRlIGFueSBndWFyYW50ZWVzIGZvciBwcmVkaWN0aW9uXG4vLyBiZWhhdmlvciBmb3Igc3ludGFjdGljYWxseS1pbmNvcnJlY3QgaW5wdXRzLjwvcD5cbi8vXG5QcmVkaWN0aW9uTW9kZS5MTF9FWEFDVF9BTUJJR19ERVRFQ1RJT04gPSAyO1xuXG5cbi8vXG4vLyBDb21wdXRlcyB0aGUgU0xMIHByZWRpY3Rpb24gdGVybWluYXRpb24gY29uZGl0aW9uLlxuLy9cbi8vIDxwPlxuLy8gVGhpcyBtZXRob2QgY29tcHV0ZXMgdGhlIFNMTCBwcmVkaWN0aW9uIHRlcm1pbmF0aW9uIGNvbmRpdGlvbiBmb3IgYm90aCBvZlxuLy8gdGhlIGZvbGxvd2luZyBjYXNlcy48L3A+XG4vL1xuLy8gPHVsPlxuLy8gPGxpPlRoZSB1c3VhbCBTTEwrTEwgZmFsbGJhY2sgdXBvbiBTTEwgY29uZmxpY3Q8L2xpPlxuLy8gPGxpPlB1cmUgU0xMIHdpdGhvdXQgTEwgZmFsbGJhY2s8L2xpPlxuLy8gPC91bD5cbi8vXG4vLyA8cD48c3Ryb25nPkNPTUJJTkVEIFNMTCtMTCBQQVJTSU5HPC9zdHJvbmc+PC9wPlxuLy9cbi8vIDxwPldoZW4gTEwtZmFsbGJhY2sgaXMgZW5hYmxlZCB1cG9uIFNMTCBjb25mbGljdCwgY29ycmVjdCBwcmVkaWN0aW9ucyBhcmVcbi8vIGVuc3VyZWQgcmVnYXJkbGVzcyBvZiBob3cgdGhlIHRlcm1pbmF0aW9uIGNvbmRpdGlvbiBpcyBjb21wdXRlZCBieSB0aGlzXG4vLyBtZXRob2QuIER1ZSB0byB0aGUgc3Vic3RhbnRpYWxseSBoaWdoZXIgY29zdCBvZiBMTCBwcmVkaWN0aW9uLCB0aGVcbi8vIHByZWRpY3Rpb24gc2hvdWxkIG9ubHkgZmFsbCBiYWNrIHRvIExMIHdoZW4gdGhlIGFkZGl0aW9uYWwgbG9va2FoZWFkXG4vLyBjYW5ub3QgbGVhZCB0byBhIHVuaXF1ZSBTTEwgcHJlZGljdGlvbi48L3A+XG4vL1xuLy8gPHA+QXNzdW1pbmcgY29tYmluZWQgU0xMK0xMIHBhcnNpbmcsIGFuIFNMTCBjb25maWd1cmF0aW9uIHNldCB3aXRoIG9ubHlcbi8vIGNvbmZsaWN0aW5nIHN1YnNldHMgc2hvdWxkIGZhbGwgYmFjayB0byBmdWxsIExMLCBldmVuIGlmIHRoZVxuLy8gY29uZmlndXJhdGlvbiBzZXRzIGRvbid0IHJlc29sdmUgdG8gdGhlIHNhbWUgYWx0ZXJuYXRpdmUgKGUuZy5cbi8vIHtAY29kZSB7MSwyfX0gYW5kIHtAY29kZSB7Myw0fX0uIElmIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBub24tY29uZmxpY3Rpbmdcbi8vIGNvbmZpZ3VyYXRpb24sIFNMTCBjb3VsZCBjb250aW51ZSB3aXRoIHRoZSBob3BlcyB0aGF0IG1vcmUgbG9va2FoZWFkIHdpbGxcbi8vIHJlc29sdmUgdmlhIG9uZSBvZiB0aG9zZSBub24tY29uZmxpY3RpbmcgY29uZmlndXJhdGlvbnMuPC9wPlxuLy9cbi8vIDxwPkhlcmUncyB0aGUgcHJlZGljdGlvbiB0ZXJtaW5hdGlvbiBydWxlIHRoZW06IFNMTCAoZm9yIFNMTCtMTCBwYXJzaW5nKVxuLy8gc3RvcHMgd2hlbiBpdCBzZWVzIG9ubHkgY29uZmxpY3RpbmcgY29uZmlndXJhdGlvbiBzdWJzZXRzLiBJbiBjb250cmFzdCxcbi8vIGZ1bGwgTEwga2VlcHMgZ29pbmcgd2hlbiB0aGVyZSBpcyB1bmNlcnRhaW50eS48L3A+XG4vL1xuLy8gPHA+PHN0cm9uZz5IRVVSSVNUSUM8L3N0cm9uZz48L3A+XG4vL1xuLy8gPHA+QXMgYSBoZXVyaXN0aWMsIHdlIHN0b3AgcHJlZGljdGlvbiB3aGVuIHdlIHNlZSBhbnkgY29uZmxpY3Rpbmcgc3Vic2V0XG4vLyB1bmxlc3Mgd2Ugc2VlIGEgc3RhdGUgdGhhdCBvbmx5IGhhcyBvbmUgYWx0ZXJuYXRpdmUgYXNzb2NpYXRlZCB3aXRoIGl0LlxuLy8gVGhlIHNpbmdsZS1hbHQtc3RhdGUgdGhpbmcgbGV0cyBwcmVkaWN0aW9uIGNvbnRpbnVlIHVwb24gcnVsZXMgbGlrZVxuLy8gKG90aGVyd2lzZSwgaXQgd291bGQgYWRtaXQgZGVmZWF0IHRvbyBzb29uKTo8L3A+XG4vL1xuLy8gPHA+e0Bjb2RlIFsxMnwxfFtdLCA2fDJ8W10sIDEyfDJ8W11dLiBzIDogKElEIHwgSUQgSUQ/KSAnOycgO308L3A+XG4vL1xuLy8gPHA+V2hlbiB0aGUgQVROIHNpbXVsYXRpb24gcmVhY2hlcyB0aGUgc3RhdGUgYmVmb3JlIHtAY29kZSAnOyd9LCBpdCBoYXMgYVxuLy8gREZBIHN0YXRlIHRoYXQgbG9va3MgbGlrZToge0Bjb2RlIFsxMnwxfFtdLCA2fDJ8W10sIDEyfDJ8W11dfS4gTmF0dXJhbGx5XG4vLyB7QGNvZGUgMTJ8MXxbXX0gYW5kIHtAY29kZSAxMnwyfFtdfSBjb25mbGljdCwgYnV0IHdlIGNhbm5vdCBzdG9wXG4vLyBwcm9jZXNzaW5nIHRoaXMgbm9kZSBiZWNhdXNlIGFsdGVybmF0aXZlIHRvIGhhcyBhbm90aGVyIHdheSB0byBjb250aW51ZSxcbi8vIHZpYSB7QGNvZGUgWzZ8MnxbXV19LjwvcD5cbi8vXG4vLyA8cD5JdCBhbHNvIGxldCdzIHVzIGNvbnRpbnVlIGZvciB0aGlzIHJ1bGU6PC9wPlxuLy9cbi8vIDxwPntAY29kZSBbMXwxfFtdLCAxfDJ8W10sIDh8M3xbXV0gYSA6IEEgfCBBIHwgQSBCIDt9PC9wPlxuLy9cbi8vIDxwPkFmdGVyIG1hdGNoaW5nIGlucHV0IEEsIHdlIHJlYWNoIHRoZSBzdG9wIHN0YXRlIGZvciBydWxlIEEsIHN0YXRlIDEuXG4vLyBTdGF0ZSA4IGlzIHRoZSBzdGF0ZSByaWdodCBiZWZvcmUgQi4gQ2xlYXJseSBhbHRlcm5hdGl2ZXMgMSBhbmQgMlxuLy8gY29uZmxpY3QgYW5kIG5vIGFtb3VudCBvZiBmdXJ0aGVyIGxvb2thaGVhZCB3aWxsIHNlcGFyYXRlIHRoZSB0d28uXG4vLyBIb3dldmVyLCBhbHRlcm5hdGl2ZSAzIHdpbGwgYmUgYWJsZSB0byBjb250aW51ZSBhbmQgc28gd2UgZG8gbm90IHN0b3Bcbi8vIHdvcmtpbmcgb24gdGhpcyBzdGF0ZS4gSW4gdGhlIHByZXZpb3VzIGV4YW1wbGUsIHdlJ3JlIGNvbmNlcm5lZCB3aXRoXG4vLyBzdGF0ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjb25mbGljdGluZyBhbHRlcm5hdGl2ZXMuIEhlcmUgYWx0IDMgaXMgbm90XG4vLyBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbmZsaWN0aW5nIGNvbmZpZ3MsIGJ1dCBzaW5jZSB3ZSBjYW4gY29udGludWVcbi8vIGxvb2tpbmcgZm9yIGlucHV0IHJlYXNvbmFibHksIGRvbid0IGRlY2xhcmUgdGhlIHN0YXRlIGRvbmUuPC9wPlxuLy9cbi8vIDxwPjxzdHJvbmc+UFVSRSBTTEwgUEFSU0lORzwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5UbyBoYW5kbGUgcHVyZSBTTEwgcGFyc2luZywgYWxsIHdlIGhhdmUgdG8gZG8gaXMgbWFrZSBzdXJlIHRoYXQgd2Vcbi8vIGNvbWJpbmUgc3RhY2sgY29udGV4dHMgZm9yIGNvbmZpZ3VyYXRpb25zIHRoYXQgZGlmZmVyIG9ubHkgYnkgc2VtYW50aWNcbi8vIHByZWRpY2F0ZS4gRnJvbSB0aGVyZSwgd2UgY2FuIGRvIHRoZSB1c3VhbCBTTEwgdGVybWluYXRpb24gaGV1cmlzdGljLjwvcD5cbi8vXG4vLyA8cD48c3Ryb25nPlBSRURJQ0FURVMgSU4gU0xMK0xMIFBBUlNJTkc8L3N0cm9uZz48L3A+XG4vL1xuLy8gPHA+U0xMIGRlY2lzaW9ucyBkb24ndCBldmFsdWF0ZSBwcmVkaWNhdGVzIHVudGlsIGFmdGVyIHRoZXkgcmVhY2ggREZBIHN0b3Bcbi8vIHN0YXRlcyBiZWNhdXNlIHRoZXkgbmVlZCB0byBjcmVhdGUgdGhlIERGQSBjYWNoZSB0aGF0IHdvcmtzIGluIGFsbFxuLy8gc2VtYW50aWMgc2l0dWF0aW9ucy4gSW4gY29udHJhc3QsIGZ1bGwgTEwgZXZhbHVhdGVzIHByZWRpY2F0ZXMgY29sbGVjdGVkXG4vLyBkdXJpbmcgc3RhcnQgc3RhdGUgY29tcHV0YXRpb24gc28gaXQgY2FuIGlnbm9yZSBwcmVkaWNhdGVzIHRoZXJlYWZ0ZXIuXG4vLyBUaGlzIG1lYW5zIHRoYXQgU0xMIHRlcm1pbmF0aW9uIGRldGVjdGlvbiBjYW4gdG90YWxseSBpZ25vcmUgc2VtYW50aWNcbi8vIHByZWRpY2F0ZXMuPC9wPlxuLy9cbi8vIDxwPkltcGxlbWVudGF0aW9uLXdpc2UsIHtAbGluayBBVE5Db25maWdTZXR9IGNvbWJpbmVzIHN0YWNrIGNvbnRleHRzIGJ1dCBub3Rcbi8vIHNlbWFudGljIHByZWRpY2F0ZSBjb250ZXh0cyBzbyB3ZSBtaWdodCBzZWUgdHdvIGNvbmZpZ3VyYXRpb25zIGxpa2UgdGhlXG4vLyBmb2xsb3dpbmcuPC9wPlxuLy9cbi8vIDxwPntAY29kZSAocywgMSwgeCwge30pLCAocywgMSwgeCcsIHtwfSl9PC9wPlxuLy9cbi8vIDxwPkJlZm9yZSB0ZXN0aW5nIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGFnYWluc3Qgb3RoZXJzLCB3ZSBoYXZlIHRvIG1lcmdlXG4vLyB7QGNvZGUgeH0gYW5kIHtAY29kZSB4J30gKHdpdGhvdXQgbW9kaWZ5aW5nIHRoZSBleGlzdGluZyBjb25maWd1cmF0aW9ucykuXG4vLyBGb3IgZXhhbXBsZSwgd2UgdGVzdCB7QGNvZGUgKHgreCcpPT14Jyd9IHdoZW4gbG9va2luZyBmb3IgY29uZmxpY3RzIGluXG4vLyB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb25zLjwvcD5cbi8vXG4vLyA8cD57QGNvZGUgKHMsIDEsIHgsIHt9KSwgKHMsIDEsIHgnLCB7cH0pLCAocywgMiwgeCcnLCB7fSl9PC9wPlxuLy9cbi8vIDxwPklmIHRoZSBjb25maWd1cmF0aW9uIHNldCBoYXMgcHJlZGljYXRlcyAoYXMgaW5kaWNhdGVkIGJ5XG4vLyB7QGxpbmsgQVROQ29uZmlnU2V0Ly9oYXNTZW1hbnRpY0NvbnRleHR9KSwgdGhpcyBhbGdvcml0aG0gbWFrZXMgYSBjb3B5IG9mXG4vLyB0aGUgY29uZmlndXJhdGlvbnMgdG8gc3RyaXAgb3V0IGFsbCBvZiB0aGUgcHJlZGljYXRlcyBzbyB0aGF0IGEgc3RhbmRhcmRcbi8vIHtAbGluayBBVE5Db25maWdTZXR9IHdpbGwgbWVyZ2UgZXZlcnl0aGluZyBpZ25vcmluZyBwcmVkaWNhdGVzLjwvcD5cbi8vXG5QcmVkaWN0aW9uTW9kZS5oYXNTTExDb25mbGljdFRlcm1pbmF0aW5nUHJlZGljdGlvbiA9IGZ1bmN0aW9uKCBtb2RlLCBjb25maWdzKSB7XG4gICAgLy8gQ29uZmlncyBpbiBydWxlIHN0b3Agc3RhdGVzIGluZGljYXRlIHJlYWNoaW5nIHRoZSBlbmQgb2YgdGhlIGRlY2lzaW9uXG4gICAgLy8gcnVsZSAobG9jYWwgY29udGV4dCkgb3IgZW5kIG9mIHN0YXJ0IHJ1bGUgKGZ1bGwgY29udGV4dCkuIElmIGFsbFxuICAgIC8vIGNvbmZpZ3MgbWVldCB0aGlzIGNvbmRpdGlvbiwgdGhlbiBub25lIG9mIHRoZSBjb25maWd1cmF0aW9ucyBpcyBhYmxlXG4gICAgLy8gdG8gbWF0Y2ggYWRkaXRpb25hbCBpbnB1dCBzbyB3ZSB0ZXJtaW5hdGUgcHJlZGljdGlvbi5cbiAgICAvL1xuICAgIGlmIChQcmVkaWN0aW9uTW9kZS5hbGxDb25maWdzSW5SdWxlU3RvcFN0YXRlcyhjb25maWdzKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLy8gcHVyZSBTTEwgbW9kZSBwYXJzaW5nXG4gICAgaWYgKG1vZGUgPT09IFByZWRpY3Rpb25Nb2RlLlNMTCkge1xuICAgICAgICAvLyBEb24ndCBib3RoZXIgd2l0aCBjb21iaW5pbmcgY29uZmlncyBmcm9tIGRpZmZlcmVudCBzZW1hbnRpY1xuICAgICAgICAvLyBjb250ZXh0cyBpZiB3ZSBjYW4gZmFpbCBvdmVyIHRvIGZ1bGwgTEw7IGNvc3RzIG1vcmUgdGltZVxuICAgICAgICAvLyBzaW5jZSB3ZSdsbCBvZnRlbiBmYWlsIG92ZXIgYW55d2F5LlxuICAgICAgICBpZiAoY29uZmlncy5oYXNTZW1hbnRpY0NvbnRleHQpIHtcbiAgICAgICAgICAgIC8vIGR1cCBjb25maWdzLCB0b3NzaW5nIG91dCBzZW1hbnRpYyBwcmVkaWNhdGVzXG4gICAgICAgICAgICB2YXIgZHVwID0gbmV3IEFUTkNvbmZpZ1NldCgpO1xuICAgICAgICAgICAgZm9yKHZhciBpPTA7aTxjb25maWdzLml0ZW1zLmxlbmd0aDtpKyspIHtcbiAgICAgICAgICAgIFx0dmFyIGMgPSBjb25maWdzLml0ZW1zW2ldO1xuICAgICAgICAgICAgICAgIGMgPSBuZXcgQVROQ29uZmlnKHtzZW1hbnRpY0NvbnRleHQ6U2VtYW50aWNDb250ZXh0Lk5PTkV9LCBjKTtcbiAgICAgICAgICAgICAgICBkdXAuYWRkKGMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uZmlncyA9IGR1cDtcbiAgICAgICAgfVxuICAgICAgICAvLyBub3cgd2UgaGF2ZSBjb21iaW5lZCBjb250ZXh0cyBmb3IgY29uZmlncyB3aXRoIGRpc3NpbWlsYXIgcHJlZHNcbiAgICB9XG4gICAgLy8gcHVyZSBTTEwgb3IgY29tYmluZWQgU0xMK0xMIG1vZGUgcGFyc2luZ1xuICAgIHZhciBhbHRzZXRzID0gUHJlZGljdGlvbk1vZGUuZ2V0Q29uZmxpY3RpbmdBbHRTdWJzZXRzKGNvbmZpZ3MpO1xuICAgIHJldHVybiBQcmVkaWN0aW9uTW9kZS5oYXNDb25mbGljdGluZ0FsdFNldChhbHRzZXRzKSAmJiAhUHJlZGljdGlvbk1vZGUuaGFzU3RhdGVBc3NvY2lhdGVkV2l0aE9uZUFsdChjb25maWdzKTtcbn07XG5cbi8vIENoZWNrcyBpZiBhbnkgY29uZmlndXJhdGlvbiBpbiB7QGNvZGUgY29uZmlnc30gaXMgaW4gYVxuLy8ge0BsaW5rIFJ1bGVTdG9wU3RhdGV9LiBDb25maWd1cmF0aW9ucyBtZWV0aW5nIHRoaXMgY29uZGl0aW9uIGhhdmUgcmVhY2hlZFxuLy8gdGhlIGVuZCBvZiB0aGUgZGVjaXNpb24gcnVsZSAobG9jYWwgY29udGV4dCkgb3IgZW5kIG9mIHN0YXJ0IHJ1bGUgKGZ1bGxcbi8vIGNvbnRleHQpLlxuLy9cbi8vIEBwYXJhbSBjb25maWdzIHRoZSBjb25maWd1cmF0aW9uIHNldCB0byB0ZXN0XG4vLyBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiBhbnkgY29uZmlndXJhdGlvbiBpbiB7QGNvZGUgY29uZmlnc30gaXMgaW4gYVxuLy8ge0BsaW5rIFJ1bGVTdG9wU3RhdGV9LCBvdGhlcndpc2Uge0Bjb2RlIGZhbHNlfVxuUHJlZGljdGlvbk1vZGUuaGFzQ29uZmlnSW5SdWxlU3RvcFN0YXRlID0gZnVuY3Rpb24oY29uZmlncykge1xuXHRmb3IodmFyIGk9MDtpPGNvbmZpZ3MuaXRlbXMubGVuZ3RoO2krKykge1xuXHRcdHZhciBjID0gY29uZmlncy5pdGVtc1tpXTtcbiAgICAgICAgaWYgKGMuc3RhdGUgaW5zdGFuY2VvZiBSdWxlU3RvcFN0YXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXHR9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLy8gQ2hlY2tzIGlmIGFsbCBjb25maWd1cmF0aW9ucyBpbiB7QGNvZGUgY29uZmlnc30gYXJlIGluIGFcbi8vIHtAbGluayBSdWxlU3RvcFN0YXRlfS4gQ29uZmlndXJhdGlvbnMgbWVldGluZyB0aGlzIGNvbmRpdGlvbiBoYXZlIHJlYWNoZWRcbi8vIHRoZSBlbmQgb2YgdGhlIGRlY2lzaW9uIHJ1bGUgKGxvY2FsIGNvbnRleHQpIG9yIGVuZCBvZiBzdGFydCBydWxlIChmdWxsXG4vLyBjb250ZXh0KS5cbi8vXG4vLyBAcGFyYW0gY29uZmlncyB0aGUgY29uZmlndXJhdGlvbiBzZXQgdG8gdGVzdFxuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgYWxsIGNvbmZpZ3VyYXRpb25zIGluIHtAY29kZSBjb25maWdzfSBhcmUgaW4gYVxuLy8ge0BsaW5rIFJ1bGVTdG9wU3RhdGV9LCBvdGhlcndpc2Uge0Bjb2RlIGZhbHNlfVxuUHJlZGljdGlvbk1vZGUuYWxsQ29uZmlnc0luUnVsZVN0b3BTdGF0ZXMgPSBmdW5jdGlvbihjb25maWdzKSB7XG5cdGZvcih2YXIgaT0wO2k8Y29uZmlncy5pdGVtcy5sZW5ndGg7aSsrKSB7XG5cdFx0dmFyIGMgPSBjb25maWdzLml0ZW1zW2ldO1xuICAgICAgICBpZiAoIShjLnN0YXRlIGluc3RhbmNlb2YgUnVsZVN0b3BTdGF0ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXHR9XG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vL1xuLy8gRnVsbCBMTCBwcmVkaWN0aW9uIHRlcm1pbmF0aW9uLlxuLy9cbi8vIDxwPkNhbiB3ZSBzdG9wIGxvb2tpbmcgYWhlYWQgZHVyaW5nIEFUTiBzaW11bGF0aW9uIG9yIGlzIHRoZXJlIHNvbWVcbi8vIHVuY2VydGFpbnR5IGFzIHRvIHdoaWNoIGFsdGVybmF0aXZlIHdlIHdpbGwgdWx0aW1hdGVseSBwaWNrLCBhZnRlclxuLy8gY29uc3VtaW5nIG1vcmUgaW5wdXQ/IEV2ZW4gaWYgdGhlcmUgYXJlIHBhcnRpYWwgY29uZmxpY3RzLCB3ZSBtaWdodCBrbm93XG4vLyB0aGF0IGV2ZXJ5dGhpbmcgaXMgZ29pbmcgdG8gcmVzb2x2ZSB0byB0aGUgc2FtZSBtaW5pbXVtIGFsdGVybmF0aXZlLiBUaGF0XG4vLyBtZWFucyB3ZSBjYW4gc3RvcCBzaW5jZSBubyBtb3JlIGxvb2thaGVhZCB3aWxsIGNoYW5nZSB0aGF0IGZhY3QuIE9uIHRoZVxuLy8gb3RoZXIgaGFuZCwgdGhlcmUgbWlnaHQgYmUgbXVsdGlwbGUgY29uZmxpY3RzIHRoYXQgcmVzb2x2ZSB0byBkaWZmZXJlbnRcbi8vIG1pbmltdW1zLiBUaGF0IG1lYW5zIHdlIG5lZWQgbW9yZSBsb29rIGFoZWFkIHRvIGRlY2lkZSB3aGljaCBvZiB0aG9zZVxuLy8gYWx0ZXJuYXRpdmVzIHdlIHNob3VsZCBwcmVkaWN0LjwvcD5cbi8vXG4vLyA8cD5UaGUgYmFzaWMgaWRlYSBpcyB0byBzcGxpdCB0aGUgc2V0IG9mIGNvbmZpZ3VyYXRpb25zIHtAY29kZSBDfSwgaW50b1xuLy8gY29uZmxpY3Rpbmcgc3Vic2V0cyB7QGNvZGUgKHMsIF8sIGN0eCwgXyl9IGFuZCBzaW5nbGV0b24gc3Vic2V0cyB3aXRoXG4vLyBub24tY29uZmxpY3RpbmcgY29uZmlndXJhdGlvbnMuIFR3byBjb25maWd1cmF0aW9ucyBjb25mbGljdCBpZiB0aGV5IGhhdmVcbi8vIGlkZW50aWNhbCB7QGxpbmsgQVROQ29uZmlnLy9zdGF0ZX0gYW5kIHtAbGluayBBVE5Db25maWcvL2NvbnRleHR9IHZhbHVlc1xuLy8gYnV0IGRpZmZlcmVudCB7QGxpbmsgQVROQ29uZmlnLy9hbHR9IHZhbHVlLCBlLmcuIHtAY29kZSAocywgaSwgY3R4LCBfKX1cbi8vIGFuZCB7QGNvZGUgKHMsIGosIGN0eCwgXyl9IGZvciB7QGNvZGUgaSE9an0uPC9wPlxuLy9cbi8vIDxwPlJlZHVjZSB0aGVzZSBjb25maWd1cmF0aW9uIHN1YnNldHMgdG8gdGhlIHNldCBvZiBwb3NzaWJsZSBhbHRlcm5hdGl2ZXMuXG4vLyBZb3UgY2FuIGNvbXB1dGUgdGhlIGFsdGVybmF0aXZlIHN1YnNldHMgaW4gb25lIHBhc3MgYXMgZm9sbG93czo8L3A+XG4vL1xuLy8gPHA+e0Bjb2RlIEFfcyxjdHggPSB7aSB8IChzLCBpLCBjdHgsIF8pfX0gZm9yIGVhY2ggY29uZmlndXJhdGlvbiBpblxuLy8ge0Bjb2RlIEN9IGhvbGRpbmcge0Bjb2RlIHN9IGFuZCB7QGNvZGUgY3R4fSBmaXhlZC48L3A+XG4vL1xuLy8gPHA+T3IgaW4gcHNldWRvLWNvZGUsIGZvciBlYWNoIGNvbmZpZ3VyYXRpb24ge0Bjb2RlIGN9IGluIHtAY29kZSBDfTo8L3A+XG4vL1xuLy8gPHByZT5cbi8vIG1hcFtjXSBVPSBjLntAbGluayBBVE5Db25maWcvL2FsdCBhbHR9IC8vIG1hcCBoYXNoL2VxdWFscyB1c2VzIHMgYW5kIHgsIG5vdFxuLy8gYWx0IGFuZCBub3QgcHJlZFxuLy8gPC9wcmU+XG4vL1xuLy8gPHA+VGhlIHZhbHVlcyBpbiB7QGNvZGUgbWFwfSBhcmUgdGhlIHNldCBvZiB7QGNvZGUgQV9zLGN0eH0gc2V0cy48L3A+XG4vL1xuLy8gPHA+SWYge0Bjb2RlIHxBX3MsY3R4fD0xfSB0aGVuIHRoZXJlIGlzIG5vIGNvbmZsaWN0IGFzc29jaWF0ZWQgd2l0aFxuLy8ge0Bjb2RlIHN9IGFuZCB7QGNvZGUgY3R4fS48L3A+XG4vL1xuLy8gPHA+UmVkdWNlIHRoZSBzdWJzZXRzIHRvIHNpbmdsZXRvbnMgYnkgY2hvb3NpbmcgYSBtaW5pbXVtIG9mIGVhY2ggc3Vic2V0LiBJZlxuLy8gdGhlIHVuaW9uIG9mIHRoZXNlIGFsdGVybmF0aXZlIHN1YnNldHMgaXMgYSBzaW5nbGV0b24sIHRoZW4gbm8gYW1vdW50IG9mXG4vLyBtb3JlIGxvb2thaGVhZCB3aWxsIGhlbHAgdXMuIFdlIHdpbGwgYWx3YXlzIHBpY2sgdGhhdCBhbHRlcm5hdGl2ZS4gSWYsXG4vLyBob3dldmVyLCB0aGVyZSBpcyBtb3JlIHRoYW4gb25lIGFsdGVybmF0aXZlLCB0aGVuIHdlIGFyZSB1bmNlcnRhaW4gd2hpY2hcbi8vIGFsdGVybmF0aXZlIHRvIHByZWRpY3QgYW5kIG11c3QgY29udGludWUgbG9va2luZyBmb3IgcmVzb2x1dGlvbi4gV2UgbWF5XG4vLyBvciBtYXkgbm90IGRpc2NvdmVyIGFuIGFtYmlndWl0eSBpbiB0aGUgZnV0dXJlLCBldmVuIGlmIHRoZXJlIGFyZSBub1xuLy8gY29uZmxpY3Rpbmcgc3Vic2V0cyB0aGlzIHJvdW5kLjwvcD5cbi8vXG4vLyA8cD5UaGUgYmlnZ2VzdCBzaW4gaXMgdG8gdGVybWluYXRlIGVhcmx5IGJlY2F1c2UgaXQgbWVhbnMgd2UndmUgbWFkZSBhXG4vLyBkZWNpc2lvbiBidXQgd2VyZSB1bmNlcnRhaW4gYXMgdG8gdGhlIGV2ZW50dWFsIG91dGNvbWUuIFdlIGhhdmVuJ3QgdXNlZFxuLy8gZW5vdWdoIGxvb2thaGVhZC4gT24gdGhlIG90aGVyIGhhbmQsIGFubm91bmNpbmcgYSBjb25mbGljdCB0b28gbGF0ZSBpcyBub1xuLy8gYmlnIGRlYWw7IHlvdSB3aWxsIHN0aWxsIGhhdmUgdGhlIGNvbmZsaWN0LiBJdCdzIGp1c3QgaW5lZmZpY2llbnQuIEl0XG4vLyBtaWdodCBldmVuIGxvb2sgdW50aWwgdGhlIGVuZCBvZiBmaWxlLjwvcD5cbi8vXG4vLyA8cD5ObyBzcGVjaWFsIGNvbnNpZGVyYXRpb24gZm9yIHNlbWFudGljIHByZWRpY2F0ZXMgaXMgcmVxdWlyZWQgYmVjYXVzZVxuLy8gcHJlZGljYXRlcyBhcmUgZXZhbHVhdGVkIG9uLXRoZS1mbHkgZm9yIGZ1bGwgTEwgcHJlZGljdGlvbiwgZW5zdXJpbmcgdGhhdFxuLy8gbm8gY29uZmlndXJhdGlvbiBjb250YWlucyBhIHNlbWFudGljIGNvbnRleHQgZHVyaW5nIHRoZSB0ZXJtaW5hdGlvblxuLy8gY2hlY2suPC9wPlxuLy9cbi8vIDxwPjxzdHJvbmc+Q09ORkxJQ1RJTkcgQ09ORklHUzwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5Ud28gY29uZmlndXJhdGlvbnMge0Bjb2RlIChzLCBpLCB4KX0gYW5kIHtAY29kZSAocywgaiwgeCcpfSwgY29uZmxpY3Rcbi8vIHdoZW4ge0Bjb2RlIGkhPWp9IGJ1dCB7QGNvZGUgeD14J30uIEJlY2F1c2Ugd2UgbWVyZ2UgYWxsXG4vLyB7QGNvZGUgKHMsIGksIF8pfSBjb25maWd1cmF0aW9ucyB0b2dldGhlciwgdGhhdCBtZWFucyB0aGF0IHRoZXJlIGFyZSBhdFxuLy8gbW9zdCB7QGNvZGUgbn0gY29uZmlndXJhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHN0YXRlIHtAY29kZSBzfSBmb3Jcbi8vIHtAY29kZSBufSBwb3NzaWJsZSBhbHRlcm5hdGl2ZXMgaW4gdGhlIGRlY2lzaW9uLiBUaGUgbWVyZ2VkIHN0YWNrc1xuLy8gY29tcGxpY2F0ZSB0aGUgY29tcGFyaXNvbiBvZiBjb25maWd1cmF0aW9uIGNvbnRleHRzIHtAY29kZSB4fSBhbmRcbi8vIHtAY29kZSB4J30uIFNhbSBjaGVja3MgdG8gc2VlIGlmIG9uZSBpcyBhIHN1YnNldCBvZiB0aGUgb3RoZXIgYnkgY2FsbGluZ1xuLy8gbWVyZ2UgYW5kIGNoZWNraW5nIHRvIHNlZSBpZiB0aGUgbWVyZ2VkIHJlc3VsdCBpcyBlaXRoZXIge0Bjb2RlIHh9IG9yXG4vLyB7QGNvZGUgeCd9LiBJZiB0aGUge0Bjb2RlIHh9IGFzc29jaWF0ZWQgd2l0aCBsb3dlc3QgYWx0ZXJuYXRpdmUge0Bjb2RlIGl9XG4vLyBpcyB0aGUgc3VwZXJzZXQsIHRoZW4ge0Bjb2RlIGl9IGlzIHRoZSBvbmx5IHBvc3NpYmxlIHByZWRpY3Rpb24gc2luY2UgdGhlXG4vLyBvdGhlcnMgcmVzb2x2ZSB0byB7QGNvZGUgbWluKGkpfSBhcyB3ZWxsLiBIb3dldmVyLCBpZiB7QGNvZGUgeH0gaXNcbi8vIGFzc29jaWF0ZWQgd2l0aCB7QGNvZGUgaj5pfSB0aGVuIGF0IGxlYXN0IG9uZSBzdGFjayBjb25maWd1cmF0aW9uIGZvclxuLy8ge0Bjb2RlIGp9IGlzIG5vdCBpbiBjb25mbGljdCB3aXRoIGFsdGVybmF0aXZlIHtAY29kZSBpfS4gVGhlIGFsZ29yaXRobVxuLy8gc2hvdWxkIGtlZXAgZ29pbmcsIGxvb2tpbmcgZm9yIG1vcmUgbG9va2FoZWFkIGR1ZSB0byB0aGUgdW5jZXJ0YWludHkuPC9wPlxuLy9cbi8vIDxwPkZvciBzaW1wbGljaXR5LCBJJ20gZG9pbmcgYSBlcXVhbGl0eSBjaGVjayBiZXR3ZWVuIHtAY29kZSB4fSBhbmRcbi8vIHtAY29kZSB4J30gdGhhdCBsZXRzIHRoZSBhbGdvcml0aG0gY29udGludWUgdG8gY29uc3VtZSBsb29rYWhlYWQgbG9uZ2VyXG4vLyB0aGFuIG5lY2Vzc2FyeS4gVGhlIHJlYXNvbiBJIGxpa2UgdGhlIGVxdWFsaXR5IGlzIG9mIGNvdXJzZSB0aGVcbi8vIHNpbXBsaWNpdHkgYnV0IGFsc28gYmVjYXVzZSB0aGF0IGlzIHRoZSB0ZXN0IHlvdSBuZWVkIHRvIGRldGVjdCB0aGVcbi8vIGFsdGVybmF0aXZlcyB0aGF0IGFyZSBhY3R1YWxseSBpbiBjb25mbGljdC48L3A+XG4vL1xuLy8gPHA+PHN0cm9uZz5DT05USU5VRS9TVE9QIFJVTEU8L3N0cm9uZz48L3A+XG4vL1xuLy8gPHA+Q29udGludWUgaWYgdW5pb24gb2YgcmVzb2x2ZWQgYWx0ZXJuYXRpdmUgc2V0cyBmcm9tIG5vbi1jb25mbGljdGluZyBhbmRcbi8vIGNvbmZsaWN0aW5nIGFsdGVybmF0aXZlIHN1YnNldHMgaGFzIG1vcmUgdGhhbiBvbmUgYWx0ZXJuYXRpdmUuIFdlIGFyZVxuLy8gdW5jZXJ0YWluIGFib3V0IHdoaWNoIGFsdGVybmF0aXZlIHRvIHByZWRpY3QuPC9wPlxuLy9cbi8vIDxwPlRoZSBjb21wbGV0ZSBzZXQgb2YgYWx0ZXJuYXRpdmVzLCB7QGNvZGUgW2kgZm9yIChfLGksXyldfSwgdGVsbHMgdXMgd2hpY2hcbi8vIGFsdGVybmF0aXZlcyBhcmUgc3RpbGwgaW4gdGhlIHJ1bm5pbmcgZm9yIHRoZSBhbW91bnQgb2YgaW5wdXQgd2UndmVcbi8vIGNvbnN1bWVkIGF0IHRoaXMgcG9pbnQuIFRoZSBjb25mbGljdGluZyBzZXRzIGxldCB1cyB0byBzdHJpcCBhd2F5XG4vLyBjb25maWd1cmF0aW9ucyB0aGF0IHdvbid0IGxlYWQgdG8gbW9yZSBzdGF0ZXMgYmVjYXVzZSB3ZSByZXNvbHZlXG4vLyBjb25mbGljdHMgdG8gdGhlIGNvbmZpZ3VyYXRpb24gd2l0aCBhIG1pbmltdW0gYWx0ZXJuYXRlIGZvciB0aGVcbi8vIGNvbmZsaWN0aW5nIHNldC48L3A+XG4vL1xuLy8gPHA+PHN0cm9uZz5DQVNFUzwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8dWw+XG4vL1xuLy8gPGxpPm5vIGNvbmZsaWN0cyBhbmQgbW9yZSB0aGFuIDEgYWx0ZXJuYXRpdmUgaW4gc2V0ID0mZ3Q7IGNvbnRpbnVlPC9saT5cbi8vXG4vLyA8bGk+IHtAY29kZSAocywgMSwgeCl9LCB7QGNvZGUgKHMsIDIsIHgpfSwge0Bjb2RlIChzLCAzLCB6KX0sXG4vLyB7QGNvZGUgKHMnLCAxLCB5KX0sIHtAY29kZSAocycsIDIsIHkpfSB5aWVsZHMgbm9uLWNvbmZsaWN0aW5nIHNldFxuLy8ge0Bjb2RlIHszfX0gVSBjb25mbGljdGluZyBzZXRzIHtAY29kZSBtaW4oezEsMn0pfSBVIHtAY29kZSBtaW4oezEsMn0pfSA9XG4vLyB7QGNvZGUgezEsM319ID0mZ3Q7IGNvbnRpbnVlXG4vLyA8L2xpPlxuLy9cbi8vIDxsaT57QGNvZGUgKHMsIDEsIHgpfSwge0Bjb2RlIChzLCAyLCB4KX0sIHtAY29kZSAocycsIDEsIHkpfSxcbi8vIHtAY29kZSAocycsIDIsIHkpfSwge0Bjb2RlIChzJycsIDEsIHopfSB5aWVsZHMgbm9uLWNvbmZsaWN0aW5nIHNldFxuLy8ge0Bjb2RlIHsxfX0gVSBjb25mbGljdGluZyBzZXRzIHtAY29kZSBtaW4oezEsMn0pfSBVIHtAY29kZSBtaW4oezEsMn0pfSA9XG4vLyB7QGNvZGUgezF9fSA9Jmd0OyBzdG9wIGFuZCBwcmVkaWN0IDE8L2xpPlxuLy9cbi8vIDxsaT57QGNvZGUgKHMsIDEsIHgpfSwge0Bjb2RlIChzLCAyLCB4KX0sIHtAY29kZSAocycsIDEsIHkpfSxcbi8vIHtAY29kZSAocycsIDIsIHkpfSB5aWVsZHMgY29uZmxpY3RpbmcsIHJlZHVjZWQgc2V0cyB7QGNvZGUgezF9fSBVXG4vLyB7QGNvZGUgezF9fSA9IHtAY29kZSB7MX19ID0mZ3Q7IHN0b3AgYW5kIHByZWRpY3QgMSwgY2FuIGFubm91bmNlXG4vLyBhbWJpZ3VpdHkge0Bjb2RlIHsxLDJ9fTwvbGk+XG4vL1xuLy8gPGxpPntAY29kZSAocywgMSwgeCl9LCB7QGNvZGUgKHMsIDIsIHgpfSwge0Bjb2RlIChzJywgMiwgeSl9LFxuLy8ge0Bjb2RlIChzJywgMywgeSl9IHlpZWxkcyBjb25mbGljdGluZywgcmVkdWNlZCBzZXRzIHtAY29kZSB7MX19IFVcbi8vIHtAY29kZSB7Mn19ID0ge0Bjb2RlIHsxLDJ9fSA9Jmd0OyBjb250aW51ZTwvbGk+XG4vL1xuLy8gPGxpPntAY29kZSAocywgMSwgeCl9LCB7QGNvZGUgKHMsIDIsIHgpfSwge0Bjb2RlIChzJywgMywgeSl9LFxuLy8ge0Bjb2RlIChzJywgNCwgeSl9IHlpZWxkcyBjb25mbGljdGluZywgcmVkdWNlZCBzZXRzIHtAY29kZSB7MX19IFVcbi8vIHtAY29kZSB7M319ID0ge0Bjb2RlIHsxLDN9fSA9Jmd0OyBjb250aW51ZTwvbGk+XG4vL1xuLy8gPC91bD5cbi8vXG4vLyA8cD48c3Ryb25nPkVYQUNUIEFNQklHVUlUWSBERVRFQ1RJT048L3N0cm9uZz48L3A+XG4vL1xuLy8gPHA+SWYgYWxsIHN0YXRlcyByZXBvcnQgdGhlIHNhbWUgY29uZmxpY3Rpbmcgc2V0IG9mIGFsdGVybmF0aXZlcywgdGhlbiB3ZVxuLy8ga25vdyB3ZSBoYXZlIHRoZSBleGFjdCBhbWJpZ3VpdHkgc2V0LjwvcD5cbi8vXG4vLyA8cD48Y29kZT58QV88ZW0+aTwvZW0+fCZndDsxPC9jb2RlPiBhbmRcbi8vIDxjb2RlPkFfPGVtPmk8L2VtPiA9IEFfPGVtPmo8L2VtPjwvY29kZT4gZm9yIGFsbCA8ZW0+aTwvZW0+LCA8ZW0+ajwvZW0+LjwvcD5cbi8vXG4vLyA8cD5JbiBvdGhlciB3b3Jkcywgd2UgY29udGludWUgZXhhbWluaW5nIGxvb2thaGVhZCB1bnRpbCBhbGwge0Bjb2RlIEFfaX1cbi8vIGhhdmUgbW9yZSB0aGFuIG9uZSBhbHRlcm5hdGl2ZSBhbmQgYWxsIHtAY29kZSBBX2l9IGFyZSB0aGUgc2FtZS4gSWZcbi8vIHtAY29kZSBBPXt7MSwyfSwgezEsM319fSwgdGhlbiByZWd1bGFyIExMIHByZWRpY3Rpb24gd291bGQgdGVybWluYXRlXG4vLyBiZWNhdXNlIHRoZSByZXNvbHZlZCBzZXQgaXMge0Bjb2RlIHsxfX0uIFRvIGRldGVybWluZSB3aGF0IHRoZSByZWFsXG4vLyBhbWJpZ3VpdHkgaXMsIHdlIGhhdmUgdG8ga25vdyB3aGV0aGVyIHRoZSBhbWJpZ3VpdHkgaXMgYmV0d2VlbiBvbmUgYW5kXG4vLyB0d28gb3Igb25lIGFuZCB0aHJlZSBzbyB3ZSBrZWVwIGdvaW5nLiBXZSBjYW4gb25seSBzdG9wIHByZWRpY3Rpb24gd2hlblxuLy8gd2UgbmVlZCBleGFjdCBhbWJpZ3VpdHkgZGV0ZWN0aW9uIHdoZW4gdGhlIHNldHMgbG9vayBsaWtlXG4vLyB7QGNvZGUgQT17ezEsMn19fSBvciB7QGNvZGUge3sxLDJ9LHsxLDJ9fX0sIGV0Yy4uLjwvcD5cbi8vXG5QcmVkaWN0aW9uTW9kZS5yZXNvbHZlc1RvSnVzdE9uZVZpYWJsZUFsdCA9IGZ1bmN0aW9uKGFsdHNldHMpIHtcbiAgICByZXR1cm4gUHJlZGljdGlvbk1vZGUuZ2V0U2luZ2xlVmlhYmxlQWx0KGFsdHNldHMpO1xufTtcblxuLy9cbi8vIERldGVybWluZXMgaWYgZXZlcnkgYWx0ZXJuYXRpdmUgc3Vic2V0IGluIHtAY29kZSBhbHRzZXRzfSBjb250YWlucyBtb3JlXG4vLyB0aGFuIG9uZSBhbHRlcm5hdGl2ZS5cbi8vXG4vLyBAcGFyYW0gYWx0c2V0cyBhIGNvbGxlY3Rpb24gb2YgYWx0ZXJuYXRpdmUgc3Vic2V0c1xuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYgZXZlcnkge0BsaW5rIEJpdFNldH0gaW4ge0Bjb2RlIGFsdHNldHN9IGhhc1xuLy8ge0BsaW5rIEJpdFNldC8vY2FyZGluYWxpdHkgY2FyZGluYWxpdHl9ICZndDsgMSwgb3RoZXJ3aXNlIHtAY29kZSBmYWxzZX1cbi8vXG5QcmVkaWN0aW9uTW9kZS5hbGxTdWJzZXRzQ29uZmxpY3QgPSBmdW5jdGlvbihhbHRzZXRzKSB7XG4gICAgcmV0dXJuICEgUHJlZGljdGlvbk1vZGUuaGFzTm9uQ29uZmxpY3RpbmdBbHRTZXQoYWx0c2V0cyk7XG59O1xuLy9cbi8vIERldGVybWluZXMgaWYgYW55IHNpbmdsZSBhbHRlcm5hdGl2ZSBzdWJzZXQgaW4ge0Bjb2RlIGFsdHNldHN9IGNvbnRhaW5zXG4vLyBleGFjdGx5IG9uZSBhbHRlcm5hdGl2ZS5cbi8vXG4vLyBAcGFyYW0gYWx0c2V0cyBhIGNvbGxlY3Rpb24gb2YgYWx0ZXJuYXRpdmUgc3Vic2V0c1xuLy8gQHJldHVybiB7QGNvZGUgdHJ1ZX0gaWYge0Bjb2RlIGFsdHNldHN9IGNvbnRhaW5zIGEge0BsaW5rIEJpdFNldH0gd2l0aFxuLy8ge0BsaW5rIEJpdFNldC8vY2FyZGluYWxpdHkgY2FyZGluYWxpdHl9IDEsIG90aGVyd2lzZSB7QGNvZGUgZmFsc2V9XG4vL1xuUHJlZGljdGlvbk1vZGUuaGFzTm9uQ29uZmxpY3RpbmdBbHRTZXQgPSBmdW5jdGlvbihhbHRzZXRzKSB7XG5cdGZvcih2YXIgaT0wO2k8YWx0c2V0cy5sZW5ndGg7aSsrKSB7XG5cdFx0dmFyIGFsdHMgPSBhbHRzZXRzW2ldO1xuICAgICAgICBpZiAoYWx0cy5sZW5ndGg9PT0xKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXHR9XG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxuLy9cbi8vIERldGVybWluZXMgaWYgYW55IHNpbmdsZSBhbHRlcm5hdGl2ZSBzdWJzZXQgaW4ge0Bjb2RlIGFsdHNldHN9IGNvbnRhaW5zXG4vLyBtb3JlIHRoYW4gb25lIGFsdGVybmF0aXZlLlxuLy9cbi8vIEBwYXJhbSBhbHRzZXRzIGEgY29sbGVjdGlvbiBvZiBhbHRlcm5hdGl2ZSBzdWJzZXRzXG4vLyBAcmV0dXJuIHtAY29kZSB0cnVlfSBpZiB7QGNvZGUgYWx0c2V0c30gY29udGFpbnMgYSB7QGxpbmsgQml0U2V0fSB3aXRoXG4vLyB7QGxpbmsgQml0U2V0Ly9jYXJkaW5hbGl0eSBjYXJkaW5hbGl0eX0gJmd0OyAxLCBvdGhlcndpc2Uge0Bjb2RlIGZhbHNlfVxuLy9cblByZWRpY3Rpb25Nb2RlLmhhc0NvbmZsaWN0aW5nQWx0U2V0ID0gZnVuY3Rpb24oYWx0c2V0cykge1xuXHRmb3IodmFyIGk9MDtpPGFsdHNldHMubGVuZ3RoO2krKykge1xuXHRcdHZhciBhbHRzID0gYWx0c2V0c1tpXTtcbiAgICAgICAgaWYgKGFsdHMubGVuZ3RoPjEpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cdH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG4vL1xuLy8gRGV0ZXJtaW5lcyBpZiBldmVyeSBhbHRlcm5hdGl2ZSBzdWJzZXQgaW4ge0Bjb2RlIGFsdHNldHN9IGlzIGVxdWl2YWxlbnQuXG4vL1xuLy8gQHBhcmFtIGFsdHNldHMgYSBjb2xsZWN0aW9uIG9mIGFsdGVybmF0aXZlIHN1YnNldHNcbi8vIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIGV2ZXJ5IG1lbWJlciBvZiB7QGNvZGUgYWx0c2V0c30gaXMgZXF1YWwgdG8gdGhlXG4vLyBvdGhlcnMsIG90aGVyd2lzZSB7QGNvZGUgZmFsc2V9XG4vL1xuUHJlZGljdGlvbk1vZGUuYWxsU3Vic2V0c0VxdWFsID0gZnVuY3Rpb24oYWx0c2V0cykge1xuICAgIHZhciBmaXJzdCA9IG51bGw7XG5cdGZvcih2YXIgaT0wO2k8YWx0c2V0cy5sZW5ndGg7aSsrKSB7XG5cdFx0dmFyIGFsdHMgPSBhbHRzZXRzW2ldO1xuICAgICAgICBpZiAoZmlyc3QgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGZpcnN0ID0gYWx0cztcbiAgICAgICAgfSBlbHNlIGlmIChhbHRzIT09Zmlyc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXHR9XG4gICAgcmV0dXJuIHRydWU7XG59O1xuXG4vL1xuLy8gUmV0dXJucyB0aGUgdW5pcXVlIGFsdGVybmF0aXZlIHByZWRpY3RlZCBieSBhbGwgYWx0ZXJuYXRpdmUgc3Vic2V0cyBpblxuLy8ge0Bjb2RlIGFsdHNldHN9LiBJZiBubyBzdWNoIGFsdGVybmF0aXZlIGV4aXN0cywgdGhpcyBtZXRob2QgcmV0dXJuc1xuLy8ge0BsaW5rIEFUTi8vSU5WQUxJRF9BTFRfTlVNQkVSfS5cbi8vXG4vLyBAcGFyYW0gYWx0c2V0cyBhIGNvbGxlY3Rpb24gb2YgYWx0ZXJuYXRpdmUgc3Vic2V0c1xuLy9cblByZWRpY3Rpb25Nb2RlLmdldFVuaXF1ZUFsdCA9IGZ1bmN0aW9uKGFsdHNldHMpIHtcbiAgICB2YXIgYWxsID0gUHJlZGljdGlvbk1vZGUuZ2V0QWx0cyhhbHRzZXRzKTtcbiAgICBpZiAoYWxsLmxlbmd0aD09PTEpIHtcbiAgICAgICAgcmV0dXJuIGFsbC5taW5WYWx1ZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBBVE4uSU5WQUxJRF9BTFRfTlVNQkVSO1xuICAgIH1cbn07XG5cbi8vIEdldHMgdGhlIGNvbXBsZXRlIHNldCBvZiByZXByZXNlbnRlZCBhbHRlcm5hdGl2ZXMgZm9yIGEgY29sbGVjdGlvbiBvZlxuLy8gYWx0ZXJuYXRpdmUgc3Vic2V0cy4gVGhpcyBtZXRob2QgcmV0dXJucyB0aGUgdW5pb24gb2YgZWFjaCB7QGxpbmsgQml0U2V0fVxuLy8gaW4ge0Bjb2RlIGFsdHNldHN9LlxuLy9cbi8vIEBwYXJhbSBhbHRzZXRzIGEgY29sbGVjdGlvbiBvZiBhbHRlcm5hdGl2ZSBzdWJzZXRzXG4vLyBAcmV0dXJuIHRoZSBzZXQgb2YgcmVwcmVzZW50ZWQgYWx0ZXJuYXRpdmVzIGluIHtAY29kZSBhbHRzZXRzfVxuLy9cblByZWRpY3Rpb25Nb2RlLmdldEFsdHMgPSBmdW5jdGlvbihhbHRzZXRzKSB7XG4gICAgdmFyIGFsbCA9IG5ldyBCaXRTZXQoKTtcbiAgICBhbHRzZXRzLm1hcCggZnVuY3Rpb24oYWx0cykgeyBhbGwub3IoYWx0cyk7IH0pO1xuICAgIHJldHVybiBhbGw7XG59O1xuXG4vL1xuLy8gVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBjb25mbGljdGluZyBhbHQgc3Vic2V0cyBmcm9tIGEgY29uZmlndXJhdGlvbiBzZXQuXG4vLyBGb3IgZWFjaCBjb25maWd1cmF0aW9uIHtAY29kZSBjfSBpbiB7QGNvZGUgY29uZmlnc306XG4vL1xuLy8gPHByZT5cbi8vIG1hcFtjXSBVPSBjLntAbGluayBBVE5Db25maWcvL2FsdCBhbHR9IC8vIG1hcCBoYXNoL2VxdWFscyB1c2VzIHMgYW5kIHgsIG5vdFxuLy8gYWx0IGFuZCBub3QgcHJlZFxuLy8gPC9wcmU+XG5cblByZWRpY3Rpb25Nb2RlLmdldENvbmZsaWN0aW5nQWx0U3Vic2V0cyA9IGZ1bmN0aW9uKGNvbmZpZ3MpIHtcbiAgICB2YXIgY29uZmlnVG9BbHRzID0gbmV3IE1hcCgpO1xuICAgIGNvbmZpZ1RvQWx0cy5oYXNoRnVuY3Rpb24gPSBmdW5jdGlvbihjZmcpIHsgaGFzaFN0dWZmKGNmZy5zdGF0ZS5zdGF0ZU51bWJlciwgY2ZnLmNvbnRleHQpOyB9O1xuICAgIGNvbmZpZ1RvQWx0cy5lcXVhbHNGdW5jdGlvbiA9IGZ1bmN0aW9uKGMxLCBjMikgeyByZXR1cm4gYzEuc3RhdGUuc3RhdGVOdW1iZXI9PWMyLnN0YXRlLnN0YXRlTnVtYmVyICYmIGMxLmNvbnRleHQuZXF1YWxzKGMyLmNvbnRleHQpO31cbiAgICBjb25maWdzLml0ZW1zLm1hcChmdW5jdGlvbihjZmcpIHtcbiAgICAgICAgdmFyIGFsdHMgPSBjb25maWdUb0FsdHMuZ2V0KGNmZyk7XG4gICAgICAgIGlmIChhbHRzID09PSBudWxsKSB7XG4gICAgICAgICAgICBhbHRzID0gbmV3IEJpdFNldCgpO1xuICAgICAgICAgICAgY29uZmlnVG9BbHRzLnB1dChjZmcsIGFsdHMpO1xuICAgICAgICB9XG4gICAgICAgIGFsdHMuYWRkKGNmZy5hbHQpO1xuXHR9KTtcbiAgICByZXR1cm4gY29uZmlnVG9BbHRzLmdldFZhbHVlcygpO1xufTtcblxuLy9cbi8vIEdldCBhIG1hcCBmcm9tIHN0YXRlIHRvIGFsdCBzdWJzZXQgZnJvbSBhIGNvbmZpZ3VyYXRpb24gc2V0LiBGb3IgZWFjaFxuLy8gY29uZmlndXJhdGlvbiB7QGNvZGUgY30gaW4ge0Bjb2RlIGNvbmZpZ3N9OlxuLy9cbi8vIDxwcmU+XG4vLyBtYXBbYy57QGxpbmsgQVROQ29uZmlnLy9zdGF0ZSBzdGF0ZX1dIFU9IGMue0BsaW5rIEFUTkNvbmZpZy8vYWx0IGFsdH1cbi8vIDwvcHJlPlxuLy9cblByZWRpY3Rpb25Nb2RlLmdldFN0YXRlVG9BbHRNYXAgPSBmdW5jdGlvbihjb25maWdzKSB7XG4gICAgdmFyIG0gPSBuZXcgQWx0RGljdCgpO1xuICAgIGNvbmZpZ3MuaXRlbXMubWFwKGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgdmFyIGFsdHMgPSBtLmdldChjLnN0YXRlKTtcbiAgICAgICAgaWYgKGFsdHMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGFsdHMgPSBuZXcgQml0U2V0KCk7XG4gICAgICAgICAgICBtLnB1dChjLnN0YXRlLCBhbHRzKTtcbiAgICAgICAgfVxuICAgICAgICBhbHRzLmFkZChjLmFsdCk7XG4gICAgfSk7XG4gICAgcmV0dXJuIG07XG59O1xuXG5QcmVkaWN0aW9uTW9kZS5oYXNTdGF0ZUFzc29jaWF0ZWRXaXRoT25lQWx0ID0gZnVuY3Rpb24oY29uZmlncykge1xuICAgIHZhciB2YWx1ZXMgPSBQcmVkaWN0aW9uTW9kZS5nZXRTdGF0ZVRvQWx0TWFwKGNvbmZpZ3MpLnZhbHVlcygpO1xuICAgIGZvcih2YXIgaT0wO2k8dmFsdWVzLmxlbmd0aDtpKyspIHtcbiAgICAgICAgaWYgKHZhbHVlc1tpXS5sZW5ndGg9PT0xKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuXG5QcmVkaWN0aW9uTW9kZS5nZXRTaW5nbGVWaWFibGVBbHQgPSBmdW5jdGlvbihhbHRzZXRzKSB7XG4gICAgdmFyIHJlc3VsdCA9IG51bGw7XG5cdGZvcih2YXIgaT0wO2k8YWx0c2V0cy5sZW5ndGg7aSsrKSB7XG5cdFx0dmFyIGFsdHMgPSBhbHRzZXRzW2ldO1xuICAgICAgICB2YXIgbWluQWx0ID0gYWx0cy5taW5WYWx1ZSgpO1xuICAgICAgICBpZihyZXN1bHQ9PT1udWxsKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBtaW5BbHQ7XG4gICAgICAgIH0gZWxzZSBpZihyZXN1bHQhPT1taW5BbHQpIHsgLy8gbW9yZSB0aGFuIDEgdmlhYmxlIGFsdFxuICAgICAgICAgICAgcmV0dXJuIEFUTi5JTlZBTElEX0FMVF9OVU1CRVI7XG4gICAgICAgIH1cblx0fVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG5leHBvcnRzLlByZWRpY3Rpb25Nb2RlID0gUHJlZGljdGlvbk1vZGU7XG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cblxuLy8gQSB0cmVlIHN0cnVjdHVyZSB1c2VkIHRvIHJlY29yZCB0aGUgc2VtYW50aWMgY29udGV4dCBpbiB3aGljaFxuLy8gIGFuIEFUTiBjb25maWd1cmF0aW9uIGlzIHZhbGlkLiAgSXQncyBlaXRoZXIgYSBzaW5nbGUgcHJlZGljYXRlLFxuLy8gIGEgY29uanVuY3Rpb24ge0Bjb2RlIHAxJiZwMn0sIG9yIGEgc3VtIG9mIHByb2R1Y3RzIHtAY29kZSBwMXx8cDJ9LlxuLy9cbi8vICA8cD5JIGhhdmUgc2NvcGVkIHRoZSB7QGxpbmsgQU5EfSwge0BsaW5rIE9SfSwgYW5kIHtAbGluayBQcmVkaWNhdGV9IHN1YmNsYXNzZXMgb2Zcbi8vICB7QGxpbmsgU2VtYW50aWNDb250ZXh0fSB3aXRoaW4gdGhlIHNjb3BlIG9mIHRoaXMgb3V0ZXIgY2xhc3MuPC9wPlxuLy9cblxudmFyIFNldCA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKS5TZXQ7XG52YXIgSGFzaCA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKS5IYXNoO1xuXG5mdW5jdGlvbiBTZW1hbnRpY0NvbnRleHQoKSB7XG5cdHJldHVybiB0aGlzO1xufVxuXG5TZW1hbnRpY0NvbnRleHQucHJvdG90eXBlLmhhc2hDb2RlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGhhc2ggPSBuZXcgSGFzaCgpO1xuICAgIHRoaXMudXBkYXRlSGFzaENvZGUoaGFzaCk7XG4gICAgcmV0dXJuIGhhc2guZmluaXNoKCk7XG59O1xuXG4vLyBGb3IgY29udGV4dCBpbmRlcGVuZGVudCBwcmVkaWNhdGVzLCB3ZSBldmFsdWF0ZSB0aGVtIHdpdGhvdXQgYSBsb2NhbFxuLy8gY29udGV4dCAoaS5lLiwgbnVsbCBjb250ZXh0KS4gVGhhdCB3YXksIHdlIGNhbiBldmFsdWF0ZSB0aGVtIHdpdGhvdXRcbi8vIGhhdmluZyB0byBjcmVhdGUgcHJvcGVyIHJ1bGUtc3BlY2lmaWMgY29udGV4dCBkdXJpbmcgcHJlZGljdGlvbiAoYXNcbi8vIG9wcG9zZWQgdG8gdGhlIHBhcnNlciwgd2hpY2ggY3JlYXRlcyB0aGVtIG5hdHVyYWxseSkuIEluIGEgcHJhY3RpY2FsXG4vLyBzZW5zZSwgdGhpcyBhdm9pZHMgYSBjYXN0IGV4Y2VwdGlvbiBmcm9tIFJ1bGVDb250ZXh0IHRvIG15cnVsZUNvbnRleHQuXG4vL1xuLy8gPHA+Rm9yIGNvbnRleHQgZGVwZW5kZW50IHByZWRpY2F0ZXMsIHdlIG11c3QgcGFzcyBpbiBhIGxvY2FsIGNvbnRleHQgc28gdGhhdFxuLy8gcmVmZXJlbmNlcyBzdWNoIGFzICRhcmcgZXZhbHVhdGUgcHJvcGVybHkgYXMgX2xvY2FsY3R4LmFyZy4gV2Ugb25seVxuLy8gY2FwdHVyZSBjb250ZXh0IGRlcGVuZGVudCBwcmVkaWNhdGVzIGluIHRoZSBjb250ZXh0IGluIHdoaWNoIHdlIGJlZ2luXG4vLyBwcmVkaWN0aW9uLCBzbyB3ZSBwYXNzZWQgaW4gdGhlIG91dGVyIGNvbnRleHQgaGVyZSBpbiBjYXNlIG9mIGNvbnRleHRcbi8vIGRlcGVuZGVudCBwcmVkaWNhdGUgZXZhbHVhdGlvbi48L3A+XG4vL1xuU2VtYW50aWNDb250ZXh0LnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uKHBhcnNlciwgb3V0ZXJDb250ZXh0KSB7XG59O1xuXG4vL1xuLy8gRXZhbHVhdGUgdGhlIHByZWNlZGVuY2UgcHJlZGljYXRlcyBmb3IgdGhlIGNvbnRleHQgYW5kIHJlZHVjZSB0aGUgcmVzdWx0LlxuLy9cbi8vIEBwYXJhbSBwYXJzZXIgVGhlIHBhcnNlciBpbnN0YW5jZS5cbi8vIEBwYXJhbSBvdXRlckNvbnRleHQgVGhlIGN1cnJlbnQgcGFyc2VyIGNvbnRleHQgb2JqZWN0LlxuLy8gQHJldHVybiBUaGUgc2ltcGxpZmllZCBzZW1hbnRpYyBjb250ZXh0IGFmdGVyIHByZWNlZGVuY2UgcHJlZGljYXRlcyBhcmVcbi8vIGV2YWx1YXRlZCwgd2hpY2ggd2lsbCBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMuXG4vLyA8dWw+XG4vLyA8bGk+e0BsaW5rIC8vTk9ORX06IGlmIHRoZSBwcmVkaWNhdGUgc2ltcGxpZmllcyB0byB7QGNvZGUgdHJ1ZX0gYWZ0ZXJcbi8vIHByZWNlZGVuY2UgcHJlZGljYXRlcyBhcmUgZXZhbHVhdGVkLjwvbGk+XG4vLyA8bGk+e0Bjb2RlIG51bGx9OiBpZiB0aGUgcHJlZGljYXRlIHNpbXBsaWZpZXMgdG8ge0Bjb2RlIGZhbHNlfSBhZnRlclxuLy8gcHJlY2VkZW5jZSBwcmVkaWNhdGVzIGFyZSBldmFsdWF0ZWQuPC9saT5cbi8vIDxsaT57QGNvZGUgdGhpc306IGlmIHRoZSBzZW1hbnRpYyBjb250ZXh0IGlzIG5vdCBjaGFuZ2VkIGFzIGEgcmVzdWx0IG9mXG4vLyBwcmVjZWRlbmNlIHByZWRpY2F0ZSBldmFsdWF0aW9uLjwvbGk+XG4vLyA8bGk+QSBub24te0Bjb2RlIG51bGx9IHtAbGluayBTZW1hbnRpY0NvbnRleHR9OiB0aGUgbmV3IHNpbXBsaWZpZWRcbi8vIHNlbWFudGljIGNvbnRleHQgYWZ0ZXIgcHJlY2VkZW5jZSBwcmVkaWNhdGVzIGFyZSBldmFsdWF0ZWQuPC9saT5cbi8vIDwvdWw+XG4vL1xuU2VtYW50aWNDb250ZXh0LnByb3RvdHlwZS5ldmFsUHJlY2VkZW5jZSA9IGZ1bmN0aW9uKHBhcnNlciwgb3V0ZXJDb250ZXh0KSB7XG5cdHJldHVybiB0aGlzO1xufTtcblxuU2VtYW50aWNDb250ZXh0LmFuZENvbnRleHQgPSBmdW5jdGlvbihhLCBiKSB7XG5cdGlmIChhID09PSBudWxsIHx8IGEgPT09IFNlbWFudGljQ29udGV4dC5OT05FKSB7XG5cdFx0cmV0dXJuIGI7XG5cdH1cblx0aWYgKGIgPT09IG51bGwgfHwgYiA9PT0gU2VtYW50aWNDb250ZXh0Lk5PTkUpIHtcblx0XHRyZXR1cm4gYTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gbmV3IEFORChhLCBiKTtcblx0aWYgKHJlc3VsdC5vcG5kcy5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gcmVzdWx0Lm9wbmRzWzBdO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cbn07XG5cblNlbWFudGljQ29udGV4dC5vckNvbnRleHQgPSBmdW5jdGlvbihhLCBiKSB7XG5cdGlmIChhID09PSBudWxsKSB7XG5cdFx0cmV0dXJuIGI7XG5cdH1cblx0aWYgKGIgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gYTtcblx0fVxuXHRpZiAoYSA9PT0gU2VtYW50aWNDb250ZXh0Lk5PTkUgfHwgYiA9PT0gU2VtYW50aWNDb250ZXh0Lk5PTkUpIHtcblx0XHRyZXR1cm4gU2VtYW50aWNDb250ZXh0Lk5PTkU7XG5cdH1cblx0dmFyIHJlc3VsdCA9IG5ldyBPUihhLCBiKTtcblx0aWYgKHJlc3VsdC5vcG5kcy5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gcmVzdWx0Lm9wbmRzWzBdO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cbn07XG5cbmZ1bmN0aW9uIFByZWRpY2F0ZShydWxlSW5kZXgsIHByZWRJbmRleCwgaXNDdHhEZXBlbmRlbnQpIHtcblx0U2VtYW50aWNDb250ZXh0LmNhbGwodGhpcyk7XG5cdHRoaXMucnVsZUluZGV4ID0gcnVsZUluZGV4ID09PSB1bmRlZmluZWQgPyAtMSA6IHJ1bGVJbmRleDtcblx0dGhpcy5wcmVkSW5kZXggPSBwcmVkSW5kZXggPT09IHVuZGVmaW5lZCA/IC0xIDogcHJlZEluZGV4O1xuXHR0aGlzLmlzQ3R4RGVwZW5kZW50ID0gaXNDdHhEZXBlbmRlbnQgPT09IHVuZGVmaW5lZCA/IGZhbHNlIDogaXNDdHhEZXBlbmRlbnQ7IC8vIGUuZy4sICRpIHJlZiBpbiBwcmVkXG5cdHJldHVybiB0aGlzO1xufVxuXG5QcmVkaWNhdGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShTZW1hbnRpY0NvbnRleHQucHJvdG90eXBlKTtcblByZWRpY2F0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmVkaWNhdGU7XG5cbi8vVGhlIGRlZmF1bHQge0BsaW5rIFNlbWFudGljQ29udGV4dH0sIHdoaWNoIGlzIHNlbWFudGljYWxseSBlcXVpdmFsZW50IHRvXG4vL2EgcHJlZGljYXRlIG9mIHRoZSBmb3JtIHtAY29kZSB7dHJ1ZX0/fS5cbi8vXG5TZW1hbnRpY0NvbnRleHQuTk9ORSA9IG5ldyBQcmVkaWNhdGUoKTtcblxuXG5QcmVkaWNhdGUucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24ocGFyc2VyLCBvdXRlckNvbnRleHQpIHtcblx0dmFyIGxvY2FsY3R4ID0gdGhpcy5pc0N0eERlcGVuZGVudCA/IG91dGVyQ29udGV4dCA6IG51bGw7XG5cdHJldHVybiBwYXJzZXIuc2VtcHJlZChsb2NhbGN0eCwgdGhpcy5ydWxlSW5kZXgsIHRoaXMucHJlZEluZGV4KTtcbn07XG5cblByZWRpY2F0ZS5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG5cdGhhc2gudXBkYXRlKHRoaXMucnVsZUluZGV4LCB0aGlzLnByZWRJbmRleCwgdGhpcy5pc0N0eERlcGVuZGVudCk7XG59O1xuXG5QcmVkaWNhdGUucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG5cdGlmICh0aGlzID09PSBvdGhlcikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2UgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBQcmVkaWNhdGUpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB0aGlzLnJ1bGVJbmRleCA9PT0gb3RoZXIucnVsZUluZGV4ICYmXG5cdFx0XHRcdHRoaXMucHJlZEluZGV4ID09PSBvdGhlci5wcmVkSW5kZXggJiZcblx0XHRcdFx0dGhpcy5pc0N0eERlcGVuZGVudCA9PT0gb3RoZXIuaXNDdHhEZXBlbmRlbnQ7XG5cdH1cbn07XG5cblByZWRpY2F0ZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIFwie1wiICsgdGhpcy5ydWxlSW5kZXggKyBcIjpcIiArIHRoaXMucHJlZEluZGV4ICsgXCJ9P1wiO1xufTtcblxuZnVuY3Rpb24gUHJlY2VkZW5jZVByZWRpY2F0ZShwcmVjZWRlbmNlKSB7XG5cdFNlbWFudGljQ29udGV4dC5jYWxsKHRoaXMpO1xuXHR0aGlzLnByZWNlZGVuY2UgPSBwcmVjZWRlbmNlID09PSB1bmRlZmluZWQgPyAwIDogcHJlY2VkZW5jZTtcbn1cblxuUHJlY2VkZW5jZVByZWRpY2F0ZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNlbWFudGljQ29udGV4dC5wcm90b3R5cGUpO1xuUHJlY2VkZW5jZVByZWRpY2F0ZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmVjZWRlbmNlUHJlZGljYXRlO1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uKHBhcnNlciwgb3V0ZXJDb250ZXh0KSB7XG5cdHJldHVybiBwYXJzZXIucHJlY3ByZWQob3V0ZXJDb250ZXh0LCB0aGlzLnByZWNlZGVuY2UpO1xufTtcblxuUHJlY2VkZW5jZVByZWRpY2F0ZS5wcm90b3R5cGUuZXZhbFByZWNlZGVuY2UgPSBmdW5jdGlvbihwYXJzZXIsIG91dGVyQ29udGV4dCkge1xuXHRpZiAocGFyc2VyLnByZWNwcmVkKG91dGVyQ29udGV4dCwgdGhpcy5wcmVjZWRlbmNlKSkge1xuXHRcdHJldHVybiBTZW1hbnRpY0NvbnRleHQuTk9ORTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxufTtcblxuUHJlY2VkZW5jZVByZWRpY2F0ZS5wcm90b3R5cGUuY29tcGFyZVRvID0gZnVuY3Rpb24ob3RoZXIpIHtcblx0cmV0dXJuIHRoaXMucHJlY2VkZW5jZSAtIG90aGVyLnByZWNlZGVuY2U7XG59O1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSgzMSk7XG59O1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuXHRpZiAodGhpcyA9PT0gb3RoZXIpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBlbHNlIGlmICghKG90aGVyIGluc3RhbmNlb2YgUHJlY2VkZW5jZVByZWRpY2F0ZSkpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMucHJlY2VkZW5jZSA9PT0gb3RoZXIucHJlY2VkZW5jZTtcblx0fVxufTtcblxuUHJlY2VkZW5jZVByZWRpY2F0ZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIFwie1wiK3RoaXMucHJlY2VkZW5jZStcIj49cHJlY30/XCI7XG59O1xuXG5cblxuUHJlY2VkZW5jZVByZWRpY2F0ZS5maWx0ZXJQcmVjZWRlbmNlUHJlZGljYXRlcyA9IGZ1bmN0aW9uKHNldCkge1xuXHR2YXIgcmVzdWx0ID0gW107XG5cdHNldC52YWx1ZXMoKS5tYXAoIGZ1bmN0aW9uKGNvbnRleHQpIHtcblx0XHRpZiAoY29udGV4dCBpbnN0YW5jZW9mIFByZWNlZGVuY2VQcmVkaWNhdGUpIHtcblx0XHRcdHJlc3VsdC5wdXNoKGNvbnRleHQpO1xuXHRcdH1cblx0fSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuXG5cbi8vIEEgc2VtYW50aWMgY29udGV4dCB3aGljaCBpcyB0cnVlIHdoZW5ldmVyIG5vbmUgb2YgdGhlIGNvbnRhaW5lZCBjb250ZXh0c1xuLy8gaXMgZmFsc2UuXG4vL1xuZnVuY3Rpb24gQU5EKGEsIGIpIHtcblx0U2VtYW50aWNDb250ZXh0LmNhbGwodGhpcyk7XG5cdHZhciBvcGVyYW5kcyA9IG5ldyBTZXQoKTtcblx0aWYgKGEgaW5zdGFuY2VvZiBBTkQpIHtcblx0XHRhLm9wbmRzLm1hcChmdW5jdGlvbihvKSB7XG5cdFx0XHRvcGVyYW5kcy5hZGQobyk7XG5cdFx0fSk7XG5cdH0gZWxzZSB7XG5cdFx0b3BlcmFuZHMuYWRkKGEpO1xuXHR9XG5cdGlmIChiIGluc3RhbmNlb2YgQU5EKSB7XG5cdFx0Yi5vcG5kcy5tYXAoZnVuY3Rpb24obykge1xuXHRcdFx0b3BlcmFuZHMuYWRkKG8pO1xuXHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdG9wZXJhbmRzLmFkZChiKTtcblx0fVxuXHR2YXIgcHJlY2VkZW5jZVByZWRpY2F0ZXMgPSBQcmVjZWRlbmNlUHJlZGljYXRlLmZpbHRlclByZWNlZGVuY2VQcmVkaWNhdGVzKG9wZXJhbmRzKTtcblx0aWYgKHByZWNlZGVuY2VQcmVkaWNhdGVzLmxlbmd0aCA+IDApIHtcblx0XHQvLyBpbnRlcmVzdGVkIGluIHRoZSB0cmFuc2l0aW9uIHdpdGggdGhlIGxvd2VzdCBwcmVjZWRlbmNlXG5cdFx0dmFyIHJlZHVjZWQgPSBudWxsO1xuXHRcdHByZWNlZGVuY2VQcmVkaWNhdGVzLm1hcCggZnVuY3Rpb24ocCkge1xuXHRcdFx0aWYocmVkdWNlZD09PW51bGwgfHwgcC5wcmVjZWRlbmNlPHJlZHVjZWQucHJlY2VkZW5jZSkge1xuXHRcdFx0XHRyZWR1Y2VkID0gcDtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRvcGVyYW5kcy5hZGQocmVkdWNlZCk7XG5cdH1cblx0dGhpcy5vcG5kcyA9IG9wZXJhbmRzLnZhbHVlcygpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuQU5ELnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2VtYW50aWNDb250ZXh0LnByb3RvdHlwZSk7XG5BTkQucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQU5EO1xuXG5BTkQucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uKG90aGVyKSB7XG5cdGlmICh0aGlzID09PSBvdGhlcikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2UgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBBTkQpKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB0aGlzLm9wbmRzID09PSBvdGhlci5vcG5kcztcblx0fVxufTtcblxuQU5ELnByb3RvdHlwZS51cGRhdGVIYXNoQ29kZSA9IGZ1bmN0aW9uKGhhc2gpIHtcbiAgICBoYXNoLnVwZGF0ZSh0aGlzLm9wbmRzLCBcIkFORFwiKTtcbn07XG4vL1xuLy8ge0Bpbmhlcml0RG9jfVxuLy9cbi8vIDxwPlxuLy8gVGhlIGV2YWx1YXRpb24gb2YgcHJlZGljYXRlcyBieSB0aGlzIGNvbnRleHQgaXMgc2hvcnQtY2lyY3VpdGluZywgYnV0XG4vLyB1bm9yZGVyZWQuPC9wPlxuLy9cbkFORC5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbihwYXJzZXIsIG91dGVyQ29udGV4dCkge1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3BuZHMubGVuZ3RoOyBpKyspIHtcblx0XHRpZiAoIXRoaXMub3BuZHNbaV0uZXZhbHVhdGUocGFyc2VyLCBvdXRlckNvbnRleHQpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB0cnVlO1xufTtcblxuQU5ELnByb3RvdHlwZS5ldmFsUHJlY2VkZW5jZSA9IGZ1bmN0aW9uKHBhcnNlciwgb3V0ZXJDb250ZXh0KSB7XG5cdHZhciBkaWZmZXJzID0gZmFsc2U7XG5cdHZhciBvcGVyYW5kcyA9IFtdO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3BuZHMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgY29udGV4dCA9IHRoaXMub3BuZHNbaV07XG5cdFx0dmFyIGV2YWx1YXRlZCA9IGNvbnRleHQuZXZhbFByZWNlZGVuY2UocGFyc2VyLCBvdXRlckNvbnRleHQpO1xuXHRcdGRpZmZlcnMgfD0gKGV2YWx1YXRlZCAhPT0gY29udGV4dCk7XG5cdFx0aWYgKGV2YWx1YXRlZCA9PT0gbnVsbCkge1xuXHRcdFx0Ly8gVGhlIEFORCBjb250ZXh0IGlzIGZhbHNlIGlmIGFueSBlbGVtZW50IGlzIGZhbHNlXG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9IGVsc2UgaWYgKGV2YWx1YXRlZCAhPT0gU2VtYW50aWNDb250ZXh0Lk5PTkUpIHtcblx0XHRcdC8vIFJlZHVjZSB0aGUgcmVzdWx0IGJ5IHNraXBwaW5nIHRydWUgZWxlbWVudHNcblx0XHRcdG9wZXJhbmRzLnB1c2goZXZhbHVhdGVkKTtcblx0XHR9XG5cdH1cblx0aWYgKCFkaWZmZXJzKSB7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0aWYgKG9wZXJhbmRzLmxlbmd0aCA9PT0gMCkge1xuXHRcdC8vIGFsbCBlbGVtZW50cyB3ZXJlIHRydWUsIHNvIHRoZSBBTkQgY29udGV4dCBpcyB0cnVlXG5cdFx0cmV0dXJuIFNlbWFudGljQ29udGV4dC5OT05FO1xuXHR9XG5cdHZhciByZXN1bHQgPSBudWxsO1xuXHRvcGVyYW5kcy5tYXAoZnVuY3Rpb24obykge1xuXHRcdHJlc3VsdCA9IHJlc3VsdCA9PT0gbnVsbCA/IG8gOiBTZW1hbnRpY0NvbnRleHQuYW5kQ29udGV4dChyZXN1bHQsIG8pO1xuXHR9KTtcblx0cmV0dXJuIHJlc3VsdDtcbn07XG5cbkFORC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0dmFyIHMgPSBcIlwiO1xuXHR0aGlzLm9wbmRzLm1hcChmdW5jdGlvbihvKSB7XG5cdFx0cyArPSBcIiYmIFwiICsgby50b1N0cmluZygpO1xuXHR9KTtcblx0cmV0dXJuIHMubGVuZ3RoID4gMyA/IHMuc2xpY2UoMykgOiBzO1xufTtcblxuLy9cbi8vIEEgc2VtYW50aWMgY29udGV4dCB3aGljaCBpcyB0cnVlIHdoZW5ldmVyIGF0IGxlYXN0IG9uZSBvZiB0aGUgY29udGFpbmVkXG4vLyBjb250ZXh0cyBpcyB0cnVlLlxuLy9cbmZ1bmN0aW9uIE9SKGEsIGIpIHtcblx0U2VtYW50aWNDb250ZXh0LmNhbGwodGhpcyk7XG5cdHZhciBvcGVyYW5kcyA9IG5ldyBTZXQoKTtcblx0aWYgKGEgaW5zdGFuY2VvZiBPUikge1xuXHRcdGEub3BuZHMubWFwKGZ1bmN0aW9uKG8pIHtcblx0XHRcdG9wZXJhbmRzLmFkZChvKTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvcGVyYW5kcy5hZGQoYSk7XG5cdH1cblx0aWYgKGIgaW5zdGFuY2VvZiBPUikge1xuXHRcdGIub3BuZHMubWFwKGZ1bmN0aW9uKG8pIHtcblx0XHRcdG9wZXJhbmRzLmFkZChvKTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRvcGVyYW5kcy5hZGQoYik7XG5cdH1cblxuXHR2YXIgcHJlY2VkZW5jZVByZWRpY2F0ZXMgPSBQcmVjZWRlbmNlUHJlZGljYXRlLmZpbHRlclByZWNlZGVuY2VQcmVkaWNhdGVzKG9wZXJhbmRzKTtcblx0aWYgKHByZWNlZGVuY2VQcmVkaWNhdGVzLmxlbmd0aCA+IDApIHtcblx0XHQvLyBpbnRlcmVzdGVkIGluIHRoZSB0cmFuc2l0aW9uIHdpdGggdGhlIGhpZ2hlc3QgcHJlY2VkZW5jZVxuXHRcdHZhciBzID0gcHJlY2VkZW5jZVByZWRpY2F0ZXMuc29ydChmdW5jdGlvbihhLCBiKSB7XG5cdFx0XHRyZXR1cm4gYS5jb21wYXJlVG8oYik7XG5cdFx0fSk7XG5cdFx0dmFyIHJlZHVjZWQgPSBzW3MubGVuZ3RoLTFdO1xuXHRcdG9wZXJhbmRzLmFkZChyZWR1Y2VkKTtcblx0fVxuXHR0aGlzLm9wbmRzID0gb3BlcmFuZHMudmFsdWVzKCk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5PUi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFNlbWFudGljQ29udGV4dC5wcm90b3R5cGUpO1xuT1IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gT1I7XG5cbk9SLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGZ1bmN0aW9uKG90aGVyKSB7XG5cdGlmICh0aGlzID09PSBvdGhlcikge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9IGVsc2UgaWYgKCEob3RoZXIgaW5zdGFuY2VvZiBPUikpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMub3BuZHMgPT09IG90aGVyLm9wbmRzO1xuXHR9XG59O1xuXG5PUi5wcm90b3R5cGUudXBkYXRlSGFzaENvZGUgPSBmdW5jdGlvbihoYXNoKSB7XG4gICAgaGFzaC51cGRhdGUodGhpcy5vcG5kcywgXCJPUlwiKTtcbn07XG5cbi8vIDxwPlxuLy8gVGhlIGV2YWx1YXRpb24gb2YgcHJlZGljYXRlcyBieSB0aGlzIGNvbnRleHQgaXMgc2hvcnQtY2lyY3VpdGluZywgYnV0XG4vLyB1bm9yZGVyZWQuPC9wPlxuLy9cbk9SLnByb3RvdHlwZS5ldmFsdWF0ZSA9IGZ1bmN0aW9uKHBhcnNlciwgb3V0ZXJDb250ZXh0KSB7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5vcG5kcy5sZW5ndGg7IGkrKykge1xuXHRcdGlmICh0aGlzLm9wbmRzW2ldLmV2YWx1YXRlKHBhcnNlciwgb3V0ZXJDb250ZXh0KSkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbk9SLnByb3RvdHlwZS5ldmFsUHJlY2VkZW5jZSA9IGZ1bmN0aW9uKHBhcnNlciwgb3V0ZXJDb250ZXh0KSB7XG5cdHZhciBkaWZmZXJzID0gZmFsc2U7XG5cdHZhciBvcGVyYW5kcyA9IFtdO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMub3BuZHMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgY29udGV4dCA9IHRoaXMub3BuZHNbaV07XG5cdFx0dmFyIGV2YWx1YXRlZCA9IGNvbnRleHQuZXZhbFByZWNlZGVuY2UocGFyc2VyLCBvdXRlckNvbnRleHQpO1xuXHRcdGRpZmZlcnMgfD0gKGV2YWx1YXRlZCAhPT0gY29udGV4dCk7XG5cdFx0aWYgKGV2YWx1YXRlZCA9PT0gU2VtYW50aWNDb250ZXh0Lk5PTkUpIHtcblx0XHRcdC8vIFRoZSBPUiBjb250ZXh0IGlzIHRydWUgaWYgYW55IGVsZW1lbnQgaXMgdHJ1ZVxuXHRcdFx0cmV0dXJuIFNlbWFudGljQ29udGV4dC5OT05FO1xuXHRcdH0gZWxzZSBpZiAoZXZhbHVhdGVkICE9PSBudWxsKSB7XG5cdFx0XHQvLyBSZWR1Y2UgdGhlIHJlc3VsdCBieSBza2lwcGluZyBmYWxzZSBlbGVtZW50c1xuXHRcdFx0b3BlcmFuZHMucHVzaChldmFsdWF0ZWQpO1xuXHRcdH1cblx0fVxuXHRpZiAoIWRpZmZlcnMpIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRpZiAob3BlcmFuZHMubGVuZ3RoID09PSAwKSB7XG5cdFx0Ly8gYWxsIGVsZW1lbnRzIHdlcmUgZmFsc2UsIHNvIHRoZSBPUiBjb250ZXh0IGlzIGZhbHNlXG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0dmFyIHJlc3VsdCA9IG51bGw7XG5cdG9wZXJhbmRzLm1hcChmdW5jdGlvbihvKSB7XG5cdFx0cmV0dXJuIHJlc3VsdCA9PT0gbnVsbCA/IG8gOiBTZW1hbnRpY0NvbnRleHQub3JDb250ZXh0KHJlc3VsdCwgbyk7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcblxuT1IucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHZhciBzID0gXCJcIjtcblx0dGhpcy5vcG5kcy5tYXAoZnVuY3Rpb24obykge1xuXHRcdHMgKz0gXCJ8fCBcIiArIG8udG9TdHJpbmcoKTtcblx0fSk7XG5cdHJldHVybiBzLmxlbmd0aCA+IDMgPyBzLnNsaWNlKDMpIDogcztcbn07XG5cbmV4cG9ydHMuU2VtYW50aWNDb250ZXh0ID0gU2VtYW50aWNDb250ZXh0O1xuZXhwb3J0cy5QcmVjZWRlbmNlUHJlZGljYXRlID0gUHJlY2VkZW5jZVByZWRpY2F0ZTtcbmV4cG9ydHMuUHJlZGljYXRlID0gUHJlZGljYXRlO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cblxuLy8gIEFuIEFUTiB0cmFuc2l0aW9uIGJldHdlZW4gYW55IHR3byBBVE4gc3RhdGVzLiAgU3ViY2xhc3NlcyBkZWZpbmVcbi8vICBhdG9tLCBzZXQsIGVwc2lsb24sIGFjdGlvbiwgcHJlZGljYXRlLCBydWxlIHRyYW5zaXRpb25zLlxuLy9cbi8vICA8cD5UaGlzIGlzIGEgb25lIHdheSBsaW5rLiAgSXQgZW1hbmF0ZXMgZnJvbSBhIHN0YXRlICh1c3VhbGx5IHZpYSBhIGxpc3Qgb2Zcbi8vICB0cmFuc2l0aW9ucykgYW5kIGhhcyBhIHRhcmdldCBzdGF0ZS48L3A+XG4vL1xuLy8gIDxwPlNpbmNlIHdlIG5ldmVyIGhhdmUgdG8gY2hhbmdlIHRoZSBBVE4gdHJhbnNpdGlvbnMgb25jZSB3ZSBjb25zdHJ1Y3QgaXQsXG4vLyAgd2UgY2FuIGZpeCB0aGVzZSB0cmFuc2l0aW9ucyBhcyBzcGVjaWZpYyBjbGFzc2VzLiBUaGUgREZBIHRyYW5zaXRpb25zXG4vLyAgb24gdGhlIG90aGVyIGhhbmQgbmVlZCB0byB1cGRhdGUgdGhlIGxhYmVscyBhcyBpdCBhZGRzIHRyYW5zaXRpb25zIHRvXG4vLyAgdGhlIHN0YXRlcy4gV2UnbGwgdXNlIHRoZSB0ZXJtIEVkZ2UgZm9yIHRoZSBERkEgdG8gZGlzdGluZ3Vpc2ggdGhlbSBmcm9tXG4vLyAgQVROIHRyYW5zaXRpb25zLjwvcD5cblxudmFyIFRva2VuID0gcmVxdWlyZSgnLi8uLi9Ub2tlbicpLlRva2VuO1xudmFyIEludGVydmFsID0gcmVxdWlyZSgnLi8uLi9JbnRlcnZhbFNldCcpLkludGVydmFsO1xudmFyIEludGVydmFsU2V0ID0gcmVxdWlyZSgnLi8uLi9JbnRlcnZhbFNldCcpLkludGVydmFsU2V0O1xudmFyIFByZWRpY2F0ZSA9IHJlcXVpcmUoJy4vU2VtYW50aWNDb250ZXh0JykuUHJlZGljYXRlO1xudmFyIFByZWNlZGVuY2VQcmVkaWNhdGUgPSByZXF1aXJlKCcuL1NlbWFudGljQ29udGV4dCcpLlByZWNlZGVuY2VQcmVkaWNhdGU7XG5cbmZ1bmN0aW9uIFRyYW5zaXRpb24gKHRhcmdldCkge1xuICAgIC8vIFRoZSB0YXJnZXQgb2YgdGhpcyB0cmFuc2l0aW9uLlxuICAgIGlmICh0YXJnZXQ9PT11bmRlZmluZWQgfHwgdGFyZ2V0PT09bnVsbCkge1xuICAgICAgICB0aHJvdyBcInRhcmdldCBjYW5ub3QgYmUgbnVsbC5cIjtcbiAgICB9XG4gICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG4gICAgLy8gQXJlIHdlIGVwc2lsb24sIGFjdGlvbiwgc2VtcHJlZD9cbiAgICB0aGlzLmlzRXBzaWxvbiA9IGZhbHNlO1xuICAgIHRoaXMubGFiZWwgPSBudWxsO1xuICAgIHJldHVybiB0aGlzO1xufVxuICAgIC8vIGNvbnN0YW50cyBmb3Igc2VyaWFsaXphdGlvblxuVHJhbnNpdGlvbi5FUFNJTE9OID0gMTtcblRyYW5zaXRpb24uUkFOR0UgPSAyO1xuVHJhbnNpdGlvbi5SVUxFID0gMztcblRyYW5zaXRpb24uUFJFRElDQVRFID0gNDsgLy8gZS5nLiwge2lzVHlwZShpbnB1dC5MVCgxKSl9P1xuVHJhbnNpdGlvbi5BVE9NID0gNTtcblRyYW5zaXRpb24uQUNUSU9OID0gNjtcblRyYW5zaXRpb24uU0VUID0gNzsgLy8gfihBfEIpIG9yIH5hdG9tLCB3aWxkY2FyZCwgd2hpY2ggY29udmVydCB0byBuZXh0IDJcblRyYW5zaXRpb24uTk9UX1NFVCA9IDg7XG5UcmFuc2l0aW9uLldJTERDQVJEID0gOTtcblRyYW5zaXRpb24uUFJFQ0VERU5DRSA9IDEwO1xuXG5UcmFuc2l0aW9uLnNlcmlhbGl6YXRpb25OYW1lcyA9IFtcbiAgICAgICAgICAgIFwiSU5WQUxJRFwiLFxuICAgICAgICAgICAgXCJFUFNJTE9OXCIsXG4gICAgICAgICAgICBcIlJBTkdFXCIsXG4gICAgICAgICAgICBcIlJVTEVcIixcbiAgICAgICAgICAgIFwiUFJFRElDQVRFXCIsXG4gICAgICAgICAgICBcIkFUT01cIixcbiAgICAgICAgICAgIFwiQUNUSU9OXCIsXG4gICAgICAgICAgICBcIlNFVFwiLFxuICAgICAgICAgICAgXCJOT1RfU0VUXCIsXG4gICAgICAgICAgICBcIldJTERDQVJEXCIsXG4gICAgICAgICAgICBcIlBSRUNFREVOQ0VcIlxuICAgICAgICBdO1xuXG5UcmFuc2l0aW9uLnNlcmlhbGl6YXRpb25UeXBlcyA9IHtcbiAgICAgICAgRXBzaWxvblRyYW5zaXRpb246IFRyYW5zaXRpb24uRVBTSUxPTixcbiAgICAgICAgUmFuZ2VUcmFuc2l0aW9uOiBUcmFuc2l0aW9uLlJBTkdFLFxuICAgICAgICBSdWxlVHJhbnNpdGlvbjogVHJhbnNpdGlvbi5SVUxFLFxuICAgICAgICBQcmVkaWNhdGVUcmFuc2l0aW9uOiBUcmFuc2l0aW9uLlBSRURJQ0FURSxcbiAgICAgICAgQXRvbVRyYW5zaXRpb246IFRyYW5zaXRpb24uQVRPTSxcbiAgICAgICAgQWN0aW9uVHJhbnNpdGlvbjogVHJhbnNpdGlvbi5BQ1RJT04sXG4gICAgICAgIFNldFRyYW5zaXRpb246IFRyYW5zaXRpb24uU0VULFxuICAgICAgICBOb3RTZXRUcmFuc2l0aW9uOiBUcmFuc2l0aW9uLk5PVF9TRVQsXG4gICAgICAgIFdpbGRjYXJkVHJhbnNpdGlvbjogVHJhbnNpdGlvbi5XSUxEQ0FSRCxcbiAgICAgICAgUHJlY2VkZW5jZVByZWRpY2F0ZVRyYW5zaXRpb246IFRyYW5zaXRpb24uUFJFQ0VERU5DRVxuICAgIH07XG5cblxuLy8gVE9ETzogbWFrZSBhbGwgdHJhbnNpdGlvbnMgc2V0cz8gbm8sIHNob3VsZCByZW1vdmUgc2V0IGVkZ2VzXG5mdW5jdGlvbiBBdG9tVHJhbnNpdGlvbih0YXJnZXQsIGxhYmVsKSB7XG5cdFRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuXHR0aGlzLmxhYmVsXyA9IGxhYmVsOyAvLyBUaGUgdG9rZW4gdHlwZSBvciBjaGFyYWN0ZXIgdmFsdWU7IG9yLCBzaWduaWZpZXMgc3BlY2lhbCBsYWJlbC5cbiAgICB0aGlzLmxhYmVsID0gdGhpcy5tYWtlTGFiZWwoKTtcbiAgICB0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5BVE9NO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5BdG9tVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyYW5zaXRpb24ucHJvdG90eXBlKTtcbkF0b21UcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEF0b21UcmFuc2l0aW9uO1xuXG5BdG9tVHJhbnNpdGlvbi5wcm90b3R5cGUubWFrZUxhYmVsID0gZnVuY3Rpb24oKSB7XG5cdHZhciBzID0gbmV3IEludGVydmFsU2V0KCk7XG4gICAgcy5hZGRPbmUodGhpcy5sYWJlbF8pO1xuICAgIHJldHVybiBzO1xufTtcblxuQXRvbVRyYW5zaXRpb24ucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbiggc3ltYm9sLCBtaW5Wb2NhYlN5bWJvbCwgIG1heFZvY2FiU3ltYm9sKSB7XG4gICAgcmV0dXJuIHRoaXMubGFiZWxfID09PSBzeW1ib2w7XG59O1xuXG5BdG9tVHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMubGFiZWxfO1xufTtcblxuZnVuY3Rpb24gUnVsZVRyYW5zaXRpb24ocnVsZVN0YXJ0LCBydWxlSW5kZXgsIHByZWNlZGVuY2UsIGZvbGxvd1N0YXRlKSB7XG5cdFRyYW5zaXRpb24uY2FsbCh0aGlzLCBydWxlU3RhcnQpO1xuICAgIHRoaXMucnVsZUluZGV4ID0gcnVsZUluZGV4OyAvLyBwdHIgdG8gdGhlIHJ1bGUgZGVmaW5pdGlvbiBvYmplY3QgZm9yIHRoaXMgcnVsZSByZWZcbiAgICB0aGlzLnByZWNlZGVuY2UgPSBwcmVjZWRlbmNlO1xuICAgIHRoaXMuZm9sbG93U3RhdGUgPSBmb2xsb3dTdGF0ZTsgLy8gd2hhdCBub2RlIHRvIGJlZ2luIGNvbXB1dGF0aW9ucyBmb2xsb3dpbmcgcmVmIHRvIHJ1bGVcbiAgICB0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5SVUxFO1xuICAgIHRoaXMuaXNFcHNpbG9uID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuUnVsZVRyYW5zaXRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUcmFuc2l0aW9uLnByb3RvdHlwZSk7XG5SdWxlVHJhbnNpdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSdWxlVHJhbnNpdGlvbjtcblxuUnVsZVRyYW5zaXRpb24ucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbihzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIGZhbHNlO1xufTtcblxuXG5mdW5jdGlvbiBFcHNpbG9uVHJhbnNpdGlvbih0YXJnZXQsIG91dGVybW9zdFByZWNlZGVuY2VSZXR1cm4pIHtcblx0VHJhbnNpdGlvbi5jYWxsKHRoaXMsIHRhcmdldCk7XG4gICAgdGhpcy5zZXJpYWxpemF0aW9uVHlwZSA9IFRyYW5zaXRpb24uRVBTSUxPTjtcbiAgICB0aGlzLmlzRXBzaWxvbiA9IHRydWU7XG4gICAgdGhpcy5vdXRlcm1vc3RQcmVjZWRlbmNlUmV0dXJuID0gb3V0ZXJtb3N0UHJlY2VkZW5jZVJldHVybjtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuRXBzaWxvblRyYW5zaXRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUcmFuc2l0aW9uLnByb3RvdHlwZSk7XG5FcHNpbG9uVHJhbnNpdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFcHNpbG9uVHJhbnNpdGlvbjtcblxuRXBzaWxvblRyYW5zaXRpb24ucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbiggc3ltYm9sLCBtaW5Wb2NhYlN5bWJvbCwgIG1heFZvY2FiU3ltYm9sKSB7XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbkVwc2lsb25UcmFuc2l0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCJlcHNpbG9uXCI7XG59O1xuXG5mdW5jdGlvbiBSYW5nZVRyYW5zaXRpb24odGFyZ2V0LCBzdGFydCwgc3RvcCkge1xuXHRUcmFuc2l0aW9uLmNhbGwodGhpcywgdGFyZ2V0KTtcblx0dGhpcy5zZXJpYWxpemF0aW9uVHlwZSA9IFRyYW5zaXRpb24uUkFOR0U7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0O1xuICAgIHRoaXMuc3RvcCA9IHN0b3A7XG4gICAgdGhpcy5sYWJlbCA9IHRoaXMubWFrZUxhYmVsKCk7XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblJhbmdlVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyYW5zaXRpb24ucHJvdG90eXBlKTtcblJhbmdlVHJhbnNpdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBSYW5nZVRyYW5zaXRpb247XG5cblJhbmdlVHJhbnNpdGlvbi5wcm90b3R5cGUubWFrZUxhYmVsID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHMgPSBuZXcgSW50ZXJ2YWxTZXQoKTtcbiAgICBzLmFkZFJhbmdlKHRoaXMuc3RhcnQsIHRoaXMuc3RvcCk7XG4gICAgcmV0dXJuIHM7XG59O1xuXG5SYW5nZVRyYW5zaXRpb24ucHJvdG90eXBlLm1hdGNoZXMgPSBmdW5jdGlvbihzeW1ib2wsIG1pblZvY2FiU3ltYm9sLCAgbWF4Vm9jYWJTeW1ib2wpIHtcblx0cmV0dXJuIHN5bWJvbCA+PSB0aGlzLnN0YXJ0ICYmIHN5bWJvbCA8PSB0aGlzLnN0b3A7XG59O1xuXG5SYW5nZVRyYW5zaXRpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBcIidcIiArIFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5zdGFydCkgKyBcIicuLidcIiArIFN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5zdG9wKSArIFwiJ1wiO1xufTtcblxuZnVuY3Rpb24gQWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uKHRhcmdldCkge1xuXHRUcmFuc2l0aW9uLmNhbGwodGhpcywgdGFyZ2V0KTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyYW5zaXRpb24ucHJvdG90eXBlKTtcbkFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBBYnN0cmFjdFByZWRpY2F0ZVRyYW5zaXRpb247XG5cbmZ1bmN0aW9uIFByZWRpY2F0ZVRyYW5zaXRpb24odGFyZ2V0LCBydWxlSW5kZXgsIHByZWRJbmRleCwgaXNDdHhEZXBlbmRlbnQpIHtcblx0QWJzdHJhY3RQcmVkaWNhdGVUcmFuc2l0aW9uLmNhbGwodGhpcywgdGFyZ2V0KTtcbiAgICB0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5QUkVESUNBVEU7XG4gICAgdGhpcy5ydWxlSW5kZXggPSBydWxlSW5kZXg7XG4gICAgdGhpcy5wcmVkSW5kZXggPSBwcmVkSW5kZXg7XG4gICAgdGhpcy5pc0N0eERlcGVuZGVudCA9IGlzQ3R4RGVwZW5kZW50OyAvLyBlLmcuLCAkaSByZWYgaW4gcHJlZFxuICAgIHRoaXMuaXNFcHNpbG9uID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuUHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuUHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQcmVkaWNhdGVUcmFuc2l0aW9uO1xuXG5QcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS5tYXRjaGVzID0gZnVuY3Rpb24oc3ltYm9sLCBtaW5Wb2NhYlN5bWJvbCwgIG1heFZvY2FiU3ltYm9sKSB7XG5cdHJldHVybiBmYWxzZTtcbn07XG5cblByZWRpY2F0ZVRyYW5zaXRpb24ucHJvdG90eXBlLmdldFByZWRpY2F0ZSA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gbmV3IFByZWRpY2F0ZSh0aGlzLnJ1bGVJbmRleCwgdGhpcy5wcmVkSW5kZXgsIHRoaXMuaXNDdHhEZXBlbmRlbnQpO1xufTtcblxuUHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIFwicHJlZF9cIiArIHRoaXMucnVsZUluZGV4ICsgXCI6XCIgKyB0aGlzLnByZWRJbmRleDtcbn07XG5cbmZ1bmN0aW9uIEFjdGlvblRyYW5zaXRpb24odGFyZ2V0LCBydWxlSW5kZXgsIGFjdGlvbkluZGV4LCBpc0N0eERlcGVuZGVudCkge1xuXHRUcmFuc2l0aW9uLmNhbGwodGhpcywgdGFyZ2V0KTtcbiAgICB0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5BQ1RJT047XG4gICAgdGhpcy5ydWxlSW5kZXggPSBydWxlSW5kZXg7XG4gICAgdGhpcy5hY3Rpb25JbmRleCA9IGFjdGlvbkluZGV4PT09dW5kZWZpbmVkID8gLTEgOiBhY3Rpb25JbmRleDtcbiAgICB0aGlzLmlzQ3R4RGVwZW5kZW50ID0gaXNDdHhEZXBlbmRlbnQ9PT11bmRlZmluZWQgPyBmYWxzZSA6IGlzQ3R4RGVwZW5kZW50OyAvLyBlLmcuLCAkaSByZWYgaW4gcHJlZFxuICAgIHRoaXMuaXNFcHNpbG9uID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuQWN0aW9uVHJhbnNpdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKFRyYW5zaXRpb24ucHJvdG90eXBlKTtcbkFjdGlvblRyYW5zaXRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQWN0aW9uVHJhbnNpdGlvbjtcblxuXG5BY3Rpb25UcmFuc2l0aW9uLnByb3RvdHlwZS5tYXRjaGVzID0gZnVuY3Rpb24oc3ltYm9sLCBtaW5Wb2NhYlN5bWJvbCwgIG1heFZvY2FiU3ltYm9sKSB7XG5cdHJldHVybiBmYWxzZTtcbn07XG5cbkFjdGlvblRyYW5zaXRpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBcImFjdGlvbl9cIiArIHRoaXMucnVsZUluZGV4ICsgXCI6XCIgKyB0aGlzLmFjdGlvbkluZGV4O1xufTtcblxuXG4vLyBBIHRyYW5zaXRpb24gY29udGFpbmluZyBhIHNldCBvZiB2YWx1ZXMuXG5mdW5jdGlvbiBTZXRUcmFuc2l0aW9uKHRhcmdldCwgc2V0KSB7XG5cdFRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQpO1xuXHR0aGlzLnNlcmlhbGl6YXRpb25UeXBlID0gVHJhbnNpdGlvbi5TRVQ7XG4gICAgaWYgKHNldCAhPT11bmRlZmluZWQgJiYgc2V0ICE9PW51bGwpIHtcbiAgICAgICAgdGhpcy5sYWJlbCA9IHNldDtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmxhYmVsID0gbmV3IEludGVydmFsU2V0KCk7XG4gICAgICAgIHRoaXMubGFiZWwuYWRkT25lKFRva2VuLklOVkFMSURfVFlQRSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xufVxuXG5TZXRUcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuU2V0VHJhbnNpdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBTZXRUcmFuc2l0aW9uO1xuXG5TZXRUcmFuc2l0aW9uLnByb3RvdHlwZS5tYXRjaGVzID0gZnVuY3Rpb24oc3ltYm9sLCBtaW5Wb2NhYlN5bWJvbCwgIG1heFZvY2FiU3ltYm9sKSB7XG5cdHJldHVybiB0aGlzLmxhYmVsLmNvbnRhaW5zKHN5bWJvbCk7XG59O1xuXG5cblNldFRyYW5zaXRpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLmxhYmVsLnRvU3RyaW5nKCk7XG59O1xuXG5mdW5jdGlvbiBOb3RTZXRUcmFuc2l0aW9uKHRhcmdldCwgc2V0KSB7XG5cdFNldFRyYW5zaXRpb24uY2FsbCh0aGlzLCB0YXJnZXQsIHNldCk7XG5cdHRoaXMuc2VyaWFsaXphdGlvblR5cGUgPSBUcmFuc2l0aW9uLk5PVF9TRVQ7XG5cdHJldHVybiB0aGlzO1xufVxuXG5Ob3RTZXRUcmFuc2l0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU2V0VHJhbnNpdGlvbi5wcm90b3R5cGUpO1xuTm90U2V0VHJhbnNpdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBOb3RTZXRUcmFuc2l0aW9uO1xuXG5Ob3RTZXRUcmFuc2l0aW9uLnByb3RvdHlwZS5tYXRjaGVzID0gZnVuY3Rpb24oc3ltYm9sLCBtaW5Wb2NhYlN5bWJvbCwgIG1heFZvY2FiU3ltYm9sKSB7XG5cdHJldHVybiBzeW1ib2wgPj0gbWluVm9jYWJTeW1ib2wgJiYgc3ltYm9sIDw9IG1heFZvY2FiU3ltYm9sICYmXG5cdFx0XHQhU2V0VHJhbnNpdGlvbi5wcm90b3R5cGUubWF0Y2hlcy5jYWxsKHRoaXMsIHN5bWJvbCwgbWluVm9jYWJTeW1ib2wsIG1heFZvY2FiU3ltYm9sKTtcbn07XG5cbk5vdFNldFRyYW5zaXRpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiAnficgKyBTZXRUcmFuc2l0aW9uLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHRoaXMpO1xufTtcblxuZnVuY3Rpb24gV2lsZGNhcmRUcmFuc2l0aW9uKHRhcmdldCkge1xuXHRUcmFuc2l0aW9uLmNhbGwodGhpcywgdGFyZ2V0KTtcblx0dGhpcy5zZXJpYWxpemF0aW9uVHlwZSA9IFRyYW5zaXRpb24uV0lMRENBUkQ7XG5cdHJldHVybiB0aGlzO1xufVxuXG5XaWxkY2FyZFRyYW5zaXRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUcmFuc2l0aW9uLnByb3RvdHlwZSk7XG5XaWxkY2FyZFRyYW5zaXRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gV2lsZGNhcmRUcmFuc2l0aW9uO1xuXG5cbldpbGRjYXJkVHJhbnNpdGlvbi5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKHN5bWJvbCwgbWluVm9jYWJTeW1ib2wsICBtYXhWb2NhYlN5bWJvbCkge1xuXHRyZXR1cm4gc3ltYm9sID49IG1pblZvY2FiU3ltYm9sICYmIHN5bWJvbCA8PSBtYXhWb2NhYlN5bWJvbDtcbn07XG5cbldpbGRjYXJkVHJhbnNpdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIFwiLlwiO1xufTtcblxuZnVuY3Rpb24gUHJlY2VkZW5jZVByZWRpY2F0ZVRyYW5zaXRpb24odGFyZ2V0LCBwcmVjZWRlbmNlKSB7XG5cdEFic3RyYWN0UHJlZGljYXRlVHJhbnNpdGlvbi5jYWxsKHRoaXMsIHRhcmdldCk7XG4gICAgdGhpcy5zZXJpYWxpemF0aW9uVHlwZSA9IFRyYW5zaXRpb24uUFJFQ0VERU5DRTtcbiAgICB0aGlzLnByZWNlZGVuY2UgPSBwcmVjZWRlbmNlO1xuICAgIHRoaXMuaXNFcHNpbG9uID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuUHJlY2VkZW5jZVByZWRpY2F0ZVRyYW5zaXRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShBYnN0cmFjdFByZWRpY2F0ZVRyYW5zaXRpb24ucHJvdG90eXBlKTtcblByZWNlZGVuY2VQcmVkaWNhdGVUcmFuc2l0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFByZWNlZGVuY2VQcmVkaWNhdGVUcmFuc2l0aW9uO1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUubWF0Y2hlcyA9IGZ1bmN0aW9uKHN5bWJvbCwgbWluVm9jYWJTeW1ib2wsICBtYXhWb2NhYlN5bWJvbCkge1xuXHRyZXR1cm4gZmFsc2U7XG59O1xuXG5QcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbi5wcm90b3R5cGUuZ2V0UHJlZGljYXRlID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiBuZXcgUHJlY2VkZW5jZVByZWRpY2F0ZSh0aGlzLnByZWNlZGVuY2UpO1xufTtcblxuUHJlY2VkZW5jZVByZWRpY2F0ZVRyYW5zaXRpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnByZWNlZGVuY2UgKyBcIiA+PSBfcFwiO1xufTtcblxuZXhwb3J0cy5UcmFuc2l0aW9uID0gVHJhbnNpdGlvbjtcbmV4cG9ydHMuQXRvbVRyYW5zaXRpb24gPSBBdG9tVHJhbnNpdGlvbjtcbmV4cG9ydHMuU2V0VHJhbnNpdGlvbiA9IFNldFRyYW5zaXRpb247XG5leHBvcnRzLk5vdFNldFRyYW5zaXRpb24gPSBOb3RTZXRUcmFuc2l0aW9uO1xuZXhwb3J0cy5SdWxlVHJhbnNpdGlvbiA9IFJ1bGVUcmFuc2l0aW9uO1xuZXhwb3J0cy5BY3Rpb25UcmFuc2l0aW9uID0gQWN0aW9uVHJhbnNpdGlvbjtcbmV4cG9ydHMuRXBzaWxvblRyYW5zaXRpb24gPSBFcHNpbG9uVHJhbnNpdGlvbjtcbmV4cG9ydHMuUmFuZ2VUcmFuc2l0aW9uID0gUmFuZ2VUcmFuc2l0aW9uO1xuZXhwb3J0cy5XaWxkY2FyZFRyYW5zaXRpb24gPSBXaWxkY2FyZFRyYW5zaXRpb247XG5leHBvcnRzLlByZWRpY2F0ZVRyYW5zaXRpb24gPSBQcmVkaWNhdGVUcmFuc2l0aW9uO1xuZXhwb3J0cy5QcmVjZWRlbmNlUHJlZGljYXRlVHJhbnNpdGlvbiA9IFByZWNlZGVuY2VQcmVkaWNhdGVUcmFuc2l0aW9uO1xuZXhwb3J0cy5BYnN0cmFjdFByZWRpY2F0ZVRyYW5zaXRpb24gPSBBYnN0cmFjdFByZWRpY2F0ZVRyYW5zaXRpb247IiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG5leHBvcnRzLkFUTiA9IHJlcXVpcmUoJy4vQVROJykuQVROO1xuZXhwb3J0cy5BVE5EZXNlcmlhbGl6ZXIgPSByZXF1aXJlKCcuL0FUTkRlc2VyaWFsaXplcicpLkFUTkRlc2VyaWFsaXplcjtcbmV4cG9ydHMuTGV4ZXJBVE5TaW11bGF0b3IgPSByZXF1aXJlKCcuL0xleGVyQVROU2ltdWxhdG9yJykuTGV4ZXJBVE5TaW11bGF0b3I7XG5leHBvcnRzLlBhcnNlckFUTlNpbXVsYXRvciA9IHJlcXVpcmUoJy4vUGFyc2VyQVROU2ltdWxhdG9yJykuUGFyc2VyQVROU2ltdWxhdG9yO1xuZXhwb3J0cy5QcmVkaWN0aW9uTW9kZSA9IHJlcXVpcmUoJy4vUHJlZGljdGlvbk1vZGUnKS5QcmVkaWN0aW9uTW9kZTtcbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbnZhciBTZXQgPSByZXF1aXJlKFwiLi4vVXRpbHNcIikuU2V0O1xudmFyIERGQVN0YXRlID0gcmVxdWlyZSgnLi9ERkFTdGF0ZScpLkRGQVN0YXRlO1xudmFyIFN0YXJMb29wRW50cnlTdGF0ZSA9IHJlcXVpcmUoJy4uL2F0bi9BVE5TdGF0ZScpLlN0YXJMb29wRW50cnlTdGF0ZTtcbnZhciBBVE5Db25maWdTZXQgPSByZXF1aXJlKCcuLy4uL2F0bi9BVE5Db25maWdTZXQnKS5BVE5Db25maWdTZXQ7XG52YXIgREZBU2VyaWFsaXplciA9IHJlcXVpcmUoJy4vREZBU2VyaWFsaXplcicpLkRGQVNlcmlhbGl6ZXI7XG52YXIgTGV4ZXJERkFTZXJpYWxpemVyID0gcmVxdWlyZSgnLi9ERkFTZXJpYWxpemVyJykuTGV4ZXJERkFTZXJpYWxpemVyO1xuXG5cblxuZnVuY3Rpb24gREZBKGF0blN0YXJ0U3RhdGUsIGRlY2lzaW9uKSB7XG5cdGlmIChkZWNpc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0ZGVjaXNpb24gPSAwO1xuXHR9XG5cdC8vIEZyb20gd2hpY2ggQVROIHN0YXRlIGRpZCB3ZSBjcmVhdGUgdGhpcyBERkE/XG5cdHRoaXMuYXRuU3RhcnRTdGF0ZSA9IGF0blN0YXJ0U3RhdGU7XG5cdHRoaXMuZGVjaXNpb24gPSBkZWNpc2lvbjtcblx0Ly8gQSBzZXQgb2YgYWxsIERGQSBzdGF0ZXMuIFVzZSB7QGxpbmsgTWFwfSBzbyB3ZSBjYW4gZ2V0IG9sZCBzdGF0ZSBiYWNrXG5cdC8vICh7QGxpbmsgU2V0fSBvbmx5IGFsbG93cyB5b3UgdG8gc2VlIGlmIGl0J3MgdGhlcmUpLlxuXHR0aGlzLl9zdGF0ZXMgPSBuZXcgU2V0KCk7XG5cdHRoaXMuczAgPSBudWxsO1xuXHQvLyB7QGNvZGUgdHJ1ZX0gaWYgdGhpcyBERkEgaXMgZm9yIGEgcHJlY2VkZW5jZSBkZWNpc2lvbjsgb3RoZXJ3aXNlLFxuXHQvLyB7QGNvZGUgZmFsc2V9LiBUaGlzIGlzIHRoZSBiYWNraW5nIGZpZWxkIGZvciB7QGxpbmsgLy9pc1ByZWNlZGVuY2VEZmF9LFxuXHQvLyB7QGxpbmsgLy9zZXRQcmVjZWRlbmNlRGZhfS5cblx0dGhpcy5wcmVjZWRlbmNlRGZhID0gZmFsc2U7XG4gICAgaWYgKGF0blN0YXJ0U3RhdGUgaW5zdGFuY2VvZiBTdGFyTG9vcEVudHJ5U3RhdGUpXG4gICAge1xuICAgICAgICBpZiAoYXRuU3RhcnRTdGF0ZS5pc1ByZWNlZGVuY2VEZWNpc2lvbikge1xuICAgICAgICAgICAgdGhpcy5wcmVjZWRlbmNlRGZhID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBwcmVjZWRlbmNlU3RhdGUgPSBuZXcgREZBU3RhdGUobnVsbCwgbmV3IEFUTkNvbmZpZ1NldCgpKTtcbiAgICAgICAgICAgIHByZWNlZGVuY2VTdGF0ZS5lZGdlcyA9IFtdO1xuICAgICAgICAgICAgcHJlY2VkZW5jZVN0YXRlLmlzQWNjZXB0U3RhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIHByZWNlZGVuY2VTdGF0ZS5yZXF1aXJlc0Z1bGxDb250ZXh0ID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnMwID0gcHJlY2VkZW5jZVN0YXRlO1xuICAgICAgICB9XG4gICAgfVxuXHRyZXR1cm4gdGhpcztcbn1cblxuLy8gR2V0IHRoZSBzdGFydCBzdGF0ZSBmb3IgYSBzcGVjaWZpYyBwcmVjZWRlbmNlIHZhbHVlLlxuLy9cbi8vIEBwYXJhbSBwcmVjZWRlbmNlIFRoZSBjdXJyZW50IHByZWNlZGVuY2UuXG4vLyBAcmV0dXJuIFRoZSBzdGFydCBzdGF0ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBzcGVjaWZpZWQgcHJlY2VkZW5jZSwgb3Jcbi8vIHtAY29kZSBudWxsfSBpZiBubyBzdGFydCBzdGF0ZSBleGlzdHMgZm9yIHRoZSBzcGVjaWZpZWQgcHJlY2VkZW5jZS5cbi8vXG4vLyBAdGhyb3dzIElsbGVnYWxTdGF0ZUV4Y2VwdGlvbiBpZiB0aGlzIGlzIG5vdCBhIHByZWNlZGVuY2UgREZBLlxuLy8gQHNlZSAvL2lzUHJlY2VkZW5jZURmYSgpXG5cbkRGQS5wcm90b3R5cGUuZ2V0UHJlY2VkZW5jZVN0YXJ0U3RhdGUgPSBmdW5jdGlvbihwcmVjZWRlbmNlKSB7XG5cdGlmICghKHRoaXMucHJlY2VkZW5jZURmYSkpIHtcblx0XHR0aHJvdyAoXCJPbmx5IHByZWNlZGVuY2UgREZBcyBtYXkgY29udGFpbiBhIHByZWNlZGVuY2Ugc3RhcnQgc3RhdGUuXCIpO1xuXHR9XG5cdC8vIHMwLmVkZ2VzIGlzIG5ldmVyIG51bGwgZm9yIGEgcHJlY2VkZW5jZSBERkFcblx0aWYgKHByZWNlZGVuY2UgPCAwIHx8IHByZWNlZGVuY2UgPj0gdGhpcy5zMC5lZGdlcy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXHRyZXR1cm4gdGhpcy5zMC5lZGdlc1twcmVjZWRlbmNlXSB8fCBudWxsO1xufTtcblxuLy8gU2V0IHRoZSBzdGFydCBzdGF0ZSBmb3IgYSBzcGVjaWZpYyBwcmVjZWRlbmNlIHZhbHVlLlxuLy9cbi8vIEBwYXJhbSBwcmVjZWRlbmNlIFRoZSBjdXJyZW50IHByZWNlZGVuY2UuXG4vLyBAcGFyYW0gc3RhcnRTdGF0ZSBUaGUgc3RhcnQgc3RhdGUgY29ycmVzcG9uZGluZyB0byB0aGUgc3BlY2lmaWVkXG4vLyBwcmVjZWRlbmNlLlxuLy9cbi8vIEB0aHJvd3MgSWxsZWdhbFN0YXRlRXhjZXB0aW9uIGlmIHRoaXMgaXMgbm90IGEgcHJlY2VkZW5jZSBERkEuXG4vLyBAc2VlIC8vaXNQcmVjZWRlbmNlRGZhKClcbi8vXG5ERkEucHJvdG90eXBlLnNldFByZWNlZGVuY2VTdGFydFN0YXRlID0gZnVuY3Rpb24ocHJlY2VkZW5jZSwgc3RhcnRTdGF0ZSkge1xuXHRpZiAoISh0aGlzLnByZWNlZGVuY2VEZmEpKSB7XG5cdFx0dGhyb3cgKFwiT25seSBwcmVjZWRlbmNlIERGQXMgbWF5IGNvbnRhaW4gYSBwcmVjZWRlbmNlIHN0YXJ0IHN0YXRlLlwiKTtcblx0fVxuXHRpZiAocHJlY2VkZW5jZSA8IDApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBzeW5jaHJvbml6YXRpb24gb24gczAgaGVyZSBpcyBvay4gd2hlbiB0aGUgREZBIGlzIHR1cm5lZCBpbnRvIGFcblx0Ly8gcHJlY2VkZW5jZSBERkEsIHMwIHdpbGwgYmUgaW5pdGlhbGl6ZWQgb25jZSBhbmQgbm90IHVwZGF0ZWQgYWdhaW5cblx0Ly8gczAuZWRnZXMgaXMgbmV2ZXIgbnVsbCBmb3IgYSBwcmVjZWRlbmNlIERGQVxuXHR0aGlzLnMwLmVkZ2VzW3ByZWNlZGVuY2VdID0gc3RhcnRTdGF0ZTtcbn07XG5cbi8vXG4vLyBTZXRzIHdoZXRoZXIgdGhpcyBpcyBhIHByZWNlZGVuY2UgREZBLiBJZiB0aGUgc3BlY2lmaWVkIHZhbHVlIGRpZmZlcnNcbi8vIGZyb20gdGhlIGN1cnJlbnQgREZBIGNvbmZpZ3VyYXRpb24sIHRoZSBmb2xsb3dpbmcgYWN0aW9ucyBhcmUgdGFrZW47XG4vLyBvdGhlcndpc2Ugbm8gY2hhbmdlcyBhcmUgbWFkZSB0byB0aGUgY3VycmVudCBERkEuXG4vL1xuLy8gPHVsPlxuLy8gPGxpPlRoZSB7QGxpbmsgLy9zdGF0ZXN9IG1hcCBpcyBjbGVhcmVkPC9saT5cbi8vIDxsaT5JZiB7QGNvZGUgcHJlY2VkZW5jZURmYX0gaXMge0Bjb2RlIGZhbHNlfSwgdGhlIGluaXRpYWwgc3RhdGVcbi8vIHtAbGluayAvL3MwfSBpcyBzZXQgdG8ge0Bjb2RlIG51bGx9OyBvdGhlcndpc2UsIGl0IGlzIGluaXRpYWxpemVkIHRvIGEgbmV3XG4vLyB7QGxpbmsgREZBU3RhdGV9IHdpdGggYW4gZW1wdHkgb3V0Z29pbmcge0BsaW5rIERGQVN0YXRlLy9lZGdlc30gYXJyYXkgdG9cbi8vIHN0b3JlIHRoZSBzdGFydCBzdGF0ZXMgZm9yIGluZGl2aWR1YWwgcHJlY2VkZW5jZSB2YWx1ZXMuPC9saT5cbi8vIDxsaT5UaGUge0BsaW5rIC8vcHJlY2VkZW5jZURmYX0gZmllbGQgaXMgdXBkYXRlZDwvbGk+XG4vLyA8L3VsPlxuLy9cbi8vIEBwYXJhbSBwcmVjZWRlbmNlRGZhIHtAY29kZSB0cnVlfSBpZiB0aGlzIGlzIGEgcHJlY2VkZW5jZSBERkE7IG90aGVyd2lzZSxcbi8vIHtAY29kZSBmYWxzZX1cblxuREZBLnByb3RvdHlwZS5zZXRQcmVjZWRlbmNlRGZhID0gZnVuY3Rpb24ocHJlY2VkZW5jZURmYSkge1xuXHRpZiAodGhpcy5wcmVjZWRlbmNlRGZhIT09cHJlY2VkZW5jZURmYSkge1xuXHRcdHRoaXMuX3N0YXRlcyA9IG5ldyBERkFTdGF0ZXNTZXQoKTtcblx0XHRpZiAocHJlY2VkZW5jZURmYSkge1xuXHRcdFx0dmFyIHByZWNlZGVuY2VTdGF0ZSA9IG5ldyBERkFTdGF0ZShudWxsLCBuZXcgQVROQ29uZmlnU2V0KCkpO1xuXHRcdFx0cHJlY2VkZW5jZVN0YXRlLmVkZ2VzID0gW107XG5cdFx0XHRwcmVjZWRlbmNlU3RhdGUuaXNBY2NlcHRTdGF0ZSA9IGZhbHNlO1xuXHRcdFx0cHJlY2VkZW5jZVN0YXRlLnJlcXVpcmVzRnVsbENvbnRleHQgPSBmYWxzZTtcblx0XHRcdHRoaXMuczAgPSBwcmVjZWRlbmNlU3RhdGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuczAgPSBudWxsO1xuXHRcdH1cblx0XHR0aGlzLnByZWNlZGVuY2VEZmEgPSBwcmVjZWRlbmNlRGZhO1xuXHR9XG59O1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoREZBLnByb3RvdHlwZSwgXCJzdGF0ZXNcIiwge1xuXHRnZXQgOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5fc3RhdGVzO1xuXHR9XG59KTtcblxuLy8gUmV0dXJuIGEgbGlzdCBvZiBhbGwgc3RhdGVzIGluIHRoaXMgREZBLCBvcmRlcmVkIGJ5IHN0YXRlIG51bWJlci5cbkRGQS5wcm90b3R5cGUuc29ydGVkU3RhdGVzID0gZnVuY3Rpb24oKSB7XG5cdHZhciBsaXN0ID0gdGhpcy5fc3RhdGVzLnZhbHVlcygpO1xuXHRyZXR1cm4gbGlzdC5zb3J0KGZ1bmN0aW9uKGEsIGIpIHtcblx0XHRyZXR1cm4gYS5zdGF0ZU51bWJlciAtIGIuc3RhdGVOdW1iZXI7XG5cdH0pO1xufTtcblxuREZBLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKGxpdGVyYWxOYW1lcywgc3ltYm9saWNOYW1lcykge1xuXHRsaXRlcmFsTmFtZXMgPSBsaXRlcmFsTmFtZXMgfHwgbnVsbDtcblx0c3ltYm9saWNOYW1lcyA9IHN5bWJvbGljTmFtZXMgfHwgbnVsbDtcblx0aWYgKHRoaXMuczAgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXHR2YXIgc2VyaWFsaXplciA9IG5ldyBERkFTZXJpYWxpemVyKHRoaXMsIGxpdGVyYWxOYW1lcywgc3ltYm9saWNOYW1lcyk7XG5cdHJldHVybiBzZXJpYWxpemVyLnRvU3RyaW5nKCk7XG59O1xuXG5ERkEucHJvdG90eXBlLnRvTGV4ZXJTdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuczAgPT09IG51bGwpIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXHR2YXIgc2VyaWFsaXplciA9IG5ldyBMZXhlckRGQVNlcmlhbGl6ZXIodGhpcyk7XG5cdHJldHVybiBzZXJpYWxpemVyLnRvU3RyaW5nKCk7XG59O1xuXG5leHBvcnRzLkRGQSA9IERGQTtcbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxuLy8gQSBERkEgd2Fsa2VyIHRoYXQga25vd3MgaG93IHRvIGR1bXAgdGhlbSB0byBzZXJpYWxpemVkIHN0cmluZ3MuIy9cblxuXG5mdW5jdGlvbiBERkFTZXJpYWxpemVyKGRmYSwgbGl0ZXJhbE5hbWVzLCBzeW1ib2xpY05hbWVzKSB7XG5cdHRoaXMuZGZhID0gZGZhO1xuXHR0aGlzLmxpdGVyYWxOYW1lcyA9IGxpdGVyYWxOYW1lcyB8fCBbXTtcblx0dGhpcy5zeW1ib2xpY05hbWVzID0gc3ltYm9saWNOYW1lcyB8fCBbXTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkRGQVNlcmlhbGl6ZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICBpZih0aGlzLmRmYS5zMCA9PT0gbnVsbCkge1xuICAgICAgIHJldHVybiBudWxsO1xuICAgfVxuICAgdmFyIGJ1ZiA9IFwiXCI7XG4gICB2YXIgc3RhdGVzID0gdGhpcy5kZmEuc29ydGVkU3RhdGVzKCk7XG4gICBmb3IodmFyIGk9MDtpPHN0YXRlcy5sZW5ndGg7aSsrKSB7XG4gICAgICAgdmFyIHMgPSBzdGF0ZXNbaV07XG4gICAgICAgaWYocy5lZGdlcyE9PW51bGwpIHtcbiAgICAgICAgICAgIHZhciBuID0gcy5lZGdlcy5sZW5ndGg7XG4gICAgICAgICAgICBmb3IodmFyIGo9MDtqPG47aisrKSB7XG4gICAgICAgICAgICAgICAgdmFyIHQgPSBzLmVkZ2VzW2pdIHx8IG51bGw7XG4gICAgICAgICAgICAgICAgaWYodCE9PW51bGwgJiYgdC5zdGF0ZU51bWJlciAhPT0gMHg3RkZGRkZGRikge1xuICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYuY29uY2F0KHRoaXMuZ2V0U3RhdGVTdHJpbmcocykpO1xuICAgICAgICAgICAgICAgICAgICBidWYgPSBidWYuY29uY2F0KFwiLVwiKTtcbiAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmLmNvbmNhdCh0aGlzLmdldEVkZ2VMYWJlbChqKSk7XG4gICAgICAgICAgICAgICAgICAgIGJ1ZiA9IGJ1Zi5jb25jYXQoXCItPlwiKTtcbiAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmLmNvbmNhdCh0aGlzLmdldFN0YXRlU3RyaW5nKHQpKTtcbiAgICAgICAgICAgICAgICAgICAgYnVmID0gYnVmLmNvbmNhdCgnXFxuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgIH1cbiAgIH1cbiAgIHJldHVybiBidWYubGVuZ3RoPT09MCA/IG51bGwgOiBidWY7XG59O1xuXG5ERkFTZXJpYWxpemVyLnByb3RvdHlwZS5nZXRFZGdlTGFiZWwgPSBmdW5jdGlvbihpKSB7XG4gICAgaWYgKGk9PT0wKSB7XG4gICAgICAgIHJldHVybiBcIkVPRlwiO1xuICAgIH0gZWxzZSBpZih0aGlzLmxpdGVyYWxOYW1lcyAhPT1udWxsIHx8IHRoaXMuc3ltYm9saWNOYW1lcyE9PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubGl0ZXJhbE5hbWVzW2ktMV0gfHwgdGhpcy5zeW1ib2xpY05hbWVzW2ktMV07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoaS0xKTtcbiAgICB9XG59O1xuXG5ERkFTZXJpYWxpemVyLnByb3RvdHlwZS5nZXRTdGF0ZVN0cmluZyA9IGZ1bmN0aW9uKHMpIHtcbiAgICB2YXIgYmFzZVN0YXRlU3RyID0gKCBzLmlzQWNjZXB0U3RhdGUgPyBcIjpcIiA6IFwiXCIpICsgXCJzXCIgKyBzLnN0YXRlTnVtYmVyICsgKCBzLnJlcXVpcmVzRnVsbENvbnRleHQgPyBcIl5cIiA6IFwiXCIpO1xuICAgIGlmKHMuaXNBY2NlcHRTdGF0ZSkge1xuICAgICAgICBpZiAocy5wcmVkaWNhdGVzICE9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gYmFzZVN0YXRlU3RyICsgXCI9PlwiICsgcy5wcmVkaWNhdGVzLnRvU3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYmFzZVN0YXRlU3RyICsgXCI9PlwiICsgcy5wcmVkaWN0aW9uLnRvU3RyaW5nKCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gYmFzZVN0YXRlU3RyO1xuICAgIH1cbn07XG5cbmZ1bmN0aW9uIExleGVyREZBU2VyaWFsaXplcihkZmEpIHtcblx0REZBU2VyaWFsaXplci5jYWxsKHRoaXMsIGRmYSwgbnVsbCk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5MZXhlckRGQVNlcmlhbGl6ZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShERkFTZXJpYWxpemVyLnByb3RvdHlwZSk7XG5MZXhlckRGQVNlcmlhbGl6ZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGV4ZXJERkFTZXJpYWxpemVyO1xuXG5MZXhlckRGQVNlcmlhbGl6ZXIucHJvdG90eXBlLmdldEVkZ2VMYWJlbCA9IGZ1bmN0aW9uKGkpIHtcblx0cmV0dXJuIFwiJ1wiICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKSArIFwiJ1wiO1xufTtcblxuZXhwb3J0cy5ERkFTZXJpYWxpemVyID0gREZBU2VyaWFsaXplcjtcbmV4cG9ydHMuTGV4ZXJERkFTZXJpYWxpemVyID0gTGV4ZXJERkFTZXJpYWxpemVyO1xuXG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy8vXG5cbnZhciBBVE5Db25maWdTZXQgPSByZXF1aXJlKCcuLy4uL2F0bi9BVE5Db25maWdTZXQnKS5BVE5Db25maWdTZXQ7XG52YXIgVXRpbHMgPSByZXF1aXJlKCcuLy4uL1V0aWxzJyk7XG52YXIgSGFzaCA9IFV0aWxzLkhhc2g7XG52YXIgU2V0ID0gVXRpbHMuU2V0O1xuXG4vLyBNYXAgYSBwcmVkaWNhdGUgdG8gYSBwcmVkaWN0ZWQgYWx0ZXJuYXRpdmUuLy8vXG5cbmZ1bmN0aW9uIFByZWRQcmVkaWN0aW9uKHByZWQsIGFsdCkge1xuXHR0aGlzLmFsdCA9IGFsdDtcblx0dGhpcy5wcmVkID0gcHJlZDtcblx0cmV0dXJuIHRoaXM7XG59XG5cblByZWRQcmVkaWN0aW9uLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gXCIoXCIgKyB0aGlzLnByZWQgKyBcIiwgXCIgKyB0aGlzLmFsdCArIFwiKVwiO1xufTtcblxuLy8gQSBERkEgc3RhdGUgcmVwcmVzZW50cyBhIHNldCBvZiBwb3NzaWJsZSBBVE4gY29uZmlndXJhdGlvbnMuXG4vLyBBcyBBaG8sIFNldGhpLCBVbGxtYW4gcC4gMTE3IHNheXMgXCJUaGUgREZBIHVzZXMgaXRzIHN0YXRlXG4vLyB0byBrZWVwIHRyYWNrIG9mIGFsbCBwb3NzaWJsZSBzdGF0ZXMgdGhlIEFUTiBjYW4gYmUgaW4gYWZ0ZXJcbi8vIHJlYWRpbmcgZWFjaCBpbnB1dCBzeW1ib2wuIFRoYXQgaXMgdG8gc2F5LCBhZnRlciByZWFkaW5nXG4vLyBpbnB1dCBhMWEyLi5hbiwgdGhlIERGQSBpcyBpbiBhIHN0YXRlIHRoYXQgcmVwcmVzZW50cyB0aGVcbi8vIHN1YnNldCBUIG9mIHRoZSBzdGF0ZXMgb2YgdGhlIEFUTiB0aGF0IGFyZSByZWFjaGFibGUgZnJvbSB0aGVcbi8vIEFUTidzIHN0YXJ0IHN0YXRlIGFsb25nIHNvbWUgcGF0aCBsYWJlbGVkIGExYTIuLmFuLlwiXG4vLyBJbiBjb252ZW50aW9uYWwgTkZBJnJhcnI7REZBIGNvbnZlcnNpb24sIHRoZXJlZm9yZSwgdGhlIHN1YnNldCBUXG4vLyB3b3VsZCBiZSBhIGJpdHNldCByZXByZXNlbnRpbmcgdGhlIHNldCBvZiBzdGF0ZXMgdGhlXG4vLyBBVE4gY291bGQgYmUgaW4uIFdlIG5lZWQgdG8gdHJhY2sgdGhlIGFsdCBwcmVkaWN0ZWQgYnkgZWFjaFxuLy8gc3RhdGUgYXMgd2VsbCwgaG93ZXZlci4gTW9yZSBpbXBvcnRhbnRseSwgd2UgbmVlZCB0byBtYWludGFpblxuLy8gYSBzdGFjayBvZiBzdGF0ZXMsIHRyYWNraW5nIHRoZSBjbG9zdXJlIG9wZXJhdGlvbnMgYXMgdGhleVxuLy8ganVtcCBmcm9tIHJ1bGUgdG8gcnVsZSwgZW11bGF0aW5nIHJ1bGUgaW52b2NhdGlvbnMgKG1ldGhvZCBjYWxscykuXG4vLyBJIGhhdmUgdG8gYWRkIGEgc3RhY2sgdG8gc2ltdWxhdGUgdGhlIHByb3BlciBsb29rYWhlYWQgc2VxdWVuY2VzIGZvclxuLy8gdGhlIHVuZGVybHlpbmcgTEwgZ3JhbW1hciBmcm9tIHdoaWNoIHRoZSBBVE4gd2FzIGRlcml2ZWQuXG4vL1xuLy8gPHA+SSB1c2UgYSBzZXQgb2YgQVROQ29uZmlnIG9iamVjdHMgbm90IHNpbXBsZSBzdGF0ZXMuIEFuIEFUTkNvbmZpZ1xuLy8gaXMgYm90aCBhIHN0YXRlIChhbGEgbm9ybWFsIGNvbnZlcnNpb24pIGFuZCBhIFJ1bGVDb250ZXh0IGRlc2NyaWJpbmdcbi8vIHRoZSBjaGFpbiBvZiBydWxlcyAoaWYgYW55KSBmb2xsb3dlZCB0byBhcnJpdmUgYXQgdGhhdCBzdGF0ZS48L3A+XG4vL1xuLy8gPHA+QSBERkEgc3RhdGUgbWF5IGhhdmUgbXVsdGlwbGUgcmVmZXJlbmNlcyB0byBhIHBhcnRpY3VsYXIgc3RhdGUsXG4vLyBidXQgd2l0aCBkaWZmZXJlbnQgQVROIGNvbnRleHRzICh3aXRoIHNhbWUgb3IgZGlmZmVyZW50IGFsdHMpXG4vLyBtZWFuaW5nIHRoYXQgc3RhdGUgd2FzIHJlYWNoZWQgdmlhIGEgZGlmZmVyZW50IHNldCBvZiBydWxlIGludm9jYXRpb25zLjwvcD5cbi8vIC9cblxuZnVuY3Rpb24gREZBU3RhdGUoc3RhdGVOdW1iZXIsIGNvbmZpZ3MpIHtcblx0aWYgKHN0YXRlTnVtYmVyID09PSBudWxsKSB7XG5cdFx0c3RhdGVOdW1iZXIgPSAtMTtcblx0fVxuXHRpZiAoY29uZmlncyA9PT0gbnVsbCkge1xuXHRcdGNvbmZpZ3MgPSBuZXcgQVROQ29uZmlnU2V0KCk7XG5cdH1cblx0dGhpcy5zdGF0ZU51bWJlciA9IHN0YXRlTnVtYmVyO1xuXHR0aGlzLmNvbmZpZ3MgPSBjb25maWdzO1xuXHQvLyB7QGNvZGUgZWRnZXNbc3ltYm9sXX0gcG9pbnRzIHRvIHRhcmdldCBvZiBzeW1ib2wuIFNoaWZ0IHVwIGJ5IDEgc28gKC0xKVxuXHQvLyB7QGxpbmsgVG9rZW4vL0VPRn0gbWFwcyB0byB7QGNvZGUgZWRnZXNbMF19LlxuXHR0aGlzLmVkZ2VzID0gbnVsbDtcblx0dGhpcy5pc0FjY2VwdFN0YXRlID0gZmFsc2U7XG5cdC8vIGlmIGFjY2VwdCBzdGF0ZSwgd2hhdCB0dHlwZSBkbyB3ZSBtYXRjaCBvciBhbHQgZG8gd2UgcHJlZGljdD9cblx0Ly8gVGhpcyBpcyBzZXQgdG8ge0BsaW5rIEFUTi8vSU5WQUxJRF9BTFRfTlVNQkVSfSB3aGVuIHtAbGlua1xuXHQvLyAvL3ByZWRpY2F0ZXN9e0Bjb2RlICE9bnVsbH0gb3Jcblx0Ly8ge0BsaW5rIC8vcmVxdWlyZXNGdWxsQ29udGV4dH0uXG5cdHRoaXMucHJlZGljdGlvbiA9IDA7XG5cdHRoaXMubGV4ZXJBY3Rpb25FeGVjdXRvciA9IG51bGw7XG5cdC8vIEluZGljYXRlcyB0aGF0IHRoaXMgc3RhdGUgd2FzIGNyZWF0ZWQgZHVyaW5nIFNMTCBwcmVkaWN0aW9uIHRoYXRcblx0Ly8gZGlzY292ZXJlZCBhIGNvbmZsaWN0IGJldHdlZW4gdGhlIGNvbmZpZ3VyYXRpb25zIGluIHRoZSBzdGF0ZS4gRnV0dXJlXG5cdC8vIHtAbGluayBQYXJzZXJBVE5TaW11bGF0b3IvL2V4ZWNBVE59IGludm9jYXRpb25zIGltbWVkaWF0ZWx5IGp1bXBlZCBkb2luZ1xuXHQvLyBmdWxsIGNvbnRleHQgcHJlZGljdGlvbiBpZiB0aGlzIGZpZWxkIGlzIHRydWUuXG5cdHRoaXMucmVxdWlyZXNGdWxsQ29udGV4dCA9IGZhbHNlO1xuXHQvLyBEdXJpbmcgU0xMIHBhcnNpbmcsIHRoaXMgaXMgYSBsaXN0IG9mIHByZWRpY2F0ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZVxuXHQvLyBBVE4gY29uZmlndXJhdGlvbnMgb2YgdGhlIERGQSBzdGF0ZS4gV2hlbiB3ZSBoYXZlIHByZWRpY2F0ZXMsXG5cdC8vIHtAbGluayAvL3JlcXVpcmVzRnVsbENvbnRleHR9IGlzIHtAY29kZSBmYWxzZX0gc2luY2UgZnVsbCBjb250ZXh0XG5cdC8vIHByZWRpY3Rpb24gZXZhbHVhdGVzIHByZWRpY2F0ZXNcblx0Ly8gb24tdGhlLWZseS4gSWYgdGhpcyBpcyBub3QgbnVsbCwgdGhlbiB7QGxpbmsgLy9wcmVkaWN0aW9ufSBpc1xuXHQvLyB7QGxpbmsgQVROLy9JTlZBTElEX0FMVF9OVU1CRVJ9LlxuXHQvL1xuXHQvLyA8cD5XZSBvbmx5IHVzZSB0aGVzZSBmb3Igbm9uLXtAbGluayAvL3JlcXVpcmVzRnVsbENvbnRleHR9IGJ1dFxuXHQvLyBjb25mbGljdGluZyBzdGF0ZXMuIFRoYXRcblx0Ly8gbWVhbnMgd2Uga25vdyBmcm9tIHRoZSBjb250ZXh0IChpdCdzICQgb3Igd2UgZG9uJ3QgZGlwIGludG8gb3V0ZXJcblx0Ly8gY29udGV4dCkgdGhhdCBpdCdzIGFuIGFtYmlndWl0eSBub3QgYSBjb25mbGljdC48L3A+XG5cdC8vXG5cdC8vIDxwPlRoaXMgbGlzdCBpcyBjb21wdXRlZCBieSB7QGxpbmtcblx0Ly8gUGFyc2VyQVROU2ltdWxhdG9yLy9wcmVkaWNhdGVERkFTdGF0ZX0uPC9wPlxuXHR0aGlzLnByZWRpY2F0ZXMgPSBudWxsO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuLy8gR2V0IHRoZSBzZXQgb2YgYWxsIGFsdHMgbWVudGlvbmVkIGJ5IGFsbCBBVE4gY29uZmlndXJhdGlvbnMgaW4gdGhpc1xuLy8gREZBIHN0YXRlLlxuREZBU3RhdGUucHJvdG90eXBlLmdldEFsdFNldCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgYWx0cyA9IG5ldyBTZXQoKTtcblx0aWYgKHRoaXMuY29uZmlncyAhPT0gbnVsbCkge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb25maWdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgYyA9IHRoaXMuY29uZmlnc1tpXTtcblx0XHRcdGFsdHMuYWRkKGMuYWx0KTtcblx0XHR9XG5cdH1cblx0aWYgKGFsdHMubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGFsdHM7XG5cdH1cbn07XG5cbi8vIFR3byB7QGxpbmsgREZBU3RhdGV9IGluc3RhbmNlcyBhcmUgZXF1YWwgaWYgdGhlaXIgQVROIGNvbmZpZ3VyYXRpb24gc2V0c1xuLy8gYXJlIHRoZSBzYW1lLiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHNlZSBpZiBhIHN0YXRlIGFscmVhZHkgZXhpc3RzLlxuLy9cbi8vIDxwPkJlY2F1c2UgdGhlIG51bWJlciBvZiBhbHRlcm5hdGl2ZXMgYW5kIG51bWJlciBvZiBBVE4gY29uZmlndXJhdGlvbnMgYXJlXG4vLyBmaW5pdGUsIHRoZXJlIGlzIGEgZmluaXRlIG51bWJlciBvZiBERkEgc3RhdGVzIHRoYXQgY2FuIGJlIHByb2Nlc3NlZC5cbi8vIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIHNob3cgdGhhdCB0aGUgYWxnb3JpdGhtIHRlcm1pbmF0ZXMuPC9wPlxuLy9cbi8vIDxwPkNhbm5vdCB0ZXN0IHRoZSBERkEgc3RhdGUgbnVtYmVycyBoZXJlIGJlY2F1c2UgaW5cbi8vIHtAbGluayBQYXJzZXJBVE5TaW11bGF0b3IvL2FkZERGQVN0YXRlfSB3ZSBuZWVkIHRvIGtub3cgaWYgYW55IG90aGVyIHN0YXRlXG4vLyBleGlzdHMgdGhhdCBoYXMgdGhpcyBleGFjdCBzZXQgb2YgQVROIGNvbmZpZ3VyYXRpb25zLiBUaGVcbi8vIHtAbGluayAvL3N0YXRlTnVtYmVyfSBpcyBpcnJlbGV2YW50LjwvcD5cbkRGQVN0YXRlLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbihvdGhlcikge1xuXHQvLyBjb21wYXJlIHNldCBvZiBBVE4gY29uZmlndXJhdGlvbnMgaW4gdGhpcyBzZXQgd2l0aCBvdGhlclxuXHRyZXR1cm4gdGhpcyA9PT0gb3RoZXIgfHxcblx0XHRcdChvdGhlciBpbnN0YW5jZW9mIERGQVN0YXRlICYmXG5cdFx0XHRcdHRoaXMuY29uZmlncy5lcXVhbHMob3RoZXIuY29uZmlncykpO1xufTtcblxuREZBU3RhdGUucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG5cdHZhciBzID0gXCJcIiArIHRoaXMuc3RhdGVOdW1iZXIgKyBcIjpcIiArIHRoaXMuY29uZmlncztcblx0aWYodGhpcy5pc0FjY2VwdFN0YXRlKSB7XG4gICAgICAgIHMgPSBzICsgXCI9PlwiO1xuICAgICAgICBpZiAodGhpcy5wcmVkaWNhdGVzICE9PSBudWxsKVxuICAgICAgICAgICAgcyA9IHMgKyB0aGlzLnByZWRpY2F0ZXM7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHMgPSBzICsgdGhpcy5wcmVkaWN0aW9uO1xuICAgIH1cblx0cmV0dXJuIHM7XG59O1xuXG5ERkFTdGF0ZS5wcm90b3R5cGUuaGFzaENvZGUgPSBmdW5jdGlvbigpIHtcblx0dmFyIGhhc2ggPSBuZXcgSGFzaCgpO1xuXHRoYXNoLnVwZGF0ZSh0aGlzLmNvbmZpZ3MpO1xuXHRpZih0aGlzLmlzQWNjZXB0U3RhdGUpIHtcbiAgICAgICAgaWYgKHRoaXMucHJlZGljYXRlcyAhPT0gbnVsbClcbiAgICAgICAgICAgIGhhc2gudXBkYXRlKHRoaXMucHJlZGljYXRlcyk7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGhhc2gudXBkYXRlKHRoaXMucHJlZGljdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBoYXNoLmZpbmlzaCgpO1xufTtcblxuZXhwb3J0cy5ERkFTdGF0ZSA9IERGQVN0YXRlO1xuZXhwb3J0cy5QcmVkUHJlZGljdGlvbiA9IFByZWRQcmVkaWN0aW9uO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG5leHBvcnRzLkRGQSA9IHJlcXVpcmUoJy4vREZBJykuREZBO1xuZXhwb3J0cy5ERkFTZXJpYWxpemVyID0gcmVxdWlyZSgnLi9ERkFTZXJpYWxpemVyJykuREZBU2VyaWFsaXplcjtcbmV4cG9ydHMuTGV4ZXJERkFTZXJpYWxpemVyID0gcmVxdWlyZSgnLi9ERkFTZXJpYWxpemVyJykuTGV4ZXJERkFTZXJpYWxpemVyO1xuZXhwb3J0cy5QcmVkUHJlZGljdGlvbiA9IHJlcXVpcmUoJy4vREZBU3RhdGUnKS5QcmVkUHJlZGljdGlvbjtcbiIsIi8vXG4vKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vL1xuXG4vL1xuLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgQU5UTFJFcnJvckxpc3RlbmVyfSBjYW4gYmUgdXNlZCB0byBpZGVudGlmeVxuLy8gY2VydGFpbiBwb3RlbnRpYWwgY29ycmVjdG5lc3MgYW5kIHBlcmZvcm1hbmNlIHByb2JsZW1zIGluIGdyYW1tYXJzLiBcIlJlcG9ydHNcIlxuLy8gYXJlIG1hZGUgYnkgY2FsbGluZyB7QGxpbmsgUGFyc2VyLy9ub3RpZnlFcnJvckxpc3RlbmVyc30gd2l0aCB0aGUgYXBwcm9wcmlhdGVcbi8vIG1lc3NhZ2UuXG4vL1xuLy8gPHVsPlxuLy8gPGxpPjxiPkFtYmlndWl0aWVzPC9iPjogVGhlc2UgYXJlIGNhc2VzIHdoZXJlIG1vcmUgdGhhbiBvbmUgcGF0aCB0aHJvdWdoIHRoZVxuLy8gZ3JhbW1hciBjYW4gbWF0Y2ggdGhlIGlucHV0LjwvbGk+XG4vLyA8bGk+PGI+V2VhayBjb250ZXh0IHNlbnNpdGl2aXR5PC9iPjogVGhlc2UgYXJlIGNhc2VzIHdoZXJlIGZ1bGwtY29udGV4dFxuLy8gcHJlZGljdGlvbiByZXNvbHZlZCBhbiBTTEwgY29uZmxpY3QgdG8gYSB1bmlxdWUgYWx0ZXJuYXRpdmUgd2hpY2ggZXF1YWxlZCB0aGVcbi8vIG1pbmltdW0gYWx0ZXJuYXRpdmUgb2YgdGhlIFNMTCBjb25mbGljdC48L2xpPlxuLy8gPGxpPjxiPlN0cm9uZyAoZm9yY2VkKSBjb250ZXh0IHNlbnNpdGl2aXR5PC9iPjogVGhlc2UgYXJlIGNhc2VzIHdoZXJlIHRoZVxuLy8gZnVsbC1jb250ZXh0IHByZWRpY3Rpb24gcmVzb2x2ZWQgYW4gU0xMIGNvbmZsaWN0IHRvIGEgdW5pcXVlIGFsdGVybmF0aXZlLFxuLy8gPGVtPmFuZDwvZW0+IHRoZSBtaW5pbXVtIGFsdGVybmF0aXZlIG9mIHRoZSBTTEwgY29uZmxpY3Qgd2FzIGZvdW5kIHRvIG5vdCBiZVxuLy8gYSB0cnVseSB2aWFibGUgYWx0ZXJuYXRpdmUuIFR3by1zdGFnZSBwYXJzaW5nIGNhbm5vdCBiZSB1c2VkIGZvciBpbnB1dHMgd2hlcmVcbi8vIHRoaXMgc2l0dWF0aW9uIG9jY3Vycy48L2xpPlxuLy8gPC91bD5cblxudmFyIEJpdFNldCA9IHJlcXVpcmUoJy4vLi4vVXRpbHMnKS5CaXRTZXQ7XG52YXIgRXJyb3JMaXN0ZW5lciA9IHJlcXVpcmUoJy4vRXJyb3JMaXN0ZW5lcicpLkVycm9yTGlzdGVuZXI7XG52YXIgSW50ZXJ2YWwgPSByZXF1aXJlKCcuLy4uL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG5cbmZ1bmN0aW9uIERpYWdub3N0aWNFcnJvckxpc3RlbmVyKGV4YWN0T25seSkge1xuXHRFcnJvckxpc3RlbmVyLmNhbGwodGhpcyk7XG5cdGV4YWN0T25seSA9IGV4YWN0T25seSB8fCB0cnVlO1xuXHQvLyB3aGV0aGVyIGFsbCBhbWJpZ3VpdGllcyBvciBvbmx5IGV4YWN0IGFtYmlndWl0aWVzIGFyZSByZXBvcnRlZC5cblx0dGhpcy5leGFjdE9ubHkgPSBleGFjdE9ubHk7XG5cdHJldHVybiB0aGlzO1xufVxuXG5EaWFnbm9zdGljRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yTGlzdGVuZXIucHJvdG90eXBlKTtcbkRpYWdub3N0aWNFcnJvckxpc3RlbmVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IERpYWdub3N0aWNFcnJvckxpc3RlbmVyO1xuXG5EaWFnbm9zdGljRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUucmVwb3J0QW1iaWd1aXR5ID0gZnVuY3Rpb24ocmVjb2duaXplciwgZGZhLFxuXHRcdHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgZXhhY3QsIGFtYmlnQWx0cywgY29uZmlncykge1xuXHRpZiAodGhpcy5leGFjdE9ubHkgJiYgIWV4YWN0KSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdHZhciBtc2cgPSBcInJlcG9ydEFtYmlndWl0eSBkPVwiICtcblx0XHRcdHRoaXMuZ2V0RGVjaXNpb25EZXNjcmlwdGlvbihyZWNvZ25pemVyLCBkZmEpICtcblx0XHRcdFwiOiBhbWJpZ0FsdHM9XCIgK1xuXHRcdFx0dGhpcy5nZXRDb25mbGljdGluZ0FsdHMoYW1iaWdBbHRzLCBjb25maWdzKSArXG5cdFx0XHRcIiwgaW5wdXQ9J1wiICtcblx0XHRcdHJlY29nbml6ZXIuZ2V0VG9rZW5TdHJlYW0oKS5nZXRUZXh0KG5ldyBJbnRlcnZhbChzdGFydEluZGV4LCBzdG9wSW5kZXgpKSArIFwiJ1wiO1xuXHRyZWNvZ25pemVyLm5vdGlmeUVycm9yTGlzdGVuZXJzKG1zZyk7XG59O1xuXG5EaWFnbm9zdGljRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUucmVwb3J0QXR0ZW1wdGluZ0Z1bGxDb250ZXh0ID0gZnVuY3Rpb24oXG5cdFx0cmVjb2duaXplciwgZGZhLCBzdGFydEluZGV4LCBzdG9wSW5kZXgsIGNvbmZsaWN0aW5nQWx0cywgY29uZmlncykge1xuXHR2YXIgbXNnID0gXCJyZXBvcnRBdHRlbXB0aW5nRnVsbENvbnRleHQgZD1cIiArXG5cdFx0XHR0aGlzLmdldERlY2lzaW9uRGVzY3JpcHRpb24ocmVjb2duaXplciwgZGZhKSArXG5cdFx0XHRcIiwgaW5wdXQ9J1wiICtcblx0XHRcdHJlY29nbml6ZXIuZ2V0VG9rZW5TdHJlYW0oKS5nZXRUZXh0KG5ldyBJbnRlcnZhbChzdGFydEluZGV4LCBzdG9wSW5kZXgpKSArIFwiJ1wiO1xuXHRyZWNvZ25pemVyLm5vdGlmeUVycm9yTGlzdGVuZXJzKG1zZyk7XG59O1xuXG5EaWFnbm9zdGljRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUucmVwb3J0Q29udGV4dFNlbnNpdGl2aXR5ID0gZnVuY3Rpb24oXG5cdFx0cmVjb2duaXplciwgZGZhLCBzdGFydEluZGV4LCBzdG9wSW5kZXgsIHByZWRpY3Rpb24sIGNvbmZpZ3MpIHtcblx0dmFyIG1zZyA9IFwicmVwb3J0Q29udGV4dFNlbnNpdGl2aXR5IGQ9XCIgK1xuXHRcdFx0dGhpcy5nZXREZWNpc2lvbkRlc2NyaXB0aW9uKHJlY29nbml6ZXIsIGRmYSkgK1xuXHRcdFx0XCIsIGlucHV0PSdcIiArXG5cdFx0XHRyZWNvZ25pemVyLmdldFRva2VuU3RyZWFtKCkuZ2V0VGV4dChuZXcgSW50ZXJ2YWwoc3RhcnRJbmRleCwgc3RvcEluZGV4KSkgKyBcIidcIjtcblx0cmVjb2duaXplci5ub3RpZnlFcnJvckxpc3RlbmVycyhtc2cpO1xufTtcblxuRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXIucHJvdG90eXBlLmdldERlY2lzaW9uRGVzY3JpcHRpb24gPSBmdW5jdGlvbihyZWNvZ25pemVyLCBkZmEpIHtcblx0dmFyIGRlY2lzaW9uID0gZGZhLmRlY2lzaW9uO1xuXHR2YXIgcnVsZUluZGV4ID0gZGZhLmF0blN0YXJ0U3RhdGUucnVsZUluZGV4O1xuXG5cdHZhciBydWxlTmFtZXMgPSByZWNvZ25pemVyLnJ1bGVOYW1lcztcblx0aWYgKHJ1bGVJbmRleCA8IDAgfHwgcnVsZUluZGV4ID49IHJ1bGVOYW1lcy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gXCJcIiArIGRlY2lzaW9uO1xuXHR9XG5cdHZhciBydWxlTmFtZSA9IHJ1bGVOYW1lc1tydWxlSW5kZXhdIHx8IG51bGw7XG5cdGlmIChydWxlTmFtZSA9PT0gbnVsbCB8fCBydWxlTmFtZS5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gXCJcIiArIGRlY2lzaW9uO1xuXHR9XG5cdHJldHVybiBcIlwiICsgZGVjaXNpb24gKyBcIiAoXCIgKyBydWxlTmFtZSArIFwiKVwiO1xufTtcblxuLy9cbi8vIENvbXB1dGVzIHRoZSBzZXQgb2YgY29uZmxpY3Rpbmcgb3IgYW1iaWd1b3VzIGFsdGVybmF0aXZlcyBmcm9tIGFcbi8vIGNvbmZpZ3VyYXRpb24gc2V0LCBpZiB0aGF0IGluZm9ybWF0aW9uIHdhcyBub3QgYWxyZWFkeSBwcm92aWRlZCBieSB0aGVcbi8vIHBhcnNlci5cbi8vXG4vLyBAcGFyYW0gcmVwb3J0ZWRBbHRzIFRoZSBzZXQgb2YgY29uZmxpY3Rpbmcgb3IgYW1iaWd1b3VzIGFsdGVybmF0aXZlcywgYXNcbi8vIHJlcG9ydGVkIGJ5IHRoZSBwYXJzZXIuXG4vLyBAcGFyYW0gY29uZmlncyBUaGUgY29uZmxpY3Rpbmcgb3IgYW1iaWd1b3VzIGNvbmZpZ3VyYXRpb24gc2V0LlxuLy8gQHJldHVybiBSZXR1cm5zIHtAY29kZSByZXBvcnRlZEFsdHN9IGlmIGl0IGlzIG5vdCB7QGNvZGUgbnVsbH0sIG90aGVyd2lzZVxuLy8gcmV0dXJucyB0aGUgc2V0IG9mIGFsdGVybmF0aXZlcyByZXByZXNlbnRlZCBpbiB7QGNvZGUgY29uZmlnc30uXG4vL1xuRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXIucHJvdG90eXBlLmdldENvbmZsaWN0aW5nQWx0cyA9IGZ1bmN0aW9uKHJlcG9ydGVkQWx0cywgY29uZmlncykge1xuXHRpZiAocmVwb3J0ZWRBbHRzICE9PSBudWxsKSB7XG5cdFx0cmV0dXJuIHJlcG9ydGVkQWx0cztcblx0fVxuXHR2YXIgcmVzdWx0ID0gbmV3IEJpdFNldCgpO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IGNvbmZpZ3MuaXRlbXMubGVuZ3RoOyBpKyspIHtcblx0XHRyZXN1bHQuYWRkKGNvbmZpZ3MuaXRlbXNbaV0uYWx0KTtcblx0fVxuXHRyZXR1cm4gXCJ7XCIgKyByZXN1bHQudmFsdWVzKCkuam9pbihcIiwgXCIpICsgXCJ9XCI7XG59O1xuXG5leHBvcnRzLkRpYWdub3N0aWNFcnJvckxpc3RlbmVyID0gRGlhZ25vc3RpY0Vycm9yTGlzdGVuZXI7IiwiLy9cbi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxuLy8gUHJvdmlkZXMgYW4gZW1wdHkgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgQU5UTFJFcnJvckxpc3RlbmVyfS4gVGhlXG4vLyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIGVhY2ggbWV0aG9kIGRvZXMgbm90aGluZywgYnV0IGNhbiBiZSBvdmVycmlkZGVuIGFzXG4vLyBuZWNlc3NhcnkuXG5cbmZ1bmN0aW9uIEVycm9yTGlzdGVuZXIoKSB7XG5cdHJldHVybiB0aGlzO1xufVxuXG5FcnJvckxpc3RlbmVyLnByb3RvdHlwZS5zeW50YXhFcnJvciA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIG9mZmVuZGluZ1N5bWJvbCwgbGluZSwgY29sdW1uLCBtc2csIGUpIHtcbn07XG5cbkVycm9yTGlzdGVuZXIucHJvdG90eXBlLnJlcG9ydEFtYmlndWl0eSA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBleGFjdCwgYW1iaWdBbHRzLCBjb25maWdzKSB7XG59O1xuXG5FcnJvckxpc3RlbmVyLnByb3RvdHlwZS5yZXBvcnRBdHRlbXB0aW5nRnVsbENvbnRleHQgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgY29uZmxpY3RpbmdBbHRzLCBjb25maWdzKSB7XG59O1xuXG5FcnJvckxpc3RlbmVyLnByb3RvdHlwZS5yZXBvcnRDb250ZXh0U2Vuc2l0aXZpdHkgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgcHJlZGljdGlvbiwgY29uZmlncykge1xufTtcblxuZnVuY3Rpb24gQ29uc29sZUVycm9yTGlzdGVuZXIoKSB7XG5cdEVycm9yTGlzdGVuZXIuY2FsbCh0aGlzKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cbkNvbnNvbGVFcnJvckxpc3RlbmVyLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3JMaXN0ZW5lci5wcm90b3R5cGUpO1xuQ29uc29sZUVycm9yTGlzdGVuZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQ29uc29sZUVycm9yTGlzdGVuZXI7XG5cbi8vXG4vLyBQcm92aWRlcyBhIGRlZmF1bHQgaW5zdGFuY2Ugb2Yge0BsaW5rIENvbnNvbGVFcnJvckxpc3RlbmVyfS5cbi8vXG5Db25zb2xlRXJyb3JMaXN0ZW5lci5JTlNUQU5DRSA9IG5ldyBDb25zb2xlRXJyb3JMaXN0ZW5lcigpO1xuXG4vL1xuLy8ge0Bpbmhlcml0RG9jfVxuLy9cbi8vIDxwPlxuLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBwcmludHMgbWVzc2FnZXMgdG8ge0BsaW5rIFN5c3RlbS8vZXJyfSBjb250YWluaW5nIHRoZVxuLy8gdmFsdWVzIG9mIHtAY29kZSBsaW5lfSwge0Bjb2RlIGNoYXJQb3NpdGlvbkluTGluZX0sIGFuZCB7QGNvZGUgbXNnfSB1c2luZ1xuLy8gdGhlIGZvbGxvd2luZyBmb3JtYXQuPC9wPlxuLy9cbi8vIDxwcmU+XG4vLyBsaW5lIDxlbT5saW5lPC9lbT46PGVtPmNoYXJQb3NpdGlvbkluTGluZTwvZW0+IDxlbT5tc2c8L2VtPlxuLy8gPC9wcmU+XG4vL1xuQ29uc29sZUVycm9yTGlzdGVuZXIucHJvdG90eXBlLnN5bnRheEVycm9yID0gZnVuY3Rpb24ocmVjb2duaXplciwgb2ZmZW5kaW5nU3ltYm9sLCBsaW5lLCBjb2x1bW4sIG1zZywgZSkge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJsaW5lIFwiICsgbGluZSArIFwiOlwiICsgY29sdW1uICsgXCIgXCIgKyBtc2cpO1xufTtcblxuZnVuY3Rpb24gUHJveHlFcnJvckxpc3RlbmVyKGRlbGVnYXRlcykge1xuXHRFcnJvckxpc3RlbmVyLmNhbGwodGhpcyk7XG4gICAgaWYgKGRlbGVnYXRlcz09PW51bGwpIHtcbiAgICAgICAgdGhyb3cgXCJkZWxlZ2F0ZXNcIjtcbiAgICB9XG4gICAgdGhpcy5kZWxlZ2F0ZXMgPSBkZWxlZ2F0ZXM7XG5cdHJldHVybiB0aGlzO1xufVxuXG5Qcm94eUVycm9yTGlzdGVuZXIucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvckxpc3RlbmVyLnByb3RvdHlwZSk7XG5Qcm94eUVycm9yTGlzdGVuZXIucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUHJveHlFcnJvckxpc3RlbmVyO1xuXG5Qcm94eUVycm9yTGlzdGVuZXIucHJvdG90eXBlLnN5bnRheEVycm9yID0gZnVuY3Rpb24ocmVjb2duaXplciwgb2ZmZW5kaW5nU3ltYm9sLCBsaW5lLCBjb2x1bW4sIG1zZywgZSkge1xuICAgIHRoaXMuZGVsZWdhdGVzLm1hcChmdW5jdGlvbihkKSB7IGQuc3ludGF4RXJyb3IocmVjb2duaXplciwgb2ZmZW5kaW5nU3ltYm9sLCBsaW5lLCBjb2x1bW4sIG1zZywgZSk7IH0pO1xufTtcblxuUHJveHlFcnJvckxpc3RlbmVyLnByb3RvdHlwZS5yZXBvcnRBbWJpZ3VpdHkgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgZXhhY3QsIGFtYmlnQWx0cywgY29uZmlncykge1xuICAgIHRoaXMuZGVsZWdhdGVzLm1hcChmdW5jdGlvbihkKSB7IGQucmVwb3J0QW1iaWd1aXR5KHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBleGFjdCwgYW1iaWdBbHRzLCBjb25maWdzKTsgfSk7XG59O1xuXG5Qcm94eUVycm9yTGlzdGVuZXIucHJvdG90eXBlLnJlcG9ydEF0dGVtcHRpbmdGdWxsQ29udGV4dCA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGRmYSwgc3RhcnRJbmRleCwgc3RvcEluZGV4LCBjb25mbGljdGluZ0FsdHMsIGNvbmZpZ3MpIHtcblx0dGhpcy5kZWxlZ2F0ZXMubWFwKGZ1bmN0aW9uKGQpIHsgZC5yZXBvcnRBdHRlbXB0aW5nRnVsbENvbnRleHQocmVjb2duaXplciwgZGZhLCBzdGFydEluZGV4LCBzdG9wSW5kZXgsIGNvbmZsaWN0aW5nQWx0cywgY29uZmlncyk7IH0pO1xufTtcblxuUHJveHlFcnJvckxpc3RlbmVyLnByb3RvdHlwZS5yZXBvcnRDb250ZXh0U2Vuc2l0aXZpdHkgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgcHJlZGljdGlvbiwgY29uZmlncykge1xuXHR0aGlzLmRlbGVnYXRlcy5tYXAoZnVuY3Rpb24oZCkgeyBkLnJlcG9ydENvbnRleHRTZW5zaXRpdml0eShyZWNvZ25pemVyLCBkZmEsIHN0YXJ0SW5kZXgsIHN0b3BJbmRleCwgcHJlZGljdGlvbiwgY29uZmlncyk7IH0pO1xufTtcblxuZXhwb3J0cy5FcnJvckxpc3RlbmVyID0gRXJyb3JMaXN0ZW5lcjtcbmV4cG9ydHMuQ29uc29sZUVycm9yTGlzdGVuZXIgPSBDb25zb2xlRXJyb3JMaXN0ZW5lcjtcbmV4cG9ydHMuUHJveHlFcnJvckxpc3RlbmVyID0gUHJveHlFcnJvckxpc3RlbmVyO1xuXG4iLCIvL1xuLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuLy9cblxudmFyIFRva2VuID0gcmVxdWlyZSgnLi8uLi9Ub2tlbicpLlRva2VuO1xudmFyIEVycm9ycyA9IHJlcXVpcmUoJy4vRXJyb3JzJyk7XG52YXIgTm9WaWFibGVBbHRFeGNlcHRpb24gPSBFcnJvcnMuTm9WaWFibGVBbHRFeGNlcHRpb247XG52YXIgSW5wdXRNaXNtYXRjaEV4Y2VwdGlvbiA9IEVycm9ycy5JbnB1dE1pc21hdGNoRXhjZXB0aW9uO1xudmFyIEZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbiA9IEVycm9ycy5GYWlsZWRQcmVkaWNhdGVFeGNlcHRpb247XG52YXIgUGFyc2VDYW5jZWxsYXRpb25FeGNlcHRpb24gPSBFcnJvcnMuUGFyc2VDYW5jZWxsYXRpb25FeGNlcHRpb247XG52YXIgQVROU3RhdGUgPSByZXF1aXJlKCcuLy4uL2F0bi9BVE5TdGF0ZScpLkFUTlN0YXRlO1xudmFyIEludGVydmFsID0gcmVxdWlyZSgnLi8uLi9JbnRlcnZhbFNldCcpLkludGVydmFsO1xudmFyIEludGVydmFsU2V0ID0gcmVxdWlyZSgnLi8uLi9JbnRlcnZhbFNldCcpLkludGVydmFsU2V0O1xuXG5mdW5jdGlvbiBFcnJvclN0cmF0ZWd5KCkge1xuXG59XG5cbkVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24ocmVjb2duaXplcil7XG59O1xuXG5FcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5yZWNvdmVySW5saW5lID0gZnVuY3Rpb24ocmVjb2duaXplcil7XG59O1xuXG5FcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5yZWNvdmVyID0gZnVuY3Rpb24ocmVjb2duaXplciwgZSl7XG59O1xuXG5FcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24ocmVjb2duaXplcil7XG59O1xuXG5FcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5pbkVycm9yUmVjb3ZlcnlNb2RlID0gZnVuY3Rpb24ocmVjb2duaXplcil7XG59O1xuXG5FcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5yZXBvcnRFcnJvciA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpe1xufTtcblxuXG5cbi8vIFRoaXMgaXMgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2Yge0BsaW5rIEFOVExSRXJyb3JTdHJhdGVneX0gdXNlZCBmb3Jcbi8vIGVycm9yIHJlcG9ydGluZyBhbmQgcmVjb3ZlcnkgaW4gQU5UTFIgcGFyc2Vycy5cbi8vXG5mdW5jdGlvbiBEZWZhdWx0RXJyb3JTdHJhdGVneSgpIHtcblx0RXJyb3JTdHJhdGVneS5jYWxsKHRoaXMpO1xuICAgIC8vIEluZGljYXRlcyB3aGV0aGVyIHRoZSBlcnJvciBzdHJhdGVneSBpcyBjdXJyZW50bHkgXCJyZWNvdmVyaW5nIGZyb20gYW5cbiAgICAvLyBlcnJvclwiLiBUaGlzIGlzIHVzZWQgdG8gc3VwcHJlc3MgcmVwb3J0aW5nIG11bHRpcGxlIGVycm9yIG1lc3NhZ2VzIHdoaWxlXG4gICAgLy8gYXR0ZW1wdGluZyB0byByZWNvdmVyIGZyb20gYSBkZXRlY3RlZCBzeW50YXggZXJyb3IuXG4gICAgLy9cbiAgICAvLyBAc2VlIC8vaW5FcnJvclJlY292ZXJ5TW9kZVxuICAgIC8vXG4gICAgdGhpcy5lcnJvclJlY292ZXJ5TW9kZSA9IGZhbHNlO1xuXG4gICAgLy8gVGhlIGluZGV4IGludG8gdGhlIGlucHV0IHN0cmVhbSB3aGVyZSB0aGUgbGFzdCBlcnJvciBvY2N1cnJlZC5cbiAgICAvLyBUaGlzIGlzIHVzZWQgdG8gcHJldmVudCBpbmZpbml0ZSBsb29wcyB3aGVyZSBhbiBlcnJvciBpcyBmb3VuZFxuICAgIC8vIGJ1dCBubyB0b2tlbiBpcyBjb25zdW1lZCBkdXJpbmcgcmVjb3ZlcnkuLi5hbm90aGVyIGVycm9yIGlzIGZvdW5kLFxuICAgIC8vIGFkIG5hdXNldW0uIFRoaXMgaXMgYSBmYWlsc2FmZSBtZWNoYW5pc20gdG8gZ3VhcmFudGVlIHRoYXQgYXQgbGVhc3RcbiAgICAvLyBvbmUgdG9rZW4vdHJlZSBub2RlIGlzIGNvbnN1bWVkIGZvciB0d28gZXJyb3JzLlxuICAgIC8vXG4gICAgdGhpcy5sYXN0RXJyb3JJbmRleCA9IC0xO1xuICAgIHRoaXMubGFzdEVycm9yU3RhdGVzID0gbnVsbDtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvclN0cmF0ZWd5LnByb3RvdHlwZSk7XG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBEZWZhdWx0RXJyb3JTdHJhdGVneTtcblxuLy8gPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2ltcGx5IGNhbGxzIHtAbGluayAvL2VuZEVycm9yQ29uZGl0aW9ufSB0b1xuLy8gZW5zdXJlIHRoYXQgdGhlIGhhbmRsZXIgaXMgbm90IGluIGVycm9yIHJlY292ZXJ5IG1vZGUuPC9wPlxuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgIHRoaXMuZW5kRXJyb3JDb25kaXRpb24ocmVjb2duaXplcik7XG59O1xuXG4vL1xuLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGVudGVyIGVycm9yIHJlY292ZXJ5IG1vZGUgd2hlbiBhIHJlY29nbml0aW9uXG4vLyBleGNlcHRpb24gaXMgcmVwb3J0ZWQuXG4vL1xuLy8gQHBhcmFtIHJlY29nbml6ZXIgdGhlIHBhcnNlciBpbnN0YW5jZVxuLy9cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5iZWdpbkVycm9yQ29uZGl0aW9uID0gZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgIHRoaXMuZXJyb3JSZWNvdmVyeU1vZGUgPSB0cnVlO1xufTtcblxuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLmluRXJyb3JSZWNvdmVyeU1vZGUgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JSZWNvdmVyeU1vZGU7XG59O1xuXG4vL1xuLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIGxlYXZlIGVycm9yIHJlY292ZXJ5IG1vZGUgYWZ0ZXIgcmVjb3ZlcmluZyBmcm9tXG4vLyBhIHJlY29nbml0aW9uIGV4Y2VwdGlvbi5cbi8vXG4vLyBAcGFyYW0gcmVjb2duaXplclxuLy9cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5lbmRFcnJvckNvbmRpdGlvbiA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICB0aGlzLmVycm9yUmVjb3ZlcnlNb2RlID0gZmFsc2U7XG4gICAgdGhpcy5sYXN0RXJyb3JTdGF0ZXMgPSBudWxsO1xuICAgIHRoaXMubGFzdEVycm9ySW5kZXggPSAtMTtcbn07XG5cbi8vXG4vLyB7QGluaGVyaXREb2N9XG4vL1xuLy8gPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gc2ltcGx5IGNhbGxzIHtAbGluayAvL2VuZEVycm9yQ29uZGl0aW9ufS48L3A+XG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydE1hdGNoID0gZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgIHRoaXMuZW5kRXJyb3JDb25kaXRpb24ocmVjb2duaXplcik7XG59O1xuXG4vL1xuLy8ge0Bpbmhlcml0RG9jfVxuLy9cbi8vIDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHJldHVybnMgaW1tZWRpYXRlbHkgaWYgdGhlIGhhbmRsZXIgaXMgYWxyZWFkeVxuLy8gaW4gZXJyb3IgcmVjb3ZlcnkgbW9kZS4gT3RoZXJ3aXNlLCBpdCBjYWxscyB7QGxpbmsgLy9iZWdpbkVycm9yQ29uZGl0aW9ufVxuLy8gYW5kIGRpc3BhdGNoZXMgdGhlIHJlcG9ydGluZyB0YXNrIGJhc2VkIG9uIHRoZSBydW50aW1lIHR5cGUgb2Yge0Bjb2RlIGV9XG4vLyBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyB0YWJsZS48L3A+XG4vL1xuLy8gPHVsPlxuLy8gPGxpPntAbGluayBOb1ZpYWJsZUFsdEV4Y2VwdGlvbn06IERpc3BhdGNoZXMgdGhlIGNhbGwgdG9cbi8vIHtAbGluayAvL3JlcG9ydE5vVmlhYmxlQWx0ZXJuYXRpdmV9PC9saT5cbi8vIDxsaT57QGxpbmsgSW5wdXRNaXNtYXRjaEV4Y2VwdGlvbn06IERpc3BhdGNoZXMgdGhlIGNhbGwgdG9cbi8vIHtAbGluayAvL3JlcG9ydElucHV0TWlzbWF0Y2h9PC9saT5cbi8vIDxsaT57QGxpbmsgRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9ufTogRGlzcGF0Y2hlcyB0aGUgY2FsbCB0b1xuLy8ge0BsaW5rIC8vcmVwb3J0RmFpbGVkUHJlZGljYXRlfTwvbGk+XG4vLyA8bGk+QWxsIG90aGVyIHR5cGVzOiBjYWxscyB7QGxpbmsgUGFyc2VyLy9ub3RpZnlFcnJvckxpc3RlbmVyc30gdG8gcmVwb3J0XG4vLyB0aGUgZXhjZXB0aW9uPC9saT5cbi8vIDwvdWw+XG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlcG9ydEVycm9yID0gZnVuY3Rpb24ocmVjb2duaXplciwgZSkge1xuICAgLy8gaWYgd2UndmUgYWxyZWFkeSByZXBvcnRlZCBhbiBlcnJvciBhbmQgaGF2ZSBub3QgbWF0Y2hlZCBhIHRva2VuXG4gICAvLyB5ZXQgc3VjY2Vzc2Z1bGx5LCBkb24ndCByZXBvcnQgYW55IGVycm9ycy5cbiAgICBpZih0aGlzLmluRXJyb3JSZWNvdmVyeU1vZGUocmVjb2duaXplcikpIHtcbiAgICAgICAgcmV0dXJuOyAvLyBkb24ndCByZXBvcnQgc3B1cmlvdXMgZXJyb3JzXG4gICAgfVxuICAgIHRoaXMuYmVnaW5FcnJvckNvbmRpdGlvbihyZWNvZ25pemVyKTtcbiAgICBpZiAoIGUgaW5zdGFuY2VvZiBOb1ZpYWJsZUFsdEV4Y2VwdGlvbiApIHtcbiAgICAgICAgdGhpcy5yZXBvcnROb1ZpYWJsZUFsdGVybmF0aXZlKHJlY29nbml6ZXIsIGUpO1xuICAgIH0gZWxzZSBpZiAoIGUgaW5zdGFuY2VvZiBJbnB1dE1pc21hdGNoRXhjZXB0aW9uICkge1xuICAgICAgICB0aGlzLnJlcG9ydElucHV0TWlzbWF0Y2gocmVjb2duaXplciwgZSk7XG4gICAgfSBlbHNlIGlmICggZSBpbnN0YW5jZW9mIEZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbiApIHtcbiAgICAgICAgdGhpcy5yZXBvcnRGYWlsZWRQcmVkaWNhdGUocmVjb2duaXplciwgZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJ1bmtub3duIHJlY29nbml0aW9uIGVycm9yIHR5cGU6IFwiICsgZS5jb25zdHJ1Y3Rvci5uYW1lKTtcbiAgICAgICAgY29uc29sZS5sb2coZS5zdGFjayk7XG4gICAgICAgIHJlY29nbml6ZXIubm90aWZ5RXJyb3JMaXN0ZW5lcnMoZS5nZXRPZmZlbmRpbmdUb2tlbigpLCBlLmdldE1lc3NhZ2UoKSwgZSk7XG4gICAgfVxufTtcbi8vXG4vLyB7QGluaGVyaXREb2N9XG4vL1xuLy8gPHA+VGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmVzeW5jaHJvbml6ZXMgdGhlIHBhcnNlciBieSBjb25zdW1pbmcgdG9rZW5zXG4vLyB1bnRpbCB3ZSBmaW5kIG9uZSBpbiB0aGUgcmVzeW5jaHJvbml6YXRpb24gc2V0LS1sb29zZWx5IHRoZSBzZXQgb2YgdG9rZW5zXG4vLyB0aGF0IGNhbiBmb2xsb3cgdGhlIGN1cnJlbnQgcnVsZS48L3A+XG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnJlY292ZXIgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBlKSB7XG4gICAgaWYgKHRoaXMubGFzdEVycm9ySW5kZXg9PT1yZWNvZ25pemVyLmdldElucHV0U3RyZWFtKCkuaW5kZXggJiZcbiAgICAgICAgdGhpcy5sYXN0RXJyb3JTdGF0ZXMgIT09IG51bGwgJiYgdGhpcy5sYXN0RXJyb3JTdGF0ZXMuaW5kZXhPZihyZWNvZ25pemVyLnN0YXRlKT49MCkge1xuXHRcdC8vIHVoIG9oLCBhbm90aGVyIGVycm9yIGF0IHNhbWUgdG9rZW4gaW5kZXggYW5kIHByZXZpb3VzbHktdmlzaXRlZFxuXHRcdC8vIHN0YXRlIGluIEFUTjsgbXVzdCBiZSBhIGNhc2Ugd2hlcmUgTFQoMSkgaXMgaW4gdGhlIHJlY292ZXJ5XG5cdFx0Ly8gdG9rZW4gc2V0IHNvIG5vdGhpbmcgZ290IGNvbnN1bWVkLiBDb25zdW1lIGEgc2luZ2xlIHRva2VuXG5cdFx0Ly8gYXQgbGVhc3QgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wOyB0aGlzIGlzIGEgZmFpbHNhZmUuXG5cdFx0cmVjb2duaXplci5jb25zdW1lKCk7XG4gICAgfVxuICAgIHRoaXMubGFzdEVycm9ySW5kZXggPSByZWNvZ25pemVyLl9pbnB1dC5pbmRleDtcbiAgICBpZiAodGhpcy5sYXN0RXJyb3JTdGF0ZXMgPT09IG51bGwpIHtcbiAgICAgICAgdGhpcy5sYXN0RXJyb3JTdGF0ZXMgPSBbXTtcbiAgICB9XG4gICAgdGhpcy5sYXN0RXJyb3JTdGF0ZXMucHVzaChyZWNvZ25pemVyLnN0YXRlKTtcbiAgICB2YXIgZm9sbG93U2V0ID0gdGhpcy5nZXRFcnJvclJlY292ZXJ5U2V0KHJlY29nbml6ZXIpO1xuICAgIHRoaXMuY29uc3VtZVVudGlsKHJlY29nbml6ZXIsIGZvbGxvd1NldCk7XG59O1xuXG4vLyBUaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgQU5UTFJFcnJvclN0cmF0ZWd5Ly9zeW5jfSBtYWtlcyBzdXJlXG4vLyB0aGF0IHRoZSBjdXJyZW50IGxvb2thaGVhZCBzeW1ib2wgaXMgY29uc2lzdGVudCB3aXRoIHdoYXQgd2VyZSBleHBlY3Rpbmdcbi8vIGF0IHRoaXMgcG9pbnQgaW4gdGhlIEFUTi4gWW91IGNhbiBjYWxsIHRoaXMgYW55dGltZSBidXQgQU5UTFIgb25seVxuLy8gZ2VuZXJhdGVzIGNvZGUgdG8gY2hlY2sgYmVmb3JlIHN1YnJ1bGVzL2xvb3BzIGFuZCBlYWNoIGl0ZXJhdGlvbi5cbi8vXG4vLyA8cD5JbXBsZW1lbnRzIEppbSBJZGxlJ3MgbWFnaWMgc3luYyBtZWNoYW5pc20gaW4gY2xvc3VyZXMgYW5kIG9wdGlvbmFsXG4vLyBzdWJydWxlcy4gRS5nLiw8L3A+XG4vL1xuLy8gPHByZT5cbi8vIGEgOiBzeW5jICggc3R1ZmYgc3luYyApKiA7XG4vLyBzeW5jIDoge2NvbnN1bWUgdG8gd2hhdCBjYW4gZm9sbG93IHN5bmN9IDtcbi8vIDwvcHJlPlxuLy9cbi8vIEF0IHRoZSBzdGFydCBvZiBhIHN1YiBydWxlIHVwb24gZXJyb3IsIHtAbGluayAvL3N5bmN9IHBlcmZvcm1zIHNpbmdsZVxuLy8gdG9rZW4gZGVsZXRpb24sIGlmIHBvc3NpYmxlLiBJZiBpdCBjYW4ndCBkbyB0aGF0LCBpdCBiYWlscyBvbiB0aGUgY3VycmVudFxuLy8gcnVsZSBhbmQgdXNlcyB0aGUgZGVmYXVsdCBlcnJvciByZWNvdmVyeSwgd2hpY2ggY29uc3VtZXMgdW50aWwgdGhlXG4vLyByZXN5bmNocm9uaXphdGlvbiBzZXQgb2YgdGhlIGN1cnJlbnQgcnVsZS5cbi8vXG4vLyA8cD5JZiB0aGUgc3ViIHJ1bGUgaXMgb3B0aW9uYWwgKHtAY29kZSAoLi4uKT99LCB7QGNvZGUgKC4uLikqfSwgb3IgYmxvY2tcbi8vIHdpdGggYW4gZW1wdHkgYWx0ZXJuYXRpdmUpLCB0aGVuIHRoZSBleHBlY3RlZCBzZXQgaW5jbHVkZXMgd2hhdCBmb2xsb3dzXG4vLyB0aGUgc3VicnVsZS48L3A+XG4vL1xuLy8gPHA+RHVyaW5nIGxvb3AgaXRlcmF0aW9uLCBpdCBjb25zdW1lcyB1bnRpbCBpdCBzZWVzIGEgdG9rZW4gdGhhdCBjYW4gc3RhcnQgYVxuLy8gc3ViIHJ1bGUgb3Igd2hhdCBmb2xsb3dzIGxvb3AuIFllcywgdGhhdCBpcyBwcmV0dHkgYWdncmVzc2l2ZS4gV2Ugb3B0IHRvXG4vLyBzdGF5IGluIHRoZSBsb29wIGFzIGxvbmcgYXMgcG9zc2libGUuPC9wPlxuLy9cbi8vIDxwPjxzdHJvbmc+T1JJR0lOUzwvc3Ryb25nPjwvcD5cbi8vXG4vLyA8cD5QcmV2aW91cyB2ZXJzaW9ucyBvZiBBTlRMUiBkaWQgYSBwb29yIGpvYiBvZiB0aGVpciByZWNvdmVyeSB3aXRoaW4gbG9vcHMuXG4vLyBBIHNpbmdsZSBtaXNtYXRjaCB0b2tlbiBvciBtaXNzaW5nIHRva2VuIHdvdWxkIGZvcmNlIHRoZSBwYXJzZXIgdG8gYmFpbFxuLy8gb3V0IG9mIHRoZSBlbnRpcmUgcnVsZXMgc3Vycm91bmRpbmcgdGhlIGxvb3AuIFNvLCBmb3IgcnVsZTwvcD5cbi8vXG4vLyA8cHJlPlxuLy8gY2xhc3NEZWYgOiAnY2xhc3MnIElEICd7JyBtZW1iZXIqICd9J1xuLy8gPC9wcmU+XG4vL1xuLy8gaW5wdXQgd2l0aCBhbiBleHRyYSB0b2tlbiBiZXR3ZWVuIG1lbWJlcnMgd291bGQgZm9yY2UgdGhlIHBhcnNlciB0b1xuLy8gY29uc3VtZSB1bnRpbCBpdCBmb3VuZCB0aGUgbmV4dCBjbGFzcyBkZWZpbml0aW9uIHJhdGhlciB0aGFuIHRoZSBuZXh0XG4vLyBtZW1iZXIgZGVmaW5pdGlvbiBvZiB0aGUgY3VycmVudCBjbGFzcy5cbi8vXG4vLyA8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgY29zdCBhIGxpdHRsZSBiaXQgb2YgZWZmb3J0IGJlY2F1c2UgdGhlIHBhcnNlciBoYXMgdG9cbi8vIGNvbXBhcmUgdG9rZW4gc2V0IGF0IHRoZSBzdGFydCBvZiB0aGUgbG9vcCBhbmQgYXQgZWFjaCBpdGVyYXRpb24uIElmIGZvclxuLy8gc29tZSByZWFzb24gc3BlZWQgaXMgc3VmZmVyaW5nIGZvciB5b3UsIHlvdSBjYW4gdHVybiBvZmYgdGhpc1xuLy8gZnVuY3Rpb25hbGl0eSBieSBzaW1wbHkgb3ZlcnJpZGluZyB0aGlzIG1ldGhvZCBhcyBhIGJsYW5rIHsgfS48L3A+XG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLnN5bmMgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgLy8gSWYgYWxyZWFkeSByZWNvdmVyaW5nLCBkb24ndCB0cnkgdG8gc3luY1xuICAgIGlmICh0aGlzLmluRXJyb3JSZWNvdmVyeU1vZGUocmVjb2duaXplcikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgcyA9IHJlY29nbml6ZXIuX2ludGVycC5hdG4uc3RhdGVzW3JlY29nbml6ZXIuc3RhdGVdO1xuICAgIHZhciBsYSA9IHJlY29nbml6ZXIuZ2V0VG9rZW5TdHJlYW0oKS5MQSgxKTtcbiAgICAvLyB0cnkgY2hlYXBlciBzdWJzZXQgZmlyc3Q7IG1pZ2h0IGdldCBsdWNreS4gc2VlbXMgdG8gc2hhdmUgYSB3ZWUgYml0IG9mZlxuICAgIHZhciBuZXh0VG9rZW5zID0gcmVjb2duaXplci5hdG4ubmV4dFRva2VucyhzKTtcbiAgICBpZiAobmV4dFRva2Vucy5jb250YWlucyhUb2tlbi5FUFNJTE9OKSB8fCBuZXh0VG9rZW5zLmNvbnRhaW5zKGxhKSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHN3aXRjaCAocy5zdGF0ZVR5cGUpIHtcbiAgICBjYXNlIEFUTlN0YXRlLkJMT0NLX1NUQVJUOlxuICAgIGNhc2UgQVROU3RhdGUuU1RBUl9CTE9DS19TVEFSVDpcbiAgICBjYXNlIEFUTlN0YXRlLlBMVVNfQkxPQ0tfU1RBUlQ6XG4gICAgY2FzZSBBVE5TdGF0ZS5TVEFSX0xPT1BfRU5UUlk6XG4gICAgICAgLy8gcmVwb3J0IGVycm9yIGFuZCByZWNvdmVyIGlmIHBvc3NpYmxlXG4gICAgICAgIGlmKCB0aGlzLnNpbmdsZVRva2VuRGVsZXRpb24ocmVjb2duaXplcikgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBJbnB1dE1pc21hdGNoRXhjZXB0aW9uKHJlY29nbml6ZXIpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIGNhc2UgQVROU3RhdGUuUExVU19MT09QX0JBQ0s6XG4gICAgY2FzZSBBVE5TdGF0ZS5TVEFSX0xPT1BfQkFDSzpcbiAgICAgICAgdGhpcy5yZXBvcnRVbndhbnRlZFRva2VuKHJlY29nbml6ZXIpO1xuICAgICAgICB2YXIgZXhwZWN0aW5nID0gbmV3IEludGVydmFsU2V0KCk7XG4gICAgICAgIGV4cGVjdGluZy5hZGRTZXQocmVjb2duaXplci5nZXRFeHBlY3RlZFRva2VucygpKTtcbiAgICAgICAgdmFyIHdoYXRGb2xsb3dzTG9vcEl0ZXJhdGlvbk9yUnVsZSA9IGV4cGVjdGluZy5hZGRTZXQodGhpcy5nZXRFcnJvclJlY292ZXJ5U2V0KHJlY29nbml6ZXIpKTtcbiAgICAgICAgdGhpcy5jb25zdW1lVW50aWwocmVjb2duaXplciwgd2hhdEZvbGxvd3NMb29wSXRlcmF0aW9uT3JSdWxlKTtcbiAgICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgICAgLy8gZG8gbm90aGluZyBpZiB3ZSBjYW4ndCBpZGVudGlmeSB0aGUgZXhhY3Qga2luZCBvZiBBVE4gc3RhdGVcbiAgICB9XG59O1xuXG4vLyBUaGlzIGlzIGNhbGxlZCBieSB7QGxpbmsgLy9yZXBvcnRFcnJvcn0gd2hlbiB0aGUgZXhjZXB0aW9uIGlzIGFcbi8vIHtAbGluayBOb1ZpYWJsZUFsdEV4Y2VwdGlvbn0uXG4vL1xuLy8gQHNlZSAvL3JlcG9ydEVycm9yXG4vL1xuLy8gQHBhcmFtIHJlY29nbml6ZXIgdGhlIHBhcnNlciBpbnN0YW5jZVxuLy8gQHBhcmFtIGUgdGhlIHJlY29nbml0aW9uIGV4Y2VwdGlvblxuLy9cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5yZXBvcnROb1ZpYWJsZUFsdGVybmF0aXZlID0gZnVuY3Rpb24ocmVjb2duaXplciwgZSkge1xuICAgIHZhciB0b2tlbnMgPSByZWNvZ25pemVyLmdldFRva2VuU3RyZWFtKCk7XG4gICAgdmFyIGlucHV0O1xuICAgIGlmKHRva2VucyAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoZS5zdGFydFRva2VuLnR5cGU9PT1Ub2tlbi5FT0YpIHtcbiAgICAgICAgICAgIGlucHV0ID0gXCI8RU9GPlwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5wdXQgPSB0b2tlbnMuZ2V0VGV4dChuZXcgSW50ZXJ2YWwoZS5zdGFydFRva2VuLnRva2VuSW5kZXgsIGUub2ZmZW5kaW5nVG9rZW4udG9rZW5JbmRleCkpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaW5wdXQgPSBcIjx1bmtub3duIGlucHV0PlwiO1xuICAgIH1cbiAgICB2YXIgbXNnID0gXCJubyB2aWFibGUgYWx0ZXJuYXRpdmUgYXQgaW5wdXQgXCIgKyB0aGlzLmVzY2FwZVdTQW5kUXVvdGUoaW5wdXQpO1xuICAgIHJlY29nbml6ZXIubm90aWZ5RXJyb3JMaXN0ZW5lcnMobXNnLCBlLm9mZmVuZGluZ1Rva2VuLCBlKTtcbn07XG5cbi8vXG4vLyBUaGlzIGlzIGNhbGxlZCBieSB7QGxpbmsgLy9yZXBvcnRFcnJvcn0gd2hlbiB0aGUgZXhjZXB0aW9uIGlzIGFuXG4vLyB7QGxpbmsgSW5wdXRNaXNtYXRjaEV4Y2VwdGlvbn0uXG4vL1xuLy8gQHNlZSAvL3JlcG9ydEVycm9yXG4vL1xuLy8gQHBhcmFtIHJlY29nbml6ZXIgdGhlIHBhcnNlciBpbnN0YW5jZVxuLy8gQHBhcmFtIGUgdGhlIHJlY29nbml0aW9uIGV4Y2VwdGlvblxuLy9cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5yZXBvcnRJbnB1dE1pc21hdGNoID0gZnVuY3Rpb24ocmVjb2duaXplciwgZSkge1xuICAgIHZhciBtc2cgPSBcIm1pc21hdGNoZWQgaW5wdXQgXCIgKyB0aGlzLmdldFRva2VuRXJyb3JEaXNwbGF5KGUub2ZmZW5kaW5nVG9rZW4pICtcbiAgICAgICAgICBcIiBleHBlY3RpbmcgXCIgKyBlLmdldEV4cGVjdGVkVG9rZW5zKCkudG9TdHJpbmcocmVjb2duaXplci5saXRlcmFsTmFtZXMsIHJlY29nbml6ZXIuc3ltYm9saWNOYW1lcyk7XG4gICAgcmVjb2duaXplci5ub3RpZnlFcnJvckxpc3RlbmVycyhtc2csIGUub2ZmZW5kaW5nVG9rZW4sIGUpO1xufTtcblxuLy9cbi8vIFRoaXMgaXMgY2FsbGVkIGJ5IHtAbGluayAvL3JlcG9ydEVycm9yfSB3aGVuIHRoZSBleGNlcHRpb24gaXMgYVxuLy8ge0BsaW5rIEZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbn0uXG4vL1xuLy8gQHNlZSAvL3JlcG9ydEVycm9yXG4vL1xuLy8gQHBhcmFtIHJlY29nbml6ZXIgdGhlIHBhcnNlciBpbnN0YW5jZVxuLy8gQHBhcmFtIGUgdGhlIHJlY29nbml0aW9uIGV4Y2VwdGlvblxuLy9cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5yZXBvcnRGYWlsZWRQcmVkaWNhdGUgPSBmdW5jdGlvbihyZWNvZ25pemVyLCBlKSB7XG4gICAgdmFyIHJ1bGVOYW1lID0gcmVjb2duaXplci5ydWxlTmFtZXNbcmVjb2duaXplci5fY3R4LnJ1bGVJbmRleF07XG4gICAgdmFyIG1zZyA9IFwicnVsZSBcIiArIHJ1bGVOYW1lICsgXCIgXCIgKyBlLm1lc3NhZ2U7XG4gICAgcmVjb2duaXplci5ub3RpZnlFcnJvckxpc3RlbmVycyhtc2csIGUub2ZmZW5kaW5nVG9rZW4sIGUpO1xufTtcblxuLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIHJlcG9ydCBhIHN5bnRheCBlcnJvciB3aGljaCByZXF1aXJlcyB0aGUgcmVtb3ZhbFxuLy8gb2YgYSB0b2tlbiBmcm9tIHRoZSBpbnB1dCBzdHJlYW0uIEF0IHRoZSB0aW1lIHRoaXMgbWV0aG9kIGlzIGNhbGxlZCwgdGhlXG4vLyBlcnJvbmVvdXMgc3ltYm9sIGlzIGN1cnJlbnQge0Bjb2RlIExUKDEpfSBzeW1ib2wgYW5kIGhhcyBub3QgeWV0IGJlZW5cbi8vIHJlbW92ZWQgZnJvbSB0aGUgaW5wdXQgc3RyZWFtLiBXaGVuIHRoaXMgbWV0aG9kIHJldHVybnMsXG4vLyB7QGNvZGUgcmVjb2duaXplcn0gaXMgaW4gZXJyb3IgcmVjb3ZlcnkgbW9kZS5cbi8vXG4vLyA8cD5UaGlzIG1ldGhvZCBpcyBjYWxsZWQgd2hlbiB7QGxpbmsgLy9zaW5nbGVUb2tlbkRlbGV0aW9ufSBpZGVudGlmaWVzXG4vLyBzaW5nbGUtdG9rZW4gZGVsZXRpb24gYXMgYSB2aWFibGUgcmVjb3Zlcnkgc3RyYXRlZ3kgZm9yIGEgbWlzbWF0Y2hlZFxuLy8gaW5wdXQgZXJyb3IuPC9wPlxuLy9cbi8vIDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHNpbXBseSByZXR1cm5zIGlmIHRoZSBoYW5kbGVyIGlzIGFscmVhZHkgaW5cbi8vIGVycm9yIHJlY292ZXJ5IG1vZGUuIE90aGVyd2lzZSwgaXQgY2FsbHMge0BsaW5rIC8vYmVnaW5FcnJvckNvbmRpdGlvbn0gdG9cbi8vIGVudGVyIGVycm9yIHJlY292ZXJ5IG1vZGUsIGZvbGxvd2VkIGJ5IGNhbGxpbmdcbi8vIHtAbGluayBQYXJzZXIvL25vdGlmeUVycm9yTGlzdGVuZXJzfS48L3A+XG4vL1xuLy8gQHBhcmFtIHJlY29nbml6ZXIgdGhlIHBhcnNlciBpbnN0YW5jZVxuLy9cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5yZXBvcnRVbndhbnRlZFRva2VuID0gZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgIGlmICh0aGlzLmluRXJyb3JSZWNvdmVyeU1vZGUocmVjb2duaXplcikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmJlZ2luRXJyb3JDb25kaXRpb24ocmVjb2duaXplcik7XG4gICAgdmFyIHQgPSByZWNvZ25pemVyLmdldEN1cnJlbnRUb2tlbigpO1xuICAgIHZhciB0b2tlbk5hbWUgPSB0aGlzLmdldFRva2VuRXJyb3JEaXNwbGF5KHQpO1xuICAgIHZhciBleHBlY3RpbmcgPSB0aGlzLmdldEV4cGVjdGVkVG9rZW5zKHJlY29nbml6ZXIpO1xuICAgIHZhciBtc2cgPSBcImV4dHJhbmVvdXMgaW5wdXQgXCIgKyB0b2tlbk5hbWUgKyBcIiBleHBlY3RpbmcgXCIgK1xuICAgICAgICBleHBlY3RpbmcudG9TdHJpbmcocmVjb2duaXplci5saXRlcmFsTmFtZXMsIHJlY29nbml6ZXIuc3ltYm9saWNOYW1lcyk7XG4gICAgcmVjb2duaXplci5ub3RpZnlFcnJvckxpc3RlbmVycyhtc2csIHQsIG51bGwpO1xufTtcbi8vIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byByZXBvcnQgYSBzeW50YXggZXJyb3Igd2hpY2ggcmVxdWlyZXMgdGhlXG4vLyBpbnNlcnRpb24gb2YgYSBtaXNzaW5nIHRva2VuIGludG8gdGhlIGlucHV0IHN0cmVhbS4gQXQgdGhlIHRpbWUgdGhpc1xuLy8gbWV0aG9kIGlzIGNhbGxlZCwgdGhlIG1pc3NpbmcgdG9rZW4gaGFzIG5vdCB5ZXQgYmVlbiBpbnNlcnRlZC4gV2hlbiB0aGlzXG4vLyBtZXRob2QgcmV0dXJucywge0Bjb2RlIHJlY29nbml6ZXJ9IGlzIGluIGVycm9yIHJlY292ZXJ5IG1vZGUuXG4vL1xuLy8gPHA+VGhpcyBtZXRob2QgaXMgY2FsbGVkIHdoZW4ge0BsaW5rIC8vc2luZ2xlVG9rZW5JbnNlcnRpb259IGlkZW50aWZpZXNcbi8vIHNpbmdsZS10b2tlbiBpbnNlcnRpb24gYXMgYSB2aWFibGUgcmVjb3Zlcnkgc3RyYXRlZ3kgZm9yIGEgbWlzbWF0Y2hlZFxuLy8gaW5wdXQgZXJyb3IuPC9wPlxuLy9cbi8vIDxwPlRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9uIHNpbXBseSByZXR1cm5zIGlmIHRoZSBoYW5kbGVyIGlzIGFscmVhZHkgaW5cbi8vIGVycm9yIHJlY292ZXJ5IG1vZGUuIE90aGVyd2lzZSwgaXQgY2FsbHMge0BsaW5rIC8vYmVnaW5FcnJvckNvbmRpdGlvbn0gdG9cbi8vIGVudGVyIGVycm9yIHJlY292ZXJ5IG1vZGUsIGZvbGxvd2VkIGJ5IGNhbGxpbmdcbi8vIHtAbGluayBQYXJzZXIvL25vdGlmeUVycm9yTGlzdGVuZXJzfS48L3A+XG4vL1xuLy8gQHBhcmFtIHJlY29nbml6ZXIgdGhlIHBhcnNlciBpbnN0YW5jZVxuLy9cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5yZXBvcnRNaXNzaW5nVG9rZW4gPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgaWYgKCB0aGlzLmluRXJyb3JSZWNvdmVyeU1vZGUocmVjb2duaXplcikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmJlZ2luRXJyb3JDb25kaXRpb24ocmVjb2duaXplcik7XG4gICAgdmFyIHQgPSByZWNvZ25pemVyLmdldEN1cnJlbnRUb2tlbigpO1xuICAgIHZhciBleHBlY3RpbmcgPSB0aGlzLmdldEV4cGVjdGVkVG9rZW5zKHJlY29nbml6ZXIpO1xuICAgIHZhciBtc2cgPSBcIm1pc3NpbmcgXCIgKyBleHBlY3RpbmcudG9TdHJpbmcocmVjb2duaXplci5saXRlcmFsTmFtZXMsIHJlY29nbml6ZXIuc3ltYm9saWNOYW1lcykgK1xuICAgICAgICAgIFwiIGF0IFwiICsgdGhpcy5nZXRUb2tlbkVycm9yRGlzcGxheSh0KTtcbiAgICByZWNvZ25pemVyLm5vdGlmeUVycm9yTGlzdGVuZXJzKG1zZywgdCwgbnVsbCk7XG59O1xuXG4vLyA8cD5UaGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBhdHRlbXB0cyB0byByZWNvdmVyIGZyb20gdGhlIG1pc21hdGNoZWQgaW5wdXRcbi8vIGJ5IHVzaW5nIHNpbmdsZSB0b2tlbiBpbnNlcnRpb24gYW5kIGRlbGV0aW9uIGFzIGRlc2NyaWJlZCBiZWxvdy4gSWYgdGhlXG4vLyByZWNvdmVyeSBhdHRlbXB0IGZhaWxzLCB0aGlzIG1ldGhvZCB0aHJvd3MgYW5cbi8vIHtAbGluayBJbnB1dE1pc21hdGNoRXhjZXB0aW9ufS48L3A+XG4vL1xuLy8gPHA+PHN0cm9uZz5FWFRSQSBUT0tFTjwvc3Ryb25nPiAoc2luZ2xlIHRva2VuIGRlbGV0aW9uKTwvcD5cbi8vXG4vLyA8cD57QGNvZGUgTEEoMSl9IGlzIG5vdCB3aGF0IHdlIGFyZSBsb29raW5nIGZvci4gSWYge0Bjb2RlIExBKDIpfSBoYXMgdGhlXG4vLyByaWdodCB0b2tlbiwgaG93ZXZlciwgdGhlbiBhc3N1bWUge0Bjb2RlIExBKDEpfSBpcyBzb21lIGV4dHJhIHNwdXJpb3VzXG4vLyB0b2tlbiBhbmQgZGVsZXRlIGl0LiBUaGVuIGNvbnN1bWUgYW5kIHJldHVybiB0aGUgbmV4dCB0b2tlbiAod2hpY2ggd2FzXG4vLyB0aGUge0Bjb2RlIExBKDIpfSB0b2tlbikgYXMgdGhlIHN1Y2Nlc3NmdWwgcmVzdWx0IG9mIHRoZSBtYXRjaCBvcGVyYXRpb24uPC9wPlxuLy9cbi8vIDxwPlRoaXMgcmVjb3Zlcnkgc3RyYXRlZ3kgaXMgaW1wbGVtZW50ZWQgYnkge0BsaW5rXG4vLyAvL3NpbmdsZVRva2VuRGVsZXRpb259LjwvcD5cbi8vXG4vLyA8cD48c3Ryb25nPk1JU1NJTkcgVE9LRU48L3N0cm9uZz4gKHNpbmdsZSB0b2tlbiBpbnNlcnRpb24pPC9wPlxuLy9cbi8vIDxwPklmIGN1cnJlbnQgdG9rZW4gKGF0IHtAY29kZSBMQSgxKX0pIGlzIGNvbnNpc3RlbnQgd2l0aCB3aGF0IGNvdWxkIGNvbWVcbi8vIGFmdGVyIHRoZSBleHBlY3RlZCB7QGNvZGUgTEEoMSl9IHRva2VuLCB0aGVuIGFzc3VtZSB0aGUgdG9rZW4gaXMgbWlzc2luZ1xuLy8gYW5kIHVzZSB0aGUgcGFyc2VyJ3Mge0BsaW5rIFRva2VuRmFjdG9yeX0gdG8gY3JlYXRlIGl0IG9uIHRoZSBmbHkuIFRoZVxuLy8gXCJpbnNlcnRpb25cIiBpcyBwZXJmb3JtZWQgYnkgcmV0dXJuaW5nIHRoZSBjcmVhdGVkIHRva2VuIGFzIHRoZSBzdWNjZXNzZnVsXG4vLyByZXN1bHQgb2YgdGhlIG1hdGNoIG9wZXJhdGlvbi48L3A+XG4vL1xuLy8gPHA+VGhpcyByZWNvdmVyeSBzdHJhdGVneSBpcyBpbXBsZW1lbnRlZCBieSB7QGxpbmtcbi8vIC8vc2luZ2xlVG9rZW5JbnNlcnRpb259LjwvcD5cbi8vXG4vLyA8cD48c3Ryb25nPkVYQU1QTEU8L3N0cm9uZz48L3A+XG4vL1xuLy8gPHA+Rm9yIGV4YW1wbGUsIElucHV0IHtAY29kZSBpPSgzO30gaXMgY2xlYXJseSBtaXNzaW5nIHRoZSB7QGNvZGUgJyknfS4gV2hlblxuLy8gdGhlIHBhcnNlciByZXR1cm5zIGZyb20gdGhlIG5lc3RlZCBjYWxsIHRvIHtAY29kZSBleHByfSwgaXQgd2lsbCBoYXZlXG4vLyBjYWxsIGNoYWluOjwvcD5cbi8vXG4vLyA8cHJlPlxuLy8gc3RhdCAmcmFycjsgZXhwciAmcmFycjsgYXRvbVxuLy8gPC9wcmU+XG4vL1xuLy8gYW5kIGl0IHdpbGwgYmUgdHJ5aW5nIHRvIG1hdGNoIHRoZSB7QGNvZGUgJyknfSBhdCB0aGlzIHBvaW50IGluIHRoZVxuLy8gZGVyaXZhdGlvbjpcbi8vXG4vLyA8cHJlPlxuLy8gPSZndDsgSUQgJz0nICcoJyBJTlQgJyknICgnKycgYXRvbSkqICc7J1xuLy8gXlxuLy8gPC9wcmU+XG4vL1xuLy8gVGhlIGF0dGVtcHQgdG8gbWF0Y2gge0Bjb2RlICcpJ30gd2lsbCBmYWlsIHdoZW4gaXQgc2VlcyB7QGNvZGUgJzsnfSBhbmRcbi8vIGNhbGwge0BsaW5rIC8vcmVjb3ZlcklubGluZX0uIFRvIHJlY292ZXIsIGl0IHNlZXMgdGhhdCB7QGNvZGUgTEEoMSk9PSc7J31cbi8vIGlzIGluIHRoZSBzZXQgb2YgdG9rZW5zIHRoYXQgY2FuIGZvbGxvdyB0aGUge0Bjb2RlICcpJ30gdG9rZW4gcmVmZXJlbmNlXG4vLyBpbiBydWxlIHtAY29kZSBhdG9tfS4gSXQgY2FuIGFzc3VtZSB0aGF0IHlvdSBmb3Jnb3QgdGhlIHtAY29kZSAnKSd9LlxuLy9cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5yZWNvdmVySW5saW5lID0gZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgIC8vIFNJTkdMRSBUT0tFTiBERUxFVElPTlxuICAgIHZhciBtYXRjaGVkU3ltYm9sID0gdGhpcy5zaW5nbGVUb2tlbkRlbGV0aW9uKHJlY29nbml6ZXIpO1xuICAgIGlmIChtYXRjaGVkU3ltYm9sICE9PSBudWxsKSB7XG4gICAgICAgIC8vIHdlIGhhdmUgZGVsZXRlZCB0aGUgZXh0cmEgdG9rZW4uXG4gICAgICAgIC8vIG5vdywgbW92ZSBwYXN0IHR0eXBlIHRva2VuIGFzIGlmIGFsbCB3ZXJlIG9rXG4gICAgICAgIHJlY29nbml6ZXIuY29uc3VtZSgpO1xuICAgICAgICByZXR1cm4gbWF0Y2hlZFN5bWJvbDtcbiAgICB9XG4gICAgLy8gU0lOR0xFIFRPS0VOIElOU0VSVElPTlxuICAgIGlmICh0aGlzLnNpbmdsZVRva2VuSW5zZXJ0aW9uKHJlY29nbml6ZXIpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldE1pc3NpbmdTeW1ib2wocmVjb2duaXplcik7XG4gICAgfVxuICAgIC8vIGV2ZW4gdGhhdCBkaWRuJ3Qgd29yazsgbXVzdCB0aHJvdyB0aGUgZXhjZXB0aW9uXG4gICAgdGhyb3cgbmV3IElucHV0TWlzbWF0Y2hFeGNlcHRpb24ocmVjb2duaXplcik7XG59O1xuXG4vL1xuLy8gVGhpcyBtZXRob2QgaW1wbGVtZW50cyB0aGUgc2luZ2xlLXRva2VuIGluc2VydGlvbiBpbmxpbmUgZXJyb3IgcmVjb3Zlcnlcbi8vIHN0cmF0ZWd5LiBJdCBpcyBjYWxsZWQgYnkge0BsaW5rIC8vcmVjb3ZlcklubGluZX0gaWYgdGhlIHNpbmdsZS10b2tlblxuLy8gZGVsZXRpb24gc3RyYXRlZ3kgZmFpbHMgdG8gcmVjb3ZlciBmcm9tIHRoZSBtaXNtYXRjaGVkIGlucHV0LiBJZiB0aGlzXG4vLyBtZXRob2QgcmV0dXJucyB7QGNvZGUgdHJ1ZX0sIHtAY29kZSByZWNvZ25pemVyfSB3aWxsIGJlIGluIGVycm9yIHJlY292ZXJ5XG4vLyBtb2RlLlxuLy9cbi8vIDxwPlRoaXMgbWV0aG9kIGRldGVybWluZXMgd2hldGhlciBvciBub3Qgc2luZ2xlLXRva2VuIGluc2VydGlvbiBpcyB2aWFibGUgYnlcbi8vIGNoZWNraW5nIGlmIHRoZSB7QGNvZGUgTEEoMSl9IGlucHV0IHN5bWJvbCBjb3VsZCBiZSBzdWNjZXNzZnVsbHkgbWF0Y2hlZFxuLy8gaWYgaXQgd2VyZSBpbnN0ZWFkIHRoZSB7QGNvZGUgTEEoMil9IHN5bWJvbC4gSWYgdGhpcyBtZXRob2QgcmV0dXJuc1xuLy8ge0Bjb2RlIHRydWV9LCB0aGUgY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjcmVhdGluZyBhbmQgaW5zZXJ0aW5nIGFcbi8vIHRva2VuIHdpdGggdGhlIGNvcnJlY3QgdHlwZSB0byBwcm9kdWNlIHRoaXMgYmVoYXZpb3IuPC9wPlxuLy9cbi8vIEBwYXJhbSByZWNvZ25pemVyIHRoZSBwYXJzZXIgaW5zdGFuY2Vcbi8vIEByZXR1cm4ge0Bjb2RlIHRydWV9IGlmIHNpbmdsZS10b2tlbiBpbnNlcnRpb24gaXMgYSB2aWFibGUgcmVjb3Zlcnlcbi8vIHN0cmF0ZWd5IGZvciB0aGUgY3VycmVudCBtaXNtYXRjaGVkIGlucHV0LCBvdGhlcndpc2Uge0Bjb2RlIGZhbHNlfVxuLy9cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5zaW5nbGVUb2tlbkluc2VydGlvbiA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICB2YXIgY3VycmVudFN5bWJvbFR5cGUgPSByZWNvZ25pemVyLmdldFRva2VuU3RyZWFtKCkuTEEoMSk7XG4gICAgLy8gaWYgY3VycmVudCB0b2tlbiBpcyBjb25zaXN0ZW50IHdpdGggd2hhdCBjb3VsZCBjb21lIGFmdGVyIGN1cnJlbnRcbiAgICAvLyBBVE4gc3RhdGUsIHRoZW4gd2Uga25vdyB3ZSdyZSBtaXNzaW5nIGEgdG9rZW47IGVycm9yIHJlY292ZXJ5XG4gICAgLy8gaXMgZnJlZSB0byBjb25qdXJlIHVwIGFuZCBpbnNlcnQgdGhlIG1pc3NpbmcgdG9rZW5cbiAgICB2YXIgYXRuID0gcmVjb2duaXplci5faW50ZXJwLmF0bjtcbiAgICB2YXIgY3VycmVudFN0YXRlID0gYXRuLnN0YXRlc1tyZWNvZ25pemVyLnN0YXRlXTtcbiAgICB2YXIgbmV4dCA9IGN1cnJlbnRTdGF0ZS50cmFuc2l0aW9uc1swXS50YXJnZXQ7XG4gICAgdmFyIGV4cGVjdGluZ0F0TEwyID0gYXRuLm5leHRUb2tlbnMobmV4dCwgcmVjb2duaXplci5fY3R4KTtcbiAgICBpZiAoZXhwZWN0aW5nQXRMTDIuY29udGFpbnMoY3VycmVudFN5bWJvbFR5cGUpICl7XG4gICAgICAgIHRoaXMucmVwb3J0TWlzc2luZ1Rva2VuKHJlY29nbml6ZXIpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufTtcblxuLy8gVGhpcyBtZXRob2QgaW1wbGVtZW50cyB0aGUgc2luZ2xlLXRva2VuIGRlbGV0aW9uIGlubGluZSBlcnJvciByZWNvdmVyeVxuLy8gc3RyYXRlZ3kuIEl0IGlzIGNhbGxlZCBieSB7QGxpbmsgLy9yZWNvdmVySW5saW5lfSB0byBhdHRlbXB0IHRvIHJlY292ZXJcbi8vIGZyb20gbWlzbWF0Y2hlZCBpbnB1dC4gSWYgdGhpcyBtZXRob2QgcmV0dXJucyBudWxsLCB0aGUgcGFyc2VyIGFuZCBlcnJvclxuLy8gaGFuZGxlciBzdGF0ZSB3aWxsIG5vdCBoYXZlIGNoYW5nZWQuIElmIHRoaXMgbWV0aG9kIHJldHVybnMgbm9uLW51bGwsXG4vLyB7QGNvZGUgcmVjb2duaXplcn0gd2lsbCA8ZW0+bm90PC9lbT4gYmUgaW4gZXJyb3IgcmVjb3ZlcnkgbW9kZSBzaW5jZSB0aGVcbi8vIHJldHVybmVkIHRva2VuIHdhcyBhIHN1Y2Nlc3NmdWwgbWF0Y2guXG4vL1xuLy8gPHA+SWYgdGhlIHNpbmdsZS10b2tlbiBkZWxldGlvbiBpcyBzdWNjZXNzZnVsLCB0aGlzIG1ldGhvZCBjYWxsc1xuLy8ge0BsaW5rIC8vcmVwb3J0VW53YW50ZWRUb2tlbn0gdG8gcmVwb3J0IHRoZSBlcnJvciwgZm9sbG93ZWQgYnlcbi8vIHtAbGluayBQYXJzZXIvL2NvbnN1bWV9IHRvIGFjdHVhbGx5IFwiZGVsZXRlXCIgdGhlIGV4dHJhbmVvdXMgdG9rZW4uIFRoZW4sXG4vLyBiZWZvcmUgcmV0dXJuaW5nIHtAbGluayAvL3JlcG9ydE1hdGNofSBpcyBjYWxsZWQgdG8gc2lnbmFsIGEgc3VjY2Vzc2Z1bFxuLy8gbWF0Y2guPC9wPlxuLy9cbi8vIEBwYXJhbSByZWNvZ25pemVyIHRoZSBwYXJzZXIgaW5zdGFuY2Vcbi8vIEByZXR1cm4gdGhlIHN1Y2Nlc3NmdWxseSBtYXRjaGVkIHtAbGluayBUb2tlbn0gaW5zdGFuY2UgaWYgc2luZ2xlLXRva2VuXG4vLyBkZWxldGlvbiBzdWNjZXNzZnVsbHkgcmVjb3ZlcnMgZnJvbSB0aGUgbWlzbWF0Y2hlZCBpbnB1dCwgb3RoZXJ3aXNlXG4vLyB7QGNvZGUgbnVsbH1cbi8vXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUuc2luZ2xlVG9rZW5EZWxldGlvbiA9IGZ1bmN0aW9uKHJlY29nbml6ZXIpIHtcbiAgICB2YXIgbmV4dFRva2VuVHlwZSA9IHJlY29nbml6ZXIuZ2V0VG9rZW5TdHJlYW0oKS5MQSgyKTtcbiAgICB2YXIgZXhwZWN0aW5nID0gdGhpcy5nZXRFeHBlY3RlZFRva2VucyhyZWNvZ25pemVyKTtcbiAgICBpZiAoZXhwZWN0aW5nLmNvbnRhaW5zKG5leHRUb2tlblR5cGUpKSB7XG4gICAgICAgIHRoaXMucmVwb3J0VW53YW50ZWRUb2tlbihyZWNvZ25pemVyKTtcbiAgICAgICAgLy8gcHJpbnQoXCJyZWNvdmVyRnJvbU1pc21hdGNoZWRUb2tlbiBkZWxldGluZyBcIiBcXFxuICAgICAgICAvLyArIHN0cihyZWNvZ25pemVyLmdldFRva2VuU3RyZWFtKCkuTFQoMSkpIFxcXG4gICAgICAgIC8vICsgXCIgc2luY2UgXCIgKyBzdHIocmVjb2duaXplci5nZXRUb2tlblN0cmVhbSgpLkxUKDIpKSBcXFxuICAgICAgICAvLyArIFwiIGlzIHdoYXQgd2Ugd2FudFwiLCBmaWxlPXN5cy5zdGRlcnIpXG4gICAgICAgIHJlY29nbml6ZXIuY29uc3VtZSgpOyAvLyBzaW1wbHkgZGVsZXRlIGV4dHJhIHRva2VuXG4gICAgICAgIC8vIHdlIHdhbnQgdG8gcmV0dXJuIHRoZSB0b2tlbiB3ZSdyZSBhY3R1YWxseSBtYXRjaGluZ1xuICAgICAgICB2YXIgbWF0Y2hlZFN5bWJvbCA9IHJlY29nbml6ZXIuZ2V0Q3VycmVudFRva2VuKCk7XG4gICAgICAgIHRoaXMucmVwb3J0TWF0Y2gocmVjb2duaXplcik7IC8vIHdlIGtub3cgY3VycmVudCB0b2tlbiBpcyBjb3JyZWN0XG4gICAgICAgIHJldHVybiBtYXRjaGVkU3ltYm9sO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbn07XG5cbi8vIENvbmp1cmUgdXAgYSBtaXNzaW5nIHRva2VuIGR1cmluZyBlcnJvciByZWNvdmVyeS5cbi8vXG4vLyBUaGUgcmVjb2duaXplciBhdHRlbXB0cyB0byByZWNvdmVyIGZyb20gc2luZ2xlIG1pc3Npbmdcbi8vIHN5bWJvbHMuIEJ1dCwgYWN0aW9ucyBtaWdodCByZWZlciB0byB0aGF0IG1pc3Npbmcgc3ltYm9sLlxuLy8gRm9yIGV4YW1wbGUsIHg9SUQge2YoJHgpO30uIFRoZSBhY3Rpb24gY2xlYXJseSBhc3N1bWVzXG4vLyB0aGF0IHRoZXJlIGhhcyBiZWVuIGFuIGlkZW50aWZpZXIgbWF0Y2hlZCBwcmV2aW91c2x5IGFuZCB0aGF0XG4vLyAkeCBwb2ludHMgYXQgdGhhdCB0b2tlbi4gSWYgdGhhdCB0b2tlbiBpcyBtaXNzaW5nLCBidXRcbi8vIHRoZSBuZXh0IHRva2VuIGluIHRoZSBzdHJlYW0gaXMgd2hhdCB3ZSB3YW50IHdlIGFzc3VtZSB0aGF0XG4vLyB0aGlzIHRva2VuIGlzIG1pc3NpbmcgYW5kIHdlIGtlZXAgZ29pbmcuIEJlY2F1c2Ugd2Vcbi8vIGhhdmUgdG8gcmV0dXJuIHNvbWUgdG9rZW4gdG8gcmVwbGFjZSB0aGUgbWlzc2luZyB0b2tlbixcbi8vIHdlIGhhdmUgdG8gY29uanVyZSBvbmUgdXAuIFRoaXMgbWV0aG9kIGdpdmVzIHRoZSB1c2VyIGNvbnRyb2xcbi8vIG92ZXIgdGhlIHRva2VucyByZXR1cm5lZCBmb3IgbWlzc2luZyB0b2tlbnMuIE1vc3RseSxcbi8vIHlvdSB3aWxsIHdhbnQgdG8gY3JlYXRlIHNvbWV0aGluZyBzcGVjaWFsIGZvciBpZGVudGlmaWVyXG4vLyB0b2tlbnMuIEZvciBsaXRlcmFscyBzdWNoIGFzICd7JyBhbmQgJywnLCB0aGUgZGVmYXVsdFxuLy8gYWN0aW9uIGluIHRoZSBwYXJzZXIgb3IgdHJlZSBwYXJzZXIgd29ya3MuIEl0IHNpbXBseSBjcmVhdGVzXG4vLyBhIENvbW1vblRva2VuIG9mIHRoZSBhcHByb3ByaWF0ZSB0eXBlLiBUaGUgdGV4dCB3aWxsIGJlIHRoZSB0b2tlbi5cbi8vIElmIHlvdSBjaGFuZ2Ugd2hhdCB0b2tlbnMgbXVzdCBiZSBjcmVhdGVkIGJ5IHRoZSBsZXhlcixcbi8vIG92ZXJyaWRlIHRoaXMgbWV0aG9kIHRvIGNyZWF0ZSB0aGUgYXBwcm9wcmlhdGUgdG9rZW5zLlxuLy9cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5nZXRNaXNzaW5nU3ltYm9sID0gZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgIHZhciBjdXJyZW50U3ltYm9sID0gcmVjb2duaXplci5nZXRDdXJyZW50VG9rZW4oKTtcbiAgICB2YXIgZXhwZWN0aW5nID0gdGhpcy5nZXRFeHBlY3RlZFRva2VucyhyZWNvZ25pemVyKTtcbiAgICB2YXIgZXhwZWN0ZWRUb2tlblR5cGUgPSBleHBlY3RpbmcuZmlyc3QoKTsgLy8gZ2V0IGFueSBlbGVtZW50XG4gICAgdmFyIHRva2VuVGV4dDtcbiAgICBpZiAoZXhwZWN0ZWRUb2tlblR5cGU9PT1Ub2tlbi5FT0YpIHtcbiAgICAgICAgdG9rZW5UZXh0ID0gXCI8bWlzc2luZyBFT0Y+XCI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdG9rZW5UZXh0ID0gXCI8bWlzc2luZyBcIiArIHJlY29nbml6ZXIubGl0ZXJhbE5hbWVzW2V4cGVjdGVkVG9rZW5UeXBlXSArIFwiPlwiO1xuICAgIH1cbiAgICB2YXIgY3VycmVudCA9IGN1cnJlbnRTeW1ib2w7XG4gICAgdmFyIGxvb2tiYWNrID0gcmVjb2duaXplci5nZXRUb2tlblN0cmVhbSgpLkxUKC0xKTtcbiAgICBpZiAoY3VycmVudC50eXBlPT09VG9rZW4uRU9GICYmIGxvb2tiYWNrICE9PSBudWxsKSB7XG4gICAgICAgIGN1cnJlbnQgPSBsb29rYmFjaztcbiAgICB9XG4gICAgcmV0dXJuIHJlY29nbml6ZXIuZ2V0VG9rZW5GYWN0b3J5KCkuY3JlYXRlKGN1cnJlbnQuc291cmNlLFxuICAgICAgICBleHBlY3RlZFRva2VuVHlwZSwgdG9rZW5UZXh0LCBUb2tlbi5ERUZBVUxUX0NIQU5ORUwsXG4gICAgICAgIC0xLCAtMSwgY3VycmVudC5saW5lLCBjdXJyZW50LmNvbHVtbik7XG59O1xuXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUuZ2V0RXhwZWN0ZWRUb2tlbnMgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgcmV0dXJuIHJlY29nbml6ZXIuZ2V0RXhwZWN0ZWRUb2tlbnMoKTtcbn07XG5cbi8vIEhvdyBzaG91bGQgYSB0b2tlbiBiZSBkaXNwbGF5ZWQgaW4gYW4gZXJyb3IgbWVzc2FnZT8gVGhlIGRlZmF1bHRcbi8vIGlzIHRvIGRpc3BsYXkganVzdCB0aGUgdGV4dCwgYnV0IGR1cmluZyBkZXZlbG9wbWVudCB5b3UgbWlnaHRcbi8vIHdhbnQgdG8gaGF2ZSBhIGxvdCBvZiBpbmZvcm1hdGlvbiBzcGl0IG91dC4gT3ZlcnJpZGUgaW4gdGhhdCBjYXNlXG4vLyB0byB1c2UgdC50b1N0cmluZygpICh3aGljaCwgZm9yIENvbW1vblRva2VuLCBkdW1wcyBldmVyeXRoaW5nIGFib3V0XG4vLyB0aGUgdG9rZW4pLiBUaGlzIGlzIGJldHRlciB0aGFuIGZvcmNpbmcgeW91IHRvIG92ZXJyaWRlIGEgbWV0aG9kIGluXG4vLyB5b3VyIHRva2VuIG9iamVjdHMgYmVjYXVzZSB5b3UgZG9uJ3QgaGF2ZSB0byBnbyBtb2RpZnkgeW91ciBsZXhlclxuLy8gc28gdGhhdCBpdCBjcmVhdGVzIGEgbmV3IEphdmEgdHlwZS5cbi8vXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUuZ2V0VG9rZW5FcnJvckRpc3BsYXkgPSBmdW5jdGlvbih0KSB7XG4gICAgaWYgKHQgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFwiPG5vIHRva2VuPlwiO1xuICAgIH1cbiAgICB2YXIgcyA9IHQudGV4dDtcbiAgICBpZiAocyA9PT0gbnVsbCkge1xuICAgICAgICBpZiAodC50eXBlPT09VG9rZW4uRU9GKSB7XG4gICAgICAgICAgICBzID0gXCI8RU9GPlwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcyA9IFwiPFwiICsgdC50eXBlICsgXCI+XCI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZXNjYXBlV1NBbmRRdW90ZShzKTtcbn07XG5cbkRlZmF1bHRFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5lc2NhcGVXU0FuZFF1b3RlID0gZnVuY3Rpb24ocykge1xuICAgIHMgPSBzLnJlcGxhY2UoL1xcbi9nLFwiXFxcXG5cIik7XG4gICAgcyA9IHMucmVwbGFjZSgvXFxyL2csXCJcXFxcclwiKTtcbiAgICBzID0gcy5yZXBsYWNlKC9cXHQvZyxcIlxcXFx0XCIpO1xuICAgIHJldHVybiBcIidcIiArIHMgKyBcIidcIjtcbn07XG5cbi8vIENvbXB1dGUgdGhlIGVycm9yIHJlY292ZXJ5IHNldCBmb3IgdGhlIGN1cnJlbnQgcnVsZS4gRHVyaW5nXG4vLyBydWxlIGludm9jYXRpb24sIHRoZSBwYXJzZXIgcHVzaGVzIHRoZSBzZXQgb2YgdG9rZW5zIHRoYXQgY2FuXG4vLyBmb2xsb3cgdGhhdCBydWxlIHJlZmVyZW5jZSBvbiB0aGUgc3RhY2s7IHRoaXMgYW1vdW50cyB0b1xuLy8gY29tcHV0aW5nIEZJUlNUIG9mIHdoYXQgZm9sbG93cyB0aGUgcnVsZSByZWZlcmVuY2UgaW4gdGhlXG4vLyBlbmNsb3NpbmcgcnVsZS4gU2VlIExpbmVhckFwcHJveGltYXRvci5GSVJTVCgpLlxuLy8gVGhpcyBsb2NhbCBmb2xsb3cgc2V0IG9ubHkgaW5jbHVkZXMgdG9rZW5zXG4vLyBmcm9tIHdpdGhpbiB0aGUgcnVsZTsgaS5lLiwgdGhlIEZJUlNUIGNvbXB1dGF0aW9uIGRvbmUgYnlcbi8vIEFOVExSIHN0b3BzIGF0IHRoZSBlbmQgb2YgYSBydWxlLlxuLy9cbi8vIEVYQU1QTEVcbi8vXG4vLyBXaGVuIHlvdSBmaW5kIGEgXCJubyB2aWFibGUgYWx0IGV4Y2VwdGlvblwiLCB0aGUgaW5wdXQgaXMgbm90XG4vLyBjb25zaXN0ZW50IHdpdGggYW55IG9mIHRoZSBhbHRlcm5hdGl2ZXMgZm9yIHJ1bGUgci4gVGhlIGJlc3Rcbi8vIHRoaW5nIHRvIGRvIGlzIHRvIGNvbnN1bWUgdG9rZW5zIHVudGlsIHlvdSBzZWUgc29tZXRoaW5nIHRoYXRcbi8vIGNhbiBsZWdhbGx5IGZvbGxvdyBhIGNhbGwgdG8gci8vb3IqIGFueSBydWxlIHRoYXQgY2FsbGVkIHIuXG4vLyBZb3UgZG9uJ3Qgd2FudCB0aGUgZXhhY3Qgc2V0IG9mIHZpYWJsZSBuZXh0IHRva2VucyBiZWNhdXNlIHRoZVxuLy8gaW5wdXQgbWlnaHQganVzdCBiZSBtaXNzaW5nIGEgdG9rZW4tLXlvdSBtaWdodCBjb25zdW1lIHRoZVxuLy8gcmVzdCBvZiB0aGUgaW5wdXQgbG9va2luZyBmb3Igb25lIG9mIHRoZSBtaXNzaW5nIHRva2Vucy5cbi8vXG4vLyBDb25zaWRlciBncmFtbWFyOlxuLy9cbi8vIGEgOiAnWycgYiAnXSdcbi8vIHwgJygnIGIgJyknXG4vLyA7XG4vLyBiIDogYyAnXicgSU5UIDtcbi8vIGMgOiBJRFxuLy8gfCBJTlRcbi8vIDtcbi8vXG4vLyBBdCBlYWNoIHJ1bGUgaW52b2NhdGlvbiwgdGhlIHNldCBvZiB0b2tlbnMgdGhhdCBjb3VsZCBmb2xsb3dcbi8vIHRoYXQgcnVsZSBpcyBwdXNoZWQgb24gYSBzdGFjay4gSGVyZSBhcmUgdGhlIHZhcmlvdXNcbi8vIGNvbnRleHQtc2Vuc2l0aXZlIGZvbGxvdyBzZXRzOlxuLy9cbi8vIEZPTExPVyhiMV9pbl9hKSA9IEZJUlNUKCddJykgPSAnXSdcbi8vIEZPTExPVyhiMl9pbl9hKSA9IEZJUlNUKCcpJykgPSAnKSdcbi8vIEZPTExPVyhjX2luX2IpID0gRklSU1QoJ14nKSA9ICdeJ1xuLy9cbi8vIFVwb24gZXJyb25lb3VzIGlucHV0IFwiW11cIiwgdGhlIGNhbGwgY2hhaW4gaXNcbi8vXG4vLyBhIC0+IGIgLT4gY1xuLy9cbi8vIGFuZCwgaGVuY2UsIHRoZSBmb2xsb3cgY29udGV4dCBzdGFjayBpczpcbi8vXG4vLyBkZXB0aCBmb2xsb3cgc2V0IHN0YXJ0IG9mIHJ1bGUgZXhlY3V0aW9uXG4vLyAwIDxFT0Y+IGEgKGZyb20gbWFpbigpKVxuLy8gMSAnXScgYlxuLy8gMiAnXicgY1xuLy9cbi8vIE5vdGljZSB0aGF0ICcpJyBpcyBub3QgaW5jbHVkZWQsIGJlY2F1c2UgYiB3b3VsZCBoYXZlIHRvIGhhdmVcbi8vIGJlZW4gY2FsbGVkIGZyb20gYSBkaWZmZXJlbnQgY29udGV4dCBpbiBydWxlIGEgZm9yICcpJyB0byBiZVxuLy8gaW5jbHVkZWQuXG4vL1xuLy8gRm9yIGVycm9yIHJlY292ZXJ5LCB3ZSBjYW5ub3QgY29uc2lkZXIgRk9MTE9XKGMpXG4vLyAoY29udGV4dC1zZW5zaXRpdmUgb3Igb3RoZXJ3aXNlKS4gV2UgbmVlZCB0aGUgY29tYmluZWQgc2V0IG9mXG4vLyBhbGwgY29udGV4dC1zZW5zaXRpdmUgRk9MTE9XIHNldHMtLXRoZSBzZXQgb2YgYWxsIHRva2VucyB0aGF0XG4vLyBjb3VsZCBmb2xsb3cgYW55IHJlZmVyZW5jZSBpbiB0aGUgY2FsbCBjaGFpbi4gV2UgbmVlZCB0b1xuLy8gcmVzeW5jIHRvIG9uZSBvZiB0aG9zZSB0b2tlbnMuIE5vdGUgdGhhdCBGT0xMT1coYyk9J14nIGFuZCBpZlxuLy8gd2UgcmVzeW5jJ2QgdG8gdGhhdCB0b2tlbiwgd2UnZCBjb25zdW1lIHVudGlsIEVPRi4gV2UgbmVlZCB0b1xuLy8gc3luYyB0byBjb250ZXh0LXNlbnNpdGl2ZSBGT0xMT1dzIGZvciBhLCBiLCBhbmQgYzogeyddJywnXid9LlxuLy8gSW4gdGhpcyBjYXNlLCBmb3IgaW5wdXQgXCJbXVwiLCBMQSgxKSBpcyAnXScgYW5kIGluIHRoZSBzZXQsIHNvIHdlIHdvdWxkXG4vLyBub3QgY29uc3VtZSBhbnl0aGluZy4gQWZ0ZXIgcHJpbnRpbmcgYW4gZXJyb3IsIHJ1bGUgYyB3b3VsZFxuLy8gcmV0dXJuIG5vcm1hbGx5LiBSdWxlIGIgd291bGQgbm90IGZpbmQgdGhlIHJlcXVpcmVkICdeJyB0aG91Z2guXG4vLyBBdCB0aGlzIHBvaW50LCBpdCBnZXRzIGEgbWlzbWF0Y2hlZCB0b2tlbiBlcnJvciBhbmQgdGhyb3dzIGFuXG4vLyBleGNlcHRpb24gKHNpbmNlIExBKDEpIGlzIG5vdCBpbiB0aGUgdmlhYmxlIGZvbGxvd2luZyB0b2tlblxuLy8gc2V0KS4gVGhlIHJ1bGUgZXhjZXB0aW9uIGhhbmRsZXIgdHJpZXMgdG8gcmVjb3ZlciwgYnV0IGZpbmRzXG4vLyB0aGUgc2FtZSByZWNvdmVyeSBzZXQgYW5kIGRvZXNuJ3QgY29uc3VtZSBhbnl0aGluZy4gUnVsZSBiXG4vLyBleGl0cyBub3JtYWxseSByZXR1cm5pbmcgdG8gcnVsZSBhLiBOb3cgaXQgZmluZHMgdGhlICddJyAoYW5kXG4vLyB3aXRoIHRoZSBzdWNjZXNzZnVsIG1hdGNoIGV4aXRzIGVycm9yUmVjb3ZlcnkgbW9kZSkuXG4vL1xuLy8gU28sIHlvdSBjYW4gc2VlIHRoYXQgdGhlIHBhcnNlciB3YWxrcyB1cCB0aGUgY2FsbCBjaGFpbiBsb29raW5nXG4vLyBmb3IgdGhlIHRva2VuIHRoYXQgd2FzIGEgbWVtYmVyIG9mIHRoZSByZWNvdmVyeSBzZXQuXG4vL1xuLy8gRXJyb3JzIGFyZSBub3QgZ2VuZXJhdGVkIGluIGVycm9yUmVjb3ZlcnkgbW9kZS5cbi8vXG4vLyBBTlRMUidzIGVycm9yIHJlY292ZXJ5IG1lY2hhbmlzbSBpcyBiYXNlZCB1cG9uIG9yaWdpbmFsIGlkZWFzOlxuLy9cbi8vIFwiQWxnb3JpdGhtcyArIERhdGEgU3RydWN0dXJlcyA9IFByb2dyYW1zXCIgYnkgTmlrbGF1cyBXaXJ0aFxuLy9cbi8vIGFuZFxuLy9cbi8vIFwiQSBub3RlIG9uIGVycm9yIHJlY292ZXJ5IGluIHJlY3Vyc2l2ZSBkZXNjZW50IHBhcnNlcnNcIjpcbi8vIGh0dHA6Ly9wb3J0YWwuYWNtLm9yZy9jaXRhdGlvbi5jZm0/aWQ9OTQ3OTAyLjk0NzkwNVxuLy9cbi8vIExhdGVyLCBKb3NlZiBHcm9zY2ggaGFkIHNvbWUgZ29vZCBpZGVhczpcbi8vXG4vLyBcIkVmZmljaWVudCBhbmQgQ29tZm9ydGFibGUgRXJyb3IgUmVjb3ZlcnkgaW4gUmVjdXJzaXZlIERlc2NlbnRcbi8vIFBhcnNlcnNcIjpcbi8vIGZ0cDovL3d3dy5jb2NvbGFiLmNvbS9wcm9kdWN0cy9jb2NrdGFpbC9kb2NhNC5wcy9lbGwucHMuemlwXG4vL1xuLy8gTGlrZSBHcm9zY2ggSSBpbXBsZW1lbnQgY29udGV4dC1zZW5zaXRpdmUgRk9MTE9XIHNldHMgdGhhdCBhcmUgY29tYmluZWRcbi8vIGF0IHJ1bi10aW1lIHVwb24gZXJyb3IgdG8gYXZvaWQgb3ZlcmhlYWQgZHVyaW5nIHBhcnNpbmcuXG4vL1xuRGVmYXVsdEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLmdldEVycm9yUmVjb3ZlcnlTZXQgPSBmdW5jdGlvbihyZWNvZ25pemVyKSB7XG4gICAgdmFyIGF0biA9IHJlY29nbml6ZXIuX2ludGVycC5hdG47XG4gICAgdmFyIGN0eCA9IHJlY29nbml6ZXIuX2N0eDtcbiAgICB2YXIgcmVjb3ZlclNldCA9IG5ldyBJbnRlcnZhbFNldCgpO1xuICAgIHdoaWxlIChjdHggIT09IG51bGwgJiYgY3R4Lmludm9raW5nU3RhdGU+PTApIHtcbiAgICAgICAgLy8gY29tcHV0ZSB3aGF0IGZvbGxvd3Mgd2hvIGludm9rZWQgdXNcbiAgICAgICAgdmFyIGludm9raW5nU3RhdGUgPSBhdG4uc3RhdGVzW2N0eC5pbnZva2luZ1N0YXRlXTtcbiAgICAgICAgdmFyIHJ0ID0gaW52b2tpbmdTdGF0ZS50cmFuc2l0aW9uc1swXTtcbiAgICAgICAgdmFyIGZvbGxvdyA9IGF0bi5uZXh0VG9rZW5zKHJ0LmZvbGxvd1N0YXRlKTtcbiAgICAgICAgcmVjb3ZlclNldC5hZGRTZXQoZm9sbG93KTtcbiAgICAgICAgY3R4ID0gY3R4LnBhcmVudEN0eDtcbiAgICB9XG4gICAgcmVjb3ZlclNldC5yZW1vdmVPbmUoVG9rZW4uRVBTSUxPTik7XG4gICAgcmV0dXJuIHJlY292ZXJTZXQ7XG59O1xuXG4vLyBDb25zdW1lIHRva2VucyB1bnRpbCBvbmUgbWF0Y2hlcyB0aGUgZ2l2ZW4gdG9rZW4gc2V0Li8vXG5EZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUuY29uc3VtZVVudGlsID0gZnVuY3Rpb24ocmVjb2duaXplciwgc2V0KSB7XG4gICAgdmFyIHR0eXBlID0gcmVjb2duaXplci5nZXRUb2tlblN0cmVhbSgpLkxBKDEpO1xuICAgIHdoaWxlKCB0dHlwZSAhPT0gVG9rZW4uRU9GICYmICFzZXQuY29udGFpbnModHR5cGUpKSB7XG4gICAgICAgIHJlY29nbml6ZXIuY29uc3VtZSgpO1xuICAgICAgICB0dHlwZSA9IHJlY29nbml6ZXIuZ2V0VG9rZW5TdHJlYW0oKS5MQSgxKTtcbiAgICB9XG59O1xuXG4vL1xuLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgQU5UTFJFcnJvclN0cmF0ZWd5fSByZXNwb25kcyB0byBzeW50YXggZXJyb3JzXG4vLyBieSBpbW1lZGlhdGVseSBjYW5jZWxpbmcgdGhlIHBhcnNlIG9wZXJhdGlvbiB3aXRoIGFcbi8vIHtAbGluayBQYXJzZUNhbmNlbGxhdGlvbkV4Y2VwdGlvbn0uIFRoZSBpbXBsZW1lbnRhdGlvbiBlbnN1cmVzIHRoYXQgdGhlXG4vLyB7QGxpbmsgUGFyc2VyUnVsZUNvbnRleHQvL2V4Y2VwdGlvbn0gZmllbGQgaXMgc2V0IGZvciBhbGwgcGFyc2UgdHJlZSBub2Rlc1xuLy8gdGhhdCB3ZXJlIG5vdCBjb21wbGV0ZWQgcHJpb3IgdG8gZW5jb3VudGVyaW5nIHRoZSBlcnJvci5cbi8vXG4vLyA8cD5cbi8vIFRoaXMgZXJyb3Igc3RyYXRlZ3kgaXMgdXNlZnVsIGluIHRoZSBmb2xsb3dpbmcgc2NlbmFyaW9zLjwvcD5cbi8vXG4vLyA8dWw+XG4vLyA8bGk+PHN0cm9uZz5Ud28tc3RhZ2UgcGFyc2luZzo8L3N0cm9uZz4gVGhpcyBlcnJvciBzdHJhdGVneSBhbGxvd3MgdGhlIGZpcnN0XG4vLyBzdGFnZSBvZiB0d28tc3RhZ2UgcGFyc2luZyB0byBpbW1lZGlhdGVseSB0ZXJtaW5hdGUgaWYgYW4gZXJyb3IgaXNcbi8vIGVuY291bnRlcmVkLCBhbmQgaW1tZWRpYXRlbHkgZmFsbCBiYWNrIHRvIHRoZSBzZWNvbmQgc3RhZ2UuIEluIGFkZGl0aW9uIHRvXG4vLyBhdm9pZGluZyB3YXN0ZWQgd29yayBieSBhdHRlbXB0aW5nIHRvIHJlY292ZXIgZnJvbSBlcnJvcnMgaGVyZSwgdGhlIGVtcHR5XG4vLyBpbXBsZW1lbnRhdGlvbiBvZiB7QGxpbmsgQmFpbEVycm9yU3RyYXRlZ3kvL3N5bmN9IGltcHJvdmVzIHRoZSBwZXJmb3JtYW5jZSBvZlxuLy8gdGhlIGZpcnN0IHN0YWdlLjwvbGk+XG4vLyA8bGk+PHN0cm9uZz5TaWxlbnQgdmFsaWRhdGlvbjo8L3N0cm9uZz4gV2hlbiBzeW50YXggZXJyb3JzIGFyZSBub3QgYmVpbmdcbi8vIHJlcG9ydGVkIG9yIGxvZ2dlZCwgYW5kIHRoZSBwYXJzZSByZXN1bHQgaXMgc2ltcGx5IGlnbm9yZWQgaWYgZXJyb3JzIG9jY3VyLFxuLy8gdGhlIHtAbGluayBCYWlsRXJyb3JTdHJhdGVneX0gYXZvaWRzIHdhc3Rpbmcgd29yayBvbiByZWNvdmVyaW5nIGZyb20gZXJyb3JzXG4vLyB3aGVuIHRoZSByZXN1bHQgd2lsbCBiZSBpZ25vcmVkIGVpdGhlciB3YXkuPC9saT5cbi8vIDwvdWw+XG4vL1xuLy8gPHA+XG4vLyB7QGNvZGUgbXlwYXJzZXIuc2V0RXJyb3JIYW5kbGVyKG5ldyBCYWlsRXJyb3JTdHJhdGVneSgpKTt9PC9wPlxuLy9cbi8vIEBzZWUgUGFyc2VyLy9zZXRFcnJvckhhbmRsZXIoQU5UTFJFcnJvclN0cmF0ZWd5KVxuLy9cbmZ1bmN0aW9uIEJhaWxFcnJvclN0cmF0ZWd5KCkge1xuXHREZWZhdWx0RXJyb3JTdHJhdGVneS5jYWxsKHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuQmFpbEVycm9yU3RyYXRlZ3kucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShEZWZhdWx0RXJyb3JTdHJhdGVneS5wcm90b3R5cGUpO1xuQmFpbEVycm9yU3RyYXRlZ3kucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gQmFpbEVycm9yU3RyYXRlZ3k7XG5cbi8vIEluc3RlYWQgb2YgcmVjb3ZlcmluZyBmcm9tIGV4Y2VwdGlvbiB7QGNvZGUgZX0sIHJlLXRocm93IGl0IHdyYXBwZWRcbi8vIGluIGEge0BsaW5rIFBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9ufSBzbyBpdCBpcyBub3QgY2F1Z2h0IGJ5IHRoZVxuLy8gcnVsZSBmdW5jdGlvbiBjYXRjaGVzLiBVc2Uge0BsaW5rIEV4Y2VwdGlvbi8vZ2V0Q2F1c2UoKX0gdG8gZ2V0IHRoZVxuLy8gb3JpZ2luYWwge0BsaW5rIFJlY29nbml0aW9uRXhjZXB0aW9ufS5cbi8vXG5CYWlsRXJyb3JTdHJhdGVneS5wcm90b3R5cGUucmVjb3ZlciA9IGZ1bmN0aW9uKHJlY29nbml6ZXIsIGUpIHtcbiAgICB2YXIgY29udGV4dCA9IHJlY29nbml6ZXIuX2N0eDtcbiAgICB3aGlsZSAoY29udGV4dCAhPT0gbnVsbCkge1xuICAgICAgICBjb250ZXh0LmV4Y2VwdGlvbiA9IGU7XG4gICAgICAgIGNvbnRleHQgPSBjb250ZXh0LnBhcmVudEN0eDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9uKGUpO1xufTtcblxuLy8gTWFrZSBzdXJlIHdlIGRvbid0IGF0dGVtcHQgdG8gcmVjb3ZlciBpbmxpbmU7IGlmIHRoZSBwYXJzZXJcbi8vIHN1Y2Nlc3NmdWxseSByZWNvdmVycywgaXQgd29uJ3QgdGhyb3cgYW4gZXhjZXB0aW9uLlxuLy9cbkJhaWxFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5yZWNvdmVySW5saW5lID0gZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgIHRoaXMucmVjb3ZlcihyZWNvZ25pemVyLCBuZXcgSW5wdXRNaXNtYXRjaEV4Y2VwdGlvbihyZWNvZ25pemVyKSk7XG59O1xuXG4vLyBNYWtlIHN1cmUgd2UgZG9uJ3QgYXR0ZW1wdCB0byByZWNvdmVyIGZyb20gcHJvYmxlbXMgaW4gc3VicnVsZXMuLy9cbkJhaWxFcnJvclN0cmF0ZWd5LnByb3RvdHlwZS5zeW5jID0gZnVuY3Rpb24ocmVjb2duaXplcikge1xuICAgIC8vIHBhc3Ncbn07XG5cbmV4cG9ydHMuQmFpbEVycm9yU3RyYXRlZ3kgPSBCYWlsRXJyb3JTdHJhdGVneTtcbmV4cG9ydHMuRGVmYXVsdEVycm9yU3RyYXRlZ3kgPSBEZWZhdWx0RXJyb3JTdHJhdGVneTtcbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxuLy8gVGhlIHJvb3Qgb2YgdGhlIEFOVExSIGV4Y2VwdGlvbiBoaWVyYXJjaHkuIEluIGdlbmVyYWwsIEFOVExSIHRyYWNrcyBqdXN0XG4vLyAgMyBraW5kcyBvZiBlcnJvcnM6IHByZWRpY3Rpb24gZXJyb3JzLCBmYWlsZWQgcHJlZGljYXRlIGVycm9ycywgYW5kXG4vLyAgbWlzbWF0Y2hlZCBpbnB1dCBlcnJvcnMuIEluIGVhY2ggY2FzZSwgdGhlIHBhcnNlciBrbm93cyB3aGVyZSBpdCBpc1xuLy8gIGluIHRoZSBpbnB1dCwgd2hlcmUgaXQgaXMgaW4gdGhlIEFUTiwgdGhlIHJ1bGUgaW52b2NhdGlvbiBzdGFjayxcbi8vICBhbmQgd2hhdCBraW5kIG9mIHByb2JsZW0gb2NjdXJyZWQuXG5cbnZhciBQcmVkaWNhdGVUcmFuc2l0aW9uID0gcmVxdWlyZSgnLi8uLi9hdG4vVHJhbnNpdGlvbicpLlByZWRpY2F0ZVRyYW5zaXRpb247XG5cbmZ1bmN0aW9uIFJlY29nbml0aW9uRXhjZXB0aW9uKHBhcmFtcykge1xuXHRFcnJvci5jYWxsKHRoaXMpO1xuXHRpZiAoISFFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBSZWNvZ25pdGlvbkV4Y2VwdGlvbik7XG5cdH0gZWxzZSB7XG5cdFx0dmFyIHN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG5cdH1cblx0dGhpcy5tZXNzYWdlID0gcGFyYW1zLm1lc3NhZ2U7XG4gICAgdGhpcy5yZWNvZ25pemVyID0gcGFyYW1zLnJlY29nbml6ZXI7XG4gICAgdGhpcy5pbnB1dCA9IHBhcmFtcy5pbnB1dDtcbiAgICB0aGlzLmN0eCA9IHBhcmFtcy5jdHg7XG4gICAgLy8gVGhlIGN1cnJlbnQge0BsaW5rIFRva2VufSB3aGVuIGFuIGVycm9yIG9jY3VycmVkLiBTaW5jZSBub3QgYWxsIHN0cmVhbXNcbiAgICAvLyBzdXBwb3J0IGFjY2Vzc2luZyBzeW1ib2xzIGJ5IGluZGV4LCB3ZSBoYXZlIHRvIHRyYWNrIHRoZSB7QGxpbmsgVG9rZW59XG4gICAgLy8gaW5zdGFuY2UgaXRzZWxmLlxuICAgIHRoaXMub2ZmZW5kaW5nVG9rZW4gPSBudWxsO1xuICAgIC8vIEdldCB0aGUgQVROIHN0YXRlIG51bWJlciB0aGUgcGFyc2VyIHdhcyBpbiBhdCB0aGUgdGltZSB0aGUgZXJyb3JcbiAgICAvLyBvY2N1cnJlZC4gRm9yIHtAbGluayBOb1ZpYWJsZUFsdEV4Y2VwdGlvbn0gYW5kXG4gICAgLy8ge0BsaW5rIExleGVyTm9WaWFibGVBbHRFeGNlcHRpb259IGV4Y2VwdGlvbnMsIHRoaXMgaXMgdGhlXG4gICAgLy8ge0BsaW5rIERlY2lzaW9uU3RhdGV9IG51bWJlci4gRm9yIG90aGVycywgaXQgaXMgdGhlIHN0YXRlIHdob3NlIG91dGdvaW5nXG4gICAgLy8gZWRnZSB3ZSBjb3VsZG4ndCBtYXRjaC5cbiAgICB0aGlzLm9mZmVuZGluZ1N0YXRlID0gLTE7XG4gICAgaWYgKHRoaXMucmVjb2duaXplciE9PW51bGwpIHtcbiAgICAgICAgdGhpcy5vZmZlbmRpbmdTdGF0ZSA9IHRoaXMucmVjb2duaXplci5zdGF0ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG59XG5cblJlY29nbml0aW9uRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcblJlY29nbml0aW9uRXhjZXB0aW9uLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlY29nbml0aW9uRXhjZXB0aW9uO1xuXG4vLyA8cD5JZiB0aGUgc3RhdGUgbnVtYmVyIGlzIG5vdCBrbm93biwgdGhpcyBtZXRob2QgcmV0dXJucyAtMS48L3A+XG5cbi8vXG4vLyBHZXRzIHRoZSBzZXQgb2YgaW5wdXQgc3ltYm9scyB3aGljaCBjb3VsZCBwb3RlbnRpYWxseSBmb2xsb3cgdGhlXG4vLyBwcmV2aW91c2x5IG1hdGNoZWQgc3ltYm9sIGF0IHRoZSB0aW1lIHRoaXMgZXhjZXB0aW9uIHdhcyB0aHJvd24uXG4vL1xuLy8gPHA+SWYgdGhlIHNldCBvZiBleHBlY3RlZCB0b2tlbnMgaXMgbm90IGtub3duIGFuZCBjb3VsZCBub3QgYmUgY29tcHV0ZWQsXG4vLyB0aGlzIG1ldGhvZCByZXR1cm5zIHtAY29kZSBudWxsfS48L3A+XG4vL1xuLy8gQHJldHVybiBUaGUgc2V0IG9mIHRva2VuIHR5cGVzIHRoYXQgY291bGQgcG90ZW50aWFsbHkgZm9sbG93IHRoZSBjdXJyZW50XG4vLyBzdGF0ZSBpbiB0aGUgQVROLCBvciB7QGNvZGUgbnVsbH0gaWYgdGhlIGluZm9ybWF0aW9uIGlzIG5vdCBhdmFpbGFibGUuXG4vLyAvXG5SZWNvZ25pdGlvbkV4Y2VwdGlvbi5wcm90b3R5cGUuZ2V0RXhwZWN0ZWRUb2tlbnMgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5yZWNvZ25pemVyIT09bnVsbCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yZWNvZ25pemVyLmF0bi5nZXRFeHBlY3RlZFRva2Vucyh0aGlzLm9mZmVuZGluZ1N0YXRlLCB0aGlzLmN0eCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxufTtcblxuUmVjb2duaXRpb25FeGNlcHRpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMubWVzc2FnZTtcbn07XG5cbmZ1bmN0aW9uIExleGVyTm9WaWFibGVBbHRFeGNlcHRpb24obGV4ZXIsIGlucHV0LCBzdGFydEluZGV4LCBkZWFkRW5kQ29uZmlncykge1xuXHRSZWNvZ25pdGlvbkV4Y2VwdGlvbi5jYWxsKHRoaXMsIHttZXNzYWdlOlwiXCIsIHJlY29nbml6ZXI6bGV4ZXIsIGlucHV0OmlucHV0LCBjdHg6bnVsbH0pO1xuICAgIHRoaXMuc3RhcnRJbmRleCA9IHN0YXJ0SW5kZXg7XG4gICAgdGhpcy5kZWFkRW5kQ29uZmlncyA9IGRlYWRFbmRDb25maWdzO1xuICAgIHJldHVybiB0aGlzO1xufVxuXG5MZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUmVjb2duaXRpb25FeGNlcHRpb24ucHJvdG90eXBlKTtcbkxleGVyTm9WaWFibGVBbHRFeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbjtcblxuTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3ltYm9sID0gXCJcIjtcbiAgICBpZiAodGhpcy5zdGFydEluZGV4ID49IDAgJiYgdGhpcy5zdGFydEluZGV4IDwgdGhpcy5pbnB1dC5zaXplKSB7XG4gICAgICAgIHN5bWJvbCA9IHRoaXMuaW5wdXQuZ2V0VGV4dCgodGhpcy5zdGFydEluZGV4LHRoaXMuc3RhcnRJbmRleCkpO1xuICAgIH1cbiAgICByZXR1cm4gXCJMZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uXCIgKyBzeW1ib2w7XG59O1xuXG4vLyBJbmRpY2F0ZXMgdGhhdCB0aGUgcGFyc2VyIGNvdWxkIG5vdCBkZWNpZGUgd2hpY2ggb2YgdHdvIG9yIG1vcmUgcGF0aHNcbi8vIHRvIHRha2UgYmFzZWQgdXBvbiB0aGUgcmVtYWluaW5nIGlucHV0LiBJdCB0cmFja3MgdGhlIHN0YXJ0aW5nIHRva2VuXG4vLyBvZiB0aGUgb2ZmZW5kaW5nIGlucHV0IGFuZCBhbHNvIGtub3dzIHdoZXJlIHRoZSBwYXJzZXIgd2FzXG4vLyBpbiB0aGUgdmFyaW91cyBwYXRocyB3aGVuIHRoZSBlcnJvci4gUmVwb3J0ZWQgYnkgcmVwb3J0Tm9WaWFibGVBbHRlcm5hdGl2ZSgpXG4vL1xuZnVuY3Rpb24gTm9WaWFibGVBbHRFeGNlcHRpb24ocmVjb2duaXplciwgaW5wdXQsIHN0YXJ0VG9rZW4sIG9mZmVuZGluZ1Rva2VuLCBkZWFkRW5kQ29uZmlncywgY3R4KSB7XG5cdGN0eCA9IGN0eCB8fCByZWNvZ25pemVyLl9jdHg7XG5cdG9mZmVuZGluZ1Rva2VuID0gb2ZmZW5kaW5nVG9rZW4gfHwgcmVjb2duaXplci5nZXRDdXJyZW50VG9rZW4oKTtcblx0c3RhcnRUb2tlbiA9IHN0YXJ0VG9rZW4gfHwgcmVjb2duaXplci5nZXRDdXJyZW50VG9rZW4oKTtcblx0aW5wdXQgPSBpbnB1dCB8fCByZWNvZ25pemVyLmdldElucHV0U3RyZWFtKCk7XG5cdFJlY29nbml0aW9uRXhjZXB0aW9uLmNhbGwodGhpcywge21lc3NhZ2U6XCJcIiwgcmVjb2duaXplcjpyZWNvZ25pemVyLCBpbnB1dDppbnB1dCwgY3R4OmN0eH0pO1xuICAgIC8vIFdoaWNoIGNvbmZpZ3VyYXRpb25zIGRpZCB3ZSB0cnkgYXQgaW5wdXQuaW5kZXgoKSB0aGF0IGNvdWxkbid0IG1hdGNoXG5cdC8vIGlucHV0LkxUKDEpPy8vXG4gICAgdGhpcy5kZWFkRW5kQ29uZmlncyA9IGRlYWRFbmRDb25maWdzO1xuICAgIC8vIFRoZSB0b2tlbiBvYmplY3QgYXQgdGhlIHN0YXJ0IGluZGV4OyB0aGUgaW5wdXQgc3RyZWFtIG1pZ2h0XG4gICAgLy8gbm90IGJlIGJ1ZmZlcmluZyB0b2tlbnMgc28gZ2V0IGEgcmVmZXJlbmNlIHRvIGl0LiAoQXQgdGhlXG4gICAgLy8gdGltZSB0aGUgZXJyb3Igb2NjdXJyZWQsIG9mIGNvdXJzZSB0aGUgc3RyZWFtIG5lZWRzIHRvIGtlZXAgYVxuICAgIC8vIGJ1ZmZlciBhbGwgb2YgdGhlIHRva2VucyBidXQgbGF0ZXIgd2UgbWlnaHQgbm90IGhhdmUgYWNjZXNzIHRvIHRob3NlLilcbiAgICB0aGlzLnN0YXJ0VG9rZW4gPSBzdGFydFRva2VuO1xuICAgIHRoaXMub2ZmZW5kaW5nVG9rZW4gPSBvZmZlbmRpbmdUb2tlbjtcbn1cblxuTm9WaWFibGVBbHRFeGNlcHRpb24ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShSZWNvZ25pdGlvbkV4Y2VwdGlvbi5wcm90b3R5cGUpO1xuTm9WaWFibGVBbHRFeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gTm9WaWFibGVBbHRFeGNlcHRpb247XG5cbi8vIFRoaXMgc2lnbmlmaWVzIGFueSBraW5kIG9mIG1pc21hdGNoZWQgaW5wdXQgZXhjZXB0aW9ucyBzdWNoIGFzXG4vLyB3aGVuIHRoZSBjdXJyZW50IGlucHV0IGRvZXMgbm90IG1hdGNoIHRoZSBleHBlY3RlZCB0b2tlbi5cbi8vXG5mdW5jdGlvbiBJbnB1dE1pc21hdGNoRXhjZXB0aW9uKHJlY29nbml6ZXIpIHtcblx0UmVjb2duaXRpb25FeGNlcHRpb24uY2FsbCh0aGlzLCB7bWVzc2FnZTpcIlwiLCByZWNvZ25pemVyOnJlY29nbml6ZXIsIGlucHV0OnJlY29nbml6ZXIuZ2V0SW5wdXRTdHJlYW0oKSwgY3R4OnJlY29nbml6ZXIuX2N0eH0pO1xuICAgIHRoaXMub2ZmZW5kaW5nVG9rZW4gPSByZWNvZ25pemVyLmdldEN1cnJlbnRUb2tlbigpO1xufVxuXG5JbnB1dE1pc21hdGNoRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUmVjb2duaXRpb25FeGNlcHRpb24ucHJvdG90eXBlKTtcbklucHV0TWlzbWF0Y2hFeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gSW5wdXRNaXNtYXRjaEV4Y2VwdGlvbjtcblxuLy8gQSBzZW1hbnRpYyBwcmVkaWNhdGUgZmFpbGVkIGR1cmluZyB2YWxpZGF0aW9uLiBWYWxpZGF0aW9uIG9mIHByZWRpY2F0ZXNcbi8vIG9jY3VycyB3aGVuIG5vcm1hbGx5IHBhcnNpbmcgdGhlIGFsdGVybmF0aXZlIGp1c3QgbGlrZSBtYXRjaGluZyBhIHRva2VuLlxuLy8gRGlzYW1iaWd1YXRpbmcgcHJlZGljYXRlIGV2YWx1YXRpb24gb2NjdXJzIHdoZW4gd2UgdGVzdCBhIHByZWRpY2F0ZSBkdXJpbmdcbi8vIHByZWRpY3Rpb24uXG5cbmZ1bmN0aW9uIEZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbihyZWNvZ25pemVyLCBwcmVkaWNhdGUsIG1lc3NhZ2UpIHtcblx0UmVjb2duaXRpb25FeGNlcHRpb24uY2FsbCh0aGlzLCB7bWVzc2FnZTp0aGlzLmZvcm1hdE1lc3NhZ2UocHJlZGljYXRlLG1lc3NhZ2UgfHwgbnVsbCksIHJlY29nbml6ZXI6cmVjb2duaXplcixcbiAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDpyZWNvZ25pemVyLmdldElucHV0U3RyZWFtKCksIGN0eDpyZWNvZ25pemVyLl9jdHh9KTtcbiAgICB2YXIgcyA9IHJlY29nbml6ZXIuX2ludGVycC5hdG4uc3RhdGVzW3JlY29nbml6ZXIuc3RhdGVdO1xuICAgIHZhciB0cmFucyA9IHMudHJhbnNpdGlvbnNbMF07XG4gICAgaWYgKHRyYW5zIGluc3RhbmNlb2YgUHJlZGljYXRlVHJhbnNpdGlvbikge1xuICAgICAgICB0aGlzLnJ1bGVJbmRleCA9IHRyYW5zLnJ1bGVJbmRleDtcbiAgICAgICAgdGhpcy5wcmVkaWNhdGVJbmRleCA9IHRyYW5zLnByZWRJbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJ1bGVJbmRleCA9IDA7XG4gICAgICAgIHRoaXMucHJlZGljYXRlSW5kZXggPSAwO1xuICAgIH1cbiAgICB0aGlzLnByZWRpY2F0ZSA9IHByZWRpY2F0ZTtcbiAgICB0aGlzLm9mZmVuZGluZ1Rva2VuID0gcmVjb2duaXplci5nZXRDdXJyZW50VG9rZW4oKTtcbiAgICByZXR1cm4gdGhpcztcbn1cblxuRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUmVjb2duaXRpb25FeGNlcHRpb24ucHJvdG90eXBlKTtcbkZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBGYWlsZWRQcmVkaWNhdGVFeGNlcHRpb247XG5cbkZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbi5wcm90b3R5cGUuZm9ybWF0TWVzc2FnZSA9IGZ1bmN0aW9uKHByZWRpY2F0ZSwgbWVzc2FnZSkge1xuICAgIGlmIChtZXNzYWdlICE9PW51bGwpIHtcbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFwiZmFpbGVkIHByZWRpY2F0ZToge1wiICsgcHJlZGljYXRlICsgXCJ9P1wiO1xuICAgIH1cbn07XG5cbmZ1bmN0aW9uIFBhcnNlQ2FuY2VsbGF0aW9uRXhjZXB0aW9uKCkge1xuXHRFcnJvci5jYWxsKHRoaXMpO1xuXHRFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBQYXJzZUNhbmNlbGxhdGlvbkV4Y2VwdGlvbik7XG5cdHJldHVybiB0aGlzO1xufVxuXG5QYXJzZUNhbmNlbGxhdGlvbkV4Y2VwdGlvbi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSk7XG5QYXJzZUNhbmNlbGxhdGlvbkV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBQYXJzZUNhbmNlbGxhdGlvbkV4Y2VwdGlvbjtcblxuZXhwb3J0cy5SZWNvZ25pdGlvbkV4Y2VwdGlvbiA9IFJlY29nbml0aW9uRXhjZXB0aW9uO1xuZXhwb3J0cy5Ob1ZpYWJsZUFsdEV4Y2VwdGlvbiA9IE5vVmlhYmxlQWx0RXhjZXB0aW9uO1xuZXhwb3J0cy5MZXhlck5vVmlhYmxlQWx0RXhjZXB0aW9uID0gTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbjtcbmV4cG9ydHMuSW5wdXRNaXNtYXRjaEV4Y2VwdGlvbiA9IElucHV0TWlzbWF0Y2hFeGNlcHRpb247XG5leHBvcnRzLkZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbiA9IEZhaWxlZFByZWRpY2F0ZUV4Y2VwdGlvbjtcbmV4cG9ydHMuUGFyc2VDYW5jZWxsYXRpb25FeGNlcHRpb24gPSBQYXJzZUNhbmNlbGxhdGlvbkV4Y2VwdGlvbjtcbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cblxuZXhwb3J0cy5SZWNvZ25pdGlvbkV4Y2VwdGlvbiA9IHJlcXVpcmUoJy4vRXJyb3JzJykuUmVjb2duaXRpb25FeGNlcHRpb247XG5leHBvcnRzLk5vVmlhYmxlQWx0RXhjZXB0aW9uID0gcmVxdWlyZSgnLi9FcnJvcnMnKS5Ob1ZpYWJsZUFsdEV4Y2VwdGlvbjtcbmV4cG9ydHMuTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbiA9IHJlcXVpcmUoJy4vRXJyb3JzJykuTGV4ZXJOb1ZpYWJsZUFsdEV4Y2VwdGlvbjtcbmV4cG9ydHMuSW5wdXRNaXNtYXRjaEV4Y2VwdGlvbiA9IHJlcXVpcmUoJy4vRXJyb3JzJykuSW5wdXRNaXNtYXRjaEV4Y2VwdGlvbjtcbmV4cG9ydHMuRmFpbGVkUHJlZGljYXRlRXhjZXB0aW9uID0gcmVxdWlyZSgnLi9FcnJvcnMnKS5GYWlsZWRQcmVkaWNhdGVFeGNlcHRpb247XG5leHBvcnRzLkRpYWdub3N0aWNFcnJvckxpc3RlbmVyID0gcmVxdWlyZSgnLi9EaWFnbm9zdGljRXJyb3JMaXN0ZW5lcicpLkRpYWdub3N0aWNFcnJvckxpc3RlbmVyO1xuZXhwb3J0cy5CYWlsRXJyb3JTdHJhdGVneSA9IHJlcXVpcmUoJy4vRXJyb3JTdHJhdGVneScpLkJhaWxFcnJvclN0cmF0ZWd5O1xuZXhwb3J0cy5FcnJvckxpc3RlbmVyID0gcmVxdWlyZSgnLi9FcnJvckxpc3RlbmVyJykuRXJyb3JMaXN0ZW5lcjtcbiIsIi8qIENvcHlyaWdodCAoYykgMjAxMi0yMDE3IFRoZSBBTlRMUiBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogVXNlIG9mIHRoaXMgZmlsZSBpcyBnb3Zlcm5lZCBieSB0aGUgQlNEIDMtY2xhdXNlIGxpY2Vuc2UgdGhhdFxuICogY2FuIGJlIGZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlIGluIHRoZSBwcm9qZWN0IHJvb3QuXG4gKi9cbmV4cG9ydHMuYXRuID0gcmVxdWlyZSgnLi9hdG4vaW5kZXgnKTtcbmV4cG9ydHMuY29kZXBvaW50YXQgPSByZXF1aXJlKCcuL3BvbHlmaWxscy9jb2RlcG9pbnRhdCcpO1xuZXhwb3J0cy5kZmEgPSByZXF1aXJlKCcuL2RmYS9pbmRleCcpO1xuZXhwb3J0cy5mcm9tY29kZXBvaW50ID0gcmVxdWlyZSgnLi9wb2x5ZmlsbHMvZnJvbWNvZGVwb2ludCcpO1xuZXhwb3J0cy50cmVlID0gcmVxdWlyZSgnLi90cmVlL2luZGV4Jyk7XG5leHBvcnRzLmVycm9yID0gcmVxdWlyZSgnLi9lcnJvci9pbmRleCcpO1xuZXhwb3J0cy5Ub2tlbiA9IHJlcXVpcmUoJy4vVG9rZW4nKS5Ub2tlbjtcbmV4cG9ydHMuQ2hhclN0cmVhbXMgPSByZXF1aXJlKCcuL0NoYXJTdHJlYW1zJykuQ2hhclN0cmVhbXM7XG5leHBvcnRzLkNvbW1vblRva2VuID0gcmVxdWlyZSgnLi9Ub2tlbicpLkNvbW1vblRva2VuO1xuZXhwb3J0cy5JbnB1dFN0cmVhbSA9IHJlcXVpcmUoJy4vSW5wdXRTdHJlYW0nKS5JbnB1dFN0cmVhbTtcbmV4cG9ydHMuRmlsZVN0cmVhbSA9IHJlcXVpcmUoJy4vRmlsZVN0cmVhbScpLkZpbGVTdHJlYW07XG5leHBvcnRzLkNvbW1vblRva2VuU3RyZWFtID0gcmVxdWlyZSgnLi9Db21tb25Ub2tlblN0cmVhbScpLkNvbW1vblRva2VuU3RyZWFtO1xuZXhwb3J0cy5MZXhlciA9IHJlcXVpcmUoJy4vTGV4ZXInKS5MZXhlcjtcbmV4cG9ydHMuUGFyc2VyID0gcmVxdWlyZSgnLi9QYXJzZXInKS5QYXJzZXI7XG52YXIgcGMgPSByZXF1aXJlKCcuL1ByZWRpY3Rpb25Db250ZXh0Jyk7XG5leHBvcnRzLlByZWRpY3Rpb25Db250ZXh0Q2FjaGUgPSBwYy5QcmVkaWN0aW9uQ29udGV4dENhY2hlO1xuZXhwb3J0cy5QYXJzZXJSdWxlQ29udGV4dCA9IHJlcXVpcmUoJy4vUGFyc2VyUnVsZUNvbnRleHQnKS5QYXJzZXJSdWxlQ29udGV4dDtcbmV4cG9ydHMuSW50ZXJ2YWwgPSByZXF1aXJlKCcuL0ludGVydmFsU2V0JykuSW50ZXJ2YWw7XG5leHBvcnRzLlV0aWxzID0gcmVxdWlyZSgnLi9VdGlscycpO1xuIiwiLyohIGh0dHBzOi8vbXRocy5iZS9jb2RlcG9pbnRhdCB2MC4yLjAgYnkgQG1hdGhpYXMgKi9cbmlmICghU3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdCkge1xuXHQoZnVuY3Rpb24oKSB7XG5cdFx0J3VzZSBzdHJpY3QnOyAvLyBuZWVkZWQgdG8gc3VwcG9ydCBgYXBwbHlgL2BjYWxsYCB3aXRoIGB1bmRlZmluZWRgL2BudWxsYFxuXHRcdHZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcblx0XHRcdC8vIElFIDggb25seSBzdXBwb3J0cyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBvbiBET00gZWxlbWVudHNcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHZhciBvYmplY3QgPSB7fTtcblx0XHRcdFx0dmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblx0XHRcdFx0dmFyIHJlc3VsdCA9ICRkZWZpbmVQcm9wZXJ0eShvYmplY3QsIG9iamVjdCwgb2JqZWN0KSAmJiAkZGVmaW5lUHJvcGVydHk7XG5cdFx0XHR9IGNhdGNoKGVycm9yKSB7fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9KCkpO1xuXHRcdHZhciBjb2RlUG9pbnRBdCA9IGZ1bmN0aW9uKHBvc2l0aW9uKSB7XG5cdFx0XHRpZiAodGhpcyA9PSBudWxsKSB7XG5cdFx0XHRcdHRocm93IFR5cGVFcnJvcigpO1xuXHRcdFx0fVxuXHRcdFx0dmFyIHN0cmluZyA9IFN0cmluZyh0aGlzKTtcblx0XHRcdHZhciBzaXplID0gc3RyaW5nLmxlbmd0aDtcblx0XHRcdC8vIGBUb0ludGVnZXJgXG5cdFx0XHR2YXIgaW5kZXggPSBwb3NpdGlvbiA/IE51bWJlcihwb3NpdGlvbikgOiAwO1xuXHRcdFx0aWYgKGluZGV4ICE9IGluZGV4KSB7IC8vIGJldHRlciBgaXNOYU5gXG5cdFx0XHRcdGluZGV4ID0gMDtcblx0XHRcdH1cblx0XHRcdC8vIEFjY291bnQgZm9yIG91dC1vZi1ib3VuZHMgaW5kaWNlczpcblx0XHRcdGlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gc2l6ZSkge1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdFx0Ly8gR2V0IHRoZSBmaXJzdCBjb2RlIHVuaXRcblx0XHRcdHZhciBmaXJzdCA9IHN0cmluZy5jaGFyQ29kZUF0KGluZGV4KTtcblx0XHRcdHZhciBzZWNvbmQ7XG5cdFx0XHRpZiAoIC8vIGNoZWNrIGlmIGl04oCZcyB0aGUgc3RhcnQgb2YgYSBzdXJyb2dhdGUgcGFpclxuXHRcdFx0XHRmaXJzdCA+PSAweEQ4MDAgJiYgZmlyc3QgPD0gMHhEQkZGICYmIC8vIGhpZ2ggc3Vycm9nYXRlXG5cdFx0XHRcdHNpemUgPiBpbmRleCArIDEgLy8gdGhlcmUgaXMgYSBuZXh0IGNvZGUgdW5pdFxuXHRcdFx0KSB7XG5cdFx0XHRcdHNlY29uZCA9IHN0cmluZy5jaGFyQ29kZUF0KGluZGV4ICsgMSk7XG5cdFx0XHRcdGlmIChzZWNvbmQgPj0gMHhEQzAwICYmIHNlY29uZCA8PSAweERGRkYpIHsgLy8gbG93IHN1cnJvZ2F0ZVxuXHRcdFx0XHRcdC8vIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nI3N1cnJvZ2F0ZS1mb3JtdWxhZVxuXHRcdFx0XHRcdHJldHVybiAoZmlyc3QgLSAweEQ4MDApICogMHg0MDAgKyBzZWNvbmQgLSAweERDMDAgKyAweDEwMDAwO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmlyc3Q7XG5cdFx0fTtcblx0XHRpZiAoZGVmaW5lUHJvcGVydHkpIHtcblx0XHRcdGRlZmluZVByb3BlcnR5KFN0cmluZy5wcm90b3R5cGUsICdjb2RlUG9pbnRBdCcsIHtcblx0XHRcdFx0J3ZhbHVlJzogY29kZVBvaW50QXQsXG5cdFx0XHRcdCdjb25maWd1cmFibGUnOiB0cnVlLFxuXHRcdFx0XHQnd3JpdGFibGUnOiB0cnVlXG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0U3RyaW5nLnByb3RvdHlwZS5jb2RlUG9pbnRBdCA9IGNvZGVQb2ludEF0O1xuXHRcdH1cblx0fSgpKTtcbn1cbiIsIi8qISBodHRwczovL210aHMuYmUvZnJvbWNvZGVwb2ludCB2MC4yLjEgYnkgQG1hdGhpYXMgKi9cbmlmICghU3RyaW5nLmZyb21Db2RlUG9pbnQpIHtcblx0KGZ1bmN0aW9uKCkge1xuXHRcdHZhciBkZWZpbmVQcm9wZXJ0eSA9IChmdW5jdGlvbigpIHtcblx0XHRcdC8vIElFIDggb25seSBzdXBwb3J0cyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBvbiBET00gZWxlbWVudHNcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHZhciBvYmplY3QgPSB7fTtcblx0XHRcdFx0dmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblx0XHRcdFx0dmFyIHJlc3VsdCA9ICRkZWZpbmVQcm9wZXJ0eShvYmplY3QsIG9iamVjdCwgb2JqZWN0KSAmJiAkZGVmaW5lUHJvcGVydHk7XG5cdFx0XHR9IGNhdGNoKGVycm9yKSB7fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9KCkpO1xuXHRcdHZhciBzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuXHRcdHZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cdFx0dmFyIGZyb21Db2RlUG9pbnQgPSBmdW5jdGlvbihfKSB7XG5cdFx0XHR2YXIgTUFYX1NJWkUgPSAweDQwMDA7XG5cdFx0XHR2YXIgY29kZVVuaXRzID0gW107XG5cdFx0XHR2YXIgaGlnaFN1cnJvZ2F0ZTtcblx0XHRcdHZhciBsb3dTdXJyb2dhdGU7XG5cdFx0XHR2YXIgaW5kZXggPSAtMTtcblx0XHRcdHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuXHRcdFx0aWYgKCFsZW5ndGgpIHtcblx0XHRcdFx0cmV0dXJuICcnO1xuXHRcdFx0fVxuXHRcdFx0dmFyIHJlc3VsdCA9ICcnO1xuXHRcdFx0d2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcblx0XHRcdFx0dmFyIGNvZGVQb2ludCA9IE51bWJlcihhcmd1bWVudHNbaW5kZXhdKTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCFpc0Zpbml0ZShjb2RlUG9pbnQpIHx8IC8vIGBOYU5gLCBgK0luZmluaXR5YCwgb3IgYC1JbmZpbml0eWBcblx0XHRcdFx0XHRjb2RlUG9pbnQgPCAwIHx8IC8vIG5vdCBhIHZhbGlkIFVuaWNvZGUgY29kZSBwb2ludFxuXHRcdFx0XHRcdGNvZGVQb2ludCA+IDB4MTBGRkZGIHx8IC8vIG5vdCBhIHZhbGlkIFVuaWNvZGUgY29kZSBwb2ludFxuXHRcdFx0XHRcdGZsb29yKGNvZGVQb2ludCkgIT0gY29kZVBvaW50IC8vIG5vdCBhbiBpbnRlZ2VyXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHRocm93IFJhbmdlRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludDogJyArIGNvZGVQb2ludCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGNvZGVQb2ludCA8PSAweEZGRkYpIHsgLy8gQk1QIGNvZGUgcG9pbnRcblx0XHRcdFx0XHRjb2RlVW5pdHMucHVzaChjb2RlUG9pbnQpO1xuXHRcdFx0XHR9IGVsc2UgeyAvLyBBc3RyYWwgY29kZSBwb2ludDsgc3BsaXQgaW4gc3Vycm9nYXRlIGhhbHZlc1xuXHRcdFx0XHRcdC8vIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nI3N1cnJvZ2F0ZS1mb3JtdWxhZVxuXHRcdFx0XHRcdGNvZGVQb2ludCAtPSAweDEwMDAwO1xuXHRcdFx0XHRcdGhpZ2hTdXJyb2dhdGUgPSAoY29kZVBvaW50ID4+IDEwKSArIDB4RDgwMDtcblx0XHRcdFx0XHRsb3dTdXJyb2dhdGUgPSAoY29kZVBvaW50ICUgMHg0MDApICsgMHhEQzAwO1xuXHRcdFx0XHRcdGNvZGVVbml0cy5wdXNoKGhpZ2hTdXJyb2dhdGUsIGxvd1N1cnJvZ2F0ZSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGluZGV4ICsgMSA9PSBsZW5ndGggfHwgY29kZVVuaXRzLmxlbmd0aCA+IE1BWF9TSVpFKSB7XG5cdFx0XHRcdFx0cmVzdWx0ICs9IHN0cmluZ0Zyb21DaGFyQ29kZS5hcHBseShudWxsLCBjb2RlVW5pdHMpO1xuXHRcdFx0XHRcdGNvZGVVbml0cy5sZW5ndGggPSAwO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH07XG5cdFx0aWYgKGRlZmluZVByb3BlcnR5KSB7XG5cdFx0XHRkZWZpbmVQcm9wZXJ0eShTdHJpbmcsICdmcm9tQ29kZVBvaW50Jywge1xuXHRcdFx0XHQndmFsdWUnOiBmcm9tQ29kZVBvaW50LFxuXHRcdFx0XHQnY29uZmlndXJhYmxlJzogdHJ1ZSxcblx0XHRcdFx0J3dyaXRhYmxlJzogdHJ1ZVxuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFN0cmluZy5mcm9tQ29kZVBvaW50ID0gZnJvbUNvZGVQb2ludDtcblx0XHR9XG5cdH0oKSk7XG59XG4iLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG4vLy9cblxuLy8gVGhlIGJhc2ljIG5vdGlvbiBvZiBhIHRyZWUgaGFzIGEgcGFyZW50LCBhIHBheWxvYWQsIGFuZCBhIGxpc3Qgb2YgY2hpbGRyZW4uXG4vLyAgSXQgaXMgdGhlIG1vc3QgYWJzdHJhY3QgaW50ZXJmYWNlIGZvciBhbGwgdGhlIHRyZWVzIHVzZWQgYnkgQU5UTFIuXG4vLy9cblxudmFyIFRva2VuID0gcmVxdWlyZSgnLi8uLi9Ub2tlbicpLlRva2VuO1xudmFyIEludGVydmFsID0gcmVxdWlyZSgnLi8uLi9JbnRlcnZhbFNldCcpLkludGVydmFsO1xudmFyIElOVkFMSURfSU5URVJWQUwgPSBuZXcgSW50ZXJ2YWwoLTEsIC0yKTtcbnZhciBVdGlscyA9IHJlcXVpcmUoJy4uL1V0aWxzLmpzJyk7XG5cblxuZnVuY3Rpb24gVHJlZSgpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIFN5bnRheFRyZWUoKSB7XG5cdFRyZWUuY2FsbCh0aGlzKTtcblx0cmV0dXJuIHRoaXM7XG59XG5cblN5bnRheFRyZWUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUcmVlLnByb3RvdHlwZSk7XG5TeW50YXhUcmVlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN5bnRheFRyZWU7XG5cbmZ1bmN0aW9uIFBhcnNlVHJlZSgpIHtcblx0U3ludGF4VHJlZS5jYWxsKHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuUGFyc2VUcmVlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoU3ludGF4VHJlZS5wcm90b3R5cGUpO1xuUGFyc2VUcmVlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFBhcnNlVHJlZTtcblxuZnVuY3Rpb24gUnVsZU5vZGUoKSB7XG5cdFBhcnNlVHJlZS5jYWxsKHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuUnVsZU5vZGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShQYXJzZVRyZWUucHJvdG90eXBlKTtcblJ1bGVOb2RlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJ1bGVOb2RlO1xuXG5mdW5jdGlvbiBUZXJtaW5hbE5vZGUoKSB7XG5cdFBhcnNlVHJlZS5jYWxsKHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuVGVybWluYWxOb2RlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoUGFyc2VUcmVlLnByb3RvdHlwZSk7XG5UZXJtaW5hbE5vZGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGVybWluYWxOb2RlO1xuXG5mdW5jdGlvbiBFcnJvck5vZGUoKSB7XG5cdFRlcm1pbmFsTm9kZS5jYWxsKHRoaXMpO1xuXHRyZXR1cm4gdGhpcztcbn1cblxuRXJyb3JOb2RlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGVybWluYWxOb2RlLnByb3RvdHlwZSk7XG5FcnJvck5vZGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gRXJyb3JOb2RlO1xuXG5mdW5jdGlvbiBQYXJzZVRyZWVWaXNpdG9yKCkge1xuXHRyZXR1cm4gdGhpcztcbn1cblxuUGFyc2VUcmVlVmlzaXRvci5wcm90b3R5cGUudmlzaXQgPSBmdW5jdGlvbihjdHgpIHtcbiBcdGlmIChBcnJheS5pc0FycmF5KGN0eCkpIHtcblx0XHRyZXR1cm4gY3R4Lm1hcChmdW5jdGlvbihjaGlsZCkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkLmFjY2VwdCh0aGlzKTtcbiAgICAgICAgfSwgdGhpcyk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGN0eC5hY2NlcHQodGhpcyk7XG5cdH1cbn07XG5cblBhcnNlVHJlZVZpc2l0b3IucHJvdG90eXBlLnZpc2l0Q2hpbGRyZW4gPSBmdW5jdGlvbihjdHgpIHtcblx0aWYgKGN0eC5jaGlsZHJlbikge1xuXHRcdHJldHVybiB0aGlzLnZpc2l0KGN0eC5jaGlsZHJlbik7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cbn1cblxuUGFyc2VUcmVlVmlzaXRvci5wcm90b3R5cGUudmlzaXRUZXJtaW5hbCA9IGZ1bmN0aW9uKG5vZGUpIHtcbn07XG5cblBhcnNlVHJlZVZpc2l0b3IucHJvdG90eXBlLnZpc2l0RXJyb3JOb2RlID0gZnVuY3Rpb24obm9kZSkge1xufTtcblxuXG5mdW5jdGlvbiBQYXJzZVRyZWVMaXN0ZW5lcigpIHtcblx0cmV0dXJuIHRoaXM7XG59XG5cblBhcnNlVHJlZUxpc3RlbmVyLnByb3RvdHlwZS52aXNpdFRlcm1pbmFsID0gZnVuY3Rpb24obm9kZSkge1xufTtcblxuUGFyc2VUcmVlTGlzdGVuZXIucHJvdG90eXBlLnZpc2l0RXJyb3JOb2RlID0gZnVuY3Rpb24obm9kZSkge1xufTtcblxuUGFyc2VUcmVlTGlzdGVuZXIucHJvdG90eXBlLmVudGVyRXZlcnlSdWxlID0gZnVuY3Rpb24obm9kZSkge1xufTtcblxuUGFyc2VUcmVlTGlzdGVuZXIucHJvdG90eXBlLmV4aXRFdmVyeVJ1bGUgPSBmdW5jdGlvbihub2RlKSB7XG59O1xuXG5mdW5jdGlvbiBUZXJtaW5hbE5vZGVJbXBsKHN5bWJvbCkge1xuXHRUZXJtaW5hbE5vZGUuY2FsbCh0aGlzKTtcblx0dGhpcy5wYXJlbnRDdHggPSBudWxsO1xuXHR0aGlzLnN5bWJvbCA9IHN5bWJvbDtcblx0cmV0dXJuIHRoaXM7XG59XG5cblRlcm1pbmFsTm9kZUltcGwucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUZXJtaW5hbE5vZGUucHJvdG90eXBlKTtcblRlcm1pbmFsTm9kZUltcGwucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gVGVybWluYWxOb2RlSW1wbDtcblxuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUuZ2V0Q2hpbGQgPSBmdW5jdGlvbihpKSB7XG5cdHJldHVybiBudWxsO1xufTtcblxuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUuZ2V0U3ltYm9sID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnN5bWJvbDtcbn07XG5cblRlcm1pbmFsTm9kZUltcGwucHJvdG90eXBlLmdldFBhcmVudCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5wYXJlbnRDdHg7XG59O1xuXG5UZXJtaW5hbE5vZGVJbXBsLnByb3RvdHlwZS5nZXRQYXlsb2FkID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnN5bWJvbDtcbn07XG5cblRlcm1pbmFsTm9kZUltcGwucHJvdG90eXBlLmdldFNvdXJjZUludGVydmFsID0gZnVuY3Rpb24oKSB7XG5cdGlmICh0aGlzLnN5bWJvbCA9PT0gbnVsbCkge1xuXHRcdHJldHVybiBJTlZBTElEX0lOVEVSVkFMO1xuXHR9XG5cdHZhciB0b2tlbkluZGV4ID0gdGhpcy5zeW1ib2wudG9rZW5JbmRleDtcblx0cmV0dXJuIG5ldyBJbnRlcnZhbCh0b2tlbkluZGV4LCB0b2tlbkluZGV4KTtcbn07XG5cblRlcm1pbmFsTm9kZUltcGwucHJvdG90eXBlLmdldENoaWxkQ291bnQgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIDA7XG59O1xuXG5UZXJtaW5hbE5vZGVJbXBsLnByb3RvdHlwZS5hY2NlcHQgPSBmdW5jdGlvbih2aXNpdG9yKSB7XG5cdHJldHVybiB2aXNpdG9yLnZpc2l0VGVybWluYWwodGhpcyk7XG59O1xuXG5UZXJtaW5hbE5vZGVJbXBsLnByb3RvdHlwZS5nZXRUZXh0ID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnN5bWJvbC50ZXh0O1xufTtcblxuVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcblx0aWYgKHRoaXMuc3ltYm9sLnR5cGUgPT09IFRva2VuLkVPRikge1xuXHRcdHJldHVybiBcIjxFT0Y+XCI7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHRoaXMuc3ltYm9sLnRleHQ7XG5cdH1cbn07XG5cbi8vIFJlcHJlc2VudHMgYSB0b2tlbiB0aGF0IHdhcyBjb25zdW1lZCBkdXJpbmcgcmVzeW5jaHJvbml6YXRpb25cbi8vIHJhdGhlciB0aGFuIGR1cmluZyBhIHZhbGlkIG1hdGNoIG9wZXJhdGlvbi4gRm9yIGV4YW1wbGUsXG4vLyB3ZSB3aWxsIGNyZWF0ZSB0aGlzIGtpbmQgb2YgYSBub2RlIGR1cmluZyBzaW5nbGUgdG9rZW4gaW5zZXJ0aW9uXG4vLyBhbmQgZGVsZXRpb24gYXMgd2VsbCBhcyBkdXJpbmcgXCJjb25zdW1lIHVudGlsIGVycm9yIHJlY292ZXJ5IHNldFwiXG4vLyB1cG9uIG5vIHZpYWJsZSBhbHRlcm5hdGl2ZSBleGNlcHRpb25zLlxuXG5mdW5jdGlvbiBFcnJvck5vZGVJbXBsKHRva2VuKSB7XG5cdFRlcm1pbmFsTm9kZUltcGwuY2FsbCh0aGlzLCB0b2tlbik7XG5cdHJldHVybiB0aGlzO1xufVxuXG5FcnJvck5vZGVJbXBsLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoVGVybWluYWxOb2RlSW1wbC5wcm90b3R5cGUpO1xuRXJyb3JOb2RlSW1wbC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBFcnJvck5vZGVJbXBsO1xuXG5FcnJvck5vZGVJbXBsLnByb3RvdHlwZS5pc0Vycm9yTm9kZSA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdHJ1ZTtcbn07XG5cbkVycm9yTm9kZUltcGwucHJvdG90eXBlLmFjY2VwdCA9IGZ1bmN0aW9uKHZpc2l0b3IpIHtcblx0cmV0dXJuIHZpc2l0b3IudmlzaXRFcnJvck5vZGUodGhpcyk7XG59O1xuXG5mdW5jdGlvbiBQYXJzZVRyZWVXYWxrZXIoKSB7XG5cdHJldHVybiB0aGlzO1xufVxuXG5QYXJzZVRyZWVXYWxrZXIucHJvdG90eXBlLndhbGsgPSBmdW5jdGlvbihsaXN0ZW5lciwgdCkge1xuXHR2YXIgZXJyb3JOb2RlID0gdCBpbnN0YW5jZW9mIEVycm9yTm9kZSB8fFxuXHRcdFx0KHQuaXNFcnJvck5vZGUgIT09IHVuZGVmaW5lZCAmJiB0LmlzRXJyb3JOb2RlKCkpO1xuXHRpZiAoZXJyb3JOb2RlKSB7XG5cdFx0bGlzdGVuZXIudmlzaXRFcnJvck5vZGUodCk7XG5cdH0gZWxzZSBpZiAodCBpbnN0YW5jZW9mIFRlcm1pbmFsTm9kZSkge1xuXHRcdGxpc3RlbmVyLnZpc2l0VGVybWluYWwodCk7XG5cdH0gZWxzZSB7XG5cdFx0dGhpcy5lbnRlclJ1bGUobGlzdGVuZXIsIHQpO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdC5nZXRDaGlsZENvdW50KCk7IGkrKykge1xuXHRcdFx0dmFyIGNoaWxkID0gdC5nZXRDaGlsZChpKTtcblx0XHRcdHRoaXMud2FsayhsaXN0ZW5lciwgY2hpbGQpO1xuXHRcdH1cblx0XHR0aGlzLmV4aXRSdWxlKGxpc3RlbmVyLCB0KTtcblx0fVxufTtcbi8vXG4vLyBUaGUgZGlzY292ZXJ5IG9mIGEgcnVsZSBub2RlLCBpbnZvbHZlcyBzZW5kaW5nIHR3byBldmVudHM6IHRoZSBnZW5lcmljXG4vLyB7QGxpbmsgUGFyc2VUcmVlTGlzdGVuZXIvL2VudGVyRXZlcnlSdWxlfSBhbmQgYVxuLy8ge0BsaW5rIFJ1bGVDb250ZXh0fS1zcGVjaWZpYyBldmVudC4gRmlyc3Qgd2UgdHJpZ2dlciB0aGUgZ2VuZXJpYyBhbmQgdGhlblxuLy8gdGhlIHJ1bGUgc3BlY2lmaWMuIFdlIHRvIHRoZW0gaW4gcmV2ZXJzZSBvcmRlciB1cG9uIGZpbmlzaGluZyB0aGUgbm9kZS5cbi8vXG5QYXJzZVRyZWVXYWxrZXIucHJvdG90eXBlLmVudGVyUnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyLCByKSB7XG5cdHZhciBjdHggPSByLmdldFJ1bGVDb250ZXh0KCk7XG5cdGxpc3RlbmVyLmVudGVyRXZlcnlSdWxlKGN0eCk7XG5cdGN0eC5lbnRlclJ1bGUobGlzdGVuZXIpO1xufTtcblxuUGFyc2VUcmVlV2Fsa2VyLnByb3RvdHlwZS5leGl0UnVsZSA9IGZ1bmN0aW9uKGxpc3RlbmVyLCByKSB7XG5cdHZhciBjdHggPSByLmdldFJ1bGVDb250ZXh0KCk7XG5cdGN0eC5leGl0UnVsZShsaXN0ZW5lcik7XG5cdGxpc3RlbmVyLmV4aXRFdmVyeVJ1bGUoY3R4KTtcbn07XG5cblBhcnNlVHJlZVdhbGtlci5ERUZBVUxUID0gbmV3IFBhcnNlVHJlZVdhbGtlcigpO1xuXG5leHBvcnRzLlJ1bGVOb2RlID0gUnVsZU5vZGU7XG5leHBvcnRzLkVycm9yTm9kZSA9IEVycm9yTm9kZTtcbmV4cG9ydHMuVGVybWluYWxOb2RlID0gVGVybWluYWxOb2RlO1xuZXhwb3J0cy5FcnJvck5vZGVJbXBsID0gRXJyb3JOb2RlSW1wbDtcbmV4cG9ydHMuVGVybWluYWxOb2RlSW1wbCA9IFRlcm1pbmFsTm9kZUltcGw7XG5leHBvcnRzLlBhcnNlVHJlZUxpc3RlbmVyID0gUGFyc2VUcmVlTGlzdGVuZXI7XG5leHBvcnRzLlBhcnNlVHJlZVZpc2l0b3IgPSBQYXJzZVRyZWVWaXNpdG9yO1xuZXhwb3J0cy5QYXJzZVRyZWVXYWxrZXIgPSBQYXJzZVRyZWVXYWxrZXI7XG5leHBvcnRzLklOVkFMSURfSU5URVJWQUwgPSBJTlZBTElEX0lOVEVSVkFMO1xuIiwiLyogQ29weXJpZ2h0IChjKSAyMDEyLTIwMTcgVGhlIEFOVExSIFByb2plY3QuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKiBVc2Ugb2YgdGhpcyBmaWxlIGlzIGdvdmVybmVkIGJ5IHRoZSBCU0QgMy1jbGF1c2UgbGljZW5zZSB0aGF0XG4gKiBjYW4gYmUgZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUgaW4gdGhlIHByb2plY3Qgcm9vdC5cbiAqL1xuXG52YXIgVXRpbHMgPSByZXF1aXJlKCcuLy4uL1V0aWxzJyk7XG52YXIgVG9rZW4gPSByZXF1aXJlKCcuLy4uL1Rva2VuJykuVG9rZW47XG52YXIgUnVsZU5vZGUgPSByZXF1aXJlKCcuL1RyZWUnKS5SdWxlTm9kZTtcbnZhciBFcnJvck5vZGUgPSByZXF1aXJlKCcuL1RyZWUnKS5FcnJvck5vZGU7XG52YXIgVGVybWluYWxOb2RlID0gcmVxdWlyZSgnLi9UcmVlJykuVGVybWluYWxOb2RlO1xudmFyIFBhcnNlclJ1bGVDb250ZXh0ID0gcmVxdWlyZSgnLi8uLi9QYXJzZXJSdWxlQ29udGV4dCcpLlBhcnNlclJ1bGVDb250ZXh0O1xudmFyIFJ1bGVDb250ZXh0ID0gcmVxdWlyZSgnLi8uLi9SdWxlQ29udGV4dCcpLlJ1bGVDb250ZXh0O1xudmFyIElOVkFMSURfQUxUX05VTUJFUiA9IHJlcXVpcmUoJy4vLi4vYXRuL0FUTicpLklOVkFMSURfQUxUX05VTUJFUjtcblxuXG4vKiogQSBzZXQgb2YgdXRpbGl0eSByb3V0aW5lcyB1c2VmdWwgZm9yIGFsbCBraW5kcyBvZiBBTlRMUiB0cmVlcy4gKi9cbmZ1bmN0aW9uIFRyZWVzKCkge1xufVxuXG4vLyBQcmludCBvdXQgYSB3aG9sZSB0cmVlIGluIExJU1AgZm9ybS4ge0BsaW5rIC8vZ2V0Tm9kZVRleHR9IGlzIHVzZWQgb24gdGhlXG4vLyAgbm9kZSBwYXlsb2FkcyB0byBnZXQgdGhlIHRleHQgZm9yIHRoZSBub2Rlcy4gIERldGVjdFxuLy8gIHBhcnNlIHRyZWVzIGFuZCBleHRyYWN0IGRhdGEgYXBwcm9wcmlhdGVseS5cblRyZWVzLnRvU3RyaW5nVHJlZSA9IGZ1bmN0aW9uKHRyZWUsIHJ1bGVOYW1lcywgcmVjb2cpIHtcblx0cnVsZU5hbWVzID0gcnVsZU5hbWVzIHx8IG51bGw7XG5cdHJlY29nID0gcmVjb2cgfHwgbnVsbDtcbiAgICBpZihyZWNvZyE9PW51bGwpIHtcbiAgICAgICBydWxlTmFtZXMgPSByZWNvZy5ydWxlTmFtZXM7XG4gICAgfVxuICAgIHZhciBzID0gVHJlZXMuZ2V0Tm9kZVRleHQodHJlZSwgcnVsZU5hbWVzKTtcbiAgICBzID0gVXRpbHMuZXNjYXBlV2hpdGVzcGFjZShzLCBmYWxzZSk7XG4gICAgdmFyIGMgPSB0cmVlLmdldENoaWxkQ291bnQoKTtcbiAgICBpZihjPT09MCkge1xuICAgICAgICByZXR1cm4gcztcbiAgICB9XG4gICAgdmFyIHJlcyA9IFwiKFwiICsgcyArICcgJztcbiAgICBpZihjPjApIHtcbiAgICAgICAgcyA9IFRyZWVzLnRvU3RyaW5nVHJlZSh0cmVlLmdldENoaWxkKDApLCBydWxlTmFtZXMpO1xuICAgICAgICByZXMgPSByZXMuY29uY2F0KHMpO1xuICAgIH1cbiAgICBmb3IodmFyIGk9MTtpPGM7aSsrKSB7XG4gICAgICAgIHMgPSBUcmVlcy50b1N0cmluZ1RyZWUodHJlZS5nZXRDaGlsZChpKSwgcnVsZU5hbWVzKTtcbiAgICAgICAgcmVzID0gcmVzLmNvbmNhdCgnICcgKyBzKTtcbiAgICB9XG4gICAgcmVzID0gcmVzLmNvbmNhdChcIilcIik7XG4gICAgcmV0dXJuIHJlcztcbn07XG5cblRyZWVzLmdldE5vZGVUZXh0ID0gZnVuY3Rpb24odCwgcnVsZU5hbWVzLCByZWNvZykge1xuXHRydWxlTmFtZXMgPSBydWxlTmFtZXMgfHwgbnVsbDtcblx0cmVjb2cgPSByZWNvZyB8fCBudWxsO1xuICAgIGlmKHJlY29nIT09bnVsbCkge1xuICAgICAgICBydWxlTmFtZXMgPSByZWNvZy5ydWxlTmFtZXM7XG4gICAgfVxuICAgIGlmKHJ1bGVOYW1lcyE9PW51bGwpIHtcbiAgICAgICBpZiAodCBpbnN0YW5jZW9mIFJ1bGVDb250ZXh0KSB7XG4gICAgICAgICAgIHZhciBhbHROdW1iZXIgPSB0LmdldEFsdE51bWJlcigpO1xuICAgICAgICAgICBpZiAoIGFsdE51bWJlciE9SU5WQUxJRF9BTFRfTlVNQkVSICkge1xuICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGVOYW1lc1t0LnJ1bGVJbmRleF0rXCI6XCIrYWx0TnVtYmVyO1xuICAgICAgICAgICB9XG4gICAgICAgICAgIHJldHVybiBydWxlTmFtZXNbdC5ydWxlSW5kZXhdO1xuICAgICAgIH0gZWxzZSBpZiAoIHQgaW5zdGFuY2VvZiBFcnJvck5vZGUpIHtcbiAgICAgICAgICAgcmV0dXJuIHQudG9TdHJpbmcoKTtcbiAgICAgICB9IGVsc2UgaWYodCBpbnN0YW5jZW9mIFRlcm1pbmFsTm9kZSkge1xuICAgICAgICAgICBpZih0LnN5bWJvbCE9PW51bGwpIHtcbiAgICAgICAgICAgICAgIHJldHVybiB0LnN5bWJvbC50ZXh0O1xuICAgICAgICAgICB9XG4gICAgICAgfVxuICAgIH1cbiAgICAvLyBubyByZWNvZyBmb3IgcnVsZSBuYW1lc1xuICAgIHZhciBwYXlsb2FkID0gdC5nZXRQYXlsb2FkKCk7XG4gICAgaWYgKHBheWxvYWQgaW5zdGFuY2VvZiBUb2tlbiApIHtcbiAgICAgICByZXR1cm4gcGF5bG9hZC50ZXh0O1xuICAgIH1cbiAgICByZXR1cm4gdC5nZXRQYXlsb2FkKCkudG9TdHJpbmcoKTtcbn07XG5cblxuLy8gUmV0dXJuIG9yZGVyZWQgbGlzdCBvZiBhbGwgY2hpbGRyZW4gb2YgdGhpcyBub2RlXG5UcmVlcy5nZXRDaGlsZHJlbiA9IGZ1bmN0aW9uKHQpIHtcblx0dmFyIGxpc3QgPSBbXTtcblx0Zm9yKHZhciBpPTA7aTx0LmdldENoaWxkQ291bnQoKTtpKyspIHtcblx0XHRsaXN0LnB1c2godC5nZXRDaGlsZChpKSk7XG5cdH1cblx0cmV0dXJuIGxpc3Q7XG59O1xuXG4vLyBSZXR1cm4gYSBsaXN0IG9mIGFsbCBhbmNlc3RvcnMgb2YgdGhpcyBub2RlLiAgVGhlIGZpcnN0IG5vZGUgb2Zcbi8vICBsaXN0IGlzIHRoZSByb290IGFuZCB0aGUgbGFzdCBpcyB0aGUgcGFyZW50IG9mIHRoaXMgbm9kZS5cbi8vXG5UcmVlcy5nZXRBbmNlc3RvcnMgPSBmdW5jdGlvbih0KSB7XG4gICAgdmFyIGFuY2VzdG9ycyA9IFtdO1xuICAgIHQgPSB0LmdldFBhcmVudCgpO1xuICAgIHdoaWxlKHQhPT1udWxsKSB7XG4gICAgICAgIGFuY2VzdG9ycyA9IFt0XS5jb25jYXQoYW5jZXN0b3JzKTtcbiAgICAgICAgdCA9IHQuZ2V0UGFyZW50KCk7XG4gICAgfVxuICAgIHJldHVybiBhbmNlc3RvcnM7XG59O1xuXG5UcmVlcy5maW5kQWxsVG9rZW5Ob2RlcyA9IGZ1bmN0aW9uKHQsIHR0eXBlKSB7XG4gICAgcmV0dXJuIFRyZWVzLmZpbmRBbGxOb2Rlcyh0LCB0dHlwZSwgdHJ1ZSk7XG59O1xuXG5UcmVlcy5maW5kQWxsUnVsZU5vZGVzID0gZnVuY3Rpb24odCwgcnVsZUluZGV4KSB7XG5cdHJldHVybiBUcmVlcy5maW5kQWxsTm9kZXModCwgcnVsZUluZGV4LCBmYWxzZSk7XG59O1xuXG5UcmVlcy5maW5kQWxsTm9kZXMgPSBmdW5jdGlvbih0LCBpbmRleCwgZmluZFRva2Vucykge1xuXHR2YXIgbm9kZXMgPSBbXTtcblx0VHJlZXMuX2ZpbmRBbGxOb2Rlcyh0LCBpbmRleCwgZmluZFRva2Vucywgbm9kZXMpO1xuXHRyZXR1cm4gbm9kZXM7XG59O1xuXG5UcmVlcy5fZmluZEFsbE5vZGVzID0gZnVuY3Rpb24odCwgaW5kZXgsIGZpbmRUb2tlbnMsIG5vZGVzKSB7XG5cdC8vIGNoZWNrIHRoaXMgbm9kZSAodGhlIHJvb3QpIGZpcnN0XG5cdGlmKGZpbmRUb2tlbnMgJiYgKHQgaW5zdGFuY2VvZiBUZXJtaW5hbE5vZGUpKSB7XG5cdFx0aWYodC5zeW1ib2wudHlwZT09PWluZGV4KSB7XG5cdFx0XHRub2Rlcy5wdXNoKHQpO1xuXHRcdH1cblx0fSBlbHNlIGlmKCFmaW5kVG9rZW5zICYmICh0IGluc3RhbmNlb2YgUGFyc2VyUnVsZUNvbnRleHQpKSB7XG5cdFx0aWYodC5ydWxlSW5kZXg9PT1pbmRleCkge1xuXHRcdFx0bm9kZXMucHVzaCh0KTtcblx0XHR9XG5cdH1cblx0Ly8gY2hlY2sgY2hpbGRyZW5cblx0Zm9yKHZhciBpPTA7aTx0LmdldENoaWxkQ291bnQoKTtpKyspIHtcblx0XHRUcmVlcy5fZmluZEFsbE5vZGVzKHQuZ2V0Q2hpbGQoaSksIGluZGV4LCBmaW5kVG9rZW5zLCBub2Rlcyk7XG5cdH1cbn07XG5cblRyZWVzLmRlc2NlbmRhbnRzID0gZnVuY3Rpb24odCkge1xuXHR2YXIgbm9kZXMgPSBbdF07XG4gICAgZm9yKHZhciBpPTA7aTx0LmdldENoaWxkQ291bnQoKTtpKyspIHtcbiAgICAgICAgbm9kZXMgPSBub2Rlcy5jb25jYXQoVHJlZXMuZGVzY2VuZGFudHModC5nZXRDaGlsZChpKSkpO1xuICAgIH1cbiAgICByZXR1cm4gbm9kZXM7XG59O1xuXG5cbmV4cG9ydHMuVHJlZXMgPSBUcmVlczsiLCIvKiBDb3B5cmlnaHQgKGMpIDIwMTItMjAxNyBUaGUgQU5UTFIgUHJvamVjdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIFVzZSBvZiB0aGlzIGZpbGUgaXMgZ292ZXJuZWQgYnkgdGhlIEJTRCAzLWNsYXVzZSBsaWNlbnNlIHRoYXRcbiAqIGNhbiBiZSBmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZSBpbiB0aGUgcHJvamVjdCByb290LlxuICovXG5cbnZhciBUcmVlID0gcmVxdWlyZSgnLi9UcmVlJyk7XG5leHBvcnRzLlRyZWVzID0gcmVxdWlyZSgnLi9UcmVlcycpLlRyZWVzO1xuZXhwb3J0cy5SdWxlTm9kZSA9IFRyZWUuUnVsZU5vZGU7XG5leHBvcnRzLlBhcnNlVHJlZUxpc3RlbmVyID0gVHJlZS5QYXJzZVRyZWVMaXN0ZW5lcjtcbmV4cG9ydHMuUGFyc2VUcmVlVmlzaXRvciA9IFRyZWUuUGFyc2VUcmVlVmlzaXRvcjtcbmV4cG9ydHMuUGFyc2VUcmVlV2Fsa2VyID0gVHJlZS5QYXJzZVRyZWVXYWxrZXI7XG4iLCIiLCIvKipcbiAqIEBsaWNlbnNlIENvbXBsZXguanMgdjIuMC4xMSAxMS8wMi8yMDE2XG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LCBSb2JlcnQgRWlzZWxlIChyb2JlcnRAeGFyZy5vcmcpXG4gKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy5cbiAqKi9cblxuLyoqXG4gKlxuICogVGhpcyBjbGFzcyBhbGxvd3MgdGhlIG1hbmlwdWxhdGlvbiBvZiBjb21wbGV4IG51bWJlcnMuXG4gKiBZb3UgY2FuIHBhc3MgYSBjb21wbGV4IG51bWJlciBpbiBkaWZmZXJlbnQgZm9ybWF0cy4gRWl0aGVyIGFzIG9iamVjdCwgZG91YmxlLCBzdHJpbmcgb3IgdHdvIGludGVnZXIgcGFyYW1ldGVycy5cbiAqXG4gKiBPYmplY3QgZm9ybVxuICogeyByZTogPHJlYWw+LCBpbTogPGltYWdpbmFyeT4gfVxuICogeyBhcmc6IDxhbmdsZT4sIGFiczogPHJhZGl1cz4gfVxuICogeyBwaGk6IDxhbmdsZT4sIHI6IDxyYWRpdXM+IH1cbiAqXG4gKiBBcnJheSAvIFZlY3RvciBmb3JtXG4gKiBbIHJlYWwsIGltYWdpbmFyeSBdXG4gKlxuICogRG91YmxlIGZvcm1cbiAqIDk5LjMgLSBTaW5nbGUgZG91YmxlIHZhbHVlXG4gKlxuICogU3RyaW5nIGZvcm1cbiAqICcyMy4xMzM3JyAtIFNpbXBsZSByZWFsIG51bWJlclxuICogJzE1KzNpJyAtIGEgc2ltcGxlIGNvbXBsZXggbnVtYmVyXG4gKiAnMy1pJyAtIGEgc2ltcGxlIGNvbXBsZXggbnVtYmVyXG4gKlxuICogRXhhbXBsZTpcbiAqXG4gKiB2YXIgYyA9IG5ldyBDb21wbGV4KCc5OS4zKzhpJyk7XG4gKiBjLm11bCh7cjogMywgaTogOX0pLmRpdig0LjkpLnN1YigzLCAyKTtcbiAqXG4gKi9cblxuKGZ1bmN0aW9uKHJvb3QpIHtcblxuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIGNvc2ggPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIChNYXRoLmV4cCh4KSArIE1hdGguZXhwKC14KSkgKiAwLjU7XG4gIH07XG5cbiAgdmFyIHNpbmggPSBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIChNYXRoLmV4cCh4KSAtIE1hdGguZXhwKC14KSkgKiAwLjU7XG4gIH07XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgY29zKHgpIC0gMSB1c2luZyBUYXlsb3Igc2VyaWVzIGlmIHggaXMgc21hbGwuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IGNvcyh4KSAtIDFcbiAgICovXG5cbiAgdmFyIGNvc20xID0gZnVuY3Rpb24oeCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGguUEkvNDtcbiAgICBpZiAoeCA8IC1saW1pdCB8fCB4ID4gbGltaXQpIHtcbiAgICAgIHJldHVybiAoTWF0aC5jb3MoeCkgLSAxLjApO1xuICAgIH1cblxuICAgIHZhciB4eCA9IHggKiB4O1xuICAgIHJldHVybiB4eCAqXG4gICAgICAoLTAuNSArIHh4ICpcbiAgICAgICAgKDEvMjQgKyB4eCAqXG4gICAgICAgICAgKC0xLzcyMCArIHh4ICpcbiAgICAgICAgICAgICgxLzQwMzIwICsgeHggKlxuICAgICAgICAgICAgICAoLTEvMzYyODgwMCArIHh4ICpcbiAgICAgICAgICAgICAgICAoMS80NzkwMDE0NjAwICsgeHggKlxuICAgICAgICAgICAgICAgICAgKC0xLzg3MTc4MjkxMjAwICsgeHggKlxuICAgICAgICAgICAgICAgICAgICAoMS8yMDkyMjc4OTg4ODAwMClcbiAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgIClcbiAgfTtcblxuICB2YXIgaHlwb3QgPSBmdW5jdGlvbih4LCB5KSB7XG5cbiAgICB2YXIgYSA9IE1hdGguYWJzKHgpO1xuICAgIHZhciBiID0gTWF0aC5hYnMoeSk7XG5cbiAgICBpZiAoYSA8IDMwMDAgJiYgYiA8IDMwMDApIHtcbiAgICAgIHJldHVybiBNYXRoLnNxcnQoYSAqIGEgKyBiICogYik7XG4gICAgfVxuXG4gICAgaWYgKGEgPCBiKSB7XG4gICAgICBhID0gYjtcbiAgICAgIGIgPSB4IC8geTtcbiAgICB9IGVsc2Uge1xuICAgICAgYiA9IHkgLyB4O1xuICAgIH1cbiAgICByZXR1cm4gYSAqIE1hdGguc3FydCgxICsgYiAqIGIpO1xuICB9O1xuXG4gIHZhciBwYXJzZXJfZXhpdCA9IGZ1bmN0aW9uKCkge1xuICAgIHRocm93IFN5bnRheEVycm9yKCdJbnZhbGlkIFBhcmFtJyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgbG9nKHNxcnQoYV4yK2JeMikpIGluIGEgd2F5IHRvIGF2b2lkIG92ZXJmbG93c1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gYVxuICAgKiBAcGFyYW0ge251bWJlcn0gYlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZnVuY3Rpb24gbG9nSHlwb3QoYSwgYikge1xuXG4gICAgdmFyIF9hID0gTWF0aC5hYnMoYSk7XG4gICAgdmFyIF9iID0gTWF0aC5hYnMoYik7XG5cbiAgICBpZiAoYSA9PT0gMCkge1xuICAgICAgcmV0dXJuIE1hdGgubG9nKF9iKTtcbiAgICB9XG5cbiAgICBpZiAoYiA9PT0gMCkge1xuICAgICAgcmV0dXJuIE1hdGgubG9nKF9hKTtcbiAgICB9XG5cbiAgICBpZiAoX2EgPCAzMDAwICYmIF9iIDwgMzAwMCkge1xuICAgICAgcmV0dXJuIE1hdGgubG9nKGEgKiBhICsgYiAqIGIpICogMC41O1xuICAgIH1cblxuICAgIC8qIEkgZ290IDQgaWRlYXMgdG8gY29tcHV0ZSB0aGlzIHByb3BlcnR5IHdpdGhvdXQgb3ZlcmZsb3c6XG4gICAgICpcbiAgICAgKiBUZXN0aW5nIDEwMDAwMDAgdGltZXMgd2l0aCByYW5kb20gc2FtcGxlcyBmb3IgYSxiIOKIiCBbMSwgMTAwMDAwMDAwMF0gYWdhaW5zdCBhIGJpZyBkZWNpbWFsIGxpYnJhcnkgdG8gZ2V0IGFuIGVycm9yIGVzdGltYXRlXG4gICAgICpcbiAgICAgKiAxLiBPbmx5IGVsaW1pbmF0ZSB0aGUgc3F1YXJlIHJvb3Q6IChPVkVSQUxMIEVSUk9SOiAzLjkxMjI0ODMwMzA5NTExMTZlLTExKVxuXG4gICAgIE1hdGgubG9nKGEgKiBhICsgYiAqIGIpIC8gMlxuXG4gICAgICpcbiAgICAgKlxuICAgICAqIDIuIFRyeSB0byB1c2UgdGhlIG5vbi1vdmVyZmxvd2luZyBweXRoYWdvcmFzOiAoT1ZFUkFMTCBFUlJPUjogOC44ODk3NjAwMzkyMTAxNTllLTEwKVxuXG4gICAgIHZhciBmbiA9IGZ1bmN0aW9uKGEsIGIpIHtcbiAgICAgYSA9IE1hdGguYWJzKGEpO1xuICAgICBiID0gTWF0aC5hYnMoYik7XG4gICAgIHZhciB0ID0gTWF0aC5taW4oYSwgYik7XG4gICAgIGEgPSBNYXRoLm1heChhLCBiKTtcbiAgICAgdCA9IHQgLyBhO1xuXG4gICAgIHJldHVybiBNYXRoLmxvZyhhKSArIE1hdGgubG9nKDEgKyB0ICogdCkgLyAyO1xuICAgICB9O1xuXG4gICAgICogMy4gQWJ1c2UgdGhlIGlkZW50aXR5IGNvcyhhdGFuKHkveCkgPSB4IC8gc3FydCh4XjIreV4yKTogKE9WRVJBTEwgRVJST1I6IDMuNDc4MDE3ODczNzAzNzIwNGUtMTApXG5cbiAgICAgTWF0aC5sb2coYSAvIE1hdGguY29zKE1hdGguYXRhbjIoYiwgYSkpKVxuXG4gICAgICogNC4gVXNlIDMuIGFuZCBhcHBseSBsb2cgcnVsZXM6IChPVkVSQUxMIEVSUk9SOiAxLjIwMTQwODc1MDI2MjA4OTZlLTkpXG5cbiAgICAgTWF0aC5sb2coYSkgLSBNYXRoLmxvZyhNYXRoLmNvcyhNYXRoLmF0YW4yKGIsIGEpKSlcblxuICAgICAqL1xuXG4gICAgcmV0dXJuIE1hdGgubG9nKGEgLyBNYXRoLmNvcyhNYXRoLmF0YW4yKGIsIGEpKSk7XG4gIH1cblxuICB2YXIgcGFyc2UgPSBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICB2YXIgeiA9IHsncmUnOiAwLCAnaW0nOiAwfTtcblxuICAgIGlmIChhID09PSB1bmRlZmluZWQgfHwgYSA9PT0gbnVsbCkge1xuICAgICAgelsncmUnXSA9XG4gICAgICAgICAgICAgIHpbJ2ltJ10gPSAwO1xuICAgIH0gZWxzZSBpZiAoYiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB6WydyZSddID0gYTtcbiAgICAgIHpbJ2ltJ10gPSBiO1xuICAgIH0gZWxzZVxuICAgICAgc3dpdGNoICh0eXBlb2YgYSkge1xuXG4gICAgICAgIGNhc2UgJ29iamVjdCc6XG5cbiAgICAgICAgICBpZiAoJ2ltJyBpbiBhICYmICdyZScgaW4gYSkge1xuICAgICAgICAgICAgelsncmUnXSA9IGFbJ3JlJ107XG4gICAgICAgICAgICB6WydpbSddID0gYVsnaW0nXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCdhYnMnIGluIGEgJiYgJ2FyZycgaW4gYSkge1xuICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoYVsnYWJzJ10pICYmIE51bWJlci5pc0Zpbml0ZShhWydhcmcnXSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIENvbXBsZXhbJ0lORklOSVRZJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB6WydyZSddID0gYVsnYWJzJ10gKiBNYXRoLmNvcyhhWydhcmcnXSk7XG4gICAgICAgICAgICB6WydpbSddID0gYVsnYWJzJ10gKiBNYXRoLnNpbihhWydhcmcnXSk7XG4gICAgICAgICAgfSBlbHNlIGlmICgncicgaW4gYSAmJiAncGhpJyBpbiBhKSB7XG4gICAgICAgICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShhWydyJ10pICYmIE51bWJlci5pc0Zpbml0ZShhWydwaGknXSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIENvbXBsZXhbJ0lORklOSVRZJ107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB6WydyZSddID0gYVsnciddICogTWF0aC5jb3MoYVsncGhpJ10pO1xuICAgICAgICAgICAgelsnaW0nXSA9IGFbJ3InXSAqIE1hdGguc2luKGFbJ3BoaSddKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGEubGVuZ3RoID09PSAyKSB7IC8vIFF1aWNrIGFycmF5IGNoZWNrXG4gICAgICAgICAgICB6WydyZSddID0gYVswXTtcbiAgICAgICAgICAgIHpbJ2ltJ10gPSBhWzFdO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwYXJzZXJfZXhpdCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdzdHJpbmcnOlxuXG4gICAgICAgICAgelsnaW0nXSA9IC8qIHZvaWQgKi9cbiAgICAgICAgICAgICAgICAgIHpbJ3JlJ10gPSAwO1xuXG4gICAgICAgICAgdmFyIHRva2VucyA9IGEubWF0Y2goL1xcZCtcXC4/XFxkKmVbKy1dP1xcZCt8XFxkK1xcLj9cXGQqfFxcLlxcZCt8Li9nKTtcbiAgICAgICAgICB2YXIgcGx1cyA9IDE7XG4gICAgICAgICAgdmFyIG1pbnVzID0gMDtcblxuICAgICAgICAgIGlmICh0b2tlbnMgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHBhcnNlcl9leGl0KCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcblxuICAgICAgICAgICAgdmFyIGMgPSB0b2tlbnNbaV07XG5cbiAgICAgICAgICAgIGlmIChjID09PSAnICcgfHwgYyA9PT0gJ1xcdCcgfHwgYyA9PT0gJ1xcbicpIHtcbiAgICAgICAgICAgICAgLyogdm9pZCAqL1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnKycpIHtcbiAgICAgICAgICAgICAgcGx1cysrO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjID09PSAnLScpIHtcbiAgICAgICAgICAgICAgbWludXMrKztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PT0gJ2knIHx8IGMgPT09ICdJJykge1xuXG4gICAgICAgICAgICAgIGlmIChwbHVzICsgbWludXMgPT09IDApIHtcbiAgICAgICAgICAgICAgICBwYXJzZXJfZXhpdCgpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHRva2Vuc1tpICsgMV0gIT09ICcgJyAmJiAhaXNOYU4odG9rZW5zW2kgKyAxXSkpIHtcbiAgICAgICAgICAgICAgICB6WydpbSddICs9IHBhcnNlRmxvYXQoKG1pbnVzICUgMiA/ICctJyA6ICcnKSArIHRva2Vuc1tpICsgMV0pO1xuICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB6WydpbSddICs9IHBhcnNlRmxvYXQoKG1pbnVzICUgMiA/ICctJyA6ICcnKSArICcxJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcGx1cyA9IG1pbnVzID0gMDtcblxuICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICBpZiAocGx1cyArIG1pbnVzID09PSAwIHx8IGlzTmFOKGMpKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VyX2V4aXQoKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0b2tlbnNbaSArIDFdID09PSAnaScgfHwgdG9rZW5zW2kgKyAxXSA9PT0gJ0knKSB7XG4gICAgICAgICAgICAgICAgelsnaW0nXSArPSBwYXJzZUZsb2F0KChtaW51cyAlIDIgPyAnLScgOiAnJykgKyBjKTtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgelsncmUnXSArPSBwYXJzZUZsb2F0KChtaW51cyAlIDIgPyAnLScgOiAnJykgKyBjKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBwbHVzID0gbWludXMgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFN0aWxsIHNvbWV0aGluZyBvbiB0aGUgc3RhY2tcbiAgICAgICAgICBpZiAocGx1cyArIG1pbnVzID4gMCkge1xuICAgICAgICAgICAgcGFyc2VyX2V4aXQoKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICB6WydpbSddID0gMDtcbiAgICAgICAgICB6WydyZSddID0gYTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHBhcnNlcl9leGl0KCk7XG4gICAgICB9XG5cbiAgICBpZiAoaXNOYU4oelsncmUnXSkgfHwgaXNOYU4oelsnaW0nXSkpIHtcbiAgICAgIC8vIElmIGEgY2FsY3VsYXRpb24gaXMgTmFOLCB3ZSB0cmVhdCBpdCBhcyBOYU4gYW5kIGRvbid0IHRocm93XG4gICAgICAvL3BhcnNlcl9leGl0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHo7XG4gIH07XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICovXG4gIGZ1bmN0aW9uIENvbXBsZXgoYSwgYikge1xuXG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIENvbXBsZXgpKSB7XG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoYSwgYik7XG4gICAgfVxuXG4gICAgdmFyIHogPSBwYXJzZShhLCBiKTtcblxuICAgIHRoaXNbJ3JlJ10gPSB6WydyZSddO1xuICAgIHRoaXNbJ2ltJ10gPSB6WydpbSddO1xuICB9XG5cbiAgQ29tcGxleC5wcm90b3R5cGUgPSB7XG5cbiAgICAncmUnOiAwLFxuICAgICdpbSc6IDAsXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBzaWduIG9mIGEgY29tcGxleCBudW1iZXIsIHdoaWNoIGlzIGEgbm9ybWFsaXplZCBjb21wbGV4XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnc2lnbic6IGZ1bmN0aW9uKCkge1xuXG4gICAgICB2YXIgYWJzID0gdGhpc1snYWJzJ10oKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICB0aGlzWydyZSddIC8gYWJzLFxuICAgICAgICAgICAgICB0aGlzWydpbSddIC8gYWJzKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWRkcyB0d28gY29tcGxleCBudW1iZXJzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYWRkJzogZnVuY3Rpb24oYSwgYikge1xuXG4gICAgICB2YXIgeiA9IG5ldyBDb21wbGV4KGEsIGIpO1xuXG4gICAgICAvLyBJbmZpbml0eSArIEluZmluaXR5ID0gTmFOXG4gICAgICBpZiAodGhpc1snaXNJbmZpbml0ZSddKCkgJiYgelsnaXNJbmZpbml0ZSddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ05BTiddO1xuICAgICAgfVxuXG4gICAgICAvLyBJbmZpbml0eSArIHogPSBJbmZpbml0eSB7IHdoZXJlIHogIT0gSW5maW5pdHkgfVxuICAgICAgaWYgKHRoaXNbJ2lzSW5maW5pdGUnXSgpIHx8IHpbJ2lzSW5maW5pdGUnXSgpKSB7XG4gICAgICAgIHJldHVybiBDb21wbGV4WydJTkZJTklUWSddO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIHRoaXNbJ3JlJ10gKyB6WydyZSddLFxuICAgICAgICAgICAgICB0aGlzWydpbSddICsgelsnaW0nXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFN1YnRyYWN0cyB0d28gY29tcGxleCBudW1iZXJzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnc3ViJzogZnVuY3Rpb24oYSwgYikge1xuXG4gICAgICB2YXIgeiA9IG5ldyBDb21wbGV4KGEsIGIpO1xuXG4gICAgICAvLyBJbmZpbml0eSAtIEluZmluaXR5ID0gTmFOXG4gICAgICBpZiAodGhpc1snaXNJbmZpbml0ZSddKCkgJiYgelsnaXNJbmZpbml0ZSddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ05BTiddO1xuICAgICAgfVxuXG4gICAgICAvLyBJbmZpbml0eSAtIHogPSBJbmZpbml0eSB7IHdoZXJlIHogIT0gSW5maW5pdHkgfVxuICAgICAgaWYgKHRoaXNbJ2lzSW5maW5pdGUnXSgpIHx8IHpbJ2lzSW5maW5pdGUnXSgpKSB7XG4gICAgICAgIHJldHVybiBDb21wbGV4WydJTkZJTklUWSddO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIHRoaXNbJ3JlJ10gLSB6WydyZSddLFxuICAgICAgICAgICAgICB0aGlzWydpbSddIC0gelsnaW0nXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE11bHRpcGxpZXMgdHdvIGNvbXBsZXggbnVtYmVyc1xuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ211bCc6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgdmFyIHogPSBuZXcgQ29tcGxleChhLCBiKTtcblxuICAgICAgLy8gSW5maW5pdHkgKiAwID0gTmFOXG4gICAgICBpZiAoKHRoaXNbJ2lzSW5maW5pdGUnXSgpICYmIHpbJ2lzWmVybyddKCkpIHx8ICh0aGlzWydpc1plcm8nXSgpICYmIHpbJ2lzSW5maW5pdGUnXSgpKSkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnTkFOJ107XG4gICAgICB9XG5cbiAgICAgIC8vIEluZmluaXR5ICogeiA9IEluZmluaXR5IHsgd2hlcmUgeiAhPSAwIH1cbiAgICAgIGlmICh0aGlzWydpc0luZmluaXRlJ10oKSB8fCB6Wydpc0luZmluaXRlJ10oKSkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnSU5GSU5JVFknXTtcbiAgICAgIH1cblxuICAgICAgLy8gU2hvcnQgY2lyY3VpdCBmb3IgcmVhbCB2YWx1ZXNcbiAgICAgIGlmICh6WydpbSddID09PSAwICYmIHRoaXNbJ2ltJ10gPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHRoaXNbJ3JlJ10gKiB6WydyZSddLCAwKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICB0aGlzWydyZSddICogelsncmUnXSAtIHRoaXNbJ2ltJ10gKiB6WydpbSddLFxuICAgICAgICAgICAgICB0aGlzWydyZSddICogelsnaW0nXSArIHRoaXNbJ2ltJ10gKiB6WydyZSddKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGl2aWRlcyB0d28gY29tcGxleCBudW1iZXJzXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnZGl2JzogZnVuY3Rpb24oYSwgYikge1xuXG4gICAgICB2YXIgeiA9IG5ldyBDb21wbGV4KGEsIGIpO1xuXG4gICAgICAvLyAwIC8gMCA9IE5hTiBhbmQgSW5maW5pdHkgLyBJbmZpbml0eSA9IE5hTlxuICAgICAgaWYgKCh0aGlzWydpc1plcm8nXSgpICYmIHpbJ2lzWmVybyddKCkpIHx8ICh0aGlzWydpc0luZmluaXRlJ10oKSAmJiB6Wydpc0luZmluaXRlJ10oKSkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ05BTiddO1xuICAgICAgfVxuXG4gICAgICAvLyBJbmZpbml0eSAvIDAgPSBJbmZpbml0eVxuICAgICAgaWYgKHRoaXNbJ2lzSW5maW5pdGUnXSgpIHx8IHpbJ2lzWmVybyddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ0lORklOSVRZJ107XG4gICAgICB9XG5cbiAgICAgIC8vIDAgLyBJbmZpbml0eSA9IDBcbiAgICAgIGlmICh0aGlzWydpc1plcm8nXSgpIHx8IHpbJ2lzSW5maW5pdGUnXSgpKSB7XG4gICAgICAgIHJldHVybiBDb21wbGV4WydaRVJPJ107XG4gICAgICB9XG5cbiAgICAgIGEgPSB0aGlzWydyZSddO1xuICAgICAgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIHZhciBjID0gelsncmUnXTtcbiAgICAgIHZhciBkID0gelsnaW0nXTtcbiAgICAgIHZhciB0LCB4O1xuXG4gICAgICBpZiAoMCA9PT0gZCkge1xuICAgICAgICAvLyBEaXZpc29yIGlzIHJlYWxcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KGEgLyBjLCBiIC8gYyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChNYXRoLmFicyhjKSA8IE1hdGguYWJzKGQpKSB7XG5cbiAgICAgICAgeCA9IGMgLyBkO1xuICAgICAgICB0ID0gYyAqIHggKyBkO1xuXG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAoYSAqIHggKyBiKSAvIHQsXG4gICAgICAgICAgICAgICAgKGIgKiB4IC0gYSkgLyB0KTtcblxuICAgICAgfSBlbHNlIHtcblxuICAgICAgICB4ID0gZCAvIGM7XG4gICAgICAgIHQgPSBkICogeCArIGM7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAgIChhICsgYiAqIHgpIC8gdCxcbiAgICAgICAgICAgICAgICAoYiAtIGEgKiB4KSAvIHQpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIHBvd2VyIG9mIHR3byBjb21wbGV4IG51bWJlcnNcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdwb3cnOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHZhciB6ID0gbmV3IENvbXBsZXgoYSwgYik7XG5cbiAgICAgIGEgPSB0aGlzWydyZSddO1xuICAgICAgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIGlmICh6Wydpc1plcm8nXSgpKSB7XG4gICAgICAgIHJldHVybiBDb21wbGV4WydPTkUnXTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhlIGV4cG9uZW50IGlzIHJlYWxcbiAgICAgIGlmICh6WydpbSddID09PSAwKSB7XG5cbiAgICAgICAgaWYgKGIgPT09IDAgJiYgYSA+PSAwKSB7XG5cbiAgICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoTWF0aC5wb3coYSwgelsncmUnXSksIDApO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoYSA9PT0gMCkgeyAvLyBJZiBiYXNlIGlzIGZ1bGx5IGltYWdpbmFyeVxuXG4gICAgICAgICAgc3dpdGNoICgoelsncmUnXSAlIDQgKyA0KSAlIDQpIHtcbiAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KE1hdGgucG93KGIsIHpbJ3JlJ10pLCAwKTtcbiAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KDAsIE1hdGgucG93KGIsIHpbJ3JlJ10pKTtcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KC1NYXRoLnBvdyhiLCB6WydyZSddKSwgMCk7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgQ29tcGxleCgwLCAtTWF0aC5wb3coYiwgelsncmUnXSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKiBJIGNvdWxkbid0IGZpbmQgYSBnb29kIGZvcm11bGEsIHNvIGhlcmUgaXMgYSBkZXJpdmF0aW9uIGFuZCBvcHRpbWl6YXRpb25cbiAgICAgICAqXG4gICAgICAgKiB6XzFeel8yID0gKGEgKyBiaSleKGMgKyBkaSlcbiAgICAgICAqICAgICAgICAgPSBleHAoKGMgKyBkaSkgKiBsb2coYSArIGJpKVxuICAgICAgICogICAgICAgICA9IHBvdyhhXjIgKyBiXjIsIChjICsgZGkpIC8gMikgKiBleHAoaShjICsgZGkpYXRhbjIoYiwgYSkpXG4gICAgICAgKiA9Pi4uLlxuICAgICAgICogUmUgPSAocG93KGFeMiArIGJeMiwgYyAvIDIpICogZXhwKC1kICogYXRhbjIoYiwgYSkpKSAqIGNvcyhkICogbG9nKGFeMiArIGJeMikgLyAyICsgYyAqIGF0YW4yKGIsIGEpKVxuICAgICAgICogSW0gPSAocG93KGFeMiArIGJeMiwgYyAvIDIpICogZXhwKC1kICogYXRhbjIoYiwgYSkpKSAqIHNpbihkICogbG9nKGFeMiArIGJeMikgLyAyICsgYyAqIGF0YW4yKGIsIGEpKVxuICAgICAgICpcbiAgICAgICAqID0+Li4uXG4gICAgICAgKiBSZSA9IGV4cChjICogbG9nKHNxcnQoYV4yICsgYl4yKSkgLSBkICogYXRhbjIoYiwgYSkpICogY29zKGQgKiBsb2coc3FydChhXjIgKyBiXjIpKSArIGMgKiBhdGFuMihiLCBhKSlcbiAgICAgICAqIEltID0gZXhwKGMgKiBsb2coc3FydChhXjIgKyBiXjIpKSAtIGQgKiBhdGFuMihiLCBhKSkgKiBzaW4oZCAqIGxvZyhzcXJ0KGFeMiArIGJeMikpICsgYyAqIGF0YW4yKGIsIGEpKVxuICAgICAgICpcbiAgICAgICAqID0+XG4gICAgICAgKiBSZSA9IGV4cChjICogbG9nc3EyIC0gZCAqIGFyZyh6XzEpKSAqIGNvcyhkICogbG9nc3EyICsgYyAqIGFyZyh6XzEpKVxuICAgICAgICogSW0gPSBleHAoYyAqIGxvZ3NxMiAtIGQgKiBhcmcoel8xKSkgKiBzaW4oZCAqIGxvZ3NxMiArIGMgKiBhcmcoel8xKSlcbiAgICAgICAqXG4gICAgICAgKi9cblxuICAgICAgaWYgKGEgPT09IDAgJiYgYiA9PT0gMCAmJiB6WydyZSddID4gMCAmJiB6WydpbSddID49IDApIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ1pFUk8nXTtcbiAgICAgIH1cblxuICAgICAgdmFyIGFyZyA9IE1hdGguYXRhbjIoYiwgYSk7XG4gICAgICB2YXIgbG9oID0gbG9nSHlwb3QoYSwgYik7XG5cbiAgICAgIGEgPSBNYXRoLmV4cCh6WydyZSddICogbG9oIC0gelsnaW0nXSAqIGFyZyk7XG4gICAgICBiID0gelsnaW0nXSAqIGxvaCArIHpbJ3JlJ10gKiBhcmc7XG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIGEgKiBNYXRoLmNvcyhiKSxcbiAgICAgICAgICAgICAgYSAqIE1hdGguc2luKGIpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IHNxdWFyZSByb290XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnc3FydCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG4gICAgICB2YXIgciA9IHRoaXNbJ2FicyddKCk7XG5cbiAgICAgIHZhciByZSwgaW07XG5cbiAgICAgIGlmIChhID49IDApIHtcblxuICAgICAgICBpZiAoYiA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLnNxcnQoYSksIDApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmUgPSAwLjUgKiBNYXRoLnNxcnQoMi4wICogKHIgKyBhKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZSA9IE1hdGguYWJzKGIpIC8gTWF0aC5zcXJ0KDIgKiAociAtIGEpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGEgPD0gMCkge1xuICAgICAgICBpbSA9IDAuNSAqIE1hdGguc3FydCgyLjAgKiAociAtIGEpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGltID0gTWF0aC5hYnMoYikgLyBNYXRoLnNxcnQoMiAqIChyICsgYSkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgocmUsIGIgPCAwID8gLWltIDogaW0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggZXhwb25lbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdleHAnOiBmdW5jdGlvbigpIHtcblxuICAgICAgdmFyIHRtcCA9IE1hdGguZXhwKHRoaXNbJ3JlJ10pO1xuXG4gICAgICBpZiAodGhpc1snaW0nXSA9PT0gMCkge1xuICAgICAgICAvL3JldHVybiBuZXcgQ29tcGxleCh0bXAsIDApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICB0bXAgKiBNYXRoLmNvcyh0aGlzWydpbSddKSxcbiAgICAgICAgICAgICAgdG1wICogTWF0aC5zaW4odGhpc1snaW0nXSkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggZXhwb25lbnQgYW5kIHN1YnRyYWN0cyBvbmUuXG4gICAgICpcbiAgICAgKiBUaGlzIG1heSBiZSBtb3JlIGFjY3VyYXRlIHRoYW4gYENvbXBsZXgoeCkuZXhwKCkuc3ViKDEpYCBpZlxuICAgICAqIGB4YCBpcyBzbWFsbC5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdleHBtMSc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvKipcbiAgICAgICAqIGV4cChhICsgaSpiKSAtIDFcbiAgICAgICA9IGV4cChhKSAqIChjb3MoYikgKyBqKnNpbihiKSkgLSAxXG4gICAgICAgPSBleHBtMShhKSpjb3MoYikgKyBjb3NtMShiKSArIGoqZXhwKGEpKnNpbihiKVxuICAgICAgICovXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBNYXRoLmV4cG0xKGEpICogTWF0aC5jb3MoYikgKyBjb3NtMShiKSxcbiAgICAgICAgICAgICAgTWF0aC5leHAoYSkgKiBNYXRoLnNpbihiKSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgbmF0dXJhbCBsb2dcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdsb2cnOiBmdW5jdGlvbigpIHtcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuXG4gICAgICBpZiAoYiA9PT0gMCAmJiBhID4gMCkge1xuICAgICAgICAvL3JldHVybiBuZXcgQ29tcGxleChNYXRoLmxvZyhhKSwgMCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgbG9nSHlwb3QoYSwgYiksXG4gICAgICAgICAgICAgIE1hdGguYXRhbjIoYiwgYSkpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIG1hZ25pdHVkZSBvZiB0aGUgY29tcGxleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgJ2Ficyc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICByZXR1cm4gaHlwb3QodGhpc1sncmUnXSwgdGhpc1snaW0nXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgYW5nbGUgb2YgdGhlIGNvbXBsZXggbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgICAqL1xuICAgICdhcmcnOiBmdW5jdGlvbigpIHtcblxuICAgICAgcmV0dXJuIE1hdGguYXRhbjIodGhpc1snaW0nXSwgdGhpc1sncmUnXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgc2luZSBvZiB0aGUgY29tcGxleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdzaW4nOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gc2luKGMpID0gKGVeYiAtIGVeKC1iKSkgLyAoMmkpXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBNYXRoLnNpbihhKSAqIGNvc2goYiksXG4gICAgICAgICAgICAgIE1hdGguY29zKGEpICogc2luaChiKSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29zaW5lXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnY29zJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIGNvcyh6KSA9IChlXmIgKyBlXigtYikpIC8gMlxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgTWF0aC5jb3MoYSkgKiBjb3NoKGIpLFxuICAgICAgICAgICAgICAtTWF0aC5zaW4oYSkgKiBzaW5oKGIpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSB0YW5nZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAndGFuJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIHRhbihjKSA9IChlXihjaSkgLSBlXigtY2kpKSAvIChpKGVeKGNpKSArIGVeKC1jaSkpKVxuXG4gICAgICB2YXIgYSA9IDIgKiB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSAyICogdGhpc1snaW0nXTtcbiAgICAgIHZhciBkID0gTWF0aC5jb3MoYSkgKyBjb3NoKGIpO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIE1hdGguc2luKGEpIC8gZCxcbiAgICAgICAgICAgICAgc2luaChiKSAvIGQpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvdGFuZ2VudFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2NvdCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBjb3QoYykgPSBpKGVeKGNpKSArIGVeKC1jaSkpIC8gKGVeKGNpKSAtIGVeKC1jaSkpXG5cbiAgICAgIHZhciBhID0gMiAqIHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IDIgKiB0aGlzWydpbSddO1xuICAgICAgdmFyIGQgPSBNYXRoLmNvcyhhKSAtIGNvc2goYik7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgLU1hdGguc2luKGEpIC8gZCxcbiAgICAgICAgICAgICAgc2luaChiKSAvIGQpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIHNlY2FudFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ3NlYyc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBzZWMoYykgPSAyIC8gKGVeKGNpKSArIGVeKC1jaSkpXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcbiAgICAgIHZhciBkID0gMC41ICogY29zaCgyICogYikgKyAwLjUgKiBNYXRoLmNvcygyICogYSk7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgTWF0aC5jb3MoYSkgKiBjb3NoKGIpIC8gZCxcbiAgICAgICAgICAgICAgTWF0aC5zaW4oYSkgKiBzaW5oKGIpIC8gZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29zZWNhbnNcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdjc2MnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gY3NjKGMpID0gMmkgLyAoZV4oY2kpIC0gZV4oLWNpKSlcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuICAgICAgdmFyIGQgPSAwLjUgKiBjb3NoKDIgKiBiKSAtIDAuNSAqIE1hdGguY29zKDIgKiBhKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBNYXRoLnNpbihhKSAqIGNvc2goYikgLyBkLFxuICAgICAgICAgICAgICAtTWF0aC5jb3MoYSkgKiBzaW5oKGIpIC8gZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBhcmN1cyBzaW51c1xuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2FzaW4nOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYXNpbihjKSA9IC1pICogbG9nKGNpICsgc3FydCgxIC0gY14yKSlcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuXG4gICAgICB2YXIgdDEgPSBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgYiAqIGIgLSBhICogYSArIDEsXG4gICAgICAgICAgICAgIC0yICogYSAqIGIpWydzcXJ0J10oKTtcblxuICAgICAgdmFyIHQyID0gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIHQxWydyZSddIC0gYixcbiAgICAgICAgICAgICAgdDFbJ2ltJ10gKyBhKVsnbG9nJ10oKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHQyWydpbSddLCAtdDJbJ3JlJ10pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggYXJjdXMgY29zaW51c1xuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2Fjb3MnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYWNvcyhjKSA9IGkgKiBsb2coYyAtIGkgKiBzcXJ0KDEgLSBjXjIpKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIHZhciB0MSA9IG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBiICogYiAtIGEgKiBhICsgMSxcbiAgICAgICAgICAgICAgLTIgKiBhICogYilbJ3NxcnQnXSgpO1xuXG4gICAgICB2YXIgdDIgPSBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgdDFbJ3JlJ10gLSBiLFxuICAgICAgICAgICAgICB0MVsnaW0nXSArIGEpWydsb2cnXSgpO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoTWF0aC5QSSAvIDIgLSB0MlsnaW0nXSwgdDJbJ3JlJ10pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggYXJjdXMgdGFuZ2VudFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2F0YW4nOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYXRhbihjKSA9IGkgLyAyIGxvZygoaSArIHgpIC8gKGkgLSB4KSlcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuXG4gICAgICBpZiAoYSA9PT0gMCkge1xuXG4gICAgICAgIGlmIChiID09PSAxKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KDAsIEluZmluaXR5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChiID09PSAtMSkge1xuICAgICAgICAgIHJldHVybiBuZXcgQ29tcGxleCgwLCAtSW5maW5pdHkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciBkID0gYSAqIGEgKyAoMS4wIC0gYikgKiAoMS4wIC0gYik7XG5cbiAgICAgIHZhciB0MSA9IG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAoMSAtIGIgKiBiIC0gYSAqIGEpIC8gZCxcbiAgICAgICAgICAgICAgLTIgKiBhIC8gZCkubG9nKCk7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCgtMC41ICogdDFbJ2ltJ10sIDAuNSAqIHQxWydyZSddKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFyY3VzIGNvdGFuZ2VudFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2Fjb3QnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYWNvdChjKSA9IGkgLyAyIGxvZygoYyAtIGkpIC8gKGMgKyBpKSlcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuXG4gICAgICBpZiAoYiA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoTWF0aC5hdGFuMigxLCBhKSwgMCk7XG4gICAgICB9XG5cbiAgICAgIHZhciBkID0gYSAqIGEgKyBiICogYjtcbiAgICAgIHJldHVybiAoZCAhPT0gMClcbiAgICAgICAgICAgICAgPyBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICBhIC8gZCxcbiAgICAgICAgICAgICAgICAgICAgICAtYiAvIGQpLmF0YW4oKVxuICAgICAgICAgICAgICA6IG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAgICAgICAgIChhICE9PSAwKSA/IGEgLyAwIDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAoYiAhPT0gMCkgPyAtYiAvIDAgOiAwKS5hdGFuKCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBhcmN1cyBzZWNhbnRcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdhc2VjJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIGFzZWMoYykgPSAtaSAqIGxvZygxIC8gYyArIHNxcnQoMSAtIGkgLyBjXjIpKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIGlmIChhID09PSAwICYmIGIgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KDAsIEluZmluaXR5KTtcbiAgICAgIH1cblxuICAgICAgdmFyIGQgPSBhICogYSArIGIgKiBiO1xuICAgICAgcmV0dXJuIChkICE9PSAwKVxuICAgICAgICAgICAgICA/IG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAgICAgICAgIGEgLyBkLFxuICAgICAgICAgICAgICAgICAgICAgIC1iIC8gZCkuYWNvcygpXG4gICAgICAgICAgICAgIDogbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKGEgIT09IDApID8gYSAvIDAgOiAwLFxuICAgICAgICAgICAgICAgICAgICAgIChiICE9PSAwKSA/IC1iIC8gMCA6IDApLmFjb3MoKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFyY3VzIGNvc2VjYW5zXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYWNzYyc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBhY3NjKGMpID0gLWkgKiBsb2coaSAvIGMgKyBzcXJ0KDEgLSAxIC8gY14yKSlcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuXG4gICAgICBpZiAoYSA9PT0gMCAmJiBiID09PSAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleChNYXRoLlBJIC8gMiwgSW5maW5pdHkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZCA9IGEgKiBhICsgYiAqIGI7XG4gICAgICByZXR1cm4gKGQgIT09IDApXG4gICAgICAgICAgICAgID8gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgICAgICAgYSAvIGQsXG4gICAgICAgICAgICAgICAgICAgICAgLWIgLyBkKS5hc2luKClcbiAgICAgICAgICAgICAgOiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgICAgICAgICAoYSAhPT0gMCkgPyBhIC8gMCA6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgKGIgIT09IDApID8gLWIgLyAwIDogMCkuYXNpbigpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggc2luaFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ3NpbmgnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gc2luaChjKSA9IChlXmMgLSBlXi1jKSAvIDJcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIHNpbmgoYSkgKiBNYXRoLmNvcyhiKSxcbiAgICAgICAgICAgICAgY29zaChhKSAqIE1hdGguc2luKGIpKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGNvc2hcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdjb3NoJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIGNvc2goYykgPSAoZV5jICsgZV4tYykgLyAyXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBjb3NoKGEpICogTWF0aC5jb3MoYiksXG4gICAgICAgICAgICAgIHNpbmgoYSkgKiBNYXRoLnNpbihiKSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCB0YW5oXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAndGFuaCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyB0YW5oKGMpID0gKGVeYyAtIGVeLWMpIC8gKGVeYyArIGVeLWMpXG5cbiAgICAgIHZhciBhID0gMiAqIHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IDIgKiB0aGlzWydpbSddO1xuICAgICAgdmFyIGQgPSBjb3NoKGEpICsgTWF0aC5jb3MoYik7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgc2luaChhKSAvIGQsXG4gICAgICAgICAgICAgIE1hdGguc2luKGIpIC8gZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBjb3RoXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnY290aCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBjb3RoKGMpID0gKGVeYyArIGVeLWMpIC8gKGVeYyAtIGVeLWMpXG5cbiAgICAgIHZhciBhID0gMiAqIHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IDIgKiB0aGlzWydpbSddO1xuICAgICAgdmFyIGQgPSBjb3NoKGEpIC0gTWF0aC5jb3MoYik7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgc2luaChhKSAvIGQsXG4gICAgICAgICAgICAgIC1NYXRoLnNpbihiKSAvIGQpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggY290aFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2NzY2gnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gY3NjaChjKSA9IDIgLyAoZV5jIC0gZV4tYylcblxuICAgICAgdmFyIGEgPSB0aGlzWydyZSddO1xuICAgICAgdmFyIGIgPSB0aGlzWydpbSddO1xuICAgICAgdmFyIGQgPSBNYXRoLmNvcygyICogYikgLSBjb3NoKDIgKiBhKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAtMiAqIHNpbmgoYSkgKiBNYXRoLmNvcyhiKSAvIGQsXG4gICAgICAgICAgICAgIDIgKiBjb3NoKGEpICogTWF0aC5zaW4oYikgLyBkKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IHNlY2hcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdzZWNoJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIHNlY2goYykgPSAyIC8gKGVeYyArIGVeLWMpXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcbiAgICAgIHZhciBkID0gTWF0aC5jb3MoMiAqIGIpICsgY29zaCgyICogYSk7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleChcbiAgICAgICAgICAgICAgMiAqIGNvc2goYSkgKiBNYXRoLmNvcyhiKSAvIGQsXG4gICAgICAgICAgICAgIC0yICogc2luaChhKSAqIE1hdGguc2luKGIpIC8gZCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBhc2luaFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2FzaW5oJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIGFzaW5oKGMpID0gbG9nKGMgKyBzcXJ0KGNeMiArIDEpKVxuXG4gICAgICB2YXIgdG1wID0gdGhpc1snaW0nXTtcbiAgICAgIHRoaXNbJ2ltJ10gPSAtdGhpc1sncmUnXTtcbiAgICAgIHRoaXNbJ3JlJ10gPSB0bXA7XG4gICAgICB2YXIgcmVzID0gdGhpc1snYXNpbiddKCk7XG5cbiAgICAgIHRoaXNbJ3JlJ10gPSAtdGhpc1snaW0nXTtcbiAgICAgIHRoaXNbJ2ltJ10gPSB0bXA7XG4gICAgICB0bXAgPSByZXNbJ3JlJ107XG5cbiAgICAgIHJlc1sncmUnXSA9IC1yZXNbJ2ltJ107XG4gICAgICByZXNbJ2ltJ10gPSB0bXA7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIGNvbXBsZXggYXNpbmhcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdhY29zaCc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICAvLyBhY29zaChjKSA9IGxvZyhjICsgc3FydChjXjIgLSAxKSlcblxuICAgICAgdmFyIHJlcyA9IHRoaXNbJ2Fjb3MnXSgpO1xuICAgICAgaWYgKHJlc1snaW0nXSA8PSAwKSB7XG4gICAgICAgIHZhciB0bXAgPSByZXNbJ3JlJ107XG4gICAgICAgIHJlc1sncmUnXSA9IC1yZXNbJ2ltJ107XG4gICAgICAgIHJlc1snaW0nXSA9IHRtcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciB0bXAgPSByZXNbJ2ltJ107XG4gICAgICAgIHJlc1snaW0nXSA9IC1yZXNbJ3JlJ107XG4gICAgICAgIHJlc1sncmUnXSA9IHRtcDtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXM7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBhdGFuaFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2F0YW5oJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIGF0YW5oKGMpID0gbG9nKCgxK2MpIC8gKDEtYykpIC8gMlxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIHZhciBub0lNID0gYSA+IDEgJiYgYiA9PT0gMDtcbiAgICAgIHZhciBvbmVNaW51cyA9IDEgLSBhO1xuICAgICAgdmFyIG9uZVBsdXMgPSAxICsgYTtcbiAgICAgIHZhciBkID0gb25lTWludXMgKiBvbmVNaW51cyArIGIgKiBiO1xuXG4gICAgICB2YXIgeCA9IChkICE9PSAwKVxuICAgICAgICAgICAgICA/IG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAgICAgICAgIChvbmVQbHVzICogb25lTWludXMgLSBiICogYikgLyBkLFxuICAgICAgICAgICAgICAgICAgICAgIChiICogb25lTWludXMgKyBvbmVQbHVzICogYikgLyBkKVxuICAgICAgICAgICAgICA6IG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAgICAgICAgIChhICE9PSAtMSkgPyAoYSAvIDApIDogMCxcbiAgICAgICAgICAgICAgICAgICAgICAoYiAhPT0gMCkgPyAoYiAvIDApIDogMCk7XG5cbiAgICAgIHZhciB0ZW1wID0geFsncmUnXTtcbiAgICAgIHhbJ3JlJ10gPSBsb2dIeXBvdCh4WydyZSddLCB4WydpbSddKSAvIDI7XG4gICAgICB4WydpbSddID0gTWF0aC5hdGFuMih4WydpbSddLCB0ZW1wKSAvIDI7XG4gICAgICBpZiAobm9JTSkge1xuICAgICAgICB4WydpbSddID0gLXhbJ2ltJ107XG4gICAgICB9XG4gICAgICByZXR1cm4geDtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlIHRoZSBjb21wbGV4IGFjb3RoXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnYWNvdGgnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gYWNvdGgoYykgPSBsb2coKGMrMSkgLyAoYy0xKSkgLyAyXG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcblxuICAgICAgaWYgKGEgPT09IDAgJiYgYiA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoMCwgTWF0aC5QSSAvIDIpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZCA9IGEgKiBhICsgYiAqIGI7XG4gICAgICByZXR1cm4gKGQgIT09IDApXG4gICAgICAgICAgICAgID8gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgICAgICAgYSAvIGQsXG4gICAgICAgICAgICAgICAgICAgICAgLWIgLyBkKS5hdGFuaCgpXG4gICAgICAgICAgICAgIDogbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKGEgIT09IDApID8gYSAvIDAgOiAwLFxuICAgICAgICAgICAgICAgICAgICAgIChiICE9PSAwKSA/IC1iIC8gMCA6IDApLmF0YW5oKCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBhY3NjaFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2Fjc2NoJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIGFjc2NoKGMpID0gbG9nKCgxK3NxcnQoMStjXjIpKS9jKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIGlmIChiID09PSAwKSB7XG5cbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICAgIChhICE9PSAwKVxuICAgICAgICAgICAgICAgID8gTWF0aC5sb2coYSArIE1hdGguc3FydChhICogYSArIDEpKVxuICAgICAgICAgICAgICAgIDogSW5maW5pdHksIDApO1xuICAgICAgfVxuXG4gICAgICB2YXIgZCA9IGEgKiBhICsgYiAqIGI7XG4gICAgICByZXR1cm4gKGQgIT09IDApXG4gICAgICAgICAgICAgID8gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgICAgICAgYSAvIGQsXG4gICAgICAgICAgICAgICAgICAgICAgLWIgLyBkKS5hc2luaCgpXG4gICAgICAgICAgICAgIDogbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKGEgIT09IDApID8gYSAvIDAgOiAwLFxuICAgICAgICAgICAgICAgICAgICAgIChiICE9PSAwKSA/IC1iIC8gMCA6IDApLmFzaW5oKCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBhc2VjaFxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2FzZWNoJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIC8vIGFzZWNoKGMpID0gbG9nKCgxK3NxcnQoMS1jXjIpKS9jKVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIGlmICh0aGlzWydpc1plcm8nXSgpKSB7XG4gICAgICAgIHJldHVybiBDb21wbGV4WydJTkZJTklUWSddO1xuICAgICAgfVxuXG4gICAgICB2YXIgZCA9IGEgKiBhICsgYiAqIGI7XG4gICAgICByZXR1cm4gKGQgIT09IDApXG4gICAgICAgICAgICAgID8gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgICAgICAgYSAvIGQsXG4gICAgICAgICAgICAgICAgICAgICAgLWIgLyBkKS5hY29zaCgpXG4gICAgICAgICAgICAgIDogbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgICAgICAgICAgKGEgIT09IDApID8gYSAvIDAgOiAwLFxuICAgICAgICAgICAgICAgICAgICAgIChiICE9PSAwKSA/IC1iIC8gMCA6IDApLmFjb3NoKCk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUgY29tcGxleCBpbnZlcnNlIDEvelxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2ludmVyc2UnOiBmdW5jdGlvbigpIHtcblxuICAgICAgLy8gMSAvIDAgPSBJbmZpbml0eSBhbmQgMSAvIEluZmluaXR5ID0gMFxuICAgICAgaWYgKHRoaXNbJ2lzWmVybyddKCkpIHtcbiAgICAgICAgcmV0dXJuIENvbXBsZXhbJ0lORklOSVRZJ107XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzWydpc0luZmluaXRlJ10oKSkge1xuICAgICAgICByZXR1cm4gQ29tcGxleFsnWkVSTyddO1xuICAgICAgfVxuXG4gICAgICB2YXIgYSA9IHRoaXNbJ3JlJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2ltJ107XG5cbiAgICAgIHZhciBkID0gYSAqIGEgKyBiICogYjtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KGEgLyBkLCAtYiAvIGQpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBjb21wbGV4IGNvbmp1Z2F0ZVxuICAgICAqXG4gICAgICogQHJldHVybnMge0NvbXBsZXh9XG4gICAgICovXG4gICAgJ2Nvbmp1Z2F0ZSc6IGZ1bmN0aW9uKCkge1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgodGhpc1sncmUnXSwgLXRoaXNbJ2ltJ10pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIHRoZSBuZWdhdGVkIGNvbXBsZXggbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnbmVnJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCgtdGhpc1sncmUnXSwgLXRoaXNbJ2ltJ10pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDZWlscyB0aGUgYWN0dWFsIGNvbXBsZXggbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnY2VpbCc6IGZ1bmN0aW9uKHBsYWNlcykge1xuXG4gICAgICBwbGFjZXMgPSBNYXRoLnBvdygxMCwgcGxhY2VzIHx8IDApO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIE1hdGguY2VpbCh0aGlzWydyZSddICogcGxhY2VzKSAvIHBsYWNlcyxcbiAgICAgICAgICAgICAgTWF0aC5jZWlsKHRoaXNbJ2ltJ10gKiBwbGFjZXMpIC8gcGxhY2VzKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRmxvb3JzIHRoZSBhY3R1YWwgY29tcGxleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgICAqL1xuICAgICdmbG9vcic6IGZ1bmN0aW9uKHBsYWNlcykge1xuXG4gICAgICBwbGFjZXMgPSBNYXRoLnBvdygxMCwgcGxhY2VzIHx8IDApO1xuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IodGhpc1sncmUnXSAqIHBsYWNlcykgLyBwbGFjZXMsXG4gICAgICAgICAgICAgIE1hdGguZmxvb3IodGhpc1snaW0nXSAqIHBsYWNlcykgLyBwbGFjZXMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDZWlscyB0aGUgYWN0dWFsIGNvbXBsZXggbnVtYmVyXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAncm91bmQnOiBmdW5jdGlvbihwbGFjZXMpIHtcblxuICAgICAgcGxhY2VzID0gTWF0aC5wb3coMTAsIHBsYWNlcyB8fCAwKTtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KFxuICAgICAgICAgICAgICBNYXRoLnJvdW5kKHRoaXNbJ3JlJ10gKiBwbGFjZXMpIC8gcGxhY2VzLFxuICAgICAgICAgICAgICBNYXRoLnJvdW5kKHRoaXNbJ2ltJ10gKiBwbGFjZXMpIC8gcGxhY2VzKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ29tcGFyZXMgdHdvIGNvbXBsZXggbnVtYmVyc1xuICAgICAqXG4gICAgICogKipOb3RlOioqIG5ldyBDb21wbGV4KEluZmluaXR5KS5lcXVhbHMoSW5maW5pdHkpID09PSBmYWxzZVxuICAgICAqXG4gICAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAgICovXG4gICAgJ2VxdWFscyc6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgdmFyIHogPSBuZXcgQ29tcGxleChhLCBiKTtcblxuICAgICAgcmV0dXJuIE1hdGguYWJzKHpbJ3JlJ10gLSB0aGlzWydyZSddKSA8PSBDb21wbGV4WydFUFNJTE9OJ10gJiZcbiAgICAgICAgICAgICAgTWF0aC5hYnMoelsnaW0nXSAtIHRoaXNbJ2ltJ10pIDw9IENvbXBsZXhbJ0VQU0lMT04nXTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2xvbmVzIHRoZSBhY3R1YWwgb2JqZWN0XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICAgKi9cbiAgICAnY2xvbmUnOiBmdW5jdGlvbigpIHtcblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHRoaXNbJ3JlJ10sIHRoaXNbJ2ltJ10pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBHZXRzIGEgc3RyaW5nIG9mIHRoZSBhY3R1YWwgY29tcGxleCBudW1iZXJcbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICovXG4gICAgJ3RvU3RyaW5nJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHZhciBhID0gdGhpc1sncmUnXTtcbiAgICAgIHZhciBiID0gdGhpc1snaW0nXTtcbiAgICAgIHZhciByZXQgPSAnJztcblxuICAgICAgaWYgKHRoaXNbJ2lzTmFOJ10oKSkge1xuICAgICAgICByZXR1cm4gJ05hTic7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzWydpc1plcm8nXSgpKSB7XG4gICAgICAgIHJldHVybiAnMCc7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzWydpc0luZmluaXRlJ10oKSkge1xuICAgICAgICByZXR1cm4gJ0luZmluaXR5JztcbiAgICAgIH1cblxuICAgICAgaWYgKGEgIT09IDApIHtcbiAgICAgICAgcmV0ICs9IGE7XG4gICAgICB9XG5cbiAgICAgIGlmIChiICE9PSAwKSB7XG5cbiAgICAgICAgaWYgKGEgIT09IDApIHtcbiAgICAgICAgICByZXQgKz0gYiA8IDAgPyAnIC0gJyA6ICcgKyAnO1xuICAgICAgICB9IGVsc2UgaWYgKGIgPCAwKSB7XG4gICAgICAgICAgcmV0ICs9ICctJztcbiAgICAgICAgfVxuXG4gICAgICAgIGIgPSBNYXRoLmFicyhiKTtcblxuICAgICAgICBpZiAoMSAhPT0gYikge1xuICAgICAgICAgIHJldCArPSBiO1xuICAgICAgICB9XG4gICAgICAgIHJldCArPSAnaSc7XG4gICAgICB9XG5cbiAgICAgIGlmICghcmV0KVxuICAgICAgICByZXR1cm4gJzAnO1xuXG4gICAgICByZXR1cm4gcmV0O1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBhY3R1YWwgbnVtYmVyIGFzIGEgdmVjdG9yXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAgICovXG4gICAgJ3RvVmVjdG9yJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHJldHVybiBbdGhpc1sncmUnXSwgdGhpc1snaW0nXV07XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGFjdHVhbCByZWFsIHZhbHVlIG9mIHRoZSBjdXJyZW50IG9iamVjdFxuICAgICAqXG4gICAgICogQHJldHVybnMge251bWJlcnxudWxsfVxuICAgICAqL1xuICAgICd2YWx1ZU9mJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIGlmICh0aGlzWydpbSddID09PSAwKSB7XG4gICAgICAgIHJldHVybiB0aGlzWydyZSddO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hldGhlciBhIGNvbXBsZXggbnVtYmVyIGlzIG5vdCBvbiB0aGUgUmllbWFubiBzcGhlcmUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICAnaXNOYU4nOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBpc05hTih0aGlzWydyZSddKSB8fCBpc05hTih0aGlzWydpbSddKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIG9yIG5vdCBhIGNvbXBsZXggbnVtYmVyIGlzIGF0IHRoZSB6ZXJvIHBvbGUgb2YgdGhlXG4gICAgICogUmllbWFubiBzcGhlcmUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICAnaXNaZXJvJzogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAgICAgICAodGhpc1sncmUnXSA9PT0gMCB8fCB0aGlzWydyZSddID09PSAtMCkgJiZcbiAgICAgICAgICAgICAgKHRoaXNbJ2ltJ10gPT09IDAgfHwgdGhpc1snaW0nXSA9PT0gLTApXG4gICAgICAgICAgICAgICk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERldGVybWluZXMgd2hldGhlciBhIGNvbXBsZXggbnVtYmVyIGlzIG5vdCBhdCB0aGUgaW5maW5pdHkgcG9sZSBvZiB0aGVcbiAgICAgKiBSaWVtYW5uIHNwaGVyZS5cbiAgICAgKlxuICAgICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgICAqL1xuICAgICdpc0Zpbml0ZSc6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGlzRmluaXRlKHRoaXNbJ3JlJ10pICYmIGlzRmluaXRlKHRoaXNbJ2ltJ10pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IGEgY29tcGxleCBudW1iZXIgaXMgYXQgdGhlIGluZmluaXR5IHBvbGUgb2YgdGhlXG4gICAgICogUmllbWFubiBzcGhlcmUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICAnaXNJbmZpbml0ZSc6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuICEodGhpc1snaXNOYU4nXSgpIHx8IHRoaXNbJ2lzRmluaXRlJ10oKSk7XG4gICAgfVxuICB9O1xuXG4gIENvbXBsZXhbJ1pFUk8nXSA9IG5ldyBDb21wbGV4KDAsIDApO1xuICBDb21wbGV4WydPTkUnXSA9IG5ldyBDb21wbGV4KDEsIDApO1xuICBDb21wbGV4WydJJ10gPSBuZXcgQ29tcGxleCgwLCAxKTtcbiAgQ29tcGxleFsnUEknXSA9IG5ldyBDb21wbGV4KE1hdGguUEksIDApO1xuICBDb21wbGV4WydFJ10gPSBuZXcgQ29tcGxleChNYXRoLkUsIDApO1xuICBDb21wbGV4WydJTkZJTklUWSddID0gbmV3IENvbXBsZXgoSW5maW5pdHksIEluZmluaXR5KTtcbiAgQ29tcGxleFsnTkFOJ10gPSBuZXcgQ29tcGxleChOYU4sIE5hTik7XG4gIENvbXBsZXhbJ0VQU0lMT04nXSA9IDFlLTE2O1xuXG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZVsnYW1kJ10pIHtcbiAgICBkZWZpbmUoW10sIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIENvbXBsZXg7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7J3ZhbHVlJzogdHJ1ZX0pO1xuICAgIENvbXBsZXhbJ2RlZmF1bHQnXSA9IENvbXBsZXg7XG4gICAgQ29tcGxleFsnQ29tcGxleCddID0gQ29tcGxleDtcbiAgICBtb2R1bGVbJ2V4cG9ydHMnXSA9IENvbXBsZXg7XG4gIH0gZWxzZSB7XG4gICAgcm9vdFsnQ29tcGxleCddID0gQ29tcGxleDtcbiAgfVxuXG59KSh0aGlzKTtcbiIsIjsoZnVuY3Rpb24gKGdsb2JhbFNjb3BlKSB7XHJcbiAgJ3VzZSBzdHJpY3QnO1xyXG5cclxuXHJcbiAgLypcclxuICAgKiAgZGVjaW1hbC5qcyB2MTAuMi4wXHJcbiAgICogIEFuIGFyYml0cmFyeS1wcmVjaXNpb24gRGVjaW1hbCB0eXBlIGZvciBKYXZhU2NyaXB0LlxyXG4gICAqICBodHRwczovL2dpdGh1Yi5jb20vTWlrZU1jbC9kZWNpbWFsLmpzXHJcbiAgICogIENvcHlyaWdodCAoYykgMjAxOSBNaWNoYWVsIE1jbGF1Z2hsaW4gPE04Y2g4OGxAZ21haWwuY29tPlxyXG4gICAqICBNSVQgTGljZW5jZVxyXG4gICAqL1xyXG5cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEVESVRBQkxFIERFRkFVTFRTICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLy9cclxuXHJcblxyXG4gICAgLy8gVGhlIG1heGltdW0gZXhwb25lbnQgbWFnbml0dWRlLlxyXG4gICAgLy8gVGhlIGxpbWl0IG9uIHRoZSB2YWx1ZSBvZiBgdG9FeHBOZWdgLCBgdG9FeHBQb3NgLCBgbWluRWAgYW5kIGBtYXhFYC5cclxuICB2YXIgRVhQX0xJTUlUID0gOWUxNSwgICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byA5ZTE1XHJcblxyXG4gICAgLy8gVGhlIGxpbWl0IG9uIHRoZSB2YWx1ZSBvZiBgcHJlY2lzaW9uYCwgYW5kIG9uIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3QgYXJndW1lbnQgdG9cclxuICAgIC8vIGB0b0RlY2ltYWxQbGFjZXNgLCBgdG9FeHBvbmVudGlhbGAsIGB0b0ZpeGVkYCwgYHRvUHJlY2lzaW9uYCBhbmQgYHRvU2lnbmlmaWNhbnREaWdpdHNgLlxyXG4gICAgTUFYX0RJR0lUUyA9IDFlOSwgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIDFlOVxyXG5cclxuICAgIC8vIEJhc2UgY29udmVyc2lvbiBhbHBoYWJldC5cclxuICAgIE5VTUVSQUxTID0gJzAxMjM0NTY3ODlhYmNkZWYnLFxyXG5cclxuICAgIC8vIFRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiAxMCAoMTAyNSBkaWdpdHMpLlxyXG4gICAgTE4xMCA9ICcyLjMwMjU4NTA5Mjk5NDA0NTY4NDAxNzk5MTQ1NDY4NDM2NDIwNzYwMTEwMTQ4ODYyODc3Mjk3NjAzMzMyNzkwMDk2NzU3MjYwOTY3NzM1MjQ4MDIzNTk5NzIwNTA4OTU5ODI5ODM0MTk2Nzc4NDA0MjI4NjI0ODYzMzQwOTUyNTQ2NTA4MjgwNjc1NjY2NjI4NzM2OTA5ODc4MTY4OTQ4MjkwNzIwODMyNTU1NDY4MDg0Mzc5OTg5NDgyNjIzMzE5ODUyODM5MzUwNTMwODk2NTM3NzczMjYyODg0NjE2MzM2NjIyMjI4NzY5ODIxOTg4Njc0NjU0MzY2NzQ3NDQwNDI0MzI3NDM2NTE1NTA0ODkzNDMxNDkzOTM5MTQ3OTYxOTQwNDQwMDIyMjEwNTEwMTcxNDE3NDgwMDM2ODgwODQwMTI2NDcwODA2ODU1Njc3NDMyMTYyMjgzNTUyMjAxMTQ4MDQ2NjM3MTU2NTkxMjEzNzM0NTA3NDc4NTY5NDc2ODM0NjM2MTY3OTIxMDE4MDY0NDUwNzA2NDgwMDAyNzc1MDI2ODQ5MTY3NDY1NTA1ODY4NTY5MzU2NzM0MjA2NzA1ODExMzY0MjkyMjQ1NTQ0MDU3NTg5MjU3MjQyMDgyNDEzMTQ2OTU2ODkwMTY3NTg5NDAyNTY3NzYzMTEzNTY5MTkyOTIwMzMzNzY1ODcxNDE2NjAyMzAxMDU3MDMwODk2MzQ1NzIwNzU0NDAzNzA4NDc0Njk5NDAxNjgyNjkyODI4MDg0ODExODQyODkzMTQ4NDg1MjQ5NDg2NDQ4NzE5Mjc4MDk2NzYyNzEyNzU3NzUzOTcwMjc2Njg2MDU5NTI0OTY3MTY2NzQxODM0ODU3MDQ0MjI1MDcxOTc5NjUwMDQ3MTQ5NTEwNTA0OTIyMTQ3NzY1Njc2MzY5Mzg2NjI5NzY5Nzk1MjIxMTA3MTgyNjQ1NDk3MzQ3NzI2NjI0MjU3MDk0MjkzMjI1ODI3OTg1MDI1ODU1MDk3ODUyNjUzODMyMDc2MDY3MjYzMTcxNjQzMDk1MDU5OTUwODc4MDc1MjM3MTAzMzMxMDExOTc4NTc1NDczMzE1NDE0MjE4MDg0Mjc1NDM4NjM1OTE3NzgxMTcwNTQzMDk4Mjc0ODIzODUwNDU2NDgwMTkwOTU2MTAyOTkyOTE4MjQzMTgyMzc1MjUzNTc3MDk3NTA1Mzk1NjUxODc2OTc1MTAzNzQ5NzA4ODg2OTIxODAyMDUxODkzMzk1MDcyMzg1MzkyMDUxNDQ2MzQxOTcyNjUyODcyODY5NjUxMTA4NjI1NzE0OTIxOTg4NDk5Nzg3NDg4NzM3NzEzNDU2ODYyMDkxNjcwNTgnLFxyXG5cclxuICAgIC8vIFBpICgxMDI1IGRpZ2l0cykuXHJcbiAgICBQSSA9ICczLjE0MTU5MjY1MzU4OTc5MzIzODQ2MjY0MzM4MzI3OTUwMjg4NDE5NzE2OTM5OTM3NTEwNTgyMDk3NDk0NDU5MjMwNzgxNjQwNjI4NjIwODk5ODYyODAzNDgyNTM0MjExNzA2Nzk4MjE0ODA4NjUxMzI4MjMwNjY0NzA5Mzg0NDYwOTU1MDU4MjIzMTcyNTM1OTQwODEyODQ4MTExNzQ1MDI4NDEwMjcwMTkzODUyMTEwNTU1OTY0NDYyMjk0ODk1NDkzMDM4MTk2NDQyODgxMDk3NTY2NTkzMzQ0NjEyODQ3NTY0ODIzMzc4Njc4MzE2NTI3MTIwMTkwOTE0NTY0ODU2NjkyMzQ2MDM0ODYxMDQ1NDMyNjY0ODIxMzM5MzYwNzI2MDI0OTE0MTI3MzcyNDU4NzAwNjYwNjMxNTU4ODE3NDg4MTUyMDkyMDk2MjgyOTI1NDA5MTcxNTM2NDM2Nzg5MjU5MDM2MDAxMTMzMDUzMDU0ODgyMDQ2NjUyMTM4NDE0Njk1MTk0MTUxMTYwOTQzMzA1NzI3MDM2NTc1OTU5MTk1MzA5MjE4NjExNzM4MTkzMjYxMTc5MzEwNTExODU0ODA3NDQ2MjM3OTk2Mjc0OTU2NzM1MTg4NTc1MjcyNDg5MTIyNzkzODE4MzAxMTk0OTEyOTgzMzY3MzM2MjQ0MDY1NjY0MzA4NjAyMTM5NDk0NjM5NTIyNDczNzE5MDcwMjE3OTg2MDk0MzcwMjc3MDUzOTIxNzE3NjI5MzE3Njc1MjM4NDY3NDgxODQ2NzY2OTQwNTEzMjAwMDU2ODEyNzE0NTI2MzU2MDgyNzc4NTc3MTM0Mjc1Nzc4OTYwOTE3MzYzNzE3ODcyMTQ2ODQ0MDkwMTIyNDk1MzQzMDE0NjU0OTU4NTM3MTA1MDc5MjI3OTY4OTI1ODkyMzU0MjAxOTk1NjExMjEyOTAyMTk2MDg2NDAzNDQxODE1OTgxMzYyOTc3NDc3MTMwOTk2MDUxODcwNzIxMTM0OTk5OTk5ODM3Mjk3ODA0OTk1MTA1OTczMTczMjgxNjA5NjMxODU5NTAyNDQ1OTQ1NTM0NjkwODMwMjY0MjUyMjMwODI1MzM0NDY4NTAzNTI2MTkzMTE4ODE3MTAxMDAwMzEzNzgzODc1Mjg4NjU4NzUzMzIwODM4MTQyMDYxNzE3NzY2OTE0NzMwMzU5ODI1MzQ5MDQyODc1NTQ2ODczMTE1OTU2Mjg2Mzg4MjM1Mzc4NzU5Mzc1MTk1Nzc4MTg1Nzc4MDUzMjE3MTIyNjgwNjYxMzAwMTkyNzg3NjYxMTE5NTkwOTIxNjQyMDE5ODkzODA5NTI1NzIwMTA2NTQ4NTg2MzI3ODknLFxyXG5cclxuXHJcbiAgICAvLyBUaGUgaW5pdGlhbCBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgb2YgdGhlIERlY2ltYWwgY29uc3RydWN0b3IuXHJcbiAgICBERUZBVUxUUyA9IHtcclxuXHJcbiAgICAgIC8vIFRoZXNlIHZhbHVlcyBtdXN0IGJlIGludGVnZXJzIHdpdGhpbiB0aGUgc3RhdGVkIHJhbmdlcyAoaW5jbHVzaXZlKS5cclxuICAgICAgLy8gTW9zdCBvZiB0aGVzZSB2YWx1ZXMgY2FuIGJlIGNoYW5nZWQgYXQgcnVuLXRpbWUgdXNpbmcgdGhlIGBEZWNpbWFsLmNvbmZpZ2AgbWV0aG9kLlxyXG5cclxuICAgICAgLy8gVGhlIG1heGltdW0gbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBvZiB0aGUgcmVzdWx0IG9mIGEgY2FsY3VsYXRpb24gb3IgYmFzZSBjb252ZXJzaW9uLlxyXG4gICAgICAvLyBFLmcuIGBEZWNpbWFsLmNvbmZpZyh7IHByZWNpc2lvbjogMjAgfSk7YFxyXG4gICAgICBwcmVjaXNpb246IDIwLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyAxIHRvIE1BWF9ESUdJVFNcclxuXHJcbiAgICAgIC8vIFRoZSByb3VuZGluZyBtb2RlIHVzZWQgd2hlbiByb3VuZGluZyB0byBgcHJlY2lzaW9uYC5cclxuICAgICAgLy9cclxuICAgICAgLy8gUk9VTkRfVVAgICAgICAgICAwIEF3YXkgZnJvbSB6ZXJvLlxyXG4gICAgICAvLyBST1VORF9ET1dOICAgICAgIDEgVG93YXJkcyB6ZXJvLlxyXG4gICAgICAvLyBST1VORF9DRUlMICAgICAgIDIgVG93YXJkcyArSW5maW5pdHkuXHJcbiAgICAgIC8vIFJPVU5EX0ZMT09SICAgICAgMyBUb3dhcmRzIC1JbmZpbml0eS5cclxuICAgICAgLy8gUk9VTkRfSEFMRl9VUCAgICA0IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCB1cC5cclxuICAgICAgLy8gUk9VTkRfSEFMRl9ET1dOICA1IFRvd2FyZHMgbmVhcmVzdCBuZWlnaGJvdXIuIElmIGVxdWlkaXN0YW50LCBkb3duLlxyXG4gICAgICAvLyBST1VORF9IQUxGX0VWRU4gIDYgVG93YXJkcyBuZWFyZXN0IG5laWdoYm91ci4gSWYgZXF1aWRpc3RhbnQsIHRvd2FyZHMgZXZlbiBuZWlnaGJvdXIuXHJcbiAgICAgIC8vIFJPVU5EX0hBTEZfQ0VJTCAgNyBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgdG93YXJkcyArSW5maW5pdHkuXHJcbiAgICAgIC8vIFJPVU5EX0hBTEZfRkxPT1IgOCBUb3dhcmRzIG5lYXJlc3QgbmVpZ2hib3VyLiBJZiBlcXVpZGlzdGFudCwgdG93YXJkcyAtSW5maW5pdHkuXHJcbiAgICAgIC8vXHJcbiAgICAgIC8vIEUuZy5cclxuICAgICAgLy8gYERlY2ltYWwucm91bmRpbmcgPSA0O2BcclxuICAgICAgLy8gYERlY2ltYWwucm91bmRpbmcgPSBEZWNpbWFsLlJPVU5EX0hBTEZfVVA7YFxyXG4gICAgICByb3VuZGluZzogNCwgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIDhcclxuXHJcbiAgICAgIC8vIFRoZSBtb2R1bG8gbW9kZSB1c2VkIHdoZW4gY2FsY3VsYXRpbmcgdGhlIG1vZHVsdXM6IGEgbW9kIG4uXHJcbiAgICAgIC8vIFRoZSBxdW90aWVudCAocSA9IGEgLyBuKSBpcyBjYWxjdWxhdGVkIGFjY29yZGluZyB0byB0aGUgY29ycmVzcG9uZGluZyByb3VuZGluZyBtb2RlLlxyXG4gICAgICAvLyBUaGUgcmVtYWluZGVyIChyKSBpcyBjYWxjdWxhdGVkIGFzOiByID0gYSAtIG4gKiBxLlxyXG4gICAgICAvL1xyXG4gICAgICAvLyBVUCAgICAgICAgIDAgVGhlIHJlbWFpbmRlciBpcyBwb3NpdGl2ZSBpZiB0aGUgZGl2aWRlbmQgaXMgbmVnYXRpdmUsIGVsc2UgaXMgbmVnYXRpdmUuXHJcbiAgICAgIC8vIERPV04gICAgICAgMSBUaGUgcmVtYWluZGVyIGhhcyB0aGUgc2FtZSBzaWduIGFzIHRoZSBkaXZpZGVuZCAoSmF2YVNjcmlwdCAlKS5cclxuICAgICAgLy8gRkxPT1IgICAgICAzIFRoZSByZW1haW5kZXIgaGFzIHRoZSBzYW1lIHNpZ24gYXMgdGhlIGRpdmlzb3IgKFB5dGhvbiAlKS5cclxuICAgICAgLy8gSEFMRl9FVkVOICA2IFRoZSBJRUVFIDc1NCByZW1haW5kZXIgZnVuY3Rpb24uXHJcbiAgICAgIC8vIEVVQ0xJRCAgICAgOSBFdWNsaWRpYW4gZGl2aXNpb24uIHEgPSBzaWduKG4pICogZmxvb3IoYSAvIGFicyhuKSkuIEFsd2F5cyBwb3NpdGl2ZS5cclxuICAgICAgLy9cclxuICAgICAgLy8gVHJ1bmNhdGVkIGRpdmlzaW9uICgxKSwgZmxvb3JlZCBkaXZpc2lvbiAoMyksIHRoZSBJRUVFIDc1NCByZW1haW5kZXIgKDYpLCBhbmQgRXVjbGlkaWFuXHJcbiAgICAgIC8vIGRpdmlzaW9uICg5KSBhcmUgY29tbW9ubHkgdXNlZCBmb3IgdGhlIG1vZHVsdXMgb3BlcmF0aW9uLiBUaGUgb3RoZXIgcm91bmRpbmcgbW9kZXMgY2FuIGFsc29cclxuICAgICAgLy8gYmUgdXNlZCwgYnV0IHRoZXkgbWF5IG5vdCBnaXZlIHVzZWZ1bCByZXN1bHRzLlxyXG4gICAgICBtb2R1bG86IDEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIDlcclxuXHJcbiAgICAgIC8vIFRoZSBleHBvbmVudCB2YWx1ZSBhdCBhbmQgYmVuZWF0aCB3aGljaCBgdG9TdHJpbmdgIHJldHVybnMgZXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICAgIC8vIEphdmFTY3JpcHQgbnVtYmVyczogLTdcclxuICAgICAgdG9FeHBOZWc6IC03LCAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gMCB0byAtRVhQX0xJTUlUXHJcblxyXG4gICAgICAvLyBUaGUgZXhwb25lbnQgdmFsdWUgYXQgYW5kIGFib3ZlIHdoaWNoIGB0b1N0cmluZ2AgcmV0dXJucyBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgICAgLy8gSmF2YVNjcmlwdCBudW1iZXJzOiAyMVxyXG4gICAgICB0b0V4cFBvczogIDIxLCAgICAgICAgICAgICAgICAgICAgICAgICAvLyAwIHRvIEVYUF9MSU1JVFxyXG5cclxuICAgICAgLy8gVGhlIG1pbmltdW0gZXhwb25lbnQgdmFsdWUsIGJlbmVhdGggd2hpY2ggdW5kZXJmbG93IHRvIHplcm8gb2NjdXJzLlxyXG4gICAgICAvLyBKYXZhU2NyaXB0IG51bWJlcnM6IC0zMjQgICg1ZS0zMjQpXHJcbiAgICAgIG1pbkU6IC1FWFBfTElNSVQsICAgICAgICAgICAgICAgICAgICAgIC8vIC0xIHRvIC1FWFBfTElNSVRcclxuXHJcbiAgICAgIC8vIFRoZSBtYXhpbXVtIGV4cG9uZW50IHZhbHVlLCBhYm92ZSB3aGljaCBvdmVyZmxvdyB0byBJbmZpbml0eSBvY2N1cnMuXHJcbiAgICAgIC8vIEphdmFTY3JpcHQgbnVtYmVyczogMzA4ICAoMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDgpXHJcbiAgICAgIG1heEU6IEVYUF9MSU1JVCwgICAgICAgICAgICAgICAgICAgICAgIC8vIDEgdG8gRVhQX0xJTUlUXHJcblxyXG4gICAgICAvLyBXaGV0aGVyIHRvIHVzZSBjcnlwdG9ncmFwaGljYWxseS1zZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uLCBpZiBhdmFpbGFibGUuXHJcbiAgICAgIGNyeXB0bzogZmFsc2UgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRydWUvZmFsc2VcclxuICAgIH0sXHJcblxyXG5cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFTkQgT0YgRURJVEFCTEUgREVGQVVMVFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAvL1xyXG5cclxuXHJcbiAgICBEZWNpbWFsLCBpbmV4YWN0LCBub0NvbmZsaWN0LCBxdWFkcmFudCxcclxuICAgIGV4dGVybmFsID0gdHJ1ZSxcclxuXHJcbiAgICBkZWNpbWFsRXJyb3IgPSAnW0RlY2ltYWxFcnJvcl0gJyxcclxuICAgIGludmFsaWRBcmd1bWVudCA9IGRlY2ltYWxFcnJvciArICdJbnZhbGlkIGFyZ3VtZW50OiAnLFxyXG4gICAgcHJlY2lzaW9uTGltaXRFeGNlZWRlZCA9IGRlY2ltYWxFcnJvciArICdQcmVjaXNpb24gbGltaXQgZXhjZWVkZWQnLFxyXG4gICAgY3J5cHRvVW5hdmFpbGFibGUgPSBkZWNpbWFsRXJyb3IgKyAnY3J5cHRvIHVuYXZhaWxhYmxlJyxcclxuXHJcbiAgICBtYXRoZmxvb3IgPSBNYXRoLmZsb29yLFxyXG4gICAgbWF0aHBvdyA9IE1hdGgucG93LFxyXG5cclxuICAgIGlzQmluYXJ5ID0gL14wYihbMDFdKyhcXC5bMDFdKik/fFxcLlswMV0rKShwWystXT9cXGQrKT8kL2ksXHJcbiAgICBpc0hleCA9IC9eMHgoWzAtOWEtZl0rKFxcLlswLTlhLWZdKik/fFxcLlswLTlhLWZdKykocFsrLV0/XFxkKyk/JC9pLFxyXG4gICAgaXNPY3RhbCA9IC9eMG8oWzAtN10rKFxcLlswLTddKik/fFxcLlswLTddKykocFsrLV0/XFxkKyk/JC9pLFxyXG4gICAgaXNEZWNpbWFsID0gL14oXFxkKyhcXC5cXGQqKT98XFwuXFxkKykoZVsrLV0/XFxkKyk/JC9pLFxyXG5cclxuICAgIEJBU0UgPSAxZTcsXHJcbiAgICBMT0dfQkFTRSA9IDcsXHJcbiAgICBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MSxcclxuXHJcbiAgICBMTjEwX1BSRUNJU0lPTiA9IExOMTAubGVuZ3RoIC0gMSxcclxuICAgIFBJX1BSRUNJU0lPTiA9IFBJLmxlbmd0aCAtIDEsXHJcblxyXG4gICAgLy8gRGVjaW1hbC5wcm90b3R5cGUgb2JqZWN0XHJcbiAgICBQID0geyBuYW1lOiAnW29iamVjdCBEZWNpbWFsXScgfTtcclxuXHJcblxyXG4gIC8vIERlY2ltYWwgcHJvdG90eXBlIG1ldGhvZHNcclxuXHJcblxyXG4gIC8qXHJcbiAgICogIGFic29sdXRlVmFsdWUgICAgICAgICAgICAgYWJzXHJcbiAgICogIGNlaWxcclxuICAgKiAgY29tcGFyZWRUbyAgICAgICAgICAgICAgICBjbXBcclxuICAgKiAgY29zaW5lICAgICAgICAgICAgICAgICAgICBjb3NcclxuICAgKiAgY3ViZVJvb3QgICAgICAgICAgICAgICAgICBjYnJ0XHJcbiAgICogIGRlY2ltYWxQbGFjZXMgICAgICAgICAgICAgZHBcclxuICAgKiAgZGl2aWRlZEJ5ICAgICAgICAgICAgICAgICBkaXZcclxuICAgKiAgZGl2aWRlZFRvSW50ZWdlckJ5ICAgICAgICBkaXZUb0ludFxyXG4gICAqICBlcXVhbHMgICAgICAgICAgICAgICAgICAgIGVxXHJcbiAgICogIGZsb29yXHJcbiAgICogIGdyZWF0ZXJUaGFuICAgICAgICAgICAgICAgZ3RcclxuICAgKiAgZ3JlYXRlclRoYW5PckVxdWFsVG8gICAgICBndGVcclxuICAgKiAgaHlwZXJib2xpY0Nvc2luZSAgICAgICAgICBjb3NoXHJcbiAgICogIGh5cGVyYm9saWNTaW5lICAgICAgICAgICAgc2luaFxyXG4gICAqICBoeXBlcmJvbGljVGFuZ2VudCAgICAgICAgIHRhbmhcclxuICAgKiAgaW52ZXJzZUNvc2luZSAgICAgICAgICAgICBhY29zXHJcbiAgICogIGludmVyc2VIeXBlcmJvbGljQ29zaW5lICAgYWNvc2hcclxuICAgKiAgaW52ZXJzZUh5cGVyYm9saWNTaW5lICAgICBhc2luaFxyXG4gICAqICBpbnZlcnNlSHlwZXJib2xpY1RhbmdlbnQgIGF0YW5oXHJcbiAgICogIGludmVyc2VTaW5lICAgICAgICAgICAgICAgYXNpblxyXG4gICAqICBpbnZlcnNlVGFuZ2VudCAgICAgICAgICAgIGF0YW5cclxuICAgKiAgaXNGaW5pdGVcclxuICAgKiAgaXNJbnRlZ2VyICAgICAgICAgICAgICAgICBpc0ludFxyXG4gICAqICBpc05hTlxyXG4gICAqICBpc05lZ2F0aXZlICAgICAgICAgICAgICAgIGlzTmVnXHJcbiAgICogIGlzUG9zaXRpdmUgICAgICAgICAgICAgICAgaXNQb3NcclxuICAgKiAgaXNaZXJvXHJcbiAgICogIGxlc3NUaGFuICAgICAgICAgICAgICAgICAgbHRcclxuICAgKiAgbGVzc1RoYW5PckVxdWFsVG8gICAgICAgICBsdGVcclxuICAgKiAgbG9nYXJpdGhtICAgICAgICAgICAgICAgICBsb2dcclxuICAgKiAgW21heGltdW1dICAgICAgICAgICAgICAgICBbbWF4XVxyXG4gICAqICBbbWluaW11bV0gICAgICAgICAgICAgICAgIFttaW5dXHJcbiAgICogIG1pbnVzICAgICAgICAgICAgICAgICAgICAgc3ViXHJcbiAgICogIG1vZHVsbyAgICAgICAgICAgICAgICAgICAgbW9kXHJcbiAgICogIG5hdHVyYWxFeHBvbmVudGlhbCAgICAgICAgZXhwXHJcbiAgICogIG5hdHVyYWxMb2dhcml0aG0gICAgICAgICAgbG5cclxuICAgKiAgbmVnYXRlZCAgICAgICAgICAgICAgICAgICBuZWdcclxuICAgKiAgcGx1cyAgICAgICAgICAgICAgICAgICAgICBhZGRcclxuICAgKiAgcHJlY2lzaW9uICAgICAgICAgICAgICAgICBzZFxyXG4gICAqICByb3VuZFxyXG4gICAqICBzaW5lICAgICAgICAgICAgICAgICAgICAgIHNpblxyXG4gICAqICBzcXVhcmVSb290ICAgICAgICAgICAgICAgIHNxcnRcclxuICAgKiAgdGFuZ2VudCAgICAgICAgICAgICAgICAgICB0YW5cclxuICAgKiAgdGltZXMgICAgICAgICAgICAgICAgICAgICBtdWxcclxuICAgKiAgdG9CaW5hcnlcclxuICAgKiAgdG9EZWNpbWFsUGxhY2VzICAgICAgICAgICB0b0RQXHJcbiAgICogIHRvRXhwb25lbnRpYWxcclxuICAgKiAgdG9GaXhlZFxyXG4gICAqICB0b0ZyYWN0aW9uXHJcbiAgICogIHRvSGV4YWRlY2ltYWwgICAgICAgICAgICAgdG9IZXhcclxuICAgKiAgdG9OZWFyZXN0XHJcbiAgICogIHRvTnVtYmVyXHJcbiAgICogIHRvT2N0YWxcclxuICAgKiAgdG9Qb3dlciAgICAgICAgICAgICAgICAgICBwb3dcclxuICAgKiAgdG9QcmVjaXNpb25cclxuICAgKiAgdG9TaWduaWZpY2FudERpZ2l0cyAgICAgICB0b1NEXHJcbiAgICogIHRvU3RyaW5nXHJcbiAgICogIHRydW5jYXRlZCAgICAgICAgICAgICAgICAgdHJ1bmNcclxuICAgKiAgdmFsdWVPZiAgICAgICAgICAgICAgICAgICB0b0pTT05cclxuICAgKi9cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGFic29sdXRlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuYWJzb2x1dGVWYWx1ZSA9IFAuYWJzID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHggPSBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKTtcclxuICAgIGlmICh4LnMgPCAwKSB4LnMgPSAxO1xyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHgpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgcm91bmRlZCB0byBhIHdob2xlIG51bWJlciBpbiB0aGVcclxuICAgKiBkaXJlY3Rpb24gb2YgcG9zaXRpdmUgSW5maW5pdHkuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmNlaWwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gZmluYWxpc2UobmV3IHRoaXMuY29uc3RydWN0b3IodGhpcyksIHRoaXMuZSArIDEsIDIpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVyblxyXG4gICAqICAgMSAgICBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIGdyZWF0ZXIgdGhhbiB0aGUgdmFsdWUgb2YgYHlgLFxyXG4gICAqICAtMSAgICBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIGxlc3MgdGhhbiB0aGUgdmFsdWUgb2YgYHlgLFxyXG4gICAqICAgMCAgICBpZiB0aGV5IGhhdmUgdGhlIHNhbWUgdmFsdWUsXHJcbiAgICogICBOYU4gIGlmIHRoZSB2YWx1ZSBvZiBlaXRoZXIgRGVjaW1hbCBpcyBOYU4uXHJcbiAgICpcclxuICAgKi9cclxuICBQLmNvbXBhcmVkVG8gPSBQLmNtcCA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICB2YXIgaSwgaiwgeGRMLCB5ZEwsXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICB4ZCA9IHguZCxcclxuICAgICAgeWQgPSAoeSA9IG5ldyB4LmNvbnN0cnVjdG9yKHkpKS5kLFxyXG4gICAgICB4cyA9IHgucyxcclxuICAgICAgeXMgPSB5LnM7XHJcblxyXG4gICAgLy8gRWl0aGVyIE5hTiBvciDCsUluZmluaXR5P1xyXG4gICAgaWYgKCF4ZCB8fCAheWQpIHtcclxuICAgICAgcmV0dXJuICF4cyB8fCAheXMgPyBOYU4gOiB4cyAhPT0geXMgPyB4cyA6IHhkID09PSB5ZCA/IDAgOiAheGQgXiB4cyA8IDAgPyAxIDogLTE7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRWl0aGVyIHplcm8/XHJcbiAgICBpZiAoIXhkWzBdIHx8ICF5ZFswXSkgcmV0dXJuIHhkWzBdID8geHMgOiB5ZFswXSA/IC15cyA6IDA7XHJcblxyXG4gICAgLy8gU2lnbnMgZGlmZmVyP1xyXG4gICAgaWYgKHhzICE9PSB5cykgcmV0dXJuIHhzO1xyXG5cclxuICAgIC8vIENvbXBhcmUgZXhwb25lbnRzLlxyXG4gICAgaWYgKHguZSAhPT0geS5lKSByZXR1cm4geC5lID4geS5lIF4geHMgPCAwID8gMSA6IC0xO1xyXG5cclxuICAgIHhkTCA9IHhkLmxlbmd0aDtcclxuICAgIHlkTCA9IHlkLmxlbmd0aDtcclxuXHJcbiAgICAvLyBDb21wYXJlIGRpZ2l0IGJ5IGRpZ2l0LlxyXG4gICAgZm9yIChpID0gMCwgaiA9IHhkTCA8IHlkTCA/IHhkTCA6IHlkTDsgaSA8IGo7ICsraSkge1xyXG4gICAgICBpZiAoeGRbaV0gIT09IHlkW2ldKSByZXR1cm4geGRbaV0gPiB5ZFtpXSBeIHhzIDwgMCA/IDEgOiAtMTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBDb21wYXJlIGxlbmd0aHMuXHJcbiAgICByZXR1cm4geGRMID09PSB5ZEwgPyAwIDogeGRMID4geWRMIF4geHMgPCAwID8gMSA6IC0xO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBjb3NpbmUgb2YgdGhlIHZhbHVlIGluIHJhZGlhbnMgb2YgdGhpcyBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICogRG9tYWluOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKiBSYW5nZTogWy0xLCAxXVxyXG4gICAqXHJcbiAgICogY29zKDApICAgICAgICAgPSAxXHJcbiAgICogY29zKC0wKSAgICAgICAgPSAxXHJcbiAgICogY29zKEluZmluaXR5KSAgPSBOYU5cclxuICAgKiBjb3MoLUluZmluaXR5KSA9IE5hTlxyXG4gICAqIGNvcyhOYU4pICAgICAgID0gTmFOXHJcbiAgICpcclxuICAgKi9cclxuICBQLmNvc2luZSA9IFAuY29zID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHByLCBybSxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICgheC5kKSByZXR1cm4gbmV3IEN0b3IoTmFOKTtcclxuXHJcbiAgICAvLyBjb3MoMCkgPSBjb3MoLTApID0gMVxyXG4gICAgaWYgKCF4LmRbMF0pIHJldHVybiBuZXcgQ3RvcigxKTtcclxuXHJcbiAgICBwciA9IEN0b3IucHJlY2lzaW9uO1xyXG4gICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIE1hdGgubWF4KHguZSwgeC5zZCgpKSArIExPR19CQVNFO1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IDE7XHJcblxyXG4gICAgeCA9IGNvc2luZShDdG9yLCB0b0xlc3NUaGFuSGFsZlBpKEN0b3IsIHgpKTtcclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IHJtO1xyXG5cclxuICAgIHJldHVybiBmaW5hbGlzZShxdWFkcmFudCA9PSAyIHx8IHF1YWRyYW50ID09IDMgPyB4Lm5lZygpIDogeCwgcHIsIHJtLCB0cnVlKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBjdWJlIHJvb3Qgb2YgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCwgcm91bmRlZCB0b1xyXG4gICAqIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiAgY2JydCgwKSAgPSAgMFxyXG4gICAqICBjYnJ0KC0wKSA9IC0wXHJcbiAgICogIGNicnQoMSkgID0gIDFcclxuICAgKiAgY2JydCgtMSkgPSAtMVxyXG4gICAqICBjYnJ0KE4pICA9ICBOXHJcbiAgICogIGNicnQoLUkpID0gLUlcclxuICAgKiAgY2JydChJKSAgPSAgSVxyXG4gICAqXHJcbiAgICogTWF0aC5jYnJ0KHgpID0gKHggPCAwID8gLU1hdGgucG93KC14LCAxLzMpIDogTWF0aC5wb3coeCwgMS8zKSlcclxuICAgKlxyXG4gICAqL1xyXG4gIFAuY3ViZVJvb3QgPSBQLmNicnQgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgZSwgbSwgbiwgciwgcmVwLCBzLCBzZCwgdCwgdDMsIHQzcGx1c3gsXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICBpZiAoIXguaXNGaW5pdGUoKSB8fCB4LmlzWmVybygpKSByZXR1cm4gbmV3IEN0b3IoeCk7XHJcbiAgICBleHRlcm5hbCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIEluaXRpYWwgZXN0aW1hdGUuXHJcbiAgICBzID0geC5zICogbWF0aHBvdyh4LnMgKiB4LCAxIC8gMyk7XHJcblxyXG4gICAgIC8vIE1hdGguY2JydCB1bmRlcmZsb3cvb3ZlcmZsb3c/XHJcbiAgICAgLy8gUGFzcyB4IHRvIE1hdGgucG93IGFzIGludGVnZXIsIHRoZW4gYWRqdXN0IHRoZSBleHBvbmVudCBvZiB0aGUgcmVzdWx0LlxyXG4gICAgaWYgKCFzIHx8IE1hdGguYWJzKHMpID09IDEgLyAwKSB7XHJcbiAgICAgIG4gPSBkaWdpdHNUb1N0cmluZyh4LmQpO1xyXG4gICAgICBlID0geC5lO1xyXG5cclxuICAgICAgLy8gQWRqdXN0IG4gZXhwb25lbnQgc28gaXQgaXMgYSBtdWx0aXBsZSBvZiAzIGF3YXkgZnJvbSB4IGV4cG9uZW50LlxyXG4gICAgICBpZiAocyA9IChlIC0gbi5sZW5ndGggKyAxKSAlIDMpIG4gKz0gKHMgPT0gMSB8fCBzID09IC0yID8gJzAnIDogJzAwJyk7XHJcbiAgICAgIHMgPSBtYXRocG93KG4sIDEgLyAzKTtcclxuXHJcbiAgICAgIC8vIFJhcmVseSwgZSBtYXkgYmUgb25lIGxlc3MgdGhhbiB0aGUgcmVzdWx0IGV4cG9uZW50IHZhbHVlLlxyXG4gICAgICBlID0gbWF0aGZsb29yKChlICsgMSkgLyAzKSAtIChlICUgMyA9PSAoZSA8IDAgPyAtMSA6IDIpKTtcclxuXHJcbiAgICAgIGlmIChzID09IDEgLyAwKSB7XHJcbiAgICAgICAgbiA9ICc1ZScgKyBlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG4gPSBzLnRvRXhwb25lbnRpYWwoKTtcclxuICAgICAgICBuID0gbi5zbGljZSgwLCBuLmluZGV4T2YoJ2UnKSArIDEpICsgZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgciA9IG5ldyBDdG9yKG4pO1xyXG4gICAgICByLnMgPSB4LnM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByID0gbmV3IEN0b3Iocy50b1N0cmluZygpKTtcclxuICAgIH1cclxuXHJcbiAgICBzZCA9IChlID0gQ3Rvci5wcmVjaXNpb24pICsgMztcclxuXHJcbiAgICAvLyBIYWxsZXkncyBtZXRob2QuXHJcbiAgICAvLyBUT0RPPyBDb21wYXJlIE5ld3RvbidzIG1ldGhvZC5cclxuICAgIGZvciAoOzspIHtcclxuICAgICAgdCA9IHI7XHJcbiAgICAgIHQzID0gdC50aW1lcyh0KS50aW1lcyh0KTtcclxuICAgICAgdDNwbHVzeCA9IHQzLnBsdXMoeCk7XHJcbiAgICAgIHIgPSBkaXZpZGUodDNwbHVzeC5wbHVzKHgpLnRpbWVzKHQpLCB0M3BsdXN4LnBsdXModDMpLCBzZCArIDIsIDEpO1xyXG5cclxuICAgICAgLy8gVE9ETz8gUmVwbGFjZSB3aXRoIGZvci1sb29wIGFuZCBjaGVja1JvdW5kaW5nRGlnaXRzLlxyXG4gICAgICBpZiAoZGlnaXRzVG9TdHJpbmcodC5kKS5zbGljZSgwLCBzZCkgPT09IChuID0gZGlnaXRzVG9TdHJpbmcoci5kKSkuc2xpY2UoMCwgc2QpKSB7XHJcbiAgICAgICAgbiA9IG4uc2xpY2Uoc2QgLSAzLCBzZCArIDEpO1xyXG5cclxuICAgICAgICAvLyBUaGUgNHRoIHJvdW5kaW5nIGRpZ2l0IG1heSBiZSBpbiBlcnJvciBieSAtMSBzbyBpZiB0aGUgNCByb3VuZGluZyBkaWdpdHMgYXJlIDk5OTkgb3IgNDk5OVxyXG4gICAgICAgIC8vICwgaS5lLiBhcHByb2FjaGluZyBhIHJvdW5kaW5nIGJvdW5kYXJ5LCBjb250aW51ZSB0aGUgaXRlcmF0aW9uLlxyXG4gICAgICAgIGlmIChuID09ICc5OTk5JyB8fCAhcmVwICYmIG4gPT0gJzQ5OTknKSB7XHJcblxyXG4gICAgICAgICAgLy8gT24gdGhlIGZpcnN0IGl0ZXJhdGlvbiBvbmx5LCBjaGVjayB0byBzZWUgaWYgcm91bmRpbmcgdXAgZ2l2ZXMgdGhlIGV4YWN0IHJlc3VsdCBhcyB0aGVcclxuICAgICAgICAgIC8vIG5pbmVzIG1heSBpbmZpbml0ZWx5IHJlcGVhdC5cclxuICAgICAgICAgIGlmICghcmVwKSB7XHJcbiAgICAgICAgICAgIGZpbmFsaXNlKHQsIGUgKyAxLCAwKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0LnRpbWVzKHQpLnRpbWVzKHQpLmVxKHgpKSB7XHJcbiAgICAgICAgICAgICAgciA9IHQ7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBzZCArPSA0O1xyXG4gICAgICAgICAgcmVwID0gMTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIC8vIElmIHRoZSByb3VuZGluZyBkaWdpdHMgYXJlIG51bGwsIDB7MCw0fSBvciA1MHswLDN9LCBjaGVjayBmb3IgYW4gZXhhY3QgcmVzdWx0LlxyXG4gICAgICAgICAgLy8gSWYgbm90LCB0aGVuIHRoZXJlIGFyZSBmdXJ0aGVyIGRpZ2l0cyBhbmQgbSB3aWxsIGJlIHRydXRoeS5cclxuICAgICAgICAgIGlmICghK24gfHwgIStuLnNsaWNlKDEpICYmIG4uY2hhckF0KDApID09ICc1Jykge1xyXG5cclxuICAgICAgICAgICAgLy8gVHJ1bmNhdGUgdG8gdGhlIGZpcnN0IHJvdW5kaW5nIGRpZ2l0LlxyXG4gICAgICAgICAgICBmaW5hbGlzZShyLCBlICsgMSwgMSk7XHJcbiAgICAgICAgICAgIG0gPSAhci50aW1lcyhyKS50aW1lcyhyKS5lcSh4KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBleHRlcm5hbCA9IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHIsIGUsIEN0b3Iucm91bmRpbmcsIG0pO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIG9mIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmRlY2ltYWxQbGFjZXMgPSBQLmRwID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHcsXHJcbiAgICAgIGQgPSB0aGlzLmQsXHJcbiAgICAgIG4gPSBOYU47XHJcblxyXG4gICAgaWYgKGQpIHtcclxuICAgICAgdyA9IGQubGVuZ3RoIC0gMTtcclxuICAgICAgbiA9ICh3IC0gbWF0aGZsb29yKHRoaXMuZSAvIExPR19CQVNFKSkgKiBMT0dfQkFTRTtcclxuXHJcbiAgICAgIC8vIFN1YnRyYWN0IHRoZSBudW1iZXIgb2YgdHJhaWxpbmcgemVyb3Mgb2YgdGhlIGxhc3Qgd29yZC5cclxuICAgICAgdyA9IGRbd107XHJcbiAgICAgIGlmICh3KSBmb3IgKDsgdyAlIDEwID09IDA7IHcgLz0gMTApIG4tLTtcclxuICAgICAgaWYgKG4gPCAwKSBuID0gMDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbjtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiAgbiAvIDAgPSBJXHJcbiAgICogIG4gLyBOID0gTlxyXG4gICAqICBuIC8gSSA9IDBcclxuICAgKiAgMCAvIG4gPSAwXHJcbiAgICogIDAgLyAwID0gTlxyXG4gICAqICAwIC8gTiA9IE5cclxuICAgKiAgMCAvIEkgPSAwXHJcbiAgICogIE4gLyBuID0gTlxyXG4gICAqICBOIC8gMCA9IE5cclxuICAgKiAgTiAvIE4gPSBOXHJcbiAgICogIE4gLyBJID0gTlxyXG4gICAqICBJIC8gbiA9IElcclxuICAgKiAgSSAvIDAgPSBJXHJcbiAgICogIEkgLyBOID0gTlxyXG4gICAqICBJIC8gSSA9IE5cclxuICAgKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgZGl2aWRlZCBieSBgeWAsIHJvdW5kZWQgdG9cclxuICAgKiBgcHJlY2lzaW9uYCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5kaXZpZGVkQnkgPSBQLmRpdiA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICByZXR1cm4gZGl2aWRlKHRoaXMsIG5ldyB0aGlzLmNvbnN0cnVjdG9yKHkpKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgaW50ZWdlciBwYXJ0IG9mIGRpdmlkaW5nIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWxcclxuICAgKiBieSB0aGUgdmFsdWUgb2YgYHlgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmRpdmlkZWRUb0ludGVnZXJCeSA9IFAuZGl2VG9JbnQgPSBmdW5jdGlvbiAoeSkge1xyXG4gICAgdmFyIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuICAgIHJldHVybiBmaW5hbGlzZShkaXZpZGUoeCwgbmV3IEN0b3IoeSksIDAsIDEsIDEpLCBDdG9yLnByZWNpc2lvbiwgQ3Rvci5yb3VuZGluZyk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpcyBlcXVhbCB0byB0aGUgdmFsdWUgb2YgYHlgLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5lcXVhbHMgPSBQLmVxID0gZnVuY3Rpb24gKHkpIHtcclxuICAgIHJldHVybiB0aGlzLmNtcCh5KSA9PT0gMDtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIHJvdW5kZWQgdG8gYSB3aG9sZSBudW1iZXIgaW4gdGhlXHJcbiAgICogZGlyZWN0aW9uIG9mIG5lZ2F0aXZlIEluZmluaXR5LlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5mbG9vciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiBmaW5hbGlzZShuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKSwgdGhpcy5lICsgMSwgMyk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpcyBncmVhdGVyIHRoYW4gdGhlIHZhbHVlIG9mIGB5YCwgb3RoZXJ3aXNlIHJldHVyblxyXG4gICAqIGZhbHNlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5ncmVhdGVyVGhhbiA9IFAuZ3QgPSBmdW5jdGlvbiAoeSkge1xyXG4gICAgcmV0dXJuIHRoaXMuY21wKHkpID4gMDtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgdmFsdWUgb2YgYHlgLFxyXG4gICAqIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmdyZWF0ZXJUaGFuT3JFcXVhbFRvID0gUC5ndGUgPSBmdW5jdGlvbiAoeSkge1xyXG4gICAgdmFyIGsgPSB0aGlzLmNtcCh5KTtcclxuICAgIHJldHVybiBrID09IDEgfHwgayA9PT0gMDtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgaHlwZXJib2xpYyBjb3NpbmUgb2YgdGhlIHZhbHVlIGluIHJhZGlhbnMgb2YgdGhpc1xyXG4gICAqIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBEb21haW46IFstSW5maW5pdHksIEluZmluaXR5XVxyXG4gICAqIFJhbmdlOiBbMSwgSW5maW5pdHldXHJcbiAgICpcclxuICAgKiBjb3NoKHgpID0gMSArIHheMi8yISArIHheNC80ISArIHheNi82ISArIC4uLlxyXG4gICAqXHJcbiAgICogY29zaCgwKSAgICAgICAgID0gMVxyXG4gICAqIGNvc2goLTApICAgICAgICA9IDFcclxuICAgKiBjb3NoKEluZmluaXR5KSAgPSBJbmZpbml0eVxyXG4gICAqIGNvc2goLUluZmluaXR5KSA9IEluZmluaXR5XHJcbiAgICogY29zaChOYU4pICAgICAgID0gTmFOXHJcbiAgICpcclxuICAgKiAgeCAgICAgICAgdGltZSB0YWtlbiAobXMpICAgcmVzdWx0XHJcbiAgICogMTAwMCAgICAgIDkgICAgICAgICAgICAgICAgIDkuODUwMzU1NTcwMDg1MjM0OTY5NGUrNDMzXHJcbiAgICogMTAwMDAgICAgIDI1ICAgICAgICAgICAgICAgIDQuNDAzNDA5MTEyODMxNDYwNzkzNmUrNDM0MlxyXG4gICAqIDEwMDAwMCAgICAxNzEgICAgICAgICAgICAgICAxLjQwMzMzMTY4MDIxMzA2MTU4OTdlKzQzNDI5XHJcbiAgICogMTAwMDAwMCAgIDM4MTcgICAgICAgICAgICAgIDEuNTE2NjA3Njk4NDAxMDQzNzcyNWUrNDM0Mjk0XHJcbiAgICogMTAwMDAwMDAgIGFiYW5kb25lZCBhZnRlciAyIG1pbnV0ZSB3YWl0XHJcbiAgICpcclxuICAgKiBUT0RPPyBDb21wYXJlIHBlcmZvcm1hbmNlIG9mIGNvc2goeCkgPSAwLjUgKiAoZXhwKHgpICsgZXhwKC14KSlcclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaHlwZXJib2xpY0Nvc2luZSA9IFAuY29zaCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBrLCBuLCBwciwgcm0sIGxlbixcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yLFxyXG4gICAgICBvbmUgPSBuZXcgQ3RvcigxKTtcclxuXHJcbiAgICBpZiAoIXguaXNGaW5pdGUoKSkgcmV0dXJuIG5ldyBDdG9yKHgucyA/IDEgLyAwIDogTmFOKTtcclxuICAgIGlmICh4LmlzWmVybygpKSByZXR1cm4gb25lO1xyXG5cclxuICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByICsgTWF0aC5tYXgoeC5lLCB4LnNkKCkpICsgNDtcclxuICAgIEN0b3Iucm91bmRpbmcgPSAxO1xyXG4gICAgbGVuID0geC5kLmxlbmd0aDtcclxuXHJcbiAgICAvLyBBcmd1bWVudCByZWR1Y3Rpb246IGNvcyg0eCkgPSAxIC0gOGNvc14yKHgpICsgOGNvc140KHgpICsgMVxyXG4gICAgLy8gaS5lLiBjb3MoeCkgPSAxIC0gY29zXjIoeC80KSg4IC0gOGNvc14yKHgvNCkpXHJcblxyXG4gICAgLy8gRXN0aW1hdGUgdGhlIG9wdGltdW0gbnVtYmVyIG9mIHRpbWVzIHRvIHVzZSB0aGUgYXJndW1lbnQgcmVkdWN0aW9uLlxyXG4gICAgLy8gVE9ETz8gRXN0aW1hdGlvbiByZXVzZWQgZnJvbSBjb3NpbmUoKSBhbmQgbWF5IG5vdCBiZSBvcHRpbWFsIGhlcmUuXHJcbiAgICBpZiAobGVuIDwgMzIpIHtcclxuICAgICAgayA9IE1hdGguY2VpbChsZW4gLyAzKTtcclxuICAgICAgbiA9ICgxIC8gdGlueVBvdyg0LCBrKSkudG9TdHJpbmcoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGsgPSAxNjtcclxuICAgICAgbiA9ICcyLjMyODMwNjQzNjUzODY5NjI4OTA2MjVlLTEwJztcclxuICAgIH1cclxuXHJcbiAgICB4ID0gdGF5bG9yU2VyaWVzKEN0b3IsIDEsIHgudGltZXMobiksIG5ldyBDdG9yKDEpLCB0cnVlKTtcclxuXHJcbiAgICAvLyBSZXZlcnNlIGFyZ3VtZW50IHJlZHVjdGlvblxyXG4gICAgdmFyIGNvc2gyX3gsXHJcbiAgICAgIGkgPSBrLFxyXG4gICAgICBkOCA9IG5ldyBDdG9yKDgpO1xyXG4gICAgZm9yICg7IGktLTspIHtcclxuICAgICAgY29zaDJfeCA9IHgudGltZXMoeCk7XHJcbiAgICAgIHggPSBvbmUubWludXMoY29zaDJfeC50aW1lcyhkOC5taW51cyhjb3NoMl94LnRpbWVzKGQ4KSkpKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UoeCwgQ3Rvci5wcmVjaXNpb24gPSBwciwgQ3Rvci5yb3VuZGluZyA9IHJtLCB0cnVlKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgaHlwZXJib2xpYyBzaW5lIG9mIHRoZSB2YWx1ZSBpbiByYWRpYW5zIG9mIHRoaXNcclxuICAgKiBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICogRG9tYWluOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKiBSYW5nZTogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICpcclxuICAgKiBzaW5oKHgpID0geCArIHheMy8zISArIHheNS81ISArIHheNy83ISArIC4uLlxyXG4gICAqXHJcbiAgICogc2luaCgwKSAgICAgICAgID0gMFxyXG4gICAqIHNpbmgoLTApICAgICAgICA9IC0wXHJcbiAgICogc2luaChJbmZpbml0eSkgID0gSW5maW5pdHlcclxuICAgKiBzaW5oKC1JbmZpbml0eSkgPSAtSW5maW5pdHlcclxuICAgKiBzaW5oKE5hTikgICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqIHggICAgICAgIHRpbWUgdGFrZW4gKG1zKVxyXG4gICAqIDEwICAgICAgIDIgbXNcclxuICAgKiAxMDAgICAgICA1IG1zXHJcbiAgICogMTAwMCAgICAgMTQgbXNcclxuICAgKiAxMDAwMCAgICA4MiBtc1xyXG4gICAqIDEwMDAwMCAgIDg4NiBtcyAgICAgICAgICAgIDEuNDAzMzMxNjgwMjEzMDYxNTg5N2UrNDM0MjlcclxuICAgKiAyMDAwMDAgICAyNjEzIG1zXHJcbiAgICogMzAwMDAwICAgNTQwNyBtc1xyXG4gICAqIDQwMDAwMCAgIDg4MjQgbXNcclxuICAgKiA1MDAwMDAgICAxMzAyNiBtcyAgICAgICAgICA4LjcwODA2NDM2MTI3MTgwODQxMjllKzIxNzE0NlxyXG4gICAqIDEwMDAwMDAgIDQ4NTQzIG1zXHJcbiAgICpcclxuICAgKiBUT0RPPyBDb21wYXJlIHBlcmZvcm1hbmNlIG9mIHNpbmgoeCkgPSAwLjUgKiAoZXhwKHgpIC0gZXhwKC14KSlcclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaHlwZXJib2xpY1NpbmUgPSBQLnNpbmggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgaywgcHIsIHJtLCBsZW4sXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICBpZiAoIXguaXNGaW5pdGUoKSB8fCB4LmlzWmVybygpKSByZXR1cm4gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHIgKyBNYXRoLm1heCh4LmUsIHguc2QoKSkgKyA0O1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IDE7XHJcbiAgICBsZW4gPSB4LmQubGVuZ3RoO1xyXG5cclxuICAgIGlmIChsZW4gPCAzKSB7XHJcbiAgICAgIHggPSB0YXlsb3JTZXJpZXMoQ3RvciwgMiwgeCwgeCwgdHJ1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgLy8gQWx0ZXJuYXRpdmUgYXJndW1lbnQgcmVkdWN0aW9uOiBzaW5oKDN4KSA9IHNpbmgoeCkoMyArIDRzaW5oXjIoeCkpXHJcbiAgICAgIC8vIGkuZS4gc2luaCh4KSA9IHNpbmgoeC8zKSgzICsgNHNpbmheMih4LzMpKVxyXG4gICAgICAvLyAzIG11bHRpcGxpY2F0aW9ucyBhbmQgMSBhZGRpdGlvblxyXG5cclxuICAgICAgLy8gQXJndW1lbnQgcmVkdWN0aW9uOiBzaW5oKDV4KSA9IHNpbmgoeCkoNSArIHNpbmheMih4KSgyMCArIDE2c2luaF4yKHgpKSlcclxuICAgICAgLy8gaS5lLiBzaW5oKHgpID0gc2luaCh4LzUpKDUgKyBzaW5oXjIoeC81KSgyMCArIDE2c2luaF4yKHgvNSkpKVxyXG4gICAgICAvLyA0IG11bHRpcGxpY2F0aW9ucyBhbmQgMiBhZGRpdGlvbnNcclxuXHJcbiAgICAgIC8vIEVzdGltYXRlIHRoZSBvcHRpbXVtIG51bWJlciBvZiB0aW1lcyB0byB1c2UgdGhlIGFyZ3VtZW50IHJlZHVjdGlvbi5cclxuICAgICAgayA9IDEuNCAqIE1hdGguc3FydChsZW4pO1xyXG4gICAgICBrID0gayA+IDE2ID8gMTYgOiBrIHwgMDtcclxuXHJcbiAgICAgIHggPSB4LnRpbWVzKDEgLyB0aW55UG93KDUsIGspKTtcclxuICAgICAgeCA9IHRheWxvclNlcmllcyhDdG9yLCAyLCB4LCB4LCB0cnVlKTtcclxuXHJcbiAgICAgIC8vIFJldmVyc2UgYXJndW1lbnQgcmVkdWN0aW9uXHJcbiAgICAgIHZhciBzaW5oMl94LFxyXG4gICAgICAgIGQ1ID0gbmV3IEN0b3IoNSksXHJcbiAgICAgICAgZDE2ID0gbmV3IEN0b3IoMTYpLFxyXG4gICAgICAgIGQyMCA9IG5ldyBDdG9yKDIwKTtcclxuICAgICAgZm9yICg7IGstLTspIHtcclxuICAgICAgICBzaW5oMl94ID0geC50aW1lcyh4KTtcclxuICAgICAgICB4ID0geC50aW1lcyhkNS5wbHVzKHNpbmgyX3gudGltZXMoZDE2LnRpbWVzKHNpbmgyX3gpLnBsdXMoZDIwKSkpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHI7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gcm07XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHgsIHByLCBybSwgdHJ1ZSk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGh5cGVyYm9saWMgdGFuZ2VudCBvZiB0aGUgdmFsdWUgaW4gcmFkaWFucyBvZiB0aGlzXHJcbiAgICogRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICogUmFuZ2U6IFstMSwgMV1cclxuICAgKlxyXG4gICAqIHRhbmgoeCkgPSBzaW5oKHgpIC8gY29zaCh4KVxyXG4gICAqXHJcbiAgICogdGFuaCgwKSAgICAgICAgID0gMFxyXG4gICAqIHRhbmgoLTApICAgICAgICA9IC0wXHJcbiAgICogdGFuaChJbmZpbml0eSkgID0gMVxyXG4gICAqIHRhbmgoLUluZmluaXR5KSA9IC0xXHJcbiAgICogdGFuaChOYU4pICAgICAgID0gTmFOXHJcbiAgICpcclxuICAgKi9cclxuICBQLmh5cGVyYm9saWNUYW5nZW50ID0gUC50YW5oID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHByLCBybSxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpKSByZXR1cm4gbmV3IEN0b3IoeC5zKTtcclxuICAgIGlmICh4LmlzWmVybygpKSByZXR1cm4gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHIgKyA3O1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IDE7XHJcblxyXG4gICAgcmV0dXJuIGRpdmlkZSh4LnNpbmgoKSwgeC5jb3NoKCksIEN0b3IucHJlY2lzaW9uID0gcHIsIEN0b3Iucm91bmRpbmcgPSBybSk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGFyY2Nvc2luZSAoaW52ZXJzZSBjb3NpbmUpIGluIHJhZGlhbnMgb2YgdGhlIHZhbHVlIG9mXHJcbiAgICogdGhpcyBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICogRG9tYWluOiBbLTEsIDFdXHJcbiAgICogUmFuZ2U6IFswLCBwaV1cclxuICAgKlxyXG4gICAqIGFjb3MoeCkgPSBwaS8yIC0gYXNpbih4KVxyXG4gICAqXHJcbiAgICogYWNvcygwKSAgICAgICA9IHBpLzJcclxuICAgKiBhY29zKC0wKSAgICAgID0gcGkvMlxyXG4gICAqIGFjb3MoMSkgICAgICAgPSAwXHJcbiAgICogYWNvcygtMSkgICAgICA9IHBpXHJcbiAgICogYWNvcygxLzIpICAgICA9IHBpLzNcclxuICAgKiBhY29zKC0xLzIpICAgID0gMipwaS8zXHJcbiAgICogYWNvcyh8eHwgPiAxKSA9IE5hTlxyXG4gICAqIGFjb3MoTmFOKSAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaW52ZXJzZUNvc2luZSA9IFAuYWNvcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBoYWxmUGksXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcixcclxuICAgICAgayA9IHguYWJzKCkuY21wKDEpLFxyXG4gICAgICBwciA9IEN0b3IucHJlY2lzaW9uLFxyXG4gICAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcblxyXG4gICAgaWYgKGsgIT09IC0xKSB7XHJcbiAgICAgIHJldHVybiBrID09PSAwXHJcbiAgICAgICAgLy8gfHh8IGlzIDFcclxuICAgICAgICA/IHguaXNOZWcoKSA/IGdldFBpKEN0b3IsIHByLCBybSkgOiBuZXcgQ3RvcigwKVxyXG4gICAgICAgIC8vIHx4fCA+IDEgb3IgeCBpcyBOYU5cclxuICAgICAgICA6IG5ldyBDdG9yKE5hTik7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHguaXNaZXJvKCkpIHJldHVybiBnZXRQaShDdG9yLCBwciArIDQsIHJtKS50aW1lcygwLjUpO1xyXG5cclxuICAgIC8vIFRPRE8/IFNwZWNpYWwgY2FzZSBhY29zKDAuNSkgPSBwaS8zIGFuZCBhY29zKC0wLjUpID0gMipwaS8zXHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwciArIDY7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuXHJcbiAgICB4ID0geC5hc2luKCk7XHJcbiAgICBoYWxmUGkgPSBnZXRQaShDdG9yLCBwciArIDQsIHJtKS50aW1lcygwLjUpO1xyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHI7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gcm07XHJcblxyXG4gICAgcmV0dXJuIGhhbGZQaS5taW51cyh4KTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgaW52ZXJzZSBvZiB0aGUgaHlwZXJib2xpYyBjb3NpbmUgaW4gcmFkaWFucyBvZiB0aGVcclxuICAgKiB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBEb21haW46IFsxLCBJbmZpbml0eV1cclxuICAgKiBSYW5nZTogWzAsIEluZmluaXR5XVxyXG4gICAqXHJcbiAgICogYWNvc2goeCkgPSBsbih4ICsgc3FydCh4XjIgLSAxKSlcclxuICAgKlxyXG4gICAqIGFjb3NoKHggPCAxKSAgICAgPSBOYU5cclxuICAgKiBhY29zaChOYU4pICAgICAgID0gTmFOXHJcbiAgICogYWNvc2goSW5maW5pdHkpICA9IEluZmluaXR5XHJcbiAgICogYWNvc2goLUluZmluaXR5KSA9IE5hTlxyXG4gICAqIGFjb3NoKDApICAgICAgICAgPSBOYU5cclxuICAgKiBhY29zaCgtMCkgICAgICAgID0gTmFOXHJcbiAgICogYWNvc2goMSkgICAgICAgICA9IDBcclxuICAgKiBhY29zaCgtMSkgICAgICAgID0gTmFOXHJcbiAgICpcclxuICAgKi9cclxuICBQLmludmVyc2VIeXBlcmJvbGljQ29zaW5lID0gUC5hY29zaCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBwciwgcm0sXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICBpZiAoeC5sdGUoMSkpIHJldHVybiBuZXcgQ3Rvcih4LmVxKDEpID8gMCA6IE5hTik7XHJcbiAgICBpZiAoIXguaXNGaW5pdGUoKSkgcmV0dXJuIG5ldyBDdG9yKHgpO1xyXG5cclxuICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByICsgTWF0aC5tYXgoTWF0aC5hYnMoeC5lKSwgeC5zZCgpKSArIDQ7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgeCA9IHgudGltZXMoeCkubWludXMoMSkuc3FydCgpLnBsdXMoeCk7XHJcblxyXG4gICAgZXh0ZXJuYWwgPSB0cnVlO1xyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwcjtcclxuICAgIEN0b3Iucm91bmRpbmcgPSBybTtcclxuXHJcbiAgICByZXR1cm4geC5sbigpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBpbnZlcnNlIG9mIHRoZSBoeXBlcmJvbGljIHNpbmUgaW4gcmFkaWFucyBvZiB0aGUgdmFsdWVcclxuICAgKiBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBEb21haW46IFstSW5maW5pdHksIEluZmluaXR5XVxyXG4gICAqIFJhbmdlOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKlxyXG4gICAqIGFzaW5oKHgpID0gbG4oeCArIHNxcnQoeF4yICsgMSkpXHJcbiAgICpcclxuICAgKiBhc2luaChOYU4pICAgICAgID0gTmFOXHJcbiAgICogYXNpbmgoSW5maW5pdHkpICA9IEluZmluaXR5XHJcbiAgICogYXNpbmgoLUluZmluaXR5KSA9IC1JbmZpbml0eVxyXG4gICAqIGFzaW5oKDApICAgICAgICAgPSAwXHJcbiAgICogYXNpbmgoLTApICAgICAgICA9IC0wXHJcbiAgICpcclxuICAgKi9cclxuICBQLmludmVyc2VIeXBlcmJvbGljU2luZSA9IFAuYXNpbmggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgcHIsIHJtLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKCF4LmlzRmluaXRlKCkgfHwgeC5pc1plcm8oKSkgcmV0dXJuIG5ldyBDdG9yKHgpO1xyXG5cclxuICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByICsgMiAqIE1hdGgubWF4KE1hdGguYWJzKHguZSksIHguc2QoKSkgKyA2O1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IDE7XHJcbiAgICBleHRlcm5hbCA9IGZhbHNlO1xyXG5cclxuICAgIHggPSB4LnRpbWVzKHgpLnBsdXMoMSkuc3FydCgpLnBsdXMoeCk7XHJcblxyXG4gICAgZXh0ZXJuYWwgPSB0cnVlO1xyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwcjtcclxuICAgIEN0b3Iucm91bmRpbmcgPSBybTtcclxuXHJcbiAgICByZXR1cm4geC5sbigpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBpbnZlcnNlIG9mIHRoZSBoeXBlcmJvbGljIHRhbmdlbnQgaW4gcmFkaWFucyBvZiB0aGVcclxuICAgKiB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBEb21haW46IFstMSwgMV1cclxuICAgKiBSYW5nZTogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICpcclxuICAgKiBhdGFuaCh4KSA9IDAuNSAqIGxuKCgxICsgeCkgLyAoMSAtIHgpKVxyXG4gICAqXHJcbiAgICogYXRhbmgofHh8ID4gMSkgICA9IE5hTlxyXG4gICAqIGF0YW5oKE5hTikgICAgICAgPSBOYU5cclxuICAgKiBhdGFuaChJbmZpbml0eSkgID0gTmFOXHJcbiAgICogYXRhbmgoLUluZmluaXR5KSA9IE5hTlxyXG4gICAqIGF0YW5oKDApICAgICAgICAgPSAwXHJcbiAgICogYXRhbmgoLTApICAgICAgICA9IC0wXHJcbiAgICogYXRhbmgoMSkgICAgICAgICA9IEluZmluaXR5XHJcbiAgICogYXRhbmgoLTEpICAgICAgICA9IC1JbmZpbml0eVxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5pbnZlcnNlSHlwZXJib2xpY1RhbmdlbnQgPSBQLmF0YW5oID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHByLCBybSwgd3ByLCB4c2QsXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICBpZiAoIXguaXNGaW5pdGUoKSkgcmV0dXJuIG5ldyBDdG9yKE5hTik7XHJcbiAgICBpZiAoeC5lID49IDApIHJldHVybiBuZXcgQ3Rvcih4LmFicygpLmVxKDEpID8geC5zIC8gMCA6IHguaXNaZXJvKCkgPyB4IDogTmFOKTtcclxuXHJcbiAgICBwciA9IEN0b3IucHJlY2lzaW9uO1xyXG4gICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgeHNkID0geC5zZCgpO1xyXG5cclxuICAgIGlmIChNYXRoLm1heCh4c2QsIHByKSA8IDIgKiAteC5lIC0gMSkgcmV0dXJuIGZpbmFsaXNlKG5ldyBDdG9yKHgpLCBwciwgcm0sIHRydWUpO1xyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gd3ByID0geHNkIC0geC5lO1xyXG5cclxuICAgIHggPSBkaXZpZGUoeC5wbHVzKDEpLCBuZXcgQ3RvcigxKS5taW51cyh4KSwgd3ByICsgcHIsIDEpO1xyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHIgKyA0O1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IDE7XHJcblxyXG4gICAgeCA9IHgubG4oKTtcclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IHJtO1xyXG5cclxuICAgIHJldHVybiB4LnRpbWVzKDAuNSk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGFyY3NpbmUgKGludmVyc2Ugc2luZSkgaW4gcmFkaWFucyBvZiB0aGUgdmFsdWUgb2YgdGhpc1xyXG4gICAqIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBEb21haW46IFstSW5maW5pdHksIEluZmluaXR5XVxyXG4gICAqIFJhbmdlOiBbLXBpLzIsIHBpLzJdXHJcbiAgICpcclxuICAgKiBhc2luKHgpID0gMiphdGFuKHgvKDEgKyBzcXJ0KDEgLSB4XjIpKSlcclxuICAgKlxyXG4gICAqIGFzaW4oMCkgICAgICAgPSAwXHJcbiAgICogYXNpbigtMCkgICAgICA9IC0wXHJcbiAgICogYXNpbigxLzIpICAgICA9IHBpLzZcclxuICAgKiBhc2luKC0xLzIpICAgID0gLXBpLzZcclxuICAgKiBhc2luKDEpICAgICAgID0gcGkvMlxyXG4gICAqIGFzaW4oLTEpICAgICAgPSAtcGkvMlxyXG4gICAqIGFzaW4ofHh8ID4gMSkgPSBOYU5cclxuICAgKiBhc2luKE5hTikgICAgID0gTmFOXHJcbiAgICpcclxuICAgKiBUT0RPPyBDb21wYXJlIHBlcmZvcm1hbmNlIG9mIFRheWxvciBzZXJpZXMuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmludmVyc2VTaW5lID0gUC5hc2luID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGhhbGZQaSwgayxcclxuICAgICAgcHIsIHJtLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKHguaXNaZXJvKCkpIHJldHVybiBuZXcgQ3Rvcih4KTtcclxuXHJcbiAgICBrID0geC5hYnMoKS5jbXAoMSk7XHJcbiAgICBwciA9IEN0b3IucHJlY2lzaW9uO1xyXG4gICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG5cclxuICAgIGlmIChrICE9PSAtMSkge1xyXG5cclxuICAgICAgLy8gfHh8IGlzIDFcclxuICAgICAgaWYgKGsgPT09IDApIHtcclxuICAgICAgICBoYWxmUGkgPSBnZXRQaShDdG9yLCBwciArIDQsIHJtKS50aW1lcygwLjUpO1xyXG4gICAgICAgIGhhbGZQaS5zID0geC5zO1xyXG4gICAgICAgIHJldHVybiBoYWxmUGk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIHx4fCA+IDEgb3IgeCBpcyBOYU5cclxuICAgICAgcmV0dXJuIG5ldyBDdG9yKE5hTik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVE9ETz8gU3BlY2lhbCBjYXNlIGFzaW4oMS8yKSA9IHBpLzYgYW5kIGFzaW4oLTEvMikgPSAtcGkvNlxyXG5cclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHIgKyA2O1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IDE7XHJcblxyXG4gICAgeCA9IHguZGl2KG5ldyBDdG9yKDEpLm1pbnVzKHgudGltZXMoeCkpLnNxcnQoKS5wbHVzKDEpKS5hdGFuKCk7XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwcjtcclxuICAgIEN0b3Iucm91bmRpbmcgPSBybTtcclxuXHJcbiAgICByZXR1cm4geC50aW1lcygyKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYXJjdGFuZ2VudCAoaW52ZXJzZSB0YW5nZW50KSBpbiByYWRpYW5zIG9mIHRoZSB2YWx1ZVxyXG4gICAqIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICogUmFuZ2U6IFstcGkvMiwgcGkvMl1cclxuICAgKlxyXG4gICAqIGF0YW4oeCkgPSB4IC0geF4zLzMgKyB4XjUvNSAtIHheNy83ICsgLi4uXHJcbiAgICpcclxuICAgKiBhdGFuKDApICAgICAgICAgPSAwXHJcbiAgICogYXRhbigtMCkgICAgICAgID0gLTBcclxuICAgKiBhdGFuKDEpICAgICAgICAgPSBwaS80XHJcbiAgICogYXRhbigtMSkgICAgICAgID0gLXBpLzRcclxuICAgKiBhdGFuKEluZmluaXR5KSAgPSBwaS8yXHJcbiAgICogYXRhbigtSW5maW5pdHkpID0gLXBpLzJcclxuICAgKiBhdGFuKE5hTikgICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaW52ZXJzZVRhbmdlbnQgPSBQLmF0YW4gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgaSwgaiwgaywgbiwgcHgsIHQsIHIsIHdwciwgeDIsXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcixcclxuICAgICAgcHIgPSBDdG9yLnByZWNpc2lvbixcclxuICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpKSB7XHJcbiAgICAgIGlmICgheC5zKSByZXR1cm4gbmV3IEN0b3IoTmFOKTtcclxuICAgICAgaWYgKHByICsgNCA8PSBQSV9QUkVDSVNJT04pIHtcclxuICAgICAgICByID0gZ2V0UGkoQ3RvciwgcHIgKyA0LCBybSkudGltZXMoMC41KTtcclxuICAgICAgICByLnMgPSB4LnM7XHJcbiAgICAgICAgcmV0dXJuIHI7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoeC5pc1plcm8oKSkge1xyXG4gICAgICByZXR1cm4gbmV3IEN0b3IoeCk7XHJcbiAgICB9IGVsc2UgaWYgKHguYWJzKCkuZXEoMSkgJiYgcHIgKyA0IDw9IFBJX1BSRUNJU0lPTikge1xyXG4gICAgICByID0gZ2V0UGkoQ3RvciwgcHIgKyA0LCBybSkudGltZXMoMC4yNSk7XHJcbiAgICAgIHIucyA9IHgucztcclxuICAgICAgcmV0dXJuIHI7XHJcbiAgICB9XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSB3cHIgPSBwciArIDEwO1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IDE7XHJcblxyXG4gICAgLy8gVE9ETz8gaWYgKHggPj0gMSAmJiBwciA8PSBQSV9QUkVDSVNJT04pIGF0YW4oeCkgPSBoYWxmUGkgKiB4LnMgLSBhdGFuKDEgLyB4KTtcclxuXHJcbiAgICAvLyBBcmd1bWVudCByZWR1Y3Rpb25cclxuICAgIC8vIEVuc3VyZSB8eHwgPCAwLjQyXHJcbiAgICAvLyBhdGFuKHgpID0gMiAqIGF0YW4oeCAvICgxICsgc3FydCgxICsgeF4yKSkpXHJcblxyXG4gICAgayA9IE1hdGgubWluKDI4LCB3cHIgLyBMT0dfQkFTRSArIDIgfCAwKTtcclxuXHJcbiAgICBmb3IgKGkgPSBrOyBpOyAtLWkpIHggPSB4LmRpdih4LnRpbWVzKHgpLnBsdXMoMSkuc3FydCgpLnBsdXMoMSkpO1xyXG5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcblxyXG4gICAgaiA9IE1hdGguY2VpbCh3cHIgLyBMT0dfQkFTRSk7XHJcbiAgICBuID0gMTtcclxuICAgIHgyID0geC50aW1lcyh4KTtcclxuICAgIHIgPSBuZXcgQ3Rvcih4KTtcclxuICAgIHB4ID0geDtcclxuXHJcbiAgICAvLyBhdGFuKHgpID0geCAtIHheMy8zICsgeF41LzUgLSB4XjcvNyArIC4uLlxyXG4gICAgZm9yICg7IGkgIT09IC0xOykge1xyXG4gICAgICBweCA9IHB4LnRpbWVzKHgyKTtcclxuICAgICAgdCA9IHIubWludXMocHguZGl2KG4gKz0gMikpO1xyXG5cclxuICAgICAgcHggPSBweC50aW1lcyh4Mik7XHJcbiAgICAgIHIgPSB0LnBsdXMocHguZGl2KG4gKz0gMikpO1xyXG5cclxuICAgICAgaWYgKHIuZFtqXSAhPT0gdm9pZCAwKSBmb3IgKGkgPSBqOyByLmRbaV0gPT09IHQuZFtpXSAmJiBpLS07KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaykgciA9IHIudGltZXMoMiA8PCAoayAtIDEpKTtcclxuXHJcbiAgICBleHRlcm5hbCA9IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHIsIEN0b3IucHJlY2lzaW9uID0gcHIsIEN0b3Iucm91bmRpbmcgPSBybSwgdHJ1ZSk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpcyBhIGZpbml0ZSBudW1iZXIsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmlzRmluaXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuICEhdGhpcy5kO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgYW4gaW50ZWdlciwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaXNJbnRlZ2VyID0gUC5pc0ludCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiAhIXRoaXMuZCAmJiBtYXRoZmxvb3IodGhpcy5lIC8gTE9HX0JBU0UpID4gdGhpcy5kLmxlbmd0aCAtIDI7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpcyBOYU4sIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmlzTmFOID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuICF0aGlzLnM7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRydWUgaWYgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpcyBuZWdhdGl2ZSwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaXNOZWdhdGl2ZSA9IFAuaXNOZWcgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zIDwgMDtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIHBvc2l0aXZlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5pc1Bvc2l0aXZlID0gUC5pc1BvcyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHJldHVybiB0aGlzLnMgPiAwO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgMCBvciAtMCwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAuaXNaZXJvID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuICEhdGhpcy5kICYmIHRoaXMuZFswXSA9PT0gMDtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGlzIGxlc3MgdGhhbiBgeWAsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXHJcbiAgICpcclxuICAgKi9cclxuICBQLmxlc3NUaGFuID0gUC5sdCA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICByZXR1cm4gdGhpcy5jbXAoeSkgPCAwO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0cnVlIGlmIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGB5YCwgb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAubGVzc1RoYW5PckVxdWFsVG8gPSBQLmx0ZSA9IGZ1bmN0aW9uICh5KSB7XHJcbiAgICByZXR1cm4gdGhpcy5jbXAoeSkgPCAxO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0aGUgbG9nYXJpdGhtIG9mIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgdG8gdGhlIHNwZWNpZmllZCBiYXNlLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIElmIG5vIGJhc2UgaXMgc3BlY2lmaWVkLCByZXR1cm4gbG9nWzEwXShhcmcpLlxyXG4gICAqXHJcbiAgICogbG9nW2Jhc2VdKGFyZykgPSBsbihhcmcpIC8gbG4oYmFzZSlcclxuICAgKlxyXG4gICAqIFRoZSByZXN1bHQgd2lsbCBhbHdheXMgYmUgY29ycmVjdGx5IHJvdW5kZWQgaWYgdGhlIGJhc2Ugb2YgdGhlIGxvZyBpcyAxMCwgYW5kICdhbG1vc3QgYWx3YXlzJ1xyXG4gICAqIG90aGVyd2lzZTpcclxuICAgKlxyXG4gICAqIERlcGVuZGluZyBvbiB0aGUgcm91bmRpbmcgbW9kZSwgdGhlIHJlc3VsdCBtYXkgYmUgaW5jb3JyZWN0bHkgcm91bmRlZCBpZiB0aGUgZmlyc3QgZmlmdGVlblxyXG4gICAqIHJvdW5kaW5nIGRpZ2l0cyBhcmUgWzQ5XTk5OTk5OTk5OTk5OTk5IG9yIFs1MF0wMDAwMDAwMDAwMDAwMC4gSW4gdGhhdCBjYXNlLCB0aGUgbWF4aW11bSBlcnJvclxyXG4gICAqIGJldHdlZW4gdGhlIHJlc3VsdCBhbmQgdGhlIGNvcnJlY3RseSByb3VuZGVkIHJlc3VsdCB3aWxsIGJlIG9uZSB1bHAgKHVuaXQgaW4gdGhlIGxhc3QgcGxhY2UpLlxyXG4gICAqXHJcbiAgICogbG9nWy1iXShhKSAgICAgICA9IE5hTlxyXG4gICAqIGxvZ1swXShhKSAgICAgICAgPSBOYU5cclxuICAgKiBsb2dbMV0oYSkgICAgICAgID0gTmFOXHJcbiAgICogbG9nW05hTl0oYSkgICAgICA9IE5hTlxyXG4gICAqIGxvZ1tJbmZpbml0eV0oYSkgPSBOYU5cclxuICAgKiBsb2dbYl0oMCkgICAgICAgID0gLUluZmluaXR5XHJcbiAgICogbG9nW2JdKC0wKSAgICAgICA9IC1JbmZpbml0eVxyXG4gICAqIGxvZ1tiXSgtYSkgICAgICAgPSBOYU5cclxuICAgKiBsb2dbYl0oMSkgICAgICAgID0gMFxyXG4gICAqIGxvZ1tiXShJbmZpbml0eSkgPSBJbmZpbml0eVxyXG4gICAqIGxvZ1tiXShOYU4pICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqIFtiYXNlXSB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBUaGUgYmFzZSBvZiB0aGUgbG9nYXJpdGhtLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5sb2dhcml0aG0gPSBQLmxvZyA9IGZ1bmN0aW9uIChiYXNlKSB7XHJcbiAgICB2YXIgaXNCYXNlMTAsIGQsIGRlbm9taW5hdG9yLCBrLCBpbmYsIG51bSwgc2QsIHIsXHJcbiAgICAgIGFyZyA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSBhcmcuY29uc3RydWN0b3IsXHJcbiAgICAgIHByID0gQ3Rvci5wcmVjaXNpb24sXHJcbiAgICAgIHJtID0gQ3Rvci5yb3VuZGluZyxcclxuICAgICAgZ3VhcmQgPSA1O1xyXG5cclxuICAgIC8vIERlZmF1bHQgYmFzZSBpcyAxMC5cclxuICAgIGlmIChiYXNlID09IG51bGwpIHtcclxuICAgICAgYmFzZSA9IG5ldyBDdG9yKDEwKTtcclxuICAgICAgaXNCYXNlMTAgPSB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYmFzZSA9IG5ldyBDdG9yKGJhc2UpO1xyXG4gICAgICBkID0gYmFzZS5kO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIE5hTiBpZiBiYXNlIGlzIG5lZ2F0aXZlLCBvciBub24tZmluaXRlLCBvciBpcyAwIG9yIDEuXHJcbiAgICAgIGlmIChiYXNlLnMgPCAwIHx8ICFkIHx8ICFkWzBdIHx8IGJhc2UuZXEoMSkpIHJldHVybiBuZXcgQ3RvcihOYU4pO1xyXG5cclxuICAgICAgaXNCYXNlMTAgPSBiYXNlLmVxKDEwKTtcclxuICAgIH1cclxuXHJcbiAgICBkID0gYXJnLmQ7XHJcblxyXG4gICAgLy8gSXMgYXJnIG5lZ2F0aXZlLCBub24tZmluaXRlLCAwIG9yIDE/XHJcbiAgICBpZiAoYXJnLnMgPCAwIHx8ICFkIHx8ICFkWzBdIHx8IGFyZy5lcSgxKSkge1xyXG4gICAgICByZXR1cm4gbmV3IEN0b3IoZCAmJiAhZFswXSA/IC0xIC8gMCA6IGFyZy5zICE9IDEgPyBOYU4gOiBkID8gMCA6IDEgLyAwKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUaGUgcmVzdWx0IHdpbGwgaGF2ZSBhIG5vbi10ZXJtaW5hdGluZyBkZWNpbWFsIGV4cGFuc2lvbiBpZiBiYXNlIGlzIDEwIGFuZCBhcmcgaXMgbm90IGFuXHJcbiAgICAvLyBpbnRlZ2VyIHBvd2VyIG9mIDEwLlxyXG4gICAgaWYgKGlzQmFzZTEwKSB7XHJcbiAgICAgIGlmIChkLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICBpbmYgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvciAoayA9IGRbMF07IGsgJSAxMCA9PT0gMDspIGsgLz0gMTA7XHJcbiAgICAgICAgaW5mID0gayAhPT0gMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcbiAgICBzZCA9IHByICsgZ3VhcmQ7XHJcbiAgICBudW0gPSBuYXR1cmFsTG9nYXJpdGhtKGFyZywgc2QpO1xyXG4gICAgZGVub21pbmF0b3IgPSBpc0Jhc2UxMCA/IGdldExuMTAoQ3Rvciwgc2QgKyAxMCkgOiBuYXR1cmFsTG9nYXJpdGhtKGJhc2UsIHNkKTtcclxuXHJcbiAgICAvLyBUaGUgcmVzdWx0IHdpbGwgaGF2ZSA1IHJvdW5kaW5nIGRpZ2l0cy5cclxuICAgIHIgPSBkaXZpZGUobnVtLCBkZW5vbWluYXRvciwgc2QsIDEpO1xyXG5cclxuICAgIC8vIElmIGF0IGEgcm91bmRpbmcgYm91bmRhcnksIGkuZS4gdGhlIHJlc3VsdCdzIHJvdW5kaW5nIGRpZ2l0cyBhcmUgWzQ5XTk5OTkgb3IgWzUwXTAwMDAsXHJcbiAgICAvLyBjYWxjdWxhdGUgMTAgZnVydGhlciBkaWdpdHMuXHJcbiAgICAvL1xyXG4gICAgLy8gSWYgdGhlIHJlc3VsdCBpcyBrbm93biB0byBoYXZlIGFuIGluZmluaXRlIGRlY2ltYWwgZXhwYW5zaW9uLCByZXBlYXQgdGhpcyB1bnRpbCBpdCBpcyBjbGVhclxyXG4gICAgLy8gdGhhdCB0aGUgcmVzdWx0IGlzIGFib3ZlIG9yIGJlbG93IHRoZSBib3VuZGFyeS4gT3RoZXJ3aXNlLCBpZiBhZnRlciBjYWxjdWxhdGluZyB0aGUgMTBcclxuICAgIC8vIGZ1cnRoZXIgZGlnaXRzLCB0aGUgbGFzdCAxNCBhcmUgbmluZXMsIHJvdW5kIHVwIGFuZCBhc3N1bWUgdGhlIHJlc3VsdCBpcyBleGFjdC5cclxuICAgIC8vIEFsc28gYXNzdW1lIHRoZSByZXN1bHQgaXMgZXhhY3QgaWYgdGhlIGxhc3QgMTQgYXJlIHplcm8uXHJcbiAgICAvL1xyXG4gICAgLy8gRXhhbXBsZSBvZiBhIHJlc3VsdCB0aGF0IHdpbGwgYmUgaW5jb3JyZWN0bHkgcm91bmRlZDpcclxuICAgIC8vIGxvZ1sxMDQ4NTc2XSg0NTAzNTk5NjI3MzcwNTAyKSA9IDIuNjAwMDAwMDAwMDAwMDAwMDk2MTAyNzk1MTE0NDQ3NDYuLi5cclxuICAgIC8vIFRoZSBhYm92ZSByZXN1bHQgY29ycmVjdGx5IHJvdW5kZWQgdXNpbmcgUk9VTkRfQ0VJTCB0byAxIGRlY2ltYWwgcGxhY2Ugc2hvdWxkIGJlIDIuNywgYnV0IGl0XHJcbiAgICAvLyB3aWxsIGJlIGdpdmVuIGFzIDIuNiBhcyB0aGVyZSBhcmUgMTUgemVyb3MgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHJlcXVlc3RlZCBkZWNpbWFsIHBsYWNlLCBzb1xyXG4gICAgLy8gdGhlIGV4YWN0IHJlc3VsdCB3b3VsZCBiZSBhc3N1bWVkIHRvIGJlIDIuNiwgd2hpY2ggcm91bmRlZCB1c2luZyBST1VORF9DRUlMIHRvIDEgZGVjaW1hbFxyXG4gICAgLy8gcGxhY2UgaXMgc3RpbGwgMi42LlxyXG4gICAgaWYgKGNoZWNrUm91bmRpbmdEaWdpdHMoci5kLCBrID0gcHIsIHJtKSkge1xyXG5cclxuICAgICAgZG8ge1xyXG4gICAgICAgIHNkICs9IDEwO1xyXG4gICAgICAgIG51bSA9IG5hdHVyYWxMb2dhcml0aG0oYXJnLCBzZCk7XHJcbiAgICAgICAgZGVub21pbmF0b3IgPSBpc0Jhc2UxMCA/IGdldExuMTAoQ3Rvciwgc2QgKyAxMCkgOiBuYXR1cmFsTG9nYXJpdGhtKGJhc2UsIHNkKTtcclxuICAgICAgICByID0gZGl2aWRlKG51bSwgZGVub21pbmF0b3IsIHNkLCAxKTtcclxuXHJcbiAgICAgICAgaWYgKCFpbmYpIHtcclxuXHJcbiAgICAgICAgICAvLyBDaGVjayBmb3IgMTQgbmluZXMgZnJvbSB0aGUgMm5kIHJvdW5kaW5nIGRpZ2l0LCBhcyB0aGUgZmlyc3QgbWF5IGJlIDQuXHJcbiAgICAgICAgICBpZiAoK2RpZ2l0c1RvU3RyaW5nKHIuZCkuc2xpY2UoayArIDEsIGsgKyAxNSkgKyAxID09IDFlMTQpIHtcclxuICAgICAgICAgICAgciA9IGZpbmFsaXNlKHIsIHByICsgMSwgMCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IHdoaWxlIChjaGVja1JvdW5kaW5nRGlnaXRzKHIuZCwgayArPSAxMCwgcm0pKTtcclxuICAgIH1cclxuXHJcbiAgICBleHRlcm5hbCA9IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHIsIHByLCBybSk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIG1heGltdW0gb2YgdGhlIGFyZ3VtZW50cyBhbmQgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbC5cclxuICAgKlxyXG4gICAqIGFyZ3VtZW50cyB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgUC5tYXggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBBcnJheS5wcm90b3R5cGUucHVzaC5jYWxsKGFyZ3VtZW50cywgdGhpcyk7XHJcbiAgICByZXR1cm4gbWF4T3JNaW4odGhpcy5jb25zdHJ1Y3RvciwgYXJndW1lbnRzLCAnbHQnKTtcclxuICB9O1xyXG4gICAqL1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbWluaW11bSBvZiB0aGUgYXJndW1lbnRzIGFuZCB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICBQLm1pbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIEFycmF5LnByb3RvdHlwZS5wdXNoLmNhbGwoYXJndW1lbnRzLCB0aGlzKTtcclxuICAgIHJldHVybiBtYXhPck1pbih0aGlzLmNvbnN0cnVjdG9yLCBhcmd1bWVudHMsICdndCcpO1xyXG4gIH07XHJcbiAgICovXHJcblxyXG5cclxuICAvKlxyXG4gICAqICBuIC0gMCA9IG5cclxuICAgKiAgbiAtIE4gPSBOXHJcbiAgICogIG4gLSBJID0gLUlcclxuICAgKiAgMCAtIG4gPSAtblxyXG4gICAqICAwIC0gMCA9IDBcclxuICAgKiAgMCAtIE4gPSBOXHJcbiAgICogIDAgLSBJID0gLUlcclxuICAgKiAgTiAtIG4gPSBOXHJcbiAgICogIE4gLSAwID0gTlxyXG4gICAqICBOIC0gTiA9IE5cclxuICAgKiAgTiAtIEkgPSBOXHJcbiAgICogIEkgLSBuID0gSVxyXG4gICAqICBJIC0gMCA9IElcclxuICAgKiAgSSAtIE4gPSBOXHJcbiAgICogIEkgLSBJID0gTlxyXG4gICAqXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBtaW51cyBgeWAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5taW51cyA9IFAuc3ViID0gZnVuY3Rpb24gKHkpIHtcclxuICAgIHZhciBkLCBlLCBpLCBqLCBrLCBsZW4sIHByLCBybSwgeGQsIHhlLCB4TFR5LCB5ZCxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIHkgPSBuZXcgQ3Rvcih5KTtcclxuXHJcbiAgICAvLyBJZiBlaXRoZXIgaXMgbm90IGZpbml0ZS4uLlxyXG4gICAgaWYgKCF4LmQgfHwgIXkuZCkge1xyXG5cclxuICAgICAgLy8gUmV0dXJuIE5hTiBpZiBlaXRoZXIgaXMgTmFOLlxyXG4gICAgICBpZiAoIXgucyB8fCAheS5zKSB5ID0gbmV3IEN0b3IoTmFOKTtcclxuXHJcbiAgICAgIC8vIFJldHVybiB5IG5lZ2F0ZWQgaWYgeCBpcyBmaW5pdGUgYW5kIHkgaXMgwrFJbmZpbml0eS5cclxuICAgICAgZWxzZSBpZiAoeC5kKSB5LnMgPSAteS5zO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIHggaWYgeSBpcyBmaW5pdGUgYW5kIHggaXMgwrFJbmZpbml0eS5cclxuICAgICAgLy8gUmV0dXJuIHggaWYgYm90aCBhcmUgwrFJbmZpbml0eSB3aXRoIGRpZmZlcmVudCBzaWducy5cclxuICAgICAgLy8gUmV0dXJuIE5hTiBpZiBib3RoIGFyZSDCsUluZmluaXR5IHdpdGggdGhlIHNhbWUgc2lnbi5cclxuICAgICAgZWxzZSB5ID0gbmV3IEN0b3IoeS5kIHx8IHgucyAhPT0geS5zID8geCA6IE5hTik7XHJcblxyXG4gICAgICByZXR1cm4geTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiBzaWducyBkaWZmZXIuLi5cclxuICAgIGlmICh4LnMgIT0geS5zKSB7XHJcbiAgICAgIHkucyA9IC15LnM7XHJcbiAgICAgIHJldHVybiB4LnBsdXMoeSk7XHJcbiAgICB9XHJcblxyXG4gICAgeGQgPSB4LmQ7XHJcbiAgICB5ZCA9IHkuZDtcclxuICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcblxyXG4gICAgLy8gSWYgZWl0aGVyIGlzIHplcm8uLi5cclxuICAgIGlmICgheGRbMF0gfHwgIXlkWzBdKSB7XHJcblxyXG4gICAgICAvLyBSZXR1cm4geSBuZWdhdGVkIGlmIHggaXMgemVybyBhbmQgeSBpcyBub24temVyby5cclxuICAgICAgaWYgKHlkWzBdKSB5LnMgPSAteS5zO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIHggaWYgeSBpcyB6ZXJvIGFuZCB4IGlzIG5vbi16ZXJvLlxyXG4gICAgICBlbHNlIGlmICh4ZFswXSkgeSA9IG5ldyBDdG9yKHgpO1xyXG5cclxuICAgICAgLy8gUmV0dXJuIHplcm8gaWYgYm90aCBhcmUgemVyby5cclxuICAgICAgLy8gRnJvbSBJRUVFIDc1NCAoMjAwOCkgNi4zOiAwIC0gMCA9IC0wIC0gLTAgPSAtMCB3aGVuIHJvdW5kaW5nIHRvIC1JbmZpbml0eS5cclxuICAgICAgZWxzZSByZXR1cm4gbmV3IEN0b3Iocm0gPT09IDMgPyAtMCA6IDApO1xyXG5cclxuICAgICAgcmV0dXJuIGV4dGVybmFsID8gZmluYWxpc2UoeSwgcHIsIHJtKSA6IHk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8geCBhbmQgeSBhcmUgZmluaXRlLCBub24temVybyBudW1iZXJzIHdpdGggdGhlIHNhbWUgc2lnbi5cclxuXHJcbiAgICAvLyBDYWxjdWxhdGUgYmFzZSAxZTcgZXhwb25lbnRzLlxyXG4gICAgZSA9IG1hdGhmbG9vcih5LmUgLyBMT0dfQkFTRSk7XHJcbiAgICB4ZSA9IG1hdGhmbG9vcih4LmUgLyBMT0dfQkFTRSk7XHJcblxyXG4gICAgeGQgPSB4ZC5zbGljZSgpO1xyXG4gICAgayA9IHhlIC0gZTtcclxuXHJcbiAgICAvLyBJZiBiYXNlIDFlNyBleHBvbmVudHMgZGlmZmVyLi4uXHJcbiAgICBpZiAoaykge1xyXG4gICAgICB4TFR5ID0gayA8IDA7XHJcblxyXG4gICAgICBpZiAoeExUeSkge1xyXG4gICAgICAgIGQgPSB4ZDtcclxuICAgICAgICBrID0gLWs7XHJcbiAgICAgICAgbGVuID0geWQubGVuZ3RoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGQgPSB5ZDtcclxuICAgICAgICBlID0geGU7XHJcbiAgICAgICAgbGVuID0geGQubGVuZ3RoO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBOdW1iZXJzIHdpdGggbWFzc2l2ZWx5IGRpZmZlcmVudCBleHBvbmVudHMgd291bGQgcmVzdWx0IGluIGEgdmVyeSBoaWdoIG51bWJlciBvZlxyXG4gICAgICAvLyB6ZXJvcyBuZWVkaW5nIHRvIGJlIHByZXBlbmRlZCwgYnV0IHRoaXMgY2FuIGJlIGF2b2lkZWQgd2hpbGUgc3RpbGwgZW5zdXJpbmcgY29ycmVjdFxyXG4gICAgICAvLyByb3VuZGluZyBieSBsaW1pdGluZyB0aGUgbnVtYmVyIG9mIHplcm9zIHRvIGBNYXRoLmNlaWwocHIgLyBMT0dfQkFTRSkgKyAyYC5cclxuICAgICAgaSA9IE1hdGgubWF4KE1hdGguY2VpbChwciAvIExPR19CQVNFKSwgbGVuKSArIDI7XHJcblxyXG4gICAgICBpZiAoayA+IGkpIHtcclxuICAgICAgICBrID0gaTtcclxuICAgICAgICBkLmxlbmd0aCA9IDE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFByZXBlbmQgemVyb3MgdG8gZXF1YWxpc2UgZXhwb25lbnRzLlxyXG4gICAgICBkLnJldmVyc2UoKTtcclxuICAgICAgZm9yIChpID0gazsgaS0tOykgZC5wdXNoKDApO1xyXG4gICAgICBkLnJldmVyc2UoKTtcclxuXHJcbiAgICAvLyBCYXNlIDFlNyBleHBvbmVudHMgZXF1YWwuXHJcbiAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgLy8gQ2hlY2sgZGlnaXRzIHRvIGRldGVybWluZSB3aGljaCBpcyB0aGUgYmlnZ2VyIG51bWJlci5cclxuXHJcbiAgICAgIGkgPSB4ZC5sZW5ndGg7XHJcbiAgICAgIGxlbiA9IHlkLmxlbmd0aDtcclxuICAgICAgeExUeSA9IGkgPCBsZW47XHJcbiAgICAgIGlmICh4TFR5KSBsZW4gPSBpO1xyXG5cclxuICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHhkW2ldICE9IHlkW2ldKSB7XHJcbiAgICAgICAgICB4TFR5ID0geGRbaV0gPCB5ZFtpXTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgayA9IDA7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHhMVHkpIHtcclxuICAgICAgZCA9IHhkO1xyXG4gICAgICB4ZCA9IHlkO1xyXG4gICAgICB5ZCA9IGQ7XHJcbiAgICAgIHkucyA9IC15LnM7XHJcbiAgICB9XHJcblxyXG4gICAgbGVuID0geGQubGVuZ3RoO1xyXG5cclxuICAgIC8vIEFwcGVuZCB6ZXJvcyB0byBgeGRgIGlmIHNob3J0ZXIuXHJcbiAgICAvLyBEb24ndCBhZGQgemVyb3MgdG8gYHlkYCBpZiBzaG9ydGVyIGFzIHN1YnRyYWN0aW9uIG9ubHkgbmVlZHMgdG8gc3RhcnQgYXQgYHlkYCBsZW5ndGguXHJcbiAgICBmb3IgKGkgPSB5ZC5sZW5ndGggLSBsZW47IGkgPiAwOyAtLWkpIHhkW2xlbisrXSA9IDA7XHJcblxyXG4gICAgLy8gU3VidHJhY3QgeWQgZnJvbSB4ZC5cclxuICAgIGZvciAoaSA9IHlkLmxlbmd0aDsgaSA+IGs7KSB7XHJcblxyXG4gICAgICBpZiAoeGRbLS1pXSA8IHlkW2ldKSB7XHJcbiAgICAgICAgZm9yIChqID0gaTsgaiAmJiB4ZFstLWpdID09PSAwOykgeGRbal0gPSBCQVNFIC0gMTtcclxuICAgICAgICAtLXhkW2pdO1xyXG4gICAgICAgIHhkW2ldICs9IEJBU0U7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHhkW2ldIC09IHlkW2ldO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlbW92ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgIGZvciAoOyB4ZFstLWxlbl0gPT09IDA7KSB4ZC5wb3AoKTtcclxuXHJcbiAgICAvLyBSZW1vdmUgbGVhZGluZyB6ZXJvcyBhbmQgYWRqdXN0IGV4cG9uZW50IGFjY29yZGluZ2x5LlxyXG4gICAgZm9yICg7IHhkWzBdID09PSAwOyB4ZC5zaGlmdCgpKSAtLWU7XHJcblxyXG4gICAgLy8gWmVybz9cclxuICAgIGlmICgheGRbMF0pIHJldHVybiBuZXcgQ3RvcihybSA9PT0gMyA/IC0wIDogMCk7XHJcblxyXG4gICAgeS5kID0geGQ7XHJcbiAgICB5LmUgPSBnZXRCYXNlMTBFeHBvbmVudCh4ZCwgZSk7XHJcblxyXG4gICAgcmV0dXJuIGV4dGVybmFsID8gZmluYWxpc2UoeSwgcHIsIHJtKSA6IHk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogICBuICUgMCA9ICBOXHJcbiAgICogICBuICUgTiA9ICBOXHJcbiAgICogICBuICUgSSA9ICBuXHJcbiAgICogICAwICUgbiA9ICAwXHJcbiAgICogIC0wICUgbiA9IC0wXHJcbiAgICogICAwICUgMCA9ICBOXHJcbiAgICogICAwICUgTiA9ICBOXHJcbiAgICogICAwICUgSSA9ICAwXHJcbiAgICogICBOICUgbiA9ICBOXHJcbiAgICogICBOICUgMCA9ICBOXHJcbiAgICogICBOICUgTiA9ICBOXHJcbiAgICogICBOICUgSSA9ICBOXHJcbiAgICogICBJICUgbiA9ICBOXHJcbiAgICogICBJICUgMCA9ICBOXHJcbiAgICogICBJICUgTiA9ICBOXHJcbiAgICogICBJICUgSSA9ICBOXHJcbiAgICpcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIG1vZHVsbyBgeWAsIHJvdW5kZWQgdG9cclxuICAgKiBgcHJlY2lzaW9uYCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogVGhlIHJlc3VsdCBkZXBlbmRzIG9uIHRoZSBtb2R1bG8gbW9kZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAubW9kdWxvID0gUC5tb2QgPSBmdW5jdGlvbiAoeSkge1xyXG4gICAgdmFyIHEsXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICB5ID0gbmV3IEN0b3IoeSk7XHJcblxyXG4gICAgLy8gUmV0dXJuIE5hTiBpZiB4IGlzIMKxSW5maW5pdHkgb3IgTmFOLCBvciB5IGlzIE5hTiBvciDCsTAuXHJcbiAgICBpZiAoIXguZCB8fCAheS5zIHx8IHkuZCAmJiAheS5kWzBdKSByZXR1cm4gbmV3IEN0b3IoTmFOKTtcclxuXHJcbiAgICAvLyBSZXR1cm4geCBpZiB5IGlzIMKxSW5maW5pdHkgb3IgeCBpcyDCsTAuXHJcbiAgICBpZiAoIXkuZCB8fCB4LmQgJiYgIXguZFswXSkge1xyXG4gICAgICByZXR1cm4gZmluYWxpc2UobmV3IEN0b3IoeCksIEN0b3IucHJlY2lzaW9uLCBDdG9yLnJvdW5kaW5nKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBQcmV2ZW50IHJvdW5kaW5nIG9mIGludGVybWVkaWF0ZSBjYWxjdWxhdGlvbnMuXHJcbiAgICBleHRlcm5hbCA9IGZhbHNlO1xyXG5cclxuICAgIGlmIChDdG9yLm1vZHVsbyA9PSA5KSB7XHJcblxyXG4gICAgICAvLyBFdWNsaWRpYW4gZGl2aXNpb246IHEgPSBzaWduKHkpICogZmxvb3IoeCAvIGFicyh5KSlcclxuICAgICAgLy8gcmVzdWx0ID0geCAtIHEgKiB5ICAgIHdoZXJlICAwIDw9IHJlc3VsdCA8IGFicyh5KVxyXG4gICAgICBxID0gZGl2aWRlKHgsIHkuYWJzKCksIDAsIDMsIDEpO1xyXG4gICAgICBxLnMgKj0geS5zO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcSA9IGRpdmlkZSh4LCB5LCAwLCBDdG9yLm1vZHVsbywgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgcSA9IHEudGltZXMoeSk7XHJcblxyXG4gICAgZXh0ZXJuYWwgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiB4Lm1pbnVzKHEpO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBuYXR1cmFsIGV4cG9uZW50aWFsIG9mIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwsXHJcbiAgICogaS5lLiB0aGUgYmFzZSBlIHJhaXNlZCB0byB0aGUgcG93ZXIgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYFxyXG4gICAqIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKi9cclxuICBQLm5hdHVyYWxFeHBvbmVudGlhbCA9IFAuZXhwID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIG5hdHVyYWxFeHBvbmVudGlhbCh0aGlzKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCxcclxuICAgKiByb3VuZGVkIHRvIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKi9cclxuICBQLm5hdHVyYWxMb2dhcml0aG0gPSBQLmxuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIG5hdHVyYWxMb2dhcml0aG0odGhpcyk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBuZWdhdGVkLCBpLmUuIGFzIGlmIG11bHRpcGxpZWQgYnlcclxuICAgKiAtMS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAubmVnYXRlZCA9IFAubmVnID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHggPSBuZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKTtcclxuICAgIHgucyA9IC14LnM7XHJcbiAgICByZXR1cm4gZmluYWxpc2UoeCk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogIG4gKyAwID0gblxyXG4gICAqICBuICsgTiA9IE5cclxuICAgKiAgbiArIEkgPSBJXHJcbiAgICogIDAgKyBuID0gblxyXG4gICAqICAwICsgMCA9IDBcclxuICAgKiAgMCArIE4gPSBOXHJcbiAgICogIDAgKyBJID0gSVxyXG4gICAqICBOICsgbiA9IE5cclxuICAgKiAgTiArIDAgPSBOXHJcbiAgICogIE4gKyBOID0gTlxyXG4gICAqICBOICsgSSA9IE5cclxuICAgKiAgSSArIG4gPSBJXHJcbiAgICogIEkgKyAwID0gSVxyXG4gICAqICBJICsgTiA9IE5cclxuICAgKiAgSSArIEkgPSBJXHJcbiAgICpcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIHBsdXMgYHlgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAucGx1cyA9IFAuYWRkID0gZnVuY3Rpb24gKHkpIHtcclxuICAgIHZhciBjYXJyeSwgZCwgZSwgaSwgaywgbGVuLCBwciwgcm0sIHhkLCB5ZCxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIHkgPSBuZXcgQ3Rvcih5KTtcclxuXHJcbiAgICAvLyBJZiBlaXRoZXIgaXMgbm90IGZpbml0ZS4uLlxyXG4gICAgaWYgKCF4LmQgfHwgIXkuZCkge1xyXG5cclxuICAgICAgLy8gUmV0dXJuIE5hTiBpZiBlaXRoZXIgaXMgTmFOLlxyXG4gICAgICBpZiAoIXgucyB8fCAheS5zKSB5ID0gbmV3IEN0b3IoTmFOKTtcclxuXHJcbiAgICAgIC8vIFJldHVybiB4IGlmIHkgaXMgZmluaXRlIGFuZCB4IGlzIMKxSW5maW5pdHkuXHJcbiAgICAgIC8vIFJldHVybiB4IGlmIGJvdGggYXJlIMKxSW5maW5pdHkgd2l0aCB0aGUgc2FtZSBzaWduLlxyXG4gICAgICAvLyBSZXR1cm4gTmFOIGlmIGJvdGggYXJlIMKxSW5maW5pdHkgd2l0aCBkaWZmZXJlbnQgc2lnbnMuXHJcbiAgICAgIC8vIFJldHVybiB5IGlmIHggaXMgZmluaXRlIGFuZCB5IGlzIMKxSW5maW5pdHkuXHJcbiAgICAgIGVsc2UgaWYgKCF4LmQpIHkgPSBuZXcgQ3Rvcih5LmQgfHwgeC5zID09PSB5LnMgPyB4IDogTmFOKTtcclxuXHJcbiAgICAgIHJldHVybiB5O1xyXG4gICAgfVxyXG5cclxuICAgICAvLyBJZiBzaWducyBkaWZmZXIuLi5cclxuICAgIGlmICh4LnMgIT0geS5zKSB7XHJcbiAgICAgIHkucyA9IC15LnM7XHJcbiAgICAgIHJldHVybiB4Lm1pbnVzKHkpO1xyXG4gICAgfVxyXG5cclxuICAgIHhkID0geC5kO1xyXG4gICAgeWQgPSB5LmQ7XHJcbiAgICBwciA9IEN0b3IucHJlY2lzaW9uO1xyXG4gICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG5cclxuICAgIC8vIElmIGVpdGhlciBpcyB6ZXJvLi4uXHJcbiAgICBpZiAoIXhkWzBdIHx8ICF5ZFswXSkge1xyXG5cclxuICAgICAgLy8gUmV0dXJuIHggaWYgeSBpcyB6ZXJvLlxyXG4gICAgICAvLyBSZXR1cm4geSBpZiB5IGlzIG5vbi16ZXJvLlxyXG4gICAgICBpZiAoIXlkWzBdKSB5ID0gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgICByZXR1cm4gZXh0ZXJuYWwgPyBmaW5hbGlzZSh5LCBwciwgcm0pIDogeTtcclxuICAgIH1cclxuXHJcbiAgICAvLyB4IGFuZCB5IGFyZSBmaW5pdGUsIG5vbi16ZXJvIG51bWJlcnMgd2l0aCB0aGUgc2FtZSBzaWduLlxyXG5cclxuICAgIC8vIENhbGN1bGF0ZSBiYXNlIDFlNyBleHBvbmVudHMuXHJcbiAgICBrID0gbWF0aGZsb29yKHguZSAvIExPR19CQVNFKTtcclxuICAgIGUgPSBtYXRoZmxvb3IoeS5lIC8gTE9HX0JBU0UpO1xyXG5cclxuICAgIHhkID0geGQuc2xpY2UoKTtcclxuICAgIGkgPSBrIC0gZTtcclxuXHJcbiAgICAvLyBJZiBiYXNlIDFlNyBleHBvbmVudHMgZGlmZmVyLi4uXHJcbiAgICBpZiAoaSkge1xyXG5cclxuICAgICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgICAgZCA9IHhkO1xyXG4gICAgICAgIGkgPSAtaTtcclxuICAgICAgICBsZW4gPSB5ZC5sZW5ndGg7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZCA9IHlkO1xyXG4gICAgICAgIGUgPSBrO1xyXG4gICAgICAgIGxlbiA9IHhkLmxlbmd0aDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTGltaXQgbnVtYmVyIG9mIHplcm9zIHByZXBlbmRlZCB0byBtYXgoY2VpbChwciAvIExPR19CQVNFKSwgbGVuKSArIDEuXHJcbiAgICAgIGsgPSBNYXRoLmNlaWwocHIgLyBMT0dfQkFTRSk7XHJcbiAgICAgIGxlbiA9IGsgPiBsZW4gPyBrICsgMSA6IGxlbiArIDE7XHJcblxyXG4gICAgICBpZiAoaSA+IGxlbikge1xyXG4gICAgICAgIGkgPSBsZW47XHJcbiAgICAgICAgZC5sZW5ndGggPSAxO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBQcmVwZW5kIHplcm9zIHRvIGVxdWFsaXNlIGV4cG9uZW50cy4gTm90ZTogRmFzdGVyIHRvIHVzZSByZXZlcnNlIHRoZW4gZG8gdW5zaGlmdHMuXHJcbiAgICAgIGQucmV2ZXJzZSgpO1xyXG4gICAgICBmb3IgKDsgaS0tOykgZC5wdXNoKDApO1xyXG4gICAgICBkLnJldmVyc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICBsZW4gPSB4ZC5sZW5ndGg7XHJcbiAgICBpID0geWQubGVuZ3RoO1xyXG5cclxuICAgIC8vIElmIHlkIGlzIGxvbmdlciB0aGFuIHhkLCBzd2FwIHhkIGFuZCB5ZCBzbyB4ZCBwb2ludHMgdG8gdGhlIGxvbmdlciBhcnJheS5cclxuICAgIGlmIChsZW4gLSBpIDwgMCkge1xyXG4gICAgICBpID0gbGVuO1xyXG4gICAgICBkID0geWQ7XHJcbiAgICAgIHlkID0geGQ7XHJcbiAgICAgIHhkID0gZDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBPbmx5IHN0YXJ0IGFkZGluZyBhdCB5ZC5sZW5ndGggLSAxIGFzIHRoZSBmdXJ0aGVyIGRpZ2l0cyBvZiB4ZCBjYW4gYmUgbGVmdCBhcyB0aGV5IGFyZS5cclxuICAgIGZvciAoY2FycnkgPSAwOyBpOykge1xyXG4gICAgICBjYXJyeSA9ICh4ZFstLWldID0geGRbaV0gKyB5ZFtpXSArIGNhcnJ5KSAvIEJBU0UgfCAwO1xyXG4gICAgICB4ZFtpXSAlPSBCQVNFO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjYXJyeSkge1xyXG4gICAgICB4ZC51bnNoaWZ0KGNhcnJ5KTtcclxuICAgICAgKytlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlbW92ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgIC8vIE5vIG5lZWQgdG8gY2hlY2sgZm9yIHplcm8sIGFzICt4ICsgK3kgIT0gMCAmJiAteCArIC15ICE9IDBcclxuICAgIGZvciAobGVuID0geGQubGVuZ3RoOyB4ZFstLWxlbl0gPT0gMDspIHhkLnBvcCgpO1xyXG5cclxuICAgIHkuZCA9IHhkO1xyXG4gICAgeS5lID0gZ2V0QmFzZTEwRXhwb25lbnQoeGQsIGUpO1xyXG5cclxuICAgIHJldHVybiBleHRlcm5hbCA/IGZpbmFsaXNlKHksIHByLCBybSkgOiB5O1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBvZiB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICogW3pdIHtib29sZWFufG51bWJlcn0gV2hldGhlciB0byBjb3VudCBpbnRlZ2VyLXBhcnQgdHJhaWxpbmcgemVyb3M6IHRydWUsIGZhbHNlLCAxIG9yIDAuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnByZWNpc2lvbiA9IFAuc2QgPSBmdW5jdGlvbiAoeikge1xyXG4gICAgdmFyIGssXHJcbiAgICAgIHggPSB0aGlzO1xyXG5cclxuICAgIGlmICh6ICE9PSB2b2lkIDAgJiYgeiAhPT0gISF6ICYmIHogIT09IDEgJiYgeiAhPT0gMCkgdGhyb3cgRXJyb3IoaW52YWxpZEFyZ3VtZW50ICsgeik7XHJcblxyXG4gICAgaWYgKHguZCkge1xyXG4gICAgICBrID0gZ2V0UHJlY2lzaW9uKHguZCk7XHJcbiAgICAgIGlmICh6ICYmIHguZSArIDEgPiBrKSBrID0geC5lICsgMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGsgPSBOYU47XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGs7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCByb3VuZGVkIHRvIGEgd2hvbGUgbnVtYmVyIHVzaW5nXHJcbiAgICogcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5yb3VuZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKG5ldyBDdG9yKHgpLCB4LmUgKyAxLCBDdG9yLnJvdW5kaW5nKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgc2luZSBvZiB0aGUgdmFsdWUgaW4gcmFkaWFucyBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBEb21haW46IFstSW5maW5pdHksIEluZmluaXR5XVxyXG4gICAqIFJhbmdlOiBbLTEsIDFdXHJcbiAgICpcclxuICAgKiBzaW4oeCkgPSB4IC0geF4zLzMhICsgeF41LzUhIC0gLi4uXHJcbiAgICpcclxuICAgKiBzaW4oMCkgICAgICAgICA9IDBcclxuICAgKiBzaW4oLTApICAgICAgICA9IC0wXHJcbiAgICogc2luKEluZmluaXR5KSAgPSBOYU5cclxuICAgKiBzaW4oLUluZmluaXR5KSA9IE5hTlxyXG4gICAqIHNpbihOYU4pICAgICAgID0gTmFOXHJcbiAgICpcclxuICAgKi9cclxuICBQLnNpbmUgPSBQLnNpbiA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBwciwgcm0sXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICBpZiAoIXguaXNGaW5pdGUoKSkgcmV0dXJuIG5ldyBDdG9yKE5hTik7XHJcbiAgICBpZiAoeC5pc1plcm8oKSkgcmV0dXJuIG5ldyBDdG9yKHgpO1xyXG5cclxuICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByICsgTWF0aC5tYXgoeC5lLCB4LnNkKCkpICsgTE9HX0JBU0U7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gMTtcclxuXHJcbiAgICB4ID0gc2luZShDdG9yLCB0b0xlc3NUaGFuSGFsZlBpKEN0b3IsIHgpKTtcclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IHJtO1xyXG5cclxuICAgIHJldHVybiBmaW5hbGlzZShxdWFkcmFudCA+IDIgPyB4Lm5lZygpIDogeCwgcHIsIHJtLCB0cnVlKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgc3F1YXJlIHJvb3Qgb2YgdGhpcyBEZWNpbWFsLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqICBzcXJ0KC1uKSA9ICBOXHJcbiAgICogIHNxcnQoTikgID0gIE5cclxuICAgKiAgc3FydCgtSSkgPSAgTlxyXG4gICAqICBzcXJ0KEkpICA9ICBJXHJcbiAgICogIHNxcnQoMCkgID0gIDBcclxuICAgKiAgc3FydCgtMCkgPSAtMFxyXG4gICAqXHJcbiAgICovXHJcbiAgUC5zcXVhcmVSb290ID0gUC5zcXJ0ID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIG0sIG4sIHNkLCByLCByZXAsIHQsXHJcbiAgICAgIHggPSB0aGlzLFxyXG4gICAgICBkID0geC5kLFxyXG4gICAgICBlID0geC5lLFxyXG4gICAgICBzID0geC5zLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICAvLyBOZWdhdGl2ZS9OYU4vSW5maW5pdHkvemVybz9cclxuICAgIGlmIChzICE9PSAxIHx8ICFkIHx8ICFkWzBdKSB7XHJcbiAgICAgIHJldHVybiBuZXcgQ3RvcighcyB8fCBzIDwgMCAmJiAoIWQgfHwgZFswXSkgPyBOYU4gOiBkID8geCA6IDEgLyAwKTtcclxuICAgIH1cclxuXHJcbiAgICBleHRlcm5hbCA9IGZhbHNlO1xyXG5cclxuICAgIC8vIEluaXRpYWwgZXN0aW1hdGUuXHJcbiAgICBzID0gTWF0aC5zcXJ0KCt4KTtcclxuXHJcbiAgICAvLyBNYXRoLnNxcnQgdW5kZXJmbG93L292ZXJmbG93P1xyXG4gICAgLy8gUGFzcyB4IHRvIE1hdGguc3FydCBhcyBpbnRlZ2VyLCB0aGVuIGFkanVzdCB0aGUgZXhwb25lbnQgb2YgdGhlIHJlc3VsdC5cclxuICAgIGlmIChzID09IDAgfHwgcyA9PSAxIC8gMCkge1xyXG4gICAgICBuID0gZGlnaXRzVG9TdHJpbmcoZCk7XHJcblxyXG4gICAgICBpZiAoKG4ubGVuZ3RoICsgZSkgJSAyID09IDApIG4gKz0gJzAnO1xyXG4gICAgICBzID0gTWF0aC5zcXJ0KG4pO1xyXG4gICAgICBlID0gbWF0aGZsb29yKChlICsgMSkgLyAyKSAtIChlIDwgMCB8fCBlICUgMik7XHJcblxyXG4gICAgICBpZiAocyA9PSAxIC8gMCkge1xyXG4gICAgICAgIG4gPSAnMWUnICsgZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuID0gcy50b0V4cG9uZW50aWFsKCk7XHJcbiAgICAgICAgbiA9IG4uc2xpY2UoMCwgbi5pbmRleE9mKCdlJykgKyAxKSArIGU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHIgPSBuZXcgQ3RvcihuKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHIgPSBuZXcgQ3RvcihzLnRvU3RyaW5nKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHNkID0gKGUgPSBDdG9yLnByZWNpc2lvbikgKyAzO1xyXG5cclxuICAgIC8vIE5ld3Rvbi1SYXBoc29uIGl0ZXJhdGlvbi5cclxuICAgIGZvciAoOzspIHtcclxuICAgICAgdCA9IHI7XHJcbiAgICAgIHIgPSB0LnBsdXMoZGl2aWRlKHgsIHQsIHNkICsgMiwgMSkpLnRpbWVzKDAuNSk7XHJcblxyXG4gICAgICAvLyBUT0RPPyBSZXBsYWNlIHdpdGggZm9yLWxvb3AgYW5kIGNoZWNrUm91bmRpbmdEaWdpdHMuXHJcbiAgICAgIGlmIChkaWdpdHNUb1N0cmluZyh0LmQpLnNsaWNlKDAsIHNkKSA9PT0gKG4gPSBkaWdpdHNUb1N0cmluZyhyLmQpKS5zbGljZSgwLCBzZCkpIHtcclxuICAgICAgICBuID0gbi5zbGljZShzZCAtIDMsIHNkICsgMSk7XHJcblxyXG4gICAgICAgIC8vIFRoZSA0dGggcm91bmRpbmcgZGlnaXQgbWF5IGJlIGluIGVycm9yIGJ5IC0xIHNvIGlmIHRoZSA0IHJvdW5kaW5nIGRpZ2l0cyBhcmUgOTk5OSBvclxyXG4gICAgICAgIC8vIDQ5OTksIGkuZS4gYXBwcm9hY2hpbmcgYSByb3VuZGluZyBib3VuZGFyeSwgY29udGludWUgdGhlIGl0ZXJhdGlvbi5cclxuICAgICAgICBpZiAobiA9PSAnOTk5OScgfHwgIXJlcCAmJiBuID09ICc0OTk5Jykge1xyXG5cclxuICAgICAgICAgIC8vIE9uIHRoZSBmaXJzdCBpdGVyYXRpb24gb25seSwgY2hlY2sgdG8gc2VlIGlmIHJvdW5kaW5nIHVwIGdpdmVzIHRoZSBleGFjdCByZXN1bHQgYXMgdGhlXHJcbiAgICAgICAgICAvLyBuaW5lcyBtYXkgaW5maW5pdGVseSByZXBlYXQuXHJcbiAgICAgICAgICBpZiAoIXJlcCkge1xyXG4gICAgICAgICAgICBmaW5hbGlzZSh0LCBlICsgMSwgMCk7XHJcblxyXG4gICAgICAgICAgICBpZiAodC50aW1lcyh0KS5lcSh4KSkge1xyXG4gICAgICAgICAgICAgIHIgPSB0O1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgc2QgKz0gNDtcclxuICAgICAgICAgIHJlcCA9IDE7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAvLyBJZiB0aGUgcm91bmRpbmcgZGlnaXRzIGFyZSBudWxsLCAwezAsNH0gb3IgNTB7MCwzfSwgY2hlY2sgZm9yIGFuIGV4YWN0IHJlc3VsdC5cclxuICAgICAgICAgIC8vIElmIG5vdCwgdGhlbiB0aGVyZSBhcmUgZnVydGhlciBkaWdpdHMgYW5kIG0gd2lsbCBiZSB0cnV0aHkuXHJcbiAgICAgICAgICBpZiAoIStuIHx8ICErbi5zbGljZSgxKSAmJiBuLmNoYXJBdCgwKSA9PSAnNScpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIFRydW5jYXRlIHRvIHRoZSBmaXJzdCByb3VuZGluZyBkaWdpdC5cclxuICAgICAgICAgICAgZmluYWxpc2UociwgZSArIDEsIDEpO1xyXG4gICAgICAgICAgICBtID0gIXIudGltZXMocikuZXEoeCk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZXh0ZXJuYWwgPSB0cnVlO1xyXG5cclxuICAgIHJldHVybiBmaW5hbGlzZShyLCBlLCBDdG9yLnJvdW5kaW5nLCBtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdGFuZ2VudCBvZiB0aGUgdmFsdWUgaW4gcmFkaWFucyBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICpcclxuICAgKiBEb21haW46IFstSW5maW5pdHksIEluZmluaXR5XVxyXG4gICAqIFJhbmdlOiBbLUluZmluaXR5LCBJbmZpbml0eV1cclxuICAgKlxyXG4gICAqIHRhbigwKSAgICAgICAgID0gMFxyXG4gICAqIHRhbigtMCkgICAgICAgID0gLTBcclxuICAgKiB0YW4oSW5maW5pdHkpICA9IE5hTlxyXG4gICAqIHRhbigtSW5maW5pdHkpID0gTmFOXHJcbiAgICogdGFuKE5hTikgICAgICAgPSBOYU5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAudGFuZ2VudCA9IFAudGFuID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIHByLCBybSxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpKSByZXR1cm4gbmV3IEN0b3IoTmFOKTtcclxuICAgIGlmICh4LmlzWmVybygpKSByZXR1cm4gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIEN0b3IucHJlY2lzaW9uID0gcHIgKyAxMDtcclxuICAgIEN0b3Iucm91bmRpbmcgPSAxO1xyXG5cclxuICAgIHggPSB4LnNpbigpO1xyXG4gICAgeC5zID0gMTtcclxuICAgIHggPSBkaXZpZGUoeCwgbmV3IEN0b3IoMSkubWludXMoeC50aW1lcyh4KSkuc3FydCgpLCBwciArIDEwLCAwKTtcclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHByO1xyXG4gICAgQ3Rvci5yb3VuZGluZyA9IHJtO1xyXG5cclxuICAgIHJldHVybiBmaW5hbGlzZShxdWFkcmFudCA9PSAyIHx8IHF1YWRyYW50ID09IDQgPyB4Lm5lZygpIDogeCwgcHIsIHJtLCB0cnVlKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiAgbiAqIDAgPSAwXHJcbiAgICogIG4gKiBOID0gTlxyXG4gICAqICBuICogSSA9IElcclxuICAgKiAgMCAqIG4gPSAwXHJcbiAgICogIDAgKiAwID0gMFxyXG4gICAqICAwICogTiA9IE5cclxuICAgKiAgMCAqIEkgPSBOXHJcbiAgICogIE4gKiBuID0gTlxyXG4gICAqICBOICogMCA9IE5cclxuICAgKiAgTiAqIE4gPSBOXHJcbiAgICogIE4gKiBJID0gTlxyXG4gICAqICBJICogbiA9IElcclxuICAgKiAgSSAqIDAgPSBOXHJcbiAgICogIEkgKiBOID0gTlxyXG4gICAqICBJICogSSA9IElcclxuICAgKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoaXMgRGVjaW1hbCB0aW1lcyBgeWAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnRcclxuICAgKiBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC50aW1lcyA9IFAubXVsID0gZnVuY3Rpb24gKHkpIHtcclxuICAgIHZhciBjYXJyeSwgZSwgaSwgaywgciwgckwsIHQsIHhkTCwgeWRMLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3IsXHJcbiAgICAgIHhkID0geC5kLFxyXG4gICAgICB5ZCA9ICh5ID0gbmV3IEN0b3IoeSkpLmQ7XHJcblxyXG4gICAgeS5zICo9IHgucztcclxuXHJcbiAgICAgLy8gSWYgZWl0aGVyIGlzIE5hTiwgwrFJbmZpbml0eSBvciDCsTAuLi5cclxuICAgIGlmICgheGQgfHwgIXhkWzBdIHx8ICF5ZCB8fCAheWRbMF0pIHtcclxuXHJcbiAgICAgIHJldHVybiBuZXcgQ3RvcigheS5zIHx8IHhkICYmICF4ZFswXSAmJiAheWQgfHwgeWQgJiYgIXlkWzBdICYmICF4ZFxyXG5cclxuICAgICAgICAvLyBSZXR1cm4gTmFOIGlmIGVpdGhlciBpcyBOYU4uXHJcbiAgICAgICAgLy8gUmV0dXJuIE5hTiBpZiB4IGlzIMKxMCBhbmQgeSBpcyDCsUluZmluaXR5LCBvciB5IGlzIMKxMCBhbmQgeCBpcyDCsUluZmluaXR5LlxyXG4gICAgICAgID8gTmFOXHJcblxyXG4gICAgICAgIC8vIFJldHVybiDCsUluZmluaXR5IGlmIGVpdGhlciBpcyDCsUluZmluaXR5LlxyXG4gICAgICAgIC8vIFJldHVybiDCsTAgaWYgZWl0aGVyIGlzIMKxMC5cclxuICAgICAgICA6ICF4ZCB8fCAheWQgPyB5LnMgLyAwIDogeS5zICogMCk7XHJcbiAgICB9XHJcblxyXG4gICAgZSA9IG1hdGhmbG9vcih4LmUgLyBMT0dfQkFTRSkgKyBtYXRoZmxvb3IoeS5lIC8gTE9HX0JBU0UpO1xyXG4gICAgeGRMID0geGQubGVuZ3RoO1xyXG4gICAgeWRMID0geWQubGVuZ3RoO1xyXG5cclxuICAgIC8vIEVuc3VyZSB4ZCBwb2ludHMgdG8gdGhlIGxvbmdlciBhcnJheS5cclxuICAgIGlmICh4ZEwgPCB5ZEwpIHtcclxuICAgICAgciA9IHhkO1xyXG4gICAgICB4ZCA9IHlkO1xyXG4gICAgICB5ZCA9IHI7XHJcbiAgICAgIHJMID0geGRMO1xyXG4gICAgICB4ZEwgPSB5ZEw7XHJcbiAgICAgIHlkTCA9IHJMO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEluaXRpYWxpc2UgdGhlIHJlc3VsdCBhcnJheSB3aXRoIHplcm9zLlxyXG4gICAgciA9IFtdO1xyXG4gICAgckwgPSB4ZEwgKyB5ZEw7XHJcbiAgICBmb3IgKGkgPSByTDsgaS0tOykgci5wdXNoKDApO1xyXG5cclxuICAgIC8vIE11bHRpcGx5IVxyXG4gICAgZm9yIChpID0geWRMOyAtLWkgPj0gMDspIHtcclxuICAgICAgY2FycnkgPSAwO1xyXG4gICAgICBmb3IgKGsgPSB4ZEwgKyBpOyBrID4gaTspIHtcclxuICAgICAgICB0ID0gcltrXSArIHlkW2ldICogeGRbayAtIGkgLSAxXSArIGNhcnJ5O1xyXG4gICAgICAgIHJbay0tXSA9IHQgJSBCQVNFIHwgMDtcclxuICAgICAgICBjYXJyeSA9IHQgLyBCQVNFIHwgMDtcclxuICAgICAgfVxyXG5cclxuICAgICAgcltrXSA9IChyW2tdICsgY2FycnkpICUgQkFTRSB8IDA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgZm9yICg7ICFyWy0tckxdOykgci5wb3AoKTtcclxuXHJcbiAgICBpZiAoY2FycnkpICsrZTtcclxuICAgIGVsc2Ugci5zaGlmdCgpO1xyXG5cclxuICAgIHkuZCA9IHI7XHJcbiAgICB5LmUgPSBnZXRCYXNlMTBFeHBvbmVudChyLCBlKTtcclxuXHJcbiAgICByZXR1cm4gZXh0ZXJuYWwgPyBmaW5hbGlzZSh5LCBDdG9yLnByZWNpc2lvbiwgQ3Rvci5yb3VuZGluZykgOiB5O1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpbiBiYXNlIDIsIHJvdW5kIHRvIGBzZGAgc2lnbmlmaWNhbnRcclxuICAgKiBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm1gLlxyXG4gICAqXHJcbiAgICogSWYgdGhlIG9wdGlvbmFsIGBzZGAgYXJndW1lbnQgaXMgcHJlc2VudCB0aGVuIHJldHVybiBiaW5hcnkgZXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICpcclxuICAgKiBbc2RdIHtudW1iZXJ9IFNpZ25pZmljYW50IGRpZ2l0cy4gSW50ZWdlciwgMSB0byBNQVhfRElHSVRTIGluY2x1c2l2ZS5cclxuICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvQmluYXJ5ID0gZnVuY3Rpb24gKHNkLCBybSkge1xyXG4gICAgcmV0dXJuIHRvU3RyaW5nQmluYXJ5KHRoaXMsIDIsIHNkLCBybSk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCByb3VuZGVkIHRvIGEgbWF4aW11bSBvZiBgZHBgXHJcbiAgICogZGVjaW1hbCBwbGFjZXMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm1gIG9yIGByb3VuZGluZ2AgaWYgYHJtYCBpcyBvbWl0dGVkLlxyXG4gICAqXHJcbiAgICogSWYgYGRwYCBpcyBvbWl0dGVkLCByZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICogW2RwXSB7bnVtYmVyfSBEZWNpbWFsIHBsYWNlcy4gSW50ZWdlciwgMCB0byBNQVhfRElHSVRTIGluY2x1c2l2ZS5cclxuICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvRGVjaW1hbFBsYWNlcyA9IFAudG9EUCA9IGZ1bmN0aW9uIChkcCwgcm0pIHtcclxuICAgIHZhciB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgeCA9IG5ldyBDdG9yKHgpO1xyXG4gICAgaWYgKGRwID09PSB2b2lkIDApIHJldHVybiB4O1xyXG5cclxuICAgIGNoZWNrSW50MzIoZHAsIDAsIE1BWF9ESUdJVFMpO1xyXG5cclxuICAgIGlmIChybSA9PT0gdm9pZCAwKSBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICBlbHNlIGNoZWNrSW50MzIocm0sIDAsIDgpO1xyXG5cclxuICAgIHJldHVybiBmaW5hbGlzZSh4LCBkcCArIHguZSArIDEsIHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaW4gZXhwb25lbnRpYWwgbm90YXRpb24gcm91bmRlZCB0b1xyXG4gICAqIGBkcGAgZml4ZWQgZGVjaW1hbCBwbGFjZXMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogW2RwXSB7bnVtYmVyfSBEZWNpbWFsIHBsYWNlcy4gSW50ZWdlciwgMCB0byBNQVhfRElHSVRTIGluY2x1c2l2ZS5cclxuICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvRXhwb25lbnRpYWwgPSBmdW5jdGlvbiAoZHAsIHJtKSB7XHJcbiAgICB2YXIgc3RyLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKGRwID09PSB2b2lkIDApIHtcclxuICAgICAgc3RyID0gZmluaXRlVG9TdHJpbmcoeCwgdHJ1ZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjaGVja0ludDMyKGRwLCAwLCBNQVhfRElHSVRTKTtcclxuXHJcbiAgICAgIGlmIChybSA9PT0gdm9pZCAwKSBybSA9IEN0b3Iucm91bmRpbmc7XHJcbiAgICAgIGVsc2UgY2hlY2tJbnQzMihybSwgMCwgOCk7XHJcblxyXG4gICAgICB4ID0gZmluYWxpc2UobmV3IEN0b3IoeCksIGRwICsgMSwgcm0pO1xyXG4gICAgICBzdHIgPSBmaW5pdGVUb1N0cmluZyh4LCB0cnVlLCBkcCArIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB4LmlzTmVnKCkgJiYgIXguaXNaZXJvKCkgPyAnLScgKyBzdHIgOiBzdHI7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIGluIG5vcm1hbCAoZml4ZWQtcG9pbnQpIG5vdGF0aW9uIHRvXHJcbiAgICogYGRwYCBmaXhlZCBkZWNpbWFsIHBsYWNlcyBhbmQgcm91bmRlZCB1c2luZyByb3VuZGluZyBtb2RlIGBybWAgb3IgYHJvdW5kaW5nYCBpZiBgcm1gIGlzXHJcbiAgICogb21pdHRlZC5cclxuICAgKlxyXG4gICAqIEFzIHdpdGggSmF2YVNjcmlwdCBudW1iZXJzLCAoLTApLnRvRml4ZWQoMCkgaXMgJzAnLCBidXQgZS5nLiAoLTAuMDAwMDEpLnRvRml4ZWQoMCkgaXMgJy0wJy5cclxuICAgKlxyXG4gICAqIFtkcF0ge251bWJlcn0gRGVjaW1hbCBwbGFjZXMuIEludGVnZXIsIDAgdG8gTUFYX0RJR0lUUyBpbmNsdXNpdmUuXHJcbiAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAqXHJcbiAgICogKC0wKS50b0ZpeGVkKDApIGlzICcwJywgYnV0ICgtMC4xKS50b0ZpeGVkKDApIGlzICctMCcuXHJcbiAgICogKC0wKS50b0ZpeGVkKDEpIGlzICcwLjAnLCBidXQgKC0wLjAxKS50b0ZpeGVkKDEpIGlzICctMC4wJy5cclxuICAgKiAoLTApLnRvRml4ZWQoMykgaXMgJzAuMDAwJy5cclxuICAgKiAoLTAuNSkudG9GaXhlZCgwKSBpcyAnLTAnLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC50b0ZpeGVkID0gZnVuY3Rpb24gKGRwLCBybSkge1xyXG4gICAgdmFyIHN0ciwgeSxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmIChkcCA9PT0gdm9pZCAwKSB7XHJcbiAgICAgIHN0ciA9IGZpbml0ZVRvU3RyaW5nKHgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2hlY2tJbnQzMihkcCwgMCwgTUFYX0RJR0lUUyk7XHJcblxyXG4gICAgICBpZiAocm0gPT09IHZvaWQgMCkgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgICBlbHNlIGNoZWNrSW50MzIocm0sIDAsIDgpO1xyXG5cclxuICAgICAgeSA9IGZpbmFsaXNlKG5ldyBDdG9yKHgpLCBkcCArIHguZSArIDEsIHJtKTtcclxuICAgICAgc3RyID0gZmluaXRlVG9TdHJpbmcoeSwgZmFsc2UsIGRwICsgeS5lICsgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVG8gZGV0ZXJtaW5lIHdoZXRoZXIgdG8gYWRkIHRoZSBtaW51cyBzaWduIGxvb2sgYXQgdGhlIHZhbHVlIGJlZm9yZSBpdCB3YXMgcm91bmRlZCxcclxuICAgIC8vIGkuZS4gbG9vayBhdCBgeGAgcmF0aGVyIHRoYW4gYHlgLlxyXG4gICAgcmV0dXJuIHguaXNOZWcoKSAmJiAheC5pc1plcm8oKSA/ICctJyArIHN0ciA6IHN0cjtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYW4gYXJyYXkgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgYXMgYSBzaW1wbGUgZnJhY3Rpb24gd2l0aCBhbiBpbnRlZ2VyXHJcbiAgICogbnVtZXJhdG9yIGFuZCBhbiBpbnRlZ2VyIGRlbm9taW5hdG9yLlxyXG4gICAqXHJcbiAgICogVGhlIGRlbm9taW5hdG9yIHdpbGwgYmUgYSBwb3NpdGl2ZSBub24temVybyB2YWx1ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNwZWNpZmllZCBtYXhpbXVtXHJcbiAgICogZGVub21pbmF0b3IuIElmIGEgbWF4aW11bSBkZW5vbWluYXRvciBpcyBub3Qgc3BlY2lmaWVkLCB0aGUgZGVub21pbmF0b3Igd2lsbCBiZSB0aGUgbG93ZXN0XHJcbiAgICogdmFsdWUgbmVjZXNzYXJ5IHRvIHJlcHJlc2VudCB0aGUgbnVtYmVyIGV4YWN0bHkuXHJcbiAgICpcclxuICAgKiBbbWF4RF0ge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gTWF4aW11bSBkZW5vbWluYXRvci4gSW50ZWdlciA+PSAxIGFuZCA8IEluZmluaXR5LlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC50b0ZyYWN0aW9uID0gZnVuY3Rpb24gKG1heEQpIHtcclxuICAgIHZhciBkLCBkMCwgZDEsIGQyLCBlLCBrLCBuLCBuMCwgbjEsIHByLCBxLCByLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgeGQgPSB4LmQsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmICgheGQpIHJldHVybiBuZXcgQ3Rvcih4KTtcclxuXHJcbiAgICBuMSA9IGQwID0gbmV3IEN0b3IoMSk7XHJcbiAgICBkMSA9IG4wID0gbmV3IEN0b3IoMCk7XHJcblxyXG4gICAgZCA9IG5ldyBDdG9yKGQxKTtcclxuICAgIGUgPSBkLmUgPSBnZXRQcmVjaXNpb24oeGQpIC0geC5lIC0gMTtcclxuICAgIGsgPSBlICUgTE9HX0JBU0U7XHJcbiAgICBkLmRbMF0gPSBtYXRocG93KDEwLCBrIDwgMCA/IExPR19CQVNFICsgayA6IGspO1xyXG5cclxuICAgIGlmIChtYXhEID09IG51bGwpIHtcclxuXHJcbiAgICAgIC8vIGQgaXMgMTAqKmUsIHRoZSBtaW5pbXVtIG1heC1kZW5vbWluYXRvciBuZWVkZWQuXHJcbiAgICAgIG1heEQgPSBlID4gMCA/IGQgOiBuMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIG4gPSBuZXcgQ3RvcihtYXhEKTtcclxuICAgICAgaWYgKCFuLmlzSW50KCkgfHwgbi5sdChuMSkpIHRocm93IEVycm9yKGludmFsaWRBcmd1bWVudCArIG4pO1xyXG4gICAgICBtYXhEID0gbi5ndChkKSA/IChlID4gMCA/IGQgOiBuMSkgOiBuO1xyXG4gICAgfVxyXG5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcbiAgICBuID0gbmV3IEN0b3IoZGlnaXRzVG9TdHJpbmcoeGQpKTtcclxuICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IGUgPSB4ZC5sZW5ndGggKiBMT0dfQkFTRSAqIDI7XHJcblxyXG4gICAgZm9yICg7OykgIHtcclxuICAgICAgcSA9IGRpdmlkZShuLCBkLCAwLCAxLCAxKTtcclxuICAgICAgZDIgPSBkMC5wbHVzKHEudGltZXMoZDEpKTtcclxuICAgICAgaWYgKGQyLmNtcChtYXhEKSA9PSAxKSBicmVhaztcclxuICAgICAgZDAgPSBkMTtcclxuICAgICAgZDEgPSBkMjtcclxuICAgICAgZDIgPSBuMTtcclxuICAgICAgbjEgPSBuMC5wbHVzKHEudGltZXMoZDIpKTtcclxuICAgICAgbjAgPSBkMjtcclxuICAgICAgZDIgPSBkO1xyXG4gICAgICBkID0gbi5taW51cyhxLnRpbWVzKGQyKSk7XHJcbiAgICAgIG4gPSBkMjtcclxuICAgIH1cclxuXHJcbiAgICBkMiA9IGRpdmlkZShtYXhELm1pbnVzKGQwKSwgZDEsIDAsIDEsIDEpO1xyXG4gICAgbjAgPSBuMC5wbHVzKGQyLnRpbWVzKG4xKSk7XHJcbiAgICBkMCA9IGQwLnBsdXMoZDIudGltZXMoZDEpKTtcclxuICAgIG4wLnMgPSBuMS5zID0geC5zO1xyXG5cclxuICAgIC8vIERldGVybWluZSB3aGljaCBmcmFjdGlvbiBpcyBjbG9zZXIgdG8geCwgbjAvZDAgb3IgbjEvZDE/XHJcbiAgICByID0gZGl2aWRlKG4xLCBkMSwgZSwgMSkubWludXMoeCkuYWJzKCkuY21wKGRpdmlkZShuMCwgZDAsIGUsIDEpLm1pbnVzKHgpLmFicygpKSA8IDFcclxuICAgICAgICA/IFtuMSwgZDFdIDogW24wLCBkMF07XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSBwcjtcclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gcjtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgaW4gYmFzZSAxNiwgcm91bmQgdG8gYHNkYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGBybWAuXHJcbiAgICpcclxuICAgKiBJZiB0aGUgb3B0aW9uYWwgYHNkYCBhcmd1bWVudCBpcyBwcmVzZW50IHRoZW4gcmV0dXJuIGJpbmFyeSBleHBvbmVudGlhbCBub3RhdGlvbi5cclxuICAgKlxyXG4gICAqIFtzZF0ge251bWJlcn0gU2lnbmlmaWNhbnQgZGlnaXRzLiBJbnRlZ2VyLCAxIHRvIE1BWF9ESUdJVFMgaW5jbHVzaXZlLlxyXG4gICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9IZXhhZGVjaW1hbCA9IFAudG9IZXggPSBmdW5jdGlvbiAoc2QsIHJtKSB7XHJcbiAgICByZXR1cm4gdG9TdHJpbmdCaW5hcnkodGhpcywgMTYsIHNkLCBybSk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJucyBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBuZWFyZXN0IG11bHRpcGxlIG9mIGB5YCBpbiB0aGUgZGlyZWN0aW9uIG9mIHJvdW5kaW5nXHJcbiAgICogbW9kZSBgcm1gLCBvciBgRGVjaW1hbC5yb3VuZGluZ2AgaWYgYHJtYCBpcyBvbWl0dGVkLCB0byB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICogVGhlIHJldHVybiB2YWx1ZSB3aWxsIGFsd2F5cyBoYXZlIHRoZSBzYW1lIHNpZ24gYXMgdGhpcyBEZWNpbWFsLCB1bmxlc3MgZWl0aGVyIHRoaXMgRGVjaW1hbFxyXG4gICAqIG9yIGB5YCBpcyBOYU4sIGluIHdoaWNoIGNhc2UgdGhlIHJldHVybiB2YWx1ZSB3aWxsIGJlIGFsc28gYmUgTmFOLlxyXG4gICAqXHJcbiAgICogVGhlIHJldHVybiB2YWx1ZSBpcyBub3QgYWZmZWN0ZWQgYnkgdGhlIHZhbHVlIG9mIGBwcmVjaXNpb25gLlxyXG4gICAqXHJcbiAgICogeSB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBUaGUgbWFnbml0dWRlIHRvIHJvdW5kIHRvIGEgbXVsdGlwbGUgb2YuXHJcbiAgICogW3JtXSB7bnVtYmVyfSBSb3VuZGluZyBtb2RlLiBJbnRlZ2VyLCAwIHRvIDggaW5jbHVzaXZlLlxyXG4gICAqXHJcbiAgICogJ3RvTmVhcmVzdCgpIHJvdW5kaW5nIG1vZGUgbm90IGFuIGludGVnZXI6IHtybX0nXHJcbiAgICogJ3RvTmVhcmVzdCgpIHJvdW5kaW5nIG1vZGUgb3V0IG9mIHJhbmdlOiB7cm19J1xyXG4gICAqXHJcbiAgICovXHJcbiAgUC50b05lYXJlc3QgPSBmdW5jdGlvbiAoeSwgcm0pIHtcclxuICAgIHZhciB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgeCA9IG5ldyBDdG9yKHgpO1xyXG5cclxuICAgIGlmICh5ID09IG51bGwpIHtcclxuXHJcbiAgICAgIC8vIElmIHggaXMgbm90IGZpbml0ZSwgcmV0dXJuIHguXHJcbiAgICAgIGlmICgheC5kKSByZXR1cm4geDtcclxuXHJcbiAgICAgIHkgPSBuZXcgQ3RvcigxKTtcclxuICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgeSA9IG5ldyBDdG9yKHkpO1xyXG4gICAgICBpZiAocm0gPT09IHZvaWQgMCkge1xyXG4gICAgICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjaGVja0ludDMyKHJtLCAwLCA4KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gSWYgeCBpcyBub3QgZmluaXRlLCByZXR1cm4geCBpZiB5IGlzIG5vdCBOYU4sIGVsc2UgTmFOLlxyXG4gICAgICBpZiAoIXguZCkgcmV0dXJuIHkucyA/IHggOiB5O1xyXG5cclxuICAgICAgLy8gSWYgeSBpcyBub3QgZmluaXRlLCByZXR1cm4gSW5maW5pdHkgd2l0aCB0aGUgc2lnbiBvZiB4IGlmIHkgaXMgSW5maW5pdHksIGVsc2UgTmFOLlxyXG4gICAgICBpZiAoIXkuZCkge1xyXG4gICAgICAgIGlmICh5LnMpIHkucyA9IHgucztcclxuICAgICAgICByZXR1cm4geTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIHkgaXMgbm90IHplcm8sIGNhbGN1bGF0ZSB0aGUgbmVhcmVzdCBtdWx0aXBsZSBvZiB5IHRvIHguXHJcbiAgICBpZiAoeS5kWzBdKSB7XHJcbiAgICAgIGV4dGVybmFsID0gZmFsc2U7XHJcbiAgICAgIHggPSBkaXZpZGUoeCwgeSwgMCwgcm0sIDEpLnRpbWVzKHkpO1xyXG4gICAgICBleHRlcm5hbCA9IHRydWU7XHJcbiAgICAgIGZpbmFsaXNlKHgpO1xyXG5cclxuICAgIC8vIElmIHkgaXMgemVybywgcmV0dXJuIHplcm8gd2l0aCB0aGUgc2lnbiBvZiB4LlxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgeS5zID0geC5zO1xyXG4gICAgICB4ID0geTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geDtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBjb252ZXJ0ZWQgdG8gYSBudW1iZXIgcHJpbWl0aXZlLlxyXG4gICAqIFplcm8ga2VlcHMgaXRzIHNpZ24uXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvTnVtYmVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuICt0aGlzO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIHZhbHVlIG9mIHRoaXMgRGVjaW1hbCBpbiBiYXNlIDgsIHJvdW5kIHRvIGBzZGAgc2lnbmlmaWNhbnRcclxuICAgKiBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm1gLlxyXG4gICAqXHJcbiAgICogSWYgdGhlIG9wdGlvbmFsIGBzZGAgYXJndW1lbnQgaXMgcHJlc2VudCB0aGVuIHJldHVybiBiaW5hcnkgZXhwb25lbnRpYWwgbm90YXRpb24uXHJcbiAgICpcclxuICAgKiBbc2RdIHtudW1iZXJ9IFNpZ25pZmljYW50IGRpZ2l0cy4gSW50ZWdlciwgMSB0byBNQVhfRElHSVRTIGluY2x1c2l2ZS5cclxuICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvT2N0YWwgPSBmdW5jdGlvbiAoc2QsIHJtKSB7XHJcbiAgICByZXR1cm4gdG9TdHJpbmdCaW5hcnkodGhpcywgOCwgc2QsIHJtKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIHJhaXNlZCB0byB0aGUgcG93ZXIgYHlgLCByb3VuZGVkXHJcbiAgICogdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIEVDTUFTY3JpcHQgY29tcGxpYW50LlxyXG4gICAqXHJcbiAgICogICBwb3coeCwgTmFOKSAgICAgICAgICAgICAgICAgICAgICAgICAgID0gTmFOXHJcbiAgICogICBwb3coeCwgwrEwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICA9IDFcclxuXHJcbiAgICogICBwb3coTmFOLCBub24temVybykgICAgICAgICAgICAgICAgICAgID0gTmFOXHJcbiAgICogICBwb3coYWJzKHgpID4gMSwgK0luZmluaXR5KSAgICAgICAgICAgID0gK0luZmluaXR5XHJcbiAgICogICBwb3coYWJzKHgpID4gMSwgLUluZmluaXR5KSAgICAgICAgICAgID0gKzBcclxuICAgKiAgIHBvdyhhYnMoeCkgPT0gMSwgwrFJbmZpbml0eSkgICAgICAgICAgID0gTmFOXHJcbiAgICogICBwb3coYWJzKHgpIDwgMSwgK0luZmluaXR5KSAgICAgICAgICAgID0gKzBcclxuICAgKiAgIHBvdyhhYnMoeCkgPCAxLCAtSW5maW5pdHkpICAgICAgICAgICAgPSArSW5maW5pdHlcclxuICAgKiAgIHBvdygrSW5maW5pdHksIHkgPiAwKSAgICAgICAgICAgICAgICAgPSArSW5maW5pdHlcclxuICAgKiAgIHBvdygrSW5maW5pdHksIHkgPCAwKSAgICAgICAgICAgICAgICAgPSArMFxyXG4gICAqICAgcG93KC1JbmZpbml0eSwgb2RkIGludGVnZXIgPiAwKSAgICAgICA9IC1JbmZpbml0eVxyXG4gICAqICAgcG93KC1JbmZpbml0eSwgZXZlbiBpbnRlZ2VyID4gMCkgICAgICA9ICtJbmZpbml0eVxyXG4gICAqICAgcG93KC1JbmZpbml0eSwgb2RkIGludGVnZXIgPCAwKSAgICAgICA9IC0wXHJcbiAgICogICBwb3coLUluZmluaXR5LCBldmVuIGludGVnZXIgPCAwKSAgICAgID0gKzBcclxuICAgKiAgIHBvdygrMCwgeSA+IDApICAgICAgICAgICAgICAgICAgICAgICAgPSArMFxyXG4gICAqICAgcG93KCswLCB5IDwgMCkgICAgICAgICAgICAgICAgICAgICAgICA9ICtJbmZpbml0eVxyXG4gICAqICAgcG93KC0wLCBvZGQgaW50ZWdlciA+IDApICAgICAgICAgICAgICA9IC0wXHJcbiAgICogICBwb3coLTAsIGV2ZW4gaW50ZWdlciA+IDApICAgICAgICAgICAgID0gKzBcclxuICAgKiAgIHBvdygtMCwgb2RkIGludGVnZXIgPCAwKSAgICAgICAgICAgICAgPSAtSW5maW5pdHlcclxuICAgKiAgIHBvdygtMCwgZXZlbiBpbnRlZ2VyIDwgMCkgICAgICAgICAgICAgPSArSW5maW5pdHlcclxuICAgKiAgIHBvdyhmaW5pdGUgeCA8IDAsIGZpbml0ZSBub24taW50ZWdlcikgPSBOYU5cclxuICAgKlxyXG4gICAqIEZvciBub24taW50ZWdlciBvciB2ZXJ5IGxhcmdlIGV4cG9uZW50cyBwb3coeCwgeSkgaXMgY2FsY3VsYXRlZCB1c2luZ1xyXG4gICAqXHJcbiAgICogICB4XnkgPSBleHAoeSpsbih4KSlcclxuICAgKlxyXG4gICAqIEFzc3VtaW5nIHRoZSBmaXJzdCAxNSByb3VuZGluZyBkaWdpdHMgYXJlIGVhY2ggZXF1YWxseSBsaWtlbHkgdG8gYmUgYW55IGRpZ2l0IDAtOSwgdGhlXHJcbiAgICogcHJvYmFiaWxpdHkgb2YgYW4gaW5jb3JyZWN0bHkgcm91bmRlZCByZXN1bHRcclxuICAgKiBQKFs0OV05ezE0fSB8IFs1MF0wezE0fSkgPSAyICogMC4yICogMTBeLTE0ID0gNGUtMTUgPSAxLzIuNWUrMTRcclxuICAgKiBpLmUuIDEgaW4gMjUwLDAwMCwwMDAsMDAwLDAwMFxyXG4gICAqXHJcbiAgICogSWYgYSByZXN1bHQgaXMgaW5jb3JyZWN0bHkgcm91bmRlZCB0aGUgbWF4aW11bSBlcnJvciB3aWxsIGJlIDEgdWxwICh1bml0IGluIGxhc3QgcGxhY2UpLlxyXG4gICAqXHJcbiAgICogeSB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBUaGUgcG93ZXIgdG8gd2hpY2ggdG8gcmFpc2UgdGhpcyBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC50b1Bvd2VyID0gUC5wb3cgPSBmdW5jdGlvbiAoeSkge1xyXG4gICAgdmFyIGUsIGssIHByLCByLCBybSwgcyxcclxuICAgICAgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yLFxyXG4gICAgICB5biA9ICsoeSA9IG5ldyBDdG9yKHkpKTtcclxuXHJcbiAgICAvLyBFaXRoZXIgwrFJbmZpbml0eSwgTmFOIG9yIMKxMD9cclxuICAgIGlmICgheC5kIHx8ICF5LmQgfHwgIXguZFswXSB8fCAheS5kWzBdKSByZXR1cm4gbmV3IEN0b3IobWF0aHBvdygreCwgeW4pKTtcclxuXHJcbiAgICB4ID0gbmV3IEN0b3IoeCk7XHJcblxyXG4gICAgaWYgKHguZXEoMSkpIHJldHVybiB4O1xyXG5cclxuICAgIHByID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICBybSA9IEN0b3Iucm91bmRpbmc7XHJcblxyXG4gICAgaWYgKHkuZXEoMSkpIHJldHVybiBmaW5hbGlzZSh4LCBwciwgcm0pO1xyXG5cclxuICAgIC8vIHkgZXhwb25lbnRcclxuICAgIGUgPSBtYXRoZmxvb3IoeS5lIC8gTE9HX0JBU0UpO1xyXG5cclxuICAgIC8vIElmIHkgaXMgYSBzbWFsbCBpbnRlZ2VyIHVzZSB0aGUgJ2V4cG9uZW50aWF0aW9uIGJ5IHNxdWFyaW5nJyBhbGdvcml0aG0uXHJcbiAgICBpZiAoZSA+PSB5LmQubGVuZ3RoIC0gMSAmJiAoayA9IHluIDwgMCA/IC15biA6IHluKSA8PSBNQVhfU0FGRV9JTlRFR0VSKSB7XHJcbiAgICAgIHIgPSBpbnRQb3coQ3RvciwgeCwgaywgcHIpO1xyXG4gICAgICByZXR1cm4geS5zIDwgMCA/IG5ldyBDdG9yKDEpLmRpdihyKSA6IGZpbmFsaXNlKHIsIHByLCBybSk7XHJcbiAgICB9XHJcblxyXG4gICAgcyA9IHgucztcclxuXHJcbiAgICAvLyBpZiB4IGlzIG5lZ2F0aXZlXHJcbiAgICBpZiAocyA8IDApIHtcclxuXHJcbiAgICAgIC8vIGlmIHkgaXMgbm90IGFuIGludGVnZXJcclxuICAgICAgaWYgKGUgPCB5LmQubGVuZ3RoIC0gMSkgcmV0dXJuIG5ldyBDdG9yKE5hTik7XHJcblxyXG4gICAgICAvLyBSZXN1bHQgaXMgcG9zaXRpdmUgaWYgeCBpcyBuZWdhdGl2ZSBhbmQgdGhlIGxhc3QgZGlnaXQgb2YgaW50ZWdlciB5IGlzIGV2ZW4uXHJcbiAgICAgIGlmICgoeS5kW2VdICYgMSkgPT0gMCkgcyA9IDE7XHJcblxyXG4gICAgICAvLyBpZiB4LmVxKC0xKVxyXG4gICAgICBpZiAoeC5lID09IDAgJiYgeC5kWzBdID09IDEgJiYgeC5kLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgeC5zID0gcztcclxuICAgICAgICByZXR1cm4geDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEVzdGltYXRlIHJlc3VsdCBleHBvbmVudC5cclxuICAgIC8vIHheeSA9IDEwXmUsICB3aGVyZSBlID0geSAqIGxvZzEwKHgpXHJcbiAgICAvLyBsb2cxMCh4KSA9IGxvZzEwKHhfc2lnbmlmaWNhbmQpICsgeF9leHBvbmVudFxyXG4gICAgLy8gbG9nMTAoeF9zaWduaWZpY2FuZCkgPSBsbih4X3NpZ25pZmljYW5kKSAvIGxuKDEwKVxyXG4gICAgayA9IG1hdGhwb3coK3gsIHluKTtcclxuICAgIGUgPSBrID09IDAgfHwgIWlzRmluaXRlKGspXHJcbiAgICAgID8gbWF0aGZsb29yKHluICogKE1hdGgubG9nKCcwLicgKyBkaWdpdHNUb1N0cmluZyh4LmQpKSAvIE1hdGguTE4xMCArIHguZSArIDEpKVxyXG4gICAgICA6IG5ldyBDdG9yKGsgKyAnJykuZTtcclxuXHJcbiAgICAvLyBFeHBvbmVudCBlc3RpbWF0ZSBtYXkgYmUgaW5jb3JyZWN0IGUuZy4geDogMC45OTk5OTk5OTk5OTk5OTk5OTksIHk6IDIuMjksIGU6IDAsIHIuZTogLTEuXHJcblxyXG4gICAgLy8gT3ZlcmZsb3cvdW5kZXJmbG93P1xyXG4gICAgaWYgKGUgPiBDdG9yLm1heEUgKyAxIHx8IGUgPCBDdG9yLm1pbkUgLSAxKSByZXR1cm4gbmV3IEN0b3IoZSA+IDAgPyBzIC8gMCA6IDApO1xyXG5cclxuICAgIGV4dGVybmFsID0gZmFsc2U7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0geC5zID0gMTtcclxuXHJcbiAgICAvLyBFc3RpbWF0ZSB0aGUgZXh0cmEgZ3VhcmQgZGlnaXRzIG5lZWRlZCB0byBlbnN1cmUgZml2ZSBjb3JyZWN0IHJvdW5kaW5nIGRpZ2l0cyBmcm9tXHJcbiAgICAvLyBuYXR1cmFsTG9nYXJpdGhtKHgpLiBFeGFtcGxlIG9mIGZhaWx1cmUgd2l0aG91dCB0aGVzZSBleHRyYSBkaWdpdHMgKHByZWNpc2lvbjogMTApOlxyXG4gICAgLy8gbmV3IERlY2ltYWwoMi4zMjQ1NikucG93KCcyMDg3OTg3NDM2NTM0NTY2LjQ2NDExJylcclxuICAgIC8vIHNob3VsZCBiZSAxLjE2MjM3NzgyM2UrNzY0OTE0OTA1MTczODE1LCBidXQgaXMgMS4xNjIzNTU4MjNlKzc2NDkxNDkwNTE3MzgxNVxyXG4gICAgayA9IE1hdGgubWluKDEyLCAoZSArICcnKS5sZW5ndGgpO1xyXG5cclxuICAgIC8vIHIgPSB4XnkgPSBleHAoeSpsbih4KSlcclxuICAgIHIgPSBuYXR1cmFsRXhwb25lbnRpYWwoeS50aW1lcyhuYXR1cmFsTG9nYXJpdGhtKHgsIHByICsgaykpLCBwcik7XHJcblxyXG4gICAgLy8gciBtYXkgYmUgSW5maW5pdHksIGUuZy4gKDAuOTk5OTk5OTk5OTk5OTk5OSkucG93KC0xZSs0MClcclxuICAgIGlmIChyLmQpIHtcclxuXHJcbiAgICAgIC8vIFRydW5jYXRlIHRvIHRoZSByZXF1aXJlZCBwcmVjaXNpb24gcGx1cyBmaXZlIHJvdW5kaW5nIGRpZ2l0cy5cclxuICAgICAgciA9IGZpbmFsaXNlKHIsIHByICsgNSwgMSk7XHJcblxyXG4gICAgICAvLyBJZiB0aGUgcm91bmRpbmcgZGlnaXRzIGFyZSBbNDldOTk5OSBvciBbNTBdMDAwMCBpbmNyZWFzZSB0aGUgcHJlY2lzaW9uIGJ5IDEwIGFuZCByZWNhbGN1bGF0ZVxyXG4gICAgICAvLyB0aGUgcmVzdWx0LlxyXG4gICAgICBpZiAoY2hlY2tSb3VuZGluZ0RpZ2l0cyhyLmQsIHByLCBybSkpIHtcclxuICAgICAgICBlID0gcHIgKyAxMDtcclxuXHJcbiAgICAgICAgLy8gVHJ1bmNhdGUgdG8gdGhlIGluY3JlYXNlZCBwcmVjaXNpb24gcGx1cyBmaXZlIHJvdW5kaW5nIGRpZ2l0cy5cclxuICAgICAgICByID0gZmluYWxpc2UobmF0dXJhbEV4cG9uZW50aWFsKHkudGltZXMobmF0dXJhbExvZ2FyaXRobSh4LCBlICsgaykpLCBlKSwgZSArIDUsIDEpO1xyXG5cclxuICAgICAgICAvLyBDaGVjayBmb3IgMTQgbmluZXMgZnJvbSB0aGUgMm5kIHJvdW5kaW5nIGRpZ2l0ICh0aGUgZmlyc3Qgcm91bmRpbmcgZGlnaXQgbWF5IGJlIDQgb3IgOSkuXHJcbiAgICAgICAgaWYgKCtkaWdpdHNUb1N0cmluZyhyLmQpLnNsaWNlKHByICsgMSwgcHIgKyAxNSkgKyAxID09IDFlMTQpIHtcclxuICAgICAgICAgIHIgPSBmaW5hbGlzZShyLCBwciArIDEsIDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHIucyA9IHM7XHJcbiAgICBleHRlcm5hbCA9IHRydWU7XHJcbiAgICBDdG9yLnJvdW5kaW5nID0gcm07XHJcblxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHIsIHByLCBybSk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsIHJvdW5kZWQgdG8gYHNkYCBzaWduaWZpY2FudCBkaWdpdHNcclxuICAgKiB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiBSZXR1cm4gZXhwb25lbnRpYWwgbm90YXRpb24gaWYgYHNkYCBpcyBsZXNzIHRoYW4gdGhlIG51bWJlciBvZiBkaWdpdHMgbmVjZXNzYXJ5IHRvIHJlcHJlc2VudFxyXG4gICAqIHRoZSBpbnRlZ2VyIHBhcnQgb2YgdGhlIHZhbHVlIGluIG5vcm1hbCBub3RhdGlvbi5cclxuICAgKlxyXG4gICAqIFtzZF0ge251bWJlcn0gU2lnbmlmaWNhbnQgZGlnaXRzLiBJbnRlZ2VyLCAxIHRvIE1BWF9ESUdJVFMgaW5jbHVzaXZlLlxyXG4gICAqIFtybV0ge251bWJlcn0gUm91bmRpbmcgbW9kZS4gSW50ZWdlciwgMCB0byA4IGluY2x1c2l2ZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIFAudG9QcmVjaXNpb24gPSBmdW5jdGlvbiAoc2QsIHJtKSB7XHJcbiAgICB2YXIgc3RyLFxyXG4gICAgICB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3I7XHJcblxyXG4gICAgaWYgKHNkID09PSB2b2lkIDApIHtcclxuICAgICAgc3RyID0gZmluaXRlVG9TdHJpbmcoeCwgeC5lIDw9IEN0b3IudG9FeHBOZWcgfHwgeC5lID49IEN0b3IudG9FeHBQb3MpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY2hlY2tJbnQzMihzZCwgMSwgTUFYX0RJR0lUUyk7XHJcblxyXG4gICAgICBpZiAocm0gPT09IHZvaWQgMCkgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgICBlbHNlIGNoZWNrSW50MzIocm0sIDAsIDgpO1xyXG5cclxuICAgICAgeCA9IGZpbmFsaXNlKG5ldyBDdG9yKHgpLCBzZCwgcm0pO1xyXG4gICAgICBzdHIgPSBmaW5pdGVUb1N0cmluZyh4LCBzZCA8PSB4LmUgfHwgeC5lIDw9IEN0b3IudG9FeHBOZWcsIHNkKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geC5pc05lZygpICYmICF4LmlzWmVybygpID8gJy0nICsgc3RyIDogc3RyO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgcm91bmRlZCB0byBhIG1heGltdW0gb2YgYHNkYFxyXG4gICAqIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGBybWAsIG9yIHRvIGBwcmVjaXNpb25gIGFuZCBgcm91bmRpbmdgIHJlc3BlY3RpdmVseSBpZlxyXG4gICAqIG9taXR0ZWQuXHJcbiAgICpcclxuICAgKiBbc2RdIHtudW1iZXJ9IFNpZ25pZmljYW50IGRpZ2l0cy4gSW50ZWdlciwgMSB0byBNQVhfRElHSVRTIGluY2x1c2l2ZS5cclxuICAgKiBbcm1dIHtudW1iZXJ9IFJvdW5kaW5nIG1vZGUuIEludGVnZXIsIDAgdG8gOCBpbmNsdXNpdmUuXHJcbiAgICpcclxuICAgKiAndG9TRCgpIGRpZ2l0cyBvdXQgb2YgcmFuZ2U6IHtzZH0nXHJcbiAgICogJ3RvU0QoKSBkaWdpdHMgbm90IGFuIGludGVnZXI6IHtzZH0nXHJcbiAgICogJ3RvU0QoKSByb3VuZGluZyBtb2RlIG5vdCBhbiBpbnRlZ2VyOiB7cm19J1xyXG4gICAqICd0b1NEKCkgcm91bmRpbmcgbW9kZSBvdXQgb2YgcmFuZ2U6IHtybX0nXHJcbiAgICpcclxuICAgKi9cclxuICBQLnRvU2lnbmlmaWNhbnREaWdpdHMgPSBQLnRvU0QgPSBmdW5jdGlvbiAoc2QsIHJtKSB7XHJcbiAgICB2YXIgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yO1xyXG5cclxuICAgIGlmIChzZCA9PT0gdm9pZCAwKSB7XHJcbiAgICAgIHNkID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICAgIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNoZWNrSW50MzIoc2QsIDEsIE1BWF9ESUdJVFMpO1xyXG5cclxuICAgICAgaWYgKHJtID09PSB2b2lkIDApIHJtID0gQ3Rvci5yb3VuZGluZztcclxuICAgICAgZWxzZSBjaGVja0ludDMyKHJtLCAwLCA4KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmluYWxpc2UobmV3IEN0b3IoeCksIHNkLCBybSk7XHJcbiAgfTtcclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgb2YgdGhpcyBEZWNpbWFsLlxyXG4gICAqXHJcbiAgICogUmV0dXJuIGV4cG9uZW50aWFsIG5vdGF0aW9uIGlmIHRoaXMgRGVjaW1hbCBoYXMgYSBwb3NpdGl2ZSBleHBvbmVudCBlcXVhbCB0byBvciBncmVhdGVyIHRoYW5cclxuICAgKiBgdG9FeHBQb3NgLCBvciBhIG5lZ2F0aXZlIGV4cG9uZW50IGVxdWFsIHRvIG9yIGxlc3MgdGhhbiBgdG9FeHBOZWdgLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciB4ID0gdGhpcyxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3IsXHJcbiAgICAgIHN0ciA9IGZpbml0ZVRvU3RyaW5nKHgsIHguZSA8PSBDdG9yLnRvRXhwTmVnIHx8IHguZSA+PSBDdG9yLnRvRXhwUG9zKTtcclxuXHJcbiAgICByZXR1cm4geC5pc05lZygpICYmICF4LmlzWmVybygpID8gJy0nICsgc3RyIDogc3RyO1xyXG4gIH07XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwgdHJ1bmNhdGVkIHRvIGEgd2hvbGUgbnVtYmVyLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC50cnVuY2F0ZWQgPSBQLnRydW5jID0gZnVuY3Rpb24gKCkge1xyXG4gICAgcmV0dXJuIGZpbmFsaXNlKG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMpLCB0aGlzLmUgKyAxLCAxKTtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSB2YWx1ZSBvZiB0aGlzIERlY2ltYWwuXHJcbiAgICogVW5saWtlIGB0b1N0cmluZ2AsIG5lZ2F0aXZlIHplcm8gd2lsbCBpbmNsdWRlIHRoZSBtaW51cyBzaWduLlxyXG4gICAqXHJcbiAgICovXHJcbiAgUC52YWx1ZU9mID0gUC50b0pTT04gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgeCA9IHRoaXMsXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yLFxyXG4gICAgICBzdHIgPSBmaW5pdGVUb1N0cmluZyh4LCB4LmUgPD0gQ3Rvci50b0V4cE5lZyB8fCB4LmUgPj0gQ3Rvci50b0V4cFBvcyk7XHJcblxyXG4gICAgcmV0dXJuIHguaXNOZWcoKSA/ICctJyArIHN0ciA6IHN0cjtcclxuICB9O1xyXG5cclxuXHJcbiAgLypcclxuICAvLyBBZGQgYWxpYXNlcyB0byBtYXRjaCBCaWdEZWNpbWFsIG1ldGhvZCBuYW1lcy5cclxuICAvLyBQLmFkZCA9IFAucGx1cztcclxuICBQLnN1YnRyYWN0ID0gUC5taW51cztcclxuICBQLm11bHRpcGx5ID0gUC50aW1lcztcclxuICBQLmRpdmlkZSA9IFAuZGl2O1xyXG4gIFAucmVtYWluZGVyID0gUC5tb2Q7XHJcbiAgUC5jb21wYXJlVG8gPSBQLmNtcDtcclxuICBQLm5lZ2F0ZSA9IFAubmVnO1xyXG4gICAqL1xyXG5cclxuXHJcbiAgLy8gSGVscGVyIGZ1bmN0aW9ucyBmb3IgRGVjaW1hbC5wcm90b3R5cGUgKFApIGFuZC9vciBEZWNpbWFsIG1ldGhvZHMsIGFuZCB0aGVpciBjYWxsZXJzLlxyXG5cclxuXHJcbiAgLypcclxuICAgKiAgZGlnaXRzVG9TdHJpbmcgICAgICAgICAgIFAuY3ViZVJvb3QsIFAubG9nYXJpdGhtLCBQLnNxdWFyZVJvb3QsIFAudG9GcmFjdGlvbiwgUC50b1Bvd2VyLFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluaXRlVG9TdHJpbmcsIG5hdHVyYWxFeHBvbmVudGlhbCwgbmF0dXJhbExvZ2FyaXRobVxyXG4gICAqICBjaGVja0ludDMyICAgICAgICAgICAgICAgUC50b0RlY2ltYWxQbGFjZXMsIFAudG9FeHBvbmVudGlhbCwgUC50b0ZpeGVkLCBQLnRvTmVhcmVzdCxcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAudG9QcmVjaXNpb24sIFAudG9TaWduaWZpY2FudERpZ2l0cywgdG9TdHJpbmdCaW5hcnksIHJhbmRvbVxyXG4gICAqICBjaGVja1JvdW5kaW5nRGlnaXRzICAgICAgUC5sb2dhcml0aG0sIFAudG9Qb3dlciwgbmF0dXJhbEV4cG9uZW50aWFsLCBuYXR1cmFsTG9nYXJpdGhtXHJcbiAgICogIGNvbnZlcnRCYXNlICAgICAgICAgICAgICB0b1N0cmluZ0JpbmFyeSwgcGFyc2VPdGhlclxyXG4gICAqICBjb3MgICAgICAgICAgICAgICAgICAgICAgUC5jb3NcclxuICAgKiAgZGl2aWRlICAgICAgICAgICAgICAgICAgIFAuYXRhbmgsIFAuY3ViZVJvb3QsIFAuZGl2aWRlZEJ5LCBQLmRpdmlkZWRUb0ludGVnZXJCeSxcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAubG9nYXJpdGhtLCBQLm1vZHVsbywgUC5zcXVhcmVSb290LCBQLnRhbiwgUC50YW5oLCBQLnRvRnJhY3Rpb24sXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBQLnRvTmVhcmVzdCwgdG9TdHJpbmdCaW5hcnksIG5hdHVyYWxFeHBvbmVudGlhbCwgbmF0dXJhbExvZ2FyaXRobSxcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRheWxvclNlcmllcywgYXRhbjIsIHBhcnNlT3RoZXJcclxuICAgKiAgZmluYWxpc2UgICAgICAgICAgICAgICAgIFAuYWJzb2x1dGVWYWx1ZSwgUC5hdGFuLCBQLmF0YW5oLCBQLmNlaWwsIFAuY29zLCBQLmNvc2gsXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBQLmN1YmVSb290LCBQLmRpdmlkZWRUb0ludGVnZXJCeSwgUC5mbG9vciwgUC5sb2dhcml0aG0sIFAubWludXMsXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBQLm1vZHVsbywgUC5uZWdhdGVkLCBQLnBsdXMsIFAucm91bmQsIFAuc2luLCBQLnNpbmgsIFAuc3F1YXJlUm9vdCxcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIFAudGFuLCBQLnRpbWVzLCBQLnRvRGVjaW1hbFBsYWNlcywgUC50b0V4cG9uZW50aWFsLCBQLnRvRml4ZWQsXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBQLnRvTmVhcmVzdCwgUC50b1Bvd2VyLCBQLnRvUHJlY2lzaW9uLCBQLnRvU2lnbmlmaWNhbnREaWdpdHMsXHJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBQLnRydW5jYXRlZCwgZGl2aWRlLCBnZXRMbjEwLCBnZXRQaSwgbmF0dXJhbEV4cG9uZW50aWFsLFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgbmF0dXJhbExvZ2FyaXRobSwgY2VpbCwgZmxvb3IsIHJvdW5kLCB0cnVuY1xyXG4gICAqICBmaW5pdGVUb1N0cmluZyAgICAgICAgICAgUC50b0V4cG9uZW50aWFsLCBQLnRvRml4ZWQsIFAudG9QcmVjaXNpb24sIFAudG9TdHJpbmcsIFAudmFsdWVPZixcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvU3RyaW5nQmluYXJ5XHJcbiAgICogIGdldEJhc2UxMEV4cG9uZW50ICAgICAgICBQLm1pbnVzLCBQLnBsdXMsIFAudGltZXMsIHBhcnNlT3RoZXJcclxuICAgKiAgZ2V0TG4xMCAgICAgICAgICAgICAgICAgIFAubG9nYXJpdGhtLCBuYXR1cmFsTG9nYXJpdGhtXHJcbiAgICogIGdldFBpICAgICAgICAgICAgICAgICAgICBQLmFjb3MsIFAuYXNpbiwgUC5hdGFuLCB0b0xlc3NUaGFuSGFsZlBpLCBhdGFuMlxyXG4gICAqICBnZXRQcmVjaXNpb24gICAgICAgICAgICAgUC5wcmVjaXNpb24sIFAudG9GcmFjdGlvblxyXG4gICAqICBnZXRaZXJvU3RyaW5nICAgICAgICAgICAgZGlnaXRzVG9TdHJpbmcsIGZpbml0ZVRvU3RyaW5nXHJcbiAgICogIGludFBvdyAgICAgICAgICAgICAgICAgICBQLnRvUG93ZXIsIHBhcnNlT3RoZXJcclxuICAgKiAgaXNPZGQgICAgICAgICAgICAgICAgICAgIHRvTGVzc1RoYW5IYWxmUGlcclxuICAgKiAgbWF4T3JNaW4gICAgICAgICAgICAgICAgIG1heCwgbWluXHJcbiAgICogIG5hdHVyYWxFeHBvbmVudGlhbCAgICAgICBQLm5hdHVyYWxFeHBvbmVudGlhbCwgUC50b1Bvd2VyXHJcbiAgICogIG5hdHVyYWxMb2dhcml0aG0gICAgICAgICBQLmFjb3NoLCBQLmFzaW5oLCBQLmF0YW5oLCBQLmxvZ2FyaXRobSwgUC5uYXR1cmFsTG9nYXJpdGhtLFxyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgUC50b1Bvd2VyLCBuYXR1cmFsRXhwb25lbnRpYWxcclxuICAgKiAgbm9uRmluaXRlVG9TdHJpbmcgICAgICAgIGZpbml0ZVRvU3RyaW5nLCB0b1N0cmluZ0JpbmFyeVxyXG4gICAqICBwYXJzZURlY2ltYWwgICAgICAgICAgICAgRGVjaW1hbFxyXG4gICAqICBwYXJzZU90aGVyICAgICAgICAgICAgICAgRGVjaW1hbFxyXG4gICAqICBzaW4gICAgICAgICAgICAgICAgICAgICAgUC5zaW5cclxuICAgKiAgdGF5bG9yU2VyaWVzICAgICAgICAgICAgIFAuY29zaCwgUC5zaW5oLCBjb3MsIHNpblxyXG4gICAqICB0b0xlc3NUaGFuSGFsZlBpICAgICAgICAgUC5jb3MsIFAuc2luXHJcbiAgICogIHRvU3RyaW5nQmluYXJ5ICAgICAgICAgICBQLnRvQmluYXJ5LCBQLnRvSGV4YWRlY2ltYWwsIFAudG9PY3RhbFxyXG4gICAqICB0cnVuY2F0ZSAgICAgICAgICAgICAgICAgaW50UG93XHJcbiAgICpcclxuICAgKiAgVGhyb3dzOiAgICAgICAgICAgICAgICAgIFAubG9nYXJpdGhtLCBQLnByZWNpc2lvbiwgUC50b0ZyYWN0aW9uLCBjaGVja0ludDMyLCBnZXRMbjEwLCBnZXRQaSxcclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hdHVyYWxMb2dhcml0aG0sIGNvbmZpZywgcGFyc2VPdGhlciwgcmFuZG9tLCBEZWNpbWFsXHJcbiAgICovXHJcblxyXG5cclxuICBmdW5jdGlvbiBkaWdpdHNUb1N0cmluZyhkKSB7XHJcbiAgICB2YXIgaSwgaywgd3MsXHJcbiAgICAgIGluZGV4T2ZMYXN0V29yZCA9IGQubGVuZ3RoIC0gMSxcclxuICAgICAgc3RyID0gJycsXHJcbiAgICAgIHcgPSBkWzBdO1xyXG5cclxuICAgIGlmIChpbmRleE9mTGFzdFdvcmQgPiAwKSB7XHJcbiAgICAgIHN0ciArPSB3O1xyXG4gICAgICBmb3IgKGkgPSAxOyBpIDwgaW5kZXhPZkxhc3RXb3JkOyBpKyspIHtcclxuICAgICAgICB3cyA9IGRbaV0gKyAnJztcclxuICAgICAgICBrID0gTE9HX0JBU0UgLSB3cy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKGspIHN0ciArPSBnZXRaZXJvU3RyaW5nKGspO1xyXG4gICAgICAgIHN0ciArPSB3cztcclxuICAgICAgfVxyXG5cclxuICAgICAgdyA9IGRbaV07XHJcbiAgICAgIHdzID0gdyArICcnO1xyXG4gICAgICBrID0gTE9HX0JBU0UgLSB3cy5sZW5ndGg7XHJcbiAgICAgIGlmIChrKSBzdHIgKz0gZ2V0WmVyb1N0cmluZyhrKTtcclxuICAgIH0gZWxzZSBpZiAodyA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gJzAnO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlbW92ZSB0cmFpbGluZyB6ZXJvcyBvZiBsYXN0IHcuXHJcbiAgICBmb3IgKDsgdyAlIDEwID09PSAwOykgdyAvPSAxMDtcclxuXHJcbiAgICByZXR1cm4gc3RyICsgdztcclxuICB9XHJcblxyXG5cclxuICBmdW5jdGlvbiBjaGVja0ludDMyKGksIG1pbiwgbWF4KSB7XHJcbiAgICBpZiAoaSAhPT0gfn5pIHx8IGkgPCBtaW4gfHwgaSA+IG1heCkge1xyXG4gICAgICB0aHJvdyBFcnJvcihpbnZhbGlkQXJndW1lbnQgKyBpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIENoZWNrIDUgcm91bmRpbmcgZGlnaXRzIGlmIGByZXBlYXRpbmdgIGlzIG51bGwsIDQgb3RoZXJ3aXNlLlxyXG4gICAqIGByZXBlYXRpbmcgPT0gbnVsbGAgaWYgY2FsbGVyIGlzIGBsb2dgIG9yIGBwb3dgLFxyXG4gICAqIGByZXBlYXRpbmcgIT0gbnVsbGAgaWYgY2FsbGVyIGlzIGBuYXR1cmFsTG9nYXJpdGhtYCBvciBgbmF0dXJhbEV4cG9uZW50aWFsYC5cclxuICAgKi9cclxuICBmdW5jdGlvbiBjaGVja1JvdW5kaW5nRGlnaXRzKGQsIGksIHJtLCByZXBlYXRpbmcpIHtcclxuICAgIHZhciBkaSwgaywgciwgcmQ7XHJcblxyXG4gICAgLy8gR2V0IHRoZSBsZW5ndGggb2YgdGhlIGZpcnN0IHdvcmQgb2YgdGhlIGFycmF5IGQuXHJcbiAgICBmb3IgKGsgPSBkWzBdOyBrID49IDEwOyBrIC89IDEwKSAtLWk7XHJcblxyXG4gICAgLy8gSXMgdGhlIHJvdW5kaW5nIGRpZ2l0IGluIHRoZSBmaXJzdCB3b3JkIG9mIGQ/XHJcbiAgICBpZiAoLS1pIDwgMCkge1xyXG4gICAgICBpICs9IExPR19CQVNFO1xyXG4gICAgICBkaSA9IDA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBkaSA9IE1hdGguY2VpbCgoaSArIDEpIC8gTE9HX0JBU0UpO1xyXG4gICAgICBpICU9IExPR19CQVNFO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGkgaXMgdGhlIGluZGV4ICgwIC0gNikgb2YgdGhlIHJvdW5kaW5nIGRpZ2l0LlxyXG4gICAgLy8gRS5nLiBpZiB3aXRoaW4gdGhlIHdvcmQgMzQ4NzU2MyB0aGUgZmlyc3Qgcm91bmRpbmcgZGlnaXQgaXMgNSxcclxuICAgIC8vIHRoZW4gaSA9IDQsIGsgPSAxMDAwLCByZCA9IDM0ODc1NjMgJSAxMDAwID0gNTYzXHJcbiAgICBrID0gbWF0aHBvdygxMCwgTE9HX0JBU0UgLSBpKTtcclxuICAgIHJkID0gZFtkaV0gJSBrIHwgMDtcclxuXHJcbiAgICBpZiAocmVwZWF0aW5nID09IG51bGwpIHtcclxuICAgICAgaWYgKGkgPCAzKSB7XHJcbiAgICAgICAgaWYgKGkgPT0gMCkgcmQgPSByZCAvIDEwMCB8IDA7XHJcbiAgICAgICAgZWxzZSBpZiAoaSA9PSAxKSByZCA9IHJkIC8gMTAgfCAwO1xyXG4gICAgICAgIHIgPSBybSA8IDQgJiYgcmQgPT0gOTk5OTkgfHwgcm0gPiAzICYmIHJkID09IDQ5OTk5IHx8IHJkID09IDUwMDAwIHx8IHJkID09IDA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgciA9IChybSA8IDQgJiYgcmQgKyAxID09IGsgfHwgcm0gPiAzICYmIHJkICsgMSA9PSBrIC8gMikgJiZcclxuICAgICAgICAgIChkW2RpICsgMV0gLyBrIC8gMTAwIHwgMCkgPT0gbWF0aHBvdygxMCwgaSAtIDIpIC0gMSB8fFxyXG4gICAgICAgICAgICAocmQgPT0gayAvIDIgfHwgcmQgPT0gMCkgJiYgKGRbZGkgKyAxXSAvIGsgLyAxMDAgfCAwKSA9PSAwO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAoaSA8IDQpIHtcclxuICAgICAgICBpZiAoaSA9PSAwKSByZCA9IHJkIC8gMTAwMCB8IDA7XHJcbiAgICAgICAgZWxzZSBpZiAoaSA9PSAxKSByZCA9IHJkIC8gMTAwIHwgMDtcclxuICAgICAgICBlbHNlIGlmIChpID09IDIpIHJkID0gcmQgLyAxMCB8IDA7XHJcbiAgICAgICAgciA9IChyZXBlYXRpbmcgfHwgcm0gPCA0KSAmJiByZCA9PSA5OTk5IHx8ICFyZXBlYXRpbmcgJiYgcm0gPiAzICYmIHJkID09IDQ5OTk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgciA9ICgocmVwZWF0aW5nIHx8IHJtIDwgNCkgJiYgcmQgKyAxID09IGsgfHxcclxuICAgICAgICAoIXJlcGVhdGluZyAmJiBybSA+IDMpICYmIHJkICsgMSA9PSBrIC8gMikgJiZcclxuICAgICAgICAgIChkW2RpICsgMV0gLyBrIC8gMTAwMCB8IDApID09IG1hdGhwb3coMTAsIGkgLSAzKSAtIDE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcjtcclxuICB9XHJcblxyXG5cclxuICAvLyBDb252ZXJ0IHN0cmluZyBvZiBgYmFzZUluYCB0byBhbiBhcnJheSBvZiBudW1iZXJzIG9mIGBiYXNlT3V0YC5cclxuICAvLyBFZy4gY29udmVydEJhc2UoJzI1NScsIDEwLCAxNikgcmV0dXJucyBbMTUsIDE1XS5cclxuICAvLyBFZy4gY29udmVydEJhc2UoJ2ZmJywgMTYsIDEwKSByZXR1cm5zIFsyLCA1LCA1XS5cclxuICBmdW5jdGlvbiBjb252ZXJ0QmFzZShzdHIsIGJhc2VJbiwgYmFzZU91dCkge1xyXG4gICAgdmFyIGosXHJcbiAgICAgIGFyciA9IFswXSxcclxuICAgICAgYXJyTCxcclxuICAgICAgaSA9IDAsXHJcbiAgICAgIHN0ckwgPSBzdHIubGVuZ3RoO1xyXG5cclxuICAgIGZvciAoOyBpIDwgc3RyTDspIHtcclxuICAgICAgZm9yIChhcnJMID0gYXJyLmxlbmd0aDsgYXJyTC0tOykgYXJyW2FyckxdICo9IGJhc2VJbjtcclxuICAgICAgYXJyWzBdICs9IE5VTUVSQUxTLmluZGV4T2Yoc3RyLmNoYXJBdChpKyspKTtcclxuICAgICAgZm9yIChqID0gMDsgaiA8IGFyci5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGlmIChhcnJbal0gPiBiYXNlT3V0IC0gMSkge1xyXG4gICAgICAgICAgaWYgKGFycltqICsgMV0gPT09IHZvaWQgMCkgYXJyW2ogKyAxXSA9IDA7XHJcbiAgICAgICAgICBhcnJbaiArIDFdICs9IGFycltqXSAvIGJhc2VPdXQgfCAwO1xyXG4gICAgICAgICAgYXJyW2pdICU9IGJhc2VPdXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGFyci5yZXZlcnNlKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBjb3MoeCkgPSAxIC0geF4yLzIhICsgeF40LzQhIC0gLi4uXHJcbiAgICogfHh8IDwgcGkvMlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gY29zaW5lKEN0b3IsIHgpIHtcclxuICAgIHZhciBrLCB5LFxyXG4gICAgICBsZW4gPSB4LmQubGVuZ3RoO1xyXG5cclxuICAgIC8vIEFyZ3VtZW50IHJlZHVjdGlvbjogY29zKDR4KSA9IDgqKGNvc140KHgpIC0gY29zXjIoeCkpICsgMVxyXG4gICAgLy8gaS5lLiBjb3MoeCkgPSA4Kihjb3NeNCh4LzQpIC0gY29zXjIoeC80KSkgKyAxXHJcblxyXG4gICAgLy8gRXN0aW1hdGUgdGhlIG9wdGltdW0gbnVtYmVyIG9mIHRpbWVzIHRvIHVzZSB0aGUgYXJndW1lbnQgcmVkdWN0aW9uLlxyXG4gICAgaWYgKGxlbiA8IDMyKSB7XHJcbiAgICAgIGsgPSBNYXRoLmNlaWwobGVuIC8gMyk7XHJcbiAgICAgIHkgPSAoMSAvIHRpbnlQb3coNCwgaykpLnRvU3RyaW5nKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBrID0gMTY7XHJcbiAgICAgIHkgPSAnMi4zMjgzMDY0MzY1Mzg2OTYyODkwNjI1ZS0xMCc7XHJcbiAgICB9XHJcblxyXG4gICAgQ3Rvci5wcmVjaXNpb24gKz0gaztcclxuXHJcbiAgICB4ID0gdGF5bG9yU2VyaWVzKEN0b3IsIDEsIHgudGltZXMoeSksIG5ldyBDdG9yKDEpKTtcclxuXHJcbiAgICAvLyBSZXZlcnNlIGFyZ3VtZW50IHJlZHVjdGlvblxyXG4gICAgZm9yICh2YXIgaSA9IGs7IGktLTspIHtcclxuICAgICAgdmFyIGNvczJ4ID0geC50aW1lcyh4KTtcclxuICAgICAgeCA9IGNvczJ4LnRpbWVzKGNvczJ4KS5taW51cyhjb3MyeCkudGltZXMoOCkucGx1cygxKTtcclxuICAgIH1cclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiAtPSBrO1xyXG5cclxuICAgIHJldHVybiB4O1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUGVyZm9ybSBkaXZpc2lvbiBpbiB0aGUgc3BlY2lmaWVkIGJhc2UuXHJcbiAgICovXHJcbiAgdmFyIGRpdmlkZSA9IChmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgLy8gQXNzdW1lcyBub24temVybyB4IGFuZCBrLCBhbmQgaGVuY2Ugbm9uLXplcm8gcmVzdWx0LlxyXG4gICAgZnVuY3Rpb24gbXVsdGlwbHlJbnRlZ2VyKHgsIGssIGJhc2UpIHtcclxuICAgICAgdmFyIHRlbXAsXHJcbiAgICAgICAgY2FycnkgPSAwLFxyXG4gICAgICAgIGkgPSB4Lmxlbmd0aDtcclxuXHJcbiAgICAgIGZvciAoeCA9IHguc2xpY2UoKTsgaS0tOykge1xyXG4gICAgICAgIHRlbXAgPSB4W2ldICogayArIGNhcnJ5O1xyXG4gICAgICAgIHhbaV0gPSB0ZW1wICUgYmFzZSB8IDA7XHJcbiAgICAgICAgY2FycnkgPSB0ZW1wIC8gYmFzZSB8IDA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChjYXJyeSkgeC51bnNoaWZ0KGNhcnJ5KTtcclxuXHJcbiAgICAgIHJldHVybiB4O1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIGNvbXBhcmUoYSwgYiwgYUwsIGJMKSB7XHJcbiAgICAgIHZhciBpLCByO1xyXG5cclxuICAgICAgaWYgKGFMICE9IGJMKSB7XHJcbiAgICAgICAgciA9IGFMID4gYkwgPyAxIDogLTE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZm9yIChpID0gciA9IDA7IGkgPCBhTDsgaSsrKSB7XHJcbiAgICAgICAgICBpZiAoYVtpXSAhPSBiW2ldKSB7XHJcbiAgICAgICAgICAgIHIgPSBhW2ldID4gYltpXSA/IDEgOiAtMTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gcjtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBzdWJ0cmFjdChhLCBiLCBhTCwgYmFzZSkge1xyXG4gICAgICB2YXIgaSA9IDA7XHJcblxyXG4gICAgICAvLyBTdWJ0cmFjdCBiIGZyb20gYS5cclxuICAgICAgZm9yICg7IGFMLS07KSB7XHJcbiAgICAgICAgYVthTF0gLT0gaTtcclxuICAgICAgICBpID0gYVthTF0gPCBiW2FMXSA/IDEgOiAwO1xyXG4gICAgICAgIGFbYUxdID0gaSAqIGJhc2UgKyBhW2FMXSAtIGJbYUxdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBSZW1vdmUgbGVhZGluZyB6ZXJvcy5cclxuICAgICAgZm9yICg7ICFhWzBdICYmIGEubGVuZ3RoID4gMTspIGEuc2hpZnQoKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHgsIHksIHByLCBybSwgZHAsIGJhc2UpIHtcclxuICAgICAgdmFyIGNtcCwgZSwgaSwgaywgbG9nQmFzZSwgbW9yZSwgcHJvZCwgcHJvZEwsIHEsIHFkLCByZW0sIHJlbUwsIHJlbTAsIHNkLCB0LCB4aSwgeEwsIHlkMCxcclxuICAgICAgICB5TCwgeXosXHJcbiAgICAgICAgQ3RvciA9IHguY29uc3RydWN0b3IsXHJcbiAgICAgICAgc2lnbiA9IHgucyA9PSB5LnMgPyAxIDogLTEsXHJcbiAgICAgICAgeGQgPSB4LmQsXHJcbiAgICAgICAgeWQgPSB5LmQ7XHJcblxyXG4gICAgICAvLyBFaXRoZXIgTmFOLCBJbmZpbml0eSBvciAwP1xyXG4gICAgICBpZiAoIXhkIHx8ICF4ZFswXSB8fCAheWQgfHwgIXlkWzBdKSB7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgQ3RvcigvLyBSZXR1cm4gTmFOIGlmIGVpdGhlciBOYU4sIG9yIGJvdGggSW5maW5pdHkgb3IgMC5cclxuICAgICAgICAgICF4LnMgfHwgIXkucyB8fCAoeGQgPyB5ZCAmJiB4ZFswXSA9PSB5ZFswXSA6ICF5ZCkgPyBOYU4gOlxyXG5cclxuICAgICAgICAgIC8vIFJldHVybiDCsTAgaWYgeCBpcyAwIG9yIHkgaXMgwrFJbmZpbml0eSwgb3IgcmV0dXJuIMKxSW5maW5pdHkgYXMgeSBpcyAwLlxyXG4gICAgICAgICAgeGQgJiYgeGRbMF0gPT0gMCB8fCAheWQgPyBzaWduICogMCA6IHNpZ24gLyAwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGJhc2UpIHtcclxuICAgICAgICBsb2dCYXNlID0gMTtcclxuICAgICAgICBlID0geC5lIC0geS5lO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJhc2UgPSBCQVNFO1xyXG4gICAgICAgIGxvZ0Jhc2UgPSBMT0dfQkFTRTtcclxuICAgICAgICBlID0gbWF0aGZsb29yKHguZSAvIGxvZ0Jhc2UpIC0gbWF0aGZsb29yKHkuZSAvIGxvZ0Jhc2UpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB5TCA9IHlkLmxlbmd0aDtcclxuICAgICAgeEwgPSB4ZC5sZW5ndGg7XHJcbiAgICAgIHEgPSBuZXcgQ3RvcihzaWduKTtcclxuICAgICAgcWQgPSBxLmQgPSBbXTtcclxuXHJcbiAgICAgIC8vIFJlc3VsdCBleHBvbmVudCBtYXkgYmUgb25lIGxlc3MgdGhhbiBlLlxyXG4gICAgICAvLyBUaGUgZGlnaXQgYXJyYXkgb2YgYSBEZWNpbWFsIGZyb20gdG9TdHJpbmdCaW5hcnkgbWF5IGhhdmUgdHJhaWxpbmcgemVyb3MuXHJcbiAgICAgIGZvciAoaSA9IDA7IHlkW2ldID09ICh4ZFtpXSB8fCAwKTsgaSsrKTtcclxuXHJcbiAgICAgIGlmICh5ZFtpXSA+ICh4ZFtpXSB8fCAwKSkgZS0tO1xyXG5cclxuICAgICAgaWYgKHByID09IG51bGwpIHtcclxuICAgICAgICBzZCA9IHByID0gQ3Rvci5wcmVjaXNpb247XHJcbiAgICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgICB9IGVsc2UgaWYgKGRwKSB7XHJcbiAgICAgICAgc2QgPSBwciArICh4LmUgLSB5LmUpICsgMTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzZCA9IHByO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoc2QgPCAwKSB7XHJcbiAgICAgICAgcWQucHVzaCgxKTtcclxuICAgICAgICBtb3JlID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgLy8gQ29udmVydCBwcmVjaXNpb24gaW4gbnVtYmVyIG9mIGJhc2UgMTAgZGlnaXRzIHRvIGJhc2UgMWU3IGRpZ2l0cy5cclxuICAgICAgICBzZCA9IHNkIC8gbG9nQmFzZSArIDIgfCAwO1xyXG4gICAgICAgIGkgPSAwO1xyXG5cclxuICAgICAgICAvLyBkaXZpc29yIDwgMWU3XHJcbiAgICAgICAgaWYgKHlMID09IDEpIHtcclxuICAgICAgICAgIGsgPSAwO1xyXG4gICAgICAgICAgeWQgPSB5ZFswXTtcclxuICAgICAgICAgIHNkKys7XHJcblxyXG4gICAgICAgICAgLy8gayBpcyB0aGUgY2FycnkuXHJcbiAgICAgICAgICBmb3IgKDsgKGkgPCB4TCB8fCBrKSAmJiBzZC0tOyBpKyspIHtcclxuICAgICAgICAgICAgdCA9IGsgKiBiYXNlICsgKHhkW2ldIHx8IDApO1xyXG4gICAgICAgICAgICBxZFtpXSA9IHQgLyB5ZCB8IDA7XHJcbiAgICAgICAgICAgIGsgPSB0ICUgeWQgfCAwO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIG1vcmUgPSBrIHx8IGkgPCB4TDtcclxuXHJcbiAgICAgICAgLy8gZGl2aXNvciA+PSAxZTdcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIC8vIE5vcm1hbGlzZSB4ZCBhbmQgeWQgc28gaGlnaGVzdCBvcmRlciBkaWdpdCBvZiB5ZCBpcyA+PSBiYXNlLzJcclxuICAgICAgICAgIGsgPSBiYXNlIC8gKHlkWzBdICsgMSkgfCAwO1xyXG5cclxuICAgICAgICAgIGlmIChrID4gMSkge1xyXG4gICAgICAgICAgICB5ZCA9IG11bHRpcGx5SW50ZWdlcih5ZCwgaywgYmFzZSk7XHJcbiAgICAgICAgICAgIHhkID0gbXVsdGlwbHlJbnRlZ2VyKHhkLCBrLCBiYXNlKTtcclxuICAgICAgICAgICAgeUwgPSB5ZC5sZW5ndGg7XHJcbiAgICAgICAgICAgIHhMID0geGQubGVuZ3RoO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHhpID0geUw7XHJcbiAgICAgICAgICByZW0gPSB4ZC5zbGljZSgwLCB5TCk7XHJcbiAgICAgICAgICByZW1MID0gcmVtLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAvLyBBZGQgemVyb3MgdG8gbWFrZSByZW1haW5kZXIgYXMgbG9uZyBhcyBkaXZpc29yLlxyXG4gICAgICAgICAgZm9yICg7IHJlbUwgPCB5TDspIHJlbVtyZW1MKytdID0gMDtcclxuXHJcbiAgICAgICAgICB5eiA9IHlkLnNsaWNlKCk7XHJcbiAgICAgICAgICB5ei51bnNoaWZ0KDApO1xyXG4gICAgICAgICAgeWQwID0geWRbMF07XHJcblxyXG4gICAgICAgICAgaWYgKHlkWzFdID49IGJhc2UgLyAyKSArK3lkMDtcclxuXHJcbiAgICAgICAgICBkbyB7XHJcbiAgICAgICAgICAgIGsgPSAwO1xyXG5cclxuICAgICAgICAgICAgLy8gQ29tcGFyZSBkaXZpc29yIGFuZCByZW1haW5kZXIuXHJcbiAgICAgICAgICAgIGNtcCA9IGNvbXBhcmUoeWQsIHJlbSwgeUwsIHJlbUwpO1xyXG5cclxuICAgICAgICAgICAgLy8gSWYgZGl2aXNvciA8IHJlbWFpbmRlci5cclxuICAgICAgICAgICAgaWYgKGNtcCA8IDApIHtcclxuXHJcbiAgICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIHRyaWFsIGRpZ2l0LCBrLlxyXG4gICAgICAgICAgICAgIHJlbTAgPSByZW1bMF07XHJcbiAgICAgICAgICAgICAgaWYgKHlMICE9IHJlbUwpIHJlbTAgPSByZW0wICogYmFzZSArIChyZW1bMV0gfHwgMCk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIGsgd2lsbCBiZSBob3cgbWFueSB0aW1lcyB0aGUgZGl2aXNvciBnb2VzIGludG8gdGhlIGN1cnJlbnQgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgIGsgPSByZW0wIC8geWQwIHwgMDtcclxuXHJcbiAgICAgICAgICAgICAgLy8gIEFsZ29yaXRobTpcclxuICAgICAgICAgICAgICAvLyAgMS4gcHJvZHVjdCA9IGRpdmlzb3IgKiB0cmlhbCBkaWdpdCAoaylcclxuICAgICAgICAgICAgICAvLyAgMi4gaWYgcHJvZHVjdCA+IHJlbWFpbmRlcjogcHJvZHVjdCAtPSBkaXZpc29yLCBrLS1cclxuICAgICAgICAgICAgICAvLyAgMy4gcmVtYWluZGVyIC09IHByb2R1Y3RcclxuICAgICAgICAgICAgICAvLyAgNC4gaWYgcHJvZHVjdCB3YXMgPCByZW1haW5kZXIgYXQgMjpcclxuICAgICAgICAgICAgICAvLyAgICA1LiBjb21wYXJlIG5ldyByZW1haW5kZXIgYW5kIGRpdmlzb3JcclxuICAgICAgICAgICAgICAvLyAgICA2LiBJZiByZW1haW5kZXIgPiBkaXZpc29yOiByZW1haW5kZXIgLT0gZGl2aXNvciwgaysrXHJcblxyXG4gICAgICAgICAgICAgIGlmIChrID4gMSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGsgPj0gYmFzZSkgayA9IGJhc2UgLSAxO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIHByb2R1Y3QgPSBkaXZpc29yICogdHJpYWwgZGlnaXQuXHJcbiAgICAgICAgICAgICAgICBwcm9kID0gbXVsdGlwbHlJbnRlZ2VyKHlkLCBrLCBiYXNlKTtcclxuICAgICAgICAgICAgICAgIHByb2RMID0gcHJvZC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICByZW1MID0gcmVtLmxlbmd0aDtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBDb21wYXJlIHByb2R1Y3QgYW5kIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAgIGNtcCA9IGNvbXBhcmUocHJvZCwgcmVtLCBwcm9kTCwgcmVtTCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gcHJvZHVjdCA+IHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAgIGlmIChjbXAgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICBrLS07XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyBTdWJ0cmFjdCBkaXZpc29yIGZyb20gcHJvZHVjdC5cclxuICAgICAgICAgICAgICAgICAgc3VidHJhY3QocHJvZCwgeUwgPCBwcm9kTCA/IHl6IDogeWQsIHByb2RMLCBiYXNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGNtcCBpcyAtMS5cclxuICAgICAgICAgICAgICAgIC8vIElmIGsgaXMgMCwgdGhlcmUgaXMgbm8gbmVlZCB0byBjb21wYXJlIHlkIGFuZCByZW0gYWdhaW4gYmVsb3csIHNvIGNoYW5nZSBjbXAgdG8gMVxyXG4gICAgICAgICAgICAgICAgLy8gdG8gYXZvaWQgaXQuIElmIGsgaXMgMSB0aGVyZSBpcyBhIG5lZWQgdG8gY29tcGFyZSB5ZCBhbmQgcmVtIGFnYWluIGJlbG93LlxyXG4gICAgICAgICAgICAgICAgaWYgKGsgPT0gMCkgY21wID0gayA9IDE7XHJcbiAgICAgICAgICAgICAgICBwcm9kID0geWQuc2xpY2UoKTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIHByb2RMID0gcHJvZC5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgaWYgKHByb2RMIDwgcmVtTCkgcHJvZC51bnNoaWZ0KDApO1xyXG5cclxuICAgICAgICAgICAgICAvLyBTdWJ0cmFjdCBwcm9kdWN0IGZyb20gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgIHN1YnRyYWN0KHJlbSwgcHJvZCwgcmVtTCwgYmFzZSk7XHJcblxyXG4gICAgICAgICAgICAgIC8vIElmIHByb2R1Y3Qgd2FzIDwgcHJldmlvdXMgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgIGlmIChjbXAgPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIENvbXBhcmUgZGl2aXNvciBhbmQgbmV3IHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAgIGNtcCA9IGNvbXBhcmUoeWQsIHJlbSwgeUwsIHJlbUwpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIElmIGRpdmlzb3IgPCBuZXcgcmVtYWluZGVyLCBzdWJ0cmFjdCBkaXZpc29yIGZyb20gcmVtYWluZGVyLlxyXG4gICAgICAgICAgICAgICAgaWYgKGNtcCA8IDEpIHtcclxuICAgICAgICAgICAgICAgICAgaysrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8gU3VidHJhY3QgZGl2aXNvciBmcm9tIHJlbWFpbmRlci5cclxuICAgICAgICAgICAgICAgICAgc3VidHJhY3QocmVtLCB5TCA8IHJlbUwgPyB5eiA6IHlkLCByZW1MLCBiYXNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIHJlbUwgPSByZW0ubGVuZ3RoO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGNtcCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgIGsrKztcclxuICAgICAgICAgICAgICByZW0gPSBbMF07XHJcbiAgICAgICAgICAgIH0gICAgLy8gaWYgY21wID09PSAxLCBrIHdpbGwgYmUgMFxyXG5cclxuICAgICAgICAgICAgLy8gQWRkIHRoZSBuZXh0IGRpZ2l0LCBrLCB0byB0aGUgcmVzdWx0IGFycmF5LlxyXG4gICAgICAgICAgICBxZFtpKytdID0gaztcclxuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgcmVtYWluZGVyLlxyXG4gICAgICAgICAgICBpZiAoY21wICYmIHJlbVswXSkge1xyXG4gICAgICAgICAgICAgIHJlbVtyZW1MKytdID0geGRbeGldIHx8IDA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgcmVtID0gW3hkW3hpXV07XHJcbiAgICAgICAgICAgICAgcmVtTCA9IDE7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB9IHdoaWxlICgoeGkrKyA8IHhMIHx8IHJlbVswXSAhPT0gdm9pZCAwKSAmJiBzZC0tKTtcclxuXHJcbiAgICAgICAgICBtb3JlID0gcmVtWzBdICE9PSB2b2lkIDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBMZWFkaW5nIHplcm8/XHJcbiAgICAgICAgaWYgKCFxZFswXSkgcWQuc2hpZnQoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gbG9nQmFzZSBpcyAxIHdoZW4gZGl2aWRlIGlzIGJlaW5nIHVzZWQgZm9yIGJhc2UgY29udmVyc2lvbi5cclxuICAgICAgaWYgKGxvZ0Jhc2UgPT0gMSkge1xyXG4gICAgICAgIHEuZSA9IGU7XHJcbiAgICAgICAgaW5leGFjdCA9IG1vcmU7XHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIC8vIFRvIGNhbGN1bGF0ZSBxLmUsIGZpcnN0IGdldCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiBxZFswXS5cclxuICAgICAgICBmb3IgKGkgPSAxLCBrID0gcWRbMF07IGsgPj0gMTA7IGsgLz0gMTApIGkrKztcclxuICAgICAgICBxLmUgPSBpICsgZSAqIGxvZ0Jhc2UgLSAxO1xyXG5cclxuICAgICAgICBmaW5hbGlzZShxLCBkcCA/IHByICsgcS5lICsgMSA6IHByLCBybSwgbW9yZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHJldHVybiBxO1xyXG4gICAgfTtcclxuICB9KSgpO1xyXG5cclxuXHJcbiAgLypcclxuICAgKiBSb3VuZCBgeGAgdG8gYHNkYCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm1gLlxyXG4gICAqIENoZWNrIGZvciBvdmVyL3VuZGVyLWZsb3cuXHJcbiAgICovXHJcbiAgIGZ1bmN0aW9uIGZpbmFsaXNlKHgsIHNkLCBybSwgaXNUcnVuY2F0ZWQpIHtcclxuICAgIHZhciBkaWdpdHMsIGksIGosIGssIHJkLCByb3VuZFVwLCB3LCB4ZCwgeGRpLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICAvLyBEb24ndCByb3VuZCBpZiBzZCBpcyBudWxsIG9yIHVuZGVmaW5lZC5cclxuICAgIG91dDogaWYgKHNkICE9IG51bGwpIHtcclxuICAgICAgeGQgPSB4LmQ7XHJcblxyXG4gICAgICAvLyBJbmZpbml0eS9OYU4uXHJcbiAgICAgIGlmICgheGQpIHJldHVybiB4O1xyXG5cclxuICAgICAgLy8gcmQ6IHRoZSByb3VuZGluZyBkaWdpdCwgaS5lLiB0aGUgZGlnaXQgYWZ0ZXIgdGhlIGRpZ2l0IHRoYXQgbWF5IGJlIHJvdW5kZWQgdXAuXHJcbiAgICAgIC8vIHc6IHRoZSB3b3JkIG9mIHhkIGNvbnRhaW5pbmcgcmQsIGEgYmFzZSAxZTcgbnVtYmVyLlxyXG4gICAgICAvLyB4ZGk6IHRoZSBpbmRleCBvZiB3IHdpdGhpbiB4ZC5cclxuICAgICAgLy8gZGlnaXRzOiB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiB3LlxyXG4gICAgICAvLyBpOiB3aGF0IHdvdWxkIGJlIHRoZSBpbmRleCBvZiByZCB3aXRoaW4gdyBpZiBhbGwgdGhlIG51bWJlcnMgd2VyZSA3IGRpZ2l0cyBsb25nIChpLmUuIGlmXHJcbiAgICAgIC8vIHRoZXkgaGFkIGxlYWRpbmcgemVyb3MpXHJcbiAgICAgIC8vIGo6IGlmID4gMCwgdGhlIGFjdHVhbCBpbmRleCBvZiByZCB3aXRoaW4gdyAoaWYgPCAwLCByZCBpcyBhIGxlYWRpbmcgemVybykuXHJcblxyXG4gICAgICAvLyBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgZGlnaXRzIGFycmF5IHhkLlxyXG4gICAgICBmb3IgKGRpZ2l0cyA9IDEsIGsgPSB4ZFswXTsgayA+PSAxMDsgayAvPSAxMCkgZGlnaXRzKys7XHJcbiAgICAgIGkgPSBzZCAtIGRpZ2l0cztcclxuXHJcbiAgICAgIC8vIElzIHRoZSByb3VuZGluZyBkaWdpdCBpbiB0aGUgZmlyc3Qgd29yZCBvZiB4ZD9cclxuICAgICAgaWYgKGkgPCAwKSB7XHJcbiAgICAgICAgaSArPSBMT0dfQkFTRTtcclxuICAgICAgICBqID0gc2Q7XHJcbiAgICAgICAgdyA9IHhkW3hkaSA9IDBdO1xyXG5cclxuICAgICAgICAvLyBHZXQgdGhlIHJvdW5kaW5nIGRpZ2l0IGF0IGluZGV4IGogb2Ygdy5cclxuICAgICAgICByZCA9IHcgLyBtYXRocG93KDEwLCBkaWdpdHMgLSBqIC0gMSkgJSAxMCB8IDA7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgeGRpID0gTWF0aC5jZWlsKChpICsgMSkgLyBMT0dfQkFTRSk7XHJcbiAgICAgICAgayA9IHhkLmxlbmd0aDtcclxuICAgICAgICBpZiAoeGRpID49IGspIHtcclxuICAgICAgICAgIGlmIChpc1RydW5jYXRlZCkge1xyXG5cclxuICAgICAgICAgICAgLy8gTmVlZGVkIGJ5IGBuYXR1cmFsRXhwb25lbnRpYWxgLCBgbmF0dXJhbExvZ2FyaXRobWAgYW5kIGBzcXVhcmVSb290YC5cclxuICAgICAgICAgICAgZm9yICg7IGsrKyA8PSB4ZGk7KSB4ZC5wdXNoKDApO1xyXG4gICAgICAgICAgICB3ID0gcmQgPSAwO1xyXG4gICAgICAgICAgICBkaWdpdHMgPSAxO1xyXG4gICAgICAgICAgICBpICU9IExPR19CQVNFO1xyXG4gICAgICAgICAgICBqID0gaSAtIExPR19CQVNFICsgMTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGJyZWFrIG91dDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdyA9IGsgPSB4ZFt4ZGldO1xyXG5cclxuICAgICAgICAgIC8vIEdldCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiB3LlxyXG4gICAgICAgICAgZm9yIChkaWdpdHMgPSAxOyBrID49IDEwOyBrIC89IDEwKSBkaWdpdHMrKztcclxuXHJcbiAgICAgICAgICAvLyBHZXQgdGhlIGluZGV4IG9mIHJkIHdpdGhpbiB3LlxyXG4gICAgICAgICAgaSAlPSBMT0dfQkFTRTtcclxuXHJcbiAgICAgICAgICAvLyBHZXQgdGhlIGluZGV4IG9mIHJkIHdpdGhpbiB3LCBhZGp1c3RlZCBmb3IgbGVhZGluZyB6ZXJvcy5cclxuICAgICAgICAgIC8vIFRoZSBudW1iZXIgb2YgbGVhZGluZyB6ZXJvcyBvZiB3IGlzIGdpdmVuIGJ5IExPR19CQVNFIC0gZGlnaXRzLlxyXG4gICAgICAgICAgaiA9IGkgLSBMT0dfQkFTRSArIGRpZ2l0cztcclxuXHJcbiAgICAgICAgICAvLyBHZXQgdGhlIHJvdW5kaW5nIGRpZ2l0IGF0IGluZGV4IGogb2Ygdy5cclxuICAgICAgICAgIHJkID0gaiA8IDAgPyAwIDogdyAvIG1hdGhwb3coMTAsIGRpZ2l0cyAtIGogLSAxKSAlIDEwIHwgMDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEFyZSB0aGVyZSBhbnkgbm9uLXplcm8gZGlnaXRzIGFmdGVyIHRoZSByb3VuZGluZyBkaWdpdD9cclxuICAgICAgaXNUcnVuY2F0ZWQgPSBpc1RydW5jYXRlZCB8fCBzZCA8IDAgfHxcclxuICAgICAgICB4ZFt4ZGkgKyAxXSAhPT0gdm9pZCAwIHx8IChqIDwgMCA/IHcgOiB3ICUgbWF0aHBvdygxMCwgZGlnaXRzIC0gaiAtIDEpKTtcclxuXHJcbiAgICAgIC8vIFRoZSBleHByZXNzaW9uIGB3ICUgbWF0aHBvdygxMCwgZGlnaXRzIC0gaiAtIDEpYCByZXR1cm5zIGFsbCB0aGUgZGlnaXRzIG9mIHcgdG8gdGhlIHJpZ2h0XHJcbiAgICAgIC8vIG9mIHRoZSBkaWdpdCBhdCAobGVmdC10by1yaWdodCkgaW5kZXggaiwgZS5nLiBpZiB3IGlzIDkwODcxNCBhbmQgaiBpcyAyLCB0aGUgZXhwcmVzc2lvblxyXG4gICAgICAvLyB3aWxsIGdpdmUgNzE0LlxyXG5cclxuICAgICAgcm91bmRVcCA9IHJtIDwgNFxyXG4gICAgICAgID8gKHJkIHx8IGlzVHJ1bmNhdGVkKSAmJiAocm0gPT0gMCB8fCBybSA9PSAoeC5zIDwgMCA/IDMgOiAyKSlcclxuICAgICAgICA6IHJkID4gNSB8fCByZCA9PSA1ICYmIChybSA9PSA0IHx8IGlzVHJ1bmNhdGVkIHx8IHJtID09IDYgJiZcclxuXHJcbiAgICAgICAgICAvLyBDaGVjayB3aGV0aGVyIHRoZSBkaWdpdCB0byB0aGUgbGVmdCBvZiB0aGUgcm91bmRpbmcgZGlnaXQgaXMgb2RkLlxyXG4gICAgICAgICAgKChpID4gMCA/IGogPiAwID8gdyAvIG1hdGhwb3coMTAsIGRpZ2l0cyAtIGopIDogMCA6IHhkW3hkaSAtIDFdKSAlIDEwKSAmIDEgfHxcclxuICAgICAgICAgICAgcm0gPT0gKHgucyA8IDAgPyA4IDogNykpO1xyXG5cclxuICAgICAgaWYgKHNkIDwgMSB8fCAheGRbMF0pIHtcclxuICAgICAgICB4ZC5sZW5ndGggPSAwO1xyXG4gICAgICAgIGlmIChyb3VuZFVwKSB7XHJcblxyXG4gICAgICAgICAgLy8gQ29udmVydCBzZCB0byBkZWNpbWFsIHBsYWNlcy5cclxuICAgICAgICAgIHNkIC09IHguZSArIDE7XHJcblxyXG4gICAgICAgICAgLy8gMSwgMC4xLCAwLjAxLCAwLjAwMSwgMC4wMDAxIGV0Yy5cclxuICAgICAgICAgIHhkWzBdID0gbWF0aHBvdygxMCwgKExPR19CQVNFIC0gc2QgJSBMT0dfQkFTRSkgJSBMT0dfQkFTRSk7XHJcbiAgICAgICAgICB4LmUgPSAtc2QgfHwgMDtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIC8vIFplcm8uXHJcbiAgICAgICAgICB4ZFswXSA9IHguZSA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4geDtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gUmVtb3ZlIGV4Y2VzcyBkaWdpdHMuXHJcbiAgICAgIGlmIChpID09IDApIHtcclxuICAgICAgICB4ZC5sZW5ndGggPSB4ZGk7XHJcbiAgICAgICAgayA9IDE7XHJcbiAgICAgICAgeGRpLS07XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgeGQubGVuZ3RoID0geGRpICsgMTtcclxuICAgICAgICBrID0gbWF0aHBvdygxMCwgTE9HX0JBU0UgLSBpKTtcclxuXHJcbiAgICAgICAgLy8gRS5nLiA1NjcwMCBiZWNvbWVzIDU2MDAwIGlmIDcgaXMgdGhlIHJvdW5kaW5nIGRpZ2l0LlxyXG4gICAgICAgIC8vIGogPiAwIG1lYW5zIGkgPiBudW1iZXIgb2YgbGVhZGluZyB6ZXJvcyBvZiB3LlxyXG4gICAgICAgIHhkW3hkaV0gPSBqID4gMCA/ICh3IC8gbWF0aHBvdygxMCwgZGlnaXRzIC0gaikgJSBtYXRocG93KDEwLCBqKSB8IDApICogayA6IDA7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChyb3VuZFVwKSB7XHJcbiAgICAgICAgZm9yICg7Oykge1xyXG5cclxuICAgICAgICAgIC8vIElzIHRoZSBkaWdpdCB0byBiZSByb3VuZGVkIHVwIGluIHRoZSBmaXJzdCB3b3JkIG9mIHhkP1xyXG4gICAgICAgICAgaWYgKHhkaSA9PSAwKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBpIHdpbGwgYmUgdGhlIGxlbmd0aCBvZiB4ZFswXSBiZWZvcmUgayBpcyBhZGRlZC5cclxuICAgICAgICAgICAgZm9yIChpID0gMSwgaiA9IHhkWzBdOyBqID49IDEwOyBqIC89IDEwKSBpKys7XHJcbiAgICAgICAgICAgIGogPSB4ZFswXSArPSBrO1xyXG4gICAgICAgICAgICBmb3IgKGsgPSAxOyBqID49IDEwOyBqIC89IDEwKSBrKys7XHJcblxyXG4gICAgICAgICAgICAvLyBpZiBpICE9IGsgdGhlIGxlbmd0aCBoYXMgaW5jcmVhc2VkLlxyXG4gICAgICAgICAgICBpZiAoaSAhPSBrKSB7XHJcbiAgICAgICAgICAgICAgeC5lKys7XHJcbiAgICAgICAgICAgICAgaWYgKHhkWzBdID09IEJBU0UpIHhkWzBdID0gMTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB4ZFt4ZGldICs9IGs7XHJcbiAgICAgICAgICAgIGlmICh4ZFt4ZGldICE9IEJBU0UpIGJyZWFrO1xyXG4gICAgICAgICAgICB4ZFt4ZGktLV0gPSAwO1xyXG4gICAgICAgICAgICBrID0gMTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFJlbW92ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgICAgZm9yIChpID0geGQubGVuZ3RoOyB4ZFstLWldID09PSAwOykgeGQucG9wKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGV4dGVybmFsKSB7XHJcblxyXG4gICAgICAvLyBPdmVyZmxvdz9cclxuICAgICAgaWYgKHguZSA+IEN0b3IubWF4RSkge1xyXG5cclxuICAgICAgICAvLyBJbmZpbml0eS5cclxuICAgICAgICB4LmQgPSBudWxsO1xyXG4gICAgICAgIHguZSA9IE5hTjtcclxuXHJcbiAgICAgIC8vIFVuZGVyZmxvdz9cclxuICAgICAgfSBlbHNlIGlmICh4LmUgPCBDdG9yLm1pbkUpIHtcclxuXHJcbiAgICAgICAgLy8gWmVyby5cclxuICAgICAgICB4LmUgPSAwO1xyXG4gICAgICAgIHguZCA9IFswXTtcclxuICAgICAgICAvLyBDdG9yLnVuZGVyZmxvdyA9IHRydWU7XHJcbiAgICAgIH0gLy8gZWxzZSBDdG9yLnVuZGVyZmxvdyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB4O1xyXG4gIH1cclxuXHJcblxyXG4gIGZ1bmN0aW9uIGZpbml0ZVRvU3RyaW5nKHgsIGlzRXhwLCBzZCkge1xyXG4gICAgaWYgKCF4LmlzRmluaXRlKCkpIHJldHVybiBub25GaW5pdGVUb1N0cmluZyh4KTtcclxuICAgIHZhciBrLFxyXG4gICAgICBlID0geC5lLFxyXG4gICAgICBzdHIgPSBkaWdpdHNUb1N0cmluZyh4LmQpLFxyXG4gICAgICBsZW4gPSBzdHIubGVuZ3RoO1xyXG5cclxuICAgIGlmIChpc0V4cCkge1xyXG4gICAgICBpZiAoc2QgJiYgKGsgPSBzZCAtIGxlbikgPiAwKSB7XHJcbiAgICAgICAgc3RyID0gc3RyLmNoYXJBdCgwKSArICcuJyArIHN0ci5zbGljZSgxKSArIGdldFplcm9TdHJpbmcoayk7XHJcbiAgICAgIH0gZWxzZSBpZiAobGVuID4gMSkge1xyXG4gICAgICAgIHN0ciA9IHN0ci5jaGFyQXQoMCkgKyAnLicgKyBzdHIuc2xpY2UoMSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN0ciA9IHN0ciArICh4LmUgPCAwID8gJ2UnIDogJ2UrJykgKyB4LmU7XHJcbiAgICB9IGVsc2UgaWYgKGUgPCAwKSB7XHJcbiAgICAgIHN0ciA9ICcwLicgKyBnZXRaZXJvU3RyaW5nKC1lIC0gMSkgKyBzdHI7XHJcbiAgICAgIGlmIChzZCAmJiAoayA9IHNkIC0gbGVuKSA+IDApIHN0ciArPSBnZXRaZXJvU3RyaW5nKGspO1xyXG4gICAgfSBlbHNlIGlmIChlID49IGxlbikge1xyXG4gICAgICBzdHIgKz0gZ2V0WmVyb1N0cmluZyhlICsgMSAtIGxlbik7XHJcbiAgICAgIGlmIChzZCAmJiAoayA9IHNkIC0gZSAtIDEpID4gMCkgc3RyID0gc3RyICsgJy4nICsgZ2V0WmVyb1N0cmluZyhrKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICgoayA9IGUgKyAxKSA8IGxlbikgc3RyID0gc3RyLnNsaWNlKDAsIGspICsgJy4nICsgc3RyLnNsaWNlKGspO1xyXG4gICAgICBpZiAoc2QgJiYgKGsgPSBzZCAtIGxlbikgPiAwKSB7XHJcbiAgICAgICAgaWYgKGUgKyAxID09PSBsZW4pIHN0ciArPSAnLic7XHJcbiAgICAgICAgc3RyICs9IGdldFplcm9TdHJpbmcoayk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3RyO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIENhbGN1bGF0ZSB0aGUgYmFzZSAxMCBleHBvbmVudCBmcm9tIHRoZSBiYXNlIDFlNyBleHBvbmVudC5cclxuICBmdW5jdGlvbiBnZXRCYXNlMTBFeHBvbmVudChkaWdpdHMsIGUpIHtcclxuICAgIHZhciB3ID0gZGlnaXRzWzBdO1xyXG5cclxuICAgIC8vIEFkZCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgZGlnaXRzIGFycmF5LlxyXG4gICAgZm9yICggZSAqPSBMT0dfQkFTRTsgdyA+PSAxMDsgdyAvPSAxMCkgZSsrO1xyXG4gICAgcmV0dXJuIGU7XHJcbiAgfVxyXG5cclxuXHJcbiAgZnVuY3Rpb24gZ2V0TG4xMChDdG9yLCBzZCwgcHIpIHtcclxuICAgIGlmIChzZCA+IExOMTBfUFJFQ0lTSU9OKSB7XHJcblxyXG4gICAgICAvLyBSZXNldCBnbG9iYWwgc3RhdGUgaW4gY2FzZSB0aGUgZXhjZXB0aW9uIGlzIGNhdWdodC5cclxuICAgICAgZXh0ZXJuYWwgPSB0cnVlO1xyXG4gICAgICBpZiAocHIpIEN0b3IucHJlY2lzaW9uID0gcHI7XHJcbiAgICAgIHRocm93IEVycm9yKHByZWNpc2lvbkxpbWl0RXhjZWVkZWQpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpbmFsaXNlKG5ldyBDdG9yKExOMTApLCBzZCwgMSwgdHJ1ZSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZnVuY3Rpb24gZ2V0UGkoQ3Rvciwgc2QsIHJtKSB7XHJcbiAgICBpZiAoc2QgPiBQSV9QUkVDSVNJT04pIHRocm93IEVycm9yKHByZWNpc2lvbkxpbWl0RXhjZWVkZWQpO1xyXG4gICAgcmV0dXJuIGZpbmFsaXNlKG5ldyBDdG9yKFBJKSwgc2QsIHJtLCB0cnVlKTtcclxuICB9XHJcblxyXG5cclxuICBmdW5jdGlvbiBnZXRQcmVjaXNpb24oZGlnaXRzKSB7XHJcbiAgICB2YXIgdyA9IGRpZ2l0cy5sZW5ndGggLSAxLFxyXG4gICAgICBsZW4gPSB3ICogTE9HX0JBU0UgKyAxO1xyXG5cclxuICAgIHcgPSBkaWdpdHNbd107XHJcblxyXG4gICAgLy8gSWYgbm9uLXplcm8uLi5cclxuICAgIGlmICh3KSB7XHJcblxyXG4gICAgICAvLyBTdWJ0cmFjdCB0aGUgbnVtYmVyIG9mIHRyYWlsaW5nIHplcm9zIG9mIHRoZSBsYXN0IHdvcmQuXHJcbiAgICAgIGZvciAoOyB3ICUgMTAgPT0gMDsgdyAvPSAxMCkgbGVuLS07XHJcblxyXG4gICAgICAvLyBBZGQgdGhlIG51bWJlciBvZiBkaWdpdHMgb2YgdGhlIGZpcnN0IHdvcmQuXHJcbiAgICAgIGZvciAodyA9IGRpZ2l0c1swXTsgdyA+PSAxMDsgdyAvPSAxMCkgbGVuKys7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGxlbjtcclxuICB9XHJcblxyXG5cclxuICBmdW5jdGlvbiBnZXRaZXJvU3RyaW5nKGspIHtcclxuICAgIHZhciB6cyA9ICcnO1xyXG4gICAgZm9yICg7IGstLTspIHpzICs9ICcwJztcclxuICAgIHJldHVybiB6cztcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSB2YWx1ZSBvZiBEZWNpbWFsIGB4YCB0byB0aGUgcG93ZXIgYG5gLCB3aGVyZSBgbmAgaXMgYW5cclxuICAgKiBpbnRlZ2VyIG9mIHR5cGUgbnVtYmVyLlxyXG4gICAqXHJcbiAgICogSW1wbGVtZW50cyAnZXhwb25lbnRpYXRpb24gYnkgc3F1YXJpbmcnLiBDYWxsZWQgYnkgYHBvd2AgYW5kIGBwYXJzZU90aGVyYC5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGludFBvdyhDdG9yLCB4LCBuLCBwcikge1xyXG4gICAgdmFyIGlzVHJ1bmNhdGVkLFxyXG4gICAgICByID0gbmV3IEN0b3IoMSksXHJcblxyXG4gICAgICAvLyBNYXggbiBvZiA5MDA3MTk5MjU0NzQwOTkxIHRha2VzIDUzIGxvb3AgaXRlcmF0aW9ucy5cclxuICAgICAgLy8gTWF4aW11bSBkaWdpdHMgYXJyYXkgbGVuZ3RoOyBsZWF2ZXMgWzI4LCAzNF0gZ3VhcmQgZGlnaXRzLlxyXG4gICAgICBrID0gTWF0aC5jZWlsKHByIC8gTE9HX0JBU0UgKyA0KTtcclxuXHJcbiAgICBleHRlcm5hbCA9IGZhbHNlO1xyXG5cclxuICAgIGZvciAoOzspIHtcclxuICAgICAgaWYgKG4gJSAyKSB7XHJcbiAgICAgICAgciA9IHIudGltZXMoeCk7XHJcbiAgICAgICAgaWYgKHRydW5jYXRlKHIuZCwgaykpIGlzVHJ1bmNhdGVkID0gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbiA9IG1hdGhmbG9vcihuIC8gMik7XHJcbiAgICAgIGlmIChuID09PSAwKSB7XHJcblxyXG4gICAgICAgIC8vIFRvIGVuc3VyZSBjb3JyZWN0IHJvdW5kaW5nIHdoZW4gci5kIGlzIHRydW5jYXRlZCwgaW5jcmVtZW50IHRoZSBsYXN0IHdvcmQgaWYgaXQgaXMgemVyby5cclxuICAgICAgICBuID0gci5kLmxlbmd0aCAtIDE7XHJcbiAgICAgICAgaWYgKGlzVHJ1bmNhdGVkICYmIHIuZFtuXSA9PT0gMCkgKytyLmRbbl07XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHggPSB4LnRpbWVzKHgpO1xyXG4gICAgICB0cnVuY2F0ZSh4LmQsIGspO1xyXG4gICAgfVxyXG5cclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuXHJcbiAgICByZXR1cm4gcjtcclxuICB9XHJcblxyXG5cclxuICBmdW5jdGlvbiBpc09kZChuKSB7XHJcbiAgICByZXR1cm4gbi5kW24uZC5sZW5ndGggLSAxXSAmIDE7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBIYW5kbGUgYG1heGAgYW5kIGBtaW5gLiBgbHRndGAgaXMgJ2x0JyBvciAnZ3QnLlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIG1heE9yTWluKEN0b3IsIGFyZ3MsIGx0Z3QpIHtcclxuICAgIHZhciB5LFxyXG4gICAgICB4ID0gbmV3IEN0b3IoYXJnc1swXSksXHJcbiAgICAgIGkgPSAwO1xyXG5cclxuICAgIGZvciAoOyArK2kgPCBhcmdzLmxlbmd0aDspIHtcclxuICAgICAgeSA9IG5ldyBDdG9yKGFyZ3NbaV0pO1xyXG4gICAgICBpZiAoIXkucykge1xyXG4gICAgICAgIHggPSB5O1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9IGVsc2UgaWYgKHhbbHRndF0oeSkpIHtcclxuICAgICAgICB4ID0geTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB4O1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIG5hdHVyYWwgZXhwb25lbnRpYWwgb2YgYHhgIHJvdW5kZWQgdG8gYHNkYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cy5cclxuICAgKlxyXG4gICAqIFRheWxvci9NYWNsYXVyaW4gc2VyaWVzLlxyXG4gICAqXHJcbiAgICogZXhwKHgpID0geF4wLzAhICsgeF4xLzEhICsgeF4yLzIhICsgeF4zLzMhICsgLi4uXHJcbiAgICpcclxuICAgKiBBcmd1bWVudCByZWR1Y3Rpb246XHJcbiAgICogICBSZXBlYXQgeCA9IHggLyAzMiwgayArPSA1LCB1bnRpbCB8eHwgPCAwLjFcclxuICAgKiAgIGV4cCh4KSA9IGV4cCh4IC8gMl5rKV4oMl5rKVxyXG4gICAqXHJcbiAgICogUHJldmlvdXNseSwgdGhlIGFyZ3VtZW50IHdhcyBpbml0aWFsbHkgcmVkdWNlZCBieVxyXG4gICAqIGV4cCh4KSA9IGV4cChyKSAqIDEwXmsgIHdoZXJlIHIgPSB4IC0gayAqIGxuMTAsIGsgPSBmbG9vcih4IC8gbG4xMClcclxuICAgKiB0byBmaXJzdCBwdXQgciBpbiB0aGUgcmFuZ2UgWzAsIGxuMTBdLCBiZWZvcmUgZGl2aWRpbmcgYnkgMzIgdW50aWwgfHh8IDwgMC4xLCBidXQgdGhpcyB3YXNcclxuICAgKiBmb3VuZCB0byBiZSBzbG93ZXIgdGhhbiBqdXN0IGRpdmlkaW5nIHJlcGVhdGVkbHkgYnkgMzIgYXMgYWJvdmUuXHJcbiAgICpcclxuICAgKiBNYXggaW50ZWdlciBhcmd1bWVudDogZXhwKCcyMDcyMzI2NTgzNjk0NjQxMycpID0gNi4zZSs5MDAwMDAwMDAwMDAwMDAwXHJcbiAgICogTWluIGludGVnZXIgYXJndW1lbnQ6IGV4cCgnLTIwNzIzMjY1ODM2OTQ2NDExJykgPSAxLjJlLTkwMDAwMDAwMDAwMDAwMDBcclxuICAgKiAoTWF0aCBvYmplY3QgaW50ZWdlciBtaW4vbWF4OiBNYXRoLmV4cCg3MDkpID0gOC4yZSszMDcsIE1hdGguZXhwKC03NDUpID0gNWUtMzI0KVxyXG4gICAqXHJcbiAgICogIGV4cChJbmZpbml0eSkgID0gSW5maW5pdHlcclxuICAgKiAgZXhwKC1JbmZpbml0eSkgPSAwXHJcbiAgICogIGV4cChOYU4pICAgICAgID0gTmFOXHJcbiAgICogIGV4cCjCsTApICAgICAgICA9IDFcclxuICAgKlxyXG4gICAqICBleHAoeCkgaXMgbm9uLXRlcm1pbmF0aW5nIGZvciBhbnkgZmluaXRlLCBub24temVybyB4LlxyXG4gICAqXHJcbiAgICogIFRoZSByZXN1bHQgd2lsbCBhbHdheXMgYmUgY29ycmVjdGx5IHJvdW5kZWQuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBuYXR1cmFsRXhwb25lbnRpYWwoeCwgc2QpIHtcclxuICAgIHZhciBkZW5vbWluYXRvciwgZ3VhcmQsIGosIHBvdywgc3VtLCB0LCB3cHIsXHJcbiAgICAgIHJlcCA9IDAsXHJcbiAgICAgIGkgPSAwLFxyXG4gICAgICBrID0gMCxcclxuICAgICAgQ3RvciA9IHguY29uc3RydWN0b3IsXHJcbiAgICAgIHJtID0gQ3Rvci5yb3VuZGluZyxcclxuICAgICAgcHIgPSBDdG9yLnByZWNpc2lvbjtcclxuXHJcbiAgICAvLyAwL05hTi9JbmZpbml0eT9cclxuICAgIGlmICgheC5kIHx8ICF4LmRbMF0gfHwgeC5lID4gMTcpIHtcclxuXHJcbiAgICAgIHJldHVybiBuZXcgQ3Rvcih4LmRcclxuICAgICAgICA/ICF4LmRbMF0gPyAxIDogeC5zIDwgMCA/IDAgOiAxIC8gMFxyXG4gICAgICAgIDogeC5zID8geC5zIDwgMCA/IDAgOiB4IDogMCAvIDApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChzZCA9PSBudWxsKSB7XHJcbiAgICAgIGV4dGVybmFsID0gZmFsc2U7XHJcbiAgICAgIHdwciA9IHByO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgd3ByID0gc2Q7XHJcbiAgICB9XHJcblxyXG4gICAgdCA9IG5ldyBDdG9yKDAuMDMxMjUpO1xyXG5cclxuICAgIC8vIHdoaWxlIGFicyh4KSA+PSAwLjFcclxuICAgIHdoaWxlICh4LmUgPiAtMikge1xyXG5cclxuICAgICAgLy8geCA9IHggLyAyXjVcclxuICAgICAgeCA9IHgudGltZXModCk7XHJcbiAgICAgIGsgKz0gNTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBVc2UgMiAqIGxvZzEwKDJeaykgKyA1IChlbXBpcmljYWxseSBkZXJpdmVkKSB0byBlc3RpbWF0ZSB0aGUgaW5jcmVhc2UgaW4gcHJlY2lzaW9uXHJcbiAgICAvLyBuZWNlc3NhcnkgdG8gZW5zdXJlIHRoZSBmaXJzdCA0IHJvdW5kaW5nIGRpZ2l0cyBhcmUgY29ycmVjdC5cclxuICAgIGd1YXJkID0gTWF0aC5sb2cobWF0aHBvdygyLCBrKSkgLyBNYXRoLkxOMTAgKiAyICsgNSB8IDA7XHJcbiAgICB3cHIgKz0gZ3VhcmQ7XHJcbiAgICBkZW5vbWluYXRvciA9IHBvdyA9IHN1bSA9IG5ldyBDdG9yKDEpO1xyXG4gICAgQ3Rvci5wcmVjaXNpb24gPSB3cHI7XHJcblxyXG4gICAgZm9yICg7Oykge1xyXG4gICAgICBwb3cgPSBmaW5hbGlzZShwb3cudGltZXMoeCksIHdwciwgMSk7XHJcbiAgICAgIGRlbm9taW5hdG9yID0gZGVub21pbmF0b3IudGltZXMoKytpKTtcclxuICAgICAgdCA9IHN1bS5wbHVzKGRpdmlkZShwb3csIGRlbm9taW5hdG9yLCB3cHIsIDEpKTtcclxuXHJcbiAgICAgIGlmIChkaWdpdHNUb1N0cmluZyh0LmQpLnNsaWNlKDAsIHdwcikgPT09IGRpZ2l0c1RvU3RyaW5nKHN1bS5kKS5zbGljZSgwLCB3cHIpKSB7XHJcbiAgICAgICAgaiA9IGs7XHJcbiAgICAgICAgd2hpbGUgKGotLSkgc3VtID0gZmluYWxpc2Uoc3VtLnRpbWVzKHN1bSksIHdwciwgMSk7XHJcblxyXG4gICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGUgZmlyc3QgNCByb3VuZGluZyBkaWdpdHMgYXJlIFs0OV05OTkuXHJcbiAgICAgICAgLy8gSWYgc28sIHJlcGVhdCB0aGUgc3VtbWF0aW9uIHdpdGggYSBoaWdoZXIgcHJlY2lzaW9uLCBvdGhlcndpc2VcclxuICAgICAgICAvLyBlLmcuIHdpdGggcHJlY2lzaW9uOiAxOCwgcm91bmRpbmc6IDFcclxuICAgICAgICAvLyBleHAoMTguNDA0MjcyNDYyNTk1MDM0MDgzNTY3NzkzOTE5ODQzNzYxKSA9IDk4MzcyNTYwLjEyMjk5OTk5OTkgKHNob3VsZCBiZSA5ODM3MjU2MC4xMjMpXHJcbiAgICAgICAgLy8gYHdwciAtIGd1YXJkYCBpcyB0aGUgaW5kZXggb2YgZmlyc3Qgcm91bmRpbmcgZGlnaXQuXHJcbiAgICAgICAgaWYgKHNkID09IG51bGwpIHtcclxuXHJcbiAgICAgICAgICBpZiAocmVwIDwgMyAmJiBjaGVja1JvdW5kaW5nRGlnaXRzKHN1bS5kLCB3cHIgLSBndWFyZCwgcm0sIHJlcCkpIHtcclxuICAgICAgICAgICAgQ3Rvci5wcmVjaXNpb24gPSB3cHIgKz0gMTA7XHJcbiAgICAgICAgICAgIGRlbm9taW5hdG9yID0gcG93ID0gdCA9IG5ldyBDdG9yKDEpO1xyXG4gICAgICAgICAgICBpID0gMDtcclxuICAgICAgICAgICAgcmVwKys7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZmluYWxpc2Uoc3VtLCBDdG9yLnByZWNpc2lvbiA9IHByLCBybSwgZXh0ZXJuYWwgPSB0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgQ3Rvci5wcmVjaXNpb24gPSBwcjtcclxuICAgICAgICAgIHJldHVybiBzdW07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBzdW0gPSB0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIGB4YCByb3VuZGVkIHRvIGBzZGAgc2lnbmlmaWNhbnRcclxuICAgKiBkaWdpdHMuXHJcbiAgICpcclxuICAgKiAgbG4oLW4pICAgICAgICA9IE5hTlxyXG4gICAqICBsbigwKSAgICAgICAgID0gLUluZmluaXR5XHJcbiAgICogIGxuKC0wKSAgICAgICAgPSAtSW5maW5pdHlcclxuICAgKiAgbG4oMSkgICAgICAgICA9IDBcclxuICAgKiAgbG4oSW5maW5pdHkpICA9IEluZmluaXR5XHJcbiAgICogIGxuKC1JbmZpbml0eSkgPSBOYU5cclxuICAgKiAgbG4oTmFOKSAgICAgICA9IE5hTlxyXG4gICAqXHJcbiAgICogIGxuKG4pIChuICE9IDEpIGlzIG5vbi10ZXJtaW5hdGluZy5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIG5hdHVyYWxMb2dhcml0aG0oeSwgc2QpIHtcclxuICAgIHZhciBjLCBjMCwgZGVub21pbmF0b3IsIGUsIG51bWVyYXRvciwgcmVwLCBzdW0sIHQsIHdwciwgeDEsIHgyLFxyXG4gICAgICBuID0gMSxcclxuICAgICAgZ3VhcmQgPSAxMCxcclxuICAgICAgeCA9IHksXHJcbiAgICAgIHhkID0geC5kLFxyXG4gICAgICBDdG9yID0geC5jb25zdHJ1Y3RvcixcclxuICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nLFxyXG4gICAgICBwciA9IEN0b3IucHJlY2lzaW9uO1xyXG5cclxuICAgIC8vIElzIHggbmVnYXRpdmUgb3IgSW5maW5pdHksIE5hTiwgMCBvciAxP1xyXG4gICAgaWYgKHgucyA8IDAgfHwgIXhkIHx8ICF4ZFswXSB8fCAheC5lICYmIHhkWzBdID09IDEgJiYgeGQubGVuZ3RoID09IDEpIHtcclxuICAgICAgcmV0dXJuIG5ldyBDdG9yKHhkICYmICF4ZFswXSA/IC0xIC8gMCA6IHgucyAhPSAxID8gTmFOIDogeGQgPyAwIDogeCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHNkID09IG51bGwpIHtcclxuICAgICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuICAgICAgd3ByID0gcHI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB3cHIgPSBzZDtcclxuICAgIH1cclxuXHJcbiAgICBDdG9yLnByZWNpc2lvbiA9IHdwciArPSBndWFyZDtcclxuICAgIGMgPSBkaWdpdHNUb1N0cmluZyh4ZCk7XHJcbiAgICBjMCA9IGMuY2hhckF0KDApO1xyXG5cclxuICAgIGlmIChNYXRoLmFicyhlID0geC5lKSA8IDEuNWUxNSkge1xyXG5cclxuICAgICAgLy8gQXJndW1lbnQgcmVkdWN0aW9uLlxyXG4gICAgICAvLyBUaGUgc2VyaWVzIGNvbnZlcmdlcyBmYXN0ZXIgdGhlIGNsb3NlciB0aGUgYXJndW1lbnQgaXMgdG8gMSwgc28gdXNpbmdcclxuICAgICAgLy8gbG4oYV5iKSA9IGIgKiBsbihhKSwgICBsbihhKSA9IGxuKGFeYikgLyBiXHJcbiAgICAgIC8vIG11bHRpcGx5IHRoZSBhcmd1bWVudCBieSBpdHNlbGYgdW50aWwgdGhlIGxlYWRpbmcgZGlnaXRzIG9mIHRoZSBzaWduaWZpY2FuZCBhcmUgNywgOCwgOSxcclxuICAgICAgLy8gMTAsIDExLCAxMiBvciAxMywgcmVjb3JkaW5nIHRoZSBudW1iZXIgb2YgbXVsdGlwbGljYXRpb25zIHNvIHRoZSBzdW0gb2YgdGhlIHNlcmllcyBjYW5cclxuICAgICAgLy8gbGF0ZXIgYmUgZGl2aWRlZCBieSB0aGlzIG51bWJlciwgdGhlbiBzZXBhcmF0ZSBvdXQgdGhlIHBvd2VyIG9mIDEwIHVzaW5nXHJcbiAgICAgIC8vIGxuKGEqMTBeYikgPSBsbihhKSArIGIqbG4oMTApLlxyXG5cclxuICAgICAgLy8gbWF4IG4gaXMgMjEgKGdpdmVzIDAuOSwgMS4wIG9yIDEuMSkgKDllMTUgLyAyMSA9IDQuMmUxNCkuXHJcbiAgICAgIC8vd2hpbGUgKGMwIDwgOSAmJiBjMCAhPSAxIHx8IGMwID09IDEgJiYgYy5jaGFyQXQoMSkgPiAxKSB7XHJcbiAgICAgIC8vIG1heCBuIGlzIDYgKGdpdmVzIDAuNyAtIDEuMylcclxuICAgICAgd2hpbGUgKGMwIDwgNyAmJiBjMCAhPSAxIHx8IGMwID09IDEgJiYgYy5jaGFyQXQoMSkgPiAzKSB7XHJcbiAgICAgICAgeCA9IHgudGltZXMoeSk7XHJcbiAgICAgICAgYyA9IGRpZ2l0c1RvU3RyaW5nKHguZCk7XHJcbiAgICAgICAgYzAgPSBjLmNoYXJBdCgwKTtcclxuICAgICAgICBuKys7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGUgPSB4LmU7XHJcblxyXG4gICAgICBpZiAoYzAgPiAxKSB7XHJcbiAgICAgICAgeCA9IG5ldyBDdG9yKCcwLicgKyBjKTtcclxuICAgICAgICBlKys7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgeCA9IG5ldyBDdG9yKGMwICsgJy4nICsgYy5zbGljZSgxKSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAvLyBUaGUgYXJndW1lbnQgcmVkdWN0aW9uIG1ldGhvZCBhYm92ZSBtYXkgcmVzdWx0IGluIG92ZXJmbG93IGlmIHRoZSBhcmd1bWVudCB5IGlzIGEgbWFzc2l2ZVxyXG4gICAgICAvLyBudW1iZXIgd2l0aCBleHBvbmVudCA+PSAxNTAwMDAwMDAwMDAwMDAwICg5ZTE1IC8gNiA9IDEuNWUxNSksIHNvIGluc3RlYWQgcmVjYWxsIHRoaXNcclxuICAgICAgLy8gZnVuY3Rpb24gdXNpbmcgbG4oeCoxMF5lKSA9IGxuKHgpICsgZSpsbigxMCkuXHJcbiAgICAgIHQgPSBnZXRMbjEwKEN0b3IsIHdwciArIDIsIHByKS50aW1lcyhlICsgJycpO1xyXG4gICAgICB4ID0gbmF0dXJhbExvZ2FyaXRobShuZXcgQ3RvcihjMCArICcuJyArIGMuc2xpY2UoMSkpLCB3cHIgLSBndWFyZCkucGx1cyh0KTtcclxuICAgICAgQ3Rvci5wcmVjaXNpb24gPSBwcjtcclxuXHJcbiAgICAgIHJldHVybiBzZCA9PSBudWxsID8gZmluYWxpc2UoeCwgcHIsIHJtLCBleHRlcm5hbCA9IHRydWUpIDogeDtcclxuICAgIH1cclxuXHJcbiAgICAvLyB4MSBpcyB4IHJlZHVjZWQgdG8gYSB2YWx1ZSBuZWFyIDEuXHJcbiAgICB4MSA9IHg7XHJcblxyXG4gICAgLy8gVGF5bG9yIHNlcmllcy5cclxuICAgIC8vIGxuKHkpID0gbG4oKDEgKyB4KS8oMSAtIHgpKSA9IDIoeCArIHheMy8zICsgeF41LzUgKyB4XjcvNyArIC4uLilcclxuICAgIC8vIHdoZXJlIHggPSAoeSAtIDEpLyh5ICsgMSkgICAgKHx4fCA8IDEpXHJcbiAgICBzdW0gPSBudW1lcmF0b3IgPSB4ID0gZGl2aWRlKHgubWludXMoMSksIHgucGx1cygxKSwgd3ByLCAxKTtcclxuICAgIHgyID0gZmluYWxpc2UoeC50aW1lcyh4KSwgd3ByLCAxKTtcclxuICAgIGRlbm9taW5hdG9yID0gMztcclxuXHJcbiAgICBmb3IgKDs7KSB7XHJcbiAgICAgIG51bWVyYXRvciA9IGZpbmFsaXNlKG51bWVyYXRvci50aW1lcyh4MiksIHdwciwgMSk7XHJcbiAgICAgIHQgPSBzdW0ucGx1cyhkaXZpZGUobnVtZXJhdG9yLCBuZXcgQ3RvcihkZW5vbWluYXRvciksIHdwciwgMSkpO1xyXG5cclxuICAgICAgaWYgKGRpZ2l0c1RvU3RyaW5nKHQuZCkuc2xpY2UoMCwgd3ByKSA9PT0gZGlnaXRzVG9TdHJpbmcoc3VtLmQpLnNsaWNlKDAsIHdwcikpIHtcclxuICAgICAgICBzdW0gPSBzdW0udGltZXMoMik7XHJcblxyXG4gICAgICAgIC8vIFJldmVyc2UgdGhlIGFyZ3VtZW50IHJlZHVjdGlvbi4gQ2hlY2sgdGhhdCBlIGlzIG5vdCAwIGJlY2F1c2UsIGJlc2lkZXMgcHJldmVudGluZyBhblxyXG4gICAgICAgIC8vIHVubmVjZXNzYXJ5IGNhbGN1bGF0aW9uLCAtMCArIDAgPSArMCBhbmQgdG8gZW5zdXJlIGNvcnJlY3Qgcm91bmRpbmcgLTAgbmVlZHMgdG8gc3RheSAtMC5cclxuICAgICAgICBpZiAoZSAhPT0gMCkgc3VtID0gc3VtLnBsdXMoZ2V0TG4xMChDdG9yLCB3cHIgKyAyLCBwcikudGltZXMoZSArICcnKSk7XHJcbiAgICAgICAgc3VtID0gZGl2aWRlKHN1bSwgbmV3IEN0b3IobiksIHdwciwgMSk7XHJcblxyXG4gICAgICAgIC8vIElzIHJtID4gMyBhbmQgdGhlIGZpcnN0IDQgcm91bmRpbmcgZGlnaXRzIDQ5OTksIG9yIHJtIDwgNCAob3IgdGhlIHN1bW1hdGlvbiBoYXNcclxuICAgICAgICAvLyBiZWVuIHJlcGVhdGVkIHByZXZpb3VzbHkpIGFuZCB0aGUgZmlyc3QgNCByb3VuZGluZyBkaWdpdHMgOTk5OT9cclxuICAgICAgICAvLyBJZiBzbywgcmVzdGFydCB0aGUgc3VtbWF0aW9uIHdpdGggYSBoaWdoZXIgcHJlY2lzaW9uLCBvdGhlcndpc2VcclxuICAgICAgICAvLyBlLmcuIHdpdGggcHJlY2lzaW9uOiAxMiwgcm91bmRpbmc6IDFcclxuICAgICAgICAvLyBsbigxMzU1MjAwMjguNjEyNjA5MTcxNDI2NTM4MTUzMykgPSAxOC43MjQ2Mjk5OTk5IHdoZW4gaXQgc2hvdWxkIGJlIDE4LjcyNDYzLlxyXG4gICAgICAgIC8vIGB3cHIgLSBndWFyZGAgaXMgdGhlIGluZGV4IG9mIGZpcnN0IHJvdW5kaW5nIGRpZ2l0LlxyXG4gICAgICAgIGlmIChzZCA9PSBudWxsKSB7XHJcbiAgICAgICAgICBpZiAoY2hlY2tSb3VuZGluZ0RpZ2l0cyhzdW0uZCwgd3ByIC0gZ3VhcmQsIHJtLCByZXApKSB7XHJcbiAgICAgICAgICAgIEN0b3IucHJlY2lzaW9uID0gd3ByICs9IGd1YXJkO1xyXG4gICAgICAgICAgICB0ID0gbnVtZXJhdG9yID0geCA9IGRpdmlkZSh4MS5taW51cygxKSwgeDEucGx1cygxKSwgd3ByLCAxKTtcclxuICAgICAgICAgICAgeDIgPSBmaW5hbGlzZSh4LnRpbWVzKHgpLCB3cHIsIDEpO1xyXG4gICAgICAgICAgICBkZW5vbWluYXRvciA9IHJlcCA9IDE7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gZmluYWxpc2Uoc3VtLCBDdG9yLnByZWNpc2lvbiA9IHByLCBybSwgZXh0ZXJuYWwgPSB0cnVlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgQ3Rvci5wcmVjaXNpb24gPSBwcjtcclxuICAgICAgICAgIHJldHVybiBzdW07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBzdW0gPSB0O1xyXG4gICAgICBkZW5vbWluYXRvciArPSAyO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcblxyXG4gIC8vIMKxSW5maW5pdHksIE5hTi5cclxuICBmdW5jdGlvbiBub25GaW5pdGVUb1N0cmluZyh4KSB7XHJcbiAgICAvLyBVbnNpZ25lZC5cclxuICAgIHJldHVybiBTdHJpbmcoeC5zICogeC5zIC8gMCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBQYXJzZSB0aGUgdmFsdWUgb2YgYSBuZXcgRGVjaW1hbCBgeGAgZnJvbSBzdHJpbmcgYHN0cmAuXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gcGFyc2VEZWNpbWFsKHgsIHN0cikge1xyXG4gICAgdmFyIGUsIGksIGxlbjtcclxuXHJcbiAgICAvLyBEZWNpbWFsIHBvaW50P1xyXG4gICAgaWYgKChlID0gc3RyLmluZGV4T2YoJy4nKSkgPiAtMSkgc3RyID0gc3RyLnJlcGxhY2UoJy4nLCAnJyk7XHJcblxyXG4gICAgLy8gRXhwb25lbnRpYWwgZm9ybT9cclxuICAgIGlmICgoaSA9IHN0ci5zZWFyY2goL2UvaSkpID4gMCkge1xyXG5cclxuICAgICAgLy8gRGV0ZXJtaW5lIGV4cG9uZW50LlxyXG4gICAgICBpZiAoZSA8IDApIGUgPSBpO1xyXG4gICAgICBlICs9ICtzdHIuc2xpY2UoaSArIDEpO1xyXG4gICAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDAsIGkpO1xyXG4gICAgfSBlbHNlIGlmIChlIDwgMCkge1xyXG5cclxuICAgICAgLy8gSW50ZWdlci5cclxuICAgICAgZSA9IHN0ci5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gRGV0ZXJtaW5lIGxlYWRpbmcgemVyb3MuXHJcbiAgICBmb3IgKGkgPSAwOyBzdHIuY2hhckNvZGVBdChpKSA9PT0gNDg7IGkrKyk7XHJcblxyXG4gICAgLy8gRGV0ZXJtaW5lIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgZm9yIChsZW4gPSBzdHIubGVuZ3RoOyBzdHIuY2hhckNvZGVBdChsZW4gLSAxKSA9PT0gNDg7IC0tbGVuKTtcclxuICAgIHN0ciA9IHN0ci5zbGljZShpLCBsZW4pO1xyXG5cclxuICAgIGlmIChzdHIpIHtcclxuICAgICAgbGVuIC09IGk7XHJcbiAgICAgIHguZSA9IGUgPSBlIC0gaSAtIDE7XHJcbiAgICAgIHguZCA9IFtdO1xyXG5cclxuICAgICAgLy8gVHJhbnNmb3JtIGJhc2VcclxuXHJcbiAgICAgIC8vIGUgaXMgdGhlIGJhc2UgMTAgZXhwb25lbnQuXHJcbiAgICAgIC8vIGkgaXMgd2hlcmUgdG8gc2xpY2Ugc3RyIHRvIGdldCB0aGUgZmlyc3Qgd29yZCBvZiB0aGUgZGlnaXRzIGFycmF5LlxyXG4gICAgICBpID0gKGUgKyAxKSAlIExPR19CQVNFO1xyXG4gICAgICBpZiAoZSA8IDApIGkgKz0gTE9HX0JBU0U7XHJcblxyXG4gICAgICBpZiAoaSA8IGxlbikge1xyXG4gICAgICAgIGlmIChpKSB4LmQucHVzaCgrc3RyLnNsaWNlKDAsIGkpKTtcclxuICAgICAgICBmb3IgKGxlbiAtPSBMT0dfQkFTRTsgaSA8IGxlbjspIHguZC5wdXNoKCtzdHIuc2xpY2UoaSwgaSArPSBMT0dfQkFTRSkpO1xyXG4gICAgICAgIHN0ciA9IHN0ci5zbGljZShpKTtcclxuICAgICAgICBpID0gTE9HX0JBU0UgLSBzdHIubGVuZ3RoO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGkgLT0gbGVuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBmb3IgKDsgaS0tOykgc3RyICs9ICcwJztcclxuICAgICAgeC5kLnB1c2goK3N0cik7XHJcblxyXG4gICAgICBpZiAoZXh0ZXJuYWwpIHtcclxuXHJcbiAgICAgICAgLy8gT3ZlcmZsb3c/XHJcbiAgICAgICAgaWYgKHguZSA+IHguY29uc3RydWN0b3IubWF4RSkge1xyXG5cclxuICAgICAgICAgIC8vIEluZmluaXR5LlxyXG4gICAgICAgICAgeC5kID0gbnVsbDtcclxuICAgICAgICAgIHguZSA9IE5hTjtcclxuXHJcbiAgICAgICAgLy8gVW5kZXJmbG93P1xyXG4gICAgICAgIH0gZWxzZSBpZiAoeC5lIDwgeC5jb25zdHJ1Y3Rvci5taW5FKSB7XHJcblxyXG4gICAgICAgICAgLy8gWmVyby5cclxuICAgICAgICAgIHguZSA9IDA7XHJcbiAgICAgICAgICB4LmQgPSBbMF07XHJcbiAgICAgICAgICAvLyB4LmNvbnN0cnVjdG9yLnVuZGVyZmxvdyA9IHRydWU7XHJcbiAgICAgICAgfSAvLyBlbHNlIHguY29uc3RydWN0b3IudW5kZXJmbG93ID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAvLyBaZXJvLlxyXG4gICAgICB4LmUgPSAwO1xyXG4gICAgICB4LmQgPSBbMF07XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHg7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBQYXJzZSB0aGUgdmFsdWUgb2YgYSBuZXcgRGVjaW1hbCBgeGAgZnJvbSBhIHN0cmluZyBgc3RyYCwgd2hpY2ggaXMgbm90IGEgZGVjaW1hbCB2YWx1ZS5cclxuICAgKi9cclxuICBmdW5jdGlvbiBwYXJzZU90aGVyKHgsIHN0cikge1xyXG4gICAgdmFyIGJhc2UsIEN0b3IsIGRpdmlzb3IsIGksIGlzRmxvYXQsIGxlbiwgcCwgeGQsIHhlO1xyXG5cclxuICAgIGlmIChzdHIgPT09ICdJbmZpbml0eScgfHwgc3RyID09PSAnTmFOJykge1xyXG4gICAgICBpZiAoIStzdHIpIHgucyA9IE5hTjtcclxuICAgICAgeC5lID0gTmFOO1xyXG4gICAgICB4LmQgPSBudWxsO1xyXG4gICAgICByZXR1cm4geDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoaXNIZXgudGVzdChzdHIpKSAge1xyXG4gICAgICBiYXNlID0gMTY7XHJcbiAgICAgIHN0ciA9IHN0ci50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfSBlbHNlIGlmIChpc0JpbmFyeS50ZXN0KHN0cikpICB7XHJcbiAgICAgIGJhc2UgPSAyO1xyXG4gICAgfSBlbHNlIGlmIChpc09jdGFsLnRlc3Qoc3RyKSkgIHtcclxuICAgICAgYmFzZSA9IDg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aHJvdyBFcnJvcihpbnZhbGlkQXJndW1lbnQgKyBzdHIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElzIHRoZXJlIGEgYmluYXJ5IGV4cG9uZW50IHBhcnQ/XHJcbiAgICBpID0gc3RyLnNlYXJjaCgvcC9pKTtcclxuXHJcbiAgICBpZiAoaSA+IDApIHtcclxuICAgICAgcCA9ICtzdHIuc2xpY2UoaSArIDEpO1xyXG4gICAgICBzdHIgPSBzdHIuc3Vic3RyaW5nKDIsIGkpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3RyID0gc3RyLnNsaWNlKDIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENvbnZlcnQgYHN0cmAgYXMgYW4gaW50ZWdlciB0aGVuIGRpdmlkZSB0aGUgcmVzdWx0IGJ5IGBiYXNlYCByYWlzZWQgdG8gYSBwb3dlciBzdWNoIHRoYXQgdGhlXHJcbiAgICAvLyBmcmFjdGlvbiBwYXJ0IHdpbGwgYmUgcmVzdG9yZWQuXHJcbiAgICBpID0gc3RyLmluZGV4T2YoJy4nKTtcclxuICAgIGlzRmxvYXQgPSBpID49IDA7XHJcbiAgICBDdG9yID0geC5jb25zdHJ1Y3RvcjtcclxuXHJcbiAgICBpZiAoaXNGbG9hdCkge1xyXG4gICAgICBzdHIgPSBzdHIucmVwbGFjZSgnLicsICcnKTtcclxuICAgICAgbGVuID0gc3RyLmxlbmd0aDtcclxuICAgICAgaSA9IGxlbiAtIGk7XHJcblxyXG4gICAgICAvLyBsb2dbMTBdKDE2KSA9IDEuMjA0MS4uLiAsIGxvZ1sxMF0oODgpID0gMS45NDQ0Li4uLlxyXG4gICAgICBkaXZpc29yID0gaW50UG93KEN0b3IsIG5ldyBDdG9yKGJhc2UpLCBpLCBpICogMik7XHJcbiAgICB9XHJcblxyXG4gICAgeGQgPSBjb252ZXJ0QmFzZShzdHIsIGJhc2UsIEJBU0UpO1xyXG4gICAgeGUgPSB4ZC5sZW5ndGggLSAxO1xyXG5cclxuICAgIC8vIFJlbW92ZSB0cmFpbGluZyB6ZXJvcy5cclxuICAgIGZvciAoaSA9IHhlOyB4ZFtpXSA9PT0gMDsgLS1pKSB4ZC5wb3AoKTtcclxuICAgIGlmIChpIDwgMCkgcmV0dXJuIG5ldyBDdG9yKHgucyAqIDApO1xyXG4gICAgeC5lID0gZ2V0QmFzZTEwRXhwb25lbnQoeGQsIHhlKTtcclxuICAgIHguZCA9IHhkO1xyXG4gICAgZXh0ZXJuYWwgPSBmYWxzZTtcclxuXHJcbiAgICAvLyBBdCB3aGF0IHByZWNpc2lvbiB0byBwZXJmb3JtIHRoZSBkaXZpc2lvbiB0byBlbnN1cmUgZXhhY3QgY29udmVyc2lvbj9cclxuICAgIC8vIG1heERlY2ltYWxJbnRlZ2VyUGFydERpZ2l0Q291bnQgPSBjZWlsKGxvZ1sxMF0oYikgKiBvdGhlckJhc2VJbnRlZ2VyUGFydERpZ2l0Q291bnQpXHJcbiAgICAvLyBsb2dbMTBdKDIpID0gMC4zMDEwMywgbG9nWzEwXSg4KSA9IDAuOTAzMDksIGxvZ1sxMF0oMTYpID0gMS4yMDQxMlxyXG4gICAgLy8gRS5nLiBjZWlsKDEuMiAqIDMpID0gNCwgc28gdXAgdG8gNCBkZWNpbWFsIGRpZ2l0cyBhcmUgbmVlZGVkIHRvIHJlcHJlc2VudCAzIGhleCBpbnQgZGlnaXRzLlxyXG4gICAgLy8gbWF4RGVjaW1hbEZyYWN0aW9uUGFydERpZ2l0Q291bnQgPSB7SGV4OjR8T2N0OjN8QmluOjF9ICogb3RoZXJCYXNlRnJhY3Rpb25QYXJ0RGlnaXRDb3VudFxyXG4gICAgLy8gVGhlcmVmb3JlIHVzaW5nIDQgKiB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiBzdHIgd2lsbCBhbHdheXMgYmUgZW5vdWdoLlxyXG4gICAgaWYgKGlzRmxvYXQpIHggPSBkaXZpZGUoeCwgZGl2aXNvciwgbGVuICogNCk7XHJcblxyXG4gICAgLy8gTXVsdGlwbHkgYnkgdGhlIGJpbmFyeSBleHBvbmVudCBwYXJ0IGlmIHByZXNlbnQuXHJcbiAgICBpZiAocCkgeCA9IHgudGltZXMoTWF0aC5hYnMocCkgPCA1NCA/IG1hdGhwb3coMiwgcCkgOiBEZWNpbWFsLnBvdygyLCBwKSk7XHJcbiAgICBleHRlcm5hbCA9IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIHg7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBzaW4oeCkgPSB4IC0geF4zLzMhICsgeF41LzUhIC0gLi4uXHJcbiAgICogfHh8IDwgcGkvMlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gc2luZShDdG9yLCB4KSB7XHJcbiAgICB2YXIgayxcclxuICAgICAgbGVuID0geC5kLmxlbmd0aDtcclxuXHJcbiAgICBpZiAobGVuIDwgMykgcmV0dXJuIHRheWxvclNlcmllcyhDdG9yLCAyLCB4LCB4KTtcclxuXHJcbiAgICAvLyBBcmd1bWVudCByZWR1Y3Rpb246IHNpbig1eCkgPSAxNipzaW5eNSh4KSAtIDIwKnNpbl4zKHgpICsgNSpzaW4oeClcclxuICAgIC8vIGkuZS4gc2luKHgpID0gMTYqc2luXjUoeC81KSAtIDIwKnNpbl4zKHgvNSkgKyA1KnNpbih4LzUpXHJcbiAgICAvLyBhbmQgIHNpbih4KSA9IHNpbih4LzUpKDUgKyBzaW5eMih4LzUpKDE2c2luXjIoeC81KSAtIDIwKSlcclxuXHJcbiAgICAvLyBFc3RpbWF0ZSB0aGUgb3B0aW11bSBudW1iZXIgb2YgdGltZXMgdG8gdXNlIHRoZSBhcmd1bWVudCByZWR1Y3Rpb24uXHJcbiAgICBrID0gMS40ICogTWF0aC5zcXJ0KGxlbik7XHJcbiAgICBrID0gayA+IDE2ID8gMTYgOiBrIHwgMDtcclxuXHJcbiAgICB4ID0geC50aW1lcygxIC8gdGlueVBvdyg1LCBrKSk7XHJcbiAgICB4ID0gdGF5bG9yU2VyaWVzKEN0b3IsIDIsIHgsIHgpO1xyXG5cclxuICAgIC8vIFJldmVyc2UgYXJndW1lbnQgcmVkdWN0aW9uXHJcbiAgICB2YXIgc2luMl94LFxyXG4gICAgICBkNSA9IG5ldyBDdG9yKDUpLFxyXG4gICAgICBkMTYgPSBuZXcgQ3RvcigxNiksXHJcbiAgICAgIGQyMCA9IG5ldyBDdG9yKDIwKTtcclxuICAgIGZvciAoOyBrLS07KSB7XHJcbiAgICAgIHNpbjJfeCA9IHgudGltZXMoeCk7XHJcbiAgICAgIHggPSB4LnRpbWVzKGQ1LnBsdXMoc2luMl94LnRpbWVzKGQxNi50aW1lcyhzaW4yX3gpLm1pbnVzKGQyMCkpKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHg7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gQ2FsY3VsYXRlIFRheWxvciBzZXJpZXMgZm9yIGBjb3NgLCBgY29zaGAsIGBzaW5gIGFuZCBgc2luaGAuXHJcbiAgZnVuY3Rpb24gdGF5bG9yU2VyaWVzKEN0b3IsIG4sIHgsIHksIGlzSHlwZXJib2xpYykge1xyXG4gICAgdmFyIGosIHQsIHUsIHgyLFxyXG4gICAgICBpID0gMSxcclxuICAgICAgcHIgPSBDdG9yLnByZWNpc2lvbixcclxuICAgICAgayA9IE1hdGguY2VpbChwciAvIExPR19CQVNFKTtcclxuXHJcbiAgICBleHRlcm5hbCA9IGZhbHNlO1xyXG4gICAgeDIgPSB4LnRpbWVzKHgpO1xyXG4gICAgdSA9IG5ldyBDdG9yKHkpO1xyXG5cclxuICAgIGZvciAoOzspIHtcclxuICAgICAgdCA9IGRpdmlkZSh1LnRpbWVzKHgyKSwgbmV3IEN0b3IobisrICogbisrKSwgcHIsIDEpO1xyXG4gICAgICB1ID0gaXNIeXBlcmJvbGljID8geS5wbHVzKHQpIDogeS5taW51cyh0KTtcclxuICAgICAgeSA9IGRpdmlkZSh0LnRpbWVzKHgyKSwgbmV3IEN0b3IobisrICogbisrKSwgcHIsIDEpO1xyXG4gICAgICB0ID0gdS5wbHVzKHkpO1xyXG5cclxuICAgICAgaWYgKHQuZFtrXSAhPT0gdm9pZCAwKSB7XHJcbiAgICAgICAgZm9yIChqID0gazsgdC5kW2pdID09PSB1LmRbal0gJiYgai0tOyk7XHJcbiAgICAgICAgaWYgKGogPT0gLTEpIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBqID0gdTtcclxuICAgICAgdSA9IHk7XHJcbiAgICAgIHkgPSB0O1xyXG4gICAgICB0ID0gajtcclxuICAgICAgaSsrO1xyXG4gICAgfVxyXG5cclxuICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuICAgIHQuZC5sZW5ndGggPSBrICsgMTtcclxuXHJcbiAgICByZXR1cm4gdDtcclxuICB9XHJcblxyXG5cclxuICAvLyBFeHBvbmVudCBlIG11c3QgYmUgcG9zaXRpdmUgYW5kIG5vbi16ZXJvLlxyXG4gIGZ1bmN0aW9uIHRpbnlQb3coYiwgZSkge1xyXG4gICAgdmFyIG4gPSBiO1xyXG4gICAgd2hpbGUgKC0tZSkgbiAqPSBiO1xyXG4gICAgcmV0dXJuIG47XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gUmV0dXJuIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBgeGAgcmVkdWNlZCB0byBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gaGFsZiBwaS5cclxuICBmdW5jdGlvbiB0b0xlc3NUaGFuSGFsZlBpKEN0b3IsIHgpIHtcclxuICAgIHZhciB0LFxyXG4gICAgICBpc05lZyA9IHgucyA8IDAsXHJcbiAgICAgIHBpID0gZ2V0UGkoQ3RvciwgQ3Rvci5wcmVjaXNpb24sIDEpLFxyXG4gICAgICBoYWxmUGkgPSBwaS50aW1lcygwLjUpO1xyXG5cclxuICAgIHggPSB4LmFicygpO1xyXG5cclxuICAgIGlmICh4Lmx0ZShoYWxmUGkpKSB7XHJcbiAgICAgIHF1YWRyYW50ID0gaXNOZWcgPyA0IDogMTtcclxuICAgICAgcmV0dXJuIHg7XHJcbiAgICB9XHJcblxyXG4gICAgdCA9IHguZGl2VG9JbnQocGkpO1xyXG5cclxuICAgIGlmICh0LmlzWmVybygpKSB7XHJcbiAgICAgIHF1YWRyYW50ID0gaXNOZWcgPyAzIDogMjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHggPSB4Lm1pbnVzKHQudGltZXMocGkpKTtcclxuXHJcbiAgICAgIC8vIDAgPD0geCA8IHBpXHJcbiAgICAgIGlmICh4Lmx0ZShoYWxmUGkpKSB7XHJcbiAgICAgICAgcXVhZHJhbnQgPSBpc09kZCh0KSA/IChpc05lZyA/IDIgOiAzKSA6IChpc05lZyA/IDQgOiAxKTtcclxuICAgICAgICByZXR1cm4geDtcclxuICAgICAgfVxyXG5cclxuICAgICAgcXVhZHJhbnQgPSBpc09kZCh0KSA/IChpc05lZyA/IDEgOiA0KSA6IChpc05lZyA/IDMgOiAyKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geC5taW51cyhwaSkuYWJzKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIERlY2ltYWwgYHhgIGFzIGEgc3RyaW5nIGluIGJhc2UgYGJhc2VPdXRgLlxyXG4gICAqXHJcbiAgICogSWYgdGhlIG9wdGlvbmFsIGBzZGAgYXJndW1lbnQgaXMgcHJlc2VudCBpbmNsdWRlIGEgYmluYXJ5IGV4cG9uZW50IHN1ZmZpeC5cclxuICAgKi9cclxuICBmdW5jdGlvbiB0b1N0cmluZ0JpbmFyeSh4LCBiYXNlT3V0LCBzZCwgcm0pIHtcclxuICAgIHZhciBiYXNlLCBlLCBpLCBrLCBsZW4sIHJvdW5kVXAsIHN0ciwgeGQsIHksXHJcbiAgICAgIEN0b3IgPSB4LmNvbnN0cnVjdG9yLFxyXG4gICAgICBpc0V4cCA9IHNkICE9PSB2b2lkIDA7XHJcblxyXG4gICAgaWYgKGlzRXhwKSB7XHJcbiAgICAgIGNoZWNrSW50MzIoc2QsIDEsIE1BWF9ESUdJVFMpO1xyXG4gICAgICBpZiAocm0gPT09IHZvaWQgMCkgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgICBlbHNlIGNoZWNrSW50MzIocm0sIDAsIDgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc2QgPSBDdG9yLnByZWNpc2lvbjtcclxuICAgICAgcm0gPSBDdG9yLnJvdW5kaW5nO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICgheC5pc0Zpbml0ZSgpKSB7XHJcbiAgICAgIHN0ciA9IG5vbkZpbml0ZVRvU3RyaW5nKHgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgc3RyID0gZmluaXRlVG9TdHJpbmcoeCk7XHJcbiAgICAgIGkgPSBzdHIuaW5kZXhPZignLicpO1xyXG5cclxuICAgICAgLy8gVXNlIGV4cG9uZW50aWFsIG5vdGF0aW9uIGFjY29yZGluZyB0byBgdG9FeHBQb3NgIGFuZCBgdG9FeHBOZWdgPyBObywgYnV0IGlmIHJlcXVpcmVkOlxyXG4gICAgICAvLyBtYXhCaW5hcnlFeHBvbmVudCA9IGZsb29yKChkZWNpbWFsRXhwb25lbnQgKyAxKSAqIGxvZ1syXSgxMCkpXHJcbiAgICAgIC8vIG1pbkJpbmFyeUV4cG9uZW50ID0gZmxvb3IoZGVjaW1hbEV4cG9uZW50ICogbG9nWzJdKDEwKSlcclxuICAgICAgLy8gbG9nWzJdKDEwKSA9IDMuMzIxOTI4MDk0ODg3MzYyMzQ3ODcwMzE5NDI5NDg5MzkwMTc1ODY0XHJcblxyXG4gICAgICBpZiAoaXNFeHApIHtcclxuICAgICAgICBiYXNlID0gMjtcclxuICAgICAgICBpZiAoYmFzZU91dCA9PSAxNikge1xyXG4gICAgICAgICAgc2QgPSBzZCAqIDQgLSAzO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYmFzZU91dCA9PSA4KSB7XHJcbiAgICAgICAgICBzZCA9IHNkICogMyAtIDI7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGJhc2UgPSBiYXNlT3V0O1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBDb252ZXJ0IHRoZSBudW1iZXIgYXMgYW4gaW50ZWdlciB0aGVuIGRpdmlkZSB0aGUgcmVzdWx0IGJ5IGl0cyBiYXNlIHJhaXNlZCB0byBhIHBvd2VyIHN1Y2hcclxuICAgICAgLy8gdGhhdCB0aGUgZnJhY3Rpb24gcGFydCB3aWxsIGJlIHJlc3RvcmVkLlxyXG5cclxuICAgICAgLy8gTm9uLWludGVnZXIuXHJcbiAgICAgIGlmIChpID49IDApIHtcclxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgnLicsICcnKTtcclxuICAgICAgICB5ID0gbmV3IEN0b3IoMSk7XHJcbiAgICAgICAgeS5lID0gc3RyLmxlbmd0aCAtIGk7XHJcbiAgICAgICAgeS5kID0gY29udmVydEJhc2UoZmluaXRlVG9TdHJpbmcoeSksIDEwLCBiYXNlKTtcclxuICAgICAgICB5LmUgPSB5LmQubGVuZ3RoO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB4ZCA9IGNvbnZlcnRCYXNlKHN0ciwgMTAsIGJhc2UpO1xyXG4gICAgICBlID0gbGVuID0geGQubGVuZ3RoO1xyXG5cclxuICAgICAgLy8gUmVtb3ZlIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICBmb3IgKDsgeGRbLS1sZW5dID09IDA7KSB4ZC5wb3AoKTtcclxuXHJcbiAgICAgIGlmICgheGRbMF0pIHtcclxuICAgICAgICBzdHIgPSBpc0V4cCA/ICcwcCswJyA6ICcwJztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoaSA8IDApIHtcclxuICAgICAgICAgIGUtLTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgeCA9IG5ldyBDdG9yKHgpO1xyXG4gICAgICAgICAgeC5kID0geGQ7XHJcbiAgICAgICAgICB4LmUgPSBlO1xyXG4gICAgICAgICAgeCA9IGRpdmlkZSh4LCB5LCBzZCwgcm0sIDAsIGJhc2UpO1xyXG4gICAgICAgICAgeGQgPSB4LmQ7XHJcbiAgICAgICAgICBlID0geC5lO1xyXG4gICAgICAgICAgcm91bmRVcCA9IGluZXhhY3Q7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBUaGUgcm91bmRpbmcgZGlnaXQsIGkuZS4gdGhlIGRpZ2l0IGFmdGVyIHRoZSBkaWdpdCB0aGF0IG1heSBiZSByb3VuZGVkIHVwLlxyXG4gICAgICAgIGkgPSB4ZFtzZF07XHJcbiAgICAgICAgayA9IGJhc2UgLyAyO1xyXG4gICAgICAgIHJvdW5kVXAgPSByb3VuZFVwIHx8IHhkW3NkICsgMV0gIT09IHZvaWQgMDtcclxuXHJcbiAgICAgICAgcm91bmRVcCA9IHJtIDwgNFxyXG4gICAgICAgICAgPyAoaSAhPT0gdm9pZCAwIHx8IHJvdW5kVXApICYmIChybSA9PT0gMCB8fCBybSA9PT0gKHgucyA8IDAgPyAzIDogMikpXHJcbiAgICAgICAgICA6IGkgPiBrIHx8IGkgPT09IGsgJiYgKHJtID09PSA0IHx8IHJvdW5kVXAgfHwgcm0gPT09IDYgJiYgeGRbc2QgLSAxXSAmIDEgfHxcclxuICAgICAgICAgICAgcm0gPT09ICh4LnMgPCAwID8gOCA6IDcpKTtcclxuXHJcbiAgICAgICAgeGQubGVuZ3RoID0gc2Q7XHJcblxyXG4gICAgICAgIGlmIChyb3VuZFVwKSB7XHJcblxyXG4gICAgICAgICAgLy8gUm91bmRpbmcgdXAgbWF5IG1lYW4gdGhlIHByZXZpb3VzIGRpZ2l0IGhhcyB0byBiZSByb3VuZGVkIHVwIGFuZCBzbyBvbi5cclxuICAgICAgICAgIGZvciAoOyArK3hkWy0tc2RdID4gYmFzZSAtIDE7KSB7XHJcbiAgICAgICAgICAgIHhkW3NkXSA9IDA7XHJcbiAgICAgICAgICAgIGlmICghc2QpIHtcclxuICAgICAgICAgICAgICArK2U7XHJcbiAgICAgICAgICAgICAgeGQudW5zaGlmdCgxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRGV0ZXJtaW5lIHRyYWlsaW5nIHplcm9zLlxyXG4gICAgICAgIGZvciAobGVuID0geGQubGVuZ3RoOyAheGRbbGVuIC0gMV07IC0tbGVuKTtcclxuXHJcbiAgICAgICAgLy8gRS5nLiBbNCwgMTEsIDE1XSBiZWNvbWVzIDRiZi5cclxuICAgICAgICBmb3IgKGkgPSAwLCBzdHIgPSAnJzsgaSA8IGxlbjsgaSsrKSBzdHIgKz0gTlVNRVJBTFMuY2hhckF0KHhkW2ldKTtcclxuXHJcbiAgICAgICAgLy8gQWRkIGJpbmFyeSBleHBvbmVudCBzdWZmaXg/XHJcbiAgICAgICAgaWYgKGlzRXhwKSB7XHJcbiAgICAgICAgICBpZiAobGVuID4gMSkge1xyXG4gICAgICAgICAgICBpZiAoYmFzZU91dCA9PSAxNiB8fCBiYXNlT3V0ID09IDgpIHtcclxuICAgICAgICAgICAgICBpID0gYmFzZU91dCA9PSAxNiA/IDQgOiAzO1xyXG4gICAgICAgICAgICAgIGZvciAoLS1sZW47IGxlbiAlIGk7IGxlbisrKSBzdHIgKz0gJzAnO1xyXG4gICAgICAgICAgICAgIHhkID0gY29udmVydEJhc2Uoc3RyLCBiYXNlLCBiYXNlT3V0KTtcclxuICAgICAgICAgICAgICBmb3IgKGxlbiA9IHhkLmxlbmd0aDsgIXhkW2xlbiAtIDFdOyAtLWxlbik7XHJcblxyXG4gICAgICAgICAgICAgIC8vIHhkWzBdIHdpbGwgYWx3YXlzIGJlIGJlIDFcclxuICAgICAgICAgICAgICBmb3IgKGkgPSAxLCBzdHIgPSAnMS4nOyBpIDwgbGVuOyBpKyspIHN0ciArPSBOVU1FUkFMUy5jaGFyQXQoeGRbaV0pO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHN0ciA9IHN0ci5jaGFyQXQoMCkgKyAnLicgKyBzdHIuc2xpY2UoMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBzdHIgPSAgc3RyICsgKGUgPCAwID8gJ3AnIDogJ3ArJykgKyBlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZSA8IDApIHtcclxuICAgICAgICAgIGZvciAoOyArK2U7KSBzdHIgPSAnMCcgKyBzdHI7XHJcbiAgICAgICAgICBzdHIgPSAnMC4nICsgc3RyO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoKytlID4gbGVuKSBmb3IgKGUgLT0gbGVuOyBlLS0gOykgc3RyICs9ICcwJztcclxuICAgICAgICAgIGVsc2UgaWYgKGUgPCBsZW4pIHN0ciA9IHN0ci5zbGljZSgwLCBlKSArICcuJyArIHN0ci5zbGljZShlKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN0ciA9IChiYXNlT3V0ID09IDE2ID8gJzB4JyA6IGJhc2VPdXQgPT0gMiA/ICcwYicgOiBiYXNlT3V0ID09IDggPyAnMG8nIDogJycpICsgc3RyO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB4LnMgPCAwID8gJy0nICsgc3RyIDogc3RyO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vIERvZXMgbm90IHN0cmlwIHRyYWlsaW5nIHplcm9zLlxyXG4gIGZ1bmN0aW9uIHRydW5jYXRlKGFyciwgbGVuKSB7XHJcbiAgICBpZiAoYXJyLmxlbmd0aCA+IGxlbikge1xyXG4gICAgICBhcnIubGVuZ3RoID0gbGVuO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLyBEZWNpbWFsIG1ldGhvZHNcclxuXHJcblxyXG4gIC8qXHJcbiAgICogIGFic1xyXG4gICAqICBhY29zXHJcbiAgICogIGFjb3NoXHJcbiAgICogIGFkZFxyXG4gICAqICBhc2luXHJcbiAgICogIGFzaW5oXHJcbiAgICogIGF0YW5cclxuICAgKiAgYXRhbmhcclxuICAgKiAgYXRhbjJcclxuICAgKiAgY2JydFxyXG4gICAqICBjZWlsXHJcbiAgICogIGNsb25lXHJcbiAgICogIGNvbmZpZ1xyXG4gICAqICBjb3NcclxuICAgKiAgY29zaFxyXG4gICAqICBkaXZcclxuICAgKiAgZXhwXHJcbiAgICogIGZsb29yXHJcbiAgICogIGh5cG90XHJcbiAgICogIGxuXHJcbiAgICogIGxvZ1xyXG4gICAqICBsb2cyXHJcbiAgICogIGxvZzEwXHJcbiAgICogIG1heFxyXG4gICAqICBtaW5cclxuICAgKiAgbW9kXHJcbiAgICogIG11bFxyXG4gICAqICBwb3dcclxuICAgKiAgcmFuZG9tXHJcbiAgICogIHJvdW5kXHJcbiAgICogIHNldFxyXG4gICAqICBzaWduXHJcbiAgICogIHNpblxyXG4gICAqICBzaW5oXHJcbiAgICogIHNxcnRcclxuICAgKiAgc3ViXHJcbiAgICogIHRhblxyXG4gICAqICB0YW5oXHJcbiAgICogIHRydW5jXHJcbiAgICovXHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBgeGAuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBhYnMoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmFicygpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGFyY2Nvc2luZSBpbiByYWRpYW5zIG9mIGB4YC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGFjb3MoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmFjb3MoKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBpbnZlcnNlIG9mIHRoZSBoeXBlcmJvbGljIGNvc2luZSBvZiBgeGAsIHJvdW5kZWQgdG9cclxuICAgKiBgcHJlY2lzaW9uYCBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBBIHZhbHVlIGluIHJhZGlhbnMuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBhY29zaCh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuYWNvc2goKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBzdW0gb2YgYHhgIGFuZCBgeWAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnRcclxuICAgKiBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqIHkge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGFkZCh4LCB5KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkucGx1cyh5KTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBhcmNzaW5lIGluIHJhZGlhbnMgb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGFzaW4oeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmFzaW4oKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBpbnZlcnNlIG9mIHRoZSBoeXBlcmJvbGljIHNpbmUgb2YgYHhgLCByb3VuZGVkIHRvXHJcbiAgICogYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gQSB2YWx1ZSBpbiByYWRpYW5zLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gYXNpbmgoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmFzaW5oKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYXJjdGFuZ2VudCBpbiByYWRpYW5zIG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYFxyXG4gICAqIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBhdGFuKHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5hdGFuKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgaW52ZXJzZSBvZiB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mIGB4YCwgcm91bmRlZCB0b1xyXG4gICAqIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IEEgdmFsdWUgaW4gcmFkaWFucy5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGF0YW5oKHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5hdGFuaCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGFyY3RhbmdlbnQgaW4gcmFkaWFucyBvZiBgeS94YCBpbiB0aGUgcmFuZ2UgLXBpIHRvIHBpXHJcbiAgICogKGluY2x1c2l2ZSksIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIERvbWFpbjogWy1JbmZpbml0eSwgSW5maW5pdHldXHJcbiAgICogUmFuZ2U6IFstcGksIHBpXVxyXG4gICAqXHJcbiAgICogeSB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBUaGUgeS1jb29yZGluYXRlLlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gVGhlIHgtY29vcmRpbmF0ZS5cclxuICAgKlxyXG4gICAqIGF0YW4yKMKxMCwgLTApICAgICAgICAgICAgICAgPSDCsXBpXHJcbiAgICogYXRhbjIowrEwLCArMCkgICAgICAgICAgICAgICA9IMKxMFxyXG4gICAqIGF0YW4yKMKxMCwgLXgpICAgICAgICAgICAgICAgPSDCsXBpIGZvciB4ID4gMFxyXG4gICAqIGF0YW4yKMKxMCwgeCkgICAgICAgICAgICAgICAgPSDCsTAgZm9yIHggPiAwXHJcbiAgICogYXRhbjIoLXksIMKxMCkgICAgICAgICAgICAgICA9IC1waS8yIGZvciB5ID4gMFxyXG4gICAqIGF0YW4yKHksIMKxMCkgICAgICAgICAgICAgICAgPSBwaS8yIGZvciB5ID4gMFxyXG4gICAqIGF0YW4yKMKxeSwgLUluZmluaXR5KSAgICAgICAgPSDCsXBpIGZvciBmaW5pdGUgeSA+IDBcclxuICAgKiBhdGFuMijCsXksICtJbmZpbml0eSkgICAgICAgID0gwrEwIGZvciBmaW5pdGUgeSA+IDBcclxuICAgKiBhdGFuMijCsUluZmluaXR5LCB4KSAgICAgICAgID0gwrFwaS8yIGZvciBmaW5pdGUgeFxyXG4gICAqIGF0YW4yKMKxSW5maW5pdHksIC1JbmZpbml0eSkgPSDCsTMqcGkvNFxyXG4gICAqIGF0YW4yKMKxSW5maW5pdHksICtJbmZpbml0eSkgPSDCsXBpLzRcclxuICAgKiBhdGFuMihOYU4sIHgpID0gTmFOXHJcbiAgICogYXRhbjIoeSwgTmFOKSA9IE5hTlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gYXRhbjIoeSwgeCkge1xyXG4gICAgeSA9IG5ldyB0aGlzKHkpO1xyXG4gICAgeCA9IG5ldyB0aGlzKHgpO1xyXG4gICAgdmFyIHIsXHJcbiAgICAgIHByID0gdGhpcy5wcmVjaXNpb24sXHJcbiAgICAgIHJtID0gdGhpcy5yb3VuZGluZyxcclxuICAgICAgd3ByID0gcHIgKyA0O1xyXG5cclxuICAgIC8vIEVpdGhlciBOYU5cclxuICAgIGlmICgheS5zIHx8ICF4LnMpIHtcclxuICAgICAgciA9IG5ldyB0aGlzKE5hTik7XHJcblxyXG4gICAgLy8gQm90aCDCsUluZmluaXR5XHJcbiAgICB9IGVsc2UgaWYgKCF5LmQgJiYgIXguZCkge1xyXG4gICAgICByID0gZ2V0UGkodGhpcywgd3ByLCAxKS50aW1lcyh4LnMgPiAwID8gMC4yNSA6IDAuNzUpO1xyXG4gICAgICByLnMgPSB5LnM7XHJcblxyXG4gICAgLy8geCBpcyDCsUluZmluaXR5IG9yIHkgaXMgwrEwXHJcbiAgICB9IGVsc2UgaWYgKCF4LmQgfHwgeS5pc1plcm8oKSkge1xyXG4gICAgICByID0geC5zIDwgMCA/IGdldFBpKHRoaXMsIHByLCBybSkgOiBuZXcgdGhpcygwKTtcclxuICAgICAgci5zID0geS5zO1xyXG5cclxuICAgIC8vIHkgaXMgwrFJbmZpbml0eSBvciB4IGlzIMKxMFxyXG4gICAgfSBlbHNlIGlmICgheS5kIHx8IHguaXNaZXJvKCkpIHtcclxuICAgICAgciA9IGdldFBpKHRoaXMsIHdwciwgMSkudGltZXMoMC41KTtcclxuICAgICAgci5zID0geS5zO1xyXG5cclxuICAgIC8vIEJvdGggbm9uLXplcm8gYW5kIGZpbml0ZVxyXG4gICAgfSBlbHNlIGlmICh4LnMgPCAwKSB7XHJcbiAgICAgIHRoaXMucHJlY2lzaW9uID0gd3ByO1xyXG4gICAgICB0aGlzLnJvdW5kaW5nID0gMTtcclxuICAgICAgciA9IHRoaXMuYXRhbihkaXZpZGUoeSwgeCwgd3ByLCAxKSk7XHJcbiAgICAgIHggPSBnZXRQaSh0aGlzLCB3cHIsIDEpO1xyXG4gICAgICB0aGlzLnByZWNpc2lvbiA9IHByO1xyXG4gICAgICB0aGlzLnJvdW5kaW5nID0gcm07XHJcbiAgICAgIHIgPSB5LnMgPCAwID8gci5taW51cyh4KSA6IHIucGx1cyh4KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHIgPSB0aGlzLmF0YW4oZGl2aWRlKHksIHgsIHdwciwgMSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiByO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGN1YmUgcm9vdCBvZiBgeGAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnRcclxuICAgKiBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gY2JydCh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuY2JydCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgYHhgIHJvdW5kZWQgdG8gYW4gaW50ZWdlciB1c2luZyBgUk9VTkRfQ0VJTGAuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBjZWlsKHgpIHtcclxuICAgIHJldHVybiBmaW5hbGlzZSh4ID0gbmV3IHRoaXMoeCksIHguZSArIDEsIDIpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogQ29uZmlndXJlIGdsb2JhbCBzZXR0aW5ncyBmb3IgYSBEZWNpbWFsIGNvbnN0cnVjdG9yLlxyXG4gICAqXHJcbiAgICogYG9iamAgaXMgYW4gb2JqZWN0IHdpdGggb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzLFxyXG4gICAqXHJcbiAgICogICBwcmVjaXNpb24gIHtudW1iZXJ9XHJcbiAgICogICByb3VuZGluZyAgIHtudW1iZXJ9XHJcbiAgICogICB0b0V4cE5lZyAgIHtudW1iZXJ9XHJcbiAgICogICB0b0V4cFBvcyAgIHtudW1iZXJ9XHJcbiAgICogICBtYXhFICAgICAgIHtudW1iZXJ9XHJcbiAgICogICBtaW5FICAgICAgIHtudW1iZXJ9XHJcbiAgICogICBtb2R1bG8gICAgIHtudW1iZXJ9XHJcbiAgICogICBjcnlwdG8gICAgIHtib29sZWFufG51bWJlcn1cclxuICAgKiAgIGRlZmF1bHRzICAge3RydWV9XHJcbiAgICpcclxuICAgKiBFLmcuIERlY2ltYWwuY29uZmlnKHsgcHJlY2lzaW9uOiAyMCwgcm91bmRpbmc6IDQgfSlcclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGNvbmZpZyhvYmopIHtcclxuICAgIGlmICghb2JqIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB0aHJvdyBFcnJvcihkZWNpbWFsRXJyb3IgKyAnT2JqZWN0IGV4cGVjdGVkJyk7XHJcbiAgICB2YXIgaSwgcCwgdixcclxuICAgICAgdXNlRGVmYXVsdHMgPSBvYmouZGVmYXVsdHMgPT09IHRydWUsXHJcbiAgICAgIHBzID0gW1xyXG4gICAgICAgICdwcmVjaXNpb24nLCAxLCBNQVhfRElHSVRTLFxyXG4gICAgICAgICdyb3VuZGluZycsIDAsIDgsXHJcbiAgICAgICAgJ3RvRXhwTmVnJywgLUVYUF9MSU1JVCwgMCxcclxuICAgICAgICAndG9FeHBQb3MnLCAwLCBFWFBfTElNSVQsXHJcbiAgICAgICAgJ21heEUnLCAwLCBFWFBfTElNSVQsXHJcbiAgICAgICAgJ21pbkUnLCAtRVhQX0xJTUlULCAwLFxyXG4gICAgICAgICdtb2R1bG8nLCAwLCA5XHJcbiAgICAgIF07XHJcblxyXG4gICAgZm9yIChpID0gMDsgaSA8IHBzLmxlbmd0aDsgaSArPSAzKSB7XHJcbiAgICAgIGlmIChwID0gcHNbaV0sIHVzZURlZmF1bHRzKSB0aGlzW3BdID0gREVGQVVMVFNbcF07XHJcbiAgICAgIGlmICgodiA9IG9ialtwXSkgIT09IHZvaWQgMCkge1xyXG4gICAgICAgIGlmIChtYXRoZmxvb3IodikgPT09IHYgJiYgdiA+PSBwc1tpICsgMV0gJiYgdiA8PSBwc1tpICsgMl0pIHRoaXNbcF0gPSB2O1xyXG4gICAgICAgIGVsc2UgdGhyb3cgRXJyb3IoaW52YWxpZEFyZ3VtZW50ICsgcCArICc6ICcgKyB2KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChwID0gJ2NyeXB0bycsIHVzZURlZmF1bHRzKSB0aGlzW3BdID0gREVGQVVMVFNbcF07XHJcbiAgICBpZiAoKHYgPSBvYmpbcF0pICE9PSB2b2lkIDApIHtcclxuICAgICAgaWYgKHYgPT09IHRydWUgfHwgdiA9PT0gZmFsc2UgfHwgdiA9PT0gMCB8fCB2ID09PSAxKSB7XHJcbiAgICAgICAgaWYgKHYpIHtcclxuICAgICAgICAgIGlmICh0eXBlb2YgY3J5cHRvICE9ICd1bmRlZmluZWQnICYmIGNyeXB0byAmJlxyXG4gICAgICAgICAgICAoY3J5cHRvLmdldFJhbmRvbVZhbHVlcyB8fCBjcnlwdG8ucmFuZG9tQnl0ZXMpKSB7XHJcbiAgICAgICAgICAgIHRoaXNbcF0gPSB0cnVlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoY3J5cHRvVW5hdmFpbGFibGUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzW3BdID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRocm93IEVycm9yKGludmFsaWRBcmd1bWVudCArIHAgKyAnOiAnICsgdik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBjb3NpbmUgb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gIHNpZ25pZmljYW50XHJcbiAgICogZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gQSB2YWx1ZSBpbiByYWRpYW5zLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gY29zKHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5jb3MoKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBoeXBlcmJvbGljIGNvc2luZSBvZiBgeGAsIHJvdW5kZWQgdG8gcHJlY2lzaW9uXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gQSB2YWx1ZSBpbiByYWRpYW5zLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gY29zaCh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuY29zaCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogQ3JlYXRlIGFuZCByZXR1cm4gYSBEZWNpbWFsIGNvbnN0cnVjdG9yIHdpdGggdGhlIHNhbWUgY29uZmlndXJhdGlvbiBwcm9wZXJ0aWVzIGFzIHRoaXMgRGVjaW1hbFxyXG4gICAqIGNvbnN0cnVjdG9yLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gY2xvbmUob2JqKSB7XHJcbiAgICB2YXIgaSwgcCwgcHM7XHJcblxyXG4gICAgLypcclxuICAgICAqIFRoZSBEZWNpbWFsIGNvbnN0cnVjdG9yIGFuZCBleHBvcnRlZCBmdW5jdGlvbi5cclxuICAgICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIGluc3RhbmNlLlxyXG4gICAgICpcclxuICAgICAqIHYge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gQSBudW1lcmljIHZhbHVlLlxyXG4gICAgICpcclxuICAgICAqL1xyXG4gICAgZnVuY3Rpb24gRGVjaW1hbCh2KSB7XHJcbiAgICAgIHZhciBlLCBpLCB0LFxyXG4gICAgICAgIHggPSB0aGlzO1xyXG5cclxuICAgICAgLy8gRGVjaW1hbCBjYWxsZWQgd2l0aG91dCBuZXcuXHJcbiAgICAgIGlmICghKHggaW5zdGFuY2VvZiBEZWNpbWFsKSkgcmV0dXJuIG5ldyBEZWNpbWFsKHYpO1xyXG5cclxuICAgICAgLy8gUmV0YWluIGEgcmVmZXJlbmNlIHRvIHRoaXMgRGVjaW1hbCBjb25zdHJ1Y3RvciwgYW5kIHNoYWRvdyBEZWNpbWFsLnByb3RvdHlwZS5jb25zdHJ1Y3RvclxyXG4gICAgICAvLyB3aGljaCBwb2ludHMgdG8gT2JqZWN0LlxyXG4gICAgICB4LmNvbnN0cnVjdG9yID0gRGVjaW1hbDtcclxuXHJcbiAgICAgIC8vIER1cGxpY2F0ZS5cclxuICAgICAgaWYgKHYgaW5zdGFuY2VvZiBEZWNpbWFsKSB7XHJcbiAgICAgICAgeC5zID0gdi5zO1xyXG5cclxuICAgICAgICBpZiAoZXh0ZXJuYWwpIHtcclxuICAgICAgICAgIGlmICghdi5kIHx8IHYuZSA+IERlY2ltYWwubWF4RSkge1xyXG5cclxuICAgICAgICAgICAgLy8gSW5maW5pdHkuXHJcbiAgICAgICAgICAgIHguZSA9IE5hTjtcclxuICAgICAgICAgICAgeC5kID0gbnVsbDtcclxuICAgICAgICAgIH0gZWxzZSBpZiAodi5lIDwgRGVjaW1hbC5taW5FKSB7XHJcblxyXG4gICAgICAgICAgICAvLyBaZXJvLlxyXG4gICAgICAgICAgICB4LmUgPSAwO1xyXG4gICAgICAgICAgICB4LmQgPSBbMF07XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB4LmUgPSB2LmU7XHJcbiAgICAgICAgICAgIHguZCA9IHYuZC5zbGljZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB4LmUgPSB2LmU7XHJcbiAgICAgICAgICB4LmQgPSB2LmQgPyB2LmQuc2xpY2UoKSA6IHYuZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgdCA9IHR5cGVvZiB2O1xyXG5cclxuICAgICAgaWYgKHQgPT09ICdudW1iZXInKSB7XHJcbiAgICAgICAgaWYgKHYgPT09IDApIHtcclxuICAgICAgICAgIHgucyA9IDEgLyB2IDwgMCA/IC0xIDogMTtcclxuICAgICAgICAgIHguZSA9IDA7XHJcbiAgICAgICAgICB4LmQgPSBbMF07XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodiA8IDApIHtcclxuICAgICAgICAgIHYgPSAtdjtcclxuICAgICAgICAgIHgucyA9IC0xO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB4LnMgPSAxO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gRmFzdCBwYXRoIGZvciBzbWFsbCBpbnRlZ2Vycy5cclxuICAgICAgICBpZiAodiA9PT0gfn52ICYmIHYgPCAxZTcpIHtcclxuICAgICAgICAgIGZvciAoZSA9IDAsIGkgPSB2OyBpID49IDEwOyBpIC89IDEwKSBlKys7XHJcblxyXG4gICAgICAgICAgaWYgKGV4dGVybmFsKSB7XHJcbiAgICAgICAgICAgIGlmIChlID4gRGVjaW1hbC5tYXhFKSB7XHJcbiAgICAgICAgICAgICAgeC5lID0gTmFOO1xyXG4gICAgICAgICAgICAgIHguZCA9IG51bGw7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZSA8IERlY2ltYWwubWluRSkge1xyXG4gICAgICAgICAgICAgIHguZSA9IDA7XHJcbiAgICAgICAgICAgICAgeC5kID0gWzBdO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHguZSA9IGU7XHJcbiAgICAgICAgICAgICAgeC5kID0gW3ZdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB4LmUgPSBlO1xyXG4gICAgICAgICAgICB4LmQgPSBbdl07XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAvLyBJbmZpbml0eSwgTmFOLlxyXG4gICAgICAgIH0gZWxzZSBpZiAodiAqIDAgIT09IDApIHtcclxuICAgICAgICAgIGlmICghdikgeC5zID0gTmFOO1xyXG4gICAgICAgICAgeC5lID0gTmFOO1xyXG4gICAgICAgICAgeC5kID0gbnVsbDtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBwYXJzZURlY2ltYWwoeCwgdi50b1N0cmluZygpKTtcclxuXHJcbiAgICAgIH0gZWxzZSBpZiAodCAhPT0gJ3N0cmluZycpIHtcclxuICAgICAgICB0aHJvdyBFcnJvcihpbnZhbGlkQXJndW1lbnQgKyB2KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTWludXMgc2lnbj9cclxuICAgICAgaWYgKChpID0gdi5jaGFyQ29kZUF0KDApKSA9PT0gNDUpIHtcclxuICAgICAgICB2ID0gdi5zbGljZSgxKTtcclxuICAgICAgICB4LnMgPSAtMTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBQbHVzIHNpZ24/XHJcbiAgICAgICAgaWYgKGkgPT09IDQzKSB2ID0gdi5zbGljZSgxKTtcclxuICAgICAgICB4LnMgPSAxO1xyXG4gICAgICB9XHJcblxyXG4gICAgICByZXR1cm4gaXNEZWNpbWFsLnRlc3QodikgPyBwYXJzZURlY2ltYWwoeCwgdikgOiBwYXJzZU90aGVyKHgsIHYpO1xyXG4gICAgfVxyXG5cclxuICAgIERlY2ltYWwucHJvdG90eXBlID0gUDtcclxuXHJcbiAgICBEZWNpbWFsLlJPVU5EX1VQID0gMDtcclxuICAgIERlY2ltYWwuUk9VTkRfRE9XTiA9IDE7XHJcbiAgICBEZWNpbWFsLlJPVU5EX0NFSUwgPSAyO1xyXG4gICAgRGVjaW1hbC5ST1VORF9GTE9PUiA9IDM7XHJcbiAgICBEZWNpbWFsLlJPVU5EX0hBTEZfVVAgPSA0O1xyXG4gICAgRGVjaW1hbC5ST1VORF9IQUxGX0RPV04gPSA1O1xyXG4gICAgRGVjaW1hbC5ST1VORF9IQUxGX0VWRU4gPSA2O1xyXG4gICAgRGVjaW1hbC5ST1VORF9IQUxGX0NFSUwgPSA3O1xyXG4gICAgRGVjaW1hbC5ST1VORF9IQUxGX0ZMT09SID0gODtcclxuICAgIERlY2ltYWwuRVVDTElEID0gOTtcclxuXHJcbiAgICBEZWNpbWFsLmNvbmZpZyA9IERlY2ltYWwuc2V0ID0gY29uZmlnO1xyXG4gICAgRGVjaW1hbC5jbG9uZSA9IGNsb25lO1xyXG4gICAgRGVjaW1hbC5pc0RlY2ltYWwgPSBpc0RlY2ltYWxJbnN0YW5jZTtcclxuXHJcbiAgICBEZWNpbWFsLmFicyA9IGFicztcclxuICAgIERlY2ltYWwuYWNvcyA9IGFjb3M7XHJcbiAgICBEZWNpbWFsLmFjb3NoID0gYWNvc2g7ICAgICAgICAvLyBFUzZcclxuICAgIERlY2ltYWwuYWRkID0gYWRkO1xyXG4gICAgRGVjaW1hbC5hc2luID0gYXNpbjtcclxuICAgIERlY2ltYWwuYXNpbmggPSBhc2luaDsgICAgICAgIC8vIEVTNlxyXG4gICAgRGVjaW1hbC5hdGFuID0gYXRhbjtcclxuICAgIERlY2ltYWwuYXRhbmggPSBhdGFuaDsgICAgICAgIC8vIEVTNlxyXG4gICAgRGVjaW1hbC5hdGFuMiA9IGF0YW4yO1xyXG4gICAgRGVjaW1hbC5jYnJ0ID0gY2JydDsgICAgICAgICAgLy8gRVM2XHJcbiAgICBEZWNpbWFsLmNlaWwgPSBjZWlsO1xyXG4gICAgRGVjaW1hbC5jb3MgPSBjb3M7XHJcbiAgICBEZWNpbWFsLmNvc2ggPSBjb3NoOyAgICAgICAgICAvLyBFUzZcclxuICAgIERlY2ltYWwuZGl2ID0gZGl2O1xyXG4gICAgRGVjaW1hbC5leHAgPSBleHA7XHJcbiAgICBEZWNpbWFsLmZsb29yID0gZmxvb3I7XHJcbiAgICBEZWNpbWFsLmh5cG90ID0gaHlwb3Q7ICAgICAgICAvLyBFUzZcclxuICAgIERlY2ltYWwubG4gPSBsbjtcclxuICAgIERlY2ltYWwubG9nID0gbG9nO1xyXG4gICAgRGVjaW1hbC5sb2cxMCA9IGxvZzEwOyAgICAgICAgLy8gRVM2XHJcbiAgICBEZWNpbWFsLmxvZzIgPSBsb2cyOyAgICAgICAgICAvLyBFUzZcclxuICAgIERlY2ltYWwubWF4ID0gbWF4O1xyXG4gICAgRGVjaW1hbC5taW4gPSBtaW47XHJcbiAgICBEZWNpbWFsLm1vZCA9IG1vZDtcclxuICAgIERlY2ltYWwubXVsID0gbXVsO1xyXG4gICAgRGVjaW1hbC5wb3cgPSBwb3c7XHJcbiAgICBEZWNpbWFsLnJhbmRvbSA9IHJhbmRvbTtcclxuICAgIERlY2ltYWwucm91bmQgPSByb3VuZDtcclxuICAgIERlY2ltYWwuc2lnbiA9IHNpZ247ICAgICAgICAgIC8vIEVTNlxyXG4gICAgRGVjaW1hbC5zaW4gPSBzaW47XHJcbiAgICBEZWNpbWFsLnNpbmggPSBzaW5oOyAgICAgICAgICAvLyBFUzZcclxuICAgIERlY2ltYWwuc3FydCA9IHNxcnQ7XHJcbiAgICBEZWNpbWFsLnN1YiA9IHN1YjtcclxuICAgIERlY2ltYWwudGFuID0gdGFuO1xyXG4gICAgRGVjaW1hbC50YW5oID0gdGFuaDsgICAgICAgICAgLy8gRVM2XHJcbiAgICBEZWNpbWFsLnRydW5jID0gdHJ1bmM7ICAgICAgICAvLyBFUzZcclxuXHJcbiAgICBpZiAob2JqID09PSB2b2lkIDApIG9iaiA9IHt9O1xyXG4gICAgaWYgKG9iaikge1xyXG4gICAgICBpZiAob2JqLmRlZmF1bHRzICE9PSB0cnVlKSB7XHJcbiAgICAgICAgcHMgPSBbJ3ByZWNpc2lvbicsICdyb3VuZGluZycsICd0b0V4cE5lZycsICd0b0V4cFBvcycsICdtYXhFJywgJ21pbkUnLCAnbW9kdWxvJywgJ2NyeXB0byddO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBwcy5sZW5ndGg7KSBpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShwID0gcHNbaSsrXSkpIG9ialtwXSA9IHRoaXNbcF07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBEZWNpbWFsLmNvbmZpZyhvYmopO1xyXG5cclxuICAgIHJldHVybiBEZWNpbWFsO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgYHhgIGRpdmlkZWQgYnkgYHlgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gIHNpZ25pZmljYW50XHJcbiAgICogZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBkaXYoeCwgeSkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmRpdih5KTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBuYXR1cmFsIGV4cG9uZW50aWFsIG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYFxyXG4gICAqIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBwb3dlciB0byB3aGljaCB0byByYWlzZSB0aGUgYmFzZSBvZiB0aGUgbmF0dXJhbCBsb2cuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBleHAoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmV4cCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgYHhgIHJvdW5kIHRvIGFuIGludGVnZXIgdXNpbmcgYFJPVU5EX0ZMT09SYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGZsb29yKHgpIHtcclxuICAgIHJldHVybiBmaW5hbGlzZSh4ID0gbmV3IHRoaXMoeCksIHguZSArIDEsIDMpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIHNxdWFyZSByb290IG9mIHRoZSBzdW0gb2YgdGhlIHNxdWFyZXMgb2YgdGhlIGFyZ3VtZW50cyxcclxuICAgKiByb3VuZGVkIHRvIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiBoeXBvdChhLCBiLCAuLi4pID0gc3FydChhXjIgKyBiXjIgKyAuLi4pXHJcbiAgICpcclxuICAgKiBhcmd1bWVudHMge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGh5cG90KCkge1xyXG4gICAgdmFyIGksIG4sXHJcbiAgICAgIHQgPSBuZXcgdGhpcygwKTtcclxuXHJcbiAgICBleHRlcm5hbCA9IGZhbHNlO1xyXG5cclxuICAgIGZvciAoaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOykge1xyXG4gICAgICBuID0gbmV3IHRoaXMoYXJndW1lbnRzW2krK10pO1xyXG4gICAgICBpZiAoIW4uZCkge1xyXG4gICAgICAgIGlmIChuLnMpIHtcclxuICAgICAgICAgIGV4dGVybmFsID0gdHJ1ZTtcclxuICAgICAgICAgIHJldHVybiBuZXcgdGhpcygxIC8gMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHQgPSBuO1xyXG4gICAgICB9IGVsc2UgaWYgKHQuZCkge1xyXG4gICAgICAgIHQgPSB0LnBsdXMobi50aW1lcyhuKSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBleHRlcm5hbCA9IHRydWU7XHJcblxyXG4gICAgcmV0dXJuIHQuc3FydCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIHRydWUgaWYgb2JqZWN0IGlzIGEgRGVjaW1hbCBpbnN0YW5jZSAod2hlcmUgRGVjaW1hbCBpcyBhbnkgRGVjaW1hbCBjb25zdHJ1Y3RvciksXHJcbiAgICogb3RoZXJ3aXNlIHJldHVybiBmYWxzZS5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGlzRGVjaW1hbEluc3RhbmNlKG9iaikge1xyXG4gICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIERlY2ltYWwgfHwgb2JqICYmIG9iai5uYW1lID09PSAnW29iamVjdCBEZWNpbWFsXScgfHwgZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGxuKHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5sbigpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGxvZyBvZiBgeGAgdG8gdGhlIGJhc2UgYHlgLCBvciB0byBiYXNlIDEwIGlmIG5vIGJhc2VcclxuICAgKiBpcyBzcGVjaWZpZWQsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIGxvZ1t5XSh4KVxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBUaGUgYXJndW1lbnQgb2YgdGhlIGxvZ2FyaXRobS5cclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IFRoZSBiYXNlIG9mIHRoZSBsb2dhcml0aG0uXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBsb2coeCwgeSkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLmxvZyh5KTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBiYXNlIDIgbG9nYXJpdGhtIG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYFxyXG4gICAqIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBsb2cyKHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5sb2coMik7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgYmFzZSAxMCBsb2dhcml0aG0gb2YgYHhgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIGxvZzEwKHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5sb2coMTApO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIG1heGltdW0gb2YgdGhlIGFyZ3VtZW50cy5cclxuICAgKlxyXG4gICAqIGFyZ3VtZW50cyB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gbWF4KCkge1xyXG4gICAgcmV0dXJuIG1heE9yTWluKHRoaXMsIGFyZ3VtZW50cywgJ2x0Jyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgbWluaW11bSBvZiB0aGUgYXJndW1lbnRzLlxyXG4gICAqXHJcbiAgICogYXJndW1lbnRzIHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBtaW4oKSB7XHJcbiAgICByZXR1cm4gbWF4T3JNaW4odGhpcywgYXJndW1lbnRzLCAnZ3QnKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIGB4YCBtb2R1bG8gYHlgLCByb3VuZGVkIHRvIGBwcmVjaXNpb25gIHNpZ25pZmljYW50IGRpZ2l0c1xyXG4gICAqIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH1cclxuICAgKiB5IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBtb2QoeCwgeSkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLm1vZCh5KTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIGB4YCBtdWx0aXBsaWVkIGJ5IGB5YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudFxyXG4gICAqIGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICogeSB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gbXVsKHgsIHkpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5tdWwoeSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyBgeGAgcmFpc2VkIHRvIHRoZSBwb3dlciBgeWAsIHJvdW5kZWQgdG8gcHJlY2lzaW9uXHJcbiAgICogc2lnbmlmaWNhbnQgZGlnaXRzIHVzaW5nIHJvdW5kaW5nIG1vZGUgYHJvdW5kaW5nYC5cclxuICAgKlxyXG4gICAqIHgge251bWJlcnxzdHJpbmd8RGVjaW1hbH0gVGhlIGJhc2UuXHJcbiAgICogeSB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBUaGUgZXhwb25lbnQuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiBwb3coeCwgeSkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLnBvdyh5KTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybnMgYSBuZXcgRGVjaW1hbCB3aXRoIGEgcmFuZG9tIHZhbHVlIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiAwIGFuZCBsZXNzIHRoYW4gMSwgYW5kIHdpdGhcclxuICAgKiBgc2RgLCBvciBgRGVjaW1hbC5wcmVjaXNpb25gIGlmIGBzZGAgaXMgb21pdHRlZCwgc2lnbmlmaWNhbnQgZGlnaXRzIChvciBsZXNzIGlmIHRyYWlsaW5nIHplcm9zXHJcbiAgICogYXJlIHByb2R1Y2VkKS5cclxuICAgKlxyXG4gICAqIFtzZF0ge251bWJlcn0gU2lnbmlmaWNhbnQgZGlnaXRzLiBJbnRlZ2VyLCAwIHRvIE1BWF9ESUdJVFMgaW5jbHVzaXZlLlxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gcmFuZG9tKHNkKSB7XHJcbiAgICB2YXIgZCwgZSwgaywgbixcclxuICAgICAgaSA9IDAsXHJcbiAgICAgIHIgPSBuZXcgdGhpcygxKSxcclxuICAgICAgcmQgPSBbXTtcclxuXHJcbiAgICBpZiAoc2QgPT09IHZvaWQgMCkgc2QgPSB0aGlzLnByZWNpc2lvbjtcclxuICAgIGVsc2UgY2hlY2tJbnQzMihzZCwgMSwgTUFYX0RJR0lUUyk7XHJcblxyXG4gICAgayA9IE1hdGguY2VpbChzZCAvIExPR19CQVNFKTtcclxuXHJcbiAgICBpZiAoIXRoaXMuY3J5cHRvKSB7XHJcbiAgICAgIGZvciAoOyBpIDwgazspIHJkW2krK10gPSBNYXRoLnJhbmRvbSgpICogMWU3IHwgMDtcclxuXHJcbiAgICAvLyBCcm93c2VycyBzdXBwb3J0aW5nIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuXHJcbiAgICB9IGVsc2UgaWYgKGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcclxuICAgICAgZCA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQzMkFycmF5KGspKTtcclxuXHJcbiAgICAgIGZvciAoOyBpIDwgazspIHtcclxuICAgICAgICBuID0gZFtpXTtcclxuXHJcbiAgICAgICAgLy8gMCA8PSBuIDwgNDI5NDk2NzI5NlxyXG4gICAgICAgIC8vIFByb2JhYmlsaXR5IG4gPj0gNC4yOWU5LCBpcyA0OTY3Mjk2IC8gNDI5NDk2NzI5NiA9IDAuMDAxMTYgKDEgaW4gODY1KS5cclxuICAgICAgICBpZiAobiA+PSA0LjI5ZTkpIHtcclxuICAgICAgICAgIGRbaV0gPSBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50MzJBcnJheSgxKSlbMF07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuXHJcbiAgICAgICAgICAvLyAwIDw9IG4gPD0gNDI4OTk5OTk5OVxyXG4gICAgICAgICAgLy8gMCA8PSAobiAlIDFlNykgPD0gOTk5OTk5OVxyXG4gICAgICAgICAgcmRbaSsrXSA9IG4gJSAxZTc7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgLy8gTm9kZS5qcyBzdXBwb3J0aW5nIGNyeXB0by5yYW5kb21CeXRlcy5cclxuICAgIH0gZWxzZSBpZiAoY3J5cHRvLnJhbmRvbUJ5dGVzKSB7XHJcblxyXG4gICAgICAvLyBidWZmZXJcclxuICAgICAgZCA9IGNyeXB0by5yYW5kb21CeXRlcyhrICo9IDQpO1xyXG5cclxuICAgICAgZm9yICg7IGkgPCBrOykge1xyXG5cclxuICAgICAgICAvLyAwIDw9IG4gPCAyMTQ3NDgzNjQ4XHJcbiAgICAgICAgbiA9IGRbaV0gKyAoZFtpICsgMV0gPDwgOCkgKyAoZFtpICsgMl0gPDwgMTYpICsgKChkW2kgKyAzXSAmIDB4N2YpIDw8IDI0KTtcclxuXHJcbiAgICAgICAgLy8gUHJvYmFiaWxpdHkgbiA+PSAyLjE0ZTksIGlzIDc0ODM2NDggLyAyMTQ3NDgzNjQ4ID0gMC4wMDM1ICgxIGluIDI4NikuXHJcbiAgICAgICAgaWYgKG4gPj0gMi4xNGU5KSB7XHJcbiAgICAgICAgICBjcnlwdG8ucmFuZG9tQnl0ZXMoNCkuY29weShkLCBpKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICAgIC8vIDAgPD0gbiA8PSAyMTM5OTk5OTk5XHJcbiAgICAgICAgICAvLyAwIDw9IChuICUgMWU3KSA8PSA5OTk5OTk5XHJcbiAgICAgICAgICByZC5wdXNoKG4gJSAxZTcpO1xyXG4gICAgICAgICAgaSArPSA0O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaSA9IGsgLyA0O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgRXJyb3IoY3J5cHRvVW5hdmFpbGFibGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGsgPSByZFstLWldO1xyXG4gICAgc2QgJT0gTE9HX0JBU0U7XHJcblxyXG4gICAgLy8gQ29udmVydCB0cmFpbGluZyBkaWdpdHMgdG8gemVyb3MgYWNjb3JkaW5nIHRvIHNkLlxyXG4gICAgaWYgKGsgJiYgc2QpIHtcclxuICAgICAgbiA9IG1hdGhwb3coMTAsIExPR19CQVNFIC0gc2QpO1xyXG4gICAgICByZFtpXSA9IChrIC8gbiB8IDApICogbjtcclxuICAgIH1cclxuXHJcbiAgICAvLyBSZW1vdmUgdHJhaWxpbmcgd29yZHMgd2hpY2ggYXJlIHplcm8uXHJcbiAgICBmb3IgKDsgcmRbaV0gPT09IDA7IGktLSkgcmQucG9wKCk7XHJcblxyXG4gICAgLy8gWmVybz9cclxuICAgIGlmIChpIDwgMCkge1xyXG4gICAgICBlID0gMDtcclxuICAgICAgcmQgPSBbMF07XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBlID0gLTE7XHJcblxyXG4gICAgICAvLyBSZW1vdmUgbGVhZGluZyB3b3JkcyB3aGljaCBhcmUgemVybyBhbmQgYWRqdXN0IGV4cG9uZW50IGFjY29yZGluZ2x5LlxyXG4gICAgICBmb3IgKDsgcmRbMF0gPT09IDA7IGUgLT0gTE9HX0JBU0UpIHJkLnNoaWZ0KCk7XHJcblxyXG4gICAgICAvLyBDb3VudCB0aGUgZGlnaXRzIG9mIHRoZSBmaXJzdCB3b3JkIG9mIHJkIHRvIGRldGVybWluZSBsZWFkaW5nIHplcm9zLlxyXG4gICAgICBmb3IgKGsgPSAxLCBuID0gcmRbMF07IG4gPj0gMTA7IG4gLz0gMTApIGsrKztcclxuXHJcbiAgICAgIC8vIEFkanVzdCB0aGUgZXhwb25lbnQgZm9yIGxlYWRpbmcgemVyb3Mgb2YgdGhlIGZpcnN0IHdvcmQgb2YgcmQuXHJcbiAgICAgIGlmIChrIDwgTE9HX0JBU0UpIGUgLT0gTE9HX0JBU0UgLSBrO1xyXG4gICAgfVxyXG5cclxuICAgIHIuZSA9IGU7XHJcbiAgICByLmQgPSByZDtcclxuXHJcbiAgICByZXR1cm4gcjtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIGB4YCByb3VuZGVkIHRvIGFuIGludGVnZXIgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogVG8gZW11bGF0ZSBgTWF0aC5yb3VuZGAsIHNldCByb3VuZGluZyB0byA3IChST1VORF9IQUxGX0NFSUwpLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gcm91bmQoeCkge1xyXG4gICAgcmV0dXJuIGZpbmFsaXNlKHggPSBuZXcgdGhpcyh4KSwgeC5lICsgMSwgdGhpcy5yb3VuZGluZyk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm5cclxuICAgKiAgIDEgICAgaWYgeCA+IDAsXHJcbiAgICogIC0xICAgIGlmIHggPCAwLFxyXG4gICAqICAgMCAgICBpZiB4IGlzIDAsXHJcbiAgICogIC0wICAgIGlmIHggaXMgLTAsXHJcbiAgICogICBOYU4gIG90aGVyd2lzZVxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gc2lnbih4KSB7XHJcbiAgICB4ID0gbmV3IHRoaXMoeCk7XHJcbiAgICByZXR1cm4geC5kID8gKHguZFswXSA/IHgucyA6IDAgKiB4LnMpIDogeC5zIHx8IE5hTjtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBzaW5lIG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudCBkaWdpdHNcclxuICAgKiB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IEEgdmFsdWUgaW4gcmFkaWFucy5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHNpbih4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuc2luKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgaHlwZXJib2xpYyBzaW5lIG9mIGB4YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYFxyXG4gICAqIHNpZ25pZmljYW50IGRpZ2l0cyB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9IEEgdmFsdWUgaW4gcmFkaWFucy5cclxuICAgKlxyXG4gICAqL1xyXG4gIGZ1bmN0aW9uIHNpbmgoeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLnNpbmgoKTtcclxuICB9XHJcblxyXG5cclxuICAvKlxyXG4gICAqIFJldHVybiBhIG5ldyBEZWNpbWFsIHdob3NlIHZhbHVlIGlzIHRoZSBzcXVhcmUgcm9vdCBvZiBgeGAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnRcclxuICAgKiBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gc3FydCh4KSB7XHJcbiAgICByZXR1cm4gbmV3IHRoaXMoeCkuc3FydCgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgYHhgIG1pbnVzIGB5YCwgcm91bmRlZCB0byBgcHJlY2lzaW9uYCBzaWduaWZpY2FudCBkaWdpdHNcclxuICAgKiB1c2luZyByb3VuZGluZyBtb2RlIGByb3VuZGluZ2AuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICogeSB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfVxyXG4gICAqXHJcbiAgICovXHJcbiAgZnVuY3Rpb24gc3ViKHgsIHkpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS5zdWIoeSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyB0aGUgdGFuZ2VudCBvZiBgeGAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmAgc2lnbmlmaWNhbnRcclxuICAgKiBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBBIHZhbHVlIGluIHJhZGlhbnMuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiB0YW4oeCkge1xyXG4gICAgcmV0dXJuIG5ldyB0aGlzKHgpLnRhbigpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qXHJcbiAgICogUmV0dXJuIGEgbmV3IERlY2ltYWwgd2hvc2UgdmFsdWUgaXMgdGhlIGh5cGVyYm9saWMgdGFuZ2VudCBvZiBgeGAsIHJvdW5kZWQgdG8gYHByZWNpc2lvbmBcclxuICAgKiBzaWduaWZpY2FudCBkaWdpdHMgdXNpbmcgcm91bmRpbmcgbW9kZSBgcm91bmRpbmdgLlxyXG4gICAqXHJcbiAgICogeCB7bnVtYmVyfHN0cmluZ3xEZWNpbWFsfSBBIHZhbHVlIGluIHJhZGlhbnMuXHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiB0YW5oKHgpIHtcclxuICAgIHJldHVybiBuZXcgdGhpcyh4KS50YW5oKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLypcclxuICAgKiBSZXR1cm4gYSBuZXcgRGVjaW1hbCB3aG9zZSB2YWx1ZSBpcyBgeGAgdHJ1bmNhdGVkIHRvIGFuIGludGVnZXIuXHJcbiAgICpcclxuICAgKiB4IHtudW1iZXJ8c3RyaW5nfERlY2ltYWx9XHJcbiAgICpcclxuICAgKi9cclxuICBmdW5jdGlvbiB0cnVuYyh4KSB7XHJcbiAgICByZXR1cm4gZmluYWxpc2UoeCA9IG5ldyB0aGlzKHgpLCB4LmUgKyAxLCAxKTtcclxuICB9XHJcblxyXG5cclxuICAvLyBDcmVhdGUgYW5kIGNvbmZpZ3VyZSBpbml0aWFsIERlY2ltYWwgY29uc3RydWN0b3IuXHJcbiAgRGVjaW1hbCA9IGNsb25lKERFRkFVTFRTKTtcclxuXHJcbiAgRGVjaW1hbFsnZGVmYXVsdCddID0gRGVjaW1hbC5EZWNpbWFsID0gRGVjaW1hbDtcclxuXHJcbiAgLy8gQ3JlYXRlIHRoZSBpbnRlcm5hbCBjb25zdGFudHMgZnJvbSB0aGVpciBzdHJpbmcgdmFsdWVzLlxyXG4gIExOMTAgPSBuZXcgRGVjaW1hbChMTjEwKTtcclxuICBQSSA9IG5ldyBEZWNpbWFsKFBJKTtcclxuXHJcblxyXG4gIC8vIEV4cG9ydC5cclxuXHJcblxyXG4gIC8vIEFNRC5cclxuICBpZiAodHlwZW9mIGRlZmluZSA9PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcclxuICAgIGRlZmluZShmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiBEZWNpbWFsO1xyXG4gICAgfSk7XHJcblxyXG4gIC8vIE5vZGUgYW5kIG90aGVyIGVudmlyb25tZW50cyB0aGF0IHN1cHBvcnQgbW9kdWxlLmV4cG9ydHMuXHJcbiAgfSBlbHNlIGlmICh0eXBlb2YgbW9kdWxlICE9ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XHJcbiAgICBpZiAodHlwZW9mIFN5bWJvbCA9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT0gJ3N5bWJvbCcpIHtcclxuICAgICAgUFtTeW1ib2wuZm9yKCdub2RlanMudXRpbC5pbnNwZWN0LmN1c3RvbScpXSA9IFAudG9TdHJpbmc7XHJcbiAgICAgIFBbU3ltYm9sLnRvU3RyaW5nVGFnXSA9ICdEZWNpbWFsJztcclxuICAgIH1cclxuXHJcbiAgICBtb2R1bGUuZXhwb3J0cyA9IERlY2ltYWw7XHJcblxyXG4gIC8vIEJyb3dzZXIuXHJcbiAgfSBlbHNlIHtcclxuICAgIGlmICghZ2xvYmFsU2NvcGUpIHtcclxuICAgICAgZ2xvYmFsU2NvcGUgPSB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmICYmIHNlbGYuc2VsZiA9PSBzZWxmID8gc2VsZiA6IHdpbmRvdztcclxuICAgIH1cclxuXHJcbiAgICBub0NvbmZsaWN0ID0gZ2xvYmFsU2NvcGUuRGVjaW1hbDtcclxuICAgIERlY2ltYWwubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgZ2xvYmFsU2NvcGUuRGVjaW1hbCA9IG5vQ29uZmxpY3Q7XHJcbiAgICAgIHJldHVybiBEZWNpbWFsO1xyXG4gICAgfTtcclxuXHJcbiAgICBnbG9iYWxTY29wZS5EZWNpbWFsID0gRGVjaW1hbDtcclxuICB9XHJcbn0pKHRoaXMpO1xyXG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLy8gTWFwIHRoZSBjaGFyYWN0ZXJzIHRvIGVzY2FwZSB0byB0aGVpciBlc2NhcGVkIHZhbHVlcy4gVGhlIGxpc3QgaXMgZGVyaXZlZFxuLy8gZnJvbSBodHRwOi8vd3d3LmNlc3BlZGVzLm9yZy9ibG9nLzg1L2hvdy10by1lc2NhcGUtbGF0ZXgtc3BlY2lhbC1jaGFyYWN0ZXJzXG5cbnZhciBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07XG5cbnZhciBkZWZhdWx0RXNjYXBlcyA9IHtcbiAgXCJ7XCI6IFwiXFxcXHtcIixcbiAgXCJ9XCI6IFwiXFxcXH1cIixcbiAgXCJcXFxcXCI6IFwiXFxcXHRleHRiYWNrc2xhc2h7fVwiLFxuICBcIiNcIjogXCJcXFxcI1wiLFxuICAkOiBcIlxcXFwkXCIsXG4gIFwiJVwiOiBcIlxcXFwlXCIsXG4gIFwiJlwiOiBcIlxcXFwmXCIsXG4gIFwiXlwiOiBcIlxcXFx0ZXh0YXNjaWljaXJjdW17fVwiLFxuICBfOiBcIlxcXFxfXCIsXG4gIFwiflwiOiBcIlxcXFx0ZXh0YXNjaWl0aWxkZXt9XCJcbn07XG52YXIgZm9ybWF0RXNjYXBlcyA9IHtcbiAgXCJcXHUyMDEzXCI6IFwiXFxcXC0tXCIsXG4gIFwiXFx1MjAxNFwiOiBcIlxcXFwtLS1cIixcbiAgXCIgXCI6IFwiflwiLFxuICBcIlxcdFwiOiBcIlxcXFxxcXVhZHt9XCIsXG4gIFwiXFxyXFxuXCI6IFwiXFxcXG5ld2xpbmV7fVwiLFxuICBcIlxcblwiOiBcIlxcXFxuZXdsaW5le31cIlxufTtcblxudmFyIGRlZmF1bHRFc2NhcGVNYXBGbiA9IGZ1bmN0aW9uIGRlZmF1bHRFc2NhcGVNYXBGbihkZWZhdWx0RXNjYXBlcywgZm9ybWF0RXNjYXBlcykge1xuICByZXR1cm4gX2V4dGVuZHMoe30sIGRlZmF1bHRFc2NhcGVzLCBmb3JtYXRFc2NhcGVzKTtcbn07XG5cbi8qKlxuICogRXNjYXBlIGEgc3RyaW5nIHRvIGJlIHVzZWQgaW4gTGFUZVggZG9jdW1lbnRzLlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciB0aGUgc3RyaW5nIHRvIGJlIGVzY2FwZWQuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHBhcmFtcy5wcmVzZXJ2ZUZvcm1hdHRpbmcgd2hldGhlciBmb3JtYXR0aW5nIGVzY2FwZXMgc2hvdWxkXG4gKiAgYmUgcGVyZm9ybWVkIChkZWZhdWx0OiBmYWxzZSkuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBwYXJhbXMuZXNjYXBlTWFwRm4gdGhlIGZ1bmN0aW9uIHRvIG1vZGlmeSB0aGUgZXNjYXBlIG1hcHMuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHRoZSBlc2NhcGVkIHN0cmluZywgcmVhZHkgdG8gYmUgdXNlZCBpbiBMYVRlWC5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RyKSB7XG4gIHZhciBfcmVmID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fSxcbiAgICAgIF9yZWYkcHJlc2VydmVGb3JtYXR0aSA9IF9yZWYucHJlc2VydmVGb3JtYXR0aW5nLFxuICAgICAgcHJlc2VydmVGb3JtYXR0aW5nID0gX3JlZiRwcmVzZXJ2ZUZvcm1hdHRpID09PSB1bmRlZmluZWQgPyBmYWxzZSA6IF9yZWYkcHJlc2VydmVGb3JtYXR0aSxcbiAgICAgIF9yZWYkZXNjYXBlTWFwRm4gPSBfcmVmLmVzY2FwZU1hcEZuLFxuICAgICAgZXNjYXBlTWFwRm4gPSBfcmVmJGVzY2FwZU1hcEZuID09PSB1bmRlZmluZWQgPyBkZWZhdWx0RXNjYXBlTWFwRm4gOiBfcmVmJGVzY2FwZU1hcEZuO1xuXG4gIHZhciBydW5uaW5nU3RyID0gU3RyaW5nKHN0cik7XG4gIHZhciByZXN1bHQgPSBcIlwiO1xuXG4gIHZhciBlc2NhcGVzID0gZXNjYXBlTWFwRm4oX2V4dGVuZHMoe30sIGRlZmF1bHRFc2NhcGVzKSwgcHJlc2VydmVGb3JtYXR0aW5nID8gX2V4dGVuZHMoe30sIGZvcm1hdEVzY2FwZXMpIDoge30pO1xuICB2YXIgZXNjYXBlS2V5cyA9IE9iamVjdC5rZXlzKGVzY2FwZXMpOyAvLyBhcyBpdCBpcyByZXVzZWQgbGF0ZXIgb25cblxuICAvLyBBbGdvcml0aG06IEdvIHRocm91Z2ggdGhlIHN0cmluZyBjaGFyYWN0ZXIgYnkgY2hhcmFjdGVyLCBpZiBpdCBtYXRjaGVzXG4gIC8vIHdpdGggb25lIG9mIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMgdGhlbiB3ZSdsbCByZXBsYWNlIGl0IHdpdGggdGhlIGVzY2FwZWRcbiAgLy8gdmVyc2lvbi5cblxuICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcCgpIHtcbiAgICB2YXIgc3BlY2lhbENoYXJGb3VuZCA9IGZhbHNlO1xuICAgIGVzY2FwZUtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5LCBpbmRleCkge1xuICAgICAgaWYgKHNwZWNpYWxDaGFyRm91bmQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHJ1bm5pbmdTdHIubGVuZ3RoID49IGtleS5sZW5ndGggJiYgcnVubmluZ1N0ci5zbGljZSgwLCBrZXkubGVuZ3RoKSA9PT0ga2V5KSB7XG4gICAgICAgIHJlc3VsdCArPSBlc2NhcGVzW2VzY2FwZUtleXNbaW5kZXhdXTtcbiAgICAgICAgcnVubmluZ1N0ciA9IHJ1bm5pbmdTdHIuc2xpY2Uoa2V5Lmxlbmd0aCwgcnVubmluZ1N0ci5sZW5ndGgpO1xuICAgICAgICBzcGVjaWFsQ2hhckZvdW5kID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIXNwZWNpYWxDaGFyRm91bmQpIHtcbiAgICAgIHJlc3VsdCArPSBydW5uaW5nU3RyLnNsaWNlKDAsIDEpO1xuICAgICAgcnVubmluZ1N0ciA9IHJ1bm5pbmdTdHIuc2xpY2UoMSwgcnVubmluZ1N0ci5sZW5ndGgpO1xuICAgIH1cbiAgfTtcblxuICB3aGlsZSAocnVubmluZ1N0cikge1xuICAgIF9sb29wKCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07IiwiLyoqXG4gKiBAbGljZW5zZSBGcmFjdGlvbi5qcyB2NC4wLjEyIDA5LzA5LzIwMTVcbiAqIGh0dHA6Ly93d3cueGFyZy5vcmcvMjAxNC8wMy9yYXRpb25hbC1udW1iZXJzLWluLWphdmFzY3JpcHQvXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE1LCBSb2JlcnQgRWlzZWxlIChyb2JlcnRAeGFyZy5vcmcpXG4gKiBEdWFsIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgb3IgR1BMIFZlcnNpb24gMiBsaWNlbnNlcy5cbiAqKi9cblxuXG4vKipcbiAqXG4gKiBUaGlzIGNsYXNzIG9mZmVycyB0aGUgcG9zc2liaWxpdHkgdG8gY2FsY3VsYXRlIGZyYWN0aW9ucy5cbiAqIFlvdSBjYW4gcGFzcyBhIGZyYWN0aW9uIGluIGRpZmZlcmVudCBmb3JtYXRzLiBFaXRoZXIgYXMgYXJyYXksIGFzIGRvdWJsZSwgYXMgc3RyaW5nIG9yIGFzIGFuIGludGVnZXIuXG4gKlxuICogQXJyYXkvT2JqZWN0IGZvcm1cbiAqIFsgMCA9PiA8bm9taW5hdG9yPiwgMSA9PiA8ZGVub21pbmF0b3I+IF1cbiAqIFsgbiA9PiA8bm9taW5hdG9yPiwgZCA9PiA8ZGVub21pbmF0b3I+IF1cbiAqXG4gKiBJbnRlZ2VyIGZvcm1cbiAqIC0gU2luZ2xlIGludGVnZXIgdmFsdWVcbiAqXG4gKiBEb3VibGUgZm9ybVxuICogLSBTaW5nbGUgZG91YmxlIHZhbHVlXG4gKlxuICogU3RyaW5nIGZvcm1cbiAqIDEyMy40NTYgLSBhIHNpbXBsZSBkb3VibGVcbiAqIDEyMy80NTYgLSBhIHN0cmluZyBmcmFjdGlvblxuICogMTIzLic0NTYnIC0gYSBkb3VibGUgd2l0aCByZXBlYXRpbmcgZGVjaW1hbCBwbGFjZXNcbiAqIDEyMy4oNDU2KSAtIHN5bm9ueW1cbiAqIDEyMy40NSc2JyAtIGEgZG91YmxlIHdpdGggcmVwZWF0aW5nIGxhc3QgcGxhY2VcbiAqIDEyMy40NSg2KSAtIHN5bm9ueW1cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIHZhciBmID0gbmV3IEZyYWN0aW9uKFwiOS40JzMxJ1wiKTtcbiAqIGYubXVsKFstNCwgM10pLmRpdig0LjkpO1xuICpcbiAqL1xuXG4oZnVuY3Rpb24ocm9vdCkge1xuXG4gIFwidXNlIHN0cmljdFwiO1xuXG4gIC8vIE1heGltdW0gc2VhcmNoIGRlcHRoIGZvciBjeWNsaWMgcmF0aW9uYWwgbnVtYmVycy4gMjAwMCBzaG91bGQgYmUgbW9yZSB0aGFuIGVub3VnaC5cbiAgLy8gRXhhbXBsZTogMS83ID0gMC4oMTQyODU3KSBoYXMgNiByZXBlYXRpbmcgZGVjaW1hbCBwbGFjZXMuXG4gIC8vIElmIE1BWF9DWUNMRV9MRU4gZ2V0cyByZWR1Y2VkLCBsb25nIGN5Y2xlcyB3aWxsIG5vdCBiZSBkZXRlY3RlZCBhbmQgdG9TdHJpbmcoKSBvbmx5IGdldHMgdGhlIGZpcnN0IDEwIGRpZ2l0c1xuICB2YXIgTUFYX0NZQ0xFX0xFTiA9IDIwMDA7XG5cbiAgLy8gUGFyc2VkIGRhdGEgdG8gYXZvaWQgY2FsbGluZyBcIm5ld1wiIGFsbCB0aGUgdGltZVxuICB2YXIgUCA9IHtcbiAgICBcInNcIjogMSxcbiAgICBcIm5cIjogMCxcbiAgICBcImRcIjogMVxuICB9O1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUVycm9yKG5hbWUpIHtcblxuICAgIGZ1bmN0aW9uIGVycm9yQ29uc3RydWN0b3IoKSB7XG4gICAgICB2YXIgdGVtcCA9IEVycm9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB0ZW1wWyduYW1lJ10gPSB0aGlzWyduYW1lJ10gPSBuYW1lO1xuICAgICAgdGhpc1snc3RhY2snXSA9IHRlbXBbJ3N0YWNrJ107XG4gICAgICB0aGlzWydtZXNzYWdlJ10gPSB0ZW1wWydtZXNzYWdlJ107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXJyb3IgY29uc3RydWN0b3JcbiAgICAgKlxuICAgICAqIEBjb25zdHJ1Y3RvclxuICAgICAqL1xuICAgIGZ1bmN0aW9uIEludGVybWVkaWF0ZUluaGVyaXRvcigpIHt9XG4gICAgSW50ZXJtZWRpYXRlSW5oZXJpdG9yLnByb3RvdHlwZSA9IEVycm9yLnByb3RvdHlwZTtcbiAgICBlcnJvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IG5ldyBJbnRlcm1lZGlhdGVJbmhlcml0b3IoKTtcblxuICAgIHJldHVybiBlcnJvckNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIERpdmlzaW9uQnlaZXJvID0gRnJhY3Rpb25bJ0RpdmlzaW9uQnlaZXJvJ10gPSBjcmVhdGVFcnJvcignRGl2aXNpb25CeVplcm8nKTtcbiAgdmFyIEludmFsaWRQYXJhbWV0ZXIgPSBGcmFjdGlvblsnSW52YWxpZFBhcmFtZXRlciddID0gY3JlYXRlRXJyb3IoJ0ludmFsaWRQYXJhbWV0ZXInKTtcblxuICBmdW5jdGlvbiBhc3NpZ24obiwgcykge1xuXG4gICAgaWYgKGlzTmFOKG4gPSBwYXJzZUludChuLCAxMCkpKSB7XG4gICAgICB0aHJvd0ludmFsaWRQYXJhbSgpO1xuICAgIH1cbiAgICByZXR1cm4gbiAqIHM7XG4gIH1cblxuICBmdW5jdGlvbiB0aHJvd0ludmFsaWRQYXJhbSgpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZFBhcmFtZXRlcigpO1xuICB9XG5cbiAgdmFyIHBhcnNlID0gZnVuY3Rpb24ocDEsIHAyKSB7XG5cbiAgICB2YXIgbiA9IDAsIGQgPSAxLCBzID0gMTtcbiAgICB2YXIgdiA9IDAsIHcgPSAwLCB4ID0gMCwgeSA9IDEsIHogPSAxO1xuXG4gICAgdmFyIEEgPSAwLCBCID0gMTtcbiAgICB2YXIgQyA9IDEsIEQgPSAxO1xuXG4gICAgdmFyIE4gPSAxMDAwMDAwMDtcbiAgICB2YXIgTTtcblxuICAgIGlmIChwMSA9PT0gdW5kZWZpbmVkIHx8IHAxID09PSBudWxsKSB7XG4gICAgICAvKiB2b2lkICovXG4gICAgfSBlbHNlIGlmIChwMiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBuID0gcDE7XG4gICAgICBkID0gcDI7XG4gICAgICBzID0gbiAqIGQ7XG4gICAgfSBlbHNlXG4gICAgICBzd2l0Y2ggKHR5cGVvZiBwMSkge1xuXG4gICAgICAgIGNhc2UgXCJvYmplY3RcIjpcbiAgICAgICAge1xuICAgICAgICAgIGlmIChcImRcIiBpbiBwMSAmJiBcIm5cIiBpbiBwMSkge1xuICAgICAgICAgICAgbiA9IHAxW1wiblwiXTtcbiAgICAgICAgICAgIGQgPSBwMVtcImRcIl07XG4gICAgICAgICAgICBpZiAoXCJzXCIgaW4gcDEpXG4gICAgICAgICAgICAgIG4gKj0gcDFbXCJzXCJdO1xuICAgICAgICAgIH0gZWxzZSBpZiAoMCBpbiBwMSkge1xuICAgICAgICAgICAgbiA9IHAxWzBdO1xuICAgICAgICAgICAgaWYgKDEgaW4gcDEpXG4gICAgICAgICAgICAgIGQgPSBwMVsxXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3dJbnZhbGlkUGFyYW0oKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcyA9IG4gKiBkO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAge1xuICAgICAgICAgIGlmIChwMSA8IDApIHtcbiAgICAgICAgICAgIHMgPSBwMTtcbiAgICAgICAgICAgIHAxID0gLXAxO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwMSAlIDEgPT09IDApIHtcbiAgICAgICAgICAgIG4gPSBwMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHAxID4gMCkgeyAvLyBjaGVjayBmb3IgIT0gMCwgc2NhbGUgd291bGQgYmVjb21lIE5hTiAobG9nKDApKSwgd2hpY2ggY29udmVyZ2VzIHJlYWxseSBzbG93XG5cbiAgICAgICAgICAgIGlmIChwMSA+PSAxKSB7XG4gICAgICAgICAgICAgIHogPSBNYXRoLnBvdygxMCwgTWF0aC5mbG9vcigxICsgTWF0aC5sb2cocDEpIC8gTWF0aC5MTjEwKSk7XG4gICAgICAgICAgICAgIHAxIC89IHo7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFVzaW5nIEZhcmV5IFNlcXVlbmNlc1xuICAgICAgICAgICAgLy8gaHR0cDovL3d3dy5qb2huZGNvb2suY29tL2Jsb2cvMjAxMC8xMC8yMC9iZXN0LXJhdGlvbmFsLWFwcHJveGltYXRpb24vXG5cbiAgICAgICAgICAgIHdoaWxlIChCIDw9IE4gJiYgRCA8PSBOKSB7XG4gICAgICAgICAgICAgIE0gPSAoQSArIEMpIC8gKEIgKyBEKTtcblxuICAgICAgICAgICAgICBpZiAocDEgPT09IE0pIHtcbiAgICAgICAgICAgICAgICBpZiAoQiArIEQgPD0gTikge1xuICAgICAgICAgICAgICAgICAgbiA9IEEgKyBDO1xuICAgICAgICAgICAgICAgICAgZCA9IEIgKyBEO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoRCA+IEIpIHtcbiAgICAgICAgICAgICAgICAgIG4gPSBDO1xuICAgICAgICAgICAgICAgICAgZCA9IEQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG4gPSBBO1xuICAgICAgICAgICAgICAgICAgZCA9IEI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgICAgICAgICBpZiAocDEgPiBNKSB7XG4gICAgICAgICAgICAgICAgICBBICs9IEM7XG4gICAgICAgICAgICAgICAgICBCICs9IEQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIEMgKz0gQTtcbiAgICAgICAgICAgICAgICAgIEQgKz0gQjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoQiA+IE4pIHtcbiAgICAgICAgICAgICAgICAgIG4gPSBDO1xuICAgICAgICAgICAgICAgICAgZCA9IEQ7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG4gPSBBO1xuICAgICAgICAgICAgICAgICAgZCA9IEI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuICo9IHo7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc05hTihwMSkgfHwgaXNOYU4ocDIpKSB7XG4gICAgICAgICAgICBkID0gbiA9IE5hTjtcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgICB7XG4gICAgICAgICAgQiA9IHAxLm1hdGNoKC9cXGQrfC4vZyk7XG5cbiAgICAgICAgICBpZiAoQiA9PT0gbnVsbClcbiAgICAgICAgICAgIHRocm93SW52YWxpZFBhcmFtKCk7XG5cbiAgICAgICAgICBpZiAoQltBXSA9PT0gJy0nKSB7Ly8gQ2hlY2sgZm9yIG1pbnVzIHNpZ24gYXQgdGhlIGJlZ2lubmluZ1xuICAgICAgICAgICAgcyA9IC0xO1xuICAgICAgICAgICAgQSsrO1xuICAgICAgICAgIH0gZWxzZSBpZiAoQltBXSA9PT0gJysnKSB7Ly8gQ2hlY2sgZm9yIHBsdXMgc2lnbiBhdCB0aGUgYmVnaW5uaW5nXG4gICAgICAgICAgICBBKys7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKEIubGVuZ3RoID09PSBBICsgMSkgeyAvLyBDaGVjayBpZiBpdCdzIGp1c3QgYSBzaW1wbGUgbnVtYmVyIFwiMTIzNFwiXG4gICAgICAgICAgICB3ID0gYXNzaWduKEJbQSsrXSwgcyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChCW0EgKyAxXSA9PT0gJy4nIHx8IEJbQV0gPT09ICcuJykgeyAvLyBDaGVjayBpZiBpdCdzIGEgZGVjaW1hbCBudW1iZXJcblxuICAgICAgICAgICAgaWYgKEJbQV0gIT09ICcuJykgeyAvLyBIYW5kbGUgMC41IGFuZCAuNVxuICAgICAgICAgICAgICB2ID0gYXNzaWduKEJbQSsrXSwgcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBBKys7XG5cbiAgICAgICAgICAgIC8vIENoZWNrIGZvciBkZWNpbWFsIHBsYWNlc1xuICAgICAgICAgICAgaWYgKEEgKyAxID09PSBCLmxlbmd0aCB8fCBCW0EgKyAxXSA9PT0gJygnICYmIEJbQSArIDNdID09PSAnKScgfHwgQltBICsgMV0gPT09IFwiJ1wiICYmIEJbQSArIDNdID09PSBcIidcIikge1xuICAgICAgICAgICAgICB3ID0gYXNzaWduKEJbQV0sIHMpO1xuICAgICAgICAgICAgICB5ID0gTWF0aC5wb3coMTAsIEJbQV0ubGVuZ3RoKTtcbiAgICAgICAgICAgICAgQSsrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBDaGVjayBmb3IgcmVwZWF0aW5nIHBsYWNlc1xuICAgICAgICAgICAgaWYgKEJbQV0gPT09ICcoJyAmJiBCW0EgKyAyXSA9PT0gJyknIHx8IEJbQV0gPT09IFwiJ1wiICYmIEJbQSArIDJdID09PSBcIidcIikge1xuICAgICAgICAgICAgICB4ID0gYXNzaWduKEJbQSArIDFdLCBzKTtcbiAgICAgICAgICAgICAgeiA9IE1hdGgucG93KDEwLCBCW0EgKyAxXS5sZW5ndGgpIC0gMTtcbiAgICAgICAgICAgICAgQSArPSAzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIGlmIChCW0EgKyAxXSA9PT0gJy8nIHx8IEJbQSArIDFdID09PSAnOicpIHsgLy8gQ2hlY2sgZm9yIGEgc2ltcGxlIGZyYWN0aW9uIFwiMTIzLzQ1NlwiIG9yIFwiMTIzOjQ1NlwiXG4gICAgICAgICAgICB3ID0gYXNzaWduKEJbQV0sIHMpO1xuICAgICAgICAgICAgeSA9IGFzc2lnbihCW0EgKyAyXSwgMSk7XG4gICAgICAgICAgICBBICs9IDM7XG4gICAgICAgICAgfSBlbHNlIGlmIChCW0EgKyAzXSA9PT0gJy8nICYmIEJbQSArIDFdID09PSAnICcpIHsgLy8gQ2hlY2sgZm9yIGEgY29tcGxleCBmcmFjdGlvbiBcIjEyMyAxLzJcIlxuICAgICAgICAgICAgdiA9IGFzc2lnbihCW0FdLCBzKTtcbiAgICAgICAgICAgIHcgPSBhc3NpZ24oQltBICsgMl0sIHMpO1xuICAgICAgICAgICAgeSA9IGFzc2lnbihCW0EgKyA0XSwgMSk7XG4gICAgICAgICAgICBBICs9IDU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKEIubGVuZ3RoIDw9IEEpIHsgLy8gQ2hlY2sgZm9yIG1vcmUgdG9rZW5zIG9uIHRoZSBzdGFja1xuICAgICAgICAgICAgZCA9IHkgKiB6O1xuICAgICAgICAgICAgcyA9IC8qIHZvaWQgKi9cbiAgICAgICAgICAgICAgICAgICAgbiA9IHggKyBkICogdiArIHogKiB3O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLyogRmFsbCB0aHJvdWdoIG9uIGVycm9yICovXG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvd0ludmFsaWRQYXJhbSgpO1xuICAgICAgfVxuXG4gICAgaWYgKGQgPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBEaXZpc2lvbkJ5WmVybygpO1xuICAgIH1cblxuICAgIFBbXCJzXCJdID0gcyA8IDAgPyAtMSA6IDE7XG4gICAgUFtcIm5cIl0gPSBNYXRoLmFicyhuKTtcbiAgICBQW1wiZFwiXSA9IE1hdGguYWJzKGQpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIG1vZHBvdyhiLCBlLCBtKSB7XG5cbiAgICB2YXIgciA9IDE7XG4gICAgZm9yICg7IGUgPiAwOyBiID0gKGIgKiBiKSAlIG0sIGUgPj49IDEpIHtcblxuICAgICAgaWYgKGUgJiAxKSB7XG4gICAgICAgIHIgPSAociAqIGIpICUgbTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHI7XG4gIH1cblxuXG4gIGZ1bmN0aW9uIGN5Y2xlTGVuKG4sIGQpIHtcblxuICAgIGZvciAoOyBkICUgMiA9PT0gMDtcbiAgICAgICAgICAgIGQgLz0gMikge1xuICAgIH1cblxuICAgIGZvciAoOyBkICUgNSA9PT0gMDtcbiAgICAgICAgICAgIGQgLz0gNSkge1xuICAgIH1cblxuICAgIGlmIChkID09PSAxKSAvLyBDYXRjaCBub24tY3ljbGljIG51bWJlcnNcbiAgICAgIHJldHVybiAwO1xuXG4gICAgLy8gSWYgd2Ugd291bGQgbGlrZSB0byBjb21wdXRlIHJlYWxseSBsYXJnZSBudW1iZXJzIHF1aWNrZXIsIHdlIGNvdWxkIG1ha2UgdXNlIG9mIEZlcm1hdCdzIGxpdHRsZSB0aGVvcmVtOlxuICAgIC8vIDEwXihkLTEpICUgZCA9PSAxXG4gICAgLy8gSG93ZXZlciwgd2UgZG9uJ3QgbmVlZCBzdWNoIGxhcmdlIG51bWJlcnMgYW5kIE1BWF9DWUNMRV9MRU4gc2hvdWxkIGJlIHRoZSBjYXBzdG9uZSxcbiAgICAvLyBhcyB3ZSB3YW50IHRvIHRyYW5zbGF0ZSB0aGUgbnVtYmVycyB0byBzdHJpbmdzLlxuXG4gICAgdmFyIHJlbSA9IDEwICUgZDtcbiAgICB2YXIgdCA9IDE7XG5cbiAgICBmb3IgKDsgcmVtICE9PSAxOyB0KyspIHtcbiAgICAgIHJlbSA9IHJlbSAqIDEwICUgZDtcblxuICAgICAgaWYgKHQgPiBNQVhfQ1lDTEVfTEVOKVxuICAgICAgICByZXR1cm4gMDsgLy8gUmV0dXJuaW5nIDAgaGVyZSBtZWFucyB0aGF0IHdlIGRvbid0IHByaW50IGl0IGFzIGEgY3ljbGljIG51bWJlci4gSXQncyBsaWtlbHkgdGhhdCB0aGUgYW5zd2VyIGlzIGBkLTFgXG4gICAgfVxuICAgIHJldHVybiB0O1xuICB9XG5cblxuICAgICBmdW5jdGlvbiBjeWNsZVN0YXJ0KG4sIGQsIGxlbikge1xuXG4gICAgdmFyIHJlbTEgPSAxO1xuICAgIHZhciByZW0yID0gbW9kcG93KDEwLCBsZW4sIGQpO1xuXG4gICAgZm9yICh2YXIgdCA9IDA7IHQgPCAzMDA7IHQrKykgeyAvLyBzIDwgfmxvZzEwKE51bWJlci5NQVhfVkFMVUUpXG4gICAgICAvLyBTb2x2ZSAxMF5zID09IDEwXihzK3QpIChtb2QgZClcblxuICAgICAgaWYgKHJlbTEgPT09IHJlbTIpXG4gICAgICAgIHJldHVybiB0O1xuXG4gICAgICByZW0xID0gcmVtMSAqIDEwICUgZDtcbiAgICAgIHJlbTIgPSByZW0yICogMTAgJSBkO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdjZChhLCBiKSB7XG5cbiAgICBpZiAoIWEpXG4gICAgICByZXR1cm4gYjtcbiAgICBpZiAoIWIpXG4gICAgICByZXR1cm4gYTtcblxuICAgIHdoaWxlICgxKSB7XG4gICAgICBhICU9IGI7XG4gICAgICBpZiAoIWEpXG4gICAgICAgIHJldHVybiBiO1xuICAgICAgYiAlPSBhO1xuICAgICAgaWYgKCFiKVxuICAgICAgICByZXR1cm4gYTtcbiAgICB9XG4gIH07XG5cbiAgLyoqXG4gICAqIE1vZHVsZSBjb25zdHJ1Y3RvclxuICAgKlxuICAgKiBAY29uc3RydWN0b3JcbiAgICogQHBhcmFtIHtudW1iZXJ8RnJhY3Rpb249fSBhXG4gICAqIEBwYXJhbSB7bnVtYmVyPX0gYlxuICAgKi9cbiAgZnVuY3Rpb24gRnJhY3Rpb24oYSwgYikge1xuXG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEZyYWN0aW9uKSkge1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihhLCBiKTtcbiAgICB9XG5cbiAgICBwYXJzZShhLCBiKTtcblxuICAgIGlmIChGcmFjdGlvblsnUkVEVUNFJ10pIHtcbiAgICAgIGEgPSBnY2QoUFtcImRcIl0sIFBbXCJuXCJdKTsgLy8gQWJ1c2UgYVxuICAgIH0gZWxzZSB7XG4gICAgICBhID0gMTtcbiAgICB9XG5cbiAgICB0aGlzW1wic1wiXSA9IFBbXCJzXCJdO1xuICAgIHRoaXNbXCJuXCJdID0gUFtcIm5cIl0gLyBhO1xuICAgIHRoaXNbXCJkXCJdID0gUFtcImRcIl0gLyBhO1xuICB9XG5cbiAgLyoqXG4gICAqIEJvb2xlYW4gZ2xvYmFsIHZhcmlhYmxlIHRvIGJlIGFibGUgdG8gZGlzYWJsZSBhdXRvbWF0aWMgcmVkdWN0aW9uIG9mIHRoZSBmcmFjdGlvblxuICAgKlxuICAgKi9cbiAgRnJhY3Rpb25bJ1JFRFVDRSddID0gMTtcblxuICBGcmFjdGlvbi5wcm90b3R5cGUgPSB7XG5cbiAgICBcInNcIjogMSxcbiAgICBcIm5cIjogMCxcbiAgICBcImRcIjogMSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIGFic29sdXRlIHZhbHVlXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKC00KS5hYnMoKSA9PiA0XG4gICAgICoqL1xuICAgIFwiYWJzXCI6IGZ1bmN0aW9uKCkge1xuXG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKHRoaXNbXCJuXCJdLCB0aGlzW1wiZFwiXSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEludmVydHMgdGhlIHNpZ24gb2YgdGhlIGN1cnJlbnQgZnJhY3Rpb25cbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oLTQpLm5lZygpID0+IDRcbiAgICAgKiovXG4gICAgXCJuZWdcIjogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oLXRoaXNbXCJzXCJdICogdGhpc1tcIm5cIl0sIHRoaXNbXCJkXCJdKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQWRkcyB0d28gcmF0aW9uYWwgbnVtYmVyc1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbih7bjogMiwgZDogM30pLmFkZChcIjE0LjlcIikgPT4gNDY3IC8gMzBcbiAgICAgKiovXG4gICAgXCJhZGRcIjogZnVuY3Rpb24oYSwgYikge1xuXG4gICAgICBwYXJzZShhLCBiKTtcbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oXG4gICAgICAgICAgICAgIHRoaXNbXCJzXCJdICogdGhpc1tcIm5cIl0gKiBQW1wiZFwiXSArIFBbXCJzXCJdICogdGhpc1tcImRcIl0gKiBQW1wiblwiXSxcbiAgICAgICAgICAgICAgdGhpc1tcImRcIl0gKiBQW1wiZFwiXVxuICAgICAgICAgICAgICApO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTdWJ0cmFjdHMgdHdvIHJhdGlvbmFsIG51bWJlcnNcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oe246IDIsIGQ6IDN9KS5hZGQoXCIxNC45XCIpID0+IC00MjcgLyAzMFxuICAgICAqKi9cbiAgICBcInN1YlwiOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHBhcnNlKGEsIGIpO1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihcbiAgICAgICAgICAgICAgdGhpc1tcInNcIl0gKiB0aGlzW1wiblwiXSAqIFBbXCJkXCJdIC0gUFtcInNcIl0gKiB0aGlzW1wiZFwiXSAqIFBbXCJuXCJdLFxuICAgICAgICAgICAgICB0aGlzW1wiZFwiXSAqIFBbXCJkXCJdXG4gICAgICAgICAgICAgICk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIE11bHRpcGxpZXMgdHdvIHJhdGlvbmFsIG51bWJlcnNcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oXCItMTcuKDM0NSlcIikubXVsKDMpID0+IDU3NzYgLyAxMTFcbiAgICAgKiovXG4gICAgXCJtdWxcIjogZnVuY3Rpb24oYSwgYikge1xuXG4gICAgICBwYXJzZShhLCBiKTtcbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oXG4gICAgICAgICAgICAgIHRoaXNbXCJzXCJdICogUFtcInNcIl0gKiB0aGlzW1wiblwiXSAqIFBbXCJuXCJdLFxuICAgICAgICAgICAgICB0aGlzW1wiZFwiXSAqIFBbXCJkXCJdXG4gICAgICAgICAgICAgICk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIERpdmlkZXMgdHdvIHJhdGlvbmFsIG51bWJlcnNcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oXCItMTcuKDM0NSlcIikuaW52ZXJzZSgpLmRpdigzKVxuICAgICAqKi9cbiAgICBcImRpdlwiOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHBhcnNlKGEsIGIpO1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihcbiAgICAgICAgICAgICAgdGhpc1tcInNcIl0gKiBQW1wic1wiXSAqIHRoaXNbXCJuXCJdICogUFtcImRcIl0sXG4gICAgICAgICAgICAgIHRoaXNbXCJkXCJdICogUFtcIm5cIl1cbiAgICAgICAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2xvbmVzIHRoZSBhY3R1YWwgb2JqZWN0XG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKFwiLTE3LigzNDUpXCIpLmNsb25lKClcbiAgICAgKiovXG4gICAgXCJjbG9uZVwiOiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24odGhpcyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIG1vZHVsbyBvZiB0d28gcmF0aW9uYWwgbnVtYmVycyAtIGEgbW9yZSBwcmVjaXNlIGZtb2RcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oJzQuKDMpJykubW9kKFs3LCA4XSkgPT4gKDEzLzMpICUgKDcvOCkgPSAoNS82KVxuICAgICAqKi9cbiAgICBcIm1vZFwiOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIGlmIChpc05hTih0aGlzWyduJ10pIHx8IGlzTmFOKHRoaXNbJ2QnXSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihOYU4pO1xuICAgICAgfVxuXG4gICAgICBpZiAoYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24odGhpc1tcInNcIl0gKiB0aGlzW1wiblwiXSAlIHRoaXNbXCJkXCJdLCAxKTtcbiAgICAgIH1cblxuICAgICAgcGFyc2UoYSwgYik7XG4gICAgICBpZiAoMCA9PT0gUFtcIm5cIl0gJiYgMCA9PT0gdGhpc1tcImRcIl0pIHtcbiAgICAgICAgRnJhY3Rpb24oMCwgMCk7IC8vIFRocm93IERpdmlzaW9uQnlaZXJvXG4gICAgICB9XG5cbiAgICAgIC8qXG4gICAgICAgKiBGaXJzdCBzaWxseSBhdHRlbXB0LCBraW5kYSBzbG93XG4gICAgICAgKlxuICAgICAgIHJldHVybiB0aGF0W1wic3ViXCJdKHtcbiAgICAgICBcIm5cIjogbnVtW1wiblwiXSAqIE1hdGguZmxvb3IoKHRoaXMubiAvIHRoaXMuZCkgLyAobnVtLm4gLyBudW0uZCkpLFxuICAgICAgIFwiZFwiOiBudW1bXCJkXCJdLFxuICAgICAgIFwic1wiOiB0aGlzW1wic1wiXVxuICAgICAgIH0pOyovXG5cbiAgICAgIC8qXG4gICAgICAgKiBOZXcgYXR0ZW1wdDogYTEgLyBiMSA9IGEyIC8gYjIgKiBxICsgclxuICAgICAgICogPT4gYjIgKiBhMSA9IGEyICogYjEgKiBxICsgYjEgKiBiMiAqIHJcbiAgICAgICAqID0+IChiMiAqIGExICUgYTIgKiBiMSkgLyAoYjEgKiBiMilcbiAgICAgICAqL1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihcbiAgICAgICAgICAgICAgdGhpc1tcInNcIl0gKiAoUFtcImRcIl0gKiB0aGlzW1wiblwiXSkgJSAoUFtcIm5cIl0gKiB0aGlzW1wiZFwiXSksXG4gICAgICAgICAgICAgIFBbXCJkXCJdICogdGhpc1tcImRcIl1cbiAgICAgICAgICAgICAgKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgZnJhY3Rpb25hbCBnY2Qgb2YgdHdvIHJhdGlvbmFsIG51bWJlcnNcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oNSw4KS5nY2QoMyw3KSA9PiAxLzU2XG4gICAgICovXG4gICAgXCJnY2RcIjogZnVuY3Rpb24oYSwgYikge1xuXG4gICAgICBwYXJzZShhLCBiKTtcblxuICAgICAgLy8gZ2NkKGEgLyBiLCBjIC8gZCkgPSBnY2QoYSwgYykgLyBsY20oYiwgZClcblxuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihnY2QoUFtcIm5cIl0sIHRoaXNbXCJuXCJdKSAqIGdjZChQW1wiZFwiXSwgdGhpc1tcImRcIl0pLCBQW1wiZFwiXSAqIHRoaXNbXCJkXCJdKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgZnJhY3Rpb25hbCBsY20gb2YgdHdvIHJhdGlvbmFsIG51bWJlcnNcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oNSw4KS5sY20oMyw3KSA9PiAxNVxuICAgICAqL1xuICAgIFwibGNtXCI6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgcGFyc2UoYSwgYik7XG5cbiAgICAgIC8vIGxjbShhIC8gYiwgYyAvIGQpID0gbGNtKGEsIGMpIC8gZ2NkKGIsIGQpXG5cbiAgICAgIGlmIChQW1wiblwiXSA9PT0gMCAmJiB0aGlzW1wiblwiXSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gbmV3IEZyYWN0aW9uO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihQW1wiblwiXSAqIHRoaXNbXCJuXCJdLCBnY2QoUFtcIm5cIl0sIHRoaXNbXCJuXCJdKSAqIGdjZChQW1wiZFwiXSwgdGhpc1tcImRcIl0pKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUgY2VpbCBvZiBhIHJhdGlvbmFsIG51bWJlclxuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbignNC4oMyknKS5jZWlsKCkgPT4gKDUgLyAxKVxuICAgICAqKi9cbiAgICBcImNlaWxcIjogZnVuY3Rpb24ocGxhY2VzKSB7XG5cbiAgICAgIHBsYWNlcyA9IE1hdGgucG93KDEwLCBwbGFjZXMgfHwgMCk7XG5cbiAgICAgIGlmIChpc05hTih0aGlzW1wiblwiXSkgfHwgaXNOYU4odGhpc1tcImRcIl0pKSB7XG4gICAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oTmFOKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oTWF0aC5jZWlsKHBsYWNlcyAqIHRoaXNbXCJzXCJdICogdGhpc1tcIm5cIl0gLyB0aGlzW1wiZFwiXSksIHBsYWNlcyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIENhbGN1bGF0ZXMgdGhlIGZsb29yIG9mIGEgcmF0aW9uYWwgbnVtYmVyXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKCc0LigzKScpLmZsb29yKCkgPT4gKDQgLyAxKVxuICAgICAqKi9cbiAgICBcImZsb29yXCI6IGZ1bmN0aW9uKHBsYWNlcykge1xuXG4gICAgICBwbGFjZXMgPSBNYXRoLnBvdygxMCwgcGxhY2VzIHx8IDApO1xuXG4gICAgICBpZiAoaXNOYU4odGhpc1tcIm5cIl0pIHx8IGlzTmFOKHRoaXNbXCJkXCJdKSkge1xuICAgICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKE5hTik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKE1hdGguZmxvb3IocGxhY2VzICogdGhpc1tcInNcIl0gKiB0aGlzW1wiblwiXSAvIHRoaXNbXCJkXCJdKSwgcGxhY2VzKTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUm91bmRzIGEgcmF0aW9uYWwgbnVtYmVyc1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbignNC4oMyknKS5yb3VuZCgpID0+ICg0IC8gMSlcbiAgICAgKiovXG4gICAgXCJyb3VuZFwiOiBmdW5jdGlvbihwbGFjZXMpIHtcblxuICAgICAgcGxhY2VzID0gTWF0aC5wb3coMTAsIHBsYWNlcyB8fCAwKTtcblxuICAgICAgaWYgKGlzTmFOKHRoaXNbXCJuXCJdKSB8fCBpc05hTih0aGlzW1wiZFwiXSkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihOYU4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbihNYXRoLnJvdW5kKHBsYWNlcyAqIHRoaXNbXCJzXCJdICogdGhpc1tcIm5cIl0gLyB0aGlzW1wiZFwiXSksIHBsYWNlcyk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIEdldHMgdGhlIGludmVyc2Ugb2YgdGhlIGZyYWN0aW9uLCBtZWFucyBudW1lcmF0b3IgYW5kIGRlbnVtZXJhdG9yIGFyZSBleGNoYW5nZWRcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oWy0zLCA0XSkuaW52ZXJzZSgpID0+IC00IC8gM1xuICAgICAqKi9cbiAgICBcImludmVyc2VcIjogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24odGhpc1tcInNcIl0gKiB0aGlzW1wiZFwiXSwgdGhpc1tcIm5cIl0pO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBDYWxjdWxhdGVzIHRoZSBmcmFjdGlvbiB0byBzb21lIGludGVnZXIgZXhwb25lbnRcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oLTEsMikucG93KC0zKSA9PiAtOFxuICAgICAqL1xuICAgIFwicG93XCI6IGZ1bmN0aW9uKG0pIHtcblxuICAgICAgaWYgKG0gPCAwKSB7XG4gICAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oTWF0aC5wb3codGhpc1sncyddICogdGhpc1tcImRcIl0sIC1tKSwgTWF0aC5wb3codGhpc1tcIm5cIl0sIC1tKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKE1hdGgucG93KHRoaXNbJ3MnXSAqIHRoaXNbXCJuXCJdLCBtKSwgTWF0aC5wb3codGhpc1tcImRcIl0sIG0pKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdHdvIHJhdGlvbmFsIG51bWJlcnMgYXJlIHRoZSBzYW1lXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKDE5LjYpLmVxdWFscyhbOTgsIDVdKTtcbiAgICAgKiovXG4gICAgXCJlcXVhbHNcIjogZnVuY3Rpb24oYSwgYikge1xuXG4gICAgICBwYXJzZShhLCBiKTtcbiAgICAgIHJldHVybiB0aGlzW1wic1wiXSAqIHRoaXNbXCJuXCJdICogUFtcImRcIl0gPT09IFBbXCJzXCJdICogUFtcIm5cIl0gKiB0aGlzW1wiZFwiXTsgLy8gU2FtZSBhcyBjb21wYXJlKCkgPT09IDBcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdHdvIHJhdGlvbmFsIG51bWJlcnMgYXJlIHRoZSBzYW1lXG4gICAgICpcbiAgICAgKiBFeDogbmV3IEZyYWN0aW9uKDE5LjYpLmVxdWFscyhbOTgsIDVdKTtcbiAgICAgKiovXG4gICAgXCJjb21wYXJlXCI6IGZ1bmN0aW9uKGEsIGIpIHtcblxuICAgICAgcGFyc2UoYSwgYik7XG4gICAgICB2YXIgdCA9ICh0aGlzW1wic1wiXSAqIHRoaXNbXCJuXCJdICogUFtcImRcIl0gLSBQW1wic1wiXSAqIFBbXCJuXCJdICogdGhpc1tcImRcIl0pO1xuICAgICAgcmV0dXJuICgwIDwgdCkgLSAodCA8IDApO1xuICAgIH0sXG5cbiAgICBcInNpbXBsaWZ5XCI6IGZ1bmN0aW9uKGVwcykge1xuXG4gICAgICAvLyBGaXJzdCBuYWl2ZSBpbXBsZW1lbnRhdGlvbiwgbmVlZHMgaW1wcm92ZW1lbnRcblxuICAgICAgaWYgKGlzTmFOKHRoaXNbJ24nXSkgfHwgaXNOYU4odGhpc1snZCddKSkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cblxuICAgICAgdmFyIGNvbnQgPSB0aGlzWydhYnMnXSgpWyd0b0NvbnRpbnVlZCddKCk7XG5cbiAgICAgIGVwcyA9IGVwcyB8fCAwLjAwMTtcblxuICAgICAgZnVuY3Rpb24gcmVjKGEpIHtcbiAgICAgICAgaWYgKGEubGVuZ3RoID09PSAxKVxuICAgICAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oYVswXSk7XG4gICAgICAgIHJldHVybiByZWMoYS5zbGljZSgxKSlbJ2ludmVyc2UnXSgpWydhZGQnXShhWzBdKTtcbiAgICAgIH1cblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb250Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB0bXAgPSByZWMoY29udC5zbGljZSgwLCBpICsgMSkpO1xuICAgICAgICBpZiAodG1wWydzdWInXSh0aGlzWydhYnMnXSgpKVsnYWJzJ10oKS52YWx1ZU9mKCkgPCBlcHMpIHtcbiAgICAgICAgICByZXR1cm4gdG1wWydtdWwnXSh0aGlzWydzJ10pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgdHdvIHJhdGlvbmFsIG51bWJlcnMgYXJlIGRpdmlzaWJsZVxuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbigxOS42KS5kaXZpc2libGUoMS41KTtcbiAgICAgKi9cbiAgICBcImRpdmlzaWJsZVwiOiBmdW5jdGlvbihhLCBiKSB7XG5cbiAgICAgIHBhcnNlKGEsIGIpO1xuICAgICAgcmV0dXJuICEoIShQW1wiblwiXSAqIHRoaXNbXCJkXCJdKSB8fCAoKHRoaXNbXCJuXCJdICogUFtcImRcIl0pICUgKFBbXCJuXCJdICogdGhpc1tcImRcIl0pKSk7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBkZWNpbWFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBmcmFjdGlvblxuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbihcIjEwMC4nOTE4MjMnXCIpLnZhbHVlT2YoKSA9PiAxMDAuOTE4MjM5MTgyMzkxODNcbiAgICAgKiovXG4gICAgJ3ZhbHVlT2YnOiBmdW5jdGlvbigpIHtcblxuICAgICAgcmV0dXJuIHRoaXNbXCJzXCJdICogdGhpc1tcIm5cIl0gLyB0aGlzW1wiZFwiXTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIHN0cmluZy1mcmFjdGlvbiByZXByZXNlbnRhdGlvbiBvZiBhIEZyYWN0aW9uIG9iamVjdFxuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbihcIjEuJzMnXCIpLnRvRnJhY3Rpb24oKSA9PiBcIjQgMS8zXCJcbiAgICAgKiovXG4gICAgJ3RvRnJhY3Rpb24nOiBmdW5jdGlvbihleGNsdWRlV2hvbGUpIHtcblxuICAgICAgdmFyIHdob2xlLCBzdHIgPSBcIlwiO1xuICAgICAgdmFyIG4gPSB0aGlzW1wiblwiXTtcbiAgICAgIHZhciBkID0gdGhpc1tcImRcIl07XG4gICAgICBpZiAodGhpc1tcInNcIl0gPCAwKSB7XG4gICAgICAgIHN0ciArPSAnLSc7XG4gICAgICB9XG5cbiAgICAgIGlmIChkID09PSAxKSB7XG4gICAgICAgIHN0ciArPSBuO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgICBpZiAoZXhjbHVkZVdob2xlICYmICh3aG9sZSA9IE1hdGguZmxvb3IobiAvIGQpKSA+IDApIHtcbiAgICAgICAgICBzdHIgKz0gd2hvbGU7XG4gICAgICAgICAgc3RyICs9IFwiIFwiO1xuICAgICAgICAgIG4gJT0gZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0ciArPSBuO1xuICAgICAgICBzdHIgKz0gJy8nO1xuICAgICAgICBzdHIgKz0gZDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHI7XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBsYXRleCByZXByZXNlbnRhdGlvbiBvZiBhIEZyYWN0aW9uIG9iamVjdFxuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbihcIjEuJzMnXCIpLnRvTGF0ZXgoKSA9PiBcIlxcZnJhY3s0fXszfVwiXG4gICAgICoqL1xuICAgICd0b0xhdGV4JzogZnVuY3Rpb24oZXhjbHVkZVdob2xlKSB7XG5cbiAgICAgIHZhciB3aG9sZSwgc3RyID0gXCJcIjtcbiAgICAgIHZhciBuID0gdGhpc1tcIm5cIl07XG4gICAgICB2YXIgZCA9IHRoaXNbXCJkXCJdO1xuICAgICAgaWYgKHRoaXNbXCJzXCJdIDwgMCkge1xuICAgICAgICBzdHIgKz0gJy0nO1xuICAgICAgfVxuXG4gICAgICBpZiAoZCA9PT0gMSkge1xuICAgICAgICBzdHIgKz0gbjtcbiAgICAgIH0gZWxzZSB7XG5cbiAgICAgICAgaWYgKGV4Y2x1ZGVXaG9sZSAmJiAod2hvbGUgPSBNYXRoLmZsb29yKG4gLyBkKSkgPiAwKSB7XG4gICAgICAgICAgc3RyICs9IHdob2xlO1xuICAgICAgICAgIG4gJT0gZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0ciArPSBcIlxcXFxmcmFje1wiO1xuICAgICAgICBzdHIgKz0gbjtcbiAgICAgICAgc3RyICs9ICd9eyc7XG4gICAgICAgIHN0ciArPSBkO1xuICAgICAgICBzdHIgKz0gJ30nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhbiBhcnJheSBvZiBjb250aW51ZWQgZnJhY3Rpb24gZWxlbWVudHNcbiAgICAgKlxuICAgICAqIEV4OiBuZXcgRnJhY3Rpb24oXCI3LzhcIikudG9Db250aW51ZWQoKSA9PiBbMCwxLDddXG4gICAgICovXG4gICAgJ3RvQ29udGludWVkJzogZnVuY3Rpb24oKSB7XG5cbiAgICAgIHZhciB0O1xuICAgICAgdmFyIGEgPSB0aGlzWyduJ107XG4gICAgICB2YXIgYiA9IHRoaXNbJ2QnXTtcbiAgICAgIHZhciByZXMgPSBbXTtcblxuICAgICAgaWYgKGlzTmFOKHRoaXNbJ24nXSkgfHwgaXNOYU4odGhpc1snZCddKSkge1xuICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgfVxuXG4gICAgICBkbyB7XG4gICAgICAgIHJlcy5wdXNoKE1hdGguZmxvb3IoYSAvIGIpKTtcbiAgICAgICAgdCA9IGEgJSBiO1xuICAgICAgICBhID0gYjtcbiAgICAgICAgYiA9IHQ7XG4gICAgICB9IHdoaWxlIChhICE9PSAxKTtcblxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlcyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIGZyYWN0aW9uIHdpdGggYWxsIGRpZ2l0c1xuICAgICAqXG4gICAgICogRXg6IG5ldyBGcmFjdGlvbihcIjEwMC4nOTE4MjMnXCIpLnRvU3RyaW5nKCkgPT4gXCIxMDAuKDkxODIzKVwiXG4gICAgICoqL1xuICAgICd0b1N0cmluZyc6IGZ1bmN0aW9uKGRlYykge1xuXG4gICAgICB2YXIgZztcbiAgICAgIHZhciBOID0gdGhpc1tcIm5cIl07XG4gICAgICB2YXIgRCA9IHRoaXNbXCJkXCJdO1xuXG4gICAgICBpZiAoaXNOYU4oTikgfHwgaXNOYU4oRCkpIHtcbiAgICAgICAgcmV0dXJuIFwiTmFOXCI7XG4gICAgICB9XG5cbiAgICAgIGlmICghRnJhY3Rpb25bJ1JFRFVDRSddKSB7XG4gICAgICAgIGcgPSBnY2QoTiwgRCk7XG4gICAgICAgIE4gLz0gZztcbiAgICAgICAgRCAvPSBnO1xuICAgICAgfVxuXG4gICAgICBkZWMgPSBkZWMgfHwgMTU7IC8vIDE1ID0gZGVjaW1hbCBwbGFjZXMgd2hlbiBubyByZXBpdGF0aW9uXG5cbiAgICAgIHZhciBjeWNMZW4gPSBjeWNsZUxlbihOLCBEKTsgLy8gQ3ljbGUgbGVuZ3RoXG4gICAgICB2YXIgY3ljT2ZmID0gY3ljbGVTdGFydChOLCBELCBjeWNMZW4pOyAvLyBDeWNsZSBzdGFydFxuXG4gICAgICB2YXIgc3RyID0gdGhpc1sncyddID09PSAtMSA/IFwiLVwiIDogXCJcIjtcblxuICAgICAgc3RyICs9IE4gLyBEIHwgMDtcblxuICAgICAgTiAlPSBEO1xuICAgICAgTiAqPSAxMDtcblxuICAgICAgaWYgKE4pXG4gICAgICAgIHN0ciArPSBcIi5cIjtcblxuICAgICAgaWYgKGN5Y0xlbikge1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBjeWNPZmY7IGktLTsgKSB7XG4gICAgICAgICAgc3RyICs9IE4gLyBEIHwgMDtcbiAgICAgICAgICBOICU9IEQ7XG4gICAgICAgICAgTiAqPSAxMDtcbiAgICAgICAgfVxuICAgICAgICBzdHIgKz0gXCIoXCI7XG4gICAgICAgIGZvciAodmFyIGkgPSBjeWNMZW47IGktLTsgKSB7XG4gICAgICAgICAgc3RyICs9IE4gLyBEIHwgMDtcbiAgICAgICAgICBOICU9IEQ7XG4gICAgICAgICAgTiAqPSAxMDtcbiAgICAgICAgfVxuICAgICAgICBzdHIgKz0gXCIpXCI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKHZhciBpID0gZGVjOyBOICYmIGktLTsgKSB7XG4gICAgICAgICAgc3RyICs9IE4gLyBEIHwgMDtcbiAgICAgICAgICBOICU9IEQ7XG4gICAgICAgICAgTiAqPSAxMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gIH07XG5cbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmVbXCJhbWRcIl0pIHtcbiAgICBkZWZpbmUoW10sIGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIEZyYWN0aW9uO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7J3ZhbHVlJzogdHJ1ZX0pO1xuICAgIEZyYWN0aW9uWydkZWZhdWx0J10gPSBGcmFjdGlvbjtcbiAgICBGcmFjdGlvblsnRnJhY3Rpb24nXSA9IEZyYWN0aW9uO1xuICAgIG1vZHVsZVsnZXhwb3J0cyddID0gRnJhY3Rpb247XG4gIH0gZWxzZSB7XG4gICAgcm9vdFsnRnJhY3Rpb24nXSA9IEZyYWN0aW9uO1xuICB9XG5cbn0pKHRoaXMpO1xuIiwiLypcclxuICogTmF0dXJhbCBTb3J0IGFsZ29yaXRobSBmb3IgSmF2YXNjcmlwdCAtIFZlcnNpb24gMC43IC0gUmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2VcclxuICogQXV0aG9yOiBKaW0gUGFsbWVyIChiYXNlZCBvbiBjaHVua2luZyBpZGVhIGZyb20gRGF2ZSBLb2VsbGUpXHJcbiAqL1xyXG4vKmpzaGludCB1bnVzZWQ6ZmFsc2UgKi9cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBuYXR1cmFsU29ydCAoYSwgYikge1xyXG5cdFwidXNlIHN0cmljdFwiO1xyXG5cdHZhciByZSA9IC8oXihbK1xcLV0/KD86MHxbMS05XVxcZCopKD86XFwuXFxkKik/KD86W2VFXVsrXFwtXT9cXGQrKT8pPyR8XjB4WzAtOWEtZl0rJHxcXGQrKS9naSxcclxuXHRcdHNyZSA9IC8oXlsgXSp8WyBdKiQpL2csXHJcblx0XHRkcmUgPSAvKF4oW1xcdyBdKyw/W1xcdyBdKyk/W1xcdyBdKyw/W1xcdyBdK1xcZCs6XFxkKyg6XFxkKyk/W1xcdyBdP3xeXFxkezEsNH1bXFwvXFwtXVxcZHsxLDR9W1xcL1xcLV1cXGR7MSw0fXxeXFx3KywgXFx3KyBcXGQrLCBcXGR7NH0pLyxcclxuXHRcdGhyZSA9IC9eMHhbMC05YS1mXSskL2ksXHJcblx0XHRvcmUgPSAvXjAvLFxyXG5cdFx0aSA9IGZ1bmN0aW9uKHMpIHsgcmV0dXJuIG5hdHVyYWxTb3J0Lmluc2Vuc2l0aXZlICYmICgnJyArIHMpLnRvTG93ZXJDYXNlKCkgfHwgJycgKyBzOyB9LFxyXG5cdFx0Ly8gY29udmVydCBhbGwgdG8gc3RyaW5ncyBzdHJpcCB3aGl0ZXNwYWNlXHJcblx0XHR4ID0gaShhKS5yZXBsYWNlKHNyZSwgJycpIHx8ICcnLFxyXG5cdFx0eSA9IGkoYikucmVwbGFjZShzcmUsICcnKSB8fCAnJyxcclxuXHRcdC8vIGNodW5rL3Rva2VuaXplXHJcblx0XHR4TiA9IHgucmVwbGFjZShyZSwgJ1xcMCQxXFwwJykucmVwbGFjZSgvXFwwJC8sJycpLnJlcGxhY2UoL15cXDAvLCcnKS5zcGxpdCgnXFwwJyksXHJcblx0XHR5TiA9IHkucmVwbGFjZShyZSwgJ1xcMCQxXFwwJykucmVwbGFjZSgvXFwwJC8sJycpLnJlcGxhY2UoL15cXDAvLCcnKS5zcGxpdCgnXFwwJyksXHJcblx0XHQvLyBudW1lcmljLCBoZXggb3IgZGF0ZSBkZXRlY3Rpb25cclxuXHRcdHhEID0gcGFyc2VJbnQoeC5tYXRjaChocmUpLCAxNikgfHwgKHhOLmxlbmd0aCAhPT0gMSAmJiB4Lm1hdGNoKGRyZSkgJiYgRGF0ZS5wYXJzZSh4KSksXHJcblx0XHR5RCA9IHBhcnNlSW50KHkubWF0Y2goaHJlKSwgMTYpIHx8IHhEICYmIHkubWF0Y2goZHJlKSAmJiBEYXRlLnBhcnNlKHkpIHx8IG51bGwsXHJcblx0XHRvRnhOY0wsIG9GeU5jTDtcclxuXHQvLyBmaXJzdCB0cnkgYW5kIHNvcnQgSGV4IGNvZGVzIG9yIERhdGVzXHJcblx0aWYgKHlEKSB7XHJcblx0XHRpZiAoIHhEIDwgeUQgKSB7IHJldHVybiAtMTsgfVxyXG5cdFx0ZWxzZSBpZiAoIHhEID4geUQgKSB7IHJldHVybiAxOyB9XHJcblx0fVxyXG5cdC8vIG5hdHVyYWwgc29ydGluZyB0aHJvdWdoIHNwbGl0IG51bWVyaWMgc3RyaW5ncyBhbmQgZGVmYXVsdCBzdHJpbmdzXHJcblx0Zm9yKHZhciBjTG9jPTAsIG51bVM9TWF0aC5tYXgoeE4ubGVuZ3RoLCB5Ti5sZW5ndGgpOyBjTG9jIDwgbnVtUzsgY0xvYysrKSB7XHJcblx0XHQvLyBmaW5kIGZsb2F0cyBub3Qgc3RhcnRpbmcgd2l0aCAnMCcsIHN0cmluZyBvciAwIGlmIG5vdCBkZWZpbmVkIChDbGludCBQcmllc3QpXHJcblx0XHRvRnhOY0wgPSAhKHhOW2NMb2NdIHx8ICcnKS5tYXRjaChvcmUpICYmIHBhcnNlRmxvYXQoeE5bY0xvY10pIHx8IHhOW2NMb2NdIHx8IDA7XHJcblx0XHRvRnlOY0wgPSAhKHlOW2NMb2NdIHx8ICcnKS5tYXRjaChvcmUpICYmIHBhcnNlRmxvYXQoeU5bY0xvY10pIHx8IHlOW2NMb2NdIHx8IDA7XHJcblx0XHQvLyBoYW5kbGUgbnVtZXJpYyB2cyBzdHJpbmcgY29tcGFyaXNvbiAtIG51bWJlciA8IHN0cmluZyAtIChLeWxlIEFkYW1zKVxyXG5cdFx0aWYgKGlzTmFOKG9GeE5jTCkgIT09IGlzTmFOKG9GeU5jTCkpIHsgcmV0dXJuIChpc05hTihvRnhOY0wpKSA/IDEgOiAtMTsgfVxyXG5cdFx0Ly8gcmVseSBvbiBzdHJpbmcgY29tcGFyaXNvbiBpZiBkaWZmZXJlbnQgdHlwZXMgLSBpLmUuICcwMicgPCAyICE9ICcwMicgPCAnMidcclxuXHRcdGVsc2UgaWYgKHR5cGVvZiBvRnhOY0wgIT09IHR5cGVvZiBvRnlOY0wpIHtcclxuXHRcdFx0b0Z4TmNMICs9ICcnO1xyXG5cdFx0XHRvRnlOY0wgKz0gJyc7XHJcblx0XHR9XHJcblx0XHRpZiAob0Z4TmNMIDwgb0Z5TmNMKSB7IHJldHVybiAtMTsgfVxyXG5cdFx0aWYgKG9GeE5jTCA+IG9GeU5jTCkgeyByZXR1cm4gMTsgfVxyXG5cdH1cclxuXHRyZXR1cm4gMDtcclxufTtcclxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVZlcnNpb24gPSBleHBvcnRzLmNyZWF0ZVVwcGVyY2FzZUUgPSBleHBvcnRzLmNyZWF0ZVVwcGVyY2FzZVBpID0gZXhwb3J0cy5jcmVhdGVJID0gZXhwb3J0cy5jcmVhdGVTUVJUMiA9IGV4cG9ydHMuY3JlYXRlU1FSVDFfMiA9IGV4cG9ydHMuY3JlYXRlTE9HMTBFID0gZXhwb3J0cy5jcmVhdGVMT0cyRSA9IGV4cG9ydHMuY3JlYXRlTE4xMCA9IGV4cG9ydHMuY3JlYXRlTE4yID0gZXhwb3J0cy5jcmVhdGVQaGkgPSBleHBvcnRzLmNyZWF0ZUUgPSBleHBvcnRzLmNyZWF0ZVRhdSA9IGV4cG9ydHMuY3JlYXRlUGkgPSBleHBvcnRzLmNyZWF0ZU5hTiA9IGV4cG9ydHMuY3JlYXRlSW5maW5pdHkgPSBleHBvcnRzLmNyZWF0ZU51bGwgPSBleHBvcnRzLmNyZWF0ZUZhbHNlID0gZXhwb3J0cy5jcmVhdGVUcnVlID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3ZlcnNpb24gPSByZXF1aXJlKFwiLi92ZXJzaW9uXCIpO1xuXG52YXIgX2NvbnN0YW50cyA9IHJlcXVpcmUoXCIuL3V0aWxzL2JpZ251bWJlci9jb25zdGFudHNcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgY3JlYXRlVHJ1ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KSgndHJ1ZScsIFtdLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufSk7XG5leHBvcnRzLmNyZWF0ZVRydWUgPSBjcmVhdGVUcnVlO1xudmFyIGNyZWF0ZUZhbHNlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKCdmYWxzZScsIFtdLCBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBmYWxzZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVGYWxzZSA9IGNyZWF0ZUZhbHNlO1xudmFyIGNyZWF0ZU51bGwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkoJ251bGwnLCBbXSwgZnVuY3Rpb24gKCkge1xuICByZXR1cm4gbnVsbDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVOdWxsID0gY3JlYXRlTnVsbDtcbnZhciBjcmVhdGVJbmZpbml0eSA9IC8qICNfX1BVUkVfXyAqL3JlY3JlYXRlRmFjdG9yeSgnSW5maW5pdHknLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyBuZXcgQmlnTnVtYmVyKEluZmluaXR5KSA6IEluZmluaXR5O1xufSk7XG5leHBvcnRzLmNyZWF0ZUluZmluaXR5ID0gY3JlYXRlSW5maW5pdHk7XG52YXIgY3JlYXRlTmFOID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCdOYU4nLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgY29uZmlnID0gX3JlZjIuY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZjIuQmlnTnVtYmVyO1xuICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyBuZXcgQmlnTnVtYmVyKE5hTikgOiBOYU47XG59KTtcbmV4cG9ydHMuY3JlYXRlTmFOID0gY3JlYXRlTmFOO1xudmFyIGNyZWF0ZVBpID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCdwaScsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWYzKSB7XG4gIHZhciBjb25maWcgPSBfcmVmMy5jb25maWcsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmMy5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/ICgwLCBfY29uc3RhbnRzLmNyZWF0ZUJpZ051bWJlclBpKShCaWdOdW1iZXIpIDogX251bWJlci5waTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVQaSA9IGNyZWF0ZVBpO1xudmFyIGNyZWF0ZVRhdSA9IC8qICNfX1BVUkVfXyAqL3JlY3JlYXRlRmFjdG9yeSgndGF1JywgWydjb25maWcnLCAnP0JpZ051bWJlciddLCBmdW5jdGlvbiAoX3JlZjQpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWY0LmNvbmZpZyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWY0LkJpZ051bWJlcjtcbiAgcmV0dXJuIGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInID8gKDAsIF9jb25zdGFudHMuY3JlYXRlQmlnTnVtYmVyVGF1KShCaWdOdW1iZXIpIDogX251bWJlci50YXU7XG59KTtcbmV4cG9ydHMuY3JlYXRlVGF1ID0gY3JlYXRlVGF1O1xudmFyIGNyZWF0ZUUgPSAvKiAjX19QVVJFX18gKi9yZWNyZWF0ZUZhY3RvcnkoJ2UnLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmNSkge1xuICB2YXIgY29uZmlnID0gX3JlZjUuY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZjUuQmlnTnVtYmVyO1xuICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyAoMCwgX2NvbnN0YW50cy5jcmVhdGVCaWdOdW1iZXJFKShCaWdOdW1iZXIpIDogX251bWJlci5lO1xufSk7IC8vIGdvbGRlbiByYXRpbywgKDErc3FydCg1KSkvMlxuXG5leHBvcnRzLmNyZWF0ZUUgPSBjcmVhdGVFO1xudmFyIGNyZWF0ZVBoaSA9IC8qICNfX1BVUkVfXyAqL3JlY3JlYXRlRmFjdG9yeSgncGhpJywgWydjb25maWcnLCAnP0JpZ051bWJlciddLCBmdW5jdGlvbiAoX3JlZjYpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWY2LmNvbmZpZyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWY2LkJpZ051bWJlcjtcbiAgcmV0dXJuIGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInID8gKDAsIF9jb25zdGFudHMuY3JlYXRlQmlnTnVtYmVyUGhpKShCaWdOdW1iZXIpIDogX251bWJlci5waGk7XG59KTtcbmV4cG9ydHMuY3JlYXRlUGhpID0gY3JlYXRlUGhpO1xudmFyIGNyZWF0ZUxOMiA9IC8qICNfX1BVUkVfXyAqL3JlY3JlYXRlRmFjdG9yeSgnTE4yJywgWydjb25maWcnLCAnP0JpZ051bWJlciddLCBmdW5jdGlvbiAoX3JlZjcpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWY3LmNvbmZpZyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWY3LkJpZ051bWJlcjtcbiAgcmV0dXJuIGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInID8gbmV3IEJpZ051bWJlcigyKS5sbigpIDogTWF0aC5MTjI7XG59KTtcbmV4cG9ydHMuY3JlYXRlTE4yID0gY3JlYXRlTE4yO1xudmFyIGNyZWF0ZUxOMTAgPSAvKiAjX19QVVJFX18gKi9yZWNyZWF0ZUZhY3RvcnkoJ0xOMTAnLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmOCkge1xuICB2YXIgY29uZmlnID0gX3JlZjguY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZjguQmlnTnVtYmVyO1xuICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyBuZXcgQmlnTnVtYmVyKDEwKS5sbigpIDogTWF0aC5MTjEwO1xufSk7XG5leHBvcnRzLmNyZWF0ZUxOMTAgPSBjcmVhdGVMTjEwO1xudmFyIGNyZWF0ZUxPRzJFID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCdMT0cyRScsIFsnY29uZmlnJywgJz9CaWdOdW1iZXInXSwgZnVuY3Rpb24gKF9yZWY5KSB7XG4gIHZhciBjb25maWcgPSBfcmVmOS5jb25maWcsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmOS5CaWdOdW1iZXI7XG4gIHJldHVybiBjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJyA/IG5ldyBCaWdOdW1iZXIoMSkuZGl2KG5ldyBCaWdOdW1iZXIoMikubG4oKSkgOiBNYXRoLkxPRzJFO1xufSk7XG5leHBvcnRzLmNyZWF0ZUxPRzJFID0gY3JlYXRlTE9HMkU7XG52YXIgY3JlYXRlTE9HMTBFID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCdMT0cxMEUnLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmMTApIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYxMC5jb25maWcsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmMTAuQmlnTnVtYmVyO1xuICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyBuZXcgQmlnTnVtYmVyKDEpLmRpdihuZXcgQmlnTnVtYmVyKDEwKS5sbigpKSA6IE1hdGguTE9HMTBFO1xufSk7XG5leHBvcnRzLmNyZWF0ZUxPRzEwRSA9IGNyZWF0ZUxPRzEwRTtcbnZhciBjcmVhdGVTUVJUMV8yID0gLyogI19fUFVSRV9fICovcmVjcmVhdGVGYWN0b3J5KCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGNhbWVsY2FzZVxuJ1NRUlQxXzInLCBbJ2NvbmZpZycsICc/QmlnTnVtYmVyJ10sIGZ1bmN0aW9uIChfcmVmMTEpIHtcbiAgdmFyIGNvbmZpZyA9IF9yZWYxMS5jb25maWcsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmMTEuQmlnTnVtYmVyO1xuICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyBuZXcgQmlnTnVtYmVyKCcwLjUnKS5zcXJ0KCkgOiBNYXRoLlNRUlQxXzI7XG59KTtcbmV4cG9ydHMuY3JlYXRlU1FSVDFfMiA9IGNyZWF0ZVNRUlQxXzI7XG52YXIgY3JlYXRlU1FSVDIgPSAvKiAjX19QVVJFX18gKi9yZWNyZWF0ZUZhY3RvcnkoJ1NRUlQyJywgWydjb25maWcnLCAnP0JpZ051bWJlciddLCBmdW5jdGlvbiAoX3JlZjEyKSB7XG4gIHZhciBjb25maWcgPSBfcmVmMTIuY29uZmlnLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZjEyLkJpZ051bWJlcjtcbiAgcmV0dXJuIGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInID8gbmV3IEJpZ051bWJlcigyKS5zcXJ0KCkgOiBNYXRoLlNRUlQyO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNRUlQyID0gY3JlYXRlU1FSVDI7XG52YXIgY3JlYXRlSSA9IC8qICNfX1BVUkVfXyAqL3JlY3JlYXRlRmFjdG9yeSgnaScsIFsnQ29tcGxleCddLCBmdW5jdGlvbiAoX3JlZjEzKSB7XG4gIHZhciBDb21wbGV4ID0gX3JlZjEzLkNvbXBsZXg7XG4gIHJldHVybiBDb21wbGV4Lkk7XG59KTsgLy8gZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCB2NVxuXG5leHBvcnRzLmNyZWF0ZUkgPSBjcmVhdGVJO1xudmFyIGNyZWF0ZVVwcGVyY2FzZVBpID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKCdQSScsIFsncGknXSwgZnVuY3Rpb24gKF9yZWYxNCkge1xuICB2YXIgcGkgPSBfcmVmMTQucGk7XG4gIHJldHVybiBwaTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVVcHBlcmNhc2VQaSA9IGNyZWF0ZVVwcGVyY2FzZVBpO1xudmFyIGNyZWF0ZVVwcGVyY2FzZUUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkoJ0UnLCBbJ2UnXSwgZnVuY3Rpb24gKF9yZWYxNSkge1xuICB2YXIgZSA9IF9yZWYxNS5lO1xuICByZXR1cm4gZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVVcHBlcmNhc2VFID0gY3JlYXRlVXBwZXJjYXNlRTtcbnZhciBjcmVhdGVWZXJzaW9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKCd2ZXJzaW9uJywgW10sIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIF92ZXJzaW9uLnZlcnNpb247XG59KTsgLy8gaGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIGZhY3Rvcnkgd2l0aCBhIGZsYWcgcmVjcmVhdGVPbkNvbmZpZ0NoYW5nZVxuLy8gaWRlYTogYWxsb3cgcGFzc2luZyBvcHRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBmYWN0b3J5IGZ1bmN0aW9uIGFzIDR0aCBhcmd1bWVudD9cblxuZXhwb3J0cy5jcmVhdGVWZXJzaW9uID0gY3JlYXRlVmVyc2lvbjtcblxuZnVuY3Rpb24gcmVjcmVhdGVGYWN0b3J5KG5hbWUsIGRlcGVuZGVuY2llcywgY3JlYXRlKSB7XG4gIHJldHVybiAoMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBjcmVhdGUsIHtcbiAgICByZWNyZWF0ZU9uQ29uZmlnQ2hhbmdlOiB0cnVlXG4gIH0pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ERUZBVUxUX0NPTkZJRyA9IHZvaWQgMDtcbnZhciBERUZBVUxUX0NPTkZJRyA9IHtcbiAgLy8gbWluaW11bSByZWxhdGl2ZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGNvbXBhcmVkIHZhbHVlcyxcbiAgLy8gdXNlZCBieSBhbGwgY29tcGFyaXNvbiBmdW5jdGlvbnNcbiAgZXBzaWxvbjogMWUtMTIsXG4gIC8vIHR5cGUgb2YgZGVmYXVsdCBtYXRyaXggb3V0cHV0LiBDaG9vc2UgJ21hdHJpeCcgKGRlZmF1bHQpIG9yICdhcnJheSdcbiAgbWF0cml4OiAnTWF0cml4JyxcbiAgLy8gdHlwZSBvZiBkZWZhdWx0IG51bWJlciBvdXRwdXQuIENob29zZSAnbnVtYmVyJyAoZGVmYXVsdCkgJ0JpZ051bWJlcicsIG9yICdGcmFjdGlvblxuICBudW1iZXI6ICdudW1iZXInLFxuICAvLyBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIGluIEJpZ051bWJlcnNcbiAgcHJlY2lzaW9uOiA2NCxcbiAgLy8gcHJlZGljdGFibGUgb3V0cHV0IHR5cGUgb2YgZnVuY3Rpb25zLiBXaGVuIHRydWUsIG91dHB1dCB0eXBlIGRlcGVuZHMgb25seVxuICAvLyBvbiB0aGUgaW5wdXQgdHlwZXMuIFdoZW4gZmFsc2UgKGRlZmF1bHQpLCBvdXRwdXQgdHlwZSBjYW4gdmFyeSBkZXBlbmRpbmdcbiAgLy8gb24gaW5wdXQgdmFsdWVzLiBGb3IgZXhhbXBsZSBgbWF0aC5zcXJ0KC00KWAgcmV0dXJucyBgY29tcGxleCgnMmknKWAgd2hlblxuICAvLyBwcmVkaWN0YWJsZSBpcyBmYWxzZSwgYW5kIHJldHVybnMgYE5hTmAgd2hlbiB0cnVlLlxuICBwcmVkaWN0YWJsZTogZmFsc2UsXG4gIC8vIHJhbmRvbSBzZWVkIGZvciBzZWVkZWQgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvblxuICAvLyBudWxsID0gcmFuZG9tbHkgc2VlZFxuICByYW5kb21TZWVkOiBudWxsXG59O1xuZXhwb3J0cy5ERUZBVUxUX0NPTkZJRyA9IERFRkFVTFRfQ09ORklHOyIsIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZSA9IGNyZWF0ZTtcblxucmVxdWlyZShcIi4vLi4vdXRpbHMvcG9seWZpbGxzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIGVtaXR0ZXIgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi8uLi91dGlscy9lbWl0dGVyXCIpKTtcblxudmFyIF9pbXBvcnQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9pbXBvcnRcIik7XG5cbnZhciBfY29uZmlnID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29uZmlnXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9sb2cgPSByZXF1aXJlKFwiLi4vdXRpbHMvbG9nXCIpO1xuXG52YXIgX0FyZ3VtZW50c0Vycm9yID0gcmVxdWlyZShcIi4uL2Vycm9yL0FyZ3VtZW50c0Vycm9yXCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgX0luZGV4RXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvSW5kZXhFcnJvclwiKTtcblxudmFyIF9jb25maWcyID0gcmVxdWlyZShcIi4vY29uZmlnXCIpO1xuXG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoKSB7IGlmICh0eXBlb2YgV2Vha01hcCAhPT0gXCJmdW5jdGlvblwiKSByZXR1cm4gbnVsbDsgdmFyIGNhY2hlID0gbmV3IFdlYWtNYXAoKTsgX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlID0gZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKCkgeyByZXR1cm4gY2FjaGU7IH07IHJldHVybiBjYWNoZTsgfVxuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChvYmopIHsgaWYgKG9iaiAmJiBvYmouX19lc01vZHVsZSkgeyByZXR1cm4gb2JqOyB9IGlmIChvYmogPT09IG51bGwgfHwgX3R5cGVvZihvYmopICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBvYmogIT09IFwiZnVuY3Rpb25cIikgeyByZXR1cm4geyBcImRlZmF1bHRcIjogb2JqIH07IH0gdmFyIGNhY2hlID0gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKCk7IGlmIChjYWNoZSAmJiBjYWNoZS5oYXMob2JqKSkgeyByZXR1cm4gY2FjaGUuZ2V0KG9iaik7IH0gdmFyIG5ld09iaiA9IHt9OyB2YXIgaGFzUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIGtleSBpbiBvYmopIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIGtleSkpIHsgdmFyIGRlc2MgPSBoYXNQcm9wZXJ0eURlc2NyaXB0b3IgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwga2V5KSA6IG51bGw7IGlmIChkZXNjICYmIChkZXNjLmdldCB8fCBkZXNjLnNldCkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG5ld09iaiwga2V5LCBkZXNjKTsgfSBlbHNlIHsgbmV3T2JqW2tleV0gPSBvYmpba2V5XTsgfSB9IH0gbmV3T2JqW1wiZGVmYXVsdFwiXSA9IG9iajsgaWYgKGNhY2hlKSB7IGNhY2hlLnNldChvYmosIG5ld09iaik7IH0gcmV0dXJuIG5ld09iajsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG4vKipcbiAqIENyZWF0ZSBhIG1hdGhqcyBpbnN0YW5jZSBmcm9tIGdpdmVuIGZhY3RvcnkgZnVuY3Rpb25zIGFuZCBvcHRpb25hbGx5IGNvbmZpZ1xuICpcbiAqIFVzYWdlOlxuICpcbiAqICAgICBjb25zdCBtYXRoanMxID0gY3JlYXRlKHsgY3JlYXRlQWRkLCBjcmVhdGVNdWx0aXBseSwgLi4ufSlcbiAqICAgICBjb25zdCBjb25maWcgPSB7IG51bWJlcjogJ0JpZ051bWJlcicgfVxuICogICAgIGNvbnN0IG1hdGhqczIgPSBjcmVhdGUoYWxsLCBjb25maWcpXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtmYWN0b3JpZXNdIEFuIG9iamVjdCB3aXRoIGZhY3RvcnkgZnVuY3Rpb25zXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG9iamVjdCBjYW4gY29udGFpbiBuZXN0ZWQgb2JqZWN0cyxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGwgbmVzdGVkIG9iamVjdHMgd2lsbCBiZSBmbGF0dGVuZWQuXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbmZpZ10gICAgQXZhaWxhYmxlIG9wdGlvbnM6XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bnVtYmVyfSBlcHNpbG9uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1pbmltdW0gcmVsYXRpdmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3b1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXJlZCB2YWx1ZXMsIHVzZWQgYnkgYWxsIGNvbXBhcmlzb24gZnVuY3Rpb25zLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gbWF0cml4XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgc3RyaW5nICdNYXRyaXgnIChkZWZhdWx0KSBvciAnQXJyYXknLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gbnVtYmVyXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgc3RyaW5nICdudW1iZXInIChkZWZhdWx0KSwgJ0JpZ051bWJlcicsIG9yICdGcmFjdGlvbidcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IHByZWNpc2lvblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyBmb3IgQmlnTnVtYmVycy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90IGFwcGxpY2FibGUgZm9yIE51bWJlcnMuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7Ym9vbGVhbn0gcHJlZGljdGFibGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlZGljdGFibGUgb3V0cHV0IHR5cGUgb2YgZnVuY3Rpb25zLiBXaGVuIHRydWUsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dCB0eXBlIGRlcGVuZHMgb25seSBvbiB0aGUgaW5wdXQgdHlwZXMuIFdoZW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UgKGRlZmF1bHQpLCBvdXRwdXQgdHlwZSBjYW4gdmFyeSBkZXBlbmRpbmdcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gaW5wdXQgdmFsdWVzLiBGb3IgZXhhbXBsZSBgbWF0aC5zcXJ0KC00KWBcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJucyBgY29tcGxleCgnMmknKWAgd2hlbiBwcmVkaWN0YWJsZSBpcyBmYWxzZSwgYW5kXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybnMgYE5hTmAgd2hlbiB0cnVlLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gcmFuZG9tU2VlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSYW5kb20gc2VlZCBmb3Igc2VlZGVkIHBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRvci5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHRvIG51bGwgdG8gcmFuZG9tbHkgc2VlZC5cbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYSBiYXJlLWJvbmUgbWF0aC5qcyBpbnN0YW5jZSBjb250YWluaW5nXG4gKiAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnM6XG4gKiAgICAgICAgICAgICAgICAgICAtIGBpbXBvcnRgIHRvIGFkZCBuZXcgZnVuY3Rpb25zXG4gKiAgICAgICAgICAgICAgICAgICAtIGBjb25maWdgIHRvIGNoYW5nZSBjb25maWd1cmF0aW9uXG4gKiAgICAgICAgICAgICAgICAgICAtIGBvbmAsIGBvZmZgLCBgb25jZWAsIGBlbWl0YCBmb3IgZXZlbnRzXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZShmYWN0b3JpZXMsIGNvbmZpZykge1xuICB2YXIgY29uZmlnSW50ZXJuYWwgPSBfZXh0ZW5kcyh7fSwgX2NvbmZpZzIuREVGQVVMVF9DT05GSUcsIGNvbmZpZyk7IC8vIHNpbXBsZSB0ZXN0IGZvciBFUzUgc3VwcG9ydFxuXG5cbiAgaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFUzUgbm90IHN1cHBvcnRlZCBieSB0aGlzIEphdmFTY3JpcHQgZW5naW5lLiAnICsgJ1BsZWFzZSBsb2FkIHRoZSBlczUtc2hpbSBhbmQgZXM1LXNoYW0gbGlicmFyeSBmb3IgY29tcGF0aWJpbGl0eS4nKTtcbiAgfSAvLyBjcmVhdGUgdGhlIG1hdGhqcyBpbnN0YW5jZVxuXG5cbiAgdmFyIG1hdGggPSBlbWl0dGVyLm1peGluKHtcbiAgICAvLyBvbmx5IGhlcmUgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgZm9yIGxlZ2FjeSBmYWN0b3J5IGZ1bmN0aW9uc1xuICAgIGlzTnVtYmVyOiBfaXMuaXNOdW1iZXIsXG4gICAgaXNDb21wbGV4OiBfaXMuaXNDb21wbGV4LFxuICAgIGlzQmlnTnVtYmVyOiBfaXMuaXNCaWdOdW1iZXIsXG4gICAgaXNGcmFjdGlvbjogX2lzLmlzRnJhY3Rpb24sXG4gICAgaXNVbml0OiBfaXMuaXNVbml0LFxuICAgIGlzU3RyaW5nOiBfaXMuaXNTdHJpbmcsXG4gICAgaXNBcnJheTogX2lzLmlzQXJyYXksXG4gICAgaXNNYXRyaXg6IF9pcy5pc01hdHJpeCxcbiAgICBpc0NvbGxlY3Rpb246IF9pcy5pc0NvbGxlY3Rpb24sXG4gICAgaXNEZW5zZU1hdHJpeDogX2lzLmlzRGVuc2VNYXRyaXgsXG4gICAgaXNTcGFyc2VNYXRyaXg6IF9pcy5pc1NwYXJzZU1hdHJpeCxcbiAgICBpc1JhbmdlOiBfaXMuaXNSYW5nZSxcbiAgICBpc0luZGV4OiBfaXMuaXNJbmRleCxcbiAgICBpc0Jvb2xlYW46IF9pcy5pc0Jvb2xlYW4sXG4gICAgaXNSZXN1bHRTZXQ6IF9pcy5pc1Jlc3VsdFNldCxcbiAgICBpc0hlbHA6IF9pcy5pc0hlbHAsXG4gICAgaXNGdW5jdGlvbjogX2lzLmlzRnVuY3Rpb24sXG4gICAgaXNEYXRlOiBfaXMuaXNEYXRlLFxuICAgIGlzUmVnRXhwOiBfaXMuaXNSZWdFeHAsXG4gICAgaXNPYmplY3Q6IF9pcy5pc09iamVjdCxcbiAgICBpc051bGw6IF9pcy5pc051bGwsXG4gICAgaXNVbmRlZmluZWQ6IF9pcy5pc1VuZGVmaW5lZCxcbiAgICBpc0FjY2Vzc29yTm9kZTogX2lzLmlzQWNjZXNzb3JOb2RlLFxuICAgIGlzQXJyYXlOb2RlOiBfaXMuaXNBcnJheU5vZGUsXG4gICAgaXNBc3NpZ25tZW50Tm9kZTogX2lzLmlzQXNzaWdubWVudE5vZGUsXG4gICAgaXNCbG9ja05vZGU6IF9pcy5pc0Jsb2NrTm9kZSxcbiAgICBpc0NvbmRpdGlvbmFsTm9kZTogX2lzLmlzQ29uZGl0aW9uYWxOb2RlLFxuICAgIGlzQ29uc3RhbnROb2RlOiBfaXMuaXNDb25zdGFudE5vZGUsXG4gICAgaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlOiBfaXMuaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlLFxuICAgIGlzRnVuY3Rpb25Ob2RlOiBfaXMuaXNGdW5jdGlvbk5vZGUsXG4gICAgaXNJbmRleE5vZGU6IF9pcy5pc0luZGV4Tm9kZSxcbiAgICBpc05vZGU6IF9pcy5pc05vZGUsXG4gICAgaXNPYmplY3ROb2RlOiBfaXMuaXNPYmplY3ROb2RlLFxuICAgIGlzT3BlcmF0b3JOb2RlOiBfaXMuaXNPcGVyYXRvck5vZGUsXG4gICAgaXNQYXJlbnRoZXNpc05vZGU6IF9pcy5pc1BhcmVudGhlc2lzTm9kZSxcbiAgICBpc1JhbmdlTm9kZTogX2lzLmlzUmFuZ2VOb2RlLFxuICAgIGlzU3ltYm9sTm9kZTogX2lzLmlzU3ltYm9sTm9kZSxcbiAgICBpc0NoYWluOiBfaXMuaXNDaGFpblxuICB9KTsgLy8gbG9hZCBjb25maWcgZnVuY3Rpb24gYW5kIGFwcGx5IHByb3ZpZGVkIGNvbmZpZ1xuXG4gIG1hdGguY29uZmlnID0gKDAsIF9jb25maWcuY29uZmlnRmFjdG9yeSkoY29uZmlnSW50ZXJuYWwsIG1hdGguZW1pdCk7XG4gIG1hdGguZXhwcmVzc2lvbiA9IHtcbiAgICB0cmFuc2Zvcm06IHt9LFxuICAgIG1hdGhXaXRoVHJhbnNmb3JtOiB7XG4gICAgICBjb25maWc6IG1hdGguY29uZmlnXG4gICAgfVxuICB9OyAvLyBjYWNoZWQgZmFjdG9yaWVzIGFuZCBpbnN0YW5jZXMgdXNlZCBieSBmdW5jdGlvbiBsb2FkXG5cbiAgdmFyIGxlZ2FjeUZhY3RvcmllcyA9IFtdO1xuICB2YXIgbGVnYWN5SW5zdGFuY2VzID0gW107XG4gIC8qKlxuICAgKiBMb2FkIGEgZnVuY3Rpb24gb3IgZGF0YSB0eXBlIGZyb20gYSBmYWN0b3J5LlxuICAgKiBJZiB0aGUgZnVuY3Rpb24gb3IgZGF0YSB0eXBlIGFscmVhZHkgZXhpc3RzLCB0aGUgZXhpc3RpbmcgaW5zdGFuY2UgaXNcbiAgICogcmV0dXJuZWQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZhY3RvcnlcbiAgICogQHJldHVybnMgeyp9XG4gICAqL1xuXG4gIGZ1bmN0aW9uIGxvYWQoZmFjdG9yeSkge1xuICAgIGlmICgoMCwgX2ZhY3RvcnkuaXNGYWN0b3J5KShmYWN0b3J5KSkge1xuICAgICAgcmV0dXJuIGZhY3RvcnkobWF0aCk7XG4gICAgfVxuXG4gICAgdmFyIGZpcnN0UHJvcGVydHkgPSBmYWN0b3J5W09iamVjdC5rZXlzKGZhY3RvcnkpWzBdXTtcblxuICAgIGlmICgoMCwgX2ZhY3RvcnkuaXNGYWN0b3J5KShmaXJzdFByb3BlcnR5KSkge1xuICAgICAgcmV0dXJuIGZpcnN0UHJvcGVydHkobWF0aCk7XG4gICAgfVxuXG4gICAgaWYgKCEoMCwgX29iamVjdC5pc0xlZ2FjeUZhY3RvcnkpKGZhY3RvcnkpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0ZhY3Rvcnkgb2JqZWN0IHdpdGggcHJvcGVydGllcyBgdHlwZWAsIGBuYW1lYCwgYW5kIGBmYWN0b3J5YCBleHBlY3RlZCcsIGZhY3RvcnkpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWN0b3J5IG9iamVjdCB3aXRoIHByb3BlcnRpZXMgYHR5cGVgLCBgbmFtZWAsIGFuZCBgZmFjdG9yeWAgZXhwZWN0ZWQnKTtcbiAgICB9XG5cbiAgICB2YXIgaW5kZXggPSBsZWdhY3lGYWN0b3JpZXMuaW5kZXhPZihmYWN0b3J5KTtcbiAgICB2YXIgaW5zdGFuY2U7XG5cbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICAvLyBkb2Vzbid0IHlldCBleGlzdFxuICAgICAgaWYgKGZhY3RvcnkubWF0aCA9PT0gdHJ1ZSkge1xuICAgICAgICAvLyBwYXNzIHdpdGggbWF0aCBuYW1lc3BhY2VcbiAgICAgICAgaW5zdGFuY2UgPSBmYWN0b3J5LmZhY3RvcnkobWF0aC50eXBlLCBjb25maWdJbnRlcm5hbCwgbG9hZCwgbWF0aC50eXBlZCwgbWF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnN0YW5jZSA9IGZhY3RvcnkuZmFjdG9yeShtYXRoLnR5cGUsIGNvbmZpZ0ludGVybmFsLCBsb2FkLCBtYXRoLnR5cGVkKTtcbiAgICAgIH0gLy8gYXBwZW5kIHRvIHRoZSBjYWNoZVxuXG5cbiAgICAgIGxlZ2FjeUZhY3Rvcmllcy5wdXNoKGZhY3RvcnkpO1xuICAgICAgbGVnYWN5SW5zdGFuY2VzLnB1c2goaW5zdGFuY2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhbHJlYWR5IGV4aXN0aW5nIGZ1bmN0aW9uLCByZXR1cm4gdGhlIGNhY2hlZCBpbnN0YW5jZVxuICAgICAgaW5zdGFuY2UgPSBsZWdhY3lJbnN0YW5jZXNbaW5kZXhdO1xuICAgIH1cblxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfVxuXG4gIHZhciBpbXBvcnRlZEZhY3RvcmllcyA9IHt9OyAvLyBsb2FkIHRoZSBpbXBvcnQgZnVuY3Rpb25cblxuICBmdW5jdGlvbiBsYXp5VHlwZWQoKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBtYXRoLnR5cGVkLmFwcGx5KG1hdGgudHlwZWQsIGFyZ3MpO1xuICB9XG5cbiAgdmFyIGludGVybmFsSW1wb3J0ID0gKDAsIF9pbXBvcnQuaW1wb3J0RmFjdG9yeSkobGF6eVR5cGVkLCBsb2FkLCBtYXRoLCBpbXBvcnRlZEZhY3Rvcmllcyk7XG4gIG1hdGhbXCJpbXBvcnRcIl0gPSBpbnRlcm5hbEltcG9ydDsgLy8gbGlzdGVuIGZvciBjaGFuZ2VzIGluIGNvbmZpZywgaW1wb3J0IGFsbCBmdW5jdGlvbnMgYWdhaW4gd2hlbiBjaGFuZ2VkXG4gIC8vIFRPRE86IG1vdmUgdGhpcyBsaXN0ZW5lciBpbnRvIHRoZSBpbXBvcnQgZnVuY3Rpb24/XG5cbiAgbWF0aC5vbignY29uZmlnJywgZnVuY3Rpb24gKCkge1xuICAgICgwLCBfb2JqZWN0LnZhbHVlcykoaW1wb3J0ZWRGYWN0b3JpZXMpLmZvckVhY2goZnVuY3Rpb24gKGZhY3RvcnkpIHtcbiAgICAgIGlmIChmYWN0b3J5ICYmIGZhY3RvcnkubWV0YSAmJiBmYWN0b3J5Lm1ldGEucmVjcmVhdGVPbkNvbmZpZ0NoYW5nZSkge1xuICAgICAgICAvLyBGSVhNRTogb25seSByZS1jcmVhdGUgd2hlbiB0aGUgY3VycmVudCBpbnN0YW5jZSBpcyB0aGUgc2FtZSBhcyB3YXMgaW5pdGlhbGx5IGNyZWF0ZWRcbiAgICAgICAgLy8gRklYTUU6IGRlbGV0ZSB0aGUgZnVuY3Rpb25zL2NvbnN0YW50cyBiZWZvcmUgaW1wb3J0aW5nIHRoZW0gYWdhaW4/XG4gICAgICAgIGludGVybmFsSW1wb3J0KGZhY3RvcnksIHtcbiAgICAgICAgICBvdmVycmlkZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7IC8vIHRoZSBjcmVhdGUgZnVuY3Rpb24gZXhwb3NlZCBvbiB0aGUgbWF0aGpzIGluc3RhbmNlIGlzIGJvdW5kIHRvXG4gIC8vIHRoZSBmYWN0b3J5IGZ1bmN0aW9ucyBwYXNzZWQgYmVmb3JlXG5cbiAgbWF0aC5jcmVhdGUgPSBjcmVhdGUuYmluZChudWxsLCBmYWN0b3JpZXMpOyAvLyBleHBvcnQgZmFjdG9yeSBmdW5jdGlvblxuXG4gIG1hdGguZmFjdG9yeSA9IF9mYWN0b3J5LmZhY3Rvcnk7IC8vIGltcG9ydCB0aGUgZmFjdG9yeSBmdW5jdGlvbnMgbGlrZSBjcmVhdGVBZGQgYXMgYW4gYXJyYXkgaW5zdGVhZCBvZiBvYmplY3QsXG4gIC8vIGVsc2UgdGhleSB3aWxsIGdldCBhIGRpZmZlcmVudCBuYW1pbmcgKGBjcmVhdGVBZGRgIGluc3RlYWQgb2YgYGFkZGApLlxuXG4gIG1hdGhbXCJpbXBvcnRcIl0oKDAsIF9vYmplY3QudmFsdWVzKSgoMCwgX29iamVjdC5kZWVwRmxhdHRlbikoZmFjdG9yaWVzKSkpOyAvLyBUT0RPOiBkZXByZWNhdGVkIHNpbmNlIHY2LjAuMC4gQ2xlYW4gdXAgc29tZSBkYXlcblxuICB2YXIgbW92ZWROYW1lcyA9IFsndHlwZS5pc051bWJlcicsICd0eXBlLmlzQ29tcGxleCcsICd0eXBlLmlzQmlnTnVtYmVyJywgJ3R5cGUuaXNGcmFjdGlvbicsICd0eXBlLmlzVW5pdCcsICd0eXBlLmlzU3RyaW5nJywgJ3R5cGUuaXNBcnJheScsICd0eXBlLmlzTWF0cml4JywgJ3R5cGUuaXNEZW5zZU1hdHJpeCcsICd0eXBlLmlzU3BhcnNlTWF0cml4JywgJ3R5cGUuaXNDb2xsZWN0aW9uJywgJ3R5cGUuaXNSYW5nZScsICd0eXBlLmlzSW5kZXgnLCAndHlwZS5pc0Jvb2xlYW4nLCAndHlwZS5pc1Jlc3VsdFNldCcsICd0eXBlLmlzSGVscCcsICd0eXBlLmlzRnVuY3Rpb24nLCAndHlwZS5pc0RhdGUnLCAndHlwZS5pc1JlZ0V4cCcsICd0eXBlLmlzT2JqZWN0JywgJ3R5cGUuaXNOdWxsJywgJ3R5cGUuaXNVbmRlZmluZWQnLCAndHlwZS5pc0FjY2Vzc29yTm9kZScsICd0eXBlLmlzQXJyYXlOb2RlJywgJ3R5cGUuaXNBc3NpZ25tZW50Tm9kZScsICd0eXBlLmlzQmxvY2tOb2RlJywgJ3R5cGUuaXNDb25kaXRpb25hbE5vZGUnLCAndHlwZS5pc0NvbnN0YW50Tm9kZScsICd0eXBlLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZScsICd0eXBlLmlzRnVuY3Rpb25Ob2RlJywgJ3R5cGUuaXNJbmRleE5vZGUnLCAndHlwZS5pc05vZGUnLCAndHlwZS5pc09iamVjdE5vZGUnLCAndHlwZS5pc09wZXJhdG9yTm9kZScsICd0eXBlLmlzUGFyZW50aGVzaXNOb2RlJywgJ3R5cGUuaXNSYW5nZU5vZGUnLCAndHlwZS5pc1N5bWJvbE5vZGUnLCAndHlwZS5pc0NoYWluJywgJ3R5cGUuQmlnTnVtYmVyJywgJ3R5cGUuQ2hhaW4nLCAndHlwZS5Db21wbGV4JywgJ3R5cGUuRnJhY3Rpb24nLCAndHlwZS5NYXRyaXgnLCAndHlwZS5EZW5zZU1hdHJpeCcsICd0eXBlLlNwYXJzZU1hdHJpeCcsICd0eXBlLlNwYScsICd0eXBlLkZpYm9uYWNjaUhlYXAnLCAndHlwZS5JbW11dGFibGVEZW5zZU1hdHJpeCcsICd0eXBlLkluZGV4JywgJ3R5cGUuUmFuZ2UnLCAndHlwZS5SZXN1bHRTZXQnLCAndHlwZS5Vbml0JywgJ3R5cGUuSGVscCcsICd0eXBlLlBhcnNlcicsICdleHByZXNzaW9uLnBhcnNlJywgJ2V4cHJlc3Npb24uUGFyc2VyJywgJ2V4cHJlc3Npb24ubm9kZS5BY2Nlc3Nvck5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLkFycmF5Tm9kZScsICdleHByZXNzaW9uLm5vZGUuQXNzaWdubWVudE5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLkJsb2NrTm9kZScsICdleHByZXNzaW9uLm5vZGUuQ29uZGl0aW9uYWxOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5Db25zdGFudE5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLkluZGV4Tm9kZScsICdleHByZXNzaW9uLm5vZGUuRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZScsICdleHByZXNzaW9uLm5vZGUuRnVuY3Rpb25Ob2RlJywgJ2V4cHJlc3Npb24ubm9kZS5Ob2RlJywgJ2V4cHJlc3Npb24ubm9kZS5PYmplY3ROb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5PcGVyYXRvck5vZGUnLCAnZXhwcmVzc2lvbi5ub2RlLlBhcmVudGhlc2lzTm9kZScsICdleHByZXNzaW9uLm5vZGUuUmFuZ2VOb2RlJywgJ2V4cHJlc3Npb24ubm9kZS5SZWxhdGlvbmFsTm9kZScsICdleHByZXNzaW9uLm5vZGUuU3ltYm9sTm9kZScsICdqc29uLnJldml2ZXInLCAnZXJyb3IuQXJndW1lbnRzRXJyb3InLCAnZXJyb3IuRGltZW5zaW9uRXJyb3InLCAnZXJyb3IuSW5kZXhFcnJvciddO1xuICBtb3ZlZE5hbWVzLmZvckVhY2goZnVuY3Rpb24gKGZ1bGxOYW1lKSB7XG4gICAgdmFyIHBhcnRzID0gZnVsbE5hbWUuc3BsaXQoJy4nKTtcbiAgICB2YXIgcGF0aCA9ICgwLCBfYXJyYXkuaW5pdGlhbCkocGFydHMpO1xuICAgIHZhciBuYW1lID0gKDAsIF9hcnJheS5sYXN0KShwYXJ0cyk7XG4gICAgdmFyIG9iaiA9ICgwLCBfb2JqZWN0LnRyYXZlcnNlKShtYXRoLCBwYXRoKTtcbiAgICAoMCwgX29iamVjdC5sYXp5KShvYmosIG5hbWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICgwLCBfbG9nLndhcm5PbmNlKShcIm1hdGguXCIuY29uY2F0KGZ1bGxOYW1lLCBcIiBpcyBtb3ZlZCB0byBtYXRoLlwiKS5jb25jYXQobmFtZSwgXCIgaW4gdjYuMC4wLiBcIikgKyAnUGxlYXNlIHVzZSB0aGUgbmV3IGxvY2F0aW9uIGluc3RlYWQuJyk7XG4gICAgICByZXR1cm4gbWF0aFtuYW1lXTtcbiAgICB9KTtcbiAgfSk7XG4gICgwLCBfb2JqZWN0LmxhenkpKG1hdGguZXhwcmVzc2lvbiwgJ2RvY3MnLCBmdW5jdGlvbiAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdtYXRoLmV4cHJlc3Npb24uZG9jcyBoYXMgYmVlbiBtb3ZlZC4gJyArICdQbGVhc2UgaW1wb3J0IHZpYSBcImltcG9ydCB7IGRvY3MgfSBmcm9tIFxcJ21hdGhqc1xcJ1wiJyk7XG4gIH0pO1xuICBtYXRoLkFyZ3VtZW50c0Vycm9yID0gX0FyZ3VtZW50c0Vycm9yLkFyZ3VtZW50c0Vycm9yO1xuICBtYXRoLkRpbWVuc2lvbkVycm9yID0gX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yO1xuICBtYXRoLkluZGV4RXJyb3IgPSBfSW5kZXhFcnJvci5JbmRleEVycm9yO1xuICByZXR1cm4gbWF0aDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29uZmlnRmFjdG9yeSA9IGNvbmZpZ0ZhY3Rvcnk7XG5leHBvcnRzLk5VTUJFUl9PUFRJT05TID0gZXhwb3J0cy5NQVRSSVhfT1BUSU9OUyA9IHZvaWQgMDtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2NvbmZpZzIgPSByZXF1aXJlKFwiLi4vY29uZmlnXCIpO1xuXG52YXIgTUFUUklYX09QVElPTlMgPSBbJ01hdHJpeCcsICdBcnJheSddOyAvLyB2YWxpZCB2YWx1ZXMgZm9yIG9wdGlvbiBtYXRyaXhcblxuZXhwb3J0cy5NQVRSSVhfT1BUSU9OUyA9IE1BVFJJWF9PUFRJT05TO1xudmFyIE5VTUJFUl9PUFRJT05TID0gWydudW1iZXInLCAnQmlnTnVtYmVyJywgJ0ZyYWN0aW9uJ107IC8vIHZhbGlkIHZhbHVlcyBmb3Igb3B0aW9uIG51bWJlclxuXG5leHBvcnRzLk5VTUJFUl9PUFRJT05TID0gTlVNQkVSX09QVElPTlM7XG5cbmZ1bmN0aW9uIGNvbmZpZ0ZhY3RvcnkoY29uZmlnLCBlbWl0KSB7XG4gIC8qKlxuICAgKiBTZXQgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBtYXRoLmpzLCBhbmQgZ2V0IGN1cnJlbnQgb3B0aW9ucy5cbiAgICogV2lsbCBlbWl0IGEgJ2NvbmZpZycgZXZlbnQsIHdpdGggYXJndW1lbnRzIChjdXJyLCBwcmV2LCBjaGFuZ2VzKS5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBvbiBhIG1hdGhqcyBpbnN0YW5jZSBjcmVhdGVkIHVzaW5nIGBjcmVhdGVgLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmNvbmZpZyhjb25maWc6IE9iamVjdCk6IE9iamVjdFxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICpcbiAgICogICAgIGltcG9ydCB7IGNyZWF0ZSwgYWxsIH0gZnJvbSAnbWF0aGpzJ1xuICAgKlxuICAgKiAgICAgLy8gY3JlYXRlIGEgbWF0aGpzIGluc3RhbmNlXG4gICAqICAgICBjb25zdCBtYXRoID0gY3JlYXRlKGFsbClcbiAgICpcbiAgICogICAgIG1hdGguY29uZmlnKCkubnVtYmVyICAgICAgICAgICAgICAgIC8vIG91dHB1dHMgJ251bWJlcidcbiAgICogICAgIG1hdGguZXZhbHVhdGUoJzAuNCcpICAgICAgICAgICAgICAgIC8vIG91dHB1dHMgbnVtYmVyIDAuNFxuICAgKiAgICAgbWF0aC5jb25maWcoe251bWJlcjogJ0ZyYWN0aW9uJ30pXG4gICAqICAgICBtYXRoLmV2YWx1YXRlKCcwLjQnKSAgICAgICAgICAgICAgICAvLyBvdXRwdXRzIEZyYWN0aW9uIDIvNVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIEF2YWlsYWJsZSBvcHRpb25zOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7bnVtYmVyfSBlcHNpbG9uXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWluaW11bSByZWxhdGl2ZSBkaWZmZXJlbmNlIGJldHdlZW4gdHdvXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyZWQgdmFsdWVzLCB1c2VkIGJ5IGFsbCBjb21wYXJpc29uIGZ1bmN0aW9ucy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gbWF0cml4XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQSBzdHJpbmcgJ01hdHJpeCcgKGRlZmF1bHQpIG9yICdBcnJheScuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHJpbmd9IG51bWJlclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgc3RyaW5nICdudW1iZXInIChkZWZhdWx0KSwgJ0JpZ051bWJlcicsIG9yICdGcmFjdGlvbidcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAge251bWJlcn0gcHJlY2lzaW9uXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgZm9yIEJpZ051bWJlcnMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90IGFwcGxpY2FibGUgZm9yIE51bWJlcnMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtzdHJpbmd9IHBhcmVudGhlc2lzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSG93IHRvIGRpc3BsYXkgcGFyZW50aGVzZXMgaW4gTGFUZVggYW5kIHN0cmluZ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gcmFuZG9tU2VlZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJhbmRvbSBzZWVkIGZvciBzZWVkZWQgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldCB0byBudWxsIHRvIHJhbmRvbWx5IHNlZWQuXG4gICAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBmdW5jdGlvbiBfY29uZmlnKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgdmFyIHByZXYgPSAoMCwgX29iamVjdC5tYXBPYmplY3QpKGNvbmZpZywgX29iamVjdC5jbG9uZSk7IC8vIHZhbGlkYXRlIHNvbWUgb2YgdGhlIG9wdGlvbnNcblxuICAgICAgdmFsaWRhdGVPcHRpb24ob3B0aW9ucywgJ21hdHJpeCcsIE1BVFJJWF9PUFRJT05TKTtcbiAgICAgIHZhbGlkYXRlT3B0aW9uKG9wdGlvbnMsICdudW1iZXInLCBOVU1CRVJfT1BUSU9OUyk7IC8vIG1lcmdlIG9wdGlvbnNcblxuICAgICAgKDAsIF9vYmplY3QuZGVlcEV4dGVuZCkoY29uZmlnLCBvcHRpb25zKTtcbiAgICAgIHZhciBjdXJyID0gKDAsIF9vYmplY3QubWFwT2JqZWN0KShjb25maWcsIF9vYmplY3QuY2xvbmUpO1xuICAgICAgdmFyIGNoYW5nZXMgPSAoMCwgX29iamVjdC5tYXBPYmplY3QpKG9wdGlvbnMsIF9vYmplY3QuY2xvbmUpOyAvLyBlbWl0ICdjb25maWcnIGV2ZW50XG5cbiAgICAgIGVtaXQoJ2NvbmZpZycsIGN1cnIsIHByZXYsIGNoYW5nZXMpO1xuICAgICAgcmV0dXJuIGN1cnI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoMCwgX29iamVjdC5tYXBPYmplY3QpKGNvbmZpZywgX29iamVjdC5jbG9uZSk7XG4gICAgfVxuICB9IC8vIGF0dGFjaCB0aGUgdmFsaWQgb3B0aW9ucyB0byB0aGUgZnVuY3Rpb24gc28gdGhleSBjYW4gYmUgZXh0ZW5kZWRcblxuXG4gIF9jb25maWcuTUFUUklYX09QVElPTlMgPSBNQVRSSVhfT1BUSU9OUztcbiAgX2NvbmZpZy5OVU1CRVJfT1BUSU9OUyA9IE5VTUJFUl9PUFRJT05TOyAvLyBhdHRhY2ggdGhlIGNvbmZpZyBwcm9wZXJ0aWVzIGFzIHJlYWRvbmx5IHByb3BlcnRpZXMgdG8gdGhlIGNvbmZpZyBmdW5jdGlvblxuXG4gIE9iamVjdC5rZXlzKF9jb25maWcyLkRFRkFVTFRfQ09ORklHKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NvbmZpZywga2V5LCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGNvbmZpZ1trZXldO1xuICAgICAgfSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBfY29uZmlnO1xufVxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgYW4gQXJyYXkgY29udGFpbnMgYSBzcGVjaWZpYyBpdGVtLlxuICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gYXJyYXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBpdGVtXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5cblxuZnVuY3Rpb24gY29udGFpbnMoYXJyYXksIGl0ZW0pIHtcbiAgcmV0dXJuIGFycmF5LmluZGV4T2YoaXRlbSkgIT09IC0xO1xufVxuLyoqXG4gKiBGaW5kIGEgc3RyaW5nIGluIGFuIGFycmF5LiBDYXNlIGluc2Vuc2l0aXZlIHNlYXJjaFxuICogQHBhcmFtIHtBcnJheS48c3RyaW5nPn0gYXJyYXlcbiAqIEBwYXJhbSB7c3RyaW5nfSBpdGVtXG4gKiBAcmV0dXJuIHtudW1iZXJ9IFJldHVybnMgdGhlIGluZGV4IHdoZW4gZm91bmQuIFJldHVybnMgLTEgd2hlbiBub3QgZm91bmRcbiAqL1xuXG5cbmZ1bmN0aW9uIGZpbmRJbmRleChhcnJheSwgaXRlbSkge1xuICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uIChpKSB7XG4gICAgcmV0dXJuIGkudG9Mb3dlckNhc2UoKTtcbiAgfSkuaW5kZXhPZihpdGVtLnRvTG93ZXJDYXNlKCkpO1xufVxuLyoqXG4gKiBWYWxpZGF0ZSBhbiBvcHRpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zICAgICAgICAgT2JqZWN0IHdpdGggb3B0aW9uc1xuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgICAgICAgICAgICBOYW1lIG9mIHRoZSBvcHRpb24gdG8gdmFsaWRhdGVcbiAqIEBwYXJhbSB7QXJyYXkuPHN0cmluZz59IHZhbHVlcyAgQXJyYXkgd2l0aCB2YWxpZCB2YWx1ZXMgZm9yIHRoaXMgb3B0aW9uXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZU9wdGlvbihvcHRpb25zLCBuYW1lLCB2YWx1ZXMpIHtcbiAgaWYgKG9wdGlvbnNbbmFtZV0gIT09IHVuZGVmaW5lZCAmJiAhY29udGFpbnModmFsdWVzLCBvcHRpb25zW25hbWVdKSkge1xuICAgIHZhciBpbmRleCA9IGZpbmRJbmRleCh2YWx1ZXMsIG9wdGlvbnNbbmFtZV0pO1xuXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgLy8gcmlnaHQgdmFsdWUsIHdyb25nIGNhc2luZ1xuICAgICAgLy8gVE9ETzogbG93ZXIgY2FzZSB2YWx1ZXMgYXJlIGRlcHJlY2F0ZWQgc2luY2UgdjMsIHJlbW92ZSB0aGlzIHdhcm5pbmcgc29tZSBkYXkuXG4gICAgICBjb25zb2xlLndhcm4oJ1dhcm5pbmc6IFdyb25nIGNhc2luZyBmb3IgY29uZmlndXJhdGlvbiBvcHRpb24gXCInICsgbmFtZSArICdcIiwgc2hvdWxkIGJlIFwiJyArIHZhbHVlc1tpbmRleF0gKyAnXCIgaW5zdGVhZCBvZiBcIicgKyBvcHRpb25zW25hbWVdICsgJ1wiLicpO1xuICAgICAgb3B0aW9uc1tuYW1lXSA9IHZhbHVlc1tpbmRleF07IC8vIGNoYW5nZSB0aGUgb3B0aW9uIHRvIHRoZSByaWdodCBjYXNpbmdcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdW5rbm93biB2YWx1ZVxuICAgICAgY29uc29sZS53YXJuKCdXYXJuaW5nOiBVbmtub3duIHZhbHVlIFwiJyArIG9wdGlvbnNbbmFtZV0gKyAnXCIgZm9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uIFwiJyArIG5hbWUgKyAnXCIuIEF2YWlsYWJsZSBvcHRpb25zOiAnICsgdmFsdWVzLm1hcChKU09OLnN0cmluZ2lmeSkuam9pbignLCAnKSArICcuJyk7XG4gICAgfVxuICB9XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZURlcHJlY2F0ZWRJbXBvcnQgPSBjcmVhdGVEZXByZWNhdGVkSW1wb3J0O1xuXG5mdW5jdGlvbiBjcmVhdGVEZXByZWNhdGVkSW1wb3J0KCkge1xuICByZXR1cm4gZnVuY3Rpb24gZGVwcmVjYXRlZEltcG9ydCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBnbG9iYWwgaW1wb3J0IGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUgYW55bW9yZSBpbiB2Ni4wLjAuIFxcbicgKyAnUGxlYXNlIGNyZWF0ZSBhIG1hdGhqcyBpbnN0YW5jZSBpZiB5b3Ugd2FudCB0byBpbXBvcnQgZnVuY3Rpb25zLiBcXG4nICsgJ0V4YW1wbGU6XFxuJyArICdcXG4nICsgJyAgaW1wb3J0IHsgY3JlYXRlLCBhbGwgfSBmcm9tIFxcJ21hdGhqc1xcJztcXG4nICsgJyAgY29uc3QgbWF0aGpzID0gY3JlYXRlKGFsbCk7XFxuJyArICcgIG1hdGhqcy5pbXBvcnQoLi4uKTtcXG4nKTtcbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW1wb3J0RmFjdG9yeSA9IGltcG9ydEZhY3Rvcnk7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfQXJndW1lbnRzRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vZXJyb3IvQXJndW1lbnRzRXJyb3JcIik7XG5cbnZhciBfbG9nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2xvZ1wiKTtcblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5mdW5jdGlvbiBpbXBvcnRGYWN0b3J5KHR5cGVkLCBsb2FkLCBtYXRoLCBpbXBvcnRlZEZhY3Rvcmllcykge1xuICAvKipcbiAgICogSW1wb3J0IGZ1bmN0aW9ucyBmcm9tIGFuIG9iamVjdCBvciBhIG1vZHVsZS5cbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBvbiBhIG1hdGhqcyBpbnN0YW5jZSBjcmVhdGVkIHVzaW5nIGBjcmVhdGVgLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguaW1wb3J0KGZ1bmN0aW9ucylcbiAgICogICAgbWF0aC5pbXBvcnQoZnVuY3Rpb25zLCBvcHRpb25zKVxuICAgKlxuICAgKiBXaGVyZTpcbiAgICpcbiAgICogLSBgZnVuY3Rpb25zOiBPYmplY3RgXG4gICAqICAgQW4gb2JqZWN0IHdpdGggZnVuY3Rpb25zIG9yIGZhY3RvcmllcyB0byBiZSBpbXBvcnRlZC5cbiAgICogLSBgb3B0aW9uczogT2JqZWN0YCBBbiBvYmplY3Qgd2l0aCBpbXBvcnQgb3B0aW9ucy4gQXZhaWxhYmxlIG9wdGlvbnM6XG4gICAqICAgLSBgb3ZlcnJpZGU6IGJvb2xlYW5gXG4gICAqICAgICBJZiB0cnVlLCBleGlzdGluZyBmdW5jdGlvbnMgd2lsbCBiZSBvdmVyd3JpdHRlbi4gRmFsc2UgYnkgZGVmYXVsdC5cbiAgICogICAtIGBzaWxlbnQ6IGJvb2xlYW5gXG4gICAqICAgICBJZiB0cnVlLCB0aGUgZnVuY3Rpb24gd2lsbCBub3QgdGhyb3cgZXJyb3JzIG9uIGR1cGxpY2F0ZXMgb3IgaW52YWxpZFxuICAgKiAgICAgdHlwZXMuIEZhbHNlIGJ5IGRlZmF1bHQuXG4gICAqICAgLSBgd3JhcDogYm9vbGVhbmBcbiAgICogICAgIElmIHRydWUsIHRoZSBmdW5jdGlvbnMgd2lsbCBiZSB3cmFwcGVkIGluIGEgd3JhcHBlciBmdW5jdGlvblxuICAgKiAgICAgd2hpY2ggY29udmVydHMgZGF0YSB0eXBlcyBsaWtlIE1hdHJpeCB0byBwcmltaXRpdmUgZGF0YSB0eXBlcyBsaWtlIEFycmF5LlxuICAgKiAgICAgVGhlIHdyYXBwZXIgaXMgbmVlZGVkIHdoZW4gZXh0ZW5kaW5nIG1hdGguanMgd2l0aCBsaWJyYXJpZXMgd2hpY2ggZG8gbm90XG4gICAqICAgICBzdXBwb3J0IHRoZXNlIGRhdGEgdHlwZS4gRmFsc2UgYnkgZGVmYXVsdC5cbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIGltcG9ydCB7IGNyZWF0ZSwgYWxsIH0gZnJvbSAnbWF0aGpzJ1xuICAgKiAgICBpbXBvcnQgKiBhcyBudW1iZXJzIGZyb20gJ251bWJlcnMnXG4gICAqXG4gICAqICAgIC8vIGNyZWF0ZSBhIG1hdGhqcyBpbnN0YW5jZVxuICAgKiAgICBjb25zdCBtYXRoID0gY3JlYXRlKGFsbClcbiAgICpcbiAgICogICAgLy8gZGVmaW5lIG5ldyBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlc1xuICAgKiAgICBtYXRoLmltcG9ydCh7XG4gICAqICAgICAgbXl2YWx1ZTogNDIsXG4gICAqICAgICAgaGVsbG86IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAqICAgICAgICByZXR1cm4gJ2hlbGxvLCAnICsgbmFtZSArICchJ1xuICAgKiAgICAgIH1cbiAgICogICAgfSlcbiAgICpcbiAgICogICAgLy8gdXNlIHRoZSBpbXBvcnRlZCBmdW5jdGlvbiBhbmQgdmFyaWFibGVcbiAgICogICAgbWF0aC5teXZhbHVlICogMiAgICAgICAgICAgICAgIC8vIDg0XG4gICAqICAgIG1hdGguaGVsbG8oJ3VzZXInKSAgICAgICAgICAgICAvLyAnaGVsbG8sIHVzZXIhJ1xuICAgKlxuICAgKiAgICAvLyBpbXBvcnQgdGhlIG5wbSBtb2R1bGUgJ251bWJlcnMnXG4gICAqICAgIC8vIChtdXN0IGJlIGluc3RhbGxlZCBmaXJzdCB3aXRoIGBucG0gaW5zdGFsbCBudW1iZXJzYClcbiAgICogICAgbWF0aC5pbXBvcnQobnVtYmVycywge3dyYXA6IHRydWV9KVxuICAgKlxuICAgKiAgICBtYXRoLmZpYm9uYWNjaSg3KSAvLyByZXR1cm5zIDEzXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgQXJyYXl9IGZ1bmN0aW9ucyAgT2JqZWN0IHdpdGggZnVuY3Rpb25zIHRvIGJlIGltcG9ydGVkLlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdICAgICAgICAgIEltcG9ydCBvcHRpb25zLlxuICAgKi9cbiAgZnVuY3Rpb24gbWF0aEltcG9ydChmdW5jdGlvbnMsIG9wdGlvbnMpIHtcbiAgICB2YXIgbnVtID0gYXJndW1lbnRzLmxlbmd0aDtcblxuICAgIGlmIChudW0gIT09IDEgJiYgbnVtICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgX0FyZ3VtZW50c0Vycm9yLkFyZ3VtZW50c0Vycm9yKCdpbXBvcnQnLCBudW0sIDEsIDIpO1xuICAgIH1cblxuICAgIGlmICghb3B0aW9ucykge1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZsYXR0ZW5JbXBvcnRzKGZsYXRWYWx1ZXMsIHZhbHVlLCBuYW1lKSB7XG4gICAgICBpZiAoKDAsIF9vYmplY3QuaXNMZWdhY3lGYWN0b3J5KSh2YWx1ZSkpIHtcbiAgICAgICAgLy8gbGVnYWN5IGZhY3RvcmllcyBkb24ndCBhbHdheXMgaGF2ZSBhIG5hbWUsXG4gICAgICAgIC8vIGxldCdzIG5vdCBoYW5kbGUgdGhlbSB2aWEgdGhlIG5ldyBmbGF0VmFsdWVzXG4gICAgICAgIF9pbXBvcnRMZWdhY3lGYWN0b3J5KHZhbHVlLCBvcHRpb25zKTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgdmFsdWUuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgIHJldHVybiBmbGF0dGVuSW1wb3J0cyhmbGF0VmFsdWVzLCBpdGVtKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKF90eXBlb2YodmFsdWUpID09PSAnb2JqZWN0Jykge1xuICAgICAgICBmb3IgKHZhciBfbmFtZSBpbiB2YWx1ZSkge1xuICAgICAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodmFsdWUsIF9uYW1lKSkge1xuICAgICAgICAgICAgZmxhdHRlbkltcG9ydHMoZmxhdFZhbHVlcywgdmFsdWVbX25hbWVdLCBfbmFtZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfZmFjdG9yeS5pc0ZhY3RvcnkpKHZhbHVlKSB8fCBuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIGZsYXROYW1lID0gKDAsIF9mYWN0b3J5LmlzRmFjdG9yeSkodmFsdWUpID8gaXNUcmFuc2Zvcm1GdW5jdGlvbkZhY3RvcnkodmFsdWUpID8gdmFsdWUuZm4gKyAnLnRyYW5zZm9ybScgOiAvLyBUT0RPOiB0aGlzIGlzIHVnbHlcbiAgICAgICAgdmFsdWUuZm4gOiBuYW1lOyAvLyB3ZSBhbGxvdyBpbXBvcnRpbmcgdGhlIHNhbWUgZnVuY3Rpb24gdHdpY2UgaWYgaXQgcG9pbnRzIHRvIHRoZSBzYW1lIGltcGxlbWVudGF0aW9uXG5cbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShmbGF0VmFsdWVzLCBmbGF0TmFtZSkgJiYgZmxhdFZhbHVlc1tmbGF0TmFtZV0gIT09IHZhbHVlICYmICFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGltcG9ydCBcIicgKyBmbGF0TmFtZSArICdcIiB0d2ljZScpO1xuICAgICAgICB9XG5cbiAgICAgICAgZmxhdFZhbHVlc1tmbGF0TmFtZV0gPSB2YWx1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICghb3B0aW9ucy5zaWxlbnQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGYWN0b3J5LCBPYmplY3QsIG9yIEFycmF5IGV4cGVjdGVkJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZmxhdFZhbHVlcyA9IHt9O1xuICAgIGZsYXR0ZW5JbXBvcnRzKGZsYXRWYWx1ZXMsIGZ1bmN0aW9ucyk7XG5cbiAgICBmb3IgKHZhciBuYW1lIGluIGZsYXRWYWx1ZXMpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoZmxhdFZhbHVlcywgbmFtZSkpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2ltcG9ydCcsIG5hbWUpXG4gICAgICAgIHZhciB2YWx1ZSA9IGZsYXRWYWx1ZXNbbmFtZV07XG5cbiAgICAgICAgaWYgKCgwLCBfZmFjdG9yeS5pc0ZhY3RvcnkpKHZhbHVlKSkge1xuICAgICAgICAgIC8vIHdlIGlnbm9yZSBuYW1lIGhlcmUgYW5kIGVuZm9yY2UgdGhlIG5hbWUgb2YgdGhlIGZhY3RvcnlcbiAgICAgICAgICAvLyBtYXliZSBhdCBzb21lIHBvaW50IHdlIGRvIHdhbnQgdG8gYWxsb3cgb3ZlcnJpZGluZyBpdFxuICAgICAgICAgIC8vIGluIHRoYXQgY2FzZSB3ZSBjYW4gaW1wbGVtZW50IGFuIG9wdGlvbiBvdmVycmlkZUZhY3RvcnlOYW1lczogdHJ1ZVxuICAgICAgICAgIF9pbXBvcnRGYWN0b3J5KHZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc1N1cHBvcnRlZFR5cGUodmFsdWUpKSB7XG4gICAgICAgICAgX2ltcG9ydChuYW1lLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFvcHRpb25zLnNpbGVudCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmFjdG9yeSwgT2JqZWN0LCBvciBBcnJheSBleHBlY3RlZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICAvKipcbiAgICogQWRkIGEgcHJvcGVydHkgdG8gdGhlIG1hdGggbmFtZXNwYWNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgIFNlZSBpbXBvcnQgZm9yIGEgZGVzY3JpcHRpb24gb2YgdGhlIG9wdGlvbnNcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfaW1wb3J0KG5hbWUsIHZhbHVlLCBvcHRpb25zKSB7XG4gICAgLy8gVE9ETzogcmVmYWN0b3IgdGhpcyBmdW5jdGlvbiwgaXQncyB0byBjb21wbGljYXRlZCBhbmQgY29udGFpbnMgZHVwbGljYXRlIGNvZGVcbiAgICBpZiAob3B0aW9ucy53cmFwICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gY3JlYXRlIGEgd3JhcHBlciBhcm91bmQgdGhlIGZ1bmN0aW9uXG4gICAgICB2YWx1ZSA9IF93cmFwKHZhbHVlKTtcbiAgICB9IC8vIHR1cm4gYSBwbGFpbiBmdW5jdGlvbiB3aXRoIGEgdHlwZWQtZnVuY3Rpb24gc2lnbmF0dXJlIGludG8gYSB0eXBlZC1mdW5jdGlvblxuXG5cbiAgICBpZiAoaGFzVHlwZWRGdW5jdGlvblNpZ25hdHVyZSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdHlwZWQobmFtZSwgX2RlZmluZVByb3BlcnR5KHt9LCB2YWx1ZS5zaWduYXR1cmUsIHZhbHVlKSk7XG4gICAgfVxuXG4gICAgaWYgKGlzVHlwZWRGdW5jdGlvbihtYXRoW25hbWVdKSAmJiBpc1R5cGVkRnVuY3Rpb24odmFsdWUpKSB7XG4gICAgICBpZiAob3B0aW9ucy5vdmVycmlkZSkge1xuICAgICAgICAvLyBnaXZlIHRoZSB0eXBlZCBmdW5jdGlvbiB0aGUgcmlnaHQgbmFtZVxuICAgICAgICB2YWx1ZSA9IHR5cGVkKG5hbWUsIHZhbHVlLnNpZ25hdHVyZXMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbWVyZ2UgdGhlIGV4aXN0aW5nIGFuZCB0eXBlZCBmdW5jdGlvblxuICAgICAgICB2YWx1ZSA9IHR5cGVkKG1hdGhbbmFtZV0sIHZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgbWF0aFtuYW1lXSA9IHZhbHVlO1xuICAgICAgZGVsZXRlIGltcG9ydGVkRmFjdG9yaWVzW25hbWVdO1xuXG4gICAgICBfaW1wb3J0VHJhbnNmb3JtKG5hbWUsIHZhbHVlKTtcblxuICAgICAgbWF0aC5lbWl0KCdpbXBvcnQnLCBuYW1lLCBmdW5jdGlvbiByZXNvbHZlcigpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG1hdGhbbmFtZV0gPT09IHVuZGVmaW5lZCB8fCBvcHRpb25zLm92ZXJyaWRlKSB7XG4gICAgICBtYXRoW25hbWVdID0gdmFsdWU7XG4gICAgICBkZWxldGUgaW1wb3J0ZWRGYWN0b3JpZXNbbmFtZV07XG5cbiAgICAgIF9pbXBvcnRUcmFuc2Zvcm0obmFtZSwgdmFsdWUpO1xuXG4gICAgICBtYXRoLmVtaXQoJ2ltcG9ydCcsIG5hbWUsIGZ1bmN0aW9uIHJlc29sdmVyKCkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMuc2lsZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbXBvcnQgXCInICsgbmFtZSArICdcIjogYWxyZWFkeSBleGlzdHMnKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBfaW1wb3J0VHJhbnNmb3JtKG5hbWUsIHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZS50cmFuc2Zvcm0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG1hdGguZXhwcmVzc2lvbi50cmFuc2Zvcm1bbmFtZV0gPSB2YWx1ZS50cmFuc2Zvcm07XG5cbiAgICAgIGlmIChhbGxvd2VkSW5FeHByZXNzaW9ucyhuYW1lKSkge1xuICAgICAgICBtYXRoLmV4cHJlc3Npb24ubWF0aFdpdGhUcmFuc2Zvcm1bbmFtZV0gPSB2YWx1ZS50cmFuc2Zvcm07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJlbW92ZSBleGlzdGluZyB0cmFuc2Zvcm1cbiAgICAgIGRlbGV0ZSBtYXRoLmV4cHJlc3Npb24udHJhbnNmb3JtW25hbWVdO1xuXG4gICAgICBpZiAoYWxsb3dlZEluRXhwcmVzc2lvbnMobmFtZSkpIHtcbiAgICAgICAgbWF0aC5leHByZXNzaW9uLm1hdGhXaXRoVHJhbnNmb3JtW25hbWVdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gX2RlbGV0ZVRyYW5zZm9ybShuYW1lKSB7XG4gICAgZGVsZXRlIG1hdGguZXhwcmVzc2lvbi50cmFuc2Zvcm1bbmFtZV07XG5cbiAgICBpZiAoYWxsb3dlZEluRXhwcmVzc2lvbnMobmFtZSkpIHtcbiAgICAgIG1hdGguZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybVtuYW1lXSA9IG1hdGhbbmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlbGV0ZSBtYXRoLmV4cHJlc3Npb24ubWF0aFdpdGhUcmFuc2Zvcm1bbmFtZV07XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSB3cmFwcGVyIGEgcm91bmQgYW4gZnVuY3Rpb24gd2hpY2ggY29udmVydHMgdGhlIGFyZ3VtZW50c1xuICAgKiB0byB0aGVpciBwcmltaXRpdmUgdmFsdWVzIChsaWtlIGNvbnZlcnQgYSBNYXRyaXggdG8gQXJyYXkpXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSB3cmFwcGVkIGZ1bmN0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3dyYXAoZm4pIHtcbiAgICB2YXIgd3JhcHBlciA9IGZ1bmN0aW9uIHdyYXBwZXIoKSB7XG4gICAgICB2YXIgYXJncyA9IFtdO1xuXG4gICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG4gICAgICAgIGFyZ3NbaV0gPSBhcmcgJiYgYXJnLnZhbHVlT2YoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZuLmFwcGx5KG1hdGgsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBpZiAoZm4udHJhbnNmb3JtKSB7XG4gICAgICB3cmFwcGVyLnRyYW5zZm9ybSA9IGZuLnRyYW5zZm9ybTtcbiAgICB9XG5cbiAgICByZXR1cm4gd3JhcHBlcjtcbiAgfVxuICAvKipcbiAgICogSW1wb3J0IGFuIGluc3RhbmNlIG9mIGEgZmFjdG9yeSBpbnRvIG1hdGguanNcbiAgICogQHBhcmFtIHt7ZmFjdG9yeTogRnVuY3Rpb24sIG5hbWU6IHN0cmluZywgcGF0aDogc3RyaW5nLCBtYXRoOiBib29sZWFufX0gZmFjdG9yeVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAgU2VlIGltcG9ydCBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgb3B0aW9uc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgLy8gVE9ETzogX2ltcG9ydExlZ2FjeUZhY3RvcnkgaXMgZGVwcmVjYXRlZCBzaW5jZSB2Ni4wLjAsIGNsZWFuIHVwIHNvbWUgZGF5XG5cblxuICBmdW5jdGlvbiBfaW1wb3J0TGVnYWN5RmFjdG9yeShmYWN0b3J5LCBvcHRpb25zKSB7XG4gICAgKDAsIF9sb2cud2Fybk9uY2UpKCdGYWN0b3JpZXMgb2YgdHlwZSB7IG5hbWUsIGZhY3RvcnkgfSBhcmUgZGVwcmVjYXRlZCBzaW5jZSB2Ni4gJyArICdQbGVhc2UgY3JlYXRlIHlvdXIgZmFjdG9yeSBmdW5jdGlvbnMgdXNpbmcgdGhlIG1hdGguZmFjdG9yeSBmdW5jdGlvbi4nKTtcblxuICAgIGlmICh0eXBlb2YgZmFjdG9yeS5uYW1lID09PSAnc3RyaW5nJykge1xuICAgICAgdmFyIG5hbWUgPSBmYWN0b3J5Lm5hbWU7XG4gICAgICB2YXIgZXhpc3RpbmdUcmFuc2Zvcm0gPSAobmFtZSBpbiBtYXRoLmV4cHJlc3Npb24udHJhbnNmb3JtKTtcbiAgICAgIHZhciBuYW1lc3BhY2UgPSBmYWN0b3J5LnBhdGggPyAoMCwgX29iamVjdC50cmF2ZXJzZSkobWF0aCwgZmFjdG9yeS5wYXRoKSA6IG1hdGg7XG4gICAgICB2YXIgZXhpc3RpbmcgPSAoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkobmFtZXNwYWNlLCBuYW1lKSA/IG5hbWVzcGFjZVtuYW1lXSA6IHVuZGVmaW5lZDtcblxuICAgICAgdmFyIHJlc29sdmVyID0gZnVuY3Rpb24gcmVzb2x2ZXIoKSB7XG4gICAgICAgIHZhciBpbnN0YW5jZSA9IGxvYWQoZmFjdG9yeSk7XG5cbiAgICAgICAgaWYgKGluc3RhbmNlICYmIHR5cGVvZiBpbnN0YW5jZS50cmFuc2Zvcm0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RyYW5zZm9ybXMgY2Fubm90IGJlIGF0dGFjaGVkIHRvIGZhY3RvcnkgZnVuY3Rpb25zLiAnICsgJ1BsZWFzZSBjcmVhdGUgYSBzZXBhcmF0ZSBmdW5jdGlvbiBmb3IgaXQgd2l0aCBleHBvcnRzLnBhdGg9XCJleHByZXNzaW9uLnRyYW5zZm9ybVwiJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNUeXBlZEZ1bmN0aW9uKGV4aXN0aW5nKSAmJiBpc1R5cGVkRnVuY3Rpb24oaW5zdGFuY2UpKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbnMub3ZlcnJpZGUpIHsvLyByZXBsYWNlIHRoZSBleGlzdGluZyB0eXBlZCBmdW5jdGlvbiAobm90aGluZyB0byBkbylcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gbWVyZ2UgdGhlIGV4aXN0aW5nIGFuZCBuZXcgdHlwZWQgZnVuY3Rpb25cbiAgICAgICAgICAgIGluc3RhbmNlID0gdHlwZWQoZXhpc3RpbmcsIGluc3RhbmNlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXhpc3RpbmcgPT09IHVuZGVmaW5lZCB8fCBvcHRpb25zLm92ZXJyaWRlKSB7XG4gICAgICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGltcG9ydCBcIicgKyBuYW1lICsgJ1wiOiBhbHJlYWR5IGV4aXN0cycpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBpZiAoZmFjdG9yeS5sYXp5ICE9PSBmYWxzZSkge1xuICAgICAgICAoMCwgX29iamVjdC5sYXp5KShuYW1lc3BhY2UsIG5hbWUsIHJlc29sdmVyKTtcblxuICAgICAgICBpZiAoZXhpc3RpbmdUcmFuc2Zvcm0pIHtcbiAgICAgICAgICBfZGVsZXRlVHJhbnNmb3JtKG5hbWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChmYWN0b3J5LnBhdGggPT09ICdleHByZXNzaW9uLnRyYW5zZm9ybScgfHwgbGVnYWN5RmFjdG9yeUFsbG93ZWRJbkV4cHJlc3Npb25zKGZhY3RvcnkpKSB7XG4gICAgICAgICAgICAoMCwgX29iamVjdC5sYXp5KShtYXRoLmV4cHJlc3Npb24ubWF0aFdpdGhUcmFuc2Zvcm0sIG5hbWUsIHJlc29sdmVyKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5hbWVzcGFjZVtuYW1lXSA9IHJlc29sdmVyKCk7XG5cbiAgICAgICAgaWYgKGV4aXN0aW5nVHJhbnNmb3JtKSB7XG4gICAgICAgICAgX2RlbGV0ZVRyYW5zZm9ybShuYW1lKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoZmFjdG9yeS5wYXRoID09PSAnZXhwcmVzc2lvbi50cmFuc2Zvcm0nIHx8IGxlZ2FjeUZhY3RvcnlBbGxvd2VkSW5FeHByZXNzaW9ucyhmYWN0b3J5KSkge1xuICAgICAgICAgICAgbWF0aC5leHByZXNzaW9uLm1hdGhXaXRoVHJhbnNmb3JtW25hbWVdID0gcmVzb2x2ZXIoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGtleSA9IGZhY3RvcnkucGF0aCA/IGZhY3RvcnkucGF0aCArICcuJyArIGZhY3RvcnkubmFtZSA6IGZhY3RvcnkubmFtZTtcbiAgICAgIGltcG9ydGVkRmFjdG9yaWVzW2tleV0gPSBmYWN0b3J5O1xuICAgICAgbWF0aC5lbWl0KCdpbXBvcnQnLCBuYW1lLCByZXNvbHZlciwgZmFjdG9yeS5wYXRoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdW5uYW1lZCBmYWN0b3J5LlxuICAgICAgLy8gbm8gbGF6eSBsb2FkaW5nXG4gICAgICBsb2FkKGZhY3RvcnkpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogSW1wb3J0IGFuIGluc3RhbmNlIG9mIGEgZmFjdG9yeSBpbnRvIG1hdGguanNcbiAgICogQHBhcmFtIHtmdW5jdGlvbihzY29wZTogb2JqZWN0KX0gZmFjdG9yeVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAgU2VlIGltcG9ydCBmb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW25hbWU9ZmFjdG9yeS5uYW1lXSBPcHRpb25hbCBjdXN0b20gbmFtZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9pbXBvcnRGYWN0b3J5KGZhY3RvcnksIG9wdGlvbnMpIHtcbiAgICB2YXIgbmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogZmFjdG9yeS5mbjtcblxuICAgIGlmICgoMCwgX2FycmF5LmNvbnRhaW5zKShuYW1lLCAnLicpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhY3RvcnkgbmFtZSBzaG91bGQgbm90IGNvbnRhaW4gYSBuZXN0ZWQgcGF0aC4gJyArICdOYW1lOiAnICsgSlNPTi5zdHJpbmdpZnkobmFtZSkpO1xuICAgIH1cblxuICAgIHZhciBuYW1lc3BhY2UgPSBpc1RyYW5zZm9ybUZ1bmN0aW9uRmFjdG9yeShmYWN0b3J5KSA/IG1hdGguZXhwcmVzc2lvbi50cmFuc2Zvcm0gOiBtYXRoO1xuICAgIHZhciBleGlzdGluZ1RyYW5zZm9ybSA9IChuYW1lIGluIG1hdGguZXhwcmVzc2lvbi50cmFuc2Zvcm0pO1xuICAgIHZhciBleGlzdGluZyA9ICgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShuYW1lc3BhY2UsIG5hbWUpID8gbmFtZXNwYWNlW25hbWVdIDogdW5kZWZpbmVkO1xuXG4gICAgdmFyIHJlc29sdmVyID0gZnVuY3Rpb24gcmVzb2x2ZXIoKSB7XG4gICAgICAvLyBjb2xsZWN0IGFsbCBkZXBlbmRlbmNpZXMsIGhhbmRsZSBmaW5kaW5nIGJvdGggZnVuY3Rpb25zIGFuZCBjbGFzc2VzIGFuZCBvdGhlciBzcGVjaWFsIGNhc2VzXG4gICAgICB2YXIgZGVwZW5kZW5jaWVzID0ge307XG4gICAgICBmYWN0b3J5LmRlcGVuZGVuY2llcy5tYXAoX2ZhY3Rvcnkuc3RyaXBPcHRpb25hbE5vdGF0aW9uKS5mb3JFYWNoKGZ1bmN0aW9uIChkZXBlbmRlbmN5KSB7XG4gICAgICAgIGlmICgoMCwgX2FycmF5LmNvbnRhaW5zKShkZXBlbmRlbmN5LCAnLicpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWN0b3J5IGRlcGVuZGVuY3kgc2hvdWxkIG5vdCBjb250YWluIGEgbmVzdGVkIHBhdGguICcgKyAnTmFtZTogJyArIEpTT04uc3RyaW5naWZ5KGRlcGVuZGVuY3kpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZXBlbmRlbmN5ID09PSAnbWF0aCcpIHtcbiAgICAgICAgICBkZXBlbmRlbmNpZXMubWF0aCA9IG1hdGg7XG4gICAgICAgIH0gZWxzZSBpZiAoZGVwZW5kZW5jeSA9PT0gJ21hdGhXaXRoVHJhbnNmb3JtJykge1xuICAgICAgICAgIGRlcGVuZGVuY2llcy5tYXRoV2l0aFRyYW5zZm9ybSA9IG1hdGguZXhwcmVzc2lvbi5tYXRoV2l0aFRyYW5zZm9ybTtcbiAgICAgICAgfSBlbHNlIGlmIChkZXBlbmRlbmN5ID09PSAnY2xhc3NlcycpIHtcbiAgICAgICAgICAvLyBzcGVjaWFsIGNhc2UgZm9yIGpzb24gcmV2aXZlclxuICAgICAgICAgIGRlcGVuZGVuY2llcy5jbGFzc2VzID0gbWF0aDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZXBlbmRlbmNpZXNbZGVwZW5kZW5jeV0gPSBtYXRoW2RlcGVuZGVuY3ldO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHZhciBpbnN0YW5jZSA9IC8qICNfX1BVUkVfXyAqL2ZhY3RvcnkoZGVwZW5kZW5jaWVzKTtcblxuICAgICAgaWYgKGluc3RhbmNlICYmIHR5cGVvZiBpbnN0YW5jZS50cmFuc2Zvcm0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUcmFuc2Zvcm1zIGNhbm5vdCBiZSBhdHRhY2hlZCB0byBmYWN0b3J5IGZ1bmN0aW9ucy4gJyArICdQbGVhc2UgY3JlYXRlIGEgc2VwYXJhdGUgZnVuY3Rpb24gZm9yIGl0IHdpdGggZXhwb3J0cy5wYXRoPVwiZXhwcmVzc2lvbi50cmFuc2Zvcm1cIicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZXhpc3RpbmcgPT09IHVuZGVmaW5lZCB8fCBvcHRpb25zLm92ZXJyaWRlKSB7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzVHlwZWRGdW5jdGlvbihleGlzdGluZykgJiYgaXNUeXBlZEZ1bmN0aW9uKGluc3RhbmNlKSkge1xuICAgICAgICAvLyBtZXJnZSB0aGUgZXhpc3RpbmcgYW5kIG5ldyB0eXBlZCBmdW5jdGlvblxuICAgICAgICByZXR1cm4gdHlwZWQoZXhpc3RpbmcsIGluc3RhbmNlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuc2lsZW50KSB7XG4gICAgICAgIC8vIGtlZXAgZXhpc3RpbmcsIGlnbm9yZSBpbXBvcnRlZCBmdW5jdGlvblxuICAgICAgICByZXR1cm4gZXhpc3Rpbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbXBvcnQgXCInICsgbmFtZSArICdcIjogYWxyZWFkeSBleGlzdHMnKTtcbiAgICAgIH1cbiAgICB9OyAvLyBUT0RPOiBhZGQgdW5pdCB0ZXN0IHdpdGggbm9uLWxhenkgZmFjdG9yeVxuXG5cbiAgICBpZiAoIWZhY3RvcnkubWV0YSB8fCBmYWN0b3J5Lm1ldGEubGF6eSAhPT0gZmFsc2UpIHtcbiAgICAgICgwLCBfb2JqZWN0LmxhenkpKG5hbWVzcGFjZSwgbmFtZSwgcmVzb2x2ZXIpOyAvLyBGSVhNRTogcmVtb3ZlIHRoZSBgaWYgKGV4aXN0aW5nICYmYCBjb25kaXRpb24gYWdhaW4uIENhbiB3ZSBtYWtlIHN1cmUgc3Vic2V0IGlzIGxvYWRlZCBiZWZvcmUgc3Vic2V0LnRyYW5zZm9ybT8gKE5hbWUgY29sbGlzaW9uLCBhbmQgbm8gZGVwZW5kZW5jaWVzIGJldHdlZW4gdGhlIHR3bylcblxuICAgICAgaWYgKGV4aXN0aW5nICYmIGV4aXN0aW5nVHJhbnNmb3JtKSB7XG4gICAgICAgIF9kZWxldGVUcmFuc2Zvcm0obmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaXNUcmFuc2Zvcm1GdW5jdGlvbkZhY3RvcnkoZmFjdG9yeSkgfHwgZmFjdG9yeUFsbG93ZWRJbkV4cHJlc3Npb25zKGZhY3RvcnkpKSB7XG4gICAgICAgICAgKDAsIF9vYmplY3QubGF6eSkobWF0aC5leHByZXNzaW9uLm1hdGhXaXRoVHJhbnNmb3JtLCBuYW1lLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmFtZXNwYWNlW25hbWVdO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG5hbWVzcGFjZVtuYW1lXSA9IHJlc29sdmVyKCk7IC8vIEZJWE1FOiByZW1vdmUgdGhlIGBpZiAoZXhpc3RpbmcgJiZgIGNvbmRpdGlvbiBhZ2Fpbi4gQ2FuIHdlIG1ha2Ugc3VyZSBzdWJzZXQgaXMgbG9hZGVkIGJlZm9yZSBzdWJzZXQudHJhbnNmb3JtPyAoTmFtZSBjb2xsaXNpb24sIGFuZCBubyBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGUgdHdvKVxuXG4gICAgICBpZiAoZXhpc3RpbmcgJiYgZXhpc3RpbmdUcmFuc2Zvcm0pIHtcbiAgICAgICAgX2RlbGV0ZVRyYW5zZm9ybShuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChpc1RyYW5zZm9ybUZ1bmN0aW9uRmFjdG9yeShmYWN0b3J5KSB8fCBmYWN0b3J5QWxsb3dlZEluRXhwcmVzc2lvbnMoZmFjdG9yeSkpIHtcbiAgICAgICAgICAoMCwgX29iamVjdC5sYXp5KShtYXRoLmV4cHJlc3Npb24ubWF0aFdpdGhUcmFuc2Zvcm0sIG5hbWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBuYW1lc3BhY2VbbmFtZV07XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIFRPRE86IGltcHJvdmUgZmFjdG9yaWVzLCBzdG9yZSBhIGxpc3Qgd2l0aCBpbXBvcnRzIGluc3RlYWQgd2hpY2ggY2FuIGJlIHJlLXBsYXllZFxuXG5cbiAgICBpbXBvcnRlZEZhY3Rvcmllc1tuYW1lXSA9IGZhY3Rvcnk7XG4gICAgbWF0aC5lbWl0KCdpbXBvcnQnLCBuYW1lLCByZXNvbHZlcik7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgZ2l2ZW4gb2JqZWN0IGlzIGEgdHlwZSB3aGljaCBjYW4gYmUgaW1wb3J0ZWRcbiAgICogQHBhcmFtIHtGdW5jdGlvbiB8IG51bWJlciB8IHN0cmluZyB8IGJvb2xlYW4gfCBudWxsIHwgVW5pdCB8IENvbXBsZXh9IG9iamVjdFxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGlzU3VwcG9ydGVkVHlwZShvYmplY3QpIHtcbiAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygb2JqZWN0ID09PSAnbnVtYmVyJyB8fCB0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJyB8fCB0eXBlb2Ygb2JqZWN0ID09PSAnYm9vbGVhbicgfHwgb2JqZWN0ID09PSBudWxsIHx8ICgwLCBfaXMuaXNVbml0KShvYmplY3QpIHx8ICgwLCBfaXMuaXNDb21wbGV4KShvYmplY3QpIHx8ICgwLCBfaXMuaXNCaWdOdW1iZXIpKG9iamVjdCkgfHwgKDAsIF9pcy5pc0ZyYWN0aW9uKShvYmplY3QpIHx8ICgwLCBfaXMuaXNNYXRyaXgpKG9iamVjdCkgfHwgQXJyYXkuaXNBcnJheShvYmplY3QpO1xuICB9XG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgYSBnaXZlbiB0aGluZyBpcyBhIHR5cGVkLWZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7Kn0gZm5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW4gYGZuYCBpcyBhIHR5cGVkLWZ1bmN0aW9uXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gaXNUeXBlZEZ1bmN0aW9uKGZuKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJyAmJiBfdHlwZW9mKGZuLnNpZ25hdHVyZXMpID09PSAnb2JqZWN0JztcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhc1R5cGVkRnVuY3Rpb25TaWduYXR1cmUoZm4pIHtcbiAgICByZXR1cm4gdHlwZW9mIGZuID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBmbi5zaWduYXR1cmUgPT09ICdzdHJpbmcnO1xuICB9XG5cbiAgZnVuY3Rpb24gYWxsb3dlZEluRXhwcmVzc2lvbnMobmFtZSkge1xuICAgIHJldHVybiAhKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKHVuc2FmZSwgbmFtZSk7XG4gIH1cblxuICBmdW5jdGlvbiBsZWdhY3lGYWN0b3J5QWxsb3dlZEluRXhwcmVzc2lvbnMoZmFjdG9yeSkge1xuICAgIHJldHVybiBmYWN0b3J5LnBhdGggPT09IHVuZGVmaW5lZCAmJiAhKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKHVuc2FmZSwgZmFjdG9yeS5uYW1lKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZhY3RvcnlBbGxvd2VkSW5FeHByZXNzaW9ucyhmYWN0b3J5KSB7XG4gICAgcmV0dXJuIGZhY3RvcnkuZm4uaW5kZXhPZignLicpID09PSAtMSAmJiAvLyBGSVhNRTogbWFrZSBjaGVja2luZyBvbiBwYXRoIHJlZHVuZGFudCwgY2hlY2sgb24gbWV0YSBkYXRhIGluc3RlYWRcbiAgICAhKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKHVuc2FmZSwgZmFjdG9yeS5mbikgJiYgKCFmYWN0b3J5Lm1ldGEgfHwgIWZhY3RvcnkubWV0YS5pc0NsYXNzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzVHJhbnNmb3JtRnVuY3Rpb25GYWN0b3J5KGZhY3RvcnkpIHtcbiAgICByZXR1cm4gZmFjdG9yeSAhPT0gdW5kZWZpbmVkICYmIGZhY3RvcnkubWV0YSAhPT0gdW5kZWZpbmVkICYmIGZhY3RvcnkubWV0YS5pc1RyYW5zZm9ybUZ1bmN0aW9uID09PSB0cnVlIHx8IGZhbHNlO1xuICB9IC8vIG5hbWVzcGFjZXMgYW5kIGZ1bmN0aW9ucyBub3QgYXZhaWxhYmxlIGluIHRoZSBwYXJzZXIgZm9yIHNhZmV0eSByZWFzb25zXG5cblxuICB2YXIgdW5zYWZlID0ge1xuICAgIGV4cHJlc3Npb246IHRydWUsXG4gICAgdHlwZTogdHJ1ZSxcbiAgICBkb2NzOiB0cnVlLFxuICAgIGVycm9yOiB0cnVlLFxuICAgIGpzb246IHRydWUsXG4gICAgY2hhaW46IHRydWUgLy8gY2hhaW4gbWV0aG9kIG5vdCBzdXBwb3J0ZWQuIE5vdGUgdGhhdCB0aGVyZSBpcyBhIHVuaXQgY2hhaW4gdG9vLlxuXG4gIH07XG4gIHJldHVybiBtYXRoSW1wb3J0O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVUeXBlZCA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF90eXBlZEZ1bmN0aW9uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwidHlwZWQtZnVuY3Rpb25cIikpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxuLyoqXG4gKiBDcmVhdGUgYSB0eXBlZC1mdW5jdGlvbiB3aGljaCBjaGVja3MgdGhlIHR5cGVzIG9mIHRoZSBhcmd1bWVudHMgYW5kXG4gKiBjYW4gbWF0Y2ggdGhlbSBhZ2FpbnN0IG11bHRpcGxlIHByb3ZpZGVkIHNpZ25hdHVyZXMuIFRoZSB0eXBlZC1mdW5jdGlvblxuICogYXV0b21hdGljYWxseSBjb252ZXJ0cyBpbnB1dHMgaW4gb3JkZXIgdG8gZmluZCBhIG1hdGNoaW5nIHNpZ25hdHVyZS5cbiAqIFR5cGVkIGZ1bmN0aW9ucyB0aHJvdyBpbmZvcm1hdGl2ZSBlcnJvcnMgaW4gY2FzZSBvZiB3cm9uZyBpbnB1dCBhcmd1bWVudHMuXG4gKlxuICogU2VlIHRoZSBsaWJyYXJ5IFt0eXBlZC1mdW5jdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy90eXBlZC1mdW5jdGlvbilcbiAqIGZvciBkZXRhaWxlZCBkb2N1bWVudGF0aW9uLlxuICpcbiAqIFN5bnRheDpcbiAqXG4gKiAgICAgbWF0aC50eXBlZChuYW1lLCBzaWduYXR1cmVzKSA6IGZ1bmN0aW9uXG4gKiAgICAgbWF0aC50eXBlZChzaWduYXR1cmVzKSA6IGZ1bmN0aW9uXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgIC8vIGNyZWF0ZSBhIHR5cGVkIGZ1bmN0aW9uIHdpdGggbXVsdGlwbGUgdHlwZXMgcGVyIGFyZ3VtZW50ICh0eXBlIHVuaW9uKVxuICogICAgIGNvbnN0IGZuMiA9IHR5cGVkKHtcbiAqICAgICAgICdudW1iZXIgfCBib29sZWFuJzogZnVuY3Rpb24gKGIpIHtcbiAqICAgICAgICAgcmV0dXJuICdiIGlzIGEgbnVtYmVyIG9yIGJvb2xlYW4nXG4gKiAgICAgICB9LFxuICogICAgICAgJ3N0cmluZywgbnVtYmVyIHwgYm9vbGVhbic6IGZ1bmN0aW9uIChhLCBiKSB7XG4gKiAgICAgICAgIHJldHVybiAnYSBpcyBhIHN0cmluZywgYiBpcyBhIG51bWJlciBvciBib29sZWFuJ1xuICogICAgICAgfVxuICogICAgIH0pXG4gKlxuICogICAgIC8vIGNyZWF0ZSBhIHR5cGVkIGZ1bmN0aW9uIHdpdGggYW4gYW55IHR5cGUgYXJndW1lbnRcbiAqICAgICBjb25zdCBsb2cgPSB0eXBlZCh7XG4gKiAgICAgICAnc3RyaW5nLCBhbnknOiBmdW5jdGlvbiAoZXZlbnQsIGRhdGEpIHtcbiAqICAgICAgICAgY29uc29sZS5sb2coJ2V2ZW50OiAnICsgZXZlbnQgKyAnLCBkYXRhOiAnICsgSlNPTi5zdHJpbmdpZnkoZGF0YSkpXG4gKiAgICAgICB9XG4gKiAgICAgfSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gW25hbWVdICAgICAgICAgICAgICAgICAgICAgICAgICBPcHRpb25hbCBuYW1lIGZvciB0aGUgdHlwZWQtZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgZnVuY3Rpb24+fSBzaWduYXR1cmVzICAgT2JqZWN0IHdpdGggb25lIG9yIG11bHRpcGxlIGZ1bmN0aW9uIHNpZ25hdHVyZXNcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gVGhlIGNyZWF0ZWQgdHlwZWQtZnVuY3Rpb24uXG4gKi9cbi8vIHJldHVybnMgYSBuZXcgaW5zdGFuY2Ugb2YgdHlwZWQtZnVuY3Rpb25cbnZhciBfY3JlYXRlVHlwZWQyID0gZnVuY3Rpb24gX2NyZWF0ZVR5cGVkKCkge1xuICAvLyBpbml0aWFsbHksIHJldHVybiB0aGUgb3JpZ2luYWwgaW5zdGFuY2Ugb2YgdHlwZWQtZnVuY3Rpb25cbiAgLy8gY29uc2VjdXRpdmVseSwgcmV0dXJuIGEgbmV3IGluc3RhbmNlIGZyb20gdHlwZWQuY3JlYXRlLlxuICBfY3JlYXRlVHlwZWQyID0gX3R5cGVkRnVuY3Rpb25bXCJkZWZhdWx0XCJdLmNyZWF0ZTtcbiAgcmV0dXJuIF90eXBlZEZ1bmN0aW9uW1wiZGVmYXVsdFwiXTtcbn07XG5cbnZhciBkZXBlbmRlbmNpZXMgPSBbJz9CaWdOdW1iZXInLCAnP0NvbXBsZXgnLCAnP0RlbnNlTWF0cml4JywgJz9GcmFjdGlvbiddO1xuLyoqXG4gKiBGYWN0b3J5IGZ1bmN0aW9uIGZvciBjcmVhdGluZyBhIG5ldyB0eXBlZCBpbnN0YW5jZVxuICogQHBhcmFtIHtPYmplY3R9IGRlcGVuZGVuY2llcyAgIE9iamVjdCB3aXRoIGRhdGEgdHlwZXMgbGlrZSBDb21wbGV4IGFuZCBCaWdOdW1iZXJcbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuXG52YXIgY3JlYXRlVHlwZWQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkoJ3R5cGVkJywgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiBjcmVhdGVUeXBlZChfcmVmKSB7XG4gIHZhciBCaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcixcbiAgICAgIENvbXBsZXggPSBfcmVmLkNvbXBsZXgsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXgsXG4gICAgICBGcmFjdGlvbiA9IF9yZWYuRnJhY3Rpb247XG5cbiAgLy8gVE9ETzogdHlwZWQtZnVuY3Rpb24gbXVzdCBiZSBhYmxlIHRvIHNpbGVudGx5IGlnbm9yZSBzaWduYXR1cmVzIHdpdGggdW5rbm93biBkYXRhIHR5cGVzXG4gIC8vIGdldCBhIG5ldyBpbnN0YW5jZSBvZiB0eXBlZC1mdW5jdGlvblxuICB2YXIgdHlwZWQgPSBfY3JlYXRlVHlwZWQyKCk7IC8vIGRlZmluZSBhbGwgdHlwZXMuIFRoZSBvcmRlciBvZiB0aGUgdHlwZXMgZGV0ZXJtaW5lcyBpbiB3aGljaCBvcmRlciBmdW5jdGlvblxuICAvLyBhcmd1bWVudHMgYXJlIHR5cGUtY2hlY2tlZCAoc28gZm9yIHBlcmZvcm1hbmNlIGl0J3MgaW1wb3J0YW50IHRvIHB1dCB0aGVcbiAgLy8gbW9zdCB1c2VkIHR5cGVzIGZpcnN0KS5cblxuXG4gIHR5cGVkLnR5cGVzID0gW3tcbiAgICBuYW1lOiAnbnVtYmVyJyxcbiAgICB0ZXN0OiBfaXMuaXNOdW1iZXJcbiAgfSwge1xuICAgIG5hbWU6ICdDb21wbGV4JyxcbiAgICB0ZXN0OiBfaXMuaXNDb21wbGV4XG4gIH0sIHtcbiAgICBuYW1lOiAnQmlnTnVtYmVyJyxcbiAgICB0ZXN0OiBfaXMuaXNCaWdOdW1iZXJcbiAgfSwge1xuICAgIG5hbWU6ICdGcmFjdGlvbicsXG4gICAgdGVzdDogX2lzLmlzRnJhY3Rpb25cbiAgfSwge1xuICAgIG5hbWU6ICdVbml0JyxcbiAgICB0ZXN0OiBfaXMuaXNVbml0XG4gIH0sIHtcbiAgICBuYW1lOiAnc3RyaW5nJyxcbiAgICB0ZXN0OiBfaXMuaXNTdHJpbmdcbiAgfSwge1xuICAgIG5hbWU6ICdDaGFpbicsXG4gICAgdGVzdDogX2lzLmlzQ2hhaW5cbiAgfSwge1xuICAgIG5hbWU6ICdBcnJheScsXG4gICAgdGVzdDogX2lzLmlzQXJyYXlcbiAgfSwge1xuICAgIG5hbWU6ICdNYXRyaXgnLFxuICAgIHRlc3Q6IF9pcy5pc01hdHJpeFxuICB9LCB7XG4gICAgbmFtZTogJ0RlbnNlTWF0cml4JyxcbiAgICB0ZXN0OiBfaXMuaXNEZW5zZU1hdHJpeFxuICB9LCB7XG4gICAgbmFtZTogJ1NwYXJzZU1hdHJpeCcsXG4gICAgdGVzdDogX2lzLmlzU3BhcnNlTWF0cml4XG4gIH0sIHtcbiAgICBuYW1lOiAnUmFuZ2UnLFxuICAgIHRlc3Q6IF9pcy5pc1JhbmdlXG4gIH0sIHtcbiAgICBuYW1lOiAnSW5kZXgnLFxuICAgIHRlc3Q6IF9pcy5pc0luZGV4XG4gIH0sIHtcbiAgICBuYW1lOiAnYm9vbGVhbicsXG4gICAgdGVzdDogX2lzLmlzQm9vbGVhblxuICB9LCB7XG4gICAgbmFtZTogJ1Jlc3VsdFNldCcsXG4gICAgdGVzdDogX2lzLmlzUmVzdWx0U2V0XG4gIH0sIHtcbiAgICBuYW1lOiAnSGVscCcsXG4gICAgdGVzdDogX2lzLmlzSGVscFxuICB9LCB7XG4gICAgbmFtZTogJ2Z1bmN0aW9uJyxcbiAgICB0ZXN0OiBfaXMuaXNGdW5jdGlvblxuICB9LCB7XG4gICAgbmFtZTogJ0RhdGUnLFxuICAgIHRlc3Q6IF9pcy5pc0RhdGVcbiAgfSwge1xuICAgIG5hbWU6ICdSZWdFeHAnLFxuICAgIHRlc3Q6IF9pcy5pc1JlZ0V4cFxuICB9LCB7XG4gICAgbmFtZTogJ251bGwnLFxuICAgIHRlc3Q6IF9pcy5pc051bGxcbiAgfSwge1xuICAgIG5hbWU6ICd1bmRlZmluZWQnLFxuICAgIHRlc3Q6IF9pcy5pc1VuZGVmaW5lZFxuICB9LCB7XG4gICAgbmFtZTogJ0FjY2Vzc29yTm9kZScsXG4gICAgdGVzdDogX2lzLmlzQWNjZXNzb3JOb2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnQXJyYXlOb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNBcnJheU5vZGVcbiAgfSwge1xuICAgIG5hbWU6ICdBc3NpZ25tZW50Tm9kZScsXG4gICAgdGVzdDogX2lzLmlzQXNzaWdubWVudE5vZGVcbiAgfSwge1xuICAgIG5hbWU6ICdCbG9ja05vZGUnLFxuICAgIHRlc3Q6IF9pcy5pc0Jsb2NrTm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ0NvbmRpdGlvbmFsTm9kZScsXG4gICAgdGVzdDogX2lzLmlzQ29uZGl0aW9uYWxOb2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnQ29uc3RhbnROb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNDb25zdGFudE5vZGVcbiAgfSwge1xuICAgIG5hbWU6ICdGdW5jdGlvbk5vZGUnLFxuICAgIHRlc3Q6IF9pcy5pc0Z1bmN0aW9uTm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ0Z1bmN0aW9uQXNzaWdubWVudE5vZGUnLFxuICAgIHRlc3Q6IF9pcy5pc0Z1bmN0aW9uQXNzaWdubWVudE5vZGVcbiAgfSwge1xuICAgIG5hbWU6ICdJbmRleE5vZGUnLFxuICAgIHRlc3Q6IF9pcy5pc0luZGV4Tm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ05vZGUnLFxuICAgIHRlc3Q6IF9pcy5pc05vZGVcbiAgfSwge1xuICAgIG5hbWU6ICdPYmplY3ROb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNPYmplY3ROb2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnT3BlcmF0b3JOb2RlJyxcbiAgICB0ZXN0OiBfaXMuaXNPcGVyYXRvck5vZGVcbiAgfSwge1xuICAgIG5hbWU6ICdQYXJlbnRoZXNpc05vZGUnLFxuICAgIHRlc3Q6IF9pcy5pc1BhcmVudGhlc2lzTm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ1JhbmdlTm9kZScsXG4gICAgdGVzdDogX2lzLmlzUmFuZ2VOb2RlXG4gIH0sIHtcbiAgICBuYW1lOiAnU3ltYm9sTm9kZScsXG4gICAgdGVzdDogX2lzLmlzU3ltYm9sTm9kZVxuICB9LCB7XG4gICAgbmFtZTogJ09iamVjdCcsXG4gICAgdGVzdDogX2lzLmlzT2JqZWN0XG4gIH0gLy8gb3JkZXIgJ09iamVjdCcgbGFzdCwgaXQgbWF0Y2hlcyBvbiBvdGhlciBjbGFzc2VzIHRvb1xuICBdO1xuICB0eXBlZC5jb252ZXJzaW9ucyA9IFt7XG4gICAgZnJvbTogJ251bWJlcicsXG4gICAgdG86ICdCaWdOdW1iZXInLFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoeCkge1xuICAgICAgaWYgKCFCaWdOdW1iZXIpIHtcbiAgICAgICAgdGhyb3dOb0JpZ251bWJlcih4KTtcbiAgICAgIH0gLy8gbm90ZTogY29udmVyc2lvbiBmcm9tIG51bWJlciB0byBCaWdOdW1iZXIgY2FuIGZhaWwgaWYgeCBoYXMgPjE1IGRpZ2l0c1xuXG5cbiAgICAgIGlmICgoMCwgX251bWJlci5kaWdpdHMpKHgpID4gMTUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGltcGxpY2l0bHkgY29udmVydCBhIG51bWJlciB3aXRoID4xNSBzaWduaWZpY2FudCBkaWdpdHMgdG8gQmlnTnVtYmVyICcgKyAnKHZhbHVlOiAnICsgeCArICcpLiAnICsgJ1VzZSBmdW5jdGlvbiBiaWdudW1iZXIoeCkgdG8gY29udmVydCB0byBCaWdOdW1iZXIuJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKHgpO1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdudW1iZXInLFxuICAgIHRvOiAnQ29tcGxleCcsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICBpZiAoIUNvbXBsZXgpIHtcbiAgICAgICAgdGhyb3dOb0NvbXBsZXgoeCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKTtcbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnbnVtYmVyJyxcbiAgICB0bzogJ3N0cmluZycsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICByZXR1cm4geCArICcnO1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdCaWdOdW1iZXInLFxuICAgIHRvOiAnQ29tcGxleCcsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICBpZiAoIUNvbXBsZXgpIHtcbiAgICAgICAgdGhyb3dOb0NvbXBsZXgoeCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LnRvTnVtYmVyKCksIDApO1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdGcmFjdGlvbicsXG4gICAgdG86ICdCaWdOdW1iZXInLFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoeCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGltcGxpY2l0bHkgY29udmVydCBhIEZyYWN0aW9uIHRvIEJpZ051bWJlciBvciB2aWNlIHZlcnNhLiAnICsgJ1VzZSBmdW5jdGlvbiBiaWdudW1iZXIoeCkgdG8gY29udmVydCB0byBCaWdOdW1iZXIgb3IgZnJhY3Rpb24oeCkgdG8gY29udmVydCB0byBGcmFjdGlvbi4nKTtcbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnRnJhY3Rpb24nLFxuICAgIHRvOiAnQ29tcGxleCcsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICBpZiAoIUNvbXBsZXgpIHtcbiAgICAgICAgdGhyb3dOb0NvbXBsZXgoeCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LnZhbHVlT2YoKSwgMCk7XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ251bWJlcicsXG4gICAgdG86ICdGcmFjdGlvbicsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydCh4KSB7XG4gICAgICBpZiAoIUZyYWN0aW9uKSB7XG4gICAgICAgIHRocm93Tm9GcmFjdGlvbih4KTtcbiAgICAgIH1cblxuICAgICAgdmFyIGYgPSBuZXcgRnJhY3Rpb24oeCk7XG5cbiAgICAgIGlmIChmLnZhbHVlT2YoKSAhPT0geCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgaW1wbGljaXRseSBjb252ZXJ0IGEgbnVtYmVyIHRvIGEgRnJhY3Rpb24gd2hlbiB0aGVyZSB3aWxsIGJlIGEgbG9zcyBvZiBwcmVjaXNpb24gJyArICcodmFsdWU6ICcgKyB4ICsgJykuICcgKyAnVXNlIGZ1bmN0aW9uIGZyYWN0aW9uKHgpIHRvIGNvbnZlcnQgdG8gRnJhY3Rpb24uJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmO1xuICAgIH1cbiAgfSwge1xuICAgIC8vIEZJWE1FOiBhZGQgY29udmVyc2lvbiBmcm9tIEZyYWN0aW9uIHRvIG51bWJlciwgZm9yIGV4YW1wbGUgZm9yIGBzcXJ0KGZyYWN0aW9uKDEsMykpYFxuICAgIC8vICBmcm9tOiAnRnJhY3Rpb24nLFxuICAgIC8vICB0bzogJ251bWJlcicsXG4gICAgLy8gIGNvbnZlcnQ6IGZ1bmN0aW9uICh4KSB7XG4gICAgLy8gICAgcmV0dXJuIHgudmFsdWVPZigpXG4gICAgLy8gIH1cbiAgICAvLyB9LCB7XG4gICAgZnJvbTogJ3N0cmluZycsXG4gICAgdG86ICdudW1iZXInLFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoeCkge1xuICAgICAgdmFyIG4gPSBOdW1iZXIoeCk7XG5cbiAgICAgIGlmIChpc05hTihuKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IFwiJyArIHggKyAnXCIgdG8gYSBudW1iZXInKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG47XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ3N0cmluZycsXG4gICAgdG86ICdCaWdOdW1iZXInLFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoeCkge1xuICAgICAgaWYgKCFCaWdOdW1iZXIpIHtcbiAgICAgICAgdGhyb3dOb0JpZ251bWJlcih4KTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29udmVydCBcIicgKyB4ICsgJ1wiIHRvIEJpZ051bWJlcicpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdzdHJpbmcnLFxuICAgIHRvOiAnRnJhY3Rpb24nLFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoeCkge1xuICAgICAgaWYgKCFGcmFjdGlvbikge1xuICAgICAgICB0aHJvd05vRnJhY3Rpb24oeCk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oeCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29udmVydCBcIicgKyB4ICsgJ1wiIHRvIEZyYWN0aW9uJyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ3N0cmluZycsXG4gICAgdG86ICdDb21wbGV4JyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHtcbiAgICAgIGlmICghQ29tcGxleCkge1xuICAgICAgICB0aHJvd05vQ29tcGxleCh4KTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgXCInICsgeCArICdcIiB0byBDb21wbGV4Jyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ2Jvb2xlYW4nLFxuICAgIHRvOiAnbnVtYmVyJyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHtcbiAgICAgIHJldHVybiAreDtcbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnYm9vbGVhbicsXG4gICAgdG86ICdCaWdOdW1iZXInLFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoeCkge1xuICAgICAgaWYgKCFCaWdOdW1iZXIpIHtcbiAgICAgICAgdGhyb3dOb0JpZ251bWJlcih4KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoK3gpO1xuICAgIH1cbiAgfSwge1xuICAgIGZyb206ICdib29sZWFuJyxcbiAgICB0bzogJ0ZyYWN0aW9uJyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KHgpIHtcbiAgICAgIGlmICghRnJhY3Rpb24pIHtcbiAgICAgICAgdGhyb3dOb0ZyYWN0aW9uKHgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKCt4KTtcbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnYm9vbGVhbicsXG4gICAgdG86ICdzdHJpbmcnLFxuICAgIGNvbnZlcnQ6IGZ1bmN0aW9uIGNvbnZlcnQoeCkge1xuICAgICAgcmV0dXJuIFN0cmluZyh4KTtcbiAgICB9XG4gIH0sIHtcbiAgICBmcm9tOiAnQXJyYXknLFxuICAgIHRvOiAnTWF0cml4JyxcbiAgICBjb252ZXJ0OiBmdW5jdGlvbiBjb252ZXJ0KGFycmF5KSB7XG4gICAgICBpZiAoIURlbnNlTWF0cml4KSB7XG4gICAgICAgIHRocm93Tm9NYXRyaXgoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeChhcnJheSk7XG4gICAgfVxuICB9LCB7XG4gICAgZnJvbTogJ01hdHJpeCcsXG4gICAgdG86ICdBcnJheScsXG4gICAgY29udmVydDogZnVuY3Rpb24gY29udmVydChtYXRyaXgpIHtcbiAgICAgIHJldHVybiBtYXRyaXgudmFsdWVPZigpO1xuICAgIH1cbiAgfV07XG4gIHJldHVybiB0eXBlZDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVUeXBlZCA9IGNyZWF0ZVR5cGVkO1xuXG5mdW5jdGlvbiB0aHJvd05vQmlnbnVtYmVyKHgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNvbnZlcnQgdmFsdWUgXCIuY29uY2F0KHgsIFwiIGludG8gYSBCaWdOdW1iZXI6IG5vIGNsYXNzICdCaWdOdW1iZXInIHByb3ZpZGVkXCIpKTtcbn1cblxuZnVuY3Rpb24gdGhyb3dOb0NvbXBsZXgoeCkge1xuICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgY29udmVydCB2YWx1ZSBcIi5jb25jYXQoeCwgXCIgaW50byBhIENvbXBsZXggbnVtYmVyOiBubyBjbGFzcyAnQ29tcGxleCcgcHJvdmlkZWRcIikpO1xufVxuXG5mdW5jdGlvbiB0aHJvd05vTWF0cml4KCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGFycmF5IGludG8gYSBNYXRyaXg6IG5vIGNsYXNzIFxcJ0RlbnNlTWF0cml4XFwnIHByb3ZpZGVkJyk7XG59XG5cbmZ1bmN0aW9uIHRocm93Tm9GcmFjdGlvbih4KSB7XG4gIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBjb252ZXJ0IHZhbHVlIFwiLmNvbmNhdCh4LCBcIiBpbnRvIGEgRnJhY3Rpb24sIG5vIGNsYXNzICdGcmFjdGlvbicgcHJvdmlkZWQuXCIpKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiOyBpZiAodHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIpIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9OyB9IGVsc2UgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIG9iaiAmJiB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7IH07IH0gcmV0dXJuIF90eXBlb2Yob2JqKTsgfVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hbGwgPSB2b2lkIDA7XG5cbnZhciBhbGxGYWN0b3JpZXMgPSBfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZChyZXF1aXJlKFwiLi4vZmFjdG9yaWVzQW55XCIpKTtcblxuZnVuY3Rpb24gX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlKCkgeyBpZiAodHlwZW9mIFdlYWtNYXAgIT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIG51bGw7IHZhciBjYWNoZSA9IG5ldyBXZWFrTWFwKCk7IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSA9IGZ1bmN0aW9uIF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSgpIHsgcmV0dXJuIGNhY2hlOyB9OyByZXR1cm4gY2FjaGU7IH1cblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQob2JqKSB7IGlmIChvYmogJiYgb2JqLl9fZXNNb2R1bGUpIHsgcmV0dXJuIG9iajsgfSBpZiAob2JqID09PSBudWxsIHx8IF90eXBlb2Yob2JqKSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2Ygb2JqICE9PSBcImZ1bmN0aW9uXCIpIHsgcmV0dXJuIHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9IHZhciBjYWNoZSA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSgpOyBpZiAoY2FjaGUgJiYgY2FjaGUuaGFzKG9iaikpIHsgcmV0dXJuIGNhY2hlLmdldChvYmopOyB9IHZhciBuZXdPYmogPSB7fTsgdmFyIGhhc1Byb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOyBmb3IgKHZhciBrZXkgaW4gb2JqKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7IHZhciBkZXNjID0gaGFzUHJvcGVydHlEZXNjcmlwdG9yID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmosIGtleSkgOiBudWxsOyBpZiAoZGVzYyAmJiAoZGVzYy5nZXQgfHwgZGVzYy5zZXQpKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuZXdPYmosIGtleSwgZGVzYyk7IH0gZWxzZSB7IG5ld09ialtrZXldID0gb2JqW2tleV07IH0gfSB9IG5ld09ialtcImRlZmF1bHRcIl0gPSBvYmo7IGlmIChjYWNoZSkgeyBjYWNoZS5zZXQob2JqLCBuZXdPYmopOyB9IHJldHVybiBuZXdPYmo7IH1cblxuLy8gY3JlYXRpbmcgYWxsIGZhY3RvcmllcyBoZXJlIGluIGEgc2VwYXJhdGUgZmlsZSBpcyBuZWVkZWQgdG8gZ2V0IHRyZWUtc2hha2luZyB3b3JraW5nXG52YXIgYWxsID0gYWxsRmFjdG9yaWVzO1xuZXhwb3J0cy5hbGwgPSBhbGw7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbmZpZyA9IHZvaWQgMDtcblxudmFyIF9jb25maWcgPSByZXF1aXJlKFwiLi4vY29yZS9jb25maWdcIik7XG5cbnZhciBfY29uZmlnMiA9IHJlcXVpcmUoXCIuLi9jb3JlL2Z1bmN0aW9uL2NvbmZpZ1wiKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuLy8gY3JlYXRlIGEgcmVhZC1vbmx5IHZlcnNpb24gb2YgY29uZmlnXG52YXIgY29uZmlnID0gLyogI19fUFVSRV9fICovZnVuY3Rpb24gY29uZmlnKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBnbG9iYWwgY29uZmlnIGlzIHJlYWRvbmx5LiBcXG4nICsgJ1BsZWFzZSBjcmVhdGUgYSBtYXRoanMgaW5zdGFuY2UgaWYgeW91IHdhbnQgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uIFxcbicgKyAnRXhhbXBsZTpcXG4nICsgJ1xcbicgKyAnICBpbXBvcnQgeyBjcmVhdGUsIGFsbCB9IGZyb20gXFwnbWF0aGpzXFwnO1xcbicgKyAnICBjb25zdCBtYXRoanMgPSBjcmVhdGUoYWxsKTtcXG4nICsgJyAgbWF0aGpzLmNvbmZpZyh7IG51bWJlcjogXFwnQmlnTnVtYmVyXFwnIH0pO1xcbicpO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5mcmVlemUoX2NvbmZpZy5ERUZBVUxUX0NPTkZJRyk7XG59O1xuXG5leHBvcnRzLmNvbmZpZyA9IGNvbmZpZztcblxuX2V4dGVuZHMoY29uZmlnLCBfY29uZmlnLkRFRkFVTFRfQ09ORklHLCB7XG4gIE1BVFJJWF9PUFRJT05TOiBfY29uZmlnMi5NQVRSSVhfT1BUSU9OUyxcbiAgTlVNQkVSX09QVElPTlM6IF9jb25maWcyLk5VTUJFUl9PUFRJT05TXG59KTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInR5cGVkRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSZXN1bHRTZXREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Jlc3VsdFNldC5SZXN1bHRTZXREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQmlnTnVtYmVyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQ29tcGxleERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRnJhY3Rpb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuRnJhY3Rpb25EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmFuZ2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1JhbmdlQ2xhc3MuUmFuZ2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTWF0cml4RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcy5NYXRyaXhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY2xvbmVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Nsb25lLmNsb25lRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzSW50ZWdlckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmlzSW50ZWdlckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc05lZ2F0aXZlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmlzTmVnYXRpdmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNOdW1lcmljRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJc051bWVyaWMuaXNOdW1lcmljRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImhhc051bWVyaWNWYWx1ZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSGFzTnVtZXJpY1ZhbHVlLmhhc051bWVyaWNWYWx1ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1Bvc2l0aXZlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlLmlzUG9zaXRpdmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNaZXJvRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJc1plcm8uaXNaZXJvRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTmFORGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJc05hTi5pc05hTkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0eXBlT2ZEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1R5cGVPZi50eXBlT2ZEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHlwZW9mRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNEZXByZWNhdGVkVHlwZW9mLnR5cGVvZkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlcXVhbFNjYWxhckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU3BhcnNlTWF0cml4RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5TcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibnVtYmVyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNOdW1iZXIubnVtYmVyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0cmluZ0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3RyaW5nLnN0cmluZ0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJib29sZWFuRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNCb29sZWFuLmJvb2xlYW5EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYmlnbnVtYmVyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNCaWdudW1iZXIuYmlnbnVtYmVyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbXBsZXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvbXBsZXguY29tcGxleERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmcmFjdGlvbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRnJhY3Rpb24uZnJhY3Rpb25EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWF0cml4RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNwbGl0VW5pdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3BsaXRVbml0LnNwbGl0VW5pdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1bmFyeU1pbnVzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLnVuYXJ5TWludXNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidW5hcnlQbHVzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNVbmFyeVBsdXMudW5hcnlQbHVzRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFic0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQWJzLmFic0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhcHBseURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXBwbHkuYXBwbHlEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWRkU2NhbGFyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNicnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NicnQuY2JydERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjZWlsRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDZWlsLmNlaWxEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3ViZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ3ViZS5jdWJlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImV4cERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRXhwLmV4cERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJleHBtMURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRXhwbS5leHBtMURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmaXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0ZpeC5maXhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZmxvb3JEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Zsb29yLmZsb29yRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdjZERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzR2NkLmdjZERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsY21EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0xjbS5sY21EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibG9nMTBEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0xvZy5sb2cxMERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsb2cyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNMb2cyLmxvZzJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibW9kRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNb2QubW9kRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtdWx0aXBseURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibnRoUm9vdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTnRoUm9vdC5udGhSb290RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNpZ25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NpZ24uc2lnbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzcXJ0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcXJ0LnNxcnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3F1YXJlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcXVhcmUuc3F1YXJlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN1YnRyYWN0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ4Z2NkRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNYZ2NkLnhnY2REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZG90TXVsdGlwbHlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0RvdE11bHRpcGx5LmRvdE11bHRpcGx5RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJpdEFuZERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQml0QW5kLmJpdEFuZERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJiaXROb3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0JpdE5vdC5iaXROb3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYml0T3JEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0JpdE9yLmJpdE9yRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJpdFhvckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQml0WG9yLmJpdFhvckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhcmdEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FyZy5hcmdEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29uakRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29uai5jb25qRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImltRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJbS5pbURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmUucmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibm90RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNOb3Qubm90RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm9yRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNPci5vckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ4b3JEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1hvci54b3JEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29uY2F0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb25jYXQuY29uY2F0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbHVtbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29sdW1uLmNvbHVtbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcm9zc0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ3Jvc3MuY3Jvc3NEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGlhZ0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRGlhZy5kaWFnRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImV5ZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRXllLmV5ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmaWx0ZXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0ZpbHRlci5maWx0ZXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZmxhdHRlbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRmxhdHRlbi5mbGF0dGVuRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZvckVhY2hEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0ZvckVhY2guZm9yRWFjaERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnZXRNYXRyaXhEYXRhVHlwZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzR2V0TWF0cml4RGF0YVR5cGUuZ2V0TWF0cml4RGF0YVR5cGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaWRlbnRpdHlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0lkZW50aXR5LmlkZW50aXR5RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImtyb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0tyb24ua3JvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYXBEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01hcC5tYXBEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwib25lc0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzT25lcy5vbmVzRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJhbmdlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSYW5nZS5yYW5nZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZXNoYXBlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSZXNoYXBlLnJlc2hhcGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmVzaXplRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSZXNpemUucmVzaXplRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJvd0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUm93LnJvd0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzaXplRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3F1ZWV6ZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3F1ZWV6ZS5zcXVlZXplRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN1YnNldERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3Vic2V0LnN1YnNldERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0cmFuc3Bvc2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1RyYW5zcG9zZS50cmFuc3Bvc2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3RyYW5zcG9zZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ3RyYW5zcG9zZS5jdHJhbnNwb3NlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInplcm9zRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNaZXJvcy56ZXJvc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlcmZEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0VyZi5lcmZEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibW9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTW9kZS5tb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInByb2REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Byb2QucHJvZERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmb3JtYXREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Zvcm1hdC5mb3JtYXREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHJpbnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1ByaW50LnByaW50RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRvRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNUby50b0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1ByaW1lRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJc1ByaW1lLmlzUHJpbWVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibnVtZXJpY0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTnVtZXJpYy5udW1lcmljRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRpdmlkZVNjYWxhckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwb3dEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Bvdy5wb3dEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicm91bmREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1JvdW5kLnJvdW5kRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxvZ0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTG9nMy5sb2dEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibG9nMXBEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0xvZzFwLmxvZzFwRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm50aFJvb3RzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNOdGhSb290cy5udGhSb290c0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkb3RQb3dEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0RvdFBvdy5kb3RQb3dEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZG90RGl2aWRlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNEb3REaXZpZGUuZG90RGl2aWRlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImxzb2x2ZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTHNvbHZlLmxzb2x2ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1c29sdmVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Vzb2x2ZS51c29sdmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibGVmdFNoaWZ0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNMZWZ0U2hpZnQubGVmdFNoaWZ0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJpZ2h0QXJpdGhTaGlmdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmlnaHRBcml0aFNoaWZ0LnJpZ2h0QXJpdGhTaGlmdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyaWdodExvZ1NoaWZ0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSaWdodExvZ1NoaWZ0LnJpZ2h0TG9nU2hpZnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYW5kRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBbmQuYW5kRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbXBhcmVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvbXBhcmUuY29tcGFyZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb21wYXJlTmF0dXJhbERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tcGFyZVRleHREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvbXBhcmVUZXh0LmNvbXBhcmVUZXh0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVxdWFsRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFcXVhbC5lcXVhbERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlcXVhbFRleHREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0VxdWFsVGV4dC5lcXVhbFRleHREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic21hbGxlckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU21hbGxlci5zbWFsbGVyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNtYWxsZXJFcURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU21hbGxlckVxLnNtYWxsZXJFcURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsYXJnZXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibGFyZ2VyRXFEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0xhcmdlckVxLmxhcmdlckVxRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRlZXBFcXVhbERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRGVlcEVxdWFsLmRlZXBFcXVhbERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ1bmVxdWFsRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNVbmVxdWFsLnVuZXF1YWxEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGFydGl0aW9uU2VsZWN0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNQYXJ0aXRpb25TZWxlY3QucGFydGl0aW9uU2VsZWN0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNvcnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NvcnQuc29ydERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYXhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01heC5tYXhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWluRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNaW4ubWluRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkltbXV0YWJsZURlbnNlTWF0cml4RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJbW11dGFibGVEZW5zZU1hdHJpeENsYXNzLkltbXV0YWJsZURlbnNlTWF0cml4RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkluZGV4RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkZpYm9uYWNjaUhlYXBEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0ZpYm9uYWNjaUhlYXBDbGFzcy5GaWJvbmFjY2lIZWFwRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlNwYURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3BhQ2xhc3MuU3BhRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlVuaXREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInVuaXREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1VuaXRGdW5jdGlvbi51bml0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNwYXJzZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3BhcnNlLnNwYXJzZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVVbml0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDcmVhdGVVbml0LmNyZWF0ZVVuaXREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWNvc0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQWNvcy5hY29zRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFjb3NoRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBY29zaC5hY29zaERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhY290RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBY290LmFjb3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYWNvdGhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Fjb3RoLmFjb3RoRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFjc2NEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Fjc2MuYWNzY0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhY3NjaERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQWNzY2guYWNzY2hEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXNlY0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXNlYy5hc2VjRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFzZWNoRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBc2VjaC5hc2VjaERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhc2luRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBc2luLmFzaW5EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXNpbmhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FzaW5oLmFzaW5oRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImF0YW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0F0YW4uYXRhbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhdGFuMkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXRhbjIuYXRhbjJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXRhbmhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0F0YW5oLmF0YW5oRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvc0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29zLmNvc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb3NoRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb3NoLmNvc2hEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY290RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb3QuY290RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvdGhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvdGguY290aERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjc2NEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NzYy5jc2NEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3NjaERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ3NjaC5jc2NoRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNlY0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2VjLnNlY0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZWNoRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZWNoLnNlY2hEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2luRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTaW4uc2luRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNpbmhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Npbmguc2luaERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0YW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Rhbi50YW5EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGFuaERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVGFuaC50YW5oRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNldENhcnRlc2lhbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2V0Q2FydGVzaWFuLnNldENhcnRlc2lhbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXREaWZmZXJlbmNlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZXREaWZmZXJlbmNlLnNldERpZmZlcmVuY2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0RGlzdGluY3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NldERpc3RpbmN0LnNldERpc3RpbmN0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNldEludGVyc2VjdERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2V0SW50ZXJzZWN0LnNldEludGVyc2VjdERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXRJc1N1YnNldERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2V0SXNTdWJzZXQuc2V0SXNTdWJzZXREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0TXVsdGlwbGljaXR5RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZXRNdWx0aXBsaWNpdHkuc2V0TXVsdGlwbGljaXR5RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNldFBvd2Vyc2V0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZXRQb3dlcnNldC5zZXRQb3dlcnNldERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZXRTaXplRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZXRTaXplLnNldFNpemVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic2V0U3ltRGlmZmVyZW5jZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU2V0U3ltRGlmZmVyZW5jZS5zZXRTeW1EaWZmZXJlbmNlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNldFVuaW9uRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTZXRVbmlvbi5zZXRVbmlvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJhZGREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaHlwb3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0h5cG90Lmh5cG90RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5vcm1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc05vcm0ubm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkb3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0RvdC5kb3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidHJhY2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1RyYWNlLnRyYWNlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImluZGV4RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJbmRleC5pbmRleERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQWNjZXNzb3JOb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBY2Nlc3Nvck5vZGUuQWNjZXNzb3JOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkFycmF5Tm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXJyYXlOb2RlLkFycmF5Tm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJBc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXNzaWdubWVudE5vZGUuQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiQmxvY2tOb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNCbG9ja05vZGUuQmxvY2tOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNvbmRpdGlvbmFsTm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29uZGl0aW9uYWxOb2RlLkNvbmRpdGlvbmFsTm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJDb25zdGFudE5vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvbnN0YW50Tm9kZS5Db25zdGFudE5vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5GdW5jdGlvbkFzc2lnbm1lbnROb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkluZGV4Tm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSW5kZXhOb2RlLkluZGV4Tm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJPYmplY3ROb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNPYmplY3ROb2RlLk9iamVjdE5vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiT3BlcmF0b3JOb2RlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNPcGVyYXRvck5vZGUuT3BlcmF0b3JOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlLlBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJSYW5nZU5vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1JhbmdlTm9kZS5SYW5nZU5vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiUmVsYXRpb25hbE5vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1JlbGF0aW9uYWxOb2RlLlJlbGF0aW9uYWxOb2RlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIlN5bWJvbE5vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1N5bWJvbE5vZGUuU3ltYm9sTm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJGdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZS5GdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGFyc2VEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BhcnNlLnBhcnNlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbXBpbGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvbXBpbGUuY29tcGlsZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJldmFsdWF0ZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRXZhbHVhdGUuZXZhbHVhdGVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXZhbERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRGVwcmVjYXRlZEV2YWwuZXZhbERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJQYXJzZXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BhcnNlckNsYXNzLlBhcnNlckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwYXJzZXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BhcnNlci5wYXJzZXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibHVwRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNMdXAubHVwRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInFyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNRci5xckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzbHVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NsdS5zbHVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibHVzb2x2ZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTHVzb2x2ZS5sdXNvbHZlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkhlbHBEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0hlbHBDbGFzcy5IZWxwRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkNoYWluRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDaGFpbkNsYXNzLkNoYWluRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImhlbHBEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0hlbHAuaGVscERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjaGFpbkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ2hhaW4uY2hhaW5EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGV0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNEZXQuZGV0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImludkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSW52LmludkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlaWdzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFaWdzLmVpZ3NEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZXhwbURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRXhwbTIuZXhwbURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzcXJ0bURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3FydG0uc3FydG1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZGl2aWRlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNEaXZpZGUuZGl2aWRlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRpc3RhbmNlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNEaXN0YW5jZS5kaXN0YW5jZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpbnRlcnNlY3REZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0ludGVyc2VjdC5pbnRlcnNlY3REZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3VtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTdW0uc3VtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1lYW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01lYW4ubWVhbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtZWRpYW5EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01lZGlhbi5tZWRpYW5EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWFkRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNYWQubWFkRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZhcmlhbmNlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNWYXJpYW5jZS52YXJpYW5jZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2YXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRWYXIudmFyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInF1YW50aWxlU2VxRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNRdWFudGlsZVNlcS5xdWFudGlsZVNlcURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdGREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1N0ZC5zdGREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tYmluYXRpb25zRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMuY29tYmluYXRpb25zRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbWJpbmF0aW9uc1dpdGhSZXBEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvbWJpbmF0aW9uc1dpdGhSZXAuY29tYmluYXRpb25zV2l0aFJlcERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnYW1tYURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzR2FtbWEuZ2FtbWFEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZmFjdG9yaWFsRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGYWN0b3JpYWwuZmFjdG9yaWFsRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImtsZGl2ZXJnZW5jZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzS2xkaXZlcmdlbmNlLmtsZGl2ZXJnZW5jZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtdWx0aW5vbWlhbERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTXVsdGlub21pYWwubXVsdGlub21pYWxEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGVybXV0YXRpb25zRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNQZXJtdXRhdGlvbnMucGVybXV0YXRpb25zRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBpY2tSYW5kb21EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BpY2tSYW5kb20ucGlja1JhbmRvbURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyYW5kb21EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1JhbmRvbS5yYW5kb21EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmFuZG9tSW50RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNSYW5kb21JbnQucmFuZG9tSW50RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0aXJsaW5nUzJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1N0aXJsaW5nUy5zdGlybGluZ1MyRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJlbGxOdW1iZXJzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNCZWxsTnVtYmVycy5iZWxsTnVtYmVyc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjYXRhbGFuRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDYXRhbGFuLmNhdGFsYW5EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29tcG9zaXRpb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvbXBvc2l0aW9uLmNvbXBvc2l0aW9uRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNpbXBsaWZ5RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTaW1wbGlmeS5zaW1wbGlmeURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZXJpdmF0aXZlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNEZXJpdmF0aXZlLmRlcml2YXRpdmVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmF0aW9uYWxpemVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1JhdGlvbmFsaXplLnJhdGlvbmFsaXplRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJldml2ZXJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1Jldml2ZXIucmV2aXZlckRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZXBsYWNlckRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUmVwbGFjZXIucmVwbGFjZXJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRS5lRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1VwcGVyY2FzZUUuRURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmYWxzZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRmFsc2UuZmFsc2VEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSS5pRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkluZmluaXR5RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJbmZpbml0eS5JbmZpbml0eURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMTjEwRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNMTi5MTjEwRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkxOMkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTE4yLkxOMkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJMT0cxMEVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0xPRzEwRS5MT0cxMEVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiTE9HMkVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0xPRzJFLkxPRzJFRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5hTkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTmFOLk5hTkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJudWxsRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNOdWxsLm51bGxEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGhpRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNQaGkucGhpRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBpRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNQaS5waURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJQSURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzVXBwZXJjYXNlUGkuUElEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU1FSVDFfMkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU1FSVDFfLlNRUlQxXzJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiU1FSVDJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NRUlQuU1FSVDJEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidGF1RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNUYXUudGF1RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInRydWVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1RydWUudHJ1ZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2ZXJzaW9uRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNWZXJzaW9uLnZlcnNpb25EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXRvbWljTWFzc0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQXRvbWljTWFzcy5hdG9taWNNYXNzRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImF2b2dhZHJvRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNBdm9nYWRyby5hdm9nYWRyb0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJib2hyTWFnbmV0b25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0JvaHJNYWduZXRvbi5ib2hyTWFnbmV0b25EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYm9oclJhZGl1c0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQm9oclJhZGl1cy5ib2hyUmFkaXVzRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImJvbHR6bWFubkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQm9sdHptYW5uLmJvbHR6bWFubkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjbGFzc2ljYWxFbGVjdHJvblJhZGl1c0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ2xhc3NpY2FsRWxlY3Ryb25SYWRpdXMuY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXNEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29uZHVjdGFuY2VRdWFudHVtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb25kdWN0YW5jZVF1YW50dW0uY29uZHVjdGFuY2VRdWFudHVtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvdWxvbWJEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0NvdWxvbWIuY291bG9tYkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJkZXV0ZXJvbk1hc3NEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0RldXRlcm9uTWFzcy5kZXV0ZXJvbk1hc3NEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZWZpbW92RmFjdG9yRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNFZmltb3ZGYWN0b3IuZWZpbW92RmFjdG9yRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImVsZWN0cmljQ29uc3RhbnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0VsZWN0cmljQ29uc3RhbnQuZWxlY3RyaWNDb25zdGFudERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJlbGVjdHJvbk1hc3NEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0VsZWN0cm9uTWFzcy5lbGVjdHJvbk1hc3NEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZWxlbWVudGFyeUNoYXJnZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRWxlbWVudGFyeUNoYXJnZS5lbGVtZW50YXJ5Q2hhcmdlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZhcmFkYXlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0ZhcmFkYXkuZmFyYWRheURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmZXJtaUNvdXBsaW5nRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGZXJtaUNvdXBsaW5nLmZlcm1pQ291cGxpbmdEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZmluZVN0cnVjdHVyZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRmluZVN0cnVjdHVyZS5maW5lU3RydWN0dXJlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImZpcnN0UmFkaWF0aW9uRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNGaXJzdFJhZGlhdGlvbi5maXJzdFJhZGlhdGlvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJnYXNDb25zdGFudERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzR2FzQ29uc3RhbnQuZ2FzQ29uc3RhbnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZ3Jhdml0YXRpb25Db25zdGFudERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzR3Jhdml0YXRpb25Db25zdGFudC5ncmF2aXRhdGlvbkNvbnN0YW50RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImdyYXZpdHlEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0dyYXZpdHkuZ3Jhdml0eURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJoYXJ0cmVlRW5lcmd5RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNIYXJ0cmVlRW5lcmd5LmhhcnRyZWVFbmVyZ3lEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bS5pbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImtsaXR6aW5nRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNLbGl0emluZy5rbGl0emluZ0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJsb3NjaG1pZHREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0xvc2NobWlkdC5sb3NjaG1pZHREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWFnbmV0aWNDb25zdGFudERlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzTWFnbmV0aWNDb25zdGFudC5tYWduZXRpY0NvbnN0YW50RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1hZ25ldGljRmx1eFF1YW50dW1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01hZ25ldGljRmx1eFF1YW50dW0ubWFnbmV0aWNGbHV4UXVhbnR1bURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtb2xhck1hc3NEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01vbGFyTWFzcy5tb2xhck1hc3NEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibW9sYXJNYXNzQzEyRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNb2xhck1hc3NDLm1vbGFyTWFzc0MxMkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtb2xhclBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNb2xhclBsYW5ja0NvbnN0YW50Lm1vbGFyUGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibW9sYXJWb2x1bWVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01vbGFyVm9sdW1lLm1vbGFyVm9sdW1lRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm5ldXRyb25NYXNzRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNOZXV0cm9uTWFzcy5uZXV0cm9uTWFzc0RlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJudWNsZWFyTWFnbmV0b25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc051Y2xlYXJNYWduZXRvbi5udWNsZWFyTWFnbmV0b25EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGxhbmNrQ2hhcmdlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNQbGFuY2tDaGFyZ2UucGxhbmNrQ2hhcmdlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNQbGFuY2tDb25zdGFudC5wbGFuY2tDb25zdGFudERlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwbGFuY2tMZW5ndGhEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1BsYW5ja0xlbmd0aC5wbGFuY2tMZW5ndGhEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGxhbmNrTWFzc0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUGxhbmNrTWFzcy5wbGFuY2tNYXNzRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBsYW5ja1RlbXBlcmF0dXJlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNQbGFuY2tUZW1wZXJhdHVyZS5wbGFuY2tUZW1wZXJhdHVyZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJwbGFuY2tUaW1lRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNQbGFuY2tUaW1lLnBsYW5ja1RpbWVEZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicHJvdG9uTWFzc0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUHJvdG9uTWFzcy5wcm90b25NYXNzRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInF1YW50dW1PZkNpcmN1bGF0aW9uRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNRdWFudHVtT2ZDaXJjdWxhdGlvbi5xdWFudHVtT2ZDaXJjdWxhdGlvbkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJyZWR1Y2VkUGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1JlZHVjZWRQbGFuY2tDb25zdGFudC5yZWR1Y2VkUGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicnlkYmVyZ0RlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUnlkYmVyZy5yeWRiZXJnRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInNhY2t1clRldHJvZGVEZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NhY2t1clRldHJvZGUuc2Fja3VyVGV0cm9kZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzZWNvbmRSYWRpYXRpb25EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1NlY29uZFJhZGlhdGlvbi5zZWNvbmRSYWRpYXRpb25EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3BlZWRPZkxpZ2h0RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNTcGVlZE9mTGlnaHQuc3BlZWRPZkxpZ2h0RGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0ZWZhbkJvbHR6bWFubkRlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3RlZmFuQm9sdHptYW5uLnN0ZWZhbkJvbHR6bWFubkRlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ0aG9tc29uQ3Jvc3NTZWN0aW9uRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNUaG9tc29uQ3Jvc3NTZWN0aW9uLnRob21zb25Dcm9zc1NlY3Rpb25EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmFjdXVtSW1wZWRhbmNlRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNWYWN1dW1JbXBlZGFuY2UudmFjdXVtSW1wZWRhbmNlRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIndlYWtNaXhpbmdBbmdsZURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzV2Vha01peGluZ0FuZ2xlLndlYWtNaXhpbmdBbmdsZURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ3aWVuRGlzcGxhY2VtZW50RGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNXaWVuRGlzcGxhY2VtZW50LndpZW5EaXNwbGFjZW1lbnREZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiYXBwbHlUcmFuc2Zvcm1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FwcGx5VHJhbnNmb3JtLmFwcGx5VHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNvbHVtblRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzQ29sdW1uVHJhbnNmb3JtLmNvbHVtblRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJmaWx0ZXJUcmFuc2Zvcm1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc0ZpbHRlclRyYW5zZm9ybS5maWx0ZXJUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZm9yRWFjaFRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzRm9yRWFjaFRyYW5zZm9ybS5mb3JFYWNoVHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImluZGV4VHJhbnNmb3JtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNJbmRleFRyYW5zZm9ybS5pbmRleFRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtYXBUcmFuc2Zvcm1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01hcFRyYW5zZm9ybS5tYXBUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwibWF4VHJhbnNmb3JtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNNYXhUcmFuc2Zvcm0ubWF4VHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIm1lYW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01lYW5UcmFuc2Zvcm0ubWVhblRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJtaW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc01pblRyYW5zZm9ybS5taW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicmFuZ2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1JhbmdlVHJhbnNmb3JtLnJhbmdlVHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInJvd1RyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzUm93VHJhbnNmb3JtLnJvd1RyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdWJzZXRUcmFuc2Zvcm1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1N1YnNldFRyYW5zZm9ybS5zdWJzZXRUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY29uY2F0VHJhbnNmb3JtRGVwZW5kZW5jaWVzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kZXBlbmRlbmNpZXNDb25jYXRUcmFuc2Zvcm0uY29uY2F0VHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0ZFRyYW5zZm9ybURlcGVuZGVuY2llc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZGVwZW5kZW5jaWVzU3RkVHJhbnNmb3JtLnN0ZFRyYW5zZm9ybURlcGVuZGVuY2llcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdW1UcmFuc2Zvcm1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1N1bVRyYW5zZm9ybS5zdW1UcmFuc2Zvcm1EZXBlbmRlbmNpZXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidmFyaWFuY2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlcGVuZGVuY2llc1ZhcmlhbmNlVHJhbnNmb3JtLnZhcmlhbmNlVHJhbnNmb3JtRGVwZW5kZW5jaWVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImFsbFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYWxsRmFjdG9yaWVzQW55LmFsbDtcbiAgfVxufSk7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1Jlc3VsdFNldCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSZXN1bHRTZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JhbmdlQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmFuZ2VDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ2xvbmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2xvbmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzSW50ZWdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc0ludGVnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTmVnYXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOdW1lcmljID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0lzTnVtZXJpYy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSGFzTnVtZXJpY1ZhbHVlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0hhc051bWVyaWNWYWx1ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNQb3NpdGl2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc1plcm8gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSXNaZXJvLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc05hTiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJc05hTi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZU9mID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1R5cGVPZi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVwcmVjYXRlZFR5cGVvZiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEZXByZWNhdGVkVHlwZW9mLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc051bWJlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOdW1iZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N0cmluZyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdHJpbmcuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Jvb2xlYW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQm9vbGVhbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnbnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JpZ251bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21wbGV4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGcmFjdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGcmFjdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3BsaXRVbml0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NwbGl0VW5pdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5hcnlNaW51cyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbmFyeVBsdXMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVW5hcnlQbHVzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBYnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWJzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBcHBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBcHBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FkZFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ2JydCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDYnJ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDZWlsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NlaWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0N1YmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ3ViZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXhwID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0V4cC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXhwbSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFeHBtMS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRmxvb3IgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmxvb3IuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0djZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHY2QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xjbSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMY20uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xvZyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMb2cxMC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTG9nMiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMb2cyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNb2QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTW9kLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc050aFJvb3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTnRoUm9vdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2lnbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTaWduLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcXJ0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NxcnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NxdWFyZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcXVhcmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNYZ2NkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1hnY2QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RvdE11bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RvdE11bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNCaXRBbmQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQml0QW5kLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNCaXROb3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQml0Tm90LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNCaXRPciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCaXRPci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQml0WG9yID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JpdFhvci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQXJnID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FyZy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uaiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb25qLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc05vdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOb3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc09yID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc09yLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNYb3IgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzWG9yLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25jYXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29uY2F0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb2x1bW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29sdW1uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDcm9zcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDcm9zcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGlhZyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEaWFnLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFeWUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXllLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGaWx0ZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmlsdGVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGbGF0dGVuID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZsYXR0ZW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZvckVhY2ggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRm9yRWFjaC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzR2V0TWF0cml4RGF0YVR5cGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzR2V0TWF0cml4RGF0YVR5cGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lkZW50aXR5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0lkZW50aXR5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNLcm9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0tyb24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hcCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYXAuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc09uZXMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzT25lcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmFuZ2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmFuZ2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1Jlc2hhcGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmVzaGFwZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmVzaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Jlc2l6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUm93ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Jvdy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2l6ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTaXplLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcXVlZXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NxdWVlemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnNldCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1RyYW5zcG9zZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUcmFuc3Bvc2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0N0cmFuc3Bvc2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ3RyYW5zcG9zZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzWmVyb3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzWmVyb3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VyZiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFcmYuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTW9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUHJvZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQcm9kLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGb3JtYXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRm9ybWF0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQcmludCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQcmludC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVG8gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVG8uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzUHJpbWUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSXNQcmltZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTnVtZXJpYyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOdW1lcmljLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQb3cgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUG93LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSb3VuZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSb3VuZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTG9nMyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMb2cuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xvZzFwID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xvZzFwLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOdGhSb290cyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOdGhSb290cy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRG90UG93ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RvdFBvdy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRG90RGl2aWRlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RvdERpdmlkZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTHNvbHZlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xzb2x2ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVXNvbHZlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Vzb2x2ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTGVmdFNoaWZ0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xlZnRTaGlmdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmlnaHRBcml0aFNoaWZ0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JpZ2h0QXJpdGhTaGlmdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmlnaHRMb2dTaGlmdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSaWdodExvZ1NoaWZ0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBbmQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQW5kLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBhcmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlVGV4dCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21wYXJlVGV4dC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXF1YWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsVGV4dCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFcXVhbFRleHQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NtYWxsZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU21hbGxlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlckVxID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NtYWxsZXJFcS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTGFyZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xhcmdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTGFyZ2VyRXEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTGFyZ2VyRXEuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlZXBFcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEZWVwRXF1YWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuZXF1YWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVW5lcXVhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFydGl0aW9uU2VsZWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU29ydCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTb3J0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWF4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNaW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWluLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbW11dGFibGVEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRmlib25hY2NpSGVhcENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZpYm9uYWNjaUhlYXBDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3BhQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3BhQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRGdW5jdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVbml0RnVuY3Rpb24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NwYXJzZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTcGFyc2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NyZWF0ZVVuaXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ3JlYXRlVW5pdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWNvcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBY29zLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBY29zaCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBY29zaC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWNvdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBY290LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBY290aCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBY290aC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWNzYyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBY3NjLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBY3NjaCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBY3NjaC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQXNlYyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBc2VjLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBc2VjaCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBc2VjaC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQXNpbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBc2luLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBc2luaCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBc2luaC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQXRhbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBdGFuLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBdGFuMiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNBdGFuMi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQXRhbmggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXRhbmguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Nvc2ggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29zaC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ290ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ290aCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb3RoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDc2MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ3NjLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDc2NoID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NzY2guZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NlYyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZWMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NlY2ggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2VjaC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2luID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Npbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2luaCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTaW5oLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUYW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVGFuLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUYW5oID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1RhbmguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NldENhcnRlc2lhbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXRDYXJ0ZXNpYW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NldERpZmZlcmVuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0RGlmZmVyZW5jZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0RGlzdGluY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0RGlzdGluY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NldEludGVyc2VjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXRJbnRlcnNlY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NldElzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NldElzU3Vic2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTZXRNdWx0aXBsaWNpdHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2V0TXVsdGlwbGljaXR5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTZXRQb3dlcnNldCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXRQb3dlcnNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0U2l6ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTZXRTaXplLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTZXRTeW1EaWZmZXJlbmNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NldFN5bURpZmZlcmVuY2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NldFVuaW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NldFVuaW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNIeXBvdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNIeXBvdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOb3JtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEb3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRG90LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUcmFjZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUcmFjZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW5kZXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWNjZXNzb3JOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FjY2Vzc29yTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQXJyYXlOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0FycmF5Tm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQXNzaWdubWVudE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXNzaWdubWVudE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Jsb2NrTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCbG9ja05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbmRpdGlvbmFsTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb25kaXRpb25hbE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbnN0YW50Tm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0luZGV4Tm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzT2JqZWN0Tm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNPYmplY3ROb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNPcGVyYXRvck5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzT3BlcmF0b3JOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5nZU5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmFuZ2VOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSZWxhdGlvbmFsTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSZWxhdGlvbmFsTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3ltYm9sTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRnVuY3Rpb25Ob2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJzZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQYXJzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGlsZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb21waWxlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFdmFsdWF0ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFdmFsdWF0ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVwcmVjYXRlZEV2YWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRGVwcmVjYXRlZEV2YWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnNlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BhcnNlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJzZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGFyc2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMdXAgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTHVwLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNRciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNRci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2x1ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NsdS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTHVzb2x2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMdXNvbHZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNIZWxwQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSGVscENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDaGFpbkNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NoYWluQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0hlbHAgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSGVscC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ2hhaW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2hhaW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RldCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ludiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNJbnYuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VpZ3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRWlncy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXhwbTIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRXhwbS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3FydG0gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3FydG0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEaXZpZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Rpc3RhbmNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Rpc3RhbmNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbnRlcnNlY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW50ZXJzZWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdW0gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3VtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNZWFuID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01lYW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01lZGlhbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNZWRpYW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1ZhcmlhbmNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1ZhcmlhbmNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEZXByZWNhdGVkVmFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0RlcHJlY2F0ZWRWYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1F1YW50aWxlU2VxID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1F1YW50aWxlU2VxLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3RkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tYmluYXRpb25zLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnNXaXRoUmVwID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvbWJpbmF0aW9uc1dpdGhSZXAuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0dhbW1hID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0dhbW1hLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGYWN0b3JpYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmFjdG9yaWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNLbGRpdmVyZ2VuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzS2xkaXZlcmdlbmNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aW5vbWlhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNdWx0aW5vbWlhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGVybXV0YXRpb25zID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Blcm11dGF0aW9ucy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGlja1JhbmRvbSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQaWNrUmFuZG9tLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5kb20gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmFuZG9tLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5kb21JbnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmFuZG9tSW50LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdGlybGluZ1MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3RpcmxpbmdTMi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmVsbE51bWJlcnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQmVsbE51bWJlcnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NhdGFsYW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ2F0YWxhbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcG9zaXRpb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29tcG9zaXRpb24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NpbXBsaWZ5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NpbXBsaWZ5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEZXJpdmF0aXZlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0Rlcml2YXRpdmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JhdGlvbmFsaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JhdGlvbmFsaXplLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSZXZpdmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Jldml2ZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JlcGxhY2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1JlcGxhY2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VwcGVyY2FzZUUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVXBwZXJjYXNlRS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRmFsc2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmFsc2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0kgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5maW5pdHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW5maW5pdHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xOID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xOMTAuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xOMiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMTjIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xPRzEwRSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMT0cxMEUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xPRzJFID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0xPRzJFLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOYU4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTmFOLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOdWxsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc051bGwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BoaSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQaGkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BpID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BpLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVcHBlcmNhc2VQaSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNVcHBlcmNhc2VQaS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU1FSVDFfID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1NRUlQxXzIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NRUlQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU1FSVDIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1RhdSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNUYXUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1RydWUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzVHJ1ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVmVyc2lvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNWZXJzaW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBdG9taWNNYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0F0b21pY01hc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0F2b2dhZHJvID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0F2b2dhZHJvLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNCb2hyTWFnbmV0b24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQm9ock1hZ25ldG9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNCb2hyUmFkaXVzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0JvaHJSYWRpdXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0JvbHR6bWFubiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNCb2x0em1hbm4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NsYXNzaWNhbEVsZWN0cm9uUmFkaXVzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NsYXNzaWNhbEVsZWN0cm9uUmFkaXVzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25kdWN0YW5jZVF1YW50dW0gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQ29uZHVjdGFuY2VRdWFudHVtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb3Vsb21iID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0NvdWxvbWIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RldXRlcm9uTWFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNEZXV0ZXJvbk1hc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VmaW1vdkZhY3RvciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFZmltb3ZGYWN0b3IuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VsZWN0cmljQ29uc3RhbnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRWxlY3RyaWNDb25zdGFudC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRWxlY3Ryb25NYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0VsZWN0cm9uTWFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRWxlbWVudGFyeUNoYXJnZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNFbGVtZW50YXJ5Q2hhcmdlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGYXJhZGF5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0ZhcmFkYXkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0Zlcm1pQ291cGxpbmcgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRmVybWlDb3VwbGluZy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRmluZVN0cnVjdHVyZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGaW5lU3RydWN0dXJlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGaXJzdFJhZGlhdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGaXJzdFJhZGlhdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzR2FzQ29uc3RhbnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzR2FzQ29uc3RhbnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0dyYXZpdGF0aW9uQ29uc3RhbnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzR3Jhdml0YXRpb25Db25zdGFudC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzR3Jhdml0eSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNHcmF2aXR5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNIYXJ0cmVlRW5lcmd5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc0hhcnRyZWVFbmVyZ3kuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ludmVyc2VDb25kdWN0YW5jZVF1YW50dW0gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzS2xpdHppbmcgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzS2xpdHppbmcuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xvc2NobWlkdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNMb3NjaG1pZHQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hZ25ldGljQ29uc3RhbnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWFnbmV0aWNDb25zdGFudC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWFnbmV0aWNGbHV4UXVhbnR1bSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYWduZXRpY0ZsdXhRdWFudHVtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNb2xhck1hc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTW9sYXJNYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNb2xhck1hc3NDID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01vbGFyTWFzc0MxMi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTW9sYXJQbGFuY2tDb25zdGFudCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2xhclBsYW5ja0NvbnN0YW50LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNb2xhclZvbHVtZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNb2xhclZvbHVtZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTmV1dHJvbk1hc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTmV1dHJvbk1hc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc051Y2xlYXJNYWduZXRvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNOdWNsZWFyTWFnbmV0b24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BsYW5ja0NoYXJnZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNQbGFuY2tDaGFyZ2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BsYW5ja0NvbnN0YW50ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BsYW5ja0NvbnN0YW50LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQbGFuY2tMZW5ndGggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUGxhbmNrTGVuZ3RoLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQbGFuY2tNYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BsYW5ja01hc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BsYW5ja1RlbXBlcmF0dXJlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BsYW5ja1RlbXBlcmF0dXJlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQbGFuY2tUaW1lID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1BsYW5ja1RpbWUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1Byb3Rvbk1hc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUHJvdG9uTWFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUXVhbnR1bU9mQ2lyY3VsYXRpb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUXVhbnR1bU9mQ2lyY3VsYXRpb24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JlZHVjZWRQbGFuY2tDb25zdGFudCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSZWR1Y2VkUGxhbmNrQ29uc3RhbnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1J5ZGJlcmcgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUnlkYmVyZy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2Fja3VyVGV0cm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTYWNrdXJUZXRyb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTZWNvbmRSYWRpYXRpb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU2Vjb25kUmFkaWF0aW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGVlZE9mTGlnaHQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3BlZWRPZkxpZ2h0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdGVmYW5Cb2x0em1hbm4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzU3RlZmFuQm9sdHptYW5uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUaG9tc29uQ3Jvc3NTZWN0aW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1Rob21zb25Dcm9zc1NlY3Rpb24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1ZhY3V1bUltcGVkYW5jZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNWYWN1dW1JbXBlZGFuY2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1dlYWtNaXhpbmdBbmdsZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNXZWFrTWl4aW5nQW5nbGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1dpZW5EaXNwbGFjZW1lbnQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzV2llbkRpc3BsYWNlbWVudC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQXBwbHlUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzQXBwbHlUcmFuc2Zvcm0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbHVtblRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb2x1bW5UcmFuc2Zvcm0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZpbHRlclRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNGaWx0ZXJUcmFuc2Zvcm0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZvckVhY2hUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzRm9yRWFjaFRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzSW5kZXhUcmFuc2Zvcm0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hcFRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYXBUcmFuc2Zvcm0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01heFRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNNYXhUcmFuc2Zvcm0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01lYW5UcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzTWVhblRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWluVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc01pblRyYW5zZm9ybS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmFuZ2VUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBbnkvZGVwZW5kZW5jaWVzUmFuZ2VUcmFuc2Zvcm0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1Jvd1RyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNSb3dUcmFuc2Zvcm0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnNldFRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdWJzZXRUcmFuc2Zvcm0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbmNhdFRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNDb25jYXRUcmFuc2Zvcm0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N0ZFRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdGRUcmFuc2Zvcm0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1bVRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FueS9kZXBlbmRlbmNpZXNTdW1UcmFuc2Zvcm0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1ZhcmlhbmNlVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55L2RlcGVuZGVuY2llc1ZhcmlhbmNlVHJhbnNmb3JtLmdlbmVyYXRlZFwiKTtcblxudmFyIF9hbGxGYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi9hbGxGYWN0b3JpZXNBbnkuanNcIik7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFic0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFic0RlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQWJzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFic1xufTtcbmV4cG9ydHMuYWJzRGVwZW5kZW5jaWVzID0gYWJzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5BY2Nlc3Nvck5vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnNldCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBBY2Nlc3Nvck5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFjY2Vzc29yTm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVBY2Nlc3Nvck5vZGVcbn07XG5leHBvcnRzLkFjY2Vzc29yTm9kZURlcGVuZGVuY2llcyA9IEFjY2Vzc29yTm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNvc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYWNvc0RlcGVuZGVuY2llcyA9IHtcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBY29zOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFjb3Ncbn07XG5leHBvcnRzLmFjb3NEZXBlbmRlbmNpZXMgPSBhY29zRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hY29zaERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYWNvc2hEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQWNvc2g6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNvc2hcbn07XG5leHBvcnRzLmFjb3NoRGVwZW5kZW5jaWVzID0gYWNvc2hEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFjb3REZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhY290RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFjb3Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNvdFxufTtcbmV4cG9ydHMuYWNvdERlcGVuZGVuY2llcyA9IGFjb3REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFjb3RoRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhY290aERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUFjb3RoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFjb3RoXG59O1xuZXhwb3J0cy5hY290aERlcGVuZGVuY2llcyA9IGFjb3RoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hY3NjRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhY3NjRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQWNzYzogX2ZhY3Rvcmllc0FueS5jcmVhdGVBY3NjXG59O1xuZXhwb3J0cy5hY3NjRGVwZW5kZW5jaWVzID0gYWNzY0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNzY2hEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhY3NjaERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBY3NjaDogX2ZhY3Rvcmllc0FueS5jcmVhdGVBY3NjaFxufTtcbmV4cG9ydHMuYWNzY2hEZXBlbmRlbmNpZXMgPSBhY3NjaERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWRkRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhZGREZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgU3BhcnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuU3BhcnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBZGQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQWRkXG59O1xuZXhwb3J0cy5hZGREZXBlbmRlbmNpZXMgPSBhZGREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFkZFNjYWxhckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFkZFNjYWxhckRlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQWRkU2NhbGFyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFkZFNjYWxhclxufTtcbmV4cG9ydHMuYWRkU2NhbGFyRGVwZW5kZW5jaWVzID0gYWRkU2NhbGFyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hbmREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOb3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOb3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1plcm9zID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzWmVyb3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYW5kRGVwZW5kZW5jaWVzID0ge1xuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBub3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb3Qubm90RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICB6ZXJvc0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1plcm9zLnplcm9zRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBbmQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQW5kXG59O1xuZXhwb3J0cy5hbmREZXBlbmRlbmNpZXMgPSBhbmREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFwcGx5RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzSW50ZWdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzSW50ZWdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhcHBseURlcGVuZGVuY2llcyA9IHtcbiAgaXNJbnRlZ2VyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmlzSW50ZWdlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQXBwbHk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQXBwbHlcbn07XG5leHBvcnRzLmFwcGx5RGVwZW5kZW5jaWVzID0gYXBwbHlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFwcGx5VHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzSW50ZWdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzSW50ZWdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhcHBseVRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgaXNJbnRlZ2VyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmlzSW50ZWdlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQXBwbHlUcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlQXBwbHlUcmFuc2Zvcm1cbn07XG5leHBvcnRzLmFwcGx5VHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gYXBwbHlUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFyZ0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFyZ0RlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQXJnOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFyZ1xufTtcbmV4cG9ydHMuYXJnRGVwZW5kZW5jaWVzID0gYXJnRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5BcnJheU5vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgQXJyYXlOb2RlRGVwZW5kZW5jaWVzID0ge1xuICBOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTm9kZS5Ob2RlRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBcnJheU5vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQXJyYXlOb2RlXG59O1xuZXhwb3J0cy5BcnJheU5vZGVEZXBlbmRlbmNpZXMgPSBBcnJheU5vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFzZWNEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFzZWNEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBc2VjOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFzZWNcbn07XG5leHBvcnRzLmFzZWNEZXBlbmRlbmNpZXMgPSBhc2VjRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hc2VjaERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXNlY2hEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBc2VjaDogX2ZhY3Rvcmllc0FueS5jcmVhdGVBc2VjaFxufTtcbmV4cG9ydHMuYXNlY2hEZXBlbmRlbmNpZXMgPSBhc2VjaERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXNpbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXNpbkRlcGVuZGVuY2llcyA9IHtcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBc2luOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUFzaW5cbn07XG5leHBvcnRzLmFzaW5EZXBlbmRlbmNpZXMgPSBhc2luRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hc2luaERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGFzaW5oRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBc2luaDogX2ZhY3Rvcmllc0FueS5jcmVhdGVBc2luaFxufTtcbmV4cG9ydHMuYXNpbmhEZXBlbmRlbmNpZXMgPSBhc2luaERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIEFzc2lnbm1lbnROb2RlRGVwZW5kZW5jaWVzID0ge1xuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTm9kZS5Ob2RlRGVwZW5kZW5jaWVzLFxuICBzdWJzZXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJzZXQuc3Vic2V0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBc3NpZ25tZW50Tm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVBc3NpZ25tZW50Tm9kZVxufTtcbmV4cG9ydHMuQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXMgPSBBc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXRhbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGF0YW5EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUF0YW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlQXRhblxufTtcbmV4cG9ydHMuYXRhbkRlcGVuZGVuY2llcyA9IGF0YW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmF0YW4yRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYXRhbjJEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVBdGFuMjogX2ZhY3Rvcmllc0FueS5jcmVhdGVBdGFuMlxufTtcbmV4cG9ydHMuYXRhbjJEZXBlbmRlbmNpZXMgPSBhdGFuMkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXRhbmhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGF0YW5oRGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUF0YW5oOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUF0YW5oXG59O1xuZXhwb3J0cy5hdGFuaERlcGVuZGVuY2llcyA9IGF0YW5oRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hdG9taWNNYXNzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBhdG9taWNNYXNzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQXRvbWljTWFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVBdG9taWNNYXNzXG59O1xuZXhwb3J0cy5hdG9taWNNYXNzRGVwZW5kZW5jaWVzID0gYXRvbWljTWFzc0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXZvZ2Fkcm9EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGF2b2dhZHJvRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQXZvZ2Fkcm86IF9mYWN0b3JpZXNBbnkuY3JlYXRlQXZvZ2Fkcm9cbn07XG5leHBvcnRzLmF2b2dhZHJvRGVwZW5kZW5jaWVzID0gYXZvZ2Fkcm9EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJlbGxOdW1iZXJzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3RpcmxpbmdTID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3RpcmxpbmdTMi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBiZWxsTnVtYmVyc0RlcGVuZGVuY2llcyA9IHtcbiAgYWRkU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmFkZFNjYWxhckRlcGVuZGVuY2llcyxcbiAgaXNJbnRlZ2VyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmlzSW50ZWdlckRlcGVuZGVuY2llcyxcbiAgaXNOZWdhdGl2ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzTmVnYXRpdmUuaXNOZWdhdGl2ZURlcGVuZGVuY2llcyxcbiAgc3RpcmxpbmdTMkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N0aXJsaW5nUy5zdGlybGluZ1MyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVCZWxsTnVtYmVyczogX2ZhY3Rvcmllc0FueS5jcmVhdGVCZWxsTnVtYmVyc1xufTtcbmV4cG9ydHMuYmVsbE51bWJlcnNEZXBlbmRlbmNpZXMgPSBiZWxsTnVtYmVyc0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQmlnTnVtYmVyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgQmlnTnVtYmVyRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVCaWdOdW1iZXJDbGFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVCaWdOdW1iZXJDbGFzc1xufTtcbmV4cG9ydHMuQmlnTnVtYmVyRGVwZW5kZW5jaWVzID0gQmlnTnVtYmVyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iaWdudW1iZXJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBiaWdudW1iZXJEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQmlnbnVtYmVyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpZ251bWJlclxufTtcbmV4cG9ydHMuYmlnbnVtYmVyRGVwZW5kZW5jaWVzID0gYmlnbnVtYmVyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iaXRBbmREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGJpdEFuZERlcGVuZGVuY2llcyA9IHtcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQml0QW5kOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpdEFuZFxufTtcbmV4cG9ydHMuYml0QW5kRGVwZW5kZW5jaWVzID0gYml0QW5kRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iaXROb3REZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBiaXROb3REZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUJpdE5vdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVCaXROb3Rcbn07XG5leHBvcnRzLmJpdE5vdERlcGVuZGVuY2llcyA9IGJpdE5vdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYml0T3JEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBiaXRPckRlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVCaXRPcjogX2ZhY3Rvcmllc0FueS5jcmVhdGVCaXRPclxufTtcbmV4cG9ydHMuYml0T3JEZXBlbmRlbmNpZXMgPSBiaXRPckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYml0WG9yRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYml0WG9yRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUJpdFhvcjogX2ZhY3Rvcmllc0FueS5jcmVhdGVCaXRYb3Jcbn07XG5leHBvcnRzLmJpdFhvckRlcGVuZGVuY2llcyA9IGJpdFhvckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuQmxvY2tOb2RlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSZXN1bHRTZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSZXN1bHRTZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgQmxvY2tOb2RlRGVwZW5kZW5jaWVzID0ge1xuICBOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTm9kZS5Ob2RlRGVwZW5kZW5jaWVzLFxuICBSZXN1bHRTZXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNSZXN1bHRTZXQuUmVzdWx0U2V0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVCbG9ja05vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQmxvY2tOb2RlXG59O1xuZXhwb3J0cy5CbG9ja05vZGVEZXBlbmRlbmNpZXMgPSBCbG9ja05vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJvaHJNYWduZXRvbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgYm9ock1hZ25ldG9uRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQm9ock1hZ25ldG9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJvaHJNYWduZXRvblxufTtcbmV4cG9ydHMuYm9ock1hZ25ldG9uRGVwZW5kZW5jaWVzID0gYm9ock1hZ25ldG9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ib2hyUmFkaXVzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBib2hyUmFkaXVzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQm9oclJhZGl1czogX2ZhY3Rvcmllc0FueS5jcmVhdGVCb2hyUmFkaXVzXG59O1xuZXhwb3J0cy5ib2hyUmFkaXVzRGVwZW5kZW5jaWVzID0gYm9oclJhZGl1c0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYm9sdHptYW5uRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBib2x0em1hbm5EZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVCb2x0em1hbm46IF9mYWN0b3JpZXNBbnkuY3JlYXRlQm9sdHptYW5uXG59O1xuZXhwb3J0cy5ib2x0em1hbm5EZXBlbmRlbmNpZXMgPSBib2x0em1hbm5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJvb2xlYW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBib29sZWFuRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVCb29sZWFuOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUJvb2xlYW5cbn07XG5leHBvcnRzLmJvb2xlYW5EZXBlbmRlbmNpZXMgPSBib29sZWFuRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jYXRhbGFuRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tYmluYXRpb25zID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tYmluYXRpb25zLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzSW50ZWdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzSW50ZWdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzTmVnYXRpdmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY2F0YWxhbkRlcGVuZGVuY2llcyA9IHtcbiAgYWRkU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmFkZFNjYWxhckRlcGVuZGVuY2llcyxcbiAgY29tYmluYXRpb25zRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tYmluYXRpb25zLmNvbWJpbmF0aW9uc0RlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgaXNJbnRlZ2VyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmlzSW50ZWdlckRlcGVuZGVuY2llcyxcbiAgaXNOZWdhdGl2ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzTmVnYXRpdmUuaXNOZWdhdGl2ZURlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ2F0YWxhbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVDYXRhbGFuXG59O1xuZXhwb3J0cy5jYXRhbGFuRGVwZW5kZW5jaWVzID0gY2F0YWxhbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY2JydERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5hcnlNaW51cy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjYnJ0RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgRnJhY3Rpb25EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLkZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICBpc05lZ2F0aXZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZS5pc05lZ2F0aXZlRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICB1bmFyeU1pbnVzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5hcnlNaW51cy51bmFyeU1pbnVzRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDYnJ0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNicnRcbn07XG5leHBvcnRzLmNicnREZXBlbmRlbmNpZXMgPSBjYnJ0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jZWlsRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1JvdW5kID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUm91bmQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY2VpbERlcGVuZGVuY2llcyA9IHtcbiAgcm91bmREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNSb3VuZC5yb3VuZERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ2VpbDogX2ZhY3Rvcmllc0FueS5jcmVhdGVDZWlsXG59O1xuZXhwb3J0cy5jZWlsRGVwZW5kZW5jaWVzID0gY2VpbERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY2hhaW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ2hhaW5DbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NoYWluQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY2hhaW5EZXBlbmRlbmNpZXMgPSB7XG4gIENoYWluRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ2hhaW5DbGFzcy5DaGFpbkRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ2hhaW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2hhaW5cbn07XG5leHBvcnRzLmNoYWluRGVwZW5kZW5jaWVzID0gY2hhaW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkNoYWluRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgQ2hhaW5EZXBlbmRlbmNpZXMgPSB7XG4gIGNyZWF0ZUNoYWluQ2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2hhaW5DbGFzc1xufTtcbmV4cG9ydHMuQ2hhaW5EZXBlbmRlbmNpZXMgPSBDaGFpbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXNEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ2xhc3NpY2FsRWxlY3Ryb25SYWRpdXM6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2xhc3NpY2FsRWxlY3Ryb25SYWRpdXNcbn07XG5leHBvcnRzLmNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzRGVwZW5kZW5jaWVzID0gY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXNEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNsb25lRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY2xvbmVEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNsb25lOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNsb25lXG59O1xuZXhwb3J0cy5jbG9uZURlcGVuZGVuY2llcyA9IGNsb25lRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb2x1bW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmFuZ2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSYW5nZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb2x1bW5EZXBlbmRlbmNpZXMgPSB7XG4gIEluZGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5JbmRleERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgcmFuZ2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNSYW5nZS5yYW5nZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29sdW1uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbHVtblxufTtcbmV4cG9ydHMuY29sdW1uRGVwZW5kZW5jaWVzID0gY29sdW1uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb2x1bW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmFuZ2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNSYW5nZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb2x1bW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIEluZGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5JbmRleERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgcmFuZ2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNSYW5nZS5yYW5nZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29sdW1uVHJhbnNmb3JtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbHVtblRyYW5zZm9ybVxufTtcbmV4cG9ydHMuY29sdW1uVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gY29sdW1uVHJhbnNmb3JtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb21iaW5hdGlvbnNEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb21iaW5hdGlvbnNEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbWJpbmF0aW9uczogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21iaW5hdGlvbnNcbn07XG5leHBvcnRzLmNvbWJpbmF0aW9uc0RlcGVuZGVuY2llcyA9IGNvbWJpbmF0aW9uc0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tYmluYXRpb25zV2l0aFJlcERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvbWJpbmF0aW9uc1dpdGhSZXBEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbWJpbmF0aW9uc1dpdGhSZXA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tYmluYXRpb25zV2l0aFJlcFxufTtcbmV4cG9ydHMuY29tYmluYXRpb25zV2l0aFJlcERlcGVuZGVuY2llcyA9IGNvbWJpbmF0aW9uc1dpdGhSZXBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbXBhcmVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY29tcGFyZURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIEZyYWN0aW9uRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcy5GcmFjdGlvbkRlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29tcGFyZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21wYXJlXG59O1xuZXhwb3J0cy5jb21wYXJlRGVwZW5kZW5jaWVzID0gY29tcGFyZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMgPSB7XG4gIGNvbXBhcmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wYXJlLmNvbXBhcmVEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbXBhcmVOYXR1cmFsOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbXBhcmVOYXR1cmFsXG59O1xuZXhwb3J0cy5jb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcyA9IGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb21wYXJlVGV4dERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY29tcGFyZVRleHREZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbXBhcmVUZXh0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbXBhcmVUZXh0XG59O1xuZXhwb3J0cy5jb21wYXJlVGV4dERlcGVuZGVuY2llcyA9IGNvbXBhcmVUZXh0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb21waWxlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUGFyc2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY29tcGlsZURlcGVuZGVuY2llcyA9IHtcbiAgcGFyc2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQYXJzZS5wYXJzZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29tcGlsZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21waWxlXG59O1xuZXhwb3J0cy5jb21waWxlRGVwZW5kZW5jaWVzID0gY29tcGlsZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcGxleERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY29tcGxleERlcGVuZGVuY2llcyA9IHtcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb21wbGV4OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbXBsZXhcbn07XG5leHBvcnRzLmNvbXBsZXhEZXBlbmRlbmNpZXMgPSBjb21wbGV4RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5Db21wbGV4RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgQ29tcGxleERlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlQ29tcGxleENsYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbXBsZXhDbGFzc1xufTtcbmV4cG9ydHMuQ29tcGxleERlcGVuZGVuY2llcyA9IENvbXBsZXhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbXBvc2l0aW9uRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tYmluYXRpb25zID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tYmluYXRpb25zLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc0ludGVnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc0ludGVnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTmVnYXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNQb3NpdGl2ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTGFyZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTGFyZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvbXBvc2l0aW9uRGVwZW5kZW5jaWVzID0ge1xuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBjb21iaW5hdGlvbnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMuY29tYmluYXRpb25zRGVwZW5kZW5jaWVzLFxuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICBpc05lZ2F0aXZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZS5pc05lZ2F0aXZlRGVwZW5kZW5jaWVzLFxuICBpc1Bvc2l0aXZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNQb3NpdGl2ZS5pc1Bvc2l0aXZlRGVwZW5kZW5jaWVzLFxuICBsYXJnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNMYXJnZXIubGFyZ2VyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb21wb3NpdGlvbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21wb3NpdGlvblxufTtcbmV4cG9ydHMuY29tcG9zaXRpb25EZXBlbmRlbmNpZXMgPSBjb21wb3NpdGlvbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29uY2F0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzSW50ZWdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzSW50ZWdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvbmNhdERlcGVuZGVuY2llcyA9IHtcbiAgaXNJbnRlZ2VyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmlzSW50ZWdlckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29uY2F0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbmNhdFxufTtcbmV4cG9ydHMuY29uY2F0RGVwZW5kZW5jaWVzID0gY29uY2F0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb25jYXRUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY29uY2F0VHJhbnNmb3JtRGVwZW5kZW5jaWVzID0ge1xuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb25jYXRUcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29uY2F0VHJhbnNmb3JtXG59O1xuZXhwb3J0cy5jb25jYXRUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSBjb25jYXRUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkNvbmRpdGlvbmFsTm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBDb25kaXRpb25hbE5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvbmRpdGlvbmFsTm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25kaXRpb25hbE5vZGVcbn07XG5leHBvcnRzLkNvbmRpdGlvbmFsTm9kZURlcGVuZGVuY2llcyA9IENvbmRpdGlvbmFsTm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29uZHVjdGFuY2VRdWFudHVtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb25kdWN0YW5jZVF1YW50dW06IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29uZHVjdGFuY2VRdWFudHVtXG59O1xuZXhwb3J0cy5jb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXMgPSBjb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbmpEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjb25qRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb25qOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbmpcbn07XG5leHBvcnRzLmNvbmpEZXBlbmRlbmNpZXMgPSBjb25qRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5Db25zdGFudE5vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgQ29uc3RhbnROb2RlRGVwZW5kZW5jaWVzID0ge1xuICBOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTm9kZS5Ob2RlRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDb25zdGFudE5vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29uc3RhbnROb2RlXG59O1xuZXhwb3J0cy5Db25zdGFudE5vZGVEZXBlbmRlbmNpZXMgPSBDb25zdGFudE5vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvc0RlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29zOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvc1xufTtcbmV4cG9ydHMuY29zRGVwZW5kZW5jaWVzID0gY29zRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb3NoRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY29zaERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ29zaDogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb3NoXG59O1xuZXhwb3J0cy5jb3NoRGVwZW5kZW5jaWVzID0gY29zaERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY290RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY290RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb3Rcbn07XG5leHBvcnRzLmNvdERlcGVuZGVuY2llcyA9IGNvdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY290aERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNvdGhEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ290aDogX2ZhY3Rvcmllc0FueS5jcmVhdGVDb3RoXG59O1xuZXhwb3J0cy5jb3RoRGVwZW5kZW5jaWVzID0gY290aERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY291bG9tYkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY291bG9tYkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNvdWxvbWI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ291bG9tYlxufTtcbmV4cG9ydHMuY291bG9tYkRlcGVuZGVuY2llcyA9IGNvdWxvbWJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVVuaXREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNyZWF0ZVVuaXREZXBlbmRlbmNpZXMgPSB7XG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ3JlYXRlVW5pdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVDcmVhdGVVbml0XG59O1xuZXhwb3J0cy5jcmVhdGVVbml0RGVwZW5kZW5jaWVzID0gY3JlYXRlVW5pdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3Jvc3NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNyb3NzRGVwZW5kZW5jaWVzID0ge1xuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDcm9zczogX2ZhY3Rvcmllc0FueS5jcmVhdGVDcm9zc1xufTtcbmV4cG9ydHMuY3Jvc3NEZXBlbmRlbmNpZXMgPSBjcm9zc0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NjRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgY3NjRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUNzYzogX2ZhY3Rvcmllc0FueS5jcmVhdGVDc2Ncbn07XG5leHBvcnRzLmNzY0RlcGVuZGVuY2llcyA9IGNzY0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NjaERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGNzY2hEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlQ3NjaDogX2ZhY3Rvcmllc0FueS5jcmVhdGVDc2NoXG59O1xuZXhwb3J0cy5jc2NoRGVwZW5kZW5jaWVzID0gY3NjaERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3RyYW5zcG9zZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25qID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uai5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHJhbnNwb3NlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHJhbnNwb3NlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGN0cmFuc3Bvc2VEZXBlbmRlbmNpZXMgPSB7XG4gIGNvbmpEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb25qLmNvbmpEZXBlbmRlbmNpZXMsXG4gIHRyYW5zcG9zZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1RyYW5zcG9zZS50cmFuc3Bvc2VEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUN0cmFuc3Bvc2U6IF9mYWN0b3JpZXNBbnkuY3JlYXRlQ3RyYW5zcG9zZVxufTtcbmV4cG9ydHMuY3RyYW5zcG9zZURlcGVuZGVuY2llcyA9IGN0cmFuc3Bvc2VEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmN1YmVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBjdWJlRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVDdWJlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUN1YmVcbn07XG5leHBvcnRzLmN1YmVEZXBlbmRlbmNpZXMgPSBjdWJlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWVwRXF1YWxEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBkZWVwRXF1YWxEZXBlbmRlbmNpZXMgPSB7XG4gIGVxdWFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWwuZXF1YWxEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURlZXBFcXVhbDogX2ZhY3Rvcmllc0FueS5jcmVhdGVEZWVwRXF1YWxcbn07XG5leHBvcnRzLmRlZXBFcXVhbERlcGVuZGVuY2llcyA9IGRlZXBFcXVhbERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBEZW5zZU1hdHJpeERlcGVuZGVuY2llcyA9IHtcbiAgTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Q2xhc3MuTWF0cml4RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEZW5zZU1hdHJpeENsYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURlbnNlTWF0cml4Q2xhc3Ncbn07XG5leHBvcnRzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzID0gRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV2YWxEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXZhbHVhdGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFdmFsdWF0ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBldmFsRGVwZW5kZW5jaWVzID0ge1xuICBldmFsdWF0ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0V2YWx1YXRlLmV2YWx1YXRlRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEZXByZWNhdGVkRXZhbDogX2ZhY3Rvcmllc0FueS5jcmVhdGVEZXByZWNhdGVkRXZhbFxufTtcbmV4cG9ydHMuZXZhbERlcGVuZGVuY2llcyA9IGV2YWxEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnR5cGVvZkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHR5cGVvZkRlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlRGVwcmVjYXRlZFR5cGVvZjogX2ZhY3Rvcmllc0FueS5jcmVhdGVEZXByZWNhdGVkVHlwZW9mXG59O1xuZXhwb3J0cy50eXBlb2ZEZXBlbmRlbmNpZXMgPSB0eXBlb2ZEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnZhckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNWYXJpYW5jZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1ZhcmlhbmNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHZhckRlcGVuZGVuY2llcyA9IHtcbiAgdmFyaWFuY2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNWYXJpYW5jZS52YXJpYW5jZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlRGVwcmVjYXRlZFZhcjogX2ZhY3Rvcmllc0FueS5jcmVhdGVEZXByZWNhdGVkVmFyXG59O1xuZXhwb3J0cy52YXJEZXBlbmRlbmNpZXMgPSB2YXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlcml2YXRpdmVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNaZXJvID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNaZXJvLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOdW1lcmljID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTnVtZXJpYy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyc2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2ltcGxpZnkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTaW1wbGlmeS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBkZXJpdmF0aXZlRGVwZW5kZW5jaWVzID0ge1xuICBDb25zdGFudE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUuQ29uc3RhbnROb2RlRGVwZW5kZW5jaWVzLFxuICBGdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUuRnVuY3Rpb25Ob2RlRGVwZW5kZW5jaWVzLFxuICBPcGVyYXRvck5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNPcGVyYXRvck5vZGUuT3BlcmF0b3JOb2RlRGVwZW5kZW5jaWVzLFxuICBQYXJlbnRoZXNpc05vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuUGFyZW50aGVzaXNOb2RlRGVwZW5kZW5jaWVzLFxuICBTeW1ib2xOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5TeW1ib2xOb2RlRGVwZW5kZW5jaWVzLFxuICBlcXVhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsLmVxdWFsRGVwZW5kZW5jaWVzLFxuICBpc1plcm9EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc1plcm8uaXNaZXJvRGVwZW5kZW5jaWVzLFxuICBudW1lcmljRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTnVtZXJpYy5udW1lcmljRGVwZW5kZW5jaWVzLFxuICBwYXJzZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcnNlLnBhcnNlRGVwZW5kZW5jaWVzLFxuICBzaW1wbGlmeURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpbXBsaWZ5LnNpbXBsaWZ5RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEZXJpdmF0aXZlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURlcml2YXRpdmVcbn07XG5leHBvcnRzLmRlcml2YXRpdmVEZXBlbmRlbmNpZXMgPSBkZXJpdmF0aXZlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZXREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTHVwID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTHVwLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuYXJ5TWludXMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGRldERlcGVuZGVuY2llcyA9IHtcbiAgbHVwRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTHVwLmx1cERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgdW5hcnlNaW51c0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuYXJ5TWludXMudW5hcnlNaW51c0RlcGVuZGVuY2llcyxcbiAgY3JlYXRlRGV0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZURldFxufTtcbmV4cG9ydHMuZGV0RGVwZW5kZW5jaWVzID0gZGV0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZXV0ZXJvbk1hc3NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGRldXRlcm9uTWFzc0RlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURldXRlcm9uTWFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVEZXV0ZXJvbk1hc3Ncbn07XG5leHBvcnRzLmRldXRlcm9uTWFzc0RlcGVuZGVuY2llcyA9IGRldXRlcm9uTWFzc0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGlhZ0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGRpYWdEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgU3BhcnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuU3BhcnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEaWFnOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURpYWdcbn07XG5leHBvcnRzLmRpYWdEZXBlbmRlbmNpZXMgPSBkaWFnRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kaXN0YW5jZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBYnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcXJ0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3FydC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5hcnlNaW51cyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuYXJ5TWludXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZGlzdGFuY2VEZXBlbmRlbmNpZXMgPSB7XG4gIGFic0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Ficy5hYnNEZXBlbmRlbmNpZXMsXG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHNxcnREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTcXJ0LnNxcnREZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHVuYXJ5TWludXNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLnVuYXJ5TWludXNEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURpc3RhbmNlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURpc3RhbmNlXG59O1xuZXhwb3J0cy5kaXN0YW5jZURlcGVuZGVuY2llcyA9IGRpc3RhbmNlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kaXZpZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbnYgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJbnYuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBkaXZpZGVEZXBlbmRlbmNpZXMgPSB7XG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGludkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ludi5pbnZEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURpdmlkZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVEaXZpZGVcbn07XG5leHBvcnRzLmRpdmlkZURlcGVuZGVuY2llcyA9IGRpdmlkZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc051bWVyaWMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOdW1lcmljLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyA9IHtcbiAgbnVtZXJpY0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc051bWVyaWMubnVtZXJpY0RlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRGl2aWRlU2NhbGFyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZURpdmlkZVNjYWxhclxufTtcbmV4cG9ydHMuZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzID0gZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kb3REZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGRvdERlcGVuZGVuY2llcyA9IHtcbiAgYWRkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkLmFkZERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRG90OiBfZmFjdG9yaWVzQW55LmNyZWF0ZURvdFxufTtcbmV4cG9ydHMuZG90RGVwZW5kZW5jaWVzID0gZG90RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kb3REaXZpZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGRvdERpdmlkZURlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBkaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVEb3REaXZpZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRG90RGl2aWRlXG59O1xuZXhwb3J0cy5kb3REaXZpZGVEZXBlbmRlbmNpZXMgPSBkb3REaXZpZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRvdE11bHRpcGx5RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBkb3RNdWx0aXBseURlcGVuZGVuY2llcyA9IHtcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRG90TXVsdGlwbHk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRG90TXVsdGlwbHlcbn07XG5leHBvcnRzLmRvdE11bHRpcGx5RGVwZW5kZW5jaWVzID0gZG90TXVsdGlwbHlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRvdFBvd0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQb3cgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQb3cuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZG90UG93RGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHBvd0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1Bvdy5wb3dEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZURvdFBvdzogX2ZhY3Rvcmllc0FueS5jcmVhdGVEb3RQb3dcbn07XG5leHBvcnRzLmRvdFBvd0RlcGVuZGVuY2llcyA9IGRvdFBvd0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGVEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlRTogX2ZhY3Rvcmllc0FueS5jcmVhdGVFXG59O1xuZXhwb3J0cy5lRGVwZW5kZW5jaWVzID0gZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZWZpbW92RmFjdG9yRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZWZpbW92RmFjdG9yRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUVmaW1vdkZhY3RvcjogX2ZhY3Rvcmllc0FueS5jcmVhdGVFZmltb3ZGYWN0b3Jcbn07XG5leHBvcnRzLmVmaW1vdkZhY3RvckRlcGVuZGVuY2llcyA9IGVmaW1vdkZhY3RvckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZWlnc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBYnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBdGFuID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQXRhbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnbnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ludiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ludi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaW4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTaW4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZWlnc0RlcGVuZGVuY2llcyA9IHtcbiAgYWJzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWJzLmFic0RlcGVuZGVuY2llcyxcbiAgYWRkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkLmFkZERlcGVuZGVuY2llcyxcbiAgYWRkU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmFkZFNjYWxhckRlcGVuZGVuY2llcyxcbiAgYXRhbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0F0YW4uYXRhbkRlcGVuZGVuY2llcyxcbiAgYmlnbnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmJpZ251bWJlckRlcGVuZGVuY2llcyxcbiAgY29zRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29zLmNvc0RlcGVuZGVuY2llcyxcbiAgZXF1YWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbC5lcXVhbERlcGVuZGVuY2llcyxcbiAgaW52RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW52LmludkRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgc2luRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2luLnNpbkRlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRWlnczogX2ZhY3Rvcmllc0FueS5jcmVhdGVFaWdzXG59O1xuZXhwb3J0cy5laWdzRGVwZW5kZW5jaWVzID0gZWlnc0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZWxlY3RyaWNDb25zdGFudERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZWxlY3RyaWNDb25zdGFudERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUVsZWN0cmljQ29uc3RhbnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRWxlY3RyaWNDb25zdGFudFxufTtcbmV4cG9ydHMuZWxlY3RyaWNDb25zdGFudERlcGVuZGVuY2llcyA9IGVsZWN0cmljQ29uc3RhbnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmVsZWN0cm9uTWFzc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZWxlY3Ryb25NYXNzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRWxlY3Ryb25NYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUVsZWN0cm9uTWFzc1xufTtcbmV4cG9ydHMuZWxlY3Ryb25NYXNzRGVwZW5kZW5jaWVzID0gZWxlY3Ryb25NYXNzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lbGVtZW50YXJ5Q2hhcmdlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBlbGVtZW50YXJ5Q2hhcmdlRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRWxlbWVudGFyeUNoYXJnZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVFbGVtZW50YXJ5Q2hhcmdlXG59O1xuZXhwb3J0cy5lbGVtZW50YXJ5Q2hhcmdlRGVwZW5kZW5jaWVzID0gZWxlbWVudGFyeUNoYXJnZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXF1YWxEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBlcXVhbERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFcXVhbDogX2ZhY3Rvcmllc0FueS5jcmVhdGVFcXVhbFxufTtcbmV4cG9ydHMuZXF1YWxEZXBlbmRlbmNpZXMgPSBlcXVhbERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBlcXVhbFNjYWxhckRlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRXF1YWxTY2FsYXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRXF1YWxTY2FsYXJcbn07XG5leHBvcnRzLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzID0gZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmVxdWFsVGV4dERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlVGV4dCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmVUZXh0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc1plcm8gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc1plcm8uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZXF1YWxUZXh0RGVwZW5kZW5jaWVzID0ge1xuICBjb21wYXJlVGV4dERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBhcmVUZXh0LmNvbXBhcmVUZXh0RGVwZW5kZW5jaWVzLFxuICBpc1plcm9EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc1plcm8uaXNaZXJvRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFcXVhbFRleHQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRXF1YWxUZXh0XG59O1xuZXhwb3J0cy5lcXVhbFRleHREZXBlbmRlbmNpZXMgPSBlcXVhbFRleHREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmVyZkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGVyZkRlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRXJmOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUVyZlxufTtcbmV4cG9ydHMuZXJmRGVwZW5kZW5jaWVzID0gZXJmRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ldmFsdWF0ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJzZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcnNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGV2YWx1YXRlRGVwZW5kZW5jaWVzID0ge1xuICBwYXJzZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcnNlLnBhcnNlRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFdmFsdWF0ZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVFdmFsdWF0ZVxufTtcbmV4cG9ydHMuZXZhbHVhdGVEZXBlbmRlbmNpZXMgPSBldmFsdWF0ZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXhwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZXhwRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFeHA6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRXhwXG59O1xuZXhwb3J0cy5leHBEZXBlbmRlbmNpZXMgPSBleHBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV4cG1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWJzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWJzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lkZW50aXR5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSWRlbnRpdHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ludiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ludi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBleHBtRGVwZW5kZW5jaWVzID0ge1xuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBpZGVudGl0eURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lkZW50aXR5LmlkZW50aXR5RGVwZW5kZW5jaWVzLFxuICBpbnZEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbnYuaW52RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVFeHBtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUV4cG1cbn07XG5leHBvcnRzLmV4cG1EZXBlbmRlbmNpZXMgPSBleHBtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5leHBtMURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZXhwbTFEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRXhwbTE6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRXhwbTFcbn07XG5leHBvcnRzLmV4cG0xRGVwZW5kZW5jaWVzID0gZXhwbTFEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmV5ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGV5ZURlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlRXllOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUV5ZVxufTtcbmV4cG9ydHMuZXllRGVwZW5kZW5jaWVzID0gZXllRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mYWN0b3JpYWxEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzR2FtbWEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNHYW1tYS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBmYWN0b3JpYWxEZXBlbmRlbmNpZXMgPSB7XG4gIGdhbW1hRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzR2FtbWEuZ2FtbWFEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZhY3RvcmlhbDogX2ZhY3Rvcmllc0FueS5jcmVhdGVGYWN0b3JpYWxcbn07XG5leHBvcnRzLmZhY3RvcmlhbERlcGVuZGVuY2llcyA9IGZhY3RvcmlhbERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmFsc2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBmYWxzZURlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlRmFsc2U6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRmFsc2Vcbn07XG5leHBvcnRzLmZhbHNlRGVwZW5kZW5jaWVzID0gZmFsc2VEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZhcmFkYXlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZhcmFkYXlEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVGYXJhZGF5OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZhcmFkYXlcbn07XG5leHBvcnRzLmZhcmFkYXlEZXBlbmRlbmNpZXMgPSBmYXJhZGF5RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mZXJtaUNvdXBsaW5nRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBmZXJtaUNvdXBsaW5nRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRmVybWlDb3VwbGluZzogX2ZhY3Rvcmllc0FueS5jcmVhdGVGZXJtaUNvdXBsaW5nXG59O1xuZXhwb3J0cy5mZXJtaUNvdXBsaW5nRGVwZW5kZW5jaWVzID0gZmVybWlDb3VwbGluZ0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuRmlib25hY2NpSGVhcERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NtYWxsZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTbWFsbGVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIEZpYm9uYWNjaUhlYXBEZXBlbmRlbmNpZXMgPSB7XG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIHNtYWxsZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTbWFsbGVyLnNtYWxsZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZpYm9uYWNjaUhlYXBDbGFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVGaWJvbmFjY2lIZWFwQ2xhc3Ncbn07XG5leHBvcnRzLkZpYm9uYWNjaUhlYXBEZXBlbmRlbmNpZXMgPSBGaWJvbmFjY2lIZWFwRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5maWx0ZXJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBmaWx0ZXJEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZpbHRlcjogX2ZhY3Rvcmllc0FueS5jcmVhdGVGaWx0ZXJcbn07XG5leHBvcnRzLmZpbHRlckRlcGVuZGVuY2llcyA9IGZpbHRlckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmlsdGVyVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZmlsdGVyVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVGaWx0ZXJUcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlRmlsdGVyVHJhbnNmb3JtXG59O1xuZXhwb3J0cy5maWx0ZXJUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSBmaWx0ZXJUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZpbmVTdHJ1Y3R1cmVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBmaW5lU3RydWN0dXJlRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZpbmVTdHJ1Y3R1cmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRmluZVN0cnVjdHVyZVxufTtcbmV4cG9ydHMuZmluZVN0cnVjdHVyZURlcGVuZGVuY2llcyA9IGZpbmVTdHJ1Y3R1cmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZpcnN0UmFkaWF0aW9uRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBmaXJzdFJhZGlhdGlvbkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZpcnN0UmFkaWF0aW9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZpcnN0UmFkaWF0aW9uXG59O1xuZXhwb3J0cy5maXJzdFJhZGlhdGlvbkRlcGVuZGVuY2llcyA9IGZpcnN0UmFkaWF0aW9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5maXhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDZWlsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ2VpbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRmxvb3IgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGbG9vci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBmaXhEZXBlbmRlbmNpZXMgPSB7XG4gIENvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuQ29tcGxleERlcGVuZGVuY2llcyxcbiAgY2VpbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NlaWwuY2VpbERlcGVuZGVuY2llcyxcbiAgZmxvb3JEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGbG9vci5mbG9vckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRml4OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZpeFxufTtcbmV4cG9ydHMuZml4RGVwZW5kZW5jaWVzID0gZml4RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mbGF0dGVuRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBmbGF0dGVuRGVwZW5kZW5jaWVzID0ge1xuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVGbGF0dGVuOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZsYXR0ZW5cbn07XG5leHBvcnRzLmZsYXR0ZW5EZXBlbmRlbmNpZXMgPSBmbGF0dGVuRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mbG9vckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNSb3VuZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1JvdW5kLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZsb29yRGVwZW5kZW5jaWVzID0ge1xuICByb3VuZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1JvdW5kLnJvdW5kRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVGbG9vcjogX2ZhY3Rvcmllc0FueS5jcmVhdGVGbG9vclxufTtcbmV4cG9ydHMuZmxvb3JEZXBlbmRlbmNpZXMgPSBmbG9vckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZm9yRWFjaERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGZvckVhY2hEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZvckVhY2g6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRm9yRWFjaFxufTtcbmV4cG9ydHMuZm9yRWFjaERlcGVuZGVuY2llcyA9IGZvckVhY2hEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZvckVhY2hUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBmb3JFYWNoVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVGb3JFYWNoVHJhbnNmb3JtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZvckVhY2hUcmFuc2Zvcm1cbn07XG5leHBvcnRzLmZvckVhY2hUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSBmb3JFYWNoVHJhbnNmb3JtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mb3JtYXREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBmb3JtYXREZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUZvcm1hdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVGb3JtYXRcbn07XG5leHBvcnRzLmZvcm1hdERlcGVuZGVuY2llcyA9IGZvcm1hdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZnJhY3Rpb25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZnJhY3Rpb25EZXBlbmRlbmNpZXMgPSB7XG4gIEZyYWN0aW9uRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcy5GcmFjdGlvbkRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlRnJhY3Rpb246IF9mYWN0b3JpZXNBbnkuY3JlYXRlRnJhY3Rpb25cbn07XG5leHBvcnRzLmZyYWN0aW9uRGVwZW5kZW5jaWVzID0gZnJhY3Rpb25EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkZyYWN0aW9uRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgRnJhY3Rpb25EZXBlbmRlbmNpZXMgPSB7XG4gIGNyZWF0ZUZyYWN0aW9uQ2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlRnJhY3Rpb25DbGFzc1xufTtcbmV4cG9ydHMuRnJhY3Rpb25EZXBlbmRlbmNpZXMgPSBGcmFjdGlvbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBGdW5jdGlvbkFzc2lnbm1lbnROb2RlRGVwZW5kZW5jaWVzID0ge1xuICBOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTm9kZS5Ob2RlRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVGdW5jdGlvbkFzc2lnbm1lbnROb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZ1bmN0aW9uQXNzaWdubWVudE5vZGVcbn07XG5leHBvcnRzLkZ1bmN0aW9uQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXMgPSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5GdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N5bWJvbE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIEZ1bmN0aW9uTm9kZURlcGVuZGVuY2llcyA9IHtcbiAgTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcyxcbiAgU3ltYm9sTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N5bWJvbE5vZGUuU3ltYm9sTm9kZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlRnVuY3Rpb25Ob2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUZ1bmN0aW9uTm9kZVxufTtcbmV4cG9ydHMuRnVuY3Rpb25Ob2RlRGVwZW5kZW5jaWVzID0gRnVuY3Rpb25Ob2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nYW1tYURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BvdyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Bvdy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBnYW1tYURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHBvd0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1Bvdy5wb3dEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUdhbW1hOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUdhbW1hXG59O1xuZXhwb3J0cy5nYW1tYURlcGVuZGVuY2llcyA9IGdhbW1hRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nYXNDb25zdGFudERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZ2FzQ29uc3RhbnREZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVHYXNDb25zdGFudDogX2ZhY3Rvcmllc0FueS5jcmVhdGVHYXNDb25zdGFudFxufTtcbmV4cG9ydHMuZ2FzQ29uc3RhbnREZXBlbmRlbmNpZXMgPSBnYXNDb25zdGFudERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZ2NkRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZ2NkRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlR2NkOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUdjZFxufTtcbmV4cG9ydHMuZ2NkRGVwZW5kZW5jaWVzID0gZ2NkRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nZXRNYXRyaXhEYXRhVHlwZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGdldE1hdHJpeERhdGFUeXBlRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVHZXRNYXRyaXhEYXRhVHlwZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVHZXRNYXRyaXhEYXRhVHlwZVxufTtcbmV4cG9ydHMuZ2V0TWF0cml4RGF0YVR5cGVEZXBlbmRlbmNpZXMgPSBnZXRNYXRyaXhEYXRhVHlwZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZ3Jhdml0YXRpb25Db25zdGFudERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgZ3Jhdml0YXRpb25Db25zdGFudERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUdyYXZpdGF0aW9uQ29uc3RhbnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlR3Jhdml0YXRpb25Db25zdGFudFxufTtcbmV4cG9ydHMuZ3Jhdml0YXRpb25Db25zdGFudERlcGVuZGVuY2llcyA9IGdyYXZpdGF0aW9uQ29uc3RhbnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmdyYXZpdHlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGdyYXZpdHlEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVHcmF2aXR5OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUdyYXZpdHlcbn07XG5leHBvcnRzLmdyYXZpdHlEZXBlbmRlbmNpZXMgPSBncmF2aXR5RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5oYXJ0cmVlRW5lcmd5RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBoYXJ0cmVlRW5lcmd5RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSGFydHJlZUVuZXJneTogX2ZhY3Rvcmllc0FueS5jcmVhdGVIYXJ0cmVlRW5lcmd5XG59O1xuZXhwb3J0cy5oYXJ0cmVlRW5lcmd5RGVwZW5kZW5jaWVzID0gaGFydHJlZUVuZXJneURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaGFzTnVtZXJpY1ZhbHVlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTnVtZXJpYyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzTnVtZXJpYy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBoYXNOdW1lcmljVmFsdWVEZXBlbmRlbmNpZXMgPSB7XG4gIGlzTnVtZXJpY0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzTnVtZXJpYy5pc051bWVyaWNEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUhhc051bWVyaWNWYWx1ZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVIYXNOdW1lcmljVmFsdWVcbn07XG5leHBvcnRzLmhhc051bWVyaWNWYWx1ZURlcGVuZGVuY2llcyA9IGhhc051bWVyaWNWYWx1ZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaGVscERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNIZWxwQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNIZWxwQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgaGVscERlcGVuZGVuY2llcyA9IHtcbiAgSGVscERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0hlbHBDbGFzcy5IZWxwRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVIZWxwOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUhlbHBcbn07XG5leHBvcnRzLmhlbHBEZXBlbmRlbmNpZXMgPSBoZWxwRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5IZWxwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUGFyc2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgSGVscERlcGVuZGVuY2llcyA9IHtcbiAgcGFyc2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQYXJzZS5wYXJzZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlSGVscENsYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUhlbHBDbGFzc1xufTtcbmV4cG9ydHMuSGVscERlcGVuZGVuY2llcyA9IEhlbHBEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmh5cG90RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FicyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Ficy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzUG9zaXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTbWFsbGVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU21hbGxlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3FydCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NxcnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgaHlwb3REZXBlbmRlbmNpZXMgPSB7XG4gIGFic0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Ficy5hYnNEZXBlbmRlbmNpZXMsXG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGlzUG9zaXRpdmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlLmlzUG9zaXRpdmVEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHNtYWxsZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTbWFsbGVyLnNtYWxsZXJEZXBlbmRlbmNpZXMsXG4gIHNxcnREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTcXJ0LnNxcnREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUh5cG90OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUh5cG90XG59O1xuZXhwb3J0cy5oeXBvdERlcGVuZGVuY2llcyA9IGh5cG90RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpRGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSVxufTtcbmV4cG9ydHMuaURlcGVuZGVuY2llcyA9IGlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlkZW50aXR5RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgaWRlbnRpdHlEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBTcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5TcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUlkZW50aXR5OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUlkZW50aXR5XG59O1xuZXhwb3J0cy5pZGVudGl0eURlcGVuZGVuY2llcyA9IGlkZW50aXR5RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pbURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGltRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVJbTogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbVxufTtcbmV4cG9ydHMuaW1EZXBlbmRlbmNpZXMgPSBpbURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuSW1tdXRhYmxlRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NtYWxsZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTbWFsbGVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIEltbXV0YWJsZURlbnNlTWF0cml4RGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHNtYWxsZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTbWFsbGVyLnNtYWxsZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzc1xufTtcbmV4cG9ydHMuSW1tdXRhYmxlRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMgPSBJbW11dGFibGVEZW5zZU1hdHJpeERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW5kZXhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgaW5kZXhEZXBlbmRlbmNpZXMgPSB7XG4gIEluZGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5JbmRleERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSW5kZXg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSW5kZXhcbn07XG5leHBvcnRzLmluZGV4RGVwZW5kZW5jaWVzID0gaW5kZXhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkluZGV4RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0ltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJbW11dGFibGVEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIEluZGV4RGVwZW5kZW5jaWVzID0ge1xuICBJbW11dGFibGVEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3MuSW1tdXRhYmxlRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUluZGV4Q2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSW5kZXhDbGFzc1xufTtcbmV4cG9ydHMuSW5kZXhEZXBlbmRlbmNpZXMgPSBJbmRleERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuSW5kZXhOb2RlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSYW5nZUNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUmFuZ2VDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2l6ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgSW5kZXhOb2RlRGVwZW5kZW5jaWVzID0ge1xuICBOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTm9kZS5Ob2RlRGVwZW5kZW5jaWVzLFxuICBSYW5nZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1JhbmdlQ2xhc3MuUmFuZ2VEZXBlbmRlbmNpZXMsXG4gIHNpemVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUluZGV4Tm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmRleE5vZGVcbn07XG5leHBvcnRzLkluZGV4Tm9kZURlcGVuZGVuY2llcyA9IEluZGV4Tm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW5kZXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgaW5kZXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIEluZGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5JbmRleERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSW5kZXhUcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlSW5kZXhUcmFuc2Zvcm1cbn07XG5leHBvcnRzLmluZGV4VHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gaW5kZXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkluZmluaXR5RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgSW5maW5pdHlEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlSW5maW5pdHk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSW5maW5pdHlcbn07XG5leHBvcnRzLkluZmluaXR5RGVwZW5kZW5jaWVzID0gSW5maW5pdHlEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmludGVyc2VjdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBYnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NtYWxsZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgaW50ZXJzZWN0RGVwZW5kZW5jaWVzID0ge1xuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICBzbWFsbGVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU21hbGxlci5zbWFsbGVyRGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVJbnRlcnNlY3Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSW50ZXJzZWN0XG59O1xuZXhwb3J0cy5pbnRlcnNlY3REZXBlbmRlbmNpZXMgPSBpbnRlcnNlY3REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmludkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBYnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGV0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGV0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lkZW50aXR5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSWRlbnRpdHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5hcnlNaW51cyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuYXJ5TWludXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgaW52RGVwZW5kZW5jaWVzID0ge1xuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBkZXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZXQuZGV0RGVwZW5kZW5jaWVzLFxuICBkaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBpZGVudGl0eURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lkZW50aXR5LmlkZW50aXR5RGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICB1bmFyeU1pbnVzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5hcnlNaW51cy51bmFyeU1pbnVzRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVJbnY6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSW52XG59O1xuZXhwb3J0cy5pbnZEZXBlbmRlbmNpZXMgPSBpbnZEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmludmVyc2VDb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGludmVyc2VDb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVJbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUludmVyc2VDb25kdWN0YW5jZVF1YW50dW1cbn07XG5leHBvcnRzLmludmVyc2VDb25kdWN0YW5jZVF1YW50dW1EZXBlbmRlbmNpZXMgPSBpbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc0ludGVnZXJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpc0ludGVnZXJEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUlzSW50ZWdlcjogX2ZhY3Rvcmllc0FueS5jcmVhdGVJc0ludGVnZXJcbn07XG5leHBvcnRzLmlzSW50ZWdlckRlcGVuZGVuY2llcyA9IGlzSW50ZWdlckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNOYU5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpc05hTkRlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlSXNOYU46IF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNOYU5cbn07XG5leHBvcnRzLmlzTmFORGVwZW5kZW5jaWVzID0gaXNOYU5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzTmVnYXRpdmVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpc05lZ2F0aXZlRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVJc05lZ2F0aXZlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzTmVnYXRpdmVcbn07XG5leHBvcnRzLmlzTmVnYXRpdmVEZXBlbmRlbmNpZXMgPSBpc05lZ2F0aXZlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc051bWVyaWNEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpc051bWVyaWNEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUlzTnVtZXJpYzogX2ZhY3Rvcmllc0FueS5jcmVhdGVJc051bWVyaWNcbn07XG5leHBvcnRzLmlzTnVtZXJpY0RlcGVuZGVuY2llcyA9IGlzTnVtZXJpY0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNQb3NpdGl2ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGlzUG9zaXRpdmVEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUlzUG9zaXRpdmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNQb3NpdGl2ZVxufTtcbmV4cG9ydHMuaXNQb3NpdGl2ZURlcGVuZGVuY2llcyA9IGlzUG9zaXRpdmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzUHJpbWVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpc1ByaW1lRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVJc1ByaW1lOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzUHJpbWVcbn07XG5leHBvcnRzLmlzUHJpbWVEZXBlbmRlbmNpZXMgPSBpc1ByaW1lRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc1plcm9EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBpc1plcm9EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUlzWmVybzogX2ZhY3Rvcmllc0FueS5jcmVhdGVJc1plcm9cbn07XG5leHBvcnRzLmlzWmVyb0RlcGVuZGVuY2llcyA9IGlzWmVyb0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMua2xkaXZlcmdlbmNlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRG90RGl2aWRlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRG90RGl2aWRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc051bWVyaWMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc051bWVyaWMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xvZyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xvZy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdW0gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdW0uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIga2xkaXZlcmdlbmNlRGVwZW5kZW5jaWVzID0ge1xuICBkaXZpZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGUuZGl2aWRlRGVwZW5kZW5jaWVzLFxuICBkb3REaXZpZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEb3REaXZpZGUuZG90RGl2aWRlRGVwZW5kZW5jaWVzLFxuICBpc051bWVyaWNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc051bWVyaWMuaXNOdW1lcmljRGVwZW5kZW5jaWVzLFxuICBsb2dEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNMb2cubG9nRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICBzdW1EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdW0uc3VtRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVLbGRpdmVyZ2VuY2U6IF9mYWN0b3JpZXNBbnkuY3JlYXRlS2xkaXZlcmdlbmNlXG59O1xuZXhwb3J0cy5rbGRpdmVyZ2VuY2VEZXBlbmRlbmNpZXMgPSBrbGRpdmVyZ2VuY2VEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmtsaXR6aW5nRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBrbGl0emluZ0RlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUtsaXR6aW5nOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUtsaXR6aW5nXG59O1xuZXhwb3J0cy5rbGl0emluZ0RlcGVuZGVuY2llcyA9IGtsaXR6aW5nRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5rcm9uRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBrcm9uRGVwZW5kZW5jaWVzID0ge1xuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVLcm9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUtyb25cbn07XG5leHBvcnRzLmtyb25EZXBlbmRlbmNpZXMgPSBrcm9uRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5MTjEwRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgTE4xMERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMTjEwOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUxOMTBcbn07XG5leHBvcnRzLkxOMTBEZXBlbmRlbmNpZXMgPSBMTjEwRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5MTjJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBMTjJEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlTE4yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUxOMlxufTtcbmV4cG9ydHMuTE4yRGVwZW5kZW5jaWVzID0gTE4yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5MT0cxMEVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBMT0cxMEVEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlTE9HMTBFOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUxPRzEwRVxufTtcbmV4cG9ydHMuTE9HMTBFRGVwZW5kZW5jaWVzID0gTE9HMTBFRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5MT0cyRURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIExPRzJFRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUxPRzJFOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUxPRzJFXG59O1xuZXhwb3J0cy5MT0cyRURlcGVuZGVuY2llcyA9IExPRzJFRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sYXJnZXJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBsYXJnZXJEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTGFyZ2VyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUxhcmdlclxufTtcbmV4cG9ydHMubGFyZ2VyRGVwZW5kZW5jaWVzID0gbGFyZ2VyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sYXJnZXJFcURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGxhcmdlckVxRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUxhcmdlckVxOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUxhcmdlckVxXG59O1xuZXhwb3J0cy5sYXJnZXJFcURlcGVuZGVuY2llcyA9IGxhcmdlckVxRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sY21EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGxjbURlcGVuZGVuY2llcyA9IHtcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTGNtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUxjbVxufTtcbmV4cG9ydHMubGNtRGVwZW5kZW5jaWVzID0gbGNtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sZWZ0U2hpZnREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzWmVyb3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNaZXJvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBsZWZ0U2hpZnREZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgemVyb3NEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNaZXJvcy56ZXJvc0RlcGVuZGVuY2llcyxcbiAgY3JlYXRlTGVmdFNoaWZ0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUxlZnRTaGlmdFxufTtcbmV4cG9ydHMubGVmdFNoaWZ0RGVwZW5kZW5jaWVzID0gbGVmdFNoaWZ0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sb2dEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbG9nRGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUxvZzogX2ZhY3Rvcmllc0FueS5jcmVhdGVMb2dcbn07XG5leHBvcnRzLmxvZ0RlcGVuZGVuY2llcyA9IGxvZ0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubG9nMTBEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGxvZzEwRGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUxvZzEwOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUxvZzEwXG59O1xuZXhwb3J0cy5sb2cxMERlcGVuZGVuY2llcyA9IGxvZzEwRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sb2cxcERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTG9nID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTG9nLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGxvZzFwRGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGxvZ0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xvZy5sb2dEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUxvZzFwOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUxvZzFwXG59O1xuZXhwb3J0cy5sb2cxcERlcGVuZGVuY2llcyA9IGxvZzFwRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sb2cyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBsb2cyRGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUxvZzI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTG9nMlxufTtcbmV4cG9ydHMubG9nMkRlcGVuZGVuY2llcyA9IGxvZzJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxvc2NobWlkdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbG9zY2htaWR0RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTG9zY2htaWR0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZUxvc2NobWlkdFxufTtcbmV4cG9ydHMubG9zY2htaWR0RGVwZW5kZW5jaWVzID0gbG9zY2htaWR0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sc29sdmVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGxzb2x2ZURlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBkaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVMc29sdmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTHNvbHZlXG59O1xuZXhwb3J0cy5sc29sdmVEZXBlbmRlbmNpZXMgPSBsc29sdmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmx1cERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3BhQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcGFDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWJzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWJzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTGFyZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTGFyZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuYXJ5TWludXMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIGx1cERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBTcGFEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTcGFDbGFzcy5TcGFEZXBlbmRlbmNpZXMsXG4gIFNwYXJzZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLlNwYXJzZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgYWJzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWJzLmFic0RlcGVuZGVuY2llcyxcbiAgYWRkU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmFkZFNjYWxhckRlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbGFyZ2VyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTGFyZ2VyLmxhcmdlckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgdW5hcnlNaW51c0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuYXJ5TWludXMudW5hcnlNaW51c0RlcGVuZGVuY2llcyxcbiAgY3JlYXRlTHVwOiBfZmFjdG9yaWVzQW55LmNyZWF0ZUx1cFxufTtcbmV4cG9ydHMubHVwRGVwZW5kZW5jaWVzID0gbHVwRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sdXNvbHZlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMc29sdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMc29sdmUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0x1cCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0x1cC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTbHUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTbHUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1Vzb2x2ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Vzb2x2ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBsdXNvbHZlRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGxzb2x2ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xzb2x2ZS5sc29sdmVEZXBlbmRlbmNpZXMsXG4gIGx1cERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0x1cC5sdXBEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHNsdURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NsdS5zbHVEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHVzb2x2ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1Vzb2x2ZS51c29sdmVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZUx1c29sdmU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTHVzb2x2ZVxufTtcbmV4cG9ydHMubHVzb2x2ZURlcGVuZGVuY2llcyA9IGx1c29sdmVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1hZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBYnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hcCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hcC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWVkaWFuID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWVkaWFuLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1hZERlcGVuZGVuY2llcyA9IHtcbiAgYWJzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWJzLmFic0RlcGVuZGVuY2llcyxcbiAgbWFwRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWFwLm1hcERlcGVuZGVuY2llcyxcbiAgbWVkaWFuRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWVkaWFuLm1lZGlhbkRlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTWFkOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1hZFxufTtcbmV4cG9ydHMubWFkRGVwZW5kZW5jaWVzID0gbWFkRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tYWduZXRpY0NvbnN0YW50RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtYWduZXRpY0NvbnN0YW50RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTWFnbmV0aWNDb25zdGFudDogX2ZhY3Rvcmllc0FueS5jcmVhdGVNYWduZXRpY0NvbnN0YW50XG59O1xuZXhwb3J0cy5tYWduZXRpY0NvbnN0YW50RGVwZW5kZW5jaWVzID0gbWFnbmV0aWNDb25zdGFudERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWFnbmV0aWNGbHV4UXVhbnR1bURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbWFnbmV0aWNGbHV4UXVhbnR1bURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1hZ25ldGljRmx1eFF1YW50dW06IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWFnbmV0aWNGbHV4UXVhbnR1bVxufTtcbmV4cG9ydHMubWFnbmV0aWNGbHV4UXVhbnR1bURlcGVuZGVuY2llcyA9IG1hZ25ldGljRmx1eFF1YW50dW1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1hcERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1hcERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTWFwOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1hcFxufTtcbmV4cG9ydHMubWFwRGVwZW5kZW5jaWVzID0gbWFwRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tYXBUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtYXBUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1hcFRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVNYXBUcmFuc2Zvcm1cbn07XG5leHBvcnRzLm1hcFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IG1hcFRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWF0cml4RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1hdHJpeERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcy5NYXRyaXhEZXBlbmRlbmNpZXMsXG4gIFNwYXJzZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzLlNwYXJzZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTWF0cml4OiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1hdHJpeFxufTtcbmV4cG9ydHMubWF0cml4RGVwZW5kZW5jaWVzID0gbWF0cml4RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5NYXRyaXhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBNYXRyaXhEZXBlbmRlbmNpZXMgPSB7XG4gIGNyZWF0ZU1hdHJpeENsYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1hdHJpeENsYXNzXG59O1xuZXhwb3J0cy5NYXRyaXhEZXBlbmRlbmNpZXMgPSBNYXRyaXhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1heERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbWF4RGVwZW5kZW5jaWVzID0ge1xuICBsYXJnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNMYXJnZXIubGFyZ2VyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNYXg6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWF4XG59O1xuZXhwb3J0cy5tYXhEZXBlbmRlbmNpZXMgPSBtYXhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1heFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbWF4VHJhbnNmb3JtRGVwZW5kZW5jaWVzID0ge1xuICBsYXJnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNMYXJnZXIubGFyZ2VyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNYXhUcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWF4VHJhbnNmb3JtXG59O1xuZXhwb3J0cy5tYXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSBtYXhUcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1lYW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbWVhbkRlcGVuZGVuY2llcyA9IHtcbiAgYWRkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkLmFkZERlcGVuZGVuY2llcyxcbiAgZGl2aWRlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlLmRpdmlkZURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTWVhbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVNZWFuXG59O1xuZXhwb3J0cy5tZWFuRGVwZW5kZW5jaWVzID0gbWVhbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWVhblRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtZWFuVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0ge1xuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGUuZGl2aWRlRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNZWFuVHJhbnNmb3JtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1lYW5UcmFuc2Zvcm1cbn07XG5leHBvcnRzLm1lYW5UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSBtZWFuVHJhbnNmb3JtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tZWRpYW5EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGFyZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJ0aXRpb25TZWxlY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJ0aXRpb25TZWxlY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbWVkaWFuRGVwZW5kZW5jaWVzID0ge1xuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBjb21wYXJlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZS5jb21wYXJlRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGUuZGl2aWRlRGVwZW5kZW5jaWVzLFxuICBwYXJ0aXRpb25TZWxlY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQYXJ0aXRpb25TZWxlY3QucGFydGl0aW9uU2VsZWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNZWRpYW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlTWVkaWFuXG59O1xuZXhwb3J0cy5tZWRpYW5EZXBlbmRlbmNpZXMgPSBtZWRpYW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1pbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNTbWFsbGVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU21hbGxlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtaW5EZXBlbmRlbmNpZXMgPSB7XG4gIHNtYWxsZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTbWFsbGVyLnNtYWxsZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1pbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVNaW5cbn07XG5leHBvcnRzLm1pbkRlcGVuZGVuY2llcyA9IG1pbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWluVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1NtYWxsZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTbWFsbGVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1pblRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHtcbiAgc21hbGxlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXIuc21hbGxlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTWluVHJhbnNmb3JtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1pblRyYW5zZm9ybVxufTtcbmV4cG9ydHMubWluVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gbWluVHJhbnNmb3JtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tb2REZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtb2REZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTW9kOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vZFxufTtcbmV4cG9ydHMubW9kRGVwZW5kZW5jaWVzID0gbW9kRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tb2RlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTmFOID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOYU4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTnVtZXJpYyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzTnVtZXJpYy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtb2RlRGVwZW5kZW5jaWVzID0ge1xuICBpc05hTkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzTmFOLmlzTmFORGVwZW5kZW5jaWVzLFxuICBpc051bWVyaWNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc051bWVyaWMuaXNOdW1lcmljRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vZGVcbn07XG5leHBvcnRzLm1vZGVEZXBlbmRlbmNpZXMgPSBtb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tb2xhck1hc3NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1vbGFyTWFzc0RlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU1vbGFyTWFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVNb2xhck1hc3Ncbn07XG5leHBvcnRzLm1vbGFyTWFzc0RlcGVuZGVuY2llcyA9IG1vbGFyTWFzc0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubW9sYXJNYXNzQzEyRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtb2xhck1hc3NDMTJEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNb2xhck1hc3NDMTI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTW9sYXJNYXNzQzEyXG59O1xuZXhwb3J0cy5tb2xhck1hc3NDMTJEZXBlbmRlbmNpZXMgPSBtb2xhck1hc3NDMTJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1vbGFyUGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG1vbGFyUGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNb2xhclBsYW5ja0NvbnN0YW50OiBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vbGFyUGxhbmNrQ29uc3RhbnRcbn07XG5leHBvcnRzLm1vbGFyUGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXMgPSBtb2xhclBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tb2xhclZvbHVtZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbW9sYXJWb2x1bWVEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNb2xhclZvbHVtZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVNb2xhclZvbHVtZVxufTtcbmV4cG9ydHMubW9sYXJWb2x1bWVEZXBlbmRlbmNpZXMgPSBtb2xhclZvbHVtZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubXVsdGlub21pYWxEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZhY3RvcmlhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZhY3RvcmlhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc1Bvc2l0aXZlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNQb3NpdGl2ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtdWx0aW5vbWlhbERlcGVuZGVuY2llcyA9IHtcbiAgYWRkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkLmFkZERlcGVuZGVuY2llcyxcbiAgZGl2aWRlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlLmRpdmlkZURlcGVuZGVuY2llcyxcbiAgZmFjdG9yaWFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRmFjdG9yaWFsLmZhY3RvcmlhbERlcGVuZGVuY2llcyxcbiAgaXNJbnRlZ2VyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNJbnRlZ2VyLmlzSW50ZWdlckRlcGVuZGVuY2llcyxcbiAgaXNQb3NpdGl2ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzUG9zaXRpdmUuaXNQb3NpdGl2ZURlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTXVsdGlub21pYWw6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTXVsdGlub21pYWxcbn07XG5leHBvcnRzLm11bHRpbm9taWFsRGVwZW5kZW5jaWVzID0gbXVsdGlub21pYWxEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm11bHRpcGx5RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG11bHRpcGx5RGVwZW5kZW5jaWVzID0ge1xuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVNdWx0aXBseTogX2ZhY3Rvcmllc0FueS5jcmVhdGVNdWx0aXBseVxufTtcbmV4cG9ydHMubXVsdGlwbHlEZXBlbmRlbmNpZXMgPSBtdWx0aXBseURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlTXVsdGlwbHlTY2FsYXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlTXVsdGlwbHlTY2FsYXJcbn07XG5leHBvcnRzLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzID0gbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLk5hTkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIE5hTkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVOYU46IF9mYWN0b3JpZXNBbnkuY3JlYXRlTmFOXG59O1xuZXhwb3J0cy5OYU5EZXBlbmRlbmNpZXMgPSBOYU5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm5ldXRyb25NYXNzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBuZXV0cm9uTWFzc0RlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU5ldXRyb25NYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU5ldXRyb25NYXNzXG59O1xuZXhwb3J0cy5uZXV0cm9uTWFzc0RlcGVuZGVuY2llcyA9IG5ldXRyb25NYXNzRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5Ob2RlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgTm9kZURlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlTm9kZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVOb2RlXG59O1xuZXhwb3J0cy5Ob2RlRGVwZW5kZW5jaWVzID0gTm9kZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBYnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uaiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbmouZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xhcmdlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQb3cgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQb3cuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NtYWxsZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTbWFsbGVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcXJ0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3FydC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBub3JtRGVwZW5kZW5jaWVzID0ge1xuICBhYnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBYnMuYWJzRGVwZW5kZW5jaWVzLFxuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBjb25qRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29uai5jb25qRGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBsYXJnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNMYXJnZXIubGFyZ2VyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICBwb3dEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQb3cucG93RGVwZW5kZW5jaWVzLFxuICBzbWFsbGVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU21hbGxlci5zbWFsbGVyRGVwZW5kZW5jaWVzLFxuICBzcXJ0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3FydC5zcXJ0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVOb3JtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU5vcm1cbn07XG5leHBvcnRzLm5vcm1EZXBlbmRlbmNpZXMgPSBub3JtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ub3REZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBub3REZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU5vdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVOb3Rcbn07XG5leHBvcnRzLm5vdERlcGVuZGVuY2llcyA9IG5vdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubnRoUm9vdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgbnRoUm9vdERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVOdGhSb290OiBfZmFjdG9yaWVzQW55LmNyZWF0ZU50aFJvb3Rcbn07XG5leHBvcnRzLm50aFJvb3REZXBlbmRlbmNpZXMgPSBudGhSb290RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5udGhSb290c0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBudGhSb290c0RlcGVuZGVuY2llcyA9IHtcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICBkaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVOdGhSb290czogX2ZhY3Rvcmllc0FueS5jcmVhdGVOdGhSb290c1xufTtcbmV4cG9ydHMubnRoUm9vdHNEZXBlbmRlbmNpZXMgPSBudGhSb290c0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubnVjbGVhck1hZ25ldG9uRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBudWNsZWFyTWFnbmV0b25EZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVOdWNsZWFyTWFnbmV0b246IF9mYWN0b3JpZXNBbnkuY3JlYXRlTnVjbGVhck1hZ25ldG9uXG59O1xuZXhwb3J0cy5udWNsZWFyTWFnbmV0b25EZXBlbmRlbmNpZXMgPSBudWNsZWFyTWFnbmV0b25EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm51bGxEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBudWxsRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVOdWxsOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU51bGxcbn07XG5leHBvcnRzLm51bGxEZXBlbmRlbmNpZXMgPSBudWxsRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5udW1iZXJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBudW1iZXJEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU51bWJlcjogX2ZhY3Rvcmllc0FueS5jcmVhdGVOdW1iZXJcbn07XG5leHBvcnRzLm51bWJlckRlcGVuZGVuY2llcyA9IG51bWJlckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubnVtZXJpY0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdudW1iZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdudW1iZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRnJhY3Rpb24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc051bWJlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc051bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBudW1lcmljRGVwZW5kZW5jaWVzID0ge1xuICBiaWdudW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdudW1iZXIuYmlnbnVtYmVyRGVwZW5kZW5jaWVzLFxuICBmcmFjdGlvbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZyYWN0aW9uLmZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICBudW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOdW1iZXIubnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVOdW1lcmljOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU51bWVyaWNcbn07XG5leHBvcnRzLm51bWVyaWNEZXBlbmRlbmNpZXMgPSBudW1lcmljRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5PYmplY3ROb2RlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIE9iamVjdE5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU9iamVjdE5vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlT2JqZWN0Tm9kZVxufTtcbmV4cG9ydHMuT2JqZWN0Tm9kZURlcGVuZGVuY2llcyA9IE9iamVjdE5vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm9uZXNEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG9uZXNEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlT25lczogX2ZhY3Rvcmllc0FueS5jcmVhdGVPbmVzXG59O1xuZXhwb3J0cy5vbmVzRGVwZW5kZW5jaWVzID0gb25lc0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuT3BlcmF0b3JOb2RlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIE9wZXJhdG9yTm9kZURlcGVuZGVuY2llcyA9IHtcbiAgTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc05vZGUuTm9kZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlT3BlcmF0b3JOb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU9wZXJhdG9yTm9kZVxufTtcbmV4cG9ydHMuT3BlcmF0b3JOb2RlRGVwZW5kZW5jaWVzID0gT3BlcmF0b3JOb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5vckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIG9yRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZU9yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZU9yXG59O1xuZXhwb3J0cy5vckRlcGVuZGVuY2llcyA9IG9yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5QYXJlbnRoZXNpc05vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgUGFyZW50aGVzaXNOb2RlRGVwZW5kZW5jaWVzID0ge1xuICBOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTm9kZS5Ob2RlRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQYXJlbnRoZXNpc05vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGFyZW50aGVzaXNOb2RlXG59O1xuZXhwb3J0cy5QYXJlbnRoZXNpc05vZGVEZXBlbmRlbmNpZXMgPSBQYXJlbnRoZXNpc05vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBhcnNlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FjY2Vzc29yTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FjY2Vzc29yTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQXJyYXlOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQXJyYXlOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBc3NpZ25tZW50Tm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0Fzc2lnbm1lbnROb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNCbG9ja05vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCbG9ja05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbmRpdGlvbmFsTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbmRpdGlvbmFsTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnVuY3Rpb25Ob2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRnVuY3Rpb25Ob2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJbmRleE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc09iamVjdE5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNPYmplY3ROb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNPcGVyYXRvck5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNPcGVyYXRvck5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcmVudGhlc2lzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcmVudGhlc2lzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUmFuZ2VOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUmFuZ2VOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNSZWxhdGlvbmFsTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1JlbGF0aW9uYWxOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTnVtZXJpYyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc051bWVyaWMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcGFyc2VEZXBlbmRlbmNpZXMgPSB7XG4gIEFjY2Vzc29yTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FjY2Vzc29yTm9kZS5BY2Nlc3Nvck5vZGVEZXBlbmRlbmNpZXMsXG4gIEFycmF5Tm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FycmF5Tm9kZS5BcnJheU5vZGVEZXBlbmRlbmNpZXMsXG4gIEFzc2lnbm1lbnROb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQXNzaWdubWVudE5vZGUuQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXMsXG4gIEJsb2NrTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Jsb2NrTm9kZS5CbG9ja05vZGVEZXBlbmRlbmNpZXMsXG4gIENvbmRpdGlvbmFsTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbmRpdGlvbmFsTm9kZS5Db25kaXRpb25hbE5vZGVEZXBlbmRlbmNpZXMsXG4gIENvbnN0YW50Tm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbnN0YW50Tm9kZS5Db25zdGFudE5vZGVEZXBlbmRlbmNpZXMsXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlLkZ1bmN0aW9uQXNzaWdubWVudE5vZGVEZXBlbmRlbmNpZXMsXG4gIEZ1bmN0aW9uTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Z1bmN0aW9uTm9kZS5GdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXMsXG4gIEluZGV4Tm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Tm9kZS5JbmRleE5vZGVEZXBlbmRlbmNpZXMsXG4gIE9iamVjdE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNPYmplY3ROb2RlLk9iamVjdE5vZGVEZXBlbmRlbmNpZXMsXG4gIE9wZXJhdG9yTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZS5PcGVyYXRvck5vZGVEZXBlbmRlbmNpZXMsXG4gIFBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcmVudGhlc2lzTm9kZS5QYXJlbnRoZXNpc05vZGVEZXBlbmRlbmNpZXMsXG4gIFJhbmdlTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1JhbmdlTm9kZS5SYW5nZU5vZGVEZXBlbmRlbmNpZXMsXG4gIFJlbGF0aW9uYWxOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUmVsYXRpb25hbE5vZGUuUmVsYXRpb25hbE5vZGVEZXBlbmRlbmNpZXMsXG4gIFN5bWJvbE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlLlN5bWJvbE5vZGVEZXBlbmRlbmNpZXMsXG4gIG51bWVyaWNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOdW1lcmljLm51bWVyaWNEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVBhcnNlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBhcnNlXG59O1xuZXhwb3J0cy5wYXJzZURlcGVuZGVuY2llcyA9IHBhcnNlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wYXJzZXJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyc2VyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJzZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwYXJzZXJEZXBlbmRlbmNpZXMgPSB7XG4gIFBhcnNlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcnNlckNsYXNzLlBhcnNlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGFyc2VyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBhcnNlclxufTtcbmV4cG9ydHMucGFyc2VyRGVwZW5kZW5jaWVzID0gcGFyc2VyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5QYXJzZXJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyc2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBQYXJzZXJEZXBlbmRlbmNpZXMgPSB7XG4gIHBhcnNlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFyc2UucGFyc2VEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVBhcnNlckNsYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBhcnNlckNsYXNzXG59O1xuZXhwb3J0cy5QYXJzZXJEZXBlbmRlbmNpZXMgPSBQYXJzZXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBhcnRpdGlvblNlbGVjdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGFyZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOYU4gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc05hTi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNOdW1lcmljID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOdW1lcmljLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBhcnRpdGlvblNlbGVjdERlcGVuZGVuY2llcyA9IHtcbiAgY29tcGFyZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBhcmUuY29tcGFyZURlcGVuZGVuY2llcyxcbiAgaXNOYU5EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc05hTi5pc05hTkRlcGVuZGVuY2llcyxcbiAgaXNOdW1lcmljRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOdW1lcmljLmlzTnVtZXJpY0RlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGFydGl0aW9uU2VsZWN0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBhcnRpdGlvblNlbGVjdFxufTtcbmV4cG9ydHMucGFydGl0aW9uU2VsZWN0RGVwZW5kZW5jaWVzID0gcGFydGl0aW9uU2VsZWN0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wZXJtdXRhdGlvbnNEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRmFjdG9yaWFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRmFjdG9yaWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBlcm11dGF0aW9uc0RlcGVuZGVuY2llcyA9IHtcbiAgZmFjdG9yaWFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRmFjdG9yaWFsLmZhY3RvcmlhbERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGVybXV0YXRpb25zOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBlcm11dGF0aW9uc1xufTtcbmV4cG9ydHMucGVybXV0YXRpb25zRGVwZW5kZW5jaWVzID0gcGVybXV0YXRpb25zRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5waGlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwaGlEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGhpOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBoaVxufTtcbmV4cG9ydHMucGhpRGVwZW5kZW5jaWVzID0gcGhpRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5waURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBpRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVBpOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBpXG59O1xuZXhwb3J0cy5waURlcGVuZGVuY2llcyA9IHBpRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5waWNrUmFuZG9tRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcGlja1JhbmRvbURlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGlja1JhbmRvbTogX2ZhY3Rvcmllc0FueS5jcmVhdGVQaWNrUmFuZG9tXG59O1xuZXhwb3J0cy5waWNrUmFuZG9tRGVwZW5kZW5jaWVzID0gcGlja1JhbmRvbURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucGxhbmNrQ2hhcmdlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwbGFuY2tDaGFyZ2VEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQbGFuY2tDaGFyZ2U6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGxhbmNrQ2hhcmdlXG59O1xuZXhwb3J0cy5wbGFuY2tDaGFyZ2VEZXBlbmRlbmNpZXMgPSBwbGFuY2tDaGFyZ2VEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwbGFuY2tDb25zdGFudERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVBsYW5ja0NvbnN0YW50OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBsYW5ja0NvbnN0YW50XG59O1xuZXhwb3J0cy5wbGFuY2tDb25zdGFudERlcGVuZGVuY2llcyA9IHBsYW5ja0NvbnN0YW50RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wbGFuY2tMZW5ndGhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHBsYW5ja0xlbmd0aERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVBsYW5ja0xlbmd0aDogX2ZhY3Rvcmllc0FueS5jcmVhdGVQbGFuY2tMZW5ndGhcbn07XG5leHBvcnRzLnBsYW5ja0xlbmd0aERlcGVuZGVuY2llcyA9IHBsYW5ja0xlbmd0aERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucGxhbmNrTWFzc0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcGxhbmNrTWFzc0RlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVBsYW5ja01hc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUGxhbmNrTWFzc1xufTtcbmV4cG9ydHMucGxhbmNrTWFzc0RlcGVuZGVuY2llcyA9IHBsYW5ja01hc3NEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBsYW5ja1RlbXBlcmF0dXJlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwbGFuY2tUZW1wZXJhdHVyZURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVBsYW5ja1RlbXBlcmF0dXJlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVBsYW5ja1RlbXBlcmF0dXJlXG59O1xuZXhwb3J0cy5wbGFuY2tUZW1wZXJhdHVyZURlcGVuZGVuY2llcyA9IHBsYW5ja1RlbXBlcmF0dXJlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wbGFuY2tUaW1lRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwbGFuY2tUaW1lRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUGxhbmNrVGltZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVQbGFuY2tUaW1lXG59O1xuZXhwb3J0cy5wbGFuY2tUaW1lRGVwZW5kZW5jaWVzID0gcGxhbmNrVGltZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucG93RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnJhY3Rpb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSWRlbnRpdHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJZGVudGl0eS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOdW1iZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNOdW1iZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcG93RGVwZW5kZW5jaWVzID0ge1xuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIGZyYWN0aW9uRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnJhY3Rpb24uZnJhY3Rpb25EZXBlbmRlbmNpZXMsXG4gIGlkZW50aXR5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSWRlbnRpdHkuaWRlbnRpdHlEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIG51bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc051bWJlci5udW1iZXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVBvdzogX2ZhY3Rvcmllc0FueS5jcmVhdGVQb3dcbn07XG5leHBvcnRzLnBvd0RlcGVuZGVuY2llcyA9IHBvd0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucHJpbnREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwcmludERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUHJpbnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUHJpbnRcbn07XG5leHBvcnRzLnByaW50RGVwZW5kZW5jaWVzID0gcHJpbnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnByb2REZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwcm9kRGVwZW5kZW5jaWVzID0ge1xuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVQcm9kOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVByb2Rcbn07XG5leHBvcnRzLnByb2REZXBlbmRlbmNpZXMgPSBwcm9kRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wcm90b25NYXNzRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBwcm90b25NYXNzRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUHJvdG9uTWFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVQcm90b25NYXNzXG59O1xuZXhwb3J0cy5wcm90b25NYXNzRGVwZW5kZW5jaWVzID0gcHJvdG9uTWFzc0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucXJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uaiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbmouZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSWRlbnRpdHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJZGVudGl0eS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSXNaZXJvID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNaZXJvLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NpZ24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTaWduLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcXJ0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3FydC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5hcnlNaW51cyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuYXJ5TWludXMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1plcm9zID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzWmVyb3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcXJEZXBlbmRlbmNpZXMgPSB7XG4gIGFkZFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZFNjYWxhci5hZGRTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGNvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4LmNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIGNvbmpEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb25qLmNvbmpEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWwuZXF1YWxEZXBlbmRlbmNpZXMsXG4gIGlkZW50aXR5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSWRlbnRpdHkuaWRlbnRpdHlEZXBlbmRlbmNpZXMsXG4gIGlzWmVyb0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzWmVyby5pc1plcm9EZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHNpZ25EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaWduLnNpZ25EZXBlbmRlbmNpZXMsXG4gIHNxcnREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTcXJ0LnNxcnREZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHVuYXJ5TWludXNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzLnVuYXJ5TWludXNEZXBlbmRlbmNpZXMsXG4gIHplcm9zRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzWmVyb3MuemVyb3NEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVFyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVFyXG59O1xuZXhwb3J0cy5xckRlcGVuZGVuY2llcyA9IHFyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5xdWFudGlsZVNlcURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQYXJ0aXRpb25TZWxlY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJ0aXRpb25TZWxlY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcXVhbnRpbGVTZXFEZXBlbmRlbmNpZXMgPSB7XG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wYXJlLmNvbXBhcmVEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHBhcnRpdGlvblNlbGVjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcnRpdGlvblNlbGVjdC5wYXJ0aXRpb25TZWxlY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVF1YW50aWxlU2VxOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVF1YW50aWxlU2VxXG59O1xuZXhwb3J0cy5xdWFudGlsZVNlcURlcGVuZGVuY2llcyA9IHF1YW50aWxlU2VxRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5xdWFudHVtT2ZDaXJjdWxhdGlvbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcXVhbnR1bU9mQ2lyY3VsYXRpb25EZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVRdWFudHVtT2ZDaXJjdWxhdGlvbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVRdWFudHVtT2ZDaXJjdWxhdGlvblxufTtcbmV4cG9ydHMucXVhbnR1bU9mQ2lyY3VsYXRpb25EZXBlbmRlbmNpZXMgPSBxdWFudHVtT2ZDaXJjdWxhdGlvbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmFuZG9tRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmFuZG9tRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVSYW5kb206IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmFuZG9tXG59O1xuZXhwb3J0cy5yYW5kb21EZXBlbmRlbmNpZXMgPSByYW5kb21EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJhbmRvbUludERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHJhbmRvbUludERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUmFuZG9tSW50OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJhbmRvbUludFxufTtcbmV4cG9ydHMucmFuZG9tSW50RGVwZW5kZW5jaWVzID0gcmFuZG9tSW50RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yYW5nZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdudW1iZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdudW1iZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTGFyZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTGFyZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXJFcSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xhcmdlckVxLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTbWFsbGVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU21hbGxlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU21hbGxlckVxID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU21hbGxlckVxLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHJhbmdlRGVwZW5kZW5jaWVzID0ge1xuICBiaWdudW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdudW1iZXIuYmlnbnVtYmVyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICBsYXJnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNMYXJnZXIubGFyZ2VyRGVwZW5kZW5jaWVzLFxuICBsYXJnZXJFcURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlckVxLmxhcmdlckVxRGVwZW5kZW5jaWVzLFxuICBzbWFsbGVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU21hbGxlci5zbWFsbGVyRGVwZW5kZW5jaWVzLFxuICBzbWFsbGVyRXFEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTbWFsbGVyRXEuc21hbGxlckVxRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVSYW5nZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5nZVxufTtcbmV4cG9ydHMucmFuZ2VEZXBlbmRlbmNpZXMgPSByYW5nZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuUmFuZ2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBSYW5nZURlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlUmFuZ2VDbGFzczogX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5nZUNsYXNzXG59O1xuZXhwb3J0cy5SYW5nZURlcGVuZGVuY2llcyA9IFJhbmdlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5SYW5nZU5vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgUmFuZ2VOb2RlRGVwZW5kZW5jaWVzID0ge1xuICBOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTm9kZS5Ob2RlRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVSYW5nZU5vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmFuZ2VOb2RlXG59O1xuZXhwb3J0cy5SYW5nZU5vZGVEZXBlbmRlbmNpZXMgPSBSYW5nZU5vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJhbmdlVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ251bWJlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ251bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0xhcmdlckVxID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTGFyZ2VyRXEuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NtYWxsZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTbWFsbGVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTbWFsbGVyRXEgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTbWFsbGVyRXEuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmFuZ2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIGJpZ251bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ251bWJlci5iaWdudW1iZXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckVxRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTGFyZ2VyRXEubGFyZ2VyRXFEZXBlbmRlbmNpZXMsXG4gIHNtYWxsZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTbWFsbGVyLnNtYWxsZXJEZXBlbmRlbmNpZXMsXG4gIHNtYWxsZXJFcURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NtYWxsZXJFcS5zbWFsbGVyRXFEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJhbmdlVHJhbnNmb3JtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJhbmdlVHJhbnNmb3JtXG59O1xuZXhwb3J0cy5yYW5nZVRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHJhbmdlVHJhbnNmb3JtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yYXRpb25hbGl6ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdudW1iZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdudW1iZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0ZyYWN0aW9uID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRnJhY3Rpb24uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbnN0YW50Tm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbnN0YW50Tm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnVuY3Rpb25Ob2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRnVuY3Rpb25Ob2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNPcGVyYXRvck5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNPcGVyYXRvck5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcmVudGhlc2lzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1BhcmVudGhlc2lzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3ltYm9sTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N5bWJvbE5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc1plcm8gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc1plcm8uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BhcnNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUGFyc2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BvdyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Bvdy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2ltcGxpZnkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTaW1wbGlmeS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByYXRpb25hbGl6ZURlcGVuZGVuY2llcyA9IHtcbiAgYmlnbnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmJpZ251bWJlckRlcGVuZGVuY2llcyxcbiAgZnJhY3Rpb25EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGcmFjdGlvbi5mcmFjdGlvbkRlcGVuZGVuY2llcyxcbiAgQ29uc3RhbnROb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlLkNvbnN0YW50Tm9kZURlcGVuZGVuY2llcyxcbiAgRnVuY3Rpb25Ob2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnVuY3Rpb25Ob2RlLkZ1bmN0aW9uTm9kZURlcGVuZGVuY2llcyxcbiAgT3BlcmF0b3JOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzT3BlcmF0b3JOb2RlLk9wZXJhdG9yTm9kZURlcGVuZGVuY2llcyxcbiAgUGFyZW50aGVzaXNOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlLlBhcmVudGhlc2lzTm9kZURlcGVuZGVuY2llcyxcbiAgU3ltYm9sTm9kZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N5bWJvbE5vZGUuU3ltYm9sTm9kZURlcGVuZGVuY2llcyxcbiAgYWRkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkLmFkZERlcGVuZGVuY2llcyxcbiAgZGl2aWRlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlLmRpdmlkZURlcGVuZGVuY2llcyxcbiAgZXF1YWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbC5lcXVhbERlcGVuZGVuY2llcyxcbiAgaXNaZXJvRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNaZXJvLmlzWmVyb0RlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgcGFyc2VEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQYXJzZS5wYXJzZURlcGVuZGVuY2llcyxcbiAgcG93RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUG93LnBvd0RlcGVuZGVuY2llcyxcbiAgc2ltcGxpZnlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaW1wbGlmeS5zaW1wbGlmeURlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUmF0aW9uYWxpemU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmF0aW9uYWxpemVcbn07XG5leHBvcnRzLnJhdGlvbmFsaXplRGVwZW5kZW5jaWVzID0gcmF0aW9uYWxpemVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcmVEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlXG59O1xuZXhwb3J0cy5yZURlcGVuZGVuY2llcyA9IHJlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yZWR1Y2VkUGxhbmNrQ29uc3RhbnREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHJlZHVjZWRQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJlZHVjZWRQbGFuY2tDb25zdGFudDogX2ZhY3Rvcmllc0FueS5jcmVhdGVSZWR1Y2VkUGxhbmNrQ29uc3RhbnRcbn07XG5leHBvcnRzLnJlZHVjZWRQbGFuY2tDb25zdGFudERlcGVuZGVuY2llcyA9IHJlZHVjZWRQbGFuY2tDb25zdGFudERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuUmVsYXRpb25hbE5vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc05vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgUmVsYXRpb25hbE5vZGVEZXBlbmRlbmNpZXMgPSB7XG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJlbGF0aW9uYWxOb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlbGF0aW9uYWxOb2RlXG59O1xuZXhwb3J0cy5SZWxhdGlvbmFsTm9kZURlcGVuZGVuY2llcyA9IFJlbGF0aW9uYWxOb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yZXBsYWNlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHJlcGxhY2VyRGVwZW5kZW5jaWVzID0ge1xuICBjcmVhdGVSZXBsYWNlcjogX2ZhY3Rvcmllc0FueS5jcmVhdGVSZXBsYWNlclxufTtcbmV4cG9ydHMucmVwbGFjZXJEZXBlbmRlbmNpZXMgPSByZXBsYWNlckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmVzaGFwZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNJc0ludGVnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc0ludGVnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByZXNoYXBlRGVwZW5kZW5jaWVzID0ge1xuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVSZXNoYXBlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlc2hhcGVcbn07XG5leHBvcnRzLnJlc2hhcGVEZXBlbmRlbmNpZXMgPSByZXNoYXBlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yZXNpemVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHJlc2l6ZURlcGVuZGVuY2llcyA9IHtcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgY3JlYXRlUmVzaXplOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlc2l6ZVxufTtcbmV4cG9ydHMucmVzaXplRGVwZW5kZW5jaWVzID0gcmVzaXplRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5SZXN1bHRTZXREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBSZXN1bHRTZXREZXBlbmRlbmNpZXMgPSB7XG4gIGNyZWF0ZVJlc3VsdFNldDogX2ZhY3Rvcmllc0FueS5jcmVhdGVSZXN1bHRTZXRcbn07XG5leHBvcnRzLlJlc3VsdFNldERlcGVuZGVuY2llcyA9IFJlc3VsdFNldERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmV2aXZlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHJldml2ZXJEZXBlbmRlbmNpZXMgPSB7XG4gIGNyZWF0ZVJldml2ZXI6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmV2aXZlclxufTtcbmV4cG9ydHMucmV2aXZlckRlcGVuZGVuY2llcyA9IHJldml2ZXJEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJpZ2h0QXJpdGhTaGlmdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNaZXJvcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1plcm9zLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHJpZ2h0QXJpdGhTaGlmdERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICB6ZXJvc0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1plcm9zLnplcm9zRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVSaWdodEFyaXRoU2hpZnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmlnaHRBcml0aFNoaWZ0XG59O1xuZXhwb3J0cy5yaWdodEFyaXRoU2hpZnREZXBlbmRlbmNpZXMgPSByaWdodEFyaXRoU2hpZnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJpZ2h0TG9nU2hpZnREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzWmVyb3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNaZXJvcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciByaWdodExvZ1NoaWZ0RGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHplcm9zRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzWmVyb3MuemVyb3NEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJpZ2h0TG9nU2hpZnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUmlnaHRMb2dTaGlmdFxufTtcbmV4cG9ydHMucmlnaHRMb2dTaGlmdERlcGVuZGVuY2llcyA9IHJpZ2h0TG9nU2hpZnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJvdW5kRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1plcm9zID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzWmVyb3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcm91bmREZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICB6ZXJvc0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1plcm9zLnplcm9zRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVSb3VuZDogX2ZhY3Rvcmllc0FueS5jcmVhdGVSb3VuZFxufTtcbmV4cG9ydHMucm91bmREZXBlbmRlbmNpZXMgPSByb3VuZERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucm93RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJbmRleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JhbmdlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUmFuZ2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcm93RGVwZW5kZW5jaWVzID0ge1xuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHJhbmdlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUmFuZ2UucmFuZ2VEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJvdzogX2ZhY3Rvcmllc0FueS5jcmVhdGVSb3dcbn07XG5leHBvcnRzLnJvd0RlcGVuZGVuY2llcyA9IHJvd0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucm93VHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJbmRleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JhbmdlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUmFuZ2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcm93VHJhbnNmb3JtRGVwZW5kZW5jaWVzID0ge1xuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHJhbmdlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUmFuZ2UucmFuZ2VEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJvd1RyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVSb3dUcmFuc2Zvcm1cbn07XG5leHBvcnRzLnJvd1RyYW5zZm9ybURlcGVuZGVuY2llcyA9IHJvd1RyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucnlkYmVyZ0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgcnlkYmVyZ0RlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVJ5ZGJlcmc6IF9mYWN0b3JpZXNBbnkuY3JlYXRlUnlkYmVyZ1xufTtcbmV4cG9ydHMucnlkYmVyZ0RlcGVuZGVuY2llcyA9IHJ5ZGJlcmdEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlNRUlQxXzJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLWxpbmUgY2FtZWxjYXNlXG52YXIgU1FSVDFfMkRlcGVuZGVuY2llcyA9IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBjYW1lbGNhc2VcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTUVJUMV8yOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNRUlQxXzJcbn07XG5leHBvcnRzLlNRUlQxXzJEZXBlbmRlbmNpZXMgPSBTUVJUMV8yRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5TUVJUMkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIFNRUlQyRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNRUlQyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNRUlQyXG59O1xuZXhwb3J0cy5TUVJUMkRlcGVuZGVuY2llcyA9IFNRUlQyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zYWNrdXJUZXRyb2RlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2Fja3VyVGV0cm9kZURlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTYWNrdXJUZXRyb2RlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNhY2t1clRldHJvZGVcbn07XG5leHBvcnRzLnNhY2t1clRldHJvZGVEZXBlbmRlbmNpZXMgPSBzYWNrdXJUZXRyb2RlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZWNEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzZWNEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU2VjOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNlY1xufTtcbmV4cG9ydHMuc2VjRGVwZW5kZW5jaWVzID0gc2VjRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZWNoRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2VjaERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTZWNoOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNlY2hcbn07XG5leHBvcnRzLnNlY2hEZXBlbmRlbmNpZXMgPSBzZWNoRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZWNvbmRSYWRpYXRpb25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNlY29uZFJhZGlhdGlvbkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNlY29uZFJhZGlhdGlvbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVTZWNvbmRSYWRpYXRpb25cbn07XG5leHBvcnRzLnNlY29uZFJhZGlhdGlvbkRlcGVuZGVuY2llcyA9IHNlY29uZFJhZGlhdGlvbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0Q2FydGVzaWFuRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2l6ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnNldCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzZXRDYXJ0ZXNpYW5EZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBjb21wYXJlTmF0dXJhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzLFxuICBzaXplRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2l6ZS5zaXplRGVwZW5kZW5jaWVzLFxuICBzdWJzZXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJzZXQuc3Vic2V0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTZXRDYXJ0ZXNpYW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2V0Q2FydGVzaWFuXG59O1xuZXhwb3J0cy5zZXRDYXJ0ZXNpYW5EZXBlbmRlbmNpZXMgPSBzZXRDYXJ0ZXNpYW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNldERpZmZlcmVuY2VEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJbmRleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU2l6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNldERpZmZlcmVuY2VEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBjb21wYXJlTmF0dXJhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzLFxuICBzaXplRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2l6ZS5zaXplRGVwZW5kZW5jaWVzLFxuICBzdWJzZXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJzZXQuc3Vic2V0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTZXREaWZmZXJlbmNlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldERpZmZlcmVuY2Vcbn07XG5leHBvcnRzLnNldERpZmZlcmVuY2VEZXBlbmRlbmNpZXMgPSBzZXREaWZmZXJlbmNlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXREaXN0aW5jdERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTaXplLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJzZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2V0RGlzdGluY3REZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBjb21wYXJlTmF0dXJhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzLFxuICBzaXplRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2l6ZS5zaXplRGVwZW5kZW5jaWVzLFxuICBzdWJzZXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJzZXQuc3Vic2V0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTZXREaXN0aW5jdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXREaXN0aW5jdFxufTtcbmV4cG9ydHMuc2V0RGlzdGluY3REZXBlbmRlbmNpZXMgPSBzZXREaXN0aW5jdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0SW50ZXJzZWN0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJbmRleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2l6ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnNldCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzZXRJbnRlcnNlY3REZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBjb21wYXJlTmF0dXJhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzLFxuICBzaXplRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2l6ZS5zaXplRGVwZW5kZW5jaWVzLFxuICBzdWJzZXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJzZXQuc3Vic2V0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTZXRJbnRlcnNlY3Q6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2V0SW50ZXJzZWN0XG59O1xuZXhwb3J0cy5zZXRJbnRlcnNlY3REZXBlbmRlbmNpZXMgPSBzZXRJbnRlcnNlY3REZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNldElzU3Vic2V0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJbmRleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU2l6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNldElzU3Vic2V0RGVwZW5kZW5jaWVzID0ge1xuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMsXG4gIHNpemVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldElzU3Vic2V0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldElzU3Vic2V0XG59O1xuZXhwb3J0cy5zZXRJc1N1YnNldERlcGVuZGVuY2llcyA9IHNldElzU3Vic2V0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRNdWx0aXBsaWNpdHlEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTaXplLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJzZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2V0TXVsdGlwbGljaXR5RGVwZW5kZW5jaWVzID0ge1xuICBJbmRleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuSW5kZXhEZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMsXG4gIHNpemVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTaXplLnNpemVEZXBlbmRlbmNpZXMsXG4gIHN1YnNldERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnNldC5zdWJzZXREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNldE11bHRpcGxpY2l0eTogX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRNdWx0aXBsaWNpdHlcbn07XG5leHBvcnRzLnNldE11bHRpcGxpY2l0eURlcGVuZGVuY2llcyA9IHNldE11bHRpcGxpY2l0eURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0UG93ZXJzZXREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTaXplLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJzZXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJzZXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2V0UG93ZXJzZXREZXBlbmRlbmNpZXMgPSB7XG4gIEluZGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5JbmRleERlcGVuZGVuY2llcyxcbiAgY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5jb21wYXJlTmF0dXJhbERlcGVuZGVuY2llcyxcbiAgc2l6ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpemUuc2l6ZURlcGVuZGVuY2llcyxcbiAgc3Vic2V0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3Vic2V0LnN1YnNldERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU2V0UG93ZXJzZXQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2V0UG93ZXJzZXRcbn07XG5leHBvcnRzLnNldFBvd2Vyc2V0RGVwZW5kZW5jaWVzID0gc2V0UG93ZXJzZXREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNldFNpemVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzZXRTaXplRGVwZW5kZW5jaWVzID0ge1xuICBjb21wYXJlTmF0dXJhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBhcmVOYXR1cmFsLmNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTZXRTaXplOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldFNpemVcbn07XG5leHBvcnRzLnNldFNpemVEZXBlbmRlbmNpZXMgPSBzZXRTaXplRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zZXRTeW1EaWZmZXJlbmNlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0luZGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJbmRleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb25jYXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb25jYXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NldERpZmZlcmVuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTZXREaWZmZXJlbmNlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTaXplID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU2l6ZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3Vic2V0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3Vic2V0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNldFN5bURpZmZlcmVuY2VEZXBlbmRlbmNpZXMgPSB7XG4gIEluZGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcy5JbmRleERlcGVuZGVuY2llcyxcbiAgY29uY2F0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29uY2F0LmNvbmNhdERlcGVuZGVuY2llcyxcbiAgc2V0RGlmZmVyZW5jZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NldERpZmZlcmVuY2Uuc2V0RGlmZmVyZW5jZURlcGVuZGVuY2llcyxcbiAgc2l6ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpemUuc2l6ZURlcGVuZGVuY2llcyxcbiAgc3Vic2V0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3Vic2V0LnN1YnNldERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU2V0U3ltRGlmZmVyZW5jZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRTeW1EaWZmZXJlbmNlXG59O1xuZXhwb3J0cy5zZXRTeW1EaWZmZXJlbmNlRGVwZW5kZW5jaWVzID0gc2V0U3ltRGlmZmVyZW5jZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0VW5pb25EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW5kZXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0luZGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0NvbmNhdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbmNhdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2V0SW50ZXJzZWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU2V0SW50ZXJzZWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTZXRTeW1EaWZmZXJlbmNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU2V0U3ltRGlmZmVyZW5jZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU2l6ZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NpemUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnNldCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnNldC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzZXRVbmlvbkRlcGVuZGVuY2llcyA9IHtcbiAgSW5kZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJbmRleENsYXNzLkluZGV4RGVwZW5kZW5jaWVzLFxuICBjb25jYXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb25jYXQuY29uY2F0RGVwZW5kZW5jaWVzLFxuICBzZXRJbnRlcnNlY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTZXRJbnRlcnNlY3Quc2V0SW50ZXJzZWN0RGVwZW5kZW5jaWVzLFxuICBzZXRTeW1EaWZmZXJlbmNlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2V0U3ltRGlmZmVyZW5jZS5zZXRTeW1EaWZmZXJlbmNlRGVwZW5kZW5jaWVzLFxuICBzaXplRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU2l6ZS5zaXplRGVwZW5kZW5jaWVzLFxuICBzdWJzZXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJzZXQuc3Vic2V0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTZXRVbmlvbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRVbmlvblxufTtcbmV4cG9ydHMuc2V0VW5pb25EZXBlbmRlbmNpZXMgPSBzZXRVbmlvbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2lnbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0NvbXBsZXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2lnbkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBGcmFjdGlvbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZyYWN0aW9uQ2xhc3MuRnJhY3Rpb25EZXBlbmRlbmNpZXMsXG4gIGNvbXBsZXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wbGV4LmNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNpZ246IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2lnblxufTtcbmV4cG9ydHMuc2lnbkRlcGVuZGVuY2llcyA9IHNpZ25EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNpbXBsaWZ5RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ251bWJlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ251bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnJhY3Rpb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29uc3RhbnROb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc09wZXJhdG9yTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUGFyZW50aGVzaXNOb2RlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTeW1ib2xOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWwuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzWmVybyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzWmVyby5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGFyc2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQYXJzZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzUG93ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUG93LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNpbXBsaWZ5RGVwZW5kZW5jaWVzID0ge1xuICBiaWdudW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdudW1iZXIuYmlnbnVtYmVyRGVwZW5kZW5jaWVzLFxuICBmcmFjdGlvbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZyYWN0aW9uLmZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICBDb25zdGFudE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb25zdGFudE5vZGUuQ29uc3RhbnROb2RlRGVwZW5kZW5jaWVzLFxuICBGdW5jdGlvbk5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGdW5jdGlvbk5vZGUuRnVuY3Rpb25Ob2RlRGVwZW5kZW5jaWVzLFxuICBPcGVyYXRvck5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNPcGVyYXRvck5vZGUuT3BlcmF0b3JOb2RlRGVwZW5kZW5jaWVzLFxuICBQYXJlbnRoZXNpc05vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQYXJlbnRoZXNpc05vZGUuUGFyZW50aGVzaXNOb2RlRGVwZW5kZW5jaWVzLFxuICBTeW1ib2xOb2RlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3ltYm9sTm9kZS5TeW1ib2xOb2RlRGVwZW5kZW5jaWVzLFxuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGUuZGl2aWRlRGVwZW5kZW5jaWVzLFxuICBlcXVhbERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsLmVxdWFsRGVwZW5kZW5jaWVzLFxuICBpc1plcm9EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc1plcm8uaXNaZXJvRGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICBwYXJzZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1BhcnNlLnBhcnNlRGVwZW5kZW5jaWVzLFxuICBwb3dEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQb3cucG93RGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTaW1wbGlmeTogX2ZhY3Rvcmllc0FueS5jcmVhdGVTaW1wbGlmeVxufTtcbmV4cG9ydHMuc2ltcGxpZnlEZXBlbmRlbmNpZXMgPSBzaW1wbGlmeURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2luRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2luRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTaW46IF9mYWN0b3JpZXNBbnkuY3JlYXRlU2luXG59O1xuZXhwb3J0cy5zaW5EZXBlbmRlbmNpZXMgPSBzaW5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNpbmhEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzaW5oRGVwZW5kZW5jaWVzID0ge1xuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTaW5oOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNpbmhcbn07XG5leHBvcnRzLnNpbmhEZXBlbmRlbmNpZXMgPSBzaW5oRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zaXplRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzaXplRGVwZW5kZW5jaWVzID0ge1xuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTaXplOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNpemVcbn07XG5leHBvcnRzLnNpemVEZXBlbmRlbmNpZXMgPSBzaXplRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zbHVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWJzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWJzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTGFyZ2VyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTGFyZ2VyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXJFcSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0xhcmdlckVxLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUcmFuc3Bvc2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUcmFuc3Bvc2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc2x1RGVwZW5kZW5jaWVzID0ge1xuICBTcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5TcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGFic0RlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0Ficy5hYnNEZXBlbmRlbmNpZXMsXG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0xhcmdlci5sYXJnZXJEZXBlbmRlbmNpZXMsXG4gIGxhcmdlckVxRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTGFyZ2VyRXEubGFyZ2VyRXFEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHRyYW5zcG9zZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1RyYW5zcG9zZS50cmFuc3Bvc2VEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNsdTogX2ZhY3Rvcmllc0FueS5jcmVhdGVTbHVcbn07XG5leHBvcnRzLnNsdURlcGVuZGVuY2llcyA9IHNsdURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc21hbGxlckRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNtYWxsZXJEZXBlbmRlbmNpZXMgPSB7XG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU21hbGxlcjogX2ZhY3Rvcmllc0FueS5jcmVhdGVTbWFsbGVyXG59O1xuZXhwb3J0cy5zbWFsbGVyRGVwZW5kZW5jaWVzID0gc21hbGxlckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc21hbGxlckVxRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc21hbGxlckVxRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNtYWxsZXJFcTogX2ZhY3Rvcmllc0FueS5jcmVhdGVTbWFsbGVyRXFcbn07XG5leHBvcnRzLnNtYWxsZXJFcURlcGVuZGVuY2llcyA9IHNtYWxsZXJFcURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc29ydERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wYXJlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGFyZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wYXJlTmF0dXJhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNvcnREZXBlbmRlbmNpZXMgPSB7XG4gIGNvbXBhcmVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21wYXJlLmNvbXBhcmVEZXBlbmRlbmNpZXMsXG4gIGNvbXBhcmVOYXR1cmFsRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNvcnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU29ydFxufTtcbmV4cG9ydHMuc29ydERlcGVuZGVuY2llcyA9IHNvcnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlNwYURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNGaWJvbmFjY2lIZWFwQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGaWJvbmFjY2lIZWFwQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBTcGFEZXBlbmRlbmNpZXMgPSB7XG4gIEZpYm9uYWNjaUhlYXBEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGaWJvbmFjY2lIZWFwQ2xhc3MuRmlib25hY2NpSGVhcERlcGVuZGVuY2llcyxcbiAgYWRkU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmFkZFNjYWxhckRlcGVuZGVuY2llcyxcbiAgZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5lcXVhbFNjYWxhckRlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3BhQ2xhc3M6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3BhQ2xhc3Ncbn07XG5leHBvcnRzLlNwYURlcGVuZGVuY2llcyA9IFNwYURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3BhcnNlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1NwYXJzZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3BhcnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc3BhcnNlRGVwZW5kZW5jaWVzID0ge1xuICBTcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTcGFyc2VNYXRyaXhDbGFzcy5TcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNwYXJzZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVTcGFyc2Vcbn07XG5leHBvcnRzLnNwYXJzZURlcGVuZGVuY2llcyA9IHNwYXJzZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuU3BhcnNlTWF0cml4RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgU3BhcnNlTWF0cml4RGVwZW5kZW5jaWVzID0ge1xuICBNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXhDbGFzcy5NYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNwYXJzZU1hdHJpeENsYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNwYXJzZU1hdHJpeENsYXNzXG59O1xuZXhwb3J0cy5TcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXMgPSBTcGFyc2VNYXRyaXhEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNwZWVkT2ZMaWdodERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc3BlZWRPZkxpZ2h0RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3BlZWRPZkxpZ2h0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNwZWVkT2ZMaWdodFxufTtcbmV4cG9ydHMuc3BlZWRPZkxpZ2h0RGVwZW5kZW5jaWVzID0gc3BlZWRPZkxpZ2h0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcGxpdFVuaXREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzcGxpdFVuaXREZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVNwbGl0VW5pdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVTcGxpdFVuaXRcbn07XG5leHBvcnRzLnNwbGl0VW5pdERlcGVuZGVuY2llcyA9IHNwbGl0VW5pdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3FydERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc3FydERlcGVuZGVuY2llcyA9IHtcbiAgQ29tcGxleERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0NvbXBsZXhDbGFzcy5Db21wbGV4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTcXJ0OiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNxcnRcbn07XG5leHBvcnRzLnNxcnREZXBlbmRlbmNpZXMgPSBzcXJ0RGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcXJ0bURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNBYnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBYnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSWRlbnRpdHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJZGVudGl0eS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzSW52ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSW52LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1NpemUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTaXplLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTcXJ0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3FydC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzcXJ0bURlcGVuZGVuY2llcyA9IHtcbiAgYWJzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWJzLmFic0RlcGVuZGVuY2llcyxcbiAgYWRkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkLmFkZERlcGVuZGVuY2llcyxcbiAgaWRlbnRpdHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJZGVudGl0eS5pZGVudGl0eURlcGVuZGVuY2llcyxcbiAgaW52RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSW52LmludkRlcGVuZGVuY2llcyxcbiAgbWF4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF4Lm1heERlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseS5tdWx0aXBseURlcGVuZGVuY2llcyxcbiAgc2l6ZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NpemUuc2l6ZURlcGVuZGVuY2llcyxcbiAgc3FydERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1NxcnQuc3FydERlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3FydG06IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3FydG1cbn07XG5leHBvcnRzLnNxcnRtRGVwZW5kZW5jaWVzID0gc3FydG1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNxdWFyZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHNxdWFyZURlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3F1YXJlOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNxdWFyZVxufTtcbmV4cG9ydHMuc3F1YXJlRGVwZW5kZW5jaWVzID0gc3F1YXJlRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcXVlZXplRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzcXVlZXplRGVwZW5kZW5jaWVzID0ge1xuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTcXVlZXplOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVNxdWVlemVcbn07XG5leHBvcnRzLnNxdWVlemVEZXBlbmRlbmNpZXMgPSBzcXVlZXplRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdGREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3FydCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1NxcnQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1ZhcmlhbmNlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVmFyaWFuY2UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc3RkRGVwZW5kZW5jaWVzID0ge1xuICBzcXJ0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3FydC5zcXJ0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICB2YXJpYW5jZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1ZhcmlhbmNlLnZhcmlhbmNlRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTdGQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3RkXG59O1xuZXhwb3J0cy5zdGREZXBlbmRlbmNpZXMgPSBzdGREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnN0ZFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNTcXJ0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3FydC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVmFyaWFuY2UgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNWYXJpYW5jZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzdGRUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIHNxcnREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTcXJ0LnNxcnREZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIHZhcmlhbmNlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVmFyaWFuY2UudmFyaWFuY2VEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN0ZFRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVTdGRUcmFuc2Zvcm1cbn07XG5leHBvcnRzLnN0ZFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHN0ZFRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3RlZmFuQm9sdHptYW5uRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzdGVmYW5Cb2x0em1hbm5EZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTdGVmYW5Cb2x0em1hbm46IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3RlZmFuQm9sdHptYW5uXG59O1xuZXhwb3J0cy5zdGVmYW5Cb2x0em1hbm5EZXBlbmRlbmNpZXMgPSBzdGVmYW5Cb2x0em1hbm5EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnN0aXJsaW5nUzJEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRmFjdG9yaWFsID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRmFjdG9yaWFsLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc0ludGVnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc0ludGVnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTmVnYXRpdmUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNJc05lZ2F0aXZlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNMYXJnZXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNMYXJnZXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1BvdyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1Bvdy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzU3VidHJhY3QgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzdGlybGluZ1MyRGVwZW5kZW5jaWVzID0ge1xuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBjb21iaW5hdGlvbnNEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNDb21iaW5hdGlvbnMuY29tYmluYXRpb25zRGVwZW5kZW5jaWVzLFxuICBkaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGVTY2FsYXIuZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBmYWN0b3JpYWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGYWN0b3JpYWwuZmFjdG9yaWFsRGVwZW5kZW5jaWVzLFxuICBpc0ludGVnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNJc0ludGVnZXIuaXNJbnRlZ2VyRGVwZW5kZW5jaWVzLFxuICBpc05lZ2F0aXZlRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOZWdhdGl2ZS5pc05lZ2F0aXZlRGVwZW5kZW5jaWVzLFxuICBsYXJnZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNMYXJnZXIubGFyZ2VyRGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyLm11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzLFxuICBwb3dEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQb3cucG93RGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTdGlybGluZ1MyOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVN0aXJsaW5nUzJcbn07XG5leHBvcnRzLnN0aXJsaW5nUzJEZXBlbmRlbmNpZXMgPSBzdGlybGluZ1MyRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdHJpbmdEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzdHJpbmdEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN0cmluZzogX2ZhY3Rvcmllc0FueS5jcmVhdGVTdHJpbmdcbn07XG5leHBvcnRzLnN0cmluZ0RlcGVuZGVuY2llcyA9IHN0cmluZ0RlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3Vic2V0RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzdWJzZXREZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN1YnNldDogX2ZhY3Rvcmllc0FueS5jcmVhdGVTdWJzZXRcbn07XG5leHBvcnRzLnN1YnNldERlcGVuZGVuY2llcyA9IHN1YnNldERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3Vic2V0VHJhbnNmb3JtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzdWJzZXRUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN1YnNldFRyYW5zZm9ybTogX2ZhY3Rvcmllc0FueS5jcmVhdGVTdWJzZXRUcmFuc2Zvcm1cbn07XG5leHBvcnRzLnN1YnNldFRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHN1YnNldFRyYW5zZm9ybURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3VidHJhY3REZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbmFyeU1pbnVzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5hcnlNaW51cy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBzdWJ0cmFjdERlcGVuZGVuY2llcyA9IHtcbiAgRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLkRlbnNlTWF0cml4RGVwZW5kZW5jaWVzLFxuICBhZGRTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuYWRkU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBlcXVhbFNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICB1bmFyeU1pbnVzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5hcnlNaW51cy51bmFyeU1pbnVzRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTdWJ0cmFjdDogX2ZhY3Rvcmllc0FueS5jcmVhdGVTdWJ0cmFjdFxufTtcbmV4cG9ydHMuc3VidHJhY3REZXBlbmRlbmNpZXMgPSBzdWJ0cmFjdERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3VtRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ251bWJlciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ251bWJlci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRnJhY3Rpb24gPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGcmFjdGlvbi5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHN1bURlcGVuZGVuY2llcyA9IHtcbiAgYmlnbnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmJpZ251bWJlckRlcGVuZGVuY2llcyxcbiAgZnJhY3Rpb25EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGcmFjdGlvbi5mcmFjdGlvbkRlcGVuZGVuY2llcyxcbiAgYWRkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkLmFkZERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlU3VtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVN1bVxufTtcbmV4cG9ydHMuc3VtRGVwZW5kZW5jaWVzID0gc3VtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zdW1UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnbnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnbnVtYmVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGcmFjdGlvbiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0ZyYWN0aW9uLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgc3VtVHJhbnNmb3JtRGVwZW5kZW5jaWVzID0ge1xuICBiaWdudW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdudW1iZXIuYmlnbnVtYmVyRGVwZW5kZW5jaWVzLFxuICBmcmFjdGlvbkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0ZyYWN0aW9uLmZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVTdW1UcmFuc2Zvcm06IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3VtVHJhbnNmb3JtXG59O1xuZXhwb3J0cy5zdW1UcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSBzdW1UcmFuc2Zvcm1EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlN5bWJvbE5vZGVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNOb2RlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTm9kZS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBTeW1ib2xOb2RlRGVwZW5kZW5jaWVzID0ge1xuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIE5vZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNOb2RlLk5vZGVEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVN5bWJvbE5vZGU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlU3ltYm9sTm9kZVxufTtcbmV4cG9ydHMuU3ltYm9sTm9kZURlcGVuZGVuY2llcyA9IFN5bWJvbE5vZGVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRhbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHRhbkRlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVGFuOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVRhblxufTtcbmV4cG9ydHMudGFuRGVwZW5kZW5jaWVzID0gdGFuRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50YW5oRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdGFuaERlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVGFuaDogX2ZhY3Rvcmllc0FueS5jcmVhdGVUYW5oXG59O1xuZXhwb3J0cy50YW5oRGVwZW5kZW5jaWVzID0gdGFuaERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudGF1RGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdGF1RGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVRhdTogX2ZhY3Rvcmllc0FueS5jcmVhdGVUYXVcbn07XG5leHBvcnRzLnRhdURlcGVuZGVuY2llcyA9IHRhdURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudGhvbXNvbkNyb3NzU2VjdGlvbkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdGhvbXNvbkNyb3NzU2VjdGlvbkRlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVRob21zb25Dcm9zc1NlY3Rpb246IF9mYWN0b3JpZXNBbnkuY3JlYXRlVGhvbXNvbkNyb3NzU2VjdGlvblxufTtcbmV4cG9ydHMudGhvbXNvbkNyb3NzU2VjdGlvbkRlcGVuZGVuY2llcyA9IHRob21zb25Dcm9zc1NlY3Rpb25EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRvRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB0b0RlcGVuZGVuY2llcyA9IHtcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVG86IF9mYWN0b3JpZXNBbnkuY3JlYXRlVG9cbn07XG5leHBvcnRzLnRvRGVwZW5kZW5jaWVzID0gdG9EZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRyYWNlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHRyYWNlRGVwZW5kZW5jaWVzID0ge1xuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBtYXRyaXhEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNYXRyaXgubWF0cml4RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVUcmFjZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVUcmFjZVxufTtcbmV4cG9ydHMudHJhY2VEZXBlbmRlbmNpZXMgPSB0cmFjZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudHJhbnNwb3NlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB0cmFuc3Bvc2VEZXBlbmRlbmNpZXMgPSB7XG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVRyYW5zcG9zZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVUcmFuc3Bvc2Vcbn07XG5leHBvcnRzLnRyYW5zcG9zZURlcGVuZGVuY2llcyA9IHRyYW5zcG9zZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudHJ1ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHRydWVEZXBlbmRlbmNpZXMgPSB7XG4gIGNyZWF0ZVRydWU6IF9mYWN0b3JpZXNBbnkuY3JlYXRlVHJ1ZVxufTtcbmV4cG9ydHMudHJ1ZURlcGVuZGVuY2llcyA9IHRydWVEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnR5cGVPZkRlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHR5cGVPZkRlcGVuZGVuY2llcyA9IHtcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVHlwZU9mOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVR5cGVPZlxufTtcbmV4cG9ydHMudHlwZU9mRGVwZW5kZW5jaWVzID0gdHlwZU9mRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50eXBlZERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNDb21wbGV4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB0eXBlZERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIERlbnNlTWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5EZW5zZU1hdHJpeERlcGVuZGVuY2llcyxcbiAgRnJhY3Rpb25EZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzLkZyYWN0aW9uRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVUeXBlZDogX2ZhY3Rvcmllc0FueS5jcmVhdGVUeXBlZFxufTtcbmV4cG9ydHMudHlwZWREZXBlbmRlbmNpZXMgPSB0eXBlZERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudW5hcnlNaW51c0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHVuYXJ5TWludXNEZXBlbmRlbmNpZXMgPSB7XG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVVuYXJ5TWludXM6IF9mYWN0b3JpZXNBbnkuY3JlYXRlVW5hcnlNaW51c1xufTtcbmV4cG9ydHMudW5hcnlNaW51c0RlcGVuZGVuY2llcyA9IHVuYXJ5TWludXNEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnVuYXJ5UGx1c0RlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHVuYXJ5UGx1c0RlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVVbmFyeVBsdXM6IF9mYWN0b3JpZXNBbnkuY3JlYXRlVW5hcnlQbHVzXG59O1xuZXhwb3J0cy51bmFyeVBsdXNEZXBlbmRlbmNpZXMgPSB1bmFyeVBsdXNEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnVuZXF1YWxEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc01hdHJpeCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc01hdHJpeC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzVHlwZWQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNUeXBlZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB1bmVxdWFsRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVVuZXF1YWw6IF9mYWN0b3JpZXNBbnkuY3JlYXRlVW5lcXVhbFxufTtcbmV4cG9ydHMudW5lcXVhbERlcGVuZGVuY2llcyA9IHVuZXF1YWxEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlVuaXREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGcmFjdGlvbkNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWJzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWJzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBZGRTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBZGRTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRXF1YWwgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNFcXVhbC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNGb3JtYXQgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNGb3JtYXQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTnVtZXJpYyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzTnVtZXJpYy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTnVtYmVyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTnVtYmVyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNQb3cgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQb3cuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1JvdW5kID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzUm91bmQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgVW5pdERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBDb21wbGV4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQ29tcGxleENsYXNzLkNvbXBsZXhEZXBlbmRlbmNpZXMsXG4gIEZyYWN0aW9uRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRnJhY3Rpb25DbGFzcy5GcmFjdGlvbkRlcGVuZGVuY2llcyxcbiAgYWJzRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWJzLmFic0RlcGVuZGVuY2llcyxcbiAgYWRkU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQWRkU2NhbGFyLmFkZFNjYWxhckRlcGVuZGVuY2llcyxcbiAgZGl2aWRlU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmRpdmlkZVNjYWxhckRlcGVuZGVuY2llcyxcbiAgZXF1YWxEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNFcXVhbC5lcXVhbERlcGVuZGVuY2llcyxcbiAgZml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRml4LmZpeERlcGVuZGVuY2llcyxcbiAgZm9ybWF0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRm9ybWF0LmZvcm1hdERlcGVuZGVuY2llcyxcbiAgaXNOdW1lcmljRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOdW1lcmljLmlzTnVtZXJpY0RlcGVuZGVuY2llcyxcbiAgbXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNNdWx0aXBseVNjYWxhci5tdWx0aXBseVNjYWxhckRlcGVuZGVuY2llcyxcbiAgbnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTnVtYmVyLm51bWJlckRlcGVuZGVuY2llcyxcbiAgcG93RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzUG93LnBvd0RlcGVuZGVuY2llcyxcbiAgcm91bmREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNSb3VuZC5yb3VuZERlcGVuZGVuY2llcyxcbiAgc3VidHJhY3REZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNTdWJ0cmFjdC5zdWJ0cmFjdERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVW5pdENsYXNzOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVVuaXRDbGFzc1xufTtcbmV4cG9ydHMuVW5pdERlcGVuZGVuY2llcyA9IFVuaXREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnVuaXREZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzVW5pdENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVW5pdENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHVuaXREZXBlbmRlbmNpZXMgPSB7XG4gIFVuaXREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuVW5pdERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlVW5pdEZ1bmN0aW9uOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVVuaXRGdW5jdGlvblxufTtcbmV4cG9ydHMudW5pdERlcGVuZGVuY2llcyA9IHVuaXREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkVEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzRSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0UuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgRURlcGVuZGVuY2llcyA9IHtcbiAgZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0UuZURlcGVuZGVuY2llcyxcbiAgY3JlYXRlVXBwZXJjYXNlRTogX2ZhY3Rvcmllc0FueS5jcmVhdGVVcHBlcmNhc2VFXG59O1xuZXhwb3J0cy5FRGVwZW5kZW5jaWVzID0gRURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuUElEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzUGkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNQaS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBQSURlcGVuZGVuY2llcyA9IHtcbiAgcGlEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNQaS5waURlcGVuZGVuY2llcyxcbiAgY3JlYXRlVXBwZXJjYXNlUGk6IF9mYWN0b3JpZXNBbnkuY3JlYXRlVXBwZXJjYXNlUGlcbn07XG5leHBvcnRzLlBJRGVwZW5kZW5jaWVzID0gUElEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnVzb2x2ZURlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGVuc2VNYXRyaXhDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNFcXVhbFNjYWxhciA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0VxdWFsU2NhbGFyLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5U2NhbGFyID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdXNvbHZlRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZVNjYWxhckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZVNjYWxhci5kaXZpZGVTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIGVxdWFsU2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzRXF1YWxTY2FsYXIuZXF1YWxTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5U2NhbGFyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHlTY2FsYXIubXVsdGlwbHlTY2FsYXJEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVVzb2x2ZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVVc29sdmVcbn07XG5leHBvcnRzLnVzb2x2ZURlcGVuZGVuY2llcyA9IHVzb2x2ZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudmFjdXVtSW1wZWRhbmNlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1VuaXRDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1VuaXRDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uLy4uL2ZhY3Rvcmllc0FueS5qc1wiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciB2YWN1dW1JbXBlZGFuY2VEZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgVW5pdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1VuaXRDbGFzcy5Vbml0RGVwZW5kZW5jaWVzLFxuICBjcmVhdGVWYWN1dW1JbXBlZGFuY2U6IF9mYWN0b3JpZXNBbnkuY3JlYXRlVmFjdXVtSW1wZWRhbmNlXG59O1xuZXhwb3J0cy52YWN1dW1JbXBlZGFuY2VEZXBlbmRlbmNpZXMgPSB2YWN1dW1JbXBlZGFuY2VEZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnZhcmlhbmNlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0FkZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FkZC5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQXBwbHkgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNBcHBseS5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzRGl2aWRlID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzRGl2aWRlLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNJc05hTiA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0lzTmFOLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc011bHRpcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNTdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1N1YnRyYWN0LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHZhcmlhbmNlRGVwZW5kZW5jaWVzID0ge1xuICBhZGREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNBZGQuYWRkRGVwZW5kZW5jaWVzLFxuICBhcHBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FwcGx5LmFwcGx5RGVwZW5kZW5jaWVzLFxuICBkaXZpZGVEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNEaXZpZGUuZGl2aWRlRGVwZW5kZW5jaWVzLFxuICBpc05hTkRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0lzTmFOLmlzTmFORGVwZW5kZW5jaWVzLFxuICBtdWx0aXBseURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc011bHRpcGx5Lm11bHRpcGx5RGVwZW5kZW5jaWVzLFxuICBzdWJ0cmFjdERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1N1YnRyYWN0LnN1YnRyYWN0RGVwZW5kZW5jaWVzLFxuICB0eXBlZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc1R5cGVkLnR5cGVkRGVwZW5kZW5jaWVzLFxuICBjcmVhdGVWYXJpYW5jZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVWYXJpYW5jZVxufTtcbmV4cG9ydHMudmFyaWFuY2VEZXBlbmRlbmNpZXMgPSB2YXJpYW5jZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudmFyaWFuY2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQWRkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQWRkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNBcHBseSA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0FwcGx5LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNEaXZpZGUgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEaXZpZGUuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc0lzTmFOID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzSXNOYU4uZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc011bHRpcGx5ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTXVsdGlwbHkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzU3VidHJhY3QuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdmFyaWFuY2VUcmFuc2Zvcm1EZXBlbmRlbmNpZXMgPSB7XG4gIGFkZERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0FkZC5hZGREZXBlbmRlbmNpZXMsXG4gIGFwcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQXBwbHkuYXBwbHlEZXBlbmRlbmNpZXMsXG4gIGRpdmlkZURlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RpdmlkZS5kaXZpZGVEZXBlbmRlbmNpZXMsXG4gIGlzTmFORGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzSXNOYU4uaXNOYU5EZXBlbmRlbmNpZXMsXG4gIG11bHRpcGx5RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTXVsdGlwbHkubXVsdGlwbHlEZXBlbmRlbmNpZXMsXG4gIHN1YnRyYWN0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzU3VidHJhY3Quc3VidHJhY3REZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVZhcmlhbmNlVHJhbnNmb3JtOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVZhcmlhbmNlVHJhbnNmb3JtXG59O1xuZXhwb3J0cy52YXJpYW5jZVRyYW5zZm9ybURlcGVuZGVuY2llcyA9IHZhcmlhbmNlVHJhbnNmb3JtRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy52ZXJzaW9uRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgdmVyc2lvbkRlcGVuZGVuY2llcyA9IHtcbiAgY3JlYXRlVmVyc2lvbjogX2ZhY3Rvcmllc0FueS5jcmVhdGVWZXJzaW9uXG59O1xuZXhwb3J0cy52ZXJzaW9uRGVwZW5kZW5jaWVzID0gdmVyc2lvbkRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMud2Vha01peGluZ0FuZ2xlRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgd2Vha01peGluZ0FuZ2xlRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVdlYWtNaXhpbmdBbmdsZTogX2ZhY3Rvcmllc0FueS5jcmVhdGVXZWFrTWl4aW5nQW5nbGVcbn07XG5leHBvcnRzLndlYWtNaXhpbmdBbmdsZURlcGVuZGVuY2llcyA9IHdlYWtNaXhpbmdBbmdsZURlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMud2llbkRpc3BsYWNlbWVudERlcGVuZGVuY2llcyA9IHZvaWQgMDtcblxudmFyIF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcyA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNVbml0Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNVbml0Q2xhc3MuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgd2llbkRpc3BsYWNlbWVudERlcGVuZGVuY2llcyA9IHtcbiAgQmlnTnVtYmVyRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MuQmlnTnVtYmVyRGVwZW5kZW5jaWVzLFxuICBVbml0RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVW5pdENsYXNzLlVuaXREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVdpZW5EaXNwbGFjZW1lbnQ6IF9mYWN0b3JpZXNBbnkuY3JlYXRlV2llbkRpc3BsYWNlbWVudFxufTtcbmV4cG9ydHMud2llbkRpc3BsYWNlbWVudERlcGVuZGVuY2llcyA9IHdpZW5EaXNwbGFjZW1lbnREZXBlbmRlbmNpZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnhnY2REZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHhnY2REZXBlbmRlbmNpZXMgPSB7XG4gIEJpZ051bWJlckRlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0JpZ051bWJlckNsYXNzLkJpZ051bWJlckRlcGVuZGVuY2llcyxcbiAgbWF0cml4RGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzTWF0cml4Lm1hdHJpeERlcGVuZGVuY2llcyxcbiAgdHlwZWREZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNUeXBlZC50eXBlZERlcGVuZGVuY2llcyxcbiAgY3JlYXRlWGdjZDogX2ZhY3Rvcmllc0FueS5jcmVhdGVYZ2NkXG59O1xuZXhwb3J0cy54Z2NkRGVwZW5kZW5jaWVzID0geGdjZERlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMueG9yRGVwZW5kZW5jaWVzID0gdm9pZCAwO1xuXG52YXIgX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNEZW5zZU1hdHJpeENsYXNzLmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNNYXRyaXggPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNNYXRyaXguZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2RlcGVuZGVuY2llc1R5cGVkID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzVHlwZWQuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ZhY3Rvcmllc0FueSA9IHJlcXVpcmUoXCIuLi8uLi9mYWN0b3JpZXNBbnkuanNcIik7XG5cbi8qKlxuICogVEhJUyBGSUxFIElTIEFVVE8tR0VORVJBVEVEXG4gKiBET04nVCBNQUtFIENIQU5HRVMgSEVSRVxuICovXG52YXIgeG9yRGVwZW5kZW5jaWVzID0ge1xuICBEZW5zZU1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc0RlbnNlTWF0cml4Q2xhc3MuRGVuc2VNYXRyaXhEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVhvcjogX2ZhY3Rvcmllc0FueS5jcmVhdGVYb3Jcbn07XG5leHBvcnRzLnhvckRlcGVuZGVuY2llcyA9IHhvckRlcGVuZGVuY2llczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuemVyb3NEZXBlbmRlbmNpZXMgPSB2b2lkIDA7XG5cbnZhciBfZGVwZW5kZW5jaWVzQmlnTnVtYmVyQ2xhc3MgPSByZXF1aXJlKFwiLi9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5nZW5lcmF0ZWRcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzTWF0cml4ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzTWF0cml4LmdlbmVyYXRlZFwiKTtcblxudmFyIF9kZXBlbmRlbmNpZXNUeXBlZCA9IHJlcXVpcmUoXCIuL2RlcGVuZGVuY2llc1R5cGVkLmdlbmVyYXRlZFwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vLi4vZmFjdG9yaWVzQW55LmpzXCIpO1xuXG4vKipcbiAqIFRISVMgRklMRSBJUyBBVVRPLUdFTkVSQVRFRFxuICogRE9OJ1QgTUFLRSBDSEFOR0VTIEhFUkVcbiAqL1xudmFyIHplcm9zRGVwZW5kZW5jaWVzID0ge1xuICBCaWdOdW1iZXJEZXBlbmRlbmNpZXM6IF9kZXBlbmRlbmNpZXNCaWdOdW1iZXJDbGFzcy5CaWdOdW1iZXJEZXBlbmRlbmNpZXMsXG4gIG1hdHJpeERlcGVuZGVuY2llczogX2RlcGVuZGVuY2llc01hdHJpeC5tYXRyaXhEZXBlbmRlbmNpZXMsXG4gIHR5cGVkRGVwZW5kZW5jaWVzOiBfZGVwZW5kZW5jaWVzVHlwZWQudHlwZWREZXBlbmRlbmNpZXMsXG4gIGNyZWF0ZVplcm9zOiBfZmFjdG9yaWVzQW55LmNyZWF0ZVplcm9zXG59O1xuZXhwb3J0cy56ZXJvc0RlcGVuZGVuY2llcyA9IHplcm9zRGVwZW5kZW5jaWVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lcnJvciA9IGV4cG9ydHMuanNvbiA9IGV4cG9ydHMuZXhwcmVzc2lvbiA9IGV4cG9ydHMudHlwZSA9IGV4cG9ydHMuZGVwcmVjYXRlZFR5cGVvZiA9IGV4cG9ydHMuZGVwcmVjYXRlZFZhciA9IGV4cG9ydHMuZGVwcmVjYXRlZEltcG9ydCA9IGV4cG9ydHMuZGVwcmVjYXRlZEV2YWwgPSB2b2lkIDA7XG5cbnZhciBfZXZhbCA9IHJlcXVpcmUoXCIuLi9leHByZXNzaW9uL2Z1bmN0aW9uL2V2YWxcIik7XG5cbnZhciBfZGVwcmVjYXRlZEltcG9ydCA9IHJlcXVpcmUoXCIuLi9jb3JlL2Z1bmN0aW9uL2RlcHJlY2F0ZWRJbXBvcnRcIik7XG5cbnZhciBfdmFyaWFuY2UgPSByZXF1aXJlKFwiLi4vZnVuY3Rpb24vc3RhdGlzdGljcy92YXJpYW5jZVwiKTtcblxudmFyIF90eXBlT2YgPSByZXF1aXJlKFwiLi4vZnVuY3Rpb24vdXRpbHMvdHlwZU9mXCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX0FyZ3VtZW50c0Vycm9yID0gcmVxdWlyZShcIi4uL2Vycm9yL0FyZ3VtZW50c0Vycm9yXCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgX0luZGV4RXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvSW5kZXhFcnJvclwiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2xvZyA9IHJlcXVpcmUoXCIuLi91dGlscy9sb2dcIik7XG5cbnZhciBfcHVyZUZ1bmN0aW9uc0FueSA9IHJlcXVpcmUoXCIuL3B1cmVGdW5jdGlvbnNBbnkuZ2VuZXJhdGVkXCIpO1xuXG52YXIgX2ltcHVyZUZ1bmN0aW9uc0FueSA9IHJlcXVpcmUoXCIuL2ltcHVyZUZ1bmN0aW9uc0FueS5nZW5lcmF0ZWRcIik7XG5cbi8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA2LjAuMC4gRGF0ZTogMjAxOS0wNC0xNFxuLy8gXCJkZXByZWNhdGVkRXZhbFwiIGlzIGFsc28gZXhwb3NlZCBhcyBcImV2YWxcIiBpbiB0aGUgY29kZSBjb21waWxlZCB0byBFUzUrQ29tbW9uSnNcbnZhciBkZXByZWNhdGVkRXZhbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZXZhbC5jcmVhdGVEZXByZWNhdGVkRXZhbCkoe1xuICBldmFsdWF0ZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5ldmFsdWF0ZVxufSk7IC8vIFwiZGVwcmVjYXRlZEltcG9ydFwiIGlzIGFsc28gZXhwb3NlZCBhcyBcImltcG9ydFwiIGluIHRoZSBjb2RlIGNvbXBpbGVkIHRvIEVTNStDb21tb25Kc1xuXG5leHBvcnRzLmRlcHJlY2F0ZWRFdmFsID0gZGVwcmVjYXRlZEV2YWw7XG52YXIgZGVwcmVjYXRlZEltcG9ydCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZGVwcmVjYXRlZEltcG9ydC5jcmVhdGVEZXByZWNhdGVkSW1wb3J0KSh7fSk7IC8vIFwiZGVwcmVjYXRlZFZhclwiIGlzIGFsc28gZXhwb3NlZCBhcyBcInZhclwiIGluIHRoZSBjb2RlIGNvbXBpbGVkIHRvIEVTNStDb21tb25Kc1xuXG5leHBvcnRzLmRlcHJlY2F0ZWRJbXBvcnQgPSBkZXByZWNhdGVkSW1wb3J0O1xudmFyIGRlcHJlY2F0ZWRWYXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX3ZhcmlhbmNlLmNyZWF0ZURlcHJlY2F0ZWRWYXIpKHtcbiAgdmFyaWFuY2U6IF9wdXJlRnVuY3Rpb25zQW55LnZhcmlhbmNlXG59KTsgLy8gXCJkZXByZWNhdGVkVHlwZW9mXCIgaXMgYWxzbyBleHBvc2VkIGFzIFwidHlwZW9mXCIgaW4gdGhlIGNvZGUgY29tcGlsZWQgdG8gRVM1K0NvbW1vbkpzXG5cbmV4cG9ydHMuZGVwcmVjYXRlZFZhciA9IGRlcHJlY2F0ZWRWYXI7XG52YXIgZGVwcmVjYXRlZFR5cGVvZiA9IC8qICNfX1BVUkVfXyAqLygwLCBfdHlwZU9mLmNyZWF0ZURlcHJlY2F0ZWRUeXBlb2YpKHtcbiAgdHlwZU9mOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlT2Zcbn0pO1xuZXhwb3J0cy5kZXByZWNhdGVkVHlwZW9mID0gZGVwcmVjYXRlZFR5cGVvZjtcbnZhciB0eXBlID0gLyogI19fUFVSRV9fICovY3JlYXRlRGVwcmVjYXRlZFByb3BlcnRpZXMoJ3R5cGUnLCB7XG4gIGlzTnVtYmVyOiBfaXMuaXNOdW1iZXIsXG4gIGlzQ29tcGxleDogX2lzLmlzQ29tcGxleCxcbiAgaXNCaWdOdW1iZXI6IF9pcy5pc0JpZ051bWJlcixcbiAgaXNGcmFjdGlvbjogX2lzLmlzRnJhY3Rpb24sXG4gIGlzVW5pdDogX2lzLmlzVW5pdCxcbiAgaXNTdHJpbmc6IF9pcy5pc1N0cmluZyxcbiAgaXNBcnJheTogX2lzLmlzQXJyYXksXG4gIGlzTWF0cml4OiBfaXMuaXNNYXRyaXgsXG4gIGlzQ29sbGVjdGlvbjogX2lzLmlzQ29sbGVjdGlvbixcbiAgaXNEZW5zZU1hdHJpeDogX2lzLmlzRGVuc2VNYXRyaXgsXG4gIGlzU3BhcnNlTWF0cml4OiBfaXMuaXNTcGFyc2VNYXRyaXgsXG4gIGlzUmFuZ2U6IF9pcy5pc1JhbmdlLFxuICBpc0luZGV4OiBfaXMuaXNJbmRleCxcbiAgaXNCb29sZWFuOiBfaXMuaXNCb29sZWFuLFxuICBpc1Jlc3VsdFNldDogX2lzLmlzUmVzdWx0U2V0LFxuICBpc0hlbHA6IF9pcy5pc0hlbHAsXG4gIGlzRnVuY3Rpb246IF9pcy5pc0Z1bmN0aW9uLFxuICBpc0RhdGU6IF9pcy5pc0RhdGUsXG4gIGlzUmVnRXhwOiBfaXMuaXNSZWdFeHAsXG4gIGlzT2JqZWN0OiBfaXMuaXNPYmplY3QsXG4gIGlzTnVsbDogX2lzLmlzTnVsbCxcbiAgaXNVbmRlZmluZWQ6IF9pcy5pc1VuZGVmaW5lZCxcbiAgaXNBY2Nlc3Nvck5vZGU6IF9pcy5pc0FjY2Vzc29yTm9kZSxcbiAgaXNBcnJheU5vZGU6IF9pcy5pc0FycmF5Tm9kZSxcbiAgaXNBc3NpZ25tZW50Tm9kZTogX2lzLmlzQXNzaWdubWVudE5vZGUsXG4gIGlzQmxvY2tOb2RlOiBfaXMuaXNCbG9ja05vZGUsXG4gIGlzQ29uZGl0aW9uYWxOb2RlOiBfaXMuaXNDb25kaXRpb25hbE5vZGUsXG4gIGlzQ29uc3RhbnROb2RlOiBfaXMuaXNDb25zdGFudE5vZGUsXG4gIGlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZTogX2lzLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSxcbiAgaXNGdW5jdGlvbk5vZGU6IF9pcy5pc0Z1bmN0aW9uTm9kZSxcbiAgaXNJbmRleE5vZGU6IF9pcy5pc0luZGV4Tm9kZSxcbiAgaXNOb2RlOiBfaXMuaXNOb2RlLFxuICBpc09iamVjdE5vZGU6IF9pcy5pc09iamVjdE5vZGUsXG4gIGlzT3BlcmF0b3JOb2RlOiBfaXMuaXNPcGVyYXRvck5vZGUsXG4gIGlzUGFyZW50aGVzaXNOb2RlOiBfaXMuaXNQYXJlbnRoZXNpc05vZGUsXG4gIGlzUmFuZ2VOb2RlOiBfaXMuaXNSYW5nZU5vZGUsXG4gIGlzU3ltYm9sTm9kZTogX2lzLmlzU3ltYm9sTm9kZSxcbiAgaXNDaGFpbjogX2lzLmlzQ2hhaW4sXG4gIEJpZ051bWJlcjogX3B1cmVGdW5jdGlvbnNBbnkuQmlnTnVtYmVyLFxuICBDaGFpbjogX2ltcHVyZUZ1bmN0aW9uc0FueS5DaGFpbixcbiAgQ29tcGxleDogX3B1cmVGdW5jdGlvbnNBbnkuQ29tcGxleCxcbiAgRnJhY3Rpb246IF9wdXJlRnVuY3Rpb25zQW55LkZyYWN0aW9uLFxuICBNYXRyaXg6IF9wdXJlRnVuY3Rpb25zQW55Lk1hdHJpeCxcbiAgRGVuc2VNYXRyaXg6IF9wdXJlRnVuY3Rpb25zQW55LkRlbnNlTWF0cml4LFxuICBTcGFyc2VNYXRyaXg6IF9wdXJlRnVuY3Rpb25zQW55LlNwYXJzZU1hdHJpeCxcbiAgU3BhOiBfcHVyZUZ1bmN0aW9uc0FueS5TcGEsXG4gIEZpYm9uYWNjaUhlYXA6IF9wdXJlRnVuY3Rpb25zQW55LkZpYm9uYWNjaUhlYXAsXG4gIEltbXV0YWJsZURlbnNlTWF0cml4OiBfcHVyZUZ1bmN0aW9uc0FueS5JbW11dGFibGVEZW5zZU1hdHJpeCxcbiAgSW5kZXg6IF9wdXJlRnVuY3Rpb25zQW55LkluZGV4LFxuICBSYW5nZTogX3B1cmVGdW5jdGlvbnNBbnkuUmFuZ2UsXG4gIFJlc3VsdFNldDogX3B1cmVGdW5jdGlvbnNBbnkuUmVzdWx0U2V0LFxuICBVbml0OiBfcHVyZUZ1bmN0aW9uc0FueS5Vbml0LFxuICBIZWxwOiBfaW1wdXJlRnVuY3Rpb25zQW55LkhlbHAsXG4gIFBhcnNlcjogX2ltcHVyZUZ1bmN0aW9uc0FueS5QYXJzZXJcbn0pO1xuZXhwb3J0cy50eXBlID0gdHlwZTtcbnZhciBleHByZXNzaW9uID0gLyogI19fUFVSRV9fICovY3JlYXRlRGVwcmVjYXRlZFByb3BlcnRpZXMoJ2V4cHJlc3Npb24nLCB7XG4gIHBhcnNlOiBfaW1wdXJlRnVuY3Rpb25zQW55LnBhcnNlLFxuICBQYXJzZXI6IF9pbXB1cmVGdW5jdGlvbnNBbnkuUGFyc2VyLFxuICBub2RlOiBjcmVhdGVEZXByZWNhdGVkUHJvcGVydGllcygnZXhwcmVzc2lvbi5ub2RlJywge1xuICAgIEFjY2Vzc29yTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5BY2Nlc3Nvck5vZGUsXG4gICAgQXJyYXlOb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55LkFycmF5Tm9kZSxcbiAgICBBc3NpZ25tZW50Tm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5Bc3NpZ25tZW50Tm9kZSxcbiAgICBCbG9ja05vZGU6IF9pbXB1cmVGdW5jdGlvbnNBbnkuQmxvY2tOb2RlLFxuICAgIENvbmRpdGlvbmFsTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5Db25kaXRpb25hbE5vZGUsXG4gICAgQ29uc3RhbnROb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55LkNvbnN0YW50Tm9kZSxcbiAgICBJbmRleE5vZGU6IF9pbXB1cmVGdW5jdGlvbnNBbnkuSW5kZXhOb2RlLFxuICAgIEZ1bmN0aW9uQXNzaWdubWVudE5vZGU6IF9pbXB1cmVGdW5jdGlvbnNBbnkuRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSxcbiAgICBGdW5jdGlvbk5vZGU6IF9pbXB1cmVGdW5jdGlvbnNBbnkuRnVuY3Rpb25Ob2RlLFxuICAgIE5vZGU6IF9pbXB1cmVGdW5jdGlvbnNBbnkuTm9kZSxcbiAgICBPYmplY3ROb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55Lk9iamVjdE5vZGUsXG4gICAgT3BlcmF0b3JOb2RlOiBfaW1wdXJlRnVuY3Rpb25zQW55Lk9wZXJhdG9yTm9kZSxcbiAgICBQYXJlbnRoZXNpc05vZGU6IF9pbXB1cmVGdW5jdGlvbnNBbnkuUGFyZW50aGVzaXNOb2RlLFxuICAgIFJhbmdlTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5SYW5nZU5vZGUsXG4gICAgUmVsYXRpb25hbE5vZGU6IF9pbXB1cmVGdW5jdGlvbnNBbnkuUmVsYXRpb25hbE5vZGUsXG4gICAgU3ltYm9sTm9kZTogX2ltcHVyZUZ1bmN0aW9uc0FueS5TeW1ib2xOb2RlXG4gIH0pXG59KTtcbmV4cG9ydHMuZXhwcmVzc2lvbiA9IGV4cHJlc3Npb247XG52YXIganNvbiA9IC8qICNfX1BVUkVfXyAqL2NyZWF0ZURlcHJlY2F0ZWRQcm9wZXJ0aWVzKCdqc29uJywge1xuICByZXZpdmVyOiBfaW1wdXJlRnVuY3Rpb25zQW55LnJldml2ZXJcbn0pO1xuZXhwb3J0cy5qc29uID0ganNvbjtcbnZhciBlcnJvciA9IC8qICNfX1BVUkVfXyAqL2NyZWF0ZURlcHJlY2F0ZWRQcm9wZXJ0aWVzKCdlcnJvcicsIHtcbiAgQXJndW1lbnRzRXJyb3I6IF9Bcmd1bWVudHNFcnJvci5Bcmd1bWVudHNFcnJvcixcbiAgRGltZW5zaW9uRXJyb3I6IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcixcbiAgSW5kZXhFcnJvcjogX0luZGV4RXJyb3IuSW5kZXhFcnJvclxufSk7XG5leHBvcnRzLmVycm9yID0gZXJyb3I7XG5cbmZ1bmN0aW9uIGNyZWF0ZURlcHJlY2F0ZWRQcm9wZXJ0aWVzKHBhdGgsIHByb3BzKSB7XG4gIHZhciBvYmogPSB7fTtcbiAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAoMCwgX29iamVjdC5sYXp5KShvYmosIG5hbWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICgwLCBfbG9nLndhcm5PbmNlKShcIm1hdGguXCIuY29uY2F0KHBhdGgsIFwiLlwiKS5jb25jYXQobmFtZSwgXCIgaXMgbW92ZWQgdG8gbWF0aC5cIikuY29uY2F0KG5hbWUsIFwiIGluIHY2LjAuMC4gXCIpICsgJ1BsZWFzZSB1c2UgdGhlIG5ldyBsb2NhdGlvbiBpbnN0ZWFkLicpO1xuICAgICAgcmV0dXJuIHByb3BzW25hbWVdO1xuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIG9iajtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImRvY3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2VtYmVkZGVkRG9jcy5lbWJlZGRlZERvY3M7XG4gIH1cbn0pO1xuZXhwb3J0cy5kZXJpdmF0aXZlID0gZXhwb3J0cy5oZWxwID0gZXhwb3J0cy5yYXRpb25hbGl6ZSA9IGV4cG9ydHMuc2ltcGxpZnkgPSBleHBvcnRzLnBhcnNlciA9IGV4cG9ydHMuY29tcGlsZSA9IGV4cG9ydHMuSGVscCA9IGV4cG9ydHMuUGFyc2VyID0gZXhwb3J0cy5ldmFsdWF0ZSA9IGV4cG9ydHMucGFyc2UgPSBleHBvcnRzLkZ1bmN0aW9uTm9kZSA9IGV4cG9ydHMuU3ltYm9sTm9kZSA9IGV4cG9ydHMuQXNzaWdubWVudE5vZGUgPSBleHBvcnRzLkluZGV4Tm9kZSA9IGV4cG9ydHMuQWNjZXNzb3JOb2RlID0gZXhwb3J0cy5jaGFpbiA9IGV4cG9ydHMuRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9IGV4cG9ydHMuUmFuZ2VOb2RlID0gZXhwb3J0cy5PcGVyYXRvck5vZGUgPSBleHBvcnRzLkNvbmRpdGlvbmFsTm9kZSA9IGV4cG9ydHMucmV2aXZlciA9IGV4cG9ydHMuQ2hhaW4gPSBleHBvcnRzLlJlbGF0aW9uYWxOb2RlID0gZXhwb3J0cy5QYXJlbnRoZXNpc05vZGUgPSBleHBvcnRzLk9iamVjdE5vZGUgPSBleHBvcnRzLkNvbnN0YW50Tm9kZSA9IGV4cG9ydHMuQmxvY2tOb2RlID0gZXhwb3J0cy5BcnJheU5vZGUgPSBleHBvcnRzLk5vZGUgPSB2b2lkIDA7XG5cbnZhciBfY29uZmlnUmVhZG9ubHkgPSByZXF1aXJlKFwiLi9jb25maWdSZWFkb25seVwiKTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vZmFjdG9yaWVzQW55XCIpO1xuXG52YXIgX3B1cmVGdW5jdGlvbnNBbnkgPSByZXF1aXJlKFwiLi9wdXJlRnVuY3Rpb25zQW55LmdlbmVyYXRlZFwiKTtcblxudmFyIF9lbWJlZGRlZERvY3MgPSByZXF1aXJlKFwiLi4vZXhwcmVzc2lvbi9lbWJlZGRlZERvY3MvZW1iZWRkZWREb2NzXCIpO1xuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG52YXIgbWF0aCA9IHt9OyAvLyBOT1QgcHVyZSFcblxudmFyIG1hdGhXaXRoVHJhbnNmb3JtID0ge307IC8vIE5PVCBwdXJlIVxuXG52YXIgY2xhc3NlcyA9IHt9OyAvLyBOT1QgcHVyZSFcblxudmFyIE5vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVOb2RlKSh7XG4gIG1hdGhXaXRoVHJhbnNmb3JtOiBtYXRoV2l0aFRyYW5zZm9ybVxufSk7XG5leHBvcnRzLk5vZGUgPSBOb2RlO1xudmFyIEFycmF5Tm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFycmF5Tm9kZSkoe1xuICBOb2RlOiBOb2RlXG59KTtcbmV4cG9ydHMuQXJyYXlOb2RlID0gQXJyYXlOb2RlO1xudmFyIEJsb2NrTm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUJsb2NrTm9kZSkoe1xuICBOb2RlOiBOb2RlLFxuICBSZXN1bHRTZXQ6IF9wdXJlRnVuY3Rpb25zQW55LlJlc3VsdFNldFxufSk7XG5leHBvcnRzLkJsb2NrTm9kZSA9IEJsb2NrTm9kZTtcbnZhciBDb25zdGFudE5vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb25zdGFudE5vZGUpKHtcbiAgTm9kZTogTm9kZVxufSk7XG5leHBvcnRzLkNvbnN0YW50Tm9kZSA9IENvbnN0YW50Tm9kZTtcbnZhciBPYmplY3ROb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlT2JqZWN0Tm9kZSkoe1xuICBOb2RlOiBOb2RlXG59KTtcbmV4cG9ydHMuT2JqZWN0Tm9kZSA9IE9iamVjdE5vZGU7XG52YXIgUGFyZW50aGVzaXNOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUGFyZW50aGVzaXNOb2RlKSh7XG4gIE5vZGU6IE5vZGVcbn0pO1xuZXhwb3J0cy5QYXJlbnRoZXNpc05vZGUgPSBQYXJlbnRoZXNpc05vZGU7XG52YXIgUmVsYXRpb25hbE5vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSZWxhdGlvbmFsTm9kZSkoe1xuICBOb2RlOiBOb2RlXG59KTtcbmV4cG9ydHMuUmVsYXRpb25hbE5vZGUgPSBSZWxhdGlvbmFsTm9kZTtcbnZhciBDaGFpbiA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNoYWluQ2xhc3MpKHtcbiAgbWF0aDogbWF0aFxufSk7XG5leHBvcnRzLkNoYWluID0gQ2hhaW47XG52YXIgcmV2aXZlciA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJldml2ZXIpKHtcbiAgY2xhc3NlczogY2xhc3Nlc1xufSk7XG5leHBvcnRzLnJldml2ZXIgPSByZXZpdmVyO1xudmFyIENvbmRpdGlvbmFsTm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbmRpdGlvbmFsTm9kZSkoe1xuICBOb2RlOiBOb2RlXG59KTtcbmV4cG9ydHMuQ29uZGl0aW9uYWxOb2RlID0gQ29uZGl0aW9uYWxOb2RlO1xudmFyIE9wZXJhdG9yTm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU9wZXJhdG9yTm9kZSkoe1xuICBOb2RlOiBOb2RlXG59KTtcbmV4cG9ydHMuT3BlcmF0b3JOb2RlID0gT3BlcmF0b3JOb2RlO1xudmFyIFJhbmdlTm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJhbmdlTm9kZSkoe1xuICBOb2RlOiBOb2RlXG59KTtcbmV4cG9ydHMuUmFuZ2VOb2RlID0gUmFuZ2VOb2RlO1xudmFyIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSh7XG4gIE5vZGU6IE5vZGUsXG4gIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxufSk7XG5leHBvcnRzLkZ1bmN0aW9uQXNzaWdubWVudE5vZGUgPSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlO1xudmFyIGNoYWluID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2hhaW4pKHtcbiAgQ2hhaW46IENoYWluLFxuICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbn0pO1xuZXhwb3J0cy5jaGFpbiA9IGNoYWluO1xudmFyIEFjY2Vzc29yTm9kZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFjY2Vzc29yTm9kZSkoe1xuICBOb2RlOiBOb2RlLFxuICBzdWJzZXQ6IF9wdXJlRnVuY3Rpb25zQW55LnN1YnNldFxufSk7XG5leHBvcnRzLkFjY2Vzc29yTm9kZSA9IEFjY2Vzc29yTm9kZTtcbnZhciBJbmRleE5vZGUgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmRleE5vZGUpKHtcbiAgTm9kZTogTm9kZSxcbiAgUmFuZ2U6IF9wdXJlRnVuY3Rpb25zQW55LlJhbmdlLFxuICBzaXplOiBfcHVyZUZ1bmN0aW9uc0FueS5zaXplXG59KTtcbmV4cG9ydHMuSW5kZXhOb2RlID0gSW5kZXhOb2RlO1xudmFyIEFzc2lnbm1lbnROb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQXNzaWdubWVudE5vZGUpKHtcbiAgbWF0cml4OiBfcHVyZUZ1bmN0aW9uc0FueS5tYXRyaXgsXG4gIE5vZGU6IE5vZGUsXG4gIHN1YnNldDogX3B1cmVGdW5jdGlvbnNBbnkuc3Vic2V0XG59KTtcbmV4cG9ydHMuQXNzaWdubWVudE5vZGUgPSBBc3NpZ25tZW50Tm9kZTtcbnZhciBTeW1ib2xOb2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3ltYm9sTm9kZSkoe1xuICBVbml0OiBfcHVyZUZ1bmN0aW9uc0FueS5Vbml0LFxuICBOb2RlOiBOb2RlLFxuICBtYXRoOiBtYXRoXG59KTtcbmV4cG9ydHMuU3ltYm9sTm9kZSA9IFN5bWJvbE5vZGU7XG52YXIgRnVuY3Rpb25Ob2RlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRnVuY3Rpb25Ob2RlKSh7XG4gIE5vZGU6IE5vZGUsXG4gIFN5bWJvbE5vZGU6IFN5bWJvbE5vZGUsXG4gIG1hdGg6IG1hdGhcbn0pO1xuZXhwb3J0cy5GdW5jdGlvbk5vZGUgPSBGdW5jdGlvbk5vZGU7XG52YXIgcGFyc2UgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQYXJzZSkoe1xuICBBY2Nlc3Nvck5vZGU6IEFjY2Vzc29yTm9kZSxcbiAgQXJyYXlOb2RlOiBBcnJheU5vZGUsXG4gIEFzc2lnbm1lbnROb2RlOiBBc3NpZ25tZW50Tm9kZSxcbiAgQmxvY2tOb2RlOiBCbG9ja05vZGUsXG4gIENvbmRpdGlvbmFsTm9kZTogQ29uZGl0aW9uYWxOb2RlLFxuICBDb25zdGFudE5vZGU6IENvbnN0YW50Tm9kZSxcbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZTogRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSxcbiAgRnVuY3Rpb25Ob2RlOiBGdW5jdGlvbk5vZGUsXG4gIEluZGV4Tm9kZTogSW5kZXhOb2RlLFxuICBPYmplY3ROb2RlOiBPYmplY3ROb2RlLFxuICBPcGVyYXRvck5vZGU6IE9wZXJhdG9yTm9kZSxcbiAgUGFyZW50aGVzaXNOb2RlOiBQYXJlbnRoZXNpc05vZGUsXG4gIFJhbmdlTm9kZTogUmFuZ2VOb2RlLFxuICBSZWxhdGlvbmFsTm9kZTogUmVsYXRpb25hbE5vZGUsXG4gIFN5bWJvbE5vZGU6IFN5bWJvbE5vZGUsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbnVtZXJpYzogX3B1cmVGdW5jdGlvbnNBbnkubnVtZXJpYyxcbiAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG59KTtcbmV4cG9ydHMucGFyc2UgPSBwYXJzZTtcbnZhciBldmFsdWF0ZSA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUV2YWx1YXRlKSh7XG4gIHBhcnNlOiBwYXJzZSxcbiAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG59KTtcbmV4cG9ydHMuZXZhbHVhdGUgPSBldmFsdWF0ZTtcbnZhciBQYXJzZXIgPSAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQYXJzZXJDbGFzcykoe1xuICBwYXJzZTogcGFyc2Vcbn0pO1xuZXhwb3J0cy5QYXJzZXIgPSBQYXJzZXI7XG52YXIgSGVscCA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUhlbHBDbGFzcykoe1xuICBwYXJzZTogcGFyc2Vcbn0pO1xuZXhwb3J0cy5IZWxwID0gSGVscDtcbnZhciBjb21waWxlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGlsZSkoe1xuICBwYXJzZTogcGFyc2UsXG4gIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxufSk7XG5leHBvcnRzLmNvbXBpbGUgPSBjb21waWxlO1xudmFyIHBhcnNlciA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBhcnNlcikoe1xuICBQYXJzZXI6IFBhcnNlcixcbiAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG59KTtcbmV4cG9ydHMucGFyc2VyID0gcGFyc2VyO1xudmFyIHNpbXBsaWZ5ID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU2ltcGxpZnkpKHtcbiAgYmlnbnVtYmVyOiBfcHVyZUZ1bmN0aW9uc0FueS5iaWdudW1iZXIsXG4gIGZyYWN0aW9uOiBfcHVyZUZ1bmN0aW9uc0FueS5mcmFjdGlvbixcbiAgQ29uc3RhbnROb2RlOiBDb25zdGFudE5vZGUsXG4gIEZ1bmN0aW9uTm9kZTogRnVuY3Rpb25Ob2RlLFxuICBPcGVyYXRvck5vZGU6IE9wZXJhdG9yTm9kZSxcbiAgUGFyZW50aGVzaXNOb2RlOiBQYXJlbnRoZXNpc05vZGUsXG4gIFN5bWJvbE5vZGU6IFN5bWJvbE5vZGUsXG4gIGFkZDogX3B1cmVGdW5jdGlvbnNBbnkuYWRkLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGRpdmlkZTogX3B1cmVGdW5jdGlvbnNBbnkuZGl2aWRlLFxuICBlcXVhbDogX3B1cmVGdW5jdGlvbnNBbnkuZXF1YWwsXG4gIGlzWmVybzogX3B1cmVGdW5jdGlvbnNBbnkuaXNaZXJvLFxuICBtYXRoV2l0aFRyYW5zZm9ybTogbWF0aFdpdGhUcmFuc2Zvcm0sXG4gIG11bHRpcGx5OiBfcHVyZUZ1bmN0aW9uc0FueS5tdWx0aXBseSxcbiAgcGFyc2U6IHBhcnNlLFxuICBwb3c6IF9wdXJlRnVuY3Rpb25zQW55LnBvdyxcbiAgc3VidHJhY3Q6IF9wdXJlRnVuY3Rpb25zQW55LnN1YnRyYWN0LFxuICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbn0pO1xuZXhwb3J0cy5zaW1wbGlmeSA9IHNpbXBsaWZ5O1xudmFyIHJhdGlvbmFsaXplID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUmF0aW9uYWxpemUpKHtcbiAgYmlnbnVtYmVyOiBfcHVyZUZ1bmN0aW9uc0FueS5iaWdudW1iZXIsXG4gIGZyYWN0aW9uOiBfcHVyZUZ1bmN0aW9uc0FueS5mcmFjdGlvbixcbiAgQ29uc3RhbnROb2RlOiBDb25zdGFudE5vZGUsXG4gIEZ1bmN0aW9uTm9kZTogRnVuY3Rpb25Ob2RlLFxuICBPcGVyYXRvck5vZGU6IE9wZXJhdG9yTm9kZSxcbiAgUGFyZW50aGVzaXNOb2RlOiBQYXJlbnRoZXNpc05vZGUsXG4gIFN5bWJvbE5vZGU6IFN5bWJvbE5vZGUsXG4gIGFkZDogX3B1cmVGdW5jdGlvbnNBbnkuYWRkLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGRpdmlkZTogX3B1cmVGdW5jdGlvbnNBbnkuZGl2aWRlLFxuICBlcXVhbDogX3B1cmVGdW5jdGlvbnNBbnkuZXF1YWwsXG4gIGlzWmVybzogX3B1cmVGdW5jdGlvbnNBbnkuaXNaZXJvLFxuICBtYXRoV2l0aFRyYW5zZm9ybTogbWF0aFdpdGhUcmFuc2Zvcm0sXG4gIG11bHRpcGx5OiBfcHVyZUZ1bmN0aW9uc0FueS5tdWx0aXBseSxcbiAgcGFyc2U6IHBhcnNlLFxuICBwb3c6IF9wdXJlRnVuY3Rpb25zQW55LnBvdyxcbiAgc2ltcGxpZnk6IHNpbXBsaWZ5LFxuICBzdWJ0cmFjdDogX3B1cmVGdW5jdGlvbnNBbnkuc3VidHJhY3QsXG4gIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxufSk7XG5leHBvcnRzLnJhdGlvbmFsaXplID0gcmF0aW9uYWxpemU7XG52YXIgaGVscCA9ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUhlbHApKHtcbiAgSGVscDogSGVscCxcbiAgbWF0aFdpdGhUcmFuc2Zvcm06IG1hdGhXaXRoVHJhbnNmb3JtLFxuICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbn0pO1xuZXhwb3J0cy5oZWxwID0gaGVscDtcbnZhciBkZXJpdmF0aXZlID0gKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRGVyaXZhdGl2ZSkoe1xuICBDb25zdGFudE5vZGU6IENvbnN0YW50Tm9kZSxcbiAgRnVuY3Rpb25Ob2RlOiBGdW5jdGlvbk5vZGUsXG4gIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZSxcbiAgU3ltYm9sTm9kZTogU3ltYm9sTm9kZSxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBlcXVhbDogX3B1cmVGdW5jdGlvbnNBbnkuZXF1YWwsXG4gIGlzWmVybzogX3B1cmVGdW5jdGlvbnNBbnkuaXNaZXJvLFxuICBudW1lcmljOiBfcHVyZUZ1bmN0aW9uc0FueS5udW1lcmljLFxuICBwYXJzZTogcGFyc2UsXG4gIHNpbXBsaWZ5OiBzaW1wbGlmeSxcbiAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG59KTtcbmV4cG9ydHMuZGVyaXZhdGl2ZSA9IGRlcml2YXRpdmU7XG5cbl9leHRlbmRzKG1hdGgsIHtcbiAgJ3R5cGVvZic6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVPZixcbiAgZXllOiBfcHVyZUZ1bmN0aW9uc0FueS5leWUsXG4gIHJldml2ZXI6IHJldml2ZXIsXG4gIFwiZmFsc2VcIjogX3B1cmVGdW5jdGlvbnNBbnkuX2ZhbHNlLFxuICBcIm51bGxcIjogX3B1cmVGdW5jdGlvbnNBbnkuX251bGwsXG4gIFwidHJ1ZVwiOiBfcHVyZUZ1bmN0aW9uc0FueS5fdHJ1ZSxcbiAgcmVwbGFjZXI6IF9wdXJlRnVuY3Rpb25zQW55LnJlcGxhY2VyLFxuICBpOiBfcHVyZUZ1bmN0aW9uc0FueS5pLFxuICBMTjEwOiBfcHVyZUZ1bmN0aW9uc0FueS5MTjEwLFxuICBMT0cxMEU6IF9wdXJlRnVuY3Rpb25zQW55LkxPRzEwRSxcbiAgTmFOOiBfcHVyZUZ1bmN0aW9uc0FueS5fTmFOLFxuICBwaTogX3B1cmVGdW5jdGlvbnNBbnkucGksXG4gIFNRUlQxXzI6IF9wdXJlRnVuY3Rpb25zQW55LlNRUlQxXzIsXG4gIHRhdTogX3B1cmVGdW5jdGlvbnNBbnkudGF1LFxuICBlZmltb3ZGYWN0b3I6IF9wdXJlRnVuY3Rpb25zQW55LmVmaW1vdkZhY3RvcixcbiAgZmluZVN0cnVjdHVyZTogX3B1cmVGdW5jdGlvbnNBbnkuZmluZVN0cnVjdHVyZSxcbiAgc2Fja3VyVGV0cm9kZTogX3B1cmVGdW5jdGlvbnNBbnkuc2Fja3VyVGV0cm9kZSxcbiAgd2Vha01peGluZ0FuZ2xlOiBfcHVyZUZ1bmN0aW9uc0FueS53ZWFrTWl4aW5nQW5nbGUsXG4gIGU6IF9wdXJlRnVuY3Rpb25zQW55LmUsXG4gIEluZmluaXR5OiBfcHVyZUZ1bmN0aW9uc0FueS5fSW5maW5pdHksXG4gIExPRzJFOiBfcHVyZUZ1bmN0aW9uc0FueS5MT0cyRSxcbiAgJ1BJJzogX3B1cmVGdW5jdGlvbnNBbnkucGksXG4gIHZlcnNpb246IF9wdXJlRnVuY3Rpb25zQW55LnZlcnNpb24sXG4gICdFJzogX3B1cmVGdW5jdGlvbnNBbnkuZSxcbiAgcGhpOiBfcHVyZUZ1bmN0aW9uc0FueS5waGksXG4gIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZCxcbiAgaXNJbnRlZ2VyOiBfcHVyZUZ1bmN0aW9uc0FueS5pc0ludGVnZXIsXG4gIGlzTnVtZXJpYzogX3B1cmVGdW5jdGlvbnNBbnkuaXNOdW1lcmljLFxuICBpc1Bvc2l0aXZlOiBfcHVyZUZ1bmN0aW9uc0FueS5pc1Bvc2l0aXZlLFxuICBpc05hTjogX3B1cmVGdW5jdGlvbnNBbnkuaXNOYU4sXG4gIGVxdWFsU2NhbGFyOiBfcHVyZUZ1bmN0aW9uc0FueS5lcXVhbFNjYWxhcixcbiAgbnVtYmVyOiBfcHVyZUZ1bmN0aW9uc0FueS5udW1iZXIsXG4gIFwiYm9vbGVhblwiOiBfcHVyZUZ1bmN0aW9uc0FueVtcImJvb2xlYW5cIl0sXG4gIGNvbXBsZXg6IF9wdXJlRnVuY3Rpb25zQW55LmNvbXBsZXgsXG4gIHNwbGl0VW5pdDogX3B1cmVGdW5jdGlvbnNBbnkuc3BsaXRVbml0LFxuICB1bmFyeVBsdXM6IF9wdXJlRnVuY3Rpb25zQW55LnVuYXJ5UGx1cyxcbiAgYXBwbHk6IF9wdXJlRnVuY3Rpb25zQW55LmFwcGx5LFxuICBjdWJlOiBfcHVyZUZ1bmN0aW9uc0FueS5jdWJlLFxuICBleHBtMTogX3B1cmVGdW5jdGlvbnNBbnkuZXhwbTEsXG4gIGxvZzEwOiBfcHVyZUZ1bmN0aW9uc0FueS5sb2cxMCxcbiAgbXVsdGlwbHlTY2FsYXI6IF9wdXJlRnVuY3Rpb25zQW55Lm11bHRpcGx5U2NhbGFyLFxuICBzaWduOiBfcHVyZUZ1bmN0aW9uc0FueS5zaWduLFxuICBzcXVhcmU6IF9wdXJlRnVuY3Rpb25zQW55LnNxdWFyZSxcbiAgYml0Tm90OiBfcHVyZUZ1bmN0aW9uc0FueS5iaXROb3QsXG4gIGFyZzogX3B1cmVGdW5jdGlvbnNBbnkuYXJnLFxuICBpbTogX3B1cmVGdW5jdGlvbnNBbnkuaW0sXG4gIG5vdDogX3B1cmVGdW5jdGlvbnNBbnkubm90LFxuICBmaWx0ZXI6IF9wdXJlRnVuY3Rpb25zQW55LmZpbHRlcixcbiAgZm9yRWFjaDogX3B1cmVGdW5jdGlvbnNBbnkuZm9yRWFjaCxcbiAgbWFwOiBfcHVyZUZ1bmN0aW9uc0FueS5tYXAsXG4gIGVyZjogX3B1cmVGdW5jdGlvbnNBbnkuZXJmLFxuICBmb3JtYXQ6IF9wdXJlRnVuY3Rpb25zQW55LmZvcm1hdCxcbiAgaXNQcmltZTogX3B1cmVGdW5jdGlvbnNBbnkuaXNQcmltZSxcbiAgYWNvczogX3B1cmVGdW5jdGlvbnNBbnkuYWNvcyxcbiAgYWNvdDogX3B1cmVGdW5jdGlvbnNBbnkuYWNvdCxcbiAgYWNzYzogX3B1cmVGdW5jdGlvbnNBbnkuYWNzYyxcbiAgYXNlYzogX3B1cmVGdW5jdGlvbnNBbnkuYXNlYyxcbiAgYXNpbjogX3B1cmVGdW5jdGlvbnNBbnkuYXNpbixcbiAgYXRhbjogX3B1cmVGdW5jdGlvbnNBbnkuYXRhbixcbiAgYXRhbmg6IF9wdXJlRnVuY3Rpb25zQW55LmF0YW5oLFxuICBjb3NoOiBfcHVyZUZ1bmN0aW9uc0FueS5jb3NoLFxuICBjb3RoOiBfcHVyZUZ1bmN0aW9uc0FueS5jb3RoLFxuICBjc2NoOiBfcHVyZUZ1bmN0aW9uc0FueS5jc2NoLFxuICBzZWNoOiBfcHVyZUZ1bmN0aW9uc0FueS5zZWNoLFxuICBzaW5oOiBfcHVyZUZ1bmN0aW9uc0FueS5zaW5oLFxuICB0YW5oOiBfcHVyZUZ1bmN0aW9uc0FueS50YW5oLFxuICBjaGFpbjogY2hhaW4sXG4gIGNvbWJpbmF0aW9uczogX3B1cmVGdW5jdGlvbnNBbnkuY29tYmluYXRpb25zLFxuICBwaWNrUmFuZG9tOiBfcHVyZUZ1bmN0aW9uc0FueS5waWNrUmFuZG9tLFxuICByYW5kb21JbnQ6IF9wdXJlRnVuY3Rpb25zQW55LnJhbmRvbUludCxcbiAgTE4yOiBfcHVyZUZ1bmN0aW9uc0FueS5MTjIsXG4gIGNsb25lOiBfcHVyZUZ1bmN0aW9uc0FueS5jbG9uZSxcbiAgaGFzTnVtZXJpY1ZhbHVlOiBfcHVyZUZ1bmN0aW9uc0FueS5oYXNOdW1lcmljVmFsdWUsXG4gIHR5cGVPZjogX3B1cmVGdW5jdGlvbnNBbnkudHlwZU9mLFxuICBzdHJpbmc6IF9wdXJlRnVuY3Rpb25zQW55LnN0cmluZyxcbiAgZnJhY3Rpb246IF9wdXJlRnVuY3Rpb25zQW55LmZyYWN0aW9uLFxuICB1bmFyeU1pbnVzOiBfcHVyZUZ1bmN0aW9uc0FueS51bmFyeU1pbnVzLFxuICBhZGRTY2FsYXI6IF9wdXJlRnVuY3Rpb25zQW55LmFkZFNjYWxhcixcbiAgZXhwOiBfcHVyZUZ1bmN0aW9uc0FueS5leHAsXG4gIGxvZzI6IF9wdXJlRnVuY3Rpb25zQW55LmxvZzIsXG4gIHNxcnQ6IF9wdXJlRnVuY3Rpb25zQW55LnNxcnQsXG4gIGNvbmo6IF9wdXJlRnVuY3Rpb25zQW55LmNvbmosXG4gIGdldE1hdHJpeERhdGFUeXBlOiBfcHVyZUZ1bmN0aW9uc0FueS5nZXRNYXRyaXhEYXRhVHlwZSxcbiAgbW9kZTogX3B1cmVGdW5jdGlvbnNBbnkubW9kZSxcbiAgcHJpbnQ6IF9wdXJlRnVuY3Rpb25zQW55LnByaW50LFxuICBhY29zaDogX3B1cmVGdW5jdGlvbnNBbnkuYWNvc2gsXG4gIGFjc2NoOiBfcHVyZUZ1bmN0aW9uc0FueS5hY3NjaCxcbiAgYXNpbmg6IF9wdXJlRnVuY3Rpb25zQW55LmFzaW5oLFxuICBjb3M6IF9wdXJlRnVuY3Rpb25zQW55LmNvcyxcbiAgY3NjOiBfcHVyZUZ1bmN0aW9uc0FueS5jc2MsXG4gIHNpbjogX3B1cmVGdW5jdGlvbnNBbnkuc2luLFxuICBjb21iaW5hdGlvbnNXaXRoUmVwOiBfcHVyZUZ1bmN0aW9uc0FueS5jb21iaW5hdGlvbnNXaXRoUmVwLFxuICByYW5kb206IF9wdXJlRnVuY3Rpb25zQW55LnJhbmRvbSxcbiAgU1FSVDI6IF9wdXJlRnVuY3Rpb25zQW55LlNRUlQyLFxuICBpc05lZ2F0aXZlOiBfcHVyZUZ1bmN0aW9uc0FueS5pc05lZ2F0aXZlLFxuICBtYXRyaXg6IF9wdXJlRnVuY3Rpb25zQW55Lm1hdHJpeCxcbiAgY2JydDogX3B1cmVGdW5jdGlvbnNBbnkuY2JydCxcbiAgZ2NkOiBfcHVyZUZ1bmN0aW9uc0FueS5nY2QsXG4gIG1vZDogX3B1cmVGdW5jdGlvbnNBbnkubW9kLFxuICBudGhSb290OiBfcHVyZUZ1bmN0aW9uc0FueS5udGhSb290LFxuICB4Z2NkOiBfcHVyZUZ1bmN0aW9uc0FueS54Z2NkLFxuICBiaXRBbmQ6IF9wdXJlRnVuY3Rpb25zQW55LmJpdEFuZCxcbiAgYml0WG9yOiBfcHVyZUZ1bmN0aW9uc0FueS5iaXRYb3IsXG4gIG9yOiBfcHVyZUZ1bmN0aW9uc0FueS5vcixcbiAgY29uY2F0OiBfcHVyZUZ1bmN0aW9uc0FueS5jb25jYXQsXG4gIGRpYWc6IF9wdXJlRnVuY3Rpb25zQW55LmRpYWcsXG4gIGlkZW50aXR5OiBfcHVyZUZ1bmN0aW9uc0FueS5pZGVudGl0eSxcbiAgb25lczogX3B1cmVGdW5jdGlvbnNBbnkub25lcyxcbiAgcmVzaGFwZTogX3B1cmVGdW5jdGlvbnNBbnkucmVzaGFwZSxcbiAgc2l6ZTogX3B1cmVGdW5jdGlvbnNBbnkuc2l6ZSxcbiAgc3Vic2V0OiBfcHVyZUZ1bmN0aW9uc0FueS5zdWJzZXQsXG4gIHplcm9zOiBfcHVyZUZ1bmN0aW9uc0FueS56ZXJvcyxcbiAgdG86IF9wdXJlRnVuY3Rpb25zQW55LnRvLFxuICByb3VuZDogX3B1cmVGdW5jdGlvbnNBbnkucm91bmQsXG4gIGxlZnRTaGlmdDogX3B1cmVGdW5jdGlvbnNBbnkubGVmdFNoaWZ0LFxuICByaWdodExvZ1NoaWZ0OiBfcHVyZUZ1bmN0aW9uc0FueS5yaWdodExvZ1NoaWZ0LFxuICBjb21wYXJlOiBfcHVyZUZ1bmN0aW9uc0FueS5jb21wYXJlLFxuICBjb21wYXJlVGV4dDogX3B1cmVGdW5jdGlvbnNBbnkuY29tcGFyZVRleHQsXG4gIHNtYWxsZXI6IF9wdXJlRnVuY3Rpb25zQW55LnNtYWxsZXIsXG4gIGxhcmdlcjogX3B1cmVGdW5jdGlvbnNBbnkubGFyZ2VyLFxuICB1bmVxdWFsOiBfcHVyZUZ1bmN0aW9uc0FueS51bmVxdWFsLFxuICBtYXg6IF9wdXJlRnVuY3Rpb25zQW55Lm1heCxcbiAgc3BhcnNlOiBfcHVyZUZ1bmN0aW9uc0FueS5zcGFyc2UsXG4gIGFjb3RoOiBfcHVyZUZ1bmN0aW9uc0FueS5hY290aCxcbiAgYXRhbjI6IF9wdXJlRnVuY3Rpb25zQW55LmF0YW4yLFxuICBzZWM6IF9wdXJlRnVuY3Rpb25zQW55LnNlYyxcbiAgYWRkOiBfcHVyZUZ1bmN0aW9uc0FueS5hZGQsXG4gIHRyYWNlOiBfcHVyZUZ1bmN0aW9uc0FueS50cmFjZSxcbiAgY29tcG9zaXRpb246IF9wdXJlRnVuY3Rpb25zQW55LmNvbXBvc2l0aW9uLFxuICBpc1plcm86IF9wdXJlRnVuY3Rpb25zQW55LmlzWmVybyxcbiAgYWJzOiBfcHVyZUZ1bmN0aW9uc0FueS5hYnMsXG4gIGZsb29yOiBfcHVyZUZ1bmN0aW9uc0FueS5mbG9vcixcbiAgbXVsdGlwbHk6IF9wdXJlRnVuY3Rpb25zQW55Lm11bHRpcGx5LFxuICBkb3RNdWx0aXBseTogX3B1cmVGdW5jdGlvbnNBbnkuZG90TXVsdGlwbHksXG4gIHJlOiBfcHVyZUZ1bmN0aW9uc0FueS5yZSxcbiAgZmxhdHRlbjogX3B1cmVGdW5jdGlvbnNBbnkuZmxhdHRlbixcbiAgcmVzaXplOiBfcHVyZUZ1bmN0aW9uc0FueS5yZXNpemUsXG4gIHNxdWVlemU6IF9wdXJlRnVuY3Rpb25zQW55LnNxdWVlemUsXG4gIHByb2Q6IF9wdXJlRnVuY3Rpb25zQW55LnByb2QsXG4gIHBvdzogX3B1cmVGdW5jdGlvbnNBbnkucG93LFxuICBkb3RQb3c6IF9wdXJlRnVuY3Rpb25zQW55LmRvdFBvdyxcbiAgcmlnaHRBcml0aFNoaWZ0OiBfcHVyZUZ1bmN0aW9uc0FueS5yaWdodEFyaXRoU2hpZnQsXG4gIGNvbXBhcmVOYXR1cmFsOiBfcHVyZUZ1bmN0aW9uc0FueS5jb21wYXJlTmF0dXJhbCxcbiAgZXF1YWxUZXh0OiBfcHVyZUZ1bmN0aW9uc0FueS5lcXVhbFRleHQsXG4gIGxhcmdlckVxOiBfcHVyZUZ1bmN0aW9uc0FueS5sYXJnZXJFcSxcbiAgcGFydGl0aW9uU2VsZWN0OiBfcHVyZUZ1bmN0aW9uc0FueS5wYXJ0aXRpb25TZWxlY3QsXG4gIG1pbjogX3B1cmVGdW5jdGlvbnNBbnkubWluLFxuICBhc2VjaDogX3B1cmVGdW5jdGlvbnNBbnkuYXNlY2gsXG4gIHRhbjogX3B1cmVGdW5jdGlvbnNBbnkudGFuLFxuICBzZXRTaXplOiBfcHVyZUZ1bmN0aW9uc0FueS5zZXRTaXplLFxuICBub3JtOiBfcHVyZUZ1bmN0aW9uc0FueS5ub3JtLFxuICBxdWFudGlsZVNlcTogX3B1cmVGdW5jdGlvbnNBbnkucXVhbnRpbGVTZXEsXG4gIGdhbW1hOiBfcHVyZUZ1bmN0aW9uc0FueS5nYW1tYSxcbiAgYmlnbnVtYmVyOiBfcHVyZUZ1bmN0aW9uc0FueS5iaWdudW1iZXIsXG4gIGxjbTogX3B1cmVGdW5jdGlvbnNBbnkubGNtLFxuICBiaXRPcjogX3B1cmVGdW5jdGlvbnNBbnkuYml0T3IsXG4gIGtyb246IF9wdXJlRnVuY3Rpb25zQW55Lmtyb24sXG4gIHRyYW5zcG9zZTogX3B1cmVGdW5jdGlvbnNBbnkudHJhbnNwb3NlLFxuICBudW1lcmljOiBfcHVyZUZ1bmN0aW9uc0FueS5udW1lcmljLFxuICBhbmQ6IF9wdXJlRnVuY3Rpb25zQW55LmFuZCxcbiAgc21hbGxlckVxOiBfcHVyZUZ1bmN0aW9uc0FueS5zbWFsbGVyRXEsXG4gIHNvcnQ6IF9wdXJlRnVuY3Rpb25zQW55LnNvcnQsXG4gIGNvdDogX3B1cmVGdW5jdGlvbnNBbnkuY290LFxuICBkb3Q6IF9wdXJlRnVuY3Rpb25zQW55LmRvdCxcbiAgc3VtOiBfcHVyZUZ1bmN0aW9uc0FueS5zdW0sXG4gIGZhY3RvcmlhbDogX3B1cmVGdW5jdGlvbnNBbnkuZmFjdG9yaWFsLFxuICBwZXJtdXRhdGlvbnM6IF9wdXJlRnVuY3Rpb25zQW55LnBlcm11dGF0aW9ucyxcbiAgY2VpbDogX3B1cmVGdW5jdGlvbnNBbnkuY2VpbCxcbiAgc3VidHJhY3Q6IF9wdXJlRnVuY3Rpb25zQW55LnN1YnRyYWN0LFxuICBjcm9zczogX3B1cmVGdW5jdGlvbnNBbnkuY3Jvc3MsXG4gIGN0cmFuc3Bvc2U6IF9wdXJlRnVuY3Rpb25zQW55LmN0cmFuc3Bvc2UsXG4gIGVxdWFsOiBfcHVyZUZ1bmN0aW9uc0FueS5lcXVhbCxcbiAgc2V0Q2FydGVzaWFuOiBfcHVyZUZ1bmN0aW9uc0FueS5zZXRDYXJ0ZXNpYW4sXG4gIHNldERpc3RpbmN0OiBfcHVyZUZ1bmN0aW9uc0FueS5zZXREaXN0aW5jdCxcbiAgc2V0SXNTdWJzZXQ6IF9wdXJlRnVuY3Rpb25zQW55LnNldElzU3Vic2V0LFxuICBzZXRQb3dlcnNldDogX3B1cmVGdW5jdGlvbnNBbnkuc2V0UG93ZXJzZXQsXG4gIGluZGV4OiBfcHVyZUZ1bmN0aW9uc0FueS5pbmRleCxcbiAgZml4OiBfcHVyZUZ1bmN0aW9uc0FueS5maXgsXG4gIHJhbmdlOiBfcHVyZUZ1bmN0aW9uc0FueS5yYW5nZSxcbiAgZGl2aWRlU2NhbGFyOiBfcHVyZUZ1bmN0aW9uc0FueS5kaXZpZGVTY2FsYXIsXG4gIG50aFJvb3RzOiBfcHVyZUZ1bmN0aW9uc0FueS5udGhSb290cyxcbiAgbHNvbHZlOiBfcHVyZUZ1bmN0aW9uc0FueS5sc29sdmUsXG4gIGRlZXBFcXVhbDogX3B1cmVGdW5jdGlvbnNBbnkuZGVlcEVxdWFsLFxuICBzZXREaWZmZXJlbmNlOiBfcHVyZUZ1bmN0aW9uc0FueS5zZXREaWZmZXJlbmNlLFxuICBzZXRNdWx0aXBsaWNpdHk6IF9wdXJlRnVuY3Rpb25zQW55LnNldE11bHRpcGxpY2l0eSxcbiAgaHlwb3Q6IF9wdXJlRnVuY3Rpb25zQW55Lmh5cG90LFxuICBsdXA6IF9wdXJlRnVuY3Rpb25zQW55Lmx1cCxcbiAgc2x1OiBfcHVyZUZ1bmN0aW9uc0FueS5zbHUsXG4gIGRldDogX3B1cmVGdW5jdGlvbnNBbnkuZGV0LFxuICBkaXN0YW5jZTogX3B1cmVGdW5jdGlvbnNBbnkuZGlzdGFuY2UsXG4gIHN0aXJsaW5nUzI6IF9wdXJlRnVuY3Rpb25zQW55LnN0aXJsaW5nUzIsXG4gIGNhdGFsYW46IF9wdXJlRnVuY3Rpb25zQW55LmNhdGFsYW4sXG4gIHhvcjogX3B1cmVGdW5jdGlvbnNBbnkueG9yLFxuICByb3c6IF9wdXJlRnVuY3Rpb25zQW55LnJvdyxcbiAgZG90RGl2aWRlOiBfcHVyZUZ1bmN0aW9uc0FueS5kb3REaXZpZGUsXG4gIGNyZWF0ZVVuaXQ6IF9wdXJlRnVuY3Rpb25zQW55LmNyZWF0ZVVuaXQsXG4gIHNldFN5bURpZmZlcmVuY2U6IF9wdXJlRnVuY3Rpb25zQW55LnNldFN5bURpZmZlcmVuY2UsXG4gIHFyOiBfcHVyZUZ1bmN0aW9uc0FueS5xcixcbiAgaW52OiBfcHVyZUZ1bmN0aW9uc0FueS5pbnYsXG4gIGV4cG06IF9wdXJlRnVuY3Rpb25zQW55LmV4cG0sXG4gIGRpdmlkZTogX3B1cmVGdW5jdGlvbnNBbnkuZGl2aWRlLFxuICBtZWFuOiBfcHVyZUZ1bmN0aW9uc0FueS5tZWFuLFxuICB2YXJpYW5jZTogX3B1cmVGdW5jdGlvbnNBbnkudmFyaWFuY2UsXG4gIHN0ZDogX3B1cmVGdW5jdGlvbnNBbnkuc3RkLFxuICBtdWx0aW5vbWlhbDogX3B1cmVGdW5jdGlvbnNBbnkubXVsdGlub21pYWwsXG4gIGF0b21pY01hc3M6IF9wdXJlRnVuY3Rpb25zQW55LmF0b21pY01hc3MsXG4gIGJvaHJNYWduZXRvbjogX3B1cmVGdW5jdGlvbnNBbnkuYm9ock1hZ25ldG9uLFxuICBib2x0em1hbm46IF9wdXJlRnVuY3Rpb25zQW55LmJvbHR6bWFubixcbiAgY29uZHVjdGFuY2VRdWFudHVtOiBfcHVyZUZ1bmN0aW9uc0FueS5jb25kdWN0YW5jZVF1YW50dW0sXG4gIGRldXRlcm9uTWFzczogX3B1cmVGdW5jdGlvbnNBbnkuZGV1dGVyb25NYXNzLFxuICBlbGVjdHJvbk1hc3M6IF9wdXJlRnVuY3Rpb25zQW55LmVsZWN0cm9uTWFzcyxcbiAgZmFyYWRheTogX3B1cmVGdW5jdGlvbnNBbnkuZmFyYWRheSxcbiAgZmlyc3RSYWRpYXRpb246IF9wdXJlRnVuY3Rpb25zQW55LmZpcnN0UmFkaWF0aW9uLFxuICBncmF2aXRhdGlvbkNvbnN0YW50OiBfcHVyZUZ1bmN0aW9uc0FueS5ncmF2aXRhdGlvbkNvbnN0YW50LFxuICBoYXJ0cmVlRW5lcmd5OiBfcHVyZUZ1bmN0aW9uc0FueS5oYXJ0cmVlRW5lcmd5LFxuICBrbGl0emluZzogX3B1cmVGdW5jdGlvbnNBbnkua2xpdHppbmcsXG4gIG1hZ25ldGljQ29uc3RhbnQ6IF9wdXJlRnVuY3Rpb25zQW55Lm1hZ25ldGljQ29uc3RhbnQsXG4gIG1vbGFyTWFzczogX3B1cmVGdW5jdGlvbnNBbnkubW9sYXJNYXNzLFxuICBtb2xhclBsYW5ja0NvbnN0YW50OiBfcHVyZUZ1bmN0aW9uc0FueS5tb2xhclBsYW5ja0NvbnN0YW50LFxuICBuZXV0cm9uTWFzczogX3B1cmVGdW5jdGlvbnNBbnkubmV1dHJvbk1hc3MsXG4gIHBsYW5ja0NoYXJnZTogX3B1cmVGdW5jdGlvbnNBbnkucGxhbmNrQ2hhcmdlLFxuICBwbGFuY2tMZW5ndGg6IF9wdXJlRnVuY3Rpb25zQW55LnBsYW5ja0xlbmd0aCxcbiAgcGxhbmNrVGVtcGVyYXR1cmU6IF9wdXJlRnVuY3Rpb25zQW55LnBsYW5ja1RlbXBlcmF0dXJlLFxuICBwcm90b25NYXNzOiBfcHVyZUZ1bmN0aW9uc0FueS5wcm90b25NYXNzLFxuICByZWR1Y2VkUGxhbmNrQ29uc3RhbnQ6IF9wdXJlRnVuY3Rpb25zQW55LnJlZHVjZWRQbGFuY2tDb25zdGFudCxcbiAgc2Vjb25kUmFkaWF0aW9uOiBfcHVyZUZ1bmN0aW9uc0FueS5zZWNvbmRSYWRpYXRpb24sXG4gIHN0ZWZhbkJvbHR6bWFubjogX3B1cmVGdW5jdGlvbnNBbnkuc3RlZmFuQm9sdHptYW5uLFxuICB2YWN1dW1JbXBlZGFuY2U6IF9wdXJlRnVuY3Rpb25zQW55LnZhY3V1bUltcGVkYW5jZSxcbiAgY29sdW1uOiBfcHVyZUZ1bmN0aW9uc0FueS5jb2x1bW4sXG4gIHVzb2x2ZTogX3B1cmVGdW5jdGlvbnNBbnkudXNvbHZlLFxuICBzZXRJbnRlcnNlY3Q6IF9wdXJlRnVuY3Rpb25zQW55LnNldEludGVyc2VjdCxcbiAgbHVzb2x2ZTogX3B1cmVGdW5jdGlvbnNBbnkubHVzb2x2ZSxcbiAgZWlnczogX3B1cmVGdW5jdGlvbnNBbnkuZWlncyxcbiAgaW50ZXJzZWN0OiBfcHVyZUZ1bmN0aW9uc0FueS5pbnRlcnNlY3QsXG4gICd2YXInOiBfcHVyZUZ1bmN0aW9uc0FueS52YXJpYW5jZSxcbiAgYmVsbE51bWJlcnM6IF9wdXJlRnVuY3Rpb25zQW55LmJlbGxOdW1iZXJzLFxuICBhdm9nYWRybzogX3B1cmVGdW5jdGlvbnNBbnkuYXZvZ2Fkcm8sXG4gIGNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzOiBfcHVyZUZ1bmN0aW9uc0FueS5jbGFzc2ljYWxFbGVjdHJvblJhZGl1cyxcbiAgZWxlY3RyaWNDb25zdGFudDogX3B1cmVGdW5jdGlvbnNBbnkuZWxlY3RyaWNDb25zdGFudCxcbiAgZmVybWlDb3VwbGluZzogX3B1cmVGdW5jdGlvbnNBbnkuZmVybWlDb3VwbGluZyxcbiAgZ3Jhdml0eTogX3B1cmVGdW5jdGlvbnNBbnkuZ3Jhdml0eSxcbiAgbG9zY2htaWR0OiBfcHVyZUZ1bmN0aW9uc0FueS5sb3NjaG1pZHQsXG4gIG1vbGFyTWFzc0MxMjogX3B1cmVGdW5jdGlvbnNBbnkubW9sYXJNYXNzQzEyLFxuICBudWNsZWFyTWFnbmV0b246IF9wdXJlRnVuY3Rpb25zQW55Lm51Y2xlYXJNYWduZXRvbixcbiAgcGxhbmNrTWFzczogX3B1cmVGdW5jdGlvbnNBbnkucGxhbmNrTWFzcyxcbiAgcXVhbnR1bU9mQ2lyY3VsYXRpb246IF9wdXJlRnVuY3Rpb25zQW55LnF1YW50dW1PZkNpcmN1bGF0aW9uLFxuICBzcGVlZE9mTGlnaHQ6IF9wdXJlRnVuY3Rpb25zQW55LnNwZWVkT2ZMaWdodCxcbiAgd2llbkRpc3BsYWNlbWVudDogX3B1cmVGdW5jdGlvbnNBbnkud2llbkRpc3BsYWNlbWVudCxcbiAgbG9nOiBfcHVyZUZ1bmN0aW9uc0FueS5sb2csXG4gIHVuaXQ6IF9wdXJlRnVuY3Rpb25zQW55LnVuaXQsXG4gIHBhcnNlOiBwYXJzZSxcbiAgZXZhbHVhdGU6IGV2YWx1YXRlLFxuICBzcXJ0bTogX3B1cmVGdW5jdGlvbnNBbnkuc3FydG0sXG4gIGtsZGl2ZXJnZW5jZTogX3B1cmVGdW5jdGlvbnNBbnkua2xkaXZlcmdlbmNlLFxuICBib2hyUmFkaXVzOiBfcHVyZUZ1bmN0aW9uc0FueS5ib2hyUmFkaXVzLFxuICBlbGVtZW50YXJ5Q2hhcmdlOiBfcHVyZUZ1bmN0aW9uc0FueS5lbGVtZW50YXJ5Q2hhcmdlLFxuICBpbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtOiBfcHVyZUZ1bmN0aW9uc0FueS5pbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtLFxuICBtb2xhclZvbHVtZTogX3B1cmVGdW5jdGlvbnNBbnkubW9sYXJWb2x1bWUsXG4gIHBsYW5ja1RpbWU6IF9wdXJlRnVuY3Rpb25zQW55LnBsYW5ja1RpbWUsXG4gIHRob21zb25Dcm9zc1NlY3Rpb246IF9wdXJlRnVuY3Rpb25zQW55LnRob21zb25Dcm9zc1NlY3Rpb24sXG4gIGxvZzFwOiBfcHVyZUZ1bmN0aW9uc0FueS5sb2cxcCxcbiAgY29tcGlsZTogY29tcGlsZSxcbiAgcGFyc2VyOiBwYXJzZXIsXG4gIG1lZGlhbjogX3B1cmVGdW5jdGlvbnNBbnkubWVkaWFuLFxuICBzaW1wbGlmeTogc2ltcGxpZnksXG4gIHJhdGlvbmFsaXplOiByYXRpb25hbGl6ZSxcbiAgZ2FzQ29uc3RhbnQ6IF9wdXJlRnVuY3Rpb25zQW55Lmdhc0NvbnN0YW50LFxuICBwbGFuY2tDb25zdGFudDogX3B1cmVGdW5jdGlvbnNBbnkucGxhbmNrQ29uc3RhbnQsXG4gIHNldFVuaW9uOiBfcHVyZUZ1bmN0aW9uc0FueS5zZXRVbmlvbixcbiAgaGVscDogaGVscCxcbiAgZGVyaXZhdGl2ZTogZGVyaXZhdGl2ZSxcbiAgbWFnbmV0aWNGbHV4UXVhbnR1bTogX3B1cmVGdW5jdGlvbnNBbnkubWFnbmV0aWNGbHV4UXVhbnR1bSxcbiAgJ2V2YWwnOiBldmFsdWF0ZSxcbiAgY291bG9tYjogX3B1cmVGdW5jdGlvbnNBbnkuY291bG9tYixcbiAgbWFkOiBfcHVyZUZ1bmN0aW9uc0FueS5tYWQsXG4gIHJ5ZGJlcmc6IF9wdXJlRnVuY3Rpb25zQW55LnJ5ZGJlcmcsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5cbl9leHRlbmRzKG1hdGhXaXRoVHJhbnNmb3JtLCBtYXRoLCB7XG4gIGFwcGx5OiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBcHBseVRyYW5zZm9ybSkoe1xuICAgIGlzSW50ZWdlcjogX3B1cmVGdW5jdGlvbnNBbnkuaXNJbnRlZ2VyLFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgZmlsdGVyOiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGaWx0ZXJUcmFuc2Zvcm0pKHtcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIG1hcDogKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWFwVHJhbnNmb3JtKSh7XG4gICAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG4gIH0pLFxuICBmb3JFYWNoOiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGb3JFYWNoVHJhbnNmb3JtKSh7XG4gICAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG4gIH0pLFxuICBtYXg6ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1heFRyYW5zZm9ybSkoe1xuICAgIGxhcmdlcjogX3B1cmVGdW5jdGlvbnNBbnkubGFyZ2VyLFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgbWluOiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNaW5UcmFuc2Zvcm0pKHtcbiAgICBzbWFsbGVyOiBfcHVyZUZ1bmN0aW9uc0FueS5zbWFsbGVyLFxuICAgIHR5cGVkOiBfcHVyZUZ1bmN0aW9uc0FueS50eXBlZFxuICB9KSxcbiAgc3Vic2V0OiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTdWJzZXRUcmFuc2Zvcm0pKHtcbiAgICBtYXRyaXg6IF9wdXJlRnVuY3Rpb25zQW55Lm1hdHJpeCxcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIGNvbmNhdDogKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29uY2F0VHJhbnNmb3JtKSh7XG4gICAgaXNJbnRlZ2VyOiBfcHVyZUZ1bmN0aW9uc0FueS5pc0ludGVnZXIsXG4gICAgbWF0cml4OiBfcHVyZUZ1bmN0aW9uc0FueS5tYXRyaXgsXG4gICAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG4gIH0pLFxuICByYW5nZTogKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUmFuZ2VUcmFuc2Zvcm0pKHtcbiAgICBiaWdudW1iZXI6IF9wdXJlRnVuY3Rpb25zQW55LmJpZ251bWJlcixcbiAgICBtYXRyaXg6IF9wdXJlRnVuY3Rpb25zQW55Lm1hdHJpeCxcbiAgICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gICAgbGFyZ2VyOiBfcHVyZUZ1bmN0aW9uc0FueS5sYXJnZXIsXG4gICAgbGFyZ2VyRXE6IF9wdXJlRnVuY3Rpb25zQW55LmxhcmdlckVxLFxuICAgIHNtYWxsZXI6IF9wdXJlRnVuY3Rpb25zQW55LnNtYWxsZXIsXG4gICAgc21hbGxlckVxOiBfcHVyZUZ1bmN0aW9uc0FueS5zbWFsbGVyRXEsXG4gICAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG4gIH0pLFxuICBzdW06ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVN1bVRyYW5zZm9ybSkoe1xuICAgIGJpZ251bWJlcjogX3B1cmVGdW5jdGlvbnNBbnkuYmlnbnVtYmVyLFxuICAgIGZyYWN0aW9uOiBfcHVyZUZ1bmN0aW9uc0FueS5mcmFjdGlvbixcbiAgICBhZGQ6IF9wdXJlRnVuY3Rpb25zQW55LmFkZCxcbiAgICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gICAgdHlwZWQ6IF9wdXJlRnVuY3Rpb25zQW55LnR5cGVkXG4gIH0pLFxuICBpbmRleDogKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSW5kZXhUcmFuc2Zvcm0pKHtcbiAgICBJbmRleDogX3B1cmVGdW5jdGlvbnNBbnkuSW5kZXhcbiAgfSksXG4gIGNvbHVtbjogKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29sdW1uVHJhbnNmb3JtKSh7XG4gICAgSW5kZXg6IF9wdXJlRnVuY3Rpb25zQW55LkluZGV4LFxuICAgIG1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkubWF0cml4LFxuICAgIHJhbmdlOiBfcHVyZUZ1bmN0aW9uc0FueS5yYW5nZSxcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIHJvdzogKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUm93VHJhbnNmb3JtKSh7XG4gICAgSW5kZXg6IF9wdXJlRnVuY3Rpb25zQW55LkluZGV4LFxuICAgIG1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkubWF0cml4LFxuICAgIHJhbmdlOiBfcHVyZUZ1bmN0aW9uc0FueS5yYW5nZSxcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIG1lYW46ICgwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1lYW5UcmFuc2Zvcm0pKHtcbiAgICBhZGQ6IF9wdXJlRnVuY3Rpb25zQW55LmFkZCxcbiAgICBkaXZpZGU6IF9wdXJlRnVuY3Rpb25zQW55LmRpdmlkZSxcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIHZhcmlhbmNlOiAoMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVWYXJpYW5jZVRyYW5zZm9ybSkoe1xuICAgIGFkZDogX3B1cmVGdW5jdGlvbnNBbnkuYWRkLFxuICAgIGFwcGx5OiBfcHVyZUZ1bmN0aW9uc0FueS5hcHBseSxcbiAgICBkaXZpZGU6IF9wdXJlRnVuY3Rpb25zQW55LmRpdmlkZSxcbiAgICBpc05hTjogX3B1cmVGdW5jdGlvbnNBbnkuaXNOYU4sXG4gICAgbXVsdGlwbHk6IF9wdXJlRnVuY3Rpb25zQW55Lm11bHRpcGx5LFxuICAgIHN1YnRyYWN0OiBfcHVyZUZ1bmN0aW9uc0FueS5zdWJ0cmFjdCxcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWRcbiAgfSksXG4gIHN0ZDogKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3RkVHJhbnNmb3JtKSh7XG4gICAgc3FydDogX3B1cmVGdW5jdGlvbnNBbnkuc3FydCxcbiAgICB0eXBlZDogX3B1cmVGdW5jdGlvbnNBbnkudHlwZWQsXG4gICAgdmFyaWFuY2U6IF9wdXJlRnVuY3Rpb25zQW55LnZhcmlhbmNlXG4gIH0pXG59KTtcblxuX2V4dGVuZHMoY2xhc3Nlcywge1xuICBSZXN1bHRTZXQ6IF9wdXJlRnVuY3Rpb25zQW55LlJlc3VsdFNldCxcbiAgQ29tcGxleDogX3B1cmVGdW5jdGlvbnNBbnkuQ29tcGxleCxcbiAgUmFuZ2U6IF9wdXJlRnVuY3Rpb25zQW55LlJhbmdlLFxuICBOb2RlOiBOb2RlLFxuICBBcnJheU5vZGU6IEFycmF5Tm9kZSxcbiAgQmxvY2tOb2RlOiBCbG9ja05vZGUsXG4gIENvbnN0YW50Tm9kZTogQ29uc3RhbnROb2RlLFxuICBPYmplY3ROb2RlOiBPYmplY3ROb2RlLFxuICBQYXJlbnRoZXNpc05vZGU6IFBhcmVudGhlc2lzTm9kZSxcbiAgUmVsYXRpb25hbE5vZGU6IFJlbGF0aW9uYWxOb2RlLFxuICBDaGFpbjogQ2hhaW4sXG4gIEJpZ051bWJlcjogX3B1cmVGdW5jdGlvbnNBbnkuQmlnTnVtYmVyLFxuICBNYXRyaXg6IF9wdXJlRnVuY3Rpb25zQW55Lk1hdHJpeCxcbiAgQ29uZGl0aW9uYWxOb2RlOiBDb25kaXRpb25hbE5vZGUsXG4gIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICBGcmFjdGlvbjogX3B1cmVGdW5jdGlvbnNBbnkuRnJhY3Rpb24sXG4gIFJhbmdlTm9kZTogUmFuZ2VOb2RlLFxuICBEZW5zZU1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkuRGVuc2VNYXRyaXgsXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGU6IEZ1bmN0aW9uQXNzaWdubWVudE5vZGUsXG4gIFNwYXJzZU1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkuU3BhcnNlTWF0cml4LFxuICBJbW11dGFibGVEZW5zZU1hdHJpeDogX3B1cmVGdW5jdGlvbnNBbnkuSW1tdXRhYmxlRGVuc2VNYXRyaXgsXG4gIEZpYm9uYWNjaUhlYXA6IF9wdXJlRnVuY3Rpb25zQW55LkZpYm9uYWNjaUhlYXAsXG4gIEFjY2Vzc29yTm9kZTogQWNjZXNzb3JOb2RlLFxuICBJbmRleE5vZGU6IEluZGV4Tm9kZSxcbiAgU3BhOiBfcHVyZUZ1bmN0aW9uc0FueS5TcGEsXG4gIEFzc2lnbm1lbnROb2RlOiBBc3NpZ25tZW50Tm9kZSxcbiAgSW5kZXg6IF9wdXJlRnVuY3Rpb25zQW55LkluZGV4LFxuICBVbml0OiBfcHVyZUZ1bmN0aW9uc0FueS5Vbml0LFxuICBTeW1ib2xOb2RlOiBTeW1ib2xOb2RlLFxuICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgUGFyc2VyOiBQYXJzZXIsXG4gIEhlbHA6IEhlbHBcbn0pO1xuXG5DaGFpbi5jcmVhdGVQcm94eShtYXRoKTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbnZhciBfZXhwb3J0TmFtZXMgPSB7XG4gIGNvbmZpZzogdHJ1ZSxcbiAgSW5kZXhFcnJvcjogdHJ1ZSxcbiAgRGltZW5zaW9uRXJyb3I6IHRydWUsXG4gIEFyZ3VtZW50c0Vycm9yOiB0cnVlLFxuICBjcmVhdGU6IHRydWUsXG4gIGZhY3Rvcnk6IHRydWVcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjb25maWdcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJJbmRleEVycm9yXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9JbmRleEVycm9yLkluZGV4RXJyb3I7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRGltZW5zaW9uRXJyb3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIkFyZ3VtZW50c0Vycm9yXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9Bcmd1bWVudHNFcnJvci5Bcmd1bWVudHNFcnJvcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NyZWF0ZS5jcmVhdGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiZmFjdG9yeVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZmFjdG9yeS5mYWN0b3J5O1xuICB9XG59KTtcblxudmFyIF9jb25maWdSZWFkb25seSA9IHJlcXVpcmUoXCIuL2NvbmZpZ1JlYWRvbmx5XCIpO1xuXG52YXIgX3B1cmVGdW5jdGlvbnNBbnkgPSByZXF1aXJlKFwiLi9wdXJlRnVuY3Rpb25zQW55LmdlbmVyYXRlZFwiKTtcblxuT2JqZWN0LmtleXMoX3B1cmVGdW5jdGlvbnNBbnkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2V4cG9ydE5hbWVzLCBrZXkpKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF9wdXJlRnVuY3Rpb25zQW55W2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX2ltcHVyZUZ1bmN0aW9uc0FueSA9IHJlcXVpcmUoXCIuL2ltcHVyZUZ1bmN0aW9uc0FueS5nZW5lcmF0ZWRcIik7XG5cbk9iamVjdC5rZXlzKF9pbXB1cmVGdW5jdGlvbnNBbnkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2V4cG9ydE5hbWVzLCBrZXkpKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF9pbXB1cmVGdW5jdGlvbnNBbnlba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbnZhciBfdHlwZUNoZWNrcyA9IHJlcXVpcmUoXCIuL3R5cGVDaGVja3NcIik7XG5cbk9iamVjdC5rZXlzKF90eXBlQ2hlY2tzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9leHBvcnROYW1lcywga2V5KSkgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBfdHlwZUNoZWNrc1trZXldO1xuICAgIH1cbiAgfSk7XG59KTtcblxudmFyIF9JbmRleEVycm9yID0gcmVxdWlyZShcIi4uL2Vycm9yL0luZGV4RXJyb3JcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBfQXJndW1lbnRzRXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvQXJndW1lbnRzRXJyb3JcIik7XG5cbnZhciBfZGVwZW5kZW5jaWVzQW55ID0gcmVxdWlyZShcIi4vZGVwZW5kZW5jaWVzQW55LmdlbmVyYXRlZFwiKTtcblxuT2JqZWN0LmtleXMoX2RlcGVuZGVuY2llc0FueSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfZXhwb3J0TmFtZXMsIGtleSkpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX2RlcGVuZGVuY2llc0FueVtrZXldO1xuICAgIH1cbiAgfSk7XG59KTtcblxudmFyIF9mYWN0b3JpZXNBbnkgPSByZXF1aXJlKFwiLi4vZmFjdG9yaWVzQW55XCIpO1xuXG5PYmplY3Qua2V5cyhfZmFjdG9yaWVzQW55KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9leHBvcnROYW1lcywga2V5KSkgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBfZmFjdG9yaWVzQW55W2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX2NyZWF0ZSA9IHJlcXVpcmUoXCIuLi9jb3JlL2NyZWF0ZVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfZGVwcmVjYXRlZEFueSA9IHJlcXVpcmUoXCIuL2RlcHJlY2F0ZWRBbnlcIik7XG5cbk9iamVjdC5rZXlzKF9kZXByZWNhdGVkQW55KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9leHBvcnROYW1lcywga2V5KSkgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBfZGVwcmVjYXRlZEFueVtrZXldO1xuICAgIH1cbiAgfSk7XG59KTtcblxuZXhwb3J0c1sndmFyJ10gPSBleHBvcnRzLmRlcHJlY2F0ZWRWYXI7XG5leHBvcnRzWyd0eXBlb2YnXSA9IGV4cG9ydHMuZGVwcmVjYXRlZFR5cGVvZjtcbmV4cG9ydHNbJ2V2YWwnXSA9IGV4cG9ydHMuZGVwcmVjYXRlZEV2YWw7XG5leHBvcnRzWydpbXBvcnQnXSA9IGV4cG9ydHMuZGVwcmVjYXRlZEltcG9ydDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jYnJ0ID0gZXhwb3J0cy5tYXRyaXggPSBleHBvcnRzLlNwYXJzZU1hdHJpeCA9IGV4cG9ydHMuaXNOZWdhdGl2ZSA9IGV4cG9ydHMuU1FSVDIgPSBleHBvcnRzLnJhbmRvbSA9IGV4cG9ydHMuY29tYmluYXRpb25zV2l0aFJlcCA9IGV4cG9ydHMuc2luID0gZXhwb3J0cy5jc2MgPSBleHBvcnRzLmNvcyA9IGV4cG9ydHMuYXNpbmggPSBleHBvcnRzLmFjc2NoID0gZXhwb3J0cy5hY29zaCA9IGV4cG9ydHMucHJpbnQgPSBleHBvcnRzLm1vZGUgPSBleHBvcnRzLmdldE1hdHJpeERhdGFUeXBlID0gZXhwb3J0cy5jb25qID0gZXhwb3J0cy5zcXJ0ID0gZXhwb3J0cy5sb2cyID0gZXhwb3J0cy5leHAgPSBleHBvcnRzLmFkZFNjYWxhciA9IGV4cG9ydHMudW5hcnlNaW51cyA9IGV4cG9ydHMuZnJhY3Rpb24gPSBleHBvcnRzLnN0cmluZyA9IGV4cG9ydHMudHlwZU9mID0gZXhwb3J0cy5oYXNOdW1lcmljVmFsdWUgPSBleHBvcnRzLmNsb25lID0gZXhwb3J0cy5MTjIgPSBleHBvcnRzLnJhbmRvbUludCA9IGV4cG9ydHMucGlja1JhbmRvbSA9IGV4cG9ydHMuY29tYmluYXRpb25zID0gZXhwb3J0cy50YW5oID0gZXhwb3J0cy5zaW5oID0gZXhwb3J0cy5zZWNoID0gZXhwb3J0cy5jc2NoID0gZXhwb3J0cy5jb3RoID0gZXhwb3J0cy5jb3NoID0gZXhwb3J0cy5hdGFuaCA9IGV4cG9ydHMuYXRhbiA9IGV4cG9ydHMuYXNpbiA9IGV4cG9ydHMuYXNlYyA9IGV4cG9ydHMuYWNzYyA9IGV4cG9ydHMuYWNvdCA9IGV4cG9ydHMuYWNvcyA9IGV4cG9ydHMuaXNQcmltZSA9IGV4cG9ydHMuZm9ybWF0ID0gZXhwb3J0cy5lcmYgPSBleHBvcnRzLm1hcCA9IGV4cG9ydHMuZm9yRWFjaCA9IGV4cG9ydHMuZmlsdGVyID0gZXhwb3J0cy5ub3QgPSBleHBvcnRzLmltID0gZXhwb3J0cy5hcmcgPSBleHBvcnRzLmJpdE5vdCA9IGV4cG9ydHMuc3F1YXJlID0gZXhwb3J0cy5zaWduID0gZXhwb3J0cy5tdWx0aXBseVNjYWxhciA9IGV4cG9ydHMubG9nMTAgPSBleHBvcnRzLmV4cG0xID0gZXhwb3J0cy5jdWJlID0gZXhwb3J0cy5hcHBseSA9IGV4cG9ydHMudW5hcnlQbHVzID0gZXhwb3J0cy5zcGxpdFVuaXQgPSBleHBvcnRzLmNvbXBsZXggPSBleHBvcnRzW1wiYm9vbGVhblwiXSA9IGV4cG9ydHMubnVtYmVyID0gZXhwb3J0cy5lcXVhbFNjYWxhciA9IGV4cG9ydHMuaXNOYU4gPSBleHBvcnRzLmlzUG9zaXRpdmUgPSBleHBvcnRzLmlzTnVtZXJpYyA9IGV4cG9ydHMuaXNJbnRlZ2VyID0gZXhwb3J0cy50eXBlZCA9IGV4cG9ydHMucGhpID0gZXhwb3J0cy5EZW5zZU1hdHJpeCA9IGV4cG9ydHMudmVyc2lvbiA9IGV4cG9ydHMuTE9HMkUgPSBleHBvcnRzLl9JbmZpbml0eSA9IGV4cG9ydHMuZSA9IGV4cG9ydHMuRnJhY3Rpb24gPSBleHBvcnRzLndlYWtNaXhpbmdBbmdsZSA9IGV4cG9ydHMuc2Fja3VyVGV0cm9kZSA9IGV4cG9ydHMuZmluZVN0cnVjdHVyZSA9IGV4cG9ydHMuZWZpbW92RmFjdG9yID0gZXhwb3J0cy50YXUgPSBleHBvcnRzLlNRUlQxXzIgPSBleHBvcnRzLnBpID0gZXhwb3J0cy5fTmFOID0gZXhwb3J0cy5MT0cxMEUgPSBleHBvcnRzLkxOMTAgPSBleHBvcnRzLmkgPSBleHBvcnRzLnJlcGxhY2VyID0gZXhwb3J0cy5NYXRyaXggPSBleHBvcnRzLkJpZ051bWJlciA9IGV4cG9ydHMuX3RydWUgPSBleHBvcnRzLl9udWxsID0gZXhwb3J0cy5fZmFsc2UgPSBleHBvcnRzLmV5ZSA9IGV4cG9ydHMuUmFuZ2UgPSBleHBvcnRzLkNvbXBsZXggPSBleHBvcnRzLlJlc3VsdFNldCA9IHZvaWQgMDtcbmV4cG9ydHMueG9yID0gZXhwb3J0cy5jYXRhbGFuID0gZXhwb3J0cy5zdGlybGluZ1MyID0gZXhwb3J0cy5kaXN0YW5jZSA9IGV4cG9ydHMuZGV0ID0gZXhwb3J0cy5zbHUgPSBleHBvcnRzLmx1cCA9IGV4cG9ydHMuaHlwb3QgPSBleHBvcnRzLnNldE11bHRpcGxpY2l0eSA9IGV4cG9ydHMuc2V0RGlmZmVyZW5jZSA9IGV4cG9ydHMuZGVlcEVxdWFsID0gZXhwb3J0cy5sc29sdmUgPSBleHBvcnRzLm50aFJvb3RzID0gZXhwb3J0cy5kaXZpZGVTY2FsYXIgPSBleHBvcnRzLnJhbmdlID0gZXhwb3J0cy5maXggPSBleHBvcnRzLmluZGV4ID0gZXhwb3J0cy5zZXRQb3dlcnNldCA9IGV4cG9ydHMuc2V0SXNTdWJzZXQgPSBleHBvcnRzLnNldERpc3RpbmN0ID0gZXhwb3J0cy5zZXRDYXJ0ZXNpYW4gPSBleHBvcnRzLkluZGV4ID0gZXhwb3J0cy5lcXVhbCA9IGV4cG9ydHMuY3RyYW5zcG9zZSA9IGV4cG9ydHMuY3Jvc3MgPSBleHBvcnRzLnN1YnRyYWN0ID0gZXhwb3J0cy5jZWlsID0gZXhwb3J0cy5wZXJtdXRhdGlvbnMgPSBleHBvcnRzLmZhY3RvcmlhbCA9IGV4cG9ydHMuc3VtID0gZXhwb3J0cy5kb3QgPSBleHBvcnRzLmNvdCA9IGV4cG9ydHMuc29ydCA9IGV4cG9ydHMuc21hbGxlckVxID0gZXhwb3J0cy5hbmQgPSBleHBvcnRzLm51bWVyaWMgPSBleHBvcnRzLnRyYW5zcG9zZSA9IGV4cG9ydHMua3JvbiA9IGV4cG9ydHMuYml0T3IgPSBleHBvcnRzLmxjbSA9IGV4cG9ydHMuYmlnbnVtYmVyID0gZXhwb3J0cy5nYW1tYSA9IGV4cG9ydHMucXVhbnRpbGVTZXEgPSBleHBvcnRzLm5vcm0gPSBleHBvcnRzLnNldFNpemUgPSBleHBvcnRzLnRhbiA9IGV4cG9ydHMuYXNlY2ggPSBleHBvcnRzLlNwYSA9IGV4cG9ydHMubWluID0gZXhwb3J0cy5wYXJ0aXRpb25TZWxlY3QgPSBleHBvcnRzLmxhcmdlckVxID0gZXhwb3J0cy5lcXVhbFRleHQgPSBleHBvcnRzLmNvbXBhcmVOYXR1cmFsID0gZXhwb3J0cy5yaWdodEFyaXRoU2hpZnQgPSBleHBvcnRzLmRvdFBvdyA9IGV4cG9ydHMucG93ID0gZXhwb3J0cy5wcm9kID0gZXhwb3J0cy5zcXVlZXplID0gZXhwb3J0cy5yZXNpemUgPSBleHBvcnRzLmZsYXR0ZW4gPSBleHBvcnRzLnJlID0gZXhwb3J0cy5kb3RNdWx0aXBseSA9IGV4cG9ydHMubXVsdGlwbHkgPSBleHBvcnRzLmZsb29yID0gZXhwb3J0cy5hYnMgPSBleHBvcnRzLmlzWmVybyA9IGV4cG9ydHMuY29tcG9zaXRpb24gPSBleHBvcnRzLnRyYWNlID0gZXhwb3J0cy5hZGQgPSBleHBvcnRzLnNlYyA9IGV4cG9ydHMuYXRhbjIgPSBleHBvcnRzLmFjb3RoID0gZXhwb3J0cy5zcGFyc2UgPSBleHBvcnRzLkZpYm9uYWNjaUhlYXAgPSBleHBvcnRzLkltbXV0YWJsZURlbnNlTWF0cml4ID0gZXhwb3J0cy5tYXggPSBleHBvcnRzLnVuZXF1YWwgPSBleHBvcnRzLmxhcmdlciA9IGV4cG9ydHMuc21hbGxlciA9IGV4cG9ydHMuY29tcGFyZVRleHQgPSBleHBvcnRzLmNvbXBhcmUgPSBleHBvcnRzLnJpZ2h0TG9nU2hpZnQgPSBleHBvcnRzLmxlZnRTaGlmdCA9IGV4cG9ydHMucm91bmQgPSBleHBvcnRzLnRvID0gZXhwb3J0cy56ZXJvcyA9IGV4cG9ydHMuc3Vic2V0ID0gZXhwb3J0cy5zaXplID0gZXhwb3J0cy5yZXNoYXBlID0gZXhwb3J0cy5vbmVzID0gZXhwb3J0cy5pZGVudGl0eSA9IGV4cG9ydHMuZGlhZyA9IGV4cG9ydHMuY29uY2F0ID0gZXhwb3J0cy5vciA9IGV4cG9ydHMuYml0WG9yID0gZXhwb3J0cy5iaXRBbmQgPSBleHBvcnRzLnhnY2QgPSBleHBvcnRzLm50aFJvb3QgPSBleHBvcnRzLm1vZCA9IGV4cG9ydHMuZ2NkID0gdm9pZCAwO1xuZXhwb3J0cy5yeWRiZXJnID0gZXhwb3J0cy5tYWQgPSBleHBvcnRzLmNvdWxvbWIgPSBleHBvcnRzLm1hZ25ldGljRmx1eFF1YW50dW0gPSBleHBvcnRzLnNldFVuaW9uID0gZXhwb3J0cy5wbGFuY2tDb25zdGFudCA9IGV4cG9ydHMuZ2FzQ29uc3RhbnQgPSBleHBvcnRzLm1lZGlhbiA9IGV4cG9ydHMubG9nMXAgPSBleHBvcnRzLnRob21zb25Dcm9zc1NlY3Rpb24gPSBleHBvcnRzLnBsYW5ja1RpbWUgPSBleHBvcnRzLm1vbGFyVm9sdW1lID0gZXhwb3J0cy5pbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtID0gZXhwb3J0cy5lbGVtZW50YXJ5Q2hhcmdlID0gZXhwb3J0cy5ib2hyUmFkaXVzID0gZXhwb3J0cy5rbGRpdmVyZ2VuY2UgPSBleHBvcnRzLnNxcnRtID0gZXhwb3J0cy51bml0ID0gZXhwb3J0cy5sb2cgPSBleHBvcnRzLndpZW5EaXNwbGFjZW1lbnQgPSBleHBvcnRzLnNwZWVkT2ZMaWdodCA9IGV4cG9ydHMucXVhbnR1bU9mQ2lyY3VsYXRpb24gPSBleHBvcnRzLnBsYW5ja01hc3MgPSBleHBvcnRzLm51Y2xlYXJNYWduZXRvbiA9IGV4cG9ydHMubW9sYXJNYXNzQzEyID0gZXhwb3J0cy5sb3NjaG1pZHQgPSBleHBvcnRzLmdyYXZpdHkgPSBleHBvcnRzLmZlcm1pQ291cGxpbmcgPSBleHBvcnRzLmVsZWN0cmljQ29uc3RhbnQgPSBleHBvcnRzLmNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzID0gZXhwb3J0cy5hdm9nYWRybyA9IGV4cG9ydHMuYmVsbE51bWJlcnMgPSBleHBvcnRzLmludGVyc2VjdCA9IGV4cG9ydHMuZWlncyA9IGV4cG9ydHMubHVzb2x2ZSA9IGV4cG9ydHMuc2V0SW50ZXJzZWN0ID0gZXhwb3J0cy51c29sdmUgPSBleHBvcnRzLmNvbHVtbiA9IGV4cG9ydHMudmFjdXVtSW1wZWRhbmNlID0gZXhwb3J0cy5zdGVmYW5Cb2x0em1hbm4gPSBleHBvcnRzLnNlY29uZFJhZGlhdGlvbiA9IGV4cG9ydHMucmVkdWNlZFBsYW5ja0NvbnN0YW50ID0gZXhwb3J0cy5wcm90b25NYXNzID0gZXhwb3J0cy5wbGFuY2tUZW1wZXJhdHVyZSA9IGV4cG9ydHMucGxhbmNrTGVuZ3RoID0gZXhwb3J0cy5wbGFuY2tDaGFyZ2UgPSBleHBvcnRzLm5ldXRyb25NYXNzID0gZXhwb3J0cy5tb2xhclBsYW5ja0NvbnN0YW50ID0gZXhwb3J0cy5tb2xhck1hc3MgPSBleHBvcnRzLm1hZ25ldGljQ29uc3RhbnQgPSBleHBvcnRzLmtsaXR6aW5nID0gZXhwb3J0cy5oYXJ0cmVlRW5lcmd5ID0gZXhwb3J0cy5ncmF2aXRhdGlvbkNvbnN0YW50ID0gZXhwb3J0cy5maXJzdFJhZGlhdGlvbiA9IGV4cG9ydHMuZmFyYWRheSA9IGV4cG9ydHMuZWxlY3Ryb25NYXNzID0gZXhwb3J0cy5kZXV0ZXJvbk1hc3MgPSBleHBvcnRzLmNvbmR1Y3RhbmNlUXVhbnR1bSA9IGV4cG9ydHMuYm9sdHptYW5uID0gZXhwb3J0cy5ib2hyTWFnbmV0b24gPSBleHBvcnRzLmF0b21pY01hc3MgPSBleHBvcnRzLm11bHRpbm9taWFsID0gZXhwb3J0cy5zdGQgPSBleHBvcnRzLnZhcmlhbmNlID0gZXhwb3J0cy5tZWFuID0gZXhwb3J0cy5kaXZpZGUgPSBleHBvcnRzLmV4cG0gPSBleHBvcnRzLmludiA9IGV4cG9ydHMucXIgPSBleHBvcnRzLnNldFN5bURpZmZlcmVuY2UgPSBleHBvcnRzLmNyZWF0ZVVuaXQgPSBleHBvcnRzLlVuaXQgPSBleHBvcnRzLmRvdERpdmlkZSA9IGV4cG9ydHMucm93ID0gdm9pZCAwO1xuXG52YXIgX2NvbmZpZ1JlYWRvbmx5ID0gcmVxdWlyZShcIi4vY29uZmlnUmVhZG9ubHlcIik7XG5cbnZhciBfZmFjdG9yaWVzQW55ID0gcmVxdWlyZShcIi4uL2ZhY3Rvcmllc0FueVwiKTtcblxuLyoqXG4gKiBUSElTIEZJTEUgSVMgQVVUTy1HRU5FUkFURURcbiAqIERPTidUIE1BS0UgQ0hBTkdFUyBIRVJFXG4gKi9cbnZhciBSZXN1bHRTZXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSZXN1bHRTZXQpKHt9KTtcbmV4cG9ydHMuUmVzdWx0U2V0ID0gUmVzdWx0U2V0O1xudmFyIENvbXBsZXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21wbGV4Q2xhc3MpKHt9KTtcbmV4cG9ydHMuQ29tcGxleCA9IENvbXBsZXg7XG52YXIgUmFuZ2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5nZUNsYXNzKSh7fSk7XG5leHBvcnRzLlJhbmdlID0gUmFuZ2U7XG52YXIgZXllID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRXllKSh7fSk7XG5leHBvcnRzLmV5ZSA9IGV5ZTtcblxudmFyIF9mYWxzZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZhbHNlKSh7fSk7XG5cbmV4cG9ydHMuX2ZhbHNlID0gX2ZhbHNlO1xuXG52YXIgX251bGwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVOdWxsKSh7fSk7XG5cbmV4cG9ydHMuX251bGwgPSBfbnVsbDtcblxudmFyIF90cnVlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVHJ1ZSkoe30pO1xuXG5leHBvcnRzLl90cnVlID0gX3RydWU7XG52YXIgQmlnTnVtYmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQmlnTnVtYmVyQ2xhc3MpKHtcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuQmlnTnVtYmVyID0gQmlnTnVtYmVyO1xudmFyIE1hdHJpeCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1hdHJpeENsYXNzKSh7fSk7XG5leHBvcnRzLk1hdHJpeCA9IE1hdHJpeDtcbnZhciByZXBsYWNlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJlcGxhY2VyKSh7fSk7XG5leHBvcnRzLnJlcGxhY2VyID0gcmVwbGFjZXI7XG52YXIgaSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUkpKHtcbiAgQ29tcGxleDogQ29tcGxleFxufSk7XG5leHBvcnRzLmkgPSBpO1xudmFyIExOMTAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVMTjEwKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5MTjEwID0gTE4xMDtcbnZhciBMT0cxMEUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVMT0cxMEUpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLkxPRzEwRSA9IExPRzEwRTtcblxudmFyIF9OYU4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVOYU4pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5cbmV4cG9ydHMuX05hTiA9IF9OYU47XG52YXIgcGkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQaSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMucGkgPSBwaTtcbnZhciBTUVJUMV8yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU1FSVDFfMikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuU1FSVDFfMiA9IFNRUlQxXzI7XG52YXIgdGF1ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVGF1KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy50YXUgPSB0YXU7XG52YXIgZWZpbW92RmFjdG9yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRWZpbW92RmFjdG9yKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5lZmltb3ZGYWN0b3IgPSBlZmltb3ZGYWN0b3I7XG52YXIgZmluZVN0cnVjdHVyZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZpbmVTdHJ1Y3R1cmUpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmZpbmVTdHJ1Y3R1cmUgPSBmaW5lU3RydWN0dXJlO1xudmFyIHNhY2t1clRldHJvZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTYWNrdXJUZXRyb2RlKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5zYWNrdXJUZXRyb2RlID0gc2Fja3VyVGV0cm9kZTtcbnZhciB3ZWFrTWl4aW5nQW5nbGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVXZWFrTWl4aW5nQW5nbGUpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLndlYWtNaXhpbmdBbmdsZSA9IHdlYWtNaXhpbmdBbmdsZTtcbnZhciBGcmFjdGlvbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZyYWN0aW9uQ2xhc3MpKHt9KTtcbmV4cG9ydHMuRnJhY3Rpb24gPSBGcmFjdGlvbjtcbnZhciBlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuZSA9IGU7XG5cbnZhciBfSW5maW5pdHkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmZpbml0eSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcblxuZXhwb3J0cy5fSW5maW5pdHkgPSBfSW5maW5pdHk7XG52YXIgTE9HMkUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVMT0cyRSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuTE9HMkUgPSBMT0cyRTtcbnZhciB2ZXJzaW9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVmVyc2lvbikoe30pO1xuZXhwb3J0cy52ZXJzaW9uID0gdmVyc2lvbjtcbnZhciBEZW5zZU1hdHJpeCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZURlbnNlTWF0cml4Q2xhc3MpKHtcbiAgTWF0cml4OiBNYXRyaXhcbn0pO1xuZXhwb3J0cy5EZW5zZU1hdHJpeCA9IERlbnNlTWF0cml4O1xudmFyIHBoaSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBoaSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMucGhpID0gcGhpO1xudmFyIHR5cGVkID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVHlwZWQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgRnJhY3Rpb246IEZyYWN0aW9uXG59KTtcbmV4cG9ydHMudHlwZWQgPSB0eXBlZDtcbnZhciBpc0ludGVnZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJc0ludGVnZXIpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuaXNJbnRlZ2VyID0gaXNJbnRlZ2VyO1xudmFyIGlzTnVtZXJpYyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzTnVtZXJpYykoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5pc051bWVyaWMgPSBpc051bWVyaWM7XG52YXIgaXNQb3NpdGl2ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzUG9zaXRpdmUpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuaXNQb3NpdGl2ZSA9IGlzUG9zaXRpdmU7XG52YXIgaXNOYU4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJc05hTikoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5pc05hTiA9IGlzTmFOO1xudmFyIGVxdWFsU2NhbGFyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRXF1YWxTY2FsYXIpKHtcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5lcXVhbFNjYWxhciA9IGVxdWFsU2NhbGFyO1xudmFyIG51bWJlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU51bWJlcikoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5udW1iZXIgPSBudW1iZXI7XG5cbnZhciBfYm9vbGVhbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUJvb2xlYW4pKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcblxuZXhwb3J0c1tcImJvb2xlYW5cIl0gPSBfYm9vbGVhbjtcbnZhciBjb21wbGV4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGxleCkoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jb21wbGV4ID0gY29tcGxleDtcbnZhciBzcGxpdFVuaXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTcGxpdFVuaXQpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc3BsaXRVbml0ID0gc3BsaXRVbml0O1xudmFyIHVuYXJ5UGx1cyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVVuYXJ5UGx1cykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy51bmFyeVBsdXMgPSB1bmFyeVBsdXM7XG52YXIgYXBwbHkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBcHBseSkoe1xuICBpc0ludGVnZXI6IGlzSW50ZWdlcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYXBwbHkgPSBhcHBseTtcbnZhciBjdWJlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ3ViZSkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jdWJlID0gY3ViZTtcbnZhciBleHBtMSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUV4cG0xKSh7XG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmV4cG0xID0gZXhwbTE7XG52YXIgbG9nMTAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVMb2cxMCkoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmxvZzEwID0gbG9nMTA7XG52YXIgbXVsdGlwbHlTY2FsYXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNdWx0aXBseVNjYWxhcikoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5tdWx0aXBseVNjYWxhciA9IG11bHRpcGx5U2NhbGFyO1xudmFyIHNpZ24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTaWduKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBGcmFjdGlvbjogRnJhY3Rpb24sXG4gIGNvbXBsZXg6IGNvbXBsZXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNpZ24gPSBzaWduO1xudmFyIHNxdWFyZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNxdWFyZSkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zcXVhcmUgPSBzcXVhcmU7XG52YXIgYml0Tm90ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQml0Tm90KSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmJpdE5vdCA9IGJpdE5vdDtcbnZhciBhcmcgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBcmcpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYXJnID0gYXJnO1xudmFyIGltID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSW0pKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuaW0gPSBpbTtcbnZhciBub3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVOb3QpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubm90ID0gbm90O1xudmFyIGZpbHRlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZpbHRlcikoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5maWx0ZXIgPSBmaWx0ZXI7XG52YXIgZm9yRWFjaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZvckVhY2gpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZm9yRWFjaCA9IGZvckVhY2g7XG52YXIgbWFwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWFwKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm1hcCA9IG1hcDtcbnZhciBlcmYgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFcmYpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZXJmID0gZXJmO1xudmFyIGZvcm1hdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZvcm1hdCkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5mb3JtYXQgPSBmb3JtYXQ7XG52YXIgaXNQcmltZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUlzUHJpbWUpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuaXNQcmltZSA9IGlzUHJpbWU7XG52YXIgYWNvcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFjb3MpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hY29zID0gYWNvcztcbnZhciBhY290ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNvdCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYWNvdCA9IGFjb3Q7XG52YXIgYWNzYyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFjc2MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYWNzYyA9IGFjc2M7XG52YXIgYXNlYyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFzZWMpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYXNlYyA9IGFzZWM7XG52YXIgYXNpbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFzaW4pKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hc2luID0gYXNpbjtcbnZhciBhdGFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQXRhbikoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hdGFuID0gYXRhbjtcbnZhciBhdGFuaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUF0YW5oKSh7XG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYXRhbmggPSBhdGFuaDtcbnZhciBjb3NoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29zaCkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jb3NoID0gY29zaDtcbnZhciBjb3RoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ290aCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY290aCA9IGNvdGg7XG52YXIgY3NjaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNzY2gpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNzY2ggPSBjc2NoO1xudmFyIHNlY2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZWNoKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zZWNoID0gc2VjaDtcbnZhciBzaW5oID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU2luaCkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zaW5oID0gc2luaDtcbnZhciB0YW5oID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVGFuaCkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy50YW5oID0gdGFuaDtcbnZhciBjb21iaW5hdGlvbnMgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb21iaW5hdGlvbnMpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY29tYmluYXRpb25zID0gY29tYmluYXRpb25zO1xudmFyIHBpY2tSYW5kb20gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQaWNrUmFuZG9tKSh7XG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMucGlja1JhbmRvbSA9IHBpY2tSYW5kb207XG52YXIgcmFuZG9tSW50ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUmFuZG9tSW50KSh7XG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMucmFuZG9tSW50ID0gcmFuZG9tSW50O1xudmFyIExOMiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxOMikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuTE4yID0gTE4yO1xudmFyIGNsb25lID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2xvbmUpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY2xvbmUgPSBjbG9uZTtcbnZhciBoYXNOdW1lcmljVmFsdWUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVIYXNOdW1lcmljVmFsdWUpKHtcbiAgaXNOdW1lcmljOiBpc051bWVyaWMsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmhhc051bWVyaWNWYWx1ZSA9IGhhc051bWVyaWNWYWx1ZTtcbnZhciB0eXBlT2YgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUeXBlT2YpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMudHlwZU9mID0gdHlwZU9mO1xudmFyIHN0cmluZyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVN0cmluZykoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zdHJpbmcgPSBzdHJpbmc7XG52YXIgZnJhY3Rpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGcmFjdGlvbikoe1xuICBGcmFjdGlvbjogRnJhY3Rpb24sXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmZyYWN0aW9uID0gZnJhY3Rpb247XG52YXIgdW5hcnlNaW51cyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVVuYXJ5TWludXMpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMudW5hcnlNaW51cyA9IHVuYXJ5TWludXM7XG52YXIgYWRkU2NhbGFyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWRkU2NhbGFyKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmFkZFNjYWxhciA9IGFkZFNjYWxhcjtcbnZhciBleHAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFeHApKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZXhwID0gZXhwO1xudmFyIGxvZzIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVMb2cyKSh7XG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubG9nMiA9IGxvZzI7XG52YXIgc3FydCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNxcnQpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zcXJ0ID0gc3FydDtcbnZhciBjb25qID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29uaikoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jb25qID0gY29uajtcbnZhciBnZXRNYXRyaXhEYXRhVHlwZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUdldE1hdHJpeERhdGFUeXBlKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmdldE1hdHJpeERhdGFUeXBlID0gZ2V0TWF0cml4RGF0YVR5cGU7XG52YXIgbW9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vZGUpKHtcbiAgaXNOYU46IGlzTmFOLFxuICBpc051bWVyaWM6IGlzTnVtZXJpYyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubW9kZSA9IG1vZGU7XG52YXIgcHJpbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQcmludCkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5wcmludCA9IHByaW50O1xudmFyIGFjb3NoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNvc2gpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hY29zaCA9IGFjb3NoO1xudmFyIGFjc2NoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQWNzY2gpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmFjc2NoID0gYWNzY2g7XG52YXIgYXNpbmggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBc2luaCkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hc2luaCA9IGFzaW5oO1xudmFyIGNvcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvcykoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jb3MgPSBjb3M7XG52YXIgY3NjID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ3NjKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jc2MgPSBjc2M7XG52YXIgc2luID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU2luKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNpbiA9IHNpbjtcbnZhciBjb21iaW5hdGlvbnNXaXRoUmVwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tYmluYXRpb25zV2l0aFJlcCkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jb21iaW5hdGlvbnNXaXRoUmVwID0gY29tYmluYXRpb25zV2l0aFJlcDtcbnZhciByYW5kb20gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSYW5kb20pKHtcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5yYW5kb20gPSByYW5kb207XG52YXIgU1FSVDIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTUVJUMikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuU1FSVDIgPSBTUVJUMjtcbnZhciBpc05lZ2F0aXZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNOZWdhdGl2ZSkoe1xuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5pc05lZ2F0aXZlID0gaXNOZWdhdGl2ZTtcbnZhciBTcGFyc2VNYXRyaXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTcGFyc2VNYXRyaXhDbGFzcykoe1xuICBNYXRyaXg6IE1hdHJpeCxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5TcGFyc2VNYXRyaXggPSBTcGFyc2VNYXRyaXg7XG52YXIgbWF0cml4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWF0cml4KSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgTWF0cml4OiBNYXRyaXgsXG4gIFNwYXJzZU1hdHJpeDogU3BhcnNlTWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5tYXRyaXggPSBtYXRyaXg7XG52YXIgY2JydCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNicnQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIEZyYWN0aW9uOiBGcmFjdGlvbixcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBpc05lZ2F0aXZlOiBpc05lZ2F0aXZlLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB1bmFyeU1pbnVzOiB1bmFyeU1pbnVzXG59KTtcbmV4cG9ydHMuY2JydCA9IGNicnQ7XG52YXIgZ2NkID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlR2NkKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmdjZCA9IGdjZDtcbnZhciBtb2QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNb2QpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5tb2QgPSBtb2Q7XG52YXIgbnRoUm9vdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU50aFJvb3QpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm50aFJvb3QgPSBudGhSb290O1xudmFyIHhnY2QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVYZ2NkKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy54Z2NkID0geGdjZDtcbnZhciBiaXRBbmQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVCaXRBbmQpKHtcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYml0QW5kID0gYml0QW5kO1xudmFyIGJpdFhvciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpdFhvcikoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5iaXRYb3IgPSBiaXRYb3I7XG52YXIgb3IgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVPcikoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm9yID0gb3I7XG52YXIgY29uY2F0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29uY2F0KSh7XG4gIGlzSW50ZWdlcjogaXNJbnRlZ2VyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuY29uY2F0ID0gY29uY2F0O1xudmFyIGRpYWcgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEaWFnKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgU3BhcnNlTWF0cml4OiBTcGFyc2VNYXRyaXgsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5kaWFnID0gZGlhZztcbnZhciBpZGVudGl0eSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUlkZW50aXR5KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIFNwYXJzZU1hdHJpeDogU3BhcnNlTWF0cml4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5pZGVudGl0eSA9IGlkZW50aXR5O1xudmFyIG9uZXMgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVPbmVzKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5vbmVzID0gb25lcztcbnZhciByZXNoYXBlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUmVzaGFwZSkoe1xuICBpc0ludGVnZXI6IGlzSW50ZWdlcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnJlc2hhcGUgPSByZXNoYXBlO1xudmFyIHNpemUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTaXplKSh7XG4gIG1hdHJpeDogbWF0cml4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNpemUgPSBzaXplO1xudmFyIHN1YnNldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVN1YnNldCkoe1xuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc3Vic2V0ID0gc3Vic2V0O1xudmFyIHplcm9zID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlWmVyb3MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnplcm9zID0gemVyb3M7XG52YXIgdG8gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVUbykoe1xuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMudG8gPSB0bztcbnZhciByb3VuZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJvdW5kKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZCxcbiAgemVyb3M6IHplcm9zXG59KTtcbmV4cG9ydHMucm91bmQgPSByb3VuZDtcbnZhciBsZWZ0U2hpZnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVMZWZ0U2hpZnQpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWQsXG4gIHplcm9zOiB6ZXJvc1xufSk7XG5leHBvcnRzLmxlZnRTaGlmdCA9IGxlZnRTaGlmdDtcbnZhciByaWdodExvZ1NoaWZ0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUmlnaHRMb2dTaGlmdCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZCxcbiAgemVyb3M6IHplcm9zXG59KTtcbmV4cG9ydHMucmlnaHRMb2dTaGlmdCA9IHJpZ2h0TG9nU2hpZnQ7XG52YXIgY29tcGFyZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbXBhcmUpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgRnJhY3Rpb246IEZyYWN0aW9uLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvbXBhcmUgPSBjb21wYXJlO1xudmFyIGNvbXBhcmVUZXh0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcGFyZVRleHQpKHtcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvbXBhcmVUZXh0ID0gY29tcGFyZVRleHQ7XG52YXIgc21hbGxlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNtYWxsZXIpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zbWFsbGVyID0gc21hbGxlcjtcbnZhciBsYXJnZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVMYXJnZXIpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5sYXJnZXIgPSBsYXJnZXI7XG52YXIgdW5lcXVhbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVVuZXF1YWwpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnVuZXF1YWwgPSB1bmVxdWFsO1xudmFyIG1heCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1heCkoe1xuICBsYXJnZXI6IGxhcmdlcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubWF4ID0gbWF4O1xudmFyIEltbXV0YWJsZURlbnNlTWF0cml4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzcykoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIHNtYWxsZXI6IHNtYWxsZXJcbn0pO1xuZXhwb3J0cy5JbW11dGFibGVEZW5zZU1hdHJpeCA9IEltbXV0YWJsZURlbnNlTWF0cml4O1xudmFyIEZpYm9uYWNjaUhlYXAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVGaWJvbmFjY2lIZWFwQ2xhc3MpKHtcbiAgbGFyZ2VyOiBsYXJnZXIsXG4gIHNtYWxsZXI6IHNtYWxsZXJcbn0pO1xuZXhwb3J0cy5GaWJvbmFjY2lIZWFwID0gRmlib25hY2NpSGVhcDtcbnZhciBzcGFyc2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTcGFyc2UpKHtcbiAgU3BhcnNlTWF0cml4OiBTcGFyc2VNYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNwYXJzZSA9IHNwYXJzZTtcbnZhciBhY290aCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFjb3RoKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmFjb3RoID0gYWNvdGg7XG52YXIgYXRhbjIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBdGFuMikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5hdGFuMiA9IGF0YW4yO1xudmFyIHNlYyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNlYykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2VjID0gc2VjO1xudmFyIGFkZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFkZCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIFNwYXJzZU1hdHJpeDogU3BhcnNlTWF0cml4LFxuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYWRkID0gYWRkO1xudmFyIHRyYWNlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVHJhY2UpKHtcbiAgYWRkOiBhZGQsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy50cmFjZSA9IHRyYWNlO1xudmFyIGNvbXBvc2l0aW9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29tcG9zaXRpb24pKHtcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGNvbWJpbmF0aW9uczogY29tYmluYXRpb25zLFxuICBpc0ludGVnZXI6IGlzSW50ZWdlcixcbiAgaXNOZWdhdGl2ZTogaXNOZWdhdGl2ZSxcbiAgaXNQb3NpdGl2ZTogaXNQb3NpdGl2ZSxcbiAgbGFyZ2VyOiBsYXJnZXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvbXBvc2l0aW9uID0gY29tcG9zaXRpb247XG52YXIgaXNaZXJvID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSXNaZXJvKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmlzWmVybyA9IGlzWmVybztcbnZhciBhYnMgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBYnMpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYWJzID0gYWJzO1xudmFyIGZsb29yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRmxvb3IpKHtcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICByb3VuZDogcm91bmQsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmZsb29yID0gZmxvb3I7XG52YXIgbXVsdGlwbHkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNdWx0aXBseSkoe1xuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5tdWx0aXBseSA9IG11bHRpcGx5O1xudmFyIGRvdE11bHRpcGx5ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRG90TXVsdGlwbHkpKHtcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5kb3RNdWx0aXBseSA9IGRvdE11bHRpcGx5O1xudmFyIHJlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUmUpKHtcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMucmUgPSByZTtcbnZhciBmbGF0dGVuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRmxhdHRlbikoe1xuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZmxhdHRlbiA9IGZsYXR0ZW47XG52YXIgcmVzaXplID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUmVzaXplKSh7XG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbWF0cml4OiBtYXRyaXhcbn0pO1xuZXhwb3J0cy5yZXNpemUgPSByZXNpemU7XG52YXIgc3F1ZWV6ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNxdWVlemUpKHtcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNxdWVlemUgPSBzcXVlZXplO1xudmFyIHByb2QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQcm9kKSh7XG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMucHJvZCA9IHByb2Q7XG52YXIgcG93ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUG93KSh7XG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgZnJhY3Rpb246IGZyYWN0aW9uLFxuICBpZGVudGl0eTogaWRlbnRpdHksXG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseTogbXVsdGlwbHksXG4gIG51bWJlcjogbnVtYmVyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5wb3cgPSBwb3c7XG52YXIgZG90UG93ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRG90UG93KSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgcG93OiBwb3csXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmRvdFBvdyA9IGRvdFBvdztcbnZhciByaWdodEFyaXRoU2hpZnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSaWdodEFyaXRoU2hpZnQpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWQsXG4gIHplcm9zOiB6ZXJvc1xufSk7XG5leHBvcnRzLnJpZ2h0QXJpdGhTaGlmdCA9IHJpZ2h0QXJpdGhTaGlmdDtcbnZhciBjb21wYXJlTmF0dXJhbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNvbXBhcmVOYXR1cmFsKSh7XG4gIGNvbXBhcmU6IGNvbXBhcmUsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvbXBhcmVOYXR1cmFsID0gY29tcGFyZU5hdHVyYWw7XG52YXIgZXF1YWxUZXh0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRXF1YWxUZXh0KSh7XG4gIGNvbXBhcmVUZXh0OiBjb21wYXJlVGV4dCxcbiAgaXNaZXJvOiBpc1plcm8sXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmVxdWFsVGV4dCA9IGVxdWFsVGV4dDtcbnZhciBsYXJnZXJFcSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxhcmdlckVxKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubGFyZ2VyRXEgPSBsYXJnZXJFcTtcbnZhciBwYXJ0aXRpb25TZWxlY3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQYXJ0aXRpb25TZWxlY3QpKHtcbiAgY29tcGFyZTogY29tcGFyZSxcbiAgaXNOYU46IGlzTmFOLFxuICBpc051bWVyaWM6IGlzTnVtZXJpYyxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMucGFydGl0aW9uU2VsZWN0ID0gcGFydGl0aW9uU2VsZWN0O1xudmFyIG1pbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1pbikoe1xuICBzbWFsbGVyOiBzbWFsbGVyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5taW4gPSBtaW47XG52YXIgU3BhID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3BhQ2xhc3MpKHtcbiAgRmlib25hY2NpSGVhcDogRmlib25hY2NpSGVhcCxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxufSk7XG5leHBvcnRzLlNwYSA9IFNwYTtcbnZhciBhc2VjaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUFzZWNoKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmFzZWNoID0gYXNlY2g7XG52YXIgdGFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVGFuKSh7XG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnRhbiA9IHRhbjtcbnZhciBzZXRTaXplID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU2V0U2l6ZSkoe1xuICBjb21wYXJlTmF0dXJhbDogY29tcGFyZU5hdHVyYWwsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNldFNpemUgPSBzZXRTaXplO1xudmFyIG5vcm0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVOb3JtKSh7XG4gIGFiczogYWJzLFxuICBhZGQ6IGFkZCxcbiAgY29uajogY29uaixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBsYXJnZXI6IGxhcmdlcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgcG93OiBwb3csXG4gIHNtYWxsZXI6IHNtYWxsZXIsXG4gIHNxcnQ6IHNxcnQsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm5vcm0gPSBub3JtO1xudmFyIHF1YW50aWxlU2VxID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUXVhbnRpbGVTZXEpKHtcbiAgYWRkOiBhZGQsXG4gIGNvbXBhcmU6IGNvbXBhcmUsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgcGFydGl0aW9uU2VsZWN0OiBwYXJ0aXRpb25TZWxlY3QsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnF1YW50aWxlU2VxID0gcXVhbnRpbGVTZXE7XG52YXIgZ2FtbWEgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVHYW1tYSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHBvdzogcG93LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5nYW1tYSA9IGdhbW1hO1xudmFyIGJpZ251bWJlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUJpZ251bWJlcikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuYmlnbnVtYmVyID0gYmlnbnVtYmVyO1xudmFyIGxjbSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxjbSkoe1xuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5sY20gPSBsY207XG52YXIgYml0T3IgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVCaXRPcikoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmJpdE9yID0gYml0T3I7XG52YXIga3JvbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUtyb24pKHtcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5U2NhbGFyOiBtdWx0aXBseVNjYWxhcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMua3JvbiA9IGtyb247XG52YXIgdHJhbnNwb3NlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVHJhbnNwb3NlKSh7XG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy50cmFuc3Bvc2UgPSB0cmFuc3Bvc2U7XG52YXIgbnVtZXJpYyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU51bWVyaWMpKHtcbiAgYmlnbnVtYmVyOiBiaWdudW1iZXIsXG4gIGZyYWN0aW9uOiBmcmFjdGlvbixcbiAgbnVtYmVyOiBudW1iZXJcbn0pO1xuZXhwb3J0cy5udW1lcmljID0gbnVtZXJpYztcbnZhciBhbmQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBbmQpKHtcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgbm90OiBub3QsXG4gIHR5cGVkOiB0eXBlZCxcbiAgemVyb3M6IHplcm9zXG59KTtcbmV4cG9ydHMuYW5kID0gYW5kO1xudmFyIHNtYWxsZXJFcSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNtYWxsZXJFcSkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNtYWxsZXJFcSA9IHNtYWxsZXJFcTtcbnZhciBzb3J0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU29ydCkoe1xuICBjb21wYXJlOiBjb21wYXJlLFxuICBjb21wYXJlTmF0dXJhbDogY29tcGFyZU5hdHVyYWwsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zb3J0ID0gc29ydDtcbnZhciBjb3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb3QpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNvdCA9IGNvdDtcbnZhciBkb3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEb3QpKHtcbiAgYWRkOiBhZGQsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZG90ID0gZG90O1xudmFyIHN1bSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVN1bSkoe1xuICBiaWdudW1iZXI6IGJpZ251bWJlcixcbiAgZnJhY3Rpb246IGZyYWN0aW9uLFxuICBhZGQ6IGFkZCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zdW0gPSBzdW07XG52YXIgZmFjdG9yaWFsID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRmFjdG9yaWFsKSh7XG4gIGdhbW1hOiBnYW1tYSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZmFjdG9yaWFsID0gZmFjdG9yaWFsO1xudmFyIHBlcm11dGF0aW9ucyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBlcm11dGF0aW9ucykoe1xuICBmYWN0b3JpYWw6IGZhY3RvcmlhbCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMucGVybXV0YXRpb25zID0gcGVybXV0YXRpb25zO1xudmFyIGNlaWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDZWlsKSh7XG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZyxcbiAgcm91bmQ6IHJvdW5kLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jZWlsID0gY2VpbDtcbnZhciBzdWJ0cmFjdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVN1YnRyYWN0KSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIHR5cGVkOiB0eXBlZCxcbiAgdW5hcnlNaW51czogdW5hcnlNaW51c1xufSk7XG5leHBvcnRzLnN1YnRyYWN0ID0gc3VidHJhY3Q7XG52YXIgY3Jvc3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDcm9zcykoe1xuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNyb3NzID0gY3Jvc3M7XG52YXIgY3RyYW5zcG9zZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUN0cmFuc3Bvc2UpKHtcbiAgY29uajogY29uaixcbiAgdHJhbnNwb3NlOiB0cmFuc3Bvc2UsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmN0cmFuc3Bvc2UgPSBjdHJhbnNwb3NlO1xudmFyIGVxdWFsID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRXF1YWwpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5lcXVhbCA9IGVxdWFsO1xudmFyIEluZGV4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSW5kZXhDbGFzcykoe1xuICBJbW11dGFibGVEZW5zZU1hdHJpeDogSW1tdXRhYmxlRGVuc2VNYXRyaXhcbn0pO1xuZXhwb3J0cy5JbmRleCA9IEluZGV4O1xudmFyIHNldENhcnRlc2lhbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNldENhcnRlc2lhbikoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIEluZGV4OiBJbmRleCxcbiAgY29tcGFyZU5hdHVyYWw6IGNvbXBhcmVOYXR1cmFsLFxuICBzaXplOiBzaXplLFxuICBzdWJzZXQ6IHN1YnNldCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2V0Q2FydGVzaWFuID0gc2V0Q2FydGVzaWFuO1xudmFyIHNldERpc3RpbmN0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU2V0RGlzdGluY3QpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBJbmRleDogSW5kZXgsXG4gIGNvbXBhcmVOYXR1cmFsOiBjb21wYXJlTmF0dXJhbCxcbiAgc2l6ZTogc2l6ZSxcbiAgc3Vic2V0OiBzdWJzZXQsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNldERpc3RpbmN0ID0gc2V0RGlzdGluY3Q7XG52YXIgc2V0SXNTdWJzZXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRJc1N1YnNldCkoe1xuICBJbmRleDogSW5kZXgsXG4gIGNvbXBhcmVOYXR1cmFsOiBjb21wYXJlTmF0dXJhbCxcbiAgc2l6ZTogc2l6ZSxcbiAgc3Vic2V0OiBzdWJzZXQsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNldElzU3Vic2V0ID0gc2V0SXNTdWJzZXQ7XG52YXIgc2V0UG93ZXJzZXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRQb3dlcnNldCkoe1xuICBJbmRleDogSW5kZXgsXG4gIGNvbXBhcmVOYXR1cmFsOiBjb21wYXJlTmF0dXJhbCxcbiAgc2l6ZTogc2l6ZSxcbiAgc3Vic2V0OiBzdWJzZXQsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNldFBvd2Vyc2V0ID0gc2V0UG93ZXJzZXQ7XG52YXIgaW5kZXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbmRleCkoe1xuICBJbmRleDogSW5kZXgsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmluZGV4ID0gaW5kZXg7XG52YXIgZml4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRml4KSh7XG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIGNlaWw6IGNlaWwsXG4gIGZsb29yOiBmbG9vcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZml4ID0gZml4O1xudmFyIHJhbmdlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUmFuZ2UpKHtcbiAgYmlnbnVtYmVyOiBiaWdudW1iZXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGxhcmdlcjogbGFyZ2VyLFxuICBsYXJnZXJFcTogbGFyZ2VyRXEsXG4gIHNtYWxsZXI6IHNtYWxsZXIsXG4gIHNtYWxsZXJFcTogc21hbGxlckVxLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5yYW5nZSA9IHJhbmdlO1xudmFyIGRpdmlkZVNjYWxhciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZURpdmlkZVNjYWxhcikoe1xuICBudW1lcmljOiBudW1lcmljLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5kaXZpZGVTY2FsYXIgPSBkaXZpZGVTY2FsYXI7XG52YXIgbnRoUm9vdHMgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVOdGhSb290cykoe1xuICBDb21wbGV4OiBDb21wbGV4LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5udGhSb290cyA9IG50aFJvb3RzO1xudmFyIGxzb2x2ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxzb2x2ZSkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubHNvbHZlID0gbHNvbHZlO1xudmFyIGRlZXBFcXVhbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZURlZXBFcXVhbCkoe1xuICBlcXVhbDogZXF1YWwsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmRlZXBFcXVhbCA9IGRlZXBFcXVhbDtcbnZhciBzZXREaWZmZXJlbmNlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU2V0RGlmZmVyZW5jZSkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIEluZGV4OiBJbmRleCxcbiAgY29tcGFyZU5hdHVyYWw6IGNvbXBhcmVOYXR1cmFsLFxuICBzaXplOiBzaXplLFxuICBzdWJzZXQ6IHN1YnNldCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2V0RGlmZmVyZW5jZSA9IHNldERpZmZlcmVuY2U7XG52YXIgc2V0TXVsdGlwbGljaXR5ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU2V0TXVsdGlwbGljaXR5KSh7XG4gIEluZGV4OiBJbmRleCxcbiAgY29tcGFyZU5hdHVyYWw6IGNvbXBhcmVOYXR1cmFsLFxuICBzaXplOiBzaXplLFxuICBzdWJzZXQ6IHN1YnNldCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc2V0TXVsdGlwbGljaXR5ID0gc2V0TXVsdGlwbGljaXR5O1xudmFyIGh5cG90ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSHlwb3QpKHtcbiAgYWJzOiBhYnMsXG4gIGFkZFNjYWxhcjogYWRkU2NhbGFyLFxuICBkaXZpZGVTY2FsYXI6IGRpdmlkZVNjYWxhcixcbiAgaXNQb3NpdGl2ZTogaXNQb3NpdGl2ZSxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICBzbWFsbGVyOiBzbWFsbGVyLFxuICBzcXJ0OiBzcXJ0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5oeXBvdCA9IGh5cG90O1xudmFyIGx1cCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUx1cCkoe1xuICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXgsXG4gIFNwYTogU3BhLFxuICBTcGFyc2VNYXRyaXg6IFNwYXJzZU1hdHJpeCxcbiAgYWJzOiBhYnMsXG4gIGFkZFNjYWxhcjogYWRkU2NhbGFyLFxuICBkaXZpZGVTY2FsYXI6IGRpdmlkZVNjYWxhcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBsYXJnZXI6IGxhcmdlcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5U2NhbGFyOiBtdWx0aXBseVNjYWxhcixcbiAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICB0eXBlZDogdHlwZWQsXG4gIHVuYXJ5TWludXM6IHVuYXJ5TWludXNcbn0pO1xuZXhwb3J0cy5sdXAgPSBsdXA7XG52YXIgc2x1ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU2x1KSh7XG4gIFNwYXJzZU1hdHJpeDogU3BhcnNlTWF0cml4LFxuICBhYnM6IGFicyxcbiAgYWRkOiBhZGQsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBsYXJnZXI6IGxhcmdlcixcbiAgbGFyZ2VyRXE6IGxhcmdlckVxLFxuICBtdWx0aXBseTogbXVsdGlwbHksXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHJhbnNwb3NlOiB0cmFuc3Bvc2UsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNsdSA9IHNsdTtcbnZhciBkZXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEZXQpKHtcbiAgbHVwOiBsdXAsXG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseTogbXVsdGlwbHksXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHlwZWQ6IHR5cGVkLFxuICB1bmFyeU1pbnVzOiB1bmFyeU1pbnVzXG59KTtcbmV4cG9ydHMuZGV0ID0gZGV0O1xudmFyIGRpc3RhbmNlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRGlzdGFuY2UpKHtcbiAgYWJzOiBhYnMsXG4gIGFkZFNjYWxhcjogYWRkU2NhbGFyLFxuICBkaXZpZGVTY2FsYXI6IGRpdmlkZVNjYWxhcixcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICBzcXJ0OiBzcXJ0LFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZCxcbiAgdW5hcnlNaW51czogdW5hcnlNaW51c1xufSk7XG5leHBvcnRzLmRpc3RhbmNlID0gZGlzdGFuY2U7XG52YXIgc3RpcmxpbmdTMiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVN0aXJsaW5nUzIpKHtcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGNvbWJpbmF0aW9uczogY29tYmluYXRpb25zLFxuICBkaXZpZGVTY2FsYXI6IGRpdmlkZVNjYWxhcixcbiAgZmFjdG9yaWFsOiBmYWN0b3JpYWwsXG4gIGlzSW50ZWdlcjogaXNJbnRlZ2VyLFxuICBpc05lZ2F0aXZlOiBpc05lZ2F0aXZlLFxuICBsYXJnZXI6IGxhcmdlcixcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICBwb3c6IHBvdyxcbiAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zdGlybGluZ1MyID0gc3RpcmxpbmdTMjtcbnZhciBjYXRhbGFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ2F0YWxhbikoe1xuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgY29tYmluYXRpb25zOiBjb21iaW5hdGlvbnMsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBpc0ludGVnZXI6IGlzSW50ZWdlcixcbiAgaXNOZWdhdGl2ZTogaXNOZWdhdGl2ZSxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jYXRhbGFuID0gY2F0YWxhbjtcbnZhciB4b3IgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVYb3IpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMueG9yID0geG9yO1xudmFyIHJvdyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJvdykoe1xuICBJbmRleDogSW5kZXgsXG4gIG1hdHJpeDogbWF0cml4LFxuICByYW5nZTogcmFuZ2UsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnJvdyA9IHJvdztcbnZhciBkb3REaXZpZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEb3REaXZpZGUpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBkaXZpZGVTY2FsYXI6IGRpdmlkZVNjYWxhcixcbiAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuZG90RGl2aWRlID0gZG90RGl2aWRlO1xudmFyIFVuaXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVVbml0Q2xhc3MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIENvbXBsZXg6IENvbXBsZXgsXG4gIEZyYWN0aW9uOiBGcmFjdGlvbixcbiAgYWJzOiBhYnMsXG4gIGFkZFNjYWxhcjogYWRkU2NhbGFyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBlcXVhbDogZXF1YWwsXG4gIGZpeDogZml4LFxuICBmb3JtYXQ6IGZvcm1hdCxcbiAgaXNOdW1lcmljOiBpc051bWVyaWMsXG4gIG11bHRpcGx5U2NhbGFyOiBtdWx0aXBseVNjYWxhcixcbiAgbnVtYmVyOiBudW1iZXIsXG4gIHBvdzogcG93LFxuICByb3VuZDogcm91bmQsXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdFxufSk7XG5leHBvcnRzLlVuaXQgPSBVbml0O1xudmFyIGNyZWF0ZVVuaXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDcmVhdGVVbml0KSh7XG4gIFVuaXQ6IFVuaXQsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmNyZWF0ZVVuaXQgPSBjcmVhdGVVbml0O1xudmFyIHNldFN5bURpZmZlcmVuY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRTeW1EaWZmZXJlbmNlKSh7XG4gIEluZGV4OiBJbmRleCxcbiAgY29uY2F0OiBjb25jYXQsXG4gIHNldERpZmZlcmVuY2U6IHNldERpZmZlcmVuY2UsXG4gIHNpemU6IHNpemUsXG4gIHN1YnNldDogc3Vic2V0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zZXRTeW1EaWZmZXJlbmNlID0gc2V0U3ltRGlmZmVyZW5jZTtcbnZhciBxciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVFyKSh7XG4gIGFkZFNjYWxhcjogYWRkU2NhbGFyLFxuICBjb21wbGV4OiBjb21wbGV4LFxuICBjb25qOiBjb25qLFxuICBkaXZpZGVTY2FsYXI6IGRpdmlkZVNjYWxhcixcbiAgZXF1YWw6IGVxdWFsLFxuICBpZGVudGl0eTogaWRlbnRpdHksXG4gIGlzWmVybzogaXNaZXJvLFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHlTY2FsYXI6IG11bHRpcGx5U2NhbGFyLFxuICBzaWduOiBzaWduLFxuICBzcXJ0OiBzcXJ0LFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZCxcbiAgdW5hcnlNaW51czogdW5hcnlNaW51cyxcbiAgemVyb3M6IHplcm9zXG59KTtcbmV4cG9ydHMucXIgPSBxcjtcbnZhciBpbnYgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVJbnYpKHtcbiAgYWJzOiBhYnMsXG4gIGFkZFNjYWxhcjogYWRkU2NhbGFyLFxuICBkZXQ6IGRldCxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIGlkZW50aXR5OiBpZGVudGl0eSxcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgdHlwZWQ6IHR5cGVkLFxuICB1bmFyeU1pbnVzOiB1bmFyeU1pbnVzXG59KTtcbmV4cG9ydHMuaW52ID0gaW52O1xudmFyIGV4cG0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFeHBtKSh7XG4gIGFiczogYWJzLFxuICBhZGQ6IGFkZCxcbiAgaWRlbnRpdHk6IGlkZW50aXR5LFxuICBpbnY6IGludixcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5leHBtID0gZXhwbTtcbnZhciBkaXZpZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVEaXZpZGUpKHtcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgaW52OiBpbnYsXG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseTogbXVsdGlwbHksXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmRpdmlkZSA9IGRpdmlkZTtcbnZhciBtZWFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWVhbikoe1xuICBhZGQ6IGFkZCxcbiAgZGl2aWRlOiBkaXZpZGUsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm1lYW4gPSBtZWFuO1xudmFyIHZhcmlhbmNlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVmFyaWFuY2UpKHtcbiAgYWRkOiBhZGQsXG4gIGFwcGx5OiBhcHBseSxcbiAgZGl2aWRlOiBkaXZpZGUsXG4gIGlzTmFOOiBpc05hTixcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnZhcmlhbmNlID0gdmFyaWFuY2U7XG52YXIgc3RkID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU3RkKSh7XG4gIHNxcnQ6IHNxcnQsXG4gIHR5cGVkOiB0eXBlZCxcbiAgdmFyaWFuY2U6IHZhcmlhbmNlXG59KTtcbmV4cG9ydHMuc3RkID0gc3RkO1xudmFyIG11bHRpbm9taWFsID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTXVsdGlub21pYWwpKHtcbiAgYWRkOiBhZGQsXG4gIGRpdmlkZTogZGl2aWRlLFxuICBmYWN0b3JpYWw6IGZhY3RvcmlhbCxcbiAgaXNJbnRlZ2VyOiBpc0ludGVnZXIsXG4gIGlzUG9zaXRpdmU6IGlzUG9zaXRpdmUsXG4gIG11bHRpcGx5OiBtdWx0aXBseSxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubXVsdGlub21pYWwgPSBtdWx0aW5vbWlhbDtcbnZhciBhdG9taWNNYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQXRvbWljTWFzcykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuYXRvbWljTWFzcyA9IGF0b21pY01hc3M7XG52YXIgYm9ock1hZ25ldG9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQm9ock1hZ25ldG9uKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5ib2hyTWFnbmV0b24gPSBib2hyTWFnbmV0b247XG52YXIgYm9sdHptYW5uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQm9sdHptYW5uKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5ib2x0em1hbm4gPSBib2x0em1hbm47XG52YXIgY29uZHVjdGFuY2VRdWFudHVtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlQ29uZHVjdGFuY2VRdWFudHVtKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5jb25kdWN0YW5jZVF1YW50dW0gPSBjb25kdWN0YW5jZVF1YW50dW07XG52YXIgZGV1dGVyb25NYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRGV1dGVyb25NYXNzKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5kZXV0ZXJvbk1hc3MgPSBkZXV0ZXJvbk1hc3M7XG52YXIgZWxlY3Ryb25NYXNzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRWxlY3Ryb25NYXNzKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5lbGVjdHJvbk1hc3MgPSBlbGVjdHJvbk1hc3M7XG52YXIgZmFyYWRheSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUZhcmFkYXkpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmZhcmFkYXkgPSBmYXJhZGF5O1xudmFyIGZpcnN0UmFkaWF0aW9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRmlyc3RSYWRpYXRpb24pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmZpcnN0UmFkaWF0aW9uID0gZmlyc3RSYWRpYXRpb247XG52YXIgZ3Jhdml0YXRpb25Db25zdGFudCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUdyYXZpdGF0aW9uQ29uc3RhbnQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmdyYXZpdGF0aW9uQ29uc3RhbnQgPSBncmF2aXRhdGlvbkNvbnN0YW50O1xudmFyIGhhcnRyZWVFbmVyZ3kgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVIYXJ0cmVlRW5lcmd5KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5oYXJ0cmVlRW5lcmd5ID0gaGFydHJlZUVuZXJneTtcbnZhciBrbGl0emluZyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUtsaXR6aW5nKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5rbGl0emluZyA9IGtsaXR6aW5nO1xudmFyIG1hZ25ldGljQ29uc3RhbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNYWduZXRpY0NvbnN0YW50KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5tYWduZXRpY0NvbnN0YW50ID0gbWFnbmV0aWNDb25zdGFudDtcbnZhciBtb2xhck1hc3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNb2xhck1hc3MpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLm1vbGFyTWFzcyA9IG1vbGFyTWFzcztcbnZhciBtb2xhclBsYW5ja0NvbnN0YW50ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMubW9sYXJQbGFuY2tDb25zdGFudCA9IG1vbGFyUGxhbmNrQ29uc3RhbnQ7XG52YXIgbmV1dHJvbk1hc3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVOZXV0cm9uTWFzcykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMubmV1dHJvbk1hc3MgPSBuZXV0cm9uTWFzcztcbnZhciBwbGFuY2tDaGFyZ2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQbGFuY2tDaGFyZ2UpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnBsYW5ja0NoYXJnZSA9IHBsYW5ja0NoYXJnZTtcbnZhciBwbGFuY2tMZW5ndGggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQbGFuY2tMZW5ndGgpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnBsYW5ja0xlbmd0aCA9IHBsYW5ja0xlbmd0aDtcbnZhciBwbGFuY2tUZW1wZXJhdHVyZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVBsYW5ja1RlbXBlcmF0dXJlKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5wbGFuY2tUZW1wZXJhdHVyZSA9IHBsYW5ja1RlbXBlcmF0dXJlO1xudmFyIHByb3Rvbk1hc3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQcm90b25NYXNzKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5wcm90b25NYXNzID0gcHJvdG9uTWFzcztcbnZhciByZWR1Y2VkUGxhbmNrQ29uc3RhbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVSZWR1Y2VkUGxhbmNrQ29uc3RhbnQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnJlZHVjZWRQbGFuY2tDb25zdGFudCA9IHJlZHVjZWRQbGFuY2tDb25zdGFudDtcbnZhciBzZWNvbmRSYWRpYXRpb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZWNvbmRSYWRpYXRpb24pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnNlY29uZFJhZGlhdGlvbiA9IHNlY29uZFJhZGlhdGlvbjtcbnZhciBzdGVmYW5Cb2x0em1hbm4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTdGVmYW5Cb2x0em1hbm4pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnN0ZWZhbkJvbHR6bWFubiA9IHN0ZWZhbkJvbHR6bWFubjtcbnZhciB2YWN1dW1JbXBlZGFuY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVWYWN1dW1JbXBlZGFuY2UpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnZhY3V1bUltcGVkYW5jZSA9IHZhY3V1bUltcGVkYW5jZTtcbnZhciBjb2x1bW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb2x1bW4pKHtcbiAgSW5kZXg6IEluZGV4LFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgcmFuZ2U6IHJhbmdlLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5jb2x1bW4gPSBjb2x1bW47XG52YXIgdXNvbHZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlVXNvbHZlKSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgZGl2aWRlU2NhbGFyOiBkaXZpZGVTY2FsYXIsXG4gIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhcixcbiAgbWF0cml4OiBtYXRyaXgsXG4gIG11bHRpcGx5U2NhbGFyOiBtdWx0aXBseVNjYWxhcixcbiAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy51c29sdmUgPSB1c29sdmU7XG52YXIgc2V0SW50ZXJzZWN0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlU2V0SW50ZXJzZWN0KSh7XG4gIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeCxcbiAgSW5kZXg6IEluZGV4LFxuICBjb21wYXJlTmF0dXJhbDogY29tcGFyZU5hdHVyYWwsXG4gIHNpemU6IHNpemUsXG4gIHN1YnNldDogc3Vic2V0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5zZXRJbnRlcnNlY3QgPSBzZXRJbnRlcnNlY3Q7XG52YXIgbHVzb2x2ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUx1c29sdmUpKHtcbiAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4LFxuICBsc29sdmU6IGxzb2x2ZSxcbiAgbHVwOiBsdXAsXG4gIG1hdHJpeDogbWF0cml4LFxuICBzbHU6IHNsdSxcbiAgdHlwZWQ6IHR5cGVkLFxuICB1c29sdmU6IHVzb2x2ZVxufSk7XG5leHBvcnRzLmx1c29sdmUgPSBsdXNvbHZlO1xudmFyIGVpZ3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFaWdzKSh7XG4gIGFiczogYWJzLFxuICBhZGQ6IGFkZCxcbiAgYWRkU2NhbGFyOiBhZGRTY2FsYXIsXG4gIGF0YW46IGF0YW4sXG4gIGJpZ251bWJlcjogYmlnbnVtYmVyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGNvczogY29zLFxuICBlcXVhbDogZXF1YWwsXG4gIGludjogaW52LFxuICBtYXRyaXg6IG1hdHJpeCxcbiAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICBtdWx0aXBseVNjYWxhcjogbXVsdGlwbHlTY2FsYXIsXG4gIHNpbjogc2luLFxuICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmVpZ3MgPSBlaWdzO1xudmFyIGludGVyc2VjdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUludGVyc2VjdCkoe1xuICBhYnM6IGFicyxcbiAgYWRkOiBhZGQsXG4gIGFkZFNjYWxhcjogYWRkU2NhbGFyLFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWcsXG4gIGRpdmlkZVNjYWxhcjogZGl2aWRlU2NhbGFyLFxuICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXIsXG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseTogbXVsdGlwbHksXG4gIG11bHRpcGx5U2NhbGFyOiBtdWx0aXBseVNjYWxhcixcbiAgc21hbGxlcjogc21hbGxlcixcbiAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5pbnRlcnNlY3QgPSBpbnRlcnNlY3Q7XG52YXIgYmVsbE51bWJlcnMgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVCZWxsTnVtYmVycykoe1xuICBhZGRTY2FsYXI6IGFkZFNjYWxhcixcbiAgaXNJbnRlZ2VyOiBpc0ludGVnZXIsXG4gIGlzTmVnYXRpdmU6IGlzTmVnYXRpdmUsXG4gIHN0aXJsaW5nUzI6IHN0aXJsaW5nUzIsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmJlbGxOdW1iZXJzID0gYmVsbE51bWJlcnM7XG52YXIgYXZvZ2Fkcm8gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVBdm9nYWRybykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuYXZvZ2Fkcm8gPSBhdm9nYWRybztcbnZhciBjbGFzc2ljYWxFbGVjdHJvblJhZGl1cyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5jbGFzc2ljYWxFbGVjdHJvblJhZGl1cyA9IGNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzO1xudmFyIGVsZWN0cmljQ29uc3RhbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFbGVjdHJpY0NvbnN0YW50KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5lbGVjdHJpY0NvbnN0YW50ID0gZWxlY3RyaWNDb25zdGFudDtcbnZhciBmZXJtaUNvdXBsaW5nID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlRmVybWlDb3VwbGluZykoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuZmVybWlDb3VwbGluZyA9IGZlcm1pQ291cGxpbmc7XG52YXIgZ3Jhdml0eSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUdyYXZpdHkpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmdyYXZpdHkgPSBncmF2aXR5O1xudmFyIGxvc2NobWlkdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUxvc2NobWlkdCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMubG9zY2htaWR0ID0gbG9zY2htaWR0O1xudmFyIG1vbGFyTWFzc0MxMiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1vbGFyTWFzc0MxMikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMubW9sYXJNYXNzQzEyID0gbW9sYXJNYXNzQzEyO1xudmFyIG51Y2xlYXJNYWduZXRvbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU51Y2xlYXJNYWduZXRvbikoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMubnVjbGVhck1hZ25ldG9uID0gbnVjbGVhck1hZ25ldG9uO1xudmFyIHBsYW5ja01hc3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVQbGFuY2tNYXNzKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5wbGFuY2tNYXNzID0gcGxhbmNrTWFzcztcbnZhciBxdWFudHVtT2ZDaXJjdWxhdGlvbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVF1YW50dW1PZkNpcmN1bGF0aW9uKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5xdWFudHVtT2ZDaXJjdWxhdGlvbiA9IHF1YW50dW1PZkNpcmN1bGF0aW9uO1xudmFyIHNwZWVkT2ZMaWdodCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVNwZWVkT2ZMaWdodCkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuc3BlZWRPZkxpZ2h0ID0gc3BlZWRPZkxpZ2h0O1xudmFyIHdpZW5EaXNwbGFjZW1lbnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVXaWVuRGlzcGxhY2VtZW50KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy53aWVuRGlzcGxhY2VtZW50ID0gd2llbkRpc3BsYWNlbWVudDtcbnZhciBsb2cgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVMb2cpKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBkaXZpZGVTY2FsYXI6IGRpdmlkZVNjYWxhcixcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMubG9nID0gbG9nO1xudmFyIHVuaXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVVbml0RnVuY3Rpb24pKHtcbiAgVW5pdDogVW5pdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMudW5pdCA9IHVuaXQ7XG52YXIgc3FydG0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTcXJ0bSkoe1xuICBhYnM6IGFicyxcbiAgYWRkOiBhZGQsXG4gIGlkZW50aXR5OiBpZGVudGl0eSxcbiAgaW52OiBpbnYsXG4gIG1heDogbWF4LFxuICBtdWx0aXBseTogbXVsdGlwbHksXG4gIHNpemU6IHNpemUsXG4gIHNxcnQ6IHNxcnQsXG4gIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgdHlwZWQ6IHR5cGVkXG59KTtcbmV4cG9ydHMuc3FydG0gPSBzcXJ0bTtcbnZhciBrbGRpdmVyZ2VuY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVLbGRpdmVyZ2VuY2UpKHtcbiAgZGl2aWRlOiBkaXZpZGUsXG4gIGRvdERpdmlkZTogZG90RGl2aWRlLFxuICBpc051bWVyaWM6IGlzTnVtZXJpYyxcbiAgbG9nOiBsb2csXG4gIG1hdHJpeDogbWF0cml4LFxuICBtdWx0aXBseTogbXVsdGlwbHksXG4gIHN1bTogc3VtLFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5rbGRpdmVyZ2VuY2UgPSBrbGRpdmVyZ2VuY2U7XG52YXIgYm9oclJhZGl1cyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUJvaHJSYWRpdXMpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLmJvaHJSYWRpdXMgPSBib2hyUmFkaXVzO1xudmFyIGVsZW1lbnRhcnlDaGFyZ2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVFbGVtZW50YXJ5Q2hhcmdlKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5lbGVtZW50YXJ5Q2hhcmdlID0gZWxlbWVudGFyeUNoYXJnZTtcbnZhciBpbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMuaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bSA9IGludmVyc2VDb25kdWN0YW5jZVF1YW50dW07XG52YXIgbW9sYXJWb2x1bWUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNb2xhclZvbHVtZSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMubW9sYXJWb2x1bWUgPSBtb2xhclZvbHVtZTtcbnZhciBwbGFuY2tUaW1lID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUGxhbmNrVGltZSkoe1xuICBCaWdOdW1iZXI6IEJpZ051bWJlcixcbiAgVW5pdDogVW5pdCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnXG59KTtcbmV4cG9ydHMucGxhbmNrVGltZSA9IHBsYW5ja1RpbWU7XG52YXIgdGhvbXNvbkNyb3NzU2VjdGlvbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVRob21zb25Dcm9zc1NlY3Rpb24pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnRob21zb25Dcm9zc1NlY3Rpb24gPSB0aG9tc29uQ3Jvc3NTZWN0aW9uO1xudmFyIGxvZzFwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTG9nMXApKHtcbiAgQ29tcGxleDogQ29tcGxleCxcbiAgY29uZmlnOiBfY29uZmlnUmVhZG9ubHkuY29uZmlnLFxuICBkaXZpZGVTY2FsYXI6IGRpdmlkZVNjYWxhcixcbiAgbG9nOiBsb2csXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLmxvZzFwID0gbG9nMXA7XG52YXIgbWVkaWFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlTWVkaWFuKSh7XG4gIGFkZDogYWRkLFxuICBjb21wYXJlOiBjb21wYXJlLFxuICBkaXZpZGU6IGRpdmlkZSxcbiAgcGFydGl0aW9uU2VsZWN0OiBwYXJ0aXRpb25TZWxlY3QsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLm1lZGlhbiA9IG1lZGlhbjtcbnZhciBnYXNDb25zdGFudCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZUdhc0NvbnN0YW50KSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5nYXNDb25zdGFudCA9IGdhc0NvbnN0YW50O1xudmFyIHBsYW5ja0NvbnN0YW50ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3JpZXNBbnkuY3JlYXRlUGxhbmNrQ29uc3RhbnQpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnBsYW5ja0NvbnN0YW50ID0gcGxhbmNrQ29uc3RhbnQ7XG52YXIgc2V0VW5pb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVTZXRVbmlvbikoe1xuICBJbmRleDogSW5kZXgsXG4gIGNvbmNhdDogY29uY2F0LFxuICBzZXRJbnRlcnNlY3Q6IHNldEludGVyc2VjdCxcbiAgc2V0U3ltRGlmZmVyZW5jZTogc2V0U3ltRGlmZmVyZW5jZSxcbiAgc2l6ZTogc2l6ZSxcbiAgc3Vic2V0OiBzdWJzZXQsXG4gIHR5cGVkOiB0eXBlZFxufSk7XG5leHBvcnRzLnNldFVuaW9uID0gc2V0VW5pb247XG52YXIgbWFnbmV0aWNGbHV4UXVhbnR1bSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZU1hZ25ldGljRmx1eFF1YW50dW0pKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLm1hZ25ldGljRmx1eFF1YW50dW0gPSBtYWduZXRpY0ZsdXhRdWFudHVtO1xudmFyIGNvdWxvbWIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVDb3Vsb21iKSh7XG4gIEJpZ051bWJlcjogQmlnTnVtYmVyLFxuICBVbml0OiBVbml0LFxuICBjb25maWc6IF9jb25maWdSZWFkb25seS5jb25maWdcbn0pO1xuZXhwb3J0cy5jb3Vsb21iID0gY291bG9tYjtcbnZhciBtYWQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3Rvcmllc0FueS5jcmVhdGVNYWQpKHtcbiAgYWJzOiBhYnMsXG4gIG1hcDogbWFwLFxuICBtZWRpYW46IG1lZGlhbixcbiAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICB0eXBlZDogdHlwZWRcbn0pO1xuZXhwb3J0cy5tYWQgPSBtYWQ7XG52YXIgcnlkYmVyZyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yaWVzQW55LmNyZWF0ZVJ5ZGJlcmcpKHtcbiAgQmlnTnVtYmVyOiBCaWdOdW1iZXIsXG4gIFVuaXQ6IFVuaXQsXG4gIGNvbmZpZzogX2NvbmZpZ1JlYWRvbmx5LmNvbmZpZ1xufSk7XG5leHBvcnRzLnJ5ZGJlcmcgPSByeWRiZXJnOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNBY2Nlc3Nvck5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzQWNjZXNzb3JOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzQXJyYXlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzQXJyYXk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNBcnJheU5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzQXJyYXlOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzQXNzaWdubWVudE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzQXNzaWdubWVudE5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNCaWdOdW1iZXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzQmlnTnVtYmVyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzQmxvY2tOb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0Jsb2NrTm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0Jvb2xlYW5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzQm9vbGVhbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0NoYWluXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0NoYWluO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzQ29sbGVjdGlvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNDb2xsZWN0aW9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzQ29tcGxleFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNDb21wbGV4O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzQ29uZGl0aW9uYWxOb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0NvbmRpdGlvbmFsTm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0NvbnN0YW50Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNDb25zdGFudE5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNEYXRlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0RhdGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNEZW5zZU1hdHJpeFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNEZW5zZU1hdHJpeDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc0ZyYWN0aW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0ZyYWN0aW9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzRnVuY3Rpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzRnVuY3Rpb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc0Z1bmN0aW9uQXNzaWdubWVudE5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNGdW5jdGlvbk5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzRnVuY3Rpb25Ob2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzSGVscFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNIZWxwO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzSW5kZXhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzSW5kZXg7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNJbmRleE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzSW5kZXhOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzTWF0cml4XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc01hdHJpeDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc05vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzTm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc051bGxcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzTnVsbDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc051bWJlclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNOdW1iZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNTdHJpbmdcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzU3RyaW5nO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzVW5kZWZpbmVkXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc1VuZGVmaW5lZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc09iamVjdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNPYmplY3Q7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNPYmplY3ROb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc09iamVjdE5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNPcGVyYXRvck5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzT3BlcmF0b3JOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUGFyZW50aGVzaXNOb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc1BhcmVudGhlc2lzTm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1JhbmdlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc1JhbmdlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzUmFuZ2VOb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc1JhbmdlTm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1JlZ0V4cFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXMuaXNSZWdFeHA7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiaXNSZXN1bHRTZXRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzUmVzdWx0U2V0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzU3BhcnNlTWF0cml4XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pcy5pc1NwYXJzZU1hdHJpeDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1N5bWJvbE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzU3ltYm9sTm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJpc1VuaXRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzLmlzVW5pdDtcbiAgfVxufSk7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vdXRpbHMvaXNcIik7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkFyZ3VtZW50c0Vycm9yID0gQXJndW1lbnRzRXJyb3I7XG5cbi8qKlxuICogQ3JlYXRlIGEgc3ludGF4IGVycm9yIHdpdGggdGhlIG1lc3NhZ2U6XG4gKiAgICAgJ1dyb25nIG51bWJlciBvZiBhcmd1bWVudHMgaW4gZnVuY3Rpb24gPGZuPiAoPGNvdW50PiBwcm92aWRlZCwgPG1pbj4tPG1heD4gZXhwZWN0ZWQpJ1xuICogQHBhcmFtIHtzdHJpbmd9IGZuICAgICBGdW5jdGlvbiBuYW1lXG4gKiBAcGFyYW0ge251bWJlcn0gY291bnQgIEFjdHVhbCBhcmd1bWVudCBjb3VudFxuICogQHBhcmFtIHtudW1iZXJ9IG1pbiAgICBNaW5pbXVtIHJlcXVpcmVkIGFyZ3VtZW50IGNvdW50XG4gKiBAcGFyYW0ge251bWJlcn0gW21heF0gIE1heGltdW0gcmVxdWlyZWQgYXJndW1lbnQgY291bnRcbiAqIEBleHRlbmRzIEVycm9yXG4gKi9cbmZ1bmN0aW9uIEFyZ3VtZW50c0Vycm9yKGZuLCBjb3VudCwgbWluLCBtYXgpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEFyZ3VtZW50c0Vycm9yKSkge1xuICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gIH1cblxuICB0aGlzLmZuID0gZm47XG4gIHRoaXMuY291bnQgPSBjb3VudDtcbiAgdGhpcy5taW4gPSBtaW47XG4gIHRoaXMubWF4ID0gbWF4O1xuICB0aGlzLm1lc3NhZ2UgPSAnV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBpbiBmdW5jdGlvbiAnICsgZm4gKyAnICgnICsgY291bnQgKyAnIHByb3ZpZGVkLCAnICsgbWluICsgKG1heCAhPT0gdW5kZWZpbmVkICYmIG1heCAhPT0gbnVsbCA/ICctJyArIG1heCA6ICcnKSArICcgZXhwZWN0ZWQpJztcbiAgdGhpcy5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xufVxuXG5Bcmd1bWVudHNFcnJvci5wcm90b3R5cGUgPSBuZXcgRXJyb3IoKTtcbkFyZ3VtZW50c0Vycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEVycm9yO1xuQXJndW1lbnRzRXJyb3IucHJvdG90eXBlLm5hbWUgPSAnQXJndW1lbnRzRXJyb3InO1xuQXJndW1lbnRzRXJyb3IucHJvdG90eXBlLmlzQXJndW1lbnRzRXJyb3IgPSB0cnVlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5EaW1lbnNpb25FcnJvciA9IERpbWVuc2lvbkVycm9yO1xuXG4vKipcbiAqIENyZWF0ZSBhIHJhbmdlIGVycm9yIHdpdGggdGhlIG1lc3NhZ2U6XG4gKiAgICAgJ0RpbWVuc2lvbiBtaXNtYXRjaCAoPGFjdHVhbCBzaXplPiAhPSA8ZXhwZWN0ZWQgc2l6ZT4pJ1xuICogQHBhcmFtIHtudW1iZXIgfCBudW1iZXJbXX0gYWN0dWFsICAgICAgICBUaGUgYWN0dWFsIHNpemVcbiAqIEBwYXJhbSB7bnVtYmVyIHwgbnVtYmVyW119IGV4cGVjdGVkICAgICAgVGhlIGV4cGVjdGVkIHNpemVcbiAqIEBwYXJhbSB7c3RyaW5nfSBbcmVsYXRpb249JyE9J10gICAgICAgICAgT3B0aW9uYWwgcmVsYXRpb24gYmV0d2VlbiBhY3R1YWxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGV4cGVjdGVkIHNpemU6ICchPScsICc8JywgZXRjLlxuICogQGV4dGVuZHMgUmFuZ2VFcnJvclxuICovXG5mdW5jdGlvbiBEaW1lbnNpb25FcnJvcihhY3R1YWwsIGV4cGVjdGVkLCByZWxhdGlvbikge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRGltZW5zaW9uRXJyb3IpKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgfVxuXG4gIHRoaXMuYWN0dWFsID0gYWN0dWFsO1xuICB0aGlzLmV4cGVjdGVkID0gZXhwZWN0ZWQ7XG4gIHRoaXMucmVsYXRpb24gPSByZWxhdGlvbjtcbiAgdGhpcy5tZXNzYWdlID0gJ0RpbWVuc2lvbiBtaXNtYXRjaCAoJyArIChBcnJheS5pc0FycmF5KGFjdHVhbCkgPyAnWycgKyBhY3R1YWwuam9pbignLCAnKSArICddJyA6IGFjdHVhbCkgKyAnICcgKyAodGhpcy5yZWxhdGlvbiB8fCAnIT0nKSArICcgJyArIChBcnJheS5pc0FycmF5KGV4cGVjdGVkKSA/ICdbJyArIGV4cGVjdGVkLmpvaW4oJywgJykgKyAnXScgOiBleHBlY3RlZCkgKyAnKSc7XG4gIHRoaXMuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbn1cblxuRGltZW5zaW9uRXJyb3IucHJvdG90eXBlID0gbmV3IFJhbmdlRXJyb3IoKTtcbkRpbWVuc2lvbkVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJhbmdlRXJyb3I7XG5EaW1lbnNpb25FcnJvci5wcm90b3R5cGUubmFtZSA9ICdEaW1lbnNpb25FcnJvcic7XG5EaW1lbnNpb25FcnJvci5wcm90b3R5cGUuaXNEaW1lbnNpb25FcnJvciA9IHRydWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkluZGV4RXJyb3IgPSBJbmRleEVycm9yO1xuXG4vKipcbiAqIENyZWF0ZSBhIHJhbmdlIGVycm9yIHdpdGggdGhlIG1lc3NhZ2U6XG4gKiAgICAgJ0luZGV4IG91dCBvZiByYW5nZSAoaW5kZXggPCBtaW4pJ1xuICogICAgICdJbmRleCBvdXQgb2YgcmFuZ2UgKGluZGV4IDwgbWF4KSdcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggICAgIFRoZSBhY3R1YWwgaW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbWluPTBdICAgTWluaW11bSBpbmRleCAoaW5jbHVkZWQpXG4gKiBAcGFyYW0ge251bWJlcn0gW21heF0gICAgIE1heGltdW0gaW5kZXggKGV4Y2x1ZGVkKVxuICogQGV4dGVuZHMgUmFuZ2VFcnJvclxuICovXG5mdW5jdGlvbiBJbmRleEVycm9yKGluZGV4LCBtaW4sIG1heCkge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSW5kZXhFcnJvcikpIHtcbiAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICB9XG5cbiAgdGhpcy5pbmRleCA9IGluZGV4O1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMykge1xuICAgIHRoaXMubWluID0gMDtcbiAgICB0aGlzLm1heCA9IG1pbjtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLm1pbiA9IG1pbjtcbiAgICB0aGlzLm1heCA9IG1heDtcbiAgfVxuXG4gIGlmICh0aGlzLm1pbiAhPT0gdW5kZWZpbmVkICYmIHRoaXMuaW5kZXggPCB0aGlzLm1pbikge1xuICAgIHRoaXMubWVzc2FnZSA9ICdJbmRleCBvdXQgb2YgcmFuZ2UgKCcgKyB0aGlzLmluZGV4ICsgJyA8ICcgKyB0aGlzLm1pbiArICcpJztcbiAgfSBlbHNlIGlmICh0aGlzLm1heCAhPT0gdW5kZWZpbmVkICYmIHRoaXMuaW5kZXggPj0gdGhpcy5tYXgpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSAnSW5kZXggb3V0IG9mIHJhbmdlICgnICsgdGhpcy5pbmRleCArICcgPiAnICsgKHRoaXMubWF4IC0gMSkgKyAnKSc7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5tZXNzYWdlID0gJ0luZGV4IG91dCBvZiByYW5nZSAoJyArIHRoaXMuaW5kZXggKyAnKSc7XG4gIH1cblxuICB0aGlzLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG59XG5cbkluZGV4RXJyb3IucHJvdG90eXBlID0gbmV3IFJhbmdlRXJyb3IoKTtcbkluZGV4RXJyb3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gUmFuZ2VFcnJvcjtcbkluZGV4RXJyb3IucHJvdG90eXBlLm5hbWUgPSAnSW5kZXhFcnJvcic7XG5JbmRleEVycm9yLnByb3RvdHlwZS5pc0luZGV4RXJyb3IgPSB0cnVlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVIZWxwQ2xhc3MgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnSGVscCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydwYXJzZSddO1xudmFyIGNyZWF0ZUhlbHBDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBwYXJzZSA9IF9yZWYucGFyc2U7XG5cbiAgLyoqXG4gICAqIERvY3VtZW50YXRpb24gb2JqZWN0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkb2MgIE9iamVjdCBjb250YWluaW5nIHByb3BlcnRpZXM6XG4gICAqICAgICAgICAgICAgICAgICAgICAgIHtzdHJpbmd9IG5hbWVcbiAgICogICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gY2F0ZWdvcnlcbiAgICogICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gZGVzY3JpcHRpb25cbiAgICogICAgICAgICAgICAgICAgICAgICAge3N0cmluZ1tdfSBzeW50YXhcbiAgICogICAgICAgICAgICAgICAgICAgICAge3N0cmluZ1tdfSBleGFtcGxlc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICB7c3RyaW5nW119IHNlZWFsc29cbiAgICogQGNvbnN0cnVjdG9yXG4gICAqL1xuICBmdW5jdGlvbiBIZWxwKGRvYykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBIZWxwKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoIWRvYykgdGhyb3cgbmV3IEVycm9yKCdBcmd1bWVudCBcImRvY1wiIG1pc3NpbmcnKTtcbiAgICB0aGlzLmRvYyA9IGRvYztcbiAgfVxuICAvKipcbiAgICogQXR0YWNoIHR5cGUgaW5mb3JtYXRpb25cbiAgICovXG5cblxuICBIZWxwLnByb3RvdHlwZS50eXBlID0gJ0hlbHAnO1xuICBIZWxwLnByb3RvdHlwZS5pc0hlbHAgPSB0cnVlO1xuICAvKipcbiAgICogR2VuZXJhdGUgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIEhlbHAgb2JqZWN0XG4gICAqIEByZXR1cm4ge3N0cmluZ30gUmV0dXJucyBhIHN0cmluZ1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBIZWxwLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZG9jID0gdGhpcy5kb2MgfHwge307XG4gICAgdmFyIGRlc2MgPSAnXFxuJztcblxuICAgIGlmIChkb2MubmFtZSkge1xuICAgICAgZGVzYyArPSAnTmFtZTogJyArIGRvYy5uYW1lICsgJ1xcblxcbic7XG4gICAgfVxuXG4gICAgaWYgKGRvYy5jYXRlZ29yeSkge1xuICAgICAgZGVzYyArPSAnQ2F0ZWdvcnk6ICcgKyBkb2MuY2F0ZWdvcnkgKyAnXFxuXFxuJztcbiAgICB9XG5cbiAgICBpZiAoZG9jLmRlc2NyaXB0aW9uKSB7XG4gICAgICBkZXNjICs9ICdEZXNjcmlwdGlvbjpcXG4gICAgJyArIGRvYy5kZXNjcmlwdGlvbiArICdcXG5cXG4nO1xuICAgIH1cblxuICAgIGlmIChkb2Muc3ludGF4KSB7XG4gICAgICBkZXNjICs9ICdTeW50YXg6XFxuICAgICcgKyBkb2Muc3ludGF4LmpvaW4oJ1xcbiAgICAnKSArICdcXG5cXG4nO1xuICAgIH1cblxuICAgIGlmIChkb2MuZXhhbXBsZXMpIHtcbiAgICAgIGRlc2MgKz0gJ0V4YW1wbGVzOlxcbic7XG4gICAgICB2YXIgc2NvcGUgPSB7fTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2MuZXhhbXBsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGV4cHIgPSBkb2MuZXhhbXBsZXNbaV07XG4gICAgICAgIGRlc2MgKz0gJyAgICAnICsgZXhwciArICdcXG4nO1xuICAgICAgICB2YXIgcmVzID0gdm9pZCAwO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gbm90ZTogcmVzIGNhbiBiZSB1bmRlZmluZWQgd2hlbiBgZXhwcmAgaXMgYW4gZW1wdHkgc3RyaW5nXG4gICAgICAgICAgcmVzID0gcGFyc2UoZXhwcikuY29tcGlsZSgpLmV2YWx1YXRlKHNjb3BlKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIHJlcyA9IGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQgJiYgISgwLCBfaXMuaXNIZWxwKShyZXMpKSB7XG4gICAgICAgICAgZGVzYyArPSAnICAgICAgICAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShyZXMsIHtcbiAgICAgICAgICAgIHByZWNpc2lvbjogMTRcbiAgICAgICAgICB9KSArICdcXG4nO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGRlc2MgKz0gJ1xcbic7XG4gICAgfVxuXG4gICAgaWYgKGRvYy5zZWVhbHNvICYmIGRvYy5zZWVhbHNvLmxlbmd0aCkge1xuICAgICAgZGVzYyArPSAnU2VlIGFsc286ICcgKyBkb2Muc2VlYWxzby5qb2luKCcsICcpICsgJ1xcbic7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlc2M7XG4gIH07XG4gIC8qKlxuICAgKiBFeHBvcnQgdGhlIGhlbHAgb2JqZWN0IHRvIEpTT05cbiAgICovXG5cblxuICBIZWxwLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIG9iaiA9ICgwLCBfb2JqZWN0LmNsb25lKSh0aGlzLmRvYyk7XG4gICAgb2JqLm1hdGhqcyA9ICdIZWxwJztcbiAgICByZXR1cm4gb2JqO1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYSBIZWxwIG9iamVjdCBmcm9tIGEgSlNPTiBvYmplY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb25cbiAgICogQHJldHVybnMge0hlbHB9IFJldHVybnMgYSBuZXcgSGVscCBvYmplY3RcbiAgICovXG5cblxuICBIZWxwLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICB2YXIgZG9jID0ge307XG5cbiAgICBmb3IgKHZhciBwcm9wIGluIGpzb24pIHtcbiAgICAgIGlmIChwcm9wICE9PSAnbWF0aGpzJykge1xuICAgICAgICAvLyBpZ25vcmUgbWF0aGpzIGZpZWxkXG4gICAgICAgIGRvY1twcm9wXSA9IGpzb25bcHJvcF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBIZWxwKGRvYyk7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBIZWxwIG9iamVjdFxuICAgKi9cblxuXG4gIEhlbHAucHJvdG90eXBlLnZhbHVlT2YgPSBIZWxwLnByb3RvdHlwZS50b1N0cmluZztcbiAgcmV0dXJuIEhlbHA7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVIZWxwQ2xhc3MgPSBjcmVhdGVIZWxwQ2xhc3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVBhcnNlckNsYXNzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2N1c3RvbXMgPSByZXF1aXJlKFwiLi4vdXRpbHMvY3VzdG9tc1wiKTtcblxudmFyIF9sb2cgPSByZXF1aXJlKFwiLi4vdXRpbHMvbG9nXCIpO1xuXG52YXIgbmFtZSA9ICdQYXJzZXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsncGFyc2UnXTtcbnZhciBjcmVhdGVQYXJzZXJDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBwYXJzZSA9IF9yZWYucGFyc2U7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBQYXJzZXJcbiAgICogUGFyc2VyIGNvbnRhaW5zIG1ldGhvZHMgdG8gZXZhbHVhdGUgb3IgcGFyc2UgZXhwcmVzc2lvbnMsIGFuZCBoYXMgYSBudW1iZXJcbiAgICogb2YgY29udmVuaWVuY2UgbWV0aG9kcyB0byBnZXQsIHNldCwgYW5kIHJlbW92ZSB2YXJpYWJsZXMgZnJvbSBtZW1vcnkuIFBhcnNlclxuICAgKiBrZWVwcyBhIHNjb3BlIGNvbnRhaW5pbmcgdmFyaWFibGVzIGluIG1lbW9yeSwgd2hpY2ggaXMgdXNlZCBmb3IgYWxsXG4gICAqIGV2YWx1YXRpb25zLlxuICAgKlxuICAgKiBNZXRob2RzOlxuICAgKiAgICBjb25zdCByZXN1bHQgPSBwYXJzZXIuZXZhbHVhdGUoZXhwcikgIC8vIGV2YWx1YXRlIGFuIGV4cHJlc3Npb25cbiAgICogICAgY29uc3QgdmFsdWUgPSBwYXJzZXIuZ2V0KG5hbWUpICAgICAgICAvLyByZXRyaWV2ZSBhIHZhcmlhYmxlIGZyb20gdGhlIHBhcnNlclxuICAgKiAgICBjb25zdCB2YWx1ZXMgPSBwYXJzZXIuZ2V0QWxsKCkgICAgICAgIC8vIHJldHJpZXZlIGFsbCBkZWZpbmVkIHZhcmlhYmxlc1xuICAgKiAgICBwYXJzZXIuc2V0KG5hbWUsIHZhbHVlKSAgICAgICAgICAgICAgIC8vIHNldCBhIHZhcmlhYmxlIGluIHRoZSBwYXJzZXJcbiAgICogICAgcGFyc2VyLnJlbW92ZShuYW1lKSAgICAgICAgICAgICAgICAgICAvLyBjbGVhciBhIHZhcmlhYmxlIGZyb20gdGhlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcGFyc2VycyBzY29wZVxuICAgKiAgICBwYXJzZXIuY2xlYXIoKSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNsZWFyIHRoZSBwYXJzZXJzIHNjb3BlXG4gICAqXG4gICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAqICAgIGNvbnN0IHBhcnNlciA9IG5ldyBQYXJzZXIoKVxuICAgKiAgICAvLyBOb3RlOiB0aGVyZSBpcyBhIGNvbnZlbmllbmNlIG1ldGhvZCB3aGljaCBjYW4gYmUgdXNlZCBpbnN0ZWFkOlxuICAgKiAgICAvLyBjb25zdCBwYXJzZXIgPSBuZXcgbWF0aC5wYXJzZXIoKVxuICAgKlxuICAgKiAgICAvLyBldmFsdWF0ZSBleHByZXNzaW9uc1xuICAgKiAgICBwYXJzZXIuZXZhbHVhdGUoJ3NxcnQoM14yICsgNF4yKScpICAgICAgICAvLyA1XG4gICAqICAgIHBhcnNlci5ldmFsdWF0ZSgnc3FydCgtNCknKSAgICAgICAgICAgICAgIC8vIDJpXG4gICAqICAgIHBhcnNlci5ldmFsdWF0ZSgnMiBpbmNoIGluIGNtJykgICAgICAgICAgIC8vIDUuMDggY21cbiAgICogICAgcGFyc2VyLmV2YWx1YXRlKCdjb3MoNDUgZGVnKScpICAgICAgICAgICAgLy8gMC43MDcxMDY3ODExODY1NDc2XG4gICAqXG4gICAqICAgIC8vIGRlZmluZSB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9uc1xuICAgKiAgICBwYXJzZXIuZXZhbHVhdGUoJ3ggPSA3IC8gMicpICAgICAgICAgICAgICAvLyAzLjVcbiAgICogICAgcGFyc2VyLmV2YWx1YXRlKCd4ICsgMycpICAgICAgICAgICAgICAgICAgLy8gNi41XG4gICAqICAgIHBhcnNlci5ldmFsdWF0ZSgnZnVuY3Rpb24gZih4LCB5KSA9IHheeScpIC8vIGYoeCwgeSlcbiAgICogICAgcGFyc2VyLmV2YWx1YXRlKCdmKDIsIDMpJykgICAgICAgICAgICAgICAgLy8gOFxuICAgKlxuICAgKiAgICAvLyBnZXQgYW5kIHNldCB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9uc1xuICAgKiAgICBjb25zdCB4ID0gcGFyc2VyLmdldCgneCcpICAgICAgICAgICAgICAgICAvLyA3XG4gICAqICAgIGNvbnN0IGYgPSBwYXJzZXIuZ2V0KCdmJykgICAgICAgICAgICAgICAgIC8vIGZ1bmN0aW9uXG4gICAqICAgIGNvbnN0IGcgPSBmKDMsIDIpICAgICAgICAgICAgICAgICAgICAgICAgIC8vIDlcbiAgICogICAgcGFyc2VyLnNldCgnaCcsIDUwMClcbiAgICogICAgY29uc3QgaSA9IHBhcnNlci5ldmFsdWF0ZSgnaCAvIDInKSAgICAgICAgLy8gMjUwXG4gICAqICAgIHBhcnNlci5zZXQoJ2hlbGxvJywgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICogICAgICAgIHJldHVybiAnaGVsbG8sICcgKyBuYW1lICsgJyEnXG4gICAqICAgIH0pXG4gICAqICAgIHBhcnNlci5ldmFsdWF0ZSgnaGVsbG8oXCJ1c2VyXCIpJykgICAgICAgICAgLy8gXCJoZWxsbywgdXNlciFcIlxuICAgKlxuICAgKiAgICAvLyBjbGVhciBkZWZpbmVkIGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzXG4gICAqICAgIHBhcnNlci5jbGVhcigpXG4gICAqXG4gICAqL1xuICBmdW5jdGlvbiBQYXJzZXIoKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFBhcnNlcikpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfVxuXG4gICAgdGhpcy5zY29wZSA9IHt9O1xuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIFBhcnNlci5wcm90b3R5cGUudHlwZSA9ICdQYXJzZXInO1xuICBQYXJzZXIucHJvdG90eXBlLmlzUGFyc2VyID0gdHJ1ZTtcbiAgLyoqXG4gICAqIFBhcnNlIGFuIGV4cHJlc3Npb24gYW5kIHJldHVybiB0aGUgcGFyc2VkIGZ1bmN0aW9uIG5vZGUuXG4gICAqIFRoZSBub2RlIHRyZWUgY2FuIGJlIGNvbXBpbGVkIHZpYSBgY29kZSA9IG5vZGUuY29tcGlsZShtYXRoKWAsXG4gICAqIGFuZCB0aGUgY29tcGlsZWQgY29kZSBjYW4gYmUgZXhlY3V0ZWQgYXMgYGNvZGUuZXZhbHVhdGUoW3Njb3BlXSlgXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHByXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqL1xuXG4gIFBhcnNlci5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbiAoZXhwcikge1xuICAgIHRocm93IG5ldyBFcnJvcignUGFyc2VyLnBhcnNlIGlzIGRlcHJlY2F0ZWQuIFVzZSBtYXRoLnBhcnNlIGluc3RlYWQuJyk7XG4gIH07XG4gIC8qKlxuICAgKiBQYXJzZSBhbmQgY29tcGlsZSBhbiBleHByZXNzaW9uLCByZXR1cm4gdGhlIGNvbXBpbGVkIGphdmFzY3JpcHQgY29kZS5cbiAgICogVGhlIG5vZGUgY2FuIGJlIGV2YWx1YXRlZCB2aWEgY29kZS5ldmFsdWF0ZShbc2NvcGVdKVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXhwclxuICAgKiBAcmV0dXJuIHt7ZXZhbHVhdGU6IGZ1bmN0aW9ufX0gY29kZVxuICAgKiBAdGhyb3dzIHtFcnJvcn1cbiAgICovXG5cblxuICBQYXJzZXIucHJvdG90eXBlLmNvbXBpbGUgPSBmdW5jdGlvbiAoZXhwcikge1xuICAgIHRocm93IG5ldyBFcnJvcignUGFyc2VyLmNvbXBpbGUgaXMgZGVwcmVjYXRlZC4gVXNlIG1hdGguY29tcGlsZSBpbnN0ZWFkLicpO1xuICB9O1xuICAvKipcbiAgICogUGFyc2UgYW5kIGV2YWx1YXRlIHRoZSBnaXZlbiBleHByZXNzaW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHByICAgQSBzdHJpbmcgY29udGFpbmluZyBhbiBleHByZXNzaW9uLCBmb3IgZXhhbXBsZSBcIjIrM1wiXG4gICAqIEByZXR1cm4geyp9IHJlc3VsdCAgICAgVGhlIHJlc3VsdCwgb3IgdW5kZWZpbmVkIHdoZW4gdGhlIGV4cHJlc3Npb24gd2FzIGVtcHR5XG4gICAqIEB0aHJvd3Mge0Vycm9yfVxuICAgKi9cblxuXG4gIFBhcnNlci5wcm90b3R5cGUuZXZhbHVhdGUgPSBmdW5jdGlvbiAoZXhwcikge1xuICAgIC8vIFRPRE86IHZhbGlkYXRlIGFyZ3VtZW50c1xuICAgIHJldHVybiBwYXJzZShleHByKS5jb21waWxlKCkuZXZhbHVhdGUodGhpcy5zY29wZSk7XG4gIH07XG4gIC8qKlxuICAgKiBQYXJzZSBhbmQgZXZhbHVhdGUgdGhlIGdpdmVuIGV4cHJlc3Npb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4cHIgICBBIHN0cmluZyBjb250YWluaW5nIGFuIGV4cHJlc3Npb24sIGZvciBleGFtcGxlIFwiMiszXCJcbiAgICogQHJldHVybiB7Kn0gcmVzdWx0ICAgICBUaGUgcmVzdWx0LCBvciB1bmRlZmluZWQgd2hlbiB0aGUgZXhwcmVzc2lvbiB3YXMgZW1wdHlcbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqL1xuICAvLyBUT0RPOiBEZXByZWNhdGVkIHNpbmNlIHY2LjAuMC4gQ2xlYW4gdXAgc29tZSBkYXlcblxuXG4gIFBhcnNlci5wcm90b3R5cGUuZXZhbCA9IGZ1bmN0aW9uIChleHByKSB7XG4gICAgKDAsIF9sb2cud2Fybk9uY2UpKCdNZXRob2QgUGFyc2VyLmV2YWwgaXMgcmVuYW1lZCB0byBQYXJzZXIuZXZhbHVhdGUuIFBsZWFzZSB1c2UgdGhlIG5ldyBtZXRob2QgbmFtZS4nKTtcbiAgICByZXR1cm4gdGhpcy5ldmFsdWF0ZShleHByKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHZhcmlhYmxlIChhIGZ1bmN0aW9uIG9yIHZhcmlhYmxlKSBieSBuYW1lIGZyb20gdGhlIHBhcnNlcnMgc2NvcGUuXG4gICAqIFJldHVybnMgdW5kZWZpbmVkIHdoZW4gbm90IGZvdW5kXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEByZXR1cm4geyogfCB1bmRlZmluZWR9IHZhbHVlXG4gICAqL1xuXG5cbiAgUGFyc2VyLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIC8vIFRPRE86IHZhbGlkYXRlIGFyZ3VtZW50c1xuICAgIHJldHVybiBuYW1lIGluIHRoaXMuc2NvcGUgPyAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KSh0aGlzLnNjb3BlLCBuYW1lKSA6IHVuZGVmaW5lZDtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIG1hcCB3aXRoIGFsbCBkZWZpbmVkIHZhcmlhYmxlc1xuICAgKiBAcmV0dXJuIHtPYmplY3R9IHZhbHVlc1xuICAgKi9cblxuXG4gIFBhcnNlci5wcm90b3R5cGUuZ2V0QWxsID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAoMCwgX29iamVjdC5leHRlbmQpKHt9LCB0aGlzLnNjb3BlKTtcbiAgfTtcbiAgLyoqXG4gICAqIFNldCBhIHN5bWJvbCAoYSBmdW5jdGlvbiBvciB2YXJpYWJsZSkgYnkgbmFtZSBmcm9tIHRoZSBwYXJzZXJzIHNjb3BlLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0geyogfCB1bmRlZmluZWR9IHZhbHVlXG4gICAqL1xuXG5cbiAgUGFyc2VyLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICAvLyBUT0RPOiB2YWxpZGF0ZSBhcmd1bWVudHNcbiAgICByZXR1cm4gKDAsIF9jdXN0b21zLnNldFNhZmVQcm9wZXJ0eSkodGhpcy5zY29wZSwgbmFtZSwgdmFsdWUpO1xuICB9O1xuICAvKipcbiAgICogUmVtb3ZlIGEgdmFyaWFibGUgZnJvbSB0aGUgcGFyc2VycyBzY29wZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKi9cblxuXG4gIFBhcnNlci5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAvLyBUT0RPOiB2YWxpZGF0ZSBhcmd1bWVudHNcbiAgICBkZWxldGUgdGhpcy5zY29wZVtuYW1lXTtcbiAgfTtcbiAgLyoqXG4gICAqIENsZWFyIHRoZSBzY29wZSB3aXRoIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zXG4gICAqL1xuXG5cbiAgUGFyc2VyLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBfbmFtZSBpbiB0aGlzLnNjb3BlKSB7XG4gICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKHRoaXMuc2NvcGUsIF9uYW1lKSkge1xuICAgICAgICBkZWxldGUgdGhpcy5zY29wZVtfbmFtZV07XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBQYXJzZXI7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVQYXJzZXJDbGFzcyA9IGNyZWF0ZVBhcnNlckNsYXNzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5JbmZpbml0eURvY3MgPSB2b2lkIDA7XG52YXIgSW5maW5pdHlEb2NzID0ge1xuICBuYW1lOiAnSW5maW5pdHknLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWydJbmZpbml0eSddLFxuICBkZXNjcmlwdGlvbjogJ0luZmluaXR5LCBhIG51bWJlciB3aGljaCBpcyBsYXJnZXIgdGhhbiB0aGUgbWF4aW11bSBudW1iZXIgdGhhdCBjYW4gYmUgaGFuZGxlZCBieSBhIGZsb2F0aW5nIHBvaW50IG51bWJlci4nLFxuICBleGFtcGxlczogWydJbmZpbml0eScsICcxIC8gMCddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuSW5maW5pdHlEb2NzID0gSW5maW5pdHlEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5MTjEwRG9jcyA9IHZvaWQgMDtcbnZhciBMTjEwRG9jcyA9IHtcbiAgbmFtZTogJ0xOMTAnLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWydMTjEwJ10sXG4gIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgMTAsIGFwcHJveGltYXRlbHkgZXF1YWwgdG8gMi4zMDInLFxuICBleGFtcGxlczogWydMTjEwJywgJ2xvZygxMCknXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLkxOMTBEb2NzID0gTE4xMERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLkxOMkRvY3MgPSB2b2lkIDA7XG52YXIgTE4yRG9jcyA9IHtcbiAgbmFtZTogJ0xOMicsXG4gIGNhdGVnb3J5OiAnQ29uc3RhbnRzJyxcbiAgc3ludGF4OiBbJ0xOMiddLFxuICBkZXNjcmlwdGlvbjogJ1JldHVybnMgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIDIsIGFwcHJveGltYXRlbHkgZXF1YWwgdG8gMC42OTMnLFxuICBleGFtcGxlczogWydMTjInLCAnbG9nKDIpJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5MTjJEb2NzID0gTE4yRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuTE9HMTBFRG9jcyA9IHZvaWQgMDtcbnZhciBMT0cxMEVEb2NzID0ge1xuICBuYW1lOiAnTE9HMTBFJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnTE9HMTBFJ10sXG4gIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgYmFzZS0xMCBsb2dhcml0aG0gb2YgRSwgYXBwcm94aW1hdGVseSBlcXVhbCB0byAwLjQzNCcsXG4gIGV4YW1wbGVzOiBbJ0xPRzEwRScsICdsb2coZSwgMTApJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5MT0cxMEVEb2NzID0gTE9HMTBFRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuTE9HMkVEb2NzID0gdm9pZCAwO1xudmFyIExPRzJFRG9jcyA9IHtcbiAgbmFtZTogJ0xPRzJFJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnTE9HMkUnXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBiYXNlLTIgbG9nYXJpdGhtIG9mIEUsIGFwcHJveGltYXRlbHkgZXF1YWwgdG8gMS40NDInLFxuICBleGFtcGxlczogWydMT0cyRScsICdsb2coZSwgMiknXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLkxPRzJFRG9jcyA9IExPRzJFRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuTmFORG9jcyA9IHZvaWQgMDtcbnZhciBOYU5Eb2NzID0ge1xuICBuYW1lOiAnTmFOJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnTmFOJ10sXG4gIGRlc2NyaXB0aW9uOiAnTm90IGEgbnVtYmVyJyxcbiAgZXhhbXBsZXM6IFsnTmFOJywgJzAgLyAwJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5OYU5Eb2NzID0gTmFORG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuU1FSVDEyRG9jcyA9IHZvaWQgMDtcbnZhciBTUVJUMTJEb2NzID0ge1xuICBuYW1lOiAnU1FSVDFfMicsXG4gIGNhdGVnb3J5OiAnQ29uc3RhbnRzJyxcbiAgc3ludGF4OiBbJ1NRUlQxXzInXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm5zIHRoZSBzcXVhcmUgcm9vdCBvZiAxLzIsIGFwcHJveGltYXRlbHkgZXF1YWwgdG8gMC43MDcnLFxuICBleGFtcGxlczogWydTUVJUMV8yJywgJ3NxcnQoMS8yKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuU1FSVDEyRG9jcyA9IFNRUlQxMkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlNRUlQyRG9jcyA9IHZvaWQgMDtcbnZhciBTUVJUMkRvY3MgPSB7XG4gIG5hbWU6ICdTUVJUMicsXG4gIGNhdGVnb3J5OiAnQ29uc3RhbnRzJyxcbiAgc3ludGF4OiBbJ1NRUlQyJ10sXG4gIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgc3F1YXJlIHJvb3Qgb2YgMiwgYXBwcm94aW1hdGVseSBlcXVhbCB0byAxLjQxNCcsXG4gIGV4YW1wbGVzOiBbJ1NRUlQyJywgJ3NxcnQoMiknXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLlNRUlQyRG9jcyA9IFNRUlQyRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZURvY3MgPSB2b2lkIDA7XG52YXIgZURvY3MgPSB7XG4gIG5hbWU6ICdlJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsnZSddLFxuICBkZXNjcmlwdGlvbjogJ0V1bGVyXFwncyBudW1iZXIsIHRoZSBiYXNlIG9mIHRoZSBuYXR1cmFsIGxvZ2FyaXRobS4gQXBwcm94aW1hdGVseSBlcXVhbCB0byAyLjcxODI4JyxcbiAgZXhhbXBsZXM6IFsnZScsICdlIF4gMicsICdleHAoMiknLCAnbG9nKGUpJ10sXG4gIHNlZWFsc286IFsnZXhwJ11cbn07XG5leHBvcnRzLmVEb2NzID0gZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZhbHNlRG9jcyA9IHZvaWQgMDtcbnZhciBmYWxzZURvY3MgPSB7XG4gIG5hbWU6ICdmYWxzZScsXG4gIGNhdGVnb3J5OiAnQ29uc3RhbnRzJyxcbiAgc3ludGF4OiBbJ2ZhbHNlJ10sXG4gIGRlc2NyaXB0aW9uOiAnQm9vbGVhbiB2YWx1ZSBmYWxzZScsXG4gIGV4YW1wbGVzOiBbJ2ZhbHNlJ10sXG4gIHNlZWFsc286IFsndHJ1ZSddXG59O1xuZXhwb3J0cy5mYWxzZURvY3MgPSBmYWxzZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlEb2NzID0gdm9pZCAwO1xudmFyIGlEb2NzID0ge1xuICBuYW1lOiAnaScsXG4gIGNhdGVnb3J5OiAnQ29uc3RhbnRzJyxcbiAgc3ludGF4OiBbJ2knXSxcbiAgZGVzY3JpcHRpb246ICdJbWFnaW5hcnkgdW5pdCwgZGVmaW5lZCBhcyBpKmk9LTEuIEEgY29tcGxleCBudW1iZXIgaXMgZGVzY3JpYmVkIGFzIGEgKyBiKmksIHdoZXJlIGEgaXMgdGhlIHJlYWwgcGFydCwgYW5kIGIgaXMgdGhlIGltYWdpbmFyeSBwYXJ0LicsXG4gIGV4YW1wbGVzOiBbJ2knLCAnaSAqIGknLCAnc3FydCgtMSknXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLmlEb2NzID0gaURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm51bGxEb2NzID0gdm9pZCAwO1xudmFyIG51bGxEb2NzID0ge1xuICBuYW1lOiAnbnVsbCcsXG4gIGNhdGVnb3J5OiAnQ29uc3RhbnRzJyxcbiAgc3ludGF4OiBbJ251bGwnXSxcbiAgZGVzY3JpcHRpb246ICdWYWx1ZSBudWxsJyxcbiAgZXhhbXBsZXM6IFsnbnVsbCddLFxuICBzZWVhbHNvOiBbJ3RydWUnLCAnZmFsc2UnXVxufTtcbmV4cG9ydHMubnVsbERvY3MgPSBudWxsRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucGhpRG9jcyA9IHZvaWQgMDtcbnZhciBwaGlEb2NzID0ge1xuICBuYW1lOiAncGhpJyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsncGhpJ10sXG4gIGRlc2NyaXB0aW9uOiAnUGhpIGlzIHRoZSBnb2xkZW4gcmF0aW8uIFR3byBxdWFudGl0aWVzIGFyZSBpbiB0aGUgZ29sZGVuIHJhdGlvIGlmIHRoZWlyIHJhdGlvIGlzIHRoZSBzYW1lIGFzIHRoZSByYXRpbyBvZiB0aGVpciBzdW0gdG8gdGhlIGxhcmdlciBvZiB0aGUgdHdvIHF1YW50aXRpZXMuIFBoaSBpcyBkZWZpbmVkIGFzIGAoMSArIHNxcnQoNSkpIC8gMmAgYW5kIGlzIGFwcHJveGltYXRlbHkgMS42MTgwMzQuLi4nLFxuICBleGFtcGxlczogWydwaGknXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLnBoaURvY3MgPSBwaGlEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5waURvY3MgPSB2b2lkIDA7XG52YXIgcGlEb2NzID0ge1xuICBuYW1lOiAncGknLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWydwaSddLFxuICBkZXNjcmlwdGlvbjogJ1RoZSBudW1iZXIgcGkgaXMgYSBtYXRoZW1hdGljYWwgY29uc3RhbnQgdGhhdCBpcyB0aGUgcmF0aW8gb2YgYSBjaXJjbGVcXCdzIGNpcmN1bWZlcmVuY2UgdG8gaXRzIGRpYW1ldGVyLCBhbmQgaXMgYXBwcm94aW1hdGVseSBlcXVhbCB0byAzLjE0MTU5JyxcbiAgZXhhbXBsZXM6IFsncGknLCAnc2luKHBpLzIpJ10sXG4gIHNlZWFsc286IFsndGF1J11cbn07XG5leHBvcnRzLnBpRG9jcyA9IHBpRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudGF1RG9jcyA9IHZvaWQgMDtcbnZhciB0YXVEb2NzID0ge1xuICBuYW1lOiAndGF1JyxcbiAgY2F0ZWdvcnk6ICdDb25zdGFudHMnLFxuICBzeW50YXg6IFsndGF1J10sXG4gIGRlc2NyaXB0aW9uOiAnVGF1IGlzIHRoZSByYXRpbyBjb25zdGFudCBvZiBhIGNpcmNsZVxcJ3MgY2lyY3VtZmVyZW5jZSB0byByYWRpdXMsIGVxdWFsIHRvIDIgKiBwaSwgYXBwcm94aW1hdGVseSA2LjI4MzIuJyxcbiAgZXhhbXBsZXM6IFsndGF1JywgJzIgKiBwaSddLFxuICBzZWVhbHNvOiBbJ3BpJ11cbn07XG5leHBvcnRzLnRhdURvY3MgPSB0YXVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50cnVlRG9jcyA9IHZvaWQgMDtcbnZhciB0cnVlRG9jcyA9IHtcbiAgbmFtZTogJ3RydWUnLFxuICBjYXRlZ29yeTogJ0NvbnN0YW50cycsXG4gIHN5bnRheDogWyd0cnVlJ10sXG4gIGRlc2NyaXB0aW9uOiAnQm9vbGVhbiB2YWx1ZSB0cnVlJyxcbiAgZXhhbXBsZXM6IFsndHJ1ZSddLFxuICBzZWVhbHNvOiBbJ2ZhbHNlJ11cbn07XG5leHBvcnRzLnRydWVEb2NzID0gdHJ1ZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnZlcnNpb25Eb2NzID0gdm9pZCAwO1xudmFyIHZlcnNpb25Eb2NzID0ge1xuICBuYW1lOiAndmVyc2lvbicsXG4gIGNhdGVnb3J5OiAnQ29uc3RhbnRzJyxcbiAgc3ludGF4OiBbJ3ZlcnNpb24nXSxcbiAgZGVzY3JpcHRpb246ICdBIHN0cmluZyB3aXRoIHRoZSB2ZXJzaW9uIG51bWJlciBvZiBtYXRoLmpzJyxcbiAgZXhhbXBsZXM6IFsndmVyc2lvbiddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMudmVyc2lvbkRvY3MgPSB2ZXJzaW9uRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYmlnbnVtYmVyRG9jcyA9IHZvaWQgMDtcbnZhciBiaWdudW1iZXJEb2NzID0ge1xuICBuYW1lOiAnYmlnbnVtYmVyJyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsnYmlnbnVtYmVyKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgYmlnIG51bWJlciBmcm9tIGEgbnVtYmVyIG9yIHN0cmluZy4nLFxuICBleGFtcGxlczogWycwLjEgKyAwLjInLCAnYmlnbnVtYmVyKDAuMSkgKyBiaWdudW1iZXIoMC4yKScsICdiaWdudW1iZXIoXCI3LjJcIiknLCAnYmlnbnVtYmVyKFwiNy4yZTUwMFwiKScsICdiaWdudW1iZXIoWzAuMSwgMC4yLCAwLjNdKSddLFxuICBzZWVhbHNvOiBbJ2Jvb2xlYW4nLCAnY29tcGxleCcsICdmcmFjdGlvbicsICdpbmRleCcsICdtYXRyaXgnLCAnc3RyaW5nJywgJ3VuaXQnXVxufTtcbmV4cG9ydHMuYmlnbnVtYmVyRG9jcyA9IGJpZ251bWJlckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmJvb2xlYW5Eb2NzID0gdm9pZCAwO1xudmFyIGJvb2xlYW5Eb2NzID0ge1xuICBuYW1lOiAnYm9vbGVhbicsXG4gIGNhdGVnb3J5OiAnQ29uc3RydWN0aW9uJyxcbiAgc3ludGF4OiBbJ3gnLCAnYm9vbGVhbih4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbnZlcnQgYSBzdHJpbmcgb3IgbnVtYmVyIGludG8gYSBib29sZWFuLicsXG4gIGV4YW1wbGVzOiBbJ2Jvb2xlYW4oMCknLCAnYm9vbGVhbigxKScsICdib29sZWFuKDMpJywgJ2Jvb2xlYW4oXCJ0cnVlXCIpJywgJ2Jvb2xlYW4oXCJmYWxzZVwiKScsICdib29sZWFuKFsxLCAwLCAxLCAxXSknXSxcbiAgc2VlYWxzbzogWydiaWdudW1iZXInLCAnY29tcGxleCcsICdpbmRleCcsICdtYXRyaXgnLCAnbnVtYmVyJywgJ3N0cmluZycsICd1bml0J11cbn07XG5leHBvcnRzLmJvb2xlYW5Eb2NzID0gYm9vbGVhbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbXBsZXhEb2NzID0gdm9pZCAwO1xudmFyIGNvbXBsZXhEb2NzID0ge1xuICBuYW1lOiAnY29tcGxleCcsXG4gIGNhdGVnb3J5OiAnQ29uc3RydWN0aW9uJyxcbiAgc3ludGF4OiBbJ2NvbXBsZXgoKScsICdjb21wbGV4KHJlLCBpbSknLCAnY29tcGxleChzdHJpbmcpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgY29tcGxleCBudW1iZXIuJyxcbiAgZXhhbXBsZXM6IFsnY29tcGxleCgpJywgJ2NvbXBsZXgoMiwgMyknLCAnY29tcGxleChcIjcgLSAyaVwiKSddLFxuICBzZWVhbHNvOiBbJ2JpZ251bWJlcicsICdib29sZWFuJywgJ2luZGV4JywgJ21hdHJpeCcsICdudW1iZXInLCAnc3RyaW5nJywgJ3VuaXQnXVxufTtcbmV4cG9ydHMuY29tcGxleERvY3MgPSBjb21wbGV4RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVW5pdERvY3MgPSB2b2lkIDA7XG52YXIgY3JlYXRlVW5pdERvY3MgPSB7XG4gIG5hbWU6ICdjcmVhdGVVbml0JyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsnY3JlYXRlVW5pdChkZWZpbml0aW9ucyknLCAnY3JlYXRlVW5pdChuYW1lLCBkZWZpbml0aW9uKSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIHVzZXItZGVmaW5lZCB1bml0IGFuZCByZWdpc3RlciBpdCB3aXRoIHRoZSBVbml0IHR5cGUuJyxcbiAgZXhhbXBsZXM6IFsnY3JlYXRlVW5pdChcImZvb1wiKScsICdjcmVhdGVVbml0KFwia25vdFwiLCB7ZGVmaW5pdGlvbjogXCIwLjUxNDQ0NDQ0NCBtL3NcIiwgYWxpYXNlczogW1wia25vdHNcIiwgXCJrdFwiLCBcImt0c1wiXX0pJywgJ2NyZWF0ZVVuaXQoXCJtcGhcIiwgXCIxIG1pbGUvaG91clwiKSddLFxuICBzZWVhbHNvOiBbJ3VuaXQnLCAnc3BsaXRVbml0J11cbn07XG5leHBvcnRzLmNyZWF0ZVVuaXREb2NzID0gY3JlYXRlVW5pdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZyYWN0aW9uRG9jcyA9IHZvaWQgMDtcbnZhciBmcmFjdGlvbkRvY3MgPSB7XG4gIG5hbWU6ICdmcmFjdGlvbicsXG4gIGNhdGVnb3J5OiAnQ29uc3RydWN0aW9uJyxcbiAgc3ludGF4OiBbJ2ZyYWN0aW9uKG51bSknLCAnZnJhY3Rpb24obnVtLGRlbiknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBmcmFjdGlvbiBmcm9tIGEgbnVtYmVyIG9yIGZyb20gYSBudW1lcmF0b3IgYW5kIGRlbm9taW5hdG9yLicsXG4gIGV4YW1wbGVzOiBbJ2ZyYWN0aW9uKDAuMTI1KScsICdmcmFjdGlvbigxLCAzKSArIGZyYWN0aW9uKDIsIDUpJ10sXG4gIHNlZWFsc286IFsnYmlnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnY29tcGxleCcsICdpbmRleCcsICdtYXRyaXgnLCAnc3RyaW5nJywgJ3VuaXQnXVxufTtcbmV4cG9ydHMuZnJhY3Rpb25Eb2NzID0gZnJhY3Rpb25Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pbmRleERvY3MgPSB2b2lkIDA7XG52YXIgaW5kZXhEb2NzID0ge1xuICBuYW1lOiAnaW5kZXgnLFxuICBjYXRlZ29yeTogJ0NvbnN0cnVjdGlvbicsXG4gIHN5bnRheDogWydbc3RhcnRdJywgJ1tzdGFydDplbmRdJywgJ1tzdGFydDpzdGVwOmVuZF0nLCAnW3N0YXJ0MSwgc3RhcnQgMiwgLi4uXScsICdbc3RhcnQxOmVuZDEsIHN0YXJ0MjplbmQyLCAuLi5dJywgJ1tzdGFydDE6c3RlcDE6ZW5kMSwgc3RhcnQyOnN0ZXAyOmVuZDIsIC4uLl0nXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYW4gaW5kZXggdG8gZ2V0IG9yIHJlcGxhY2UgYSBzdWJzZXQgb2YgYSBtYXRyaXgnLFxuICBleGFtcGxlczogWydbXScsICdbMSwgMiwgM10nLCAnQSA9IFsxLCAyLCAzOyA0LCA1LCA2XScsICdBWzEsIDpdJywgJ0FbMSwgMl0gPSA1MCcsICdBWzA6MiwgMDoyXSA9IG9uZXMoMiwgMiknXSxcbiAgc2VlYWxzbzogWydiaWdudW1iZXInLCAnYm9vbGVhbicsICdjb21wbGV4JywgJ21hdHJpeCwnLCAnbnVtYmVyJywgJ3JhbmdlJywgJ3N0cmluZycsICd1bml0J11cbn07XG5leHBvcnRzLmluZGV4RG9jcyA9IGluZGV4RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWF0cml4RG9jcyA9IHZvaWQgMDtcbnZhciBtYXRyaXhEb2NzID0ge1xuICBuYW1lOiAnbWF0cml4JyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsnW10nLCAnW2ExLCBiMSwgLi4uOyBhMiwgYjIsIC4uLl0nLCAnbWF0cml4KCknLCAnbWF0cml4KFwiZGVuc2VcIiknLCAnbWF0cml4KFsuLi5dKSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIG1hdHJpeC4nLFxuICBleGFtcGxlczogWydbXScsICdbMSwgMiwgM10nLCAnWzEsIDIsIDM7IDQsIDUsIDZdJywgJ21hdHJpeCgpJywgJ21hdHJpeChbMywgNF0pJywgJ21hdHJpeChbMywgNDsgNSwgNl0sIFwic3BhcnNlXCIpJywgJ21hdHJpeChbMywgNDsgNSwgNl0sIFwic3BhcnNlXCIsIFwibnVtYmVyXCIpJ10sXG4gIHNlZWFsc286IFsnYmlnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnY29tcGxleCcsICdpbmRleCcsICdudW1iZXInLCAnc3RyaW5nJywgJ3VuaXQnLCAnc3BhcnNlJ11cbn07XG5leHBvcnRzLm1hdHJpeERvY3MgPSBtYXRyaXhEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5udW1iZXJEb2NzID0gdm9pZCAwO1xudmFyIG51bWJlckRvY3MgPSB7XG4gIG5hbWU6ICdudW1iZXInLFxuICBjYXRlZ29yeTogJ0NvbnN0cnVjdGlvbicsXG4gIHN5bnRheDogWyd4JywgJ251bWJlcih4KScsICdudW1iZXIodW5pdCwgdmFsdWVsZXNzVW5pdCknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBudW1iZXIgb3IgY29udmVydCBhIHN0cmluZyBvciBib29sZWFuIGludG8gYSBudW1iZXIuJyxcbiAgZXhhbXBsZXM6IFsnMicsICcyZTMnLCAnNC4wNScsICdudW1iZXIoMiknLCAnbnVtYmVyKFwiNy4yXCIpJywgJ251bWJlcih0cnVlKScsICdudW1iZXIoW3RydWUsIGZhbHNlLCB0cnVlLCB0cnVlXSknLCAnbnVtYmVyKHVuaXQoXCI1MmNtXCIpLCBcIm1cIiknXSxcbiAgc2VlYWxzbzogWydiaWdudW1iZXInLCAnYm9vbGVhbicsICdjb21wbGV4JywgJ2ZyYWN0aW9uJywgJ2luZGV4JywgJ21hdHJpeCcsICdzdHJpbmcnLCAndW5pdCddXG59O1xuZXhwb3J0cy5udW1iZXJEb2NzID0gbnVtYmVyRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3BhcnNlRG9jcyA9IHZvaWQgMDtcbnZhciBzcGFyc2VEb2NzID0ge1xuICBuYW1lOiAnc3BhcnNlJyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsnc3BhcnNlKCknLCAnc3BhcnNlKFthMSwgYjEsIC4uLjsgYTEsIGIyLCAuLi5dKScsICdzcGFyc2UoW2ExLCBiMSwgLi4uOyBhMSwgYjIsIC4uLl0sIFwibnVtYmVyXCIpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgc3BhcnNlIG1hdHJpeC4nLFxuICBleGFtcGxlczogWydzcGFyc2UoKScsICdzcGFyc2UoWzMsIDQ7IDUsIDZdKScsICdzcGFyc2UoWzMsIDA7IDUsIDBdLCBcIm51bWJlclwiKSddLFxuICBzZWVhbHNvOiBbJ2JpZ251bWJlcicsICdib29sZWFuJywgJ2NvbXBsZXgnLCAnaW5kZXgnLCAnbnVtYmVyJywgJ3N0cmluZycsICd1bml0JywgJ21hdHJpeCddXG59O1xuZXhwb3J0cy5zcGFyc2VEb2NzID0gc3BhcnNlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3BsaXRVbml0RG9jcyA9IHZvaWQgMDtcbnZhciBzcGxpdFVuaXREb2NzID0ge1xuICBuYW1lOiAnc3BsaXRVbml0JyxcbiAgY2F0ZWdvcnk6ICdDb25zdHJ1Y3Rpb24nLFxuICBzeW50YXg6IFsnc3BsaXRVbml0KHVuaXQ6IFVuaXQsIHBhcnRzOiBVbml0W10pJ10sXG4gIGRlc2NyaXB0aW9uOiAnU3BsaXQgYSB1bml0IGluIGFuIGFycmF5IG9mIHVuaXRzIHdob3NlIHN1bSBpcyBlcXVhbCB0byB0aGUgb3JpZ2luYWwgdW5pdC4nLFxuICBleGFtcGxlczogWydzcGxpdFVuaXQoMSBtLCBbXCJmZWV0XCIsIFwiaW5jaFwiXSknXSxcbiAgc2VlYWxzbzogWyd1bml0JywgJ2NyZWF0ZVVuaXQnXVxufTtcbmV4cG9ydHMuc3BsaXRVbml0RG9jcyA9IHNwbGl0VW5pdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnN0cmluZ0RvY3MgPSB2b2lkIDA7XG52YXIgc3RyaW5nRG9jcyA9IHtcbiAgbmFtZTogJ3N0cmluZycsXG4gIGNhdGVnb3J5OiAnQ29uc3RydWN0aW9uJyxcbiAgc3ludGF4OiBbJ1widGV4dFwiJywgJ3N0cmluZyh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIHN0cmluZyBvciBjb252ZXJ0IGEgdmFsdWUgdG8gYSBzdHJpbmcnLFxuICBleGFtcGxlczogWydcIkhlbGxvIFdvcmxkIVwiJywgJ3N0cmluZyg0LjIpJywgJ3N0cmluZygzICsgMmkpJ10sXG4gIHNlZWFsc286IFsnYmlnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnY29tcGxleCcsICdpbmRleCcsICdtYXRyaXgnLCAnbnVtYmVyJywgJ3VuaXQnXVxufTtcbmV4cG9ydHMuc3RyaW5nRG9jcyA9IHN0cmluZ0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnVuaXREb2NzID0gdm9pZCAwO1xudmFyIHVuaXREb2NzID0ge1xuICBuYW1lOiAndW5pdCcsXG4gIGNhdGVnb3J5OiAnQ29uc3RydWN0aW9uJyxcbiAgc3ludGF4OiBbJ3ZhbHVlIHVuaXQnLCAndW5pdCh2YWx1ZSwgdW5pdCknLCAndW5pdChzdHJpbmcpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgdW5pdC4nLFxuICBleGFtcGxlczogWyc1LjUgbW0nLCAnMyBpbmNoJywgJ3VuaXQoNy4xLCBcImtpbG9ncmFtXCIpJywgJ3VuaXQoXCIyMyBkZWdcIiknXSxcbiAgc2VlYWxzbzogWydiaWdudW1iZXInLCAnYm9vbGVhbicsICdjb21wbGV4JywgJ2luZGV4JywgJ21hdHJpeCcsICdudW1iZXInLCAnc3RyaW5nJ11cbn07XG5leHBvcnRzLnVuaXREb2NzID0gdW5pdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbmZpZ0RvY3MgPSB2b2lkIDA7XG52YXIgY29uZmlnRG9jcyA9IHtcbiAgbmFtZTogJ2NvbmZpZycsXG4gIGNhdGVnb3J5OiAnQ29yZScsXG4gIHN5bnRheDogWydjb25maWcoKScsICdjb25maWcob3B0aW9ucyknXSxcbiAgZGVzY3JpcHRpb246ICdHZXQgY29uZmlndXJhdGlvbiBvciBjaGFuZ2UgY29uZmlndXJhdGlvbi4nLFxuICBleGFtcGxlczogWydjb25maWcoKScsICcxLzMgKyAxLzQnLCAnY29uZmlnKHtudW1iZXI6IFwiRnJhY3Rpb25cIn0pJywgJzEvMyArIDEvNCddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuY29uZmlnRG9jcyA9IGNvbmZpZ0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmltcG9ydERvY3MgPSB2b2lkIDA7XG52YXIgaW1wb3J0RG9jcyA9IHtcbiAgbmFtZTogJ2ltcG9ydCcsXG4gIGNhdGVnb3J5OiAnQ29yZScsXG4gIHN5bnRheDogWydpbXBvcnQoZnVuY3Rpb25zKScsICdpbXBvcnQoZnVuY3Rpb25zLCBvcHRpb25zKSddLFxuICBkZXNjcmlwdGlvbjogJ0ltcG9ydCBmdW5jdGlvbnMgb3IgY29uc3RhbnRzIGZyb20gYW4gb2JqZWN0LicsXG4gIGV4YW1wbGVzOiBbJ2ltcG9ydCh7bXlGbjogZih4KT14XjIsIG15Q29uc3RhbnQ6IDMyIH0pJywgJ215Rm4oMiknLCAnbXlDb25zdGFudCddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuaW1wb3J0RG9jcyA9IGltcG9ydERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnR5cGVkRG9jcyA9IHZvaWQgMDtcbnZhciB0eXBlZERvY3MgPSB7XG4gIG5hbWU6ICd0eXBlZCcsXG4gIGNhdGVnb3J5OiAnQ29yZScsXG4gIHN5bnRheDogWyd0eXBlZChzaWduYXR1cmVzKScsICd0eXBlZChuYW1lLCBzaWduYXR1cmVzKSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIHR5cGVkIGZ1bmN0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ2RvdWJsZSA9IHR5cGVkKHsgXCJudW1iZXIsIG51bWJlclwiOiBmKHgpPXgreCB9KScsICdkb3VibGUoMiknLCAnZG91YmxlKFwiaGVsbG9cIiknXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLnR5cGVkRG9jcyA9IHR5cGVkRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZW1iZWRkZWREb2NzID0gdm9pZCAwO1xuXG52YXIgX2JpZ251bWJlciA9IHJlcXVpcmUoXCIuL2NvbnN0cnVjdGlvbi9iaWdudW1iZXJcIik7XG5cbnZhciBfdHlwZU9mID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvdHlwZU9mXCIpO1xuXG52YXIgX2lzWmVybyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2lzWmVyb1wiKTtcblxudmFyIF9pc1ByaW1lID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNQcmltZVwiKTtcblxudmFyIF9pc1Bvc2l0aXZlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNQb3NpdGl2ZVwiKTtcblxudmFyIF9pc051bWVyaWMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc051bWVyaWNcIik7XG5cbnZhciBfaGFzTnVtZXJpY1ZhbHVlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaGFzTnVtZXJpY1ZhbHVlXCIpO1xuXG52YXIgX2lzTmVnYXRpdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc05lZ2F0aXZlXCIpO1xuXG52YXIgX2lzSW50ZWdlciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2lzSW50ZWdlclwiKTtcblxudmFyIF9pc05hTiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2lzTmFOXCIpO1xuXG52YXIgX2Zvcm1hdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2Zvcm1hdFwiKTtcblxudmFyIF9jbG9uZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2Nsb25lXCIpO1xuXG52YXIgX3RvID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdW5pdHMvdG9cIik7XG5cbnZhciBfdGFuaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS90YW5oXCIpO1xuXG52YXIgX3RhbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS90YW5cIik7XG5cbnZhciBfc2luaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9zaW5oXCIpO1xuXG52YXIgX3NlY2ggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2VjaFwiKTtcblxudmFyIF9zZWMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvc2VjXCIpO1xuXG52YXIgX2NzY2ggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvY3NjaFwiKTtcblxudmFyIF9jc2MgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvY3NjXCIpO1xuXG52YXIgX2NvdGggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvY290aFwiKTtcblxudmFyIF9jb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvY290XCIpO1xuXG52YXIgX2Nvc2ggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvY29zaFwiKTtcblxudmFyIF9jb3MgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvY29zXCIpO1xuXG52YXIgX2F0YW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbjJcIik7XG5cbnZhciBfYXRhbmggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhbmhcIik7XG5cbnZhciBfYXRhbjIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXRhblwiKTtcblxudmFyIF9hc2luaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2luaFwiKTtcblxudmFyIF9hc2luID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzaW5cIik7XG5cbnZhciBfYXNlY2ggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXNlY2hcIik7XG5cbnZhciBfYXNlYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2VjXCIpO1xuXG52YXIgX2Fjc2NoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjc2NoXCIpO1xuXG52YXIgX2Fjc2MgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNzY1wiKTtcblxudmFyIF9hY290aCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY290aFwiKTtcblxudmFyIF9hY290ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3RcIik7XG5cbnZhciBfYWNvc2ggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvc2hcIik7XG5cbnZhciBfYWNvcyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY29zXCIpO1xuXG52YXIgX3N1bSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3Mvc3VtXCIpO1xuXG52YXIgX3N0ZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3Mvc3RkXCIpO1xuXG52YXIgX3F1YW50aWxlU2VxID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9xdWFudGlsZVNlcVwiKTtcblxudmFyIF9wcm9kID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9wcm9kXCIpO1xuXG52YXIgX21vZGUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21vZGVcIik7XG5cbnZhciBfbWluID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9taW5cIik7XG5cbnZhciBfbWVkaWFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9tZWRpYW5cIik7XG5cbnZhciBfbWVhbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWVhblwiKTtcblxudmFyIF9tYXggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21heFwiKTtcblxudmFyIF9tYWQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21hZFwiKTtcblxudmFyIF9lcmYgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zcGVjaWFsL2VyZlwiKTtcblxudmFyIF9zZXRVbmlvbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3NldC9zZXRVbmlvblwiKTtcblxudmFyIF9zZXRTeW1EaWZmZXJlbmNlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldFN5bURpZmZlcmVuY2VcIik7XG5cbnZhciBfc2V0U2l6ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3NldC9zZXRTaXplXCIpO1xuXG52YXIgX3NldFBvd2Vyc2V0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldFBvd2Vyc2V0XCIpO1xuXG52YXIgX3NldE11bHRpcGxpY2l0eSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3NldC9zZXRNdWx0aXBsaWNpdHlcIik7XG5cbnZhciBfc2V0SXNTdWJzZXQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0SXNTdWJzZXRcIik7XG5cbnZhciBfc2V0SW50ZXJzZWN0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldEludGVyc2VjdFwiKTtcblxudmFyIF9zZXREaXN0aW5jdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3NldC9zZXREaXN0aW5jdFwiKTtcblxudmFyIF9zZXREaWZmZXJlbmNlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldERpZmZlcmVuY2VcIik7XG5cbnZhciBfc2V0Q2FydGVzaWFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldENhcnRlc2lhblwiKTtcblxudmFyIF91bmVxdWFsID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC91bmVxdWFsXCIpO1xuXG52YXIgX3NtYWxsZXJFcSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvc21hbGxlckVxXCIpO1xuXG52YXIgX3NtYWxsZXIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL3NtYWxsZXJcIik7XG5cbnZhciBfbGFyZ2VyRXEgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL2xhcmdlckVxXCIpO1xuXG52YXIgX2xhcmdlciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvbGFyZ2VyXCIpO1xuXG52YXIgX2VxdWFsVGV4dCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvZXF1YWxUZXh0XCIpO1xuXG52YXIgX2VxdWFsID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9lcXVhbFwiKTtcblxudmFyIF9kZWVwRXF1YWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL2RlZXBFcXVhbFwiKTtcblxudmFyIF9jb21wYXJlVGV4dCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZVRleHRcIik7XG5cbnZhciBfY29tcGFyZU5hdHVyYWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL2NvbXBhcmVOYXR1cmFsXCIpO1xuXG52YXIgX2NvbXBhcmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL2NvbXBhcmVcIik7XG5cbnZhciBfcmFuZG9tSW50ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcHJvYmFiaWxpdHkvcmFuZG9tSW50XCIpO1xuXG52YXIgX3JhbmRvbSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbVwiKTtcblxudmFyIF9waWNrUmFuZG9tID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcHJvYmFiaWxpdHkvcGlja1JhbmRvbVwiKTtcblxudmFyIF9wZXJtdXRhdGlvbnMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9wZXJtdXRhdGlvbnNcIik7XG5cbnZhciBfbXVsdGlub21pYWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9tdWx0aW5vbWlhbFwiKTtcblxudmFyIF9rbGRpdmVyZ2VuY2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9rbGRpdmVyZ2VuY2VcIik7XG5cbnZhciBfZ2FtbWEgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9nYW1tYVwiKTtcblxudmFyIF9mYWN0b3JpYWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9mYWN0b3JpYWxcIik7XG5cbnZhciBfY29tYmluYXRpb25zID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcHJvYmFiaWxpdHkvY29tYmluYXRpb25zXCIpO1xuXG52YXIgX2NvbWJpbmF0aW9uc1dpdGhSZXAgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9jb21iaW5hdGlvbnNXaXRoUmVwXCIpO1xuXG52YXIgX3plcm9zID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3plcm9zXCIpO1xuXG52YXIgX3RyYW5zcG9zZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC90cmFuc3Bvc2VcIik7XG5cbnZhciBfdHJhY2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvdHJhY2VcIik7XG5cbnZhciBfc3Vic2V0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3N1YnNldFwiKTtcblxudmFyIF9zcXVlZXplID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3NxdWVlemVcIik7XG5cbnZhciBfc29ydCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9zb3J0XCIpO1xuXG52YXIgX3NpemUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvc2l6ZVwiKTtcblxudmFyIF9yZXNoYXBlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3Jlc2hhcGVcIik7XG5cbnZhciBfcmVzaXplID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3Jlc2l6ZVwiKTtcblxudmFyIF9yYW5nZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9yYW5nZVwiKTtcblxudmFyIF9wYXJ0aXRpb25TZWxlY3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvcGFydGl0aW9uU2VsZWN0XCIpO1xuXG52YXIgX29uZXMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvb25lc1wiKTtcblxudmFyIF9tYXAgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvbWFwXCIpO1xuXG52YXIgX2tyb24gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgva3JvblwiKTtcblxudmFyIF9pbnYgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvaW52XCIpO1xuXG52YXIgX2ZvckVhY2ggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvZm9yRWFjaFwiKTtcblxudmFyIF9mbGF0dGVuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2ZsYXR0ZW5cIik7XG5cbnZhciBfZmlsdGVyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2ZpbHRlclwiKTtcblxudmFyIF9pZGVudGl0eSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9pZGVudGl0eVwiKTtcblxudmFyIF9nZXRNYXRyaXhEYXRhVHlwZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9nZXRNYXRyaXhEYXRhVHlwZVwiKTtcblxudmFyIF9kb3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvZG90XCIpO1xuXG52YXIgX2RpYWcgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvZGlhZ1wiKTtcblxudmFyIF9kZXQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvZGV0XCIpO1xuXG52YXIgX2N0cmFuc3Bvc2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvY3RyYW5zcG9zZVwiKTtcblxudmFyIF9jcm9zcyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9jcm9zc1wiKTtcblxudmFyIF9jb25jYXQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvY29uY2F0XCIpO1xuXG52YXIgX3hvciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2xvZ2ljYWwveG9yXCIpO1xuXG52YXIgX29yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbG9naWNhbC9vclwiKTtcblxudmFyIF9ub3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9sb2dpY2FsL25vdFwiKTtcblxudmFyIF9hbmQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9sb2dpY2FsL2FuZFwiKTtcblxudmFyIF9pbnRlcnNlY3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9nZW9tZXRyeS9pbnRlcnNlY3RcIik7XG5cbnZhciBfZGlzdGFuY2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9nZW9tZXRyeS9kaXN0YW5jZVwiKTtcblxudmFyIF9oZWxwID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vZXhwcmVzc2lvbi9oZWxwXCIpO1xuXG52YXIgX2V2YWx1YXRlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vZXhwcmVzc2lvbi9ldmFsdWF0ZVwiKTtcblxudmFyIF9pbSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2NvbXBsZXgvaW1cIik7XG5cbnZhciBfcmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21wbGV4L3JlXCIpO1xuXG52YXIgX2NvbmogPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21wbGV4L2NvbmpcIik7XG5cbnZhciBfYXJnID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tcGxleC9hcmdcIik7XG5cbnZhciBfdHlwZWQgPSByZXF1aXJlKFwiLi9jb3JlL3R5cGVkXCIpO1xuXG52YXIgX2ltcG9ydCA9IHJlcXVpcmUoXCIuL2NvcmUvaW1wb3J0XCIpO1xuXG52YXIgX2NvbmZpZyA9IHJlcXVpcmUoXCIuL2NvcmUvY29uZmlnXCIpO1xuXG52YXIgX3N0aXJsaW5nUyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2NvbWJpbmF0b3JpY3Mvc3RpcmxpbmdTMlwiKTtcblxudmFyIF9jb21wb3NpdGlvbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2NvbWJpbmF0b3JpY3MvY29tcG9zaXRpb25cIik7XG5cbnZhciBfY2F0YWxhbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2NvbWJpbmF0b3JpY3MvY2F0YWxhblwiKTtcblxudmFyIF9iZWxsTnVtYmVycyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2NvbWJpbmF0b3JpY3MvYmVsbE51bWJlcnNcIik7XG5cbnZhciBfcmlnaHRMb2dTaGlmdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvcmlnaHRMb2dTaGlmdFwiKTtcblxudmFyIF9yaWdodEFyaXRoU2hpZnQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9iaXR3aXNlL3JpZ2h0QXJpdGhTaGlmdFwiKTtcblxudmFyIF9sZWZ0U2hpZnQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9iaXR3aXNlL2xlZnRTaGlmdFwiKTtcblxudmFyIF9iaXRYb3IgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9iaXR3aXNlL2JpdFhvclwiKTtcblxudmFyIF9iaXRPciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvYml0T3JcIik7XG5cbnZhciBfYml0Tm90ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9iaXROb3RcIik7XG5cbnZhciBfYml0QW5kID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9iaXRBbmRcIik7XG5cbnZhciBfeGdjZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMveGdjZFwiKTtcblxudmFyIF91bmFyeVBsdXMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3VuYXJ5UGx1c1wiKTtcblxudmFyIF91bmFyeU1pbnVzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy91bmFyeU1pbnVzXCIpO1xuXG52YXIgX3NxdWFyZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvc3F1YXJlXCIpO1xuXG52YXIgX3NxcnRtID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9zcXJ0bVwiKTtcblxudmFyIF9zcXJ0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9zcXJ0XCIpO1xuXG52YXIgX3NpZ24gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3NpZ25cIik7XG5cbnZhciBfcm91bmQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3JvdW5kXCIpO1xuXG52YXIgX3BvdyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvcG93XCIpO1xuXG52YXIgX250aFJvb3RzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9udGhSb290c1wiKTtcblxudmFyIF9udGhSb290ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9udGhSb290XCIpO1xuXG52YXIgX25vcm0gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL25vcm1cIik7XG5cbnZhciBfbXVsdGlwbHkgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL211bHRpcGx5XCIpO1xuXG52YXIgX21vZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbW9kXCIpO1xuXG52YXIgX2xvZyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nMTBcIik7XG5cbnZhciBfbG9nMXAgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2xvZzFwXCIpO1xuXG52YXIgX2xvZzIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2xvZzJcIik7XG5cbnZhciBfbG9nMyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbG9nXCIpO1xuXG52YXIgX2xjbSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvbGNtXCIpO1xuXG52YXIgX2h5cG90ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9oeXBvdFwiKTtcblxudmFyIF9nY2QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2djZFwiKTtcblxudmFyIF9mbG9vciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZmxvb3JcIik7XG5cbnZhciBfZml4ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9maXhcIik7XG5cbnZhciBfZXhwbSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZXhwbTFcIik7XG5cbnZhciBfZXhwbTIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2V4cG1cIik7XG5cbnZhciBfZWlncyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9laWdzXCIpO1xuXG52YXIgX2V4cCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZXhwXCIpO1xuXG52YXIgX2RvdE11bHRpcGx5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9kb3RNdWx0aXBseVwiKTtcblxudmFyIF9kb3REaXZpZGUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2RvdERpdmlkZVwiKTtcblxudmFyIF9kaXZpZGUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2RpdmlkZVwiKTtcblxudmFyIF9jdWJlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9jdWJlXCIpO1xuXG52YXIgX2NlaWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2NlaWxcIik7XG5cbnZhciBfY2JydCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvY2JydFwiKTtcblxudmFyIF9hZGQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2FkZFwiKTtcblxudmFyIF9hYnMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2Fic1wiKTtcblxudmFyIF9xciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvcXJcIik7XG5cbnZhciBfdXNvbHZlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS91c29sdmVcIik7XG5cbnZhciBfc2x1ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9zbHVcIik7XG5cbnZhciBfcmF0aW9uYWxpemUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL3JhdGlvbmFsaXplXCIpO1xuXG52YXIgX3NpbXBsaWZ5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9zaW1wbGlmeVwiKTtcblxudmFyIF9sdXAgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL2x1cFwiKTtcblxudmFyIF9sc29sdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL2xzb2x2ZVwiKTtcblxudmFyIF9kZXJpdmF0aXZlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9kZXJpdmF0aXZlXCIpO1xuXG52YXIgX3ZlcnNpb24gPSByZXF1aXJlKFwiLi9jb25zdGFudHMvdmVyc2lvblwiKTtcblxudmFyIF90cnVlID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL3RydWVcIik7XG5cbnZhciBfdGF1ID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL3RhdVwiKTtcblxudmFyIF9TUVJUID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL1NRUlQyXCIpO1xuXG52YXIgX1NRUlQxXyA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy9TUVJUMV8yXCIpO1xuXG52YXIgX3BoaSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy9waGlcIik7XG5cbnZhciBfcGkgPSByZXF1aXJlKFwiLi9jb25zdGFudHMvcGlcIik7XG5cbnZhciBfbnVsbCA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy9udWxsXCIpO1xuXG52YXIgX05hTiA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy9OYU5cIik7XG5cbnZhciBfTE9HMTBFID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL0xPRzEwRVwiKTtcblxudmFyIF9MT0cyRSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy9MT0cyRVwiKTtcblxudmFyIF9MTiA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy9MTjEwXCIpO1xuXG52YXIgX0xOMiA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy9MTjJcIik7XG5cbnZhciBfSW5maW5pdHkgPSByZXF1aXJlKFwiLi9jb25zdGFudHMvSW5maW5pdHlcIik7XG5cbnZhciBfaSA9IHJlcXVpcmUoXCIuL2NvbnN0YW50cy9pXCIpO1xuXG52YXIgX2ZhbHNlID0gcmVxdWlyZShcIi4vY29uc3RhbnRzL2ZhbHNlXCIpO1xuXG52YXIgX2UgPSByZXF1aXJlKFwiLi9jb25zdGFudHMvZVwiKTtcblxudmFyIF91bml0ID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uL3VuaXRcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uL3N0cmluZ1wiKTtcblxudmFyIF9zcGxpdFVuaXQgPSByZXF1aXJlKFwiLi9jb25zdHJ1Y3Rpb24vc3BsaXRVbml0XCIpO1xuXG52YXIgX3NwYXJzZSA9IHJlcXVpcmUoXCIuL2NvbnN0cnVjdGlvbi9zcGFyc2VcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uL251bWJlclwiKTtcblxudmFyIF9tYXRyaXggPSByZXF1aXJlKFwiLi9jb25zdHJ1Y3Rpb24vbWF0cml4XCIpO1xuXG52YXIgX2NvbnN0cnVjdGlvbiA9IHJlcXVpcmUoXCIuL2NvbnN0cnVjdGlvblwiKTtcblxudmFyIF9mcmFjdGlvbiA9IHJlcXVpcmUoXCIuL2NvbnN0cnVjdGlvbi9mcmFjdGlvblwiKTtcblxudmFyIF9jcmVhdGVVbml0ID0gcmVxdWlyZShcIi4vY29uc3RydWN0aW9uL2NyZWF0ZVVuaXRcIik7XG5cbnZhciBfY29tcGxleCA9IHJlcXVpcmUoXCIuL2NvbnN0cnVjdGlvbi9jb21wbGV4XCIpO1xuXG52YXIgX2Jvb2xlYW4gPSByZXF1aXJlKFwiLi9jb25zdHJ1Y3Rpb24vYm9vbGVhblwiKTtcblxudmFyIF9kb3RQb3cgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2RvdFBvd1wiKTtcblxudmFyIF9sdXNvbHZlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9sdXNvbHZlXCIpO1xuXG52YXIgX3N1YnRyYWN0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9zdWJ0cmFjdFwiKTtcblxudmFyIF92YXJpYW5jZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvdmFyaWFuY2VcIik7XG5cbnZhciBfc2luID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L3NpblwiKTtcblxudmFyIF9udW1lcmljID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvbnVtZXJpY1wiKTtcblxudmFyIF9jb2x1bW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvY29sdW1uXCIpO1xuXG52YXIgX3JvdyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9yb3dcIik7XG5cbnZhciBlbWJlZGRlZERvY3MgPSB7XG4gIC8vIGNvbnN0cnVjdGlvbiBmdW5jdGlvbnNcbiAgYmlnbnVtYmVyOiBfYmlnbnVtYmVyLmJpZ251bWJlckRvY3MsXG4gIFwiYm9vbGVhblwiOiBfYm9vbGVhbi5ib29sZWFuRG9jcyxcbiAgY29tcGxleDogX2NvbXBsZXguY29tcGxleERvY3MsXG4gIGNyZWF0ZVVuaXQ6IF9jcmVhdGVVbml0LmNyZWF0ZVVuaXREb2NzLFxuICBmcmFjdGlvbjogX2ZyYWN0aW9uLmZyYWN0aW9uRG9jcyxcbiAgaW5kZXg6IF9jb25zdHJ1Y3Rpb24uaW5kZXhEb2NzLFxuICBtYXRyaXg6IF9tYXRyaXgubWF0cml4RG9jcyxcbiAgbnVtYmVyOiBfbnVtYmVyLm51bWJlckRvY3MsXG4gIHNwYXJzZTogX3NwYXJzZS5zcGFyc2VEb2NzLFxuICBzcGxpdFVuaXQ6IF9zcGxpdFVuaXQuc3BsaXRVbml0RG9jcyxcbiAgc3RyaW5nOiBfc3RyaW5nLnN0cmluZ0RvY3MsXG4gIHVuaXQ6IF91bml0LnVuaXREb2NzLFxuICAvLyBjb25zdGFudHNcbiAgZTogX2UuZURvY3MsXG4gIEU6IF9lLmVEb2NzLFxuICBcImZhbHNlXCI6IF9mYWxzZS5mYWxzZURvY3MsXG4gIGk6IF9pLmlEb2NzLFxuICBJbmZpbml0eTogX0luZmluaXR5LkluZmluaXR5RG9jcyxcbiAgTE4yOiBfTE4yLkxOMkRvY3MsXG4gIExOMTA6IF9MTi5MTjEwRG9jcyxcbiAgTE9HMkU6IF9MT0cyRS5MT0cyRURvY3MsXG4gIExPRzEwRTogX0xPRzEwRS5MT0cxMEVEb2NzLFxuICBOYU46IF9OYU4uTmFORG9jcyxcbiAgXCJudWxsXCI6IF9udWxsLm51bGxEb2NzLFxuICBwaTogX3BpLnBpRG9jcyxcbiAgUEk6IF9waS5waURvY3MsXG4gIHBoaTogX3BoaS5waGlEb2NzLFxuICBTUVJUMV8yOiBfU1FSVDFfLlNRUlQxMkRvY3MsXG4gIFNRUlQyOiBfU1FSVC5TUVJUMkRvY3MsXG4gIHRhdTogX3RhdS50YXVEb2NzLFxuICBcInRydWVcIjogX3RydWUudHJ1ZURvY3MsXG4gIHZlcnNpb246IF92ZXJzaW9uLnZlcnNpb25Eb2NzLFxuICAvLyBwaHlzaWNhbCBjb25zdGFudHNcbiAgLy8gVE9ETzogbW9yZSBkZXRhaWxlZCBkb2NzIGZvciBwaHlzaWNhbCBjb25zdGFudHNcbiAgc3BlZWRPZkxpZ2h0OiB7XG4gICAgZGVzY3JpcHRpb246ICdTcGVlZCBvZiBsaWdodCBpbiB2YWN1dW0nLFxuICAgIGV4YW1wbGVzOiBbJ3NwZWVkT2ZMaWdodCddXG4gIH0sXG4gIGdyYXZpdGF0aW9uQ29uc3RhbnQ6IHtcbiAgICBkZXNjcmlwdGlvbjogJ05ld3RvbmlhbiBjb25zdGFudCBvZiBncmF2aXRhdGlvbicsXG4gICAgZXhhbXBsZXM6IFsnZ3Jhdml0YXRpb25Db25zdGFudCddXG4gIH0sXG4gIHBsYW5ja0NvbnN0YW50OiB7XG4gICAgZGVzY3JpcHRpb246ICdQbGFuY2sgY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ3BsYW5ja0NvbnN0YW50J11cbiAgfSxcbiAgcmVkdWNlZFBsYW5ja0NvbnN0YW50OiB7XG4gICAgZGVzY3JpcHRpb246ICdSZWR1Y2VkIFBsYW5jayBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsncmVkdWNlZFBsYW5ja0NvbnN0YW50J11cbiAgfSxcbiAgbWFnbmV0aWNDb25zdGFudDoge1xuICAgIGRlc2NyaXB0aW9uOiAnTWFnbmV0aWMgY29uc3RhbnQgKHZhY3V1bSBwZXJtZWFiaWxpdHkpJyxcbiAgICBleGFtcGxlczogWydtYWduZXRpY0NvbnN0YW50J11cbiAgfSxcbiAgZWxlY3RyaWNDb25zdGFudDoge1xuICAgIGRlc2NyaXB0aW9uOiAnRWxlY3RyaWMgY29uc3RhbnQgKHZhY3V1bSBwZXJtZWFiaWxpdHkpJyxcbiAgICBleGFtcGxlczogWydlbGVjdHJpY0NvbnN0YW50J11cbiAgfSxcbiAgdmFjdXVtSW1wZWRhbmNlOiB7XG4gICAgZGVzY3JpcHRpb246ICdDaGFyYWN0ZXJpc3RpYyBpbXBlZGFuY2Ugb2YgdmFjdXVtJyxcbiAgICBleGFtcGxlczogWyd2YWN1dW1JbXBlZGFuY2UnXVxuICB9LFxuICBjb3Vsb21iOiB7XG4gICAgZGVzY3JpcHRpb246ICdDb3Vsb21iXFwncyBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsnY291bG9tYiddXG4gIH0sXG4gIGVsZW1lbnRhcnlDaGFyZ2U6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0VsZW1lbnRhcnkgY2hhcmdlJyxcbiAgICBleGFtcGxlczogWydlbGVtZW50YXJ5Q2hhcmdlJ11cbiAgfSxcbiAgYm9ock1hZ25ldG9uOiB7XG4gICAgZGVzY3JpcHRpb246ICdCb3JoIG1hZ25ldG9uJyxcbiAgICBleGFtcGxlczogWydib2hyTWFnbmV0b24nXVxuICB9LFxuICBjb25kdWN0YW5jZVF1YW50dW06IHtcbiAgICBkZXNjcmlwdGlvbjogJ0NvbmR1Y3RhbmNlIHF1YW50dW0nLFxuICAgIGV4YW1wbGVzOiBbJ2NvbmR1Y3RhbmNlUXVhbnR1bSddXG4gIH0sXG4gIGludmVyc2VDb25kdWN0YW5jZVF1YW50dW06IHtcbiAgICBkZXNjcmlwdGlvbjogJ0ludmVyc2UgY29uZHVjdGFuY2UgcXVhbnR1bScsXG4gICAgZXhhbXBsZXM6IFsnaW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bSddXG4gIH0sXG4gIC8vIGpvc2VwaHNvbjoge2Rlc2NyaXB0aW9uOiAnSm9zZXBoc29uIGNvbnN0YW50JywgZXhhbXBsZXM6IFsnam9zZXBoc29uJ119LFxuICBtYWduZXRpY0ZsdXhRdWFudHVtOiB7XG4gICAgZGVzY3JpcHRpb246ICdNYWduZXRpYyBmbHV4IHF1YW50dW0nLFxuICAgIGV4YW1wbGVzOiBbJ21hZ25ldGljRmx1eFF1YW50dW0nXVxuICB9LFxuICBudWNsZWFyTWFnbmV0b246IHtcbiAgICBkZXNjcmlwdGlvbjogJ051Y2xlYXIgbWFnbmV0b24nLFxuICAgIGV4YW1wbGVzOiBbJ251Y2xlYXJNYWduZXRvbiddXG4gIH0sXG4gIGtsaXR6aW5nOiB7XG4gICAgZGVzY3JpcHRpb246ICdWb24gS2xpdHppbmcgY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ2tsaXR6aW5nJ11cbiAgfSxcbiAgYm9oclJhZGl1czoge1xuICAgIGRlc2NyaXB0aW9uOiAnQm9yaCByYWRpdXMnLFxuICAgIGV4YW1wbGVzOiBbJ2JvaHJSYWRpdXMnXVxuICB9LFxuICBjbGFzc2ljYWxFbGVjdHJvblJhZGl1czoge1xuICAgIGRlc2NyaXB0aW9uOiAnQ2xhc3NpY2FsIGVsZWN0cm9uIHJhZGl1cycsXG4gICAgZXhhbXBsZXM6IFsnY2xhc3NpY2FsRWxlY3Ryb25SYWRpdXMnXVxuICB9LFxuICBlbGVjdHJvbk1hc3M6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0VsZWN0cm9uIG1hc3MnLFxuICAgIGV4YW1wbGVzOiBbJ2VsZWN0cm9uTWFzcyddXG4gIH0sXG4gIGZlcm1pQ291cGxpbmc6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0Zlcm1pIGNvdXBsaW5nIGNvbnN0YW50JyxcbiAgICBleGFtcGxlczogWydmZXJtaUNvdXBsaW5nJ11cbiAgfSxcbiAgZmluZVN0cnVjdHVyZToge1xuICAgIGRlc2NyaXB0aW9uOiAnRmluZS1zdHJ1Y3R1cmUgY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ2ZpbmVTdHJ1Y3R1cmUnXVxuICB9LFxuICBoYXJ0cmVlRW5lcmd5OiB7XG4gICAgZGVzY3JpcHRpb246ICdIYXJ0cmVlIGVuZXJneScsXG4gICAgZXhhbXBsZXM6IFsnaGFydHJlZUVuZXJneSddXG4gIH0sXG4gIHByb3Rvbk1hc3M6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1Byb3RvbiBtYXNzJyxcbiAgICBleGFtcGxlczogWydwcm90b25NYXNzJ11cbiAgfSxcbiAgZGV1dGVyb25NYXNzOiB7XG4gICAgZGVzY3JpcHRpb246ICdEZXV0ZXJvbiBNYXNzJyxcbiAgICBleGFtcGxlczogWydkZXV0ZXJvbk1hc3MnXVxuICB9LFxuICBuZXV0cm9uTWFzczoge1xuICAgIGRlc2NyaXB0aW9uOiAnTmV1dHJvbiBtYXNzJyxcbiAgICBleGFtcGxlczogWyduZXV0cm9uTWFzcyddXG4gIH0sXG4gIHF1YW50dW1PZkNpcmN1bGF0aW9uOiB7XG4gICAgZGVzY3JpcHRpb246ICdRdWFudHVtIG9mIGNpcmN1bGF0aW9uJyxcbiAgICBleGFtcGxlczogWydxdWFudHVtT2ZDaXJjdWxhdGlvbiddXG4gIH0sXG4gIHJ5ZGJlcmc6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1J5ZGJlcmcgY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ3J5ZGJlcmcnXVxuICB9LFxuICB0aG9tc29uQ3Jvc3NTZWN0aW9uOiB7XG4gICAgZGVzY3JpcHRpb246ICdUaG9tc29uIGNyb3NzIHNlY3Rpb24nLFxuICAgIGV4YW1wbGVzOiBbJ3Rob21zb25Dcm9zc1NlY3Rpb24nXVxuICB9LFxuICB3ZWFrTWl4aW5nQW5nbGU6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1dlYWsgbWl4aW5nIGFuZ2xlJyxcbiAgICBleGFtcGxlczogWyd3ZWFrTWl4aW5nQW5nbGUnXVxuICB9LFxuICBlZmltb3ZGYWN0b3I6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0VmaW1vdiBmYWN0b3InLFxuICAgIGV4YW1wbGVzOiBbJ2VmaW1vdkZhY3RvciddXG4gIH0sXG4gIGF0b21pY01hc3M6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0F0b21pYyBtYXNzIGNvbnN0YW50JyxcbiAgICBleGFtcGxlczogWydhdG9taWNNYXNzJ11cbiAgfSxcbiAgYXZvZ2Fkcm86IHtcbiAgICBkZXNjcmlwdGlvbjogJ0F2b2dhZHJvXFwncyBudW1iZXInLFxuICAgIGV4YW1wbGVzOiBbJ2F2b2dhZHJvJ11cbiAgfSxcbiAgYm9sdHptYW5uOiB7XG4gICAgZGVzY3JpcHRpb246ICdCb2x0em1hbm4gY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ2JvbHR6bWFubiddXG4gIH0sXG4gIGZhcmFkYXk6IHtcbiAgICBkZXNjcmlwdGlvbjogJ0ZhcmFkYXkgY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ2ZhcmFkYXknXVxuICB9LFxuICBmaXJzdFJhZGlhdGlvbjoge1xuICAgIGRlc2NyaXB0aW9uOiAnRmlyc3QgcmFkaWF0aW9uIGNvbnN0YW50JyxcbiAgICBleGFtcGxlczogWydmaXJzdFJhZGlhdGlvbiddXG4gIH0sXG4gIGxvc2NobWlkdDoge1xuICAgIGRlc2NyaXB0aW9uOiAnTG9zY2htaWR0IGNvbnN0YW50IGF0IFQ9MjczLjE1IEsgYW5kIHA9MTAxLjMyNSBrUGEnLFxuICAgIGV4YW1wbGVzOiBbJ2xvc2NobWlkdCddXG4gIH0sXG4gIGdhc0NvbnN0YW50OiB7XG4gICAgZGVzY3JpcHRpb246ICdHYXMgY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ2dhc0NvbnN0YW50J11cbiAgfSxcbiAgbW9sYXJQbGFuY2tDb25zdGFudDoge1xuICAgIGRlc2NyaXB0aW9uOiAnTW9sYXIgUGxhbmNrIGNvbnN0YW50JyxcbiAgICBleGFtcGxlczogWydtb2xhclBsYW5ja0NvbnN0YW50J11cbiAgfSxcbiAgbW9sYXJWb2x1bWU6IHtcbiAgICBkZXNjcmlwdGlvbjogJ01vbGFyIHZvbHVtZSBvZiBhbiBpZGVhbCBnYXMgYXQgVD0yNzMuMTUgSyBhbmQgcD0xMDEuMzI1IGtQYScsXG4gICAgZXhhbXBsZXM6IFsnbW9sYXJWb2x1bWUnXVxuICB9LFxuICBzYWNrdXJUZXRyb2RlOiB7XG4gICAgZGVzY3JpcHRpb246ICdTYWNrdXItVGV0cm9kZSBjb25zdGFudCBhdCBUPTEgSyBhbmQgcD0xMDEuMzI1IGtQYScsXG4gICAgZXhhbXBsZXM6IFsnc2Fja3VyVGV0cm9kZSddXG4gIH0sXG4gIHNlY29uZFJhZGlhdGlvbjoge1xuICAgIGRlc2NyaXB0aW9uOiAnU2Vjb25kIHJhZGlhdGlvbiBjb25zdGFudCcsXG4gICAgZXhhbXBsZXM6IFsnc2Vjb25kUmFkaWF0aW9uJ11cbiAgfSxcbiAgc3RlZmFuQm9sdHptYW5uOiB7XG4gICAgZGVzY3JpcHRpb246ICdTdGVmYW4tQm9sdHptYW5uIGNvbnN0YW50JyxcbiAgICBleGFtcGxlczogWydzdGVmYW5Cb2x0em1hbm4nXVxuICB9LFxuICB3aWVuRGlzcGxhY2VtZW50OiB7XG4gICAgZGVzY3JpcHRpb246ICdXaWVuIGRpc3BsYWNlbWVudCBsYXcgY29uc3RhbnQnLFxuICAgIGV4YW1wbGVzOiBbJ3dpZW5EaXNwbGFjZW1lbnQnXVxuICB9LFxuICAvLyBzcGVjdHJhbFJhZGlhbmNlOiB7ZGVzY3JpcHRpb246ICdGaXJzdCByYWRpYXRpb24gY29uc3RhbnQgZm9yIHNwZWN0cmFsIHJhZGlhbmNlJywgZXhhbXBsZXM6IFsnc3BlY3RyYWxSYWRpYW5jZSddfSxcbiAgbW9sYXJNYXNzOiB7XG4gICAgZGVzY3JpcHRpb246ICdNb2xhciBtYXNzIGNvbnN0YW50JyxcbiAgICBleGFtcGxlczogWydtb2xhck1hc3MnXVxuICB9LFxuICBtb2xhck1hc3NDMTI6IHtcbiAgICBkZXNjcmlwdGlvbjogJ01vbGFyIG1hc3MgY29uc3RhbnQgb2YgY2FyYm9uLTEyJyxcbiAgICBleGFtcGxlczogWydtb2xhck1hc3NDMTInXVxuICB9LFxuICBncmF2aXR5OiB7XG4gICAgZGVzY3JpcHRpb246ICdTdGFuZGFyZCBhY2NlbGVyYXRpb24gb2YgZ3Jhdml0eSAoc3RhbmRhcmQgYWNjZWxlcmF0aW9uIG9mIGZyZWUtZmFsbCBvbiBFYXJ0aCknLFxuICAgIGV4YW1wbGVzOiBbJ2dyYXZpdHknXVxuICB9LFxuICBwbGFuY2tMZW5ndGg6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1BsYW5jayBsZW5ndGgnLFxuICAgIGV4YW1wbGVzOiBbJ3BsYW5ja0xlbmd0aCddXG4gIH0sXG4gIHBsYW5ja01hc3M6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1BsYW5jayBtYXNzJyxcbiAgICBleGFtcGxlczogWydwbGFuY2tNYXNzJ11cbiAgfSxcbiAgcGxhbmNrVGltZToge1xuICAgIGRlc2NyaXB0aW9uOiAnUGxhbmNrIHRpbWUnLFxuICAgIGV4YW1wbGVzOiBbJ3BsYW5ja1RpbWUnXVxuICB9LFxuICBwbGFuY2tDaGFyZ2U6IHtcbiAgICBkZXNjcmlwdGlvbjogJ1BsYW5jayBjaGFyZ2UnLFxuICAgIGV4YW1wbGVzOiBbJ3BsYW5ja0NoYXJnZSddXG4gIH0sXG4gIHBsYW5ja1RlbXBlcmF0dXJlOiB7XG4gICAgZGVzY3JpcHRpb246ICdQbGFuY2sgdGVtcGVyYXR1cmUnLFxuICAgIGV4YW1wbGVzOiBbJ3BsYW5ja1RlbXBlcmF0dXJlJ11cbiAgfSxcbiAgLy8gZnVuY3Rpb25zIC0gYWxnZWJyYVxuICBkZXJpdmF0aXZlOiBfZGVyaXZhdGl2ZS5kZXJpdmF0aXZlRG9jcyxcbiAgbHNvbHZlOiBfbHNvbHZlLmxzb2x2ZURvY3MsXG4gIGx1cDogX2x1cC5sdXBEb2NzLFxuICBsdXNvbHZlOiBfbHVzb2x2ZS5sdXNvbHZlRG9jcyxcbiAgc2ltcGxpZnk6IF9zaW1wbGlmeS5zaW1wbGlmeURvY3MsXG4gIHJhdGlvbmFsaXplOiBfcmF0aW9uYWxpemUucmF0aW9uYWxpemVEb2NzLFxuICBzbHU6IF9zbHUuc2x1RG9jcyxcbiAgdXNvbHZlOiBfdXNvbHZlLnVzb2x2ZURvY3MsXG4gIHFyOiBfcXIucXJEb2NzLFxuICAvLyBmdW5jdGlvbnMgLSBhcml0aG1ldGljXG4gIGFiczogX2Ficy5hYnNEb2NzLFxuICBhZGQ6IF9hZGQuYWRkRG9jcyxcbiAgY2JydDogX2NicnQuY2JydERvY3MsXG4gIGNlaWw6IF9jZWlsLmNlaWxEb2NzLFxuICBjdWJlOiBfY3ViZS5jdWJlRG9jcyxcbiAgZGl2aWRlOiBfZGl2aWRlLmRpdmlkZURvY3MsXG4gIGRvdERpdmlkZTogX2RvdERpdmlkZS5kb3REaXZpZGVEb2NzLFxuICBkb3RNdWx0aXBseTogX2RvdE11bHRpcGx5LmRvdE11bHRpcGx5RG9jcyxcbiAgZG90UG93OiBfZG90UG93LmRvdFBvd0RvY3MsXG4gIGV4cDogX2V4cC5leHBEb2NzLFxuICBleHBtOiBfZXhwbTIuZXhwbURvY3MsXG4gIGV4cG0xOiBfZXhwbS5leHBtMURvY3MsXG4gIGZpeDogX2ZpeC5maXhEb2NzLFxuICBmbG9vcjogX2Zsb29yLmZsb29yRG9jcyxcbiAgZ2NkOiBfZ2NkLmdjZERvY3MsXG4gIGh5cG90OiBfaHlwb3QuaHlwb3REb2NzLFxuICBsY206IF9sY20ubGNtRG9jcyxcbiAgbG9nOiBfbG9nMy5sb2dEb2NzLFxuICBsb2cyOiBfbG9nMi5sb2cyRG9jcyxcbiAgbG9nMXA6IF9sb2cxcC5sb2cxcERvY3MsXG4gIGxvZzEwOiBfbG9nLmxvZzEwRG9jcyxcbiAgbW9kOiBfbW9kLm1vZERvY3MsXG4gIG11bHRpcGx5OiBfbXVsdGlwbHkubXVsdGlwbHlEb2NzLFxuICBub3JtOiBfbm9ybS5ub3JtRG9jcyxcbiAgbnRoUm9vdDogX250aFJvb3QubnRoUm9vdERvY3MsXG4gIG50aFJvb3RzOiBfbnRoUm9vdHMubnRoUm9vdHNEb2NzLFxuICBwb3c6IF9wb3cucG93RG9jcyxcbiAgcm91bmQ6IF9yb3VuZC5yb3VuZERvY3MsXG4gIHNpZ246IF9zaWduLnNpZ25Eb2NzLFxuICBzcXJ0OiBfc3FydC5zcXJ0RG9jcyxcbiAgc3FydG06IF9zcXJ0bS5zcXJ0bURvY3MsXG4gIHNxdWFyZTogX3NxdWFyZS5zcXVhcmVEb2NzLFxuICBzdWJ0cmFjdDogX3N1YnRyYWN0LnN1YnRyYWN0RG9jcyxcbiAgdW5hcnlNaW51czogX3VuYXJ5TWludXMudW5hcnlNaW51c0RvY3MsXG4gIHVuYXJ5UGx1czogX3VuYXJ5UGx1cy51bmFyeVBsdXNEb2NzLFxuICB4Z2NkOiBfeGdjZC54Z2NkRG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gYml0d2lzZVxuICBiaXRBbmQ6IF9iaXRBbmQuYml0QW5kRG9jcyxcbiAgYml0Tm90OiBfYml0Tm90LmJpdE5vdERvY3MsXG4gIGJpdE9yOiBfYml0T3IuYml0T3JEb2NzLFxuICBiaXRYb3I6IF9iaXRYb3IuYml0WG9yRG9jcyxcbiAgbGVmdFNoaWZ0OiBfbGVmdFNoaWZ0LmxlZnRTaGlmdERvY3MsXG4gIHJpZ2h0QXJpdGhTaGlmdDogX3JpZ2h0QXJpdGhTaGlmdC5yaWdodEFyaXRoU2hpZnREb2NzLFxuICByaWdodExvZ1NoaWZ0OiBfcmlnaHRMb2dTaGlmdC5yaWdodExvZ1NoaWZ0RG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gY29tYmluYXRvcmljc1xuICBiZWxsTnVtYmVyczogX2JlbGxOdW1iZXJzLmJlbGxOdW1iZXJzRG9jcyxcbiAgY2F0YWxhbjogX2NhdGFsYW4uY2F0YWxhbkRvY3MsXG4gIGNvbXBvc2l0aW9uOiBfY29tcG9zaXRpb24uY29tcG9zaXRpb25Eb2NzLFxuICBzdGlybGluZ1MyOiBfc3RpcmxpbmdTLnN0aXJsaW5nUzJEb2NzLFxuICAvLyBmdW5jdGlvbnMgLSBjb3JlXG4gIGNvbmZpZzogX2NvbmZpZy5jb25maWdEb2NzLFxuICBcImltcG9ydFwiOiBfaW1wb3J0LmltcG9ydERvY3MsXG4gIHR5cGVkOiBfdHlwZWQudHlwZWREb2NzLFxuICAvLyBmdW5jdGlvbnMgLSBjb21wbGV4XG4gIGFyZzogX2FyZy5hcmdEb2NzLFxuICBjb25qOiBfY29uai5jb25qRG9jcyxcbiAgcmU6IF9yZS5yZURvY3MsXG4gIGltOiBfaW0uaW1Eb2NzLFxuICAvLyBmdW5jdGlvbnMgLSBleHByZXNzaW9uXG4gIGV2YWx1YXRlOiBfZXZhbHVhdGUuZXZhbHVhdGVEb2NzLFxuICBldmFsOiBfZXZhbHVhdGUuZXZhbHVhdGVEb2NzLFxuICAvLyBUT0RPOiBkZXByZWNhdGVkLCBjbGVhbnVwIGluIHY3XG4gIGhlbHA6IF9oZWxwLmhlbHBEb2NzLFxuICAvLyBmdW5jdGlvbnMgLSBnZW9tZXRyeVxuICBkaXN0YW5jZTogX2Rpc3RhbmNlLmRpc3RhbmNlRG9jcyxcbiAgaW50ZXJzZWN0OiBfaW50ZXJzZWN0LmludGVyc2VjdERvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIGxvZ2ljYWxcbiAgYW5kOiBfYW5kLmFuZERvY3MsXG4gIG5vdDogX25vdC5ub3REb2NzLFxuICBvcjogX29yLm9yRG9jcyxcbiAgeG9yOiBfeG9yLnhvckRvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIG1hdHJpeFxuICBjb25jYXQ6IF9jb25jYXQuY29uY2F0RG9jcyxcbiAgY3Jvc3M6IF9jcm9zcy5jcm9zc0RvY3MsXG4gIGNvbHVtbjogX2NvbHVtbi5jb2x1bW5Eb2NzLFxuICBjdHJhbnNwb3NlOiBfY3RyYW5zcG9zZS5jdHJhbnNwb3NlRG9jcyxcbiAgZGV0OiBfZGV0LmRldERvY3MsXG4gIGRpYWc6IF9kaWFnLmRpYWdEb2NzLFxuICBkb3Q6IF9kb3QuZG90RG9jcyxcbiAgZ2V0TWF0cml4RGF0YVR5cGU6IF9nZXRNYXRyaXhEYXRhVHlwZS5nZXRNYXRyaXhEYXRhVHlwZURvY3MsXG4gIGlkZW50aXR5OiBfaWRlbnRpdHkuaWRlbnRpdHlEb2NzLFxuICBmaWx0ZXI6IF9maWx0ZXIuZmlsdGVyRG9jcyxcbiAgZmxhdHRlbjogX2ZsYXR0ZW4uZmxhdHRlbkRvY3MsXG4gIGZvckVhY2g6IF9mb3JFYWNoLmZvckVhY2hEb2NzLFxuICBpbnY6IF9pbnYuaW52RG9jcyxcbiAgZWlnczogX2VpZ3MuZWlnc0RvY3MsXG4gIGtyb246IF9rcm9uLmtyb25Eb2NzLFxuICBtYXA6IF9tYXAubWFwRG9jcyxcbiAgb25lczogX29uZXMub25lc0RvY3MsXG4gIHBhcnRpdGlvblNlbGVjdDogX3BhcnRpdGlvblNlbGVjdC5wYXJ0aXRpb25TZWxlY3REb2NzLFxuICByYW5nZTogX3JhbmdlLnJhbmdlRG9jcyxcbiAgcmVzaXplOiBfcmVzaXplLnJlc2l6ZURvY3MsXG4gIHJlc2hhcGU6IF9yZXNoYXBlLnJlc2hhcGVEb2NzLFxuICByb3c6IF9yb3cucm93RG9jcyxcbiAgc2l6ZTogX3NpemUuc2l6ZURvY3MsXG4gIHNvcnQ6IF9zb3J0LnNvcnREb2NzLFxuICBzcXVlZXplOiBfc3F1ZWV6ZS5zcXVlZXplRG9jcyxcbiAgc3Vic2V0OiBfc3Vic2V0LnN1YnNldERvY3MsXG4gIHRyYWNlOiBfdHJhY2UudHJhY2VEb2NzLFxuICB0cmFuc3Bvc2U6IF90cmFuc3Bvc2UudHJhbnNwb3NlRG9jcyxcbiAgemVyb3M6IF96ZXJvcy56ZXJvc0RvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIHByb2JhYmlsaXR5XG4gIGNvbWJpbmF0aW9uczogX2NvbWJpbmF0aW9ucy5jb21iaW5hdGlvbnNEb2NzLFxuICBjb21iaW5hdGlvbnNXaXRoUmVwOiBfY29tYmluYXRpb25zV2l0aFJlcC5jb21iaW5hdGlvbnNXaXRoUmVwRG9jcyxcbiAgLy8gZGlzdHJpYnV0aW9uOiBkaXN0cmlidXRpb25Eb2NzLFxuICBmYWN0b3JpYWw6IF9mYWN0b3JpYWwuZmFjdG9yaWFsRG9jcyxcbiAgZ2FtbWE6IF9nYW1tYS5nYW1tYURvY3MsXG4gIGtsZGl2ZXJnZW5jZTogX2tsZGl2ZXJnZW5jZS5rbGRpdmVyZ2VuY2VEb2NzLFxuICBtdWx0aW5vbWlhbDogX211bHRpbm9taWFsLm11bHRpbm9taWFsRG9jcyxcbiAgcGVybXV0YXRpb25zOiBfcGVybXV0YXRpb25zLnBlcm11dGF0aW9uc0RvY3MsXG4gIHBpY2tSYW5kb206IF9waWNrUmFuZG9tLnBpY2tSYW5kb21Eb2NzLFxuICByYW5kb206IF9yYW5kb20ucmFuZG9tRG9jcyxcbiAgcmFuZG9tSW50OiBfcmFuZG9tSW50LnJhbmRvbUludERvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIHJlbGF0aW9uYWxcbiAgY29tcGFyZTogX2NvbXBhcmUuY29tcGFyZURvY3MsXG4gIGNvbXBhcmVOYXR1cmFsOiBfY29tcGFyZU5hdHVyYWwuY29tcGFyZU5hdHVyYWxEb2NzLFxuICBjb21wYXJlVGV4dDogX2NvbXBhcmVUZXh0LmNvbXBhcmVUZXh0RG9jcyxcbiAgZGVlcEVxdWFsOiBfZGVlcEVxdWFsLmRlZXBFcXVhbERvY3MsXG4gIGVxdWFsOiBfZXF1YWwuZXF1YWxEb2NzLFxuICBlcXVhbFRleHQ6IF9lcXVhbFRleHQuZXF1YWxUZXh0RG9jcyxcbiAgbGFyZ2VyOiBfbGFyZ2VyLmxhcmdlckRvY3MsXG4gIGxhcmdlckVxOiBfbGFyZ2VyRXEubGFyZ2VyRXFEb2NzLFxuICBzbWFsbGVyOiBfc21hbGxlci5zbWFsbGVyRG9jcyxcbiAgc21hbGxlckVxOiBfc21hbGxlckVxLnNtYWxsZXJFcURvY3MsXG4gIHVuZXF1YWw6IF91bmVxdWFsLnVuZXF1YWxEb2NzLFxuICAvLyBmdW5jdGlvbnMgLSBzZXRcbiAgc2V0Q2FydGVzaWFuOiBfc2V0Q2FydGVzaWFuLnNldENhcnRlc2lhbkRvY3MsXG4gIHNldERpZmZlcmVuY2U6IF9zZXREaWZmZXJlbmNlLnNldERpZmZlcmVuY2VEb2NzLFxuICBzZXREaXN0aW5jdDogX3NldERpc3RpbmN0LnNldERpc3RpbmN0RG9jcyxcbiAgc2V0SW50ZXJzZWN0OiBfc2V0SW50ZXJzZWN0LnNldEludGVyc2VjdERvY3MsXG4gIHNldElzU3Vic2V0OiBfc2V0SXNTdWJzZXQuc2V0SXNTdWJzZXREb2NzLFxuICBzZXRNdWx0aXBsaWNpdHk6IF9zZXRNdWx0aXBsaWNpdHkuc2V0TXVsdGlwbGljaXR5RG9jcyxcbiAgc2V0UG93ZXJzZXQ6IF9zZXRQb3dlcnNldC5zZXRQb3dlcnNldERvY3MsXG4gIHNldFNpemU6IF9zZXRTaXplLnNldFNpemVEb2NzLFxuICBzZXRTeW1EaWZmZXJlbmNlOiBfc2V0U3ltRGlmZmVyZW5jZS5zZXRTeW1EaWZmZXJlbmNlRG9jcyxcbiAgc2V0VW5pb246IF9zZXRVbmlvbi5zZXRVbmlvbkRvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIHNwZWNpYWxcbiAgZXJmOiBfZXJmLmVyZkRvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIHN0YXRpc3RpY3NcbiAgbWFkOiBfbWFkLm1hZERvY3MsXG4gIG1heDogX21heC5tYXhEb2NzLFxuICBtZWFuOiBfbWVhbi5tZWFuRG9jcyxcbiAgbWVkaWFuOiBfbWVkaWFuLm1lZGlhbkRvY3MsXG4gIG1pbjogX21pbi5taW5Eb2NzLFxuICBtb2RlOiBfbW9kZS5tb2RlRG9jcyxcbiAgcHJvZDogX3Byb2QucHJvZERvY3MsXG4gIHF1YW50aWxlU2VxOiBfcXVhbnRpbGVTZXEucXVhbnRpbGVTZXFEb2NzLFxuICBzdGQ6IF9zdGQuc3RkRG9jcyxcbiAgc3VtOiBfc3VtLnN1bURvY3MsXG4gIHZhcmlhbmNlOiBfdmFyaWFuY2UudmFyaWFuY2VEb2NzLFxuICBcInZhclwiOiBfdmFyaWFuY2UudmFyaWFuY2VEb2NzLFxuICAvLyBUT0RPOiBkZXByZWNhdGVkLCBjbGVhbnVwIGluIHY3XG4gIC8vIGZ1bmN0aW9ucyAtIHRyaWdvbm9tZXRyeVxuICBhY29zOiBfYWNvcy5hY29zRG9jcyxcbiAgYWNvc2g6IF9hY29zaC5hY29zaERvY3MsXG4gIGFjb3Q6IF9hY290LmFjb3REb2NzLFxuICBhY290aDogX2Fjb3RoLmFjb3RoRG9jcyxcbiAgYWNzYzogX2Fjc2MuYWNzY0RvY3MsXG4gIGFjc2NoOiBfYWNzY2guYWNzY2hEb2NzLFxuICBhc2VjOiBfYXNlYy5hc2VjRG9jcyxcbiAgYXNlY2g6IF9hc2VjaC5hc2VjaERvY3MsXG4gIGFzaW46IF9hc2luLmFzaW5Eb2NzLFxuICBhc2luaDogX2FzaW5oLmFzaW5oRG9jcyxcbiAgYXRhbjogX2F0YW4yLmF0YW5Eb2NzLFxuICBhdGFuaDogX2F0YW5oLmF0YW5oRG9jcyxcbiAgYXRhbjI6IF9hdGFuLmF0YW4yRG9jcyxcbiAgY29zOiBfY29zLmNvc0RvY3MsXG4gIGNvc2g6IF9jb3NoLmNvc2hEb2NzLFxuICBjb3Q6IF9jb3QuY290RG9jcyxcbiAgY290aDogX2NvdGguY290aERvY3MsXG4gIGNzYzogX2NzYy5jc2NEb2NzLFxuICBjc2NoOiBfY3NjaC5jc2NoRG9jcyxcbiAgc2VjOiBfc2VjLnNlY0RvY3MsXG4gIHNlY2g6IF9zZWNoLnNlY2hEb2NzLFxuICBzaW46IF9zaW4uc2luRG9jcyxcbiAgc2luaDogX3Npbmguc2luaERvY3MsXG4gIHRhbjogX3Rhbi50YW5Eb2NzLFxuICB0YW5oOiBfdGFuaC50YW5oRG9jcyxcbiAgLy8gZnVuY3Rpb25zIC0gdW5pdHNcbiAgdG86IF90by50b0RvY3MsXG4gIC8vIGZ1bmN0aW9ucyAtIHV0aWxzXG4gIGNsb25lOiBfY2xvbmUuY2xvbmVEb2NzLFxuICBmb3JtYXQ6IF9mb3JtYXQuZm9ybWF0RG9jcyxcbiAgaXNOYU46IF9pc05hTi5pc05hTkRvY3MsXG4gIGlzSW50ZWdlcjogX2lzSW50ZWdlci5pc0ludGVnZXJEb2NzLFxuICBpc05lZ2F0aXZlOiBfaXNOZWdhdGl2ZS5pc05lZ2F0aXZlRG9jcyxcbiAgaXNOdW1lcmljOiBfaXNOdW1lcmljLmlzTnVtZXJpY0RvY3MsXG4gIGhhc051bWVyaWNWYWx1ZTogX2hhc051bWVyaWNWYWx1ZS5oYXNOdW1lcmljVmFsdWVEb2NzLFxuICBpc1Bvc2l0aXZlOiBfaXNQb3NpdGl2ZS5pc1Bvc2l0aXZlRG9jcyxcbiAgaXNQcmltZTogX2lzUHJpbWUuaXNQcmltZURvY3MsXG4gIGlzWmVybzogX2lzWmVyby5pc1plcm9Eb2NzLFxuICAvLyBwcmludDogcHJpbnREb2NzIC8vIFRPRE86IGFkZCBkb2N1bWVudGF0aW9uIGZvciBwcmludCBhcyBzb29uIGFzIHRoZSBwYXJzZXIgc3VwcG9ydHMgb2JqZWN0cy5cbiAgdHlwZU9mOiBfdHlwZU9mLnR5cGVPZkRvY3MsXG4gIFwidHlwZW9mXCI6IF90eXBlT2YudHlwZU9mRG9jcyxcbiAgLy8gVE9ETzogZGVwcmVjYXRlZCwgY2xlYW51cCBpbiB2N1xuICBudW1lcmljOiBfbnVtZXJpYy5udW1lcmljRG9jc1xufTtcbmV4cG9ydHMuZW1iZWRkZWREb2NzID0gZW1iZWRkZWREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZXJpdmF0aXZlRG9jcyA9IHZvaWQgMDtcbnZhciBkZXJpdmF0aXZlRG9jcyA9IHtcbiAgbmFtZTogJ2Rlcml2YXRpdmUnLFxuICBjYXRlZ29yeTogJ0FsZ2VicmEnLFxuICBzeW50YXg6IFsnZGVyaXZhdGl2ZShleHByLCB2YXJpYWJsZSknLCAnZGVyaXZhdGl2ZShleHByLCB2YXJpYWJsZSwge3NpbXBsaWZ5OiBib29sZWFufSknXSxcbiAgZGVzY3JpcHRpb246ICdUYWtlcyB0aGUgZGVyaXZhdGl2ZSBvZiBhbiBleHByZXNzaW9uIGV4cHJlc3NlZCBpbiBwYXJzZXIgTm9kZXMuIFRoZSBkZXJpdmF0aXZlIHdpbGwgYmUgdGFrZW4gb3ZlciB0aGUgc3VwcGxpZWQgdmFyaWFibGUgaW4gdGhlIHNlY29uZCBwYXJhbWV0ZXIuIElmIHRoZXJlIGFyZSBtdWx0aXBsZSB2YXJpYWJsZXMgaW4gdGhlIGV4cHJlc3Npb24sIGl0IHdpbGwgcmV0dXJuIGEgcGFydGlhbCBkZXJpdmF0aXZlLicsXG4gIGV4YW1wbGVzOiBbJ2Rlcml2YXRpdmUoXCIyeF4zXCIsIFwieFwiKScsICdkZXJpdmF0aXZlKFwiMnheM1wiLCBcInhcIiwge3NpbXBsaWZ5OiBmYWxzZX0pJywgJ2Rlcml2YXRpdmUoXCIyeF4yICsgM3ggKyA0XCIsIFwieFwiKScsICdkZXJpdmF0aXZlKFwic2luKDJ4KVwiLCBcInhcIiknLCAnZiA9IHBhcnNlKFwieF4yICsgeFwiKScsICd4ID0gcGFyc2UoXCJ4XCIpJywgJ2RmID0gZGVyaXZhdGl2ZShmLCB4KScsICdkZi5ldmFsdWF0ZSh7eDogM30pJ10sXG4gIHNlZWFsc286IFsnc2ltcGxpZnknLCAncGFyc2UnLCAnZXZhbHVhdGUnXVxufTtcbmV4cG9ydHMuZGVyaXZhdGl2ZURvY3MgPSBkZXJpdmF0aXZlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubHNvbHZlRG9jcyA9IHZvaWQgMDtcbnZhciBsc29sdmVEb2NzID0ge1xuICBuYW1lOiAnbHNvbHZlJyxcbiAgY2F0ZWdvcnk6ICdBbGdlYnJhJyxcbiAgc3ludGF4OiBbJ3g9bHNvbHZlKEwsIGIpJ10sXG4gIGRlc2NyaXB0aW9uOiAnU29sdmVzIHRoZSBsaW5lYXIgc3lzdGVtIEwgKiB4ID0gYiB3aGVyZSBMIGlzIGFuIFtuIHggbl0gbG93ZXIgdHJpYW5ndWxhciBtYXRyaXggYW5kIGIgaXMgYSBbbl0gY29sdW1uIHZlY3Rvci4nLFxuICBleGFtcGxlczogWydhID0gWy0yLCAzOyAyLCAxXScsICdiID0gWzExLCA5XScsICd4ID0gbHNvbHZlKGEsIGIpJ10sXG4gIHNlZWFsc286IFsnbHVwJywgJ2x1c29sdmUnLCAndXNvbHZlJywgJ21hdHJpeCcsICdzcGFyc2UnXVxufTtcbmV4cG9ydHMubHNvbHZlRG9jcyA9IGxzb2x2ZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmx1cERvY3MgPSB2b2lkIDA7XG52YXIgbHVwRG9jcyA9IHtcbiAgbmFtZTogJ2x1cCcsXG4gIGNhdGVnb3J5OiAnQWxnZWJyYScsXG4gIHN5bnRheDogWydsdXAobSknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIE1hdHJpeCBMVSBkZWNvbXBvc2l0aW9uIHdpdGggcGFydGlhbCBwaXZvdGluZy4gTWF0cml4IEEgaXMgZGVjb21wb3NlZCBpbiB0aHJlZSBtYXRyaWNlcyAoTCwgVSwgUCkgd2hlcmUgUCAqIEEgPSBMICogVScsXG4gIGV4YW1wbGVzOiBbJ2x1cChbWzIsIDFdLCBbMSwgNF1dKScsICdsdXAobWF0cml4KFtbMiwgMV0sIFsxLCA0XV0pKScsICdsdXAoc3BhcnNlKFtbMiwgMV0sIFsxLCA0XV0pKSddLFxuICBzZWVhbHNvOiBbJ2x1c29sdmUnLCAnbHNvbHZlJywgJ3Vzb2x2ZScsICdtYXRyaXgnLCAnc3BhcnNlJywgJ3NsdScsICdxciddXG59O1xuZXhwb3J0cy5sdXBEb2NzID0gbHVwRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubHVzb2x2ZURvY3MgPSB2b2lkIDA7XG52YXIgbHVzb2x2ZURvY3MgPSB7XG4gIG5hbWU6ICdsdXNvbHZlJyxcbiAgY2F0ZWdvcnk6ICdBbGdlYnJhJyxcbiAgc3ludGF4OiBbJ3g9bHVzb2x2ZShBLCBiKScsICd4PWx1c29sdmUobHUsIGIpJ10sXG4gIGRlc2NyaXB0aW9uOiAnU29sdmVzIHRoZSBsaW5lYXIgc3lzdGVtIEEgKiB4ID0gYiB3aGVyZSBBIGlzIGFuIFtuIHggbl0gbWF0cml4IGFuZCBiIGlzIGEgW25dIGNvbHVtbiB2ZWN0b3IuJyxcbiAgZXhhbXBsZXM6IFsnYSA9IFstMiwgMzsgMiwgMV0nLCAnYiA9IFsxMSwgOV0nLCAneCA9IGx1c29sdmUoYSwgYiknXSxcbiAgc2VlYWxzbzogWydsdXAnLCAnc2x1JywgJ2xzb2x2ZScsICd1c29sdmUnLCAnbWF0cml4JywgJ3NwYXJzZSddXG59O1xuZXhwb3J0cy5sdXNvbHZlRG9jcyA9IGx1c29sdmVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5xckRvY3MgPSB2b2lkIDA7XG52YXIgcXJEb2NzID0ge1xuICBuYW1lOiAncXInLFxuICBjYXRlZ29yeTogJ0FsZ2VicmEnLFxuICBzeW50YXg6IFsncXIoQSknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGVzIHRoZSBNYXRyaXggUVIgZGVjb21wb3NpdGlvbi4gTWF0cml4IGBBYCBpcyBkZWNvbXBvc2VkIGluIHR3byBtYXRyaWNlcyAoYFFgLCBgUmApIHdoZXJlIGBRYCBpcyBhbiBvcnRob2dvbmFsIG1hdHJpeCBhbmQgYFJgIGlzIGFuIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4LicsXG4gIGV4YW1wbGVzOiBbJ3FyKFtbMSwgLTEsICA0XSwgWzEsICA0LCAtMl0sIFsxLCAgNCwgIDJdLCBbMSwgIC0xLCAwXV0pJ10sXG4gIHNlZWFsc286IFsnbHVwJywgJ3NsdScsICdtYXRyaXgnXVxufTtcbmV4cG9ydHMucXJEb2NzID0gcXJEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yYXRpb25hbGl6ZURvY3MgPSB2b2lkIDA7XG52YXIgcmF0aW9uYWxpemVEb2NzID0ge1xuICBuYW1lOiAncmF0aW9uYWxpemUnLFxuICBjYXRlZ29yeTogJ0FsZ2VicmEnLFxuICBzeW50YXg6IFsncmF0aW9uYWxpemUoZXhwciknLCAncmF0aW9uYWxpemUoZXhwciwgc2NvcGUpJywgJ3JhdGlvbmFsaXplKGV4cHIsIHNjb3BlLCBkZXRhaWxlZCknXSxcbiAgZGVzY3JpcHRpb246ICdUcmFuc2Zvcm0gYSByYXRpb25hbGl6YWJsZSBleHByZXNzaW9uIGluIGEgcmF0aW9uYWwgZnJhY3Rpb24uIElmIHJhdGlvbmFsIGZyYWN0aW9uIGlzIG9uZSB2YXJpYWJsZSBwb2x5bm9taWFsIHRoZW4gY29udmVydHMgdGhlIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3IgaW4gY2Fub25pY2FsIGZvcm0sIHdpdGggZGVjcmVhc2luZyBleHBvbmVudHMsIHJldHVybmluZyB0aGUgY29lZmZpY2llbnRzIG9mIG51bWVyYXRvci4nLFxuICBleGFtcGxlczogWydyYXRpb25hbGl6ZShcIjJ4L3kgLSB5Lyh4KzEpXCIpJywgJ3JhdGlvbmFsaXplKFwiMngveSAtIHkvKHgrMSlcIiwgdHJ1ZSknXSxcbiAgc2VlYWxzbzogWydzaW1wbGlmeSddXG59O1xuZXhwb3J0cy5yYXRpb25hbGl6ZURvY3MgPSByYXRpb25hbGl6ZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNpbXBsaWZ5RG9jcyA9IHZvaWQgMDtcbnZhciBzaW1wbGlmeURvY3MgPSB7XG4gIG5hbWU6ICdzaW1wbGlmeScsXG4gIGNhdGVnb3J5OiAnQWxnZWJyYScsXG4gIHN5bnRheDogWydzaW1wbGlmeShleHByKScsICdzaW1wbGlmeShleHByLCBydWxlcyknXSxcbiAgZGVzY3JpcHRpb246ICdTaW1wbGlmeSBhbiBleHByZXNzaW9uIHRyZWUuJyxcbiAgZXhhbXBsZXM6IFsnc2ltcGxpZnkoXCIzICsgMiAvIDRcIiknLCAnc2ltcGxpZnkoXCIyeCArIHhcIiknLCAnZiA9IHBhcnNlKFwieCAqICh4ICsgMiArIHgpXCIpJywgJ3NpbXBsaWZpZWQgPSBzaW1wbGlmeShmKScsICdzaW1wbGlmaWVkLmV2YWx1YXRlKHt4OiAyfSknXSxcbiAgc2VlYWxzbzogWydkZXJpdmF0aXZlJywgJ3BhcnNlJywgJ2V2YWx1YXRlJ11cbn07XG5leHBvcnRzLnNpbXBsaWZ5RG9jcyA9IHNpbXBsaWZ5RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2x1RG9jcyA9IHZvaWQgMDtcbnZhciBzbHVEb2NzID0ge1xuICBuYW1lOiAnc2x1JyxcbiAgY2F0ZWdvcnk6ICdBbGdlYnJhJyxcbiAgc3ludGF4OiBbJ3NsdShBLCBvcmRlciwgdGhyZXNob2xkKSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgTWF0cml4IExVIGRlY29tcG9zaXRpb24gd2l0aCBmdWxsIHBpdm90aW5nLiBNYXRyaXggQSBpcyBkZWNvbXBvc2VkIGluIHR3byBtYXRyaWNlcyAoTCwgVSkgYW5kIHR3byBwZXJtdXRhdGlvbiB2ZWN0b3JzIChwaW52LCBxKSB3aGVyZSBQICogQSAqIFEgPSBMICogVScsXG4gIGV4YW1wbGVzOiBbJ3NsdShzcGFyc2UoWzQuNSwgMCwgMy4yLCAwOyAzLjEsIDIuOSwgMCwgMC45OyAwLCAxLjcsIDMsIDA7IDMuNSwgMC40LCAwLCAxXSksIDEsIDAuMDAxKSddLFxuICBzZWVhbHNvOiBbJ2x1c29sdmUnLCAnbHNvbHZlJywgJ3Vzb2x2ZScsICdtYXRyaXgnLCAnc3BhcnNlJywgJ2x1cCcsICdxciddXG59O1xuZXhwb3J0cy5zbHVEb2NzID0gc2x1RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudXNvbHZlRG9jcyA9IHZvaWQgMDtcbnZhciB1c29sdmVEb2NzID0ge1xuICBuYW1lOiAndXNvbHZlJyxcbiAgY2F0ZWdvcnk6ICdBbGdlYnJhJyxcbiAgc3ludGF4OiBbJ3g9dXNvbHZlKFUsIGIpJ10sXG4gIGRlc2NyaXB0aW9uOiAnU29sdmVzIHRoZSBsaW5lYXIgc3lzdGVtIFUgKiB4ID0gYiB3aGVyZSBVIGlzIGFuIFtuIHggbl0gdXBwZXIgdHJpYW5ndWxhciBtYXRyaXggYW5kIGIgaXMgYSBbbl0gY29sdW1uIHZlY3Rvci4nLFxuICBleGFtcGxlczogWyd4PXVzb2x2ZShzcGFyc2UoWzEsIDEsIDEsIDE7IDAsIDEsIDEsIDE7IDAsIDAsIDEsIDE7IDAsIDAsIDAsIDFdKSwgWzE7IDI7IDM7IDRdKSddLFxuICBzZWVhbHNvOiBbJ2x1cCcsICdsdXNvbHZlJywgJ2xzb2x2ZScsICdtYXRyaXgnLCAnc3BhcnNlJ11cbn07XG5leHBvcnRzLnVzb2x2ZURvY3MgPSB1c29sdmVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hYnNEb2NzID0gdm9pZCAwO1xudmFyIGFic0RvY3MgPSB7XG4gIG5hbWU6ICdhYnMnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnYWJzKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgYWJzb2x1dGUgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsnYWJzKDMuNSknLCAnYWJzKC00LjIpJ10sXG4gIHNlZWFsc286IFsnc2lnbiddXG59O1xuZXhwb3J0cy5hYnNEb2NzID0gYWJzRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWRkRG9jcyA9IHZvaWQgMDtcbnZhciBhZGREb2NzID0ge1xuICBuYW1lOiAnYWRkJyxcbiAgY2F0ZWdvcnk6ICdPcGVyYXRvcnMnLFxuICBzeW50YXg6IFsneCArIHknLCAnYWRkKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQWRkIHR3byB2YWx1ZXMuJyxcbiAgZXhhbXBsZXM6IFsnYSA9IDIuMSArIDMuNicsICdhIC0gMy42JywgJzMgKyAyaScsICczIGNtICsgMiBpbmNoJywgJ1wiMi4zXCIgKyBcIjRcIiddLFxuICBzZWVhbHNvOiBbJ3N1YnRyYWN0J11cbn07XG5leHBvcnRzLmFkZERvY3MgPSBhZGREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jYnJ0RG9jcyA9IHZvaWQgMDtcbnZhciBjYnJ0RG9jcyA9IHtcbiAgbmFtZTogJ2NicnQnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnY2JydCh4KScsICdjYnJ0KHgsIGFsbFJvb3RzKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGN1YmljIHJvb3QgdmFsdWUuIElmIHggPSB5ICogeSAqIHksIHRoZW4geSBpcyB0aGUgY3ViaWMgcm9vdCBvZiB4LiBXaGVuIGB4YCBpcyBhIG51bWJlciBvciBjb21wbGV4IG51bWJlciwgYW4gb3B0aW9uYWwgc2Vjb25kIGFyZ3VtZW50IGBhbGxSb290c2AgY2FuIGJlIHByb3ZpZGVkIHRvIHJldHVybiBhbGwgdGhyZWUgY3ViaWMgcm9vdHMuIElmIG5vdCBwcm92aWRlZCwgdGhlIHByaW5jaXBhbCByb290IGlzIHJldHVybmVkJyxcbiAgZXhhbXBsZXM6IFsnY2JydCg2NCknLCAnY3ViZSg0KScsICdjYnJ0KC04KScsICdjYnJ0KDIgKyAzaSknLCAnY2JydCg4aSknLCAnY2JydCg4aSwgdHJ1ZSknLCAnY2JydCgyNyBtXjMpJ10sXG4gIHNlZWFsc286IFsnc3F1YXJlJywgJ3NxcnQnLCAnY3ViZScsICdtdWx0aXBseSddXG59O1xuZXhwb3J0cy5jYnJ0RG9jcyA9IGNicnREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jZWlsRG9jcyA9IHZvaWQgMDtcbnZhciBjZWlsRG9jcyA9IHtcbiAgbmFtZTogJ2NlaWwnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnY2VpbCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ1JvdW5kIGEgdmFsdWUgdG93YXJkcyBwbHVzIGluZmluaXR5LiBJZiB4IGlzIGNvbXBsZXgsIGJvdGggcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQgYXJlIHJvdW5kZWQgdG93YXJkcyBwbHVzIGluZmluaXR5LicsXG4gIGV4YW1wbGVzOiBbJ2NlaWwoMy4yKScsICdjZWlsKDMuOCknLCAnY2VpbCgtNC4yKSddLFxuICBzZWVhbHNvOiBbJ2Zsb29yJywgJ2ZpeCcsICdyb3VuZCddXG59O1xuZXhwb3J0cy5jZWlsRG9jcyA9IGNlaWxEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jdWJlRG9jcyA9IHZvaWQgMDtcbnZhciBjdWJlRG9jcyA9IHtcbiAgbmFtZTogJ2N1YmUnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnY3ViZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGN1YmUgb2YgYSB2YWx1ZS4gVGhlIGN1YmUgb2YgeCBpcyB4ICogeCAqIHguJyxcbiAgZXhhbXBsZXM6IFsnY3ViZSgyKScsICcyXjMnLCAnMiAqIDIgKiAyJ10sXG4gIHNlZWFsc286IFsnbXVsdGlwbHknLCAnc3F1YXJlJywgJ3BvdyddXG59O1xuZXhwb3J0cy5jdWJlRG9jcyA9IGN1YmVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kaXZpZGVEb2NzID0gdm9pZCAwO1xudmFyIGRpdmlkZURvY3MgPSB7XG4gIG5hbWU6ICdkaXZpZGUnLFxuICBjYXRlZ29yeTogJ09wZXJhdG9ycycsXG4gIHN5bnRheDogWyd4IC8geScsICdkaXZpZGUoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdEaXZpZGUgdHdvIHZhbHVlcy4nLFxuICBleGFtcGxlczogWydhID0gMiAvIDMnLCAnYSAqIDMnLCAnNC41IC8gMicsICczICsgNCAvIDInLCAnKDMgKyA0KSAvIDInLCAnMTgga20gLyA0LjUnXSxcbiAgc2VlYWxzbzogWydtdWx0aXBseSddXG59O1xuZXhwb3J0cy5kaXZpZGVEb2NzID0gZGl2aWRlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZG90RGl2aWRlRG9jcyA9IHZvaWQgMDtcbnZhciBkb3REaXZpZGVEb2NzID0ge1xuICBuYW1lOiAnZG90RGl2aWRlJyxcbiAgY2F0ZWdvcnk6ICdPcGVyYXRvcnMnLFxuICBzeW50YXg6IFsneCAuLyB5JywgJ2RvdERpdmlkZSh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0RpdmlkZSB0d28gdmFsdWVzIGVsZW1lbnQgd2lzZS4nLFxuICBleGFtcGxlczogWydhID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ2IgPSBbMiwgMSwgMTsgMywgMiwgNV0nLCAnYSAuLyBiJ10sXG4gIHNlZWFsc286IFsnbXVsdGlwbHknLCAnZG90TXVsdGlwbHknLCAnZGl2aWRlJ11cbn07XG5leHBvcnRzLmRvdERpdmlkZURvY3MgPSBkb3REaXZpZGVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kb3RNdWx0aXBseURvY3MgPSB2b2lkIDA7XG52YXIgZG90TXVsdGlwbHlEb2NzID0ge1xuICBuYW1lOiAnZG90TXVsdGlwbHknLFxuICBjYXRlZ29yeTogJ09wZXJhdG9ycycsXG4gIHN5bnRheDogWyd4IC4qIHknLCAnZG90TXVsdGlwbHkoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdNdWx0aXBseSB0d28gdmFsdWVzIGVsZW1lbnQgd2lzZS4nLFxuICBleGFtcGxlczogWydhID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ2IgPSBbMiwgMSwgMTsgMywgMiwgNV0nLCAnYSAuKiBiJ10sXG4gIHNlZWFsc286IFsnbXVsdGlwbHknLCAnZGl2aWRlJywgJ2RvdERpdmlkZSddXG59O1xuZXhwb3J0cy5kb3RNdWx0aXBseURvY3MgPSBkb3RNdWx0aXBseURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRvdFBvd0RvY3MgPSB2b2lkIDA7XG52YXIgZG90UG93RG9jcyA9IHtcbiAgbmFtZTogJ2RvdFBvdycsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJ3ggLl4geScsICdkb3RQb3coeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGVzIHRoZSBwb3dlciBvZiB4IHRvIHkgZWxlbWVudCB3aXNlLicsXG4gIGV4YW1wbGVzOiBbJ2EgPSBbMSwgMiwgMzsgNCwgNSwgNl0nLCAnYSAuXiAyJ10sXG4gIHNlZWFsc286IFsncG93J11cbn07XG5leHBvcnRzLmRvdFBvd0RvY3MgPSBkb3RQb3dEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5leHBEb2NzID0gdm9pZCAwO1xudmFyIGV4cERvY3MgPSB7XG4gIG5hbWU6ICdleHAnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnZXhwKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBleHBvbmVudCBvZiBhIHZhbHVlLicsXG4gIGV4YW1wbGVzOiBbJ2V4cCgxLjMpJywgJ2UgXiAxLjMnLCAnbG9nKGV4cCgxLjMpKScsICd4ID0gMi40JywgJyhleHAoaSp4KSA9PSBjb3MoeCkgKyBpKnNpbih4KSkgICAjIEV1bGVyXFwncyBmb3JtdWxhJ10sXG4gIHNlZWFsc286IFsnZXhwbScsICdleHBtMScsICdwb3cnLCAnbG9nJ11cbn07XG5leHBvcnRzLmV4cERvY3MgPSBleHBEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5leHBtRG9jcyA9IHZvaWQgMDtcbnZhciBleHBtRG9jcyA9IHtcbiAgbmFtZTogJ2V4cG0nLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnZXhwKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgbWF0cml4IGV4cG9uZW50aWFsLCBleHBtKEEpID0gZV5BLiAnICsgJ1RoZSBtYXRyaXggbXVzdCBiZSBzcXVhcmUuICcgKyAnTm90IHRvIGJlIGNvbmZ1c2VkIHdpdGggZXhwKGEpLCB3aGljaCBwZXJmb3JtcyBlbGVtZW50LXdpc2UgZXhwb25lbnRpYXRpb24uJyxcbiAgZXhhbXBsZXM6IFsnZXhwbShbWzAsMl0sWzAsMF1dKSddLFxuICBzZWVhbHNvOiBbJ2V4cCddXG59O1xuZXhwb3J0cy5leHBtRG9jcyA9IGV4cG1Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5leHBtMURvY3MgPSB2b2lkIDA7XG52YXIgZXhwbTFEb2NzID0ge1xuICBuYW1lOiAnZXhwbTEnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnZXhwbTEoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIHZhbHVlIG9mIHN1YnRyYWN0aW5nIDEgZnJvbSB0aGUgZXhwb25lbnRpYWwgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsnZXhwbTEoMiknLCAncG93KGUsIDIpIC0gMScsICdsb2coZXhwbTEoMikgKyAxKSddLFxuICBzZWVhbHNvOiBbJ2V4cCcsICdwb3cnLCAnbG9nJ11cbn07XG5leHBvcnRzLmV4cG0xRG9jcyA9IGV4cG0xRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZml4RG9jcyA9IHZvaWQgMDtcbnZhciBmaXhEb2NzID0ge1xuICBuYW1lOiAnZml4JyxcbiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJyxcbiAgc3ludGF4OiBbJ2ZpeCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ1JvdW5kIGEgdmFsdWUgdG93YXJkcyB6ZXJvLiBJZiB4IGlzIGNvbXBsZXgsIGJvdGggcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQgYXJlIHJvdW5kZWQgdG93YXJkcyB6ZXJvLicsXG4gIGV4YW1wbGVzOiBbJ2ZpeCgzLjIpJywgJ2ZpeCgzLjgpJywgJ2ZpeCgtNC4yKScsICdmaXgoLTQuOCknXSxcbiAgc2VlYWxzbzogWydjZWlsJywgJ2Zsb29yJywgJ3JvdW5kJ11cbn07XG5leHBvcnRzLmZpeERvY3MgPSBmaXhEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5mbG9vckRvY3MgPSB2b2lkIDA7XG52YXIgZmxvb3JEb2NzID0ge1xuICBuYW1lOiAnZmxvb3InLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnZmxvb3IoeCknXSxcbiAgZGVzY3JpcHRpb246ICdSb3VuZCBhIHZhbHVlIHRvd2FyZHMgbWludXMgaW5maW5pdHkuSWYgeCBpcyBjb21wbGV4LCBib3RoIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0IGFyZSByb3VuZGVkIHRvd2FyZHMgbWludXMgaW5maW5pdHkuJyxcbiAgZXhhbXBsZXM6IFsnZmxvb3IoMy4yKScsICdmbG9vcigzLjgpJywgJ2Zsb29yKC00LjIpJ10sXG4gIHNlZWFsc286IFsnY2VpbCcsICdmaXgnLCAncm91bmQnXVxufTtcbmV4cG9ydHMuZmxvb3JEb2NzID0gZmxvb3JEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nY2REb2NzID0gdm9pZCAwO1xudmFyIGdjZERvY3MgPSB7XG4gIG5hbWU6ICdnY2QnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnZ2NkKGEsIGIpJywgJ2djZChhLCBiLCBjLCAuLi4pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3IuJyxcbiAgZXhhbXBsZXM6IFsnZ2NkKDgsIDEyKScsICdnY2QoLTQsIDYpJywgJ2djZCgyNSwgMTUsIC0xMCknXSxcbiAgc2VlYWxzbzogWydsY20nLCAneGdjZCddXG59O1xuZXhwb3J0cy5nY2REb2NzID0gZ2NkRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaHlwb3REb2NzID0gdm9pZCAwO1xudmFyIGh5cG90RG9jcyA9IHtcbiAgbmFtZTogJ2h5cG90JyxcbiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJyxcbiAgc3ludGF4OiBbJ2h5cG90KGEsIGIsIGMsIC4uLiknLCAnaHlwb3QoW2EsIGIsIGMsIC4uLl0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBoeXBvdGVudXNhIG9mIGEgbGlzdCB3aXRoIHZhbHVlcy4gJyxcbiAgZXhhbXBsZXM6IFsnaHlwb3QoMywgNCknLCAnc3FydCgzXjIgKyA0XjIpJywgJ2h5cG90KC0yKScsICdoeXBvdChbMywgNCwgNV0pJ10sXG4gIHNlZWFsc286IFsnYWJzJywgJ25vcm0nXVxufTtcbmV4cG9ydHMuaHlwb3REb2NzID0gaHlwb3REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sY21Eb2NzID0gdm9pZCAwO1xudmFyIGxjbURvY3MgPSB7XG4gIG5hbWU6ICdsY20nLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnbGNtKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgbGVhc3QgY29tbW9uIG11bHRpcGxlLicsXG4gIGV4YW1wbGVzOiBbJ2xjbSg0LCA2KScsICdsY20oNiwgMjEpJywgJ2xjbSg2LCAyMSwgNSknXSxcbiAgc2VlYWxzbzogWydnY2QnXVxufTtcbmV4cG9ydHMubGNtRG9jcyA9IGxjbURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxvZ0RvY3MgPSB2b2lkIDA7XG52YXIgbG9nRG9jcyA9IHtcbiAgbmFtZTogJ2xvZycsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydsb2coeCknLCAnbG9nKHgsIGJhc2UpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgbG9nYXJpdGhtIG9mIGEgdmFsdWUuIElmIG5vIGJhc2UgaXMgcHJvdmlkZWQsIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiB4IGlzIGNhbGN1bGF0ZWQuIElmIGJhc2UgaWYgcHJvdmlkZWQsIHRoZSBsb2dhcml0aG0gaXMgY2FsY3VsYXRlZCBmb3IgdGhlIHNwZWNpZmllZCBiYXNlLiBsb2coeCwgYmFzZSkgaXMgZGVmaW5lZCBhcyBsb2coeCkgLyBsb2coYmFzZSkuJyxcbiAgZXhhbXBsZXM6IFsnbG9nKDMuNSknLCAnYSA9IGxvZygyLjQpJywgJ2V4cChhKScsICcxMCBeIDQnLCAnbG9nKDEwMDAwLCAxMCknLCAnbG9nKDEwMDAwKSAvIGxvZygxMCknLCAnYiA9IGxvZygxMDI0LCAyKScsICcyIF4gYiddLFxuICBzZWVhbHNvOiBbJ2V4cCcsICdsb2cxcCcsICdsb2cyJywgJ2xvZzEwJ11cbn07XG5leHBvcnRzLmxvZ0RvY3MgPSBsb2dEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sb2cxMERvY3MgPSB2b2lkIDA7XG52YXIgbG9nMTBEb2NzID0ge1xuICBuYW1lOiAnbG9nMTAnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnbG9nMTAoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSAxMC1iYXNlIGxvZ2FyaXRobSBvZiBhIHZhbHVlLicsXG4gIGV4YW1wbGVzOiBbJ2xvZzEwKDAuMDAwMDEpJywgJ2xvZzEwKDEwMDAwKScsICcxMCBeIDQnLCAnbG9nKDEwMDAwKSAvIGxvZygxMCknLCAnbG9nKDEwMDAwLCAxMCknXSxcbiAgc2VlYWxzbzogWydleHAnLCAnbG9nJ11cbn07XG5leHBvcnRzLmxvZzEwRG9jcyA9IGxvZzEwRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubG9nMXBEb2NzID0gdm9pZCAwO1xudmFyIGxvZzFwRG9jcyA9IHtcbiAgbmFtZTogJ2xvZzFwJyxcbiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJyxcbiAgc3ludGF4OiBbJ2xvZzFwKHgpJywgJ2xvZzFwKHgsIGJhc2UpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBsb2dhcml0aG0gb2YgYSBgdmFsdWUrMWAnLFxuICBleGFtcGxlczogWydsb2cxcCgyLjUpJywgJ2V4cChsb2cxcCgxLjQpKScsICdwb3coMTAsIDQpJywgJ2xvZzFwKDk5OTksIDEwKScsICdsb2cxcCg5OTk5KSAvIGxvZygxMCknXSxcbiAgc2VlYWxzbzogWydleHAnLCAnbG9nJywgJ2xvZzInLCAnbG9nMTAnXVxufTtcbmV4cG9ydHMubG9nMXBEb2NzID0gbG9nMXBEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sb2cyRG9jcyA9IHZvaWQgMDtcbnZhciBsb2cyRG9jcyA9IHtcbiAgbmFtZTogJ2xvZzInLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsnbG9nMih4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgMi1iYXNlIG9mIGEgdmFsdWUuIFRoaXMgaXMgdGhlIHNhbWUgYXMgY2FsY3VsYXRpbmcgYGxvZyh4LCAyKWAuJyxcbiAgZXhhbXBsZXM6IFsnbG9nMigwLjAzMTI1KScsICdsb2cyKDE2KScsICdsb2cyKDE2KSAvIGxvZzIoMiknLCAncG93KDIsIDQpJ10sXG4gIHNlZWFsc286IFsnZXhwJywgJ2xvZzFwJywgJ2xvZycsICdsb2cxMCddXG59O1xuZXhwb3J0cy5sb2cyRG9jcyA9IGxvZzJEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tb2REb2NzID0gdm9pZCAwO1xudmFyIG1vZERvY3MgPSB7XG4gIG5hbWU6ICdtb2QnLFxuICBjYXRlZ29yeTogJ09wZXJhdG9ycycsXG4gIHN5bnRheDogWyd4ICUgeScsICd4IG1vZCB5JywgJ21vZCh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZXMgdGhlIG1vZHVsdXMsIHRoZSByZW1haW5kZXIgb2YgYW4gaW50ZWdlciBkaXZpc2lvbi4nLFxuICBleGFtcGxlczogWyc3ICUgMycsICcxMSAlIDInLCAnMTAgbW9kIDQnLCAnaXNPZGQoeCkgPSB4ICUgMicsICdpc09kZCgyKScsICdpc09kZCgzKSddLFxuICBzZWVhbHNvOiBbJ2RpdmlkZSddXG59O1xuZXhwb3J0cy5tb2REb2NzID0gbW9kRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubXVsdGlwbHlEb2NzID0gdm9pZCAwO1xudmFyIG11bHRpcGx5RG9jcyA9IHtcbiAgbmFtZTogJ211bHRpcGx5JyxcbiAgY2F0ZWdvcnk6ICdPcGVyYXRvcnMnLFxuICBzeW50YXg6IFsneCAqIHknLCAnbXVsdGlwbHkoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdtdWx0aXBseSB0d28gdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ2EgPSAyLjEgKiAzLjQnLCAnYSAvIDMuNCcsICcyICogMyArIDQnLCAnMiAqICgzICsgNCknLCAnMyAqIDIuMSBrbSddLFxuICBzZWVhbHNvOiBbJ2RpdmlkZSddXG59O1xuZXhwb3J0cy5tdWx0aXBseURvY3MgPSBtdWx0aXBseURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm5vcm1Eb2NzID0gdm9pZCAwO1xudmFyIG5vcm1Eb2NzID0ge1xuICBuYW1lOiAnbm9ybScsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydub3JtKHgpJywgJ25vcm0oeCwgcCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIG5vcm0gb2YgYSBudW1iZXIsIHZlY3RvciBvciBtYXRyaXguJyxcbiAgZXhhbXBsZXM6IFsnYWJzKC0zLjUpJywgJ25vcm0oLTMuNSknLCAnbm9ybSgzIC0gNGkpJywgJ25vcm0oWzEsIDIsIC0zXSwgSW5maW5pdHkpJywgJ25vcm0oWzEsIDIsIC0zXSwgLUluZmluaXR5KScsICdub3JtKFszLCA0XSwgMiknLCAnbm9ybShbWzEsIDJdLCBbMywgNF1dLCAxKScsICdub3JtKFtbMSwgMl0sIFszLCA0XV0sIFwiaW5mXCIpJywgJ25vcm0oW1sxLCAyXSwgWzMsIDRdXSwgXCJmcm9cIiknXVxufTtcbmV4cG9ydHMubm9ybURvY3MgPSBub3JtRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubnRoUm9vdERvY3MgPSB2b2lkIDA7XG52YXIgbnRoUm9vdERvY3MgPSB7XG4gIG5hbWU6ICdudGhSb290JyxcbiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJyxcbiAgc3ludGF4OiBbJ250aFJvb3QoYSknLCAnbnRoUm9vdChhLCByb290KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgbnRoIHJvb3Qgb2YgYSB2YWx1ZS4gJyArICdUaGUgcHJpbmNpcGFsIG50aCByb290IG9mIGEgcG9zaXRpdmUgcmVhbCBudW1iZXIgQSwgJyArICdpcyB0aGUgcG9zaXRpdmUgcmVhbCBzb2x1dGlvbiBvZiB0aGUgZXF1YXRpb24gXCJ4XnJvb3QgPSBBXCIuJyxcbiAgZXhhbXBsZXM6IFsnNCBeIDMnLCAnbnRoUm9vdCg2NCwgMyknLCAnbnRoUm9vdCg5LCAyKScsICdzcXJ0KDkpJ10sXG4gIHNlZWFsc286IFsnbnRoUm9vdHMnLCAncG93JywgJ3NxcnQnXVxufTtcbmV4cG9ydHMubnRoUm9vdERvY3MgPSBudGhSb290RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubnRoUm9vdHNEb2NzID0gdm9pZCAwO1xudmFyIG50aFJvb3RzRG9jcyA9IHtcbiAgbmFtZTogJ250aFJvb3RzJyxcbiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJyxcbiAgc3ludGF4OiBbJ250aFJvb3RzKEEpJywgJ250aFJvb3RzKEEsIHJvb3QpJ10sXG4gIGRlc2NyaXB0aW9uOiAnJyArICdDYWxjdWxhdGUgdGhlIG50aCByb290cyBvZiBhIHZhbHVlLiAnICsgJ0FuIG50aCByb290IG9mIGEgcG9zaXRpdmUgcmVhbCBudW1iZXIgQSwgJyArICdpcyBhIHBvc2l0aXZlIHJlYWwgc29sdXRpb24gb2YgdGhlIGVxdWF0aW9uIFwieF5yb290ID0gQVwiLiAnICsgJ1RoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBhcnJheSBvZiBjb21wbGV4IHZhbHVlcy4nLFxuICBleGFtcGxlczogWydudGhSb290cygxKScsICdudGhSb290cygxLCAzKSddLFxuICBzZWVhbHNvOiBbJ3NxcnQnLCAncG93JywgJ250aFJvb3QnXVxufTtcbmV4cG9ydHMubnRoUm9vdHNEb2NzID0gbnRoUm9vdHNEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wb3dEb2NzID0gdm9pZCAwO1xudmFyIHBvd0RvY3MgPSB7XG4gIG5hbWU6ICdwb3cnLFxuICBjYXRlZ29yeTogJ09wZXJhdG9ycycsXG4gIHN5bnRheDogWyd4IF4geScsICdwb3coeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGVzIHRoZSBwb3dlciBvZiB4IHRvIHksIHheeS4nLFxuICBleGFtcGxlczogWycyXjMnLCAnMioyKjInLCAnMSArIGUgXiAocGkgKiBpKSddLFxuICBzZWVhbHNvOiBbJ211bHRpcGx5JywgJ250aFJvb3QnLCAnbnRoUm9vdHMnLCAnc3FydCddXG59O1xuZXhwb3J0cy5wb3dEb2NzID0gcG93RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucm91bmREb2NzID0gdm9pZCAwO1xudmFyIHJvdW5kRG9jcyA9IHtcbiAgbmFtZTogJ3JvdW5kJyxcbiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJyxcbiAgc3ludGF4OiBbJ3JvdW5kKHgpJywgJ3JvdW5kKHgsIG4pJ10sXG4gIGRlc2NyaXB0aW9uOiAncm91bmQgYSB2YWx1ZSB0b3dhcmRzIHRoZSBuZWFyZXN0IGludGVnZXIuSWYgeCBpcyBjb21wbGV4LCBib3RoIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0IGFyZSByb3VuZGVkIHRvd2FyZHMgdGhlIG5lYXJlc3QgaW50ZWdlci4gV2hlbiBuIGlzIHNwZWNpZmllZCwgdGhlIHZhbHVlIGlzIHJvdW5kZWQgdG8gbiBkZWNpbWFscy4nLFxuICBleGFtcGxlczogWydyb3VuZCgzLjIpJywgJ3JvdW5kKDMuOCknLCAncm91bmQoLTQuMiknLCAncm91bmQoLTQuOCknLCAncm91bmQocGksIDMpJywgJ3JvdW5kKDEyMy40NTY3OCwgMiknXSxcbiAgc2VlYWxzbzogWydjZWlsJywgJ2Zsb29yJywgJ2ZpeCddXG59O1xuZXhwb3J0cy5yb3VuZERvY3MgPSByb3VuZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNpZ25Eb2NzID0gdm9pZCAwO1xudmFyIHNpZ25Eb2NzID0ge1xuICBuYW1lOiAnc2lnbicsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydzaWduKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgc2lnbiBvZiBhIHZhbHVlLiBUaGUgc2lnbiBvZiBhIHZhbHVlIHggaXMgMSB3aGVuIHg+MSwgLTEgd2hlbiB4PDAsIGFuZCAwIHdoZW4geD0wLicsXG4gIGV4YW1wbGVzOiBbJ3NpZ24oMy41KScsICdzaWduKC00LjIpJywgJ3NpZ24oMCknXSxcbiAgc2VlYWxzbzogWydhYnMnXVxufTtcbmV4cG9ydHMuc2lnbkRvY3MgPSBzaWduRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3FydERvY3MgPSB2b2lkIDA7XG52YXIgc3FydERvY3MgPSB7XG4gIG5hbWU6ICdzcXJ0JyxcbiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJyxcbiAgc3ludGF4OiBbJ3NxcnQoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBzcXVhcmUgcm9vdCB2YWx1ZS4gSWYgeCA9IHkgKiB5LCB0aGVuIHkgaXMgdGhlIHNxdWFyZSByb290IG9mIHguJyxcbiAgZXhhbXBsZXM6IFsnc3FydCgyNSknLCAnNSAqIDUnLCAnc3FydCgtMSknXSxcbiAgc2VlYWxzbzogWydzcXVhcmUnLCAnc3FydG0nLCAnbXVsdGlwbHknLCAnbnRoUm9vdCcsICdudGhSb290cycsICdwb3cnXVxufTtcbmV4cG9ydHMuc3FydERvY3MgPSBzcXJ0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3FydG1Eb2NzID0gdm9pZCAwO1xudmFyIHNxcnRtRG9jcyA9IHtcbiAgbmFtZTogJ3NxcnRtJyxcbiAgY2F0ZWdvcnk6ICdBcml0aG1ldGljJyxcbiAgc3ludGF4OiBbJ3NxcnRtKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBwcmluY2lwYWwgc3F1YXJlIHJvb3Qgb2YgYSBzcXVhcmUgbWF0cml4LiBUaGUgcHJpbmNpcGFsIHNxdWFyZSByb290IG1hdHJpeCBgWGAgb2YgYW5vdGhlciBtYXRyaXggYEFgIGlzIHN1Y2ggdGhhdCBgWCAqIFggPSBBYC4nLFxuICBleGFtcGxlczogWydzcXJ0bShbWzEsIDJdLCBbMywgNF1dKSddLFxuICBzZWVhbHNvOiBbJ3NxcnQnLCAnYWJzJywgJ3NxdWFyZScsICdtdWx0aXBseSddXG59O1xuZXhwb3J0cy5zcXJ0bURvY3MgPSBzcXJ0bURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNxdWFyZURvY3MgPSB2b2lkIDA7XG52YXIgc3F1YXJlRG9jcyA9IHtcbiAgbmFtZTogJ3NxdWFyZScsXG4gIGNhdGVnb3J5OiAnQXJpdGhtZXRpYycsXG4gIHN5bnRheDogWydzcXVhcmUoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBzcXVhcmUgb2YgYSB2YWx1ZS4gVGhlIHNxdWFyZSBvZiB4IGlzIHggKiB4LicsXG4gIGV4YW1wbGVzOiBbJ3NxdWFyZSgzKScsICdzcXJ0KDkpJywgJzNeMicsICczICogMyddLFxuICBzZWVhbHNvOiBbJ211bHRpcGx5JywgJ3BvdycsICdzcXJ0JywgJ2N1YmUnXVxufTtcbmV4cG9ydHMuc3F1YXJlRG9jcyA9IHNxdWFyZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnN1YnRyYWN0RG9jcyA9IHZvaWQgMDtcbnZhciBzdWJ0cmFjdERvY3MgPSB7XG4gIG5hbWU6ICdzdWJ0cmFjdCcsXG4gIGNhdGVnb3J5OiAnT3BlcmF0b3JzJyxcbiAgc3ludGF4OiBbJ3ggLSB5JywgJ3N1YnRyYWN0KHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnc3VidHJhY3QgdHdvIHZhbHVlcy4nLFxuICBleGFtcGxlczogWydhID0gNS4zIC0gMicsICdhICsgMicsICcyLzMgLSAxLzYnLCAnMiAqIDMgLSAzJywgJzIuMSBrbSAtIDUwMG0nXSxcbiAgc2VlYWxzbzogWydhZGQnXVxufTtcbmV4cG9ydHMuc3VidHJhY3REb2NzID0gc3VidHJhY3REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy51bmFyeU1pbnVzRG9jcyA9IHZvaWQgMDtcbnZhciB1bmFyeU1pbnVzRG9jcyA9IHtcbiAgbmFtZTogJ3VuYXJ5TWludXMnLFxuICBjYXRlZ29yeTogJ09wZXJhdG9ycycsXG4gIHN5bnRheDogWycteCcsICd1bmFyeU1pbnVzKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnSW52ZXJzZSB0aGUgc2lnbiBvZiBhIHZhbHVlLiBDb252ZXJ0cyBib29sZWFucyBhbmQgc3RyaW5ncyB0byBudW1iZXJzLicsXG4gIGV4YW1wbGVzOiBbJy00LjUnLCAnLSgtNS42KScsICctXCIyMlwiJ10sXG4gIHNlZWFsc286IFsnYWRkJywgJ3N1YnRyYWN0JywgJ3VuYXJ5UGx1cyddXG59O1xuZXhwb3J0cy51bmFyeU1pbnVzRG9jcyA9IHVuYXJ5TWludXNEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy51bmFyeVBsdXNEb2NzID0gdm9pZCAwO1xudmFyIHVuYXJ5UGx1c0RvY3MgPSB7XG4gIG5hbWU6ICd1bmFyeVBsdXMnLFxuICBjYXRlZ29yeTogJ09wZXJhdG9ycycsXG4gIHN5bnRheDogWycreCcsICd1bmFyeVBsdXMoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb252ZXJ0cyBib29sZWFucyBhbmQgc3RyaW5ncyB0byBudW1iZXJzLicsXG4gIGV4YW1wbGVzOiBbJyt0cnVlJywgJytcIjJcIiddLFxuICBzZWVhbHNvOiBbJ2FkZCcsICdzdWJ0cmFjdCcsICd1bmFyeU1pbnVzJ11cbn07XG5leHBvcnRzLnVuYXJ5UGx1c0RvY3MgPSB1bmFyeVBsdXNEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy54Z2NkRG9jcyA9IHZvaWQgMDtcbnZhciB4Z2NkRG9jcyA9IHtcbiAgbmFtZTogJ3hnY2QnLFxuICBjYXRlZ29yeTogJ0FyaXRobWV0aWMnLFxuICBzeW50YXg6IFsneGdjZChhLCBiKSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgZXh0ZW5kZWQgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3IgZm9yIHR3byB2YWx1ZXMuIFRoZSByZXN1bHQgaXMgYW4gYXJyYXkgW2QsIHgsIHldIHdpdGggMyBlbnRyaWVzLCB3aGVyZSBkIGlzIHRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvciwgYW5kIGQgPSB4ICogYSArIHkgKiBiLicsXG4gIGV4YW1wbGVzOiBbJ3hnY2QoOCwgMTIpJywgJ2djZCg4LCAxMiknLCAneGdjZCgzNjE2MywgMjExOTkpJ10sXG4gIHNlZWFsc286IFsnZ2NkJywgJ2xjbSddXG59O1xuZXhwb3J0cy54Z2NkRG9jcyA9IHhnY2REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iaXRBbmREb2NzID0gdm9pZCAwO1xudmFyIGJpdEFuZERvY3MgPSB7XG4gIG5hbWU6ICdiaXRBbmQnLFxuICBjYXRlZ29yeTogJ0JpdHdpc2UnLFxuICBzeW50YXg6IFsneCAmIHknLCAnYml0QW5kKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQml0d2lzZSBBTkQgb3BlcmF0aW9uLiBQZXJmb3JtcyB0aGUgbG9naWNhbCBBTkQgb3BlcmF0aW9uIG9uIGVhY2ggcGFpciBvZiB0aGUgY29ycmVzcG9uZGluZyBiaXRzIG9mIHRoZSB0d28gZ2l2ZW4gdmFsdWVzIGJ5IG11bHRpcGx5aW5nIHRoZW0uIElmIGJvdGggYml0cyBpbiB0aGUgY29tcGFyZWQgcG9zaXRpb24gYXJlIDEsIHRoZSBiaXQgaW4gdGhlIHJlc3VsdGluZyBiaW5hcnkgcmVwcmVzZW50YXRpb24gaXMgMSwgb3RoZXJ3aXNlLCB0aGUgcmVzdWx0IGlzIDAnLFxuICBleGFtcGxlczogWyc1ICYgMycsICdiaXRBbmQoNTMsIDEzMSknLCAnWzEsIDEyLCAzMV0gJiA0MiddLFxuICBzZWVhbHNvOiBbJ2JpdE5vdCcsICdiaXRPcicsICdiaXRYb3InLCAnbGVmdFNoaWZ0JywgJ3JpZ2h0QXJpdGhTaGlmdCcsICdyaWdodExvZ1NoaWZ0J11cbn07XG5leHBvcnRzLmJpdEFuZERvY3MgPSBiaXRBbmREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iaXROb3REb2NzID0gdm9pZCAwO1xudmFyIGJpdE5vdERvY3MgPSB7XG4gIG5hbWU6ICdiaXROb3QnLFxuICBjYXRlZ29yeTogJ0JpdHdpc2UnLFxuICBzeW50YXg6IFsnfngnLCAnYml0Tm90KHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQml0d2lzZSBOT1Qgb3BlcmF0aW9uLiBQZXJmb3JtcyBhIGxvZ2ljYWwgbmVnYXRpb24gb24gZWFjaCBiaXQgb2YgdGhlIGdpdmVuIHZhbHVlLiBCaXRzIHRoYXQgYXJlIDAgYmVjb21lIDEsIGFuZCB0aG9zZSB0aGF0IGFyZSAxIGJlY29tZSAwLicsXG4gIGV4YW1wbGVzOiBbJ34xJywgJ34yJywgJ2JpdE5vdChbMiwgLTMsIDRdKSddLFxuICBzZWVhbHNvOiBbJ2JpdEFuZCcsICdiaXRPcicsICdiaXRYb3InLCAnbGVmdFNoaWZ0JywgJ3JpZ2h0QXJpdGhTaGlmdCcsICdyaWdodExvZ1NoaWZ0J11cbn07XG5leHBvcnRzLmJpdE5vdERvY3MgPSBiaXROb3REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iaXRPckRvY3MgPSB2b2lkIDA7XG52YXIgYml0T3JEb2NzID0ge1xuICBuYW1lOiAnYml0T3InLFxuICBjYXRlZ29yeTogJ0JpdHdpc2UnLFxuICBzeW50YXg6IFsneCB8IHknLCAnYml0T3IoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdCaXR3aXNlIE9SIG9wZXJhdGlvbi4gUGVyZm9ybXMgdGhlIGxvZ2ljYWwgaW5jbHVzaXZlIE9SIG9wZXJhdGlvbiBvbiBlYWNoIHBhaXIgb2YgY29ycmVzcG9uZGluZyBiaXRzIG9mIHRoZSB0d28gZ2l2ZW4gdmFsdWVzLiBUaGUgcmVzdWx0IGluIGVhY2ggcG9zaXRpb24gaXMgMSBpZiB0aGUgZmlyc3QgYml0IGlzIDEgb3IgdGhlIHNlY29uZCBiaXQgaXMgMSBvciBib3RoIGJpdHMgYXJlIDEsIG90aGVyd2lzZSwgdGhlIHJlc3VsdCBpcyAwLicsXG4gIGV4YW1wbGVzOiBbJzUgfCAzJywgJ2JpdE9yKFsxLCAyLCAzXSwgNCknXSxcbiAgc2VlYWxzbzogWydiaXRBbmQnLCAnYml0Tm90JywgJ2JpdFhvcicsICdsZWZ0U2hpZnQnLCAncmlnaHRBcml0aFNoaWZ0JywgJ3JpZ2h0TG9nU2hpZnQnXVxufTtcbmV4cG9ydHMuYml0T3JEb2NzID0gYml0T3JEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iaXRYb3JEb2NzID0gdm9pZCAwO1xudmFyIGJpdFhvckRvY3MgPSB7XG4gIG5hbWU6ICdiaXRYb3InLFxuICBjYXRlZ29yeTogJ0JpdHdpc2UnLFxuICBzeW50YXg6IFsnYml0WG9yKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQml0d2lzZSBYT1Igb3BlcmF0aW9uLCBleGNsdXNpdmUgT1IuIFBlcmZvcm1zIHRoZSBsb2dpY2FsIGV4Y2x1c2l2ZSBPUiBvcGVyYXRpb24gb24gZWFjaCBwYWlyIG9mIGNvcnJlc3BvbmRpbmcgYml0cyBvZiB0aGUgdHdvIGdpdmVuIHZhbHVlcy4gVGhlIHJlc3VsdCBpbiBlYWNoIHBvc2l0aW9uIGlzIDEgaWYgb25seSB0aGUgZmlyc3QgYml0IGlzIDEgb3Igb25seSB0aGUgc2Vjb25kIGJpdCBpcyAxLCBidXQgd2lsbCBiZSAwIGlmIGJvdGggYXJlIDAgb3IgYm90aCBhcmUgMS4nLFxuICBleGFtcGxlczogWydiaXRPcigxLCAyKScsICdiaXRYb3IoWzIsIDMsIDRdLCA0KSddLFxuICBzZWVhbHNvOiBbJ2JpdEFuZCcsICdiaXROb3QnLCAnYml0T3InLCAnbGVmdFNoaWZ0JywgJ3JpZ2h0QXJpdGhTaGlmdCcsICdyaWdodExvZ1NoaWZ0J11cbn07XG5leHBvcnRzLmJpdFhvckRvY3MgPSBiaXRYb3JEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sZWZ0U2hpZnREb2NzID0gdm9pZCAwO1xudmFyIGxlZnRTaGlmdERvY3MgPSB7XG4gIG5hbWU6ICdsZWZ0U2hpZnQnLFxuICBjYXRlZ29yeTogJ0JpdHdpc2UnLFxuICBzeW50YXg6IFsneCA8PCB5JywgJ2xlZnRTaGlmdCh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0JpdHdpc2UgbGVmdCBsb2dpY2FsIHNoaWZ0IG9mIGEgdmFsdWUgeCBieSB5IG51bWJlciBvZiBiaXRzLicsXG4gIGV4YW1wbGVzOiBbJzQgPDwgMScsICc4ID4+IDEnXSxcbiAgc2VlYWxzbzogWydiaXRBbmQnLCAnYml0Tm90JywgJ2JpdE9yJywgJ2JpdFhvcicsICdyaWdodEFyaXRoU2hpZnQnLCAncmlnaHRMb2dTaGlmdCddXG59O1xuZXhwb3J0cy5sZWZ0U2hpZnREb2NzID0gbGVmdFNoaWZ0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmlnaHRBcml0aFNoaWZ0RG9jcyA9IHZvaWQgMDtcbnZhciByaWdodEFyaXRoU2hpZnREb2NzID0ge1xuICBuYW1lOiAncmlnaHRBcml0aFNoaWZ0JyxcbiAgY2F0ZWdvcnk6ICdCaXR3aXNlJyxcbiAgc3ludGF4OiBbJ3ggPj4geScsICdyaWdodEFyaXRoU2hpZnQoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdCaXR3aXNlIHJpZ2h0IGFyaXRobWV0aWMgc2hpZnQgb2YgYSB2YWx1ZSB4IGJ5IHkgbnVtYmVyIG9mIGJpdHMuJyxcbiAgZXhhbXBsZXM6IFsnOCA+PiAxJywgJzQgPDwgMScsICctMTIgPj4gMiddLFxuICBzZWVhbHNvOiBbJ2JpdEFuZCcsICdiaXROb3QnLCAnYml0T3InLCAnYml0WG9yJywgJ2xlZnRTaGlmdCcsICdyaWdodExvZ1NoaWZ0J11cbn07XG5leHBvcnRzLnJpZ2h0QXJpdGhTaGlmdERvY3MgPSByaWdodEFyaXRoU2hpZnREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yaWdodExvZ1NoaWZ0RG9jcyA9IHZvaWQgMDtcbnZhciByaWdodExvZ1NoaWZ0RG9jcyA9IHtcbiAgbmFtZTogJ3JpZ2h0TG9nU2hpZnQnLFxuICBjYXRlZ29yeTogJ0JpdHdpc2UnLFxuICBzeW50YXg6IFsneCA+Pj4geScsICdyaWdodExvZ1NoaWZ0KHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQml0d2lzZSByaWdodCBsb2dpY2FsIHNoaWZ0IG9mIGEgdmFsdWUgeCBieSB5IG51bWJlciBvZiBiaXRzLicsXG4gIGV4YW1wbGVzOiBbJzggPj4+IDEnLCAnNCA8PCAxJywgJy0xMiA+Pj4gMiddLFxuICBzZWVhbHNvOiBbJ2JpdEFuZCcsICdiaXROb3QnLCAnYml0T3InLCAnYml0WG9yJywgJ2xlZnRTaGlmdCcsICdyaWdodEFyaXRoU2hpZnQnXVxufTtcbmV4cG9ydHMucmlnaHRMb2dTaGlmdERvY3MgPSByaWdodExvZ1NoaWZ0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYmVsbE51bWJlcnNEb2NzID0gdm9pZCAwO1xudmFyIGJlbGxOdW1iZXJzRG9jcyA9IHtcbiAgbmFtZTogJ2JlbGxOdW1iZXJzJyxcbiAgY2F0ZWdvcnk6ICdDb21iaW5hdG9yaWNzJyxcbiAgc3ludGF4OiBbJ2JlbGxOdW1iZXJzKG4pJ10sXG4gIGRlc2NyaXB0aW9uOiAnVGhlIEJlbGwgTnVtYmVycyBjb3VudCB0aGUgbnVtYmVyIG9mIHBhcnRpdGlvbnMgb2YgYSBzZXQuIEEgcGFydGl0aW9uIGlzIGEgcGFpcndpc2UgZGlzam9pbnQgc3Vic2V0IG9mIFMgd2hvc2UgdW5pb24gaXMgUy4gYGJlbGxOdW1iZXJzYCBvbmx5IHRha2VzIGludGVnZXIgYXJndW1lbnRzLiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBtdXN0IGJlIGVuZm9yY2VkOiBuID49IDAuJyxcbiAgZXhhbXBsZXM6IFsnYmVsbE51bWJlcnMoMyknLCAnYmVsbE51bWJlcnMoOCknXSxcbiAgc2VlYWxzbzogWydzdGlybGluZ1MyJ11cbn07XG5leHBvcnRzLmJlbGxOdW1iZXJzRG9jcyA9IGJlbGxOdW1iZXJzRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY2F0YWxhbkRvY3MgPSB2b2lkIDA7XG52YXIgY2F0YWxhbkRvY3MgPSB7XG4gIG5hbWU6ICdjYXRhbGFuJyxcbiAgY2F0ZWdvcnk6ICdDb21iaW5hdG9yaWNzJyxcbiAgc3ludGF4OiBbJ2NhdGFsYW4obiknXSxcbiAgZGVzY3JpcHRpb246ICdUaGUgQ2F0YWxhbiBOdW1iZXJzIGVudW1lcmF0ZSBjb21iaW5hdG9yaWFsIHN0cnVjdHVyZXMgb2YgbWFueSBkaWZmZXJlbnQgdHlwZXMuIGNhdGFsYW4gb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy4gVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogbiA+PSAwLicsXG4gIGV4YW1wbGVzOiBbJ2NhdGFsYW4oMyknLCAnY2F0YWxhbig4KSddLFxuICBzZWVhbHNvOiBbJ2JlbGxOdW1iZXJzJ11cbn07XG5leHBvcnRzLmNhdGFsYW5Eb2NzID0gY2F0YWxhbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbXBvc2l0aW9uRG9jcyA9IHZvaWQgMDtcbnZhciBjb21wb3NpdGlvbkRvY3MgPSB7XG4gIG5hbWU6ICdjb21wb3NpdGlvbicsXG4gIGNhdGVnb3J5OiAnQ29tYmluYXRvcmljcycsXG4gIHN5bnRheDogWydjb21wb3NpdGlvbihuLCBrKSddLFxuICBkZXNjcmlwdGlvbjogJ1RoZSBjb21wb3NpdGlvbiBjb3VudHMgb2YgbiBpbnRvIGsgcGFydHMuIGNvbXBvc2l0aW9uIG9ubHkgdGFrZXMgaW50ZWdlciBhcmd1bWVudHMuIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IGsgPD0gbi4nLFxuICBleGFtcGxlczogWydjb21wb3NpdGlvbig1LCAzKSddLFxuICBzZWVhbHNvOiBbJ2NvbWJpbmF0aW9ucyddXG59O1xuZXhwb3J0cy5jb21wb3NpdGlvbkRvY3MgPSBjb21wb3NpdGlvbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnN0aXJsaW5nUzJEb2NzID0gdm9pZCAwO1xudmFyIHN0aXJsaW5nUzJEb2NzID0ge1xuICBuYW1lOiAnc3RpcmxpbmdTMicsXG4gIGNhdGVnb3J5OiAnQ29tYmluYXRvcmljcycsXG4gIHN5bnRheDogWydzdGlybGluZ1MyKG4sIGspJ10sXG4gIGRlc2NyaXB0aW9uOiAnaGUgU3RpcmxpbmcgbnVtYmVycyBvZiB0aGUgc2Vjb25kIGtpbmQsIGNvdW50cyB0aGUgbnVtYmVyIG9mIHdheXMgdG8gcGFydGl0aW9uIGEgc2V0IG9mIG4gbGFiZWxsZWQgb2JqZWN0cyBpbnRvIGsgbm9uZW1wdHkgdW5sYWJlbGxlZCBzdWJzZXRzLiBgc3RpcmxpbmdTMmAgb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy4gVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogayA8PSBuLiBJZiBuID0gayBvciBrID0gMSwgdGhlbiBzKG4saykgPSAxLicsXG4gIGV4YW1wbGVzOiBbJ3N0aXJsaW5nUzIoNSwgMyknXSxcbiAgc2VlYWxzbzogWydiZWxsTnVtYmVycyddXG59O1xuZXhwb3J0cy5zdGlybGluZ1MyRG9jcyA9IHN0aXJsaW5nUzJEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hcmdEb2NzID0gdm9pZCAwO1xudmFyIGFyZ0RvY3MgPSB7XG4gIG5hbWU6ICdhcmcnLFxuICBjYXRlZ29yeTogJ0NvbXBsZXgnLFxuICBzeW50YXg6IFsnYXJnKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgYXJndW1lbnQgb2YgYSBjb21wbGV4IHZhbHVlLiBJZiB4ID0gYStiaSwgdGhlIGFyZ3VtZW50IGlzIGNvbXB1dGVkIGFzIGF0YW4yKGIsIGEpLicsXG4gIGV4YW1wbGVzOiBbJ2FyZygyICsgMmkpJywgJ2F0YW4yKDMsIDIpJywgJ2FyZygyICsgM2kpJ10sXG4gIHNlZWFsc286IFsncmUnLCAnaW0nLCAnY29uaicsICdhYnMnXVxufTtcbmV4cG9ydHMuYXJnRG9jcyA9IGFyZ0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbmpEb2NzID0gdm9pZCAwO1xudmFyIGNvbmpEb2NzID0ge1xuICBuYW1lOiAnY29uaicsXG4gIGNhdGVnb3J5OiAnQ29tcGxleCcsXG4gIHN5bnRheDogWydjb25qKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgY29tcGxleCBjb25qdWdhdGUgb2YgYSBjb21wbGV4IHZhbHVlLiBJZiB4ID0gYStiaSwgdGhlIGNvbXBsZXggY29uanVnYXRlIGlzIGEtYmkuJyxcbiAgZXhhbXBsZXM6IFsnY29uaigyICsgM2kpJywgJ2NvbmooMiAtIDNpKScsICdjb25qKC01LjJpKSddLFxuICBzZWVhbHNvOiBbJ3JlJywgJ2ltJywgJ2FicycsICdhcmcnXVxufTtcbmV4cG9ydHMuY29uakRvY3MgPSBjb25qRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW1Eb2NzID0gdm9pZCAwO1xudmFyIGltRG9jcyA9IHtcbiAgbmFtZTogJ2ltJyxcbiAgY2F0ZWdvcnk6ICdDb21wbGV4JyxcbiAgc3ludGF4OiBbJ2ltKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnR2V0IHRoZSBpbWFnaW5hcnkgcGFydCBvZiBhIGNvbXBsZXggbnVtYmVyLicsXG4gIGV4YW1wbGVzOiBbJ2ltKDIgKyAzaSknLCAncmUoMiArIDNpKScsICdpbSgtNS4yaSknLCAnaW0oMi40KSddLFxuICBzZWVhbHNvOiBbJ3JlJywgJ2NvbmonLCAnYWJzJywgJ2FyZyddXG59O1xuZXhwb3J0cy5pbURvY3MgPSBpbURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJlRG9jcyA9IHZvaWQgMDtcbnZhciByZURvY3MgPSB7XG4gIG5hbWU6ICdyZScsXG4gIGNhdGVnb3J5OiAnQ29tcGxleCcsXG4gIHN5bnRheDogWydyZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0dldCB0aGUgcmVhbCBwYXJ0IG9mIGEgY29tcGxleCBudW1iZXIuJyxcbiAgZXhhbXBsZXM6IFsncmUoMiArIDNpKScsICdpbSgyICsgM2kpJywgJ3JlKC01LjJpKScsICdyZSgyLjQpJ10sXG4gIHNlZWFsc286IFsnaW0nLCAnY29uaicsICdhYnMnLCAnYXJnJ11cbn07XG5leHBvcnRzLnJlRG9jcyA9IHJlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXZhbHVhdGVEb2NzID0gdm9pZCAwO1xudmFyIGV2YWx1YXRlRG9jcyA9IHtcbiAgbmFtZTogJ2V2YWx1YXRlJyxcbiAgY2F0ZWdvcnk6ICdFeHByZXNzaW9uJyxcbiAgc3ludGF4OiBbJ2V2YWx1YXRlKGV4cHJlc3Npb24pJywgJ2V2YWx1YXRlKFtleHByMSwgZXhwcjIsIGV4cHIzLCAuLi5dKSddLFxuICBkZXNjcmlwdGlvbjogJ0V2YWx1YXRlIGFuIGV4cHJlc3Npb24gb3IgYW4gYXJyYXkgd2l0aCBleHByZXNzaW9ucy4nLFxuICBleGFtcGxlczogWydldmFsdWF0ZShcIjIgKyAzXCIpJywgJ2V2YWx1YXRlKFwic3FydChcIiArIDQgKyBcIilcIiknXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLmV2YWx1YXRlRG9jcyA9IGV2YWx1YXRlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaGVscERvY3MgPSB2b2lkIDA7XG52YXIgaGVscERvY3MgPSB7XG4gIG5hbWU6ICdoZWxwJyxcbiAgY2F0ZWdvcnk6ICdFeHByZXNzaW9uJyxcbiAgc3ludGF4OiBbJ2hlbHAob2JqZWN0KScsICdoZWxwKHN0cmluZyknXSxcbiAgZGVzY3JpcHRpb246ICdEaXNwbGF5IGRvY3VtZW50YXRpb24gb24gYSBmdW5jdGlvbiBvciBkYXRhIHR5cGUuJyxcbiAgZXhhbXBsZXM6IFsnaGVscChzcXJ0KScsICdoZWxwKFwiY29tcGxleFwiKSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuaGVscERvY3MgPSBoZWxwRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGlzdGFuY2VEb2NzID0gdm9pZCAwO1xudmFyIGRpc3RhbmNlRG9jcyA9IHtcbiAgbmFtZTogJ2Rpc3RhbmNlJyxcbiAgY2F0ZWdvcnk6ICdHZW9tZXRyeScsXG4gIHN5bnRheDogWydkaXN0YW5jZShbeDEsIHkxXSwgW3gyLCB5Ml0pJywgJ2Rpc3RhbmNlKFtbeDEsIHkxXSwgW3gyLCB5Ml1dKSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZXMgdGhlIEV1Y2xpZGVhbiBkaXN0YW5jZSBiZXR3ZWVuIHR3byBwb2ludHMuJyxcbiAgZXhhbXBsZXM6IFsnZGlzdGFuY2UoWzAsMF0sIFs0LDRdKScsICdkaXN0YW5jZShbWzAsMF0sIFs0LDRdXSknXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLmRpc3RhbmNlRG9jcyA9IGRpc3RhbmNlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaW50ZXJzZWN0RG9jcyA9IHZvaWQgMDtcbnZhciBpbnRlcnNlY3REb2NzID0ge1xuICBuYW1lOiAnaW50ZXJzZWN0JyxcbiAgY2F0ZWdvcnk6ICdHZW9tZXRyeScsXG4gIHN5bnRheDogWydpbnRlcnNlY3QoZXhwcjEsIGV4cHIyLCBleHByMywgZXhwcjQpJywgJ2ludGVyc2VjdChleHByMSwgZXhwcjIsIGV4cHIzKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGVzIHRoZSBpbnRlcnNlY3Rpb24gcG9pbnQgb2YgbGluZXMgYW5kL29yIHBsYW5lcy4nLFxuICBleGFtcGxlczogWydpbnRlcnNlY3QoWzAsIDBdLCBbMTAsIDEwXSwgWzEwLCAwXSwgWzAsIDEwXSknLCAnaW50ZXJzZWN0KFsxLCAwLCAxXSwgIFs0LCAtMiwgMl0sIFsxLCAxLCAxLCA2XSknXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLmludGVyc2VjdERvY3MgPSBpbnRlcnNlY3REb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hbmREb2NzID0gdm9pZCAwO1xudmFyIGFuZERvY3MgPSB7XG4gIG5hbWU6ICdhbmQnLFxuICBjYXRlZ29yeTogJ0xvZ2ljYWwnLFxuICBzeW50YXg6IFsneCBhbmQgeScsICdhbmQoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdMb2dpY2FsIGFuZC4gVGVzdCB3aGV0aGVyIHR3byB2YWx1ZXMgYXJlIGJvdGggZGVmaW5lZCB3aXRoIGEgbm9uemVyby9ub25lbXB0eSB2YWx1ZS4nLFxuICBleGFtcGxlczogWyd0cnVlIGFuZCBmYWxzZScsICd0cnVlIGFuZCB0cnVlJywgJzIgYW5kIDQnXSxcbiAgc2VlYWxzbzogWydub3QnLCAnb3InLCAneG9yJ11cbn07XG5leHBvcnRzLmFuZERvY3MgPSBhbmREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5ub3REb2NzID0gdm9pZCAwO1xudmFyIG5vdERvY3MgPSB7XG4gIG5hbWU6ICdub3QnLFxuICBjYXRlZ29yeTogJ0xvZ2ljYWwnLFxuICBzeW50YXg6IFsnbm90IHgnLCAnbm90KHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnTG9naWNhbCBub3QuIEZsaXBzIHRoZSBib29sZWFuIHZhbHVlIG9mIGdpdmVuIGFyZ3VtZW50LicsXG4gIGV4YW1wbGVzOiBbJ25vdCB0cnVlJywgJ25vdCBmYWxzZScsICdub3QgMicsICdub3QgMCddLFxuICBzZWVhbHNvOiBbJ2FuZCcsICdvcicsICd4b3InXVxufTtcbmV4cG9ydHMubm90RG9jcyA9IG5vdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm9yRG9jcyA9IHZvaWQgMDtcbnZhciBvckRvY3MgPSB7XG4gIG5hbWU6ICdvcicsXG4gIGNhdGVnb3J5OiAnTG9naWNhbCcsXG4gIHN5bnRheDogWyd4IG9yIHknLCAnb3IoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdMb2dpY2FsIG9yLiBUZXN0IGlmIGF0IGxlYXN0IG9uZSB2YWx1ZSBpcyBkZWZpbmVkIHdpdGggYSBub256ZXJvL25vbmVtcHR5IHZhbHVlLicsXG4gIGV4YW1wbGVzOiBbJ3RydWUgb3IgZmFsc2UnLCAnZmFsc2Ugb3IgZmFsc2UnLCAnMCBvciA0J10sXG4gIHNlZWFsc286IFsnbm90JywgJ2FuZCcsICd4b3InXVxufTtcbmV4cG9ydHMub3JEb2NzID0gb3JEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy54b3JEb2NzID0gdm9pZCAwO1xudmFyIHhvckRvY3MgPSB7XG4gIG5hbWU6ICd4b3InLFxuICBjYXRlZ29yeTogJ0xvZ2ljYWwnLFxuICBzeW50YXg6IFsneCB4b3IgeScsICd4b3IoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdMb2dpY2FsIGV4Y2x1c2l2ZSBvciwgeG9yLiBUZXN0IHdoZXRoZXIgb25lIGFuZCBvbmx5IG9uZSB2YWx1ZSBpcyBkZWZpbmVkIHdpdGggYSBub256ZXJvL25vbmVtcHR5IHZhbHVlLicsXG4gIGV4YW1wbGVzOiBbJ3RydWUgeG9yIGZhbHNlJywgJ2ZhbHNlIHhvciBmYWxzZScsICd0cnVlIHhvciB0cnVlJywgJzAgeG9yIDQnXSxcbiAgc2VlYWxzbzogWydub3QnLCAnYW5kJywgJ29yJ11cbn07XG5leHBvcnRzLnhvckRvY3MgPSB4b3JEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb2x1bW5Eb2NzID0gdm9pZCAwO1xudmFyIGNvbHVtbkRvY3MgPSB7XG4gIG5hbWU6ICdjb2x1bW4nLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydjb2x1bW4oeCwgaW5kZXgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnUmV0dXJuIGEgY29sdW1uIGZyb20gYSBtYXRyaXggb3IgYXJyYXkuJyxcbiAgZXhhbXBsZXM6IFsnQSA9IFtbMSwgMl0sIFszLCA0XV0nLCAnY29sdW1uKEEsIDEpJywgJ2NvbHVtbihBLCAyKSddLFxuICBzZWVhbHNvOiBbJ3JvdyddXG59O1xuZXhwb3J0cy5jb2x1bW5Eb2NzID0gY29sdW1uRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29uY2F0RG9jcyA9IHZvaWQgMDtcbnZhciBjb25jYXREb2NzID0ge1xuICBuYW1lOiAnY29uY2F0JyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnY29uY2F0KEEsIEIsIEMsIC4uLiknLCAnY29uY2F0KEEsIEIsIEMsIC4uLiwgZGltKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbmNhdGVuYXRlIG1hdHJpY2VzLiBCeSBkZWZhdWx0LCB0aGUgbWF0cmljZXMgYXJlIGNvbmNhdGVuYXRlZCBieSB0aGUgbGFzdCBkaW1lbnNpb24uIFRoZSBkaW1lbnNpb24gb24gd2hpY2ggdG8gY29uY2F0ZW5hdGUgY2FuIGJlIHByb3ZpZGVkIGFzIGxhc3QgYXJndW1lbnQuJyxcbiAgZXhhbXBsZXM6IFsnQSA9IFsxLCAyOyA1LCA2XScsICdCID0gWzMsIDQ7IDcsIDhdJywgJ2NvbmNhdChBLCBCKScsICdjb25jYXQoQSwgQiwgMSknLCAnY29uY2F0KEEsIEIsIDIpJ10sXG4gIHNlZWFsc286IFsnZGV0JywgJ2RpYWcnLCAnaWRlbnRpdHknLCAnaW52JywgJ29uZXMnLCAncmFuZ2UnLCAnc2l6ZScsICdzcXVlZXplJywgJ3N1YnNldCcsICd0cmFjZScsICd0cmFuc3Bvc2UnLCAnemVyb3MnXVxufTtcbmV4cG9ydHMuY29uY2F0RG9jcyA9IGNvbmNhdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyb3NzRG9jcyA9IHZvaWQgMDtcbnZhciBjcm9zc0RvY3MgPSB7XG4gIG5hbWU6ICdjcm9zcycsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2Nyb3NzKEEsIEIpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBjcm9zcyBwcm9kdWN0IGZvciB0d28gdmVjdG9ycyBpbiB0aHJlZSBkaW1lbnNpb25hbCBzcGFjZS4nLFxuICBleGFtcGxlczogWydjcm9zcyhbMSwgMSwgMF0sICBbMCwgMSwgMV0pJywgJ2Nyb3NzKFszLCAtMywgMV0sIFs0LCA5LCAyXSknLCAnY3Jvc3MoWzIsIDMsIDRdLCAgWzUsIDYsIDddKSddLFxuICBzZWVhbHNvOiBbJ211bHRpcGx5JywgJ2RvdCddXG59O1xuZXhwb3J0cy5jcm9zc0RvY3MgPSBjcm9zc0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmN0cmFuc3Bvc2VEb2NzID0gdm9pZCAwO1xudmFyIGN0cmFuc3Bvc2VEb2NzID0ge1xuICBuYW1lOiAnY3RyYW5zcG9zZScsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ3hcXCcnLCAnY3RyYW5zcG9zZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXBsZXggQ29uanVnYXRlIGFuZCBUcmFuc3Bvc2UgYSBtYXRyaXgnLFxuICBleGFtcGxlczogWydhID0gWzEsIDIsIDM7IDQsIDUsIDZdJywgJ2FcXCcnLCAnY3RyYW5zcG9zZShhKSddLFxuICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYWNlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLmN0cmFuc3Bvc2VEb2NzID0gY3RyYW5zcG9zZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRldERvY3MgPSB2b2lkIDA7XG52YXIgZGV0RG9jcyA9IHtcbiAgbmFtZTogJ2RldCcsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2RldCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnQgb2YgYSBtYXRyaXgnLFxuICBleGFtcGxlczogWydkZXQoWzEsIDI7IDMsIDRdKScsICdkZXQoWy0yLCAyLCAzOyAtMSwgMSwgMzsgMiwgMCwgLTFdKSddLFxuICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ2ludicsICdvbmVzJywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLmRldERvY3MgPSBkZXREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kaWFnRG9jcyA9IHZvaWQgMDtcbnZhciBkaWFnRG9jcyA9IHtcbiAgbmFtZTogJ2RpYWcnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydkaWFnKHgpJywgJ2RpYWcoeCwgayknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgYSBkaWFnb25hbCBtYXRyaXggb3IgcmV0cmlldmUgdGhlIGRpYWdvbmFsIG9mIGEgbWF0cml4LiBXaGVuIHggaXMgYSB2ZWN0b3IsIGEgbWF0cml4IHdpdGggdGhlIHZlY3RvciB2YWx1ZXMgb24gdGhlIGRpYWdvbmFsIHdpbGwgYmUgcmV0dXJuZWQuIFdoZW4geCBpcyBhIG1hdHJpeCwgYSB2ZWN0b3Igd2l0aCB0aGUgZGlhZ29uYWwgdmFsdWVzIG9mIHRoZSBtYXRyaXggaXMgcmV0dXJuZWQuIFdoZW4gayBpcyBwcm92aWRlZCwgdGhlIGstdGggZGlhZ29uYWwgd2lsbCBiZSBmaWxsZWQgaW4gb3IgcmV0cmlldmVkLCBpZiBrIGlzIHBvc2l0aXZlLCB0aGUgdmFsdWVzIGFyZSBwbGFjZWQgb24gdGhlIHN1cGVyIGRpYWdvbmFsLiBXaGVuIGsgaXMgbmVnYXRpdmUsIHRoZSB2YWx1ZXMgYXJlIHBsYWNlZCBvbiB0aGUgc3ViIGRpYWdvbmFsLicsXG4gIGV4YW1wbGVzOiBbJ2RpYWcoMTozKScsICdkaWFnKDE6MywgMSknLCAnYSA9IFsxLCAyLCAzOyA0LCA1LCA2OyA3LCA4LCA5XScsICdkaWFnKGEpJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYWNlJywgJ3RyYW5zcG9zZScsICd6ZXJvcyddXG59O1xuZXhwb3J0cy5kaWFnRG9jcyA9IGRpYWdEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kb3REb2NzID0gdm9pZCAwO1xudmFyIGRvdERvY3MgPSB7XG4gIG5hbWU6ICdkb3QnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydkb3QoQSwgQiknLCAnQSAqIEInXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGRvdCBwcm9kdWN0IG9mIHR3byB2ZWN0b3JzLiAnICsgJ1RoZSBkb3QgcHJvZHVjdCBvZiBBID0gW2ExLCBhMiwgYTMsIC4uLiwgYW5dIGFuZCBCID0gW2IxLCBiMiwgYjMsIC4uLiwgYm5dICcgKyAnaXMgZGVmaW5lZCBhcyBkb3QoQSwgQikgPSBhMSAqIGIxICsgYTIgKiBiMiArIGEzICogYjMgKyAuLi4gKyBhbiAqIGJuJyxcbiAgZXhhbXBsZXM6IFsnZG90KFsyLCA0LCAxXSwgWzIsIDIsIDNdKScsICdbMiwgNCwgMV0gKiBbMiwgMiwgM10nXSxcbiAgc2VlYWxzbzogWydtdWx0aXBseScsICdjcm9zcyddXG59O1xuZXhwb3J0cy5kb3REb2NzID0gZG90RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZWlnc0RvY3MgPSB2b2lkIDA7XG52YXIgZWlnc0RvY3MgPSB7XG4gIG5hbWU6ICdlaWdzJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnZWlncyh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgZWlnZW52YWx1ZXMgYW5kIGVpZ2VudmVjdG9ycyBvZiBhIHJlYWwgc3ltbWV0cmljIG1hdHJpeCcsXG4gIGV4YW1wbGVzOiBbJ2VpZ3MoW1s1LCAyLjNdLCBbMi4zLCAxXV0pJ10sXG4gIHNlZWFsc286IFsnaW52J11cbn07XG5leHBvcnRzLmVpZ3NEb2NzID0gZWlnc0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZpbHRlckRvY3MgPSB2b2lkIDA7XG52YXIgZmlsdGVyRG9jcyA9IHtcbiAgbmFtZTogJ2ZpbHRlcicsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2ZpbHRlcih4LCB0ZXN0KSddLFxuICBkZXNjcmlwdGlvbjogJ0ZpbHRlciBpdGVtcyBpbiBhIG1hdHJpeC4nLFxuICBleGFtcGxlczogWydpc1Bvc2l0aXZlKHgpID0geCA+IDAnLCAnZmlsdGVyKFs2LCAtMiwgLTEsIDQsIDNdLCBpc1Bvc2l0aXZlKScsICdmaWx0ZXIoWzYsIC0yLCAwLCAxLCAwXSwgeCAhPSAwKSddLFxuICBzZWVhbHNvOiBbJ3NvcnQnLCAnbWFwJywgJ2ZvckVhY2gnXVxufTtcbmV4cG9ydHMuZmlsdGVyRG9jcyA9IGZpbHRlckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZsYXR0ZW5Eb2NzID0gdm9pZCAwO1xudmFyIGZsYXR0ZW5Eb2NzID0ge1xuICBuYW1lOiAnZmxhdHRlbicsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2ZsYXR0ZW4oeCknXSxcbiAgZGVzY3JpcHRpb246ICdGbGF0dGVuIGEgbXVsdGkgZGltZW5zaW9uYWwgbWF0cml4IGludG8gYSBzaW5nbGUgZGltZW5zaW9uYWwgbWF0cml4LicsXG4gIGV4YW1wbGVzOiBbJ2EgPSBbMSwgMiwgMzsgNCwgNSwgNl0nLCAnc2l6ZShhKScsICdiID0gZmxhdHRlbihhKScsICdzaXplKGIpJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ3Jlc2l6ZScsICdzaXplJywgJ3NxdWVlemUnXVxufTtcbmV4cG9ydHMuZmxhdHRlbkRvY3MgPSBmbGF0dGVuRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZm9yRWFjaERvY3MgPSB2b2lkIDA7XG52YXIgZm9yRWFjaERvY3MgPSB7XG4gIG5hbWU6ICdmb3JFYWNoJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnZm9yRWFjaCh4LCBjYWxsYmFjayknXSxcbiAgZGVzY3JpcHRpb246ICdJdGVyYXRlcyBvdmVyIGFsbCBlbGVtZW50cyBvZiBhIG1hdHJpeC9hcnJheSwgYW5kIGV4ZWN1dGVzIHRoZSBnaXZlbiBjYWxsYmFjayBmdW5jdGlvbi4nLFxuICBleGFtcGxlczogWydmb3JFYWNoKFsxLCAyLCAzXSwgZnVuY3Rpb24odmFsKSB7IGNvbnNvbGUubG9nKHZhbCkgfSknXSxcbiAgc2VlYWxzbzogWydtYXAnLCAnc29ydCcsICdmaWx0ZXInXVxufTtcbmV4cG9ydHMuZm9yRWFjaERvY3MgPSBmb3JFYWNoRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZ2V0TWF0cml4RGF0YVR5cGVEb2NzID0gdm9pZCAwO1xudmFyIGdldE1hdHJpeERhdGFUeXBlRG9jcyA9IHtcbiAgbmFtZTogJ2dldE1hdHJpeERhdGFUeXBlJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnZ2V0TWF0cml4RGF0YVR5cGUoeCknXSxcbiAgZGVzY3JpcHRpb246ICdGaW5kIHRoZSBkYXRhIHR5cGUgb2YgYWxsIGVsZW1lbnRzIGluIGEgbWF0cml4IG9yIGFycmF5LCAnICsgJ2ZvciBleGFtcGxlIFwibnVtYmVyXCIgaWYgYWxsIGl0ZW1zIGFyZSBhIG51bWJlciAnICsgJ2FuZCBcIkNvbXBsZXhcIiBpZiBhbGwgdmFsdWVzIGFyZSBjb21wbGV4IG51bWJlcnMuICcgKyAnSWYgYSBtYXRyaXggY29udGFpbnMgbW9yZSB0aGFuIG9uZSBkYXRhIHR5cGUsIGl0IHdpbGwgcmV0dXJuIFwibWl4ZWRcIi4nLFxuICBleGFtcGxlczogWydnZXRNYXRyaXhEYXRhVHlwZShbMSwgMiwgM10pJywgJ2dldE1hdHJpeERhdGFUeXBlKFtbNSBjbV0sIFsyIGluY2hdXSknLCAnZ2V0TWF0cml4RGF0YVR5cGUoWzEsIFwidGV4dFwiXSknLCAnZ2V0TWF0cml4RGF0YVR5cGUoWzEsIGJpZ251bWJlcig0KV0pJ10sXG4gIHNlZWFsc286IFsnbWF0cml4JywgJ3NwYXJzZScsICd0eXBlT2YnXVxufTtcbmV4cG9ydHMuZ2V0TWF0cml4RGF0YVR5cGVEb2NzID0gZ2V0TWF0cml4RGF0YVR5cGVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pZGVudGl0eURvY3MgPSB2b2lkIDA7XG52YXIgaWRlbnRpdHlEb2NzID0ge1xuICBuYW1lOiAnaWRlbnRpdHknLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydpZGVudGl0eShuKScsICdpZGVudGl0eShtLCBuKScsICdpZGVudGl0eShbbSwgbl0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnUmV0dXJucyB0aGUgaWRlbnRpdHkgbWF0cml4IHdpdGggc2l6ZSBtLWJ5LW4uIFRoZSBtYXRyaXggaGFzIG9uZXMgb24gdGhlIGRpYWdvbmFsIGFuZCB6ZXJvcyBlbHNld2hlcmUuJyxcbiAgZXhhbXBsZXM6IFsnaWRlbnRpdHkoMyknLCAnaWRlbnRpdHkoMywgNSknLCAnYSA9IFsxLCAyLCAzOyA0LCA1LCA2XScsICdpZGVudGl0eShzaXplKGEpKSddLFxuICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkZXQnLCAnZGlhZycsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYWNlJywgJ3RyYW5zcG9zZScsICd6ZXJvcyddXG59O1xuZXhwb3J0cy5pZGVudGl0eURvY3MgPSBpZGVudGl0eURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmludkRvY3MgPSB2b2lkIDA7XG52YXIgaW52RG9jcyA9IHtcbiAgbmFtZTogJ2ludicsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ2ludih4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgaW52ZXJzZSBvZiBhIG1hdHJpeCcsXG4gIGV4YW1wbGVzOiBbJ2ludihbMSwgMjsgMywgNF0pJywgJ2ludig0KScsICcxIC8gNCddLFxuICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdvbmVzJywgJ3JhbmdlJywgJ3NpemUnLCAnc3F1ZWV6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLmludkRvY3MgPSBpbnZEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5rcm9uRG9jcyA9IHZvaWQgMDtcbnZhciBrcm9uRG9jcyA9IHtcbiAgbmFtZTogJ2tyb24nLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydrcm9uKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlcyB0aGUga3JvbmVja2VyIHByb2R1Y3Qgb2YgMiBtYXRyaWNlcyBvciB2ZWN0b3JzLicsXG4gIGV4YW1wbGVzOiBbJ2tyb24oW1sxLCAwXSwgWzAsIDFdXSwgW1sxLCAyXSwgWzMsIDRdXSknLCAna3JvbihbMSwxXSwgWzIsMyw0XSknXSxcbiAgc2VlYWxzbzogWydtdWx0aXBseScsICdkb3QnLCAnY3Jvc3MnXVxufTtcbmV4cG9ydHMua3JvbkRvY3MgPSBrcm9uRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWFwRG9jcyA9IHZvaWQgMDtcbnZhciBtYXBEb2NzID0ge1xuICBuYW1lOiAnbWFwJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnbWFwKHgsIGNhbGxiYWNrKSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIG5ldyBtYXRyaXggb3IgYXJyYXkgd2l0aCB0aGUgcmVzdWx0cyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZXhlY3V0ZWQgb24gZWFjaCBlbnRyeSBvZiB0aGUgbWF0cml4L2FycmF5LicsXG4gIGV4YW1wbGVzOiBbJ21hcChbMSwgMiwgM10sIHNxdWFyZSknXSxcbiAgc2VlYWxzbzogWydmaWx0ZXInLCAnZm9yRWFjaCddXG59O1xuZXhwb3J0cy5tYXBEb2NzID0gbWFwRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMub25lc0RvY3MgPSB2b2lkIDA7XG52YXIgb25lc0RvY3MgPSB7XG4gIG5hbWU6ICdvbmVzJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnb25lcyhtKScsICdvbmVzKG0sIG4pJywgJ29uZXMobSwgbiwgcCwgLi4uKScsICdvbmVzKFttXSknLCAnb25lcyhbbSwgbl0pJywgJ29uZXMoW20sIG4sIHAsIC4uLl0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgbWF0cml4IGNvbnRhaW5pbmcgb25lcy4nLFxuICBleGFtcGxlczogWydvbmVzKDMpJywgJ29uZXMoMywgNSknLCAnb25lcyhbMiwzXSkgKiA0LjUnLCAnYSA9IFsxLCAyLCAzOyA0LCA1LCA2XScsICdvbmVzKHNpemUoYSkpJ10sXG4gIHNlZWFsc286IFsnY29uY2F0JywgJ2RldCcsICdkaWFnJywgJ2lkZW50aXR5JywgJ2ludicsICdyYW5nZScsICdzaXplJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYWNlJywgJ3RyYW5zcG9zZScsICd6ZXJvcyddXG59O1xuZXhwb3J0cy5vbmVzRG9jcyA9IG9uZXNEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wYXJ0aXRpb25TZWxlY3REb2NzID0gdm9pZCAwO1xudmFyIHBhcnRpdGlvblNlbGVjdERvY3MgPSB7XG4gIG5hbWU6ICdwYXJ0aXRpb25TZWxlY3QnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydwYXJ0aXRpb25TZWxlY3QoeCwgayknLCAncGFydGl0aW9uU2VsZWN0KHgsIGssIGNvbXBhcmUpJ10sXG4gIGRlc2NyaXB0aW9uOiAnUGFydGl0aW9uLWJhc2VkIHNlbGVjdGlvbiBvZiBhbiBhcnJheSBvciAxRCBtYXRyaXguIFdpbGwgZmluZCB0aGUga3RoIHNtYWxsZXN0IHZhbHVlLCBhbmQgbXV0YXRlcyB0aGUgaW5wdXQgYXJyYXkuIFVzZXMgUXVpY2tzZWxlY3QuJyxcbiAgZXhhbXBsZXM6IFsncGFydGl0aW9uU2VsZWN0KFs1LCAxMCwgMV0sIDIpJywgJ3BhcnRpdGlvblNlbGVjdChbXCJDXCIsIFwiQlwiLCBcIkFcIiwgXCJEXCJdLCAxKSddLFxuICBzZWVhbHNvOiBbJ3NvcnQnXVxufTtcbmV4cG9ydHMucGFydGl0aW9uU2VsZWN0RG9jcyA9IHBhcnRpdGlvblNlbGVjdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJhbmdlRG9jcyA9IHZvaWQgMDtcbnZhciByYW5nZURvY3MgPSB7XG4gIG5hbWU6ICdyYW5nZScsXG4gIGNhdGVnb3J5OiAnVHlwZScsXG4gIHN5bnRheDogWydzdGFydDplbmQnLCAnc3RhcnQ6c3RlcDplbmQnLCAncmFuZ2Uoc3RhcnQsIGVuZCknLCAncmFuZ2Uoc3RhcnQsIGVuZCwgc3RlcCknLCAncmFuZ2Uoc3RyaW5nKSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSBhIHJhbmdlLiBMb3dlciBib3VuZCBvZiB0aGUgcmFuZ2UgaXMgaW5jbHVkZWQsIHVwcGVyIGJvdW5kIGlzIGV4Y2x1ZGVkLicsXG4gIGV4YW1wbGVzOiBbJzE6NScsICczOi0xOi0zJywgJ3JhbmdlKDMsIDcpJywgJ3JhbmdlKDAsIDEyLCAyKScsICdyYW5nZShcIjQ6MTBcIiknLCAnYSA9IFsxLCAyLCAzLCA0OyA1LCA2LCA3LCA4XScsICdhWzE6MiwgMToyXSddLFxuICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdzaXplJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYWNlJywgJ3RyYW5zcG9zZScsICd6ZXJvcyddXG59O1xuZXhwb3J0cy5yYW5nZURvY3MgPSByYW5nZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJlc2hhcGVEb2NzID0gdm9pZCAwO1xudmFyIHJlc2hhcGVEb2NzID0ge1xuICBuYW1lOiAncmVzaGFwZScsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ3Jlc2hhcGUoeCwgc2l6ZXMpJ10sXG4gIGRlc2NyaXB0aW9uOiAnUmVzaGFwZSBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5IHRvIGZpdCB0aGUgc3BlY2lmaWVkIGRpbWVuc2lvbnMuJyxcbiAgZXhhbXBsZXM6IFsncmVzaGFwZShbMSwgMiwgMywgNCwgNSwgNl0sIFsyLCAzXSknLCAncmVzaGFwZShbWzEsIDJdLCBbMywgNF1dLCBbMSwgNF0pJywgJ3Jlc2hhcGUoW1sxLCAyXSwgWzMsIDRdXSwgWzRdKSddLFxuICBzZWVhbHNvOiBbJ3NpemUnLCAnc3F1ZWV6ZScsICdyZXNpemUnXVxufTtcbmV4cG9ydHMucmVzaGFwZURvY3MgPSByZXNoYXBlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmVzaXplRG9jcyA9IHZvaWQgMDtcbnZhciByZXNpemVEb2NzID0ge1xuICBuYW1lOiAncmVzaXplJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsncmVzaXplKHgsIHNpemUpJywgJ3Jlc2l6ZSh4LCBzaXplLCBkZWZhdWx0VmFsdWUpJ10sXG4gIGRlc2NyaXB0aW9uOiAnUmVzaXplIGEgbWF0cml4LicsXG4gIGV4YW1wbGVzOiBbJ3Jlc2l6ZShbMSwyLDMsNCw1XSwgWzNdKScsICdyZXNpemUoWzEsMiwzXSwgWzVdKScsICdyZXNpemUoWzEsMiwzXSwgWzVdLCAtMSknLCAncmVzaXplKDIsIFsyLCAzXSknLCAncmVzaXplKFwiaGVsbG9cIiwgWzhdLCBcIiFcIiknXSxcbiAgc2VlYWxzbzogWydzaXplJywgJ3N1YnNldCcsICdzcXVlZXplJywgJ3Jlc2hhcGUnXVxufTtcbmV4cG9ydHMucmVzaXplRG9jcyA9IHJlc2l6ZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJvd0RvY3MgPSB2b2lkIDA7XG52YXIgcm93RG9jcyA9IHtcbiAgbmFtZTogJ3JvdycsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ3Jvdyh4LCBpbmRleCknXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm4gYSByb3cgZnJvbSBhIG1hdHJpeCBvciBhcnJheS4nLFxuICBleGFtcGxlczogWydBID0gW1sxLCAyXSwgWzMsIDRdXScsICdyb3coQSwgMSknLCAncm93KEEsIDIpJ10sXG4gIHNlZWFsc286IFsnY29sdW1uJ11cbn07XG5leHBvcnRzLnJvd0RvY3MgPSByb3dEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zaXplRG9jcyA9IHZvaWQgMDtcbnZhciBzaXplRG9jcyA9IHtcbiAgbmFtZTogJ3NpemUnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydzaXplKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBzaXplIG9mIGEgbWF0cml4LicsXG4gIGV4YW1wbGVzOiBbJ3NpemUoMi4zKScsICdzaXplKFwiaGVsbG8gd29ybGRcIiknLCAnYSA9IFsxLCAyOyAzLCA0OyA1LCA2XScsICdzaXplKGEpJywgJ3NpemUoMTo2KSddLFxuICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzcXVlZXplJywgJ3N1YnNldCcsICd0cmFjZScsICd0cmFuc3Bvc2UnLCAnemVyb3MnXVxufTtcbmV4cG9ydHMuc2l6ZURvY3MgPSBzaXplRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc29ydERvY3MgPSB2b2lkIDA7XG52YXIgc29ydERvY3MgPSB7XG4gIG5hbWU6ICdzb3J0JyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnc29ydCh4KScsICdzb3J0KHgsIGNvbXBhcmUpJ10sXG4gIGRlc2NyaXB0aW9uOiAnU29ydCB0aGUgaXRlbXMgaW4gYSBtYXRyaXguIENvbXBhcmUgY2FuIGJlIGEgc3RyaW5nIFwiYXNjXCIsIFwiZGVzY1wiLCBcIm5hdHVyYWxcIiwgb3IgYSBjdXN0b20gc29ydCBmdW5jdGlvbi4nLFxuICBleGFtcGxlczogWydzb3J0KFs1LCAxMCwgMV0pJywgJ3NvcnQoW1wiQ1wiLCBcIkJcIiwgXCJBXCIsIFwiRFwiXSknLCAnc29ydEJ5TGVuZ3RoKGEsIGIpID0gc2l6ZShhKVsxXSAtIHNpemUoYilbMV0nLCAnc29ydChbXCJMYW5nZG9uXCIsIFwiVG9tXCIsIFwiU2FyYVwiXSwgc29ydEJ5TGVuZ3RoKScsICdzb3J0KFtcIjEwXCIsIFwiMVwiLCBcIjJcIl0sIFwibmF0dXJhbFwiKSddLFxuICBzZWVhbHNvOiBbJ21hcCcsICdmaWx0ZXInLCAnZm9yRWFjaCddXG59O1xuZXhwb3J0cy5zb3J0RG9jcyA9IHNvcnREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5zcXVlZXplRG9jcyA9IHZvaWQgMDtcbnZhciBzcXVlZXplRG9jcyA9IHtcbiAgbmFtZTogJ3NxdWVlemUnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWydzcXVlZXplKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnUmVtb3ZlIGlubmVyIGFuZCBvdXRlciBzaW5nbGV0b24gZGltZW5zaW9ucyBmcm9tIGEgbWF0cml4LicsXG4gIGV4YW1wbGVzOiBbJ2EgPSB6ZXJvcygzLDIsMSknLCAnc2l6ZShzcXVlZXplKGEpKScsICdiID0gemVyb3MoMSwxLDMpJywgJ3NpemUoc3F1ZWV6ZShiKSknXSxcbiAgc2VlYWxzbzogWydjb25jYXQnLCAnZGV0JywgJ2RpYWcnLCAnaWRlbnRpdHknLCAnaW52JywgJ29uZXMnLCAncmFuZ2UnLCAnc2l6ZScsICdzdWJzZXQnLCAndHJhY2UnLCAndHJhbnNwb3NlJywgJ3plcm9zJ11cbn07XG5leHBvcnRzLnNxdWVlemVEb2NzID0gc3F1ZWV6ZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnN1YnNldERvY3MgPSB2b2lkIDA7XG52YXIgc3Vic2V0RG9jcyA9IHtcbiAgbmFtZTogJ3N1YnNldCcsXG4gIGNhdGVnb3J5OiAnTWF0cml4JyxcbiAgc3ludGF4OiBbJ3ZhbHVlKGluZGV4KScsICd2YWx1ZShpbmRleCkgPSByZXBsYWNlbWVudCcsICdzdWJzZXQodmFsdWUsIFtpbmRleF0pJywgJ3N1YnNldCh2YWx1ZSwgW2luZGV4XSwgcmVwbGFjZW1lbnQpJ10sXG4gIGRlc2NyaXB0aW9uOiAnR2V0IG9yIHNldCBhIHN1YnNldCBvZiBhIG1hdHJpeCBvciBzdHJpbmcuICcgKyAnSW5kZXhlcyBhcmUgb25lLWJhc2VkLiAnICsgJ0JvdGggdGhlIHJhbmdlcyBsb3dlci1ib3VuZCBhbmQgdXBwZXItYm91bmQgYXJlIGluY2x1ZGVkLicsXG4gIGV4YW1wbGVzOiBbJ2QgPSBbMSwgMjsgMywgNF0nLCAnZSA9IFtdJywgJ2VbMSwgMToyXSA9IFs1LCA2XScsICdlWzIsIDpdID0gWzcsIDhdJywgJ2YgPSBkICogZScsICdmWzIsIDFdJywgJ2ZbOiwgMV0nXSxcbiAgc2VlYWxzbzogWydjb25jYXQnLCAnZGV0JywgJ2RpYWcnLCAnaWRlbnRpdHknLCAnaW52JywgJ29uZXMnLCAncmFuZ2UnLCAnc2l6ZScsICdzcXVlZXplJywgJ3RyYWNlJywgJ3RyYW5zcG9zZScsICd6ZXJvcyddXG59O1xuZXhwb3J0cy5zdWJzZXREb2NzID0gc3Vic2V0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudHJhY2VEb2NzID0gdm9pZCAwO1xudmFyIHRyYWNlRG9jcyA9IHtcbiAgbmFtZTogJ3RyYWNlJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsndHJhY2UoQSknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIHRyYWNlIG9mIGEgbWF0cml4OiB0aGUgc3VtIG9mIHRoZSBlbGVtZW50cyBvbiB0aGUgbWFpbiBkaWFnb25hbCBvZiBhIHNxdWFyZSBtYXRyaXguJyxcbiAgZXhhbXBsZXM6IFsnQSA9IFsxLCAyLCAzOyAtMSwgMiwgMzsgMiwgMCwgM10nLCAndHJhY2UoQSknXSxcbiAgc2VlYWxzbzogWydjb25jYXQnLCAnZGV0JywgJ2RpYWcnLCAnaWRlbnRpdHknLCAnaW52JywgJ29uZXMnLCAncmFuZ2UnLCAnc2l6ZScsICdzcXVlZXplJywgJ3N1YnNldCcsICd0cmFuc3Bvc2UnLCAnemVyb3MnXVxufTtcbmV4cG9ydHMudHJhY2VEb2NzID0gdHJhY2VEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50cmFuc3Bvc2VEb2NzID0gdm9pZCAwO1xudmFyIHRyYW5zcG9zZURvY3MgPSB7XG4gIG5hbWU6ICd0cmFuc3Bvc2UnLFxuICBjYXRlZ29yeTogJ01hdHJpeCcsXG4gIHN5bnRheDogWyd4XFwnJywgJ3RyYW5zcG9zZSh4KSddLFxuICBkZXNjcmlwdGlvbjogJ1RyYW5zcG9zZSBhIG1hdHJpeCcsXG4gIGV4YW1wbGVzOiBbJ2EgPSBbMSwgMiwgMzsgNCwgNSwgNl0nLCAnYVxcJycsICd0cmFuc3Bvc2UoYSknXSxcbiAgc2VlYWxzbzogWydjb25jYXQnLCAnZGV0JywgJ2RpYWcnLCAnaWRlbnRpdHknLCAnaW52JywgJ29uZXMnLCAncmFuZ2UnLCAnc2l6ZScsICdzcXVlZXplJywgJ3N1YnNldCcsICd0cmFjZScsICd6ZXJvcyddXG59O1xuZXhwb3J0cy50cmFuc3Bvc2VEb2NzID0gdHJhbnNwb3NlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuemVyb3NEb2NzID0gdm9pZCAwO1xudmFyIHplcm9zRG9jcyA9IHtcbiAgbmFtZTogJ3plcm9zJyxcbiAgY2F0ZWdvcnk6ICdNYXRyaXgnLFxuICBzeW50YXg6IFsnemVyb3MobSknLCAnemVyb3MobSwgbiknLCAnemVyb3MobSwgbiwgcCwgLi4uKScsICd6ZXJvcyhbbV0pJywgJ3plcm9zKFttLCBuXSknLCAnemVyb3MoW20sIG4sIHAsIC4uLl0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIGEgbWF0cml4IGNvbnRhaW5pbmcgemVyb3MuJyxcbiAgZXhhbXBsZXM6IFsnemVyb3MoMyknLCAnemVyb3MoMywgNSknLCAnYSA9IFsxLCAyLCAzOyA0LCA1LCA2XScsICd6ZXJvcyhzaXplKGEpKSddLFxuICBzZWVhbHNvOiBbJ2NvbmNhdCcsICdkZXQnLCAnZGlhZycsICdpZGVudGl0eScsICdpbnYnLCAnb25lcycsICdyYW5nZScsICdzaXplJywgJ3NxdWVlemUnLCAnc3Vic2V0JywgJ3RyYWNlJywgJ3RyYW5zcG9zZSddXG59O1xuZXhwb3J0cy56ZXJvc0RvY3MgPSB6ZXJvc0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbWJpbmF0aW9uc0RvY3MgPSB2b2lkIDA7XG52YXIgY29tYmluYXRpb25zRG9jcyA9IHtcbiAgbmFtZTogJ2NvbWJpbmF0aW9ucycsXG4gIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLFxuICBzeW50YXg6IFsnY29tYmluYXRpb25zKG4sIGspJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGNvbWJpbmF0aW9ucyBvZiBuIGl0ZW1zIHRha2VuIGsgYXQgYSB0aW1lJyxcbiAgZXhhbXBsZXM6IFsnY29tYmluYXRpb25zKDcsIDUpJ10sXG4gIHNlZWFsc286IFsnY29tYmluYXRpb25zV2l0aFJlcCcsICdwZXJtdXRhdGlvbnMnLCAnZmFjdG9yaWFsJ11cbn07XG5leHBvcnRzLmNvbWJpbmF0aW9uc0RvY3MgPSBjb21iaW5hdGlvbnNEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb21iaW5hdGlvbnNXaXRoUmVwRG9jcyA9IHZvaWQgMDtcbnZhciBjb21iaW5hdGlvbnNXaXRoUmVwRG9jcyA9IHtcbiAgbmFtZTogJ2NvbWJpbmF0aW9uc1dpdGhSZXAnLFxuICBjYXRlZ29yeTogJ1Byb2JhYmlsaXR5JyxcbiAgc3ludGF4OiBbJ2NvbWJpbmF0aW9uc1dpdGhSZXAobiwgayknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBudW1iZXIgb2YgY29tYmluYXRpb25zIG9mIG4gaXRlbXMgdGFrZW4gayBhdCBhIHRpbWUgd2l0aCByZXBsYWNlbWVudHMuJyxcbiAgZXhhbXBsZXM6IFsnY29tYmluYXRpb25zV2l0aFJlcCg3LCA1KSddLFxuICBzZWVhbHNvOiBbJ2NvbWJpbmF0aW9ucycsICdwZXJtdXRhdGlvbnMnLCAnZmFjdG9yaWFsJ11cbn07XG5leHBvcnRzLmNvbWJpbmF0aW9uc1dpdGhSZXBEb2NzID0gY29tYmluYXRpb25zV2l0aFJlcERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZhY3RvcmlhbERvY3MgPSB2b2lkIDA7XG52YXIgZmFjdG9yaWFsRG9jcyA9IHtcbiAgbmFtZTogJ2ZhY3RvcmlhbCcsXG4gIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLFxuICBzeW50YXg6IFsnbiEnLCAnZmFjdG9yaWFsKG4pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgZmFjdG9yaWFsIG9mIGEgdmFsdWUnLFxuICBleGFtcGxlczogWyc1IScsICc1ICogNCAqIDMgKiAyICogMScsICczISddLFxuICBzZWVhbHNvOiBbJ2NvbWJpbmF0aW9ucycsICdjb21iaW5hdGlvbnNXaXRoUmVwJywgJ3Blcm11dGF0aW9ucycsICdnYW1tYSddXG59O1xuZXhwb3J0cy5mYWN0b3JpYWxEb2NzID0gZmFjdG9yaWFsRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZ2FtbWFEb2NzID0gdm9pZCAwO1xudmFyIGdhbW1hRG9jcyA9IHtcbiAgbmFtZTogJ2dhbW1hJyxcbiAgY2F0ZWdvcnk6ICdQcm9iYWJpbGl0eScsXG4gIHN5bnRheDogWydnYW1tYShuKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGdhbW1hIGZ1bmN0aW9uLiBGb3Igc21hbGwgdmFsdWVzLCB0aGUgTGFuY3pvcyBhcHByb3hpbWF0aW9uIGlzIHVzZWQsIGFuZCBmb3IgbGFyZ2UgdmFsdWVzIHRoZSBleHRlbmRlZCBTdGlybGluZyBhcHByb3hpbWF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ2dhbW1hKDQpJywgJzMhJywgJ2dhbW1hKDEvMiknLCAnc3FydChwaSknXSxcbiAgc2VlYWxzbzogWydmYWN0b3JpYWwnXVxufTtcbmV4cG9ydHMuZ2FtbWFEb2NzID0gZ2FtbWFEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5rbGRpdmVyZ2VuY2VEb2NzID0gdm9pZCAwO1xudmFyIGtsZGl2ZXJnZW5jZURvY3MgPSB7XG4gIG5hbWU6ICdrbGRpdmVyZ2VuY2UnLFxuICBjYXRlZ29yeTogJ1Byb2JhYmlsaXR5JyxcbiAgc3ludGF4OiBbJ2tsZGl2ZXJnZW5jZSh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgS3VsbGJhY2stTGVpYmxlciAoS0wpIGRpdmVyZ2VuY2UgIGJldHdlZW4gdHdvIGRpc3RyaWJ1dGlvbnMuJyxcbiAgZXhhbXBsZXM6IFsna2xkaXZlcmdlbmNlKFswLjcsMC41LDAuNF0sIFswLjIsMC45LDAuNV0pJ10sXG4gIHNlZWFsc286IFtdXG59O1xuZXhwb3J0cy5rbGRpdmVyZ2VuY2VEb2NzID0ga2xkaXZlcmdlbmNlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubXVsdGlub21pYWxEb2NzID0gdm9pZCAwO1xudmFyIG11bHRpbm9taWFsRG9jcyA9IHtcbiAgbmFtZTogJ211bHRpbm9taWFsJyxcbiAgY2F0ZWdvcnk6ICdQcm9iYWJpbGl0eScsXG4gIHN5bnRheDogWydtdWx0aW5vbWlhbChBKSddLFxuICBkZXNjcmlwdGlvbjogJ011bHRpbm9taWFsIENvZWZmaWNpZW50cyBjb21wdXRlIHRoZSBudW1iZXIgb2Ygd2F5cyBvZiBwaWNraW5nIGExLCBhMiwgLi4uLCBhaSB1bm9yZGVyZWQgb3V0Y29tZXMgZnJvbSBgbmAgcG9zc2liaWxpdGllcy4gbXVsdGlub21pYWwgdGFrZXMgb25lIGFycmF5IG9mIGludGVnZXJzIGFzIGFuIGFyZ3VtZW50LiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBtdXN0IGJlIGVuZm9yY2VkOiBldmVyeSBhaSA+IDAuJyxcbiAgZXhhbXBsZXM6IFsnbXVsdGlub21pYWwoWzEsIDIsIDFdKSddLFxuICBzZWVhbHNvOiBbJ2NvbWJpbmF0aW9ucycsICdmYWN0b3JpYWwnXVxufTtcbmV4cG9ydHMubXVsdGlub21pYWxEb2NzID0gbXVsdGlub21pYWxEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5wZXJtdXRhdGlvbnNEb2NzID0gdm9pZCAwO1xudmFyIHBlcm11dGF0aW9uc0RvY3MgPSB7XG4gIG5hbWU6ICdwZXJtdXRhdGlvbnMnLFxuICBjYXRlZ29yeTogJ1Byb2JhYmlsaXR5JyxcbiAgc3ludGF4OiBbJ3Blcm11dGF0aW9ucyhuKScsICdwZXJtdXRhdGlvbnMobiwgayknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBudW1iZXIgb2YgcGVybXV0YXRpb25zIG9mIG4gaXRlbXMgdGFrZW4gayBhdCBhIHRpbWUnLFxuICBleGFtcGxlczogWydwZXJtdXRhdGlvbnMoNSknLCAncGVybXV0YXRpb25zKDUsIDMpJ10sXG4gIHNlZWFsc286IFsnY29tYmluYXRpb25zJywgJ2NvbWJpbmF0aW9uc1dpdGhSZXAnLCAnZmFjdG9yaWFsJ11cbn07XG5leHBvcnRzLnBlcm11dGF0aW9uc0RvY3MgPSBwZXJtdXRhdGlvbnNEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5waWNrUmFuZG9tRG9jcyA9IHZvaWQgMDtcbnZhciBwaWNrUmFuZG9tRG9jcyA9IHtcbiAgbmFtZTogJ3BpY2tSYW5kb20nLFxuICBjYXRlZ29yeTogJ1Byb2JhYmlsaXR5JyxcbiAgc3ludGF4OiBbJ3BpY2tSYW5kb20oYXJyYXkpJywgJ3BpY2tSYW5kb20oYXJyYXksIG51bWJlciknLCAncGlja1JhbmRvbShhcnJheSwgd2VpZ2h0cyknLCAncGlja1JhbmRvbShhcnJheSwgbnVtYmVyLCB3ZWlnaHRzKScsICdwaWNrUmFuZG9tKGFycmF5LCB3ZWlnaHRzLCBudW1iZXIpJ10sXG4gIGRlc2NyaXB0aW9uOiAnUGljayBhIHJhbmRvbSBlbnRyeSBmcm9tIGEgZ2l2ZW4gYXJyYXkuJyxcbiAgZXhhbXBsZXM6IFsncGlja1JhbmRvbSgwOjEwKScsICdwaWNrUmFuZG9tKFsxLCAzLCAxLCA2XSknLCAncGlja1JhbmRvbShbMSwgMywgMSwgNl0sIDIpJywgJ3BpY2tSYW5kb20oWzEsIDMsIDEsIDZdLCBbMiwgMywgMiwgMV0pJywgJ3BpY2tSYW5kb20oWzEsIDMsIDEsIDZdLCAyLCBbMiwgMywgMiwgMV0pJywgJ3BpY2tSYW5kb20oWzEsIDMsIDEsIDZdLCBbMiwgMywgMiwgMV0sIDIpJ10sXG4gIHNlZWFsc286IFsncmFuZG9tJywgJ3JhbmRvbUludCddXG59O1xuZXhwb3J0cy5waWNrUmFuZG9tRG9jcyA9IHBpY2tSYW5kb21Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5yYW5kb21Eb2NzID0gdm9pZCAwO1xudmFyIHJhbmRvbURvY3MgPSB7XG4gIG5hbWU6ICdyYW5kb20nLFxuICBjYXRlZ29yeTogJ1Byb2JhYmlsaXR5JyxcbiAgc3ludGF4OiBbJ3JhbmRvbSgpJywgJ3JhbmRvbShtYXgpJywgJ3JhbmRvbShtaW4sIG1heCknLCAncmFuZG9tKHNpemUpJywgJ3JhbmRvbShzaXplLCBtYXgpJywgJ3JhbmRvbShzaXplLCBtaW4sIG1heCknXSxcbiAgZGVzY3JpcHRpb246ICdSZXR1cm4gYSByYW5kb20gbnVtYmVyLicsXG4gIGV4YW1wbGVzOiBbJ3JhbmRvbSgpJywgJ3JhbmRvbSgxMCwgMjApJywgJ3JhbmRvbShbMiwgM10pJ10sXG4gIHNlZWFsc286IFsncGlja1JhbmRvbScsICdyYW5kb21JbnQnXVxufTtcbmV4cG9ydHMucmFuZG9tRG9jcyA9IHJhbmRvbURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnJhbmRvbUludERvY3MgPSB2b2lkIDA7XG52YXIgcmFuZG9tSW50RG9jcyA9IHtcbiAgbmFtZTogJ3JhbmRvbUludCcsXG4gIGNhdGVnb3J5OiAnUHJvYmFiaWxpdHknLFxuICBzeW50YXg6IFsncmFuZG9tSW50KG1heCknLCAncmFuZG9tSW50KG1pbiwgbWF4KScsICdyYW5kb21JbnQoc2l6ZSknLCAncmFuZG9tSW50KHNpemUsIG1heCknLCAncmFuZG9tSW50KHNpemUsIG1pbiwgbWF4KSddLFxuICBkZXNjcmlwdGlvbjogJ1JldHVybiBhIHJhbmRvbSBpbnRlZ2VyIG51bWJlcicsXG4gIGV4YW1wbGVzOiBbJ3JhbmRvbUludCgxMCwgMjApJywgJ3JhbmRvbUludChbMiwgM10sIDEwKSddLFxuICBzZWVhbHNvOiBbJ3BpY2tSYW5kb20nLCAncmFuZG9tJ11cbn07XG5leHBvcnRzLnJhbmRvbUludERvY3MgPSByYW5kb21JbnREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jb21wYXJlRG9jcyA9IHZvaWQgMDtcbnZhciBjb21wYXJlRG9jcyA9IHtcbiAgbmFtZTogJ2NvbXBhcmUnLFxuICBjYXRlZ29yeTogJ1JlbGF0aW9uYWwnLFxuICBzeW50YXg6IFsnY29tcGFyZSh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXBhcmUgdHdvIHZhbHVlcy4gJyArICdSZXR1cm5zIDEgd2hlbiB4ID4geSwgLTEgd2hlbiB4IDwgeSwgYW5kIDAgd2hlbiB4ID09IHkuJyxcbiAgZXhhbXBsZXM6IFsnY29tcGFyZSgyLCAzKScsICdjb21wYXJlKDMsIDIpJywgJ2NvbXBhcmUoMiwgMiknLCAnY29tcGFyZSg1Y20sIDQwbW0pJywgJ2NvbXBhcmUoMiwgWzEsIDIsIDNdKSddLFxuICBzZWVhbHNvOiBbJ2VxdWFsJywgJ3VuZXF1YWwnLCAnc21hbGxlcicsICdzbWFsbGVyRXEnLCAnbGFyZ2VyRXEnLCAnY29tcGFyZU5hdHVyYWwnLCAnY29tcGFyZVRleHQnXVxufTtcbmV4cG9ydHMuY29tcGFyZURvY3MgPSBjb21wYXJlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29tcGFyZU5hdHVyYWxEb2NzID0gdm9pZCAwO1xudmFyIGNvbXBhcmVOYXR1cmFsRG9jcyA9IHtcbiAgbmFtZTogJ2NvbXBhcmVOYXR1cmFsJyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ2NvbXBhcmVOYXR1cmFsKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcGFyZSB0d28gdmFsdWVzIG9mIGFueSB0eXBlIGluIGEgZGV0ZXJtaW5pc3RpYywgbmF0dXJhbCB3YXkuICcgKyAnUmV0dXJucyAxIHdoZW4geCA+IHksIC0xIHdoZW4geCA8IHksIGFuZCAwIHdoZW4geCA9PSB5LicsXG4gIGV4YW1wbGVzOiBbJ2NvbXBhcmVOYXR1cmFsKDIsIDMpJywgJ2NvbXBhcmVOYXR1cmFsKDMsIDIpJywgJ2NvbXBhcmVOYXR1cmFsKDIsIDIpJywgJ2NvbXBhcmVOYXR1cmFsKDVjbSwgNDBtbSknLCAnY29tcGFyZU5hdHVyYWwoXCIyXCIsIFwiMTBcIiknLCAnY29tcGFyZU5hdHVyYWwoMiArIDNpLCAyICsgNGkpJywgJ2NvbXBhcmVOYXR1cmFsKFsxLCAyLCA0XSwgWzEsIDIsIDNdKScsICdjb21wYXJlTmF0dXJhbChbMSwgNV0sIFsxLCAyLCAzXSknLCAnY29tcGFyZU5hdHVyYWwoWzEsIDJdLCBbMSwgMl0pJywgJ2NvbXBhcmVOYXR1cmFsKHthOiAyfSwge2E6IDR9KSddLFxuICBzZWVhbHNvOiBbJ2VxdWFsJywgJ3VuZXF1YWwnLCAnc21hbGxlcicsICdzbWFsbGVyRXEnLCAnbGFyZ2VyRXEnLCAnY29tcGFyZScsICdjb21wYXJlVGV4dCddXG59O1xuZXhwb3J0cy5jb21wYXJlTmF0dXJhbERvY3MgPSBjb21wYXJlTmF0dXJhbERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbXBhcmVUZXh0RG9jcyA9IHZvaWQgMDtcbnZhciBjb21wYXJlVGV4dERvY3MgPSB7XG4gIG5hbWU6ICdjb21wYXJlVGV4dCcsXG4gIGNhdGVnb3J5OiAnUmVsYXRpb25hbCcsXG4gIHN5bnRheDogWydjb21wYXJlVGV4dCh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXBhcmUgdHdvIHN0cmluZ3MgbGV4aWNhbGx5LiBDb21wYXJpc29uIGlzIGNhc2Ugc2Vuc2l0aXZlLiAnICsgJ1JldHVybnMgMSB3aGVuIHggPiB5LCAtMSB3aGVuIHggPCB5LCBhbmQgMCB3aGVuIHggPT0geS4nLFxuICBleGFtcGxlczogWydjb21wYXJlVGV4dChcIkJcIiwgXCJBXCIpJywgJ2NvbXBhcmVUZXh0KFwiQVwiLCBcIkJcIiknLCAnY29tcGFyZVRleHQoXCJBXCIsIFwiQVwiKScsICdjb21wYXJlVGV4dChcIjJcIiwgXCIxMFwiKScsICdjb21wYXJlKFwiMlwiLCBcIjEwXCIpJywgJ2NvbXBhcmUoMiwgMTApJywgJ2NvbXBhcmVOYXR1cmFsKFwiMlwiLCBcIjEwXCIpJywgJ2NvbXBhcmVUZXh0KFwiQlwiLCBbXCJBXCIsIFwiQlwiLCBcIkNcIl0pJ10sXG4gIHNlZWFsc286IFsnY29tcGFyZScsICdjb21wYXJlTmF0dXJhbCddXG59O1xuZXhwb3J0cy5jb21wYXJlVGV4dERvY3MgPSBjb21wYXJlVGV4dERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZXBFcXVhbERvY3MgPSB2b2lkIDA7XG52YXIgZGVlcEVxdWFsRG9jcyA9IHtcbiAgbmFtZTogJ2RlZXBFcXVhbCcsXG4gIGNhdGVnb3J5OiAnUmVsYXRpb25hbCcsXG4gIHN5bnRheDogWydkZWVwRXF1YWwoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDaGVjayBlcXVhbGl0eSBvZiB0d28gbWF0cmljZXMgZWxlbWVudCB3aXNlLiBSZXR1cm5zIHRydWUgaWYgdGhlIHNpemUgb2YgYm90aCBtYXRyaWNlcyBpcyBlcXVhbCBhbmQgd2hlbiBhbmQgZWFjaCBvZiB0aGUgZWxlbWVudHMgYXJlIGVxdWFsLicsXG4gIGV4YW1wbGVzOiBbJ2RlZXBFcXVhbChbMSwzLDRdLCBbMSwzLDRdKScsICdkZWVwRXF1YWwoWzEsMyw0XSwgWzEsM10pJ10sXG4gIHNlZWFsc286IFsnZXF1YWwnLCAndW5lcXVhbCcsICdzbWFsbGVyJywgJ2xhcmdlcicsICdzbWFsbGVyRXEnLCAnbGFyZ2VyRXEnLCAnY29tcGFyZSddXG59O1xuZXhwb3J0cy5kZWVwRXF1YWxEb2NzID0gZGVlcEVxdWFsRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXF1YWxEb2NzID0gdm9pZCAwO1xudmFyIGVxdWFsRG9jcyA9IHtcbiAgbmFtZTogJ2VxdWFsJyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ3ggPT0geScsICdlcXVhbCh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NoZWNrIGVxdWFsaXR5IG9mIHR3byB2YWx1ZXMuIFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWVzIGFyZSBlcXVhbCwgYW5kIGZhbHNlIGlmIG5vdC4nLFxuICBleGFtcGxlczogWycyKzIgPT0gMycsICcyKzIgPT0gNCcsICdhID0gMy4yJywgJ2IgPSA2LTIuOCcsICdhID09IGInLCAnNTBjbSA9PSAwLjVtJ10sXG4gIHNlZWFsc286IFsndW5lcXVhbCcsICdzbWFsbGVyJywgJ2xhcmdlcicsICdzbWFsbGVyRXEnLCAnbGFyZ2VyRXEnLCAnY29tcGFyZScsICdkZWVwRXF1YWwnLCAnZXF1YWxUZXh0J11cbn07XG5leHBvcnRzLmVxdWFsRG9jcyA9IGVxdWFsRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXF1YWxUZXh0RG9jcyA9IHZvaWQgMDtcbnZhciBlcXVhbFRleHREb2NzID0ge1xuICBuYW1lOiAnZXF1YWxUZXh0JyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ2VxdWFsVGV4dCh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NoZWNrIGVxdWFsaXR5IG9mIHR3byBzdHJpbmdzLiBDb21wYXJpc29uIGlzIGNhc2Ugc2Vuc2l0aXZlLiBSZXR1cm5zIHRydWUgaWYgdGhlIHZhbHVlcyBhcmUgZXF1YWwsIGFuZCBmYWxzZSBpZiBub3QuJyxcbiAgZXhhbXBsZXM6IFsnZXF1YWxUZXh0KFwiSGVsbG9cIiwgXCJIZWxsb1wiKScsICdlcXVhbFRleHQoXCJhXCIsIFwiQVwiKScsICdlcXVhbChcIjJlM1wiLCBcIjIwMDBcIiknLCAnZXF1YWxUZXh0KFwiMmUzXCIsIFwiMjAwMFwiKScsICdlcXVhbFRleHQoXCJCXCIsIFtcIkFcIiwgXCJCXCIsIFwiQ1wiXSknXSxcbiAgc2VlYWxzbzogWydjb21wYXJlJywgJ2NvbXBhcmVOYXR1cmFsJywgJ2NvbXBhcmVUZXh0JywgJ2VxdWFsJ11cbn07XG5leHBvcnRzLmVxdWFsVGV4dERvY3MgPSBlcXVhbFRleHREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5sYXJnZXJEb2NzID0gdm9pZCAwO1xudmFyIGxhcmdlckRvY3MgPSB7XG4gIG5hbWU6ICdsYXJnZXInLFxuICBjYXRlZ29yeTogJ1JlbGF0aW9uYWwnLFxuICBzeW50YXg6IFsneCA+IHknLCAnbGFyZ2VyKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2hlY2sgaWYgdmFsdWUgeCBpcyBsYXJnZXIgdGhhbiB5LiBSZXR1cm5zIHRydWUgaWYgeCBpcyBsYXJnZXIgdGhhbiB5LCBhbmQgZmFsc2UgaWYgbm90LicsXG4gIGV4YW1wbGVzOiBbJzIgPiAzJywgJzUgPiAyKjInLCAnYSA9IDMuMycsICdiID0gNi0yLjgnLCAnKGEgPiBiKScsICcoYiA8IGEpJywgJzUgY20gPiAyIGluY2gnXSxcbiAgc2VlYWxzbzogWydlcXVhbCcsICd1bmVxdWFsJywgJ3NtYWxsZXInLCAnc21hbGxlckVxJywgJ2xhcmdlckVxJywgJ2NvbXBhcmUnXVxufTtcbmV4cG9ydHMubGFyZ2VyRG9jcyA9IGxhcmdlckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmxhcmdlckVxRG9jcyA9IHZvaWQgMDtcbnZhciBsYXJnZXJFcURvY3MgPSB7XG4gIG5hbWU6ICdsYXJnZXJFcScsXG4gIGNhdGVnb3J5OiAnUmVsYXRpb25hbCcsXG4gIHN5bnRheDogWyd4ID49IHknLCAnbGFyZ2VyRXEoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDaGVjayBpZiB2YWx1ZSB4IGlzIGxhcmdlciBvciBlcXVhbCB0byB5LiBSZXR1cm5zIHRydWUgaWYgeCBpcyBsYXJnZXIgb3IgZXF1YWwgdG8geSwgYW5kIGZhbHNlIGlmIG5vdC4nLFxuICBleGFtcGxlczogWycyID49IDErMScsICcyID4gMSsxJywgJ2EgPSAzLjInLCAnYiA9IDYtMi44JywgJyhhID49IGIpJ10sXG4gIHNlZWFsc286IFsnZXF1YWwnLCAndW5lcXVhbCcsICdzbWFsbGVyRXEnLCAnc21hbGxlcicsICdjb21wYXJlJ11cbn07XG5leHBvcnRzLmxhcmdlckVxRG9jcyA9IGxhcmdlckVxRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc21hbGxlckRvY3MgPSB2b2lkIDA7XG52YXIgc21hbGxlckRvY3MgPSB7XG4gIG5hbWU6ICdzbWFsbGVyJyxcbiAgY2F0ZWdvcnk6ICdSZWxhdGlvbmFsJyxcbiAgc3ludGF4OiBbJ3ggPCB5JywgJ3NtYWxsZXIoeCwgeSknXSxcbiAgZGVzY3JpcHRpb246ICdDaGVjayBpZiB2YWx1ZSB4IGlzIHNtYWxsZXIgdGhhbiB2YWx1ZSB5LiBSZXR1cm5zIHRydWUgaWYgeCBpcyBzbWFsbGVyIHRoYW4geSwgYW5kIGZhbHNlIGlmIG5vdC4nLFxuICBleGFtcGxlczogWycyIDwgMycsICc1IDwgMioyJywgJ2EgPSAzLjMnLCAnYiA9IDYtMi44JywgJyhhIDwgYiknLCAnNSBjbSA8IDIgaW5jaCddLFxuICBzZWVhbHNvOiBbJ2VxdWFsJywgJ3VuZXF1YWwnLCAnbGFyZ2VyJywgJ3NtYWxsZXJFcScsICdsYXJnZXJFcScsICdjb21wYXJlJ11cbn07XG5leHBvcnRzLnNtYWxsZXJEb2NzID0gc21hbGxlckRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNtYWxsZXJFcURvY3MgPSB2b2lkIDA7XG52YXIgc21hbGxlckVxRG9jcyA9IHtcbiAgbmFtZTogJ3NtYWxsZXJFcScsXG4gIGNhdGVnb3J5OiAnUmVsYXRpb25hbCcsXG4gIHN5bnRheDogWyd4IDw9IHknLCAnc21hbGxlckVxKHgsIHkpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2hlY2sgaWYgdmFsdWUgeCBpcyBzbWFsbGVyIG9yIGVxdWFsIHRvIHZhbHVlIHkuIFJldHVybnMgdHJ1ZSBpZiB4IGlzIHNtYWxsZXIgdGhhbiB5LCBhbmQgZmFsc2UgaWYgbm90LicsXG4gIGV4YW1wbGVzOiBbJzIgPD0gMSsxJywgJzIgPCAxKzEnLCAnYSA9IDMuMicsICdiID0gNi0yLjgnLCAnKGEgPD0gYiknXSxcbiAgc2VlYWxzbzogWydlcXVhbCcsICd1bmVxdWFsJywgJ2xhcmdlcicsICdzbWFsbGVyJywgJ2xhcmdlckVxJywgJ2NvbXBhcmUnXVxufTtcbmV4cG9ydHMuc21hbGxlckVxRG9jcyA9IHNtYWxsZXJFcURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnVuZXF1YWxEb2NzID0gdm9pZCAwO1xudmFyIHVuZXF1YWxEb2NzID0ge1xuICBuYW1lOiAndW5lcXVhbCcsXG4gIGNhdGVnb3J5OiAnUmVsYXRpb25hbCcsXG4gIHN5bnRheDogWyd4ICE9IHknLCAndW5lcXVhbCh4LCB5KSddLFxuICBkZXNjcmlwdGlvbjogJ0NoZWNrIHVuZXF1YWxpdHkgb2YgdHdvIHZhbHVlcy4gUmV0dXJucyB0cnVlIGlmIHRoZSB2YWx1ZXMgYXJlIHVuZXF1YWwsIGFuZCBmYWxzZSBpZiB0aGV5IGFyZSBlcXVhbC4nLFxuICBleGFtcGxlczogWycyKzIgIT0gMycsICcyKzIgIT0gNCcsICdhID0gMy4yJywgJ2IgPSA2LTIuOCcsICdhICE9IGInLCAnNTBjbSAhPSAwLjVtJywgJzUgY20gIT0gMiBpbmNoJ10sXG4gIHNlZWFsc286IFsnZXF1YWwnLCAnc21hbGxlcicsICdsYXJnZXInLCAnc21hbGxlckVxJywgJ2xhcmdlckVxJywgJ2NvbXBhcmUnLCAnZGVlcEVxdWFsJ11cbn07XG5leHBvcnRzLnVuZXF1YWxEb2NzID0gdW5lcXVhbERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNldENhcnRlc2lhbkRvY3MgPSB2b2lkIDA7XG52YXIgc2V0Q2FydGVzaWFuRG9jcyA9IHtcbiAgbmFtZTogJ3NldENhcnRlc2lhbicsXG4gIGNhdGVnb3J5OiAnU2V0JyxcbiAgc3ludGF4OiBbJ3NldENhcnRlc2lhbihzZXQxLCBzZXQyKSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSB0aGUgY2FydGVzaWFuIHByb2R1Y3Qgb2YgdHdvIChtdWx0aSlzZXRzLiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldENhcnRlc2lhbihbMSwgMl0sIFszLCA0XSknXSxcbiAgc2VlYWxzbzogWydzZXRVbmlvbicsICdzZXRJbnRlcnNlY3QnLCAnc2V0RGlmZmVyZW5jZScsICdzZXRQb3dlcnNldCddXG59O1xuZXhwb3J0cy5zZXRDYXJ0ZXNpYW5Eb2NzID0gc2V0Q2FydGVzaWFuRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0RGlmZmVyZW5jZURvY3MgPSB2b2lkIDA7XG52YXIgc2V0RGlmZmVyZW5jZURvY3MgPSB7XG4gIG5hbWU6ICdzZXREaWZmZXJlbmNlJyxcbiAgY2F0ZWdvcnk6ICdTZXQnLFxuICBzeW50YXg6IFsnc2V0RGlmZmVyZW5jZShzZXQxLCBzZXQyKSddLFxuICBkZXNjcmlwdGlvbjogJ0NyZWF0ZSB0aGUgZGlmZmVyZW5jZSBvZiB0d28gKG11bHRpKXNldHM6IGV2ZXJ5IGVsZW1lbnQgb2Ygc2V0MSwgdGhhdCBpcyBub3QgdGhlIGVsZW1lbnQgb2Ygc2V0Mi4gTXVsdGktZGltZW5zaW9uIGFycmF5cyB3aWxsIGJlIGNvbnZlcnRlZCB0byBzaW5nbGUtZGltZW5zaW9uIGFycmF5cyBiZWZvcmUgdGhlIG9wZXJhdGlvbi4nLFxuICBleGFtcGxlczogWydzZXREaWZmZXJlbmNlKFsxLCAyLCAzLCA0XSwgWzMsIDQsIDUsIDZdKScsICdzZXREaWZmZXJlbmNlKFtbMSwgMl0sIFszLCA0XV0sIFtbMywgNF0sIFs1LCA2XV0pJ10sXG4gIHNlZWFsc286IFsnc2V0VW5pb24nLCAnc2V0SW50ZXJzZWN0JywgJ3NldFN5bURpZmZlcmVuY2UnXVxufTtcbmV4cG9ydHMuc2V0RGlmZmVyZW5jZURvY3MgPSBzZXREaWZmZXJlbmNlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0RGlzdGluY3REb2NzID0gdm9pZCAwO1xudmFyIHNldERpc3RpbmN0RG9jcyA9IHtcbiAgbmFtZTogJ3NldERpc3RpbmN0JyxcbiAgY2F0ZWdvcnk6ICdTZXQnLFxuICBzeW50YXg6IFsnc2V0RGlzdGluY3Qoc2V0KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbGxlY3QgdGhlIGRpc3RpbmN0IGVsZW1lbnRzIG9mIGEgbXVsdGlzZXQuIEEgbXVsdGktZGltZW5zaW9uIGFycmF5IHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2luZ2xlLWRpbWVuc2lvbiBhcnJheSBiZWZvcmUgdGhlIG9wZXJhdGlvbi4nLFxuICBleGFtcGxlczogWydzZXREaXN0aW5jdChbMSwgMSwgMSwgMiwgMiwgM10pJ10sXG4gIHNlZWFsc286IFsnc2V0TXVsdGlwbGljaXR5J11cbn07XG5leHBvcnRzLnNldERpc3RpbmN0RG9jcyA9IHNldERpc3RpbmN0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0SW50ZXJzZWN0RG9jcyA9IHZvaWQgMDtcbnZhciBzZXRJbnRlcnNlY3REb2NzID0ge1xuICBuYW1lOiAnc2V0SW50ZXJzZWN0JyxcbiAgY2F0ZWdvcnk6ICdTZXQnLFxuICBzeW50YXg6IFsnc2V0SW50ZXJzZWN0KHNldDEsIHNldDIpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ3JlYXRlIHRoZSBpbnRlcnNlY3Rpb24gb2YgdHdvIChtdWx0aSlzZXRzLiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldEludGVyc2VjdChbMSwgMiwgMywgNF0sIFszLCA0LCA1LCA2XSknLCAnc2V0SW50ZXJzZWN0KFtbMSwgMl0sIFszLCA0XV0sIFtbMywgNF0sIFs1LCA2XV0pJ10sXG4gIHNlZWFsc286IFsnc2V0VW5pb24nLCAnc2V0RGlmZmVyZW5jZSddXG59O1xuZXhwb3J0cy5zZXRJbnRlcnNlY3REb2NzID0gc2V0SW50ZXJzZWN0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0SXNTdWJzZXREb2NzID0gdm9pZCAwO1xudmFyIHNldElzU3Vic2V0RG9jcyA9IHtcbiAgbmFtZTogJ3NldElzU3Vic2V0JyxcbiAgY2F0ZWdvcnk6ICdTZXQnLFxuICBzeW50YXg6IFsnc2V0SXNTdWJzZXQoc2V0MSwgc2V0MiknXSxcbiAgZGVzY3JpcHRpb246ICdDaGVjayB3aGV0aGVyIGEgKG11bHRpKXNldCBpcyBhIHN1YnNldCBvZiBhbm90aGVyIChtdWx0aSlzZXQ6IGV2ZXJ5IGVsZW1lbnQgb2Ygc2V0MSBpcyB0aGUgZWxlbWVudCBvZiBzZXQyLiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLicsXG4gIGV4YW1wbGVzOiBbJ3NldElzU3Vic2V0KFsxLCAyXSwgWzMsIDQsIDUsIDZdKScsICdzZXRJc1N1YnNldChbMywgNF0sIFszLCA0LCA1LCA2XSknXSxcbiAgc2VlYWxzbzogWydzZXRVbmlvbicsICdzZXRJbnRlcnNlY3QnLCAnc2V0RGlmZmVyZW5jZSddXG59O1xuZXhwb3J0cy5zZXRJc1N1YnNldERvY3MgPSBzZXRJc1N1YnNldERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNldE11bHRpcGxpY2l0eURvY3MgPSB2b2lkIDA7XG52YXIgc2V0TXVsdGlwbGljaXR5RG9jcyA9IHtcbiAgbmFtZTogJ3NldE11bHRpcGxpY2l0eScsXG4gIGNhdGVnb3J5OiAnU2V0JyxcbiAgc3ludGF4OiBbJ3NldE11bHRpcGxpY2l0eShlbGVtZW50LCBzZXQpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ291bnQgdGhlIG11bHRpcGxpY2l0eSBvZiBhbiBlbGVtZW50IGluIGEgbXVsdGlzZXQuIEEgbXVsdGktZGltZW5zaW9uIGFycmF5IHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2luZ2xlLWRpbWVuc2lvbiBhcnJheSBiZWZvcmUgdGhlIG9wZXJhdGlvbi4nLFxuICBleGFtcGxlczogWydzZXRNdWx0aXBsaWNpdHkoMSwgWzEsIDIsIDIsIDRdKScsICdzZXRNdWx0aXBsaWNpdHkoMiwgWzEsIDIsIDIsIDRdKSddLFxuICBzZWVhbHNvOiBbJ3NldERpc3RpbmN0JywgJ3NldFNpemUnXVxufTtcbmV4cG9ydHMuc2V0TXVsdGlwbGljaXR5RG9jcyA9IHNldE11bHRpcGxpY2l0eURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNldFBvd2Vyc2V0RG9jcyA9IHZvaWQgMDtcbnZhciBzZXRQb3dlcnNldERvY3MgPSB7XG4gIG5hbWU6ICdzZXRQb3dlcnNldCcsXG4gIGNhdGVnb3J5OiAnU2V0JyxcbiAgc3ludGF4OiBbJ3NldFBvd2Vyc2V0KHNldCknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgdGhlIHBvd2Vyc2V0IG9mIGEgKG11bHRpKXNldDogdGhlIHBvd2Vyc2V0IGNvbnRhaW5zIHZlcnkgcG9zc2libGUgc3Vic2V0cyBvZiBhIChtdWx0aSlzZXQuIEEgbXVsdGktZGltZW5zaW9uIGFycmF5IHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2luZ2xlLWRpbWVuc2lvbiBhcnJheSBiZWZvcmUgdGhlIG9wZXJhdGlvbi4nLFxuICBleGFtcGxlczogWydzZXRQb3dlcnNldChbMSwgMiwgM10pJ10sXG4gIHNlZWFsc286IFsnc2V0Q2FydGVzaWFuJ11cbn07XG5leHBvcnRzLnNldFBvd2Vyc2V0RG9jcyA9IHNldFBvd2Vyc2V0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0U2l6ZURvY3MgPSB2b2lkIDA7XG52YXIgc2V0U2l6ZURvY3MgPSB7XG4gIG5hbWU6ICdzZXRTaXplJyxcbiAgY2F0ZWdvcnk6ICdTZXQnLFxuICBzeW50YXg6IFsnc2V0U2l6ZShzZXQpJywgJ3NldFNpemUoc2V0LCB1bmlxdWUpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ291bnQgdGhlIG51bWJlciBvZiBlbGVtZW50cyBvZiBhIChtdWx0aSlzZXQuIFdoZW4gdGhlIHNlY29uZCBwYXJhbWV0ZXIgXCJ1bmlxdWVcIiBpcyB0cnVlLCBjb3VudCBvbmx5IHRoZSB1bmlxdWUgdmFsdWVzLiBBIG11bHRpLWRpbWVuc2lvbiBhcnJheSB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHNpbmdsZS1kaW1lbnNpb24gYXJyYXkgYmVmb3JlIHRoZSBvcGVyYXRpb24uJyxcbiAgZXhhbXBsZXM6IFsnc2V0U2l6ZShbMSwgMiwgMiwgNF0pJywgJ3NldFNpemUoWzEsIDIsIDIsIDRdLCB0cnVlKSddLFxuICBzZWVhbHNvOiBbJ3NldFVuaW9uJywgJ3NldEludGVyc2VjdCcsICdzZXREaWZmZXJlbmNlJ11cbn07XG5leHBvcnRzLnNldFNpemVEb2NzID0gc2V0U2l6ZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNldFN5bURpZmZlcmVuY2VEb2NzID0gdm9pZCAwO1xudmFyIHNldFN5bURpZmZlcmVuY2VEb2NzID0ge1xuICBuYW1lOiAnc2V0U3ltRGlmZmVyZW5jZScsXG4gIGNhdGVnb3J5OiAnU2V0JyxcbiAgc3ludGF4OiBbJ3NldFN5bURpZmZlcmVuY2Uoc2V0MSwgc2V0MiknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgdGhlIHN5bW1ldHJpYyBkaWZmZXJlbmNlIG9mIHR3byAobXVsdGkpc2V0cy4gTXVsdGktZGltZW5zaW9uIGFycmF5cyB3aWxsIGJlIGNvbnZlcnRlZCB0byBzaW5nbGUtZGltZW5zaW9uIGFycmF5cyBiZWZvcmUgdGhlIG9wZXJhdGlvbi4nLFxuICBleGFtcGxlczogWydzZXRTeW1EaWZmZXJlbmNlKFsxLCAyLCAzLCA0XSwgWzMsIDQsIDUsIDZdKScsICdzZXRTeW1EaWZmZXJlbmNlKFtbMSwgMl0sIFszLCA0XV0sIFtbMywgNF0sIFs1LCA2XV0pJ10sXG4gIHNlZWFsc286IFsnc2V0VW5pb24nLCAnc2V0SW50ZXJzZWN0JywgJ3NldERpZmZlcmVuY2UnXVxufTtcbmV4cG9ydHMuc2V0U3ltRGlmZmVyZW5jZURvY3MgPSBzZXRTeW1EaWZmZXJlbmNlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2V0VW5pb25Eb2NzID0gdm9pZCAwO1xudmFyIHNldFVuaW9uRG9jcyA9IHtcbiAgbmFtZTogJ3NldFVuaW9uJyxcbiAgY2F0ZWdvcnk6ICdTZXQnLFxuICBzeW50YXg6IFsnc2V0VW5pb24oc2V0MSwgc2V0MiknXSxcbiAgZGVzY3JpcHRpb246ICdDcmVhdGUgdGhlIHVuaW9uIG9mIHR3byAobXVsdGkpc2V0cy4gTXVsdGktZGltZW5zaW9uIGFycmF5cyB3aWxsIGJlIGNvbnZlcnRlZCB0byBzaW5nbGUtZGltZW5zaW9uIGFycmF5cyBiZWZvcmUgdGhlIG9wZXJhdGlvbi4nLFxuICBleGFtcGxlczogWydzZXRVbmlvbihbMSwgMiwgMywgNF0sIFszLCA0LCA1LCA2XSknLCAnc2V0VW5pb24oW1sxLCAyXSwgWzMsIDRdXSwgW1szLCA0XSwgWzUsIDZdXSknXSxcbiAgc2VlYWxzbzogWydzZXRJbnRlcnNlY3QnLCAnc2V0RGlmZmVyZW5jZSddXG59O1xuZXhwb3J0cy5zZXRVbmlvbkRvY3MgPSBzZXRVbmlvbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmVyZkRvY3MgPSB2b2lkIDA7XG52YXIgZXJmRG9jcyA9IHtcbiAgbmFtZTogJ2VyZicsXG4gIGNhdGVnb3J5OiAnU3BlY2lhbCcsXG4gIHN5bnRheDogWydlcmYoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBlcmYgZnVuY3Rpb24gb2YgYSB2YWx1ZSB1c2luZyBhIHJhdGlvbmFsIENoZWJ5c2hldiBhcHByb3hpbWF0aW9ucyBmb3IgZGlmZmVyZW50IGludGVydmFscyBvZiB4JyxcbiAgZXhhbXBsZXM6IFsnZXJmKDAuMiknLCAnZXJmKC0wLjUpJywgJ2VyZig0KSddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMuZXJmRG9jcyA9IGVyZkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1hZERvY3MgPSB2b2lkIDA7XG52YXIgbWFkRG9jcyA9IHtcbiAgbmFtZTogJ21hZCcsXG4gIGNhdGVnb3J5OiAnU3RhdGlzdGljcycsXG4gIHN5bnRheDogWydtYWQoYSwgYiwgYywgLi4uKScsICdtYWQoQSknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBtZWRpYW4gYWJzb2x1dGUgZGV2aWF0aW9uIG9mIGEgbWF0cml4IG9yIGEgbGlzdCB3aXRoIHZhbHVlcy4gVGhlIG1lZGlhbiBhYnNvbHV0ZSBkZXZpYXRpb24gaXMgZGVmaW5lZCBhcyB0aGUgbWVkaWFuIG9mIHRoZSBhYnNvbHV0ZSBkZXZpYXRpb25zIGZyb20gdGhlIG1lZGlhbi4nLFxuICBleGFtcGxlczogWydtYWQoMTAsIDIwLCAzMCknLCAnbWFkKFsxLCAyLCAzXSknXSxcbiAgc2VlYWxzbzogWydtZWFuJywgJ21lZGlhbicsICdzdGQnLCAnYWJzJ11cbn07XG5leHBvcnRzLm1hZERvY3MgPSBtYWREb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tYXhEb2NzID0gdm9pZCAwO1xudmFyIG1heERvY3MgPSB7XG4gIG5hbWU6ICdtYXgnLFxuICBjYXRlZ29yeTogJ1N0YXRpc3RpY3MnLFxuICBzeW50YXg6IFsnbWF4KGEsIGIsIGMsIC4uLiknLCAnbWF4KEEpJywgJ21heChBLCBkaW0pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgbWF4aW11bSB2YWx1ZSBvZiBhIGxpc3Qgb2YgdmFsdWVzLicsXG4gIGV4YW1wbGVzOiBbJ21heCgyLCAzLCA0LCAxKScsICdtYXgoWzIsIDMsIDQsIDFdKScsICdtYXgoWzIsIDU7IDQsIDNdKScsICdtYXgoWzIsIDU7IDQsIDNdLCAxKScsICdtYXgoWzIsIDU7IDQsIDNdLCAyKScsICdtYXgoMi43LCA3LjEsIC00LjUsIDIuMCwgNC4xKScsICdtaW4oMi43LCA3LjEsIC00LjUsIDIuMCwgNC4xKSddLFxuICBzZWVhbHNvOiBbJ21lYW4nLCAnbWVkaWFuJywgJ21pbicsICdwcm9kJywgJ3N0ZCcsICdzdW0nLCAndmFyaWFuY2UnXVxufTtcbmV4cG9ydHMubWF4RG9jcyA9IG1heERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm1lYW5Eb2NzID0gdm9pZCAwO1xudmFyIG1lYW5Eb2NzID0ge1xuICBuYW1lOiAnbWVhbicsXG4gIGNhdGVnb3J5OiAnU3RhdGlzdGljcycsXG4gIHN5bnRheDogWydtZWFuKGEsIGIsIGMsIC4uLiknLCAnbWVhbihBKScsICdtZWFuKEEsIGRpbSknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBhcml0aG1ldGljIG1lYW4gb2YgYSBsaXN0IG9mIHZhbHVlcy4nLFxuICBleGFtcGxlczogWydtZWFuKDIsIDMsIDQsIDEpJywgJ21lYW4oWzIsIDMsIDQsIDFdKScsICdtZWFuKFsyLCA1OyA0LCAzXSknLCAnbWVhbihbMiwgNTsgNCwgM10sIDEpJywgJ21lYW4oWzIsIDU7IDQsIDNdLCAyKScsICdtZWFuKFsxLjAsIDIuNywgMy4yLCA0LjBdKSddLFxuICBzZWVhbHNvOiBbJ21heCcsICdtZWRpYW4nLCAnbWluJywgJ3Byb2QnLCAnc3RkJywgJ3N1bScsICd2YXJpYW5jZSddXG59O1xuZXhwb3J0cy5tZWFuRG9jcyA9IG1lYW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tZWRpYW5Eb2NzID0gdm9pZCAwO1xudmFyIG1lZGlhbkRvY3MgPSB7XG4gIG5hbWU6ICdtZWRpYW4nLFxuICBjYXRlZ29yeTogJ1N0YXRpc3RpY3MnLFxuICBzeW50YXg6IFsnbWVkaWFuKGEsIGIsIGMsIC4uLiknLCAnbWVkaWFuKEEpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgbWVkaWFuIG9mIGFsbCB2YWx1ZXMuIFRoZSB2YWx1ZXMgYXJlIHNvcnRlZCBhbmQgdGhlIG1pZGRsZSB2YWx1ZSBpcyByZXR1cm5lZC4gSW4gY2FzZSBvZiBhbiBldmVuIG51bWJlciBvZiB2YWx1ZXMsIHRoZSBhdmVyYWdlIG9mIHRoZSB0d28gbWlkZGxlIHZhbHVlcyBpcyByZXR1cm5lZC4nLFxuICBleGFtcGxlczogWydtZWRpYW4oNSwgMiwgNyknLCAnbWVkaWFuKFszLCAtMSwgNSwgN10pJ10sXG4gIHNlZWFsc286IFsnbWF4JywgJ21lYW4nLCAnbWluJywgJ3Byb2QnLCAnc3RkJywgJ3N1bScsICd2YXJpYW5jZScsICdxdWFudGlsZVNlcSddXG59O1xuZXhwb3J0cy5tZWRpYW5Eb2NzID0gbWVkaWFuRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWluRG9jcyA9IHZvaWQgMDtcbnZhciBtaW5Eb2NzID0ge1xuICBuYW1lOiAnbWluJyxcbiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJyxcbiAgc3ludGF4OiBbJ21pbihhLCBiLCBjLCAuLi4pJywgJ21pbihBKScsICdtaW4oQSwgZGltKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIG1pbmltdW0gdmFsdWUgb2YgYSBsaXN0IG9mIHZhbHVlcy4nLFxuICBleGFtcGxlczogWydtaW4oMiwgMywgNCwgMSknLCAnbWluKFsyLCAzLCA0LCAxXSknLCAnbWluKFsyLCA1OyA0LCAzXSknLCAnbWluKFsyLCA1OyA0LCAzXSwgMSknLCAnbWluKFsyLCA1OyA0LCAzXSwgMiknLCAnbWluKDIuNywgNy4xLCAtNC41LCAyLjAsIDQuMSknLCAnbWF4KDIuNywgNy4xLCAtNC41LCAyLjAsIDQuMSknXSxcbiAgc2VlYWxzbzogWydtYXgnLCAnbWVhbicsICdtZWRpYW4nLCAncHJvZCcsICdzdGQnLCAnc3VtJywgJ3ZhcmlhbmNlJ11cbn07XG5leHBvcnRzLm1pbkRvY3MgPSBtaW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5tb2RlRG9jcyA9IHZvaWQgMDtcbnZhciBtb2RlRG9jcyA9IHtcbiAgbmFtZTogJ21vZGUnLFxuICBjYXRlZ29yeTogJ1N0YXRpc3RpY3MnLFxuICBzeW50YXg6IFsnbW9kZShhLCBiLCBjLCAuLi4pJywgJ21vZGUoQSknLCAnbW9kZShBLCBhLCBiLCBCLCBjLCAuLi4pJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZXMgdGhlIG1vZGUgb2YgYWxsIHZhbHVlcyBhcyBhbiBhcnJheS4gSW4gY2FzZSBtb2RlIGJlaW5nIG1vcmUgdGhhbiBvbmUsIG11bHRpcGxlIHZhbHVlcyBhcmUgcmV0dXJuZWQgaW4gYW4gYXJyYXkuJyxcbiAgZXhhbXBsZXM6IFsnbW9kZSgyLCAxLCA0LCAzLCAxKScsICdtb2RlKFsxLCAyLjcsIDMuMiwgNCwgMi43XSknLCAnbW9kZSgxLCA0LCA2LCAxLCA2KSddLFxuICBzZWVhbHNvOiBbJ21heCcsICdtZWFuJywgJ21pbicsICdtZWRpYW4nLCAncHJvZCcsICdzdGQnLCAnc3VtJywgJ3ZhcmlhbmNlJ11cbn07XG5leHBvcnRzLm1vZGVEb2NzID0gbW9kZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnByb2REb2NzID0gdm9pZCAwO1xudmFyIHByb2REb2NzID0ge1xuICBuYW1lOiAncHJvZCcsXG4gIGNhdGVnb3J5OiAnU3RhdGlzdGljcycsXG4gIHN5bnRheDogWydwcm9kKGEsIGIsIGMsIC4uLiknLCAncHJvZChBKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHByb2R1Y3Qgb2YgYWxsIHZhbHVlcy4nLFxuICBleGFtcGxlczogWydwcm9kKDIsIDMsIDQpJywgJ3Byb2QoWzIsIDMsIDRdKScsICdwcm9kKFsyLCA1OyA0LCAzXSknXSxcbiAgc2VlYWxzbzogWydtYXgnLCAnbWVhbicsICdtaW4nLCAnbWVkaWFuJywgJ21pbicsICdzdGQnLCAnc3VtJywgJ3ZhcmlhbmNlJ11cbn07XG5leHBvcnRzLnByb2REb2NzID0gcHJvZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnF1YW50aWxlU2VxRG9jcyA9IHZvaWQgMDtcbnZhciBxdWFudGlsZVNlcURvY3MgPSB7XG4gIG5hbWU6ICdxdWFudGlsZVNlcScsXG4gIGNhdGVnb3J5OiAnU3RhdGlzdGljcycsXG4gIHN5bnRheDogWydxdWFudGlsZVNlcShBLCBwcm9iWywgc29ydGVkXSknLCAncXVhbnRpbGVTZXEoQSwgW3Byb2IxLCBwcm9iMiwgLi4uXVssIHNvcnRlZF0pJywgJ3F1YW50aWxlU2VxKEEsIE5bLCBzb3J0ZWRdKSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHByb2Igb3JkZXIgcXVhbnRpbGUgb2YgYSBtYXRyaXggb3IgYSBsaXN0IHdpdGggdmFsdWVzLiBUaGUgc2VxdWVuY2UgaXMgc29ydGVkIGFuZCB0aGUgbWlkZGxlIHZhbHVlIGlzIHJldHVybmVkLiBTdXBwb3J0ZWQgdHlwZXMgb2Ygc2VxdWVuY2UgdmFsdWVzIGFyZTogTnVtYmVyLCBCaWdOdW1iZXIsIFVuaXQgU3VwcG9ydGVkIHR5cGVzIG9mIHByb2JhYmxpdHkgYXJlOiBOdW1iZXIsIEJpZ051bWJlci4gXFxuXFxuSW4gY2FzZSBvZiBhIChtdWx0aSBkaW1lbnNpb25hbCkgYXJyYXkgb3IgbWF0cml4LCB0aGUgcHJvYiBvcmRlciBxdWFudGlsZSBvZiBhbGwgZWxlbWVudHMgd2lsbCBiZSBjYWxjdWxhdGVkLicsXG4gIGV4YW1wbGVzOiBbJ3F1YW50aWxlU2VxKFszLCAtMSwgNSwgN10sIDAuNSknLCAncXVhbnRpbGVTZXEoWzMsIC0xLCA1LCA3XSwgWzEvMywgMi8zXSknLCAncXVhbnRpbGVTZXEoWzMsIC0xLCA1LCA3XSwgMiknLCAncXVhbnRpbGVTZXEoWy0xLCAzLCA1LCA3XSwgMC41LCB0cnVlKSddLFxuICBzZWVhbHNvOiBbJ21lYW4nLCAnbWVkaWFuJywgJ21pbicsICdtYXgnLCAncHJvZCcsICdzdGQnLCAnc3VtJywgJ3ZhcmlhbmNlJ11cbn07XG5leHBvcnRzLnF1YW50aWxlU2VxRG9jcyA9IHF1YW50aWxlU2VxRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc3RkRG9jcyA9IHZvaWQgMDtcbnZhciBzdGREb2NzID0ge1xuICBuYW1lOiAnc3RkJyxcbiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJyxcbiAgc3ludGF4OiBbJ3N0ZChhLCBiLCBjLCAuLi4pJywgJ3N0ZChBKScsICdzdGQoQSwgbm9ybWFsaXphdGlvbiknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgYWxsIHZhbHVlcywgZGVmaW5lZCBhcyBzdGQoQSkgPSBzcXJ0KHZhcmlhbmNlKEEpKS4gT3B0aW9uYWwgcGFyYW1ldGVyIG5vcm1hbGl6YXRpb24gY2FuIGJlIFwidW5iaWFzZWRcIiAoZGVmYXVsdCksIFwidW5jb3JyZWN0ZWRcIiwgb3IgXCJiaWFzZWRcIi4nLFxuICBleGFtcGxlczogWydzdGQoMiwgNCwgNiknLCAnc3RkKFsyLCA0LCA2LCA4XSknLCAnc3RkKFsyLCA0LCA2LCA4XSwgXCJ1bmNvcnJlY3RlZFwiKScsICdzdGQoWzIsIDQsIDYsIDhdLCBcImJpYXNlZFwiKScsICdzdGQoWzEsIDIsIDM7IDQsIDUsIDZdKSddLFxuICBzZWVhbHNvOiBbJ21heCcsICdtZWFuJywgJ21pbicsICdtZWRpYW4nLCAncHJvZCcsICdzdW0nLCAndmFyaWFuY2UnXVxufTtcbmV4cG9ydHMuc3RkRG9jcyA9IHN0ZERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnN1bURvY3MgPSB2b2lkIDA7XG52YXIgc3VtRG9jcyA9IHtcbiAgbmFtZTogJ3N1bScsXG4gIGNhdGVnb3J5OiAnU3RhdGlzdGljcycsXG4gIHN5bnRheDogWydzdW0oYSwgYiwgYywgLi4uKScsICdzdW0oQSknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBzdW0gb2YgYWxsIHZhbHVlcy4nLFxuICBleGFtcGxlczogWydzdW0oMiwgMywgNCwgMSknLCAnc3VtKFsyLCAzLCA0LCAxXSknLCAnc3VtKFsyLCA1OyA0LCAzXSknXSxcbiAgc2VlYWxzbzogWydtYXgnLCAnbWVhbicsICdtZWRpYW4nLCAnbWluJywgJ3Byb2QnLCAnc3RkJywgJ3N1bScsICd2YXJpYW5jZSddXG59O1xuZXhwb3J0cy5zdW1Eb2NzID0gc3VtRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMudmFyaWFuY2VEb2NzID0gdm9pZCAwO1xudmFyIHZhcmlhbmNlRG9jcyA9IHtcbiAgbmFtZTogJ3ZhcmlhbmNlJyxcbiAgY2F0ZWdvcnk6ICdTdGF0aXN0aWNzJyxcbiAgc3ludGF4OiBbJ3ZhcmlhbmNlKGEsIGIsIGMsIC4uLiknLCAndmFyaWFuY2UoQSknLCAndmFyaWFuY2UoQSwgbm9ybWFsaXphdGlvbiknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSB2YXJpYW5jZSBvZiBhbGwgdmFsdWVzLiBPcHRpb25hbCBwYXJhbWV0ZXIgbm9ybWFsaXphdGlvbiBjYW4gYmUgXCJ1bmJpYXNlZFwiIChkZWZhdWx0KSwgXCJ1bmNvcnJlY3RlZFwiLCBvciBcImJpYXNlZFwiLicsXG4gIGV4YW1wbGVzOiBbJ3ZhcmlhbmNlKDIsIDQsIDYpJywgJ3ZhcmlhbmNlKFsyLCA0LCA2LCA4XSknLCAndmFyaWFuY2UoWzIsIDQsIDYsIDhdLCBcInVuY29ycmVjdGVkXCIpJywgJ3ZhcmlhbmNlKFsyLCA0LCA2LCA4XSwgXCJiaWFzZWRcIiknLCAndmFyaWFuY2UoWzEsIDIsIDM7IDQsIDUsIDZdKSddLFxuICBzZWVhbHNvOiBbJ21heCcsICdtZWFuJywgJ21pbicsICdtZWRpYW4nLCAnbWluJywgJ3Byb2QnLCAnc3RkJywgJ3N1bSddXG59O1xuZXhwb3J0cy52YXJpYW5jZURvY3MgPSB2YXJpYW5jZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFjb3NEb2NzID0gdm9pZCAwO1xudmFyIGFjb3NEb2NzID0ge1xuICBuYW1lOiAnYWNvcycsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ2Fjb3MoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBpbnZlcnNlIGNvc2luZSBvZiBhIHZhbHVlIGluIHJhZGlhbnMuJyxcbiAgZXhhbXBsZXM6IFsnYWNvcygwLjUpJywgJ2Fjb3MoY29zKDIuMykpJ10sXG4gIHNlZWFsc286IFsnY29zJywgJ2F0YW4nLCAnYXNpbiddXG59O1xuZXhwb3J0cy5hY29zRG9jcyA9IGFjb3NEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hY29zaERvY3MgPSB2b2lkIDA7XG52YXIgYWNvc2hEb2NzID0ge1xuICBuYW1lOiAnYWNvc2gnLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydhY29zaCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBhcmNjb3Mgb2YgYSB2YWx1ZSwgZGVmaW5lZCBhcyBgYWNvc2goeCkgPSBsbihzcXJ0KHheMiAtIDEpICsgeClgLicsXG4gIGV4YW1wbGVzOiBbJ2Fjb3NoKDEuNSknXSxcbiAgc2VlYWxzbzogWydjb3NoJywgJ2FzaW5oJywgJ2F0YW5oJ11cbn07XG5leHBvcnRzLmFjb3NoRG9jcyA9IGFjb3NoRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYWNvdERvY3MgPSB2b2lkIDA7XG52YXIgYWNvdERvY3MgPSB7XG4gIG5hbWU6ICdhY290JyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYWNvdCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgaW52ZXJzZSBjb3RhbmdlbnQgb2YgYSB2YWx1ZS4nLFxuICBleGFtcGxlczogWydhY290KDAuNSknLCAnYWNvdChjb3QoMC41KSknLCAnYWNvdCgyKSddLFxuICBzZWVhbHNvOiBbJ2NvdCcsICdhdGFuJ11cbn07XG5leHBvcnRzLmFjb3REb2NzID0gYWNvdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFjb3RoRG9jcyA9IHZvaWQgMDtcbnZhciBhY290aERvY3MgPSB7XG4gIG5hbWU6ICdhY290aCcsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ2Fjb3RoKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY2NvdGFuZ2VudCBvZiBhIHZhbHVlLCBkZWZpbmVkIGFzIGBhY290aCh4KSA9IChsbigoeCsxKS94KSArIGxuKHgvKHgtMSkpKSAvIDJgLicsXG4gIGV4YW1wbGVzOiBbJ2Fjb3RoKDIpJywgJ2Fjb3RoKDAuNSknXSxcbiAgc2VlYWxzbzogWydhY3NjaCcsICdhc2VjaCddXG59O1xuZXhwb3J0cy5hY290aERvY3MgPSBhY290aERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFjc2NEb2NzID0gdm9pZCAwO1xudmFyIGFjc2NEb2NzID0ge1xuICBuYW1lOiAnYWNzYycsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ2Fjc2MoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGludmVyc2UgY290YW5nZW50IG9mIGEgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsnYWNzYygyKScsICdhY3NjKGNzYygwLjUpKScsICdhY3NjKDAuNSknXSxcbiAgc2VlYWxzbzogWydjc2MnLCAnYXNpbicsICdhc2VjJ11cbn07XG5leHBvcnRzLmFjc2NEb2NzID0gYWNzY0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFjc2NoRG9jcyA9IHZvaWQgMDtcbnZhciBhY3NjaERvY3MgPSB7XG4gIG5hbWU6ICdhY3NjaCcsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ2Fjc2NoKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY2Nvc2VjYW50IG9mIGEgdmFsdWUsIGRlZmluZWQgYXMgYGFjc2NoKHgpID0gbG4oMS94ICsgc3FydCgxL3heMiArIDEpKWAuJyxcbiAgZXhhbXBsZXM6IFsnYWNzY2goMC41KSddLFxuICBzZWVhbHNvOiBbJ2FzZWNoJywgJ2Fjb3RoJ11cbn07XG5leHBvcnRzLmFjc2NoRG9jcyA9IGFjc2NoRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXNlY0RvY3MgPSB2b2lkIDA7XG52YXIgYXNlY0RvY3MgPSB7XG4gIG5hbWU6ICdhc2VjJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYXNlYyh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgaW52ZXJzZSBzZWNhbnQgb2YgYSB2YWx1ZS4nLFxuICBleGFtcGxlczogWydhc2VjKDAuNSknLCAnYXNlYyhzZWMoMC41KSknLCAnYXNlYygyKSddLFxuICBzZWVhbHNvOiBbJ2Fjb3MnLCAnYWNvdCcsICdhY3NjJ11cbn07XG5leHBvcnRzLmFzZWNEb2NzID0gYXNlY0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFzZWNoRG9jcyA9IHZvaWQgMDtcbnZhciBhc2VjaERvY3MgPSB7XG4gIG5hbWU6ICdhc2VjaCcsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ2FzZWNoKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIHNlY2FudCBvZiBhIHZhbHVlLicsXG4gIGV4YW1wbGVzOiBbJ2FzZWNoKDAuNSknXSxcbiAgc2VlYWxzbzogWydhY3NjaCcsICdhY290aCddXG59O1xuZXhwb3J0cy5hc2VjaERvY3MgPSBhc2VjaERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFzaW5Eb2NzID0gdm9pZCAwO1xudmFyIGFzaW5Eb2NzID0ge1xuICBuYW1lOiAnYXNpbicsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ2FzaW4oeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBpbnZlcnNlIHNpbmUgb2YgYSB2YWx1ZSBpbiByYWRpYW5zLicsXG4gIGV4YW1wbGVzOiBbJ2FzaW4oMC41KScsICdhc2luKHNpbigwLjUpKSddLFxuICBzZWVhbHNvOiBbJ3NpbicsICdhY29zJywgJ2F0YW4nXVxufTtcbmV4cG9ydHMuYXNpbkRvY3MgPSBhc2luRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXNpbmhEb2NzID0gdm9pZCAwO1xudmFyIGFzaW5oRG9jcyA9IHtcbiAgbmFtZTogJ2FzaW5oJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYXNpbmgoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjc2luZSBvZiBhIHZhbHVlLCBkZWZpbmVkIGFzIGBhc2luaCh4KSA9IGxuKHggKyBzcXJ0KHheMiArIDEpKWAuJyxcbiAgZXhhbXBsZXM6IFsnYXNpbmgoMC41KSddLFxuICBzZWVhbHNvOiBbJ2Fjb3NoJywgJ2F0YW5oJ11cbn07XG5leHBvcnRzLmFzaW5oRG9jcyA9IGFzaW5oRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXRhbkRvY3MgPSB2b2lkIDA7XG52YXIgYXRhbkRvY3MgPSB7XG4gIG5hbWU6ICdhdGFuJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnYXRhbih4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGludmVyc2UgdGFuZ2VudCBvZiBhIHZhbHVlIGluIHJhZGlhbnMuJyxcbiAgZXhhbXBsZXM6IFsnYXRhbigwLjUpJywgJ2F0YW4odGFuKDAuNSkpJ10sXG4gIHNlZWFsc286IFsndGFuJywgJ2Fjb3MnLCAnYXNpbiddXG59O1xuZXhwb3J0cy5hdGFuRG9jcyA9IGF0YW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hdGFuMkRvY3MgPSB2b2lkIDA7XG52YXIgYXRhbjJEb2NzID0ge1xuICBuYW1lOiAnYXRhbjInLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydhdGFuMih5LCB4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGVzIHRoZSBwcmluY2lwYWwgdmFsdWUgb2YgdGhlIGFyYyB0YW5nZW50IG9mIHkveCBpbiByYWRpYW5zLicsXG4gIGV4YW1wbGVzOiBbJ2F0YW4yKDIsIDIpIC8gcGknLCAnYW5nbGUgPSA2MCBkZWcgaW4gcmFkJywgJ3ggPSBjb3MoYW5nbGUpJywgJ3kgPSBzaW4oYW5nbGUpJywgJ2F0YW4yKHksIHgpJ10sXG4gIHNlZWFsc286IFsnc2luJywgJ2NvcycsICd0YW4nXVxufTtcbmV4cG9ydHMuYXRhbjJEb2NzID0gYXRhbjJEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hdGFuaERvY3MgPSB2b2lkIDA7XG52YXIgYXRhbmhEb2NzID0ge1xuICBuYW1lOiAnYXRhbmgnLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWydhdGFuaCh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBhcmN0YW5nZW50IG9mIGEgdmFsdWUsIGRlZmluZWQgYXMgYGF0YW5oKHgpID0gbG4oKDEgKyB4KS8oMSAtIHgpKSAvIDJgLicsXG4gIGV4YW1wbGVzOiBbJ2F0YW5oKDAuNSknXSxcbiAgc2VlYWxzbzogWydhY29zaCcsICdhc2luaCddXG59O1xuZXhwb3J0cy5hdGFuaERvY3MgPSBhdGFuaERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvc0RvY3MgPSB2b2lkIDA7XG52YXIgY29zRG9jcyA9IHtcbiAgbmFtZTogJ2NvcycsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ2Nvcyh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGNvc2luZSBvZiB4IGluIHJhZGlhbnMuJyxcbiAgZXhhbXBsZXM6IFsnY29zKDIpJywgJ2NvcyhwaSAvIDQpIF4gMicsICdjb3MoMTgwIGRlZyknLCAnY29zKDYwIGRlZyknLCAnc2luKDAuMileMiArIGNvcygwLjIpXjInXSxcbiAgc2VlYWxzbzogWydhY29zJywgJ3NpbicsICd0YW4nXVxufTtcbmV4cG9ydHMuY29zRG9jcyA9IGNvc0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvc2hEb2NzID0gdm9pZCAwO1xudmFyIGNvc2hEb2NzID0ge1xuICBuYW1lOiAnY29zaCcsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ2Nvc2goeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBoeXBlcmJvbGljIGNvc2luZSBvZiB4IGluIHJhZGlhbnMuJyxcbiAgZXhhbXBsZXM6IFsnY29zaCgwLjUpJ10sXG4gIHNlZWFsc286IFsnc2luaCcsICd0YW5oJywgJ2NvdGgnXVxufTtcbmV4cG9ydHMuY29zaERvY3MgPSBjb3NoRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY290RG9jcyA9IHZvaWQgMDtcbnZhciBjb3REb2NzID0ge1xuICBuYW1lOiAnY290JyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnY290KHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgY290YW5nZW50IG9mIHggaW4gcmFkaWFucy4gRGVmaW5lZCBhcyAxL3Rhbih4KScsXG4gIGV4YW1wbGVzOiBbJ2NvdCgyKScsICcxIC8gdGFuKDIpJ10sXG4gIHNlZWFsc286IFsnc2VjJywgJ2NzYycsICd0YW4nXVxufTtcbmV4cG9ydHMuY290RG9jcyA9IGNvdERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvdGhEb2NzID0gdm9pZCAwO1xudmFyIGNvdGhEb2NzID0ge1xuICBuYW1lOiAnY290aCcsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ2NvdGgoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBoeXBlcmJvbGljIGNvdGFuZ2VudCBvZiB4IGluIHJhZGlhbnMuJyxcbiAgZXhhbXBsZXM6IFsnY290aCgyKScsICcxIC8gdGFuaCgyKSddLFxuICBzZWVhbHNvOiBbJ3NlY2gnLCAnY3NjaCcsICd0YW5oJ11cbn07XG5leHBvcnRzLmNvdGhEb2NzID0gY290aERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNzY0RvY3MgPSB2b2lkIDA7XG52YXIgY3NjRG9jcyA9IHtcbiAgbmFtZTogJ2NzYycsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ2NzYyh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIGNvc2VjYW50IG9mIHggaW4gcmFkaWFucy4gRGVmaW5lZCBhcyAxL3Npbih4KScsXG4gIGV4YW1wbGVzOiBbJ2NzYygyKScsICcxIC8gc2luKDIpJ10sXG4gIHNlZWFsc286IFsnc2VjJywgJ2NvdCcsICdzaW4nXVxufTtcbmV4cG9ydHMuY3NjRG9jcyA9IGNzY0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNzY2hEb2NzID0gdm9pZCAwO1xudmFyIGNzY2hEb2NzID0ge1xuICBuYW1lOiAnY3NjaCcsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ2NzY2goeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBoeXBlcmJvbGljIGNvc2VjYW50IG9mIHggaW4gcmFkaWFucy4gRGVmaW5lZCBhcyAxL3NpbmgoeCknLFxuICBleGFtcGxlczogWydjc2NoKDIpJywgJzEgLyBzaW5oKDIpJ10sXG4gIHNlZWFsc286IFsnc2VjaCcsICdjb3RoJywgJ3NpbmgnXVxufTtcbmV4cG9ydHMuY3NjaERvY3MgPSBjc2NoRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuc2VjRG9jcyA9IHZvaWQgMDtcbnZhciBzZWNEb2NzID0ge1xuICBuYW1lOiAnc2VjJyxcbiAgY2F0ZWdvcnk6ICdUcmlnb25vbWV0cnknLFxuICBzeW50YXg6IFsnc2VjKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgc2VjYW50IG9mIHggaW4gcmFkaWFucy4gRGVmaW5lZCBhcyAxL2Nvcyh4KScsXG4gIGV4YW1wbGVzOiBbJ3NlYygyKScsICcxIC8gY29zKDIpJ10sXG4gIHNlZWFsc286IFsnY290JywgJ2NzYycsICdjb3MnXVxufTtcbmV4cG9ydHMuc2VjRG9jcyA9IHNlY0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNlY2hEb2NzID0gdm9pZCAwO1xudmFyIHNlY2hEb2NzID0ge1xuICBuYW1lOiAnc2VjaCcsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ3NlY2goeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBoeXBlcmJvbGljIHNlY2FudCBvZiB4IGluIHJhZGlhbnMuIERlZmluZWQgYXMgMS9jb3NoKHgpJyxcbiAgZXhhbXBsZXM6IFsnc2VjaCgyKScsICcxIC8gY29zaCgyKSddLFxuICBzZWVhbHNvOiBbJ2NvdGgnLCAnY3NjaCcsICdjb3NoJ11cbn07XG5leHBvcnRzLnNlY2hEb2NzID0gc2VjaERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNpbkRvY3MgPSB2b2lkIDA7XG52YXIgc2luRG9jcyA9IHtcbiAgbmFtZTogJ3NpbicsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ3Npbih4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdGhlIHNpbmUgb2YgeCBpbiByYWRpYW5zLicsXG4gIGV4YW1wbGVzOiBbJ3NpbigyKScsICdzaW4ocGkgLyA0KSBeIDInLCAnc2luKDkwIGRlZyknLCAnc2luKDMwIGRlZyknLCAnc2luKDAuMileMiArIGNvcygwLjIpXjInXSxcbiAgc2VlYWxzbzogWydhc2luJywgJ2NvcycsICd0YW4nXVxufTtcbmV4cG9ydHMuc2luRG9jcyA9IHNpbkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnNpbmhEb2NzID0gdm9pZCAwO1xudmFyIHNpbmhEb2NzID0ge1xuICBuYW1lOiAnc2luaCcsXG4gIGNhdGVnb3J5OiAnVHJpZ29ub21ldHJ5JyxcbiAgc3ludGF4OiBbJ3NpbmgoeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSBoeXBlcmJvbGljIHNpbmUgb2YgeCBpbiByYWRpYW5zLicsXG4gIGV4YW1wbGVzOiBbJ3NpbmgoMC41KSddLFxuICBzZWVhbHNvOiBbJ2Nvc2gnLCAndGFuaCddXG59O1xuZXhwb3J0cy5zaW5oRG9jcyA9IHNpbmhEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50YW5Eb2NzID0gdm9pZCAwO1xudmFyIHRhbkRvY3MgPSB7XG4gIG5hbWU6ICd0YW4nLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWyd0YW4oeCknXSxcbiAgZGVzY3JpcHRpb246ICdDb21wdXRlIHRoZSB0YW5nZW50IG9mIHggaW4gcmFkaWFucy4nLFxuICBleGFtcGxlczogWyd0YW4oMC41KScsICdzaW4oMC41KSAvIGNvcygwLjUpJywgJ3RhbihwaSAvIDQpJywgJ3Rhbig0NSBkZWcpJ10sXG4gIHNlZWFsc286IFsnYXRhbicsICdzaW4nLCAnY29zJ11cbn07XG5leHBvcnRzLnRhbkRvY3MgPSB0YW5Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50YW5oRG9jcyA9IHZvaWQgMDtcbnZhciB0YW5oRG9jcyA9IHtcbiAgbmFtZTogJ3RhbmgnLFxuICBjYXRlZ29yeTogJ1RyaWdvbm9tZXRyeScsXG4gIHN5bnRheDogWyd0YW5oKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ29tcHV0ZSB0aGUgaHlwZXJib2xpYyB0YW5nZW50IG9mIHggaW4gcmFkaWFucy4nLFxuICBleGFtcGxlczogWyd0YW5oKDAuNSknLCAnc2luaCgwLjUpIC8gY29zaCgwLjUpJ10sXG4gIHNlZWFsc286IFsnc2luaCcsICdjb3NoJ11cbn07XG5leHBvcnRzLnRhbmhEb2NzID0gdGFuaERvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnRvRG9jcyA9IHZvaWQgMDtcbnZhciB0b0RvY3MgPSB7XG4gIG5hbWU6ICd0bycsXG4gIGNhdGVnb3J5OiAnVW5pdHMnLFxuICBzeW50YXg6IFsneCB0byB1bml0JywgJ3RvKHgsIHVuaXQpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2hhbmdlIHRoZSB1bml0IG9mIGEgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsnNSBpbmNoIHRvIGNtJywgJzMuMmtnIHRvIGcnLCAnMTYgYnl0ZXMgaW4gYml0cyddLFxuICBzZWVhbHNvOiBbXVxufTtcbmV4cG9ydHMudG9Eb2NzID0gdG9Eb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jbG9uZURvY3MgPSB2b2lkIDA7XG52YXIgY2xvbmVEb2NzID0ge1xuICBuYW1lOiAnY2xvbmUnLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ2Nsb25lKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnQ2xvbmUgYSB2YXJpYWJsZS4gQ3JlYXRlcyBhIGNvcHkgb2YgcHJpbWl0aXZlIHZhcmlhYmxlcyxhbmQgYSBkZWVwIGNvcHkgb2YgbWF0cmljZXMnLFxuICBleGFtcGxlczogWydjbG9uZSgzLjUpJywgJ2Nsb25lKDIgLSA0aSknLCAnY2xvbmUoNDUgZGVnKScsICdjbG9uZShbMSwgMjsgMywgNF0pJywgJ2Nsb25lKFwiaGVsbG8gd29ybGRcIiknXSxcbiAgc2VlYWxzbzogW11cbn07XG5leHBvcnRzLmNsb25lRG9jcyA9IGNsb25lRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZm9ybWF0RG9jcyA9IHZvaWQgMDtcbnZhciBmb3JtYXREb2NzID0ge1xuICBuYW1lOiAnZm9ybWF0JyxcbiAgY2F0ZWdvcnk6ICdVdGlscycsXG4gIHN5bnRheDogWydmb3JtYXQodmFsdWUpJywgJ2Zvcm1hdCh2YWx1ZSwgcHJlY2lzaW9uKSddLFxuICBkZXNjcmlwdGlvbjogJ0Zvcm1hdCBhIHZhbHVlIG9mIGFueSB0eXBlIGFzIHN0cmluZy4nLFxuICBleGFtcGxlczogWydmb3JtYXQoMi4zKScsICdmb3JtYXQoMyAtIDRpKScsICdmb3JtYXQoW10pJywgJ2Zvcm1hdChwaSwgMyknXSxcbiAgc2VlYWxzbzogWydwcmludCddXG59O1xuZXhwb3J0cy5mb3JtYXREb2NzID0gZm9ybWF0RG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaGFzTnVtZXJpY1ZhbHVlRG9jcyA9IHZvaWQgMDtcbnZhciBoYXNOdW1lcmljVmFsdWVEb2NzID0ge1xuICBuYW1lOiAnaGFzTnVtZXJpY1ZhbHVlJyxcbiAgY2F0ZWdvcnk6ICdVdGlscycsXG4gIHN5bnRheDogWydoYXNOdW1lcmljVmFsdWUoeCknXSxcbiAgZGVzY3JpcHRpb246ICdUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBhbiBudW1lcmljIHZhbHVlLiAnICsgJ0luIGNhc2Ugb2YgYSBzdHJpbmcsIHRydWUgaXMgcmV0dXJuZWQgaWYgdGhlIHN0cmluZyBjb250YWlucyBhIG51bWVyaWMgdmFsdWUuJyxcbiAgZXhhbXBsZXM6IFsnaGFzTnVtZXJpY1ZhbHVlKDIpJywgJ2hhc051bWVyaWNWYWx1ZShcIjJcIiknLCAnaXNOdW1lcmljKFwiMlwiKScsICdoYXNOdW1lcmljVmFsdWUoMCknLCAnaGFzTnVtZXJpY1ZhbHVlKGJpZ251bWJlcig1MDApKScsICdoYXNOdW1lcmljVmFsdWUoZnJhY3Rpb24oMC4xMjUpKScsICdoYXNOdW1lcmljVmFsdWUoMiArIDNpKScsICdoYXNOdW1lcmljVmFsdWUoWzIuMywgXCJmb29cIiwgZmFsc2VdKSddLFxuICBzZWVhbHNvOiBbJ2lzSW50ZWdlcicsICdpc1plcm8nLCAnaXNOZWdhdGl2ZScsICdpc1Bvc2l0aXZlJywgJ2lzTmFOJywgJ2lzTnVtZXJpYyddXG59O1xuZXhwb3J0cy5oYXNOdW1lcmljVmFsdWVEb2NzID0gaGFzTnVtZXJpY1ZhbHVlRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNJbnRlZ2VyRG9jcyA9IHZvaWQgMDtcbnZhciBpc0ludGVnZXJEb2NzID0ge1xuICBuYW1lOiAnaXNJbnRlZ2VyJyxcbiAgY2F0ZWdvcnk6ICdVdGlscycsXG4gIHN5bnRheDogWydpc0ludGVnZXIoeCknXSxcbiAgZGVzY3JpcHRpb246ICdUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBhbiBpbnRlZ2VyIG51bWJlci4nLFxuICBleGFtcGxlczogWydpc0ludGVnZXIoMiknLCAnaXNJbnRlZ2VyKDMuNSknLCAnaXNJbnRlZ2VyKFszLCAwLjUsIC0yXSknXSxcbiAgc2VlYWxzbzogWydpc05lZ2F0aXZlJywgJ2lzTnVtZXJpYycsICdpc1Bvc2l0aXZlJywgJ2lzWmVybyddXG59O1xuZXhwb3J0cy5pc0ludGVnZXJEb2NzID0gaXNJbnRlZ2VyRG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNOYU5Eb2NzID0gdm9pZCAwO1xudmFyIGlzTmFORG9jcyA9IHtcbiAgbmFtZTogJ2lzTmFOJyxcbiAgY2F0ZWdvcnk6ICdVdGlscycsXG4gIHN5bnRheDogWydpc05hTih4KSddLFxuICBkZXNjcmlwdGlvbjogJ1Rlc3Qgd2hldGhlciBhIHZhbHVlIGlzIE5hTiAobm90IGEgbnVtYmVyKScsXG4gIGV4YW1wbGVzOiBbJ2lzTmFOKDIpJywgJ2lzTmFOKDAgLyAwKScsICdpc05hTihOYU4pJywgJ2lzTmFOKEluZmluaXR5KSddLFxuICBzZWVhbHNvOiBbJ2lzTmVnYXRpdmUnLCAnaXNOdW1lcmljJywgJ2lzUG9zaXRpdmUnLCAnaXNaZXJvJ11cbn07XG5leHBvcnRzLmlzTmFORG9jcyA9IGlzTmFORG9jczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNOZWdhdGl2ZURvY3MgPSB2b2lkIDA7XG52YXIgaXNOZWdhdGl2ZURvY3MgPSB7XG4gIG5hbWU6ICdpc05lZ2F0aXZlJyxcbiAgY2F0ZWdvcnk6ICdVdGlscycsXG4gIHN5bnRheDogWydpc05lZ2F0aXZlKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgbmVnYXRpdmU6IHNtYWxsZXIgdGhhbiB6ZXJvLicsXG4gIGV4YW1wbGVzOiBbJ2lzTmVnYXRpdmUoMiknLCAnaXNOZWdhdGl2ZSgwKScsICdpc05lZ2F0aXZlKC00KScsICdpc05lZ2F0aXZlKFszLCAwLjUsIC0yXSknXSxcbiAgc2VlYWxzbzogWydpc0ludGVnZXInLCAnaXNOdW1lcmljJywgJ2lzUG9zaXRpdmUnLCAnaXNaZXJvJ11cbn07XG5leHBvcnRzLmlzTmVnYXRpdmVEb2NzID0gaXNOZWdhdGl2ZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzTnVtZXJpY0RvY3MgPSB2b2lkIDA7XG52YXIgaXNOdW1lcmljRG9jcyA9IHtcbiAgbmFtZTogJ2lzTnVtZXJpYycsXG4gIGNhdGVnb3J5OiAnVXRpbHMnLFxuICBzeW50YXg6IFsnaXNOdW1lcmljKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgYSBudW1lcmljIHZhbHVlLiAnICsgJ1JldHVybnMgdHJ1ZSB3aGVuIHRoZSBpbnB1dCBpcyBhIG51bWJlciwgQmlnTnVtYmVyLCBGcmFjdGlvbiwgb3IgYm9vbGVhbi4nLFxuICBleGFtcGxlczogWydpc051bWVyaWMoMiknLCAnaXNOdW1lcmljKFwiMlwiKScsICdoYXNOdW1lcmljVmFsdWUoXCIyXCIpJywgJ2lzTnVtZXJpYygwKScsICdpc051bWVyaWMoYmlnbnVtYmVyKDUwMCkpJywgJ2lzTnVtZXJpYyhmcmFjdGlvbigwLjEyNSkpJywgJ2lzTnVtZXJpYygyICsgM2kpJywgJ2lzTnVtZXJpYyhbMi4zLCBcImZvb1wiLCBmYWxzZV0pJ10sXG4gIHNlZWFsc286IFsnaXNJbnRlZ2VyJywgJ2lzWmVybycsICdpc05lZ2F0aXZlJywgJ2lzUG9zaXRpdmUnLCAnaXNOYU4nLCAnaGFzTnVtZXJpY1ZhbHVlJ11cbn07XG5leHBvcnRzLmlzTnVtZXJpY0RvY3MgPSBpc051bWVyaWNEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc1Bvc2l0aXZlRG9jcyA9IHZvaWQgMDtcbnZhciBpc1Bvc2l0aXZlRG9jcyA9IHtcbiAgbmFtZTogJ2lzUG9zaXRpdmUnLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ2lzUG9zaXRpdmUoeCknXSxcbiAgZGVzY3JpcHRpb246ICdUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBwb3NpdGl2ZTogbGFyZ2VyIHRoYW4gemVyby4nLFxuICBleGFtcGxlczogWydpc1Bvc2l0aXZlKDIpJywgJ2lzUG9zaXRpdmUoMCknLCAnaXNQb3NpdGl2ZSgtNCknLCAnaXNQb3NpdGl2ZShbMywgMC41LCAtMl0pJ10sXG4gIHNlZWFsc286IFsnaXNJbnRlZ2VyJywgJ2lzTnVtZXJpYycsICdpc05lZ2F0aXZlJywgJ2lzWmVybyddXG59O1xuZXhwb3J0cy5pc1Bvc2l0aXZlRG9jcyA9IGlzUG9zaXRpdmVEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5pc1ByaW1lRG9jcyA9IHZvaWQgMDtcbnZhciBpc1ByaW1lRG9jcyA9IHtcbiAgbmFtZTogJ2lzUHJpbWUnLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ2lzUHJpbWUoeCknXSxcbiAgZGVzY3JpcHRpb246ICdUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBwcmltZTogaGFzIG5vIGRpdmlzb3JzIG90aGVyIHRoYW4gaXRzZWxmIGFuZCBvbmUuJyxcbiAgZXhhbXBsZXM6IFsnaXNQcmltZSgzKScsICdpc1ByaW1lKC0yKScsICdpc1ByaW1lKFsyLCAxNywgMTAwXSknXSxcbiAgc2VlYWxzbzogWydpc0ludGVnZXInLCAnaXNOdW1lcmljJywgJ2lzTmVnYXRpdmUnLCAnaXNaZXJvJ11cbn07XG5leHBvcnRzLmlzUHJpbWVEb2NzID0gaXNQcmltZURvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzWmVyb0RvY3MgPSB2b2lkIDA7XG52YXIgaXNaZXJvRG9jcyA9IHtcbiAgbmFtZTogJ2lzWmVybycsXG4gIGNhdGVnb3J5OiAnVXRpbHMnLFxuICBzeW50YXg6IFsnaXNaZXJvKHgpJ10sXG4gIGRlc2NyaXB0aW9uOiAnVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgemVyby4nLFxuICBleGFtcGxlczogWydpc1plcm8oMiknLCAnaXNaZXJvKDApJywgJ2lzWmVybygtNCknLCAnaXNaZXJvKFszLCAwLCAtMiwgMF0pJ10sXG4gIHNlZWFsc286IFsnaXNJbnRlZ2VyJywgJ2lzTnVtZXJpYycsICdpc05lZ2F0aXZlJywgJ2lzUG9zaXRpdmUnXVxufTtcbmV4cG9ydHMuaXNaZXJvRG9jcyA9IGlzWmVyb0RvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLm51bWVyaWNEb2NzID0gdm9pZCAwO1xudmFyIG51bWVyaWNEb2NzID0ge1xuICBuYW1lOiAnbnVtZXJpYycsXG4gIGNhdGVnb3J5OiAnVXRpbHMnLFxuICBzeW50YXg6IFsnbnVtZXJpYyh4KSddLFxuICBkZXNjcmlwdGlvbjogJ0NvbnZlcnQgYSBudW1lcmljIGlucHV0IHRvIGEgc3BlY2lmaWMgbnVtZXJpYyB0eXBlOiBudW1iZXIsIEJpZ051bWJlciwgb3IgRnJhY3Rpb24uJyxcbiAgZXhhbXBsZXM6IFsnbnVtZXJpYyhcIjRcIiknLCAnbnVtZXJpYyhcIjRcIiwgXCJudW1iZXJcIiknLCAnbnVtZXJpYyhcIjRcIiwgXCJCaWdOdW1iZXJcIiknLCAnbnVtZXJpYyhcIjRcIiwgXCJGcmFjdGlvbiknLCAnbnVtZXJpYyg0LCBcIkZyYWN0aW9uXCIpJywgJ251bWVyaWMoZnJhY3Rpb24oMiwgNSksIFwibnVtYmVyKSddLFxuICBzZWVhbHNvOiBbJ251bWJlcicsICdmcmFjdGlvbicsICdiaWdudW1iZXInLCAnc3RyaW5nJywgJ2Zvcm1hdCddXG59O1xuZXhwb3J0cy5udW1lcmljRG9jcyA9IG51bWVyaWNEb2NzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy50eXBlT2ZEb2NzID0gdm9pZCAwO1xudmFyIHR5cGVPZkRvY3MgPSB7XG4gIG5hbWU6ICd0eXBlT2YnLFxuICBjYXRlZ29yeTogJ1V0aWxzJyxcbiAgc3ludGF4OiBbJ3R5cGVPZih4KSddLFxuICBkZXNjcmlwdGlvbjogJ0dldCB0aGUgdHlwZSBvZiBhIHZhcmlhYmxlLicsXG4gIGV4YW1wbGVzOiBbJ3R5cGVPZigzLjUpJywgJ3R5cGVPZigyIC0gNGkpJywgJ3R5cGVPZig0NSBkZWcpJywgJ3R5cGVPZihcImhlbGxvIHdvcmxkXCIpJ10sXG4gIHNlZWFsc286IFsnZ2V0TWF0cml4RGF0YVR5cGUnXVxufTtcbmV4cG9ydHMudHlwZU9mRG9jcyA9IHR5cGVPZkRvY3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbXBpbGUgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnY29tcGlsZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdwYXJzZSddO1xudmFyIGNyZWF0ZUNvbXBpbGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgcGFyc2UgPSBfcmVmLnBhcnNlO1xuXG4gIC8qKlxuICAgKiBQYXJzZSBhbmQgY29tcGlsZSBhbiBleHByZXNzaW9uLlxuICAgKiBSZXR1cm5zIGEgYW4gb2JqZWN0IHdpdGggYSBmdW5jdGlvbiBgZXZhbHVhdGUoW3Njb3BlXSlgIHRvIGV2YWx1YXRlIHRoZVxuICAgKiBjb21waWxlZCBleHByZXNzaW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmNvbXBpbGUoZXhwcikgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgb25lIG5vZGVcbiAgICogICAgIG1hdGguY29tcGlsZShbZXhwcjEsIGV4cHIyLCBleHByMywgLi4uXSkgLy8gcmV0dXJucyBhbiBhcnJheSB3aXRoIG5vZGVzXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgY29uc3QgY29kZTEgPSBtYXRoLmNvbXBpbGUoJ3NxcnQoM14yICsgNF4yKScpXG4gICAqICAgICBjb2RlMS5ldmFsdWF0ZSgpIC8vIDVcbiAgICpcbiAgICogICAgIGxldCBzY29wZSA9IHthOiAzLCBiOiA0fVxuICAgKiAgICAgY29uc3QgY29kZTIgPSBtYXRoLmNvbXBpbGUoJ2EgKiBiJykgLy8gMTJcbiAgICogICAgIGNvZGUyLmV2YWx1YXRlKHNjb3BlKSAvLyAxMlxuICAgKiAgICAgc2NvcGUuYSA9IDVcbiAgICogICAgIGNvZGUyLmV2YWx1YXRlKHNjb3BlKSAvLyAyMFxuICAgKlxuICAgKiAgICAgY29uc3Qgbm9kZXMgPSBtYXRoLmNvbXBpbGUoWydhID0gMycsICdiID0gNCcsICdhICogYiddKVxuICAgKiAgICAgbm9kZXNbMl0uZXZhbHVhdGUoKSAvLyAxMlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgcGFyc2UsIGV2YWx1YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW10gfCBBcnJheSB8IE1hdHJpeH0gZXhwclxuICAgKiAgICAgICAgICAgIFRoZSBleHByZXNzaW9uIHRvIGJlIGNvbXBpbGVkXG4gICAqIEByZXR1cm4ge3tldmFsdWF0ZTogRnVuY3Rpb259IHwgQXJyYXkuPHtldmFsdWF0ZTogRnVuY3Rpb259Pn0gY29kZVxuICAgKiAgICAgICAgICAgIEFuIG9iamVjdCB3aXRoIHRoZSBjb21waWxlZCBleHByZXNzaW9uXG4gICAqIEB0aHJvd3Mge0Vycm9yfVxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhleHByKSB7XG4gICAgICByZXR1cm4gcGFyc2UoZXhwcikuY29tcGlsZSgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoZXhwcikge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKShleHByLCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlKGVudHJ5KS5jb21waWxlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNvbXBpbGUgPSBjcmVhdGVDb21waWxlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEZXByZWNhdGVkRXZhbCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbG9nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2xvZ1wiKTtcblxuLy8gRm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIGRlcHJlY2F0ZWQgc2luY2UgdmVyc2lvbiA2LjAuMC4gRGF0ZTogMjAxOC0xMi0wNVxudmFyIGNyZWF0ZURlcHJlY2F0ZWRFdmFsID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKCdldmFsJywgWydldmFsdWF0ZSddLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgZXZhbHVhdGUgPSBfcmVmLmV2YWx1YXRlO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICgwLCBfbG9nLndhcm5PbmNlKSgnRnVuY3Rpb24gXCJldmFsXCIgaGFzIGJlZW4gcmVuYW1lZCB0byBcImV2YWx1YXRlXCIgaW4gdjYuMC4wLCBwbGVhc2UgdXNlIHRoZSBuZXcgZnVuY3Rpb24gaW5zdGVhZC4nKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXZhbHVhdGUuYXBwbHkoZXZhbHVhdGUsIGFyZ3MpO1xuICB9O1xufSk7XG5leHBvcnRzLmNyZWF0ZURlcHJlY2F0ZWRFdmFsID0gY3JlYXRlRGVwcmVjYXRlZEV2YWw7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUV2YWx1YXRlID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2V2YWx1YXRlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3BhcnNlJ107XG52YXIgY3JlYXRlRXZhbHVhdGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgcGFyc2UgPSBfcmVmLnBhcnNlO1xuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZSBhbiBleHByZXNzaW9uLlxuICAgKlxuICAgKiBOb3RlIHRoZSBldmFsdWF0aW5nIGFyYml0cmFyeSBleHByZXNzaW9ucyBtYXkgaW52b2x2ZSBzZWN1cml0eSByaXNrcyxcbiAgICogc2VlIFtodHRwczovL21hdGhqcy5vcmcvZG9jcy9leHByZXNzaW9ucy9zZWN1cml0eS5odG1sXShodHRwczovL21hdGhqcy5vcmcvZG9jcy9leHByZXNzaW9ucy9zZWN1cml0eS5odG1sKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5ldmFsdWF0ZShleHByKVxuICAgKiAgICAgbWF0aC5ldmFsdWF0ZShleHByLCBzY29wZSlcbiAgICogICAgIG1hdGguZXZhbHVhdGUoW2V4cHIxLCBleHByMiwgZXhwcjMsIC4uLl0pXG4gICAqICAgICBtYXRoLmV2YWx1YXRlKFtleHByMSwgZXhwcjIsIGV4cHIzLCAuLi5dLCBzY29wZSlcbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICpcbiAgICogICAgIG1hdGguZXZhbHVhdGUoJygyKzMpLzQnKSAgICAgICAgICAgICAgICAvLyAxLjI1XG4gICAqICAgICBtYXRoLmV2YWx1YXRlKCdzcXJ0KDNeMiArIDReMiknKSAgICAgICAgLy8gNVxuICAgKiAgICAgbWF0aC5ldmFsdWF0ZSgnc3FydCgtNCknKSAgICAgICAgICAgICAgIC8vIDJpXG4gICAqICAgICBtYXRoLmV2YWx1YXRlKFsnYT0zJywgJ2I9NCcsICdhKmInXSkgICAgLy8gWzMsIDQsIDEyXVxuICAgKlxuICAgKiAgICAgbGV0IHNjb3BlID0ge2E6MywgYjo0fVxuICAgKiAgICAgbWF0aC5ldmFsdWF0ZSgnYSAqIGInLCBzY29wZSkgICAgICAgICAgIC8vIDEyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBwYXJzZSwgY29tcGlsZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IHN0cmluZ1tdIHwgTWF0cml4fSBleHByICAgVGhlIGV4cHJlc3Npb24gdG8gYmUgZXZhbHVhdGVkXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbc2NvcGVdICAgICAgICAgICAgICAgICAgICBTY29wZSB0byByZWFkL3dyaXRlIHZhcmlhYmxlc1xuICAgKiBAcmV0dXJuIHsqfSBUaGUgcmVzdWx0IG9mIHRoZSBleHByZXNzaW9uXG4gICAqIEB0aHJvd3Mge0Vycm9yfVxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhleHByKSB7XG4gICAgICB2YXIgc2NvcGUgPSB7fTtcbiAgICAgIHJldHVybiBwYXJzZShleHByKS5jb21waWxlKCkuZXZhbHVhdGUoc2NvcGUpO1xuICAgIH0sXG4gICAgJ3N0cmluZywgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nT2JqZWN0KGV4cHIsIHNjb3BlKSB7XG4gICAgICByZXR1cm4gcGFyc2UoZXhwcikuY29tcGlsZSgpLmV2YWx1YXRlKHNjb3BlKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KGV4cHIpIHtcbiAgICAgIHZhciBzY29wZSA9IHt9O1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKShleHByLCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlKGVudHJ5KS5jb21waWxlKCkuZXZhbHVhdGUoc2NvcGUpO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgsIE9iamVjdCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4T2JqZWN0KGV4cHIsIHNjb3BlKSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKGV4cHIsIGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICByZXR1cm4gcGFyc2UoZW50cnkpLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUV2YWx1YXRlID0gY3JlYXRlRXZhbHVhdGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUhlbHAgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2N1c3RvbXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY3VzdG9tc1wiKTtcblxudmFyIF9lbWJlZGRlZERvY3MgPSByZXF1aXJlKFwiLi4vZW1iZWRkZWREb2NzL2VtYmVkZGVkRG9jc1wiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgbmFtZSA9ICdoZWxwJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdGhXaXRoVHJhbnNmb3JtJywgJ0hlbHAnXTtcbnZhciBjcmVhdGVIZWxwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdGhXaXRoVHJhbnNmb3JtID0gX3JlZi5tYXRoV2l0aFRyYW5zZm9ybSxcbiAgICAgIEhlbHAgPSBfcmVmLkhlbHA7XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIGhlbHAgb24gYSBmdW5jdGlvbiBvciBkYXRhIHR5cGUuXG4gICAqIEhlbHAgZmlsZXMgYXJlIHJldHJpZXZlZCBmcm9tIHRoZSBlbWJlZGRlZCBkb2N1bWVudGF0aW9uIGluIG1hdGguZG9jcy5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmhlbHAoc2VhcmNoKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc29sZS5sb2cobWF0aC5oZWxwKCdzaW4nKS50b1N0cmluZygpKVxuICAgKiAgICBjb25zb2xlLmxvZyhtYXRoLmhlbHAobWF0aC5hZGQpLnRvU3RyaW5nKCkpXG4gICAqICAgIGNvbnNvbGUubG9nKG1hdGguaGVscChtYXRoLmFkZCkudG9KU09OKCkpXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb24gfCBzdHJpbmcgfCBPYmplY3R9IHNlYXJjaCAgIEEgZnVuY3Rpb24gb3IgZnVuY3Rpb24gbmFtZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Igd2hpY2ggdG8gZ2V0IGhlbHBcbiAgICogQHJldHVybiB7SGVscH0gQSBoZWxwIG9iamVjdFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICBhbnk6IGZ1bmN0aW9uIGFueShzZWFyY2gpIHtcbiAgICAgIHZhciBwcm9wO1xuICAgICAgdmFyIHNlYXJjaE5hbWUgPSBzZWFyY2g7XG5cbiAgICAgIGlmICh0eXBlb2Ygc2VhcmNoICE9PSAnc3RyaW5nJykge1xuICAgICAgICBmb3IgKHByb3AgaW4gbWF0aFdpdGhUcmFuc2Zvcm0pIHtcbiAgICAgICAgICAvLyBzZWFyY2ggaW4gZnVuY3Rpb25zIGFuZCBjb25zdGFudHNcbiAgICAgICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG1hdGhXaXRoVHJhbnNmb3JtLCBwcm9wKSAmJiBzZWFyY2ggPT09IG1hdGhXaXRoVHJhbnNmb3JtW3Byb3BdKSB7XG4gICAgICAgICAgICBzZWFyY2hOYW1lID0gcHJvcDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvKiBUT0RPOiBpbXBsZW1lbnQgaGVscCBmb3IgZGF0YSB0eXBlc1xuICAgICAgICAgaWYgKCF0ZXh0KSB7XG4gICAgICAgICAvLyBzZWFyY2ggZGF0YSB0eXBlXG4gICAgICAgICBmb3IgKHByb3AgaW4gbWF0aC50eXBlKSB7XG4gICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkobWF0aCwgcHJvcCkpIHtcbiAgICAgICAgIGlmIChzZWFyY2ggPT09IG1hdGgudHlwZVtwcm9wXSkge1xuICAgICAgICAgdGV4dCA9IHByb3BcbiAgICAgICAgIGJyZWFrXG4gICAgICAgICB9XG4gICAgICAgICB9XG4gICAgICAgICB9XG4gICAgICAgICB9XG4gICAgICAgICAqL1xuXG4gICAgICB9XG5cbiAgICAgIHZhciBkb2MgPSAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShfZW1iZWRkZWREb2NzLmVtYmVkZGVkRG9jcywgc2VhcmNoTmFtZSk7XG5cbiAgICAgIGlmICghZG9jKSB7XG4gICAgICAgIHZhciBzZWFyY2hUZXh0ID0gdHlwZW9mIHNlYXJjaE5hbWUgPT09ICdmdW5jdGlvbicgPyBzZWFyY2hOYW1lLm5hbWUgOiBzZWFyY2hOYW1lO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGRvY3VtZW50YXRpb24gZm91bmQgb24gXCInICsgc2VhcmNoVGV4dCArICdcIicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IEhlbHAoZG9jKTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUhlbHAgPSBjcmVhdGVIZWxwOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVQYXJzZXIgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdwYXJzZXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnUGFyc2VyJ107XG52YXIgY3JlYXRlUGFyc2VyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIFBhcnNlciA9IF9yZWYuUGFyc2VyO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBwYXJzZXIuIFRoZSBmdW5jdGlvbiBjcmVhdGVzIGEgbmV3IGBtYXRoLlBhcnNlcmAgb2JqZWN0LlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgucGFyc2VyKClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBjb25zdCBwYXJzZXIgPSBuZXcgbWF0aC5wYXJzZXIoKVxuICAgKlxuICAgKiAgICAgLy8gZXZhbHVhdGUgZXhwcmVzc2lvbnNcbiAgICogICAgIGNvbnN0IGEgPSBwYXJzZXIuZXZhbHVhdGUoJ3NxcnQoM14yICsgNF4yKScpIC8vIDVcbiAgICogICAgIGNvbnN0IGIgPSBwYXJzZXIuZXZhbHVhdGUoJ3NxcnQoLTQpJykgICAgICAgIC8vIDJpXG4gICAqICAgICBjb25zdCBjID0gcGFyc2VyLmV2YWx1YXRlKCcyIGluY2ggaW4gY20nKSAgICAvLyA1LjA4IGNtXG4gICAqICAgICBjb25zdCBkID0gcGFyc2VyLmV2YWx1YXRlKCdjb3MoNDUgZGVnKScpICAgICAvLyAwLjcwNzEwNjc4MTE4NjU0NzZcbiAgICpcbiAgICogICAgIC8vIGRlZmluZSB2YXJpYWJsZXMgYW5kIGZ1bmN0aW9uc1xuICAgKiAgICAgcGFyc2VyLmV2YWx1YXRlKCd4ID0gNyAvIDInKSAgICAgICAgICAgICAgICAgLy8gMy41XG4gICAqICAgICBwYXJzZXIuZXZhbHVhdGUoJ3ggKyAzJykgICAgICAgICAgICAgICAgICAgICAvLyA2LjVcbiAgICogICAgIHBhcnNlci5ldmFsdWF0ZSgnZnVuY3Rpb24gZih4LCB5KSA9IHheeScpICAgIC8vIGYoeCwgeSlcbiAgICogICAgIHBhcnNlci5ldmFsdWF0ZSgnZigyLCAzKScpICAgICAgICAgICAgICAgICAgIC8vIDhcbiAgICpcbiAgICogICAgIC8vIGdldCBhbmQgc2V0IHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zXG4gICAqICAgICBjb25zdCB4ID0gcGFyc2VyLmdldCgneCcpICAgICAgICAgICAgICAgIC8vIDdcbiAgICogICAgIGNvbnN0IGYgPSBwYXJzZXIuZ2V0KCdmJykgICAgICAgICAgICAgICAgLy8gZnVuY3Rpb25cbiAgICogICAgIGNvbnN0IGcgPSBmKDMsIDIpICAgICAgICAgICAgICAgICAgICAgICAgLy8gOVxuICAgKiAgICAgcGFyc2VyLnNldCgnaCcsIDUwMClcbiAgICogICAgIGNvbnN0IGkgPSBwYXJzZXIuZXZhbHVhdGUoJ2ggLyAyJykgICAgICAgLy8gMjUwXG4gICAqICAgICBwYXJzZXIuc2V0KCdoZWxsbycsIGZ1bmN0aW9uIChuYW1lKSB7XG4gICAqICAgICAgIHJldHVybiAnaGVsbG8sICcgKyBuYW1lICsgJyEnXG4gICAqICAgICB9KVxuICAgKiAgICAgcGFyc2VyLmV2YWx1YXRlKCdoZWxsbyhcInVzZXJcIiknKSAgICAgICAgIC8vIFwiaGVsbG8sIHVzZXIhXCJcbiAgICpcbiAgICogICAgIC8vIGNsZWFyIGRlZmluZWQgZnVuY3Rpb25zIGFuZCB2YXJpYWJsZXNcbiAgICogICAgIHBhcnNlci5jbGVhcigpXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBldmFsdWF0ZSwgY29tcGlsZSwgcGFyc2VcbiAgICpcbiAgICogQHJldHVybiB7UGFyc2VyfSBQYXJzZXJcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJyc6IGZ1bmN0aW9uIF8oKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcnNlcigpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlUGFyc2VyID0gY3JlYXRlUGFyc2VyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5rZXl3b3JkcyA9IHZvaWQgMDtcbi8vIFJlc2VydmVkIGtleXdvcmRzIG5vdCBhbGxvd2VkIHRvIHVzZSBpbiB0aGUgcGFyc2VyXG52YXIga2V5d29yZHMgPSB7XG4gIGVuZDogdHJ1ZVxufTtcbmV4cG9ydHMua2V5d29yZHMgPSBrZXl3b3JkczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWNjZXNzb3JOb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2N1c3RvbXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY3VzdG9tc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWNjZXNzID0gcmVxdWlyZShcIi4vdXRpbHMvYWNjZXNzXCIpO1xuXG52YXIgbmFtZSA9ICdBY2Nlc3Nvck5vZGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnc3Vic2V0JywgJ05vZGUnXTtcbnZhciBjcmVhdGVBY2Nlc3Nvck5vZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgc3Vic2V0ID0gX3JlZi5zdWJzZXQsXG4gICAgICBOb2RlID0gX3JlZi5Ob2RlO1xuICB2YXIgYWNjZXNzID0gKDAsIF9hY2Nlc3MuYWNjZXNzRmFjdG9yeSkoe1xuICAgIHN1YnNldDogc3Vic2V0XG4gIH0pO1xuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIEFjY2Vzc29yTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICogQWNjZXNzIGFuIG9iamVjdCBwcm9wZXJ0eSBvciBnZXQgYSBtYXRyaXggc3Vic2V0XG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gb2JqZWN0ICAgICAgICAgICAgICAgICBUaGUgb2JqZWN0IGZyb20gd2hpY2ggdG8gcmV0cmlldmVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGEgcHJvcGVydHkgb3Igc3Vic2V0LlxuICAgKiBAcGFyYW0ge0luZGV4Tm9kZX0gaW5kZXggICAgICAgICAgICAgSW5kZXhOb2RlIGNvbnRhaW5pbmcgcmFuZ2VzXG4gICAqL1xuXG4gIGZ1bmN0aW9uIEFjY2Vzc29yTm9kZShvYmplY3QsIGluZGV4KSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEFjY2Vzc29yTm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfVxuXG4gICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkob2JqZWN0KSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm9kZSBleHBlY3RlZCBmb3IgcGFyYW1ldGVyIFwib2JqZWN0XCInKTtcbiAgICB9XG5cbiAgICBpZiAoISgwLCBfaXMuaXNJbmRleE5vZGUpKGluZGV4KSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5kZXhOb2RlIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJpbmRleFwiJyk7XG4gICAgfVxuXG4gICAgdGhpcy5vYmplY3QgPSBvYmplY3QgfHwgbnVsbDtcbiAgICB0aGlzLmluZGV4ID0gaW5kZXg7IC8vIHJlYWRvbmx5IHByb3BlcnR5IG5hbWVcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnbmFtZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5pbmRleCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmluZGV4LmlzT2JqZWN0UHJvcGVydHkoKSA/IHRoaXMuaW5kZXguZ2V0T2JqZWN0UHJvcGVydHkoKSA6ICcnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0aGlzLm9iamVjdC5uYW1lIHx8ICcnO1xuICAgICAgICB9XG4gICAgICB9LmJpbmQodGhpcyksXG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldCgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYXNzaWduIGEgbmV3IG5hbWUsIG5hbWUgaXMgcmVhZC1vbmx5Jyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgQWNjZXNzb3JOb2RlLnByb3RvdHlwZS50eXBlID0gJ0FjY2Vzc29yTm9kZSc7XG4gIEFjY2Vzc29yTm9kZS5wcm90b3R5cGUuaXNBY2Nlc3Nvck5vZGUgPSB0cnVlO1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7XG4gICAgdmFyIGV2YWxPYmplY3QgPSB0aGlzLm9iamVjdC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICB2YXIgZXZhbEluZGV4ID0gdGhpcy5pbmRleC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICBpZiAodGhpcy5pbmRleC5pc09iamVjdFByb3BlcnR5KCkpIHtcbiAgICAgIHZhciBwcm9wID0gdGhpcy5pbmRleC5nZXRPYmplY3RQcm9wZXJ0eSgpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBY2Nlc3Nvck5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKGV2YWxPYmplY3Qoc2NvcGUsIGFyZ3MsIGNvbnRleHQpLCBwcm9wKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsQWNjZXNzb3JOb2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgIHZhciBvYmplY3QgPSBldmFsT2JqZWN0KHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgdmFyIGluZGV4ID0gZXZhbEluZGV4KHNjb3BlLCBhcmdzLCBvYmplY3QpOyAvLyB3ZSBwYXNzIG9iamVjdCBoZXJlIGluc3RlYWQgb2YgY29udGV4dFxuXG4gICAgICAgIHJldHVybiBhY2Nlc3Mob2JqZWN0LCBpbmRleCk7XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2tcbiAgICovXG5cblxuICBBY2Nlc3Nvck5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayh0aGlzLm9iamVjdCwgJ29iamVjdCcsIHRoaXMpO1xuICAgIGNhbGxiYWNrKHRoaXMuaW5kZXgsICdpbmRleCcsIHRoaXMpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEFjY2Vzc29yTm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7QWNjZXNzb3JOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIEFjY2Vzc29yTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIG5ldyBBY2Nlc3Nvck5vZGUodGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMub2JqZWN0LCAnb2JqZWN0JywgdGhpcykpLCB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5pbmRleCwgJ2luZGV4JywgdGhpcykpKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7QWNjZXNzb3JOb2RlfVxuICAgKi9cblxuXG4gIEFjY2Vzc29yTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBBY2Nlc3Nvck5vZGUodGhpcy5vYmplY3QsIHRoaXMuaW5kZXgpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgQWNjZXNzb3JOb2RlLnByb3RvdHlwZS5fdG9TdHJpbmcgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBvYmplY3QgPSB0aGlzLm9iamVjdC50b1N0cmluZyhvcHRpb25zKTtcblxuICAgIGlmIChuZWVkUGFyZW50aGVzaXModGhpcy5vYmplY3QpKSB7XG4gICAgICBvYmplY3QgPSAnKCcgKyBvYmplY3QgKyAnKSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdCArIHRoaXMuaW5kZXgudG9TdHJpbmcob3B0aW9ucyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgQWNjZXNzb3JOb2RlLnByb3RvdHlwZS50b0hUTUwgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBvYmplY3QgPSB0aGlzLm9iamVjdC50b0hUTUwob3B0aW9ucyk7XG5cbiAgICBpZiAobmVlZFBhcmVudGhlc2lzKHRoaXMub2JqZWN0KSkge1xuICAgICAgb2JqZWN0ID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgb2JqZWN0ICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgIH1cblxuICAgIHJldHVybiBvYmplY3QgKyB0aGlzLmluZGV4LnRvSFRNTChvcHRpb25zKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBMYVRlWCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgQWNjZXNzb3JOb2RlLnByb3RvdHlwZS5fdG9UZXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBvYmplY3QgPSB0aGlzLm9iamVjdC50b1RleChvcHRpb25zKTtcblxuICAgIGlmIChuZWVkUGFyZW50aGVzaXModGhpcy5vYmplY3QpKSB7XG4gICAgICBvYmplY3QgPSAnXFxcXGxlZnQoXFwnICsgb2JqZWN0ICsgXFwnXFxcXHJpZ2h0KSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9iamVjdCArIHRoaXMuaW5kZXgudG9UZXgob3B0aW9ucyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgQWNjZXNzb3JOb2RlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ0FjY2Vzc29yTm9kZScsXG4gICAgICBvYmplY3Q6IHRoaXMub2JqZWN0LFxuICAgICAgaW5kZXg6IHRoaXMuaW5kZXhcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYW4gQWNjZXNzb3JOb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJBY2Nlc3Nvck5vZGVcIiwgb2JqZWN0OiAuLi4sIGluZGV4OiAuLi59YCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG1hdGhqcyBpcyBvcHRpb25hbFxuICAgKiBAcmV0dXJucyB7QWNjZXNzb3JOb2RlfVxuICAgKi9cblxuXG4gIEFjY2Vzc29yTm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBBY2Nlc3Nvck5vZGUoanNvbi5vYmplY3QsIGpzb24uaW5kZXgpO1xuICB9O1xuICAvKipcbiAgICogQXJlIHBhcmVudGhlc2lzIG5lZWRlZD9cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBuZWVkUGFyZW50aGVzaXMobm9kZSkge1xuICAgIC8vIFRPRE86IG1heWJlIG1ha2UgYSBtZXRob2Qgb24gdGhlIG5vZGVzIHdoaWNoIHRlbGxzIHdoZXRoZXIgdGhleSBuZWVkIHBhcmVudGhlc2lzP1xuICAgIHJldHVybiAhKCgwLCBfaXMuaXNBY2Nlc3Nvck5vZGUpKG5vZGUpIHx8ICgwLCBfaXMuaXNBcnJheU5vZGUpKG5vZGUpIHx8ICgwLCBfaXMuaXNDb25zdGFudE5vZGUpKG5vZGUpIHx8ICgwLCBfaXMuaXNGdW5jdGlvbk5vZGUpKG5vZGUpIHx8ICgwLCBfaXMuaXNPYmplY3ROb2RlKShub2RlKSB8fCAoMCwgX2lzLmlzUGFyZW50aGVzaXNOb2RlKShub2RlKSB8fCAoMCwgX2lzLmlzU3ltYm9sTm9kZSkobm9kZSkpO1xuICB9XG5cbiAgcmV0dXJuIEFjY2Vzc29yTm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWNjZXNzb3JOb2RlID0gY3JlYXRlQWNjZXNzb3JOb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBcnJheU5vZGUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdBcnJheU5vZGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnTm9kZSddO1xudmFyIGNyZWF0ZUFycmF5Tm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBOb2RlID0gX3JlZi5Ob2RlO1xuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3IgQXJyYXlOb2RlXG4gICAqIEBleHRlbmRzIHtOb2RlfVxuICAgKiBIb2xkcyBhbiAxLWRpbWVuc2lvbmFsIGFycmF5IHdpdGggaXRlbXNcbiAgICogQHBhcmFtIHtOb2RlW119IFtpdGVtc10gICAxIGRpbWVuc2lvbmFsIGFycmF5IHdpdGggaXRlbXNcbiAgICovXG4gIGZ1bmN0aW9uIEFycmF5Tm9kZShpdGVtcykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBBcnJheU5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIHRoaXMuaXRlbXMgPSBpdGVtcyB8fCBbXTsgLy8gdmFsaWRhdGUgaW5wdXRcblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh0aGlzLml0ZW1zKSB8fCAhdGhpcy5pdGVtcy5ldmVyeShfaXMuaXNOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgY29udGFpbmluZyBOb2RlcyBleHBlY3RlZCcpO1xuICAgIH0gLy8gVE9ETzogZGVwcmVjYXRlZCBzaW5jZSB2MywgcmVtb3ZlIHNvbWUgZGF5XG5cblxuICAgIHZhciBkZXByZWNhdGVkID0gZnVuY3Rpb24gZGVwcmVjYXRlZCgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUHJvcGVydHkgYEFycmF5Tm9kZS5ub2Rlc2AgaXMgZGVwcmVjYXRlZCwgdXNlIGBBcnJheU5vZGUuaXRlbXNgIGluc3RlYWQnKTtcbiAgICB9O1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdub2RlcycsIHtcbiAgICAgIGdldDogZGVwcmVjYXRlZCxcbiAgICAgIHNldDogZGVwcmVjYXRlZFxuICAgIH0pO1xuICB9XG5cbiAgQXJyYXlOb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7XG4gIEFycmF5Tm9kZS5wcm90b3R5cGUudHlwZSA9ICdBcnJheU5vZGUnO1xuICBBcnJheU5vZGUucHJvdG90eXBlLmlzQXJyYXlOb2RlID0gdHJ1ZTtcbiAgLyoqXG4gICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLlxuICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuXG4gICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9sc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKilcbiAgICovXG5cbiAgQXJyYXlOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHZhciBldmFsSXRlbXMgPSAoMCwgX2FycmF5Lm1hcCkodGhpcy5pdGVtcywgZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcbiAgICB9KTtcbiAgICB2YXIgYXNNYXRyaXggPSBtYXRoLmNvbmZpZy5tYXRyaXggIT09ICdBcnJheSc7XG5cbiAgICBpZiAoYXNNYXRyaXgpIHtcbiAgICAgIHZhciBtYXRyaXggPSBtYXRoLm1hdHJpeDtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsQXJyYXlOb2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBtYXRyaXgoKDAsIF9hcnJheS5tYXApKGV2YWxJdGVtcywgZnVuY3Rpb24gKGV2YWxJdGVtKSB7XG4gICAgICAgICAgcmV0dXJuIGV2YWxJdGVtKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgfSkpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxBcnJheU5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfYXJyYXkubWFwKShldmFsSXRlbXMsIGZ1bmN0aW9uIChldmFsSXRlbSkge1xuICAgICAgICAgIHJldHVybiBldmFsSXRlbShzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgQXJyYXlOb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgbm9kZSA9IHRoaXMuaXRlbXNbaV07XG4gICAgICBjYWxsYmFjayhub2RlLCAnaXRlbXNbJyArIGkgKyAnXScsIHRoaXMpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBBcnJheU5vZGUgaGF2aW5nIGl0J3MgY2hpbGRzIGJlIHRoZSByZXN1bHRzIG9mIGNhbGxpbmdcbiAgICogdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBjaGlsZHMgb2YgdGhlIG9yaWdpbmFsIG5vZGUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKTogTm9kZX0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge0FycmF5Tm9kZX0gUmV0dXJucyBhIHRyYW5zZm9ybWVkIGNvcHkgb2YgdGhlIG5vZGVcbiAgICovXG5cblxuICBBcnJheU5vZGUucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciBpdGVtcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpdGVtc1tpXSA9IHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLml0ZW1zW2ldLCAnaXRlbXNbJyArIGkgKyAnXScsIHRoaXMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEFycmF5Tm9kZShpdGVtcyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge0FycmF5Tm9kZX1cbiAgICovXG5cblxuICBBcnJheU5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgQXJyYXlOb2RlKHRoaXMuaXRlbXMuc2xpY2UoMCkpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKiBAb3ZlcnJpZGVcbiAgICovXG5cblxuICBBcnJheU5vZGUucHJvdG90eXBlLl90b1N0cmluZyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGl0ZW1zID0gdGhpcy5pdGVtcy5tYXAoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlLnRvU3RyaW5nKG9wdGlvbnMpO1xuICAgIH0pO1xuICAgIHJldHVybiAnWycgKyBpdGVtcy5qb2luKCcsICcpICsgJ10nO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIEFycmF5Tm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdBcnJheU5vZGUnLFxuICAgICAgaXRlbXM6IHRoaXMuaXRlbXNcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYW4gQXJyYXlOb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJBcnJheU5vZGVcIiwgaXRlbXM6IFsuLi5dfWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0FycmF5Tm9kZX1cbiAgICovXG5cblxuICBBcnJheU5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgQXJyYXlOb2RlKGpzb24uaXRlbXMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgQXJyYXlOb2RlLnByb3RvdHlwZS50b0hUTUwgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBpdGVtcyA9IHRoaXMuaXRlbXMubWFwKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICByZXR1cm4gbm9kZS50b0hUTUwob3B0aW9ucyk7XG4gICAgfSk7XG4gICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1zcXVhcmUtcGFyZW50aGVzaXNcIj5bPC9zcGFuPicgKyBpdGVtcy5qb2luKCc8c3BhbiBjbGFzcz1cIm1hdGgtc2VwYXJhdG9yXCI+LDwvc3Bhbj4nKSArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1zcXVhcmUtcGFyZW50aGVzaXNcIj5dPC9zcGFuPic7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBBcnJheU5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHMgPSAnXFxcXGJlZ2lue2JtYXRyaXh9JztcbiAgICB0aGlzLml0ZW1zLmZvckVhY2goZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIGlmIChub2RlLml0ZW1zKSB7XG4gICAgICAgIHMgKz0gbm9kZS5pdGVtcy5tYXAoZnVuY3Rpb24gKGNoaWxkTm9kZSkge1xuICAgICAgICAgIHJldHVybiBjaGlsZE5vZGUudG9UZXgob3B0aW9ucyk7XG4gICAgICAgIH0pLmpvaW4oJyYnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHMgKz0gbm9kZS50b1RleChvcHRpb25zKTtcbiAgICAgIH0gLy8gbmV3IGxpbmVcblxuXG4gICAgICBzICs9ICdcXFxcXFxcXCc7XG4gICAgfSk7XG4gICAgcyArPSAnXFxcXGVuZHtibWF0cml4fSc7XG4gICAgcmV0dXJuIHM7XG4gIH07XG5cbiAgcmV0dXJuIEFycmF5Tm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQXJyYXlOb2RlID0gY3JlYXRlQXJyYXlOb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBc3NpZ25tZW50Tm9kZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9jdXN0b21zID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2N1c3RvbXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FjY2VzcyA9IHJlcXVpcmUoXCIuL3V0aWxzL2FjY2Vzc1wiKTtcblxudmFyIF9hc3NpZ24gPSByZXF1aXJlKFwiLi91dGlscy9hc3NpZ25cIik7XG5cbnZhciBfb3BlcmF0b3JzID0gcmVxdWlyZShcIi4uL29wZXJhdG9yc1wiKTtcblxudmFyIG5hbWUgPSAnQXNzaWdubWVudE5vZGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnc3Vic2V0JywgJz9tYXRyaXgnLCAvLyBGSVhNRTogc2hvdWxkIG5vdCBiZSBuZWVkZWQgYXQgYWxsLCBzaG91bGQgYmUgaGFuZGxlZCBieSBzdWJzZXRcbidOb2RlJ107XG52YXIgY3JlYXRlQXNzaWdubWVudE5vZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgc3Vic2V0ID0gX3JlZi5zdWJzZXQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIE5vZGUgPSBfcmVmLk5vZGU7XG4gIHZhciBhY2Nlc3MgPSAoMCwgX2FjY2Vzcy5hY2Nlc3NGYWN0b3J5KSh7XG4gICAgc3Vic2V0OiBzdWJzZXRcbiAgfSk7XG4gIHZhciBhc3NpZ24gPSAoMCwgX2Fzc2lnbi5hc3NpZ25GYWN0b3J5KSh7XG4gICAgc3Vic2V0OiBzdWJzZXQsXG4gICAgbWF0cml4OiBtYXRyaXhcbiAgfSk7XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3IgQXNzaWdubWVudE5vZGVcbiAgICogQGV4dGVuZHMge05vZGV9XG4gICAqXG4gICAqIERlZmluZSBhIHN5bWJvbCwgbGlrZSBgYT0zLjJgLCB1cGRhdGUgYSBwcm9wZXJ0eSBsaWtlIGBhLmI9My4yYCwgb3JcbiAgICogcmVwbGFjZSBhIHN1YnNldCBvZiBhIG1hdHJpeCBsaWtlIGBBWzIsMl09NDJgLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBuZXcgQXNzaWdubWVudE5vZGUoc3ltYm9sLCB2YWx1ZSlcbiAgICogICAgIG5ldyBBc3NpZ25tZW50Tm9kZShvYmplY3QsIGluZGV4LCB2YWx1ZSlcbiAgICpcbiAgICogVXNhZ2U6XG4gICAqXG4gICAqICAgIG5ldyBBc3NpZ25tZW50Tm9kZShuZXcgU3ltYm9sTm9kZSgnYScpLCBuZXcgQ29uc3RhbnROb2RlKDIpKSAgICAgICAgICAgICAgICAgICAgICAgLy8gYT0yXG4gICAqICAgIG5ldyBBc3NpZ25tZW50Tm9kZShuZXcgU3ltYm9sTm9kZSgnYScpLCBuZXcgSW5kZXhOb2RlKCdiJyksIG5ldyBDb25zdGFudE5vZGUoMikpICAgLy8gYS5iPTJcbiAgICogICAgbmV3IEFzc2lnbm1lbnROb2RlKG5ldyBTeW1ib2xOb2RlKCdhJyksIG5ldyBJbmRleE5vZGUoMSwgMiksIG5ldyBDb25zdGFudE5vZGUoMykpICAvLyBhWzEsMl09M1xuICAgKlxuICAgKiBAcGFyYW0ge1N5bWJvbE5vZGUgfCBBY2Nlc3Nvck5vZGV9IG9iamVjdCAgT2JqZWN0IG9uIHdoaWNoIHRvIGFzc2lnbiBhIHZhbHVlXG4gICAqIEBwYXJhbSB7SW5kZXhOb2RlfSBbaW5kZXg9bnVsbF0gICAgICAgICAgICBJbmRleCwgcHJvcGVydHkgbmFtZSBvciBtYXRyaXhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LiBPcHRpb25hbC4gSWYgbm90IHByb3ZpZGVkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgYG9iamVjdGAgaXMgYSBTeW1ib2xOb2RlLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHByb3BlcnR5IGlzIGFzc2lnbmVkIHRvIHRoZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsIHNjb3BlLlxuICAgKiBAcGFyYW0ge05vZGV9IHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgVGhlIHZhbHVlIHRvIGJlIGFzc2lnbmVkXG4gICAqL1xuXG4gIGZ1bmN0aW9uIEFzc2lnbm1lbnROb2RlKG9iamVjdCwgaW5kZXgsIHZhbHVlKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEFzc2lnbm1lbnROb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICB0aGlzLm9iamVjdCA9IG9iamVjdDtcbiAgICB0aGlzLmluZGV4ID0gdmFsdWUgPyBpbmRleCA6IG51bGw7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlIHx8IGluZGV4OyAvLyB2YWxpZGF0ZSBpbnB1dFxuXG4gICAgaWYgKCEoMCwgX2lzLmlzU3ltYm9sTm9kZSkob2JqZWN0KSAmJiAhKDAsIF9pcy5pc0FjY2Vzc29yTm9kZSkob2JqZWN0KSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignU3ltYm9sTm9kZSBvciBBY2Nlc3Nvck5vZGUgZXhwZWN0ZWQgYXMgXCJvYmplY3RcIicpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2lzLmlzU3ltYm9sTm9kZSkob2JqZWN0KSAmJiBvYmplY3QubmFtZSA9PT0gJ2VuZCcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGFzc2lnbiB0byBzeW1ib2wgXCJlbmRcIicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmluZGV4ICYmICEoMCwgX2lzLmlzSW5kZXhOb2RlKSh0aGlzLmluZGV4KSkge1xuICAgICAgLy8gaW5kZXggaXMgb3B0aW9uYWxcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luZGV4Tm9kZSBleHBlY3RlZCBhcyBcImluZGV4XCInKTtcbiAgICB9XG5cbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKSh0aGlzLnZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm9kZSBleHBlY3RlZCBhcyBcInZhbHVlXCInKTtcbiAgICB9IC8vIHJlYWRvbmx5IHByb3BlcnR5IG5hbWVcblxuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICduYW1lJywge1xuICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmluZGV4KSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXguaXNPYmplY3RQcm9wZXJ0eSgpID8gdGhpcy5pbmRleC5nZXRPYmplY3RQcm9wZXJ0eSgpIDogJyc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMub2JqZWN0Lm5hbWUgfHwgJyc7XG4gICAgICAgIH1cbiAgICAgIH0uYmluZCh0aGlzKSxcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0KCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhc3NpZ24gYSBuZXcgbmFtZSwgbmFtZSBpcyByZWFkLW9ubHknKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIEFzc2lnbm1lbnROb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7XG4gIEFzc2lnbm1lbnROb2RlLnByb3RvdHlwZS50eXBlID0gJ0Fzc2lnbm1lbnROb2RlJztcbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLmlzQXNzaWdubWVudE5vZGUgPSB0cnVlO1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuICBBc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICB2YXIgZXZhbE9iamVjdCA9IHRoaXMub2JqZWN0Ll9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgIHZhciBldmFsSW5kZXggPSB0aGlzLmluZGV4ID8gdGhpcy5pbmRleC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcykgOiBudWxsO1xuXG4gICAgdmFyIGV2YWxWYWx1ZSA9IHRoaXMudmFsdWUuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgdmFyIG5hbWUgPSB0aGlzLm9iamVjdC5uYW1lO1xuXG4gICAgaWYgKCF0aGlzLmluZGV4KSB7XG4gICAgICAvLyBhcHBseSBhIHZhcmlhYmxlIHRvIHRoZSBzY29wZSwgZm9yIGV4YW1wbGUgYGE9MmBcbiAgICAgIGlmICghKDAsIF9pcy5pc1N5bWJvbE5vZGUpKHRoaXMub2JqZWN0KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTeW1ib2xOb2RlIGV4cGVjdGVkIGFzIG9iamVjdCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEFzc2lnbm1lbnROb2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiAoMCwgX2N1c3RvbXMuc2V0U2FmZVByb3BlcnR5KShzY29wZSwgbmFtZSwgZXZhbFZhbHVlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSk7XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAodGhpcy5pbmRleC5pc09iamVjdFByb3BlcnR5KCkpIHtcbiAgICAgIC8vIGFwcGx5IGFuIG9iamVjdCBwcm9wZXJ0eSBmb3IgZXhhbXBsZSBgYS5iPTJgXG4gICAgICB2YXIgcHJvcCA9IHRoaXMuaW5kZXguZ2V0T2JqZWN0UHJvcGVydHkoKTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsQXNzaWdubWVudE5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgdmFyIG9iamVjdCA9IGV2YWxPYmplY3Qoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICB2YXIgdmFsdWUgPSBldmFsVmFsdWUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICByZXR1cm4gKDAsIF9jdXN0b21zLnNldFNhZmVQcm9wZXJ0eSkob2JqZWN0LCBwcm9wLCB2YWx1ZSk7XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc1N5bWJvbE5vZGUpKHRoaXMub2JqZWN0KSkge1xuICAgICAgLy8gdXBkYXRlIGEgbWF0cml4IHN1YnNldCwgZm9yIGV4YW1wbGUgYGFbMl09M2BcbiAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsQXNzaWdubWVudE5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgdmFyIGNoaWxkT2JqZWN0ID0gZXZhbE9iamVjdChzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIHZhciB2YWx1ZSA9IGV2YWxWYWx1ZShzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIHZhciBpbmRleCA9IGV2YWxJbmRleChzY29wZSwgYXJncywgY2hpbGRPYmplY3QpOyAvLyBJbXBvcnRhbnQ6ICB3ZSBwYXNzIGNoaWxkT2JqZWN0IGluc3RlYWQgb2YgY29udGV4dFxuXG4gICAgICAgICgwLCBfY3VzdG9tcy5zZXRTYWZlUHJvcGVydHkpKHNjb3BlLCBuYW1lLCBhc3NpZ24oY2hpbGRPYmplY3QsIGluZGV4LCB2YWx1ZSkpO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpc0FjY2Vzc29yTm9kZShub2RlLm9iamVjdCkgPT09IHRydWVcbiAgICAgIC8vIHVwZGF0ZSBhIG1hdHJpeCBzdWJzZXQsIGZvciBleGFtcGxlIGBhLmJbMl09M2BcbiAgICAgIC8vIHdlIHdpbGwgbm90IHVzZSB0aGUgY29tcGlsZSBmdW5jdGlvbiBvZiB0aGUgQWNjZXNzb3JOb2RlLCBidXQgY29tcGlsZSBpdFxuICAgICAgLy8gb3Vyc2VsdmVzIGhlcmUgYXMgd2UgbmVlZCB0aGUgcGFyZW50IG9iamVjdCBvZiB0aGUgQWNjZXNzb3JOb2RlOlxuICAgICAgLy8gd2VlIG5lZWQgdG8gYXBwbHkgdGhlIHVwZGF0ZWQgb2JqZWN0IHRvIHBhcmVudCBvYmplY3RcbiAgICAgIHZhciBldmFsUGFyZW50T2JqZWN0ID0gdGhpcy5vYmplY3Qub2JqZWN0Ll9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgICAgaWYgKHRoaXMub2JqZWN0LmluZGV4LmlzT2JqZWN0UHJvcGVydHkoKSkge1xuICAgICAgICB2YXIgcGFyZW50UHJvcCA9IHRoaXMub2JqZWN0LmluZGV4LmdldE9iamVjdFByb3BlcnR5KCk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsQXNzaWdubWVudE5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICB2YXIgcGFyZW50ID0gZXZhbFBhcmVudE9iamVjdChzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgICAgdmFyIGNoaWxkT2JqZWN0ID0gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkocGFyZW50LCBwYXJlbnRQcm9wKTtcbiAgICAgICAgICB2YXIgaW5kZXggPSBldmFsSW5kZXgoc2NvcGUsIGFyZ3MsIGNoaWxkT2JqZWN0KTsgLy8gSW1wb3J0YW50OiB3ZSBwYXNzIGNoaWxkT2JqZWN0IGluc3RlYWQgb2YgY29udGV4dFxuXG4gICAgICAgICAgdmFyIHZhbHVlID0gZXZhbFZhbHVlKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgICAoMCwgX2N1c3RvbXMuc2V0U2FmZVByb3BlcnR5KShwYXJlbnQsIHBhcmVudFByb3AsIGFzc2lnbihjaGlsZE9iamVjdCwgaW5kZXgsIHZhbHVlKSk7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gaWYgc29tZSBwYXJhbWV0ZXJzIHVzZSB0aGUgJ2VuZCcgcGFyYW1ldGVyLCB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSB0aGUgc2l6ZVxuICAgICAgICB2YXIgZXZhbFBhcmVudEluZGV4ID0gdGhpcy5vYmplY3QuaW5kZXguX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsQXNzaWdubWVudE5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgICB2YXIgcGFyZW50ID0gZXZhbFBhcmVudE9iamVjdChzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgICAgdmFyIHBhcmVudEluZGV4ID0gZXZhbFBhcmVudEluZGV4KHNjb3BlLCBhcmdzLCBwYXJlbnQpOyAvLyBJbXBvcnRhbnQ6IHdlIHBhc3MgcGFyZW50IGluc3RlYWQgb2YgY29udGV4dFxuXG4gICAgICAgICAgdmFyIGNoaWxkT2JqZWN0ID0gYWNjZXNzKHBhcmVudCwgcGFyZW50SW5kZXgpO1xuICAgICAgICAgIHZhciBpbmRleCA9IGV2YWxJbmRleChzY29wZSwgYXJncywgY2hpbGRPYmplY3QpOyAvLyBJbXBvcnRhbnQ6ICB3ZSBwYXNzIGNoaWxkT2JqZWN0IGluc3RlYWQgb2YgY29udGV4dFxuXG4gICAgICAgICAgdmFyIHZhbHVlID0gZXZhbFZhbHVlKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgICBhc3NpZ24ocGFyZW50LCBwYXJlbnRJbmRleCwgYXNzaWduKGNoaWxkT2JqZWN0LCBpbmRleCwgdmFsdWUpKTtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIEFzc2lnbm1lbnROb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2sodGhpcy5vYmplY3QsICdvYmplY3QnLCB0aGlzKTtcblxuICAgIGlmICh0aGlzLmluZGV4KSB7XG4gICAgICBjYWxsYmFjayh0aGlzLmluZGV4LCAnaW5kZXgnLCB0aGlzKTtcbiAgICB9XG5cbiAgICBjYWxsYmFjayh0aGlzLnZhbHVlLCAndmFsdWUnLCB0aGlzKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBBc3NpZ25tZW50Tm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7QXNzaWdubWVudE5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlXG4gICAqL1xuXG5cbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciBvYmplY3QgPSB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5vYmplY3QsICdvYmplY3QnLCB0aGlzKSk7XG5cbiAgICB2YXIgaW5kZXggPSB0aGlzLmluZGV4ID8gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuaW5kZXgsICdpbmRleCcsIHRoaXMpKSA6IG51bGw7XG5cbiAgICB2YXIgdmFsdWUgPSB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy52YWx1ZSwgJ3ZhbHVlJywgdGhpcykpO1xuXG4gICAgcmV0dXJuIG5ldyBBc3NpZ25tZW50Tm9kZShvYmplY3QsIGluZGV4LCB2YWx1ZSk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge0Fzc2lnbm1lbnROb2RlfVxuICAgKi9cblxuXG4gIEFzc2lnbm1lbnROb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IEFzc2lnbm1lbnROb2RlKHRoaXMub2JqZWN0LCB0aGlzLmluZGV4LCB0aGlzLnZhbHVlKTtcbiAgfTtcbiAgLypcbiAgICogSXMgcGFyZW50aGVzaXMgbmVlZGVkP1xuICAgKiBAcGFyYW0ge25vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJlbnRoZXNpcz0na2VlcCddXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gbmVlZFBhcmVudGhlc2lzKG5vZGUsIHBhcmVudGhlc2lzKSB7XG4gICAgaWYgKCFwYXJlbnRoZXNpcykge1xuICAgICAgcGFyZW50aGVzaXMgPSAna2VlcCc7XG4gICAgfVxuXG4gICAgdmFyIHByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShub2RlLCBwYXJlbnRoZXNpcyk7XG4gICAgdmFyIGV4cHJQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkobm9kZS52YWx1ZSwgcGFyZW50aGVzaXMpO1xuICAgIHJldHVybiBwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgZXhwclByZWNlZGVuY2UgIT09IG51bGwgJiYgZXhwclByZWNlZGVuY2UgPD0gcHJlY2VkZW5jZTtcbiAgfVxuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLl90b1N0cmluZyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIG9iamVjdCA9IHRoaXMub2JqZWN0LnRvU3RyaW5nKG9wdGlvbnMpO1xuICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXggPyB0aGlzLmluZGV4LnRvU3RyaW5nKG9wdGlvbnMpIDogJyc7XG4gICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZS50b1N0cmluZyhvcHRpb25zKTtcblxuICAgIGlmIChuZWVkUGFyZW50aGVzaXModGhpcywgb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzKSkge1xuICAgICAgdmFsdWUgPSAnKCcgKyB2YWx1ZSArICcpJztcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqZWN0ICsgaW5kZXggKyAnID0gJyArIHZhbHVlO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIEFzc2lnbm1lbnROb2RlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ0Fzc2lnbm1lbnROb2RlJyxcbiAgICAgIG9iamVjdDogdGhpcy5vYmplY3QsXG4gICAgICBpbmRleDogdGhpcy5pbmRleCxcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGFuIEFzc2lnbm1lbnROb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJBc3NpZ25tZW50Tm9kZVwiLCBvYmplY3Q6IC4uLiwgaW5kZXg6IC4uLiwgdmFsdWU6IC4uLn1gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtBc3NpZ25tZW50Tm9kZX1cbiAgICovXG5cblxuICBBc3NpZ25tZW50Tm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBBc3NpZ25tZW50Tm9kZShqc29uLm9iamVjdCwganNvbi5pbmRleCwganNvbi52YWx1ZSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIG9iamVjdCA9IHRoaXMub2JqZWN0LnRvSFRNTChvcHRpb25zKTtcbiAgICB2YXIgaW5kZXggPSB0aGlzLmluZGV4ID8gdGhpcy5pbmRleC50b0hUTUwob3B0aW9ucykgOiAnJztcbiAgICB2YXIgdmFsdWUgPSB0aGlzLnZhbHVlLnRvSFRNTChvcHRpb25zKTtcblxuICAgIGlmIChuZWVkUGFyZW50aGVzaXModGhpcywgb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzKSkge1xuICAgICAgdmFsdWUgPSAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmFudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyB2YWx1ZSArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyYW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPik8L3NwYW4+JztcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqZWN0ICsgaW5kZXggKyAnPHNwYW4gY2xhc3M9XCJtYXRoLW9wZXJhdG9yIG1hdGgtYXNzaWdubWVudC1vcGVyYXRvciBtYXRoLXZhcmlhYmxlLWFzc2lnbm1lbnQtb3BlcmF0b3IgbWF0aC1iaW5hcnktb3BlcmF0b3JcIj49PC9zcGFuPicgKyB2YWx1ZTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBMYVRlWCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgQXNzaWdubWVudE5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIG9iamVjdCA9IHRoaXMub2JqZWN0LnRvVGV4KG9wdGlvbnMpO1xuICAgIHZhciBpbmRleCA9IHRoaXMuaW5kZXggPyB0aGlzLmluZGV4LnRvVGV4KG9wdGlvbnMpIDogJyc7XG4gICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZS50b1RleChvcHRpb25zKTtcblxuICAgIGlmIChuZWVkUGFyZW50aGVzaXModGhpcywgb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzKSkge1xuICAgICAgdmFsdWUgPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdCh2YWx1ZSwgXCJcXFxccmlnaHQpXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBvYmplY3QgKyBpbmRleCArICc6PScgKyB2YWx1ZTtcbiAgfTtcblxuICByZXR1cm4gQXNzaWdubWVudE5vZGU7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWUsXG4gIGlzTm9kZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFzc2lnbm1lbnROb2RlID0gY3JlYXRlQXNzaWdubWVudE5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJsb2NrTm9kZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ0Jsb2NrTm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydSZXN1bHRTZXQnLCAnTm9kZSddO1xudmFyIGNyZWF0ZUJsb2NrTm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBSZXN1bHRTZXQgPSBfcmVmLlJlc3VsdFNldCxcbiAgICAgIE5vZGUgPSBfcmVmLk5vZGU7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBCbG9ja05vZGVcbiAgICogQGV4dGVuZHMge05vZGV9XG4gICAqIEhvbGRzIGEgc2V0IHdpdGggYmxvY2tzXG4gICAqIEBwYXJhbSB7QXJyYXkuPHtub2RlOiBOb2RlfSB8IHtub2RlOiBOb2RlLCB2aXNpYmxlOiBib29sZWFufT59IGJsb2Nrc1xuICAgKiAgICAgICAgICAgIEFuIGFycmF5IHdpdGggYmxvY2tzLCB3aGVyZSBhIGJsb2NrIGlzIGNvbnN0cnVjdGVkIGFzIGFuIE9iamVjdFxuICAgKiAgICAgICAgICAgIHdpdGggcHJvcGVydGllcyBibG9jaywgd2hpY2ggaXMgYSBOb2RlLCBhbmQgdmlzaWJsZSwgd2hpY2ggaXNcbiAgICogICAgICAgICAgICBhIGJvb2xlYW4uIFRoZSBwcm9wZXJ0eSB2aXNpYmxlIGlzIG9wdGlvbmFsIGFuZCBpcyB0cnVlIGJ5IGRlZmF1bHRcbiAgICovXG4gIGZ1bmN0aW9uIEJsb2NrTm9kZShibG9ja3MpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQmxvY2tOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9IC8vIHZhbGlkYXRlIGlucHV0LCBjb3B5IGJsb2Nrc1xuXG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYmxvY2tzKSkgdGhyb3cgbmV3IEVycm9yKCdBcnJheSBleHBlY3RlZCcpO1xuICAgIHRoaXMuYmxvY2tzID0gYmxvY2tzLm1hcChmdW5jdGlvbiAoYmxvY2spIHtcbiAgICAgIHZhciBub2RlID0gYmxvY2sgJiYgYmxvY2subm9kZTtcbiAgICAgIHZhciB2aXNpYmxlID0gYmxvY2sgJiYgYmxvY2sudmlzaWJsZSAhPT0gdW5kZWZpbmVkID8gYmxvY2sudmlzaWJsZSA6IHRydWU7XG4gICAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShub2RlKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvcGVydHkgXCJub2RlXCIgbXVzdCBiZSBhIE5vZGUnKTtcbiAgICAgIGlmICh0eXBlb2YgdmlzaWJsZSAhPT0gJ2Jvb2xlYW4nKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdQcm9wZXJ0eSBcInZpc2libGVcIiBtdXN0IGJlIGEgYm9vbGVhbicpO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbm9kZTogbm9kZSxcbiAgICAgICAgdmlzaWJsZTogdmlzaWJsZVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIEJsb2NrTm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBCbG9ja05vZGUucHJvdG90eXBlLnR5cGUgPSAnQmxvY2tOb2RlJztcbiAgQmxvY2tOb2RlLnByb3RvdHlwZS5pc0Jsb2NrTm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIEJsb2NrTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICB2YXIgZXZhbEJsb2NrcyA9ICgwLCBfYXJyYXkubWFwKSh0aGlzLmJsb2NrcywgZnVuY3Rpb24gKGJsb2NrKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBldmFsdWF0ZTogYmxvY2subm9kZS5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyksXG4gICAgICAgIHZpc2libGU6IGJsb2NrLnZpc2libGVcbiAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxCbG9ja05vZGVzKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgICAgKDAsIF9hcnJheS5mb3JFYWNoKShldmFsQmxvY2tzLCBmdW5jdGlvbiBldmFsQmxvY2tOb2RlKGJsb2NrKSB7XG4gICAgICAgIHZhciByZXN1bHQgPSBibG9jay5ldmFsdWF0ZShzY29wZSwgYXJncywgY29udGV4dCk7XG5cbiAgICAgICAgaWYgKGJsb2NrLnZpc2libGUpIHtcbiAgICAgICAgICByZXN1bHRzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IFJlc3VsdFNldChyZXN1bHRzKTtcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBibG9ja3Mgb2YgdGhpcyBub2RlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2tcbiAgICovXG5cblxuICBCbG9ja05vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYmxvY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjYWxsYmFjayh0aGlzLmJsb2Nrc1tpXS5ub2RlLCAnYmxvY2tzWycgKyBpICsgJ10ubm9kZScsIHRoaXMpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBCbG9ja05vZGUgaGF2aW5nIGl0J3MgY2hpbGRzIGJlIHRoZSByZXN1bHRzIG9mIGNhbGxpbmdcbiAgICogdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBjaGlsZHMgb2YgdGhlIG9yaWdpbmFsIG5vZGUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKTogTm9kZX0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge0Jsb2NrTm9kZX0gUmV0dXJucyBhIHRyYW5zZm9ybWVkIGNvcHkgb2YgdGhlIG5vZGVcbiAgICovXG5cblxuICBCbG9ja05vZGUucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciBibG9ja3MgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5ibG9ja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBibG9jayA9IHRoaXMuYmxvY2tzW2ldO1xuXG4gICAgICB2YXIgbm9kZSA9IHRoaXMuX2lmTm9kZShjYWxsYmFjayhibG9jay5ub2RlLCAnYmxvY2tzWycgKyBpICsgJ10ubm9kZScsIHRoaXMpKTtcblxuICAgICAgYmxvY2tzW2ldID0ge1xuICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICB2aXNpYmxlOiBibG9jay52aXNpYmxlXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQmxvY2tOb2RlKGJsb2Nrcyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge0Jsb2NrTm9kZX1cbiAgICovXG5cblxuICBCbG9ja05vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBibG9ja3MgPSB0aGlzLmJsb2Nrcy5tYXAoZnVuY3Rpb24gKGJsb2NrKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBub2RlOiBibG9jay5ub2RlLFxuICAgICAgICB2aXNpYmxlOiBibG9jay52aXNpYmxlXG4gICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiBuZXcgQmxvY2tOb2RlKGJsb2Nrcyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqIEBvdmVycmlkZVxuICAgKi9cblxuXG4gIEJsb2NrTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5ibG9ja3MubWFwKGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgcmV0dXJuIHBhcmFtLm5vZGUudG9TdHJpbmcob3B0aW9ucykgKyAocGFyYW0udmlzaWJsZSA/ICcnIDogJzsnKTtcbiAgICB9KS5qb2luKCdcXG4nKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBCbG9ja05vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnQmxvY2tOb2RlJyxcbiAgICAgIGJsb2NrczogdGhpcy5ibG9ja3NcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYW4gQmxvY2tOb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJCbG9ja05vZGVcIiwgYmxvY2tzOiBbe25vZGU6IC4uLiwgdmlzaWJsZTogZmFsc2V9LCAuLi5dfWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0Jsb2NrTm9kZX1cbiAgICovXG5cblxuICBCbG9ja05vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgQmxvY2tOb2RlKGpzb24uYmxvY2tzKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBIVE1MIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqIEBvdmVycmlkZVxuICAgKi9cblxuXG4gIEJsb2NrTm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gdGhpcy5ibG9ja3MubWFwKGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgcmV0dXJuIHBhcmFtLm5vZGUudG9IVE1MKG9wdGlvbnMpICsgKHBhcmFtLnZpc2libGUgPyAnJyA6ICc8c3BhbiBjbGFzcz1cIm1hdGgtc2VwYXJhdG9yXCI+Ozwvc3Bhbj4nKTtcbiAgICB9KS5qb2luKCc8c3BhbiBjbGFzcz1cIm1hdGgtc2VwYXJhdG9yXCI+PGJyIC8+PC9zcGFuPicpO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgQmxvY2tOb2RlLnByb3RvdHlwZS5fdG9UZXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLmJsb2Nrcy5tYXAoZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICByZXR1cm4gcGFyYW0ubm9kZS50b1RleChvcHRpb25zKSArIChwYXJhbS52aXNpYmxlID8gJycgOiAnOycpO1xuICAgIH0pLmpvaW4oJ1xcXFw7XFxcXDtcXG4nKTtcbiAgfTtcblxuICByZXR1cm4gQmxvY2tOb2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVCbG9ja05vZGUgPSBjcmVhdGVCbG9ja05vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbmRpdGlvbmFsTm9kZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb3BlcmF0b3JzID0gcmVxdWlyZShcIi4uL29wZXJhdG9yc1wiKTtcblxudmFyIG5hbWUgPSAnQ29uZGl0aW9uYWxOb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ05vZGUnXTtcbnZhciBjcmVhdGVDb25kaXRpb25hbE5vZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgTm9kZSA9IF9yZWYuTm9kZTtcblxuICAvKipcbiAgICogQSBsYXp5IGV2YWx1YXRpbmcgY29uZGl0aW9uYWwgb3BlcmF0b3I6ICdjb25kaXRpb24gPyB0cnVlRXhwciA6IGZhbHNlRXhwcidcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBjb25kaXRpb24gICBDb25kaXRpb24sIG11c3QgcmVzdWx0IGluIGEgYm9vbGVhblxuICAgKiBAcGFyYW0ge05vZGV9IHRydWVFeHByICAgIEV4cHJlc3Npb24gZXZhbHVhdGVkIHdoZW4gY29uZGl0aW9uIGlzIHRydWVcbiAgICogQHBhcmFtIHtOb2RlfSBmYWxzZUV4cHIgICBFeHByZXNzaW9uIGV2YWx1YXRlZCB3aGVuIGNvbmRpdGlvbiBpcyB0cnVlXG4gICAqXG4gICAqIEBjb25zdHJ1Y3RvciBDb25kaXRpb25hbE5vZGVcbiAgICogQGV4dGVuZHMge05vZGV9XG4gICAqL1xuICBmdW5jdGlvbiBDb25kaXRpb25hbE5vZGUoY29uZGl0aW9uLCB0cnVlRXhwciwgZmFsc2VFeHByKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIENvbmRpdGlvbmFsTm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfVxuXG4gICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkoY29uZGl0aW9uKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignUGFyYW1ldGVyIGNvbmRpdGlvbiBtdXN0IGJlIGEgTm9kZScpO1xuICAgIGlmICghKDAsIF9pcy5pc05vZGUpKHRydWVFeHByKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignUGFyYW1ldGVyIHRydWVFeHByIG11c3QgYmUgYSBOb2RlJyk7XG4gICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkoZmFsc2VFeHByKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignUGFyYW1ldGVyIGZhbHNlRXhwciBtdXN0IGJlIGEgTm9kZScpO1xuICAgIHRoaXMuY29uZGl0aW9uID0gY29uZGl0aW9uO1xuICAgIHRoaXMudHJ1ZUV4cHIgPSB0cnVlRXhwcjtcbiAgICB0aGlzLmZhbHNlRXhwciA9IGZhbHNlRXhwcjtcbiAgfVxuXG4gIENvbmRpdGlvbmFsTm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBDb25kaXRpb25hbE5vZGUucHJvdG90eXBlLnR5cGUgPSAnQ29uZGl0aW9uYWxOb2RlJztcbiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZS5pc0NvbmRpdGlvbmFsTm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIENvbmRpdGlvbmFsTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICB2YXIgZXZhbENvbmRpdGlvbiA9IHRoaXMuY29uZGl0aW9uLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgIHZhciBldmFsVHJ1ZUV4cHIgPSB0aGlzLnRydWVFeHByLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgIHZhciBldmFsRmFsc2VFeHByID0gdGhpcy5mYWxzZUV4cHIuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxDb25kaXRpb25hbE5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgIHJldHVybiB0ZXN0Q29uZGl0aW9uKGV2YWxDb25kaXRpb24oc2NvcGUsIGFyZ3MsIGNvbnRleHQpKSA/IGV2YWxUcnVlRXhwcihzY29wZSwgYXJncywgY29udGV4dCkgOiBldmFsRmFsc2VFeHByKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIENvbmRpdGlvbmFsTm9kZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrKHRoaXMuY29uZGl0aW9uLCAnY29uZGl0aW9uJywgdGhpcyk7XG4gICAgY2FsbGJhY2sodGhpcy50cnVlRXhwciwgJ3RydWVFeHByJywgdGhpcyk7XG4gICAgY2FsbGJhY2sodGhpcy5mYWxzZUV4cHIsICdmYWxzZUV4cHInLCB0aGlzKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBDb25kaXRpb25hbE5vZGUgaGF2aW5nIGl0J3MgY2hpbGRzIGJlIHRoZSByZXN1bHRzIG9mIGNhbGxpbmdcbiAgICogdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBjaGlsZHMgb2YgdGhlIG9yaWdpbmFsIG5vZGUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKTogTm9kZX0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge0NvbmRpdGlvbmFsTm9kZX0gUmV0dXJucyBhIHRyYW5zZm9ybWVkIGNvcHkgb2YgdGhlIG5vZGVcbiAgICovXG5cblxuICBDb25kaXRpb25hbE5vZGUucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHJldHVybiBuZXcgQ29uZGl0aW9uYWxOb2RlKHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLmNvbmRpdGlvbiwgJ2NvbmRpdGlvbicsIHRoaXMpKSwgdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMudHJ1ZUV4cHIsICd0cnVlRXhwcicsIHRoaXMpKSwgdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuZmFsc2VFeHByLCAnZmFsc2VFeHByJywgdGhpcykpKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoaXMgbm9kZSwgYSBzaGFsbG93IGNvcHlcbiAgICogQHJldHVybiB7Q29uZGl0aW9uYWxOb2RlfVxuICAgKi9cblxuXG4gIENvbmRpdGlvbmFsTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBDb25kaXRpb25hbE5vZGUodGhpcy5jb25kaXRpb24sIHRoaXMudHJ1ZUV4cHIsIHRoaXMuZmFsc2VFeHByKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBDb25kaXRpb25hbE5vZGUucHJvdG90eXBlLl90b1N0cmluZyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJztcbiAgICB2YXIgcHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKHRoaXMsIHBhcmVudGhlc2lzKTsgLy8gRW5jbG9zZSBBcmd1bWVudHMgaW4gcGFyZW50aGVzZXMgaWYgdGhleSBhcmUgYW4gT3BlcmF0b3JOb2RlXG4gICAgLy8gb3IgaGF2ZSBsb3dlciBvciBlcXVhbCBwcmVjZWRlbmNlXG4gICAgLy8gTk9URTogZW5jbG9zaW5nIGFsbCBPcGVyYXRvck5vZGVzIGluIHBhcmVudGhlc2VzIGlzIGEgZGVjaXNpb25cbiAgICAvLyBwdXJlbHkgYmFzZWQgb24gYWVzdGhldGljcyBhbmQgcmVhZGFiaWxpdHlcblxuICAgIHZhciBjb25kaXRpb24gPSB0aGlzLmNvbmRpdGlvbi50b1N0cmluZyhvcHRpb25zKTtcbiAgICB2YXIgY29uZGl0aW9uUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKHRoaXMuY29uZGl0aW9uLCBwYXJlbnRoZXNpcyk7XG5cbiAgICBpZiAocGFyZW50aGVzaXMgPT09ICdhbGwnIHx8IHRoaXMuY29uZGl0aW9uLnR5cGUgPT09ICdPcGVyYXRvck5vZGUnIHx8IGNvbmRpdGlvblByZWNlZGVuY2UgIT09IG51bGwgJiYgY29uZGl0aW9uUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlKSB7XG4gICAgICBjb25kaXRpb24gPSAnKCcgKyBjb25kaXRpb24gKyAnKSc7XG4gICAgfVxuXG4gICAgdmFyIHRydWVFeHByID0gdGhpcy50cnVlRXhwci50b1N0cmluZyhvcHRpb25zKTtcbiAgICB2YXIgdHJ1ZVByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKSh0aGlzLnRydWVFeHByLCBwYXJlbnRoZXNpcyk7XG5cbiAgICBpZiAocGFyZW50aGVzaXMgPT09ICdhbGwnIHx8IHRoaXMudHJ1ZUV4cHIudHlwZSA9PT0gJ09wZXJhdG9yTm9kZScgfHwgdHJ1ZVByZWNlZGVuY2UgIT09IG51bGwgJiYgdHJ1ZVByZWNlZGVuY2UgPD0gcHJlY2VkZW5jZSkge1xuICAgICAgdHJ1ZUV4cHIgPSAnKCcgKyB0cnVlRXhwciArICcpJztcbiAgICB9XG5cbiAgICB2YXIgZmFsc2VFeHByID0gdGhpcy5mYWxzZUV4cHIudG9TdHJpbmcob3B0aW9ucyk7XG4gICAgdmFyIGZhbHNlUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKHRoaXMuZmFsc2VFeHByLCBwYXJlbnRoZXNpcyk7XG5cbiAgICBpZiAocGFyZW50aGVzaXMgPT09ICdhbGwnIHx8IHRoaXMuZmFsc2VFeHByLnR5cGUgPT09ICdPcGVyYXRvck5vZGUnIHx8IGZhbHNlUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiBmYWxzZVByZWNlZGVuY2UgPD0gcHJlY2VkZW5jZSkge1xuICAgICAgZmFsc2VFeHByID0gJygnICsgZmFsc2VFeHByICsgJyknO1xuICAgIH1cblxuICAgIHJldHVybiBjb25kaXRpb24gKyAnID8gJyArIHRydWVFeHByICsgJyA6ICcgKyBmYWxzZUV4cHI7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgQ29uZGl0aW9uYWxOb2RlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ0NvbmRpdGlvbmFsTm9kZScsXG4gICAgICBjb25kaXRpb246IHRoaXMuY29uZGl0aW9uLFxuICAgICAgdHJ1ZUV4cHI6IHRoaXMudHJ1ZUV4cHIsXG4gICAgICBmYWxzZUV4cHI6IHRoaXMuZmFsc2VFeHByXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGFuIENvbmRpdGlvbmFsTm9kZSBmcm9tIGl0cyBKU09OIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiQ29uZGl0aW9uYWxOb2RlXCIsIFwiY29uZGl0aW9uXCI6IC4uLiwgXCJ0cnVlRXhwclwiOiAuLi4sIFwiZmFsc2VFeHByXCI6IC4uLn1gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtDb25kaXRpb25hbE5vZGV9XG4gICAqL1xuXG5cbiAgQ29uZGl0aW9uYWxOb2RlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IENvbmRpdGlvbmFsTm9kZShqc29uLmNvbmRpdGlvbiwganNvbi50cnVlRXhwciwganNvbi5mYWxzZUV4cHIpO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBDb25kaXRpb25hbE5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJztcbiAgICB2YXIgcHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKHRoaXMsIHBhcmVudGhlc2lzKTsgLy8gRW5jbG9zZSBBcmd1bWVudHMgaW4gcGFyZW50aGVzZXMgaWYgdGhleSBhcmUgYW4gT3BlcmF0b3JOb2RlXG4gICAgLy8gb3IgaGF2ZSBsb3dlciBvciBlcXVhbCBwcmVjZWRlbmNlXG4gICAgLy8gTk9URTogZW5jbG9zaW5nIGFsbCBPcGVyYXRvck5vZGVzIGluIHBhcmVudGhlc2VzIGlzIGEgZGVjaXNpb25cbiAgICAvLyBwdXJlbHkgYmFzZWQgb24gYWVzdGhldGljcyBhbmQgcmVhZGFiaWxpdHlcblxuICAgIHZhciBjb25kaXRpb24gPSB0aGlzLmNvbmRpdGlvbi50b0hUTUwob3B0aW9ucyk7XG4gICAgdmFyIGNvbmRpdGlvblByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKSh0aGlzLmNvbmRpdGlvbiwgcGFyZW50aGVzaXMpO1xuXG4gICAgaWYgKHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCB0aGlzLmNvbmRpdGlvbi50eXBlID09PSAnT3BlcmF0b3JOb2RlJyB8fCBjb25kaXRpb25QcmVjZWRlbmNlICE9PSBudWxsICYmIGNvbmRpdGlvblByZWNlZGVuY2UgPD0gcHJlY2VkZW5jZSkge1xuICAgICAgY29uZGl0aW9uID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgY29uZGl0aW9uICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgIH1cblxuICAgIHZhciB0cnVlRXhwciA9IHRoaXMudHJ1ZUV4cHIudG9IVE1MKG9wdGlvbnMpO1xuICAgIHZhciB0cnVlUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKHRoaXMudHJ1ZUV4cHIsIHBhcmVudGhlc2lzKTtcblxuICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgdGhpcy50cnVlRXhwci50eXBlID09PSAnT3BlcmF0b3JOb2RlJyB8fCB0cnVlUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiB0cnVlUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlKSB7XG4gICAgICB0cnVlRXhwciA9ICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIHRydWVFeHByICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgIH1cblxuICAgIHZhciBmYWxzZUV4cHIgPSB0aGlzLmZhbHNlRXhwci50b0hUTUwob3B0aW9ucyk7XG4gICAgdmFyIGZhbHNlUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKHRoaXMuZmFsc2VFeHByLCBwYXJlbnRoZXNpcyk7XG5cbiAgICBpZiAocGFyZW50aGVzaXMgPT09ICdhbGwnIHx8IHRoaXMuZmFsc2VFeHByLnR5cGUgPT09ICdPcGVyYXRvck5vZGUnIHx8IGZhbHNlUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiBmYWxzZVByZWNlZGVuY2UgPD0gcHJlY2VkZW5jZSkge1xuICAgICAgZmFsc2VFeHByID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgZmFsc2VFeHByICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgIH1cblxuICAgIHJldHVybiBjb25kaXRpb24gKyAnPHNwYW4gY2xhc3M9XCJtYXRoLW9wZXJhdG9yIG1hdGgtY29uZGl0aW9uYWwtb3BlcmF0b3JcIj4/PC9zcGFuPicgKyB0cnVlRXhwciArICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1jb25kaXRpb25hbC1vcGVyYXRvclwiPjo8L3NwYW4+JyArIGZhbHNlRXhwcjtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBMYVRlWCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIENvbmRpdGlvbmFsTm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gJ1xcXFxiZWdpbntjYXNlc30geycgKyB0aGlzLnRydWVFeHByLnRvVGV4KG9wdGlvbnMpICsgJ30sICZcXFxccXVhZHtcXFxcdGV4dHtpZiB9XFxcXDsnICsgdGhpcy5jb25kaXRpb24udG9UZXgob3B0aW9ucykgKyAnfVxcXFxcXFxceycgKyB0aGlzLmZhbHNlRXhwci50b1RleChvcHRpb25zKSArICd9LCAmXFxcXHF1YWR7XFxcXHRleHR7b3RoZXJ3aXNlfX1cXFxcZW5ke2Nhc2VzfSc7XG4gIH07XG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgYSBjb25kaXRpb24gaXMgbWV0XG4gICAqIEBwYXJhbSB7Kn0gY29uZGl0aW9uXG4gICAqIEByZXR1cm5zIHtib29sZWFufSB0cnVlIGlmIGNvbmRpdGlvbiBpcyB0cnVlIG9yIG5vbi16ZXJvLCBlbHNlIGZhbHNlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gdGVzdENvbmRpdGlvbihjb25kaXRpb24pIHtcbiAgICBpZiAodHlwZW9mIGNvbmRpdGlvbiA9PT0gJ251bWJlcicgfHwgdHlwZW9mIGNvbmRpdGlvbiA9PT0gJ2Jvb2xlYW4nIHx8IHR5cGVvZiBjb25kaXRpb24gPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gISFjb25kaXRpb247XG4gICAgfVxuXG4gICAgaWYgKGNvbmRpdGlvbikge1xuICAgICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGNvbmRpdGlvbikpIHtcbiAgICAgICAgcmV0dXJuICFjb25kaXRpb24uaXNaZXJvKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICgoMCwgX2lzLmlzQ29tcGxleCkoY29uZGl0aW9uKSkge1xuICAgICAgICByZXR1cm4gISEoY29uZGl0aW9uLnJlIHx8IGNvbmRpdGlvbi5pbSk7XG4gICAgICB9XG5cbiAgICAgIGlmICgoMCwgX2lzLmlzVW5pdCkoY29uZGl0aW9uKSkge1xuICAgICAgICByZXR1cm4gISFjb25kaXRpb24udmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbmRpdGlvbiA9PT0gbnVsbCB8fCBjb25kaXRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vuc3VwcG9ydGVkIHR5cGUgb2YgY29uZGl0aW9uIFwiJyArICgwLCBfaXMudHlwZU9mKShjb25kaXRpb24pICsgJ1wiJyk7XG4gIH1cblxuICByZXR1cm4gQ29uZGl0aW9uYWxOb2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb25kaXRpb25hbE5vZGUgPSBjcmVhdGVDb25kaXRpb25hbE5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbnN0YW50Tm9kZSA9IHZvaWQgMDtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2xhdGV4ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2xhdGV4XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnQ29uc3RhbnROb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ05vZGUnXTtcbnZhciBjcmVhdGVDb25zdGFudE5vZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgTm9kZSA9IF9yZWYuTm9kZTtcblxuICAvKipcbiAgICogQSBDb25zdGFudE5vZGUgaG9sZHMgYSBjb25zdGFudCB2YWx1ZSBsaWtlIGEgbnVtYmVyIG9yIHN0cmluZy5cbiAgICpcbiAgICogVXNhZ2U6XG4gICAqXG4gICAqICAgICBuZXcgQ29uc3RhbnROb2RlKDIuMylcbiAgICogICAgIG5ldyBDb25zdGFudE5vZGUoJ2hlbGxvJylcbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZSAgICBWYWx1ZSBjYW4gYmUgYW55IHR5cGUgKG51bWJlciwgQmlnTnVtYmVyLCBzdHJpbmcsIC4uLilcbiAgICogQGNvbnN0cnVjdG9yIENvbnN0YW50Tm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICovXG4gIGZ1bmN0aW9uIENvbnN0YW50Tm9kZSh2YWx1ZSkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBDb25zdGFudE5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSB7XG4gICAgICAvLyBUT0RPOiByZW1vdmUgZGVwcmVjYXRpb24gZXJyb3Igc29tZSBkYXkgKGNyZWF0ZWQgMjAxOC0wMS0yMylcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignbmV3IENvbnN0YW50Tm9kZSh2YWx1ZVN0ciwgdmFsdWVUeXBlKSBpcyBub3Qgc3VwcG9ydGVkIGFueW1vcmUgc2luY2UgbWF0aCB2NC4wLjAuIFVzZSBuZXcgQ29uc3RhbnROb2RlKHZhbHVlKSBpbnN0ZWFkLCB3aGVyZSB2YWx1ZSBpcyBhIG5vbi1zdHJpbmdpZmllZCB2YWx1ZS4nKTtcbiAgICB9XG5cbiAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBDb25zdGFudE5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgQ29uc3RhbnROb2RlLnByb3RvdHlwZS50eXBlID0gJ0NvbnN0YW50Tm9kZSc7XG4gIENvbnN0YW50Tm9kZS5wcm90b3R5cGUuaXNDb25zdGFudE5vZGUgPSB0cnVlO1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuICBDb25zdGFudE5vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7XG4gICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICByZXR1cm4gZnVuY3Rpb24gZXZhbENvbnN0YW50Tm9kZSgpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIENvbnN0YW50Tm9kZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge30gLy8gbm90aGluZyB0byBkbywgd2UgZG9uJ3QgaGF2ZSBjaGlsZHNcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IENvbnN0YW50Tm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpIDogTm9kZX0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge0NvbnN0YW50Tm9kZX0gUmV0dXJucyBhIGNsb25lIG9mIHRoZSBub2RlXG4gICAqL1xuICA7XG5cbiAgQ29uc3RhbnROb2RlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSgpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhpcyBub2RlLCBhIHNoYWxsb3cgY29weVxuICAgKiBAcmV0dXJuIHtDb25zdGFudE5vZGV9XG4gICAqL1xuXG5cbiAgQ29uc3RhbnROb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZSh0aGlzLnZhbHVlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBDb25zdGFudE5vZGUucHJvdG90eXBlLl90b1N0cmluZyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgcmV0dXJuICgwLCBfc3RyaW5nLmZvcm1hdCkodGhpcy52YWx1ZSwgb3B0aW9ucyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIENvbnN0YW50Tm9kZS5wcm90b3R5cGUudG9IVE1MID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgdmFsdWUgPSB0aGlzLl90b1N0cmluZyhvcHRpb25zKTtcblxuICAgIHN3aXRjaCAoKDAsIF9pcy50eXBlT2YpKHRoaXMudmFsdWUpKSB7XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgY2FzZSAnQmlnTnVtYmVyJzpcbiAgICAgIGNhc2UgJ0ZyYWN0aW9uJzpcbiAgICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtbnVtYmVyXCI+JyArIHZhbHVlICsgJzwvc3Bhbj4nO1xuXG4gICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1zdHJpbmdcIj4nICsgdmFsdWUgKyAnPC9zcGFuPic7XG5cbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1ib29sZWFuXCI+JyArIHZhbHVlICsgJzwvc3Bhbj4nO1xuXG4gICAgICBjYXNlICdudWxsJzpcbiAgICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtbnVsbC1zeW1ib2xcIj4nICsgdmFsdWUgKyAnPC9zcGFuPic7XG5cbiAgICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLXVuZGVmaW5lZFwiPicgKyB2YWx1ZSArICc8L3NwYW4+JztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtc3ltYm9sXCI+JyArIHZhbHVlICsgJzwvc3Bhbj4nO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBDb25zdGFudE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnQ29uc3RhbnROb2RlJyxcbiAgICAgIHZhbHVlOiB0aGlzLnZhbHVlXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGEgQ29uc3RhbnROb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJTeW1ib2xOb2RlXCIsIHZhbHVlOiAyLjN9YCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG1hdGhqcyBpcyBvcHRpb25hbFxuICAgKiBAcmV0dXJucyB7Q29uc3RhbnROb2RlfVxuICAgKi9cblxuXG4gIENvbnN0YW50Tm9kZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBDb25zdGFudE5vZGUoanNvbi52YWx1ZSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBDb25zdGFudE5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHZhbHVlID0gdGhpcy5fdG9TdHJpbmcob3B0aW9ucyk7XG5cbiAgICBzd2l0Y2ggKCgwLCBfaXMudHlwZU9mKSh0aGlzLnZhbHVlKSkge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgcmV0dXJuICdcXFxcbWF0aHR0eycgKyAoMCwgX2xhdGV4LmVzY2FwZUxhdGV4KSh2YWx1ZSkgKyAnfSc7XG5cbiAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICBjYXNlICdCaWdOdW1iZXInOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKCFpc0Zpbml0ZSh0aGlzLnZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUudmFsdWVPZigpIDwgMCA/ICctXFxcXGluZnR5JyA6ICdcXFxcaW5mdHknO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBpbmRleCA9IHZhbHVlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZScpO1xuXG4gICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZygwLCBpbmRleCkgKyAnXFxcXGNkb3QxMF57JyArIHZhbHVlLnN1YnN0cmluZyhpbmRleCArIDEpICsgJ30nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG5cbiAgICAgIGNhc2UgJ0ZyYWN0aW9uJzpcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUudG9MYXRleCgpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBDb25zdGFudE5vZGU7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWUsXG4gIGlzTm9kZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbnN0YW50Tm9kZSA9IGNyZWF0ZUNvbnN0YW50Tm9kZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9rZXl3b3JkcyA9IHJlcXVpcmUoXCIuLi9rZXl3b3Jkc1wiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2xhdGV4ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2xhdGV4XCIpO1xuXG52YXIgX29wZXJhdG9ycyA9IHJlcXVpcmUoXCIuLi9vcGVyYXRvcnNcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdOb2RlJ107XG52YXIgY3JlYXRlRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBOb2RlID0gX3JlZi5Ob2RlO1xuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3IgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICogRnVuY3Rpb24gYXNzaWdubWVudFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgICAgICAgICAgRnVuY3Rpb24gbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ1tdIHwgQXJyYXkuPHtuYW1lOiBzdHJpbmcsIHR5cGU6IHN0cmluZ30+fSBwYXJhbXNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5IHdpdGggZnVuY3Rpb24gcGFyYW1ldGVyIG5hbWVzLCBvciBhblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXkgd2l0aCBvYmplY3RzIGNvbnRhaW5pbmcgdGhlIG5hbWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCB0eXBlIG9mIHRoZSBwYXJhbWV0ZXJcbiAgICogQHBhcmFtIHtOb2RlfSBleHByICAgICAgICAgICAgIFRoZSBmdW5jdGlvbiBleHByZXNzaW9uXG4gICAqL1xuICBmdW5jdGlvbiBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKG5hbWUsIHBhcmFtcywgZXhwcikge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9IC8vIHZhbGlkYXRlIGlucHV0XG5cblxuICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N0cmluZyBleHBlY3RlZCBmb3IgcGFyYW1ldGVyIFwibmFtZVwiJyk7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHBhcmFtcykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGNvbnRhaW5pbmcgc3RyaW5ncyBvciBvYmplY3RzIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJwYXJhbXNcIicpO1xuICAgIGlmICghKDAsIF9pcy5pc05vZGUpKGV4cHIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb2RlIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJleHByXCInKTtcbiAgICBpZiAobmFtZSBpbiBfa2V5d29yZHMua2V5d29yZHMpIHRocm93IG5ldyBFcnJvcignSWxsZWdhbCBmdW5jdGlvbiBuYW1lLCBcIicgKyBuYW1lICsgJ1wiIGlzIGEgcmVzZXJ2ZWQga2V5d29yZCcpO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5wYXJhbXMgPSBwYXJhbXMubWFwKGZ1bmN0aW9uIChwYXJhbSkge1xuICAgICAgcmV0dXJuIHBhcmFtICYmIHBhcmFtLm5hbWUgfHwgcGFyYW07XG4gICAgfSk7XG4gICAgdGhpcy50eXBlcyA9IHBhcmFtcy5tYXAoZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICByZXR1cm4gcGFyYW0gJiYgcGFyYW0udHlwZSB8fCAnYW55JztcbiAgICB9KTtcbiAgICB0aGlzLmV4cHIgPSBleHByO1xuICB9XG5cbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBGdW5jdGlvbkFzc2lnbm1lbnROb2RlLnByb3RvdHlwZS50eXBlID0gJ0Z1bmN0aW9uQXNzaWdubWVudE5vZGUnO1xuICBGdW5jdGlvbkFzc2lnbm1lbnROb2RlLnByb3RvdHlwZS5pc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUgPSB0cnVlO1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuICBGdW5jdGlvbkFzc2lnbm1lbnROb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHZhciBjaGlsZEFyZ05hbWVzID0gT2JqZWN0LmNyZWF0ZShhcmdOYW1lcyk7XG4gICAgKDAsIF9hcnJheS5mb3JFYWNoKSh0aGlzLnBhcmFtcywgZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICBjaGlsZEFyZ05hbWVzW3BhcmFtXSA9IHRydWU7XG4gICAgfSk7IC8vIGNvbXBpbGUgdGhlIGZ1bmN0aW9uIGV4cHJlc3Npb24gd2l0aCB0aGUgY2hpbGQgYXJnc1xuXG4gICAgdmFyIGV2YWxFeHByID0gdGhpcy5leHByLl9jb21waWxlKG1hdGgsIGNoaWxkQXJnTmFtZXMpO1xuXG4gICAgdmFyIG5hbWUgPSB0aGlzLm5hbWU7XG4gICAgdmFyIHBhcmFtcyA9IHRoaXMucGFyYW1zO1xuICAgIHZhciBzaWduYXR1cmUgPSAoMCwgX2FycmF5LmpvaW4pKHRoaXMudHlwZXMsICcsJyk7XG4gICAgdmFyIHN5bnRheCA9IG5hbWUgKyAnKCcgKyAoMCwgX2FycmF5LmpvaW4pKHRoaXMucGFyYW1zLCAnLCAnKSArICcpJztcbiAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEZ1bmN0aW9uQXNzaWdubWVudE5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgIHZhciBzaWduYXR1cmVzID0ge307XG5cbiAgICAgIHNpZ25hdHVyZXNbc2lnbmF0dXJlXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGNoaWxkQXJncyA9IE9iamVjdC5jcmVhdGUoYXJncyk7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBjaGlsZEFyZ3NbcGFyYW1zW2ldXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBldmFsRXhwcihzY29wZSwgY2hpbGRBcmdzLCBjb250ZXh0KTtcbiAgICAgIH07XG5cbiAgICAgIHZhciBmbiA9IHR5cGVkKG5hbWUsIHNpZ25hdHVyZXMpO1xuICAgICAgZm4uc3ludGF4ID0gc3ludGF4O1xuICAgICAgKDAsIF9jdXN0b21zLnNldFNhZmVQcm9wZXJ0eSkoc2NvcGUsIG5hbWUsIGZuKTtcbiAgICAgIHJldHVybiBmbjtcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayh0aGlzLmV4cHIsICdleHByJywgdGhpcyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7RnVuY3Rpb25Bc3NpZ25tZW50Tm9kZX0gUmV0dXJucyBhIHRyYW5zZm9ybWVkIGNvcHkgb2YgdGhlIG5vZGVcbiAgICovXG5cblxuICBGdW5jdGlvbkFzc2lnbm1lbnROb2RlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICB2YXIgZXhwciA9IHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLmV4cHIsICdleHByJywgdGhpcykpO1xuXG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKHRoaXMubmFtZSwgdGhpcy5wYXJhbXMuc2xpY2UoMCksIGV4cHIpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhpcyBub2RlLCBhIHNoYWxsb3cgY29weVxuICAgKiBAcmV0dXJuIHtGdW5jdGlvbkFzc2lnbm1lbnROb2RlfVxuICAgKi9cblxuXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSh0aGlzLm5hbWUsIHRoaXMucGFyYW1zLnNsaWNlKDApLCB0aGlzLmV4cHIpO1xuICB9O1xuICAvKipcbiAgICogSXMgcGFyZW50aGVzaXMgbmVlZGVkP1xuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtPYmplY3R9IHBhcmVudGhlc2lzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gbmVlZFBhcmVudGhlc2lzKG5vZGUsIHBhcmVudGhlc2lzKSB7XG4gICAgdmFyIHByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShub2RlLCBwYXJlbnRoZXNpcyk7XG4gICAgdmFyIGV4cHJQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkobm9kZS5leHByLCBwYXJlbnRoZXNpcyk7XG4gICAgcmV0dXJuIHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCBleHByUHJlY2VkZW5jZSAhPT0gbnVsbCAmJiBleHByUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlO1xuICB9XG4gIC8qKlxuICAgKiBnZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBleHByID0gdGhpcy5leHByLnRvU3RyaW5nKG9wdGlvbnMpO1xuXG4gICAgaWYgKG5lZWRQYXJlbnRoZXNpcyh0aGlzLCBwYXJlbnRoZXNpcykpIHtcbiAgICAgIGV4cHIgPSAnKCcgKyBleHByICsgJyknO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLm5hbWUgKyAnKCcgKyB0aGlzLnBhcmFtcy5qb2luKCcsICcpICsgJykgPSAnICsgZXhwcjtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBGdW5jdGlvbkFzc2lnbm1lbnROb2RlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHR5cGVzID0gdGhpcy50eXBlcztcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZScsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICBwYXJhbXM6IHRoaXMucGFyYW1zLm1hcChmdW5jdGlvbiAocGFyYW0sIGluZGV4KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbmFtZTogcGFyYW0sXG4gICAgICAgICAgdHlwZTogdHlwZXNbaW5kZXhdXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICAgIGV4cHI6IHRoaXMuZXhwclxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBGdW5jdGlvbkFzc2lnbm1lbnROb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJGdW5jdGlvbkFzc2lnbm1lbnROb2RlXCIsIG5hbWU6IC4uLiwgcGFyYW1zOiAuLi4sIGV4cHI6IC4uLn1gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbkFzc2lnbm1lbnROb2RlfVxuICAgKi9cblxuXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZShqc29uLm5hbWUsIGpzb24ucGFyYW1zLCBqc29uLmV4cHIpO1xuICB9O1xuICAvKipcbiAgICogZ2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBGdW5jdGlvbkFzc2lnbm1lbnROb2RlLnByb3RvdHlwZS50b0hUTUwgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBwYXJlbnRoZXNpcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA/IG9wdGlvbnMucGFyZW50aGVzaXMgOiAna2VlcCc7XG4gICAgdmFyIHBhcmFtcyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhcmFtcy5sZW5ndGg7IGkrKykge1xuICAgICAgcGFyYW1zLnB1c2goJzxzcGFuIGNsYXNzPVwibWF0aC1zeW1ib2wgbWF0aC1wYXJhbWV0ZXJcIj4nICsgKDAsIF9zdHJpbmcuZXNjYXBlKSh0aGlzLnBhcmFtc1tpXSkgKyAnPC9zcGFuPicpO1xuICAgIH1cblxuICAgIHZhciBleHByID0gdGhpcy5leHByLnRvSFRNTChvcHRpb25zKTtcblxuICAgIGlmIChuZWVkUGFyZW50aGVzaXModGhpcywgcGFyZW50aGVzaXMpKSB7XG4gICAgICBleHByID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgZXhwciArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPik8L3NwYW4+JztcbiAgICB9XG5cbiAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1mdW5jdGlvblwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMubmFtZSkgKyAnPC9zcGFuPicgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBwYXJhbXMuam9pbignPHNwYW4gY2xhc3M9XCJtYXRoLXNlcGFyYXRvclwiPiw8L3NwYW4+JykgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPjxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLWFzc2lnbm1lbnQtb3BlcmF0b3IgbWF0aC12YXJpYWJsZS1hc3NpZ25tZW50LW9wZXJhdG9yIG1hdGgtYmluYXJ5LW9wZXJhdG9yXCI+PTwvc3Bhbj4nICsgZXhwcjtcbiAgfTtcbiAgLyoqXG4gICAqIGdldCBMYVRlWCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJztcbiAgICB2YXIgZXhwciA9IHRoaXMuZXhwci50b1RleChvcHRpb25zKTtcblxuICAgIGlmIChuZWVkUGFyZW50aGVzaXModGhpcywgcGFyZW50aGVzaXMpKSB7XG4gICAgICBleHByID0gXCJcXFxcbGVmdChcIi5jb25jYXQoZXhwciwgXCJcXFxccmlnaHQpXCIpO1xuICAgIH1cblxuICAgIHJldHVybiAnXFxcXG1hdGhybXsnICsgdGhpcy5uYW1lICsgJ31cXFxcbGVmdCgnICsgdGhpcy5wYXJhbXMubWFwKF9sYXRleC50b1N5bWJvbCkuam9pbignLCcpICsgJ1xcXFxyaWdodCk6PScgKyBleHByO1xuICB9O1xuXG4gIHJldHVybiBGdW5jdGlvbkFzc2lnbm1lbnROb2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVGdW5jdGlvbkFzc2lnbm1lbnROb2RlID0gY3JlYXRlRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRnVuY3Rpb25Ob2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9jdXN0b21zID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2N1c3RvbXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2xhdGV4ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2xhdGV4XCIpO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbnZhciBuYW1lID0gJ0Z1bmN0aW9uTm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydtYXRoJywgJ05vZGUnLCAnU3ltYm9sTm9kZSddO1xudmFyIGNyZWF0ZUZ1bmN0aW9uTm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBtYXRoID0gX3JlZi5tYXRoLFxuICAgICAgTm9kZSA9IF9yZWYuTm9kZSxcbiAgICAgIFN5bWJvbE5vZGUgPSBfcmVmLlN5bWJvbE5vZGU7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBGdW5jdGlvbk5vZGVcbiAgICogQGV4dGVuZHMgey4vTm9kZX1cbiAgICogaW52b2tlIGEgbGlzdCB3aXRoIGFyZ3VtZW50cyBvbiBhIG5vZGVcbiAgICogQHBhcmFtIHsuL05vZGUgfCBzdHJpbmd9IGZuIE5vZGUgcmVzb2x2aW5nIHdpdGggYSBmdW5jdGlvbiBvbiB3aGljaCB0byBpbnZva2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBhcmd1bWVudHMsIHR5cGljYWxseSBhIFN5bWJvTm9kZSBvciBBY2Nlc3Nvck5vZGVcbiAgICogQHBhcmFtIHsuL05vZGVbXX0gYXJnc1xuICAgKi9cbiAgZnVuY3Rpb24gRnVuY3Rpb25Ob2RlKGZuLCBhcmdzKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEZ1bmN0aW9uTm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGZuID0gbmV3IFN5bWJvbE5vZGUoZm4pO1xuICAgIH0gLy8gdmFsaWRhdGUgaW5wdXRcblxuXG4gICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkoZm4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb2RlIGV4cGVjdGVkIGFzIHBhcmFtZXRlciBcImZuXCInKTtcblxuICAgIGlmICghQXJyYXkuaXNBcnJheShhcmdzKSB8fCAhYXJncy5ldmVyeShfaXMuaXNOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgY29udGFpbmluZyBOb2RlcyBleHBlY3RlZCBmb3IgcGFyYW1ldGVyIFwiYXJnc1wiJyk7XG4gICAgfVxuXG4gICAgdGhpcy5mbiA9IGZuO1xuICAgIHRoaXMuYXJncyA9IGFyZ3MgfHwgW107IC8vIHJlYWRvbmx5IHByb3BlcnR5IG5hbWVcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnbmFtZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5mbi5uYW1lIHx8ICcnO1xuICAgICAgfS5iaW5kKHRoaXMpLFxuICAgICAgc2V0OiBmdW5jdGlvbiBzZXQoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGFzc2lnbiBhIG5ldyBuYW1lLCBuYW1lIGlzIHJlYWQtb25seScpO1xuICAgICAgfVxuICAgIH0pOyAvLyBUT0RPOiBkZXByZWNhdGVkIHNpbmNlIHYzLCByZW1vdmUgc29tZSBkYXlcblxuICAgIHZhciBkZXByZWNhdGVkID0gZnVuY3Rpb24gZGVwcmVjYXRlZCgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUHJvcGVydHkgYEZ1bmN0aW9uTm9kZS5vYmplY3RgIGlzIGRlcHJlY2F0ZWQsIHVzZSBgRnVuY3Rpb25Ob2RlLmZuYCBpbnN0ZWFkJyk7XG4gICAgfTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnb2JqZWN0Jywge1xuICAgICAgZ2V0OiBkZXByZWNhdGVkLFxuICAgICAgc2V0OiBkZXByZWNhdGVkXG4gICAgfSk7XG4gIH1cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgRnVuY3Rpb25Ob2RlLnByb3RvdHlwZS50eXBlID0gJ0Z1bmN0aW9uTm9kZSc7XG4gIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUuaXNGdW5jdGlvbk5vZGUgPSB0cnVlO1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEZ1bmN0aW9uTm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIHZhbGlkIEZ1bmN0aW9uTm9kZScpO1xuICAgIH0gLy8gY29tcGlsZSBhcmd1bWVudHNcblxuXG4gICAgdmFyIGV2YWxBcmdzID0gKDAsIF9hcnJheS5tYXApKHRoaXMuYXJncywgZnVuY3Rpb24gKGFyZykge1xuICAgICAgcmV0dXJuIGFyZy5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG4gICAgfSk7XG5cbiAgICBpZiAoKDAsIF9pcy5pc1N5bWJvbE5vZGUpKHRoaXMuZm4pKSB7XG4gICAgICAvLyB3ZSBjYW4gc3RhdGljYWxseSBkZXRlcm1pbmUgd2hldGhlciB0aGUgZnVuY3Rpb24gaGFzIGFuIHJhd0FyZ3MgcHJvcGVydHlcbiAgICAgIHZhciBfbmFtZSA9IHRoaXMuZm4ubmFtZTtcbiAgICAgIHZhciBmbiA9IF9uYW1lIGluIG1hdGggPyAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShtYXRoLCBfbmFtZSkgOiB1bmRlZmluZWQ7XG4gICAgICB2YXIgaXNSYXcgPSB0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicgJiYgZm4ucmF3QXJncyA9PT0gdHJ1ZTtcblxuICAgICAgaWYgKGlzUmF3KSB7XG4gICAgICAgIC8vIHBhc3MgdW5ldmFsdWF0ZWQgcGFyYW1ldGVycyAobm9kZXMpIHRvIHRoZSBmdW5jdGlvblxuICAgICAgICAvLyBcInJhd1wiIGV2YWx1YXRpb25cbiAgICAgICAgdmFyIHJhd0FyZ3MgPSB0aGlzLmFyZ3M7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsRnVuY3Rpb25Ob2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgICAgcmV0dXJuIChfbmFtZSBpbiBzY29wZSA/ICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKHNjb3BlLCBfbmFtZSkgOiBmbikocmF3QXJncywgbWF0aCwgX2V4dGVuZHMoe30sIHNjb3BlLCBhcmdzKSk7XG4gICAgICAgIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBcInJlZ3VsYXJcIiBldmFsdWF0aW9uXG4gICAgICAgIGlmIChldmFsQXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICB2YXIgZXZhbEFyZzAgPSBldmFsQXJnc1swXTtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEZ1bmN0aW9uTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICAgICAgcmV0dXJuIChfbmFtZSBpbiBzY29wZSA/ICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKHNjb3BlLCBfbmFtZSkgOiBmbikoZXZhbEFyZzAoc2NvcGUsIGFyZ3MsIGNvbnRleHQpKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9IGVsc2UgaWYgKGV2YWxBcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHZhciBfZXZhbEFyZyA9IGV2YWxBcmdzWzBdO1xuICAgICAgICAgIHZhciBldmFsQXJnMSA9IGV2YWxBcmdzWzFdO1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsRnVuY3Rpb25Ob2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gKF9uYW1lIGluIHNjb3BlID8gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkoc2NvcGUsIF9uYW1lKSA6IGZuKShfZXZhbEFyZyhzY29wZSwgYXJncywgY29udGV4dCksIGV2YWxBcmcxKHNjb3BlLCBhcmdzLCBjb250ZXh0KSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEZ1bmN0aW9uTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICAgICAgcmV0dXJuIChfbmFtZSBpbiBzY29wZSA/ICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKHNjb3BlLCBfbmFtZSkgOiBmbikuYXBwbHkobnVsbCwgKDAsIF9hcnJheS5tYXApKGV2YWxBcmdzLCBmdW5jdGlvbiAoZXZhbEFyZykge1xuICAgICAgICAgICAgICByZXR1cm4gZXZhbEFyZyhzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0FjY2Vzc29yTm9kZSkodGhpcy5mbikgJiYgKDAsIF9pcy5pc0luZGV4Tm9kZSkodGhpcy5mbi5pbmRleCkgJiYgdGhpcy5mbi5pbmRleC5pc09iamVjdFByb3BlcnR5KCkpIHtcbiAgICAgIC8vIGV4ZWN1dGUgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIHJpZ2h0IGNvbnRleHQ6IHRoZSBvYmplY3Qgb2YgdGhlIEFjY2Vzc29yTm9kZVxuICAgICAgdmFyIGV2YWxPYmplY3QgPSB0aGlzLmZuLm9iamVjdC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICAgIHZhciBwcm9wID0gdGhpcy5mbi5pbmRleC5nZXRPYmplY3RQcm9wZXJ0eSgpO1xuICAgICAgdmFyIF9yYXdBcmdzID0gdGhpcy5hcmdzO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxGdW5jdGlvbk5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgdmFyIG9iamVjdCA9IGV2YWxPYmplY3Qoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICAoMCwgX2N1c3RvbXMudmFsaWRhdGVTYWZlTWV0aG9kKShvYmplY3QsIHByb3ApO1xuICAgICAgICB2YXIgaXNSYXcgPSBvYmplY3RbcHJvcF0gJiYgb2JqZWN0W3Byb3BdLnJhd0FyZ3M7XG4gICAgICAgIHJldHVybiBpc1JhdyA/IG9iamVjdFtwcm9wXShfcmF3QXJncywgbWF0aCwgX2V4dGVuZHMoe30sIHNjb3BlLCBhcmdzKSkgLy8gXCJyYXdcIiBldmFsdWF0aW9uXG4gICAgICAgIDogb2JqZWN0W3Byb3BdLmFwcGx5KG9iamVjdCwgKDAsIF9hcnJheS5tYXApKGV2YWxBcmdzLCBmdW5jdGlvbiAoZXZhbEFyZykge1xuICAgICAgICAgIC8vIFwicmVndWxhclwiIGV2YWx1YXRpb25cbiAgICAgICAgICByZXR1cm4gZXZhbEFyZyhzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIH0pKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG5vZGUuZm4uaXNBY2Nlc3Nvck5vZGUgJiYgIW5vZGUuZm4uaW5kZXguaXNPYmplY3RQcm9wZXJ0eSgpXG4gICAgICAvLyB3ZSBoYXZlIHRvIGR5bmFtaWNhbGx5IGRldGVybWluZSB3aGV0aGVyIHRoZSBmdW5jdGlvbiBoYXMgYSByYXdBcmdzIHByb3BlcnR5XG4gICAgICB2YXIgZXZhbEZuID0gdGhpcy5mbi5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICAgIHZhciBfcmF3QXJnczIgPSB0aGlzLmFyZ3M7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbEZ1bmN0aW9uTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICB2YXIgZm4gPSBldmFsRm4oc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICB2YXIgaXNSYXcgPSBmbiAmJiBmbi5yYXdBcmdzO1xuICAgICAgICByZXR1cm4gaXNSYXcgPyBmbihfcmF3QXJnczIsIG1hdGgsIF9leHRlbmRzKHt9LCBzY29wZSwgYXJncykpIC8vIFwicmF3XCIgZXZhbHVhdGlvblxuICAgICAgICA6IGZuLmFwcGx5KGZuLCAoMCwgX2FycmF5Lm1hcCkoZXZhbEFyZ3MsIGZ1bmN0aW9uIChldmFsQXJnKSB7XG4gICAgICAgICAgLy8gXCJyZWd1bGFyXCIgZXZhbHVhdGlvblxuICAgICAgICAgIHJldHVybiBldmFsQXJnKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgfSkpO1xuICAgICAgfTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Ob2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2sodGhpcy5mbiwgJ2ZuJywgdGhpcyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgY2FsbGJhY2sodGhpcy5hcmdzW2ldLCAnYXJnc1snICsgaSArICddJywgdGhpcyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IEZ1bmN0aW9uTm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7RnVuY3Rpb25Ob2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIEZ1bmN0aW9uTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgdmFyIGZuID0gdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuZm4sICdmbicsIHRoaXMpKTtcblxuICAgIHZhciBhcmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLmFyZ3NbaV0sICdhcmdzWycgKyBpICsgJ10nLCB0aGlzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBGdW5jdGlvbk5vZGUoZm4sIGFyZ3MpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhpcyBub2RlLCBhIHNoYWxsb3cgY29weVxuICAgKiBAcmV0dXJuIHtGdW5jdGlvbk5vZGV9XG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Ob2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZSh0aGlzLmZuLCB0aGlzLmFyZ3Muc2xpY2UoMCkpO1xuICB9OyAvLyBiYWNrdXAgTm9kZSdzIHRvU3RyaW5nIGZ1bmN0aW9uXG4gIC8vIEBwcml2YXRlXG5cblxuICB2YXIgbm9kZVRvU3RyaW5nID0gRnVuY3Rpb25Ob2RlLnByb3RvdHlwZS50b1N0cmluZztcbiAgLyoqXG4gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb24uICh3cmFwcGVyIGZ1bmN0aW9uKVxuICAgKiBUaGlzIG92ZXJyaWRlcyBwYXJ0cyBvZiBOb2RlJ3MgdG9TdHJpbmcgZnVuY3Rpb24uXG4gICAqIElmIGNhbGxiYWNrIGlzIGFuIG9iamVjdCBjb250YWluaW5nIGNhbGxiYWNrcywgaXRcbiAgICogY2FsbHMgdGhlIGNvcnJlY3QgY2FsbGJhY2sgZm9yIHRoZSBjdXJyZW50IG5vZGUsXG4gICAqIG90aGVyd2lzZSBpdCBmYWxscyBiYWNrIHRvIGNhbGxpbmcgTm9kZSdzIHRvU3RyaW5nXG4gICAqIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKiBAb3ZlcnJpZGVcbiAgICovXG5cbiAgRnVuY3Rpb25Ob2RlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGN1c3RvbVN0cmluZztcbiAgICB2YXIgbmFtZSA9IHRoaXMuZm4udG9TdHJpbmcob3B0aW9ucyk7XG5cbiAgICBpZiAob3B0aW9ucyAmJiBfdHlwZW9mKG9wdGlvbnMuaGFuZGxlcikgPT09ICdvYmplY3QnICYmICgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShvcHRpb25zLmhhbmRsZXIsIG5hbWUpKSB7XG4gICAgICAvLyBjYWxsYmFjayBpcyBhIG1hcCBvZiBjYWxsYmFjayBmdW5jdGlvbnNcbiAgICAgIGN1c3RvbVN0cmluZyA9IG9wdGlvbnMuaGFuZGxlcltuYW1lXSh0aGlzLCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGN1c3RvbVN0cmluZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBjdXN0b21TdHJpbmc7XG4gICAgfSAvLyBmYWxsIGJhY2sgdG8gTm9kZSdzIHRvU3RyaW5nXG5cblxuICAgIHJldHVybiBub2RlVG9TdHJpbmcuY2FsbCh0aGlzLCBvcHRpb25zKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLl90b1N0cmluZyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGFyZ3MgPSB0aGlzLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgIHJldHVybiBhcmcudG9TdHJpbmcob3B0aW9ucyk7XG4gICAgfSk7XG4gICAgdmFyIGZuID0gKDAsIF9pcy5pc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUpKHRoaXMuZm4pID8gJygnICsgdGhpcy5mbi50b1N0cmluZyhvcHRpb25zKSArICcpJyA6IHRoaXMuZm4udG9TdHJpbmcob3B0aW9ucyk7IC8vIGZvcm1hdCB0aGUgYXJndW1lbnRzIGxpa2UgXCJhZGQoMiwgNC4yKVwiXG5cbiAgICByZXR1cm4gZm4gKyAnKCcgKyBhcmdzLmpvaW4oJywgJykgKyAnKSc7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Ob2RlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ0Z1bmN0aW9uTm9kZScsXG4gICAgICBmbjogdGhpcy5mbixcbiAgICAgIGFyZ3M6IHRoaXMuYXJnc1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBBc3NpZ25tZW50Tm9kZSBmcm9tIGl0cyBKU09OIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiRnVuY3Rpb25Ob2RlXCIsIGZuOiAuLi4sIGFyZ3M6IC4uLn1gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtGdW5jdGlvbk5vZGV9XG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Ob2RlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZShqc29uLmZuLCBqc29uLmFyZ3MpO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGFyZ3MgPSB0aGlzLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgIHJldHVybiBhcmcudG9IVE1MKG9wdGlvbnMpO1xuICAgIH0pOyAvLyBmb3JtYXQgdGhlIGFyZ3VtZW50cyBsaWtlIFwiYWRkKDIsIDQuMilcIlxuXG4gICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtZnVuY3Rpb25cIj4nICsgKDAsIF9zdHJpbmcuZXNjYXBlKSh0aGlzLmZuKSArICc8L3NwYW4+PHNwYW4gY2xhc3M9XCJtYXRoLXBhcmFudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBhcmdzLmpvaW4oJzxzcGFuIGNsYXNzPVwibWF0aC1zZXBhcmF0b3JcIj4sPC9zcGFuPicpICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJhbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICB9O1xuICAvKlxuICAgKiBFeHBhbmQgYSBMYVRlWCB0ZW1wbGF0ZVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGVcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEBwcml2YXRlXG4gICAqKi9cblxuXG4gIGZ1bmN0aW9uIGV4cGFuZFRlbXBsYXRlKHRlbXBsYXRlLCBub2RlLCBvcHRpb25zKSB7XG4gICAgdmFyIGxhdGV4ID0gJyc7IC8vIE1hdGNoIGV2ZXJ5dGhpbmcgb2YgdGhlIGZvcm0gJHtpZGVudGlmaWVyfSBvciAke2lkZW50aWZpZXJbMl19IG9yICQkXG4gICAgLy8gd2hpbGUgc3VibWF0Y2hpbmcgaWRlbnRpZmllciBhbmQgMiAoaW4gdGhlIHNlY29uZCBjYXNlKVxuXG4gICAgdmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cCgnXFxcXCQoPzpcXFxceyhbYS16X11bYS16XzAtOV0qKSg/OlxcXFxbKFswLTldKylcXFxcXSk/XFxcXH18XFxcXCQpJywgJ2lnJyk7XG4gICAgdmFyIGlucHV0UG9zID0gMDsgLy8gcG9zaXRpb24gaW4gdGhlIGlucHV0IHN0cmluZ1xuXG4gICAgdmFyIG1hdGNoO1xuXG4gICAgd2hpbGUgKChtYXRjaCA9IHJlZ2V4LmV4ZWModGVtcGxhdGUpKSAhPT0gbnVsbCkge1xuICAgICAgLy8gZ28gdGhyb3VnaCBhbGwgbWF0Y2hlc1xuICAgICAgLy8gYWRkIGV2ZXJ5dGhpbmcgaW4gZnJvbnQgb2YgdGhlIG1hdGNoIHRvIHRoZSBMYVRlWCBzdHJpbmdcbiAgICAgIGxhdGV4ICs9IHRlbXBsYXRlLnN1YnN0cmluZyhpbnB1dFBvcywgbWF0Y2guaW5kZXgpO1xuICAgICAgaW5wdXRQb3MgPSBtYXRjaC5pbmRleDtcblxuICAgICAgaWYgKG1hdGNoWzBdID09PSAnJCQnKSB7XG4gICAgICAgIC8vIGVzY2FwZWQgZG9sbGFyIHNpZ25cbiAgICAgICAgbGF0ZXggKz0gJyQnO1xuICAgICAgICBpbnB1dFBvcysrO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGVtcGxhdGUgcGFyYW1ldGVyXG4gICAgICAgIGlucHV0UG9zICs9IG1hdGNoWzBdLmxlbmd0aDtcbiAgICAgICAgdmFyIHByb3BlcnR5ID0gbm9kZVttYXRjaFsxXV07XG5cbiAgICAgICAgaWYgKCFwcm9wZXJ0eSkge1xuICAgICAgICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcignVGVtcGxhdGU6IFByb3BlcnR5ICcgKyBtYXRjaFsxXSArICcgZG9lcyBub3QgZXhpc3QuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobWF0Y2hbMl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIG5vIHNxdWFyZSBicmFja2V0c1xuICAgICAgICAgIHN3aXRjaCAoX3R5cGVvZihwcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgIGxhdGV4ICs9IHByb3BlcnR5O1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgICAgICAgaWYgKCgwLCBfaXMuaXNOb2RlKShwcm9wZXJ0eSkpIHtcbiAgICAgICAgICAgICAgICBsYXRleCArPSBwcm9wZXJ0eS50b1RleChvcHRpb25zKTtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHByb3BlcnR5KSkge1xuICAgICAgICAgICAgICAgIC8vIG1ha2UgYXJyYXkgb2YgTm9kZXMgaW50byBjb21tYSBzZXBhcmF0ZWQgbGlzdFxuICAgICAgICAgICAgICAgIGxhdGV4ICs9IHByb3BlcnR5Lm1hcChmdW5jdGlvbiAoYXJnLCBpbmRleCkge1xuICAgICAgICAgICAgICAgICAgaWYgKCgwLCBfaXMuaXNOb2RlKShhcmcpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhcmcudG9UZXgob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RlbXBsYXRlOiAnICsgbWF0Y2hbMV0gKyAnWycgKyBpbmRleCArICddIGlzIG5vdCBhIE5vZGUuJyk7XG4gICAgICAgICAgICAgICAgfSkuam9pbignLCcpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RlbXBsYXRlOiAnICsgbWF0Y2hbMV0gKyAnIGhhcyB0byBiZSBhIE5vZGUsIFN0cmluZyBvciBhcnJheSBvZiBOb2RlcycpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RlbXBsYXRlOiAnICsgbWF0Y2hbMV0gKyAnIGhhcyB0byBiZSBhIE5vZGUsIFN0cmluZyBvciBhcnJheSBvZiBOb2RlcycpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB3aXRoIHNxdWFyZSBicmFja2V0c1xuICAgICAgICAgIGlmICgoMCwgX2lzLmlzTm9kZSkocHJvcGVydHlbbWF0Y2hbMl1dICYmIHByb3BlcnR5W21hdGNoWzJdXSkpIHtcbiAgICAgICAgICAgIGxhdGV4ICs9IHByb3BlcnR5W21hdGNoWzJdXS50b1RleChvcHRpb25zKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGVtcGxhdGU6ICcgKyBtYXRjaFsxXSArICdbJyArIG1hdGNoWzJdICsgJ10gaXMgbm90IGEgTm9kZS4nKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsYXRleCArPSB0ZW1wbGF0ZS5zbGljZShpbnB1dFBvcyk7IC8vIGFwcGVuZCByZXN0IG9mIHRoZSB0ZW1wbGF0ZVxuXG4gICAgcmV0dXJuIGxhdGV4O1xuICB9IC8vIGJhY2t1cCBOb2RlJ3MgdG9UZXggZnVuY3Rpb25cbiAgLy8gQHByaXZhdGVcblxuXG4gIHZhciBub2RlVG9UZXggPSBGdW5jdGlvbk5vZGUucHJvdG90eXBlLnRvVGV4O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uLiAod3JhcHBlciBmdW5jdGlvbilcbiAgICogVGhpcyBvdmVycmlkZXMgcGFydHMgb2YgTm9kZSdzIHRvVGV4IGZ1bmN0aW9uLlxuICAgKiBJZiBjYWxsYmFjayBpcyBhbiBvYmplY3QgY29udGFpbmluZyBjYWxsYmFja3MsIGl0XG4gICAqIGNhbGxzIHRoZSBjb3JyZWN0IGNhbGxiYWNrIGZvciB0aGUgY3VycmVudCBub2RlLFxuICAgKiBvdGhlcndpc2UgaXQgZmFsbHMgYmFjayB0byBjYWxsaW5nIE5vZGUncyB0b1RleFxuICAgKiBmdW5jdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuICBGdW5jdGlvbk5vZGUucHJvdG90eXBlLnRvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgY3VzdG9tVGV4O1xuXG4gICAgaWYgKG9wdGlvbnMgJiYgX3R5cGVvZihvcHRpb25zLmhhbmRsZXIpID09PSAnb2JqZWN0JyAmJiAoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkob3B0aW9ucy5oYW5kbGVyLCB0aGlzLm5hbWUpKSB7XG4gICAgICAvLyBjYWxsYmFjayBpcyBhIG1hcCBvZiBjYWxsYmFjayBmdW5jdGlvbnNcbiAgICAgIGN1c3RvbVRleCA9IG9wdGlvbnMuaGFuZGxlclt0aGlzLm5hbWVdKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY3VzdG9tVGV4ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGN1c3RvbVRleDtcbiAgICB9IC8vIGZhbGwgYmFjayB0byBOb2RlJ3MgdG9UZXhcblxuXG4gICAgcmV0dXJuIG5vZGVUb1RleC5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Ob2RlLnByb3RvdHlwZS5fdG9UZXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBhcmdzID0gdGhpcy5hcmdzLm1hcChmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAvLyBnZXQgTGFUZVggb2YgdGhlIGFyZ3VtZW50c1xuICAgICAgcmV0dXJuIGFyZy50b1RleChvcHRpb25zKTtcbiAgICB9KTtcbiAgICB2YXIgbGF0ZXhDb252ZXJ0ZXI7XG5cbiAgICBpZiAoX2xhdGV4LmxhdGV4RnVuY3Rpb25zW3RoaXMubmFtZV0pIHtcbiAgICAgIGxhdGV4Q29udmVydGVyID0gX2xhdGV4LmxhdGV4RnVuY3Rpb25zW3RoaXMubmFtZV07XG4gICAgfSAvLyB0b1RleCBwcm9wZXJ0eSBvbiB0aGUgZnVuY3Rpb24gaXRzZWxmXG5cblxuICAgIGlmIChtYXRoW3RoaXMubmFtZV0gJiYgKHR5cGVvZiBtYXRoW3RoaXMubmFtZV0udG9UZXggPT09ICdmdW5jdGlvbicgfHwgX3R5cGVvZihtYXRoW3RoaXMubmFtZV0udG9UZXgpID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgbWF0aFt0aGlzLm5hbWVdLnRvVGV4ID09PSAnc3RyaW5nJykpIHtcbiAgICAgIC8vIC50b1RleCBpcyBhIGNhbGxiYWNrIGZ1bmN0aW9uXG4gICAgICBsYXRleENvbnZlcnRlciA9IG1hdGhbdGhpcy5uYW1lXS50b1RleDtcbiAgICB9XG5cbiAgICB2YXIgY3VzdG9tVG9UZXg7XG5cbiAgICBzd2l0Y2ggKF90eXBlb2YobGF0ZXhDb252ZXJ0ZXIpKSB7XG4gICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgIC8vIGEgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICAgICAgY3VzdG9tVG9UZXggPSBsYXRleENvbnZlcnRlcih0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIC8vIGEgdGVtcGxhdGUgc3RyaW5nXG4gICAgICAgIGN1c3RvbVRvVGV4ID0gZXhwYW5kVGVtcGxhdGUobGF0ZXhDb252ZXJ0ZXIsIHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgLy8gYW4gb2JqZWN0IHdpdGggZGlmZmVyZW50IFwiY29udmVydGVyc1wiIGZvciBkaWZmZXJlbnQgbnVtYmVycyBvZiBhcmd1bWVudHNcbiAgICAgICAgc3dpdGNoIChfdHlwZW9mKGxhdGV4Q29udmVydGVyW2FyZ3MubGVuZ3RoXSkpIHtcbiAgICAgICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgICAgICBjdXN0b21Ub1RleCA9IGxhdGV4Q29udmVydGVyW2FyZ3MubGVuZ3RoXSh0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICAgIGN1c3RvbVRvVGV4ID0gZXhwYW5kVGVtcGxhdGUobGF0ZXhDb252ZXJ0ZXJbYXJncy5sZW5ndGhdLCB0aGlzLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGN1c3RvbVRvVGV4ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGN1c3RvbVRvVGV4O1xuICAgIH1cblxuICAgIHJldHVybiBleHBhbmRUZW1wbGF0ZShfbGF0ZXguZGVmYXVsdFRlbXBsYXRlLCB0aGlzLCBvcHRpb25zKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBpZGVudGlmaWVyLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgRnVuY3Rpb25Ob2RlLnByb3RvdHlwZS5nZXRJZGVudGlmaWVyID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgKyAnOicgKyB0aGlzLm5hbWU7XG4gIH07XG5cbiAgcmV0dXJuIEZ1bmN0aW9uTm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRnVuY3Rpb25Ob2RlID0gY3JlYXRlRnVuY3Rpb25Ob2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJbmRleE5vZGUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoaXRlcikpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbnZhciBuYW1lID0gJ0luZGV4Tm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydSYW5nZScsICdOb2RlJywgJ3NpemUnXTtcbnZhciBjcmVhdGVJbmRleE5vZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgUmFuZ2UgPSBfcmVmLlJhbmdlLFxuICAgICAgTm9kZSA9IF9yZWYuTm9kZSxcbiAgICAgIHNpemUgPSBfcmVmLnNpemU7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBJbmRleE5vZGVcbiAgICogQGV4dGVuZHMgTm9kZVxuICAgKlxuICAgKiBEZXNjcmliZXMgYSBzdWJzZXQgb2YgYSBtYXRyaXggb3IgYW4gb2JqZWN0IHByb3BlcnR5LlxuICAgKiBDYW5ub3QgYmUgdXNlZCBvbiBpdHMgb3duLCBuZWVkcyB0byBiZSB1c2VkIHdpdGhpbiBhbiBBY2Nlc3Nvck5vZGUgb3JcbiAgICogQXNzaWdubWVudE5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZVtdfSBkaW1lbnNpb25zXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RvdE5vdGF0aW9uPWZhbHNlXSAgT3B0aW9uYWwgcHJvcGVydHkgZGVzY3JpYmluZyB3aGV0aGVyXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyBpbmRleCB3YXMgd3JpdHRlbiB1c2luZyBkb3RcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RhdGlvbiBsaWtlIGBhLmJgLCBvciB1c2luZyBicmFja2V0XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90YXRpb24gbGlrZSBgYVtcImJcIl1gIChkZWZhdWx0KS5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVc2VkIHRvIHN0cmluZ2lmeSBhbiBJbmRleE5vZGUuXG4gICAqL1xuICBmdW5jdGlvbiBJbmRleE5vZGUoZGltZW5zaW9ucywgZG90Tm90YXRpb24pIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgSW5kZXhOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICB0aGlzLmRpbWVuc2lvbnMgPSBkaW1lbnNpb25zO1xuICAgIHRoaXMuZG90Tm90YXRpb24gPSBkb3ROb3RhdGlvbiB8fCBmYWxzZTsgLy8gdmFsaWRhdGUgaW5wdXRcblxuICAgIGlmICghQXJyYXkuaXNBcnJheShkaW1lbnNpb25zKSB8fCAhZGltZW5zaW9ucy5ldmVyeShfaXMuaXNOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgY29udGFpbmluZyBOb2RlcyBleHBlY3RlZCBmb3IgcGFyYW1ldGVyIFwiZGltZW5zaW9uc1wiJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZG90Tm90YXRpb24gJiYgIXRoaXMuaXNPYmplY3RQcm9wZXJ0eSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2RvdE5vdGF0aW9uIG9ubHkgYXBwbGljYWJsZSBmb3Igb2JqZWN0IHByb3BlcnRpZXMnKTtcbiAgICB9IC8vIFRPRE86IGRlcHJlY2F0ZWQgc2luY2UgdjMsIHJlbW92ZSBzb21lIGRheVxuXG5cbiAgICB2YXIgZGVwcmVjYXRlZCA9IGZ1bmN0aW9uIGRlcHJlY2F0ZWQoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb3BlcnR5IGBJbmRleE5vZGUub2JqZWN0YCBpcyBkZXByZWNhdGVkLCB1c2UgYEluZGV4Tm9kZS5mbmAgaW5zdGVhZCcpO1xuICAgIH07XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ29iamVjdCcsIHtcbiAgICAgIGdldDogZGVwcmVjYXRlZCxcbiAgICAgIHNldDogZGVwcmVjYXRlZFxuICAgIH0pO1xuICB9XG5cbiAgSW5kZXhOb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7XG4gIEluZGV4Tm9kZS5wcm90b3R5cGUudHlwZSA9ICdJbmRleE5vZGUnO1xuICBJbmRleE5vZGUucHJvdG90eXBlLmlzSW5kZXhOb2RlID0gdHJ1ZTtcbiAgLyoqXG4gICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLlxuICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuXG4gICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9sc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKilcbiAgICovXG5cbiAgSW5kZXhOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIC8vIFRPRE86IGltcGxlbWVudCBzdXBwb3J0IGZvciBiaWdudW1iZXIgKGN1cnJlbnRseSBiaWdudW1iZXJzIGFyZSBzaWxlbnRseVxuICAgIC8vICAgICAgIHJlZHVjZWQgdG8gbnVtYmVycyB3aGVuIGNoYW5naW5nIHRoZSB2YWx1ZSB0byB6ZXJvLWJhc2VkKVxuICAgIC8vIFRPRE86IE9wdGltaXphdGlvbjogd2hlbiB0aGUgcmFuZ2UgdmFsdWVzIGFyZSBDb25zdGFudE5vZGVzLFxuICAgIC8vICAgICAgIHdlIGNhbiBiZWZvcmVoYW5kIHJlc29sdmUgdGhlIHplcm8tYmFzZWQgdmFsdWVcbiAgICAvLyBvcHRpbWl6YXRpb24gZm9yIGEgc2ltcGxlIG9iamVjdCBwcm9wZXJ0eVxuICAgIHZhciBldmFsRGltZW5zaW9ucyA9ICgwLCBfYXJyYXkubWFwKSh0aGlzLmRpbWVuc2lvbnMsIGZ1bmN0aW9uIChyYW5nZSwgaSkge1xuICAgICAgaWYgKCgwLCBfaXMuaXNSYW5nZU5vZGUpKHJhbmdlKSkge1xuICAgICAgICBpZiAocmFuZ2UubmVlZHNFbmQoKSkge1xuICAgICAgICAgIC8vIGNyZWF0ZSBhIHJhbmdlIGNvbnRhaW5pbmcgZW5kIChsaWtlICc0OmVuZCcpXG4gICAgICAgICAgdmFyIGNoaWxkQXJnTmFtZXMgPSBPYmplY3QuY3JlYXRlKGFyZ05hbWVzKTtcbiAgICAgICAgICBjaGlsZEFyZ05hbWVzLmVuZCA9IHRydWU7XG5cbiAgICAgICAgICB2YXIgZXZhbFN0YXJ0ID0gcmFuZ2Uuc3RhcnQuX2NvbXBpbGUobWF0aCwgY2hpbGRBcmdOYW1lcyk7XG5cbiAgICAgICAgICB2YXIgZXZhbEVuZCA9IHJhbmdlLmVuZC5fY29tcGlsZShtYXRoLCBjaGlsZEFyZ05hbWVzKTtcblxuICAgICAgICAgIHZhciBldmFsU3RlcCA9IHJhbmdlLnN0ZXAgPyByYW5nZS5zdGVwLl9jb21waWxlKG1hdGgsIGNoaWxkQXJnTmFtZXMpIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbERpbWVuc2lvbihzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICAgICAgdmFyIHMgPSBzaXplKGNvbnRleHQpLnZhbHVlT2YoKTtcbiAgICAgICAgICAgIHZhciBjaGlsZEFyZ3MgPSBPYmplY3QuY3JlYXRlKGFyZ3MpO1xuICAgICAgICAgICAgY2hpbGRBcmdzLmVuZCA9IHNbaV07XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlUmFuZ2UoZXZhbFN0YXJ0KHNjb3BlLCBjaGlsZEFyZ3MsIGNvbnRleHQpLCBldmFsRW5kKHNjb3BlLCBjaGlsZEFyZ3MsIGNvbnRleHQpLCBldmFsU3RlcChzY29wZSwgY2hpbGRBcmdzLCBjb250ZXh0KSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBjcmVhdGUgcmFuZ2VcbiAgICAgICAgICB2YXIgX2V2YWxTdGFydCA9IHJhbmdlLnN0YXJ0Ll9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgICAgICAgIHZhciBfZXZhbEVuZCA9IHJhbmdlLmVuZC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG5cbiAgICAgICAgICB2YXIgX2V2YWxTdGVwID0gcmFuZ2Uuc3RlcCA/IHJhbmdlLnN0ZXAuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpIDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsRGltZW5zaW9uKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlUmFuZ2UoX2V2YWxTdGFydChzY29wZSwgYXJncywgY29udGV4dCksIF9ldmFsRW5kKHNjb3BlLCBhcmdzLCBjb250ZXh0KSwgX2V2YWxTdGVwKHNjb3BlLCBhcmdzLCBjb250ZXh0KSk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzU3ltYm9sTm9kZSkocmFuZ2UpICYmIHJhbmdlLm5hbWUgPT09ICdlbmQnKSB7XG4gICAgICAgIC8vIFN5bWJvbE5vZGUgJ2VuZCdcbiAgICAgICAgdmFyIF9jaGlsZEFyZ05hbWVzID0gT2JqZWN0LmNyZWF0ZShhcmdOYW1lcyk7XG5cbiAgICAgICAgX2NoaWxkQXJnTmFtZXMuZW5kID0gdHJ1ZTtcblxuICAgICAgICB2YXIgZXZhbFJhbmdlID0gcmFuZ2UuX2NvbXBpbGUobWF0aCwgX2NoaWxkQXJnTmFtZXMpO1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsRGltZW5zaW9uKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgICAgdmFyIHMgPSBzaXplKGNvbnRleHQpLnZhbHVlT2YoKTtcbiAgICAgICAgICB2YXIgY2hpbGRBcmdzID0gT2JqZWN0LmNyZWF0ZShhcmdzKTtcbiAgICAgICAgICBjaGlsZEFyZ3MuZW5kID0gc1tpXTtcbiAgICAgICAgICByZXR1cm4gZXZhbFJhbmdlKHNjb3BlLCBjaGlsZEFyZ3MsIGNvbnRleHQpO1xuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQ29uc3RhbnROb2RlXG4gICAgICAgIHZhciBfZXZhbFJhbmdlID0gcmFuZ2UuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsRGltZW5zaW9uKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgICAgcmV0dXJuIF9ldmFsUmFuZ2Uoc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgIH0pO1xuICAgIHZhciBpbmRleCA9ICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKG1hdGgsICdpbmRleCcpO1xuICAgIHJldHVybiBmdW5jdGlvbiBldmFsSW5kZXhOb2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICB2YXIgZGltZW5zaW9ucyA9ICgwLCBfYXJyYXkubWFwKShldmFsRGltZW5zaW9ucywgZnVuY3Rpb24gKGV2YWxEaW1lbnNpb24pIHtcbiAgICAgICAgcmV0dXJuIGV2YWxEaW1lbnNpb24oc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gaW5kZXguYXBwbHkodm9pZCAwLCBfdG9Db25zdW1hYmxlQXJyYXkoZGltZW5zaW9ucykpO1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgSW5kZXhOb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmRpbWVuc2lvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNhbGxiYWNrKHRoaXMuZGltZW5zaW9uc1tpXSwgJ2RpbWVuc2lvbnNbJyArIGkgKyAnXScsIHRoaXMpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBJbmRleE5vZGUgaGF2aW5nIGl0J3MgY2hpbGRzIGJlIHRoZSByZXN1bHRzIG9mIGNhbGxpbmdcbiAgICogdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBjaGlsZHMgb2YgdGhlIG9yaWdpbmFsIG5vZGUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKTogTm9kZX0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge0luZGV4Tm9kZX0gUmV0dXJucyBhIHRyYW5zZm9ybWVkIGNvcHkgb2YgdGhlIG5vZGVcbiAgICovXG5cblxuICBJbmRleE5vZGUucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciBkaW1lbnNpb25zID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZGltZW5zaW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgZGltZW5zaW9uc1tpXSA9IHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLmRpbWVuc2lvbnNbaV0sICdkaW1lbnNpb25zWycgKyBpICsgJ10nLCB0aGlzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbmRleE5vZGUoZGltZW5zaW9ucywgdGhpcy5kb3ROb3RhdGlvbik7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge0luZGV4Tm9kZX1cbiAgICovXG5cblxuICBJbmRleE5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgSW5kZXhOb2RlKHRoaXMuZGltZW5zaW9ucy5zbGljZSgwKSwgdGhpcy5kb3ROb3RhdGlvbik7XG4gIH07XG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgdGhpcyBJbmRleE5vZGUgY29udGFpbnMgYSBzaW5nbGUgcHJvcGVydHkgbmFtZVxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cblxuXG4gIEluZGV4Tm9kZS5wcm90b3R5cGUuaXNPYmplY3RQcm9wZXJ0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5kaW1lbnNpb25zLmxlbmd0aCA9PT0gMSAmJiAoMCwgX2lzLmlzQ29uc3RhbnROb2RlKSh0aGlzLmRpbWVuc2lvbnNbMF0pICYmIHR5cGVvZiB0aGlzLmRpbWVuc2lvbnNbMF0udmFsdWUgPT09ICdzdHJpbmcnO1xuICB9O1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgcHJvcGVydHkgbmFtZSBpZiBJbmRleE5vZGUgY29udGFpbnMgYSBwcm9wZXJ0eS5cbiAgICogSWYgbm90LCByZXR1cm5zIG51bGwuXG4gICAqIEByZXR1cm4ge3N0cmluZyB8IG51bGx9XG4gICAqL1xuXG5cbiAgSW5kZXhOb2RlLnByb3RvdHlwZS5nZXRPYmplY3RQcm9wZXJ0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5pc09iamVjdFByb3BlcnR5KCkgPyB0aGlzLmRpbWVuc2lvbnNbMF0udmFsdWUgOiBudWxsO1xuICB9O1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIEluZGV4Tm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAvLyBmb3JtYXQgdGhlIHBhcmFtZXRlcnMgbGlrZSBcIlsxLCAwOjVdXCJcbiAgICByZXR1cm4gdGhpcy5kb3ROb3RhdGlvbiA/ICcuJyArIHRoaXMuZ2V0T2JqZWN0UHJvcGVydHkoKSA6ICdbJyArIHRoaXMuZGltZW5zaW9ucy5qb2luKCcsICcpICsgJ10nO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIEluZGV4Tm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdJbmRleE5vZGUnLFxuICAgICAgZGltZW5zaW9uczogdGhpcy5kaW1lbnNpb25zLFxuICAgICAgZG90Tm90YXRpb246IHRoaXMuZG90Tm90YXRpb25cbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYW4gSW5kZXhOb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJJbmRleE5vZGVcIiwgZGltZW5zaW9uczogWy4uLl0sIGRvdE5vdGF0aW9uOiBmYWxzZX1gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtJbmRleE5vZGV9XG4gICAqL1xuXG5cbiAgSW5kZXhOb2RlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IEluZGV4Tm9kZShqc29uLmRpbWVuc2lvbnMsIGpzb24uZG90Tm90YXRpb24pO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBJbmRleE5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgLy8gZm9ybWF0IHRoZSBwYXJhbWV0ZXJzIGxpa2UgXCJbMSwgMDo1XVwiXG4gICAgdmFyIGRpbWVuc2lvbnMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5kaW1lbnNpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICBkaW1lbnNpb25zW2ldID0gdGhpcy5kaW1lbnNpb25zW2ldLnRvSFRNTCgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmRvdE5vdGF0aW9uKSB7XG4gICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLWFjY2Vzc29yLW9wZXJhdG9yXCI+Ljwvc3Bhbj4nICsgJzxzcGFuIGNsYXNzPVwibWF0aC1zeW1ib2wgbWF0aC1wcm9wZXJ0eVwiPicgKyAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMuZ2V0T2JqZWN0UHJvcGVydHkoKSkgKyAnPC9zcGFuPic7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtc3F1YXJlLXBhcmVudGhlc2lzXCI+Wzwvc3Bhbj4nICsgZGltZW5zaW9ucy5qb2luKCc8c3BhbiBjbGFzcz1cIm1hdGgtc2VwYXJhdG9yXCI+LDwvc3Bhbj4nKSArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1zcXVhcmUtcGFyZW50aGVzaXNcIj5dPC9zcGFuPic7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgSW5kZXhOb2RlLnByb3RvdHlwZS5fdG9UZXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBkaW1lbnNpb25zID0gdGhpcy5kaW1lbnNpb25zLm1hcChmdW5jdGlvbiAocmFuZ2UpIHtcbiAgICAgIHJldHVybiByYW5nZS50b1RleChvcHRpb25zKTtcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5kb3ROb3RhdGlvbiA/ICcuJyArIHRoaXMuZ2V0T2JqZWN0UHJvcGVydHkoKSArICcnIDogJ197JyArIGRpbWVuc2lvbnMuam9pbignLCcpICsgJ30nO1xuICB9OyAvLyBoZWxwZXIgZnVuY3Rpb24gdG8gY3JlYXRlIGEgUmFuZ2UgZnJvbSBzdGFydCwgc3RlcCBhbmQgZW5kXG5cblxuICBmdW5jdGlvbiBjcmVhdGVSYW5nZShzdGFydCwgZW5kLCBzdGVwKSB7XG4gICAgcmV0dXJuIG5ldyBSYW5nZSgoMCwgX2lzLmlzQmlnTnVtYmVyKShzdGFydCkgPyBzdGFydC50b051bWJlcigpIDogc3RhcnQsICgwLCBfaXMuaXNCaWdOdW1iZXIpKGVuZCkgPyBlbmQudG9OdW1iZXIoKSA6IGVuZCwgKDAsIF9pcy5pc0JpZ051bWJlcikoc3RlcCkgPyBzdGVwLnRvTnVtYmVyKCkgOiBzdGVwKTtcbiAgfVxuXG4gIHJldHVybiBJbmRleE5vZGU7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWUsXG4gIGlzTm9kZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUluZGV4Tm9kZSA9IGNyZWF0ZUluZGV4Tm9kZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTm9kZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9rZXl3b3JkcyA9IHJlcXVpcmUoXCIuLi9rZXl3b3Jkc1wiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9sb2cgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbG9nXCIpO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBuYW1lID0gJ05vZGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnbWF0aFdpdGhUcmFuc2Zvcm0nXTtcbnZhciBjcmVhdGVOb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIG1hdGhXaXRoVHJhbnNmb3JtID0gX3JlZi5tYXRoV2l0aFRyYW5zZm9ybTtcblxuICAvKipcbiAgICogTm9kZVxuICAgKi9cbiAgZnVuY3Rpb24gTm9kZSgpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgTm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBFdmFsdWF0ZSB0aGUgbm9kZVxuICAgKiBAcGFyYW0ge09iamVjdH0gW3Njb3BlXSAgU2NvcGUgdG8gcmVhZC93cml0ZSB2YXJpYWJsZXNcbiAgICogQHJldHVybiB7Kn0gICAgICAgICAgICAgIFJldHVybnMgdGhlIHJlc3VsdFxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLmV2YWx1YXRlID0gZnVuY3Rpb24gKHNjb3BlKSB7XG4gICAgcmV0dXJuIHRoaXMuY29tcGlsZSgpLmV2YWx1YXRlKHNjb3BlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEV2YWx1YXRlIHRoZSBub2RlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbc2NvcGVdICBTY29wZSB0byByZWFkL3dyaXRlIHZhcmlhYmxlc1xuICAgKiBAcmV0dXJuIHsqfSAgICAgICAgICAgICAgUmV0dXJucyB0aGUgcmVzdWx0XG4gICAqL1xuICAvLyBUT0RPOiBEZXByZWNhdGVkIHNpbmNlIHY2LjAuMC4gQ2xlYW4gdXAgc29tZSBkYXlcblxuXG4gIE5vZGUucHJvdG90eXBlLmV2YWwgPSBmdW5jdGlvbiAoc2NvcGUpIHtcbiAgICAoMCwgX2xvZy53YXJuT25jZSkoJ01ldGhvZCBOb2RlLmV2YWwgaXMgcmVuYW1lZCB0byBOb2RlLmV2YWx1YXRlLiBQbGVhc2UgdXNlIHRoZSBuZXcgbWV0aG9kIG5hbWUuJyk7XG4gICAgcmV0dXJuIHRoaXMuZXZhbHVhdGUoc2NvcGUpO1xuICB9O1xuXG4gIE5vZGUucHJvdG90eXBlLnR5cGUgPSAnTm9kZSc7XG4gIE5vZGUucHJvdG90eXBlLmlzTm9kZSA9IHRydWU7XG4gIE5vZGUucHJvdG90eXBlLmNvbW1lbnQgPSAnJztcbiAgLyoqXG4gICAqIENvbXBpbGUgdGhlIG5vZGUgaW50byBhbiBvcHRpbWl6ZWQsIGV2YXVhdGFibGUgSmF2YVNjcmlwdCBmdW5jdGlvblxuICAgKiBAcmV0dXJuIHt7ZXZhbHVhdGU6IGZ1bmN0aW9uKFtPYmplY3RdKX19IG9iamVjdFxuICAgKiAgICAgICAgICAgICAgICBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIGEgZnVuY3Rpb24gJ2V2YWx1YXRlJyxcbiAgICogICAgICAgICAgICAgICAgd2hpY2ggY2FuIGJlIGludm9rZWQgYXMgZXhwci5ldmFsdWF0ZShbc2NvcGU6IE9iamVjdF0pLFxuICAgKiAgICAgICAgICAgICAgICB3aGVyZSBzY29wZSBpcyBhbiBvcHRpb25hbCBvYmplY3Qgd2l0aFxuICAgKiAgICAgICAgICAgICAgICB2YXJpYWJsZXMuXG4gICAqL1xuXG4gIE5vZGUucHJvdG90eXBlLmNvbXBpbGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4cHIgPSB0aGlzLl9jb21waWxlKG1hdGhXaXRoVHJhbnNmb3JtLCB7fSk7XG5cbiAgICB2YXIgYXJncyA9IHt9O1xuICAgIHZhciBjb250ZXh0ID0gbnVsbDtcblxuICAgIGZ1bmN0aW9uIGV2YWx1YXRlKHNjb3BlKSB7XG4gICAgICB2YXIgcyA9IHNjb3BlIHx8IHt9O1xuXG4gICAgICBfdmFsaWRhdGVTY29wZShzKTtcblxuICAgICAgcmV0dXJuIGV4cHIocywgYXJncywgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGV2YWx1YXRlOiBldmFsdWF0ZSxcbiAgICAgIC8vIFRPRE86IERlcHJlY2F0ZWQgc2luY2UgdjYuMC4wLiBDbGVhbiB1cCBzb21lIGRheVxuICAgICAgZXZhbDogZnVuY3Rpb24gZGVwcmVjYXRlZEV2YWwoc2NvcGUpIHtcbiAgICAgICAgKDAsIF9sb2cud2Fybk9uY2UpKCdNZXRob2QgZXZhbCBpcyByZW5hbWVkIHRvIGV2YWx1YXRlLiBQbGVhc2UgdXNlIHRoZSBuZXcgbWV0aG9kLicpO1xuICAgICAgICByZXR1cm4gZXZhbHVhdGUoc2NvcGUpO1xuICAgICAgfVxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01ldGhvZCBfY29tcGlsZSBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYnkgdHlwZSAnICsgdGhpcy50eXBlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2tcbiAgICovXG5cblxuICBOb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBOb2RlIGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJ1biBmb3JFYWNoIG9uIGEgTm9kZSBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBOb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtPcGVyYXRvck5vZGV9IFJldHVybnMgYSB0cmFuc2Zvcm1lZCBjb3B5IG9mIHRoZSBub2RlXG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBOb2RlIGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHJ1biBtYXAgb24gYSBOb2RlIGludGVyZmFjZScpO1xuICB9O1xuICAvKipcbiAgICogVmFsaWRhdGUgd2hldGhlciBhbiBvYmplY3QgaXMgYSBOb2RlLCBmb3IgdXNlIHdpdGggbWFwXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiBAcmV0dXJucyB7Tm9kZX0gUmV0dXJucyB0aGUgaW5wdXQgaWYgaXQncyBhIG5vZGUsIGVsc2UgdGhyb3dzIGFuIEVycm9yXG4gICAqIEBwcm90ZWN0ZWRcbiAgICovXG5cblxuICBOb2RlLnByb3RvdHlwZS5faWZOb2RlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShub2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2FsbGJhY2sgZnVuY3Rpb24gbXVzdCByZXR1cm4gYSBOb2RlJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH07XG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSB0cmF2ZXJzZSBhbGwgbm9kZXMgaW4gYSBub2RlIHRyZWUuIEV4ZWN1dGVzIGdpdmVuIGNhbGxiYWNrIGZvclxuICAgKiB0aGlzIG5vZGUgYW5kIGVhY2ggb2YgaXRzIGNoaWxkIG5vZGVzLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG5vZGU6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2tcbiAgICogICAgICAgICAgQSBjYWxsYmFjayBjYWxsZWQgZm9yIGV2ZXJ5IG5vZGUgaW4gdGhlIG5vZGUgdHJlZS5cbiAgICovXG5cblxuICBOb2RlLnByb3RvdHlwZS50cmF2ZXJzZSA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIC8vIGV4ZWN1dGUgY2FsbGJhY2sgZm9yIGl0c2VsZlxuICAgIGNhbGxiYWNrKHRoaXMsIG51bGwsIG51bGwpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHN0YW5kYXJkL25vLWNhbGxiYWNrLWxpdGVyYWxcbiAgICAvLyByZWN1cnNpdmVseSB0cmF2ZXJzZSBvdmVyIGFsbCBjaGlsZHMgb2YgYSBub2RlXG5cbiAgICBmdW5jdGlvbiBfdHJhdmVyc2Uobm9kZSwgY2FsbGJhY2spIHtcbiAgICAgIG5vZGUuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQsIHBhdGgsIHBhcmVudCkge1xuICAgICAgICBjYWxsYmFjayhjaGlsZCwgcGF0aCwgcGFyZW50KTtcblxuICAgICAgICBfdHJhdmVyc2UoY2hpbGQsIGNhbGxiYWNrKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIF90cmF2ZXJzZSh0aGlzLCBjYWxsYmFjayk7XG4gIH07XG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSB0cmFuc2Zvcm0gYSBub2RlIHRyZWUgdmlhIGEgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgdG8gcmVwbGFjZSBhbGwgbm9kZXMgb2YgdHlwZSBTeW1ib2xOb2RlIGhhdmluZyBuYW1lICd4JyB3aXRoIGFcbiAgICogQ29uc3RhbnROb2RlIHdpdGggdmFsdWUgMjpcbiAgICpcbiAgICogICAgIGNvbnN0IHJlcyA9IE5vZGUudHJhbnNmb3JtKGZ1bmN0aW9uIChub2RlLCBwYXRoLCBwYXJlbnQpIHtcbiAgICogICAgICAgaWYgKG5vZGUgJiYgbm9kZS5pc1N5bWJvbE5vZGUpICYmIChub2RlLm5hbWUgPT09ICd4JykpIHtcbiAgICogICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZSgyKVxuICAgKiAgICAgICB9XG4gICAqICAgICAgIGVsc2Uge1xuICAgKiAgICAgICAgIHJldHVybiBub2RlXG4gICAqICAgICAgIH1cbiAgICogICAgIH0pXG4gICAqXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24obm9kZTogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpIDogTm9kZX0gY2FsbGJhY2tcbiAgICogICAgICAgICAgQSBtYXBwaW5nIGZ1bmN0aW9uIGFjY2VwdGluZyBhIG5vZGUsIGFuZCByZXR1cm5pbmdcbiAgICogICAgICAgICAgYSByZXBsYWNlbWVudCBmb3IgdGhlIG5vZGUgb3IgdGhlIG9yaWdpbmFsIG5vZGUuXG4gICAqICAgICAgICAgIFNpZ25hdHVyZTogY2FsbGJhY2sobm9kZTogTm9kZSwgaW5kZXg6IHN0cmluZywgcGFyZW50OiBOb2RlKSA6IE5vZGVcbiAgICogQHJldHVybiB7Tm9kZX0gUmV0dXJucyB0aGUgb3JpZ2luYWwgbm9kZSBvciBpdHMgcmVwbGFjZW1lbnRcbiAgICovXG5cblxuICBOb2RlLnByb3RvdHlwZS50cmFuc2Zvcm0gPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBmdW5jdGlvbiBfdHJhbnNmb3JtKGNoaWxkLCBwYXRoLCBwYXJlbnQpIHtcbiAgICAgIHZhciByZXBsYWNlbWVudCA9IGNhbGxiYWNrKGNoaWxkLCBwYXRoLCBwYXJlbnQpO1xuXG4gICAgICBpZiAocmVwbGFjZW1lbnQgIT09IGNoaWxkKSB7XG4gICAgICAgIC8vIHN0b3AgaXRlcmF0aW5nIHdoZW4gdGhlIG5vZGUgaXMgcmVwbGFjZWRcbiAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2hpbGQubWFwKF90cmFuc2Zvcm0pO1xuICAgIH1cblxuICAgIHJldHVybiBfdHJhbnNmb3JtKHRoaXMsIG51bGwsIG51bGwpO1xuICB9O1xuICAvKipcbiAgICogRmluZCBhbnkgbm9kZSBpbiB0aGUgbm9kZSB0cmVlIG1hdGNoaW5nIGdpdmVuIGZpbHRlciBmdW5jdGlvbi4gRm9yIGV4YW1wbGUsIHRvXG4gICAqIGZpbmQgYWxsIG5vZGVzIG9mIHR5cGUgU3ltYm9sTm9kZSBoYXZpbmcgbmFtZSAneCc6XG4gICAqXG4gICAqICAgICBjb25zdCByZXN1bHRzID0gTm9kZS5maWx0ZXIoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICogICAgICAgcmV0dXJuIChub2RlICYmIG5vZGUuaXNTeW1ib2xOb2RlKSAmJiAobm9kZS5uYW1lID09PSAneCcpXG4gICAqICAgICB9KVxuICAgKlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKG5vZGU6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKSA6IE5vZGV9IGNhbGxiYWNrXG4gICAqICAgICAgICAgICAgQSB0ZXN0IGZ1bmN0aW9uIHJldHVybmluZyB0cnVlIHdoZW4gYSBub2RlIG1hdGNoZXMsIGFuZCBmYWxzZVxuICAgKiAgICAgICAgICAgIG90aGVyd2lzZS4gRnVuY3Rpb24gc2lnbmF0dXJlOlxuICAgKiAgICAgICAgICAgIGNhbGxiYWNrKG5vZGU6IE5vZGUsIGluZGV4OiBzdHJpbmcsIHBhcmVudDogTm9kZSkgOiBib29sZWFuXG4gICAqIEByZXR1cm4ge05vZGVbXX0gbm9kZXMgICAgICAgQW4gYXJyYXkgd2l0aCBub2RlcyBtYXRjaGluZyBnaXZlbiBmaWx0ZXIgY3JpdGVyaWFcbiAgICovXG5cblxuICBOb2RlLnByb3RvdHlwZS5maWx0ZXIgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICB2YXIgbm9kZXMgPSBbXTtcbiAgICB0aGlzLnRyYXZlcnNlKGZ1bmN0aW9uIChub2RlLCBwYXRoLCBwYXJlbnQpIHtcbiAgICAgIGlmIChjYWxsYmFjayhub2RlLCBwYXRoLCBwYXJlbnQpKSB7XG4gICAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIG5vZGVzO1xuICB9OyAvLyBUT0RPOiBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMS4xLjAsIHJlbW92ZSB0aGlzIHNvbWUgZGF5XG5cblxuICBOb2RlLnByb3RvdHlwZS5maW5kID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRnVuY3Rpb24gTm9kZS5maW5kIGlzIGRlcHJlY2F0ZWQuIFVzZSBOb2RlLmZpbHRlciBpbnN0ZWFkLicpO1xuICB9OyAvLyBUT0RPOiBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gMS4xLjAsIHJlbW92ZSB0aGlzIHNvbWUgZGF5XG5cblxuICBOb2RlLnByb3RvdHlwZS5tYXRjaCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Z1bmN0aW9uIE5vZGUubWF0Y2ggaXMgZGVwcmVjYXRlZC4gU2VlIGZ1bmN0aW9ucyBOb2RlLmZpbHRlciwgTm9kZS50cmFuc2Zvcm0sIE5vZGUudHJhdmVyc2UuJyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBzaGFsbG93IGNsb25lIG9mIHRoaXMgbm9kZVxuICAgKiBAcmV0dXJuIHtOb2RlfVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTm9kZSBpbXBsZW1lbnRhdGlvbnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjbG9uZSBhIE5vZGUgaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBkZWVwIGNsb25lIG9mIHRoaXMgbm9kZVxuICAgKiBAcmV0dXJuIHtOb2RlfVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLmNsb25lRGVlcCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIHJldHVybiBub2RlLmNsb25lRGVlcCgpO1xuICAgIH0pO1xuICB9O1xuICAvKipcbiAgICogRGVlcCBjb21wYXJlIHRoaXMgbm9kZSB3aXRoIGFub3RoZXIgbm9kZS5cbiAgICogQHBhcmFtIHtOb2RlfSBvdGhlclxuICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiBib3RoIG5vZGVzIGFyZSBvZiB0aGUgc2FtZSB0eXBlIGFuZFxuICAgKiAgICAgICAgICAgICAgICAgICBjb250YWluIHRoZSBzYW1lIHZhbHVlcyAoYXMgZG8gdGhlaXIgY2hpbGRzKVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIChvdGhlcikge1xuICAgIHJldHVybiBvdGhlciA/ICgwLCBfb2JqZWN0LmRlZXBTdHJpY3RFcXVhbCkodGhpcywgb3RoZXIpIDogZmFsc2U7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiAod3JhcHBlciBmdW5jdGlvbilcbiAgICpcbiAgICogVGhpcyBmdW5jdGlvbiBjYW4gZ2V0IGFuIG9iamVjdCBvZiB0aGUgZm9sbG93aW5nIGZvcm06XG4gICAqIHtcbiAgICogICAgaGFuZGxlcjogLy9UaGlzIGNhbiBiZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIG9mIHRoZSBmb3JtXG4gICAqICAgICAgICAgICAgIC8vIFwiZnVuY3Rpb24gY2FsbGJhY2sobm9kZSwgb3B0aW9ucylcIm9yXG4gICAqICAgICAgICAgICAgIC8vIGEgbWFwIHRoYXQgbWFwcyBmdW5jdGlvbiBuYW1lcyAodXNlZCBpbiBGdW5jdGlvbk5vZGVzKVxuICAgKiAgICAgICAgICAgICAvLyB0byBjYWxsYmFja3NcbiAgICogICAgcGFyZW50aGVzaXM6IFwia2VlcFwiIC8vdGhlIHBhcmVudGhlc2lzIG9wdGlvbiAoVGhpcyBpcyBvcHRpb25hbClcbiAgICogfVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBOb2RlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGN1c3RvbVN0cmluZztcblxuICAgIGlmIChvcHRpb25zICYmIF90eXBlb2Yob3B0aW9ucykgPT09ICdvYmplY3QnKSB7XG4gICAgICBzd2l0Y2ggKF90eXBlb2Yob3B0aW9ucy5oYW5kbGVyKSkge1xuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICBjYXNlICd1bmRlZmluZWQnOlxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICBjdXN0b21TdHJpbmcgPSBvcHRpb25zLmhhbmRsZXIodGhpcywgb3B0aW9ucyk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qgb3IgZnVuY3Rpb24gZXhwZWN0ZWQgYXMgY2FsbGJhY2snKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGN1c3RvbVN0cmluZyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBjdXN0b21TdHJpbmc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3RvU3RyaW5nKG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbm9kZVxuICAgKiBCb3RoIC50b0pTT04oKSBhbmQgdGhlIHN0YXRpYyAuZnJvbUpTT04oanNvbikgc2hvdWxkIGJlIGltcGxlbWVudGVkIGJ5IGFsbFxuICAgKiBpbXBsZW1lbnRhdGlvbnMgb2YgTm9kZVxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzZXJpYWxpemUgb2JqZWN0OiB0b0pTT04gbm90IGltcGxlbWVudGVkIGJ5ICcgKyB0aGlzLnR5cGUpO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb24uICh3cmFwcGVyIGZ1bmN0aW9uKVxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGNhbiBnZXQgYW4gb2JqZWN0IG9mIHRoZSBmb2xsb3dpbmcgZm9ybTpcbiAgICoge1xuICAgKiAgICBoYW5kbGVyOiAvL1RoaXMgY2FuIGJlIGEgY2FsbGJhY2sgZnVuY3Rpb24gb2YgdGhlIGZvcm1cbiAgICogICAgICAgICAgICAgLy8gXCJmdW5jdGlvbiBjYWxsYmFjayhub2RlLCBvcHRpb25zKVwiIG9yXG4gICAqICAgICAgICAgICAgIC8vIGEgbWFwIHRoYXQgbWFwcyBmdW5jdGlvbiBuYW1lcyAodXNlZCBpbiBGdW5jdGlvbk5vZGVzKVxuICAgKiAgICAgICAgICAgICAvLyB0byBjYWxsYmFja3NcbiAgICogICAgcGFyZW50aGVzaXM6IFwia2VlcFwiIC8vdGhlIHBhcmVudGhlc2lzIG9wdGlvbiAoVGhpcyBpcyBvcHRpb25hbClcbiAgICogfVxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBOb2RlLnByb3RvdHlwZS50b0hUTUwgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBjdXN0b21TdHJpbmc7XG5cbiAgICBpZiAob3B0aW9ucyAmJiBfdHlwZW9mKG9wdGlvbnMpID09PSAnb2JqZWN0Jykge1xuICAgICAgc3dpdGNoIChfdHlwZW9mKG9wdGlvbnMuaGFuZGxlcikpIHtcbiAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgICAgY3VzdG9tU3RyaW5nID0gb3B0aW9ucy5oYW5kbGVyKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0IG9yIGZ1bmN0aW9uIGV4cGVjdGVkIGFzIGNhbGxiYWNrJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjdXN0b21TdHJpbmcgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gY3VzdG9tU3RyaW5nO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRvSFRNTChvcHRpb25zKTtcbiAgfTtcbiAgLyoqXG4gICAqIEludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHRoZSBzdHJpbmcgb3V0cHV0LlxuICAgKiBUaGlzIGhhcyB0byBiZSBpbXBsZW1lbnRlZCBieSBldmVyeSBOb2RlXG4gICAqXG4gICAqIEB0aHJvd3Mge0Vycm9yfVxuICAgKi9cblxuXG4gIE5vZGUucHJvdG90eXBlLl90b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE5vZGUgaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdfdG9TdHJpbmcgbm90IGltcGxlbWVudGVkIGZvciAnICsgdGhpcy50eXBlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBMYVRlWCByZXByZXNlbnRhdGlvbi4gKHdyYXBwZXIgZnVuY3Rpb24pXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gY2FuIGdldCBhbiBvYmplY3Qgb2YgdGhlIGZvbGxvd2luZyBmb3JtOlxuICAgKiB7XG4gICAqICAgIGhhbmRsZXI6IC8vVGhpcyBjYW4gYmUgYSBjYWxsYmFjayBmdW5jdGlvbiBvZiB0aGUgZm9ybVxuICAgKiAgICAgICAgICAgICAvLyBcImZ1bmN0aW9uIGNhbGxiYWNrKG5vZGUsIG9wdGlvbnMpXCJvclxuICAgKiAgICAgICAgICAgICAvLyBhIG1hcCB0aGF0IG1hcHMgZnVuY3Rpb24gbmFtZXMgKHVzZWQgaW4gRnVuY3Rpb25Ob2RlcylcbiAgICogICAgICAgICAgICAgLy8gdG8gY2FsbGJhY2tzXG4gICAqICAgIHBhcmVudGhlc2lzOiBcImtlZXBcIiAvL3RoZSBwYXJlbnRoZXNpcyBvcHRpb24gKFRoaXMgaXMgb3B0aW9uYWwpXG4gICAqIH1cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgTm9kZS5wcm90b3R5cGUudG9UZXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBjdXN0b21UZXg7XG5cbiAgICBpZiAob3B0aW9ucyAmJiBfdHlwZW9mKG9wdGlvbnMpID09PSAnb2JqZWN0Jykge1xuICAgICAgc3dpdGNoIChfdHlwZW9mKG9wdGlvbnMuaGFuZGxlcikpIHtcbiAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgY2FzZSAndW5kZWZpbmVkJzpcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICAgICAgY3VzdG9tVGV4ID0gb3B0aW9ucy5oYW5kbGVyKHRoaXMsIG9wdGlvbnMpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0IG9yIGZ1bmN0aW9uIGV4cGVjdGVkIGFzIGNhbGxiYWNrJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjdXN0b21UZXggIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gY3VzdG9tVGV4O1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl90b1RleChvcHRpb25zKTtcbiAgfTtcbiAgLyoqXG4gICAqIEludGVybmFsIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHRoZSBMYVRlWCBvdXRwdXQuXG4gICAqIFRoaXMgaGFzIHRvIGJlIGltcGxlbWVudGVkIGJ5IGV2ZXJ5IE5vZGVcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICAgKiBAdGhyb3dzIHtFcnJvcn1cbiAgICovXG5cblxuICBOb2RlLnByb3RvdHlwZS5fdG9UZXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTm9kZSBpbXBsZW1lbnRhdGlvbnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ190b1RleCBub3QgaW1wbGVtZW50ZWQgZm9yICcgKyB0aGlzLnR5cGUpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGlkZW50aWZpZXIuXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBOb2RlLnByb3RvdHlwZS5nZXRJZGVudGlmaWVyID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGU7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIGNvbnRlbnQgb2YgdGhlIGN1cnJlbnQgTm9kZS5cbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiovXG5cblxuICBOb2RlLnByb3RvdHlwZS5nZXRDb250ZW50ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIHN5bWJvbCBuYW1lcyBvZiBhIHNjb3BlLlxuICAgKiBUaHJvd3MgYW4gZXJyb3Igd2hlbiB0aGUgc2NvcGUgY29udGFpbnMgYW4gaWxsZWdhbCBzeW1ib2wuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzY29wZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF92YWxpZGF0ZVNjb3BlKHNjb3BlKSB7XG4gICAgZm9yICh2YXIgc3ltYm9sIGluIHNjb3BlKSB7XG4gICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKHNjb3BlLCBzeW1ib2wpKSB7XG4gICAgICAgIGlmIChzeW1ib2wgaW4gX2tleXdvcmRzLmtleXdvcmRzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTY29wZSBjb250YWlucyBhbiBpbGxlZ2FsIHN5bWJvbCwgXCInICsgc3ltYm9sICsgJ1wiIGlzIGEgcmVzZXJ2ZWQga2V5d29yZCcpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIE5vZGU7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWUsXG4gIGlzTm9kZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU5vZGUgPSBjcmVhdGVOb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVPYmplY3ROb2RlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBuYW1lID0gJ09iamVjdE5vZGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnTm9kZSddO1xudmFyIGNyZWF0ZU9iamVjdE5vZGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgTm9kZSA9IF9yZWYuTm9kZTtcblxuICAvKipcbiAgICogQGNvbnN0cnVjdG9yIE9iamVjdE5vZGVcbiAgICogQGV4dGVuZHMge05vZGV9XG4gICAqIEhvbGRzIGFuIG9iamVjdCB3aXRoIGtleXMvdmFsdWVzXG4gICAqIEBwYXJhbSB7T2JqZWN0LjxzdHJpbmcsIE5vZGU+fSBbcHJvcGVydGllc10gICBvYmplY3Qgd2l0aCBrZXkvdmFsdWUgcGFpcnNcbiAgICovXG4gIGZ1bmN0aW9uIE9iamVjdE5vZGUocHJvcGVydGllcykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBPYmplY3ROb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIHx8IHt9OyAvLyB2YWxpZGF0ZSBpbnB1dFxuXG4gICAgaWYgKHByb3BlcnRpZXMpIHtcbiAgICAgIGlmICghKF90eXBlb2YocHJvcGVydGllcykgPT09ICdvYmplY3QnKSB8fCAhT2JqZWN0LmtleXMocHJvcGVydGllcykuZXZlcnkoZnVuY3Rpb24gKGtleSkge1xuICAgICAgICByZXR1cm4gKDAsIF9pcy5pc05vZGUpKHByb3BlcnRpZXNba2V5XSk7XG4gICAgICB9KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QgY29udGFpbmluZyBOb2RlcyBleHBlY3RlZCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIE9iamVjdE5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgT2JqZWN0Tm9kZS5wcm90b3R5cGUudHlwZSA9ICdPYmplY3ROb2RlJztcbiAgT2JqZWN0Tm9kZS5wcm90b3R5cGUuaXNPYmplY3ROb2RlID0gdHJ1ZTtcbiAgLyoqXG4gICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLlxuICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuXG4gICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9sc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKilcbiAgICovXG5cbiAgT2JqZWN0Tm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICB2YXIgZXZhbEVudHJpZXMgPSB7fTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnByb3BlcnRpZXMpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodGhpcy5wcm9wZXJ0aWVzLCBrZXkpKSB7XG4gICAgICAgIC8vIHdlIHN0cmluZ2lmeS9wYXJzZSB0aGUga2V5IGhlcmUgdG8gcmVzb2x2ZSB1bmljb2RlIGNoYXJhY3RlcnMsXG4gICAgICAgIC8vIHNvIHlvdSBjYW5ub3QgY3JlYXRlIGEga2V5IGxpa2Uge1wiY29cXFxcdTAwNkVzdHJ1Y3RvclwiOiBudWxsfVxuICAgICAgICB2YXIgc3RyaW5naWZpZWRLZXkgPSAoMCwgX3N0cmluZy5zdHJpbmdpZnkpKGtleSk7XG4gICAgICAgIHZhciBwYXJzZWRLZXkgPSBKU09OLnBhcnNlKHN0cmluZ2lmaWVkS2V5KTtcblxuICAgICAgICBpZiAoISgwLCBfY3VzdG9tcy5pc1NhZmVQcm9wZXJ0eSkodGhpcy5wcm9wZXJ0aWVzLCBwYXJzZWRLZXkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBhY2Nlc3MgdG8gcHJvcGVydHkgXCInICsgcGFyc2VkS2V5ICsgJ1wiJyk7XG4gICAgICAgIH1cblxuICAgICAgICBldmFsRW50cmllc1twYXJzZWRLZXldID0gdGhpcy5wcm9wZXJ0aWVzW2tleV0uX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmdW5jdGlvbiBldmFsT2JqZWN0Tm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgdmFyIG9iaiA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBfa2V5IGluIGV2YWxFbnRyaWVzKSB7XG4gICAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoZXZhbEVudHJpZXMsIF9rZXkpKSB7XG4gICAgICAgICAgb2JqW19rZXldID0gZXZhbEVudHJpZXNbX2tleV0oc2NvcGUsIGFyZ3MsIGNvbnRleHQpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2tcbiAgICovXG5cblxuICBPYmplY3ROb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KSh0aGlzLnByb3BlcnRpZXMsIGtleSkpIHtcbiAgICAgICAgY2FsbGJhY2sodGhpcy5wcm9wZXJ0aWVzW2tleV0sICdwcm9wZXJ0aWVzWycgKyAoMCwgX3N0cmluZy5zdHJpbmdpZnkpKGtleSkgKyAnXScsIHRoaXMpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBPYmplY3ROb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSk6IE5vZGV9IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHtPYmplY3ROb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIE9iamVjdE5vZGUucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciBwcm9wZXJ0aWVzID0ge307XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5wcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKHRoaXMucHJvcGVydGllcywga2V5KSkge1xuICAgICAgICBwcm9wZXJ0aWVzW2tleV0gPSB0aGlzLl9pZk5vZGUoY2FsbGJhY2sodGhpcy5wcm9wZXJ0aWVzW2tleV0sICdwcm9wZXJ0aWVzWycgKyAoMCwgX3N0cmluZy5zdHJpbmdpZnkpKGtleSkgKyAnXScsIHRoaXMpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE9iamVjdE5vZGUocHJvcGVydGllcyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge09iamVjdE5vZGV9XG4gICAqL1xuXG5cbiAgT2JqZWN0Tm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb3BlcnRpZXMgPSB7fTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnByb3BlcnRpZXMpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodGhpcy5wcm9wZXJ0aWVzLCBrZXkpKSB7XG4gICAgICAgIHByb3BlcnRpZXNba2V5XSA9IHRoaXMucHJvcGVydGllc1trZXldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgT2JqZWN0Tm9kZShwcm9wZXJ0aWVzKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICogQG92ZXJyaWRlXG4gICAqL1xuXG5cbiAgT2JqZWN0Tm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgZW50cmllcyA9IFtdO1xuXG4gICAgZm9yICh2YXIga2V5IGluIHRoaXMucHJvcGVydGllcykge1xuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KSh0aGlzLnByb3BlcnRpZXMsIGtleSkpIHtcbiAgICAgICAgZW50cmllcy5wdXNoKCgwLCBfc3RyaW5nLnN0cmluZ2lmeSkoa2V5KSArICc6ICcgKyB0aGlzLnByb3BlcnRpZXNba2V5XS50b1N0cmluZyhvcHRpb25zKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICd7JyArIGVudHJpZXMuam9pbignLCAnKSArICd9JztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBPYmplY3ROb2RlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ09iamVjdE5vZGUnLFxuICAgICAgcHJvcGVydGllczogdGhpcy5wcm9wZXJ0aWVzXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGFuIE9wZXJhdG9yTm9kZSBmcm9tIGl0cyBKU09OIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiT2JqZWN0Tm9kZVwiLCBcInByb3BlcnRpZXNcIjogey4uLn19YCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG1hdGhqcyBpcyBvcHRpb25hbFxuICAgKiBAcmV0dXJucyB7T2JqZWN0Tm9kZX1cbiAgICovXG5cblxuICBPYmplY3ROb2RlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IE9iamVjdE5vZGUoanNvbi5wcm9wZXJ0aWVzKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBIVE1MIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqIEBvdmVycmlkZVxuICAgKi9cblxuXG4gIE9iamVjdE5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGVudHJpZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGtleSBpbiB0aGlzLnByb3BlcnRpZXMpIHtcbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodGhpcy5wcm9wZXJ0aWVzLCBrZXkpKSB7XG4gICAgICAgIGVudHJpZXMucHVzaCgnPHNwYW4gY2xhc3M9XCJtYXRoLXN5bWJvbCBtYXRoLXByb3BlcnR5XCI+JyArICgwLCBfc3RyaW5nLmVzY2FwZSkoa2V5KSArICc8L3NwYW4+JyArICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1hc3NpZ25tZW50LW9wZXJhdG9yIG1hdGgtcHJvcGVydHktYXNzaWdubWVudC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvclwiPjo8L3NwYW4+JyArIHRoaXMucHJvcGVydGllc1trZXldLnRvSFRNTChvcHRpb25zKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1jdXJseS1wYXJlbnRoZXNpc1wiPns8L3NwYW4+JyArIGVudHJpZXMuam9pbignPHNwYW4gY2xhc3M9XCJtYXRoLXNlcGFyYXRvclwiPiw8L3NwYW4+JykgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtY3VybHktcGFyZW50aGVzaXNcIj59PC9zcGFuPic7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgTGFUZVggcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBPYmplY3ROb2RlLnByb3RvdHlwZS5fdG9UZXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBlbnRyaWVzID0gW107XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gdGhpcy5wcm9wZXJ0aWVzKSB7XG4gICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKHRoaXMucHJvcGVydGllcywga2V5KSkge1xuICAgICAgICBlbnRyaWVzLnB1c2goJ1xcXFxtYXRoYmZ7JyArIGtleSArICc6fSAmICcgKyB0aGlzLnByb3BlcnRpZXNba2V5XS50b1RleChvcHRpb25zKSArICdcXFxcXFxcXCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBcIlxcXFxsZWZ0XFxcXHtcXFxcYmVnaW57YXJyYXl9e2xsfVwiLmNvbmNhdChlbnRyaWVzLmpvaW4oJ1xcbicpLCBcIlxcXFxlbmR7YXJyYXl9XFxcXHJpZ2h0XFxcXH1cIik7XG4gIH07XG5cbiAgcmV0dXJuIE9iamVjdE5vZGU7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWUsXG4gIGlzTm9kZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU9iamVjdE5vZGUgPSBjcmVhdGVPYmplY3ROb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVPcGVyYXRvck5vZGUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9jdXN0b21zID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2N1c3RvbXNcIik7XG5cbnZhciBfb3BlcmF0b3JzID0gcmVxdWlyZShcIi4uL29wZXJhdG9yc1wiKTtcblxudmFyIF9sYXRleCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9sYXRleFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ09wZXJhdG9yTm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydOb2RlJ107XG52YXIgY3JlYXRlT3BlcmF0b3JOb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIE5vZGUgPSBfcmVmLk5vZGU7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBPcGVyYXRvck5vZGVcbiAgICogQGV4dGVuZHMge05vZGV9XG4gICAqIEFuIG9wZXJhdG9yIHdpdGggdHdvIGFyZ3VtZW50cywgbGlrZSAyKzNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wICAgICAgICAgICBPcGVyYXRvciBuYW1lLCBmb3IgZXhhbXBsZSAnKydcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZuICAgICAgICAgICBGdW5jdGlvbiBuYW1lLCBmb3IgZXhhbXBsZSAnYWRkJ1xuICAgKiBAcGFyYW0ge05vZGVbXX0gYXJncyAgICAgICAgIE9wZXJhdG9yIGFyZ3VtZW50c1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtpbXBsaWNpdF0gIElzIHRoaXMgYW4gaW1wbGljaXQgbXVsdGlwbGljYXRpb24/XG4gICAqL1xuICBmdW5jdGlvbiBPcGVyYXRvck5vZGUob3AsIGZuLCBhcmdzLCBpbXBsaWNpdCkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBPcGVyYXRvck5vZGUpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH0gLy8gdmFsaWRhdGUgaW5wdXRcblxuXG4gICAgaWYgKHR5cGVvZiBvcCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3N0cmluZyBleHBlY3RlZCBmb3IgcGFyYW1ldGVyIFwib3BcIicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdzdHJpbmcgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciBcImZuXCInKTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJncykgfHwgIWFyZ3MuZXZlcnkoX2lzLmlzTm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGNvbnRhaW5pbmcgTm9kZXMgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciBcImFyZ3NcIicpO1xuICAgIH1cblxuICAgIHRoaXMuaW1wbGljaXQgPSBpbXBsaWNpdCA9PT0gdHJ1ZTtcbiAgICB0aGlzLm9wID0gb3A7XG4gICAgdGhpcy5mbiA9IGZuO1xuICAgIHRoaXMuYXJncyA9IGFyZ3MgfHwgW107XG4gIH1cblxuICBPcGVyYXRvck5vZGUucHJvdG90eXBlID0gbmV3IE5vZGUoKTtcbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS50eXBlID0gJ09wZXJhdG9yTm9kZSc7XG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUuaXNPcGVyYXRvck5vZGUgPSB0cnVlO1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuICBPcGVyYXRvck5vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7XG4gICAgLy8gdmFsaWRhdGUgZm5cbiAgICBpZiAodHlwZW9mIHRoaXMuZm4gIT09ICdzdHJpbmcnIHx8ICEoMCwgX2N1c3RvbXMuaXNTYWZlTWV0aG9kKShtYXRoLCB0aGlzLmZuKSkge1xuICAgICAgaWYgKCFtYXRoW3RoaXMuZm5dKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignRnVuY3Rpb24gJyArIHRoaXMuZm4gKyAnIG1pc3NpbmcgaW4gcHJvdmlkZWQgbmFtZXNwYWNlIFwibWF0aFwiJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGFjY2VzcyB0byBmdW5jdGlvbiBcIicgKyB0aGlzLmZuICsgJ1wiJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGZuID0gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkobWF0aCwgdGhpcy5mbik7XG4gICAgdmFyIGV2YWxBcmdzID0gKDAsIF9hcnJheS5tYXApKHRoaXMuYXJncywgZnVuY3Rpb24gKGFyZykge1xuICAgICAgcmV0dXJuIGFyZy5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG4gICAgfSk7XG5cbiAgICBpZiAoZXZhbEFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICB2YXIgZXZhbEFyZzAgPSBldmFsQXJnc1swXTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsT3BlcmF0b3JOb2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBmbihldmFsQXJnMChzY29wZSwgYXJncywgY29udGV4dCkpO1xuICAgICAgfTtcbiAgICB9IGVsc2UgaWYgKGV2YWxBcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgdmFyIF9ldmFsQXJnID0gZXZhbEFyZ3NbMF07XG4gICAgICB2YXIgZXZhbEFyZzEgPSBldmFsQXJnc1sxXTtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBldmFsT3BlcmF0b3JOb2RlKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBmbihfZXZhbEFyZyhzY29wZSwgYXJncywgY29udGV4dCksIGV2YWxBcmcxKHNjb3BlLCBhcmdzLCBjb250ZXh0KSk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gZXZhbE9wZXJhdG9yTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgKDAsIF9hcnJheS5tYXApKGV2YWxBcmdzLCBmdW5jdGlvbiAoZXZhbEFyZykge1xuICAgICAgICAgIHJldHVybiBldmFsQXJnKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcbiAgICAgICAgfSkpO1xuICAgICAgfTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGVhY2ggb2YgdGhlIGNoaWxkIG5vZGVzIG9mIHRoaXMgbm9kZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSl9IGNhbGxiYWNrXG4gICAqL1xuXG5cbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNhbGxiYWNrKHRoaXMuYXJnc1tpXSwgJ2FyZ3NbJyArIGkgKyAnXScsIHRoaXMpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBPcGVyYXRvck5vZGUgaGF2aW5nIGl0J3MgY2hpbGRzIGJlIHRoZSByZXN1bHRzIG9mIGNhbGxpbmdcbiAgICogdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBjaGlsZHMgb2YgdGhlIG9yaWdpbmFsIG5vZGUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKTogTm9kZX0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge09wZXJhdG9yTm9kZX0gUmV0dXJucyBhIHRyYW5zZm9ybWVkIGNvcHkgb2YgdGhlIG5vZGVcbiAgICovXG5cblxuICBPcGVyYXRvck5vZGUucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciBhcmdzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgYXJnc1tpXSA9IHRoaXMuX2lmTm9kZShjYWxsYmFjayh0aGlzLmFyZ3NbaV0sICdhcmdzWycgKyBpICsgJ10nLCB0aGlzKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUodGhpcy5vcCwgdGhpcy5mbiwgYXJncywgdGhpcy5pbXBsaWNpdCk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge09wZXJhdG9yTm9kZX1cbiAgICovXG5cblxuICBPcGVyYXRvck5vZGUucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKHRoaXMub3AsIHRoaXMuZm4sIHRoaXMuYXJncy5zbGljZSgwKSwgdGhpcy5pbXBsaWNpdCk7XG4gIH07XG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYW4gdW5hcnkgT3BlcmF0b3JOb2RlOlxuICAgKiBoYXMgZXhhY3RseSBvbmUgYXJndW1lbnQsIGxpa2UgYC1hYC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW4gYW4gdW5hcnkgb3BlcmF0b3Igbm9kZSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cblxuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUuaXNVbmFyeSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5hcmdzLmxlbmd0aCA9PT0gMTtcbiAgfTtcbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgdGhpcyBpcyBhIGJpbmFyeSBPcGVyYXRvck5vZGU6XG4gICAqIGhhcyBleGFjdGx5IHR3byBhcmd1bWVudHMsIGxpa2UgYGEgKyBiYC5cbiAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW4gYSBiaW5hcnkgb3BlcmF0b3Igbm9kZSwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cblxuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUuaXNCaW5hcnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuYXJncy5sZW5ndGggPT09IDI7XG4gIH07XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgd2hpY2ggcGFyZW50aGVzZXMgYXJlIG5lY2Vzc2FyeS4gR2V0cyBhbiBPcGVyYXRvck5vZGVcbiAgICogKHdoaWNoIGlzIHRoZSByb290IG9mIHRoZSB0cmVlKSBhbmQgYW4gQXJyYXkgb2YgTm9kZXNcbiAgICogKHRoaXMuYXJncykgYW5kIHJldHVybnMgYW4gYXJyYXkgd2hlcmUgJ3RydWUnIG1lYW5zIHRoYXQgYW4gYXJndW1lbnRcbiAgICogaGFzIHRvIGJlIGVuY2xvc2VkIGluIHBhcmVudGhlc2VzIHdoZXJlYXMgJ2ZhbHNlJyBtZWFucyB0aGUgb3Bwb3NpdGUuXG4gICAqXG4gICAqIEBwYXJhbSB7T3BlcmF0b3JOb2RlfSByb290XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJlbnRoZXNpc1xuICAgKiBAcGFyYW0ge05vZGVbXX0gYXJnc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGxhdGV4XG4gICAqIEByZXR1cm4ge2Jvb2xlYW5bXX1cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBjYWxjdWxhdGVOZWNlc3NhcnlQYXJlbnRoZXNlcyhyb290LCBwYXJlbnRoZXNpcywgaW1wbGljaXQsIGFyZ3MsIGxhdGV4KSB7XG4gICAgLy8gcHJlY2VkZW5jZSBvZiB0aGUgcm9vdCBPcGVyYXRvck5vZGVcbiAgICB2YXIgcHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKHJvb3QsIHBhcmVudGhlc2lzKTtcbiAgICB2YXIgYXNzb2NpYXRpdml0eSA9ICgwLCBfb3BlcmF0b3JzLmdldEFzc29jaWF0aXZpdHkpKHJvb3QsIHBhcmVudGhlc2lzKTtcblxuICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgYXJncy5sZW5ndGggPiAyICYmIHJvb3QuZ2V0SWRlbnRpZmllcigpICE9PSAnT3BlcmF0b3JOb2RlOmFkZCcgJiYgcm9vdC5nZXRJZGVudGlmaWVyKCkgIT09ICdPcGVyYXRvck5vZGU6bXVsdGlwbHknKSB7XG4gICAgICByZXR1cm4gYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICBzd2l0Y2ggKGFyZy5nZXRDb250ZW50KCkudHlwZSkge1xuICAgICAgICAgIC8vIE5vZGVzIHRoYXQgZG9uJ3QgbmVlZCBleHRyYSBwYXJlbnRoZXNlc1xuICAgICAgICAgIGNhc2UgJ0FycmF5Tm9kZSc6XG4gICAgICAgICAgY2FzZSAnQ29uc3RhbnROb2RlJzpcbiAgICAgICAgICBjYXNlICdTeW1ib2xOb2RlJzpcbiAgICAgICAgICBjYXNlICdQYXJlbnRoZXNpc05vZGUnOlxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0O1xuXG4gICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMTpcbiAgICAgICAgLy8gdW5hcnkgb3BlcmF0b3JzXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBwcmVjZWRlbmNlIG9mIHRoZSBvcGVyYW5kXG4gICAgICAgICAgdmFyIG9wZXJhbmRQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkoYXJnc1swXSwgcGFyZW50aGVzaXMpOyAvLyBoYW5kbGUgc3BlY2lhbCBjYXNlcyBmb3IgTGFUZVgsIHdoZXJlIHNvbWUgb2YgdGhlIHBhcmVudGhlc2VzIGFyZW4ndCBuZWVkZWRcblxuICAgICAgICAgIGlmIChsYXRleCAmJiBvcGVyYW5kUHJlY2VkZW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgdmFyIG9wZXJhbmRJZGVudGlmaWVyO1xuICAgICAgICAgICAgdmFyIHJvb3RJZGVudGlmaWVyO1xuXG4gICAgICAgICAgICBpZiAocGFyZW50aGVzaXMgPT09ICdrZWVwJykge1xuICAgICAgICAgICAgICBvcGVyYW5kSWRlbnRpZmllciA9IGFyZ3NbMF0uZ2V0SWRlbnRpZmllcigpO1xuICAgICAgICAgICAgICByb290SWRlbnRpZmllciA9IHJvb3QuZ2V0SWRlbnRpZmllcigpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gSWdub3JlIFBhcmVudGhlc2lzIE5vZGVzIHdoZW4gbm90IGluICdrZWVwJyBtb2RlXG4gICAgICAgICAgICAgIG9wZXJhbmRJZGVudGlmaWVyID0gYXJnc1swXS5nZXRDb250ZW50KCkuZ2V0SWRlbnRpZmllcigpO1xuICAgICAgICAgICAgICByb290SWRlbnRpZmllciA9IHJvb3QuZ2V0Q29udGVudCgpLmdldElkZW50aWZpZXIoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKF9vcGVyYXRvcnMucHJvcGVydGllc1twcmVjZWRlbmNlXVtyb290SWRlbnRpZmllcl0ubGF0ZXhMZWZ0UGFyZW5zID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICByZXN1bHQgPSBbZmFsc2VdO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKF9vcGVyYXRvcnMucHJvcGVydGllc1tvcGVyYW5kUHJlY2VkZW5jZV1bb3BlcmFuZElkZW50aWZpZXJdLmxhdGV4UGFyZW5zID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICByZXN1bHQgPSBbZmFsc2VdO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAob3BlcmFuZFByZWNlZGVuY2UgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBvcGVyYW5kIGhhcyBubyBkZWZpbmVkIHByZWNlZGVuY2UsIG5vIHBhcmVucyBhcmUgbmVlZGVkXG4gICAgICAgICAgICByZXN1bHQgPSBbZmFsc2VdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKG9wZXJhbmRQcmVjZWRlbmNlIDw9IHByZWNlZGVuY2UpIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBvcGVyYW5kcyBwcmVjZWRlbmNlIGlzIGxvd2VyLCBwYXJlbnMgYXJlIG5lZWRlZFxuICAgICAgICAgICAgcmVzdWx0ID0gW3RydWVdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfSAvLyBvdGhlcndpc2UsIG5vIHBhcmVucyBuZWVkZWRcblxuXG4gICAgICAgICAgcmVzdWx0ID0gW2ZhbHNlXTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAyOlxuICAgICAgICAvLyBiaW5hcnkgb3BlcmF0b3JzXG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgbGhzUGFyZW5zOyAvLyBsZWZ0IGhhbmQgc2lkZSBuZWVkcyBwYXJlbnRoZXNpcz9cbiAgICAgICAgICAvLyBwcmVjZWRlbmNlIG9mIHRoZSBsZWZ0IGhhbmQgc2lkZVxuXG4gICAgICAgICAgdmFyIGxoc1ByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShhcmdzWzBdLCBwYXJlbnRoZXNpcyk7IC8vIGlzIHRoZSByb290IG5vZGUgYXNzb2NpYXRpdmUgd2l0aCB0aGUgbGVmdCBoYW5kIHNpZGVcblxuICAgICAgICAgIHZhciBhc3NvY1dpdGhMaHMgPSAoMCwgX29wZXJhdG9ycy5pc0Fzc29jaWF0aXZlV2l0aCkocm9vdCwgYXJnc1swXSwgcGFyZW50aGVzaXMpO1xuXG4gICAgICAgICAgaWYgKGxoc1ByZWNlZGVuY2UgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGlmIHRoZSBsZWZ0IGhhbmQgc2lkZSBoYXMgbm8gZGVmaW5lZCBwcmVjZWRlbmNlLCBubyBwYXJlbnMgYXJlIG5lZWRlZFxuICAgICAgICAgICAgLy8gRnVuY3Rpb25Ob2RlIGZvciBleGFtcGxlXG4gICAgICAgICAgICBsaHNQYXJlbnMgPSBmYWxzZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGxoc1ByZWNlZGVuY2UgPT09IHByZWNlZGVuY2UgJiYgYXNzb2NpYXRpdml0eSA9PT0gJ3JpZ2h0JyAmJiAhYXNzb2NXaXRoTGhzKSB7XG4gICAgICAgICAgICAvLyBJbiBjYXNlIG9mIGVxdWFsIHByZWNlZGVuY2UsIGlmIHRoZSByb290IG5vZGUgaXMgbGVmdCBhc3NvY2lhdGl2ZVxuICAgICAgICAgICAgLy8gcGFyZW5zIGFyZSAqKm5ldmVyKiogbmVjZXNzYXJ5IGZvciB0aGUgbGVmdCBoYW5kIHNpZGUuXG4gICAgICAgICAgICAvLyBJZiBpdCBpcyByaWdodCBhc3NvY2lhdGl2ZSBob3dldmVyLCBwYXJlbnMgYXJlIG5lY2Vzc2FyeVxuICAgICAgICAgICAgLy8gaWYgdGhlIHJvb3Qgbm9kZSBpc24ndCBhc3NvY2lhdGl2ZSB3aXRoIHRoZSBsZWZ0IGhhbmQgc2lkZVxuICAgICAgICAgICAgbGhzUGFyZW5zID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGxoc1ByZWNlZGVuY2UgPCBwcmVjZWRlbmNlKSB7XG4gICAgICAgICAgICBsaHNQYXJlbnMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsaHNQYXJlbnMgPSBmYWxzZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgcmhzUGFyZW5zOyAvLyByaWdodCBoYW5kIHNpZGUgbmVlZHMgcGFyZW50aGVzaXM/XG4gICAgICAgICAgLy8gcHJlY2VkZW5jZSBvZiB0aGUgcmlnaHQgaGFuZCBzaWRlXG5cbiAgICAgICAgICB2YXIgcmhzUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKGFyZ3NbMV0sIHBhcmVudGhlc2lzKTsgLy8gaXMgdGhlIHJvb3Qgbm9kZSBhc3NvY2lhdGl2ZSB3aXRoIHRoZSByaWdodCBoYW5kIHNpZGU/XG5cbiAgICAgICAgICB2YXIgYXNzb2NXaXRoUmhzID0gKDAsIF9vcGVyYXRvcnMuaXNBc3NvY2lhdGl2ZVdpdGgpKHJvb3QsIGFyZ3NbMV0sIHBhcmVudGhlc2lzKTtcblxuICAgICAgICAgIGlmIChyaHNQcmVjZWRlbmNlID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBpZiB0aGUgcmlnaHQgaGFuZCBzaWRlIGhhcyBubyBkZWZpbmVkIHByZWNlZGVuY2UsIG5vIHBhcmVucyBhcmUgbmVlZGVkXG4gICAgICAgICAgICAvLyBGdW5jdGlvbk5vZGUgZm9yIGV4YW1wbGVcbiAgICAgICAgICAgIHJoc1BhcmVucyA9IGZhbHNlO1xuICAgICAgICAgIH0gZWxzZSBpZiAocmhzUHJlY2VkZW5jZSA9PT0gcHJlY2VkZW5jZSAmJiBhc3NvY2lhdGl2aXR5ID09PSAnbGVmdCcgJiYgIWFzc29jV2l0aFJocykge1xuICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiBlcXVhbCBwcmVjZWRlbmNlLCBpZiB0aGUgcm9vdCBub2RlIGlzIHJpZ2h0IGFzc29jaWF0aXZlXG4gICAgICAgICAgICAvLyBwYXJlbnMgYXJlICoqbmV2ZXIqKiBuZWNlc3NhcnkgZm9yIHRoZSByaWdodCBoYW5kIHNpZGUuXG4gICAgICAgICAgICAvLyBJZiBpdCBpcyBsZWZ0IGFzc29jaWF0aXZlIGhvd2V2ZXIsIHBhcmVucyBhcmUgbmVjZXNzYXJ5XG4gICAgICAgICAgICAvLyBpZiB0aGUgcm9vdCBub2RlIGlzbid0IGFzc29jaWF0aXZlIHdpdGggdGhlIHJpZ2h0IGhhbmQgc2lkZVxuICAgICAgICAgICAgcmhzUGFyZW5zID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHJoc1ByZWNlZGVuY2UgPCBwcmVjZWRlbmNlKSB7XG4gICAgICAgICAgICByaHNQYXJlbnMgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByaHNQYXJlbnMgPSBmYWxzZTtcbiAgICAgICAgICB9IC8vIGhhbmRsZSBzcGVjaWFsIGNhc2VzIGZvciBMYVRlWCwgd2hlcmUgc29tZSBvZiB0aGUgcGFyZW50aGVzZXMgYXJlbid0IG5lZWRlZFxuXG5cbiAgICAgICAgICBpZiAobGF0ZXgpIHtcbiAgICAgICAgICAgIHZhciBfcm9vdElkZW50aWZpZXI7XG5cbiAgICAgICAgICAgIHZhciBsaHNJZGVudGlmaWVyO1xuICAgICAgICAgICAgdmFyIHJoc0lkZW50aWZpZXI7XG5cbiAgICAgICAgICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2tlZXAnKSB7XG4gICAgICAgICAgICAgIF9yb290SWRlbnRpZmllciA9IHJvb3QuZ2V0SWRlbnRpZmllcigpO1xuICAgICAgICAgICAgICBsaHNJZGVudGlmaWVyID0gcm9vdC5hcmdzWzBdLmdldElkZW50aWZpZXIoKTtcbiAgICAgICAgICAgICAgcmhzSWRlbnRpZmllciA9IHJvb3QuYXJnc1sxXS5nZXRJZGVudGlmaWVyKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBJZ25vcmUgUGFyZW50aGVzaXNOb2RlcyB3aGVuIG5vdCBpbiAna2VlcCcgbW9kZVxuICAgICAgICAgICAgICBfcm9vdElkZW50aWZpZXIgPSByb290LmdldENvbnRlbnQoKS5nZXRJZGVudGlmaWVyKCk7XG4gICAgICAgICAgICAgIGxoc0lkZW50aWZpZXIgPSByb290LmFyZ3NbMF0uZ2V0Q29udGVudCgpLmdldElkZW50aWZpZXIoKTtcbiAgICAgICAgICAgICAgcmhzSWRlbnRpZmllciA9IHJvb3QuYXJnc1sxXS5nZXRDb250ZW50KCkuZ2V0SWRlbnRpZmllcigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobGhzUHJlY2VkZW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBpZiAoX29wZXJhdG9ycy5wcm9wZXJ0aWVzW3ByZWNlZGVuY2VdW19yb290SWRlbnRpZmllcl0ubGF0ZXhMZWZ0UGFyZW5zID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGxoc1BhcmVucyA9IGZhbHNlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKF9vcGVyYXRvcnMucHJvcGVydGllc1tsaHNQcmVjZWRlbmNlXVtsaHNJZGVudGlmaWVyXS5sYXRleFBhcmVucyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBsaHNQYXJlbnMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocmhzUHJlY2VkZW5jZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBpZiAoX29wZXJhdG9ycy5wcm9wZXJ0aWVzW3ByZWNlZGVuY2VdW19yb290SWRlbnRpZmllcl0ubGF0ZXhSaWdodFBhcmVucyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICByaHNQYXJlbnMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChfb3BlcmF0b3JzLnByb3BlcnRpZXNbcmhzUHJlY2VkZW5jZV1bcmhzSWRlbnRpZmllcl0ubGF0ZXhQYXJlbnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcmhzUGFyZW5zID0gZmFsc2U7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXN1bHQgPSBbbGhzUGFyZW5zLCByaHNQYXJlbnNdO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAocm9vdC5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6YWRkJyB8fCByb290LmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTptdWx0aXBseScpIHtcbiAgICAgICAgICByZXN1bHQgPSBhcmdzLm1hcChmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgICB2YXIgYXJnUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKGFyZywgcGFyZW50aGVzaXMpO1xuICAgICAgICAgICAgdmFyIGFzc29jV2l0aEFyZyA9ICgwLCBfb3BlcmF0b3JzLmlzQXNzb2NpYXRpdmVXaXRoKShyb290LCBhcmcsIHBhcmVudGhlc2lzKTtcbiAgICAgICAgICAgIHZhciBhcmdBc3NvY2lhdGl2aXR5ID0gKDAsIF9vcGVyYXRvcnMuZ2V0QXNzb2NpYXRpdml0eSkoYXJnLCBwYXJlbnRoZXNpcyk7XG5cbiAgICAgICAgICAgIGlmIChhcmdQcmVjZWRlbmNlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIGlmIHRoZSBhcmd1bWVudCBoYXMgbm8gZGVmaW5lZCBwcmVjZWRlbmNlLCBubyBwYXJlbnMgYXJlIG5lZWRlZFxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByZWNlZGVuY2UgPT09IGFyZ1ByZWNlZGVuY2UgJiYgYXNzb2NpYXRpdml0eSA9PT0gYXJnQXNzb2NpYXRpdml0eSAmJiAhYXNzb2NXaXRoQXJnKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChhcmdQcmVjZWRlbmNlIDwgcHJlY2VkZW5jZSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgfSAvLyBoYW5kbGVzIGFuIGVkZ2UgY2FzZSBvZiAnYXV0bycgcGFyZW50aGVzZXMgd2l0aCBpbXBsaWNpdCBtdWx0aXBsaWNhdGlvbiBvZiBDb25zdGFudE5vZGVcbiAgICAvLyBJbiB0aGF0IGNhc2UgcHJpbnQgcGFyZW50aGVzZXMgZm9yIFBhcmVudGhlc2lzTm9kZXMgZXZlbiB0aG91Z2ggdGhleSBub3JtYWxseSB3b3VsZG4ndCBiZVxuICAgIC8vIHByaW50ZWQuXG5cblxuICAgIGlmIChhcmdzLmxlbmd0aCA+PSAyICYmIHJvb3QuZ2V0SWRlbnRpZmllcigpID09PSAnT3BlcmF0b3JOb2RlOm11bHRpcGx5JyAmJiByb290LmltcGxpY2l0ICYmIHBhcmVudGhlc2lzID09PSAnYXV0bycgJiYgaW1wbGljaXQgPT09ICdoaWRlJykge1xuICAgICAgcmVzdWx0ID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZywgaW5kZXgpIHtcbiAgICAgICAgdmFyIGlzUGFyZW50aGVzaXNOb2RlID0gYXJnLmdldElkZW50aWZpZXIoKSA9PT0gJ1BhcmVudGhlc2lzTm9kZSc7XG5cbiAgICAgICAgaWYgKHJlc3VsdFtpbmRleF0gfHwgaXNQYXJlbnRoZXNpc05vZGUpIHtcbiAgICAgICAgICAvLyBwdXQgaW4gcGFyZW50aGVzaXM/XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBpbXBsaWNpdCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5pbXBsaWNpdCA/IG9wdGlvbnMuaW1wbGljaXQgOiAnaGlkZSc7XG4gICAgdmFyIGFyZ3MgPSB0aGlzLmFyZ3M7XG4gICAgdmFyIHBhcmVucyA9IGNhbGN1bGF0ZU5lY2Vzc2FyeVBhcmVudGhlc2VzKHRoaXMsIHBhcmVudGhlc2lzLCBpbXBsaWNpdCwgYXJncywgZmFsc2UpO1xuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAvLyB1bmFyeSBvcGVyYXRvcnNcbiAgICAgIHZhciBhc3NvYyA9ICgwLCBfb3BlcmF0b3JzLmdldEFzc29jaWF0aXZpdHkpKHRoaXMsIHBhcmVudGhlc2lzKTtcbiAgICAgIHZhciBvcGVyYW5kID0gYXJnc1swXS50b1N0cmluZyhvcHRpb25zKTtcblxuICAgICAgaWYgKHBhcmVuc1swXSkge1xuICAgICAgICBvcGVyYW5kID0gJygnICsgb3BlcmFuZCArICcpJztcbiAgICAgIH0gLy8gZm9yIGV4YW1wbGUgZm9yIFwibm90XCIsIHdlIHdhbnQgYSBzcGFjZSBiZXR3ZWVuIG9wZXJhbmQgYW5kIGFyZ3VtZW50XG5cblxuICAgICAgdmFyIG9wSXNOYW1lZCA9IC9bYS16QS1aXSsvLnRlc3QodGhpcy5vcCk7XG5cbiAgICAgIGlmIChhc3NvYyA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAvLyBwcmVmaXggb3BlcmF0b3JcbiAgICAgICAgcmV0dXJuIHRoaXMub3AgKyAob3BJc05hbWVkID8gJyAnIDogJycpICsgb3BlcmFuZDtcbiAgICAgIH0gZWxzZSBpZiAoYXNzb2MgPT09ICdsZWZ0Jykge1xuICAgICAgICAvLyBwb3N0Zml4XG4gICAgICAgIHJldHVybiBvcGVyYW5kICsgKG9wSXNOYW1lZCA/ICcgJyA6ICcnKSArIHRoaXMub3A7XG4gICAgICB9IC8vIGZhbGwgYmFjayB0byBwb3N0Zml4XG5cblxuICAgICAgcmV0dXJuIG9wZXJhbmQgKyB0aGlzLm9wO1xuICAgIH0gZWxzZSBpZiAoYXJncy5sZW5ndGggPT09IDIpIHtcbiAgICAgIHZhciBsaHMgPSBhcmdzWzBdLnRvU3RyaW5nKG9wdGlvbnMpOyAvLyBsZWZ0IGhhbmQgc2lkZVxuXG4gICAgICB2YXIgcmhzID0gYXJnc1sxXS50b1N0cmluZyhvcHRpb25zKTsgLy8gcmlnaHQgaGFuZCBzaWRlXG5cbiAgICAgIGlmIChwYXJlbnNbMF0pIHtcbiAgICAgICAgLy8gbGVmdCBoYW5kIHNpZGUgaW4gcGFyZW50aGVzaXM/XG4gICAgICAgIGxocyA9ICcoJyArIGxocyArICcpJztcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmVuc1sxXSkge1xuICAgICAgICAvLyByaWdodCBoYW5kIHNpZGUgaW4gcGFyZW50aGVzaXM/XG4gICAgICAgIHJocyA9ICcoJyArIHJocyArICcpJztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaW1wbGljaXQgJiYgdGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6bXVsdGlwbHknICYmIGltcGxpY2l0ID09PSAnaGlkZScpIHtcbiAgICAgICAgcmV0dXJuIGxocyArICcgJyArIHJocztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxocyArICcgJyArIHRoaXMub3AgKyAnICcgKyByaHM7XG4gICAgfSBlbHNlIGlmIChhcmdzLmxlbmd0aCA+IDIgJiYgKHRoaXMuZ2V0SWRlbnRpZmllcigpID09PSAnT3BlcmF0b3JOb2RlOmFkZCcgfHwgdGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6bXVsdGlwbHknKSkge1xuICAgICAgdmFyIHN0cmluZ2lmaWVkQXJncyA9IGFyZ3MubWFwKGZ1bmN0aW9uIChhcmcsIGluZGV4KSB7XG4gICAgICAgIGFyZyA9IGFyZy50b1N0cmluZyhvcHRpb25zKTtcblxuICAgICAgICBpZiAocGFyZW5zW2luZGV4XSkge1xuICAgICAgICAgIC8vIHB1dCBpbiBwYXJlbnRoZXNpcz9cbiAgICAgICAgICBhcmcgPSAnKCcgKyBhcmcgKyAnKSc7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLmltcGxpY2l0ICYmIHRoaXMuZ2V0SWRlbnRpZmllcigpID09PSAnT3BlcmF0b3JOb2RlOm11bHRpcGx5JyAmJiBpbXBsaWNpdCA9PT0gJ2hpZGUnKSB7XG4gICAgICAgIHJldHVybiBzdHJpbmdpZmllZEFyZ3Muam9pbignICcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc3RyaW5naWZpZWRBcmdzLmpvaW4oJyAnICsgdGhpcy5vcCArICcgJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZhbGxiYWNrIHRvIGZvcm1hdHRpbmcgYXMgYSBmdW5jdGlvbiBjYWxsXG4gICAgICByZXR1cm4gdGhpcy5mbiArICcoJyArIHRoaXMuYXJncy5qb2luKCcsICcpICsgJyknO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBPcGVyYXRvck5vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnT3BlcmF0b3JOb2RlJyxcbiAgICAgIG9wOiB0aGlzLm9wLFxuICAgICAgZm46IHRoaXMuZm4sXG4gICAgICBhcmdzOiB0aGlzLmFyZ3MsXG4gICAgICBpbXBsaWNpdDogdGhpcy5pbXBsaWNpdFxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBPcGVyYXRvck5vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIk9wZXJhdG9yTm9kZVwiLCBcIm9wXCI6IFwiK1wiLCBcImZuXCI6IFwiYWRkXCIsIFwiYXJnc1wiOiBbLi4uXSwgXCJpbXBsaWNpdFwiOiBmYWxzZX1gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtPcGVyYXRvck5vZGV9XG4gICAqL1xuXG5cbiAgT3BlcmF0b3JOb2RlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZShqc29uLm9wLCBqc29uLmZuLCBqc29uLmFyZ3MsIGpzb24uaW1wbGljaXQpO1xuICB9O1xuICAvKipcbiAgICogR2V0IEhUTUwgcmVwcmVzZW50YXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS50b0hUTUwgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBwYXJlbnRoZXNpcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA/IG9wdGlvbnMucGFyZW50aGVzaXMgOiAna2VlcCc7XG4gICAgdmFyIGltcGxpY2l0ID0gb3B0aW9ucyAmJiBvcHRpb25zLmltcGxpY2l0ID8gb3B0aW9ucy5pbXBsaWNpdCA6ICdoaWRlJztcbiAgICB2YXIgYXJncyA9IHRoaXMuYXJncztcbiAgICB2YXIgcGFyZW5zID0gY2FsY3VsYXRlTmVjZXNzYXJ5UGFyZW50aGVzZXModGhpcywgcGFyZW50aGVzaXMsIGltcGxpY2l0LCBhcmdzLCBmYWxzZSk7XG5cbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgIC8vIHVuYXJ5IG9wZXJhdG9yc1xuICAgICAgdmFyIGFzc29jID0gKDAsIF9vcGVyYXRvcnMuZ2V0QXNzb2NpYXRpdml0eSkodGhpcywgcGFyZW50aGVzaXMpO1xuICAgICAgdmFyIG9wZXJhbmQgPSBhcmdzWzBdLnRvSFRNTChvcHRpb25zKTtcblxuICAgICAgaWYgKHBhcmVuc1swXSkge1xuICAgICAgICBvcGVyYW5kID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgb3BlcmFuZCArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPik8L3NwYW4+JztcbiAgICAgIH1cblxuICAgICAgaWYgKGFzc29jID09PSAncmlnaHQnKSB7XG4gICAgICAgIC8vIHByZWZpeCBvcGVyYXRvclxuICAgICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLXVuYXJ5LW9wZXJhdG9yIG1hdGgtbGVmdGhhbmQtdW5hcnktb3BlcmF0b3JcIj4nICsgKDAsIF9zdHJpbmcuZXNjYXBlKSh0aGlzLm9wKSArICc8L3NwYW4+JyArIG9wZXJhbmQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBwb3N0Zml4IHdoZW4gYXNzb2MgPT09ICdsZWZ0JyBvciB1bmRlZmluZWRcbiAgICAgICAgcmV0dXJuIG9wZXJhbmQgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLW9wZXJhdG9yIG1hdGgtdW5hcnktb3BlcmF0b3IgbWF0aC1yaWdodGhhbmQtdW5hcnktb3BlcmF0b3JcIj4nICsgKDAsIF9zdHJpbmcuZXNjYXBlKSh0aGlzLm9wKSArICc8L3NwYW4+JztcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAyKSB7XG4gICAgICAvLyBiaW5hcnkgb3BlcmF0b2VzXG4gICAgICB2YXIgbGhzID0gYXJnc1swXS50b0hUTUwob3B0aW9ucyk7IC8vIGxlZnQgaGFuZCBzaWRlXG5cbiAgICAgIHZhciByaHMgPSBhcmdzWzFdLnRvSFRNTChvcHRpb25zKTsgLy8gcmlnaHQgaGFuZCBzaWRlXG5cbiAgICAgIGlmIChwYXJlbnNbMF0pIHtcbiAgICAgICAgLy8gbGVmdCBoYW5kIHNpZGUgaW4gcGFyZW50aGVzaXM/XG4gICAgICAgIGxocyA9ICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIGxocyArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPik8L3NwYW4+JztcbiAgICAgIH1cblxuICAgICAgaWYgKHBhcmVuc1sxXSkge1xuICAgICAgICAvLyByaWdodCBoYW5kIHNpZGUgaW4gcGFyZW50aGVzaXM/XG4gICAgICAgIHJocyA9ICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIHJocyArICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPik8L3NwYW4+JztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuaW1wbGljaXQgJiYgdGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6bXVsdGlwbHknICYmIGltcGxpY2l0ID09PSAnaGlkZScpIHtcbiAgICAgICAgcmV0dXJuIGxocyArICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1iaW5hcnktb3BlcmF0b3IgbWF0aC1pbXBsaWNpdC1iaW5hcnktb3BlcmF0b3JcIj48L3NwYW4+JyArIHJocztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxocyArICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1iaW5hcnktb3BlcmF0b3IgbWF0aC1leHBsaWNpdC1iaW5hcnktb3BlcmF0b3JcIj4nICsgKDAsIF9zdHJpbmcuZXNjYXBlKSh0aGlzLm9wKSArICc8L3NwYW4+JyArIHJocztcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHN0cmluZ2lmaWVkQXJncyA9IGFyZ3MubWFwKGZ1bmN0aW9uIChhcmcsIGluZGV4KSB7XG4gICAgICAgIGFyZyA9IGFyZy50b0hUTUwob3B0aW9ucyk7XG5cbiAgICAgICAgaWYgKHBhcmVuc1tpbmRleF0pIHtcbiAgICAgICAgICAvLyBwdXQgaW4gcGFyZW50aGVzaXM/XG4gICAgICAgICAgYXJnID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgYXJnICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoYXJncy5sZW5ndGggPiAyICYmICh0aGlzLmdldElkZW50aWZpZXIoKSA9PT0gJ09wZXJhdG9yTm9kZTphZGQnIHx8IHRoaXMuZ2V0SWRlbnRpZmllcigpID09PSAnT3BlcmF0b3JOb2RlOm11bHRpcGx5JykpIHtcbiAgICAgICAgaWYgKHRoaXMuaW1wbGljaXQgJiYgdGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6bXVsdGlwbHknICYmIGltcGxpY2l0ID09PSAnaGlkZScpIHtcbiAgICAgICAgICByZXR1cm4gc3RyaW5naWZpZWRBcmdzLmpvaW4oJzxzcGFuIGNsYXNzPVwibWF0aC1vcGVyYXRvciBtYXRoLWJpbmFyeS1vcGVyYXRvciBtYXRoLWltcGxpY2l0LWJpbmFyeS1vcGVyYXRvclwiPjwvc3Bhbj4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdHJpbmdpZmllZEFyZ3Muam9pbignPHNwYW4gY2xhc3M9XCJtYXRoLW9wZXJhdG9yIG1hdGgtYmluYXJ5LW9wZXJhdG9yIG1hdGgtZXhwbGljaXQtYmluYXJ5LW9wZXJhdG9yXCI+JyArICgwLCBfc3RyaW5nLmVzY2FwZSkodGhpcy5vcCkgKyAnPC9zcGFuPicpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZmFsbGJhY2sgdG8gZm9ybWF0dGluZyBhcyBhIGZ1bmN0aW9uIGNhbGxcbiAgICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtZnVuY3Rpb25cIj4nICsgKDAsIF9zdHJpbmcuZXNjYXBlKSh0aGlzLmZuKSArICc8L3NwYW4+PHNwYW4gY2xhc3M9XCJtYXRoLXBhcmFudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyBzdHJpbmdpZmllZEFyZ3Muam9pbignPHNwYW4gY2xhc3M9XCJtYXRoLXNlcGFyYXRvclwiPiw8L3NwYW4+JykgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmFudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgT3BlcmF0b3JOb2RlLnByb3RvdHlwZS5fdG9UZXggPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBwYXJlbnRoZXNpcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA/IG9wdGlvbnMucGFyZW50aGVzaXMgOiAna2VlcCc7XG4gICAgdmFyIGltcGxpY2l0ID0gb3B0aW9ucyAmJiBvcHRpb25zLmltcGxpY2l0ID8gb3B0aW9ucy5pbXBsaWNpdCA6ICdoaWRlJztcbiAgICB2YXIgYXJncyA9IHRoaXMuYXJncztcbiAgICB2YXIgcGFyZW5zID0gY2FsY3VsYXRlTmVjZXNzYXJ5UGFyZW50aGVzZXModGhpcywgcGFyZW50aGVzaXMsIGltcGxpY2l0LCBhcmdzLCB0cnVlKTtcbiAgICB2YXIgb3AgPSBfbGF0ZXgubGF0ZXhPcGVyYXRvcnNbdGhpcy5mbl07XG4gICAgb3AgPSB0eXBlb2Ygb3AgPT09ICd1bmRlZmluZWQnID8gdGhpcy5vcCA6IG9wOyAvLyBmYWxsIGJhY2sgdG8gdXNpbmcgdGhpcy5vcFxuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICAvLyB1bmFyeSBvcGVyYXRvcnNcbiAgICAgIHZhciBhc3NvYyA9ICgwLCBfb3BlcmF0b3JzLmdldEFzc29jaWF0aXZpdHkpKHRoaXMsIHBhcmVudGhlc2lzKTtcbiAgICAgIHZhciBvcGVyYW5kID0gYXJnc1swXS50b1RleChvcHRpb25zKTtcblxuICAgICAgaWYgKHBhcmVuc1swXSkge1xuICAgICAgICBvcGVyYW5kID0gXCJcXFxcbGVmdChcIi5jb25jYXQob3BlcmFuZCwgXCJcXFxccmlnaHQpXCIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXNzb2MgPT09ICdyaWdodCcpIHtcbiAgICAgICAgLy8gcHJlZml4IG9wZXJhdG9yXG4gICAgICAgIHJldHVybiBvcCArIG9wZXJhbmQ7XG4gICAgICB9IGVsc2UgaWYgKGFzc29jID09PSAnbGVmdCcpIHtcbiAgICAgICAgLy8gcG9zdGZpeCBvcGVyYXRvclxuICAgICAgICByZXR1cm4gb3BlcmFuZCArIG9wO1xuICAgICAgfSAvLyBmYWxsIGJhY2sgdG8gcG9zdGZpeFxuXG5cbiAgICAgIHJldHVybiBvcGVyYW5kICsgb3A7XG4gICAgfSBlbHNlIGlmIChhcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgLy8gYmluYXJ5IG9wZXJhdG9yc1xuICAgICAgdmFyIGxocyA9IGFyZ3NbMF07IC8vIGxlZnQgaGFuZCBzaWRlXG5cbiAgICAgIHZhciBsaHNUZXggPSBsaHMudG9UZXgob3B0aW9ucyk7XG5cbiAgICAgIGlmIChwYXJlbnNbMF0pIHtcbiAgICAgICAgbGhzVGV4ID0gXCJcXFxcbGVmdChcIi5jb25jYXQobGhzVGV4LCBcIlxcXFxyaWdodClcIik7XG4gICAgICB9XG5cbiAgICAgIHZhciByaHMgPSBhcmdzWzFdOyAvLyByaWdodCBoYW5kIHNpZGVcblxuICAgICAgdmFyIHJoc1RleCA9IHJocy50b1RleChvcHRpb25zKTtcblxuICAgICAgaWYgKHBhcmVuc1sxXSkge1xuICAgICAgICByaHNUZXggPSBcIlxcXFxsZWZ0KFwiLmNvbmNhdChyaHNUZXgsIFwiXFxcXHJpZ2h0KVwiKTtcbiAgICAgIH0gLy8gaGFuZGxlIHNvbWUgZXhjZXB0aW9ucyAoZHVlIHRvIHRoZSB3YXkgTGFUZVggd29ya3MpXG5cblxuICAgICAgdmFyIGxoc0lkZW50aWZpZXI7XG5cbiAgICAgIGlmIChwYXJlbnRoZXNpcyA9PT0gJ2tlZXAnKSB7XG4gICAgICAgIGxoc0lkZW50aWZpZXIgPSBsaHMuZ2V0SWRlbnRpZmllcigpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWdub3JlIFBhcmVudGhlc2lzTm9kZXMgaWYgaW4gJ2tlZXAnIG1vZGVcbiAgICAgICAgbGhzSWRlbnRpZmllciA9IGxocy5nZXRDb250ZW50KCkuZ2V0SWRlbnRpZmllcigpO1xuICAgICAgfVxuXG4gICAgICBzd2l0Y2ggKHRoaXMuZ2V0SWRlbnRpZmllcigpKSB7XG4gICAgICAgIGNhc2UgJ09wZXJhdG9yTm9kZTpkaXZpZGUnOlxuICAgICAgICAgIC8vIG9wIGNvbnRhaW5zICdcXFxcZnJhYycgYXQgdGhpcyBwb2ludFxuICAgICAgICAgIHJldHVybiBvcCArICd7JyArIGxoc1RleCArICd9JyArICd7JyArIHJoc1RleCArICd9JztcblxuICAgICAgICBjYXNlICdPcGVyYXRvck5vZGU6cG93JzpcbiAgICAgICAgICBsaHNUZXggPSAneycgKyBsaHNUZXggKyAnfSc7XG4gICAgICAgICAgcmhzVGV4ID0gJ3snICsgcmhzVGV4ICsgJ30nO1xuXG4gICAgICAgICAgc3dpdGNoIChsaHNJZGVudGlmaWVyKSB7XG4gICAgICAgICAgICBjYXNlICdDb25kaXRpb25hbE5vZGUnOiAvL1xuXG4gICAgICAgICAgICBjYXNlICdPcGVyYXRvck5vZGU6ZGl2aWRlJzpcbiAgICAgICAgICAgICAgbGhzVGV4ID0gXCJcXFxcbGVmdChcIi5jb25jYXQobGhzVGV4LCBcIlxcXFxyaWdodClcIik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnT3BlcmF0b3JOb2RlOm11bHRpcGx5JzpcbiAgICAgICAgICBpZiAodGhpcy5pbXBsaWNpdCAmJiBpbXBsaWNpdCA9PT0gJ2hpZGUnKSB7XG4gICAgICAgICAgICByZXR1cm4gbGhzVGV4ICsgJ34nICsgcmhzVGV4O1xuICAgICAgICAgIH1cblxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGhzVGV4ICsgb3AgKyByaHNUZXg7XG4gICAgfSBlbHNlIGlmIChhcmdzLmxlbmd0aCA+IDIgJiYgKHRoaXMuZ2V0SWRlbnRpZmllcigpID09PSAnT3BlcmF0b3JOb2RlOmFkZCcgfHwgdGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6bXVsdGlwbHknKSkge1xuICAgICAgdmFyIHRleGlmaWVkQXJncyA9IGFyZ3MubWFwKGZ1bmN0aW9uIChhcmcsIGluZGV4KSB7XG4gICAgICAgIGFyZyA9IGFyZy50b1RleChvcHRpb25zKTtcblxuICAgICAgICBpZiAocGFyZW5zW2luZGV4XSkge1xuICAgICAgICAgIGFyZyA9IFwiXFxcXGxlZnQoXCIuY29uY2F0KGFyZywgXCJcXFxccmlnaHQpXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgIH0pO1xuXG4gICAgICBpZiAodGhpcy5nZXRJZGVudGlmaWVyKCkgPT09ICdPcGVyYXRvck5vZGU6bXVsdGlwbHknICYmIHRoaXMuaW1wbGljaXQpIHtcbiAgICAgICAgcmV0dXJuIHRleGlmaWVkQXJncy5qb2luKCd+Jyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0ZXhpZmllZEFyZ3Muam9pbihvcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZhbGwgYmFjayB0byBmb3JtYXR0aW5nIGFzIGEgZnVuY3Rpb24gY2FsbFxuICAgICAgLy8gYXMgdGhpcyBpcyBhIGZhbGxiYWNrLCBpdCBkb2Vzbid0IHVzZVxuICAgICAgLy8gZmFuY3kgZnVuY3Rpb24gbmFtZXNcbiAgICAgIHJldHVybiAnXFxcXG1hdGhybXsnICsgdGhpcy5mbiArICd9XFxcXGxlZnQoJyArIGFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgcmV0dXJuIGFyZy50b1RleChvcHRpb25zKTtcbiAgICAgIH0pLmpvaW4oJywnKSArICdcXFxccmlnaHQpJztcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgaWRlbnRpZmllci5cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIE9wZXJhdG9yTm9kZS5wcm90b3R5cGUuZ2V0SWRlbnRpZmllciA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy50eXBlICsgJzonICsgdGhpcy5mbjtcbiAgfTtcblxuICByZXR1cm4gT3BlcmF0b3JOb2RlO1xufSwge1xuICBpc0NsYXNzOiB0cnVlLFxuICBpc05vZGU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVPcGVyYXRvck5vZGUgPSBjcmVhdGVPcGVyYXRvck5vZGU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVBhcmVudGhlc2lzTm9kZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ1BhcmVudGhlc2lzTm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydOb2RlJ107XG52YXIgY3JlYXRlUGFyZW50aGVzaXNOb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIE5vZGUgPSBfcmVmLk5vZGU7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBQYXJlbnRoZXNpc05vZGVcbiAgICogQGV4dGVuZHMge05vZGV9XG4gICAqIEEgcGFyZW50aGVzaXMgbm9kZSBkZXNjcmliZXMgbWFudWFsIHBhcmVudGhlc2lzIGZyb20gdGhlIHVzZXIgaW5wdXRcbiAgICogQHBhcmFtIHtOb2RlfSBjb250ZW50XG4gICAqIEBleHRlbmRzIHtOb2RlfVxuICAgKi9cbiAgZnVuY3Rpb24gUGFyZW50aGVzaXNOb2RlKGNvbnRlbnQpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUGFyZW50aGVzaXNOb2RlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9IC8vIHZhbGlkYXRlIGlucHV0XG5cblxuICAgIGlmICghKDAsIF9pcy5pc05vZGUpKGNvbnRlbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb2RlIGV4cGVjdGVkIGZvciBwYXJhbWV0ZXIgXCJjb250ZW50XCInKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50O1xuICB9XG5cbiAgUGFyZW50aGVzaXNOb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7XG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUudHlwZSA9ICdQYXJlbnRoZXNpc05vZGUnO1xuICBQYXJlbnRoZXNpc05vZGUucHJvdG90eXBlLmlzUGFyZW50aGVzaXNOb2RlID0gdHJ1ZTtcbiAgLyoqXG4gICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLlxuICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuXG4gICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9sc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKilcbiAgICovXG5cbiAgUGFyZW50aGVzaXNOb2RlLnByb3RvdHlwZS5fY29tcGlsZSA9IGZ1bmN0aW9uIChtYXRoLCBhcmdOYW1lcykge1xuICAgIHJldHVybiB0aGlzLmNvbnRlbnQuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHRoZSBjb250ZW50IG9mIHRoZSBjdXJyZW50IE5vZGUuXG4gICAqIEByZXR1cm4ge05vZGV9IGNvbnRlbnRcbiAgICogQG92ZXJyaWRlXG4gICAqKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUuZ2V0Q29udGVudCA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZW50LmdldENvbnRlbnQoKTtcbiAgfTtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2tcbiAgICovXG5cblxuICBQYXJlbnRoZXNpc05vZGUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayh0aGlzLmNvbnRlbnQsICdjb250ZW50JywgdGhpcyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgUGFyZW50aGVzaXNOb2RlIGhhdmluZyBpdCdzIGNoaWxkcyBiZSB0aGUgcmVzdWx0cyBvZiBjYWxsaW5nXG4gICAqIHRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCBvZiB0aGUgY2hpbGRzIG9mIHRoZSBvcmlnaW5hbCBub2RlLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9uKGNoaWxkOiBOb2RlLCBwYXRoOiBzdHJpbmcsIHBhcmVudDogTm9kZSkgOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7UGFyZW50aGVzaXNOb2RlfSBSZXR1cm5zIGEgY2xvbmUgb2YgdGhlIG5vZGVcbiAgICovXG5cblxuICBQYXJlbnRoZXNpc05vZGUucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciBjb250ZW50ID0gY2FsbGJhY2sodGhpcy5jb250ZW50LCAnY29udGVudCcsIHRoaXMpO1xuICAgIHJldHVybiBuZXcgUGFyZW50aGVzaXNOb2RlKGNvbnRlbnQpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhpcyBub2RlLCBhIHNoYWxsb3cgY29weVxuICAgKiBAcmV0dXJuIHtQYXJlbnRoZXNpc05vZGV9XG4gICAqL1xuXG5cbiAgUGFyZW50aGVzaXNOb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFBhcmVudGhlc2lzTm9kZSh0aGlzLmNvbnRlbnQpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKiBAb3ZlcnJpZGVcbiAgICovXG5cblxuICBQYXJlbnRoZXNpc05vZGUucHJvdG90eXBlLl90b1N0cmluZyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMgJiYgIW9wdGlvbnMucGFyZW50aGVzaXMgfHwgb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID09PSAna2VlcCcpIHtcbiAgICAgIHJldHVybiAnKCcgKyB0aGlzLmNvbnRlbnQudG9TdHJpbmcob3B0aW9ucykgKyAnKSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY29udGVudC50b1N0cmluZyhvcHRpb25zKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBQYXJlbnRoZXNpc05vZGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnUGFyZW50aGVzaXNOb2RlJyxcbiAgICAgIGNvbnRlbnQ6IHRoaXMuY29udGVudFxuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhbiBQYXJlbnRoZXNpc05vZGUgZnJvbSBpdHMgSlNPTiByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlBhcmVudGhlc2lzTm9kZVwiLCBcImNvbnRlbnRcIjogLi4ufWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge1BhcmVudGhlc2lzTm9kZX1cbiAgICovXG5cblxuICBQYXJlbnRoZXNpc05vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgUGFyZW50aGVzaXNOb2RlKGpzb24uY29udGVudCk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgSFRNTCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKiBAb3ZlcnJpZGVcbiAgICovXG5cblxuICBQYXJlbnRoZXNpc05vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMgJiYgIW9wdGlvbnMucGFyZW50aGVzaXMgfHwgb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID09PSAna2VlcCcpIHtcbiAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4oPC9zcGFuPicgKyB0aGlzLmNvbnRlbnQudG9IVE1MKG9wdGlvbnMpICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbnRlbnQudG9IVE1MKG9wdGlvbnMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqIEBvdmVycmlkZVxuICAgKi9cblxuXG4gIFBhcmVudGhlc2lzTm9kZS5wcm90b3R5cGUuX3RvVGV4ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucyAmJiAhb3B0aW9ucy5wYXJlbnRoZXNpcyB8fCBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPT09ICdrZWVwJykge1xuICAgICAgcmV0dXJuIFwiXFxcXGxlZnQoXCIuY29uY2F0KHRoaXMuY29udGVudC50b1RleChvcHRpb25zKSwgXCJcXFxccmlnaHQpXCIpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbnRlbnQudG9UZXgob3B0aW9ucyk7XG4gIH07XG5cbiAgcmV0dXJuIFBhcmVudGhlc2lzTm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUGFyZW50aGVzaXNOb2RlID0gY3JlYXRlUGFyZW50aGVzaXNOb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSYW5nZU5vZGUgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX29wZXJhdG9ycyA9IHJlcXVpcmUoXCIuLi9vcGVyYXRvcnNcIik7XG5cbnZhciBuYW1lID0gJ1JhbmdlTm9kZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydOb2RlJ107XG52YXIgY3JlYXRlUmFuZ2VOb2RlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIE5vZGUgPSBfcmVmLk5vZGU7XG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBSYW5nZU5vZGVcbiAgICogQGV4dGVuZHMge05vZGV9XG4gICAqIGNyZWF0ZSBhIHJhbmdlXG4gICAqIEBwYXJhbSB7Tm9kZX0gc3RhcnQgIGluY2x1ZGVkIGxvd2VyLWJvdW5kXG4gICAqIEBwYXJhbSB7Tm9kZX0gZW5kICAgIGluY2x1ZGVkIHVwcGVyLWJvdW5kXG4gICAqIEBwYXJhbSB7Tm9kZX0gW3N0ZXBdIG9wdGlvbmFsIHN0ZXBcbiAgICovXG4gIGZ1bmN0aW9uIFJhbmdlTm9kZShzdGFydCwgZW5kLCBzdGVwKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJhbmdlTm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfSAvLyB2YWxpZGF0ZSBpbnB1dHNcblxuXG4gICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkoc3RhcnQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb2RlIGV4cGVjdGVkJyk7XG4gICAgaWYgKCEoMCwgX2lzLmlzTm9kZSkoZW5kKSkgdGhyb3cgbmV3IFR5cGVFcnJvcignTm9kZSBleHBlY3RlZCcpO1xuICAgIGlmIChzdGVwICYmICEoMCwgX2lzLmlzTm9kZSkoc3RlcCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vZGUgZXhwZWN0ZWQnKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDMpIHRocm93IG5ldyBFcnJvcignVG9vIG1hbnkgYXJndW1lbnRzJyk7XG4gICAgdGhpcy5zdGFydCA9IHN0YXJ0OyAvLyBpbmNsdWRlZCBsb3dlci1ib3VuZFxuXG4gICAgdGhpcy5lbmQgPSBlbmQ7IC8vIGluY2x1ZGVkIHVwcGVyLWJvdW5kXG5cbiAgICB0aGlzLnN0ZXAgPSBzdGVwIHx8IG51bGw7IC8vIG9wdGlvbmFsIHN0ZXBcbiAgfVxuXG4gIFJhbmdlTm9kZS5wcm90b3R5cGUgPSBuZXcgTm9kZSgpO1xuICBSYW5nZU5vZGUucHJvdG90eXBlLnR5cGUgPSAnUmFuZ2VOb2RlJztcbiAgUmFuZ2VOb2RlLnByb3RvdHlwZS5pc1JhbmdlTm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIHRoZSBSYW5nZU5vZGUgbmVlZHMgdGhlIGBlbmRgIHN5bWJvbCB0byBiZSBkZWZpbmVkLlxuICAgKiBUaGlzIGVuZCBpcyB0aGUgc2l6ZSBvZiB0aGUgTWF0cml4IGluIGN1cnJlbnQgZGltZW5zaW9uLlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cblxuICBSYW5nZU5vZGUucHJvdG90eXBlLm5lZWRzRW5kID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIGZpbmQgYWxsIGBlbmRgIHN5bWJvbHMgaW4gdGhpcyBSYW5nZU5vZGVcbiAgICB2YXIgZW5kU3ltYm9scyA9IHRoaXMuZmlsdGVyKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICByZXR1cm4gKDAsIF9pcy5pc1N5bWJvbE5vZGUpKG5vZGUpICYmIG5vZGUubmFtZSA9PT0gJ2VuZCc7XG4gICAgfSk7XG4gICAgcmV0dXJuIGVuZFN5bWJvbHMubGVuZ3RoID4gMDtcbiAgfTtcbiAgLyoqXG4gICAqIENvbXBpbGUgYSBub2RlIGludG8gYSBKYXZhU2NyaXB0IGZ1bmN0aW9uLlxuICAgKiBUaGlzIGJhc2ljYWxseSBwcmUtY2FsY3VsYXRlcyBhcyBtdWNoIGFzIHBvc3NpYmxlIGFuZCBvbmx5IGxlYXZlcyBvcGVuXG4gICAqIGNhbGN1bGF0aW9ucyB3aGljaCBkZXBlbmQgb24gYSBkeW5hbWljIHNjb3BlIHdpdGggdmFyaWFibGVzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gbWF0aCAgICAgTWF0aC5qcyBuYW1lc3BhY2Ugd2l0aCBmdW5jdGlvbnMgYW5kIGNvbnN0YW50cy5cbiAgICogQHBhcmFtIHtPYmplY3R9IGFyZ05hbWVzIEFuIG9iamVjdCB3aXRoIGFyZ3VtZW50IG5hbWVzIGFzIGtleSBhbmQgYHRydWVgXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB2YWx1ZS4gVXNlZCBpbiB0aGUgU3ltYm9sTm9kZSB0byBvcHRpbWl6ZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGFyZ3VtZW50cyBmcm9tIHVzZXIgYXNzaWduZWQgZnVuY3Rpb25zXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUpIG9yIHNwZWNpYWwgc3ltYm9sc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSBgZW5kYCAoc2VlIEluZGV4Tm9kZSkuXG4gICAqIEByZXR1cm4ge2Z1bmN0aW9ufSBSZXR1cm5zIGEgZnVuY3Rpb24gd2hpY2ggY2FuIGJlIGNhbGxlZCBsaWtlOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWxOb2RlKHNjb3BlOiBPYmplY3QsIGFyZ3M6IE9iamVjdCwgY29udGV4dDogKilcbiAgICovXG5cblxuICBSYW5nZU5vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7XG4gICAgdmFyIHJhbmdlID0gbWF0aC5yYW5nZTtcblxuICAgIHZhciBldmFsU3RhcnQgPSB0aGlzLnN0YXJ0Ll9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgIHZhciBldmFsRW5kID0gdGhpcy5lbmQuX2NvbXBpbGUobWF0aCwgYXJnTmFtZXMpO1xuXG4gICAgaWYgKHRoaXMuc3RlcCkge1xuICAgICAgdmFyIGV2YWxTdGVwID0gdGhpcy5zdGVwLl9jb21waWxlKG1hdGgsIGFyZ05hbWVzKTtcblxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxSYW5nZU5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIHJhbmdlKGV2YWxTdGFydChzY29wZSwgYXJncywgY29udGV4dCksIGV2YWxFbmQoc2NvcGUsIGFyZ3MsIGNvbnRleHQpLCBldmFsU3RlcChzY29wZSwgYXJncywgY29udGV4dCkpO1xuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxSYW5nZU5vZGUoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIHJhbmdlKGV2YWxTdGFydChzY29wZSwgYXJncywgY29udGV4dCksIGV2YWxFbmQoc2NvcGUsIGFyZ3MsIGNvbnRleHQpKTtcbiAgICAgIH07XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBlYWNoIG9mIHRoZSBjaGlsZCBub2RlcyBvZiB0aGlzIG5vZGVcbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpfSBjYWxsYmFja1xuICAgKi9cblxuXG4gIFJhbmdlTm9kZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrKHRoaXMuc3RhcnQsICdzdGFydCcsIHRoaXMpO1xuICAgIGNhbGxiYWNrKHRoaXMuZW5kLCAnZW5kJywgdGhpcyk7XG5cbiAgICBpZiAodGhpcy5zdGVwKSB7XG4gICAgICBjYWxsYmFjayh0aGlzLnN0ZXAsICdzdGVwJywgdGhpcyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IFJhbmdlTm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpOiBOb2RlfSBjYWxsYmFja1xuICAgKiBAcmV0dXJucyB7UmFuZ2VOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIFJhbmdlTm9kZS5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIG5ldyBSYW5nZU5vZGUodGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuc3RhcnQsICdzdGFydCcsIHRoaXMpKSwgdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuZW5kLCAnZW5kJywgdGhpcykpLCB0aGlzLnN0ZXAgJiYgdGhpcy5faWZOb2RlKGNhbGxiYWNrKHRoaXMuc3RlcCwgJ3N0ZXAnLCB0aGlzKSkpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhpcyBub2RlLCBhIHNoYWxsb3cgY29weVxuICAgKiBAcmV0dXJuIHtSYW5nZU5vZGV9XG4gICAqL1xuXG5cbiAgUmFuZ2VOb2RlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlTm9kZSh0aGlzLnN0YXJ0LCB0aGlzLmVuZCwgdGhpcy5zdGVwICYmIHRoaXMuc3RlcCk7XG4gIH07XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIG5lY2Vzc2FyeSBwYXJlbnRoZXNlc1xuICAgKiBAcGFyYW0ge05vZGV9IG5vZGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudGhlc2lzXG4gICAqIEByZXR1cm4ge09iamVjdH0gcGFyZW50aGVzZXNcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBjYWxjdWxhdGVOZWNlc3NhcnlQYXJlbnRoZXNlcyhub2RlLCBwYXJlbnRoZXNpcykge1xuICAgIHZhciBwcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkobm9kZSwgcGFyZW50aGVzaXMpO1xuICAgIHZhciBwYXJlbnMgPSB7fTtcbiAgICB2YXIgc3RhcnRQcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkobm9kZS5zdGFydCwgcGFyZW50aGVzaXMpO1xuICAgIHBhcmVucy5zdGFydCA9IHN0YXJ0UHJlY2VkZW5jZSAhPT0gbnVsbCAmJiBzdGFydFByZWNlZGVuY2UgPD0gcHJlY2VkZW5jZSB8fCBwYXJlbnRoZXNpcyA9PT0gJ2FsbCc7XG5cbiAgICBpZiAobm9kZS5zdGVwKSB7XG4gICAgICB2YXIgc3RlcFByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShub2RlLnN0ZXAsIHBhcmVudGhlc2lzKTtcbiAgICAgIHBhcmVucy5zdGVwID0gc3RlcFByZWNlZGVuY2UgIT09IG51bGwgJiYgc3RlcFByZWNlZGVuY2UgPD0gcHJlY2VkZW5jZSB8fCBwYXJlbnRoZXNpcyA9PT0gJ2FsbCc7XG4gICAgfVxuXG4gICAgdmFyIGVuZFByZWNlZGVuY2UgPSAoMCwgX29wZXJhdG9ycy5nZXRQcmVjZWRlbmNlKShub2RlLmVuZCwgcGFyZW50aGVzaXMpO1xuICAgIHBhcmVucy5lbmQgPSBlbmRQcmVjZWRlbmNlICE9PSBudWxsICYmIGVuZFByZWNlZGVuY2UgPD0gcHJlY2VkZW5jZSB8fCBwYXJlbnRoZXNpcyA9PT0gJ2FsbCc7XG4gICAgcmV0dXJuIHBhcmVucztcbiAgfVxuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIFJhbmdlTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBwYXJlbnMgPSBjYWxjdWxhdGVOZWNlc3NhcnlQYXJlbnRoZXNlcyh0aGlzLCBwYXJlbnRoZXNpcyk7IC8vIGZvcm1hdCBzdHJpbmcgYXMgc3RhcnQ6c3RlcDpzdG9wXG5cbiAgICB2YXIgc3RyO1xuICAgIHZhciBzdGFydCA9IHRoaXMuc3RhcnQudG9TdHJpbmcob3B0aW9ucyk7XG5cbiAgICBpZiAocGFyZW5zLnN0YXJ0KSB7XG4gICAgICBzdGFydCA9ICcoJyArIHN0YXJ0ICsgJyknO1xuICAgIH1cblxuICAgIHN0ciA9IHN0YXJ0O1xuXG4gICAgaWYgKHRoaXMuc3RlcCkge1xuICAgICAgdmFyIHN0ZXAgPSB0aGlzLnN0ZXAudG9TdHJpbmcob3B0aW9ucyk7XG5cbiAgICAgIGlmIChwYXJlbnMuc3RlcCkge1xuICAgICAgICBzdGVwID0gJygnICsgc3RlcCArICcpJztcbiAgICAgIH1cblxuICAgICAgc3RyICs9ICc6JyArIHN0ZXA7XG4gICAgfVxuXG4gICAgdmFyIGVuZCA9IHRoaXMuZW5kLnRvU3RyaW5nKG9wdGlvbnMpO1xuXG4gICAgaWYgKHBhcmVucy5lbmQpIHtcbiAgICAgIGVuZCA9ICcoJyArIGVuZCArICcpJztcbiAgICB9XG5cbiAgICBzdHIgKz0gJzonICsgZW5kO1xuICAgIHJldHVybiBzdHI7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBub2RlXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgUmFuZ2VOb2RlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ1JhbmdlTm9kZScsXG4gICAgICBzdGFydDogdGhpcy5zdGFydCxcbiAgICAgIGVuZDogdGhpcy5lbmQsXG4gICAgICBzdGVwOiB0aGlzLnN0ZXBcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYW4gUmFuZ2VOb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJSYW5nZU5vZGVcIiwgXCJzdGFydFwiOiAuLi4sIFwiZW5kXCI6IC4uLiwgXCJzdGVwXCI6IC4uLn1gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtSYW5nZU5vZGV9XG4gICAqL1xuXG5cbiAgUmFuZ2VOb2RlLmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlTm9kZShqc29uLnN0YXJ0LCBqc29uLmVuZCwganNvbi5zdGVwKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBIVE1MIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgUmFuZ2VOb2RlLnByb3RvdHlwZS50b0hUTUwgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIHZhciBwYXJlbnRoZXNpcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5wYXJlbnRoZXNpcyA/IG9wdGlvbnMucGFyZW50aGVzaXMgOiAna2VlcCc7XG4gICAgdmFyIHBhcmVucyA9IGNhbGN1bGF0ZU5lY2Vzc2FyeVBhcmVudGhlc2VzKHRoaXMsIHBhcmVudGhlc2lzKTsgLy8gZm9ybWF0IHN0cmluZyBhcyBzdGFydDpzdGVwOnN0b3BcblxuICAgIHZhciBzdHI7XG4gICAgdmFyIHN0YXJ0ID0gdGhpcy5zdGFydC50b0hUTUwob3B0aW9ucyk7XG5cbiAgICBpZiAocGFyZW5zLnN0YXJ0KSB7XG4gICAgICBzdGFydCA9ICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIHN0YXJ0ICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgIH1cblxuICAgIHN0ciA9IHN0YXJ0O1xuXG4gICAgaWYgKHRoaXMuc3RlcCkge1xuICAgICAgdmFyIHN0ZXAgPSB0aGlzLnN0ZXAudG9IVE1MKG9wdGlvbnMpO1xuXG4gICAgICBpZiAocGFyZW5zLnN0ZXApIHtcbiAgICAgICAgc3RlcCA9ICc8c3BhbiBjbGFzcz1cIm1hdGgtcGFyZW50aGVzaXMgbWF0aC1yb3VuZC1wYXJlbnRoZXNpc1wiPig8L3NwYW4+JyArIHN0ZXAgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPic7XG4gICAgICB9XG5cbiAgICAgIHN0ciArPSAnPHNwYW4gY2xhc3M9XCJtYXRoLW9wZXJhdG9yIG1hdGgtcmFuZ2Utb3BlcmF0b3JcIj46PC9zcGFuPicgKyBzdGVwO1xuICAgIH1cblxuICAgIHZhciBlbmQgPSB0aGlzLmVuZC50b0hUTUwob3B0aW9ucyk7XG5cbiAgICBpZiAocGFyZW5zLmVuZCkge1xuICAgICAgZW5kID0gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgZW5kICsgJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KTwvc3Bhbj4nO1xuICAgIH1cblxuICAgIHN0ciArPSAnPHNwYW4gY2xhc3M9XCJtYXRoLW9wZXJhdG9yIG1hdGgtcmFuZ2Utb3BlcmF0b3JcIj46PC9zcGFuPicgKyBlbmQ7XG4gICAgcmV0dXJuIHN0cjtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBMYVRlWCByZXByZXNlbnRhdGlvblxuICAgKiBAcGFyYW1zIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBSYW5nZU5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJztcbiAgICB2YXIgcGFyZW5zID0gY2FsY3VsYXRlTmVjZXNzYXJ5UGFyZW50aGVzZXModGhpcywgcGFyZW50aGVzaXMpO1xuICAgIHZhciBzdHIgPSB0aGlzLnN0YXJ0LnRvVGV4KG9wdGlvbnMpO1xuXG4gICAgaWYgKHBhcmVucy5zdGFydCkge1xuICAgICAgc3RyID0gXCJcXFxcbGVmdChcIi5jb25jYXQoc3RyLCBcIlxcXFxyaWdodClcIik7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc3RlcCkge1xuICAgICAgdmFyIHN0ZXAgPSB0aGlzLnN0ZXAudG9UZXgob3B0aW9ucyk7XG5cbiAgICAgIGlmIChwYXJlbnMuc3RlcCkge1xuICAgICAgICBzdGVwID0gXCJcXFxcbGVmdChcIi5jb25jYXQoc3RlcCwgXCJcXFxccmlnaHQpXCIpO1xuICAgICAgfVxuXG4gICAgICBzdHIgKz0gJzonICsgc3RlcDtcbiAgICB9XG5cbiAgICB2YXIgZW5kID0gdGhpcy5lbmQudG9UZXgob3B0aW9ucyk7XG5cbiAgICBpZiAocGFyZW5zLmVuZCkge1xuICAgICAgZW5kID0gXCJcXFxcbGVmdChcIi5jb25jYXQoZW5kLCBcIlxcXFxyaWdodClcIik7XG4gICAgfVxuXG4gICAgc3RyICs9ICc6JyArIGVuZDtcbiAgICByZXR1cm4gc3RyO1xuICB9O1xuXG4gIHJldHVybiBSYW5nZU5vZGU7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWUsXG4gIGlzTm9kZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhbmdlTm9kZSA9IGNyZWF0ZVJhbmdlTm9kZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmVsYXRpb25hbE5vZGUgPSB2b2lkIDA7XG5cbnZhciBfb3BlcmF0b3JzID0gcmVxdWlyZShcIi4uL29wZXJhdG9yc1wiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2N1c3RvbXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY3VzdG9tc1wiKTtcblxudmFyIF9sYXRleCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9sYXRleFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ1JlbGF0aW9uYWxOb2RlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ05vZGUnXTtcbnZhciBjcmVhdGVSZWxhdGlvbmFsTm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBOb2RlID0gX3JlZi5Ob2RlO1xuXG4gIC8qKlxuICAgKiBBIG5vZGUgcmVwcmVzZW50aW5nIGEgY2hhaW5lZCBjb25kaXRpb25hbCBleHByZXNzaW9uLCBzdWNoIGFzICd4ID4geSA+IHonXG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nW119IGNvbmRpdGlvbmFscyAgIEFuIGFycmF5IG9mIGNvbmRpdGlvbmFsIG9wZXJhdG9ycyB1c2VkIHRvIGNvbXBhcmUgdGhlIHBhcmFtZXRlcnNcbiAgICogQHBhcmFtIHtOb2RlW119IHBhcmFtcyAgIFRoZSBwYXJhbWV0ZXJzIHRoYXQgd2lsbCBiZSBjb21wYXJlZFxuICAgKlxuICAgKiBAY29uc3RydWN0b3IgUmVsYXRpb25hbE5vZGVcbiAgICogQGV4dGVuZHMge05vZGV9XG4gICAqL1xuICBmdW5jdGlvbiBSZWxhdGlvbmFsTm9kZShjb25kaXRpb25hbHMsIHBhcmFtcykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBSZWxhdGlvbmFsTm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfVxuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGNvbmRpdGlvbmFscykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BhcmFtZXRlciBjb25kaXRpb25hbHMgbXVzdCBiZSBhbiBhcnJheScpO1xuICAgIGlmICghQXJyYXkuaXNBcnJheShwYXJhbXMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJhbWV0ZXIgcGFyYW1zIG11c3QgYmUgYW4gYXJyYXknKTtcbiAgICBpZiAoY29uZGl0aW9uYWxzLmxlbmd0aCAhPT0gcGFyYW1zLmxlbmd0aCAtIDEpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1BhcmFtZXRlciBwYXJhbXMgbXVzdCBjb250YWluIGV4YWN0bHkgb25lIG1vcmUgZWxlbWVudCB0aGFuIHBhcmFtZXRlciBjb25kaXRpb25hbHMnKTtcbiAgICB0aGlzLmNvbmRpdGlvbmFscyA9IGNvbmRpdGlvbmFscztcbiAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcbiAgfVxuXG4gIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7XG4gIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS50eXBlID0gJ1JlbGF0aW9uYWxOb2RlJztcbiAgUmVsYXRpb25hbE5vZGUucHJvdG90eXBlLmlzUmVsYXRpb25hbE5vZGUgPSB0cnVlO1xuICAvKipcbiAgICogQ29tcGlsZSBhIG5vZGUgaW50byBhIEphdmFTY3JpcHQgZnVuY3Rpb24uXG4gICAqIFRoaXMgYmFzaWNhbGx5IHByZS1jYWxjdWxhdGVzIGFzIG11Y2ggYXMgcG9zc2libGUgYW5kIG9ubHkgbGVhdmVzIG9wZW5cbiAgICogY2FsY3VsYXRpb25zIHdoaWNoIGRlcGVuZCBvbiBhIGR5bmFtaWMgc2NvcGUgd2l0aCB2YXJpYWJsZXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBtYXRoICAgICBNYXRoLmpzIG5hbWVzcGFjZSB3aXRoIGZ1bmN0aW9ucyBhbmQgY29uc3RhbnRzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gYXJnTmFtZXMgQW4gb2JqZWN0IHdpdGggYXJndW1lbnQgbmFtZXMgYXMga2V5IGFuZCBgdHJ1ZWBcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHZhbHVlLiBVc2VkIGluIHRoZSBTeW1ib2xOb2RlIHRvIG9wdGltaXplXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgYXJndW1lbnRzIGZyb20gdXNlciBhc3NpZ25lZCBmdW5jdGlvbnNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIChzZWUgRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkgb3Igc3BlY2lhbCBzeW1ib2xzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlIGBlbmRgIChzZWUgSW5kZXhOb2RlKS5cbiAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSBmdW5jdGlvbiB3aGljaCBjYW4gYmUgY2FsbGVkIGxpa2U6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgZXZhbE5vZGUoc2NvcGU6IE9iamVjdCwgYXJnczogT2JqZWN0LCBjb250ZXh0OiAqKVxuICAgKi9cblxuICBSZWxhdGlvbmFsTm9kZS5wcm90b3R5cGUuX2NvbXBpbGUgPSBmdW5jdGlvbiAobWF0aCwgYXJnTmFtZXMpIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIGNvbXBpbGVkID0gdGhpcy5wYXJhbXMubWFwKGZ1bmN0aW9uIChwKSB7XG4gICAgICByZXR1cm4gcC5fY29tcGlsZShtYXRoLCBhcmdOYW1lcyk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGV2YWxSZWxhdGlvbmFsTm9kZShzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgdmFyIGV2YWxMaHM7XG4gICAgICB2YXIgZXZhbFJocyA9IGNvbXBpbGVkWzBdKHNjb3BlLCBhcmdzLCBjb250ZXh0KTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLmNvbmRpdGlvbmFscy5sZW5ndGg7IGkrKykge1xuICAgICAgICBldmFsTGhzID0gZXZhbFJocztcbiAgICAgICAgZXZhbFJocyA9IGNvbXBpbGVkW2kgKyAxXShzY29wZSwgYXJncywgY29udGV4dCk7XG4gICAgICAgIHZhciBjb25kRm4gPSAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShtYXRoLCBzZWxmLmNvbmRpdGlvbmFsc1tpXSk7XG5cbiAgICAgICAgaWYgKCFjb25kRm4oZXZhbExocywgZXZhbFJocykpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2tcbiAgICovXG5cblxuICBSZWxhdGlvbmFsTm9kZS5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLnBhcmFtcy5mb3JFYWNoKGZ1bmN0aW9uIChuLCBpKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2sobiwgJ3BhcmFtc1snICsgaSArICddJywgX3RoaXMpO1xuICAgIH0sIHRoaXMpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IFJlbGF0aW9uYWxOb2RlIGhhdmluZyBpdHMgY2hpbGRzIGJlIHRoZSByZXN1bHRzIG9mIGNhbGxpbmdcbiAgICogdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIG9mIHRoZSBjaGlsZHMgb2YgdGhlIG9yaWdpbmFsIG5vZGUuXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKTogTm9kZX0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge1JlbGF0aW9uYWxOb2RlfSBSZXR1cm5zIGEgdHJhbnNmb3JtZWQgY29weSBvZiB0aGUgbm9kZVxuICAgKi9cblxuXG4gIFJlbGF0aW9uYWxOb2RlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHJldHVybiBuZXcgUmVsYXRpb25hbE5vZGUodGhpcy5jb25kaXRpb25hbHMuc2xpY2UoKSwgdGhpcy5wYXJhbXMubWFwKGZ1bmN0aW9uIChuLCBpKSB7XG4gICAgICByZXR1cm4gX3RoaXMyLl9pZk5vZGUoY2FsbGJhY2sobiwgJ3BhcmFtc1snICsgaSArICddJywgX3RoaXMyKSk7XG4gICAgfSwgdGhpcykpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhpcyBub2RlLCBhIHNoYWxsb3cgY29weVxuICAgKiBAcmV0dXJuIHtSZWxhdGlvbmFsTm9kZX1cbiAgICovXG5cblxuICBSZWxhdGlvbmFsTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBSZWxhdGlvbmFsTm9kZSh0aGlzLmNvbmRpdGlvbmFscywgdGhpcy5wYXJhbXMpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHN0cmluZyByZXByZXNlbnRhdGlvbi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBSZWxhdGlvbmFsTm9kZS5wcm90b3R5cGUuX3RvU3RyaW5nID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgcGFyZW50aGVzaXMgPSBvcHRpb25zICYmIG9wdGlvbnMucGFyZW50aGVzaXMgPyBvcHRpb25zLnBhcmVudGhlc2lzIDogJ2tlZXAnO1xuICAgIHZhciBwcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkodGhpcywgcGFyZW50aGVzaXMpO1xuICAgIHZhciBwYXJhbVN0cmluZ3MgPSB0aGlzLnBhcmFtcy5tYXAoZnVuY3Rpb24gKHAsIGluZGV4KSB7XG4gICAgICB2YXIgcGFyYW1QcmVjZWRlbmNlID0gKDAsIF9vcGVyYXRvcnMuZ2V0UHJlY2VkZW5jZSkocCwgcGFyZW50aGVzaXMpO1xuICAgICAgcmV0dXJuIHBhcmVudGhlc2lzID09PSAnYWxsJyB8fCBwYXJhbVByZWNlZGVuY2UgIT09IG51bGwgJiYgcGFyYW1QcmVjZWRlbmNlIDw9IHByZWNlZGVuY2UgPyAnKCcgKyBwLnRvU3RyaW5nKG9wdGlvbnMpICsgJyknIDogcC50b1N0cmluZyhvcHRpb25zKTtcbiAgICB9KTtcbiAgICB2YXIgb3BlcmF0b3JNYXAgPSB7XG4gICAgICBlcXVhbDogJz09JyxcbiAgICAgIHVuZXF1YWw6ICchPScsXG4gICAgICBzbWFsbGVyOiAnPCcsXG4gICAgICBsYXJnZXI6ICc+JyxcbiAgICAgIHNtYWxsZXJFcTogJzw9JyxcbiAgICAgIGxhcmdlckVxOiAnPj0nXG4gICAgfTtcbiAgICB2YXIgcmV0ID0gcGFyYW1TdHJpbmdzWzBdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbmRpdGlvbmFscy5sZW5ndGg7IGkrKykge1xuICAgICAgcmV0ICs9ICcgJyArIG9wZXJhdG9yTWFwW3RoaXMuY29uZGl0aW9uYWxzW2ldXSArICcgJyArIHBhcmFtU3RyaW5nc1tpICsgMV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBSZWxhdGlvbmFsTm9kZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdSZWxhdGlvbmFsTm9kZScsXG4gICAgICBjb25kaXRpb25hbHM6IHRoaXMuY29uZGl0aW9uYWxzLFxuICAgICAgcGFyYW1zOiB0aGlzLnBhcmFtc1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhIFJlbGF0aW9uYWxOb2RlIGZyb20gaXRzIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEFuIG9iamVjdCBzdHJ1Y3R1cmVkIGxpa2VcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJSZWxhdGlvbmFsTm9kZVwiLCBcImNvbmRpdGlvblwiOiAuLi4sIFwidHJ1ZUV4cHJcIjogLi4uLCBcImZhbHNlRXhwclwiOiAuLi59YCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIG1hdGhqcyBpcyBvcHRpb25hbFxuICAgKiBAcmV0dXJucyB7UmVsYXRpb25hbE5vZGV9XG4gICAqL1xuXG5cbiAgUmVsYXRpb25hbE5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgUmVsYXRpb25hbE5vZGUoanNvbi5jb25kaXRpb25hbHMsIGpzb24ucGFyYW1zKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBIVE1MIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgUmVsYXRpb25hbE5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJztcbiAgICB2YXIgcHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKHRoaXMsIHBhcmVudGhlc2lzKTtcbiAgICB2YXIgcGFyYW1TdHJpbmdzID0gdGhpcy5wYXJhbXMubWFwKGZ1bmN0aW9uIChwLCBpbmRleCkge1xuICAgICAgdmFyIHBhcmFtUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKHAsIHBhcmVudGhlc2lzKTtcbiAgICAgIHJldHVybiBwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgcGFyYW1QcmVjZWRlbmNlICE9PSBudWxsICYmIHBhcmFtUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlID8gJzxzcGFuIGNsYXNzPVwibWF0aC1wYXJlbnRoZXNpcyBtYXRoLXJvdW5kLXBhcmVudGhlc2lzXCI+KDwvc3Bhbj4nICsgcC50b0hUTUwob3B0aW9ucykgKyAnPHNwYW4gY2xhc3M9XCJtYXRoLXBhcmVudGhlc2lzIG1hdGgtcm91bmQtcGFyZW50aGVzaXNcIj4pPC9zcGFuPicgOiBwLnRvSFRNTChvcHRpb25zKTtcbiAgICB9KTtcbiAgICB2YXIgb3BlcmF0b3JNYXAgPSB7XG4gICAgICBlcXVhbDogJz09JyxcbiAgICAgIHVuZXF1YWw6ICchPScsXG4gICAgICBzbWFsbGVyOiAnPCcsXG4gICAgICBsYXJnZXI6ICc+JyxcbiAgICAgIHNtYWxsZXJFcTogJzw9JyxcbiAgICAgIGxhcmdlckVxOiAnPj0nXG4gICAgfTtcbiAgICB2YXIgcmV0ID0gcGFyYW1TdHJpbmdzWzBdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmNvbmRpdGlvbmFscy5sZW5ndGg7IGkrKykge1xuICAgICAgcmV0ICs9ICc8c3BhbiBjbGFzcz1cIm1hdGgtb3BlcmF0b3IgbWF0aC1iaW5hcnktb3BlcmF0b3IgbWF0aC1leHBsaWNpdC1iaW5hcnktb3BlcmF0b3JcIj4nICsgKDAsIF9zdHJpbmcuZXNjYXBlKShvcGVyYXRvck1hcFt0aGlzLmNvbmRpdGlvbmFsc1tpXV0pICsgJzwvc3Bhbj4nICsgcGFyYW1TdHJpbmdzW2kgKyAxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgUmVsYXRpb25hbE5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHBhcmVudGhlc2lzID0gb3B0aW9ucyAmJiBvcHRpb25zLnBhcmVudGhlc2lzID8gb3B0aW9ucy5wYXJlbnRoZXNpcyA6ICdrZWVwJztcbiAgICB2YXIgcHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKHRoaXMsIHBhcmVudGhlc2lzKTtcbiAgICB2YXIgcGFyYW1TdHJpbmdzID0gdGhpcy5wYXJhbXMubWFwKGZ1bmN0aW9uIChwLCBpbmRleCkge1xuICAgICAgdmFyIHBhcmFtUHJlY2VkZW5jZSA9ICgwLCBfb3BlcmF0b3JzLmdldFByZWNlZGVuY2UpKHAsIHBhcmVudGhlc2lzKTtcbiAgICAgIHJldHVybiBwYXJlbnRoZXNpcyA9PT0gJ2FsbCcgfHwgcGFyYW1QcmVjZWRlbmNlICE9PSBudWxsICYmIHBhcmFtUHJlY2VkZW5jZSA8PSBwcmVjZWRlbmNlID8gJ1xcXFxsZWZ0KCcgKyBwLnRvVGV4KG9wdGlvbnMpICsgJ1xccmlnaHQpJyA6IHAudG9UZXgob3B0aW9ucyk7XG4gICAgfSk7XG4gICAgdmFyIHJldCA9IHBhcmFtU3RyaW5nc1swXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5jb25kaXRpb25hbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJldCArPSBfbGF0ZXgubGF0ZXhPcGVyYXRvcnNbdGhpcy5jb25kaXRpb25hbHNbaV1dICsgcGFyYW1TdHJpbmdzW2kgKyAxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9O1xuXG4gIHJldHVybiBSZWxhdGlvbmFsTm9kZTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZSxcbiAgaXNOb2RlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmVsYXRpb25hbE5vZGUgPSBjcmVhdGVSZWxhdGlvbmFsTm9kZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3ltYm9sTm9kZSA9IHZvaWQgMDtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2N1c3RvbXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY3VzdG9tc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbGF0ZXggPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbGF0ZXhcIik7XG5cbnZhciBuYW1lID0gJ1N5bWJvbE5vZGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnbWF0aCcsICc/VW5pdCcsICdOb2RlJ107XG52YXIgY3JlYXRlU3ltYm9sTm9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBtYXRoID0gX3JlZi5tYXRoLFxuICAgICAgVW5pdCA9IF9yZWYuVW5pdCxcbiAgICAgIE5vZGUgPSBfcmVmLk5vZGU7XG5cbiAgLyoqXG4gICAqIENoZWNrIHdoZXRoZXIgc29tZSBuYW1lIGlzIGEgdmFsdWVsZXNzIHVuaXQgbGlrZSBcImluY2hcIi5cbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG4gIGZ1bmN0aW9uIGlzVmFsdWVsZXNzVW5pdChuYW1lKSB7XG4gICAgcmV0dXJuIFVuaXQgPyBVbml0LmlzVmFsdWVsZXNzVW5pdChuYW1lKSA6IGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3IgU3ltYm9sTm9kZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICogQSBzeW1ib2wgbm9kZSBjYW4gaG9sZCBhbmQgcmVzb2x2ZSBhIHN5bWJvbFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAZXh0ZW5kcyB7Tm9kZX1cbiAgICovXG5cblxuICBmdW5jdGlvbiBTeW1ib2xOb2RlKG5hbWUpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgU3ltYm9sTm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfSAvLyB2YWxpZGF0ZSBpbnB1dFxuXG5cbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdTdHJpbmcgZXhwZWN0ZWQgZm9yIHBhcmFtZXRlciBcIm5hbWVcIicpO1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cblxuICBTeW1ib2xOb2RlLnByb3RvdHlwZSA9IG5ldyBOb2RlKCk7XG4gIFN5bWJvbE5vZGUucHJvdG90eXBlLnR5cGUgPSAnU3ltYm9sTm9kZSc7XG4gIFN5bWJvbE5vZGUucHJvdG90eXBlLmlzU3ltYm9sTm9kZSA9IHRydWU7XG4gIC8qKlxuICAgKiBDb21waWxlIGEgbm9kZSBpbnRvIGEgSmF2YVNjcmlwdCBmdW5jdGlvbi5cbiAgICogVGhpcyBiYXNpY2FsbHkgcHJlLWNhbGN1bGF0ZXMgYXMgbXVjaCBhcyBwb3NzaWJsZSBhbmQgb25seSBsZWF2ZXMgb3BlblxuICAgKiBjYWxjdWxhdGlvbnMgd2hpY2ggZGVwZW5kIG9uIGEgZHluYW1pYyBzY29wZSB3aXRoIHZhcmlhYmxlcy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG1hdGggICAgIE1hdGguanMgbmFtZXNwYWNlIHdpdGggZnVuY3Rpb25zIGFuZCBjb25zdGFudHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBhcmdOYW1lcyBBbiBvYmplY3Qgd2l0aCBhcmd1bWVudCBuYW1lcyBhcyBrZXkgYW5kIGB0cnVlYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgdmFsdWUuIFVzZWQgaW4gdGhlIFN5bWJvbE5vZGUgdG8gb3B0aW1pemVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBhcmd1bWVudHMgZnJvbSB1c2VyIGFzc2lnbmVkIGZ1bmN0aW9uc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKHNlZSBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKSBvciBzcGVjaWFsIHN5bWJvbHNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UgYGVuZGAgKHNlZSBJbmRleE5vZGUpLlxuICAgKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdoaWNoIGNhbiBiZSBjYWxsZWQgbGlrZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBldmFsTm9kZShzY29wZTogT2JqZWN0LCBhcmdzOiBPYmplY3QsIGNvbnRleHQ6ICopXG4gICAqL1xuXG4gIFN5bWJvbE5vZGUucHJvdG90eXBlLl9jb21waWxlID0gZnVuY3Rpb24gKG1hdGgsIGFyZ05hbWVzKSB7XG4gICAgdmFyIG5hbWUgPSB0aGlzLm5hbWU7XG5cbiAgICBpZiAoYXJnTmFtZXNbbmFtZV0gPT09IHRydWUpIHtcbiAgICAgIC8vIHRoaXMgaXMgYSBGdW5jdGlvbkFzc2lnbm1lbnQgYXJndW1lbnRcbiAgICAgIC8vIChsaWtlIGFuIHggd2hlbiBpbnNpZGUgdGhlIGV4cHJlc3Npb24gb2YgYSBmdW5jdGlvbiBhc3NpZ25tZW50IGBmKHgpID0gLi4uYClcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoc2NvcGUsIGFyZ3MsIGNvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIGFyZ3NbbmFtZV07XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAobmFtZSBpbiBtYXRoKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKHNjb3BlLCBhcmdzLCBjb250ZXh0KSB7XG4gICAgICAgIHJldHVybiBuYW1lIGluIHNjb3BlID8gKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkoc2NvcGUsIG5hbWUpIDogKDAsIF9jdXN0b21zLmdldFNhZmVQcm9wZXJ0eSkobWF0aCwgbmFtZSk7XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgaXNVbml0ID0gaXNWYWx1ZWxlc3NVbml0KG5hbWUpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChzY29wZSwgYXJncywgY29udGV4dCkge1xuICAgICAgICByZXR1cm4gbmFtZSBpbiBzY29wZSA/ICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKHNjb3BlLCBuYW1lKSA6IGlzVW5pdCA/IG5ldyBVbml0KG51bGwsIG5hbWUpIDogdW5kZWYobmFtZSk7XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZWFjaCBvZiB0aGUgY2hpbGQgbm9kZXMgb2YgdGhpcyBub2RlXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oY2hpbGQ6IE5vZGUsIHBhdGg6IHN0cmluZywgcGFyZW50OiBOb2RlKX0gY2FsbGJhY2tcbiAgICovXG5cblxuICBTeW1ib2xOb2RlLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7fSAvLyBub3RoaW5nIHRvIGRvLCB3ZSBkb24ndCBoYXZlIGNoaWxkc1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgU3ltYm9sTm9kZSBoYXZpbmcgaXQncyBjaGlsZHMgYmUgdGhlIHJlc3VsdHMgb2YgY2FsbGluZ1xuICAgKiB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIGNoaWxkcyBvZiB0aGUgb3JpZ2luYWwgbm9kZS5cbiAgICogQHBhcmFtIHtmdW5jdGlvbihjaGlsZDogTm9kZSwgcGF0aDogc3RyaW5nLCBwYXJlbnQ6IE5vZGUpIDogTm9kZX0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge1N5bWJvbE5vZGV9IFJldHVybnMgYSBjbG9uZSBvZiB0aGUgbm9kZVxuICAgKi9cbiAgO1xuXG4gIFN5bWJvbE5vZGUucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIHJldHVybiB0aGlzLmNsb25lKCk7XG4gIH07XG4gIC8qKlxuICAgKiBUaHJvd3MgYW4gZXJyb3IgJ1VuZGVmaW5lZCBzeW1ib2wge25hbWV9J1xuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHVuZGVmKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZGVmaW5lZCBzeW1ib2wgJyArIG5hbWUpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGlzIG5vZGUsIGEgc2hhbGxvdyBjb3B5XG4gICAqIEByZXR1cm4ge1N5bWJvbE5vZGV9XG4gICAqL1xuXG5cbiAgU3ltYm9sTm9kZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBTeW1ib2xOb2RlKHRoaXMubmFtZSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqIEBvdmVycmlkZVxuICAgKi9cblxuXG4gIFN5bWJvbE5vZGUucHJvdG90eXBlLl90b1N0cmluZyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBIVE1MIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqIEBvdmVycmlkZVxuICAgKi9cblxuXG4gIFN5bWJvbE5vZGUucHJvdG90eXBlLnRvSFRNTCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIG5hbWUgPSAoMCwgX3N0cmluZy5lc2NhcGUpKHRoaXMubmFtZSk7XG5cbiAgICBpZiAobmFtZSA9PT0gJ3RydWUnIHx8IG5hbWUgPT09ICdmYWxzZScpIHtcbiAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLXN5bWJvbCBtYXRoLWJvb2xlYW5cIj4nICsgbmFtZSArICc8L3NwYW4+JztcbiAgICB9IGVsc2UgaWYgKG5hbWUgPT09ICdpJykge1xuICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtc3ltYm9sIG1hdGgtaW1hZ2luYXJ5LXN5bWJvbFwiPicgKyBuYW1lICsgJzwvc3Bhbj4nO1xuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ0luZmluaXR5Jykge1xuICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtc3ltYm9sIG1hdGgtaW5maW5pdHktc3ltYm9sXCI+JyArIG5hbWUgKyAnPC9zcGFuPic7XG4gICAgfSBlbHNlIGlmIChuYW1lID09PSAnTmFOJykge1xuICAgICAgcmV0dXJuICc8c3BhbiBjbGFzcz1cIm1hdGgtc3ltYm9sIG1hdGgtbmFuLXN5bWJvbFwiPicgKyBuYW1lICsgJzwvc3Bhbj4nO1xuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ251bGwnKSB7XG4gICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1zeW1ib2wgbWF0aC1udWxsLXN5bWJvbFwiPicgKyBuYW1lICsgJzwvc3Bhbj4nO1xuICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiAnPHNwYW4gY2xhc3M9XCJtYXRoLXN5bWJvbCBtYXRoLXVuZGVmaW5lZC1zeW1ib2xcIj4nICsgbmFtZSArICc8L3NwYW4+JztcbiAgICB9XG5cbiAgICByZXR1cm4gJzxzcGFuIGNsYXNzPVwibWF0aC1zeW1ib2xcIj4nICsgbmFtZSArICc8L3NwYW4+JztcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIG5vZGVcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBTeW1ib2xOb2RlLnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ1N5bWJvbE5vZGUnLFxuICAgICAgbmFtZTogdGhpcy5uYW1lXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGEgU3ltYm9sTm9kZSBmcm9tIGl0cyBKU09OIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiU3ltYm9sTm9kZVwiLCBuYW1lOiBcInhcIn1gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtTeW1ib2xOb2RlfVxuICAgKi9cblxuXG4gIFN5bWJvbE5vZGUuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgU3ltYm9sTm9kZShqc29uLm5hbWUpO1xuICB9O1xuICAvKipcbiAgICogR2V0IExhVGVYIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gICAqIEBvdmVycmlkZVxuICAgKi9cblxuXG4gIFN5bWJvbE5vZGUucHJvdG90eXBlLl90b1RleCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIGlzVW5pdCA9IGZhbHNlO1xuXG4gICAgaWYgKHR5cGVvZiBtYXRoW3RoaXMubmFtZV0gPT09ICd1bmRlZmluZWQnICYmIGlzVmFsdWVsZXNzVW5pdCh0aGlzLm5hbWUpKSB7XG4gICAgICBpc1VuaXQgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhciBzeW1ib2wgPSAoMCwgX2xhdGV4LnRvU3ltYm9sKSh0aGlzLm5hbWUsIGlzVW5pdCk7XG5cbiAgICBpZiAoc3ltYm9sWzBdID09PSAnXFxcXCcpIHtcbiAgICAgIC8vIG5vIHNwYWNlIG5lZWRlZCBpZiB0aGUgc3ltYm9sIHN0YXJ0cyB3aXRoICdcXCdcbiAgICAgIHJldHVybiBzeW1ib2w7XG4gICAgfSAvLyB0aGUgc3BhY2UgcHJldmVudHMgc3ltYm9scyBmcm9tIGJyZWFraW5nIHN0dWZmIGxpa2UgJ1xcY2RvdCcgaWYgaXQncyB3cml0dGVuIHJpZ2h0IGJlZm9yZSB0aGUgc3ltYm9sXG5cblxuICAgIHJldHVybiAnICcgKyBzeW1ib2w7XG4gIH07XG5cbiAgcmV0dXJuIFN5bWJvbE5vZGU7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWUsXG4gIGlzTm9kZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVN5bWJvbE5vZGUgPSBjcmVhdGVTeW1ib2xOb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hY2Nlc3NGYWN0b3J5ID0gYWNjZXNzRmFjdG9yeTtcblxudmFyIF9lcnJvclRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuLi8uLi90cmFuc2Zvcm0vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfY3VzdG9tcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9jdXN0b21zXCIpO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbmZ1bmN0aW9uIGFjY2Vzc0ZhY3RvcnkoX3JlZikge1xuICB2YXIgc3Vic2V0ID0gX3JlZi5zdWJzZXQ7XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIHBhcnQgb2YgYW4gb2JqZWN0OlxuICAgKlxuICAgKiAtIFJldHJpZXZlIGEgcHJvcGVydHkgZnJvbSBhbiBvYmplY3RcbiAgICogLSBSZXRyaWV2ZSBhIHBhcnQgb2YgYSBzdHJpbmdcbiAgICogLSBSZXRyaWV2ZSBhIG1hdHJpeCBzdWJzZXRcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3QgfCBBcnJheSB8IE1hdHJpeCB8IHN0cmluZ30gb2JqZWN0XG4gICAqIEBwYXJhbSB7SW5kZXh9IGluZGV4XG4gICAqIEByZXR1cm4ge09iamVjdCB8IEFycmF5IHwgTWF0cml4IHwgc3RyaW5nfSBSZXR1cm5zIHRoZSBzdWJzZXRcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBhY2Nlc3Mob2JqZWN0LCBpbmRleCkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBzdWJzZXQob2JqZWN0LCBpbmRleCk7XG4gICAgICB9IGVsc2UgaWYgKG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0LnN1YnNldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBNYXRyaXhcbiAgICAgICAgcmV0dXJuIG9iamVjdC5zdWJzZXQoaW5kZXgpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBUT0RPOiBtb3ZlIGdldFN0cmluZ1N1YnNldCBpbnRvIGEgc2VwYXJhdGUgdXRpbCBmaWxlLCB1c2UgdGhhdFxuICAgICAgICByZXR1cm4gc3Vic2V0KG9iamVjdCwgaW5kZXgpO1xuICAgICAgfSBlbHNlIGlmIChfdHlwZW9mKG9iamVjdCkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmICghaW5kZXguaXNPYmplY3RQcm9wZXJ0eSgpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGFwcGx5IGEgbnVtZXJpYyBpbmRleCBhcyBvYmplY3QgcHJvcGVydHknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoMCwgX2N1c3RvbXMuZ2V0U2FmZVByb3BlcnR5KShvYmplY3QsIGluZGV4LmdldE9iamVjdFByb3BlcnR5KCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGFwcGx5IGluZGV4OiB1bnN1cHBvcnRlZCB0eXBlIG9mIG9iamVjdCcpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgKDAsIF9lcnJvclRyYW5zZm9ybS5lcnJvclRyYW5zZm9ybSkoZXJyKTtcbiAgICB9XG4gIH07XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFzc2lnbkZhY3RvcnkgPSBhc3NpZ25GYWN0b3J5O1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4uLy4uL3RyYW5zZm9ybS91dGlscy9lcnJvclRyYW5zZm9ybVwiKTtcblxudmFyIF9jdXN0b21zID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2N1c3RvbXNcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gYXNzaWduRmFjdG9yeShfcmVmKSB7XG4gIHZhciBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4O1xuXG4gIC8qKlxuICAgKiBSZXBsYWNlIHBhcnQgb2YgYW4gb2JqZWN0OlxuICAgKlxuICAgKiAtIEFzc2lnbiBhIHByb3BlcnR5IHRvIGFuIG9iamVjdFxuICAgKiAtIFJlcGxhY2UgYSBwYXJ0IG9mIGEgc3RyaW5nXG4gICAqIC0gUmVwbGFjZSBhIG1hdHJpeCBzdWJzZXRcbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3QgfCBBcnJheSB8IE1hdHJpeCB8IHN0cmluZ30gb2JqZWN0XG4gICAqIEBwYXJhbSB7SW5kZXh9IGluZGV4XG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHJldHVybiB7T2JqZWN0IHwgQXJyYXkgfCBNYXRyaXggfCBzdHJpbmd9IFJldHVybnMgdGhlIG9yaWdpbmFsIG9iamVjdFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjZXB0IGluIGNhc2Ugb2YgYSBzdHJpbmdcbiAgICovXG4gIC8vIFRPRE86IGNoYW5nZSBhc3NpZ24gdG8gcmV0dXJuIHRoZSB2YWx1ZSBpbnN0ZWFkIG9mIHRoZSBvYmplY3RcbiAgcmV0dXJuIGZ1bmN0aW9uIGFzc2lnbihvYmplY3QsIGluZGV4LCB2YWx1ZSkge1xuICAgIHRyeSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgIC8vIHdlIHVzZSBtYXRyaXguc3Vic2V0IGhlcmUgaW5zdGVhZCBvZiB0aGUgZnVuY3Rpb24gc3Vic2V0IGJlY2F1c2Ugd2UgbXVzdCBub3QgY2xvbmUgdGhlIGNvbnRlbnRzXG4gICAgICAgIHJldHVybiBtYXRyaXgob2JqZWN0KS5zdWJzZXQoaW5kZXgsIHZhbHVlKS52YWx1ZU9mKCk7XG4gICAgICB9IGVsc2UgaWYgKG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0LnN1YnNldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAvLyBNYXRyaXhcbiAgICAgICAgcmV0dXJuIG9iamVjdC5zdWJzZXQoaW5kZXgsIHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gVE9ETzogbW92ZSBzZXRTdHJpbmdTdWJzZXQgaW50byBhIHNlcGFyYXRlIHV0aWwgZmlsZSwgdXNlIHRoYXRcbiAgICAgICAgcmV0dXJuIHN1YnNldChvYmplY3QsIGluZGV4LCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKF90eXBlb2Yob2JqZWN0KSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKCFpbmRleC5pc09iamVjdFByb3BlcnR5KCkpIHtcbiAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ0Nhbm5vdCBhcHBseSBhIG51bWVyaWMgaW5kZXggYXMgb2JqZWN0IHByb3BlcnR5Jyk7XG4gICAgICAgIH1cblxuICAgICAgICAoMCwgX2N1c3RvbXMuc2V0U2FmZVByb3BlcnR5KShvYmplY3QsIGluZGV4LmdldE9iamVjdFByb3BlcnR5KCksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIG9iamVjdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBhcHBseSBpbmRleDogdW5zdXBwb3J0ZWQgdHlwZSBvZiBvYmplY3QnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgfVxuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5nZXRQcmVjZWRlbmNlID0gZ2V0UHJlY2VkZW5jZTtcbmV4cG9ydHMuZ2V0QXNzb2NpYXRpdml0eSA9IGdldEFzc29jaWF0aXZpdHk7XG5leHBvcnRzLmlzQXNzb2NpYXRpdmVXaXRoID0gaXNBc3NvY2lhdGl2ZVdpdGg7XG5leHBvcnRzLnByb3BlcnRpZXMgPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uL3V0aWxzL29iamVjdFwiKTtcblxuLy8gbGlzdCBvZiBpZGVudGlmaWVycyBvZiBub2RlcyBpbiBvcmRlciBvZiB0aGVpciBwcmVjZWRlbmNlXG4vLyBhbHNvIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGxlZnQvcmlnaHQgYXNzb2NpYXRpdml0eVxuLy8gYW5kIHdoaWNoIG90aGVyIG9wZXJhdG9yIHRoZSBvcGVyYXRvciBpcyBhc3NvY2lhdGl2ZSB3aXRoXG4vLyBFeGFtcGxlOlxuLy8gYWRkaXRpb24gaXMgYXNzb2NpYXRpdmUgd2l0aCBhZGRpdGlvbiBhbmQgc3VidHJhY3Rpb24sIGJlY2F1c2U6XG4vLyAoYStiKStjPWErKGIrYylcbi8vIChhK2IpLWM9YSsoYi1jKVxuLy9cbi8vIHBvc3RmaXggb3BlcmF0b3JzIGFyZSBsZWZ0IGFzc29jaWF0aXZlLCBwcmVmaXggb3BlcmF0b3JzXG4vLyBhcmUgcmlnaHQgYXNzb2NpYXRpdmVcbi8vXG4vLyBJdCdzIGFsc28gcG9zc2libGUgdG8gc2V0IHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcbi8vIGxhdGV4UGFyZW5zOiBpZiBzZXQgdG8gZmFsc2UsIHRoaXMgbm9kZSBkb2Vzbid0IG5lZWQgdG8gYmUgZW5jbG9zZWRcbi8vICAgICAgICAgICAgICBpbiBwYXJlbnRoZXNlcyB3aGVuIHVzaW5nIExhVGVYXG4vLyBsYXRleExlZnRQYXJlbnM6IGlmIHNldCB0byBmYWxzZSwgdGhpcyAhT3BlcmF0b3JOb2RlJ3MhXG4vLyAgICAgICAgICAgICAgICAgIGxlZnQgYXJndW1lbnQgZG9lc24ndCBuZWVkIHRvIGJlIGVuY2xvc2VkXG4vLyAgICAgICAgICAgICAgICAgIGluIHBhcmVudGhlc2VzXG4vLyBsYXRleFJpZ2h0UGFyZW5zOiB0aGUgc2FtZSBmb3IgdGhlIHJpZ2h0IGFyZ3VtZW50XG52YXIgcHJvcGVydGllcyA9IFt7XG4gIC8vIGFzc2lnbm1lbnRcbiAgQXNzaWdubWVudE5vZGU6IHt9LFxuICBGdW5jdGlvbkFzc2lnbm1lbnROb2RlOiB7fVxufSwge1xuICAvLyBjb25kaXRpb25hbCBleHByZXNzaW9uXG4gIENvbmRpdGlvbmFsTm9kZToge1xuICAgIGxhdGV4TGVmdFBhcmVuczogZmFsc2UsXG4gICAgbGF0ZXhSaWdodFBhcmVuczogZmFsc2UsXG4gICAgbGF0ZXhQYXJlbnM6IGZhbHNlIC8vIGNvbmRpdGlvbmFscyBkb24ndCBuZWVkIHBhcmVudGhlc2VzIGluIExhVGVYIGJlY2F1c2VcbiAgICAvLyB0aGV5IGFyZSAyIGRpbWVuc2lvbmFsXG5cbiAgfVxufSwge1xuICAvLyBsb2dpY2FsIG9yXG4gICdPcGVyYXRvck5vZGU6b3InOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyBsb2dpY2FsIHhvclxuICAnT3BlcmF0b3JOb2RlOnhvcic6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9XG59LCB7XG4gIC8vIGxvZ2ljYWwgYW5kXG4gICdPcGVyYXRvck5vZGU6YW5kJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH1cbn0sIHtcbiAgLy8gYml0d2lzZSBvclxuICAnT3BlcmF0b3JOb2RlOmJpdE9yJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH1cbn0sIHtcbiAgLy8gYml0d2lzZSB4b3JcbiAgJ09wZXJhdG9yTm9kZTpiaXRYb3InOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyBiaXR3aXNlIGFuZFxuICAnT3BlcmF0b3JOb2RlOmJpdEFuZCc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9XG59LCB7XG4gIC8vIHJlbGF0aW9uYWwgb3BlcmF0b3JzXG4gICdPcGVyYXRvck5vZGU6ZXF1YWwnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTp1bmVxdWFsJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH0sXG4gICdPcGVyYXRvck5vZGU6c21hbGxlcic6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9LFxuICAnT3BlcmF0b3JOb2RlOmxhcmdlcic6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9LFxuICAnT3BlcmF0b3JOb2RlOnNtYWxsZXJFcSc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9LFxuICAnT3BlcmF0b3JOb2RlOmxhcmdlckVxJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH0sXG4gIFJlbGF0aW9uYWxOb2RlOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyBiaXRzaGlmdCBvcGVyYXRvcnNcbiAgJ09wZXJhdG9yTm9kZTpsZWZ0U2hpZnQnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTpyaWdodEFyaXRoU2hpZnQnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTpyaWdodExvZ1NoaWZ0Jzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH1cbn0sIHtcbiAgLy8gdW5pdCBjb252ZXJzaW9uXG4gICdPcGVyYXRvck5vZGU6dG8nOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnLFxuICAgIGFzc29jaWF0aXZlV2l0aDogW11cbiAgfVxufSwge1xuICAvLyByYW5nZVxuICBSYW5nZU5vZGU6IHt9XG59LCB7XG4gIC8vIGFkZGl0aW9uLCBzdWJ0cmFjdGlvblxuICAnT3BlcmF0b3JOb2RlOmFkZCc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbJ09wZXJhdG9yTm9kZTphZGQnLCAnT3BlcmF0b3JOb2RlOnN1YnRyYWN0J11cbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTpzdWJ0cmFjdCc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXVxuICB9XG59LCB7XG4gIC8vIG11bHRpcGx5LCBkaXZpZGUsIG1vZHVsdXNcbiAgJ09wZXJhdG9yTm9kZTptdWx0aXBseSc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAnbGVmdCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbJ09wZXJhdG9yTm9kZTptdWx0aXBseScsICdPcGVyYXRvck5vZGU6ZGl2aWRlJywgJ09wZXJhdG9yOmRvdE11bHRpcGx5JywgJ09wZXJhdG9yOmRvdERpdmlkZSddXG4gIH0sXG4gICdPcGVyYXRvck5vZGU6ZGl2aWRlJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdLFxuICAgIGxhdGV4TGVmdFBhcmVuczogZmFsc2UsXG4gICAgbGF0ZXhSaWdodFBhcmVuczogZmFsc2UsXG4gICAgbGF0ZXhQYXJlbnM6IGZhbHNlIC8vIGZyYWN0aW9ucyBkb24ndCByZXF1aXJlIHBhcmVudGhlc2VzIGJlY2F1c2VcbiAgICAvLyB0aGV5J3JlIDIgZGltZW5zaW9uYWwsIHNvIHBhcmVucyBhcmVuJ3QgbmVlZGVkXG4gICAgLy8gaW4gTGFUZVhcblxuICB9LFxuICAnT3BlcmF0b3JOb2RlOmRvdE11bHRpcGx5Jzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFsnT3BlcmF0b3JOb2RlOm11bHRpcGx5JywgJ09wZXJhdG9yTm9kZTpkaXZpZGUnLCAnT3BlcmF0b3JOb2RlOmRvdE11bHRpcGx5JywgJ09wZXJhdG9yTm9kZTpkb0RpdmlkZSddXG4gIH0sXG4gICdPcGVyYXRvck5vZGU6ZG90RGl2aWRlJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH0sXG4gICdPcGVyYXRvck5vZGU6bW9kJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH1cbn0sIHtcbiAgLy8gdW5hcnkgcHJlZml4IG9wZXJhdG9yc1xuICAnT3BlcmF0b3JOb2RlOnVuYXJ5UGx1cyc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAncmlnaHQnXG4gIH0sXG4gICdPcGVyYXRvck5vZGU6dW5hcnlNaW51cyc6IHtcbiAgICBhc3NvY2lhdGl2aXR5OiAncmlnaHQnXG4gIH0sXG4gICdPcGVyYXRvck5vZGU6Yml0Tm90Jzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdyaWdodCdcbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTpub3QnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ3JpZ2h0J1xuICB9XG59LCB7XG4gIC8vIGV4cG9uZW50aWF0aW9uXG4gICdPcGVyYXRvck5vZGU6cG93Jzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdyaWdodCcsXG4gICAgYXNzb2NpYXRpdmVXaXRoOiBbXSxcbiAgICBsYXRleFJpZ2h0UGFyZW5zOiBmYWxzZSAvLyB0aGUgZXhwb25lbnQgZG9lc24ndCBuZWVkIHBhcmVudGhlc2VzIGluXG4gICAgLy8gTGFUZVggYmVjYXVzZSBpdCdzIDIgZGltZW5zaW9uYWxcbiAgICAvLyAoaXQncyBvbiB0b3ApXG5cbiAgfSxcbiAgJ09wZXJhdG9yTm9kZTpkb3RQb3cnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ3JpZ2h0JyxcbiAgICBhc3NvY2lhdGl2ZVdpdGg6IFtdXG4gIH1cbn0sIHtcbiAgLy8gZmFjdG9yaWFsXG4gICdPcGVyYXRvck5vZGU6ZmFjdG9yaWFsJzoge1xuICAgIGFzc29jaWF0aXZpdHk6ICdsZWZ0J1xuICB9XG59LCB7XG4gIC8vIG1hdHJpeCB0cmFuc3Bvc2VcbiAgJ09wZXJhdG9yTm9kZTp0cmFuc3Bvc2UnOiB7XG4gICAgYXNzb2NpYXRpdml0eTogJ2xlZnQnXG4gIH1cbn1dO1xuLyoqXG4gKiBHZXQgdGhlIHByZWNlZGVuY2Ugb2YgYSBOb2RlLlxuICogSGlnaGVyIG51bWJlciBmb3IgaGlnaGVyIHByZWNlZGVuY2UsIHN0YXJ0aW5nIHdpdGggMC5cbiAqIFJldHVybnMgbnVsbCBpZiB0aGUgcHJlY2VkZW5jZSBpcyB1bmRlZmluZWQuXG4gKlxuICogQHBhcmFtIHtOb2RlfSBfbm9kZVxuICogQHBhcmFtIHtzdHJpbmd9IHBhcmVudGhlc2lzXG4gKiBAcmV0dXJuIHtudW1iZXIgfCBudWxsfVxuICovXG5cbmV4cG9ydHMucHJvcGVydGllcyA9IHByb3BlcnRpZXM7XG5cbmZ1bmN0aW9uIGdldFByZWNlZGVuY2UoX25vZGUsIHBhcmVudGhlc2lzKSB7XG4gIHZhciBub2RlID0gX25vZGU7XG5cbiAgaWYgKHBhcmVudGhlc2lzICE9PSAna2VlcCcpIHtcbiAgICAvLyBQYXJlbnRoZXNpc05vZGVzIGFyZSBvbmx5IGlnbm9yZWQgd2hlbiBub3QgaW4gJ2tlZXAnIG1vZGVcbiAgICBub2RlID0gX25vZGUuZ2V0Q29udGVudCgpO1xuICB9XG5cbiAgdmFyIGlkZW50aWZpZXIgPSBub2RlLmdldElkZW50aWZpZXIoKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoaWRlbnRpZmllciBpbiBwcm9wZXJ0aWVzW2ldKSB7XG4gICAgICByZXR1cm4gaTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbi8qKlxuICogR2V0IHRoZSBhc3NvY2lhdGl2aXR5IG9mIGFuIG9wZXJhdG9yIChsZWZ0IG9yIHJpZ2h0KS5cbiAqIFJldHVybnMgYSBzdHJpbmcgY29udGFpbmluZyAnbGVmdCcgb3IgJ3JpZ2h0JyBvciBudWxsIGlmXG4gKiB0aGUgYXNzb2NpYXRpdml0eSBpcyBub3QgZGVmaW5lZC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9XG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyZW50aGVzaXNcbiAqIEByZXR1cm4ge3N0cmluZ3xudWxsfVxuICogQHRocm93cyB7RXJyb3J9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXRBc3NvY2lhdGl2aXR5KF9ub2RlLCBwYXJlbnRoZXNpcykge1xuICB2YXIgbm9kZSA9IF9ub2RlO1xuXG4gIGlmIChwYXJlbnRoZXNpcyAhPT0gJ2tlZXAnKSB7XG4gICAgLy8gUGFyZW50aGVzaXNOb2RlcyBhcmUgb25seSBpZ25vcmVkIHdoZW4gbm90IGluICdrZWVwJyBtb2RlXG4gICAgbm9kZSA9IF9ub2RlLmdldENvbnRlbnQoKTtcbiAgfVxuXG4gIHZhciBpZGVudGlmaWVyID0gbm9kZS5nZXRJZGVudGlmaWVyKCk7XG4gIHZhciBpbmRleCA9IGdldFByZWNlZGVuY2Uobm9kZSwgcGFyZW50aGVzaXMpO1xuXG4gIGlmIChpbmRleCA9PT0gbnVsbCkge1xuICAgIC8vIG5vZGUgaXNuJ3QgaW4gdGhlIGxpc3RcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaW5kZXhdW2lkZW50aWZpZXJdO1xuXG4gIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkocHJvcGVydHksICdhc3NvY2lhdGl2aXR5JykpIHtcbiAgICBpZiAocHJvcGVydHkuYXNzb2NpYXRpdml0eSA9PT0gJ2xlZnQnKSB7XG4gICAgICByZXR1cm4gJ2xlZnQnO1xuICAgIH1cblxuICAgIGlmIChwcm9wZXJ0eS5hc3NvY2lhdGl2aXR5ID09PSAncmlnaHQnKSB7XG4gICAgICByZXR1cm4gJ3JpZ2h0JztcbiAgICB9IC8vIGFzc29jaWF0aXZpdHkgaXMgaW52YWxpZFxuXG5cbiAgICB0aHJvdyBFcnJvcignXFwnJyArIGlkZW50aWZpZXIgKyAnXFwnIGhhcyB0aGUgaW52YWxpZCBhc3NvY2lhdGl2aXR5IFxcJycgKyBwcm9wZXJ0eS5hc3NvY2lhdGl2aXR5ICsgJ1xcJy4nKTtcbiAgfSAvLyBhc3NvY2lhdGl2aXR5IGlzIHVuZGVmaW5lZFxuXG5cbiAgcmV0dXJuIG51bGw7XG59XG4vKipcbiAqIENoZWNrIGlmIGFuIG9wZXJhdG9yIGlzIGFzc29jaWF0aXZlIHdpdGggYW5vdGhlciBvcGVyYXRvci5cbiAqIFJldHVybnMgZWl0aGVyIHRydWUgb3IgZmFsc2Ugb3IgbnVsbCBpZiBub3QgZGVmaW5lZC5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVBXG4gKiBAcGFyYW0ge05vZGV9IG5vZGVCXG4gKiBAcGFyYW0ge3N0cmluZ30gcGFyZW50aGVzaXNcbiAqIEByZXR1cm4ge2Jvb2xlYW4gfCBudWxsfVxuICovXG5cblxuZnVuY3Rpb24gaXNBc3NvY2lhdGl2ZVdpdGgobm9kZUEsIG5vZGVCLCBwYXJlbnRoZXNpcykge1xuICAvLyBQYXJlbnRoZXNpc05vZGVzIGFyZSBvbmx5IGlnbm9yZWQgd2hlbiBub3QgaW4gJ2tlZXAnIG1vZGVcbiAgdmFyIGEgPSBwYXJlbnRoZXNpcyAhPT0gJ2tlZXAnID8gbm9kZUEuZ2V0Q29udGVudCgpIDogbm9kZUE7XG4gIHZhciBiID0gcGFyZW50aGVzaXMgIT09ICdrZWVwJyA/IG5vZGVBLmdldENvbnRlbnQoKSA6IG5vZGVCO1xuICB2YXIgaWRlbnRpZmllckEgPSBhLmdldElkZW50aWZpZXIoKTtcbiAgdmFyIGlkZW50aWZpZXJCID0gYi5nZXRJZGVudGlmaWVyKCk7XG4gIHZhciBpbmRleCA9IGdldFByZWNlZGVuY2UoYSwgcGFyZW50aGVzaXMpO1xuXG4gIGlmIChpbmRleCA9PT0gbnVsbCkge1xuICAgIC8vIG5vZGUgaXNuJ3QgaW4gdGhlIGxpc3RcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciBwcm9wZXJ0eSA9IHByb3BlcnRpZXNbaW5kZXhdW2lkZW50aWZpZXJBXTtcblxuICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKHByb3BlcnR5LCAnYXNzb2NpYXRpdmVXaXRoJykgJiYgcHJvcGVydHkuYXNzb2NpYXRpdmVXaXRoIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnR5LmFzc29jaWF0aXZlV2l0aC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHByb3BlcnR5LmFzc29jaWF0aXZlV2l0aFtpXSA9PT0gaWRlbnRpZmllckIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIGFzc29jaWF0aXZlV2l0aCBpcyBub3QgZGVmaW5lZFxuXG5cbiAgcmV0dXJuIG51bGw7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVBhcnNlID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi91dGlscy9pc1wiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uL3V0aWxzL29iamVjdFwiKTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxudmFyIG5hbWUgPSAncGFyc2UnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbnVtZXJpYycsICdjb25maWcnLCAnQWNjZXNzb3JOb2RlJywgJ0FycmF5Tm9kZScsICdBc3NpZ25tZW50Tm9kZScsICdCbG9ja05vZGUnLCAnQ29uZGl0aW9uYWxOb2RlJywgJ0NvbnN0YW50Tm9kZScsICdGdW5jdGlvbkFzc2lnbm1lbnROb2RlJywgJ0Z1bmN0aW9uTm9kZScsICdJbmRleE5vZGUnLCAnT2JqZWN0Tm9kZScsICdPcGVyYXRvck5vZGUnLCAnUGFyZW50aGVzaXNOb2RlJywgJ1JhbmdlTm9kZScsICdSZWxhdGlvbmFsTm9kZScsICdTeW1ib2xOb2RlJ107XG52YXIgY3JlYXRlUGFyc2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbnVtZXJpYyA9IF9yZWYubnVtZXJpYyxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQWNjZXNzb3JOb2RlID0gX3JlZi5BY2Nlc3Nvck5vZGUsXG4gICAgICBBcnJheU5vZGUgPSBfcmVmLkFycmF5Tm9kZSxcbiAgICAgIEFzc2lnbm1lbnROb2RlID0gX3JlZi5Bc3NpZ25tZW50Tm9kZSxcbiAgICAgIEJsb2NrTm9kZSA9IF9yZWYuQmxvY2tOb2RlLFxuICAgICAgQ29uZGl0aW9uYWxOb2RlID0gX3JlZi5Db25kaXRpb25hbE5vZGUsXG4gICAgICBDb25zdGFudE5vZGUgPSBfcmVmLkNvbnN0YW50Tm9kZSxcbiAgICAgIEZ1bmN0aW9uQXNzaWdubWVudE5vZGUgPSBfcmVmLkZ1bmN0aW9uQXNzaWdubWVudE5vZGUsXG4gICAgICBGdW5jdGlvbk5vZGUgPSBfcmVmLkZ1bmN0aW9uTm9kZSxcbiAgICAgIEluZGV4Tm9kZSA9IF9yZWYuSW5kZXhOb2RlLFxuICAgICAgT2JqZWN0Tm9kZSA9IF9yZWYuT2JqZWN0Tm9kZSxcbiAgICAgIE9wZXJhdG9yTm9kZSA9IF9yZWYuT3BlcmF0b3JOb2RlLFxuICAgICAgUGFyZW50aGVzaXNOb2RlID0gX3JlZi5QYXJlbnRoZXNpc05vZGUsXG4gICAgICBSYW5nZU5vZGUgPSBfcmVmLlJhbmdlTm9kZSxcbiAgICAgIFJlbGF0aW9uYWxOb2RlID0gX3JlZi5SZWxhdGlvbmFsTm9kZSxcbiAgICAgIFN5bWJvbE5vZGUgPSBfcmVmLlN5bWJvbE5vZGU7XG5cbiAgLyoqXG4gICAqIFBhcnNlIGFuIGV4cHJlc3Npb24uIFJldHVybnMgYSBub2RlIHRyZWUsIHdoaWNoIGNhbiBiZSBldmFsdWF0ZWQgYnlcbiAgICogaW52b2tpbmcgbm9kZS5ldmFsdWF0ZSgpLlxuICAgKlxuICAgKiBOb3RlIHRoZSBldmFsdWF0aW5nIGFyYml0cmFyeSBleHByZXNzaW9ucyBtYXkgaW52b2x2ZSBzZWN1cml0eSByaXNrcyxcbiAgICogc2VlIFtodHRwczovL21hdGhqcy5vcmcvZG9jcy9leHByZXNzaW9ucy9zZWN1cml0eS5odG1sXShodHRwczovL21hdGhqcy5vcmcvZG9jcy9leHByZXNzaW9ucy9zZWN1cml0eS5odG1sKSBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5wYXJzZShleHByKVxuICAgKiAgICAgbWF0aC5wYXJzZShleHByLCBvcHRpb25zKVxuICAgKiAgICAgbWF0aC5wYXJzZShbZXhwcjEsIGV4cHIyLCBleHByMywgLi4uXSlcbiAgICogICAgIG1hdGgucGFyc2UoW2V4cHIxLCBleHByMiwgZXhwcjMsIC4uLl0sIG9wdGlvbnMpXG4gICAqXG4gICAqIEV4YW1wbGU6XG4gICAqXG4gICAqICAgICBjb25zdCBub2RlMSA9IG1hdGgucGFyc2UoJ3NxcnQoM14yICsgNF4yKScpXG4gICAqICAgICBub2RlMS5jb21waWxlKCkuZXZhbHVhdGUoKSAvLyA1XG4gICAqXG4gICAqICAgICBsZXQgc2NvcGUgPSB7YTozLCBiOjR9XG4gICAqICAgICBjb25zdCBub2RlMiA9IG1hdGgucGFyc2UoJ2EgKiBiJykgLy8gMTJcbiAgICogICAgIGNvbnN0IGNvZGUyID0gbm9kZTIuY29tcGlsZSgpXG4gICAqICAgICBjb2RlMi5ldmFsdWF0ZShzY29wZSkgLy8gMTJcbiAgICogICAgIHNjb3BlLmEgPSA1XG4gICAqICAgICBjb2RlMi5ldmFsdWF0ZShzY29wZSkgLy8gMjBcbiAgICpcbiAgICogICAgIGNvbnN0IG5vZGVzID0gbWF0aC5wYXJzZShbJ2EgPSAzJywgJ2IgPSA0JywgJ2EgKiBiJ10pXG4gICAqICAgICBub2Rlc1syXS5jb21waWxlKCkuZXZhbHVhdGUoKSAvLyAxMlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIGV2YWx1YXRlLCBjb21waWxlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW10gfCBNYXRyaXh9IGV4cHIgICAgICAgICAgRXhwcmVzc2lvbiB0byBiZSBwYXJzZWRcbiAgICogQHBhcmFtIHt7bm9kZXM6IE9iamVjdDxzdHJpbmcsIE5vZGU+fX0gW29wdGlvbnNdICBBdmFpbGFibGUgb3B0aW9uczpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIGBub2Rlc2AgYSBzZXQgb2YgY3VzdG9tIG5vZGVzXG4gICAqIEByZXR1cm4ge05vZGUgfCBOb2RlW119IG5vZGVcbiAgICogQHRocm93cyB7RXJyb3J9XG4gICAqL1xuICB2YXIgcGFyc2UgPSB0eXBlZChuYW1lLCB7XG4gICAgc3RyaW5nOiBmdW5jdGlvbiBzdHJpbmcoZXhwcmVzc2lvbikge1xuICAgICAgcmV0dXJuIHBhcnNlU3RhcnQoZXhwcmVzc2lvbiwge30pO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoZXhwcmVzc2lvbnMpIHtcbiAgICAgIHJldHVybiBwYXJzZU11bHRpcGxlKGV4cHJlc3Npb25zLCB7fSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdPYmplY3QoZXhwcmVzc2lvbiwgb3B0aW9ucykge1xuICAgICAgdmFyIGV4dHJhTm9kZXMgPSBvcHRpb25zLm5vZGVzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5vZGVzIDoge307XG4gICAgICByZXR1cm4gcGFyc2VTdGFydChleHByZXNzaW9uLCBleHRyYU5vZGVzKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgT2JqZWN0JzogcGFyc2VNdWx0aXBsZVxuICB9KTtcblxuICBmdW5jdGlvbiBwYXJzZU11bHRpcGxlKGV4cHJlc3Npb25zKSB7XG4gICAgdmFyIG9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IHt9O1xuICAgIHZhciBleHRyYU5vZGVzID0gb3B0aW9ucy5ub2RlcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5ub2RlcyA6IHt9OyAvLyBwYXJzZSBhbiBhcnJheSBvciBtYXRyaXggd2l0aCBleHByZXNzaW9uc1xuXG4gICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKShleHByZXNzaW9ucywgZnVuY3Rpb24gKGVsZW0pIHtcbiAgICAgIGlmICh0eXBlb2YgZWxlbSAhPT0gJ3N0cmluZycpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N0cmluZyBleHBlY3RlZCcpO1xuICAgICAgcmV0dXJuIHBhcnNlU3RhcnQoZWxlbSwgZXh0cmFOb2Rlcyk7XG4gICAgfSk7XG4gIH0gLy8gdG9rZW4gdHlwZXMgZW51bWVyYXRpb25cblxuXG4gIHZhciBUT0tFTlRZUEUgPSB7XG4gICAgTlVMTDogMCxcbiAgICBERUxJTUlURVI6IDEsXG4gICAgTlVNQkVSOiAyLFxuICAgIFNZTUJPTDogMyxcbiAgICBVTktOT1dOOiA0XG4gIH07IC8vIG1hcCB3aXRoIGFsbCBkZWxpbWl0ZXJzXG5cbiAgdmFyIERFTElNSVRFUlMgPSB7XG4gICAgJywnOiB0cnVlLFxuICAgICcoJzogdHJ1ZSxcbiAgICAnKSc6IHRydWUsXG4gICAgJ1snOiB0cnVlLFxuICAgICddJzogdHJ1ZSxcbiAgICAneyc6IHRydWUsXG4gICAgJ30nOiB0cnVlLFxuICAgICdcIic6IHRydWUsXG4gICAgJ1xcJyc6IHRydWUsXG4gICAgJzsnOiB0cnVlLFxuICAgICcrJzogdHJ1ZSxcbiAgICAnLSc6IHRydWUsXG4gICAgJyonOiB0cnVlLFxuICAgICcuKic6IHRydWUsXG4gICAgJy8nOiB0cnVlLFxuICAgICcuLyc6IHRydWUsXG4gICAgJyUnOiB0cnVlLFxuICAgICdeJzogdHJ1ZSxcbiAgICAnLl4nOiB0cnVlLFxuICAgICd+JzogdHJ1ZSxcbiAgICAnISc6IHRydWUsXG4gICAgJyYnOiB0cnVlLFxuICAgICd8JzogdHJ1ZSxcbiAgICAnXnwnOiB0cnVlLFxuICAgICc9JzogdHJ1ZSxcbiAgICAnOic6IHRydWUsXG4gICAgJz8nOiB0cnVlLFxuICAgICc9PSc6IHRydWUsXG4gICAgJyE9JzogdHJ1ZSxcbiAgICAnPCc6IHRydWUsXG4gICAgJz4nOiB0cnVlLFxuICAgICc8PSc6IHRydWUsXG4gICAgJz49JzogdHJ1ZSxcbiAgICAnPDwnOiB0cnVlLFxuICAgICc+Pic6IHRydWUsXG4gICAgJz4+Pic6IHRydWVcbiAgfTsgLy8gbWFwIHdpdGggYWxsIG5hbWVkIGRlbGltaXRlcnNcblxuICB2YXIgTkFNRURfREVMSU1JVEVSUyA9IHtcbiAgICBtb2Q6IHRydWUsXG4gICAgdG86IHRydWUsXG4gICAgXCJpblwiOiB0cnVlLFxuICAgIGFuZDogdHJ1ZSxcbiAgICB4b3I6IHRydWUsXG4gICAgb3I6IHRydWUsXG4gICAgbm90OiB0cnVlXG4gIH07XG4gIHZhciBDT05TVEFOVFMgPSB7XG4gICAgXCJ0cnVlXCI6IHRydWUsXG4gICAgXCJmYWxzZVwiOiBmYWxzZSxcbiAgICBcIm51bGxcIjogbnVsbCxcbiAgICB1bmRlZmluZWQ6IHVuZGVmaW5lZFxuICB9O1xuICB2YXIgTlVNRVJJQ19DT05TVEFOVFMgPSBbJ05hTicsICdJbmZpbml0eSddO1xuXG4gIGZ1bmN0aW9uIGluaXRpYWxTdGF0ZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZXh0cmFOb2Rlczoge30sXG4gICAgICAvLyBjdXJyZW50IGV4dHJhIG5vZGVzLCBtdXN0IGJlIGNhcmVmdWwgbm90IHRvIG11dGF0ZVxuICAgICAgZXhwcmVzc2lvbjogJycsXG4gICAgICAvLyBjdXJyZW50IGV4cHJlc3Npb25cbiAgICAgIGNvbW1lbnQ6ICcnLFxuICAgICAgLy8gbGFzdCBwYXJzZWQgY29tbWVudFxuICAgICAgaW5kZXg6IDAsXG4gICAgICAvLyBjdXJyZW50IGluZGV4IGluIGV4cHJcbiAgICAgIHRva2VuOiAnJyxcbiAgICAgIC8vIGN1cnJlbnQgdG9rZW5cbiAgICAgIHRva2VuVHlwZTogVE9LRU5UWVBFLk5VTEwsXG4gICAgICAvLyB0eXBlIG9mIHRoZSB0b2tlblxuICAgICAgbmVzdGluZ0xldmVsOiAwLFxuICAgICAgLy8gbGV2ZWwgb2YgbmVzdGluZyBpbnNpZGUgcGFyYW1ldGVycywgdXNlZCB0byBpZ25vcmUgbmV3bGluZSBjaGFyYWN0ZXJzXG4gICAgICBjb25kaXRpb25hbExldmVsOiBudWxsIC8vIHdoZW4gYSBjb25kaXRpb25hbCBpcyBiZWluZyBwYXJzZWQsIHRoZSBsZXZlbCBvZiB0aGUgY29uZGl0aW9uYWwgaXMgc3RvcmVkIGhlcmVcblxuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFZpZXcgdXB0byBgbGVuZ3RoYCBjaGFyYWN0ZXJzIG9mIHRoZSBleHByZXNzaW9uIHN0YXJ0aW5nIGF0IHRoZSBjdXJyZW50IGNoYXJhY3Rlci5cbiAgICpcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoPTFdIE51bWJlciBvZiBjaGFyYWN0ZXJzIHRvIHZpZXdcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBjdXJyZW50U3RyaW5nKHN0YXRlLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gc3RhdGUuZXhwcmVzc2lvbi5zdWJzdHIoc3RhdGUuaW5kZXgsIGxlbmd0aCk7XG4gIH1cbiAgLyoqXG4gICAqIFZpZXcgdGhlIGN1cnJlbnQgY2hhcmFjdGVyLiBSZXR1cm5zICcnIGlmIGVuZCBvZiBleHByZXNzaW9uIGlzIHJlYWNoZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpIHtcbiAgICByZXR1cm4gY3VycmVudFN0cmluZyhzdGF0ZSwgMSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgbmV4dCBjaGFyYWN0ZXIgZnJvbSB0aGUgZXhwcmVzc2lvbi5cbiAgICogVGhlIGNoYXJhY3RlciBpcyBzdG9yZWQgaW50byB0aGUgY2hhciBjLiBJZiB0aGUgZW5kIG9mIHRoZSBleHByZXNzaW9uIGlzXG4gICAqIHJlYWNoZWQsIHRoZSBmdW5jdGlvbiBwdXRzIGFuIGVtcHR5IHN0cmluZyBpbiBjLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIG5leHQoc3RhdGUpIHtcbiAgICBzdGF0ZS5pbmRleCsrO1xuICB9XG4gIC8qKlxuICAgKiBQcmV2aWV3IHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgZnJvbSB0aGUgZXhwcmVzc2lvbi5cbiAgICogQHJldHVybiB7c3RyaW5nfSBjTmV4dFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHByZXZDaGFyYWN0ZXIoc3RhdGUpIHtcbiAgICByZXR1cm4gc3RhdGUuZXhwcmVzc2lvbi5jaGFyQXQoc3RhdGUuaW5kZXggLSAxKTtcbiAgfVxuICAvKipcbiAgICogUHJldmlldyB0aGUgbmV4dCBjaGFyYWN0ZXIgZnJvbSB0aGUgZXhwcmVzc2lvbi5cbiAgICogQHJldHVybiB7c3RyaW5nfSBjTmV4dFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIG5leHRDaGFyYWN0ZXIoc3RhdGUpIHtcbiAgICByZXR1cm4gc3RhdGUuZXhwcmVzc2lvbi5jaGFyQXQoc3RhdGUuaW5kZXggKyAxKTtcbiAgfVxuICAvKipcbiAgICogR2V0IG5leHQgdG9rZW4gaW4gdGhlIGN1cnJlbnQgc3RyaW5nIGV4cHIuXG4gICAqIFRoZSB0b2tlbiBhbmQgdG9rZW4gdHlwZSBhcmUgYXZhaWxhYmxlIGFzIHRva2VuIGFuZCB0b2tlblR5cGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBnZXRUb2tlbihzdGF0ZSkge1xuICAgIHN0YXRlLnRva2VuVHlwZSA9IFRPS0VOVFlQRS5OVUxMO1xuICAgIHN0YXRlLnRva2VuID0gJyc7XG4gICAgc3RhdGUuY29tbWVudCA9ICcnOyAvLyBza2lwIG92ZXIgd2hpdGVzcGFjZXNcbiAgICAvLyBzcGFjZSwgdGFiLCBhbmQgbmV3bGluZSB3aGVuIGluc2lkZSBwYXJhbWV0ZXJzXG5cbiAgICB3aGlsZSAocGFyc2UuaXNXaGl0ZXNwYWNlKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpLCBzdGF0ZS5uZXN0aW5nTGV2ZWwpKSB7XG4gICAgICBuZXh0KHN0YXRlKTtcbiAgICB9IC8vIHNraXAgY29tbWVudFxuXG5cbiAgICBpZiAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICcjJykge1xuICAgICAgd2hpbGUgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpICE9PSAnXFxuJyAmJiBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSAhPT0gJycpIHtcbiAgICAgICAgc3RhdGUuY29tbWVudCArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICB9XG4gICAgfSAvLyBjaGVjayBmb3IgZW5kIG9mIGV4cHJlc3Npb25cblxuXG4gICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpID09PSAnJykge1xuICAgICAgLy8gdG9rZW4gaXMgc3RpbGwgZW1wdHlcbiAgICAgIHN0YXRlLnRva2VuVHlwZSA9IFRPS0VOVFlQRS5ERUxJTUlURVI7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBjaGVjayBmb3IgbmV3IGxpbmUgY2hhcmFjdGVyXG5cblxuICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSA9PT0gJ1xcbicgJiYgIXN0YXRlLm5lc3RpbmdMZXZlbCkge1xuICAgICAgc3RhdGUudG9rZW5UeXBlID0gVE9LRU5UWVBFLkRFTElNSVRFUjtcbiAgICAgIHN0YXRlLnRva2VuID0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7XG4gICAgICBuZXh0KHN0YXRlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgYzEgPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICB2YXIgYzIgPSBjdXJyZW50U3RyaW5nKHN0YXRlLCAyKTtcbiAgICB2YXIgYzMgPSBjdXJyZW50U3RyaW5nKHN0YXRlLCAzKTtcblxuICAgIGlmIChjMy5sZW5ndGggPT09IDMgJiYgREVMSU1JVEVSU1tjM10pIHtcbiAgICAgIHN0YXRlLnRva2VuVHlwZSA9IFRPS0VOVFlQRS5ERUxJTUlURVI7XG4gICAgICBzdGF0ZS50b2tlbiA9IGMzO1xuICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICBuZXh0KHN0YXRlKTtcbiAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gY2hlY2sgZm9yIGRlbGltaXRlcnMgY29uc2lzdGluZyBvZiAyIGNoYXJhY3RlcnNcblxuXG4gICAgaWYgKGMyLmxlbmd0aCA9PT0gMiAmJiBERUxJTUlURVJTW2MyXSkge1xuICAgICAgc3RhdGUudG9rZW5UeXBlID0gVE9LRU5UWVBFLkRFTElNSVRFUjtcbiAgICAgIHN0YXRlLnRva2VuID0gYzI7XG4gICAgICBuZXh0KHN0YXRlKTtcbiAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gY2hlY2sgZm9yIGRlbGltaXRlcnMgY29uc2lzdGluZyBvZiAxIGNoYXJhY3RlclxuXG5cbiAgICBpZiAoREVMSU1JVEVSU1tjMV0pIHtcbiAgICAgIHN0YXRlLnRva2VuVHlwZSA9IFRPS0VOVFlQRS5ERUxJTUlURVI7XG4gICAgICBzdGF0ZS50b2tlbiA9IGMxO1xuICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBjaGVjayBmb3IgYSBudW1iZXJcblxuXG4gICAgaWYgKHBhcnNlLmlzRGlnaXREb3QoYzEpKSB7XG4gICAgICBzdGF0ZS50b2tlblR5cGUgPSBUT0tFTlRZUEUuTlVNQkVSOyAvLyBnZXQgbnVtYmVyLCBjYW4gaGF2ZSBhIHNpbmdsZSBkb3RcblxuICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpID09PSAnLicpIHtcbiAgICAgICAgc3RhdGUudG9rZW4gKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7XG4gICAgICAgIG5leHQoc3RhdGUpO1xuXG4gICAgICAgIGlmICghcGFyc2UuaXNEaWdpdChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSkpIHtcbiAgICAgICAgICAvLyB0aGlzIGlzIG5vIG51bWJlciwgaXQgaXMganVzdCBhIGRvdCAoY2FuIGJlIGRvdCBub3RhdGlvbilcbiAgICAgICAgICBzdGF0ZS50b2tlblR5cGUgPSBUT0tFTlRZUEUuREVMSU1JVEVSO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3aGlsZSAocGFyc2UuaXNEaWdpdChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSkpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbiArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgICAgICBuZXh0KHN0YXRlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwYXJzZS5pc0RlY2ltYWxNYXJrKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpLCBuZXh0Q2hhcmFjdGVyKHN0YXRlKSkpIHtcbiAgICAgICAgICBzdGF0ZS50b2tlbiArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgICAgICBuZXh0KHN0YXRlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB3aGlsZSAocGFyc2UuaXNEaWdpdChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSkpIHtcbiAgICAgICAgc3RhdGUudG9rZW4gKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7XG4gICAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgfSAvLyBjaGVjayBmb3IgZXhwb25lbnRpYWwgbm90YXRpb24gbGlrZSBcIjIuM2UtNFwiLCBcIjEuMjNlNTBcIiBvciBcIjJlKzRcIlxuXG5cbiAgICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSA9PT0gJ0UnIHx8IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpID09PSAnZScpIHtcbiAgICAgICAgaWYgKHBhcnNlLmlzRGlnaXQobmV4dENoYXJhY3RlcihzdGF0ZSkpIHx8IG5leHRDaGFyYWN0ZXIoc3RhdGUpID09PSAnLScgfHwgbmV4dENoYXJhY3RlcihzdGF0ZSkgPT09ICcrJykge1xuICAgICAgICAgIHN0YXRlLnRva2VuICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgICAgICAgIG5leHQoc3RhdGUpO1xuXG4gICAgICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpID09PSAnKycgfHwgY3VycmVudENoYXJhY3RlcihzdGF0ZSkgPT09ICctJykge1xuICAgICAgICAgICAgc3RhdGUudG9rZW4gKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7XG4gICAgICAgICAgICBuZXh0KHN0YXRlKTtcbiAgICAgICAgICB9IC8vIFNjaWVudGlmaWMgbm90YXRpb24gTVVTVCBiZSBmb2xsb3dlZCBieSBhbiBleHBvbmVudFxuXG5cbiAgICAgICAgICBpZiAoIXBhcnNlLmlzRGlnaXQoY3VycmVudENoYXJhY3RlcihzdGF0ZSkpKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ0RpZ2l0IGV4cGVjdGVkLCBnb3QgXCInICsgY3VycmVudENoYXJhY3RlcihzdGF0ZSkgKyAnXCInKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB3aGlsZSAocGFyc2UuaXNEaWdpdChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSkpIHtcbiAgICAgICAgICAgIHN0YXRlLnRva2VuICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgICAgICAgICAgbmV4dChzdGF0ZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHBhcnNlLmlzRGVjaW1hbE1hcmsoY3VycmVudENoYXJhY3RlcihzdGF0ZSksIG5leHRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdEaWdpdCBleHBlY3RlZCwgZ290IFwiJyArIGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpICsgJ1wiJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG5leHRDaGFyYWN0ZXIoc3RhdGUpID09PSAnLicpIHtcbiAgICAgICAgICBuZXh0KHN0YXRlKTtcbiAgICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ0RpZ2l0IGV4cGVjdGVkLCBnb3QgXCInICsgY3VycmVudENoYXJhY3RlcihzdGF0ZSkgKyAnXCInKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm47XG4gICAgfSAvLyBjaGVjayBmb3IgdmFyaWFibGVzLCBmdW5jdGlvbnMsIG5hbWVkIG9wZXJhdG9yc1xuXG5cbiAgICBpZiAocGFyc2UuaXNBbHBoYShjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSwgcHJldkNoYXJhY3RlcihzdGF0ZSksIG5leHRDaGFyYWN0ZXIoc3RhdGUpKSkge1xuICAgICAgd2hpbGUgKHBhcnNlLmlzQWxwaGEoY3VycmVudENoYXJhY3RlcihzdGF0ZSksIHByZXZDaGFyYWN0ZXIoc3RhdGUpLCBuZXh0Q2hhcmFjdGVyKHN0YXRlKSkgfHwgcGFyc2UuaXNEaWdpdChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSkpIHtcbiAgICAgICAgc3RhdGUudG9rZW4gKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7XG4gICAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKE5BTUVEX0RFTElNSVRFUlMsIHN0YXRlLnRva2VuKSkge1xuICAgICAgICBzdGF0ZS50b2tlblR5cGUgPSBUT0tFTlRZUEUuREVMSU1JVEVSO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdGUudG9rZW5UeXBlID0gVE9LRU5UWVBFLlNZTUJPTDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gc29tZXRoaW5nIHVua25vd24gaXMgZm91bmQsIHdyb25nIGNoYXJhY3RlcnMgLT4gYSBzeW50YXggZXJyb3JcblxuXG4gICAgc3RhdGUudG9rZW5UeXBlID0gVE9LRU5UWVBFLlVOS05PV047XG5cbiAgICB3aGlsZSAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgIT09ICcnKSB7XG4gICAgICBzdGF0ZS50b2tlbiArPSBjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKTtcbiAgICAgIG5leHQoc3RhdGUpO1xuICAgIH1cblxuICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnU3ludGF4IGVycm9yIGluIHBhcnQgXCInICsgc3RhdGUudG9rZW4gKyAnXCInKTtcbiAgfVxuICAvKipcbiAgICogR2V0IG5leHQgdG9rZW4gYW5kIHNraXAgbmV3bGluZSB0b2tlbnNcbiAgICovXG5cblxuICBmdW5jdGlvbiBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKSB7XG4gICAgZG8ge1xuICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgIH0gd2hpbGUgKHN0YXRlLnRva2VuID09PSAnXFxuJyk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuXG4gIH1cbiAgLyoqXG4gICAqIE9wZW4gcGFyYW1ldGVycy5cbiAgICogTmV3IGxpbmUgY2hhcmFjdGVycyB3aWxsIGJlIGlnbm9yZWQgdW50aWwgY2xvc2VQYXJhbXMoc3RhdGUpIGlzIGNhbGxlZFxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIG9wZW5QYXJhbXMoc3RhdGUpIHtcbiAgICBzdGF0ZS5uZXN0aW5nTGV2ZWwrKztcbiAgfVxuICAvKipcbiAgICogQ2xvc2UgcGFyYW1ldGVycy5cbiAgICogTmV3IGxpbmUgY2hhcmFjdGVycyB3aWxsIG5vIGxvbmdlciBiZSBpZ25vcmVkXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gY2xvc2VQYXJhbXMoc3RhdGUpIHtcbiAgICBzdGF0ZS5uZXN0aW5nTGV2ZWwtLTtcbiAgfVxuICAvKipcbiAgICogQ2hlY2tzIHdoZXRoZXIgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGBjYCBpcyBhIHZhbGlkIGFscGhhIGNoYXJhY3RlcjpcbiAgICpcbiAgICogLSBBIGxhdGluIGxldHRlciAodXBwZXIgb3IgbG93ZXIgY2FzZSkgQXNjaWk6IGEteiwgQS1aXG4gICAqIC0gQW4gdW5kZXJzY29yZSAgICAgICAgICAgICAgICAgICAgICAgIEFzY2lpOiBfXG4gICAqIC0gQSBkb2xsYXIgc2lnbiAgICAgICAgICAgICAgICAgICAgICAgIEFzY2lpOiAkXG4gICAqIC0gQSBsYXRpbiBsZXR0ZXIgd2l0aCBhY2NlbnRzICAgICAgICAgIFVuaWNvZGU6IFxcdTAwQzAgLSBcXHUwMkFGXG4gICAqIC0gQSBncmVlayBsZXR0ZXIgICAgICAgICAgICAgICAgICAgICAgIFVuaWNvZGU6IFxcdTAzNzAgLSBcXHUwM0ZGXG4gICAqIC0gQSBtYXRoZW1hdGljYWwgYWxwaGFudW1lcmljIHN5bWJvbCAgIFVuaWNvZGU6IFxcdXsxRDQwMH0gLSBcXHV7MUQ3RkZ9IGV4Y2x1ZGluZyBpbnZhbGlkIGNvZGUgcG9pbnRzXG4gICAqXG4gICAqIFRoZSBwcmV2aW91cyBhbmQgbmV4dCBjaGFyYWN0ZXJzIGFyZSBuZWVkZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXJcbiAgICogdGhpcyBjaGFyYWN0ZXIgaXMgcGFydCBvZiBhIHVuaWNvZGUgc3Vycm9nYXRlIHBhaXIuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjICAgICAgQ3VycmVudCBjaGFyYWN0ZXIgaW4gdGhlIGV4cHJlc3Npb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNQcmV2ICBQcmV2aW91cyBjaGFyYWN0ZXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNOZXh0ICBOZXh0IGNoYXJhY3RlclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cblxuXG4gIHBhcnNlLmlzQWxwaGEgPSBmdW5jdGlvbiBpc0FscGhhKGMsIGNQcmV2LCBjTmV4dCkge1xuICAgIHJldHVybiBwYXJzZS5pc1ZhbGlkTGF0aW5PckdyZWVrKGMpIHx8IHBhcnNlLmlzVmFsaWRNYXRoU3ltYm9sKGMsIGNOZXh0KSB8fCBwYXJzZS5pc1ZhbGlkTWF0aFN5bWJvbChjUHJldiwgYyk7XG4gIH07XG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgYSBjaGFyYWN0ZXIgaXMgYSB2YWxpZCBsYXRpbiwgZ3JlZWssIG9yIGxldHRlci1saWtlIGNoYXJhY3RlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY1xuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cblxuXG4gIHBhcnNlLmlzVmFsaWRMYXRpbk9yR3JlZWsgPSBmdW5jdGlvbiBpc1ZhbGlkTGF0aW5PckdyZWVrKGMpIHtcbiAgICByZXR1cm4gL15bYS16QS1aXyRcXHUwMEMwLVxcdTAyQUZcXHUwMzcwLVxcdTAzRkZcXHUyMTAwLVxcdTIxNEZdJC8udGVzdChjKTtcbiAgfTtcbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciB0d28gZ2l2ZW4gMTYgYml0IGNoYXJhY3RlcnMgZm9ybSBhIHN1cnJvZ2F0ZSBwYWlyIG9mIGFcbiAgICogdW5pY29kZSBtYXRoIHN5bWJvbC5cbiAgICpcbiAgICogaHR0cHM6Ly91bmljb2RlLXRhYmxlLmNvbS9lbi9cbiAgICogaHR0cHM6Ly93d3cud2lraXdhbmQuY29tL2VuL01hdGhlbWF0aWNhbF9vcGVyYXRvcnNfYW5kX3N5bWJvbHNfaW5fVW5pY29kZVxuICAgKlxuICAgKiBOb3RlOiBJbiBFUzYgd2lsbCBiZSB1bmljb2RlIGF3YXJlOlxuICAgKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yODA3MTIvamF2YXNjcmlwdC11bmljb2RlLXJlZ2V4ZXNcbiAgICogaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2VzNi11bmljb2RlLXJlZ2V4XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBoaWdoXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBsb3dcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG5cblxuICBwYXJzZS5pc1ZhbGlkTWF0aFN5bWJvbCA9IGZ1bmN0aW9uIGlzVmFsaWRNYXRoU3ltYm9sKGhpZ2gsIGxvdykge1xuICAgIHJldHVybiAvXltcXHVEODM1XSQvLnRlc3QoaGlnaCkgJiYgL15bXFx1REMwMC1cXHVERkZGXSQvLnRlc3QobG93KSAmJiAvXlteXFx1REM1NVxcdURDOURcXHVEQ0EwXFx1RENBMVxcdURDQTNcXHVEQ0E0XFx1RENBN1xcdURDQThcXHVEQ0FEXFx1RENCQVxcdURDQkNcXHVEQ0M0XFx1REQwNlxcdUREMEJcXHVERDBDXFx1REQxNVxcdUREMURcXHVERDNBXFx1REQzRlxcdURENDVcXHVERDQ3LVxcdURENDlcXHVERDUxXFx1REVBNlxcdURFQTdcXHVERkNDXFx1REZDRF0kLy50ZXN0KGxvdyk7XG4gIH07XG4gIC8qKlxuICAgKiBDaGVjayB3aGV0aGVyIGdpdmVuIGNoYXJhY3RlciBjIGlzIGEgd2hpdGUgc3BhY2UgY2hhcmFjdGVyOiBzcGFjZSwgdGFiLCBvciBlbnRlclxuICAgKiBAcGFyYW0ge3N0cmluZ30gY1xuICAgKiBAcGFyYW0ge251bWJlcn0gbmVzdGluZ0xldmVsXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgcGFyc2UuaXNXaGl0ZXNwYWNlID0gZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGMsIG5lc3RpbmdMZXZlbCkge1xuICAgIC8vIFRPRE86IGFsc28gdGFrZSAnXFxyJyBjYXJyaWFnZSByZXR1cm4gYXMgbmV3bGluZT8gT3IgZG9lcyB0aGF0IGdpdmUgcHJvYmxlbXMgb24gbWFjP1xuICAgIHJldHVybiBjID09PSAnICcgfHwgYyA9PT0gJ1xcdCcgfHwgYyA9PT0gJ1xcbicgJiYgbmVzdGluZ0xldmVsID4gMDtcbiAgfTtcbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciB0aGUgY2hhcmFjdGVyIGMgaXMgYSBkZWNpbWFsIG1hcmsgKGRvdCkuXG4gICAqIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiBpdCdzIG5vdCB0aGUgc3RhcnQgb2YgYSBkZWxpbWl0ZXIgJy4qJywgJy4vJywgb3IgJy5eJ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gY1xuICAgKiBAcGFyYW0ge3N0cmluZ30gY05leHRcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG5cblxuICBwYXJzZS5pc0RlY2ltYWxNYXJrID0gZnVuY3Rpb24gaXNEZWNpbWFsTWFyayhjLCBjTmV4dCkge1xuICAgIHJldHVybiBjID09PSAnLicgJiYgY05leHQgIT09ICcvJyAmJiBjTmV4dCAhPT0gJyonICYmIGNOZXh0ICE9PSAnXic7XG4gIH07XG4gIC8qKlxuICAgKiBjaGVja3MgaWYgdGhlIGdpdmVuIGNoYXIgYyBpcyBhIGRpZ2l0IG9yIGRvdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gYyAgIGEgc3RyaW5nIHdpdGggb25lIGNoYXJhY3RlclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cblxuXG4gIHBhcnNlLmlzRGlnaXREb3QgPSBmdW5jdGlvbiBpc0RpZ2l0RG90KGMpIHtcbiAgICByZXR1cm4gYyA+PSAnMCcgJiYgYyA8PSAnOScgfHwgYyA9PT0gJy4nO1xuICB9O1xuICAvKipcbiAgICogY2hlY2tzIGlmIHRoZSBnaXZlbiBjaGFyIGMgaXMgYSBkaWdpdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gYyAgIGEgc3RyaW5nIHdpdGggb25lIGNoYXJhY3RlclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cblxuXG4gIHBhcnNlLmlzRGlnaXQgPSBmdW5jdGlvbiBpc0RpZ2l0KGMpIHtcbiAgICByZXR1cm4gYyA+PSAnMCcgJiYgYyA8PSAnOSc7XG4gIH07XG4gIC8qKlxuICAgKiBTdGFydCBvZiB0aGUgcGFyc2UgbGV2ZWxzIGJlbG93LCBpbiBvcmRlciBvZiBwcmVjZWRlbmNlXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZVN0YXJ0KGV4cHJlc3Npb24sIGV4dHJhTm9kZXMpIHtcbiAgICB2YXIgc3RhdGUgPSBpbml0aWFsU3RhdGUoKTtcblxuICAgIF9leHRlbmRzKHN0YXRlLCB7XG4gICAgICBleHByZXNzaW9uOiBleHByZXNzaW9uLFxuICAgICAgZXh0cmFOb2RlczogZXh0cmFOb2Rlc1xuICAgIH0pO1xuXG4gICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgIHZhciBub2RlID0gcGFyc2VCbG9jayhzdGF0ZSk7IC8vIGNoZWNrIGZvciBnYXJiYWdlIGF0IHRoZSBlbmQgb2YgdGhlIGV4cHJlc3Npb25cbiAgICAvLyBhbiBleHByZXNzaW9uIGVuZHMgd2l0aCBhIGVtcHR5IGNoYXJhY3RlciAnJyBhbmQgdG9rZW5UeXBlIERFTElNSVRFUlxuXG4gICAgaWYgKHN0YXRlLnRva2VuICE9PSAnJykge1xuICAgICAgaWYgKHN0YXRlLnRva2VuVHlwZSA9PT0gVE9LRU5UWVBFLkRFTElNSVRFUikge1xuICAgICAgICAvLyB1c2VyIGVudGVyZWQgYSBub3QgZXhpc3Rpbmcgb3BlcmF0b3IgbGlrZSBcIi8vXCJcbiAgICAgICAgLy8gVE9ETzogZ2l2ZSBoaW50cyBmb3IgYWxpYXNlcywgZm9yIGV4YW1wbGUgd2l0aCBcIjw+XCIgZ2l2ZSBhcyBoaW50IFwiIGRpZCB5b3UgbWVhbiAhPT0gP1wiXG4gICAgICAgIHRocm93IGNyZWF0ZUVycm9yKHN0YXRlLCAnVW5leHBlY3RlZCBvcGVyYXRvciAnICsgc3RhdGUudG9rZW4pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdVbmV4cGVjdGVkIHBhcnQgXCInICsgc3RhdGUudG9rZW4gKyAnXCInKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogUGFyc2UgYSBibG9jayB3aXRoIGV4cHJlc3Npb25zLiBFeHByZXNzaW9ucyBjYW4gYmUgc2VwYXJhdGVkIGJ5IGEgbmV3bGluZVxuICAgKiBjaGFyYWN0ZXIgJ1xcbicsIG9yIGJ5IGEgc2VtaWNvbG9uICc7Jy4gSW4gY2FzZSBvZiBhIHNlbWljb2xvbiwgbm8gb3V0cHV0XG4gICAqIG9mIHRoZSBwcmVjZWRpbmcgbGluZSBpcyByZXR1cm5lZC5cbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlQmxvY2soc3RhdGUpIHtcbiAgICB2YXIgbm9kZTtcbiAgICB2YXIgYmxvY2tzID0gW107XG4gICAgdmFyIHZpc2libGU7XG5cbiAgICBpZiAoc3RhdGUudG9rZW4gIT09ICcnICYmIHN0YXRlLnRva2VuICE9PSAnXFxuJyAmJiBzdGF0ZS50b2tlbiAhPT0gJzsnKSB7XG4gICAgICBub2RlID0gcGFyc2VBc3NpZ25tZW50KHN0YXRlKTtcbiAgICAgIG5vZGUuY29tbWVudCA9IHN0YXRlLmNvbW1lbnQ7XG4gICAgfSAvLyBUT0RPOiBzaW1wbGlmeSB0aGlzIGxvb3BcblxuXG4gICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnXFxuJyB8fCBzdGF0ZS50b2tlbiA9PT0gJzsnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgIGlmIChibG9ja3MubGVuZ3RoID09PSAwICYmIG5vZGUpIHtcbiAgICAgICAgdmlzaWJsZSA9IHN0YXRlLnRva2VuICE9PSAnOyc7XG4gICAgICAgIGJsb2Nrcy5wdXNoKHtcbiAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgIHZpc2libGU6IHZpc2libGVcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGdldFRva2VuKHN0YXRlKTtcblxuICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnXFxuJyAmJiBzdGF0ZS50b2tlbiAhPT0gJzsnICYmIHN0YXRlLnRva2VuICE9PSAnJykge1xuICAgICAgICBub2RlID0gcGFyc2VBc3NpZ25tZW50KHN0YXRlKTtcbiAgICAgICAgbm9kZS5jb21tZW50ID0gc3RhdGUuY29tbWVudDtcbiAgICAgICAgdmlzaWJsZSA9IHN0YXRlLnRva2VuICE9PSAnOyc7XG4gICAgICAgIGJsb2Nrcy5wdXNoKHtcbiAgICAgICAgICBub2RlOiBub2RlLFxuICAgICAgICAgIHZpc2libGU6IHZpc2libGVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGJsb2Nrcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gbmV3IEJsb2NrTm9kZShibG9ja3MpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIW5vZGUpIHtcbiAgICAgICAgbm9kZSA9IG5ldyBDb25zdGFudE5vZGUodW5kZWZpbmVkKTtcbiAgICAgICAgbm9kZS5jb21tZW50ID0gc3RhdGUuY29tbWVudDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBBc3NpZ25tZW50IG9mIGEgZnVuY3Rpb24gb3IgdmFyaWFibGUsXG4gICAqIC0gY2FuIGJlIGEgdmFyaWFibGUgbGlrZSAnYT0yLjMnXG4gICAqIC0gb3IgYSB1cGRhdGluZyBhbiBleGlzdGluZyB2YXJpYWJsZSBsaWtlICdtYXRyaXgoMiwzOjUpPVs2LDcsOF0nXG4gICAqIC0gZGVmaW5pbmcgYSBmdW5jdGlvbiBsaWtlICdmKHgpID0geF4yJ1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VBc3NpZ25tZW50KHN0YXRlKSB7XG4gICAgdmFyIG5hbWUsIGFyZ3MsIHZhbHVlLCB2YWxpZDtcbiAgICB2YXIgbm9kZSA9IHBhcnNlQ29uZGl0aW9uYWwoc3RhdGUpO1xuXG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAnPScpIHtcbiAgICAgIGlmICgoMCwgX2lzLmlzU3ltYm9sTm9kZSkobm9kZSkpIHtcbiAgICAgICAgLy8gcGFyc2UgYSB2YXJpYWJsZSBhc3NpZ25tZW50IGxpa2UgJ2EgPSAyLzMnXG4gICAgICAgIG5hbWUgPSBub2RlLm5hbWU7XG4gICAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgICB2YWx1ZSA9IHBhcnNlQXNzaWdubWVudChzdGF0ZSk7XG4gICAgICAgIHJldHVybiBuZXcgQXNzaWdubWVudE5vZGUobmV3IFN5bWJvbE5vZGUobmFtZSksIHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0FjY2Vzc29yTm9kZSkobm9kZSkpIHtcbiAgICAgICAgLy8gcGFyc2UgYSBtYXRyaXggc3Vic2V0IGFzc2lnbm1lbnQgbGlrZSAnQVsxLDJdID0gNCdcbiAgICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7XG4gICAgICAgIHZhbHVlID0gcGFyc2VBc3NpZ25tZW50KHN0YXRlKTtcbiAgICAgICAgcmV0dXJuIG5ldyBBc3NpZ25tZW50Tm9kZShub2RlLm9iamVjdCwgbm9kZS5pbmRleCwgdmFsdWUpO1xuICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzRnVuY3Rpb25Ob2RlKShub2RlKSAmJiAoMCwgX2lzLmlzU3ltYm9sTm9kZSkobm9kZS5mbikpIHtcbiAgICAgICAgLy8gcGFyc2UgZnVuY3Rpb24gYXNzaWdubWVudCBsaWtlICdmKHgpID0geF4yJ1xuICAgICAgICB2YWxpZCA9IHRydWU7XG4gICAgICAgIGFyZ3MgPSBbXTtcbiAgICAgICAgbmFtZSA9IG5vZGUubmFtZTtcbiAgICAgICAgbm9kZS5hcmdzLmZvckVhY2goZnVuY3Rpb24gKGFyZywgaW5kZXgpIHtcbiAgICAgICAgICBpZiAoKDAsIF9pcy5pc1N5bWJvbE5vZGUpKGFyZykpIHtcbiAgICAgICAgICAgIGFyZ3NbaW5kZXhdID0gYXJnLm5hbWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbGlkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBpZiAodmFsaWQpIHtcbiAgICAgICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgICAgICB2YWx1ZSA9IHBhcnNlQXNzaWdubWVudChzdGF0ZSk7XG4gICAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbkFzc2lnbm1lbnROb2RlKG5hbWUsIGFyZ3MsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ0ludmFsaWQgbGVmdCBoYW5kIHNpZGUgb2YgYXNzaWdubWVudCBvcGVyYXRvciA9Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIGNvbmRpdGlvbmFsIG9wZXJhdGlvblxuICAgKlxuICAgKiAgICAgY29uZGl0aW9uID8gdHJ1ZVBhcnQgOiBmYWxzZVBhcnRcbiAgICpcbiAgICogTm90ZTogY29uZGl0aW9uYWwgb3BlcmF0b3IgaXMgcmlnaHQtYXNzb2NpYXRpdmVcbiAgICpcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlQ29uZGl0aW9uYWwoc3RhdGUpIHtcbiAgICB2YXIgbm9kZSA9IHBhcnNlTG9naWNhbE9yKHN0YXRlKTtcblxuICAgIHdoaWxlIChzdGF0ZS50b2tlbiA9PT0gJz8nKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgIC8vIHNldCBhIGNvbmRpdGlvbmFsIGxldmVsLCB0aGUgcmFuZ2Ugb3BlcmF0b3Igd2lsbCBiZSBpZ25vcmVkIGFzIGxvbmdcbiAgICAgIC8vIGFzIGNvbmRpdGlvbmFsTGV2ZWwgPT09IHN0YXRlLm5lc3RpbmdMZXZlbC5cbiAgICAgIHZhciBwcmV2ID0gc3RhdGUuY29uZGl0aW9uYWxMZXZlbDtcbiAgICAgIHN0YXRlLmNvbmRpdGlvbmFsTGV2ZWwgPSBzdGF0ZS5uZXN0aW5nTGV2ZWw7XG4gICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgIHZhciBjb25kaXRpb24gPSBub2RlO1xuICAgICAgdmFyIHRydWVFeHByID0gcGFyc2VBc3NpZ25tZW50KHN0YXRlKTtcbiAgICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJzonKSB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ0ZhbHNlIHBhcnQgb2YgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBleHBlY3RlZCcpO1xuICAgICAgc3RhdGUuY29uZGl0aW9uYWxMZXZlbCA9IG51bGw7XG4gICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgIHZhciBmYWxzZUV4cHIgPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpOyAvLyBOb3RlOiBjaGVjayBmb3IgY29uZGl0aW9uYWwgb3BlcmF0b3IgYWdhaW4sIHJpZ2h0IGFzc29jaWF0aXZpdHlcblxuICAgICAgbm9kZSA9IG5ldyBDb25kaXRpb25hbE5vZGUoY29uZGl0aW9uLCB0cnVlRXhwciwgZmFsc2VFeHByKTsgLy8gcmVzdG9yZSB0aGUgcHJldmlvdXMgY29uZGl0aW9uYWwgbGV2ZWxcblxuICAgICAgc3RhdGUuY29uZGl0aW9uYWxMZXZlbCA9IHByZXY7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIGxvZ2ljYWwgb3IsICd4IG9yIHknXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZUxvZ2ljYWxPcihzdGF0ZSkge1xuICAgIHZhciBub2RlID0gcGFyc2VMb2dpY2FsWG9yKHN0YXRlKTtcblxuICAgIHdoaWxlIChzdGF0ZS50b2tlbiA9PT0gJ29yJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKCdvcicsICdvcicsIFtub2RlLCBwYXJzZUxvZ2ljYWxYb3Ioc3RhdGUpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIGxvZ2ljYWwgZXhjbHVzaXZlIG9yLCAneCB4b3IgeSdcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlTG9naWNhbFhvcihzdGF0ZSkge1xuICAgIHZhciBub2RlID0gcGFyc2VMb2dpY2FsQW5kKHN0YXRlKTtcblxuICAgIHdoaWxlIChzdGF0ZS50b2tlbiA9PT0gJ3hvcicpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7XG4gICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZSgneG9yJywgJ3hvcicsIFtub2RlLCBwYXJzZUxvZ2ljYWxBbmQoc3RhdGUpXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIGxvZ2ljYWwgYW5kLCAneCBhbmQgeSdcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlTG9naWNhbEFuZChzdGF0ZSkge1xuICAgIHZhciBub2RlID0gcGFyc2VCaXR3aXNlT3Ioc3RhdGUpO1xuXG4gICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnYW5kJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKCdhbmQnLCAnYW5kJywgW25vZGUsIHBhcnNlQml0d2lzZU9yKHN0YXRlKV0pO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBiaXR3aXNlIG9yLCAneCB8IHknXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZUJpdHdpc2VPcihzdGF0ZSkge1xuICAgIHZhciBub2RlID0gcGFyc2VCaXR3aXNlWG9yKHN0YXRlKTtcblxuICAgIHdoaWxlIChzdGF0ZS50b2tlbiA9PT0gJ3wnKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJ3wnLCAnYml0T3InLCBbbm9kZSwgcGFyc2VCaXR3aXNlWG9yKHN0YXRlKV0pO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBiaXR3aXNlIGV4Y2x1c2l2ZSBvciAoeG9yKSwgJ3ggXnwgeSdcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlQml0d2lzZVhvcihzdGF0ZSkge1xuICAgIHZhciBub2RlID0gcGFyc2VCaXR3aXNlQW5kKHN0YXRlKTtcblxuICAgIHdoaWxlIChzdGF0ZS50b2tlbiA9PT0gJ158Jykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKCdefCcsICdiaXRYb3InLCBbbm9kZSwgcGFyc2VCaXR3aXNlQW5kKHN0YXRlKV0pO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBiaXR3aXNlIGFuZCwgJ3ggJiB5J1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VCaXR3aXNlQW5kKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUgPSBwYXJzZVJlbGF0aW9uYWwoc3RhdGUpO1xuXG4gICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnJicpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7XG4gICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZSgnJicsICdiaXRBbmQnLCBbbm9kZSwgcGFyc2VSZWxhdGlvbmFsKHN0YXRlKV0pO1xuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIGNoYWluZWQgY29uZGl0aW9uYWwsIGxpa2UgJ2EgPiBiID49IGMnXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZVJlbGF0aW9uYWwoc3RhdGUpIHtcbiAgICB2YXIgcGFyYW1zID0gW3BhcnNlU2hpZnQoc3RhdGUpXTtcbiAgICB2YXIgY29uZGl0aW9uYWxzID0gW107XG4gICAgdmFyIG9wZXJhdG9ycyA9IHtcbiAgICAgICc9PSc6ICdlcXVhbCcsXG4gICAgICAnIT0nOiAndW5lcXVhbCcsXG4gICAgICAnPCc6ICdzbWFsbGVyJyxcbiAgICAgICc+JzogJ2xhcmdlcicsXG4gICAgICAnPD0nOiAnc21hbGxlckVxJyxcbiAgICAgICc+PSc6ICdsYXJnZXJFcSdcbiAgICB9O1xuXG4gICAgd2hpbGUgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShvcGVyYXRvcnMsIHN0YXRlLnRva2VuKSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICB2YXIgY29uZCA9IHtcbiAgICAgICAgbmFtZTogc3RhdGUudG9rZW4sXG4gICAgICAgIGZuOiBvcGVyYXRvcnNbc3RhdGUudG9rZW5dXG4gICAgICB9O1xuICAgICAgY29uZGl0aW9uYWxzLnB1c2goY29uZCk7XG4gICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgIHBhcmFtcy5wdXNoKHBhcnNlU2hpZnQoc3RhdGUpKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHBhcmFtc1swXTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5sZW5ndGggPT09IDIpIHtcbiAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKGNvbmRpdGlvbmFsc1swXS5uYW1lLCBjb25kaXRpb25hbHNbMF0uZm4sIHBhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUmVsYXRpb25hbE5vZGUoY29uZGl0aW9uYWxzLm1hcChmdW5jdGlvbiAoYykge1xuICAgICAgICByZXR1cm4gYy5mbjtcbiAgICAgIH0pLCBwYXJhbXMpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQml0d2lzZSBsZWZ0IHNoaWZ0LCBiaXR3aXNlIHJpZ2h0IGFyaXRobWV0aWMgc2hpZnQsIGJpdHdpc2UgcmlnaHQgbG9naWNhbCBzaGlmdFxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VTaGlmdChzdGF0ZSkge1xuICAgIHZhciBub2RlLCBuYW1lLCBmbiwgcGFyYW1zO1xuICAgIG5vZGUgPSBwYXJzZUNvbnZlcnNpb24oc3RhdGUpO1xuICAgIHZhciBvcGVyYXRvcnMgPSB7XG4gICAgICAnPDwnOiAnbGVmdFNoaWZ0JyxcbiAgICAgICc+Pic6ICdyaWdodEFyaXRoU2hpZnQnLFxuICAgICAgJz4+Pic6ICdyaWdodExvZ1NoaWZ0J1xuICAgIH07XG5cbiAgICB3aGlsZSAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG9wZXJhdG9ycywgc3RhdGUudG9rZW4pKSB7XG4gICAgICBuYW1lID0gc3RhdGUudG9rZW47XG4gICAgICBmbiA9IG9wZXJhdG9yc1tuYW1lXTtcbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgcGFyYW1zID0gW25vZGUsIHBhcnNlQ29udmVyc2lvbihzdGF0ZSldO1xuICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUobmFtZSwgZm4sIHBhcmFtcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIGNvbnZlcnNpb24gb3BlcmF0b3JzICd0bycgYW5kICdpbidcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlQ29udmVyc2lvbihzdGF0ZSkge1xuICAgIHZhciBub2RlLCBuYW1lLCBmbiwgcGFyYW1zO1xuICAgIG5vZGUgPSBwYXJzZVJhbmdlKHN0YXRlKTtcbiAgICB2YXIgb3BlcmF0b3JzID0ge1xuICAgICAgdG86ICd0bycsXG4gICAgICBcImluXCI6ICd0bycgLy8gYWxpYXMgb2YgJ3RvJ1xuXG4gICAgfTtcblxuICAgIHdoaWxlICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkob3BlcmF0b3JzLCBzdGF0ZS50b2tlbikpIHtcbiAgICAgIG5hbWUgPSBzdGF0ZS50b2tlbjtcbiAgICAgIGZuID0gb3BlcmF0b3JzW25hbWVdO1xuICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7XG5cbiAgICAgIGlmIChuYW1lID09PSAnaW4nICYmIHN0YXRlLnRva2VuID09PSAnJykge1xuICAgICAgICAvLyBlbmQgb2YgZXhwcmVzc2lvbiAtPiB0aGlzIGlzIHRoZSB1bml0ICdpbicgKCdpbmNoJylcbiAgICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbm9kZSwgbmV3IFN5bWJvbE5vZGUoJ2luJyldLCB0cnVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG9wZXJhdG9yICdhIHRvIGInIG9yICdhIGluIGInXG4gICAgICAgIHBhcmFtcyA9IFtub2RlLCBwYXJzZVJhbmdlKHN0YXRlKV07XG4gICAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKG5hbWUsIGZuLCBwYXJhbXMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBwYXJzZSByYW5nZSwgXCJzdGFydDplbmRcIiwgXCJzdGFydDpzdGVwOmVuZFwiLCBcIjpcIiwgXCJzdGFydDpcIiwgXCI6ZW5kXCIsIGV0Y1xuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VSYW5nZShzdGF0ZSkge1xuICAgIHZhciBub2RlO1xuICAgIHZhciBwYXJhbXMgPSBbXTtcblxuICAgIGlmIChzdGF0ZS50b2tlbiA9PT0gJzonKSB7XG4gICAgICAvLyBpbXBsaWNpdCBzdGFydD0xIChvbmUtYmFzZWQpXG4gICAgICBub2RlID0gbmV3IENvbnN0YW50Tm9kZSgxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZXhwbGljaXQgc3RhcnRcbiAgICAgIG5vZGUgPSBwYXJzZUFkZFN1YnRyYWN0KHN0YXRlKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUudG9rZW4gPT09ICc6JyAmJiBzdGF0ZS5jb25kaXRpb25hbExldmVsICE9PSBzdGF0ZS5uZXN0aW5nTGV2ZWwpIHtcbiAgICAgIC8vIHdlIGlnbm9yZSB0aGUgcmFuZ2Ugb3BlcmF0b3Igd2hlbiBhIGNvbmRpdGlvbmFsIG9wZXJhdG9yIGlzIGJlaW5nIHByb2Nlc3NlZCBvbiB0aGUgc2FtZSBsZXZlbFxuICAgICAgcGFyYW1zLnB1c2gobm9kZSk7IC8vIHBhcnNlIHN0ZXAgYW5kIGVuZFxuXG4gICAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICc6JyAmJiBwYXJhbXMubGVuZ3RoIDwgMykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7XG5cbiAgICAgICAgaWYgKHN0YXRlLnRva2VuID09PSAnKScgfHwgc3RhdGUudG9rZW4gPT09ICddJyB8fCBzdGF0ZS50b2tlbiA9PT0gJywnIHx8IHN0YXRlLnRva2VuID09PSAnJykge1xuICAgICAgICAgIC8vIGltcGxpY2l0IGVuZFxuICAgICAgICAgIHBhcmFtcy5wdXNoKG5ldyBTeW1ib2xOb2RlKCdlbmQnKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZXhwbGljaXQgZW5kXG4gICAgICAgICAgcGFyYW1zLnB1c2gocGFyc2VBZGRTdWJ0cmFjdChzdGF0ZSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJhbXMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIC8vIHBhcmFtcyA9IFtzdGFydCwgc3RlcCwgZW5kXVxuICAgICAgICBub2RlID0gbmV3IFJhbmdlTm9kZShwYXJhbXNbMF0sIHBhcmFtc1syXSwgcGFyYW1zWzFdKTsgLy8gc3RhcnQsIGVuZCwgc3RlcFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbGVuZ3RoID09PSAyXG4gICAgICAgIC8vIHBhcmFtcyA9IFtzdGFydCwgZW5kXVxuICAgICAgICBub2RlID0gbmV3IFJhbmdlTm9kZShwYXJhbXNbMF0sIHBhcmFtc1sxXSk7IC8vIHN0YXJ0LCBlbmRcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogYWRkIG9yIHN1YnRyYWN0XG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZUFkZFN1YnRyYWN0KHN0YXRlKSB7XG4gICAgdmFyIG5vZGUsIG5hbWUsIGZuLCBwYXJhbXM7XG4gICAgbm9kZSA9IHBhcnNlTXVsdGlwbHlEaXZpZGUoc3RhdGUpO1xuICAgIHZhciBvcGVyYXRvcnMgPSB7XG4gICAgICAnKyc6ICdhZGQnLFxuICAgICAgJy0nOiAnc3VidHJhY3QnXG4gICAgfTtcblxuICAgIHdoaWxlICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkob3BlcmF0b3JzLCBzdGF0ZS50b2tlbikpIHtcbiAgICAgIG5hbWUgPSBzdGF0ZS50b2tlbjtcbiAgICAgIGZuID0gb3BlcmF0b3JzW25hbWVdO1xuICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7XG4gICAgICBwYXJhbXMgPSBbbm9kZSwgcGFyc2VNdWx0aXBseURpdmlkZShzdGF0ZSldO1xuICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUobmFtZSwgZm4sIHBhcmFtcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cbiAgLyoqXG4gICAqIG11bHRpcGx5LCBkaXZpZGUsIG1vZHVsdXNcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlTXVsdGlwbHlEaXZpZGUoc3RhdGUpIHtcbiAgICB2YXIgbm9kZSwgbGFzdCwgbmFtZSwgZm47XG4gICAgbm9kZSA9IHBhcnNlSW1wbGljaXRNdWx0aXBsaWNhdGlvbihzdGF0ZSk7XG4gICAgbGFzdCA9IG5vZGU7XG4gICAgdmFyIG9wZXJhdG9ycyA9IHtcbiAgICAgICcqJzogJ211bHRpcGx5JyxcbiAgICAgICcuKic6ICdkb3RNdWx0aXBseScsXG4gICAgICAnLyc6ICdkaXZpZGUnLFxuICAgICAgJy4vJzogJ2RvdERpdmlkZScsXG4gICAgICAnJSc6ICdtb2QnLFxuICAgICAgbW9kOiAnbW9kJ1xuICAgIH07XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShvcGVyYXRvcnMsIHN0YXRlLnRva2VuKSkge1xuICAgICAgICAvLyBleHBsaWNpdCBvcGVyYXRvcnNcbiAgICAgICAgbmFtZSA9IHN0YXRlLnRva2VuO1xuICAgICAgICBmbiA9IG9wZXJhdG9yc1tuYW1lXTtcbiAgICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7XG4gICAgICAgIGxhc3QgPSBwYXJzZUltcGxpY2l0TXVsdGlwbGljYXRpb24oc3RhdGUpO1xuICAgICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZShuYW1lLCBmbiwgW25vZGUsIGxhc3RdKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBpbXBsaWNpdCBtdWx0aXBsaWNhdGlvblxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VJbXBsaWNpdE11bHRpcGxpY2F0aW9uKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUsIGxhc3Q7XG4gICAgbm9kZSA9IHBhcnNlUnVsZTIoc3RhdGUpO1xuICAgIGxhc3QgPSBub2RlO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmIChzdGF0ZS50b2tlblR5cGUgPT09IFRPS0VOVFlQRS5TWU1CT0wgfHwgc3RhdGUudG9rZW4gPT09ICdpbicgJiYgKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkobm9kZSkgfHwgc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuTlVNQkVSICYmICEoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShsYXN0KSAmJiAoISgwLCBfaXMuaXNPcGVyYXRvck5vZGUpKGxhc3QpIHx8IGxhc3Qub3AgPT09ICchJykgfHwgc3RhdGUudG9rZW4gPT09ICcoJykge1xuICAgICAgICAvLyBwYXJzZSBpbXBsaWNpdCBtdWx0aXBsaWNhdGlvblxuICAgICAgICAvL1xuICAgICAgICAvLyBzeW1ib2w6ICAgICAgaW1wbGljaXQgbXVsdGlwbGljYXRpb24gbGlrZSAnMmEnLCAnKDIrMylhJywgJ2EgYidcbiAgICAgICAgLy8gbnVtYmVyOiAgICAgIGltcGxpY2l0IG11bHRpcGxpY2F0aW9uIGxpa2UgJygyKzMpMidcbiAgICAgICAgLy8gcGFyZW50aGVzaXM6IGltcGxpY2l0IG11bHRpcGxpY2F0aW9uIGxpa2UgJzIoMys0KScsICcoMys0KSgxKzIpJ1xuICAgICAgICBsYXN0ID0gcGFyc2VSdWxlMihzdGF0ZSk7XG4gICAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25vZGUsIGxhc3RdLCB0cnVlXG4gICAgICAgIC8qIGltcGxpY2l0ICovXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogSW5mYW1vdXMgXCJydWxlIDJcIiBhcyBkZXNjcmliZWQgaW4gaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvaXNzdWVzLzc5MiNpc3N1ZWNvbW1lbnQtMzYxMDY1MzcwXG4gICAqIEV4cGxpY2l0IGRpdmlzaW9uIGdldHMgaGlnaGVyIHByZWNlZGVuY2UgdGhhbiBpbXBsaWNpdCBtdWx0aXBsaWNhdGlvblxuICAgKiB3aGVuIHRoZSBkaXZpc2lvbiBtYXRjaGVzIHRoaXMgcGF0dGVybjogW251bWJlcl0gLyBbbnVtYmVyXSBbc3ltYm9sXVxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VSdWxlMihzdGF0ZSkge1xuICAgIHZhciBub2RlID0gcGFyc2VVbmFyeShzdGF0ZSk7XG4gICAgdmFyIGxhc3QgPSBub2RlO1xuICAgIHZhciB0b2tlblN0YXRlcyA9IFtdO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIC8vIE1hdGNoIHRoZSBcIm51bWJlciAvXCIgcGFydCBvZiB0aGUgcGF0dGVybiBcIm51bWJlciAvIG51bWJlciBzeW1ib2xcIlxuICAgICAgaWYgKHN0YXRlLnRva2VuID09PSAnLycgJiYgKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkobGFzdCkpIHtcbiAgICAgICAgLy8gTG9vayBhaGVhZCB0byBzZWUgaWYgdGhlIG5leHQgdG9rZW4gaXMgYSBudW1iZXJcbiAgICAgICAgdG9rZW5TdGF0ZXMucHVzaChfZXh0ZW5kcyh7fSwgc3RhdGUpKTtcbiAgICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7IC8vIE1hdGNoIHRoZSBcIm51bWJlciAvIG51bWJlclwiIHBhcnQgb2YgdGhlIHBhdHRlcm5cblxuICAgICAgICBpZiAoc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuTlVNQkVSKSB7XG4gICAgICAgICAgLy8gTG9vayBhaGVhZCBhZ2FpblxuICAgICAgICAgIHRva2VuU3RhdGVzLnB1c2goX2V4dGVuZHMoe30sIHN0YXRlKSk7XG4gICAgICAgICAgZ2V0VG9rZW5Ta2lwTmV3bGluZShzdGF0ZSk7IC8vIE1hdGNoIHRoZSBcInN5bWJvbFwiIHBhcnQgb2YgdGhlIHBhdHRlcm4sIG9yIGEgbGVmdCBwYXJlbnRoZXNpc1xuXG4gICAgICAgICAgaWYgKHN0YXRlLnRva2VuVHlwZSA9PT0gVE9LRU5UWVBFLlNZTUJPTCB8fCBzdGF0ZS50b2tlbiA9PT0gJygnKSB7XG4gICAgICAgICAgICAvLyBXZSd2ZSBtYXRjaGVkIHRoZSBwYXR0ZXJuIFwibnVtYmVyIC8gbnVtYmVyIHN5bWJvbFwiLlxuICAgICAgICAgICAgLy8gUmV3aW5kIG9uY2UgYW5kIGJ1aWxkIHRoZSBcIm51bWJlciAvIG51bWJlclwiIG5vZGU7IHRoZSBzeW1ib2wgd2lsbCBiZSBjb25zdW1lZCBsYXRlclxuICAgICAgICAgICAgX2V4dGVuZHMoc3RhdGUsIHRva2VuU3RhdGVzLnBvcCgpKTtcblxuICAgICAgICAgICAgdG9rZW5TdGF0ZXMucG9wKCk7XG4gICAgICAgICAgICBsYXN0ID0gcGFyc2VVbmFyeShzdGF0ZSk7XG4gICAgICAgICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbbm9kZSwgbGFzdF0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBOb3QgYSBtYXRjaCwgc28gcmV3aW5kXG4gICAgICAgICAgICB0b2tlblN0YXRlcy5wb3AoKTtcblxuICAgICAgICAgICAgX2V4dGVuZHMoc3RhdGUsIHRva2VuU3RhdGVzLnBvcCgpKTtcblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE5vdCBhIG1hdGNoLCBzbyByZXdpbmRcbiAgICAgICAgICBfZXh0ZW5kcyhzdGF0ZSwgdG9rZW5TdGF0ZXMucG9wKCkpO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG4gIC8qKlxuICAgKiBVbmFyeSBwbHVzIGFuZCBtaW51cywgYW5kIGxvZ2ljYWwgYW5kIGJpdHdpc2Ugbm90XG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZVVuYXJ5KHN0YXRlKSB7XG4gICAgdmFyIG5hbWUsIHBhcmFtcywgZm47XG4gICAgdmFyIG9wZXJhdG9ycyA9IHtcbiAgICAgICctJzogJ3VuYXJ5TWludXMnLFxuICAgICAgJysnOiAndW5hcnlQbHVzJyxcbiAgICAgICd+JzogJ2JpdE5vdCcsXG4gICAgICBub3Q6ICdub3QnXG4gICAgfTtcblxuICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkob3BlcmF0b3JzLCBzdGF0ZS50b2tlbikpIHtcbiAgICAgIGZuID0gb3BlcmF0b3JzW3N0YXRlLnRva2VuXTtcbiAgICAgIG5hbWUgPSBzdGF0ZS50b2tlbjtcbiAgICAgIGdldFRva2VuU2tpcE5ld2xpbmUoc3RhdGUpO1xuICAgICAgcGFyYW1zID0gW3BhcnNlVW5hcnkoc3RhdGUpXTtcbiAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5hbWUsIGZuLCBwYXJhbXMpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZVBvdyhzdGF0ZSk7XG4gIH1cbiAgLyoqXG4gICAqIHBvd2VyXG4gICAqIE5vdGU6IHBvd2VyIG9wZXJhdG9yIGlzIHJpZ2h0IGFzc29jaWF0aXZlXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZVBvdyhzdGF0ZSkge1xuICAgIHZhciBub2RlLCBuYW1lLCBmbiwgcGFyYW1zO1xuICAgIG5vZGUgPSBwYXJzZUxlZnRIYW5kT3BlcmF0b3JzKHN0YXRlKTtcblxuICAgIGlmIChzdGF0ZS50b2tlbiA9PT0gJ14nIHx8IHN0YXRlLnRva2VuID09PSAnLl4nKSB7XG4gICAgICBuYW1lID0gc3RhdGUudG9rZW47XG4gICAgICBmbiA9IG5hbWUgPT09ICdeJyA/ICdwb3cnIDogJ2RvdFBvdyc7XG4gICAgICBnZXRUb2tlblNraXBOZXdsaW5lKHN0YXRlKTtcbiAgICAgIHBhcmFtcyA9IFtub2RlLCBwYXJzZVVuYXJ5KHN0YXRlKV07IC8vIEdvIGJhY2sgdG8gdW5hcnksIHdlIGNhbiBoYXZlICcyXi0zJ1xuXG4gICAgICBub2RlID0gbmV3IE9wZXJhdG9yTm9kZShuYW1lLCBmbiwgcGFyYW1zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogTGVmdCBoYW5kIG9wZXJhdG9yczogZmFjdG9yaWFsIHghLCBjdHJhbnNwb3NlIHgnXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZUxlZnRIYW5kT3BlcmF0b3JzKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUsIG5hbWUsIGZuLCBwYXJhbXM7XG4gICAgbm9kZSA9IHBhcnNlQ3VzdG9tTm9kZXMoc3RhdGUpO1xuICAgIHZhciBvcGVyYXRvcnMgPSB7XG4gICAgICAnISc6ICdmYWN0b3JpYWwnLFxuICAgICAgJ1xcJyc6ICdjdHJhbnNwb3NlJ1xuICAgIH07XG5cbiAgICB3aGlsZSAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG9wZXJhdG9ycywgc3RhdGUudG9rZW4pKSB7XG4gICAgICBuYW1lID0gc3RhdGUudG9rZW47XG4gICAgICBmbiA9IG9wZXJhdG9yc1tuYW1lXTtcbiAgICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICAgIHBhcmFtcyA9IFtub2RlXTtcbiAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKG5hbWUsIGZuLCBwYXJhbXMpO1xuICAgICAgbm9kZSA9IHBhcnNlQWNjZXNzb3JzKHN0YXRlLCBub2RlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogUGFyc2UgYSBjdXN0b20gbm9kZSBoYW5kbGVyLiBBIG5vZGUgaGFuZGxlciBjYW4gYmUgdXNlZCB0byBwcm9jZXNzXG4gICAqIG5vZGVzIGluIGEgY3VzdG9tIHdheSwgZm9yIGV4YW1wbGUgZm9yIGhhbmRsaW5nIGEgcGxvdC5cbiAgICpcbiAgICogQSBoYW5kbGVyIG11c3QgYmUgcGFzc2VkIGFzIHNlY29uZCBhcmd1bWVudCBvZiB0aGUgcGFyc2UgZnVuY3Rpb24uXG4gICAqIC0gbXVzdCBleHRlbmQgbWF0aC5leHByZXNzaW9uLm5vZGUuTm9kZVxuICAgKiAtIG11c3QgY29udGFpbiBhIGZ1bmN0aW9uIF9jb21waWxlKGRlZnM6IE9iamVjdCkgOiBzdHJpbmdcbiAgICogLSBtdXN0IGNvbnRhaW4gYSBmdW5jdGlvbiBmaW5kKGZpbHRlcjogT2JqZWN0KSA6IE5vZGVbXVxuICAgKiAtIG11c3QgY29udGFpbiBhIGZ1bmN0aW9uIHRvU3RyaW5nKCkgOiBzdHJpbmdcbiAgICogLSB0aGUgY29uc3RydWN0b3IgaXMgY2FsbGVkIHdpdGggYSBzaW5nbGUgYXJndW1lbnQgY29udGFpbmluZyBhbGwgcGFyYW1ldGVyc1xuICAgKlxuICAgKiBGb3IgZXhhbXBsZTpcbiAgICpcbiAgICogICAgIG5vZGVzID0ge1xuICAgKiAgICAgICAncGxvdCc6IFBsb3RIYW5kbGVyXG4gICAqICAgICB9XG4gICAqXG4gICAqIFRoZSBjb25zdHJ1Y3RvciBvZiB0aGUgaGFuZGxlciBpcyBjYWxsZWQgYXM6XG4gICAqXG4gICAqICAgICBub2RlID0gbmV3IFBsb3RIYW5kbGVyKHBhcmFtcylcbiAgICpcbiAgICogVGhlIGhhbmRsZXIgd2lsbCBiZSBpbnZva2VkIHdoZW4gZXZhbHVhdGluZyBhbiBleHByZXNzaW9uIGxpa2U6XG4gICAqXG4gICAqICAgICBub2RlID0gbWF0aC5wYXJzZSgncGxvdChzaW4oeCksIHgpJywgbm9kZXMpXG4gICAqXG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZUN1c3RvbU5vZGVzKHN0YXRlKSB7XG4gICAgdmFyIHBhcmFtcyA9IFtdO1xuXG4gICAgaWYgKHN0YXRlLnRva2VuVHlwZSA9PT0gVE9LRU5UWVBFLlNZTUJPTCAmJiAoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoc3RhdGUuZXh0cmFOb2Rlcywgc3RhdGUudG9rZW4pKSB7XG4gICAgICB2YXIgQ3VzdG9tTm9kZSA9IHN0YXRlLmV4dHJhTm9kZXNbc3RhdGUudG9rZW5dO1xuICAgICAgZ2V0VG9rZW4oc3RhdGUpOyAvLyBwYXJzZSBwYXJhbWV0ZXJzXG5cbiAgICAgIGlmIChzdGF0ZS50b2tlbiA9PT0gJygnKSB7XG4gICAgICAgIHBhcmFtcyA9IFtdO1xuICAgICAgICBvcGVuUGFyYW1zKHN0YXRlKTtcbiAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuXG4gICAgICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJyknKSB7XG4gICAgICAgICAgcGFyYW1zLnB1c2gocGFyc2VBc3NpZ25tZW50KHN0YXRlKSk7IC8vIHBhcnNlIGEgbGlzdCB3aXRoIHBhcmFtZXRlcnNcblxuICAgICAgICAgIHdoaWxlIChzdGF0ZS50b2tlbiA9PT0gJywnKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICAgICAgICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcnNlQXNzaWdubWVudChzdGF0ZSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJyknKSB7XG4gICAgICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdQYXJlbnRoZXNpcyApIGV4cGVjdGVkJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjbG9zZVBhcmFtcyhzdGF0ZSk7XG4gICAgICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICAgIH0gLy8gY3JlYXRlIGEgbmV3IGN1c3RvbSBub2RlXG4gICAgICAvLyBub2luc3BlY3Rpb24gSlNWYWxpZGF0ZVR5cGVzXG5cblxuICAgICAgcmV0dXJuIG5ldyBDdXN0b21Ob2RlKHBhcmFtcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlU3ltYm9sKHN0YXRlKTtcbiAgfVxuICAvKipcbiAgICogcGFyc2Ugc3ltYm9sczogZnVuY3Rpb25zLCB2YXJpYWJsZXMsIGNvbnN0YW50cywgdW5pdHNcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlU3ltYm9sKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUsIG5hbWU7XG5cbiAgICBpZiAoc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuU1lNQk9MIHx8IHN0YXRlLnRva2VuVHlwZSA9PT0gVE9LRU5UWVBFLkRFTElNSVRFUiAmJiBzdGF0ZS50b2tlbiBpbiBOQU1FRF9ERUxJTUlURVJTKSB7XG4gICAgICBuYW1lID0gc3RhdGUudG9rZW47XG4gICAgICBnZXRUb2tlbihzdGF0ZSk7XG5cbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoQ09OU1RBTlRTLCBuYW1lKSkge1xuICAgICAgICAvLyB0cnVlLCBmYWxzZSwgbnVsbCwgLi4uXG4gICAgICAgIG5vZGUgPSBuZXcgQ29uc3RhbnROb2RlKENPTlNUQU5UU1tuYW1lXSk7XG4gICAgICB9IGVsc2UgaWYgKE5VTUVSSUNfQ09OU1RBTlRTLmluZGV4T2YobmFtZSkgIT09IC0xKSB7XG4gICAgICAgIC8vIE5hTiwgSW5maW5pdHlcbiAgICAgICAgbm9kZSA9IG5ldyBDb25zdGFudE5vZGUobnVtZXJpYyhuYW1lLCAnbnVtYmVyJykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbm9kZSA9IG5ldyBTeW1ib2xOb2RlKG5hbWUpO1xuICAgICAgfSAvLyBwYXJzZSBmdW5jdGlvbiBwYXJhbWV0ZXJzIGFuZCBtYXRyaXggaW5kZXhcblxuXG4gICAgICBub2RlID0gcGFyc2VBY2Nlc3NvcnMoc3RhdGUsIG5vZGUpO1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlRG91YmxlUXVvdGVzU3RyaW5nKHN0YXRlKTtcbiAgfVxuICAvKipcbiAgICogcGFyc2UgYWNjZXNzb3JzOlxuICAgKiAtIGZ1bmN0aW9uIGludm9jYXRpb24gaW4gcm91bmQgYnJhY2tldHMgKC4uLiksIGZvciBleGFtcGxlIHNxcnQoMilcbiAgICogLSBpbmRleCBlbmNsb3NlZCBpbiBzcXVhcmUgYnJhY2tldHMgWy4uLl0sIGZvciBleGFtcGxlIEFbMiwzXVxuICAgKiAtIGRvdCBub3RhdGlvbiBmb3IgcHJvcGVydGllcywgbGlrZSBmb28uYmFyXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzdGF0ZVxuICAgKiBAcGFyYW0ge05vZGV9IG5vZGUgICAgTm9kZSBvbiB3aGljaCB0byBhcHBseSB0aGUgcGFyYW1ldGVycy4gSWYgdGhlcmVcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGFyZSBubyBwYXJhbWV0ZXJzIGluIHRoZSBleHByZXNzaW9uLCB0aGUgbm9kZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgaXRzZWxmIGlzIHJldHVybmVkXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFt0eXBlc10gIEZpbHRlciB0aGUgdHlwZXMgb2Ygbm90YXRpb25zXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbiBiZSBbJygnLCAnWycsICcuJ11cbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlQWNjZXNzb3JzKHN0YXRlLCBub2RlLCB0eXBlcykge1xuICAgIHZhciBwYXJhbXM7XG5cbiAgICB3aGlsZSAoKHN0YXRlLnRva2VuID09PSAnKCcgfHwgc3RhdGUudG9rZW4gPT09ICdbJyB8fCBzdGF0ZS50b2tlbiA9PT0gJy4nKSAmJiAoIXR5cGVzIHx8IHR5cGVzLmluZGV4T2Yoc3RhdGUudG9rZW4pICE9PSAtMSkpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgcGFyYW1zID0gW107XG5cbiAgICAgIGlmIChzdGF0ZS50b2tlbiA9PT0gJygnKSB7XG4gICAgICAgIGlmICgoMCwgX2lzLmlzU3ltYm9sTm9kZSkobm9kZSkgfHwgKDAsIF9pcy5pc0FjY2Vzc29yTm9kZSkobm9kZSkpIHtcbiAgICAgICAgICAvLyBmdW5jdGlvbiBpbnZvY2F0aW9uIGxpa2UgZm4oMiwgMykgb3Igb2JqLmZuKDIsIDMpXG4gICAgICAgICAgb3BlblBhcmFtcyhzdGF0ZSk7XG4gICAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuXG4gICAgICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnKScpIHtcbiAgICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcnNlQXNzaWdubWVudChzdGF0ZSkpOyAvLyBwYXJzZSBhIGxpc3Qgd2l0aCBwYXJhbWV0ZXJzXG5cbiAgICAgICAgICAgIHdoaWxlIChzdGF0ZS50b2tlbiA9PT0gJywnKSB7XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICAgICAgICAgIHBhcmFtcy5wdXNoKHBhcnNlQXNzaWdubWVudChzdGF0ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJyknKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1BhcmVudGhlc2lzICkgZXhwZWN0ZWQnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjbG9zZVBhcmFtcyhzdGF0ZSk7XG4gICAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgICAgIG5vZGUgPSBuZXcgRnVuY3Rpb25Ob2RlKG5vZGUsIHBhcmFtcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gaW1wbGljaXQgbXVsdGlwbGljYXRpb24gbGlrZSAoMiszKSg0KzUpIG9yIHNxcnQoMikoMSsyKVxuICAgICAgICAgIC8vIGRvbid0IHBhcnNlIGl0IGhlcmUgYnV0IGxldCBpdCBiZSBoYW5kbGVkIGJ5IHBhcnNlSW1wbGljaXRNdWx0aXBsaWNhdGlvblxuICAgICAgICAgIC8vIHdpdGggY29ycmVjdCBwcmVjZWRlbmNlXG4gICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc3RhdGUudG9rZW4gPT09ICdbJykge1xuICAgICAgICAvLyBpbmRleCBub3RhdGlvbiBsaWtlIHZhcmlhYmxlWzIsIDNdXG4gICAgICAgIG9wZW5QYXJhbXMoc3RhdGUpO1xuICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG5cbiAgICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnXScpIHtcbiAgICAgICAgICBwYXJhbXMucHVzaChwYXJzZUFzc2lnbm1lbnQoc3RhdGUpKTsgLy8gcGFyc2UgYSBsaXN0IHdpdGggcGFyYW1ldGVyc1xuXG4gICAgICAgICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnLCcpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgICAgICAgcGFyYW1zLnB1c2gocGFyc2VBc3NpZ25tZW50KHN0YXRlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnXScpIHtcbiAgICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1BhcmVudGhlc2lzIF0gZXhwZWN0ZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNsb3NlUGFyYW1zKHN0YXRlKTtcbiAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgICBub2RlID0gbmV3IEFjY2Vzc29yTm9kZShub2RlLCBuZXcgSW5kZXhOb2RlKHBhcmFtcykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZG90IG5vdGF0aW9uIGxpa2UgdmFyaWFibGUucHJvcFxuICAgICAgICBnZXRUb2tlbihzdGF0ZSk7XG5cbiAgICAgICAgaWYgKHN0YXRlLnRva2VuVHlwZSAhPT0gVE9LRU5UWVBFLlNZTUJPTCkge1xuICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnUHJvcGVydHkgbmFtZSBleHBlY3RlZCBhZnRlciBkb3QnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcmFtcy5wdXNoKG5ldyBDb25zdGFudE5vZGUoc3RhdGUudG9rZW4pKTtcbiAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgICB2YXIgZG90Tm90YXRpb24gPSB0cnVlO1xuICAgICAgICBub2RlID0gbmV3IEFjY2Vzc29yTm9kZShub2RlLCBuZXcgSW5kZXhOb2RlKHBhcmFtcywgZG90Tm90YXRpb24pKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuICAvKipcbiAgICogUGFyc2UgYSBkb3VibGUgcXVvdGVzIHN0cmluZy5cbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlRG91YmxlUXVvdGVzU3RyaW5nKHN0YXRlKSB7XG4gICAgdmFyIG5vZGUsIHN0cjtcblxuICAgIGlmIChzdGF0ZS50b2tlbiA9PT0gJ1wiJykge1xuICAgICAgc3RyID0gcGFyc2VEb3VibGVRdW90ZXNTdHJpbmdUb2tlbihzdGF0ZSk7IC8vIGNyZWF0ZSBjb25zdGFudFxuXG4gICAgICBub2RlID0gbmV3IENvbnN0YW50Tm9kZShzdHIpOyAvLyBwYXJzZSBpbmRleCBwYXJhbWV0ZXJzXG5cbiAgICAgIG5vZGUgPSBwYXJzZUFjY2Vzc29ycyhzdGF0ZSwgbm9kZSk7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VTaW5nbGVRdW90ZXNTdHJpbmcoc3RhdGUpO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIHN0cmluZyBzdXJyb3VuZGVkIGJ5IGRvdWJsZSBxdW90ZXMgXCIuLi5cIlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VEb3VibGVRdW90ZXNTdHJpbmdUb2tlbihzdGF0ZSkge1xuICAgIHZhciBzdHIgPSAnJztcblxuICAgIHdoaWxlIChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSAhPT0gJycgJiYgY3VycmVudENoYXJhY3RlcihzdGF0ZSkgIT09ICdcIicpIHtcbiAgICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyKHN0YXRlKSA9PT0gJ1xcXFwnKSB7XG4gICAgICAgIC8vIGVzY2FwZSBjaGFyYWN0ZXIsIGltbWVkaWF0ZWx5IHByb2Nlc3MgdGhlIG5leHRcbiAgICAgICAgLy8gY2hhcmFjdGVyIHRvIHByZXZlbnQgc3RvcHBpbmcgYXQgYSBuZXh0ICdcXFwiJ1xuICAgICAgICBzdHIgKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7XG4gICAgICAgIG5leHQoc3RhdGUpO1xuICAgICAgfVxuXG4gICAgICBzdHIgKz0gY3VycmVudENoYXJhY3RlcihzdGF0ZSk7XG4gICAgICBuZXh0KHN0YXRlKTtcbiAgICB9XG5cbiAgICBnZXRUb2tlbihzdGF0ZSk7XG5cbiAgICBpZiAoc3RhdGUudG9rZW4gIT09ICdcIicpIHtcbiAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnRW5kIG9mIHN0cmluZyBcIiBleHBlY3RlZCcpO1xuICAgIH1cblxuICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZSgnXCInICsgc3RyICsgJ1wiJyk7IC8vIHVuZXNjYXBlIGVzY2FwZWQgY2hhcmFjdGVyc1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIHNpbmdsZSBxdW90ZXMgc3RyaW5nLlxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VTaW5nbGVRdW90ZXNTdHJpbmcoc3RhdGUpIHtcbiAgICB2YXIgbm9kZSwgc3RyO1xuXG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAnXFwnJykge1xuICAgICAgc3RyID0gcGFyc2VTaW5nbGVRdW90ZXNTdHJpbmdUb2tlbihzdGF0ZSk7IC8vIGNyZWF0ZSBjb25zdGFudFxuXG4gICAgICBub2RlID0gbmV3IENvbnN0YW50Tm9kZShzdHIpOyAvLyBwYXJzZSBpbmRleCBwYXJhbWV0ZXJzXG5cbiAgICAgIG5vZGUgPSBwYXJzZUFjY2Vzc29ycyhzdGF0ZSwgbm9kZSk7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VNYXRyaXgoc3RhdGUpO1xuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIHN0cmluZyBzdXJyb3VuZGVkIGJ5IHNpbmdsZSBxdW90ZXMgJy4uLidcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlU2luZ2xlUXVvdGVzU3RyaW5nVG9rZW4oc3RhdGUpIHtcbiAgICB2YXIgc3RyID0gJyc7XG5cbiAgICB3aGlsZSAoY3VycmVudENoYXJhY3RlcihzdGF0ZSkgIT09ICcnICYmIGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpICE9PSAnXFwnJykge1xuICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpID09PSAnXFxcXCcpIHtcbiAgICAgICAgLy8gZXNjYXBlIGNoYXJhY3RlciwgaW1tZWRpYXRlbHkgcHJvY2VzcyB0aGUgbmV4dFxuICAgICAgICAvLyBjaGFyYWN0ZXIgdG8gcHJldmVudCBzdG9wcGluZyBhdCBhIG5leHQgJ1xcJydcbiAgICAgICAgc3RyICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgICAgICBuZXh0KHN0YXRlKTtcbiAgICAgIH1cblxuICAgICAgc3RyICs9IGN1cnJlbnRDaGFyYWN0ZXIoc3RhdGUpO1xuICAgICAgbmV4dChzdGF0ZSk7XG4gICAgfVxuXG4gICAgZ2V0VG9rZW4oc3RhdGUpO1xuXG4gICAgaWYgKHN0YXRlLnRva2VuICE9PSAnXFwnJykge1xuICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdFbmQgb2Ygc3RyaW5nIFxcJyBleHBlY3RlZCcpO1xuICAgIH1cblxuICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZSgnXCInICsgc3RyICsgJ1wiJyk7IC8vIHVuZXNjYXBlIGVzY2FwZWQgY2hhcmFjdGVyc1xuICB9XG4gIC8qKlxuICAgKiBwYXJzZSB0aGUgbWF0cml4XG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZU1hdHJpeChzdGF0ZSkge1xuICAgIHZhciBhcnJheSwgcGFyYW1zLCByb3dzLCBjb2xzO1xuXG4gICAgaWYgKHN0YXRlLnRva2VuID09PSAnWycpIHtcbiAgICAgIC8vIG1hdHJpeCBbLi4uXVxuICAgICAgb3BlblBhcmFtcyhzdGF0ZSk7XG4gICAgICBnZXRUb2tlbihzdGF0ZSk7XG5cbiAgICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJ10nKSB7XG4gICAgICAgIC8vIHRoaXMgaXMgYSBub24tZW1wdHkgbWF0cml4XG4gICAgICAgIHZhciByb3cgPSBwYXJzZVJvdyhzdGF0ZSk7XG5cbiAgICAgICAgaWYgKHN0YXRlLnRva2VuID09PSAnOycpIHtcbiAgICAgICAgICAvLyAyIGRpbWVuc2lvbmFsIGFycmF5XG4gICAgICAgICAgcm93cyA9IDE7XG4gICAgICAgICAgcGFyYW1zID0gW3Jvd107IC8vIHRoZSByb3dzIG9mIHRoZSBtYXRyaXggYXJlIHNlcGFyYXRlZCBieSBkb3QtY29tbWEnc1xuXG4gICAgICAgICAgd2hpbGUgKHN0YXRlLnRva2VuID09PSAnOycpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5tb2RpZmllZC1sb29wLWNvbmRpdGlvblxuICAgICAgICAgICAgZ2V0VG9rZW4oc3RhdGUpO1xuICAgICAgICAgICAgcGFyYW1zW3Jvd3NdID0gcGFyc2VSb3coc3RhdGUpO1xuICAgICAgICAgICAgcm93cysrO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdGF0ZS50b2tlbiAhPT0gJ10nKSB7XG4gICAgICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ0VuZCBvZiBtYXRyaXggXSBleHBlY3RlZCcpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNsb3NlUGFyYW1zKHN0YXRlKTtcbiAgICAgICAgICBnZXRUb2tlbihzdGF0ZSk7IC8vIGNoZWNrIGlmIHRoZSBudW1iZXIgb2YgY29sdW1ucyBtYXRjaGVzIGluIGFsbCByb3dzXG5cbiAgICAgICAgICBjb2xzID0gcGFyYW1zWzBdLml0ZW1zLmxlbmd0aDtcblxuICAgICAgICAgIGZvciAodmFyIHIgPSAxOyByIDwgcm93czsgcisrKSB7XG4gICAgICAgICAgICBpZiAocGFyYW1zW3JdLml0ZW1zLmxlbmd0aCAhPT0gY29scykge1xuICAgICAgICAgICAgICB0aHJvdyBjcmVhdGVFcnJvcihzdGF0ZSwgJ0NvbHVtbiBkaW1lbnNpb25zIG1pc21hdGNoICcgKyAnKCcgKyBwYXJhbXNbcl0uaXRlbXMubGVuZ3RoICsgJyAhPT0gJyArIGNvbHMgKyAnKScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGFycmF5ID0gbmV3IEFycmF5Tm9kZShwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIDEgZGltZW5zaW9uYWwgdmVjdG9yXG4gICAgICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnXScpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnRW5kIG9mIG1hdHJpeCBdIGV4cGVjdGVkJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY2xvc2VQYXJhbXMoc3RhdGUpO1xuICAgICAgICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICAgICAgICBhcnJheSA9IHJvdztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhpcyBpcyBhbiBlbXB0eSBtYXRyaXggXCJbIF1cIlxuICAgICAgICBjbG9zZVBhcmFtcyhzdGF0ZSk7XG4gICAgICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICAgICAgYXJyYXkgPSBuZXcgQXJyYXlOb2RlKFtdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHBhcnNlQWNjZXNzb3JzKHN0YXRlLCBhcnJheSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlT2JqZWN0KHN0YXRlKTtcbiAgfVxuICAvKipcbiAgICogUGFyc2UgYSBzaW5nbGUgY29tbWEtc2VwYXJhdGVkIHJvdyBmcm9tIGEgbWF0cml4LCBsaWtlICdhLCBiLCBjJ1xuICAgKiBAcmV0dXJuIHtBcnJheU5vZGV9IG5vZGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZVJvdyhzdGF0ZSkge1xuICAgIHZhciBwYXJhbXMgPSBbcGFyc2VBc3NpZ25tZW50KHN0YXRlKV07XG4gICAgdmFyIGxlbiA9IDE7XG5cbiAgICB3aGlsZSAoc3RhdGUudG9rZW4gPT09ICcsJykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uXG4gICAgICBnZXRUb2tlbihzdGF0ZSk7IC8vIHBhcnNlIGV4cHJlc3Npb25cblxuICAgICAgcGFyYW1zW2xlbl0gPSBwYXJzZUFzc2lnbm1lbnQoc3RhdGUpO1xuICAgICAgbGVuKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBBcnJheU5vZGUocGFyYW1zKTtcbiAgfVxuICAvKipcbiAgICogcGFyc2UgYW4gb2JqZWN0LCBlbmNsb3NlZCBpbiBhbmdsZSBicmFja2V0c3suLi59LCBmb3IgZXhhbXBsZSB7dmFsdWU6IDJ9XG4gICAqIEByZXR1cm4ge05vZGV9IG5vZGVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZU9iamVjdChzdGF0ZSkge1xuICAgIGlmIChzdGF0ZS50b2tlbiA9PT0gJ3snKSB7XG4gICAgICBvcGVuUGFyYW1zKHN0YXRlKTtcbiAgICAgIHZhciBrZXk7XG4gICAgICB2YXIgcHJvcGVydGllcyA9IHt9O1xuXG4gICAgICBkbyB7XG4gICAgICAgIGdldFRva2VuKHN0YXRlKTtcblxuICAgICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICd9Jykge1xuICAgICAgICAgIC8vIHBhcnNlIGtleVxuICAgICAgICAgIGlmIChzdGF0ZS50b2tlbiA9PT0gJ1wiJykge1xuICAgICAgICAgICAga2V5ID0gcGFyc2VEb3VibGVRdW90ZXNTdHJpbmdUb2tlbihzdGF0ZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZS50b2tlbiA9PT0gJ1xcJycpIHtcbiAgICAgICAgICAgIGtleSA9IHBhcnNlU2luZ2xlUXVvdGVzU3RyaW5nVG9rZW4oc3RhdGUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUudG9rZW5UeXBlID09PSBUT0tFTlRZUEUuU1lNQk9MIHx8IHN0YXRlLnRva2VuVHlwZSA9PT0gVE9LRU5UWVBFLkRFTElNSVRFUiAmJiBzdGF0ZS50b2tlbiBpbiBOQU1FRF9ERUxJTUlURVJTKSB7XG4gICAgICAgICAgICBrZXkgPSBzdGF0ZS50b2tlbjtcbiAgICAgICAgICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdTeW1ib2wgb3Igc3RyaW5nIGV4cGVjdGVkIGFzIG9iamVjdCBrZXknKTtcbiAgICAgICAgICB9IC8vIHBhcnNlIGtleS92YWx1ZSBzZXBhcmF0b3JcblxuXG4gICAgICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnOicpIHtcbiAgICAgICAgICAgIHRocm93IGNyZWF0ZVN5bnRheEVycm9yKHN0YXRlLCAnQ29sb24gOiBleHBlY3RlZCBhZnRlciBvYmplY3Qga2V5Jyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZ2V0VG9rZW4oc3RhdGUpOyAvLyBwYXJzZSBrZXlcblxuICAgICAgICAgIHByb3BlcnRpZXNba2V5XSA9IHBhcnNlQXNzaWdubWVudChzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gd2hpbGUgKHN0YXRlLnRva2VuID09PSAnLCcpOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cblxuXG4gICAgICBpZiAoc3RhdGUudG9rZW4gIT09ICd9Jykge1xuICAgICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ0NvbW1hICwgb3IgYnJhY2tldCB9IGV4cGVjdGVkIGFmdGVyIG9iamVjdCB2YWx1ZScpO1xuICAgICAgfVxuXG4gICAgICBjbG9zZVBhcmFtcyhzdGF0ZSk7XG4gICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICB2YXIgbm9kZSA9IG5ldyBPYmplY3ROb2RlKHByb3BlcnRpZXMpOyAvLyBwYXJzZSBpbmRleCBwYXJhbWV0ZXJzXG5cbiAgICAgIG5vZGUgPSBwYXJzZUFjY2Vzc29ycyhzdGF0ZSwgbm9kZSk7XG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VOdW1iZXIoc3RhdGUpO1xuICB9XG4gIC8qKlxuICAgKiBwYXJzZSBhIG51bWJlclxuICAgKiBAcmV0dXJuIHtOb2RlfSBub2RlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcGFyc2VOdW1iZXIoc3RhdGUpIHtcbiAgICB2YXIgbnVtYmVyU3RyO1xuXG4gICAgaWYgKHN0YXRlLnRva2VuVHlwZSA9PT0gVE9LRU5UWVBFLk5VTUJFUikge1xuICAgICAgLy8gdGhpcyBpcyBhIG51bWJlclxuICAgICAgbnVtYmVyU3RyID0gc3RhdGUudG9rZW47XG4gICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShudW1lcmljKG51bWJlclN0ciwgY29uZmlnLm51bWJlcikpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZVBhcmVudGhlc2VzKHN0YXRlKTtcbiAgfVxuICAvKipcbiAgICogcGFyZW50aGVzZXNcbiAgICogQHJldHVybiB7Tm9kZX0gbm9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHBhcnNlUGFyZW50aGVzZXMoc3RhdGUpIHtcbiAgICB2YXIgbm9kZTsgLy8gY2hlY2sgaWYgaXQgaXMgYSBwYXJlbnRoZXNpemVkIGV4cHJlc3Npb25cblxuICAgIGlmIChzdGF0ZS50b2tlbiA9PT0gJygnKSB7XG4gICAgICAvLyBwYXJlbnRoZXNlcyAoLi4uKVxuICAgICAgb3BlblBhcmFtcyhzdGF0ZSk7XG4gICAgICBnZXRUb2tlbihzdGF0ZSk7XG4gICAgICBub2RlID0gcGFyc2VBc3NpZ25tZW50KHN0YXRlKTsgLy8gc3RhcnQgYWdhaW5cblxuICAgICAgaWYgKHN0YXRlLnRva2VuICE9PSAnKScpIHtcbiAgICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdQYXJlbnRoZXNpcyApIGV4cGVjdGVkJyk7XG4gICAgICB9XG5cbiAgICAgIGNsb3NlUGFyYW1zKHN0YXRlKTtcbiAgICAgIGdldFRva2VuKHN0YXRlKTtcbiAgICAgIG5vZGUgPSBuZXcgUGFyZW50aGVzaXNOb2RlKG5vZGUpO1xuICAgICAgbm9kZSA9IHBhcnNlQWNjZXNzb3JzKHN0YXRlLCBub2RlKTtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZUVuZChzdGF0ZSk7XG4gIH1cbiAgLyoqXG4gICAqIEV2YWx1YXRlZCB3aGVuIHRoZSBleHByZXNzaW9uIGlzIG5vdCB5ZXQgZW5kZWQgYnV0IGV4cGVjdGVkIHRvIGVuZFxuICAgKiBAcmV0dXJuIHtOb2RlfSByZXNcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBwYXJzZUVuZChzdGF0ZSkge1xuICAgIGlmIChzdGF0ZS50b2tlbiA9PT0gJycpIHtcbiAgICAgIC8vIHN5bnRheCBlcnJvciBvciB1bmV4cGVjdGVkIGVuZCBvZiBleHByZXNzaW9uXG4gICAgICB0aHJvdyBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgJ1VuZXhwZWN0ZWQgZW5kIG9mIGV4cHJlc3Npb24nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgY3JlYXRlU3ludGF4RXJyb3Ioc3RhdGUsICdWYWx1ZSBleHBlY3RlZCcpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogU2hvcnRjdXQgZm9yIGdldHRpbmcgdGhlIGN1cnJlbnQgcm93IHZhbHVlIChvbmUgYmFzZWQpXG4gICAqIFJldHVybnMgdGhlIGxpbmUgb2YgdGhlIGN1cnJlbnRseSBoYW5kbGVkIGV4cHJlc3Npb25cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgLyogVE9ETzogaW1wbGVtZW50IGtlZXBpbmcgdHJhY2sgb24gdGhlIHJvdyBudW1iZXJcbiAgZnVuY3Rpb24gcm93ICgpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gICovXG5cbiAgLyoqXG4gICAqIFNob3J0Y3V0IGZvciBnZXR0aW5nIHRoZSBjdXJyZW50IGNvbCB2YWx1ZSAob25lIGJhc2VkKVxuICAgKiBSZXR1cm5zIHRoZSBjb2x1bW4gKHBvc2l0aW9uKSB3aGVyZSB0aGUgbGFzdCBzdGF0ZS50b2tlbiBzdGFydHNcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBjb2woc3RhdGUpIHtcbiAgICByZXR1cm4gc3RhdGUuaW5kZXggLSBzdGF0ZS50b2tlbi5sZW5ndGggKyAxO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gZXJyb3JcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gICAqIEByZXR1cm4ge1N5bnRheEVycm9yfSBpbnN0YW50aWF0ZWQgZXJyb3JcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBjcmVhdGVTeW50YXhFcnJvcihzdGF0ZSwgbWVzc2FnZSkge1xuICAgIHZhciBjID0gY29sKHN0YXRlKTtcbiAgICB2YXIgZXJyb3IgPSBuZXcgU3ludGF4RXJyb3IobWVzc2FnZSArICcgKGNoYXIgJyArIGMgKyAnKScpO1xuICAgIGVycm9yW1wiY2hhclwiXSA9IGM7XG4gICAgcmV0dXJuIGVycm9yO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gZXJyb3JcbiAgICogQHBhcmFtIHtPYmplY3R9IHN0YXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlXG4gICAqIEByZXR1cm4ge0Vycm9yfSBpbnN0YW50aWF0ZWQgZXJyb3JcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBjcmVhdGVFcnJvcihzdGF0ZSwgbWVzc2FnZSkge1xuICAgIHZhciBjID0gY29sKHN0YXRlKTtcbiAgICB2YXIgZXJyb3IgPSBuZXcgU3ludGF4RXJyb3IobWVzc2FnZSArICcgKGNoYXIgJyArIGMgKyAnKScpO1xuICAgIGVycm9yW1wiY2hhclwiXSA9IGM7XG4gICAgcmV0dXJuIGVycm9yO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlO1xufSk7XG5leHBvcnRzLmNyZWF0ZVBhcnNlID0gY3JlYXRlUGFyc2U7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFwcGx5VHJhbnNmb3JtID0gdm9pZCAwO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FwcGx5ID0gcmVxdWlyZShcIi4uLy4uL2Z1bmN0aW9uL21hdHJpeC9hcHBseVwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIG5hbWUgPSAnYXBwbHknO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnaXNJbnRlZ2VyJ107XG4vKipcbiAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLmFwcGx5XG4gKiBBZGRzIGEgcHJvcGVydHkgdHJhbnNmb3JtIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbi5cbiAqXG4gKiBUaGlzIHRyYW5zZm9ybSBjaGFuZ2VkIHRoZSBsYXN0IGBkaW1gIHBhcmFtZXRlciBvZiBmdW5jdGlvbiBhcHBseVxuICogZnJvbSBvbmUtYmFzZWQgdG8gemVybyBiYXNlZFxuICovXG5cbnZhciBjcmVhdGVBcHBseVRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBpc0ludGVnZXIgPSBfcmVmLmlzSW50ZWdlcjtcbiAgdmFyIGFwcGx5ID0gKDAsIF9hcHBseS5jcmVhdGVBcHBseSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBpc0ludGVnZXI6IGlzSW50ZWdlclxuICB9KTsgLy8gQHNlZTogY29tbWVudCBvZiBjb25jYXQgaXRzZWxmXG5cbiAgcmV0dXJuIHR5cGVkKCdhcHBseScsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIC8vIGNoYW5nZSBkaW0gZnJvbSBvbmUtYmFzZWQgdG8gemVyby1iYXNlZFxuICAgICAgdmFyIGRpbSA9IGFyZ3NbMV07XG5cbiAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShkaW0pKSB7XG4gICAgICAgIGFyZ3NbMV0gPSBkaW0gLSAxO1xuICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShkaW0pKSB7XG4gICAgICAgIGFyZ3NbMV0gPSBkaW0ubWludXMoMSk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhcHBseS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2Vycm9yVHJhbnNmb3JtLmVycm9yVHJhbnNmb3JtKShlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59LCB7XG4gIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBcHBseVRyYW5zZm9ybSA9IGNyZWF0ZUFwcGx5VHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb2x1bW5UcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfZXJyb3JUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi91dGlscy9lcnJvclRyYW5zZm9ybVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sdW1uID0gcmVxdWlyZShcIi4uLy4uL2Z1bmN0aW9uL21hdHJpeC9jb2x1bW5cIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBuYW1lID0gJ2NvbHVtbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdJbmRleCcsICdtYXRyaXgnLCAncmFuZ2UnXTtcbi8qKlxuICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdHJpeC5jb2x1bW5cbiAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgdHJhbnNmb3JtIGNoYW5nZWQgdGhlIGxhc3QgYGluZGV4YCBwYXJhbWV0ZXIgb2YgZnVuY3Rpb24gY29sdW1uXG4gKiBmcm9tIHplcm8tYmFzZWQgdG8gb25lLWJhc2VkXG4gKi9cblxudmFyIGNyZWF0ZUNvbHVtblRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBJbmRleCA9IF9yZWYuSW5kZXgsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIHJhbmdlID0gX3JlZi5yYW5nZTtcbiAgdmFyIGNvbHVtbiA9ICgwLCBfY29sdW1uLmNyZWF0ZUNvbHVtbikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBJbmRleDogSW5kZXgsXG4gICAgbWF0cml4OiBtYXRyaXgsXG4gICAgcmFuZ2U6IHJhbmdlXG4gIH0pOyAvLyBAc2VlOiBjb21tZW50IG9mIGNvbHVtbiBpdHNlbGZcblxuICByZXR1cm4gdHlwZWQoJ2NvbHVtbicsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIC8vIGNoYW5nZSBsYXN0IGFyZ3VtZW50IGZyb20gemVyby1iYXNlZCB0byBvbmUtYmFzZWRcbiAgICAgIHZhciBsYXN0SW5kZXggPSBhcmdzLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgbGFzdCA9IGFyZ3NbbGFzdEluZGV4XTtcblxuICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGxhc3QpKSB7XG4gICAgICAgIGFyZ3NbbGFzdEluZGV4XSA9IGxhc3QgLSAxO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gY29sdW1uLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbHVtblRyYW5zZm9ybSA9IGNyZWF0ZUNvbHVtblRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29uY2F0VHJhbnNmb3JtID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbmNhdCA9IHJlcXVpcmUoXCIuLi8uLi9mdW5jdGlvbi9tYXRyaXgvY29uY2F0XCIpO1xuXG52YXIgbmFtZSA9ICdjb25jYXQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2lzSW50ZWdlciddO1xudmFyIGNyZWF0ZUNvbmNhdFRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGlzSW50ZWdlciA9IF9yZWYuaXNJbnRlZ2VyO1xuICB2YXIgY29uY2F0ID0gKDAsIF9jb25jYXQuY3JlYXRlQ29uY2F0KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIG1hdHJpeDogbWF0cml4LFxuICAgIGlzSW50ZWdlcjogaXNJbnRlZ2VyXG4gIH0pO1xuICAvKipcbiAgICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGgucmFuZ2VcbiAgICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gICAqXG4gICAqIFRoaXMgdHJhbnNmb3JtIGNoYW5nZWQgdGhlIGxhc3QgYGRpbWAgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uIGNvbmNhdFxuICAgKiBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvIGJhc2VkXG4gICAqL1xuXG4gIHJldHVybiB0eXBlZCgnY29uY2F0Jywge1xuICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykge1xuICAgICAgLy8gY2hhbmdlIGxhc3QgYXJndW1lbnQgZnJvbSBvbmUtYmFzZWQgdG8gemVyby1iYXNlZFxuICAgICAgdmFyIGxhc3RJbmRleCA9IGFyZ3MubGVuZ3RoIC0gMTtcbiAgICAgIHZhciBsYXN0ID0gYXJnc1tsYXN0SW5kZXhdO1xuXG4gICAgICBpZiAoKDAsIF9pcy5pc051bWJlcikobGFzdCkpIHtcbiAgICAgICAgYXJnc1tsYXN0SW5kZXhdID0gbGFzdCAtIDE7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGxhc3QpKSB7XG4gICAgICAgIGFyZ3NbbGFzdEluZGV4XSA9IGxhc3QubWludXMoMSk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBjb25jYXQuYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9lcnJvclRyYW5zZm9ybS5lcnJvclRyYW5zZm9ybSkoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufSwge1xuICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29uY2F0VHJhbnNmb3JtID0gY3JlYXRlQ29uY2F0VHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVGaWx0ZXJUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZnVuY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZnVuY3Rpb25cIik7XG5cbnZhciBfY29tcGlsZUlubGluZUV4cHJlc3Npb24gPSByZXF1aXJlKFwiLi91dGlscy9jb21waWxlSW5saW5lRXhwcmVzc2lvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2ZpbHRlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUZpbHRlclRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLmZpbHRlclxuICAgKiBBZGRzIGEgcHJvcGVydHkgdHJhbnNmb3JtIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbi5cbiAgICpcbiAgICogVGhpcyB0cmFuc2Zvcm0gYWRkcyBzdXBwb3J0IGZvciBlcXVhdGlvbnMgYXMgdGVzdCBmdW5jdGlvbiBmb3IgbWF0aC5maWx0ZXIsXG4gICAqIHNvIHlvdSBjYW4gZG8gc29tZXRoaW5nIGxpa2UgJ2ZpbHRlcihbMywgLTIsIDVdLCB4ID4gMCknLlxuICAgKi9cbiAgZnVuY3Rpb24gZmlsdGVyVHJhbnNmb3JtKGFyZ3MsIG1hdGgsIHNjb3BlKSB7XG4gICAgdmFyIHgsIGNhbGxiYWNrO1xuXG4gICAgaWYgKGFyZ3NbMF0pIHtcbiAgICAgIHggPSBhcmdzWzBdLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7XG4gICAgfVxuXG4gICAgaWYgKGFyZ3NbMV0pIHtcbiAgICAgIGlmICgoMCwgX2lzLmlzU3ltYm9sTm9kZSkoYXJnc1sxXSkgfHwgKDAsIF9pcy5pc0Z1bmN0aW9uQXNzaWdubWVudE5vZGUpKGFyZ3NbMV0pKSB7XG4gICAgICAgIC8vIGEgZnVuY3Rpb24gcG9pbnRlciwgbGlrZSBmaWx0ZXIoWzMsIC0yLCA1XSwgbXlUZXN0RnVuY3Rpb24pXG4gICAgICAgIGNhbGxiYWNrID0gYXJnc1sxXS5jb21waWxlKCkuZXZhbHVhdGUoc2NvcGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYW4gZXhwcmVzc2lvbiBsaWtlIGZpbHRlcihbMywgLTIsIDVdLCB4ID4gMClcbiAgICAgICAgY2FsbGJhY2sgPSAoMCwgX2NvbXBpbGVJbmxpbmVFeHByZXNzaW9uLmNvbXBpbGVJbmxpbmVFeHByZXNzaW9uKShhcmdzWzFdLCBtYXRoLCBzY29wZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbHRlcih4LCBjYWxsYmFjayk7XG4gIH1cblxuICBmaWx0ZXJUcmFuc2Zvcm0ucmF3QXJncyA9IHRydWU7IC8vIG9uZSBiYXNlZCB2ZXJzaW9uIG9mIGZ1bmN0aW9uIGZpbHRlclxuXG4gIHZhciBmaWx0ZXIgPSB0eXBlZCgnZmlsdGVyJywge1xuICAgICdBcnJheSwgZnVuY3Rpb24nOiBfZmlsdGVyLFxuICAgICdNYXRyaXgsIGZ1bmN0aW9uJzogZnVuY3Rpb24gTWF0cml4RnVuY3Rpb24oeCwgdGVzdCkge1xuICAgICAgcmV0dXJuIHguY3JlYXRlKF9maWx0ZXIoeC50b0FycmF5KCksIHRlc3QpKTtcbiAgICB9LFxuICAgICdBcnJheSwgUmVnRXhwJzogX2FycmF5LmZpbHRlclJlZ0V4cCxcbiAgICAnTWF0cml4LCBSZWdFeHAnOiBmdW5jdGlvbiBNYXRyaXhSZWdFeHAoeCwgdGVzdCkge1xuICAgICAgcmV0dXJuIHguY3JlYXRlKCgwLCBfYXJyYXkuZmlsdGVyUmVnRXhwKSh4LnRvQXJyYXkoKSwgdGVzdCkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBmaWx0ZXJUcmFuc2Zvcm07XG59LCB7XG4gIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWVcbn0pO1xuLyoqXG4gKiBGaWx0ZXIgdmFsdWVzIGluIGEgY2FsbGJhY2sgZ2l2ZW4gYSBjYWxsYmFjayBmdW5jdGlvblxuICpcbiAqICEhISBQYXNzZXMgYSBvbmUtYmFzZWQgaW5kZXggISEhXG4gKlxuICogQHBhcmFtIHtBcnJheX0geFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge0FycmF5fSBSZXR1cm5zIHRoZSBmaWx0ZXJlZCBhcnJheVxuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZUZpbHRlclRyYW5zZm9ybSA9IGNyZWF0ZUZpbHRlclRyYW5zZm9ybTtcblxuZnVuY3Rpb24gX2ZpbHRlcih4LCBjYWxsYmFjaykge1xuICAvLyBmaWd1cmUgb3V0IHdoYXQgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZXhwZWN0c1xuICB2YXIgYXJncyA9ICgwLCBfZnVuY3Rpb24ubWF4QXJndW1lbnRDb3VudCkoY2FsbGJhY2spO1xuICByZXR1cm4gKDAsIF9hcnJheS5maWx0ZXIpKHgsIGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XG4gICAgLy8gaW52b2tlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIHRoZSByaWdodCBudW1iZXIgb2YgYXJndW1lbnRzXG4gICAgaWYgKGFyZ3MgPT09IDEpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayh2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChhcmdzID09PSAyKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIFtpbmRleCArIDFdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMyBvciAtMVxuICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlLCBbaW5kZXggKyAxXSwgYXJyYXkpO1xuICAgIH1cbiAgfSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZvckVhY2hUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZnVuY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZnVuY3Rpb25cIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbXBpbGVJbmxpbmVFeHByZXNzaW9uID0gcmVxdWlyZShcIi4vdXRpbHMvY29tcGlsZUlubGluZUV4cHJlc3Npb25cIik7XG5cbnZhciBuYW1lID0gJ2ZvckVhY2gnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVGb3JFYWNoVHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGguZm9yRWFjaFxuICAgKiBBZGRzIGEgcHJvcGVydHkgdHJhbnNmb3JtIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbi5cbiAgICpcbiAgICogVGhpcyB0cmFuc2Zvcm0gY3JlYXRlcyBhIG9uZS1iYXNlZCBpbmRleCBpbnN0ZWFkIG9mIGEgemVyby1iYXNlZCBpbmRleFxuICAgKi9cbiAgZnVuY3Rpb24gZm9yRWFjaFRyYW5zZm9ybShhcmdzLCBtYXRoLCBzY29wZSkge1xuICAgIHZhciB4LCBjYWxsYmFjaztcblxuICAgIGlmIChhcmdzWzBdKSB7XG4gICAgICB4ID0gYXJnc1swXS5jb21waWxlKCkuZXZhbHVhdGUoc2NvcGUpO1xuICAgIH1cblxuICAgIGlmIChhcmdzWzFdKSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc1N5bWJvbE5vZGUpKGFyZ3NbMV0pIHx8ICgwLCBfaXMuaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlKShhcmdzWzFdKSkge1xuICAgICAgICAvLyBhIGZ1bmN0aW9uIHBvaW50ZXIsIGxpa2UgZm9yRWFjaChbMywgLTIsIDVdLCBteVRlc3RGdW5jdGlvbilcbiAgICAgICAgY2FsbGJhY2sgPSBhcmdzWzFdLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhbiBleHByZXNzaW9uIGxpa2UgZm9yRWFjaChbMywgLTIsIDVdLCB4ID4gMCA/IGNhbGxiYWNrMSh4KSA6IGNhbGxiYWNrMih4KSApXG4gICAgICAgIGNhbGxiYWNrID0gKDAsIF9jb21waWxlSW5saW5lRXhwcmVzc2lvbi5jb21waWxlSW5saW5lRXhwcmVzc2lvbikoYXJnc1sxXSwgbWF0aCwgc2NvcGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBfZm9yRWFjaCh4LCBjYWxsYmFjayk7XG4gIH1cblxuICBmb3JFYWNoVHJhbnNmb3JtLnJhd0FyZ3MgPSB0cnVlOyAvLyBvbmUtYmFzZWQgdmVyc2lvbiBvZiBmb3JFYWNoXG5cbiAgdmFyIF9mb3JFYWNoID0gdHlwZWQoJ2ZvckVhY2gnLCB7XG4gICAgJ0FycmF5IHwgTWF0cml4LCBmdW5jdGlvbic6IGZ1bmN0aW9uIEFycmF5TWF0cml4RnVuY3Rpb24oYXJyYXksIGNhbGxiYWNrKSB7XG4gICAgICAvLyBmaWd1cmUgb3V0IHdoYXQgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZXhwZWN0c1xuICAgICAgdmFyIGFyZ3MgPSAoMCwgX2Z1bmN0aW9uLm1heEFyZ3VtZW50Q291bnQpKGNhbGxiYWNrKTtcblxuICAgICAgdmFyIHJlY3Vyc2UgPSBmdW5jdGlvbiByZWN1cnNlKHZhbHVlLCBpbmRleCkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAoMCwgX2FycmF5LmZvckVhY2gpKHZhbHVlLCBmdW5jdGlvbiAoY2hpbGQsIGkpIHtcbiAgICAgICAgICAgIC8vIHdlIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGluZGV4IGFycmF5IGFuZCBhcHBlbmQgdGhlIG5ldyBpbmRleCB2YWx1ZVxuICAgICAgICAgICAgcmVjdXJzZShjaGlsZCwgaW5kZXguY29uY2F0KGkgKyAxKSk7IC8vIG9uZSBiYXNlZCBpbmRleCwgaGVuY2UgaSsxXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gaW52b2tlIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIHRoZSByaWdodCBudW1iZXIgb2YgYXJndW1lbnRzXG4gICAgICAgICAgaWYgKGFyZ3MgPT09IDEpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKHZhbHVlKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGFyZ3MgPT09IDIpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKHZhbHVlLCBpbmRleCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIDMgb3IgLTFcbiAgICAgICAgICAgIGNhbGxiYWNrKHZhbHVlLCBpbmRleCwgYXJyYXkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgcmVjdXJzZShhcnJheS52YWx1ZU9mKCksIFtdKTsgLy8gcGFzcyBBcnJheVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGZvckVhY2hUcmFuc2Zvcm07XG59LCB7XG4gIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVGb3JFYWNoVHJhbnNmb3JtID0gY3JlYXRlRm9yRWFjaFRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSW5kZXhUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdpbmRleCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydJbmRleCddO1xudmFyIGNyZWF0ZUluZGV4VHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIEluZGV4ID0gX3JlZi5JbmRleDtcblxuICAvKipcbiAgICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGguaW5kZXhcbiAgICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gICAqXG4gICAqIFRoaXMgdHJhbnNmb3JtIGNyZWF0ZXMgYSBvbmUtYmFzZWQgaW5kZXggaW5zdGVhZCBvZiBhIHplcm8tYmFzZWQgaW5kZXhcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBpbmRleFRyYW5zZm9ybSgpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHZhciBhcmcgPSBhcmd1bWVudHNbaV07IC8vIGNoYW5nZSBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvIGJhc2VkLCBhbmQgY29udmVydCBCaWdOdW1iZXIgdG8gbnVtYmVyXG5cbiAgICAgIGlmICgoMCwgX2lzLmlzUmFuZ2UpKGFyZykpIHtcbiAgICAgICAgYXJnLnN0YXJ0LS07XG4gICAgICAgIGFyZy5lbmQgLT0gYXJnLnN0ZXAgPiAwID8gMCA6IDI7XG4gICAgICB9IGVsc2UgaWYgKGFyZyAmJiBhcmcuaXNTZXQgPT09IHRydWUpIHtcbiAgICAgICAgYXJnID0gYXJnLm1hcChmdW5jdGlvbiAodikge1xuICAgICAgICAgIHJldHVybiB2IC0gMTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNBcnJheSkoYXJnKSB8fCAoMCwgX2lzLmlzTWF0cml4KShhcmcpKSB7XG4gICAgICAgIGFyZyA9IGFyZy5tYXAoZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgICByZXR1cm4gdiAtIDE7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzTnVtYmVyKShhcmcpKSB7XG4gICAgICAgIGFyZy0tO1xuICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShhcmcpKSB7XG4gICAgICAgIGFyZyA9IGFyZy50b051bWJlcigpIC0gMTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycpIHsvLyBsZWF2ZSBhcyBpc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRGltZW5zaW9uIG11c3QgYmUgYW4gQXJyYXksIE1hdHJpeCwgbnVtYmVyLCBzdHJpbmcsIG9yIFJhbmdlJyk7XG4gICAgICB9XG5cbiAgICAgIGFyZ3NbaV0gPSBhcmc7XG4gICAgfVxuXG4gICAgdmFyIHJlcyA9IG5ldyBJbmRleCgpO1xuICAgIEluZGV4LmFwcGx5KHJlcywgYXJncyk7XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUluZGV4VHJhbnNmb3JtID0gY3JlYXRlSW5kZXhUcmFuc2Zvcm07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1hcFRyYW5zZm9ybSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mdW5jdGlvblwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29tcGlsZUlubGluZUV4cHJlc3Npb24gPSByZXF1aXJlKFwiLi91dGlscy9jb21waWxlSW5saW5lRXhwcmVzc2lvblwiKTtcblxudmFyIG5hbWUgPSAnbWFwJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlTWFwVHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGgubWFwXG4gICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHRyYW5zZm9ybSBjcmVhdGVzIGEgb25lLWJhc2VkIGluZGV4IGluc3RlYWQgb2YgYSB6ZXJvLWJhc2VkIGluZGV4XG4gICAqL1xuICBmdW5jdGlvbiBtYXBUcmFuc2Zvcm0oYXJncywgbWF0aCwgc2NvcGUpIHtcbiAgICB2YXIgeCwgY2FsbGJhY2s7XG5cbiAgICBpZiAoYXJnc1swXSkge1xuICAgICAgeCA9IGFyZ3NbMF0uY29tcGlsZSgpLmV2YWx1YXRlKHNjb3BlKTtcbiAgICB9XG5cbiAgICBpZiAoYXJnc1sxXSkge1xuICAgICAgaWYgKCgwLCBfaXMuaXNTeW1ib2xOb2RlKShhcmdzWzFdKSB8fCAoMCwgX2lzLmlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSkoYXJnc1sxXSkpIHtcbiAgICAgICAgLy8gYSBmdW5jdGlvbiBwb2ludGVyLCBsaWtlIGZpbHRlcihbMywgLTIsIDVdLCBteVRlc3RGdW5jdGlvbilcbiAgICAgICAgY2FsbGJhY2sgPSBhcmdzWzFdLmNvbXBpbGUoKS5ldmFsdWF0ZShzY29wZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBhbiBleHByZXNzaW9uIGxpa2UgZmlsdGVyKFszLCAtMiwgNV0sIHggPiAwKVxuICAgICAgICBjYWxsYmFjayA9ICgwLCBfY29tcGlsZUlubGluZUV4cHJlc3Npb24uY29tcGlsZUlubGluZUV4cHJlc3Npb24pKGFyZ3NbMV0sIG1hdGgsIHNjb3BlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWFwKHgsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIG1hcFRyYW5zZm9ybS5yYXdBcmdzID0gdHJ1ZTsgLy8gb25lLWJhc2VkIHZlcnNpb24gb2YgbWFwIGZ1bmN0aW9uXG5cbiAgdmFyIG1hcCA9IHR5cGVkKCdtYXAnLCB7XG4gICAgJ0FycmF5LCBmdW5jdGlvbic6IGZ1bmN0aW9uIEFycmF5RnVuY3Rpb24oeCwgY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiBfbWFwKHgsIGNhbGxiYWNrLCB4KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIGZ1bmN0aW9uJzogZnVuY3Rpb24gTWF0cml4RnVuY3Rpb24oeCwgY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB4LmNyZWF0ZShfbWFwKHgudmFsdWVPZigpLCBjYWxsYmFjaywgeCkpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBtYXBUcmFuc2Zvcm07XG59LCB7XG4gIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWVcbn0pO1xuLyoqXG4gKiBNYXAgZm9yIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXkuIE9uZS1iYXNlZCBpbmRleGVzXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEBwYXJhbSB7QXJyYXl9IG9yaWdcbiAqIEByZXR1cm4ge0FycmF5fVxuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZU1hcFRyYW5zZm9ybSA9IGNyZWF0ZU1hcFRyYW5zZm9ybTtcblxuZnVuY3Rpb24gX21hcChhcnJheSwgY2FsbGJhY2ssIG9yaWcpIHtcbiAgLy8gZmlndXJlIG91dCB3aGF0IG51bWJlciBvZiBhcmd1bWVudHMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGV4cGVjdHNcbiAgdmFyIGFyZ3NDb3VudCA9ICgwLCBfZnVuY3Rpb24ubWF4QXJndW1lbnRDb3VudCkoY2FsbGJhY2spO1xuXG4gIGZ1bmN0aW9uIHJlY3Vyc2UodmFsdWUsIGluZGV4KSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gKDAsIF9hcnJheS5tYXApKHZhbHVlLCBmdW5jdGlvbiAoY2hpbGQsIGkpIHtcbiAgICAgICAgLy8gd2UgY3JlYXRlIGEgY29weSBvZiB0aGUgaW5kZXggYXJyYXkgYW5kIGFwcGVuZCB0aGUgbmV3IGluZGV4IHZhbHVlXG4gICAgICAgIHJldHVybiByZWN1cnNlKGNoaWxkLCBpbmRleC5jb25jYXQoaSArIDEpKTsgLy8gb25lIGJhc2VkIGluZGV4LCBoZW5jZSBpICsgMVxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGludm9rZSB0aGUgKHR5cGVkKSBjYWxsYmFjayBmdW5jdGlvbiB3aXRoIHRoZSByaWdodCBudW1iZXIgb2YgYXJndW1lbnRzXG4gICAgICBpZiAoYXJnc0NvdW50ID09PSAxKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKGFyZ3NDb3VudCA9PT0gMikge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIGluZGV4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDMgb3IgLTFcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlLCBpbmRleCwgb3JpZyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlY3Vyc2UoYXJyYXksIFtdKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTWF4VHJhbnNmb3JtID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9lcnJvclRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL3V0aWxzL2Vycm9yVHJhbnNmb3JtXCIpO1xuXG52YXIgX21heCA9IHJlcXVpcmUoXCIuLi8uLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21heFwiKTtcblxudmFyIG5hbWUgPSAnbWF4JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2xhcmdlciddO1xudmFyIGNyZWF0ZU1heFRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBsYXJnZXIgPSBfcmVmLmxhcmdlcjtcbiAgdmFyIG1heCA9ICgwLCBfbWF4LmNyZWF0ZU1heCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBsYXJnZXI6IGxhcmdlclxuICB9KTtcbiAgLyoqXG4gICAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLm1heFxuICAgKiBBZGRzIGEgcHJvcGVydHkgdHJhbnNmb3JtIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbi5cbiAgICpcbiAgICogVGhpcyB0cmFuc2Zvcm0gY2hhbmdlZCB0aGUgbGFzdCBgZGltYCBwYXJhbWV0ZXIgb2YgZnVuY3Rpb24gbWF4XG4gICAqIGZyb20gb25lLWJhc2VkIHRvIHplcm8gYmFzZWRcbiAgICovXG5cbiAgcmV0dXJuIHR5cGVkKCdtYXgnLCB7XG4gICAgJy4uLmFueSc6IGZ1bmN0aW9uIGFueShhcmdzKSB7XG4gICAgICAvLyBjaGFuZ2UgbGFzdCBhcmd1bWVudCBkaW0gZnJvbSBvbmUtYmFzZWQgdG8gemVyby1iYXNlZFxuICAgICAgaWYgKGFyZ3MubGVuZ3RoID09PSAyICYmICgwLCBfaXMuaXNDb2xsZWN0aW9uKShhcmdzWzBdKSkge1xuICAgICAgICB2YXIgZGltID0gYXJnc1sxXTtcblxuICAgICAgICBpZiAoKDAsIF9pcy5pc051bWJlcikoZGltKSkge1xuICAgICAgICAgIGFyZ3NbMV0gPSBkaW0gLSAxO1xuICAgICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgICBhcmdzWzFdID0gZGltLm1pbnVzKDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBtYXguYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9lcnJvclRyYW5zZm9ybS5lcnJvclRyYW5zZm9ybSkoZXJyKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufSwge1xuICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTWF4VHJhbnNmb3JtID0gY3JlYXRlTWF4VHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNZWFuVHJhbnNmb3JtID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9lcnJvclRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL3V0aWxzL2Vycm9yVHJhbnNmb3JtXCIpO1xuXG52YXIgX21lYW4gPSByZXF1aXJlKFwiLi4vLi4vZnVuY3Rpb24vc3RhdGlzdGljcy9tZWFuXCIpO1xuXG52YXIgbmFtZSA9ICdtZWFuJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZCcsICdkaXZpZGUnXTtcbnZhciBjcmVhdGVNZWFuVHJhbnNmb3JtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgZGl2aWRlID0gX3JlZi5kaXZpZGU7XG4gIHZhciBtZWFuID0gKDAsIF9tZWFuLmNyZWF0ZU1lYW4pKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgYWRkOiBhZGQsXG4gICAgZGl2aWRlOiBkaXZpZGVcbiAgfSk7XG4gIC8qKlxuICAgKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5tZWFuXG4gICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHRyYW5zZm9ybSBjaGFuZ2VkIHRoZSBsYXN0IGBkaW1gIHBhcmFtZXRlciBvZiBmdW5jdGlvbiBtZWFuXG4gICAqIGZyb20gb25lLWJhc2VkIHRvIHplcm8gYmFzZWRcbiAgICovXG5cbiAgcmV0dXJuIHR5cGVkKCdtZWFuJywge1xuICAgICcuLi5hbnknOiBmdW5jdGlvbiBhbnkoYXJncykge1xuICAgICAgLy8gY2hhbmdlIGxhc3QgYXJndW1lbnQgZGltIGZyb20gb25lLWJhc2VkIHRvIHplcm8tYmFzZWRcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMiAmJiAoMCwgX2lzLmlzQ29sbGVjdGlvbikoYXJnc1swXSkpIHtcbiAgICAgICAgdmFyIGRpbSA9IGFyZ3NbMV07XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKGRpbSkpIHtcbiAgICAgICAgICBhcmdzWzFdID0gZGltIC0gMTtcbiAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbS5taW51cygxKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gbWVhbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2Vycm9yVHJhbnNmb3JtLmVycm9yVHJhbnNmb3JtKShlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59LCB7XG4gIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNZWFuVHJhbnNmb3JtID0gY3JlYXRlTWVhblRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTWluVHJhbnNmb3JtID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9lcnJvclRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL3V0aWxzL2Vycm9yVHJhbnNmb3JtXCIpO1xuXG52YXIgX21pbiA9IHJlcXVpcmUoXCIuLi8uLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21pblwiKTtcblxudmFyIG5hbWUgPSAnbWluJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NtYWxsZXInXTtcbnZhciBjcmVhdGVNaW5UcmFuc2Zvcm0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgc21hbGxlciA9IF9yZWYuc21hbGxlcjtcbiAgdmFyIG1pbiA9ICgwLCBfbWluLmNyZWF0ZU1pbikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBzbWFsbGVyOiBzbWFsbGVyXG4gIH0pO1xuICAvKipcbiAgICogQXR0YWNoIGEgdHJhbnNmb3JtIGZ1bmN0aW9uIHRvIG1hdGgubWluXG4gICAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHRyYW5zZm9ybSBjaGFuZ2VkIHRoZSBsYXN0IGBkaW1gIHBhcmFtZXRlciBvZiBmdW5jdGlvbiBtaW5cbiAgICogZnJvbSBvbmUtYmFzZWQgdG8gemVybyBiYXNlZFxuICAgKi9cblxuICByZXR1cm4gdHlwZWQoJ21pbicsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIC8vIGNoYW5nZSBsYXN0IGFyZ3VtZW50IGRpbSBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkXG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDIgJiYgKDAsIF9pcy5pc0NvbGxlY3Rpb24pKGFyZ3NbMF0pKSB7XG4gICAgICAgIHZhciBkaW0gPSBhcmdzWzFdO1xuXG4gICAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbSAtIDE7XG4gICAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikoZGltKSkge1xuICAgICAgICAgIGFyZ3NbMV0gPSBkaW0ubWludXMoMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG1pbi5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2Vycm9yVHJhbnNmb3JtLmVycm9yVHJhbnNmb3JtKShlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59LCB7XG4gIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNaW5UcmFuc2Zvcm0gPSBjcmVhdGVNaW5UcmFuc2Zvcm07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhbmdlVHJhbnNmb3JtID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9yYW5nZSA9IHJlcXVpcmUoXCIuLi8uLi9mdW5jdGlvbi9tYXRyaXgvcmFuZ2VcIik7XG5cbnZhciBuYW1lID0gJ3JhbmdlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICc/bWF0cml4JywgJz9iaWdudW1iZXInLCAnc21hbGxlcicsICdzbWFsbGVyRXEnLCAnbGFyZ2VyJywgJ2xhcmdlckVxJ107XG52YXIgY3JlYXRlUmFuZ2VUcmFuc2Zvcm0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGJpZ251bWJlciA9IF9yZWYuYmlnbnVtYmVyLFxuICAgICAgc21hbGxlciA9IF9yZWYuc21hbGxlcixcbiAgICAgIHNtYWxsZXJFcSA9IF9yZWYuc21hbGxlckVxLFxuICAgICAgbGFyZ2VyID0gX3JlZi5sYXJnZXIsXG4gICAgICBsYXJnZXJFcSA9IF9yZWYubGFyZ2VyRXE7XG4gIHZhciByYW5nZSA9ICgwLCBfcmFuZ2UuY3JlYXRlUmFuZ2UpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgY29uZmlnOiBjb25maWcsXG4gICAgbWF0cml4OiBtYXRyaXgsXG4gICAgYmlnbnVtYmVyOiBiaWdudW1iZXIsXG4gICAgc21hbGxlcjogc21hbGxlcixcbiAgICBzbWFsbGVyRXE6IHNtYWxsZXJFcSxcbiAgICBsYXJnZXI6IGxhcmdlcixcbiAgICBsYXJnZXJFcTogbGFyZ2VyRXFcbiAgfSk7XG4gIC8qKlxuICAgKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5yYW5nZVxuICAgKiBBZGRzIGEgcHJvcGVydHkgdHJhbnNmb3JtIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbi5cbiAgICpcbiAgICogVGhpcyB0cmFuc2Zvcm0gY3JlYXRlcyBhIHJhbmdlIHdoaWNoIGluY2x1ZGVzIHRoZSBlbmQgdmFsdWVcbiAgICovXG5cbiAgcmV0dXJuIHR5cGVkKCdyYW5nZScsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIHZhciBsYXN0SW5kZXggPSBhcmdzLmxlbmd0aCAtIDE7XG4gICAgICB2YXIgbGFzdCA9IGFyZ3NbbGFzdEluZGV4XTtcblxuICAgICAgaWYgKHR5cGVvZiBsYXN0ICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgLy8gYXBwZW5kIGEgcGFyYW1ldGVyIGluY2x1ZGVFbmQ9dHJ1ZVxuICAgICAgICBhcmdzLnB1c2godHJ1ZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByYW5nZS5hcHBseShudWxsLCBhcmdzKTtcbiAgICB9XG4gIH0pO1xufSwge1xuICBpc1RyYW5zZm9ybUZ1bmN0aW9uOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmFuZ2VUcmFuc2Zvcm0gPSBjcmVhdGVSYW5nZVRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUm93VHJhbnNmb3JtID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9yb3cgPSByZXF1aXJlKFwiLi4vLi4vZnVuY3Rpb24vbWF0cml4L3Jvd1wiKTtcblxudmFyIF9lcnJvclRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL3V0aWxzL2Vycm9yVHJhbnNmb3JtXCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgbmFtZSA9ICdyb3cnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnSW5kZXgnLCAnbWF0cml4JywgJ3JhbmdlJ107XG4vKipcbiAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRyaXguY29sdW1uXG4gKiBBZGRzIGEgcHJvcGVydHkgdHJhbnNmb3JtIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbi5cbiAqXG4gKiBUaGlzIHRyYW5zZm9ybSBjaGFuZ2VkIHRoZSBsYXN0IGBpbmRleGAgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uIGNvbHVtblxuICogZnJvbSB6ZXJvLWJhc2VkIHRvIG9uZS1iYXNlZFxuICovXG5cbnZhciBjcmVhdGVSb3dUcmFuc2Zvcm0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgSW5kZXggPSBfcmVmLkluZGV4LFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICByYW5nZSA9IF9yZWYucmFuZ2U7XG4gIHZhciByb3cgPSAoMCwgX3Jvdy5jcmVhdGVSb3cpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgSW5kZXg6IEluZGV4LFxuICAgIG1hdHJpeDogbWF0cml4LFxuICAgIHJhbmdlOiByYW5nZVxuICB9KTsgLy8gQHNlZTogY29tbWVudCBvZiByb3cgaXRzZWxmXG5cbiAgcmV0dXJuIHR5cGVkKCdyb3cnLCB7XG4gICAgJy4uLmFueSc6IGZ1bmN0aW9uIGFueShhcmdzKSB7XG4gICAgICAvLyBjaGFuZ2UgbGFzdCBhcmd1bWVudCBmcm9tIHplcm8tYmFzZWQgdG8gb25lLWJhc2VkXG4gICAgICB2YXIgbGFzdEluZGV4ID0gYXJncy5sZW5ndGggLSAxO1xuICAgICAgdmFyIGxhc3QgPSBhcmdzW2xhc3RJbmRleF07XG5cbiAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShsYXN0KSkge1xuICAgICAgICBhcmdzW2xhc3RJbmRleF0gPSBsYXN0IC0gMTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHJvdy5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2Vycm9yVHJhbnNmb3JtLmVycm9yVHJhbnNmb3JtKShlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59LCB7XG4gIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSb3dUcmFuc2Zvcm0gPSBjcmVhdGVSb3dUcmFuc2Zvcm07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVN0ZFRyYW5zZm9ybSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfc3RkID0gcmVxdWlyZShcIi4uLy4uL2Z1bmN0aW9uL3N0YXRpc3RpY3Mvc3RkXCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBuYW1lID0gJ3N0ZCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdzcXJ0JywgJ3ZhcmlhbmNlJ107XG4vKipcbiAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLnN0ZFxuICogQWRkcyBhIHByb3BlcnR5IHRyYW5zZm9ybSBjb250YWluaW5nIHRoZSB0cmFuc2Zvcm0gZnVuY3Rpb24uXG4gKlxuICogVGhpcyB0cmFuc2Zvcm0gY2hhbmdlZCB0aGUgYGRpbWAgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uIHN0ZFxuICogZnJvbSBvbmUtYmFzZWQgdG8gemVybyBiYXNlZFxuICovXG5cbnZhciBjcmVhdGVTdGRUcmFuc2Zvcm0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgc3FydCA9IF9yZWYuc3FydCxcbiAgICAgIHZhcmlhbmNlID0gX3JlZi52YXJpYW5jZTtcbiAgdmFyIHN0ZCA9ICgwLCBfc3RkLmNyZWF0ZVN0ZCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBzcXJ0OiBzcXJ0LFxuICAgIHZhcmlhbmNlOiB2YXJpYW5jZVxuICB9KTtcbiAgcmV0dXJuIHR5cGVkKCdzdGQnLCB7XG4gICAgJy4uLmFueSc6IGZ1bmN0aW9uIGFueShhcmdzKSB7XG4gICAgICAvLyBjaGFuZ2UgbGFzdCBhcmd1bWVudCBkaW0gZnJvbSBvbmUtYmFzZWQgdG8gemVyby1iYXNlZFxuICAgICAgaWYgKGFyZ3MubGVuZ3RoID49IDIgJiYgKDAsIF9pcy5pc0NvbGxlY3Rpb24pKGFyZ3NbMF0pKSB7XG4gICAgICAgIHZhciBkaW0gPSBhcmdzWzFdO1xuXG4gICAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbSAtIDE7XG4gICAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikoZGltKSkge1xuICAgICAgICAgIGFyZ3NbMV0gPSBkaW0ubWludXMoMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHN0ZC5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2Vycm9yVHJhbnNmb3JtLmVycm9yVHJhbnNmb3JtKShlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59LCB7XG4gIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTdGRUcmFuc2Zvcm0gPSBjcmVhdGVTdGRUcmFuc2Zvcm07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVN1YnNldFRyYW5zZm9ybSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfZXJyb3JUcmFuc2Zvcm0gPSByZXF1aXJlKFwiLi91dGlscy9lcnJvclRyYW5zZm9ybVwiKTtcblxudmFyIF9zdWJzZXQgPSByZXF1aXJlKFwiLi4vLi4vZnVuY3Rpb24vbWF0cml4L3N1YnNldFwiKTtcblxudmFyIG5hbWUgPSAnc3Vic2V0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZVN1YnNldFRyYW5zZm9ybSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcbiAgdmFyIHN1YnNldCA9ICgwLCBfc3Vic2V0LmNyZWF0ZVN1YnNldCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBtYXRyaXg6IG1hdHJpeFxuICB9KTtcbiAgLyoqXG4gICAqIEF0dGFjaCBhIHRyYW5zZm9ybSBmdW5jdGlvbiB0byBtYXRoLnN1YnNldFxuICAgKiBBZGRzIGEgcHJvcGVydHkgdHJhbnNmb3JtIGNvbnRhaW5pbmcgdGhlIHRyYW5zZm9ybSBmdW5jdGlvbi5cbiAgICpcbiAgICogVGhpcyB0cmFuc2Zvcm0gY3JlYXRlcyBhIHJhbmdlIHdoaWNoIGluY2x1ZGVzIHRoZSBlbmQgdmFsdWVcbiAgICovXG5cbiAgcmV0dXJuIHR5cGVkKCdzdWJzZXQnLCB7XG4gICAgJy4uLmFueSc6IGZ1bmN0aW9uIGFueShhcmdzKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gc3Vic2V0LmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVN1YnNldFRyYW5zZm9ybSA9IGNyZWF0ZVN1YnNldFRyYW5zZm9ybTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3VtVHJhbnNmb3JtID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9lcnJvclRyYW5zZm9ybSA9IHJlcXVpcmUoXCIuL3V0aWxzL2Vycm9yVHJhbnNmb3JtXCIpO1xuXG52YXIgX3N1bSA9IHJlcXVpcmUoXCIuLi8uLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3N1bVwiKTtcblxuLyoqXG4gKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC5zdW1cbiAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgdHJhbnNmb3JtIGNoYW5nZWQgdGhlIGxhc3QgYGRpbWAgcGFyYW1ldGVyIG9mIGZ1bmN0aW9uIG1lYW5cbiAqIGZyb20gb25lLWJhc2VkIHRvIHplcm8gYmFzZWRcbiAqL1xudmFyIG5hbWUgPSAnc3VtJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdhZGQnLCAnP2JpZ251bWJlcicsICc/ZnJhY3Rpb24nXTtcbnZhciBjcmVhdGVTdW1UcmFuc2Zvcm0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIGJpZ251bWJlciA9IF9yZWYuYmlnbnVtYmVyLFxuICAgICAgZnJhY3Rpb24gPSBfcmVmLmZyYWN0aW9uO1xuICB2YXIgc3VtID0gKDAsIF9zdW0uY3JlYXRlU3VtKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGNvbmZpZzogY29uZmlnLFxuICAgIGFkZDogYWRkLFxuICAgIGJpZ251bWJlcjogYmlnbnVtYmVyLFxuICAgIGZyYWN0aW9uOiBmcmFjdGlvblxuICB9KTtcbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnLi4uYW55JzogZnVuY3Rpb24gYW55KGFyZ3MpIHtcbiAgICAgIC8vIGNoYW5nZSBsYXN0IGFyZ3VtZW50IGRpbSBmcm9tIG9uZS1iYXNlZCB0byB6ZXJvLWJhc2VkXG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDIgJiYgKDAsIF9pcy5pc0NvbGxlY3Rpb24pKGFyZ3NbMF0pKSB7XG4gICAgICAgIHZhciBkaW0gPSBhcmdzWzFdO1xuXG4gICAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbSAtIDE7XG4gICAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikoZGltKSkge1xuICAgICAgICAgIGFyZ3NbMV0gPSBkaW0ubWludXMoMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHN1bS5hcHBseShudWxsLCBhcmdzKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2Vycm9yVHJhbnNmb3JtLmVycm9yVHJhbnNmb3JtKShlcnIpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59LCB7XG4gIGlzVHJhbnNmb3JtRnVuY3Rpb246IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTdW1UcmFuc2Zvcm0gPSBjcmVhdGVTdW1UcmFuc2Zvcm07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbXBpbGVJbmxpbmVFeHByZXNzaW9uID0gY29tcGlsZUlubGluZUV4cHJlc3Npb247XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvaXNcIik7XG5cbi8qKlxuICogQ29tcGlsZSBhbiBpbmxpbmUgZXhwcmVzc2lvbiBsaWtlIFwieCA+IDBcIlxuICogQHBhcmFtIHtOb2RlfSBleHByZXNzaW9uXG4gKiBAcGFyYW0ge09iamVjdH0gbWF0aFxuICogQHBhcmFtIHtPYmplY3R9IHNjb3BlXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn0gUmV0dXJucyBhIGZ1bmN0aW9uIHdpdGggb25lIGFyZ3VtZW50IHdoaWNoIGZpbGxzIGluIHRoZVxuICogICAgICAgICAgICAgICAgICAgIHVuZGVmaW5lZCB2YXJpYWJsZSAobGlrZSBcInhcIikgYW5kIGV2YWx1YXRlcyB0aGUgZXhwcmVzc2lvblxuICovXG5mdW5jdGlvbiBjb21waWxlSW5saW5lRXhwcmVzc2lvbihleHByZXNzaW9uLCBtYXRoLCBzY29wZSkge1xuICAvLyBmaW5kIGFuIHVuZGVmaW5lZCBzeW1ib2xcbiAgdmFyIHN5bWJvbCA9IGV4cHJlc3Npb24uZmlsdGVyKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgcmV0dXJuICgwLCBfaXMuaXNTeW1ib2xOb2RlKShub2RlKSAmJiAhKG5vZGUubmFtZSBpbiBtYXRoKSAmJiAhKG5vZGUubmFtZSBpbiBzY29wZSk7XG4gIH0pWzBdO1xuXG4gIGlmICghc3ltYm9sKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyB1bmRlZmluZWQgdmFyaWFibGUgZm91bmQgaW4gaW5saW5lIGV4cHJlc3Npb24gXCInICsgZXhwcmVzc2lvbiArICdcIicpO1xuICB9IC8vIGNyZWF0ZSBhIHRlc3QgZnVuY3Rpb24gZm9yIHRoaXMgZXF1YXRpb25cblxuXG4gIHZhciBuYW1lID0gc3ltYm9sLm5hbWU7IC8vIHZhcmlhYmxlIG5hbWVcblxuICB2YXIgc3ViU2NvcGUgPSBPYmplY3QuY3JlYXRlKHNjb3BlKTtcbiAgdmFyIGVxID0gZXhwcmVzc2lvbi5jb21waWxlKCk7XG4gIHJldHVybiBmdW5jdGlvbiBpbmxpbmVFeHByZXNzaW9uKHgpIHtcbiAgICBzdWJTY29wZVtuYW1lXSA9IHg7XG4gICAgcmV0dXJuIGVxLmV2YWx1YXRlKHN1YlNjb3BlKTtcbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZXJyb3JUcmFuc2Zvcm0gPSBlcnJvclRyYW5zZm9ybTtcblxudmFyIF9JbmRleEVycm9yID0gcmVxdWlyZShcIi4uLy4uLy4uL2Vycm9yL0luZGV4RXJyb3JcIik7XG5cbi8qKlxuICogVHJhbnNmb3JtIHplcm8tYmFzZWQgaW5kaWNlcyB0byBvbmUtYmFzZWQgaW5kaWNlcyBpbiBlcnJvcnNcbiAqIEBwYXJhbSB7RXJyb3J9IGVyclxuICogQHJldHVybnMge0Vycm9yIHwgSW5kZXhFcnJvcn0gUmV0dXJucyB0aGUgdHJhbnNmb3JtZWQgZXJyb3JcbiAqL1xuZnVuY3Rpb24gZXJyb3JUcmFuc2Zvcm0oZXJyKSB7XG4gIGlmIChlcnIgJiYgZXJyLmlzSW5kZXhFcnJvcikge1xuICAgIHJldHVybiBuZXcgX0luZGV4RXJyb3IuSW5kZXhFcnJvcihlcnIuaW5kZXggKyAxLCBlcnIubWluICsgMSwgZXJyLm1heCAhPT0gdW5kZWZpbmVkID8gZXJyLm1heCArIDEgOiB1bmRlZmluZWQpO1xuICB9XG5cbiAgcmV0dXJuIGVycjtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVmFyaWFuY2VUcmFuc2Zvcm0gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2Vycm9yVHJhbnNmb3JtID0gcmVxdWlyZShcIi4vdXRpbHMvZXJyb3JUcmFuc2Zvcm1cIik7XG5cbnZhciBfdmFyaWFuY2UgPSByZXF1aXJlKFwiLi4vLi4vZnVuY3Rpb24vc3RhdGlzdGljcy92YXJpYW5jZVwiKTtcblxudmFyIG5hbWUgPSAndmFyaWFuY2UnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnYWRkJywgJ3N1YnRyYWN0JywgJ211bHRpcGx5JywgJ2RpdmlkZScsICdhcHBseScsICdpc05hTiddO1xuLyoqXG4gKiBBdHRhY2ggYSB0cmFuc2Zvcm0gZnVuY3Rpb24gdG8gbWF0aC52YXJcbiAqIEFkZHMgYSBwcm9wZXJ0eSB0cmFuc2Zvcm0gY29udGFpbmluZyB0aGUgdHJhbnNmb3JtIGZ1bmN0aW9uLlxuICpcbiAqIFRoaXMgdHJhbnNmb3JtIGNoYW5nZWQgdGhlIGBkaW1gIHBhcmFtZXRlciBvZiBmdW5jdGlvbiB2YXJcbiAqIGZyb20gb25lLWJhc2VkIHRvIHplcm8gYmFzZWRcbiAqL1xuXG52YXIgY3JlYXRlVmFyaWFuY2VUcmFuc2Zvcm0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWRkID0gX3JlZi5hZGQsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICBkaXZpZGUgPSBfcmVmLmRpdmlkZSxcbiAgICAgIGFwcGx5ID0gX3JlZi5hcHBseSxcbiAgICAgIGlzTmFOID0gX3JlZi5pc05hTjtcbiAgdmFyIHZhcmlhbmNlID0gKDAsIF92YXJpYW5jZS5jcmVhdGVWYXJpYW5jZSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBhZGQ6IGFkZCxcbiAgICBzdWJ0cmFjdDogc3VidHJhY3QsXG4gICAgbXVsdGlwbHk6IG11bHRpcGx5LFxuICAgIGRpdmlkZTogZGl2aWRlLFxuICAgIGFwcGx5OiBhcHBseSxcbiAgICBpc05hTjogaXNOYU5cbiAgfSk7XG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJy4uLmFueSc6IGZ1bmN0aW9uIGFueShhcmdzKSB7XG4gICAgICAvLyBjaGFuZ2UgbGFzdCBhcmd1bWVudCBkaW0gZnJvbSBvbmUtYmFzZWQgdG8gemVyby1iYXNlZFxuICAgICAgaWYgKGFyZ3MubGVuZ3RoID49IDIgJiYgKDAsIF9pcy5pc0NvbGxlY3Rpb24pKGFyZ3NbMF0pKSB7XG4gICAgICAgIHZhciBkaW0gPSBhcmdzWzFdO1xuXG4gICAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShkaW0pKSB7XG4gICAgICAgICAgYXJnc1sxXSA9IGRpbSAtIDE7XG4gICAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikoZGltKSkge1xuICAgICAgICAgIGFyZ3NbMV0gPSBkaW0ubWludXMoMSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHZhcmlhbmNlLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfZXJyb3JUcmFuc2Zvcm0uZXJyb3JUcmFuc2Zvcm0pKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn0sIHtcbiAgaXNUcmFuc2Zvcm1GdW5jdGlvbjogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVZhcmlhbmNlVHJhbnNmb3JtID0gY3JlYXRlVmFyaWFuY2VUcmFuc2Zvcm07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUeXBlZFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdHlwZWQuY3JlYXRlVHlwZWQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmVzdWx0U2V0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9SZXN1bHRTZXQuY3JlYXRlUmVzdWx0U2V0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUJpZ051bWJlckNsYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9CaWdOdW1iZXIuY3JlYXRlQmlnTnVtYmVyQ2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ29tcGxleENsYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9Db21wbGV4LmNyZWF0ZUNvbXBsZXhDbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGcmFjdGlvbkNsYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9GcmFjdGlvbi5jcmVhdGVGcmFjdGlvbkNsYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJhbmdlQ2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX1JhbmdlLmNyZWF0ZVJhbmdlQ2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWF0cml4Q2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX01hdHJpeC5jcmVhdGVNYXRyaXhDbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEZW5zZU1hdHJpeENsYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9EZW5zZU1hdHJpeC5jcmVhdGVEZW5zZU1hdHJpeENsYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNsb25lXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jbG9uZS5jcmVhdGVDbG9uZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJc0ludGVnZXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2lzSW50ZWdlci5jcmVhdGVJc0ludGVnZXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSXNOZWdhdGl2ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXNOZWdhdGl2ZS5jcmVhdGVJc05lZ2F0aXZlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUlzTnVtZXJpY1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXNOdW1lcmljLmNyZWF0ZUlzTnVtZXJpYztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVIYXNOdW1lcmljVmFsdWVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2hhc051bWVyaWNWYWx1ZS5jcmVhdGVIYXNOdW1lcmljVmFsdWU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSXNQb3NpdGl2ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXNQb3NpdGl2ZS5jcmVhdGVJc1Bvc2l0aXZlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUlzWmVyb1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXNaZXJvLmNyZWF0ZUlzWmVybztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJc05hTlwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXNOYU4uY3JlYXRlSXNOYU47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVHlwZU9mXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF90eXBlT2YuY3JlYXRlVHlwZU9mO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURlcHJlY2F0ZWRUeXBlb2ZcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3R5cGVPZi5jcmVhdGVEZXByZWNhdGVkVHlwZW9mO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUVxdWFsU2NhbGFyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9lcXVhbFNjYWxhci5jcmVhdGVFcXVhbFNjYWxhcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTcGFyc2VNYXRyaXhDbGFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfU3BhcnNlTWF0cml4LmNyZWF0ZVNwYXJzZU1hdHJpeENsYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU51bWJlclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbnVtYmVyLmNyZWF0ZU51bWJlcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTdHJpbmdcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3N0cmluZy5jcmVhdGVTdHJpbmc7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQm9vbGVhblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYm9vbGVhbi5jcmVhdGVCb29sZWFuO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUJpZ251bWJlclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYmlnbnVtYmVyLmNyZWF0ZUJpZ251bWJlcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb21wbGV4XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb21wbGV4LmNyZWF0ZUNvbXBsZXg7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRnJhY3Rpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ZyYWN0aW9uLmNyZWF0ZUZyYWN0aW9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU1hdHJpeFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbWF0cml4LmNyZWF0ZU1hdHJpeDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTcGxpdFVuaXRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NwbGl0VW5pdC5jcmVhdGVTcGxpdFVuaXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVW5hcnlNaW51c1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdW5hcnlNaW51cy5jcmVhdGVVbmFyeU1pbnVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVVuYXJ5UGx1c1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdW5hcnlQbHVzLmNyZWF0ZVVuYXJ5UGx1cztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBYnNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Ficy5jcmVhdGVBYnM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXBwbHlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2FwcGx5LmNyZWF0ZUFwcGx5O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFkZFNjYWxhclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYWRkU2NhbGFyLmNyZWF0ZUFkZFNjYWxhcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDYnJ0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jYnJ0LmNyZWF0ZUNicnQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ2VpbFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY2VpbC5jcmVhdGVDZWlsO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUN1YmVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2N1YmUuY3JlYXRlQ3ViZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFeHBcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2V4cC5jcmVhdGVFeHA7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRXhwbTFcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2V4cG0uY3JlYXRlRXhwbTE7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRml4XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9maXguY3JlYXRlRml4O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZsb29yXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9mbG9vci5jcmVhdGVGbG9vcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVHY2RcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2djZC5jcmVhdGVHY2Q7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTGNtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9sY20uY3JlYXRlTGNtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUxvZzEwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9sb2cuY3JlYXRlTG9nMTA7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTG9nMlwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbG9nMi5jcmVhdGVMb2cyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU1vZFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbW9kLmNyZWF0ZU1vZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNdWx0aXBseVNjYWxhclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbXVsdGlwbHlTY2FsYXIuY3JlYXRlTXVsdGlwbHlTY2FsYXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTXVsdGlwbHlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX211bHRpcGx5LmNyZWF0ZU11bHRpcGx5O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU50aFJvb3RcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX250aFJvb3QuY3JlYXRlTnRoUm9vdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTaWduXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zaWduLmNyZWF0ZVNpZ247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3FydFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3FydC5jcmVhdGVTcXJ0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNxdWFyZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3F1YXJlLmNyZWF0ZVNxdWFyZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTdWJ0cmFjdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3VidHJhY3QuY3JlYXRlU3VidHJhY3Q7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlWGdjZFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfeGdjZC5jcmVhdGVYZ2NkO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURvdE11bHRpcGx5XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kb3RNdWx0aXBseS5jcmVhdGVEb3RNdWx0aXBseTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVCaXRBbmRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2JpdEFuZC5jcmVhdGVCaXRBbmQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQml0Tm90XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9iaXROb3QuY3JlYXRlQml0Tm90O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUJpdE9yXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9iaXRPci5jcmVhdGVCaXRPcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVCaXRYb3JcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2JpdFhvci5jcmVhdGVCaXRYb3I7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXJnXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hcmcuY3JlYXRlQXJnO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbmpcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbmouY3JlYXRlQ29uajtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJbVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaW0uY3JlYXRlSW07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3JlLmNyZWF0ZVJlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU5vdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbm90LmNyZWF0ZU5vdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVPclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfb3IuY3JlYXRlT3I7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlWG9yXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF94b3IuY3JlYXRlWG9yO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbmNhdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uY2F0LmNyZWF0ZUNvbmNhdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb2x1bW5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbHVtbi5jcmVhdGVDb2x1bW47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ3Jvc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Nyb3NzLmNyZWF0ZUNyb3NzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURpYWdcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RpYWcuY3JlYXRlRGlhZztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFeWVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2V5ZS5jcmVhdGVFeWU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmlsdGVyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9maWx0ZXIuY3JlYXRlRmlsdGVyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZsYXR0ZW5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ZsYXR0ZW4uY3JlYXRlRmxhdHRlbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGb3JFYWNoXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9mb3JFYWNoLmNyZWF0ZUZvckVhY2g7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlR2V0TWF0cml4RGF0YVR5cGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2dldE1hdHJpeERhdGFUeXBlLmNyZWF0ZUdldE1hdHJpeERhdGFUeXBlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUlkZW50aXR5XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pZGVudGl0eS5jcmVhdGVJZGVudGl0eTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVLcm9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9rcm9uLmNyZWF0ZUtyb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWFwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tYXAuY3JlYXRlTWFwO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU9uZXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX29uZXMuY3JlYXRlT25lcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSYW5nZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcmFuZ2UuY3JlYXRlUmFuZ2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmVzaGFwZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcmVzaGFwZS5jcmVhdGVSZXNoYXBlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJlc2l6ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcmVzaXplLmNyZWF0ZVJlc2l6ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSb3dcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3Jvdy5jcmVhdGVSb3c7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2l6ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2l6ZS5jcmVhdGVTaXplO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNxdWVlemVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NxdWVlemUuY3JlYXRlU3F1ZWV6ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTdWJzZXRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3N1YnNldC5jcmVhdGVTdWJzZXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVHJhbnNwb3NlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF90cmFuc3Bvc2UuY3JlYXRlVHJhbnNwb3NlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUN0cmFuc3Bvc2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2N0cmFuc3Bvc2UuY3JlYXRlQ3RyYW5zcG9zZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVaZXJvc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfemVyb3MuY3JlYXRlWmVyb3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRXJmXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9lcmYuY3JlYXRlRXJmO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU1vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX21vZGUuY3JlYXRlTW9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQcm9kXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9wcm9kLmNyZWF0ZVByb2Q7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRm9ybWF0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9mb3JtYXQuY3JlYXRlRm9ybWF0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVByaW50XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9wcmludC5jcmVhdGVQcmludDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVUb1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdG8uY3JlYXRlVG87XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSXNQcmltZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaXNQcmltZS5jcmVhdGVJc1ByaW1lO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU51bWVyaWNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX251bWVyaWMuY3JlYXRlTnVtZXJpYztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEaXZpZGVTY2FsYXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RpdmlkZVNjYWxhci5jcmVhdGVEaXZpZGVTY2FsYXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUG93XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9wb3cuY3JlYXRlUG93O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJvdW5kXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yb3VuZC5jcmVhdGVSb3VuZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMb2dcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2xvZzMuY3JlYXRlTG9nO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUxvZzFwXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9sb2cxcC5jcmVhdGVMb2cxcDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVOdGhSb290c1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbnRoUm9vdHMuY3JlYXRlTnRoUm9vdHM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRG90UG93XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kb3RQb3cuY3JlYXRlRG90UG93O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURvdERpdmlkZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZG90RGl2aWRlLmNyZWF0ZURvdERpdmlkZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMc29sdmVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2xzb2x2ZS5jcmVhdGVMc29sdmU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVXNvbHZlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF91c29sdmUuY3JlYXRlVXNvbHZlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUxlZnRTaGlmdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbGVmdFNoaWZ0LmNyZWF0ZUxlZnRTaGlmdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSaWdodEFyaXRoU2hpZnRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3JpZ2h0QXJpdGhTaGlmdC5jcmVhdGVSaWdodEFyaXRoU2hpZnQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmlnaHRMb2dTaGlmdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcmlnaHRMb2dTaGlmdC5jcmVhdGVSaWdodExvZ1NoaWZ0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFuZFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYW5kLmNyZWF0ZUFuZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb21wYXJlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb21wYXJlLmNyZWF0ZUNvbXBhcmU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ29tcGFyZU5hdHVyYWxcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbXBhcmVOYXR1cmFsLmNyZWF0ZUNvbXBhcmVOYXR1cmFsO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbXBhcmVUZXh0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb21wYXJlVGV4dC5jcmVhdGVDb21wYXJlVGV4dDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFcXVhbFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZXF1YWwuY3JlYXRlRXF1YWw7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRXF1YWxUZXh0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9lcXVhbFRleHQuY3JlYXRlRXF1YWxUZXh0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNtYWxsZXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NtYWxsZXIuY3JlYXRlU21hbGxlcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTbWFsbGVyRXFcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NtYWxsZXJFcS5jcmVhdGVTbWFsbGVyRXE7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTGFyZ2VyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9sYXJnZXIuY3JlYXRlTGFyZ2VyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUxhcmdlckVxXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9sYXJnZXJFcS5jcmVhdGVMYXJnZXJFcTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEZWVwRXF1YWxcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RlZXBFcXVhbC5jcmVhdGVEZWVwRXF1YWw7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVW5lcXVhbFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdW5lcXVhbC5jcmVhdGVVbmVxdWFsO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBhcnRpdGlvblNlbGVjdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGFydGl0aW9uU2VsZWN0LmNyZWF0ZVBhcnRpdGlvblNlbGVjdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTb3J0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zb3J0LmNyZWF0ZVNvcnQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWF4XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tYXguY3JlYXRlTWF4O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU1pblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbWluLmNyZWF0ZU1pbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJbW11dGFibGVEZW5zZU1hdHJpeENsYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9JbW11dGFibGVEZW5zZU1hdHJpeC5jcmVhdGVJbW11dGFibGVEZW5zZU1hdHJpeENsYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUluZGV4Q2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX01hdHJpeEluZGV4LmNyZWF0ZUluZGV4Q2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmlib25hY2NpSGVhcENsYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9GaWJvbmFjY2lIZWFwLmNyZWF0ZUZpYm9uYWNjaUhlYXBDbGFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTcGFDbGFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfU3BhLmNyZWF0ZVNwYUNsYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVVuaXRDbGFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfVW5pdC5jcmVhdGVVbml0Q2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVW5pdEZ1bmN0aW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF91bml0LmNyZWF0ZVVuaXRGdW5jdGlvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTcGFyc2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NwYXJzZS5jcmVhdGVTcGFyc2U7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ3JlYXRlVW5pdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY3JlYXRlVW5pdC5jcmVhdGVDcmVhdGVVbml0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFjb3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Fjb3MuY3JlYXRlQWNvcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBY29zaFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYWNvc2guY3JlYXRlQWNvc2g7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQWNvdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYWNvdC5jcmVhdGVBY290O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFjb3RoXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hY290aC5jcmVhdGVBY290aDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBY3NjXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hY3NjLmNyZWF0ZUFjc2M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQWNzY2hcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Fjc2NoLmNyZWF0ZUFjc2NoO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFzZWNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2FzZWMuY3JlYXRlQXNlYztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBc2VjaFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYXNlY2guY3JlYXRlQXNlY2g7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXNpblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfYXNpbi5jcmVhdGVBc2luO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFzaW5oXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hc2luaC5jcmVhdGVBc2luaDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBdGFuXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hdGFuLmNyZWF0ZUF0YW47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXRhbjJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2F0YW4yLmNyZWF0ZUF0YW4yO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUF0YW5oXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hdGFuaC5jcmVhdGVBdGFuaDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Nvcy5jcmVhdGVDb3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ29zaFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29zaC5jcmVhdGVDb3NoO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY290LmNyZWF0ZUNvdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb3RoXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb3RoLmNyZWF0ZUNvdGg7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ3NjXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jc2MuY3JlYXRlQ3NjO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNzY2hcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NzY2guY3JlYXRlQ3NjaDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZWNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NlYy5jcmVhdGVTZWM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2VjaFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2VjaC5jcmVhdGVTZWNoO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNpblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2luLmNyZWF0ZVNpbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTaW5oXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zaW5oLmNyZWF0ZVNpbmg7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVGFuXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF90YW4uY3JlYXRlVGFuO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVRhbmhcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3RhbmguY3JlYXRlVGFuaDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZXRDYXJ0ZXNpYW5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NldENhcnRlc2lhbi5jcmVhdGVTZXRDYXJ0ZXNpYW47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2V0RGlmZmVyZW5jZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2V0RGlmZmVyZW5jZS5jcmVhdGVTZXREaWZmZXJlbmNlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNldERpc3RpbmN0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zZXREaXN0aW5jdC5jcmVhdGVTZXREaXN0aW5jdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZXRJbnRlcnNlY3RcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NldEludGVyc2VjdC5jcmVhdGVTZXRJbnRlcnNlY3Q7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2V0SXNTdWJzZXRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NldElzU3Vic2V0LmNyZWF0ZVNldElzU3Vic2V0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNldE11bHRpcGxpY2l0eVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2V0TXVsdGlwbGljaXR5LmNyZWF0ZVNldE11bHRpcGxpY2l0eTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZXRQb3dlcnNldFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2V0UG93ZXJzZXQuY3JlYXRlU2V0UG93ZXJzZXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2V0U2l6ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2V0U2l6ZS5jcmVhdGVTZXRTaXplO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNldFN5bURpZmZlcmVuY2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NldFN5bURpZmZlcmVuY2UuY3JlYXRlU2V0U3ltRGlmZmVyZW5jZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTZXRVbmlvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc2V0VW5pb24uY3JlYXRlU2V0VW5pb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQWRkXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hZGQuY3JlYXRlQWRkO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUh5cG90XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9oeXBvdC5jcmVhdGVIeXBvdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVOb3JtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9ub3JtLmNyZWF0ZU5vcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRG90XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9kb3QuY3JlYXRlRG90O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVRyYWNlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF90cmFjZS5jcmVhdGVUcmFjZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJbmRleFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfZnVuY3Rpb24uY3JlYXRlSW5kZXg7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfTm9kZS5jcmVhdGVOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFjY2Vzc29yTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfQWNjZXNzb3JOb2RlLmNyZWF0ZUFjY2Vzc29yTm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVBcnJheU5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0FycmF5Tm9kZS5jcmVhdGVBcnJheU5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXNzaWdubWVudE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0Fzc2lnbm1lbnROb2RlLmNyZWF0ZUFzc2lnbm1lbnROb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUJsb2NrTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfQmxvY2tOb2RlLmNyZWF0ZUJsb2NrTm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb25kaXRpb25hbE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0NvbmRpdGlvbmFsTm9kZS5jcmVhdGVDb25kaXRpb25hbE5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ29uc3RhbnROb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9Db25zdGFudE5vZGUuY3JlYXRlQ29uc3RhbnROb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZ1bmN0aW9uQXNzaWdubWVudE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0Z1bmN0aW9uQXNzaWdubWVudE5vZGUuY3JlYXRlRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVJbmRleE5vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0luZGV4Tm9kZS5jcmVhdGVJbmRleE5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlT2JqZWN0Tm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfT2JqZWN0Tm9kZS5jcmVhdGVPYmplY3ROb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU9wZXJhdG9yTm9kZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfT3BlcmF0b3JOb2RlLmNyZWF0ZU9wZXJhdG9yTm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQYXJlbnRoZXNpc05vZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX1BhcmVudGhlc2lzTm9kZS5jcmVhdGVQYXJlbnRoZXNpc05vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmFuZ2VOb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9SYW5nZU5vZGUuY3JlYXRlUmFuZ2VOb2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJlbGF0aW9uYWxOb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9SZWxhdGlvbmFsTm9kZS5jcmVhdGVSZWxhdGlvbmFsTm9kZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTeW1ib2xOb2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9TeW1ib2xOb2RlLmNyZWF0ZVN5bWJvbE5vZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRnVuY3Rpb25Ob2RlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9GdW5jdGlvbk5vZGUuY3JlYXRlRnVuY3Rpb25Ob2RlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBhcnNlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9wYXJzZS5jcmVhdGVQYXJzZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb21waWxlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb21waWxlLmNyZWF0ZUNvbXBpbGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRXZhbHVhdGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2V2YWx1YXRlLmNyZWF0ZUV2YWx1YXRlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURlcHJlY2F0ZWRFdmFsXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9ldmFsLmNyZWF0ZURlcHJlY2F0ZWRFdmFsO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVBhcnNlckNsYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9QYXJzZXIuY3JlYXRlUGFyc2VyQ2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUGFyc2VyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9wYXJzZXIuY3JlYXRlUGFyc2VyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUx1cFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbHVwLmNyZWF0ZUx1cDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVRclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcXIuY3JlYXRlUXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2x1XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zbHUuY3JlYXRlU2x1O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUx1c29sdmVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2x1c29sdmUuY3JlYXRlTHVzb2x2ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVIZWxwQ2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0hlbHAuY3JlYXRlSGVscENsYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNoYWluQ2xhc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX0NoYWluLmNyZWF0ZUNoYWluQ2xhc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSGVscFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaGVscC5jcmVhdGVIZWxwO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNoYWluXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jaGFpbi5jcmVhdGVDaGFpbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEZXRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RldC5jcmVhdGVEZXQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSW52XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9pbnYuY3JlYXRlSW52O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUVpZ3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2VpZ3MuY3JlYXRlRWlncztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFeHBtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9leHBtMi5jcmVhdGVFeHBtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNxcnRtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zcXJ0bS5jcmVhdGVTcXJ0bTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVEaXZpZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2RpdmlkZS5jcmVhdGVEaXZpZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRGlzdGFuY2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Rpc3RhbmNlLmNyZWF0ZURpc3RhbmNlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUludGVyc2VjdFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfaW50ZXJzZWN0LmNyZWF0ZUludGVyc2VjdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTdW1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3N1bS5jcmVhdGVTdW07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWVhblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbWVhbi5jcmVhdGVNZWFuO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU1lZGlhblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbWVkaWFuLmNyZWF0ZU1lZGlhbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNYWRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX21hZC5jcmVhdGVNYWQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVmFyaWFuY2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3ZhcmlhbmNlLmNyZWF0ZVZhcmlhbmNlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURlcHJlY2F0ZWRWYXJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3ZhcmlhbmNlLmNyZWF0ZURlcHJlY2F0ZWRWYXI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUXVhbnRpbGVTZXFcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3F1YW50aWxlU2VxLmNyZWF0ZVF1YW50aWxlU2VxO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN0ZFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3RkLmNyZWF0ZVN0ZDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb21iaW5hdGlvbnNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbWJpbmF0aW9ucy5jcmVhdGVDb21iaW5hdGlvbnM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ29tYmluYXRpb25zV2l0aFJlcFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29tYmluYXRpb25zV2l0aFJlcC5jcmVhdGVDb21iaW5hdGlvbnNXaXRoUmVwO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUdhbW1hXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9nYW1tYS5jcmVhdGVHYW1tYTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGYWN0b3JpYWxcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ZhY3RvcmlhbC5jcmVhdGVGYWN0b3JpYWw7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlS2xkaXZlcmdlbmNlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9rbGRpdmVyZ2VuY2UuY3JlYXRlS2xkaXZlcmdlbmNlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU11bHRpbm9taWFsXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tdWx0aW5vbWlhbC5jcmVhdGVNdWx0aW5vbWlhbDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQZXJtdXRhdGlvbnNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3Blcm11dGF0aW9ucy5jcmVhdGVQZXJtdXRhdGlvbnM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUGlja1JhbmRvbVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGlja1JhbmRvbS5jcmVhdGVQaWNrUmFuZG9tO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJhbmRvbVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcmFuZG9tLmNyZWF0ZVJhbmRvbTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSYW5kb21JbnRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3JhbmRvbUludC5jcmVhdGVSYW5kb21JbnQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3RpcmxpbmdTMlwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3RpcmxpbmdTLmNyZWF0ZVN0aXJsaW5nUzI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQmVsbE51bWJlcnNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2JlbGxOdW1iZXJzLmNyZWF0ZUJlbGxOdW1iZXJzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNhdGFsYW5cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NhdGFsYW4uY3JlYXRlQ2F0YWxhbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVDb21wb3NpdGlvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29tcG9zaXRpb24uY3JlYXRlQ29tcG9zaXRpb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2ltcGxpZnlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3NpbXBsaWZ5LmNyZWF0ZVNpbXBsaWZ5O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZURlcml2YXRpdmVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2Rlcml2YXRpdmUuY3JlYXRlRGVyaXZhdGl2ZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSYXRpb25hbGl6ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcmF0aW9uYWxpemUuY3JlYXRlUmF0aW9uYWxpemU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmV2aXZlclwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcmV2aXZlci5jcmVhdGVSZXZpdmVyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVJlcGxhY2VyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9yZXBsYWNlci5jcmVhdGVSZXBsYWNlcjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlRTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVVcHBlcmNhc2VFXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlVXBwZXJjYXNlRTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGYWxzZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZUZhbHNlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVJO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUluZmluaXR5XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlSW5maW5pdHk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTE4xMFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZUxOMTA7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTE4yXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlTE4yO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUxPRzEwRVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZUxPRzEwRTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVMT0cyRVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZUxPRzJFO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU5hTlwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZU5hTjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVOdWxsXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlTnVsbDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQaGlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVQaGk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUGlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVQaTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVVcHBlcmNhc2VQaVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfY29uc3RhbnRzLmNyZWF0ZVVwcGVyY2FzZVBpO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNRUlQxXzJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVTUVJUMV8yO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNRUlQyXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlU1FSVDI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVGF1XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25zdGFudHMuY3JlYXRlVGF1O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVRydWVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVUcnVlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVZlcnNpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2NvbnN0YW50cy5jcmVhdGVWZXJzaW9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUF0b21pY01hc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUF0b21pY01hc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQXZvZ2Fkcm9cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUF2b2dhZHJvO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUJvaHJNYWduZXRvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlQm9ock1hZ25ldG9uO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUJvaHJSYWRpdXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUJvaHJSYWRpdXM7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQm9sdHptYW5uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVCb2x0em1hbm47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ2xhc3NpY2FsRWxlY3Ryb25SYWRpdXNcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUNsYXNzaWNhbEVsZWN0cm9uUmFkaXVzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvbmR1Y3RhbmNlUXVhbnR1bVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlQ29uZHVjdGFuY2VRdWFudHVtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUNvdWxvbWJcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUNvdWxvbWI7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRGV1dGVyb25NYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVEZXV0ZXJvbk1hc3M7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRWZpbW92RmFjdG9yXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVFZmltb3ZGYWN0b3I7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRWxlY3RyaWNDb25zdGFudFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlRWxlY3RyaWNDb25zdGFudDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFbGVjdHJvbk1hc3NcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUVsZWN0cm9uTWFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVFbGVtZW50YXJ5Q2hhcmdlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVFbGVtZW50YXJ5Q2hhcmdlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZhcmFkYXlcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUZhcmFkYXk7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlRmVybWlDb3VwbGluZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlRmVybWlDb3VwbGluZztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGaW5lU3RydWN0dXJlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVGaW5lU3RydWN0dXJlO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZpcnN0UmFkaWF0aW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVGaXJzdFJhZGlhdGlvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVHYXNDb25zdGFudFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlR2FzQ29uc3RhbnQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlR3Jhdml0YXRpb25Db25zdGFudFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlR3Jhdml0YXRpb25Db25zdGFudDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVHcmF2aXR5XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVHcmF2aXR5O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUhhcnRyZWVFbmVyZ3lcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZUhhcnRyZWVFbmVyZ3k7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVLbGl0emluZ1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlS2xpdHppbmc7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTG9zY2htaWR0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVMb3NjaG1pZHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWFnbmV0aWNDb25zdGFudFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlTWFnbmV0aWNDb25zdGFudDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNYWduZXRpY0ZsdXhRdWFudHVtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVNYWduZXRpY0ZsdXhRdWFudHVtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU1vbGFyTWFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlTW9sYXJNYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU1vbGFyTWFzc0MxMlwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlTW9sYXJNYXNzQzEyO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU1vbGFyUGxhbmNrQ29uc3RhbnRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZU1vbGFyUGxhbmNrQ29uc3RhbnQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTW9sYXJWb2x1bWVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZU1vbGFyVm9sdW1lO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU5ldXRyb25NYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVOZXV0cm9uTWFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVOdWNsZWFyTWFnbmV0b25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZU51Y2xlYXJNYWduZXRvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQbGFuY2tDaGFyZ2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVBsYW5ja0NoYXJnZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQbGFuY2tDb25zdGFudFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlUGxhbmNrQ29uc3RhbnQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUGxhbmNrTGVuZ3RoXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVQbGFuY2tMZW5ndGg7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUGxhbmNrTWFzc1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlUGxhbmNrTWFzcztcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQbGFuY2tUZW1wZXJhdHVyZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlUGxhbmNrVGVtcGVyYXR1cmU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUGxhbmNrVGltZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlUGxhbmNrVGltZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVQcm90b25NYXNzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVQcm90b25NYXNzO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVF1YW50dW1PZkNpcmN1bGF0aW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVRdWFudHVtT2ZDaXJjdWxhdGlvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSZWR1Y2VkUGxhbmNrQ29uc3RhbnRcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVJlZHVjZWRQbGFuY2tDb25zdGFudDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSeWRiZXJnXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVSeWRiZXJnO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVNhY2t1clRldHJvZGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVNhY2t1clRldHJvZGU7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU2Vjb25kUmFkaWF0aW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVTZWNvbmRSYWRpYXRpb247XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3BlZWRPZkxpZ2h0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVTcGVlZE9mTGlnaHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlU3RlZmFuQm9sdHptYW5uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVTdGVmYW5Cb2x0em1hbm47XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVGhvbXNvbkNyb3NzU2VjdGlvblwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfcGh5c2ljYWxDb25zdGFudHMuY3JlYXRlVGhvbXNvbkNyb3NzU2VjdGlvbjtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVWYWN1dW1JbXBlZGFuY2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVZhY3V1bUltcGVkYW5jZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVXZWFrTWl4aW5nQW5nbGVcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BoeXNpY2FsQ29uc3RhbnRzLmNyZWF0ZVdlYWtNaXhpbmdBbmdsZTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVXaWVuRGlzcGxhY2VtZW50XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9waHlzaWNhbENvbnN0YW50cy5jcmVhdGVXaWVuRGlzcGxhY2VtZW50O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUFwcGx5VHJhbnNmb3JtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9hcHBseTIuY3JlYXRlQXBwbHlUcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ29sdW1uVHJhbnNmb3JtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb2x1bW4yLmNyZWF0ZUNvbHVtblRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVGaWx0ZXJUcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ZpbHRlcjIuY3JlYXRlRmlsdGVyVHJhbnNmb3JtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZUZvckVhY2hUcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2ZvckVhY2gyLmNyZWF0ZUZvckVhY2hUcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlSW5kZXhUcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX2luZGV4LmNyZWF0ZUluZGV4VHJhbnNmb3JtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU1hcFRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbWFwMi5jcmVhdGVNYXBUcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlTWF4VHJhbnNmb3JtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tYXgyLmNyZWF0ZU1heFRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVNZWFuVHJhbnNmb3JtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9tZWFuMi5jcmVhdGVNZWFuVHJhbnNmb3JtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZU1pblRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbWluMi5jcmVhdGVNaW5UcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlUmFuZ2VUcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3JhbmdlMi5jcmVhdGVSYW5nZVRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVSb3dUcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3JvdzIuY3JlYXRlUm93VHJhbnNmb3JtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN1YnNldFRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3Vic2V0Mi5jcmVhdGVTdWJzZXRUcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlQ29uY2F0VHJhbnNmb3JtXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9jb25jYXQyLmNyZWF0ZUNvbmNhdFRyYW5zZm9ybTtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJjcmVhdGVTdGRUcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3N0ZDIuY3JlYXRlU3RkVHJhbnNmb3JtO1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImNyZWF0ZVN1bVRyYW5zZm9ybVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3VtMi5jcmVhdGVTdW1UcmFuc2Zvcm07XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiY3JlYXRlVmFyaWFuY2VUcmFuc2Zvcm1cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3ZhcmlhbmNlMi5jcmVhdGVWYXJpYW5jZVRyYW5zZm9ybTtcbiAgfVxufSk7XG5cbnZhciBfdHlwZWQgPSByZXF1aXJlKFwiLi9jb3JlL2Z1bmN0aW9uL3R5cGVkXCIpO1xuXG52YXIgX1Jlc3VsdFNldCA9IHJlcXVpcmUoXCIuL3R5cGUvcmVzdWx0c2V0L1Jlc3VsdFNldFwiKTtcblxudmFyIF9CaWdOdW1iZXIgPSByZXF1aXJlKFwiLi90eXBlL2JpZ251bWJlci9CaWdOdW1iZXJcIik7XG5cbnZhciBfQ29tcGxleCA9IHJlcXVpcmUoXCIuL3R5cGUvY29tcGxleC9Db21wbGV4XCIpO1xuXG52YXIgX0ZyYWN0aW9uID0gcmVxdWlyZShcIi4vdHlwZS9mcmFjdGlvbi9GcmFjdGlvblwiKTtcblxudmFyIF9SYW5nZSA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L1JhbmdlXCIpO1xuXG52YXIgX01hdHJpeCA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L01hdHJpeFwiKTtcblxudmFyIF9EZW5zZU1hdHJpeCA9IHJlcXVpcmUoXCIuL3R5cGUvbWF0cml4L0RlbnNlTWF0cml4XCIpO1xuXG52YXIgX2Nsb25lID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvY2xvbmVcIik7XG5cbnZhciBfaXNJbnRlZ2VyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNJbnRlZ2VyXCIpO1xuXG52YXIgX2lzTmVnYXRpdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc05lZ2F0aXZlXCIpO1xuXG52YXIgX2lzTnVtZXJpYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2lzTnVtZXJpY1wiKTtcblxudmFyIF9oYXNOdW1lcmljVmFsdWUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9oYXNOdW1lcmljVmFsdWVcIik7XG5cbnZhciBfaXNQb3NpdGl2ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3V0aWxzL2lzUG9zaXRpdmVcIik7XG5cbnZhciBfaXNaZXJvID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNaZXJvXCIpO1xuXG52YXIgX2lzTmFOID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvaXNOYU5cIik7XG5cbnZhciBfdHlwZU9mID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdXRpbHMvdHlwZU9mXCIpO1xuXG52YXIgX2VxdWFsU2NhbGFyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9lcXVhbFNjYWxhclwiKTtcblxudmFyIF9TcGFyc2VNYXRyaXggPSByZXF1aXJlKFwiLi90eXBlL21hdHJpeC9TcGFyc2VNYXRyaXhcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4vdHlwZS9udW1iZXJcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4vdHlwZS9zdHJpbmdcIik7XG5cbnZhciBfYm9vbGVhbiA9IHJlcXVpcmUoXCIuL3R5cGUvYm9vbGVhblwiKTtcblxudmFyIF9iaWdudW1iZXIgPSByZXF1aXJlKFwiLi90eXBlL2JpZ251bWJlci9mdW5jdGlvbi9iaWdudW1iZXJcIik7XG5cbnZhciBfY29tcGxleCA9IHJlcXVpcmUoXCIuL3R5cGUvY29tcGxleC9mdW5jdGlvbi9jb21wbGV4XCIpO1xuXG52YXIgX2ZyYWN0aW9uID0gcmVxdWlyZShcIi4vdHlwZS9mcmFjdGlvbi9mdW5jdGlvbi9mcmFjdGlvblwiKTtcblxudmFyIF9tYXRyaXggPSByZXF1aXJlKFwiLi90eXBlL21hdHJpeC9mdW5jdGlvbi9tYXRyaXhcIik7XG5cbnZhciBfc3BsaXRVbml0ID0gcmVxdWlyZShcIi4vdHlwZS91bml0L2Z1bmN0aW9uL3NwbGl0VW5pdFwiKTtcblxudmFyIF91bmFyeU1pbnVzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy91bmFyeU1pbnVzXCIpO1xuXG52YXIgX3VuYXJ5UGx1cyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvdW5hcnlQbHVzXCIpO1xuXG52YXIgX2FicyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvYWJzXCIpO1xuXG52YXIgX2FwcGx5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2FwcGx5XCIpO1xuXG52YXIgX2FkZFNjYWxhciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvYWRkU2NhbGFyXCIpO1xuXG52YXIgX2NicnQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2NicnRcIik7XG5cbnZhciBfY2VpbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvY2VpbFwiKTtcblxudmFyIF9jdWJlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9jdWJlXCIpO1xuXG52YXIgX2V4cCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZXhwXCIpO1xuXG52YXIgX2V4cG0gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2V4cG0xXCIpO1xuXG52YXIgX2ZpeCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZml4XCIpO1xuXG52YXIgX2Zsb29yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9mbG9vclwiKTtcblxudmFyIF9nY2QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2djZFwiKTtcblxudmFyIF9sY20gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2xjbVwiKTtcblxudmFyIF9sb2cgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2xvZzEwXCIpO1xuXG52YXIgX2xvZzIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2xvZzJcIik7XG5cbnZhciBfbW9kID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9tb2RcIik7XG5cbnZhciBfbXVsdGlwbHlTY2FsYXIgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL211bHRpcGx5U2NhbGFyXCIpO1xuXG52YXIgX211bHRpcGx5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9tdWx0aXBseVwiKTtcblxudmFyIF9udGhSb290ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9udGhSb290XCIpO1xuXG52YXIgX3NpZ24gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3NpZ25cIik7XG5cbnZhciBfc3FydCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvc3FydFwiKTtcblxudmFyIF9zcXVhcmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL3NxdWFyZVwiKTtcblxudmFyIF9zdWJ0cmFjdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvc3VidHJhY3RcIik7XG5cbnZhciBfeGdjZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMveGdjZFwiKTtcblxudmFyIF9kb3RNdWx0aXBseSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZG90TXVsdGlwbHlcIik7XG5cbnZhciBfYml0QW5kID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9iaXRBbmRcIik7XG5cbnZhciBfYml0Tm90ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYml0d2lzZS9iaXROb3RcIik7XG5cbnZhciBfYml0T3IgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9iaXR3aXNlL2JpdE9yXCIpO1xuXG52YXIgX2JpdFhvciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvYml0WG9yXCIpO1xuXG52YXIgX2FyZyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2NvbXBsZXgvYXJnXCIpO1xuXG52YXIgX2NvbmogPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21wbGV4L2NvbmpcIik7XG5cbnZhciBfaW0gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9jb21wbGV4L2ltXCIpO1xuXG52YXIgX3JlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tcGxleC9yZVwiKTtcblxudmFyIF9ub3QgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9sb2dpY2FsL25vdFwiKTtcblxudmFyIF9vciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2xvZ2ljYWwvb3JcIik7XG5cbnZhciBfeG9yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbG9naWNhbC94b3JcIik7XG5cbnZhciBfY29uY2F0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2NvbmNhdFwiKTtcblxudmFyIF9jb2x1bW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvY29sdW1uXCIpO1xuXG52YXIgX2Nyb3NzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2Nyb3NzXCIpO1xuXG52YXIgX2RpYWcgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvZGlhZ1wiKTtcblxudmFyIF9leWUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvZXllXCIpO1xuXG52YXIgX2ZpbHRlciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9maWx0ZXJcIik7XG5cbnZhciBfZmxhdHRlbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9mbGF0dGVuXCIpO1xuXG52YXIgX2ZvckVhY2ggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvZm9yRWFjaFwiKTtcblxudmFyIF9nZXRNYXRyaXhEYXRhVHlwZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9nZXRNYXRyaXhEYXRhVHlwZVwiKTtcblxudmFyIF9pZGVudGl0eSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9pZGVudGl0eVwiKTtcblxudmFyIF9rcm9uID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2tyb25cIik7XG5cbnZhciBfbWFwID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L21hcFwiKTtcblxudmFyIF9vbmVzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L29uZXNcIik7XG5cbnZhciBfcmFuZ2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvcmFuZ2VcIik7XG5cbnZhciBfcmVzaGFwZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9yZXNoYXBlXCIpO1xuXG52YXIgX3Jlc2l6ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9yZXNpemVcIik7XG5cbnZhciBfcm93ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3Jvd1wiKTtcblxudmFyIF9zaXplID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3NpemVcIik7XG5cbnZhciBfc3F1ZWV6ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9zcXVlZXplXCIpO1xuXG52YXIgX3N1YnNldCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9zdWJzZXRcIik7XG5cbnZhciBfdHJhbnNwb3NlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3RyYW5zcG9zZVwiKTtcblxudmFyIF9jdHJhbnNwb3NlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2N0cmFuc3Bvc2VcIik7XG5cbnZhciBfemVyb3MgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvemVyb3NcIik7XG5cbnZhciBfZXJmID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3BlY2lhbC9lcmZcIik7XG5cbnZhciBfbW9kZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbW9kZVwiKTtcblxudmFyIF9wcm9kID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9wcm9kXCIpO1xuXG52YXIgX2Zvcm1hdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0cmluZy9mb3JtYXRcIik7XG5cbnZhciBfcHJpbnQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdHJpbmcvcHJpbnRcIik7XG5cbnZhciBfdG8gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91bml0L3RvXCIpO1xuXG52YXIgX2lzUHJpbWUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9pc1ByaW1lXCIpO1xuXG52YXIgX251bWVyaWMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi91dGlscy9udW1lcmljXCIpO1xuXG52YXIgX2RpdmlkZVNjYWxhciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZGl2aWRlU2NhbGFyXCIpO1xuXG52YXIgX3BvdyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvcG93XCIpO1xuXG52YXIgX3JvdW5kID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9yb3VuZFwiKTtcblxudmFyIF9sb2czID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9sb2dcIik7XG5cbnZhciBfbG9nMXAgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2xvZzFwXCIpO1xuXG52YXIgX250aFJvb3RzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9udGhSb290c1wiKTtcblxudmFyIF9kb3RQb3cgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2RvdFBvd1wiKTtcblxudmFyIF9kb3REaXZpZGUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hcml0aG1ldGljL2RvdERpdmlkZVwiKTtcblxudmFyIF9sc29sdmUgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL3NvbHZlci9sc29sdmVcIik7XG5cbnZhciBfdXNvbHZlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9zb2x2ZXIvdXNvbHZlXCIpO1xuXG52YXIgX2xlZnRTaGlmdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvbGVmdFNoaWZ0XCIpO1xuXG52YXIgX3JpZ2h0QXJpdGhTaGlmdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2JpdHdpc2UvcmlnaHRBcml0aFNoaWZ0XCIpO1xuXG52YXIgX3JpZ2h0TG9nU2hpZnQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9iaXR3aXNlL3JpZ2h0TG9nU2hpZnRcIik7XG5cbnZhciBfYW5kID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbG9naWNhbC9hbmRcIik7XG5cbnZhciBfY29tcGFyZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZVwiKTtcblxudmFyIF9jb21wYXJlTmF0dXJhbCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvY29tcGFyZU5hdHVyYWxcIik7XG5cbnZhciBfY29tcGFyZVRleHQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL2NvbXBhcmVUZXh0XCIpO1xuXG52YXIgX2VxdWFsID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9lcXVhbFwiKTtcblxudmFyIF9lcXVhbFRleHQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL2VxdWFsVGV4dFwiKTtcblxudmFyIF9zbWFsbGVyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9zbWFsbGVyXCIpO1xuXG52YXIgX3NtYWxsZXJFcSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvc21hbGxlckVxXCIpO1xuXG52YXIgX2xhcmdlciA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3JlbGF0aW9uYWwvbGFyZ2VyXCIpO1xuXG52YXIgX2xhcmdlckVxID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC9sYXJnZXJFcVwiKTtcblxudmFyIF9kZWVwRXF1YWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9yZWxhdGlvbmFsL2RlZXBFcXVhbFwiKTtcblxudmFyIF91bmVxdWFsID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcmVsYXRpb25hbC91bmVxdWFsXCIpO1xuXG52YXIgX3BhcnRpdGlvblNlbGVjdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9wYXJ0aXRpb25TZWxlY3RcIik7XG5cbnZhciBfc29ydCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9zb3J0XCIpO1xuXG52YXIgX21heCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWF4XCIpO1xuXG52YXIgX21pbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3MvbWluXCIpO1xuXG52YXIgX0ltbXV0YWJsZURlbnNlTWF0cml4ID0gcmVxdWlyZShcIi4vdHlwZS9tYXRyaXgvSW1tdXRhYmxlRGVuc2VNYXRyaXhcIik7XG5cbnZhciBfTWF0cml4SW5kZXggPSByZXF1aXJlKFwiLi90eXBlL21hdHJpeC9NYXRyaXhJbmRleFwiKTtcblxudmFyIF9GaWJvbmFjY2lIZWFwID0gcmVxdWlyZShcIi4vdHlwZS9tYXRyaXgvRmlib25hY2NpSGVhcFwiKTtcblxudmFyIF9TcGEgPSByZXF1aXJlKFwiLi90eXBlL21hdHJpeC9TcGFcIik7XG5cbnZhciBfVW5pdCA9IHJlcXVpcmUoXCIuL3R5cGUvdW5pdC9Vbml0XCIpO1xuXG52YXIgX3VuaXQgPSByZXF1aXJlKFwiLi90eXBlL3VuaXQvZnVuY3Rpb24vdW5pdFwiKTtcblxudmFyIF9zcGFyc2UgPSByZXF1aXJlKFwiLi90eXBlL21hdHJpeC9mdW5jdGlvbi9zcGFyc2VcIik7XG5cbnZhciBfY3JlYXRlVW5pdCA9IHJlcXVpcmUoXCIuL3R5cGUvdW5pdC9mdW5jdGlvbi9jcmVhdGVVbml0XCIpO1xuXG52YXIgX2Fjb3MgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvc1wiKTtcblxudmFyIF9hY29zaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY29zaFwiKTtcblxudmFyIF9hY290ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjb3RcIik7XG5cbnZhciBfYWNvdGggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYWNvdGhcIik7XG5cbnZhciBfYWNzYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hY3NjXCIpO1xuXG52YXIgX2Fjc2NoID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2Fjc2NoXCIpO1xuXG52YXIgX2FzZWMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXNlY1wiKTtcblxudmFyIF9hc2VjaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hc2VjaFwiKTtcblxudmFyIF9hc2luID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2FzaW5cIik7XG5cbnZhciBfYXNpbmggPSByZXF1aXJlKFwiLi9mdW5jdGlvbi90cmlnb25vbWV0cnkvYXNpbmhcIik7XG5cbnZhciBfYXRhbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9hdGFuXCIpO1xuXG52YXIgX2F0YW4yID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2F0YW4yXCIpO1xuXG52YXIgX2F0YW5oID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vdHJpZ29ub21ldHJ5L2F0YW5oXCIpO1xuXG52YXIgX2NvcyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3NcIik7XG5cbnZhciBfY29zaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3NoXCIpO1xuXG52YXIgX2NvdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3RcIik7XG5cbnZhciBfY290aCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jb3RoXCIpO1xuXG52YXIgX2NzYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jc2NcIik7XG5cbnZhciBfY3NjaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9jc2NoXCIpO1xuXG52YXIgX3NlYyA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9zZWNcIik7XG5cbnZhciBfc2VjaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9zZWNoXCIpO1xuXG52YXIgX3NpbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9zaW5cIik7XG5cbnZhciBfc2luaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS9zaW5oXCIpO1xuXG52YXIgX3RhbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS90YW5cIik7XG5cbnZhciBfdGFuaCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3RyaWdvbm9tZXRyeS90YW5oXCIpO1xuXG52YXIgX3NldENhcnRlc2lhbiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3NldC9zZXRDYXJ0ZXNpYW5cIik7XG5cbnZhciBfc2V0RGlmZmVyZW5jZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3NldC9zZXREaWZmZXJlbmNlXCIpO1xuXG52YXIgX3NldERpc3RpbmN0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldERpc3RpbmN0XCIpO1xuXG52YXIgX3NldEludGVyc2VjdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3NldC9zZXRJbnRlcnNlY3RcIik7XG5cbnZhciBfc2V0SXNTdWJzZXQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zZXQvc2V0SXNTdWJzZXRcIik7XG5cbnZhciBfc2V0TXVsdGlwbGljaXR5ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldE11bHRpcGxpY2l0eVwiKTtcblxudmFyIF9zZXRQb3dlcnNldCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3NldC9zZXRQb3dlcnNldFwiKTtcblxudmFyIF9zZXRTaXplID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldFNpemVcIik7XG5cbnZhciBfc2V0U3ltRGlmZmVyZW5jZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3NldC9zZXRTeW1EaWZmZXJlbmNlXCIpO1xuXG52YXIgX3NldFVuaW9uID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc2V0L3NldFVuaW9uXCIpO1xuXG52YXIgX2FkZCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvYWRkXCIpO1xuXG52YXIgX2h5cG90ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9oeXBvdFwiKTtcblxudmFyIF9ub3JtID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYXJpdGhtZXRpYy9ub3JtXCIpO1xuXG52YXIgX2RvdCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9kb3RcIik7XG5cbnZhciBfdHJhY2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvdHJhY2VcIik7XG5cbnZhciBfZnVuY3Rpb24gPSByZXF1aXJlKFwiLi90eXBlL21hdHJpeC9mdW5jdGlvblwiKTtcblxudmFyIF9Ob2RlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9ub2RlL05vZGVcIik7XG5cbnZhciBfQWNjZXNzb3JOb2RlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9ub2RlL0FjY2Vzc29yTm9kZVwiKTtcblxudmFyIF9BcnJheU5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvQXJyYXlOb2RlXCIpO1xuXG52YXIgX0Fzc2lnbm1lbnROb2RlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9ub2RlL0Fzc2lnbm1lbnROb2RlXCIpO1xuXG52YXIgX0Jsb2NrTm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9CbG9ja05vZGVcIik7XG5cbnZhciBfQ29uZGl0aW9uYWxOb2RlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9ub2RlL0NvbmRpdGlvbmFsTm9kZVwiKTtcblxudmFyIF9Db25zdGFudE5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvQ29uc3RhbnROb2RlXCIpO1xuXG52YXIgX0Z1bmN0aW9uQXNzaWdubWVudE5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZVwiKTtcblxudmFyIF9JbmRleE5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvSW5kZXhOb2RlXCIpO1xuXG52YXIgX09iamVjdE5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvT2JqZWN0Tm9kZVwiKTtcblxudmFyIF9PcGVyYXRvck5vZGUgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL25vZGUvT3BlcmF0b3JOb2RlXCIpO1xuXG52YXIgX1BhcmVudGhlc2lzTm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9QYXJlbnRoZXNpc05vZGVcIik7XG5cbnZhciBfUmFuZ2VOb2RlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9ub2RlL1JhbmdlTm9kZVwiKTtcblxudmFyIF9SZWxhdGlvbmFsTm9kZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vbm9kZS9SZWxhdGlvbmFsTm9kZVwiKTtcblxudmFyIF9TeW1ib2xOb2RlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9ub2RlL1N5bWJvbE5vZGVcIik7XG5cbnZhciBfRnVuY3Rpb25Ob2RlID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi9ub2RlL0Z1bmN0aW9uTm9kZVwiKTtcblxudmFyIF9wYXJzZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vcGFyc2VcIik7XG5cbnZhciBfY29tcGlsZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vZnVuY3Rpb24vY29tcGlsZVwiKTtcblxudmFyIF9ldmFsdWF0ZSA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vZnVuY3Rpb24vZXZhbHVhdGVcIik7XG5cbnZhciBfZXZhbCA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vZnVuY3Rpb24vZXZhbFwiKTtcblxudmFyIF9QYXJzZXIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL1BhcnNlclwiKTtcblxudmFyIF9wYXJzZXIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL2Z1bmN0aW9uL3BhcnNlclwiKTtcblxudmFyIF9sdXAgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9hbGdlYnJhL2RlY29tcG9zaXRpb24vbHVwXCIpO1xuXG52YXIgX3FyID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vYWxnZWJyYS9kZWNvbXBvc2l0aW9uL3FyXCIpO1xuXG52YXIgX3NsdSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvZGVjb21wb3NpdGlvbi9zbHVcIik7XG5cbnZhciBfbHVzb2x2ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvc29sdmVyL2x1c29sdmVcIik7XG5cbnZhciBfSGVscCA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vSGVscFwiKTtcblxudmFyIF9DaGFpbiA9IHJlcXVpcmUoXCIuL3R5cGUvY2hhaW4vQ2hhaW5cIik7XG5cbnZhciBfaGVscCA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vZnVuY3Rpb24vaGVscFwiKTtcblxudmFyIF9jaGFpbiA9IHJlcXVpcmUoXCIuL3R5cGUvY2hhaW4vZnVuY3Rpb24vY2hhaW5cIik7XG5cbnZhciBfZGV0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L2RldFwiKTtcblxudmFyIF9pbnYgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvaW52XCIpO1xuXG52YXIgX2VpZ3MgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9tYXRyaXgvZWlnc1wiKTtcblxudmFyIF9leHBtMiA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL21hdHJpeC9leHBtXCIpO1xuXG52YXIgX3NxcnRtID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vbWF0cml4L3NxcnRtXCIpO1xuXG52YXIgX2RpdmlkZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FyaXRobWV0aWMvZGl2aWRlXCIpO1xuXG52YXIgX2Rpc3RhbmNlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vZ2VvbWV0cnkvZGlzdGFuY2VcIik7XG5cbnZhciBfaW50ZXJzZWN0ID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vZ2VvbWV0cnkvaW50ZXJzZWN0XCIpO1xuXG52YXIgX3N1bSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3N0YXRpc3RpY3Mvc3VtXCIpO1xuXG52YXIgX21lYW4gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL21lYW5cIik7XG5cbnZhciBfbWVkaWFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9tZWRpYW5cIik7XG5cbnZhciBfbWFkID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9tYWRcIik7XG5cbnZhciBfdmFyaWFuY2UgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3ZhcmlhbmNlXCIpO1xuXG52YXIgX3F1YW50aWxlU2VxID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vc3RhdGlzdGljcy9xdWFudGlsZVNlcVwiKTtcblxudmFyIF9zdGQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9zdGF0aXN0aWNzL3N0ZFwiKTtcblxudmFyIF9jb21iaW5hdGlvbnMgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9jb21iaW5hdGlvbnNcIik7XG5cbnZhciBfY29tYmluYXRpb25zV2l0aFJlcCA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L2NvbWJpbmF0aW9uc1dpdGhSZXBcIik7XG5cbnZhciBfZ2FtbWEgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9nYW1tYVwiKTtcblxudmFyIF9mYWN0b3JpYWwgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9mYWN0b3JpYWxcIik7XG5cbnZhciBfa2xkaXZlcmdlbmNlID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcHJvYmFiaWxpdHkva2xkaXZlcmdlbmNlXCIpO1xuXG52YXIgX211bHRpbm9taWFsID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcHJvYmFiaWxpdHkvbXVsdGlub21pYWxcIik7XG5cbnZhciBfcGVybXV0YXRpb25zID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vcHJvYmFiaWxpdHkvcGVybXV0YXRpb25zXCIpO1xuXG52YXIgX3BpY2tSYW5kb20gPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9waWNrUmFuZG9tXCIpO1xuXG52YXIgX3JhbmRvbSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL3Byb2JhYmlsaXR5L3JhbmRvbVwiKTtcblxudmFyIF9yYW5kb21JbnQgPSByZXF1aXJlKFwiLi9mdW5jdGlvbi9wcm9iYWJpbGl0eS9yYW5kb21JbnRcIik7XG5cbnZhciBfc3RpcmxpbmdTID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tYmluYXRvcmljcy9zdGlybGluZ1MyXCIpO1xuXG52YXIgX2JlbGxOdW1iZXJzID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tYmluYXRvcmljcy9iZWxsTnVtYmVyc1wiKTtcblxudmFyIF9jYXRhbGFuID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tYmluYXRvcmljcy9jYXRhbGFuXCIpO1xuXG52YXIgX2NvbXBvc2l0aW9uID0gcmVxdWlyZShcIi4vZnVuY3Rpb24vY29tYmluYXRvcmljcy9jb21wb3NpdGlvblwiKTtcblxudmFyIF9zaW1wbGlmeSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvc2ltcGxpZnlcIik7XG5cbnZhciBfZGVyaXZhdGl2ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvZGVyaXZhdGl2ZVwiKTtcblxudmFyIF9yYXRpb25hbGl6ZSA9IHJlcXVpcmUoXCIuL2Z1bmN0aW9uL2FsZ2VicmEvcmF0aW9uYWxpemVcIik7XG5cbnZhciBfcmV2aXZlciA9IHJlcXVpcmUoXCIuL2pzb24vcmV2aXZlclwiKTtcblxudmFyIF9yZXBsYWNlciA9IHJlcXVpcmUoXCIuL2pzb24vcmVwbGFjZXJcIik7XG5cbnZhciBfY29uc3RhbnRzID0gcmVxdWlyZShcIi4vY29uc3RhbnRzXCIpO1xuXG52YXIgX3BoeXNpY2FsQ29uc3RhbnRzID0gcmVxdWlyZShcIi4vdHlwZS91bml0L3BoeXNpY2FsQ29uc3RhbnRzXCIpO1xuXG52YXIgX2FwcGx5MiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL2FwcGx5LnRyYW5zZm9ybVwiKTtcblxudmFyIF9jb2x1bW4yID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi90cmFuc2Zvcm0vY29sdW1uLnRyYW5zZm9ybVwiKTtcblxudmFyIF9maWx0ZXIyID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi90cmFuc2Zvcm0vZmlsdGVyLnRyYW5zZm9ybVwiKTtcblxudmFyIF9mb3JFYWNoMiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL2ZvckVhY2gudHJhbnNmb3JtXCIpO1xuXG52YXIgX2luZGV4ID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi90cmFuc2Zvcm0vaW5kZXgudHJhbnNmb3JtXCIpO1xuXG52YXIgX21hcDIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9tYXAudHJhbnNmb3JtXCIpO1xuXG52YXIgX21heDIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9tYXgudHJhbnNmb3JtXCIpO1xuXG52YXIgX21lYW4yID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi90cmFuc2Zvcm0vbWVhbi50cmFuc2Zvcm1cIik7XG5cbnZhciBfbWluMiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL21pbi50cmFuc2Zvcm1cIik7XG5cbnZhciBfcmFuZ2UyID0gcmVxdWlyZShcIi4vZXhwcmVzc2lvbi90cmFuc2Zvcm0vcmFuZ2UudHJhbnNmb3JtXCIpO1xuXG52YXIgX3JvdzIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9yb3cudHJhbnNmb3JtXCIpO1xuXG52YXIgX3N1YnNldDIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9zdWJzZXQudHJhbnNmb3JtXCIpO1xuXG52YXIgX2NvbmNhdDIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9jb25jYXQudHJhbnNmb3JtXCIpO1xuXG52YXIgX3N0ZDIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9zdGQudHJhbnNmb3JtXCIpO1xuXG52YXIgX3N1bTIgPSByZXF1aXJlKFwiLi9leHByZXNzaW9uL3RyYW5zZm9ybS9zdW0udHJhbnNmb3JtXCIpO1xuXG52YXIgX3ZhcmlhbmNlMiA9IHJlcXVpcmUoXCIuL2V4cHJlc3Npb24vdHJhbnNmb3JtL3ZhcmlhbmNlLnRyYW5zZm9ybVwiKTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTHVwID0gdm9pZCAwO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdsdXAnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2FicycsICdhZGRTY2FsYXInLCAnZGl2aWRlU2NhbGFyJywgJ211bHRpcGx5U2NhbGFyJywgJ3N1YnRyYWN0JywgJ2xhcmdlcicsICdlcXVhbFNjYWxhcicsICd1bmFyeU1pbnVzJywgJ0RlbnNlTWF0cml4JywgJ1NwYXJzZU1hdHJpeCcsICdTcGEnXTtcbnZhciBjcmVhdGVMdXAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBhYnMgPSBfcmVmLmFicyxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXIsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBsYXJnZXIgPSBfcmVmLmxhcmdlcixcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIHVuYXJ5TWludXMgPSBfcmVmLnVuYXJ5TWludXMsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXgsXG4gICAgICBTcGFyc2VNYXRyaXggPSBfcmVmLlNwYXJzZU1hdHJpeCxcbiAgICAgIFNwYSA9IF9yZWYuU3BhO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIE1hdHJpeCBMVSBkZWNvbXBvc2l0aW9uIHdpdGggcGFydGlhbCBwaXZvdGluZy4gTWF0cml4IGBBYCBpcyBkZWNvbXBvc2VkIGluIHR3byBtYXRyaWNlcyAoYExgLCBgVWApIGFuZCBhXG4gICAqIHJvdyBwZXJtdXRhdGlvbiB2ZWN0b3IgYHBgIHdoZXJlIGBBW3AsOl0gPSBMICogVWBcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmx1cChBKVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKlxuICAgKiAgICBjb25zdCBtID0gW1syLCAxXSwgWzEsIDRdXVxuICAgKiAgICBjb25zdCByID0gbWF0aC5sdXAobSlcbiAgICogICAgLy8gciA9IHtcbiAgICogICAgLy8gICBMOiBbWzEsIDBdLCBbMC41LCAxXV0sXG4gICAqICAgIC8vICAgVTogW1syLCAxXSwgWzAsIDMuNV1dLFxuICAgKiAgICAvLyAgIFA6IFswLCAxXVxuICAgKiAgICAvLyB9XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzbHUsIGxzb2x2ZSwgbHVzb2x2ZSwgdXNvbHZlXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IEEgICAgQSB0d28gZGltZW5zaW9uYWwgbWF0cml4IG9yIGFycmF5IGZvciB3aGljaCB0byBnZXQgdGhlIExVUCBkZWNvbXBvc2l0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJuIHt7TDogQXJyYXkgfCBNYXRyaXgsIFU6IEFycmF5IHwgTWF0cml4LCBQOiBBcnJheS48bnVtYmVyPn19IFRoZSBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeCwgdGhlIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4IGFuZCB0aGUgcGVybXV0YXRpb24gbWF0cml4LlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICBEZW5zZU1hdHJpeDogZnVuY3Rpb24gRGVuc2VNYXRyaXgobSkge1xuICAgICAgcmV0dXJuIF9kZW5zZUxVUChtKTtcbiAgICB9LFxuICAgIFNwYXJzZU1hdHJpeDogZnVuY3Rpb24gU3BhcnNlTWF0cml4KG0pIHtcbiAgICAgIHJldHVybiBfc3BhcnNlTFVQKG0pO1xuICAgIH0sXG4gICAgQXJyYXk6IGZ1bmN0aW9uIEFycmF5KGEpIHtcbiAgICAgIC8vIGNyZWF0ZSBkZW5zZSBtYXRyaXggZnJvbSBhcnJheVxuICAgICAgdmFyIG0gPSBtYXRyaXgoYSk7IC8vIGx1cCwgdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuXG4gICAgICB2YXIgciA9IF9kZW5zZUxVUChtKTsgLy8gcmVzdWx0XG5cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgTDogci5MLnZhbHVlT2YoKSxcbiAgICAgICAgVTogci5VLnZhbHVlT2YoKSxcbiAgICAgICAgcDogci5wXG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gX2RlbnNlTFVQKG0pIHtcbiAgICAvLyByb3dzICYgY29sdW1uc1xuICAgIHZhciByb3dzID0gbS5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IG0uX3NpemVbMV07IC8vIG1pbmltdW0gcm93cyBhbmQgY29sdW1uc1xuXG4gICAgdmFyIG4gPSBNYXRoLm1pbihyb3dzLCBjb2x1bW5zKTsgLy8gbWF0cml4IGFycmF5LCBjbG9uZSBvcmlnaW5hbCBkYXRhXG5cbiAgICB2YXIgZGF0YSA9ICgwLCBfb2JqZWN0LmNsb25lKShtLl9kYXRhKTsgLy8gbCBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgbGRhdGEgPSBbXTtcbiAgICB2YXIgbHNpemUgPSBbcm93cywgbl07IC8vIHUgbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIHVkYXRhID0gW107XG4gICAgdmFyIHVzaXplID0gW24sIGNvbHVtbnNdOyAvLyB2YXJzXG5cbiAgICB2YXIgaSwgaiwgazsgLy8gcGVybXV0YXRpb24gdmVjdG9yXG5cbiAgICB2YXIgcCA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgcFtpXSA9IGk7XG4gICAgfSAvLyBsb29wIGNvbHVtbnNcblxuXG4gICAgZm9yIChqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gc2tpcCBmaXJzdCBjb2x1bW4gaW4gdXBwZXIgdHJpYW5ndWxhciBtYXRyaXhcbiAgICAgIGlmIChqID4gMCkge1xuICAgICAgICAvLyBsb29wIHJvd3NcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgIC8vIG1pbiBpLGpcbiAgICAgICAgICB2YXIgbWluID0gTWF0aC5taW4oaSwgaik7IC8vIHZbaSwgal1cblxuICAgICAgICAgIHZhciBzID0gMDsgLy8gbG9vcCB1cCB0byBtaW5cblxuICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBtaW47IGsrKykge1xuICAgICAgICAgICAgLy8gcyA9IGxbaSwga10gLSBkYXRhW2ssIGpdXG4gICAgICAgICAgICBzID0gYWRkU2NhbGFyKHMsIG11bHRpcGx5U2NhbGFyKGRhdGFbaV1ba10sIGRhdGFba11bal0pKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkYXRhW2ldW2pdID0gc3VidHJhY3QoZGF0YVtpXVtqXSwgcyk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gcm93IHdpdGggbGFyZ2VyIHZhbHVlIGluIGN2ZWN0b3IsIHJvdyA+PSBqXG5cblxuICAgICAgdmFyIHBpID0gajtcbiAgICAgIHZhciBwYWJzdiA9IDA7XG4gICAgICB2YXIgdmpqID0gMDsgLy8gbG9vcCByb3dzXG5cbiAgICAgIGZvciAoaSA9IGo7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgLy8gZGF0YSBAIGksIGpcbiAgICAgICAgdmFyIHYgPSBkYXRhW2ldW2pdOyAvLyBhYnNvbHV0ZSB2YWx1ZVxuXG4gICAgICAgIHZhciBhYnN2ID0gYWJzKHYpOyAvLyB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gcGl2b3RlIHZhbHVlXG5cbiAgICAgICAgaWYgKGxhcmdlcihhYnN2LCBwYWJzdikpIHtcbiAgICAgICAgICAvLyBzdG9yZSByb3dcbiAgICAgICAgICBwaSA9IGk7IC8vIHVwZGF0ZSBtYXggdmFsdWVcblxuICAgICAgICAgIHBhYnN2ID0gYWJzdjsgLy8gdmFsdWUgQCBbaiwgal1cblxuICAgICAgICAgIHZqaiA9IHY7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gc3dhcCByb3dzIChqIDwtPiBwaSlcblxuXG4gICAgICBpZiAoaiAhPT0gcGkpIHtcbiAgICAgICAgLy8gc3dhcCB2YWx1ZXMgaiA8LT4gcGkgaW4gcFxuICAgICAgICBwW2pdID0gW3BbcGldLCBwW3BpXSA9IHBbal1dWzBdOyAvLyBzd2FwIGogPC0+IHBpIGluIGRhdGFcblxuICAgICAgICBEZW5zZU1hdHJpeC5fc3dhcFJvd3MoaiwgcGksIGRhdGEpO1xuICAgICAgfSAvLyBjaGVjayBjb2x1bW4gaXMgaW4gbG93ZXIgdHJpYW5ndWxhciBtYXRyaXhcblxuXG4gICAgICBpZiAoaiA8IHJvd3MpIHtcbiAgICAgICAgLy8gbG9vcCByb3dzIChsb3dlciB0cmlhbmd1bGFyIG1hdHJpeClcbiAgICAgICAgZm9yIChpID0gaiArIDE7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAvLyB2YWx1ZSBAIGksIGpcbiAgICAgICAgICB2YXIgdmlqID0gZGF0YVtpXVtqXTtcblxuICAgICAgICAgIGlmICghZXF1YWxTY2FsYXIodmlqLCAwKSkge1xuICAgICAgICAgICAgLy8gdXBkYXRlIGRhdGFcbiAgICAgICAgICAgIGRhdGFbaV1bal0gPSBkaXZpZGVTY2FsYXIoZGF0YVtpXVtqXSwgdmpqKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIGxvb3AgY29sdW1uc1xuXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBsb29wIHJvd3NcbiAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSByb3cgaW4gYXJyYXlzXG4gICAgICAgIGlmIChqID09PSAwKSB7XG4gICAgICAgICAgLy8gY2hlY2sgcm93IGV4aXN0cyBpbiB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeFxuICAgICAgICAgIGlmIChpIDwgY29sdW1ucykge1xuICAgICAgICAgICAgLy8gVVxuICAgICAgICAgICAgdWRhdGFbaV0gPSBbXTtcbiAgICAgICAgICB9IC8vIExcblxuXG4gICAgICAgICAgbGRhdGFbaV0gPSBbXTtcbiAgICAgICAgfSAvLyBjaGVjayB3ZSBhcmUgaW4gdGhlIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XG5cblxuICAgICAgICBpZiAoaSA8IGopIHtcbiAgICAgICAgICAvLyBjaGVjayByb3cgZXhpc3RzIGluIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XG4gICAgICAgICAgaWYgKGkgPCBjb2x1bW5zKSB7XG4gICAgICAgICAgICAvLyBVXG4gICAgICAgICAgICB1ZGF0YVtpXVtqXSA9IGRhdGFbaV1bal07XG4gICAgICAgICAgfSAvLyBjaGVjayBjb2x1bW4gZXhpc3RzIGluIGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4XG5cblxuICAgICAgICAgIGlmIChqIDwgcm93cykge1xuICAgICAgICAgICAgLy8gTFxuICAgICAgICAgICAgbGRhdGFbaV1bal0gPSAwO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IC8vIGRpYWdvbmFsIHZhbHVlXG5cblxuICAgICAgICBpZiAoaSA9PT0gaikge1xuICAgICAgICAgIC8vIGNoZWNrIHJvdyBleGlzdHMgaW4gdXBwZXIgdHJpYW5ndWxhciBtYXRyaXhcbiAgICAgICAgICBpZiAoaSA8IGNvbHVtbnMpIHtcbiAgICAgICAgICAgIC8vIFVcbiAgICAgICAgICAgIHVkYXRhW2ldW2pdID0gZGF0YVtpXVtqXTtcbiAgICAgICAgICB9IC8vIGNoZWNrIGNvbHVtbiBleGlzdHMgaW4gbG93ZXIgdHJpYW5ndWxhciBtYXRyaXhcblxuXG4gICAgICAgICAgaWYgKGogPCByb3dzKSB7XG4gICAgICAgICAgICAvLyBMXG4gICAgICAgICAgICBsZGF0YVtpXVtqXSA9IDE7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gLy8gY2hlY2sgcm93IGV4aXN0cyBpbiB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeFxuXG5cbiAgICAgICAgaWYgKGkgPCBjb2x1bW5zKSB7XG4gICAgICAgICAgLy8gVVxuICAgICAgICAgIHVkYXRhW2ldW2pdID0gMDtcbiAgICAgICAgfSAvLyBjaGVjayBjb2x1bW4gZXhpc3RzIGluIGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4XG5cblxuICAgICAgICBpZiAoaiA8IHJvd3MpIHtcbiAgICAgICAgICAvLyBMXG4gICAgICAgICAgbGRhdGFbaV1bal0gPSBkYXRhW2ldW2pdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBsIG1hdHJpeFxuXG5cbiAgICB2YXIgbCA9IG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiBsZGF0YSxcbiAgICAgIHNpemU6IGxzaXplXG4gICAgfSk7IC8vIHUgbWF0cml4XG5cbiAgICB2YXIgdSA9IG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiB1ZGF0YSxcbiAgICAgIHNpemU6IHVzaXplXG4gICAgfSk7IC8vIHAgdmVjdG9yXG5cbiAgICB2YXIgcHYgPSBbXTtcblxuICAgIGZvciAoaSA9IDAsIG4gPSBwLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgcHZbcFtpXV0gPSBpO1xuICAgIH0gLy8gcmV0dXJuIG1hdHJpY2VzXG5cblxuICAgIHJldHVybiB7XG4gICAgICBMOiBsLFxuICAgICAgVTogdSxcbiAgICAgIHA6IHB2LFxuICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gJ0w6ICcgKyB0aGlzLkwudG9TdHJpbmcoKSArICdcXG5VOiAnICsgdGhpcy5VLnRvU3RyaW5nKCkgKyAnXFxuUDogJyArIHRoaXMucDtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gX3NwYXJzZUxVUChtKSB7XG4gICAgLy8gcm93cyAmIGNvbHVtbnNcbiAgICB2YXIgcm93cyA9IG0uX3NpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBtLl9zaXplWzFdOyAvLyBtaW5pbXVtIHJvd3MgYW5kIGNvbHVtbnNcblxuICAgIHZhciBuID0gTWF0aC5taW4ocm93cywgY29sdW1ucyk7IC8vIG1hdHJpeCBhcnJheXMgKHdpbGwgbm90IGJlIG1vZGlmaWVkLCB0aGFua3MgdG8gcGVybXV0YXRpb24gdmVjdG9yKVxuXG4gICAgdmFyIHZhbHVlcyA9IG0uX3ZhbHVlcztcbiAgICB2YXIgaW5kZXggPSBtLl9pbmRleDtcbiAgICB2YXIgcHRyID0gbS5fcHRyOyAvLyBsIG1hdHJpeCBhcnJheXNcblxuICAgIHZhciBsdmFsdWVzID0gW107XG4gICAgdmFyIGxpbmRleCA9IFtdO1xuICAgIHZhciBscHRyID0gW107XG4gICAgdmFyIGxzaXplID0gW3Jvd3MsIG5dOyAvLyB1IG1hdHJpeCBhcnJheXNcblxuICAgIHZhciB1dmFsdWVzID0gW107XG4gICAgdmFyIHVpbmRleCA9IFtdO1xuICAgIHZhciB1cHRyID0gW107XG4gICAgdmFyIHVzaXplID0gW24sIGNvbHVtbnNdOyAvLyB2YXJzXG5cbiAgICB2YXIgaSwgaiwgazsgLy8gcGVybXV0YXRpb24gdmVjdG9ycywgKGN1cnJlbnQgaW5kZXggLT4gb3JpZ2luYWwgaW5kZXgpIGFuZCAob3JpZ2luYWwgaW5kZXggLT4gY3VycmVudCBpbmRleClcblxuICAgIHZhciBwdkNvID0gW107XG4gICAgdmFyIHB2T2MgPSBbXTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIHB2Q29baV0gPSBpO1xuICAgICAgcHZPY1tpXSA9IGk7XG4gICAgfSAvLyBzd2FwIGluZGljZXMgaW4gcGVybXV0YXRpb24gdmVjdG9ycyAoY29uZGl0aW9uIHggPCB5KSFcblxuXG4gICAgdmFyIHN3YXBJbmRlY2VzID0gZnVuY3Rpb24gc3dhcEluZGVjZXMoeCwgeSkge1xuICAgICAgLy8gZmluZCBwdiBpbmRlY2VzIGdldHRpbmcgZGF0YSBmcm9tIHggYW5kIHlcbiAgICAgIHZhciBreCA9IHB2T2NbeF07XG4gICAgICB2YXIga3kgPSBwdk9jW3ldOyAvLyB1cGRhdGUgcGVybXV0YXRpb24gdmVjdG9yIGN1cnJlbnQgLT4gb3JpZ2luYWxcblxuICAgICAgcHZDb1treF0gPSB5O1xuICAgICAgcHZDb1treV0gPSB4OyAvLyB1cGRhdGUgcGVybXV0YXRpb24gdmVjdG9yIG9yaWdpbmFsIC0+IGN1cnJlbnRcblxuICAgICAgcHZPY1t4XSA9IGt5O1xuICAgICAgcHZPY1t5XSA9IGt4O1xuICAgIH07IC8vIGxvb3AgY29sdW1uc1xuXG5cbiAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcCgpIHtcbiAgICAgIC8vIHNwYXJzZSBhY2N1bXVsYXRvclxuICAgICAgdmFyIHNwYSA9IG5ldyBTcGEoKTsgLy8gY2hlY2sgbG93ZXIgdHJpYW5ndWxhciBtYXRyaXggaGFzIGEgdmFsdWUgQCBjb2x1bW4galxuXG4gICAgICBpZiAoaiA8IHJvd3MpIHtcbiAgICAgICAgLy8gdXBkYXRlIHB0clxuICAgICAgICBscHRyLnB1c2gobHZhbHVlcy5sZW5ndGgpOyAvLyBmaXJzdCB2YWx1ZSBpbiBqIGNvbHVtbiBmb3IgbG93ZXIgdHJpYW5ndWxhciBtYXRyaXhcblxuICAgICAgICBsdmFsdWVzLnB1c2goMSk7XG4gICAgICAgIGxpbmRleC5wdXNoKGopO1xuICAgICAgfSAvLyB1cGRhdGUgcHRyXG5cblxuICAgICAgdXB0ci5wdXNoKHV2YWx1ZXMubGVuZ3RoKTsgLy8gazAgPD0gayA8IGsxIHdoZXJlIGswID0gX3B0cltqXSAmJiBrMSA9IF9wdHJbaisxXVxuXG4gICAgICB2YXIgazAgPSBwdHJbal07XG4gICAgICB2YXIgazEgPSBwdHJbaiArIDFdOyAvLyBjb3B5IGNvbHVtbiBqIGludG8gc3BhcnNlIGFjY3VtdWxhdG9yXG5cbiAgICAgIGZvciAoayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgICAvLyByb3dcbiAgICAgICAgaSA9IGluZGV4W2tdOyAvLyBjb3B5IGNvbHVtbiB2YWx1ZXMgaW50byBzcGFyc2UgYWNjdW11bGF0b3IgKHVzZSBwZXJtdXRhdGlvbiB2ZWN0b3IpXG5cbiAgICAgICAgc3BhLnNldChwdkNvW2ldLCB2YWx1ZXNba10pO1xuICAgICAgfSAvLyBza2lwIGZpcnN0IGNvbHVtbiBpbiB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeFxuXG5cbiAgICAgIGlmIChqID4gMCkge1xuICAgICAgICAvLyBsb29wIHJvd3MgaW4gY29sdW1uIGogKGFib3ZlIGRpYWdvbmFsKVxuICAgICAgICBzcGEuZm9yRWFjaCgwLCBqIC0gMSwgZnVuY3Rpb24gKGssIHZraikge1xuICAgICAgICAgIC8vIGxvb3Agcm93cyBpbiBjb2x1bW4gayAoTClcbiAgICAgICAgICBTcGFyc2VNYXRyaXguX2ZvckVhY2hSb3coaywgbHZhbHVlcywgbGluZGV4LCBscHRyLCBmdW5jdGlvbiAoaSwgdmlrKSB7XG4gICAgICAgICAgICAvLyBjaGVjayByb3cgaXMgYmVsb3cga1xuICAgICAgICAgICAgaWYgKGkgPiBrKSB7XG4gICAgICAgICAgICAgIC8vIHVwZGF0ZSBzcGEgdmFsdWVcbiAgICAgICAgICAgICAgc3BhLmFjY3VtdWxhdGUoaSwgdW5hcnlNaW51cyhtdWx0aXBseVNjYWxhcih2aWssIHZraikpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9IC8vIHJvdyB3aXRoIGxhcmdlciB2YWx1ZSBpbiBzcGEsIHJvdyA+PSBqXG5cblxuICAgICAgdmFyIHBpID0gajtcbiAgICAgIHZhciB2amogPSBzcGEuZ2V0KGopO1xuICAgICAgdmFyIHBhYnN2ID0gYWJzKHZqaik7IC8vIGxvb3AgdmFsdWVzIGluIHNwYSAob3JkZXIgYnkgcm93LCBiZWxvdyBkaWFnb25hbClcblxuICAgICAgc3BhLmZvckVhY2goaiArIDEsIHJvd3MgLSAxLCBmdW5jdGlvbiAoeCwgdikge1xuICAgICAgICAvLyBhYnNvbHV0ZSB2YWx1ZVxuICAgICAgICB2YXIgYWJzdiA9IGFicyh2KTsgLy8gdmFsdWUgaXMgZ3JlYXRlciB0aGFuIHBpdm90ZSB2YWx1ZVxuXG4gICAgICAgIGlmIChsYXJnZXIoYWJzdiwgcGFic3YpKSB7XG4gICAgICAgICAgLy8gc3RvcmUgcm93XG4gICAgICAgICAgcGkgPSB4OyAvLyB1cGRhdGUgbWF4IHZhbHVlXG5cbiAgICAgICAgICBwYWJzdiA9IGFic3Y7IC8vIHZhbHVlIEAgW2osIGpdXG5cbiAgICAgICAgICB2amogPSB2O1xuICAgICAgICB9XG4gICAgICB9KTsgLy8gc3dhcCByb3dzIChqIDwtPiBwaSlcblxuICAgICAgaWYgKGogIT09IHBpKSB7XG4gICAgICAgIC8vIHN3YXAgdmFsdWVzIGogPC0+IHBpIGluIExcbiAgICAgICAgU3BhcnNlTWF0cml4Ll9zd2FwUm93cyhqLCBwaSwgbHNpemVbMV0sIGx2YWx1ZXMsIGxpbmRleCwgbHB0cik7IC8vIHN3YXAgdmFsdWVzIGogPC0+IHBpIGluIFVcblxuXG4gICAgICAgIFNwYXJzZU1hdHJpeC5fc3dhcFJvd3MoaiwgcGksIHVzaXplWzFdLCB1dmFsdWVzLCB1aW5kZXgsIHVwdHIpOyAvLyBzd2FwIHZhbHVlcyBpbiBzcGFcblxuXG4gICAgICAgIHNwYS5zd2FwKGosIHBpKTsgLy8gdXBkYXRlIHBlcm11dGF0aW9uIHZlY3RvciAoc3dhcCB2YWx1ZXMgQCBqLCBwaSlcblxuICAgICAgICBzd2FwSW5kZWNlcyhqLCBwaSk7XG4gICAgICB9IC8vIGxvb3AgdmFsdWVzIGluIHNwYSAob3JkZXIgYnkgcm93KVxuXG5cbiAgICAgIHNwYS5mb3JFYWNoKDAsIHJvd3MgLSAxLCBmdW5jdGlvbiAoeCwgdikge1xuICAgICAgICAvLyBjaGVjayB3ZSBhcmUgYWJvdmUgZGlhZ29uYWxcbiAgICAgICAgaWYgKHggPD0gaikge1xuICAgICAgICAgIC8vIHVwZGF0ZSB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeFxuICAgICAgICAgIHV2YWx1ZXMucHVzaCh2KTtcbiAgICAgICAgICB1aW5kZXgucHVzaCh4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB1cGRhdGUgdmFsdWVcbiAgICAgICAgICB2ID0gZGl2aWRlU2NhbGFyKHYsIHZqaik7IC8vIGNoZWNrIHZhbHVlIGlzIG5vbiB6ZXJvXG5cbiAgICAgICAgICBpZiAoIWVxdWFsU2NhbGFyKHYsIDApKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgbG93ZXIgdHJpYW5ndWxhciBtYXRyaXhcbiAgICAgICAgICAgIGx2YWx1ZXMucHVzaCh2KTtcbiAgICAgICAgICAgIGxpbmRleC5wdXNoKHgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGZvciAoaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIF9sb29wKCk7XG4gICAgfSAvLyB1cGRhdGUgcHRyc1xuXG5cbiAgICB1cHRyLnB1c2godXZhbHVlcy5sZW5ndGgpO1xuICAgIGxwdHIucHVzaChsdmFsdWVzLmxlbmd0aCk7IC8vIHJldHVybiBtYXRyaWNlc1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIEw6IG5ldyBTcGFyc2VNYXRyaXgoe1xuICAgICAgICB2YWx1ZXM6IGx2YWx1ZXMsXG4gICAgICAgIGluZGV4OiBsaW5kZXgsXG4gICAgICAgIHB0cjogbHB0cixcbiAgICAgICAgc2l6ZTogbHNpemVcbiAgICAgIH0pLFxuICAgICAgVTogbmV3IFNwYXJzZU1hdHJpeCh7XG4gICAgICAgIHZhbHVlczogdXZhbHVlcyxcbiAgICAgICAgaW5kZXg6IHVpbmRleCxcbiAgICAgICAgcHRyOiB1cHRyLFxuICAgICAgICBzaXplOiB1c2l6ZVxuICAgICAgfSksXG4gICAgICBwOiBwdkNvLFxuICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gJ0w6ICcgKyB0aGlzLkwudG9TdHJpbmcoKSArICdcXG5VOiAnICsgdGhpcy5VLnRvU3RyaW5nKCkgKyAnXFxuUDogJyArIHRoaXMucDtcbiAgICAgIH1cbiAgICB9O1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlTHVwID0gY3JlYXRlTHVwOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVRciA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbnZhciBuYW1lID0gJ3FyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICd6ZXJvcycsICdpZGVudGl0eScsICdpc1plcm8nLCAnZXF1YWwnLCAnc2lnbicsICdzcXJ0JywgJ2NvbmonLCAndW5hcnlNaW51cycsICdhZGRTY2FsYXInLCAnZGl2aWRlU2NhbGFyJywgJ211bHRpcGx5U2NhbGFyJywgJ3N1YnRyYWN0JywgJ2NvbXBsZXgnXTtcbnZhciBjcmVhdGVRciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIHplcm9zID0gX3JlZi56ZXJvcyxcbiAgICAgIGlkZW50aXR5ID0gX3JlZi5pZGVudGl0eSxcbiAgICAgIGlzWmVybyA9IF9yZWYuaXNaZXJvLFxuICAgICAgZXF1YWwgPSBfcmVmLmVxdWFsLFxuICAgICAgc2lnbiA9IF9yZWYuc2lnbixcbiAgICAgIHNxcnQgPSBfcmVmLnNxcnQsXG4gICAgICBjb25qID0gX3JlZi5jb25qLFxuICAgICAgdW5hcnlNaW51cyA9IF9yZWYudW5hcnlNaW51cyxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXIsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBjb21wbGV4ID0gX3JlZi5jb21wbGV4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIE1hdHJpeCBRUiBkZWNvbXBvc2l0aW9uLiBNYXRyaXggYEFgIGlzIGRlY29tcG9zZWQgaW5cbiAgICogdHdvIG1hdHJpY2VzIChgUWAsIGBSYCkgd2hlcmUgYFFgIGlzIGFuXG4gICAqIG9ydGhvZ29uYWwgbWF0cml4IGFuZCBgUmAgaXMgYW4gdXBwZXIgdHJpYW5ndWxhciBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5xcihBKVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKlxuICAgKiAgICBjb25zdCBtID0gW1xuICAgKiAgICAgIFsxLCAtMSwgIDRdLFxuICAgKiAgICAgIFsxLCAgNCwgLTJdLFxuICAgKiAgICAgIFsxLCAgNCwgIDJdLFxuICAgKiAgICAgIFsxLCAgLTEsIDBdXG4gICAqICAgIF1cbiAgICogICAgY29uc3QgcmVzdWx0ID0gbWF0aC5xcihtKVxuICAgKiAgICAvLyByID0ge1xuICAgKiAgICAvLyAgIFE6IFtcbiAgICogICAgLy8gICAgIFswLjUsIC0wLjUsICAgMC41XSxcbiAgICogICAgLy8gICAgIFswLjUsICAwLjUsICAtMC41XSxcbiAgICogICAgLy8gICAgIFswLjUsICAwLjUsICAgMC41XSxcbiAgICogICAgLy8gICAgIFswLjUsIC0wLjUsICAtMC41XSxcbiAgICogICAgLy8gICBdLFxuICAgKiAgICAvLyAgIFI6IFtcbiAgICogICAgLy8gICAgIFsyLCAzLCAgMl0sXG4gICAqICAgIC8vICAgICBbMCwgNSwgLTJdLFxuICAgKiAgICAvLyAgICAgWzAsIDAsICA0XSxcbiAgICogICAgLy8gICAgIFswLCAwLCAgMF1cbiAgICogICAgLy8gICBdXG4gICAqICAgIC8vIH1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGx1cCwgbHVzb2x2ZVxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeCB8IEFycmF5fSBBICAgIEEgdHdvIGRpbWVuc2lvbmFsIG1hdHJpeCBvciBhcnJheVxuICAgKiBmb3Igd2hpY2ggdG8gZ2V0IHRoZSBRUiBkZWNvbXBvc2l0aW9uLlxuICAgKlxuICAgKiBAcmV0dXJuIHt7UTogQXJyYXkgfCBNYXRyaXgsIFI6IEFycmF5IHwgTWF0cml4fX0gUTogdGhlIG9ydGhvZ29uYWxcbiAgICogbWF0cml4IGFuZCBSOiB0aGUgdXBwZXIgdHJpYW5ndWxhciBtYXRyaXhcbiAgICovXG4gIHJldHVybiBfZXh0ZW5kcyh0eXBlZChuYW1lLCB7XG4gICAgRGVuc2VNYXRyaXg6IGZ1bmN0aW9uIERlbnNlTWF0cml4KG0pIHtcbiAgICAgIHJldHVybiBfZGVuc2VRUihtKTtcbiAgICB9LFxuICAgIFNwYXJzZU1hdHJpeDogZnVuY3Rpb24gU3BhcnNlTWF0cml4KG0pIHtcbiAgICAgIHJldHVybiBfc3BhcnNlUVIobSk7XG4gICAgfSxcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoYSkge1xuICAgICAgLy8gY3JlYXRlIGRlbnNlIG1hdHJpeCBmcm9tIGFycmF5XG4gICAgICB2YXIgbSA9IG1hdHJpeChhKTsgLy8gbHVwLCB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG5cbiAgICAgIHZhciByID0gX2RlbnNlUVIobSk7IC8vIHJlc3VsdFxuXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFE6IHIuUS52YWx1ZU9mKCksXG4gICAgICAgIFI6IHIuUi52YWx1ZU9mKClcbiAgICAgIH07XG4gICAgfVxuICB9KSwge1xuICAgIF9kZW5zZVFSaW1wbDogX2RlbnNlUVJpbXBsXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9kZW5zZVFSaW1wbChtKSB7XG4gICAgLy8gcm93cyAmIGNvbHVtbnMgKG0geCBuKVxuICAgIHZhciByb3dzID0gbS5fc2l6ZVswXTsgLy8gbVxuXG4gICAgdmFyIGNvbHMgPSBtLl9zaXplWzFdOyAvLyBuXG5cbiAgICB2YXIgUSA9IGlkZW50aXR5KFtyb3dzXSwgJ2RlbnNlJyk7XG4gICAgdmFyIFFkYXRhID0gUS5fZGF0YTtcbiAgICB2YXIgUiA9IG0uY2xvbmUoKTtcbiAgICB2YXIgUmRhdGEgPSBSLl9kYXRhOyAvLyB2YXJzXG5cbiAgICB2YXIgaSwgaiwgaztcbiAgICB2YXIgdyA9IHplcm9zKFtyb3dzXSwgJycpO1xuXG4gICAgZm9yIChrID0gMDsgayA8IE1hdGgubWluKGNvbHMsIHJvd3MpOyArK2spIHtcbiAgICAgIC8qXG4gICAgICAgKiAqKmstdGggSG91c2Vob2xkIG1hdHJpeCoqXG4gICAgICAgKlxuICAgICAgICogVGhlIG1hdHJpeCBJIC0gMip2KnRyYW5zcG9zZSh2KVxuICAgICAgICogeCAgICAgPSBmaXJzdCBjb2x1bW4gb2YgQVxuICAgICAgICogeDEgICAgPSBmaXJzdCBlbGVtZW50IG9mIHhcbiAgICAgICAqIGFscGhhID0geDEgLyB8eDF8ICogfHh8XG4gICAgICAgKiBlMSAgICA9IHRyYW5wb3NlKFsxLCAwLCAwLCAuLi5dKVxuICAgICAgICogdSAgICAgPSB4IC0gYWxwaGEgKiBlMVxuICAgICAgICogdiAgICAgPSB1IC8gfHV8XG4gICAgICAgKlxuICAgICAgICogSG91c2Vob2xkIG1hdHJpeCA9IEkgLSAyICogdiAqIHRyYW5wb3NlKHYpXG4gICAgICAgKlxuICAgICAgICogICogSW5pdGlhbGx5IFEgPSBJIGFuZCBSID0gQS5cbiAgICAgICAqICAqIEhvdXNlaG9sZCBtYXRyaXggaXMgYSByZWZsZWN0aW9uIGluIGEgcGxhbmUgbm9ybWFsIHRvIHYgd2hpY2hcbiAgICAgICAqICAgIHdpbGwgemVybyBvdXQgYWxsIGJ1dCB0aGUgdG9wIHJpZ2h0IGVsZW1lbnQgaW4gUi5cbiAgICAgICAqICAqIEFwcHBseWluZyByZWZsZWN0aW9uIHRvIGJvdGggUSBhbmQgUiB3aWxsIG5vdCBjaGFuZ2UgcHJvZHVjdC5cbiAgICAgICAqICAqIFJlcGVhdCB0aGlzIHByb2Nlc3Mgb24gdGhlICgxLDEpIG1pbm9yIHRvIGdldCBSIGFzIGFuIHVwcGVyXG4gICAgICAgKiAgICB0cmlhbmd1bGFyIG1hdHJpeC5cbiAgICAgICAqICAqIFJlZmxlY3Rpb25zIGxlYXZlIHRoZSBtYWduaXR1ZGUgb2YgdGhlIGNvbHVtbnMgb2YgUSB1bmNoYW5nZWRcbiAgICAgICAqICAgIHNvIFEgcmVtYWlucyBvdGhvZ2FuYWwuXG4gICAgICAgKlxuICAgICAgICovXG4gICAgICB2YXIgcGl2b3QgPSBSZGF0YVtrXVtrXTtcbiAgICAgIHZhciBzZ24gPSB1bmFyeU1pbnVzKGVxdWFsKHBpdm90LCAwKSA/IDEgOiBzaWduKHBpdm90KSk7XG4gICAgICB2YXIgY29ualNnbiA9IGNvbmooc2duKTtcbiAgICAgIHZhciBhbHBoYVNxdWFyZWQgPSAwO1xuXG4gICAgICBmb3IgKGkgPSBrOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgIGFscGhhU3F1YXJlZCA9IGFkZFNjYWxhcihhbHBoYVNxdWFyZWQsIG11bHRpcGx5U2NhbGFyKFJkYXRhW2ldW2tdLCBjb25qKFJkYXRhW2ldW2tdKSkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgYWxwaGEgPSBtdWx0aXBseVNjYWxhcihzZ24sIHNxcnQoYWxwaGFTcXVhcmVkKSk7XG5cbiAgICAgIGlmICghaXNaZXJvKGFscGhhKSkge1xuICAgICAgICAvLyBmaXJzdCBlbGVtZW50IGluIHZlY3RvciB1XG4gICAgICAgIHZhciB1MSA9IHN1YnRyYWN0KHBpdm90LCBhbHBoYSk7IC8vIHcgPSB2ICogdTEgLyB8dXwgICAgKG9ubHkgZWxlbWVudHMgayB0byAocm93cy0xKSBhcmUgdXNlZClcblxuICAgICAgICB3W2tdID0gMTtcblxuICAgICAgICBmb3IgKGkgPSBrICsgMTsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgIHdbaV0gPSBkaXZpZGVTY2FsYXIoUmRhdGFbaV1ba10sIHUxKTtcbiAgICAgICAgfSAvLyB0YXUgPSAtIGNvbmoodTEgLyBhbHBoYSlcblxuXG4gICAgICAgIHZhciB0YXUgPSB1bmFyeU1pbnVzKGNvbmooZGl2aWRlU2NhbGFyKHUxLCBhbHBoYSkpKTtcbiAgICAgICAgdmFyIHMgPSB2b2lkIDA7XG4gICAgICAgIC8qXG4gICAgICAgICAqIHRhdSBhbmQgdyBoYXZlIGJlZW4gY2hvb3NlbiBzbyB0aGF0XG4gICAgICAgICAqXG4gICAgICAgICAqIDIgKiB2ICogdHJhbnBvc2UodikgPSB0YXUgKiB3ICogdHJhbnBvc2UodylcbiAgICAgICAgICovXG5cbiAgICAgICAgLypcbiAgICAgICAgICogLS0gY2FsY3VsYXRlIFIgPSBSIC0gdGF1ICogdyAqIHRyYW5wb3NlKHcpICogUiAtLVxuICAgICAgICAgKiBPbmx5IGRvIGNhbGN1bGF0aW9uIHdpdGggcm93cyBrIHRvIChyb3dzLTEpXG4gICAgICAgICAqIEFkZGl0aW9uYWxseSBjb2x1bW5zIDAgdG8gKGstMSkgd2lsbCBub3QgYmUgY2hhbmdlZCBieSB0aGlzXG4gICAgICAgICAqICAgbXVsdGlwbGljYXRpb24gc28gZG8gbm90IGJvdGhlciByZWNhbGN1bGF0aW5nIHRoZW1cbiAgICAgICAgICovXG5cbiAgICAgICAgZm9yIChqID0gazsgaiA8IGNvbHM7IGorKykge1xuICAgICAgICAgIHMgPSAwLjA7IC8vIGNhbGN1bGF0ZSBqdGggZWxlbWVudCBvZiBbdHJhbnBvc2UodykgKiBSXVxuXG4gICAgICAgICAgZm9yIChpID0gazsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgICAgcyA9IGFkZFNjYWxhcihzLCBtdWx0aXBseVNjYWxhcihjb25qKHdbaV0pLCBSZGF0YVtpXVtqXSkpO1xuICAgICAgICAgIH0gLy8gY2FsY3VsYXRlIHRoZSBqdGggZWxlbWVudCBvZiBbdGF1ICogdHJhbnNwb3NlKHcpICogUl1cblxuXG4gICAgICAgICAgcyA9IG11bHRpcGx5U2NhbGFyKHMsIHRhdSk7XG5cbiAgICAgICAgICBmb3IgKGkgPSBrOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgICBSZGF0YVtpXVtqXSA9IG11bHRpcGx5U2NhbGFyKHN1YnRyYWN0KFJkYXRhW2ldW2pdLCBtdWx0aXBseVNjYWxhcih3W2ldLCBzKSksIGNvbmpTZ24pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvKlxuICAgICAgICAgKiAtLSBjYWxjdWxhdGUgUSA9IFEgLSB0YXUgKiBRICogdyAqIHRyYW5zcG9zZSh3KSAtLVxuICAgICAgICAgKiBRIGlzIGEgc3F1YXJlIG1hdHJpeCAocm93cyB4IHJvd3MpXG4gICAgICAgICAqIE9ubHkgZG8gY2FsY3VsYXRpb24gd2l0aCBjb2x1bW5zIGsgdG8gKHJvd3MtMSlcbiAgICAgICAgICogQWRkaXRpb25hbGx5IHJvd3MgMCB0byAoay0xKSB3aWxsIG5vdCBiZSBjaGFuZ2VkIGJ5IHRoaXNcbiAgICAgICAgICogICBtdWx0aXBsaWNhdGlvbiBzbyBkbyBub3QgYm90aGVyIHJlY2FsY3VsYXRpbmcgdGhlbVxuICAgICAgICAgKi9cblxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICBzID0gMC4wOyAvLyBjYWxjdWxhdGUgaXRoIGVsZW1lbnQgb2YgW1EgKiB3XVxuXG4gICAgICAgICAgZm9yIChqID0gazsgaiA8IHJvd3M7IGorKykge1xuICAgICAgICAgICAgcyA9IGFkZFNjYWxhcihzLCBtdWx0aXBseVNjYWxhcihRZGF0YVtpXVtqXSwgd1tqXSkpO1xuICAgICAgICAgIH0gLy8gY2FsY3VsYXRlIHRoZSBpdGggZWxlbWVudCBvZiBbdGF1ICogUSAqIHddXG5cblxuICAgICAgICAgIHMgPSBtdWx0aXBseVNjYWxhcihzLCB0YXUpO1xuXG4gICAgICAgICAgZm9yIChqID0gazsgaiA8IHJvd3M7ICsraikge1xuICAgICAgICAgICAgUWRhdGFbaV1bal0gPSBkaXZpZGVTY2FsYXIoc3VidHJhY3QoUWRhdGFbaV1bal0sIG11bHRpcGx5U2NhbGFyKHMsIGNvbmood1tqXSkpKSwgY29ualNnbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyByZXR1cm4gbWF0cmljZXNcblxuXG4gICAgcmV0dXJuIHtcbiAgICAgIFE6IFEsXG4gICAgICBSOiBSLFxuICAgICAgdG9TdHJpbmc6IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gJ1E6ICcgKyB0aGlzLlEudG9TdHJpbmcoKSArICdcXG5SOiAnICsgdGhpcy5SLnRvU3RyaW5nKCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9kZW5zZVFSKG0pIHtcbiAgICB2YXIgcmV0ID0gX2RlbnNlUVJpbXBsKG0pO1xuXG4gICAgdmFyIFJkYXRhID0gcmV0LlIuX2RhdGE7XG5cbiAgICBpZiAobS5fZGF0YS5sZW5ndGggPiAwKSB7XG4gICAgICB2YXIgemVybyA9IFJkYXRhWzBdWzBdLnR5cGUgPT09ICdDb21wbGV4JyA/IGNvbXBsZXgoMCkgOiAwO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IFJkYXRhLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaSAmJiBqIDwgKFJkYXRhWzBdIHx8IFtdKS5sZW5ndGg7ICsraikge1xuICAgICAgICAgIFJkYXRhW2ldW2pdID0gemVybztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBmdW5jdGlvbiBfc3BhcnNlUVIobSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncXIgbm90IGltcGxlbWVudGVkIGZvciBzcGFyc2UgbWF0cmljZXMgeWV0Jyk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVRciA9IGNyZWF0ZVFyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTbHUgPSB2b2lkIDA7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY3NTcXIgPSByZXF1aXJlKFwiLi4vc3BhcnNlL2NzU3FyXCIpO1xuXG52YXIgX2NzTHUgPSByZXF1aXJlKFwiLi4vc3BhcnNlL2NzTHVcIik7XG5cbnZhciBuYW1lID0gJ3NsdSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhYnMnLCAnYWRkJywgJ211bHRpcGx5JywgJ3RyYW5zcG9zZScsICdkaXZpZGVTY2FsYXInLCAnc3VidHJhY3QnLCAnbGFyZ2VyJywgJ2xhcmdlckVxJywgJ1NwYXJzZU1hdHJpeCddO1xudmFyIGNyZWF0ZVNsdSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhYnMgPSBfcmVmLmFicyxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgdHJhbnNwb3NlID0gX3JlZi50cmFuc3Bvc2UsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyLFxuICAgICAgbGFyZ2VyRXEgPSBfcmVmLmxhcmdlckVxLFxuICAgICAgU3BhcnNlTWF0cml4ID0gX3JlZi5TcGFyc2VNYXRyaXg7XG4gIHZhciBjc1NxciA9ICgwLCBfY3NTcXIuY3JlYXRlQ3NTcXIpKHtcbiAgICBhZGQ6IGFkZCxcbiAgICBtdWx0aXBseTogbXVsdGlwbHksXG4gICAgdHJhbnNwb3NlOiB0cmFuc3Bvc2VcbiAgfSk7XG4gIHZhciBjc0x1ID0gKDAsIF9jc0x1LmNyZWF0ZUNzTHUpKHtcbiAgICBhYnM6IGFicyxcbiAgICBkaXZpZGVTY2FsYXI6IGRpdmlkZVNjYWxhcixcbiAgICBtdWx0aXBseTogbXVsdGlwbHksXG4gICAgc3VidHJhY3Q6IHN1YnRyYWN0LFxuICAgIGxhcmdlcjogbGFyZ2VyLFxuICAgIGxhcmdlckVxOiBsYXJnZXJFcSxcbiAgICBTcGFyc2VNYXRyaXg6IFNwYXJzZU1hdHJpeFxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgU3BhcnNlIE1hdHJpeCBMVSBkZWNvbXBvc2l0aW9uIHdpdGggZnVsbCBwaXZvdGluZy4gU3BhcnNlIE1hdHJpeCBgQWAgaXMgZGVjb21wb3NlZCBpbiB0d28gbWF0cmljZXMgKGBMYCwgYFVgKSBhbmQgdHdvIHBlcm11dGF0aW9uIHZlY3RvcnMgKGBwaW52YCwgYHFgKSB3aGVyZVxuICAgKlxuICAgKiBgUCAqIEEgKiBRID0gTCAqIFVgXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zbHUoQSwgb3JkZXIsIHRocmVzaG9sZClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIGNvbnN0IEEgPSBtYXRoLnNwYXJzZShbWzQsM10sIFs2LCAzXV0pXG4gICAqICAgIG1hdGguc2x1KEEsIDEsIDAuMDAxKVxuICAgKiAgICAvLyByZXR1cm5zOlxuICAgKiAgICAvLyB7XG4gICAqICAgIC8vICAgTDogW1sxLCAwXSwgWzEuNSwgMV1dXG4gICAqICAgIC8vICAgVTogW1s0LCAzXSwgWzAsIC0xLjVdXVxuICAgKiAgICAvLyAgIHA6IFswLCAxXVxuICAgKiAgICAvLyAgIHE6IFswLCAxXVxuICAgKiAgICAvLyB9XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBsdXAsIGxzb2x2ZSwgdXNvbHZlLCBsdXNvbHZlXG4gICAqXG4gICAqIEBwYXJhbSB7U3BhcnNlTWF0cml4fSBBICAgICAgICAgICAgICBBIHR3byBkaW1lbnNpb25hbCBzcGFyc2UgbWF0cml4IGZvciB3aGljaCB0byBnZXQgdGhlIExVIGRlY29tcG9zaXRpb24uXG4gICAqIEBwYXJhbSB7TnVtYmVyfSAgICAgICBvcmRlciAgICAgICAgICBUaGUgU3ltYm9saWMgT3JkZXJpbmcgYW5kIEFuYWx5c2lzIG9yZGVyOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgLSBOYXR1cmFsIG9yZGVyaW5nLCBubyBwZXJtdXRhdGlvbiB2ZWN0b3IgcSBpcyByZXR1cm5lZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgLSBNYXRyaXggbXVzdCBiZSBzcXVhcmUsIHN5bWJvbGljIG9yZGVyaW5nIGFuZCBhbmFsaXNpcyBpcyBwZXJmb3JtZWQgb24gTSA9IEEgKyBBJ1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIgLSBTeW1ib2xpYyBvcmRlcmluZyBhbmQgYW5hbGlzaXMgaXMgcGVyZm9ybWVkIG9uIE0gPSBBJyAqIEEuIERlbnNlIGNvbHVtbnMgZnJvbSBBJyBhcmUgZHJvcHBlZCwgQSByZWNyZWF0ZWQgZnJvbSBBJy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBpcyBhcHByb3ByaWF0ZWZvciBMVSBmYWN0b3JpemF0aW9uIG9mIHVuc3ltbWV0cmljIG1hdHJpY2VzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMgLSBTeW1ib2xpYyBvcmRlcmluZyBhbmQgYW5hbGlzaXMgaXMgcGVyZm9ybWVkIG9uIE0gPSBBJyAqIEEuIFRoaXMgaXMgYmVzdCB1c2VkIGZvciBMVSBmYWN0b3JpemF0aW9uIGlzIG1hdHJpeCBNIGhhcyBubyBkZW5zZSByb3dzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBIGRlbnNlIHJvdyBpcyBhIHJvdyB3aXRoIG1vcmUgdGhhbiAxMCpzcXIoY29sdW1ucykgZW50cmllcy5cbiAgICogQHBhcmFtIHtOdW1iZXJ9ICAgICAgIHRocmVzaG9sZCAgICAgICBQYXJ0aWFsIHBpdm90aW5nIHRocmVzaG9sZCAoMSBmb3IgcGFydGlhbCBwaXZvdGluZylcbiAgICpcbiAgICogQHJldHVybiB7T2JqZWN0fSBUaGUgbG93ZXIgdHJpYW5ndWxhciBtYXRyaXgsIHRoZSB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeCBhbmQgdGhlIHBlcm11dGF0aW9uIHZlY3RvcnMuXG4gICAqL1xuXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ1NwYXJzZU1hdHJpeCwgbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhOdW1iZXJOdW1iZXIoYSwgb3JkZXIsIHRocmVzaG9sZCkge1xuICAgICAgLy8gdmVyaWZ5IG9yZGVyXG4gICAgICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikob3JkZXIpIHx8IG9yZGVyIDwgMCB8fCBvcmRlciA+IDMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTeW1ib2xpYyBPcmRlcmluZyBhbmQgQW5hbHlzaXMgb3JkZXIgbXVzdCBiZSBhbiBpbnRlZ2VyIG51bWJlciBpbiB0aGUgaW50ZXJ2YWwgWzAsIDNdJyk7XG4gICAgICB9IC8vIHZlcmlmeSB0aHJlc2hvbGRcblxuXG4gICAgICBpZiAodGhyZXNob2xkIDwgMCB8fCB0aHJlc2hvbGQgPiAxKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFydGlhbCBwaXZvdGluZyB0aHJlc2hvbGQgbXVzdCBiZSBhIG51bWJlciBmcm9tIDAgdG8gMScpO1xuICAgICAgfSAvLyBwZXJmb3JtIHN5bWJvbGljIG9yZGVyaW5nIGFuZCBhbmFseXNpc1xuXG5cbiAgICAgIHZhciBzID0gY3NTcXIob3JkZXIsIGEsIGZhbHNlKTsgLy8gcGVyZm9ybSBsdSBkZWNvbXBvc2l0aW9uXG5cbiAgICAgIHZhciBmID0gY3NMdShhLCBzLCB0aHJlc2hvbGQpOyAvLyByZXR1cm4gZGVjb21wb3NpdGlvblxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBMOiBmLkwsXG4gICAgICAgIFU6IGYuVSxcbiAgICAgICAgcDogZi5waW52LFxuICAgICAgICBxOiBzLnEsXG4gICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICAgICAgICByZXR1cm4gJ0w6ICcgKyB0aGlzLkwudG9TdHJpbmcoKSArICdcXG5VOiAnICsgdGhpcy5VLnRvU3RyaW5nKCkgKyAnXFxucDogJyArIHRoaXMucC50b1N0cmluZygpICsgKHRoaXMucSA/ICdcXG5xOiAnICsgdGhpcy5xLnRvU3RyaW5nKCkgOiAnJykgKyAnXFxuJztcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNsdSA9IGNyZWF0ZVNsdTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRGVyaXZhdGl2ZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2Rlcml2YXRpdmUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ3BhcnNlJywgJ3NpbXBsaWZ5JywgJ2VxdWFsJywgJ2lzWmVybycsICdudW1lcmljJywgJ0NvbnN0YW50Tm9kZScsICdGdW5jdGlvbk5vZGUnLCAnT3BlcmF0b3JOb2RlJywgJ1BhcmVudGhlc2lzTm9kZScsICdTeW1ib2xOb2RlJ107XG52YXIgY3JlYXRlRGVyaXZhdGl2ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIHBhcnNlID0gX3JlZi5wYXJzZSxcbiAgICAgIHNpbXBsaWZ5ID0gX3JlZi5zaW1wbGlmeSxcbiAgICAgIGVxdWFsID0gX3JlZi5lcXVhbCxcbiAgICAgIGlzWmVybyA9IF9yZWYuaXNaZXJvLFxuICAgICAgbnVtZXJpYyA9IF9yZWYubnVtZXJpYyxcbiAgICAgIENvbnN0YW50Tm9kZSA9IF9yZWYuQ29uc3RhbnROb2RlLFxuICAgICAgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsXG4gICAgICBPcGVyYXRvck5vZGUgPSBfcmVmLk9wZXJhdG9yTm9kZSxcbiAgICAgIFBhcmVudGhlc2lzTm9kZSA9IF9yZWYuUGFyZW50aGVzaXNOb2RlLFxuICAgICAgU3ltYm9sTm9kZSA9IF9yZWYuU3ltYm9sTm9kZTtcblxuICAvKipcbiAgICogVGFrZXMgdGhlIGRlcml2YXRpdmUgb2YgYW4gZXhwcmVzc2lvbiBleHByZXNzZWQgaW4gcGFyc2VyIE5vZGVzLlxuICAgKiBUaGUgZGVyaXZhdGl2ZSB3aWxsIGJlIHRha2VuIG92ZXIgdGhlIHN1cHBsaWVkIHZhcmlhYmxlIGluIHRoZVxuICAgKiBzZWNvbmQgcGFyYW1ldGVyLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgdmFyaWFibGVzIGluIHRoZSBleHByZXNzaW9uLFxuICAgKiBpdCB3aWxsIHJldHVybiBhIHBhcnRpYWwgZGVyaXZhdGl2ZS5cbiAgICpcbiAgICogVGhpcyB1c2VzIHJ1bGVzIG9mIGRpZmZlcmVudGlhdGlvbiB3aGljaCBjYW4gYmUgZm91bmQgaGVyZTpcbiAgICpcbiAgICogLSBbRGlmZmVyZW50aWF0aW9uIHJ1bGVzIChXaWtpcGVkaWEpXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EaWZmZXJlbnRpYXRpb25fcnVsZXMpXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIGRlcml2YXRpdmUoZXhwciwgdmFyaWFibGUpXG4gICAqICAgICBkZXJpdmF0aXZlKGV4cHIsIHZhcmlhYmxlLCBvcHRpb25zKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGguZGVyaXZhdGl2ZSgneF4yJywgJ3gnKSAgICAgICAgICAgICAgICAgICAgIC8vIE5vZGUgezIgKiB4fVxuICAgKiAgICAgbWF0aC5kZXJpdmF0aXZlKCd4XjInLCAneCcsIHtzaW1wbGlmeTogZmFsc2V9KSAgLy8gTm9kZSB7MiAqIDEgKiB4IF4gKDIgLSAxKVxuICAgKiAgICAgbWF0aC5kZXJpdmF0aXZlKCdzaW4oMngpJywgJ3gnKSkgICAgICAgICAgICAgICAgLy8gTm9kZSB7MiAqIGNvcygyICogeCl9XG4gICAqICAgICBtYXRoLmRlcml2YXRpdmUoJzIqeCcsICd4JykuZXZhbHVhdGUoKSAgICAgICAgICAvLyBudW1iZXIgMlxuICAgKiAgICAgbWF0aC5kZXJpdmF0aXZlKCd4XjInLCAneCcpLmV2YWx1YXRlKHt4OiA0fSkgICAgLy8gbnVtYmVyIDhcbiAgICogICAgIGNvbnN0IGYgPSBtYXRoLnBhcnNlKCd4XjInKVxuICAgKiAgICAgY29uc3QgeCA9IG1hdGgucGFyc2UoJ3gnKVxuICAgKiAgICAgbWF0aC5kZXJpdmF0aXZlKGYsIHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm9kZSB7MiAqIHh9XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgc2ltcGxpZnksIHBhcnNlLCBldmFsdWF0ZVxuICAgKlxuICAgKiBAcGFyYW0gIHtOb2RlIHwgc3RyaW5nfSBleHByICAgICAgICAgICBUaGUgZXhwcmVzc2lvbiB0byBkaWZmZXJlbnRpYXRlXG4gICAqIEBwYXJhbSAge1N5bWJvbE5vZGUgfCBzdHJpbmd9IHZhcmlhYmxlIFRoZSB2YXJpYWJsZSBvdmVyIHdoaWNoIHRvIGRpZmZlcmVudGlhdGVcbiAgICogQHBhcmFtICB7e3NpbXBsaWZ5OiBib29sZWFufX0gW29wdGlvbnNdXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgIFRoZXJlIGlzIG9uZSBvcHRpb24gYXZhaWxhYmxlLCBgc2ltcGxpZnlgLCB3aGljaFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBpcyB0cnVlIGJ5IGRlZmF1bHQuIFdoZW4gZmFsc2UsIG91dHB1dCB3aWxsIG5vdFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBiZSBzaW1wbGlmaWVkLlxuICAgKiBAcmV0dXJuIHtDb25zdGFudE5vZGUgfCBTeW1ib2xOb2RlIHwgUGFyZW50aGVzaXNOb2RlIHwgRnVuY3Rpb25Ob2RlIHwgT3BlcmF0b3JOb2RlfSAgICBUaGUgZGVyaXZhdGl2ZSBvZiBgZXhwcmBcbiAgICovXG4gIHZhciBkZXJpdmF0aXZlID0gdHlwZWQoJ2Rlcml2YXRpdmUnLCB7XG4gICAgJ05vZGUsIFN5bWJvbE5vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIE5vZGVTeW1ib2xOb2RlT2JqZWN0KGV4cHIsIHZhcmlhYmxlLCBvcHRpb25zKSB7XG4gICAgICB2YXIgY29uc3ROb2RlcyA9IHt9O1xuICAgICAgY29uc3RUYWcoY29uc3ROb2RlcywgZXhwciwgdmFyaWFibGUubmFtZSk7XG5cbiAgICAgIHZhciByZXMgPSBfZGVyaXZhdGl2ZShleHByLCBjb25zdE5vZGVzKTtcblxuICAgICAgcmV0dXJuIG9wdGlvbnMuc2ltcGxpZnkgPyBzaW1wbGlmeShyZXMpIDogcmVzO1xuICAgIH0sXG4gICAgJ05vZGUsIFN5bWJvbE5vZGUnOiBmdW5jdGlvbiBOb2RlU3ltYm9sTm9kZShleHByLCB2YXJpYWJsZSkge1xuICAgICAgcmV0dXJuIGRlcml2YXRpdmUoZXhwciwgdmFyaWFibGUsIHtcbiAgICAgICAgc2ltcGxpZnk6IHRydWVcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgJ3N0cmluZywgU3ltYm9sTm9kZSc6IGZ1bmN0aW9uIHN0cmluZ1N5bWJvbE5vZGUoZXhwciwgdmFyaWFibGUpIHtcbiAgICAgIHJldHVybiBkZXJpdmF0aXZlKHBhcnNlKGV4cHIpLCB2YXJpYWJsZSk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBTeW1ib2xOb2RlLCBPYmplY3QnOiBmdW5jdGlvbiBzdHJpbmdTeW1ib2xOb2RlT2JqZWN0KGV4cHIsIHZhcmlhYmxlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gZGVyaXZhdGl2ZShwYXJzZShleHByKSwgdmFyaWFibGUsIG9wdGlvbnMpO1xuICAgIH0sXG4gICAgJ3N0cmluZywgc3RyaW5nJzogZnVuY3Rpb24gc3RyaW5nU3RyaW5nKGV4cHIsIHZhcmlhYmxlKSB7XG4gICAgICByZXR1cm4gZGVyaXZhdGl2ZShwYXJzZShleHByKSwgcGFyc2UodmFyaWFibGUpKTtcbiAgICB9LFxuICAgICdzdHJpbmcsIHN0cmluZywgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nU3RyaW5nT2JqZWN0KGV4cHIsIHZhcmlhYmxlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gZGVyaXZhdGl2ZShwYXJzZShleHByKSwgcGFyc2UodmFyaWFibGUpLCBvcHRpb25zKTtcbiAgICB9LFxuICAgICdOb2RlLCBzdHJpbmcnOiBmdW5jdGlvbiBOb2RlU3RyaW5nKGV4cHIsIHZhcmlhYmxlKSB7XG4gICAgICByZXR1cm4gZGVyaXZhdGl2ZShleHByLCBwYXJzZSh2YXJpYWJsZSkpO1xuICAgIH0sXG4gICAgJ05vZGUsIHN0cmluZywgT2JqZWN0JzogZnVuY3Rpb24gTm9kZVN0cmluZ09iamVjdChleHByLCB2YXJpYWJsZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIGRlcml2YXRpdmUoZXhwciwgcGFyc2UodmFyaWFibGUpLCBvcHRpb25zKTtcbiAgICB9IC8vIFRPRE86IHJlcGxhY2UgdGhlIDggc2lnbmF0dXJlcyBhYm92ZSB3aXRoIDQgYXMgc29vbiBhcyB0eXBlZC1mdW5jdGlvbiBzdXBwb3J0cyBvcHRpb25hbCBhcmd1bWVudHNcblxuICAgIC8qIFRPRE86IGltcGxlbWVudCBhbmQgdGVzdCBzeW50YXggd2l0aCBvcmRlciBvZiBkZXJpdmF0aXZlcyAtPiBpbXBsZW1lbnQgYXMgYW4gb3B0aW9uIHtvcmRlcjogbnVtYmVyfVxuICAgICdOb2RlLCBTeW1ib2xOb2RlLCBDb25zdGFudE5vZGUnOiBmdW5jdGlvbiAoZXhwciwgdmFyaWFibGUsIHtvcmRlcn0pIHtcbiAgICAgIGxldCByZXMgPSBleHByXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG9yZGVyOyBpKyspIHtcbiAgICAgICAgbGV0IGNvbnN0Tm9kZXMgPSB7fVxuICAgICAgICBjb25zdFRhZyhjb25zdE5vZGVzLCBleHByLCB2YXJpYWJsZS5uYW1lKVxuICAgICAgICByZXMgPSBfZGVyaXZhdGl2ZShyZXMsIGNvbnN0Tm9kZXMpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzXG4gICAgfVxuICAgICovXG5cbiAgfSk7XG4gIGRlcml2YXRpdmUuX3NpbXBsaWZ5ID0gdHJ1ZTtcblxuICBkZXJpdmF0aXZlLnRvVGV4ID0gZnVuY3Rpb24gKGRlcml2KSB7XG4gICAgcmV0dXJuIF9kZXJpdlRleC5hcHBseShudWxsLCBkZXJpdi5hcmdzKTtcbiAgfTsgLy8gRklYTUU6IG1vdmUgdGhlIHRvVGV4IG1ldGhvZCBvZiBkZXJpdmF0aXZlIHRvIGxhdGV4LmpzLiBEaWZmaWN1bHR5IGlzIHRoYXQgaXQgcmVsaWVzIG9uIHBhcnNlLlxuICAvLyBOT1RFOiB0aGUgb3B0aW9uYWwgXCJvcmRlclwiIHBhcmFtZXRlciBoZXJlIGlzIGN1cnJlbnRseSB1bnVzZWRcblxuXG4gIHZhciBfZGVyaXZUZXggPSB0eXBlZCgnX2Rlcml2VGV4Jywge1xuICAgICdOb2RlLCBTeW1ib2xOb2RlJzogZnVuY3Rpb24gTm9kZVN5bWJvbE5vZGUoZXhwciwgeCkge1xuICAgICAgaWYgKCgwLCBfaXMuaXNDb25zdGFudE5vZGUpKGV4cHIpICYmICgwLCBfaXMudHlwZU9mKShleHByLnZhbHVlKSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIF9kZXJpdlRleChwYXJzZShleHByLnZhbHVlKS50b1N0cmluZygpLCB4LnRvU3RyaW5nKCksIDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIF9kZXJpdlRleChleHByLnRvU3RyaW5nKCksIHgudG9TdHJpbmcoKSwgMSk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnTm9kZSwgQ29uc3RhbnROb2RlJzogZnVuY3Rpb24gTm9kZUNvbnN0YW50Tm9kZShleHByLCB4KSB7XG4gICAgICBpZiAoKDAsIF9pcy50eXBlT2YpKHgudmFsdWUpID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gX2Rlcml2VGV4KGV4cHIsIHBhcnNlKHgudmFsdWUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBzZWNvbmQgcGFyYW1ldGVyIHRvICdkZXJpdmF0aXZlJyBpcyBhIG5vbi1zdHJpbmcgY29uc3RhbnRcIik7XG4gICAgICB9XG4gICAgfSxcbiAgICAnTm9kZSwgU3ltYm9sTm9kZSwgQ29uc3RhbnROb2RlJzogZnVuY3Rpb24gTm9kZVN5bWJvbE5vZGVDb25zdGFudE5vZGUoZXhwciwgeCwgb3JkZXIpIHtcbiAgICAgIHJldHVybiBfZGVyaXZUZXgoZXhwci50b1N0cmluZygpLCB4Lm5hbWUsIG9yZGVyLnZhbHVlKTtcbiAgICB9LFxuICAgICdzdHJpbmcsIHN0cmluZywgbnVtYmVyJzogZnVuY3Rpb24gc3RyaW5nU3RyaW5nTnVtYmVyKGV4cHIsIHgsIG9yZGVyKSB7XG4gICAgICB2YXIgZDtcblxuICAgICAgaWYgKG9yZGVyID09PSAxKSB7XG4gICAgICAgIGQgPSAne2RcXFxcb3ZlciBkJyArIHggKyAnfSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkID0gJ3tkXnsnICsgb3JkZXIgKyAnfVxcXFxvdmVyIGQnICsgeCArICdeeycgKyBvcmRlciArICd9fSc7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkICsgXCJcXFxcbGVmdFtcIi5jb25jYXQoZXhwciwgXCJcXFxccmlnaHRdXCIpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBEb2VzIGEgZGVwdGgtZmlyc3Qgc2VhcmNoIG9uIHRoZSBleHByZXNzaW9uIHRyZWUgdG8gaWRlbnRpZnkgd2hhdCBOb2Rlc1xuICAgKiBhcmUgY29uc3RhbnRzIChlLmcuIDIgKyAyKSwgYW5kIHN0b3JlcyB0aGUgb25lcyB0aGF0IGFyZSBjb25zdGFudHMgaW5cbiAgICogY29uc3ROb2Rlcy4gQ2xhc3NpZmljYXRpb24gaXMgZG9uZSBhcyBmb2xsb3dzOlxuICAgKlxuICAgKiAgIDEuIENvbnN0YW50Tm9kZXMgYXJlIGNvbnN0YW50cy5cbiAgICogICAyLiBJZiB0aGVyZSBleGlzdHMgYSBTeW1ib2xOb2RlLCBvZiB3aGljaCB3ZSBhcmUgZGlmZmVyZW50aWF0aW5nIG92ZXIsXG4gICAqICAgICAgaW4gdGhlIHN1YnRyZWUgaXQgaXMgbm90IGNvbnN0YW50LlxuICAgKlxuICAgKiBAcGFyYW0gIHtPYmplY3R9IGNvbnN0Tm9kZXMgIEhvbGRzIHRoZSBub2RlcyB0aGF0IGFyZSBjb25zdGFudFxuICAgKiBAcGFyYW0gIHtDb25zdGFudE5vZGUgfCBTeW1ib2xOb2RlIHwgUGFyZW50aGVzaXNOb2RlIHwgRnVuY3Rpb25Ob2RlIHwgT3BlcmF0b3JOb2RlfSBub2RlXG4gICAqIEBwYXJhbSAge3N0cmluZ30gdmFyTmFtZSAgICAgVmFyaWFibGUgdGhhdCB3ZSBhcmUgZGlmZmVyZW50aWF0aW5nXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59ICBpZiBub2RlIGlzIGNvbnN0YW50XG4gICAqL1xuICAvLyBUT0RPOiBjYW4gd2UgcmV3cml0ZSBjb25zdFRhZyBpbnRvIGEgcHVyZSBmdW5jdGlvbj9cblxuXG4gIHZhciBjb25zdFRhZyA9IHR5cGVkKCdjb25zdFRhZycsIHtcbiAgICAnT2JqZWN0LCBDb25zdGFudE5vZGUsIHN0cmluZyc6IGZ1bmN0aW9uIE9iamVjdENvbnN0YW50Tm9kZVN0cmluZyhjb25zdE5vZGVzLCBub2RlKSB7XG4gICAgICBjb25zdE5vZGVzW25vZGVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgJ09iamVjdCwgU3ltYm9sTm9kZSwgc3RyaW5nJzogZnVuY3Rpb24gT2JqZWN0U3ltYm9sTm9kZVN0cmluZyhjb25zdE5vZGVzLCBub2RlLCB2YXJOYW1lKSB7XG4gICAgICAvLyBUcmVhdCBvdGhlciB2YXJpYWJsZXMgbGlrZSBjb25zdGFudHMuIEZvciByZWFzb25pbmcsIHNlZTpcbiAgICAgIC8vICAgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUGFydGlhbF9kZXJpdmF0aXZlXG4gICAgICBpZiAobm9kZS5uYW1lICE9PSB2YXJOYW1lKSB7XG4gICAgICAgIGNvbnN0Tm9kZXNbbm9kZV0gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgJ09iamVjdCwgUGFyZW50aGVzaXNOb2RlLCBzdHJpbmcnOiBmdW5jdGlvbiBPYmplY3RQYXJlbnRoZXNpc05vZGVTdHJpbmcoY29uc3ROb2Rlcywgbm9kZSwgdmFyTmFtZSkge1xuICAgICAgcmV0dXJuIGNvbnN0VGFnKGNvbnN0Tm9kZXMsIG5vZGUuY29udGVudCwgdmFyTmFtZSk7XG4gICAgfSxcbiAgICAnT2JqZWN0LCBGdW5jdGlvbkFzc2lnbm1lbnROb2RlLCBzdHJpbmcnOiBmdW5jdGlvbiBPYmplY3RGdW5jdGlvbkFzc2lnbm1lbnROb2RlU3RyaW5nKGNvbnN0Tm9kZXMsIG5vZGUsIHZhck5hbWUpIHtcbiAgICAgIGlmIChub2RlLnBhcmFtcy5pbmRleE9mKHZhck5hbWUpID09PSAtMSkge1xuICAgICAgICBjb25zdE5vZGVzW25vZGVdID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb25zdFRhZyhjb25zdE5vZGVzLCBub2RlLmV4cHIsIHZhck5hbWUpO1xuICAgIH0sXG4gICAgJ09iamVjdCwgRnVuY3Rpb25Ob2RlIHwgT3BlcmF0b3JOb2RlLCBzdHJpbmcnOiBmdW5jdGlvbiBPYmplY3RGdW5jdGlvbk5vZGVPcGVyYXRvck5vZGVTdHJpbmcoY29uc3ROb2Rlcywgbm9kZSwgdmFyTmFtZSkge1xuICAgICAgaWYgKG5vZGUuYXJncy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHZhciBpc0NvbnN0ID0gY29uc3RUYWcoY29uc3ROb2Rlcywgbm9kZS5hcmdzWzBdLCB2YXJOYW1lKTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IG5vZGUuYXJncy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIGlzQ29uc3QgPSBjb25zdFRhZyhjb25zdE5vZGVzLCBub2RlLmFyZ3NbaV0sIHZhck5hbWUpICYmIGlzQ29uc3Q7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNDb25zdCkge1xuICAgICAgICAgIGNvbnN0Tm9kZXNbbm9kZV0gPSB0cnVlO1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQXBwbGllcyBkaWZmZXJlbnRpYXRpb24gcnVsZXMuXG4gICAqXG4gICAqIEBwYXJhbSAge0NvbnN0YW50Tm9kZSB8IFN5bWJvbE5vZGUgfCBQYXJlbnRoZXNpc05vZGUgfCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGV9IG5vZGVcbiAgICogQHBhcmFtICB7T2JqZWN0fSBjb25zdE5vZGVzICBIb2xkcyB0aGUgbm9kZXMgdGhhdCBhcmUgY29uc3RhbnRcbiAgICogQHJldHVybiB7Q29uc3RhbnROb2RlIHwgU3ltYm9sTm9kZSB8IFBhcmVudGhlc2lzTm9kZSB8IEZ1bmN0aW9uTm9kZSB8IE9wZXJhdG9yTm9kZX0gICAgVGhlIGRlcml2YXRpdmUgb2YgYGV4cHJgXG4gICAqL1xuXG4gIHZhciBfZGVyaXZhdGl2ZSA9IHR5cGVkKCdfZGVyaXZhdGl2ZScsIHtcbiAgICAnQ29uc3RhbnROb2RlLCBPYmplY3QnOiBmdW5jdGlvbiBDb25zdGFudE5vZGVPYmplY3Qobm9kZSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZUNvbnN0YW50Tm9kZSgwKTtcbiAgICB9LFxuICAgICdTeW1ib2xOb2RlLCBPYmplY3QnOiBmdW5jdGlvbiBTeW1ib2xOb2RlT2JqZWN0KG5vZGUsIGNvbnN0Tm9kZXMpIHtcbiAgICAgIGlmIChjb25zdE5vZGVzW25vZGVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbnN0YW50Tm9kZSgwKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNyZWF0ZUNvbnN0YW50Tm9kZSgxKTtcbiAgICB9LFxuICAgICdQYXJlbnRoZXNpc05vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIFBhcmVudGhlc2lzTm9kZU9iamVjdChub2RlLCBjb25zdE5vZGVzKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcmVudGhlc2lzTm9kZShfZGVyaXZhdGl2ZShub2RlLmNvbnRlbnQsIGNvbnN0Tm9kZXMpKTtcbiAgICB9LFxuICAgICdGdW5jdGlvbkFzc2lnbm1lbnROb2RlLCBPYmplY3QnOiBmdW5jdGlvbiBGdW5jdGlvbkFzc2lnbm1lbnROb2RlT2JqZWN0KG5vZGUsIGNvbnN0Tm9kZXMpIHtcbiAgICAgIGlmIChjb25zdE5vZGVzW25vZGVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUNvbnN0YW50Tm9kZSgwKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9kZXJpdmF0aXZlKG5vZGUuZXhwciwgY29uc3ROb2Rlcyk7XG4gICAgfSxcbiAgICAnRnVuY3Rpb25Ob2RlLCBPYmplY3QnOiBmdW5jdGlvbiBGdW5jdGlvbk5vZGVPYmplY3Qobm9kZSwgY29uc3ROb2Rlcykge1xuICAgICAgaWYgKG5vZGUuYXJncy5sZW5ndGggIT09IDEpIHtcbiAgICAgICAgZnVuY0FyZ3NDaGVjayhub2RlKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGNvbnN0Tm9kZXNbbm9kZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnROb2RlKDApO1xuICAgICAgfVxuXG4gICAgICB2YXIgYXJnMCA9IG5vZGUuYXJnc1swXTtcbiAgICAgIHZhciBhcmcxO1xuICAgICAgdmFyIGRpdiA9IGZhbHNlOyAvLyBpcyBvdXRwdXQgYSBmcmFjdGlvbj9cblxuICAgICAgdmFyIG5lZ2F0aXZlID0gZmFsc2U7IC8vIGlzIG91dHB1dCBuZWdhdGl2ZT9cblxuICAgICAgdmFyIGZ1bmNEZXJpdmF0aXZlO1xuXG4gICAgICBzd2l0Y2ggKG5vZGUubmFtZSkge1xuICAgICAgICBjYXNlICdjYnJ0JzpcbiAgICAgICAgICAvLyBkL2R4KGNicnQoeCkpID0gMSAvICgzeF4oMi8zKSlcbiAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtjcmVhdGVDb25zdGFudE5vZGUoMyksIG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAsIG5ldyBPcGVyYXRvck5vZGUoJy8nLCAnZGl2aWRlJywgW2NyZWF0ZUNvbnN0YW50Tm9kZSgyKSwgY3JlYXRlQ29uc3RhbnROb2RlKDMpXSldKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3NxcnQnOlxuICAgICAgICBjYXNlICdudGhSb290JzpcbiAgICAgICAgICAvLyBkL2R4KHNxcnQoeCkpID0gMSAvICgyKnNxcnQoeCkpXG4gICAgICAgICAgaWYgKG5vZGUuYXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbY3JlYXRlQ29uc3RhbnROb2RlKDIpLCBuZXcgRnVuY3Rpb25Ob2RlKCdzcXJ0JywgW2FyZzBdKV0pO1xuICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5hcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgLy8gUmVhcnJhbmdlIGZyb20gbnRoUm9vdCh4LCBhKSAtPiB4XigxL2EpXG4gICAgICAgICAgICBhcmcxID0gbmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbY3JlYXRlQ29uc3RhbnROb2RlKDEpLCBub2RlLmFyZ3NbMV1dKTsgLy8gSXMgYSB2YXJpYWJsZT9cblxuICAgICAgICAgICAgY29uc3ROb2Rlc1thcmcxXSA9IGNvbnN0Tm9kZXNbbm9kZS5hcmdzWzFdXTtcbiAgICAgICAgICAgIHJldHVybiBfZGVyaXZhdGl2ZShuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLCBhcmcxXSksIGNvbnN0Tm9kZXMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2xvZzEwJzpcbiAgICAgICAgICBhcmcxID0gY3JlYXRlQ29uc3RhbnROb2RlKDEwKTtcblxuICAgICAgICAvKiBmYWxsIHRocm91Z2ghICovXG5cbiAgICAgICAgY2FzZSAnbG9nJzpcbiAgICAgICAgICBpZiAoIWFyZzEgJiYgbm9kZS5hcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgLy8gZC9keChsb2coeCkpID0gMSAvIHhcbiAgICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gYXJnMC5jbG9uZSgpO1xuICAgICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUuYXJncy5sZW5ndGggPT09IDEgJiYgYXJnMSB8fCBub2RlLmFyZ3MubGVuZ3RoID09PSAyICYmIGNvbnN0Tm9kZXNbbm9kZS5hcmdzWzFdXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAvLyBkL2R4KGxvZyh4LCBjKSkgPSAxIC8gKHgqbG4oYykpXG4gICAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbYXJnMC5jbG9uZSgpLCBuZXcgRnVuY3Rpb25Ob2RlKCdsb2cnLCBbYXJnMSB8fCBub2RlLmFyZ3NbMV1dKV0pO1xuICAgICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUuYXJncy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIC8vIGQvZHgobG9nKGYoeCksIGcoeCkpKSA9IGQvZHgobG9nKGYoeCkpIC8gbG9nKGcoeCkpKVxuICAgICAgICAgICAgcmV0dXJuIF9kZXJpdmF0aXZlKG5ldyBPcGVyYXRvck5vZGUoJy8nLCAnZGl2aWRlJywgW25ldyBGdW5jdGlvbk5vZGUoJ2xvZycsIFthcmcwXSksIG5ldyBGdW5jdGlvbk5vZGUoJ2xvZycsIFtub2RlLmFyZ3NbMV1dKV0pLCBjb25zdE5vZGVzKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdwb3cnOlxuICAgICAgICAgIGNvbnN0Tm9kZXNbYXJnMV0gPSBjb25zdE5vZGVzW25vZGUuYXJnc1sxXV07IC8vIFBhc3MgdG8gcG93IG9wZXJhdG9yIG5vZGUgcGFyc2VyXG5cbiAgICAgICAgICByZXR1cm4gX2Rlcml2YXRpdmUobmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbYXJnMCwgbm9kZS5hcmdzWzFdXSksIGNvbnN0Tm9kZXMpO1xuXG4gICAgICAgIGNhc2UgJ2V4cCc6XG4gICAgICAgICAgLy8gZC9keChlXngpID0gZV54XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgRnVuY3Rpb25Ob2RlKCdleHAnLCBbYXJnMC5jbG9uZSgpXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnc2luJzpcbiAgICAgICAgICAvLyBkL2R4KHNpbih4KSkgPSBjb3MoeClcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBGdW5jdGlvbk5vZGUoJ2NvcycsIFthcmcwLmNsb25lKCldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdjb3MnOlxuICAgICAgICAgIC8vIGQvZHgoY29zKHgpKSA9IC1zaW4oeClcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJy0nLCAndW5hcnlNaW51cycsIFtuZXcgRnVuY3Rpb25Ob2RlKCdzaW4nLCBbYXJnMC5jbG9uZSgpXSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICd0YW4nOlxuICAgICAgICAgIC8vIGQvZHgodGFuKHgpKSA9IHNlYyh4KV4yXG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFtuZXcgRnVuY3Rpb25Ob2RlKCdzZWMnLCBbYXJnMC5jbG9uZSgpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3NlYyc6XG4gICAgICAgICAgLy8gZC9keChzZWMoeCkpID0gc2VjKHgpdGFuKHgpXG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25vZGUsIG5ldyBGdW5jdGlvbk5vZGUoJ3RhbicsIFthcmcwLmNsb25lKCldKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2NzYyc6XG4gICAgICAgICAgLy8gZC9keChjc2MoeCkpID0gLWNzYyh4KWNvdCh4KVxuICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbm9kZSwgbmV3IEZ1bmN0aW9uTm9kZSgnY290JywgW2FyZzAuY2xvbmUoKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnY290JzpcbiAgICAgICAgICAvLyBkL2R4KGNvdCh4KSkgPSAtY3NjKHgpXjJcbiAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFtuZXcgRnVuY3Rpb25Ob2RlKCdjc2MnLCBbYXJnMC5jbG9uZSgpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2FzaW4nOlxuICAgICAgICAgIC8vIGQvZHgoYXNpbih4KSkgPSAxIC8gc3FydCgxIC0geF4yKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgRnVuY3Rpb25Ob2RlKCdzcXJ0JywgW25ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbY3JlYXRlQ29uc3RhbnROb2RlKDEpLCBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pXSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhY29zJzpcbiAgICAgICAgICAvLyBkL2R4KGFjb3MoeCkpID0gLTEgLyBzcXJ0KDEgLSB4XjIpXG4gICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgRnVuY3Rpb25Ob2RlKCdzcXJ0JywgW25ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbY3JlYXRlQ29uc3RhbnROb2RlKDEpLCBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pXSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhdGFuJzpcbiAgICAgICAgICAvLyBkL2R4KGF0YW4oeCkpID0gMSAvICh4XjIgKyAxKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcrJywgJ2FkZCcsIFtuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pLCBjcmVhdGVDb25zdGFudE5vZGUoMSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdhc2VjJzpcbiAgICAgICAgICAvLyBkL2R4KGFzZWMoeCkpID0gMSAvICh8eHwqc3FydCh4XjIgLSAxKSlcbiAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtuZXcgRnVuY3Rpb25Ob2RlKCdhYnMnLCBbYXJnMC5jbG9uZSgpXSksIG5ldyBGdW5jdGlvbk5vZGUoJ3NxcnQnLCBbbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFtuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pLCBjcmVhdGVDb25zdGFudE5vZGUoMSldKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYWNzYyc6XG4gICAgICAgICAgLy8gZC9keChhY3NjKHgpKSA9IC0xIC8gKHx4fCpzcXJ0KHheMiAtIDEpKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgbmVnYXRpdmUgPSB0cnVlO1xuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtuZXcgRnVuY3Rpb25Ob2RlKCdhYnMnLCBbYXJnMC5jbG9uZSgpXSksIG5ldyBGdW5jdGlvbk5vZGUoJ3NxcnQnLCBbbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFtuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pLCBjcmVhdGVDb25zdGFudE5vZGUoMSldKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYWNvdCc6XG4gICAgICAgICAgLy8gZC9keChhY290KHgpKSA9IC0xIC8gKHheMiArIDEpXG4gICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCcrJywgJ2FkZCcsIFtuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pLCBjcmVhdGVDb25zdGFudE5vZGUoMSldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdzaW5oJzpcbiAgICAgICAgICAvLyBkL2R4KHNpbmgoeCkpID0gY29zaCh4KVxuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IEZ1bmN0aW9uTm9kZSgnY29zaCcsIFthcmcwLmNsb25lKCldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdjb3NoJzpcbiAgICAgICAgICAvLyBkL2R4KGNvc2goeCkpID0gc2luaCh4KVxuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IEZ1bmN0aW9uTm9kZSgnc2luaCcsIFthcmcwLmNsb25lKCldKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICd0YW5oJzpcbiAgICAgICAgICAvLyBkL2R4KHRhbmgoeCkpID0gc2VjaCh4KV4yXG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFtuZXcgRnVuY3Rpb25Ob2RlKCdzZWNoJywgW2FyZzAuY2xvbmUoKV0pLCBjcmVhdGVDb25zdGFudE5vZGUoMildKTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdzZWNoJzpcbiAgICAgICAgICAvLyBkL2R4KHNlY2goeCkpID0gLXNlY2goeCl0YW5oKHgpXG4gICAgICAgICAgbmVnYXRpdmUgPSB0cnVlO1xuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtub2RlLCBuZXcgRnVuY3Rpb25Ob2RlKCd0YW5oJywgW2FyZzAuY2xvbmUoKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnY3NjaCc6XG4gICAgICAgICAgLy8gZC9keChjc2NoKHgpKSA9IC1jc2NoKHgpY290aCh4KVxuICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbm9kZSwgbmV3IEZ1bmN0aW9uTm9kZSgnY290aCcsIFthcmcwLmNsb25lKCldKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2NvdGgnOlxuICAgICAgICAgIC8vIGQvZHgoY290aCh4KSkgPSAtY3NjaCh4KV4yXG4gICAgICAgICAgbmVnYXRpdmUgPSB0cnVlO1xuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbbmV3IEZ1bmN0aW9uTm9kZSgnY3NjaCcsIFthcmcwLmNsb25lKCldKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYXNpbmgnOlxuICAgICAgICAgIC8vIGQvZHgoYXNpbmgoeCkpID0gMSAvIHNxcnQoeF4yICsgMSlcbiAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IEZ1bmN0aW9uTm9kZSgnc3FydCcsIFtuZXcgT3BlcmF0b3JOb2RlKCcrJywgJ2FkZCcsIFtuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pLCBjcmVhdGVDb25zdGFudE5vZGUoMSldKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Fjb3NoJzpcbiAgICAgICAgICAvLyBkL2R4KGFjb3NoKHgpKSA9IDEgLyBzcXJ0KHheMiAtIDEpOyBYWFggcG90ZW50aWFsbHkgb25seSBmb3IgeCA+PSAxICh0aGUgcmVhbCBzcGVjdHJ1bSlcbiAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IEZ1bmN0aW9uTm9kZSgnc3FydCcsIFtuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3N1YnRyYWN0JywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW2FyZzAuY2xvbmUoKSwgY3JlYXRlQ29uc3RhbnROb2RlKDIpXSksIGNyZWF0ZUNvbnN0YW50Tm9kZSgxKV0pXSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnYXRhbmgnOlxuICAgICAgICAgIC8vIGQvZHgoYXRhbmgoeCkpID0gMSAvICgxIC0geF4yKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3N1YnRyYWN0JywgW2NyZWF0ZUNvbnN0YW50Tm9kZSgxKSwgbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbYXJnMC5jbG9uZSgpLCBjcmVhdGVDb25zdGFudE5vZGUoMildKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2FzZWNoJzpcbiAgICAgICAgICAvLyBkL2R4KGFzZWNoKHgpKSA9IC0xIC8gKHgqc3FydCgxIC0geF4yKSlcbiAgICAgICAgICBkaXYgPSB0cnVlO1xuICAgICAgICAgIG5lZ2F0aXZlID0gdHJ1ZTtcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbYXJnMC5jbG9uZSgpLCBuZXcgRnVuY3Rpb25Ob2RlKCdzcXJ0JywgW25ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbY3JlYXRlQ29uc3RhbnROb2RlKDEpLCBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcwLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pXSldKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Fjc2NoJzpcbiAgICAgICAgICAvLyBkL2R4KGFjc2NoKHgpKSA9IC0xIC8gKHx4fCpzcXJ0KHheMiArIDEpKVxuICAgICAgICAgIGRpdiA9IHRydWU7XG4gICAgICAgICAgbmVnYXRpdmUgPSB0cnVlO1xuICAgICAgICAgIGZ1bmNEZXJpdmF0aXZlID0gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtuZXcgRnVuY3Rpb25Ob2RlKCdhYnMnLCBbYXJnMC5jbG9uZSgpXSksIG5ldyBGdW5jdGlvbk5vZGUoJ3NxcnQnLCBbbmV3IE9wZXJhdG9yTm9kZSgnKycsICdhZGQnLCBbbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbYXJnMC5jbG9uZSgpLCBjcmVhdGVDb25zdGFudE5vZGUoMildKSwgY3JlYXRlQ29uc3RhbnROb2RlKDEpXSldKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Fjb3RoJzpcbiAgICAgICAgICAvLyBkL2R4KGFjb3RoKHgpKSA9IC0xIC8gKDEgLSB4XjIpXG4gICAgICAgICAgZGl2ID0gdHJ1ZTtcbiAgICAgICAgICBuZWdhdGl2ZSA9IHRydWU7XG4gICAgICAgICAgZnVuY0Rlcml2YXRpdmUgPSBuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3N1YnRyYWN0JywgW2NyZWF0ZUNvbnN0YW50Tm9kZSgxKSwgbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbYXJnMC5jbG9uZSgpLCBjcmVhdGVDb25zdGFudE5vZGUoMildKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Ficyc6XG4gICAgICAgICAgLy8gZC9keChhYnMoeCkpID0gYWJzKHgpL3hcbiAgICAgICAgICBmdW5jRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJy8nLCAnZGl2aWRlJywgW25ldyBGdW5jdGlvbk5vZGUobmV3IFN5bWJvbE5vZGUoJ2FicycpLCBbYXJnMC5jbG9uZSgpXSksIGFyZzAuY2xvbmUoKV0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2dhbW1hJzogLy8gTmVlZHMgZGlnYW1tYSBmdW5jdGlvbiwgZC9keChnYW1tYSh4KSkgPSBnYW1tYSh4KWRpZ2FtbWEoeClcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRnVuY3Rpb24gXCInICsgbm9kZS5uYW1lICsgJ1wiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgZGVyaXZhdGl2ZSwgb3IgYSB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGlzIHBhc3NlZCcpO1xuICAgICAgfVxuXG4gICAgICB2YXIgb3AsIGZ1bmM7XG5cbiAgICAgIGlmIChkaXYpIHtcbiAgICAgICAgb3AgPSAnLyc7XG4gICAgICAgIGZ1bmMgPSAnZGl2aWRlJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wID0gJyonO1xuICAgICAgICBmdW5jID0gJ211bHRpcGx5JztcbiAgICAgIH1cbiAgICAgIC8qIEFwcGx5IGNoYWluIHJ1bGUgdG8gYWxsIGZ1bmN0aW9uczpcbiAgICAgICAgIEYoeCkgID0gZihnKHgpKVxuICAgICAgICAgRicoeCkgPSBnJyh4KSpmJyhnKHgpKSAqL1xuXG5cbiAgICAgIHZhciBjaGFpbkRlcml2YXRpdmUgPSBfZGVyaXZhdGl2ZShhcmcwLCBjb25zdE5vZGVzKTtcblxuICAgICAgaWYgKG5lZ2F0aXZlKSB7XG4gICAgICAgIGNoYWluRGVyaXZhdGl2ZSA9IG5ldyBPcGVyYXRvck5vZGUoJy0nLCAndW5hcnlNaW51cycsIFtjaGFpbkRlcml2YXRpdmVdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUob3AsIGZ1bmMsIFtjaGFpbkRlcml2YXRpdmUsIGZ1bmNEZXJpdmF0aXZlXSk7XG4gICAgfSxcbiAgICAnT3BlcmF0b3JOb2RlLCBPYmplY3QnOiBmdW5jdGlvbiBPcGVyYXRvck5vZGVPYmplY3Qobm9kZSwgY29uc3ROb2Rlcykge1xuICAgICAgaWYgKGNvbnN0Tm9kZXNbbm9kZV0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnROb2RlKDApO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5vcCA9PT0gJysnKSB7XG4gICAgICAgIC8vIGQvZHgoc3VtKGYoeCkpID0gc3VtKGYnKHgpKVxuICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZShub2RlLm9wLCBub2RlLmZuLCBub2RlLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICByZXR1cm4gX2Rlcml2YXRpdmUoYXJnLCBjb25zdE5vZGVzKTtcbiAgICAgICAgfSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5vcCA9PT0gJy0nKSB7XG4gICAgICAgIC8vIGQvZHgoKy8tZih4KSkgPSArLy1mJyh4KVxuICAgICAgICBpZiAobm9kZS5pc1VuYXJ5KCkpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZShub2RlLm9wLCBub2RlLmZuLCBbX2Rlcml2YXRpdmUobm9kZS5hcmdzWzBdLCBjb25zdE5vZGVzKV0pO1xuICAgICAgICB9IC8vIExpbmVhcml0eSBvZiBkaWZmZXJlbnRpYXRpb24sIGQvZHgoZih4KSArLy0gZyh4KSkgPSBmJyh4KSArLy0gZycoeClcblxuXG4gICAgICAgIGlmIChub2RlLmlzQmluYXJ5KCkpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZShub2RlLm9wLCBub2RlLmZuLCBbX2Rlcml2YXRpdmUobm9kZS5hcmdzWzBdLCBjb25zdE5vZGVzKSwgX2Rlcml2YXRpdmUobm9kZS5hcmdzWzFdLCBjb25zdE5vZGVzKV0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChub2RlLm9wID09PSAnKicpIHtcbiAgICAgICAgLy8gZC9keChjKmYoeCkpID0gYypmJyh4KVxuICAgICAgICB2YXIgY29uc3RhbnRUZXJtcyA9IG5vZGUuYXJncy5maWx0ZXIoZnVuY3Rpb24gKGFyZykge1xuICAgICAgICAgIHJldHVybiBjb25zdE5vZGVzW2FyZ10gIT09IHVuZGVmaW5lZDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGNvbnN0YW50VGVybXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIHZhciBub25Db25zdGFudFRlcm1zID0gbm9kZS5hcmdzLmZpbHRlcihmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uc3ROb2Rlc1thcmddID09PSB1bmRlZmluZWQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFyIG5vbkNvbnN0YW50Tm9kZSA9IG5vbkNvbnN0YW50VGVybXMubGVuZ3RoID09PSAxID8gbm9uQ29uc3RhbnRUZXJtc1swXSA6IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBub25Db25zdGFudFRlcm1zKTtcbiAgICAgICAgICB2YXIgbmV3QXJncyA9IGNvbnN0YW50VGVybXMuY29uY2F0KF9kZXJpdmF0aXZlKG5vbkNvbnN0YW50Tm9kZSwgY29uc3ROb2RlcykpO1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgbmV3QXJncyk7XG4gICAgICAgIH0gLy8gUHJvZHVjdCBSdWxlLCBkL2R4KGYoeCkqZyh4KSkgPSBmJyh4KSpnKHgpICsgZih4KSpnJyh4KVxuXG5cbiAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJysnLCAnYWRkJywgbm9kZS5hcmdzLm1hcChmdW5jdGlvbiAoYXJnT3V0ZXIpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIG5vZGUuYXJncy5tYXAoZnVuY3Rpb24gKGFyZ0lubmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJnSW5uZXIgPT09IGFyZ091dGVyID8gX2Rlcml2YXRpdmUoYXJnSW5uZXIsIGNvbnN0Tm9kZXMpIDogYXJnSW5uZXIuY2xvbmUoKTtcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0pKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUub3AgPT09ICcvJyAmJiBub2RlLmlzQmluYXJ5KCkpIHtcbiAgICAgICAgdmFyIGFyZzAgPSBub2RlLmFyZ3NbMF07XG4gICAgICAgIHZhciBhcmcxID0gbm9kZS5hcmdzWzFdOyAvLyBkL2R4KGYoeCkgLyBjKSA9IGYnKHgpIC8gY1xuXG4gICAgICAgIGlmIChjb25zdE5vZGVzW2FyZzFdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbX2Rlcml2YXRpdmUoYXJnMCwgY29uc3ROb2RlcyksIGFyZzFdKTtcbiAgICAgICAgfSAvLyBSZWNpcHJvY2FsIFJ1bGUsIGQvZHgoYyAvIGYoeCkpID0gLWMoZicoeCkvZih4KV4yKVxuXG5cbiAgICAgICAgaWYgKGNvbnN0Tm9kZXNbYXJnMF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25ldyBPcGVyYXRvck5vZGUoJy0nLCAndW5hcnlNaW51cycsIFthcmcwXSksIG5ldyBPcGVyYXRvck5vZGUoJy8nLCAnZGl2aWRlJywgW19kZXJpdmF0aXZlKGFyZzEsIGNvbnN0Tm9kZXMpLCBuZXcgT3BlcmF0b3JOb2RlKCdeJywgJ3BvdycsIFthcmcxLmNsb25lKCksIGNyZWF0ZUNvbnN0YW50Tm9kZSgyKV0pXSldKTtcbiAgICAgICAgfSAvLyBRdW90aWVudCBydWxlLCBkL2R4KGYoeCkgLyBnKHgpKSA9IChmJyh4KWcoeCkgLSBmKHgpZycoeCkpIC8gZyh4KV4yXG5cblxuICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFtuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW19kZXJpdmF0aXZlKGFyZzAsIGNvbnN0Tm9kZXMpLCBhcmcxLmNsb25lKCldKSwgbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFthcmcwLmNsb25lKCksIF9kZXJpdmF0aXZlKGFyZzEsIGNvbnN0Tm9kZXMpXSldKSwgbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbYXJnMS5jbG9uZSgpLCBjcmVhdGVDb25zdGFudE5vZGUoMildKV0pO1xuICAgICAgfVxuXG4gICAgICBpZiAobm9kZS5vcCA9PT0gJ14nICYmIG5vZGUuaXNCaW5hcnkoKSkge1xuICAgICAgICB2YXIgX2FyZyA9IG5vZGUuYXJnc1swXTtcbiAgICAgICAgdmFyIF9hcmcyID0gbm9kZS5hcmdzWzFdO1xuXG4gICAgICAgIGlmIChjb25zdE5vZGVzW19hcmddICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAvLyBJZiBpcyBzZWNyZXRseSBjb25zdGFudDsgMF5mKHgpID0gMSAoaW4gSlMpLCAxXmYoeCkgPSAxXG4gICAgICAgICAgaWYgKCgwLCBfaXMuaXNDb25zdGFudE5vZGUpKF9hcmcpICYmIChpc1plcm8oX2FyZy52YWx1ZSkgfHwgZXF1YWwoX2FyZy52YWx1ZSwgMSkpKSB7XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnROb2RlKDApO1xuICAgICAgICAgIH0gLy8gZC9keChjXmYoeCkpID0gY15mKHgpKmxuKGMpKmYnKHgpXG5cblxuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25vZGUsIG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbmV3IEZ1bmN0aW9uTm9kZSgnbG9nJywgW19hcmcuY2xvbmUoKV0pLCBfZGVyaXZhdGl2ZShfYXJnMi5jbG9uZSgpLCBjb25zdE5vZGVzKV0pXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uc3ROb2Rlc1tfYXJnMl0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShfYXJnMikpIHtcbiAgICAgICAgICAgIC8vIElmIGlzIHNlY3JldGx5IGNvbnN0YW50OyBmKHgpXjAgPSAxIC0+IGQvZHgoMSkgPSAwXG4gICAgICAgICAgICBpZiAoaXNaZXJvKF9hcmcyLnZhbHVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlQ29uc3RhbnROb2RlKDApO1xuICAgICAgICAgICAgfSAvLyBJZ25vcmUgZXhwb25lbnQ7IGYoeCleMSA9IGYoeClcblxuXG4gICAgICAgICAgICBpZiAoZXF1YWwoX2FyZzIudmFsdWUsIDEpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBfZGVyaXZhdGl2ZShfYXJnLCBjb25zdE5vZGVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIEVsZW1lbnRhcnkgUG93ZXIgUnVsZSwgZC9keChmKHgpXmMpID0gYypmJyh4KSpmKHgpXihjLTEpXG5cblxuICAgICAgICAgIHZhciBwb3dNaW51c09uZSA9IG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW19hcmcuY2xvbmUoKSwgbmV3IE9wZXJhdG9yTm9kZSgnLScsICdzdWJ0cmFjdCcsIFtfYXJnMiwgY3JlYXRlQ29uc3RhbnROb2RlKDEpXSldKTtcbiAgICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZSgnKicsICdtdWx0aXBseScsIFtfYXJnMi5jbG9uZSgpLCBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW19kZXJpdmF0aXZlKF9hcmcsIGNvbnN0Tm9kZXMpLCBwb3dNaW51c09uZV0pXSk7XG4gICAgICAgIH0gLy8gRnVuY3Rpb25hbCBQb3dlciBSdWxlLCBkL2R4KGZeZykgPSBmXmcqW2YnKihnL2YpICsgZydsbihmKV1cblxuXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW19hcmcuY2xvbmUoKSwgX2FyZzIuY2xvbmUoKV0pLCBuZXcgT3BlcmF0b3JOb2RlKCcrJywgJ2FkZCcsIFtuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW19kZXJpdmF0aXZlKF9hcmcsIGNvbnN0Tm9kZXMpLCBuZXcgT3BlcmF0b3JOb2RlKCcvJywgJ2RpdmlkZScsIFtfYXJnMi5jbG9uZSgpLCBfYXJnLmNsb25lKCldKV0pLCBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW19kZXJpdmF0aXZlKF9hcmcyLCBjb25zdE5vZGVzKSwgbmV3IEZ1bmN0aW9uTm9kZSgnbG9nJywgW19hcmcuY2xvbmUoKV0pXSldKV0pO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09wZXJhdG9yIFwiJyArIG5vZGUub3AgKyAnXCIgaXMgbm90IHN1cHBvcnRlZCBieSBkZXJpdmF0aXZlLCBvciBhIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMgaXMgcGFzc2VkJyk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIEVuc3VyZXMgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIGEgZnVuY3Rpb24gYXJlIGNvcnJlY3QsXG4gICAqIGFuZCB3aWxsIHRocm93IGFuIGVycm9yIG90aGVyd2lzZS5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbk5vZGV9IG5vZGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBmdW5jQXJnc0NoZWNrKG5vZGUpIHtcbiAgICAvLyBUT0RPIGFkZCBtaW4sIG1heCBldGNcbiAgICBpZiAoKG5vZGUubmFtZSA9PT0gJ2xvZycgfHwgbm9kZS5uYW1lID09PSAnbnRoUm9vdCcgfHwgbm9kZS5uYW1lID09PSAncG93JykgJiYgbm9kZS5hcmdzLmxlbmd0aCA9PT0gMikge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gVGhlcmUgc2hvdWxkIGJlIGFuIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzIGlmIHdlIHJlYWNoIGhlcmVcbiAgICAvLyBDaGFuZ2UgYWxsIGFyZ3MgdG8gY29uc3RhbnRzIHRvIGF2b2lkIHVuaWRlbnRpZmllZFxuICAgIC8vIHN5bWJvbCBlcnJvciB3aGVuIGNvbXBpbGluZyBmdW5jdGlvblxuXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuYXJncy5sZW5ndGg7ICsraSkge1xuICAgICAgbm9kZS5hcmdzW2ldID0gY3JlYXRlQ29uc3RhbnROb2RlKDApO1xuICAgIH1cblxuICAgIG5vZGUuY29tcGlsZSgpLmV2YWx1YXRlKCk7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBUeXBlRXJyb3IsIGJ1dCBub25lIGZvdW5kJyk7XG4gIH1cbiAgLyoqXG4gICAqIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBjb25zdGFudCBub2RlIHdpdGggYSBzcGVjaWZpYyB0eXBlXG4gICAqIChudW1iZXIsIEJpZ051bWJlciwgRnJhY3Rpb24pXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3ZhbHVlVHlwZV1cbiAgICogQHJldHVybiB7Q29uc3RhbnROb2RlfVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNyZWF0ZUNvbnN0YW50Tm9kZSh2YWx1ZSwgdmFsdWVUeXBlKSB7XG4gICAgcmV0dXJuIG5ldyBDb25zdGFudE5vZGUobnVtZXJpYyh2YWx1ZSwgdmFsdWVUeXBlIHx8IGNvbmZpZy5udW1iZXIpKTtcbiAgfVxuXG4gIHJldHVybiBkZXJpdmF0aXZlO1xufSk7XG5leHBvcnRzLmNyZWF0ZURlcml2YXRpdmUgPSBjcmVhdGVEZXJpdmF0aXZlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSYXRpb25hbGl6ZSA9IHZvaWQgMDtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9zaW1wbGlmeUNvbnN0YW50ID0gcmVxdWlyZShcIi4vc2ltcGxpZnkvc2ltcGxpZnlDb25zdGFudFwiKTtcblxudmFyIF9zaW1wbGlmeUNvcmUgPSByZXF1aXJlKFwiLi9zaW1wbGlmeS9zaW1wbGlmeUNvcmVcIik7XG5cbnZhciBuYW1lID0gJ3JhdGlvbmFsaXplJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ2NvbmZpZycsICd0eXBlZCcsICdlcXVhbCcsICdpc1plcm8nLCAnYWRkJywgJ3N1YnRyYWN0JywgJ211bHRpcGx5JywgJ2RpdmlkZScsICdwb3cnLCAncGFyc2UnLCAnc2ltcGxpZnknLCAnP2JpZ251bWJlcicsICc/ZnJhY3Rpb24nLCAnbWF0aFdpdGhUcmFuc2Zvcm0nLCAnQ29uc3RhbnROb2RlJywgJ09wZXJhdG9yTm9kZScsICdGdW5jdGlvbk5vZGUnLCAnU3ltYm9sTm9kZScsICdQYXJlbnRoZXNpc05vZGUnXTtcbnZhciBjcmVhdGVSYXRpb25hbGl6ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGVxdWFsID0gX3JlZi5lcXVhbCxcbiAgICAgIGlzWmVybyA9IF9yZWYuaXNaZXJvLFxuICAgICAgYWRkID0gX3JlZi5hZGQsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICBkaXZpZGUgPSBfcmVmLmRpdmlkZSxcbiAgICAgIHBvdyA9IF9yZWYucG93LFxuICAgICAgcGFyc2UgPSBfcmVmLnBhcnNlLFxuICAgICAgc2ltcGxpZnkgPSBfcmVmLnNpbXBsaWZ5LFxuICAgICAgZnJhY3Rpb24gPSBfcmVmLmZyYWN0aW9uLFxuICAgICAgYmlnbnVtYmVyID0gX3JlZi5iaWdudW1iZXIsXG4gICAgICBtYXRoV2l0aFRyYW5zZm9ybSA9IF9yZWYubWF0aFdpdGhUcmFuc2Zvcm0sXG4gICAgICBDb25zdGFudE5vZGUgPSBfcmVmLkNvbnN0YW50Tm9kZSxcbiAgICAgIE9wZXJhdG9yTm9kZSA9IF9yZWYuT3BlcmF0b3JOb2RlLFxuICAgICAgRnVuY3Rpb25Ob2RlID0gX3JlZi5GdW5jdGlvbk5vZGUsXG4gICAgICBTeW1ib2xOb2RlID0gX3JlZi5TeW1ib2xOb2RlLFxuICAgICAgUGFyZW50aGVzaXNOb2RlID0gX3JlZi5QYXJlbnRoZXNpc05vZGU7XG4gIHZhciBzaW1wbGlmeUNvbnN0YW50ID0gKDAsIF9zaW1wbGlmeUNvbnN0YW50LmNyZWF0ZVNpbXBsaWZ5Q29uc3RhbnQpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgY29uZmlnOiBjb25maWcsXG4gICAgbWF0aFdpdGhUcmFuc2Zvcm06IG1hdGhXaXRoVHJhbnNmb3JtLFxuICAgIGZyYWN0aW9uOiBmcmFjdGlvbixcbiAgICBiaWdudW1iZXI6IGJpZ251bWJlcixcbiAgICBDb25zdGFudE5vZGU6IENvbnN0YW50Tm9kZSxcbiAgICBPcGVyYXRvck5vZGU6IE9wZXJhdG9yTm9kZSxcbiAgICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgICBTeW1ib2xOb2RlOiBTeW1ib2xOb2RlXG4gIH0pO1xuICB2YXIgc2ltcGxpZnlDb3JlID0gKDAsIF9zaW1wbGlmeUNvcmUuY3JlYXRlU2ltcGxpZnlDb3JlKSh7XG4gICAgZXF1YWw6IGVxdWFsLFxuICAgIGlzWmVybzogaXNaZXJvLFxuICAgIGFkZDogYWRkLFxuICAgIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgICBtdWx0aXBseTogbXVsdGlwbHksXG4gICAgZGl2aWRlOiBkaXZpZGUsXG4gICAgcG93OiBwb3csXG4gICAgQ29uc3RhbnROb2RlOiBDb25zdGFudE5vZGUsXG4gICAgT3BlcmF0b3JOb2RlOiBPcGVyYXRvck5vZGUsXG4gICAgRnVuY3Rpb25Ob2RlOiBGdW5jdGlvbk5vZGUsXG4gICAgUGFyZW50aGVzaXNOb2RlOiBQYXJlbnRoZXNpc05vZGVcbiAgfSk7XG4gIC8qKlxuICAgKiBUcmFuc2Zvcm0gYSByYXRpb25hbGl6YWJsZSBleHByZXNzaW9uIGluIGEgcmF0aW9uYWwgZnJhY3Rpb24uXG4gICAqIElmIHJhdGlvbmFsIGZyYWN0aW9uIGlzIG9uZSB2YXJpYWJsZSBwb2x5bm9taWFsIHRoZW4gY29udmVydHNcbiAgICogdGhlIG51bWVyYXRvciBhbmQgZGVub21pbmF0b3IgaW4gY2Fub25pY2FsIGZvcm0sIHdpdGggZGVjcmVhc2luZ1xuICAgKiBleHBvbmVudHMsIHJldHVybmluZyB0aGUgY29lZmZpY2llbnRzIG9mIG51bWVyYXRvci5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgcmF0aW9uYWxpemUoZXhwcilcbiAgICogICAgIHJhdGlvbmFsaXplKGV4cHIsIGRldGFpbGVkKVxuICAgKiAgICAgcmF0aW9uYWxpemUoZXhwciwgc2NvcGUpXG4gICAqICAgICByYXRpb25hbGl6ZShleHByLCBzY29wZSwgZGV0YWlsZWQpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5yYXRpb25hbGl6ZSgnc2luKHgpK3knKVxuICAgKiAgICAgICAgICAgICAgICAgICAvLyAgRXJyb3I6IFRoZXJlIGlzIGFuIHVuc29sdmVkIGZ1bmN0aW9uIGNhbGxcbiAgICogICAgIG1hdGgucmF0aW9uYWxpemUoJzJ4L3kgLSB5Lyh4KzEpJylcbiAgICogICAgICAgICAgICAgICAgICAgLy8gKDIqeF4yLXleMisyKngpLyh4KnkreSlcbiAgICogICAgIG1hdGgucmF0aW9uYWxpemUoJygyeCsxKV42JylcbiAgICogICAgICAgICAgICAgICAgICAgLy8gNjQqeF42KzE5Mip4XjUrMjQwKnheNCsxNjAqeF4zKzYwKnheMisxMip4KzFcbiAgICogICAgIG1hdGgucmF0aW9uYWxpemUoJzJ4LyggKDJ4LTEpIC8gKDN4KzIpICkgLSA1eC8gKCAoM3grNCkgLyAoMnheMi01KSApICsgMycpXG4gICAqICAgICAgICAgICAgICAgICAgIC8vIC0yMCp4XjQrMjgqeF4zKzEwNCp4XjIrNip4LTEyKS8oNip4XjIrNSp4LTQpXG4gICAqICAgICBtYXRoLnJhdGlvbmFsaXplKCd4LygxLXgpLyh4LTIpLyh4LTMpLyh4LTQpICsgMngvICggKDEtMngpLygyLTN4KSApLyAoKDMtNHgpLyg0LTV4KSApJykgPVxuICAgKiAgICAgICAgICAgICAgICAgICAvLyAoLTMwKnheNyszNDQqeF42LTE1MDYqeF41KzMyMDAqeF40LTM0NzIqeF4zKzE4NDYqeF4yLTM4MSp4KS9cbiAgICogICAgICAgICAgICAgICAgICAgLy8gICAgICgtOCp4XjYrOTAqeF41LTM4Myp4XjQrNzgwKnheMy03OTcqeF4yKzM5MCp4LTcyKVxuICAgKlxuICAgKiAgICAgbWF0aC5yYXRpb25hbGl6ZSgneCt4K3greScse3k6MX0pIC8vIDMqeCsxXG4gICAqICAgICBtYXRoLnJhdGlvbmFsaXplKCd4K3greCt5Jyx7fSkgICAgLy8gMyp4K3lcbiAgICpcbiAgICogICAgIGNvbnN0IHJldCA9IG1hdGgucmF0aW9uYWxpemUoJ3greCt4K3knLHt9LHRydWUpXG4gICAqICAgICAgICAgICAgICAgICAgIC8vIHJldC5leHByZXNzaW9uPTMqeCt5LCByZXQudmFyaWFibGVzID0gW1wieFwiLFwieVwiXVxuICAgKiAgICAgY29uc3QgcmV0ID0gbWF0aC5yYXRpb25hbGl6ZSgnLTIrNXheMicse30sdHJ1ZSlcbiAgICogICAgICAgICAgICAgICAgICAgLy8gcmV0LmV4cHJlc3Npb249NSp4XjItMiwgcmV0LnZhcmlhYmxlcyA9IFtcInhcIl0sIHJldC5jb2VmZmljaWVudHM9Wy0yLDAsNV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBzaW1wbGlmeVxuICAgKlxuICAgKiBAcGFyYW0gIHtOb2RlfHN0cmluZ30gZXhwciAgICBUaGUgZXhwcmVzc2lvbiB0byBjaGVjayBpZiBpcyBhIHBvbHlub21pYWwgZXhwcmVzc2lvblxuICAgKiBAcGFyYW0gIHtPYmplY3R8Ym9vbGVhbn0gICAgICBvcHRpb25hbCBzY29wZSBvZiBleHByZXNzaW9uIG9yIHRydWUgZm9yIGFscmVhZHkgZXZhbHVhdGVkIHJhdGlvbmFsIGV4cHJlc3Npb24gYXQgaW5wdXRcbiAgICogQHBhcmFtICB7Qm9vbGVhbn0gIGRldGFpbGVkICAgb3B0aW9uYWwgVHJ1ZSBpZiByZXR1cm4gYW4gb2JqZWN0LCBmYWxzZSBpZiByZXR1cm4gZXhwcmVzc2lvbiBub2RlIChkZWZhdWx0KVxuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3QgfCBOb2RlfSAgICBUaGUgcmF0aW9uYWwgcG9seW5vbWlhbCBvZiBgZXhwcmAgb3IgbmEgb2JqZWN0XG4gICAqICAgICAgICAgICAge09iamVjdH1cbiAgICogICAgICAgICAgICAgIHtFeHByZXNzaW9uIE5vZGV9IGV4cHJlc3Npb246IG5vZGUgc2ltcGxpZmllZCBleHByZXNzaW9uXG4gICAqICAgICAgICAgICAgICB7RXhwcmVzc2lvbiBOb2RlfSBudW1lcmF0b3I6IHNpbXBsaWZpZWQgbnVtZXJhdG9yIG9mIGV4cHJlc3Npb25cbiAgICogICAgICAgICAgICAgIHtFeHByZXNzaW9uIE5vZGUgfCBib29sZWFufSBkZW5vbWluYXRvcjogc2ltcGxpZmllZCBkZW5vbWluYXRvciBvciBmYWxzZSAoaWYgdGhlcmUgaXMgbm8gZGVub21pbmF0b3IpXG4gICAqICAgICAgICAgICAgICB7QXJyYXl9ICAgICAgICAgICB2YXJpYWJsZXM6ICB2YXJpYWJsZSBuYW1lc1xuICAgKiAgICAgICAgICAgICAge0FycmF5fSAgICAgICAgICAgY29lZmZpY2llbnRzOiBjb2VmZmljaWVudHMgb2YgbnVtZXJhdG9yIHNvcnRlZCBieSBpbmNyZWFzZWQgZXhwb25lbnRcbiAgICogICAgICAgICAgIHtFeHByZXNzaW9uIE5vZGV9ICBub2RlIHNpbXBsaWZpZWQgZXhwcmVzc2lvblxuICAgKlxuICAgKi9cblxuICB2YXIgcmF0aW9uYWxpemUgPSB0eXBlZChuYW1lLCB7XG4gICAgc3RyaW5nOiBmdW5jdGlvbiBzdHJpbmcoZXhwcikge1xuICAgICAgcmV0dXJuIHJhdGlvbmFsaXplKHBhcnNlKGV4cHIpLCB7fSwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ3N0cmluZywgYm9vbGVhbic6IGZ1bmN0aW9uIHN0cmluZ0Jvb2xlYW4oZXhwciwgZGV0YWlsZWQpIHtcbiAgICAgIHJldHVybiByYXRpb25hbGl6ZShwYXJzZShleHByKSwge30sIGRldGFpbGVkKTtcbiAgICB9LFxuICAgICdzdHJpbmcsIE9iamVjdCc6IGZ1bmN0aW9uIHN0cmluZ09iamVjdChleHByLCBzY29wZSkge1xuICAgICAgcmV0dXJuIHJhdGlvbmFsaXplKHBhcnNlKGV4cHIpLCBzY29wZSwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ3N0cmluZywgT2JqZWN0LCBib29sZWFuJzogZnVuY3Rpb24gc3RyaW5nT2JqZWN0Qm9vbGVhbihleHByLCBzY29wZSwgZGV0YWlsZWQpIHtcbiAgICAgIHJldHVybiByYXRpb25hbGl6ZShwYXJzZShleHByKSwgc2NvcGUsIGRldGFpbGVkKTtcbiAgICB9LFxuICAgIE5vZGU6IGZ1bmN0aW9uIE5vZGUoZXhwcikge1xuICAgICAgcmV0dXJuIHJhdGlvbmFsaXplKGV4cHIsIHt9LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnTm9kZSwgYm9vbGVhbic6IGZ1bmN0aW9uIE5vZGVCb29sZWFuKGV4cHIsIGRldGFpbGVkKSB7XG4gICAgICByZXR1cm4gcmF0aW9uYWxpemUoZXhwciwge30sIGRldGFpbGVkKTtcbiAgICB9LFxuICAgICdOb2RlLCBPYmplY3QnOiBmdW5jdGlvbiBOb2RlT2JqZWN0KGV4cHIsIHNjb3BlKSB7XG4gICAgICByZXR1cm4gcmF0aW9uYWxpemUoZXhwciwgc2NvcGUsIGZhbHNlKTtcbiAgICB9LFxuICAgICdOb2RlLCBPYmplY3QsIGJvb2xlYW4nOiBmdW5jdGlvbiBOb2RlT2JqZWN0Qm9vbGVhbihleHByLCBzY29wZSwgZGV0YWlsZWQpIHtcbiAgICAgIHZhciBzZXRSdWxlcyA9IHJ1bGVzUmF0aW9uYWxpemUoKTsgLy8gUnVsZXMgZm9yIGNoYW5nZSBwb2x5bm9taWFsIGluIG5lYXIgY2Fub25pY2FsIGZvcm1cblxuICAgICAgdmFyIHBvbHlSZXQgPSBwb2x5bm9taWFsKGV4cHIsIHNjb3BlLCB0cnVlLCBzZXRSdWxlcy5maXJzdFJ1bGVzKTsgLy8gQ2hlY2sgaWYgZXhwcmVzc2lvbiBpcyBhIHJhdGlvbmFsaXphYmxlIHBvbHlub21pYWxcblxuICAgICAgdmFyIG5WYXJzID0gcG9seVJldC52YXJpYWJsZXMubGVuZ3RoO1xuICAgICAgZXhwciA9IHBvbHlSZXQuZXhwcmVzc2lvbjtcblxuICAgICAgaWYgKG5WYXJzID49IDEpIHtcbiAgICAgICAgLy8gSWYgZXhwcmVzc2lvbiBpbiBub3QgYSBjb25zdGFudFxuICAgICAgICBleHByID0gZXhwYW5kUG93ZXIoZXhwcik7IC8vIEZpcnN0IGV4cGFuZCBwb3dlciBvZiBwb2x5bm9taWFscyAoY2Fubm90IGJlIG1hZGUgZnJvbSBydWxlcyEpXG5cbiAgICAgICAgdmFyIHNCZWZvcmU7IC8vIFByZXZpb3VzIGV4cHJlc3Npb25cblxuICAgICAgICB2YXIgcnVsZXM7XG4gICAgICAgIHZhciBlRGlzdHJEaXYgPSB0cnVlO1xuICAgICAgICB2YXIgcmVkb0luaWMgPSBmYWxzZTtcbiAgICAgICAgZXhwciA9IHNpbXBsaWZ5KGV4cHIsIHNldFJ1bGVzLmZpcnN0UnVsZXMsIHt9LCB7XG4gICAgICAgICAgZXhhY3RGcmFjdGlvbnM6IGZhbHNlXG4gICAgICAgIH0pOyAvLyBBcHBseSB0aGUgaW5pdGlhbCBydWxlcywgaW5jbHVkaW5nIHN1Y2MgZGl2IHJ1bGVzXG5cbiAgICAgICAgdmFyIHM7XG5cbiAgICAgICAgd2hpbGUgKHRydWUpIHtcbiAgICAgICAgICAvLyBBcHBseSBhbHRlcm5hdGVseSAgc3VjY2Vzc2l2ZSBkaXZpc2lvbiBydWxlcyBhbmQgZGlzdHIuZGl2LnJ1bGVzXG4gICAgICAgICAgcnVsZXMgPSBlRGlzdHJEaXYgPyBzZXRSdWxlcy5kaXN0ckRpdlJ1bGVzIDogc2V0UnVsZXMuc3VjRGl2UnVsZXM7XG4gICAgICAgICAgZXhwciA9IHNpbXBsaWZ5KGV4cHIsIHJ1bGVzKTsgLy8gdW50aWwgbm8gbW9yZSBjaGFuZ2VzXG5cbiAgICAgICAgICBlRGlzdHJEaXYgPSAhZURpc3RyRGl2OyAvLyBTd2FwIGJldHdlZW4gRGlzdHIuRGl2IGFuZCBTdWNjLiBEaXYuIFJ1bGVzXG5cbiAgICAgICAgICBzID0gZXhwci50b1N0cmluZygpO1xuXG4gICAgICAgICAgaWYgKHMgPT09IHNCZWZvcmUpIHtcbiAgICAgICAgICAgIGJyZWFrOyAvLyBObyBjaGFuZ2VzIDogZW5kIG9mIHRoZSBsb29wXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVkb0luaWMgPSB0cnVlO1xuICAgICAgICAgIHNCZWZvcmUgPSBzO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlZG9JbmljKSB7XG4gICAgICAgICAgLy8gQXBwbHkgZmlyc3QgcnVsZXMgYWdhaW4gd2l0aG91dCBzdWNjIGRpdiBydWxlcyAoaWYgdGhlcmUgYXJlIGNoYW5nZXMpXG4gICAgICAgICAgZXhwciA9IHNpbXBsaWZ5KGV4cHIsIHNldFJ1bGVzLmZpcnN0UnVsZXNBZ2Fpbiwge30sIHtcbiAgICAgICAgICAgIGV4YWN0RnJhY3Rpb25zOiBmYWxzZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgZXhwciA9IHNpbXBsaWZ5KGV4cHIsIHNldFJ1bGVzLmZpbmFsUnVsZXMsIHt9LCB7XG4gICAgICAgICAgZXhhY3RGcmFjdGlvbnM6IGZhbHNlXG4gICAgICAgIH0pOyAvLyBBcHBseSBmaW5hbCBydWxlc1xuICAgICAgfSAvLyBOVmFycyA+PSAxXG5cblxuICAgICAgdmFyIGNvZWZmaWNpZW50cyA9IFtdO1xuICAgICAgdmFyIHJldFJhdGlvbmFsaXplID0ge307XG5cbiAgICAgIGlmIChleHByLnR5cGUgPT09ICdPcGVyYXRvck5vZGUnICYmIGV4cHIuaXNCaW5hcnkoKSAmJiBleHByLm9wID09PSAnLycpIHtcbiAgICAgICAgLy8gU2VwYXJhdGUgbnVtZXJhdG9yIGZyb20gZGVub21pbmF0b3JcbiAgICAgICAgaWYgKG5WYXJzID09PSAxKSB7XG4gICAgICAgICAgZXhwci5hcmdzWzBdID0gcG9seVRvQ2Fub25pY2FsKGV4cHIuYXJnc1swXSwgY29lZmZpY2llbnRzKTtcbiAgICAgICAgICBleHByLmFyZ3NbMV0gPSBwb2x5VG9DYW5vbmljYWwoZXhwci5hcmdzWzFdKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZXRhaWxlZCkge1xuICAgICAgICAgIHJldFJhdGlvbmFsaXplLm51bWVyYXRvciA9IGV4cHIuYXJnc1swXTtcbiAgICAgICAgICByZXRSYXRpb25hbGl6ZS5kZW5vbWluYXRvciA9IGV4cHIuYXJnc1sxXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG5WYXJzID09PSAxKSB7XG4gICAgICAgICAgZXhwciA9IHBvbHlUb0Nhbm9uaWNhbChleHByLCBjb2VmZmljaWVudHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGRldGFpbGVkKSB7XG4gICAgICAgICAgcmV0UmF0aW9uYWxpemUubnVtZXJhdG9yID0gZXhwcjtcbiAgICAgICAgICByZXRSYXRpb25hbGl6ZS5kZW5vbWluYXRvciA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gblZhcnNcblxuXG4gICAgICBpZiAoIWRldGFpbGVkKSByZXR1cm4gZXhwcjtcbiAgICAgIHJldFJhdGlvbmFsaXplLmNvZWZmaWNpZW50cyA9IGNvZWZmaWNpZW50cztcbiAgICAgIHJldFJhdGlvbmFsaXplLnZhcmlhYmxlcyA9IHBvbHlSZXQudmFyaWFibGVzO1xuICAgICAgcmV0UmF0aW9uYWxpemUuZXhwcmVzc2lvbiA9IGV4cHI7XG4gICAgICByZXR1cm4gcmV0UmF0aW9uYWxpemU7XG4gICAgfSAvLyBeXl5eXl5eIGVuZCBvZiByYXRpb25hbGl6ZSBeXl5eXl5eXlxuXG4gIH0pOyAvLyBlbmQgb2YgdHlwZWQgcmF0aW9uYWxpemVcblxuICAvKipcbiAgICogIEZ1bmN0aW9uIHRvIHNpbXBsaWZ5IGFuIGV4cHJlc3Npb24gdXNpbmcgYW4gb3B0aW9uYWwgc2NvcGUgYW5kXG4gICAqICByZXR1cm4gaXQgaWYgdGhlIGV4cHJlc3Npb24gaXMgYSBwb2x5bm9taWFsIGV4cHJlc3Npb24sIGkuZS5cbiAgICogIGFuIGV4cHJlc3Npb24gd2l0aCBvbmUgb3IgbW9yZSB2YXJpYWJsZXMgYW5kIHRoZSBvcGVyYXRvcnNcbiAgICogICssIC0sICosIGFuZCBeLCB3aGVyZSB0aGUgZXhwb25lbnQgY2FuIG9ubHkgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBwb2x5bm9taWFsKGV4cHIsc2NvcGUsZXh0ZW5kZWQsIHJ1bGVzKVxuICAgKlxuICAgKiBAcGFyYW0gIHtOb2RlIHwgc3RyaW5nfSBleHByICAgICBUaGUgZXhwcmVzc2lvbiB0byBzaW1wbGlmeSBhbmQgY2hlY2sgaWYgaXMgcG9seW5vbWlhbCBleHByZXNzaW9uXG4gICAqIEBwYXJhbSAge29iamVjdH0gc2NvcGUgICAgICAgICAgIE9wdGlvbmFsIHNjb3BlIGZvciBleHByZXNzaW9uIHNpbXBsaWZpY2F0aW9uXG4gICAqIEBwYXJhbSAge2Jvb2xlYW59IGV4dGVuZGVkICAgICAgIE9wdGlvbmFsLiBEZWZhdWx0IGlzIGZhbHNlLiBXaGVuIHRydWUgYWxsb3dzIGRpdmlkZSBvcGVyYXRvci5cbiAgICogQHBhcmFtICB7YXJyYXl9ICBydWxlcyAgICAgICAgICAgT3B0aW9uYWwuIERlZmF1bHQgaXMgbm8gcnVsZS5cbiAgICpcbiAgICpcbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKiAgICAgICAgICAgIHtPYmplY3R9IG5vZGU6ICAgbm9kZSBzaW1wbGlmaWVkIGV4cHJlc3Npb25cbiAgICogICAgICAgICAgICB7QXJyYXl9ICB2YXJpYWJsZXM6ICB2YXJpYWJsZSBuYW1lc1xuICAgKi9cblxuICBmdW5jdGlvbiBwb2x5bm9taWFsKGV4cHIsIHNjb3BlLCBleHRlbmRlZCwgcnVsZXMpIHtcbiAgICB2YXIgdmFyaWFibGVzID0gW107XG4gICAgdmFyIG5vZGUgPSBzaW1wbGlmeShleHByLCBydWxlcywgc2NvcGUsIHtcbiAgICAgIGV4YWN0RnJhY3Rpb25zOiBmYWxzZVxuICAgIH0pOyAvLyBSZXNvbHZlcyBhbnkgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgd2l0aCBhbGwgZGVmaW5lZCBwYXJhbWV0ZXJzXG5cbiAgICBleHRlbmRlZCA9ICEhZXh0ZW5kZWQ7XG4gICAgdmFyIG9wZXIgPSAnKy0qJyArIChleHRlbmRlZCA/ICcvJyA6ICcnKTtcbiAgICByZWNQb2x5KG5vZGUpO1xuICAgIHZhciByZXRGdW5jID0ge307XG4gICAgcmV0RnVuYy5leHByZXNzaW9uID0gbm9kZTtcbiAgICByZXRGdW5jLnZhcmlhYmxlcyA9IHZhcmlhYmxlcztcbiAgICByZXR1cm4gcmV0RnVuYzsgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gICAgLyoqXG4gICAgICogIEZ1bmN0aW9uIHRvIHNpbXBsaWZ5IGFuIGV4cHJlc3Npb24gdXNpbmcgYW4gb3B0aW9uYWwgc2NvcGUgYW5kXG4gICAgICogIHJldHVybiBpdCBpZiB0aGUgZXhwcmVzc2lvbiBpcyBhIHBvbHlub21pYWwgZXhwcmVzc2lvbiwgaS5lLlxuICAgICAqICBhbiBleHByZXNzaW9uIHdpdGggb25lIG9yIG1vcmUgdmFyaWFibGVzIGFuZCB0aGUgb3BlcmF0b3JzXG4gICAgICogICssIC0sICosIGFuZCBeLCB3aGVyZSB0aGUgZXhwb25lbnQgY2FuIG9ubHkgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLlxuICAgICAqXG4gICAgICogU3ludGF4OlxuICAgICAqXG4gICAgICogICAgIHJlY1BvbHkobm9kZSlcbiAgICAgKlxuICAgICAqXG4gICAgICogQHBhcmFtICB7Tm9kZX0gbm9kZSAgICAgICAgICAgICAgIFRoZSBjdXJyZW50IHN1YiB0cmVlIGV4cHJlc3Npb24gaW4gcmVjdXJzaW9uXG4gICAgICpcbiAgICAgKiBAcmV0dXJuICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aGluZywgdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGVycm9yXG4gICAgICovXG5cbiAgICBmdW5jdGlvbiByZWNQb2x5KG5vZGUpIHtcbiAgICAgIHZhciB0cCA9IG5vZGUudHlwZTsgLy8gbm9kZSB0eXBlXG5cbiAgICAgIGlmICh0cCA9PT0gJ0Z1bmN0aW9uTm9kZScpIHtcbiAgICAgICAgLy8gTm8gZnVuY3Rpb24gY2FsbCBpbiBwb2x5bm9taWFsIGV4cHJlc3Npb25cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGVyZSBpcyBhbiB1bnNvbHZlZCBmdW5jdGlvbiBjYWxsJyk7XG4gICAgICB9IGVsc2UgaWYgKHRwID09PSAnT3BlcmF0b3JOb2RlJykge1xuICAgICAgICBpZiAobm9kZS5vcCA9PT0gJ14nKSB7XG4gICAgICAgICAgLy8gVE9ETzogaGFuZGxlIG5lZ2F0aXZlIGV4cG9uZW50cyBsaWtlIGluICcxL3heKC0yKSdcbiAgICAgICAgICBpZiAobm9kZS5hcmdzWzFdLnR5cGUgIT09ICdDb25zdGFudE5vZGUnIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKHBhcnNlRmxvYXQobm9kZS5hcmdzWzFdLnZhbHVlKSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlcmUgaXMgYSBub24taW50ZWdlciBleHBvbmVudCcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWNQb2x5KG5vZGUuYXJnc1swXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChvcGVyLmluZGV4T2Yobm9kZS5vcCkgPT09IC0xKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ09wZXJhdG9yICcgKyBub2RlLm9wICsgJyBpbnZhbGlkIGluIHBvbHlub21pYWwgZXhwcmVzc2lvbicpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICByZWNQb2x5KG5vZGUuYXJnc1tpXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIHR5cGUgb2Ygb3BlcmF0b3JcblxuICAgICAgfSBlbHNlIGlmICh0cCA9PT0gJ1N5bWJvbE5vZGUnKSB7XG4gICAgICAgIHZhciBfbmFtZSA9IG5vZGUubmFtZTsgLy8gdmFyaWFibGUgbmFtZVxuXG4gICAgICAgIHZhciBwb3MgPSB2YXJpYWJsZXMuaW5kZXhPZihfbmFtZSk7XG5cbiAgICAgICAgaWYgKHBvcyA9PT0gLTEpIHtcbiAgICAgICAgICAvLyBuZXcgdmFyaWFibGUgaW4gZXhwcmVzc2lvblxuICAgICAgICAgIHZhcmlhYmxlcy5wdXNoKF9uYW1lKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0cCA9PT0gJ1BhcmVudGhlc2lzTm9kZScpIHtcbiAgICAgICAgcmVjUG9seShub2RlLmNvbnRlbnQpO1xuICAgICAgfSBlbHNlIGlmICh0cCAhPT0gJ0NvbnN0YW50Tm9kZScpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd0eXBlICcgKyB0cCArICcgaXMgbm90IGFsbG93ZWQgaW4gcG9seW5vbWlhbCBleHByZXNzaW9uJyk7XG4gICAgICB9XG4gICAgfSAvLyBlbmQgb2YgcmVjUG9seVxuXG4gIH0gLy8gZW5kIG9mIHBvbHlub21pYWxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqIFJldHVybiBhIHJ1bGUgc2V0IHRvIHJhdGlvbmFsaXplIGFuIHBvbHlub21pYWwgZXhwcmVzc2lvbiBpbiByYXRpb25hbGl6ZVxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBydWxlc1JhdGlvbmFsaXplKClcbiAgICpcbiAgICogQHJldHVybiB7YXJyYXl9ICAgICAgICBydWxlIHNldCB0byByYXRpb25hbGl6ZSBhbiBwb2x5bm9taWFsIGV4cHJlc3Npb25cbiAgICovXG5cblxuICBmdW5jdGlvbiBydWxlc1JhdGlvbmFsaXplKCkge1xuICAgIHZhciBvbGRSdWxlcyA9IFtzaW1wbGlmeUNvcmUsIC8vIHNDb3JlXG4gICAge1xuICAgICAgbDogJ24rbicsXG4gICAgICByOiAnMipuJ1xuICAgIH0sIHtcbiAgICAgIGw6ICduKy1uJyxcbiAgICAgIHI6ICcwJ1xuICAgIH0sIHNpbXBsaWZ5Q29uc3RhbnQsIC8vIHNDb25zdGFudFxuICAgIHtcbiAgICAgIGw6ICduKihuMV4tMSknLFxuICAgICAgcjogJ24vbjEnXG4gICAgfSwge1xuICAgICAgbDogJ24qbjFeLW4yJyxcbiAgICAgIHI6ICduL24xXm4yJ1xuICAgIH0sIHtcbiAgICAgIGw6ICduMV4tMScsXG4gICAgICByOiAnMS9uMSdcbiAgICB9LCB7XG4gICAgICBsOiAnbioobjEvbjIpJyxcbiAgICAgIHI6ICcobipuMSkvbjInXG4gICAgfSwge1xuICAgICAgbDogJzEqbicsXG4gICAgICByOiAnbidcbiAgICB9XTtcbiAgICB2YXIgcnVsZXNGaXJzdCA9IFt7XG4gICAgICBsOiAnKC1uMSkvKC1uMiknLFxuICAgICAgcjogJ24xL24yJ1xuICAgIH0sIC8vIFVuYXJ5IGRpdmlzaW9uXG4gICAge1xuICAgICAgbDogJygtbjEpKigtbjIpJyxcbiAgICAgIHI6ICduMSpuMidcbiAgICB9LCAvLyBVbmFyeSBtdWx0aXBsaWNhdGlvblxuICAgIHtcbiAgICAgIGw6ICduMS0tbjInLFxuICAgICAgcjogJ24xK24yJ1xuICAgIH0sIC8vICctLScgZWxpbWluYXRpb25cbiAgICB7XG4gICAgICBsOiAnbjEtbjInLFxuICAgICAgcjogJ24xKygtbjIpJ1xuICAgIH0sIC8vIFN1YnRyYWN0aW9uIHR1cm4gaW50byBhZGQgd2l0aCB1bu+/vXJ5IG1pbnVzXG4gICAge1xuICAgICAgbDogJyhuMStuMikqbjMnLFxuICAgICAgcjogJyhuMSpuMyArIG4yKm4zKSdcbiAgICB9LCAvLyBEaXN0cmlidXRpdmUgMVxuICAgIHtcbiAgICAgIGw6ICduMSoobjIrbjMpJyxcbiAgICAgIHI6ICcobjEqbjIrbjEqbjMpJ1xuICAgIH0sIC8vIERpc3RyaWJ1dGl2ZSAyXG4gICAge1xuICAgICAgbDogJ2MxKm4gKyBjMipuJyxcbiAgICAgIHI6ICcoYzErYzIpKm4nXG4gICAgfSwgLy8gSm9pbmluZyBjb25zdGFudHNcbiAgICB7XG4gICAgICBsOiAnYzEqbiArIG4nLFxuICAgICAgcjogJyhjMSsxKSpuJ1xuICAgIH0sIC8vIEpvaW5pbmcgY29uc3RhbnRzXG4gICAge1xuICAgICAgbDogJ2MxKm4gLSBjMipuJyxcbiAgICAgIHI6ICcoYzEtYzIpKm4nXG4gICAgfSwgLy8gSm9pbmluZyBjb25zdGFudHNcbiAgICB7XG4gICAgICBsOiAnYzEqbiAtIG4nLFxuICAgICAgcjogJyhjMS0xKSpuJ1xuICAgIH0sIC8vIEpvaW5pbmcgY29uc3RhbnRzXG4gICAge1xuICAgICAgbDogJ3YvYycsXG4gICAgICByOiAnKDEvYykqdidcbiAgICB9LCAvLyB2YXJpYWJsZS9jb25zdGFudCAobmV3ISlcbiAgICB7XG4gICAgICBsOiAndi8tYycsXG4gICAgICByOiAnLSgxL2MpKnYnXG4gICAgfSwgLy8gdmFyaWFibGUvY29uc3RhbnQgKG5ldyEpXG4gICAge1xuICAgICAgbDogJy12Ki1jJyxcbiAgICAgIHI6ICdjKnYnXG4gICAgfSwgLy8gSW52ZXJzaW9uIGNvbnN0YW50IGFuZCB2YXJpYWJsZSAxXG4gICAge1xuICAgICAgbDogJy12KmMnLFxuICAgICAgcjogJy1jKnYnXG4gICAgfSwgLy8gSW52ZXJzaW9uIGNvbnN0YW50IGFuZCB2YXJpYWJsZSAyXG4gICAge1xuICAgICAgbDogJ3YqLWMnLFxuICAgICAgcjogJy1jKnYnXG4gICAgfSwgLy8gSW52ZXJzaW9uIGNvbnN0YW50IGFuZCB2YXJpYWJsZSAzXG4gICAge1xuICAgICAgbDogJ3YqYycsXG4gICAgICByOiAnYyp2J1xuICAgIH0sIC8vIEludmVyc2lvbiBjb25zdGFudCBhbmQgdmFyaWFibGUgNFxuICAgIHtcbiAgICAgIGw6ICctKC1uMSpuMiknLFxuICAgICAgcjogJyhuMSpuMiknXG4gICAgfSwgLy8gVW5hcnkgcHJvcGFnYXRpb25cbiAgICB7XG4gICAgICBsOiAnLShuMSpuMiknLFxuICAgICAgcjogJygtbjEqbjIpJ1xuICAgIH0sIC8vIFVuYXJ5IHByb3BhZ2F0aW9uXG4gICAge1xuICAgICAgbDogJy0oLW4xK24yKScsXG4gICAgICByOiAnKG4xLW4yKSdcbiAgICB9LCAvLyBVbmFyeSBwcm9wYWdhdGlvblxuICAgIHtcbiAgICAgIGw6ICctKG4xK24yKScsXG4gICAgICByOiAnKC1uMS1uMiknXG4gICAgfSwgLy8gVW5hcnkgcHJvcGFnYXRpb25cbiAgICB7XG4gICAgICBsOiAnKG4xXm4yKV5uMycsXG4gICAgICByOiAnKG4xXihuMipuMykpJ1xuICAgIH0sIC8vIFBvd2VyIHRvIFBvd2VyXG4gICAge1xuICAgICAgbDogJy0oLW4xL24yKScsXG4gICAgICByOiAnKG4xL24yKSdcbiAgICB9LCAvLyBEaXZpc2lvbiBhbmQgVW5hcnlcbiAgICB7XG4gICAgICBsOiAnLShuMS9uMiknLFxuICAgICAgcjogJygtbjEvbjIpJ1xuICAgIH1dOyAvLyBEaXZpc2FvIGFuZCBVbmFyeVxuXG4gICAgdmFyIHJ1bGVzRGlzdHJEaXYgPSBbe1xuICAgICAgbDogJyhuMS9uMiArIG4zL240KScsXG4gICAgICByOiAnKChuMSpuNCArIG4zKm4yKS8objIqbjQpKSdcbiAgICB9LCAvLyBTdW0gb2YgZnJhY3Rpb25zXG4gICAge1xuICAgICAgbDogJyhuMS9uMiArIG4zKScsXG4gICAgICByOiAnKChuMSArIG4zKm4yKS9uMiknXG4gICAgfSwgLy8gU3VtIGZyYWN0aW9uIHdpdGggbnVtYmVyIDFcbiAgICB7XG4gICAgICBsOiAnKG4xICsgbjIvbjMpJyxcbiAgICAgIHI6ICcoKG4xKm4zICsgbjIpL24zKSdcbiAgICB9XTsgLy8gU3VtIGZyYWN0aW9uIHdpdGggbnVtYmVyIDFcblxuICAgIHZhciBydWxlc1N1Y0RpdiA9IFt7XG4gICAgICBsOiAnKG4xLyhuMi9uMykpJyxcbiAgICAgIHI6ICcoKG4xKm4zKS9uMiknXG4gICAgfSwgLy8gRGl2aXNpb24gc2ltcGxpZmljYXRpb25cbiAgICB7XG4gICAgICBsOiAnKG4xL24yL24zKScsXG4gICAgICByOiAnKG4xLyhuMipuMykpJ1xuICAgIH1dO1xuICAgIHZhciBzZXRSdWxlcyA9IHt9OyAvLyBydWxlcyBzZXQgaW4gNCBzdGVwcy5cbiAgICAvLyBBbGwgcnVsZXMgPT4gaW5maW5pdGUgbG9vcFxuICAgIC8vIHNldFJ1bGVzLmFsbFJ1bGVzID1vbGRSdWxlcy5jb25jYXQocnVsZXNGaXJzdCxydWxlc0Rpc3RyRGl2LHJ1bGVzU3VjRGl2KVxuXG4gICAgc2V0UnVsZXMuZmlyc3RSdWxlcyA9IG9sZFJ1bGVzLmNvbmNhdChydWxlc0ZpcnN0LCBydWxlc1N1Y0Rpdik7IC8vIEZpcnN0IHJ1bGUgc2V0XG5cbiAgICBzZXRSdWxlcy5kaXN0ckRpdlJ1bGVzID0gcnVsZXNEaXN0ckRpdjsgLy8gSnVzdCBkaXN0ci4gZGl2LiBydWxlc1xuXG4gICAgc2V0UnVsZXMuc3VjRGl2UnVsZXMgPSBydWxlc1N1Y0RpdjsgLy8gSnVzIHN1Y2MuIGRpdi4gcnVsZXNcblxuICAgIHNldFJ1bGVzLmZpcnN0UnVsZXNBZ2FpbiA9IG9sZFJ1bGVzLmNvbmNhdChydWxlc0ZpcnN0KTsgLy8gTGFzdCBydWxlcyBzZXQgd2l0aG91dCBzdWNjLiBkaXYuXG4gICAgLy8gRGl2aXNpb24gc2ltcGxpZmljYXRpb25cbiAgICAvLyBTZWNvbmQgcnVsZSBzZXQuXG4gICAgLy8gVGhlcmUgaXMgbm8gYWdncmVnYXRlIGV4cHJlc3Npb24gd2l0aCBwYXJlbnRlc2lzLCBidXQgdGhlIG9ubHkgdmFyaWFibGUgY2FuIGJlIHNjYXR0ZXJlZC5cblxuICAgIHNldFJ1bGVzLmZpbmFsUnVsZXMgPSBbc2ltcGxpZnlDb3JlLCAvLyBzaW1wbGlmeS5ydWxlc1swXVxuICAgIHtcbiAgICAgIGw6ICduKi1uJyxcbiAgICAgIHI6ICctbl4yJ1xuICAgIH0sIC8vIEpvaW5pbmcgbXVsdGlwbHkgd2l0aCBwb3dlciAxXG4gICAge1xuICAgICAgbDogJ24qbicsXG4gICAgICByOiAnbl4yJ1xuICAgIH0sIC8vIEpvaW5pbmcgbXVsdGlwbHkgd2l0aCBwb3dlciAyXG4gICAgc2ltcGxpZnlDb25zdGFudCwgLy8gc2ltcGxpZnkucnVsZXNbMTRdIG9sZCAzcmQgaW5kZXggaW4gb2xkUnVsZXNcbiAgICB7XG4gICAgICBsOiAnbiotbl5uMScsXG4gICAgICByOiAnLW5eKG4xKzEpJ1xuICAgIH0sIC8vIEpvaW5pbmcgbXVsdGlwbHkgd2l0aCBwb3dlciAzXG4gICAge1xuICAgICAgbDogJ24qbl5uMScsXG4gICAgICByOiAnbl4objErMSknXG4gICAgfSwgLy8gSm9pbmluZyBtdWx0aXBseSB3aXRoIHBvd2VyIDRcbiAgICB7XG4gICAgICBsOiAnbl5uMSotbl5uMicsXG4gICAgICByOiAnLW5eKG4xK24yKSdcbiAgICB9LCAvLyBKb2luaW5nIG11bHRpcGx5IHdpdGggcG93ZXIgNVxuICAgIHtcbiAgICAgIGw6ICduXm4xKm5ebjInLFxuICAgICAgcjogJ25eKG4xK24yKSdcbiAgICB9LCAvLyBKb2luaW5nIG11bHRpcGx5IHdpdGggcG93ZXIgNlxuICAgIHtcbiAgICAgIGw6ICduXm4xKi1uJyxcbiAgICAgIHI6ICctbl4objErMSknXG4gICAgfSwgLy8gSm9pbmluZyBtdWx0aXBseSB3aXRoIHBvd2VyIDdcbiAgICB7XG4gICAgICBsOiAnbl5uMSpuJyxcbiAgICAgIHI6ICduXihuMSsxKSdcbiAgICB9LCAvLyBKb2luaW5nIG11bHRpcGx5IHdpdGggcG93ZXIgOFxuICAgIHtcbiAgICAgIGw6ICduXm4xLy1uJyxcbiAgICAgIHI6ICctbl4objEtMSknXG4gICAgfSwgLy8gSm9pbmluZyBtdWx0aXBseSB3aXRoIHBvd2VyIDhcbiAgICB7XG4gICAgICBsOiAnbl5uMS9uJyxcbiAgICAgIHI6ICduXihuMS0xKSdcbiAgICB9LCAvLyBKb2luaW5nIGRpdmlzaW9uIHdpdGggcG93ZXIgMVxuICAgIHtcbiAgICAgIGw6ICduLy1uXm4xJyxcbiAgICAgIHI6ICctbl4oMS1uMSknXG4gICAgfSwgLy8gSm9pbmluZyBkaXZpc2lvbiB3aXRoIHBvd2VyIDJcbiAgICB7XG4gICAgICBsOiAnbi9uXm4xJyxcbiAgICAgIHI6ICduXigxLW4xKSdcbiAgICB9LCAvLyBKb2luaW5nIGRpdmlzaW9uIHdpdGggcG93ZXIgM1xuICAgIHtcbiAgICAgIGw6ICduXm4xLy1uXm4yJyxcbiAgICAgIHI6ICduXihuMS1uMiknXG4gICAgfSwgLy8gSm9pbmluZyBkaXZpc2lvbiB3aXRoIHBvd2VyIDRcbiAgICB7XG4gICAgICBsOiAnbl5uMS9uXm4yJyxcbiAgICAgIHI6ICduXihuMS1uMiknXG4gICAgfSwgLy8gSm9pbmluZyBkaXZpc2lvbiB3aXRoIHBvd2VyIDVcbiAgICB7XG4gICAgICBsOiAnbjErKC1uMipuMyknLFxuICAgICAgcjogJ24xLW4yKm4zJ1xuICAgIH0sIC8vIFNvbHZpbmcgdXNlbGVzcyBwYXJlbnRoZXNpcyAxXG4gICAge1xuICAgICAgbDogJ3YqKC1jKScsXG4gICAgICByOiAnLWMqdidcbiAgICB9LCAvLyBTb2x2aW5nIHVzZWxlc3MgdW5hcnkgMlxuICAgIHtcbiAgICAgIGw6ICduMSstbjInLFxuICAgICAgcjogJ24xLW4yJ1xuICAgIH0sIC8vIFNvbHZpbmcgKy0gdG9nZXRoZXIgKG5ldyEpXG4gICAge1xuICAgICAgbDogJ3YqYycsXG4gICAgICByOiAnYyp2J1xuICAgIH0sIC8vIGludmVyc2lvbiBjb25zdGFudCB3aXRoIHZhcmlhYmxlXG4gICAge1xuICAgICAgbDogJyhuMV5uMilebjMnLFxuICAgICAgcjogJyhuMV4objIqbjMpKSdcbiAgICB9IC8vIFBvd2VyIHRvIFBvd2VyXG4gICAgXTtcbiAgICByZXR1cm4gc2V0UnVsZXM7XG4gIH0gLy8gRW5kIHJ1bGVzUmF0aW9uYWxpemVcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgLyoqXG4gICAqICBFeHBhbmQgcmVjdXJzaXZlbHkgYSB0cmVlIG5vZGUgZm9yIGhhbmRsaW5nIHdpdGggZXhwcmVzc2lvbnMgd2l0aCBleHBvbmVudHNcbiAgICogIChpdCdzIG5vdCBmb3IgY29uc3RhbnRzLCBzeW1ib2xzIG9yIGZ1bmN0aW9ucyB3aXRoIGV4cG9uZW50cylcbiAgICogIFBTOiBUaGUgb3RoZXIgcGFyYW1ldGVycyBhcmUgaW50ZXJuYWwgZm9yIHJlY3Vyc2lvblxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBleHBhbmRQb3dlcihub2RlKVxuICAgKlxuICAgKiBAcGFyYW0gIHtOb2RlfSBub2RlICAgICAgICAgQ3VycmVudCBleHByZXNzaW9uIG5vZGVcbiAgICogQHBhcmFtICB7bm9kZX0gcGFyZW50ICAgICAgIFBhcmVudCBjdXJyZW50IG5vZGUgaW5zaWRlIHRoZSByZWN1cnNpb25cbiAgICogQHBhcmFtICAoaW50fSAgICAgICAgICAgICAgIFBhcmVudCBudW1iZXIgb2YgY2hpZCBpbnNpZGUgdGhlIHJlcmN1cnNpb25cbiAgICpcbiAgICogQHJldHVybiB7bm9kZX0gICAgICAgIG5vZGUgZXhwcmVzc2lvbiB3aXRoIGFsbCBwb3dlcnMgZXhwYW5kZWQuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZXhwYW5kUG93ZXIobm9kZSwgcGFyZW50LCBpbmRQYXJlbnQpIHtcbiAgICB2YXIgdHAgPSBub2RlLnR5cGU7XG4gICAgdmFyIGludGVybmFsID0gYXJndW1lbnRzLmxlbmd0aCA+IDE7IC8vIFRSVUUgaW4gaW50ZXJuYWwgY2FsbHNcblxuICAgIGlmICh0cCA9PT0gJ09wZXJhdG9yTm9kZScgJiYgbm9kZS5pc0JpbmFyeSgpKSB7XG4gICAgICB2YXIgZG9lcyA9IGZhbHNlO1xuICAgICAgdmFyIHZhbDtcblxuICAgICAgaWYgKG5vZGUub3AgPT09ICdeJykge1xuICAgICAgICAvLyBGaXJzdCBvcGVyYXRvcjogUGFyZW50aGVzaXMgb3IgVW5hcnlNaW51c1xuICAgICAgICBpZiAoKG5vZGUuYXJnc1swXS50eXBlID09PSAnUGFyZW50aGVzaXNOb2RlJyB8fCBub2RlLmFyZ3NbMF0udHlwZSA9PT0gJ09wZXJhdG9yTm9kZScpICYmIG5vZGUuYXJnc1sxXS50eXBlID09PSAnQ29uc3RhbnROb2RlJykge1xuICAgICAgICAgIC8vIFNlY29uZCBvcGVyYXRvcjogQ29uc3RhbnRcbiAgICAgICAgICB2YWwgPSBwYXJzZUZsb2F0KG5vZGUuYXJnc1sxXS52YWx1ZSk7XG4gICAgICAgICAgZG9lcyA9IHZhbCA+PSAyICYmICgwLCBfbnVtYmVyLmlzSW50ZWdlcikodmFsKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoZG9lcykge1xuICAgICAgICAvLyBFeHBvbmVudCA+PSAyXG4gICAgICAgIC8vIEJlZm9yZTpcbiAgICAgICAgLy8gICAgICAgICAgICBvcGVyYXRvciBBIC0tPiBTdWJ0cmVlXG4gICAgICAgIC8vIHBhcmVudCBwb3dcbiAgICAgICAgLy8gICAgICAgICAgICBjb25zdGFudFxuICAgICAgICAvL1xuICAgICAgICBpZiAodmFsID4gMikge1xuICAgICAgICAgIC8vIEV4cG9uZW50ID4gMixcbiAgICAgICAgICAvLyBBRlRFUjogIChleHBvbmVudCA+IDIpXG4gICAgICAgICAgLy8gICAgICAgICAgICAgb3BlcmF0b3IgQSAtLT4gU3VidHJlZVxuICAgICAgICAgIC8vIHBhcmVudCAgKlxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICBkZWVwIGNsb25lIChvcGVyYXRvciBBIC0tPiBTdWJ0cmVlXG4gICAgICAgICAgLy8gICAgICAgICAgICAgcG93XG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgIGNvbnN0YW50IC0gMVxuICAgICAgICAgIC8vXG4gICAgICAgICAgdmFyIG5Fc3FUb3BvID0gbm9kZS5hcmdzWzBdO1xuICAgICAgICAgIHZhciBuRGlyVG9wbyA9IG5ldyBPcGVyYXRvck5vZGUoJ14nLCAncG93JywgW25vZGUuYXJnc1swXS5jbG9uZURlZXAoKSwgbmV3IENvbnN0YW50Tm9kZSh2YWwgLSAxKV0pO1xuICAgICAgICAgIG5vZGUgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW25Fc3FUb3BvLCBuRGlyVG9wb10pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEV4cG8gPSAyIC0gbm8gcG93ZXJcbiAgICAgICAgICAvLyBBRlRFUjogIChleHBvbmVudCA9ICAyKVxuICAgICAgICAgIC8vICAgICAgICAgICAgIG9wZXJhdG9yIEEgLS0+IFN1YnRyZWVcbiAgICAgICAgICAvLyBwYXJlbnQgICBvcGVyXG4gICAgICAgICAgLy8gICAgICAgICAgICBkZWVwIGNsb25lIChvcGVyYXRvciBBIC0tPiBTdWJ0cmVlKVxuICAgICAgICAgIC8vXG4gICAgICAgICAgbm9kZSA9IG5ldyBPcGVyYXRvck5vZGUoJyonLCAnbXVsdGlwbHknLCBbbm9kZS5hcmdzWzBdLCBub2RlLmFyZ3NbMF0uY2xvbmVEZWVwKCldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbnRlcm5hbCkge1xuICAgICAgICAgIC8vIENoYW5nZSBwYXJlbnQgcmVmZXJlbmNlcyBpbiBpbnRlcm5hbCByZWN1cnNpdmUgY2FsbHNcbiAgICAgICAgICBpZiAoaW5kUGFyZW50ID09PSAnY29udGVudCcpIHtcbiAgICAgICAgICAgIHBhcmVudC5jb250ZW50ID0gbm9kZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFyZW50LmFyZ3NbaW5kUGFyZW50XSA9IG5vZGU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIGRvZXNcblxuICAgIH0gLy8gYmluYXJ5IE9wZXJhdG9yTm9kZVxuXG5cbiAgICBpZiAodHAgPT09ICdQYXJlbnRoZXNpc05vZGUnKSB7XG4gICAgICAvLyBSZWN1cnNpb25cbiAgICAgIGV4cGFuZFBvd2VyKG5vZGUuY29udGVudCwgbm9kZSwgJ2NvbnRlbnQnKTtcbiAgICB9IGVsc2UgaWYgKHRwICE9PSAnQ29uc3RhbnROb2RlJyAmJiB0cCAhPT0gJ1N5bWJvbE5vZGUnKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICBleHBhbmRQb3dlcihub2RlLmFyZ3NbaV0sIG5vZGUsIGkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghaW50ZXJuYWwpIHtcbiAgICAgIC8vIHJldHVybiB0aGUgcm9vdCBub2RlXG4gICAgICByZXR1cm4gbm9kZTtcbiAgICB9XG4gIH0gLy8gRW5kIGV4cGFuZFBvd2VyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIC8qKlxuICAgKiBBdXhpbGFyeSBmdW5jdGlvbiBmb3IgcmF0aW9uYWxpemVcbiAgICogQ29udmVydCBuZWFyIGNhbm9uaWNhbCBwb2x5bm9taWFsIGluIG9uZSB2YXJpYWJsZSBpbiBhIGNhbm9uaWNhbCBwb2x5bm9taWFsXG4gICAqIHdpdGggb25lIHRlcm0gZm9yIGVhY2ggZXhwb25lbnQgaW4gZGVjcmVhc2luZyBvcmRlclxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBwb2x5VG9DYW5vbmljYWwobm9kZSBbLCBjb2VmZmljaWVudHNdKVxuICAgKlxuICAgKiBAcGFyYW0gIHtOb2RlIHwgc3RyaW5nfSBleHByICAgICAgIFRoZSBuZWFyIGNhbm9uaWNhbCBwb2x5bm9taWFsIGV4cHJlc3Npb24gdG8gY29udmVydCBpbiBhIGEgY2Fub25pY2FsIHBvbHlub21pYWwgZXhwcmVzc2lvblxuICAgKlxuICAgKiAgICAgICAgVGhlIHN0cmluZyBvciB0cmVlIGV4cHJlc3Npb24gbmVlZHMgdG8gYmUgYXQgYmVsb3cgc3ludGF4LCB3aXRoIGZyZWUgc3BhY2VzOlxuICAgKiAgICAgICAgICggICheKC0pPyB8IFsrLV0/ICljdGUgKCopPyB2YXIgKF5leHBvKT8gIHwgY3RlICkrXG4gICAqICAgICAgIFdoZXJlICd2YXInIGlzIG9uZSB2YXJpYWJsZSB3aXRoIGFueSB2YWxpZCBuYW1lXG4gICAqICAgICAgICAgICAgICdjdGUnIGFyZSByZWFsIG51bWVyaWMgY29uc3RhbnRzIHdpdGggYW55IHZhbHVlLiBJdCBjYW4gYmUgb21pdHRlZCBpZiBlcXVhbCB0aGFuIDFcbiAgICogICAgICAgICAgICAgJ2V4cG8nIGFyZSBpbnRlZ2VycyBncmVhdGVyIHRoYW4gMC4gSXQgY2FuIGJlIG9taXR0ZWQgaWYgZXF1YWwgdGhhbiAxLlxuICAgKlxuICAgKiBAcGFyYW0gIHthcnJheX0gICBjb2VmZmljaWVudHMgICAgICAgICAgICAgT3B0aW9uYWwgcmV0dXJucyBjb2VmZmljaWVudHMgc29ydGVkIGJ5IGluY3JlYXNlZCBleHBvbmVudFxuICAgKlxuICAgKlxuICAgKiBAcmV0dXJuIHtub2RlfSAgICAgICAgbmV3IG5vZGUgdHJlZSB3aXRoIG9uZSB2YXJpYWJsZSBwb2x5bm9taWFsIG9yIHN0cmluZyBlcnJvci5cbiAgICovXG5cblxuICBmdW5jdGlvbiBwb2x5VG9DYW5vbmljYWwobm9kZSwgY29lZmZpY2llbnRzKSB7XG4gICAgaWYgKGNvZWZmaWNpZW50cyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2VmZmljaWVudHMgPSBbXTtcbiAgICB9IC8vIGNvZWZmaWNpZW50cy5cblxuXG4gICAgY29lZmZpY2llbnRzWzBdID0gMDsgLy8gaW5kZXggaXMgdGhlIGV4cG9uZW50XG5cbiAgICB2YXIgbyA9IHt9O1xuICAgIG8uY3RlID0gMTtcbiAgICBvLm9wZXIgPSAnKyc7IC8vIGZpcmU6IG1hcmsgd2l0aCAqIG9yIF4gd2hlbiBmaW5kcyAqIG9yIF4gZG93biB0cmVlLCByZXNldCB0byBcIlwiIHdpdGggKyBhbmQgLS5cbiAgICAvLyAgICAgICBJdCBpcyB1c2VkIHRvIGRlZHVjZSB0aGUgZXhwb25lbnQ6IDEgZm9yICosIDAgZm9yIFwiXCIuXG5cbiAgICBvLmZpcmUgPSAnJztcbiAgICB2YXIgbWF4RXhwbyA9IDA7IC8vIG1heGltdW0gZXhwb25lbnRcblxuICAgIHZhciB2YXJuYW1lID0gJyc7IC8vIHZhcmlhYmxlIG5hbWVcblxuICAgIHJlY3VyUG9sKG5vZGUsIG51bGwsIG8pO1xuICAgIG1heEV4cG8gPSBjb2VmZmljaWVudHMubGVuZ3RoIC0gMTtcbiAgICB2YXIgZmlyc3QgPSB0cnVlO1xuICAgIHZhciBubztcblxuICAgIGZvciAodmFyIGkgPSBtYXhFeHBvOyBpID49IDA7IGktLSkge1xuICAgICAgaWYgKGNvZWZmaWNpZW50c1tpXSA9PT0gMCkgY29udGludWU7XG4gICAgICB2YXIgbjEgPSBuZXcgQ29uc3RhbnROb2RlKGZpcnN0ID8gY29lZmZpY2llbnRzW2ldIDogTWF0aC5hYnMoY29lZmZpY2llbnRzW2ldKSk7XG4gICAgICB2YXIgb3AgPSBjb2VmZmljaWVudHNbaV0gPCAwID8gJy0nIDogJysnO1xuXG4gICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgLy8gSXMgbm90IGEgY29uc3RhbnQgd2l0aG91dCB2YXJpYWJsZVxuICAgICAgICB2YXIgbjIgPSBuZXcgU3ltYm9sTm9kZSh2YXJuYW1lKTtcblxuICAgICAgICBpZiAoaSA+IDEpIHtcbiAgICAgICAgICB2YXIgbjMgPSBuZXcgQ29uc3RhbnROb2RlKGkpO1xuICAgICAgICAgIG4yID0gbmV3IE9wZXJhdG9yTm9kZSgnXicsICdwb3cnLCBbbjIsIG4zXSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29lZmZpY2llbnRzW2ldID09PSAtMSAmJiBmaXJzdCkge1xuICAgICAgICAgIG4xID0gbmV3IE9wZXJhdG9yTm9kZSgnLScsICd1bmFyeU1pbnVzJywgW24yXSk7XG4gICAgICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoY29lZmZpY2llbnRzW2ldKSA9PT0gMSkge1xuICAgICAgICAgIG4xID0gbjI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbjEgPSBuZXcgT3BlcmF0b3JOb2RlKCcqJywgJ211bHRpcGx5JywgW24xLCBuMl0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChmaXJzdCkge1xuICAgICAgICBubyA9IG4xO1xuICAgICAgfSBlbHNlIGlmIChvcCA9PT0gJysnKSB7XG4gICAgICAgIG5vID0gbmV3IE9wZXJhdG9yTm9kZSgnKycsICdhZGQnLCBbbm8sIG4xXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBubyA9IG5ldyBPcGVyYXRvck5vZGUoJy0nLCAnc3VidHJhY3QnLCBbbm8sIG4xXSk7XG4gICAgICB9XG5cbiAgICAgIGZpcnN0ID0gZmFsc2U7XG4gICAgfSAvLyBmb3JcblxuXG4gICAgaWYgKGZpcnN0KSB7XG4gICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZSgwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWN1cnNpdmUgYXV4aWxhcnkgZnVuY3Rpb24gaW5zaWRlIHBvbHlUb0Nhbm9uaWNhbCBmb3JcbiAgICAgKiBjb252ZXJ0aW5nIGV4cHJlc3Npb24gaW4gY2Fub25pY2FsIGZvcm1cbiAgICAgKlxuICAgICAqIFN5bnRheDpcbiAgICAgKlxuICAgICAqICAgICByZWN1clBvbChub2RlLCBub1BhaSwgb2JqKVxuICAgICAqXG4gICAgICogQHBhcmFtICB7Tm9kZX0gbm9kZSAgICAgICAgVGhlIGN1cnJlbnQgc3VicG9seW5vbWlhbCBleHByZXNzaW9uXG4gICAgICogQHBhcmFtICB7Tm9kZSB8IE51bGx9ICBub1BhaSAgIFRoZSBjdXJyZW50IHBhcmVudCBub2RlXG4gICAgICogQHBhcmFtICB7b2JqZWN0fSAgICBvYmogICAgICAgIE9iamVjdCB3aXRoIG1hbnkgaW50ZXJuYWwgZmxhZ3NcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge30gICAgICAgICAgICAgICAgICAgIE5vIHJldHVybi4gSWYgZXJyb3IsIHRocm93cyBhbiBleGNlcHRpb25cbiAgICAgKi9cblxuXG4gICAgZnVuY3Rpb24gcmVjdXJQb2wobm9kZSwgbm9QYWksIG8pIHtcbiAgICAgIHZhciB0cCA9IG5vZGUudHlwZTtcblxuICAgICAgaWYgKHRwID09PSAnRnVuY3Rpb25Ob2RlJykge1xuICAgICAgICAvLyAqKioqKiBGdW5jdGlvbk5hbWUgKioqKipcbiAgICAgICAgLy8gTm8gZnVuY3Rpb24gY2FsbCBpbiBwb2x5bm9taWFsIGV4cHJlc3Npb25cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGVyZSBpcyBhbiB1bnNvbHZlZCBmdW5jdGlvbiBjYWxsJyk7XG4gICAgICB9IGVsc2UgaWYgKHRwID09PSAnT3BlcmF0b3JOb2RlJykge1xuICAgICAgICAvLyAqKioqKiBPcGVyYXRvck5hbWUgKioqKipcbiAgICAgICAgaWYgKCcrLSpeJy5pbmRleE9mKG5vZGUub3ApID09PSAtMSkgdGhyb3cgbmV3IEVycm9yKCdPcGVyYXRvciAnICsgbm9kZS5vcCArICcgaW52YWxpZCcpO1xuXG4gICAgICAgIGlmIChub1BhaSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIC0odW5hcnkpLF4gIDogY2hpbGRyZW4gb2YgKiwrLC1cbiAgICAgICAgICBpZiAoKG5vZGUuZm4gPT09ICd1bmFyeU1pbnVzJyB8fCBub2RlLmZuID09PSAncG93JykgJiYgbm9QYWkuZm4gIT09ICdhZGQnICYmIG5vUGFpLmZuICE9PSAnc3VidHJhY3QnICYmIG5vUGFpLmZuICE9PSAnbXVsdGlwbHknKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgJyArIG5vZGUub3AgKyAnIHBsYWNpbmcnKTtcbiAgICAgICAgICB9IC8vIC0sKywqIDogY2hpbGRyZW4gb2YgKywtXG5cblxuICAgICAgICAgIGlmICgobm9kZS5mbiA9PT0gJ3N1YnRyYWN0JyB8fCBub2RlLmZuID09PSAnYWRkJyB8fCBub2RlLmZuID09PSAnbXVsdGlwbHknKSAmJiBub1BhaS5mbiAhPT0gJ2FkZCcgJiYgbm9QYWkuZm4gIT09ICdzdWJ0cmFjdCcpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCAnICsgbm9kZS5vcCArICcgcGxhY2luZycpO1xuICAgICAgICAgIH0gLy8gLSwrIDogZmlyc3QgY2hpbGRcblxuXG4gICAgICAgICAgaWYgKChub2RlLmZuID09PSAnc3VidHJhY3QnIHx8IG5vZGUuZm4gPT09ICdhZGQnIHx8IG5vZGUuZm4gPT09ICd1bmFyeU1pbnVzJykgJiYgby5ub0ZpbCAhPT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkICcgKyBub2RlLm9wICsgJyBwbGFjaW5nJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIEhhcyBwYXJlbnRcbiAgICAgICAgLy8gRmlyZXJzOiBeLCogICAgICAgT2xkOiAgIF4sJiwtKHVuYXJ5KTogZmlyZXJzXG5cblxuICAgICAgICBpZiAobm9kZS5vcCA9PT0gJ14nIHx8IG5vZGUub3AgPT09ICcqJykge1xuICAgICAgICAgIG8uZmlyZSA9IG5vZGUub3A7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgbm9kZS5hcmdzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgIC8vICssLTogcmVzZXQgZmlyZVxuICAgICAgICAgIGlmIChub2RlLmZuID09PSAndW5hcnlNaW51cycpIG8ub3BlciA9ICctJztcblxuICAgICAgICAgIGlmIChub2RlLm9wID09PSAnKycgfHwgbm9kZS5mbiA9PT0gJ3N1YnRyYWN0Jykge1xuICAgICAgICAgICAgby5maXJlID0gJyc7XG4gICAgICAgICAgICBvLmN0ZSA9IDE7IC8vIGRlZmF1bHQgaWYgdGhlcmUgaXMgbm8gY29uc3RhbnRcblxuICAgICAgICAgICAgby5vcGVyID0gX2kgPT09IDAgPyAnKycgOiBub2RlLm9wO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIG8ubm9GaWwgPSBfaTsgLy8gbnVtYmVyIG9mIHNvblxuXG4gICAgICAgICAgcmVjdXJQb2wobm9kZS5hcmdzW19pXSwgbm9kZSwgbyk7XG4gICAgICAgIH0gLy8gZm9yIGluIGNoaWxkcmVuXG5cbiAgICAgIH0gZWxzZSBpZiAodHAgPT09ICdTeW1ib2xOb2RlJykge1xuICAgICAgICAvLyAqKioqKiBTeW1ib2xOYW1lICoqKioqXG4gICAgICAgIGlmIChub2RlLm5hbWUgIT09IHZhcm5hbWUgJiYgdmFybmFtZSAhPT0gJycpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIG1vcmUgdGhhbiBvbmUgdmFyaWFibGUnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhcm5hbWUgPSBub2RlLm5hbWU7XG5cbiAgICAgICAgaWYgKG5vUGFpID09PSBudWxsKSB7XG4gICAgICAgICAgY29lZmZpY2llbnRzWzFdID0gMTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gXjogU3ltYm9sIGlzIEZpcnN0IGNoaWxkXG5cblxuICAgICAgICBpZiAobm9QYWkub3AgPT09ICdeJyAmJiBvLm5vRmlsICE9PSAwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbiBwb3dlciB0aGUgdmFyaWFibGUgc2hvdWxkIGJlIHRoZSBmaXJzdCBwYXJhbWV0ZXInKTtcbiAgICAgICAgfSAvLyAqOiBTeW1ib2wgaXMgU2Vjb25kIGNoaWxkXG5cblxuICAgICAgICBpZiAobm9QYWkub3AgPT09ICcqJyAmJiBvLm5vRmlsICE9PSAxKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbiBtdWx0aXBseSB0aGUgdmFyaWFibGUgc2hvdWxkIGJlIHRoZSBzZWNvbmQgcGFyYW1ldGVyJyk7XG4gICAgICAgIH0gLy8gU3ltYm9sOiBmaXJlcnMgJycsKiA9PiBpdCBtZWFucyB0aGVyZSBpcyBubyBleHBvbmVudCBhYm92ZSwgc28gaXQncyAxIChjdGUgKiB2YXIpXG5cblxuICAgICAgICBpZiAoby5maXJlID09PSAnJyB8fCBvLmZpcmUgPT09ICcqJykge1xuICAgICAgICAgIGlmIChtYXhFeHBvIDwgMSkgY29lZmZpY2llbnRzWzFdID0gMDtcbiAgICAgICAgICBjb2VmZmljaWVudHNbMV0gKz0gby5jdGUgKiAoby5vcGVyID09PSAnKycgPyAxIDogLTEpO1xuICAgICAgICAgIG1heEV4cG8gPSBNYXRoLm1heCgxLCBtYXhFeHBvKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0cCA9PT0gJ0NvbnN0YW50Tm9kZScpIHtcbiAgICAgICAgdmFyIHZhbG9yID0gcGFyc2VGbG9hdChub2RlLnZhbHVlKTtcblxuICAgICAgICBpZiAobm9QYWkgPT09IG51bGwpIHtcbiAgICAgICAgICBjb2VmZmljaWVudHNbMF0gPSB2YWxvcjtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9QYWkub3AgPT09ICdeJykge1xuICAgICAgICAgIC8vIGN0ZTogc2Vjb25kICBjaGlsZCBvZiBwb3dlclxuICAgICAgICAgIGlmIChvLm5vRmlsICE9PSAxKSB0aHJvdyBuZXcgRXJyb3IoJ0NvbnN0YW50IGNhbm5vdCBiZSBwb3dlcmVkJyk7XG5cbiAgICAgICAgICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikodmFsb3IpIHx8IHZhbG9yIDw9IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm9uLWludGVnZXIgZXhwb25lbnQgaXMgbm90IGFsbG93ZWQnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmb3IgKHZhciBfaTIgPSBtYXhFeHBvICsgMTsgX2kyIDwgdmFsb3I7IF9pMisrKSB7XG4gICAgICAgICAgICBjb2VmZmljaWVudHNbX2kyXSA9IDA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbG9yID4gbWF4RXhwbykgY29lZmZpY2llbnRzW3ZhbG9yXSA9IDA7XG4gICAgICAgICAgY29lZmZpY2llbnRzW3ZhbG9yXSArPSBvLmN0ZSAqIChvLm9wZXIgPT09ICcrJyA/IDEgOiAtMSk7XG4gICAgICAgICAgbWF4RXhwbyA9IE1hdGgubWF4KHZhbG9yLCBtYXhFeHBvKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBvLmN0ZSA9IHZhbG9yOyAvLyBDdGU6IGZpcmVyICcnID0+IFRoZXJlIGlzIG5vIGV4cG9uZW50IGFuZCBubyBtdWx0aXBsaWNhdGlvbiwgc28gdGhlIGV4cG9uZW50IGlzIDAuXG5cbiAgICAgICAgaWYgKG8uZmlyZSA9PT0gJycpIHtcbiAgICAgICAgICBjb2VmZmljaWVudHNbMF0gKz0gby5jdGUgKiAoby5vcGVyID09PSAnKycgPyAxIDogLTEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1R5cGUgJyArIHRwICsgJyBpcyBub3QgYWxsb3dlZCcpO1xuICAgICAgfVxuICAgIH0gLy8gRW5kIG9mIHJlY3VyUG9sXG5cbiAgfSAvLyBFbmQgb2YgcG9seVRvQ2Fub25pY2FsXG5cblxuICByZXR1cm4gcmF0aW9uYWxpemU7XG59KTtcbmV4cG9ydHMuY3JlYXRlUmF0aW9uYWxpemUgPSBjcmVhdGVSYXRpb25hbGl6ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2ltcGxpZnkgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3V0aWwgPSByZXF1aXJlKFwiLi9zaW1wbGlmeS91dGlsXCIpO1xuXG52YXIgX3NpbXBsaWZ5Q29yZSA9IHJlcXVpcmUoXCIuL3NpbXBsaWZ5L3NpbXBsaWZ5Q29yZVwiKTtcblxudmFyIF9zaW1wbGlmeUNvbnN0YW50ID0gcmVxdWlyZShcIi4vc2ltcGxpZnkvc2ltcGxpZnlDb25zdGFudFwiKTtcblxudmFyIF9yZXNvbHZlID0gcmVxdWlyZShcIi4vc2ltcGxpZnkvcmVzb2x2ZVwiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBuYW1lID0gJ3NpbXBsaWZ5JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ2NvbmZpZycsICd0eXBlZCcsICdwYXJzZScsICdhZGQnLCAnc3VidHJhY3QnLCAnbXVsdGlwbHknLCAnZGl2aWRlJywgJ3BvdycsICdpc1plcm8nLCAnZXF1YWwnLCAnP2ZyYWN0aW9uJywgJz9iaWdudW1iZXInLCAnbWF0aFdpdGhUcmFuc2Zvcm0nLCAnQ29uc3RhbnROb2RlJywgJ0Z1bmN0aW9uTm9kZScsICdPcGVyYXRvck5vZGUnLCAnUGFyZW50aGVzaXNOb2RlJywgJ1N5bWJvbE5vZGUnXTtcbnZhciBjcmVhdGVTaW1wbGlmeSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHBhcnNlID0gX3JlZi5wYXJzZSxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgZGl2aWRlID0gX3JlZi5kaXZpZGUsXG4gICAgICBwb3cgPSBfcmVmLnBvdyxcbiAgICAgIGlzWmVybyA9IF9yZWYuaXNaZXJvLFxuICAgICAgZXF1YWwgPSBfcmVmLmVxdWFsLFxuICAgICAgZnJhY3Rpb24gPSBfcmVmLmZyYWN0aW9uLFxuICAgICAgYmlnbnVtYmVyID0gX3JlZi5iaWdudW1iZXIsXG4gICAgICBtYXRoV2l0aFRyYW5zZm9ybSA9IF9yZWYubWF0aFdpdGhUcmFuc2Zvcm0sXG4gICAgICBDb25zdGFudE5vZGUgPSBfcmVmLkNvbnN0YW50Tm9kZSxcbiAgICAgIEZ1bmN0aW9uTm9kZSA9IF9yZWYuRnVuY3Rpb25Ob2RlLFxuICAgICAgT3BlcmF0b3JOb2RlID0gX3JlZi5PcGVyYXRvck5vZGUsXG4gICAgICBQYXJlbnRoZXNpc05vZGUgPSBfcmVmLlBhcmVudGhlc2lzTm9kZSxcbiAgICAgIFN5bWJvbE5vZGUgPSBfcmVmLlN5bWJvbE5vZGU7XG4gIHZhciBzaW1wbGlmeUNvbnN0YW50ID0gKDAsIF9zaW1wbGlmeUNvbnN0YW50LmNyZWF0ZVNpbXBsaWZ5Q29uc3RhbnQpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgY29uZmlnOiBjb25maWcsXG4gICAgbWF0aFdpdGhUcmFuc2Zvcm06IG1hdGhXaXRoVHJhbnNmb3JtLFxuICAgIGZyYWN0aW9uOiBmcmFjdGlvbixcbiAgICBiaWdudW1iZXI6IGJpZ251bWJlcixcbiAgICBDb25zdGFudE5vZGU6IENvbnN0YW50Tm9kZSxcbiAgICBPcGVyYXRvck5vZGU6IE9wZXJhdG9yTm9kZSxcbiAgICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgICBTeW1ib2xOb2RlOiBTeW1ib2xOb2RlXG4gIH0pO1xuICB2YXIgc2ltcGxpZnlDb3JlID0gKDAsIF9zaW1wbGlmeUNvcmUuY3JlYXRlU2ltcGxpZnlDb3JlKSh7XG4gICAgZXF1YWw6IGVxdWFsLFxuICAgIGlzWmVybzogaXNaZXJvLFxuICAgIGFkZDogYWRkLFxuICAgIHN1YnRyYWN0OiBzdWJ0cmFjdCxcbiAgICBtdWx0aXBseTogbXVsdGlwbHksXG4gICAgZGl2aWRlOiBkaXZpZGUsXG4gICAgcG93OiBwb3csXG4gICAgQ29uc3RhbnROb2RlOiBDb25zdGFudE5vZGUsXG4gICAgT3BlcmF0b3JOb2RlOiBPcGVyYXRvck5vZGUsXG4gICAgRnVuY3Rpb25Ob2RlOiBGdW5jdGlvbk5vZGUsXG4gICAgUGFyZW50aGVzaXNOb2RlOiBQYXJlbnRoZXNpc05vZGVcbiAgfSk7XG4gIHZhciByZXNvbHZlID0gKDAsIF9yZXNvbHZlLmNyZWF0ZVJlc29sdmUpKHtcbiAgICBwYXJzZTogcGFyc2UsXG4gICAgRnVuY3Rpb25Ob2RlOiBGdW5jdGlvbk5vZGUsXG4gICAgT3BlcmF0b3JOb2RlOiBPcGVyYXRvck5vZGUsXG4gICAgUGFyZW50aGVzaXNOb2RlOiBQYXJlbnRoZXNpc05vZGVcbiAgfSk7XG5cbiAgdmFyIF9jcmVhdGVVdGlsID0gKDAsIF91dGlsLmNyZWF0ZVV0aWwpKHtcbiAgICBGdW5jdGlvbk5vZGU6IEZ1bmN0aW9uTm9kZSxcbiAgICBPcGVyYXRvck5vZGU6IE9wZXJhdG9yTm9kZSxcbiAgICBTeW1ib2xOb2RlOiBTeW1ib2xOb2RlXG4gIH0pLFxuICAgICAgaXNDb21tdXRhdGl2ZSA9IF9jcmVhdGVVdGlsLmlzQ29tbXV0YXRpdmUsXG4gICAgICBpc0Fzc29jaWF0aXZlID0gX2NyZWF0ZVV0aWwuaXNBc3NvY2lhdGl2ZSxcbiAgICAgIGZsYXR0ZW4gPSBfY3JlYXRlVXRpbC5mbGF0dGVuLFxuICAgICAgdW5mbGF0dGVuciA9IF9jcmVhdGVVdGlsLnVuZmxhdHRlbnIsXG4gICAgICB1bmZsYXR0ZW5sID0gX2NyZWF0ZVV0aWwudW5mbGF0dGVubCxcbiAgICAgIGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24gPSBfY3JlYXRlVXRpbC5jcmVhdGVNYWtlTm9kZUZ1bmN0aW9uO1xuICAvKipcbiAgICogU2ltcGxpZnkgYW4gZXhwcmVzc2lvbiB0cmVlLlxuICAgKlxuICAgKiBBIGxpc3Qgb2YgcnVsZXMgYXJlIGFwcGxpZWQgdG8gYW4gZXhwcmVzc2lvbiwgcmVwZWF0aW5nIG92ZXIgdGhlIGxpc3QgdW50aWxcbiAgICogbm8gZnVydGhlciBjaGFuZ2VzIGFyZSBtYWRlLlxuICAgKiBJdCdzIHBvc3NpYmxlIHRvIHBhc3MgYSBjdXN0b20gc2V0IG9mIHJ1bGVzIHRvIHRoZSBmdW5jdGlvbiBhcyBzZWNvbmRcbiAgICogYXJndW1lbnQuIEEgcnVsZSBjYW4gYmUgc3BlY2lmaWVkIGFzIGFuIG9iamVjdCwgc3RyaW5nLCBvciBmdW5jdGlvbjpcbiAgICpcbiAgICogICAgIGNvbnN0IHJ1bGVzID0gW1xuICAgKiAgICAgICB7IGw6ICduMSpuMyArIG4yKm4zJywgcjogJyhuMStuMikqbjMnIH0sXG4gICAqICAgICAgICduMSpuMyArIG4yKm4zIC0+IChuMStuMikqbjMnLFxuICAgKiAgICAgICBmdW5jdGlvbiAobm9kZSkge1xuICAgKiAgICAgICAgIC8vIC4uLiByZXR1cm4gYSBuZXcgbm9kZSBvciByZXR1cm4gdGhlIG5vZGUgdW5jaGFuZ2VkXG4gICAqICAgICAgICAgcmV0dXJuIG5vZGVcbiAgICogICAgICAgfVxuICAgKiAgICAgXVxuICAgKlxuICAgKiBTdHJpbmcgYW5kIG9iamVjdCBydWxlcyBjb25zaXN0IG9mIGEgbGVmdCBhbmQgcmlnaHQgcGF0dGVybi4gVGhlIGxlZnQgaXNcbiAgICogdXNlZCB0byBtYXRjaCBhZ2FpbnN0IHRoZSBleHByZXNzaW9uIGFuZCB0aGUgcmlnaHQgZGV0ZXJtaW5lcyB3aGF0IG1hdGNoZXNcbiAgICogYXJlIHJlcGxhY2VkIHdpdGguIFRoZSBtYWluIGRpZmZlcmVuY2UgYmV0d2VlbiBhIHBhdHRlcm4gYW5kIGEgbm9ybWFsXG4gICAqIGV4cHJlc3Npb24gaXMgdGhhdCB2YXJpYWJsZXMgc3RhcnRpbmcgd2l0aCB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgYXJlXG4gICAqIGludGVycHJldGVkIGFzIHdpbGRjYXJkczpcbiAgICpcbiAgICogLSAnbicgLSBtYXRjaGVzIGFueSBOb2RlXG4gICAqIC0gJ2MnIC0gbWF0Y2hlcyBhbnkgQ29uc3RhbnROb2RlXG4gICAqIC0gJ3YnIC0gbWF0Y2hlcyBhbnkgTm9kZSB0aGF0IGlzIG5vdCBhIENvbnN0YW50Tm9kZVxuICAgKlxuICAgKiBUaGUgZGVmYXVsdCBsaXN0IG9mIHJ1bGVzIGlzIGV4cG9zZWQgb24gdGhlIGZ1bmN0aW9uIGFzIGBzaW1wbGlmeS5ydWxlc2BcbiAgICogYW5kIGNhbiBiZSB1c2VkIGFzIGEgYmFzaXMgdG8gYnVpbHQgYSBzZXQgb2YgY3VzdG9tIHJ1bGVzLlxuICAgKlxuICAgKiBGb3IgbW9yZSBkZXRhaWxzIG9uIHRoZSB0aGVvcnksIHNlZTpcbiAgICpcbiAgICogLSBbU3RyYXRlZ2llcyBmb3Igc2ltcGxpZnlpbmcgbWF0aCBleHByZXNzaW9ucyAoU3RhY2tvdmVyZmxvdyldKGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzc1NDAyMjcvc3RyYXRlZ2llcy1mb3Itc2ltcGxpZnlpbmctbWF0aC1leHByZXNzaW9ucylcbiAgICogLSBbU3ltYm9saWMgY29tcHV0YXRpb24gLSBTaW1wbGlmaWNhdGlvbiAoV2lraXBlZGlhKV0oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvU3ltYm9saWNfY29tcHV0YXRpb24jU2ltcGxpZmljYXRpb24pXG4gICAqXG4gICAqICBBbiBvcHRpb25hbCBgb3B0aW9uc2AgYXJndW1lbnQgY2FuIGJlIHBhc3NlZCBhcyBsYXN0IGFyZ3VtZW50IG9mIGBzaW1wbGlmeWAuXG4gICAqICBUaGVyZSBpcyBjdXJyZW50bHkgb25lIG9wdGlvbiBhdmFpbGFibGU6IGBleGFjdEZyYWN0aW9uc2AsIGEgYm9vbGVhbiB3aGljaFxuICAgKiAgaXMgYHRydWVgIGJ5IGRlZmF1bHQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIHNpbXBsaWZ5KGV4cHIpXG4gICAqICAgICBzaW1wbGlmeShleHByLCBydWxlcylcbiAgICogICAgIHNpbXBsaWZ5KGV4cHIsIHJ1bGVzKVxuICAgKiAgICAgc2ltcGxpZnkoZXhwciwgcnVsZXMsIHNjb3BlKVxuICAgKiAgICAgc2ltcGxpZnkoZXhwciwgcnVsZXMsIHNjb3BlLCBvcHRpb25zKVxuICAgKiAgICAgc2ltcGxpZnkoZXhwciwgc2NvcGUpXG4gICAqICAgICBzaW1wbGlmeShleHByLCBzY29wZSwgb3B0aW9ucylcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnNpbXBsaWZ5KCcyICogMSAqIHggXiAoMiAtIDEpJykgICAgICAvLyBOb2RlIFwiMiAqIHhcIlxuICAgKiAgICAgbWF0aC5zaW1wbGlmeSgnMiAqIDMgKiB4Jywge3g6IDR9KSAgICAgICAgLy8gTm9kZSBcIjI0XCJcbiAgICogICAgIGNvbnN0IGYgPSBtYXRoLnBhcnNlKCcyICogMSAqIHggXiAoMiAtIDEpJylcbiAgICogICAgIG1hdGguc2ltcGxpZnkoZikgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5vZGUgXCIyICogeFwiXG4gICAqICAgICBtYXRoLnNpbXBsaWZ5KCcwLjQgKiB4Jywge30sIHtleGFjdEZyYWN0aW9uczogdHJ1ZX0pICAvLyBOb2RlIFwieCAqIDIgLyA1XCJcbiAgICogICAgIG1hdGguc2ltcGxpZnkoJzAuNCAqIHgnLCB7fSwge2V4YWN0RnJhY3Rpb25zOiBmYWxzZX0pIC8vIE5vZGUgXCIwLjQgKiB4XCJcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBkZXJpdmF0aXZlLCBwYXJzZSwgZXZhbHVhdGUsIHJhdGlvbmFsaXplXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZSB8IHN0cmluZ30gZXhwclxuICAgKiAgICAgICAgICAgIFRoZSBleHByZXNzaW9uIHRvIGJlIHNpbXBsaWZpZWRcbiAgICogQHBhcmFtIHtBcnJheTx7bDpzdHJpbmcsIHI6IHN0cmluZ30gfCBzdHJpbmcgfCBmdW5jdGlvbj59IFtydWxlc11cbiAgICogICAgICAgICAgICBPcHRpb25hbCBsaXN0IHdpdGggY3VzdG9tIHJ1bGVzXG4gICAqIEByZXR1cm4ge05vZGV9IFJldHVybnMgdGhlIHNpbXBsaWZpZWQgZm9ybSBvZiBgZXhwcmBcbiAgICovXG5cblxuICB2YXIgc2ltcGxpZnkgPSB0eXBlZCgnc2ltcGxpZnknLCB7XG4gICAgc3RyaW5nOiBmdW5jdGlvbiBzdHJpbmcoZXhwcikge1xuICAgICAgcmV0dXJuIHNpbXBsaWZ5KHBhcnNlKGV4cHIpLCBzaW1wbGlmeS5ydWxlcywge30sIHt9KTtcbiAgICB9LFxuICAgICdzdHJpbmcsIE9iamVjdCc6IGZ1bmN0aW9uIHN0cmluZ09iamVjdChleHByLCBzY29wZSkge1xuICAgICAgcmV0dXJuIHNpbXBsaWZ5KHBhcnNlKGV4cHIpLCBzaW1wbGlmeS5ydWxlcywgc2NvcGUsIHt9KTtcbiAgICB9LFxuICAgICdzdHJpbmcsIE9iamVjdCwgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nT2JqZWN0T2JqZWN0KGV4cHIsIHNjb3BlLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gc2ltcGxpZnkocGFyc2UoZXhwciksIHNpbXBsaWZ5LnJ1bGVzLCBzY29wZSwgb3B0aW9ucyk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBBcnJheSc6IGZ1bmN0aW9uIHN0cmluZ0FycmF5KGV4cHIsIHJ1bGVzKSB7XG4gICAgICByZXR1cm4gc2ltcGxpZnkocGFyc2UoZXhwciksIHJ1bGVzLCB7fSwge30pO1xuICAgIH0sXG4gICAgJ3N0cmluZywgQXJyYXksIE9iamVjdCc6IGZ1bmN0aW9uIHN0cmluZ0FycmF5T2JqZWN0KGV4cHIsIHJ1bGVzLCBzY29wZSkge1xuICAgICAgcmV0dXJuIHNpbXBsaWZ5KHBhcnNlKGV4cHIpLCBydWxlcywgc2NvcGUsIHt9KTtcbiAgICB9LFxuICAgICdzdHJpbmcsIEFycmF5LCBPYmplY3QsIE9iamVjdCc6IGZ1bmN0aW9uIHN0cmluZ0FycmF5T2JqZWN0T2JqZWN0KGV4cHIsIHJ1bGVzLCBzY29wZSwgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIHNpbXBsaWZ5KHBhcnNlKGV4cHIpLCBydWxlcywgc2NvcGUsIG9wdGlvbnMpO1xuICAgIH0sXG4gICAgJ05vZGUsIE9iamVjdCc6IGZ1bmN0aW9uIE5vZGVPYmplY3QoZXhwciwgc2NvcGUpIHtcbiAgICAgIHJldHVybiBzaW1wbGlmeShleHByLCBzaW1wbGlmeS5ydWxlcywgc2NvcGUsIHt9KTtcbiAgICB9LFxuICAgICdOb2RlLCBPYmplY3QsIE9iamVjdCc6IGZ1bmN0aW9uIE5vZGVPYmplY3RPYmplY3QoZXhwciwgc2NvcGUsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBzaW1wbGlmeShleHByLCBzaW1wbGlmeS5ydWxlcywgc2NvcGUsIG9wdGlvbnMpO1xuICAgIH0sXG4gICAgTm9kZTogZnVuY3Rpb24gTm9kZShleHByKSB7XG4gICAgICByZXR1cm4gc2ltcGxpZnkoZXhwciwgc2ltcGxpZnkucnVsZXMsIHt9LCB7fSk7XG4gICAgfSxcbiAgICAnTm9kZSwgQXJyYXknOiBmdW5jdGlvbiBOb2RlQXJyYXkoZXhwciwgcnVsZXMpIHtcbiAgICAgIHJldHVybiBzaW1wbGlmeShleHByLCBydWxlcywge30sIHt9KTtcbiAgICB9LFxuICAgICdOb2RlLCBBcnJheSwgT2JqZWN0JzogZnVuY3Rpb24gTm9kZUFycmF5T2JqZWN0KGV4cHIsIHJ1bGVzLCBzY29wZSkge1xuICAgICAgcmV0dXJuIHNpbXBsaWZ5KGV4cHIsIHJ1bGVzLCBzY29wZSwge30pO1xuICAgIH0sXG4gICAgJ05vZGUsIEFycmF5LCBPYmplY3QsIE9iamVjdCc6IGZ1bmN0aW9uIE5vZGVBcnJheU9iamVjdE9iamVjdChleHByLCBydWxlcywgc2NvcGUsIG9wdGlvbnMpIHtcbiAgICAgIHJ1bGVzID0gX2J1aWxkUnVsZXMocnVsZXMpO1xuICAgICAgdmFyIHJlcyA9IHJlc29sdmUoZXhwciwgc2NvcGUpO1xuICAgICAgcmVzID0gcmVtb3ZlUGFyZW5zKHJlcyk7XG4gICAgICB2YXIgdmlzaXRlZCA9IHt9O1xuICAgICAgdmFyIHN0ciA9IHJlcy50b1N0cmluZyh7XG4gICAgICAgIHBhcmVudGhlc2lzOiAnYWxsJ1xuICAgICAgfSk7XG5cbiAgICAgIHdoaWxlICghdmlzaXRlZFtzdHJdKSB7XG4gICAgICAgIHZpc2l0ZWRbc3RyXSA9IHRydWU7XG4gICAgICAgIF9sYXN0c3ltID0gMDsgLy8gY291bnRlciBmb3IgcGxhY2Vob2xkZXIgc3ltYm9sc1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHJ1bGVzW2ldID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXMgPSBydWxlc1tpXShyZXMsIG9wdGlvbnMpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmbGF0dGVuKHJlcyk7XG4gICAgICAgICAgICByZXMgPSBhcHBseVJ1bGUocmVzLCBydWxlc1tpXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdW5mbGF0dGVubChyZXMpOyAvLyB1c2luZyBsZWZ0LWhlYXZ5IGJpbmFyeSB0cmVlIGhlcmUgc2luY2UgY3VzdG9tIHJ1bGUgZnVuY3Rpb25zIG1heSBleHBlY3QgaXRcbiAgICAgICAgfVxuXG4gICAgICAgIHN0ciA9IHJlcy50b1N0cmluZyh7XG4gICAgICAgICAgcGFyZW50aGVzaXM6ICdhbGwnXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgfSk7XG4gIHNpbXBsaWZ5LnNpbXBsaWZ5Q29yZSA9IHNpbXBsaWZ5Q29yZTtcbiAgc2ltcGxpZnkucmVzb2x2ZSA9IHJlc29sdmU7XG5cbiAgZnVuY3Rpb24gcmVtb3ZlUGFyZW5zKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS50cmFuc2Zvcm0oZnVuY3Rpb24gKG5vZGUsIHBhdGgsIHBhcmVudCkge1xuICAgICAgcmV0dXJuICgwLCBfaXMuaXNQYXJlbnRoZXNpc05vZGUpKG5vZGUpID8gcmVtb3ZlUGFyZW5zKG5vZGUuY29udGVudCkgOiBub2RlO1xuICAgIH0pO1xuICB9IC8vIEFsbCBjb25zdGFudHMgdGhhdCBhcmUgYWxsb3dlZCBpbiBydWxlc1xuXG5cbiAgdmFyIFNVUFBPUlRFRF9DT05TVEFOVFMgPSB7XG4gICAgXCJ0cnVlXCI6IHRydWUsXG4gICAgXCJmYWxzZVwiOiB0cnVlLFxuICAgIGU6IHRydWUsXG4gICAgaTogdHJ1ZSxcbiAgICBJbmZpbml0eTogdHJ1ZSxcbiAgICBMTjI6IHRydWUsXG4gICAgTE4xMDogdHJ1ZSxcbiAgICBMT0cyRTogdHJ1ZSxcbiAgICBMT0cxMEU6IHRydWUsXG4gICAgTmFOOiB0cnVlLFxuICAgIHBoaTogdHJ1ZSxcbiAgICBwaTogdHJ1ZSxcbiAgICBTUVJUMV8yOiB0cnVlLFxuICAgIFNRUlQyOiB0cnVlLFxuICAgIHRhdTogdHJ1ZSAvLyBudWxsOiBmYWxzZSxcbiAgICAvLyB1bmRlZmluZWQ6IGZhbHNlLFxuICAgIC8vIHZlcnNpb246IGZhbHNlLFxuXG4gIH07IC8vIEFycmF5IG9mIHN0cmluZ3MsIHVzZWQgdG8gYnVpbGQgdGhlIHJ1bGVTZXQuXG4gIC8vIEVhY2ggbCAobGVmdCBzaWRlKSBhbmQgciAocmlnaHQgc2lkZSkgYXJlIHBhcnNlZCBieVxuICAvLyB0aGUgZXhwcmVzc2lvbiBwYXJzZXIgaW50byBhIG5vZGUgdHJlZS5cbiAgLy8gTGVmdCBoYW5kIHNpZGVzIGFyZSBtYXRjaGVkIHRvIHN1YnRyZWVzIHdpdGhpbiB0aGVcbiAgLy8gZXhwcmVzc2lvbiB0byBiZSBwYXJzZWQgYW5kIHJlcGxhY2VkIHdpdGggdGhlIHJpZ2h0XG4gIC8vIGhhbmQgc2lkZS5cbiAgLy8gVE9ETzogQWRkIHN1cHBvcnQgZm9yIGNvbnN0cmFpbnRzIG9uIGNvbnN0YW50cyAoZWl0aGVyIGluIHRoZSBmb3JtIG9mIGEgJz0nIGV4cHJlc3Npb24gb3IgYSBjYWxsYmFjayBbY2FsbGJhY2sgYWxsb3dzIHRoaW5ncyBsaWtlIGNvbXBhcmluZyBzeW1ib2xzIGFscGhhYmV0aWNhbGx5XSlcbiAgLy8gVG8gZXZhbHVhdGUgbGhzIGNvbnN0YW50cyBmb3IgcmhzIGNvbnN0YW50cywgdXNlOiB7IGw6ICdjMStjMicsIHI6ICdjMycsIGV2YWx1YXRlOiAnYzMgPSBjMSArIGMyJyB9LiBNdWx0aXBsZSBhc3NpZ25tZW50cyBhcmUgc2VwYXJhdGVkIGJ5ICc7JyBpbiBibG9jayBmb3JtYXQuXG4gIC8vIEl0IGlzIHBvc3NpYmxlIHRvIGdldCBpbnRvIGFuIGluZmluaXRlIGxvb3Agd2l0aCBjb25mbGljdGluZyBydWxlc1xuXG4gIHNpbXBsaWZ5LnJ1bGVzID0gW3NpbXBsaWZ5Q29yZSwgLy8geyBsOiAnbiswJywgcjogJ24nIH0sICAgICAvLyBzaW1wbGlmeUNvcmVcbiAgLy8geyBsOiAnbl4wJywgcjogJzEnIH0sICAgICAvLyBzaW1wbGlmeUNvcmVcbiAgLy8geyBsOiAnMCpuJywgcjogJzAnIH0sICAgICAvLyBzaW1wbGlmeUNvcmVcbiAgLy8geyBsOiAnbi9uJywgcjogJzEnfSwgICAgICAvLyBzaW1wbGlmeUNvcmVcbiAgLy8geyBsOiAnbl4xJywgcjogJ24nIH0sICAgICAvLyBzaW1wbGlmeUNvcmVcbiAgLy8geyBsOiAnK24xJywgcjonbjEnIH0sICAgICAvLyBzaW1wbGlmeUNvcmVcbiAgLy8geyBsOiAnbi0tbjEnLCByOiduK24xJyB9LCAvLyBzaW1wbGlmeUNvcmVcbiAge1xuICAgIGw6ICdsb2coZSknLFxuICAgIHI6ICcxJ1xuICB9LCAvLyB0ZW1wb3JhcnkgcnVsZXNcbiAge1xuICAgIGw6ICduLW4xJyxcbiAgICByOiAnbistbjEnXG4gIH0sIC8vIHRlbXBvcmFyaWx5IHJlcGxhY2UgJ3N1YnRyYWN0JyBzbyB3ZSBjYW4gZnVydGhlciBmbGF0dGVuIHRoZSAnYWRkJyBvcGVyYXRvclxuICB7XG4gICAgbDogJy0oYyp2KScsXG4gICAgcjogJygtYykgKiB2J1xuICB9LCAvLyBtYWtlIG5vbi1jb25zdGFudCB0ZXJtcyBwb3NpdGl2ZVxuICB7XG4gICAgbDogJy12JyxcbiAgICByOiAnKC0xKSAqIHYnXG4gIH0sIHtcbiAgICBsOiAnbi9uMV5uMicsXG4gICAgcjogJ24qbjFeLW4yJ1xuICB9LCAvLyB0ZW1wb3JhcmlseSByZXBsYWNlICdkaXZpZGUnIHNvIHdlIGNhbiBmdXJ0aGVyIGZsYXR0ZW4gdGhlICdtdWx0aXBseScgb3BlcmF0b3JcbiAge1xuICAgIGw6ICduL24xJyxcbiAgICByOiAnbipuMV4tMSdcbiAgfSwgLy8gZXhwYW5kIG5lc3RlZCBleHBvbmVudGlhdGlvblxuICB7XG4gICAgbDogJyhuIF4gbjEpIF4gbjInLFxuICAgIHI6ICduIF4gKG4xICogbjIpJ1xuICB9LCAvLyBjb2xsZWN0IGxpa2UgZmFjdG9yc1xuICB7XG4gICAgbDogJ24qbicsXG4gICAgcjogJ25eMidcbiAgfSwge1xuICAgIGw6ICduICogbl5uMScsXG4gICAgcjogJ25eKG4xKzEpJ1xuICB9LCB7XG4gICAgbDogJ25ebjEgKiBuXm4yJyxcbiAgICByOiAnbl4objErbjIpJ1xuICB9LCAvLyBjb2xsZWN0IGxpa2UgdGVybXNcbiAge1xuICAgIGw6ICduK24nLFxuICAgIHI6ICcyKm4nXG4gIH0sIHtcbiAgICBsOiAnbistbicsXG4gICAgcjogJzAnXG4gIH0sIHtcbiAgICBsOiAnbjEqbjIgKyBuMicsXG4gICAgcjogJyhuMSsxKSpuMidcbiAgfSwge1xuICAgIGw6ICduMSpuMyArIG4yKm4zJyxcbiAgICByOiAnKG4xK24yKSpuMydcbiAgfSwgLy8gcmVtb3ZlIHBhcmVudGhlc2lzIGluIHRoZSBjYXNlIG9mIG5lZ2F0aW5nIGEgcXVhbnRpdGl5XG4gIHtcbiAgICBsOiAnbjEgKyAtMSAqIChuMiArIG4zKScsXG4gICAgcjogJ24xICsgLTEgKiBuMiArIC0xICogbjMnXG4gIH0sIHNpbXBsaWZ5Q29uc3RhbnQsIHtcbiAgICBsOiAnKC1uKSpuMScsXG4gICAgcjogJy0obipuMSknXG4gIH0sIC8vIG1ha2UgZmFjdG9ycyBwb3NpdGl2ZSAoYW5kIHVuZG8gJ21ha2Ugbm9uLWNvbnN0YW50IHRlcm1zIHBvc2l0aXZlJylcbiAgLy8gb3JkZXJpbmcgb2YgY29uc3RhbnRzXG4gIHtcbiAgICBsOiAnYyt2JyxcbiAgICByOiAnditjJyxcbiAgICBjb250ZXh0OiB7XG4gICAgICBhZGQ6IHtcbiAgICAgICAgY29tbXV0YXRpdmU6IGZhbHNlXG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAgbDogJ3YqYycsXG4gICAgcjogJ2MqdicsXG4gICAgY29udGV4dDoge1xuICAgICAgbXVsdGlwbHk6IHtcbiAgICAgICAgY29tbXV0YXRpdmU6IGZhbHNlXG4gICAgICB9XG4gICAgfVxuICB9LCAvLyB1bmRvIHRlbXBvcmFyeSBydWxlc1xuICAvLyB7IGw6ICcoLTEpICogbicsIHI6ICctbicgfSwgLy8gIzgxMSBhZGRlZCB0ZXN0IHdoaWNoIHByb3ZlZCB0aGlzIGlzIHJlZHVuZGFudFxuICB7XG4gICAgbDogJ24rLW4xJyxcbiAgICByOiAnbi1uMSdcbiAgfSwgLy8gdW5kbyByZXBsYWNlICdzdWJ0cmFjdCdcbiAge1xuICAgIGw6ICduKihuMV4tMSknLFxuICAgIHI6ICduL24xJ1xuICB9LCAvLyB1bmRvIHJlcGxhY2UgJ2RpdmlkZSdcbiAge1xuICAgIGw6ICduKm4xXi1uMicsXG4gICAgcjogJ24vbjFebjInXG4gIH0sIHtcbiAgICBsOiAnbjFeLTEnLFxuICAgIHI6ICcxL24xJ1xuICB9LCB7XG4gICAgbDogJ24qKG4xL24yKScsXG4gICAgcjogJyhuKm4xKS9uMidcbiAgfSwgLy8gJyonIGJlZm9yZSAnLydcbiAge1xuICAgIGw6ICduLShuMStuMiknLFxuICAgIHI6ICduLW4xLW4yJ1xuICB9LCAvLyAnLScgYmVmb3JlICcrJ1xuICAvLyB7IGw6ICcobjEvbjIpL24zJywgcjogJ24xLyhuMipuMyknIH0sXG4gIC8vIHsgbDogJyhuKm4xKS8obipuMiknLCByOiAnbjEvbjInIH0sXG4gIHtcbiAgICBsOiAnMSpuJyxcbiAgICByOiAnbidcbiAgfSwgLy8gdGhpcyBwYXR0ZXJuIGNhbiBiZSBwcm9kdWNlZCBieSBzaW1wbGlmeUNvbnN0YW50XG4gIHtcbiAgICBsOiAnbjEvKG4yL24zKScsXG4gICAgcjogJyhuMSpuMykvbjInXG4gIH1dO1xuICAvKipcbiAgICogUGFyc2UgdGhlIHN0cmluZyBhcnJheSBvZiBydWxlcyBpbnRvIG5vZGVzXG4gICAqXG4gICAqIEV4YW1wbGUgc3ludGF4IGZvciBydWxlczpcbiAgICpcbiAgICogUG9zaXRpb24gY29uc3RhbnRzIHRvIHRoZSBsZWZ0IGluIGEgcHJvZHVjdDpcbiAgICogeyBsOiAnbjEgKiBjMScsIHI6ICdjMSAqIG4xJyB9XG4gICAqIG4xIGlzIGFueSBOb2RlLCBhbmQgYzEgaXMgYSBDb25zdGFudE5vZGUuXG4gICAqXG4gICAqIEFwcGx5IGRpZmZlcmVuY2Ugb2Ygc3F1YXJlcyBmb3JtdWxhOlxuICAgKiB7IGw6ICcobjEgLSBuMikgKiAobjEgKyBuMiknLCByOiAnbjFeMiAtIG4yXjInIH1cbiAgICogbjEsIG4yIG1lYW4gYW55IE5vZGUuXG4gICAqXG4gICAqIFNob3J0IGhhbmQgbm90YXRpb246XG4gICAqICduMSAqIGMxIC0+IGMxICogbjEnXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9idWlsZFJ1bGVzKHJ1bGVzKSB7XG4gICAgLy8gQXJyYXkgb2YgcnVsZXMgdG8gYmUgdXNlZCB0byBzaW1wbGlmeSBleHByZXNzaW9uc1xuICAgIHZhciBydWxlU2V0ID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcnVsZSA9IHJ1bGVzW2ldO1xuICAgICAgdmFyIG5ld1J1bGUgPSB2b2lkIDA7XG5cbiAgICAgIHZhciBydWxlVHlwZSA9IF90eXBlb2YocnVsZSk7XG5cbiAgICAgIHN3aXRjaCAocnVsZVR5cGUpIHtcbiAgICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2YXIgbHIgPSBydWxlLnNwbGl0KCctPicpO1xuXG4gICAgICAgICAgICBpZiAobHIubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgIHJ1bGUgPSB7XG4gICAgICAgICAgICAgICAgbDogbHJbMF0sXG4gICAgICAgICAgICAgICAgcjogbHJbMV1cbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRocm93IFN5bnRheEVycm9yKCdDb3VsZCBub3QgcGFyc2UgcnVsZTogJyArIHJ1bGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgICBuZXdSdWxlID0ge1xuICAgICAgICAgICAgbDogcmVtb3ZlUGFyZW5zKHBhcnNlKHJ1bGUubCkpLFxuICAgICAgICAgICAgcjogcmVtb3ZlUGFyZW5zKHBhcnNlKHJ1bGUucikpXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIGlmIChydWxlLmNvbnRleHQpIHtcbiAgICAgICAgICAgIG5ld1J1bGUuZXZhbHVhdGUgPSBydWxlLmNvbnRleHQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJ1bGUuZXZhbHVhdGUpIHtcbiAgICAgICAgICAgIG5ld1J1bGUuZXZhbHVhdGUgPSBwYXJzZShydWxlLmV2YWx1YXRlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNBc3NvY2lhdGl2ZShuZXdSdWxlLmwpKSB7XG4gICAgICAgICAgICB2YXIgbWFrZU5vZGUgPSBjcmVhdGVNYWtlTm9kZUZ1bmN0aW9uKG5ld1J1bGUubCk7XG5cbiAgICAgICAgICAgIHZhciBleHBhbmRzeW0gPSBfZ2V0RXhwYW5kUGxhY2Vob2xkZXJTeW1ib2woKTtcblxuICAgICAgICAgICAgbmV3UnVsZS5leHBhbmRlZCA9IHt9O1xuICAgICAgICAgICAgbmV3UnVsZS5leHBhbmRlZC5sID0gbWFrZU5vZGUoW25ld1J1bGUubC5jbG9uZSgpLCBleHBhbmRzeW1dKTsgLy8gUHVzaCB0aGUgZXhwYW5kc3ltIGludG8gdGhlIGRlZXBlc3QgcG9zc2libGUgYnJhbmNoLlxuICAgICAgICAgICAgLy8gVGhpcyBoZWxwcyB0byBtYXRjaCB0aGUgbmV3UnVsZSBhZ2FpbnN0IG5vZGVzIHJldHVybmVkIGZyb20gZ2V0U3BsaXRzKCkgbGF0ZXIgb24uXG5cbiAgICAgICAgICAgIGZsYXR0ZW4obmV3UnVsZS5leHBhbmRlZC5sKTtcbiAgICAgICAgICAgIHVuZmxhdHRlbnIobmV3UnVsZS5leHBhbmRlZC5sKTtcbiAgICAgICAgICAgIG5ld1J1bGUuZXhwYW5kZWQuciA9IG1ha2VOb2RlKFtuZXdSdWxlLnIsIGV4cGFuZHN5bV0pO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgICAgICBuZXdSdWxlID0gcnVsZTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IFR5cGVFcnJvcignVW5zdXBwb3J0ZWQgdHlwZSBvZiBydWxlOiAnICsgcnVsZVR5cGUpO1xuICAgICAgfSAvLyBjb25zb2xlLmxvZygnQWRkaW5nIHJ1bGU6ICcgKyBydWxlc1tpXSlcbiAgICAgIC8vIGNvbnNvbGUubG9nKG5ld1J1bGUpXG5cblxuICAgICAgcnVsZVNldC5wdXNoKG5ld1J1bGUpO1xuICAgIH1cblxuICAgIHJldHVybiBydWxlU2V0O1xuICB9XG5cbiAgdmFyIF9sYXN0c3ltID0gMDtcblxuICBmdW5jdGlvbiBfZ2V0RXhwYW5kUGxhY2Vob2xkZXJTeW1ib2woKSB7XG4gICAgcmV0dXJuIG5ldyBTeW1ib2xOb2RlKCdfcCcgKyBfbGFzdHN5bSsrKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHNpbXBsZmllZCBmb3JtIG9mIG5vZGUsIG9yIHRoZSBvcmlnaW5hbCBub2RlIGlmIG5vIHNpbXBsaWZpY2F0aW9uIHdhcyBwb3NzaWJsZS5cbiAgICpcbiAgICogQHBhcmFtICB7Q29uc3RhbnROb2RlIHwgU3ltYm9sTm9kZSB8IFBhcmVudGhlc2lzTm9kZSB8IEZ1bmN0aW9uTm9kZSB8IE9wZXJhdG9yTm9kZX0gbm9kZVxuICAgKiBAcmV0dXJuIHtDb25zdGFudE5vZGUgfCBTeW1ib2xOb2RlIHwgUGFyZW50aGVzaXNOb2RlIHwgRnVuY3Rpb25Ob2RlIHwgT3BlcmF0b3JOb2RlfSBUaGUgc2ltcGxpZmllZCBmb3JtIG9mIGBleHByYCwgb3IgdGhlIG9yaWdpbmFsIG5vZGUgaWYgbm8gc2ltcGxpZmljYXRpb24gd2FzIHBvc3NpYmxlLlxuICAgKi9cblxuXG4gIHZhciBhcHBseVJ1bGUgPSB0eXBlZCgnYXBwbHlSdWxlJywge1xuICAgICdOb2RlLCBPYmplY3QnOiBmdW5jdGlvbiBOb2RlT2JqZWN0KG5vZGUsIHJ1bGUpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdFbnRlcmluZyBhcHBseVJ1bGUoJyArIG5vZGUudG9TdHJpbmcoKSArICcpJylcbiAgICAgIC8vIERvIG5vdCBjbG9uZSBub2RlIHVubGVzcyB3ZSBmaW5kIGEgbWF0Y2hcbiAgICAgIHZhciByZXMgPSBub2RlOyAvLyBGaXJzdCByZXBsYWNlIG91ciBjaGlsZCBub2RlcyB3aXRoIHRoZWlyIHNpbXBsaWZpZWQgdmVyc2lvbnNcbiAgICAgIC8vIElmIGEgY2hpbGQgY291bGQgbm90IGJlIHNpbXBsaWZpZWQsIHRoZSBhc3NpZ25tZW50cyB3aWxsIGhhdmVcbiAgICAgIC8vIG5vIGVmZmVjdCBzaW5jZSB0aGUgbm9kZSBpcyByZXR1cm5lZCB1bmNoYW5nZWRcblxuICAgICAgaWYgKHJlcyBpbnN0YW5jZW9mIE9wZXJhdG9yTm9kZSB8fCByZXMgaW5zdGFuY2VvZiBGdW5jdGlvbk5vZGUpIHtcbiAgICAgICAgaWYgKHJlcy5hcmdzKSB7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXMuYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcmVzLmFyZ3NbaV0gPSBhcHBseVJ1bGUocmVzLmFyZ3NbaV0sIHJ1bGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChyZXMgaW5zdGFuY2VvZiBQYXJlbnRoZXNpc05vZGUpIHtcbiAgICAgICAgaWYgKHJlcy5jb250ZW50KSB7XG4gICAgICAgICAgcmVzLmNvbnRlbnQgPSBhcHBseVJ1bGUocmVzLmNvbnRlbnQsIHJ1bGUpO1xuICAgICAgICB9XG4gICAgICB9IC8vIFRyeSB0byBtYXRjaCBhIHJ1bGUgYWdhaW5zdCB0aGlzIG5vZGVcblxuXG4gICAgICB2YXIgcmVwbCA9IHJ1bGUucjtcblxuICAgICAgdmFyIG1hdGNoZXMgPSBfcnVsZU1hdGNoKHJ1bGUubCwgcmVzKVswXTsgLy8gSWYgdGhlIHJ1bGUgaXMgYXNzb2NpYXRpdmUgb3BlcmF0b3IsIHdlIGNhbiB0cnkgbWF0Y2hpbmcgaXQgd2hpbGUgYWxsb3dpbmcgYWRkaXRpb25hbCB0ZXJtcy5cbiAgICAgIC8vIFRoaXMgYWxsb3dzIHVzIHRvIG1hdGNoIHJ1bGVzIGxpa2UgJ24rbicgdG8gdGhlIGV4cHJlc3Npb24gJygxK3gpK3gnIG9yIGV2ZW4gJ3grMSt4JyBpZiB0aGUgb3BlcmF0b3IgaXMgY29tbXV0YXRpdmUuXG5cblxuICAgICAgaWYgKCFtYXRjaGVzICYmIHJ1bGUuZXhwYW5kZWQpIHtcbiAgICAgICAgcmVwbCA9IHJ1bGUuZXhwYW5kZWQucjtcbiAgICAgICAgbWF0Y2hlcyA9IF9ydWxlTWF0Y2gocnVsZS5leHBhbmRlZC5sLCByZXMpWzBdO1xuICAgICAgfVxuXG4gICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICAvLyBjb25zdCBiZWZvcmUgPSByZXMudG9TdHJpbmcoe3BhcmVudGhlc2lzOiAnYWxsJ30pXG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBub2RlIGJ5IGNsb25pbmcgdGhlIHJocyBvZiB0aGUgbWF0Y2hlZCBydWxlXG4gICAgICAgIC8vIHdlIGtlZXAgYW55IGltcGxpY2l0IG11bHRpcGxpY2F0aW9uIHN0YXRlIGlmIHJlbGV2YW50XG4gICAgICAgIHZhciBpbXBsaWNpdCA9IHJlcy5pbXBsaWNpdDtcbiAgICAgICAgcmVzID0gcmVwbC5jbG9uZSgpO1xuXG4gICAgICAgIGlmIChpbXBsaWNpdCAmJiAnaW1wbGljaXQnIGluIHJlcGwpIHtcbiAgICAgICAgICByZXMuaW1wbGljaXQgPSB0cnVlO1xuICAgICAgICB9IC8vIFJlcGxhY2UgcGxhY2Vob2xkZXJzIHdpdGggdGhlaXIgcmVzcGVjdGl2ZSBub2RlcyB3aXRob3V0IHRyYXZlcnNpbmcgZGVlcGVyIGludG8gdGhlIHJlcGxhY2VkIG5vZGVzXG5cblxuICAgICAgICByZXMgPSByZXMudHJhbnNmb3JtKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgaWYgKG5vZGUuaXNTeW1ib2xOb2RlICYmICgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShtYXRjaGVzLnBsYWNlaG9sZGVycywgbm9kZS5uYW1lKSkge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXMucGxhY2Vob2xkZXJzW25vZGUubmFtZV0uY2xvbmUoKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTsgLy8gY29uc3QgYWZ0ZXIgPSByZXMudG9TdHJpbmcoe3BhcmVudGhlc2lzOiAnYWxsJ30pXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdTaW1wbGlmaWVkICcgKyBiZWZvcmUgKyAnIHRvICcgKyBhZnRlcilcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogR2V0IChiaW5hcnkpIGNvbWJpbmF0aW9ucyBvZiBhIGZsYXR0ZW5lZCBiaW5hcnkgbm9kZVxuICAgKiBlLmcuICsobm9kZTEsIG5vZGUyLCBub2RlMykgLT4gW1xuICAgKiAgICAgICAgKyhub2RlMSwgICsobm9kZTIsIG5vZGUzKSksXG4gICAqICAgICAgICArKG5vZGUyLCAgKyhub2RlMSwgbm9kZTMpKSxcbiAgICogICAgICAgICsobm9kZTMsICArKG5vZGUxLCBub2RlMikpXVxuICAgKlxuICAgKi9cblxuICBmdW5jdGlvbiBnZXRTcGxpdHMobm9kZSwgY29udGV4dCkge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICB2YXIgcmlnaHQsIHJpZ2h0QXJncztcbiAgICB2YXIgbWFrZU5vZGUgPSBjcmVhdGVNYWtlTm9kZUZ1bmN0aW9uKG5vZGUpO1xuXG4gICAgaWYgKGlzQ29tbXV0YXRpdmUobm9kZSwgY29udGV4dCkpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJpZ2h0QXJncyA9IG5vZGUuYXJncy5zbGljZSgwKTtcbiAgICAgICAgcmlnaHRBcmdzLnNwbGljZShpLCAxKTtcbiAgICAgICAgcmlnaHQgPSByaWdodEFyZ3MubGVuZ3RoID09PSAxID8gcmlnaHRBcmdzWzBdIDogbWFrZU5vZGUocmlnaHRBcmdzKTtcbiAgICAgICAgcmVzLnB1c2gobWFrZU5vZGUoW25vZGUuYXJnc1tpXSwgcmlnaHRdKSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHJpZ2h0QXJncyA9IG5vZGUuYXJncy5zbGljZSgxKTtcbiAgICAgIHJpZ2h0ID0gcmlnaHRBcmdzLmxlbmd0aCA9PT0gMSA/IHJpZ2h0QXJnc1swXSA6IG1ha2VOb2RlKHJpZ2h0QXJncyk7XG4gICAgICByZXMucHVzaChtYWtlTm9kZShbbm9kZS5hcmdzWzBdLCByaWdodF0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzZXQgdW5pb24gb2YgdHdvIG1hdGNoLXBsYWNlaG9sZGVycyBvciBudWxsIGlmIHRoZXJlIGlzIGEgY29uZmxpY3QuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gbWVyZ2VNYXRjaChtYXRjaDEsIG1hdGNoMikge1xuICAgIHZhciByZXMgPSB7XG4gICAgICBwbGFjZWhvbGRlcnM6IHt9XG4gICAgfTsgLy8gU29tZSBtYXRjaGVzIG1heSBub3QgaGF2ZSBwbGFjZWhvbGRlcnM7IHRoaXMgaXMgT0tcblxuICAgIGlmICghbWF0Y2gxLnBsYWNlaG9sZGVycyAmJiAhbWF0Y2gyLnBsYWNlaG9sZGVycykge1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9IGVsc2UgaWYgKCFtYXRjaDEucGxhY2Vob2xkZXJzKSB7XG4gICAgICByZXR1cm4gbWF0Y2gyO1xuICAgIH0gZWxzZSBpZiAoIW1hdGNoMi5wbGFjZWhvbGRlcnMpIHtcbiAgICAgIHJldHVybiBtYXRjaDE7XG4gICAgfSAvLyBQbGFjZWhvbGRlcnMgd2l0aCB0aGUgc2FtZSBrZXkgbXVzdCBtYXRjaCBleGFjdGx5XG5cblxuICAgIGZvciAodmFyIGtleSBpbiBtYXRjaDEucGxhY2Vob2xkZXJzKSB7XG4gICAgICByZXMucGxhY2Vob2xkZXJzW2tleV0gPSBtYXRjaDEucGxhY2Vob2xkZXJzW2tleV07XG5cbiAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkobWF0Y2gyLnBsYWNlaG9sZGVycywga2V5KSkge1xuICAgICAgICBpZiAoIV9leGFjdE1hdGNoKG1hdGNoMS5wbGFjZWhvbGRlcnNba2V5XSwgbWF0Y2gyLnBsYWNlaG9sZGVyc1trZXldKSkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yICh2YXIgX2tleSBpbiBtYXRjaDIucGxhY2Vob2xkZXJzKSB7XG4gICAgICByZXMucGxhY2Vob2xkZXJzW19rZXldID0gbWF0Y2gyLnBsYWNlaG9sZGVyc1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzO1xuICB9XG4gIC8qKlxuICAgKiBDb21iaW5lIHR3byBsaXN0cyBvZiBtYXRjaGVzIGJ5IGFwcGx5aW5nIG1lcmdlTWF0Y2ggdG8gdGhlIGNhcnRlc2lhbiBwcm9kdWN0IG9mIHR3byBsaXN0cyBvZiBtYXRjaGVzLlxuICAgKiBFYWNoIGxpc3QgcmVwcmVzZW50cyBtYXRjaGVzIGZvdW5kIGluIG9uZSBjaGlsZCBvZiBhIG5vZGUuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gY29tYmluZUNoaWxkTWF0Y2hlcyhsaXN0MSwgbGlzdDIpIHtcbiAgICB2YXIgcmVzID0gW107XG5cbiAgICBpZiAobGlzdDEubGVuZ3RoID09PSAwIHx8IGxpc3QyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG5cbiAgICB2YXIgbWVyZ2VkO1xuXG4gICAgZm9yICh2YXIgaTEgPSAwOyBpMSA8IGxpc3QxLmxlbmd0aDsgaTErKykge1xuICAgICAgZm9yICh2YXIgaTIgPSAwOyBpMiA8IGxpc3QyLmxlbmd0aDsgaTIrKykge1xuICAgICAgICBtZXJnZWQgPSBtZXJnZU1hdGNoKGxpc3QxW2kxXSwgbGlzdDJbaTJdKTtcblxuICAgICAgICBpZiAobWVyZ2VkKSB7XG4gICAgICAgICAgcmVzLnB1c2gobWVyZ2VkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cbiAgLyoqXG4gICAqIENvbWJpbmUgbXVsdGlwbGUgbGlzdHMgb2YgbWF0Y2hlcyBieSBhcHBseWluZyBtZXJnZU1hdGNoIHRvIHRoZSBjYXJ0ZXNpYW4gcHJvZHVjdCBvZiB0d28gbGlzdHMgb2YgbWF0Y2hlcy5cbiAgICogRWFjaCBsaXN0IHJlcHJlc2VudHMgbWF0Y2hlcyBmb3VuZCBpbiBvbmUgY2hpbGQgb2YgYSBub2RlLlxuICAgKiBSZXR1cm5zIGEgbGlzdCBvZiB1bmlxdWUgbWF0Y2hlcy5cbiAgICovXG5cblxuICBmdW5jdGlvbiBtZXJnZUNoaWxkTWF0Y2hlcyhjaGlsZE1hdGNoZXMpIHtcbiAgICBpZiAoY2hpbGRNYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGNoaWxkTWF0Y2hlcztcbiAgICB9XG5cbiAgICB2YXIgc2V0cyA9IGNoaWxkTWF0Y2hlcy5yZWR1Y2UoY29tYmluZUNoaWxkTWF0Y2hlcyk7XG4gICAgdmFyIHVuaXF1ZVNldHMgPSBbXTtcbiAgICB2YXIgdW5pcXVlID0ge307XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNldHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzID0gSlNPTi5zdHJpbmdpZnkoc2V0c1tpXSk7XG5cbiAgICAgIGlmICghdW5pcXVlW3NdKSB7XG4gICAgICAgIHVuaXF1ZVtzXSA9IHRydWU7XG4gICAgICAgIHVuaXF1ZVNldHMucHVzaChzZXRzW2ldKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5pcXVlU2V0cztcbiAgfVxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIG5vZGUgbWF0Y2hlcyBydWxlLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbnN0YW50Tm9kZSB8IFN5bWJvbE5vZGUgfCBQYXJlbnRoZXNpc05vZGUgfCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGV9IHJ1bGVcbiAgICogQHBhcmFtIHtDb25zdGFudE5vZGUgfCBTeW1ib2xOb2RlIHwgUGFyZW50aGVzaXNOb2RlIHwgRnVuY3Rpb25Ob2RlIHwgT3BlcmF0b3JOb2RlfSBub2RlXG4gICAqIEByZXR1cm4ge09iamVjdH0gSW5mb3JtYXRpb24gYWJvdXQgdGhlIG1hdGNoLCBpZiBpdCBleGlzdHMuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3J1bGVNYXRjaChydWxlLCBub2RlLCBpc1NwbGl0KSB7XG4gICAgLy8gICAgY29uc29sZS5sb2coJ0VudGVyaW5nIF9ydWxlTWF0Y2goJyArIEpTT04uc3RyaW5naWZ5KHJ1bGUpICsgJywgJyArIEpTT04uc3RyaW5naWZ5KG5vZGUpICsgJyknKVxuICAgIC8vICAgIGNvbnNvbGUubG9nKCdydWxlID0gJyArIHJ1bGUpXG4gICAgLy8gICAgY29uc29sZS5sb2coJ25vZGUgPSAnICsgbm9kZSlcbiAgICAvLyAgICBjb25zb2xlLmxvZygnRW50ZXJpbmcgX3J1bGVNYXRjaCgnICsgcnVsZS50b1N0cmluZygpICsgJywgJyArIG5vZGUudG9TdHJpbmcoKSArICcpJylcbiAgICB2YXIgcmVzID0gW3tcbiAgICAgIHBsYWNlaG9sZGVyczoge31cbiAgICB9XTtcblxuICAgIGlmIChydWxlIGluc3RhbmNlb2YgT3BlcmF0b3JOb2RlICYmIG5vZGUgaW5zdGFuY2VvZiBPcGVyYXRvck5vZGUgfHwgcnVsZSBpbnN0YW5jZW9mIEZ1bmN0aW9uTm9kZSAmJiBub2RlIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlKSB7XG4gICAgICAvLyBJZiB0aGUgcnVsZSBpcyBhbiBPcGVyYXRvck5vZGUgb3IgYSBGdW5jdGlvbk5vZGUsIHRoZW4gbm9kZSBtdXN0IG1hdGNoIGV4YWN0bHlcbiAgICAgIGlmIChydWxlIGluc3RhbmNlb2YgT3BlcmF0b3JOb2RlKSB7XG4gICAgICAgIGlmIChydWxlLm9wICE9PSBub2RlLm9wIHx8IHJ1bGUuZm4gIT09IG5vZGUuZm4pIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocnVsZSBpbnN0YW5jZW9mIEZ1bmN0aW9uTm9kZSkge1xuICAgICAgICBpZiAocnVsZS5uYW1lICE9PSBub2RlLm5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH0gLy8gcnVsZSBhbmQgbm9kZSBtYXRjaC4gU2VhcmNoIHRoZSBjaGlsZHJlbiBvZiBydWxlIGFuZCBub2RlLlxuXG5cbiAgICAgIGlmIChub2RlLmFyZ3MubGVuZ3RoID09PSAxICYmIHJ1bGUuYXJncy5sZW5ndGggPT09IDEgfHwgIWlzQXNzb2NpYXRpdmUobm9kZSkgfHwgaXNTcGxpdCkge1xuICAgICAgICAvLyBFeHBlY3Qgbm9uLWFzc29jaWF0aXZlIG9wZXJhdG9ycyB0byBtYXRjaCBleGFjdGx5XG4gICAgICAgIHZhciBjaGlsZE1hdGNoZXMgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGUuYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBjaGlsZE1hdGNoID0gX3J1bGVNYXRjaChydWxlLmFyZ3NbaV0sIG5vZGUuYXJnc1tpXSk7XG5cbiAgICAgICAgICBpZiAoY2hpbGRNYXRjaC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIC8vIENoaWxkIGRpZCBub3QgbWF0Y2gsIHNvIHN0b3Agc2VhcmNoaW5nIGltbWVkaWF0ZWx5XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgfSAvLyBUaGUgY2hpbGQgbWF0Y2hlZCwgc28gYWRkIHRoZSBpbmZvcm1hdGlvbiByZXR1cm5lZCBmcm9tIHRoZSBjaGlsZCB0byBvdXIgcmVzdWx0XG5cblxuICAgICAgICAgIGNoaWxkTWF0Y2hlcy5wdXNoKGNoaWxkTWF0Y2gpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzID0gbWVyZ2VDaGlsZE1hdGNoZXMoY2hpbGRNYXRjaGVzKTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5hcmdzLmxlbmd0aCA+PSAyICYmIHJ1bGUuYXJncy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgLy8gbm9kZSBpcyBmbGF0dGVuZWQsIHJ1bGUgaXMgbm90XG4gICAgICAgIC8vIEFzc29jaWF0aXZlIG9wZXJhdG9ycy9mdW5jdGlvbnMgY2FuIGJlIHNwbGl0IGluIGRpZmZlcmVudCB3YXlzIHNvIHdlIGNoZWNrIGlmIHRoZSBydWxlIG1hdGNoZXMgZWFjaFxuICAgICAgICAvLyB0aGVtIGFuZCByZXR1cm4gdGhlaXIgdW5pb24uXG4gICAgICAgIHZhciBzcGxpdHMgPSBnZXRTcGxpdHMobm9kZSwgcnVsZS5jb250ZXh0KTtcbiAgICAgICAgdmFyIHNwbGl0TWF0Y2hlcyA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBzcGxpdHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgdmFyIG1hdGNoU2V0ID0gX3J1bGVNYXRjaChydWxlLCBzcGxpdHNbX2ldLCB0cnVlKTsgLy8gcmVjdXJzaW5nIGF0IHRoZSBzYW1lIHRyZWUgZGVwdGggaGVyZVxuXG5cbiAgICAgICAgICBzcGxpdE1hdGNoZXMgPSBzcGxpdE1hdGNoZXMuY29uY2F0KG1hdGNoU2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzcGxpdE1hdGNoZXM7XG4gICAgICB9IGVsc2UgaWYgKHJ1bGUuYXJncy5sZW5ndGggPiAyKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdVbmV4cGVjdGVkIG5vbi1iaW5hcnkgYXNzb2NpYXRpdmUgZnVuY3Rpb246ICcgKyBydWxlLnRvU3RyaW5nKCkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSW5jb3JyZWN0IG51bWJlciBvZiBhcmd1bWVudHMgaW4gcnVsZSBhbmQgbm9kZSwgc28gbm8gbWF0Y2hcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocnVsZSBpbnN0YW5jZW9mIFN5bWJvbE5vZGUpIHtcbiAgICAgIC8vIElmIHRoZSBydWxlIGlzIGEgU3ltYm9sTm9kZSwgdGhlbiBpdCBjYXJyaWVzIGEgc3BlY2lhbCBtZWFuaW5nXG4gICAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgc3ltYm9sIG5vZGUgbmFtZS5cbiAgICAgIC8vIGMuKiBtYXRjaGVzIGEgQ29uc3RhbnROb2RlXG4gICAgICAvLyBuLiogbWF0Y2hlcyBhbnkgbm9kZVxuICAgICAgaWYgKHJ1bGUubmFtZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTeW1ib2wgaW4gcnVsZSBoYXMgMCBsZW5ndGguLi4hPycpO1xuICAgICAgfVxuXG4gICAgICBpZiAoU1VQUE9SVEVEX0NPTlNUQU5UU1tydWxlLm5hbWVdKSB7XG4gICAgICAgIC8vIGJ1aWx0LWluIGNvbnN0YW50IG11c3QgbWF0Y2ggZXhhY3RseVxuICAgICAgICBpZiAocnVsZS5uYW1lICE9PSBub2RlLm5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocnVsZS5uYW1lWzBdID09PSAnbicgfHwgcnVsZS5uYW1lLnN1YnN0cmluZygwLCAyKSA9PT0gJ19wJykge1xuICAgICAgICAvLyBydWxlIG1hdGNoZXMgX2FueXRoaW5nXywgc28gYXNzaWduIHRoaXMgbm9kZSB0byB0aGUgcnVsZS5uYW1lIHBsYWNlaG9sZGVyXG4gICAgICAgIC8vIEFzc2lnbiBub2RlIHRvIHRoZSBydWxlLm5hbWUgcGxhY2Vob2xkZXIuXG4gICAgICAgIC8vIE91ciBwYXJlbnQgd2lsbCBjaGVjayBmb3IgbWF0Y2hlcyBhbW9uZyBwbGFjZWhvbGRlcnMuXG4gICAgICAgIHJlc1swXS5wbGFjZWhvbGRlcnNbcnVsZS5uYW1lXSA9IG5vZGU7XG4gICAgICB9IGVsc2UgaWYgKHJ1bGUubmFtZVswXSA9PT0gJ3YnKSB7XG4gICAgICAgIC8vIHJ1bGUgbWF0Y2hlcyBhbnkgdmFyaWFibGUgdGhpbmcgKG5vdCBhIENvbnN0YW50Tm9kZSlcbiAgICAgICAgaWYgKCEoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShub2RlKSkge1xuICAgICAgICAgIHJlc1swXS5wbGFjZWhvbGRlcnNbcnVsZS5uYW1lXSA9IG5vZGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gTWlzLW1hdGNoOiBydWxlIHdhcyBleHBlY3Rpbmcgc29tZXRoaW5nIG90aGVyIHRoYW4gYSBDb25zdGFudE5vZGVcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocnVsZS5uYW1lWzBdID09PSAnYycpIHtcbiAgICAgICAgLy8gcnVsZSBtYXRjaGVzIGFueSBDb25zdGFudE5vZGVcbiAgICAgICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBDb25zdGFudE5vZGUpIHtcbiAgICAgICAgICByZXNbMF0ucGxhY2Vob2xkZXJzW3J1bGUubmFtZV0gPSBub2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE1pcy1tYXRjaDogcnVsZSB3YXMgZXhwZWN0aW5nIGEgQ29uc3RhbnROb2RlXG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc3ltYm9sIGluIHJ1bGU6ICcgKyBydWxlLm5hbWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocnVsZSBpbnN0YW5jZW9mIENvbnN0YW50Tm9kZSkge1xuICAgICAgLy8gTGl0ZXJhbCBjb25zdGFudCBtdXN0IG1hdGNoIGV4YWN0bHlcbiAgICAgIGlmICghZXF1YWwocnVsZS52YWx1ZSwgbm9kZS52YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTb21lIG90aGVyIG5vZGUgd2FzIGVuY291bnRlcmVkIHdoaWNoIHdlIGFyZW4ndCBwcmVwYXJlZCBmb3IsIHNvIG5vIG1hdGNoXG4gICAgICByZXR1cm4gW107XG4gICAgfSAvLyBJdCdzIGEgbWF0Y2ghXG4gICAgLy8gY29uc29sZS5sb2coJ19ydWxlTWF0Y2goJyArIHJ1bGUudG9TdHJpbmcoKSArICcsICcgKyBub2RlLnRvU3RyaW5nKCkgKyAnKSBmb3VuZCBhIG1hdGNoJylcblxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICAvKipcbiAgICogRGV0ZXJtaW5lcyB3aGV0aGVyIHAgYW5kIHEgKGFuZCBhbGwgdGhlaXIgY2hpbGRyZW4gbm9kZXMpIGFyZSBpZGVudGljYWwuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29uc3RhbnROb2RlIHwgU3ltYm9sTm9kZSB8IFBhcmVudGhlc2lzTm9kZSB8IEZ1bmN0aW9uTm9kZSB8IE9wZXJhdG9yTm9kZX0gcFxuICAgKiBAcGFyYW0ge0NvbnN0YW50Tm9kZSB8IFN5bWJvbE5vZGUgfCBQYXJlbnRoZXNpc05vZGUgfCBGdW5jdGlvbk5vZGUgfCBPcGVyYXRvck5vZGV9IHFcbiAgICogQHJldHVybiB7T2JqZWN0fSBJbmZvcm1hdGlvbiBhYm91dCB0aGUgbWF0Y2gsIGlmIGl0IGV4aXN0cy5cbiAgICovXG5cblxuICBmdW5jdGlvbiBfZXhhY3RNYXRjaChwLCBxKSB7XG4gICAgaWYgKHAgaW5zdGFuY2VvZiBDb25zdGFudE5vZGUgJiYgcSBpbnN0YW5jZW9mIENvbnN0YW50Tm9kZSkge1xuICAgICAgaWYgKCFlcXVhbChwLnZhbHVlLCBxLnZhbHVlKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwIGluc3RhbmNlb2YgU3ltYm9sTm9kZSAmJiBxIGluc3RhbmNlb2YgU3ltYm9sTm9kZSkge1xuICAgICAgaWYgKHAubmFtZSAhPT0gcS5uYW1lKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHAgaW5zdGFuY2VvZiBPcGVyYXRvck5vZGUgJiYgcSBpbnN0YW5jZW9mIE9wZXJhdG9yTm9kZSB8fCBwIGluc3RhbmNlb2YgRnVuY3Rpb25Ob2RlICYmIHEgaW5zdGFuY2VvZiBGdW5jdGlvbk5vZGUpIHtcbiAgICAgIGlmIChwIGluc3RhbmNlb2YgT3BlcmF0b3JOb2RlKSB7XG4gICAgICAgIGlmIChwLm9wICE9PSBxLm9wIHx8IHAuZm4gIT09IHEuZm4pIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAocCBpbnN0YW5jZW9mIEZ1bmN0aW9uTm9kZSkge1xuICAgICAgICBpZiAocC5uYW1lICE9PSBxLm5hbWUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHAuYXJncy5sZW5ndGggIT09IHEuYXJncy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHAuYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIV9leGFjdE1hdGNoKHAuYXJnc1tpXSwgcS5hcmdzW2ldKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gc2ltcGxpZnk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2ltcGxpZnkgPSBjcmVhdGVTaW1wbGlmeTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmVzb2x2ZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3Jlc29sdmUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsncGFyc2UnLCAnRnVuY3Rpb25Ob2RlJywgJ09wZXJhdG9yTm9kZScsICdQYXJlbnRoZXNpc05vZGUnXTtcbnZhciBjcmVhdGVSZXNvbHZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHBhcnNlID0gX3JlZi5wYXJzZSxcbiAgICAgIEZ1bmN0aW9uTm9kZSA9IF9yZWYuRnVuY3Rpb25Ob2RlLFxuICAgICAgT3BlcmF0b3JOb2RlID0gX3JlZi5PcGVyYXRvck5vZGUsXG4gICAgICBQYXJlbnRoZXNpc05vZGUgPSBfcmVmLlBhcmVudGhlc2lzTm9kZTtcblxuICAvKipcbiAgICogcmVzb2x2ZShleHByLCBzY29wZSkgcmVwbGFjZXMgdmFyaWFibGUgbm9kZXMgd2l0aCB0aGVpciBzY29wZWQgdmFsdWVzXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIHNpbXBsaWZ5LnJlc29sdmUoZXhwciwgc2NvcGUpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5zaW1wbGlmeS5yZXNvbHZlKCd4ICsgeScsIHt4OjEsIHk6Mn0pICAgICAgICAgICAvLyBOb2RlIHsxICsgMn1cbiAgICogICAgIG1hdGguc2ltcGxpZnkucmVzb2x2ZShtYXRoLnBhcnNlKCd4K3knKSwge3g6MSwgeToyfSkgLy8gTm9kZSB7MSArIDJ9XG4gICAqICAgICBtYXRoLnNpbXBsaWZ5KCd4K3knLCB7eDoyLCB5Oid4K3gnfSkudG9TdHJpbmcoKSAgICAgIC8vIFwiNlwiXG4gICAqXG4gICAqIEBwYXJhbSB7Tm9kZX0gbm9kZVxuICAgKiAgICAgVGhlIGV4cHJlc3Npb24gdHJlZSB0byBiZSBzaW1wbGlmaWVkXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBzY29wZSB3aXRoIHZhcmlhYmxlcyB0byBiZSByZXNvbHZlZFxuICAgKi9cbiAgZnVuY3Rpb24gcmVzb2x2ZShub2RlLCBzY29wZSkge1xuICAgIGlmICghc2NvcGUpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2lzLmlzU3ltYm9sTm9kZSkobm9kZSkpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHNjb3BlW25vZGUubmFtZV07XG5cbiAgICAgIGlmICgoMCwgX2lzLmlzTm9kZSkodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKHZhbHVlLCBzY29wZSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIHBhcnNlKFN0cmluZyh2YWx1ZSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkobm9kZSkpIHtcbiAgICAgIHZhciBhcmdzID0gbm9kZS5hcmdzLm1hcChmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlKGFyZywgc2NvcGUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZShub2RlLm9wLCBub2RlLmZuLCBhcmdzLCBub2RlLmltcGxpY2l0KTtcbiAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNQYXJlbnRoZXNpc05vZGUpKG5vZGUpKSB7XG4gICAgICByZXR1cm4gbmV3IFBhcmVudGhlc2lzTm9kZShyZXNvbHZlKG5vZGUuY29udGVudCwgc2NvcGUpKTtcbiAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNGdW5jdGlvbk5vZGUpKG5vZGUpKSB7XG4gICAgICB2YXIgX2FyZ3MgPSBub2RlLmFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoYXJnLCBzY29wZSk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbk5vZGUobm9kZS5uYW1lLCBfYXJncyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gcmVzb2x2ZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZXNvbHZlID0gY3JlYXRlUmVzb2x2ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2ltcGxpZnlDb25zdGFudCA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfdXRpbCA9IHJlcXVpcmUoXCIuL3V0aWxcIik7XG5cbnZhciBfbm9vcCA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9ub29wXCIpO1xuXG4vLyBUT0RPIHRoaXMgY291bGQgYmUgaW1wcm92ZWQgYnkgc2ltcGxpZnlpbmcgc2VwZXJhdGVkIGNvbnN0YW50cyB1bmRlciBhc3NvY2lhdGl2ZSBhbmQgY29tbXV0YXRpdmUgb3BlcmF0b3JzXG52YXIgbmFtZSA9ICdzaW1wbGlmeUNvbnN0YW50JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtYXRoV2l0aFRyYW5zZm9ybScsICc/ZnJhY3Rpb24nLCAnP2JpZ251bWJlcicsICdDb25zdGFudE5vZGUnLCAnT3BlcmF0b3JOb2RlJywgJ0Z1bmN0aW9uTm9kZScsICdTeW1ib2xOb2RlJ107XG52YXIgY3JlYXRlU2ltcGxpZnlDb25zdGFudCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG1hdGhXaXRoVHJhbnNmb3JtID0gX3JlZi5tYXRoV2l0aFRyYW5zZm9ybSxcbiAgICAgIGZyYWN0aW9uID0gX3JlZi5mcmFjdGlvbixcbiAgICAgIGJpZ251bWJlciA9IF9yZWYuYmlnbnVtYmVyLFxuICAgICAgQ29uc3RhbnROb2RlID0gX3JlZi5Db25zdGFudE5vZGUsXG4gICAgICBPcGVyYXRvck5vZGUgPSBfcmVmLk9wZXJhdG9yTm9kZSxcbiAgICAgIEZ1bmN0aW9uTm9kZSA9IF9yZWYuRnVuY3Rpb25Ob2RlLFxuICAgICAgU3ltYm9sTm9kZSA9IF9yZWYuU3ltYm9sTm9kZTtcblxuICB2YXIgX2NyZWF0ZVV0aWwgPSAoMCwgX3V0aWwuY3JlYXRlVXRpbCkoe1xuICAgIEZ1bmN0aW9uTm9kZTogRnVuY3Rpb25Ob2RlLFxuICAgIE9wZXJhdG9yTm9kZTogT3BlcmF0b3JOb2RlLFxuICAgIFN5bWJvbE5vZGU6IFN5bWJvbE5vZGVcbiAgfSksXG4gICAgICBpc0NvbW11dGF0aXZlID0gX2NyZWF0ZVV0aWwuaXNDb21tdXRhdGl2ZSxcbiAgICAgIGlzQXNzb2NpYXRpdmUgPSBfY3JlYXRlVXRpbC5pc0Fzc29jaWF0aXZlLFxuICAgICAgYWxsQ2hpbGRyZW4gPSBfY3JlYXRlVXRpbC5hbGxDaGlsZHJlbixcbiAgICAgIGNyZWF0ZU1ha2VOb2RlRnVuY3Rpb24gPSBfY3JlYXRlVXRpbC5jcmVhdGVNYWtlTm9kZUZ1bmN0aW9uO1xuXG4gIGZ1bmN0aW9uIHNpbXBsaWZ5Q29uc3RhbnQoZXhwciwgb3B0aW9ucykge1xuICAgIHZhciByZXMgPSBmb2xkRnJhY3Rpb24oZXhwciwgb3B0aW9ucyk7XG4gICAgcmV0dXJuICgwLCBfaXMuaXNOb2RlKShyZXMpID8gcmVzIDogX3RvTm9kZShyZXMpO1xuICB9XG5cbiAgZnVuY3Rpb24gX2V2YWwoZm5uYW1lLCBhcmdzLCBvcHRpb25zKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBfdG9OdW1iZXIobWF0aFdpdGhUcmFuc2Zvcm1bZm5uYW1lXS5hcHBseShudWxsLCBhcmdzKSwgb3B0aW9ucyk7XG4gICAgfSBjYXRjaCAoaWdub3JlKSB7XG4gICAgICAvLyBzb21ldGltZXMgdGhlIGltcGxpY2l0IHR5cGUgY29udmVyc2lvbiBjYXVzZXMgdGhlIGV2YWx1YXRpb24gdG8gZmFpbCwgc28gd2UnbGwgdHJ5IGFnYWluIGFmdGVyIHJlbW92aW5nIEZyYWN0aW9uc1xuICAgICAgYXJncyA9IGFyZ3MubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIGlmICgoMCwgX2lzLmlzRnJhY3Rpb24pKHgpKSB7XG4gICAgICAgICAgcmV0dXJuIHgudmFsdWVPZigpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHg7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBfdG9OdW1iZXIobWF0aFdpdGhUcmFuc2Zvcm1bZm5uYW1lXS5hcHBseShudWxsLCBhcmdzKSwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIF90b05vZGUgPSB0eXBlZCh7XG4gICAgRnJhY3Rpb246IF9mcmFjdGlvblRvTm9kZSxcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcihuKSB7XG4gICAgICBpZiAobiA8IDApIHtcbiAgICAgICAgcmV0dXJuIHVuYXJ5TWludXNOb2RlKG5ldyBDb25zdGFudE5vZGUoLW4pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb25zdGFudE5vZGUobik7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcihuKSB7XG4gICAgICBpZiAobiA8IDApIHtcbiAgICAgICAgcmV0dXJuIHVuYXJ5TWludXNOb2RlKG5ldyBDb25zdGFudE5vZGUoLW4pKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb25zdGFudE5vZGUobik7IC8vIG9sZCBwYXJhbWV0ZXJzOiAobi50b1N0cmluZygpLCAnbnVtYmVyJylcbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgocykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29udmVydCBDb21wbGV4IG51bWJlciB0byBOb2RlJyk7XG4gICAgfVxuICB9KTsgLy8gY29udmVydCBhIG51bWJlciB0byBhIGZyYWN0aW9uIG9ubHkgaWYgaXQgY2FuIGJlIGV4cHJlc3NlZCBleGFjdGx5XG5cblxuICBmdW5jdGlvbiBfZXhhY3RGcmFjdGlvbihuLCBvcHRpb25zKSB7XG4gICAgdmFyIGV4YWN0RnJhY3Rpb25zID0gb3B0aW9ucyAmJiBvcHRpb25zLmV4YWN0RnJhY3Rpb25zICE9PSBmYWxzZTtcblxuICAgIGlmIChleGFjdEZyYWN0aW9ucyAmJiBpc0Zpbml0ZShuKSAmJiBmcmFjdGlvbikge1xuICAgICAgdmFyIGYgPSBmcmFjdGlvbihuKTtcblxuICAgICAgaWYgKGYudmFsdWVPZigpID09PSBuKSB7XG4gICAgICAgIHJldHVybiBmO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuO1xuICB9IC8vIENvbnZlcnQgbnVtYmVycyB0byBhIHByZWZlcnJlZCBudW1iZXIgdHlwZSBpbiBwcmVmZXJlbmNlIG9yZGVyOiBGcmFjdGlvbiwgbnVtYmVyLCBDb21wbGV4XG4gIC8vIEJpZ051bWJlcnMgYXJlIGxlZnQgYWxvbmVcblxuXG4gIHZhciBfdG9OdW1iZXIgPSB0eXBlZCh7XG4gICAgJ3N0cmluZywgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nT2JqZWN0KHMsIG9wdGlvbnMpIHtcbiAgICAgIGlmIChjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJykge1xuICAgICAgICBpZiAoYmlnbnVtYmVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAoMCwgX25vb3Aubm9CaWdudW1iZXIpKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYmlnbnVtYmVyKHMpO1xuICAgICAgfSBlbHNlIGlmIChjb25maWcubnVtYmVyID09PSAnRnJhY3Rpb24nKSB7XG4gICAgICAgIGlmIChmcmFjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgKDAsIF9ub29wLm5vRnJhY3Rpb24pKCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZnJhY3Rpb24ocyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgbiA9IHBhcnNlRmxvYXQocyk7XG4gICAgICAgIHJldHVybiBfZXhhY3RGcmFjdGlvbihuLCBvcHRpb25zKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdGcmFjdGlvbiwgT2JqZWN0JzogZnVuY3Rpb24gRnJhY3Rpb25PYmplY3Qocywgb3B0aW9ucykge1xuICAgICAgcmV0dXJuIHM7XG4gICAgfSxcbiAgICAvLyB3ZSBkb24ndCBuZWVkIG9wdGlvbnMgaGVyZVxuICAgICdCaWdOdW1iZXIsIE9iamVjdCc6IGZ1bmN0aW9uIEJpZ051bWJlck9iamVjdChzLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gcztcbiAgICB9LFxuICAgIC8vIHdlIGRvbid0IG5lZWQgb3B0aW9ucyBoZXJlXG4gICAgJ251bWJlciwgT2JqZWN0JzogZnVuY3Rpb24gbnVtYmVyT2JqZWN0KHMsIG9wdGlvbnMpIHtcbiAgICAgIHJldHVybiBfZXhhY3RGcmFjdGlvbihzLCBvcHRpb25zKTtcbiAgICB9LFxuICAgICdDb21wbGV4LCBPYmplY3QnOiBmdW5jdGlvbiBDb21wbGV4T2JqZWN0KHMsIG9wdGlvbnMpIHtcbiAgICAgIGlmIChzLmltICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBzO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX2V4YWN0RnJhY3Rpb24ocy5yZSwgb3B0aW9ucyk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiB1bmFyeU1pbnVzTm9kZShuKSB7XG4gICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUoJy0nLCAndW5hcnlNaW51cycsIFtuXSk7XG4gIH1cblxuICBmdW5jdGlvbiBfZnJhY3Rpb25Ub05vZGUoZikge1xuICAgIHZhciBuO1xuICAgIHZhciB2biA9IGYucyAqIGYubjtcblxuICAgIGlmICh2biA8IDApIHtcbiAgICAgIG4gPSBuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3VuYXJ5TWludXMnLCBbbmV3IENvbnN0YW50Tm9kZSgtdm4pXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG4gPSBuZXcgQ29uc3RhbnROb2RlKHZuKTtcbiAgICB9XG5cbiAgICBpZiAoZi5kID09PSAxKSB7XG4gICAgICByZXR1cm4gbjtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZSgnLycsICdkaXZpZGUnLCBbbiwgbmV3IENvbnN0YW50Tm9kZShmLmQpXSk7XG4gIH1cbiAgLypcbiAgICogQ3JlYXRlIGEgYmluYXJ5IHRyZWUgZnJvbSBhIGxpc3Qgb2YgRnJhY3Rpb25zIGFuZCBOb2Rlcy5cbiAgICogVHJpZXMgdG8gZm9sZCBGcmFjdGlvbnMgYnkgZXZhbHVhdGluZyB0aGVtIHVudGlsIHRoZSBmaXJzdCBOb2RlIGluIHRoZSBsaXN0IGlzIGhpdCwgc29cbiAgICogYGFyZ3NgIHNob3VsZCBiZSBzb3J0ZWQgdG8gaGF2ZSB0aGUgRnJhY3Rpb25zIGF0IHRoZSBzdGFydCAoaWYgdGhlIG9wZXJhdG9yIGlzIGNvbW11dGF0aXZlKS5cbiAgICogQHBhcmFtIGFyZ3MgLSBsaXN0IG9mIEZyYWN0aW9ucyBhbmQgTm9kZXNcbiAgICogQHBhcmFtIGZuIC0gZXZhbHVhdG9yIGZvciB0aGUgYmluYXJ5IG9wZXJhdGlvbiBldmFsdWF0b3IgdGhhdCBhY2NlcHRzIHR3byBGcmFjdGlvbnNcbiAgICogQHBhcmFtIG1ha2VOb2RlIC0gY3JlYXRlcyBhIGJpbmFyeSBPcGVyYXRvck5vZGUvRnVuY3Rpb25Ob2RlIGZyb20gYSBsaXN0IG9mIGNoaWxkIE5vZGVzXG4gICAqIGlmIGFyZ3MubGVuZ3RoIGlzIDEsIHJldHVybnMgYXJnc1swXVxuICAgKiBAcmV0dXJuIC0gRWl0aGVyIGEgTm9kZSByZXByZXNlbnRpbmcgYSBiaW5hcnkgZXhwcmVzc2lvbiBvciBGcmFjdGlvblxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGZvbGRPcChmbiwgYXJncywgbWFrZU5vZGUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gYXJncy5yZWR1Y2UoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIGlmICghKDAsIF9pcy5pc05vZGUpKGEpICYmICEoMCwgX2lzLmlzTm9kZSkoYikpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gX2V2YWwoZm4sIFthLCBiXSwgb3B0aW9ucyk7XG4gICAgICAgIH0gY2F0Y2ggKGlnbm9yZWFuZGNvbnRpbnVlKSB7fVxuXG4gICAgICAgIGEgPSBfdG9Ob2RlKGEpO1xuICAgICAgICBiID0gX3RvTm9kZShiKTtcbiAgICAgIH0gZWxzZSBpZiAoISgwLCBfaXMuaXNOb2RlKShhKSkge1xuICAgICAgICBhID0gX3RvTm9kZShhKTtcbiAgICAgIH0gZWxzZSBpZiAoISgwLCBfaXMuaXNOb2RlKShiKSkge1xuICAgICAgICBiID0gX3RvTm9kZShiKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1ha2VOb2RlKFthLCBiXSk7XG4gICAgfSk7XG4gIH0gLy8gZGVzdHJveXMgdGhlIG9yaWdpbmFsIG5vZGUgYW5kIHJldHVybnMgYSBmb2xkZWQgb25lXG5cblxuICBmdW5jdGlvbiBmb2xkRnJhY3Rpb24obm9kZSwgb3B0aW9ucykge1xuICAgIHN3aXRjaCAobm9kZS50eXBlKSB7XG4gICAgICBjYXNlICdTeW1ib2xOb2RlJzpcbiAgICAgICAgcmV0dXJuIG5vZGU7XG5cbiAgICAgIGNhc2UgJ0NvbnN0YW50Tm9kZSc6XG4gICAgICAgIGlmICh0eXBlb2Ygbm9kZS52YWx1ZSA9PT0gJ251bWJlcicgfHwgIWlzTmFOKG5vZGUudmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIF90b051bWJlcihub2RlLnZhbHVlLCBvcHRpb25zKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBub2RlO1xuXG4gICAgICBjYXNlICdGdW5jdGlvbk5vZGUnOlxuICAgICAgICBpZiAobWF0aFdpdGhUcmFuc2Zvcm1bbm9kZS5uYW1lXSAmJiBtYXRoV2l0aFRyYW5zZm9ybVtub2RlLm5hbWVdLnJhd0FyZ3MpIHtcbiAgICAgICAgICByZXR1cm4gbm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHtcbiAgICAgICAgICAvLyBQcm9jZXNzIG9wZXJhdG9ycyBhcyBPcGVyYXRvck5vZGVcbiAgICAgICAgICB2YXIgb3BlcmF0b3JGdW5jdGlvbnMgPSBbJ2FkZCcsICdtdWx0aXBseSddO1xuXG4gICAgICAgICAgaWYgKG9wZXJhdG9yRnVuY3Rpb25zLmluZGV4T2Yobm9kZS5uYW1lKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHZhciBhcmdzID0gbm9kZS5hcmdzLm1hcChmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmb2xkRnJhY3Rpb24oYXJnLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH0pOyAvLyBJZiBhbGwgYXJncyBhcmUgbnVtYmVyc1xuXG4gICAgICAgICAgICBpZiAoIWFyZ3Muc29tZShfaXMuaXNOb2RlKSkge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJldHVybiBfZXZhbChub2RlLm5hbWUsIGFyZ3MsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICB9IGNhdGNoIChpZ25vcmVhbmRjb250aW5lKSB7fVxuICAgICAgICAgICAgfSAvLyBDb252ZXJ0IGFsbCBhcmdzIHRvIG5vZGVzIGFuZCBjb25zdHJ1Y3QgYSBzeW1ib2xpYyBmdW5jdGlvbiBjYWxsXG5cblxuICAgICAgICAgICAgYXJncyA9IGFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuICgwLCBfaXMuaXNOb2RlKShhcmcpID8gYXJnIDogX3RvTm9kZShhcmcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uTm9kZShub2RlLm5hbWUsIGFyZ3MpO1xuICAgICAgICAgIH0gZWxzZSB7Ly8gdHJlYXQgYXMgb3BlcmF0b3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgICBjYXNlICdPcGVyYXRvck5vZGUnOlxuICAgICAgICB7XG4gICAgICAgICAgdmFyIGZuID0gbm9kZS5mbi50b1N0cmluZygpO1xuXG4gICAgICAgICAgdmFyIF9hcmdzO1xuXG4gICAgICAgICAgdmFyIHJlcztcbiAgICAgICAgICB2YXIgbWFrZU5vZGUgPSBjcmVhdGVNYWtlTm9kZUZ1bmN0aW9uKG5vZGUpO1xuXG4gICAgICAgICAgaWYgKCgwLCBfaXMuaXNPcGVyYXRvck5vZGUpKG5vZGUpICYmIG5vZGUuaXNVbmFyeSgpKSB7XG4gICAgICAgICAgICBfYXJncyA9IFtmb2xkRnJhY3Rpb24obm9kZS5hcmdzWzBdLCBvcHRpb25zKV07XG5cbiAgICAgICAgICAgIGlmICghKDAsIF9pcy5pc05vZGUpKF9hcmdzWzBdKSkge1xuICAgICAgICAgICAgICByZXMgPSBfZXZhbChmbiwgX2FyZ3MsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgcmVzID0gbWFrZU5vZGUoX2FyZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoaXNBc3NvY2lhdGl2ZShub2RlKSkge1xuICAgICAgICAgICAgX2FyZ3MgPSBhbGxDaGlsZHJlbihub2RlKTtcbiAgICAgICAgICAgIF9hcmdzID0gX2FyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZvbGRGcmFjdGlvbihhcmcsIG9wdGlvbnMpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChpc0NvbW11dGF0aXZlKGZuKSkge1xuICAgICAgICAgICAgICAvLyBjb21tdXRhdGl2ZSBiaW5hcnkgb3BlcmF0b3JcbiAgICAgICAgICAgICAgdmFyIGNvbnN0cyA9IFtdO1xuICAgICAgICAgICAgICB2YXIgdmFycyA9IFtdO1xuXG4gICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgX2FyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoISgwLCBfaXMuaXNOb2RlKShfYXJnc1tpXSkpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0cy5wdXNoKF9hcmdzW2ldKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdmFycy5wdXNoKF9hcmdzW2ldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoY29uc3RzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICByZXMgPSBmb2xkT3AoZm4sIGNvbnN0cywgbWFrZU5vZGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHZhcnMudW5zaGlmdChyZXMpO1xuICAgICAgICAgICAgICAgIHJlcyA9IGZvbGRPcChmbiwgdmFycywgbWFrZU5vZGUsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHdlIHdvbid0IGNoYW5nZSB0aGUgY2hpbGRyZW4gb3JkZXIgc2luY2UgaXQncyBub3QgbmVjY2Vzc2FyeVxuICAgICAgICAgICAgICAgIHJlcyA9IGZvbGRPcChmbiwgX2FyZ3MsIG1ha2VOb2RlLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gbm9uLWNvbW11dGF0aXZlIGJpbmFyeSBvcGVyYXRvclxuICAgICAgICAgICAgICByZXMgPSBmb2xkT3AoZm4sIF9hcmdzLCBtYWtlTm9kZSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIG5vbi1hc3NvY2lhdGl2ZSBiaW5hcnkgb3BlcmF0b3JcbiAgICAgICAgICAgIF9hcmdzID0gbm9kZS5hcmdzLm1hcChmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmb2xkRnJhY3Rpb24oYXJnLCBvcHRpb25zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmVzID0gZm9sZE9wKGZuLCBfYXJncywgbWFrZU5vZGUsIG9wdGlvbnMpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnUGFyZW50aGVzaXNOb2RlJzpcbiAgICAgICAgLy8gcmVtb3ZlIHRoZSB1bmVjY2Vzc2FyeSBwYXJlbnRoZXNpc1xuICAgICAgICByZXR1cm4gZm9sZEZyYWN0aW9uKG5vZGUuY29udGVudCwgb3B0aW9ucyk7XG5cbiAgICAgIGNhc2UgJ0FjY2Vzc29yTm9kZSc6XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICAgIGNhc2UgJ0FycmF5Tm9kZSc6XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICAgIGNhc2UgJ0Fzc2lnbm1lbnROb2RlJzpcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgICAgY2FzZSAnQmxvY2tOb2RlJzpcbiAgICAgIC8qIGZhbGxzIHRocm91Z2ggKi9cblxuICAgICAgY2FzZSAnRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSc6XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICAgIGNhc2UgJ0luZGV4Tm9kZSc6XG4gICAgICAvKiBmYWxscyB0aHJvdWdoICovXG5cbiAgICAgIGNhc2UgJ09iamVjdE5vZGUnOlxuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgICBjYXNlICdSYW5nZU5vZGUnOlxuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgICBjYXNlICdDb25kaXRpb25hbE5vZGUnOlxuICAgICAgLyogZmFsbHMgdGhyb3VnaCAqL1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbmltcGxlbWVudGVkIG5vZGUgdHlwZSBpbiBzaW1wbGlmeUNvbnN0YW50OiBcIi5jb25jYXQobm9kZS50eXBlKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHNpbXBsaWZ5Q29uc3RhbnQ7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2ltcGxpZnlDb25zdGFudCA9IGNyZWF0ZVNpbXBsaWZ5Q29uc3RhbnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNpbXBsaWZ5Q29yZSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3NpbXBsaWZ5Q29yZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydlcXVhbCcsICdpc1plcm8nLCAnYWRkJywgJ3N1YnRyYWN0JywgJ211bHRpcGx5JywgJ2RpdmlkZScsICdwb3cnLCAnQ29uc3RhbnROb2RlJywgJ09wZXJhdG9yTm9kZScsICdGdW5jdGlvbk5vZGUnLCAnUGFyZW50aGVzaXNOb2RlJ107XG52YXIgY3JlYXRlU2ltcGxpZnlDb3JlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGVxdWFsID0gX3JlZi5lcXVhbCxcbiAgICAgIGlzWmVybyA9IF9yZWYuaXNaZXJvLFxuICAgICAgYWRkID0gX3JlZi5hZGQsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICBkaXZpZGUgPSBfcmVmLmRpdmlkZSxcbiAgICAgIHBvdyA9IF9yZWYucG93LFxuICAgICAgQ29uc3RhbnROb2RlID0gX3JlZi5Db25zdGFudE5vZGUsXG4gICAgICBPcGVyYXRvck5vZGUgPSBfcmVmLk9wZXJhdG9yTm9kZSxcbiAgICAgIEZ1bmN0aW9uTm9kZSA9IF9yZWYuRnVuY3Rpb25Ob2RlLFxuICAgICAgUGFyZW50aGVzaXNOb2RlID0gX3JlZi5QYXJlbnRoZXNpc05vZGU7XG4gIHZhciBub2RlMCA9IG5ldyBDb25zdGFudE5vZGUoMCk7XG4gIHZhciBub2RlMSA9IG5ldyBDb25zdGFudE5vZGUoMSk7XG4gIC8qKlxuICAgKiBzaW1wbGlmeUNvcmUoKSBwZXJmb3JtcyBzaW5nbGUgcGFzcyBzaW1wbGlmaWNhdGlvbiBzdWl0YWJsZSBmb3JcbiAgICogYXBwbGljYXRpb25zIHJlcXVpcmluZyB1bHRpbWF0ZSBwZXJmb3JtYW5jZS4gSW4gY29udHJhc3QsIHNpbXBsaWZ5KClcbiAgICogZXh0ZW5kcyBzaW1wbGlmeUNvcmUoKSB3aXRoIGFkZGl0aW9uYWwgcGFzc2VzIHRvIHByb3ZpZGUgZGVlcGVyXG4gICAqIHNpbXBsaWZpY2F0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBzaW1wbGlmeS5zaW1wbGlmeUNvcmUoZXhwcilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBjb25zdCBmID0gbWF0aC5wYXJzZSgnMiAqIDEgKiB4IF4gKDIgLSAxKScpXG4gICAqICAgICBtYXRoLnNpbXBsaWZ5LnNpbXBpZnlDb3JlKGYpICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOb2RlIHsyICogeH1cbiAgICogICAgIG1hdGguc2ltcGxpZnkoJzIgKiAxICogeCBeICgyIC0gMSknLCBbbWF0aC5zaW1wbGlmeS5zaW1waWZ5Q29yZV0pIC8vIE5vZGUgezIgKiB4fVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIGRlcml2YXRpdmVcbiAgICpcbiAgICogQHBhcmFtIHtOb2RlfSBub2RlXG4gICAqICAgICBUaGUgZXhwcmVzc2lvbiB0byBiZSBzaW1wbGlmaWVkXG4gICAqL1xuXG4gIGZ1bmN0aW9uIHNpbXBsaWZ5Q29yZShub2RlKSB7XG4gICAgaWYgKCgwLCBfaXMuaXNPcGVyYXRvck5vZGUpKG5vZGUpICYmIG5vZGUuaXNVbmFyeSgpKSB7XG4gICAgICB2YXIgYTAgPSBzaW1wbGlmeUNvcmUobm9kZS5hcmdzWzBdKTtcblxuICAgICAgaWYgKG5vZGUub3AgPT09ICcrJykge1xuICAgICAgICAvLyB1bmFyeSBwbHVzXG4gICAgICAgIHJldHVybiBhMDtcbiAgICAgIH1cblxuICAgICAgaWYgKG5vZGUub3AgPT09ICctJykge1xuICAgICAgICAvLyB1bmFyeSBtaW51c1xuICAgICAgICBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkoYTApKSB7XG4gICAgICAgICAgaWYgKGEwLmlzVW5hcnkoKSAmJiBhMC5vcCA9PT0gJy0nKSB7XG4gICAgICAgICAgICByZXR1cm4gYTAuYXJnc1swXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGEwLmlzQmluYXJ5KCkgJiYgYTAuZm4gPT09ICdzdWJ0cmFjdCcpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3N1YnRyYWN0JywgW2EwLmFyZ3NbMV0sIGEwLmFyZ3NbMF1dKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZShub2RlLm9wLCBub2RlLmZuLCBbYTBdKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNPcGVyYXRvck5vZGUpKG5vZGUpICYmIG5vZGUuaXNCaW5hcnkoKSkge1xuICAgICAgdmFyIF9hID0gc2ltcGxpZnlDb3JlKG5vZGUuYXJnc1swXSk7XG5cbiAgICAgIHZhciBhMSA9IHNpbXBsaWZ5Q29yZShub2RlLmFyZ3NbMV0pO1xuXG4gICAgICBpZiAobm9kZS5vcCA9PT0gJysnKSB7XG4gICAgICAgIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShfYSkpIHtcbiAgICAgICAgICBpZiAoaXNaZXJvKF9hLnZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIGExO1xuICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTEpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbnN0YW50Tm9kZShhZGQoX2EudmFsdWUsIGExLnZhbHVlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNDb25zdGFudE5vZGUpKGExKSAmJiBpc1plcm8oYTEudmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIF9hO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNPcGVyYXRvck5vZGUpKGExKSAmJiBhMS5pc1VuYXJ5KCkgJiYgYTEub3AgPT09ICctJykge1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKCctJywgJ3N1YnRyYWN0JywgW19hLCBhMS5hcmdzWzBdXSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZShub2RlLm9wLCBub2RlLmZuLCBhMSA/IFtfYSwgYTFdIDogW19hXSk7XG4gICAgICB9IGVsc2UgaWYgKG5vZGUub3AgPT09ICctJykge1xuICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoX2EpICYmIGExKSB7XG4gICAgICAgICAgaWYgKCgwLCBfaXMuaXNDb25zdGFudE5vZGUpKGExKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25zdGFudE5vZGUoc3VidHJhY3QoX2EudmFsdWUsIGExLnZhbHVlKSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChpc1plcm8oX2EudmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZSgnLScsICd1bmFyeU1pbnVzJywgW2ExXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIGlmIChub2RlLmZuID09PSBcInN1YnRyYWN0XCIgJiYgbm9kZS5hcmdzLmxlbmd0aCA9PT0gMikge1xuXG5cbiAgICAgICAgaWYgKG5vZGUuZm4gPT09ICdzdWJ0cmFjdCcpIHtcbiAgICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTEpICYmIGlzWmVybyhhMS52YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBfYTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkoYTEpICYmIGExLmlzVW5hcnkoKSAmJiBhMS5vcCA9PT0gJy0nKSB7XG4gICAgICAgICAgICByZXR1cm4gc2ltcGxpZnlDb3JlKG5ldyBPcGVyYXRvck5vZGUoJysnLCAnYWRkJywgW19hLCBhMS5hcmdzWzBdXSkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFtfYSwgYTFdKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChub2RlLm9wID09PSAnKicpIHtcbiAgICAgICAgaWYgKCgwLCBfaXMuaXNDb25zdGFudE5vZGUpKF9hKSkge1xuICAgICAgICAgIGlmIChpc1plcm8oX2EudmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTA7XG4gICAgICAgICAgfSBlbHNlIGlmIChlcXVhbChfYS52YWx1ZSwgMSkpIHtcbiAgICAgICAgICAgIHJldHVybiBhMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNDb25zdGFudE5vZGUpKGExKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25zdGFudE5vZGUobXVsdGlwbHkoX2EudmFsdWUsIGExLnZhbHVlKSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNDb25zdGFudE5vZGUpKGExKSkge1xuICAgICAgICAgIGlmIChpc1plcm8oYTEudmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbm9kZTA7XG4gICAgICAgICAgfSBlbHNlIGlmIChlcXVhbChhMS52YWx1ZSwgMSkpIHtcbiAgICAgICAgICAgIHJldHVybiBfYTtcbiAgICAgICAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNPcGVyYXRvck5vZGUpKF9hKSAmJiBfYS5pc0JpbmFyeSgpICYmIF9hLm9wID09PSBub2RlLm9wKSB7XG4gICAgICAgICAgICB2YXIgYTAwID0gX2EuYXJnc1swXTtcblxuICAgICAgICAgICAgaWYgKCgwLCBfaXMuaXNDb25zdGFudE5vZGUpKGEwMCkpIHtcbiAgICAgICAgICAgICAgdmFyIGEwMGExID0gbmV3IENvbnN0YW50Tm9kZShtdWx0aXBseShhMDAudmFsdWUsIGExLnZhbHVlKSk7XG4gICAgICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFthMDBhMSwgX2EuYXJnc1sxXV0sIG5vZGUuaW1wbGljaXQpOyAvLyBjb25zdGFudHMgb24gbGVmdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFthMSwgX2FdLCBub2RlLmltcGxpY2l0KTsgLy8gY29uc3RhbnRzIG9uIGxlZnRcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIFtfYSwgYTFdLCBub2RlLmltcGxpY2l0KTtcbiAgICAgIH0gZWxzZSBpZiAobm9kZS5vcCA9PT0gJy8nKSB7XG4gICAgICAgIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShfYSkpIHtcbiAgICAgICAgICBpZiAoaXNaZXJvKF9hLnZhbHVlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUwO1xuICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTEpICYmIChlcXVhbChhMS52YWx1ZSwgMSkgfHwgZXF1YWwoYTEudmFsdWUsIDIpIHx8IGVxdWFsKGExLnZhbHVlLCA0KSkpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29uc3RhbnROb2RlKGRpdmlkZShfYS52YWx1ZSwgYTEudmFsdWUpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZShub2RlLm9wLCBub2RlLmZuLCBbX2EsIGExXSk7XG4gICAgICB9IGVsc2UgaWYgKG5vZGUub3AgPT09ICdeJykge1xuICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoYTEpKSB7XG4gICAgICAgICAgaWYgKGlzWmVybyhhMS52YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBub2RlMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGVxdWFsKGExLnZhbHVlLCAxKSkge1xuICAgICAgICAgICAgcmV0dXJuIF9hO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoKDAsIF9pcy5pc0NvbnN0YW50Tm9kZSkoX2EpKSB7XG4gICAgICAgICAgICAgIC8vIGZvbGQgY29uc3RhbnRcbiAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb25zdGFudE5vZGUocG93KF9hLnZhbHVlLCBhMS52YWx1ZSkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShfYSkgJiYgX2EuaXNCaW5hcnkoKSAmJiBfYS5vcCA9PT0gJ14nKSB7XG4gICAgICAgICAgICAgIHZhciBhMDEgPSBfYS5hcmdzWzFdO1xuXG4gICAgICAgICAgICAgIGlmICgoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShhMDEpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPcGVyYXRvck5vZGUobm9kZS5vcCwgbm9kZS5mbiwgW19hLmFyZ3NbMF0sIG5ldyBDb25zdGFudE5vZGUobXVsdGlwbHkoYTAxLnZhbHVlLCBhMS52YWx1ZSkpXSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3IE9wZXJhdG9yTm9kZShub2RlLm9wLCBub2RlLmZuLCBbX2EsIGExXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzUGFyZW50aGVzaXNOb2RlKShub2RlKSkge1xuICAgICAgdmFyIGMgPSBzaW1wbGlmeUNvcmUobm9kZS5jb250ZW50KTtcblxuICAgICAgaWYgKCgwLCBfaXMuaXNQYXJlbnRoZXNpc05vZGUpKGMpIHx8ICgwLCBfaXMuaXNTeW1ib2xOb2RlKShjKSB8fCAoMCwgX2lzLmlzQ29uc3RhbnROb2RlKShjKSkge1xuICAgICAgICByZXR1cm4gYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBQYXJlbnRoZXNpc05vZGUoYyk7XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzRnVuY3Rpb25Ob2RlKShub2RlKSkge1xuICAgICAgdmFyIGFyZ3MgPSBub2RlLmFyZ3MubWFwKHNpbXBsaWZ5Q29yZSkubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfaXMuaXNQYXJlbnRoZXNpc05vZGUpKGFyZykgPyBhcmcuY29udGVudCA6IGFyZztcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbk5vZGUoc2ltcGxpZnlDb3JlKG5vZGUuZm4pLCBhcmdzKTtcbiAgICB9IGVsc2Ugey8vIGNhbm5vdCBzaW1wbGlmeVxuICAgIH1cblxuICAgIHJldHVybiBub2RlO1xuICB9XG5cbiAgcmV0dXJuIHNpbXBsaWZ5Q29yZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTaW1wbGlmeUNvcmUgPSBjcmVhdGVTaW1wbGlmeUNvcmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVV0aWwgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBuYW1lID0gJ3NpbXBsaWZ5VXRpbCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydGdW5jdGlvbk5vZGUnLCAnT3BlcmF0b3JOb2RlJywgJ1N5bWJvbE5vZGUnXTtcbnZhciBjcmVhdGVVdGlsID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIEZ1bmN0aW9uTm9kZSA9IF9yZWYuRnVuY3Rpb25Ob2RlLFxuICAgICAgT3BlcmF0b3JOb2RlID0gX3JlZi5PcGVyYXRvck5vZGUsXG4gICAgICBTeW1ib2xOb2RlID0gX3JlZi5TeW1ib2xOb2RlO1xuICAvLyBUT0RPIGNvbW11dGF0aXZlL2Fzc29jaWF0aXZlIHByb3BlcnRpZXMgcmVseSBvbiB0aGUgYXJndW1lbnRzXG4gIC8vIGUuZy4gbXVsdGlwbHkgaXMgbm90IGNvbW11dGF0aXZlIGZvciBtYXRyaWNlc1xuICAvLyBUaGUgcHJvcGVydGllcyBzaG91bGQgYmUgY2FsY3VsYXRlZCBmcm9tIGFuIGFyZ3VtZW50IHRvIHNpbXBsaWZ5LCBvciBwb3NzaWJseSBzb21ldGhpbmcgaW4gbWF0aC5jb25maWdcbiAgLy8gdGhlIG90aGVyIG9wdGlvbiBpcyBmb3IgdHlwZWQoKSB0byBzcGVjaWZ5IGEgcmV0dXJuIHR5cGUgc28gdGhhdCB3ZSBjYW4gZXZhbHVhdGUgdGhlIHR5cGUgb2YgYXJndW1lbnRzXG4gIHZhciBjb21tdXRhdGl2ZSA9IHtcbiAgICBhZGQ6IHRydWUsXG4gICAgbXVsdGlwbHk6IHRydWVcbiAgfTtcbiAgdmFyIGFzc29jaWF0aXZlID0ge1xuICAgIGFkZDogdHJ1ZSxcbiAgICBtdWx0aXBseTogdHJ1ZVxuICB9O1xuXG4gIGZ1bmN0aW9uIGlzQ29tbXV0YXRpdmUobm9kZSwgY29udGV4dCkge1xuICAgIGlmICghKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkobm9kZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHZhciBuYW1lID0gbm9kZS5mbi50b1N0cmluZygpO1xuXG4gICAgaWYgKGNvbnRleHQgJiYgKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKGNvbnRleHQsIG5hbWUpICYmICgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShjb250ZXh0W25hbWVdLCAnY29tbXV0YXRpdmUnKSkge1xuICAgICAgcmV0dXJuIGNvbnRleHRbbmFtZV0uY29tbXV0YXRpdmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbW11dGF0aXZlW25hbWVdIHx8IGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gaXNBc3NvY2lhdGl2ZShub2RlLCBjb250ZXh0KSB7XG4gICAgaWYgKCEoMCwgX2lzLmlzT3BlcmF0b3JOb2RlKShub2RlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHZhciBuYW1lID0gbm9kZS5mbi50b1N0cmluZygpO1xuXG4gICAgaWYgKGNvbnRleHQgJiYgKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKGNvbnRleHQsIG5hbWUpICYmICgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShjb250ZXh0W25hbWVdLCAnYXNzb2NpYXRpdmUnKSkge1xuICAgICAgcmV0dXJuIGNvbnRleHRbbmFtZV0uYXNzb2NpYXRpdmU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFzc29jaWF0aXZlW25hbWVdIHx8IGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBGbGF0dGVuIGFsbCBhc3NvY2lhdGl2ZSBvcGVyYXRvcnMgaW4gYW4gZXhwcmVzc2lvbiB0cmVlLlxuICAgKiBBc3N1bWVzIHBhcmVudGhlc2VzIGhhdmUgYWxyZWFkeSBiZWVuIHJlbW92ZWQuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZmxhdHRlbihub2RlKSB7XG4gICAgaWYgKCFub2RlLmFyZ3MgfHwgbm9kZS5hcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfVxuXG4gICAgbm9kZS5hcmdzID0gYWxsQ2hpbGRyZW4obm9kZSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUuYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgZmxhdHRlbihub2RlLmFyZ3NbaV0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBjaGlsZHJlbiBvZiBhIG5vZGUgYXMgaWYgaXQgaGFzIGJlZW4gZmxhdHRlbmVkLlxuICAgKiBUT0RPIGltcGxlbWVudCBmb3IgRnVuY3Rpb25Ob2Rlc1xuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGFsbENoaWxkcmVuKG5vZGUpIHtcbiAgICB2YXIgb3A7XG4gICAgdmFyIGNoaWxkcmVuID0gW107XG5cbiAgICB2YXIgZmluZENoaWxkcmVuID0gZnVuY3Rpb24gZmluZENoaWxkcmVuKG5vZGUpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZS5hcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGlsZCA9IG5vZGUuYXJnc1tpXTtcblxuICAgICAgICBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkoY2hpbGQpICYmIG9wID09PSBjaGlsZC5vcCkge1xuICAgICAgICAgIGZpbmRDaGlsZHJlbihjaGlsZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKGlzQXNzb2NpYXRpdmUobm9kZSkpIHtcbiAgICAgIG9wID0gbm9kZS5vcDtcbiAgICAgIGZpbmRDaGlsZHJlbihub2RlKTtcbiAgICAgIHJldHVybiBjaGlsZHJlbjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5vZGUuYXJncztcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqICBVbmZsYXR0ZW4gYWxsIGZsYXR0ZW5lZCBvcGVyYXRvcnMgdG8gYSByaWdodC1oZWF2eSBiaW5hcnkgdHJlZS5cbiAgICovXG5cblxuICBmdW5jdGlvbiB1bmZsYXR0ZW5yKG5vZGUpIHtcbiAgICBpZiAoIW5vZGUuYXJncyB8fCBub2RlLmFyZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFyIG1ha2VOb2RlID0gY3JlYXRlTWFrZU5vZGVGdW5jdGlvbihub2RlKTtcbiAgICB2YXIgbCA9IG5vZGUuYXJncy5sZW5ndGg7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgdW5mbGF0dGVucihub2RlLmFyZ3NbaV0pO1xuICAgIH1cblxuICAgIGlmIChsID4gMiAmJiBpc0Fzc29jaWF0aXZlKG5vZGUpKSB7XG4gICAgICB2YXIgY3Vybm9kZSA9IG5vZGUuYXJncy5wb3AoKTtcblxuICAgICAgd2hpbGUgKG5vZGUuYXJncy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGN1cm5vZGUgPSBtYWtlTm9kZShbbm9kZS5hcmdzLnBvcCgpLCBjdXJub2RlXSk7XG4gICAgICB9XG5cbiAgICAgIG5vZGUuYXJncyA9IGN1cm5vZGUuYXJncztcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqICBVbmZsYXR0ZW4gYWxsIGZsYXR0ZW5lZCBvcGVyYXRvcnMgdG8gYSBsZWZ0LWhlYXZ5IGJpbmFyeSB0cmVlLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIHVuZmxhdHRlbmwobm9kZSkge1xuICAgIGlmICghbm9kZS5hcmdzIHx8IG5vZGUuYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbWFrZU5vZGUgPSBjcmVhdGVNYWtlTm9kZUZ1bmN0aW9uKG5vZGUpO1xuICAgIHZhciBsID0gbm9kZS5hcmdzLmxlbmd0aDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbDsgaSsrKSB7XG4gICAgICB1bmZsYXR0ZW5sKG5vZGUuYXJnc1tpXSk7XG4gICAgfVxuXG4gICAgaWYgKGwgPiAyICYmIGlzQXNzb2NpYXRpdmUobm9kZSkpIHtcbiAgICAgIHZhciBjdXJub2RlID0gbm9kZS5hcmdzLnNoaWZ0KCk7XG5cbiAgICAgIHdoaWxlIChub2RlLmFyZ3MubGVuZ3RoID4gMCkge1xuICAgICAgICBjdXJub2RlID0gbWFrZU5vZGUoW2N1cm5vZGUsIG5vZGUuYXJncy5zaGlmdCgpXSk7XG4gICAgICB9XG5cbiAgICAgIG5vZGUuYXJncyA9IGN1cm5vZGUuYXJncztcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVNYWtlTm9kZUZ1bmN0aW9uKG5vZGUpIHtcbiAgICBpZiAoKDAsIF9pcy5pc09wZXJhdG9yTm9kZSkobm9kZSkpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoYXJncykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiBuZXcgT3BlcmF0b3JOb2RlKG5vZGUub3AsIG5vZGUuZm4sIGFyZ3MsIG5vZGUuaW1wbGljaXQpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbk5vZGUobmV3IFN5bWJvbE5vZGUobm9kZS5uYW1lKSwgYXJncyk7XG4gICAgICB9O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgY3JlYXRlTWFrZU5vZGVGdW5jdGlvbjogY3JlYXRlTWFrZU5vZGVGdW5jdGlvbixcbiAgICBpc0NvbW11dGF0aXZlOiBpc0NvbW11dGF0aXZlLFxuICAgIGlzQXNzb2NpYXRpdmU6IGlzQXNzb2NpYXRpdmUsXG4gICAgZmxhdHRlbjogZmxhdHRlbixcbiAgICBhbGxDaGlsZHJlbjogYWxsQ2hpbGRyZW4sXG4gICAgdW5mbGF0dGVucjogdW5mbGF0dGVucixcbiAgICB1bmZsYXR0ZW5sOiB1bmZsYXR0ZW5sXG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlVXRpbCA9IGNyZWF0ZVV0aWw7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUxzb2x2ZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfc29sdmVWYWxpZGF0aW9uID0gcmVxdWlyZShcIi4vdXRpbHMvc29sdmVWYWxpZGF0aW9uXCIpO1xuXG52YXIgbmFtZSA9ICdsc29sdmUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2RpdmlkZVNjYWxhcicsICdtdWx0aXBseVNjYWxhcicsICdzdWJ0cmFjdCcsICdlcXVhbFNjYWxhcicsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZUxzb2x2ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgc29sdmVWYWxpZGF0aW9uID0gKDAsIF9zb2x2ZVZhbGlkYXRpb24uY3JlYXRlU29sdmVWYWxpZGF0aW9uKSh7XG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICAvKipcbiAgICogU29sdmVzIHRoZSBsaW5lYXIgZXF1YXRpb24gc3lzdGVtIGJ5IGZvcndhcmRzIHN1YnN0aXR1dGlvbi4gTWF0cml4IG11c3QgYmUgYSBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeC5cbiAgICpcbiAgICogYEwgKiB4ID0gYmBcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmxzb2x2ZShMLCBiKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgYSA9IFtbLTIsIDNdLCBbMiwgMV1dXG4gICAqICAgIGNvbnN0IGIgPSBbMTEsIDldXG4gICAqICAgIGNvbnN0IHggPSBsc29sdmUoYSwgYikgIC8vIFtbLTUuNV0sIFsyMF1dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBsdXAsIHNsdSwgdXNvbHZlLCBsdXNvbHZlXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4LCBBcnJheX0gTCAgICAgICBBIE4geCBOIG1hdHJpeCBvciBhcnJheSAoTClcbiAgICogQHBhcmFtIHtNYXRyaXgsIEFycmF5fSBiICAgICAgIEEgY29sdW1uIHZlY3RvciB3aXRoIHRoZSBiIHZhbHVlc1xuICAgKlxuICAgKiBAcmV0dXJuIHtEZW5zZU1hdHJpeCB8IEFycmF5fSAgQSBjb2x1bW4gdmVjdG9yIHdpdGggdGhlIGxpbmVhciBzeXN0ZW0gc29sdXRpb24gKHgpXG4gICAqL1xuXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ1NwYXJzZU1hdHJpeCwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBcnJheU1hdHJpeChtLCBiKSB7XG4gICAgICAvLyBwcm9jZXNzIG1hdHJpeFxuICAgICAgcmV0dXJuIF9zcGFyc2VGb3J3YXJkU3Vic3RpdHV0aW9uKG0sIGIpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QXJyYXlNYXRyaXgobSwgYikge1xuICAgICAgLy8gcHJvY2VzcyBtYXRyaXhcbiAgICAgIHJldHVybiBfZGVuc2VGb3J3YXJkU3Vic3RpdHV0aW9uKG0sIGIpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5QXJyYXlNYXRyaXgoYSwgYikge1xuICAgICAgLy8gY3JlYXRlIGRlbnNlIG1hdHJpeCBmcm9tIGFycmF5XG4gICAgICB2YXIgbSA9IG1hdHJpeChhKTsgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuXG4gICAgICB2YXIgciA9IF9kZW5zZUZvcndhcmRTdWJzdGl0dXRpb24obSwgYik7IC8vIHJlc3VsdFxuXG5cbiAgICAgIHJldHVybiByLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9kZW5zZUZvcndhcmRTdWJzdGl0dXRpb24obSwgYikge1xuICAgIC8vIHZhbGlkYXRlIG1hdHJpeCBhbmQgdmVjdG9yLCByZXR1cm4gY29weSBvZiBjb2x1bW4gdmVjdG9yIGJcbiAgICBiID0gc29sdmVWYWxpZGF0aW9uKG0sIGIsIHRydWUpOyAvLyBjb2x1bW4gdmVjdG9yIGRhdGFcblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgcm93cyA9IG0uX3NpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBtLl9zaXplWzFdOyAvLyByZXN1bHRcblxuICAgIHZhciB4ID0gW107IC8vIGRhdGFcblxuICAgIHZhciBkYXRhID0gbS5fZGF0YTsgLy8gZm9yd2FyZCBzb2x2ZSBtICogeCA9IGIsIGxvb3AgY29sdW1uc1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIGJbal1cbiAgICAgIHZhciBiaiA9IGJkYXRhW2pdWzBdIHx8IDA7IC8vIHhbal1cblxuICAgICAgdmFyIHhqID0gdm9pZCAwOyAvLyBmb3J3YXJkIHN1YnN0aXR1dGlvbiAob3V0ZXIgcHJvZHVjdCkgYXZvaWRzIGlubmVyIGxvb3Bpbmcgd2hlbiBiaiA9PT0gMFxuXG4gICAgICBpZiAoIWVxdWFsU2NhbGFyKGJqLCAwKSkge1xuICAgICAgICAvLyB2YWx1ZSBAIFtqLCBqXVxuICAgICAgICB2YXIgdmpqID0gZGF0YVtqXVtqXTsgLy8gY2hlY2sgdmpqXG5cbiAgICAgICAgaWYgKGVxdWFsU2NhbGFyKHZqaiwgMCkpIHtcbiAgICAgICAgICAvLyBzeXN0ZW0gY2Fubm90IGJlIHNvbHZlZFxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTGluZWFyIHN5c3RlbSBjYW5ub3QgYmUgc29sdmVkIHNpbmNlIG1hdHJpeCBpcyBzaW5ndWxhcicpO1xuICAgICAgICB9IC8vIGNhbGN1bGF0ZSB4alxuXG5cbiAgICAgICAgeGogPSBkaXZpZGVTY2FsYXIoYmosIHZqaik7IC8vIGxvb3Agcm93c1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBqICsgMTsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgIC8vIHVwZGF0ZSBjb3B5IG9mIGJcbiAgICAgICAgICBiZGF0YVtpXSA9IFtzdWJ0cmFjdChiZGF0YVtpXVswXSB8fCAwLCBtdWx0aXBseVNjYWxhcih4aiwgZGF0YVtpXVtqXSkpXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gemVybyBAIGpcbiAgICAgICAgeGogPSAwO1xuICAgICAgfSAvLyB1cGRhdGUgeFxuXG5cbiAgICAgIHhbal0gPSBbeGpdO1xuICAgIH0gLy8gcmV0dXJuIHZlY3RvclxuXG5cbiAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IHgsXG4gICAgICBzaXplOiBbcm93cywgMV1cbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9zcGFyc2VGb3J3YXJkU3Vic3RpdHV0aW9uKG0sIGIpIHtcbiAgICAvLyB2YWxpZGF0ZSBtYXRyaXggYW5kIHZlY3RvciwgcmV0dXJuIGNvcHkgb2YgY29sdW1uIHZlY3RvciBiXG4gICAgYiA9IHNvbHZlVmFsaWRhdGlvbihtLCBiLCB0cnVlKTsgLy8gY29sdW1uIHZlY3RvciBkYXRhXG5cbiAgICB2YXIgYmRhdGEgPSBiLl9kYXRhOyAvLyByb3dzICYgY29sdW1uc1xuXG4gICAgdmFyIHJvd3MgPSBtLl9zaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gbS5fc2l6ZVsxXTsgLy8gbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIHZhbHVlcyA9IG0uX3ZhbHVlcztcbiAgICB2YXIgaW5kZXggPSBtLl9pbmRleDtcbiAgICB2YXIgcHRyID0gbS5fcHRyOyAvLyB2YXJzXG5cbiAgICB2YXIgaSwgazsgLy8gcmVzdWx0XG5cbiAgICB2YXIgeCA9IFtdOyAvLyBmb3J3YXJkIHNvbHZlIG0gKiB4ID0gYiwgbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gYltqXVxuICAgICAgdmFyIGJqID0gYmRhdGFbal1bMF0gfHwgMDsgLy8gZm9yd2FyZCBzdWJzdGl0dXRpb24gKG91dGVyIHByb2R1Y3QpIGF2b2lkcyBpbm5lciBsb29waW5nIHdoZW4gYmogPT09IDBcblxuICAgICAgaWYgKCFlcXVhbFNjYWxhcihiaiwgMCkpIHtcbiAgICAgICAgLy8gdmFsdWUgQCBbaiwgal1cbiAgICAgICAgdmFyIHZqaiA9IDA7IC8vIGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4IHZhbHVlcyAmIGluZGV4IChjb2x1bW4gailcblxuICAgICAgICB2YXIganZhbHVlcyA9IFtdO1xuICAgICAgICB2YXIgamluZGV4ID0gW107IC8vIGxhc3QgaW5kZXggaW4gY29sdW1uXG5cbiAgICAgICAgdmFyIGwgPSBwdHJbaiArIDFdOyAvLyB2YWx1ZXMgaW4gY29sdW1uLCBmaW5kIHZhbHVlIEAgW2osIGpdXG5cbiAgICAgICAgZm9yIChrID0gcHRyW2pdOyBrIDwgbDsgaysrKSB7XG4gICAgICAgICAgLy8gcm93XG4gICAgICAgICAgaSA9IGluZGV4W2tdOyAvLyBjaGVjayByb3cgKHJvd3MgYXJlIG5vdCBzb3J0ZWQhKVxuXG4gICAgICAgICAgaWYgKGkgPT09IGopIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSB2ampcbiAgICAgICAgICAgIHZqaiA9IHZhbHVlc1trXTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGkgPiBqKSB7XG4gICAgICAgICAgICAvLyBzdG9yZSBsb3dlciB0cmlhbmd1bGFyXG4gICAgICAgICAgICBqdmFsdWVzLnB1c2godmFsdWVzW2tdKTtcbiAgICAgICAgICAgIGppbmRleC5wdXNoKGkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSAvLyBhdCB0aGlzIHBvaW50IHdlIG11c3QgaGF2ZSBhIHZhbHVlIEAgW2osIGpdXG5cblxuICAgICAgICBpZiAoZXF1YWxTY2FsYXIodmpqLCAwKSkge1xuICAgICAgICAgIC8vIHN5c3RlbSBjYW5ub3QgYmUgc29sdmVkLCB0aGVyZSBpcyBubyB2YWx1ZSBAIFtqLCBqXVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTGluZWFyIHN5c3RlbSBjYW5ub3QgYmUgc29sdmVkIHNpbmNlIG1hdHJpeCBpcyBzaW5ndWxhcicpO1xuICAgICAgICB9IC8vIGNhbGN1bGF0ZSB4alxuXG5cbiAgICAgICAgdmFyIHhqID0gZGl2aWRlU2NhbGFyKGJqLCB2amopOyAvLyBsb29wIGxvd2VyIHRyaWFuZ3VsYXJcblxuICAgICAgICBmb3IgKGsgPSAwLCBsID0gamluZGV4Lmxlbmd0aDsgayA8IGw7IGsrKykge1xuICAgICAgICAgIC8vIHJvd1xuICAgICAgICAgIGkgPSBqaW5kZXhba107IC8vIHVwZGF0ZSBjb3B5IG9mIGJcblxuICAgICAgICAgIGJkYXRhW2ldID0gW3N1YnRyYWN0KGJkYXRhW2ldWzBdIHx8IDAsIG11bHRpcGx5U2NhbGFyKHhqLCBqdmFsdWVzW2tdKSldO1xuICAgICAgICB9IC8vIHVwZGF0ZSB4XG5cblxuICAgICAgICB4W2pdID0gW3hqXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHVwZGF0ZSB4XG4gICAgICAgIHhbal0gPSBbMF07XG4gICAgICB9XG4gICAgfSAvLyByZXR1cm4gdmVjdG9yXG5cblxuICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgZGF0YTogeCxcbiAgICAgIHNpemU6IFtyb3dzLCAxXVxuICAgIH0pO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlTHNvbHZlID0gY3JlYXRlTHNvbHZlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVMdXNvbHZlID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9zb2x2ZVZhbGlkYXRpb24gPSByZXF1aXJlKFwiLi91dGlscy9zb2x2ZVZhbGlkYXRpb25cIik7XG5cbnZhciBfY3NJcHZlYyA9IHJlcXVpcmUoXCIuLi9zcGFyc2UvY3NJcHZlY1wiKTtcblxudmFyIG5hbWUgPSAnbHVzb2x2ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnbHVwJywgJ3NsdScsICd1c29sdmUnLCAnbHNvbHZlJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlTHVzb2x2ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGx1cCA9IF9yZWYubHVwLFxuICAgICAgc2x1ID0gX3JlZi5zbHUsXG4gICAgICB1c29sdmUgPSBfcmVmLnVzb2x2ZSxcbiAgICAgIGxzb2x2ZSA9IF9yZWYubHNvbHZlLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgc29sdmVWYWxpZGF0aW9uID0gKDAsIF9zb2x2ZVZhbGlkYXRpb24uY3JlYXRlU29sdmVWYWxpZGF0aW9uKSh7XG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICAvKipcbiAgICogU29sdmVzIHRoZSBsaW5lYXIgc3lzdGVtIGBBICogeCA9IGJgIHdoZXJlIGBBYCBpcyBhbiBbbiB4IG5dIG1hdHJpeCBhbmQgYGJgIGlzIGEgW25dIGNvbHVtbiB2ZWN0b3IuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5sdXNvbHZlKEEsIGIpICAgICAvLyByZXR1cm5zIGNvbHVtbiB2ZWN0b3Igd2l0aCB0aGUgc29sdXRpb24gdG8gdGhlIGxpbmVhciBzeXN0ZW0gQSAqIHggPSBiXG4gICAqICAgIG1hdGgubHVzb2x2ZShsdXAsIGIpICAgLy8gcmV0dXJucyBjb2x1bW4gdmVjdG9yIHdpdGggdGhlIHNvbHV0aW9uIHRvIHRoZSBsaW5lYXIgc3lzdGVtIEEgKiB4ID0gYiwgbHVwID0gbWF0aC5sdXAoQSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIGNvbnN0IG0gPSBbWzEsIDAsIDAsIDBdLCBbMCwgMiwgMCwgMF0sIFswLCAwLCAzLCAwXSwgWzAsIDAsIDAsIDRdXVxuICAgKlxuICAgKiAgICBjb25zdCB4ID0gbWF0aC5sdXNvbHZlKG0sIFstMSwgLTEsIC0xLCAtMV0pICAgICAgICAvLyB4ID0gW1stMV0sIFstMC41XSwgWy0xLzNdLCBbLTAuMjVdXVxuICAgKlxuICAgKiAgICBjb25zdCBmID0gbWF0aC5sdXAobSlcbiAgICogICAgY29uc3QgeDEgPSBtYXRoLmx1c29sdmUoZiwgWy0xLCAtMSwgLTEsIC0xXSkgICAgICAgLy8geDEgPSBbWy0xXSwgWy0wLjVdLCBbLTEvM10sIFstMC4yNV1dXG4gICAqICAgIGNvbnN0IHgyID0gbWF0aC5sdXNvbHZlKGYsIFsxLCAyLCAxLCAtMV0pICAgICAgICAgIC8vIHgyID0gW1sxXSwgWzFdLCBbMS8zXSwgWy0wLjI1XV1cbiAgICpcbiAgICogICAgY29uc3QgYSA9IFtbLTIsIDNdLCBbMiwgMV1dXG4gICAqICAgIGNvbnN0IGIgPSBbMTEsIDldXG4gICAqICAgIGNvbnN0IHggPSBtYXRoLmx1c29sdmUoYSwgYikgIC8vIFtbMl0sIFs1XV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGx1cCwgc2x1LCBsc29sdmUsIHVzb2x2ZVxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeCB8IEFycmF5IHwgT2JqZWN0fSBBICAgICAgSW52ZXJ0aWJsZSBNYXRyaXggb3IgdGhlIE1hdHJpeCBMVSBkZWNvbXBvc2l0aW9uXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IGIgICAgICAgICAgICAgICBDb2x1bW4gVmVjdG9yXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbb3JkZXJdICAgICAgICAgICAgICAgICBUaGUgU3ltYm9saWMgT3JkZXJpbmcgYW5kIEFuYWx5c2lzIG9yZGVyLCBzZWUgc2x1IGZvciBkZXRhaWxzLiBNYXRyaXggbXVzdCBiZSBhIFNwYXJzZU1hdHJpeFxuICAgKiBAcGFyYW0ge051bWJlcn0gW3RocmVzaG9sZF0gICAgICAgICAgICAgUGFydGlhbCBwaXZvdGluZyB0aHJlc2hvbGQgKDEgZm9yIHBhcnRpYWwgcGl2b3RpbmcpLCBzZWUgc2x1IGZvciBkZXRhaWxzLiBNYXRyaXggbXVzdCBiZSBhIFNwYXJzZU1hdHJpeC5cbiAgICpcbiAgICogQHJldHVybiB7RGVuc2VNYXRyaXggfCBBcnJheX0gICAgICAgICAgIENvbHVtbiB2ZWN0b3Igd2l0aCB0aGUgc29sdXRpb24gdG8gdGhlIGxpbmVhciBzeXN0ZW0gQSAqIHggPSBiXG4gICAqL1xuXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5QXJyYXlNYXRyaXgoYSwgYikge1xuICAgICAgLy8gY29udmVydCBhIHRvIG1hdHJpeFxuICAgICAgYSA9IG1hdHJpeChhKTsgLy8gbWF0cml4IGx1cCBkZWNvbXBvc2l0aW9uXG5cbiAgICAgIHZhciBkID0gbHVwKGEpOyAvLyBzb2x2ZVxuXG4gICAgICB2YXIgeCA9IF9sdXNvbHZlKGQuTCwgZC5VLCBkLnAsIG51bGwsIGIpOyAvLyBjb252ZXJ0IHJlc3VsdCB0byBhcnJheVxuXG5cbiAgICAgIHJldHVybiB4LnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFycmF5TWF0cml4KGEsIGIpIHtcbiAgICAgIC8vIG1hdHJpeCBsdXAgZGVjb21wb3NpdGlvblxuICAgICAgdmFyIGQgPSBsdXAoYSk7IC8vIHNvbHZlXG5cbiAgICAgIHJldHVybiBfbHVzb2x2ZShkLkwsIGQuVSwgZC5wLCBudWxsLCBiKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QXJyYXlNYXRyaXgoYSwgYikge1xuICAgICAgLy8gbWF0cml4IGx1cCBkZWNvbXBvc2l0aW9uXG4gICAgICB2YXIgZCA9IGx1cChhKTsgLy8gc29sdmVcblxuICAgICAgcmV0dXJuIF9sdXNvbHZlKGQuTCwgZC5VLCBkLnAsIG51bGwsIGIpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgQXJyYXkgfCBNYXRyaXgsIG51bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QXJyYXlNYXRyaXhOdW1iZXJOdW1iZXIoYSwgYiwgb3JkZXIsIHRocmVzaG9sZCkge1xuICAgICAgLy8gbWF0cml4IGx1IGRlY29tcG9zaXRpb25cbiAgICAgIHZhciBkID0gc2x1KGEsIG9yZGVyLCB0aHJlc2hvbGQpOyAvLyBzb2x2ZVxuXG4gICAgICByZXR1cm4gX2x1c29sdmUoZC5MLCBkLlUsIGQucCwgZC5xLCBiKTtcbiAgICB9LFxuICAgICdPYmplY3QsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gT2JqZWN0QXJyYXlNYXRyaXgoZCwgYikge1xuICAgICAgLy8gc29sdmVcbiAgICAgIHJldHVybiBfbHVzb2x2ZShkLkwsIGQuVSwgZC5wLCBkLnEsIGIpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gX3RvTWF0cml4KGEpIHtcbiAgICAvLyBjaGVjayBpdCBpcyBhIG1hdHJpeFxuICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KShhKSkge1xuICAgICAgcmV0dXJuIGE7XG4gICAgfSAvLyBjaGVjayBhcnJheVxuXG5cbiAgICBpZiAoKDAsIF9pcy5pc0FycmF5KShhKSkge1xuICAgICAgcmV0dXJuIG1hdHJpeChhKTtcbiAgICB9IC8vIHRocm93XG5cblxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgTWF0cml4IExVIGRlY29tcG9zaXRpb24nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9sdXNvbHZlKGwsIHUsIHAsIHEsIGIpIHtcbiAgICAvLyB2ZXJpZnkgTCwgVSwgUFxuICAgIGwgPSBfdG9NYXRyaXgobCk7XG4gICAgdSA9IF90b01hdHJpeCh1KTsgLy8gdmFsaWRhdGUgbWF0cml4IGFuZCB2ZWN0b3JcblxuICAgIGIgPSBzb2x2ZVZhbGlkYXRpb24obCwgYiwgZmFsc2UpOyAvLyBhcHBseSByb3cgcGVybXV0YXRpb25zIGlmIG5lZWRlZCAoYiBpcyBhIERlbnNlTWF0cml4KVxuXG4gICAgaWYgKHApIHtcbiAgICAgIGIuX2RhdGEgPSAoMCwgX2NzSXB2ZWMuY3NJcHZlYykocCwgYi5fZGF0YSk7XG4gICAgfSAvLyB1c2UgZm9yd2FyZCBzdWJzdGl0dXRpb24gdG8gcmVzb2x2ZSBMICogeSA9IGJcblxuXG4gICAgdmFyIHkgPSBsc29sdmUobCwgYik7IC8vIHVzZSBiYWNrd2FyZCBzdWJzdGl0dXRpb24gdG8gcmVzb2x2ZSBVICogeCA9IHlcblxuICAgIHZhciB4ID0gdXNvbHZlKHUsIHkpOyAvLyBhcHBseSBjb2x1bW4gcGVybXV0YXRpb25zIGlmIG5lZWRlZCAoeCBpcyBhIERlbnNlTWF0cml4KVxuXG4gICAgaWYgKHEpIHtcbiAgICAgIHguX2RhdGEgPSAoMCwgX2NzSXB2ZWMuY3NJcHZlYykocSwgeC5fZGF0YSk7XG4gICAgfSAvLyByZXR1cm4gc29sdXRpb25cblxuXG4gICAgcmV0dXJuIHg7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVMdXNvbHZlID0gY3JlYXRlTHVzb2x2ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVXNvbHZlID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9zb2x2ZVZhbGlkYXRpb24gPSByZXF1aXJlKFwiLi91dGlscy9zb2x2ZVZhbGlkYXRpb25cIik7XG5cbnZhciBuYW1lID0gJ3Vzb2x2ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZGl2aWRlU2NhbGFyJywgJ211bHRpcGx5U2NhbGFyJywgJ3N1YnRyYWN0JywgJ2VxdWFsU2NhbGFyJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlVXNvbHZlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXIsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBzb2x2ZVZhbGlkYXRpb24gPSAoMCwgX3NvbHZlVmFsaWRhdGlvbi5jcmVhdGVTb2x2ZVZhbGlkYXRpb24pKHtcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIC8qKlxuICAgKiBTb2x2ZXMgdGhlIGxpbmVhciBlcXVhdGlvbiBzeXN0ZW0gYnkgYmFja3dhcmQgc3Vic3RpdHV0aW9uLiBNYXRyaXggbXVzdCBiZSBhbiB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeC5cbiAgICpcbiAgICogYFUgKiB4ID0gYmBcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnVzb2x2ZShVLCBiKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgYSA9IFtbLTIsIDNdLCBbMiwgMV1dXG4gICAqICAgIGNvbnN0IGIgPSBbMTEsIDldXG4gICAqICAgIGNvbnN0IHggPSB1c29sdmUoYSwgYikgIC8vIFtbOF0sIFs5XV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGx1cCwgc2x1LCB1c29sdmUsIGx1c29sdmVcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXgsIEFycmF5fSBVICAgICAgIEEgTiB4IE4gbWF0cml4IG9yIGFycmF5IChVKVxuICAgKiBAcGFyYW0ge01hdHJpeCwgQXJyYXl9IGIgICAgICAgQSBjb2x1bW4gdmVjdG9yIHdpdGggdGhlIGIgdmFsdWVzXG4gICAqXG4gICAqIEByZXR1cm4ge0RlbnNlTWF0cml4IHwgQXJyYXl9ICBBIGNvbHVtbiB2ZWN0b3Igd2l0aCB0aGUgbGluZWFyIHN5c3RlbSBzb2x1dGlvbiAoeClcbiAgICovXG5cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnU3BhcnNlTWF0cml4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFycmF5TWF0cml4KG0sIGIpIHtcbiAgICAgIC8vIHByb2Nlc3MgbWF0cml4XG4gICAgICByZXR1cm4gX3NwYXJzZUJhY2t3YXJkU3Vic3RpdHV0aW9uKG0sIGIpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QXJyYXlNYXRyaXgobSwgYikge1xuICAgICAgLy8gcHJvY2VzcyBtYXRyaXhcbiAgICAgIHJldHVybiBfZGVuc2VCYWNrd2FyZFN1YnN0aXR1dGlvbihtLCBiKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheUFycmF5TWF0cml4KGEsIGIpIHtcbiAgICAgIC8vIGNyZWF0ZSBkZW5zZSBtYXRyaXggZnJvbSBhcnJheVxuICAgICAgdmFyIG0gPSBtYXRyaXgoYSk7IC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cblxuICAgICAgdmFyIHIgPSBfZGVuc2VCYWNrd2FyZFN1YnN0aXR1dGlvbihtLCBiKTsgLy8gcmVzdWx0XG5cblxuICAgICAgcmV0dXJuIHIudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gX2RlbnNlQmFja3dhcmRTdWJzdGl0dXRpb24obSwgYikge1xuICAgIC8vIHZhbGlkYXRlIG1hdHJpeCBhbmQgdmVjdG9yLCByZXR1cm4gY29weSBvZiBjb2x1bW4gdmVjdG9yIGJcbiAgICBiID0gc29sdmVWYWxpZGF0aW9uKG0sIGIsIHRydWUpOyAvLyBjb2x1bW4gdmVjdG9yIGRhdGFcblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgcm93cyA9IG0uX3NpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBtLl9zaXplWzFdOyAvLyByZXN1bHRcblxuICAgIHZhciB4ID0gW107IC8vIGFycmF5c1xuXG4gICAgdmFyIGRhdGEgPSBtLl9kYXRhOyAvLyBiYWNrd2FyZCBzb2x2ZSBtICogeCA9IGIsIGxvb3AgY29sdW1ucyAoYmFja3dhcmRzKVxuXG4gICAgZm9yICh2YXIgaiA9IGNvbHVtbnMgLSAxOyBqID49IDA7IGotLSkge1xuICAgICAgLy8gYltqXVxuICAgICAgdmFyIGJqID0gYmRhdGFbal1bMF0gfHwgMDsgLy8geFtqXVxuXG4gICAgICB2YXIgeGogPSB2b2lkIDA7IC8vIGJhY2t3YXJkIHN1YnN0aXR1dGlvbiAob3V0ZXIgcHJvZHVjdCkgYXZvaWRzIGlubmVyIGxvb3Bpbmcgd2hlbiBiaiA9PT0gMFxuXG4gICAgICBpZiAoIWVxdWFsU2NhbGFyKGJqLCAwKSkge1xuICAgICAgICAvLyB2YWx1ZSBAIFtqLCBqXVxuICAgICAgICB2YXIgdmpqID0gZGF0YVtqXVtqXTsgLy8gY2hlY2sgdmpqXG5cbiAgICAgICAgaWYgKGVxdWFsU2NhbGFyKHZqaiwgMCkpIHtcbiAgICAgICAgICAvLyBzeXN0ZW0gY2Fubm90IGJlIHNvbHZlZFxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTGluZWFyIHN5c3RlbSBjYW5ub3QgYmUgc29sdmVkIHNpbmNlIG1hdHJpeCBpcyBzaW5ndWxhcicpO1xuICAgICAgICB9IC8vIGNhbGN1bGF0ZSB4alxuXG5cbiAgICAgICAgeGogPSBkaXZpZGVTY2FsYXIoYmosIHZqaik7IC8vIGxvb3Agcm93c1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBqIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAvLyB1cGRhdGUgY29weSBvZiBiXG4gICAgICAgICAgYmRhdGFbaV0gPSBbc3VidHJhY3QoYmRhdGFbaV1bMF0gfHwgMCwgbXVsdGlwbHlTY2FsYXIoeGosIGRhdGFbaV1bal0pKV07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHplcm8gdmFsdWUgQCBqXG4gICAgICAgIHhqID0gMDtcbiAgICAgIH0gLy8gdXBkYXRlIHhcblxuXG4gICAgICB4W2pdID0gW3hqXTtcbiAgICB9IC8vIHJldHVybiBjb2x1bW4gdmVjdG9yXG5cblxuICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgZGF0YTogeCxcbiAgICAgIHNpemU6IFtyb3dzLCAxXVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gX3NwYXJzZUJhY2t3YXJkU3Vic3RpdHV0aW9uKG0sIGIpIHtcbiAgICAvLyB2YWxpZGF0ZSBtYXRyaXggYW5kIHZlY3RvciwgcmV0dXJuIGNvcHkgb2YgY29sdW1uIHZlY3RvciBiXG4gICAgYiA9IHNvbHZlVmFsaWRhdGlvbihtLCBiLCB0cnVlKTsgLy8gY29sdW1uIHZlY3RvciBkYXRhXG5cbiAgICB2YXIgYmRhdGEgPSBiLl9kYXRhOyAvLyByb3dzICYgY29sdW1uc1xuXG4gICAgdmFyIHJvd3MgPSBtLl9zaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gbS5fc2l6ZVsxXTsgLy8gbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIHZhbHVlcyA9IG0uX3ZhbHVlcztcbiAgICB2YXIgaW5kZXggPSBtLl9pbmRleDtcbiAgICB2YXIgcHRyID0gbS5fcHRyOyAvLyB2YXJzXG5cbiAgICB2YXIgaSwgazsgLy8gcmVzdWx0XG5cbiAgICB2YXIgeCA9IFtdOyAvLyBiYWNrd2FyZCBzb2x2ZSBtICogeCA9IGIsIGxvb3AgY29sdW1ucyAoYmFja3dhcmRzKVxuXG4gICAgZm9yICh2YXIgaiA9IGNvbHVtbnMgLSAxOyBqID49IDA7IGotLSkge1xuICAgICAgLy8gYltqXVxuICAgICAgdmFyIGJqID0gYmRhdGFbal1bMF0gfHwgMDsgLy8gYmFja3dhcmQgc3Vic3RpdHV0aW9uIChvdXRlciBwcm9kdWN0KSBhdm9pZHMgaW5uZXIgbG9vcGluZyB3aGVuIGJqID09PSAwXG5cbiAgICAgIGlmICghZXF1YWxTY2FsYXIoYmosIDApKSB7XG4gICAgICAgIC8vIHZhbHVlIEAgW2osIGpdXG4gICAgICAgIHZhciB2amogPSAwOyAvLyB1cHBlciB0cmlhbmd1bGFyIG1hdHJpeCB2YWx1ZXMgJiBpbmRleCAoY29sdW1uIGopXG5cbiAgICAgICAgdmFyIGp2YWx1ZXMgPSBbXTtcbiAgICAgICAgdmFyIGppbmRleCA9IFtdOyAvLyBmaXJzdCAmIGxhc3QgaW5kZWNlcyBpbiBjb2x1bW5cblxuICAgICAgICB2YXIgZiA9IHB0cltqXTtcbiAgICAgICAgdmFyIGwgPSBwdHJbaiArIDFdOyAvLyB2YWx1ZXMgaW4gY29sdW1uLCBmaW5kIHZhbHVlIEAgW2osIGpdLCBsb29wIGJhY2t3YXJkc1xuXG4gICAgICAgIGZvciAoayA9IGwgLSAxOyBrID49IGY7IGstLSkge1xuICAgICAgICAgIC8vIHJvd1xuICAgICAgICAgIGkgPSBpbmRleFtrXTsgLy8gY2hlY2sgcm93XG5cbiAgICAgICAgICBpZiAoaSA9PT0gaikge1xuICAgICAgICAgICAgLy8gdXBkYXRlIHZqalxuICAgICAgICAgICAgdmpqID0gdmFsdWVzW2tdO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaSA8IGopIHtcbiAgICAgICAgICAgIC8vIHN0b3JlIHVwcGVyIHRyaWFuZ3VsYXJcbiAgICAgICAgICAgIGp2YWx1ZXMucHVzaCh2YWx1ZXNba10pO1xuICAgICAgICAgICAgamluZGV4LnB1c2goaSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIGF0IHRoaXMgcG9pbnQgd2UgbXVzdCBoYXZlIGEgdmFsdWUgQCBbaiwgal1cblxuXG4gICAgICAgIGlmIChlcXVhbFNjYWxhcih2amosIDApKSB7XG4gICAgICAgICAgLy8gc3lzdGVtIGNhbm5vdCBiZSBzb2x2ZWQsIHRoZXJlIGlzIG5vIHZhbHVlIEAgW2osIGpdXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdMaW5lYXIgc3lzdGVtIGNhbm5vdCBiZSBzb2x2ZWQgc2luY2UgbWF0cml4IGlzIHNpbmd1bGFyJyk7XG4gICAgICAgIH0gLy8gY2FsY3VsYXRlIHhqXG5cblxuICAgICAgICB2YXIgeGogPSBkaXZpZGVTY2FsYXIoYmosIHZqaik7IC8vIGxvb3AgdXBwZXIgdHJpYW5ndWxhclxuXG4gICAgICAgIGZvciAoayA9IDAsIGwgPSBqaW5kZXgubGVuZ3RoOyBrIDwgbDsgaysrKSB7XG4gICAgICAgICAgLy8gcm93XG4gICAgICAgICAgaSA9IGppbmRleFtrXTsgLy8gdXBkYXRlIGNvcHkgb2YgYlxuXG4gICAgICAgICAgYmRhdGFbaV0gPSBbc3VidHJhY3QoYmRhdGFbaV1bMF0sIG11bHRpcGx5U2NhbGFyKHhqLCBqdmFsdWVzW2tdKSldO1xuICAgICAgICB9IC8vIHVwZGF0ZSB4XG5cblxuICAgICAgICB4W2pdID0gW3hqXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHVwZGF0ZSB4XG4gICAgICAgIHhbal0gPSBbMF07XG4gICAgICB9XG4gICAgfSAvLyByZXR1cm4gdmVjdG9yXG5cblxuICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgZGF0YTogeCxcbiAgICAgIHNpemU6IFtyb3dzLCAxXVxuICAgIH0pO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlVXNvbHZlID0gY3JlYXRlVXNvbHZlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTb2x2ZVZhbGlkYXRpb24gPSBjcmVhdGVTb2x2ZVZhbGlkYXRpb247XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uLy4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxuZnVuY3Rpb24gY3JlYXRlU29sdmVWYWxpZGF0aW9uKF9yZWYpIHtcbiAgdmFyIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcblxuICAvKipcbiAgICogVmFsaWRhdGVzIG1hdHJpeCBhbmQgY29sdW1uIHZlY3RvciBiIGZvciBiYWNrd2FyZC9mb3J3YXJkIHN1YnN0aXR1dGlvbiBhbGdvcml0aG1zLlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gbSAgICAgICAgICAgIEFuIE4geCBOIG1hdHJpeFxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSBiICAgIEEgY29sdW1uIHZlY3RvclxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IGNvcHkgICAgICAgIFJldHVybiBhIGNvcHkgb2YgdmVjdG9yIGJcbiAgICpcbiAgICogQHJldHVybiB7RGVuc2VNYXRyaXh9ICAgICAgICBEZW5zZSBjb2x1bW4gdmVjdG9yIGJcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBzb2x2ZVZhbGlkYXRpb24obSwgYiwgY29weSkge1xuICAgIC8vIG1hdHJpeCBzaXplXG4gICAgdmFyIHNpemUgPSBtLnNpemUoKTsgLy8gdmFsaWRhdGUgbWF0cml4IGRpbWVuc2lvbnNcblxuICAgIGlmIChzaXplLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHR3byBkaW1lbnNpb25hbCAoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgIH0gLy8gcm93cyAmIGNvbHVtbnNcblxuXG4gICAgdmFyIHJvd3MgPSBzaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gc2l6ZVsxXTsgLy8gdmFsaWRhdGUgcm93cyAmIGNvbHVtbnNcblxuICAgIGlmIChyb3dzICE9PSBjb2x1bW5zKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlIChzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgfSAvLyB2YXJzXG5cblxuICAgIHZhciBkYXRhLCBpLCBiZGF0YTsgLy8gY2hlY2sgYiBpcyBtYXRyaXhcblxuICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KShiKSkge1xuICAgICAgLy8gbWF0cml4IHNpemVcbiAgICAgIHZhciBtc2l6ZSA9IGIuc2l6ZSgpOyAvLyB2ZWN0b3JcblxuICAgICAgaWYgKG1zaXplLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyBjaGVjayB2ZWN0b3IgbGVuZ3RoXG4gICAgICAgIGlmIChtc2l6ZVswXSAhPT0gcm93cykge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBjb2x1bW5zIG11c3QgbWF0Y2ggdmVjdG9yIGxlbmd0aC4nKTtcbiAgICAgICAgfSAvLyBjcmVhdGUgZGF0YSBhcnJheVxuXG5cbiAgICAgICAgZGF0YSA9IFtdOyAvLyBtYXRyaXggZGF0YSAoRGVuc2VNYXRyaXgpXG5cbiAgICAgICAgYmRhdGEgPSBiLl9kYXRhOyAvLyBsb29wIGIgZGF0YVxuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICAvLyByb3cgYXJyYXlcbiAgICAgICAgICBkYXRhW2ldID0gW2JkYXRhW2ldXTtcbiAgICAgICAgfSAvLyByZXR1cm4gRGVuc2UgTWF0cml4XG5cblxuICAgICAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgIHNpemU6IFtyb3dzLCAxXSxcbiAgICAgICAgICBkYXRhdHlwZTogYi5fZGF0YXR5cGVcbiAgICAgICAgfSk7XG4gICAgICB9IC8vIHR3byBkaW1lbnNpb25zXG5cblxuICAgICAgaWYgKG1zaXplLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAvLyBhcnJheSBtdXN0IGJlIGEgY29sdW1uIHZlY3RvclxuICAgICAgICBpZiAobXNpemVbMF0gIT09IHJvd3MgfHwgbXNpemVbMV0gIT09IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggY29sdW1ucyBtdXN0IG1hdGNoIHZlY3RvciBsZW5ndGguJyk7XG4gICAgICAgIH0gLy8gY2hlY2sgbWF0cml4IHR5cGVcblxuXG4gICAgICAgIGlmICgoMCwgX2lzLmlzRGVuc2VNYXRyaXgpKGIpKSB7XG4gICAgICAgICAgLy8gY2hlY2sgYSBjb3B5IGlzIG5lZWRlZFxuICAgICAgICAgIGlmIChjb3B5KSB7XG4gICAgICAgICAgICAvLyBjcmVhdGUgZGF0YSBhcnJheVxuICAgICAgICAgICAgZGF0YSA9IFtdOyAvLyBtYXRyaXggZGF0YSAoRGVuc2VNYXRyaXgpXG5cbiAgICAgICAgICAgIGJkYXRhID0gYi5fZGF0YTsgLy8gbG9vcCBiIGRhdGFcblxuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgICAgICAvLyByb3cgYXJyYXlcbiAgICAgICAgICAgICAgZGF0YVtpXSA9IFtiZGF0YVtpXVswXV07XG4gICAgICAgICAgICB9IC8vIHJldHVybiBEZW5zZSBNYXRyaXhcblxuXG4gICAgICAgICAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgc2l6ZTogW3Jvd3MsIDFdLFxuICAgICAgICAgICAgICBkYXRhdHlwZTogYi5fZGF0YXR5cGVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0gLy8gYiBpcyBhbHJlYWR5IGEgY29sdW1uIHZlY3RvclxuXG5cbiAgICAgICAgICByZXR1cm4gYjtcbiAgICAgICAgfSAvLyBjcmVhdGUgZGF0YSBhcnJheVxuXG5cbiAgICAgICAgZGF0YSA9IFtdO1xuXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgICBkYXRhW2ldID0gWzBdO1xuICAgICAgICB9IC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG5cblxuICAgICAgICB2YXIgdmFsdWVzID0gYi5fdmFsdWVzO1xuICAgICAgICB2YXIgaW5kZXggPSBiLl9pbmRleDtcbiAgICAgICAgdmFyIHB0ciA9IGIuX3B0cjsgLy8gbG9vcCB2YWx1ZXMgaW4gY29sdW1uIDBcblxuICAgICAgICBmb3IgKHZhciBrMSA9IHB0clsxXSwgayA9IHB0clswXTsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICBpID0gaW5kZXhba107IC8vIGFkZCB0byBkYXRhXG5cbiAgICAgICAgICBkYXRhW2ldWzBdID0gdmFsdWVzW2tdO1xuICAgICAgICB9IC8vIHJldHVybiBEZW5zZSBNYXRyaXhcblxuXG4gICAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgc2l6ZTogW3Jvd3MsIDFdLFxuICAgICAgICAgIGRhdGF0eXBlOiBiLl9kYXRhdHlwZVxuICAgICAgICB9KTtcbiAgICAgIH0gLy8gdGhyb3cgZXJyb3JcblxuXG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggY29sdW1ucyBtdXN0IG1hdGNoIHZlY3RvciBsZW5ndGguJyk7XG4gICAgfSAvLyBjaGVjayBiIGlzIGFycmF5XG5cblxuICAgIGlmICgoMCwgX2lzLmlzQXJyYXkpKGIpKSB7XG4gICAgICAvLyBzaXplXG4gICAgICB2YXIgYXNpemUgPSAoMCwgX2FycmF5LmFycmF5U2l6ZSkoYik7IC8vIGNoZWNrIG1hdHJpeCBkaW1lbnNpb25zLCB2ZWN0b3JcblxuICAgICAgaWYgKGFzaXplLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyBjaGVjayB2ZWN0b3IgbGVuZ3RoXG4gICAgICAgIGlmIChhc2l6ZVswXSAhPT0gcm93cykge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBjb2x1bW5zIG11c3QgbWF0Y2ggdmVjdG9yIGxlbmd0aC4nKTtcbiAgICAgICAgfSAvLyBjcmVhdGUgZGF0YSBhcnJheVxuXG5cbiAgICAgICAgZGF0YSA9IFtdOyAvLyBsb29wIGJcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgLy8gcm93IGFycmF5XG4gICAgICAgICAgZGF0YVtpXSA9IFtiW2ldXTtcbiAgICAgICAgfSAvLyByZXR1cm4gRGVuc2UgTWF0cml4XG5cblxuICAgICAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgIHNpemU6IFtyb3dzLCAxXVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKGFzaXplLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAvLyBhcnJheSBtdXN0IGJlIGEgY29sdW1uIHZlY3RvclxuICAgICAgICBpZiAoYXNpemVbMF0gIT09IHJvd3MgfHwgYXNpemVbMV0gIT09IDEpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggY29sdW1ucyBtdXN0IG1hdGNoIHZlY3RvciBsZW5ndGguJyk7XG4gICAgICAgIH0gLy8gY3JlYXRlIGRhdGEgYXJyYXlcblxuXG4gICAgICAgIGRhdGEgPSBbXTsgLy8gbG9vcCBiIGRhdGFcblxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgLy8gcm93IGFycmF5XG4gICAgICAgICAgZGF0YVtpXSA9IFtiW2ldWzBdXTtcbiAgICAgICAgfSAvLyByZXR1cm4gRGVuc2UgTWF0cml4XG5cblxuICAgICAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgIHNpemU6IFtyb3dzLCAxXVxuICAgICAgICB9KTtcbiAgICAgIH0gLy8gdGhyb3cgZXJyb3JcblxuXG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggY29sdW1ucyBtdXN0IG1hdGNoIHZlY3RvciBsZW5ndGguJyk7XG4gICAgfVxuICB9O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDc0FtZCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY3NGa2VlcCA9IHJlcXVpcmUoXCIuL2NzRmtlZXBcIik7XG5cbnZhciBfY3NGbGlwID0gcmVxdWlyZShcIi4vY3NGbGlwXCIpO1xuXG52YXIgX2NzVGRmcyA9IHJlcXVpcmUoXCIuL2NzVGRmc1wiKTtcblxudmFyIG5hbWUgPSAnY3NBbWQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnYWRkJywgJ211bHRpcGx5JywgJ3RyYW5zcG9zZSddO1xudmFyIGNyZWF0ZUNzQW1kID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgdHJhbnNwb3NlID0gX3JlZi50cmFuc3Bvc2U7XG5cbiAgLyoqXG4gICAqIEFwcHJveGltYXRlIG1pbmltdW0gZGVncmVlIG9yZGVyaW5nLiBUaGUgbWluaW11bSBkZWdyZWUgYWxnb3JpdGhtIGlzIGEgd2lkZWx5IHVzZWRcbiAgICogaGV1cmlzdGljIGZvciBmaW5kaW5nIGEgcGVybXV0YXRpb24gUCBzbyB0aGF0IFAqQSpQJyBoYXMgZmV3ZXIgbm9uemVyb3MgaW4gaXRzIGZhY3Rvcml6YXRpb25cbiAgICogdGhhbiBBLiBJdCBpcyBhIGdyZWFkeSBtZXRob2QgdGhhdCBzZWxlY3RzIHRoZSBzcGFyc2VzdCBwaXZvdCByb3cgYW5kIGNvbHVtbiBkdXJpbmcgdGhlIGNvdXJzZVxuICAgKiBvZiBhIHJpZ2h0IGxvb2tpbmcgc3BhcnNlIENob2xlc2t5IGZhY3Rvcml6YXRpb24uXG4gICAqXG4gICAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBvcmRlciAgICAwOiBOYXR1cmFsLCAxOiBDaG9sZXNreSwgMjogTFUsIDM6IFFSXG4gICAqIEBwYXJhbSB7TWF0cml4fSBtICAgICAgICBTcGFyc2UgTWF0cml4XG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gY3NBbWQob3JkZXIsIGEpIHtcbiAgICAvLyBjaGVjayBpbnB1dCBwYXJhbWV0ZXJzXG4gICAgaWYgKCFhIHx8IG9yZGVyIDw9IDAgfHwgb3JkZXIgPiAzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IC8vIGEgbWF0cml4IGFycmF5c1xuXG5cbiAgICB2YXIgYXNpemUgPSBhLl9zaXplOyAvLyByb3dzIGFuZCBjb2x1bW5zXG5cbiAgICB2YXIgbSA9IGFzaXplWzBdO1xuICAgIHZhciBuID0gYXNpemVbMV07IC8vIGluaXRpYWxpemUgdmFyc1xuXG4gICAgdmFyIGxlbWF4ID0gMDsgLy8gZGVuc2UgdGhyZXNob2xkXG5cbiAgICB2YXIgZGVuc2UgPSBNYXRoLm1heCgxNiwgMTAgKiBNYXRoLnNxcnQobikpO1xuICAgIGRlbnNlID0gTWF0aC5taW4obiAtIDIsIGRlbnNlKTsgLy8gY3JlYXRlIHRhcmdldCBtYXRyaXggQ1xuXG4gICAgdmFyIGNtID0gX2NyZWF0ZVRhcmdldE1hdHJpeChvcmRlciwgYSwgbSwgbiwgZGVuc2UpOyAvLyBkcm9wIGRpYWdvbmFsIGVudHJpZXNcblxuXG4gICAgKDAsIF9jc0ZrZWVwLmNzRmtlZXApKGNtLCBfZGlhZywgbnVsbCk7IC8vIEMgbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIGNpbmRleCA9IGNtLl9pbmRleDtcbiAgICB2YXIgY3B0ciA9IGNtLl9wdHI7IC8vIG51bWJlciBvZiBub256ZXJvIGVsZW1lbnRzIGluIENcblxuICAgIHZhciBjbnogPSBjcHRyW25dOyAvLyBhbGxvY2F0ZSByZXN1bHQgKG4rMSlcblxuICAgIHZhciBQID0gW107IC8vIGNyZWF0ZSB3b3Jrc3BhY2UgKDggKiAobiArIDEpKVxuXG4gICAgdmFyIFcgPSBbXTtcbiAgICB2YXIgbGVuID0gMDsgLy8gZmlyc3QgbiArIDEgZW50cmllc1xuXG4gICAgdmFyIG52ID0gbiArIDE7IC8vIG5leHQgbiArIDEgZW50cmllc1xuXG4gICAgdmFyIG5leHQgPSAyICogKG4gKyAxKTsgLy8gbmV4dCBuICsgMSBlbnRyaWVzXG5cbiAgICB2YXIgaGVhZCA9IDMgKiAobiArIDEpOyAvLyBuZXh0IG4gKyAxIGVudHJpZXNcblxuICAgIHZhciBlbGVuID0gNCAqIChuICsgMSk7IC8vIG5leHQgbiArIDEgZW50cmllc1xuXG4gICAgdmFyIGRlZ3JlZSA9IDUgKiAobiArIDEpOyAvLyBuZXh0IG4gKyAxIGVudHJpZXNcblxuICAgIHZhciB3ID0gNiAqIChuICsgMSk7IC8vIG5leHQgbiArIDEgZW50cmllc1xuXG4gICAgdmFyIGhoZWFkID0gNyAqIChuICsgMSk7IC8vIGxhc3QgbiArIDEgZW50cmllc1xuICAgIC8vIHVzZSBQIGFzIHdvcmtzcGFjZSBmb3IgbGFzdFxuXG4gICAgdmFyIGxhc3QgPSBQOyAvLyBpbml0aWFsaXplIHF1b3RpZW50IGdyYXBoXG5cbiAgICB2YXIgbWFyayA9IF9pbml0aWFsaXplUXVvdGllbnRHcmFwaChuLCBjcHRyLCBXLCBsZW4sIGhlYWQsIGxhc3QsIG5leHQsIGhoZWFkLCBudiwgdywgZWxlbiwgZGVncmVlKTsgLy8gaW5pdGlhbGl6ZSBkZWdyZWUgbGlzdHNcblxuXG4gICAgdmFyIG5lbCA9IF9pbml0aWFsaXplRGVncmVlTGlzdHMobiwgY3B0ciwgVywgZGVncmVlLCBlbGVuLCB3LCBkZW5zZSwgbnYsIGhlYWQsIGxhc3QsIG5leHQpOyAvLyBtaW5pbXVtIGRlZ3JlZSBub2RlXG5cblxuICAgIHZhciBtaW5kZWcgPSAwOyAvLyB2YXJzXG5cbiAgICB2YXIgaSwgaiwgaywgazEsIGsyLCBlLCBwaiwgbG4sIG52aSwgcGssIGVsbiwgcDEsIHAyLCBwbiwgaCwgZDsgLy8gd2hpbGUgKHNlbGVjdGluZyBwaXZvdHMpIGRvXG5cbiAgICB3aGlsZSAobmVsIDwgbikge1xuICAgICAgLy8gc2VsZWN0IG5vZGUgb2YgbWluaW11bSBhcHByb3hpbWF0ZSBkZWdyZWUuIGFtZCgpIGlzIG5vdyByZWFkeSB0byBzdGFydCBlbGltaW5hdGluZyB0aGUgZ3JhcGguIEl0IGZpcnN0XG4gICAgICAvLyBmaW5kcyBhIG5vZGUgayBvZiBtaW5pbXVtIGRlZ3JlZSBhbmQgcmVtb3ZlcyBpdCBmcm9tIGl0cyBkZWdyZWUgbGlzdC4gVGhlIHZhcmlhYmxlIG5lbCBrZWVwcyB0cmFjayBvZiB0aG93XG4gICAgICAvLyBtYW55IG5vZGVzIGhhdmUgYmVlbiBlbGltaW5hdGVkLlxuICAgICAgZm9yIChrID0gLTE7IG1pbmRlZyA8IG4gJiYgKGsgPSBXW2hlYWQgKyBtaW5kZWddKSA9PT0gLTE7IG1pbmRlZysrKSB7XG4gICAgICAgIDtcbiAgICAgIH1cblxuICAgICAgaWYgKFdbbmV4dCArIGtdICE9PSAtMSkge1xuICAgICAgICBsYXN0W1dbbmV4dCArIGtdXSA9IC0xO1xuICAgICAgfSAvLyByZW1vdmUgayBmcm9tIGRlZ3JlZSBsaXN0XG5cblxuICAgICAgV1toZWFkICsgbWluZGVnXSA9IFdbbmV4dCArIGtdOyAvLyBlbGVuayA9IHxFa3xcblxuICAgICAgdmFyIGVsZW5rID0gV1tlbGVuICsga107IC8vICMgb2Ygbm9kZXMgayByZXByZXNlbnRzXG5cbiAgICAgIHZhciBudmsgPSBXW252ICsga107IC8vIFdbbnYgKyBrXSBub2RlcyBvZiBBIGVsaW1pbmF0ZWRcblxuICAgICAgbmVsICs9IG52azsgLy8gQ29uc3RydWN0IGEgbmV3IGVsZW1lbnQuIFRoZSBuZXcgZWxlbWVudCBMayBpcyBjb25zdHJ1Y3RlZCBpbiBwbGFjZSBpZiB8RWt8ID0gMC4gbnZbaV0gaXNcbiAgICAgIC8vIG5lZ2F0ZWQgZm9yIGFsbCBub2RlcyBpIGluIExrIHRvIGZsYWcgdGhlbSBhcyBtZW1iZXJzIG9mIHRoaXMgc2V0LiBFYWNoIG5vZGUgaSBpcyByZW1vdmVkIGZyb20gdGhlXG4gICAgICAvLyBkZWdyZWUgbGlzdHMuIEFsbCBlbGVtZW50cyBlIGluIEVrIGFyZSBhYnNvcnZlZCBpbnRvIGVsZW1lbnQgay5cblxuICAgICAgdmFyIGRrID0gMDsgLy8gZmxhZyBrIGFzIGluIExrXG5cbiAgICAgIFdbbnYgKyBrXSA9IC1udms7XG4gICAgICB2YXIgcCA9IGNwdHJba107IC8vIGRvIGluIHBsYWNlIGlmIFdbZWxlbiArIGtdID09PSAwXG5cbiAgICAgIHZhciBwazEgPSBlbGVuayA9PT0gMCA/IHAgOiBjbno7XG4gICAgICB2YXIgcGsyID0gcGsxO1xuXG4gICAgICBmb3IgKGsxID0gMTsgazEgPD0gZWxlbmsgKyAxOyBrMSsrKSB7XG4gICAgICAgIGlmIChrMSA+IGVsZW5rKSB7XG4gICAgICAgICAgLy8gc2VhcmNoIHRoZSBub2RlcyBpbiBrXG4gICAgICAgICAgZSA9IGs7IC8vIGxpc3Qgb2Ygbm9kZXMgc3RhcnRzIGF0IGNpbmRleFtwal1cblxuICAgICAgICAgIHBqID0gcDsgLy8gbGVuZ3RoIG9mIGxpc3Qgb2Ygbm9kZXMgaW4ga1xuXG4gICAgICAgICAgbG4gPSBXW2xlbiArIGtdIC0gZWxlbms7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gc2VhcmNoIHRoZSBub2RlcyBpbiBlXG4gICAgICAgICAgZSA9IGNpbmRleFtwKytdO1xuICAgICAgICAgIHBqID0gY3B0cltlXTsgLy8gbGVuZ3RoIG9mIGxpc3Qgb2Ygbm9kZXMgaW4gZVxuXG4gICAgICAgICAgbG4gPSBXW2xlbiArIGVdO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChrMiA9IDE7IGsyIDw9IGxuOyBrMisrKSB7XG4gICAgICAgICAgaSA9IGNpbmRleFtwaisrXTsgLy8gY2hlY2sgIG5vZGUgaSBkZWFkLCBvciBzZWVuXG5cbiAgICAgICAgICBpZiAoKG52aSA9IFdbbnYgKyBpXSkgPD0gMCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSAvLyBXW2RlZ3JlZSArIExrXSArPSBzaXplIG9mIG5vZGUgaVxuXG5cbiAgICAgICAgICBkayArPSBudmk7IC8vIG5lZ2F0ZSBXW252ICsgaV0gdG8gZGVub3RlIGkgaW4gTGtcblxuICAgICAgICAgIFdbbnYgKyBpXSA9IC1udmk7IC8vIHBsYWNlIGkgaW4gTGtcblxuICAgICAgICAgIGNpbmRleFtwazIrK10gPSBpO1xuXG4gICAgICAgICAgaWYgKFdbbmV4dCArIGldICE9PSAtMSkge1xuICAgICAgICAgICAgbGFzdFtXW25leHQgKyBpXV0gPSBsYXN0W2ldO1xuICAgICAgICAgIH0gLy8gY2hlY2sgd2UgbmVlZCB0byByZW1vdmUgaSBmcm9tIGRlZ3JlZSBsaXN0XG5cblxuICAgICAgICAgIGlmIChsYXN0W2ldICE9PSAtMSkge1xuICAgICAgICAgICAgV1tuZXh0ICsgbGFzdFtpXV0gPSBXW25leHQgKyBpXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgV1toZWFkICsgV1tkZWdyZWUgKyBpXV0gPSBXW25leHQgKyBpXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZSAhPT0gaykge1xuICAgICAgICAgIC8vIGFic29yYiBlIGludG8ga1xuICAgICAgICAgIGNwdHJbZV0gPSAoMCwgX2NzRmxpcC5jc0ZsaXApKGspOyAvLyBlIGlzIG5vdyBhIGRlYWQgZWxlbWVudFxuXG4gICAgICAgICAgV1t3ICsgZV0gPSAwO1xuICAgICAgICB9XG4gICAgICB9IC8vIGNpbmRleFtjbnouLi5uem1heF0gaXMgZnJlZVxuXG5cbiAgICAgIGlmIChlbGVuayAhPT0gMCkge1xuICAgICAgICBjbnogPSBwazI7XG4gICAgICB9IC8vIGV4dGVybmFsIGRlZ3JlZSBvZiBrIC0gfExrXFxpfFxuXG5cbiAgICAgIFdbZGVncmVlICsga10gPSBkazsgLy8gZWxlbWVudCBrIGlzIGluIGNpbmRleFtwazEuLnBrMi0xXVxuXG4gICAgICBjcHRyW2tdID0gcGsxO1xuICAgICAgV1tsZW4gKyBrXSA9IHBrMiAtIHBrMTsgLy8gayBpcyBub3cgYW4gZWxlbWVudFxuXG4gICAgICBXW2VsZW4gKyBrXSA9IC0yOyAvLyBGaW5kIHNldCBkaWZmZXJlbmNlcy4gVGhlIHNjYW4xIGZ1bmN0aW9uIG5vdyBjb21wdXRlcyB0aGUgc2V0IGRpZmZlcmVuY2VzIHxMZSBcXCBMa3wgZm9yIGFsbCBlbGVtZW50cyBlLiBBdCB0aGUgc3RhcnQgb2YgdGhlXG4gICAgICAvLyBzY2FuLCBubyBlbnRyeSBpbiB0aGUgdyBhcnJheSBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbWFyay5cbiAgICAgIC8vIGNsZWFyIHcgaWYgbmVjZXNzYXJ5XG5cbiAgICAgIG1hcmsgPSBfd2NsZWFyKG1hcmssIGxlbWF4LCBXLCB3LCBuKTsgLy8gc2NhbiAxOiBmaW5kIHxMZVxcTGt8XG5cbiAgICAgIGZvciAocGsgPSBwazE7IHBrIDwgcGsyOyBwaysrKSB7XG4gICAgICAgIGkgPSBjaW5kZXhbcGtdOyAvLyBjaGVjayBpZiBXW2VsZW4gKyBpXSBlbXB0eSwgc2tpcCBpdFxuXG4gICAgICAgIGlmICgoZWxuID0gV1tlbGVuICsgaV0pIDw9IDApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSAvLyBXW252ICsgaV0gd2FzIG5lZ2F0ZWRcblxuXG4gICAgICAgIG52aSA9IC1XW252ICsgaV07XG4gICAgICAgIHZhciB3bnZpID0gbWFyayAtIG52aTsgLy8gc2NhbiBFaVxuXG4gICAgICAgIGZvciAocCA9IGNwdHJbaV0sIHAxID0gY3B0cltpXSArIGVsbiAtIDE7IHAgPD0gcDE7IHArKykge1xuICAgICAgICAgIGUgPSBjaW5kZXhbcF07XG5cbiAgICAgICAgICBpZiAoV1t3ICsgZV0gPj0gbWFyaykge1xuICAgICAgICAgICAgLy8gZGVjcmVtZW50IHxMZVxcTGt8XG4gICAgICAgICAgICBXW3cgKyBlXSAtPSBudmk7XG4gICAgICAgICAgfSBlbHNlIGlmIChXW3cgKyBlXSAhPT0gMCkge1xuICAgICAgICAgICAgLy8gZW5zdXJlIGUgaXMgYSBsaXZlIGVsZW1lbnQsIDFzdCB0aW1lIGUgc2VlbiBpbiBzY2FuIDFcbiAgICAgICAgICAgIFdbdyArIGVdID0gV1tkZWdyZWUgKyBlXSArIHdudmk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIGRlZ3JlZSB1cGRhdGVcbiAgICAgIC8vIFRoZSBzZWNvbmQgcGFzcyBjb21wdXRlcyB0aGUgYXBwcm94aW1hdGUgZGVncmVlIGRpLCBwcnVuZXMgdGhlIHNldHMgRWkgYW5kIEFpLCBhbmQgY29tcHV0ZXMgYSBoYXNoXG4gICAgICAvLyBmdW5jdGlvbiBoKGkpIGZvciBhbGwgbm9kZXMgaW4gTGsuXG4gICAgICAvLyBzY2FuMjogZGVncmVlIHVwZGF0ZVxuXG5cbiAgICAgIGZvciAocGsgPSBwazE7IHBrIDwgcGsyOyBwaysrKSB7XG4gICAgICAgIC8vIGNvbnNpZGVyIG5vZGUgaSBpbiBMa1xuICAgICAgICBpID0gY2luZGV4W3BrXTtcbiAgICAgICAgcDEgPSBjcHRyW2ldO1xuICAgICAgICBwMiA9IHAxICsgV1tlbGVuICsgaV0gLSAxO1xuICAgICAgICBwbiA9IHAxOyAvLyBzY2FuIEVpXG5cbiAgICAgICAgZm9yIChoID0gMCwgZCA9IDAsIHAgPSBwMTsgcCA8PSBwMjsgcCsrKSB7XG4gICAgICAgICAgZSA9IGNpbmRleFtwXTsgLy8gY2hlY2sgZSBpcyBhbiB1bmFic29yYmVkIGVsZW1lbnRcblxuICAgICAgICAgIGlmIChXW3cgKyBlXSAhPT0gMCkge1xuICAgICAgICAgICAgLy8gZGV4dCA9IHxMZVxcTGt8XG4gICAgICAgICAgICB2YXIgZGV4dCA9IFdbdyArIGVdIC0gbWFyaztcblxuICAgICAgICAgICAgaWYgKGRleHQgPiAwKSB7XG4gICAgICAgICAgICAgIC8vIHN1bSB1cCB0aGUgc2V0IGRpZmZlcmVuY2VzXG4gICAgICAgICAgICAgIGQgKz0gZGV4dDsgLy8ga2VlcCBlIGluIEVpXG5cbiAgICAgICAgICAgICAgY2luZGV4W3BuKytdID0gZTsgLy8gY29tcHV0ZSB0aGUgaGFzaCBvZiBub2RlIGlcblxuICAgICAgICAgICAgICBoICs9IGU7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBhZ2dyZXNzaXZlIGFic29yYi4gZS0+a1xuICAgICAgICAgICAgICBjcHRyW2VdID0gKDAsIF9jc0ZsaXAuY3NGbGlwKShrKTsgLy8gZSBpcyBhIGRlYWQgZWxlbWVudFxuXG4gICAgICAgICAgICAgIFdbdyArIGVdID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gV1tlbGVuICsgaV0gPSB8RWl8XG5cblxuICAgICAgICBXW2VsZW4gKyBpXSA9IHBuIC0gcDEgKyAxO1xuICAgICAgICB2YXIgcDMgPSBwbjtcbiAgICAgICAgdmFyIHA0ID0gcDEgKyBXW2xlbiArIGldOyAvLyBwcnVuZSBlZGdlcyBpbiBBaVxuXG4gICAgICAgIGZvciAocCA9IHAyICsgMTsgcCA8IHA0OyBwKyspIHtcbiAgICAgICAgICBqID0gY2luZGV4W3BdOyAvLyBjaGVjayBub2RlIGogZGVhZCBvciBpbiBMa1xuXG4gICAgICAgICAgdmFyIG52aiA9IFdbbnYgKyBqXTtcblxuICAgICAgICAgIGlmIChudmogPD0gMCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfSAvLyBkZWdyZWUoaSkgKz0gfGp8XG5cblxuICAgICAgICAgIGQgKz0gbnZqOyAvLyBwbGFjZSBqIGluIG5vZGUgbGlzdCBvZiBpXG5cbiAgICAgICAgICBjaW5kZXhbcG4rK10gPSBqOyAvLyBjb21wdXRlIGhhc2ggZm9yIG5vZGUgaVxuXG4gICAgICAgICAgaCArPSBqO1xuICAgICAgICB9IC8vIGNoZWNrIGZvciBtYXNzIGVsaW1pbmF0aW9uXG5cblxuICAgICAgICBpZiAoZCA9PT0gMCkge1xuICAgICAgICAgIC8vIGFic29yYiBpIGludG8ga1xuICAgICAgICAgIGNwdHJbaV0gPSAoMCwgX2NzRmxpcC5jc0ZsaXApKGspO1xuICAgICAgICAgIG52aSA9IC1XW252ICsgaV07IC8vIHxMa3wgLT0gfGl8XG5cbiAgICAgICAgICBkayAtPSBudmk7IC8vIHxrfCArPSBXW252ICsgaV1cblxuICAgICAgICAgIG52ayArPSBudmk7XG4gICAgICAgICAgbmVsICs9IG52aTtcbiAgICAgICAgICBXW252ICsgaV0gPSAwOyAvLyBub2RlIGkgaXMgZGVhZFxuXG4gICAgICAgICAgV1tlbGVuICsgaV0gPSAtMTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB1cGRhdGUgZGVncmVlKGkpXG4gICAgICAgICAgV1tkZWdyZWUgKyBpXSA9IE1hdGgubWluKFdbZGVncmVlICsgaV0sIGQpOyAvLyBtb3ZlIGZpcnN0IG5vZGUgdG8gZW5kXG5cbiAgICAgICAgICBjaW5kZXhbcG5dID0gY2luZGV4W3AzXTsgLy8gbW92ZSAxc3QgZWwuIHRvIGVuZCBvZiBFaVxuXG4gICAgICAgICAgY2luZGV4W3AzXSA9IGNpbmRleFtwMV07IC8vIGFkZCBrIGFzIDFzdCBlbGVtZW50IGluIG9mIEVpXG5cbiAgICAgICAgICBjaW5kZXhbcDFdID0gazsgLy8gbmV3IGxlbiBvZiBhZGouIGxpc3Qgb2Ygbm9kZSBpXG5cbiAgICAgICAgICBXW2xlbiArIGldID0gcG4gLSBwMSArIDE7IC8vIGZpbmFsaXplIGhhc2ggb2YgaVxuXG4gICAgICAgICAgaCA9IChoIDwgMCA/IC1oIDogaCkgJSBuOyAvLyBwbGFjZSBpIGluIGhhc2ggYnVja2V0XG5cbiAgICAgICAgICBXW25leHQgKyBpXSA9IFdbaGhlYWQgKyBoXTtcbiAgICAgICAgICBXW2hoZWFkICsgaF0gPSBpOyAvLyBzYXZlIGhhc2ggb2YgaSBpbiBsYXN0W2ldXG5cbiAgICAgICAgICBsYXN0W2ldID0gaDtcbiAgICAgICAgfVxuICAgICAgfSAvLyBmaW5hbGl6ZSB8TGt8XG5cblxuICAgICAgV1tkZWdyZWUgKyBrXSA9IGRrO1xuICAgICAgbGVtYXggPSBNYXRoLm1heChsZW1heCwgZGspOyAvLyBjbGVhciB3XG5cbiAgICAgIG1hcmsgPSBfd2NsZWFyKG1hcmsgKyBsZW1heCwgbGVtYXgsIFcsIHcsIG4pOyAvLyBTdXBlcm5vZGUgZGV0ZWN0aW9uLiBTdXBlcm5vZGUgZGV0ZWN0aW9uIHJlbGllcyBvbiB0aGUgaGFzaCBmdW5jdGlvbiBoKGkpIGNvbXB1dGVkIGZvciBlYWNoIG5vZGUgaS5cbiAgICAgIC8vIElmIHR3byBub2RlcyBoYXZlIGlkZW50aWNhbCBhZGphY2VuY3kgbGlzdHMsIHRoZWlyIGhhc2ggZnVuY3Rpb25zIHdpbCBiZSBpZGVudGljYWwuXG5cbiAgICAgIGZvciAocGsgPSBwazE7IHBrIDwgcGsyOyBwaysrKSB7XG4gICAgICAgIGkgPSBjaW5kZXhbcGtdOyAvLyBjaGVjayBpIGlzIGRlYWQsIHNraXAgaXRcblxuICAgICAgICBpZiAoV1tudiArIGldID49IDApIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSAvLyBzY2FuIGhhc2ggYnVja2V0IG9mIG5vZGUgaVxuXG5cbiAgICAgICAgaCA9IGxhc3RbaV07XG4gICAgICAgIGkgPSBXW2hoZWFkICsgaF07IC8vIGhhc2ggYnVja2V0IHdpbGwgYmUgZW1wdHlcblxuICAgICAgICBXW2hoZWFkICsgaF0gPSAtMTtcblxuICAgICAgICBmb3IgKDsgaSAhPT0gLTEgJiYgV1tuZXh0ICsgaV0gIT09IC0xOyBpID0gV1tuZXh0ICsgaV0sIG1hcmsrKykge1xuICAgICAgICAgIGxuID0gV1tsZW4gKyBpXTtcbiAgICAgICAgICBlbG4gPSBXW2VsZW4gKyBpXTtcblxuICAgICAgICAgIGZvciAocCA9IGNwdHJbaV0gKyAxOyBwIDw9IGNwdHJbaV0gKyBsbiAtIDE7IHArKykge1xuICAgICAgICAgICAgV1t3ICsgY2luZGV4W3BdXSA9IG1hcms7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGpsYXN0ID0gaTsgLy8gY29tcGFyZSBpIHdpdGggYWxsIGpcblxuICAgICAgICAgIGZvciAoaiA9IFdbbmV4dCArIGldOyBqICE9PSAtMTspIHtcbiAgICAgICAgICAgIHZhciBvayA9IFdbbGVuICsgal0gPT09IGxuICYmIFdbZWxlbiArIGpdID09PSBlbG47XG5cbiAgICAgICAgICAgIGZvciAocCA9IGNwdHJbal0gKyAxOyBvayAmJiBwIDw9IGNwdHJbal0gKyBsbiAtIDE7IHArKykge1xuICAgICAgICAgICAgICAvLyBjb21wYXJlIGkgYW5kIGpcbiAgICAgICAgICAgICAgaWYgKFdbdyArIGNpbmRleFtwXV0gIT09IG1hcmspIHtcbiAgICAgICAgICAgICAgICBvayA9IDA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gLy8gY2hlY2sgaSBhbmQgaiBhcmUgaWRlbnRpY2FsXG5cblxuICAgICAgICAgICAgaWYgKG9rKSB7XG4gICAgICAgICAgICAgIC8vIGFic29yYiBqIGludG8gaVxuICAgICAgICAgICAgICBjcHRyW2pdID0gKDAsIF9jc0ZsaXAuY3NGbGlwKShpKTtcbiAgICAgICAgICAgICAgV1tudiArIGldICs9IFdbbnYgKyBqXTtcbiAgICAgICAgICAgICAgV1tudiArIGpdID0gMDsgLy8gbm9kZSBqIGlzIGRlYWRcblxuICAgICAgICAgICAgICBXW2VsZW4gKyBqXSA9IC0xOyAvLyBkZWxldGUgaiBmcm9tIGhhc2ggYnVja2V0XG5cbiAgICAgICAgICAgICAgaiA9IFdbbmV4dCArIGpdO1xuICAgICAgICAgICAgICBXW25leHQgKyBqbGFzdF0gPSBqO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gaiBhbmQgaSBhcmUgZGlmZmVyZW50XG4gICAgICAgICAgICAgIGpsYXN0ID0gajtcbiAgICAgICAgICAgICAgaiA9IFdbbmV4dCArIGpdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyBGaW5hbGl6ZSBuZXcgZWxlbWVudC4gVGhlIGVsaW1pbmF0aW9uIG9mIG5vZGUgayBpcyBuZWFybHkgY29tcGxldGUuIEFsbCBub2RlcyBpIGluIExrIGFyZSBzY2FubmVkIG9uZSBsYXN0IHRpbWUuXG4gICAgICAvLyBOb2RlIGkgaXMgcmVtb3ZlZCBmcm9tIExrIGlmIGl0IGlzIGRlYWQuIFRoZSBmbGFnZ2VkIHN0YXR1cyBvZiBudltpXSBpcyBjbGVhcmVkLlxuXG5cbiAgICAgIGZvciAocCA9IHBrMSwgcGsgPSBwazE7IHBrIDwgcGsyOyBwaysrKSB7XG4gICAgICAgIGkgPSBjaW5kZXhbcGtdOyAvLyBjaGVjayAgaSBpcyBkZWFkLCBza2lwIGl0XG5cbiAgICAgICAgaWYgKChudmkgPSAtV1tudiArIGldKSA8PSAwKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH0gLy8gcmVzdG9yZSBXW252ICsgaV1cblxuXG4gICAgICAgIFdbbnYgKyBpXSA9IG52aTsgLy8gY29tcHV0ZSBleHRlcm5hbCBkZWdyZWUoaSlcblxuICAgICAgICBkID0gV1tkZWdyZWUgKyBpXSArIGRrIC0gbnZpO1xuICAgICAgICBkID0gTWF0aC5taW4oZCwgbiAtIG5lbCAtIG52aSk7XG5cbiAgICAgICAgaWYgKFdbaGVhZCArIGRdICE9PSAtMSkge1xuICAgICAgICAgIGxhc3RbV1toZWFkICsgZF1dID0gaTtcbiAgICAgICAgfSAvLyBwdXQgaSBiYWNrIGluIGRlZ3JlZSBsaXN0XG5cblxuICAgICAgICBXW25leHQgKyBpXSA9IFdbaGVhZCArIGRdO1xuICAgICAgICBsYXN0W2ldID0gLTE7XG4gICAgICAgIFdbaGVhZCArIGRdID0gaTsgLy8gZmluZCBuZXcgbWluaW11bSBkZWdyZWVcblxuICAgICAgICBtaW5kZWcgPSBNYXRoLm1pbihtaW5kZWcsIGQpO1xuICAgICAgICBXW2RlZ3JlZSArIGldID0gZDsgLy8gcGxhY2UgaSBpbiBMa1xuXG4gICAgICAgIGNpbmRleFtwKytdID0gaTtcbiAgICAgIH0gLy8gIyBub2RlcyBhYnNvcmJlZCBpbnRvIGtcblxuXG4gICAgICBXW252ICsga10gPSBudms7IC8vIGxlbmd0aCBvZiBhZGogbGlzdCBvZiBlbGVtZW50IGtcblxuICAgICAgaWYgKChXW2xlbiArIGtdID0gcCAtIHBrMSkgPT09IDApIHtcbiAgICAgICAgLy8gayBpcyBhIHJvb3Qgb2YgdGhlIHRyZWVcbiAgICAgICAgY3B0cltrXSA9IC0xOyAvLyBrIGlzIG5vdyBhIGRlYWQgZWxlbWVudFxuXG4gICAgICAgIFdbdyArIGtdID0gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKGVsZW5rICE9PSAwKSB7XG4gICAgICAgIC8vIGZyZWUgdW51c2VkIHNwYWNlIGluIExrXG4gICAgICAgIGNueiA9IHA7XG4gICAgICB9XG4gICAgfSAvLyBQb3N0b3JkZXJpbmcuIFRoZSBlbGltaW5hdGlvbiBpcyBjb21wbGV0ZSwgYnV0IG5vIHBlcm11dGF0aW9uIGhhcyBiZWVuIGNvbXB1dGVkLiBBbGwgdGhhdCBpcyBsZWZ0XG4gICAgLy8gb2YgdGhlIGdyYXBoIGlzIHRoZSBhc3NlbWJseSB0cmVlIChwdHIpIGFuZCBhIHNldCBvZiBkZWFkIG5vZGVzIGFuZCBlbGVtZW50cyAoaSBpcyBhIGRlYWQgbm9kZSBpZlxuICAgIC8vIG52W2ldIGlzIHplcm8gYW5kIGEgZGVhZCBlbGVtZW50IGlmIG52W2ldID4gMCkuIEl0IGlzIGZyb20gdGhpcyBpbmZvcm1hdGlvbiBvbmx5IHRoYXQgdGhlIGZpbmFsIHBlcm11dGF0aW9uXG4gICAgLy8gaXMgY29tcHV0ZWQuIFRoZSB0cmVlIGlzIHJlc3RvcmVkIGJ5IHVuZmxpcHBpbmcgYWxsIG9mIHB0ci5cbiAgICAvLyBmaXggYXNzZW1ibHkgdHJlZVxuXG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICBjcHRyW2ldID0gKDAsIF9jc0ZsaXAuY3NGbGlwKShjcHRyW2ldKTtcbiAgICB9XG5cbiAgICBmb3IgKGogPSAwOyBqIDw9IG47IGorKykge1xuICAgICAgV1toZWFkICsgal0gPSAtMTtcbiAgICB9IC8vIHBsYWNlIHVub3JkZXJlZCBub2RlcyBpbiBsaXN0c1xuXG5cbiAgICBmb3IgKGogPSBuOyBqID49IDA7IGotLSkge1xuICAgICAgLy8gc2tpcCBpZiBqIGlzIGFuIGVsZW1lbnRcbiAgICAgIGlmIChXW252ICsgal0gPiAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBwbGFjZSBqIGluIGxpc3Qgb2YgaXRzIHBhcmVudFxuXG5cbiAgICAgIFdbbmV4dCArIGpdID0gV1toZWFkICsgY3B0cltqXV07XG4gICAgICBXW2hlYWQgKyBjcHRyW2pdXSA9IGo7XG4gICAgfSAvLyBwbGFjZSBlbGVtZW50cyBpbiBsaXN0c1xuXG5cbiAgICBmb3IgKGUgPSBuOyBlID49IDA7IGUtLSkge1xuICAgICAgLy8gc2tpcCB1bmxlc3MgZSBpcyBhbiBlbGVtZW50XG4gICAgICBpZiAoV1tudiArIGVdIDw9IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChjcHRyW2VdICE9PSAtMSkge1xuICAgICAgICAvLyBwbGFjZSBlIGluIGxpc3Qgb2YgaXRzIHBhcmVudFxuICAgICAgICBXW25leHQgKyBlXSA9IFdbaGVhZCArIGNwdHJbZV1dO1xuICAgICAgICBXW2hlYWQgKyBjcHRyW2VdXSA9IGU7XG4gICAgICB9XG4gICAgfSAvLyBwb3N0b3JkZXIgdGhlIGFzc2VtYmx5IHRyZWVcblxuXG4gICAgZm9yIChrID0gMCwgaSA9IDA7IGkgPD0gbjsgaSsrKSB7XG4gICAgICBpZiAoY3B0cltpXSA9PT0gLTEpIHtcbiAgICAgICAgayA9ICgwLCBfY3NUZGZzLmNzVGRmcykoaSwgaywgVywgaGVhZCwgbmV4dCwgUCwgdyk7XG4gICAgICB9XG4gICAgfSAvLyByZW1vdmUgbGFzdCBpdGVtIGluIGFycmF5XG5cblxuICAgIFAuc3BsaWNlKFAubGVuZ3RoIC0gMSwgMSk7IC8vIHJldHVybiBQXG5cbiAgICByZXR1cm4gUDtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZXMgdGhlIG1hdHJpeCB0aGF0IHdpbGwgYmUgdXNlZCBieSB0aGUgYXBwcm94aW1hdGUgbWluaW11bSBkZWdyZWUgb3JkZXJpbmcgYWxnb3JpdGhtLiBUaGUgZnVuY3Rpb24gYWNjZXB0cyB0aGUgbWF0cml4IE0gYXMgaW5wdXQgYW5kIHJldHVybnMgYSBwZXJtdXRhdGlvblxuICAgKiB2ZWN0b3IgUC4gVGhlIGFtZCBhbGdvcml0aG0gb3BlcmF0ZXMgb24gYSBzeW1tZXRyaXggbWF0cml4LCBzbyBvbmUgb2YgdGhyZWUgc3ltbWV0cmljIG1hdHJpY2VzIGlzIGZvcm1lZC5cbiAgICpcbiAgICogT3JkZXI6IDBcbiAgICogICBBIG5hdHVyYWwgb3JkZXJpbmcgUD1udWxsIG1hdHJpeCBpcyByZXR1cm5lZC5cbiAgICpcbiAgICogT3JkZXI6IDFcbiAgICogICBNYXRyaXggbXVzdCBiZSBzcXVhcmUuIFRoaXMgaXMgYXBwcm9wcmlhdGUgZm9yIGEgQ2hvbGVza3kgb3IgTFUgZmFjdG9yaXphdGlvbi5cbiAgICogICBQID0gTSArIE0nXG4gICAqXG4gICAqIE9yZGVyOiAyXG4gICAqICAgRGVuc2UgY29sdW1ucyBmcm9tIE0nIGFyZSBkcm9wcGVkLCBNIHJlY3JlYXRlZCBmcm9tIE0nLiBUaGlzIGlzIGFwcHJvcHJpYXRlZm9yIExVIGZhY3Rvcml6YXRpb24gb2YgdW5zeW1tZXRyaWMgbWF0cmljZXMuXG4gICAqICAgUCA9IE0nICogTVxuICAgKlxuICAgKiBPcmRlcjogM1xuICAgKiAgIFRoaXMgaXMgYmVzdCB1c2VkIGZvciBRUiBmYWN0b3JpemF0aW9uIG9yIExVIGZhY3Rvcml6YXRpb24gaXMgbWF0cml4IE0gaGFzIG5vIGRlbnNlIHJvd3MuIEEgZGVuc2Ugcm93IGlzIGEgcm93IHdpdGggbW9yZSB0aGFuIDEwKnNxcihjb2x1bW5zKSBlbnRyaWVzLlxuICAgKiAgIFAgPSBNJyAqIE1cbiAgICovXG5cbiAgZnVuY3Rpb24gX2NyZWF0ZVRhcmdldE1hdHJpeChvcmRlciwgYSwgbSwgbiwgZGVuc2UpIHtcbiAgICAvLyBjb21wdXRlIEEnXG4gICAgdmFyIGF0ID0gdHJhbnNwb3NlKGEpOyAvLyBjaGVjayBvcmRlciA9IDEsIG1hdHJpeCBtdXN0IGJlIHNxdWFyZVxuXG4gICAgaWYgKG9yZGVyID09PSAxICYmIG4gPT09IG0pIHtcbiAgICAgIC8vIEMgPSBBICsgQSdcbiAgICAgIHJldHVybiBhZGQoYSwgYXQpO1xuICAgIH0gLy8gY2hlY2sgb3JkZXIgPSAyLCBkcm9wIGRlbnNlIGNvbHVtbnMgZnJvbSBNJ1xuXG5cbiAgICBpZiAob3JkZXIgPT09IDIpIHtcbiAgICAgIC8vIHRyYW5zcG9zZSBhcnJheXNcbiAgICAgIHZhciB0aW5kZXggPSBhdC5faW5kZXg7XG4gICAgICB2YXIgdHB0ciA9IGF0Ll9wdHI7IC8vIG5ldyBjb2x1bW4gaW5kZXhcblxuICAgICAgdmFyIHAyID0gMDsgLy8gbG9vcCBBJyBjb2x1bW5zIChyb3dzKVxuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG07IGorKykge1xuICAgICAgICAvLyBjb2x1bW4gaiBvZiBBVCBzdGFydHMgaGVyZVxuICAgICAgICB2YXIgcCA9IHRwdHJbal07IC8vIG5ldyBjb2x1bW4gaiBzdGFydHMgaGVyZVxuXG4gICAgICAgIHRwdHJbal0gPSBwMjsgLy8gc2tpcCBkZW5zZSBjb2wgalxuXG4gICAgICAgIGlmICh0cHRyW2ogKyAxXSAtIHAgPiBkZW5zZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9IC8vIG1hcCByb3dzIGluIGNvbHVtbiBqIG9mIEFcblxuXG4gICAgICAgIGZvciAodmFyIHAxID0gdHB0cltqICsgMV07IHAgPCBwMTsgcCsrKSB7XG4gICAgICAgICAgdGluZGV4W3AyKytdID0gdGluZGV4W3BdO1xuICAgICAgICB9XG4gICAgICB9IC8vIGZpbmFsaXplIEFUXG5cblxuICAgICAgdHB0clttXSA9IHAyOyAvLyByZWNyZWF0ZSBBIGZyb20gbmV3IHRyYW5zcG9zZSBtYXRyaXhcblxuICAgICAgYSA9IHRyYW5zcG9zZShhdCk7IC8vIHVzZSBBJyAqIEFcblxuICAgICAgcmV0dXJuIG11bHRpcGx5KGF0LCBhKTtcbiAgICB9IC8vIHVzZSBBJyAqIEEsIHNxdWFyZSBvciByZWN0YW5ndWxhciBtYXRyaXhcblxuXG4gICAgcmV0dXJuIG11bHRpcGx5KGF0LCBhKTtcbiAgfVxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBxdW90aWVudCBncmFwaC4gVGhlcmUgYXJlIGZvdXIga2luZCBvZiBub2RlcyBhbmQgZWxlbWVudHMgdGhhdCBtdXN0IGJlIHJlcHJlc2VudGVkOlxuICAgKlxuICAgKiAgLSBBIGxpdmUgbm9kZSBpcyBhIG5vZGUgaSAob3IgYSBzdXBlcm5vZGUpIHRoYXQgaGFzIG5vdCBiZWVuIHNlbGVjdGVkIGFzIGEgcGl2b3QgbmFkIGhhcyBub3QgYmVlbiBtZXJnZWQgaW50byBhbm90aGVyIHN1cGVybm9kZS5cbiAgICogIC0gQSBkZWFkIG5vZGUgaSBpcyBvbmUgdGhhdCBoYXMgYmVlbiByZW1vdmVkIGZyb20gdGhlIGdyYXBoLCBoYXZpbmcgYmVlbiBhYnNvcnZlZCBpbnRvIHIgPSBmbGlwKHB0cltpXSkuXG4gICAqICAtIEEgbGl2ZSBlbGVtZW50IGUgaXMgb25lIHRoYXQgaXMgaW4gdGhlIGdyYXBoLCBoYXZpbmcgYmVlbiBmb3JtZWQgd2hlbiBub2RlIGUgd2FzIHNlbGVjdGVkIGFzIHRoZSBwaXZvdC5cbiAgICogIC0gQSBkZWFkIGVsZW1lbnQgZSBpcyBvbmUgdGhhdCBoYXMgYmVubiBhYnNvcnZlZCBpbnRvIGEgc3Vic2VxdWVudCBlbGVtZW50IHMgPSBmbGlwKHB0cltlXSkuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2luaXRpYWxpemVRdW90aWVudEdyYXBoKG4sIGNwdHIsIFcsIGxlbiwgaGVhZCwgbGFzdCwgbmV4dCwgaGhlYWQsIG52LCB3LCBlbGVuLCBkZWdyZWUpIHtcbiAgICAvLyBJbml0aWFsaXplIHF1b3RpZW50IGdyYXBoXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgIFdbbGVuICsga10gPSBjcHRyW2sgKyAxXSAtIGNwdHJba107XG4gICAgfVxuXG4gICAgV1tsZW4gKyBuXSA9IDA7IC8vIGluaXRpYWxpemUgd29ya3NwYWNlXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBuOyBpKyspIHtcbiAgICAgIC8vIGRlZ3JlZSBsaXN0IGkgaXMgZW1wdHlcbiAgICAgIFdbaGVhZCArIGldID0gLTE7XG4gICAgICBsYXN0W2ldID0gLTE7XG4gICAgICBXW25leHQgKyBpXSA9IC0xOyAvLyBoYXNoIGxpc3QgaSBpcyBlbXB0eVxuXG4gICAgICBXW2hoZWFkICsgaV0gPSAtMTsgLy8gbm9kZSBpIGlzIGp1c3Qgb25lIG5vZGVcblxuICAgICAgV1tudiArIGldID0gMTsgLy8gbm9kZSBpIGlzIGFsaXZlXG5cbiAgICAgIFdbdyArIGldID0gMTsgLy8gRWsgb2Ygbm9kZSBpIGlzIGVtcHR5XG5cbiAgICAgIFdbZWxlbiArIGldID0gMDsgLy8gZGVncmVlIG9mIG5vZGUgaVxuXG4gICAgICBXW2RlZ3JlZSArIGldID0gV1tsZW4gKyBpXTtcbiAgICB9IC8vIGNsZWFyIHdcblxuXG4gICAgdmFyIG1hcmsgPSBfd2NsZWFyKDAsIDAsIFcsIHcsIG4pOyAvLyBuIGlzIGEgZGVhZCBlbGVtZW50XG5cblxuICAgIFdbZWxlbiArIG5dID0gLTI7IC8vIG4gaXMgYSByb290IG9mIGFzc2VtYmx5IHRyZWVcblxuICAgIGNwdHJbbl0gPSAtMTsgLy8gbiBpcyBhIGRlYWQgZWxlbWVudFxuXG4gICAgV1t3ICsgbl0gPSAwOyAvLyByZXR1cm4gbWFya1xuXG4gICAgcmV0dXJuIG1hcms7XG4gIH1cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgZGVncmVlIGxpc3RzLiBFYWNoIG5vZGUgaXMgcGxhY2VkIGluIGl0cyBkZWdyZWUgbGlzdHMuIE5vZGVzIG9mIHplcm8gZGVncmVlIGFyZSBlbGltaW5hdGVkIGltbWVkaWF0ZWx5LiBOb2RlcyB3aXRoXG4gICAqIGRlZ3JlZSA+PSBkZW5zZSBhcmUgYWxzb2wgZWxpbWluYXRlZCBhbmQgbWVyZ2VkIGludG8gYSBwbGFjZWhvbGRlciBub2RlIG4sIGEgZGVhZCBlbGVtZW50LiBUaGVzIG5vZGVzIHdpbGwgYXBwZXJhIGxhc3QgaW4gdGhlXG4gICAqIG91dHB1dCBwZXJtdXRhdGlvbiBwLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9pbml0aWFsaXplRGVncmVlTGlzdHMobiwgY3B0ciwgVywgZGVncmVlLCBlbGVuLCB3LCBkZW5zZSwgbnYsIGhlYWQsIGxhc3QsIG5leHQpIHtcbiAgICAvLyByZXN1bHRcbiAgICB2YXIgbmVsID0gMDsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgLy8gZGVncmVlIEAgaVxuICAgICAgdmFyIGQgPSBXW2RlZ3JlZSArIGldOyAvLyBjaGVjayBub2RlIGkgaXMgZW1wdHlcblxuICAgICAgaWYgKGQgPT09IDApIHtcbiAgICAgICAgLy8gZWxlbWVudCBpIGlzIGRlYWRcbiAgICAgICAgV1tlbGVuICsgaV0gPSAtMjtcbiAgICAgICAgbmVsKys7IC8vIGkgaXMgYSByb290IG9mIGFzc2VtYmx5IHRyZWVcblxuICAgICAgICBjcHRyW2ldID0gLTE7XG4gICAgICAgIFdbdyArIGldID0gMDtcbiAgICAgIH0gZWxzZSBpZiAoZCA+IGRlbnNlKSB7XG4gICAgICAgIC8vIGFic29yYiBpIGludG8gZWxlbWVudCBuXG4gICAgICAgIFdbbnYgKyBpXSA9IDA7IC8vIG5vZGUgaSBpcyBkZWFkXG5cbiAgICAgICAgV1tlbGVuICsgaV0gPSAtMTtcbiAgICAgICAgbmVsKys7XG4gICAgICAgIGNwdHJbaV0gPSAoMCwgX2NzRmxpcC5jc0ZsaXApKG4pO1xuICAgICAgICBXW252ICsgbl0rKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBoID0gV1toZWFkICsgZF07XG5cbiAgICAgICAgaWYgKGggIT09IC0xKSB7XG4gICAgICAgICAgbGFzdFtoXSA9IGk7XG4gICAgICAgIH0gLy8gcHV0IG5vZGUgaSBpbiBkZWdyZWUgbGlzdCBkXG5cblxuICAgICAgICBXW25leHQgKyBpXSA9IFdbaGVhZCArIGRdO1xuICAgICAgICBXW2hlYWQgKyBkXSA9IGk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG5lbDtcbiAgfVxuXG4gIGZ1bmN0aW9uIF93Y2xlYXIobWFyaywgbGVtYXgsIFcsIHcsIG4pIHtcbiAgICBpZiAobWFyayA8IDIgfHwgbWFyayArIGxlbWF4IDwgMCkge1xuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgICAgaWYgKFdbdyArIGtdICE9PSAwKSB7XG4gICAgICAgICAgV1t3ICsga10gPSAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG1hcmsgPSAyO1xuICAgIH0gLy8gYXQgdGhpcyBwb2ludCwgVyBbMC4ubi0xXSA8IG1hcmsgaG9sZHNcblxuXG4gICAgcmV0dXJuIG1hcms7XG4gIH1cblxuICBmdW5jdGlvbiBfZGlhZyhpLCBqKSB7XG4gICAgcmV0dXJuIGkgIT09IGo7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVDc0FtZCA9IGNyZWF0ZUNzQW1kOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDc0NvdW50cyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY3NMZWFmID0gcmVxdWlyZShcIi4vY3NMZWFmXCIpO1xuXG52YXIgbmFtZSA9ICdjc0NvdW50cyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0cmFuc3Bvc2UnXTtcbnZhciBjcmVhdGVDc0NvdW50cyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0cmFuc3Bvc2UgPSBfcmVmLnRyYW5zcG9zZTtcblxuICAvKipcbiAgICogQ29tcHV0ZXMgdGhlIGNvbHVtbiBjb3VudHMgdXNpbmcgdGhlIHVwcGVyIHRyaWFuZ3VsYXIgcGFydCBvZiBBLlxuICAgKiBJdCB0cmFuc3Bvc2VzIEEgaW50ZXJuYWxseSwgbm9uZSBvZiB0aGUgaW5wdXQgcGFyYW1ldGVycyBhcmUgbW9kaWZpZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICBUaGUgc3BhcnNlIG1hdHJpeCBBXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBhdGEgICAgICAgICBDb3VudCB0aGUgY29sdW1ucyBvZiBBJ0EgaW5zdGVhZFxuICAgKlxuICAgKiBAcmV0dXJuICAgICAgICAgICAgICAgICAgICAgQW4gYXJyYXkgb2Ygc2l6ZSBuIG9mIHRoZSBjb2x1bW4gY291bnRzIG9yIG51bGwgb24gZXJyb3JcbiAgICpcbiAgICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiAoYSwgcGFyZW50LCBwb3N0LCBhdGEpIHtcbiAgICAvLyBjaGVjayBpbnB1dHNcbiAgICBpZiAoIWEgfHwgIXBhcmVudCB8fCAhcG9zdCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSAvLyBhIG1hdHJpeCBhcnJheXNcblxuXG4gICAgdmFyIGFzaXplID0gYS5fc2l6ZTsgLy8gcm93cyBhbmQgY29sdW1uc1xuXG4gICAgdmFyIG0gPSBhc2l6ZVswXTtcbiAgICB2YXIgbiA9IGFzaXplWzFdOyAvLyB2YXJpYWJsZXNcblxuICAgIHZhciBpLCBqLCBrLCBKLCBwLCBwMCwgcDE7IC8vIHdvcmtzcGFjZSBzaXplXG5cbiAgICB2YXIgcyA9IDQgKiBuICsgKGF0YSA/IG4gKyBtICsgMSA6IDApOyAvLyBhbGxvY2F0ZSB3b3Jrc3BhY2VcblxuICAgIHZhciB3ID0gW107IC8vIChzKVxuXG4gICAgdmFyIGFuY2VzdG9yID0gMDsgLy8gZmlyc3QgbiBlbnRyaWVzXG5cbiAgICB2YXIgbWF4Zmlyc3QgPSBuOyAvLyBuZXh0IG4gZW50cmllc1xuXG4gICAgdmFyIHByZXZsZWFmID0gMiAqIG47IC8vIG5leHQgbiBlbnRyaWVzXG5cbiAgICB2YXIgZmlyc3QgPSAzICogbjsgLy8gbmV4dCBuIGVudHJpZXNcblxuICAgIHZhciBoZWFkID0gNCAqIG47IC8vIG5leHQgbiArIDEgZW50cmllcyAodXNlZCB3aGVuIGF0YSBpcyB0cnVlKVxuXG4gICAgdmFyIG5leHQgPSA1ICogbiArIDE7IC8vIGxhc3QgZW50cmllcyBpbiB3b3Jrc3BhY2VcbiAgICAvLyBjbGVhciB3b3Jrc3BhY2Ugd1swLi5zLTFdXG5cbiAgICBmb3IgKGsgPSAwOyBrIDwgczsgaysrKSB7XG4gICAgICB3W2tdID0gLTE7XG4gICAgfSAvLyBhbGxvY2F0ZSByZXN1bHRcblxuXG4gICAgdmFyIGNvbGNvdW50ID0gW107IC8vIChuKVxuICAgIC8vIEFUID0gQSdcblxuICAgIHZhciBhdCA9IHRyYW5zcG9zZShhKTsgLy8gYXQgYXJyYXlzXG5cbiAgICB2YXIgdGluZGV4ID0gYXQuX2luZGV4O1xuICAgIHZhciB0cHRyID0gYXQuX3B0cjsgLy8gZmluZCB3W2ZpcnN0ICsgal1cblxuICAgIGZvciAoayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgIGogPSBwb3N0W2tdOyAvLyBjb2xjb3VudFtqXT0xIGlmIGogaXMgYSBsZWFmXG5cbiAgICAgIGNvbGNvdW50W2pdID0gd1tmaXJzdCArIGpdID09PSAtMSA/IDEgOiAwO1xuXG4gICAgICBmb3IgKDsgaiAhPT0gLTEgJiYgd1tmaXJzdCArIGpdID09PSAtMTsgaiA9IHBhcmVudFtqXSkge1xuICAgICAgICB3W2ZpcnN0ICsgal0gPSBrO1xuICAgICAgfVxuICAgIH0gLy8gaW5pdGlhbGl6ZSBhdGEgaWYgbmVlZGVkXG5cblxuICAgIGlmIChhdGEpIHtcbiAgICAgIC8vIGludmVydCBwb3N0XG4gICAgICBmb3IgKGsgPSAwOyBrIDwgbjsgaysrKSB7XG4gICAgICAgIHdbcG9zdFtrXV0gPSBrO1xuICAgICAgfSAvLyBsb29wIHJvd3MgKGNvbHVtbnMgaW4gQVQpXG5cblxuICAgICAgZm9yIChpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgICAvLyB2YWx1ZXMgaW4gY29sdW1uIGkgb2YgQVRcbiAgICAgICAgZm9yIChrID0gbiwgcDAgPSB0cHRyW2ldLCBwMSA9IHRwdHJbaSArIDFdLCBwID0gcDA7IHAgPCBwMTsgcCsrKSB7XG4gICAgICAgICAgayA9IE1hdGgubWluKGssIHdbdGluZGV4W3BdXSk7XG4gICAgICAgIH0gLy8gcGxhY2Ugcm93IGkgaW4gbGlua2VkIGxpc3Qga1xuXG5cbiAgICAgICAgd1tuZXh0ICsgaV0gPSB3W2hlYWQgKyBrXTtcbiAgICAgICAgd1toZWFkICsga10gPSBpO1xuICAgICAgfVxuICAgIH0gLy8gZWFjaCBub2RlIGluIGl0cyBvd24gc2V0XG5cblxuICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIHdbYW5jZXN0b3IgKyBpXSA9IGk7XG4gICAgfVxuXG4gICAgZm9yIChrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgLy8gaiBpcyB0aGUga3RoIG5vZGUgaW4gcG9zdG9yZGVyZWQgZXRyZWVcbiAgICAgIGogPSBwb3N0W2tdOyAvLyBjaGVjayBqIGlzIG5vdCBhIHJvb3RcblxuICAgICAgaWYgKHBhcmVudFtqXSAhPT0gLTEpIHtcbiAgICAgICAgY29sY291bnRbcGFyZW50W2pdXS0tO1xuICAgICAgfSAvLyBKPWogZm9yIExMJz1BIGNhc2VcblxuXG4gICAgICBmb3IgKEogPSBhdGEgPyB3W2hlYWQgKyBrXSA6IGo7IEogIT09IC0xOyBKID0gYXRhID8gd1tuZXh0ICsgSl0gOiAtMSkge1xuICAgICAgICBmb3IgKHAgPSB0cHRyW0pdOyBwIDwgdHB0cltKICsgMV07IHArKykge1xuICAgICAgICAgIGkgPSB0aW5kZXhbcF07XG4gICAgICAgICAgdmFyIHIgPSAoMCwgX2NzTGVhZi5jc0xlYWYpKGksIGosIHcsIGZpcnN0LCBtYXhmaXJzdCwgcHJldmxlYWYsIGFuY2VzdG9yKTsgLy8gY2hlY2sgQShpLGopIGlzIGluIHNrZWxldG9uXG5cbiAgICAgICAgICBpZiAoci5qbGVhZiA+PSAxKSB7XG4gICAgICAgICAgICBjb2xjb3VudFtqXSsrO1xuICAgICAgICAgIH0gLy8gY2hlY2sgYWNjb3VudCBmb3Igb3ZlcmxhcCBpbiBxXG5cblxuICAgICAgICAgIGlmIChyLmpsZWFmID09PSAyKSB7XG4gICAgICAgICAgICBjb2xjb3VudFtyLnFdLS07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXJlbnRbal0gIT09IC0xKSB7XG4gICAgICAgIHdbYW5jZXN0b3IgKyBqXSA9IHBhcmVudFtqXTtcbiAgICAgIH1cbiAgICB9IC8vIHN1bSB1cCBjb2xjb3VudCdzIG9mIGVhY2ggY2hpbGRcblxuXG4gICAgZm9yIChqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgaWYgKHBhcmVudFtqXSAhPT0gLTEpIHtcbiAgICAgICAgY29sY291bnRbcGFyZW50W2pdXSArPSBjb2xjb3VudFtqXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY29sY291bnQ7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQ3NDb3VudHMgPSBjcmVhdGVDc0NvdW50czsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NEZnMgPSBjc0RmcztcblxudmFyIF9jc01hcmtlZCA9IHJlcXVpcmUoXCIuL2NzTWFya2VkXCIpO1xuXG52YXIgX2NzTWFyayA9IHJlcXVpcmUoXCIuL2NzTWFya1wiKTtcblxudmFyIF9jc1VuZmxpcCA9IHJlcXVpcmUoXCIuL2NzVW5mbGlwXCIpO1xuXG4vKipcbiAqIERlcHRoLWZpcnN0IHNlYXJjaCBjb21wdXRlcyB0aGUgbm9uemVybyBwYXR0ZXJuIHhpIG9mIHRoZSBkaXJlY3RlZCBncmFwaCBHIChNYXRyaXgpIHN0YXJ0aW5nXG4gKiBhdCBub2RlcyBpbiBCIChzZWUgY3NSZWFjaCgpKS5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gIGogICAgICAgICAgICAgICBUaGUgc3RhcnRpbmcgbm9kZSBmb3IgdGhlIERGUyBhbGdvcml0aG1cbiAqIEBwYXJhbSB7TWF0cml4fSAgZyAgICAgICAgICAgICAgIFRoZSBHIG1hdHJpeCB0byBzZWFyY2gsIHB0ciBhcnJheSBtb2RpZmllZCwgdGhlbiByZXN0b3JlZFxuICogQHBhcmFtIHtOdW1iZXJ9ICB0b3AgICAgICAgICAgICAgU3RhcnQgaW5kZXggaW4gc3RhY2sgeGlbdG9wLi5uLTFdXG4gKiBAcGFyYW0ge051bWJlcn0gIGsgICAgICAgICAgICAgICBUaGUga3RoIGNvbHVtbiBpbiBCXG4gKiBAcGFyYW0ge0FycmF5fSAgIHhpICAgICAgICAgICAgICBUaGUgbm9uemVybyBwYXR0ZXJuIHhpW3RvcF0gLi4geGlbbiAtIDFdLCBhbiBhcnJheSBvZiBzaXplID0gMiAqIG5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBuIGVudHJpZXMgaXMgdGhlIG5vbnplcm8gcGF0dGVybiwgdGhlIGxhc3QgbiBlbnRyaWVzIGlzIHRoZSBzdGFja1xuICogQHBhcmFtIHtBcnJheX0gICBwaW52ICAgICAgICAgICAgVGhlIGludmVyc2Ugcm93IHBlcm11dGF0aW9uIHZlY3RvciwgbXVzdCBiZSBudWxsIGZvciBMICogeCA9IGJcbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9ICAgICAgICAgICAgICAgICBOZXcgdmFsdWUgb2YgdG9wXG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NEZnMoaiwgZywgdG9wLCB4aSwgcGludikge1xuICAvLyBnIGFycmF5c1xuICB2YXIgaW5kZXggPSBnLl9pbmRleDtcbiAgdmFyIHB0ciA9IGcuX3B0cjtcbiAgdmFyIHNpemUgPSBnLl9zaXplOyAvLyBjb2x1bW5zXG5cbiAgdmFyIG4gPSBzaXplWzFdOyAvLyB2YXJzXG5cbiAgdmFyIGksIHAsIHAyOyAvLyBpbml0aWFsaXplIGhlYWRcblxuICB2YXIgaGVhZCA9IDA7IC8vIGluaXRpYWxpemUgdGhlIHJlY3Vyc2lvbiBzdGFja1xuXG4gIHhpWzBdID0gajsgLy8gbG9vcFxuXG4gIHdoaWxlIChoZWFkID49IDApIHtcbiAgICAvLyBnZXQgaiBmcm9tIHRoZSB0b3Agb2YgdGhlIHJlY3Vyc2lvbiBzdGFja1xuICAgIGogPSB4aVtoZWFkXTsgLy8gYXBwbHkgcGVybXV0YXRpb24gdmVjdG9yXG5cbiAgICB2YXIgam5ldyA9IHBpbnYgPyBwaW52W2pdIDogajsgLy8gY2hlY2sgbm9kZSBqIGlzIG1hcmtlZFxuXG4gICAgaWYgKCEoMCwgX2NzTWFya2VkLmNzTWFya2VkKShwdHIsIGopKSB7XG4gICAgICAvLyBtYXJrIG5vZGUgaiBhcyB2aXNpdGVkXG4gICAgICAoMCwgX2NzTWFyay5jc01hcmspKHB0ciwgaik7IC8vIHVwZGF0ZSBzdGFjayAobGFzdCBuIGVudHJpZXMgaW4geGkpXG5cbiAgICAgIHhpW24gKyBoZWFkXSA9IGpuZXcgPCAwID8gMCA6ICgwLCBfY3NVbmZsaXAuY3NVbmZsaXApKHB0cltqbmV3XSk7XG4gICAgfSAvLyBub2RlIGogZG9uZSBpZiBubyB1bnZpc2l0ZWQgbmVpZ2hib3JzXG5cblxuICAgIHZhciBkb25lID0gMTsgLy8gZXhhbWluZSBhbGwgbmVpZ2hib3JzIG9mIGosIHN0YWNrIChsYXN0IG4gZW50cmllcyBpbiB4aSlcblxuICAgIGZvciAocCA9IHhpW24gKyBoZWFkXSwgcDIgPSBqbmV3IDwgMCA/IDAgOiAoMCwgX2NzVW5mbGlwLmNzVW5mbGlwKShwdHJbam5ldyArIDFdKTsgcCA8IHAyOyBwKyspIHtcbiAgICAgIC8vIGNvbnNpZGVyIG5laWdoYm9yIG5vZGUgaVxuICAgICAgaSA9IGluZGV4W3BdOyAvLyBjaGVjayB3ZSBoYXZlIHZpc2l0ZWQgbm9kZSBpLCBza2lwIGl0XG5cbiAgICAgIGlmICgoMCwgX2NzTWFya2VkLmNzTWFya2VkKShwdHIsIGkpKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBwYXVzZSBkZXB0aC1maXJzdCBzZWFyY2ggb2Ygbm9kZSBqLCB1cGRhdGUgc3RhY2sgKGxhc3QgbiBlbnRyaWVzIGluIHhpKVxuXG5cbiAgICAgIHhpW24gKyBoZWFkXSA9IHA7IC8vIHN0YXJ0IGRmcyBhdCBub2RlIGlcblxuICAgICAgeGlbKytoZWFkXSA9IGk7IC8vIG5vZGUgaiBpcyBub3QgZG9uZVxuXG4gICAgICBkb25lID0gMDsgLy8gYnJlYWssIHRvIHN0YXJ0IGRmcyhpKVxuXG4gICAgICBicmVhaztcbiAgICB9IC8vIGNoZWNrIGRlcHRoLWZpcnN0IHNlYXJjaCBhdCBub2RlIGogaXMgZG9uZVxuXG5cbiAgICBpZiAoZG9uZSkge1xuICAgICAgLy8gcmVtb3ZlIGogZnJvbSB0aGUgcmVjdXJzaW9uIHN0YWNrXG4gICAgICBoZWFkLS07IC8vIGFuZCBwbGFjZSBpbiB0aGUgb3V0cHV0IHN0YWNrXG5cbiAgICAgIHhpWy0tdG9wXSA9IGo7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRvcDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NFdHJlZSA9IGNzRXRyZWU7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGVsaW1pbmF0aW9uIHRyZWUgb2YgTWF0cml4IEEgKHVzaW5nIHRyaXUoQSkpIG9yIHRoZVxuICogZWxpbWluYXRpb24gdHJlZSBvZiBBJ0Egd2l0aG91dCBmb3JtaW5nIEEnQS5cbiAqXG4gKiBAcGFyYW0ge01hdHJpeH0gIGEgICAgICAgICAgICAgICBUaGUgQSBNYXRyaXhcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYXRhICAgICAgICAgICAgIEEgdmFsdWUgb2YgdHJ1ZSB0aGUgZnVuY3Rpb24gY29tcHV0ZXMgdGhlIGV0cmVlIG9mIEEnQVxuICpcbiAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gKi9cbmZ1bmN0aW9uIGNzRXRyZWUoYSwgYXRhKSB7XG4gIC8vIGNoZWNrIGlucHV0c1xuICBpZiAoIWEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBhIGFycmF5c1xuXG5cbiAgdmFyIGFpbmRleCA9IGEuX2luZGV4O1xuICB2YXIgYXB0ciA9IGEuX3B0cjtcbiAgdmFyIGFzaXplID0gYS5fc2l6ZTsgLy8gcm93cyAmIGNvbHVtbnNcblxuICB2YXIgbSA9IGFzaXplWzBdO1xuICB2YXIgbiA9IGFzaXplWzFdOyAvLyBhbGxvY2F0ZSByZXN1bHRcblxuICB2YXIgcGFyZW50ID0gW107IC8vIChuKVxuICAvLyBhbGxvY2F0ZSB3b3Jrc3BhY2VcblxuICB2YXIgdyA9IFtdOyAvLyAobiArIChhdGEgPyBtIDogMCkpXG5cbiAgdmFyIGFuY2VzdG9yID0gMDsgLy8gZmlyc3QgbiBlbnRyaWVzIGluIHdcblxuICB2YXIgcHJldiA9IG47IC8vIGxhc3QgbSBlbnRyaWVzIChhdGEgPSB0cnVlKVxuXG4gIHZhciBpLCBpbmV4dDsgLy8gY2hlY2sgd2UgYXJlIGNhbGN1bGF0aW5nIEEnQVxuXG4gIGlmIChhdGEpIHtcbiAgICAvLyBpbml0aWFsaXplIHdvcmtzcGFjZVxuICAgIGZvciAoaSA9IDA7IGkgPCBtOyBpKyspIHtcbiAgICAgIHdbcHJldiArIGldID0gLTE7XG4gICAgfVxuICB9IC8vIGxvb3AgY29sdW1uc1xuXG5cbiAgZm9yICh2YXIgayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAvLyBub2RlIGsgaGFzIG5vIHBhcmVudCB5ZXRcbiAgICBwYXJlbnRba10gPSAtMTsgLy8gbm9yIGRvZXMgayBoYXZlIGFuIGFuY2VzdG9yXG5cbiAgICB3W2FuY2VzdG9yICsga10gPSAtMTsgLy8gdmFsdWVzIGluIGNvbHVtbiBrXG5cbiAgICBmb3IgKHZhciBwMCA9IGFwdHJba10sIHAxID0gYXB0cltrICsgMV0sIHAgPSBwMDsgcCA8IHAxOyBwKyspIHtcbiAgICAgIC8vIHJvd1xuICAgICAgdmFyIHIgPSBhaW5kZXhbcF07IC8vIG5vZGVcblxuICAgICAgaSA9IGF0YSA/IHdbcHJldiArIHJdIDogcjsgLy8gdHJhdmVyc2UgZnJvbSBpIHRvIGtcblxuICAgICAgZm9yICg7IGkgIT09IC0xICYmIGkgPCBrOyBpID0gaW5leHQpIHtcbiAgICAgICAgLy8gaW5leHQgPSBhbmNlc3RvciBvZiBpXG4gICAgICAgIGluZXh0ID0gd1thbmNlc3RvciArIGldOyAvLyBwYXRoIGNvbXByZXNzaW9uXG5cbiAgICAgICAgd1thbmNlc3RvciArIGldID0gazsgLy8gY2hlY2sgbm8gYW5jLiwgcGFyZW50IGlzIGtcblxuICAgICAgICBpZiAoaW5leHQgPT09IC0xKSB7XG4gICAgICAgICAgcGFyZW50W2ldID0gaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYXRhKSB7XG4gICAgICAgIHdbcHJldiArIHJdID0gaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFyZW50O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc0ZrZWVwID0gY3NGa2VlcDtcblxuLyoqXG4gKiBLZWVwcyBlbnRyaWVzIGluIHRoZSBtYXRyaXggd2hlbiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gcmV0dXJucyB0cnVlLCByZW1vdmVzIHRoZSBlbnRyeSBvdGhlcndpc2VcbiAqXG4gKiBAcGFyYW0ge01hdHJpeH0gICBhICAgICAgICAgICAgICBUaGUgc3BhcnNlIG1hdHJpeFxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgICAgICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uLCBmdW5jdGlvbiB3aWxsIGJlIGludm9rZWQgd2l0aCB0aGUgZm9sbG93aW5nIGFyZ3M6XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gVGhlIGVudHJ5IHJvd1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtIFRoZSBlbnRyeSBjb2x1bW5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGUgZW50cnkgdmFsdWVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBUaGUgc3RhdGUgcGFyYW1ldGVyXG4gKiBAcGFyYW0ge2FueX0gICAgICBvdGhlciAgICAgICAgICBUaGUgc3RhdGVcbiAqXG4gKiBAcmV0dXJuICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbnVtYmVyIG9mIG5vbnplcm8gZWxlbWVudHMgaW4gdGhlIG1hdHJpeFxuICpcbiAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gKi9cbmZ1bmN0aW9uIGNzRmtlZXAoYSwgY2FsbGJhY2ssIG90aGVyKSB7XG4gIC8vIGEgYXJyYXlzXG4gIHZhciBhdmFsdWVzID0gYS5fdmFsdWVzO1xuICB2YXIgYWluZGV4ID0gYS5faW5kZXg7XG4gIHZhciBhcHRyID0gYS5fcHRyO1xuICB2YXIgYXNpemUgPSBhLl9zaXplOyAvLyBjb2x1bW5zXG5cbiAgdmFyIG4gPSBhc2l6ZVsxXTsgLy8gbm9uemVybyBpdGVtc1xuXG4gIHZhciBueiA9IDA7IC8vIGxvb3AgY29sdW1uc1xuXG4gIGZvciAodmFyIGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgLy8gZ2V0IGN1cnJlbnQgbG9jYXRpb24gb2YgY29sIGpcbiAgICB2YXIgcCA9IGFwdHJbal07IC8vIHJlY29yZCBuZXcgbG9jYXRpb24gb2YgY29sIGpcblxuICAgIGFwdHJbal0gPSBuejtcblxuICAgIGZvciAoOyBwIDwgYXB0cltqICsgMV07IHArKykge1xuICAgICAgLy8gY2hlY2sgd2UgbmVlZCB0byBrZWVwIHRoaXMgaXRlbVxuICAgICAgaWYgKGNhbGxiYWNrKGFpbmRleFtwXSwgaiwgYXZhbHVlcyA/IGF2YWx1ZXNbcF0gOiAxLCBvdGhlcikpIHtcbiAgICAgICAgLy8ga2VlcCBBKGksailcbiAgICAgICAgYWluZGV4W256XSA9IGFpbmRleFtwXTsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlcyAocGF0dGVybiBvbmx5KVxuXG4gICAgICAgIGlmIChhdmFsdWVzKSB7XG4gICAgICAgICAgYXZhbHVlc1tuel0gPSBhdmFsdWVzW3BdO1xuICAgICAgICB9IC8vIGluY3JlbWVudCBub256ZXJvIGl0ZW1zXG5cblxuICAgICAgICBueisrO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBmaW5hbGl6ZSBBXG5cblxuICBhcHRyW25dID0gbno7IC8vIHRyaW0gYXJyYXlzXG5cbiAgYWluZGV4LnNwbGljZShueiwgYWluZGV4Lmxlbmd0aCAtIG56KTsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlcyAocGF0dGVybiBvbmx5KVxuXG4gIGlmIChhdmFsdWVzKSB7XG4gICAgYXZhbHVlcy5zcGxpY2UobnosIGF2YWx1ZXMubGVuZ3RoIC0gbnopO1xuICB9IC8vIHJldHVybiBudW1iZXIgb2Ygbm9uemVybyBpdGVtc1xuXG5cbiAgcmV0dXJuIG56O1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc0ZsaXAgPSBjc0ZsaXA7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBcImZsaXBzXCIgaXRzIGlucHV0IGFib3V0IHRoZSBpbnRlZ2VyIC0xLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSAgaSAgICAgICAgICAgICAgIFRoZSB2YWx1ZSB0byBmbGlwXG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NGbGlwKGkpIHtcbiAgLy8gZmxpcCB0aGUgdmFsdWVcbiAgcmV0dXJuIC1pIC0gMjtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NJcHZlYyA9IGNzSXB2ZWM7XG5cbi8qKlxuICogUGVybXV0ZXMgYSB2ZWN0b3I7IHggPSBQJ2IuIEluIE1BVExBQiBub3RhdGlvbiwgeChwKT1iLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IHAgICAgICAgICAgIFRoZSBwZXJtdXRhdGlvbiB2ZWN0b3Igb2YgbGVuZ3RoIG4uIG51bGwgdmFsdWUgZGVub3RlcyBpZGVudGl0eVxuICogQHBhcmFtIHtBcnJheX0gYiAgICAgICAgICAgVGhlIGlucHV0IHZlY3RvclxuICpcbiAqIEByZXR1cm4ge0FycmF5fSAgICAgICAgICAgIFRoZSBvdXRwdXQgdmVjdG9yIHggPSBQJ2JcbiAqL1xuZnVuY3Rpb24gY3NJcHZlYyhwLCBiKSB7XG4gIC8vIHZhcnNcbiAgdmFyIGs7XG4gIHZhciBuID0gYi5sZW5ndGg7XG4gIHZhciB4ID0gW107IC8vIGNoZWNrIHBlcm11dGF0aW9uIHZlY3RvciB3YXMgcHJvdmlkZWQsIHAgPSBudWxsIGRlbm90ZXMgaWRlbnRpdHlcblxuICBpZiAocCkge1xuICAgIC8vIGxvb3AgdmVjdG9yXG4gICAgZm9yIChrID0gMDsgayA8IG47IGsrKykge1xuICAgICAgLy8gYXBwbHkgcGVybXV0YXRpb25cbiAgICAgIHhbcFtrXV0gPSBiW2tdO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBsb29wIHZlY3RvclxuICAgIGZvciAoayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgIC8vIHhbaV0gPSBiW2ldXG4gICAgICB4W2tdID0gYltrXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4geDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NMZWFmID0gY3NMZWFmO1xuXG4vKipcbiAqIFRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyBpZiBqIGlzIGEgbGVhZiBvZiB0aGUgaXRoIHJvdyBzdWJ0cmVlLlxuICogQ29uc2lkZXIgQShpLGopLCBub2RlIGogaW4gaXRoIHJvdyBzdWJ0cmVlIGFuZCByZXR1cm4gbGNhKGpwcmV2LGopXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9ICBpICAgICAgICAgICAgICAgVGhlIGl0aCByb3cgc3VidHJlZVxuICogQHBhcmFtIHtOdW1iZXJ9ICBqICAgICAgICAgICAgICAgVGhlIG5vZGUgdG8gdGVzdFxuICogQHBhcmFtIHtBcnJheX0gICB3ICAgICAgICAgICAgICAgVGhlIHdvcmtzcGFjZSBhcnJheVxuICogQHBhcmFtIHtOdW1iZXJ9ICBmaXJzdCAgICAgICAgICAgVGhlIGluZGV4IG9mZnNldCB3aXRoaW4gdGhlIHdvcmtzcGFjZSBmb3IgdGhlIGZpcnN0IGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gIG1heGZpcnN0ICAgICAgICBUaGUgaW5kZXggb2Zmc2V0IHdpdGhpbiB0aGUgd29ya3NwYWNlIGZvciB0aGUgbWF4Zmlyc3QgYXJyYXlcbiAqIEBwYXJhbSB7TnVtYmVyfSAgcHJldmxlYWYgICAgICAgIFRoZSBpbmRleCBvZmZzZXQgd2l0aGluIHRoZSB3b3Jrc3BhY2UgZm9yIHRoZSBwcmV2bGVhZiBhcnJheVxuICogQHBhcmFtIHtOdW1iZXJ9ICBhbmNlc3RvciAgICAgICAgVGhlIGluZGV4IG9mZnNldCB3aXRoaW4gdGhlIHdvcmtzcGFjZSBmb3IgdGhlIGFuY2VzdG9yIGFycmF5XG4gKlxuICogQHJldHVybiB7T2JqZWN0fVxuICpcbiAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gKi9cbmZ1bmN0aW9uIGNzTGVhZihpLCBqLCB3LCBmaXJzdCwgbWF4Zmlyc3QsIHByZXZsZWFmLCBhbmNlc3Rvcikge1xuICB2YXIgcywgc3BhcmVudDsgLy8gb3VyIHJlc3VsdFxuXG4gIHZhciBqbGVhZiA9IDA7XG4gIHZhciBxOyAvLyBjaGVjayBqIGlzIGEgbGVhZlxuXG4gIGlmIChpIDw9IGogfHwgd1tmaXJzdCArIGpdIDw9IHdbbWF4Zmlyc3QgKyBpXSkge1xuICAgIHJldHVybiAtMTtcbiAgfSAvLyB1cGRhdGUgbWF4IGZpcnN0W2pdIHNlZW4gc28gZmFyXG5cblxuICB3W21heGZpcnN0ICsgaV0gPSB3W2ZpcnN0ICsgal07IC8vIGpwcmV2ID0gcHJldmlvdXMgbGVhZiBvZiBpdGggc3VidHJlZVxuXG4gIHZhciBqcHJldiA9IHdbcHJldmxlYWYgKyBpXTtcbiAgd1twcmV2bGVhZiArIGldID0gajsgLy8gY2hlY2sgaiBpcyBmaXJzdCBvciBzdWJzZXF1ZW50IGxlYWZcblxuICBpZiAoanByZXYgPT09IC0xKSB7XG4gICAgLy8gMXN0IGxlYWYsIHEgPSByb290IG9mIGl0aCBzdWJ0cmVlXG4gICAgamxlYWYgPSAxO1xuICAgIHEgPSBpO1xuICB9IGVsc2Uge1xuICAgIC8vIHVwZGF0ZSBqbGVhZlxuICAgIGpsZWFmID0gMjsgLy8gcSA9IGxlYXN0IGNvbW1vbiBhbmNlc3RlciAoanByZXYsailcblxuICAgIGZvciAocSA9IGpwcmV2OyBxICE9PSB3W2FuY2VzdG9yICsgcV07IHEgPSB3W2FuY2VzdG9yICsgcV0pIHtcbiAgICAgIDtcbiAgICB9XG5cbiAgICBmb3IgKHMgPSBqcHJldjsgcyAhPT0gcTsgcyA9IHNwYXJlbnQpIHtcbiAgICAgIC8vIHBhdGggY29tcHJlc3Npb25cbiAgICAgIHNwYXJlbnQgPSB3W2FuY2VzdG9yICsgc107XG4gICAgICB3W2FuY2VzdG9yICsgc10gPSBxO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgamxlYWY6IGpsZWFmLFxuICAgIHE6IHFcbiAgfTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ3NMdSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY3NTcHNvbHZlID0gcmVxdWlyZShcIi4vY3NTcHNvbHZlXCIpO1xuXG52YXIgbmFtZSA9ICdjc0x1JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ2FicycsICdkaXZpZGVTY2FsYXInLCAnbXVsdGlwbHknLCAnc3VidHJhY3QnLCAnbGFyZ2VyJywgJ2xhcmdlckVxJywgJ1NwYXJzZU1hdHJpeCddO1xudmFyIGNyZWF0ZUNzTHUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgYWJzID0gX3JlZi5hYnMsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyLFxuICAgICAgbGFyZ2VyRXEgPSBfcmVmLmxhcmdlckVxLFxuICAgICAgU3BhcnNlTWF0cml4ID0gX3JlZi5TcGFyc2VNYXRyaXg7XG4gIHZhciBjc1Nwc29sdmUgPSAoMCwgX2NzU3Bzb2x2ZS5jcmVhdGVDc1Nwc29sdmUpKHtcbiAgICBkaXZpZGVTY2FsYXI6IGRpdmlkZVNjYWxhcixcbiAgICBtdWx0aXBseTogbXVsdGlwbHksXG4gICAgc3VidHJhY3Q6IHN1YnRyYWN0XG4gIH0pO1xuICAvKipcbiAgICogQ29tcHV0ZXMgdGhlIG51bWVyaWMgTFUgZmFjdG9yaXphdGlvbiBvZiB0aGUgc3BhcnNlIG1hdHJpeCBBLiBJbXBsZW1lbnRzIGEgTGVmdC1sb29raW5nIExVIGZhY3Rvcml6YXRpb25cbiAgICogYWxnb3JpdGhtIHRoYXQgY29tcHV0ZXMgTCBhbmQgVSBvbmUgY29sdW1uIGF0IGEgdHVtZS4gQXQgdGhlIGt0aCBzdGVwLCBpdCBhY2Nlc3MgY29sdW1ucyAxIHRvIGstMSBvZiBMXG4gICAqIGFuZCBjb2x1bW4gayBvZiBBLiBHaXZlbiB0aGUgZmlsbC1yZWR1Y2luZyBjb2x1bW4gb3JkZXJpbmcgcSAoc2VlIHBhcmFtZXRlciBzKSBjb21wdXRlcyBMLCBVIGFuZCBwaW52IHNvXG4gICAqIEwgKiBVID0gQShwLCBxKSwgd2hlcmUgcCBpcyB0aGUgaW52ZXJzZSBvZiBwaW52LlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gIG0gICAgICAgICAgICAgICBUaGUgQSBNYXRyaXggdG8gZmFjdG9yaXplXG4gICAqIEBwYXJhbSB7T2JqZWN0fSAgcyAgICAgICAgICAgICAgIFRoZSBzeW1ib2xpYyBhbmFseXNpcyBmcm9tIGNzU3FyKCkuIFByb3ZpZGVzIHRoZSBmaWxsLXJlZHVjaW5nXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbiBvcmRlcmluZyBxXG4gICAqIEBwYXJhbSB7TnVtYmVyfSAgdG9sICAgICAgICAgICAgIFBhcnRpYWwgcGl2b3RpbmcgdGhyZXNob2xkICgxIGZvciBwYXJ0aWFsIHBpdm90aW5nKVxuICAgKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9ICAgICAgICAgICAgICAgICBUaGUgbnVtZXJpYyBMVSBmYWN0b3JpemF0aW9uIG9mIEEgb3IgbnVsbFxuICAgKlxuICAgKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICAgKi9cblxuICByZXR1cm4gZnVuY3Rpb24gY3NMdShtLCBzLCB0b2wpIHtcbiAgICAvLyB2YWxpZGF0ZSBpbnB1dFxuICAgIGlmICghbSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSAvLyBtIGFycmF5c1xuXG5cbiAgICB2YXIgc2l6ZSA9IG0uX3NpemU7IC8vIGNvbHVtbnNcblxuICAgIHZhciBuID0gc2l6ZVsxXTsgLy8gc3ltYm9saWMgYW5hbHlzaXMgcmVzdWx0XG5cbiAgICB2YXIgcTtcbiAgICB2YXIgbG56ID0gMTAwO1xuICAgIHZhciB1bnogPSAxMDA7IC8vIHVwZGF0ZSBzeW1ib2xpYyBhbmFseXNpcyBwYXJhbWV0ZXJzXG5cbiAgICBpZiAocykge1xuICAgICAgcSA9IHMucTtcbiAgICAgIGxueiA9IHMubG56IHx8IGxuejtcbiAgICAgIHVueiA9IHMudW56IHx8IHVuejtcbiAgICB9IC8vIEwgYXJyYXlzXG5cblxuICAgIHZhciBsdmFsdWVzID0gW107IC8vIChsbnopXG5cbiAgICB2YXIgbGluZGV4ID0gW107IC8vIChsbnopXG5cbiAgICB2YXIgbHB0ciA9IFtdOyAvLyAobiArIDEpXG4gICAgLy8gTFxuXG4gICAgdmFyIEwgPSBuZXcgU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogbHZhbHVlcyxcbiAgICAgIGluZGV4OiBsaW5kZXgsXG4gICAgICBwdHI6IGxwdHIsXG4gICAgICBzaXplOiBbbiwgbl1cbiAgICB9KTsgLy8gVSBhcnJheXNcblxuICAgIHZhciB1dmFsdWVzID0gW107IC8vICh1bnopXG5cbiAgICB2YXIgdWluZGV4ID0gW107IC8vICh1bnopXG5cbiAgICB2YXIgdXB0ciA9IFtdOyAvLyAobiArIDEpXG4gICAgLy8gVVxuXG4gICAgdmFyIFUgPSBuZXcgU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogdXZhbHVlcyxcbiAgICAgIGluZGV4OiB1aW5kZXgsXG4gICAgICBwdHI6IHVwdHIsXG4gICAgICBzaXplOiBbbiwgbl1cbiAgICB9KTsgLy8gaW52ZXJzZSBvZiBwZXJtdXRhdGlvbiB2ZWN0b3JcblxuICAgIHZhciBwaW52ID0gW107IC8vIChuKVxuICAgIC8vIHZhcnNcblxuICAgIHZhciBpLCBwOyAvLyBhbGxvY2F0ZSBhcnJheXNcblxuICAgIHZhciB4ID0gW107IC8vIChuKVxuXG4gICAgdmFyIHhpID0gW107IC8vICgyICogbilcbiAgICAvLyBpbml0aWFsaXplIHZhcmlhYmxlc1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgLy8gY2xlYXIgd29ya3NwYWNlXG4gICAgICB4W2ldID0gMDsgLy8gbm8gcm93cyBwaXZvdGFsIHlldFxuXG4gICAgICBwaW52W2ldID0gLTE7IC8vIG5vIGNvbHMgb2YgTCB5ZXRcblxuICAgICAgbHB0cltpICsgMV0gPSAwO1xuICAgIH0gLy8gcmVzZXQgbnVtYmVyIG9mIG5vbnplcm8gZWxlbWVudHMgaW4gTCBhbmQgVVxuXG5cbiAgICBsbnogPSAwO1xuICAgIHVueiA9IDA7IC8vIGNvbXB1dGUgTCg6LGspIGFuZCBVKDosaylcblxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgbjsgaysrKSB7XG4gICAgICAvLyB1cGRhdGUgcHRyXG4gICAgICBscHRyW2tdID0gbG56O1xuICAgICAgdXB0cltrXSA9IHVuejsgLy8gYXBwbHkgY29sdW1uIHBlcm11dGF0aW9ucyBpZiBuZWVkZWRcblxuICAgICAgdmFyIGNvbCA9IHEgPyBxW2tdIDogazsgLy8gc29sdmUgdHJpYW5ndWxhciBzeXN0ZW0sIHggPSBMXFxBKDosY29sKVxuXG4gICAgICB2YXIgdG9wID0gY3NTcHNvbHZlKEwsIG0sIGNvbCwgeGksIHgsIHBpbnYsIDEpOyAvLyBmaW5kIHBpdm90XG5cbiAgICAgIHZhciBpcGl2ID0gLTE7XG4gICAgICB2YXIgYSA9IC0xOyAvLyBsb29wIHhpW10gZnJvbSB0b3AgLT4gblxuXG4gICAgICBmb3IgKHAgPSB0b3A7IHAgPCBuOyBwKyspIHtcbiAgICAgICAgLy8geFtpXSBpcyBub256ZXJvXG4gICAgICAgIGkgPSB4aVtwXTsgLy8gY2hlY2sgcm93IGkgaXMgbm90IHlldCBwaXZvdGFsXG5cbiAgICAgICAgaWYgKHBpbnZbaV0gPCAwKSB7XG4gICAgICAgICAgLy8gYWJzb2x1dGUgdmFsdWUgb2YgeFtpXVxuICAgICAgICAgIHZhciB4YWJzID0gYWJzKHhbaV0pOyAvLyBjaGVjayBhYnNvdWx0ZSB2YWx1ZSBpcyBncmVhdGVyIHRoYW4gcGl2b3QgdmFsdWVcblxuICAgICAgICAgIGlmIChsYXJnZXIoeGFicywgYSkpIHtcbiAgICAgICAgICAgIC8vIGxhcmdlc3QgcGl2b3QgY2FuZGlkYXRlIHNvIGZhclxuICAgICAgICAgICAgYSA9IHhhYnM7XG4gICAgICAgICAgICBpcGl2ID0gaTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8geChpKSBpcyB0aGUgZW50cnkgVShwaW52W2ldLGspXG4gICAgICAgICAgdWluZGV4W3Vuel0gPSBwaW52W2ldO1xuICAgICAgICAgIHV2YWx1ZXNbdW56KytdID0geFtpXTtcbiAgICAgICAgfVxuICAgICAgfSAvLyB2YWxpZGF0ZSB3ZSBmb3VuZCBhIHZhbGlkIHBpdm90XG5cblxuICAgICAgaWYgKGlwaXYgPT09IC0xIHx8IGEgPD0gMCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gLy8gdXBkYXRlIGFjdHVhbCBwaXZvdCBjb2x1bW4sIGdpdmUgcHJlZmVyZW5jZSB0byBkaWFnb25hbCB2YWx1ZVxuXG5cbiAgICAgIGlmIChwaW52W2NvbF0gPCAwICYmIGxhcmdlckVxKGFicyh4W2NvbF0pLCBtdWx0aXBseShhLCB0b2wpKSkge1xuICAgICAgICBpcGl2ID0gY29sO1xuICAgICAgfSAvLyB0aGUgY2hvc2VuIHBpdm90XG5cblxuICAgICAgdmFyIHBpdm90ID0geFtpcGl2XTsgLy8gbGFzdCBlbnRyeSBpbiBVKDosaykgaXMgVShrLGspXG5cbiAgICAgIHVpbmRleFt1bnpdID0gaztcbiAgICAgIHV2YWx1ZXNbdW56KytdID0gcGl2b3Q7IC8vIGlwaXYgaXMgdGhlIGt0aCBwaXZvdCByb3dcblxuICAgICAgcGludltpcGl2XSA9IGs7IC8vIGZpcnN0IGVudHJ5IGluIEwoOixrKSBpcyBMKGssaykgPSAxXG5cbiAgICAgIGxpbmRleFtsbnpdID0gaXBpdjtcbiAgICAgIGx2YWx1ZXNbbG56KytdID0gMTsgLy8gTChrKzE6bixrKSA9IHggLyBwaXZvdFxuXG4gICAgICBmb3IgKHAgPSB0b3A7IHAgPCBuOyBwKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIGkgPSB4aVtwXTsgLy8gY2hlY2sgeChpKSBpcyBhbiBlbnRyeSBpbiBMKDosaylcblxuICAgICAgICBpZiAocGludltpXSA8IDApIHtcbiAgICAgICAgICAvLyBzYXZlIHVucGVybXV0ZWQgcm93IGluIExcbiAgICAgICAgICBsaW5kZXhbbG56XSA9IGk7IC8vIHNjYWxlIHBpdm90IGNvbHVtblxuXG4gICAgICAgICAgbHZhbHVlc1tsbnorK10gPSBkaXZpZGVTY2FsYXIoeFtpXSwgcGl2b3QpO1xuICAgICAgICB9IC8vIHhbMC4ubi0xXSA9IDAgZm9yIG5leHQga1xuXG5cbiAgICAgICAgeFtpXSA9IDA7XG4gICAgICB9XG4gICAgfSAvLyB1cGRhdGUgcHRyXG5cblxuICAgIGxwdHJbbl0gPSBsbno7XG4gICAgdXB0cltuXSA9IHVuejsgLy8gZml4IHJvdyBpbmRpY2VzIG9mIEwgZm9yIGZpbmFsIHBpbnZcblxuICAgIGZvciAocCA9IDA7IHAgPCBsbno7IHArKykge1xuICAgICAgbGluZGV4W3BdID0gcGludltsaW5kZXhbcF1dO1xuICAgIH0gLy8gdHJpbSBhcnJheXNcblxuXG4gICAgbHZhbHVlcy5zcGxpY2UobG56LCBsdmFsdWVzLmxlbmd0aCAtIGxueik7XG4gICAgbGluZGV4LnNwbGljZShsbnosIGxpbmRleC5sZW5ndGggLSBsbnopO1xuICAgIHV2YWx1ZXMuc3BsaWNlKHVueiwgdXZhbHVlcy5sZW5ndGggLSB1bnopO1xuICAgIHVpbmRleC5zcGxpY2UodW56LCB1aW5kZXgubGVuZ3RoIC0gdW56KTsgLy8gcmV0dXJuIExVIGZhY3RvclxuXG4gICAgcmV0dXJuIHtcbiAgICAgIEw6IEwsXG4gICAgICBVOiBVLFxuICAgICAgcGludjogcGludlxuICAgIH07XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQ3NMdSA9IGNyZWF0ZUNzTHU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNzTWFyayA9IGNzTWFyaztcblxudmFyIF9jc0ZsaXAgPSByZXF1aXJlKFwiLi9jc0ZsaXBcIik7XG5cbi8qKlxuICogTWFya3MgdGhlIG5vZGUgYXQgd1tqXVxuICpcbiAqIEBwYXJhbSB7QXJyYXl9ICAgdyAgICAgICAgICAgICAgIFRoZSBhcnJheVxuICogQHBhcmFtIHtOdW1iZXJ9ICBqICAgICAgICAgICAgICAgVGhlIGFycmF5IGluZGV4XG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NNYXJrKHcsIGopIHtcbiAgLy8gbWFyayB3W2pdXG4gIHdbal0gPSAoMCwgX2NzRmxpcC5jc0ZsaXApKHdbal0pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc01hcmtlZCA9IGNzTWFya2VkO1xuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgbm9kZSBhdCB3W2pdIGlzIG1hcmtlZFxuICpcbiAqIEBwYXJhbSB7QXJyYXl9ICAgdyAgICAgICAgICAgICAgIFRoZSBhcnJheVxuICogQHBhcmFtIHtOdW1iZXJ9ICBqICAgICAgICAgICAgICAgVGhlIGFycmF5IGluZGV4XG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NNYXJrZWQodywgaikge1xuICAvLyBjaGVjayBub2RlIGlzIG1hcmtlZFxuICByZXR1cm4gd1tqXSA8IDA7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNzUGVybXV0ZSA9IGNzUGVybXV0ZTtcblxuLyoqXG4gKiBQZXJtdXRlcyBhIHNwYXJzZSBtYXRyaXggQyA9IFAgKiBBICogUVxuICpcbiAqIEBwYXJhbSB7U3BhcnNlTWF0cml4fSAgYSAgICAgICAgIFRoZSBNYXRyaXggQVxuICogQHBhcmFtIHtBcnJheX0gICBwaW52ICAgICAgICAgICAgVGhlIHJvdyBwZXJtdXRhdGlvbiB2ZWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9ICAgcSAgICAgICAgICAgICAgIFRoZSBjb2x1bW4gcGVybXV0YXRpb24gdmVjdG9yXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHZhbHVlcyAgICAgICAgICBDcmVhdGUgYSBwYXR0ZXJuIG1hdHJpeCAoZmFsc2UpLCB2YWx1ZXMgYW5kIHBhdHRlcm4gb3RoZXJ3aXNlXG4gKlxuICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgQyA9IFAgKiBBICogUSwgbnVsbCBvbiBlcnJvclxuICpcbiAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gKi9cbmZ1bmN0aW9uIGNzUGVybXV0ZShhLCBwaW52LCBxLCB2YWx1ZXMpIHtcbiAgLy8gYSBhcnJheXNcbiAgdmFyIGF2YWx1ZXMgPSBhLl92YWx1ZXM7XG4gIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgdmFyIGFwdHIgPSBhLl9wdHI7XG4gIHZhciBhc2l6ZSA9IGEuX3NpemU7XG4gIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gcm93cyAmIGNvbHVtbnNcblxuICB2YXIgbSA9IGFzaXplWzBdO1xuICB2YXIgbiA9IGFzaXplWzFdOyAvLyBjIGFycmF5c1xuXG4gIHZhciBjdmFsdWVzID0gdmFsdWVzICYmIGEuX3ZhbHVlcyA/IFtdIDogbnVsbDtcbiAgdmFyIGNpbmRleCA9IFtdOyAvLyAoYXB0cltuXSlcblxuICB2YXIgY3B0ciA9IFtdOyAvLyAobiArIDEpXG4gIC8vIGluaXRpYWxpemUgdmFyc1xuXG4gIHZhciBueiA9IDA7IC8vIGxvb3AgY29sdW1uc1xuXG4gIGZvciAodmFyIGsgPSAwOyBrIDwgbjsgaysrKSB7XG4gICAgLy8gY29sdW1uIGsgb2YgQyBpcyBjb2x1bW4gcVtrXSBvZiBBXG4gICAgY3B0cltrXSA9IG56OyAvLyBhcHBseSBjb2x1bW4gcGVybXV0YXRpb25cblxuICAgIHZhciBqID0gcSA/IHFba10gOiBrOyAvLyBsb29wIHZhbHVlcyBpbiBjb2x1bW4gaiBvZiBBXG5cbiAgICBmb3IgKHZhciB0MCA9IGFwdHJbal0sIHQxID0gYXB0cltqICsgMV0sIHQgPSB0MDsgdCA8IHQxOyB0KyspIHtcbiAgICAgIC8vIHJvdyBpIG9mIEEgaXMgcm93IHBpbnZbaV0gb2YgQ1xuICAgICAgdmFyIHIgPSBwaW52ID8gcGludlthaW5kZXhbdF1dIDogYWluZGV4W3RdOyAvLyBpbmRleFxuXG4gICAgICBjaW5kZXhbbnpdID0gcjsgLy8gY2hlY2sgd2UgbmVlZCB0byBwb3B1bGF0ZSB2YWx1ZXNcblxuICAgICAgaWYgKGN2YWx1ZXMpIHtcbiAgICAgICAgY3ZhbHVlc1tuel0gPSBhdmFsdWVzW3RdO1xuICAgICAgfSAvLyBpbmNyZW1lbnQgbnVtYmVyIG9mIG5vbnplcm8gZWxlbWVudHNcblxuXG4gICAgICBueisrO1xuICAgIH1cbiAgfSAvLyBmaW5hbGl6ZSB0aGUgbGFzdCBjb2x1bW4gb2YgQ1xuXG5cbiAgY3B0cltuXSA9IG56OyAvLyByZXR1cm4gQyBtYXRyaXhcblxuICByZXR1cm4gYS5jcmVhdGVTcGFyc2VNYXRyaXgoe1xuICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICBpbmRleDogY2luZGV4LFxuICAgIHB0cjogY3B0cixcbiAgICBzaXplOiBbbSwgbl0sXG4gICAgZGF0YXR5cGU6IGFkdFxuICB9KTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NQb3N0ID0gY3NQb3N0O1xuXG52YXIgX2NzVGRmcyA9IHJlcXVpcmUoXCIuL2NzVGRmc1wiKTtcblxuLyoqXG4gKiBQb3N0IG9yZGVyIGEgdHJlZSBvZiBmb3Jlc3RcbiAqXG4gKiBAcGFyYW0ge0FycmF5fSAgIHBhcmVudCAgICAgICAgICBUaGUgdHJlZSBvciBmb3Jlc3RcbiAqIEBwYXJhbSB7TnVtYmVyfSAgbiAgICAgICAgICAgICAgIE51bWJlciBvZiBjb2x1bW5zXG4gKlxuICogUmVmZXJlbmNlOiBodHRwOi8vZmFjdWx0eS5jc2UudGFtdS5lZHUvZGF2aXMvcHVibGljYXRpb25zLmh0bWxcbiAqL1xuZnVuY3Rpb24gY3NQb3N0KHBhcmVudCwgbikge1xuICAvLyBjaGVjayBpbnB1dHNcbiAgaWYgKCFwYXJlbnQpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyB2YXJzXG5cblxuICB2YXIgayA9IDA7XG4gIHZhciBqOyAvLyBhbGxvY2F0ZSByZXN1bHRcblxuICB2YXIgcG9zdCA9IFtdOyAvLyAobilcbiAgLy8gd29ya3NwYWNlLCBoZWFkOiBmaXJzdCBuIGVudHJpZXMsIG5leHQ6IG5leHQgbiBlbnRyaWVzLCBzdGFjazogbGFzdCBuIGVudHJpZXNcblxuICB2YXIgdyA9IFtdOyAvLyAoMyAqIG4pXG5cbiAgdmFyIGhlYWQgPSAwO1xuICB2YXIgbmV4dCA9IG47XG4gIHZhciBzdGFjayA9IDIgKiBuOyAvLyBpbml0aWFsaXplIHdvcmtzcGFjZVxuXG4gIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAvLyBlbXB0eSBsaW5rZWQgbGlzdHNcbiAgICB3W2hlYWQgKyBqXSA9IC0xO1xuICB9IC8vIHRyYXZlcnNlIG5vZGVzIGluIHJldmVyc2Ugb3JkZXJcblxuXG4gIGZvciAoaiA9IG4gLSAxOyBqID49IDA7IGotLSkge1xuICAgIC8vIGNoZWNrIGogaXMgYSByb290XG4gICAgaWYgKHBhcmVudFtqXSA9PT0gLTEpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH0gLy8gYWRkIGogdG8gbGlzdCBvZiBpdHMgcGFyZW50XG5cblxuICAgIHdbbmV4dCArIGpdID0gd1toZWFkICsgcGFyZW50W2pdXTtcbiAgICB3W2hlYWQgKyBwYXJlbnRbal1dID0gajtcbiAgfSAvLyBsb29wIG5vZGVzXG5cblxuICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgLy8gc2tpcCBqIGlmIGl0IGlzIG5vdCBhIHJvb3RcbiAgICBpZiAocGFyZW50W2pdICE9PSAtMSkge1xuICAgICAgY29udGludWU7XG4gICAgfSAvLyBkZXB0aC1maXJzdCBzZWFyY2hcblxuXG4gICAgayA9ICgwLCBfY3NUZGZzLmNzVGRmcykoaiwgaywgdywgaGVhZCwgbmV4dCwgcG9zdCwgc3RhY2spO1xuICB9XG5cbiAgcmV0dXJuIHBvc3Q7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNzUmVhY2ggPSBjc1JlYWNoO1xuXG52YXIgX2NzTWFya2VkID0gcmVxdWlyZShcIi4vY3NNYXJrZWRcIik7XG5cbnZhciBfY3NNYXJrID0gcmVxdWlyZShcIi4vY3NNYXJrXCIpO1xuXG52YXIgX2NzRGZzID0gcmVxdWlyZShcIi4vY3NEZnNcIik7XG5cbi8qKlxuICogVGhlIGNzUmVhY2ggZnVuY3Rpb24gY29tcHV0ZXMgWCA9IFJlYWNoKEIpLCB3aGVyZSBCIGlzIHRoZSBub256ZXJvIHBhdHRlcm4gb2YgdGhlIG4tYnktMVxuICogc3BhcnNlIGNvbHVtbiBvZiB2ZWN0b3IgYi4gVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHNldCBvZiBub2RlcyByZWFjaGFibGUgZnJvbSBhbnkgbm9kZSBpbiBCLiBUaGVcbiAqIG5vbnplcm8gcGF0dGVybiB4aSBvZiB0aGUgc29sdXRpb24geCB0byB0aGUgc3BhcnNlIGxpbmVhciBzeXN0ZW0gTHg9YiBpcyBnaXZlbiBieSBYPVJlYWNoKEIpLlxuICpcbiAqIEBwYXJhbSB7TWF0cml4fSAgZyAgICAgICAgICAgICAgIFRoZSBHIG1hdHJpeFxuICogQHBhcmFtIHtNYXRyaXh9ICBiICAgICAgICAgICAgICAgVGhlIEIgbWF0cml4XG4gKiBAcGFyYW0ge051bWJlcn0gIGsgICAgICAgICAgICAgICBUaGUga3RoIGNvbHVtbiBpbiBCXG4gKiBAcGFyYW0ge0FycmF5fSAgIHhpICAgICAgICAgICAgICBUaGUgbm9uemVybyBwYXR0ZXJuIHhpW3RvcF0gLi4geGlbbiAtIDFdLCBhbiBhcnJheSBvZiBzaXplID0gMiAqIG5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBuIGVudHJpZXMgaXMgdGhlIG5vbnplcm8gcGF0dGVybiwgdGhlIGxhc3QgbiBlbnRyaWVzIGlzIHRoZSBzdGFja1xuICogQHBhcmFtIHtBcnJheX0gICBwaW52ICAgICAgICAgICAgVGhlIGludmVyc2Ugcm93IHBlcm11dGF0aW9uIHZlY3RvclxuICpcbiAqIEByZXR1cm4ge051bWJlcn0gICAgICAgICAgICAgICAgIFRoZSBpbmRleCBmb3IgdGhlIG5vbnplcm8gcGF0dGVyblxuICpcbiAqIFJlZmVyZW5jZTogaHR0cDovL2ZhY3VsdHkuY3NlLnRhbXUuZWR1L2RhdmlzL3B1YmxpY2F0aW9ucy5odG1sXG4gKi9cbmZ1bmN0aW9uIGNzUmVhY2goZywgYiwgaywgeGksIHBpbnYpIHtcbiAgLy8gZyBhcnJheXNcbiAgdmFyIGdwdHIgPSBnLl9wdHI7XG4gIHZhciBnc2l6ZSA9IGcuX3NpemU7IC8vIGIgYXJyYXlzXG5cbiAgdmFyIGJpbmRleCA9IGIuX2luZGV4O1xuICB2YXIgYnB0ciA9IGIuX3B0cjsgLy8gY29sdW1uc1xuXG4gIHZhciBuID0gZ3NpemVbMV07IC8vIHZhcnNcblxuICB2YXIgcCwgcDAsIHAxOyAvLyBpbml0aWFsaXplIHRvcFxuXG4gIHZhciB0b3AgPSBuOyAvLyBsb29wIGNvbHVtbiBpbmRlY2VzIGluIEJcblxuICBmb3IgKHAwID0gYnB0cltrXSwgcDEgPSBicHRyW2sgKyAxXSwgcCA9IHAwOyBwIDwgcDE7IHArKykge1xuICAgIC8vIG5vZGUgaVxuICAgIHZhciBpID0gYmluZGV4W3BdOyAvLyBjaGVjayBub2RlIGkgaXMgbWFya2VkXG5cbiAgICBpZiAoISgwLCBfY3NNYXJrZWQuY3NNYXJrZWQpKGdwdHIsIGkpKSB7XG4gICAgICAvLyBzdGFydCBhIGRmcyBhdCB1bm1hcmtlZCBub2RlIGlcbiAgICAgIHRvcCA9ICgwLCBfY3NEZnMuY3NEZnMpKGksIGcsIHRvcCwgeGksIHBpbnYpO1xuICAgIH1cbiAgfSAvLyBsb29wIGNvbHVtbnMgZnJvbSB0b3AgLT4gbiAtIDFcblxuXG4gIGZvciAocCA9IHRvcDsgcCA8IG47IHArKykge1xuICAgIC8vIHJlc3RvcmUgR1xuICAgICgwLCBfY3NNYXJrLmNzTWFyaykoZ3B0ciwgeGlbcF0pO1xuICB9XG5cbiAgcmV0dXJuIHRvcDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ3NTcHNvbHZlID0gdm9pZCAwO1xuXG52YXIgX2NzUmVhY2ggPSByZXF1aXJlKFwiLi9jc1JlYWNoXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnY3NTcHNvbHZlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ2RpdmlkZVNjYWxhcicsICdtdWx0aXBseScsICdzdWJ0cmFjdCddO1xudmFyIGNyZWF0ZUNzU3Bzb2x2ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdDtcblxuICAvKipcbiAgICogVGhlIGZ1bmN0aW9uIGNzU3Bzb2x2ZSgpIGNvbXB1dGVzIHRoZSBzb2x1dGlvbiB0byBHICogeCA9IGJrLCB3aGVyZSBiayBpcyB0aGVcbiAgICoga3RoIGNvbHVtbiBvZiBCLiBXaGVuIGxvIGlzIHRydWUsIHRoZSBmdW5jdGlvbiBhc3N1bWVzIEcgPSBMIGlzIGxvd2VyIHRyaWFuZ3VsYXIgd2l0aCB0aGVcbiAgICogZGlhZ29uYWwgZW50cnkgYXMgdGhlIGZpcnN0IGVudHJ5IGluIGVhY2ggY29sdW1uLiBXaGVuIGxvIGlzIHRydWUsIHRoZSBmdW5jdGlvbiBhc3N1bWVzIEcgPSBVXG4gICAqIGlzIHVwcGVyIHRyaWFuZ3VsYXIgd2l0aCB0aGUgZGlhZ29uYWwgZW50cnkgYXMgdGhlIGxhc3QgZW50cnkgaW4gZWFjaCBjb2x1bW4uXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgZyAgICAgICAgICAgICAgIFRoZSBHIG1hdHJpeFxuICAgKiBAcGFyYW0ge01hdHJpeH0gIGIgICAgICAgICAgICAgICBUaGUgQiBtYXRyaXhcbiAgICogQHBhcmFtIHtOdW1iZXJ9ICBrICAgICAgICAgICAgICAgVGhlIGt0aCBjb2x1bW4gaW4gQlxuICAgKiBAcGFyYW0ge0FycmF5fSAgIHhpICAgICAgICAgICAgICBUaGUgbm9uemVybyBwYXR0ZXJuIHhpW3RvcF0gLi4geGlbbiAtIDFdLCBhbiBhcnJheSBvZiBzaXplID0gMiAqIG5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIGZpcnN0IG4gZW50cmllcyBpcyB0aGUgbm9uemVybyBwYXR0ZXJuLCB0aGUgbGFzdCBuIGVudHJpZXMgaXMgdGhlIHN0YWNrXG4gICAqIEBwYXJhbSB7QXJyYXl9ICAgeCAgICAgICAgICAgICAgIFRoZSBzb2x1dG9uIHRvIHRoZSBsaW5lYXIgc3lzdGVtIEcgKiB4ID0gYlxuICAgKiBAcGFyYW0ge0FycmF5fSAgIHBpbnYgICAgICAgICAgICBUaGUgaW52ZXJzZSByb3cgcGVybXV0YXRpb24gdmVjdG9yLCBtdXN0IGJlIG51bGwgZm9yIEwgKiB4ID0gYlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGxvICAgICAgICAgICAgICBUaGUgbG93ZXIgKHRydWUpIHVwcGVyIHRyaWFuZ3VsYXIgKGZhbHNlKSBmbGFnXG4gICAqXG4gICAqIEByZXR1cm4ge051bWJlcn0gICAgICAgICAgICAgICAgIFRoZSBpbmRleCBmb3IgdGhlIG5vbnplcm8gcGF0dGVyblxuICAgKlxuICAgKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGNzU3Bzb2x2ZShnLCBiLCBrLCB4aSwgeCwgcGludiwgbG8pIHtcbiAgICAvLyBnIGFycmF5c1xuICAgIHZhciBndmFsdWVzID0gZy5fdmFsdWVzO1xuICAgIHZhciBnaW5kZXggPSBnLl9pbmRleDtcbiAgICB2YXIgZ3B0ciA9IGcuX3B0cjtcbiAgICB2YXIgZ3NpemUgPSBnLl9zaXplOyAvLyBjb2x1bW5zXG5cbiAgICB2YXIgbiA9IGdzaXplWzFdOyAvLyBiIGFycmF5c1xuXG4gICAgdmFyIGJ2YWx1ZXMgPSBiLl92YWx1ZXM7XG4gICAgdmFyIGJpbmRleCA9IGIuX2luZGV4O1xuICAgIHZhciBicHRyID0gYi5fcHRyOyAvLyB2YXJzXG5cbiAgICB2YXIgcCwgcDAsIHAxLCBxOyAvLyB4aVt0b3AuLm4tMV0gPSBjc1JlYWNoKEIoOixrKSlcblxuICAgIHZhciB0b3AgPSAoMCwgX2NzUmVhY2guY3NSZWFjaCkoZywgYiwgaywgeGksIHBpbnYpOyAvLyBjbGVhciB4XG5cbiAgICBmb3IgKHAgPSB0b3A7IHAgPCBuOyBwKyspIHtcbiAgICAgIHhbeGlbcF1dID0gMDtcbiAgICB9IC8vIHNjYXR0ZXIgYlxuXG5cbiAgICBmb3IgKHAwID0gYnB0cltrXSwgcDEgPSBicHRyW2sgKyAxXSwgcCA9IHAwOyBwIDwgcDE7IHArKykge1xuICAgICAgeFtiaW5kZXhbcF1dID0gYnZhbHVlc1twXTtcbiAgICB9IC8vIGxvb3AgY29sdW1uc1xuXG5cbiAgICBmb3IgKHZhciBweCA9IHRvcDsgcHggPCBuOyBweCsrKSB7XG4gICAgICAvLyB4IGFycmF5IGluZGV4IGZvciBweFxuICAgICAgdmFyIGogPSB4aVtweF07IC8vIGFwcGx5IHBlcm11dGF0aW9uIHZlY3RvciAoVSB4ID0gYiksIGogbWFwcyB0byBjb2x1bW4gSiBvZiBHXG5cbiAgICAgIHZhciBKID0gcGludiA/IHBpbnZbal0gOiBqOyAvLyBjaGVjayBjb2x1bW4gSiBpcyBlbXB0eVxuXG4gICAgICBpZiAoSiA8IDApIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIGNvbHVtbiB2YWx1ZSBpbmRlY2VzIGluIEcsIHAwIDw9IHAgPCBwMVxuXG5cbiAgICAgIHAwID0gZ3B0cltKXTtcbiAgICAgIHAxID0gZ3B0cltKICsgMV07IC8vIHgoaikgLz0gRyhqLGopXG5cbiAgICAgIHhbal0gPSBkaXZpZGVTY2FsYXIoeFtqXSwgZ3ZhbHVlc1tsbyA/IHAwIDogcDEgLSAxXSk7IC8vIGZpcnN0IGVudHJ5IEwoaixqKVxuXG4gICAgICBwID0gbG8gPyBwMCArIDEgOiBwMDtcbiAgICAgIHEgPSBsbyA/IHAxIDogcDEgLSAxOyAvLyBsb29wXG5cbiAgICAgIGZvciAoOyBwIDwgcTsgcCsrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICB2YXIgaSA9IGdpbmRleFtwXTsgLy8geChpKSAtPSBHKGksaikgKiB4KGopXG5cbiAgICAgICAgeFtpXSA9IHN1YnRyYWN0KHhbaV0sIG11bHRpcGx5KGd2YWx1ZXNbcF0sIHhbal0pKTtcbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiB0b3Agb2Ygc3RhY2tcblxuXG4gICAgcmV0dXJuIHRvcDtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDc1Nwc29sdmUgPSBjcmVhdGVDc1Nwc29sdmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNzU3FyID0gdm9pZCAwO1xuXG52YXIgX2NzUGVybXV0ZSA9IHJlcXVpcmUoXCIuL2NzUGVybXV0ZVwiKTtcblxudmFyIF9jc1Bvc3QgPSByZXF1aXJlKFwiLi9jc1Bvc3RcIik7XG5cbnZhciBfY3NFdHJlZSA9IHJlcXVpcmUoXCIuL2NzRXRyZWVcIik7XG5cbnZhciBfY3NBbWQgPSByZXF1aXJlKFwiLi9jc0FtZFwiKTtcblxudmFyIF9jc0NvdW50cyA9IHJlcXVpcmUoXCIuL2NzQ291bnRzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnY3NTcXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnYWRkJywgJ211bHRpcGx5JywgJ3RyYW5zcG9zZSddO1xudmFyIGNyZWF0ZUNzU3FyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgdHJhbnNwb3NlID0gX3JlZi50cmFuc3Bvc2U7XG4gIHZhciBjc0FtZCA9ICgwLCBfY3NBbWQuY3JlYXRlQ3NBbWQpKHtcbiAgICBhZGQ6IGFkZCxcbiAgICBtdWx0aXBseTogbXVsdGlwbHksXG4gICAgdHJhbnNwb3NlOiB0cmFuc3Bvc2VcbiAgfSk7XG4gIHZhciBjc0NvdW50cyA9ICgwLCBfY3NDb3VudHMuY3JlYXRlQ3NDb3VudHMpKHtcbiAgICB0cmFuc3Bvc2U6IHRyYW5zcG9zZVxuICB9KTtcbiAgLyoqXG4gICAqIFN5bWJvbGljIG9yZGVyaW5nIGFuZCBhbmFseXNpcyBmb3IgUVIgYW5kIExVIGRlY29tcG9zaXRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0gIG9yZGVyICAgICAgICAgICBUaGUgb3JkZXJpbmcgc3RyYXRlZ3kgKHNlZSBjc0FtZCBmb3IgbW9yZSBkZXRhaWxzKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gIGEgICAgICAgICAgICAgICBUaGUgQSBtYXRyaXhcbiAgICogQHBhcmFtIHtib29sZWFufSBxciAgICAgICAgICAgICAgU3ltYm9saWMgb3JkZXJpbmcgYW5kIGFuYWx5c2lzIGZvciBRUiBkZWNvbXBvc2l0aW9uICh0cnVlKSBvclxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW1ib2xpYyBvcmRlcmluZyBhbmQgYW5hbHlzaXMgZm9yIExVIGRlY29tcG9zaXRpb24gKGZhbHNlKVxuICAgKlxuICAgKiBAcmV0dXJuIHtPYmplY3R9ICAgICAgICAgICAgICAgICBUaGUgU3ltYm9saWMgb3JkZXJpbmcgYW5kIGFuYWx5c2lzIGZvciBtYXRyaXggQVxuICAgKlxuICAgKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICAgKi9cblxuICByZXR1cm4gZnVuY3Rpb24gY3NTcXIob3JkZXIsIGEsIHFyKSB7XG4gICAgLy8gYSBhcnJheXNcbiAgICB2YXIgYXB0ciA9IGEuX3B0cjtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplOyAvLyBjb2x1bW5zXG5cbiAgICB2YXIgbiA9IGFzaXplWzFdOyAvLyB2YXJzXG5cbiAgICB2YXIgazsgLy8gc3ltYm9saWMgYW5hbHlzaXMgcmVzdWx0XG5cbiAgICB2YXIgcyA9IHt9OyAvLyBmaWxsLXJlZHVjaW5nIG9yZGVyaW5nXG5cbiAgICBzLnEgPSBjc0FtZChvcmRlciwgYSk7IC8vIHZhbGlkYXRlIHJlc3VsdHNcblxuICAgIGlmIChvcmRlciAmJiAhcy5xKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IC8vIFFSIHN5bWJvbGljIGFuYWx5c2lzXG5cblxuICAgIGlmIChxcikge1xuICAgICAgLy8gYXBwbHkgcGVybXV0YXRpb25zIGlmIG5lZWRlZFxuICAgICAgdmFyIGMgPSBvcmRlciA/ICgwLCBfY3NQZXJtdXRlLmNzUGVybXV0ZSkoYSwgbnVsbCwgcy5xLCAwKSA6IGE7IC8vIGV0cmVlIG9mIEMnKkMsIHdoZXJlIEM9QSg6LHEpXG5cbiAgICAgIHMucGFyZW50ID0gKDAsIF9jc0V0cmVlLmNzRXRyZWUpKGMsIDEpOyAvLyBwb3N0IG9yZGVyIGVsaW1pbmF0aW9uIHRyZWVcblxuICAgICAgdmFyIHBvc3QgPSAoMCwgX2NzUG9zdC5jc1Bvc3QpKHMucGFyZW50LCBuKTsgLy8gY29sIGNvdW50cyBjaG9sKEMnKkMpXG5cbiAgICAgIHMuY3AgPSBjc0NvdW50cyhjLCBzLnBhcmVudCwgcG9zdCwgMSk7IC8vIGNoZWNrIHdlIGhhdmUgZXZlcnl0aGluZyBuZWVkZWQgdG8gY2FsY3VsYXRlIG51bWJlciBvZiBub256ZXJvIGVsZW1lbnRzXG5cbiAgICAgIGlmIChjICYmIHMucGFyZW50ICYmIHMuY3AgJiYgX3Zjb3VudChjLCBzKSkge1xuICAgICAgICAvLyBjYWxjdWxhdGUgbnVtYmVyIG9mIG5vbnplcm8gZWxlbWVudHNcbiAgICAgICAgZm9yIChzLnVueiA9IDAsIGsgPSAwOyBrIDwgbjsgaysrKSB7XG4gICAgICAgICAgcy51bnogKz0gcy5jcFtrXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmb3IgTFUgZmFjdG9yaXphdGlvbiBvbmx5LCBndWVzcyBubnooTCkgYW5kIG5ueihVKVxuICAgICAgcy51bnogPSA0ICogYXB0cltuXSArIG47XG4gICAgICBzLmxueiA9IHMudW56O1xuICAgIH0gLy8gcmV0dXJuIHJlc3VsdCBTXG5cblxuICAgIHJldHVybiBzO1xuICB9O1xuICAvKipcbiAgICogQ29tcHV0ZSBubnooVikgPSBzLmxueiwgcy5waW52LCBzLmxlZnRtb3N0LCBzLm0yIGZyb20gQSBhbmQgcy5wYXJlbnRcbiAgICovXG5cbiAgZnVuY3Rpb24gX3Zjb3VudChhLCBzKSB7XG4gICAgLy8gYSBhcnJheXNcbiAgICB2YXIgYXB0ciA9IGEuX3B0cjtcbiAgICB2YXIgYWluZGV4ID0gYS5faW5kZXg7XG4gICAgdmFyIGFzaXplID0gYS5fc2l6ZTsgLy8gcm93cyAmIGNvbHVtbnNcblxuICAgIHZhciBtID0gYXNpemVbMF07XG4gICAgdmFyIG4gPSBhc2l6ZVsxXTsgLy8gaW5pdGlhbGl6ZSBzIGFycmF5c1xuXG4gICAgcy5waW52ID0gW107IC8vIChtICsgbilcblxuICAgIHMubGVmdG1vc3QgPSBbXTsgLy8gKG0pXG4gICAgLy8gdmFyc1xuXG4gICAgdmFyIHBhcmVudCA9IHMucGFyZW50O1xuICAgIHZhciBwaW52ID0gcy5waW52O1xuICAgIHZhciBsZWZ0bW9zdCA9IHMubGVmdG1vc3Q7IC8vIHdvcmtzcGFjZSwgbmV4dDogZmlyc3QgbSBlbnRyaWVzLCBoZWFkOiBuZXh0IG4gZW50cmllcywgdGFpbDogbmV4dCBuIGVudHJpZXMsIG5xdWU6IG5leHQgbiBlbnRyaWVzXG5cbiAgICB2YXIgdyA9IFtdOyAvLyAobSArIDMgKiBuKVxuXG4gICAgdmFyIG5leHQgPSAwO1xuICAgIHZhciBoZWFkID0gbTtcbiAgICB2YXIgdGFpbCA9IG0gKyBuO1xuICAgIHZhciBucXVlID0gbSArIDIgKiBuOyAvLyB2YXJzXG5cbiAgICB2YXIgaSwgaywgcCwgcDAsIHAxOyAvLyBpbml0aWFsaXplIHdcblxuICAgIGZvciAoayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgIC8vIHF1ZXVlIGsgaXMgZW1wdHlcbiAgICAgIHdbaGVhZCArIGtdID0gLTE7XG4gICAgICB3W3RhaWwgKyBrXSA9IC0xO1xuICAgICAgd1tucXVlICsga10gPSAwO1xuICAgIH0gLy8gaW5pdGlhbGl6ZSByb3cgYXJyYXlzXG5cblxuICAgIGZvciAoaSA9IDA7IGkgPCBtOyBpKyspIHtcbiAgICAgIGxlZnRtb3N0W2ldID0gLTE7XG4gICAgfSAvLyBsb29wIGNvbHVtbnMgYmFja3dhcmRzXG5cblxuICAgIGZvciAoayA9IG4gLSAxOyBrID49IDA7IGstLSkge1xuICAgICAgLy8gdmFsdWVzICYgaW5kZXggZm9yIGNvbHVtbiBrXG4gICAgICBmb3IgKHAwID0gYXB0cltrXSwgcDEgPSBhcHRyW2sgKyAxXSwgcCA9IHAwOyBwIDwgcDE7IHArKykge1xuICAgICAgICAvLyBsZWZ0bW9zdFtpXSA9IG1pbihmaW5kKEEoaSw6KSkpXG4gICAgICAgIGxlZnRtb3N0W2FpbmRleFtwXV0gPSBrO1xuICAgICAgfVxuICAgIH0gLy8gc2NhbiByb3dzIGluIHJldmVyc2Ugb3JkZXJcblxuXG4gICAgZm9yIChpID0gbSAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAvLyByb3cgaSBpcyBub3QgeWV0IG9yZGVyZWRcbiAgICAgIHBpbnZbaV0gPSAtMTtcbiAgICAgIGsgPSBsZWZ0bW9zdFtpXTsgLy8gY2hlY2sgcm93IGkgaXMgZW1wdHlcblxuICAgICAgaWYgKGsgPT09IC0xKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBmaXJzdCByb3cgaW4gcXVldWUga1xuXG5cbiAgICAgIGlmICh3W25xdWUgKyBrXSsrID09PSAwKSB7XG4gICAgICAgIHdbdGFpbCArIGtdID0gaTtcbiAgICAgIH0gLy8gcHV0IGkgYXQgaGVhZCBvZiBxdWV1ZSBrXG5cblxuICAgICAgd1tuZXh0ICsgaV0gPSB3W2hlYWQgKyBrXTtcbiAgICAgIHdbaGVhZCArIGtdID0gaTtcbiAgICB9XG5cbiAgICBzLmxueiA9IDA7XG4gICAgcy5tMiA9IG07IC8vIGZpbmQgcm93IHBlcm11dGF0aW9uIGFuZCBubnooVilcblxuICAgIGZvciAoayA9IDA7IGsgPCBuOyBrKyspIHtcbiAgICAgIC8vIHJlbW92ZSByb3cgaSBmcm9tIHF1ZXVlIGtcbiAgICAgIGkgPSB3W2hlYWQgKyBrXTsgLy8gY291bnQgVihrLGspIGFzIG5vbnplcm9cblxuICAgICAgcy5sbnorKzsgLy8gYWRkIGEgZmljdGl0aW91cyByb3dcblxuICAgICAgaWYgKGkgPCAwKSB7XG4gICAgICAgIGkgPSBzLm0yKys7XG4gICAgICB9IC8vIGFzc29jaWF0ZSByb3cgaSB3aXRoIFYoOixrKVxuXG5cbiAgICAgIHBpbnZbaV0gPSBrOyAvLyBza2lwIGlmIFYoaysxOm0saykgaXMgZW1wdHlcblxuICAgICAgaWYgKC0tbnF1ZVtrXSA8PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfSAvLyBucXVlW2tdIGlzIG5ueiAoVihrKzE6bSxrKSlcblxuXG4gICAgICBzLmxueiArPSB3W25xdWUgKyBrXTsgLy8gbW92ZSBhbGwgcm93cyB0byBwYXJlbnQgb2Yga1xuXG4gICAgICB2YXIgcGEgPSBwYXJlbnRba107XG5cbiAgICAgIGlmIChwYSAhPT0gLTEpIHtcbiAgICAgICAgaWYgKHdbbnF1ZSArIHBhXSA9PT0gMCkge1xuICAgICAgICAgIHdbdGFpbCArIHBhXSA9IHdbdGFpbCArIGtdO1xuICAgICAgICB9XG5cbiAgICAgICAgd1tuZXh0ICsgd1t0YWlsICsga11dID0gd1toZWFkICsgcGFdO1xuICAgICAgICB3W2hlYWQgKyBwYV0gPSB3W25leHQgKyBpXTtcbiAgICAgICAgd1tucXVlICsgcGFdICs9IHdbbnF1ZSArIGtdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBtOyBpKyspIHtcbiAgICAgIGlmIChwaW52W2ldIDwgMCkge1xuICAgICAgICBwaW52W2ldID0gaysrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlQ3NTcXIgPSBjcmVhdGVDc1NxcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3NUZGZzID0gY3NUZGZzO1xuXG4vKipcbiAqIERlcHRoLWZpcnN0IHNlYXJjaCBhbmQgcG9zdG9yZGVyIG9mIGEgdHJlZSByb290ZWQgYXQgbm9kZSBqXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9ICBqICAgICAgICAgICAgICAgVGhlIHRyZWUgbm9kZVxuICogQHBhcmFtIHtOdW1iZXJ9ICBrXG4gKiBAcGFyYW0ge0FycmF5fSAgIHcgICAgICAgICAgICAgICBUaGUgd29ya3NwYWNlIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gIGhlYWQgICAgICAgICAgICBUaGUgaW5kZXggb2Zmc2V0IHdpdGhpbiB0aGUgd29ya3NwYWNlIGZvciB0aGUgaGVhZCBhcnJheVxuICogQHBhcmFtIHtOdW1iZXJ9ICBuZXh0ICAgICAgICAgICAgVGhlIGluZGV4IG9mZnNldCB3aXRoaW4gdGhlIHdvcmtzcGFjZSBmb3IgdGhlIG5leHQgYXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9ICAgcG9zdCAgICAgICAgICAgIFRoZSBwb3N0IG9yZGVyaW5nIGFycmF5XG4gKiBAcGFyYW0ge051bWJlcn0gIHN0YWNrICAgICAgICAgICBUaGUgaW5kZXggb2Zmc2V0IHdpdGhpbiB0aGUgd29ya3NwYWNlIGZvciB0aGUgc3RhY2sgYXJyYXlcbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICovXG5mdW5jdGlvbiBjc1RkZnMoaiwgaywgdywgaGVhZCwgbmV4dCwgcG9zdCwgc3RhY2spIHtcbiAgLy8gdmFyaWFibGVzXG4gIHZhciB0b3AgPSAwOyAvLyBwbGFjZSBqIG9uIHRoZSBzdGFja1xuXG4gIHdbc3RhY2tdID0gajsgLy8gd2hpbGUgKHN0YWNrIGlzIG5vdCBlbXB0eSlcblxuICB3aGlsZSAodG9wID49IDApIHtcbiAgICAvLyBwID0gdG9wIG9mIHN0YWNrXG4gICAgdmFyIHAgPSB3W3N0YWNrICsgdG9wXTsgLy8gaSA9IHlvdW5nZXN0IGNoaWxkIG9mIHBcblxuICAgIHZhciBpID0gd1toZWFkICsgcF07XG5cbiAgICBpZiAoaSA9PT0gLTEpIHtcbiAgICAgIC8vIHAgaGFzIG5vIHVub3JkZXJlZCBjaGlsZHJlbiBsZWZ0XG4gICAgICB0b3AtLTsgLy8gbm9kZSBwIGlzIHRoZSBrdGggcG9zdG9yZGVyZWQgbm9kZVxuXG4gICAgICBwb3N0W2srK10gPSBwO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyByZW1vdmUgaSBmcm9tIGNoaWxkcmVuIG9mIHBcbiAgICAgIHdbaGVhZCArIHBdID0gd1tuZXh0ICsgaV07IC8vIGluY3JlbWVudCB0b3BcblxuICAgICAgKyt0b3A7IC8vIHN0YXJ0IGRmcyBvbiBjaGlsZCBub2RlIGlcblxuICAgICAgd1tzdGFjayArIHRvcF0gPSBpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBrO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jc1VuZmxpcCA9IGNzVW5mbGlwO1xuXG52YXIgX2NzRmxpcCA9IHJlcXVpcmUoXCIuL2NzRmxpcFwiKTtcblxuLyoqXG4gKiBGbGlwcyB0aGUgdmFsdWUgaWYgaXQgaXMgbmVnYXRpdmUgb2YgcmV0dXJucyB0aGUgc2FtZSB2YWx1ZSBvdGhlcndpc2UuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9ICBpICAgICAgICAgICAgICAgVGhlIHZhbHVlIHRvIGZsaXBcbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHA6Ly9mYWN1bHR5LmNzZS50YW11LmVkdS9kYXZpcy9wdWJsaWNhdGlvbnMuaHRtbFxuICovXG5mdW5jdGlvbiBjc1VuZmxpcChpKSB7XG4gIC8vIGZsaXAgdGhlIHZhbHVlIGlmIGl0IGlzIG5lZ2F0aXZlXG4gIHJldHVybiBpIDwgMCA/ICgwLCBfY3NGbGlwLmNzRmxpcCkoaSkgOiBpO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBYnMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdhYnMnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVBYnMgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGFic29sdXRlIHZhbHVlIG9mIGEgbnVtYmVyLiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpc1xuICAgKiBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYWJzKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmFicygzLjUpICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDMuNVxuICAgKiAgICBtYXRoLmFicygtNC4yKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDQuMlxuICAgKlxuICAgKiAgICBtYXRoLmFicyhbMywgLTUsIC0xLCAwLCAyXSkgIC8vIHJldHVybnMgQXJyYXkgWzMsIDUsIDEsIDAsIDJdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzaWduXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4IHwgVW5pdH0geFxuICAgKiAgICAgICAgICAgIEEgbnVtYmVyIG9yIG1hdHJpeCBmb3Igd2hpY2ggdG8gZ2V0IHRoZSBhYnNvbHV0ZSB2YWx1ZVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeCB8IFVuaXR9XG4gICAqICAgICAgICAgICAgQWJzb2x1dGUgdmFsdWUgb2YgYHhgXG4gICAqL1xuICB2YXIgYWJzID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5hYnNOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hYnMoKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmFicygpO1xuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4LmFicygpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBhYnMoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGFicywgdHJ1ZSk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIHJldHVybiB4LmFicygpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhYnM7XG59KTtcbmV4cG9ydHMuY3JlYXRlQWJzID0gY3JlYXRlQWJzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBZGQgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAxXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDRcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMFwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBuYW1lID0gJ2FkZCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnYWRkU2NhbGFyJywgJ2VxdWFsU2NhbGFyJywgJ0RlbnNlTWF0cml4JywgJ1NwYXJzZU1hdHJpeCddO1xudmFyIGNyZWF0ZUFkZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4LFxuICAgICAgU3BhcnNlTWF0cml4ID0gX3JlZi5TcGFyc2VNYXRyaXg7XG4gIHZhciBhbGdvcml0aG0wMSA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAxKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDQgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMDQpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTAgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMTApKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIEFkZCB0d28gb3IgbW9yZSB2YWx1ZXMsIGB4ICsgeWAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hZGQoeCwgeSlcbiAgICogICAgbWF0aC5hZGQoeCwgeSwgeiwgLi4uKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hZGQoMiwgMykgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA1XG4gICAqICAgIG1hdGguYWRkKDIsIDMsIDQpICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgOVxuICAgKlxuICAgKiAgICBjb25zdCBhID0gbWF0aC5jb21wbGV4KDIsIDMpXG4gICAqICAgIGNvbnN0IGIgPSBtYXRoLmNvbXBsZXgoLTQsIDEpXG4gICAqICAgIG1hdGguYWRkKGEsIGIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IC0yICsgNGlcbiAgICpcbiAgICogICAgbWF0aC5hZGQoWzEsIDIsIDNdLCA0KSAgICAgICAvLyByZXR1cm5zIEFycmF5IFs1LCA2LCA3XVxuICAgKlxuICAgKiAgICBjb25zdCBjID0gbWF0aC51bml0KCc1IGNtJylcbiAgICogICAgY29uc3QgZCA9IG1hdGgudW5pdCgnMi4xIG1tJylcbiAgICogICAgbWF0aC5hZGQoYywgZCkgICAgICAgICAgICAgICAvLyByZXR1cm5zIFVuaXQgNTIuMSBtbVxuICAgKlxuICAgKiAgICBtYXRoLmFkZChcIjIuM1wiLCBcIjRcIikgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA2LjNcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHN1YnRyYWN0LCBzdW1cbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGFkZFxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHkgU2Vjb25kIHZhbHVlIHRvIGFkZFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IFN1bSBvZiBgeGAgYW5kIGB5YFxuICAgKi9cblxuICB2YXIgYWRkID0gdHlwZWQobmFtZSwgKDAsIF9vYmplY3QuZXh0ZW5kKSh7XG4gICAgLy8gd2UgZXh0ZW5kIHRoZSBzaWduYXR1cmVzIG9mIGFkZFNjYWxhciB3aXRoIHNpZ25hdHVyZXMgZGVhbGluZyB3aXRoIG1hdHJpY2VzXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGFkZFNjYWxhcik7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMSh4LCB5LCBhZGRTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAxKHksIHgsIGFkZFNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA0KHgsIHksIGFkZFNjYWxhcik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWRkKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhZGQobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFkZCh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgYWRkU2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEwKHgsIHksIGFkZFNjYWxhciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgYWRkU2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTAoeSwgeCwgYWRkU2NhbGFyLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgYWRkU2NhbGFyLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBhZGRTY2FsYXIsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIGFueSc6IGFkZFNjYWxhcixcbiAgICAnYW55LCBhbnksIC4uLmFueSc6IGZ1bmN0aW9uIGFueUFueUFueSh4LCB5LCByZXN0KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gYWRkKHgsIHkpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gYWRkKHJlc3VsdCwgcmVzdFtpXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9LCBhZGRTY2FsYXIuc2lnbmF0dXJlcykpO1xuICByZXR1cm4gYWRkO1xufSk7XG5leHBvcnRzLmNyZWF0ZUFkZCA9IGNyZWF0ZUFkZDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWRkU2NhbGFyID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdhZGRTY2FsYXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVBZGRTY2FsYXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBBZGQgdHdvIHNjYWxhciB2YWx1ZXMsIGB4ICsgeWAuXG4gICAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgZm9yIGludGVybmFsIHVzZTogaXQgaXMgdXNlZCBieSB0aGUgcHVibGljIGZ1bmN0aW9uXG4gICAqIGBhZGRgXG4gICAqXG4gICAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgc3VwcG9ydCBjb2xsZWN0aW9ucyAoQXJyYXkgb3IgTWF0cml4KS5cbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdH0geCAgIEZpcnN0IHZhbHVlIHRvIGFkZFxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXh9IHkgICAgICAgICAgU2Vjb25kIHZhbHVlIHRvIGFkZFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0fSAgICAgU3VtIG9mIGB4YCBhbmQgYHlgXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB2YXIgYWRkU2NhbGFyID0gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IF9udW1iZXIuYWRkTnVtYmVyLFxuICAgICdDb21wbGV4LCBDb21wbGV4JzogZnVuY3Rpb24gQ29tcGxleENvbXBsZXgoeCwgeSkge1xuICAgICAgcmV0dXJuIHguYWRkKHkpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4LnBsdXMoeSk7XG4gICAgfSxcbiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7XG4gICAgICByZXR1cm4geC5hZGQoeSk7XG4gICAgfSxcbiAgICAnVW5pdCwgVW5pdCc6IGZ1bmN0aW9uIFVuaXRVbml0KHgsIHkpIHtcbiAgICAgIGlmICh4LnZhbHVlID09PSBudWxsIHx8IHgudmFsdWUgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXIgeCBjb250YWlucyBhIHVuaXQgd2l0aCB1bmRlZmluZWQgdmFsdWUnKTtcbiAgICAgIGlmICh5LnZhbHVlID09PSBudWxsIHx8IHkudmFsdWUgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXIgeSBjb250YWlucyBhIHVuaXQgd2l0aCB1bmRlZmluZWQgdmFsdWUnKTtcbiAgICAgIGlmICgheC5lcXVhbEJhc2UoeSkpIHRocm93IG5ldyBFcnJvcignVW5pdHMgZG8gbm90IG1hdGNoJyk7XG4gICAgICB2YXIgcmVzID0geC5jbG9uZSgpO1xuICAgICAgcmVzLnZhbHVlID0gYWRkU2NhbGFyKHJlcy52YWx1ZSwgeS52YWx1ZSk7XG4gICAgICByZXMuZml4UHJlZml4ID0gZmFsc2U7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhZGRTY2FsYXI7XG59KTtcbmV4cG9ydHMuY3JlYXRlQWRkU2NhbGFyID0gY3JlYXRlQWRkU2NhbGFyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDYnJ0ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnY2JydCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydjb25maWcnLCAndHlwZWQnLCAnaXNOZWdhdGl2ZScsICd1bmFyeU1pbnVzJywgJ21hdHJpeCcsICdDb21wbGV4JywgJ0JpZ051bWJlcicsICdGcmFjdGlvbiddO1xudmFyIGNyZWF0ZUNicnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBpc05lZ2F0aXZlID0gX3JlZi5pc05lZ2F0aXZlLFxuICAgICAgdW5hcnlNaW51cyA9IF9yZWYudW5hcnlNaW51cyxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleCxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgRnJhY3Rpb24gPSBfcmVmLkZyYWN0aW9uO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGN1YmljIHJvb3Qgb2YgYSB2YWx1ZS5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNicnQoeClcbiAgICogICAgbWF0aC5jYnJ0KHgsIGFsbFJvb3RzKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jYnJ0KDI3KSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgM1xuICAgKiAgICBtYXRoLmN1YmUoMykgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAyN1xuICAgKiAgICBtYXRoLmNicnQoLTY0KSAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAtNFxuICAgKiAgICBtYXRoLmNicnQobWF0aC51bml0KCcyNyBtXjMnKSkgLy8gcmV0dXJucyBVbml0IDMgbVxuICAgKiAgICBtYXRoLmNicnQoWzI3LCA2NCwgMTI1XSkgICAgICAgLy8gcmV0dXJucyBbMywgNCwgNV1cbiAgICpcbiAgICogICAgY29uc3QgeCA9IG1hdGguY29tcGxleCgnOGknKVxuICAgKiAgICBtYXRoLmNicnQoeCkgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDEuNzMyMDUwODA3NTY4OSArIGlcbiAgICogICAgbWF0aC5jYnJ0KHgsIHRydWUpICAgICAgICAgICAgIC8vIHJldHVybnMgTWF0cml4IFtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAxLjczMjA1MDgwNzU2ODkgKyBpXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAtMS43MzIwNTA4MDc1Njg5ICsgaVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgLTJpXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc3F1YXJlLCBzcXJ0LCBjdWJlXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geFxuICAgKiAgICAgICAgICAgIFZhbHVlIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIGN1YmljIHJvb3QuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FsbFJvb3RzXSAgT3B0aW9uYWwsIGZhbHNlIGJ5IGRlZmF1bHQuIE9ubHkgYXBwbGljYWJsZVxuICAgKiAgICAgICAgICAgIHdoZW4gYHhgIGlzIGEgbnVtYmVyIG9yIGNvbXBsZXggbnVtYmVyLiBJZiB0cnVlLCBhbGwgY29tcGxleFxuICAgKiAgICAgICAgICAgIHJvb3RzIGFyZSByZXR1cm5lZCwgaWYgZmFsc2UgKGRlZmF1bHQpIHRoZSBwcmluY2lwYWwgcm9vdCBpc1xuICAgKiAgICAgICAgICAgIHJldHVybmVkLlxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFJldHVybnMgdGhlIGN1YmljIHJvb3Qgb2YgYHhgXG4gICAqL1xuICB2YXIgY2JydCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuY2JydE51bWJlcixcbiAgICAvLyBub3RlOiBzaWduYXR1cmUgJ251bWJlciwgYm9vbGVhbicgaXMgYWxzbyBzdXBwb3J0ZWQsXG4gICAgLy8gICAgICAgY3JlYXRlZCBieSB0eXBlZCBhcyBpdCBrbm93cyBob3cgdG8gY29udmVydCBudW1iZXIgdG8gQ29tcGxleFxuICAgIENvbXBsZXg6IF9jYnJ0Q29tcGxleCxcbiAgICAnQ29tcGxleCwgYm9vbGVhbic6IF9jYnJ0Q29tcGxleCxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5jYnJ0KCk7XG4gICAgfSxcbiAgICBVbml0OiBfY2JydFVuaXQsXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBjYnJ0KDApID0gMFxuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBjYnJ0LCB0cnVlKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBjdWJpYyByb290IGZvciBhIGNvbXBsZXggbnVtYmVyXG4gICAqIEBwYXJhbSB7Q29tcGxleH0geFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthbGxSb290c10gICBJZiB0cnVlLCB0aGUgZnVuY3Rpb24gd2lsbCByZXR1cm4gYW4gYXJyYXlcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhbGwgdGhyZWUgcm9vdHMuIElmIGZhbHNlIG9yIHVuZGVmaW5lZCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHByaW5jaXBhbCByb290IGlzIHJldHVybmVkLlxuICAgKiBAcmV0dXJucyB7Q29tcGxleCB8IEFycmF5LjxDb21wbGV4PiB8IE1hdHJpeC48Q29tcGxleD59IFJldHVybnMgdGhlIGN1YmljIHJvb3Qocykgb2YgeFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfY2JydENvbXBsZXgoeCwgYWxsUm9vdHMpIHtcbiAgICAvLyBodHRwczovL3d3dy53aWtpd2FuZC5jb20vZW4vQ3ViZV9yb290Iy9Db21wbGV4X251bWJlcnNcbiAgICB2YXIgYXJnMyA9IHguYXJnKCkgLyAzO1xuICAgIHZhciBhYnMgPSB4LmFicygpOyAvLyBwcmluY2lwYWwgcm9vdDpcblxuICAgIHZhciBwcmluY2lwYWwgPSBuZXcgQ29tcGxleCgoMCwgX251bWJlci5jYnJ0TnVtYmVyKShhYnMpLCAwKS5tdWwobmV3IENvbXBsZXgoMCwgYXJnMykuZXhwKCkpO1xuXG4gICAgaWYgKGFsbFJvb3RzKSB7XG4gICAgICB2YXIgYWxsID0gW3ByaW5jaXBhbCwgbmV3IENvbXBsZXgoKDAsIF9udW1iZXIuY2JydE51bWJlcikoYWJzKSwgMCkubXVsKG5ldyBDb21wbGV4KDAsIGFyZzMgKyBNYXRoLlBJICogMiAvIDMpLmV4cCgpKSwgbmV3IENvbXBsZXgoKDAsIF9udW1iZXIuY2JydE51bWJlcikoYWJzKSwgMCkubXVsKG5ldyBDb21wbGV4KDAsIGFyZzMgLSBNYXRoLlBJICogMiAvIDMpLmV4cCgpKV07XG4gICAgICByZXR1cm4gY29uZmlnLm1hdHJpeCA9PT0gJ0FycmF5JyA/IGFsbCA6IG1hdHJpeChhbGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcHJpbmNpcGFsO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBjdWJpYyByb290IGZvciBhIFVuaXRcbiAgICogQHBhcmFtIHtVbml0fSB4XG4gICAqIEByZXR1cm4ge1VuaXR9IFJldHVybnMgdGhlIGN1YmljIHJvb3Qgb2YgeFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9jYnJ0VW5pdCh4KSB7XG4gICAgaWYgKHgudmFsdWUgJiYgKDAsIF9pcy5pc0NvbXBsZXgpKHgudmFsdWUpKSB7XG4gICAgICB2YXIgcmVzdWx0ID0geC5jbG9uZSgpO1xuICAgICAgcmVzdWx0LnZhbHVlID0gMS4wO1xuICAgICAgcmVzdWx0ID0gcmVzdWx0LnBvdygxLjAgLyAzKTsgLy8gQ29tcHV0ZSB0aGUgdW5pdHNcblxuICAgICAgcmVzdWx0LnZhbHVlID0gX2NicnRDb21wbGV4KHgudmFsdWUpOyAvLyBDb21wdXRlIHRoZSB2YWx1ZVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbmVnYXRlID0gaXNOZWdhdGl2ZSh4LnZhbHVlKTtcblxuICAgICAgaWYgKG5lZ2F0ZSkge1xuICAgICAgICB4LnZhbHVlID0gdW5hcnlNaW51cyh4LnZhbHVlKTtcbiAgICAgIH0gLy8gVE9ETzogY3JlYXRlIGEgaGVscGVyIGZ1bmN0aW9uIGZvciB0aGlzXG5cblxuICAgICAgdmFyIHRoaXJkO1xuXG4gICAgICBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikoeC52YWx1ZSkpIHtcbiAgICAgICAgdGhpcmQgPSBuZXcgQmlnTnVtYmVyKDEpLmRpdigzKTtcbiAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0ZyYWN0aW9uKSh4LnZhbHVlKSkge1xuICAgICAgICB0aGlyZCA9IG5ldyBGcmFjdGlvbigxLCAzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXJkID0gMSAvIDM7XG4gICAgICB9XG5cbiAgICAgIHZhciBfcmVzdWx0ID0geC5wb3codGhpcmQpO1xuXG4gICAgICBpZiAobmVnYXRlKSB7XG4gICAgICAgIF9yZXN1bHQudmFsdWUgPSB1bmFyeU1pbnVzKF9yZXN1bHQudmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3Jlc3VsdDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2JydDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDYnJ0ID0gY3JlYXRlQ2JydDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ2VpbCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfbmVhcmx5RXF1YWwgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL25lYXJseUVxdWFsXCIpO1xuXG52YXIgX251bWJlcjIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdjZWlsJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdyb3VuZCddO1xudmFyIGNyZWF0ZUNlaWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICByb3VuZCA9IF9yZWYucm91bmQ7XG5cbiAgLyoqXG4gICAqIFJvdW5kIGEgdmFsdWUgdG93YXJkcyBwbHVzIGluZmluaXR5XG4gICAqIElmIGB4YCBpcyBjb21wbGV4LCBib3RoIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0IGFyZSByb3VuZGVkIHRvd2FyZHMgcGx1cyBpbmZpbml0eS5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNlaWwoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguY2VpbCgzLjIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNFxuICAgKiAgICBtYXRoLmNlaWwoMy44KSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDRcbiAgICogICAgbWF0aC5jZWlsKC00LjIpICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAtNFxuICAgKiAgICBtYXRoLmNlaWwoLTQuNykgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC00XG4gICAqXG4gICAqICAgIGNvbnN0IGMgPSBtYXRoLmNvbXBsZXgoMy4yLCAtMi43KVxuICAgKiAgICBtYXRoLmNlaWwoYykgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgQ29tcGxleCA0IC0gMmlcbiAgICpcbiAgICogICAgbWF0aC5jZWlsKFszLjIsIDMuOCwgLTQuN10pICAvLyByZXR1cm5zIEFycmF5IFs0LCA0LCAtNF1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGZsb29yLCBmaXgsIHJvdW5kXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBOdW1iZXIgdG8gYmUgcm91bmRlZFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gUm91bmRlZCB2YWx1ZVxuICAgKi9cbiAgdmFyIGNlaWwgPSB0eXBlZCgnY2VpbCcsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHJvdW5kKHgpLCBjb25maWcuZXBzaWxvbikpIHtcbiAgICAgICAgcmV0dXJuIHJvdW5kKHgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyMi5jZWlsTnVtYmVyKSh4KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguY2VpbCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgaWYgKCgwLCBfbmVhcmx5RXF1YWwubmVhcmx5RXF1YWwpKHgsIHJvdW5kKHgpLCBjb25maWcuZXBzaWxvbikpIHtcbiAgICAgICAgcmV0dXJuIHJvdW5kKHgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHguY2VpbCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4LmNlaWwoKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2UgY2VpbCgwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgY2VpbCwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNlaWw7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ2VpbCA9IGNyZWF0ZUNlaWw7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUN1YmUgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdjdWJlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQ3ViZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIGN1YmUgb2YgYSB2YWx1ZSwgYHggKiB4ICogeGAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5jdWJlKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmN1YmUoMikgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA4XG4gICAqICAgIG1hdGgucG93KDIsIDMpICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDhcbiAgICogICAgbWF0aC5jdWJlKDQpICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNjRcbiAgICogICAgNCAqIDQgKiA0ICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNjRcbiAgICpcbiAgICogICAgbWF0aC5jdWJlKFsxLCAyLCAzLCA0XSkgLy8gcmV0dXJucyBBcnJheSBbMSwgOCwgMjcsIDY0XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbXVsdGlwbHksIHNxdWFyZSwgcG93LCBjYnJ0XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4IHwgVW5pdH0geCAgTnVtYmVyIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIGN1YmVcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXggfCBVbml0fSBDdWJlIG9mIHhcbiAgICovXG4gIHZhciBjdWJlID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5jdWJlTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHgubXVsKHgpLm11bCh4KTsgLy8gSXMgZmFzdGVyIHRoYW4gcG93KHgsIDMpXG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC50aW1lcyh4KS50aW1lcyh4KTtcbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4geC5wb3coMyk7IC8vIElzIGZhc3RlciB0aGFuIG11bCgpbXVsKCltdWwoKVxuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBjdWJlKDApID0gMFxuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBjdWJlLCB0cnVlKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgcmV0dXJuIHgucG93KDMpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjdWJlO1xufSk7XG5leHBvcnRzLmNyZWF0ZUN1YmUgPSBjcmVhdGVDdWJlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEaXZpZGUgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBuYW1lID0gJ2RpdmlkZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnbXVsdGlwbHknLCAnZXF1YWxTY2FsYXInLCAnZGl2aWRlU2NhbGFyJywgJ2ludiddO1xudmFyIGNyZWF0ZURpdmlkZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgaW52ID0gX3JlZi5pbnY7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTExKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogRGl2aWRlIHR3byB2YWx1ZXMsIGB4IC8geWAuXG4gICAqIFRvIGRpdmlkZSBtYXRyaWNlcywgYHhgIGlzIG11bHRpcGxpZWQgd2l0aCB0aGUgaW52ZXJzZSBvZiBgeWA6IGB4ICogaW52KHkpYC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmRpdmlkZSh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5kaXZpZGUoMiwgMykgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAwLjY2NjY2NjY2NjY2NjY2NjZcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGguY29tcGxleCg1LCAxNClcbiAgICogICAgY29uc3QgYiA9IG1hdGguY29tcGxleCg0LCAxKVxuICAgKiAgICBtYXRoLmRpdmlkZShhLCBiKSAgICAgICAgICAgIC8vIHJldHVybnMgQ29tcGxleCAyICsgM2lcbiAgICpcbiAgICogICAgY29uc3QgYyA9IFtbNywgLTZdLCBbMTMsIC00XV1cbiAgICogICAgY29uc3QgZCA9IFtbMSwgMl0sIFs0LCAzXV1cbiAgICogICAgbWF0aC5kaXZpZGUoYywgZCkgICAgICAgICAgICAvLyByZXR1cm5zIEFycmF5IFtbLTksIDRdLCBbLTExLCA2XV1cbiAgICpcbiAgICogICAgY29uc3QgZSA9IG1hdGgudW5pdCgnMTgga20nKVxuICAgKiAgICBtYXRoLmRpdmlkZShlLCA0LjUpICAgICAgICAgIC8vIHJldHVybnMgVW5pdCA0IGttXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBtdWx0aXBseVxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggICBOdW1lcmF0b3JcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHkgICAgICAgICAgRGVub21pbmF0b3JcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSAgICAgICAgICAgICAgICAgICAgICBRdW90aWVudCwgYHggLyB5YFxuICAgKi9cblxuICByZXR1cm4gdHlwZWQoJ2RpdmlkZScsICgwLCBfb2JqZWN0LmV4dGVuZCkoe1xuICAgIC8vIHdlIGV4dGVuZCB0aGUgc2lnbmF0dXJlcyBvZiBkaXZpZGVTY2FsYXIgd2l0aCBzaWduYXR1cmVzIGRlYWxpbmcgd2l0aCBtYXRyaWNlc1xuICAgICdBcnJheSB8IE1hdHJpeCwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIFRPRE86IGltcGxlbWVudCBtYXRyaXggcmlnaHQgZGl2aXNpb24gdXNpbmcgcHNldWRvIGludmVyc2VcbiAgICAgIC8vIGh0dHBzOi8vd3d3Lm1hdGh3b3Jrcy5ubC9oZWxwL21hdGxhYi9yZWYvbXJkaXZpZGUuaHRtbFxuICAgICAgLy8gaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9vY3RhdmUvZG9jL2ludGVycHJldGVyL0FyaXRobWV0aWMtT3BzLmh0bWxcbiAgICAgIC8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEyMjYzOTMyL2hvdy1kb2VzLWdudS1vY3RhdmUtbWF0cml4LWRpdmlzaW9uLXdvcmstZ2V0dGluZy11bmV4cGVjdGVkLWJlaGF2aW91clxuICAgICAgcmV0dXJuIG11bHRpcGx5KHgsIGludih5KSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBkaXZpZGVTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgZGl2aWRlU2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGRpdmlkZVNjYWxhciwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gYW55QXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIG11bHRpcGx5KHgsIGludih5KSk7XG4gICAgfVxuICB9LCBkaXZpZGVTY2FsYXIuc2lnbmF0dXJlcykpO1xufSk7XG5leHBvcnRzLmNyZWF0ZURpdmlkZSA9IGNyZWF0ZURpdmlkZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRGl2aWRlU2NhbGFyID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIG5hbWUgPSAnZGl2aWRlU2NhbGFyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ251bWVyaWMnXTtcbnZhciBjcmVhdGVEaXZpZGVTY2FsYXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbnVtZXJpYyA9IF9yZWYubnVtZXJpYztcblxuICAvKipcbiAgICogRGl2aWRlIHR3byBzY2FsYXIgdmFsdWVzLCBgeCAvIHlgLlxuICAgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IGZvciBpbnRlcm5hbCB1c2U6IGl0IGlzIHVzZWQgYnkgdGhlIHB1YmxpYyBmdW5jdGlvbnNcbiAgICogYGRpdmlkZWAgYW5kIGBpbnZgLlxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHN1cHBvcnQgY29sbGVjdGlvbnMgKEFycmF5IG9yIE1hdHJpeCkuXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXR9IHggICBOdW1lcmF0b3JcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4fSB5ICAgICAgICAgIERlbm9taW5hdG9yXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXR9ICAgICBRdW90aWVudCwgYHggLyB5YFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdmFyIGRpdmlkZVNjYWxhciA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHggLyB5O1xuICAgIH0sXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7XG4gICAgICByZXR1cm4geC5kaXYoeSk7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHguZGl2KHkpO1xuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkge1xuICAgICAgcmV0dXJuIHguZGl2KHkpO1xuICAgIH0sXG4gICAgJ1VuaXQsIG51bWJlciB8IEZyYWN0aW9uIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gVW5pdE51bWJlckZyYWN0aW9uQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHZhciByZXMgPSB4LmNsb25lKCk7IC8vIFRPRE86IG1vdmUgdGhlIGRpdmlkZSBmdW5jdGlvbiB0byBVbml0LmpzLCBpdCB1c2VzIGludGVybmFscyBvZiBVbml0XG5cbiAgICAgIHZhciBvbmUgPSBudW1lcmljKDEsICgwLCBfaXMudHlwZU9mKSh5KSk7XG4gICAgICByZXMudmFsdWUgPSBkaXZpZGVTY2FsYXIocmVzLnZhbHVlID09PSBudWxsID8gcmVzLl9ub3JtYWxpemUob25lKSA6IHJlcy52YWx1ZSwgeSk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEZyYWN0aW9uIHwgQmlnTnVtYmVyLCBVbml0JzogZnVuY3Rpb24gbnVtYmVyRnJhY3Rpb25CaWdOdW1iZXJVbml0KHgsIHkpIHtcbiAgICAgIHZhciByZXMgPSB5LmNsb25lKCk7XG4gICAgICByZXMgPSByZXMucG93KC0xKTsgLy8gVE9ETzogbW92ZSB0aGUgZGl2aWRlIGZ1bmN0aW9uIHRvIFVuaXQuanMsIGl0IHVzZXMgaW50ZXJuYWxzIG9mIFVuaXRcblxuICAgICAgdmFyIG9uZSA9IG51bWVyaWMoMSwgKDAsIF9pcy50eXBlT2YpKHgpKTtcbiAgICAgIHJlcy52YWx1ZSA9IGRpdmlkZVNjYWxhcih4LCB5LnZhbHVlID09PSBudWxsID8geS5fbm9ybWFsaXplKG9uZSkgOiB5LnZhbHVlKTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfSxcbiAgICAnVW5pdCwgVW5pdCc6IGZ1bmN0aW9uIFVuaXRVbml0KHgsIHkpIHtcbiAgICAgIHJldHVybiB4LmRpdmlkZSh5KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZGl2aWRlU2NhbGFyO1xufSk7XG5leHBvcnRzLmNyZWF0ZURpdmlkZVNjYWxhciA9IGNyZWF0ZURpdmlkZVNjYWxhcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRG90RGl2aWRlID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDJcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA3XCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTFcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMlwiKTtcblxudmFyIF9hbGdvcml0aG02ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTcgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBuYW1lID0gJ2RvdERpdmlkZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnZGl2aWRlU2NhbGFyJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlRG90RGl2aWRlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBhbGdvcml0aG0wMiA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTAzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDcgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMDcpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTEgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTEpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTIgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTYuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNy5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIERpdmlkZSB0d28gbWF0cmljZXMgZWxlbWVudCB3aXNlLiBUaGUgZnVuY3Rpb24gYWNjZXB0cyBib3RoIG1hdHJpY2VzIGFuZFxuICAgKiBzY2FsYXIgdmFsdWVzLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZG90RGl2aWRlKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmRvdERpdmlkZSgyLCA0KSAgIC8vIHJldHVybnMgMC41XG4gICAqXG4gICAqICAgIGEgPSBbWzksIDVdLCBbNiwgMV1dXG4gICAqICAgIGIgPSBbWzMsIDJdLCBbNSwgMl1dXG4gICAqXG4gICAqICAgIG1hdGguZG90RGl2aWRlKGEsIGIpICAgLy8gcmV0dXJucyBbWzMsIDIuNV0sIFsxLjIsIDAuNV1dXG4gICAqICAgIG1hdGguZGl2aWRlKGEsIGIpICAgICAgLy8gcmV0dXJucyBbWzEuNzUsIDAuNzVdLCBbLTEuNzUsIDIuMjVdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZGl2aWRlLCBtdWx0aXBseSwgZG90TXVsdGlwbHlcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4IE51bWVyYXRvclxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHkgRGVub21pbmF0b3JcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSAgICAgICAgICAgICAgICAgICAgUXVvdGllbnQsIGB4IC4vIHlgXG4gICAqL1xuXG4gIHZhciBkb3REaXZpZGUgPSB0eXBlZChuYW1lLCB7XG4gICAgJ2FueSwgYW55JzogZGl2aWRlU2NhbGFyLFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDcoeCwgeSwgZGl2aWRlU2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMih5LCB4LCBkaXZpZGVTY2FsYXIsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeCwgeSwgZGl2aWRlU2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgZGl2aWRlU2NhbGFyKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBkb3REaXZpZGUobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGRvdERpdmlkZShtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZG90RGl2aWRlKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHgsIHksIGRpdmlkZVNjYWxhciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgZGl2aWRlU2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHksIHgsIGRpdmlkZVNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBkaXZpZGVTY2FsYXIsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBkaXZpZGVTY2FsYXIsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIGRpdmlkZVNjYWxhciwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBkb3REaXZpZGU7XG59KTtcbmV4cG9ydHMuY3JlYXRlRG90RGl2aWRlID0gY3JlYXRlRG90RGl2aWRlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEb3RNdWx0aXBseSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAyXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDlcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMVwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBuYW1lID0gJ2RvdE11bHRpcGx5JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICdtdWx0aXBseVNjYWxhciddO1xudmFyIGNyZWF0ZURvdE11bHRpcGx5ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyO1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wOSA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wOSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogTXVsdGlwbHkgdHdvIG1hdHJpY2VzIGVsZW1lbnQgd2lzZS4gVGhlIGZ1bmN0aW9uIGFjY2VwdHMgYm90aCBtYXRyaWNlcyBhbmRcbiAgICogc2NhbGFyIHZhbHVlcy5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmRvdE11bHRpcGx5KHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmRvdE11bHRpcGx5KDIsIDQpIC8vIHJldHVybnMgOFxuICAgKlxuICAgKiAgICBhID0gW1s5LCA1XSwgWzYsIDFdXVxuICAgKiAgICBiID0gW1szLCAyXSwgWzUsIDJdXVxuICAgKlxuICAgKiAgICBtYXRoLmRvdE11bHRpcGx5KGEsIGIpIC8vIHJldHVybnMgW1syNywgMTBdLCBbMzAsIDJdXVxuICAgKiAgICBtYXRoLm11bHRpcGx5KGEsIGIpICAgIC8vIHJldHVybnMgW1s1MiwgMjhdLCBbMjMsIDE0XV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIG11bHRpcGx5LCBkaXZpZGUsIGRvdERpdmlkZVxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggTGVmdCBoYW5kIHZhbHVlXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geSBSaWdodCBoYW5kIHZhbHVlXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0gICAgICAgICAgICAgICAgICAgIE11bHRpcGxpY2F0aW9uIG9mIGB4YCBhbmQgYHlgXG4gICAqL1xuXG4gIHZhciBkb3RNdWx0aXBseSA9IHR5cGVkKG5hbWUsIHtcbiAgICAnYW55LCBhbnknOiBtdWx0aXBseVNjYWxhcixcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA5KHgsIHksIG11bHRpcGx5U2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMih5LCB4LCBtdWx0aXBseVNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMih4LCB5LCBtdWx0aXBseVNjYWxhciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIG11bHRpcGx5U2NhbGFyKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBkb3RNdWx0aXBseShtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZG90TXVsdGlwbHkobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGRvdE11bHRpcGx5KHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHgsIHksIG11bHRpcGx5U2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBtdWx0aXBseVNjYWxhciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh5LCB4LCBtdWx0aXBseVNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBtdWx0aXBseVNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIG11bHRpcGx5U2NhbGFyLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBtdWx0aXBseVNjYWxhciwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBkb3RNdWx0aXBseTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVEb3RNdWx0aXBseSA9IGNyZWF0ZURvdE11bHRpcGx5OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVEb3RQb3cgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA3XCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTFcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMlwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTYgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBuYW1lID0gJ2RvdFBvdyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdlcXVhbFNjYWxhcicsICdtYXRyaXgnLCAncG93JywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlRG90UG93ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgcG93ID0gX3JlZi5wb3csXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBhbGdvcml0aG0wMyA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDcgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMDcpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTEgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMTEpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTIgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNi5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHBvd2VyIG9mIHggdG8geSBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5kb3RQb3coeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZG90UG93KDIsIDMpICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgOFxuICAgKlxuICAgKiAgICBjb25zdCBhID0gW1sxLCAyXSwgWzQsIDNdXVxuICAgKiAgICBtYXRoLmRvdFBvdyhhLCAyKSAgICAgICAgICAgIC8vIHJldHVybnMgQXJyYXkgW1sxLCA0XSwgWzE2LCA5XV1cbiAgICogICAgbWF0aC5wb3coYSwgMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIEFycmF5IFtbOSwgOF0sIFsxNiwgMTddXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgcG93LCBzcXJ0LCBtdWx0aXBseVxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBUaGUgYmFzZVxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB5ICBUaGUgZXhwb25lbnRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0gICAgICAgICAgICAgICAgICAgICBUaGUgdmFsdWUgb2YgYHhgIHRvIHRoZSBwb3dlciBgeWBcbiAgICovXG5cbiAgdmFyIGRvdFBvdyA9IHR5cGVkKG5hbWUsIHtcbiAgICAnYW55LCBhbnknOiBwb3csXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNyh4LCB5LCBwb3csIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHksIHgsIHBvdywgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBwb3csIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBwb3cpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGRvdFBvdyhtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZG90UG93KG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBkb3RQb3coeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgZG90UG93LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBkb3RQb3csIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgZG90UG93LCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGRvdFBvdywgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGRvdFBvdywgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgZG90UG93LCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGRvdFBvdztcbn0pO1xuZXhwb3J0cy5jcmVhdGVEb3RQb3cgPSBjcmVhdGVEb3RQb3c7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUV4cCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2V4cCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUV4cCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZXhwb25lbnQgb2YgYSB2YWx1ZS5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmV4cCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5leHAoMikgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA3LjM4OTA1NjA5ODkzMDY0OTVcbiAgICogICAgbWF0aC5wb3cobWF0aC5lLCAyKSAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA3LjM4OTA1NjA5ODkzMDY0OTVcbiAgICogICAgbWF0aC5sb2cobWF0aC5leHAoMikpICAgICAgICAvLyByZXR1cm5zIG51bWJlciAyXG4gICAqXG4gICAqICAgIG1hdGguZXhwKFsxLCAyLCAzXSlcbiAgICogICAgLy8gcmV0dXJucyBBcnJheSBbXG4gICAqICAgIC8vICAgMi43MTgyODE4Mjg0NTkwNDUsXG4gICAqICAgIC8vICAgNy4zODkwNTYwOTg5MzA2NDk1LFxuICAgKiAgICAvLyAgIDIwLjA4NTUzNjkyMzE4NzY2OFxuICAgKiAgICAvLyBdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBleHBtMSwgbG9nLCBwb3dcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggIEEgbnVtYmVyIG9yIG1hdHJpeCB0byBleHBvbmVudGlhdGVcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBFeHBvbmVudCBvZiBgeGBcbiAgICovXG4gIHZhciBleHAgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmV4cE51bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmV4cCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguZXhwKCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBUT0RPOiBleHAoc3BhcnNlKSBzaG91bGQgcmV0dXJuIGEgZGVuc2UgbWF0cml4IHNpbmNlIGV4cCgwKT09MVxuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBleHApO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBleHA7XG59KTtcbmV4cG9ydHMuY3JlYXRlRXhwID0gY3JlYXRlRXhwOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVFeHBtMSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2V4cG0xJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0NvbXBsZXgnXTtcbnZhciBjcmVhdGVFeHBtMSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBfQ29tcGxleCA9IF9yZWYuQ29tcGxleDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSB2YWx1ZSBvZiBzdWJ0cmFjdGluZyAxIGZyb20gdGhlIGV4cG9uZW50aWFsIHZhbHVlLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZXhwbTEoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZXhwbTEoMikgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNi4zODkwNTYwOTg5MzA2NVxuICAgKiAgICBtYXRoLnBvdyhtYXRoLmUsIDIpIC0gMSAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDYuMzg5MDU2MDk4OTMwNjQ5NVxuICAgKiAgICBtYXRoLmxvZyhtYXRoLmV4cG0xKDIpICsgMSkgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDJcbiAgICpcbiAgICogICAgbWF0aC5leHBtMShbMSwgMiwgM10pXG4gICAqICAgIC8vIHJldHVybnMgQXJyYXkgW1xuICAgKiAgICAvLyAgIDEuNzE4MjgxODI4NDU5MDQ1LFxuICAgKiAgICAvLyAgIDYuMzg5MDU2MDk4OTMwNjQ5NSxcbiAgICogICAgLy8gICAxOS4wODU1MzY5MjMxODc2NjhcbiAgICogICAgLy8gXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZXhwLCBsb2csIHBvd1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgQSBudW1iZXIgb3IgbWF0cml4IHRvIGFwcGx5IGV4cG0xXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gRXhwb25lbnQgb2YgYHhgXG4gICAqL1xuICB2YXIgZXhwbTEgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmV4cG0xTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgdmFyIHIgPSBNYXRoLmV4cCh4LnJlKTtcbiAgICAgIHJldHVybiBuZXcgX0NvbXBsZXgociAqIE1hdGguY29zKHguaW0pIC0gMSwgciAqIE1hdGguc2luKHguaW0pKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmV4cCgpLm1pbnVzKDEpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBleHBtMSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGV4cG0xO1xufSk7XG5leHBvcnRzLmNyZWF0ZUV4cG0xID0gY3JlYXRlRXhwbTE7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZpeCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgbmFtZSA9ICdmaXgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQ29tcGxleCcsICdjZWlsJywgJ2Zsb29yJ107XG52YXIgY3JlYXRlRml4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIF9Db21wbGV4ID0gX3JlZi5Db21wbGV4LFxuICAgICAgY2VpbCA9IF9yZWYuY2VpbCxcbiAgICAgIGZsb29yID0gX3JlZi5mbG9vcjtcblxuICAvKipcbiAgICogUm91bmQgYSB2YWx1ZSB0b3dhcmRzIHplcm8uXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5maXgoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZml4KDMuMikgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgM1xuICAgKiAgICBtYXRoLmZpeCgzLjgpICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDNcbiAgICogICAgbWF0aC5maXgoLTQuMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAtNFxuICAgKiAgICBtYXRoLmZpeCgtNC43KSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC00XG4gICAqXG4gICAqICAgIGNvbnN0IGMgPSBtYXRoLmNvbXBsZXgoMy4yLCAtMi43KVxuICAgKiAgICBtYXRoLmZpeChjKSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgQ29tcGxleCAzIC0gMmlcbiAgICpcbiAgICogICAgbWF0aC5maXgoWzMuMiwgMy44LCAtNC43XSkgICAvLyByZXR1cm5zIEFycmF5IFszLCAzLCAtNF1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGNlaWwsIGZsb29yLCByb3VuZFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4IE51bWJlciB0byBiZSByb3VuZGVkXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSAgICAgICAgICAgIFJvdW5kZWQgdmFsdWVcbiAgICovXG4gIHZhciBmaXggPSB0eXBlZCgnZml4Jywge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4ID4gMCA/IGZsb29yKHgpIDogY2VpbCh4KTtcbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIG5ldyBfQ29tcGxleCh4LnJlID4gMCA/IE1hdGguZmxvb3IoeC5yZSkgOiBNYXRoLmNlaWwoeC5yZSksIHguaW0gPiAwID8gTWF0aC5mbG9vcih4LmltKSA6IE1hdGguY2VpbCh4LmltKSk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5pc05lZ2F0aXZlKCkgPyBjZWlsKHgpIDogZmxvb3IoeCk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHgucyA8IDAgPyB4LmNlaWwoKSA6IHguZmxvb3IoKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2UgZml4KDApID0gMFxuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBmaXgsIHRydWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBmaXg7XG59KTtcbmV4cG9ydHMuY3JlYXRlRml4ID0gY3JlYXRlRml4OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVGbG9vciA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfbmVhcmx5RXF1YWwgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL25lYXJseUVxdWFsXCIpO1xuXG52YXIgbmFtZSA9ICdmbG9vcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAncm91bmQnXTtcbnZhciBjcmVhdGVGbG9vciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIHJvdW5kID0gX3JlZi5yb3VuZDtcblxuICAvKipcbiAgICogUm91bmQgYSB2YWx1ZSB0b3dhcmRzIG1pbnVzIGluZmluaXR5LlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZmxvb3IoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZmxvb3IoMy4yKSAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgM1xuICAgKiAgICBtYXRoLmZsb29yKDMuOCkgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDNcbiAgICogICAgbWF0aC5mbG9vcigtNC4yKSAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAtNVxuICAgKiAgICBtYXRoLmZsb29yKC00LjcpICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC01XG4gICAqXG4gICAqICAgIGNvbnN0IGMgPSBtYXRoLmNvbXBsZXgoMy4yLCAtMi43KVxuICAgKiAgICBtYXRoLmZsb29yKGMpICAgICAgICAgICAgICAgIC8vIHJldHVybnMgQ29tcGxleCAzIC0gM2lcbiAgICpcbiAgICogICAgbWF0aC5mbG9vcihbMy4yLCAzLjgsIC00LjddKSAvLyByZXR1cm5zIEFycmF5IFszLCAzLCAtNV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGNlaWwsIGZpeCwgcm91bmRcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggIE51bWJlciB0byBiZSByb3VuZGVkXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBSb3VuZGVkIHZhbHVlXG4gICAqL1xuICB2YXIgZmxvb3IgPSB0eXBlZCgnZmxvb3InLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgaWYgKCgwLCBfbnVtYmVyLm5lYXJseUVxdWFsKSh4LCByb3VuZCh4KSwgY29uZmlnLmVwc2lsb24pKSB7XG4gICAgICAgIHJldHVybiByb3VuZCh4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBNYXRoLmZsb29yKHgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5mbG9vcigpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgaWYgKCgwLCBfbmVhcmx5RXF1YWwubmVhcmx5RXF1YWwpKHgsIHJvdW5kKHgpLCBjb25maWcuZXBzaWxvbikpIHtcbiAgICAgICAgcmV0dXJuIHJvdW5kKHgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHguZmxvb3IoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4geC5mbG9vcigpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBmbG9vcigwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgZmxvb3IsIHRydWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBmbG9vcjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVGbG9vciA9IGNyZWF0ZUZsb29yOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVHY2QgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMVwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA0XCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTBcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2djZCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnQmlnTnVtYmVyJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlR2NkID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXIsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBhbGdvcml0aG0wMSA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAxKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDQgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMDQpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTAgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMTApKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3IgZm9yIHR3byBvciBtb3JlIHZhbHVlcyBvciBhcnJheXMuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5nY2QoYSwgYilcbiAgICogICAgbWF0aC5nY2QoYSwgYiwgYywgLi4uKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5nY2QoOCwgMTIpICAgICAgICAgICAgICAvLyByZXR1cm5zIDRcbiAgICogICAgbWF0aC5nY2QoLTQsIDYpICAgICAgICAgICAgICAvLyByZXR1cm5zIDJcbiAgICogICAgbWF0aC5nY2QoMjUsIDE1LCAtMTApICAgICAgICAvLyByZXR1cm5zIDVcbiAgICpcbiAgICogICAgbWF0aC5nY2QoWzgsIC00XSwgWzEyLCA2XSkgICAvLyByZXR1cm5zIFs0LCAyXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbGNtLCB4Z2NkXG4gICAqXG4gICAqIEBwYXJhbSB7Li4uIG51bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQXJyYXkgfCBNYXRyaXh9IGFyZ3MgIFR3byBvciBtb3JlIGludGVnZXIgbnVtYmVyc1xuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IEFycmF5IHwgTWF0cml4fSAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBncmVhdGVzdCBjb21tb24gZGl2aXNvclxuICAgKi9cblxuICB2YXIgZ2NkID0gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IF9udW1iZXIuZ2NkTnVtYmVyLFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IF9nY2RCaWdOdW1iZXIsXG4gICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkge1xuICAgICAgcmV0dXJuIHguZ2NkKHkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNCh4LCB5LCBnY2QpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeSwgeCwgZ2NkLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAxKHgsIHksIGdjZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIGdjZCk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZ2NkKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBnY2QobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGdjZCh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gU3BhcnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh4LCB5LCBnY2QsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gRGVuc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGdjZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyU3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh5LCB4LCBnY2QsIHRydWUpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgZ2NkLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgZ2NkLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgQXJyYXknOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBnY2QsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgIC8vIFRPRE86IG5lZWQgYSBzbWFydGVyIG5vdGF0aW9uIGhlcmVcbiAgICAnQXJyYXkgfCBNYXRyaXggfCBudW1iZXIgfCBCaWdOdW1iZXIsIEFycmF5IHwgTWF0cml4IHwgbnVtYmVyIHwgQmlnTnVtYmVyLCAuLi5BcnJheSB8IE1hdHJpeCB8IG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXJBcnJheU1hdHJpeE51bWJlckJpZ051bWJlcihhLCBiLCBhcmdzKSB7XG4gICAgICB2YXIgcmVzID0gZ2NkKGEsIGIpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzID0gZ2NkKHJlcywgYXJnc1tpXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGdjZDtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSBnY2QgZm9yIEJpZ051bWJlcnNcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IGFcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IGJcbiAgICogQHJldHVybnMge0JpZ051bWJlcn0gUmV0dXJucyBncmVhdGVzdCBjb21tb24gZGVub21pbmF0b3Igb2YgYSBhbmQgYlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfZ2NkQmlnTnVtYmVyKGEsIGIpIHtcbiAgICBpZiAoIWEuaXNJbnQoKSB8fCAhYi5pc0ludCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24gZ2NkIG11c3QgYmUgaW50ZWdlciBudW1iZXJzJyk7XG4gICAgfSAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FdWNsaWRlYW5fYWxnb3JpdGhtXG5cblxuICAgIHZhciB6ZXJvID0gbmV3IEJpZ051bWJlcigwKTtcblxuICAgIHdoaWxlICghYi5pc1plcm8oKSkge1xuICAgICAgdmFyIHIgPSBhLm1vZChiKTtcbiAgICAgIGEgPSBiO1xuICAgICAgYiA9IHI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGEubHQoemVybykgPyBhLm5lZygpIDogYTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUdjZCA9IGNyZWF0ZUdjZDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSHlwb3QgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgbmFtZSA9ICdoeXBvdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhYnMnLCAnYWRkU2NhbGFyJywgJ2RpdmlkZVNjYWxhcicsICdtdWx0aXBseVNjYWxhcicsICdzcXJ0JywgJ3NtYWxsZXInLCAnaXNQb3NpdGl2ZSddO1xudmFyIGNyZWF0ZUh5cG90ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFicyA9IF9yZWYuYWJzLFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcixcbiAgICAgIHNxcnQgPSBfcmVmLnNxcnQsXG4gICAgICBzbWFsbGVyID0gX3JlZi5zbWFsbGVyLFxuICAgICAgaXNQb3NpdGl2ZSA9IF9yZWYuaXNQb3NpdGl2ZTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBoeXBvdGVudXNhIG9mIGEgbGlzdCB3aXRoIHZhbHVlcy4gVGhlIGh5cG90ZW51c2EgaXMgZGVmaW5lZCBhczpcbiAgICpcbiAgICogICAgIGh5cG90KGEsIGIsIGMsIC4uLikgPSBzcXJ0KGFeMiArIGJeMiArIGNeMiArIC4uLilcbiAgICpcbiAgICogRm9yIG1hdHJpeCBpbnB1dCwgdGhlIGh5cG90ZW51c2EgaXMgY2FsY3VsYXRlZCBmb3IgYWxsIHZhbHVlcyBpbiB0aGUgbWF0cml4LlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmh5cG90KGEsIGIsIC4uLilcbiAgICogICAgIG1hdGguaHlwb3QoW2EsIGIsIGMsIC4uLl0pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5oeXBvdCgzLCA0KSAgICAgIC8vIDVcbiAgICogICAgIG1hdGguaHlwb3QoMywgNCwgNSkgICAvLyA3LjA3MTA2NzgxMTg2NTQ3NTVcbiAgICogICAgIG1hdGguaHlwb3QoWzMsIDQsIDVdKSAvLyA3LjA3MTA2NzgxMTg2NTQ3NTVcbiAgICogICAgIG1hdGguaHlwb3QoLTIpICAgICAgICAvLyAyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgYWJzLCBub3JtXG4gICAqXG4gICAqIEBwYXJhbSB7Li4uIG51bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBhcmdzICAgIEEgbGlzdCB3aXRoIG51bWVyaWMgdmFsdWVzIG9yIGFuIEFycmF5IG9yIE1hdHJpeC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0cml4IGFuZCBBcnJheSBpbnB1dCBpcyBmbGF0dGVuZWQgYW5kIHJldHVybnMgYVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGUgbnVtYmVyIGZvciB0aGUgd2hvbGUgbWF0cml4LlxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXJ9IFJldHVybnMgdGhlIGh5cG90aGVudXNhIG9mIHRoZSBpbnB1dCB2YWx1ZXMuXG4gICAqL1xuICB2YXIgaHlwb3QgPSB0eXBlZChuYW1lLCB7XG4gICAgJy4uLiBudW1iZXIgfCBCaWdOdW1iZXInOiBfaHlwb3QsXG4gICAgQXJyYXk6IGZ1bmN0aW9uIEFycmF5KHgpIHtcbiAgICAgIHJldHVybiBoeXBvdC5hcHBseShoeXBvdCwgKDAsIF9hcnJheS5mbGF0dGVuKSh4KSk7XG4gICAgfSxcbiAgICBNYXRyaXg6IGZ1bmN0aW9uIE1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gaHlwb3QuYXBwbHkoaHlwb3QsICgwLCBfYXJyYXkuZmxhdHRlbikoeC50b0FycmF5KCkpKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBoeXBvdGVudXNhIGZvciBhbiBBcnJheSB3aXRoIHZhbHVlc1xuICAgKiBAcGFyYW0ge0FycmF5LjxudW1iZXIgfCBCaWdOdW1iZXI+fSBhcmdzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlcn0gUmV0dXJucyB0aGUgcmVzdWx0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9oeXBvdChhcmdzKSB7XG4gICAgLy8gY29kZSBiYXNlZCBvbiBgaHlwb3RgIGZyb20gZXM2LXNoaW06XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BhdWxtaWxsci9lczYtc2hpbS9ibG9iL21hc3Rlci9lczYtc2hpbS5qcyNMMTYxOS1MMTYzM1xuICAgIHZhciByZXN1bHQgPSAwO1xuICAgIHZhciBsYXJnZXN0ID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHZhbHVlID0gYWJzKGFyZ3NbaV0pO1xuXG4gICAgICBpZiAoc21hbGxlcihsYXJnZXN0LCB2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0ID0gbXVsdGlwbHlTY2FsYXIocmVzdWx0LCBtdWx0aXBseVNjYWxhcihkaXZpZGVTY2FsYXIobGFyZ2VzdCwgdmFsdWUpLCBkaXZpZGVTY2FsYXIobGFyZ2VzdCwgdmFsdWUpKSk7XG4gICAgICAgIHJlc3VsdCA9IGFkZFNjYWxhcihyZXN1bHQsIDEpO1xuICAgICAgICBsYXJnZXN0ID0gdmFsdWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBhZGRTY2FsYXIocmVzdWx0LCBpc1Bvc2l0aXZlKHZhbHVlKSA/IG11bHRpcGx5U2NhbGFyKGRpdmlkZVNjYWxhcih2YWx1ZSwgbGFyZ2VzdCksIGRpdmlkZVNjYWxhcih2YWx1ZSwgbGFyZ2VzdCkpIDogdmFsdWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtdWx0aXBseVNjYWxhcihsYXJnZXN0LCBzcXJ0KHJlc3VsdCkpO1xuICB9XG5cbiAgcmV0dXJuIGh5cG90O1xufSk7XG5leHBvcnRzLmNyZWF0ZUh5cG90ID0gY3JlYXRlSHlwb3Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUxjbSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAyXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDZcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMVwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnbGNtJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhciddO1xudmFyIGNyZWF0ZUxjbSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcjtcbiAgdmFyIGFsZ29yaXRobTAyID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDYgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMDYpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTEgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMTEpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbGVhc3QgY29tbW9uIG11bHRpcGxlIGZvciB0d28gb3IgbW9yZSB2YWx1ZXMgb3IgYXJyYXlzLlxuICAgKlxuICAgKiBsY20gaXMgZGVmaW5lZCBhczpcbiAgICpcbiAgICogICAgIGxjbShhLCBiKSA9IGFicyhhICogYikgLyBnY2QoYSwgYilcbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmxjbShhLCBiKVxuICAgKiAgICBtYXRoLmxjbShhLCBiLCBjLCAuLi4pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmxjbSg0LCA2KSAgICAgICAgICAgICAgIC8vIHJldHVybnMgMTJcbiAgICogICAgbWF0aC5sY20oNiwgMjEpICAgICAgICAgICAgICAvLyByZXR1cm5zIDQyXG4gICAqICAgIG1hdGgubGNtKDYsIDIxLCA1KSAgICAgICAgICAgLy8gcmV0dXJucyAyMTBcbiAgICpcbiAgICogICAgbWF0aC5sY20oWzQsIDZdLCBbNiwgMjFdKSAgICAvLyByZXR1cm5zIFsxMiwgNDJdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBnY2QsIHhnY2RcbiAgICpcbiAgICogQHBhcmFtIHsuLi4gbnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IGFyZ3MgIFR3byBvciBtb3JlIGludGVnZXIgbnVtYmVyc1xuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgbGVhc3QgY29tbW9uIG11bHRpcGxlXG4gICAqL1xuXG4gIHZhciBsY20gPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5sY21OdW1iZXIsXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogX2xjbUJpZ051bWJlcixcbiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7XG4gICAgICByZXR1cm4geC5sY20oeSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA2KHgsIHksIGxjbSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMih5LCB4LCBsY20sIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDIoeCwgeSwgbGNtLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgbGNtKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBsY20obWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxjbShtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbGNtKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHgsIHksIGxjbSwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBEZW5zZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgbGNtLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHksIHgsIGxjbSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckRlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBsY20sIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheU51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBsY20sIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBBcnJheSc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIGxjbSwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgLy8gVE9ETzogbmVlZCBhIHNtYXJ0ZXIgbm90YXRpb24gaGVyZVxuICAgICdBcnJheSB8IE1hdHJpeCB8IG51bWJlciB8IEJpZ051bWJlciwgQXJyYXkgfCBNYXRyaXggfCBudW1iZXIgfCBCaWdOdW1iZXIsIC4uLkFycmF5IHwgTWF0cml4IHwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJCaWdOdW1iZXJBcnJheU1hdHJpeE51bWJlckJpZ051bWJlckFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyKGEsIGIsIGFyZ3MpIHtcbiAgICAgIHZhciByZXMgPSBsY20oYSwgYik7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgICByZXMgPSBsY20ocmVzLCBhcmdzW2ldKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbGNtO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIGxjbSBmb3IgdHdvIEJpZ051bWJlcnNcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IGFcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IGJcbiAgICogQHJldHVybnMge0JpZ051bWJlcn0gUmV0dXJucyB0aGUgbGVhc3QgY29tbW9uIG11bHRpcGxlIG9mIGEgYW5kIGJcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX2xjbUJpZ051bWJlcihhLCBiKSB7XG4gICAgaWYgKCFhLmlzSW50KCkgfHwgIWIuaXNJbnQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXJzIGluIGZ1bmN0aW9uIGxjbSBtdXN0IGJlIGludGVnZXIgbnVtYmVycycpO1xuICAgIH1cblxuICAgIGlmIChhLmlzWmVybygpKSB7XG4gICAgICByZXR1cm4gYTtcbiAgICB9XG5cbiAgICBpZiAoYi5pc1plcm8oKSkge1xuICAgICAgcmV0dXJuIGI7XG4gICAgfSAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FdWNsaWRlYW5fYWxnb3JpdGhtXG4gICAgLy8gZXZhbHVhdGUgbGNtIGhlcmUgaW5saW5lIHRvIHJlZHVjZSBvdmVyaGVhZFxuXG5cbiAgICB2YXIgcHJvZCA9IGEudGltZXMoYik7XG5cbiAgICB3aGlsZSAoIWIuaXNaZXJvKCkpIHtcbiAgICAgIHZhciB0ID0gYjtcbiAgICAgIGIgPSBhLm1vZCh0KTtcbiAgICAgIGEgPSB0O1xuICAgIH1cblxuICAgIHJldHVybiBwcm9kLmRpdihhKS5hYnMoKTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUxjbSA9IGNyZWF0ZUxjbTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTG9nID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnbG9nJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ2NvbmZpZycsICd0eXBlZCcsICdkaXZpZGVTY2FsYXInLCAnQ29tcGxleCddO1xudmFyIGNyZWF0ZUxvZyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBsb2dhcml0aG0gb2YgYSB2YWx1ZS5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmxvZyh4KVxuICAgKiAgICBtYXRoLmxvZyh4LCBiYXNlKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5sb2coMy41KSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMS4yNTI3NjI5Njg0OTUzNjhcbiAgICogICAgbWF0aC5leHAobWF0aC5sb2coMi40KSkgICAgICAgIC8vIHJldHVybnMgMi40XG4gICAqXG4gICAqICAgIG1hdGgucG93KDEwLCA0KSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDEwMDAwXG4gICAqICAgIG1hdGgubG9nKDEwMDAwLCAxMCkgICAgICAgICAgICAvLyByZXR1cm5zIDRcbiAgICogICAgbWF0aC5sb2coMTAwMDApIC8gbWF0aC5sb2coMTApIC8vIHJldHVybnMgNFxuICAgKlxuICAgKiAgICBtYXRoLmxvZygxMDI0LCAyKSAgICAgICAgICAgICAgLy8gcmV0dXJucyAxMFxuICAgKiAgICBtYXRoLnBvdygyLCAxMCkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxMDI0XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBleHAsIGxvZzIsIGxvZzEwLCBsb2cxcFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geFxuICAgKiAgICAgICAgICAgIFZhbHVlIGZvciB3aGljaCB0byBjYWxjdWxhdGUgdGhlIGxvZ2FyaXRobS5cbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4fSBbYmFzZT1lXVxuICAgKiAgICAgICAgICAgIE9wdGlvbmFsIGJhc2UgZm9yIHRoZSBsb2dhcml0aG0uIElmIG5vdCBwcm92aWRlZCwgdGhlIG5hdHVyYWxcbiAgICogICAgICAgICAgICBsb2dhcml0aG0gb2YgYHhgIGlzIGNhbGN1bGF0ZWQuXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRoZSBsb2dhcml0aG0gb2YgYHhgXG4gICAqL1xuICB2YXIgbG9nID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICh4ID49IDAgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiAoMCwgX251bWJlci5sb2dOdW1iZXIpKHgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbmVnYXRpdmUgdmFsdWUgLT4gY29tcGxleCB2YWx1ZSBjb21wdXRhdGlvblxuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoeCwgMCkubG9nKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmxvZygpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgaWYgKCF4LmlzTmVnYXRpdmUoKSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIHgubG4oKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGRvd25ncmFkZSB0byBudW1iZXIsIHJldHVybiBDb21wbGV4IHZhbHVlZCByZXN1bHRcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgudG9OdW1iZXIoKSwgMCkubG9nKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGxvZyk7XG4gICAgfSxcbiAgICAnYW55LCBhbnknOiBmdW5jdGlvbiBhbnlBbnkoeCwgYmFzZSkge1xuICAgICAgLy8gY2FsY3VsYXRlIGxvZ2FyaXRobSBmb3IgYSBzcGVjaWZpZWQgYmFzZSwgbG9nKHgsIGJhc2UpXG4gICAgICByZXR1cm4gZGl2aWRlU2NhbGFyKGxvZyh4KSwgbG9nKGJhc2UpKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbG9nO1xufSk7XG5leHBvcnRzLmNyZWF0ZUxvZyA9IGNyZWF0ZUxvZzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTG9nMTAgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdsb2cxMCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQ29tcGxleCddO1xudmFyIGNyZWF0ZUxvZzEwID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgX0NvbXBsZXggPSBfcmVmLkNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgMTAtYmFzZSBsb2dhcml0aG0gb2YgYSB2YWx1ZS4gVGhpcyBpcyB0aGUgc2FtZSBhcyBjYWxjdWxhdGluZyBgbG9nKHgsIDEwKWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5sb2cxMCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5sb2cxMCgwLjAwMDAxKSAgICAgICAgICAgIC8vIHJldHVybnMgLTVcbiAgICogICAgbWF0aC5sb2cxMCgxMDAwMCkgICAgICAgICAgICAgIC8vIHJldHVybnMgNFxuICAgKiAgICBtYXRoLmxvZygxMDAwMCkgLyBtYXRoLmxvZygxMCkgLy8gcmV0dXJucyA0XG4gICAqICAgIG1hdGgucG93KDEwLCA0KSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDEwMDAwXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBleHAsIGxvZywgbG9nMXAsIGxvZzJcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHhcbiAgICogICAgICAgICAgICBWYWx1ZSBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBsb2dhcml0aG0uXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRoZSAxMC1iYXNlIGxvZ2FyaXRobSBvZiBgeGBcbiAgICovXG4gIHZhciBsb2cxMCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoeCA+PSAwIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICByZXR1cm4gKDAsIF9udW1iZXIubG9nMTBOdW1iZXIpKHgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbmVnYXRpdmUgdmFsdWUgLT4gY29tcGxleCB2YWx1ZSBjb21wdXRhdGlvblxuICAgICAgICByZXR1cm4gbmV3IF9Db21wbGV4KHgsIDApLmxvZygpLmRpdihNYXRoLkxOMTApO1xuICAgICAgfVxuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4gbmV3IF9Db21wbGV4KHgpLmxvZygpLmRpdihNYXRoLkxOMTApO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgaWYgKCF4LmlzTmVnYXRpdmUoKSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIHgubG9nKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkb3duZ3JhZGUgdG8gbnVtYmVyLCByZXR1cm4gQ29tcGxleCB2YWx1ZWQgcmVzdWx0XG4gICAgICAgIHJldHVybiBuZXcgX0NvbXBsZXgoeC50b051bWJlcigpLCAwKS5sb2coKS5kaXYoTWF0aC5MTjEwKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgbG9nMTApO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBsb2cxMDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVMb2cxMCA9IGNyZWF0ZUxvZzEwOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVMb2cxcCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2xvZzFwJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdkaXZpZGVTY2FsYXInLCAnbG9nJywgJ0NvbXBsZXgnXTtcbnZhciBjcmVhdGVMb2cxcCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgbG9nID0gX3JlZi5sb2csXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGxvZ2FyaXRobSBvZiBhIGB2YWx1ZSsxYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmxvZzFwKHgpXG4gICAqICAgIG1hdGgubG9nMXAoeCwgYmFzZSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgubG9nMXAoMi41KSAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxLjI1Mjc2Mjk2ODQ5NTM2OFxuICAgKiAgICBtYXRoLmV4cChtYXRoLmxvZzFwKDEuNCkpICAgICAgIC8vIHJldHVybnMgMi40XG4gICAqXG4gICAqICAgIG1hdGgucG93KDEwLCA0KSAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxMDAwMFxuICAgKiAgICBtYXRoLmxvZzFwKDk5OTksIDEwKSAgICAgICAgICAgIC8vIHJldHVybnMgNFxuICAgKiAgICBtYXRoLmxvZzFwKDk5OTkpIC8gbWF0aC5sb2coMTApIC8vIHJldHVybnMgNFxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZXhwLCBsb2csIGxvZzIsIGxvZzEwXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4XG4gICAqICAgICAgICAgICAgVmFsdWUgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgbG9nYXJpdGhtIG9mIGB4KzFgLlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXh9IFtiYXNlPWVdXG4gICAqICAgICAgICAgICAgT3B0aW9uYWwgYmFzZSBmb3IgdGhlIGxvZ2FyaXRobS4gSWYgbm90IHByb3ZpZGVkLCB0aGUgbmF0dXJhbFxuICAgKiAgICAgICAgICAgIGxvZ2FyaXRobSBvZiBgeCsxYCBpcyBjYWxjdWxhdGVkLlxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9XG4gICAqICAgICAgICAgICAgUmV0dXJucyB0aGUgbG9nYXJpdGhtIG9mIGB4KzFgXG4gICAqL1xuICB2YXIgbG9nMXAgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgaWYgKHggPj0gLTEgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiAoMCwgX251bWJlci5sb2cxcCkoeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBuZWdhdGl2ZSB2YWx1ZSAtPiBjb21wbGV4IHZhbHVlIGNvbXB1dGF0aW9uXG4gICAgICAgIHJldHVybiBfbG9nMXBDb21wbGV4KG5ldyBDb21wbGV4KHgsIDApKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIENvbXBsZXg6IF9sb2cxcENvbXBsZXgsXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgdmFyIHkgPSB4LnBsdXMoMSk7XG5cbiAgICAgIGlmICgheS5pc05lZ2F0aXZlKCkgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiB5LmxuKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkb3duZ3JhZGUgdG8gbnVtYmVyLCByZXR1cm4gQ29tcGxleCB2YWx1ZWQgcmVzdWx0XG4gICAgICAgIHJldHVybiBfbG9nMXBDb21wbGV4KG5ldyBDb21wbGV4KHgudG9OdW1iZXIoKSwgMCkpO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBsb2cxcCk7XG4gICAgfSxcbiAgICAnYW55LCBhbnknOiBmdW5jdGlvbiBhbnlBbnkoeCwgYmFzZSkge1xuICAgICAgLy8gY2FsY3VsYXRlIGxvZ2FyaXRobSBmb3IgYSBzcGVjaWZpZWQgYmFzZSwgbG9nMXAoeCwgYmFzZSlcbiAgICAgIHJldHVybiBkaXZpZGVTY2FsYXIobG9nMXAoeCksIGxvZyhiYXNlKSk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbmF0dXJhbCBsb2dhcml0aG0gb2YgYSBjb21wbGV4IG51bWJlciArIDFcbiAgICogQHBhcmFtIHtDb21wbGV4fSB4XG4gICAqIEByZXR1cm5zIHtDb21wbGV4fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfbG9nMXBDb21wbGV4KHgpIHtcbiAgICB2YXIgeFJlMXAgPSB4LnJlICsgMTtcbiAgICByZXR1cm4gbmV3IENvbXBsZXgoTWF0aC5sb2coTWF0aC5zcXJ0KHhSZTFwICogeFJlMXAgKyB4LmltICogeC5pbSkpLCBNYXRoLmF0YW4yKHguaW0sIHhSZTFwKSk7XG4gIH1cblxuICByZXR1cm4gbG9nMXA7XG59KTtcbmV4cG9ydHMuY3JlYXRlTG9nMXAgPSBjcmVhdGVMb2cxcDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTG9nMiA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2xvZzInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ0NvbXBsZXgnXTtcbnZhciBjcmVhdGVMb2cyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSAyLWJhc2Ugb2YgYSB2YWx1ZS4gVGhpcyBpcyB0aGUgc2FtZSBhcyBjYWxjdWxhdGluZyBgbG9nKHgsIDIpYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmxvZzIoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgubG9nMigwLjAzMTI1KSAgICAgICAgICAgLy8gcmV0dXJucyAtNVxuICAgKiAgICBtYXRoLmxvZzIoMTYpICAgICAgICAgICAgICAgIC8vIHJldHVybnMgNFxuICAgKiAgICBtYXRoLmxvZzIoMTYpIC8gbWF0aC5sb2cyKDIpIC8vIHJldHVybnMgNFxuICAgKiAgICBtYXRoLnBvdygyLCA0KSAgICAgICAgICAgICAgIC8vIHJldHVybnMgMTZcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGV4cCwgbG9nLCBsb2cxcCwgbG9nMTBcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHhcbiAgICogICAgICAgICAgICBWYWx1ZSBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBsb2dhcml0aG0uXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRoZSAyLWJhc2UgbG9nYXJpdGhtIG9mIGB4YFxuICAgKi9cbiAgdmFyIGxvZzIgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgaWYgKHggPj0gMCB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLmxvZzJOdW1iZXIpKHgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gbmVnYXRpdmUgdmFsdWUgLT4gY29tcGxleCB2YWx1ZSBjb21wdXRhdGlvblxuICAgICAgICByZXR1cm4gX2xvZzJDb21wbGV4KG5ldyBDb21wbGV4KHgsIDApKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIENvbXBsZXg6IF9sb2cyQ29tcGxleCxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICBpZiAoIXguaXNOZWdhdGl2ZSgpIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICByZXR1cm4geC5sb2coMik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBkb3duZ3JhZGUgdG8gbnVtYmVyLCByZXR1cm4gQ29tcGxleCB2YWx1ZWQgcmVzdWx0XG4gICAgICAgIHJldHVybiBfbG9nMkNvbXBsZXgobmV3IENvbXBsZXgoeC50b051bWJlcigpLCAwKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGxvZzIpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgbG9nMiBmb3IgYSBjb21wbGV4IHZhbHVlXG4gICAqIEBwYXJhbSB7Q29tcGxleH0geFxuICAgKiBAcmV0dXJucyB7Q29tcGxleH1cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX2xvZzJDb21wbGV4KHgpIHtcbiAgICB2YXIgbmV3WCA9IE1hdGguc3FydCh4LnJlICogeC5yZSArIHguaW0gKiB4LmltKTtcbiAgICByZXR1cm4gbmV3IENvbXBsZXgoTWF0aC5sb2cyID8gTWF0aC5sb2cyKG5ld1gpIDogTWF0aC5sb2cobmV3WCkgLyBNYXRoLkxOMiwgTWF0aC5hdGFuMih4LmltLCB4LnJlKSAvIE1hdGguTE4yKTtcbiAgfVxuXG4gIHJldHVybiBsb2cyO1xufSk7XG5leHBvcnRzLmNyZWF0ZUxvZzIgPSBjcmVhdGVMb2cyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNb2QgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMlwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDVcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMVwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyXCIpO1xuXG52YXIgX2FsZ29yaXRobTYgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdtb2QnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlTW9kID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wMyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA1ID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTA1KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTExID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTExKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG02LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTcuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBtb2R1bHVzLCB0aGUgcmVtYWluZGVyIG9mIGFuIGludGVnZXIgZGl2aXNpb24uXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFRoZSBtb2R1bHVzIGlzIGRlZmluZWQgYXM6XG4gICAqXG4gICAqICAgICB4IC0geSAqIGZsb29yKHggLyB5KVxuICAgKlxuICAgKiBTZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTW9kdWxvX29wZXJhdGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLm1vZCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5tb2QoOCwgMykgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAyXG4gICAqICAgIG1hdGgubW9kKDExLCAyKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgMVxuICAgKlxuICAgKiAgICBmdW5jdGlvbiBpc09kZCh4KSB7XG4gICAqICAgICAgcmV0dXJuIG1hdGgubW9kKHgsIDIpICE9IDBcbiAgICogICAgfVxuICAgKlxuICAgKiAgICBpc09kZCgyKSAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIGlzT2RkKDMpICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZGl2aWRlXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQXJyYXkgfCBNYXRyaXh9IHggRGl2aWRlbmRcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBBcnJheSB8IE1hdHJpeH0geSBEaXZpc29yXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQXJyYXkgfCBNYXRyaXh9IFJldHVybnMgdGhlIHJlbWFpbmRlciBvZiBgeGAgZGl2aWRlZCBieSBgeWAuXG4gICAqL1xuXG4gIHZhciBtb2QgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5tb2ROdW1iZXIsXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB5LmlzWmVybygpID8geCA6IHgubW9kKHkpO1xuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkge1xuICAgICAgcmV0dXJuIHgubW9kKHkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNSh4LCB5LCBtb2QsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIG1vZCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBtb2QsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBtb2QpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIG1vZChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbW9kKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBtb2QoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgbW9kLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBtb2QsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgbW9kLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIG1vZCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIG1vZCwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgbW9kLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG1vZDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVNb2QgPSBjcmVhdGVNb2Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU11bHRpcGx5ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMVwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgbmFtZSA9ICdtdWx0aXBseSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnYWRkU2NhbGFyJywgJ211bHRpcGx5U2NhbGFyJywgJ2VxdWFsU2NhbGFyJ107XG52YXIgY3JlYXRlTXVsdGlwbHkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBhZGRTY2FsYXIgPSBfcmVmLmFkZFNjYWxhcixcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcixcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcjtcbiAgdmFyIGFsZ29yaXRobTExID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMTEpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBNdWx0aXBseSB0d28gb3IgbW9yZSB2YWx1ZXMsIGB4ICogeWAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIG1hdHJpeCBwcm9kdWN0IGlzIGNhbGN1bGF0ZWQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5tdWx0aXBseSh4LCB5KVxuICAgKiAgICBtYXRoLm11bHRpcGx5KHgsIHksIHosIC4uLilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgubXVsdGlwbHkoNCwgNS4yKSAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMjAuOFxuICAgKiAgICBtYXRoLm11bHRpcGx5KDIsIDMsIDQpICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDI0XG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLmNvbXBsZXgoMiwgMylcbiAgICogICAgY29uc3QgYiA9IG1hdGguY29tcGxleCg0LCAxKVxuICAgKiAgICBtYXRoLm11bHRpcGx5KGEsIGIpICAgICAgICAgIC8vIHJldHVybnMgQ29tcGxleCA1ICsgMTRpXG4gICAqXG4gICAqICAgIGNvbnN0IGMgPSBbWzEsIDJdLCBbNCwgM11dXG4gICAqICAgIGNvbnN0IGQgPSBbWzEsIDIsIDNdLCBbMywgLTQsIDddXVxuICAgKiAgICBtYXRoLm11bHRpcGx5KGMsIGQpICAgICAgICAgIC8vIHJldHVybnMgQXJyYXkgW1s3LCAtNiwgMTddLCBbMTMsIC00LCAzM11dXG4gICAqXG4gICAqICAgIGNvbnN0IGUgPSBtYXRoLnVuaXQoJzIuMSBrbScpXG4gICAqICAgIG1hdGgubXVsdGlwbHkoMywgZSkgICAgICAgICAgLy8gcmV0dXJucyBVbml0IDYuMyBrbVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZGl2aWRlLCBwcm9kLCBjcm9zcywgZG90XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBtdWx0aXBseVxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHkgU2Vjb25kIHZhbHVlIHRvIG11bHRpcGx5XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0gTXVsdGlwbGljYXRpb24gb2YgYHhgIGFuZCBgeWBcbiAgICovXG5cbiAgdmFyIG11bHRpcGx5ID0gdHlwZWQobmFtZSwgKDAsIF9vYmplY3QuZXh0ZW5kKSh7XG4gICAgLy8gd2UgZXh0ZW5kIHRoZSBzaWduYXR1cmVzIG9mIG11bHRpcGx5U2NhbGFyIHdpdGggc2lnbmF0dXJlcyBkZWFsaW5nIHdpdGggbWF0cmljZXNcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyBjaGVjayBkaW1lbnNpb25zXG4gICAgICBfdmFsaWRhdGVNYXRyaXhEaW1lbnNpb25zKCgwLCBfYXJyYXkuYXJyYXlTaXplKSh4KSwgKDAsIF9hcnJheS5hcnJheVNpemUpKHkpKTsgLy8gdXNlIGRlbnNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuXG5cbiAgICAgIHZhciBtID0gbXVsdGlwbHkobWF0cml4KHgpLCBtYXRyaXgoeSkpOyAvLyByZXR1cm4gYXJyYXkgb3Igc2NhbGFyXG5cbiAgICAgIHJldHVybiAoMCwgX2lzLmlzTWF0cml4KShtKSA/IG0udmFsdWVPZigpIDogbTtcbiAgICB9LFxuICAgICdNYXRyaXgsIE1hdHJpeCc6IGZ1bmN0aW9uIE1hdHJpeE1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBkaW1lbnNpb25zXG4gICAgICB2YXIgeHNpemUgPSB4LnNpemUoKTtcbiAgICAgIHZhciB5c2l6ZSA9IHkuc2l6ZSgpOyAvLyBjaGVjayBkaW1lbnNpb25zXG5cbiAgICAgIF92YWxpZGF0ZU1hdHJpeERpbWVuc2lvbnMoeHNpemUsIHlzaXplKTsgLy8gcHJvY2VzcyBkaW1lbnNpb25zXG5cblxuICAgICAgaWYgKHhzaXplLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAvLyBwcm9jZXNzIHkgZGltZW5zaW9uc1xuICAgICAgICBpZiAoeXNpemUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgLy8gVmVjdG9yICogVmVjdG9yXG4gICAgICAgICAgcmV0dXJuIF9tdWx0aXBseVZlY3RvclZlY3Rvcih4LCB5LCB4c2l6ZVswXSk7XG4gICAgICAgIH0gLy8gVmVjdG9yICogTWF0cml4XG5cblxuICAgICAgICByZXR1cm4gX211bHRpcGx5VmVjdG9yTWF0cml4KHgsIHkpO1xuICAgICAgfSAvLyBwcm9jZXNzIHkgZGltZW5zaW9uc1xuXG5cbiAgICAgIGlmICh5c2l6ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgLy8gTWF0cml4ICogVmVjdG9yXG4gICAgICAgIHJldHVybiBfbXVsdGlwbHlNYXRyaXhWZWN0b3IoeCwgeSk7XG4gICAgICB9IC8vIE1hdHJpeCAqIE1hdHJpeFxuXG5cbiAgICAgIHJldHVybiBfbXVsdGlwbHlNYXRyaXhNYXRyaXgoeCwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBNYXRyaXggKiBNYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBtdWx0aXBseSh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgTWF0cml4ICogTWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbXVsdGlwbHkobWF0cml4KHgsIHkuc3RvcmFnZSgpKSwgeSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHgsIHksIG11bHRpcGx5U2NhbGFyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBtdWx0aXBseVNjYWxhciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh5LCB4LCBtdWx0aXBseVNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBtdWx0aXBseVNjYWxhciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIG11bHRpcGx5U2NhbGFyLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBtdWx0aXBseVNjYWxhciwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgYW55JzogbXVsdGlwbHlTY2FsYXIsXG4gICAgJ2FueSwgYW55LCAuLi5hbnknOiBmdW5jdGlvbiBhbnlBbnlBbnkoeCwgeSwgcmVzdCkge1xuICAgICAgdmFyIHJlc3VsdCA9IG11bHRpcGx5KHgsIHkpO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3QubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gbXVsdGlwbHkocmVzdWx0LCByZXN0W2ldKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gIH0sIG11bHRpcGx5U2NhbGFyLnNpZ25hdHVyZXMpKTtcblxuICBmdW5jdGlvbiBfdmFsaWRhdGVNYXRyaXhEaW1lbnNpb25zKHNpemUxLCBzaXplMikge1xuICAgIC8vIGNoZWNrIGxlZnQgb3BlcmFuZCBkaW1lbnNpb25zXG4gICAgc3dpdGNoIChzaXplMS5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgLy8gY2hlY2sgc2l6ZTJcbiAgICAgICAgc3dpdGNoIChzaXplMi5sZW5ndGgpIHtcbiAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAvLyBWZWN0b3IgeCBWZWN0b3JcbiAgICAgICAgICAgIGlmIChzaXplMVswXSAhPT0gc2l6ZTJbMF0pIHtcbiAgICAgICAgICAgICAgLy8gdGhyb3cgZXJyb3JcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaCBpbiBtdWx0aXBsaWNhdGlvbi4gVmVjdG9ycyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgLy8gVmVjdG9yIHggTWF0cml4XG4gICAgICAgICAgICBpZiAoc2l6ZTFbMF0gIT09IHNpemUyWzBdKSB7XG4gICAgICAgICAgICAgIC8vIHRocm93IGVycm9yXG4gICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2ggaW4gbXVsdGlwbGljYXRpb24uIFZlY3RvciBsZW5ndGggKCcgKyBzaXplMVswXSArICcpIG11c3QgbWF0Y2ggTWF0cml4IHJvd3MgKCcgKyBzaXplMlswXSArICcpJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG9ubHkgbXVsdGlwbHkgYSAxIG9yIDIgZGltZW5zaW9uYWwgbWF0cml4IChNYXRyaXggQiBoYXMgJyArIHNpemUyLmxlbmd0aCArICcgZGltZW5zaW9ucyknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIC8vIGNoZWNrIHNpemUyXG4gICAgICAgIHN3aXRjaCAoc2l6ZTIubGVuZ3RoKSB7XG4gICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgLy8gTWF0cml4IHggVmVjdG9yXG4gICAgICAgICAgICBpZiAoc2l6ZTFbMV0gIT09IHNpemUyWzBdKSB7XG4gICAgICAgICAgICAgIC8vIHRocm93IGVycm9yXG4gICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2ggaW4gbXVsdGlwbGljYXRpb24uIE1hdHJpeCBjb2x1bW5zICgnICsgc2l6ZTFbMV0gKyAnKSBtdXN0IG1hdGNoIFZlY3RvciBsZW5ndGggKCcgKyBzaXplMlswXSArICcpJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgLy8gTWF0cml4IHggTWF0cml4XG4gICAgICAgICAgICBpZiAoc2l6ZTFbMV0gIT09IHNpemUyWzBdKSB7XG4gICAgICAgICAgICAgIC8vIHRocm93IGVycm9yXG4gICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2ggaW4gbXVsdGlwbGljYXRpb24uIE1hdHJpeCBBIGNvbHVtbnMgKCcgKyBzaXplMVsxXSArICcpIG11c3QgbWF0Y2ggTWF0cml4IEIgcm93cyAoJyArIHNpemUyWzBdICsgJyknKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBtdWx0aXBseSBhIDEgb3IgMiBkaW1lbnNpb25hbCBtYXRyaXggKE1hdHJpeCBCIGhhcyAnICsgc2l6ZTIubGVuZ3RoICsgJyBkaW1lbnNpb25zKScpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG9ubHkgbXVsdGlwbHkgYSAxIG9yIDIgZGltZW5zaW9uYWwgbWF0cml4IChNYXRyaXggQSBoYXMgJyArIHNpemUxLmxlbmd0aCArICcgZGltZW5zaW9ucyknKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEMgPSBBICogQlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gYSAgICAgICAgICAgIERlbnNlIFZlY3RvciAgIChOKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gYiAgICAgICAgICAgIERlbnNlIFZlY3RvciAgIChOKVxuICAgKlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9ICAgICAgICAgICAgIFNjYWxhciB2YWx1ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9tdWx0aXBseVZlY3RvclZlY3RvcihhLCBiLCBuKSB7XG4gICAgLy8gY2hlY2sgZW1wdHkgdmVjdG9yXG4gICAgaWYgKG4gPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IG11bHRpcGx5IHR3byBlbXB0eSB2ZWN0b3JzJyk7XG4gICAgfSAvLyBhIGRlbnNlXG5cblxuICAgIHZhciBhZGF0YSA9IGEuX2RhdGE7XG4gICAgdmFyIGFkdCA9IGEuX2RhdGF0eXBlOyAvLyBiIGRlbnNlXG5cbiAgICB2YXIgYmRhdGEgPSBiLl9kYXRhO1xuICAgIHZhciBiZHQgPSBiLl9kYXRhdHlwZTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gYWRkU2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBhZiA9IGFkZFNjYWxhcjsgLy8gbXVsdGlwbHlTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIG1mID0gbXVsdGlwbHlTY2FsYXI7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKGFkdCAmJiBiZHQgJiYgYWR0ID09PSBiZHQgJiYgdHlwZW9mIGFkdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gZmluZCBzaWduYXR1cmVzIHRoYXQgbWF0Y2hlcyAoZHQsIGR0KVxuXG4gICAgICBhZiA9IHR5cGVkLmZpbmQoYWRkU2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgICBtZiA9IHR5cGVkLmZpbmQobXVsdGlwbHlTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICB9IC8vIHJlc3VsdCAoZG8gbm90IGluaXRpYWxpemUgaXQgd2l0aCB6ZXJvKVxuXG5cbiAgICB2YXIgYyA9IG1mKGFkYXRhWzBdLCBiZGF0YVswXSk7IC8vIGxvb3AgZGF0YVxuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBuOyBpKyspIHtcbiAgICAgIC8vIG11bHRpcGx5IGFuZCBhY2N1bXVsYXRlXG4gICAgICBjID0gYWYoYywgbWYoYWRhdGFbaV0sIGJkYXRhW2ldKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGM7XG4gIH1cbiAgLyoqXG4gICAqIEMgPSBBICogQlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gYSAgICAgICAgICAgIERlbnNlIFZlY3RvciAgIChNKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gYiAgICAgICAgICAgIE1hdHJpeCAgICAgICAgIChNeE4pXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgRGVuc2UgVmVjdG9yICAgKE4pXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX211bHRpcGx5VmVjdG9yTWF0cml4KGEsIGIpIHtcbiAgICAvLyBwcm9jZXNzIHN0b3JhZ2VcbiAgICBpZiAoYi5zdG9yYWdlKCkgIT09ICdkZW5zZScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3VwcG9ydCBmb3IgU3BhcnNlTWF0cml4IG5vdCBpbXBsZW1lbnRlZCcpO1xuICAgIH1cblxuICAgIHJldHVybiBfbXVsdGlwbHlWZWN0b3JEZW5zZU1hdHJpeChhLCBiKTtcbiAgfVxuICAvKipcbiAgICogQyA9IEEgKiBCXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgRGVuc2UgVmVjdG9yICAgKE0pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgRGVuc2UgTWF0cml4ICAgKE14TilcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBEZW5zZSBWZWN0b3IgICAoTilcbiAgICovXG5cblxuICBmdW5jdGlvbiBfbXVsdGlwbHlWZWN0b3JEZW5zZU1hdHJpeChhLCBiKSB7XG4gICAgLy8gYSBkZW5zZVxuICAgIHZhciBhZGF0YSA9IGEuX2RhdGE7XG4gICAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIGIgZGVuc2VcblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7XG4gICAgdmFyIGJzaXplID0gYi5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgYWxlbmd0aCA9IGFzaXplWzBdO1xuICAgIHZhciBiY29sdW1ucyA9IGJzaXplWzFdOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyBhZGRTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGFmID0gYWRkU2NhbGFyOyAvLyBtdWx0aXBseVNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgbWYgPSBtdWx0aXBseVNjYWxhcjsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAoYWR0ICYmIGJkdCAmJiBhZHQgPT09IGJkdCAmJiB0eXBlb2YgYWR0ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZXMgdGhhdCBtYXRjaGVzIChkdCwgZHQpXG5cbiAgICAgIGFmID0gdHlwZWQuZmluZChhZGRTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICAgIG1mID0gdHlwZWQuZmluZChtdWx0aXBseVNjYWxhciwgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0XG5cblxuICAgIHZhciBjID0gW107IC8vIGxvb3AgbWF0cml4IGNvbHVtbnNcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgYmNvbHVtbnM7IGorKykge1xuICAgICAgLy8gc3VtIChkbyBub3QgaW5pdGlhbGl6ZSBpdCB3aXRoIHplcm8pXG4gICAgICB2YXIgc3VtID0gbWYoYWRhdGFbMF0sIGJkYXRhWzBdW2pdKTsgLy8gbG9vcCB2ZWN0b3JcblxuICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gbXVsdGlwbHkgJiBhY2N1bXVsYXRlXG4gICAgICAgIHN1bSA9IGFmKHN1bSwgbWYoYWRhdGFbaV0sIGJkYXRhW2ldW2pdKSk7XG4gICAgICB9XG5cbiAgICAgIGNbal0gPSBzdW07XG4gICAgfSAvLyByZXR1cm4gbWF0cml4XG5cblxuICAgIHJldHVybiBhLmNyZWF0ZURlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGMsXG4gICAgICBzaXplOiBbYmNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEMgPSBBICogQlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gYSAgICAgICAgICAgIE1hdHJpeCAgICAgICAgIChNeE4pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgRGVuc2UgVmVjdG9yICAgKE4pXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgRGVuc2UgVmVjdG9yICAgKE0pXG4gICAqL1xuXG5cbiAgdmFyIF9tdWx0aXBseU1hdHJpeFZlY3RvciA9IHR5cGVkKCdfbXVsdGlwbHlNYXRyaXhWZWN0b3InLCB7XG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBfbXVsdGlwbHlEZW5zZU1hdHJpeFZlY3RvcixcbiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBfbXVsdGlwbHlTcGFyc2VNYXRyaXhWZWN0b3JcbiAgfSk7XG4gIC8qKlxuICAgKiBDID0gQSAqIEJcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgICBNYXRyaXggICAgICAgICAoTXhOKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gYiAgICAgICAgICAgIE1hdHJpeCAgICAgICAgIChOeEMpXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgTWF0cml4ICAgICAgICAgKE14QylcbiAgICovXG5cblxuICB2YXIgX211bHRpcGx5TWF0cml4TWF0cml4ID0gdHlwZWQoJ19tdWx0aXBseU1hdHJpeE1hdHJpeCcsIHtcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogX211bHRpcGx5RGVuc2VNYXRyaXhEZW5zZU1hdHJpeCxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IF9tdWx0aXBseURlbnNlTWF0cml4U3BhcnNlTWF0cml4LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogX211bHRpcGx5U3BhcnNlTWF0cml4RGVuc2VNYXRyaXgsXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogX211bHRpcGx5U3BhcnNlTWF0cml4U3BhcnNlTWF0cml4XG4gIH0pO1xuICAvKipcbiAgICogQyA9IEEgKiBCXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgRGVuc2VNYXRyaXggIChNeE4pXG4gICAqIEBwYXJhbSB7TWF0cml4fSBiICAgICAgICAgICAgRGVuc2UgVmVjdG9yIChOKVxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgIERlbnNlIFZlY3RvciAoTSlcbiAgICovXG5cblxuICBmdW5jdGlvbiBfbXVsdGlwbHlEZW5zZU1hdHJpeFZlY3RvcihhLCBiKSB7XG4gICAgLy8gYSBkZW5zZVxuICAgIHZhciBhZGF0YSA9IGEuX2RhdGE7XG4gICAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIGIgZGVuc2VcblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7XG4gICAgdmFyIGJkdCA9IGIuX2RhdGF0eXBlOyAvLyByb3dzICYgY29sdW1uc1xuXG4gICAgdmFyIGFyb3dzID0gYXNpemVbMF07XG4gICAgdmFyIGFjb2x1bW5zID0gYXNpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGFkZFNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgYWYgPSBhZGRTY2FsYXI7IC8vIG11bHRpcGx5U2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBtZiA9IG11bHRpcGx5U2NhbGFyOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmIChhZHQgJiYgYmR0ICYmIGFkdCA9PT0gYmR0ICYmIHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlcyB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgYWYgPSB0eXBlZC5maW5kKGFkZFNjYWxhciwgW2R0LCBkdF0pO1xuICAgICAgbWYgPSB0eXBlZC5maW5kKG11bHRpcGx5U2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgfSAvLyByZXN1bHRcblxuXG4gICAgdmFyIGMgPSBbXTsgLy8gbG9vcCBtYXRyaXggYSByb3dzXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyb3dzOyBpKyspIHtcbiAgICAgIC8vIGN1cnJlbnQgcm93XG4gICAgICB2YXIgcm93ID0gYWRhdGFbaV07IC8vIHN1bSAoZG8gbm90IGluaXRpYWxpemUgaXQgd2l0aCB6ZXJvKVxuXG4gICAgICB2YXIgc3VtID0gbWYocm93WzBdLCBiZGF0YVswXSk7IC8vIGxvb3AgbWF0cml4IGEgY29sdW1uc1xuXG4gICAgICBmb3IgKHZhciBqID0gMTsgaiA8IGFjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgLy8gbXVsdGlwbHkgJiBhY2N1bXVsYXRlXG4gICAgICAgIHN1bSA9IGFmKHN1bSwgbWYocm93W2pdLCBiZGF0YVtqXSkpO1xuICAgICAgfVxuXG4gICAgICBjW2ldID0gc3VtO1xuICAgIH0gLy8gcmV0dXJuIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gYS5jcmVhdGVEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiBjLFxuICAgICAgc2l6ZTogW2Fyb3dzXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDID0gQSAqIEJcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgICBEZW5zZU1hdHJpeCAgICAoTXhOKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gYiAgICAgICAgICAgIERlbnNlTWF0cml4ICAgIChOeEMpXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgRGVuc2VNYXRyaXggICAgKE14QylcbiAgICovXG5cblxuICBmdW5jdGlvbiBfbXVsdGlwbHlEZW5zZU1hdHJpeERlbnNlTWF0cml4KGEsIGIpIHtcbiAgICAvLyBhIGRlbnNlXG4gICAgdmFyIGFkYXRhID0gYS5fZGF0YTtcbiAgICB2YXIgYXNpemUgPSBhLl9zaXplO1xuICAgIHZhciBhZHQgPSBhLl9kYXRhdHlwZTsgLy8gYiBkZW5zZVxuXG4gICAgdmFyIGJkYXRhID0gYi5fZGF0YTtcbiAgICB2YXIgYnNpemUgPSBiLl9zaXplO1xuICAgIHZhciBiZHQgPSBiLl9kYXRhdHlwZTsgLy8gcm93cyAmIGNvbHVtbnNcblxuICAgIHZhciBhcm93cyA9IGFzaXplWzBdO1xuICAgIHZhciBhY29sdW1ucyA9IGFzaXplWzFdO1xuICAgIHZhciBiY29sdW1ucyA9IGJzaXplWzFdOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyBhZGRTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGFmID0gYWRkU2NhbGFyOyAvLyBtdWx0aXBseVNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgbWYgPSBtdWx0aXBseVNjYWxhcjsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAoYWR0ICYmIGJkdCAmJiBhZHQgPT09IGJkdCAmJiB0eXBlb2YgYWR0ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZXMgdGhhdCBtYXRjaGVzIChkdCwgZHQpXG5cbiAgICAgIGFmID0gdHlwZWQuZmluZChhZGRTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICAgIG1mID0gdHlwZWQuZmluZChtdWx0aXBseVNjYWxhciwgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0XG5cblxuICAgIHZhciBjID0gW107IC8vIGxvb3AgbWF0cml4IGEgcm93c1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcm93czsgaSsrKSB7XG4gICAgICAvLyBjdXJyZW50IHJvd1xuICAgICAgdmFyIHJvdyA9IGFkYXRhW2ldOyAvLyBpbml0aWFsaXplIHJvdyBhcnJheVxuXG4gICAgICBjW2ldID0gW107IC8vIGxvb3AgbWF0cml4IGIgY29sdW1uc1xuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGJjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgLy8gc3VtIChhdm9pZCBpbml0aWFsaXppbmcgc3VtIHRvIHplcm8pXG4gICAgICAgIHZhciBzdW0gPSBtZihyb3dbMF0sIGJkYXRhWzBdW2pdKTsgLy8gbG9vcCBtYXRyaXggYSBjb2x1bW5zXG5cbiAgICAgICAgZm9yICh2YXIgeCA9IDE7IHggPCBhY29sdW1uczsgeCsrKSB7XG4gICAgICAgICAgLy8gbXVsdGlwbHkgJiBhY2N1bXVsYXRlXG4gICAgICAgICAgc3VtID0gYWYoc3VtLCBtZihyb3dbeF0sIGJkYXRhW3hdW2pdKSk7XG4gICAgICAgIH1cblxuICAgICAgICBjW2ldW2pdID0gc3VtO1xuICAgICAgfVxuICAgIH0gLy8gcmV0dXJuIG1hdHJpeFxuXG5cbiAgICByZXR1cm4gYS5jcmVhdGVEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiBjLFxuICAgICAgc2l6ZTogW2Fyb3dzLCBiY29sdW1uc10sXG4gICAgICBkYXRhdHlwZTogZHRcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQyA9IEEgKiBCXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgRGVuc2VNYXRyaXggICAgKE14TilcbiAgICogQHBhcmFtIHtNYXRyaXh9IGIgICAgICAgICAgICBTcGFyc2VNYXRyaXggICAoTnhDKVxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgIChNeEMpXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX211bHRpcGx5RGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoYSwgYikge1xuICAgIC8vIGEgZGVuc2VcbiAgICB2YXIgYWRhdGEgPSBhLl9kYXRhO1xuICAgIHZhciBhc2l6ZSA9IGEuX3NpemU7XG4gICAgdmFyIGFkdCA9IGEuX2RhdGF0eXBlOyAvLyBiIHNwYXJzZVxuXG4gICAgdmFyIGJ2YWx1ZXMgPSBiLl92YWx1ZXM7XG4gICAgdmFyIGJpbmRleCA9IGIuX2luZGV4O1xuICAgIHZhciBicHRyID0gYi5fcHRyO1xuICAgIHZhciBic2l6ZSA9IGIuX3NpemU7XG4gICAgdmFyIGJkdCA9IGIuX2RhdGF0eXBlOyAvLyB2YWxpZGF0ZSBiIG1hdHJpeFxuXG4gICAgaWYgKCFidmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBtdWx0aXBseSBEZW5zZSBNYXRyaXggdGltZXMgUGF0dGVybiBvbmx5IE1hdHJpeCcpO1xuICAgIH0gLy8gcm93cyAmIGNvbHVtbnNcblxuXG4gICAgdmFyIGFyb3dzID0gYXNpemVbMF07XG4gICAgdmFyIGJjb2x1bW5zID0gYnNpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGFkZFNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgYWYgPSBhZGRTY2FsYXI7IC8vIG11bHRpcGx5U2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBtZiA9IG11bHRpcGx5U2NhbGFyOyAvLyBlcXVhbFNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmIChhZHQgJiYgYmR0ICYmIGFkdCA9PT0gYmR0ICYmIHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlcyB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgYWYgPSB0eXBlZC5maW5kKGFkZFNjYWxhciwgW2R0LCBkdF0pO1xuICAgICAgbWYgPSB0eXBlZC5maW5kKG11bHRpcGx5U2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgICBlcSA9IHR5cGVkLmZpbmQoZXF1YWxTY2FsYXIsIFtkdCwgZHRdKTsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTtcbiAgICB9IC8vIHJlc3VsdFxuXG5cbiAgICB2YXIgY3ZhbHVlcyA9IFtdO1xuICAgIHZhciBjaW5kZXggPSBbXTtcbiAgICB2YXIgY3B0ciA9IFtdOyAvLyBjIG1hdHJpeFxuXG4gICAgdmFyIGMgPSBiLmNyZWF0ZVNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IGN2YWx1ZXMsXG4gICAgICBpbmRleDogY2luZGV4LFxuICAgICAgcHRyOiBjcHRyLFxuICAgICAgc2l6ZTogW2Fyb3dzLCBiY29sdW1uc10sXG4gICAgICBkYXRhdHlwZTogZHRcbiAgICB9KTsgLy8gbG9vcCBiIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGpiID0gMDsgamIgPCBiY29sdW1uczsgamIrKykge1xuICAgICAgLy8gdXBkYXRlIHB0clxuICAgICAgY3B0cltqYl0gPSBjaW5kZXgubGVuZ3RoOyAvLyBpbmRlY2VzIGluIGNvbHVtbiBqYlxuXG4gICAgICB2YXIga2IwID0gYnB0cltqYl07XG4gICAgICB2YXIga2IxID0gYnB0cltqYiArIDFdOyAvLyBkbyBub3QgcHJvY2VzcyBjb2x1bW4gamIgaWYgbm8gZGF0YSBleGlzdHNcblxuICAgICAgaWYgKGtiMSA+IGtiMCkge1xuICAgICAgICAvLyBsYXN0IHJvdyBtYXJrIHByb2Nlc3NlZFxuICAgICAgICB2YXIgbGFzdCA9IDA7IC8vIGxvb3AgYSByb3dzXG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcm93czsgaSsrKSB7XG4gICAgICAgICAgLy8gY29sdW1uIG1hcmtcbiAgICAgICAgICB2YXIgbWFyayA9IGkgKyAxOyAvLyBDW2ksIGpiXVxuXG4gICAgICAgICAgdmFyIGNpaiA9IHZvaWQgMDsgLy8gdmFsdWVzIGluIGIgY29sdW1uIGpcblxuICAgICAgICAgIGZvciAodmFyIGtiID0ga2IwOyBrYiA8IGtiMTsga2IrKykge1xuICAgICAgICAgICAgLy8gcm93XG4gICAgICAgICAgICB2YXIgaWIgPSBiaW5kZXhba2JdOyAvLyBjaGVjayB2YWx1ZSBoYXMgYmVlbiBpbml0aWFsaXplZFxuXG4gICAgICAgICAgICBpZiAobGFzdCAhPT0gbWFyaykge1xuICAgICAgICAgICAgICAvLyBmaXJzdCB2YWx1ZSBpbiBjb2x1bW4gamJcbiAgICAgICAgICAgICAgY2lqID0gbWYoYWRhdGFbaV1baWJdLCBidmFsdWVzW2tiXSk7IC8vIHVwZGF0ZSBtYXJrXG5cbiAgICAgICAgICAgICAgbGFzdCA9IG1hcms7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBhY2N1bXVsYXRlIHZhbHVlXG4gICAgICAgICAgICAgIGNpaiA9IGFmKGNpaiwgbWYoYWRhdGFbaV1baWJdLCBidmFsdWVzW2tiXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gY2hlY2sgY29sdW1uIGhhcyBiZWVuIHByb2Nlc3NlZCBhbmQgdmFsdWUgIT0gMFxuXG5cbiAgICAgICAgICBpZiAobGFzdCA9PT0gbWFyayAmJiAhZXEoY2lqLCB6ZXJvKSkge1xuICAgICAgICAgICAgLy8gcHVzaCByb3cgJiB2YWx1ZVxuICAgICAgICAgICAgY2luZGV4LnB1c2goaSk7XG4gICAgICAgICAgICBjdmFsdWVzLnB1c2goY2lqKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHVwZGF0ZSBwdHJcblxuXG4gICAgY3B0cltiY29sdW1uc10gPSBjaW5kZXgubGVuZ3RoOyAvLyByZXR1cm4gc3BhcnNlIG1hdHJpeFxuXG4gICAgcmV0dXJuIGM7XG4gIH1cbiAgLyoqXG4gICAqIEMgPSBBICogQlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gYSAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgICAoTXhOKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gYiAgICAgICAgICAgIERlbnNlIFZlY3RvciAoTilcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICBTcGFyc2VNYXRyaXggICAgKE0sIDEpXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX211bHRpcGx5U3BhcnNlTWF0cml4VmVjdG9yKGEsIGIpIHtcbiAgICAvLyBhIHNwYXJzZVxuICAgIHZhciBhdmFsdWVzID0gYS5fdmFsdWVzO1xuICAgIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgICB2YXIgYXB0ciA9IGEuX3B0cjtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGEgbWF0cml4XG5cbiAgICBpZiAoIWF2YWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IG11bHRpcGx5IFBhdHRlcm4gb25seSBNYXRyaXggdGltZXMgRGVuc2UgTWF0cml4Jyk7XG4gICAgfSAvLyBiIGRlbnNlXG5cblxuICAgIHZhciBiZGF0YSA9IGIuX2RhdGE7XG4gICAgdmFyIGJkdCA9IGIuX2RhdGF0eXBlOyAvLyByb3dzICYgY29sdW1uc1xuXG4gICAgdmFyIGFyb3dzID0gYS5fc2l6ZVswXTtcbiAgICB2YXIgYnJvd3MgPSBiLl9zaXplWzBdOyAvLyByZXN1bHRcblxuICAgIHZhciBjdmFsdWVzID0gW107XG4gICAgdmFyIGNpbmRleCA9IFtdO1xuICAgIHZhciBjcHRyID0gW107IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGFkZFNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgYWYgPSBhZGRTY2FsYXI7IC8vIG11bHRpcGx5U2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBtZiA9IG11bHRpcGx5U2NhbGFyOyAvLyBlcXVhbFNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmIChhZHQgJiYgYmR0ICYmIGFkdCA9PT0gYmR0ICYmIHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlcyB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgYWYgPSB0eXBlZC5maW5kKGFkZFNjYWxhciwgW2R0LCBkdF0pO1xuICAgICAgbWYgPSB0eXBlZC5maW5kKG11bHRpcGx5U2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgICBlcSA9IHR5cGVkLmZpbmQoZXF1YWxTY2FsYXIsIFtkdCwgZHRdKTsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTtcbiAgICB9IC8vIHdvcmtzcGFjZVxuXG5cbiAgICB2YXIgeCA9IFtdOyAvLyB2ZWN0b3Igd2l0aCBtYXJrcyBpbmRpY2F0aW5nIGEgdmFsdWUgeFtpXSBleGlzdHMgaW4gYSBnaXZlbiBjb2x1bW5cblxuICAgIHZhciB3ID0gW107IC8vIHVwZGF0ZSBwdHJcblxuICAgIGNwdHJbMF0gPSAwOyAvLyByb3dzIGluIGJcblxuICAgIGZvciAodmFyIGliID0gMDsgaWIgPCBicm93czsgaWIrKykge1xuICAgICAgLy8gYltpYl1cbiAgICAgIHZhciB2YmkgPSBiZGF0YVtpYl07IC8vIGNoZWNrIGJbaWJdICE9IDAsIGF2b2lkIGxvb3BzXG5cbiAgICAgIGlmICghZXEodmJpLCB6ZXJvKSkge1xuICAgICAgICAvLyBBIHZhbHVlcyAmIGluZGV4IGluIGliIGNvbHVtblxuICAgICAgICBmb3IgKHZhciBrYTAgPSBhcHRyW2liXSwga2ExID0gYXB0cltpYiArIDFdLCBrYSA9IGthMDsga2EgPCBrYTE7IGthKyspIHtcbiAgICAgICAgICAvLyBhIHJvd1xuICAgICAgICAgIHZhciBpYSA9IGFpbmRleFtrYV07IC8vIGNoZWNrIHZhbHVlIGV4aXN0cyBpbiBjdXJyZW50IGpcblxuICAgICAgICAgIGlmICghd1tpYV0pIHtcbiAgICAgICAgICAgIC8vIGlhIGlzIG5ldyBlbnRyeSBpbiBqXG4gICAgICAgICAgICB3W2lhXSA9IHRydWU7IC8vIGFkZCBpIHRvIHBhdHRlcm4gb2YgQ1xuXG4gICAgICAgICAgICBjaW5kZXgucHVzaChpYSk7IC8vIHgoaWEpID0gQVxuXG4gICAgICAgICAgICB4W2lhXSA9IG1mKHZiaSwgYXZhbHVlc1trYV0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBpIGV4aXN0cyBpbiBDIGFscmVhZHlcbiAgICAgICAgICAgIHhbaWFdID0gYWYoeFtpYV0sIG1mKHZiaSwgYXZhbHVlc1trYV0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIGNvcHkgdmFsdWVzIGZyb20geCB0byBjb2x1bW4gamIgb2YgY1xuXG5cbiAgICBmb3IgKHZhciBwMSA9IGNpbmRleC5sZW5ndGgsIHAgPSAwOyBwIDwgcDE7IHArKykge1xuICAgICAgLy8gcm93XG4gICAgICB2YXIgaWMgPSBjaW5kZXhbcF07IC8vIGNvcHkgdmFsdWVcblxuICAgICAgY3ZhbHVlc1twXSA9IHhbaWNdO1xuICAgIH0gLy8gdXBkYXRlIHB0clxuXG5cbiAgICBjcHRyWzFdID0gY2luZGV4Lmxlbmd0aDsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXhcblxuICAgIHJldHVybiBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IGN2YWx1ZXMsXG4gICAgICBpbmRleDogY2luZGV4LFxuICAgICAgcHRyOiBjcHRyLFxuICAgICAgc2l6ZTogW2Fyb3dzLCAxXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBDID0gQSAqIEJcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9IGEgICAgICAgICAgICBTcGFyc2VNYXRyaXggICAgICAoTXhOKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gYiAgICAgICAgICAgIERlbnNlTWF0cml4ICAgICAgIChOeEMpXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgU3BhcnNlTWF0cml4ICAgICAgKE14QylcbiAgICovXG5cblxuICBmdW5jdGlvbiBfbXVsdGlwbHlTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeChhLCBiKSB7XG4gICAgLy8gYSBzcGFyc2VcbiAgICB2YXIgYXZhbHVlcyA9IGEuX3ZhbHVlcztcbiAgICB2YXIgYWluZGV4ID0gYS5faW5kZXg7XG4gICAgdmFyIGFwdHIgPSBhLl9wdHI7XG4gICAgdmFyIGFkdCA9IGEuX2RhdGF0eXBlOyAvLyB2YWxpZGF0ZSBhIG1hdHJpeFxuXG4gICAgaWYgKCFhdmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBtdWx0aXBseSBQYXR0ZXJuIG9ubHkgTWF0cml4IHRpbWVzIERlbnNlIE1hdHJpeCcpO1xuICAgIH0gLy8gYiBkZW5zZVxuXG5cbiAgICB2YXIgYmRhdGEgPSBiLl9kYXRhO1xuICAgIHZhciBiZHQgPSBiLl9kYXRhdHlwZTsgLy8gcm93cyAmIGNvbHVtbnNcblxuICAgIHZhciBhcm93cyA9IGEuX3NpemVbMF07XG4gICAgdmFyIGJyb3dzID0gYi5fc2l6ZVswXTtcbiAgICB2YXIgYmNvbHVtbnMgPSBiLl9zaXplWzFdOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyBhZGRTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGFmID0gYWRkU2NhbGFyOyAvLyBtdWx0aXBseVNjYWxhciBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgbWYgPSBtdWx0aXBseVNjYWxhcjsgLy8gZXF1YWxTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGVxID0gZXF1YWxTY2FsYXI7IC8vIHplcm8gdmFsdWVcblxuICAgIHZhciB6ZXJvID0gMDsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAoYWR0ICYmIGJkdCAmJiBhZHQgPT09IGJkdCAmJiB0eXBlb2YgYWR0ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZXMgdGhhdCBtYXRjaGVzIChkdCwgZHQpXG5cbiAgICAgIGFmID0gdHlwZWQuZmluZChhZGRTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICAgIG1mID0gdHlwZWQuZmluZChtdWx0aXBseVNjYWxhciwgW2R0LCBkdF0pO1xuICAgICAgZXEgPSB0eXBlZC5maW5kKGVxdWFsU2NhbGFyLCBbZHQsIGR0XSk7IC8vIGNvbnZlcnQgMCB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICB6ZXJvID0gdHlwZWQuY29udmVydCgwLCBkdCk7XG4gICAgfSAvLyByZXN1bHRcblxuXG4gICAgdmFyIGN2YWx1ZXMgPSBbXTtcbiAgICB2YXIgY2luZGV4ID0gW107XG4gICAgdmFyIGNwdHIgPSBbXTsgLy8gYyBtYXRyaXhcblxuICAgIHZhciBjID0gYS5jcmVhdGVTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiBjdmFsdWVzLFxuICAgICAgaW5kZXg6IGNpbmRleCxcbiAgICAgIHB0cjogY3B0cixcbiAgICAgIHNpemU6IFthcm93cywgYmNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7IC8vIHdvcmtzcGFjZVxuXG4gICAgdmFyIHggPSBbXTsgLy8gdmVjdG9yIHdpdGggbWFya3MgaW5kaWNhdGluZyBhIHZhbHVlIHhbaV0gZXhpc3RzIGluIGEgZ2l2ZW4gY29sdW1uXG5cbiAgICB2YXIgdyA9IFtdOyAvLyBsb29wIGIgY29sdW1uc1xuXG4gICAgZm9yICh2YXIgamIgPSAwOyBqYiA8IGJjb2x1bW5zOyBqYisrKSB7XG4gICAgICAvLyB1cGRhdGUgcHRyXG4gICAgICBjcHRyW2piXSA9IGNpbmRleC5sZW5ndGg7IC8vIG1hcmsgaW4gd29ya3NwYWNlIGZvciBjdXJyZW50IGNvbHVtblxuXG4gICAgICB2YXIgbWFyayA9IGpiICsgMTsgLy8gcm93cyBpbiBqYlxuXG4gICAgICBmb3IgKHZhciBpYiA9IDA7IGliIDwgYnJvd3M7IGliKyspIHtcbiAgICAgICAgLy8gYltpYiwgamJdXG4gICAgICAgIHZhciB2YmlqID0gYmRhdGFbaWJdW2piXTsgLy8gY2hlY2sgYltpYiwgamJdICE9IDAsIGF2b2lkIGxvb3BzXG5cbiAgICAgICAgaWYgKCFlcSh2YmlqLCB6ZXJvKSkge1xuICAgICAgICAgIC8vIEEgdmFsdWVzICYgaW5kZXggaW4gaWIgY29sdW1uXG4gICAgICAgICAgZm9yICh2YXIga2EwID0gYXB0cltpYl0sIGthMSA9IGFwdHJbaWIgKyAxXSwga2EgPSBrYTA7IGthIDwga2ExOyBrYSsrKSB7XG4gICAgICAgICAgICAvLyBhIHJvd1xuICAgICAgICAgICAgdmFyIGlhID0gYWluZGV4W2thXTsgLy8gY2hlY2sgdmFsdWUgZXhpc3RzIGluIGN1cnJlbnQgalxuXG4gICAgICAgICAgICBpZiAod1tpYV0gIT09IG1hcmspIHtcbiAgICAgICAgICAgICAgLy8gaWEgaXMgbmV3IGVudHJ5IGluIGpcbiAgICAgICAgICAgICAgd1tpYV0gPSBtYXJrOyAvLyBhZGQgaSB0byBwYXR0ZXJuIG9mIENcblxuICAgICAgICAgICAgICBjaW5kZXgucHVzaChpYSk7IC8vIHgoaWEpID0gQVxuXG4gICAgICAgICAgICAgIHhbaWFdID0gbWYodmJpaiwgYXZhbHVlc1trYV0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gaSBleGlzdHMgaW4gQyBhbHJlYWR5XG4gICAgICAgICAgICAgIHhbaWFdID0gYWYoeFtpYV0sIG1mKHZiaWosIGF2YWx1ZXNba2FdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIGNvcHkgdmFsdWVzIGZyb20geCB0byBjb2x1bW4gamIgb2YgY1xuXG5cbiAgICAgIGZvciAodmFyIHAwID0gY3B0cltqYl0sIHAxID0gY2luZGV4Lmxlbmd0aCwgcCA9IHAwOyBwIDwgcDE7IHArKykge1xuICAgICAgICAvLyByb3dcbiAgICAgICAgdmFyIGljID0gY2luZGV4W3BdOyAvLyBjb3B5IHZhbHVlXG5cbiAgICAgICAgY3ZhbHVlc1twXSA9IHhbaWNdO1xuICAgICAgfVxuICAgIH0gLy8gdXBkYXRlIHB0clxuXG5cbiAgICBjcHRyW2Jjb2x1bW5zXSA9IGNpbmRleC5sZW5ndGg7IC8vIHJldHVybiBzcGFyc2UgbWF0cml4XG5cbiAgICByZXR1cm4gYztcbiAgfVxuICAvKipcbiAgICogQyA9IEEgKiBCXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSBhICAgICAgICAgICAgU3BhcnNlTWF0cml4ICAgICAgKE14TilcbiAgICogQHBhcmFtIHtNYXRyaXh9IGIgICAgICAgICAgICBTcGFyc2VNYXRyaXggICAgICAoTnhDKVxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAgICAgIChNeEMpXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX211bHRpcGx5U3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KGEsIGIpIHtcbiAgICAvLyBhIHNwYXJzZVxuICAgIHZhciBhdmFsdWVzID0gYS5fdmFsdWVzO1xuICAgIHZhciBhaW5kZXggPSBhLl9pbmRleDtcbiAgICB2YXIgYXB0ciA9IGEuX3B0cjtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIGIgc3BhcnNlXG5cbiAgICB2YXIgYnZhbHVlcyA9IGIuX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gYi5faW5kZXg7XG4gICAgdmFyIGJwdHIgPSBiLl9wdHI7XG4gICAgdmFyIGJkdCA9IGIuX2RhdGF0eXBlOyAvLyByb3dzICYgY29sdW1uc1xuXG4gICAgdmFyIGFyb3dzID0gYS5fc2l6ZVswXTtcbiAgICB2YXIgYmNvbHVtbnMgPSBiLl9zaXplWzFdOyAvLyBmbGFnIGluZGljYXRpbmcgYm90aCBtYXRyaWNlcyAoYSAmIGIpIGNvbnRhaW4gZGF0YVxuXG4gICAgdmFyIHZhbHVlcyA9IGF2YWx1ZXMgJiYgYnZhbHVlczsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gYWRkU2NhbGFyIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBhZiA9IGFkZFNjYWxhcjsgLy8gbXVsdGlwbHlTY2FsYXIgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIG1mID0gbXVsdGlwbHlTY2FsYXI7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKGFkdCAmJiBiZHQgJiYgYWR0ID09PSBiZHQgJiYgdHlwZW9mIGFkdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gZmluZCBzaWduYXR1cmVzIHRoYXQgbWF0Y2hlcyAoZHQsIGR0KVxuXG4gICAgICBhZiA9IHR5cGVkLmZpbmQoYWRkU2NhbGFyLCBbZHQsIGR0XSk7XG4gICAgICBtZiA9IHR5cGVkLmZpbmQobXVsdGlwbHlTY2FsYXIsIFtkdCwgZHRdKTtcbiAgICB9IC8vIHJlc3VsdFxuXG5cbiAgICB2YXIgY3ZhbHVlcyA9IHZhbHVlcyA/IFtdIDogdW5kZWZpbmVkO1xuICAgIHZhciBjaW5kZXggPSBbXTtcbiAgICB2YXIgY3B0ciA9IFtdOyAvLyBjIG1hdHJpeFxuXG4gICAgdmFyIGMgPSBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IGN2YWx1ZXMsXG4gICAgICBpbmRleDogY2luZGV4LFxuICAgICAgcHRyOiBjcHRyLFxuICAgICAgc2l6ZTogW2Fyb3dzLCBiY29sdW1uc10sXG4gICAgICBkYXRhdHlwZTogZHRcbiAgICB9KTsgLy8gd29ya3NwYWNlXG5cbiAgICB2YXIgeCA9IHZhbHVlcyA/IFtdIDogdW5kZWZpbmVkOyAvLyB2ZWN0b3Igd2l0aCBtYXJrcyBpbmRpY2F0aW5nIGEgdmFsdWUgeFtpXSBleGlzdHMgaW4gYSBnaXZlbiBjb2x1bW5cblxuICAgIHZhciB3ID0gW107IC8vIHZhcmlhYmxlc1xuXG4gICAgdmFyIGthLCBrYTAsIGthMSwga2IsIGtiMCwga2IxLCBpYSwgaWI7IC8vIGxvb3AgYiBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqYiA9IDA7IGpiIDwgYmNvbHVtbnM7IGpiKyspIHtcbiAgICAgIC8vIHVwZGF0ZSBwdHJcbiAgICAgIGNwdHJbamJdID0gY2luZGV4Lmxlbmd0aDsgLy8gbWFyayBpbiB3b3Jrc3BhY2UgZm9yIGN1cnJlbnQgY29sdW1uXG5cbiAgICAgIHZhciBtYXJrID0gamIgKyAxOyAvLyBCIHZhbHVlcyAmIGluZGV4IGluIGpcblxuICAgICAgZm9yIChrYjAgPSBicHRyW2piXSwga2IxID0gYnB0cltqYiArIDFdLCBrYiA9IGtiMDsga2IgPCBrYjE7IGtiKyspIHtcbiAgICAgICAgLy8gYiByb3dcbiAgICAgICAgaWIgPSBiaW5kZXhba2JdOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzXG5cbiAgICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICAgIC8vIGxvb3AgdmFsdWVzIGluIGFbOixpYl1cbiAgICAgICAgICBmb3IgKGthMCA9IGFwdHJbaWJdLCBrYTEgPSBhcHRyW2liICsgMV0sIGthID0ga2EwOyBrYSA8IGthMTsga2ErKykge1xuICAgICAgICAgICAgLy8gcm93XG4gICAgICAgICAgICBpYSA9IGFpbmRleFtrYV07IC8vIGNoZWNrIHZhbHVlIGV4aXN0cyBpbiBjdXJyZW50IGpcblxuICAgICAgICAgICAgaWYgKHdbaWFdICE9PSBtYXJrKSB7XG4gICAgICAgICAgICAgIC8vIGlhIGlzIG5ldyBlbnRyeSBpbiBqXG4gICAgICAgICAgICAgIHdbaWFdID0gbWFyazsgLy8gYWRkIGkgdG8gcGF0dGVybiBvZiBDXG5cbiAgICAgICAgICAgICAgY2luZGV4LnB1c2goaWEpOyAvLyB4KGlhKSA9IEFcblxuICAgICAgICAgICAgICB4W2lhXSA9IG1mKGJ2YWx1ZXNba2JdLCBhdmFsdWVzW2thXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBpIGV4aXN0cyBpbiBDIGFscmVhZHlcbiAgICAgICAgICAgICAgeFtpYV0gPSBhZih4W2lhXSwgbWYoYnZhbHVlc1trYl0sIGF2YWx1ZXNba2FdKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGxvb3AgdmFsdWVzIGluIGFbOixpYl1cbiAgICAgICAgICBmb3IgKGthMCA9IGFwdHJbaWJdLCBrYTEgPSBhcHRyW2liICsgMV0sIGthID0ga2EwOyBrYSA8IGthMTsga2ErKykge1xuICAgICAgICAgICAgLy8gcm93XG4gICAgICAgICAgICBpYSA9IGFpbmRleFtrYV07IC8vIGNoZWNrIHZhbHVlIGV4aXN0cyBpbiBjdXJyZW50IGpcblxuICAgICAgICAgICAgaWYgKHdbaWFdICE9PSBtYXJrKSB7XG4gICAgICAgICAgICAgIC8vIGlhIGlzIG5ldyBlbnRyeSBpbiBqXG4gICAgICAgICAgICAgIHdbaWFdID0gbWFyazsgLy8gYWRkIGkgdG8gcGF0dGVybiBvZiBDXG5cbiAgICAgICAgICAgICAgY2luZGV4LnB1c2goaWEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgbWF0cml4IHZhbHVlcyAocGF0dGVybiBtYXRyaXgpXG5cblxuICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICAvLyBjb3B5IHZhbHVlcyBmcm9tIHggdG8gY29sdW1uIGpiIG9mIGNcbiAgICAgICAgZm9yICh2YXIgcDAgPSBjcHRyW2piXSwgcDEgPSBjaW5kZXgubGVuZ3RoLCBwID0gcDA7IHAgPCBwMTsgcCsrKSB7XG4gICAgICAgICAgLy8gcm93XG4gICAgICAgICAgdmFyIGljID0gY2luZGV4W3BdOyAvLyBjb3B5IHZhbHVlXG5cbiAgICAgICAgICBjdmFsdWVzW3BdID0geFtpY107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHVwZGF0ZSBwdHJcblxuXG4gICAgY3B0cltiY29sdW1uc10gPSBjaW5kZXgubGVuZ3RoOyAvLyByZXR1cm4gc3BhcnNlIG1hdHJpeFxuXG4gICAgcmV0dXJuIGM7XG4gIH1cblxuICByZXR1cm4gbXVsdGlwbHk7XG59KTtcbmV4cG9ydHMuY3JlYXRlTXVsdGlwbHkgPSBjcmVhdGVNdWx0aXBseTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTXVsdGlwbHlTY2FsYXIgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ211bHRpcGx5U2NhbGFyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlTXVsdGlwbHlTY2FsYXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBNdWx0aXBseSB0d28gc2NhbGFyIHZhbHVlcywgYHggKiB5YC5cbiAgICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCBmb3IgaW50ZXJuYWwgdXNlOiBpdCBpcyB1c2VkIGJ5IHRoZSBwdWJsaWMgZnVuY3Rpb25cbiAgICogYG11bHRpcGx5YFxuICAgKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHN1cHBvcnQgY29sbGVjdGlvbnMgKEFycmF5IG9yIE1hdHJpeCkuXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXR9IHggICBGaXJzdCB2YWx1ZSB0byBtdWx0aXBseVxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXh9IHkgICAgICAgICAgU2Vjb25kIHZhbHVlIHRvIG11bHRpcGx5XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXR9ICAgICBNdWx0aXBsaWNhdGlvbiBvZiBgeGAgYW5kIGB5YFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdmFyIG11bHRpcGx5U2NhbGFyID0gdHlwZWQoJ211bHRpcGx5U2NhbGFyJywge1xuICAgICdudW1iZXIsIG51bWJlcic6IF9udW1iZXIubXVsdGlwbHlOdW1iZXIsXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7XG4gICAgICByZXR1cm4geC5tdWwoeSk7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHgudGltZXMoeSk7XG4gICAgfSxcbiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7XG4gICAgICByZXR1cm4geC5tdWwoeSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgRnJhY3Rpb24gfCBCaWdOdW1iZXIgfCBDb21wbGV4LCBVbml0JzogZnVuY3Rpb24gbnVtYmVyRnJhY3Rpb25CaWdOdW1iZXJDb21wbGV4VW5pdCh4LCB5KSB7XG4gICAgICB2YXIgcmVzID0geS5jbG9uZSgpO1xuICAgICAgcmVzLnZhbHVlID0gcmVzLnZhbHVlID09PSBudWxsID8gcmVzLl9ub3JtYWxpemUoeCkgOiBtdWx0aXBseVNjYWxhcihyZXMudmFsdWUsIHgpO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuICAgICdVbml0LCBudW1iZXIgfCBGcmFjdGlvbiB8IEJpZ051bWJlciB8IENvbXBsZXgnOiBmdW5jdGlvbiBVbml0TnVtYmVyRnJhY3Rpb25CaWdOdW1iZXJDb21wbGV4KHgsIHkpIHtcbiAgICAgIHZhciByZXMgPSB4LmNsb25lKCk7XG4gICAgICByZXMudmFsdWUgPSByZXMudmFsdWUgPT09IG51bGwgPyByZXMuX25vcm1hbGl6ZSh5KSA6IG11bHRpcGx5U2NhbGFyKHJlcy52YWx1ZSwgeSk7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG4gICAgJ1VuaXQsIFVuaXQnOiBmdW5jdGlvbiBVbml0VW5pdCh4LCB5KSB7XG4gICAgICByZXR1cm4geC5tdWx0aXBseSh5KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gbXVsdGlwbHlTY2FsYXI7XG59KTtcbmV4cG9ydHMuY3JlYXRlTXVsdGlwbHlTY2FsYXIgPSBjcmVhdGVNdWx0aXBseVNjYWxhcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTm9ybSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ25vcm0nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnYWJzJywgJ2FkZCcsICdwb3cnLCAnY29uaicsICdzcXJ0JywgJ211bHRpcGx5JywgJ2VxdWFsU2NhbGFyJywgJ2xhcmdlcicsICdzbWFsbGVyJywgJ21hdHJpeCddO1xudmFyIGNyZWF0ZU5vcm0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWJzID0gX3JlZi5hYnMsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIHBvdyA9IF9yZWYucG93LFxuICAgICAgY29uaiA9IF9yZWYuY29uaixcbiAgICAgIHNxcnQgPSBfcmVmLnNxcnQsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBsYXJnZXIgPSBfcmVmLmxhcmdlcixcbiAgICAgIHNtYWxsZXIgPSBfcmVmLnNtYWxsZXIsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBub3JtIG9mIGEgbnVtYmVyLCB2ZWN0b3Igb3IgbWF0cml4LlxuICAgKlxuICAgKiBUaGUgc2Vjb25kIHBhcmFtZXRlciBwIGlzIG9wdGlvbmFsLiBJZiBub3QgcHJvdmlkZWQsIGl0IGRlZmF1bHRzIHRvIDIuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5ub3JtKHgpXG4gICAqICAgIG1hdGgubm9ybSh4LCBwKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hYnMoLTMuNSkgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAzLjVcbiAgICogICAgbWF0aC5ub3JtKC0zLjUpICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAzLjVcbiAgICpcbiAgICogICAgbWF0aC5ub3JtKG1hdGguY29tcGxleCgzLCAtNCkpICAgICAgICAgLy8gcmV0dXJucyA1XG4gICAqXG4gICAqICAgIG1hdGgubm9ybShbMSwgMiwgLTNdLCBJbmZpbml0eSkgICAgICAgIC8vIHJldHVybnMgM1xuICAgKiAgICBtYXRoLm5vcm0oWzEsIDIsIC0zXSwgLUluZmluaXR5KSAgICAgICAvLyByZXR1cm5zIDFcbiAgICpcbiAgICogICAgbWF0aC5ub3JtKFszLCA0XSwgMikgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyA1XG4gICAqXG4gICAqICAgIG1hdGgubm9ybShbWzEsIDJdLCBbMywgNF1dLCAxKSAgICAgICAgICAvLyByZXR1cm5zIDZcbiAgICogICAgbWF0aC5ub3JtKFtbMSwgMl0sIFszLCA0XV0sICdpbmYnKSAgICAgLy8gcmV0dXJucyA3XG4gICAqICAgIG1hdGgubm9ybShbWzEsIDJdLCBbMywgNF1dLCAnZnJvJykgICAgIC8vIHJldHVybnMgNS40NzcyMjU1NzUwNTE2NjFcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGFicywgaHlwb3RcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4XG4gICAqICAgICAgICAgICAgVmFsdWUgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgbm9ybVxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBzdHJpbmd9IFtwPTJdXG4gICAqICAgICAgICAgICAgVmVjdG9yIHNwYWNlLlxuICAgKiAgICAgICAgICAgIFN1cHBvcnRlZCBudW1iZXJzIGluY2x1ZGUgSW5maW5pdHkgYW5kIC1JbmZpbml0eS5cbiAgICogICAgICAgICAgICBTdXBwb3J0ZWQgc3RyaW5ncyBhcmU6ICdpbmYnLCAnLWluZicsIGFuZCAnZnJvJyAoVGhlIEZyb2Jlbml1cyBub3JtKVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXJ9IHRoZSBwLW5vcm1cbiAgICovXG4gIHZhciBub3JtID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogTWF0aC5hYnMsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hYnMoKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIC8vIG5vcm0oeCkgPSBhYnMoeClcbiAgICAgIHJldHVybiB4LmFicygpO1xuICAgIH0sXG4gICAgXCJib29sZWFuXCI6IGZ1bmN0aW9uIGJvb2xlYW4oeCkge1xuICAgICAgLy8gbm9ybSh4KSA9IGFicyh4KVxuICAgICAgcmV0dXJuIE1hdGguYWJzKHgpO1xuICAgIH0sXG4gICAgQXJyYXk6IGZ1bmN0aW9uIEFycmF5KHgpIHtcbiAgICAgIHJldHVybiBfbm9ybShtYXRyaXgoeCksIDIpO1xuICAgIH0sXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuIF9ub3JtKHgsIDIpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IENvbXBsZXggfCBCaWdOdW1iZXIgfCBib29sZWFuLCBudW1iZXIgfCBCaWdOdW1iZXIgfCBzdHJpbmcnOiBmdW5jdGlvbiBudW1iZXJDb21wbGV4QmlnTnVtYmVyQm9vbGVhbk51bWJlckJpZ051bWJlclN0cmluZyh4KSB7XG4gICAgICAvLyBpZ25vcmUgc2Vjb25kIHBhcmFtZXRlciwgVE9ETzogcmVtb3ZlIHRoZSBvcHRpb24gb2Ygc2Vjb25kIHBhcmFtZXRlciBmb3IgdGhlc2UgdHlwZXNcbiAgICAgIHJldHVybiBub3JtKHgpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBudW1iZXIgfCBCaWdOdW1iZXIgfCBzdHJpbmcnOiBmdW5jdGlvbiBBcnJheU51bWJlckJpZ051bWJlclN0cmluZyh4LCBwKSB7XG4gICAgICByZXR1cm4gX25vcm0obWF0cml4KHgpLCBwKTtcbiAgICB9LFxuICAgICdNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlciB8IHN0cmluZyc6IGZ1bmN0aW9uIE1hdHJpeE51bWJlckJpZ051bWJlclN0cmluZyh4LCBwKSB7XG4gICAgICByZXR1cm4gX25vcm0oeCwgcCk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbm9ybSBmb3IgYW4gYXJyYXlcbiAgICogQHBhcmFtIHtNYXRyaXh9IHhcbiAgICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IHBcbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgbm9ybVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfbm9ybSh4LCBwKSB7XG4gICAgLy8gc2l6ZVxuICAgIHZhciBzaXplWCA9IHguc2l6ZSgpOyAvLyBjaGVjayBpZiBpdCBpcyBhIHZlY3RvclxuXG4gICAgaWYgKHNpemVYLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gY2hlY2sgcFxuICAgICAgaWYgKHAgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB8fCBwID09PSAnaW5mJykge1xuICAgICAgICAvLyBub3JtKHgsIEluZmluaXR5KSA9IG1heChhYnMoeCkpXG4gICAgICAgIHZhciBwaW5mID0gMDsgLy8gc2tpcCB6ZXJvcyBzaW5jZSBhYnMoMCkgPT09IDBcblxuICAgICAgICB4LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgdmFyIHYgPSBhYnModmFsdWUpO1xuXG4gICAgICAgICAgaWYgKGxhcmdlcih2LCBwaW5mKSkge1xuICAgICAgICAgICAgcGluZiA9IHY7XG4gICAgICAgICAgfVxuICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIHBpbmY7XG4gICAgICB9XG5cbiAgICAgIGlmIChwID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgfHwgcCA9PT0gJy1pbmYnKSB7XG4gICAgICAgIC8vIG5vcm0oeCwgLUluZmluaXR5KSA9IG1pbihhYnMoeCkpXG4gICAgICAgIHZhciBuaW5mOyAvLyBza2lwIHplcm9zIHNpbmNlIGFicygwKSA9PT0gMFxuXG4gICAgICAgIHguZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICB2YXIgdiA9IGFicyh2YWx1ZSk7XG5cbiAgICAgICAgICBpZiAoIW5pbmYgfHwgc21hbGxlcih2LCBuaW5mKSkge1xuICAgICAgICAgICAgbmluZiA9IHY7XG4gICAgICAgICAgfVxuICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgcmV0dXJuIG5pbmYgfHwgMDtcbiAgICAgIH1cblxuICAgICAgaWYgKHAgPT09ICdmcm8nKSB7XG4gICAgICAgIHJldHVybiBfbm9ybSh4LCAyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBwID09PSAnbnVtYmVyJyAmJiAhaXNOYU4ocCkpIHtcbiAgICAgICAgLy8gY2hlY2sgcCAhPSAwXG4gICAgICAgIGlmICghZXF1YWxTY2FsYXIocCwgMCkpIHtcbiAgICAgICAgICAvLyBub3JtKHgsIHApID0gc3VtKGFicyh4aSkgXiBwKSBeIDEvcFxuICAgICAgICAgIHZhciBuID0gMDsgLy8gc2tpcCB6ZXJvcyBzaW5jZSBhYnMoMCkgPT09IDBcblxuICAgICAgICAgIHguZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIG4gPSBhZGQocG93KGFicyh2YWx1ZSksIHApLCBuKTtcbiAgICAgICAgICB9LCB0cnVlKTtcbiAgICAgICAgICByZXR1cm4gcG93KG4sIDEgLyBwKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7XG4gICAgICB9IC8vIGludmFsaWQgcGFyYW1ldGVyIHZhbHVlXG5cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBwYXJhbWV0ZXIgdmFsdWUnKTtcbiAgICB9IC8vIE14TiBtYXRyaXhcblxuXG4gICAgaWYgKHNpemVYLmxlbmd0aCA9PT0gMikge1xuICAgICAgLy8gY2hlY2sgcFxuICAgICAgaWYgKHAgPT09IDEpIHtcbiAgICAgICAgLy8gbm9ybSh4KSA9IHRoZSBsYXJnZXN0IGNvbHVtbiBzdW1cbiAgICAgICAgdmFyIGMgPSBbXTsgLy8gcmVzdWx0XG5cbiAgICAgICAgdmFyIG1heGMgPSAwOyAvLyBza2lwIHplcm9zIHNpbmNlIGFicygwKSA9PSAwXG5cbiAgICAgICAgeC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgpIHtcbiAgICAgICAgICB2YXIgaiA9IGluZGV4WzFdO1xuICAgICAgICAgIHZhciBjaiA9IGFkZChjW2pdIHx8IDAsIGFicyh2YWx1ZSkpO1xuXG4gICAgICAgICAgaWYgKGxhcmdlcihjaiwgbWF4YykpIHtcbiAgICAgICAgICAgIG1heGMgPSBjajtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjW2pdID0gY2o7XG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgICByZXR1cm4gbWF4YztcbiAgICAgIH1cblxuICAgICAgaWYgKHAgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB8fCBwID09PSAnaW5mJykge1xuICAgICAgICAvLyBub3JtKHgpID0gdGhlIGxhcmdlc3Qgcm93IHN1bVxuICAgICAgICB2YXIgciA9IFtdOyAvLyByZXN1bHRcblxuICAgICAgICB2YXIgbWF4ciA9IDA7IC8vIHNraXAgemVyb3Mgc2luY2UgYWJzKDApID09IDBcblxuICAgICAgICB4LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkge1xuICAgICAgICAgIHZhciBpID0gaW5kZXhbMF07XG4gICAgICAgICAgdmFyIHJpID0gYWRkKHJbaV0gfHwgMCwgYWJzKHZhbHVlKSk7XG5cbiAgICAgICAgICBpZiAobGFyZ2VyKHJpLCBtYXhyKSkge1xuICAgICAgICAgICAgbWF4ciA9IHJpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJbaV0gPSByaTtcbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBtYXhyO1xuICAgICAgfVxuXG4gICAgICBpZiAocCA9PT0gJ2ZybycpIHtcbiAgICAgICAgLy8gbm9ybSh4KSA9IHNxcnQoc3VtKGRpYWcoeCd4KSkpXG4gICAgICAgIHZhciBmcm8gPSAwO1xuICAgICAgICB4LmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCkge1xuICAgICAgICAgIGZybyA9IGFkZChmcm8sIG11bHRpcGx5KHZhbHVlLCBjb25qKHZhbHVlKSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGFicyhzcXJ0KGZybykpO1xuICAgICAgfVxuXG4gICAgICBpZiAocCA9PT0gMikge1xuICAgICAgICAvLyBub3QgaW1wbGVtZW50ZWRcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBwYXJhbWV0ZXIgdmFsdWUsIG1pc3NpbmcgaW1wbGVtZW50YXRpb24gb2YgbWF0cml4IHNpbmd1bGFyIHZhbHVlIGRlY29tcG9zaXRpb24nKTtcbiAgICAgIH0gLy8gaW52YWxpZCBwYXJhbWV0ZXIgdmFsdWVcblxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHBhcmFtZXRlciB2YWx1ZScpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBub3JtO1xufSk7XG5leHBvcnRzLmNyZWF0ZU5vcm0gPSBjcmVhdGVOb3JtOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVOdGhSb290TnVtYmVyID0gZXhwb3J0cy5jcmVhdGVOdGhSb290ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDFcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMlwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA2XCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTFcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG02ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ250aFJvb3QnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ0JpZ051bWJlciddO1xudmFyIGNyZWF0ZU50aFJvb3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBfQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG4gIHZhciBhbGdvcml0aG0wMSA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAxKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMDIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDYgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMDYpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTEgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTEpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNi5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbnRoIHJvb3Qgb2YgYSB2YWx1ZS5cbiAgICogVGhlIHByaW5jaXBhbCBudGggcm9vdCBvZiBhIHBvc2l0aXZlIHJlYWwgbnVtYmVyIEEsIGlzIHRoZSBwb3NpdGl2ZSByZWFsXG4gICAqIHNvbHV0aW9uIG9mIHRoZSBlcXVhdGlvblxuICAgKlxuICAgKiAgICAgeF5yb290ID0gQVxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLm50aFJvb3QoYSlcbiAgICogICAgIG1hdGgubnRoUm9vdChhLCByb290KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgubnRoUm9vdCg5LCAyKSAgICAvLyByZXR1cm5zIDMsIGFzIDNeMiA9PSA5XG4gICAqICAgICBtYXRoLnNxcnQoOSkgICAgICAgICAgLy8gcmV0dXJucyAzLCBhcyAzXjIgPT0gOVxuICAgKiAgICAgbWF0aC5udGhSb290KDY0LCAzKSAgIC8vIHJldHVybnMgNCwgYXMgNF4zID09IDY0XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgc3FydCwgcG93XG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXggfCBDb21wbGV4fSBhXG4gICAqICAgICAgICAgICAgICBWYWx1ZSBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBudGggcm9vdFxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gW3Jvb3Q9Ml0gICAgVGhlIHJvb3QuXG4gICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0aGUgbnRoIHJvb3Qgb2YgYGFgXG4gICAqL1xuXG4gIHZhciBjb21wbGV4RXJyID0gJycgKyAnQ29tcGxleCBudW1iZXIgbm90IHN1cHBvcnRlZCBpbiBmdW5jdGlvbiBudGhSb290LiAnICsgJ1VzZSBudGhSb290cyBpbnN0ZWFkLic7XG4gIHZhciBudGhSb290ID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiAoMCwgX251bWJlci5udGhSb290TnVtYmVyKSh4LCAyKTtcbiAgICB9LFxuICAgICdudW1iZXIsIG51bWJlcic6IF9udW1iZXIubnRoUm9vdE51bWJlcixcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4gX2JpZ050aFJvb3QoeCwgbmV3IF9CaWdOdW1iZXIoMikpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoY29tcGxleEVycik7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgbnVtYmVyJzogZnVuY3Rpb24gQ29tcGxleE51bWJlcih4LCB5KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoY29tcGxleEVycik7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBfYmlnTnRoUm9vdCxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gbnRoUm9vdCh4LCAyKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBkZW5zaXR5IG11c3QgYmUgb25lIChubyB6ZXJvcyBpbiBtYXRyaXgpXG4gICAgICBpZiAoeS5kZW5zaXR5KCkgPT09IDEpIHtcbiAgICAgICAgLy8gc3BhcnNlICsgc3BhcnNlXG4gICAgICAgIHJldHVybiBhbGdvcml0aG0wNih4LCB5LCBudGhSb290KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHRocm93IGV4Y2VwdGlvblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3QgbXVzdCBiZSBub24temVybycpO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDIoeSwgeCwgbnRoUm9vdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIGRlbnNpdHkgbXVzdCBiZSBvbmUgKG5vIHplcm9zIGluIG1hdHJpeClcbiAgICAgIGlmICh5LmRlbnNpdHkoKSA9PT0gMSkge1xuICAgICAgICAvLyBkZW5zZSArIHNwYXJzZVxuICAgICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeCwgeSwgbnRoUm9vdCwgZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdGhyb3cgZXhjZXB0aW9uXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUm9vdCBtdXN0IGJlIG5vbi16ZXJvJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgbnRoUm9vdCk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbnRoUm9vdChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbnRoUm9vdChtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbnRoUm9vdCh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gU3BhcnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCBudGhSb290LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIERlbnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBudGhSb290LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gZGVuc2l0eSBtdXN0IGJlIG9uZSAobm8gemVyb3MgaW4gbWF0cml4KVxuICAgICAgaWYgKHkuZGVuc2l0eSgpID09PSAxKSB7XG4gICAgICAgIC8vIHNwYXJzZSAtIHNjYWxhclxuICAgICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeSwgeCwgbnRoUm9vdCwgdHJ1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyB0aHJvdyBleGNlcHRpb25cbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdSb290IG11c3QgYmUgbm9uLXplcm8nKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyRGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIG50aFJvb3QsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheU51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbnRoUm9vdChtYXRyaXgoeCksIHkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIEFycmF5JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyQXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIG50aFJvb3QoeCwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG50aFJvb3Q7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIG50aCByb290IG9mIGEgZm9yIEJpZ051bWJlcnMsIHNvbHZlIHhecm9vdCA9PSBhXG4gICAqIGh0dHBzOi8vcm9zZXR0YWNvZGUub3JnL3dpa2kvTnRoX3Jvb3QjSmF2YVNjcmlwdFxuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gYVxuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gcm9vdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfYmlnTnRoUm9vdChhLCByb290KSB7XG4gICAgdmFyIHByZWNpc2lvbiA9IF9CaWdOdW1iZXIucHJlY2lzaW9uO1xuXG4gICAgdmFyIEJpZyA9IF9CaWdOdW1iZXIuY2xvbmUoe1xuICAgICAgcHJlY2lzaW9uOiBwcmVjaXNpb24gKyAyXG4gICAgfSk7XG5cbiAgICB2YXIgemVybyA9IG5ldyBfQmlnTnVtYmVyKDApO1xuICAgIHZhciBvbmUgPSBuZXcgQmlnKDEpO1xuICAgIHZhciBpbnYgPSByb290LmlzTmVnYXRpdmUoKTtcblxuICAgIGlmIChpbnYpIHtcbiAgICAgIHJvb3QgPSByb290Lm5lZygpO1xuICAgIH1cblxuICAgIGlmIChyb290LmlzWmVybygpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3QgbXVzdCBiZSBub24temVybycpO1xuICAgIH1cblxuICAgIGlmIChhLmlzTmVnYXRpdmUoKSAmJiAhcm9vdC5hYnMoKS5tb2QoMikuZXF1YWxzKDEpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Jvb3QgbXVzdCBiZSBvZGQgd2hlbiBhIGlzIG5lZ2F0aXZlLicpO1xuICAgIH0gLy8gZWRnZSBjYXNlcyB6ZXJvIGFuZCBpbmZpbml0eVxuXG5cbiAgICBpZiAoYS5pc1plcm8oKSkge1xuICAgICAgcmV0dXJuIGludiA/IG5ldyBCaWcoSW5maW5pdHkpIDogMDtcbiAgICB9XG5cbiAgICBpZiAoIWEuaXNGaW5pdGUoKSkge1xuICAgICAgcmV0dXJuIGludiA/IHplcm8gOiBhO1xuICAgIH1cblxuICAgIHZhciB4ID0gYS5hYnMoKS5wb3cob25lLmRpdihyb290KSk7IC8vIElmIGEgPCAwLCB3ZSByZXF1aXJlIHRoYXQgcm9vdCBpcyBhbiBvZGQgaW50ZWdlcixcbiAgICAvLyBzbyAoLTEpIF4gKDEvcm9vdCkgPSAtMVxuXG4gICAgeCA9IGEuaXNOZWcoKSA/IHgubmVnKCkgOiB4O1xuICAgIHJldHVybiBuZXcgX0JpZ051bWJlcigoaW52ID8gb25lLmRpdih4KSA6IHgpLnRvUHJlY2lzaW9uKHByZWNpc2lvbikpO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlTnRoUm9vdCA9IGNyZWF0ZU50aFJvb3Q7XG52YXIgY3JlYXRlTnRoUm9vdE51bWJlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBbJ3R5cGVkJ10sIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgdHlwZWQgPSBfcmVmMi50eXBlZDtcbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIubnRoUm9vdE51bWJlcixcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfbnVtYmVyLm50aFJvb3ROdW1iZXJcbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlTnRoUm9vdE51bWJlciA9IGNyZWF0ZU50aFJvb3ROdW1iZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU50aFJvb3RzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnbnRoUm9vdHMnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ3R5cGVkJywgJ2RpdmlkZVNjYWxhcicsICdDb21wbGV4J107XG52YXIgY3JlYXRlTnRoUm9vdHMgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIENvbXBsZXggPSBfcmVmLkNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgbnRoIHJvb3RzIG9mIGEgdmFsdWUuXG4gICAqIEFuIG50aCByb290IG9mIGEgcG9zaXRpdmUgcmVhbCBudW1iZXIgQSxcbiAgICogaXMgYSBwb3NpdGl2ZSByZWFsIHNvbHV0aW9uIG9mIHRoZSBlcXVhdGlvbiBcInhecm9vdCA9IEFcIi5cbiAgICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIGFycmF5IG9mIGNvbXBsZXggdmFsdWVzLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubnRoUm9vdHMoeClcbiAgICogICAgbWF0aC5udGhSb290cyh4LCByb290KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5udGhSb290cygxKVxuICAgKiAgICAvLyByZXR1cm5zIFtcbiAgICogICAgLy8gICB7cmU6IDEsIGltOiAwfSxcbiAgICogICAgLy8gICB7cmU6IC0xLCBpbTogMH1cbiAgICogICAgLy8gXVxuICAgKiAgICBudGhSb290cygxLCAzKVxuICAgKiAgICAvLyByZXR1cm5zIFtcbiAgICogICAgLy8gICB7IHJlOiAxLCBpbTogMCB9LFxuICAgKiAgICAvLyAgIHsgcmU6IC0wLjQ5OTk5OTk5OTk5OTk5OTgsIGltOiAwLjg2NjAyNTQwMzc4NDQzODcgfSxcbiAgICogICAgLy8gICB7IHJlOiAtMC41MDAwMDAwMDAwMDAwMDA0LCBpbTogLTAuODY2MDI1NDAzNzg0NDM4NSB9XG4gICAqICAgIF1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIG50aFJvb3QsIHBvdywgc3FydFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4IE51bWJlciB0byBiZSByb3VuZGVkXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSAgICAgICAgICAgIFJvdW5kZWQgdmFsdWVcbiAgICovXG4gIHZhciBudGhSb290cyA9IHR5cGVkKG5hbWUsIHtcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiBfbnRoQ29tcGxleFJvb3RzKHgsIDIpO1xuICAgIH0sXG4gICAgJ0NvbXBsZXgsIG51bWJlcic6IF9udGhDb21wbGV4Um9vdHNcbiAgfSk7XG4gIC8qKlxuICAgKiBFYWNoIGZ1bmN0aW9uIGhlcmUgcmV0dXJucyBhIHJlYWwgbXVsdGlwbGUgb2YgaSBhcyBhIENvbXBsZXggdmFsdWUuXG4gICAqIEBwYXJhbSAge251bWJlcn0gdmFsXG4gICAqIEByZXR1cm4ge0NvbXBsZXh9IHZhbCwgaSp2YWwsIC12YWwgb3IgLWkqdmFsIGZvciBpbmRleCAwLCAxLCAyLCAzXG4gICAqL1xuICAvLyBUaGlzIGlzIHVzZWQgdG8gZml4IGZsb2F0IGFydGlmYWN0cyBmb3IgemVyby12YWx1ZWQgY29tcG9uZW50cy5cblxuICB2YXIgX2NhbGN1bGF0ZUV4YWN0UmVzdWx0ID0gW2Z1bmN0aW9uIHJlYWxQb3ModmFsKSB7XG4gICAgcmV0dXJuIG5ldyBDb21wbGV4KHZhbCwgMCk7XG4gIH0sIGZ1bmN0aW9uIGltYWdQb3ModmFsKSB7XG4gICAgcmV0dXJuIG5ldyBDb21wbGV4KDAsIHZhbCk7XG4gIH0sIGZ1bmN0aW9uIHJlYWxOZWcodmFsKSB7XG4gICAgcmV0dXJuIG5ldyBDb21wbGV4KC12YWwsIDApO1xuICB9LCBmdW5jdGlvbiBpbWFnTmVnKHZhbCkge1xuICAgIHJldHVybiBuZXcgQ29tcGxleCgwLCAtdmFsKTtcbiAgfV07XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIG50aCByb290IG9mIGEgQ29tcGxleCBOdW1iZXIgYSB1c2luZyBEZSBNb3ZpcmUncyBUaGVvcmVtLlxuICAgKiBAcGFyYW0gIHtDb21wbGV4fSBhXG4gICAqIEBwYXJhbSAge251bWJlcn0gcm9vdFxuICAgKiBAcmV0dXJuIHtBcnJheX0gYXJyYXkgb2YgbiBDb21wbGV4IFJvb3RzXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9udGhDb21wbGV4Um9vdHMoYSwgcm9vdCkge1xuICAgIGlmIChyb290IDwgMCkgdGhyb3cgbmV3IEVycm9yKCdSb290IG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm8nKTtcbiAgICBpZiAocm9vdCA9PT0gMCkgdGhyb3cgbmV3IEVycm9yKCdSb290IG11c3QgYmUgbm9uLXplcm8nKTtcbiAgICBpZiAocm9vdCAlIDEgIT09IDApIHRocm93IG5ldyBFcnJvcignUm9vdCBtdXN0IGJlIGFuIGludGVnZXInKTtcbiAgICBpZiAoYSA9PT0gMCB8fCBhLmFicygpID09PSAwKSByZXR1cm4gW25ldyBDb21wbGV4KDAsIDApXTtcbiAgICB2YXIgYUlzTnVtZXJpYyA9IHR5cGVvZiBhID09PSAnbnVtYmVyJztcbiAgICB2YXIgb2Zmc2V0OyAvLyBkZXRlcm1pbmUgdGhlIG9mZnNldCAoYXJndW1lbnQgb2YgYSkvKHBpLzIpXG5cbiAgICBpZiAoYUlzTnVtZXJpYyB8fCBhLnJlID09PSAwIHx8IGEuaW0gPT09IDApIHtcbiAgICAgIGlmIChhSXNOdW1lcmljKSB7XG4gICAgICAgIG9mZnNldCA9IDIgKiArKGEgPCAwKTsgLy8gbnVtZXJpYyB2YWx1ZSBvbiB0aGUgcmVhbCBheGlzXG4gICAgICB9IGVsc2UgaWYgKGEuaW0gPT09IDApIHtcbiAgICAgICAgb2Zmc2V0ID0gMiAqICsoYS5yZSA8IDApOyAvLyBjb21wbGV4IHZhbHVlIG9uIHRoZSByZWFsIGF4aXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9mZnNldCA9IDIgKiArKGEuaW0gPCAwKSArIDE7IC8vIGNvbXBsZXggdmFsdWUgb24gdGhlIGltYWdpbmFyeSBheGlzXG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGFyZyA9IGEuYXJnKCk7XG4gICAgdmFyIGFicyA9IGEuYWJzKCk7XG4gICAgdmFyIHJvb3RzID0gW107XG4gICAgdmFyIHIgPSBNYXRoLnBvdyhhYnMsIDEgLyByb290KTtcblxuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcm9vdDsgaysrKSB7XG4gICAgICB2YXIgaGFsZlBpRmFjdG9yID0gKG9mZnNldCArIDQgKiBrKSAvIHJvb3Q7XG4gICAgICAvKipcbiAgICAgICAqIElmIChvZmZzZXQgKyA0KmspL3Jvb3QgaXMgYW4gaW50ZWdyYWwgbXVsdGlwbGUgb2YgcGkvMlxuICAgICAgICogdGhlbiB3ZSBjYW4gcHJvZHVjZSBhIG1vcmUgZXhhY3QgcmVzdWx0LlxuICAgICAgICovXG5cbiAgICAgIGlmIChoYWxmUGlGYWN0b3IgPT09IE1hdGgucm91bmQoaGFsZlBpRmFjdG9yKSkge1xuICAgICAgICByb290cy5wdXNoKF9jYWxjdWxhdGVFeGFjdFJlc3VsdFtoYWxmUGlGYWN0b3IgJSA0XShyKSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICByb290cy5wdXNoKG5ldyBDb21wbGV4KHtcbiAgICAgICAgcjogcixcbiAgICAgICAgcGhpOiAoYXJnICsgMiAqIE1hdGguUEkgKiBrKSAvIHJvb3RcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm9vdHM7XG4gIH1cblxuICByZXR1cm4gbnRoUm9vdHM7XG59KTtcbmV4cG9ydHMuY3JlYXRlTnRoUm9vdHMgPSBjcmVhdGVOdGhSb290czsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUG93ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX251bWJlcjIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdwb3cnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ2lkZW50aXR5JywgJ211bHRpcGx5JywgJ21hdHJpeCcsICdmcmFjdGlvbicsICdudW1iZXInLCAnQ29tcGxleCddO1xudmFyIGNyZWF0ZVBvdyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIGlkZW50aXR5ID0gX3JlZi5pZGVudGl0eSxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgbnVtYmVyID0gX3JlZi5udW1iZXIsXG4gICAgICBmcmFjdGlvbiA9IF9yZWYuZnJhY3Rpb24sXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4O1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBwb3dlciBvZiB4IHRvIHksIGB4IF4geWAuXG4gICAqIE1hdHJpeCBleHBvbmVudGlhdGlvbiBpcyBzdXBwb3J0ZWQgZm9yIHNxdWFyZSBtYXRyaWNlcyBgeGAsIGFuZCBwb3NpdGl2ZVxuICAgKiBpbnRlZ2VyIGV4cG9uZW50cyBgeWAuXG4gICAqXG4gICAqIEZvciBjdWJpYyByb290cyBvZiBuZWdhdGl2ZSBudW1iZXJzLCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgcHJpbmNpcGFsXG4gICAqIHJvb3QgYnkgZGVmYXVsdC4gSW4gb3JkZXIgdG8gbGV0IHRoZSBmdW5jdGlvbiByZXR1cm4gdGhlIHJlYWwgcm9vdCxcbiAgICogbWF0aC5qcyBjYW4gYmUgY29uZmlndXJlZCB3aXRoIGBtYXRoLmNvbmZpZyh7cHJlZGljdGFibGU6IHRydWV9KWAuXG4gICAqIFRvIHJldHJpZXZlIGFsbCBjdWJpYyByb290cyBvZiBhIHZhbHVlLCB1c2UgYG1hdGguY2JydCh4LCB0cnVlKWAuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5wb3coeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgucG93KDIsIDMpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgOFxuICAgKlxuICAgKiAgICBjb25zdCBhID0gbWF0aC5jb21wbGV4KDIsIDMpXG4gICAqICAgIG1hdGgucG93KGEsIDIpICAgICAgICAgICAgICAgIC8vIHJldHVybnMgQ29tcGxleCAtNSArIDEyaVxuICAgKlxuICAgKiAgICBjb25zdCBiID0gW1sxLCAyXSwgWzQsIDNdXVxuICAgKiAgICBtYXRoLnBvdyhiLCAyKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgQXJyYXkgW1s5LCA4XSwgWzE2LCAxN11dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBtdWx0aXBseSwgc3FydCwgY2JydCwgbnRoUm9vdFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBUaGUgYmFzZVxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4fSB5ICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgZXhwb25lbnRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBUaGUgdmFsdWUgb2YgYHhgIHRvIHRoZSBwb3dlciBgeWBcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX3BvdyxcbiAgICAnQ29tcGxleCwgQ29tcGxleCc6IGZ1bmN0aW9uIENvbXBsZXhDb21wbGV4KHgsIHkpIHtcbiAgICAgIHJldHVybiB4LnBvdyh5KTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICBpZiAoeS5pc0ludGVnZXIoKSB8fCB4ID49IDAgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiB4LnBvdyh5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LnRvTnVtYmVyKCksIDApLnBvdyh5LnRvTnVtYmVyKCksIDApO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkge1xuICAgICAgaWYgKHkuZCAhPT0gMSkge1xuICAgICAgICBpZiAoY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGdW5jdGlvbiBwb3cgZG9lcyBub3Qgc3VwcG9ydCBub24taW50ZWdlciBleHBvbmVudHMgZm9yIGZyYWN0aW9ucy4nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gX3Bvdyh4LnZhbHVlT2YoKSwgeS52YWx1ZU9mKCkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4geC5wb3coeSk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlcic6IF9wb3dBcnJheSxcbiAgICAnQXJyYXksIEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5QmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiBfcG93QXJyYXkoeCwgeS50b051bWJlcigpKTtcbiAgICB9LFxuICAgICdNYXRyaXgsIG51bWJlcic6IF9wb3dNYXRyaXgsXG4gICAgJ01hdHJpeCwgQmlnTnVtYmVyJzogZnVuY3Rpb24gTWF0cml4QmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiBfcG93TWF0cml4KHgsIHkudG9OdW1iZXIoKSk7XG4gICAgfSxcbiAgICAnVW5pdCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gVW5pdE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC5wb3coeSk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZXMgdGhlIHBvd2VyIG9mIHggdG8geSwgeF55LCBmb3IgdHdvIG51bWJlcnMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5XG4gICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXh9IHJlc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfcG93KHgsIHkpIHtcbiAgICAvLyBBbHRlcm5hdGl2ZWx5IGNvdWxkIGRlZmluZSBhICdyZWFsbW9kZScgY29uZmlnIG9wdGlvbiBvciBzb21ldGhpbmcsIGJ1dFxuICAgIC8vICdwcmVkaWN0YWJsZScgd2lsbCB3b3JrIGZvciBub3dcbiAgICBpZiAoY29uZmlnLnByZWRpY3RhYmxlICYmICEoMCwgX251bWJlci5pc0ludGVnZXIpKHkpICYmIHggPCAwKSB7XG4gICAgICAvLyBDaGVjayB0byBzZWUgaWYgeSBjYW4gYmUgcmVwcmVzZW50ZWQgYXMgYSBmcmFjdGlvblxuICAgICAgdHJ5IHtcbiAgICAgICAgdmFyIHlGcmFjID0gZnJhY3Rpb24oeSk7XG4gICAgICAgIHZhciB5TnVtID0gbnVtYmVyKHlGcmFjKTtcblxuICAgICAgICBpZiAoeSA9PT0geU51bSB8fCBNYXRoLmFicygoeSAtIHlOdW0pIC8geSkgPCAxZS0xNCkge1xuICAgICAgICAgIGlmICh5RnJhYy5kICUgMiA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuICh5RnJhYy5uICUgMiA9PT0gMCA/IDEgOiAtMSkgKiBNYXRoLnBvdygteCwgeSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChleCkge30gLy8gZnJhY3Rpb24oKSB0aHJvd3MgYW4gZXJyb3IgaWYgeSBpcyBJbmZpbml0eSwgZXRjLlxuICAgICAgLy8gVW5hYmxlIHRvIGV4cHJlc3MgeSBhcyBhIGZyYWN0aW9uLCBzbyBjb250aW51ZSBvblxuXG4gICAgfSAvLyAqKmZvciBwcmVkaWN0YWJsZSBtb2RlKiogeF5JbmZpbml0eSA9PT0gTmFOIGlmIHggPCAtMVxuICAgIC8vIE4uQi4gdGhpcyBiZWhhdm91ciBpcyBkaWZmZXJlbnQgZnJvbSBgTWF0aC5wb3dgIHdoaWNoIGdpdmVzXG4gICAgLy8gKC0yKV5JbmZpbml0eSA9PT0gSW5maW5pdHlcblxuXG4gICAgaWYgKGNvbmZpZy5wcmVkaWN0YWJsZSAmJiAoeCA8IC0xICYmIHkgPT09IEluZmluaXR5IHx8IHggPiAtMSAmJiB4IDwgMCAmJiB5ID09PSAtSW5maW5pdHkpKSB7XG4gICAgICByZXR1cm4gTmFOO1xuICAgIH1cblxuICAgIGlmICgoMCwgX251bWJlci5pc0ludGVnZXIpKHkpIHx8IHggPj0gMCB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgIHJldHVybiAoMCwgX251bWJlcjIucG93TnVtYmVyKSh4LCB5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVE9ETzogdGhlIGZvbGxvd2luZyBpbmZpbml0eSBjaGVja3MgYXJlIGR1cGxpY2F0ZWQgZnJvbSBwb3dOdW1iZXIuIERlZHVwbGljYXRlIHRoaXMgc29tZWhvd1xuICAgICAgLy8geF5JbmZpbml0eSA9PT0gMCBpZiAtMSA8IHggPCAxXG4gICAgICAvLyBBIHJlYWwgbnVtYmVyIDAgaXMgcmV0dXJuZWQgaW5zdGVhZCBvZiBjb21wbGV4KDApXG4gICAgICBpZiAoeCAqIHggPCAxICYmIHkgPT09IEluZmluaXR5IHx8IHggKiB4ID4gMSAmJiB5ID09PSAtSW5maW5pdHkpIHtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5wb3coeSwgMCk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHBvd2VyIG9mIGEgMmQgYXJyYXlcbiAgICogQHBhcmFtIHtBcnJheX0geCAgICAgbXVzdCBiZSBhIDIgZGltZW5zaW9uYWwsIHNxdWFyZSBtYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgICAgYSBwb3NpdGl2ZSwgaW50ZWdlciB2YWx1ZVxuICAgKiBAcmV0dXJucyB7QXJyYXl9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3Bvd0FycmF5KHgsIHkpIHtcbiAgICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeSkgfHwgeSA8IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZvciBBXmIsIGIgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgKHZhbHVlIGlzICcgKyB5ICsgJyknKTtcbiAgICB9IC8vIHZlcmlmeSB0aGF0IEEgaXMgYSAyIGRpbWVuc2lvbmFsIHNxdWFyZSBtYXRyaXhcblxuXG4gICAgdmFyIHMgPSAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCk7XG5cbiAgICBpZiAocy5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRm9yIEFeYiwgQSBtdXN0IGJlIDIgZGltZW5zaW9uYWwgKEEgaGFzICcgKyBzLmxlbmd0aCArICcgZGltZW5zaW9ucyknKTtcbiAgICB9XG5cbiAgICBpZiAoc1swXSAhPT0gc1sxXSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdGb3IgQV5iLCBBIG11c3QgYmUgc3F1YXJlIChzaXplIGlzICcgKyBzWzBdICsgJ3gnICsgc1sxXSArICcpJyk7XG4gICAgfVxuXG4gICAgdmFyIHJlcyA9IGlkZW50aXR5KHNbMF0pLnZhbHVlT2YoKTtcbiAgICB2YXIgcHggPSB4O1xuXG4gICAgd2hpbGUgKHkgPj0gMSkge1xuICAgICAgaWYgKCh5ICYgMSkgPT09IDEpIHtcbiAgICAgICAgcmVzID0gbXVsdGlwbHkocHgsIHJlcyk7XG4gICAgICB9XG5cbiAgICAgIHkgPj49IDE7XG4gICAgICBweCA9IG11bHRpcGx5KHB4LCBweCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcztcbiAgfVxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBwb3dlciBvZiBhIDJkIG1hdHJpeFxuICAgKiBAcGFyYW0ge01hdHJpeH0geCAgICAgbXVzdCBiZSBhIDIgZGltZW5zaW9uYWwsIHNxdWFyZSBtYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHkgICAgYSBwb3NpdGl2ZSwgaW50ZWdlciB2YWx1ZVxuICAgKiBAcmV0dXJucyB7TWF0cml4fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9wb3dNYXRyaXgoeCwgeSkge1xuICAgIHJldHVybiBtYXRyaXgoX3Bvd0FycmF5KHgudmFsdWVPZigpLCB5KSk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVQb3cgPSBjcmVhdGVQb3c7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJvdW5kTnVtYmVyID0gZXhwb3J0cy5jcmVhdGVSb3VuZCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTJcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9udW1iZXIyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXSAhPSBudWxsID8gYXJndW1lbnRzW2ldIDoge307IGlmIChpICUgMikgeyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCB0cnVlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pOyB9IGVsc2UgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSk7IH0gZWxzZSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbnZhciBOT19JTlQgPSAnTnVtYmVyIG9mIGRlY2ltYWxzIGluIGZ1bmN0aW9uIHJvdW5kIG11c3QgYmUgYW4gaW50ZWdlcic7XG52YXIgbmFtZSA9ICdyb3VuZCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnemVyb3MnLCAnQmlnTnVtYmVyJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlUm91bmQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICB6ZXJvcyA9IF9yZWYuemVyb3MsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTExID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMTEpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTIgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMTIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBSb3VuZCBhIHZhbHVlIHRvd2FyZHMgdGhlIG5lYXJlc3QgaW50ZWdlci5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnJvdW5kKHgpXG4gICAqICAgIG1hdGgucm91bmQoeCwgbilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgucm91bmQoMy4yKSAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgM1xuICAgKiAgICBtYXRoLnJvdW5kKDMuOCkgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDRcbiAgICogICAgbWF0aC5yb3VuZCgtNC4yKSAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAtNFxuICAgKiAgICBtYXRoLnJvdW5kKC00LjcpICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC01XG4gICAqICAgIG1hdGgucm91bmQobWF0aC5waSwgMykgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMy4xNDJcbiAgICogICAgbWF0aC5yb3VuZCgxMjMuNDU2NzgsIDIpICAgICAvLyByZXR1cm5zIG51bWJlciAxMjMuNDZcbiAgICpcbiAgICogICAgY29uc3QgYyA9IG1hdGguY29tcGxleCgzLjIsIC0yLjcpXG4gICAqICAgIG1hdGgucm91bmQoYykgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDMgLSAzaVxuICAgKlxuICAgKiAgICBtYXRoLnJvdW5kKFszLjIsIDMuOCwgLTQuN10pIC8vIHJldHVybnMgQXJyYXkgWzMsIDQsIC01XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY2VpbCwgZml4LCBmbG9vclxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgTnVtYmVyIHRvIGJlIHJvdW5kZWRcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXl9IFtuPTBdICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBkZWNpbWFsc1xuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gUm91bmRlZCB2YWx1ZVxuICAgKi9cblxuICB2YXIgcm91bmQgPSB0eXBlZChuYW1lLCBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHJvdW5kTnVtYmVyU2lnbmF0dXJlcyksIHt9LCB7XG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5yb3VuZCgpO1xuICAgIH0sXG4gICAgJ0NvbXBsZXgsIG51bWJlcic6IGZ1bmN0aW9uIENvbXBsZXhOdW1iZXIoeCwgbikge1xuICAgICAgaWYgKG4gJSAxKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoTk9fSU5UKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHgucm91bmQobik7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQ29tcGxleEJpZ051bWJlcih4LCBuKSB7XG4gICAgICBpZiAoIW4uaXNJbnRlZ2VyKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihOT19JTlQpO1xuICAgICAgfVxuXG4gICAgICB2YXIgX24gPSBuLnRvTnVtYmVyKCk7XG5cbiAgICAgIHJldHVybiB4LnJvdW5kKF9uKTtcbiAgICB9LFxuICAgICdudW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlcih4LCBuKSB7XG4gICAgICBpZiAoIW4uaXNJbnRlZ2VyKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihOT19JTlQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IEJpZ051bWJlcih4KS50b0RlY2ltYWxQbGFjZXMobi50b051bWJlcigpKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LnRvRGVjaW1hbFBsYWNlcygwKTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCBuKSB7XG4gICAgICBpZiAoIW4uaXNJbnRlZ2VyKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihOT19JTlQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geC50b0RlY2ltYWxQbGFjZXMobi50b051bWJlcigpKTtcbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4geC5yb3VuZCgpO1xuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBudW1iZXInOiBmdW5jdGlvbiBGcmFjdGlvbk51bWJlcih4LCBuKSB7XG4gICAgICBpZiAobiAlIDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihOT19JTlQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geC5yb3VuZChuKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2Ugcm91bmQoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHJvdW5kLCB0cnVlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgcm91bmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gRGVuc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIHJvdW5kLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQ29tcGxleCB8IEJpZ051bWJlciwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gbnVtYmVyQ29tcGxleEJpZ051bWJlclNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXIgaXMgemVyb1xuICAgICAgaWYgKGVxdWFsU2NhbGFyKHgsIDApKSB7XG4gICAgICAgIC8vIGRvIG5vdCBleGVjdXRlIGFsZ29yaXRobSwgcmVzdWx0IHdpbGwgYmUgYSB6ZXJvIG1hdHJpeFxuICAgICAgICByZXR1cm4gemVyb3MoeS5zaXplKCksIHkuc3RvcmFnZSgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHksIHgsIHJvdW5kLCB0cnVlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBDb21wbGV4IHwgQmlnTnVtYmVyLCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckNvbXBsZXhCaWdOdW1iZXJEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXIgaXMgemVyb1xuICAgICAgaWYgKGVxdWFsU2NhbGFyKHgsIDApKSB7XG4gICAgICAgIC8vIGRvIG5vdCBleGVjdXRlIGFsZ29yaXRobSwgcmVzdWx0IHdpbGwgYmUgYSB6ZXJvIG1hdHJpeFxuICAgICAgICByZXR1cm4gemVyb3MoeS5zaXplKCksIHkuc3RvcmFnZSgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIHJvdW5kLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgcm91bmQsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQ29tcGxleCB8IEJpZ051bWJlciwgQXJyYXknOiBmdW5jdGlvbiBudW1iZXJDb21wbGV4QmlnTnVtYmVyQXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgcm91bmQsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pKTtcbiAgcmV0dXJuIHJvdW5kO1xufSk7XG5leHBvcnRzLmNyZWF0ZVJvdW5kID0gY3JlYXRlUm91bmQ7XG52YXIgcm91bmROdW1iZXJTaWduYXR1cmVzID0ge1xuICBudW1iZXI6IF9udW1iZXIyLnJvdW5kTnVtYmVyLFxuICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgbikge1xuICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShuKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihOT19JTlQpO1xuICAgIH1cblxuICAgIGlmIChuIDwgMCB8fCBuID4gMTUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTnVtYmVyIG9mIGRlY2ltYWxzIGluIGZ1bmN0aW9uIHJvdW5kIG11c3QgYmUgaW4gdGUgcmFuZ2Ugb2YgMC0xNScpO1xuICAgIH1cblxuICAgIHJldHVybiAoMCwgX251bWJlcjIucm91bmROdW1iZXIpKHgsIG4pO1xuICB9XG59O1xudmFyIGNyZWF0ZVJvdW5kTnVtYmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIFsndHlwZWQnXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkO1xuICByZXR1cm4gdHlwZWQobmFtZSwgcm91bmROdW1iZXJTaWduYXR1cmVzKTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVSb3VuZE51bWJlciA9IGNyZWF0ZVJvdW5kTnVtYmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTaWduID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnc2lnbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdCaWdOdW1iZXInLCAnRnJhY3Rpb24nLCAnY29tcGxleCddO1xudmFyIGNyZWF0ZVNpZ24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyLFxuICAgICAgY29tcGxleCA9IF9yZWYuY29tcGxleCxcbiAgICAgIF9GcmFjdGlvbiA9IF9yZWYuRnJhY3Rpb247XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIHNpZ24gb2YgYSB2YWx1ZS4gVGhlIHNpZ24gb2YgYSB2YWx1ZSB4IGlzOlxuICAgKlxuICAgKiAtICAxIHdoZW4geCA+IDBcbiAgICogLSAtMSB3aGVuIHggPCAwXG4gICAqIC0gIDAgd2hlbiB4ID09IDBcbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNpZ24oeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc2lnbigzLjUpICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxXG4gICAqICAgIG1hdGguc2lnbigtNC4yKSAgICAgICAgICAgICAgLy8gcmV0dXJucyAtMVxuICAgKiAgICBtYXRoLnNpZ24oMCkgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMFxuICAgKlxuICAgKiAgICBtYXRoLnNpZ24oWzMsIDUsIC0yLCAwLCAyXSkgIC8vIHJldHVybnMgWzEsIDEsIC0xLCAwLCAxXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYWJzXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4IHwgVW5pdH0geFxuICAgKiAgICAgICAgICAgIFRoZSBudW1iZXIgZm9yIHdoaWNoIHRvIGRldGVybWluZSB0aGUgc2lnblxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeCB8IFVuaXR9ZVxuICAgKiAgICAgICAgICAgIFRoZSBzaWduIG9mIGB4YFxuICAgKi9cbiAgdmFyIHNpZ24gPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLnNpZ25OdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5pbSA9PT0gMCA/IGNvbXBsZXgoKDAsIF9udW1iZXIuc2lnbk51bWJlcikoeC5yZSkpIDogeC5zaWduKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoeC5jbXAoMCkpO1xuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0ZyYWN0aW9uKHgucywgMSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIHNpZ24oMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHNpZ24sIHRydWUpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4gc2lnbih4LnZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc2lnbjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTaWduID0gY3JlYXRlU2lnbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3FydCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgbmFtZSA9ICdzcXJ0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ2NvbmZpZycsICd0eXBlZCcsICdDb21wbGV4J107XG52YXIgY3JlYXRlU3FydCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIENvbXBsZXggPSBfcmVmLkNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgc3F1YXJlIHJvb3Qgb2YgYSB2YWx1ZS5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNxcnQoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc3FydCgyNSkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyA1XG4gICAqICAgIG1hdGguc3F1YXJlKDUpICAgICAgICAgICAgICAgLy8gcmV0dXJucyAyNVxuICAgKiAgICBtYXRoLnNxcnQoLTQpICAgICAgICAgICAgICAgIC8vIHJldHVybnMgQ29tcGxleCAyaVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc3F1YXJlLCBtdWx0aXBseSwgY3ViZSwgY2JydCwgc3FydG1cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXggfCBVbml0fSB4XG4gICAqICAgICAgICAgICAgVmFsdWUgZm9yIHdoaWNoIHRvIGNhbGN1bGF0ZSB0aGUgc3F1YXJlIHJvb3QuXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeCB8IFVuaXR9XG4gICAqICAgICAgICAgICAgUmV0dXJucyB0aGUgc3F1YXJlIHJvb3Qgb2YgYHhgXG4gICAqL1xuICB2YXIgc3FydCA9IHR5cGVkKCdzcXJ0Jywge1xuICAgIG51bWJlcjogX3NxcnROdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5zcXJ0KCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICBpZiAoIXguaXNOZWdhdGl2ZSgpIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICByZXR1cm4geC5zcXJ0KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBuZWdhdGl2ZSB2YWx1ZSAtPiBkb3duZ3JhZGUgdG8gbnVtYmVyIHRvIGRvIGNvbXBsZXggdmFsdWUgY29tcHV0YXRpb25cbiAgICAgICAgcmV0dXJuIF9zcXJ0TnVtYmVyKHgudG9OdW1iZXIoKSk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIHNxcnQoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHNxcnQsIHRydWUpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICAvLyBTb21lZGF5IHdpbGwgd29yayBmb3IgY29tcGxleCB1bml0cyB3aGVuIHRoZXkgYXJlIGltcGxlbWVudGVkXG4gICAgICByZXR1cm4geC5wb3coMC41KTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHNxcnQgZm9yIGEgbnVtYmVyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gICAqIEByZXR1cm5zIHtudW1iZXIgfCBDb21wbGV4fSBSZXR1cm5zIHRoZSBzcXVhcmUgcm9vdCBvZiB4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9zcXJ0TnVtYmVyKHgpIHtcbiAgICBpZiAoaXNOYU4oeCkpIHtcbiAgICAgIHJldHVybiBOYU47XG4gICAgfSBlbHNlIGlmICh4ID49IDAgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICByZXR1cm4gTWF0aC5zcXJ0KHgpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoeCwgMCkuc3FydCgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzcXJ0O1xufSk7XG5leHBvcnRzLmNyZWF0ZVNxcnQgPSBjcmVhdGVTcXJ0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcXVhcmUgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdzcXVhcmUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVTcXVhcmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBzcXVhcmUgb2YgYSB2YWx1ZSwgYHggKiB4YC5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNxdWFyZSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zcXVhcmUoMikgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDRcbiAgICogICAgbWF0aC5zcXVhcmUoMykgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDlcbiAgICogICAgbWF0aC5wb3coMywgMikgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDlcbiAgICogICAgbWF0aC5tdWx0aXBseSgzLCAzKSAgICAgIC8vIHJldHVybnMgbnVtYmVyIDlcbiAgICpcbiAgICogICAgbWF0aC5zcXVhcmUoWzEsIDIsIDMsIDRdKSAgLy8gcmV0dXJucyBBcnJheSBbMSwgNCwgOSwgMTZdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBtdWx0aXBseSwgY3ViZSwgc3FydCwgcG93XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4IHwgVW5pdH0geFxuICAgKiAgICAgICAgICAgIE51bWJlciBmb3Igd2hpY2ggdG8gY2FsY3VsYXRlIHRoZSBzcXVhcmVcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXggfCBVbml0fVxuICAgKiAgICAgICAgICAgIFNxdWFyZWQgdmFsdWVcbiAgICovXG4gIHZhciBzcXVhcmUgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLnNxdWFyZU51bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4Lm11bCh4KTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LnRpbWVzKHgpO1xuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4Lm11bCh4KTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2Ugc3F1YXJlKDApID0gMFxuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBzcXVhcmUsIHRydWUpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICByZXR1cm4geC5wb3coMik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHNxdWFyZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcXVhcmUgPSBjcmVhdGVTcXVhcmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVN1YnRyYWN0ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9EaW1lbnNpb25FcnJvciA9IHJlcXVpcmUoXCIuLi8uLi9lcnJvci9EaW1lbnNpb25FcnJvclwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDFcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA1XCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTBcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG02ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgbmFtZSA9ICdzdWJ0cmFjdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnYWRkU2NhbGFyJywgJ3VuYXJ5TWludXMnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVTdWJ0cmFjdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgdW5hcnlNaW51cyA9IF9yZWYudW5hcnlNaW51cyxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgLy8gVE9ETzogc3BsaXQgZnVuY3Rpb24gc3VidHJhY3QgaW4gdHdvOiBzdWJ0cmFjdCBhbmQgc3VidHJhY3RTY2FsYXJcbiAgdmFyIGFsZ29yaXRobTAxID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDEpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wMyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA1ID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTA1KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIGVxdWFsU2NhbGFyOiBlcXVhbFNjYWxhclxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEwID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTEwKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTYuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBTdWJ0cmFjdCB0d28gdmFsdWVzLCBgeCAtIHlgLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc3VidHJhY3QoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc3VidHJhY3QoNS4zLCAyKSAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMy4zXG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLmNvbXBsZXgoMiwgMylcbiAgICogICAgY29uc3QgYiA9IG1hdGguY29tcGxleCg0LCAxKVxuICAgKiAgICBtYXRoLnN1YnRyYWN0KGEsIGIpICAgICAgICAgIC8vIHJldHVybnMgQ29tcGxleCAtMiArIDJpXG4gICAqXG4gICAqICAgIG1hdGguc3VidHJhY3QoWzUsIDcsIDRdLCA0KSAgLy8gcmV0dXJucyBBcnJheSBbMSwgMywgMF1cbiAgICpcbiAgICogICAgY29uc3QgYyA9IG1hdGgudW5pdCgnMi4xIGttJylcbiAgICogICAgY29uc3QgZCA9IG1hdGgudW5pdCgnNTAwbScpXG4gICAqICAgIG1hdGguc3VidHJhY3QoYywgZCkgICAgICAgICAgLy8gcmV0dXJucyBVbml0IDEuNiBrbVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYWRkXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geFxuICAgKiAgICAgICAgICAgIEluaXRpYWwgdmFsdWVcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB5XG4gICAqICAgICAgICAgICAgVmFsdWUgdG8gc3VidHJhY3QgZnJvbSBgeGBcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFN1YnRyYWN0aW9uIG9mIGB4YCBhbmQgYHlgXG4gICAqL1xuXG4gIHZhciBzdWJ0cmFjdCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHggLSB5O1xuICAgIH0sXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7XG4gICAgICByZXR1cm4geC5zdWIoeSk7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHgubWludXMoeSk7XG4gICAgfSxcbiAgICAnRnJhY3Rpb24sIEZyYWN0aW9uJzogZnVuY3Rpb24gRnJhY3Rpb25GcmFjdGlvbih4LCB5KSB7XG4gICAgICByZXR1cm4geC5zdWIoeSk7XG4gICAgfSxcbiAgICAnVW5pdCwgVW5pdCc6IGZ1bmN0aW9uIFVuaXRVbml0KHgsIHkpIHtcbiAgICAgIGlmICh4LnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVyIHggY29udGFpbnMgYSB1bml0IHdpdGggdW5kZWZpbmVkIHZhbHVlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICh5LnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVyIHkgY29udGFpbnMgYSB1bml0IHdpdGggdW5kZWZpbmVkIHZhbHVlJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICgheC5lcXVhbEJhc2UoeSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbml0cyBkbyBub3QgbWF0Y2gnKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlcyA9IHguY2xvbmUoKTtcbiAgICAgIHJlcy52YWx1ZSA9IHN1YnRyYWN0KHJlcy52YWx1ZSwgeS52YWx1ZSk7XG4gICAgICByZXMuZml4UHJlZml4ID0gZmFsc2U7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIGNoZWNrRXF1YWxEaW1lbnNpb25zKHgsIHkpO1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA1KHgsIHksIHN1YnRyYWN0KTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgY2hlY2tFcXVhbERpbWVuc2lvbnMoeCwgeSk7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgc3VidHJhY3QsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICBjaGVja0VxdWFsRGltZW5zaW9ucyh4LCB5KTtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMSh4LCB5LCBzdWJ0cmFjdCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgY2hlY2tFcXVhbERpbWVuc2lvbnMoeCwgeSk7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgc3VidHJhY3QpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHN1YnRyYWN0KG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBzdWJ0cmFjdChtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gc3VidHJhY3QoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTAoeCwgdW5hcnlNaW51cyh5KSwgYWRkU2NhbGFyKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIHN1YnRyYWN0KTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTAoeSwgeCwgc3VidHJhY3QsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgc3VidHJhY3QsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBzdWJ0cmFjdCwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgc3VidHJhY3QsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc3VidHJhY3Q7XG59KTtcbi8qKlxuICogQ2hlY2sgd2hldGhlciBtYXRyaXggeCBhbmQgeSBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBkaW1lbnNpb25zLlxuICogVGhyb3dzIGEgRGltZW5zaW9uRXJyb3Igd2hlbiBkaW1lbnNpb25zIGFyZSBub3QgZXF1YWxcbiAqIEBwYXJhbSB7TWF0cml4fSB4XG4gKiBAcGFyYW0ge01hdHJpeH0geVxuICovXG5cbmV4cG9ydHMuY3JlYXRlU3VidHJhY3QgPSBjcmVhdGVTdWJ0cmFjdDtcblxuZnVuY3Rpb24gY2hlY2tFcXVhbERpbWVuc2lvbnMoeCwgeSkge1xuICB2YXIgeHNpemUgPSB4LnNpemUoKTtcbiAgdmFyIHlzaXplID0geS5zaXplKCk7XG5cbiAgaWYgKHhzaXplLmxlbmd0aCAhPT0geXNpemUubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcih4c2l6ZS5sZW5ndGgsIHlzaXplLmxlbmd0aCk7XG4gIH1cbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVW5hcnlNaW51cyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3VuYXJ5TWludXMnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVVbmFyeU1pbnVzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogSW52ZXJzZSB0aGUgc2lnbiBvZiBhIHZhbHVlLCBhcHBseSBhIHVuYXJ5IG1pbnVzIG9wZXJhdGlvbi5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS4gQm9vbGVhbiB2YWx1ZXMgYW5kXG4gICAqIHN0cmluZ3Mgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBudW1iZXIuIEZvciBjb21wbGV4IG51bWJlcnMsIGJvdGggcmVhbCBhbmRcbiAgICogY29tcGxleCB2YWx1ZSBhcmUgaW52ZXJ0ZWQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC51bmFyeU1pbnVzKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnVuYXJ5TWludXMoMy41KSAgICAgIC8vIHJldHVybnMgLTMuNVxuICAgKiAgICBtYXRoLnVuYXJ5TWludXMoLTQuMikgICAgIC8vIHJldHVybnMgNC4yXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhZGQsIHN1YnRyYWN0LCB1bmFyeVBsdXNcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4IE51bWJlciB0byBiZSBpbnZlcnRlZC5cbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSBSZXR1cm5zIHRoZSB2YWx1ZSB3aXRoIGludmVydGVkIHNpZ24uXG4gICAqL1xuICB2YXIgdW5hcnlNaW51cyA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIudW5hcnlNaW51c051bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4Lm5lZygpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHgubmVnKCk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHgubmVnKCk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIHZhciByZXMgPSB4LmNsb25lKCk7XG4gICAgICByZXMudmFsdWUgPSB1bmFyeU1pbnVzKHgudmFsdWUpO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2UgdW5hcnlNaW51cygwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgdW5hcnlNaW51cywgdHJ1ZSk7XG4gICAgfSAvLyBUT0RPOiBhZGQgc3VwcG9ydCBmb3Igc3RyaW5nXG5cbiAgfSk7XG4gIHJldHVybiB1bmFyeU1pbnVzO1xufSk7XG5leHBvcnRzLmNyZWF0ZVVuYXJ5TWludXMgPSBjcmVhdGVVbmFyeU1pbnVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbmFyeVBsdXMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICd1bmFyeVBsdXMnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ0JpZ051bWJlciddO1xudmFyIGNyZWF0ZVVuYXJ5UGx1cyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBVbmFyeSBwbHVzIG9wZXJhdGlvbi5cbiAgICogQm9vbGVhbiB2YWx1ZXMgYW5kIHN0cmluZ3Mgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYSBudW1iZXIsIG51bWVyaWMgdmFsdWVzIHdpbGwgYmUgcmV0dXJuZWQgYXMgaXMuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC51bmFyeVBsdXMoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgudW5hcnlQbHVzKDMuNSkgICAgICAvLyByZXR1cm5zIDMuNVxuICAgKiAgICBtYXRoLnVuYXJ5UGx1cygxKSAgICAgLy8gcmV0dXJucyAxXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICB1bmFyeU1pbnVzLCBhZGQsIHN1YnRyYWN0XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgc3RyaW5nIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geFxuICAgKiAgICAgICAgICAgIElucHV0IHZhbHVlXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRoZSBpbnB1dCB2YWx1ZSB3aGVuIG51bWVyaWMsIGNvbnZlcnRzIHRvIGEgbnVtYmVyIHdoZW4gaW5wdXQgaXMgbm9uLW51bWVyaWMuXG4gICAqL1xuICB2YXIgdW5hcnlQbHVzID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci51bmFyeVBsdXNOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geDsgLy8gY29tcGxleCBudW1iZXJzIGFyZSBpbW11dGFibGVcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4OyAvLyBiaWdudW1iZXJzIGFyZSBpbW11dGFibGVcbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4geDsgLy8gZnJhY3Rpb25zIGFyZSBpbW11dGFibGVcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgcmV0dXJuIHguY2xvbmUoKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2UgdW5hcnlQbHVzKDApID0gMFxuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCB1bmFyeVBsdXMsIHRydWUpO1xuICAgIH0sXG4gICAgJ2Jvb2xlYW4gfCBzdHJpbmcnOiBmdW5jdGlvbiBib29sZWFuU3RyaW5nKHgpIHtcbiAgICAgIC8vIGNvbnZlcnQgdG8gYSBudW1iZXIgb3IgYmlnbnVtYmVyXG4gICAgICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyBuZXcgQmlnTnVtYmVyKCt4KSA6ICt4O1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB1bmFyeVBsdXM7XG59KTtcbmV4cG9ydHMuY3JlYXRlVW5hcnlQbHVzID0gY3JlYXRlVW5hcnlQbHVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVYZ2NkID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICd4Z2NkJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtYXRyaXgnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlWGdjZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZXh0ZW5kZWQgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3IgZm9yIHR3byB2YWx1ZXMuXG4gICAqIFNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9FeHRlbmRlZF9FdWNsaWRlYW5fYWxnb3JpdGhtLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgueGdjZChhLCBiKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC54Z2NkKDgsIDEyKSAgICAgICAgICAgICAvLyByZXR1cm5zIFs0LCAtMSwgMV1cbiAgICogICAgbWF0aC5nY2QoOCwgMTIpICAgICAgICAgICAgICAvLyByZXR1cm5zIDRcbiAgICogICAgbWF0aC54Z2NkKDM2MTYzLCAyMTE5OSkgICAgICAvLyByZXR1cm5zIFsxMjQ3LCAtNywgMTJdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBnY2QsIGxjbVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gYSAgQW4gaW50ZWdlciBudW1iZXJcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IGIgIEFuIGludGVnZXIgbnVtYmVyXG4gICAqIEByZXR1cm4ge0FycmF5fSAgICAgICAgICAgICAgUmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIDMgaW50ZWdlcnMgYFtkaXYsIG0sIG5dYFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIGBkaXYgPSBnY2QoYSwgYilgIGFuZCBgYSptICsgYipuID0gZGl2YFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoYSwgYikge1xuICAgICAgdmFyIHJlcyA9ICgwLCBfbnVtYmVyLnhnY2ROdW1iZXIpKGEsIGIpO1xuICAgICAgcmV0dXJuIGNvbmZpZy5tYXRyaXggPT09ICdBcnJheScgPyByZXMgOiBtYXRyaXgocmVzKTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IF94Z2NkQmlnTnVtYmVyIC8vIFRPRE86IGltcGxlbWVudCBzdXBwb3J0IGZvciBGcmFjdGlvblxuXG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHhnY2QgZm9yIHR3byBCaWdOdW1iZXJzXG4gICAqIEBwYXJhbSB7QmlnTnVtYmVyfSBhXG4gICAqIEBwYXJhbSB7QmlnTnVtYmVyfSBiXG4gICAqIEByZXR1cm4ge0JpZ051bWJlcltdfSByZXN1bHRcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX3hnY2RCaWdOdW1iZXIoYSwgYikge1xuICAgIC8vIHNvdXJjZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRXh0ZW5kZWRfRXVjbGlkZWFuX2FsZ29yaXRobVxuICAgIHZhciAvLyB1c2VkIHRvIHN3YXAgdHdvIHZhcmlhYmxlc1xuICAgIHQ7XG4gICAgdmFyIC8vIHF1b3RpZW50XG4gICAgcTtcbiAgICB2YXIgLy8gcmVtYWluZGVyXG4gICAgcjtcbiAgICB2YXIgemVybyA9IG5ldyBCaWdOdW1iZXIoMCk7XG4gICAgdmFyIG9uZSA9IG5ldyBCaWdOdW1iZXIoMSk7XG4gICAgdmFyIHggPSB6ZXJvO1xuICAgIHZhciBsYXN0eCA9IG9uZTtcbiAgICB2YXIgeSA9IG9uZTtcbiAgICB2YXIgbGFzdHkgPSB6ZXJvO1xuXG4gICAgaWYgKCFhLmlzSW50KCkgfHwgIWIuaXNJbnQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXJzIGluIGZ1bmN0aW9uIHhnY2QgbXVzdCBiZSBpbnRlZ2VyIG51bWJlcnMnKTtcbiAgICB9XG5cbiAgICB3aGlsZSAoIWIuaXNaZXJvKCkpIHtcbiAgICAgIHEgPSBhLmRpdihiKS5mbG9vcigpO1xuICAgICAgciA9IGEubW9kKGIpO1xuICAgICAgdCA9IHg7XG4gICAgICB4ID0gbGFzdHgubWludXMocS50aW1lcyh4KSk7XG4gICAgICBsYXN0eCA9IHQ7XG4gICAgICB0ID0geTtcbiAgICAgIHkgPSBsYXN0eS5taW51cyhxLnRpbWVzKHkpKTtcbiAgICAgIGxhc3R5ID0gdDtcbiAgICAgIGEgPSBiO1xuICAgICAgYiA9IHI7XG4gICAgfVxuXG4gICAgdmFyIHJlcztcblxuICAgIGlmIChhLmx0KHplcm8pKSB7XG4gICAgICByZXMgPSBbYS5uZWcoKSwgbGFzdHgubmVnKCksIGxhc3R5Lm5lZygpXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzID0gW2EsICFhLmlzWmVybygpID8gbGFzdHggOiAwLCBsYXN0eV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZy5tYXRyaXggPT09ICdBcnJheScgPyByZXMgOiBtYXRyaXgocmVzKTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVhnY2QgPSBjcmVhdGVYZ2NkOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVCaXRBbmQgPSB2b2lkIDA7XG5cbnZhciBfYml0d2lzZSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9iaWdudW1iZXIvYml0d2lzZVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDJcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMVwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNlwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYml0QW5kJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhciddO1xudmFyIGNyZWF0ZUJpdEFuZCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcjtcbiAgdmFyIGFsZ29yaXRobTAyID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDYgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMDYpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTEgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMTEpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIEJpdHdpc2UgQU5EIHR3byB2YWx1ZXMsIGB4ICYgeWAuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5iaXRBbmQoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYml0QW5kKDUzLCAxMzEpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMVxuICAgKlxuICAgKiAgICBtYXRoLmJpdEFuZChbMSwgMTIsIDMxXSwgNDIpICAgICAgIC8vIHJldHVybnMgQXJyYXkgWzAsIDgsIDEwXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYml0Tm90LCBiaXRPciwgYml0WG9yLCBsZWZ0U2hpZnQsIHJpZ2h0QXJpdGhTaGlmdCwgcmlnaHRMb2dTaGlmdFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBhbmRcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IHkgU2Vjb25kIHZhbHVlIHRvIGFuZFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gQU5EIG9mIGB4YCBhbmQgYHlgXG4gICAqL1xuXG4gIHZhciBiaXRBbmQgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5iaXRBbmROdW1iZXIsXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogX2JpdHdpc2UuYml0QW5kQmlnTnVtYmVyLFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDYoeCwgeSwgYml0QW5kLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMih5LCB4LCBiaXRBbmQsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDIoeCwgeSwgYml0QW5kLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgYml0QW5kKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBiaXRBbmQobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGJpdEFuZChtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYml0QW5kKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHgsIHksIGJpdEFuZCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgYml0QW5kLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHksIHgsIGJpdEFuZCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBiaXRBbmQsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBiaXRBbmQsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIGJpdEFuZCwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBiaXRBbmQ7XG59KTtcbmV4cG9ydHMuY3JlYXRlQml0QW5kID0gY3JlYXRlQml0QW5kOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVCaXROb3QgPSB2b2lkIDA7XG5cbnZhciBfYml0d2lzZSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9iaWdudW1iZXIvYml0d2lzZVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2JpdE5vdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUJpdE5vdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEJpdHdpc2UgTk9UIHZhbHVlLCBgfnhgLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKiBGb3IgdW5pdHMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgb24gdGhlIGJlc3QgcHJlZml4IGJhc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5iaXROb3QoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYml0Tm90KDEpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgLTJcbiAgICpcbiAgICogICAgbWF0aC5iaXROb3QoWzIsIC0zLCA0XSkgICAgICAvLyByZXR1cm5zIEFycmF5IFstMywgMiwgNV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGJpdEFuZCwgYml0T3IsIGJpdFhvciwgbGVmdFNoaWZ0LCByaWdodEFyaXRoU2hpZnQsIHJpZ2h0TG9nU2hpZnRcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IHggVmFsdWUgdG8gbm90XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBOT1Qgb2YgYHhgXG4gICAqL1xuICB2YXIgYml0Tm90ID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5iaXROb3ROdW1iZXIsXG4gICAgQmlnTnVtYmVyOiBfYml0d2lzZS5iaXROb3RCaWdOdW1iZXIsXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBiaXROb3QpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBiaXROb3Q7XG59KTtcbmV4cG9ydHMuY3JlYXRlQml0Tm90ID0gY3JlYXRlQml0Tm90OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVCaXRPciA9IHZvaWQgMDtcblxudmFyIF9iaXR3aXNlID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9iaXR3aXNlXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEwXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDRcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdiaXRPcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVCaXRPciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAxID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTAxKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDQgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMDQpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTAgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMTApKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQml0d2lzZSBPUiB0d28gdmFsdWVzLCBgeCB8IHlgLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKiBGb3IgdW5pdHMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgb24gdGhlIGxvd2VzdCBwcmludCBiYXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYml0T3IoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYml0T3IoMSwgMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAzXG4gICAqXG4gICAqICAgIG1hdGguYml0T3IoWzEsIDIsIDNdLCA0KSAgICAgICAvLyByZXR1cm5zIEFycmF5IFs1LCA2LCA3XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYml0QW5kLCBiaXROb3QsIGJpdFhvciwgbGVmdFNoaWZ0LCByaWdodEFyaXRoU2hpZnQsIHJpZ2h0TG9nU2hpZnRcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IHggRmlyc3QgdmFsdWUgdG8gb3JcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IHkgU2Vjb25kIHZhbHVlIHRvIG9yXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBPUiBvZiBgeGAgYW5kIGB5YFxuICAgKi9cblxuICB2YXIgYml0T3IgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5iaXRPck51bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBfYml0d2lzZS5iaXRPckJpZ051bWJlcixcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA0KHgsIHksIGJpdE9yKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAxKHksIHgsIGJpdE9yLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAxKHgsIHksIGJpdE9yLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgYml0T3IpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGJpdE9yKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBiaXRPcihtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYml0T3IoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTAoeCwgeSwgYml0T3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGJpdE9yLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEwKHksIHgsIGJpdE9yLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGJpdE9yLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgYml0T3IsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIGJpdE9yLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGJpdE9yO1xufSk7XG5leHBvcnRzLmNyZWF0ZUJpdE9yID0gY3JlYXRlQml0T3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJpdFhvciA9IHZvaWQgMDtcblxudmFyIF9iaXR3aXNlID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9iaXR3aXNlXCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA3XCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTJcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdiaXRYb3InO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlQml0WG9yID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA3ID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTA3KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBCaXR3aXNlIFhPUiB0d28gdmFsdWVzLCBgeCBeIHlgLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYml0WG9yKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmJpdFhvcigxLCAyKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDNcbiAgICpcbiAgICogICAgbWF0aC5iaXRYb3IoWzIsIDMsIDRdLCA0KSAgICAgICAvLyByZXR1cm5zIEFycmF5IFs2LCA3LCAwXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYml0QW5kLCBiaXROb3QsIGJpdE9yLCBsZWZ0U2hpZnQsIHJpZ2h0QXJpdGhTaGlmdCwgcmlnaHRMb2dTaGlmdFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byB4b3JcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IHkgU2Vjb25kIHZhbHVlIHRvIHhvclxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gWE9SIG9mIGB4YCBhbmQgYHlgXG4gICAqL1xuXG4gIHZhciBiaXRYb3IgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5iaXRYb3JOdW1iZXIsXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogX2JpdHdpc2UuYml0WG9yLFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDcoeCwgeSwgYml0WG9yKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHksIHgsIGJpdFhvciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBiaXRYb3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBiaXRYb3IpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGJpdFhvcihtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYml0WG9yKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBiaXRYb3IoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeCwgeSwgYml0WG9yLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBiaXRYb3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgYml0WG9yLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGJpdFhvciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGJpdFhvciwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgYml0WG9yLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGJpdFhvcjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVCaXRYb3IgPSBjcmVhdGVCaXRYb3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUxlZnRTaGlmdCA9IHZvaWQgMDtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDJcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMVwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMVwiKTtcblxudmFyIF9hbGdvcml0aG02ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEwXCIpO1xuXG52YXIgX2FsZ29yaXRobTcgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDhcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBfYml0d2lzZSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9iaWdudW1iZXIvYml0d2lzZVwiKTtcblxudmFyIG5hbWUgPSAnbGVmdFNoaWZ0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICd6ZXJvcycsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZUxlZnRTaGlmdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIHplcm9zID0gX3JlZi56ZXJvcyxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAxID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTAxKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wOCA9ICgwLCBfYWxnb3JpdGhtNy5jcmVhdGVBbGdvcml0aG0wOCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMCA9ICgwLCBfYWxnb3JpdGhtNi5jcmVhdGVBbGdvcml0aG0xMCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQml0d2lzZSBsZWZ0IGxvZ2ljYWwgc2hpZnQgb2YgYSB2YWx1ZSB4IGJ5IHkgbnVtYmVyIG9mIGJpdHMsIGB4IDw8IHlgLlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKiBGb3IgdW5pdHMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgb24gdGhlIGJlc3QgcHJlZml4IGJhc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5sZWZ0U2hpZnQoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgubGVmdFNoaWZ0KDEsIDIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNFxuICAgKlxuICAgKiAgICBtYXRoLmxlZnRTaGlmdChbMSwgMiwgM10sIDQpICAgICAgIC8vIHJldHVybnMgQXJyYXkgWzE2LCAzMiwgNjRdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBsZWZ0U2hpZnQsIGJpdE5vdCwgYml0T3IsIGJpdFhvciwgcmlnaHRBcml0aFNoaWZ0LCByaWdodExvZ1NoaWZ0XG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSB4IFZhbHVlIHRvIGJlIHNoaWZ0ZWRcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyfSB5IEFtb3VudCBvZiBzaGlmdHNcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IGB4YCBzaGlmdGVkIGxlZnQgYHlgIHRpbWVzXG4gICAqL1xuXG4gIHZhciBsZWZ0U2hpZnQgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5sZWZ0U2hpZnROdW1iZXIsXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogX2JpdHdpc2UubGVmdFNoaWZ0QmlnTnVtYmVyLFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDgoeCwgeSwgbGVmdFNoaWZ0LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMih5LCB4LCBsZWZ0U2hpZnQsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeCwgeSwgbGVmdFNoaWZ0LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgbGVmdFNoaWZ0KTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBsZWZ0U2hpZnQobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxlZnRTaGlmdChtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbGVmdFNoaWZ0KHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgLy8gY2hlY2sgc2NhbGFyXG4gICAgICBpZiAoZXF1YWxTY2FsYXIoeSwgMCkpIHtcbiAgICAgICAgcmV0dXJuIHguY2xvbmUoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHgsIHksIGxlZnRTaGlmdCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBEZW5zZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih5LCAwKSkge1xuICAgICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgbGVmdFNoaWZ0LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gY2hlY2sgc2NhbGFyXG4gICAgICBpZiAoZXF1YWxTY2FsYXIoeCwgMCkpIHtcbiAgICAgICAgcmV0dXJuIHplcm9zKHkuc2l6ZSgpLCB5LnN0b3JhZ2UoKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh5LCB4LCBsZWZ0U2hpZnQsIHRydWUpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih4LCAwKSkge1xuICAgICAgICByZXR1cm4gemVyb3MoeS5zaXplKCksIHkuc3RvcmFnZSgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGxlZnRTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBsZWZ0U2hpZnQobWF0cml4KHgpLCB5KS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBBcnJheSc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBsZWZ0U2hpZnQoeCwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGxlZnRTaGlmdDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVMZWZ0U2hpZnQgPSBjcmVhdGVMZWZ0U2hpZnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJpZ2h0QXJpdGhTaGlmdCA9IHZvaWQgMDtcblxudmFyIF9iaXR3aXNlID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9iaXR3aXNlXCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wMlwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAxXCIpO1xuXG52YXIgX2FsZ29yaXRobTYgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTBcIik7XG5cbnZhciBfYWxnb3JpdGhtNyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wOFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAncmlnaHRBcml0aFNoaWZ0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICd6ZXJvcycsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZVJpZ2h0QXJpdGhTaGlmdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIHplcm9zID0gX3JlZi56ZXJvcyxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAxID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTAxKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDIgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wOCA9ICgwLCBfYWxnb3JpdGhtNy5jcmVhdGVBbGdvcml0aG0wOCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMCA9ICgwLCBfYWxnb3JpdGhtNi5jcmVhdGVBbGdvcml0aG0xMCkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQml0d2lzZSByaWdodCBhcml0aG1ldGljIHNoaWZ0IG9mIGEgdmFsdWUgeCBieSB5IG51bWJlciBvZiBiaXRzLCBgeCA+PiB5YC5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICogRm9yIHVuaXRzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIG9uIHRoZSBiZXN0IHByZWZpeCBiYXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgucmlnaHRBcml0aFNoaWZ0KHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnJpZ2h0QXJpdGhTaGlmdCg0LCAyKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDFcbiAgICpcbiAgICogICAgbWF0aC5yaWdodEFyaXRoU2hpZnQoWzE2LCAtMzIsIDY0XSwgNCkgICAvLyByZXR1cm5zIEFycmF5IFsxLCAtMiwgM11cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGJpdEFuZCwgYml0Tm90LCBiaXRPciwgYml0WG9yLCByaWdodEFyaXRoU2hpZnQsIHJpZ2h0TG9nU2hpZnRcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IHggVmFsdWUgdG8gYmUgc2hpZnRlZFxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXJ9IHkgQW1vdW50IG9mIHNoaWZ0c1xuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gYHhgIHNpZ24tZmlsbGVkIHNoaWZ0ZWQgcmlnaHQgYHlgIHRpbWVzXG4gICAqL1xuXG4gIHZhciByaWdodEFyaXRoU2hpZnQgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5yaWdodEFyaXRoU2hpZnROdW1iZXIsXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogX2JpdHdpc2UucmlnaHRBcml0aFNoaWZ0QmlnTnVtYmVyLFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDgoeCwgeSwgcmlnaHRBcml0aFNoaWZ0LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMih5LCB4LCByaWdodEFyaXRoU2hpZnQsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDEoeCwgeSwgcmlnaHRBcml0aFNoaWZ0LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgcmlnaHRBcml0aFNoaWZ0KTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiByaWdodEFyaXRoU2hpZnQobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0QXJpdGhTaGlmdChtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gcmlnaHRBcml0aFNoaWZ0KHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgLy8gY2hlY2sgc2NhbGFyXG4gICAgICBpZiAoZXF1YWxTY2FsYXIoeSwgMCkpIHtcbiAgICAgICAgcmV0dXJuIHguY2xvbmUoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHgsIHksIHJpZ2h0QXJpdGhTaGlmdCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBEZW5zZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih5LCAwKSkge1xuICAgICAgICByZXR1cm4geC5jbG9uZSgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgcmlnaHRBcml0aFNoaWZ0LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gY2hlY2sgc2NhbGFyXG4gICAgICBpZiAoZXF1YWxTY2FsYXIoeCwgMCkpIHtcbiAgICAgICAgcmV0dXJuIHplcm9zKHkuc2l6ZSgpLCB5LnN0b3JhZ2UoKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhbGdvcml0aG0xMCh5LCB4LCByaWdodEFyaXRoU2hpZnQsIHRydWUpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih4LCAwKSkge1xuICAgICAgICByZXR1cm4gemVyb3MoeS5zaXplKCksIHkuc3RvcmFnZSgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIHJpZ2h0QXJpdGhTaGlmdCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiByaWdodEFyaXRoU2hpZnQobWF0cml4KHgpLCB5KS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBBcnJheSc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiByaWdodEFyaXRoU2hpZnQoeCwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJpZ2h0QXJpdGhTaGlmdDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVSaWdodEFyaXRoU2hpZnQgPSBjcmVhdGVSaWdodEFyaXRoU2hpZnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJpZ2h0TG9nU2hpZnQgPSB2b2lkIDA7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAyXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTFcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDFcIik7XG5cbnZhciBfYWxnb3JpdGhtNiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMFwiKTtcblxudmFyIF9hbGdvcml0aG03ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA4XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdyaWdodExvZ1NoaWZ0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICd6ZXJvcycsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZVJpZ2h0TG9nU2hpZnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICB6ZXJvcyA9IF9yZWYuemVyb3MsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBhbGdvcml0aG0wMSA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0wMSkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTAyID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDggPSAoMCwgX2FsZ29yaXRobTcuY3JlYXRlQWxnb3JpdGhtMDgpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTAgPSAoMCwgX2FsZ29yaXRobTYuY3JlYXRlQWxnb3JpdGhtMTApKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTEgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMTEpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIEJpdHdpc2UgcmlnaHQgbG9naWNhbCBzaGlmdCBvZiB2YWx1ZSB4IGJ5IHkgbnVtYmVyIG9mIGJpdHMsIGB4ID4+PiB5YC5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICogRm9yIHVuaXRzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIG9uIHRoZSBiZXN0IHByZWZpeCBiYXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgucmlnaHRMb2dTaGlmdCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5yaWdodExvZ1NoaWZ0KDQsIDIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMVxuICAgKlxuICAgKiAgICBtYXRoLnJpZ2h0TG9nU2hpZnQoWzE2LCAtMzIsIDY0XSwgNCkgICAvLyByZXR1cm5zIEFycmF5IFsxLCAyLCAzXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYml0QW5kLCBiaXROb3QsIGJpdE9yLCBiaXRYb3IsIGxlZnRTaGlmdCwgcmlnaHRMb2dTaGlmdFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geCBWYWx1ZSB0byBiZSBzaGlmdGVkXG4gICAqIEBwYXJhbSAge251bWJlcn0geSBBbW91bnQgb2Ygc2hpZnRzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSBgeGAgemVyby1maWxsZWQgc2hpZnRlZCByaWdodCBgeWAgdGltZXNcbiAgICovXG5cbiAgdmFyIHJpZ2h0TG9nU2hpZnQgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5yaWdodExvZ1NoaWZ0TnVtYmVyLFxuICAgIC8vICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IC4uLiwgLy8gVE9ETzogaW1wbGVtZW50IEJpZ051bWJlciBzdXBwb3J0IGZvciByaWdodExvZ1NoaWZ0XG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wOCh4LCB5LCByaWdodExvZ1NoaWZ0LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMih5LCB4LCByaWdodExvZ1NoaWZ0LCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAxKHgsIHksIHJpZ2h0TG9nU2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCByaWdodExvZ1NoaWZ0KTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiByaWdodExvZ1NoaWZ0KG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiByaWdodExvZ1NoaWZ0KG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiByaWdodExvZ1NoaWZ0KHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgLy8gY2hlY2sgc2NhbGFyXG4gICAgICBpZiAoZXF1YWxTY2FsYXIoeSwgMCkpIHtcbiAgICAgICAgcmV0dXJuIHguY2xvbmUoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTExKHgsIHksIHJpZ2h0TG9nU2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gRGVuc2VNYXRyaXhOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgLy8gY2hlY2sgc2NhbGFyXG4gICAgICBpZiAoZXF1YWxTY2FsYXIoeSwgMCkpIHtcbiAgICAgICAgcmV0dXJuIHguY2xvbmUoKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIHJpZ2h0TG9nU2hpZnQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih4LCAwKSkge1xuICAgICAgICByZXR1cm4gemVyb3MoeS5zaXplKCksIHkuc3RvcmFnZSgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTEwKHksIHgsIHJpZ2h0TG9nU2hpZnQsIHRydWUpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChlcXVhbFNjYWxhcih4LCAwKSkge1xuICAgICAgICByZXR1cm4gemVyb3MoeS5zaXplKCksIHkuc3RvcmFnZSgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIHJpZ2h0TG9nU2hpZnQsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheU51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gcmlnaHRMb2dTaGlmdChtYXRyaXgoeCksIHkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIEFycmF5JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyQXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHJpZ2h0TG9nU2hpZnQoeCwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJpZ2h0TG9nU2hpZnQ7XG59KTtcbmV4cG9ydHMuY3JlYXRlUmlnaHRMb2dTaGlmdCA9IGNyZWF0ZVJpZ2h0TG9nU2hpZnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJlbGxOdW1iZXJzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnYmVsbE51bWJlcnMnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnYWRkU2NhbGFyJywgJ2lzTmVnYXRpdmUnLCAnaXNJbnRlZ2VyJywgJ3N0aXJsaW5nUzInXTtcbnZhciBjcmVhdGVCZWxsTnVtYmVycyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhZGRTY2FsYXIgPSBfcmVmLmFkZFNjYWxhcixcbiAgICAgIGlzTmVnYXRpdmUgPSBfcmVmLmlzTmVnYXRpdmUsXG4gICAgICBpc0ludGVnZXIgPSBfcmVmLmlzSW50ZWdlcixcbiAgICAgIHN0aXJsaW5nUzIgPSBfcmVmLnN0aXJsaW5nUzI7XG5cbiAgLyoqXG4gICAqIFRoZSBCZWxsIE51bWJlcnMgY291bnQgdGhlIG51bWJlciBvZiBwYXJ0aXRpb25zIG9mIGEgc2V0LiBBIHBhcnRpdGlvbiBpcyBhIHBhaXJ3aXNlIGRpc2pvaW50IHN1YnNldCBvZiBTIHdob3NlIHVuaW9uIGlzIFMuXG4gICAqIGJlbGxOdW1iZXJzIG9ubHkgdGFrZXMgaW50ZWdlciBhcmd1bWVudHMuXG4gICAqIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IG4gPj0gMFxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgbWF0aC5iZWxsTnVtYmVycyhuKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5iZWxsTnVtYmVycygzKSAvLyByZXR1cm5zIDVcbiAgICogICAgbWF0aC5iZWxsTnVtYmVycyg4KSAvLyByZXR1cm5zIDQxNDBcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHN0aXJsaW5nUzJcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXIgfCBCaWdOdW1iZXJ9IG4gICAgVG90YWwgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHNldFxuICAgKiBAcmV0dXJuIHtOdW1iZXIgfCBCaWdOdW1iZXJ9ICAgICBCKG4pXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXIobikge1xuICAgICAgaWYgKCFpc0ludGVnZXIobikgfHwgaXNOZWdhdGl2ZShuKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBiZWxsTnVtYmVycycpO1xuICAgICAgfSAvLyBTdW0gKGs9MCwgbikgUyhuLGspLlxuXG5cbiAgICAgIHZhciByZXN1bHQgPSAwO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBuOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gYWRkU2NhbGFyKHJlc3VsdCwgc3RpcmxpbmdTMihuLCBpKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVCZWxsTnVtYmVycyA9IGNyZWF0ZUJlbGxOdW1iZXJzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDYXRhbGFuID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnY2F0YWxhbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGRTY2FsYXInLCAnZGl2aWRlU2NhbGFyJywgJ211bHRpcGx5U2NhbGFyJywgJ2NvbWJpbmF0aW9ucycsICdpc05lZ2F0aXZlJywgJ2lzSW50ZWdlciddO1xudmFyIGNyZWF0ZUNhdGFsYW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWRkU2NhbGFyID0gX3JlZi5hZGRTY2FsYXIsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcixcbiAgICAgIGNvbWJpbmF0aW9ucyA9IF9yZWYuY29tYmluYXRpb25zLFxuICAgICAgaXNOZWdhdGl2ZSA9IF9yZWYuaXNOZWdhdGl2ZSxcbiAgICAgIGlzSW50ZWdlciA9IF9yZWYuaXNJbnRlZ2VyO1xuXG4gIC8qKlxuICAgKiBUaGUgQ2F0YWxhbiBOdW1iZXJzIGVudW1lcmF0ZSBjb21iaW5hdG9yaWFsIHN0cnVjdHVyZXMgb2YgbWFueSBkaWZmZXJlbnQgdHlwZXMuXG4gICAqIGNhdGFsYW4gb25seSB0YWtlcyBpbnRlZ2VyIGFyZ3VtZW50cy5cbiAgICogVGhlIGZvbGxvd2luZyBjb25kaXRpb24gbXVzdCBiZSBlbmZvcmNlZDogbiA+PSAwXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICBtYXRoLmNhdGFsYW4obilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguY2F0YWxhbigzKSAvLyByZXR1cm5zIDVcbiAgICogICAgbWF0aC5jYXRhbGFuKDgpIC8vIHJldHVybnMgMTQzMFxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYmVsbE51bWJlcnNcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXIgfCBCaWdOdW1iZXJ9IG4gICAgbnRoIENhdGFsYW4gbnVtYmVyXG4gICAqIEByZXR1cm4ge051bWJlciB8IEJpZ051bWJlcn0gICAgIENuKG4pXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXIobikge1xuICAgICAgaWYgKCFpc0ludGVnZXIobikgfHwgaXNOZWdhdGl2ZShuKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdOb24tbmVnYXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjYXRhbGFuJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkaXZpZGVTY2FsYXIoY29tYmluYXRpb25zKG11bHRpcGx5U2NhbGFyKG4sIDIpLCBuKSwgYWRkU2NhbGFyKG4sIDEpKTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNhdGFsYW4gPSBjcmVhdGVDYXRhbGFuOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wb3NpdGlvbiA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2NvbXBvc2l0aW9uJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FkZFNjYWxhcicsICdjb21iaW5hdGlvbnMnLCAnaXNOZWdhdGl2ZScsICdpc1Bvc2l0aXZlJywgJ2lzSW50ZWdlcicsICdsYXJnZXInXTtcbnZhciBjcmVhdGVDb21wb3NpdGlvbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhZGRTY2FsYXIgPSBfcmVmLmFkZFNjYWxhcixcbiAgICAgIGNvbWJpbmF0aW9ucyA9IF9yZWYuY29tYmluYXRpb25zLFxuICAgICAgaXNQb3NpdGl2ZSA9IF9yZWYuaXNQb3NpdGl2ZSxcbiAgICAgIGlzTmVnYXRpdmUgPSBfcmVmLmlzTmVnYXRpdmUsXG4gICAgICBpc0ludGVnZXIgPSBfcmVmLmlzSW50ZWdlcixcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyO1xuXG4gIC8qKlxuICAgKiBUaGUgY29tcG9zaXRpb24gY291bnRzIG9mIG4gaW50byBrIHBhcnRzLlxuICAgKlxuICAgKiBjb21wb3NpdGlvbiBvbmx5IHRha2VzIGludGVnZXIgYXJndW1lbnRzLlxuICAgKiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBtdXN0IGJlIGVuZm9yY2VkOiBrIDw9IG4uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICBtYXRoLmNvbXBvc2l0aW9uKG4sIGspXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBvc2l0aW9uKDUsIDMpIC8vIHJldHVybnMgNlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY29tYmluYXRpb25zXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyIHwgQmlnTnVtYmVyfSBuICAgIFRvdGFsIG51bWJlciBvZiBvYmplY3RzIGluIHRoZSBzZXRcbiAgICogQHBhcmFtIHtOdW1iZXIgfCBCaWdOdW1iZXJ9IGsgICAgTnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHN1YnNldFxuICAgKiBAcmV0dXJuIHtOdW1iZXIgfCBCaWdOdW1iZXJ9ICAgICBSZXR1cm5zIHRoZSBjb21wb3NpdGlvbiBjb3VudHMgb2YgbiBpbnRvIGsgcGFydHMuXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlck51bWJlckJpZ051bWJlcihuLCBrKSB7XG4gICAgICBpZiAoIWlzSW50ZWdlcihuKSB8fCAhaXNQb3NpdGl2ZShuKSB8fCAhaXNJbnRlZ2VyKGspIHx8ICFpc1Bvc2l0aXZlKGspKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Bvc2l0aXZlIGludGVnZXIgdmFsdWUgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gY29tcG9zaXRpb24nKTtcbiAgICAgIH0gZWxzZSBpZiAobGFyZ2VyKGssIG4pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2sgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbiBpbiBmdW5jdGlvbiBjb21wb3NpdGlvbicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29tYmluYXRpb25zKGFkZFNjYWxhcihuLCAtMSksIGFkZFNjYWxhcihrLCAtMSkpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ29tcG9zaXRpb24gPSBjcmVhdGVDb21wb3NpdGlvbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3RpcmxpbmdTMiA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3N0aXJsaW5nUzInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnYWRkU2NhbGFyJywgJ3N1YnRyYWN0JywgJ211bHRpcGx5U2NhbGFyJywgJ2RpdmlkZVNjYWxhcicsICdwb3cnLCAnZmFjdG9yaWFsJywgJ2NvbWJpbmF0aW9ucycsICdpc05lZ2F0aXZlJywgJ2lzSW50ZWdlcicsICdsYXJnZXInXTtcbnZhciBjcmVhdGVTdGlybGluZ1MyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBwb3cgPSBfcmVmLnBvdyxcbiAgICAgIGZhY3RvcmlhbCA9IF9yZWYuZmFjdG9yaWFsLFxuICAgICAgY29tYmluYXRpb25zID0gX3JlZi5jb21iaW5hdGlvbnMsXG4gICAgICBpc05lZ2F0aXZlID0gX3JlZi5pc05lZ2F0aXZlLFxuICAgICAgaXNJbnRlZ2VyID0gX3JlZi5pc0ludGVnZXIsXG4gICAgICBsYXJnZXIgPSBfcmVmLmxhcmdlcjtcblxuICAvKipcbiAgICogVGhlIFN0aXJsaW5nIG51bWJlcnMgb2YgdGhlIHNlY29uZCBraW5kLCBjb3VudHMgdGhlIG51bWJlciBvZiB3YXlzIHRvIHBhcnRpdGlvblxuICAgKiBhIHNldCBvZiBuIGxhYmVsbGVkIG9iamVjdHMgaW50byBrIG5vbmVtcHR5IHVubGFiZWxsZWQgc3Vic2V0cy5cbiAgICogc3RpcmxpbmdTMiBvbmx5IHRha2VzIGludGVnZXIgYXJndW1lbnRzLlxuICAgKiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBtdXN0IGJlIGVuZm9yY2VkOiBrIDw9IG4uXG4gICAqXG4gICAqICBJZiBuID0gayBvciBrID0gMSwgdGhlbiBzKG4saykgPSAxXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICBtYXRoLnN0aXJsaW5nUzIobiwgaylcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc3RpcmxpbmdTMig1LCAzKSAvL3JldHVybnMgMjVcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGJlbGxOdW1iZXJzXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyIHwgQmlnTnVtYmVyfSBuICAgIFRvdGFsIG51bWJlciBvZiBvYmplY3RzIGluIHRoZSBzZXRcbiAgICogQHBhcmFtIHtOdW1iZXIgfCBCaWdOdW1iZXJ9IGsgICAgTnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHN1YnNldFxuICAgKiBAcmV0dXJuIHtOdW1iZXIgfCBCaWdOdW1iZXJ9ICAgICBTKG4saylcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyTnVtYmVyQmlnTnVtYmVyKG4sIGspIHtcbiAgICAgIGlmICghaXNJbnRlZ2VyKG4pIHx8IGlzTmVnYXRpdmUobikgfHwgIWlzSW50ZWdlcihrKSB8fCBpc05lZ2F0aXZlKGspKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vbi1uZWdhdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIHN0aXJsaW5nUzInKTtcbiAgICAgIH0gZWxzZSBpZiAobGFyZ2VyKGssIG4pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2sgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbiBpbiBmdW5jdGlvbiBzdGlybGluZ1MyJyk7XG4gICAgICB9IC8vIDEvayEgU3VtKGk9MCAtPiBrKSBbKC0xKV4oay1pKSpDKGssaikqIGlebl1cblxuXG4gICAgICB2YXIga0ZhY3RvcmlhbCA9IGZhY3RvcmlhbChrKTtcbiAgICAgIHZhciByZXN1bHQgPSAwO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8PSBrOyBpKyspIHtcbiAgICAgICAgdmFyIG5lZ2F0aXZlT25lID0gcG93KC0xLCBzdWJ0cmFjdChrLCBpKSk7XG4gICAgICAgIHZhciBrQ2hvb3NlSSA9IGNvbWJpbmF0aW9ucyhrLCBpKTtcbiAgICAgICAgdmFyIGlQb3dlciA9IHBvdyhpLCBuKTtcbiAgICAgICAgcmVzdWx0ID0gYWRkU2NhbGFyKHJlc3VsdCwgbXVsdGlwbHlTY2FsYXIobXVsdGlwbHlTY2FsYXIoa0Nob29zZUksIGlQb3dlciksIG5lZ2F0aXZlT25lKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkaXZpZGVTY2FsYXIocmVzdWx0LCBrRmFjdG9yaWFsKTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZVN0aXJsaW5nUzIgPSBjcmVhdGVTdGlybGluZ1MyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBcmcgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAnYXJnJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQXJnID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgYXJndW1lbnQgb2YgYSBjb21wbGV4IHZhbHVlLlxuICAgKiBGb3IgYSBjb21wbGV4IG51bWJlciBgYSArIGJpYCwgdGhlIGFyZ3VtZW50IGlzIGNvbXB1dGVkIGFzIGBhdGFuMihiLCBhKWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hcmcoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLmNvbXBsZXgoMiwgMilcbiAgICogICAgbWF0aC5hcmcoYSkgLyBtYXRoLnBpICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDAuMjVcbiAgICpcbiAgICogICAgY29uc3QgYiA9IG1hdGguY29tcGxleCgnMiArIDNpJylcbiAgICogICAgbWF0aC5hcmcoYikgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDAuOTgyNzkzNzIzMjQ3MzI5XG4gICAqICAgIG1hdGguYXRhbjIoMywgMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAwLjk4Mjc5MzcyMzI0NzMyOVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgcmUsIGltLCBjb25qLCBhYnNcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHhcbiAgICogICAgICAgICAgICBBIGNvbXBsZXggbnVtYmVyIG9yIGFycmF5IHdpdGggY29tcGxleCBudW1iZXJzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBUaGUgYXJndW1lbnQgb2YgeFxuICAgKi9cbiAgdmFyIGFyZyA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4gTWF0aC5hdGFuMigwLCB4KTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmNvbnN0cnVjdG9yLmF0YW4yKDAsIHgpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hcmcoKTtcbiAgICB9LFxuICAgIC8vIFRPRE86IGltcGxlbWVudCBCaWdOdW1iZXIgc3VwcG9ydCBmb3IgZnVuY3Rpb24gYXJnXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBhcmcpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhcmc7XG59KTtcbmV4cG9ydHMuY3JlYXRlQXJnID0gY3JlYXRlQXJnOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb25qID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ2NvbmonO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVDb25qID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgY29tcGxleCBjb25qdWdhdGUgb2YgYSBjb21wbGV4IHZhbHVlLlxuICAgKiBJZiBgeCA9IGErYmlgLCB0aGUgY29tcGxleCBjb25qdWdhdGUgb2YgYHhgIGlzIGBhIC0gYmlgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguY29uaih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jb25qKG1hdGguY29tcGxleCgnMiArIDNpJykpICAvLyByZXR1cm5zIENvbXBsZXggMiAtIDNpXG4gICAqICAgIG1hdGguY29uaihtYXRoLmNvbXBsZXgoJzIgLSAzaScpKSAgLy8gcmV0dXJucyBDb21wbGV4IDIgKyAzaVxuICAgKiAgICBtYXRoLmNvbmoobWF0aC5jb21wbGV4KCctNS4yaScpKSAgLy8gcmV0dXJucyBDb21wbGV4IDUuMmlcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHJlLCBpbSwgYXJnLCBhYnNcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHhcbiAgICogICAgICAgICAgICBBIGNvbXBsZXggbnVtYmVyIG9yIGFycmF5IHdpdGggY29tcGxleCBudW1iZXJzXG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH1cbiAgICogICAgICAgICAgICBUaGUgY29tcGxleCBjb25qdWdhdGUgb2YgeFxuICAgKi9cbiAgdmFyIGNvbmogPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguY29uanVnYXRlKCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGNvbmopO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjb25qO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNvbmogPSBjcmVhdGVDb25qOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJbSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgbmFtZSA9ICdpbSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUltID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogR2V0IHRoZSBpbWFnaW5hcnkgcGFydCBvZiBhIGNvbXBsZXggbnVtYmVyLlxuICAgKiBGb3IgYSBjb21wbGV4IG51bWJlciBgYSArIGJpYCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYGJgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguaW0oeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLmNvbXBsZXgoMiwgMylcbiAgICogICAgbWF0aC5yZShhKSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDJcbiAgICogICAgbWF0aC5pbShhKSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDNcbiAgICpcbiAgICogICAgbWF0aC5yZShtYXRoLmNvbXBsZXgoJy01LjJpJykpIC8vIHJldHVybnMgbnVtYmVyIC01LjJcbiAgICogICAgbWF0aC5yZShtYXRoLmNvbXBsZXgoMi40KSkgICAgIC8vIHJldHVybnMgbnVtYmVyIDBcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHJlLCBjb25qLCBhYnMsIGFyZ1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geFxuICAgKiAgICAgICAgICAgIEEgY29tcGxleCBudW1iZXIgb3IgYXJyYXkgd2l0aCBjb21wbGV4IG51bWJlcnNcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBpbWFnaW5hcnkgcGFydCBvZiB4XG4gICAqL1xuICB2YXIgaW0gPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5tdWwoMCk7XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmltO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBpbSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGltO1xufSk7XG5leHBvcnRzLmNyZWF0ZUltID0gY3JlYXRlSW07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJlID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ3JlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlUmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHJlYWwgcGFydCBvZiBhIGNvbXBsZXggbnVtYmVyLlxuICAgKiBGb3IgYSBjb21wbGV4IG51bWJlciBgYSArIGJpYCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYGFgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgucmUoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLmNvbXBsZXgoMiwgMylcbiAgICogICAgbWF0aC5yZShhKSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDJcbiAgICogICAgbWF0aC5pbShhKSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDNcbiAgICpcbiAgICogICAgbWF0aC5yZShtYXRoLmNvbXBsZXgoJy01LjJpJykpIC8vIHJldHVybnMgbnVtYmVyIDBcbiAgICogICAgbWF0aC5yZShtYXRoLmNvbXBsZXgoMi40KSkgICAgIC8vIHJldHVybnMgbnVtYmVyIDIuNFxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgaW0sIGNvbmosIGFicywgYXJnXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4XG4gICAqICAgICAgICAgICAgQSBjb21wbGV4IG51bWJlciBvciBhcnJheSB3aXRoIGNvbXBsZXggbnVtYmVyc1xuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gVGhlIHJlYWwgcGFydCBvZiB4XG4gICAqL1xuICB2YXIgcmUgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHgucmU7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHJlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmU7XG59KTtcbmV4cG9ydHMuY3JlYXRlUmUgPSBjcmVhdGVSZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRGlzdGFuY2UgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdkaXN0YW5jZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGRTY2FsYXInLCAnc3VidHJhY3QnLCAnZGl2aWRlU2NhbGFyJywgJ211bHRpcGx5U2NhbGFyJywgJ3VuYXJ5TWludXMnLCAnc3FydCcsICdhYnMnXTtcbnZhciBjcmVhdGVEaXN0YW5jZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhZGRTY2FsYXIgPSBfcmVmLmFkZFNjYWxhcixcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcixcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgdW5hcnlNaW51cyA9IF9yZWYudW5hcnlNaW51cyxcbiAgICAgIHNxcnQgPSBfcmVmLnNxcnQsXG4gICAgICBhYnMgPSBfcmVmLmFicztcblxuICAvKipcbiAgICAqIENhbGN1bGF0ZXM6XG4gICAgKiAgICBUaGUgZXVjbGVkaWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHBvaW50cyBpbiBOLWRpbWVuc2lvbmFsIHNwYWNlcy5cbiAgICAqICAgIERpc3RhbmNlIGJldHdlZW4gcG9pbnQgYW5kIGEgbGluZSBpbiAyIGFuZCAzIGRpbWVuc2lvbmFsIHNwYWNlcy5cbiAgICAqICAgIFBhaXJ3aXNlIGRpc3RhbmNlIGJldHdlZW4gYSBzZXQgb2YgMkQgb3IgM0QgcG9pbnRzXG4gICAgKiBOT1RFOlxuICAgICogICAgV2hlbiBzdWJzdGl0dXRpbmcgY29lZmZpY2llbnRzIG9mIGEgbGluZShhLCBiIGFuZCBjKSwgdXNlIGF4ICsgYnkgKyBjID0gMCBpbnN0ZWFkIG9mIGF4ICsgYnkgPSBjXG4gICAgKiAgICBGb3IgcGFyYW1ldHJpYyBlcXVhdGlvbiBvZiBhIDNEIGxpbmUsIHgwLCB5MCwgejAsIGEsIGIsIGMgYXJlIGZyb206ICh44oiSeDAsIHniiJJ5MCwgeuKIknowKSA9IHQoYSwgYiwgYylcbiAgICAqXG4gICAgKiBTeW50YXg6XG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKFt4MSwgeTFdLCBbeDIsIHkyXSlcbiAgICAqLSAgIG1hdGguZGlzdGFuY2Uoe3BvaW50T25lWDogNCwgcG9pbnRPbmVZOiA1fSwge3BvaW50VHdvWDogMiwgcG9pbnRUd29ZOiA3fSlcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoW3gxLCB5MSwgejFdLCBbeDIsIHkyLCB6Ml0pXG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKHtwb2ludE9uZVg6IDQsIHBvaW50T25lWTogNSwgcG9pbnRPbmVaOiA4fSwge3BvaW50VHdvWDogMiwgcG9pbnRUd29ZOiA3LCBwb2ludFR3b1o6IDl9KVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbeDEsIHkxLCAuLi4gLCBOMV0sIFt4MiwgeTIsIC4uLiAsIE4yXSlcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoW1tBXSwgW0JdLCBbQ10uLi5dKVxuICAgICogICAgbWF0aC5kaXN0YW5jZShbeDEsIHkxXSwgW0xpbmVQdFgxLCBMaW5lUHRZMV0sIFtMaW5lUHRYMiwgTGluZVB0WTJdKVxuICAgICogICAgbWF0aC5kaXN0YW5jZSh7cG9pbnRYOiAxLCBwb2ludFk6IDR9LCB7bGluZU9uZVB0WDogNiwgbGluZU9uZVB0WTogM30sIHtsaW5lVHdvUHRYOiAyLCBsaW5lVHdvUHRZOiA4fSlcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoW3gxLCB5MSwgejFdLCBbTGluZVB0WDEsIExpbmVQdFkxLCBMaW5lUHRaMV0sIFtMaW5lUHRYMiwgTGluZVB0WTIsIExpbmVQdFoyXSlcbiAgICAqICAgIG1hdGguZGlzdGFuY2Uoe3BvaW50WDogMSwgcG9pbnRZOiA0LCBwb2ludFo6IDd9LCB7bGluZU9uZVB0WDogNiwgbGluZU9uZVB0WTogMywgbGluZU9uZVB0WjogNH0sIHtsaW5lVHdvUHRYOiAyLCBsaW5lVHdvUHRZOiA4LCBsaW5lVHdvUHRaOiA1fSlcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoW3gxLCB5MV0sIFt4Q29lZmZMaW5lLCB5Q29lZmZMaW5lLCBjb25zdGFudF0pXG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKHtwb2ludFg6IDEwLCBwb2ludFk6IDEwfSwge3hDb2VmZkxpbmU6IDgsIHlDb2VmZkxpbmU6IDEsIGNvbnN0YW50OiAzfSlcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoW3gxLCB5MSwgejFdLCBbeDAsIHkwLCB6MCwgYS10Q29lZmYsIGItdENvZWZmLCBjLXRDb2VmZl0pIHBvaW50IGFuZCBwYXJhbWV0cmljIGVxdWF0aW9uIG9mIDNEIGxpbmVcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoW3gsIHksIHpdLCBbeDAsIHkwLCB6MCwgYSwgYiwgY10pXG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKHtwb2ludFg6IDIsIHBvaW50WTogNSwgcG9pbnRaOiA5fSwge3gwOiA0LCB5MDogNiwgejA6IDMsIGE6IDQsIGI6IDIsIGM6IDB9KVxuICAgICpcbiAgICAqIEV4YW1wbGVzOlxuICAgICogICAgbWF0aC5kaXN0YW5jZShbMCwwXSwgWzQsNF0pICAgICAgICAgICAgICAgICAgICAgLy8gUmV0dXJucyA1LjY1NjlcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoXG4gICAgKiAgICAge3BvaW50T25lWDogMCwgcG9pbnRPbmVZOiAwfSxcbiAgICAqICAgICB7cG9pbnRUd29YOiAxMCwgcG9pbnRUd29ZOiAxMH0pICAgICAgICAgICAgICAgIC8vIFJldHVybnMgMTQuMTQyMTM1NjIzNzMwOTUxXG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKFsxLCAwLCAxXSwgWzQsIC0yLCAyXSkgICAgICAgICAgICAvLyBSZXR1cm5zIDMuNzQxNjZcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoXG4gICAgKiAgICAge3BvaW50T25lWDogNCwgcG9pbnRPbmVZOiA1LCBwb2ludE9uZVo6IDh9LFxuICAgICogICAgIHtwb2ludFR3b1g6IDIsIHBvaW50VHdvWTogNywgcG9pbnRUd29aOiA5fSkgICAgLy8gUmV0dXJucyAzXG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKFsxLCAwLCAxLCAwXSwgWzAsIC0xLCAwLCAtMV0pICAgICAvLyBSZXR1cm5zIDJcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoW1sxLCAyXSwgWzEsIDJdLCBbMSwgM11dKSAgICAgICAgIC8vIFJldHVybnMgWzAsIDEsIDFdXG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKFtbMSwyLDRdLCBbMSwyLDZdLCBbOCwxLDNdXSkgICAgICAvLyBSZXR1cm5zIFsyLCA3LjE0MTQyODQyODU0Mjg1LCA3LjY4MTE0NTc0Nzg2ODYwOF1cbiAgICAqICAgIG1hdGguZGlzdGFuY2UoWzEwLCAxMF0sIFs4LCAxLCAzXSkgICAgICAgICAgICAgIC8vIFJldHVybnMgMTEuNTM1MjMwMzE2Nzk2Mzg3XG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKFsxMCwgMTBdLCBbMiwgM10sIFstOCwgMF0pICAgICAgICAvLyBSZXR1cm5zIDguNzU5OTUzMTMwMzYyODQ3XG4gICAgKiAgICBtYXRoLmRpc3RhbmNlKFxuICAgICogICAgIHtwb2ludFg6IDEsIHBvaW50WTogNH0sXG4gICAgKiAgICAge2xpbmVPbmVQdFg6IDYsIGxpbmVPbmVQdFk6IDN9LFxuICAgICogICAgIHtsaW5lVHdvUHRYOiAyLCBsaW5lVHdvUHRZOiA4fSkgICAgICAgICAgICAgICAgLy8gUmV0dXJucyAyLjcyMDU0OTM3MjYyNDc0NFxuICAgICogICAgbWF0aC5kaXN0YW5jZShbMiwgMywgMV0sIFsxLCAxLCAyLCA1LCAwLCAxXSkgICAgLy8gUmV0dXJucyAyLjMyMDQ3NzQwNDQ2MTI4NTdcbiAgICAqICAgIG1hdGguZGlzdGFuY2UoXG4gICAgKiAgICAge3BvaW50WDogMiwgcG9pbnRZOiAzLCBwb2ludFo6IDF9LFxuICAgICogICAgIHt4MDogMSwgeTA6IDEsIHowOiAyLCBhOiA1LCBiOiAwLCBjOiAxfSAgICAgICAgLy8gUmV0dXJucyAyLjMyMDQ3NzQwNDQ2MTI4NTdcbiAgICAqXG4gICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IHwgT2JqZWN0fSB4ICAgIENvLW9yZGluYXRlcyBvZiBmaXJzdCBwb2ludFxuICAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeCB8IE9iamVjdH0geSAgICBDby1vcmRpbmF0ZXMgb2Ygc2Vjb25kIHBvaW50XG4gICAgKiBAcmV0dXJuIHtOdW1iZXIgfCBCaWdOdW1iZXJ9IFJldHVybnMgdGhlIGRpc3RhbmNlIGZyb20gdHdvL3RocmVlIHBvaW50c1xuICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSwgQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheUFycmF5KHgsIHksIHopIHtcbiAgICAgIC8vIFBvaW50IHRvIExpbmUgMkQgKHg9UG9pbnQsIHk9TGluZVBvaW50MSwgej1MaW5lUG9pbnQyKVxuICAgICAgaWYgKHgubGVuZ3RoID09PSAyICYmIHkubGVuZ3RoID09PSAyICYmIHoubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGlmICghXzJkKHgpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAyIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3IgZmlyc3QgYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghXzJkKHkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAyIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3Igc2Vjb25kIGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8yZCh6KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMiBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIHRoaXJkIGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgbSA9IGRpdmlkZVNjYWxhcihzdWJ0cmFjdCh6WzFdLCB6WzBdKSwgc3VidHJhY3QoeVsxXSwgeVswXSkpO1xuICAgICAgICB2YXIgeENvZWZmID0gbXVsdGlwbHlTY2FsYXIobXVsdGlwbHlTY2FsYXIobSwgbSksIHlbMF0pO1xuICAgICAgICB2YXIgeUNvZWZmID0gdW5hcnlNaW51cyhtdWx0aXBseVNjYWxhcihtLCB5WzBdKSk7XG4gICAgICAgIHZhciBjb25zdGFudCA9IHhbMV07XG4gICAgICAgIHJldHVybiBfZGlzdGFuY2VQb2ludExpbmUyRCh4WzBdLCB4WzFdLCB4Q29lZmYsIHlDb2VmZiwgY29uc3RhbnQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBBcmd1bWVudHM6IFRyeSBhZ2FpbicpO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ09iamVjdCwgT2JqZWN0LCBPYmplY3QnOiBmdW5jdGlvbiBPYmplY3RPYmplY3RPYmplY3QoeCwgeSwgeikge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHgpLmxlbmd0aCA9PT0gMiAmJiBPYmplY3Qua2V5cyh5KS5sZW5ndGggPT09IDIgJiYgT2JqZWN0LmtleXMoeikubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIGlmICghXzJkKHgpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWVzIG9mIHBvaW50WCBhbmQgcG9pbnRZIHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghXzJkKHkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWVzIG9mIGxpbmVPbmVQdFggYW5kIGxpbmVPbmVQdFkgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfMmQoeikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZXMgb2YgbGluZVR3b1B0WCBhbmQgbGluZVR3b1B0WSBzaG91bGQgYmUgbnVtYmVycyBvciBCaWdOdW1iZXJzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ3BvaW50WCcgaW4geCAmJiAncG9pbnRZJyBpbiB4ICYmICdsaW5lT25lUHRYJyBpbiB5ICYmICdsaW5lT25lUHRZJyBpbiB5ICYmICdsaW5lVHdvUHRYJyBpbiB6ICYmICdsaW5lVHdvUHRZJyBpbiB6KSB7XG4gICAgICAgICAgdmFyIG0gPSBkaXZpZGVTY2FsYXIoc3VidHJhY3Qoei5saW5lVHdvUHRZLCB6LmxpbmVUd29QdFgpLCBzdWJ0cmFjdCh5LmxpbmVPbmVQdFksIHkubGluZU9uZVB0WCkpO1xuICAgICAgICAgIHZhciB4Q29lZmYgPSBtdWx0aXBseVNjYWxhcihtdWx0aXBseVNjYWxhcihtLCBtKSwgeS5saW5lT25lUHRYKTtcbiAgICAgICAgICB2YXIgeUNvZWZmID0gdW5hcnlNaW51cyhtdWx0aXBseVNjYWxhcihtLCB5LmxpbmVPbmVQdFgpKTtcbiAgICAgICAgICB2YXIgY29uc3RhbnQgPSB4LnBvaW50WDtcbiAgICAgICAgICByZXR1cm4gX2Rpc3RhbmNlUG9pbnRMaW5lMkQoeC5wb2ludFgsIHgucG9pbnRZLCB4Q29lZmYsIHlDb2VmZiwgY29uc3RhbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0tleSBuYW1lcyBkbyBub3QgbWF0Y2gnKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBBcmd1bWVudHM6IFRyeSBhZ2FpbicpO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gUG9pbnQgdG8gTGluZSAyRCAoeD1bcG9pbnRYLCBwb2ludFldLCB5PVt4LWNvZWZmLCB5LWNvZWZmLCBjb25zdF0pXG4gICAgICBpZiAoeC5sZW5ndGggPT09IDIgJiYgeS5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgaWYgKCFfMmQoeCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBmaXJzdCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfM2QoeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDMgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBzZWNvbmQgYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfZGlzdGFuY2VQb2ludExpbmUyRCh4WzBdLCB4WzFdLCB5WzBdLCB5WzFdLCB5WzJdKTtcbiAgICAgIH0gZWxzZSBpZiAoeC5sZW5ndGggPT09IDMgJiYgeS5sZW5ndGggPT09IDYpIHtcbiAgICAgICAgLy8gUG9pbnQgdG8gTGluZSAzRFxuICAgICAgICBpZiAoIV8zZCh4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMyBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIGZpcnN0IGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV9wYXJhbWV0cmljTGluZSh5KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggNiBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIHNlY29uZCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIF9kaXN0YW5jZVBvaW50TGluZTNEKHhbMF0sIHhbMV0sIHhbMl0sIHlbMF0sIHlbMV0sIHlbMl0sIHlbM10sIHlbNF0sIHlbNV0pO1xuICAgICAgfSBlbHNlIGlmICh4Lmxlbmd0aCA9PT0geS5sZW5ndGggJiYgeC5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIFBvaW50IHRvIFBvaW50IE4tZGltZW5zaW9uc1xuICAgICAgICBpZiAoIV9jb250YWluc09ubHlOdW1iZXJzKHgpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQWxsIHZhbHVlcyBvZiBhbiBhcnJheSBzaG91bGQgYmUgbnVtYmVycyBvciBCaWdOdW1iZXJzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV9jb250YWluc09ubHlOdW1iZXJzKHkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQWxsIHZhbHVlcyBvZiBhbiBhcnJheSBzaG91bGQgYmUgbnVtYmVycyBvciBCaWdOdW1iZXJzJyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX2V1Y2xpZGVhbkRpc3RhbmNlKHgsIHkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBBcmd1bWVudHM6IFRyeSBhZ2FpbicpO1xuICAgICAgfVxuICAgIH0sXG4gICAgJ09iamVjdCwgT2JqZWN0JzogZnVuY3Rpb24gT2JqZWN0T2JqZWN0KHgsIHkpIHtcbiAgICAgIGlmIChPYmplY3Qua2V5cyh4KS5sZW5ndGggPT09IDIgJiYgT2JqZWN0LmtleXMoeSkubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIGlmICghXzJkKHgpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWVzIG9mIHBvaW50WCBhbmQgcG9pbnRZIHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghXzNkKHkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWVzIG9mIHhDb2VmZkxpbmUsIHlDb2VmZkxpbmUgYW5kIGNvbnN0YW50IHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgncG9pbnRYJyBpbiB4ICYmICdwb2ludFknIGluIHggJiYgJ3hDb2VmZkxpbmUnIGluIHkgJiYgJ3lDb2VmZkxpbmUnIGluIHkgJiYgJ2NvbnN0YW50JyBpbiB5KSB7XG4gICAgICAgICAgcmV0dXJuIF9kaXN0YW5jZVBvaW50TGluZTJEKHgucG9pbnRYLCB4LnBvaW50WSwgeS54Q29lZmZMaW5lLCB5LnlDb2VmZkxpbmUsIHkuY29uc3RhbnQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0tleSBuYW1lcyBkbyBub3QgbWF0Y2gnKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChPYmplY3Qua2V5cyh4KS5sZW5ndGggPT09IDMgJiYgT2JqZWN0LmtleXMoeSkubGVuZ3RoID09PSA2KSB7XG4gICAgICAgIC8vIFBvaW50IHRvIExpbmUgM0RcbiAgICAgICAgaWYgKCFfM2QoeCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZXMgb2YgcG9pbnRYLCBwb2ludFkgYW5kIHBvaW50WiBzaG91bGQgYmUgbnVtYmVycyBvciBCaWdOdW1iZXJzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV9wYXJhbWV0cmljTGluZSh5KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiB4MCwgeTAsIHowLCBhLCBiIGFuZCBjIHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgncG9pbnRYJyBpbiB4ICYmICdwb2ludFknIGluIHggJiYgJ3gwJyBpbiB5ICYmICd5MCcgaW4geSAmJiAnejAnIGluIHkgJiYgJ2EnIGluIHkgJiYgJ2InIGluIHkgJiYgJ2MnIGluIHkpIHtcbiAgICAgICAgICByZXR1cm4gX2Rpc3RhbmNlUG9pbnRMaW5lM0QoeC5wb2ludFgsIHgucG9pbnRZLCB4LnBvaW50WiwgeS54MCwgeS55MCwgeS56MCwgeS5hLCB5LmIsIHkuYyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignS2V5IG5hbWVzIGRvIG5vdCBtYXRjaCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKE9iamVjdC5rZXlzKHgpLmxlbmd0aCA9PT0gMiAmJiBPYmplY3Qua2V5cyh5KS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgLy8gUG9pbnQgdG8gUG9pbnQgMkRcbiAgICAgICAgaWYgKCFfMmQoeCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZXMgb2YgcG9pbnRPbmVYIGFuZCBwb2ludE9uZVkgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfMmQoeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZXMgb2YgcG9pbnRUd29YIGFuZCBwb2ludFR3b1kgc2hvdWxkIGJlIG51bWJlcnMgb3IgQmlnTnVtYmVycycpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCdwb2ludE9uZVgnIGluIHggJiYgJ3BvaW50T25lWScgaW4geCAmJiAncG9pbnRUd29YJyBpbiB5ICYmICdwb2ludFR3b1knIGluIHkpIHtcbiAgICAgICAgICByZXR1cm4gX2V1Y2xpZGVhbkRpc3RhbmNlKFt4LnBvaW50T25lWCwgeC5wb2ludE9uZVldLCBbeS5wb2ludFR3b1gsIHkucG9pbnRUd29ZXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignS2V5IG5hbWVzIGRvIG5vdCBtYXRjaCcpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKE9iamVjdC5rZXlzKHgpLmxlbmd0aCA9PT0gMyAmJiBPYmplY3Qua2V5cyh5KS5sZW5ndGggPT09IDMpIHtcbiAgICAgICAgLy8gUG9pbnQgdG8gUG9pbnQgM0RcbiAgICAgICAgaWYgKCFfM2QoeCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZXMgb2YgcG9pbnRPbmVYLCBwb2ludE9uZVkgYW5kIHBvaW50T25lWiBzaG91bGQgYmUgbnVtYmVycyBvciBCaWdOdW1iZXJzJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8zZCh5KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlcyBvZiBwb2ludFR3b1gsIHBvaW50VHdvWSBhbmQgcG9pbnRUd29aIHNob3VsZCBiZSBudW1iZXJzIG9yIEJpZ051bWJlcnMnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgncG9pbnRPbmVYJyBpbiB4ICYmICdwb2ludE9uZVknIGluIHggJiYgJ3BvaW50T25lWicgaW4geCAmJiAncG9pbnRUd29YJyBpbiB5ICYmICdwb2ludFR3b1knIGluIHkgJiYgJ3BvaW50VHdvWicgaW4geSkge1xuICAgICAgICAgIHJldHVybiBfZXVjbGlkZWFuRGlzdGFuY2UoW3gucG9pbnRPbmVYLCB4LnBvaW50T25lWSwgeC5wb2ludE9uZVpdLCBbeS5wb2ludFR3b1gsIHkucG9pbnRUd29ZLCB5LnBvaW50VHdvWl0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0tleSBuYW1lcyBkbyBub3QgbWF0Y2gnKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBBcmd1bWVudHM6IFRyeSBhZ2FpbicpO1xuICAgICAgfVxuICAgIH0sXG4gICAgQXJyYXk6IGZ1bmN0aW9uIEFycmF5KGFycikge1xuICAgICAgaWYgKCFfcGFpcndpc2UoYXJyKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmNvcnJlY3QgYXJyYXkgZm9ybWF0IGVudGVyZWQgZm9yIHBhaXJ3aXNlIGRpc3RhbmNlIGNhbGN1bGF0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfZGlzdGFuY2VQYWlyd2lzZShhcnIpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gX2lzTnVtYmVyKGEpIHtcbiAgICAvLyBkaXN0YW5jZSBzdXBwb3J0cyBudW1iZXJzIGFuZCBiaWdudW1iZXJzXG4gICAgcmV0dXJuIHR5cGVvZiBhID09PSAnbnVtYmVyJyB8fCAoMCwgX2lzLmlzQmlnTnVtYmVyKShhKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF8yZChhKSB7XG4gICAgLy8gY2hlY2tzIGlmIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGFyZSBjb3JyZWN0IGluIGNvdW50IGFuZCBhcmUgdmFsaWQgKHNob3VsZCBiZSBudW1iZXJzKVxuICAgIGlmIChhLmNvbnN0cnVjdG9yICE9PSBBcnJheSkge1xuICAgICAgYSA9IF9vYmplY3RUb0FycmF5KGEpO1xuICAgIH1cblxuICAgIHJldHVybiBfaXNOdW1iZXIoYVswXSkgJiYgX2lzTnVtYmVyKGFbMV0pO1xuICB9XG5cbiAgZnVuY3Rpb24gXzNkKGEpIHtcbiAgICAvLyBjaGVja3MgaWYgdGhlIG51bWJlciBvZiBhcmd1bWVudHMgYXJlIGNvcnJlY3QgaW4gY291bnQgYW5kIGFyZSB2YWxpZCAoc2hvdWxkIGJlIG51bWJlcnMpXG4gICAgaWYgKGEuY29uc3RydWN0b3IgIT09IEFycmF5KSB7XG4gICAgICBhID0gX29iamVjdFRvQXJyYXkoYSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIF9pc051bWJlcihhWzBdKSAmJiBfaXNOdW1iZXIoYVsxXSkgJiYgX2lzTnVtYmVyKGFbMl0pO1xuICB9XG5cbiAgZnVuY3Rpb24gX2NvbnRhaW5zT25seU51bWJlcnMoYSkge1xuICAgIC8vIGNoZWNrcyBpZiB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBhcmUgY29ycmVjdCBpbiBjb3VudCBhbmQgYXJlIHZhbGlkIChzaG91bGQgYmUgbnVtYmVycylcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICAgIGEgPSBfb2JqZWN0VG9BcnJheShhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYS5ldmVyeShfaXNOdW1iZXIpO1xuICB9XG5cbiAgZnVuY3Rpb24gX3BhcmFtZXRyaWNMaW5lKGEpIHtcbiAgICBpZiAoYS5jb25zdHJ1Y3RvciAhPT0gQXJyYXkpIHtcbiAgICAgIGEgPSBfb2JqZWN0VG9BcnJheShhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gX2lzTnVtYmVyKGFbMF0pICYmIF9pc051bWJlcihhWzFdKSAmJiBfaXNOdW1iZXIoYVsyXSkgJiYgX2lzTnVtYmVyKGFbM10pICYmIF9pc051bWJlcihhWzRdKSAmJiBfaXNOdW1iZXIoYVs1XSk7XG4gIH1cblxuICBmdW5jdGlvbiBfb2JqZWN0VG9BcnJheShvKSB7XG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvKTtcbiAgICB2YXIgYSA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhLnB1c2gob1trZXlzW2ldXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGE7XG4gIH1cblxuICBmdW5jdGlvbiBfcGFpcndpc2UoYSkge1xuICAgIC8vIGNoZWNrcyBmb3IgdmFsaWQgYXJndW1lbnRzIHBhc3NlZCB0byBfZGlzdGFuY2VQYWlyd2lzZShBcnJheSlcbiAgICBpZiAoYVswXS5sZW5ndGggPT09IDIgJiYgX2lzTnVtYmVyKGFbMF1bMF0pICYmIF9pc051bWJlcihhWzBdWzFdKSkge1xuICAgICAgaWYgKGEuc29tZShmdW5jdGlvbiAoYUkpIHtcbiAgICAgICAgcmV0dXJuIGFJLmxlbmd0aCAhPT0gMiB8fCAhX2lzTnVtYmVyKGFJWzBdKSB8fCAhX2lzTnVtYmVyKGFJWzFdKTtcbiAgICAgIH0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGFbMF0ubGVuZ3RoID09PSAzICYmIF9pc051bWJlcihhWzBdWzBdKSAmJiBfaXNOdW1iZXIoYVswXVsxXSkgJiYgX2lzTnVtYmVyKGFbMF1bMl0pKSB7XG4gICAgICBpZiAoYS5zb21lKGZ1bmN0aW9uIChhSSkge1xuICAgICAgICByZXR1cm4gYUkubGVuZ3RoICE9PSAzIHx8ICFfaXNOdW1iZXIoYUlbMF0pIHx8ICFfaXNOdW1iZXIoYUlbMV0pIHx8ICFfaXNOdW1iZXIoYUlbMl0pO1xuICAgICAgfSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBfZGlzdGFuY2VQb2ludExpbmUyRCh4LCB5LCBhLCBiLCBjKSB7XG4gICAgdmFyIG51bSA9IGFicyhhZGRTY2FsYXIoYWRkU2NhbGFyKG11bHRpcGx5U2NhbGFyKGEsIHgpLCBtdWx0aXBseVNjYWxhcihiLCB5KSksIGMpKTtcbiAgICB2YXIgZGVuID0gc3FydChhZGRTY2FsYXIobXVsdGlwbHlTY2FsYXIoYSwgYSksIG11bHRpcGx5U2NhbGFyKGIsIGIpKSk7XG4gICAgcmV0dXJuIGRpdmlkZVNjYWxhcihudW0sIGRlbik7XG4gIH1cblxuICBmdW5jdGlvbiBfZGlzdGFuY2VQb2ludExpbmUzRCh4LCB5LCB6LCB4MCwgeTAsIHowLCBhLCBiLCBjKSB7XG4gICAgdmFyIG51bSA9IFtzdWJ0cmFjdChtdWx0aXBseVNjYWxhcihzdWJ0cmFjdCh5MCwgeSksIGMpLCBtdWx0aXBseVNjYWxhcihzdWJ0cmFjdCh6MCwgeiksIGIpKSwgc3VidHJhY3QobXVsdGlwbHlTY2FsYXIoc3VidHJhY3QoejAsIHopLCBhKSwgbXVsdGlwbHlTY2FsYXIoc3VidHJhY3QoeDAsIHgpLCBjKSksIHN1YnRyYWN0KG11bHRpcGx5U2NhbGFyKHN1YnRyYWN0KHgwLCB4KSwgYiksIG11bHRpcGx5U2NhbGFyKHN1YnRyYWN0KHkwLCB5KSwgYSkpXTtcbiAgICBudW0gPSBzcXJ0KGFkZFNjYWxhcihhZGRTY2FsYXIobXVsdGlwbHlTY2FsYXIobnVtWzBdLCBudW1bMF0pLCBtdWx0aXBseVNjYWxhcihudW1bMV0sIG51bVsxXSkpLCBtdWx0aXBseVNjYWxhcihudW1bMl0sIG51bVsyXSkpKTtcbiAgICB2YXIgZGVuID0gc3FydChhZGRTY2FsYXIoYWRkU2NhbGFyKG11bHRpcGx5U2NhbGFyKGEsIGEpLCBtdWx0aXBseVNjYWxhcihiLCBiKSksIG11bHRpcGx5U2NhbGFyKGMsIGMpKSk7XG4gICAgcmV0dXJuIGRpdmlkZVNjYWxhcihudW0sIGRlbik7XG4gIH1cblxuICBmdW5jdGlvbiBfZXVjbGlkZWFuRGlzdGFuY2UoeCwgeSkge1xuICAgIHZhciB2ZWN0b3JTaXplID0geC5sZW5ndGg7XG4gICAgdmFyIHJlc3VsdCA9IDA7XG4gICAgdmFyIGRpZmYgPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2ZWN0b3JTaXplOyBpKyspIHtcbiAgICAgIGRpZmYgPSBzdWJ0cmFjdCh4W2ldLCB5W2ldKTtcbiAgICAgIHJlc3VsdCA9IGFkZFNjYWxhcihtdWx0aXBseVNjYWxhcihkaWZmLCBkaWZmKSwgcmVzdWx0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3FydChyZXN1bHQpO1xuICB9XG5cbiAgZnVuY3Rpb24gX2Rpc3RhbmNlUGFpcndpc2UoYSkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgcG9pbnRBID0gW107XG4gICAgdmFyIHBvaW50QiA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgZm9yICh2YXIgaiA9IGkgKyAxOyBqIDwgYS5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAoYVswXS5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICBwb2ludEEgPSBbYVtpXVswXSwgYVtpXVsxXV07XG4gICAgICAgICAgcG9pbnRCID0gW2Fbal1bMF0sIGFbal1bMV1dO1xuICAgICAgICB9IGVsc2UgaWYgKGFbMF0ubGVuZ3RoID09PSAzKSB7XG4gICAgICAgICAgcG9pbnRBID0gW2FbaV1bMF0sIGFbaV1bMV0sIGFbaV1bMl1dO1xuICAgICAgICAgIHBvaW50QiA9IFthW2pdWzBdLCBhW2pdWzFdLCBhW2pdWzJdXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdC5wdXNoKF9ldWNsaWRlYW5EaXN0YW5jZShwb2ludEEsIHBvaW50QikpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVEaXN0YW5jZSA9IGNyZWF0ZURpc3RhbmNlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJbnRlcnNlY3QgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdpbnRlcnNlY3QnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ2FicycsICdhZGQnLCAnYWRkU2NhbGFyJywgJ21hdHJpeCcsICdtdWx0aXBseScsICdtdWx0aXBseVNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAnc3VidHJhY3QnLCAnc21hbGxlcicsICdlcXVhbFNjYWxhciddO1xudmFyIGNyZWF0ZUludGVyc2VjdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIGFicyA9IF9yZWYuYWJzLFxuICAgICAgYWRkID0gX3JlZi5hZGQsXG4gICAgICBhZGRTY2FsYXIgPSBfcmVmLmFkZFNjYWxhcixcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgbXVsdGlwbHlTY2FsYXIgPSBfcmVmLm11bHRpcGx5U2NhbGFyLFxuICAgICAgZGl2aWRlU2NhbGFyID0gX3JlZi5kaXZpZGVTY2FsYXIsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBzbWFsbGVyID0gX3JlZi5zbWFsbGVyLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBwb2ludCBvZiBpbnRlcnNlY3Rpb24gb2YgdHdvIGxpbmVzIGluIHR3byBvciB0aHJlZSBkaW1lbnNpb25zXG4gICAqIGFuZCBvZiBhIGxpbmUgYW5kIGEgcGxhbmUgaW4gdGhyZWUgZGltZW5zaW9ucy4gVGhlIGlucHV0cyBhcmUgaW4gdGhlIGZvcm0gb2ZcbiAgICogYXJyYXlzIG9yIDEgZGltZW5zaW9uYWwgbWF0cmljZXMuIFRoZSBsaW5lIGludGVyc2VjdGlvbiBmdW5jdGlvbnMgcmV0dXJuIG51bGxcbiAgICogaWYgdGhlIGxpbmVzIGRvIG5vdCBtZWV0LlxuICAgKlxuICAgKiBOb3RlOiBGaWxsIHRoZSBwbGFuZSBjb2VmZmljaWVudHMgYXMgYHggKyB5ICsgeiA9IGNgIGFuZCBub3QgYXMgYHggKyB5ICsgeiArIGMgPSAwYC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmludGVyc2VjdChlbmRQb2ludDFMaW5lMSwgZW5kUG9pbnQyTGluZTEsIGVuZFBvaW50MUxpbmUyLCBlbmRQb2ludDJMaW5lMilcbiAgICogICAgbWF0aC5pbnRlcnNlY3QoZW5kUG9pbnQxLCBlbmRQb2ludDIsIHBsYW5lQ29lZmZpY2llbnRzKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5pbnRlcnNlY3QoWzAsIDBdLCBbMTAsIDEwXSwgWzEwLCAwXSwgWzAsIDEwXSkgICAgICAgICAgICAgIC8vIFJldHVybnMgWzUsIDVdXG4gICAqICAgIG1hdGguaW50ZXJzZWN0KFswLCAwLCAwXSwgWzEwLCAxMCwgMF0sIFsxMCwgMCwgMF0sIFswLCAxMCwgMF0pICAvLyBSZXR1cm5zIFs1LCA1LCAwXVxuICAgKiAgICBtYXRoLmludGVyc2VjdChbMSwgMCwgMV0sICBbNCwgLTIsIDJdLCBbMSwgMSwgMSwgNl0pICAgICAgICAgICAgLy8gUmV0dXJucyBbNywgLTQsIDNdXG4gICAqXG4gICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSB3ICAgQ28tb3JkaW5hdGVzIG9mIGZpcnN0IGVuZC1wb2ludCBvZiBmaXJzdCBsaW5lXG4gICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSB4ICAgQ28tb3JkaW5hdGVzIG9mIHNlY29uZCBlbmQtcG9pbnQgb2YgZmlyc3QgbGluZVxuICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0geSAgIENvLW9yZGluYXRlcyBvZiBmaXJzdCBlbmQtcG9pbnQgb2Ygc2Vjb25kIGxpbmVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUiBDby1lZmZpY2llbnRzIG9mIHRoZSBwbGFuZSdzIGVxdWF0aW9uXG4gICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSB6ICAgQ28tb3JkaW5hdGVzIG9mIHNlY29uZCBlbmQtcG9pbnQgb2Ygc2Vjb25kIGxpbmVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUiBudWxsIGlmIHRoZSBjYWxjdWxhdGlvbiBpcyBmb3IgbGluZSBhbmQgcGxhbmVcbiAgICogQHJldHVybiB7QXJyYXl9ICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBwb2ludCBvZiBpbnRlcnNlY3Rpb24gb2YgbGluZXMvbGluZXMtcGxhbmVzXG4gICAqL1xuICB2YXIgaW50ZXJzZWN0ID0gdHlwZWQoJ2ludGVyc2VjdCcsIHtcbiAgICAnQXJyYXksIEFycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXlBcnJheSh4LCB5LCBwbGFuZSkge1xuICAgICAgaWYgKCFfM2QoeCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAzIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3IgZmlyc3QgYXJndW1lbnQnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFfM2QoeSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAzIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3Igc2Vjb25kIGFyZ3VtZW50Jyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghXzRkKHBsYW5lKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDQgbnVtYmVycyBleHBlY3RlZCBhcyB0aGlyZCBhcmd1bWVudCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX2ludGVyc2VjdExpbmVQbGFuZSh4WzBdLCB4WzFdLCB4WzJdLCB5WzBdLCB5WzFdLCB5WzJdLCBwbGFuZVswXSwgcGxhbmVbMV0sIHBsYW5lWzJdLCBwbGFuZVszXSk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5LCBBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5QXJyYXlBcnJheSh3LCB4LCB5LCB6KSB7XG4gICAgICBpZiAody5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgaWYgKCFfMmQodykpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBmaXJzdCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfMmQoeCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDIgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBzZWNvbmQgYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghXzJkKHkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAyIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3IgdGhpcmQgYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghXzJkKHopKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgd2l0aCAyIG51bWJlcnMgb3IgQmlnTnVtYmVycyBleHBlY3RlZCBmb3IgZm91cnRoIGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gX2ludGVyc2VjdDJkKHcsIHgsIHksIHopO1xuICAgICAgfSBlbHNlIGlmICh3Lmxlbmd0aCA9PT0gMykge1xuICAgICAgICBpZiAoIV8zZCh3KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMyBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIGZpcnN0IGFyZ3VtZW50Jyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIV8zZCh4KSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IHdpdGggMyBudW1iZXJzIG9yIEJpZ051bWJlcnMgZXhwZWN0ZWQgZm9yIHNlY29uZCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfM2QoeSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDMgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciB0aGlyZCBhcmd1bWVudCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFfM2QoeikpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSB3aXRoIDMgbnVtYmVycyBvciBCaWdOdW1iZXJzIGV4cGVjdGVkIGZvciBmb3VydGggYXJndW1lbnQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBfaW50ZXJzZWN0M2Qod1swXSwgd1sxXSwgd1syXSwgeFswXSwgeFsxXSwgeFsyXSwgeVswXSwgeVsxXSwgeVsyXSwgelswXSwgelsxXSwgelsyXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheXMgd2l0aCB0d28gb3IgdGhlZSBkaW1lbnNpb25hbCBwb2ludHMgZXhwZWN0ZWQnKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdNYXRyaXgsIE1hdHJpeCwgTWF0cml4JzogZnVuY3Rpb24gTWF0cml4TWF0cml4TWF0cml4KHgsIHksIHBsYW5lKSB7XG4gICAgICByZXR1cm4gbWF0cml4KGludGVyc2VjdCh4LnZhbHVlT2YoKSwgeS52YWx1ZU9mKCksIHBsYW5lLnZhbHVlT2YoKSkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgTWF0cml4LCBNYXRyaXgsIE1hdHJpeCc6IGZ1bmN0aW9uIE1hdHJpeE1hdHJpeE1hdHJpeE1hdHJpeCh3LCB4LCB5LCB6KSB7XG4gICAgICAvLyBUT0RPOiBvdXRwdXQgbWF0cml4IHR5cGUgc2hvdWxkIG1hdGNoIGlucHV0IG1hdHJpeCB0eXBlXG4gICAgICByZXR1cm4gbWF0cml4KGludGVyc2VjdCh3LnZhbHVlT2YoKSwgeC52YWx1ZU9mKCksIHkudmFsdWVPZigpLCB6LnZhbHVlT2YoKSkpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gX2lzTnVtZXJpYyhhKSB7XG4gICAgLy8gaW50ZXJzZWN0IHN1cHBvcnRzIG51bWJlcnMgYW5kIGJpZ251bWJlcnNcbiAgICByZXR1cm4gdHlwZW9mIGEgPT09ICdudW1iZXInIHx8ICgwLCBfaXMuaXNCaWdOdW1iZXIpKGEpO1xuICB9XG5cbiAgZnVuY3Rpb24gXzJkKHgpIHtcbiAgICByZXR1cm4geC5sZW5ndGggPT09IDIgJiYgX2lzTnVtZXJpYyh4WzBdKSAmJiBfaXNOdW1lcmljKHhbMV0pO1xuICB9XG5cbiAgZnVuY3Rpb24gXzNkKHgpIHtcbiAgICByZXR1cm4geC5sZW5ndGggPT09IDMgJiYgX2lzTnVtZXJpYyh4WzBdKSAmJiBfaXNOdW1lcmljKHhbMV0pICYmIF9pc051bWVyaWMoeFsyXSk7XG4gIH1cblxuICBmdW5jdGlvbiBfNGQoeCkge1xuICAgIHJldHVybiB4Lmxlbmd0aCA9PT0gNCAmJiBfaXNOdW1lcmljKHhbMF0pICYmIF9pc051bWVyaWMoeFsxXSkgJiYgX2lzTnVtZXJpYyh4WzJdKSAmJiBfaXNOdW1lcmljKHhbM10pO1xuICB9XG5cbiAgZnVuY3Rpb24gX2ludGVyc2VjdDJkKHAxYSwgcDFiLCBwMmEsIHAyYikge1xuICAgIHZhciBvMSA9IHAxYTtcbiAgICB2YXIgbzIgPSBwMmE7XG4gICAgdmFyIGQxID0gc3VidHJhY3QobzEsIHAxYik7XG4gICAgdmFyIGQyID0gc3VidHJhY3QobzIsIHAyYik7XG4gICAgdmFyIGRldCA9IHN1YnRyYWN0KG11bHRpcGx5U2NhbGFyKGQxWzBdLCBkMlsxXSksIG11bHRpcGx5U2NhbGFyKGQyWzBdLCBkMVsxXSkpO1xuXG4gICAgaWYgKHNtYWxsZXIoYWJzKGRldCksIGNvbmZpZy5lcHNpbG9uKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIGQyMG8xMSA9IG11bHRpcGx5U2NhbGFyKGQyWzBdLCBvMVsxXSk7XG4gICAgdmFyIGQyMW8xMCA9IG11bHRpcGx5U2NhbGFyKGQyWzFdLCBvMVswXSk7XG4gICAgdmFyIGQyMG8yMSA9IG11bHRpcGx5U2NhbGFyKGQyWzBdLCBvMlsxXSk7XG4gICAgdmFyIGQyMW8yMCA9IG11bHRpcGx5U2NhbGFyKGQyWzFdLCBvMlswXSk7XG4gICAgdmFyIHQgPSBkaXZpZGVTY2FsYXIoYWRkU2NhbGFyKHN1YnRyYWN0KHN1YnRyYWN0KGQyMG8xMSwgZDIxbzEwKSwgZDIwbzIxKSwgZDIxbzIwKSwgZGV0KTtcbiAgICByZXR1cm4gYWRkKG11bHRpcGx5KGQxLCB0KSwgbzEpO1xuICB9XG5cbiAgZnVuY3Rpb24gX2ludGVyc2VjdDNkSGVscGVyKGEsIGIsIGMsIGQsIGUsIGYsIGcsIGgsIGksIGosIGssIGwpIHtcbiAgICAvLyAoYSAtIGIpKihjIC0gZCkgKyAoZSAtIGYpKihnIC0gaCkgKyAoaSAtIGopKihrIC0gbClcbiAgICB2YXIgYWRkMSA9IG11bHRpcGx5U2NhbGFyKHN1YnRyYWN0KGEsIGIpLCBzdWJ0cmFjdChjLCBkKSk7XG4gICAgdmFyIGFkZDIgPSBtdWx0aXBseVNjYWxhcihzdWJ0cmFjdChlLCBmKSwgc3VidHJhY3QoZywgaCkpO1xuICAgIHZhciBhZGQzID0gbXVsdGlwbHlTY2FsYXIoc3VidHJhY3QoaSwgaiksIHN1YnRyYWN0KGssIGwpKTtcbiAgICByZXR1cm4gYWRkU2NhbGFyKGFkZFNjYWxhcihhZGQxLCBhZGQyKSwgYWRkMyk7XG4gIH1cblxuICBmdW5jdGlvbiBfaW50ZXJzZWN0M2QoeDEsIHkxLCB6MSwgeDIsIHkyLCB6MiwgeDMsIHkzLCB6MywgeDQsIHk0LCB6NCkge1xuICAgIHZhciBkMTM0MyA9IF9pbnRlcnNlY3QzZEhlbHBlcih4MSwgeDMsIHg0LCB4MywgeTEsIHkzLCB5NCwgeTMsIHoxLCB6MywgejQsIHozKTtcblxuICAgIHZhciBkNDMyMSA9IF9pbnRlcnNlY3QzZEhlbHBlcih4NCwgeDMsIHgyLCB4MSwgeTQsIHkzLCB5MiwgeTEsIHo0LCB6MywgejIsIHoxKTtcblxuICAgIHZhciBkMTMyMSA9IF9pbnRlcnNlY3QzZEhlbHBlcih4MSwgeDMsIHgyLCB4MSwgeTEsIHkzLCB5MiwgeTEsIHoxLCB6MywgejIsIHoxKTtcblxuICAgIHZhciBkNDM0MyA9IF9pbnRlcnNlY3QzZEhlbHBlcih4NCwgeDMsIHg0LCB4MywgeTQsIHkzLCB5NCwgeTMsIHo0LCB6MywgejQsIHozKTtcblxuICAgIHZhciBkMjEyMSA9IF9pbnRlcnNlY3QzZEhlbHBlcih4MiwgeDEsIHgyLCB4MSwgeTIsIHkxLCB5MiwgeTEsIHoyLCB6MSwgejIsIHoxKTtcblxuICAgIHZhciB0YSA9IGRpdmlkZVNjYWxhcihzdWJ0cmFjdChtdWx0aXBseVNjYWxhcihkMTM0MywgZDQzMjEpLCBtdWx0aXBseVNjYWxhcihkMTMyMSwgZDQzNDMpKSwgc3VidHJhY3QobXVsdGlwbHlTY2FsYXIoZDIxMjEsIGQ0MzQzKSwgbXVsdGlwbHlTY2FsYXIoZDQzMjEsIGQ0MzIxKSkpO1xuICAgIHZhciB0YiA9IGRpdmlkZVNjYWxhcihhZGRTY2FsYXIoZDEzNDMsIG11bHRpcGx5U2NhbGFyKHRhLCBkNDMyMSkpLCBkNDM0Myk7XG4gICAgdmFyIHBheCA9IGFkZFNjYWxhcih4MSwgbXVsdGlwbHlTY2FsYXIodGEsIHN1YnRyYWN0KHgyLCB4MSkpKTtcbiAgICB2YXIgcGF5ID0gYWRkU2NhbGFyKHkxLCBtdWx0aXBseVNjYWxhcih0YSwgc3VidHJhY3QoeTIsIHkxKSkpO1xuICAgIHZhciBwYXogPSBhZGRTY2FsYXIoejEsIG11bHRpcGx5U2NhbGFyKHRhLCBzdWJ0cmFjdCh6MiwgejEpKSk7XG4gICAgdmFyIHBieCA9IGFkZFNjYWxhcih4MywgbXVsdGlwbHlTY2FsYXIodGIsIHN1YnRyYWN0KHg0LCB4MykpKTtcbiAgICB2YXIgcGJ5ID0gYWRkU2NhbGFyKHkzLCBtdWx0aXBseVNjYWxhcih0Yiwgc3VidHJhY3QoeTQsIHkzKSkpO1xuICAgIHZhciBwYnogPSBhZGRTY2FsYXIoejMsIG11bHRpcGx5U2NhbGFyKHRiLCBzdWJ0cmFjdCh6NCwgejMpKSk7XG5cbiAgICBpZiAoZXF1YWxTY2FsYXIocGF4LCBwYngpICYmIGVxdWFsU2NhbGFyKHBheSwgcGJ5KSAmJiBlcXVhbFNjYWxhcihwYXosIHBieikpIHtcbiAgICAgIHJldHVybiBbcGF4LCBwYXksIHBhel07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF9pbnRlcnNlY3RMaW5lUGxhbmUoeDEsIHkxLCB6MSwgeDIsIHkyLCB6MiwgeCwgeSwgeiwgYykge1xuICAgIHZhciB4MXggPSBtdWx0aXBseVNjYWxhcih4MSwgeCk7XG4gICAgdmFyIHgyeCA9IG11bHRpcGx5U2NhbGFyKHgyLCB4KTtcbiAgICB2YXIgeTF5ID0gbXVsdGlwbHlTY2FsYXIoeTEsIHkpO1xuICAgIHZhciB5MnkgPSBtdWx0aXBseVNjYWxhcih5MiwgeSk7XG4gICAgdmFyIHoxeiA9IG11bHRpcGx5U2NhbGFyKHoxLCB6KTtcbiAgICB2YXIgejJ6ID0gbXVsdGlwbHlTY2FsYXIoejIsIHopO1xuICAgIHZhciB0ID0gZGl2aWRlU2NhbGFyKHN1YnRyYWN0KHN1YnRyYWN0KHN1YnRyYWN0KGMsIHgxeCksIHkxeSksIHoxeiksIHN1YnRyYWN0KHN1YnRyYWN0KHN1YnRyYWN0KGFkZFNjYWxhcihhZGRTY2FsYXIoeDJ4LCB5MnkpLCB6MnopLCB4MXgpLCB5MXkpLCB6MXopKTtcbiAgICB2YXIgcHggPSBhZGRTY2FsYXIoeDEsIG11bHRpcGx5U2NhbGFyKHQsIHN1YnRyYWN0KHgyLCB4MSkpKTtcbiAgICB2YXIgcHkgPSBhZGRTY2FsYXIoeTEsIG11bHRpcGx5U2NhbGFyKHQsIHN1YnRyYWN0KHkyLCB5MSkpKTtcbiAgICB2YXIgcHogPSBhZGRTY2FsYXIoejEsIG11bHRpcGx5U2NhbGFyKHQsIHN1YnRyYWN0KHoyLCB6MSkpKTtcbiAgICByZXR1cm4gW3B4LCBweSwgcHpdOyAvLyBUT0RPOiBBZGQgY2FzZXMgd2hlbiBsaW5lIGlzIHBhcmFsbGVsIHRvIHRoZSBwbGFuZTpcbiAgICAvLyAgICAgICAoYSkgbm8gaW50ZXJzZWN0aW9uLFxuICAgIC8vICAgICAgIChiKSBsaW5lIGNvbnRhaW5lZCBpbiBwbGFuZVxuICB9XG5cbiAgcmV0dXJuIGludGVyc2VjdDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVJbnRlcnNlY3QgPSBjcmVhdGVJbnRlcnNlY3Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFuZCA9IHZvaWQgMDtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDJcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMVwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNlwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYW5kJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICd6ZXJvcycsICdub3QnXTtcbnZhciBjcmVhdGVBbmQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICB6ZXJvcyA9IF9yZWYuemVyb3MsXG4gICAgICBub3QgPSBfcmVmLm5vdDtcbiAgdmFyIGFsZ29yaXRobTAyID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDYgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMDYpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTEgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMTEpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIExvZ2ljYWwgYGFuZGAuIFRlc3Qgd2hldGhlciB0d28gdmFsdWVzIGFyZSBib3RoIGRlZmluZWQgd2l0aCBhIG5vbnplcm8vbm9uZW1wdHkgdmFsdWUuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hbmQoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYW5kKDIsIDQpICAgLy8gcmV0dXJucyB0cnVlXG4gICAqXG4gICAqICAgIGEgPSBbMiwgMCwgMF1cbiAgICogICAgYiA9IFszLCA3LCAwXVxuICAgKiAgICBjID0gMFxuICAgKlxuICAgKiAgICBtYXRoLmFuZChhLCBiKSAgIC8vIHJldHVybnMgW3RydWUsIGZhbHNlLCBmYWxzZV1cbiAgICogICAgbWF0aC5hbmQoYSwgYykgICAvLyByZXR1cm5zIFtmYWxzZSwgZmFsc2UsIGZhbHNlXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbm90LCBvciwgeG9yXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggRmlyc3QgdmFsdWUgdG8gY2hlY2tcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gY2hlY2tcbiAgICogQHJldHVybiB7Ym9vbGVhbiB8IEFycmF5IHwgTWF0cml4fVxuICAgKiAgICAgICAgICAgIFJldHVybnMgdHJ1ZSB3aGVuIGJvdGggaW5wdXRzIGFyZSBkZWZpbmVkIHdpdGggYSBub256ZXJvL25vbmVtcHR5IHZhbHVlLlxuICAgKi9cblxuICB2YXIgYW5kID0gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IF9udW1iZXIuYW5kTnVtYmVyLFxuICAgICdDb21wbGV4LCBDb21wbGV4JzogZnVuY3Rpb24gQ29tcGxleENvbXBsZXgoeCwgeSkge1xuICAgICAgcmV0dXJuICh4LnJlICE9PSAwIHx8IHguaW0gIT09IDApICYmICh5LnJlICE9PSAwIHx8IHkuaW0gIT09IDApO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiAheC5pc1plcm8oKSAmJiAheS5pc1plcm8oKSAmJiAheC5pc05hTigpICYmICF5LmlzTmFOKCk7XG4gICAgfSxcbiAgICAnVW5pdCwgVW5pdCc6IGZ1bmN0aW9uIFVuaXRVbml0KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbmQoeC52YWx1ZSB8fCAwLCB5LnZhbHVlIHx8IDApO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNih4LCB5LCBhbmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAyKHksIHgsIGFuZCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMih4LCB5LCBhbmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBhbmQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFuZChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYW5kKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbmQoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChub3QoeSkpIHtcbiAgICAgICAgLy8gcmV0dXJuIHplcm8gbWF0cml4XG4gICAgICAgIHJldHVybiB6ZXJvcyh4LnNpemUoKSwgeC5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeCwgeSwgYW5kLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIC8vIGNoZWNrIHNjYWxhclxuICAgICAgaWYgKG5vdCh5KSkge1xuICAgICAgICAvLyByZXR1cm4gemVybyBtYXRyaXhcbiAgICAgICAgcmV0dXJuIHplcm9zKHguc2l6ZSgpLCB4LnN0b3JhZ2UoKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBhbmQsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBjaGVjayBzY2FsYXJcbiAgICAgIGlmIChub3QoeCkpIHtcbiAgICAgICAgLy8gcmV0dXJuIHplcm8gbWF0cml4XG4gICAgICAgIHJldHVybiB6ZXJvcyh4LnNpemUoKSwgeC5zdG9yYWdlKCkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTEoeSwgeCwgYW5kLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gY2hlY2sgc2NhbGFyXG4gICAgICBpZiAobm90KHgpKSB7XG4gICAgICAgIC8vIHJldHVybiB6ZXJvIG1hdHJpeFxuICAgICAgICByZXR1cm4gemVyb3MoeC5zaXplKCksIHguc3RvcmFnZSgpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGFuZCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbmQobWF0cml4KHgpLCB5KS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbmQoeCwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFuZDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbmQgPSBjcmVhdGVBbmQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU5vdCA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ25vdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZU5vdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIExvZ2ljYWwgYG5vdGAuIEZsaXBzIGJvb2xlYW4gdmFsdWUgb2YgYSBnaXZlbiBwYXJhbWV0ZXIuXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5ub3QoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgubm90KDIpICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLm5vdCgwKSAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLm5vdCh0cnVlKSAgIC8vIHJldHVybnMgZmFsc2VcbiAgICpcbiAgICogICAgYSA9IFsyLCAtNywgMF1cbiAgICogICAgbWF0aC5ub3QoYSkgICAgICAvLyByZXR1cm5zIFtmYWxzZSwgZmFsc2UsIHRydWVdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhbmQsIG9yLCB4b3JcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBjaGVja1xuICAgKiBAcmV0dXJuIHtib29sZWFuIHwgQXJyYXkgfCBNYXRyaXh9XG4gICAqICAgICAgICAgICAgUmV0dXJucyB0cnVlIHdoZW4gaW5wdXQgaXMgYSB6ZXJvIG9yIGVtcHR5IHZhbHVlLlxuICAgKi9cbiAgdmFyIG5vdCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIubm90TnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHgucmUgPT09IDAgJiYgeC5pbSA9PT0gMDtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmlzWmVybygpIHx8IHguaXNOYU4oKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgcmV0dXJuIHgudmFsdWUgIT09IG51bGwgPyBub3QoeC52YWx1ZSkgOiB0cnVlO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBub3QpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBub3Q7XG59KTtcbmV4cG9ydHMuY3JlYXRlTm90ID0gY3JlYXRlTm90OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVPciA9IHZvaWQgMDtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDNcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMlwiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wNVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnb3InO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlT3IgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBhbGdvcml0aG0wMyA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDUgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMDUpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTIgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMTIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIExvZ2ljYWwgYG9yYC4gVGVzdCBpZiBhdCBsZWFzdCBvbmUgdmFsdWUgaXMgZGVmaW5lZCB3aXRoIGEgbm9uemVyby9ub25lbXB0eSB2YWx1ZS5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLm9yKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLm9yKDIsIDQpICAgLy8gcmV0dXJucyB0cnVlXG4gICAqXG4gICAqICAgIGEgPSBbMiwgNSwgMF1cbiAgICogICAgYiA9IFswLCAyMiwgMF1cbiAgICogICAgYyA9IDBcbiAgICpcbiAgICogICAgbWF0aC5vcihhLCBiKSAgIC8vIHJldHVybnMgW3RydWUsIHRydWUsIGZhbHNlXVxuICAgKiAgICBtYXRoLm9yKGIsIGMpICAgLy8gcmV0dXJucyBbZmFsc2UsIHRydWUsIGZhbHNlXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYW5kLCBub3QsIHhvclxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGNoZWNrXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHkgU2Vjb25kIHZhbHVlIHRvIGNoZWNrXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH1cbiAgICogICAgICAgICAgICBSZXR1cm5zIHRydWUgd2hlbiBvbmUgb2YgdGhlIGlucHV0cyBpcyBkZWZpbmVkIHdpdGggYSBub256ZXJvL25vbmVtcHR5IHZhbHVlLlxuICAgKi9cblxuICB2YXIgb3IgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogX251bWJlci5vck51bWJlcixcbiAgICAnQ29tcGxleCwgQ29tcGxleCc6IGZ1bmN0aW9uIENvbXBsZXhDb21wbGV4KHgsIHkpIHtcbiAgICAgIHJldHVybiB4LnJlICE9PSAwIHx8IHguaW0gIT09IDAgfHwgeS5yZSAhPT0gMCB8fCB5LmltICE9PSAwO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiAheC5pc1plcm8oKSAmJiAheC5pc05hTigpIHx8ICF5LmlzWmVybygpICYmICF5LmlzTmFOKCk7XG4gICAgfSxcbiAgICAnVW5pdCwgVW5pdCc6IGZ1bmN0aW9uIFVuaXRVbml0KHgsIHkpIHtcbiAgICAgIHJldHVybiBvcih4LnZhbHVlIHx8IDAsIHkudmFsdWUgfHwgMCk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA1KHgsIHksIG9yKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHksIHgsIG9yLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIG9yLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgb3IpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIG9yKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBvcihtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gb3IoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeCwgeSwgb3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIG9yLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHksIHgsIG9yLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIG9yLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgb3IsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIG9yLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIG9yO1xufSk7XG5leHBvcnRzLmNyZWF0ZU9yID0gY3JlYXRlT3I7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVhvciA9IHZvaWQgMDtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDNcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wN1wiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAneG9yJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZVhvciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNykoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogTG9naWNhbCBgeG9yYC4gVGVzdCB3aGV0aGVyIG9uZSBhbmQgb25seSBvbmUgdmFsdWUgaXMgZGVmaW5lZCB3aXRoIGEgbm9uemVyby9ub25lbXB0eSB2YWx1ZS5cbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnhvcih4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC54b3IoMiwgNCkgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqXG4gICAqICAgIGEgPSBbMiwgMCwgMF1cbiAgICogICAgYiA9IFsyLCA3LCAwXVxuICAgKiAgICBjID0gMFxuICAgKlxuICAgKiAgICBtYXRoLnhvcihhLCBiKSAgIC8vIHJldHVybnMgW2ZhbHNlLCB0cnVlLCBmYWxzZV1cbiAgICogICAgbWF0aC54b3IoYSwgYykgICAvLyByZXR1cm5zIFt0cnVlLCBmYWxzZSwgZmFsc2VdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhbmQsIG5vdCwgb3JcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBjaGVja1xuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBjaGVja1xuICAgKiBAcmV0dXJuIHtib29sZWFuIHwgQXJyYXkgfCBNYXRyaXh9XG4gICAqICAgICAgICAgICAgUmV0dXJucyB0cnVlIHdoZW4gb25lIGFuZCBvbmx5IG9uZSBpbnB1dCBpcyBkZWZpbmVkIHdpdGggYSBub256ZXJvL25vbmVtcHR5IHZhbHVlLlxuICAgKi9cblxuICB2YXIgeG9yID0gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IF9udW1iZXIueG9yTnVtYmVyLFxuICAgICdDb21wbGV4LCBDb21wbGV4JzogZnVuY3Rpb24gQ29tcGxleENvbXBsZXgoeCwgeSkge1xuICAgICAgcmV0dXJuICh4LnJlICE9PSAwIHx8IHguaW0gIT09IDApICE9PSAoeS5yZSAhPT0gMCB8fCB5LmltICE9PSAwKTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gKCF4LmlzWmVybygpICYmICF4LmlzTmFOKCkpICE9PSAoIXkuaXNaZXJvKCkgJiYgIXkuaXNOYU4oKSk7XG4gICAgfSxcbiAgICAnVW5pdCwgVW5pdCc6IGZ1bmN0aW9uIFVuaXRVbml0KHgsIHkpIHtcbiAgICAgIHJldHVybiB4b3IoeC52YWx1ZSB8fCAwLCB5LnZhbHVlIHx8IDApO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNyh4LCB5LCB4b3IpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgeG9yLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIHhvciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIHhvcik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4geG9yKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiB4b3IobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHhvcih4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih4LCB5LCB4b3IsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIHhvciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCB4b3IsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgeG9yLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgeG9yLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCB4b3IsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4geG9yO1xufSk7XG5leHBvcnRzLmNyZWF0ZVhvciA9IGNyZWF0ZVhvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQXBwbHkgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX0luZGV4RXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vZXJyb3IvSW5kZXhFcnJvclwiKTtcblxudmFyIG5hbWUgPSAnYXBwbHknO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnaXNJbnRlZ2VyJ107XG52YXIgY3JlYXRlQXBwbHkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgaXNJbnRlZ2VyID0gX3JlZi5pc0ludGVnZXI7XG5cbiAgLyoqXG4gICAqIEFwcGx5IGEgZnVuY3Rpb24gdGhhdCBtYXBzIGFuIGFycmF5IHRvIGEgc2NhbGFyXG4gICAqIGFsb25nIGEgZ2l2ZW4gYXhpcyBvZiBhIG1hdHJpeCBvciBhcnJheS5cbiAgICogUmV0dXJucyBhIG5ldyBtYXRyaXggb3IgYXJyYXkgd2l0aCBvbmUgbGVzcyBkaW1lbnNpb24gdGhhbiB0aGUgaW5wdXQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguYXBwbHkoQSwgZGltLCBjYWxsYmFjaylcbiAgICpcbiAgICogV2hlcmU6XG4gICAqXG4gICAqIC0gYGRpbTogbnVtYmVyYCBpcyBhIHplcm8tYmFzZWQgZGltZW5zaW9uIG92ZXIgd2hpY2ggdG8gY29uY2F0ZW5hdGUgdGhlIG1hdHJpY2VzLlxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgQSA9IFtbMSwgMl0sIFszLCA0XV1cbiAgICogICAgY29uc3Qgc3VtID0gbWF0aC5zdW1cbiAgICpcbiAgICogICAgbWF0aC5hcHBseShBLCAwLCBzdW0pICAgICAgICAgICAgIC8vIHJldHVybnMgWzQsIDZdXG4gICAqICAgIG1hdGguYXBwbHkoQSwgMSwgc3VtKSAgICAgICAgICAgICAvLyByZXR1cm5zIFszLCA3XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbWFwLCBmaWx0ZXIsIGZvckVhY2hcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gYXJyYXkgICBUaGUgaW5wdXQgTWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkaW0gICAgICAgICAgICAgVGhlIGRpbWVuc2lvbiBhbG9uZyB3aGljaCB0aGUgY2FsbGJhY2sgaXMgYXBwbGllZFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIGFwcGxpZWQuIFRoaXMgRnVuY3Rpb25cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGQgdGFrZSBhbiBhcnJheSBvciAxLWQgbWF0cml4IGFzIGFuIGlucHV0IGFuZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhIG51bWJlci5cbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9IHJlcyAgICBUaGUgcmVzaWR1YWwgbWF0cml4IHdpdGggdGhlIGZ1bmN0aW9uIGFwcGxpZWQgb3ZlciBzb21lIGRpbWVuc2lvbi5cbiAgICovXG4gIHZhciBhcHBseSA9IHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlciwgZnVuY3Rpb24nOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlckJpZ051bWJlckZ1bmN0aW9uKG1hdCwgZGltLCBjYWxsYmFjaykge1xuICAgICAgaWYgKCFpc0ludGVnZXIoZGltKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnRlZ2VyIG51bWJlciBleHBlY3RlZCBmb3IgZGltZW5zaW9uJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBzaXplID0gQXJyYXkuaXNBcnJheShtYXQpID8gKDAsIF9hcnJheS5hcnJheVNpemUpKG1hdCkgOiBtYXQuc2l6ZSgpO1xuXG4gICAgICBpZiAoZGltIDwgMCB8fCBkaW0gPj0gc2l6ZS5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9JbmRleEVycm9yLkluZGV4RXJyb3IoZGltLCBzaXplLmxlbmd0aCk7XG4gICAgICB9XG5cbiAgICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KShtYXQpKSB7XG4gICAgICAgIHJldHVybiBtYXQuY3JlYXRlKF9hcHBseShtYXQudmFsdWVPZigpLCBkaW0sIGNhbGxiYWNrKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gX2FwcGx5KG1hdCwgZGltLCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFwcGx5O1xufSk7XG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHJlZHVjZSBhIG1hdHJpeFxuICogQHBhcmFtIHtBcnJheX0gbWF0XG4gKiBAcGFyYW0ge251bWJlcn0gZGltXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybnMge0FycmF5fSByZXRcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVBcHBseSA9IGNyZWF0ZUFwcGx5O1xuXG5mdW5jdGlvbiBfYXBwbHkobWF0LCBkaW0sIGNhbGxiYWNrKSB7XG4gIHZhciBpLCByZXQsIHRyYW47XG5cbiAgaWYgKGRpbSA8PSAwKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KG1hdFswXSkpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhtYXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cmFuID0gX3N3aXRjaChtYXQpO1xuICAgICAgcmV0ID0gW107XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0cmFuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJldFtpXSA9IF9hcHBseSh0cmFuW2ldLCBkaW0gLSAxLCBjYWxsYmFjayk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXQ7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldCA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG1hdC5sZW5ndGg7IGkrKykge1xuICAgICAgcmV0W2ldID0gX2FwcGx5KG1hdFtpXSwgZGltIC0gMSwgY2FsbGJhY2spO1xuICAgIH1cblxuICAgIHJldHVybiByZXQ7XG4gIH1cbn1cbi8qKlxuICogVHJhbnNwb3NlIGEgbWF0cml4XG4gKiBAcGFyYW0ge0FycmF5fSBtYXRcbiAqIEByZXR1cm5zIHtBcnJheX0gcmV0XG4gKiBAcHJpdmF0ZVxuICovXG5cblxuZnVuY3Rpb24gX3N3aXRjaChtYXQpIHtcbiAgdmFyIEkgPSBtYXQubGVuZ3RoO1xuICB2YXIgSiA9IG1hdFswXS5sZW5ndGg7XG4gIHZhciBpLCBqO1xuICB2YXIgcmV0ID0gW107XG5cbiAgZm9yIChqID0gMDsgaiA8IEo7IGorKykge1xuICAgIHZhciB0bXAgPSBbXTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBJOyBpKyspIHtcbiAgICAgIHRtcC5wdXNoKG1hdFtpXVtqXSk7XG4gICAgfVxuXG4gICAgcmV0LnB1c2godG1wKTtcbiAgfVxuXG4gIHJldHVybiByZXQ7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbHVtbiA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIG5hbWUgPSAnY29sdW1uJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0luZGV4JywgJ21hdHJpeCcsICdyYW5nZSddO1xudmFyIGNyZWF0ZUNvbHVtbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBJbmRleCA9IF9yZWYuSW5kZXgsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIHJhbmdlID0gX3JlZi5yYW5nZTtcblxuICAvKipcbiAgICogUmV0dXJuIGEgY29sdW1uIGZyb20gYSBNYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguY29sdW1uKHZhbHVlLCBpbmRleClcbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICpcbiAgICogICAgIC8vIGdldCBhIGNvbHVtblxuICAgKiAgICAgY29uc3QgZCA9IFtbMSwgMl0sIFszLCA0XV1cbiAgICogICAgIG1hdGguY29sdW1uKGQsIDEpIC8vIHJldHVybnMgW1syXSwgWzRdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHJvd1xuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IH0gdmFsdWUgICBBbiBhcnJheSBvciBtYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbiAgICAgICAgICAgVGhlIGluZGV4IG9mIHRoZSBjb2x1bW5cbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgICAgICAgVGhlIHJldHJpZXZlZCBjb2x1bW5cbiAgICovXG4gIHZhciBjb2x1bW4gPSB0eXBlZChuYW1lLCB7XG4gICAgJ01hdHJpeCwgbnVtYmVyJzogX2NvbHVtbixcbiAgICAnQXJyYXksIG51bWJlcic6IGZ1bmN0aW9uIEFycmF5TnVtYmVyKHZhbHVlLCBjb2x1bW4pIHtcbiAgICAgIHJldHVybiBfY29sdW1uKG1hdHJpeCgoMCwgX29iamVjdC5jbG9uZSkodmFsdWUpKSwgY29sdW1uKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNvbHVtbjtcbiAgLyoqXG4gICAqIFJldHJpZXZlIGEgY29sdW1uIG9mIGEgbWF0cml4XG4gICAqIEBwYXJhbSB7TWF0cml4IH0gdmFsdWUgIEEgbWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW4gIFRoZSBpbmRleCBvZiB0aGUgY29sdW1uXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgIFRoZSByZXRyaWV2ZWQgY29sdW1uXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9jb2x1bW4odmFsdWUsIGNvbHVtbikge1xuICAgIC8vIGNoZWNrIGRpbWVuc2lvbnNcbiAgICBpZiAodmFsdWUuc2l6ZSgpLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IHR3byBkaW1lbnNpb25hbCBtYXRyaXggaXMgc3VwcG9ydGVkJyk7XG4gICAgfVxuXG4gICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShjb2x1bW4sIHZhbHVlLnNpemUoKVsxXSk7XG4gICAgdmFyIHJvd1JhbmdlID0gcmFuZ2UoMCwgdmFsdWUuc2l6ZSgpWzBdKTtcbiAgICB2YXIgaW5kZXggPSBuZXcgSW5kZXgocm93UmFuZ2UsIGNvbHVtbik7XG4gICAgcmV0dXJuIHZhbHVlLnN1YnNldChpbmRleCk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVDb2x1bW4gPSBjcmVhdGVDb2x1bW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbmNhdCA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX0luZGV4RXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vZXJyb3IvSW5kZXhFcnJvclwiKTtcblxudmFyIF9EaW1lbnNpb25FcnJvciA9IHJlcXVpcmUoXCIuLi8uLi9lcnJvci9EaW1lbnNpb25FcnJvclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2NvbmNhdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnaXNJbnRlZ2VyJ107XG52YXIgY3JlYXRlQ29uY2F0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgaXNJbnRlZ2VyID0gX3JlZi5pc0ludGVnZXI7XG5cbiAgLyoqXG4gICAqIENvbmNhdGVuYXRlIHR3byBvciBtb3JlIG1hdHJpY2VzLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmNvbmNhdChBLCBCLCBDLCAuLi4pXG4gICAqICAgICBtYXRoLmNvbmNhdChBLCBCLCBDLCAuLi4sIGRpbSlcbiAgICpcbiAgICogV2hlcmU6XG4gICAqXG4gICAqIC0gYGRpbTogbnVtYmVyYCBpcyBhIHplcm8tYmFzZWQgZGltZW5zaW9uIG92ZXIgd2hpY2ggdG8gY29uY2F0ZW5hdGUgdGhlIG1hdHJpY2VzLlxuICAgKiAgIEJ5IGRlZmF1bHQgdGhlIGxhc3QgZGltZW5zaW9uIG9mIHRoZSBtYXRyaWNlcy5cbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIGNvbnN0IEEgPSBbWzEsIDJdLCBbNSwgNl1dXG4gICAqICAgIGNvbnN0IEIgPSBbWzMsIDRdLCBbNywgOF1dXG4gICAqXG4gICAqICAgIG1hdGguY29uY2F0KEEsIEIpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbWzEsIDIsIDMsIDRdLCBbNSwgNiwgNywgOF1dXG4gICAqICAgIG1hdGguY29uY2F0KEEsIEIsIDApICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbWzEsIDJdLCBbNSwgNl0sIFszLCA0XSwgWzcsIDhdXVxuICAgKiAgICBtYXRoLmNvbmNhdCgnaGVsbG8nLCAnICcsICd3b3JsZCcpIC8vIHJldHVybnMgJ2hlbGxvIHdvcmxkJ1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2l6ZSwgc3F1ZWV6ZSwgc3Vic2V0LCB0cmFuc3Bvc2VcbiAgICpcbiAgICogQHBhcmFtIHsuLi4gQXJyYXkgfCBNYXRyaXh9IGFyZ3MgICAgIFR3byBvciBtb3JlIG1hdHJpY2VzXG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSBDb25jYXRlbmF0ZWQgbWF0cml4XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIC8vIFRPRE86IGNoYW5nZSBzaWduYXR1cmUgdG8gJy4uLkFycmF5IHwgTWF0cml4LCBkaW0/JyB3aGVuIHN1cHBvcnRlZFxuICAgICcuLi5BcnJheSB8IE1hdHJpeCB8IG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyKGFyZ3MpIHtcbiAgICAgIHZhciBpO1xuICAgICAgdmFyIGxlbiA9IGFyZ3MubGVuZ3RoO1xuICAgICAgdmFyIGRpbSA9IC0xOyAvLyB6ZXJvLWJhc2VkIGRpbWVuc2lvblxuXG4gICAgICB2YXIgcHJldkRpbTtcbiAgICAgIHZhciBhc01hdHJpeCA9IGZhbHNlO1xuICAgICAgdmFyIG1hdHJpY2VzID0gW107IC8vIGNvbnRhaW5zIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5c1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgdmFyIGFyZyA9IGFyZ3NbaV07IC8vIHRlc3Qgd2hldGhlciB3ZSBuZWVkIHRvIHJldHVybiBhIE1hdHJpeCAoaWYgbm90IHdlIHJldHVybiBhbiBBcnJheSlcblxuICAgICAgICBpZiAoKDAsIF9pcy5pc01hdHJpeCkoYXJnKSkge1xuICAgICAgICAgIGFzTWF0cml4ID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShhcmcpIHx8ICgwLCBfaXMuaXNCaWdOdW1iZXIpKGFyZykpIHtcbiAgICAgICAgICBpZiAoaSAhPT0gbGVuIC0gMSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdEaW1lbnNpb24gbXVzdCBiZSBzcGVjaWZpZWQgYXMgbGFzdCBhcmd1bWVudCcpO1xuICAgICAgICAgIH0gLy8gbGFzdCBhcmd1bWVudCBjb250YWlucyB0aGUgZGltZW5zaW9uIG9uIHdoaWNoIHRvIGNvbmNhdGVuYXRlXG5cblxuICAgICAgICAgIHByZXZEaW0gPSBkaW07XG4gICAgICAgICAgZGltID0gYXJnLnZhbHVlT2YoKTsgLy8gY2hhbmdlIEJpZ051bWJlciB0byBudW1iZXJcblxuICAgICAgICAgIGlmICghaXNJbnRlZ2VyKGRpbSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludGVnZXIgbnVtYmVyIGV4cGVjdGVkIGZvciBkaW1lbnNpb24nKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoZGltIDwgMCB8fCBpID4gMCAmJiBkaW0gPiBwcmV2RGltKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiB3b3VsZCBiZSBtb3JlIGNsZWFyIHdoZW4gdGhyb3dpbmcgYSBEaW1lbnNpb25FcnJvciBoZXJlXG4gICAgICAgICAgICB0aHJvdyBuZXcgX0luZGV4RXJyb3IuSW5kZXhFcnJvcihkaW0sIHByZXZEaW0gKyAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gdGhpcyBpcyBhIG1hdHJpeCBvciBhcnJheVxuICAgICAgICAgIHZhciBtID0gKDAsIF9vYmplY3QuY2xvbmUpKGFyZykudmFsdWVPZigpO1xuICAgICAgICAgIHZhciBzaXplID0gKDAsIF9hcnJheS5hcnJheVNpemUpKG0pO1xuICAgICAgICAgIG1hdHJpY2VzW2ldID0gbTtcbiAgICAgICAgICBwcmV2RGltID0gZGltO1xuICAgICAgICAgIGRpbSA9IHNpemUubGVuZ3RoIC0gMTsgLy8gdmVyaWZ5IHdoZXRoZXIgZWFjaCBvZiB0aGUgbWF0cmljZXMgaGFzIHRoZSBzYW1lIG51bWJlciBvZiBkaW1lbnNpb25zXG5cbiAgICAgICAgICBpZiAoaSA+IDAgJiYgZGltICE9PSBwcmV2RGltKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKHByZXZEaW0gKyAxLCBkaW0gKyAxKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG1hdHJpY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0F0IGxlYXN0IG9uZSBtYXRyaXggZXhwZWN0ZWQnKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHJlcyA9IG1hdHJpY2VzLnNoaWZ0KCk7XG5cbiAgICAgIHdoaWxlIChtYXRyaWNlcy5sZW5ndGgpIHtcbiAgICAgICAgcmVzID0gX2NvbmNhdChyZXMsIG1hdHJpY2VzLnNoaWZ0KCksIGRpbSwgMCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhc01hdHJpeCA/IG1hdHJpeChyZXMpIDogcmVzO1xuICAgIH0sXG4gICAgJy4uLnN0cmluZyc6IGZ1bmN0aW9uIHN0cmluZyhhcmdzKSB7XG4gICAgICByZXR1cm4gYXJncy5qb2luKCcnKTtcbiAgICB9XG4gIH0pO1xufSk7XG4vKipcbiAqIFJlY3Vyc2l2ZWx5IGNvbmNhdGVuYXRlIHR3byBtYXRyaWNlcy5cbiAqIFRoZSBjb250ZW50cyBvZiB0aGUgbWF0cmljZXMgaXMgbm90IGNsb25lZC5cbiAqIEBwYXJhbSB7QXJyYXl9IGEgICAgICAgICAgICAgTXVsdGkgZGltZW5zaW9uYWwgYXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGIgICAgICAgICAgICAgTXVsdGkgZGltZW5zaW9uYWwgYXJyYXlcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb25jYXREaW0gICAgVGhlIGRpbWVuc2lvbiBvbiB3aGljaCB0byBjb25jYXRlbmF0ZSAoemVyby1iYXNlZClcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW0gICAgICAgICAgVGhlIGN1cnJlbnQgZGltICh6ZXJvLWJhc2VkKVxuICogQHJldHVybiB7QXJyYXl9IGMgICAgICAgICAgICBUaGUgY29uY2F0ZW5hdGVkIG1hdHJpeFxuICogQHByaXZhdGVcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZUNvbmNhdCA9IGNyZWF0ZUNvbmNhdDtcblxuZnVuY3Rpb24gX2NvbmNhdChhLCBiLCBjb25jYXREaW0sIGRpbSkge1xuICBpZiAoZGltIDwgY29uY2F0RGltKSB7XG4gICAgLy8gcmVjdXJzZSBpbnRvIG5leHQgZGltZW5zaW9uXG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihhLmxlbmd0aCwgYi5sZW5ndGgpO1xuICAgIH1cblxuICAgIHZhciBjID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNbaV0gPSBfY29uY2F0KGFbaV0sIGJbaV0sIGNvbmNhdERpbSwgZGltICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGM7XG4gIH0gZWxzZSB7XG4gICAgLy8gY29uY2F0ZW5hdGUgdGhpcyBkaW1lbnNpb25cbiAgICByZXR1cm4gYS5jb25jYXQoYik7XG4gIH1cbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ3Jvc3MgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdjcm9zcyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnc3VidHJhY3QnLCAnbXVsdGlwbHknXTtcbnZhciBjcmVhdGVDcm9zcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseTtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBjcm9zcyBwcm9kdWN0IGZvciB0d28gdmVjdG9ycyBpbiB0aHJlZSBkaW1lbnNpb25hbCBzcGFjZS5cbiAgICogVGhlIGNyb3NzIHByb2R1Y3Qgb2YgYEEgPSBbYTEsIGEyLCBhM11gIGFuZCBgQiA9IFtiMSwgYjIsIGIzXWAgaXMgZGVmaW5lZFxuICAgKiBhczpcbiAgICpcbiAgICogICAgY3Jvc3MoQSwgQikgPSBbXG4gICAqICAgICAgYTIgKiBiMyAtIGEzICogYjIsXG4gICAqICAgICAgYTMgKiBiMSAtIGExICogYjMsXG4gICAqICAgICAgYTEgKiBiMiAtIGEyICogYjFcbiAgICogICAgXVxuICAgKlxuICAgKiBJZiBvbmUgb2YgdGhlIGlucHV0IHZlY3RvcnMgaGFzIGEgZGltZW5zaW9uIGdyZWF0ZXIgdGhhbiAxLCB0aGUgb3V0cHV0XG4gICAqIHZlY3RvciB3aWxsIGJlIGEgMXgzICgyLWRpbWVuc2lvbmFsKSBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5jcm9zcyh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jcm9zcyhbMSwgMSwgMF0sICAgWzAsIDEsIDFdKSAgICAgICAvLyBSZXR1cm5zIFsxLCAtMSwgMV1cbiAgICogICAgbWF0aC5jcm9zcyhbMywgLTMsIDFdLCAgWzQsIDksIDJdKSAgICAgICAvLyBSZXR1cm5zIFstMTUsIC0yLCAzOV1cbiAgICogICAgbWF0aC5jcm9zcyhbMiwgMywgNF0sICAgWzUsIDYsIDddKSAgICAgICAvLyBSZXR1cm5zIFstMywgNiwgLTNdXG4gICAqICAgIG1hdGguY3Jvc3MoW1sxLCAyLCAzXV0sIFtbNF0sIFs1XSwgWzZdXSkgLy8gUmV0dXJucyBbWy0zLCA2LCAtM11dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBkb3QsIG11bHRpcGx5XG4gICAqXG4gICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSB4ICAgRmlyc3QgdmVjdG9yXG4gICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSB5ICAgU2Vjb25kIHZlY3RvclxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgIFJldHVybnMgdGhlIGNyb3NzIHByb2R1Y3Qgb2YgYHhgIGFuZCBgeWBcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ01hdHJpeCwgTWF0cml4JzogZnVuY3Rpb24gTWF0cml4TWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoX2Nyb3NzKHgudG9BcnJheSgpLCB5LnRvQXJyYXkoKSkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICByZXR1cm4gbWF0cml4KF9jcm9zcyh4LnRvQXJyYXkoKSwgeSkpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gbWF0cml4KF9jcm9zcyh4LCB5LnRvQXJyYXkoKSkpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IF9jcm9zc1xuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgY3Jvc3MgcHJvZHVjdCBmb3IgdHdvIGFycmF5c1xuICAgKiBAcGFyYW0ge0FycmF5fSB4ICBGaXJzdCB2ZWN0b3JcbiAgICogQHBhcmFtIHtBcnJheX0geSAgU2Vjb25kIHZlY3RvclxuICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGNyb3NzIHByb2R1Y3Qgb2YgeCBhbmQgeVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfY3Jvc3MoeCwgeSkge1xuICAgIHZhciBoaWdoZXN0RGltZW5zaW9uID0gTWF0aC5tYXgoKDAsIF9hcnJheS5hcnJheVNpemUpKHgpLmxlbmd0aCwgKDAsIF9hcnJheS5hcnJheVNpemUpKHkpLmxlbmd0aCk7XG4gICAgeCA9ICgwLCBfYXJyYXkuc3F1ZWV6ZSkoeCk7XG4gICAgeSA9ICgwLCBfYXJyYXkuc3F1ZWV6ZSkoeSk7XG4gICAgdmFyIHhTaXplID0gKDAsIF9hcnJheS5hcnJheVNpemUpKHgpO1xuICAgIHZhciB5U2l6ZSA9ICgwLCBfYXJyYXkuYXJyYXlTaXplKSh5KTtcblxuICAgIGlmICh4U2l6ZS5sZW5ndGggIT09IDEgfHwgeVNpemUubGVuZ3RoICE9PSAxIHx8IHhTaXplWzBdICE9PSAzIHx8IHlTaXplWzBdICE9PSAzKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignVmVjdG9ycyB3aXRoIGxlbmd0aCAzIGV4cGVjdGVkICcgKyAnKFNpemUgQSA9IFsnICsgeFNpemUuam9pbignLCAnKSArICddLCBCID0gWycgKyB5U2l6ZS5qb2luKCcsICcpICsgJ10pJyk7XG4gICAgfVxuXG4gICAgdmFyIHByb2R1Y3QgPSBbc3VidHJhY3QobXVsdGlwbHkoeFsxXSwgeVsyXSksIG11bHRpcGx5KHhbMl0sIHlbMV0pKSwgc3VidHJhY3QobXVsdGlwbHkoeFsyXSwgeVswXSksIG11bHRpcGx5KHhbMF0sIHlbMl0pKSwgc3VidHJhY3QobXVsdGlwbHkoeFswXSwgeVsxXSksIG11bHRpcGx5KHhbMV0sIHlbMF0pKV07XG5cbiAgICBpZiAoaGlnaGVzdERpbWVuc2lvbiA+IDEpIHtcbiAgICAgIHJldHVybiBbcHJvZHVjdF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwcm9kdWN0O1xuICAgIH1cbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZUNyb3NzID0gY3JlYXRlQ3Jvc3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUN0cmFuc3Bvc2UgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdjdHJhbnNwb3NlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3RyYW5zcG9zZScsICdjb25qJ107XG52YXIgY3JlYXRlQ3RyYW5zcG9zZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICB0cmFuc3Bvc2UgPSBfcmVmLnRyYW5zcG9zZSxcbiAgICAgIGNvbmogPSBfcmVmLmNvbmo7XG5cbiAgLyoqXG4gICAqIFRyYW5zcG9zZSBhbmQgY29tcGxleCBjb25qdWdhdGUgYSBtYXRyaXguIEFsbCB2YWx1ZXMgb2YgdGhlIG1hdHJpeCBhcmVcbiAgICogcmVmbGVjdGVkIG92ZXIgaXRzIG1haW4gZGlhZ29uYWwgYW5kIHRoZW4gdGhlIGNvbXBsZXggY29uanVnYXRlIGlzXG4gICAqIHRha2VuLiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gY29tcGxleCBjb25qdWdhdGlvbiBmb3Igc2NhbGFycyBhbmRcbiAgICogdmVjdG9ycy5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5jdHJhbnNwb3NlKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgY29uc3QgQSA9IFtbMSwgMiwgM10sIFs0LCA1LCBtYXRoLmNvbXBsZXgoNiw3KV1dXG4gICAqICAgICBtYXRoLmN0cmFuc3Bvc2UoQSkgICAgICAgICAgICAgICAvLyByZXR1cm5zIFtbMSwgNF0sIFsyLCA1XSwgWzMsIHtyZTo2LGltOjd9XV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICB0cmFuc3Bvc2UsIGRpYWcsIGludiwgc3Vic2V0LCBzcXVlZXplXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IHggIE1hdHJpeCB0byBiZSBjdHJhbnNwb3NlZFxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICBUaGUgY3RyYW5zcG9zZWQgbWF0cml4XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIGFueTogZnVuY3Rpb24gYW55KHgpIHtcbiAgICAgIHJldHVybiBjb25qKHRyYW5zcG9zZSh4KSk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDdHJhbnNwb3NlID0gY3JlYXRlQ3RyYW5zcG9zZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRGV0ID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2RldCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnc3VidHJhY3QnLCAnbXVsdGlwbHknLCAndW5hcnlNaW51cycsICdsdXAnXTtcbnZhciBjcmVhdGVEZXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICB1bmFyeU1pbnVzID0gX3JlZi51bmFyeU1pbnVzLFxuICAgICAgbHVwID0gX3JlZi5sdXA7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnQgb2YgYSBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5kZXQoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZGV0KFtbMSwgMl0sIFszLCA0XV0pIC8vIHJldHVybnMgLTJcbiAgICpcbiAgICogICAgY29uc3QgQSA9IFtcbiAgICogICAgICBbLTIsIDIsIDNdLFxuICAgKiAgICAgIFstMSwgMSwgM10sXG4gICAqICAgICAgWzIsIDAsIC0xXVxuICAgKiAgICBdXG4gICAqICAgIG1hdGguZGV0KEEpIC8vIHJldHVybnMgNlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgaW52XG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IHggIEEgbWF0cml4XG4gICAqIEByZXR1cm4ge251bWJlcn0gVGhlIGRldGVybWluYW50IG9mIGB4YFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICBhbnk6IGZ1bmN0aW9uIGFueSh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9vYmplY3QuY2xvbmUpKHgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gZGV0KHgpIHtcbiAgICAgIHZhciBzaXplO1xuXG4gICAgICBpZiAoKDAsIF9pcy5pc01hdHJpeCkoeCkpIHtcbiAgICAgICAgc2l6ZSA9IHguc2l6ZSgpO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgICAgIHggPSBtYXRyaXgoeCk7XG4gICAgICAgIHNpemUgPSB4LnNpemUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGEgc2NhbGFyXG4gICAgICAgIHNpemUgPSBbXTtcbiAgICAgIH1cblxuICAgICAgc3dpdGNoIChzaXplLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgLy8gc2NhbGFyXG4gICAgICAgICAgcmV0dXJuICgwLCBfb2JqZWN0LmNsb25lKSh4KTtcblxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgLy8gdmVjdG9yXG4gICAgICAgICAgaWYgKHNpemVbMF0gPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiAoMCwgX29iamVjdC5jbG9uZSkoeC52YWx1ZU9mKClbMF0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlICcgKyAnKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIHR3byBkaW1lbnNpb25hbCBhcnJheVxuICAgICAgICAgICAgdmFyIHJvd3MgPSBzaXplWzBdO1xuICAgICAgICAgICAgdmFyIGNvbHMgPSBzaXplWzFdO1xuXG4gICAgICAgICAgICBpZiAocm93cyA9PT0gY29scykge1xuICAgICAgICAgICAgICByZXR1cm4gX2RldCh4LmNsb25lKCkudmFsdWVPZigpLCByb3dzLCBjb2xzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5XG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHR3byBkaW1lbnNpb25hbCAnICsgJyhzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnQgb2YgYSBtYXRyaXhcbiAgICogQHBhcmFtIHtBcnJheVtdfSBtYXRyaXggIEEgc3F1YXJlLCB0d28gZGltZW5zaW9uYWwgbWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3dzICAgICBOdW1iZXIgb2Ygcm93cyBvZiB0aGUgbWF0cml4ICh6ZXJvLWJhc2VkKVxuICAgKiBAcGFyYW0ge251bWJlcn0gY29scyAgICAgTnVtYmVyIG9mIGNvbHVtbnMgb2YgdGhlIG1hdHJpeCAoemVyby1iYXNlZClcbiAgICogQHJldHVybnMge251bWJlcn0gZGV0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9kZXQobWF0cml4LCByb3dzLCBjb2xzKSB7XG4gICAgaWYgKHJvd3MgPT09IDEpIHtcbiAgICAgIC8vIHRoaXMgaXMgYSAxIHggMSBtYXRyaXhcbiAgICAgIHJldHVybiAoMCwgX29iamVjdC5jbG9uZSkobWF0cml4WzBdWzBdKTtcbiAgICB9IGVsc2UgaWYgKHJvd3MgPT09IDIpIHtcbiAgICAgIC8vIHRoaXMgaXMgYSAyIHggMiBtYXRyaXhcbiAgICAgIC8vIHRoZSBkZXRlcm1pbmFudCBvZiBbYTExLGExMjthMjEsYTIyXSBpcyBkZXQgPSBhMTEqYTIyLWEyMSphMTJcbiAgICAgIHJldHVybiBzdWJ0cmFjdChtdWx0aXBseShtYXRyaXhbMF1bMF0sIG1hdHJpeFsxXVsxXSksIG11bHRpcGx5KG1hdHJpeFsxXVswXSwgbWF0cml4WzBdWzFdKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENvbXB1dGUgdGhlIExVIGRlY29tcG9zaXRpb25cbiAgICAgIHZhciBkZWNvbXAgPSBsdXAobWF0cml4KTsgLy8gVGhlIGRldGVybWluYW50IGlzIHRoZSBwcm9kdWN0IG9mIHRoZSBkaWFnb25hbCBlbnRyaWVzIG9mIFUgKGFuZCB0aG9zZSBvZiBMLCBidXQgdGhleSBhcmUgYWxsIDEpXG5cbiAgICAgIHZhciBkZXQgPSBkZWNvbXAuVVswXVswXTtcblxuICAgICAgZm9yICh2YXIgX2kgPSAxOyBfaSA8IHJvd3M7IF9pKyspIHtcbiAgICAgICAgZGV0ID0gbXVsdGlwbHkoZGV0LCBkZWNvbXAuVVtfaV1bX2ldKTtcbiAgICAgIH0gLy8gVGhlIGRldGVybWluYW50IHdpbGwgYmUgbXVsdGlwbGllZCBieSAxIG9yIC0xIGRlcGVuZGluZyBvbiB0aGUgcGFyaXR5IG9mIHRoZSBwZXJtdXRhdGlvbiBtYXRyaXguXG4gICAgICAvLyBUaGlzIGNhbiBiZSBkZXRlcm1pbmVkIGJ5IGNvdW50aW5nIHRoZSBjeWNsZXMuIFRoaXMgaXMgcm91Z2hseSBhIGxpbmVhciB0aW1lIGFsZ29yaXRobS5cblxuXG4gICAgICB2YXIgZXZlbkN5Y2xlcyA9IDA7XG4gICAgICB2YXIgaSA9IDA7XG4gICAgICB2YXIgdmlzaXRlZCA9IFtdO1xuXG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB3aGlsZSAodmlzaXRlZFtpXSkge1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpID49IHJvd3MpIGJyZWFrO1xuICAgICAgICB2YXIgaiA9IGk7XG4gICAgICAgIHZhciBjeWNsZUxlbiA9IDA7XG5cbiAgICAgICAgd2hpbGUgKCF2aXNpdGVkW2RlY29tcC5wW2pdXSkge1xuICAgICAgICAgIHZpc2l0ZWRbZGVjb21wLnBbal1dID0gdHJ1ZTtcbiAgICAgICAgICBqID0gZGVjb21wLnBbal07XG4gICAgICAgICAgY3ljbGVMZW4rKztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjeWNsZUxlbiAlIDIgPT09IDApIHtcbiAgICAgICAgICBldmVuQ3ljbGVzKys7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGV2ZW5DeWNsZXMgJSAyID09PSAwID8gZGV0IDogdW5hcnlNaW51cyhkZXQpO1xuICAgIH1cbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZURldCA9IGNyZWF0ZURldDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRGlhZyA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZGlhZyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnRGVuc2VNYXRyaXgnLCAnU3BhcnNlTWF0cml4J107XG52YXIgY3JlYXRlRGlhZyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeCxcbiAgICAgIFNwYXJzZU1hdHJpeCA9IF9yZWYuU3BhcnNlTWF0cml4O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBkaWFnb25hbCBtYXRyaXggb3IgcmV0cmlldmUgdGhlIGRpYWdvbmFsIG9mIGEgbWF0cml4XG4gICAqXG4gICAqIFdoZW4gYHhgIGlzIGEgdmVjdG9yLCBhIG1hdHJpeCB3aXRoIHZlY3RvciBgeGAgb24gdGhlIGRpYWdvbmFsIHdpbGwgYmUgcmV0dXJuZWQuXG4gICAqIFdoZW4gYHhgIGlzIGEgdHdvIGRpbWVuc2lvbmFsIG1hdHJpeCwgdGhlIG1hdHJpeGVzIGBrYHRoIGRpYWdvbmFsIHdpbGwgYmUgcmV0dXJuZWQgYXMgdmVjdG9yLlxuICAgKiBXaGVuIGsgaXMgcG9zaXRpdmUsIHRoZSB2YWx1ZXMgYXJlIHBsYWNlZCBvbiB0aGUgc3VwZXIgZGlhZ29uYWwuXG4gICAqIFdoZW4gayBpcyBuZWdhdGl2ZSwgdGhlIHZhbHVlcyBhcmUgcGxhY2VkIG9uIHRoZSBzdWIgZGlhZ29uYWwuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguZGlhZyhYKVxuICAgKiAgICAgbWF0aC5kaWFnKFgsIGZvcm1hdClcbiAgICogICAgIG1hdGguZGlhZyhYLCBrKVxuICAgKiAgICAgbWF0aC5kaWFnKFgsIGssIGZvcm1hdClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICAvLyBjcmVhdGUgYSBkaWFnb25hbCBtYXRyaXhcbiAgICogICAgIG1hdGguZGlhZyhbMSwgMiwgM10pICAgICAgLy8gcmV0dXJucyBbWzEsIDAsIDBdLCBbMCwgMiwgMF0sIFswLCAwLCAzXV1cbiAgICogICAgIG1hdGguZGlhZyhbMSwgMiwgM10sIDEpICAgLy8gcmV0dXJucyBbWzAsIDEsIDAsIDBdLCBbMCwgMCwgMiwgMF0sIFswLCAwLCAwLCAzXV1cbiAgICogICAgIG1hdGguZGlhZyhbMSwgMiwgM10sIC0xKSAgLy8gcmV0dXJucyBbWzAsIDAsIDBdLCBbMSwgMCwgMF0sIFswLCAyLCAwXSwgWzAsIDAsIDNdXVxuICAgKlxuICAgKiAgICAvLyByZXRyaWV2ZSB0aGUgZGlhZ29uYWwgZnJvbSBhIG1hdHJpeFxuICAgKiAgICBjb25zdCBhID0gW1sxLCAyLCAzXSwgWzQsIDUsIDZdLCBbNywgOCwgOV1dXG4gICAqICAgIG1hdGguZGlhZyhhKSAgIC8vIHJldHVybnMgWzEsIDUsIDldXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgb25lcywgemVyb3MsIGlkZW50aXR5XG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IHggICAgICAgICAgQSB0d28gZGltZW5zaW9uYWwgbWF0cml4IG9yIGEgdmVjdG9yXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyfSBbaz0wXSAgVGhlIGRpYWdvbmFsIHdoZXJlIHRoZSB2ZWN0b3Igd2lsbCBiZSBmaWxsZWRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBvciByZXRyaWV2ZWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZm9ybWF0PSdkZW5zZSddICAgVGhlIG1hdHJpeCBzdG9yYWdlIGZvcm1hdC5cbiAgICpcbiAgICogQHJldHVybnMge01hdHJpeCB8IEFycmF5fSBEaWFnb25hbCBtYXRyaXggZnJvbSBpbnB1dCB2ZWN0b3IsIG9yIGRpYWdvbmFsIGZyb20gaW5wdXQgbWF0cml4LlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyBGSVhNRTogc2ltcGxpZnkgdGhpcyBodWdlIGFtb3VudCBvZiBzaWduYXR1cmVzIGFzIHNvb24gYXMgdHlwZWQtZnVuY3Rpb24gc3VwcG9ydHMgb3B0aW9uYWwgYXJndW1lbnRzXG4gICAgQXJyYXk6IGZ1bmN0aW9uIEFycmF5KHgpIHtcbiAgICAgIHJldHVybiBfZGlhZyh4LCAwLCAoMCwgX2FycmF5LmFycmF5U2l6ZSkoeCksIG51bGwpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBudW1iZXInOiBmdW5jdGlvbiBBcnJheU51bWJlcih4LCBrKSB7XG4gICAgICByZXR1cm4gX2RpYWcoeCwgaywgKDAsIF9hcnJheS5hcnJheVNpemUpKHgpLCBudWxsKTtcbiAgICB9LFxuICAgICdBcnJheSwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQXJyYXlCaWdOdW1iZXIoeCwgaykge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIGsudG9OdW1iZXIoKSwgKDAsIF9hcnJheS5hcnJheVNpemUpKHgpLCBudWxsKTtcbiAgICB9LFxuICAgICdBcnJheSwgc3RyaW5nJzogZnVuY3Rpb24gQXJyYXlTdHJpbmcoeCwgZm9ybWF0KSB7XG4gICAgICByZXR1cm4gX2RpYWcoeCwgMCwgKDAsIF9hcnJheS5hcnJheVNpemUpKHgpLCBmb3JtYXQpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBudW1iZXIsIHN0cmluZyc6IGZ1bmN0aW9uIEFycmF5TnVtYmVyU3RyaW5nKHgsIGssIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIGssICgwLCBfYXJyYXkuYXJyYXlTaXplKSh4KSwgZm9ybWF0KTtcbiAgICB9LFxuICAgICdBcnJheSwgQmlnTnVtYmVyLCBzdHJpbmcnOiBmdW5jdGlvbiBBcnJheUJpZ051bWJlclN0cmluZyh4LCBrLCBmb3JtYXQpIHtcbiAgICAgIHJldHVybiBfZGlhZyh4LCBrLnRvTnVtYmVyKCksICgwLCBfYXJyYXkuYXJyYXlTaXplKSh4KSwgZm9ybWF0KTtcbiAgICB9LFxuICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHgpIHtcbiAgICAgIHJldHVybiBfZGlhZyh4LCAwLCB4LnNpemUoKSwgeC5zdG9yYWdlKCkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgbnVtYmVyJzogZnVuY3Rpb24gTWF0cml4TnVtYmVyKHgsIGspIHtcbiAgICAgIHJldHVybiBfZGlhZyh4LCBrLCB4LnNpemUoKSwgeC5zdG9yYWdlKCkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQmlnTnVtYmVyJzogZnVuY3Rpb24gTWF0cml4QmlnTnVtYmVyKHgsIGspIHtcbiAgICAgIHJldHVybiBfZGlhZyh4LCBrLnRvTnVtYmVyKCksIHguc2l6ZSgpLCB4LnN0b3JhZ2UoKSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBzdHJpbmcnOiBmdW5jdGlvbiBNYXRyaXhTdHJpbmcoeCwgZm9ybWF0KSB7XG4gICAgICByZXR1cm4gX2RpYWcoeCwgMCwgeC5zaXplKCksIGZvcm1hdCk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBudW1iZXIsIHN0cmluZyc6IGZ1bmN0aW9uIE1hdHJpeE51bWJlclN0cmluZyh4LCBrLCBmb3JtYXQpIHtcbiAgICAgIHJldHVybiBfZGlhZyh4LCBrLCB4LnNpemUoKSwgZm9ybWF0KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEJpZ051bWJlciwgc3RyaW5nJzogZnVuY3Rpb24gTWF0cml4QmlnTnVtYmVyU3RyaW5nKHgsIGssIGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9kaWFnKHgsIGsudG9OdW1iZXIoKSwgeC5zaXplKCksIGZvcm1hdCk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENyZWVhdGUgZGlhZ29uYWwgbWF0cml4IGZyb20gYSB2ZWN0b3Igb3IgdmljZSB2ZXJzYVxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSB4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBrXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtYXQgU3RvcmFnZSBmb3JtYXQgZm9yIG1hdHJpeC4gSWYgbnVsbCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFuIEFycmF5IGlzIHJldHVybmVkXG4gICAqIEByZXR1cm5zIHtBcnJheSB8IE1hdHJpeH1cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX2RpYWcoeCwgaywgc2l6ZSwgZm9ybWF0KSB7XG4gICAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKGspKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTZWNvbmQgcGFyYW1ldGVyIGluIGZ1bmN0aW9uIGRpYWcgbXVzdCBiZSBhbiBpbnRlZ2VyJyk7XG4gICAgfVxuXG4gICAgdmFyIGtTdXBlciA9IGsgPiAwID8gayA6IDA7XG4gICAgdmFyIGtTdWIgPSBrIDwgMCA/IC1rIDogMDsgLy8gY2hlY2sgZGltZW5zaW9uc1xuXG4gICAgc3dpdGNoIChzaXplLmxlbmd0aCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gX2NyZWF0ZURpYWdvbmFsTWF0cml4KHgsIGssIGZvcm1hdCwgc2l6ZVswXSwga1N1Yiwga1N1cGVyKTtcblxuICAgICAgY2FzZSAyOlxuICAgICAgICByZXR1cm4gX2dldERpYWdvbmFsKHgsIGssIGZvcm1hdCwgc2l6ZSwga1N1Yiwga1N1cGVyKTtcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IGZvciBmdW5jdGlvbiBkaWFnIG11c3QgYmUgMiBkaW1lbnNpb25hbCcpO1xuICB9XG5cbiAgZnVuY3Rpb24gX2NyZWF0ZURpYWdvbmFsTWF0cml4KHgsIGssIGZvcm1hdCwgbCwga1N1Yiwga1N1cGVyKSB7XG4gICAgLy8gbWF0cml4IHNpemVcbiAgICB2YXIgbXMgPSBbbCArIGtTdWIsIGwgKyBrU3VwZXJdO1xuXG4gICAgaWYgKGZvcm1hdCAmJiBmb3JtYXQgIT09ICdzcGFyc2UnICYmIGZvcm1hdCAhPT0gJ2RlbnNlJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gbWF0cml4IHR5cGUgXCIuY29uY2F0KGZvcm1hdCwgXCJcXFwiXCIpKTtcbiAgICB9IC8vIGNyZWF0ZSBkaWFnb25hbCBtYXRyaXhcblxuXG4gICAgdmFyIG0gPSBmb3JtYXQgPT09ICdzcGFyc2UnID8gU3BhcnNlTWF0cml4LmRpYWdvbmFsKG1zLCB4LCBrKSA6IERlbnNlTWF0cml4LmRpYWdvbmFsKG1zLCB4LCBrKTsgLy8gY2hlY2sgd2UgbmVlZCB0byByZXR1cm4gYSBtYXRyaXhcblxuICAgIHJldHVybiBmb3JtYXQgIT09IG51bGwgPyBtIDogbS52YWx1ZU9mKCk7XG4gIH1cblxuICBmdW5jdGlvbiBfZ2V0RGlhZ29uYWwoeCwgaywgZm9ybWF0LCBzLCBrU3ViLCBrU3VwZXIpIHtcbiAgICAvLyBjaGVjayB4IGlzIGEgTWF0cml4XG4gICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKHgpKSB7XG4gICAgICAvLyBnZXQgZGlhZ29uYWwgbWF0cml4XG4gICAgICB2YXIgZG0gPSB4LmRpYWdvbmFsKGspOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHJldHVybiBhIG1hdHJpeFxuXG4gICAgICBpZiAoZm9ybWF0ICE9PSBudWxsKSB7XG4gICAgICAgIC8vIGNoZWNrIHdlIG5lZWQgdG8gY2hhbmdlIG1hdHJpeCBmb3JtYXRcbiAgICAgICAgaWYgKGZvcm1hdCAhPT0gZG0uc3RvcmFnZSgpKSB7XG4gICAgICAgICAgcmV0dXJuIG1hdHJpeChkbSwgZm9ybWF0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkbTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGRtLnZhbHVlT2YoKTtcbiAgICB9IC8vIHZlY3RvciBzaXplXG5cblxuICAgIHZhciBuID0gTWF0aC5taW4oc1swXSAtIGtTdWIsIHNbMV0gLSBrU3VwZXIpOyAvLyBkaWFnb25hbCB2YWx1ZXNcblxuICAgIHZhciB2ZWN0b3IgPSBbXTsgLy8gbG9vcCBkaWFnb25hbFxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIHZlY3RvcltpXSA9IHhbaSArIGtTdWJdW2kgKyBrU3VwZXJdO1xuICAgIH0gLy8gY2hlY2sgd2UgbmVlZCB0byByZXR1cm4gYSBtYXRyaXhcblxuXG4gICAgcmV0dXJuIGZvcm1hdCAhPT0gbnVsbCA/IG1hdHJpeCh2ZWN0b3IpIDogdmVjdG9yO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlRGlhZyA9IGNyZWF0ZURpYWc7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZURvdCA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2RvdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGQnLCAnbXVsdGlwbHknXTtcbnZhciBjcmVhdGVEb3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWRkID0gX3JlZi5hZGQsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHk7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZG90IHByb2R1Y3Qgb2YgdHdvIHZlY3RvcnMuIFRoZSBkb3QgcHJvZHVjdCBvZlxuICAgKiBgQSA9IFthMSwgYTIsIGEzLCAuLi4sIGFuXWAgYW5kIGBCID0gW2IxLCBiMiwgYjMsIC4uLiwgYm5dYCBpcyBkZWZpbmVkIGFzOlxuICAgKlxuICAgKiAgICBkb3QoQSwgQikgPSBhMSAqIGIxICsgYTIgKiBiMiArIGEzICogYjMgKyAuLi4gKyBhbiAqIGJuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5kb3QoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZG90KFsyLCA0LCAxXSwgWzIsIDIsIDNdKSAgICAgICAvLyByZXR1cm5zIG51bWJlciAxNVxuICAgKiAgICBtYXRoLm11bHRpcGx5KFsyLCA0LCAxXSwgWzIsIDIsIDNdKSAgLy8gcmV0dXJucyBudW1iZXIgMTVcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIG11bHRpcGx5LCBjcm9zc1xuICAgKlxuICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0geCAgICAgRmlyc3QgdmVjdG9yXG4gICAqIEBwYXJhbSAge0FycmF5IHwgTWF0cml4fSB5ICAgICBTZWNvbmQgdmVjdG9yXG4gICAqIEByZXR1cm4ge251bWJlcn0gICAgICAgICAgICAgICBSZXR1cm5zIHRoZSBkb3QgcHJvZHVjdCBvZiBgeGAgYW5kIGB5YFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnTWF0cml4LCBNYXRyaXgnOiBmdW5jdGlvbiBNYXRyaXhNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIF9kb3QoeC50b0FycmF5KCksIHkudG9BcnJheSgpKTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgcmV0dXJuIF9kb3QoeC50b0FycmF5KCksIHkpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gX2RvdCh4LCB5LnRvQXJyYXkoKSk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogX2RvdFxuICB9KTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgZG90IHByb2R1Y3QgZm9yIHR3byBhcnJheXNcbiAgICogQHBhcmFtIHtBcnJheX0geCAgRmlyc3QgdmVjdG9yXG4gICAqIEBwYXJhbSB7QXJyYXl9IHkgIFNlY29uZCB2ZWN0b3JcbiAgICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgZG90IHByb2R1Y3Qgb2YgeCBhbmQgeVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgLy8gVE9ETzogZG91YmxlIGNvZGUgd2l0aCBtYXRoLm11bHRpcGx5XG5cbiAgZnVuY3Rpb24gX2RvdCh4LCB5KSB7XG4gICAgdmFyIHhTaXplID0gKDAsIF9hcnJheS5hcnJheVNpemUpKHgpO1xuICAgIHZhciB5U2l6ZSA9ICgwLCBfYXJyYXkuYXJyYXlTaXplKSh5KTtcbiAgICB2YXIgbGVuID0geFNpemVbMF07XG4gICAgaWYgKHhTaXplLmxlbmd0aCAhPT0gMSB8fCB5U2l6ZS5sZW5ndGggIT09IDEpIHRocm93IG5ldyBSYW5nZUVycm9yKCdWZWN0b3IgZXhwZWN0ZWQnKTsgLy8gVE9ETzogYmV0dGVyIGVycm9yIG1lc3NhZ2VcblxuICAgIGlmICh4U2l6ZVswXSAhPT0geVNpemVbMF0pIHRocm93IG5ldyBSYW5nZUVycm9yKCdWZWN0b3JzIG11c3QgaGF2ZSBlcXVhbCBsZW5ndGggKCcgKyB4U2l6ZVswXSArICcgIT0gJyArIHlTaXplWzBdICsgJyknKTtcbiAgICBpZiAobGVuID09PSAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSB0aGUgZG90IHByb2R1Y3Qgb2YgZW1wdHkgdmVjdG9ycycpO1xuICAgIHZhciBwcm9kID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHByb2QgPSBhZGQocHJvZCwgbXVsdGlwbHkoeFtpXSwgeVtpXSkpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9kO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlRG90ID0gY3JlYXRlRG90OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVFaWdzID0gdm9pZCAwO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBuYW1lID0gJ2VpZ3MnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ3R5cGVkJywgJ21hdHJpeCcsICdhZGRTY2FsYXInLCAnZXF1YWwnLCAnc3VidHJhY3QnLCAnYWJzJywgJ2F0YW4nLCAnY29zJywgJ3NpbicsICdtdWx0aXBseVNjYWxhcicsICdpbnYnLCAnYmlnbnVtYmVyJywgJ211bHRpcGx5JywgJ2FkZCddO1xudmFyIGNyZWF0ZUVpZ3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgZXF1YWwgPSBfcmVmLmVxdWFsLFxuICAgICAgYWJzID0gX3JlZi5hYnMsXG4gICAgICBhdGFuID0gX3JlZi5hdGFuLFxuICAgICAgY29zID0gX3JlZi5jb3MsXG4gICAgICBzaW4gPSBfcmVmLnNpbixcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcixcbiAgICAgIGludiA9IF9yZWYuaW52LFxuICAgICAgYmlnbnVtYmVyID0gX3JlZi5iaWdudW1iZXIsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICBhZGQgPSBfcmVmLmFkZDtcblxuICAvKipcbiAgICogQ29tcHV0ZSBlaWdlbnZhbHVlIGFuZCBlaWdlbnZlY3RvciBvZiBhIHJlYWwgc3ltbWV0cmljIG1hdHJpeC5cbiAgICogT25seSBhcHBsaWNhYmxlIHRvIHR3byBkaW1lbnNpb25hbCBzeW1tZXRyaWMgbWF0cmljZXMuIFVzZXMgSmFjb2JpXG4gICAqIEFsZ29yaXRobS4gTWF0cml4IGNvbnRhaW5pbmcgbWl4ZWQgdHlwZSAoJ251bWJlcicsICdiaWdudW1iZXInLCAnZnJhY3Rpb24nKVxuICAgKiBvZiBlbGVtZW50cyBhcmUgbm90IHN1cHBvcnRlZC4gSW5wdXQgbWF0cml4IG9yIDJEIGFycmF5IHNob3VsZCBjb250YWluIGFsbCBlbGVtZW50c1xuICAgKiBvZiBlaXRoZXIgJ251bWJlcicsICdiaWdudW1iZXInIG9yICdmcmFjdGlvbicgdHlwZS4gRm9yICdudW1iZXInIGFuZCAnZnJhY3Rpb24nLCB0aGVcbiAgICogZWlnZW52YWx1ZXMgYXJlIG9mICdudW1iZXInIHR5cGUuIEZvciAnYmlnbnVtYmVyJyB0aGUgZWlnZW52YWx1ZXMgYXJlIG9mICcnYmlnbnVtYmVyJyB0eXBlLlxuICAgKiBFaWdlbnZlY3RvcnMgYXJlIGFsd2F5cyBvZiAnbnVtYmVyJyB0eXBlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmVpZ3MoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBjb25zdCBIID0gW1s1LCAyLjNdLCBbMi4zLCAxXV1cbiAgICogICAgIGNvbnN0IGFucyA9IG1hdGguZWlncyhIKSAvLyByZXR1cm5zIHt2YWx1ZXM6IFtFMSxFMi4uLnNvcnRlZF0sIHZlY3RvcnM6IFt2MSx2Mi4uLi4gY29ycmVzcG9uZGluZyB2ZWN0b3JzXX1cbiAgICogICAgIGNvbnN0IEUgPSBhbnMudmFsdWVzXG4gICAqICAgICBjb25zdCBVID0gYW5zLnZlY3RvcnNcbiAgICogICAgIGNvbnN0IFVUeEh4VSA9IG1hdGgubXVsdGlwbHkobWF0aC50cmFuc3Bvc2UoVSksIEgsIFUpIC8vIHJvdGF0ZXMgSCB0byB0aGUgZWlnZW4tcmVwcmVzZW50YXRpb25cbiAgICogICAgIEVbMF0gPT0gVVR4SHhVWzBdWzBdICAvLyByZXR1cm5zIHRydWVcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBpbnZcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0geCAgTWF0cml4IHRvIGJlIGRpYWdvbmFsaXplZFxuICAgKiBAcmV0dXJuIHt7dmFsdWVzOiBBcnJheSwgdmVjdG9yczogQXJyYXl9IHwge3ZhbHVlczogTWF0cml4LCB2ZWN0b3JzOiBNYXRyaXh9fSBPYmplY3QgY29udGFpbmluZyBlaWdlbnZhbHVlcyAoQXJyYXkgb3IgTWF0cml4KSBhbmQgZWlnZW52ZWN0b3JzICgyRCBBcnJheS9NYXRyaXgpLlxuICAgKi9cbiAgdmFyIGVpZ3MgPSB0eXBlZCgnZWlncycsIHtcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoeCkge1xuICAgICAgLy8gY2hlY2sgYXJyYXkgc2l6ZVxuICAgICAgdmFyIG1hdCA9IG1hdHJpeCh4KTtcbiAgICAgIHZhciBzaXplID0gbWF0LnNpemUoKTtcblxuICAgICAgaWYgKHNpemUubGVuZ3RoICE9PSAyIHx8IHNpemVbMF0gIT09IHNpemVbMV0pIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHNxdWFyZSAnICsgJyhzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICB9IC8vIHVzZSBkZW5zZSAyRCBtYXRyaXggaW1wbGVtZW50YXRpb25cblxuXG4gICAgICB2YXIgYW5zID0gY2hlY2tBbmRTdWJtaXQobWF0LCBzaXplWzBdKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlczogYW5zWzBdLFxuICAgICAgICB2ZWN0b3JzOiBhbnNbMV1cbiAgICAgIH07XG4gICAgfSxcbiAgICBNYXRyaXg6IGZ1bmN0aW9uIE1hdHJpeCh4KSB7XG4gICAgICAvLyB1c2UgZGVuc2UgMkQgYXJyYXkgaW1wbGVtZW50YXRpb25cbiAgICAgIC8vIGRlbnNlIG1hdHJpeFxuICAgICAgdmFyIHNpemUgPSB4LnNpemUoKTtcblxuICAgICAgaWYgKHNpemUubGVuZ3RoICE9PSAyIHx8IHNpemVbMF0gIT09IHNpemVbMV0pIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHNxdWFyZSAnICsgJyhzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhbnMgPSBjaGVja0FuZFN1Ym1pdCh4LCBzaXplWzBdKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlczogbWF0cml4KGFuc1swXSksXG4gICAgICAgIHZlY3RvcnM6IG1hdHJpeChhbnNbMV0pXG4gICAgICB9O1xuICAgIH1cbiAgfSk7IC8vIElzIHRoZSBtYXRyaXhcbiAgLy8gc3ltbWV0cmljID9cblxuICBmdW5jdGlvbiBpc1N5bW1ldHJpYyh4LCBuKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSBpOyBqIDwgbjsgaisrKSB7XG4gICAgICAgIC8vIG5vdCBzeW1tdHJpY1xuICAgICAgICBpZiAoIWVxdWFsKHhbaV1bal0sIHhbal1baV0pKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5wdXQgbWF0cml4IGlzIG5vdCBzeW1tZXRyaWMnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSAvLyBjaGVjayBpbnB1dCBmb3IgcG9zc2libGUgcHJvYmxlbXNcbiAgLy8gYW5kIHBlcmZvcm0gZGlhZ29uYWxpemF0aW9uIGVmZmljaWVudGx5IGZvclxuICAvLyBzcGVjaWZpYyB0eXBlIG9mIG51bWJlclxuXG5cbiAgZnVuY3Rpb24gY2hlY2tBbmRTdWJtaXQoeCwgbikge1xuICAgIHZhciB0eXBlID0geC5kYXRhdHlwZSgpOyAvLyB0eXBlIGNoZWNrXG5cbiAgICBpZiAodHlwZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0eXBlID0geC5nZXREYXRhVHlwZSgpO1xuICAgIH1cblxuICAgIGlmICh0eXBlICE9PSAnbnVtYmVyJyAmJiB0eXBlICE9PSAnQmlnTnVtYmVyJyAmJiB0eXBlICE9PSAnRnJhY3Rpb24nKSB7XG4gICAgICBpZiAodHlwZSA9PT0gJ21peGVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdNaXhlZCBtYXRyaXggZWxlbWVudCB0eXBlIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ01hdHJpeCBlbGVtZW50IHR5cGUgbm90IHN1cHBvcnRlZCAoJyArIHR5cGUgKyAnKScpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpc1N5bW1ldHJpYyh4LnRvQXJyYXkoKSwgbik7XG4gICAgfSAvLyBwZXJmb3JtIGVmZmljaWVudCBjYWxjdWxhdGlvbiBmb3IgJ251bWJlcnMnXG5cblxuICAgIGlmICh0eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgcmV0dXJuIGRpYWcoeC50b0FycmF5KCkpO1xuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ0ZyYWN0aW9uJykge1xuICAgICAgdmFyIHhBcnIgPSB4LnRvQXJyYXkoKTsgLy8gY29udmVydCBmcmFjdGlvbiB0byBudW1iZXJzXG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgIGZvciAodmFyIGogPSBpOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgeEFycltpXVtqXSA9IHhBcnJbaV1bal0udmFsdWVPZigpO1xuICAgICAgICAgIHhBcnJbal1baV0gPSB4QXJyW2ldW2pdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkaWFnKHgudG9BcnJheSgpKTtcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdCaWdOdW1iZXInKSB7XG4gICAgICByZXR1cm4gZGlhZ0JpZyh4LnRvQXJyYXkoKSk7XG4gICAgfVxuICB9IC8vIGRpYWdvbmFsaXphdGlvbiBpbXBsZW1lbnRhdGlvbiBmb3IgbnVtYmVyIChlZmZpY2llbnQpXG5cblxuICBmdW5jdGlvbiBkaWFnKHgpIHtcbiAgICB2YXIgTiA9IHgubGVuZ3RoO1xuICAgIHZhciBlMCA9IE1hdGguYWJzKGNvbmZpZy5lcHNpbG9uIC8gTik7XG4gICAgdmFyIHBzaTtcbiAgICB2YXIgU2lqID0gbmV3IEFycmF5KE4pOyAvLyBTaWogaXMgSWRlbnRpdHkgTWF0cml4XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE47IGkrKykge1xuICAgICAgU2lqW2ldID0gY3JlYXRlQXJyYXkoTiwgMCk7XG4gICAgICBTaWpbaV1baV0gPSAxLjA7XG4gICAgfSAvLyBpbml0aWFsIGVycm9yXG5cblxuICAgIHZhciBWYWIgPSBnZXRBaWooeCk7XG5cbiAgICB3aGlsZSAoTWF0aC5hYnMoVmFiWzFdKSA+PSBNYXRoLmFicyhlMCkpIHtcbiAgICAgIHZhciBfaSA9IFZhYlswXVswXTtcbiAgICAgIHZhciBqID0gVmFiWzBdWzFdO1xuICAgICAgcHNpID0gZ2V0VGhldGEoeFtfaV1bX2ldLCB4W2pdW2pdLCB4W19pXVtqXSk7XG4gICAgICB4ID0geDEoeCwgcHNpLCBfaSwgaik7XG4gICAgICBTaWogPSBTaWoxKFNpaiwgcHNpLCBfaSwgaik7XG4gICAgICBWYWIgPSBnZXRBaWooeCk7XG4gICAgfVxuXG4gICAgdmFyIEVpID0gY3JlYXRlQXJyYXkoTiwgMCk7IC8vIGVpZ2VudmFsdWVzXG5cbiAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBOOyBfaTIrKykge1xuICAgICAgRWlbX2kyXSA9IHhbX2kyXVtfaTJdO1xuICAgIH1cblxuICAgIHJldHVybiBzb3J0aW5nKCgwLCBfb2JqZWN0LmNsb25lKShFaSksICgwLCBfb2JqZWN0LmNsb25lKShTaWopKTtcbiAgfSAvLyBkaWFnb25hbGl6YXRpb24gaW1wbGVtZW50YXRpb24gZm9yIGJpZ051bWJlclxuXG5cbiAgZnVuY3Rpb24gZGlhZ0JpZyh4KSB7XG4gICAgdmFyIE4gPSB4Lmxlbmd0aDtcbiAgICB2YXIgZTAgPSBhYnMoY29uZmlnLmVwc2lsb24gLyBOKTtcbiAgICB2YXIgcHNpO1xuICAgIHZhciBTaWogPSBuZXcgQXJyYXkoTik7IC8vIFNpaiBpcyBJZGVudGl0eSBNYXRyaXhcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICBTaWpbaV0gPSBjcmVhdGVBcnJheShOLCAwKTtcbiAgICAgIFNpaltpXVtpXSA9IDEuMDtcbiAgICB9IC8vIGluaXRpYWwgZXJyb3JcblxuXG4gICAgdmFyIFZhYiA9IGdldEFpakJpZyh4KTtcblxuICAgIHdoaWxlIChhYnMoVmFiWzFdKSA+PSBhYnMoZTApKSB7XG4gICAgICB2YXIgX2kzID0gVmFiWzBdWzBdO1xuICAgICAgdmFyIGogPSBWYWJbMF1bMV07XG4gICAgICBwc2kgPSBnZXRUaGV0YUJpZyh4W19pM11bX2kzXSwgeFtqXVtqXSwgeFtfaTNdW2pdKTtcbiAgICAgIHggPSB4MUJpZyh4LCBwc2ksIF9pMywgaik7XG4gICAgICBTaWogPSBTaWoxQmlnKFNpaiwgcHNpLCBfaTMsIGopO1xuICAgICAgVmFiID0gZ2V0QWlqQmlnKHgpO1xuICAgIH1cblxuICAgIHZhciBFaSA9IGNyZWF0ZUFycmF5KE4sIDApOyAvLyBlaWdlbnZhbHVlc1xuXG4gICAgZm9yICh2YXIgX2k0ID0gMDsgX2k0IDwgTjsgX2k0KyspIHtcbiAgICAgIEVpW19pNF0gPSB4W19pNF1bX2k0XTtcbiAgICB9IC8vIHJldHVybiBbY2xvbmUoRWkpLCBjbG9uZShTaWopXVxuXG5cbiAgICByZXR1cm4gc29ydGluZygoMCwgX29iamVjdC5jbG9uZSkoRWkpLCAoMCwgX29iamVjdC5jbG9uZSkoU2lqKSk7XG4gIH0gLy8gZ2V0IGFuZ2xlXG5cblxuICBmdW5jdGlvbiBnZXRUaGV0YShhaWksIGFqaiwgYWlqKSB7XG4gICAgdmFyIGRlbm9tID0gYWpqIC0gYWlpO1xuXG4gICAgaWYgKE1hdGguYWJzKGRlbm9tKSA8PSBjb25maWcuZXBzaWxvbikge1xuICAgICAgcmV0dXJuIE1hdGguUEkgLyA0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gMC41ICogTWF0aC5hdGFuKDIgKiBhaWogLyAoYWpqIC0gYWlpKSk7XG4gICAgfVxuICB9IC8vIGdldCBhbmdsZVxuXG5cbiAgZnVuY3Rpb24gZ2V0VGhldGFCaWcoYWlpLCBhamosIGFpaikge1xuICAgIHZhciBkZW5vbSA9IHN1YnRyYWN0KGFqaiwgYWlpKTtcblxuICAgIGlmIChhYnMoZGVub20pIDw9IGNvbmZpZy5lcHNpbG9uKSB7XG4gICAgICByZXR1cm4gYmlnbnVtYmVyKC0xKS5hY29zKCkuZGl2KDQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbXVsdGlwbHlTY2FsYXIoMC41LCBhdGFuKG11bHRpcGx5KDIsIGFpaiwgaW52KGRlbm9tKSkpKTtcbiAgICB9XG4gIH0gLy8gdXBkYXRlIGVpZ3ZlY1xuXG5cbiAgZnVuY3Rpb24gU2lqMShTaWosIHRoZXRhLCBpLCBqKSB7XG4gICAgdmFyIE4gPSBTaWoubGVuZ3RoO1xuICAgIHZhciBjID0gTWF0aC5jb3ModGhldGEpO1xuICAgIHZhciBzID0gTWF0aC5zaW4odGhldGEpO1xuICAgIHZhciBTa2kgPSBjcmVhdGVBcnJheShOLCAwKTtcbiAgICB2YXIgU2tqID0gY3JlYXRlQXJyYXkoTiwgMCk7XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IE47IGsrKykge1xuICAgICAgU2tpW2tdID0gYyAqIFNpaltrXVtpXSAtIHMgKiBTaWpba11bal07XG4gICAgICBTa2pba10gPSBzICogU2lqW2tdW2ldICsgYyAqIFNpaltrXVtqXTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBfayA9IDA7IF9rIDwgTjsgX2srKykge1xuICAgICAgU2lqW19rXVtpXSA9IFNraVtfa107XG4gICAgICBTaWpbX2tdW2pdID0gU2tqW19rXTtcbiAgICB9XG5cbiAgICByZXR1cm4gU2lqO1xuICB9IC8vIHVwZGF0ZSBlaWd2ZWMgZm9yIG92ZXJsYXBcblxuXG4gIGZ1bmN0aW9uIFNpajFCaWcoU2lqLCB0aGV0YSwgaSwgaikge1xuICAgIHZhciBOID0gU2lqLmxlbmd0aDtcbiAgICB2YXIgYyA9IGNvcyh0aGV0YSk7XG4gICAgdmFyIHMgPSBzaW4odGhldGEpO1xuICAgIHZhciBTa2kgPSBjcmVhdGVBcnJheShOLCBiaWdudW1iZXIoMCkpO1xuICAgIHZhciBTa2ogPSBjcmVhdGVBcnJheShOLCBiaWdudW1iZXIoMCkpO1xuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBOOyBrKyspIHtcbiAgICAgIFNraVtrXSA9IHN1YnRyYWN0KG11bHRpcGx5U2NhbGFyKGMsIFNpaltrXVtpXSksIG11bHRpcGx5U2NhbGFyKHMsIFNpaltrXVtqXSkpO1xuICAgICAgU2tqW2tdID0gYWRkU2NhbGFyKG11bHRpcGx5U2NhbGFyKHMsIFNpaltrXVtpXSksIG11bHRpcGx5U2NhbGFyKGMsIFNpaltrXVtqXSkpO1xuICAgIH1cblxuICAgIGZvciAodmFyIF9rMiA9IDA7IF9rMiA8IE47IF9rMisrKSB7XG4gICAgICBTaWpbX2syXVtpXSA9IFNraVtfazJdO1xuICAgICAgU2lqW19rMl1bal0gPSBTa2pbX2syXTtcbiAgICB9XG5cbiAgICByZXR1cm4gU2lqO1xuICB9IC8vIHVwZGF0ZSBtYXRyaXhcblxuXG4gIGZ1bmN0aW9uIHgxQmlnKEhpaiwgdGhldGEsIGksIGopIHtcbiAgICB2YXIgTiA9IEhpai5sZW5ndGg7XG4gICAgdmFyIGMgPSBiaWdudW1iZXIoY29zKHRoZXRhKSk7XG4gICAgdmFyIHMgPSBiaWdudW1iZXIoc2luKHRoZXRhKSk7XG4gICAgdmFyIGMyID0gbXVsdGlwbHlTY2FsYXIoYywgYyk7XG4gICAgdmFyIHMyID0gbXVsdGlwbHlTY2FsYXIocywgcyk7XG4gICAgdmFyIEFraSA9IGNyZWF0ZUFycmF5KE4sIGJpZ251bWJlcigwKSk7XG4gICAgdmFyIEFraiA9IGNyZWF0ZUFycmF5KE4sIGJpZ251bWJlcigwKSk7IC8vIDJjcyBIaWpcblxuICAgIHZhciBjc0hpaiA9IG11bHRpcGx5KGJpZ251bWJlcigyKSwgYywgcywgSGlqW2ldW2pdKTsgLy8gIEFpaVxuXG4gICAgdmFyIEFpaSA9IGFkZFNjYWxhcihzdWJ0cmFjdChtdWx0aXBseVNjYWxhcihjMiwgSGlqW2ldW2ldKSwgY3NIaWopLCBtdWx0aXBseVNjYWxhcihzMiwgSGlqW2pdW2pdKSk7XG4gICAgdmFyIEFqaiA9IGFkZChtdWx0aXBseVNjYWxhcihzMiwgSGlqW2ldW2ldKSwgY3NIaWosIG11bHRpcGx5U2NhbGFyKGMyLCBIaWpbal1bal0pKTsgLy8gMCAgdG8gaVxuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBOOyBrKyspIHtcbiAgICAgIEFraVtrXSA9IHN1YnRyYWN0KG11bHRpcGx5U2NhbGFyKGMsIEhpaltpXVtrXSksIG11bHRpcGx5U2NhbGFyKHMsIEhpaltqXVtrXSkpO1xuICAgICAgQWtqW2tdID0gYWRkU2NhbGFyKG11bHRpcGx5U2NhbGFyKHMsIEhpaltpXVtrXSksIG11bHRpcGx5U2NhbGFyKGMsIEhpaltqXVtrXSkpO1xuICAgIH0gLy8gTW9kaWZ5IEhpalxuXG5cbiAgICBIaWpbaV1baV0gPSBBaWk7XG4gICAgSGlqW2pdW2pdID0gQWpqO1xuICAgIEhpaltpXVtqXSA9IGJpZ251bWJlcigwKTtcbiAgICBIaWpbal1baV0gPSBiaWdudW1iZXIoMCk7IC8vIDAgIHRvIGlcblxuICAgIGZvciAodmFyIF9rMyA9IDA7IF9rMyA8IE47IF9rMysrKSB7XG4gICAgICBpZiAoX2szICE9PSBpICYmIF9rMyAhPT0gaikge1xuICAgICAgICBIaWpbaV1bX2szXSA9IEFraVtfazNdO1xuICAgICAgICBIaWpbX2szXVtpXSA9IEFraVtfazNdO1xuICAgICAgICBIaWpbal1bX2szXSA9IEFraltfazNdO1xuICAgICAgICBIaWpbX2szXVtqXSA9IEFraltfazNdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBIaWo7XG4gIH0gLy8gdXBkYXRlIG1hdHJpeFxuXG5cbiAgZnVuY3Rpb24geDEoSGlqLCB0aGV0YSwgaSwgaikge1xuICAgIHZhciBOID0gSGlqLmxlbmd0aDtcbiAgICB2YXIgYyA9IE1hdGguY29zKHRoZXRhKTtcbiAgICB2YXIgcyA9IE1hdGguc2luKHRoZXRhKTtcbiAgICB2YXIgYzIgPSBjICogYztcbiAgICB2YXIgczIgPSBzICogcztcbiAgICB2YXIgQWtpID0gY3JlYXRlQXJyYXkoTiwgMCk7XG4gICAgdmFyIEFraiA9IGNyZWF0ZUFycmF5KE4sIDApOyAvLyAgQWlpXG5cbiAgICB2YXIgQWlpID0gYzIgKiBIaWpbaV1baV0gLSAyICogYyAqIHMgKiBIaWpbaV1bal0gKyBzMiAqIEhpaltqXVtqXTtcbiAgICB2YXIgQWpqID0gczIgKiBIaWpbaV1baV0gKyAyICogYyAqIHMgKiBIaWpbaV1bal0gKyBjMiAqIEhpaltqXVtqXTsgLy8gMCAgdG8gaVxuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBOOyBrKyspIHtcbiAgICAgIEFraVtrXSA9IGMgKiBIaWpbaV1ba10gLSBzICogSGlqW2pdW2tdO1xuICAgICAgQWtqW2tdID0gcyAqIEhpaltpXVtrXSArIGMgKiBIaWpbal1ba107XG4gICAgfSAvLyBNb2RpZnkgSGlqXG5cblxuICAgIEhpaltpXVtpXSA9IEFpaTtcbiAgICBIaWpbal1bal0gPSBBamo7XG4gICAgSGlqW2ldW2pdID0gMDtcbiAgICBIaWpbal1baV0gPSAwOyAvLyAwICB0byBpXG5cbiAgICBmb3IgKHZhciBfazQgPSAwOyBfazQgPCBOOyBfazQrKykge1xuICAgICAgaWYgKF9rNCAhPT0gaSAmJiBfazQgIT09IGopIHtcbiAgICAgICAgSGlqW2ldW19rNF0gPSBBa2lbX2s0XTtcbiAgICAgICAgSGlqW19rNF1baV0gPSBBa2lbX2s0XTtcbiAgICAgICAgSGlqW2pdW19rNF0gPSBBa2pbX2s0XTtcbiAgICAgICAgSGlqW19rNF1bal0gPSBBa2pbX2s0XTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gSGlqO1xuICB9IC8vIGdldCBtYXggb2ZmLWRpYWdvbmFsIHZhbHVlIGZyb20gVXBwZXIgRGlhZ29uYWxcblxuXG4gIGZ1bmN0aW9uIGdldEFpaihNaWopIHtcbiAgICB2YXIgTiA9IE1pai5sZW5ndGg7XG4gICAgdmFyIG1heE1paiA9IDA7XG4gICAgdmFyIG1heElKID0gWzAsIDFdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgIGZvciAodmFyIGogPSBpICsgMTsgaiA8IE47IGorKykge1xuICAgICAgICBpZiAoTWF0aC5hYnMobWF4TWlqKSA8IE1hdGguYWJzKE1paltpXVtqXSkpIHtcbiAgICAgICAgICBtYXhNaWogPSBNYXRoLmFicyhNaWpbaV1bal0pO1xuICAgICAgICAgIG1heElKID0gW2ksIGpdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFttYXhJSiwgbWF4TWlqXTtcbiAgfSAvLyBnZXQgbWF4IG9mZi1kaWFnb25hbCB2YWx1ZSBmcm9tIFVwcGVyIERpYWdvbmFsXG5cblxuICBmdW5jdGlvbiBnZXRBaWpCaWcoTWlqKSB7XG4gICAgdmFyIE4gPSBNaWoubGVuZ3RoO1xuICAgIHZhciBtYXhNaWogPSAwO1xuICAgIHZhciBtYXhJSiA9IFswLCAxXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgTjsgaSsrKSB7XG4gICAgICBmb3IgKHZhciBqID0gaSArIDE7IGogPCBOOyBqKyspIHtcbiAgICAgICAgaWYgKGFicyhtYXhNaWopIDwgYWJzKE1paltpXVtqXSkpIHtcbiAgICAgICAgICBtYXhNaWogPSBhYnMoTWlqW2ldW2pdKTtcbiAgICAgICAgICBtYXhJSiA9IFtpLCBqXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBbbWF4SUosIG1heE1pal07XG4gIH0gLy8gc29ydCByZXN1bHRzXG5cblxuICBmdW5jdGlvbiBzb3J0aW5nKEUsIFMpIHtcbiAgICB2YXIgTiA9IEUubGVuZ3RoO1xuICAgIHZhciBFZiA9IEFycmF5KE4pO1xuICAgIHZhciBTZiA9IEFycmF5KE4pO1xuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBOOyBrKyspIHtcbiAgICAgIFNmW2tdID0gQXJyYXkoTik7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBOOyBpKyspIHtcbiAgICAgIHZhciBtaW5JRCA9IDA7XG4gICAgICB2YXIgbWluRSA9IEVbMF07XG5cbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgRS5sZW5ndGg7IGorKykge1xuICAgICAgICBpZiAoRVtqXSA8IG1pbkUpIHtcbiAgICAgICAgICBtaW5JRCA9IGo7XG4gICAgICAgICAgbWluRSA9IEVbbWluSURdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIEVmW2ldID0gRS5zcGxpY2UobWluSUQsIDEpWzBdO1xuXG4gICAgICBmb3IgKHZhciBfazUgPSAwOyBfazUgPCBOOyBfazUrKykge1xuICAgICAgICBTZltfazVdW2ldID0gU1tfazVdW21pbklEXTtcblxuICAgICAgICBTW19rNV0uc3BsaWNlKG1pbklELCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gWygwLCBfb2JqZWN0LmNsb25lKShFZiksICgwLCBfb2JqZWN0LmNsb25lKShTZildO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gYXJyYXkgb2YgYSBjZXJ0YWluIHNpemUgYW5kIGZpbGwgYWxsIGl0ZW1zIHdpdGggYW4gaW5pdGlhbCB2YWx1ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gc2l6ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHJldHVybiB7bnVtYmVyW119XG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gY3JlYXRlQXJyYXkoc2l6ZSwgdmFsdWUpIHtcbiAgICAvLyBUT0RPOiBhcyBzb29uIGFzIGFsbCBicm93c2VycyBzdXBwb3J0IEFycmF5LmZpbGwsIHVzZSB0aGF0IGluc3RlYWQgKElFIGRvZXNuJ3Qgc3VwcG9ydCBpdClcbiAgICB2YXIgYXJyYXkgPSBuZXcgQXJyYXkoc2l6ZSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNpemU7IGkrKykge1xuICAgICAgYXJyYXlbaV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cblxuICByZXR1cm4gZWlncztcbn0pO1xuZXhwb3J0cy5jcmVhdGVFaWdzID0gY3JlYXRlRWlnczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRXhwbSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZXhwbSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhYnMnLCAnYWRkJywgJ2lkZW50aXR5JywgJ2ludicsICdtdWx0aXBseSddO1xudmFyIGNyZWF0ZUV4cG0gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWJzID0gX3JlZi5hYnMsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIGlkZW50aXR5ID0gX3JlZi5pZGVudGl0eSxcbiAgICAgIGludiA9IF9yZWYuaW52LFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5O1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBtYXRyaXggZXhwb25lbnRpYWwsIGV4cG0oQSkgPSBlXkEuIFRoZSBtYXRyaXggbXVzdCBiZSBzcXVhcmUuXG4gICAqIE5vdCB0byBiZSBjb25mdXNlZCB3aXRoIGV4cChhKSwgd2hpY2ggcGVyZm9ybXMgZWxlbWVudC13aXNlXG4gICAqIGV4cG9uZW50aWF0aW9uLlxuICAgKlxuICAgKiBUaGUgZXhwb25lbnRpYWwgaXMgY2FsY3VsYXRlZCB1c2luZyB0aGUgUGFkw6kgYXBwcm94aW1hbnQgd2l0aCBzY2FsaW5nIGFuZFxuICAgKiBzcXVhcmluZzsgc2VlIFwiTmluZXRlZW4gRHViaW91cyBXYXlzIHRvIENvbXB1dGUgdGhlIEV4cG9uZW50aWFsIG9mIGFcbiAgICogTWF0cml4LFwiIGJ5IE1vbGVyIGFuZCBWYW4gTG9hbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5leHBtKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgY29uc3QgQSA9IFtbMCwyXSxbMCwwXV1cbiAgICogICAgIG1hdGguZXhwbShBKSAgICAgICAgLy8gcmV0dXJucyBbWzEsMl0sWzAsMV1dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgZXhwXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSB4ICBBIHNxdWFyZSBNYXRyaXhcbiAgICogQHJldHVybiB7TWF0cml4fSAgIFRoZSBleHBvbmVudGlhbCBvZiB4XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KEEpIHtcbiAgICAgIC8vIENoZWNrIG1hdHJpeCBzaXplXG4gICAgICB2YXIgc2l6ZSA9IEEuc2l6ZSgpO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggIT09IDIgfHwgc2l6ZVswXSAhPT0gc2l6ZVsxXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlICcgKyAnKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG4gPSBzaXplWzBdOyAvLyBEZXNpcmVkIGFjY3VyYWN5IG9mIHRoZSBhcHByb3hpbWFudCAoVGhlIGFjdHVhbCBhY2N1cmFjeVxuICAgICAgLy8gd2lsbCBiZSBhZmZlY3RlZCBieSByb3VuZC1vZmYgZXJyb3IpXG5cbiAgICAgIHZhciBlcHMgPSAxZS0xNTsgLy8gVGhlIFBhZMOpIGFwcHJveGltYW50IGlzIG5vdCBzbyBhY2N1cmF0ZSB3aGVuIHRoZSB2YWx1ZXMgb2YgQVxuICAgICAgLy8gYXJlIFwibGFyZ2VcIiwgc28gc2NhbGUgQSBieSBwb3dlcnMgb2YgdHdvLiBUaGVuIGNvbXB1dGUgdGhlXG4gICAgICAvLyBleHBvbmVudGlhbCwgYW5kIHNxdWFyZSB0aGUgcmVzdWx0IHJlcGVhdGVkbHkgYWNjb3JkaW5nIHRvXG4gICAgICAvLyB0aGUgaWRlbnRpdHkgZV5BID0gKGVeKEEvbSkpXm1cbiAgICAgIC8vIENvbXB1dGUgaW5maW5pdHktbm9ybSBvZiBBLCB8fEF8fCwgdG8gc2VlIGhvdyBcImJpZ1wiIGl0IGlzXG5cbiAgICAgIHZhciBpbmZOb3JtID0gaW5maW5pdHlOb3JtKEEpOyAvLyBGaW5kIHRoZSBvcHRpbWFsIHNjYWxpbmcgZmFjdG9yIGFuZCBudW1iZXIgb2YgdGVybXMgaW4gdGhlXG4gICAgICAvLyBQYWTDqSBhcHByb3hpbWFudCB0byByZWFjaCB0aGUgZGVzaXJlZCBhY2N1cmFjeVxuXG4gICAgICB2YXIgcGFyYW1zID0gZmluZFBhcmFtcyhpbmZOb3JtLCBlcHMpO1xuICAgICAgdmFyIHEgPSBwYXJhbXMucTtcbiAgICAgIHZhciBqID0gcGFyYW1zLmo7IC8vIFRoZSBQYWRlIGFwcHJveGltYXRpb24gdG8gZV5BIGlzOlxuICAgICAgLy8gUnFxKEEpID0gRHFxKEEpIF4gLTEgKiBOcXEoQSlcbiAgICAgIC8vIHdoZXJlXG4gICAgICAvLyBOcXEoQSkgPSBzdW0oaT0wLCBxLCAoMnEtaSkhcCEgLyBbICgycSkhaSEocS1pKSEgXSBBXmlcbiAgICAgIC8vIERxcShBKSA9IHN1bShpPTAsIHEsICgycS1pKSFxISAvIFsgKDJxKSFpIShxLWkpISBdICgtQSleaVxuICAgICAgLy8gU2NhbGUgQSBieSAxIC8gMl5qXG5cbiAgICAgIHZhciBBcG9zID0gbXVsdGlwbHkoQSwgTWF0aC5wb3coMiwgLWopKTsgLy8gVGhlIGk9MCB0ZXJtIGlzIGp1c3QgdGhlIGlkZW50aXR5IG1hdHJpeFxuXG4gICAgICB2YXIgTiA9IGlkZW50aXR5KG4pO1xuICAgICAgdmFyIEQgPSBpZGVudGl0eShuKTsgLy8gSW5pdGlhbGl6YXRpb24gKGk9MClcblxuICAgICAgdmFyIGZhY3RvciA9IDE7IC8vIEluaXRpYWxpemF0aW9uIChpPTEpXG5cbiAgICAgIHZhciBBcG9zVG9JID0gQXBvczsgLy8gQ2xvbmluZyBub3QgbmVjZXNzYXJ5XG5cbiAgICAgIHZhciBhbHRlcm5hdGUgPSAtMTtcblxuICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gcTsgaSsrKSB7XG4gICAgICAgIGlmIChpID4gMSkge1xuICAgICAgICAgIEFwb3NUb0kgPSBtdWx0aXBseShBcG9zVG9JLCBBcG9zKTtcbiAgICAgICAgICBhbHRlcm5hdGUgPSAtYWx0ZXJuYXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgZmFjdG9yID0gZmFjdG9yICogKHEgLSBpICsgMSkgLyAoKDIgKiBxIC0gaSArIDEpICogaSk7XG4gICAgICAgIE4gPSBhZGQoTiwgbXVsdGlwbHkoZmFjdG9yLCBBcG9zVG9JKSk7XG4gICAgICAgIEQgPSBhZGQoRCwgbXVsdGlwbHkoZmFjdG9yICogYWx0ZXJuYXRlLCBBcG9zVG9JKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBSID0gbXVsdGlwbHkoaW52KEQpLCBOKTsgLy8gU3F1YXJlIGogdGltZXNcblxuICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGo7IF9pKyspIHtcbiAgICAgICAgUiA9IG11bHRpcGx5KFIsIFIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gKDAsIF9pcy5pc1NwYXJzZU1hdHJpeCkoQSkgPyBBLmNyZWF0ZVNwYXJzZU1hdHJpeChSKSA6IFI7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBpbmZpbml0eU5vcm0oQSkge1xuICAgIHZhciBuID0gQS5zaXplKClbMF07XG4gICAgdmFyIGluZk5vcm0gPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIHZhciByb3dTdW0gPSAwO1xuXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICByb3dTdW0gKz0gYWJzKEEuZ2V0KFtpLCBqXSkpO1xuICAgICAgfVxuXG4gICAgICBpbmZOb3JtID0gTWF0aC5tYXgocm93U3VtLCBpbmZOb3JtKTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW5mTm9ybTtcbiAgfVxuICAvKipcbiAgICogRmluZCB0aGUgYmVzdCBwYXJhbWV0ZXJzIGZvciB0aGUgUGFkZSBhcHByb3hpbWFudCBnaXZlblxuICAgKiB0aGUgbWF0cml4IG5vcm0gYW5kIGRlc2lyZWQgYWNjdXJhY3kuIFJldHVybnMgdGhlIGZpcnN0IGFjY2VwdGFibGVcbiAgICogY29tYmluYXRpb24gaW4gb3JkZXIgb2YgaW5jcmVhc2luZyBjb21wdXRhdGlvbmFsIGxvYWQuXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZmluZFBhcmFtcyhpbmZOb3JtLCBlcHMpIHtcbiAgICB2YXIgbWF4U2VhcmNoU2l6ZSA9IDMwO1xuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBtYXhTZWFyY2hTaXplOyBrKyspIHtcbiAgICAgIGZvciAodmFyIHEgPSAwOyBxIDw9IGs7IHErKykge1xuICAgICAgICB2YXIgaiA9IGsgLSBxO1xuXG4gICAgICAgIGlmIChlcnJvckVzdGltYXRlKGluZk5vcm0sIHEsIGopIDwgZXBzKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHE6IHEsXG4gICAgICAgICAgICBqOiBqXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgYWNjZXB0YWJsZSBwYXJhbWV0ZXJzIHRvIGNvbXB1dGUgdGhlIG1hdHJpeCBleHBvbmVudGlhbCAodHJ5IGluY3JlYXNpbmcgbWF4U2VhcmNoU2l6ZSBpbiBleHBtLmpzKScpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBlc3RpbWF0ZWQgZXJyb3Igb2YgdGhlIFBhZGUgYXBwcm94aW1hbnQgZm9yIHRoZSBnaXZlblxuICAgKiBwYXJhbWV0ZXJzLlxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGVycm9yRXN0aW1hdGUoaW5mTm9ybSwgcSwgaikge1xuICAgIHZhciBxZmFjID0gMTtcblxuICAgIGZvciAodmFyIGkgPSAyOyBpIDw9IHE7IGkrKykge1xuICAgICAgcWZhYyAqPSBpO1xuICAgIH1cblxuICAgIHZhciB0d29xZmFjID0gcWZhYztcblxuICAgIGZvciAodmFyIF9pMiA9IHEgKyAxOyBfaTIgPD0gMiAqIHE7IF9pMisrKSB7XG4gICAgICB0d29xZmFjICo9IF9pMjtcbiAgICB9XG5cbiAgICB2YXIgdHdvcXAxZmFjID0gdHdvcWZhYyAqICgyICogcSArIDEpO1xuICAgIHJldHVybiA4LjAgKiBNYXRoLnBvdyhpbmZOb3JtIC8gTWF0aC5wb3coMiwgaiksIDIgKiBxKSAqIHFmYWMgKiBxZmFjIC8gKHR3b3FmYWMgKiB0d29xcDFmYWMpO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlRXhwbSA9IGNyZWF0ZUV4cG07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUV5ZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbi8vIFRPRE86IGZ1bmN0aW9uIGV5ZSBpcyByZW1vdmVkIHNpbmNlIHY1LjAuMCAoSnVuZSAyMDE4KS4gUmVtb3ZlIGl0IHNvbWUgZGF5LlxudmFyIGNyZWF0ZUV5ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KSgnZXllJywgW10sIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGV5ZSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Z1bmN0aW9uIFwiZXllXCIgaXMgcmVuYW1lZCB0byBcImlkZW50aXR5XCIgc2luY2UgbWF0aGpzIHZlcnNpb24gNS4wLjAuICcgKyAnVG8ga2VlcCBleWUgd29ya2luZywgY3JlYXRlIGFuIGFsaWFzIGZvciBpdCB1c2luZyBcIm1hdGguaW1wb3J0KHtleWU6IG1hdGguaWRlbnRpdHl9LCB7b3ZlcnJpZGU6IHRydWV9KVwiJyk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlRXllID0gY3JlYXRlRXllOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVGaWx0ZXIgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZnVuY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZnVuY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdmaWx0ZXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVGaWx0ZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBGaWx0ZXIgdGhlIGl0ZW1zIGluIGFuIGFycmF5IG9yIG9uZSBkaW1lbnNpb25hbCBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5maWx0ZXIoeCwgdGVzdClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIGZ1bmN0aW9uIGlzUG9zaXRpdmUgKHgpIHtcbiAgICogICAgICByZXR1cm4geCA+IDBcbiAgICogICAgfVxuICAgKiAgICBtYXRoLmZpbHRlcihbNiwgLTIsIC0xLCA0LCAzXSwgaXNQb3NpdGl2ZSkgLy8gcmV0dXJucyBbNiwgNCwgM11cbiAgICpcbiAgICogICAgbWF0aC5maWx0ZXIoW1wiMjNcIiwgXCJmb29cIiwgXCIxMDBcIiwgXCI1NVwiLCBcImJhclwiXSwgL1swLTldKy8pIC8vIHJldHVybnMgW1wiMjNcIiwgXCIxMDBcIiwgXCI1NVwiXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZm9yRWFjaCwgbWFwLCBzb3J0XG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IHggICAgQSBvbmUgZGltZW5zaW9uYWwgbWF0cml4IG9yIGFycmF5IHRvIGZpbHRlclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uIHwgUmVnRXhwfSB0ZXN0XG4gICAqICAgICAgICBBIGZ1bmN0aW9uIG9yIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byB0ZXN0IGl0ZW1zLlxuICAgKiAgICAgICAgQWxsIGVudHJpZXMgZm9yIHdoaWNoIGB0ZXN0YCByZXR1cm5zIHRydWUgYXJlIHJldHVybmVkLlxuICAgKiAgICAgICAgV2hlbiBgdGVzdGAgaXMgYSBmdW5jdGlvbiwgaXQgaXMgaW52b2tlZCB3aXRoIHRocmVlIHBhcmFtZXRlcnM6XG4gICAqICAgICAgICB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQsIHRoZSBpbmRleCBvZiB0aGUgZWxlbWVudCwgYW5kIHRoZVxuICAgKiAgICAgICAgbWF0cml4L2FycmF5IGJlaW5nIHRyYXZlcnNlZC4gVGhlIGZ1bmN0aW9uIG11c3QgcmV0dXJuIGEgYm9vbGVhbi5cbiAgICogQHJldHVybiB7TWF0cml4IHwgQXJyYXl9IFJldHVybnMgdGhlIGZpbHRlcmVkIG1hdHJpeC5cbiAgICovXG4gIHJldHVybiB0eXBlZCgnZmlsdGVyJywge1xuICAgICdBcnJheSwgZnVuY3Rpb24nOiBfZmlsdGVyQ2FsbGJhY2ssXG4gICAgJ01hdHJpeCwgZnVuY3Rpb24nOiBmdW5jdGlvbiBNYXRyaXhGdW5jdGlvbih4LCB0ZXN0KSB7XG4gICAgICByZXR1cm4geC5jcmVhdGUoX2ZpbHRlckNhbGxiYWNrKHgudG9BcnJheSgpLCB0ZXN0KSk7XG4gICAgfSxcbiAgICAnQXJyYXksIFJlZ0V4cCc6IF9hcnJheS5maWx0ZXJSZWdFeHAsXG4gICAgJ01hdHJpeCwgUmVnRXhwJzogZnVuY3Rpb24gTWF0cml4UmVnRXhwKHgsIHRlc3QpIHtcbiAgICAgIHJldHVybiB4LmNyZWF0ZSgoMCwgX2FycmF5LmZpbHRlclJlZ0V4cCkoeC50b0FycmF5KCksIHRlc3QpKTtcbiAgICB9XG4gIH0pO1xufSk7XG4vKipcbiAqIEZpbHRlciB2YWx1ZXMgaW4gYSBjYWxsYmFjayBnaXZlbiBhIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKiBAcGFyYW0ge0FycmF5fSB4XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7QXJyYXl9IFJldHVybnMgdGhlIGZpbHRlcmVkIGFycmF5XG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuY3JlYXRlRmlsdGVyID0gY3JlYXRlRmlsdGVyO1xuXG5mdW5jdGlvbiBfZmlsdGVyQ2FsbGJhY2soeCwgY2FsbGJhY2spIHtcbiAgLy8gZmlndXJlIG91dCB3aGF0IG51bWJlciBvZiBhcmd1bWVudHMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGV4cGVjdHNcbiAgdmFyIGFyZ3MgPSAoMCwgX2Z1bmN0aW9uLm1heEFyZ3VtZW50Q291bnQpKGNhbGxiYWNrKTtcbiAgcmV0dXJuICgwLCBfYXJyYXkuZmlsdGVyKSh4LCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xuICAgIC8vIGludm9rZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCB0aGUgcmlnaHQgbnVtYmVyIG9mIGFyZ3VtZW50c1xuICAgIGlmIChhcmdzID09PSAxKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoYXJncyA9PT0gMikge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlLCBbaW5kZXhdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMyBvciAtMVxuICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlLCBbaW5kZXhdLCBhcnJheSk7XG4gICAgfVxuICB9KTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRmxhdHRlbiA9IHZvaWQgMDtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZmxhdHRlbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnXTtcbnZhciBjcmVhdGVGbGF0dGVuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4O1xuXG4gIC8qKlxuICAgKiBGbGF0dGVuIGEgbXVsdGkgZGltZW5zaW9uYWwgbWF0cml4IGludG8gYSBzaW5nbGUgZGltZW5zaW9uYWwgbWF0cml4LlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZmxhdHRlbih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5mbGF0dGVuKFtbMSwyXSwgWzMsNF1dKSAgIC8vIHJldHVybnMgWzEsIDIsIDMsIDRdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb25jYXQsIHJlc2l6ZSwgc2l6ZSwgc3F1ZWV6ZVxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeCB8IEFycmF5fSB4ICAgTWF0cml4IHRvIGJlIGZsYXR0ZW5lZFxuICAgKiBAcmV0dXJuIHtNYXRyaXggfCBBcnJheX0gUmV0dXJucyB0aGUgZmxhdHRlbmVkIG1hdHJpeFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoeCkge1xuICAgICAgcmV0dXJuICgwLCBfYXJyYXkuZmxhdHRlbikoKDAsIF9vYmplY3QuY2xvbmUpKHgpKTtcbiAgICB9LFxuICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHgpIHtcbiAgICAgIHZhciBmbGF0ID0gKDAsIF9hcnJheS5mbGF0dGVuKSgoMCwgX29iamVjdC5jbG9uZSkoeC50b0FycmF5KCkpKTsgLy8gVE9ETzogcmV0dXJuIHRoZSBzYW1lIG1hdHJpeCB0eXBlIGFzIHhcblxuICAgICAgcmV0dXJuIG1hdHJpeChmbGF0KTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUZsYXR0ZW4gPSBjcmVhdGVGbGF0dGVuOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVGb3JFYWNoID0gdm9pZCAwO1xuXG52YXIgX2Z1bmN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2Z1bmN0aW9uXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZm9yRWFjaCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUZvckVhY2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBJdGVyYXRlIG92ZXIgYWxsIGVsZW1lbnRzIG9mIGEgbWF0cml4L2FycmF5LCBhbmQgZXhlY3V0ZXMgdGhlIGdpdmVuIGNhbGxiYWNrIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZm9yRWFjaCh4LCBjYWxsYmFjaylcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZm9yRWFjaChbMSwgMiwgM10sIGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAqICAgICAgY29uc29sZS5sb2codmFsdWUpXG4gICAqICAgIH0pXG4gICAqICAgIC8vIG91dHB1dHMgMSwgMiwgM1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZmlsdGVyLCBtYXAsIHNvcnRcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXggfCBBcnJheX0geCAgICBUaGUgbWF0cml4IHRvIGl0ZXJhdGUgb24uXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCwgdGhlIGluZGV4XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGVsZW1lbnQsIGFuZCB0aGUgTWF0cml4L2FycmF5IGJlaW5nIHRyYXZlcnNlZC5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5LCBmdW5jdGlvbic6IF9mb3JFYWNoLFxuICAgICdNYXRyaXgsIGZ1bmN0aW9uJzogZnVuY3Rpb24gTWF0cml4RnVuY3Rpb24oeCwgY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB4LmZvckVhY2goY2FsbGJhY2spO1xuICAgIH1cbiAgfSk7XG59KTtcbi8qKlxuICogZm9yRWFjaCBmb3IgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuY3JlYXRlRm9yRWFjaCA9IGNyZWF0ZUZvckVhY2g7XG5cbmZ1bmN0aW9uIF9mb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICAvLyBmaWd1cmUgb3V0IHdoYXQgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZXhwZWN0c1xuICB2YXIgYXJncyA9ICgwLCBfZnVuY3Rpb24ubWF4QXJndW1lbnRDb3VudCkoY2FsbGJhY2spO1xuXG4gIHZhciByZWN1cnNlID0gZnVuY3Rpb24gcmVjdXJzZSh2YWx1ZSwgaW5kZXgpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICgwLCBfYXJyYXkuZm9yRWFjaCkodmFsdWUsIGZ1bmN0aW9uIChjaGlsZCwgaSkge1xuICAgICAgICAvLyB3ZSBjcmVhdGUgYSBjb3B5IG9mIHRoZSBpbmRleCBhcnJheSBhbmQgYXBwZW5kIHRoZSBuZXcgaW5kZXggdmFsdWVcbiAgICAgICAgcmVjdXJzZShjaGlsZCwgaW5kZXguY29uY2F0KGkpKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbnZva2UgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHNcbiAgICAgIGlmIChhcmdzID09PSAxKSB7XG4gICAgICAgIGNhbGxiYWNrKHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoYXJncyA9PT0gMikge1xuICAgICAgICBjYWxsYmFjayh2YWx1ZSwgaW5kZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gMyBvciAtMVxuICAgICAgICBjYWxsYmFjayh2YWx1ZSwgaW5kZXgsIGFycmF5KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmVjdXJzZShhcnJheSwgW10pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVHZXRNYXRyaXhEYXRhVHlwZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBuYW1lID0gJ2dldE1hdHJpeERhdGFUeXBlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlR2V0TWF0cml4RGF0YVR5cGUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBGaW5kIHRoZSBkYXRhIHR5cGUgb2YgYWxsIGVsZW1lbnRzIGluIGEgbWF0cml4IG9yIGFycmF5LFxuICAgKiBmb3IgZXhhbXBsZSAnbnVtYmVyJyBpZiBhbGwgaXRlbXMgYXJlIGEgbnVtYmVyIGFuZCAnQ29tcGxleCcgaWYgYWxsIHZhbHVlc1xuICAgKiBhcmUgY29tcGxleCBudW1iZXJzLlxuICAgKiBJZiBhIG1hdHJpeCBjb250YWlucyBtb3JlIHRoYW4gb25lIGRhdGEgdHlwZSwgaXQgd2lsbCByZXR1cm4gJ21peGVkJy5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmdldE1hdHJpeERhdGFUeXBlKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBjb25zdCB4ID0gWyBbMSwgMiwgM10sIFs0LCA1LCA2XSBdXG4gICAqICAgIGNvbnN0IG1peGVkWCA9IFsgWzEsIHRydWVdLCBbMiwgM10gXVxuICAgKiAgICBjb25zdCBmcmFjdGlvblggPSBbIFttYXRoLmZyYWN0aW9uKDEsIDMpXSwgW21hdGguZnJhY3Rpb24oMSwgM10gXVxuICAgKiAgICBjb25zdCB1bml0WCA9IFsgW21hdGgudW5pdCgnNWNtJyldLCBbbWF0aC51bml0KCc1Y20nKV0gXVxuICAgKiAgICBjb25zdCBiaWdOdW1iZXJYID0gWyBbbWF0aC5iaWdudW1iZXIoMSldLCBbbWF0aC5iaWdudW1iZXIoMCldIF1cbiAgICogICAgY29uc3Qgc3BhcnNlID0gbWF0aC5zcGFyc2UoeClcbiAgICogICAgY29uc3QgZGVuc2UgPSBtYXRoLm1hdHJpeCh4KVxuICAgKiAgICBtYXRoLmdldE1hdHJpeERhdGFUeXBlKHgpICAgLy8gcmV0dXJucyAnbnVtYmVyJ1xuICAgKiAgICBtYXRoLmdldE1hdHJpeERhdGFUeXBlKHNwYXJzZSkgICAvLyByZXR1cm5zICdudW1iZXInXG4gICAqICAgIG1hdGguZ2V0TWF0cml4RGF0YVR5cGUoZGVuc2UpICAgLy8gcmV0dXJucyAnbnVtYmVyJ1xuICAgKiAgICBtYXRoLmdldE1hdHJpeERhdGFUeXBlKG1peGVkWCkgLy8gcmV0dXJucyAnbWl4ZWQnXG4gICAqICAgIG1hdGguZ2V0TWF0cml4RGF0YVR5cGUoZnJhY3Rpb25YKSAvLyByZXR1cm5zICdGcmFjdGlvbidcbiAgICogICAgbWF0aC5nZXRNYXRyaXhEYXRhVHlwZSh1bml0WCkgLy8gcmV0dXJucyAnVW5pdCdcbiAgICogICAgbWF0aC5nZXRNYXRyaXhEYXRhVHlwZShiaWdOdW1iZXJYKSAvLyByZXR1cm4gJ0JpZ051bWJlcidcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqICBTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4XG4gICAqXG4gICAqIEBwYXJhbSB7Li4uTWF0cml4IHwgQXJyYXl9IHggICBUaGUgTWF0cml4IHdpdGggdmFsdWVzLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IEEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXggdHlwZVxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoeCkge1xuICAgICAgcmV0dXJuICgwLCBfYXJyYXkuZ2V0QXJyYXlEYXRhVHlwZSkoeCwgX2lzLnR5cGVPZik7XG4gICAgfSxcbiAgICBNYXRyaXg6IGZ1bmN0aW9uIE1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4geC5nZXREYXRhVHlwZSgpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlR2V0TWF0cml4RGF0YVR5cGUgPSBjcmVhdGVHZXRNYXRyaXhEYXRhVHlwZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSWRlbnRpdHkgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2lkZW50aXR5JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtYXRyaXgnLCAnQmlnTnVtYmVyJywgJ0RlbnNlTWF0cml4JywgJ1NwYXJzZU1hdHJpeCddO1xudmFyIGNyZWF0ZUlkZW50aXR5ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeCxcbiAgICAgIFNwYXJzZU1hdHJpeCA9IF9yZWYuU3BhcnNlTWF0cml4O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSAyLWRpbWVuc2lvbmFsIGlkZW50aXR5IG1hdHJpeCB3aXRoIHNpemUgbSB4IG4gb3IgbiB4IG4uXG4gICAqIFRoZSBtYXRyaXggaGFzIG9uZXMgb24gdGhlIGRpYWdvbmFsIGFuZCB6ZXJvcyBlbHNld2hlcmUuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5pZGVudGl0eShuKVxuICAgKiAgICBtYXRoLmlkZW50aXR5KG4sIGZvcm1hdClcbiAgICogICAgbWF0aC5pZGVudGl0eShtLCBuKVxuICAgKiAgICBtYXRoLmlkZW50aXR5KG0sIG4sIGZvcm1hdClcbiAgICogICAgbWF0aC5pZGVudGl0eShbbSwgbl0pXG4gICAqICAgIG1hdGguaWRlbnRpdHkoW20sIG5dLCBmb3JtYXQpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmlkZW50aXR5KDMpICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIFtbMSwgMCwgMF0sIFswLCAxLCAwXSwgWzAsIDAsIDFdXVxuICAgKiAgICBtYXRoLmlkZW50aXR5KDMsIDIpICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIFtbMSwgMF0sIFswLCAxXSwgWzAsIDBdXVxuICAgKlxuICAgKiAgICBjb25zdCBBID0gW1sxLCAyLCAzXSwgWzQsIDUsIDZdXVxuICAgKiAgICBtYXRoLmlkZW50aXR5KG1hdGguc2l6ZShBKSkgICAgICAgICAvLyByZXR1cm5zIFtbMSwgMCwgMF0sIFswLCAxLCAwXV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGRpYWcsIG9uZXMsIHplcm9zLCBzaXplLCByYW5nZVxuICAgKlxuICAgKiBAcGFyYW0gey4uLm51bWJlciB8IE1hdHJpeCB8IEFycmF5fSBzaXplICAgVGhlIHNpemUgZm9yIHRoZSBtYXRyaXhcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtmb3JtYXRdICAgICAgICAgICAgICAgICAgIFRoZSBNYXRyaXggc3RvcmFnZSBmb3JtYXRcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4IHwgQXJyYXkgfCBudW1iZXJ9IEEgbWF0cml4IHdpdGggb25lcyBvbiB0aGUgZGlhZ29uYWwuXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIGNvbmZpZy5tYXRyaXggPT09ICdNYXRyaXgnID8gbWF0cml4KFtdKSA6IFtdO1xuICAgIH0sXG4gICAgc3RyaW5nOiBmdW5jdGlvbiBzdHJpbmcoZm9ybWF0KSB7XG4gICAgICByZXR1cm4gbWF0cml4KGZvcm1hdCk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyKHJvd3MpIHtcbiAgICAgIHJldHVybiBfaWRlbnRpdHkocm93cywgcm93cywgY29uZmlnLm1hdHJpeCA9PT0gJ01hdHJpeCcgPyAnZGVuc2UnIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIHN0cmluZyc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclN0cmluZyhyb3dzLCBmb3JtYXQpIHtcbiAgICAgIHJldHVybiBfaWRlbnRpdHkocm93cywgcm93cywgZm9ybWF0KTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlck51bWJlckJpZ051bWJlcihyb3dzLCBjb2xzKSB7XG4gICAgICByZXR1cm4gX2lkZW50aXR5KHJvd3MsIGNvbHMsIGNvbmZpZy5tYXRyaXggPT09ICdNYXRyaXgnID8gJ2RlbnNlJyA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyLCBudW1iZXIgfCBCaWdOdW1iZXIsIHN0cmluZyc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlck51bWJlckJpZ051bWJlclN0cmluZyhyb3dzLCBjb2xzLCBmb3JtYXQpIHtcbiAgICAgIHJldHVybiBfaWRlbnRpdHkocm93cywgY29scywgZm9ybWF0KTtcbiAgICB9LFxuICAgIEFycmF5OiBmdW5jdGlvbiBBcnJheShzaXplKSB7XG4gICAgICByZXR1cm4gX2lkZW50aXR5VmVjdG9yKHNpemUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBzdHJpbmcnOiBmdW5jdGlvbiBBcnJheVN0cmluZyhzaXplLCBmb3JtYXQpIHtcbiAgICAgIHJldHVybiBfaWRlbnRpdHlWZWN0b3Ioc2l6ZSwgZm9ybWF0KTtcbiAgICB9LFxuICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHNpemUpIHtcbiAgICAgIHJldHVybiBfaWRlbnRpdHlWZWN0b3Ioc2l6ZS52YWx1ZU9mKCksIHNpemUuc3RvcmFnZSgpKTtcbiAgICB9LFxuICAgICdNYXRyaXgsIHN0cmluZyc6IGZ1bmN0aW9uIE1hdHJpeFN0cmluZyhzaXplLCBmb3JtYXQpIHtcbiAgICAgIHJldHVybiBfaWRlbnRpdHlWZWN0b3Ioc2l6ZS52YWx1ZU9mKCksIGZvcm1hdCk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfaWRlbnRpdHlWZWN0b3Ioc2l6ZSwgZm9ybWF0KSB7XG4gICAgc3dpdGNoIChzaXplLmxlbmd0aCkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICByZXR1cm4gZm9ybWF0ID8gbWF0cml4KGZvcm1hdCkgOiBbXTtcblxuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gX2lkZW50aXR5KHNpemVbMF0sIHNpemVbMF0sIGZvcm1hdCk7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgcmV0dXJuIF9pZGVudGl0eShzaXplWzBdLCBzaXplWzFdLCBmb3JtYXQpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZlY3RvciBjb250YWluaW5nIHR3byB2YWx1ZXMgZXhwZWN0ZWQnKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpZGVudGl0eSBtYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IHJvd3NcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IGNvbHNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtmb3JtYXRdXG4gICAqIEByZXR1cm5zIHtNYXRyaXh9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2lkZW50aXR5KHJvd3MsIGNvbHMsIGZvcm1hdCkge1xuICAgIC8vIEJpZ051bWJlciBjb25zdHJ1Y3RvciB3aXRoIHRoZSByaWdodCBwcmVjaXNpb25cbiAgICB2YXIgQmlnID0gKDAsIF9pcy5pc0JpZ051bWJlcikocm93cykgfHwgKDAsIF9pcy5pc0JpZ051bWJlcikoY29scykgPyBCaWdOdW1iZXIgOiBudWxsO1xuICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShyb3dzKSkgcm93cyA9IHJvd3MudG9OdW1iZXIoKTtcbiAgICBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikoY29scykpIGNvbHMgPSBjb2xzLnRvTnVtYmVyKCk7XG5cbiAgICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikocm93cykgfHwgcm93cyA8IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGFyYW1ldGVycyBpbiBmdW5jdGlvbiBpZGVudGl0eSBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXJzJyk7XG4gICAgfVxuXG4gICAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKGNvbHMpIHx8IGNvbHMgPCAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24gaWRlbnRpdHkgbXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VycycpO1xuICAgIH1cblxuICAgIHZhciBvbmUgPSBCaWcgPyBuZXcgQmlnTnVtYmVyKDEpIDogMTtcbiAgICB2YXIgZGVmYXVsdFZhbHVlID0gQmlnID8gbmV3IEJpZygwKSA6IDA7XG4gICAgdmFyIHNpemUgPSBbcm93cywgY29sc107IC8vIGNoZWNrIHdlIG5lZWQgdG8gcmV0dXJuIGEgbWF0cml4XG5cbiAgICBpZiAoZm9ybWF0KSB7XG4gICAgICAvLyBjcmVhdGUgZGlhZ29uYWwgbWF0cml4ICh1c2Ugb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciBzdG9yYWdlIGZvcm1hdClcbiAgICAgIGlmIChmb3JtYXQgPT09ICdzcGFyc2UnKSB7XG4gICAgICAgIHJldHVybiBTcGFyc2VNYXRyaXguZGlhZ29uYWwoc2l6ZSwgb25lLCAwLCBkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoZm9ybWF0ID09PSAnZGVuc2UnKSB7XG4gICAgICAgIHJldHVybiBEZW5zZU1hdHJpeC5kaWFnb25hbChzaXplLCBvbmUsIDAsIGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIG1hdHJpeCB0eXBlIFxcXCJcIi5jb25jYXQoZm9ybWF0LCBcIlxcXCJcIikpO1xuICAgIH0gLy8gY3JlYXRlIGFuZCByZXNpemUgYXJyYXlcblxuXG4gICAgdmFyIHJlcyA9ICgwLCBfYXJyYXkucmVzaXplKShbXSwgc2l6ZSwgZGVmYXVsdFZhbHVlKTsgLy8gZmlsbCBpbiBvbmVzIG9uIHRoZSBkaWFnb25hbFxuXG4gICAgdmFyIG1pbmltdW0gPSByb3dzIDwgY29scyA/IHJvd3MgOiBjb2xzOyAvLyBmaWxsIGRpYWdvbmFsXG5cbiAgICBmb3IgKHZhciBkID0gMDsgZCA8IG1pbmltdW07IGQrKykge1xuICAgICAgcmVzW2RdW2RdID0gb25lO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVJZGVudGl0eSA9IGNyZWF0ZUlkZW50aXR5OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJbnYgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBuYW1lID0gJ2ludic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZGl2aWRlU2NhbGFyJywgJ2FkZFNjYWxhcicsICdtdWx0aXBseScsICd1bmFyeU1pbnVzJywgJ2RldCcsICdpZGVudGl0eScsICdhYnMnXTtcbnZhciBjcmVhdGVJbnYgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBkaXZpZGVTY2FsYXIgPSBfcmVmLmRpdmlkZVNjYWxhcixcbiAgICAgIGFkZFNjYWxhciA9IF9yZWYuYWRkU2NhbGFyLFxuICAgICAgbXVsdGlwbHkgPSBfcmVmLm11bHRpcGx5LFxuICAgICAgdW5hcnlNaW51cyA9IF9yZWYudW5hcnlNaW51cyxcbiAgICAgIGRldCA9IF9yZWYuZGV0LFxuICAgICAgaWRlbnRpdHkgPSBfcmVmLmlkZW50aXR5LFxuICAgICAgYWJzID0gX3JlZi5hYnM7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaW52ZXJzZSBvZiBhIHNxdWFyZSBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguaW52KHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5pbnYoW1sxLCAyXSwgWzMsIDRdXSkgIC8vIHJldHVybnMgW1stMiwgMV0sIFsxLjUsIC0wLjVdXVxuICAgKiAgICAgbWF0aC5pbnYoNCkgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMC4yNVxuICAgKiAgICAgMSAvIDQgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMC4yNVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIGRldCwgdHJhbnNwb3NlXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICAgICBNYXRyaXggdG8gYmUgaW52ZXJzZWRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBUaGUgaW52ZXJzZSBvZiBgeGAuXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHZhciBzaXplID0gKDAsIF9pcy5pc01hdHJpeCkoeCkgPyB4LnNpemUoKSA6ICgwLCBfYXJyYXkuYXJyYXlTaXplKSh4KTtcblxuICAgICAgc3dpdGNoIChzaXplLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgLy8gdmVjdG9yXG4gICAgICAgICAgaWYgKHNpemVbMF0gPT09IDEpIHtcbiAgICAgICAgICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KSh4KSkge1xuICAgICAgICAgICAgICByZXR1cm4gbWF0cml4KFtkaXZpZGVTY2FsYXIoMSwgeC52YWx1ZU9mKClbMF0pXSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZXR1cm4gW2RpdmlkZVNjYWxhcigxLCB4WzBdKV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgLy8gdHdvIGRpbWVuc2lvbmFsIGFycmF5XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIHJvd3MgPSBzaXplWzBdO1xuICAgICAgICAgICAgdmFyIGNvbHMgPSBzaXplWzFdO1xuXG4gICAgICAgICAgICBpZiAocm93cyA9PT0gY29scykge1xuICAgICAgICAgICAgICBpZiAoKDAsIF9pcy5pc01hdHJpeCkoeCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWF0cml4KF9pbnYoeC52YWx1ZU9mKCksIHJvd3MsIGNvbHMpLCB4LnN0b3JhZ2UoKSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIGFuIEFycmF5XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9pbnYoeCwgcm93cywgY29scyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdNYXRyaXggbXVzdCBiZSBzcXVhcmUgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5XG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHR3byBkaW1lbnNpb25hbCAnICsgJyhzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICBhbnk6IGZ1bmN0aW9uIGFueSh4KSB7XG4gICAgICAvLyBzY2FsYXJcbiAgICAgIHJldHVybiBkaXZpZGVTY2FsYXIoMSwgeCk7IC8vIEZJWE1FOiBjcmVhdGUgYSBCaWdOdW1iZXIgb25lIHdoZW4gY29uZmlndXJlZCBmb3IgYmlnbnVtYmVyc1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGludmVyc2Ugb2YgYSBzcXVhcmUgbWF0cml4XG4gICAqIEBwYXJhbSB7QXJyYXlbXX0gbWF0ICAgICBBIHNxdWFyZSBtYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJ9IHJvd3MgICAgIE51bWJlciBvZiByb3dzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2xzICAgICBOdW1iZXIgb2YgY29sdW1ucywgbXVzdCBlcXVhbCByb3dzXG4gICAqIEByZXR1cm4ge0FycmF5W119IGludiAgICBJbnZlcnNlIG1hdHJpeFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfaW52KG1hdCwgcm93cywgY29scykge1xuICAgIHZhciByLCBzLCBmLCB2YWx1ZSwgdGVtcDtcblxuICAgIGlmIChyb3dzID09PSAxKSB7XG4gICAgICAvLyB0aGlzIGlzIGEgMSB4IDEgbWF0cml4XG4gICAgICB2YWx1ZSA9IG1hdFswXVswXTtcblxuICAgICAgaWYgKHZhbHVlID09PSAwKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIGludmVyc2UsIGRldGVybWluYW50IGlzIHplcm8nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFtbZGl2aWRlU2NhbGFyKDEsIHZhbHVlKV1dO1xuICAgIH0gZWxzZSBpZiAocm93cyA9PT0gMikge1xuICAgICAgLy8gdGhpcyBpcyBhIDIgeCAyIG1hdHJpeFxuICAgICAgdmFyIGQgPSBkZXQobWF0KTtcblxuICAgICAgaWYgKGQgPT09IDApIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgaW52ZXJzZSwgZGV0ZXJtaW5hbnQgaXMgemVybycpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW1tkaXZpZGVTY2FsYXIobWF0WzFdWzFdLCBkKSwgZGl2aWRlU2NhbGFyKHVuYXJ5TWludXMobWF0WzBdWzFdKSwgZCldLCBbZGl2aWRlU2NhbGFyKHVuYXJ5TWludXMobWF0WzFdWzBdKSwgZCksIGRpdmlkZVNjYWxhcihtYXRbMF1bMF0sIGQpXV07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHRoaXMgaXMgYSBtYXRyaXggb2YgMyB4IDMgb3IgbGFyZ2VyXG4gICAgICAvLyBjYWxjdWxhdGUgaW52ZXJzZSB1c2luZyBnYXVzcy1qb3JkYW4gZWxpbWluYXRpb25cbiAgICAgIC8vICAgICAgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR2F1c3NpYW5fZWxpbWluYXRpb25cbiAgICAgIC8vICAgICAgaHR0cDovL21hdGh3b3JsZC53b2xmcmFtLmNvbS9NYXRyaXhJbnZlcnNlLmh0bWxcbiAgICAgIC8vICAgICAgaHR0cDovL21hdGgudXd3LmVkdS9+bWNmYXJsYXQvaW52ZXJzZS5odG1cbiAgICAgIC8vIG1ha2UgYSBjb3B5IG9mIHRoZSBtYXRyaXggKG9ubHkgdGhlIGFycmF5cywgbm90IG9mIHRoZSBlbGVtZW50cylcbiAgICAgIHZhciBBID0gbWF0LmNvbmNhdCgpO1xuXG4gICAgICBmb3IgKHIgPSAwOyByIDwgcm93czsgcisrKSB7XG4gICAgICAgIEFbcl0gPSBBW3JdLmNvbmNhdCgpO1xuICAgICAgfSAvLyBjcmVhdGUgYW4gaWRlbnRpdHkgbWF0cml4IHdoaWNoIGluIHRoZSBlbmQgd2lsbCBjb250YWluIHRoZVxuICAgICAgLy8gbWF0cml4IGludmVyc2VcblxuXG4gICAgICB2YXIgQiA9IGlkZW50aXR5KHJvd3MpLnZhbHVlT2YoKTsgLy8gbG9vcCBvdmVyIGFsbCBjb2x1bW5zLCBhbmQgcGVyZm9ybSByb3cgcmVkdWN0aW9uc1xuXG4gICAgICBmb3IgKHZhciBjID0gMDsgYyA8IGNvbHM7IGMrKykge1xuICAgICAgICAvLyBQaXZvdGluZzogU3dhcCByb3cgYyB3aXRoIHJvdyByLCB3aGVyZSByb3cgciBjb250YWlucyB0aGUgbGFyZ2VzdCBlbGVtZW50IEFbcl1bY11cbiAgICAgICAgdmFyIEFCaWcgPSBhYnMoQVtjXVtjXSk7XG4gICAgICAgIHZhciByQmlnID0gYztcbiAgICAgICAgciA9IGMgKyAxO1xuXG4gICAgICAgIHdoaWxlIChyIDwgcm93cykge1xuICAgICAgICAgIGlmIChhYnMoQVtyXVtjXSkgPiBBQmlnKSB7XG4gICAgICAgICAgICBBQmlnID0gYWJzKEFbcl1bY10pO1xuICAgICAgICAgICAgckJpZyA9IHI7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcisrO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFCaWcgPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBpbnZlcnNlLCBkZXRlcm1pbmFudCBpcyB6ZXJvJyk7XG4gICAgICAgIH1cblxuICAgICAgICByID0gckJpZztcblxuICAgICAgICBpZiAociAhPT0gYykge1xuICAgICAgICAgIHRlbXAgPSBBW2NdO1xuICAgICAgICAgIEFbY10gPSBBW3JdO1xuICAgICAgICAgIEFbcl0gPSB0ZW1wO1xuICAgICAgICAgIHRlbXAgPSBCW2NdO1xuICAgICAgICAgIEJbY10gPSBCW3JdO1xuICAgICAgICAgIEJbcl0gPSB0ZW1wO1xuICAgICAgICB9IC8vIGVsaW1pbmF0ZSBub24temVybyB2YWx1ZXMgb24gdGhlIG90aGVyIHJvd3MgYXQgY29sdW1uIGNcblxuXG4gICAgICAgIHZhciBBYyA9IEFbY107XG4gICAgICAgIHZhciBCYyA9IEJbY107XG5cbiAgICAgICAgZm9yIChyID0gMDsgciA8IHJvd3M7IHIrKykge1xuICAgICAgICAgIHZhciBBciA9IEFbcl07XG4gICAgICAgICAgdmFyIEJyID0gQltyXTtcblxuICAgICAgICAgIGlmIChyICE9PSBjKSB7XG4gICAgICAgICAgICAvLyBlbGltaW5hdGUgdmFsdWUgYXQgY29sdW1uIGMgYW5kIHJvdyByXG4gICAgICAgICAgICBpZiAoQXJbY10gIT09IDApIHtcbiAgICAgICAgICAgICAgZiA9IGRpdmlkZVNjYWxhcih1bmFyeU1pbnVzKEFyW2NdKSwgQWNbY10pOyAvLyBhZGQgKGYgKiByb3cgYykgdG8gcm93IHIgdG8gZWxpbWluYXRlIHRoZSB2YWx1ZVxuICAgICAgICAgICAgICAvLyBhdCBjb2x1bW4gY1xuXG4gICAgICAgICAgICAgIGZvciAocyA9IGM7IHMgPCBjb2xzOyBzKyspIHtcbiAgICAgICAgICAgICAgICBBcltzXSA9IGFkZFNjYWxhcihBcltzXSwgbXVsdGlwbHkoZiwgQWNbc10pKTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGZvciAocyA9IDA7IHMgPCBjb2xzOyBzKyspIHtcbiAgICAgICAgICAgICAgICBCcltzXSA9IGFkZFNjYWxhcihCcltzXSwgbXVsdGlwbHkoZiwgQmNbc10pKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBub3JtYWxpemUgdmFsdWUgYXQgQWNjIHRvIDEsXG4gICAgICAgICAgICAvLyBkaXZpZGUgZWFjaCB2YWx1ZSBvbiByb3cgciB3aXRoIHRoZSB2YWx1ZSBhdCBBY2NcbiAgICAgICAgICAgIGYgPSBBY1tjXTtcblxuICAgICAgICAgICAgZm9yIChzID0gYzsgcyA8IGNvbHM7IHMrKykge1xuICAgICAgICAgICAgICBBcltzXSA9IGRpdmlkZVNjYWxhcihBcltzXSwgZik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAocyA9IDA7IHMgPCBjb2xzOyBzKyspIHtcbiAgICAgICAgICAgICAgQnJbc10gPSBkaXZpZGVTY2FsYXIoQnJbc10sIGYpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gQjtcbiAgICB9XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVJbnYgPSBjcmVhdGVJbnY7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUtyb24gPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdrcm9uJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdtdWx0aXBseVNjYWxhciddO1xudmFyIGNyZWF0ZUtyb24gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXI7XG5cbiAgLyoqXG4gICAgICogQ2FsY3VsYXRlcyB0aGUga3JvbmVja2VyIHByb2R1Y3Qgb2YgMiBtYXRyaWNlcyBvciB2ZWN0b3JzLlxuICAgICAqXG4gICAgICogTk9URTogSWYgYSBvbmUgZGltZW5zaW9uYWwgdmVjdG9yIC8gbWF0cml4IGlzIGdpdmVuLCBpdCB3aWxsIGJlXG4gICAgICogd3JhcHBlZCBzbyBpdHMgdHdvIGRpbWVuc2lvbnMuXG4gICAgICogU2VlIHRoZSBleGFtcGxlcy5cbiAgICAgKlxuICAgICAqIFN5bnRheDpcbiAgICAgKlxuICAgICAqICAgIG1hdGgua3Jvbih4LCB5KVxuICAgICAqXG4gICAgICogRXhhbXBsZXM6XG4gICAgICpcbiAgICAgKiAgICBtYXRoLmtyb24oW1sxLCAwXSwgWzAsIDFdXSwgW1sxLCAyXSwgWzMsIDRdXSlcbiAgICAgKiAgICAvLyByZXR1cm5zIFsgWyAxLCAyLCAwLCAwIF0sIFsgMywgNCwgMCwgMCBdLCBbIDAsIDAsIDEsIDIgXSwgWyAwLCAwLCAzLCA0IF0gXVxuICAgICAqXG4gICAgICogICAgbWF0aC5rcm9uKFsxLDFdLCBbMiwzLDRdKVxuICAgICAqICAgIC8vIHJldHVybnMgWyBbIDIsIDMsIDQsIDIsIDMsIDQgXSBdXG4gICAgICpcbiAgICAgKiBTZWUgYWxzbzpcbiAgICAgKlxuICAgICAqICAgIG11bHRpcGx5LCBkb3QsIGNyb3NzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0geCAgICAgRmlyc3QgdmVjdG9yXG4gICAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHkgICAgIFNlY29uZCB2ZWN0b3JcbiAgICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgICAgUmV0dXJucyB0aGUga3JvbmVja2VyIHByb2R1Y3Qgb2YgYHhgIGFuZCBgeWBcbiAgICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnTWF0cml4LCBNYXRyaXgnOiBmdW5jdGlvbiBNYXRyaXhNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIG1hdHJpeChfa3Jvbih4LnRvQXJyYXkoKSwgeS50b0FycmF5KCkpKTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgcmV0dXJuIG1hdHJpeChfa3Jvbih4LnRvQXJyYXkoKSwgeSkpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gbWF0cml4KF9rcm9uKHgsIHkudG9BcnJheSgpKSk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogX2tyb25cbiAgfSk7XG4gIC8qKlxuICAgICAqIENhbGN1bGF0ZSB0aGUga3JvbmVja2VyIHByb2R1Y3Qgb2YgdHdvIG1hdHJpY2VzIC8gdmVjdG9yc1xuICAgICAqIEBwYXJhbSB7QXJyYXl9IGEgIEZpcnN0IHZlY3RvclxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGIgIFNlY29uZCB2ZWN0b3JcbiAgICAgKiBAcmV0dXJucyB7QXJyYXl9IFJldHVybnMgdGhlIGtyb25lY2tlciBwcm9kdWN0IG9mIHggYW5kIHlcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqL1xuXG4gIGZ1bmN0aW9uIF9rcm9uKGEsIGIpIHtcbiAgICAvLyBEZWFsIHdpdGggdGhlIGRpbWVuc2lvbnMgb2YgdGhlIG1hdHJpY2llcy5cbiAgICBpZiAoKDAsIF9hcnJheS5hcnJheVNpemUpKGEpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gV3JhcCBpdCBpbiBhIDJEIE1hdHJpeFxuICAgICAgYSA9IFthXTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF9hcnJheS5hcnJheVNpemUpKGIpLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8gV3JhcCBpdCBpbiBhIDJEIE1hdHJpeFxuICAgICAgYiA9IFtiXTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF9hcnJheS5hcnJheVNpemUpKGEpLmxlbmd0aCA+IDIgfHwgKDAsIF9hcnJheS5hcnJheVNpemUpKGIpLmxlbmd0aCA+IDIpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdWZWN0b3JzIHdpdGggZGltZW5zaW9ucyBncmVhdGVyIHRoZW4gMiBhcmUgbm90IHN1cHBvcnRlZCBleHBlY3RlZCAnICsgJyhTaXplIHggPSAnICsgSlNPTi5zdHJpbmdpZnkoYS5sZW5ndGgpICsgJywgeSA9ICcgKyBKU09OLnN0cmluZ2lmeShiLmxlbmd0aCkgKyAnKScpO1xuICAgIH1cblxuICAgIHZhciB0ID0gW107XG4gICAgdmFyIHIgPSBbXTtcbiAgICByZXR1cm4gYS5tYXAoZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBiLm1hcChmdW5jdGlvbiAoYikge1xuICAgICAgICByID0gW107XG4gICAgICAgIHQucHVzaChyKTtcbiAgICAgICAgcmV0dXJuIGEubWFwKGZ1bmN0aW9uICh5KSB7XG4gICAgICAgICAgcmV0dXJuIGIubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4gci5wdXNoKG11bHRpcGx5U2NhbGFyKHksIHgpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KSAmJiB0O1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlS3JvbiA9IGNyZWF0ZUtyb247IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1hcCA9IHZvaWQgMDtcblxudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mdW5jdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ21hcCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZU1hcCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBtYXRyaXggb3IgYXJyYXkgd2l0aCB0aGUgcmVzdWx0cyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZXhlY3V0ZWQgb25cbiAgICogZWFjaCBlbnRyeSBvZiB0aGUgbWF0cml4L2FycmF5LlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubWFwKHgsIGNhbGxiYWNrKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5tYXAoWzEsIDIsIDNdLCBmdW5jdGlvbih2YWx1ZSkge1xuICAgKiAgICAgIHJldHVybiB2YWx1ZSAqIHZhbHVlXG4gICAqICAgIH0pICAvLyByZXR1cm5zIFsxLCA0LCA5XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZmlsdGVyLCBmb3JFYWNoLCBzb3J0XG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IHggICAgVGhlIG1hdHJpeCB0byBpdGVyYXRlIG9uLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayBtZXRob2QgaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50LCB0aGUgaW5kZXhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZWxlbWVudCwgYW5kIHRoZSBtYXRyaXggYmVpbmcgdHJhdmVyc2VkLlxuICAgKiBAcmV0dXJuIHtNYXRyaXggfCBhcnJheX0gICAgIFRyYW5zZm9ybWVkIG1hcCBvZiB4XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSwgZnVuY3Rpb24nOiBfbWFwLFxuICAgICdNYXRyaXgsIGZ1bmN0aW9uJzogZnVuY3Rpb24gTWF0cml4RnVuY3Rpb24oeCwgY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB4Lm1hcChjYWxsYmFjayk7XG4gICAgfVxuICB9KTtcbn0pO1xuLyoqXG4gKiBNYXAgZm9yIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7QXJyYXl9XG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuY3JlYXRlTWFwID0gY3JlYXRlTWFwO1xuXG5mdW5jdGlvbiBfbWFwKGFycmF5LCBjYWxsYmFjaykge1xuICAvLyBmaWd1cmUgb3V0IHdoYXQgbnVtYmVyIG9mIGFyZ3VtZW50cyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZXhwZWN0c1xuICB2YXIgYXJncyA9ICgwLCBfZnVuY3Rpb24ubWF4QXJndW1lbnRDb3VudCkoY2FsbGJhY2spO1xuXG4gIHZhciByZWN1cnNlID0gZnVuY3Rpb24gcmVjdXJzZSh2YWx1ZSwgaW5kZXgpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5tYXAoZnVuY3Rpb24gKGNoaWxkLCBpKSB7XG4gICAgICAgIC8vIHdlIGNyZWF0ZSBhIGNvcHkgb2YgdGhlIGluZGV4IGFycmF5IGFuZCBhcHBlbmQgdGhlIG5ldyBpbmRleCB2YWx1ZVxuICAgICAgICByZXR1cm4gcmVjdXJzZShjaGlsZCwgaW5kZXguY29uY2F0KGkpKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbnZva2UgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHNcbiAgICAgIGlmIChhcmdzID09PSAxKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKGFyZ3MgPT09IDIpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKHZhbHVlLCBpbmRleCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAzIG9yIC0xXG4gICAgICAgIHJldHVybiBjYWxsYmFjayh2YWx1ZSwgaW5kZXgsIGFycmF5KTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgcmV0dXJuIHJlY3Vyc2UoYXJyYXksIFtdKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlT25lcyA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnb25lcyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnbWF0cml4JywgJ0JpZ051bWJlciddO1xudmFyIGNyZWF0ZU9uZXMgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBtYXRyaXggZmlsbGVkIHdpdGggb25lcy4gVGhlIGNyZWF0ZWQgbWF0cml4IGNhbiBoYXZlIG9uZSBvclxuICAgKiBtdWx0aXBsZSBkaW1lbnNpb25zLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgub25lcyhtKVxuICAgKiAgICBtYXRoLm9uZXMobSwgZm9ybWF0KVxuICAgKiAgICBtYXRoLm9uZXMobSwgbilcbiAgICogICAgbWF0aC5vbmVzKG0sIG4sIGZvcm1hdClcbiAgICogICAgbWF0aC5vbmVzKFttLCBuXSlcbiAgICogICAgbWF0aC5vbmVzKFttLCBuXSwgZm9ybWF0KVxuICAgKiAgICBtYXRoLm9uZXMoW20sIG4sIHAsIC4uLl0pXG4gICAqICAgIG1hdGgub25lcyhbbSwgbiwgcCwgLi4uXSwgZm9ybWF0KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5vbmVzKDMpICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgWzEsIDEsIDFdXG4gICAqICAgIG1hdGgub25lcygzLCAyKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIFtbMSwgMV0sIFsxLCAxXSwgWzEsIDFdXVxuICAgKiAgICBtYXRoLm9uZXMoMywgMiwgJ2RlbnNlJykgICAgICAgLy8gcmV0dXJucyBEZW5zZSBNYXRyaXggW1sxLCAxXSwgWzEsIDFdLCBbMSwgMV1dXG4gICAqXG4gICAqICAgIGNvbnN0IEEgPSBbWzEsIDIsIDNdLCBbNCwgNSwgNl1dXG4gICAqICAgIG1hdGgub25lcyhtYXRoLnNpemUoQSkpICAgICAgIC8vIHJldHVybnMgW1sxLCAxLCAxXSwgWzEsIDEsIDFdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgemVyb3MsIGlkZW50aXR5LCBzaXplLCByYW5nZVxuICAgKlxuICAgKiBAcGFyYW0gey4uLm51bWJlciB8IEFycmF5fSBzaXplICAgIFRoZSBzaXplIG9mIGVhY2ggZGltZW5zaW9uIG9mIHRoZSBtYXRyaXhcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtmb3JtYXRdICAgICAgICAgICBUaGUgTWF0cml4IHN0b3JhZ2UgZm9ybWF0XG4gICAqXG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4IHwgbnVtYmVyfSAgQSBtYXRyaXggZmlsbGVkIHdpdGggb25lc1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKCdvbmVzJywge1xuICAgICcnOiBmdW5jdGlvbiBfKCkge1xuICAgICAgcmV0dXJuIGNvbmZpZy5tYXRyaXggPT09ICdBcnJheScgPyBfb25lcyhbXSkgOiBfb25lcyhbXSwgJ2RlZmF1bHQnKTtcbiAgICB9LFxuICAgIC8vIG1hdGgub25lcyhtLCBuLCBwLCAuLi4sIGZvcm1hdClcbiAgICAvLyBUT0RPOiBtb3JlIGFjY3VyYXRlIHNpZ25hdHVyZSAnLi4ubnVtYmVyIHwgQmlnTnVtYmVyLCBzdHJpbmcnIGFzIHNvb24gYXMgdHlwZWQtZnVuY3Rpb24gc3VwcG9ydHMgdGhpc1xuICAgICcuLi5udW1iZXIgfCBCaWdOdW1iZXIgfCBzdHJpbmcnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJTdHJpbmcoc2l6ZSkge1xuICAgICAgdmFyIGxhc3QgPSBzaXplW3NpemUubGVuZ3RoIC0gMV07XG5cbiAgICAgIGlmICh0eXBlb2YgbGFzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFyIGZvcm1hdCA9IHNpemUucG9wKCk7XG4gICAgICAgIHJldHVybiBfb25lcyhzaXplLCBmb3JtYXQpO1xuICAgICAgfSBlbHNlIGlmIChjb25maWcubWF0cml4ID09PSAnQXJyYXknKSB7XG4gICAgICAgIHJldHVybiBfb25lcyhzaXplKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBfb25lcyhzaXplLCAnZGVmYXVsdCcpO1xuICAgICAgfVxuICAgIH0sXG4gICAgQXJyYXk6IF9vbmVzLFxuICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHNpemUpIHtcbiAgICAgIHZhciBmb3JtYXQgPSBzaXplLnN0b3JhZ2UoKTtcbiAgICAgIHJldHVybiBfb25lcyhzaXplLnZhbHVlT2YoKSwgZm9ybWF0KTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgc3RyaW5nJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhTdHJpbmcoc2l6ZSwgZm9ybWF0KSB7XG4gICAgICByZXR1cm4gX29uZXMoc2l6ZS52YWx1ZU9mKCksIGZvcm1hdCk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBBcnJheSBvciBNYXRyaXggd2l0aCBvbmVzXG4gICAqIEBwYXJhbSB7QXJyYXl9IHNpemVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtmb3JtYXQ9J2RlZmF1bHQnXVxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH1cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX29uZXMoc2l6ZSwgZm9ybWF0KSB7XG4gICAgdmFyIGhhc0JpZ051bWJlcnMgPSBfbm9ybWFsaXplKHNpemUpO1xuXG4gICAgdmFyIGRlZmF1bHRWYWx1ZSA9IGhhc0JpZ051bWJlcnMgPyBuZXcgQmlnTnVtYmVyKDEpIDogMTtcblxuICAgIF92YWxpZGF0ZShzaXplKTtcblxuICAgIGlmIChmb3JtYXQpIHtcbiAgICAgIC8vIHJldHVybiBhIG1hdHJpeFxuICAgICAgdmFyIG0gPSBtYXRyaXgoZm9ybWF0KTtcblxuICAgICAgaWYgKHNpemUubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gbS5yZXNpemUoc2l6ZSwgZGVmYXVsdFZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJldHVybiBhbiBBcnJheVxuICAgICAgdmFyIGFyciA9IFtdO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiAoMCwgX2FycmF5LnJlc2l6ZSkoYXJyLCBzaXplLCBkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXJyO1xuICAgIH1cbiAgfSAvLyByZXBsYWNlIEJpZ051bWJlcnMgd2l0aCBudW1iZXJzLCByZXR1cm5zIHRydWUgaWYgc2l6ZSBjb250YWluZWQgQmlnTnVtYmVyc1xuXG5cbiAgZnVuY3Rpb24gX25vcm1hbGl6ZShzaXplKSB7XG4gICAgdmFyIGhhc0JpZ051bWJlcnMgPSBmYWxzZTtcbiAgICBzaXplLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyKSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikodmFsdWUpKSB7XG4gICAgICAgIGhhc0JpZ051bWJlcnMgPSB0cnVlO1xuICAgICAgICBhcnJbaW5kZXhdID0gdmFsdWUudG9OdW1iZXIoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gaGFzQmlnTnVtYmVycztcbiAgfSAvLyB2YWxpZGF0ZSBhcmd1bWVudHNcblxuXG4gIGZ1bmN0aW9uIF92YWxpZGF0ZShzaXplKSB7XG4gICAgc2l6ZS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikodmFsdWUpIHx8IHZhbHVlIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24gb25lcyBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXJzJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVPbmVzID0gY3JlYXRlT25lczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUGFydGl0aW9uU2VsZWN0ID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdwYXJ0aXRpb25TZWxlY3QnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnaXNOdW1lcmljJywgJ2lzTmFOJywgJ2NvbXBhcmUnXTtcbnZhciBjcmVhdGVQYXJ0aXRpb25TZWxlY3QgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgaXNOdW1lcmljID0gX3JlZi5pc051bWVyaWMsXG4gICAgICBpc05hTiA9IF9yZWYuaXNOYU4sXG4gICAgICBjb21wYXJlID0gX3JlZi5jb21wYXJlO1xuICB2YXIgYXNjID0gY29tcGFyZTtcblxuICB2YXIgZGVzYyA9IGZ1bmN0aW9uIGRlc2MoYSwgYikge1xuICAgIHJldHVybiAtY29tcGFyZShhLCBiKTtcbiAgfTtcbiAgLyoqXG4gICAqIFBhcnRpdGlvbi1iYXNlZCBzZWxlY3Rpb24gb2YgYW4gYXJyYXkgb3IgMUQgbWF0cml4LlxuICAgKiBXaWxsIGZpbmQgdGhlIGt0aCBzbWFsbGVzdCB2YWx1ZSwgYW5kIG11dGF0ZXMgdGhlIGlucHV0IGFycmF5LlxuICAgKiBVc2VzIFF1aWNrc2VsZWN0LlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgucGFydGl0aW9uU2VsZWN0KHgsIGspXG4gICAqICAgIG1hdGgucGFydGl0aW9uU2VsZWN0KHgsIGssIGNvbXBhcmUpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnBhcnRpdGlvblNlbGVjdChbNSwgMTAsIDFdLCAyKSAgICAgICAgICAgLy8gcmV0dXJucyAxMFxuICAgKiAgICBtYXRoLnBhcnRpdGlvblNlbGVjdChbJ0MnLCAnQicsICdBJywgJ0QnXSwgMSkgLy8gcmV0dXJucyAnQidcbiAgICpcbiAgICogICAgZnVuY3Rpb24gc29ydEJ5TGVuZ3RoIChhLCBiKSB7XG4gICAqICAgICAgcmV0dXJuIGEubGVuZ3RoIC0gYi5sZW5ndGhcbiAgICogICAgfVxuICAgKiAgICBtYXRoLnBhcnRpdGlvblNlbGVjdChbJ0xhbmdkb24nLCAnVG9tJywgJ1NhcmEnXSwgMiwgc29ydEJ5TGVuZ3RoKSAvLyByZXR1cm5zICdMYW5nZG9uJ1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc29ydFxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeCB8IEFycmF5fSB4ICAgIEEgb25lIGRpbWVuc2lvbmFsIG1hdHJpeCBvciBhcnJheSB0byBzb3J0XG4gICAqIEBwYXJhbSB7TnVtYmVyfSBrICAgICAgICAgICAgVGhlIGt0aCBzbWFsbGVzdCB2YWx1ZSB0byBiZSByZXRyaWV2ZWQgemVyby1iYXNlZCBpbmRleFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9uIHwgJ2FzYycgfCAnZGVzYyd9IFtjb21wYXJlPSdhc2MnXVxuICAgKiAgICAgICAgQW4gb3B0aW9uYWwgY29tcGFyYXRvciBmdW5jdGlvbi4gVGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBhc1xuICAgKiAgICAgICAgYGNvbXBhcmUoYSwgYilgLCBhbmQgbXVzdCByZXR1cm4gMSB3aGVuIGEgPiBiLCAtMSB3aGVuIGEgPCBiLFxuICAgKiAgICAgICAgYW5kIDAgd2hlbiBhID09IGIuXG4gICAqIEByZXR1cm4geyp9IFJldHVybnMgdGhlIGt0aCBsb3dlc3QgdmFsdWUuXG4gICAqL1xuXG5cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyKHgsIGspIHtcbiAgICAgIHJldHVybiBfcGFydGl0aW9uU2VsZWN0KHgsIGssIGFzYyk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciwgc3RyaW5nJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJTdHJpbmcoeCwgaywgY29tcGFyZSkge1xuICAgICAgaWYgKGNvbXBhcmUgPT09ICdhc2MnKSB7XG4gICAgICAgIHJldHVybiBfcGFydGl0aW9uU2VsZWN0KHgsIGssIGFzYyk7XG4gICAgICB9IGVsc2UgaWYgKGNvbXBhcmUgPT09ICdkZXNjJykge1xuICAgICAgICByZXR1cm4gX3BhcnRpdGlvblNlbGVjdCh4LCBrLCBkZXNjKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ29tcGFyZSBzdHJpbmcgbXVzdCBiZSBcImFzY1wiIG9yIFwiZGVzY1wiJyk7XG4gICAgICB9XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciwgZnVuY3Rpb24nOiBfcGFydGl0aW9uU2VsZWN0XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9wYXJ0aXRpb25TZWxlY3QoeCwgaywgY29tcGFyZSkge1xuICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShrKSB8fCBrIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdrIG11c3QgYmUgYSBub24tbmVnYXRpdmUgaW50ZWdlcicpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KSh4KSkge1xuICAgICAgdmFyIHNpemUgPSB4LnNpemUoKTtcblxuICAgICAgaWYgKHNpemUubGVuZ3RoID4gMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgb25lIGRpbWVuc2lvbmFsIG1hdHJpY2VzIHN1cHBvcnRlZCcpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcXVpY2tTZWxlY3QoeC52YWx1ZU9mKCksIGssIGNvbXBhcmUpO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHgpKSB7XG4gICAgICByZXR1cm4gcXVpY2tTZWxlY3QoeCwgaywgY29tcGFyZSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBRdWlja3NlbGVjdCBhbGdvcml0aG0uXG4gICAqIENvZGUgYWRhcHRlZCBmcm9tOlxuICAgKiBodHRwczovL2Jsb2cudGVhbWxlYWRuZXQuY29tLzIwMTIvMDcvcXVpY2stc2VsZWN0LWFsZ29yaXRobS1maW5kLWt0aC1lbGVtZW50Lmh0bWxcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyXG4gICAqIEBwYXJhbSB7TnVtYmVyfSBrXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNvbXBhcmVcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBxdWlja1NlbGVjdChhcnIsIGssIGNvbXBhcmUpIHtcbiAgICBpZiAoayA+PSBhcnIubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2sgb3V0IG9mIGJvdW5kcycpO1xuICAgIH0gLy8gY2hlY2sgZm9yIE5hTiB2YWx1ZXMgc2luY2UgdGhlc2UgY2FuIGNhdXNlIGFuIGluZmluaXRlIHdoaWxlIGxvb3BcblxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChpc051bWVyaWMoYXJyW2ldKSAmJiBpc05hTihhcnJbaV0pKSB7XG4gICAgICAgIHJldHVybiBhcnJbaV07IC8vIHJldHVybiBOYU5cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgZnJvbSA9IDA7XG4gICAgdmFyIHRvID0gYXJyLmxlbmd0aCAtIDE7IC8vIGlmIGZyb20gPT0gdG8gd2UgcmVhY2hlZCB0aGUga3RoIGVsZW1lbnRcblxuICAgIHdoaWxlIChmcm9tIDwgdG8pIHtcbiAgICAgIHZhciByID0gZnJvbTtcbiAgICAgIHZhciB3ID0gdG87XG4gICAgICB2YXIgcGl2b3QgPSBhcnJbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKHRvIC0gZnJvbSArIDEpKSArIGZyb21dOyAvLyBzdG9wIGlmIHRoZSByZWFkZXIgYW5kIHdyaXRlciBtZWV0c1xuXG4gICAgICB3aGlsZSAociA8IHcpIHtcbiAgICAgICAgLy8gYXJyW3JdID49IHBpdm90XG4gICAgICAgIGlmIChjb21wYXJlKGFycltyXSwgcGl2b3QpID49IDApIHtcbiAgICAgICAgICAvLyBwdXQgdGhlIGxhcmdlIHZhbHVlcyBhdCB0aGUgZW5kXG4gICAgICAgICAgdmFyIHRtcCA9IGFyclt3XTtcbiAgICAgICAgICBhcnJbd10gPSBhcnJbcl07XG4gICAgICAgICAgYXJyW3JdID0gdG1wO1xuICAgICAgICAgIC0tdztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB0aGUgdmFsdWUgaXMgc21hbGxlciB0aGFuIHRoZSBwaXZvdCwgc2tpcFxuICAgICAgICAgICsrcjtcbiAgICAgICAgfVxuICAgICAgfSAvLyBpZiB3ZSBzdGVwcGVkIHVwIChyKyspIHdlIG5lZWQgdG8gc3RlcCBvbmUgZG93biAoYXJyW3JdID4gcGl2b3QpXG5cblxuICAgICAgaWYgKGNvbXBhcmUoYXJyW3JdLCBwaXZvdCkgPiAwKSB7XG4gICAgICAgIC0tcjtcbiAgICAgIH0gLy8gdGhlIHIgcG9pbnRlciBpcyBvbiB0aGUgZW5kIG9mIHRoZSBmaXJzdCBrIGVsZW1lbnRzXG5cblxuICAgICAgaWYgKGsgPD0gcikge1xuICAgICAgICB0byA9IHI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmcm9tID0gciArIDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycltrXTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVBhcnRpdGlvblNlbGVjdCA9IGNyZWF0ZVBhcnRpdGlvblNlbGVjdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmFuZ2UgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX25vb3AgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbm9vcFwiKTtcblxudmFyIG5hbWUgPSAncmFuZ2UnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJz9tYXRyaXgnLCAnP2JpZ251bWJlcicsICdzbWFsbGVyJywgJ3NtYWxsZXJFcScsICdsYXJnZXInLCAnbGFyZ2VyRXEnXTtcbnZhciBjcmVhdGVSYW5nZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgYmlnbnVtYmVyID0gX3JlZi5iaWdudW1iZXIsXG4gICAgICBzbWFsbGVyID0gX3JlZi5zbWFsbGVyLFxuICAgICAgc21hbGxlckVxID0gX3JlZi5zbWFsbGVyRXEsXG4gICAgICBsYXJnZXIgPSBfcmVmLmxhcmdlcixcbiAgICAgIGxhcmdlckVxID0gX3JlZi5sYXJnZXJFcTtcblxuICAvKipcbiAgICogQ3JlYXRlIGFuIGFycmF5IGZyb20gYSByYW5nZS5cbiAgICogQnkgZGVmYXVsdCwgdGhlIHJhbmdlIGVuZCBpcyBleGNsdWRlZC4gVGhpcyBjYW4gYmUgY3VzdG9taXplZCBieSBwcm92aWRpbmdcbiAgICogYW4gZXh0cmEgcGFyYW1ldGVyIGBpbmNsdWRlRW5kYC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5yYW5nZShzdHIgWywgaW5jbHVkZUVuZF0pICAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgcmFuZ2UgZnJvbSBhIHN0cmluZyxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdoZXJlIHRoZSBzdHJpbmcgY29udGFpbnMgdGhlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzdGFydCwgb3B0aW9uYWwgc3RlcCwgYW5kIGVuZCxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlcGFyYXRlZCBieSBhIGNvbG9uLlxuICAgKiAgICAgbWF0aC5yYW5nZShzdGFydCwgZW5kIFssIGluY2x1ZGVFbmRdKSAgICAgICAgLy8gQ3JlYXRlIGEgcmFuZ2Ugd2l0aCBzdGFydCBhbmRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVuZCBhbmQgYSBzdGVwIHNpemUgb2YgMS5cbiAgICogICAgIG1hdGgucmFuZ2Uoc3RhcnQsIGVuZCwgc3RlcCBbLCBpbmNsdWRlRW5kXSkgIC8vIENyZWF0ZSBhIHJhbmdlIHdpdGggc3RhcnQsIHN0ZXAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgZW5kLlxuICAgKlxuICAgKiBXaGVyZTpcbiAgICpcbiAgICogLSBgc3RyOiBzdHJpbmdgXG4gICAqICAgQSBzdHJpbmcgJ3N0YXJ0OmVuZCcgb3IgJ3N0YXJ0OnN0ZXA6ZW5kJ1xuICAgKiAtIGBzdGFydDoge251bWJlciB8IEJpZ051bWJlcn1gXG4gICAqICAgU3RhcnQgb2YgdGhlIHJhbmdlXG4gICAqIC0gYGVuZDogbnVtYmVyIHwgQmlnTnVtYmVyYFxuICAgKiAgIEVuZCBvZiB0aGUgcmFuZ2UsIGV4Y2x1ZGVkIGJ5IGRlZmF1bHQsIGluY2x1ZGVkIHdoZW4gcGFyYW1ldGVyIGluY2x1ZGVFbmQ9dHJ1ZVxuICAgKiAtIGBzdGVwOiBudW1iZXIgfCBCaWdOdW1iZXJgXG4gICAqICAgU3RlcCBzaXplLiBEZWZhdWx0IHZhbHVlIGlzIDEuXG4gICAqIC0gYGluY2x1ZGVFbmQ6IGJvb2xlYW5gXG4gICAqICAgT3B0aW9uIHRvIHNwZWNpZnkgd2hldGhlciB0byBpbmNsdWRlIHRoZSBlbmQgb3Igbm90LiBGYWxzZSBieSBkZWZhdWx0LlxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgucmFuZ2UoMiwgNikgICAgICAgIC8vIFsyLCAzLCA0LCA1XVxuICAgKiAgICAgbWF0aC5yYW5nZSgyLCAtMywgLTEpICAgLy8gWzIsIDEsIDAsIC0xLCAtMl1cbiAgICogICAgIG1hdGgucmFuZ2UoJzI6MTo2JykgICAgIC8vIFsyLCAzLCA0LCA1XVxuICAgKiAgICAgbWF0aC5yYW5nZSgyLCA2LCB0cnVlKSAgLy8gWzIsIDMsIDQsIDUsIDZdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgb25lcywgemVyb3MsIHNpemUsIHN1YnNldFxuICAgKlxuICAgKiBAcGFyYW0geyp9IGFyZ3MgICBQYXJhbWV0ZXJzIGRlc2NyaWJpbmcgdGhlIHJhbmdlcyBgc3RhcnRgLCBgZW5kYCwgYW5kIG9wdGlvbmFsIGBzdGVwYC5cbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9IHJhbmdlXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIC8vIFRPRE86IHNpbXBsaWZ5IHNpZ25hdHVyZXMgd2hlbiB0eXBlZC1mdW5jdGlvbiBzdXBwb3J0cyBkZWZhdWx0IHZhbHVlcyBhbmQgb3B0aW9uYWwgYXJndW1lbnRzXG4gICAgLy8gVE9ETzogYSBudW1iZXIgb3IgYm9vbGVhbiBzaG91bGQgbm90IGJlIGNvbnZlcnRlZCB0byBzdHJpbmcgaGVyZVxuICAgIHN0cmluZzogX3N0clJhbmdlLFxuICAgICdzdHJpbmcsIGJvb2xlYW4nOiBfc3RyUmFuZ2UsXG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKHN0YXJ0LCBlbmQpIHtcbiAgICAgIHJldHVybiBfb3V0KF9yYW5nZUV4KHN0YXJ0LCBlbmQsIDEpKTtcbiAgICB9LFxuICAgICdudW1iZXIsIG51bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyTnVtYmVyKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgICAgIHJldHVybiBfb3V0KF9yYW5nZUV4KHN0YXJ0LCBlbmQsIHN0ZXApKTtcbiAgICB9LFxuICAgICdudW1iZXIsIG51bWJlciwgYm9vbGVhbic6IGZ1bmN0aW9uIG51bWJlck51bWJlckJvb2xlYW4oc3RhcnQsIGVuZCwgaW5jbHVkZUVuZCkge1xuICAgICAgcmV0dXJuIGluY2x1ZGVFbmQgPyBfb3V0KF9yYW5nZUluYyhzdGFydCwgZW5kLCAxKSkgOiBfb3V0KF9yYW5nZUV4KHN0YXJ0LCBlbmQsIDEpKTtcbiAgICB9LFxuICAgICdudW1iZXIsIG51bWJlciwgbnVtYmVyLCBib29sZWFuJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyTnVtYmVyQm9vbGVhbihzdGFydCwgZW5kLCBzdGVwLCBpbmNsdWRlRW5kKSB7XG4gICAgICByZXR1cm4gaW5jbHVkZUVuZCA/IF9vdXQoX3JhbmdlSW5jKHN0YXJ0LCBlbmQsIHN0ZXApKSA6IF9vdXQoX3JhbmdlRXgoc3RhcnQsIGVuZCwgc3RlcCkpO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHN0YXJ0LCBlbmQpIHtcbiAgICAgIHZhciBCaWdOdW1iZXIgPSBzdGFydC5jb25zdHJ1Y3RvcjtcbiAgICAgIHJldHVybiBfb3V0KF9iaWdSYW5nZUV4KHN0YXJ0LCBlbmQsIG5ldyBCaWdOdW1iZXIoMSkpKTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyQmlnTnVtYmVyKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgICAgIHJldHVybiBfb3V0KF9iaWdSYW5nZUV4KHN0YXJ0LCBlbmQsIHN0ZXApKTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlciwgYm9vbGVhbic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlckJvb2xlYW4oc3RhcnQsIGVuZCwgaW5jbHVkZUVuZCkge1xuICAgICAgdmFyIEJpZ051bWJlciA9IHN0YXJ0LmNvbnN0cnVjdG9yO1xuICAgICAgcmV0dXJuIGluY2x1ZGVFbmQgPyBfb3V0KF9iaWdSYW5nZUluYyhzdGFydCwgZW5kLCBuZXcgQmlnTnVtYmVyKDEpKSkgOiBfb3V0KF9iaWdSYW5nZUV4KHN0YXJ0LCBlbmQsIG5ldyBCaWdOdW1iZXIoMSkpKTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlciwgQmlnTnVtYmVyLCBib29sZWFuJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyQmlnTnVtYmVyQm9vbGVhbihzdGFydCwgZW5kLCBzdGVwLCBpbmNsdWRlRW5kKSB7XG4gICAgICByZXR1cm4gaW5jbHVkZUVuZCA/IF9vdXQoX2JpZ1JhbmdlSW5jKHN0YXJ0LCBlbmQsIHN0ZXApKSA6IF9vdXQoX2JpZ1JhbmdlRXgoc3RhcnQsIGVuZCwgc3RlcCkpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gX291dChhcnIpIHtcbiAgICBpZiAoY29uZmlnLm1hdHJpeCA9PT0gJ01hdHJpeCcpIHtcbiAgICAgIHJldHVybiBtYXRyaXggPyBtYXRyaXgoYXJyKSA6ICgwLCBfbm9vcC5ub01hdHJpeCkoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyO1xuICB9XG5cbiAgZnVuY3Rpb24gX3N0clJhbmdlKHN0ciwgaW5jbHVkZUVuZCkge1xuICAgIHZhciByID0gX3BhcnNlKHN0cik7XG5cbiAgICBpZiAoIXIpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignU3RyaW5nIFwiJyArIHN0ciArICdcIiBpcyBubyB2YWxpZCByYW5nZScpO1xuICAgIH1cblxuICAgIHZhciBmbjtcblxuICAgIGlmIChjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJykge1xuICAgICAgaWYgKGJpZ251bWJlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICgwLCBfbm9vcC5ub0JpZ251bWJlcikoKTtcbiAgICAgIH1cblxuICAgICAgZm4gPSBpbmNsdWRlRW5kID8gX2JpZ1JhbmdlSW5jIDogX2JpZ1JhbmdlRXg7XG4gICAgICByZXR1cm4gX291dChmbihiaWdudW1iZXIoci5zdGFydCksIGJpZ251bWJlcihyLmVuZCksIGJpZ251bWJlcihyLnN0ZXApKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZuID0gaW5jbHVkZUVuZCA/IF9yYW5nZUluYyA6IF9yYW5nZUV4O1xuICAgICAgcmV0dXJuIF9vdXQoZm4oci5zdGFydCwgci5lbmQsIHIuc3RlcCkpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgcmFuZ2Ugd2l0aCBudW1iZXJzLiBFbmQgaXMgZXhjbHVkZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0ZXBcbiAgICogQHJldHVybnMge0FycmF5fSByYW5nZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9yYW5nZUV4KHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgeCA9IHN0YXJ0O1xuXG4gICAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICB3aGlsZSAoc21hbGxlcih4LCBlbmQpKSB7XG4gICAgICAgIGFycmF5LnB1c2goeCk7XG4gICAgICAgIHggKz0gc3RlcDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0ZXAgPCAwKSB7XG4gICAgICB3aGlsZSAobGFyZ2VyKHgsIGVuZCkpIHtcbiAgICAgICAgYXJyYXkucHVzaCh4KTtcbiAgICAgICAgeCArPSBzdGVwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgcmFuZ2Ugd2l0aCBudW1iZXJzLiBFbmQgaXMgaW5jbHVkZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAgICogQHBhcmFtIHtudW1iZXJ9IHN0ZXBcbiAgICogQHJldHVybnMge0FycmF5fSByYW5nZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9yYW5nZUluYyhzdGFydCwgZW5kLCBzdGVwKSB7XG4gICAgdmFyIGFycmF5ID0gW107XG4gICAgdmFyIHggPSBzdGFydDtcblxuICAgIGlmIChzdGVwID4gMCkge1xuICAgICAgd2hpbGUgKHNtYWxsZXJFcSh4LCBlbmQpKSB7XG4gICAgICAgIGFycmF5LnB1c2goeCk7XG4gICAgICAgIHggKz0gc3RlcDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0ZXAgPCAwKSB7XG4gICAgICB3aGlsZSAobGFyZ2VyRXEoeCwgZW5kKSkge1xuICAgICAgICBhcnJheS5wdXNoKHgpO1xuICAgICAgICB4ICs9IHN0ZXA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSByYW5nZSB3aXRoIGJpZyBudW1iZXJzLiBFbmQgaXMgZXhjbHVkZWRcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IHN0YXJ0XG4gICAqIEBwYXJhbSB7QmlnTnVtYmVyfSBlbmRcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IHN0ZXBcbiAgICogQHJldHVybnMge0FycmF5fSByYW5nZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9iaWdSYW5nZUV4KHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgICB2YXIgemVybyA9IGJpZ251bWJlcigwKTtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgeCA9IHN0YXJ0O1xuXG4gICAgaWYgKHN0ZXAuZ3QoemVybykpIHtcbiAgICAgIHdoaWxlIChzbWFsbGVyKHgsIGVuZCkpIHtcbiAgICAgICAgYXJyYXkucHVzaCh4KTtcbiAgICAgICAgeCA9IHgucGx1cyhzdGVwKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0ZXAubHQoemVybykpIHtcbiAgICAgIHdoaWxlIChsYXJnZXIoeCwgZW5kKSkge1xuICAgICAgICBhcnJheS5wdXNoKHgpO1xuICAgICAgICB4ID0geC5wbHVzKHN0ZXApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgcmFuZ2Ugd2l0aCBiaWcgbnVtYmVycy4gRW5kIGlzIGluY2x1ZGVkXG4gICAqIEBwYXJhbSB7QmlnTnVtYmVyfSBzdGFydFxuICAgKiBAcGFyYW0ge0JpZ051bWJlcn0gZW5kXG4gICAqIEBwYXJhbSB7QmlnTnVtYmVyfSBzdGVwXG4gICAqIEByZXR1cm5zIHtBcnJheX0gcmFuZ2VcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfYmlnUmFuZ2VJbmMoc3RhcnQsIGVuZCwgc3RlcCkge1xuICAgIHZhciB6ZXJvID0gYmlnbnVtYmVyKDApO1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHZhciB4ID0gc3RhcnQ7XG5cbiAgICBpZiAoc3RlcC5ndCh6ZXJvKSkge1xuICAgICAgd2hpbGUgKHNtYWxsZXJFcSh4LCBlbmQpKSB7XG4gICAgICAgIGFycmF5LnB1c2goeCk7XG4gICAgICAgIHggPSB4LnBsdXMoc3RlcCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdGVwLmx0KHplcm8pKSB7XG4gICAgICB3aGlsZSAobGFyZ2VyRXEoeCwgZW5kKSkge1xuICAgICAgICBhcnJheS5wdXNoKHgpO1xuICAgICAgICB4ID0geC5wbHVzKHN0ZXApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbiAgfVxuICAvKipcbiAgICogUGFyc2UgYSBzdHJpbmcgaW50byBhIHJhbmdlLFxuICAgKiBUaGUgc3RyaW5nIGNvbnRhaW5zIHRoZSBzdGFydCwgb3B0aW9uYWwgc3RlcCwgYW5kIGVuZCwgc2VwYXJhdGVkIGJ5IGEgY29sb24uXG4gICAqIElmIHRoZSBzdHJpbmcgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIHJhbmdlLCBudWxsIGlzIHJldHVybmVkLlxuICAgKiBGb3IgZXhhbXBsZSBzdHI9JzA6MjoxMScuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHJldHVybiB7e3N0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCBzdGVwOiBudW1iZXJ9IHwgbnVsbH0gcmFuZ2UgT2JqZWN0IGNvbnRhaW5pbmcgcHJvcGVydGllcyBzdGFydCwgZW5kLCBzdGVwXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3BhcnNlKHN0cikge1xuICAgIHZhciBhcmdzID0gc3RyLnNwbGl0KCc6Jyk7IC8vIG51bWJlclxuXG4gICAgdmFyIG51bXMgPSBhcmdzLm1hcChmdW5jdGlvbiAoYXJnKSB7XG4gICAgICAvLyB1c2UgTnVtYmVyIGFuZCBub3QgcGFyc2VGbG9hdCBhcyBOdW1iZXIgcmV0dXJucyBOYU4gb24gaW52YWxpZCBnYXJiYWdlIGluIHRoZSBzdHJpbmdcbiAgICAgIHJldHVybiBOdW1iZXIoYXJnKTtcbiAgICB9KTtcbiAgICB2YXIgaW52YWxpZCA9IG51bXMuc29tZShmdW5jdGlvbiAobnVtKSB7XG4gICAgICByZXR1cm4gaXNOYU4obnVtKTtcbiAgICB9KTtcblxuICAgIGlmIChpbnZhbGlkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKG51bXMubGVuZ3RoKSB7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc3RhcnQ6IG51bXNbMF0sXG4gICAgICAgICAgZW5kOiBudW1zWzFdLFxuICAgICAgICAgIHN0ZXA6IDFcbiAgICAgICAgfTtcblxuICAgICAgY2FzZSAzOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHN0YXJ0OiBudW1zWzBdLFxuICAgICAgICAgIGVuZDogbnVtc1syXSxcbiAgICAgICAgICBzdGVwOiBudW1zWzFdXG4gICAgICAgIH07XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhbmdlID0gY3JlYXRlUmFuZ2U7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJlc2hhcGUgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdyZXNoYXBlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2lzSW50ZWdlcicsICdtYXRyaXgnXTtcbnZhciBjcmVhdGVSZXNoYXBlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGlzSW50ZWdlciA9IF9yZWYuaXNJbnRlZ2VyLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXg7XG5cbiAgLyoqXG4gICAqIFJlc2hhcGUgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheSB0byBmaXQgdGhlIHNwZWNpZmllZCBkaW1lbnNpb25zXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgucmVzaGFwZSh4LCBzaXplcylcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnJlc2hhcGUoWzEsIDIsIDMsIDQsIDUsIDZdLCBbMiwgM10pXG4gICAqICAgICAvLyByZXR1cm5zIEFycmF5ICBbWzEsIDIsIDNdLCBbNCwgNSwgNl1dXG4gICAqXG4gICAqICAgICBtYXRoLnJlc2hhcGUoW1sxLCAyXSwgWzMsIDRdXSwgWzEsIDRdKVxuICAgKiAgICAgLy8gcmV0dXJucyBBcnJheSAgW1sxLCAyLCAzLCA0XV1cbiAgICpcbiAgICogICAgIG1hdGgucmVzaGFwZShbWzEsIDJdLCBbMywgNF1dLCBbNF0pXG4gICAqICAgICAvLyByZXR1cm5zIEFycmF5IFsxLCAyLCAzLCA0XVxuICAgKlxuICAgKiAgICAgY29uc3QgeCA9IG1hdGgubWF0cml4KFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4XSlcbiAgICogICAgIG1hdGgucmVzaGFwZSh4LCBbMiwgMiwgMl0pXG4gICAqICAgICAvLyByZXR1cm5zIE1hdHJpeCBbW1sxLCAyXSwgWzMsIDRdXSwgW1s1LCA2XSwgWzcsIDhdXV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBzaXplLCBzcXVlZXplLCByZXNpemVcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeCB8ICp9IHggIE1hdHJpeCB0byBiZSByZXNoYXBlZFxuICAgKiBAcGFyYW0ge251bWJlcltdfSBzaXplcyAgICAgICAgT25lIGRpbWVuc2lvbmFsIGFycmF5IHdpdGggaW50ZWdyYWwgc2l6ZXMgZm9yXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlYWNoIGRpbWVuc2lvblxuICAgKlxuICAgKiBAcmV0dXJuIHsqIHwgQXJyYXkgfCBNYXRyaXh9ICAgQSByZXNoYXBlZCBjbG9uZSBvZiBtYXRyaXggYHhgXG4gICAqXG4gICAqIEB0aHJvd3Mge1R5cGVFcnJvcn0gICAgICAgICAgICBJZiBgc2l6ZXNgIGRvZXMgbm90IGNvbnRhaW4gc29sZWx5IGludGVnZXJzXG4gICAqIEB0aHJvd3Mge0RpbWVuc2lvbkVycm9yfSAgICAgICBJZiB0aGUgcHJvZHVjdCBvZiB0aGUgbmV3IGRpbWVuc2lvbiBzaXplcyBkb2VzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3QgZXF1YWwgdGhhdCBvZiB0aGUgb2xkIG9uZXNcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCBzaXplcykge1xuICAgICAgaWYgKHgucmVzaGFwZSkge1xuICAgICAgICByZXR1cm4geC5yZXNoYXBlKHNpemVzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBtYXRyaXgoKDAsIF9hcnJheS5yZXNoYXBlKSh4LnZhbHVlT2YoKSwgc2l6ZXMpKTtcbiAgICAgIH1cbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHNpemVzKSB7XG4gICAgICBzaXplcy5mb3JFYWNoKGZ1bmN0aW9uIChzaXplKSB7XG4gICAgICAgIGlmICghaXNJbnRlZ2VyKHNpemUpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBzaXplIGZvciBkaW1lbnNpb246ICcgKyBzaXplKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gKDAsIF9hcnJheS5yZXNoYXBlKSh4LCBzaXplcyk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZXNoYXBlID0gY3JlYXRlUmVzaGFwZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUmVzaXplID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgX0FyZ3VtZW50c0Vycm9yID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yL0FyZ3VtZW50c0Vycm9yXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAncmVzaXplJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ2NvbmZpZycsICdtYXRyaXgnXTtcbnZhciBjcmVhdGVSZXNpemUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcblxuICAvKipcbiAgICogUmVzaXplIGEgbWF0cml4XG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgucmVzaXplKHgsIHNpemUpXG4gICAqICAgICBtYXRoLnJlc2l6ZSh4LCBzaXplLCBkZWZhdWx0VmFsdWUpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5yZXNpemUoWzEsIDIsIDMsIDQsIDVdLCBbM10pIC8vIHJldHVybnMgQXJyYXkgIFsxLCAyLCAzXVxuICAgKiAgICAgbWF0aC5yZXNpemUoWzEsIDIsIDNdLCBbNV0sIDApICAgIC8vIHJldHVybnMgQXJyYXkgIFsxLCAyLCAzLCAwLCAwXVxuICAgKiAgICAgbWF0aC5yZXNpemUoMiwgWzIsIDNdLCAwKSAgICAgICAgIC8vIHJldHVybnMgTWF0cml4IFtbMiwgMCwgMF0sIFswLCAwLCAwXV1cbiAgICogICAgIG1hdGgucmVzaXplKFwiaGVsbG9cIiwgWzhdLCBcIiFcIikgICAgLy8gcmV0dXJucyBzdHJpbmcgJ2hlbGxvISEhJ1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHNpemUsIHNxdWVlemUsIHN1YnNldCwgcmVzaGFwZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4IHwgKn0geCAgICAgICAgICAgICBNYXRyaXggdG8gYmUgcmVzaXplZFxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSBzaXplICAgICAgICAgICAgICBPbmUgZGltZW5zaW9uYWwgYXJyYXkgd2l0aCBudW1iZXJzXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgc3RyaW5nfSBbZGVmYXVsdFZhbHVlPTBdIFplcm8gYnkgZGVmYXVsdCwgZXhjZXB0IGluXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugb2YgYSBzdHJpbmcsIGluIHRoYXQgY2FzZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSAnICdcbiAgICogQHJldHVybiB7KiB8IEFycmF5IHwgTWF0cml4fSBBIHJlc2l6ZWQgY2xvbmUgb2YgbWF0cml4IGB4YFxuICAgKi9cbiAgLy8gVE9ETzogcmV3b3JrIHJlc2l6ZSB0byBhIHR5cGVkLWZ1bmN0aW9uXG4gIHJldHVybiBmdW5jdGlvbiByZXNpemUoeCwgc2l6ZSwgZGVmYXVsdFZhbHVlKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT09IDIgJiYgYXJndW1lbnRzLmxlbmd0aCAhPT0gMykge1xuICAgICAgdGhyb3cgbmV3IF9Bcmd1bWVudHNFcnJvci5Bcmd1bWVudHNFcnJvcigncmVzaXplJywgYXJndW1lbnRzLmxlbmd0aCwgMiwgMyk7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKHNpemUpKSB7XG4gICAgICBzaXplID0gc2l6ZS52YWx1ZU9mKCk7IC8vIGdldCBBcnJheVxuICAgIH1cblxuICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShzaXplWzBdKSkge1xuICAgICAgLy8gY29udmVydCBiaWdudW1iZXJzIHRvIG51bWJlcnNcbiAgICAgIHNpemUgPSBzaXplLm1hcChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuICEoMCwgX2lzLmlzQmlnTnVtYmVyKSh2YWx1ZSkgPyB2YWx1ZSA6IHZhbHVlLnRvTnVtYmVyKCk7XG4gICAgICB9KTtcbiAgICB9IC8vIGNoZWNrIHggaXMgYSBNYXRyaXhcblxuXG4gICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKHgpKSB7XG4gICAgICAvLyB1c2Ugb3B0aW1pemVkIG1hdHJpeCBpbXBsZW1lbnRhdGlvbiwgcmV0dXJuIGNvcHlcbiAgICAgIHJldHVybiB4LnJlc2l6ZShzaXplLCBkZWZhdWx0VmFsdWUsIHRydWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgeCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIHJlc2l6ZSBzdHJpbmdcbiAgICAgIHJldHVybiBfcmVzaXplU3RyaW5nKHgsIHNpemUsIGRlZmF1bHRWYWx1ZSk7XG4gICAgfSAvLyBjaGVjayByZXN1bHQgc2hvdWxkIGJlIGEgbWF0cml4XG5cblxuICAgIHZhciBhc01hdHJpeCA9IEFycmF5LmlzQXJyYXkoeCkgPyBmYWxzZSA6IGNvbmZpZy5tYXRyaXggIT09ICdBcnJheSc7XG5cbiAgICBpZiAoc2l6ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIG91dHB1dCBhIHNjYWxhclxuICAgICAgd2hpbGUgKEFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICAgICAgeCA9IHhbMF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAoMCwgX29iamVjdC5jbG9uZSkoeCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG91dHB1dCBhbiBhcnJheS9tYXRyaXhcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh4KSkge1xuICAgICAgICB4ID0gW3hdO1xuICAgICAgfVxuXG4gICAgICB4ID0gKDAsIF9vYmplY3QuY2xvbmUpKHgpO1xuICAgICAgdmFyIHJlcyA9ICgwLCBfYXJyYXkucmVzaXplKSh4LCBzaXplLCBkZWZhdWx0VmFsdWUpO1xuICAgICAgcmV0dXJuIGFzTWF0cml4ID8gbWF0cml4KHJlcykgOiByZXM7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogUmVzaXplIGEgc3RyaW5nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2RlZmF1bHRDaGFyPScgJ11cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX3Jlc2l6ZVN0cmluZyhzdHIsIHNpemUsIGRlZmF1bHRDaGFyKSB7XG4gICAgaWYgKGRlZmF1bHRDaGFyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0eXBlb2YgZGVmYXVsdENoYXIgIT09ICdzdHJpbmcnIHx8IGRlZmF1bHRDaGFyLmxlbmd0aCAhPT0gMSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTaW5nbGUgY2hhcmFjdGVyIGV4cGVjdGVkIGFzIGRlZmF1bHRWYWx1ZScpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBkZWZhdWx0Q2hhciA9ICcgJztcbiAgICB9XG5cbiAgICBpZiAoc2l6ZS5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3Ioc2l6ZS5sZW5ndGgsIDEpO1xuICAgIH1cblxuICAgIHZhciBsZW4gPSBzaXplWzBdO1xuXG4gICAgaWYgKHR5cGVvZiBsZW4gIT09ICdudW1iZXInIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKGxlbikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgc2l6ZSwgbXVzdCBjb250YWluIHBvc2l0aXZlIGludGVnZXJzICcgKyAnKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICB9XG5cbiAgICBpZiAoc3RyLmxlbmd0aCA+IGxlbikge1xuICAgICAgcmV0dXJuIHN0ci5zdWJzdHJpbmcoMCwgbGVuKTtcbiAgICB9IGVsc2UgaWYgKHN0ci5sZW5ndGggPCBsZW4pIHtcbiAgICAgIHZhciByZXMgPSBzdHI7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IGxlbiAtIHN0ci5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIHJlcyArPSBkZWZhdWx0Q2hhcjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVSZXNpemUgPSBjcmVhdGVSZXNpemU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJvdyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIG5hbWUgPSAncm93JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0luZGV4JywgJ21hdHJpeCcsICdyYW5nZSddO1xudmFyIGNyZWF0ZVJvdyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBJbmRleCA9IF9yZWYuSW5kZXgsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIHJhbmdlID0gX3JlZi5yYW5nZTtcblxuICAvKipcbiAgICogUmV0dXJuIGEgcm93IGZyb20gYSBNYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgucm93KHZhbHVlLCBpbmRleClcbiAgICpcbiAgICogRXhhbXBsZTpcbiAgICpcbiAgICogICAgIC8vIGdldCBhIHJvd1xuICAgKiAgICAgY29uc3QgZCA9IFtbMSwgMl0sIFszLCA0XV1cbiAgICogICAgIG1hdGgucm93KGQsIDEpIC8vIHJldHVybnMgW1szLCA0XV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBjb2x1bW5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeCB9IHZhbHVlICAgQW4gYXJyYXkgb3IgbWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSByb3cgICAgICAgICAgICAgIFRoZSBpbmRleCBvZiB0aGUgcm93XG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgICAgICAgIFRoZSByZXRyaWV2ZWQgcm93XG4gICAqL1xuICB2YXIgcm93ID0gdHlwZWQobmFtZSwge1xuICAgICdNYXRyaXgsIG51bWJlcic6IF9yb3csXG4gICAgJ0FycmF5LCBudW1iZXInOiBmdW5jdGlvbiBBcnJheU51bWJlcih2YWx1ZSwgcm93KSB7XG4gICAgICByZXR1cm4gX3JvdyhtYXRyaXgoKDAsIF9vYmplY3QuY2xvbmUpKHZhbHVlKSksIHJvdykudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByb3c7XG4gIC8qKlxuICAgKiBSZXRyaWV2ZSBhIHJvdyBvZiBhIG1hdHJpeFxuICAgKiBAcGFyYW0ge01hdHJpeCB9IHZhbHVlICBBIG1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlcn0gcm93ICAgICBUaGUgaW5kZXggb2YgdGhlIHJvd1xuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICBUaGUgcmV0cmlldmVkIHJvd1xuICAgKi9cblxuICBmdW5jdGlvbiBfcm93KHZhbHVlLCByb3cpIHtcbiAgICAvLyBjaGVjayBkaW1lbnNpb25zXG4gICAgaWYgKHZhbHVlLnNpemUoKS5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25seSB0d28gZGltZW5zaW9uYWwgbWF0cml4IGlzIHN1cHBvcnRlZCcpO1xuICAgIH1cblxuICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkocm93LCB2YWx1ZS5zaXplKClbMF0pO1xuICAgIHZhciBjb2x1bW5SYW5nZSA9IHJhbmdlKDAsIHZhbHVlLnNpemUoKVsxXSk7XG4gICAgdmFyIGluZGV4ID0gbmV3IEluZGV4KHJvdywgY29sdW1uUmFuZ2UpO1xuICAgIHJldHVybiB2YWx1ZS5zdWJzZXQoaW5kZXgpO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlUm93ID0gY3JlYXRlUm93OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTaXplID0gdm9pZCAwO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9ub29wID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL25vb3BcIik7XG5cbnZhciBuYW1lID0gJ3NpemUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJz9tYXRyaXgnXTtcbnZhciBjcmVhdGVTaXplID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXg7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgc2l6ZSBvZiBhIG1hdHJpeCBvciBzY2FsYXIuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguc2l6ZSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGguc2l6ZSgyLjMpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbXVxuICAgKiAgICAgbWF0aC5zaXplKCdoZWxsbyB3b3JsZCcpICAgICAgICAvLyByZXR1cm5zIFsxMV1cbiAgICpcbiAgICogICAgIGNvbnN0IEEgPSBbWzEsIDIsIDNdLCBbNCwgNSwgNl1dXG4gICAqICAgICBtYXRoLnNpemUoQSkgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgWzIsIDNdXG4gICAqICAgICBtYXRoLnNpemUobWF0aC5yYW5nZSgxLDYpKSAgICAgIC8vIHJldHVybnMgWzVdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgcmVzaXplLCBzcXVlZXplLCBzdWJzZXRcbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFuIHwgbnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeH0geCAgQSBtYXRyaXhcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9IEEgdmVjdG9yIHdpdGggc2l6ZSBvZiBgeGAuXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHgpIHtcbiAgICAgIHJldHVybiB4LmNyZWF0ZSh4LnNpemUoKSk7XG4gICAgfSxcbiAgICBBcnJheTogX2FycmF5LmFycmF5U2l6ZSxcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyh4KSB7XG4gICAgICByZXR1cm4gY29uZmlnLm1hdHJpeCA9PT0gJ0FycmF5JyA/IFt4Lmxlbmd0aF0gOiBtYXRyaXgoW3gubGVuZ3RoXSk7XG4gICAgfSxcbiAgICAnbnVtYmVyIHwgQ29tcGxleCB8IEJpZ051bWJlciB8IFVuaXQgfCBib29sZWFuIHwgbnVsbCc6IGZ1bmN0aW9uIG51bWJlckNvbXBsZXhCaWdOdW1iZXJVbml0Qm9vbGVhbk51bGwoeCkge1xuICAgICAgLy8gc2NhbGFyXG4gICAgICByZXR1cm4gY29uZmlnLm1hdHJpeCA9PT0gJ0FycmF5JyA/IFtdIDogbWF0cml4ID8gbWF0cml4KFtdKSA6ICgwLCBfbm9vcC5ub01hdHJpeCkoKTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNpemUgPSBjcmVhdGVTaXplOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTb3J0ID0gdm9pZCAwO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc29ydCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnY29tcGFyZScsICdjb21wYXJlTmF0dXJhbCddO1xudmFyIGNyZWF0ZVNvcnQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBjb21wYXJlID0gX3JlZi5jb21wYXJlLFxuICAgICAgY29tcGFyZU5hdHVyYWwgPSBfcmVmLmNvbXBhcmVOYXR1cmFsO1xuICB2YXIgY29tcGFyZUFzYyA9IGNvbXBhcmU7XG5cbiAgdmFyIGNvbXBhcmVEZXNjID0gZnVuY3Rpb24gY29tcGFyZURlc2MoYSwgYikge1xuICAgIHJldHVybiAtY29tcGFyZShhLCBiKTtcbiAgfTtcbiAgLyoqXG4gICAqIFNvcnQgdGhlIGl0ZW1zIGluIGEgbWF0cml4LlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc29ydCh4KVxuICAgKiAgICBtYXRoLnNvcnQoeCwgY29tcGFyZSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc29ydChbNSwgMTAsIDFdKSAvLyByZXR1cm5zIFsxLCA1LCAxMF1cbiAgICogICAgbWF0aC5zb3J0KFsnQycsICdCJywgJ0EnLCAnRCddLCBtYXRoLmNvbXBhcmVOYXR1cmFsKVxuICAgKiAgICAvLyByZXR1cm5zIFsnQScsICdCJywgJ0MnLCAnRCddXG4gICAqXG4gICAqICAgIGZ1bmN0aW9uIHNvcnRCeUxlbmd0aCAoYSwgYikge1xuICAgKiAgICAgIHJldHVybiBhLmxlbmd0aCAtIGIubGVuZ3RoXG4gICAqICAgIH1cbiAgICogICAgbWF0aC5zb3J0KFsnTGFuZ2RvbicsICdUb20nLCAnU2FyYSddLCBzb3J0QnlMZW5ndGgpXG4gICAqICAgIC8vIHJldHVybnMgWydUb20nLCAnU2FyYScsICdMYW5nZG9uJ11cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGZpbHRlciwgZm9yRWFjaCwgbWFwLCBjb21wYXJlLCBjb21wYXJlTmF0dXJhbFxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeCB8IEFycmF5fSB4ICAgIEEgb25lIGRpbWVuc2lvbmFsIG1hdHJpeCBvciBhcnJheSB0byBzb3J0XG4gICAqIEBwYXJhbSB7RnVuY3Rpb24gfCAnYXNjJyB8ICdkZXNjJyB8ICduYXR1cmFsJ30gW2NvbXBhcmU9J2FzYyddXG4gICAqICAgICAgICBBbiBvcHRpb25hbCBfY29tcGFyYXRvciBmdW5jdGlvbiBvciBuYW1lLiBUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIGFzXG4gICAqICAgICAgICBgY29tcGFyZShhLCBiKWAsIGFuZCBtdXN0IHJldHVybiAxIHdoZW4gYSA+IGIsIC0xIHdoZW4gYSA8IGIsXG4gICAqICAgICAgICBhbmQgMCB3aGVuIGEgPT0gYi5cbiAgICogQHJldHVybiB7TWF0cml4IHwgQXJyYXl9IFJldHVybnMgdGhlIHNvcnRlZCBtYXRyaXguXG4gICAqL1xuXG5cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoeCkge1xuICAgICAgX2FycmF5SXNWZWN0b3IoeCk7XG5cbiAgICAgIHJldHVybiB4LnNvcnQoY29tcGFyZUFzYyk7XG4gICAgfSxcbiAgICBNYXRyaXg6IGZ1bmN0aW9uIE1hdHJpeCh4KSB7XG4gICAgICBfbWF0cml4SXNWZWN0b3IoeCk7XG5cbiAgICAgIHJldHVybiBtYXRyaXgoeC50b0FycmF5KCkuc29ydChjb21wYXJlQXNjKSwgeC5zdG9yYWdlKCkpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBmdW5jdGlvbic6IGZ1bmN0aW9uIEFycmF5RnVuY3Rpb24oeCwgX2NvbXBhcmF0b3IpIHtcbiAgICAgIF9hcnJheUlzVmVjdG9yKHgpO1xuXG4gICAgICByZXR1cm4geC5zb3J0KF9jb21wYXJhdG9yKTtcbiAgICB9LFxuICAgICdNYXRyaXgsIGZ1bmN0aW9uJzogZnVuY3Rpb24gTWF0cml4RnVuY3Rpb24oeCwgX2NvbXBhcmF0b3IpIHtcbiAgICAgIF9tYXRyaXhJc1ZlY3Rvcih4KTtcblxuICAgICAgcmV0dXJuIG1hdHJpeCh4LnRvQXJyYXkoKS5zb3J0KF9jb21wYXJhdG9yKSwgeC5zdG9yYWdlKCkpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBzdHJpbmcnOiBmdW5jdGlvbiBBcnJheVN0cmluZyh4LCBvcmRlcikge1xuICAgICAgX2FycmF5SXNWZWN0b3IoeCk7XG5cbiAgICAgIHJldHVybiB4LnNvcnQoX2NvbXBhcmF0b3Iob3JkZXIpKTtcbiAgICB9LFxuICAgICdNYXRyaXgsIHN0cmluZyc6IGZ1bmN0aW9uIE1hdHJpeFN0cmluZyh4LCBvcmRlcikge1xuICAgICAgX21hdHJpeElzVmVjdG9yKHgpO1xuXG4gICAgICByZXR1cm4gbWF0cml4KHgudG9BcnJheSgpLnNvcnQoX2NvbXBhcmF0b3Iob3JkZXIpKSwgeC5zdG9yYWdlKCkpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBHZXQgdGhlIGNvbXBhcmF0b3IgZm9yIGdpdmVuIG9yZGVyICgnYXNjJywgJ2Rlc2MnLCAnbmF0dXJhbCcpXG4gICAqIEBwYXJhbSB7J2FzYycgfCAnZGVzYycgfCAnbmF0dXJhbCd9IG9yZGVyXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufSBSZXR1cm5zIGEgX2NvbXBhcmF0b3IgZnVuY3Rpb25cbiAgICovXG5cbiAgZnVuY3Rpb24gX2NvbXBhcmF0b3Iob3JkZXIpIHtcbiAgICBpZiAob3JkZXIgPT09ICdhc2MnKSB7XG4gICAgICByZXR1cm4gY29tcGFyZUFzYztcbiAgICB9IGVsc2UgaWYgKG9yZGVyID09PSAnZGVzYycpIHtcbiAgICAgIHJldHVybiBjb21wYXJlRGVzYztcbiAgICB9IGVsc2UgaWYgKG9yZGVyID09PSAnbmF0dXJhbCcpIHtcbiAgICAgIHJldHVybiBjb21wYXJlTmF0dXJhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTdHJpbmcgXCJhc2NcIiwgXCJkZXNjXCIsIG9yIFwibmF0dXJhbFwiIGV4cGVjdGVkJyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB3aGV0aGVyIGFuIGFycmF5IGlzIG9uZSBkaW1lbnNpb25hbFxuICAgKiBUaHJvd3MgYW4gZXJyb3Igd2hlbiB0aGlzIGlzIG5vdCB0aGUgY2FzZVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9hcnJheUlzVmVjdG9yKGFycmF5KSB7XG4gICAgaWYgKCgwLCBfYXJyYXkuYXJyYXlTaXplKShhcnJheSkubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09uZSBkaW1lbnNpb25hbCBhcnJheSBleHBlY3RlZCcpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogVmFsaWRhdGUgd2hldGhlciBhIG1hdHJpeCBpcyBvbmUgZGltZW5zaW9uYWxcbiAgICogVGhyb3dzIGFuIGVycm9yIHdoZW4gdGhpcyBpcyBub3QgdGhlIGNhc2VcbiAgICogQHBhcmFtIHtNYXRyaXh9IG1hdHJpeFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9tYXRyaXhJc1ZlY3RvcihtYXRyaXgpIHtcbiAgICBpZiAobWF0cml4LnNpemUoKS5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25lIGRpbWVuc2lvbmFsIG1hdHJpeCBleHBlY3RlZCcpO1xuICAgIH1cbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVNvcnQgPSBjcmVhdGVTb3J0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcXJ0bSA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc3FydG0nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnYWJzJywgJ2FkZCcsICdtdWx0aXBseScsICdzcXJ0JywgJ3N1YnRyYWN0JywgJ2ludicsICdzaXplJywgJ21heCcsICdpZGVudGl0eSddO1xudmFyIGNyZWF0ZVNxcnRtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFicyA9IF9yZWYuYWJzLFxuICAgICAgYWRkID0gX3JlZi5hZGQsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICBzcXJ0ID0gX3JlZi5zcXJ0LFxuICAgICAgc3VidHJhY3QgPSBfcmVmLnN1YnRyYWN0LFxuICAgICAgaW52ID0gX3JlZi5pbnYsXG4gICAgICBzaXplID0gX3JlZi5zaXplLFxuICAgICAgbWF4ID0gX3JlZi5tYXgsXG4gICAgICBpZGVudGl0eSA9IF9yZWYuaWRlbnRpdHk7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgcHJpbmNpcGFsIHNxdWFyZSByb290IG9mIGEgc3F1YXJlIG1hdHJpeC5cbiAgICogVGhlIHByaW5jaXBhbCBzcXVhcmUgcm9vdCBtYXRyaXggYFhgIG9mIGFub3RoZXIgbWF0cml4IGBBYCBpcyBzdWNoIHRoYXQgYFggKiBYID0gQWAuXG4gICAqXG4gICAqIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NxdWFyZV9yb290X29mX2FfbWF0cml4XG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIFggPSBtYXRoLnNxcnRtKEEpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5zcXJ0bShbWzEsIDJdLCBbMywgNF1dKSAvLyByZXR1cm5zIFtbLTIsIDFdLCBbMS41LCAtMC41XV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICBzcXJ0LCBwb3dcbiAgICpcbiAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IEEgICBUaGUgc3F1YXJlIG1hdHJpeCBgQWBcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgICBUaGUgcHJpbmNpcGFsIHNxdWFyZSByb290IG9mIG1hdHJpeCBgQWBcbiAgICovXG4gIHZhciBzcXJ0bSA9IHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChBKSB7XG4gICAgICB2YXIgc2l6ZSA9ICgwLCBfaXMuaXNNYXRyaXgpKEEpID8gQS5zaXplKCkgOiAoMCwgX2FycmF5LmFycmF5U2l6ZSkoQSk7XG5cbiAgICAgIHN3aXRjaCAoc2l6ZS5sZW5ndGgpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIC8vIFNpbmdsZSBlbGVtZW50IEFycmF5IHwgTWF0cml4XG4gICAgICAgICAgaWYgKHNpemVbMF0gPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybiBzcXJ0KEEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlICcgKyAnKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIFR3by1kaW1lbnNpb25hbCBBcnJheSB8IE1hdHJpeFxuICAgICAgICAgICAgdmFyIHJvd3MgPSBzaXplWzBdO1xuICAgICAgICAgICAgdmFyIGNvbHMgPSBzaXplWzFdO1xuXG4gICAgICAgICAgICBpZiAocm93cyA9PT0gY29scykge1xuICAgICAgICAgICAgICByZXR1cm4gX2Rlbm1hbkJlYXZlcnMoQSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlICcgKyAnKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9KTtcbiAgdmFyIF9tYXhJdGVyYXRpb25zID0gMWUzO1xuICB2YXIgX3RvbGVyYW5jZSA9IDFlLTY7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHByaW5jaXBhbCBzcXVhcmUgcm9vdCBtYXRyaXggdXNpbmcgdGhlIERlbm1hbuKAk0JlYXZlcnMgaXRlcmF0aXZlIG1ldGhvZFxuICAgKlxuICAgKiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9TcXVhcmVfcm9vdF9vZl9hX21hdHJpeCNCeV9EZW5tYW7igJNCZWF2ZXJzX2l0ZXJhdGlvblxuICAgKlxuICAgKiBAcGFyYW0gIHtBcnJheSB8IE1hdHJpeH0gQSAgIFRoZSBzcXVhcmUgbWF0cml4IGBBYFxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgIFRoZSBwcmluY2lwYWwgc3F1YXJlIHJvb3Qgb2YgbWF0cml4IGBBYFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfZGVubWFuQmVhdmVycyhBKSB7XG4gICAgdmFyIGVycm9yO1xuICAgIHZhciBpdGVyYXRpb25zID0gMDtcbiAgICB2YXIgWSA9IEE7XG4gICAgdmFyIFogPSBpZGVudGl0eShzaXplKEEpKTtcblxuICAgIGRvIHtcbiAgICAgIHZhciBZayA9IFk7XG4gICAgICBZID0gbXVsdGlwbHkoMC41LCBhZGQoWWssIGludihaKSkpO1xuICAgICAgWiA9IG11bHRpcGx5KDAuNSwgYWRkKFosIGludihZaykpKTtcbiAgICAgIGVycm9yID0gbWF4KGFicyhzdWJ0cmFjdChZLCBZaykpKTtcblxuICAgICAgaWYgKGVycm9yID4gX3RvbGVyYW5jZSAmJiArK2l0ZXJhdGlvbnMgPiBfbWF4SXRlcmF0aW9ucykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NvbXB1dGluZyBzcXVhcmUgcm9vdCBvZiBtYXRyaXg6IGl0ZXJhdGl2ZSBtZXRob2QgY291bGQgbm90IGNvbnZlcmdlJyk7XG4gICAgICB9XG4gICAgfSB3aGlsZSAoZXJyb3IgPiBfdG9sZXJhbmNlKTtcblxuICAgIHJldHVybiBZO1xuICB9XG5cbiAgcmV0dXJuIHNxcnRtO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNxcnRtID0gY3JlYXRlU3FydG07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNxdWVlemUgPSB2b2lkIDA7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3NxdWVlemUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4J107XG52YXIgY3JlYXRlU3F1ZWV6ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcblxuICAvKipcbiAgICogU3F1ZWV6ZSBhIG1hdHJpeCwgcmVtb3ZlIGlubmVyIGFuZCBvdXRlciBzaW5nbGV0b24gZGltZW5zaW9ucyBmcm9tIGEgbWF0cml4LlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLnNxdWVlemUoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnNxdWVlemUoWzNdKSAgICAgICAgICAgLy8gcmV0dXJucyAzXG4gICAqICAgICBtYXRoLnNxdWVlemUoW1szXV0pICAgICAgICAgLy8gcmV0dXJucyAzXG4gICAqXG4gICAqICAgICBjb25zdCBBID0gbWF0aC56ZXJvcygzLCAxKSAgICAvLyByZXR1cm5zIFtbMF0sIFswXSwgWzBdXSAoc2l6ZSAzeDEpXG4gICAqICAgICBtYXRoLnNxdWVlemUoQSkgICAgICAgICAgICAgLy8gcmV0dXJucyBbMCwgMCwgMF0gKHNpemUgMylcbiAgICpcbiAgICogICAgIGNvbnN0IEIgPSBtYXRoLnplcm9zKDEsIDMpICAgIC8vIHJldHVybnMgW1swLCAwLCAwXV0gKHNpemUgMXgzKVxuICAgKiAgICAgbWF0aC5zcXVlZXplKEIpICAgICAgICAgICAgIC8vIHJldHVybnMgWzAsIDAsIDBdIChzaXplIDMpXG4gICAqXG4gICAqICAgICAvLyBvbmx5IGlubmVyIGFuZCBvdXRlciBkaW1lbnNpb25zIGFyZSByZW1vdmVkXG4gICAqICAgICBjb25zdCBDID0gbWF0aC56ZXJvcygyLCAxLCAzKSAvLyByZXR1cm5zIFtbWzAsIDAsIDBdXSwgW1swLCAwLCAwXV1dIChzaXplIDJ4MXgzKVxuICAgKiAgICAgbWF0aC5zcXVlZXplKEMpICAgICAgICAgICAgIC8vIHJldHVybnMgW1tbMCwgMCwgMF1dLCBbWzAsIDAsIDBdXV0gKHNpemUgMngxeDMpXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgc3Vic2V0XG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4IHwgQXJyYXl9IHggICAgICBNYXRyaXggdG8gYmUgc3F1ZWV6ZWRcbiAgICogQHJldHVybiB7TWF0cml4IHwgQXJyYXl9IFNxdWVlemVkIG1hdHJpeFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoeCkge1xuICAgICAgcmV0dXJuICgwLCBfYXJyYXkuc3F1ZWV6ZSkoKDAsIF9vYmplY3QuY2xvbmUpKHgpKTtcbiAgICB9LFxuICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHgpIHtcbiAgICAgIHZhciByZXMgPSAoMCwgX2FycmF5LnNxdWVlemUpKHgudG9BcnJheSgpKTsgLy8gRklYTUU6IHJldHVybiB0aGUgc2FtZSB0eXBlIG9mIG1hdHJpeCBhcyB0aGUgaW5wdXRcblxuICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkocmVzKSA/IG1hdHJpeChyZXMpIDogcmVzO1xuICAgIH0sXG4gICAgYW55OiBmdW5jdGlvbiBhbnkoeCkge1xuICAgICAgLy8gc2NhbGFyXG4gICAgICByZXR1cm4gKDAsIF9vYmplY3QuY2xvbmUpKHgpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU3F1ZWV6ZSA9IGNyZWF0ZVNxdWVlemU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVN1YnNldCA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2N1c3RvbXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY3VzdG9tc1wiKTtcblxudmFyIF9EaW1lbnNpb25FcnJvciA9IHJlcXVpcmUoXCIuLi8uLi9lcnJvci9EaW1lbnNpb25FcnJvclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3N1YnNldCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnXTtcbnZhciBjcmVhdGVTdWJzZXQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXg7XG5cbiAgLyoqXG4gICAqIEdldCBvciBzZXQgYSBzdWJzZXQgb2YgYSBtYXRyaXggb3Igc3RyaW5nLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqICAgICBtYXRoLnN1YnNldCh2YWx1ZSwgaW5kZXgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXRyaWV2ZSBhIHN1YnNldFxuICAgKiAgICAgbWF0aC5zdWJzZXQodmFsdWUsIGluZGV4LCByZXBsYWNlbWVudCBbLCBkZWZhdWx0VmFsdWVdKSAgLy8gcmVwbGFjZSBhIHN1YnNldFxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIC8vIGdldCBhIHN1YnNldFxuICAgKiAgICAgY29uc3QgZCA9IFtbMSwgMl0sIFszLCA0XV1cbiAgICogICAgIG1hdGguc3Vic2V0KGQsIG1hdGguaW5kZXgoMSwgMCkpICAgICAgICAvLyByZXR1cm5zIDNcbiAgICogICAgIG1hdGguc3Vic2V0KGQsIG1hdGguaW5kZXgoWzAsIDFdLCAxKSkgICAvLyByZXR1cm5zIFtbMl0sIFs0XV1cbiAgICpcbiAgICogICAgIC8vIHJlcGxhY2UgYSBzdWJzZXRcbiAgICogICAgIGNvbnN0IGUgPSBbXVxuICAgKiAgICAgY29uc3QgZiA9IG1hdGguc3Vic2V0KGUsIG1hdGguaW5kZXgoMCwgWzAsIDJdKSwgWzUsIDZdKSAgLy8gZiA9IFtbNSwgNl1dXG4gICAqICAgICBjb25zdCBnID0gbWF0aC5zdWJzZXQoZiwgbWF0aC5pbmRleCgxLCAxKSwgNywgMCkgICAgICAgICAvLyBnID0gW1s1LCA2XSwgWzAsIDddXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHNpemUsIHJlc2l6ZSwgc3F1ZWV6ZSwgaW5kZXhcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeCB8IHN0cmluZ30gbWF0cml4ICBBbiBhcnJheSwgbWF0cml4LCBvciBzdHJpbmdcbiAgICogQHBhcmFtIHtJbmRleH0gaW5kZXggICAgICAgICAgICAgICAgICAgICBBbiBpbmRleCBjb250YWluaW5nIHJhbmdlcyBmb3IgZWFjaFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpbWVuc2lvblxuICAgKiBAcGFyYW0geyp9IFtyZXBsYWNlbWVudF0gICAgICAgICAgICAgICAgIEFuIGFycmF5LCBtYXRyaXgsIG9yIHNjYWxhci5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBwcm92aWRlZCwgdGhlIHN1YnNldCBpcyByZXBsYWNlZCB3aXRoIHJlcGxhY2VtZW50LlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vdCBwcm92aWRlZCwgdGhlIHN1YnNldCBpcyByZXR1cm5lZFxuICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWU9dW5kZWZpbmVkXSAgICAgIERlZmF1bHQgdmFsdWUsIGZpbGxlZCBpbiBvbiBuZXcgZW50cmllcyB3aGVuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLiBJZiBub3QgcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0aC5tYXRyaXggZWxlbWVudHMgd2lsbCBiZSBsZWZ0IHVuZGVmaW5lZC5cbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXggfCBzdHJpbmd9IEVpdGhlciB0aGUgcmV0cmlldmVkIHN1YnNldCBvciB0aGUgdXBkYXRlZCBtYXRyaXguXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIC8vIGdldCBzdWJzZXRcbiAgICAnQXJyYXksIEluZGV4JzogZnVuY3Rpb24gQXJyYXlJbmRleCh2YWx1ZSwgaW5kZXgpIHtcbiAgICAgIHZhciBtID0gbWF0cml4KHZhbHVlKTtcbiAgICAgIHZhciBzdWJzZXQgPSBtLnN1YnNldChpbmRleCk7IC8vIHJldHVybnMgYSBNYXRyaXhcblxuICAgICAgcmV0dXJuIGluZGV4LmlzU2NhbGFyKCkgPyBzdWJzZXQgOiBzdWJzZXQudmFsdWVPZigpOyAvLyByZXR1cm4gYW4gQXJyYXkgKGxpa2UgdGhlIGlucHV0KVxuICAgIH0sXG4gICAgJ01hdHJpeCwgSW5kZXgnOiBmdW5jdGlvbiBNYXRyaXhJbmRleCh2YWx1ZSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5zdWJzZXQoaW5kZXgpO1xuICAgIH0sXG4gICAgJ09iamVjdCwgSW5kZXgnOiBfZ2V0T2JqZWN0UHJvcGVydHksXG4gICAgJ3N0cmluZywgSW5kZXgnOiBfZ2V0U3Vic3RyaW5nLFxuICAgIC8vIHNldCBzdWJzZXRcbiAgICAnQXJyYXksIEluZGV4LCBhbnknOiBmdW5jdGlvbiBBcnJheUluZGV4QW55KHZhbHVlLCBpbmRleCwgcmVwbGFjZW1lbnQpIHtcbiAgICAgIHJldHVybiBtYXRyaXgoKDAsIF9vYmplY3QuY2xvbmUpKHZhbHVlKSkuc3Vic2V0KGluZGV4LCByZXBsYWNlbWVudCwgdW5kZWZpbmVkKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIEluZGV4LCBhbnksIGFueSc6IGZ1bmN0aW9uIEFycmF5SW5kZXhBbnlBbnkodmFsdWUsIGluZGV4LCByZXBsYWNlbWVudCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgICByZXR1cm4gbWF0cml4KCgwLCBfb2JqZWN0LmNsb25lKSh2YWx1ZSkpLnN1YnNldChpbmRleCwgcmVwbGFjZW1lbnQsIGRlZmF1bHRWYWx1ZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgSW5kZXgsIGFueSc6IGZ1bmN0aW9uIE1hdHJpeEluZGV4QW55KHZhbHVlLCBpbmRleCwgcmVwbGFjZW1lbnQpIHtcbiAgICAgIHJldHVybiB2YWx1ZS5jbG9uZSgpLnN1YnNldChpbmRleCwgcmVwbGFjZW1lbnQpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgSW5kZXgsIGFueSwgYW55JzogZnVuY3Rpb24gTWF0cml4SW5kZXhBbnlBbnkodmFsdWUsIGluZGV4LCByZXBsYWNlbWVudCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUuY2xvbmUoKS5zdWJzZXQoaW5kZXgsIHJlcGxhY2VtZW50LCBkZWZhdWx0VmFsdWUpO1xuICAgIH0sXG4gICAgJ3N0cmluZywgSW5kZXgsIHN0cmluZyc6IF9zZXRTdWJzdHJpbmcsXG4gICAgJ3N0cmluZywgSW5kZXgsIHN0cmluZywgc3RyaW5nJzogX3NldFN1YnN0cmluZyxcbiAgICAnT2JqZWN0LCBJbmRleCwgYW55JzogX3NldE9iamVjdFByb3BlcnR5XG4gIH0pO1xufSk7XG4vKipcbiAqIFJldHJpZXZlIGEgc3Vic2V0IG9mIGEgc3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyICAgICAgICAgICAgc3RyaW5nIGZyb20gd2hpY2ggdG8gZ2V0IGEgc3Vic3RyaW5nXG4gKiBAcGFyYW0ge0luZGV4fSBpbmRleCAgICAgICAgICAgQW4gaW5kZXggY29udGFpbmluZyByYW5nZXMgZm9yIGVhY2ggZGltZW5zaW9uXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBzdWJzdHJpbmdcbiAqIEBwcml2YXRlXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVTdWJzZXQgPSBjcmVhdGVTdWJzZXQ7XG5cbmZ1bmN0aW9uIF9nZXRTdWJzdHJpbmcoc3RyLCBpbmRleCkge1xuICBpZiAoISgwLCBfaXMuaXNJbmRleCkoaW5kZXgpKSB7XG4gICAgLy8gVE9ETzogYmV0dGVyIGVycm9yIG1lc3NhZ2VcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbmRleCBleHBlY3RlZCcpO1xuICB9XG5cbiAgaWYgKGluZGV4LnNpemUoKS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGluZGV4LnNpemUoKS5sZW5ndGgsIDEpO1xuICB9IC8vIHZhbGlkYXRlIHdoZXRoZXIgdGhlIHJhbmdlIGlzIG91dCBvZiByYW5nZVxuXG5cbiAgdmFyIHN0ckxlbiA9IHN0ci5sZW5ndGg7XG4gICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkoaW5kZXgubWluKClbMF0sIHN0ckxlbik7XG4gICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkoaW5kZXgubWF4KClbMF0sIHN0ckxlbik7XG4gIHZhciByYW5nZSA9IGluZGV4LmRpbWVuc2lvbigwKTtcbiAgdmFyIHN1YnN0ciA9ICcnO1xuICByYW5nZS5mb3JFYWNoKGZ1bmN0aW9uICh2KSB7XG4gICAgc3Vic3RyICs9IHN0ci5jaGFyQXQodik7XG4gIH0pO1xuICByZXR1cm4gc3Vic3RyO1xufVxuLyoqXG4gKiBSZXBsYWNlIGEgc3Vic3RyaW5nIGluIGEgc3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyICAgICAgICAgICAgc3RyaW5nIHRvIGJlIHJlcGxhY2VkXG4gKiBAcGFyYW0ge0luZGV4fSBpbmRleCAgICAgICAgICAgQW4gaW5kZXggY29udGFpbmluZyByYW5nZXMgZm9yIGVhY2ggZGltZW5zaW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVwbGFjZW1lbnQgICAgUmVwbGFjZW1lbnQgc3RyaW5nXG4gKiBAcGFyYW0ge3N0cmluZ30gW2RlZmF1bHRWYWx1ZV0gRGVmYXVsdCB2YWx1ZSB0byBiZSB1c2VzIHdoZW4gcmVzaXppbmdcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc3RyaW5nLiBpcyAnICcgYnkgZGVmYXVsdFxuICogQHJldHVybnMge3N0cmluZ30gcmVzdWx0XG4gKiBAcHJpdmF0ZVxuICovXG5cblxuZnVuY3Rpb24gX3NldFN1YnN0cmluZyhzdHIsIGluZGV4LCByZXBsYWNlbWVudCwgZGVmYXVsdFZhbHVlKSB7XG4gIGlmICghaW5kZXggfHwgaW5kZXguaXNJbmRleCAhPT0gdHJ1ZSkge1xuICAgIC8vIFRPRE86IGJldHRlciBlcnJvciBtZXNzYWdlXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5kZXggZXhwZWN0ZWQnKTtcbiAgfVxuXG4gIGlmIChpbmRleC5zaXplKCkubGVuZ3RoICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihpbmRleC5zaXplKCkubGVuZ3RoLCAxKTtcbiAgfVxuXG4gIGlmIChkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgZGVmYXVsdFZhbHVlICE9PSAnc3RyaW5nJyB8fCBkZWZhdWx0VmFsdWUubGVuZ3RoICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTaW5nbGUgY2hhcmFjdGVyIGV4cGVjdGVkIGFzIGRlZmF1bHRWYWx1ZScpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBkZWZhdWx0VmFsdWUgPSAnICc7XG4gIH1cblxuICB2YXIgcmFuZ2UgPSBpbmRleC5kaW1lbnNpb24oMCk7XG4gIHZhciBsZW4gPSByYW5nZS5zaXplKClbMF07XG5cbiAgaWYgKGxlbiAhPT0gcmVwbGFjZW1lbnQubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihyYW5nZS5zaXplKClbMF0sIHJlcGxhY2VtZW50Lmxlbmd0aCk7XG4gIH0gLy8gdmFsaWRhdGUgd2hldGhlciB0aGUgcmFuZ2UgaXMgb3V0IG9mIHJhbmdlXG5cblxuICB2YXIgc3RyTGVuID0gc3RyLmxlbmd0aDtcbiAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpbmRleC5taW4oKVswXSk7XG4gICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkoaW5kZXgubWF4KClbMF0pOyAvLyBjb3B5IHRoZSBzdHJpbmcgaW50byBhbiBhcnJheSB3aXRoIGNoYXJhY3RlcnNcblxuICB2YXIgY2hhcnMgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ckxlbjsgaSsrKSB7XG4gICAgY2hhcnNbaV0gPSBzdHIuY2hhckF0KGkpO1xuICB9XG5cbiAgcmFuZ2UuZm9yRWFjaChmdW5jdGlvbiAodiwgaSkge1xuICAgIGNoYXJzW3ZdID0gcmVwbGFjZW1lbnQuY2hhckF0KGlbMF0pO1xuICB9KTsgLy8gaW5pdGlhbGl6ZSB1bmRlZmluZWQgY2hhcmFjdGVycyB3aXRoIGEgc3BhY2VcblxuICBpZiAoY2hhcnMubGVuZ3RoID4gc3RyTGVuKSB7XG4gICAgZm9yICh2YXIgX2kgPSBzdHJMZW4gLSAxLCBfbGVuID0gY2hhcnMubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgIGlmICghY2hhcnNbX2ldKSB7XG4gICAgICAgIGNoYXJzW19pXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2hhcnMuam9pbignJyk7XG59XG4vKipcbiAqIFJldHJpZXZlIGEgcHJvcGVydHkgZnJvbSBhbiBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7SW5kZXh9IGluZGV4XG4gKiBAcmV0dXJuIHsqfSBSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHlcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBfZ2V0T2JqZWN0UHJvcGVydHkob2JqZWN0LCBpbmRleCkge1xuICBpZiAoaW5kZXguc2l6ZSgpLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaW5kZXguc2l6ZSgpLCAxKTtcbiAgfVxuXG4gIHZhciBrZXkgPSBpbmRleC5kaW1lbnNpb24oMCk7XG5cbiAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignU3RyaW5nIGV4cGVjdGVkIGFzIGluZGV4IHRvIHJldHJpZXZlIGFuIG9iamVjdCBwcm9wZXJ0eScpO1xuICB9XG5cbiAgcmV0dXJuICgwLCBfY3VzdG9tcy5nZXRTYWZlUHJvcGVydHkpKG9iamVjdCwga2V5KTtcbn1cbi8qKlxuICogU2V0IGEgcHJvcGVydHkgb24gYW4gb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gKiBAcGFyYW0ge0luZGV4fSBpbmRleFxuICogQHBhcmFtIHsqfSByZXBsYWNlbWVudFxuICogQHJldHVybiB7Kn0gUmV0dXJucyB0aGUgdXBkYXRlZCBvYmplY3RcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBfc2V0T2JqZWN0UHJvcGVydHkob2JqZWN0LCBpbmRleCwgcmVwbGFjZW1lbnQpIHtcbiAgaWYgKGluZGV4LnNpemUoKS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGluZGV4LnNpemUoKSwgMSk7XG4gIH1cblxuICB2YXIga2V5ID0gaW5kZXguZGltZW5zaW9uKDApO1xuXG4gIGlmICh0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1N0cmluZyBleHBlY3RlZCBhcyBpbmRleCB0byByZXRyaWV2ZSBhbiBvYmplY3QgcHJvcGVydHknKTtcbiAgfSAvLyBjbG9uZSB0aGUgb2JqZWN0LCBhbmQgYXBwbHkgdGhlIHByb3BlcnR5IHRvIHRoZSBjbG9uZVxuXG5cbiAgdmFyIHVwZGF0ZWQgPSAoMCwgX29iamVjdC5jbG9uZSkob2JqZWN0KTtcbiAgKDAsIF9jdXN0b21zLnNldFNhZmVQcm9wZXJ0eSkodXBkYXRlZCwga2V5LCByZXBsYWNlbWVudCk7XG4gIHJldHVybiB1cGRhdGVkO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVUcmFjZSA9IHZvaWQgMDtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICd0cmFjZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnYWRkJ107XG52YXIgY3JlYXRlVHJhY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBhZGQgPSBfcmVmLmFkZDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSB0cmFjZSBvZiBhIG1hdHJpeDogdGhlIHN1bSBvZiB0aGUgZWxlbWVudHMgb24gdGhlIG1haW5cbiAgICogZGlhZ29uYWwgb2YgYSBzcXVhcmUgbWF0cml4LlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgudHJhY2UoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgudHJhY2UoW1sxLCAyXSwgWzMsIDRdXSkgLy8gcmV0dXJucyA1XG4gICAqXG4gICAqICAgIGNvbnN0IEEgPSBbXG4gICAqICAgICAgWzEsIDIsIDNdLFxuICAgKiAgICAgIFstMSwgMiwgM10sXG4gICAqICAgICAgWzIsIDAsIDNdXG4gICAqICAgIF1cbiAgICogICAgbWF0aC50cmFjZShBKSAvLyByZXR1cm5zIDZcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGRpYWdcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0geCAgQSBtYXRyaXhcbiAgICpcbiAgICogQHJldHVybiB7bnVtYmVyfSBUaGUgdHJhY2Ugb2YgYHhgXG4gICAqL1xuICByZXR1cm4gdHlwZWQoJ3RyYWNlJywge1xuICAgIEFycmF5OiBmdW5jdGlvbiBfYXJyYXlUcmFjZSh4KSB7XG4gICAgICAvLyB1c2UgZGVuc2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gX2RlbnNlVHJhY2UobWF0cml4KHgpKTtcbiAgICB9LFxuICAgIFNwYXJzZU1hdHJpeDogX3NwYXJzZVRyYWNlLFxuICAgIERlbnNlTWF0cml4OiBfZGVuc2VUcmFjZSxcbiAgICBhbnk6IF9vYmplY3QuY2xvbmVcbiAgfSk7XG5cbiAgZnVuY3Rpb24gX2RlbnNlVHJhY2UobSkge1xuICAgIC8vIG1hdHJpeCBzaXplICYgZGF0YVxuICAgIHZhciBzaXplID0gbS5fc2l6ZTtcbiAgICB2YXIgZGF0YSA9IG0uX2RhdGE7IC8vIHByb2Nlc3MgZGltZW5zaW9uc1xuXG4gICAgc3dpdGNoIChzaXplLmxlbmd0aCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICAvLyB2ZWN0b3JcbiAgICAgICAgaWYgKHNpemVbMF0gPT09IDEpIHtcbiAgICAgICAgICAvLyByZXR1cm4gZGF0YVswXVxuICAgICAgICAgIHJldHVybiAoMCwgX29iamVjdC5jbG9uZSkoZGF0YVswXSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgc3F1YXJlIChzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAge1xuICAgICAgICAgIC8vIHR3byBkaW1lbnNpb25hbFxuICAgICAgICAgIHZhciByb3dzID0gc2l6ZVswXTtcbiAgICAgICAgICB2YXIgY29scyA9IHNpemVbMV07XG5cbiAgICAgICAgICBpZiAocm93cyA9PT0gY29scykge1xuICAgICAgICAgICAgLy8gY2FsdWxhdGUgc3VtXG4gICAgICAgICAgICB2YXIgc3VtID0gMDsgLy8gbG9vcCBkaWFnb25hbFxuXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgICAgICAgICBzdW0gPSBhZGQoc3VtLCBkYXRhW2ldW2ldKTtcbiAgICAgICAgICAgIH0gLy8gcmV0dXJuIHRyYWNlXG5cblxuICAgICAgICAgICAgcmV0dXJuIHN1bTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHNxdWFyZSAoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBtdWx0aSBkaW1lbnNpb25hbFxuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignTWF0cml4IG11c3QgYmUgdHdvIGRpbWVuc2lvbmFsIChzaXplOiAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShzaXplKSArICcpJyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gX3NwYXJzZVRyYWNlKG0pIHtcbiAgICAvLyBtYXRyaXggYXJyYXlzXG4gICAgdmFyIHZhbHVlcyA9IG0uX3ZhbHVlcztcbiAgICB2YXIgaW5kZXggPSBtLl9pbmRleDtcbiAgICB2YXIgcHRyID0gbS5fcHRyO1xuICAgIHZhciBzaXplID0gbS5fc2l6ZTsgLy8gY2hlY2sgZGltZW5zaW9uc1xuXG4gICAgdmFyIHJvd3MgPSBzaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gc2l6ZVsxXTsgLy8gbWF0cml4IG11c3QgYmUgc3F1YXJlXG5cbiAgICBpZiAocm93cyA9PT0gY29sdW1ucykge1xuICAgICAgLy8gY2FsdWxhdGUgc3VtXG4gICAgICB2YXIgc3VtID0gMDsgLy8gY2hlY2sgd2UgaGF2ZSBkYXRhIChhdm9pZCBsb29waW5nIGNvbHVtbnMpXG5cbiAgICAgIGlmICh2YWx1ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBsb29wIGNvbHVtbnNcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgICAvLyBrMCA8PSBrIDwgazEgd2hlcmUgazAgPSBfcHRyW2pdICYmIGsxID0gX3B0cltqKzFdXG4gICAgICAgICAgdmFyIGswID0gcHRyW2pdO1xuICAgICAgICAgIHZhciBrMSA9IHB0cltqICsgMV07IC8vIGxvb3AgayB3aXRoaW4gW2swLCBrMVtcblxuICAgICAgICAgIGZvciAodmFyIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgICAgIC8vIHJvdyBpbmRleFxuICAgICAgICAgICAgdmFyIGkgPSBpbmRleFtrXTsgLy8gY2hlY2sgcm93XG5cbiAgICAgICAgICAgIGlmIChpID09PSBqKSB7XG4gICAgICAgICAgICAgIC8vIGFjY3VtdWxhdGUgdmFsdWVcbiAgICAgICAgICAgICAgc3VtID0gYWRkKHN1bSwgdmFsdWVzW2tdKTsgLy8gZXhpdCBsb29wXG5cbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChpID4gaikge1xuICAgICAgICAgICAgICAvLyBleGl0IGxvb3AsIG5vIHZhbHVlIG9uIHRoZSBkaWFnb25hbCBmb3IgY29sdW1uIGpcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIHJldHVybiB0cmFjZVxuXG5cbiAgICAgIHJldHVybiBzdW07XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpeCBtdXN0IGJlIHNxdWFyZSAoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlVHJhY2UgPSBjcmVhdGVUcmFjZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVHJhbnNwb3NlID0gdm9pZCAwO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3RyYW5zcG9zZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnXTtcbnZhciBjcmVhdGVUcmFuc3Bvc2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXg7XG5cbiAgLyoqXG4gICAqIFRyYW5zcG9zZSBhIG1hdHJpeC4gQWxsIHZhbHVlcyBvZiB0aGUgbWF0cml4IGFyZSByZWZsZWN0ZWQgb3ZlciBpdHNcbiAgICogbWFpbiBkaWFnb25hbC4gT25seSBhcHBsaWNhYmxlIHRvIHR3byBkaW1lbnNpb25hbCBtYXRyaWNlcyBjb250YWluaW5nXG4gICAqIGEgdmVjdG9yIChpLmUuIGhhdmluZyBzaXplIGBbMSxuXWAgb3IgYFtuLDFdYCkuIE9uZSBkaW1lbnNpb25hbFxuICAgKiB2ZWN0b3JzIGFuZCBzY2FsYXJzIHJldHVybiB0aGUgaW5wdXQgdW5jaGFuZ2VkLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLnRyYW5zcG9zZSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIGNvbnN0IEEgPSBbWzEsIDIsIDNdLCBbNCwgNSwgNl1dXG4gICAqICAgICBtYXRoLnRyYW5zcG9zZShBKSAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1sxLCA0XSwgWzIsIDVdLCBbMywgNl1dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgZGlhZywgaW52LCBzdWJzZXQsIHNxdWVlemVcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0geCAgTWF0cml4IHRvIGJlIHRyYW5zcG9zZWRcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgVGhlIHRyYW5zcG9zZWQgbWF0cml4XG4gICAqL1xuICB2YXIgdHJhbnNwb3NlID0gdHlwZWQoJ3RyYW5zcG9zZScsIHtcbiAgICBBcnJheTogZnVuY3Rpb24gQXJyYXkoeCkge1xuICAgICAgLy8gdXNlIGRlbnNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHRyYW5zcG9zZShtYXRyaXgoeCkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgIE1hdHJpeDogZnVuY3Rpb24gTWF0cml4KHgpIHtcbiAgICAgIC8vIG1hdHJpeCBzaXplXG4gICAgICB2YXIgc2l6ZSA9IHguc2l6ZSgpOyAvLyByZXN1bHRcblxuICAgICAgdmFyIGM7IC8vIHByb2Nlc3MgZGltZW5zaW9uc1xuXG4gICAgICBzd2l0Y2ggKHNpemUubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAvLyB2ZWN0b3JcbiAgICAgICAgICBjID0geC5jbG9uZSgpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyByb3dzIGFuZCBjb2x1bW5zXG4gICAgICAgICAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgICAgICAgICB2YXIgY29sdW1ucyA9IHNpemVbMV07IC8vIGNoZWNrIGNvbHVtbnNcblxuICAgICAgICAgICAgaWYgKGNvbHVtbnMgPT09IDApIHtcbiAgICAgICAgICAgICAgLy8gdGhyb3cgZXhjZXB0aW9uXG4gICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdDYW5ub3QgdHJhbnNwb3NlIGEgMkQgbWF0cml4IHdpdGggbm8gY29sdW1ucyAoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgICAgICAgICAgfSAvLyBwcm9jZXNzIHN0b3JhZ2UgZm9ybWF0XG5cblxuICAgICAgICAgICAgc3dpdGNoICh4LnN0b3JhZ2UoKSkge1xuICAgICAgICAgICAgICBjYXNlICdkZW5zZSc6XG4gICAgICAgICAgICAgICAgYyA9IF9kZW5zZVRyYW5zcG9zZSh4LCByb3dzLCBjb2x1bW5zKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlICdzcGFyc2UnOlxuICAgICAgICAgICAgICAgIGMgPSBfc3BhcnNlVHJhbnNwb3NlKHgsIHJvd3MsIGNvbHVtbnMpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIG11bHRpIGRpbWVuc2lvbmFsXG4gICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ01hdHJpeCBtdXN0IGJlIGEgdmVjdG9yIG9yIHR3byBkaW1lbnNpb25hbCAoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkodGhpcy5fc2l6ZSkgKyAnKScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYztcbiAgICB9LFxuICAgIC8vIHNjYWxhcnNcbiAgICBhbnk6IGZ1bmN0aW9uIGFueSh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9vYmplY3QuY2xvbmUpKHgpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gX2RlbnNlVHJhbnNwb3NlKG0sIHJvd3MsIGNvbHVtbnMpIHtcbiAgICAvLyBtYXRyaXggYXJyYXlcbiAgICB2YXIgZGF0YSA9IG0uX2RhdGE7IC8vIHRyYW5zcG9zZWQgbWF0cml4IGRhdGFcblxuICAgIHZhciB0cmFuc3Bvc2VkID0gW107XG4gICAgdmFyIHRyYW5zcG9zZWRSb3c7IC8vIGxvb3AgY29sdW1uc1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIGluaXRpYWxpemUgcm93XG4gICAgICB0cmFuc3Bvc2VkUm93ID0gdHJhbnNwb3NlZFtqXSA9IFtdOyAvLyBsb29wIHJvd3NcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgLy8gc2V0IGRhdGFcbiAgICAgICAgdHJhbnNwb3NlZFJvd1tpXSA9ICgwLCBfb2JqZWN0LmNsb25lKShkYXRhW2ldW2pdKTtcbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiBtYXRyaXhcblxuXG4gICAgcmV0dXJuIG0uY3JlYXRlRGVuc2VNYXRyaXgoe1xuICAgICAgZGF0YTogdHJhbnNwb3NlZCxcbiAgICAgIHNpemU6IFtjb2x1bW5zLCByb3dzXSxcbiAgICAgIGRhdGF0eXBlOiBtLl9kYXRhdHlwZVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gX3NwYXJzZVRyYW5zcG9zZShtLCByb3dzLCBjb2x1bW5zKSB7XG4gICAgLy8gbWF0cml4IGFycmF5c1xuICAgIHZhciB2YWx1ZXMgPSBtLl92YWx1ZXM7XG4gICAgdmFyIGluZGV4ID0gbS5faW5kZXg7XG4gICAgdmFyIHB0ciA9IG0uX3B0cjsgLy8gcmVzdWx0IG1hdHJpY2VzXG5cbiAgICB2YXIgY3ZhbHVlcyA9IHZhbHVlcyA/IFtdIDogdW5kZWZpbmVkO1xuICAgIHZhciBjaW5kZXggPSBbXTtcbiAgICB2YXIgY3B0ciA9IFtdOyAvLyByb3cgY291bnRzXG5cbiAgICB2YXIgdyA9IFtdO1xuXG4gICAgZm9yICh2YXIgeCA9IDA7IHggPCByb3dzOyB4KyspIHtcbiAgICAgIHdbeF0gPSAwO1xuICAgIH0gLy8gdmFyc1xuXG5cbiAgICB2YXIgcCwgbCwgajsgLy8gbG9vcCB2YWx1ZXMgaW4gbWF0cml4XG5cbiAgICBmb3IgKHAgPSAwLCBsID0gaW5kZXgubGVuZ3RoOyBwIDwgbDsgcCsrKSB7XG4gICAgICAvLyBudW1iZXIgb2YgdmFsdWVzIGluIHJvd1xuICAgICAgd1tpbmRleFtwXV0rKztcbiAgICB9IC8vIGN1bXVsYXRpdmUgc3VtXG5cblxuICAgIHZhciBzdW0gPSAwOyAvLyBpbml0aWFsaXplIGNwdHIgd2l0aCB0aGUgY3VtbXVsYXRpdmUgc3VtIG9mIHJvdyBjb3VudHNcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAvLyB1cGRhdGUgY3B0clxuICAgICAgY3B0ci5wdXNoKHN1bSk7IC8vIHVwZGF0ZSBzdW1cblxuICAgICAgc3VtICs9IHdbaV07IC8vIHVwZGF0ZSB3XG5cbiAgICAgIHdbaV0gPSBjcHRyW2ldO1xuICAgIH0gLy8gdXBkYXRlIGNwdHJcblxuXG4gICAgY3B0ci5wdXNoKHN1bSk7IC8vIGxvb3AgY29sdW1uc1xuXG4gICAgZm9yIChqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gdmFsdWVzICYgaW5kZXggaW4gY29sdW1uXG4gICAgICBmb3IgKHZhciBrMCA9IHB0cltqXSwgazEgPSBwdHJbaiArIDFdLCBrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIEMgdmFsdWVzICYgaW5kZXhcbiAgICAgICAgdmFyIHEgPSB3W2luZGV4W2tdXSsrOyAvLyBDW2osIGldID0gQVtpLCBqXVxuXG4gICAgICAgIGNpbmRleFtxXSA9IGo7IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyB2YWx1ZXMgKHBhdHRlcm4gbWF0cml4KVxuXG4gICAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgICBjdmFsdWVzW3FdID0gKDAsIF9vYmplY3QuY2xvbmUpKHZhbHVlc1trXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiBtYXRyaXhcblxuXG4gICAgcmV0dXJuIG0uY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbY29sdW1ucywgcm93c10sXG4gICAgICBkYXRhdHlwZTogbS5fZGF0YXR5cGVcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0cmFuc3Bvc2U7XG59KTtcbmV4cG9ydHMuY3JlYXRlVHJhbnNwb3NlID0gY3JlYXRlVHJhbnNwb3NlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVaZXJvcyA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnemVyb3MnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ21hdHJpeCcsICdCaWdOdW1iZXInXTtcbnZhciBjcmVhdGVaZXJvcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIG1hdHJpeCBmaWxsZWQgd2l0aCB6ZXJvcy4gVGhlIGNyZWF0ZWQgbWF0cml4IGNhbiBoYXZlIG9uZSBvclxuICAgKiBtdWx0aXBsZSBkaW1lbnNpb25zLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguemVyb3MobSlcbiAgICogICAgbWF0aC56ZXJvcyhtLCBmb3JtYXQpXG4gICAqICAgIG1hdGguemVyb3MobSwgbilcbiAgICogICAgbWF0aC56ZXJvcyhtLCBuLCBmb3JtYXQpXG4gICAqICAgIG1hdGguemVyb3MoW20sIG5dKVxuICAgKiAgICBtYXRoLnplcm9zKFttLCBuXSwgZm9ybWF0KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC56ZXJvcygzKSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgWzAsIDAsIDBdXG4gICAqICAgIG1hdGguemVyb3MoMywgMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIFtbMCwgMF0sIFswLCAwXSwgWzAsIDBdXVxuICAgKiAgICBtYXRoLnplcm9zKDMsICdkZW5zZScpICAgICAgICAgLy8gcmV0dXJucyBbMCwgMCwgMF1cbiAgICpcbiAgICogICAgY29uc3QgQSA9IFtbMSwgMiwgM10sIFs0LCA1LCA2XV1cbiAgICogICAgbWF0aC56ZXJvcyhtYXRoLnNpemUoQSkpICAgICAgIC8vIHJldHVybnMgW1swLCAwLCAwXSwgWzAsIDAsIDBdXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgb25lcywgaWRlbnRpdHksIHNpemUsIHJhbmdlXG4gICAqXG4gICAqIEBwYXJhbSB7Li4ubnVtYmVyIHwgQXJyYXl9IHNpemUgICAgVGhlIHNpemUgb2YgZWFjaCBkaW1lbnNpb24gb2YgdGhlIG1hdHJpeFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdF0gICAgICAgICAgIFRoZSBNYXRyaXggc3RvcmFnZSBmb3JtYXRcbiAgICpcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgICAgICAgICBBIG1hdHJpeCBmaWxsZWQgd2l0aCB6ZXJvc1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiBjb25maWcubWF0cml4ID09PSAnQXJyYXknID8gX3plcm9zKFtdKSA6IF96ZXJvcyhbXSwgJ2RlZmF1bHQnKTtcbiAgICB9LFxuICAgIC8vIG1hdGguemVyb3MobSwgbiwgcCwgLi4uLCBmb3JtYXQpXG4gICAgLy8gVE9ETzogbW9yZSBhY2N1cmF0ZSBzaWduYXR1cmUgJy4uLm51bWJlciB8IEJpZ051bWJlciwgc3RyaW5nJyBhcyBzb29uIGFzIHR5cGVkLWZ1bmN0aW9uIHN1cHBvcnRzIHRoaXNcbiAgICAnLi4ubnVtYmVyIHwgQmlnTnVtYmVyIHwgc3RyaW5nJzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyU3RyaW5nKHNpemUpIHtcbiAgICAgIHZhciBsYXN0ID0gc2l6ZVtzaXplLmxlbmd0aCAtIDFdO1xuXG4gICAgICBpZiAodHlwZW9mIGxhc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhciBmb3JtYXQgPSBzaXplLnBvcCgpO1xuICAgICAgICByZXR1cm4gX3plcm9zKHNpemUsIGZvcm1hdCk7XG4gICAgICB9IGVsc2UgaWYgKGNvbmZpZy5tYXRyaXggPT09ICdBcnJheScpIHtcbiAgICAgICAgcmV0dXJuIF96ZXJvcyhzaXplKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBfemVyb3Moc2l6ZSwgJ2RlZmF1bHQnKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIEFycmF5OiBfemVyb3MsXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoc2l6ZSkge1xuICAgICAgdmFyIGZvcm1hdCA9IHNpemUuc3RvcmFnZSgpO1xuICAgICAgcmV0dXJuIF96ZXJvcyhzaXplLnZhbHVlT2YoKSwgZm9ybWF0KTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgc3RyaW5nJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhTdHJpbmcoc2l6ZSwgZm9ybWF0KSB7XG4gICAgICByZXR1cm4gX3plcm9zKHNpemUudmFsdWVPZigpLCBmb3JtYXQpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gQXJyYXkgb3IgTWF0cml4IHdpdGggemVyb3NcbiAgICogQHBhcmFtIHtBcnJheX0gc2l6ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdD0nZGVmYXVsdCddXG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfemVyb3Moc2l6ZSwgZm9ybWF0KSB7XG4gICAgdmFyIGhhc0JpZ051bWJlcnMgPSBfbm9ybWFsaXplKHNpemUpO1xuXG4gICAgdmFyIGRlZmF1bHRWYWx1ZSA9IGhhc0JpZ051bWJlcnMgPyBuZXcgQmlnTnVtYmVyKDApIDogMDtcblxuICAgIF92YWxpZGF0ZShzaXplKTtcblxuICAgIGlmIChmb3JtYXQpIHtcbiAgICAgIC8vIHJldHVybiBhIG1hdHJpeFxuICAgICAgdmFyIG0gPSBtYXRyaXgoZm9ybWF0KTtcblxuICAgICAgaWYgKHNpemUubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gbS5yZXNpemUoc2l6ZSwgZGVmYXVsdFZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHJldHVybiBhbiBBcnJheVxuICAgICAgdmFyIGFyciA9IFtdO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiAoMCwgX2FycmF5LnJlc2l6ZSkoYXJyLCBzaXplLCBkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXJyO1xuICAgIH1cbiAgfSAvLyByZXBsYWNlIEJpZ051bWJlcnMgd2l0aCBudW1iZXJzLCByZXR1cm5zIHRydWUgaWYgc2l6ZSBjb250YWluZWQgQmlnTnVtYmVyc1xuXG5cbiAgZnVuY3Rpb24gX25vcm1hbGl6ZShzaXplKSB7XG4gICAgdmFyIGhhc0JpZ051bWJlcnMgPSBmYWxzZTtcbiAgICBzaXplLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyKSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikodmFsdWUpKSB7XG4gICAgICAgIGhhc0JpZ051bWJlcnMgPSB0cnVlO1xuICAgICAgICBhcnJbaW5kZXhdID0gdmFsdWUudG9OdW1iZXIoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gaGFzQmlnTnVtYmVycztcbiAgfSAvLyB2YWxpZGF0ZSBhcmd1bWVudHNcblxuXG4gIGZ1bmN0aW9uIF92YWxpZGF0ZShzaXplKSB7XG4gICAgc2l6ZS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikodmFsdWUpIHx8IHZhbHVlIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlcnMgaW4gZnVuY3Rpb24gemVyb3MgbXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VycycpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59KTsgLy8gVE9ETzogemVyb3MgY29udGFpbnMgYWxtb3N0IHRoZSBzYW1lIGNvZGUgYXMgb25lcy4gUmV1c2UgdGhpcz9cblxuZXhwb3J0cy5jcmVhdGVaZXJvcyA9IGNyZWF0ZVplcm9zOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21iaW5hdGlvbnMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbWJpbmF0aW9ucyA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXIvY29tYmluYXRpb25zXCIpO1xuXG52YXIgbmFtZSA9ICdjb21iaW5hdGlvbnMnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVDb21iaW5hdGlvbnMgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBudW1iZXIgb2Ygd2F5cyBvZiBwaWNraW5nIGBrYCB1bm9yZGVyZWQgb3V0Y29tZXMgZnJvbSBgbmBcbiAgICogcG9zc2liaWxpdGllcy5cbiAgICpcbiAgICogQ29tYmluYXRpb25zIG9ubHkgdGFrZXMgaW50ZWdlciBhcmd1bWVudHMuXG4gICAqIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IGsgPD0gbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5jb21iaW5hdGlvbnMobiwgaylcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguY29tYmluYXRpb25zKDcsIDUpIC8vIHJldHVybnMgMjFcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGNvbWJpbmF0aW9uc1dpdGhSZXAsIHBlcm11dGF0aW9ucywgZmFjdG9yaWFsXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyfSBuICAgIFRvdGFsIG51bWJlciBvZiBvYmplY3RzIGluIHRoZSBzZXRcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IGsgICAgTnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHN1YnNldFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXJ9ICAgICBOdW1iZXIgb2YgcG9zc2libGUgY29tYmluYXRpb25zLlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBfY29tYmluYXRpb25zLmNvbWJpbmF0aW9uc051bWJlcixcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIobiwgaykge1xuICAgICAgdmFyIEJpZ051bWJlciA9IG4uY29uc3RydWN0b3I7XG4gICAgICB2YXIgcmVzdWx0LCBpO1xuICAgICAgdmFyIG5NaW51c2sgPSBuLm1pbnVzKGspO1xuICAgICAgdmFyIG9uZSA9IG5ldyBCaWdOdW1iZXIoMSk7XG5cbiAgICAgIGlmICghaXNQb3NpdGl2ZUludGVnZXIobikgfHwgIWlzUG9zaXRpdmVJbnRlZ2VyKGspKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Bvc2l0aXZlIGludGVnZXIgdmFsdWUgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gY29tYmluYXRpb25zJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChrLmd0KG4pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2sgbXVzdCBiZSBsZXNzIHRoYW4gbiBpbiBmdW5jdGlvbiBjb21iaW5hdGlvbnMnKTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0ID0gb25lO1xuXG4gICAgICBpZiAoay5sdChuTWludXNrKSkge1xuICAgICAgICBmb3IgKGkgPSBvbmU7IGkubHRlKG5NaW51c2spOyBpID0gaS5wbHVzKG9uZSkpIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQudGltZXMoay5wbHVzKGkpKS5kaXZpZGVkQnkoaSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZvciAoaSA9IG9uZTsgaS5sdGUoayk7IGkgPSBpLnBsdXMob25lKSkge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC50aW1lcyhuTWludXNrLnBsdXMoaSkpLmRpdmlkZWRCeShpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gLy8gVE9ETzogaW1wbGVtZW50IHN1cHBvcnQgZm9yIGNvbGxlY3Rpb24gaW4gY29tYmluYXRpb25zXG5cbiAgfSk7XG59KTtcbi8qKlxuICogVGVzdCB3aGV0aGVyIEJpZ051bWJlciBuIGlzIGEgcG9zaXRpdmUgaW50ZWdlclxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IG5cbiAqIEByZXR1cm5zIHtib29sZWFufSBpc1Bvc2l0aXZlSW50ZWdlclxuICovXG5cbmV4cG9ydHMuY3JlYXRlQ29tYmluYXRpb25zID0gY3JlYXRlQ29tYmluYXRpb25zO1xuXG5mdW5jdGlvbiBpc1Bvc2l0aXZlSW50ZWdlcihuKSB7XG4gIHJldHVybiBuLmlzSW50ZWdlcigpICYmIG4uZ3RlKDApO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21iaW5hdGlvbnNXaXRoUmVwID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX3Byb2R1Y3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvcHJvZHVjdFwiKTtcblxudmFyIG5hbWUgPSAnY29tYmluYXRpb25zV2l0aFJlcCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUNvbWJpbmF0aW9uc1dpdGhSZXAgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBudW1iZXIgb2Ygd2F5cyBvZiBwaWNraW5nIGBrYCB1bm9yZGVyZWQgb3V0Y29tZXMgZnJvbSBgbmBcbiAgICogcG9zc2liaWxpdGllcywgYWxsb3dpbmcgaW5kaXZpZHVhbCBvdXRjb21lcyB0byBiZSByZXBlYXRlZCBtb3JlIHRoYW4gb25jZS5cbiAgICpcbiAgICogQ29tYmluYXRpb25zV2l0aFJlcCBvbmx5IHRha2VzIGludGVnZXIgYXJndW1lbnRzLlxuICAgKiBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbiBtdXN0IGJlIGVuZm9yY2VkOiBrIDw9IG4gKyBrIC0xLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmNvbWJpbmF0aW9uc1dpdGhSZXAobiwgaylcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguY29tYmluYXRpb25zV2l0aFJlcCg3LCA1KSAvLyByZXR1cm5zIDQ2MlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY29tYmluYXRpb25zLCBwZXJtdXRhdGlvbnMsIGZhY3RvcmlhbFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gbiAgICBUb3RhbCBudW1iZXIgb2Ygb2JqZWN0cyBpbiB0aGUgc2V0XG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyfSBrICAgIE51bWJlciBvZiBvYmplY3RzIGluIHRoZSBzdWJzZXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyfSAgICAgTnVtYmVyIG9mIHBvc3NpYmxlIGNvbWJpbmF0aW9ucyB3aXRoIHJlcGxhY2VtZW50LlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIobiwgaykge1xuICAgICAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKG4pIHx8IG4gPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Bvc2l0aXZlIGludGVnZXIgdmFsdWUgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gY29tYmluYXRpb25zV2l0aFJlcCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoaykgfHwgayA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21iaW5hdGlvbnNXaXRoUmVwJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChuIDwgMSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdrIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIG4gKyBrIC0gMScpO1xuICAgICAgfVxuXG4gICAgICBpZiAoayA8IG4gLSAxKSB7XG4gICAgICAgIHZhciBfcHJvZHJhbmdlID0gKDAsIF9wcm9kdWN0LnByb2R1Y3QpKG4sIG4gKyBrIC0gMSk7XG5cbiAgICAgICAgcmV0dXJuIF9wcm9kcmFuZ2UgLyAoMCwgX3Byb2R1Y3QucHJvZHVjdCkoMSwgayk7XG4gICAgICB9XG5cbiAgICAgIHZhciBwcm9kcmFuZ2UgPSAoMCwgX3Byb2R1Y3QucHJvZHVjdCkoayArIDEsIG4gKyBrIC0gMSk7XG4gICAgICByZXR1cm4gcHJvZHJhbmdlIC8gKDAsIF9wcm9kdWN0LnByb2R1Y3QpKDEsIG4gLSAxKTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcihuLCBrKSB7XG4gICAgICB2YXIgQmlnTnVtYmVyID0gbi5jb25zdHJ1Y3RvcjtcbiAgICAgIHZhciByZXN1bHQsIGk7XG4gICAgICB2YXIgb25lID0gbmV3IEJpZ051bWJlcigxKTtcbiAgICAgIHZhciBuTWludXNPbmUgPSBuLm1pbnVzKG9uZSk7XG5cbiAgICAgIGlmICghaXNQb3NpdGl2ZUludGVnZXIobikgfHwgIWlzUG9zaXRpdmVJbnRlZ2VyKGspKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Bvc2l0aXZlIGludGVnZXIgdmFsdWUgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gY29tYmluYXRpb25zV2l0aFJlcCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAobi5sdChvbmUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2sgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbiArIGsgLSAxIGluIGZ1bmN0aW9uIGNvbWJpbmF0aW9uc1dpdGhSZXAnKTtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0ID0gb25lO1xuXG4gICAgICBpZiAoay5sdChuTWludXNPbmUpKSB7XG4gICAgICAgIGZvciAoaSA9IG9uZTsgaS5sdGUobk1pbnVzT25lKTsgaSA9IGkucGx1cyhvbmUpKSB7XG4gICAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnRpbWVzKGsucGx1cyhpKSkuZGl2aWRlZEJ5KGkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmb3IgKGkgPSBvbmU7IGkubHRlKGspOyBpID0gaS5wbHVzKG9uZSkpIHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHQudGltZXMobk1pbnVzT25lLnBsdXMoaSkpLmRpdmlkZWRCeShpKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgfSk7XG59KTtcbi8qKlxuICogVGVzdCB3aGV0aGVyIEJpZ051bWJlciBuIGlzIGEgcG9zaXRpdmUgaW50ZWdlclxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IG5cbiAqIEByZXR1cm5zIHtib29sZWFufSBpc1Bvc2l0aXZlSW50ZWdlclxuICovXG5cbmV4cG9ydHMuY3JlYXRlQ29tYmluYXRpb25zV2l0aFJlcCA9IGNyZWF0ZUNvbWJpbmF0aW9uc1dpdGhSZXA7XG5cbmZ1bmN0aW9uIGlzUG9zaXRpdmVJbnRlZ2VyKG4pIHtcbiAgcmV0dXJuIG4uaXNJbnRlZ2VyKCkgJiYgbi5ndGUoMCk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZhY3RvcmlhbCA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdmYWN0b3JpYWwnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnZ2FtbWEnXTtcbnZhciBjcmVhdGVGYWN0b3JpYWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgZ2FtbWEgPSBfcmVmLmdhbW1hO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBmYWN0b3JpYWwgb2YgYSB2YWx1ZVxuICAgKlxuICAgKiBGYWN0b3JpYWwgb25seSBzdXBwb3J0cyBhbiBpbnRlZ2VyIHZhbHVlIGFzIGFyZ3VtZW50LlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZmFjdG9yaWFsKG4pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmZhY3RvcmlhbCg1KSAgICAvLyByZXR1cm5zIDEyMFxuICAgKiAgICBtYXRoLmZhY3RvcmlhbCgzKSAgICAvLyByZXR1cm5zIDZcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGNvbWJpbmF0aW9ucywgY29tYmluYXRpb25zV2l0aFJlcCwgZ2FtbWEsIHBlcm11dGF0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IEFycmF5IHwgTWF0cml4fSBuICAgQW4gaW50ZWdlciBudW1iZXJcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9ICAgIFRoZSBmYWN0b3JpYWwgb2YgYG5gXG4gICAqL1xuICB2YXIgZmFjdG9yaWFsID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKG4pIHtcbiAgICAgIGlmIChuIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZhbHVlIG11c3QgYmUgbm9uLW5lZ2F0aXZlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBnYW1tYShuICsgMSk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcihuKSB7XG4gICAgICBpZiAobi5pc05lZ2F0aXZlKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdWYWx1ZSBtdXN0IGJlIG5vbi1uZWdhdGl2ZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZ2FtbWEobi5wbHVzKDEpKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KG4pIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkobiwgZmFjdG9yaWFsKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZmFjdG9yaWFsO1xufSk7XG5leHBvcnRzLmNyZWF0ZUZhY3RvcmlhbCA9IGNyZWF0ZUZhY3RvcmlhbDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlR2FtbWEgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdnYW1tYSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnbXVsdGlwbHlTY2FsYXInLCAncG93JywgJ0JpZ051bWJlcicsICdDb21wbGV4J107XG52YXIgY3JlYXRlR2FtbWEgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBtdWx0aXBseVNjYWxhciA9IF9yZWYubXVsdGlwbHlTY2FsYXIsXG4gICAgICBwb3cgPSBfcmVmLnBvdyxcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcixcbiAgICAgIF9Db21wbGV4ID0gX3JlZi5Db21wbGV4O1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBnYW1tYSBmdW5jdGlvbiBvZiBhIHZhbHVlIHVzaW5nIExhbmN6b3MgYXBwcm94aW1hdGlvbiBmb3JcbiAgICogc21hbGwgdmFsdWVzLCBhbmQgYW4gZXh0ZW5kZWQgU3RpcmxpbmcgYXBwcm94aW1hdGlvbiBmb3IgbGFyZ2UgdmFsdWVzLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguZ2FtbWEobilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZ2FtbWEoNSkgICAgICAgLy8gcmV0dXJucyAyNFxuICAgKiAgICBtYXRoLmdhbW1hKC0wLjUpICAgIC8vIHJldHVybnMgLTMuNTQ0OTA3NzAxODExMDMzNVxuICAgKiAgICBtYXRoLmdhbW1hKG1hdGguaSkgIC8vIHJldHVybnMgLTAuMTU0OTQ5ODI4MzAxODA5NzMgLSAwLjQ5ODAxNTY2ODExODM1NTk2aVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY29tYmluYXRpb25zLCBmYWN0b3JpYWwsIHBlcm11dGF0aW9uc1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSBuICAgQSByZWFsIG9yIGNvbXBsZXggbnVtYmVyXG4gICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSAgICBUaGUgZ2FtbWEgb2YgYG5gXG4gICAqL1xuICB2YXIgZ2FtbWEgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmdhbW1hTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgobikge1xuICAgICAgaWYgKG4uaW0gPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGdhbW1hKG4ucmUpO1xuICAgICAgfVxuXG4gICAgICBuID0gbmV3IF9Db21wbGV4KG4ucmUgLSAxLCBuLmltKTtcbiAgICAgIHZhciB4ID0gbmV3IF9Db21wbGV4KF9udW1iZXIuZ2FtbWFQWzBdLCAwKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBfbnVtYmVyLmdhbW1hUC5sZW5ndGg7ICsraSkge1xuICAgICAgICB2YXIgcmVhbCA9IG4ucmUgKyBpOyAvLyB4ICs9IHBbaV0vKG4raSlcblxuICAgICAgICB2YXIgZGVuID0gcmVhbCAqIHJlYWwgKyBuLmltICogbi5pbTtcblxuICAgICAgICBpZiAoZGVuICE9PSAwKSB7XG4gICAgICAgICAgeC5yZSArPSBfbnVtYmVyLmdhbW1hUFtpXSAqIHJlYWwgLyBkZW47XG4gICAgICAgICAgeC5pbSArPSAtKF9udW1iZXIuZ2FtbWFQW2ldICogbi5pbSkgLyBkZW47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeC5yZSA9IF9udW1iZXIuZ2FtbWFQW2ldIDwgMCA/IC1JbmZpbml0eSA6IEluZmluaXR5O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHZhciB0ID0gbmV3IF9Db21wbGV4KG4ucmUgKyBfbnVtYmVyLmdhbW1hRyArIDAuNSwgbi5pbSk7XG4gICAgICB2YXIgdHdvUGlTcXJ0ID0gTWF0aC5zcXJ0KDIgKiBNYXRoLlBJKTtcbiAgICAgIG4ucmUgKz0gMC41O1xuICAgICAgdmFyIHJlc3VsdCA9IHBvdyh0LCBuKTtcblxuICAgICAgaWYgKHJlc3VsdC5pbSA9PT0gMCkge1xuICAgICAgICAvLyBzcXJ0KDIqUEkpKnJlc3VsdFxuICAgICAgICByZXN1bHQucmUgKj0gdHdvUGlTcXJ0O1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHQucmUgPT09IDApIHtcbiAgICAgICAgcmVzdWx0LmltICo9IHR3b1BpU3FydDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdC5yZSAqPSB0d29QaVNxcnQ7XG4gICAgICAgIHJlc3VsdC5pbSAqPSB0d29QaVNxcnQ7XG4gICAgICB9XG5cbiAgICAgIHZhciByID0gTWF0aC5leHAoLXQucmUpOyAvLyBleHAoLXQpXG5cbiAgICAgIHQucmUgPSByICogTWF0aC5jb3MoLXQuaW0pO1xuICAgICAgdC5pbSA9IHIgKiBNYXRoLnNpbigtdC5pbSk7XG4gICAgICByZXR1cm4gbXVsdGlwbHlTY2FsYXIobXVsdGlwbHlTY2FsYXIocmVzdWx0LCB0KSwgeCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcihuKSB7XG4gICAgICBpZiAobi5pc0ludGVnZXIoKSkge1xuICAgICAgICByZXR1cm4gbi5pc05lZ2F0aXZlKCkgfHwgbi5pc1plcm8oKSA/IG5ldyBfQmlnTnVtYmVyKEluZmluaXR5KSA6IGJpZ0ZhY3RvcmlhbChuLm1pbnVzKDEpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFuLmlzRmluaXRlKCkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKG4uaXNOZWdhdGl2ZSgpID8gTmFOIDogSW5maW5pdHkpO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVnZXIgQmlnTnVtYmVyIGV4cGVjdGVkJyk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChuKSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKG4sIGdhbW1hKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIGZhY3RvcmlhbCBmb3IgYSBCaWdOdW1iZXJcbiAgICogQHBhcmFtIHtCaWdOdW1iZXJ9IG5cbiAgICogQHJldHVybnMge0JpZ051bWJlcn0gUmV0dXJucyB0aGUgZmFjdG9yaWFsIG9mIG5cbiAgICovXG5cbiAgZnVuY3Rpb24gYmlnRmFjdG9yaWFsKG4pIHtcbiAgICBpZiAobiA8IDgpIHtcbiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcihbMSwgMSwgMiwgNiwgMjQsIDEyMCwgNzIwLCA1MDQwXVtuXSk7XG4gICAgfVxuXG4gICAgdmFyIHByZWNpc2lvbiA9IGNvbmZpZy5wcmVjaXNpb24gKyAoTWF0aC5sb2cobi50b051bWJlcigpKSB8IDApO1xuXG4gICAgdmFyIEJpZyA9IF9CaWdOdW1iZXIuY2xvbmUoe1xuICAgICAgcHJlY2lzaW9uOiBwcmVjaXNpb25cbiAgICB9KTtcblxuICAgIGlmIChuICUgMiA9PT0gMSkge1xuICAgICAgcmV0dXJuIG4udGltZXMoYmlnRmFjdG9yaWFsKG5ldyBfQmlnTnVtYmVyKG4gLSAxKSkpO1xuICAgIH1cblxuICAgIHZhciBwID0gbjtcbiAgICB2YXIgcHJvZCA9IG5ldyBCaWcobik7XG4gICAgdmFyIHN1bSA9IG4udG9OdW1iZXIoKTtcblxuICAgIHdoaWxlIChwID4gMikge1xuICAgICAgcCAtPSAyO1xuICAgICAgc3VtICs9IHA7XG4gICAgICBwcm9kID0gcHJvZC50aW1lcyhzdW0pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgX0JpZ051bWJlcihwcm9kLnRvUHJlY2lzaW9uKF9CaWdOdW1iZXIucHJlY2lzaW9uKSk7XG4gIH1cblxuICByZXR1cm4gZ2FtbWE7XG59KTtcbmV4cG9ydHMuY3JlYXRlR2FtbWEgPSBjcmVhdGVHYW1tYTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlS2xkaXZlcmdlbmNlID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAna2xkaXZlcmdlbmNlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ21hdHJpeCcsICdkaXZpZGUnLCAnc3VtJywgJ211bHRpcGx5JywgJ2RvdERpdmlkZScsICdsb2cnLCAnaXNOdW1lcmljJ107XG52YXIgY3JlYXRlS2xkaXZlcmdlbmNlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgZGl2aWRlID0gX3JlZi5kaXZpZGUsXG4gICAgICBzdW0gPSBfcmVmLnN1bSxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIGRvdERpdmlkZSA9IF9yZWYuZG90RGl2aWRlLFxuICAgICAgbG9nID0gX3JlZi5sb2csXG4gICAgICBpc051bWVyaWMgPSBfcmVmLmlzTnVtZXJpYztcblxuICAvKipcbiAgICAgKiBDYWxjdWxhdGUgdGhlIEt1bGxiYWNrLUxlaWJsZXIgKEtMKSBkaXZlcmdlbmNlICBiZXR3ZWVuIHR3byBkaXN0cmlidXRpb25zXG4gICAgICpcbiAgICAgKiBTeW50YXg6XG4gICAgICpcbiAgICAgKiAgICAgbWF0aC5rbGRpdmVyZ2VuY2UoeCwgeSlcbiAgICAgKlxuICAgICAqIEV4YW1wbGVzOlxuICAgICAqXG4gICAgICogICAgIG1hdGgua2xkaXZlcmdlbmNlKFswLjcsMC41LDAuNF0sIFswLjIsMC45LDAuNV0pICAgLy9yZXR1cm5zIDAuMjQzNzY2OTg3NzMxMjExNTNcbiAgICAgKlxuICAgICAqXG4gICAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHEgICAgRmlyc3QgdmVjdG9yXG4gICAgICogQHBhcmFtICB7QXJyYXkgfCBNYXRyaXh9IHAgICAgU2Vjb25kIHZlY3RvclxuICAgICAqIEByZXR1cm4ge251bWJlcn0gICAgICAgICAgICAgIFJldHVybnMgZGlzdGFuY2UgYmV0d2VlbiBxIGFuZCBwXG4gICAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkocSwgcCkge1xuICAgICAgcmV0dXJuIF9rbGRpdihtYXRyaXgocSksIG1hdHJpeChwKSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHEsIHApIHtcbiAgICAgIHJldHVybiBfa2xkaXYocSwgbWF0cml4KHApKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgocSwgcCkge1xuICAgICAgcmV0dXJuIF9rbGRpdihtYXRyaXgocSksIHApO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgTWF0cml4JzogZnVuY3Rpb24gTWF0cml4TWF0cml4KHEsIHApIHtcbiAgICAgIHJldHVybiBfa2xkaXYocSwgcCk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfa2xkaXYocSwgcCkge1xuICAgIHZhciBwbGVuZ3RoID0gcC5zaXplKCkubGVuZ3RoO1xuICAgIHZhciBxbGVuZ3RoID0gcS5zaXplKCkubGVuZ3RoO1xuXG4gICAgaWYgKHBsZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpcnN0IG9iamVjdCBtdXN0IGJlIG9uZSBkaW1lbnNpb25hbCcpO1xuICAgIH1cblxuICAgIGlmIChxbGVuZ3RoID4gMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdzZWNvbmQgb2JqZWN0IG11c3QgYmUgb25lIGRpbWVuc2lvbmFsJyk7XG4gICAgfVxuXG4gICAgaWYgKHBsZW5ndGggIT09IHFsZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignTGVuZ3RoIG9mIHR3byB2ZWN0b3JzIG11c3QgYmUgZXF1YWwnKTtcbiAgICB9IC8vIEJlZm9yZSBjYWxjdWxhdGlvbiwgYXBwbHkgbm9ybWFsaXphdGlvblxuXG5cbiAgICB2YXIgc3VtcSA9IHN1bShxKTtcblxuICAgIGlmIChzdW1xID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1N1bSBvZiBlbGVtZW50cyBpbiBmaXJzdCBvYmplY3QgbXVzdCBiZSBub24gemVybycpO1xuICAgIH1cblxuICAgIHZhciBzdW1wID0gc3VtKHApO1xuXG4gICAgaWYgKHN1bXAgPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3VtIG9mIGVsZW1lbnRzIGluIHNlY29uZCBvYmplY3QgbXVzdCBiZSBub24gemVybycpO1xuICAgIH1cblxuICAgIHZhciBxbm9ybSA9IGRpdmlkZShxLCBzdW0ocSkpO1xuICAgIHZhciBwbm9ybSA9IGRpdmlkZShwLCBzdW0ocCkpO1xuICAgIHZhciByZXN1bHQgPSBzdW0obXVsdGlwbHkocW5vcm0sIGxvZyhkb3REaXZpZGUocW5vcm0sIHBub3JtKSkpKTtcblxuICAgIGlmIChpc051bWVyaWMocmVzdWx0KSkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIE51bWJlci5OYU47XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlS2xkaXZlcmdlbmNlID0gY3JlYXRlS2xkaXZlcmdlbmNlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNdWx0aW5vbWlhbCA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdtdWx0aW5vbWlhbCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGQnLCAnZGl2aWRlJywgJ211bHRpcGx5JywgJ2ZhY3RvcmlhbCcsICdpc0ludGVnZXInLCAnaXNQb3NpdGl2ZSddO1xudmFyIGNyZWF0ZU11bHRpbm9taWFsID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFkZCA9IF9yZWYuYWRkLFxuICAgICAgZGl2aWRlID0gX3JlZi5kaXZpZGUsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICBmYWN0b3JpYWwgPSBfcmVmLmZhY3RvcmlhbCxcbiAgICAgIGlzSW50ZWdlciA9IF9yZWYuaXNJbnRlZ2VyLFxuICAgICAgaXNQb3NpdGl2ZSA9IF9yZWYuaXNQb3NpdGl2ZTtcblxuICAvKipcbiAgICogTXVsdGlub21pYWwgQ29lZmZpY2llbnRzIGNvbXB1dGUgdGhlIG51bWJlciBvZiB3YXlzIG9mIHBpY2tpbmcgYTEsIGEyLCAuLi4sIGFpIHVub3JkZXJlZCBvdXRjb21lcyBmcm9tIGBuYCBwb3NzaWJpbGl0aWVzLlxuICAgKlxuICAgKiBtdWx0aW5vbWlhbCB0YWtlcyBvbmUgYXJyYXkgb2YgaW50ZWdlcnMgYXMgYW4gYXJndW1lbnQuXG4gICAqIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IGV2ZXJ5IGFpIDw9IDBcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5tdWx0aW5vbWlhbChhKSAvLyBhIGlzIGFuIGFycmF5IHR5cGVcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgubXVsdGlub21pYWwoWzEsMiwxXSkgLy8gcmV0dXJucyAxMlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY29tYmluYXRpb25zLCBmYWN0b3JpYWxcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJbXSB8IEJpZ051bWJlcltdfSBhICAgIEludGVnZXIgbnVtYmVycyBvZiBvYmplY3RzIGluIHRoZSBzdWJzZXRcbiAgICogQHJldHVybiB7TnVtYmVyIHwgQmlnTnVtYmVyfSAgICAgICAgIE11bHRpbm9taWFsIGNvZWZmaWNpZW50LlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChhKSB7XG4gICAgICB2YXIgc3VtID0gMDtcbiAgICAgIHZhciBkZW5vbSA9IDE7XG4gICAgICAoMCwgX2NvbGxlY3Rpb24uZGVlcEZvckVhY2gpKGEsIGZ1bmN0aW9uIChhaSkge1xuICAgICAgICBpZiAoIWlzSW50ZWdlcihhaSkgfHwgIWlzUG9zaXRpdmUoYWkpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBtdWx0aW5vbWlhbCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3VtID0gYWRkKHN1bSwgYWkpO1xuICAgICAgICBkZW5vbSA9IG11bHRpcGx5KGRlbm9tLCBmYWN0b3JpYWwoYWkpKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGRpdmlkZShmYWN0b3JpYWwoc3VtKSwgZGVub20pO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlTXVsdGlub21pYWwgPSBjcmVhdGVNdWx0aW5vbWlhbDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlUGVybXV0YXRpb25zID0gdm9pZCAwO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfcHJvZHVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9wcm9kdWN0XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAncGVybXV0YXRpb25zJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2ZhY3RvcmlhbCddO1xudmFyIGNyZWF0ZVBlcm11dGF0aW9ucyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBmYWN0b3JpYWwgPSBfcmVmLmZhY3RvcmlhbDtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIHdheXMgb2Ygb2J0YWluaW5nIGFuIG9yZGVyZWQgc3Vic2V0IG9mIGBrYCBlbGVtZW50c1xuICAgKiBmcm9tIGEgc2V0IG9mIGBuYCBlbGVtZW50cy5cbiAgICpcbiAgICogUGVybXV0YXRpb25zIG9ubHkgdGFrZXMgaW50ZWdlciBhcmd1bWVudHMuXG4gICAqIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIG11c3QgYmUgZW5mb3JjZWQ6IGsgPD0gbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5wZXJtdXRhdGlvbnMobilcbiAgICogICAgIG1hdGgucGVybXV0YXRpb25zKG4sIGspXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnBlcm11dGF0aW9ucyg1KSAgICAgLy8gMTIwXG4gICAqICAgIG1hdGgucGVybXV0YXRpb25zKDUsIDMpICAvLyA2MFxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY29tYmluYXRpb25zLCBjb21iaW5hdGlvbnNXaXRoUmVwLCBmYWN0b3JpYWxcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IG4gICBUaGUgbnVtYmVyIG9mIG9iamVjdHMgaW4gdG90YWxcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IFtrXSBUaGUgbnVtYmVyIG9mIG9iamVjdHMgaW4gdGhlIHN1YnNldFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXJ9ICAgIFRoZSBudW1iZXIgb2YgcGVybXV0YXRpb25zXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIgfCBCaWdOdW1iZXInOiBmYWN0b3JpYWwsXG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKG4sIGspIHtcbiAgICAgIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShuKSB8fCBuIDwgMCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQb3NpdGl2ZSBpbnRlZ2VyIHZhbHVlIGV4cGVjdGVkIGluIGZ1bmN0aW9uIHBlcm11dGF0aW9ucycpO1xuICAgICAgfVxuXG4gICAgICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoaykgfHwgayA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBwZXJtdXRhdGlvbnMnKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGsgPiBuKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NlY29uZCBhcmd1bWVudCBrIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGZpcnN0IGFyZ3VtZW50IG4nKTtcbiAgICAgIH0gLy8gUGVybXV0ZSBuIG9iamVjdHMsIGsgYXQgYSB0aW1lXG5cblxuICAgICAgcmV0dXJuICgwLCBfcHJvZHVjdC5wcm9kdWN0KShuIC0gayArIDEsIG4pO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKG4sIGspIHtcbiAgICAgIHZhciByZXN1bHQsIGk7XG5cbiAgICAgIGlmICghaXNQb3NpdGl2ZUludGVnZXIobikgfHwgIWlzUG9zaXRpdmVJbnRlZ2VyKGspKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Bvc2l0aXZlIGludGVnZXIgdmFsdWUgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gcGVybXV0YXRpb25zJyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChrLmd0KG4pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3NlY29uZCBhcmd1bWVudCBrIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGZpcnN0IGFyZ3VtZW50IG4nKTtcbiAgICAgIH1cblxuICAgICAgdmFyIG9uZSA9IG4ubXVsKDApLmFkZCgxKTtcbiAgICAgIHJlc3VsdCA9IG9uZTtcblxuICAgICAgZm9yIChpID0gbi5taW51cyhrKS5wbHVzKDEpOyBpLmx0ZShuKTsgaSA9IGkucGx1cygxKSkge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQudGltZXMoaSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSAvLyBUT0RPOiBpbXBsZW1lbnQgc3VwcG9ydCBmb3IgY29sbGVjdGlvbiBpbiBwZXJtdXRhdGlvbnNcblxuICB9KTtcbn0pO1xuLyoqXG4gKiBUZXN0IHdoZXRoZXIgQmlnTnVtYmVyIG4gaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0gblxuICogQHJldHVybnMge2Jvb2xlYW59IGlzUG9zaXRpdmVJbnRlZ2VyXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVQZXJtdXRhdGlvbnMgPSBjcmVhdGVQZXJtdXRhdGlvbnM7XG5cbmZ1bmN0aW9uIGlzUG9zaXRpdmVJbnRlZ2VyKG4pIHtcbiAgcmV0dXJuIG4uaXNJbnRlZ2VyKCkgJiYgbi5ndGUoMCk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVBpY2tSYW5kb20gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX3NlZWRlZFJORyA9IHJlcXVpcmUoXCIuL3V0aWwvc2VlZGVkUk5HXCIpO1xuXG52YXIgbmFtZSA9ICdwaWNrUmFuZG9tJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICc/b24nXTtcbnZhciBjcmVhdGVQaWNrUmFuZG9tID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgb24gPSBfcmVmLm9uO1xuICAvLyBzZWVkZWQgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yXG4gIHZhciBybmcgPSAoMCwgX3NlZWRlZFJORy5jcmVhdGVSbmcpKGNvbmZpZy5yYW5kb21TZWVkKTtcblxuICBpZiAob24pIHtcbiAgICBvbignY29uZmlnJywgZnVuY3Rpb24gKGN1cnIsIHByZXYpIHtcbiAgICAgIGlmIChjdXJyLnJhbmRvbVNlZWQgIT09IHByZXYucmFuZG9tU2VlZCkge1xuICAgICAgICBybmcgPSAoMCwgX3NlZWRlZFJORy5jcmVhdGVSbmcpKGN1cnIucmFuZG9tU2VlZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJhbmRvbSBwaWNrIG9uZSBvciBtb3JlIHZhbHVlcyBmcm9tIGEgb25lIGRpbWVuc2lvbmFsIGFycmF5LlxuICAgKiBBcnJheSBlbGVtZW50cyBhcmUgcGlja2VkIHVzaW5nIGEgcmFuZG9tIGZ1bmN0aW9uIHdpdGggdW5pZm9ybSBvciB3ZWlnaHRlZCBkaXN0cmlidXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgucGlja1JhbmRvbShhcnJheSlcbiAgICogICAgIG1hdGgucGlja1JhbmRvbShhcnJheSwgbnVtYmVyKVxuICAgKiAgICAgbWF0aC5waWNrUmFuZG9tKGFycmF5LCB3ZWlnaHRzKVxuICAgKiAgICAgbWF0aC5waWNrUmFuZG9tKGFycmF5LCBudW1iZXIsIHdlaWdodHMpXG4gICAqICAgICBtYXRoLnBpY2tSYW5kb20oYXJyYXksIHdlaWdodHMsIG51bWJlcilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnBpY2tSYW5kb20oWzMsIDYsIDEyLCAyXSkgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG9uZSBvZiB0aGUgdmFsdWVzIGluIHRoZSBhcnJheVxuICAgKiAgICAgbWF0aC5waWNrUmFuZG9tKFszLCA2LCAxMiwgMl0sIDIpICAgICAgICAgICAgICAgLy8gcmV0dXJucyBhbiBhcnJheSBvZiB0d28gb2YgdGhlIHZhbHVlcyBpbiB0aGUgYXJyYXlcbiAgICogICAgIG1hdGgucGlja1JhbmRvbShbMywgNiwgMTIsIDJdLCBbMSwgMywgMiwgMV0pICAgIC8vIHJldHVybnMgb25lIG9mIHRoZSB2YWx1ZXMgaW4gdGhlIGFycmF5IHdpdGggd2VpZ2h0ZWQgZGlzdHJpYnV0aW9uXG4gICAqICAgICBtYXRoLnBpY2tSYW5kb20oWzMsIDYsIDEyLCAyXSwgMiwgWzEsIDMsIDIsIDFdKSAvLyByZXR1cm5zIGFuIGFycmF5IG9mIHR3byBvZiB0aGUgdmFsdWVzIGluIHRoZSBhcnJheSB3aXRoIHdlaWdodGVkIGRpc3RyaWJ1dGlvblxuICAgKiAgICAgbWF0aC5waWNrUmFuZG9tKFszLCA2LCAxMiwgMl0sIFsxLCAzLCAyLCAxXSwgMikgLy8gcmV0dXJucyBhbiBhcnJheSBvZiB0d28gb2YgdGhlIHZhbHVlcyBpbiB0aGUgYXJyYXkgd2l0aCB3ZWlnaHRlZCBkaXN0cmlidXRpb25cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgICByYW5kb20sIHJhbmRvbUludFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSBhcnJheSAgICAgQSBvbmUgZGltZW5zaW9uYWwgYXJyYXlcbiAgICogQHBhcmFtIHtJbnR9IG51bWJlciAgICAgICAgICAgICAgIEFuIGludCBvciBmbG9hdFxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSB3ZWlnaHRzICAgQW4gYXJyYXkgb2YgaW50cyBvciBmbG9hdHNcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQXJyYXl9ICAgICAgICAgIFJldHVybnMgYSBzaW5nbGUgcmFuZG9tIHZhbHVlIGZyb20gYXJyYXkgd2hlbiBudW1iZXIgaXMgMSBvciB1bmRlZmluZWQuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXR1cm5zIGFuIGFycmF5IHdpdGggdGhlIGNvbmZpZ3VyZWQgbnVtYmVyIG9mIGVsZW1lbnRzIHdoZW4gbnVtYmVyIGlzID4gMS5cbiAgICovXG5cblxuICByZXR1cm4gdHlwZWQoe1xuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHBvc3NpYmxlcykge1xuICAgICAgcmV0dXJuIF9waWNrUmFuZG9tKHBvc3NpYmxlcyk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyKHBvc3NpYmxlcywgbnVtYmVyKSB7XG4gICAgICByZXR1cm4gX3BpY2tSYW5kb20ocG9zc2libGVzLCBudW1iZXIsIHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gQXJyYXlNYXRyaXhBcnJheShwb3NzaWJsZXMsIHdlaWdodHMpIHtcbiAgICAgIHJldHVybiBfcGlja1JhbmRvbShwb3NzaWJsZXMsIHVuZGVmaW5lZCwgd2VpZ2h0cyk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgsIEFycmF5IHwgTWF0cml4LCBudW1iZXInOiBmdW5jdGlvbiBBcnJheU1hdHJpeEFycmF5TWF0cml4TnVtYmVyKHBvc3NpYmxlcywgd2VpZ2h0cywgbnVtYmVyKSB7XG4gICAgICByZXR1cm4gX3BpY2tSYW5kb20ocG9zc2libGVzLCBudW1iZXIsIHdlaWdodHMpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBudW1iZXIsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXJBcnJheU1hdHJpeChwb3NzaWJsZXMsIG51bWJlciwgd2VpZ2h0cykge1xuICAgICAgcmV0dXJuIF9waWNrUmFuZG9tKHBvc3NpYmxlcywgbnVtYmVyLCB3ZWlnaHRzKTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9waWNrUmFuZG9tKHBvc3NpYmxlcywgbnVtYmVyLCB3ZWlnaHRzKSB7XG4gICAgdmFyIHNpbmdsZSA9IHR5cGVvZiBudW1iZXIgPT09ICd1bmRlZmluZWQnO1xuXG4gICAgaWYgKHNpbmdsZSkge1xuICAgICAgbnVtYmVyID0gMTtcbiAgICB9XG5cbiAgICBwb3NzaWJsZXMgPSBwb3NzaWJsZXMudmFsdWVPZigpOyAvLyBnZXQgQXJyYXlcblxuICAgIGlmICh3ZWlnaHRzKSB7XG4gICAgICB3ZWlnaHRzID0gd2VpZ2h0cy52YWx1ZU9mKCk7IC8vIGdldCBBcnJheVxuICAgIH1cblxuICAgIGlmICgoMCwgX2FycmF5LmFycmF5U2l6ZSkocG9zc2libGVzKS5sZW5ndGggPiAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgb25lIGRpbWVuc2lvbmFsIHZlY3RvcnMgc3VwcG9ydGVkJyk7XG4gICAgfVxuXG4gICAgdmFyIHRvdGFsV2VpZ2h0cyA9IDA7XG5cbiAgICBpZiAodHlwZW9mIHdlaWdodHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBpZiAod2VpZ2h0cy5sZW5ndGggIT09IHBvc3NpYmxlcy5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdXZWlnaHRzIG11c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGggYXMgcG9zc2libGVzJyk7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSB3ZWlnaHRzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGlmICghKDAsIF9pcy5pc051bWJlcikod2VpZ2h0c1tpXSkgfHwgd2VpZ2h0c1tpXSA8IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1dlaWdodHMgbXVzdCBiZSBhbiBhcnJheSBvZiBwb3NpdGl2ZSBudW1iZXJzJyk7XG4gICAgICAgIH1cblxuICAgICAgICB0b3RhbFdlaWdodHMgKz0gd2VpZ2h0c1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgbGVuZ3RoID0gcG9zc2libGVzLmxlbmd0aDtcblxuICAgIGlmIChsZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9IGVsc2UgaWYgKG51bWJlciA+PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBudW1iZXIgPiAxID8gcG9zc2libGVzIDogcG9zc2libGVzWzBdO1xuICAgIH1cblxuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgcGljaztcblxuICAgIHdoaWxlIChyZXN1bHQubGVuZ3RoIDwgbnVtYmVyKSB7XG4gICAgICBpZiAodHlwZW9mIHdlaWdodHMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHBpY2sgPSBwb3NzaWJsZXNbTWF0aC5mbG9vcihybmcoKSAqIGxlbmd0aCldO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIHJhbmRLZXkgPSBybmcoKSAqIHRvdGFsV2VpZ2h0cztcblxuICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9sZW4gPSBwb3NzaWJsZXMubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgICByYW5kS2V5IC09IHdlaWdodHNbX2ldO1xuXG4gICAgICAgICAgaWYgKHJhbmRLZXkgPCAwKSB7XG4gICAgICAgICAgICBwaWNrID0gcG9zc2libGVzW19pXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmVzdWx0LmluZGV4T2YocGljaykgPT09IC0xKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHBpY2spO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzaW5nbGUgPyByZXN1bHRbMF0gOiByZXN1bHQ7IC8vIFRPRE86IHJldHVybiBtYXRyaXggd2hlbiBpbnB1dCB3YXMgYSBtYXRyaXhcbiAgICAvLyBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgbXVsdGkgZGltZW5zaW9uYWwgbWF0cmljZXNcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVBpY2tSYW5kb20gPSBjcmVhdGVQaWNrUmFuZG9tOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSYW5kb21OdW1iZXIgPSBleHBvcnRzLmNyZWF0ZVJhbmRvbSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfc2VlZGVkUk5HID0gcmVxdWlyZShcIi4vdXRpbC9zZWVkZWRSTkdcIik7XG5cbnZhciBfcmFuZG9tTWF0cml4MiA9IHJlcXVpcmUoXCIuL3V0aWwvcmFuZG9tTWF0cml4XCIpO1xuXG52YXIgbmFtZSA9ICdyYW5kb20nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJz9vbiddO1xudmFyIGNyZWF0ZVJhbmRvbSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG9uID0gX3JlZi5vbjtcbiAgLy8gc2VlZGVkIHBzZXVkbyByYW5kb20gbnVtYmVyIGdlbmVyYXRvclxuICB2YXIgcm5nID0gKDAsIF9zZWVkZWRSTkcuY3JlYXRlUm5nKShjb25maWcucmFuZG9tU2VlZCk7XG5cbiAgaWYgKG9uKSB7XG4gICAgb24oJ2NvbmZpZycsIGZ1bmN0aW9uIChjdXJyLCBwcmV2KSB7XG4gICAgICBpZiAoY3Vyci5yYW5kb21TZWVkICE9PSBwcmV2LnJhbmRvbVNlZWQpIHtcbiAgICAgICAgcm5nID0gKDAsIF9zZWVkZWRSTkcuY3JlYXRlUm5nKShjdXJyLnJhbmRvbVNlZWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gYSByYW5kb20gbnVtYmVyIGxhcmdlciBvciBlcXVhbCB0byBgbWluYCBhbmQgc21hbGxlciB0aGFuIGBtYXhgXG4gICAqIHVzaW5nIGEgdW5pZm9ybSBkaXN0cmlidXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgucmFuZG9tKCkgICAgICAgICAgICAgICAgLy8gZ2VuZXJhdGUgYSByYW5kb20gbnVtYmVyIGJldHdlZW4gMCBhbmQgMVxuICAgKiAgICAgbWF0aC5yYW5kb20obWF4KSAgICAgICAgICAgICAvLyBnZW5lcmF0ZSBhIHJhbmRvbSBudW1iZXIgYmV0d2VlbiAwIGFuZCBtYXhcbiAgICogICAgIG1hdGgucmFuZG9tKG1pbiwgbWF4KSAgICAgICAgLy8gZ2VuZXJhdGUgYSByYW5kb20gbnVtYmVyIGJldHdlZW4gbWluIGFuZCBtYXhcbiAgICogICAgIG1hdGgucmFuZG9tKHNpemUpICAgICAgICAgICAgLy8gZ2VuZXJhdGUgYSBtYXRyaXggd2l0aCByYW5kb20gbnVtYmVycyBiZXR3ZWVuIDAgYW5kIDFcbiAgICogICAgIG1hdGgucmFuZG9tKHNpemUsIG1heCkgICAgICAgLy8gZ2VuZXJhdGUgYSBtYXRyaXggd2l0aCByYW5kb20gbnVtYmVycyBiZXR3ZWVuIDAgYW5kIG1heFxuICAgKiAgICAgbWF0aC5yYW5kb20oc2l6ZSwgbWluLCBtYXgpICAvLyBnZW5lcmF0ZSBhIG1hdHJpeCB3aXRoIHJhbmRvbSBudW1iZXJzIGJldHdlZW4gbWluIGFuZCBtYXhcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnJhbmRvbSgpICAgICAgIC8vIHJldHVybnMgYSByYW5kb20gbnVtYmVyIGJldHdlZW4gMCBhbmQgMVxuICAgKiAgICAgbWF0aC5yYW5kb20oMTAwKSAgICAvLyByZXR1cm5zIGEgcmFuZG9tIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEwMFxuICAgKiAgICAgbWF0aC5yYW5kb20oMzAsIDQwKSAvLyByZXR1cm5zIGEgcmFuZG9tIG51bWJlciBiZXR3ZWVuIDMwIGFuZCA0MFxuICAgKiAgICAgbWF0aC5yYW5kb20oWzIsIDNdKSAvLyByZXR1cm5zIGEgMngzIG1hdHJpeCB3aXRoIHJhbmRvbSBudW1iZXJzIGJldHdlZW4gMCBhbmQgMVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHJhbmRvbUludCwgcGlja1JhbmRvbVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSBbc2l6ZV0gSWYgcHJvdmlkZWQsIGFuIGFycmF5IG9yIG1hdHJpeCB3aXRoIGdpdmVuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplIGFuZCBmaWxsZWQgd2l0aCByYW5kb20gdmFsdWVzIGlzIHJldHVybmVkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWluXSAgTWluaW11bSBib3VuZGFyeSBmb3IgdGhlIHJhbmRvbSB2YWx1ZSwgaW5jbHVkZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttYXhdICBNYXhpbXVtIGJvdW5kYXJ5IGZvciB0aGUgcmFuZG9tIHZhbHVlLCBleGNsdWRlZFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gQSByYW5kb20gbnVtYmVyXG4gICAqL1xuXG5cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tKDAsIDEpO1xuICAgIH0sXG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIobWF4KSB7XG4gICAgICByZXR1cm4gX3JhbmRvbSgwLCBtYXgpO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKG1pbiwgbWF4KSB7XG4gICAgICByZXR1cm4gX3JhbmRvbShtaW4sIG1heCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChzaXplKSB7XG4gICAgICByZXR1cm4gX3JhbmRvbU1hdHJpeChzaXplLCAwLCAxKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyJzogZnVuY3Rpb24gQXJyYXlNYXRyaXhOdW1iZXIoc2l6ZSwgbWF4KSB7XG4gICAgICByZXR1cm4gX3JhbmRvbU1hdHJpeChzaXplLCAwLCBtYXgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyTnVtYmVyKHNpemUsIG1pbiwgbWF4KSB7XG4gICAgICByZXR1cm4gX3JhbmRvbU1hdHJpeChzaXplLCBtaW4sIG1heCk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfcmFuZG9tTWF0cml4KHNpemUsIG1pbiwgbWF4KSB7XG4gICAgdmFyIHJlcyA9ICgwLCBfcmFuZG9tTWF0cml4Mi5yYW5kb21NYXRyaXgpKHNpemUudmFsdWVPZigpLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3JhbmRvbShtaW4sIG1heCk7XG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBfaXMuaXNNYXRyaXgpKHNpemUpID8gc2l6ZS5jcmVhdGUocmVzKSA6IHJlcztcbiAgfVxuXG4gIGZ1bmN0aW9uIF9yYW5kb20obWluLCBtYXgpIHtcbiAgICByZXR1cm4gbWluICsgcm5nKCkgKiAobWF4IC0gbWluKTtcbiAgfVxufSk7IC8vIG51bWJlciBvbmx5IGltcGxlbWVudGF0aW9uIG9mIHJhbmRvbSwgbm8gbWF0cml4IHN1cHBvcnRcbi8vIFRPRE86IHRoZXJlIGlzIHF1aXRlIHNvbWUgZHVwbGljYXRlIGNvZGUgaW4gYm90aCBjcmVhdGVSYW5kb20gYW5kIGNyZWF0ZVJhbmRvbU51bWJlciwgY2FuIHdlIGltcHJvdmUgdGhhdD9cblxuZXhwb3J0cy5jcmVhdGVSYW5kb20gPSBjcmVhdGVSYW5kb207XG52YXIgY3JlYXRlUmFuZG9tTnVtYmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIFsndHlwZWQnLCAnY29uZmlnJywgJz9vbiddLCBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgdmFyIHR5cGVkID0gX3JlZjIudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmMi5jb25maWcsXG4gICAgICBvbiA9IF9yZWYyLm9uLFxuICAgICAgbWF0cml4ID0gX3JlZjIubWF0cml4O1xuICAvLyBzZWVkZWQgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yMVxuICB2YXIgcm5nID0gKDAsIF9zZWVkZWRSTkcuY3JlYXRlUm5nKShjb25maWcucmFuZG9tU2VlZCk7XG5cbiAgaWYgKG9uKSB7XG4gICAgb24oJ2NvbmZpZycsIGZ1bmN0aW9uIChjdXJyLCBwcmV2KSB7XG4gICAgICBpZiAoY3Vyci5yYW5kb21TZWVkICE9PSBwcmV2LnJhbmRvbVNlZWQpIHtcbiAgICAgICAgcm5nID0gKDAsIF9zZWVkZWRSTkcuY3JlYXRlUm5nKShjdXJyLnJhbmRvbVNlZWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiBfcmFuZG9tKDAsIDEpO1xuICAgIH0sXG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIobWF4KSB7XG4gICAgICByZXR1cm4gX3JhbmRvbSgwLCBtYXgpO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKG1pbiwgbWF4KSB7XG4gICAgICByZXR1cm4gX3JhbmRvbShtaW4sIG1heCk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfcmFuZG9tKG1pbiwgbWF4KSB7XG4gICAgcmV0dXJuIG1pbiArIHJuZygpICogKG1heCAtIG1pbik7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVSYW5kb21OdW1iZXIgPSBjcmVhdGVSYW5kb21OdW1iZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhbmRvbUludCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfcmFuZG9tTWF0cml4ID0gcmVxdWlyZShcIi4vdXRpbC9yYW5kb21NYXRyaXhcIik7XG5cbnZhciBfc2VlZGVkUk5HID0gcmVxdWlyZShcIi4vdXRpbC9zZWVkZWRSTkdcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBuYW1lID0gJ3JhbmRvbUludCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnP29uJ107XG52YXIgY3JlYXRlUmFuZG9tSW50ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgb24gPSBfcmVmLm9uO1xuICAvLyBzZWVkZWQgcHNldWRvIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yXG4gIHZhciBybmcgPSAoMCwgX3NlZWRlZFJORy5jcmVhdGVSbmcpKGNvbmZpZy5yYW5kb21TZWVkKTtcblxuICBpZiAob24pIHtcbiAgICBvbignY29uZmlnJywgZnVuY3Rpb24gKGN1cnIsIHByZXYpIHtcbiAgICAgIGlmIChjdXJyLnJhbmRvbVNlZWQgIT09IHByZXYucmFuZG9tU2VlZCkge1xuICAgICAgICBybmcgPSAoMCwgX3NlZWRlZFJORy5jcmVhdGVSbmcpKGN1cnIucmFuZG9tU2VlZCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiBhIHJhbmRvbSBpbnRlZ2VyIG51bWJlciBsYXJnZXIgb3IgZXF1YWwgdG8gYG1pbmAgYW5kIHNtYWxsZXIgdGhhbiBgbWF4YFxuICAgKiB1c2luZyBhIHVuaWZvcm0gZGlzdHJpYnV0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLnJhbmRvbUludCgpICAgICAgICAgICAgICAgIC8vIGdlbmVyYXRlIGEgcmFuZG9tIGludGVnZXIgYmV0d2VlbiAwIGFuZCAxXG4gICAqICAgICBtYXRoLnJhbmRvbUludChtYXgpICAgICAgICAgICAgIC8vIGdlbmVyYXRlIGEgcmFuZG9tIGludGVnZXIgYmV0d2VlbiAwIGFuZCBtYXhcbiAgICogICAgIG1hdGgucmFuZG9tSW50KG1pbiwgbWF4KSAgICAgICAgLy8gZ2VuZXJhdGUgYSByYW5kb20gaW50ZWdlciBiZXR3ZWVuIG1pbiBhbmQgbWF4XG4gICAqICAgICBtYXRoLnJhbmRvbUludChzaXplKSAgICAgICAgICAgIC8vIGdlbmVyYXRlIGEgbWF0cml4IHdpdGggcmFuZG9tIGludGVnZXIgYmV0d2VlbiAwIGFuZCAxXG4gICAqICAgICBtYXRoLnJhbmRvbUludChzaXplLCBtYXgpICAgICAgIC8vIGdlbmVyYXRlIGEgbWF0cml4IHdpdGggcmFuZG9tIGludGVnZXIgYmV0d2VlbiAwIGFuZCBtYXhcbiAgICogICAgIG1hdGgucmFuZG9tSW50KHNpemUsIG1pbiwgbWF4KSAgLy8gZ2VuZXJhdGUgYSBtYXRyaXggd2l0aCByYW5kb20gaW50ZWdlciBiZXR3ZWVuIG1pbiBhbmQgbWF4XG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5yYW5kb21JbnQoMTAwKSAgICAvLyByZXR1cm5zIGEgcmFuZG9tIGludGVnZXIgYmV0d2VlbiAwIGFuZCAxMDBcbiAgICogICAgIG1hdGgucmFuZG9tSW50KDMwLCA0MCkgLy8gcmV0dXJucyBhIHJhbmRvbSBpbnRlZ2VyIGJldHdlZW4gMzAgYW5kIDQwXG4gICAqICAgICBtYXRoLnJhbmRvbUludChbMiwgM10pIC8vIHJldHVybnMgYSAyeDMgbWF0cml4IHdpdGggcmFuZG9tIGludGVnZXJzIGJldHdlZW4gMCBhbmQgMVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIHJhbmRvbSwgcGlja1JhbmRvbVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSBbc2l6ZV0gSWYgcHJvdmlkZWQsIGFuIGFycmF5IG9yIG1hdHJpeCB3aXRoIGdpdmVuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplIGFuZCBmaWxsZWQgd2l0aCByYW5kb20gdmFsdWVzIGlzIHJldHVybmVkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWluXSAgTWluaW11bSBib3VuZGFyeSBmb3IgdGhlIHJhbmRvbSB2YWx1ZSwgaW5jbHVkZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttYXhdICBNYXhpbXVtIGJvdW5kYXJ5IGZvciB0aGUgcmFuZG9tIHZhbHVlLCBleGNsdWRlZFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gQSByYW5kb20gaW50ZWdlciB2YWx1ZVxuICAgKi9cblxuXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJyc6IGZ1bmN0aW9uIF8oKSB7XG4gICAgICByZXR1cm4gX3JhbmRvbUludCgwLCAxKTtcbiAgICB9LFxuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKG1heCkge1xuICAgICAgcmV0dXJuIF9yYW5kb21JbnQoMCwgbWF4KTtcbiAgICB9LFxuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcihtaW4sIG1heCkge1xuICAgICAgcmV0dXJuIF9yYW5kb21JbnQobWluLCBtYXgpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoc2l6ZSkge1xuICAgICAgcmV0dXJuIF9yYW5kb21JbnRNYXRyaXgoc2l6ZSwgMCwgMSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyKHNpemUsIG1heCkge1xuICAgICAgcmV0dXJuIF9yYW5kb21JbnRNYXRyaXgoc2l6ZSwgMCwgbWF4KTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCwgbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlck51bWJlcihzaXplLCBtaW4sIG1heCkge1xuICAgICAgcmV0dXJuIF9yYW5kb21JbnRNYXRyaXgoc2l6ZSwgbWluLCBtYXgpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gX3JhbmRvbUludE1hdHJpeChzaXplLCBtaW4sIG1heCkge1xuICAgIHZhciByZXMgPSAoMCwgX3JhbmRvbU1hdHJpeC5yYW5kb21NYXRyaXgpKHNpemUudmFsdWVPZigpLCBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gX3JhbmRvbUludChtaW4sIG1heCk7XG4gICAgfSk7XG4gICAgcmV0dXJuICgwLCBfaXMuaXNNYXRyaXgpKHNpemUpID8gc2l6ZS5jcmVhdGUocmVzKSA6IHJlcztcbiAgfVxuXG4gIGZ1bmN0aW9uIF9yYW5kb21JbnQobWluLCBtYXgpIHtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihtaW4gKyBybmcoKSAqIChtYXggLSBtaW4pKTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZVJhbmRvbUludCA9IGNyZWF0ZVJhbmRvbUludDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMucmFuZG9tTWF0cml4ID0gcmFuZG9tTWF0cml4O1xuXG4vKipcbiAqIFRoaXMgaXMgYSB1dGlsIGZ1bmN0aW9uIGZvciBnZW5lcmF0aW5nIGEgcmFuZG9tIG1hdHJpeCByZWN1cnNpdmVseS5cbiAqIEBwYXJhbSB7bnVtYmVyW119IHNpemVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHJhbmRvbVxuICogQHJldHVybnMge0FycmF5fVxuICovXG5mdW5jdGlvbiByYW5kb21NYXRyaXgoc2l6ZSwgcmFuZG9tKSB7XG4gIHZhciBkYXRhID0gW107XG4gIHNpemUgPSBzaXplLnNsaWNlKDApO1xuXG4gIGlmIChzaXplLmxlbmd0aCA+IDEpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuZ3RoID0gc2l6ZS5zaGlmdCgpOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIGRhdGEucHVzaChyYW5kb21NYXRyaXgoc2l6ZSwgcmFuZG9tKSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIF9pID0gMCwgX2xlbmd0aCA9IHNpemUuc2hpZnQoKTsgX2kgPCBfbGVuZ3RoOyBfaSsrKSB7XG4gICAgICBkYXRhLnB1c2gocmFuZG9tKCkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkYXRhO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSbmcgPSBjcmVhdGVSbmc7XG5cbnZhciBfc2VlZFJhbmRvbSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInNlZWQtcmFuZG9tXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbi8vIGNyZWF0ZSBhIHJhbmRvbSBzZWVkIGhlcmUgdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wIGZyb20gc2VlZC1yYW5kb21cbi8vIGluc2lkZSB0aGUgZmFjdG9yeS4gUmVhc29uIGlzIHRoYXQgbWF0aC5yYW5kb20gaXMgZGVmaW5lZCBhcyBhIGdldHRlci9zZXR0ZXJcbi8vIGFuZCBzZWVkLXJhbmRvbSBnZW5lcmF0ZXMgYSBzZWVkIGZyb20gdGhlIGxvY2FsIGVudHJvcHkgYnkgcmVhZGluZyBldmVyeVxuLy8gZGVmaW5lZCBvYmplY3QgaW5jbHVkaW5nIGBtYXRoYCBpdHNlbGYuIFRoYXQgbWVhbnMgdGhhdCB3aGlsc3QgZ2V0dGluZ1xuLy8gbWF0aC5yYW5kb20sIGl0IHRyaWVzIHRvIGdldCBtYXRoLnJhbmRvbSwgZXRjLi4uIGFuIGluZmluaXRlIGxvb3AuXG4vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL0ZvcmJlc0xpbmRlc2F5L3NlZWQtcmFuZG9tL2lzc3Vlcy82XG52YXIgc2luZ2xldG9uUmFuZG9tID0gLyogI19fUFVSRV9fICovKDAsIF9zZWVkUmFuZG9tW1wiZGVmYXVsdFwiXSkoKTtcblxuZnVuY3Rpb24gY3JlYXRlUm5nKHJhbmRvbVNlZWQpIHtcbiAgdmFyIHJhbmRvbTsgLy8gY3JlYXRlIGEgbmV3IHJhbmRvbSBnZW5lcmF0b3Igd2l0aCBnaXZlbiBzZWVkXG5cbiAgZnVuY3Rpb24gc2V0U2VlZChzZWVkKSB7XG4gICAgcmFuZG9tID0gc2VlZCA9PT0gbnVsbCA/IHNpbmdsZXRvblJhbmRvbSA6ICgwLCBfc2VlZFJhbmRvbVtcImRlZmF1bHRcIl0pKFN0cmluZyhzZWVkKSk7XG4gIH0gLy8gaW5pdGlhbGl6ZSBhIHNlZWRlZCBwc2V1ZG8gcmFuZG9tIG51bWJlciBnZW5lcmF0b3Igd2l0aCBjb25maWcncyByYW5kb20gc2VlZFxuXG5cbiAgc2V0U2VlZChyYW5kb21TZWVkKTsgLy8gd3JhcHBlciBmdW5jdGlvbiBzbyB0aGUgcm5nIGNhbiBiZSB1cGRhdGVkIHZpYSBnZW5lcmF0b3JcblxuICBmdW5jdGlvbiBybmcoKSB7XG4gICAgcmV0dXJuIHJhbmRvbSgpO1xuICB9XG5cbiAgcmV0dXJuIHJuZztcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29tcGFyZU51bWJlciA9IGV4cG9ydHMuY3JlYXRlQ29tcGFyZSA9IHZvaWQgMDtcblxudmFyIF9uZWFybHlFcXVhbCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9iaWdudW1iZXIvbmVhcmx5RXF1YWxcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTJcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDVcIik7XG5cbnZhciBuYW1lID0gJ2NvbXBhcmUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ21hdHJpeCcsICdlcXVhbFNjYWxhcicsICdCaWdOdW1iZXInLCAnRnJhY3Rpb24nLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVDb21wYXJlID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcixcbiAgICAgIEZyYWN0aW9uID0gX3JlZi5GcmFjdGlvbixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNSA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0wNSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQ29tcGFyZSB0d28gdmFsdWVzLiBSZXR1cm5zIDEgd2hlbiB4ID4geSwgLTEgd2hlbiB4IDwgeSwgYW5kIDAgd2hlbiB4ID09IHkuXG4gICAqXG4gICAqIHggYW5kIHkgYXJlIGNvbnNpZGVyZWQgZXF1YWwgd2hlbiB0aGUgcmVsYXRpdmUgZGlmZmVyZW5jZSBiZXR3ZWVuIHggYW5kIHlcbiAgICogaXMgc21hbGxlciB0aGFuIHRoZSBjb25maWd1cmVkIGVwc2lsb24uIFRoZSBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCB0b1xuICAgKiBjb21wYXJlIHZhbHVlcyBzbWFsbGVyIHRoYW4gYXBwcm94aW1hdGVseSAyLjIyZS0xNi5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICogU3RyaW5ncyBhcmUgY29tcGFyZWQgYnkgdGhlaXIgbnVtZXJpY2FsIHZhbHVlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguY29tcGFyZSh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlKDYsIDEpICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICogICAgbWF0aC5jb21wYXJlKDIsIDMpICAgICAgICAgICAvLyByZXR1cm5zIC0xXG4gICAqICAgIG1hdGguY29tcGFyZSg3LCA3KSAgICAgICAgICAgLy8gcmV0dXJucyAwXG4gICAqICAgIG1hdGguY29tcGFyZSgnMTAnLCAnMicpICAgICAgLy8gcmV0dXJucyAxXG4gICAqICAgIG1hdGguY29tcGFyZSgnMTAwMCcsICcxZTMnKSAgLy8gcmV0dXJucyAwXG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLnVuaXQoJzUgY20nKVxuICAgKiAgICBjb25zdCBiID0gbWF0aC51bml0KCc0MCBtbScpXG4gICAqICAgIG1hdGguY29tcGFyZShhLCBiKSAgICAgICAgICAgLy8gcmV0dXJucyAxXG4gICAqXG4gICAqICAgIG1hdGguY29tcGFyZSgyLCBbMSwgMiwgM10pICAgLy8gcmV0dXJucyBbMSwgMCwgLTFdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBlcXVhbCwgdW5lcXVhbCwgc21hbGxlciwgc21hbGxlckVxLCBsYXJnZXIsIGxhcmdlckVxLCBjb21wYXJlTmF0dXJhbCwgY29tcGFyZVRleHRcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBVbml0IHwgc3RyaW5nIHwgQXJyYXkgfCBNYXRyaXh9IHggRmlyc3QgdmFsdWUgdG8gY29tcGFyZVxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gY29tcGFyZVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IEFycmF5IHwgTWF0cml4fSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb246XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgd2hlbiB4ID4geSwgLTEgd2hlbiB4IDwgeSwgYW5kIDAgd2hlbiB4ID09IHkuXG4gICAqL1xuXG4gIHZhciBjb21wYXJlID0gdHlwZWQobmFtZSwge1xuICAgICdib29sZWFuLCBib29sZWFuJzogZnVuY3Rpb24gYm9vbGVhbkJvb2xlYW4oeCwgeSkge1xuICAgICAgcmV0dXJuIHggPT09IHkgPyAwIDogeCA+IHkgPyAxIDogLTE7XG4gICAgfSxcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLm5lYXJseUVxdWFsKSh4LCB5LCBjb25maWcuZXBzaWxvbikgPyAwIDogeCA+IHkgPyAxIDogLTE7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuICgwLCBfbmVhcmx5RXF1YWwubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKSA/IG5ldyBCaWdOdW1iZXIoMCkgOiBuZXcgQmlnTnVtYmVyKHguY21wKHkpKTtcbiAgICB9LFxuICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oeC5jb21wYXJlKHkpKTtcbiAgICB9LFxuICAgICdDb21wbGV4LCBDb21wbGV4JzogZnVuY3Rpb24gQ29tcGxleENvbXBsZXgoKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBvcmRlcmluZyByZWxhdGlvbiBpcyBkZWZpbmVkIGZvciBjb21wbGV4IG51bWJlcnMnKTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgaWYgKCF4LmVxdWFsQmFzZSh5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb21wYXJlIHVuaXRzIHdpdGggZGlmZmVyZW50IGJhc2UnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbXBhcmUoeC52YWx1ZSwgeS52YWx1ZSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA1KHgsIHksIGNvbXBhcmUpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgY29tcGFyZSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBjb21wYXJlLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgY29tcGFyZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gY29tcGFyZShtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gY29tcGFyZShtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gY29tcGFyZSh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih4LCB5LCBjb21wYXJlLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBjb21wYXJlLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHksIHgsIGNvbXBhcmUsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgY29tcGFyZSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGNvbXBhcmUsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIGNvbXBhcmUsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY29tcGFyZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wYXJlID0gY3JlYXRlQ29tcGFyZTtcbnZhciBjcmVhdGVDb21wYXJlTnVtYmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIFsndHlwZWQnLCAnY29uZmlnJ10sIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgdHlwZWQgPSBfcmVmMi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYyLmNvbmZpZztcbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLm5lYXJseUVxdWFsKSh4LCB5LCBjb25maWcuZXBzaWxvbikgPyAwIDogeCA+IHkgPyAxIDogLTE7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wYXJlTnVtYmVyID0gY3JlYXRlQ29tcGFyZU51bWJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29tcGFyZU5hdHVyYWwgPSB2b2lkIDA7XG5cbnZhciBfamF2YXNjcmlwdE5hdHVyYWxTb3J0ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiamF2YXNjcmlwdC1uYXR1cmFsLXNvcnRcIikpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbnZhciBuYW1lID0gJ2NvbXBhcmVOYXR1cmFsJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbXBhcmUnXTtcbnZhciBjcmVhdGVDb21wYXJlTmF0dXJhbCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb21wYXJlID0gX3JlZi5jb21wYXJlO1xuICB2YXIgY29tcGFyZUJvb2xlYW5zID0gY29tcGFyZS5zaWduYXR1cmVzWydib29sZWFuLGJvb2xlYW4nXTtcbiAgLyoqXG4gICAqIENvbXBhcmUgdHdvIHZhbHVlcyBvZiBhbnkgdHlwZSBpbiBhIGRldGVybWluaXN0aWMsIG5hdHVyYWwgd2F5LlxuICAgKlxuICAgKiBGb3IgbnVtZXJpYyB2YWx1ZXMsIHRoZSBmdW5jdGlvbiB3b3JrcyB0aGUgc2FtZSBhcyBgbWF0aC5jb21wYXJlYC5cbiAgICogRm9yIHR5cGVzIG9mIHZhbHVlcyB0aGF0IGNhbid0IGJlIGNvbXBhcmVkIG1hdGhlbWF0aWNhbGx5LFxuICAgKiB0aGUgZnVuY3Rpb24gY29tcGFyZXMgaW4gYSBuYXR1cmFsIHdheS5cbiAgICpcbiAgICogRm9yIG51bWVyaWMgdmFsdWVzLCB4IGFuZCB5IGFyZSBjb25zaWRlcmVkIGVxdWFsIHdoZW4gdGhlIHJlbGF0aXZlXG4gICAqIGRpZmZlcmVuY2UgYmV0d2VlbiB4IGFuZCB5IGlzIHNtYWxsZXIgdGhhbiB0aGUgY29uZmlndXJlZCBlcHNpbG9uLlxuICAgKiBUaGUgZnVuY3Rpb24gY2Fubm90IGJlIHVzZWQgdG8gY29tcGFyZSB2YWx1ZXMgc21hbGxlciB0aGFuXG4gICAqIGFwcHJveGltYXRlbHkgMi4yMmUtMTYuXG4gICAqXG4gICAqIEZvciBDb21wbGV4IG51bWJlcnMsIGZpcnN0IHRoZSByZWFsIHBhcnRzIGFyZSBjb21wYXJlZC4gSWYgZXF1YWwsXG4gICAqIHRoZSBpbWFnaW5hcnkgcGFydHMgYXJlIGNvbXBhcmVkLlxuICAgKlxuICAgKiBTdHJpbmdzIGFyZSBjb21wYXJlZCB3aXRoIGEgbmF0dXJhbCBzb3J0aW5nIGFsZ29yaXRobSwgd2hpY2hcbiAgICogb3JkZXJzIHN0cmluZ3MgaW4gYSBcImxvZ2ljXCIgd2F5IGZvbGxvd2luZyBzb21lIGhldXJpc3RpY3MuXG4gICAqIFRoaXMgZGlmZmVycyBmcm9tIHRoZSBmdW5jdGlvbiBgY29tcGFyZWAsIHdoaWNoIGNvbnZlcnRzIHRoZSBzdHJpbmdcbiAgICogaW50byBhIG51bWVyaWMgdmFsdWUgYW5kIGNvbXBhcmVzIHRoYXQuIFRoZSBmdW5jdGlvbiBgY29tcGFyZVRleHRgXG4gICAqIG9uIHRoZSBvdGhlciBoYW5kIGNvbXBhcmVzIHRleHQgbGV4aWNhbGx5LlxuICAgKlxuICAgKiBBcnJheXMgYW5kIE1hdHJpY2VzIGFyZSBjb21wYXJlZCB2YWx1ZSBieSB2YWx1ZSB1bnRpbCB0aGVyZSBpcyBhblxuICAgKiB1bmVxdWFsIHBhaXIgb2YgdmFsdWVzIGVuY291bnRlcmVkLiBPYmplY3RzIGFyZSBjb21wYXJlZCBieSBzb3J0ZWRcbiAgICoga2V5cyB1bnRpbCB0aGUga2V5cyBvciB0aGVpciB2YWx1ZXMgYXJlIHVuZXF1YWwuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbCg2LCAxKSAgICAgICAgICAgICAgLy8gcmV0dXJucyAxXG4gICAqICAgIG1hdGguY29tcGFyZU5hdHVyYWwoMiwgMykgICAgICAgICAgICAgIC8vIHJldHVybnMgLTFcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbCg3LCA3KSAgICAgICAgICAgICAgLy8gcmV0dXJucyAwXG4gICAqXG4gICAqICAgIG1hdGguY29tcGFyZU5hdHVyYWwoJzEwJywgJzInKSAgICAgICAgIC8vIHJldHVybnMgMVxuICAgKiAgICBtYXRoLmNvbXBhcmVUZXh0KCcxMCcsICcyJykgICAgICAgICAgICAvLyByZXR1cm5zIC0xXG4gICAqICAgIG1hdGguY29tcGFyZSgnMTAnLCAnMicpICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMVxuICAgKlxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKCdBbnN3ZXI6IDEwJywgJ0Fuc3dlcjogMicpIC8vIHJldHVybnMgMVxuICAgKiAgICBtYXRoLmNvbXBhcmVUZXh0KCdBbnN3ZXI6IDEwJywgJ0Fuc3dlcjogMicpICAgIC8vIHJldHVybnMgLTFcbiAgICogICAgbWF0aC5jb21wYXJlKCdBbnN3ZXI6IDEwJywgJ0Fuc3dlcjogMicpXG4gICAqICAgICAgICAvLyBFcnJvcjogQ2Fubm90IGNvbnZlcnQgXCJBbnN3ZXI6IDEwXCIgdG8gYSBudW1iZXJcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGgudW5pdCgnNSBjbScpXG4gICAqICAgIGNvbnN0IGIgPSBtYXRoLnVuaXQoJzQwIG1tJylcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbChhLCBiKSAgICAgICAgICAgICAgLy8gcmV0dXJucyAxXG4gICAqXG4gICAqICAgIGNvbnN0IGMgPSBtYXRoLmNvbXBsZXgoJzIgKyAzaScpXG4gICAqICAgIGNvbnN0IGQgPSBtYXRoLmNvbXBsZXgoJzIgKyA0aScpXG4gICAqICAgIG1hdGguY29tcGFyZU5hdHVyYWwoYywgZCkgICAgICAgICAgICAgIC8vIHJldHVybnMgLTFcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbChbMSwgMiwgNF0sIFsxLCAyLCAzXSkgLy8gcmV0dXJucyAxXG4gICAqICAgIG1hdGguY29tcGFyZU5hdHVyYWwoWzEsIDIsIDNdLCBbMSwgMl0pICAgIC8vIHJldHVybnMgMVxuICAgKiAgICBtYXRoLmNvbXBhcmVOYXR1cmFsKFsxLCA1XSwgWzEsIDIsIDNdKSAgICAvLyByZXR1cm5zIDFcbiAgICogICAgbWF0aC5jb21wYXJlTmF0dXJhbChbMSwgMl0sIFsxLCAyXSkgICAgICAgLy8gcmV0dXJucyAwXG4gICAqXG4gICAqICAgIG1hdGguY29tcGFyZU5hdHVyYWwoe2E6IDJ9LCB7YTogNH0pICAgICAgIC8vIHJldHVybnMgLTFcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGNvbXBhcmUsIGNvbXBhcmVUZXh0XG4gICAqXG4gICAqIEBwYXJhbSAgeyp9IHggRmlyc3QgdmFsdWUgdG8gY29tcGFyZVxuICAgKiBAcGFyYW0gIHsqfSB5IFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge251bWJlcn0gUmV0dXJucyB0aGUgcmVzdWx0IG9mIHRoZSBjb21wYXJpc29uOlxuICAgKiAgICAgICAgICAgICAgICAgIDEgd2hlbiB4ID4geSwgLTEgd2hlbiB4IDwgeSwgYW5kIDAgd2hlbiB4ID09IHkuXG4gICAqL1xuXG4gIHZhciBjb21wYXJlTmF0dXJhbCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnYW55LCBhbnknOiBmdW5jdGlvbiBhbnlBbnkoeCwgeSkge1xuICAgICAgdmFyIHR5cGVYID0gKDAsIF9pcy50eXBlT2YpKHgpO1xuICAgICAgdmFyIHR5cGVZID0gKDAsIF9pcy50eXBlT2YpKHkpO1xuICAgICAgdmFyIGM7IC8vIG51bWVyaWMgdHlwZXNcblxuICAgICAgaWYgKCh0eXBlWCA9PT0gJ251bWJlcicgfHwgdHlwZVggPT09ICdCaWdOdW1iZXInIHx8IHR5cGVYID09PSAnRnJhY3Rpb24nKSAmJiAodHlwZVkgPT09ICdudW1iZXInIHx8IHR5cGVZID09PSAnQmlnTnVtYmVyJyB8fCB0eXBlWSA9PT0gJ0ZyYWN0aW9uJykpIHtcbiAgICAgICAgYyA9IGNvbXBhcmUoeCwgeSk7XG5cbiAgICAgICAgaWYgKGMudG9TdHJpbmcoKSAhPT0gJzAnKSB7XG4gICAgICAgICAgLy8gYyBjYW4gYmUgbnVtYmVyLCBCaWdOdW1iZXIsIG9yIEZyYWN0aW9uXG4gICAgICAgICAgcmV0dXJuIGMgPiAwID8gMSA6IC0xOyAvLyByZXR1cm4gYSBudW1iZXJcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gKDAsIF9qYXZhc2NyaXB0TmF0dXJhbFNvcnRbXCJkZWZhdWx0XCJdKSh0eXBlWCwgdHlwZVkpO1xuICAgICAgICB9XG4gICAgICB9IC8vIG1hdHJpeCB0eXBlc1xuXG5cbiAgICAgIGlmICh0eXBlWCA9PT0gJ0FycmF5JyB8fCB0eXBlWCA9PT0gJ01hdHJpeCcgfHwgdHlwZVkgPT09ICdBcnJheScgfHwgdHlwZVkgPT09ICdNYXRyaXgnKSB7XG4gICAgICAgIGMgPSBjb21wYXJlTWF0cmljZXNBbmRBcnJheXMoeCwgeSk7XG5cbiAgICAgICAgaWYgKGMgIT09IDApIHtcbiAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gKDAsIF9qYXZhc2NyaXB0TmF0dXJhbFNvcnRbXCJkZWZhdWx0XCJdKSh0eXBlWCwgdHlwZVkpO1xuICAgICAgICB9XG4gICAgICB9IC8vIGluIGNhc2Ugb2YgZGlmZmVyZW50IHR5cGVzLCBvcmRlciBieSBuYW1lIG9mIHR5cGUsIGkuZS4gJ0JpZ051bWJlcicgPCAnQ29tcGxleCdcblxuXG4gICAgICBpZiAodHlwZVggIT09IHR5cGVZKSB7XG4gICAgICAgIHJldHVybiAoMCwgX2phdmFzY3JpcHROYXR1cmFsU29ydFtcImRlZmF1bHRcIl0pKHR5cGVYLCB0eXBlWSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlWCA9PT0gJ0NvbXBsZXgnKSB7XG4gICAgICAgIHJldHVybiBjb21wYXJlQ29tcGxleE51bWJlcnMoeCwgeSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlWCA9PT0gJ1VuaXQnKSB7XG4gICAgICAgIGlmICh4LmVxdWFsQmFzZSh5KSkge1xuICAgICAgICAgIHJldHVybiBjb21wYXJlTmF0dXJhbCh4LnZhbHVlLCB5LnZhbHVlKTtcbiAgICAgICAgfSAvLyBjb21wYXJlIGJ5IHVuaXRzXG5cblxuICAgICAgICByZXR1cm4gY29tcGFyZUFycmF5cyh4LmZvcm1hdFVuaXRzKCksIHkuZm9ybWF0VW5pdHMoKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlWCA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHJldHVybiBjb21wYXJlQm9vbGVhbnMoeCwgeSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlWCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfamF2YXNjcmlwdE5hdHVyYWxTb3J0W1wiZGVmYXVsdFwiXSkoeCwgeSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlWCA9PT0gJ09iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBhcmVPYmplY3RzKHgsIHkpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZVggPT09ICdudWxsJykge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVYID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH0gLy8gdGhpcyBzaG91bGQgbm90IG9jY3VyLi4uXG5cblxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5zdXBwb3J0ZWQgdHlwZSBvZiB2YWx1ZSBcIicgKyB0eXBlWCArICdcIicpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDb21wYXJlIG1peGVkIG1hdHJpeC9hcnJheSB0eXBlcywgYnkgY29udmVydGluZyB0byBzYW1lLXNoYXBlZCBhcnJheS5cbiAgICogVGhpcyBjb21wYXJhdG9yIGlzIG5vbi1kZXRlcm1pbmlzdGljIHJlZ2FyZGluZyBpbnB1dCB0eXBlcy5cbiAgICogQHBhcmFtIHtBcnJheSB8IFNwYXJzZU1hdHJpeCB8IERlbnNlTWF0cml4IHwgKn0geFxuICAgKiBAcGFyYW0ge0FycmF5IHwgU3BhcnNlTWF0cml4IHwgRGVuc2VNYXRyaXggfCAqfSB5XG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbXBhcmlzb24gcmVzdWx0OiAtMSwgMCwgb3IgMVxuICAgKi9cblxuICBmdW5jdGlvbiBjb21wYXJlTWF0cmljZXNBbmRBcnJheXMoeCwgeSkge1xuICAgIGlmICgoMCwgX2lzLmlzU3BhcnNlTWF0cml4KSh4KSAmJiAoMCwgX2lzLmlzU3BhcnNlTWF0cml4KSh5KSkge1xuICAgICAgcmV0dXJuIGNvbXBhcmVBcnJheXMoeC50b0pTT04oKS52YWx1ZXMsIHkudG9KU09OKCkudmFsdWVzKTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF9pcy5pc1NwYXJzZU1hdHJpeCkoeCkpIHtcbiAgICAgIC8vIG5vdGU6IGNvbnZlcnQgdG8gYXJyYXkgaXMgZXhwZW5zaXZlXG4gICAgICByZXR1cm4gY29tcGFyZU1hdHJpY2VzQW5kQXJyYXlzKHgudG9BcnJheSgpLCB5KTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF9pcy5pc1NwYXJzZU1hdHJpeCkoeSkpIHtcbiAgICAgIC8vIG5vdGU6IGNvbnZlcnQgdG8gYXJyYXkgaXMgZXhwZW5zaXZlXG4gICAgICByZXR1cm4gY29tcGFyZU1hdHJpY2VzQW5kQXJyYXlzKHgsIHkudG9BcnJheSgpKTtcbiAgICB9IC8vIGNvbnZlcnQgRGVuc2VBcnJheSBpbnRvIEFycmF5XG5cblxuICAgIGlmICgoMCwgX2lzLmlzRGVuc2VNYXRyaXgpKHgpKSB7XG4gICAgICByZXR1cm4gY29tcGFyZU1hdHJpY2VzQW5kQXJyYXlzKHgudG9KU09OKCkuZGF0YSwgeSk7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNEZW5zZU1hdHJpeCkoeSkpIHtcbiAgICAgIHJldHVybiBjb21wYXJlTWF0cmljZXNBbmRBcnJheXMoeCwgeS50b0pTT04oKS5kYXRhKTtcbiAgICB9IC8vIGNvbnZlcnQgc2NhbGFycyB0byBhcnJheVxuXG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICAgIHJldHVybiBjb21wYXJlTWF0cmljZXNBbmRBcnJheXMoW3hdLCB5KTtcbiAgICB9XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoeSkpIHtcbiAgICAgIHJldHVybiBjb21wYXJlTWF0cmljZXNBbmRBcnJheXMoeCwgW3ldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29tcGFyZUFycmF5cyh4LCB5KTtcbiAgfVxuICAvKipcbiAgICogQ29tcGFyZSB0d28gQXJyYXlzXG4gICAqXG4gICAqIC0gRmlyc3QsIGNvbXBhcmVzIHZhbHVlIGJ5IHZhbHVlXG4gICAqIC0gTmV4dCwgaWYgYWxsIGNvcnJlc3BvbmRpbmcgdmFsdWVzIGFyZSBlcXVhbCxcbiAgICogICBsb29rIGF0IHRoZSBsZW5ndGg6IGxvbmdlc3QgYXJyYXkgd2lsbCBiZSBjb25zaWRlcmVkIGxhcmdlc3RcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0geFxuICAgKiBAcGFyYW0ge0FycmF5fSB5XG4gICAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGNvbXBhcmlzb24gcmVzdWx0OiAtMSwgMCwgb3IgMVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGNvbXBhcmVBcnJheXMoeCwgeSkge1xuICAgIC8vIGNvbXBhcmUgZWFjaCB2YWx1ZVxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IE1hdGgubWluKHgubGVuZ3RoLCB5Lmxlbmd0aCk7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgdiA9IGNvbXBhcmVOYXR1cmFsKHhbaV0sIHlbaV0pO1xuXG4gICAgICBpZiAodiAhPT0gMCkge1xuICAgICAgICByZXR1cm4gdjtcbiAgICAgIH1cbiAgICB9IC8vIGNvbXBhcmUgdGhlIHNpemUgb2YgdGhlIGFycmF5c1xuXG5cbiAgICBpZiAoeC5sZW5ndGggPiB5Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIDE7XG4gICAgfVxuXG4gICAgaWYgKHgubGVuZ3RoIDwgeS5sZW5ndGgpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9IC8vIGJvdGggQXJyYXlzIGhhdmUgZXF1YWwgc2l6ZSBhbmQgY29udGVudFxuXG5cbiAgICByZXR1cm4gMDtcbiAgfVxuICAvKipcbiAgICogQ29tcGFyZSB0d28gb2JqZWN0c1xuICAgKlxuICAgKiAtIEZpcnN0LCBjb21wYXJlIHNvcnRlZCBwcm9wZXJ0eSBuYW1lc1xuICAgKiAtIE5leHQsIGNvbXBhcmUgdGhlIHByb3BlcnR5IHZhbHVlc1xuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0geFxuICAgKiBAcGFyYW0ge09iamVjdH0geVxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb21wYXJpc29uIHJlc3VsdDogLTEsIDAsIG9yIDFcbiAgICovXG5cblxuICBmdW5jdGlvbiBjb21wYXJlT2JqZWN0cyh4LCB5KSB7XG4gICAgdmFyIGtleXNYID0gT2JqZWN0LmtleXMoeCk7XG4gICAgdmFyIGtleXNZID0gT2JqZWN0LmtleXMoeSk7IC8vIGNvbXBhcmUga2V5c1xuXG4gICAga2V5c1guc29ydChfamF2YXNjcmlwdE5hdHVyYWxTb3J0W1wiZGVmYXVsdFwiXSk7XG4gICAga2V5c1kuc29ydChfamF2YXNjcmlwdE5hdHVyYWxTb3J0W1wiZGVmYXVsdFwiXSk7XG4gICAgdmFyIGMgPSBjb21wYXJlQXJyYXlzKGtleXNYLCBrZXlzWSk7XG5cbiAgICBpZiAoYyAhPT0gMCkge1xuICAgICAgcmV0dXJuIGM7XG4gICAgfSAvLyBjb21wYXJlIHZhbHVlc1xuXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXNYLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdiA9IGNvbXBhcmVOYXR1cmFsKHhba2V5c1hbaV1dLCB5W2tleXNZW2ldXSk7XG5cbiAgICAgIGlmICh2ICE9PSAwKSB7XG4gICAgICAgIHJldHVybiB2O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgcmV0dXJuIGNvbXBhcmVOYXR1cmFsO1xufSk7XG4vKipcbiAqIENvbXBhcmUgdHdvIGNvbXBsZXggbnVtYmVycywgYHhgIGFuZCBgeWA6XG4gKlxuICogLSBGaXJzdCwgY29tcGFyZSB0aGUgcmVhbCB2YWx1ZXMgb2YgYHhgIGFuZCBgeWBcbiAqIC0gSWYgZXF1YWwsIGNvbXBhcmUgdGhlIGltYWdpbmFyeSB2YWx1ZXMgb2YgYHhgIGFuZCBgeWBcbiAqXG4gKiBAcGFyYW1zIHtDb21wbGV4fSB4XG4gKiBAcGFyYW1zIHtDb21wbGV4fSB5XG4gKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb21wYXJpc29uIHJlc3VsdDogLTEsIDAsIG9yIDFcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZUNvbXBhcmVOYXR1cmFsID0gY3JlYXRlQ29tcGFyZU5hdHVyYWw7XG5cbmZ1bmN0aW9uIGNvbXBhcmVDb21wbGV4TnVtYmVycyh4LCB5KSB7XG4gIGlmICh4LnJlID4geS5yZSkge1xuICAgIHJldHVybiAxO1xuICB9XG5cbiAgaWYgKHgucmUgPCB5LnJlKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgaWYgKHguaW0gPiB5LmltKSB7XG4gICAgcmV0dXJuIDE7XG4gIH1cblxuICBpZiAoeC5pbSA8IHkuaW0pIHtcbiAgICByZXR1cm4gLTE7XG4gIH1cblxuICByZXR1cm4gMDtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29tcGFyZVRleHROdW1iZXIgPSBleHBvcnRzLmNyZWF0ZUNvbXBhcmVUZXh0ID0gdm9pZCAwO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgbmFtZSA9ICdjb21wYXJlVGV4dCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnXTtcbnZhciBjcmVhdGVDb21wYXJlVGV4dCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIENvbXBhcmUgdHdvIHN0cmluZ3MgbGV4aWNhbGx5LiBDb21wYXJpc29uIGlzIGNhc2Ugc2Vuc2l0aXZlLlxuICAgKiBSZXR1cm5zIDEgd2hlbiB4ID4geSwgLTEgd2hlbiB4IDwgeSwgYW5kIDAgd2hlbiB4ID09IHkuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlVGV4dCh4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5jb21wYXJlVGV4dCgnQicsICdBJykgICAgIC8vIHJldHVybnMgMVxuICAgKiAgICBtYXRoLmNvbXBhcmVUZXh0KCcyJywgJzEwJykgICAgLy8gcmV0dXJucyAxXG4gICAqICAgIG1hdGguY29tcGFyZSgnMicsICcxMCcpICAgICAgICAvLyByZXR1cm5zIC0xXG4gICAqICAgIG1hdGguY29tcGFyZU5hdHVyYWwoJzInLCAnMTAnKSAvLyByZXR1cm5zIC0xXG4gICAqXG4gICAqICAgIG1hdGguY29tcGFyZVRleHQoJ0InLCBbJ0EnLCAnQicsICdDJ10pIC8vIHJldHVybnMgWzEsIDAsIC0xXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZXF1YWwsIGVxdWFsVGV4dCwgY29tcGFyZSwgY29tcGFyZU5hdHVyYWxcbiAgICpcbiAgICogQHBhcmFtICB7c3RyaW5nIHwgQXJyYXkgfCBEZW5zZU1hdHJpeH0geCBGaXJzdCBzdHJpbmcgdG8gY29tcGFyZVxuICAgKiBAcGFyYW0gIHtzdHJpbmcgfCBBcnJheSB8IERlbnNlTWF0cml4fSB5IFNlY29uZCBzdHJpbmcgdG8gY29tcGFyZVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBBcnJheSB8IERlbnNlTWF0cml4fSBSZXR1cm5zIHRoZSByZXN1bHQgb2YgdGhlIGNvbXBhcmlzb246XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgd2hlbiB4ID4geSwgLTEgd2hlbiB4IDwgeSwgYW5kIDAgd2hlbiB4ID09IHkuXG4gICAqL1xuXG4gIHZhciBjb21wYXJlVGV4dCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnYW55LCBhbnknOiBfc3RyaW5nLmNvbXBhcmVUZXh0LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBfc3RyaW5nLmNvbXBhcmVUZXh0KTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBjb21wYXJlVGV4dChtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gY29tcGFyZVRleHQobWF0cml4KHgpLCB5KTtcbiAgICB9LFxuICAgICdNYXRyaXgsIEFycmF5JzogZnVuY3Rpb24gTWF0cml4QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGNvbXBhcmVUZXh0KHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBfc3RyaW5nLmNvbXBhcmVUZXh0LCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBfc3RyaW5nLmNvbXBhcmVUZXh0LCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgX3N0cmluZy5jb21wYXJlVGV4dCwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgX3N0cmluZy5jb21wYXJlVGV4dCwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjb21wYXJlVGV4dDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wYXJlVGV4dCA9IGNyZWF0ZUNvbXBhcmVUZXh0O1xudmFyIGNyZWF0ZUNvbXBhcmVUZXh0TnVtYmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIFsndHlwZWQnXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdhbnksIGFueSc6IF9zdHJpbmcuY29tcGFyZVRleHRcbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ29tcGFyZVRleHROdW1iZXIgPSBjcmVhdGVDb21wYXJlVGV4dE51bWJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRGVlcEVxdWFsID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZGVlcEVxdWFsJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2VxdWFsJ107XG52YXIgY3JlYXRlRGVlcEVxdWFsID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGVxdWFsID0gX3JlZi5lcXVhbDtcblxuICAvKipcbiAgICogVGVzdCBlbGVtZW50IHdpc2Ugd2hldGhlciB0d28gbWF0cmljZXMgYXJlIGVxdWFsLlxuICAgKiBUaGUgZnVuY3Rpb24gYWNjZXB0cyBib3RoIG1hdHJpY2VzIGFuZCBzY2FsYXIgdmFsdWVzLlxuICAgKlxuICAgKiBTdHJpbmdzIGFyZSBjb21wYXJlZCBieSB0aGVpciBudW1lcmljYWwgdmFsdWUuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5kZWVwRXF1YWwoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZGVlcEVxdWFsKDIsIDQpICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKlxuICAgKiAgICBhID0gWzIsIDUsIDFdXG4gICAqICAgIGIgPSBbMiwgNywgMV1cbiAgICpcbiAgICogICAgbWF0aC5kZWVwRXF1YWwoYSwgYikgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguZXF1YWwoYSwgYikgICAgICAgLy8gcmV0dXJucyBbdHJ1ZSwgZmFsc2UsIHRydWVdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBlcXVhbCwgdW5lcXVhbFxuICAgKlxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggRmlyc3QgbWF0cml4IHRvIGNvbXBhcmVcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCBtYXRyaXggdG8gY29tcGFyZVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9XG4gICAqICAgICAgICAgICAgUmV0dXJucyB0cnVlIHdoZW4gdGhlIGlucHV0IG1hdHJpY2VzIGhhdmUgdGhlIHNhbWUgc2l6ZSBhbmQgZWFjaCBvZiB0aGVpciBlbGVtZW50cyBpcyBlcXVhbC5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ2FueSwgYW55JzogZnVuY3Rpb24gYW55QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBfZGVlcEVxdWFsKHgudmFsdWVPZigpLCB5LnZhbHVlT2YoKSk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciB0d28gYXJyYXlzIGhhdmUgdGhlIHNhbWUgc2l6ZSBhbmQgYWxsIGVsZW1lbnRzIGFyZSBlcXVhbFxuICAgKiBAcGFyYW0ge0FycmF5IHwgKn0geFxuICAgKiBAcGFyYW0ge0FycmF5IHwgKn0geVxuICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgYm90aCBhcnJheXMgYXJlIGRlZXAgZXF1YWxcbiAgICovXG5cbiAgZnVuY3Rpb24gX2RlZXBFcXVhbCh4LCB5KSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHkpKSB7XG4gICAgICAgIHZhciBsZW4gPSB4Lmxlbmd0aDtcblxuICAgICAgICBpZiAobGVuICE9PSB5Lmxlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICBpZiAoIV9kZWVwRXF1YWwoeFtpXSwgeVtpXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoeSkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGVxdWFsKHgsIHkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZURlZXBFcXVhbCA9IGNyZWF0ZURlZXBFcXVhbDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRXF1YWxOdW1iZXIgPSBleHBvcnRzLmNyZWF0ZUVxdWFsID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDNcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wN1wiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIG5hbWUgPSAnZXF1YWwnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4JywgJ2VxdWFsU2NhbGFyJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlRXF1YWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBhbGdvcml0aG0wMyA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDcgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMDcpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTIgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMTIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciB0d28gdmFsdWVzIGFyZSBlcXVhbC5cbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIHRlc3RzIHdoZXRoZXIgdGhlIHJlbGF0aXZlIGRpZmZlcmVuY2UgYmV0d2VlbiB4IGFuZCB5IGlzXG4gICAqIHNtYWxsZXIgdGhhbiB0aGUgY29uZmlndXJlZCBlcHNpbG9uLiBUaGUgZnVuY3Rpb24gY2Fubm90IGJlIHVzZWQgdG9cbiAgICogY29tcGFyZSB2YWx1ZXMgc21hbGxlciB0aGFuIGFwcHJveGltYXRlbHkgMi4yMmUtMTYuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqIEluIGNhc2Ugb2YgY29tcGxleCBudW1iZXJzLCB4LnJlIG11c3QgZXF1YWwgeS5yZSwgYW5kIHguaW0gbXVzdCBlcXVhbCB5LmltLlxuICAgKlxuICAgKiBWYWx1ZXMgYG51bGxgIGFuZCBgdW5kZWZpbmVkYCBhcmUgY29tcGFyZWQgc3RyaWN0bHksIHRodXMgYG51bGxgIGlzIG9ubHlcbiAgICogZXF1YWwgdG8gYG51bGxgIGFuZCBub3RoaW5nIGVsc2UsIGFuZCBgdW5kZWZpbmVkYCBpcyBvbmx5IGVxdWFsIHRvXG4gICAqIGB1bmRlZmluZWRgIGFuZCBub3RoaW5nIGVsc2UuIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyIG51bWVyaWNhbCB2YWx1ZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmVxdWFsKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmVxdWFsKDIgKyAyLCAzKSAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5lcXVhbCgyICsgMiwgNCkgICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGgudW5pdCgnNTAgY20nKVxuICAgKiAgICBjb25zdCBiID0gbWF0aC51bml0KCc1IG0nKVxuICAgKiAgICBtYXRoLmVxdWFsKGEsIGIpICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKlxuICAgKiAgICBjb25zdCBjID0gWzIsIDUsIDFdXG4gICAqICAgIGNvbnN0IGQgPSBbMiwgNywgMV1cbiAgICpcbiAgICogICAgbWF0aC5lcXVhbChjLCBkKSAgICAgICAgICAgICAvLyByZXR1cm5zIFt0cnVlLCBmYWxzZSwgdHJ1ZV1cbiAgICogICAgbWF0aC5kZWVwRXF1YWwoYywgZCkgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqXG4gICAqICAgIG1hdGguZXF1YWwoXCIxMDAwXCIsIFwiMWUzXCIpICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmVxdWFsKDAsIG51bGwpICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHVuZXF1YWwsIHNtYWxsZXIsIHNtYWxsZXJFcSwgbGFyZ2VyLCBsYXJnZXJFcSwgY29tcGFyZSwgZGVlcEVxdWFsLCBlcXVhbFRleHRcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgYm9vbGVhbiB8IENvbXBsZXggfCBVbml0IHwgc3RyaW5nIHwgQXJyYXkgfCBNYXRyaXh9IHggRmlyc3QgdmFsdWUgdG8gY29tcGFyZVxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBib29sZWFuIHwgQ29tcGxleCB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gY29tcGFyZVxuICAgKiBAcmV0dXJuIHtib29sZWFuIHwgQXJyYXkgfCBNYXRyaXh9IFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBjb21wYXJlZCB2YWx1ZXMgYXJlIGVxdWFsLCBlbHNlIHJldHVybnMgZmFsc2VcbiAgICovXG5cbiAgdmFyIGVxdWFsID0gdHlwZWQobmFtZSwge1xuICAgICdhbnksIGFueSc6IGZ1bmN0aW9uIGFueUFueSh4LCB5KSB7XG4gICAgICAvLyBzdHJpY3QgZXF1YWxpdHkgZm9yIG51bGwgYW5kIHVuZGVmaW5lZD9cbiAgICAgIGlmICh4ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB5ID09PSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAoeSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4geCA9PT0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHggPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4geSA9PT0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICBpZiAoeSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB4ID09PSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlcXVhbFNjYWxhcih4LCB5KTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDcoeCwgeSwgZXF1YWxTY2FsYXIpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgZXF1YWxTY2FsYXIsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeCwgeSwgZXF1YWxTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBlcXVhbFNjYWxhcik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gZXF1YWwobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGVxdWFsKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBlcXVhbCh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih4LCB5LCBlcXVhbFNjYWxhciwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgZXF1YWxTY2FsYXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgZXF1YWxTY2FsYXIsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgZXF1YWxTY2FsYXIsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBlcXVhbFNjYWxhciwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgZXF1YWxTY2FsYXIsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZXF1YWw7XG59KTtcbmV4cG9ydHMuY3JlYXRlRXF1YWwgPSBjcmVhdGVFcXVhbDtcbnZhciBjcmVhdGVFcXVhbE51bWJlciA9ICgwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBbJ3R5cGVkJywgJ2VxdWFsU2NhbGFyJ10sIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgdHlwZWQgPSBfcmVmMi50eXBlZCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZjIuZXF1YWxTY2FsYXI7XG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ2FueSwgYW55JzogZnVuY3Rpb24gYW55QW55KHgsIHkpIHtcbiAgICAgIC8vIHN0cmljdCBlcXVhbGl0eSBmb3IgbnVsbCBhbmQgdW5kZWZpbmVkP1xuICAgICAgaWYgKHggPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHkgPT09IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh5ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB4ID09PSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB5ID09PSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHggPT09IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGVxdWFsU2NhbGFyKHgsIHkpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlRXF1YWxOdW1iZXIgPSBjcmVhdGVFcXVhbE51bWJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRXF1YWxTY2FsYXJOdW1iZXIgPSBleHBvcnRzLmNyZWF0ZUVxdWFsU2NhbGFyID0gdm9pZCAwO1xuXG52YXIgX25lYXJseUVxdWFsID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9uZWFybHlFcXVhbFwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb21wbGV4ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbXBsZXhcIik7XG5cbnZhciBuYW1lID0gJ2VxdWFsU2NhbGFyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZyddO1xudmFyIGNyZWF0ZUVxdWFsU2NhbGFyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnO1xuXG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgdHdvIHNjYWxhciB2YWx1ZXMgYXJlIG5lYXJseSBlcXVhbC5cbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgQ29tcGxleCB8IFVuaXR9IHggICBGaXJzdCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgYm9vbGVhbiB8IENvbXBsZXh9IHkgICAgICAgICAgU2Vjb25kIHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBjb21wYXJlZCB2YWx1ZXMgYXJlIGVxdWFsLCBlbHNlIHJldHVybnMgZmFsc2VcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHZhciBlcXVhbFNjYWxhciA9IHR5cGVkKG5hbWUsIHtcbiAgICAnYm9vbGVhbiwgYm9vbGVhbic6IGZ1bmN0aW9uIGJvb2xlYW5Cb29sZWFuKHgsIHkpIHtcbiAgICAgIHJldHVybiB4ID09PSB5O1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiAoMCwgX251bWJlci5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH0sXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4LmVxKHkpIHx8ICgwLCBfbmVhcmx5RXF1YWwubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKTtcbiAgICB9LFxuICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiB4LmVxdWFscyh5KTtcbiAgICB9LFxuICAgICdDb21wbGV4LCBDb21wbGV4JzogZnVuY3Rpb24gQ29tcGxleENvbXBsZXgoeCwgeSkge1xuICAgICAgcmV0dXJuICgwLCBfY29tcGxleC5jb21wbGV4RXF1YWxzKSh4LCB5LCBjb25maWcuZXBzaWxvbik7XG4gICAgfSxcbiAgICAnVW5pdCwgVW5pdCc6IGZ1bmN0aW9uIFVuaXRVbml0KHgsIHkpIHtcbiAgICAgIGlmICgheC5lcXVhbEJhc2UoeSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29tcGFyZSB1bml0cyB3aXRoIGRpZmZlcmVudCBiYXNlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBlcXVhbFNjYWxhcih4LnZhbHVlLCB5LnZhbHVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZXF1YWxTY2FsYXI7XG59KTtcbmV4cG9ydHMuY3JlYXRlRXF1YWxTY2FsYXIgPSBjcmVhdGVFcXVhbFNjYWxhcjtcbnZhciBjcmVhdGVFcXVhbFNjYWxhck51bWJlciA9ICgwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBbJ3R5cGVkJywgJ2NvbmZpZyddLCBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgdmFyIHR5cGVkID0gX3JlZjIudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmMi5jb25maWc7XG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiAoMCwgX251bWJlci5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlRXF1YWxTY2FsYXJOdW1iZXIgPSBjcmVhdGVFcXVhbFNjYWxhck51bWJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRXF1YWxUZXh0ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZXF1YWxUZXh0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbXBhcmVUZXh0JywgJ2lzWmVybyddO1xudmFyIGNyZWF0ZUVxdWFsVGV4dCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb21wYXJlVGV4dCA9IF9yZWYuY29tcGFyZVRleHQsXG4gICAgICBpc1plcm8gPSBfcmVmLmlzWmVybztcblxuICAvKipcbiAgICogQ2hlY2sgZXF1YWxpdHkgb2YgdHdvIHN0cmluZ3MuIENvbXBhcmlzb24gaXMgY2FzZSBzZW5zaXRpdmUuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5lcXVhbFRleHQoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguZXF1YWxUZXh0KCdIZWxsbycsICdIZWxsbycpICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5lcXVhbFRleHQoJ2EnLCAnQScpICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5lcXVhbCgnMmUzJywgJzIwMDAnKSAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmVxdWFsVGV4dCgnMmUzJywgJzIwMDAnKSAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKlxuICAgKiAgICBtYXRoLmVxdWFsVGV4dCgnQicsIFsnQScsICdCJywgJ0MnXSkgLy8gcmV0dXJucyBbZmFsc2UsIHRydWUsIGZhbHNlXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZXF1YWwsIGNvbXBhcmVUZXh0LCBjb21wYXJlLCBjb21wYXJlTmF0dXJhbFxuICAgKlxuICAgKiBAcGFyYW0gIHtzdHJpbmcgfCBBcnJheSB8IERlbnNlTWF0cml4fSB4IEZpcnN0IHN0cmluZyB0byBjb21wYXJlXG4gICAqIEBwYXJhbSAge3N0cmluZyB8IEFycmF5IHwgRGVuc2VNYXRyaXh9IHkgU2Vjb25kIHN0cmluZyB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge251bWJlciB8IEFycmF5IHwgRGVuc2VNYXRyaXh9IFJldHVybnMgdHJ1ZSBpZiB0aGUgdmFsdWVzIGFyZSBlcXVhbCwgYW5kIGZhbHNlIGlmIG5vdC5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ2FueSwgYW55JzogZnVuY3Rpb24gYW55QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBpc1plcm8oY29tcGFyZVRleHQoeCwgeSkpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlRXF1YWxUZXh0ID0gY3JlYXRlRXF1YWxUZXh0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVMYXJnZXJOdW1iZXIgPSBleHBvcnRzLmNyZWF0ZUxhcmdlciA9IHZvaWQgMDtcblxudmFyIF9uZWFybHlFcXVhbCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9iaWdudW1iZXIvbmVhcmx5RXF1YWxcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDdcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMlwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBuYW1lID0gJ2xhcmdlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnbWF0cml4JywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlTGFyZ2VyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG4gIHZhciBhbGdvcml0aG0wMyA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTAzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDcgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMDcpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTIgPSAoMCwgX2FsZ29yaXRobTMuY3JlYXRlQWxnb3JpdGhtMTIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgRGVuc2VNYXRyaXg6IERlbnNlTWF0cml4XG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTMgPSAoMCwgX2FsZ29yaXRobTUuY3JlYXRlQWxnb3JpdGhtMTMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xNCA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xNCkoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciB2YWx1ZSB4IGlzIGxhcmdlciB0aGFuIHkuXG4gICAqXG4gICAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiB4IGlzIGxhcmdlciB0aGFuIHkgYW5kIHRoZSByZWxhdGl2ZVxuICAgKiBkaWZmZXJlbmNlIGJldHdlZW4geCBhbmQgeSBpcyBsYXJnZXIgdGhhbiB0aGUgY29uZmlndXJlZCBlcHNpbG9uLiBUaGVcbiAgICogZnVuY3Rpb24gY2Fubm90IGJlIHVzZWQgdG8gY29tcGFyZSB2YWx1ZXMgc21hbGxlciB0aGFuIGFwcHJveGltYXRlbHkgMi4yMmUtMTYuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyIG51bWVyaWNhbCB2YWx1ZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmxhcmdlcih4LCB5KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5sYXJnZXIoMiwgMykgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmxhcmdlcig1LCAyICsgMikgICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICpcbiAgICogICAgY29uc3QgYSA9IG1hdGgudW5pdCgnNSBjbScpXG4gICAqICAgIGNvbnN0IGIgPSBtYXRoLnVuaXQoJzIgaW5jaCcpXG4gICAqICAgIG1hdGgubGFyZ2VyKGEsIGIpICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGVxdWFsLCB1bmVxdWFsLCBzbWFsbGVyLCBzbWFsbGVyRXEsIGxhcmdlckVxLCBjb21wYXJlXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgYm9vbGVhbiB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgYm9vbGVhbiB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gY29tcGFyZVxuICAgKiBAcmV0dXJuIHtib29sZWFuIHwgQXJyYXkgfCBNYXRyaXh9IFJldHVybnMgdHJ1ZSB3aGVuIHRoZSB4IGlzIGxhcmdlciB0aGFuIHksIGVsc2UgcmV0dXJucyBmYWxzZVxuICAgKi9cblxuICB2YXIgbGFyZ2VyID0gdHlwZWQobmFtZSwge1xuICAgICdib29sZWFuLCBib29sZWFuJzogZnVuY3Rpb24gYm9vbGVhbkJvb2xlYW4oeCwgeSkge1xuICAgICAgcmV0dXJuIHggPiB5O1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4ID4geSAmJiAhKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKTtcbiAgICB9LFxuICAgICdCaWdOdW1iZXIsIEJpZ051bWJlcic6IGZ1bmN0aW9uIEJpZ051bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geC5ndCh5KSAmJiAhKDAsIF9uZWFybHlFcXVhbC5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH0sXG4gICAgJ0ZyYWN0aW9uLCBGcmFjdGlvbic6IGZ1bmN0aW9uIEZyYWN0aW9uRnJhY3Rpb24oeCwgeSkge1xuICAgICAgcmV0dXJuIHguY29tcGFyZSh5KSA9PT0gMTtcbiAgICB9LFxuICAgICdDb21wbGV4LCBDb21wbGV4JzogZnVuY3Rpb24gQ29tcGxleENvbXBsZXgoKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBvcmRlcmluZyByZWxhdGlvbiBpcyBkZWZpbmVkIGZvciBjb21wbGV4IG51bWJlcnMnKTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgaWYgKCF4LmVxdWFsQmFzZSh5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb21wYXJlIHVuaXRzIHdpdGggZGlmZmVyZW50IGJhc2UnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGxhcmdlcih4LnZhbHVlLCB5LnZhbHVlKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDcoeCwgeSwgbGFyZ2VyKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHksIHgsIGxhcmdlciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBsYXJnZXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBsYXJnZXIpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxhcmdlcihtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbGFyZ2VyKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBsYXJnZXIoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeCwgeSwgbGFyZ2VyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBsYXJnZXIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIGFueVNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgbGFyZ2VyLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGxhcmdlciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIGxhcmdlciwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdhbnksIEFycmF5JzogZnVuY3Rpb24gYW55QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgbGFyZ2VyLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGxhcmdlcjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVMYXJnZXIgPSBjcmVhdGVMYXJnZXI7XG52YXIgY3JlYXRlTGFyZ2VyTnVtYmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIFsndHlwZWQnLCAnY29uZmlnJ10sIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgdHlwZWQgPSBfcmVmMi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYyLmNvbmZpZztcbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHggPiB5ICYmICEoMCwgX251bWJlci5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlTGFyZ2VyTnVtYmVyID0gY3JlYXRlTGFyZ2VyTnVtYmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVMYXJnZXJFcU51bWJlciA9IGV4cG9ydHMuY3JlYXRlTGFyZ2VyRXEgPSB2b2lkIDA7XG5cbnZhciBfbmVhcmx5RXF1YWwgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYmlnbnVtYmVyL25lYXJseUVxdWFsXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2FsZ29yaXRobSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wM1wiKTtcblxudmFyIF9hbGdvcml0aG0yID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTA3XCIpO1xuXG52YXIgX2FsZ29yaXRobTMgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTJcIik7XG5cbnZhciBfYWxnb3JpdGhtNCA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIF9hbGdvcml0aG01ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEzXCIpO1xuXG52YXIgbmFtZSA9ICdsYXJnZXJFcSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnbWF0cml4JywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlTGFyZ2VyRXEgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNykoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHZhbHVlIHggaXMgbGFyZ2VyIG9yIGVxdWFsIHRvIHkuXG4gICAqXG4gICAqIFRoZSBmdW5jdGlvbiByZXR1cm5zIHRydWUgd2hlbiB4IGlzIGxhcmdlciB0aGFuIHkgb3IgdGhlIHJlbGF0aXZlXG4gICAqIGRpZmZlcmVuY2UgYmV0d2VlbiB4IGFuZCB5IGlzIHNtYWxsZXIgdGhhbiB0aGUgY29uZmlndXJlZCBlcHNpbG9uLiBUaGVcbiAgICogZnVuY3Rpb24gY2Fubm90IGJlIHVzZWQgdG8gY29tcGFyZSB2YWx1ZXMgc21hbGxlciB0aGFuIGFwcHJveGltYXRlbHkgMi4yMmUtMTYuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqIFN0cmluZ3MgYXJlIGNvbXBhcmVkIGJ5IHRoZWlyIG51bWVyaWNhbCB2YWx1ZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmxhcmdlckVxKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmxhcmdlcigyLCAxICsgMSkgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGgubGFyZ2VyRXEoMiwgMSArIDEpICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZXF1YWwsIHVuZXF1YWwsIHNtYWxsZXIsIHNtYWxsZXJFcSwgbGFyZ2VyLCBjb21wYXJlXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgYm9vbGVhbiB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeH0geCBGaXJzdCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgYm9vbGVhbiB8IFVuaXQgfCBzdHJpbmcgfCBBcnJheSB8IE1hdHJpeH0geSBTZWNvbmQgdmFsdWUgdG8gY29tcGFyZVxuICAgKiBAcmV0dXJuIHtib29sZWFuIHwgQXJyYXkgfCBNYXRyaXh9IFJldHVybnMgdHJ1ZSB3aGVuIHRoZSB4IGlzIGxhcmdlciBvciBlcXVhbCB0byB5LCBlbHNlIHJldHVybnMgZmFsc2VcbiAgICovXG5cbiAgdmFyIGxhcmdlckVxID0gdHlwZWQobmFtZSwge1xuICAgICdib29sZWFuLCBib29sZWFuJzogZnVuY3Rpb24gYm9vbGVhbkJvb2xlYW4oeCwgeSkge1xuICAgICAgcmV0dXJuIHggPj0geTtcbiAgICB9LFxuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geCA+PSB5IHx8ICgwLCBfbnVtYmVyLm5lYXJseUVxdWFsKSh4LCB5LCBjb25maWcuZXBzaWxvbik7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHguZ3RlKHkpIHx8ICgwLCBfbmVhcmx5RXF1YWwubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKTtcbiAgICB9LFxuICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiB4LmNvbXBhcmUoeSkgIT09IC0xO1xuICAgIH0sXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ05vIG9yZGVyaW5nIHJlbGF0aW9uIGlzIGRlZmluZWQgZm9yIGNvbXBsZXggbnVtYmVycycpO1xuICAgIH0sXG4gICAgJ1VuaXQsIFVuaXQnOiBmdW5jdGlvbiBVbml0VW5pdCh4LCB5KSB7XG4gICAgICBpZiAoIXguZXF1YWxCYXNlKHkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXBhcmUgdW5pdHMgd2l0aCBkaWZmZXJlbnQgYmFzZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbGFyZ2VyRXEoeC52YWx1ZSwgeS52YWx1ZSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA3KHgsIHksIGxhcmdlckVxKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHksIHgsIGxhcmdlckVxLCB0cnVlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTAzKHgsIHksIGxhcmdlckVxLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgbGFyZ2VyRXEpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBBcnJheSc6IGZ1bmN0aW9uIEFycmF5QXJyYXkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGxhcmdlckVxKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBsYXJnZXJFcShtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gbGFyZ2VyRXEoeCwgbWF0cml4KHkpKTtcbiAgICB9LFxuICAgICdTcGFyc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeCwgeSwgbGFyZ2VyRXEsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHgsIHksIGxhcmdlckVxLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHksIHgsIGxhcmdlckVxLCB0cnVlKTtcbiAgICB9LFxuICAgICdhbnksIERlbnNlTWF0cml4JzogZnVuY3Rpb24gYW55RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIGxhcmdlckVxLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgbGFyZ2VyRXEsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIGxhcmdlckVxLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGxhcmdlckVxO1xufSk7XG5leHBvcnRzLmNyZWF0ZUxhcmdlckVxID0gY3JlYXRlTGFyZ2VyRXE7XG52YXIgY3JlYXRlTGFyZ2VyRXFOdW1iZXIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgWyd0eXBlZCcsICdjb25maWcnXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZjIuY29uZmlnO1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geCA+PSB5IHx8ICgwLCBfbnVtYmVyLm5lYXJseUVxdWFsKSh4LCB5LCBjb25maWcuZXBzaWxvbik7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVMYXJnZXJFcU51bWJlciA9IGNyZWF0ZUxhcmdlckVxTnVtYmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTbWFsbGVyTnVtYmVyID0gZXhwb3J0cy5jcmVhdGVTbWFsbGVyID0gdm9pZCAwO1xuXG52YXIgX25lYXJseUVxdWFsID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9uZWFybHlFcXVhbFwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDNcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wN1wiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIG5hbWUgPSAnc21hbGxlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnbWF0cml4JywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlU21hbGxlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIG1hdHJpeCA9IF9yZWYubWF0cml4LFxuICAgICAgRGVuc2VNYXRyaXggPSBfcmVmLkRlbnNlTWF0cml4O1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobS5jcmVhdGVBbGdvcml0aG0wMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTA3ID0gKDAsIF9hbGdvcml0aG0yLmNyZWF0ZUFsZ29yaXRobTA3KSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEyID0gKDAsIF9hbGdvcml0aG0zLmNyZWF0ZUFsZ29yaXRobTEyKSh7XG4gICAgdHlwZWQ6IHR5cGVkLFxuICAgIERlbnNlTWF0cml4OiBEZW5zZU1hdHJpeFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTEzID0gKDAsIF9hbGdvcml0aG01LmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTQuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgdmFsdWUgeCBpcyBzbWFsbGVyIHRoYW4geS5cbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHggaXMgc21hbGxlciB0aGFuIHkgYW5kIHRoZSByZWxhdGl2ZVxuICAgKiBkaWZmZXJlbmNlIGJldHdlZW4geCBhbmQgeSBpcyBzbWFsbGVyIHRoYW4gdGhlIGNvbmZpZ3VyZWQgZXBzaWxvbi4gVGhlXG4gICAqIGZ1bmN0aW9uIGNhbm5vdCBiZSB1c2VkIHRvIGNvbXBhcmUgdmFsdWVzIHNtYWxsZXIgdGhhbiBhcHByb3hpbWF0ZWx5IDIuMjJlLTE2LlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKiBTdHJpbmdzIGFyZSBjb21wYXJlZCBieSB0aGVpciBudW1lcmljYWwgdmFsdWUuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zbWFsbGVyKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNtYWxsZXIoMiwgMykgICAgICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5zbWFsbGVyKDUsIDIgKiAyKSAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKlxuICAgKiAgICBjb25zdCBhID0gbWF0aC51bml0KCc1IGNtJylcbiAgICogICAgY29uc3QgYiA9IG1hdGgudW5pdCgnMiBpbmNoJylcbiAgICogICAgbWF0aC5zbWFsbGVyKGEsIGIpICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBlcXVhbCwgdW5lcXVhbCwgc21hbGxlckVxLCBzbWFsbGVyLCBzbWFsbGVyRXEsIGNvbXBhcmVcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIHggaXMgc21hbGxlciB0aGFuIHksIGVsc2UgcmV0dXJucyBmYWxzZVxuICAgKi9cblxuICB2YXIgc21hbGxlciA9IHR5cGVkKG5hbWUsIHtcbiAgICAnYm9vbGVhbiwgYm9vbGVhbic6IGZ1bmN0aW9uIGJvb2xlYW5Cb29sZWFuKHgsIHkpIHtcbiAgICAgIHJldHVybiB4IDwgeTtcbiAgICB9LFxuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geCA8IHkgJiYgISgwLCBfbnVtYmVyLm5lYXJseUVxdWFsKSh4LCB5LCBjb25maWcuZXBzaWxvbik7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHgubHQoeSkgJiYgISgwLCBfbmVhcmx5RXF1YWwubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKTtcbiAgICB9LFxuICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiB4LmNvbXBhcmUoeSkgPT09IC0xO1xuICAgIH0sXG4gICAgJ0NvbXBsZXgsIENvbXBsZXgnOiBmdW5jdGlvbiBDb21wbGV4Q29tcGxleCh4LCB5KSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdObyBvcmRlcmluZyByZWxhdGlvbiBpcyBkZWZpbmVkIGZvciBjb21wbGV4IG51bWJlcnMnKTtcbiAgICB9LFxuICAgICdVbml0LCBVbml0JzogZnVuY3Rpb24gVW5pdFVuaXQoeCwgeSkge1xuICAgICAgaWYgKCF4LmVxdWFsQmFzZSh5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb21wYXJlIHVuaXRzIHdpdGggZGlmZmVyZW50IGJhc2UnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNtYWxsZXIoeC52YWx1ZSwgeS52YWx1ZSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA3KHgsIHksIHNtYWxsZXIpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeSwgeCwgc21hbGxlciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBzbWFsbGVyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgc21hbGxlcik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gc21hbGxlcihtYXRyaXgoeCksIG1hdHJpeCh5KSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gc21hbGxlcihtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gc21hbGxlcih4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgYW55JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih4LCB5LCBzbWFsbGVyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBzbWFsbGVyLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHksIHgsIHNtYWxsZXIsIHRydWUpO1xuICAgIH0sXG4gICAgJ2FueSwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgc21hbGxlciwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIHNtYWxsZXIsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIHNtYWxsZXIsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc21hbGxlcjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTbWFsbGVyID0gY3JlYXRlU21hbGxlcjtcbnZhciBjcmVhdGVTbWFsbGVyTnVtYmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIFsndHlwZWQnLCAnY29uZmlnJ10sIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgdHlwZWQgPSBfcmVmMi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYyLmNvbmZpZztcbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBmdW5jdGlvbiBudW1iZXJOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHggPCB5ICYmICEoMCwgX251bWJlci5uZWFybHlFcXVhbCkoeCwgeSwgY29uZmlnLmVwc2lsb24pO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU21hbGxlck51bWJlciA9IGNyZWF0ZVNtYWxsZXJOdW1iZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNtYWxsZXJFcU51bWJlciA9IGV4cG9ydHMuY3JlYXRlU21hbGxlckVxID0gdm9pZCAwO1xuXG52YXIgX25lYXJseUVxdWFsID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9uZWFybHlFcXVhbFwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDNcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wN1wiKTtcblxudmFyIF9hbGdvcml0aG0zID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTEyXCIpO1xuXG52YXIgX2FsZ29yaXRobTQgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTRcIik7XG5cbnZhciBfYWxnb3JpdGhtNSA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIG5hbWUgPSAnc21hbGxlckVxJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdtYXRyaXgnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVTbWFsbGVyRXEgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNykoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHZhbHVlIHggaXMgc21hbGxlciBvciBlcXVhbCB0byB5LlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4geCBpcyBzbWFsbGVyIHRoYW4geSBvciB0aGUgcmVsYXRpdmVcbiAgICogZGlmZmVyZW5jZSBiZXR3ZWVuIHggYW5kIHkgaXMgc21hbGxlciB0aGFuIHRoZSBjb25maWd1cmVkIGVwc2lsb24uIFRoZVxuICAgKiBmdW5jdGlvbiBjYW5ub3QgYmUgdXNlZCB0byBjb21wYXJlIHZhbHVlcyBzbWFsbGVyIHRoYW4gYXBwcm94aW1hdGVseSAyLjIyZS0xNi5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICogU3RyaW5ncyBhcmUgY29tcGFyZWQgYnkgdGhlaXIgbnVtZXJpY2FsIHZhbHVlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc21hbGxlckVxKHgsIHkpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNtYWxsZXIoMSArIDIsIDMpICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguc21hbGxlckVxKDEgKyAyLCAzKSAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZXF1YWwsIHVuZXF1YWwsIHNtYWxsZXIsIGxhcmdlciwgbGFyZ2VyRXEsIGNvbXBhcmVcbiAgICpcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB4IEZpcnN0IHZhbHVlIHRvIGNvbXBhcmVcbiAgICogQHBhcmFtICB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFuIHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4fSB5IFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIHggaXMgc21hbGxlciB0aGFuIHksIGVsc2UgcmV0dXJucyBmYWxzZVxuICAgKi9cblxuICB2YXIgc21hbGxlckVxID0gdHlwZWQobmFtZSwge1xuICAgICdib29sZWFuLCBib29sZWFuJzogZnVuY3Rpb24gYm9vbGVhbkJvb2xlYW4oeCwgeSkge1xuICAgICAgcmV0dXJuIHggPD0geTtcbiAgICB9LFxuICAgICdudW1iZXIsIG51bWJlcic6IGZ1bmN0aW9uIG51bWJlck51bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4geCA8PSB5IHx8ICgwLCBfbnVtYmVyLm5lYXJseUVxdWFsKSh4LCB5LCBjb25maWcuZXBzaWxvbik7XG4gICAgfSxcbiAgICAnQmlnTnVtYmVyLCBCaWdOdW1iZXInOiBmdW5jdGlvbiBCaWdOdW1iZXJCaWdOdW1iZXIoeCwgeSkge1xuICAgICAgcmV0dXJuIHgubHRlKHkpIHx8ICgwLCBfbmVhcmx5RXF1YWwubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKTtcbiAgICB9LFxuICAgICdGcmFjdGlvbiwgRnJhY3Rpb24nOiBmdW5jdGlvbiBGcmFjdGlvbkZyYWN0aW9uKHgsIHkpIHtcbiAgICAgIHJldHVybiB4LmNvbXBhcmUoeSkgIT09IDE7XG4gICAgfSxcbiAgICAnQ29tcGxleCwgQ29tcGxleCc6IGZ1bmN0aW9uIENvbXBsZXhDb21wbGV4KCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTm8gb3JkZXJpbmcgcmVsYXRpb24gaXMgZGVmaW5lZCBmb3IgY29tcGxleCBudW1iZXJzJyk7XG4gICAgfSxcbiAgICAnVW5pdCwgVW5pdCc6IGZ1bmN0aW9uIFVuaXRVbml0KHgsIHkpIHtcbiAgICAgIGlmICgheC5lcXVhbEJhc2UoeSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29tcGFyZSB1bml0cyB3aXRoIGRpZmZlcmVudCBiYXNlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzbWFsbGVyRXEoeC52YWx1ZSwgeS52YWx1ZSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA3KHgsIHksIHNtYWxsZXJFcSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCBzbWFsbGVyRXEsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeCwgeSwgc21hbGxlckVxLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIERlbnNlTWF0cml4JzogZnVuY3Rpb24gRGVuc2VNYXRyaXhEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTMoeCwgeSwgc21hbGxlckVxKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBzbWFsbGVyRXEobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHNtYWxsZXJFcShtYXRyaXgoeCksIHkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgQXJyYXknOiBmdW5jdGlvbiBNYXRyaXhBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gc21hbGxlckVxKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHgsIHksIHNtYWxsZXJFcSwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBEZW5zZU1hdHJpeEFueSh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgc21hbGxlckVxLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnYW55LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBhbnlTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHksIHgsIHNtYWxsZXJFcSwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBzbWFsbGVyRXEsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBhbnknOiBmdW5jdGlvbiBBcnJheUFueSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBzbWFsbGVyRXEsIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIHNtYWxsZXJFcSwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzbWFsbGVyRXE7XG59KTtcbmV4cG9ydHMuY3JlYXRlU21hbGxlckVxID0gY3JlYXRlU21hbGxlckVxO1xudmFyIGNyZWF0ZVNtYWxsZXJFcU51bWJlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBbJ3R5cGVkJywgJ2NvbmZpZyddLCBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgdmFyIHR5cGVkID0gX3JlZjIudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmMi5jb25maWc7XG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiB4IDw9IHkgfHwgKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgsIHksIGNvbmZpZy5lcHNpbG9uKTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNtYWxsZXJFcU51bWJlciA9IGNyZWF0ZVNtYWxsZXJFcU51bWJlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVW5lcXVhbE51bWJlciA9IGV4cG9ydHMuY3JlYXRlVW5lcXVhbCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAzXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDdcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xMlwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBuYW1lID0gJ3VuZXF1YWwnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ2VxdWFsU2NhbGFyJywgJ21hdHJpeCcsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZVVuZXF1YWwgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBtYXRyaXggPSBfcmVmLm1hdHJpeCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAzID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wNyA9ICgwLCBfYWxnb3JpdGhtMi5jcmVhdGVBbGdvcml0aG0wNykoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG00LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHR3byB2YWx1ZXMgYXJlIHVuZXF1YWwuXG4gICAqXG4gICAqIFRoZSBmdW5jdGlvbiB0ZXN0cyB3aGV0aGVyIHRoZSByZWxhdGl2ZSBkaWZmZXJlbmNlIGJldHdlZW4geCBhbmQgeSBpc1xuICAgKiBsYXJnZXIgdGhhbiB0aGUgY29uZmlndXJlZCBlcHNpbG9uLiBUaGUgZnVuY3Rpb24gY2Fubm90IGJlIHVzZWQgdG8gY29tcGFyZVxuICAgKiB2YWx1ZXMgc21hbGxlciB0aGFuIGFwcHJveGltYXRlbHkgMi4yMmUtMTYuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqIEluIGNhc2Ugb2YgY29tcGxleCBudW1iZXJzLCB4LnJlIG11c3QgdW5lcXVhbCB5LnJlLCBvciB4LmltIG11c3QgdW5lcXVhbCB5LmltLlxuICAgKiBTdHJpbmdzIGFyZSBjb21wYXJlZCBieSB0aGVpciBudW1lcmljYWwgdmFsdWUuXG4gICAqXG4gICAqIFZhbHVlcyBgbnVsbGAgYW5kIGB1bmRlZmluZWRgIGFyZSBjb21wYXJlZCBzdHJpY3RseSwgdGh1cyBgbnVsbGAgaXMgdW5lcXVhbFxuICAgKiB3aXRoIGV2ZXJ5dGhpbmcgZXhjZXB0IGBudWxsYCwgYW5kIGB1bmRlZmluZWRgIGlzIHVuZXF1YWwgd2l0aCBldmVyeXRoaW5nXG4gICAqIGV4Y2VwdCBgdW5kZWZpbmVkYC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnVuZXF1YWwoeCwgeSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGgudW5lcXVhbCgyICsgMiwgMykgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGgudW5lcXVhbCgyICsgMiwgNCkgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKlxuICAgKiAgICBjb25zdCBhID0gbWF0aC51bml0KCc1MCBjbScpXG4gICAqICAgIGNvbnN0IGIgPSBtYXRoLnVuaXQoJzUgbScpXG4gICAqICAgIG1hdGgudW5lcXVhbChhLCBiKSAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKlxuICAgKiAgICBjb25zdCBjID0gWzIsIDUsIDFdXG4gICAqICAgIGNvbnN0IGQgPSBbMiwgNywgMV1cbiAgICpcbiAgICogICAgbWF0aC51bmVxdWFsKGMsIGQpICAgICAgICAgICAvLyByZXR1cm5zIFtmYWxzZSwgdHJ1ZSwgZmFsc2VdXG4gICAqICAgIG1hdGguZGVlcEVxdWFsKGMsIGQpICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKlxuICAgKiAgICBtYXRoLnVuZXF1YWwoMCwgbnVsbCkgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgZXF1YWwsIGRlZXBFcXVhbCwgc21hbGxlciwgc21hbGxlckVxLCBsYXJnZXIsIGxhcmdlckVxLCBjb21wYXJlXG4gICAqXG4gICAqIEBwYXJhbSAge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgYm9vbGVhbiB8IENvbXBsZXggfCBVbml0IHwgc3RyaW5nIHwgQXJyYXkgfCBNYXRyaXggfCB1bmRlZmluZWR9IHggRmlyc3QgdmFsdWUgdG8gY29tcGFyZVxuICAgKiBAcGFyYW0gIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW4gfCBDb21wbGV4IHwgVW5pdCB8IHN0cmluZyB8IEFycmF5IHwgTWF0cml4IHwgdW5kZWZpbmVkfSB5IFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gICAqIEByZXR1cm4ge2Jvb2xlYW4gfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyB0cnVlIHdoZW4gdGhlIGNvbXBhcmVkIHZhbHVlcyBhcmUgdW5lcXVhbCwgZWxzZSByZXR1cm5zIGZhbHNlXG4gICAqL1xuXG4gIHZhciB1bmVxdWFsID0gdHlwZWQoJ3VuZXF1YWwnLCB7XG4gICAgJ2FueSwgYW55JzogZnVuY3Rpb24gYW55QW55KHgsIHkpIHtcbiAgICAgIC8vIHN0cmljdCBlcXVhbGl0eSBmb3IgbnVsbCBhbmQgdW5kZWZpbmVkP1xuICAgICAgaWYgKHggPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHkgIT09IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh5ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB4ICE9PSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAoeCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB5ICE9PSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICh5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHggIT09IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF91bmVxdWFsKHgsIHkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gU3BhcnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wNyh4LCB5LCBfdW5lcXVhbCk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh5LCB4LCBfdW5lcXVhbCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0wMyh4LCB5LCBfdW5lcXVhbCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIERlbnNlTWF0cml4RGVuc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEzKHgsIHksIF91bmVxdWFsKTtcbiAgICB9LFxuICAgICdBcnJheSwgQXJyYXknOiBmdW5jdGlvbiBBcnJheUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiB1bmVxdWFsKG1hdHJpeCh4KSwgbWF0cml4KHkpKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnQXJyYXksIE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiB1bmVxdWFsKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiB1bmVxdWFsKHgsIG1hdHJpeCh5KSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBhbnknOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhBbnkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTEyKHgsIHksIF91bmVxdWFsLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnRGVuc2VNYXRyaXgsIGFueSc6IGZ1bmN0aW9uIERlbnNlTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh4LCB5LCBfdW5lcXVhbCwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ2FueSwgU3BhcnNlTWF0cml4JzogZnVuY3Rpb24gYW55U3BhcnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMih5LCB4LCBfdW5lcXVhbCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnYW55LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIGFueURlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xNCh5LCB4LCBfdW5lcXVhbCwgdHJ1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXksIGFueSc6IGZ1bmN0aW9uIEFycmF5QW55KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeCksIHksIF91bmVxdWFsLCBmYWxzZSkudmFsdWVPZigpO1xuICAgIH0sXG4gICAgJ2FueSwgQXJyYXknOiBmdW5jdGlvbiBhbnlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHkpLCB4LCBfdW5lcXVhbCwgdHJ1ZSkudmFsdWVPZigpO1xuICAgIH1cbiAgfSk7XG5cbiAgZnVuY3Rpb24gX3VuZXF1YWwoeCwgeSkge1xuICAgIHJldHVybiAhZXF1YWxTY2FsYXIoeCwgeSk7XG4gIH1cblxuICByZXR1cm4gdW5lcXVhbDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbmVxdWFsID0gY3JlYXRlVW5lcXVhbDtcbnZhciBjcmVhdGVVbmVxdWFsTnVtYmVyID0gKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIFsndHlwZWQnLCAnZXF1YWxTY2FsYXInXSwgZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYyLnR5cGVkLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmMi5lcXVhbFNjYWxhcjtcbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnYW55LCBhbnknOiBmdW5jdGlvbiBhbnlBbnkoeCwgeSkge1xuICAgICAgLy8gc3RyaWN0IGVxdWFsaXR5IGZvciBudWxsIGFuZCB1bmRlZmluZWQ/XG4gICAgICBpZiAoeCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4geSAhPT0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHkgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHggIT09IG51bGw7XG4gICAgICB9XG5cbiAgICAgIGlmICh4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHkgIT09IHVuZGVmaW5lZDtcbiAgICAgIH1cblxuICAgICAgaWYgKHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4geCAhPT0gdW5kZWZpbmVkO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gIWVxdWFsU2NhbGFyKHgsIHkpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlVW5lcXVhbE51bWJlciA9IGNyZWF0ZVVuZXF1YWxOdW1iZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNldENhcnRlc2lhbiA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3NldENhcnRlc2lhbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdzaXplJywgJ3N1YnNldCcsICdjb21wYXJlTmF0dXJhbCcsICdJbmRleCcsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZVNldENhcnRlc2lhbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBzaXplID0gX3JlZi5zaXplLFxuICAgICAgc3Vic2V0ID0gX3JlZi5zdWJzZXQsXG4gICAgICBjb21wYXJlTmF0dXJhbCA9IF9yZWYuY29tcGFyZU5hdHVyYWwsXG4gICAgICBJbmRleCA9IF9yZWYuSW5kZXgsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgY2FydGVzaWFuIHByb2R1Y3Qgb2YgdHdvIChtdWx0aSlzZXRzLlxuICAgKiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2V0Q2FydGVzaWFuKHNldDEsIHNldDIpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNldENhcnRlc2lhbihbMSwgMl0sIFszLCA0XSkgICAgICAgIC8vIHJldHVybnMgW1sxLCAzXSwgWzEsIDRdLCBbMiwgM10sIFsyLCA0XV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNldFVuaW9uLCBzZXRJbnRlcnNlY3QsIHNldERpZmZlcmVuY2UsIHNldFBvd2Vyc2V0XG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGExICBBIChtdWx0aSlzZXRcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gICAgYTIgIEEgKG11bHRpKXNldFxuICAgKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gICAgVGhlIGNhcnRlc2lhbiBwcm9kdWN0IG9mIHR3byAobXVsdGkpc2V0c1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXkgfCBNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXhBcnJheU1hdHJpeChhMSwgYTIpIHtcbiAgICAgIHZhciByZXN1bHQgPSBbXTtcblxuICAgICAgaWYgKHN1YnNldChzaXplKGExKSwgbmV3IEluZGV4KDApKSAhPT0gMCAmJiBzdWJzZXQoc2l6ZShhMiksIG5ldyBJbmRleCgwKSkgIT09IDApIHtcbiAgICAgICAgLy8gaWYgYW55IG9mIHRoZW0gaXMgZW1wdHksIHJldHVybiBlbXB0eVxuICAgICAgICB2YXIgYjEgPSAoMCwgX2FycmF5LmZsYXR0ZW4pKEFycmF5LmlzQXJyYXkoYTEpID8gYTEgOiBhMS50b0FycmF5KCkpLnNvcnQoY29tcGFyZU5hdHVyYWwpO1xuICAgICAgICB2YXIgYjIgPSAoMCwgX2FycmF5LmZsYXR0ZW4pKEFycmF5LmlzQXJyYXkoYTIpID8gYTIgOiBhMi50b0FycmF5KCkpLnNvcnQoY29tcGFyZU5hdHVyYWwpO1xuICAgICAgICByZXN1bHQgPSBbXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIxLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBiMi5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goW2IxW2ldLCBiMltqXV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyByZXR1cm4gYW4gYXJyYXksIGlmIGJvdGggaW5wdXRzIHdlcmUgYXJyYXlzXG5cblxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYTEpICYmIEFycmF5LmlzQXJyYXkoYTIpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9IC8vIHJldHVybiBhIG1hdHJpeCBvdGhlcndpc2VcblxuXG4gICAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KHJlc3VsdCk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXRDYXJ0ZXNpYW4gPSBjcmVhdGVTZXRDYXJ0ZXNpYW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNldERpZmZlcmVuY2UgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzZXREaWZmZXJlbmNlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NpemUnLCAnc3Vic2V0JywgJ2NvbXBhcmVOYXR1cmFsJywgJ0luZGV4JywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlU2V0RGlmZmVyZW5jZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBzaXplID0gX3JlZi5zaXplLFxuICAgICAgc3Vic2V0ID0gX3JlZi5zdWJzZXQsXG4gICAgICBjb21wYXJlTmF0dXJhbCA9IF9yZWYuY29tcGFyZU5hdHVyYWwsXG4gICAgICBJbmRleCA9IF9yZWYuSW5kZXgsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgZGlmZmVyZW5jZSBvZiB0d28gKG11bHRpKXNldHM6IGV2ZXJ5IGVsZW1lbnQgb2Ygc2V0MSwgdGhhdCBpcyBub3QgdGhlIGVsZW1lbnQgb2Ygc2V0Mi5cbiAgICogTXVsdGktZGltZW5zaW9uIGFycmF5cyB3aWxsIGJlIGNvbnZlcnRlZCB0byBzaW5nbGUtZGltZW5zaW9uIGFycmF5cyBiZWZvcmUgdGhlIG9wZXJhdGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNldERpZmZlcmVuY2Uoc2V0MSwgc2V0MilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc2V0RGlmZmVyZW5jZShbMSwgMiwgMywgNF0sIFszLCA0LCA1LCA2XSkgICAgICAgICAgICAvLyByZXR1cm5zIFsxLCAyXVxuICAgKiAgICBtYXRoLnNldERpZmZlcmVuY2UoW1sxLCAyXSwgWzMsIDRdXSwgW1szLCA0XSwgWzUsIDZdXSkgICAgLy8gcmV0dXJucyBbMSwgMl1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNldFVuaW9uLCBzZXRJbnRlcnNlY3QsIHNldFN5bURpZmZlcmVuY2VcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gICAgYTEgIEEgKG11bHRpKXNldFxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhMiAgQSAobXVsdGkpc2V0XG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgICBUaGUgZGlmZmVyZW5jZSBvZiB0d28gKG11bHRpKXNldHNcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5IHwgTWF0cml4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4QXJyYXlNYXRyaXgoYTEsIGEyKSB7XG4gICAgICB2YXIgcmVzdWx0O1xuXG4gICAgICBpZiAoc3Vic2V0KHNpemUoYTEpLCBuZXcgSW5kZXgoMCkpID09PSAwKSB7XG4gICAgICAgIC8vIGVtcHR5LWFueXRoaW5nPWVtcHR5XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgfSBlbHNlIGlmIChzdWJzZXQoc2l6ZShhMiksIG5ldyBJbmRleCgwKSkgPT09IDApIHtcbiAgICAgICAgLy8gYW55dGhpbmctZW1wdHk9YW55dGhpbmdcbiAgICAgICAgcmV0dXJuICgwLCBfYXJyYXkuZmxhdHRlbikoYTEudG9BcnJheSgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBiMSA9ICgwLCBfYXJyYXkuaWRlbnRpZnkpKCgwLCBfYXJyYXkuZmxhdHRlbikoQXJyYXkuaXNBcnJheShhMSkgPyBhMSA6IGExLnRvQXJyYXkoKSkuc29ydChjb21wYXJlTmF0dXJhbCkpO1xuICAgICAgICB2YXIgYjIgPSAoMCwgX2FycmF5LmlkZW50aWZ5KSgoMCwgX2FycmF5LmZsYXR0ZW4pKEFycmF5LmlzQXJyYXkoYTIpID8gYTIgOiBhMi50b0FycmF5KCkpLnNvcnQoY29tcGFyZU5hdHVyYWwpKTtcbiAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgIHZhciBpbmIyO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYjEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpbmIyID0gZmFsc2U7XG5cbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGIyLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAoY29tcGFyZU5hdHVyYWwoYjFbaV0udmFsdWUsIGIyW2pdLnZhbHVlKSA9PT0gMCAmJiBiMVtpXS5pZGVudGlmaWVyID09PSBiMltqXS5pZGVudGlmaWVyKSB7XG4gICAgICAgICAgICAgIC8vIHRoZSBpZGVudGlmaWVyIGlzIGFsd2F5cyBhIGRlY2ltYWwgaW50XG4gICAgICAgICAgICAgIGluYjIgPSB0cnVlO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIWluYjIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGIxW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gcmV0dXJuIGFuIGFycmF5LCBpZiBib3RoIGlucHV0cyB3ZXJlIGFycmF5c1xuXG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGExKSAmJiBBcnJheS5pc0FycmF5KGEyKSkge1xuICAgICAgICByZXR1cm4gKDAsIF9hcnJheS5nZW5lcmFsaXplKShyZXN1bHQpO1xuICAgICAgfSAvLyByZXR1cm4gYSBtYXRyaXggb3RoZXJ3aXNlXG5cblxuICAgICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCgoMCwgX2FycmF5LmdlbmVyYWxpemUpKHJlc3VsdCkpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0RGlmZmVyZW5jZSA9IGNyZWF0ZVNldERpZmZlcmVuY2U7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNldERpc3RpbmN0ID0gdm9pZCAwO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc2V0RGlzdGluY3QnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc2l6ZScsICdzdWJzZXQnLCAnY29tcGFyZU5hdHVyYWwnLCAnSW5kZXgnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVTZXREaXN0aW5jdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBzaXplID0gX3JlZi5zaXplLFxuICAgICAgc3Vic2V0ID0gX3JlZi5zdWJzZXQsXG4gICAgICBjb21wYXJlTmF0dXJhbCA9IF9yZWYuY29tcGFyZU5hdHVyYWwsXG4gICAgICBJbmRleCA9IF9yZWYuSW5kZXgsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG5cbiAgLyoqXG4gICAqIENvbGxlY3QgdGhlIGRpc3RpbmN0IGVsZW1lbnRzIG9mIGEgbXVsdGlzZXQuXG4gICAqIEEgbXVsdGktZGltZW5zaW9uIGFycmF5IHdpbGwgYmUgY29udmVydGVkIHRvIGEgc2luZ2xlLWRpbWVuc2lvbiBhcnJheSBiZWZvcmUgdGhlIG9wZXJhdGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNldERpc3RpbmN0KHNldClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc2V0RGlzdGluY3QoWzEsIDEsIDEsIDIsIDIsIDNdKSAgICAgICAgLy8gcmV0dXJucyBbMSwgMiwgM11cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNldE11bHRpcGxpY2l0eVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhICBBIG11bHRpc2V0XG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgICBBIHNldCBjb250YWluaW5nIHRoZSBkaXN0aW5jIGVsZW1lbnRzIG9mIHRoZSBtdWx0aXNldFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChhKSB7XG4gICAgICB2YXIgcmVzdWx0O1xuXG4gICAgICBpZiAoc3Vic2V0KHNpemUoYSksIG5ldyBJbmRleCgwKSkgPT09IDApIHtcbiAgICAgICAgLy8gaWYgZW1wdHksIHJldHVybiBlbXB0eVxuICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBiID0gKDAsIF9hcnJheS5mbGF0dGVuKShBcnJheS5pc0FycmF5KGEpID8gYSA6IGEudG9BcnJheSgpKS5zb3J0KGNvbXBhcmVOYXR1cmFsKTtcbiAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICAgIHJlc3VsdC5wdXNoKGJbMF0pO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChjb21wYXJlTmF0dXJhbChiW2ldLCBiW2kgLSAxXSkgIT09IDApIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKGJbaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyByZXR1cm4gYW4gYXJyYXksIGlmIHRoZSBpbnB1dCB3YXMgYW4gYXJyYXlcblxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSAvLyByZXR1cm4gYSBtYXRyaXggb3RoZXJ3aXNlXG5cblxuICAgICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeChyZXN1bHQpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0RGlzdGluY3QgPSBjcmVhdGVTZXREaXN0aW5jdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0SW50ZXJzZWN0ID0gdm9pZCAwO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc2V0SW50ZXJzZWN0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NpemUnLCAnc3Vic2V0JywgJ2NvbXBhcmVOYXR1cmFsJywgJ0luZGV4JywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlU2V0SW50ZXJzZWN0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIGNvbXBhcmVOYXR1cmFsID0gX3JlZi5jb21wYXJlTmF0dXJhbCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcblxuICAvKipcbiAgICogQ3JlYXRlIHRoZSBpbnRlcnNlY3Rpb24gb2YgdHdvIChtdWx0aSlzZXRzLlxuICAgKiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2V0SW50ZXJzZWN0KHNldDEsIHNldDIpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNldEludGVyc2VjdChbMSwgMiwgMywgNF0sIFszLCA0LCA1LCA2XSkgICAgICAgICAgICAvLyByZXR1cm5zIFszLCA0XVxuICAgKiAgICBtYXRoLnNldEludGVyc2VjdChbWzEsIDJdLCBbMywgNF1dLCBbWzMsIDRdLCBbNSwgNl1dKSAgICAvLyByZXR1cm5zIFszLCA0XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2V0VW5pb24sIHNldERpZmZlcmVuY2VcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gICAgYTEgIEEgKG11bHRpKXNldFxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhMiAgQSAobXVsdGkpc2V0XG4gICAqIEByZXR1cm4ge0FycmF5IHwgTWF0cml4fSAgICBUaGUgaW50ZXJzZWN0aW9uIG9mIHR3byAobXVsdGkpc2V0c1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnQXJyYXkgfCBNYXRyaXgsIEFycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXhBcnJheU1hdHJpeChhMSwgYTIpIHtcbiAgICAgIHZhciByZXN1bHQ7XG5cbiAgICAgIGlmIChzdWJzZXQoc2l6ZShhMSksIG5ldyBJbmRleCgwKSkgPT09IDAgfHwgc3Vic2V0KHNpemUoYTIpLCBuZXcgSW5kZXgoMCkpID09PSAwKSB7XG4gICAgICAgIC8vIG9mIGFueSBvZiB0aGVtIGlzIGVtcHR5LCByZXR1cm4gZW1wdHlcbiAgICAgICAgcmVzdWx0ID0gW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYjEgPSAoMCwgX2FycmF5LmlkZW50aWZ5KSgoMCwgX2FycmF5LmZsYXR0ZW4pKEFycmF5LmlzQXJyYXkoYTEpID8gYTEgOiBhMS50b0FycmF5KCkpLnNvcnQoY29tcGFyZU5hdHVyYWwpKTtcbiAgICAgICAgdmFyIGIyID0gKDAsIF9hcnJheS5pZGVudGlmeSkoKDAsIF9hcnJheS5mbGF0dGVuKShBcnJheS5pc0FycmF5KGEyKSA/IGEyIDogYTIudG9BcnJheSgpKS5zb3J0KGNvbXBhcmVOYXR1cmFsKSk7XG4gICAgICAgIHJlc3VsdCA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYjEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGIyLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAoY29tcGFyZU5hdHVyYWwoYjFbaV0udmFsdWUsIGIyW2pdLnZhbHVlKSA9PT0gMCAmJiBiMVtpXS5pZGVudGlmaWVyID09PSBiMltqXS5pZGVudGlmaWVyKSB7XG4gICAgICAgICAgICAgIC8vIHRoZSBpZGVudGlmaWVyIGlzIGFsd2F5cyBhIGRlY2ltYWwgaW50XG4gICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGIxW2ldKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIHJldHVybiBhbiBhcnJheSwgaWYgYm90aCBpbnB1dHMgd2VyZSBhcnJheXNcblxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShhMSkgJiYgQXJyYXkuaXNBcnJheShhMikpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfYXJyYXkuZ2VuZXJhbGl6ZSkocmVzdWx0KTtcbiAgICAgIH0gLy8gcmV0dXJuIGEgbWF0cml4IG90aGVyd2lzZVxuXG5cbiAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoKDAsIF9hcnJheS5nZW5lcmFsaXplKShyZXN1bHQpKTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNldEludGVyc2VjdCA9IGNyZWF0ZVNldEludGVyc2VjdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0SXNTdWJzZXQgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzZXRJc1N1YnNldCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdzaXplJywgJ3N1YnNldCcsICdjb21wYXJlTmF0dXJhbCcsICdJbmRleCddO1xudmFyIGNyZWF0ZVNldElzU3Vic2V0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIGNvbXBhcmVOYXR1cmFsID0gX3JlZi5jb21wYXJlTmF0dXJhbCxcbiAgICAgIEluZGV4ID0gX3JlZi5JbmRleDtcblxuICAvKipcbiAgICogQ2hlY2sgd2hldGhlciBhIChtdWx0aSlzZXQgaXMgYSBzdWJzZXQgb2YgYW5vdGhlciAobXVsdGkpc2V0LiAoRXZlcnkgZWxlbWVudCBvZiBzZXQxIGlzIHRoZSBlbGVtZW50IG9mIHNldDIuKVxuICAgKiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2V0SXNTdWJzZXQoc2V0MSwgc2V0MilcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc2V0SXNTdWJzZXQoWzEsIDJdLCBbMywgNCwgNSwgNl0pICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguc2V0SXNTdWJzZXQoWzMsIDRdLCBbMywgNCwgNSwgNl0pICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNldFVuaW9uLCBzZXRJbnRlcnNlY3QsIHNldERpZmZlcmVuY2VcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gICAgYTEgIEEgKG11bHRpKXNldFxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhMiAgQSAobXVsdGkpc2V0XG4gICAqIEByZXR1cm4ge2Jvb2xlYW59ICAgICAgICAgICAgdHJ1ZSB8IGZhbHNlXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeEFycmF5TWF0cml4KGExLCBhMikge1xuICAgICAgaWYgKHN1YnNldChzaXplKGExKSwgbmV3IEluZGV4KDApKSA9PT0gMCkge1xuICAgICAgICAvLyBlbXB0eSBpcyBhIHN1YnNldCBvZiBhbnl0aGluZ1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoc3Vic2V0KHNpemUoYTIpLCBuZXcgSW5kZXgoMCkpID09PSAwKSB7XG4gICAgICAgIC8vIGFueXRoaW5nIGlzIG5vdCBhIHN1YnNldCBvZiBlbXB0eVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHZhciBiMSA9ICgwLCBfYXJyYXkuaWRlbnRpZnkpKCgwLCBfYXJyYXkuZmxhdHRlbikoQXJyYXkuaXNBcnJheShhMSkgPyBhMSA6IGExLnRvQXJyYXkoKSkuc29ydChjb21wYXJlTmF0dXJhbCkpO1xuICAgICAgdmFyIGIyID0gKDAsIF9hcnJheS5pZGVudGlmeSkoKDAsIF9hcnJheS5mbGF0dGVuKShBcnJheS5pc0FycmF5KGEyKSA/IGEyIDogYTIudG9BcnJheSgpKS5zb3J0KGNvbXBhcmVOYXR1cmFsKSk7XG4gICAgICB2YXIgaW5iMjtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiMS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpbmIyID0gZmFsc2U7XG5cbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBiMi5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGlmIChjb21wYXJlTmF0dXJhbChiMVtpXS52YWx1ZSwgYjJbal0udmFsdWUpID09PSAwICYmIGIxW2ldLmlkZW50aWZpZXIgPT09IGIyW2pdLmlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIC8vIHRoZSBpZGVudGlmaWVyIGlzIGFsd2F5cyBhIGRlY2ltYWwgaW50XG4gICAgICAgICAgICBpbmIyID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpbmIyID09PSBmYWxzZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNldElzU3Vic2V0ID0gY3JlYXRlU2V0SXNTdWJzZXQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNldE11bHRpcGxpY2l0eSA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3NldE11bHRpcGxpY2l0eSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdzaXplJywgJ3N1YnNldCcsICdjb21wYXJlTmF0dXJhbCcsICdJbmRleCddO1xudmFyIGNyZWF0ZVNldE11bHRpcGxpY2l0eSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBzaXplID0gX3JlZi5zaXplLFxuICAgICAgc3Vic2V0ID0gX3JlZi5zdWJzZXQsXG4gICAgICBjb21wYXJlTmF0dXJhbCA9IF9yZWYuY29tcGFyZU5hdHVyYWwsXG4gICAgICBJbmRleCA9IF9yZWYuSW5kZXg7XG5cbiAgLyoqXG4gICAqIENvdW50IHRoZSBtdWx0aXBsaWNpdHkgb2YgYW4gZWxlbWVudCBpbiBhIG11bHRpc2V0LlxuICAgKiBBIG11bHRpLWRpbWVuc2lvbiBhcnJheSB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHNpbmdsZS1kaW1lbnNpb24gYXJyYXkgYmVmb3JlIHRoZSBvcGVyYXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zZXRNdWx0aXBsaWNpdHkoZWxlbWVudCwgc2V0KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zZXRNdWx0aXBsaWNpdHkoMSwgWzEsIDIsIDIsIDRdKSAgICAvLyByZXR1cm5zIDFcbiAgICogICAgbWF0aC5zZXRNdWx0aXBsaWNpdHkoMiwgWzEsIDIsIDIsIDRdKSAgICAvLyByZXR1cm5zIDJcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNldERpc3RpbmN0LCBzZXRTaXplXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4fSBlICBBbiBlbGVtZW50IGluIHRoZSBtdWx0aXNldFxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICAgYSAgQSBtdWx0aXNldFxuICAgKiBAcmV0dXJuIHtudW1iZXJ9ICAgICAgICAgICAgVGhlIG51bWJlciBvZiBob3cgbWFueSB0aW1lcyB0aGUgbXVsdGlzZXQgY29udGFpbnMgdGhlIGVsZW1lbnRcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgQ29tcGxleCwgQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJGcmFjdGlvbkNvbXBsZXhBcnJheU1hdHJpeChlLCBhKSB7XG4gICAgICBpZiAoc3Vic2V0KHNpemUoYSksIG5ldyBJbmRleCgwKSkgPT09IDApIHtcbiAgICAgICAgLy8gaWYgZW1wdHksIHJldHVybiAwXG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuXG4gICAgICB2YXIgYiA9ICgwLCBfYXJyYXkuZmxhdHRlbikoQXJyYXkuaXNBcnJheShhKSA/IGEgOiBhLnRvQXJyYXkoKSk7XG4gICAgICB2YXIgY291bnQgPSAwO1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGNvbXBhcmVOYXR1cmFsKGJbaV0sIGUpID09PSAwKSB7XG4gICAgICAgICAgY291bnQrKztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gY291bnQ7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXRNdWx0aXBsaWNpdHkgPSBjcmVhdGVTZXRNdWx0aXBsaWNpdHk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNldFBvd2Vyc2V0ID0gdm9pZCAwO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc2V0UG93ZXJzZXQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnc2l6ZScsICdzdWJzZXQnLCAnY29tcGFyZU5hdHVyYWwnLCAnSW5kZXgnXTtcbnZhciBjcmVhdGVTZXRQb3dlcnNldCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBzaXplID0gX3JlZi5zaXplLFxuICAgICAgc3Vic2V0ID0gX3JlZi5zdWJzZXQsXG4gICAgICBjb21wYXJlTmF0dXJhbCA9IF9yZWYuY29tcGFyZU5hdHVyYWwsXG4gICAgICBJbmRleCA9IF9yZWYuSW5kZXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgcG93ZXJzZXQgb2YgYSAobXVsdGkpc2V0LiAoVGhlIHBvd2Vyc2V0IGNvbnRhaW5zIHZlcnkgcG9zc2libGUgc3Vic2V0cyBvZiBhIChtdWx0aSlzZXQuKVxuICAgKiBBIG11bHRpLWRpbWVuc2lvbiBhcnJheSB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHNpbmdsZS1kaW1lbnNpb24gYXJyYXkgYmVmb3JlIHRoZSBvcGVyYXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zZXRQb3dlcnNldChzZXQpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNldFBvd2Vyc2V0KFsxLCAyLCAzXSkgICAgICAgIC8vIHJldHVybnMgW1tdLCBbMV0sIFsyXSwgWzNdLCBbMSwgMl0sIFsxLCAzXSwgWzIsIDNdLCBbMSwgMiwgM11dXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzZXRDYXJ0ZXNpYW5cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gICAgYSAgQSAobXVsdGkpc2V0XG4gICAqIEByZXR1cm4ge0FycmF5fSAgICBUaGUgcG93ZXJzZXQgb2YgdGhlIChtdWx0aSlzZXRcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoYSkge1xuICAgICAgaWYgKHN1YnNldChzaXplKGEpLCBuZXcgSW5kZXgoMCkpID09PSAwKSB7XG4gICAgICAgIC8vIGlmIGVtcHR5LCByZXR1cm4gZW1wdHlcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgfVxuXG4gICAgICB2YXIgYiA9ICgwLCBfYXJyYXkuZmxhdHRlbikoQXJyYXkuaXNBcnJheShhKSA/IGEgOiBhLnRvQXJyYXkoKSkuc29ydChjb21wYXJlTmF0dXJhbCk7XG4gICAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgICB2YXIgbnVtYmVyID0gMDtcblxuICAgICAgd2hpbGUgKG51bWJlci50b1N0cmluZygyKS5sZW5ndGggPD0gYi5sZW5ndGgpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goX3N1YnNldChiLCBudW1iZXIudG9TdHJpbmcoMikuc3BsaXQoJycpLnJldmVyc2UoKSkpO1xuICAgICAgICBudW1iZXIrKztcbiAgICAgIH0gLy8gY2FuIG5vdCByZXR1cm4gYSBtYXRyaXgsIGJlY2F1c2Ugb2YgdGhlIGRpZmZlcmVudCBzaXplIG9mIHRoZSBzdWJhcnJheXNcblxuXG4gICAgICByZXR1cm4gX3NvcnQocmVzdWx0KTtcbiAgICB9XG4gIH0pOyAvLyBjcmVhdGUgc3Vic2V0XG5cbiAgZnVuY3Rpb24gX3N1YnNldChhcnJheSwgYml0YXJyYXkpIHtcbiAgICB2YXIgcmVzdWx0ID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJpdGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYml0YXJyYXlbaV0gPT09ICcxJykge1xuICAgICAgICByZXN1bHQucHVzaChhcnJheVtpXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSAvLyBzb3J0IHN1YnNlc3RzIGJ5IGxlbmd0aFxuXG5cbiAgZnVuY3Rpb24gX3NvcnQoYXJyYXkpIHtcbiAgICB2YXIgdGVtcCA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IGFycmF5Lmxlbmd0aCAtIDE7IGkgPiAwOyBpLS0pIHtcbiAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgaTsgaisrKSB7XG4gICAgICAgIGlmIChhcnJheVtqXS5sZW5ndGggPiBhcnJheVtqICsgMV0ubGVuZ3RoKSB7XG4gICAgICAgICAgdGVtcCA9IGFycmF5W2pdO1xuICAgICAgICAgIGFycmF5W2pdID0gYXJyYXlbaiArIDFdO1xuICAgICAgICAgIGFycmF5W2ogKyAxXSA9IHRlbXA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXRQb3dlcnNldCA9IGNyZWF0ZVNldFBvd2Vyc2V0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXRTaXplID0gdm9pZCAwO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnc2V0U2l6ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb21wYXJlTmF0dXJhbCddO1xudmFyIGNyZWF0ZVNldFNpemUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgY29tcGFyZU5hdHVyYWwgPSBfcmVmLmNvbXBhcmVOYXR1cmFsO1xuXG4gIC8qKlxuICAgKiBDb3VudCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9mIGEgKG11bHRpKXNldC4gV2hlbiBhIHNlY29uZCBwYXJhbWV0ZXIgaXMgJ3RydWUnLCBjb3VudCBvbmx5IHRoZSB1bmlxdWUgdmFsdWVzLlxuICAgKiBBIG11bHRpLWRpbWVuc2lvbiBhcnJheSB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIHNpbmdsZS1kaW1lbnNpb24gYXJyYXkgYmVmb3JlIHRoZSBvcGVyYXRpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zZXRTaXplKHNldClcbiAgICogICAgbWF0aC5zZXRTaXplKHNldCwgdW5pcXVlKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zZXRTaXplKFsxLCAyLCAyLCA0XSkgICAgICAgICAgLy8gcmV0dXJucyA0XG4gICAqICAgIG1hdGguc2V0U2l6ZShbMSwgMiwgMiwgNF0sIHRydWUpICAgIC8vIHJldHVybnMgM1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2V0VW5pb24sIHNldEludGVyc2VjdCwgc2V0RGlmZmVyZW5jZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhICBBIG11bHRpc2V0XG4gICAqIEByZXR1cm4ge251bWJlcn0gICAgICAgICAgICBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIG9mIHRoZSAobXVsdGkpc2V0XG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KGEpIHtcbiAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KGEpID8gKDAsIF9hcnJheS5mbGF0dGVuKShhKS5sZW5ndGggOiAoMCwgX2FycmF5LmZsYXR0ZW4pKGEudG9BcnJheSgpKS5sZW5ndGg7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgsIGJvb2xlYW4nOiBmdW5jdGlvbiBBcnJheU1hdHJpeEJvb2xlYW4oYSwgdW5pcXVlKSB7XG4gICAgICBpZiAodW5pcXVlID09PSBmYWxzZSB8fCBhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheShhKSA/ICgwLCBfYXJyYXkuZmxhdHRlbikoYSkubGVuZ3RoIDogKDAsIF9hcnJheS5mbGF0dGVuKShhLnRvQXJyYXkoKSkubGVuZ3RoO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGIgPSAoMCwgX2FycmF5LmZsYXR0ZW4pKEFycmF5LmlzQXJyYXkoYSkgPyBhIDogYS50b0FycmF5KCkpLnNvcnQoY29tcGFyZU5hdHVyYWwpO1xuICAgICAgICB2YXIgY291bnQgPSAxO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYi5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmIChjb21wYXJlTmF0dXJhbChiW2ldLCBiW2kgLSAxXSkgIT09IDApIHtcbiAgICAgICAgICAgIGNvdW50Kys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvdW50O1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0U2l6ZSA9IGNyZWF0ZVNldFNpemU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNldFN5bURpZmZlcmVuY2UgPSB2b2lkIDA7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdzZXRTeW1EaWZmZXJlbmNlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NpemUnLCAnY29uY2F0JywgJ3N1YnNldCcsICdzZXREaWZmZXJlbmNlJywgJ0luZGV4J107XG52YXIgY3JlYXRlU2V0U3ltRGlmZmVyZW5jZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBzaXplID0gX3JlZi5zaXplLFxuICAgICAgY29uY2F0ID0gX3JlZi5jb25jYXQsXG4gICAgICBzdWJzZXQgPSBfcmVmLnN1YnNldCxcbiAgICAgIHNldERpZmZlcmVuY2UgPSBfcmVmLnNldERpZmZlcmVuY2UsXG4gICAgICBJbmRleCA9IF9yZWYuSW5kZXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgc3ltbWV0cmljIGRpZmZlcmVuY2Ugb2YgdHdvIChtdWx0aSlzZXRzLlxuICAgKiBNdWx0aS1kaW1lbnNpb24gYXJyYXlzIHdpbGwgYmUgY29udmVydGVkIHRvIHNpbmdsZS1kaW1lbnNpb24gYXJyYXlzIGJlZm9yZSB0aGUgb3BlcmF0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2V0U3ltRGlmZmVyZW5jZShzZXQxLCBzZXQyKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zZXRTeW1EaWZmZXJlbmNlKFsxLCAyLCAzLCA0XSwgWzMsIDQsIDUsIDZdKSAgICAgICAgICAgIC8vIHJldHVybnMgWzEsIDIsIDUsIDZdXG4gICAqICAgIG1hdGguc2V0U3ltRGlmZmVyZW5jZShbWzEsIDJdLCBbMywgNF1dLCBbWzMsIDRdLCBbNSwgNl1dKSAgICAvLyByZXR1cm5zIFsxLCAyLCA1LCA2XVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2V0VW5pb24sIHNldEludGVyc2VjdCwgc2V0RGlmZmVyZW5jZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhMSAgQSAobXVsdGkpc2V0XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGEyICBBIChtdWx0aSlzZXRcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgIFRoZSBzeW1tZXRyaWMgZGlmZmVyZW5jZSBvZiB0d28gKG11bHRpKXNldHNcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5IHwgTWF0cml4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4QXJyYXlNYXRyaXgoYTEsIGEyKSB7XG4gICAgICBpZiAoc3Vic2V0KHNpemUoYTEpLCBuZXcgSW5kZXgoMCkpID09PSAwKSB7XG4gICAgICAgIC8vIGlmIGFueSBvZiB0aGVtIGlzIGVtcHR5LCByZXR1cm4gdGhlIG90aGVyIG9uZVxuICAgICAgICByZXR1cm4gKDAsIF9hcnJheS5mbGF0dGVuKShhMik7XG4gICAgICB9IGVsc2UgaWYgKHN1YnNldChzaXplKGEyKSwgbmV3IEluZGV4KDApKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gKDAsIF9hcnJheS5mbGF0dGVuKShhMSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBiMSA9ICgwLCBfYXJyYXkuZmxhdHRlbikoYTEpO1xuICAgICAgdmFyIGIyID0gKDAsIF9hcnJheS5mbGF0dGVuKShhMik7XG4gICAgICByZXR1cm4gY29uY2F0KHNldERpZmZlcmVuY2UoYjEsIGIyKSwgc2V0RGlmZmVyZW5jZShiMiwgYjEpKTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNldFN5bURpZmZlcmVuY2UgPSBjcmVhdGVTZXRTeW1EaWZmZXJlbmNlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZXRVbmlvbiA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3NldFVuaW9uJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NpemUnLCAnY29uY2F0JywgJ3N1YnNldCcsICdzZXRJbnRlcnNlY3QnLCAnc2V0U3ltRGlmZmVyZW5jZScsICdJbmRleCddO1xudmFyIGNyZWF0ZVNldFVuaW9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHNpemUgPSBfcmVmLnNpemUsXG4gICAgICBjb25jYXQgPSBfcmVmLmNvbmNhdCxcbiAgICAgIHN1YnNldCA9IF9yZWYuc3Vic2V0LFxuICAgICAgc2V0SW50ZXJzZWN0ID0gX3JlZi5zZXRJbnRlcnNlY3QsXG4gICAgICBzZXRTeW1EaWZmZXJlbmNlID0gX3JlZi5zZXRTeW1EaWZmZXJlbmNlLFxuICAgICAgSW5kZXggPSBfcmVmLkluZGV4O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIHVuaW9uIG9mIHR3byAobXVsdGkpc2V0cy5cbiAgICogTXVsdGktZGltZW5zaW9uIGFycmF5cyB3aWxsIGJlIGNvbnZlcnRlZCB0byBzaW5nbGUtZGltZW5zaW9uIGFycmF5cyBiZWZvcmUgdGhlIG9wZXJhdGlvbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNldFVuaW9uKHNldDEsIHNldDIpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnNldFVuaW9uKFsxLCAyLCAzLCA0XSwgWzMsIDQsIDUsIDZdKSAgICAgICAgICAgIC8vIHJldHVybnMgWzEsIDIsIDMsIDQsIDUsIDZdXG4gICAqICAgIG1hdGguc2V0VW5pb24oW1sxLCAyXSwgWzMsIDRdXSwgW1szLCA0XSwgWzUsIDZdXSkgICAgLy8gcmV0dXJucyBbMSwgMiwgMywgNCwgNSwgNl1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNldEludGVyc2VjdCwgc2V0RGlmZmVyZW5jZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSAgICBhMSAgQSAobXVsdGkpc2V0XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9ICAgIGEyICBBIChtdWx0aSlzZXRcbiAgICogQHJldHVybiB7QXJyYXkgfCBNYXRyaXh9ICAgIFRoZSB1bmlvbiBvZiB0d28gKG11bHRpKXNldHNcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJ0FycmF5IHwgTWF0cml4LCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4QXJyYXlNYXRyaXgoYTEsIGEyKSB7XG4gICAgICBpZiAoc3Vic2V0KHNpemUoYTEpLCBuZXcgSW5kZXgoMCkpID09PSAwKSB7XG4gICAgICAgIC8vIGlmIGFueSBvZiB0aGVtIGlzIGVtcHR5LCByZXR1cm4gdGhlIG90aGVyIG9uZVxuICAgICAgICByZXR1cm4gKDAsIF9hcnJheS5mbGF0dGVuKShhMik7XG4gICAgICB9IGVsc2UgaWYgKHN1YnNldChzaXplKGEyKSwgbmV3IEluZGV4KDApKSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gKDAsIF9hcnJheS5mbGF0dGVuKShhMSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBiMSA9ICgwLCBfYXJyYXkuZmxhdHRlbikoYTEpO1xuICAgICAgdmFyIGIyID0gKDAsIF9hcnJheS5mbGF0dGVuKShhMik7XG4gICAgICByZXR1cm4gY29uY2F0KHNldFN5bURpZmZlcmVuY2UoYjEsIGIyKSwgc2V0SW50ZXJzZWN0KGIxLCBiMikpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2V0VW5pb24gPSBjcmVhdGVTZXRVbmlvbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRXJmID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnZXJmJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlRXJmID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgZXJmIGZ1bmN0aW9uIG9mIGEgdmFsdWUgdXNpbmcgYSByYXRpb25hbCBDaGVieXNoZXZcbiAgICogYXBwcm94aW1hdGlvbnMgZm9yIGRpZmZlcmVudCBpbnRlcnZhbHMgb2YgeC5cbiAgICpcbiAgICogVGhpcyBpcyBhIHRyYW5zbGF0aW9uIG9mIFcuIEouIENvZHkncyBGb3J0cmFuIGltcGxlbWVudGF0aW9uIGZyb20gMTk4N1xuICAgKiAoIGh0dHBzOi8vd3d3Lm5ldGxpYi5vcmcvc3BlY2Z1bi9lcmYgKS4gU2VlIHRoZSBBTVMgcHVibGljYXRpb25cbiAgICogXCJSYXRpb25hbCBDaGVieXNoZXYgQXBwcm94aW1hdGlvbnMgZm9yIHRoZSBFcnJvciBGdW5jdGlvblwiIGJ5IFcuIEouIENvZHlcbiAgICogZm9yIGFuIGV4cGxhbmF0aW9uIG9mIHRoaXMgcHJvY2Vzcy5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmVyZih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5lcmYoMC4yKSAgICAvLyByZXR1cm5zIDAuMjIyNzAyNTg5MjEwNDc4NDdcbiAgICogICAgbWF0aC5lcmYoLTAuNSkgICAvLyByZXR1cm5zIC0wLjUyMDQ5OTg3NzgxMzA0NjVcbiAgICogICAgbWF0aC5lcmYoNCkgICAgICAvLyByZXR1cm5zIDAuOTk5OTk5OTg0NTgyNzQyMVxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSB4ICAgQSByZWFsIG51bWJlclxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gICAgVGhlIGVyZiBvZiBgeGBcbiAgICovXG4gIHZhciBlcmYgPSB0eXBlZCgnbmFtZScsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICB2YXIgeSA9IE1hdGguYWJzKHgpO1xuXG4gICAgICBpZiAoeSA+PSBNQVhfTlVNKSB7XG4gICAgICAgIHJldHVybiAoMCwgX251bWJlci5zaWduKSh4KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHkgPD0gVEhSRVNIKSB7XG4gICAgICAgIHJldHVybiAoMCwgX251bWJlci5zaWduKSh4KSAqIGVyZjEoeSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh5IDw9IDQuMCkge1xuICAgICAgICByZXR1cm4gKDAsIF9udW1iZXIuc2lnbikoeCkgKiAoMSAtIGVyZmMyKHkpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLnNpZ24pKHgpICogKDEgLSBlcmZjMyh5KSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeChuKSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKG4sIGVyZik7XG4gICAgfSAvLyBUT0RPOiBGb3IgY29tcGxleCBudW1iZXJzLCB1c2UgdGhlIGFwcHJveGltYXRpb24gZm9yIHRoZSBGYWRkZWV2YSBmdW5jdGlvblxuICAgIC8vICBmcm9tIFwiTW9yZSBFZmZpY2llbnQgQ29tcHV0YXRpb24gb2YgdGhlIENvbXBsZXggRXJyb3IgRnVuY3Rpb25cIiAoQU1TKVxuXG4gIH0pO1xuICAvKipcbiAgICogQXBwcm94aW1hdGVzIHRoZSBlcnJvciBmdW5jdGlvbiBlcmYoKSBmb3IgeCA8PSAwLjQ2ODc1IHVzaW5nIHRoaXMgZnVuY3Rpb246XG4gICAqICAgICAgICAgICAgICAgblxuICAgKiBlcmYoeCkgPSB4ICogc3VtIChwX2ogKiB4XigyaikpIC8gKHFfaiAqIHheKDJqKSlcbiAgICogICAgICAgICAgICAgIGo9MFxuICAgKi9cblxuICBmdW5jdGlvbiBlcmYxKHkpIHtcbiAgICB2YXIgeXNxID0geSAqIHk7XG4gICAgdmFyIHhudW0gPSBQWzBdWzRdICogeXNxO1xuICAgIHZhciB4ZGVuID0geXNxO1xuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IDM7IGkgKz0gMSkge1xuICAgICAgeG51bSA9ICh4bnVtICsgUFswXVtpXSkgKiB5c3E7XG4gICAgICB4ZGVuID0gKHhkZW4gKyBRWzBdW2ldKSAqIHlzcTtcbiAgICB9XG5cbiAgICByZXR1cm4geSAqICh4bnVtICsgUFswXVszXSkgLyAoeGRlbiArIFFbMF1bM10pO1xuICB9XG4gIC8qKlxuICAgKiBBcHByb3hpbWF0ZXMgdGhlIGNvbXBsZW1lbnQgb2YgdGhlIGVycm9yIGZ1bmN0aW9uIGVyZmMoKSBmb3JcbiAgICogMC40Njg3NSA8PSB4IDw9IDQuMCB1c2luZyB0aGlzIGZ1bmN0aW9uOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgblxuICAgKiBlcmZjKHgpID0gZV4oLXheMikgKiBzdW0gKHBfaiAqIHheaikgLyAocV9qICogeF5qKVxuICAgKiAgICAgICAgICAgICAgICAgICAgICBqPTBcbiAgICovXG5cblxuICBmdW5jdGlvbiBlcmZjMih5KSB7XG4gICAgdmFyIHhudW0gPSBQWzFdWzhdICogeTtcbiAgICB2YXIgeGRlbiA9IHk7XG4gICAgdmFyIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgNzsgaSArPSAxKSB7XG4gICAgICB4bnVtID0gKHhudW0gKyBQWzFdW2ldKSAqIHk7XG4gICAgICB4ZGVuID0gKHhkZW4gKyBRWzFdW2ldKSAqIHk7XG4gICAgfVxuXG4gICAgdmFyIHJlc3VsdCA9ICh4bnVtICsgUFsxXVs3XSkgLyAoeGRlbiArIFFbMV1bN10pO1xuICAgIHZhciB5c3EgPSBwYXJzZUludCh5ICogMTYpIC8gMTY7XG4gICAgdmFyIGRlbCA9ICh5IC0geXNxKSAqICh5ICsgeXNxKTtcbiAgICByZXR1cm4gTWF0aC5leHAoLXlzcSAqIHlzcSkgKiBNYXRoLmV4cCgtZGVsKSAqIHJlc3VsdDtcbiAgfVxuICAvKipcbiAgICogQXBwcm94aW1hdGVzIHRoZSBjb21wbGVtZW50IG9mIHRoZSBlcnJvciBmdW5jdGlvbiBlcmZjKCkgZm9yIHggPiA0LjAgdXNpbmdcbiAgICogdGhpcyBmdW5jdGlvbjpcbiAgICpcbiAgICogZXJmYyh4KSA9IChlXigteF4yKSAvIHgpICogWyAxL3NxcnQocGkpICtcbiAgICogICAgICAgICAgICAgICBuXG4gICAqICAgIDEvKHheMikgKiBzdW0gKHBfaiAqIHheKC0yaikpIC8gKHFfaiAqIHheKC0yaikpIF1cbiAgICogICAgICAgICAgICAgIGo9MFxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIGVyZmMzKHkpIHtcbiAgICB2YXIgeXNxID0gMSAvICh5ICogeSk7XG4gICAgdmFyIHhudW0gPSBQWzJdWzVdICogeXNxO1xuICAgIHZhciB4ZGVuID0geXNxO1xuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IDQ7IGkgKz0gMSkge1xuICAgICAgeG51bSA9ICh4bnVtICsgUFsyXVtpXSkgKiB5c3E7XG4gICAgICB4ZGVuID0gKHhkZW4gKyBRWzJdW2ldKSAqIHlzcTtcbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0ID0geXNxICogKHhudW0gKyBQWzJdWzRdKSAvICh4ZGVuICsgUVsyXVs0XSk7XG4gICAgcmVzdWx0ID0gKFNRUlBJIC0gcmVzdWx0KSAvIHk7XG4gICAgeXNxID0gcGFyc2VJbnQoeSAqIDE2KSAvIDE2O1xuICAgIHZhciBkZWwgPSAoeSAtIHlzcSkgKiAoeSArIHlzcSk7XG4gICAgcmV0dXJuIE1hdGguZXhwKC15c3EgKiB5c3EpICogTWF0aC5leHAoLWRlbCkgKiByZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gZXJmO1xufSk7XG4vKipcbiAqIFVwcGVyIGJvdW5kIGZvciB0aGUgZmlyc3QgYXBwcm94aW1hdGlvbiBpbnRlcnZhbCwgMCA8PSB4IDw9IFRIUkVTSFxuICogQGNvbnN0YW50XG4gKi9cblxuZXhwb3J0cy5jcmVhdGVFcmYgPSBjcmVhdGVFcmY7XG52YXIgVEhSRVNIID0gMC40Njg3NTtcbi8qKlxuICogQ29uc3RhbnQgdXNlZCBieSBXLiBKLiBDb2R5J3MgRm9ydHJhbjc3IGltcGxlbWVudGF0aW9uIHRvIGRlbm90ZSBzcXJ0KHBpKVxuICogQGNvbnN0YW50XG4gKi9cblxudmFyIFNRUlBJID0gNS42NDE4OTU4MzU0Nzc1NjI4Njk1ZS0xO1xuLyoqXG4gKiBDb2VmZmljaWVudHMgZm9yIGVhY2ggdGVybSBvZiB0aGUgbnVtZXJhdG9yIHN1bSAocF9qKSBmb3IgZWFjaCBhcHByb3hpbWF0aW9uXG4gKiBpbnRlcnZhbCAoc2VlIFcuIEouIENvZHkncyBwYXBlciBmb3IgbW9yZSBkZXRhaWxzKVxuICogQGNvbnN0YW50XG4gKi9cblxudmFyIFAgPSBbWzMuMTYxMTIzNzQzODcwNTY1NjBlMDAsIDEuMTM4NjQxNTQxNTEwNTAxNTZlMDIsIDMuNzc0ODUyMzc2ODUzMDIwMjFlMDIsIDMuMjA5Mzc3NTg5MTM4NDY5NDdlMDMsIDEuODU3Nzc3MDYxODQ2MDMxNTNlLTFdLCBbNS42NDE4ODQ5Njk4ODY3MDA4OWUtMSwgOC44ODMxNDk3OTQzODgzNzU5NGUwMCwgNi42MTE5MTkwNjM3MTQxNjI5NWUwMSwgMi45ODYzNTEzODE5NzQwMDEzMWUwMiwgOC44MTk1MjIyMTI0MTc2OTA5MGUwMiwgMS43MTIwNDc2MTI2MzQwNzA1OGUwMywgMi4wNTEwNzgzNzc4MjYwNzE0N2UwMywgMS4yMzAzMzkzNTQ3OTc5OTcyNWUwMywgMi4xNTMxMTUzNTQ3NDQwMzg0NmUtOF0sIFszLjA1MzI2NjM0OTYxMjMyMzQ0ZS0xLCAzLjYwMzQ0ODk5OTQ5ODA0NDM5ZS0xLCAxLjI1NzgxNzI2MTExMjI5MjQ2ZS0xLCAxLjYwODM3ODUxNDg3NDIyNzY2ZS0yLCA2LjU4NzQ5MTYxNTI5ODM3ODAzZS00LCAxLjYzMTUzODcxMzczMDIwOTc4ZS0yXV07XG4vKipcbiAqIENvZWZmaWNpZW50cyBmb3IgZWFjaCB0ZXJtIG9mIHRoZSBkZW5vbWluYXRvciBzdW0gKHFfaikgZm9yIGVhY2ggYXBwcm94aW1hdGlvblxuICogaW50ZXJ2YWwgKHNlZSBXLiBKLiBDb2R5J3MgcGFwZXIgZm9yIG1vcmUgZGV0YWlscylcbiAqIEBjb25zdGFudFxuICovXG5cbnZhciBRID0gW1syLjM2MDEyOTA5NTIzNDQxMjA5ZTAxLCAyLjQ0MDI0NjM3OTM0NDQ0MTczZTAyLCAxLjI4MjYxNjUyNjA3NzM3MjI4ZTAzLCAyLjg0NDIzNjgzMzQzOTE3MDYyZTAzXSwgWzEuNTc0NDkyNjExMDcwOTgzNDdlMDEsIDEuMTc2OTM5NTA4OTEzMTI0OTllMDIsIDUuMzcxODExMDE4NjIwMDk4NThlMDIsIDEuNjIxMzg5NTc0NTY2NjkwMTllMDMsIDMuMjkwNzk5MjM1NzMzNDU5NjNlMDMsIDQuMzYyNjE5MDkwMTQzMjQ3MTZlMDMsIDMuNDM5MzY3Njc0MTQzNzIxNjRlMDMsIDEuMjMwMzM5MzU0ODAzNzQ5NDJlMDNdLCBbMi41Njg1MjAxOTIyODk4MjI0MmUwMCwgMS44NzI5NTI4NDk5MjM0NjA0N2UwMCwgNS4yNzkwNTEwMjk1MTQyODQxMmUtMSwgNi4wNTE4MzQxMzEyNDQxMzE5MWUtMiwgMi4zMzUyMDQ5NzYyNjg2OTE4NWUtM11dO1xuLyoqXG4gKiBNYXhpbXVtL21pbmltdW0gc2FmZSBudW1iZXJzIHRvIGlucHV0IHRvIGVyZigpIChpbiBFUzYrLCB0aGlzIG51bWJlciBpc1xuICogTnVtYmVyLltNQVh8TUlOXV9TQUZFX0lOVEVHRVIpLiBlcmYoKSBmb3IgYWxsIG51bWJlcnMgYmV5b25kIHRoaXMgbGltaXQgd2lsbFxuICogcmV0dXJuIDFcbiAqL1xuXG52YXIgTUFYX05VTSA9IE1hdGgucG93KDIsIDUzKTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTWFkID0gdm9pZCAwO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pbXByb3ZlRXJyb3JNZXNzYWdlID0gcmVxdWlyZShcIi4vdXRpbHMvaW1wcm92ZUVycm9yTWVzc2FnZVwiKTtcblxudmFyIG5hbWUgPSAnbWFkJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2FicycsICdtYXAnLCAnbWVkaWFuJywgJ3N1YnRyYWN0J107XG52YXIgY3JlYXRlTWFkID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGFicyA9IF9yZWYuYWJzLFxuICAgICAgbWFwID0gX3JlZi5tYXAsXG4gICAgICBtZWRpYW4gPSBfcmVmLm1lZGlhbixcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdDtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgbWVkaWFuIGFic29sdXRlIGRldmlhdGlvbiBvZiBhIG1hdHJpeCBvciBhIGxpc3Qgd2l0aCB2YWx1ZXMuXG4gICAqIFRoZSBtZWRpYW4gYWJzb2x1dGUgZGV2aWF0aW9uIGlzIGRlZmluZWQgYXMgdGhlIG1lZGlhbiBvZiB0aGUgYWJzb2x1dGVcbiAgICogZGV2aWF0aW9ucyBmcm9tIHRoZSBtZWRpYW4uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgubWFkKGEsIGIsIGMsIC4uLilcbiAgICogICAgIG1hdGgubWFkKEEpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5tYWQoMTAsIDIwLCAzMCkgICAgICAgICAgICAgLy8gcmV0dXJucyAxMFxuICAgKiAgICAgbWF0aC5tYWQoWzEsIDIsIDNdKSAgICAgICAgICAgICAgLy8gcmV0dXJucyAxXG4gICAqICAgICBtYXRoLm1hZChbWzEsIDIsIDNdLCBbNCwgNSwgNl1dKSAvLyByZXR1cm5zIDEuNVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIG1lZGlhbiwgbWVhbiwgc3RkLCBhYnNcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gYXJyYXlcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBBIHNpbmdsZSBtYXRyaXggb3IgbXVsdGlwbGUgc2NhbGFyIHZhbHVlcy5cbiAgICogQHJldHVybiB7Kn0gVGhlIG1lZGlhbiBhYnNvbHV0ZSBkZXZpYXRpb24uXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIC8vIG1hZChbYSwgYiwgYywgZCwgLi4uXSlcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBfbWFkLFxuICAgIC8vIG1hZChhLCBiLCBjLCBkLCAuLi4pXG4gICAgJy4uLic6IGZ1bmN0aW9uIF8oYXJncykge1xuICAgICAgcmV0dXJuIF9tYWQoYXJncyk7XG4gICAgfVxuICB9KTtcblxuICBmdW5jdGlvbiBfbWFkKGFycmF5KSB7XG4gICAgYXJyYXkgPSAoMCwgX2FycmF5LmZsYXR0ZW4pKGFycmF5LnZhbHVlT2YoKSk7XG5cbiAgICBpZiAoYXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgbWVkaWFuIGFic29sdXRlIGRldmlhdGlvbiAobWFkKSBvZiBhbiBlbXB0eSBhcnJheScpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICB2YXIgbWVkID0gbWVkaWFuKGFycmF5KTtcbiAgICAgIHJldHVybiBtZWRpYW4obWFwKGFycmF5LCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGFicyhzdWJ0cmFjdCh2YWx1ZSwgbWVkKSk7XG4gICAgICB9KSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgVHlwZUVycm9yICYmIGVyci5tZXNzYWdlLmluZGV4T2YoJ21lZGlhbicpICE9PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGVyci5tZXNzYWdlLnJlcGxhY2UoJ21lZGlhbicsICdtYWQnKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyAoMCwgX2ltcHJvdmVFcnJvck1lc3NhZ2UuaW1wcm92ZUVycm9yTWVzc2FnZSkoZXJyLCAnbWFkJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlTWFkID0gY3JlYXRlTWFkOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNYXggPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pbXByb3ZlRXJyb3JNZXNzYWdlID0gcmVxdWlyZShcIi4vdXRpbHMvaW1wcm92ZUVycm9yTWVzc2FnZVwiKTtcblxudmFyIG5hbWUgPSAnbWF4JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2xhcmdlciddO1xudmFyIGNyZWF0ZU1heCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBsYXJnZXIgPSBfcmVmLmxhcmdlcjtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgbWF4aW11bSB2YWx1ZSBvZiBhIG1hdHJpeCBvciBhICBsaXN0IHdpdGggdmFsdWVzLlxuICAgKiBJbiBjYXNlIG9mIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXksIHRoZSBtYXhpbXVtIG9mIHRoZSBmbGF0dGVuZWQgYXJyYXlcbiAgICogd2lsbCBiZSBjYWxjdWxhdGVkLiBXaGVuIGBkaW1gIGlzIHByb3ZpZGVkLCB0aGUgbWF4aW11bSBvdmVyIHRoZSBzZWxlY3RlZFxuICAgKiBkaW1lbnNpb24gd2lsbCBiZSBjYWxjdWxhdGVkLiBQYXJhbWV0ZXIgYGRpbWAgaXMgemVyby1iYXNlZC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5tYXgoYSwgYiwgYywgLi4uKVxuICAgKiAgICAgbWF0aC5tYXgoQSlcbiAgICogICAgIG1hdGgubWF4KEEsIGRpbSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLm1heCgyLCAxLCA0LCAzKSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgNFxuICAgKiAgICAgbWF0aC5tYXgoWzIsIDEsIDQsIDNdKSAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDRcbiAgICpcbiAgICogICAgIC8vIG1heGltdW0gb3ZlciBhIHNwZWNpZmllZCBkaW1lbnNpb24gKHplcm8tYmFzZWQpXG4gICAqICAgICBtYXRoLm1heChbWzIsIDVdLCBbNCwgM10sIFsxLCA3XV0sIDApIC8vIHJldHVybnMgWzQsIDddXG4gICAqICAgICBtYXRoLm1heChbWzIsIDVdLCBbNCwgM11dLCBbMSwgN10sIDEpIC8vIHJldHVybnMgWzUsIDQsIDddXG4gICAqXG4gICAqICAgICBtYXRoLm1heCgyLjcsIDcuMSwgLTQuNSwgMi4wLCA0LjEpICAgIC8vIHJldHVybnMgNy4xXG4gICAqICAgICBtYXRoLm1pbigyLjcsIDcuMSwgLTQuNSwgMi4wLCA0LjEpICAgIC8vIHJldHVybnMgLTQuNVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbWVhbiwgbWVkaWFuLCBtaW4sIHByb2QsIHN0ZCwgc3VtLCB2YXJpYW5jZVxuICAgKlxuICAgKiBAcGFyYW0gey4uLiAqfSBhcmdzICBBIHNpbmdsZSBtYXRyaXggb3Igb3IgbXVsdGlwbGUgc2NhbGFyIHZhbHVlc1xuICAgKiBAcmV0dXJuIHsqfSBUaGUgbWF4aW11bSB2YWx1ZVxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyBtYXgoW2EsIGIsIGMsIGQsIC4uLl0pXG4gICAgJ0FycmF5IHwgTWF0cml4JzogX21heCxcbiAgICAvLyBtYXgoW2EsIGIsIGMsIGQsIC4uLl0sIGRpbSlcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyKGFycmF5LCBkaW0pIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24ucmVkdWNlKShhcnJheSwgZGltLnZhbHVlT2YoKSwgX2xhcmdlc3QpO1xuICAgIH0sXG4gICAgLy8gbWF4KGEsIGIsIGMsIGQsIC4uLilcbiAgICAnLi4uJzogZnVuY3Rpb24gXyhhcmdzKSB7XG4gICAgICBpZiAoKDAsIF9jb2xsZWN0aW9uLmNvbnRhaW5zQ29sbGVjdGlvbnMpKGFyZ3MpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1NjYWxhciB2YWx1ZXMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gbWF4Jyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfbWF4KGFyZ3MpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGxhcmdlc3Qgb2YgdHdvIHZhbHVlc1xuICAgKiBAcGFyYW0geyp9IHhcbiAgICogQHBhcmFtIHsqfSB5XG4gICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHggd2hlbiB4IGlzIGxhcmdlc3QsIG9yIHkgd2hlbiB5IGlzIGxhcmdlc3RcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX2xhcmdlc3QoeCwgeSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gbGFyZ2VyKHgsIHkpID8geCA6IHk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyAoMCwgX2ltcHJvdmVFcnJvck1lc3NhZ2UuaW1wcm92ZUVycm9yTWVzc2FnZSkoZXJyLCAnbWF4JywgeSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBjYWxjdWxhdGUgdGhlIG1heGltdW0gdmFsdWUgaW4gYW4gbi1kaW1lbnNpb25hbCBhcnJheVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IG1heFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9tYXgoYXJyYXkpIHtcbiAgICB2YXIgcmVzO1xuICAgICgwLCBfY29sbGVjdGlvbi5kZWVwRm9yRWFjaCkoYXJyYXksIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGlzTmFOKHZhbHVlKSAmJiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgcmVzID0gTmFOO1xuICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PT0gdW5kZWZpbmVkIHx8IGxhcmdlcih2YWx1ZSwgcmVzKSkge1xuICAgICAgICAgIHJlcyA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9pbXByb3ZlRXJyb3JNZXNzYWdlLmltcHJvdmVFcnJvck1lc3NhZ2UpKGVyciwgJ21heCcsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChyZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIG1heCBvZiBhbiBlbXB0eSBhcnJheScpO1xuICAgIH1cblxuICAgIHJldHVybiByZXM7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVNYXggPSBjcmVhdGVNYXg7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1lYW4gPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2FycmF5XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pbXByb3ZlRXJyb3JNZXNzYWdlID0gcmVxdWlyZShcIi4vdXRpbHMvaW1wcm92ZUVycm9yTWVzc2FnZVwiKTtcblxudmFyIG5hbWUgPSAnbWVhbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGQnLCAnZGl2aWRlJ107XG52YXIgY3JlYXRlTWVhbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIGRpdmlkZSA9IF9yZWYuZGl2aWRlO1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBtZWFuIHZhbHVlIG9mIG1hdHJpeCBvciBhIGxpc3Qgd2l0aCB2YWx1ZXMuXG4gICAqIEluIGNhc2Ugb2YgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheSwgdGhlIG1lYW4gb2YgdGhlIGZsYXR0ZW5lZCBhcnJheVxuICAgKiB3aWxsIGJlIGNhbGN1bGF0ZWQuIFdoZW4gYGRpbWAgaXMgcHJvdmlkZWQsIHRoZSBtYXhpbXVtIG92ZXIgdGhlIHNlbGVjdGVkXG4gICAqIGRpbWVuc2lvbiB3aWxsIGJlIGNhbGN1bGF0ZWQuIFBhcmFtZXRlciBgZGltYCBpcyB6ZXJvLWJhc2VkLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLm1lYW4oYSwgYiwgYywgLi4uKVxuICAgKiAgICAgbWF0aC5tZWFuKEEpXG4gICAqICAgICBtYXRoLm1lYW4oQSwgZGltKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGgubWVhbigyLCAxLCA0LCAzKSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMi41XG4gICAqICAgICBtYXRoLm1lYW4oWzEsIDIuNywgMy4yLCA0XSkgICAgICAgICAgICAgICAvLyByZXR1cm5zIDIuNzI1XG4gICAqXG4gICAqICAgICBtYXRoLm1lYW4oW1syLCA1XSwgWzYsIDNdLCBbMSwgN11dLCAwKSAgICAvLyByZXR1cm5zIFszLCA1XVxuICAgKiAgICAgbWF0aC5tZWFuKFtbMiwgNV0sIFs2LCAzXSwgWzEsIDddXSwgMSkgICAgLy8gcmV0dXJucyBbMy41LCA0LjUsIDRdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgbWVkaWFuLCBtaW4sIG1heCwgc3VtLCBwcm9kLCBzdGQsIHZhcmlhbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7Li4uICp9IGFyZ3MgIEEgc2luZ2xlIG1hdHJpeCBvciBvciBtdWx0aXBsZSBzY2FsYXIgdmFsdWVzXG4gICAqIEByZXR1cm4geyp9IFRoZSBtZWFuIG9mIGFsbCB2YWx1ZXNcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgLy8gbWVhbihbYSwgYiwgYywgZCwgLi4uXSlcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBfbWVhbixcbiAgICAvLyBtZWFuKFthLCBiLCBjLCBkLCAuLi5dLCBkaW0pXG4gICAgJ0FycmF5IHwgTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBfbm1lYW5EaW0sXG4gICAgLy8gbWVhbihhLCBiLCBjLCBkLCAuLi4pXG4gICAgJy4uLic6IGZ1bmN0aW9uIF8oYXJncykge1xuICAgICAgaWYgKCgwLCBfY29sbGVjdGlvbi5jb250YWluc0NvbGxlY3Rpb25zKShhcmdzKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTY2FsYXIgdmFsdWVzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIG1lYW4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9tZWFuKGFyZ3MpO1xuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIG1lYW4gdmFsdWUgaW4gYW4gbi1kaW1lbnNpb25hbCBhcnJheSwgcmV0dXJuaW5nIGFcbiAgICogbi0xIGRpbWVuc2lvbmFsIGFycmF5XG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkaW1cbiAgICogQHJldHVybiB7bnVtYmVyfSBtZWFuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9ubWVhbkRpbShhcnJheSwgZGltKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBzdW0gPSAoMCwgX2NvbGxlY3Rpb24ucmVkdWNlKShhcnJheSwgZGltLCBhZGQpO1xuICAgICAgdmFyIHMgPSBBcnJheS5pc0FycmF5KGFycmF5KSA/ICgwLCBfYXJyYXkuYXJyYXlTaXplKShhcnJheSkgOiBhcnJheS5zaXplKCk7XG4gICAgICByZXR1cm4gZGl2aWRlKHN1bSwgc1tkaW1dKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93ICgwLCBfaW1wcm92ZUVycm9yTWVzc2FnZS5pbXByb3ZlRXJyb3JNZXNzYWdlKShlcnIsICdtZWFuJyk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZWN1cnNpdmVseSBjYWxjdWxhdGUgdGhlIG1lYW4gdmFsdWUgaW4gYW4gbi1kaW1lbnNpb25hbCBhcnJheVxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IG1lYW5cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfbWVhbihhcnJheSkge1xuICAgIHZhciBzdW07XG4gICAgdmFyIG51bSA9IDA7XG4gICAgKDAsIF9jb2xsZWN0aW9uLmRlZXBGb3JFYWNoKShhcnJheSwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzdW0gPSBzdW0gPT09IHVuZGVmaW5lZCA/IHZhbHVlIDogYWRkKHN1bSwgdmFsdWUpO1xuICAgICAgICBudW0rKztcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2ltcHJvdmVFcnJvck1lc3NhZ2UuaW1wcm92ZUVycm9yTWVzc2FnZSkoZXJyLCAnbWVhbicsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGlmIChudW0gPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSB0aGUgbWVhbiBvZiBhbiBlbXB0eSBhcnJheScpO1xuICAgIH1cblxuICAgIHJldHVybiBkaXZpZGUoc3VtLCBudW0pO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlTWVhbiA9IGNyZWF0ZU1lYW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1lZGlhbiA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2ltcHJvdmVFcnJvck1lc3NhZ2UgPSByZXF1aXJlKFwiLi91dGlscy9pbXByb3ZlRXJyb3JNZXNzYWdlXCIpO1xuXG52YXIgbmFtZSA9ICdtZWRpYW4nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnYWRkJywgJ2RpdmlkZScsICdjb21wYXJlJywgJ3BhcnRpdGlvblNlbGVjdCddO1xudmFyIGNyZWF0ZU1lZGlhbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIGRpdmlkZSA9IF9yZWYuZGl2aWRlLFxuICAgICAgY29tcGFyZSA9IF9yZWYuY29tcGFyZSxcbiAgICAgIHBhcnRpdGlvblNlbGVjdCA9IF9yZWYucGFydGl0aW9uU2VsZWN0O1xuXG4gIC8qKlxuICAgKiBDb21wdXRlIHRoZSBtZWRpYW4gb2YgYSBtYXRyaXggb3IgYSBsaXN0IHdpdGggdmFsdWVzLiBUaGUgdmFsdWVzIGFyZVxuICAgKiBzb3J0ZWQgYW5kIHRoZSBtaWRkbGUgdmFsdWUgaXMgcmV0dXJuZWQuIEluIGNhc2Ugb2YgYW4gZXZlbiBudW1iZXIgb2ZcbiAgICogdmFsdWVzLCB0aGUgYXZlcmFnZSBvZiB0aGUgdHdvIG1pZGRsZSB2YWx1ZXMgaXMgcmV0dXJuZWQuXG4gICAqIFN1cHBvcnRlZCB0eXBlcyBvZiB2YWx1ZXMgYXJlOiBOdW1iZXIsIEJpZ051bWJlciwgVW5pdFxuICAgKlxuICAgKiBJbiBjYXNlIG9mIGEgKG11bHRpIGRpbWVuc2lvbmFsKSBhcnJheSBvciBtYXRyaXgsIHRoZSBtZWRpYW4gb2YgYWxsXG4gICAqIGVsZW1lbnRzIHdpbGwgYmUgY2FsY3VsYXRlZC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5tZWRpYW4oYSwgYiwgYywgLi4uKVxuICAgKiAgICAgbWF0aC5tZWRpYW4oQSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLm1lZGlhbig1LCAyLCA3KSAgICAgICAgLy8gcmV0dXJucyA1XG4gICAqICAgICBtYXRoLm1lZGlhbihbMywgLTEsIDUsIDddKSAgLy8gcmV0dXJucyA0XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgbWVhbiwgbWluLCBtYXgsIHN1bSwgcHJvZCwgc3RkLCB2YXJpYW5jZSwgcXVhbnRpbGVTZXFcbiAgICpcbiAgICogQHBhcmFtIHsuLi4gKn0gYXJncyAgQSBzaW5nbGUgbWF0cml4IG9yIG9yIG11bHRpcGxlIHNjYWxhciB2YWx1ZXNcbiAgICogQHJldHVybiB7Kn0gVGhlIG1lZGlhblxuICAgKi9cbiAgdmFyIG1lZGlhbiA9IHR5cGVkKG5hbWUsIHtcbiAgICAvLyBtZWRpYW4oW2EsIGIsIGMsIGQsIC4uLl0pXG4gICAgJ0FycmF5IHwgTWF0cml4JzogX21lZGlhbixcbiAgICAvLyBtZWRpYW4oW2EsIGIsIGMsIGQsIC4uLl0sIGRpbSlcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyKGFycmF5LCBkaW0pIHtcbiAgICAgIC8vIFRPRE86IGltcGxlbWVudCBtZWRpYW4oQSwgZGltKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdtZWRpYW4oQSwgZGltKSBpcyBub3QgeWV0IHN1cHBvcnRlZCcpOyAvLyByZXR1cm4gcmVkdWNlKGFyZ3VtZW50c1swXSwgYXJndW1lbnRzWzFdLCAuLi4pXG4gICAgfSxcbiAgICAvLyBtZWRpYW4oYSwgYiwgYywgZCwgLi4uKVxuICAgICcuLi4nOiBmdW5jdGlvbiBfKGFyZ3MpIHtcbiAgICAgIGlmICgoMCwgX2NvbGxlY3Rpb24uY29udGFpbnNDb2xsZWN0aW9ucykoYXJncykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignU2NhbGFyIHZhbHVlcyBleHBlY3RlZCBpbiBmdW5jdGlvbiBtZWRpYW4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9tZWRpYW4oYXJncyk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGNhbGN1bGF0ZSB0aGUgbWVkaWFuIG9mIGFuIG4tZGltZW5zaW9uYWwgYXJyYXlcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAgICogQHJldHVybiB7TnVtYmVyfSBtZWRpYW5cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX21lZGlhbihhcnJheSkge1xuICAgIHRyeSB7XG4gICAgICBhcnJheSA9ICgwLCBfYXJyYXkuZmxhdHRlbikoYXJyYXkudmFsdWVPZigpKTtcbiAgICAgIHZhciBudW0gPSBhcnJheS5sZW5ndGg7XG5cbiAgICAgIGlmIChudW0gPT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIG1lZGlhbiBvZiBhbiBlbXB0eSBhcnJheScpO1xuICAgICAgfVxuXG4gICAgICBpZiAobnVtICUgMiA9PT0gMCkge1xuICAgICAgICAvLyBldmVuOiByZXR1cm4gdGhlIGF2ZXJhZ2Ugb2YgdGhlIHR3byBtaWRkbGUgdmFsdWVzXG4gICAgICAgIHZhciBtaWQgPSBudW0gLyAyIC0gMTtcbiAgICAgICAgdmFyIHJpZ2h0ID0gcGFydGl0aW9uU2VsZWN0KGFycmF5LCBtaWQgKyAxKTsgLy8gYXJyYXkgbm93IHBhcnRpdGlvbmVkIGF0IG1pZCArIDEsIHRha2UgbWF4IG9mIGxlZnQgcGFydFxuXG4gICAgICAgIHZhciBsZWZ0ID0gYXJyYXlbbWlkXTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1pZDsgKytpKSB7XG4gICAgICAgICAgaWYgKGNvbXBhcmUoYXJyYXlbaV0sIGxlZnQpID4gMCkge1xuICAgICAgICAgICAgbGVmdCA9IGFycmF5W2ldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtaWRkbGUyKGxlZnQsIHJpZ2h0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG9kZDogcmV0dXJuIHRoZSBtaWRkbGUgdmFsdWVcbiAgICAgICAgdmFyIG0gPSBwYXJ0aXRpb25TZWxlY3QoYXJyYXksIChudW0gLSAxKSAvIDIpO1xuICAgICAgICByZXR1cm4gbWlkZGxlKG0pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgKDAsIF9pbXByb3ZlRXJyb3JNZXNzYWdlLmltcHJvdmVFcnJvck1lc3NhZ2UpKGVyciwgJ21lZGlhbicpO1xuICAgIH1cbiAgfSAvLyBoZWxwZXIgZnVuY3Rpb24gdG8gdHlwZSBjaGVjayB0aGUgbWlkZGxlIHZhbHVlIG9mIHRoZSBhcnJheVxuXG5cbiAgdmFyIG1pZGRsZSA9IHR5cGVkKHtcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJDb21wbGV4VW5pdCh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgfSk7IC8vIGhlbHBlciBmdW5jdGlvbiB0byB0eXBlIGNoZWNrIHRoZSB0d28gbWlkZGxlIHZhbHVlIG9mIHRoZSBhcnJheVxuXG4gIHZhciBtaWRkbGUyID0gdHlwZWQoe1xuICAgICdudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCwgbnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJDb21wbGV4VW5pdE51bWJlckJpZ051bWJlckNvbXBsZXhVbml0KGxlZnQsIHJpZ2h0KSB7XG4gICAgICByZXR1cm4gZGl2aWRlKGFkZChsZWZ0LCByaWdodCksIDIpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBtZWRpYW47XG59KTtcbmV4cG9ydHMuY3JlYXRlTWVkaWFuID0gY3JlYXRlTWVkaWFuOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNaW4gPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pbXByb3ZlRXJyb3JNZXNzYWdlID0gcmVxdWlyZShcIi4vdXRpbHMvaW1wcm92ZUVycm9yTWVzc2FnZVwiKTtcblxudmFyIG5hbWUgPSAnbWluJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ3NtYWxsZXInXTtcbnZhciBjcmVhdGVNaW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgc21hbGxlciA9IF9yZWYuc21hbGxlcjtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgbWluaW11bSB2YWx1ZSBvZiBhIG1hdHJpeCBvciBhICBsaXN0IG9mIHZhbHVlcy5cbiAgICogSW4gY2FzZSBvZiBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5LCB0aGUgbWluaW11bSBvZiB0aGUgZmxhdHRlbmVkIGFycmF5XG4gICAqIHdpbGwgYmUgY2FsY3VsYXRlZC4gV2hlbiBgZGltYCBpcyBwcm92aWRlZCwgdGhlIG1pbmltdW0gb3ZlciB0aGUgc2VsZWN0ZWRcbiAgICogZGltZW5zaW9uIHdpbGwgYmUgY2FsY3VsYXRlZC4gUGFyYW1ldGVyIGBkaW1gIGlzIHplcm8tYmFzZWQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgubWluKGEsIGIsIGMsIC4uLilcbiAgICogICAgIG1hdGgubWluKEEpXG4gICAqICAgICBtYXRoLm1pbihBLCBkaW0pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5taW4oMiwgMSwgNCwgMykgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIDFcbiAgICogICAgIG1hdGgubWluKFsyLCAxLCA0LCAzXSkgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAxXG4gICAqXG4gICAqICAgICAvLyBtaW5pbXVtIG92ZXIgYSBzcGVjaWZpZWQgZGltZW5zaW9uICh6ZXJvLWJhc2VkKVxuICAgKiAgICAgbWF0aC5taW4oW1syLCA1XSwgWzQsIDNdLCBbMSwgN11dLCAwKSAvLyByZXR1cm5zIFsxLCAzXVxuICAgKiAgICAgbWF0aC5taW4oW1syLCA1XSwgWzQsIDNdLCBbMSwgN11dLCAxKSAvLyByZXR1cm5zIFsyLCAzLCAxXVxuICAgKlxuICAgKiAgICAgbWF0aC5tYXgoMi43LCA3LjEsIC00LjUsIDIuMCwgNC4xKSAgICAvLyByZXR1cm5zIDcuMVxuICAgKiAgICAgbWF0aC5taW4oMi43LCA3LjEsIC00LjUsIDIuMCwgNC4xKSAgICAvLyByZXR1cm5zIC00LjVcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIG1lYW4sIG1lZGlhbiwgbWF4LCBwcm9kLCBzdGQsIHN1bSwgdmFyaWFuY2VcbiAgICpcbiAgICogQHBhcmFtIHsuLi4gKn0gYXJncyAgQSBzaW5nbGUgbWF0cml4IG9yIG9yIG11bHRpcGxlIHNjYWxhciB2YWx1ZXNcbiAgICogQHJldHVybiB7Kn0gVGhlIG1pbmltdW0gdmFsdWVcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgLy8gbWluKFthLCBiLCBjLCBkLCAuLi5dKVxuICAgICdBcnJheSB8IE1hdHJpeCc6IF9taW4sXG4gICAgLy8gbWluKFthLCBiLCBjLCBkLCAuLi5dLCBkaW0pXG4gICAgJ0FycmF5IHwgTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlckJpZ051bWJlcihhcnJheSwgZGltKSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLnJlZHVjZSkoYXJyYXksIGRpbS52YWx1ZU9mKCksIF9zbWFsbGVzdCk7XG4gICAgfSxcbiAgICAvLyBtaW4oYSwgYiwgYywgZCwgLi4uKVxuICAgICcuLi4nOiBmdW5jdGlvbiBfKGFyZ3MpIHtcbiAgICAgIGlmICgoMCwgX2NvbGxlY3Rpb24uY29udGFpbnNDb2xsZWN0aW9ucykoYXJncykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignU2NhbGFyIHZhbHVlcyBleHBlY3RlZCBpbiBmdW5jdGlvbiBtaW4nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9taW4oYXJncyk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIFJldHVybiB0aGUgc21hbGxlc3Qgb2YgdHdvIHZhbHVlc1xuICAgKiBAcGFyYW0geyp9IHhcbiAgICogQHBhcmFtIHsqfSB5XG4gICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHggd2hlbiB4IGlzIHNtYWxsZXN0LCBvciB5IHdoZW4geSBpcyBzbWFsbGVzdFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfc21hbGxlc3QoeCwgeSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gc21hbGxlcih4LCB5KSA/IHggOiB5O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhyb3cgKDAsIF9pbXByb3ZlRXJyb3JNZXNzYWdlLmltcHJvdmVFcnJvck1lc3NhZ2UpKGVyciwgJ21pbicsIHkpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogUmVjdXJzaXZlbHkgY2FsY3VsYXRlIHRoZSBtaW5pbXVtIHZhbHVlIGluIGFuIG4tZGltZW5zaW9uYWwgYXJyYXlcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAgICogQHJldHVybiB7bnVtYmVyfSBtaW5cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfbWluKGFycmF5KSB7XG4gICAgdmFyIG1pbjtcbiAgICAoMCwgX2NvbGxlY3Rpb24uZGVlcEZvckVhY2gpKGFycmF5LCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChpc05hTih2YWx1ZSkgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIG1pbiA9IE5hTjtcbiAgICAgICAgfSBlbHNlIGlmIChtaW4gPT09IHVuZGVmaW5lZCB8fCBzbWFsbGVyKHZhbHVlLCBtaW4pKSB7XG4gICAgICAgICAgbWluID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyAoMCwgX2ltcHJvdmVFcnJvck1lc3NhZ2UuaW1wcm92ZUVycm9yTWVzc2FnZSkoZXJyLCAnbWluJywgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKG1pbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgbWluIG9mIGFuIGVtcHR5IGFycmF5Jyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1pbjtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZU1pbiA9IGNyZWF0ZU1pbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTW9kZSA9IHZvaWQgMDtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ21vZGUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnaXNOYU4nLCAnaXNOdW1lcmljJ107XG52YXIgY3JlYXRlTW9kZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBpc05hTiA9IF9yZWYuaXNOYU4sXG4gICAgICBpc051bWVyaWMgPSBfcmVmLmlzTnVtZXJpYztcblxuICAvKipcbiAgKiBDb21wdXRlcyB0aGUgbW9kZSBvZiBhIHNldCBvZiBudW1iZXJzIG9yIGEgbGlzdCB3aXRoIHZhbHVlcyhudW1iZXJzIG9yIGNoYXJhY3RlcnMpLlxuICAqIElmIHRoZXJlIGFyZSBtb3JlIHRoYW4gb25lIG1vZGVzLCBpdCByZXR1cm5zIGEgbGlzdCBvZiB0aG9zZSB2YWx1ZXMuXG4gICpcbiAgKiBTeW50YXg6XG4gICpcbiAgKiAgICAgbWF0aC5tb2RlKGEsIGIsIGMsIC4uLilcbiAgKiAgICAgbWF0aC5tb2RlKEEpXG4gICpcbiAgKiBFeGFtcGxlczpcbiAgKlxuICAqICAgICBtYXRoLm1vZGUoMiwgMSwgNCwgMywgMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBbMV1cbiAgKiAgICAgbWF0aC5tb2RlKFsxLCAyLjcsIDMuMiwgNCwgMi43XSkgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgWzIuN11cbiAgKiAgICAgbWF0aC5tb2RlKDEsIDQsIDYsIDEsIDYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIFsxLCA2XVxuICAqICAgICBtYXRoLm1vZGUoJ2EnLCdhJywnYicsJ2MnKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgW1wiYVwiXVxuICAqICAgICBtYXRoLm1vZGUoMSwgMS41LCAnYWJjJykgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgWzEsIDEuNSwgXCJhYmNcIl1cbiAgKlxuICAqIFNlZSBhbHNvOlxuICAqXG4gICogICAgIG1lZGlhbixcbiAgKiAgICAgbWVhblxuICAqXG4gICogQHBhcmFtIHsuLi4gKn0gYXJncyAgQSBzaW5nbGUgbWF0cml4XG4gICogQHJldHVybiB7Kn0gVGhlIG1vZGUgb2YgYWxsIHZhbHVlc1xuICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdBcnJheSB8IE1hdHJpeCc6IF9tb2RlLFxuICAgICcuLi4nOiBmdW5jdGlvbiBfKGFyZ3MpIHtcbiAgICAgIHJldHVybiBfbW9kZShhcmdzKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgbW9kZSBpbiBhbiAxLWRpbWVuc2lvbmFsIGFycmF5XG4gICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlc1xuICAgKiBAcmV0dXJuIHtBcnJheX0gbW9kZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfbW9kZSh2YWx1ZXMpIHtcbiAgICB2YWx1ZXMgPSAoMCwgX2FycmF5LmZsYXR0ZW4pKHZhbHVlcy52YWx1ZU9mKCkpO1xuICAgIHZhciBudW0gPSB2YWx1ZXMubGVuZ3RoO1xuXG4gICAgaWYgKG51bSA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2FsY3VsYXRlIG1vZGUgb2YgYW4gZW1wdHkgYXJyYXknKTtcbiAgICB9XG5cbiAgICB2YXIgY291bnQgPSB7fTtcbiAgICB2YXIgbW9kZSA9IFtdO1xuICAgIHZhciBtYXggPSAwO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2YWx1ZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB2YWx1ZSA9IHZhbHVlc1tpXTtcblxuICAgICAgaWYgKGlzTnVtZXJpYyh2YWx1ZSkgJiYgaXNOYU4odmFsdWUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBtb2RlIG9mIGFuIGFycmF5IGNvbnRhaW5pbmcgTmFOIHZhbHVlcycpO1xuICAgICAgfVxuXG4gICAgICBpZiAoISh2YWx1ZSBpbiBjb3VudCkpIHtcbiAgICAgICAgY291bnRbdmFsdWVdID0gMDtcbiAgICAgIH1cblxuICAgICAgY291bnRbdmFsdWVdKys7XG5cbiAgICAgIGlmIChjb3VudFt2YWx1ZV0gPT09IG1heCkge1xuICAgICAgICBtb2RlLnB1c2godmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChjb3VudFt2YWx1ZV0gPiBtYXgpIHtcbiAgICAgICAgbWF4ID0gY291bnRbdmFsdWVdO1xuICAgICAgICBtb2RlID0gW3ZhbHVlXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbW9kZTtcbiAgfVxufSk7XG5leHBvcnRzLmNyZWF0ZU1vZGUgPSBjcmVhdGVNb2RlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVQcm9kID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfaW1wcm92ZUVycm9yTWVzc2FnZSA9IHJlcXVpcmUoXCIuL3V0aWxzL2ltcHJvdmVFcnJvck1lc3NhZ2VcIik7XG5cbnZhciBuYW1lID0gJ3Byb2QnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbXVsdGlwbHknXTtcbnZhciBjcmVhdGVQcm9kID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseTtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgcHJvZHVjdCBvZiBhIG1hdHJpeCBvciBhIGxpc3Qgd2l0aCB2YWx1ZXMuXG4gICAqIEluIGNhc2Ugb2YgYSAobXVsdGkgZGltZW5zaW9uYWwpIGFycmF5IG9yIG1hdHJpeCwgdGhlIHN1bSBvZiBhbGxcbiAgICogZWxlbWVudHMgd2lsbCBiZSBjYWxjdWxhdGVkLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLnByb2QoYSwgYiwgYywgLi4uKVxuICAgKiAgICAgbWF0aC5wcm9kKEEpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5tdWx0aXBseSgyLCAzKSAgICAgICAgICAgLy8gcmV0dXJucyA2XG4gICAqICAgICBtYXRoLnByb2QoMiwgMykgICAgICAgICAgICAgICAvLyByZXR1cm5zIDZcbiAgICogICAgIG1hdGgucHJvZCgyLCAzLCA0KSAgICAgICAgICAgIC8vIHJldHVybnMgMjRcbiAgICogICAgIG1hdGgucHJvZChbMiwgMywgNF0pICAgICAgICAgIC8vIHJldHVybnMgMjRcbiAgICogICAgIG1hdGgucHJvZChbWzIsIDVdLCBbNCwgM11dKSAgIC8vIHJldHVybnMgMTIwXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBtZWFuLCBtZWRpYW4sIG1pbiwgbWF4LCBzdW0sIHN0ZCwgdmFyaWFuY2VcbiAgICpcbiAgICogQHBhcmFtIHsuLi4gKn0gYXJncyAgQSBzaW5nbGUgbWF0cml4IG9yIG9yIG11bHRpcGxlIHNjYWxhciB2YWx1ZXNcbiAgICogQHJldHVybiB7Kn0gVGhlIHByb2R1Y3Qgb2YgYWxsIHZhbHVlc1xuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAvLyBwcm9kKFthLCBiLCBjLCBkLCAuLi5dKVxuICAgICdBcnJheSB8IE1hdHJpeCc6IF9wcm9kLFxuICAgIC8vIHByb2QoW2EsIGIsIGMsIGQsIC4uLl0sIGRpbSlcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IGZ1bmN0aW9uIEFycmF5TWF0cml4TnVtYmVyQmlnTnVtYmVyKGFycmF5LCBkaW0pIHtcbiAgICAgIC8vIFRPRE86IGltcGxlbWVudCBwcm9kKEEsIGRpbSlcbiAgICAgIHRocm93IG5ldyBFcnJvcigncHJvZChBLCBkaW0pIGlzIG5vdCB5ZXQgc3VwcG9ydGVkJyk7IC8vIHJldHVybiByZWR1Y2UoYXJndW1lbnRzWzBdLCBhcmd1bWVudHNbMV0sIG1hdGgucHJvZClcbiAgICB9LFxuICAgIC8vIHByb2QoYSwgYiwgYywgZCwgLi4uKVxuICAgICcuLi4nOiBmdW5jdGlvbiBfKGFyZ3MpIHtcbiAgICAgIHJldHVybiBfcHJvZChhcmdzKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogUmVjdXJzaXZlbHkgY2FsY3VsYXRlIHRoZSBwcm9kdWN0IG9mIGFuIG4tZGltZW5zaW9uYWwgYXJyYXlcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAgICogQHJldHVybiB7bnVtYmVyfSBwcm9kXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9wcm9kKGFycmF5KSB7XG4gICAgdmFyIHByb2Q7XG4gICAgKDAsIF9jb2xsZWN0aW9uLmRlZXBGb3JFYWNoKShhcnJheSwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBwcm9kID0gcHJvZCA9PT0gdW5kZWZpbmVkID8gdmFsdWUgOiBtdWx0aXBseShwcm9kLCB2YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9pbXByb3ZlRXJyb3JNZXNzYWdlLmltcHJvdmVFcnJvck1lc3NhZ2UpKGVyciwgJ3Byb2QnLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAocHJvZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgcHJvZCBvZiBhbiBlbXB0eSBhcnJheScpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9kO1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlUHJvZCA9IGNyZWF0ZVByb2Q7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVF1YW50aWxlU2VxID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdxdWFudGlsZVNlcSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGQnLCAnbXVsdGlwbHknLCAncGFydGl0aW9uU2VsZWN0JywgJ2NvbXBhcmUnXTtcbnZhciBjcmVhdGVRdWFudGlsZVNlcSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBhZGQgPSBfcmVmLmFkZCxcbiAgICAgIG11bHRpcGx5ID0gX3JlZi5tdWx0aXBseSxcbiAgICAgIHBhcnRpdGlvblNlbGVjdCA9IF9yZWYucGFydGl0aW9uU2VsZWN0LFxuICAgICAgY29tcGFyZSA9IF9yZWYuY29tcGFyZTtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgcHJvYiBvcmRlciBxdWFudGlsZSBvZiBhIG1hdHJpeCBvciBhIGxpc3Qgd2l0aCB2YWx1ZXMuXG4gICAqIFRoZSBzZXF1ZW5jZSBpcyBzb3J0ZWQgYW5kIHRoZSBtaWRkbGUgdmFsdWUgaXMgcmV0dXJuZWQuXG4gICAqIFN1cHBvcnRlZCB0eXBlcyBvZiBzZXF1ZW5jZSB2YWx1ZXMgYXJlOiBOdW1iZXIsIEJpZ051bWJlciwgVW5pdFxuICAgKiBTdXBwb3J0ZWQgdHlwZXMgb2YgcHJvYmFiaWxpdHkgYXJlOiBOdW1iZXIsIEJpZ051bWJlclxuICAgKlxuICAgKiBJbiBjYXNlIG9mIGEgKG11bHRpIGRpbWVuc2lvbmFsKSBhcnJheSBvciBtYXRyaXgsIHRoZSBwcm9iIG9yZGVyIHF1YW50aWxlXG4gICAqIG9mIGFsbCBlbGVtZW50cyB3aWxsIGJlIGNhbGN1bGF0ZWQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgucXVhbnRpbGVTZXEoQSwgcHJvYlssIHNvcnRlZF0pXG4gICAqICAgICBtYXRoLnF1YW50aWxlU2VxKEEsIFtwcm9iMSwgcHJvYjIsIC4uLl1bLCBzb3J0ZWRdKVxuICAgKiAgICAgbWF0aC5xdWFudGlsZVNlcShBLCBOWywgc29ydGVkXSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLnF1YW50aWxlU2VxKFszLCAtMSwgNSwgN10sIDAuNSkgICAgICAgICAvLyByZXR1cm5zIDRcbiAgICogICAgIG1hdGgucXVhbnRpbGVTZXEoWzMsIC0xLCA1LCA3XSwgWzEvMywgMi8zXSkgIC8vIHJldHVybnMgWzMsIDVdXG4gICAqICAgICBtYXRoLnF1YW50aWxlU2VxKFszLCAtMSwgNSwgN10sIDIpICAgICAgICAgICAvLyByZXR1cm5zIFszLCA1XVxuICAgKiAgICAgbWF0aC5xdWFudGlsZVNlcShbLTEsIDMsIDUsIDddLCAwLjUsIHRydWUpICAgLy8gcmV0dXJucyA0XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgbWVkaWFuLCBtZWFuLCBtaW4sIG1heCwgc3VtLCBwcm9kLCBzdGQsIHZhcmlhbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXksIE1hdHJpeH0gZGF0YSAgICAgICAgICAgICAgICBBIHNpbmdsZSBtYXRyaXggb3IgQXJyYXlcbiAgICogQHBhcmFtIHtOdW1iZXIsIEJpZ051bWJlciwgQXJyYXl9IHByb2JPck4gIHByb2IgaXMgdGhlIG9yZGVyIG9mIHRoZSBxdWFudGlsZSwgd2hpbGUgTiBpc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFtb3VudCBvZiBldmVubHkgZGlzdHJpYnV0ZWQgc3RlcHMgb2ZcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2JhYmlsaXRpZXM7IG9ubHkgb25lIG9mIHRoZXNlIG9wdGlvbnMgY2FuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBwcm92aWRlZFxuICAgKiBAcGFyYW0ge0Jvb2xlYW59IHNvcnRlZD1mYWxzZSAgICAgICAgICAgICAgaXMgZGF0YSBzb3J0ZWQgaW4gYXNjZW5kaW5nIG9yZGVyXG4gICAqIEByZXR1cm4ge051bWJlciwgQmlnTnVtYmVyLCBVbml0LCBBcnJheX0gICBRdWFudGlsZShzKVxuICAgKi9cbiAgZnVuY3Rpb24gcXVhbnRpbGVTZXEoZGF0YSwgcHJvYk9yTiwgc29ydGVkKSB7XG4gICAgdmFyIHByb2JBcnIsIGRhdGFBcnIsIG9uZTtcblxuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMiB8fCBhcmd1bWVudHMubGVuZ3RoID4gMykge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdGdW5jdGlvbiBxdWFudGlsZVNlcSByZXF1aXJlcyB0d28gb3IgdGhyZWUgcGFyYW1ldGVycycpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2lzLmlzQ29sbGVjdGlvbikoZGF0YSkpIHtcbiAgICAgIHNvcnRlZCA9IHNvcnRlZCB8fCBmYWxzZTtcblxuICAgICAgaWYgKHR5cGVvZiBzb3J0ZWQgPT09ICdib29sZWFuJykge1xuICAgICAgICBkYXRhQXJyID0gZGF0YS52YWx1ZU9mKCk7XG5cbiAgICAgICAgaWYgKCgwLCBfaXMuaXNOdW1iZXIpKHByb2JPck4pKSB7XG4gICAgICAgICAgaWYgKHByb2JPck4gPCAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ04vcHJvYiBtdXN0IGJlIG5vbi1uZWdhdGl2ZScpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwcm9iT3JOIDw9IDEpIHtcbiAgICAgICAgICAgIC8vIHF1YW50aWxlU2VxKFthLCBiLCBjLCBkLCAuLi5dLCBwcm9iWyxzb3J0ZWRdKVxuICAgICAgICAgICAgcmV0dXJuIF9xdWFudGlsZVNlcShkYXRhQXJyLCBwcm9iT3JOLCBzb3J0ZWQpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwcm9iT3JOID4gMSkge1xuICAgICAgICAgICAgLy8gcXVhbnRpbGVTZXEoW2EsIGIsIGMsIGQsIC4uLl0sIE5bLHNvcnRlZF0pXG4gICAgICAgICAgICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikocHJvYk9yTikpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBuUGx1c09uZSA9IHByb2JPck4gKyAxO1xuICAgICAgICAgICAgcHJvYkFyciA9IG5ldyBBcnJheShwcm9iT3JOKTtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9iT3JOOykge1xuICAgICAgICAgICAgICBwcm9iQXJyW2ldID0gX3F1YW50aWxlU2VxKGRhdGFBcnIsICsraSAvIG5QbHVzT25lLCBzb3J0ZWQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcHJvYkFycjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikocHJvYk9yTikpIHtcbiAgICAgICAgICB2YXIgQmlnTnVtYmVyID0gcHJvYk9yTi5jb25zdHJ1Y3RvcjtcblxuICAgICAgICAgIGlmIChwcm9iT3JOLmlzTmVnYXRpdmUoKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOL3Byb2IgbXVzdCBiZSBub24tbmVnYXRpdmUnKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBvbmUgPSBuZXcgQmlnTnVtYmVyKDEpO1xuXG4gICAgICAgICAgaWYgKHByb2JPck4ubHRlKG9uZSkpIHtcbiAgICAgICAgICAgIC8vIHF1YW50aWxlU2VxKFthLCBiLCBjLCBkLCAuLi5dLCBwcm9iWyxzb3J0ZWRdKVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoX3F1YW50aWxlU2VxKGRhdGFBcnIsIHByb2JPck4sIHNvcnRlZCkpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChwcm9iT3JOLmd0KG9uZSkpIHtcbiAgICAgICAgICAgIC8vIHF1YW50aWxlU2VxKFthLCBiLCBjLCBkLCAuLi5dLCBOWyxzb3J0ZWRdKVxuICAgICAgICAgICAgaWYgKCFwcm9iT3JOLmlzSW50ZWdlcigpKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTiBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpO1xuICAgICAgICAgICAgfSAvLyBsYXJnZXN0IHBvc3NpYmxlIEFycmF5IGxlbmd0aCBpcyAyXjMyLTFcbiAgICAgICAgICAgIC8vIDJeMzIgPCAxMF4xNSwgdGh1cyBzYWZlIGNvbnZlcnNpb24gZ3VhcmFudGVlZFxuXG5cbiAgICAgICAgICAgIHZhciBpbnROID0gcHJvYk9yTi50b051bWJlcigpO1xuXG4gICAgICAgICAgICBpZiAoaW50TiA+IDQyOTQ5NjcyOTUpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDJeMzItMSwgYXMgdGhhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYW4gQXJyYXknKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdmFyIF9uUGx1c09uZSA9IG5ldyBCaWdOdW1iZXIoaW50TiArIDEpO1xuXG4gICAgICAgICAgICBwcm9iQXJyID0gbmV3IEFycmF5KGludE4pO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgaW50TjspIHtcbiAgICAgICAgICAgICAgcHJvYkFycltfaV0gPSBuZXcgQmlnTnVtYmVyKF9xdWFudGlsZVNlcShkYXRhQXJyLCBuZXcgQmlnTnVtYmVyKCsrX2kpLmRpdihfblBsdXNPbmUpLCBzb3J0ZWQpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIHByb2JBcnI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocHJvYk9yTikpIHtcbiAgICAgICAgICAvLyBxdWFudGlsZVNlcShbYSwgYiwgYywgZCwgLi4uXSwgW3Byb2IxLCBwcm9iMiwgLi4uXVssc29ydGVkXSlcbiAgICAgICAgICBwcm9iQXJyID0gbmV3IEFycmF5KHByb2JPck4ubGVuZ3RoKTtcblxuICAgICAgICAgIGZvciAodmFyIF9pMiA9IDA7IF9pMiA8IHByb2JBcnIubGVuZ3RoOyArK19pMikge1xuICAgICAgICAgICAgdmFyIGN1cnJQcm9iID0gcHJvYk9yTltfaTJdO1xuXG4gICAgICAgICAgICBpZiAoKDAsIF9pcy5pc051bWJlcikoY3VyclByb2IpKSB7XG4gICAgICAgICAgICAgIGlmIChjdXJyUHJvYiA8IDAgfHwgY3VyclByb2IgPiAxKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9iYWJpbGl0eSBtdXN0IGJlIGJldHdlZW4gMCBhbmQgMSwgaW5jbHVzaXZlJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikoY3VyclByb2IpKSB7XG4gICAgICAgICAgICAgIG9uZSA9IG5ldyBjdXJyUHJvYi5jb25zdHJ1Y3RvcigxKTtcblxuICAgICAgICAgICAgICBpZiAoY3VyclByb2IuaXNOZWdhdGl2ZSgpIHx8IGN1cnJQcm9iLmd0KG9uZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb2JhYmlsaXR5IG11c3QgYmUgYmV0d2VlbiAwIGFuZCAxLCBpbmNsdXNpdmUnKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5leHBlY3RlZCB0eXBlIG9mIGFyZ3VtZW50IGluIGZ1bmN0aW9uIHF1YW50aWxlU2VxJyk7IC8vIEZJWE1FOiBiZWNvbWVzIHJlZHVuZGFudCB3aGVuIGNvbnZlcnRlZCB0byB0eXBlZC1mdW5jdGlvblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwcm9iQXJyW19pMl0gPSBfcXVhbnRpbGVTZXEoZGF0YUFyciwgY3VyclByb2IsIHNvcnRlZCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHByb2JBcnI7XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmV4cGVjdGVkIHR5cGUgb2YgYXJndW1lbnQgaW4gZnVuY3Rpb24gcXVhbnRpbGVTZXEnKTsgLy8gRklYTUU6IGJlY29tZXMgcmVkdW5kYW50IHdoZW4gY29udmVydGVkIHRvIHR5cGVkLWZ1bmN0aW9uXG4gICAgICB9XG5cbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgdHlwZSBvZiBhcmd1bWVudCBpbiBmdW5jdGlvbiBxdWFudGlsZVNlcScpOyAvLyBGSVhNRTogYmVjb21lcyByZWR1bmRhbnQgd2hlbiBjb252ZXJ0ZWQgdG8gdHlwZWQtZnVuY3Rpb25cbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmV4cGVjdGVkIHR5cGUgb2YgYXJndW1lbnQgaW4gZnVuY3Rpb24gcXVhbnRpbGVTZXEnKTsgLy8gRklYTUU6IGJlY29tZXMgcmVkdW5kYW50IHdoZW4gY29udmVydGVkIHRvIHR5cGVkLWZ1bmN0aW9uXG4gIH1cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgcHJvYiBvcmRlciBxdWFudGlsZSBvZiBhbiBuLWRpbWVuc2lvbmFsIGFycmF5LlxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICAgKiBAcGFyYW0ge051bWJlciwgQmlnTnVtYmVyfSBwcm9iXG4gICAqIEBwYXJhbSB7Qm9vbGVhbn0gc29ydGVkXG4gICAqIEByZXR1cm4ge051bWJlciwgQmlnTnVtYmVyLCBVbml0fSBwcm9iIG9yZGVyIHF1YW50aWxlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3F1YW50aWxlU2VxKGFycmF5LCBwcm9iLCBzb3J0ZWQpIHtcbiAgICB2YXIgZmxhdCA9ICgwLCBfYXJyYXkuZmxhdHRlbikoYXJyYXkpO1xuICAgIHZhciBsZW4gPSBmbGF0Lmxlbmd0aDtcblxuICAgIGlmIChsZW4gPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBxdWFudGlsZSBvZiBhbiBlbXB0eSBzZXF1ZW5jZScpO1xuICAgIH1cblxuICAgIGlmICgoMCwgX2lzLmlzTnVtYmVyKShwcm9iKSkge1xuICAgICAgdmFyIF9pbmRleCA9IHByb2IgKiAobGVuIC0gMSk7XG5cbiAgICAgIHZhciBfZnJhY1BhcnQgPSBfaW5kZXggJSAxO1xuXG4gICAgICBpZiAoX2ZyYWNQYXJ0ID09PSAwKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IHNvcnRlZCA/IGZsYXRbX2luZGV4XSA6IHBhcnRpdGlvblNlbGVjdChmbGF0LCBfaW5kZXgpO1xuICAgICAgICB2YWxpZGF0ZSh2YWx1ZSk7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIF9pbnRlZ2VyUGFydCA9IE1hdGguZmxvb3IoX2luZGV4KTtcblxuICAgICAgdmFyIF9sZWZ0O1xuXG4gICAgICB2YXIgX3JpZ2h0O1xuXG4gICAgICBpZiAoc29ydGVkKSB7XG4gICAgICAgIF9sZWZ0ID0gZmxhdFtfaW50ZWdlclBhcnRdO1xuICAgICAgICBfcmlnaHQgPSBmbGF0W19pbnRlZ2VyUGFydCArIDFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgX3JpZ2h0ID0gcGFydGl0aW9uU2VsZWN0KGZsYXQsIF9pbnRlZ2VyUGFydCArIDEpOyAvLyBtYXggb2YgcGFydGl0aW9uIGlzIGt0aCBsYXJnZXN0XG5cbiAgICAgICAgX2xlZnQgPSBmbGF0W19pbnRlZ2VyUGFydF07XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBfaW50ZWdlclBhcnQ7ICsraSkge1xuICAgICAgICAgIGlmIChjb21wYXJlKGZsYXRbaV0sIF9sZWZ0KSA+IDApIHtcbiAgICAgICAgICAgIF9sZWZ0ID0gZmxhdFtpXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFsaWRhdGUoX2xlZnQpO1xuICAgICAgdmFsaWRhdGUoX3JpZ2h0KTsgLy8gUShwcm9iKSA9ICgxLWYpKkFbZmxvb3IoaW5kZXgpXSArIGYqQVtmbG9vcihpbmRleCkrMV1cblxuICAgICAgcmV0dXJuIGFkZChtdWx0aXBseShfbGVmdCwgMSAtIF9mcmFjUGFydCksIG11bHRpcGx5KF9yaWdodCwgX2ZyYWNQYXJ0KSk7XG4gICAgfSAvLyBJZiBwcm9iIGlzIGEgQmlnTnVtYmVyXG5cblxuICAgIHZhciBpbmRleCA9IHByb2IudGltZXMobGVuIC0gMSk7XG5cbiAgICBpZiAoaW5kZXguaXNJbnRlZ2VyKCkpIHtcbiAgICAgIGluZGV4ID0gaW5kZXgudG9OdW1iZXIoKTtcblxuICAgICAgdmFyIF92YWx1ZSA9IHNvcnRlZCA/IGZsYXRbaW5kZXhdIDogcGFydGl0aW9uU2VsZWN0KGZsYXQsIGluZGV4KTtcblxuICAgICAgdmFsaWRhdGUoX3ZhbHVlKTtcbiAgICAgIHJldHVybiBfdmFsdWU7XG4gICAgfVxuXG4gICAgdmFyIGludGVnZXJQYXJ0ID0gaW5kZXguZmxvb3IoKTtcbiAgICB2YXIgZnJhY1BhcnQgPSBpbmRleC5taW51cyhpbnRlZ2VyUGFydCk7XG4gICAgdmFyIGludGVnZXJQYXJ0TnVtYmVyID0gaW50ZWdlclBhcnQudG9OdW1iZXIoKTtcbiAgICB2YXIgbGVmdDtcbiAgICB2YXIgcmlnaHQ7XG5cbiAgICBpZiAoc29ydGVkKSB7XG4gICAgICBsZWZ0ID0gZmxhdFtpbnRlZ2VyUGFydE51bWJlcl07XG4gICAgICByaWdodCA9IGZsYXRbaW50ZWdlclBhcnROdW1iZXIgKyAxXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmlnaHQgPSBwYXJ0aXRpb25TZWxlY3QoZmxhdCwgaW50ZWdlclBhcnROdW1iZXIgKyAxKTsgLy8gbWF4IG9mIHBhcnRpdGlvbiBpcyBrdGggbGFyZ2VzdFxuXG4gICAgICBsZWZ0ID0gZmxhdFtpbnRlZ2VyUGFydE51bWJlcl07XG5cbiAgICAgIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IGludGVnZXJQYXJ0TnVtYmVyOyArK19pMykge1xuICAgICAgICBpZiAoY29tcGFyZShmbGF0W19pM10sIGxlZnQpID4gMCkge1xuICAgICAgICAgIGxlZnQgPSBmbGF0W19pM107XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YWxpZGF0ZShsZWZ0KTtcbiAgICB2YWxpZGF0ZShyaWdodCk7IC8vIFEocHJvYikgPSAoMS1mKSpBW2Zsb29yKGluZGV4KV0gKyBmKkFbZmxvb3IoaW5kZXgpKzFdXG5cbiAgICB2YXIgb25lID0gbmV3IGZyYWNQYXJ0LmNvbnN0cnVjdG9yKDEpO1xuICAgIHJldHVybiBhZGQobXVsdGlwbHkobGVmdCwgb25lLm1pbnVzKGZyYWNQYXJ0KSksIG11bHRpcGx5KHJpZ2h0LCBmcmFjUGFydCkpO1xuICB9XG4gIC8qKlxuICAgKiBDaGVjayBpZiBhcnJheSB2YWx1ZSB0eXBlcyBhcmUgdmFsaWQsIHRocm93IGVycm9yIG90aGVyd2lzZS5cbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBVbml0fSB4XG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgVW5pdH0geFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIHZhciB2YWxpZGF0ZSA9IHR5cGVkKHtcbiAgICAnbnVtYmVyIHwgQmlnTnVtYmVyIHwgVW5pdCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclVuaXQoeCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHF1YW50aWxlU2VxO1xufSk7XG5leHBvcnRzLmNyZWF0ZVF1YW50aWxlU2VxID0gY3JlYXRlUXVhbnRpbGVTZXE7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVN0ZCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3N0ZCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdzcXJ0JywgJ3ZhcmlhbmNlJ107XG52YXIgY3JlYXRlU3RkID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIHNxcnQgPSBfcmVmLnNxcnQsXG4gICAgICB2YXJpYW5jZSA9IF9yZWYudmFyaWFuY2U7XG5cbiAgLyoqXG4gICAqIENvbXB1dGUgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiBvZiBhIG1hdHJpeCBvciBhICBsaXN0IHdpdGggdmFsdWVzLlxuICAgKiBUaGUgc3RhbmRhcmQgZGV2aWF0aW9ucyBpcyBkZWZpbmVkIGFzIHRoZSBzcXVhcmUgcm9vdCBvZiB0aGUgdmFyaWFuY2U6XG4gICAqIGBzdGQoQSkgPSBzcXJ0KHZhcmlhbmNlKEEpKWAuXG4gICAqIEluIGNhc2Ugb2YgYSAobXVsdGkgZGltZW5zaW9uYWwpIGFycmF5IG9yIG1hdHJpeCwgdGhlIHN0YW5kYXJkIGRldmlhdGlvblxuICAgKiBvdmVyIGFsbCBlbGVtZW50cyB3aWxsIGJlIGNhbGN1bGF0ZWQgYnkgZGVmYXVsdCwgdW5sZXNzIGFuIGF4aXMgaXMgc3BlY2lmaWVkXG4gICAqIGluIHdoaWNoIGNhc2UgdGhlIHN0YW5kYXJkIGRldmlhdGlvbiB3aWxsIGJlIGNvbXB1dGVkIGFsb25nIHRoYXQgYXhpcy5cbiAgICpcbiAgICogQWRkaXRpb25hbGx5LCBpdCBpcyBwb3NzaWJsZSB0byBjb21wdXRlIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gYWxvbmcgdGhlIHJvd3NcbiAgICogb3IgY29sdW1ucyBvZiBhIG1hdHJpeCBieSBzcGVjaWZ5aW5nIHRoZSBkaW1lbnNpb24gYXMgdGhlIHNlY29uZCBhcmd1bWVudC5cbiAgICpcbiAgICogT3B0aW9uYWxseSwgdGhlIHR5cGUgb2Ygbm9ybWFsaXphdGlvbiBjYW4gYmUgc3BlY2lmaWVkIGFzIHRoZSBmaW5hbFxuICAgKiBwYXJhbWV0ZXIuIFRoZSBwYXJhbWV0ZXIgYG5vcm1hbGl6YXRpb25gIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6XG4gICAqXG4gICAqIC0gJ3VuYmlhc2VkJyAoZGVmYXVsdCkgVGhlIHN1bSBvZiBzcXVhcmVkIGVycm9ycyBpcyBkaXZpZGVkIGJ5IChuIC0gMSlcbiAgICogLSAndW5jb3JyZWN0ZWQnICAgICAgICBUaGUgc3VtIG9mIHNxdWFyZWQgZXJyb3JzIGlzIGRpdmlkZWQgYnkgblxuICAgKiAtICdiaWFzZWQnICAgICAgICAgICAgIFRoZSBzdW0gb2Ygc3F1YXJlZCBlcnJvcnMgaXMgZGl2aWRlZCBieSAobiArIDEpXG4gICAqXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguc3RkKGEsIGIsIGMsIC4uLilcbiAgICogICAgIG1hdGguc3RkKEEpXG4gICAqICAgICBtYXRoLnN0ZChBLCBub3JtYWxpemF0aW9uKVxuICAgKiAgICAgbWF0aC5zdGQoQSwgZGltZW5zaW9uKVxuICAgKiAgICAgbWF0aC5zdGQoQSwgZGltZW5zaW9uLCBub3JtYWxpemF0aW9uKVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIG1hdGguc3RkKDIsIDQsIDYpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAyXG4gICAqICAgICBtYXRoLnN0ZChbMiwgNCwgNiwgOF0pICAgICAgICAgICAgICAgIC8vIHJldHVybnMgMi41ODE5ODg4OTc0NzE2MTFcbiAgICogICAgIG1hdGguc3RkKFsyLCA0LCA2LCA4XSwgJ3VuY29ycmVjdGVkJykgLy8gcmV0dXJucyAyLjIzNjA2Nzk3NzQ5OTc5XG4gICAqICAgICBtYXRoLnN0ZChbMiwgNCwgNiwgOF0sICdiaWFzZWQnKSAgICAgIC8vIHJldHVybnMgMlxuICAgKlxuICAgKiAgICAgbWF0aC5zdGQoW1sxLCAyLCAzXSwgWzQsIDUsIDZdXSkgICAgICAvLyByZXR1cm5zIDEuODcwODI4NjkzMzg2OTcwN1xuICAgKiAgICAgbWF0aC5zdGQoW1sxLCAyLCAzXSwgWzQsIDYsIDhdXSwgMCkgICAgLy8gcmV0dXJucyBbMi4xMjEzMjAzNDM1NTk2NDI0LCAyLjgyODQyNzEyNDc0NjE5MDMsIDMuNTM1NTMzOTA1OTMyNzM3OF1cbiAgICogICAgIG1hdGguc3RkKFtbMSwgMiwgM10sIFs0LCA2LCA4XV0sIDEpICAgIC8vIHJldHVybnMgWzEsIDJdXG4gICAqICAgICBtYXRoLnN0ZChbWzEsIDIsIDNdLCBbNCwgNiwgOF1dLCAxLCAnYmlhc2VkJykgLy8gcmV0dXJucyBbMC43MDcxMDY3ODExODY1NDc2LCAxLjQxNDIxMzU2MjM3MzA5NTFdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBtZWFuLCBtZWRpYW4sIG1heCwgbWluLCBwcm9kLCBzdW0sIHZhcmlhbmNlXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IGFycmF5XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgQSBzaW5nbGUgbWF0cml4IG9yIG9yIG11bHRpcGxlIHNjYWxhciB2YWx1ZXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtub3JtYWxpemF0aW9uPSd1bmJpYXNlZCddXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyBob3cgdG8gbm9ybWFsaXplIHRoZSB2YXJpYW5jZS5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICBDaG9vc2UgJ3VuYmlhc2VkJyAoZGVmYXVsdCksICd1bmNvcnJlY3RlZCcsIG9yICdiaWFzZWQnLlxuICAgKiBAcGFyYW0gZGltZW5zaW9uIHtudW1iZXIgfCBCaWdOdW1iZXJ9XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyB0aGUgYXhpcyB0byBjb21wdXRlIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24gZm9yIGEgbWF0cml4XG4gICAqIEByZXR1cm4geyp9IFRoZSBzdGFuZGFyZCBkZXZpYXRpb25cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgLy8gc3RkKFthLCBiLCBjLCBkLCAuLi5dKVxuICAgICdBcnJheSB8IE1hdHJpeCc6IF9zdGQsXG4gICAgLy8gc3RkKFthLCBiLCBjLCBkLCAuLi5dLCBub3JtYWxpemF0aW9uKVxuICAgICdBcnJheSB8IE1hdHJpeCwgc3RyaW5nJzogX3N0ZCxcbiAgICAvLyBzdGQoW2EsIGIsIGMsIGMsIC4uLl0sIGRpbSlcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlcic6IF9zdGQsXG4gICAgLy8gc3RkKFthLCBiLCBjLCBjLCAuLi5dLCBkaW0sIG5vcm1hbGl6YXRpb24pXG4gICAgJ0FycmF5IHwgTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXIsIHN0cmluZyc6IF9zdGQsXG4gICAgLy8gc3RkKGEsIGIsIGMsIGQsIC4uLilcbiAgICAnLi4uJzogZnVuY3Rpb24gXyhhcmdzKSB7XG4gICAgICByZXR1cm4gX3N0ZChhcmdzKTtcbiAgICB9XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIF9zdGQoYXJyYXksIG5vcm1hbGl6YXRpb24pIHtcbiAgICBpZiAoYXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0Z1bmN0aW9uIHN0ZCByZXF1aXJlcyBvbmUgb3IgbW9yZSBwYXJhbWV0ZXJzICgwIHByb3ZpZGVkKScpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gc3FydCh2YXJpYW5jZS5hcHBseShudWxsLCBhcmd1bWVudHMpKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBUeXBlRXJyb3IgJiYgZXJyLm1lc3NhZ2UuaW5kZXhPZignIHZhcmlhbmNlJykgIT09IC0xKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoZXJyLm1lc3NhZ2UucmVwbGFjZSgnIHZhcmlhbmNlJywgJyBzdGQnKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aHJvdyBlcnI7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlU3RkID0gY3JlYXRlU3RkOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTdW0gPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9pbXByb3ZlRXJyb3JNZXNzYWdlID0gcmVxdWlyZShcIi4vdXRpbHMvaW1wcm92ZUVycm9yTWVzc2FnZVwiKTtcblxudmFyIF9ub29wID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL25vb3BcIik7XG5cbnZhciBuYW1lID0gJ3N1bSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnYWRkJywgJz9iaWdudW1iZXInLCAnP2ZyYWN0aW9uJ107XG52YXIgY3JlYXRlU3VtID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgYWRkID0gX3JlZi5hZGQsXG4gICAgICBiaWdudW1iZXIgPSBfcmVmLmJpZ251bWJlcixcbiAgICAgIGZyYWN0aW9uID0gX3JlZi5mcmFjdGlvbjtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgc3VtIG9mIGEgbWF0cml4IG9yIGEgbGlzdCB3aXRoIHZhbHVlcy5cbiAgICogSW4gY2FzZSBvZiBhIChtdWx0aSBkaW1lbnNpb25hbCkgYXJyYXkgb3IgbWF0cml4LCB0aGUgc3VtIG9mIGFsbFxuICAgKiBlbGVtZW50cyB3aWxsIGJlIGNhbGN1bGF0ZWQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguc3VtKGEsIGIsIGMsIC4uLilcbiAgICogICAgIG1hdGguc3VtKEEpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5zdW0oMiwgMSwgNCwgMykgICAgICAgICAgICAgICAvLyByZXR1cm5zIDEwXG4gICAqICAgICBtYXRoLnN1bShbMiwgMSwgNCwgM10pICAgICAgICAgICAgIC8vIHJldHVybnMgMTBcbiAgICogICAgIG1hdGguc3VtKFtbMiwgNV0sIFs0LCAzXSwgWzEsIDddXSkgLy8gcmV0dXJucyAyMlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbWVhbiwgbWVkaWFuLCBtaW4sIG1heCwgcHJvZCwgc3RkLCB2YXJpYW5jZVxuICAgKlxuICAgKiBAcGFyYW0gey4uLiAqfSBhcmdzICBBIHNpbmdsZSBtYXRyaXggb3Igb3IgbXVsdGlwbGUgc2NhbGFyIHZhbHVlc1xuICAgKiBAcmV0dXJuIHsqfSBUaGUgc3VtIG9mIGFsbCB2YWx1ZXNcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgLy8gc3VtKFthLCBiLCBjLCBkLCAuLi5dKVxuICAgICdBcnJheSB8IE1hdHJpeCc6IF9zdW0sXG4gICAgLy8gc3VtKFthLCBiLCBjLCBkLCAuLi5dLCBkaW0pXG4gICAgJ0FycmF5IHwgTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBfbnN1bURpbSxcbiAgICAvLyBzdW0oYSwgYiwgYywgZCwgLi4uKVxuICAgICcuLi4nOiBmdW5jdGlvbiBfKGFyZ3MpIHtcbiAgICAgIGlmICgoMCwgX2NvbGxlY3Rpb24uY29udGFpbnNDb2xsZWN0aW9ucykoYXJncykpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignU2NhbGFyIHZhbHVlcyBleHBlY3RlZCBpbiBmdW5jdGlvbiBzdW0nKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9zdW0oYXJncyk7XG4gICAgfVxuICB9KTtcbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGNhbGN1bGF0ZSB0aGUgc3VtIG9mIGFuIG4tZGltZW5zaW9uYWwgYXJyYXlcbiAgICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAgICogQHJldHVybiB7bnVtYmVyfSBzdW1cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgZnVuY3Rpb24gX3N1bShhcnJheSkge1xuICAgIHZhciBzdW07XG4gICAgKDAsIF9jb2xsZWN0aW9uLmRlZXBGb3JFYWNoKShhcnJheSwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBzdW0gPSBzdW0gPT09IHVuZGVmaW5lZCA/IHZhbHVlIDogYWRkKHN1bSwgdmFsdWUpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93ICgwLCBfaW1wcm92ZUVycm9yTWVzc2FnZS5pbXByb3ZlRXJyb3JNZXNzYWdlKShlcnIsICdzdW0nLCB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoc3VtID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHN3aXRjaCAoY29uZmlnLm51bWJlcikge1xuICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgIHJldHVybiAwO1xuXG4gICAgICAgIGNhc2UgJ0JpZ051bWJlcic6XG4gICAgICAgICAgcmV0dXJuIGJpZ251bWJlciA/IGJpZ251bWJlcigwKSA6ICgwLCBfbm9vcC5ub0JpZ251bWJlcikoKTtcblxuICAgICAgICBjYXNlICdGcmFjdGlvbic6XG4gICAgICAgICAgcmV0dXJuIGZyYWN0aW9uID8gZnJhY3Rpb24oMCkgOiAoMCwgX25vb3Aubm9GcmFjdGlvbikoKTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAwO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdW07XG4gIH1cblxuICBmdW5jdGlvbiBfbnN1bURpbShhcnJheSwgZGltKSB7XG4gICAgdHJ5IHtcbiAgICAgIHZhciBzdW0gPSAoMCwgX2NvbGxlY3Rpb24ucmVkdWNlKShhcnJheSwgZGltLCBhZGQpO1xuICAgICAgcmV0dXJuIHN1bTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93ICgwLCBfaW1wcm92ZUVycm9yTWVzc2FnZS5pbXByb3ZlRXJyb3JNZXNzYWdlKShlcnIsICdzdW0nKTtcbiAgICB9XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVTdW0gPSBjcmVhdGVTdW07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmltcHJvdmVFcnJvck1lc3NhZ2UgPSBpbXByb3ZlRXJyb3JNZXNzYWdlO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2lzXCIpO1xuXG4vKipcbiAqIEltcHJvdmUgZXJyb3IgbWVzc2FnZXMgZm9yIHN0YXRpc3RpY3MgZnVuY3Rpb25zLiBFcnJvcnMgYXJlIHR5cGljYWxseVxuICogdGhyb3duIGluIGFuIGludGVybmFsbHkgdXNlZCBmdW5jdGlvbiBsaWtlIGxhcmdlciwgY2F1c2luZyB0aGUgZXJyb3JcbiAqIG5vdCB0byBtZW50aW9uIHRoZSBmdW5jdGlvbiAobGlrZSBtYXgpIHdoaWNoIGlzIGFjdHVhbGx5IHVzZWQgYnkgdGhlIHVzZXIuXG4gKlxuICogQHBhcmFtIHtFcnJvcn0gZXJyXG4gKiBAcGFyYW0ge1N0cmluZ30gZm5OYW1lXG4gKiBAcGFyYW0geyp9IFt2YWx1ZV1cbiAqIEByZXR1cm4ge0Vycm9yfVxuICovXG5mdW5jdGlvbiBpbXByb3ZlRXJyb3JNZXNzYWdlKGVyciwgZm5OYW1lLCB2YWx1ZSkge1xuICAvLyBUT0RPOiBhZGQgaW5mb3JtYXRpb24gd2l0aCB0aGUgaW5kZXggKGFsc28gbmVlZHMgdHJhbnNmb3JtIGluIGV4cHJlc3Npb24gcGFyc2VyKVxuICB2YXIgZGV0YWlscztcblxuICBpZiAoU3RyaW5nKGVycikuaW5kZXhPZignVW5leHBlY3RlZCB0eXBlJykgIT09IC0xKSB7XG4gICAgZGV0YWlscyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gJyAodHlwZTogJyArICgwLCBfaXMudHlwZU9mKSh2YWx1ZSkgKyAnLCB2YWx1ZTogJyArIEpTT04uc3RyaW5naWZ5KHZhbHVlKSArICcpJyA6ICcgKHR5cGU6ICcgKyBlcnIuZGF0YS5hY3R1YWwgKyAnKSc7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgJyArIGZuTmFtZSArICcsIHVuZXhwZWN0ZWQgdHlwZSBvZiBhcmd1bWVudCcgKyBkZXRhaWxzKTtcbiAgfVxuXG4gIGlmIChTdHJpbmcoZXJyKS5pbmRleE9mKCdjb21wbGV4IG51bWJlcnMnKSAhPT0gLTEpIHtcbiAgICBkZXRhaWxzID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyAnICh0eXBlOiAnICsgKDAsIF9pcy50eXBlT2YpKHZhbHVlKSArICcsIHZhbHVlOiAnICsgSlNPTi5zdHJpbmdpZnkodmFsdWUpICsgJyknIDogJyc7XG4gICAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjYWxjdWxhdGUgJyArIGZuTmFtZSArICcsIG5vIG9yZGVyaW5nIHJlbGF0aW9uIGlzIGRlZmluZWQgZm9yIGNvbXBsZXggbnVtYmVycycgKyBkZXRhaWxzKTtcbiAgfVxuXG4gIHJldHVybiBlcnI7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZURlcHJlY2F0ZWRWYXIgPSBleHBvcnRzLmNyZWF0ZVZhcmlhbmNlID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfaW1wcm92ZUVycm9yTWVzc2FnZSA9IHJlcXVpcmUoXCIuL3V0aWxzL2ltcHJvdmVFcnJvck1lc3NhZ2VcIik7XG5cbnZhciBfbG9nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2xvZ1wiKTtcblxudmFyIERFRkFVTFRfTk9STUFMSVpBVElPTiA9ICd1bmJpYXNlZCc7XG52YXIgbmFtZSA9ICd2YXJpYW5jZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdhZGQnLCAnc3VidHJhY3QnLCAnbXVsdGlwbHknLCAnZGl2aWRlJywgJ2FwcGx5JywgJ2lzTmFOJ107XG52YXIgY3JlYXRlVmFyaWFuY2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgYWRkID0gX3JlZi5hZGQsXG4gICAgICBzdWJ0cmFjdCA9IF9yZWYuc3VidHJhY3QsXG4gICAgICBtdWx0aXBseSA9IF9yZWYubXVsdGlwbHksXG4gICAgICBkaXZpZGUgPSBfcmVmLmRpdmlkZSxcbiAgICAgIGFwcGx5ID0gX3JlZi5hcHBseSxcbiAgICAgIGlzTmFOID0gX3JlZi5pc05hTjtcblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgdmFyaWFuY2Ugb2YgYSBtYXRyaXggb3IgYSAgbGlzdCB3aXRoIHZhbHVlcy5cbiAgICogSW4gY2FzZSBvZiBhIChtdWx0aSBkaW1lbnNpb25hbCkgYXJyYXkgb3IgbWF0cml4LCB0aGUgdmFyaWFuY2Ugb3ZlciBhbGxcbiAgICogZWxlbWVudHMgd2lsbCBiZSBjYWxjdWxhdGVkLlxuICAgKlxuICAgKiBBZGRpdGlvbmFsbHksIGl0IGlzIHBvc3NpYmxlIHRvIGNvbXB1dGUgdGhlIHZhcmlhbmNlIGFsb25nIHRoZSByb3dzXG4gICAqIG9yIGNvbHVtbnMgb2YgYSBtYXRyaXggYnkgc3BlY2lmeWluZyB0aGUgZGltZW5zaW9uIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQuXG4gICAqXG4gICAqIE9wdGlvbmFsbHksIHRoZSB0eXBlIG9mIG5vcm1hbGl6YXRpb24gY2FuIGJlIHNwZWNpZmllZCBhcyB0aGUgZmluYWxcbiAgICogcGFyYW1ldGVyLiBUaGUgcGFyYW1ldGVyIGBub3JtYWxpemF0aW9uYCBjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOlxuICAgKlxuICAgKiAtICd1bmJpYXNlZCcgKGRlZmF1bHQpIFRoZSBzdW0gb2Ygc3F1YXJlZCBlcnJvcnMgaXMgZGl2aWRlZCBieSAobiAtIDEpXG4gICAqIC0gJ3VuY29ycmVjdGVkJyAgICAgICAgVGhlIHN1bSBvZiBzcXVhcmVkIGVycm9ycyBpcyBkaXZpZGVkIGJ5IG5cbiAgICogLSAnYmlhc2VkJyAgICAgICAgICAgICBUaGUgc3VtIG9mIHNxdWFyZWQgZXJyb3JzIGlzIGRpdmlkZWQgYnkgKG4gKyAxKVxuICAgKlxuICAgKlxuICAgKiBOb3RlIHRoYXQgb2xkZXIgYnJvd3NlciBtYXkgbm90IGxpa2UgdGhlIHZhcmlhYmxlIG5hbWUgYHZhcmAuIEluIHRoYXRcbiAgICogY2FzZSwgdGhlIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgYXMgYG1hdGhbJ3ZhciddKC4uLilgIGluc3RlYWQgb2ZcbiAgICogYG1hdGgudmFyKC4uLilgLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLnZhcmlhbmNlKGEsIGIsIGMsIC4uLilcbiAgICogICAgIG1hdGgudmFyaWFuY2UoQSlcbiAgICogICAgIG1hdGgudmFyaWFuY2UoQSwgbm9ybWFsaXphdGlvbilcbiAgICogICAgIG1hdGgudmFyaWFuY2UoQSwgZGltZW5zaW9uKVxuICAgKiAgICAgbWF0aC52YXJpYW5jZShBLCBkaW1lbnNpb24sIG5vcm1hbGl6YXRpb24pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC52YXJpYW5jZSgyLCA0LCA2KSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgNFxuICAgKiAgICAgbWF0aC52YXJpYW5jZShbMiwgNCwgNiwgOF0pICAgICAgICAgICAgICAgIC8vIHJldHVybnMgNi42NjY2NjY2NjY2NjY2NjdcbiAgICogICAgIG1hdGgudmFyaWFuY2UoWzIsIDQsIDYsIDhdLCAndW5jb3JyZWN0ZWQnKSAvLyByZXR1cm5zIDVcbiAgICogICAgIG1hdGgudmFyaWFuY2UoWzIsIDQsIDYsIDhdLCAnYmlhc2VkJykgICAgICAvLyByZXR1cm5zIDRcbiAgICpcbiAgICogICAgIG1hdGgudmFyaWFuY2UoW1sxLCAyLCAzXSwgWzQsIDUsIDZdXSkgICAgICAvLyByZXR1cm5zIDMuNVxuICAgKiAgICAgbWF0aC52YXJpYW5jZShbWzEsIDIsIDNdLCBbNCwgNiwgOF1dLCAwKSAgIC8vIHJldHVybnMgWzQuNSwgOCwgMTIuNV1cbiAgICogICAgIG1hdGgudmFyaWFuY2UoW1sxLCAyLCAzXSwgWzQsIDYsIDhdXSwgMSkgICAvLyByZXR1cm5zIFsxLCA0XVxuICAgKiAgICAgbWF0aC52YXJpYW5jZShbWzEsIDIsIDNdLCBbNCwgNiwgOF1dLCAxLCAnYmlhc2VkJykgLy8gcmV0dXJucyBbMC41LCAyXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgbWVhbiwgbWVkaWFuLCBtYXgsIG1pbiwgcHJvZCwgc3RkLCBzdW1cbiAgICpcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeH0gYXJyYXlcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBBIHNpbmdsZSBtYXRyaXggb3Igb3IgbXVsdGlwbGUgc2NhbGFyIHZhbHVlc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW25vcm1hbGl6YXRpb249J3VuYmlhc2VkJ11cbiAgICogICAgICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIGhvdyB0byBub3JtYWxpemUgdGhlIHZhcmlhbmNlLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgIENob29zZSAndW5iaWFzZWQnIChkZWZhdWx0KSwgJ3VuY29ycmVjdGVkJywgb3IgJ2JpYXNlZCcuXG4gICAqIEBwYXJhbSBkaW1lbnNpb24ge251bWJlciB8IEJpZ051bWJlcn1cbiAgICogICAgICAgICAgICAgICAgICAgICAgICBEZXRlcm1pbmVzIHRoZSBheGlzIHRvIGNvbXB1dGUgdGhlIHZhcmlhbmNlIGZvciBhIG1hdHJpeFxuICAgKiBAcmV0dXJuIHsqfSBUaGUgdmFyaWFuY2VcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgLy8gdmFyaWFuY2UoW2EsIGIsIGMsIGQsIC4uLl0pXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoYXJyYXkpIHtcbiAgICAgIHJldHVybiBfdmFyKGFycmF5LCBERUZBVUxUX05PUk1BTElaQVRJT04pO1xuICAgIH0sXG4gICAgLy8gdmFyaWFuY2UoW2EsIGIsIGMsIGQsIC4uLl0sIG5vcm1hbGl6YXRpb24pXG4gICAgJ0FycmF5IHwgTWF0cml4LCBzdHJpbmcnOiBfdmFyLFxuICAgIC8vIHZhcmlhbmNlKFthLCBiLCBjLCBjLCAuLi5dLCBkaW0pXG4gICAgJ0FycmF5IHwgTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheU1hdHJpeE51bWJlckJpZ051bWJlcihhcnJheSwgZGltKSB7XG4gICAgICByZXR1cm4gX3ZhckRpbShhcnJheSwgZGltLCBERUZBVUxUX05PUk1BTElaQVRJT04pO1xuICAgIH0sXG4gICAgLy8gdmFyaWFuY2UoW2EsIGIsIGMsIGMsIC4uLl0sIGRpbSwgbm9ybWFsaXphdGlvbilcbiAgICAnQXJyYXkgfCBNYXRyaXgsIG51bWJlciB8IEJpZ051bWJlciwgc3RyaW5nJzogX3ZhckRpbSxcbiAgICAvLyB2YXJpYW5jZShhLCBiLCBjLCBkLCAuLi4pXG4gICAgJy4uLic6IGZ1bmN0aW9uIF8oYXJncykge1xuICAgICAgcmV0dXJuIF92YXIoYXJncywgREVGQVVMVF9OT1JNQUxJWkFUSU9OKTtcbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogUmVjdXJzaXZlbHkgY2FsY3VsYXRlIHRoZSB2YXJpYW5jZSBvZiBhbiBuLWRpbWVuc2lvbmFsIGFycmF5XG4gICAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBub3JtYWxpemF0aW9uXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgRGV0ZXJtaW5lcyBob3cgdG8gbm9ybWFsaXplIHRoZSB2YXJpYW5jZTpcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAtICd1bmJpYXNlZCcgICAgVGhlIHN1bSBvZiBzcXVhcmVkIGVycm9ycyBpcyBkaXZpZGVkIGJ5IChuIC0gMSlcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAtICd1bmNvcnJlY3RlZCcgVGhlIHN1bSBvZiBzcXVhcmVkIGVycm9ycyBpcyBkaXZpZGVkIGJ5IG5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAtICdiaWFzZWQnICAgICAgVGhlIHN1bSBvZiBzcXVhcmVkIGVycm9ycyBpcyBkaXZpZGVkIGJ5IChuICsgMSlcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyfSB2YXJpYW5jZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBmdW5jdGlvbiBfdmFyKGFycmF5LCBub3JtYWxpemF0aW9uKSB7XG4gICAgdmFyIHN1bSA9IDA7XG4gICAgdmFyIG51bSA9IDA7XG5cbiAgICBpZiAoYXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0Z1bmN0aW9uIHZhcmlhbmNlIHJlcXVpcmVzIG9uZSBvciBtb3JlIHBhcmFtZXRlcnMgKDAgcHJvdmlkZWQpJyk7XG4gICAgfSAvLyBjYWxjdWxhdGUgdGhlIG1lYW4gYW5kIG51bWJlciBvZiBlbGVtZW50c1xuXG5cbiAgICAoMCwgX2NvbGxlY3Rpb24uZGVlcEZvckVhY2gpKGFycmF5LCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHN1bSA9IGFkZChzdW0sIHZhbHVlKTtcbiAgICAgICAgbnVtKys7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgKDAsIF9pbXByb3ZlRXJyb3JNZXNzYWdlLmltcHJvdmVFcnJvck1lc3NhZ2UpKGVyciwgJ3ZhcmlhbmNlJywgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChudW0gPT09IDApIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSB2YXJpYW5jZSBvZiBhbiBlbXB0eSBhcnJheScpO1xuICAgIHZhciBtZWFuID0gZGl2aWRlKHN1bSwgbnVtKTsgLy8gY2FsY3VsYXRlIHRoZSB2YXJpYW5jZVxuXG4gICAgc3VtID0gMDtcbiAgICAoMCwgX2NvbGxlY3Rpb24uZGVlcEZvckVhY2gpKGFycmF5LCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHZhciBkaWZmID0gc3VidHJhY3QodmFsdWUsIG1lYW4pO1xuICAgICAgc3VtID0gYWRkKHN1bSwgbXVsdGlwbHkoZGlmZiwgZGlmZikpO1xuICAgIH0pO1xuXG4gICAgaWYgKGlzTmFOKHN1bSkpIHtcbiAgICAgIHJldHVybiBzdW07XG4gICAgfVxuXG4gICAgc3dpdGNoIChub3JtYWxpemF0aW9uKSB7XG4gICAgICBjYXNlICd1bmNvcnJlY3RlZCc6XG4gICAgICAgIHJldHVybiBkaXZpZGUoc3VtLCBudW0pO1xuXG4gICAgICBjYXNlICdiaWFzZWQnOlxuICAgICAgICByZXR1cm4gZGl2aWRlKHN1bSwgbnVtICsgMSk7XG5cbiAgICAgIGNhc2UgJ3VuYmlhc2VkJzpcbiAgICAgICAge1xuICAgICAgICAgIHZhciB6ZXJvID0gKDAsIF9pcy5pc0JpZ051bWJlcikoc3VtKSA/IHN1bS5tdWwoMCkgOiAwO1xuICAgICAgICAgIHJldHVybiBudW0gPT09IDEgPyB6ZXJvIDogZGl2aWRlKHN1bSwgbnVtIC0gMSk7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIG5vcm1hbGl6YXRpb24gXCInICsgbm9ybWFsaXphdGlvbiArICdcIi4gJyArICdDaG9vc2UgXCJ1bmJpYXNlZFwiIChkZWZhdWx0KSwgXCJ1bmNvcnJlY3RlZFwiLCBvciBcImJpYXNlZFwiLicpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIF92YXJEaW0oYXJyYXksIGRpbSwgbm9ybWFsaXphdGlvbikge1xuICAgIHRyeSB7XG4gICAgICBpZiAoYXJyYXkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignRnVuY3Rpb24gdmFyaWFuY2UgcmVxdWlyZXMgb25lIG9yIG1vcmUgcGFyYW1ldGVycyAoMCBwcm92aWRlZCknKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFwcGx5KGFycmF5LCBkaW0sIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgIHJldHVybiBfdmFyKHgsIG5vcm1hbGl6YXRpb24pO1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyAoMCwgX2ltcHJvdmVFcnJvck1lc3NhZ2UuaW1wcm92ZUVycm9yTWVzc2FnZSkoZXJyLCAndmFyaWFuY2UnKTtcbiAgICB9XG4gIH1cbn0pOyAvLyBGb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgZGVwcmVjYXRlZCBzaW5jZSB2ZXJzaW9uIDYuMC4wLiBEYXRlOiAyMDE4LTExLTA5XG5cbmV4cG9ydHMuY3JlYXRlVmFyaWFuY2UgPSBjcmVhdGVWYXJpYW5jZTtcbnZhciBjcmVhdGVEZXByZWNhdGVkVmFyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKCd2YXInLCBbJ3ZhcmlhbmNlJ10sIGZ1bmN0aW9uIChfcmVmMikge1xuICB2YXIgdmFyaWFuY2UgPSBfcmVmMi52YXJpYW5jZTtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAoMCwgX2xvZy53YXJuT25jZSkoJ0Z1bmN0aW9uIFwidmFyXCIgaGFzIGJlZW4gcmVuYW1lZCB0byBcInZhcmlhbmNlXCIgaW4gdjYuMC4wLCBwbGVhc2UgdXNlIHRoZSBuZXcgZnVuY3Rpb24gaW5zdGVhZC4nKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFyaWFuY2UuYXBwbHkodmFyaWFuY2UsIGFyZ3MpO1xuICB9O1xufSk7XG5leHBvcnRzLmNyZWF0ZURlcHJlY2F0ZWRWYXIgPSBjcmVhdGVEZXByZWNhdGVkVmFyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVGb3JtYXQgPSB2b2lkIDA7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3N0cmluZ1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2Zvcm1hdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUZvcm1hdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBhIHZhbHVlIG9mIGFueSB0eXBlIGludG8gYSBzdHJpbmcuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5mb3JtYXQodmFsdWUpXG4gICAqICAgIG1hdGguZm9ybWF0KHZhbHVlLCBvcHRpb25zKVxuICAgKiAgICBtYXRoLmZvcm1hdCh2YWx1ZSwgcHJlY2lzaW9uKVxuICAgKiAgICBtYXRoLmZvcm1hdCh2YWx1ZSwgY2FsbGJhY2spXG4gICAqXG4gICAqIFdoZXJlOlxuICAgKlxuICAgKiAgLSBgdmFsdWU6ICpgXG4gICAqICAgIFRoZSB2YWx1ZSB0byBiZSBmb3JtYXR0ZWRcbiAgICogIC0gYG9wdGlvbnM6IE9iamVjdGBcbiAgICogICAgQW4gb2JqZWN0IHdpdGggZm9ybWF0dGluZyBvcHRpb25zLiBBdmFpbGFibGUgb3B0aW9uczpcbiAgICogICAgLSBgbm90YXRpb246IHN0cmluZ2BcbiAgICogICAgICBOdW1iZXIgbm90YXRpb24uIENob29zZSBmcm9tOlxuICAgKiAgICAgIC0gJ2ZpeGVkJ1xuICAgKiAgICAgICAgQWx3YXlzIHVzZSByZWd1bGFyIG51bWJlciBub3RhdGlvbi5cbiAgICogICAgICAgIEZvciBleGFtcGxlICcxMjMuNDAnIGFuZCAnMTQwMDAwMDAnXG4gICAqICAgICAgLSAnZXhwb25lbnRpYWwnXG4gICAqICAgICAgICBBbHdheXMgdXNlIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxuICAgKiAgICAgICAgRm9yIGV4YW1wbGUgJzEuMjM0ZSsyJyBhbmQgJzEuNGUrNydcbiAgICogICAgICAtICdlbmdpbmVlcmluZydcbiAgICogICAgICAgIEFsd2F5cyB1c2UgZW5naW5lZXJpbmcgbm90YXRpb246IGFsd2F5cyBoYXZlIGV4cG9uZW50aWFsIG5vdGF0aW9uLFxuICAgKiAgICAgICAgYW5kIHNlbGVjdCB0aGUgZXhwb25lbnQgdG8gYmUgYSBtdWx0aXBsZSBvZiAzLlxuICAgKiAgICAgICAgRm9yIGV4YW1wbGUgJzEyMy40ZSswJyBhbmQgJzE0LjBlKzYnXG4gICAqICAgICAgLSAnYXV0bycgKGRlZmF1bHQpXG4gICAqICAgICAgICBSZWd1bGFyIG51bWJlciBub3RhdGlvbiBmb3IgbnVtYmVycyBoYXZpbmcgYW4gYWJzb2x1dGUgdmFsdWUgYmV0d2VlblxuICAgKiAgICAgICAgYGxvd2VyYCBhbmQgYHVwcGVyYCBib3VuZHMsIGFuZCB1c2VzIGV4cG9uZW50aWFsIG5vdGF0aW9uIGVsc2V3aGVyZS5cbiAgICogICAgICAgIExvd2VyIGJvdW5kIGlzIGluY2x1ZGVkLCB1cHBlciBib3VuZCBpcyBleGNsdWRlZC5cbiAgICogICAgICAgIEZvciBleGFtcGxlICcxMjMuNCcgYW5kICcxLjRlNycuXG4gICAqICAgIC0gYHByZWNpc2lvbjogbnVtYmVyYFxuICAgKiAgICAgIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMTYgdG8gcm91bmQgdGhlIGRpZ2l0cyBvZiB0aGUgbnVtYmVyLiBJbiBjYXNlXG4gICAqICAgICAgb2Ygbm90YXRpb25zICdleHBvbmVudGlhbCcsICdlbmdpbmVlcmluZycsIGFuZCAnYXV0bycsIGBwcmVjaXNpb25gXG4gICAqICAgICAgZGVmaW5lcyB0aGUgdG90YWwgbnVtYmVyIG9mIHNpZ25pZmljYW50IGRpZ2l0cyByZXR1cm5lZC5cbiAgICogICAgICBJbiBjYXNlIG9mIG5vdGF0aW9uICdmaXhlZCcsIGBwcmVjaXNpb25gIGRlZmluZXMgdGhlIG51bWJlciBvZlxuICAgKiAgICAgIHNpZ25pZmljYW50IGRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC5cbiAgICogICAgICBgcHJlY2lzaW9uYCBpcyB1bmRlZmluZWQgYnkgZGVmYXVsdC5cbiAgICogICAgLSBgbG93ZXJFeHA6IG51bWJlcmBcbiAgICogICAgICBFeHBvbmVudCBkZXRlcm1pbmluZyB0aGUgbG93ZXIgYm91bmRhcnkgZm9yIGZvcm1hdHRpbmcgYSB2YWx1ZSB3aXRoXG4gICAqICAgICAgYW4gZXhwb25lbnQgd2hlbiBgbm90YXRpb249J2F1dG9gLiBEZWZhdWx0IHZhbHVlIGlzIGAtM2AuXG4gICAqICAgIC0gYHVwcGVyRXhwOiBudW1iZXJgXG4gICAqICAgICAgRXhwb25lbnQgZGV0ZXJtaW5pbmcgdGhlIHVwcGVyIGJvdW5kYXJ5IGZvciBmb3JtYXR0aW5nIGEgdmFsdWUgd2l0aFxuICAgKiAgICAgIGFuIGV4cG9uZW50IHdoZW4gYG5vdGF0aW9uPSdhdXRvYC4gRGVmYXVsdCB2YWx1ZSBpcyBgNWAuXG4gICAqICAgIC0gYGZyYWN0aW9uOiBzdHJpbmdgLiBBdmFpbGFibGUgdmFsdWVzOiAncmF0aW8nIChkZWZhdWx0KSBvciAnZGVjaW1hbCcuXG4gICAqICAgICAgRm9yIGV4YW1wbGUgYGZvcm1hdChmcmFjdGlvbigxLCAzKSlgIHdpbGwgb3V0cHV0ICcxLzMnIHdoZW4gJ3JhdGlvJyBpc1xuICAgKiAgICAgIGNvbmZpZ3VyZWQsIGFuZCB3aWxsIG91dHB1dCBgMC4oMylgIHdoZW4gJ2RlY2ltYWwnIGlzIGNvbmZpZ3VyZWQuXG4gICAqIC0gYGNhbGxiYWNrOiBmdW5jdGlvbmBcbiAgICogICBBIGN1c3RvbSBmb3JtYXR0aW5nIGZ1bmN0aW9uLCBpbnZva2VkIGZvciBhbGwgbnVtZXJpYyBlbGVtZW50cyBpbiBgdmFsdWVgLFxuICAgKiAgIGZvciBleGFtcGxlIGFsbCBlbGVtZW50cyBvZiBhIG1hdHJpeCwgb3IgdGhlIHJlYWwgYW5kIGltYWdpbmFyeVxuICAgKiAgIHBhcnRzIG9mIGEgY29tcGxleCBudW1iZXIuIFRoaXMgY2FsbGJhY2sgY2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlXG4gICAqICAgYnVpbHQtaW4gbnVtZXJpYyBub3RhdGlvbiB3aXRoIGFueSB0eXBlIG9mIGZvcm1hdHRpbmcuIEZ1bmN0aW9uIGBjYWxsYmFja2BcbiAgICogICBpcyBjYWxsZWQgd2l0aCBgdmFsdWVgIGFzIHBhcmFtZXRlciBhbmQgbXVzdCByZXR1cm4gYSBzdHJpbmcuXG4gICAqXG4gICAqIFdoZW4gYHZhbHVlYCBpcyBhbiBPYmplY3Q6XG4gICAqXG4gICAqIC0gV2hlbiB0aGUgb2JqZWN0IGNvbnRhaW5zIGEgcHJvcGVydHkgYGZvcm1hdGAgYmVpbmcgYSBmdW5jdGlvbiwgdGhpcyBmdW5jdGlvblxuICAgKiAgIGlzIGludm9rZWQgYXMgYHZhbHVlLmZvcm1hdChvcHRpb25zKWAgYW5kIHRoZSByZXN1bHQgaXMgcmV0dXJuZWQuXG4gICAqIC0gV2hlbiB0aGUgb2JqZWN0IGhhcyBpdHMgb3duIGB0b1N0cmluZ2AgbWV0aG9kLCB0aGlzIG1ldGhvZCBpcyBpbnZva2VkXG4gICAqICAgYW5kIHRoZSByZXN1bHQgaXMgcmV0dXJuZWQuXG4gICAqIC0gSW4gb3RoZXIgY2FzZXMgdGhlIGZ1bmN0aW9uIHdpbGwgbG9vcCBvdmVyIGFsbCBvYmplY3QgcHJvcGVydGllcyBhbmRcbiAgICogICByZXR1cm4gSlNPTiBvYmplY3Qgbm90YXRpb24gbGlrZSAne1wiYVwiOiAyLCBcImJcIjogM30nLlxuICAgKlxuICAgKiBXaGVuIHZhbHVlIGlzIGEgZnVuY3Rpb246XG4gICAqXG4gICAqIC0gV2hlbiB0aGUgZnVuY3Rpb24gaGFzIGEgcHJvcGVydHkgYHN5bnRheGAsIGl0IHJldHVybnMgdGhpc1xuICAgKiAgIHN5bnRheCBkZXNjcmlwdGlvbi5cbiAgICogLSBJbiBvdGhlciBjYXNlcywgYSBzdHJpbmcgYCdmdW5jdGlvbidgIGlzIHJldHVybmVkLlxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5mb3JtYXQoNi40KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zICc2LjQnXG4gICAqICAgIG1hdGguZm9ybWF0KDEyNDAwMDApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAnMS4yNGU2J1xuICAgKiAgICBtYXRoLmZvcm1hdCgxLzMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgJzAuMzMzMzMzMzMzMzMzMzMzMydcbiAgICogICAgbWF0aC5mb3JtYXQoMS8zLCAzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zICcwLjMzMydcbiAgICogICAgbWF0aC5mb3JtYXQoMjEzODUsIDIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zICcyMTAwMCdcbiAgICogICAgbWF0aC5mb3JtYXQoMTJlOCwge25vdGF0aW9uOiAnZml4ZWQnfSkgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zICcxMjAwMDAwMDAwJ1xuICAgKiAgICBtYXRoLmZvcm1hdCgyLjMsICB7bm90YXRpb246ICdmaXhlZCcsIHByZWNpc2lvbjogNH0pICAgIC8vIHJldHVybnMgJzIuMzAwMCdcbiAgICogICAgbWF0aC5mb3JtYXQoNTIuOCwge25vdGF0aW9uOiAnZXhwb25lbnRpYWwnfSkgICAgICAgICAgICAvLyByZXR1cm5zICc1LjI4ZSsxJ1xuICAgKiAgICBtYXRoLmZvcm1hdCgxMjQwMCx7bm90YXRpb246ICdlbmdpbmVlcmluZyd9KSAgICAgICAgICAgIC8vIHJldHVybnMgJzEyLjQwMGUrMydcbiAgICogICAgbWF0aC5mb3JtYXQoMjAwMCwge2xvd2VyRXhwOiAtMiwgdXBwZXJFeHA6IDJ9KSAgICAgICAgICAvLyByZXR1cm5zICcyZSszJ1xuICAgKlxuICAgKiAgICBmdW5jdGlvbiBmb3JtYXRDdXJyZW5jeSh2YWx1ZSkge1xuICAgKiAgICAgIC8vIHJldHVybiBjdXJyZW5jeSBub3RhdGlvbiB3aXRoIHR3byBkaWdpdHM6XG4gICAqICAgICAgcmV0dXJuICckJyArIHZhbHVlLnRvRml4ZWQoMilcbiAgICpcbiAgICogICAgICAvLyB5b3UgY291bGQgYWxzbyB1c2UgbWF0aC5mb3JtYXQgaW5zaWRlIHRoZSBjYWxsYmFjazpcbiAgICogICAgICAvLyByZXR1cm4gJyQnICsgbWF0aC5mb3JtYXQodmFsdWUsIHtub3RhdGlvbjogJ2ZpeGVkJywgcHJlY2lzaW9uOiAyfSlcbiAgICogICAgfVxuICAgKiAgICBtYXRoLmZvcm1hdChbMi4xLCAzLCAwLjAxNl0sIGZvcm1hdEN1cnJlbmN5fSAgICAgICAgICAgIC8vIHJldHVybnMgJ1skMi4xMCwgJDMuMDAsICQwLjAyXSdcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHByaW50XG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsdWUgdG8gYmUgc3RyaW5naWZpZWRcbiAgICogQHBhcmFtIHtPYmplY3QgfCBGdW5jdGlvbiB8IG51bWJlcn0gW29wdGlvbnNdICBGb3JtYXR0aW5nIG9wdGlvbnNcbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHZhbHVlXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIGFueTogX3N0cmluZy5mb3JtYXQsXG4gICAgJ2FueSwgT2JqZWN0IHwgZnVuY3Rpb24gfCBudW1iZXInOiBfc3RyaW5nLmZvcm1hdFxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVGb3JtYXQgPSBjcmVhdGVGb3JtYXQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVByaW50ID0gdm9pZCAwO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdwcmludCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZVByaW50ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogSW50ZXJwb2xhdGUgdmFsdWVzIGludG8gYSBzdHJpbmcgdGVtcGxhdGUuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGgucHJpbnQodGVtcGxhdGUsIHZhbHVlcylcbiAgICogICAgIG1hdGgucHJpbnQodGVtcGxhdGUsIHZhbHVlcywgcHJlY2lzaW9uKVxuICAgKiAgICAgbWF0aC5wcmludCh0ZW1wbGF0ZSwgdmFsdWVzLCBvcHRpb25zKVxuICAgKlxuICAgKiBFeGFtcGxlIHVzYWdlOlxuICAgKlxuICAgKiAgICAgLy8gdGhlIGZvbGxvd2luZyBvdXRwdXRzOiAnTHVjeSBpcyA1IHllYXJzIG9sZCdcbiAgICogICAgIG1hdGgucHJpbnQoJ0x1Y3kgaXMgJGFnZSB5ZWFycyBvbGQnLCB7YWdlOiA1fSlcbiAgICpcbiAgICogICAgIC8vIHRoZSBmb2xsb3dpbmcgb3V0cHV0czogJ1RoZSB2YWx1ZSBvZiBwaSBpcyAzLjE0MTU5MjY1NCdcbiAgICogICAgIG1hdGgucHJpbnQoJ1RoZSB2YWx1ZSBvZiBwaSBpcyAkcGknLCB7cGk6IG1hdGgucGl9LCAxMClcbiAgICpcbiAgICogICAgIC8vIHRoZSBmb2xsb3dpbmcgb3V0cHV0czogJ2hlbGxvIE1hcnkhIFRoZSBkYXRlIGlzIDIwMTMtMDMtMjMnXG4gICAqICAgICBtYXRoLnByaW50KCdIZWxsbyAkdXNlci5uYW1lISBUaGUgZGF0ZSBpcyAkZGF0ZScsIHtcbiAgICogICAgICAgdXNlcjoge1xuICAgKiAgICAgICAgIG5hbWU6ICdNYXJ5JyxcbiAgICogICAgICAgfSxcbiAgICogICAgICAgZGF0ZTogbmV3IERhdGUoMjAxMywgMiwgMjMpLnRvSVNPU3RyaW5nKCkuc3Vic3RyaW5nKDAsIDEwKVxuICAgKiAgICAgfSlcbiAgICpcbiAgICogICAgIC8vIHRoZSBmb2xsb3dpbmcgb3V0cHV0czogJ015IGZhdm9yaXRlIGZydWl0cyBhcmUgYXBwbGVzIGFuZCBiYW5hbmFzICEnXG4gICAqICAgICBtYXRoLnByaW50KCdNeSBmYXZvcml0ZSBmcnVpdHMgYXJlICQwIGFuZCAkMSAhJywgW1xuICAgKiAgICAgICAnYXBwbGVzJyxcbiAgICogICAgICAgJ2JhbmFuYXMnXG4gICAqICAgICBdKVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgIGZvcm1hdFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGVtcGxhdGUgICAgICAgICAgIEEgc3RyaW5nIGNvbnRhaW5pbmcgdmFyaWFibGUgcGxhY2Vob2xkZXJzLlxuICAgKiBAcGFyYW0ge09iamVjdCB8IEFycmF5IHwgTWF0cml4fSAgIHZhbHVlcyBBbiBvYmplY3Qgb3IgYXJyYXkgY29udGFpbmluZyB2YXJpYWJsZXNcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCB3aWxsIGJlIGZpbGxlZCBpbiBpbiB0aGUgdGVtcGxhdGUuXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgT2JqZWN0fSBbb3B0aW9uc10gRm9ybWF0dGluZyBvcHRpb25zLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHRoZSBudW1iZXIgb2YgZGlnaXRzIHRvIGZvcm1hdCBudW1iZXJzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlZSBmdW5jdGlvbiBtYXRoLmZvcm1hdCBmb3IgYSBkZXNjcmlwdGlvblxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGFsbCBvcHRpb25zLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9IEludGVycG9sYXRlZCBzdHJpbmdcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgLy8gbm90ZTogTWF0cml4IHdpbGwgYmUgY29udmVydGVkIGF1dG9tYXRpY2FsbHkgdG8gYW4gQXJyYXlcbiAgICAnc3RyaW5nLCBPYmplY3QgfCBBcnJheSc6IF9wcmludCxcbiAgICAnc3RyaW5nLCBPYmplY3QgfCBBcnJheSwgbnVtYmVyIHwgT2JqZWN0JzogX3ByaW50XG4gIH0pO1xufSk7XG4vKipcbiAqIEludGVycG9sYXRlIHZhbHVlcyBpbnRvIGEgc3RyaW5nIHRlbXBsYXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IHRlbXBsYXRlXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsdWVzXG4gKiBAcGFyYW0ge251bWJlciB8IE9iamVjdH0gW29wdGlvbnNdXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBJbnRlcnBvbGF0ZWQgc3RyaW5nXG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuY3JlYXRlUHJpbnQgPSBjcmVhdGVQcmludDtcblxuZnVuY3Rpb24gX3ByaW50KHRlbXBsYXRlLCB2YWx1ZXMsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UoL1xcJChbXFx3Ll0rKS9nLCBmdW5jdGlvbiAob3JpZ2luYWwsIGtleSkge1xuICAgIHZhciBrZXlzID0ga2V5LnNwbGl0KCcuJyk7XG4gICAgdmFyIHZhbHVlID0gdmFsdWVzW2tleXMuc2hpZnQoKV07XG5cbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyIGsgPSBrZXlzLnNoaWZ0KCk7XG4gICAgICB2YWx1ZSA9IGsgPyB2YWx1ZVtrXSA6IHZhbHVlICsgJy4nO1xuICAgIH1cblxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoISgwLCBfaXMuaXNTdHJpbmcpKHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gKDAsIF9zdHJpbmcuZm9ybWF0KSh2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG9yaWdpbmFsO1xuICB9KTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWNvcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgbmFtZSA9ICdhY29zJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdDb21wbGV4J107XG52YXIgY3JlYXRlQWNvcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIENvbXBsZXggPSBfcmVmLkNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaW52ZXJzZSBjb3NpbmUgb2YgYSB2YWx1ZS5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFjb3MoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYWNvcygwLjUpICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAxLjA0NzE5NzU1MTE5NjU5NzlcbiAgICogICAgbWF0aC5hY29zKG1hdGguY29zKDEuNSkpIC8vIHJldHVybnMgbnVtYmVyIDEuNVxuICAgKlxuICAgKiAgICBtYXRoLmFjb3MoMikgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDAgKyAxLjMxNjk1Nzg5NjkyNDgxNjYgaVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY29zLCBhdGFuLCBhc2luXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBhcmMgY29zaW5lIG9mIHhcbiAgICovXG4gIHZhciBhY29zID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICh4ID49IC0xICYmIHggPD0gMSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguYWNvcyh4KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5hY29zKCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmFjb3MoKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmFjb3MoKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYWNvcyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFjb3M7XG59KTtcbmV4cG9ydHMuY3JlYXRlQWNvcyA9IGNyZWF0ZUFjb3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFjb3NoID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYWNvc2gnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ0NvbXBsZXgnXTtcbnZhciBjcmVhdGVBY29zaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIENvbXBsZXggPSBfcmVmLkNvbXBsZXg7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBhcmNjb3Mgb2YgYSB2YWx1ZSxcbiAgICogZGVmaW5lZCBhcyBgYWNvc2goeCkgPSBsbihzcXJ0KHheMiAtIDEpICsgeClgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYWNvc2goeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYWNvc2goMS41KSAgICAgICAvLyByZXR1cm5zIDAuOTYyNDIzNjUwMTE5MjA2OVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY29zaCwgYXNpbmgsIGF0YW5oXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBIeXBlcmJvbGljIGFyY2Nvc2luZSBvZiB4XG4gICAqL1xuICB2YXIgYWNvc2ggPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgaWYgKHggPj0gMSB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgcmV0dXJuICgwLCBfbnVtYmVyLmFjb3NoTnVtYmVyKSh4KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHggPD0gLTEpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KE1hdGgubG9nKE1hdGguc3FydCh4ICogeCAtIDEpIC0geCksIE1hdGguUEkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoeCwgMCkuYWNvc2goKTtcbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguYWNvc2goKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmFjb3NoKCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGFjb3NoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYWNvc2g7XG59KTtcbmV4cG9ydHMuY3JlYXRlQWNvc2ggPSBjcmVhdGVBY29zaDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWNvdCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2Fjb3QnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlQWNvdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBfQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaW52ZXJzZSBjb3RhbmdlbnQgb2YgYSB2YWx1ZSwgZGVmaW5lZCBhcyBgYWNvdCh4KSA9IGF0YW4oMS94KWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hY290KHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmFjb3QoMC41KSAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC40NjM2NDc2MDkwMDA4MDYxXG4gICAqICAgIG1hdGguYWNvdChtYXRoLmNvdCgxLjUpKSAvLyByZXR1cm5zIG51bWJlciAxLjVcbiAgICpcbiAgICogICAgbWF0aC5hY290KDIpICAgICAgICAgICAgIC8vIHJldHVybnMgQ29tcGxleCAxLjU3MDc5NjMyNjc5NDg5NjYgLTEuMzE2OTU3ODk2OTI0ODE2NiBpXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb3QsIGF0YW5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBhcmMgY290YW5nZW50IG9mIHhcbiAgICovXG4gIHZhciBhY290ID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5hY290TnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguYWNvdCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKDEpLmRpdih4KS5hdGFuKCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGFjb3QpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhY290O1xufSk7XG5leHBvcnRzLmNyZWF0ZUFjb3QgPSBjcmVhdGVBY290OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY290aCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2Fjb3RoJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdDb21wbGV4JywgJ0JpZ051bWJlciddO1xudmFyIGNyZWF0ZUFjb3RoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleCxcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY2NvdGFuZ2VudCBvZiBhIHZhbHVlLFxuICAgKiBkZWZpbmVkIGFzIGBhY290aCh4KSA9IGF0YW5oKDEveCkgPSAobG4oKHgrMSkveCkgKyBsbih4Lyh4LTEpKSkgLyAyYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFjb3RoKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmFjb3RoKDAuNSkgICAgICAgLy8gcmV0dXJucyAwLjgwNDcxODk1NjIxNzA1MDNcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGFjc2NoLCBhc2VjaFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBIeXBlcmJvbGljIGFyY2NvdGFuZ2VudCBvZiB4XG4gICAqL1xuICB2YXIgYWNvdGggPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgaWYgKHggPj0gMSB8fCB4IDw9IC0xIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICByZXR1cm4gKDAsIF9udW1iZXIuYWNvdGhOdW1iZXIpKHgpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoeCwgMCkuYWNvdGgoKTtcbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguYWNvdGgoKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcigxKS5kaXYoeCkuYXRhbmgoKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYWNvdGgpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhY290aDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY290aCA9IGNyZWF0ZUFjb3RoOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY3NjID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnYWNzYyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQ29tcGxleCcsICdCaWdOdW1iZXInXTtcbnZhciBjcmVhdGVBY3NjID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleCxcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIGNvc2VjYW50IG9mIGEgdmFsdWUsIGRlZmluZWQgYXMgYGFjc2MoeCkgPSBhc2luKDEveClgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYWNzYyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hY3NjKDAuNSkgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDAuNTIzNTk4Nzc1NTk4Mjk4OVxuICAgKiAgICBtYXRoLmFjc2MobWF0aC5jc2MoMS41KSkgLy8gcmV0dXJucyBudW1iZXIgfjEuNVxuICAgKlxuICAgKiAgICBtYXRoLmFjc2MoMikgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMS4zMTY5NTc4OTY5MjQ4MTY2IGlcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGNzYywgYXNpbiwgYXNlY1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gVGhlIGFyYyBjb3NlY2FudCBvZiB4XG4gICAqL1xuICB2YXIgYWNzYyA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoeCA8PSAtMSB8fCB4ID49IDEgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiAoMCwgX251bWJlci5hY3NjTnVtYmVyKSh4KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgsIDApLmFjc2MoKTtcbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguYWNzYygpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKDEpLmRpdih4KS5hc2luKCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGFjc2MpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhY3NjO1xufSk7XG5leHBvcnRzLmNyZWF0ZUFjc2MgPSBjcmVhdGVBY3NjOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBY3NjaCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2Fjc2NoJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0JpZ051bWJlciddO1xudmFyIGNyZWF0ZUFjc2NoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY2Nvc2VjYW50IG9mIGEgdmFsdWUsXG4gICAqIGRlZmluZWQgYXMgYGFjc2NoKHgpID0gYXNpbmgoMS94KSA9IGxuKDEveCArIHNxcnQoMS94XjIgKyAxKSlgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYWNzY2goeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYWNzY2goMC41KSAgICAgICAvLyByZXR1cm5zIDEuNDQzNjM1NDc1MTc4ODEwM1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYXNlY2gsIGFjb3RoXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgYXJjY29zZWNhbnQgb2YgeFxuICAgKi9cbiAgdmFyIGFjc2NoID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5hY3NjaE51bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmFjc2NoKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoMSkuZGl2KHgpLmFzaW5oKCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGFjc2NoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYWNzY2g7XG59KTtcbmV4cG9ydHMuY3JlYXRlQWNzY2ggPSBjcmVhdGVBY3NjaDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQXNlYyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2FzZWMnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ0NvbXBsZXgnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlQXNlYyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBjb25maWcgPSBfcmVmLmNvbmZpZyxcbiAgICAgIENvbXBsZXggPSBfcmVmLkNvbXBsZXgsXG4gICAgICBfQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaW52ZXJzZSBzZWNhbnQgb2YgYSB2YWx1ZS4gRGVmaW5lZCBhcyBgYXNlYyh4KSA9IGFjb3MoMS94KWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hc2VjKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmFzZWMoMC41KSAgICAgICAgICAgLy8gcmV0dXJucyAxLjA0NzE5NzU1MTE5NjU5NzlcbiAgICogICAgbWF0aC5hc2VjKG1hdGguc2VjKDEuNSkpIC8vIHJldHVybnMgMS41XG4gICAqXG4gICAqICAgIG1hdGguYXNlYygyKSAgICAgICAgICAgICAvLyByZXR1cm5zIDAgKyAxLjMxNjk1Nzg5NjkyNDgxNjYgaVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYWNvcywgYWNvdCwgYWNzY1xuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBUaGUgYXJjIHNlY2FudCBvZiB4XG4gICAqL1xuICB2YXIgYXNlYyA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoeCA8PSAtMSB8fCB4ID49IDEgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiAoMCwgX251bWJlci5hc2VjTnVtYmVyKSh4KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgsIDApLmFzZWMoKTtcbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguYXNlYygpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKDEpLmRpdih4KS5hY29zKCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGFzZWMpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhc2VjO1xufSk7XG5leHBvcnRzLmNyZWF0ZUFzZWMgPSBjcmVhdGVBc2VjOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBc2VjaCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2FzZWNoJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2NvbmZpZycsICdDb21wbGV4JywgJ0JpZ051bWJlciddO1xudmFyIGNyZWF0ZUFzZWNoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleCxcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY3NlY2FudCBvZiBhIHZhbHVlLFxuICAgKiBkZWZpbmVkIGFzIGBhc2VjaCh4KSA9IGFjb3NoKDEveCkgPSBsbihzcXJ0KDEveF4yIC0gMSkgKyAxL3gpYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFzZWNoKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmFzZWNoKDAuNSkgICAgICAgLy8gcmV0dXJucyAxLjMxNjk1Nzg5NjkyNDgxNjZcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGFjc2NoLCBhY290aFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBIeXBlcmJvbGljIGFyY3NlY2FudCBvZiB4XG4gICAqL1xuICB2YXIgYXNlY2ggPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgaWYgKHggPD0gMSAmJiB4ID49IC0xIHx8IGNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgICB2YXIgeEludiA9IDEgLyB4O1xuXG4gICAgICAgIGlmICh4SW52ID4gMCB8fCBjb25maWcucHJlZGljdGFibGUpIHtcbiAgICAgICAgICByZXR1cm4gKDAsIF9udW1iZXIuYXNlY2hOdW1iZXIpKHgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJldCA9IE1hdGguc3FydCh4SW52ICogeEludiAtIDEpO1xuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoTWF0aC5sb2cocmV0IC0geEludiksIE1hdGguUEkpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IENvbXBsZXgoeCwgMCkuYXNlY2goKTtcbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguYXNlY2goKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcigxKS5kaXYoeCkuYWNvc2goKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgYXNlY2gpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhc2VjaDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBc2VjaCA9IGNyZWF0ZUFzZWNoOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBc2luID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ2FzaW4nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnY29uZmlnJywgJ0NvbXBsZXgnXTtcbnZhciBjcmVhdGVBc2luID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIHNpbmUgb2YgYSB2YWx1ZS5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmFzaW4oeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYXNpbigwLjUpICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAwLjUyMzU5ODc3NTU5ODI5ODlcbiAgICogICAgbWF0aC5hc2luKG1hdGguc2luKDEuNSkpIC8vIHJldHVybnMgbnVtYmVyIH4xLjVcbiAgICpcbiAgICogICAgbWF0aC5hc2luKDIpICAgICAgICAgICAgIC8vIHJldHVybnMgQ29tcGxleCAxLjU3MDc5NjMyNjc5NDg5NjYgLTEuMzE2OTU3ODk2OTI0ODE2NiBpXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzaW4sIGF0YW4sIGFjb3NcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBhcmMgc2luZSBvZiB4XG4gICAqL1xuICB2YXIgYXNpbiA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoeCA+PSAtMSAmJiB4IDw9IDEgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiBNYXRoLmFzaW4oeCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbmV3IENvbXBsZXgoeCwgMCkuYXNpbigpO1xuICAgICAgfVxuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hc2luKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5hc2luKCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIGFzaW4oMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGFzaW4sIHRydWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhc2luO1xufSk7XG5leHBvcnRzLmNyZWF0ZUFzaW4gPSBjcmVhdGVBc2luOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBc2luaCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2FzaW5oJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQXNpbmggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjc2luZSBvZiBhIHZhbHVlLFxuICAgKiBkZWZpbmVkIGFzIGBhc2luaCh4KSA9IGxuKHggKyBzcXJ0KHheMiArIDEpKWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hc2luaCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hc2luaCgwLjUpICAgICAgIC8vIHJldHVybnMgMC40ODEyMTE4MjUwNTk2MDM0N1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYWNvc2gsIGF0YW5oXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgYXJjc2luZSBvZiB4XG4gICAqL1xuICB2YXIgYXNpbmggPSB0eXBlZCgnYXNpbmgnLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmFzaW5oTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguYXNpbmgoKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmFzaW5oKCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIGFzaW5oKDApID0gMFxuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBhc2luaCwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGFzaW5oO1xufSk7XG5leHBvcnRzLmNyZWF0ZUFzaW5oID0gY3JlYXRlQXNpbmg7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUF0YW4gPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAnYXRhbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUF0YW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGludmVyc2UgdGFuZ2VudCBvZiBhIHZhbHVlLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYXRhbih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hdGFuKDAuNSkgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDAuNDYzNjQ3NjA5MDAwODA2MVxuICAgKiAgICBtYXRoLmF0YW4obWF0aC50YW4oMS41KSkgLy8gcmV0dXJucyBudW1iZXIgMS41XG4gICAqXG4gICAqICAgIG1hdGguYXRhbigyKSAgICAgICAgICAgICAvLyByZXR1cm5zIENvbXBsZXggMS41NzA3OTYzMjY3OTQ4OTY2IC0xLjMxNjk1Nzg5NjkyNDgxNjYgaVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgdGFuLCBhc2luLCBhY29zXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSB4ICAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBUaGUgYXJjIHRhbmdlbnQgb2YgeFxuICAgKi9cbiAgdmFyIGF0YW4gPSB0eXBlZCgnYXRhbicsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICByZXR1cm4gTWF0aC5hdGFuKHgpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hdGFuKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5hdGFuKCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICAvLyBkZWVwIG1hcCBjb2xsZWN0aW9uLCBza2lwIHplcm9zIHNpbmNlIGF0YW4oMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGF0YW4sIHRydWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhdGFuO1xufSk7XG5leHBvcnRzLmNyZWF0ZUF0YW4gPSBjcmVhdGVBdGFuOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBdGFuMiA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfYWxnb3JpdGhtID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTAyXCIpO1xuXG52YXIgX2FsZ29yaXRobTIgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMDNcIik7XG5cbnZhciBfYWxnb3JpdGhtMyA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0wOVwiKTtcblxudmFyIF9hbGdvcml0aG00ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTExXCIpO1xuXG52YXIgX2FsZ29yaXRobTUgPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTJcIik7XG5cbnZhciBfYWxnb3JpdGhtNiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xM1wiKTtcblxudmFyIF9hbGdvcml0aG03ID0gcmVxdWlyZShcIi4uLy4uL3R5cGUvbWF0cml4L3V0aWxzL2FsZ29yaXRobTE0XCIpO1xuXG52YXIgbmFtZSA9ICdhdGFuMic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdtYXRyaXgnLCAnZXF1YWxTY2FsYXInLCAnQmlnTnVtYmVyJywgJ0RlbnNlTWF0cml4J107XG52YXIgY3JlYXRlQXRhbjIgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXgsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXIsXG4gICAgICBCaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcbiAgdmFyIGFsZ29yaXRobTAyID0gKDAsIF9hbGdvcml0aG0uY3JlYXRlQWxnb3JpdGhtMDIpKHtcbiAgICB0eXBlZDogdHlwZWQsXG4gICAgZXF1YWxTY2FsYXI6IGVxdWFsU2NhbGFyXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMDMgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMDMpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0wOSA9ICgwLCBfYWxnb3JpdGhtMy5jcmVhdGVBbGdvcml0aG0wOSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMSA9ICgwLCBfYWxnb3JpdGhtNC5jcmVhdGVBbGdvcml0aG0xMSkoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBlcXVhbFNjYWxhcjogZXF1YWxTY2FsYXJcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMiA9ICgwLCBfYWxnb3JpdGhtNS5jcmVhdGVBbGdvcml0aG0xMikoe1xuICAgIHR5cGVkOiB0eXBlZCxcbiAgICBEZW5zZU1hdHJpeDogRGVuc2VNYXRyaXhcbiAgfSk7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtNi5jcmVhdGVBbGdvcml0aG0xMykoe1xuICAgIHR5cGVkOiB0eXBlZFxuICB9KTtcbiAgdmFyIGFsZ29yaXRobTE0ID0gKDAsIF9hbGdvcml0aG03LmNyZWF0ZUFsZ29yaXRobTE0KSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBpbnZlcnNlIHRhbmdlbnQgZnVuY3Rpb24gd2l0aCB0d28gYXJndW1lbnRzLCB5L3guXG4gICAqIEJ5IHByb3ZpZGluZyB0d28gYXJndW1lbnRzLCB0aGUgcmlnaHQgcXVhZHJhbnQgb2YgdGhlIGNvbXB1dGVkIGFuZ2xlIGNhbiBiZVxuICAgKiBkZXRlcm1pbmVkLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguYXRhbjIoeSwgeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYXRhbjIoMiwgMikgLyBtYXRoLnBpICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDAuMjVcbiAgICpcbiAgICogICAgY29uc3QgYW5nbGUgPSBtYXRoLnVuaXQoNjAsICdkZWcnKSAvLyByZXR1cm5zIFVuaXQgNjAgZGVnXG4gICAqICAgIGNvbnN0IHggPSBtYXRoLmNvcyhhbmdsZSlcbiAgICogICAgY29uc3QgeSA9IG1hdGguc2luKGFuZ2xlKVxuICAgKlxuICAgKiAgICBtYXRoLmF0YW4oMikgICAgICAgICAgICAgLy8gcmV0dXJucyBDb21wbGV4IDEuNTcwNzk2MzI2Nzk0ODk2NiAtMS4zMTY5NTc4OTY5MjQ4MTY2IGlcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHRhbiwgYXRhbiwgc2luLCBjb3NcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBBcnJheSB8IE1hdHJpeH0geSAgU2Vjb25kIGRpbWVuc2lvblxuICAgKiBAcGFyYW0ge251bWJlciB8IEFycmF5IHwgTWF0cml4fSB4ICBGaXJzdCBkaW1lbnNpb25cbiAgICogQHJldHVybiB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IEZvdXItcXVhZHJhbnQgaW52ZXJzZSB0YW5nZW50XG4gICAqL1xuXG4gIHZhciBhdGFuMiA9IHR5cGVkKG5hbWUsIHtcbiAgICAnbnVtYmVyLCBudW1iZXInOiBNYXRoLmF0YW4yLFxuICAgIC8vIENvbXBsZXggbnVtYmVycyBkb2Vzbid0IHNlZW0gdG8gaGF2ZSBhIHJlYXNvbmFibGUgaW1wbGVtZW50YXRpb24gb2ZcbiAgICAvLyBhdGFuMigpLiBFdmVuIE1hdGxhYiByZW1vdmVkIHRoZSBzdXBwb3J0LCBhZnRlciB0aGV5IG9ubHkgY2FsY3VsYXRlZFxuICAgIC8vIHRoZSBhdGFuIG9ubHkgb24gYmFzZSBvZiB0aGUgcmVhbCBwYXJ0IG9mIHRoZSBudW1iZXJzIGFuZCBpZ25vcmVkIHRoZSBpbWFnaW5hcnkuXG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHksIHgpIHtcbiAgICAgIHJldHVybiBCaWdOdW1iZXIuYXRhbjIoeSwgeCk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBTcGFyc2VNYXRyaXhTcGFyc2VNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTA5KHgsIHksIGF0YW4yLCBmYWxzZSk7XG4gICAgfSxcbiAgICAnU3BhcnNlTWF0cml4LCBEZW5zZU1hdHJpeCc6IGZ1bmN0aW9uIFNwYXJzZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIC8vIG1pbmQgdGhlIG9yZGVyIG9mIHkgYW5kIHghXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDIoeSwgeCwgYXRhbjIsIHRydWUpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBTcGFyc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeFNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMDMoeCwgeSwgYXRhbjIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdEZW5zZU1hdHJpeCwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBEZW5zZU1hdHJpeERlbnNlTWF0cml4KHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCBhdGFuMik7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICByZXR1cm4gYXRhbjIobWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgcmV0dXJuIGF0YW4yKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIHJldHVybiBhdGFuMih4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ1NwYXJzZU1hdHJpeCwgbnVtYmVyIHwgQmlnTnVtYmVyJzogZnVuY3Rpb24gU3BhcnNlTWF0cml4TnVtYmVyQmlnTnVtYmVyKHgsIHkpIHtcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMSh4LCB5LCBhdGFuMiwgZmFsc2UpO1xuICAgIH0sXG4gICAgJ0RlbnNlTWF0cml4LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBEZW5zZU1hdHJpeE51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgYXRhbjIsIGZhbHNlKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIFNwYXJzZU1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlclNwYXJzZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBtaW5kIHRoZSBvcmRlciBvZiB5IGFuZCB4XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTIoeSwgeCwgYXRhbjIsIHRydWUpO1xuICAgIH0sXG4gICAgJ251bWJlciB8IEJpZ051bWJlciwgRGVuc2VNYXRyaXgnOiBmdW5jdGlvbiBudW1iZXJCaWdOdW1iZXJEZW5zZU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBtaW5kIHRoZSBvcmRlciBvZiB5IGFuZCB4XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeSwgeCwgYXRhbjIsIHRydWUpO1xuICAgIH0sXG4gICAgJ0FycmF5LCBudW1iZXIgfCBCaWdOdW1iZXInOiBmdW5jdGlvbiBBcnJheU51bWJlckJpZ051bWJlcih4LCB5KSB7XG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQobWF0cml4KHgpLCB5LCBhdGFuMiwgZmFsc2UpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIsIEFycmF5JzogZnVuY3Rpb24gbnVtYmVyQmlnTnVtYmVyQXJyYXkoeCwgeSkge1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh5KSwgeCwgYXRhbjIsIHRydWUpLnZhbHVlT2YoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYXRhbjI7XG59KTtcbmV4cG9ydHMuY3JlYXRlQXRhbjIgPSBjcmVhdGVBdGFuMjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQXRhbmggPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdhdGFuaCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdjb25maWcnLCAnQ29tcGxleCddO1xudmFyIGNyZWF0ZUF0YW5oID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY3RhbmdlbnQgb2YgYSB2YWx1ZSxcbiAgICogZGVmaW5lZCBhcyBgYXRhbmgoeCkgPSBsbigoMSArIHgpLygxIC0geCkpIC8gMmAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5hdGFuaCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5hdGFuaCgwLjUpICAgICAgIC8vIHJldHVybnMgMC41NDkzMDYxNDQzMzQwNTQ5XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBhY29zaCwgYXNpbmhcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gSHlwZXJib2xpYyBhcmN0YW5nZW50IG9mIHhcbiAgICovXG4gIHZhciBhdGFuaCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gICAgICBpZiAoeCA8PSAxICYmIHggPj0gLTEgfHwgY29uZmlnLnByZWRpY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiAoMCwgX251bWJlci5hdGFuaE51bWJlcikoeCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LCAwKS5hdGFuaCgpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5hdGFuaCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguYXRhbmgoKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2UgYXRhbmgoMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGF0YW5oLCB0cnVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gYXRhbmg7XG59KTtcbmV4cG9ydHMuY3JlYXRlQXRhbmggPSBjcmVhdGVBdGFuaDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29zID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ2Nvcyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUNvcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgY29zaW5lIG9mIGEgdmFsdWUuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5jb3MoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguY29zKDIpICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIC0wLjQxNjE0NjgzNjU0NzE0MjJcbiAgICogICAgbWF0aC5jb3MobWF0aC5waSAvIDQpICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgIDAuNzA3MTA2NzgxMTg2NTQ3NVxuICAgKiAgICBtYXRoLmNvcyhtYXRoLnVuaXQoMTgwLCAnZGVnJykpICAvLyByZXR1cm5zIG51bWJlciAtMVxuICAgKiAgICBtYXRoLmNvcyhtYXRoLnVuaXQoNjAsICdkZWcnKSkgICAvLyByZXR1cm5zIG51bWJlciAgMC41XG4gICAqXG4gICAqICAgIGNvbnN0IGFuZ2xlID0gMC4yXG4gICAqICAgIG1hdGgucG93KG1hdGguc2luKGFuZ2xlKSwgMikgKyBtYXRoLnBvdyhtYXRoLmNvcyhhbmdsZSksIDIpIC8vIHJldHVybnMgbnVtYmVyIH4xXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb3MsIHRhblxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gQ29zaW5lIG9mIHhcbiAgICovXG4gIHZhciBjb3MgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBNYXRoLmNvcyxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmNvcygpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguY29zKCk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIGlmICgheC5oYXNCYXNlKHguY29uc3RydWN0b3IuQkFTRV9VTklUUy5BTkdMRSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5pdCBpbiBmdW5jdGlvbiBjb3MgaXMgbm8gYW5nbGUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvcyh4LnZhbHVlKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgY29zKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY29zO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNvcyA9IGNyZWF0ZUNvczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ29zaCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2Nvc2gnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVDb3NoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGNvc2luZSBvZiBhIHZhbHVlLFxuICAgKiBkZWZpbmVkIGFzIGBjb3NoKHgpID0gMS8yICogKGV4cCh4KSArIGV4cCgteCkpYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNvc2goeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguY29zaCgwLjUpICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDEuMTI3NjI1OTY1MjA2MzgwN1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2luaCwgdGFuaFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gSHlwZXJib2xpYyBjb3NpbmUgb2YgeFxuICAgKi9cbiAgdmFyIGNvc2ggPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmNvc2gsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5jb3NoKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5jb3NoKCk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIGlmICgheC5oYXNCYXNlKHguY29uc3RydWN0b3IuQkFTRV9VTklUUy5BTkdMRSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5pdCBpbiBmdW5jdGlvbiBjb3NoIGlzIG5vIGFuZ2xlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb3NoKHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBjb3NoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY29zaDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb3NoID0gY3JlYXRlQ29zaDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ290ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnY290JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0JpZ051bWJlciddO1xudmFyIGNyZWF0ZUNvdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBfQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgY290YW5nZW50IG9mIGEgdmFsdWUuIERlZmluZWQgYXMgYGNvdCh4KSA9IDEgLyB0YW4oeClgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguY290KHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNvdCgyKSAgICAgIC8vIHJldHVybnMgbnVtYmVyIC0wLjQ1NzY1NzU1NDM2MDI4NTc3XG4gICAqICAgIDEgLyBtYXRoLnRhbigyKSAgLy8gcmV0dXJucyBudW1iZXIgLTAuNDU3NjU3NTU0MzYwMjg1NzdcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHRhbiwgc2VjLCBjc2NcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IENvdGFuZ2VudCBvZiB4XG4gICAqL1xuICB2YXIgY290ID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5jb3ROdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5jb3QoKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcigxKS5kaXYoeC50YW4oKSk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIGlmICgheC5oYXNCYXNlKHguY29uc3RydWN0b3IuQkFTRV9VTklUUy5BTkdMRSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5pdCBpbiBmdW5jdGlvbiBjb3QgaXMgbm8gYW5nbGUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvdCh4LnZhbHVlKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgY290KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY290O1xufSk7XG5leHBvcnRzLmNyZWF0ZUNvdCA9IGNyZWF0ZUNvdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ290aCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2NvdGgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlQ290aCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBfQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBjb3RhbmdlbnQgb2YgYSB2YWx1ZSxcbiAgICogZGVmaW5lZCBhcyBgY290aCh4KSA9IDEgLyB0YW5oKHgpYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNvdGgoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIC8vIGNvdGgoeCkgPSAxIC8gdGFuaCh4KVxuICAgKiAgICBtYXRoLmNvdGgoMikgICAgICAgICAvLyByZXR1cm5zIDEuMDM3MzE0NzIwNzI3NTQ4MlxuICAgKiAgICAxIC8gbWF0aC50YW5oKDIpICAgICAvLyByZXR1cm5zIDEuMDM3MzE0NzIwNzI3NTQ4MlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2luaCwgdGFuaCwgY29zaFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gSHlwZXJib2xpYyBjb3RhbmdlbnQgb2YgeFxuICAgKi9cbiAgdmFyIGNvdGggPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLmNvdGhOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5jb3RoKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoMSkuZGl2KHgudGFuaCgpKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIGNvdGggaXMgbm8gYW5nbGUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvdGgoeC52YWx1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGNvdGgpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjb3RoO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNvdGggPSBjcmVhdGVDb3RoOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDc2MgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdjc2MnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlQ3NjID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBjb3NlY2FudCBvZiBhIHZhbHVlLCBkZWZpbmVkIGFzIGBjc2MoeCkgPSAxL3Npbih4KWAuXG4gICAqXG4gICAqIEZvciBtYXRyaWNlcywgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50IHdpc2UuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5jc2MoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguY3NjKDIpICAgICAgLy8gcmV0dXJucyBudW1iZXIgMS4wOTk3NTAxNzAyOTQ2MTdcbiAgICogICAgMSAvIG1hdGguc2luKDIpICAvLyByZXR1cm5zIG51bWJlciAxLjA5OTc1MDE3MDI5NDYxN1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgc2luLCBzZWMsIGNvdFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gQ29zZWNhbnQgb2YgeFxuICAgKi9cbiAgdmFyIGNzYyA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuY3NjTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguY3NjKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4gbmV3IF9CaWdOdW1iZXIoMSkuZGl2KHguc2luKCkpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICBpZiAoIXguaGFzQmFzZSh4LmNvbnN0cnVjdG9yLkJBU0VfVU5JVFMuQU5HTEUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuaXQgaW4gZnVuY3Rpb24gY3NjIGlzIG5vIGFuZ2xlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjc2MoeC52YWx1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGNzYyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNzYztcbn0pO1xuZXhwb3J0cy5jcmVhdGVDc2MgPSBjcmVhdGVDc2M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNzY2ggPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdjc2NoJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0JpZ051bWJlciddO1xudmFyIGNyZWF0ZUNzY2ggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgX0JpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgY29zZWNhbnQgb2YgYSB2YWx1ZSxcbiAgICogZGVmaW5lZCBhcyBgY3NjaCh4KSA9IDEgLyBzaW5oKHgpYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmNzY2goeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIC8vIGNzY2goeCkgPSAxLyBzaW5oKHgpXG4gICAqICAgIG1hdGguY3NjaCgwLjUpICAgICAgIC8vIHJldHVybnMgMS45MTkwMzQ3NTEzMzQ5NDM3XG4gICAqICAgIDEgLyBtYXRoLnNpbmgoMC41KSAgIC8vIHJldHVybnMgMS45MTkwMzQ3NTEzMzQ5NDM3XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBzaW5oLCBzZWNoLCBjb3RoXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBIeXBlcmJvbGljIGNvc2VjYW50IG9mIHhcbiAgICovXG4gIHZhciBjc2NoID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5jc2NoTnVtYmVyLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguY3NjaCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKDEpLmRpdih4LnNpbmgoKSk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIGlmICgheC5oYXNCYXNlKHguY29uc3RydWN0b3IuQkFTRV9VTklUUy5BTkdMRSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5pdCBpbiBmdW5jdGlvbiBjc2NoIGlzIG5vIGFuZ2xlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjc2NoKHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBjc2NoKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY3NjaDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVDc2NoID0gY3JlYXRlQ3NjaDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU2VjID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnc2VjJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0JpZ051bWJlciddO1xudmFyIGNyZWF0ZVNlYyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBfQmlnTnVtYmVyID0gX3JlZi5CaWdOdW1iZXI7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgc2VjYW50IG9mIGEgdmFsdWUsIGRlZmluZWQgYXMgYHNlYyh4KSA9IDEvY29zKHgpYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNlYyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zZWMoMikgICAgICAvLyByZXR1cm5zIG51bWJlciAtMi40MDI5OTc5NjE3MjIzODIyXG4gICAqICAgIDEgLyBtYXRoLmNvcygyKSAgLy8gcmV0dXJucyBudW1iZXIgLTIuNDAyOTk3OTYxNzIyMzgyMlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY29zLCBjc2MsIGNvdFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IENvbXBsZXggfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIEZ1bmN0aW9uIGlucHV0XG4gICAqIEByZXR1cm4ge251bWJlciB8IENvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gU2VjYW50IG9mIHhcbiAgICovXG4gIHZhciBzZWMgPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLnNlY051bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LnNlYygpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBfQmlnTnVtYmVyKDEpLmRpdih4LmNvcygpKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIHNlYyBpcyBubyBhbmdsZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2VjKHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBzZWMpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBzZWM7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2VjID0gY3JlYXRlU2VjOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTZWNoID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnc2VjaCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdCaWdOdW1iZXInXTtcbnZhciBjcmVhdGVTZWNoID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIHNlY2FudCBvZiBhIHZhbHVlLFxuICAgKiBkZWZpbmVkIGFzIGBzZWNoKHgpID0gMSAvIGNvc2goeClgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2VjaCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgLy8gc2VjaCh4KSA9IDEvIGNvc2goeClcbiAgICogICAgbWF0aC5zZWNoKDAuNSkgICAgICAgLy8gcmV0dXJucyAwLjg4NjgxODg4Mzk3MDA3NFxuICAgKiAgICAxIC8gbWF0aC5jb3NoKDAuNSkgICAvLyByZXR1cm5zIDAuODg2ODE4ODgzOTcwMDc0XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb3NoLCBjc2NoLCBjb3RoXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBIeXBlcmJvbGljIHNlY2FudCBvZiB4XG4gICAqL1xuICB2YXIgc2VjaCA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuc2VjaE51bWJlcixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LnNlY2goKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcigxKS5kaXYoeC5jb3NoKCkpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICBpZiAoIXguaGFzQmFzZSh4LmNvbnN0cnVjdG9yLkJBU0VfVU5JVFMuQU5HTEUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuaXQgaW4gZnVuY3Rpb24gc2VjaCBpcyBubyBhbmdsZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2VjaCh4LnZhbHVlKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgc2VjaCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHNlY2g7XG59KTtcbmV4cG9ydHMuY3JlYXRlU2VjaCA9IGNyZWF0ZVNlY2g7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNpbiA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgbmFtZSA9ICdzaW4nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVTaW4gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHNpbmUgb2YgYSB2YWx1ZS5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnNpbih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zaW4oMikgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC45MDkyOTc0MjY4MjU2ODEzXG4gICAqICAgIG1hdGguc2luKG1hdGgucGkgLyA0KSAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDAuNzA3MTA2NzgxMTg2NTQ3NVxuICAgKiAgICBtYXRoLnNpbihtYXRoLnVuaXQoOTAsICdkZWcnKSkgICAvLyByZXR1cm5zIG51bWJlciAxXG4gICAqICAgIG1hdGguc2luKG1hdGgudW5pdCgzMCwgJ2RlZycpKSAgIC8vIHJldHVybnMgbnVtYmVyIDAuNVxuICAgKlxuICAgKiAgICBjb25zdCBhbmdsZSA9IDAuMlxuICAgKiAgICBtYXRoLnBvdyhtYXRoLnNpbihhbmdsZSksIDIpICsgbWF0aC5wb3cobWF0aC5jb3MoYW5nbGUpLCAyKSAvLyByZXR1cm5zIG51bWJlciB+MVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgY29zLCB0YW5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IFNpbmUgb2YgeFxuICAgKi9cbiAgdmFyIHNpbiA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IE1hdGguc2luLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguc2luKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5zaW4oKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgaWYgKCF4Lmhhc0Jhc2UoeC5jb25zdHJ1Y3Rvci5CQVNFX1VOSVRTLkFOR0xFKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbml0IGluIGZ1bmN0aW9uIHNpbiBpcyBubyBhbmdsZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2luKHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBzaW4oMCkgPSAwXG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIHNpbiwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHNpbjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTaW4gPSBjcmVhdGVTaW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNpbmggPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdzaW5oJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlU2luaCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBzaW5lIG9mIGEgdmFsdWUsXG4gICAqIGRlZmluZWQgYXMgYHNpbmgoeCkgPSAxLzIgKiAoZXhwKHgpIC0gZXhwKC14KSlgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGguc2luaCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5zaW5oKDAuNSkgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC41MjEwOTUzMDU0OTM3NDc0XG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBjb3NoLCB0YW5oXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBIeXBlcmJvbGljIHNpbmUgb2YgeFxuICAgKi9cbiAgdmFyIHNpbmggPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBfbnVtYmVyLnNpbmhOdW1iZXIsXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geC5zaW5oKCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5zaW5oKCk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIGlmICgheC5oYXNCYXNlKHguY29uc3RydWN0b3IuQkFTRV9VTklUUy5BTkdMRSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5pdCBpbiBmdW5jdGlvbiBzaW5oIGlzIG5vIGFuZ2xlJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzaW5oKHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgLy8gZGVlcCBtYXAgY29sbGVjdGlvbiwgc2tpcCB6ZXJvcyBzaW5jZSBzaW5oKDApID0gMFxuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBzaW5oLCB0cnVlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc2luaDtcbn0pO1xuZXhwb3J0cy5jcmVhdGVTaW5oID0gY3JlYXRlU2luaDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVGFuID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ3Rhbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZVRhbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgdGFuZ2VudCBvZiBhIHZhbHVlLiBgdGFuKHgpYCBpcyBlcXVhbCB0byBgc2luKHgpIC8gY29zKHgpYC5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnRhbih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC50YW4oMC41KSAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMC41NDYzMDI0ODk4NDM3OTA1XG4gICAqICAgIG1hdGguc2luKDAuNSkgLyBtYXRoLmNvcygwLjUpICAgIC8vIHJldHVybnMgbnVtYmVyIDAuNTQ2MzAyNDg5ODQzNzkwNVxuICAgKiAgICBtYXRoLnRhbihtYXRoLnBpIC8gNCkgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAxXG4gICAqICAgIG1hdGgudGFuKG1hdGgudW5pdCg0NSwgJ2RlZycpKSAgIC8vIHJldHVybnMgbnVtYmVyIDFcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGF0YW4sIHNpbiwgY29zXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgRnVuY3Rpb24gaW5wdXRcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQ29tcGxleCB8IEFycmF5IHwgTWF0cml4fSBUYW5nZW50IG9mIHhcbiAgICovXG4gIHZhciB0YW4gPSB0eXBlZChuYW1lLCB7XG4gICAgbnVtYmVyOiBNYXRoLnRhbixcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LnRhbigpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHgudGFuKCk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIGlmICgheC5oYXNCYXNlKHguY29uc3RydWN0b3IuQkFTRV9VTklUUy5BTkdMRSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5pdCBpbiBmdW5jdGlvbiB0YW4gaXMgbm8gYW5nbGUnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRhbih4LnZhbHVlKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2UgdGFuKDApID0gMFxuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCB0YW4sIHRydWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiB0YW47XG59KTtcbmV4cG9ydHMuY3JlYXRlVGFuID0gY3JlYXRlVGFuOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVUYW5oID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAndGFuaCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZVRhbmggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgdGFuZ2VudCBvZiBhIHZhbHVlLFxuICAgKiBkZWZpbmVkIGFzIGB0YW5oKHgpID0gKGV4cCgyICogeCkgLSAxKSAvIChleHAoMiAqIHgpICsgMSlgLlxuICAgKlxuICAgKiBGb3IgbWF0cmljZXMsIHRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudCB3aXNlLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgudGFuaCh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgLy8gdGFuaCh4KSA9IHNpbmgoeCkgLyBjb3NoKHgpID0gMSAvIGNvdGgoeClcbiAgICogICAgbWF0aC50YW5oKDAuNSkgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAwLjQ2MjExNzE1NzI2MDAwOTc0XG4gICAqICAgIG1hdGguc2luaCgwLjUpIC8gbWF0aC5jb3NoKDAuNSkgIC8vIHJldHVybnMgMC40NjIxMTcxNTcyNjAwMDk3NFxuICAgKiAgICAxIC8gbWF0aC5jb3RoKDAuNSkgICAgICAgICAgICAgICAvLyByZXR1cm5zIDAuNDYyMTE3MTU3MjYwMDA5NzRcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHNpbmgsIGNvc2gsIGNvdGhcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgVW5pdCB8IEFycmF5IHwgTWF0cml4fSB4ICBGdW5jdGlvbiBpbnB1dFxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBDb21wbGV4IHwgQXJyYXkgfCBNYXRyaXh9IEh5cGVyYm9saWMgdGFuZ2VudCBvZiB4XG4gICAqL1xuICB2YXIgdGFuaCA9IHR5cGVkKCd0YW5oJywge1xuICAgIG51bWJlcjogX251bWJlci50YW5oLFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHgudGFuaCgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHgudGFuaCgpO1xuICAgIH0sXG4gICAgVW5pdDogZnVuY3Rpb24gVW5pdCh4KSB7XG4gICAgICBpZiAoIXguaGFzQmFzZSh4LmNvbnN0cnVjdG9yLkJBU0VfVU5JVFMuQU5HTEUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuaXQgaW4gZnVuY3Rpb24gdGFuaCBpcyBubyBhbmdsZScpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGFuaCh4LnZhbHVlKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIC8vIGRlZXAgbWFwIGNvbGxlY3Rpb24sIHNraXAgemVyb3Mgc2luY2UgdGFuaCgwKSA9IDBcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgdGFuaCwgdHJ1ZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHRhbmg7XG59KTtcbmV4cG9ydHMuY3JlYXRlVGFuaCA9IGNyZWF0ZVRhbmg7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVRvID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9hbGdvcml0aG0gPSByZXF1aXJlKFwiLi4vLi4vdHlwZS9tYXRyaXgvdXRpbHMvYWxnb3JpdGhtMTNcIik7XG5cbnZhciBfYWxnb3JpdGhtMiA9IHJlcXVpcmUoXCIuLi8uLi90eXBlL21hdHJpeC91dGlscy9hbGdvcml0aG0xNFwiKTtcblxudmFyIG5hbWUgPSAndG8nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnbWF0cml4J107XG52YXIgY3JlYXRlVG8gPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgbWF0cml4ID0gX3JlZi5tYXRyaXg7XG4gIHZhciBhbGdvcml0aG0xMyA9ICgwLCBfYWxnb3JpdGhtLmNyZWF0ZUFsZ29yaXRobTEzKSh7XG4gICAgdHlwZWQ6IHR5cGVkXG4gIH0pO1xuICB2YXIgYWxnb3JpdGhtMTQgPSAoMCwgX2FsZ29yaXRobTIuY3JlYXRlQWxnb3JpdGhtMTQpKHtcbiAgICB0eXBlZDogdHlwZWRcbiAgfSk7XG4gIC8qKlxuICAgKiBDaGFuZ2UgdGhlIHVuaXQgb2YgYSB2YWx1ZS5cbiAgICpcbiAgICogRm9yIG1hdHJpY2VzLCB0aGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnRvKHgsIHVuaXQpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLnRvKG1hdGgudW5pdCgnMiBpbmNoJyksICdjbScpICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgVW5pdCA1LjA4IGNtXG4gICAqICAgIG1hdGgudG8obWF0aC51bml0KCcyIGluY2gnKSwgbWF0aC51bml0KG51bGwsICdjbScpKSAgLy8gcmV0dXJucyBVbml0IDUuMDggY21cbiAgICogICAgbWF0aC50byhtYXRoLnVuaXQoMTYsICdieXRlcycpLCAnYml0cycpICAgICAgICAgICAgICAvLyByZXR1cm5zIFVuaXQgMTI4IGJpdHNcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIHVuaXRcbiAgICpcbiAgICogQHBhcmFtIHtVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggICAgIFRoZSB1bml0IHRvIGJlIGNvbnZlcnRlZC5cbiAgICogQHBhcmFtIHtVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHVuaXQgIE5ldyB1bml0LiBDYW4gYmUgYSBzdHJpbmcgbGlrZSBcImNtXCJcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGEgdW5pdCB3aXRob3V0IHZhbHVlLlxuICAgKiBAcmV0dXJuIHtVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHZhbHVlIHdpdGggY2hhbmdlZCwgZml4ZWQgdW5pdC5cbiAgICovXG5cbiAgdmFyIHRvID0gdHlwZWQobmFtZSwge1xuICAgICdVbml0LCBVbml0IHwgc3RyaW5nJzogZnVuY3Rpb24gVW5pdFVuaXRTdHJpbmcoeCwgdW5pdCkge1xuICAgICAgcmV0dXJuIHgudG8odW5pdCk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBNYXRyaXgnOiBmdW5jdGlvbiBNYXRyaXhNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gU3BhcnNlTWF0cml4IGRvZXMgbm90IHN1cHBvcnQgVW5pdHNcbiAgICAgIHJldHVybiBhbGdvcml0aG0xMyh4LCB5LCB0byk7XG4gICAgfSxcbiAgICAnQXJyYXksIEFycmF5JzogZnVuY3Rpb24gQXJyYXlBcnJheSh4LCB5KSB7XG4gICAgICAvLyB1c2UgbWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICByZXR1cm4gdG8obWF0cml4KHgpLCBtYXRyaXgoeSkpLnZhbHVlT2YoKTtcbiAgICB9LFxuICAgICdBcnJheSwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIHRvKG1hdHJpeCh4KSwgeSk7XG4gICAgfSxcbiAgICAnTWF0cml4LCBBcnJheSc6IGZ1bmN0aW9uIE1hdHJpeEFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiB0byh4LCBtYXRyaXgoeSkpO1xuICAgIH0sXG4gICAgJ01hdHJpeCwgYW55JzogZnVuY3Rpb24gTWF0cml4QW55KHgsIHkpIHtcbiAgICAgIC8vIFNwYXJzZU1hdHJpeCBkb2VzIG5vdCBzdXBwb3J0IFVuaXRzXG4gICAgICByZXR1cm4gYWxnb3JpdGhtMTQoeCwgeSwgdG8sIGZhbHNlKTtcbiAgICB9LFxuICAgICdhbnksIE1hdHJpeCc6IGZ1bmN0aW9uIGFueU1hdHJpeCh4LCB5KSB7XG4gICAgICAvLyBTcGFyc2VNYXRyaXggZG9lcyBub3Qgc3VwcG9ydCBVbml0c1xuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KHksIHgsIHRvLCB0cnVlKTtcbiAgICB9LFxuICAgICdBcnJheSwgYW55JzogZnVuY3Rpb24gQXJyYXlBbnkoeCwgeSkge1xuICAgICAgLy8gdXNlIG1hdHJpeCBpbXBsZW1lbnRhdGlvblxuICAgICAgcmV0dXJuIGFsZ29yaXRobTE0KG1hdHJpeCh4KSwgeSwgdG8sIGZhbHNlKS52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICAnYW55LCBBcnJheSc6IGZ1bmN0aW9uIGFueUFycmF5KHgsIHkpIHtcbiAgICAgIC8vIHVzZSBtYXRyaXggaW1wbGVtZW50YXRpb25cbiAgICAgIHJldHVybiBhbGdvcml0aG0xNChtYXRyaXgoeSksIHgsIHRvLCB0cnVlKS52YWx1ZU9mKCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHRvO1xufSk7XG5leHBvcnRzLmNyZWF0ZVRvID0gY3JlYXRlVG87IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNsb25lID0gdm9pZCAwO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdjbG9uZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUNsb25lID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ2xvbmUgYW4gb2JqZWN0LlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmNsb25lKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmNsb25lKDMuNSkgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgMy41XG4gICAqICAgIG1hdGguY2xvbmUobWF0aC5jb21wbGV4KCcyLTRpJykgLy8gcmV0dXJucyBDb21wbGV4IDIgLSA0aVxuICAgKiAgICBtYXRoLmNsb25lKG1hdGgudW5pdCg0NSwgJ2RlZycpKSAgLy8gcmV0dXJucyBVbml0IDQ1IGRlZ1xuICAgKiAgICBtYXRoLmNsb25lKFtbMSwgMl0sIFszLCA0XV0pICAgICAgLy8gcmV0dXJucyBBcnJheSBbWzEsIDJdLCBbMywgNF1dXG4gICAqICAgIG1hdGguY2xvbmUoXCJoZWxsbyB3b3JsZFwiKSAgICAgICAgIC8vIHJldHVybnMgc3RyaW5nIFwiaGVsbG8gd29ybGRcIlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHggICBPYmplY3QgdG8gYmUgY2xvbmVkXG4gICAqIEByZXR1cm4geyp9IEEgY2xvbmUgb2Ygb2JqZWN0IHhcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgYW55OiBfb2JqZWN0LmNsb25lXG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNsb25lID0gY3JlYXRlQ2xvbmU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUhhc051bWVyaWNWYWx1ZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2hhc051bWVyaWNWYWx1ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdpc051bWVyaWMnXTtcbnZhciBjcmVhdGVIYXNOdW1lcmljVmFsdWUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgaXNOdW1lcmljID0gX3JlZi5pc051bWVyaWM7XG5cbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciBhIHZhbHVlIGlzIGFuIG51bWVyaWMgdmFsdWUuXG4gICAqXG4gICAqIEluIGNhc2Ugb2YgYSBzdHJpbmcsIHRydWUgaXMgcmV0dXJuZWQgaWYgdGhlIHN0cmluZyBjb250YWlucyBhIG51bWVyaWMgdmFsdWUuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguaGFzTnVtZXJpY1ZhbHVlKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmhhc051bWVyaWNWYWx1ZSgyKSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmhhc051bWVyaWNWYWx1ZSgnMicpICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzTnVtZXJpYygnMicpICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5oYXNOdW1lcmljVmFsdWUoMCkgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5oYXNOdW1lcmljVmFsdWUobWF0aC5iaWdudW1iZXIoNTAwKSkgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5oYXNOdW1lcmljVmFsdWUobWF0aC5mcmFjdGlvbig0KSkgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5oYXNOdW1lcmljVmFsdWUobWF0aC5jb21wbGV4KCcyLTRpJykgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaGFzTnVtZXJpY1ZhbHVlKFsyLjMsICdmb28nLCBmYWxzZV0pICAgLy8gcmV0dXJucyBbdHJ1ZSwgZmFsc2UsIHRydWVdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBpc1plcm8sIGlzUG9zaXRpdmUsIGlzTmVnYXRpdmUsIGlzSW50ZWdlciwgaXNOdW1lcmljXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0geCAgICAgICBWYWx1ZSB0byBiZSB0ZXN0ZWRcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gIFJldHVybnMgdHJ1ZSB3aGVuIGB4YCBpcyBhIGBudW1iZXJgLCBgQmlnTnVtYmVyYCxcbiAgICogICAgICAgICAgICAgICAgICAgIGBGcmFjdGlvbmAsIGBCb29sZWFuYCwgb3IgYSBgU3RyaW5nYCBjb250YWluaW5nIG51bWJlci4gUmV0dXJucyBmYWxzZSBmb3Igb3RoZXIgdHlwZXMuXG4gICAqICAgICAgICAgICAgICAgICAgICBUaHJvd3MgYW4gZXJyb3IgaW4gY2FzZSBvZiB1bmtub3duIHR5cGVzLlxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyh4KSB7XG4gICAgICByZXR1cm4geC50cmltKCkubGVuZ3RoID4gMCAmJiAhaXNOYU4oTnVtYmVyKHgpKTtcbiAgICB9LFxuICAgIGFueTogZnVuY3Rpb24gYW55KHgpIHtcbiAgICAgIHJldHVybiBpc051bWVyaWMoeCk7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVIYXNOdW1lcmljVmFsdWUgPSBjcmVhdGVIYXNOdW1lcmljVmFsdWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUlzSW50ZWdlciA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2lzSW50ZWdlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUlzSW50ZWdlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciBhIHZhbHVlIGlzIGFuIGludGVnZXIgbnVtYmVyLlxuICAgKiBUaGUgZnVuY3Rpb24gc3VwcG9ydHMgYG51bWJlcmAsIGBCaWdOdW1iZXJgLCBhbmQgYEZyYWN0aW9uYC5cbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50LXdpc2UgaW4gY2FzZSBvZiBBcnJheSBvciBNYXRyaXggaW5wdXQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguaXNJbnRlZ2VyKHgpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLmlzSW50ZWdlcigyKSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzSW50ZWdlcigwKSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzSW50ZWdlcigwLjUpICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc0ludGVnZXIobWF0aC5iaWdudW1iZXIoNTAwKSkgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc0ludGVnZXIobWF0aC5mcmFjdGlvbig0KSkgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc0ludGVnZXIoJzMnKSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc0ludGVnZXIoWzMsIDAuNSwgLTJdKSAgICAgICAgICAvLyByZXR1cm5zIFt0cnVlLCBmYWxzZSwgdHJ1ZV1cbiAgICogICAgbWF0aC5pc0ludGVnZXIobWF0aC5jb21wbGV4KCcyLTRpJykgICAvLyB0aHJvd3MgYW4gZXJyb3JcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGlzTnVtZXJpYywgaXNQb3NpdGl2ZSwgaXNOZWdhdGl2ZSwgaXNaZXJvXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBBcnJheSB8IE1hdHJpeH0geCAgIFZhbHVlIHRvIGJlIHRlc3RlZFxuICAgKiBAcmV0dXJuIHtib29sZWFufSAgUmV0dXJucyB0cnVlIHdoZW4gYHhgIGNvbnRhaW5zIGEgbnVtZXJpYywgaW50ZWdlciB2YWx1ZS5cbiAgICogICAgICAgICAgICAgICAgICAgIFRocm93cyBhbiBlcnJvciBpbiBjYXNlIG9mIGFuIHVua25vd24gZGF0YSB0eXBlLlxuICAgKi9cbiAgdmFyIGlzSW50ZWdlciA9IHR5cGVkKG5hbWUsIHtcbiAgICBudW1iZXI6IF9udW1iZXIuaXNJbnRlZ2VyLFxuICAgIC8vIFRPRE86IHdoYXQgdG8gZG8gd2l0aCBpc0ludGVnZXIoYWRkKDAuMSwgMC4yKSkgID9cbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5pc0ludCgpO1xuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiB4LmQgPT09IDEgJiYgaXNGaW5pdGUoeC5uKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgaXNJbnRlZ2VyKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaXNJbnRlZ2VyO1xufSk7XG5leHBvcnRzLmNyZWF0ZUlzSW50ZWdlciA9IGNyZWF0ZUlzSW50ZWdlcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSXNOYU4gPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdpc05hTic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUlzTmFOID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgTmFOIChub3QgYSBudW1iZXIpLlxuICAgKiBUaGUgZnVuY3Rpb24gc3VwcG9ydHMgdHlwZXMgYG51bWJlcmAsIGBCaWdOdW1iZXJgLCBgRnJhY3Rpb25gLCBgVW5pdGAgYW5kIGBDb21wbGV4YC5cbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50LXdpc2UgaW4gY2FzZSBvZiBBcnJheSBvciBNYXRyaXggaW5wdXQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguaXNOYU4oeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguaXNOYU4oMykgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNOYU4oTmFOKSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc05hTigwKSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc05hTihtYXRoLmJpZ251bWJlcihOYU4pKSAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzTmFOKG1hdGguYmlnbnVtYmVyKDApKSAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzTmFOKG1hdGguZnJhY3Rpb24oLTIsIDUpKSAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzTmFOKCctMicpICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzTmFOKFsyLCAwLCAtMywgTmFOXScpICAgICAgLy8gcmV0dXJucyBbZmFsc2UsIGZhbHNlLCBmYWxzZSwgdHJ1ZV1cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGlzTnVtZXJpYywgaXNOZWdhdGl2ZSwgaXNQb3NpdGl2ZSwgaXNaZXJvLCBpc0ludGVnZXJcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgVmFsdWUgdG8gYmUgdGVzdGVkXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59ICBSZXR1cm5zIHRydWUgd2hlbiBgeGAgaXMgTmFOLlxuICAgKiAgICAgICAgICAgICAgICAgICAgVGhyb3dzIGFuIGVycm9yIGluIGNhc2Ugb2YgYW4gdW5rbm93biBkYXRhIHR5cGUuXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5pc05hTk51bWJlcixcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4geC5pc05hTigpO1xuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIENvbXBsZXg6IGZ1bmN0aW9uIENvbXBsZXgoeCkge1xuICAgICAgcmV0dXJuIHguaXNOYU4oKTtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgcmV0dXJuIE51bWJlci5pc05hTih4LnZhbHVlKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgTnVtYmVyLmlzTmFOKTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUlzTmFOID0gY3JlYXRlSXNOYU47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUlzTmVnYXRpdmUgPSB2b2lkIDA7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vcGxhaW4vbnVtYmVyXCIpO1xuXG52YXIgbmFtZSA9ICdpc05lZ2F0aXZlJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlSXNOZWdhdGl2ZSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciBhIHZhbHVlIGlzIG5lZ2F0aXZlOiBzbWFsbGVyIHRoYW4gemVyby5cbiAgICogVGhlIGZ1bmN0aW9uIHN1cHBvcnRzIHR5cGVzIGBudW1iZXJgLCBgQmlnTnVtYmVyYCwgYEZyYWN0aW9uYCwgYW5kIGBVbml0YC5cbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50LXdpc2UgaW4gY2FzZSBvZiBBcnJheSBvciBNYXRyaXggaW5wdXQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguaXNOZWdhdGl2ZSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5pc05lZ2F0aXZlKDMpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzTmVnYXRpdmUoLTIpICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc05lZ2F0aXZlKDApICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzTmVnYXRpdmUoLTApICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNOZWdhdGl2ZShtYXRoLmJpZ251bWJlcigyKSkgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc05lZ2F0aXZlKG1hdGguZnJhY3Rpb24oLTIsIDUpKSAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNOZWdhdGl2ZSgnLTInKSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzTmVnYXRpdmUoWzIsIDAsIC0zXScpICAgICAgICAgICAvLyByZXR1cm5zIFtmYWxzZSwgZmFsc2UsIHRydWVdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBpc051bWVyaWMsIGlzUG9zaXRpdmUsIGlzWmVybywgaXNJbnRlZ2VyXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIFZhbHVlIHRvIGJlIHRlc3RlZFxuICAgKiBAcmV0dXJuIHtib29sZWFufSAgUmV0dXJucyB0cnVlIHdoZW4gYHhgIGlzIGxhcmdlciB0aGFuIHplcm8uXG4gICAqICAgICAgICAgICAgICAgICAgICBUaHJvd3MgYW4gZXJyb3IgaW4gY2FzZSBvZiBhbiB1bmtub3duIGRhdGEgdHlwZS5cbiAgICovXG4gIHZhciBpc05lZ2F0aXZlID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5pc05lZ2F0aXZlTnVtYmVyLFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4LmlzTmVnKCkgJiYgIXguaXNaZXJvKCkgJiYgIXguaXNOYU4oKTtcbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4geC5zIDwgMDsgLy8gSXQncyBlbm91Z2ggdG8gZGVjaWRlIG9uIHRoZSBzaWduXG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIHJldHVybiBpc05lZ2F0aXZlKHgudmFsdWUpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBpc05lZ2F0aXZlKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaXNOZWdhdGl2ZTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVJc05lZ2F0aXZlID0gY3JlYXRlSXNOZWdhdGl2ZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSXNOdW1lcmljID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2lzTnVtZXJpYyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUlzTnVtZXJpYyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciBhIHZhbHVlIGlzIGFuIG51bWVyaWMgdmFsdWUuXG4gICAqXG4gICAqIFRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudC13aXNlIGluIGNhc2Ugb2YgQXJyYXkgb3IgTWF0cml4IGlucHV0LlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmlzTnVtZXJpYyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5pc051bWVyaWMoMikgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc051bWVyaWMoJzInKSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaGFzTnVtZXJpY1ZhbHVlKCcyJykgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNOdW1lcmljKDApICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNOdW1lcmljKG1hdGguYmlnbnVtYmVyKDUwMCkpICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNOdW1lcmljKG1hdGguZnJhY3Rpb24oNCkpICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNOdW1lcmljKG1hdGguY29tcGxleCgnMi00aScpICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzTnVtZXJpYyhbMi4zLCAnZm9vJywgZmFsc2VdKSAgIC8vIHJldHVybnMgW3RydWUsIGZhbHNlLCB0cnVlXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgaXNaZXJvLCBpc1Bvc2l0aXZlLCBpc05lZ2F0aXZlLCBpc0ludGVnZXIsIGhhc051bWVyaWNWYWx1ZVxuICAgKlxuICAgKiBAcGFyYW0geyp9IHggICAgICAgVmFsdWUgdG8gYmUgdGVzdGVkXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59ICBSZXR1cm5zIHRydWUgd2hlbiBgeGAgaXMgYSBgbnVtYmVyYCwgYEJpZ051bWJlcmAsXG4gICAqICAgICAgICAgICAgICAgICAgICBgRnJhY3Rpb25gLCBvciBgYm9vbGVhbmAuIFJldHVybnMgZmFsc2UgZm9yIG90aGVyIHR5cGVzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgVGhyb3dzIGFuIGVycm9yIGluIGNhc2Ugb2YgdW5rbm93biB0eXBlcy5cbiAgICovXG4gIHZhciBpc051bWVyaWMgPSB0eXBlZChuYW1lLCB7XG4gICAgJ251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgYm9vbGVhbic6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckZyYWN0aW9uQm9vbGVhbigpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgJ0NvbXBsZXggfCBVbml0IHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCB8IE5vZGUnOiBmdW5jdGlvbiBDb21wbGV4VW5pdFN0cmluZ051bGxVbmRlZmluZWROb2RlKCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBpc051bWVyaWMpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpc051bWVyaWM7XG59KTtcbmV4cG9ydHMuY3JlYXRlSXNOdW1lcmljID0gY3JlYXRlSXNOdW1lcmljOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJc1Bvc2l0aXZlID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3BsYWluL251bWJlclwiKTtcblxudmFyIG5hbWUgPSAnaXNQb3NpdGl2ZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUlzUG9zaXRpdmUgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBUZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBwb3NpdGl2ZTogbGFyZ2VyIHRoYW4gemVyby5cbiAgICogVGhlIGZ1bmN0aW9uIHN1cHBvcnRzIHR5cGVzIGBudW1iZXJgLCBgQmlnTnVtYmVyYCwgYEZyYWN0aW9uYCwgYW5kIGBVbml0YC5cbiAgICpcbiAgICogVGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRlZCBlbGVtZW50LXdpc2UgaW4gY2FzZSBvZiBBcnJheSBvciBNYXRyaXggaW5wdXQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguaXNQb3NpdGl2ZSh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5pc1Bvc2l0aXZlKDMpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNQb3NpdGl2ZSgtMikgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc1Bvc2l0aXZlKDApICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzUG9zaXRpdmUoLTApICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNQb3NpdGl2ZSgwLjUpICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzUG9zaXRpdmUobWF0aC5iaWdudW1iZXIoMikpICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc1Bvc2l0aXZlKG1hdGguZnJhY3Rpb24oLTIsIDUpKSAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzUG9zaXRpdmUobWF0aC5mcmFjdGlvbigxLDMpKSAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNQb3NpdGl2ZSgnMicpICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzUG9zaXRpdmUoWzIsIDAsIC0zXSkgICAgICAgICAgICAvLyByZXR1cm5zIFt0cnVlLCBmYWxzZSwgZmFsc2VdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBpc051bWVyaWMsIGlzWmVybywgaXNOZWdhdGl2ZSwgaXNJbnRlZ2VyXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBVbml0IHwgQXJyYXkgfCBNYXRyaXh9IHggIFZhbHVlIHRvIGJlIHRlc3RlZFxuICAgKiBAcmV0dXJuIHtib29sZWFufSAgUmV0dXJucyB0cnVlIHdoZW4gYHhgIGlzIGxhcmdlciB0aGFuIHplcm8uXG4gICAqICAgICAgICAgICAgICAgICAgICBUaHJvd3MgYW4gZXJyb3IgaW4gY2FzZSBvZiBhbiB1bmtub3duIGRhdGEgdHlwZS5cbiAgICovXG4gIHZhciBpc1Bvc2l0aXZlID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5pc1Bvc2l0aXZlTnVtYmVyLFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiAheC5pc05lZygpICYmICF4LmlzWmVybygpICYmICF4LmlzTmFOKCk7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHgucyA+IDAgJiYgeC5uID4gMDtcbiAgICB9LFxuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgcmV0dXJuIGlzUG9zaXRpdmUoeC52YWx1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGlzUG9zaXRpdmUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpc1Bvc2l0aXZlO1xufSk7XG5leHBvcnRzLmNyZWF0ZUlzUG9zaXRpdmUgPSBjcmVhdGVJc1Bvc2l0aXZlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJc1ByaW1lID0gdm9pZCAwO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ2lzUHJpbWUnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVJc1ByaW1lID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIGEgdmFsdWUgaXMgcHJpbWU6IGhhcyBubyBkaXZpc29ycyBvdGhlciB0aGFuIGl0c2VsZiBhbmQgb25lLlxuICAgKiBUaGUgZnVuY3Rpb24gc3VwcG9ydHMgdHlwZSBgbnVtYmVyYCwgYGJpZ251bWJlcmAuXG4gICAqXG4gICAqIFRoZSBmdW5jdGlvbiBpcyBldmFsdWF0ZWQgZWxlbWVudC13aXNlIGluIGNhc2Ugb2YgQXJyYXkgb3IgTWF0cml4IGlucHV0LlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmlzUHJpbWUoeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguaXNQcmltZSgzKSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzUHJpbWUoLTIpICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNQcmltZSgwKSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc1ByaW1lKC0wKSAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzUHJpbWUoMC41KSAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNQcmltZSgnMicpICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzUHJpbWUoWzIsIDE3LCAxMDBdKSAgICAgICAgICAgLy8gcmV0dXJucyBbdHJ1ZSwgdHJ1ZSwgZmFsc2VdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBpc051bWVyaWMsIGlzWmVybywgaXNOZWdhdGl2ZSwgaXNJbnRlZ2VyXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IHggIFZhbHVlIHRvIGJlIHRlc3RlZFxuICAgKiBAcmV0dXJuIHtib29sZWFufSAgUmV0dXJucyB0cnVlIHdoZW4gYHhgIGlzIGxhcmdlciB0aGFuIHplcm8uXG4gICAqICAgICAgICAgICAgICAgICAgICBUaHJvd3MgYW4gZXJyb3IgaW4gY2FzZSBvZiBhbiB1bmtub3duIGRhdGEgdHlwZS5cbiAgICovXG4gIHZhciBpc1ByaW1lID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICh4ICogMCAhPT0gMCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmICh4IDw9IDMpIHtcbiAgICAgICAgcmV0dXJuIHggPiAxO1xuICAgICAgfVxuXG4gICAgICBpZiAoeCAlIDIgPT09IDAgfHwgeCAlIDMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gNTsgaSAqIGkgPD0geDsgaSArPSA2KSB7XG4gICAgICAgIGlmICh4ICUgaSA9PT0gMCB8fCB4ICUgKGkgKyAyKSA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKG4pIHtcbiAgICAgIGlmIChuLnRvTnVtYmVyKCkgKiAwICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKG4ubHRlKDMpKSByZXR1cm4gbi5ndCgxKTtcbiAgICAgIGlmIChuLm1vZCgyKS5lcSgwKSB8fCBuLm1vZCgzKS5lcSgwKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICBmb3IgKHZhciBpID0gNTsgbi5ndGUoaSAqIGkpOyBpICs9IDYpIHtcbiAgICAgICAgaWYgKG4ubW9kKGkpLmVxKDApIHx8IG4ubW9kKGkgKyAyKS5lcSgwKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgaXNQcmltZSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzUHJpbWU7XG59KTtcbmV4cG9ydHMuY3JlYXRlSXNQcmltZSA9IGNyZWF0ZUlzUHJpbWU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUlzWmVybyA9IHZvaWQgMDtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi9wbGFpbi9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ2lzWmVybyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUlzWmVybyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciBhIHZhbHVlIGlzIHplcm8uXG4gICAqIFRoZSBmdW5jdGlvbiBjYW4gY2hlY2sgZm9yIHplcm8gZm9yIHR5cGVzIGBudW1iZXJgLCBgQmlnTnVtYmVyYCwgYEZyYWN0aW9uYCxcbiAgICogYENvbXBsZXhgLCBhbmQgYFVuaXRgLlxuICAgKlxuICAgKiBUaGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGVsZW1lbnQtd2lzZSBpbiBjYXNlIG9mIEFycmF5IG9yIE1hdHJpeCBpbnB1dC5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICAgbWF0aC5pc1plcm8oeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguaXNaZXJvKDApICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyB0cnVlXG4gICAqICAgIG1hdGguaXNaZXJvKDIpICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzWmVybygwLjUpICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc1plcm8obWF0aC5iaWdudW1iZXIoMCkpICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc1plcm8obWF0aC5mcmFjdGlvbigwKSkgICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5pc1plcm8obWF0aC5mcmFjdGlvbigxLDMpKSAgICAvLyByZXR1cm5zIGZhbHNlXG4gICAqICAgIG1hdGguaXNaZXJvKG1hdGguY29tcGxleCgnMiAtIDRpJykgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmlzWmVybyhtYXRoLmNvbXBsZXgoJzBpJykgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzWmVybygnMCcpICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmlzWmVybygnMicpICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5pc1plcm8oWzIsIDAsIC0zXScpICAgICAgICAgICAvLyByZXR1cm5zIFtmYWxzZSwgdHJ1ZSwgZmFsc2VdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBpc051bWVyaWMsIGlzUG9zaXRpdmUsIGlzTmVnYXRpdmUsIGlzSW50ZWdlclxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXggfCBGcmFjdGlvbiB8IFVuaXQgfCBBcnJheSB8IE1hdHJpeH0geCAgICAgICBWYWx1ZSB0byBiZSB0ZXN0ZWRcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gIFJldHVybnMgdHJ1ZSB3aGVuIGB4YCBpcyB6ZXJvLlxuICAgKiAgICAgICAgICAgICAgICAgICAgVGhyb3dzIGFuIGVycm9yIGluIGNhc2Ugb2YgYW4gdW5rbm93biBkYXRhIHR5cGUuXG4gICAqL1xuICB2YXIgaXNaZXJvID0gdHlwZWQobmFtZSwge1xuICAgIG51bWJlcjogX251bWJlci5pc1plcm9OdW1iZXIsXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHguaXNaZXJvKCk7XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LnJlID09PSAwICYmIHguaW0gPT09IDA7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIHguZCA9PT0gMSAmJiB4Lm4gPT09IDA7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIHJldHVybiBpc1plcm8oeC52YWx1ZSk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGlzWmVybyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlzWmVybztcbn0pO1xuZXhwb3J0cy5jcmVhdGVJc1plcm8gPSBjcmVhdGVJc1plcm87IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU51bWVyaWMgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX25vb3AgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbm9vcFwiKTtcblxudmFyIG5hbWUgPSAnbnVtZXJpYyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydudW1iZXInLCAnP2JpZ251bWJlcicsICc/ZnJhY3Rpb24nXTtcbnZhciBjcmVhdGVOdW1lcmljID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIF9udW1iZXIgPSBfcmVmLm51bWJlcixcbiAgICAgIGJpZ251bWJlciA9IF9yZWYuYmlnbnVtYmVyLFxuICAgICAgZnJhY3Rpb24gPSBfcmVmLmZyYWN0aW9uO1xuICB2YXIgdmFsaWRJbnB1dFR5cGVzID0ge1xuICAgIHN0cmluZzogdHJ1ZSxcbiAgICBudW1iZXI6IHRydWUsXG4gICAgQmlnTnVtYmVyOiB0cnVlLFxuICAgIEZyYWN0aW9uOiB0cnVlXG4gIH07IC8vIExvYWQgdGhlIGNvbnZlcnNpb24gZnVuY3Rpb25zIGZvciBlYWNoIG91dHB1dCB0eXBlXG5cbiAgdmFyIHZhbGlkT3V0cHV0VHlwZXMgPSB7XG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgcmV0dXJuIF9udW1iZXIoeCk7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGJpZ251bWJlciA/IGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gYmlnbnVtYmVyKHgpO1xuICAgIH0gOiBfbm9vcC5ub0JpZ251bWJlcixcbiAgICBGcmFjdGlvbjogZnJhY3Rpb24gPyBmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIGZyYWN0aW9uKHgpO1xuICAgIH0gOiBfbm9vcC5ub0ZyYWN0aW9uXG4gIH07XG4gIC8qKlxuICAgKiBDb252ZXJ0IGEgbnVtZXJpYyBpbnB1dCB0byBhIHNwZWNpZmljIG51bWVyaWMgdHlwZTogbnVtYmVyLCBCaWdOdW1iZXIsIG9yIEZyYWN0aW9uLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubnVtZXJpYyh4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC5udW1lcmljKCc0JykgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciA0XG4gICAqICAgIG1hdGgubnVtZXJpYygnNCcsICdudW1iZXInKSAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgNFxuICAgKiAgICBtYXRoLm51bWVyaWMoJzQnLCAnQmlnTnVtYmVyJykgICAgICAgICAgICAgIC8vIHJldHVybnMgQmlnTnVtYmVyIDRcbiAgICogICAgbWF0aC5udW1lcmljKCc0JywgJ0ZyYWN0aW9uJykgICAgICAgICAgICAgICAvLyByZXR1cm5zIEZyYWN0aW9uIDRcbiAgICogICAgbWF0aC5udW1lcmljKDQsICdGcmFjdGlvbicpICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIEZyYWN0aW9uIDRcbiAgICogICAgbWF0aC5udW1lcmljKG1hdGguZnJhY3Rpb24oMiwgNSksICdudW1iZXInKSAvLyByZXR1cm5zIG51bWJlciAwLjRcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIG51bWJlciwgZnJhY3Rpb24sIGJpZ251bWJlciwgc3RyaW5nLCBmb3JtYXRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB9IHZhbHVlXG4gICAqICAgICAgICAgICAgICBBIG51bWVyaWMgdmFsdWUgb3IgYSBzdHJpbmcgY29udGFpbmluZyBhIG51bWVyaWMgdmFsdWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG91dHB1dFR5cGVcbiAgICogICAgICAgICAgICAgIERlc2lyZWQgbnVtZXJpYyBvdXRwdXQgdHlwZS5cbiAgICogICAgICAgICAgICAgIEF2YWlsYWJsZSB2YWx1ZXM6ICdudW1iZXInLCAnQmlnTnVtYmVyJywgb3IgJ0ZyYWN0aW9uJ1xuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbn1cbiAgICogICAgICAgICAgICAgIFJldHVybnMgYW4gaW5zdGFuY2Ugb2YgdGhlIG51bWVyaWMgaW4gdGhlIHJlcXVlc3RlZCB0eXBlXG4gICAqL1xuXG4gIHJldHVybiBmdW5jdGlvbiBudW1lcmljKHZhbHVlLCBvdXRwdXRUeXBlKSB7XG4gICAgdmFyIGlucHV0VHlwZSA9ICgwLCBfaXMudHlwZU9mKSh2YWx1ZSk7XG5cbiAgICBpZiAoIShpbnB1dFR5cGUgaW4gdmFsaWRJbnB1dFR5cGVzKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ2Fubm90IGNvbnZlcnQgJyArIHZhbHVlICsgJyBvZiB0eXBlIFwiJyArIGlucHV0VHlwZSArICdcIjsgdmFsaWQgaW5wdXQgdHlwZXMgYXJlICcgKyBPYmplY3Qua2V5cyh2YWxpZElucHV0VHlwZXMpLmpvaW4oJywgJykpO1xuICAgIH1cblxuICAgIGlmICghKG91dHB1dFR5cGUgaW4gdmFsaWRPdXRwdXRUeXBlcykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0ICcgKyB2YWx1ZSArICcgdG8gdHlwZSBcIicgKyBvdXRwdXRUeXBlICsgJ1wiOyB2YWxpZCBvdXRwdXQgdHlwZXMgYXJlICcgKyBPYmplY3Qua2V5cyh2YWxpZE91dHB1dFR5cGVzKS5qb2luKCcsICcpKTtcbiAgICB9XG5cbiAgICBpZiAob3V0cHV0VHlwZSA9PT0gaW5wdXRUeXBlKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB2YWxpZE91dHB1dFR5cGVzW291dHB1dFR5cGVdKHZhbHVlKTtcbiAgICB9XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlTnVtZXJpYyA9IGNyZWF0ZU51bWVyaWM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZURlcHJlY2F0ZWRUeXBlb2YgPSBleHBvcnRzLmNyZWF0ZVR5cGVPZiA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfbG9nID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2xvZ1wiKTtcblxudmFyIG5hbWUgPSAndHlwZU9mJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlVHlwZU9mID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogRGV0ZXJtaW5lIHRoZSB0eXBlIG9mIGEgdmFyaWFibGUuXG4gICAqXG4gICAqIEZ1bmN0aW9uIGB0eXBlT2ZgIHJlY29nbml6ZXMgdGhlIGZvbGxvd2luZyB0eXBlcyBvZiBvYmplY3RzOlxuICAgKlxuICAgKiBPYmplY3QgICAgICAgICAgICAgICAgIHwgUmV0dXJucyAgICAgICB8IEV4YW1wbGVcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogbnVsbCAgICAgICAgICAgICAgICAgICB8IGAnbnVsbCdgICAgICAgfCBgbWF0aC50eXBlT2YobnVsbClgXG4gICAqIG51bWJlciAgICAgICAgICAgICAgICAgfCBgJ251bWJlcidgICAgIHwgYG1hdGgudHlwZU9mKDMuNSlgXG4gICAqIGJvb2xlYW4gICAgICAgICAgICAgICAgfCBgJ2Jvb2xlYW4nYCAgIHwgYG1hdGgudHlwZU9mKHRydWUpYFxuICAgKiBzdHJpbmcgICAgICAgICAgICAgICAgIHwgYCdzdHJpbmcnYCAgICB8IGBtYXRoLnR5cGVPZignaGVsbG8gd29ybGQnKWBcbiAgICogQXJyYXkgICAgICAgICAgICAgICAgICB8IGAnQXJyYXknYCAgICAgfCBgbWF0aC50eXBlT2YoWzEsIDIsIDNdKWBcbiAgICogRGF0ZSAgICAgICAgICAgICAgICAgICB8IGAnRGF0ZSdgICAgICAgfCBgbWF0aC50eXBlT2YobmV3IERhdGUoKSlgXG4gICAqIEZ1bmN0aW9uICAgICAgICAgICAgICAgfCBgJ0Z1bmN0aW9uJ2AgIHwgYG1hdGgudHlwZU9mKGZ1bmN0aW9uICgpIHt9KWBcbiAgICogT2JqZWN0ICAgICAgICAgICAgICAgICB8IGAnT2JqZWN0J2AgICAgfCBgbWF0aC50eXBlT2Yoe2E6IDIsIGI6IDN9KWBcbiAgICogUmVnRXhwICAgICAgICAgICAgICAgICB8IGAnUmVnRXhwJ2AgICAgfCBgbWF0aC50eXBlT2YoL2EgcmVnZXhwLylgXG4gICAqIHVuZGVmaW5lZCAgICAgICAgICAgICAgfCBgJ3VuZGVmaW5lZCdgIHwgYG1hdGgudHlwZU9mKHVuZGVmaW5lZClgXG4gICAqIG1hdGguQmlnTnVtYmVyICAgICAgICAgfCBgJ0JpZ051bWJlcidgIHwgYG1hdGgudHlwZU9mKG1hdGguYmlnbnVtYmVyKCcyLjNlNTAwJykpYFxuICAgKiBtYXRoLkNoYWluICAgICAgICAgICAgIHwgYCdDaGFpbidgICAgICB8IGBtYXRoLnR5cGVPZihtYXRoLmNoYWluKDIpKWBcbiAgICogbWF0aC5Db21wbGV4ICAgICAgICAgICB8IGAnQ29tcGxleCdgICAgfCBgbWF0aC50eXBlT2YobWF0aC5jb21wbGV4KDIsIDMpKWBcbiAgICogbWF0aC5GcmFjdGlvbiAgICAgICAgICB8IGAnRnJhY3Rpb24nYCAgfCBgbWF0aC50eXBlT2YobWF0aC5mcmFjdGlvbigxLCAzKSlgXG4gICAqIG1hdGguSGVscCAgICAgICAgICAgICAgfCBgJ0hlbHAnYCAgICAgIHwgYG1hdGgudHlwZU9mKG1hdGguaGVscCgnc3FydCcpKWBcbiAgICogbWF0aC5IZWxwICAgICAgICAgICAgICB8IGAnSGVscCdgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5oZWxwKCdzcXJ0JykpYFxuICAgKiBtYXRoLkluZGV4ICAgICAgICAgICAgIHwgYCdJbmRleCdgICAgICB8IGBtYXRoLnR5cGVPZihtYXRoLmluZGV4KDEsIDMpKWBcbiAgICogbWF0aC5NYXRyaXggICAgICAgICAgICB8IGAnTWF0cml4J2AgICAgfCBgbWF0aC50eXBlT2YobWF0aC5tYXRyaXgoW1sxLDJdLCBbMywgNF1dKSlgXG4gICAqIG1hdGguUmFuZ2UgICAgICAgICAgICAgfCBgJ1JhbmdlJ2AgICAgIHwgYG1hdGgudHlwZU9mKG1hdGgucmFuZ2UoMCwgMTApKWBcbiAgICogbWF0aC5SZXN1bHRTZXQgICAgICAgICB8IGAnUmVzdWx0U2V0J2AgfCBgbWF0aC50eXBlT2YobWF0aC5ldmFsdWF0ZSgnYT0yXFxuYj0zJykpYFxuICAgKiBtYXRoLlVuaXQgICAgICAgICAgICAgIHwgYCdVbml0J2AgICAgICB8IGBtYXRoLnR5cGVPZihtYXRoLnVuaXQoJzQ1IGRlZycpKWBcbiAgICogbWF0aC5BY2Nlc3Nvck5vZGUgICAgICAgICAgICB8IGAnQWNjZXNzb3JOb2RlJ2AgICAgICAgICAgICB8IGBtYXRoLnR5cGVPZihtYXRoLnBhcnNlKCdBWzJdJykpYFxuICAgKiBtYXRoLkFycmF5Tm9kZSAgICAgICAgICAgICAgIHwgYCdBcnJheU5vZGUnYCAgICAgICAgICAgICAgIHwgYG1hdGgudHlwZU9mKG1hdGgucGFyc2UoJ1sxLDIsM10nKSlgXG4gICAqIG1hdGguQXNzaWdubWVudE5vZGUgICAgICAgICAgfCBgJ0Fzc2lnbm1lbnROb2RlJ2AgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgneD0yJykpYFxuICAgKiBtYXRoLkJsb2NrTm9kZSAgICAgICAgICAgICAgIHwgYCdCbG9ja05vZGUnYCAgICAgICAgICAgICAgIHwgYG1hdGgudHlwZU9mKG1hdGgucGFyc2UoJ2E9MjsgYj0zJykpYFxuICAgKiBtYXRoLkNvbmRpdGlvbmFsTm9kZSAgICAgICAgIHwgYCdDb25kaXRpb25hbE5vZGUnYCAgICAgICAgIHwgYG1hdGgudHlwZU9mKG1hdGgucGFyc2UoJ3g8MCA/IC14IDogeCcpKWBcbiAgICogbWF0aC5Db25zdGFudE5vZGUgICAgICAgICAgICB8IGAnQ29uc3RhbnROb2RlJ2AgICAgICAgICAgICB8IGBtYXRoLnR5cGVPZihtYXRoLnBhcnNlKCcyLjMnKSlgXG4gICAqIG1hdGguRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSAgfCBgJ0Z1bmN0aW9uQXNzaWdubWVudE5vZGUnYCAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgnZih4KT14XjInKSlgXG4gICAqIG1hdGguRnVuY3Rpb25Ob2RlICAgICAgICAgICAgfCBgJ0Z1bmN0aW9uTm9kZSdgICAgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgnc3FydCg0KScpKWBcbiAgICogbWF0aC5JbmRleE5vZGUgICAgICAgICAgICAgICB8IGAnSW5kZXhOb2RlJ2AgICAgICAgICAgICAgICB8IGBtYXRoLnR5cGVPZihtYXRoLnBhcnNlKCdBWzJdJykuaW5kZXgpYFxuICAgKiBtYXRoLk9iamVjdE5vZGUgICAgICAgICAgICAgIHwgYCdPYmplY3ROb2RlJ2AgICAgICAgICAgICAgIHwgYG1hdGgudHlwZU9mKG1hdGgucGFyc2UoJ3thOjJ9JykpYFxuICAgKiBtYXRoLlBhcmVudGhlc2lzTm9kZSAgICAgICAgIHwgYCdQYXJlbnRoZXNpc05vZGUnYCAgICAgICAgIHwgYG1hdGgudHlwZU9mKG1hdGgucGFyc2UoJygyKzMpJykpYFxuICAgKiBtYXRoLlJhbmdlTm9kZSAgICAgICAgICAgICAgIHwgYCdSYW5nZU5vZGUnYCAgICAgICAgICAgICAgIHwgYG1hdGgudHlwZU9mKG1hdGgucGFyc2UoJzE6MTAnKSlgXG4gICAqIG1hdGguU3ltYm9sTm9kZSAgICAgICAgICAgICAgfCBgJ1N5bWJvbE5vZGUnYCAgICAgICAgICAgICAgfCBgbWF0aC50eXBlT2YobWF0aC5wYXJzZSgneCcpKWBcbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnR5cGVPZih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgbWF0aC50eXBlT2YoMy41KSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgJ251bWJlcidcbiAgICogICAgbWF0aC50eXBlT2YobWF0aC5jb21wbGV4KCcyLTRpJykpICAgIC8vIHJldHVybnMgJ0NvbXBsZXgnXG4gICAqICAgIG1hdGgudHlwZU9mKG1hdGgudW5pdCgnNDUgZGVnJykpICAgICAvLyByZXR1cm5zICdVbml0J1xuICAgKiAgICBtYXRoLnR5cGVPZignaGVsbG8gd29ybGQnKSAgICAgICAgICAgLy8gcmV0dXJucyAnc3RyaW5nJ1xuICAgKlxuICAgKiBAcGFyYW0geyp9IHggICAgIFRoZSB2YXJpYWJsZSBmb3Igd2hpY2ggdG8gdGVzdCB0aGUgdHlwZS5cbiAgICogQHJldHVybiB7c3RyaW5nfSBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSB0eXBlLiBQcmltaXRpdmUgdHlwZXMgYXJlIGxvd2VyIGNhc2UsXG4gICAqICAgICAgICAgICAgICAgICAgbm9uLXByaW1pdGl2ZSB0eXBlcyBhcmUgdXBwZXItY2FtZWwtY2FzZS5cbiAgICogICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSAnbnVtYmVyJywgJ3N0cmluZycsICdBcnJheScsICdEYXRlJy5cbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgYW55OiBfaXMudHlwZU9mXG4gIH0pO1xufSk7IC8vIEZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBkZXByZWNhdGVkIHNpbmNlIHZlcnNpb24gNi4wLjAuIERhdGU6IDIwMTgtMTEtMDZcblxuZXhwb3J0cy5jcmVhdGVUeXBlT2YgPSBjcmVhdGVUeXBlT2Y7XG52YXIgY3JlYXRlRGVwcmVjYXRlZFR5cGVvZiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KSgndHlwZW9mJywgW10sIGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAoMCwgX2xvZy53YXJuT25jZSkoJ0Z1bmN0aW9uIFwidHlwZW9mXCIgaGFzIGJlZW4gcmVuYW1lZCB0byBcInR5cGVPZlwiIGluIHY2LjAuMCwgcGxlYXNlIHVzZSB0aGUgbmV3IGZ1bmN0aW9uIGluc3RlYWQuJyk7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIF9pcy50eXBlT2YuYXBwbHkoX2lzLnR5cGVPZiwgYXJncyk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlRGVwcmVjYXRlZFR5cGVvZiA9IGNyZWF0ZURlcHJlY2F0ZWRUeXBlb2Y7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJlcGxhY2VyID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAncmVwbGFjZXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFtdO1xudmFyIGNyZWF0ZVJlcGxhY2VyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogU3RyaW5naWZ5IGRhdGEgdHlwZXMgaW50byB0aGVpciBKU09OIHJlcHJlc2VudGF0aW9uLlxuICAgKiBNb3N0IGRhdGEgdHlwZXMgY2FuIGJlIHNlcmlhbGl6ZWQgdXNpbmcgdGhlaXIgYC50b0pTT05gIG1ldGhvZCxcbiAgICogYnV0IG5vdCBhbGwsIGZvciBleGFtcGxlIHRoZSBudW1iZXIgYEluZmluaXR5YC4gRm9yIHRoZXNlIGNhc2VzIHlvdSBoYXZlXG4gICAqIHRvIHVzZSB0aGUgcmVwbGFjZXIuIEV4YW1wbGUgdXNhZ2U6XG4gICAqXG4gICAqICAgICBKU09OLnN0cmluZ2lmeShbMiwgSW5maW5pdHldLCBtYXRoLnJlcGxhY2VyKVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIHJlcGxhY2VkIG9iamVjdFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIHJlcGxhY2VyKGtleSwgdmFsdWUpIHtcbiAgICAvLyB0aGUgbnVtZXJpYyB2YWx1ZXMgSW5maW5pdGl5LCAtSW5maW5pdHksIGFuZCBOYU4gY2Fubm90IGJlIHNlcmlhbGl6ZWQgdG8gSlNPTlxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmICghaXNGaW5pdGUodmFsdWUpIHx8IGlzTmFOKHZhbHVlKSkpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1hdGhqczogJ251bWJlcicsXG4gICAgICAgIHZhbHVlOiBTdHJpbmcodmFsdWUpXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZXBsYWNlciA9IGNyZWF0ZVJlcGxhY2VyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZXZpdmVyID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAncmV2aXZlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWydjbGFzc2VzJ107XG52YXIgY3JlYXRlUmV2aXZlciA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBjbGFzc2VzID0gX3JlZi5jbGFzc2VzO1xuXG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBtYXRoanMgZGF0YSB0eXBlcyBmcm9tIHRoZWlyIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSByZXZpdmVkIG9iamVjdFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIHJldml2ZXIoa2V5LCB2YWx1ZSkge1xuICAgIHZhciBjb25zdHJ1Y3RvciA9IGNsYXNzZXNbdmFsdWUgJiYgdmFsdWUubWF0aGpzXTtcblxuICAgIGlmIChjb25zdHJ1Y3RvciAmJiB0eXBlb2YgY29uc3RydWN0b3IuZnJvbUpTT04gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBjb25zdHJ1Y3Rvci5mcm9tSlNPTih2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9O1xufSk7XG5leHBvcnRzLmNyZWF0ZVJldml2ZXIgPSBjcmVhdGVSZXZpdmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5hYnNOdW1iZXIgPSBhYnNOdW1iZXI7XG5leHBvcnRzLmFkZE51bWJlciA9IGFkZE51bWJlcjtcbmV4cG9ydHMuc3VidHJhY3ROdW1iZXIgPSBzdWJ0cmFjdE51bWJlcjtcbmV4cG9ydHMubXVsdGlwbHlOdW1iZXIgPSBtdWx0aXBseU51bWJlcjtcbmV4cG9ydHMuZGl2aWRlTnVtYmVyID0gZGl2aWRlTnVtYmVyO1xuZXhwb3J0cy51bmFyeU1pbnVzTnVtYmVyID0gdW5hcnlNaW51c051bWJlcjtcbmV4cG9ydHMudW5hcnlQbHVzTnVtYmVyID0gdW5hcnlQbHVzTnVtYmVyO1xuZXhwb3J0cy5jYnJ0TnVtYmVyID0gY2JydE51bWJlcjtcbmV4cG9ydHMuY2VpbE51bWJlciA9IGNlaWxOdW1iZXI7XG5leHBvcnRzLmN1YmVOdW1iZXIgPSBjdWJlTnVtYmVyO1xuZXhwb3J0cy5leHBOdW1iZXIgPSBleHBOdW1iZXI7XG5leHBvcnRzLmV4cG0xTnVtYmVyID0gZXhwbTFOdW1iZXI7XG5leHBvcnRzLmZpeE51bWJlciA9IGZpeE51bWJlcjtcbmV4cG9ydHMuZmxvb3JOdW1iZXIgPSBmbG9vck51bWJlcjtcbmV4cG9ydHMuZ2NkTnVtYmVyID0gZ2NkTnVtYmVyO1xuZXhwb3J0cy5sY21OdW1iZXIgPSBsY21OdW1iZXI7XG5leHBvcnRzLmxvZ051bWJlciA9IGxvZ051bWJlcjtcbmV4cG9ydHMubG9nMTBOdW1iZXIgPSBsb2cxME51bWJlcjtcbmV4cG9ydHMubG9nMk51bWJlciA9IGxvZzJOdW1iZXI7XG5leHBvcnRzLmxvZzFwTnVtYmVyID0gbG9nMXBOdW1iZXI7XG5leHBvcnRzLm1vZE51bWJlciA9IG1vZE51bWJlcjtcbmV4cG9ydHMubnRoUm9vdE51bWJlciA9IG50aFJvb3ROdW1iZXI7XG5leHBvcnRzLnNpZ25OdW1iZXIgPSBzaWduTnVtYmVyO1xuZXhwb3J0cy5zcXJ0TnVtYmVyID0gc3FydE51bWJlcjtcbmV4cG9ydHMuc3F1YXJlTnVtYmVyID0gc3F1YXJlTnVtYmVyO1xuZXhwb3J0cy54Z2NkTnVtYmVyID0geGdjZE51bWJlcjtcbmV4cG9ydHMucG93TnVtYmVyID0gcG93TnVtYmVyO1xuZXhwb3J0cy5yb3VuZE51bWJlciA9IHJvdW5kTnVtYmVyO1xuZXhwb3J0cy5ub3JtTnVtYmVyID0gbm9ybU51bWJlcjtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgbjEgPSAnbnVtYmVyJztcbnZhciBuMiA9ICdudW1iZXIsIG51bWJlcic7XG5cbmZ1bmN0aW9uIGFic051bWJlcihhKSB7XG4gIHJldHVybiBNYXRoLmFicyhhKTtcbn1cblxuYWJzTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBhZGROdW1iZXIoYSwgYikge1xuICByZXR1cm4gYSArIGI7XG59XG5cbmFkZE51bWJlci5zaWduYXR1cmUgPSBuMjtcblxuZnVuY3Rpb24gc3VidHJhY3ROdW1iZXIoYSwgYikge1xuICByZXR1cm4gYSAtIGI7XG59XG5cbnN1YnRyYWN0TnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuXG5mdW5jdGlvbiBtdWx0aXBseU51bWJlcihhLCBiKSB7XG4gIHJldHVybiBhICogYjtcbn1cblxubXVsdGlwbHlOdW1iZXIuc2lnbmF0dXJlID0gbjI7XG5cbmZ1bmN0aW9uIGRpdmlkZU51bWJlcihhLCBiKSB7XG4gIHJldHVybiBhIC8gYjtcbn1cblxuZGl2aWRlTnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuXG5mdW5jdGlvbiB1bmFyeU1pbnVzTnVtYmVyKHgpIHtcbiAgcmV0dXJuIC14O1xufVxuXG51bmFyeU1pbnVzTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiB1bmFyeVBsdXNOdW1iZXIoeCkge1xuICByZXR1cm4geDtcbn1cblxudW5hcnlQbHVzTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBjYnJ0TnVtYmVyKHgpIHtcbiAgcmV0dXJuICgwLCBfbnVtYmVyLmNicnQpKHgpO1xufVxuXG5jYnJ0TnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBjZWlsTnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGguY2VpbCh4KTtcbn1cblxuY2VpbE51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gY3ViZU51bWJlcih4KSB7XG4gIHJldHVybiB4ICogeCAqIHg7XG59XG5cbmN1YmVOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGV4cE51bWJlcih4KSB7XG4gIHJldHVybiBNYXRoLmV4cCh4KTtcbn1cblxuZXhwTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBleHBtMU51bWJlcih4KSB7XG4gIHJldHVybiAoMCwgX251bWJlci5leHBtMSkoeCk7XG59XG5cbmV4cG0xTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBmaXhOdW1iZXIoeCkge1xuICByZXR1cm4geCA+IDAgPyBNYXRoLmZsb29yKHgpIDogTWF0aC5jZWlsKHgpO1xufVxuXG5maXhOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGZsb29yTnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGguZmxvb3IoeCk7XG59XG5cbmZsb29yTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuLyoqXG4gKiBDYWxjdWxhdGUgZ2NkIGZvciBudW1iZXJzXG4gKiBAcGFyYW0ge251bWJlcn0gYVxuICogQHBhcmFtIHtudW1iZXJ9IGJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGdyZWF0ZXN0IGNvbW1vbiBkZW5vbWluYXRvciBvZiBhIGFuZCBiXG4gKi9cblxuZnVuY3Rpb24gZ2NkTnVtYmVyKGEsIGIpIHtcbiAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKGEpIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKGIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXJzIGluIGZ1bmN0aW9uIGdjZCBtdXN0IGJlIGludGVnZXIgbnVtYmVycycpO1xuICB9IC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V1Y2xpZGVhbl9hbGdvcml0aG1cblxuXG4gIHZhciByO1xuXG4gIHdoaWxlIChiICE9PSAwKSB7XG4gICAgciA9IGEgJSBiO1xuICAgIGEgPSBiO1xuICAgIGIgPSByO1xuICB9XG5cbiAgcmV0dXJuIGEgPCAwID8gLWEgOiBhO1xufVxuXG5nY2ROdW1iZXIuc2lnbmF0dXJlID0gbjI7XG4vKipcbiAqIENhbGN1bGF0ZSBsY20gZm9yIHR3byBudW1iZXJzXG4gKiBAcGFyYW0ge251bWJlcn0gYVxuICogQHBhcmFtIHtudW1iZXJ9IGJcbiAqIEByZXR1cm5zIHtudW1iZXJ9IFJldHVybnMgdGhlIGxlYXN0IGNvbW1vbiBtdWx0aXBsZSBvZiBhIGFuZCBiXG4gKi9cblxuZnVuY3Rpb24gbGNtTnVtYmVyKGEsIGIpIHtcbiAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKGEpIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKGIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXJzIGluIGZ1bmN0aW9uIGxjbSBtdXN0IGJlIGludGVnZXIgbnVtYmVycycpO1xuICB9XG5cbiAgaWYgKGEgPT09IDAgfHwgYiA9PT0gMCkge1xuICAgIHJldHVybiAwO1xuICB9IC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0V1Y2xpZGVhbl9hbGdvcml0aG1cbiAgLy8gZXZhbHVhdGUgbGNtIGhlcmUgaW5saW5lIHRvIHJlZHVjZSBvdmVyaGVhZFxuXG5cbiAgdmFyIHQ7XG4gIHZhciBwcm9kID0gYSAqIGI7XG5cbiAgd2hpbGUgKGIgIT09IDApIHtcbiAgICB0ID0gYjtcbiAgICBiID0gYSAlIHQ7XG4gICAgYSA9IHQ7XG4gIH1cblxuICByZXR1cm4gTWF0aC5hYnMocHJvZCAvIGEpO1xufVxuXG5sY21OdW1iZXIuc2lnbmF0dXJlID0gbjI7XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgbG9nYXJpdGhtIG9mIGEgdmFsdWUuXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5cbmZ1bmN0aW9uIGxvZ051bWJlcih4KSB7XG4gIHJldHVybiBNYXRoLmxvZyh4KTtcbn1cblxubG9nTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIDEwLWJhc2UgbG9nYXJpdGhtIG9mIGEgbnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5cbmZ1bmN0aW9uIGxvZzEwTnVtYmVyKHgpIHtcbiAgcmV0dXJuICgwLCBfbnVtYmVyLmxvZzEwKSh4KTtcbn1cblxubG9nMTBOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgMi1iYXNlIGxvZ2FyaXRobSBvZiBhIG51bWJlclxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuXG5mdW5jdGlvbiBsb2cyTnVtYmVyKHgpIHtcbiAgcmV0dXJuICgwLCBfbnVtYmVyLmxvZzIpKHgpO1xufVxuXG5sb2cyTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIG5hdHVyYWwgbG9nYXJpdGhtIG9mIGEgYG51bWJlcisxYFxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblxuZnVuY3Rpb24gbG9nMXBOdW1iZXIoeCkge1xuICByZXR1cm4gKDAsIF9udW1iZXIubG9nMXApKHgpO1xufVxuXG5sb2cxcE51bWJlci5zaWduYXR1cmUgPSBuMTtcbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBtb2R1bHVzIG9mIHR3byBudW1iZXJzXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEByZXR1cm5zIHtudW1iZXJ9IHJlc1xuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBtb2ROdW1iZXIoeCwgeSkge1xuICBpZiAoeSA+IDApIHtcbiAgICAvLyBXZSBkb24ndCB1c2UgSmF2YVNjcmlwdCdzICUgb3BlcmF0b3IgaGVyZSBhcyB0aGlzIGRvZXNuJ3Qgd29ya1xuICAgIC8vIGNvcnJlY3RseSBmb3IgeCA8IDAgYW5kIHggPT09IDBcbiAgICAvLyBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvTW9kdWxvX29wZXJhdGlvblxuICAgIHJldHVybiB4IC0geSAqIE1hdGguZmxvb3IoeCAvIHkpO1xuICB9IGVsc2UgaWYgKHkgPT09IDApIHtcbiAgICByZXR1cm4geDtcbiAgfSBlbHNlIHtcbiAgICAvLyB5IDwgMFxuICAgIC8vIFRPRE86IGltcGxlbWVudCBtb2QgZm9yIGEgbmVnYXRpdmUgZGl2aXNvclxuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBtb2QgZm9yIGEgbmVnYXRpdmUgZGl2aXNvcicpO1xuICB9XG59XG5cbm1vZE51bWJlci5zaWduYXR1cmUgPSBuMjtcbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBudGggcm9vdCBvZiBhLCBzb2x2ZSB4XnJvb3QgPT0gYVxuICogaHR0cDovL3Jvc2V0dGFjb2RlLm9yZy93aWtpL050aF9yb290I0phdmFTY3JpcHRcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gcm9vdFxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBudGhSb290TnVtYmVyKGEsIHJvb3QpIHtcbiAgdmFyIGludiA9IHJvb3QgPCAwO1xuXG4gIGlmIChpbnYpIHtcbiAgICByb290ID0gLXJvb3Q7XG4gIH1cblxuICBpZiAocm9vdCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUm9vdCBtdXN0IGJlIG5vbi16ZXJvJyk7XG4gIH1cblxuICBpZiAoYSA8IDAgJiYgTWF0aC5hYnMocm9vdCkgJSAyICE9PSAxKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSb290IG11c3QgYmUgb2RkIHdoZW4gYSBpcyBuZWdhdGl2ZS4nKTtcbiAgfSAvLyBlZGdlIGNhc2VzIHplcm8gYW5kIGluZmluaXR5XG5cblxuICBpZiAoYSA9PT0gMCkge1xuICAgIHJldHVybiBpbnYgPyBJbmZpbml0eSA6IDA7XG4gIH1cblxuICBpZiAoIWlzRmluaXRlKGEpKSB7XG4gICAgcmV0dXJuIGludiA/IDAgOiBhO1xuICB9XG5cbiAgdmFyIHggPSBNYXRoLnBvdyhNYXRoLmFicyhhKSwgMSAvIHJvb3QpOyAvLyBJZiBhIDwgMCwgd2UgcmVxdWlyZSB0aGF0IHJvb3QgaXMgYW4gb2RkIGludGVnZXIsXG4gIC8vIHNvICgtMSkgXiAoMS9yb290KSA9IC0xXG5cbiAgeCA9IGEgPCAwID8gLXggOiB4O1xuICByZXR1cm4gaW52ID8gMSAvIHggOiB4OyAvLyBWZXJ5IG5pY2UgYWxnb3JpdGhtLCBidXQgZmFpbHMgd2l0aCBudGhSb290KC0yLCAzKS5cbiAgLy8gTmV3dG9uJ3MgbWV0aG9kIGhhcyBzb21lIHdlbGwta25vd24gcHJvYmxlbXMgYXQgdGltZXM6XG4gIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL05ld3RvbiUyN3NfbWV0aG9kI0ZhaWx1cmVfYW5hbHlzaXNcblxuICAvKlxuICBsZXQgeCA9IDEgLy8gSW5pdGlhbCBndWVzc1xuICBsZXQgeFByZXYgPSAxXG4gIGxldCBpID0gMFxuICBjb25zdCBpTWF4ID0gMTAwMDBcbiAgZG8ge1xuICAgIGNvbnN0IGRlbHRhID0gKGEgLyBNYXRoLnBvdyh4LCByb290IC0gMSkgLSB4KSAvIHJvb3RcbiAgICB4UHJldiA9IHhcbiAgICB4ID0geCArIGRlbHRhXG4gICAgaSsrXG4gIH1cbiAgd2hpbGUgKHhQcmV2ICE9PSB4ICYmIGkgPCBpTWF4KVxuICAgaWYgKHhQcmV2ICE9PSB4KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGdW5jdGlvbiBudGhSb290IGZhaWxlZCB0byBjb252ZXJnZScpXG4gIH1cbiAgIHJldHVybiBpbnYgPyAxIC8geCA6IHhcbiAgKi9cbn1cblxubnRoUm9vdE51bWJlci5zaWduYXR1cmUgPSBuMjtcblxuZnVuY3Rpb24gc2lnbk51bWJlcih4KSB7XG4gIHJldHVybiAoMCwgX251bWJlci5zaWduKSh4KTtcbn1cblxuc2lnbk51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gc3FydE51bWJlcih4KSB7XG4gIHJldHVybiBNYXRoLnNxcnQoeCk7XG59XG5cbnNxcnROdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIHNxdWFyZU51bWJlcih4KSB7XG4gIHJldHVybiB4ICogeDtcbn1cblxuc3F1YXJlTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuLyoqXG4gKiBDYWxjdWxhdGUgeGdjZCBmb3IgdHdvIG51bWJlcnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHJldHVybiB7bnVtYmVyfSByZXN1bHRcbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24geGdjZE51bWJlcihhLCBiKSB7XG4gIC8vIHNvdXJjZTogaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvRXh0ZW5kZWRfRXVjbGlkZWFuX2FsZ29yaXRobVxuICB2YXIgdDsgLy8gdXNlZCB0byBzd2FwIHR3byB2YXJpYWJsZXNcblxuICB2YXIgcTsgLy8gcXVvdGllbnRcblxuICB2YXIgcjsgLy8gcmVtYWluZGVyXG5cbiAgdmFyIHggPSAwO1xuICB2YXIgbGFzdHggPSAxO1xuICB2YXIgeSA9IDE7XG4gIHZhciBsYXN0eSA9IDA7XG5cbiAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKGEpIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKGIpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQYXJhbWV0ZXJzIGluIGZ1bmN0aW9uIHhnY2QgbXVzdCBiZSBpbnRlZ2VyIG51bWJlcnMnKTtcbiAgfVxuXG4gIHdoaWxlIChiKSB7XG4gICAgcSA9IE1hdGguZmxvb3IoYSAvIGIpO1xuICAgIHIgPSBhIC0gcSAqIGI7XG4gICAgdCA9IHg7XG4gICAgeCA9IGxhc3R4IC0gcSAqIHg7XG4gICAgbGFzdHggPSB0O1xuICAgIHQgPSB5O1xuICAgIHkgPSBsYXN0eSAtIHEgKiB5O1xuICAgIGxhc3R5ID0gdDtcbiAgICBhID0gYjtcbiAgICBiID0gcjtcbiAgfVxuXG4gIHZhciByZXM7XG5cbiAgaWYgKGEgPCAwKSB7XG4gICAgcmVzID0gWy1hLCAtbGFzdHgsIC1sYXN0eV07XG4gIH0gZWxzZSB7XG4gICAgcmVzID0gW2EsIGEgPyBsYXN0eCA6IDAsIGxhc3R5XTtcbiAgfVxuXG4gIHJldHVybiByZXM7XG59XG5cbnhnY2ROdW1iZXIuc2lnbmF0dXJlID0gbjI7XG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIHBvd2VyIG9mIHggdG8geSwgeF55LCBmb3IgdHdvIG51bWJlcnMuXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHBhcmFtIHtudW1iZXJ9IHlcbiAqIEByZXR1cm4ge251bWJlcn0gcmVzXG4gKi9cblxuZnVuY3Rpb24gcG93TnVtYmVyKHgsIHkpIHtcbiAgLy8geF5JbmZpbml0eSA9PT0gMCBpZiAtMSA8IHggPCAxXG4gIC8vIEEgcmVhbCBudW1iZXIgMCBpcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGNvbXBsZXgoMClcbiAgaWYgKHggKiB4IDwgMSAmJiB5ID09PSBJbmZpbml0eSB8fCB4ICogeCA+IDEgJiYgeSA9PT0gLUluZmluaXR5KSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICByZXR1cm4gTWF0aC5wb3coeCwgeSk7XG59XG5cbnBvd051bWJlci5zaWduYXR1cmUgPSBuMjtcbi8qKlxuICogcm91bmQgYSBudW1iZXIgdG8gdGhlIGdpdmVuIG51bWJlciBvZiBkZWNpbWFscywgb3IgdG8gemVybyBpZiBkZWNpbWFscyBpc1xuICogbm90IHByb3ZpZGVkXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBkZWNpbWFscyAgICAgICBudW1iZXIgb2YgZGVjaW1hbHMsIGJldHdlZW4gMCBhbmQgMTUgKDAgYnkgZGVmYXVsdClcbiAqIEByZXR1cm4ge251bWJlcn0gcm91bmRlZFZhbHVlXG4gKi9cblxuZnVuY3Rpb24gcm91bmROdW1iZXIodmFsdWUpIHtcbiAgdmFyIGRlY2ltYWxzID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAwO1xuICByZXR1cm4gcGFyc2VGbG9hdCgoMCwgX251bWJlci50b0ZpeGVkKSh2YWx1ZSwgZGVjaW1hbHMpKTtcbn1cblxucm91bmROdW1iZXIuc2lnbmF0dXJlID0gbjI7XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgbm9ybSBvZiBhIG51bWJlciwgdGhlIGFic29sdXRlIHZhbHVlLlxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuXG5mdW5jdGlvbiBub3JtTnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGguYWJzKHgpO1xufVxuXG5ub3JtTnVtYmVyLnNpZ25hdHVyZSA9IG4xOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iaXRBbmROdW1iZXIgPSBiaXRBbmROdW1iZXI7XG5leHBvcnRzLmJpdE5vdE51bWJlciA9IGJpdE5vdE51bWJlcjtcbmV4cG9ydHMuYml0T3JOdW1iZXIgPSBiaXRPck51bWJlcjtcbmV4cG9ydHMuYml0WG9yTnVtYmVyID0gYml0WG9yTnVtYmVyO1xuZXhwb3J0cy5sZWZ0U2hpZnROdW1iZXIgPSBsZWZ0U2hpZnROdW1iZXI7XG5leHBvcnRzLnJpZ2h0QXJpdGhTaGlmdE51bWJlciA9IHJpZ2h0QXJpdGhTaGlmdE51bWJlcjtcbmV4cG9ydHMucmlnaHRMb2dTaGlmdE51bWJlciA9IHJpZ2h0TG9nU2hpZnROdW1iZXI7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIG4xID0gJ251bWJlcic7XG52YXIgbjIgPSAnbnVtYmVyLCBudW1iZXInO1xuXG5mdW5jdGlvbiBiaXRBbmROdW1iZXIoeCwgeSkge1xuICBpZiAoISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeCkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVnZXJzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGJpdEFuZCcpO1xuICB9XG5cbiAgcmV0dXJuIHggJiB5O1xufVxuXG5iaXRBbmROdW1iZXIuc2lnbmF0dXJlID0gbjI7XG5cbmZ1bmN0aW9uIGJpdE5vdE51bWJlcih4KSB7XG4gIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh4KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW50ZWdlciBleHBlY3RlZCBpbiBmdW5jdGlvbiBiaXROb3QnKTtcbiAgfVxuXG4gIHJldHVybiB+eDtcbn1cblxuYml0Tm90TnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBiaXRPck51bWJlcih4LCB5KSB7XG4gIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh4KSB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW50ZWdlcnMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gYml0T3InKTtcbiAgfVxuXG4gIHJldHVybiB4IHwgeTtcbn1cblxuYml0T3JOdW1iZXIuc2lnbmF0dXJlID0gbjI7XG5cbmZ1bmN0aW9uIGJpdFhvck51bWJlcih4LCB5KSB7XG4gIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh4KSB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW50ZWdlcnMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gYml0WG9yJyk7XG4gIH1cblxuICByZXR1cm4geCBeIHk7XG59XG5cbmJpdFhvck51bWJlci5zaWduYXR1cmUgPSBuMjtcblxuZnVuY3Rpb24gbGVmdFNoaWZ0TnVtYmVyKHgsIHkpIHtcbiAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKHgpIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKHkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiBsZWZ0U2hpZnQnKTtcbiAgfVxuXG4gIHJldHVybiB4IDw8IHk7XG59XG5cbmxlZnRTaGlmdE51bWJlci5zaWduYXR1cmUgPSBuMjtcblxuZnVuY3Rpb24gcmlnaHRBcml0aFNoaWZ0TnVtYmVyKHgsIHkpIHtcbiAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKHgpIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKHkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiByaWdodEFyaXRoU2hpZnQnKTtcbiAgfVxuXG4gIHJldHVybiB4ID4+IHk7XG59XG5cbnJpZ2h0QXJpdGhTaGlmdE51bWJlci5zaWduYXR1cmUgPSBuMjtcblxuZnVuY3Rpb24gcmlnaHRMb2dTaGlmdE51bWJlcih4LCB5KSB7XG4gIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh4KSB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKSh5KSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW50ZWdlcnMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gcmlnaHRMb2dTaGlmdCcpO1xuICB9XG5cbiAgcmV0dXJuIHggPj4+IHk7XG59XG5cbnJpZ2h0TG9nU2hpZnROdW1iZXIuc2lnbmF0dXJlID0gbjI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbWJpbmF0aW9uc051bWJlciA9IGNvbWJpbmF0aW9uc051bWJlcjtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgX3Byb2R1Y3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvcHJvZHVjdFwiKTtcblxuZnVuY3Rpb24gY29tYmluYXRpb25zTnVtYmVyKG4sIGspIHtcbiAgaWYgKCEoMCwgX251bWJlci5pc0ludGVnZXIpKG4pIHx8IG4gPCAwKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUG9zaXRpdmUgaW50ZWdlciB2YWx1ZSBleHBlY3RlZCBpbiBmdW5jdGlvbiBjb21iaW5hdGlvbnMnKTtcbiAgfVxuXG4gIGlmICghKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShrKSB8fCBrIDwgMCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Bvc2l0aXZlIGludGVnZXIgdmFsdWUgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gY29tYmluYXRpb25zJyk7XG4gIH1cblxuICBpZiAoayA+IG4pIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdrIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIG4nKTtcbiAgfVxuXG4gIHZhciBuTWludXNrID0gbiAtIGs7XG4gIHZhciBwcm9kcmFuZ2U7XG5cbiAgaWYgKGsgPCBuTWludXNrKSB7XG4gICAgcHJvZHJhbmdlID0gKDAsIF9wcm9kdWN0LnByb2R1Y3QpKG5NaW51c2sgKyAxLCBuKTtcbiAgICByZXR1cm4gcHJvZHJhbmdlIC8gKDAsIF9wcm9kdWN0LnByb2R1Y3QpKDEsIGspO1xuICB9XG5cbiAgcHJvZHJhbmdlID0gKDAsIF9wcm9kdWN0LnByb2R1Y3QpKGsgKyAxLCBuKTtcbiAgcmV0dXJuIHByb2RyYW5nZSAvICgwLCBfcHJvZHVjdC5wcm9kdWN0KSgxLCBuTWludXNrKTtcbn1cblxuY29tYmluYXRpb25zTnVtYmVyLnNpZ25hdHVyZSA9ICdudW1iZXIsIG51bWJlcic7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnBoaSA9IGV4cG9ydHMuZSA9IGV4cG9ydHMudGF1ID0gZXhwb3J0cy5waSA9IHZvaWQgMDtcbnZhciBwaSA9IE1hdGguUEk7XG5leHBvcnRzLnBpID0gcGk7XG52YXIgdGF1ID0gMiAqIE1hdGguUEk7XG5leHBvcnRzLnRhdSA9IHRhdTtcbnZhciBlID0gTWF0aC5FO1xuZXhwb3J0cy5lID0gZTtcbnZhciBwaGkgPSAxLjYxODAzMzk4ODc0OTg5NDg0ODIwNDU4NjgzNDM2NTYzODExNzcyMDMwOTE3OTgwNTc2Mjg2MjEzNTQ1O1xuZXhwb3J0cy5waGkgPSBwaGk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5cbnZhciBfYXJpdGhtZXRpYyA9IHJlcXVpcmUoXCIuL2FyaXRobWV0aWNcIik7XG5cbk9iamVjdC5rZXlzKF9hcml0aG1ldGljKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBfYXJpdGhtZXRpY1trZXldO1xuICAgIH1cbiAgfSk7XG59KTtcblxudmFyIF9iaXR3aXNlID0gcmVxdWlyZShcIi4vYml0d2lzZVwiKTtcblxuT2JqZWN0LmtleXMoX2JpdHdpc2UpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF9iaXR3aXNlW2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX2NvbWJpbmF0aW9ucyA9IHJlcXVpcmUoXCIuL2NvbWJpbmF0aW9uc1wiKTtcblxuT2JqZWN0LmtleXMoX2NvbWJpbmF0aW9ucykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX2NvbWJpbmF0aW9uc1trZXldO1xuICAgIH1cbiAgfSk7XG59KTtcblxudmFyIF9jb25zdGFudHMgPSByZXF1aXJlKFwiLi9jb25zdGFudHNcIik7XG5cbk9iamVjdC5rZXlzKF9jb25zdGFudHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF9jb25zdGFudHNba2V5XTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbnZhciBfbG9naWNhbCA9IHJlcXVpcmUoXCIuL2xvZ2ljYWxcIik7XG5cbk9iamVjdC5rZXlzKF9sb2dpY2FsKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgaWYgKGtleSA9PT0gXCJkZWZhdWx0XCIgfHwga2V5ID09PSBcIl9fZXNNb2R1bGVcIikgcmV0dXJuO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHJldHVybiBfbG9naWNhbFtrZXldO1xuICAgIH1cbiAgfSk7XG59KTtcblxudmFyIF9yZWxhdGlvbmFsID0gcmVxdWlyZShcIi4vcmVsYXRpb25hbFwiKTtcblxuT2JqZWN0LmtleXMoX3JlbGF0aW9uYWwpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF9yZWxhdGlvbmFsW2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX3Byb2JhYmlsaXR5ID0gcmVxdWlyZShcIi4vcHJvYmFiaWxpdHlcIik7XG5cbk9iamVjdC5rZXlzKF9wcm9iYWJpbGl0eSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX3Byb2JhYmlsaXR5W2tleV07XG4gICAgfVxuICB9KTtcbn0pO1xuXG52YXIgX3RyaWdvbm9tZXRyeSA9IHJlcXVpcmUoXCIuL3RyaWdvbm9tZXRyeVwiKTtcblxuT2JqZWN0LmtleXMoX3RyaWdvbm9tZXRyeSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gIGlmIChrZXkgPT09IFwiZGVmYXVsdFwiIHx8IGtleSA9PT0gXCJfX2VzTW9kdWxlXCIpIHJldHVybjtcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwge1xuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICByZXR1cm4gX3RyaWdvbm9tZXRyeVtrZXldO1xuICAgIH1cbiAgfSk7XG59KTtcblxudmFyIF91dGlscyA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuXG5PYmplY3Qua2V5cyhfdXRpbHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICBpZiAoa2V5ID09PSBcImRlZmF1bHRcIiB8fCBrZXkgPT09IFwiX19lc01vZHVsZVwiKSByZXR1cm47XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHtcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgcmV0dXJuIF91dGlsc1trZXldO1xuICAgIH1cbiAgfSk7XG59KTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubm90TnVtYmVyID0gbm90TnVtYmVyO1xuZXhwb3J0cy5vck51bWJlciA9IG9yTnVtYmVyO1xuZXhwb3J0cy54b3JOdW1iZXIgPSB4b3JOdW1iZXI7XG5leHBvcnRzLmFuZE51bWJlciA9IGFuZE51bWJlcjtcbnZhciBuMSA9ICdudW1iZXInO1xudmFyIG4yID0gJ251bWJlciwgbnVtYmVyJztcblxuZnVuY3Rpb24gbm90TnVtYmVyKHgpIHtcbiAgcmV0dXJuICF4O1xufVxuXG5ub3ROdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIG9yTnVtYmVyKHgsIHkpIHtcbiAgcmV0dXJuICEhKHggfHwgeSk7XG59XG5cbm9yTnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuXG5mdW5jdGlvbiB4b3JOdW1iZXIoeCwgeSkge1xuICByZXR1cm4gISF4ICE9PSAhIXk7XG59XG5cbnhvck51bWJlci5zaWduYXR1cmUgPSBuMjtcblxuZnVuY3Rpb24gYW5kTnVtYmVyKHgsIHkpIHtcbiAgcmV0dXJuICEhKHggJiYgeSk7XG59XG5cbmFuZE51bWJlci5zaWduYXR1cmUgPSBuMjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZ2FtbWFOdW1iZXIgPSBnYW1tYU51bWJlcjtcbmV4cG9ydHMuZ2FtbWFQID0gZXhwb3J0cy5nYW1tYUcgPSB2b2lkIDA7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9wcm9kdWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL3Byb2R1Y3RcIik7XG5cbmZ1bmN0aW9uIGdhbW1hTnVtYmVyKG4pIHtcbiAgdmFyIHg7XG5cbiAgaWYgKCgwLCBfbnVtYmVyLmlzSW50ZWdlcikobikpIHtcbiAgICBpZiAobiA8PSAwKSB7XG4gICAgICByZXR1cm4gaXNGaW5pdGUobikgPyBJbmZpbml0eSA6IE5hTjtcbiAgICB9XG5cbiAgICBpZiAobiA+IDE3MSkge1xuICAgICAgcmV0dXJuIEluZmluaXR5OyAvLyBXaWxsIG92ZXJmbG93XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfcHJvZHVjdC5wcm9kdWN0KSgxLCBuIC0gMSk7XG4gIH1cblxuICBpZiAobiA8IDAuNSkge1xuICAgIHJldHVybiBNYXRoLlBJIC8gKE1hdGguc2luKE1hdGguUEkgKiBuKSAqIGdhbW1hTnVtYmVyKDEgLSBuKSk7XG4gIH1cblxuICBpZiAobiA+PSAxNzEuMzUpIHtcbiAgICByZXR1cm4gSW5maW5pdHk7IC8vIHdpbGwgb3ZlcmZsb3dcbiAgfVxuXG4gIGlmIChuID4gODUuMCkge1xuICAgIC8vIEV4dGVuZGVkIFN0aXJsaW5nIEFwcHJveFxuICAgIHZhciB0d29OID0gbiAqIG47XG4gICAgdmFyIHRocmVlTiA9IHR3b04gKiBuO1xuICAgIHZhciBmb3VyTiA9IHRocmVlTiAqIG47XG4gICAgdmFyIGZpdmVOID0gZm91ck4gKiBuO1xuICAgIHJldHVybiBNYXRoLnNxcnQoMiAqIE1hdGguUEkgLyBuKSAqIE1hdGgucG93KG4gLyBNYXRoLkUsIG4pICogKDEgKyAxIC8gKDEyICogbikgKyAxIC8gKDI4OCAqIHR3b04pIC0gMTM5IC8gKDUxODQwICogdGhyZWVOKSAtIDU3MSAvICgyNDg4MzIwICogZm91ck4pICsgMTYzODc5IC8gKDIwOTAxODg4MCAqIGZpdmVOKSArIDUyNDY4MTkgLyAoNzUyNDY3OTY4MDAgKiBmaXZlTiAqIG4pKTtcbiAgfVxuXG4gIC0tbjtcbiAgeCA9IGdhbW1hUFswXTtcblxuICBmb3IgKHZhciBpID0gMTsgaSA8IGdhbW1hUC5sZW5ndGg7ICsraSkge1xuICAgIHggKz0gZ2FtbWFQW2ldIC8gKG4gKyBpKTtcbiAgfVxuXG4gIHZhciB0ID0gbiArIGdhbW1hRyArIDAuNTtcbiAgcmV0dXJuIE1hdGguc3FydCgyICogTWF0aC5QSSkgKiBNYXRoLnBvdyh0LCBuICsgMC41KSAqIE1hdGguZXhwKC10KSAqIHg7XG59XG5cbmdhbW1hTnVtYmVyLnNpZ25hdHVyZSA9ICdudW1iZXInOyAvLyBUT0RPOiBjb21tZW50IG9uIHRoZSB2YXJpYWJsZXMgZyBhbmQgcFxuXG52YXIgZ2FtbWFHID0gNC43NDIxODc1O1xuZXhwb3J0cy5nYW1tYUcgPSBnYW1tYUc7XG52YXIgZ2FtbWFQID0gWzAuOTk5OTk5OTk5OTk5OTk3MDkxODIsIDU3LjE1NjIzNTY2NTg2MjkyMzUxNywgLTU5LjU5Nzk2MDM1NTQ3NTQ5MTI0OCwgMTQuMTM2MDk3OTc0NzQxNzQ3MTc0LCAtMC40OTE5MTM4MTYwOTc2MjAxOTk3OCwgMC4zMzk5NDY0OTk4NDgxMTg4ODY5OWUtNCwgMC40NjUyMzYyODkyNzA0ODU3NTY2NWUtNCwgLTAuOTgzNzQ0NzUzMDQ4Nzk1NjQ2NzdlLTQsIDAuMTU4MDg4NzAzMjI0OTEyNDg4ODRlLTMsIC0wLjIxMDI2NDQ0MTcyNDEwNDg4MzE5ZS0zLCAwLjIxNzQzOTYxODExNTIxMjY0MzIwZS0zLCAtMC4xNjQzMTgxMDY1MzY3NjM4OTAyMmUtMywgMC44NDQxODIyMzk4Mzg1Mjc0MzI5M2UtNCwgLTAuMjYxOTA4Mzg0MDE1ODE0MDg2NzBlLTQsIDAuMzY4OTkxODI2NTk1MzE2MjI3MDRlLTVdO1xuZXhwb3J0cy5nYW1tYVAgPSBnYW1tYVA7IiwiXCJ1c2Ugc3RyaWN0XCI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFjb3NOdW1iZXIgPSBhY29zTnVtYmVyO1xuZXhwb3J0cy5hY29zaE51bWJlciA9IGFjb3NoTnVtYmVyO1xuZXhwb3J0cy5hY290TnVtYmVyID0gYWNvdE51bWJlcjtcbmV4cG9ydHMuYWNvdGhOdW1iZXIgPSBhY290aE51bWJlcjtcbmV4cG9ydHMuYWNzY051bWJlciA9IGFjc2NOdW1iZXI7XG5leHBvcnRzLmFjc2NoTnVtYmVyID0gYWNzY2hOdW1iZXI7XG5leHBvcnRzLmFzZWNOdW1iZXIgPSBhc2VjTnVtYmVyO1xuZXhwb3J0cy5hc2VjaE51bWJlciA9IGFzZWNoTnVtYmVyO1xuZXhwb3J0cy5hc2luTnVtYmVyID0gYXNpbk51bWJlcjtcbmV4cG9ydHMuYXNpbmhOdW1iZXIgPSBhc2luaE51bWJlcjtcbmV4cG9ydHMuYXRhbk51bWJlciA9IGF0YW5OdW1iZXI7XG5leHBvcnRzLmF0YW4yTnVtYmVyID0gYXRhbjJOdW1iZXI7XG5leHBvcnRzLmF0YW5oTnVtYmVyID0gYXRhbmhOdW1iZXI7XG5leHBvcnRzLmNvc051bWJlciA9IGNvc051bWJlcjtcbmV4cG9ydHMuY29zaE51bWJlciA9IGNvc2hOdW1iZXI7XG5leHBvcnRzLmNvdE51bWJlciA9IGNvdE51bWJlcjtcbmV4cG9ydHMuY290aE51bWJlciA9IGNvdGhOdW1iZXI7XG5leHBvcnRzLmNzY051bWJlciA9IGNzY051bWJlcjtcbmV4cG9ydHMuY3NjaE51bWJlciA9IGNzY2hOdW1iZXI7XG5leHBvcnRzLnNlY051bWJlciA9IHNlY051bWJlcjtcbmV4cG9ydHMuc2VjaE51bWJlciA9IHNlY2hOdW1iZXI7XG5leHBvcnRzLnNpbk51bWJlciA9IHNpbk51bWJlcjtcbmV4cG9ydHMuc2luaE51bWJlciA9IHNpbmhOdW1iZXI7XG5leHBvcnRzLnRhbk51bWJlciA9IHRhbk51bWJlcjtcbmV4cG9ydHMudGFuaE51bWJlciA9IHRhbmhOdW1iZXI7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIG4xID0gJ251bWJlcic7XG52YXIgbjIgPSAnbnVtYmVyLCBudW1iZXInO1xuXG5mdW5jdGlvbiBhY29zTnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGguYWNvcyh4KTtcbn1cblxuYWNvc051bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gYWNvc2hOdW1iZXIoeCkge1xuICByZXR1cm4gKDAsIF9udW1iZXIuYWNvc2gpKHgpO1xufVxuXG5hY29zaE51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gYWNvdE51bWJlcih4KSB7XG4gIHJldHVybiBNYXRoLmF0YW4oMSAvIHgpO1xufVxuXG5hY290TnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBhY290aE51bWJlcih4KSB7XG4gIHJldHVybiBpc0Zpbml0ZSh4KSA/IChNYXRoLmxvZygoeCArIDEpIC8geCkgKyBNYXRoLmxvZyh4IC8gKHggLSAxKSkpIC8gMiA6IDA7XG59XG5cbmFjb3RoTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBhY3NjTnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGguYXNpbigxIC8geCk7XG59XG5cbmFjc2NOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGFjc2NoTnVtYmVyKHgpIHtcbiAgdmFyIHhJbnYgPSAxIC8geDtcbiAgcmV0dXJuIE1hdGgubG9nKHhJbnYgKyBNYXRoLnNxcnQoeEludiAqIHhJbnYgKyAxKSk7XG59XG5cbmFjc2NoTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBhc2VjTnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGguYWNvcygxIC8geCk7XG59XG5cbmFzZWNOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGFzZWNoTnVtYmVyKHgpIHtcbiAgdmFyIHhJbnYgPSAxIC8geDtcbiAgdmFyIHJldCA9IE1hdGguc3FydCh4SW52ICogeEludiAtIDEpO1xuICByZXR1cm4gTWF0aC5sb2cocmV0ICsgeEludik7XG59XG5cbmFzZWNoTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBhc2luTnVtYmVyKHgpIHtcbiAgcmV0dXJuIE1hdGguYXNpbih4KTtcbn1cblxuYXNpbk51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gYXNpbmhOdW1iZXIoeCkge1xuICByZXR1cm4gKDAsIF9udW1iZXIuYXNpbmgpKHgpO1xufVxuXG5hc2luaE51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gYXRhbk51bWJlcih4KSB7XG4gIHJldHVybiBNYXRoLmF0YW4oeCk7XG59XG5cbmF0YW5OdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIGF0YW4yTnVtYmVyKHksIHgpIHtcbiAgcmV0dXJuIE1hdGguYXRhbjIoeSwgeCk7XG59XG5cbmF0YW4yTnVtYmVyLnNpZ25hdHVyZSA9IG4yO1xuXG5mdW5jdGlvbiBhdGFuaE51bWJlcih4KSB7XG4gIHJldHVybiAoMCwgX251bWJlci5hdGFuaCkoeCk7XG59XG5cbmF0YW5oTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBjb3NOdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC5jb3MoeCk7XG59XG5cbmNvc051bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gY29zaE51bWJlcih4KSB7XG4gIHJldHVybiAoMCwgX251bWJlci5jb3NoKSh4KTtcbn1cblxuY29zaE51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gY290TnVtYmVyKHgpIHtcbiAgcmV0dXJuIDEgLyBNYXRoLnRhbih4KTtcbn1cblxuY290TnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBjb3RoTnVtYmVyKHgpIHtcbiAgdmFyIGUgPSBNYXRoLmV4cCgyICogeCk7XG4gIHJldHVybiAoZSArIDEpIC8gKGUgLSAxKTtcbn1cblxuY290aE51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gY3NjTnVtYmVyKHgpIHtcbiAgcmV0dXJuIDEgLyBNYXRoLnNpbih4KTtcbn1cblxuY3NjTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBjc2NoTnVtYmVyKHgpIHtcbiAgLy8gY29uc2lkZXIgdmFsdWVzIGNsb3NlIHRvIHplcm8gKCsvLSlcbiAgaWYgKHggPT09IDApIHtcbiAgICByZXR1cm4gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBNYXRoLmFicygyIC8gKE1hdGguZXhwKHgpIC0gTWF0aC5leHAoLXgpKSkgKiAoMCwgX251bWJlci5zaWduKSh4KTtcbiAgfVxufVxuXG5jc2NoTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBzZWNOdW1iZXIoeCkge1xuICByZXR1cm4gMSAvIE1hdGguY29zKHgpO1xufVxuXG5zZWNOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIHNlY2hOdW1iZXIoeCkge1xuICByZXR1cm4gMiAvIChNYXRoLmV4cCh4KSArIE1hdGguZXhwKC14KSk7XG59XG5cbnNlY2hOdW1iZXIuc2lnbmF0dXJlID0gbjE7XG5cbmZ1bmN0aW9uIHNpbk51bWJlcih4KSB7XG4gIHJldHVybiBNYXRoLnNpbih4KTtcbn1cblxuc2luTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiBzaW5oTnVtYmVyKHgpIHtcbiAgcmV0dXJuICgwLCBfbnVtYmVyLnNpbmgpKHgpO1xufVxuXG5zaW5oTnVtYmVyLnNpZ25hdHVyZSA9IG4xO1xuXG5mdW5jdGlvbiB0YW5OdW1iZXIoeCkge1xuICByZXR1cm4gTWF0aC50YW4oeCk7XG59XG5cbnRhbk51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gdGFuaE51bWJlcih4KSB7XG4gIHJldHVybiAoMCwgX251bWJlci50YW5oKSh4KTtcbn1cblxudGFuaE51bWJlci5zaWduYXR1cmUgPSBuMTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuaXNJbnRlZ2VyTnVtYmVyID0gaXNJbnRlZ2VyTnVtYmVyO1xuZXhwb3J0cy5pc05lZ2F0aXZlTnVtYmVyID0gaXNOZWdhdGl2ZU51bWJlcjtcbmV4cG9ydHMuaXNQb3NpdGl2ZU51bWJlciA9IGlzUG9zaXRpdmVOdW1iZXI7XG5leHBvcnRzLmlzWmVyb051bWJlciA9IGlzWmVyb051bWJlcjtcbmV4cG9ydHMuaXNOYU5OdW1iZXIgPSBpc05hTk51bWJlcjtcblxudmFyIF9udW1iZXIgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvbnVtYmVyXCIpO1xuXG52YXIgbjEgPSAnbnVtYmVyJztcblxuZnVuY3Rpb24gaXNJbnRlZ2VyTnVtYmVyKHgpIHtcbiAgcmV0dXJuICgwLCBfbnVtYmVyLmlzSW50ZWdlcikoeCk7XG59XG5cbmlzSW50ZWdlck51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gaXNOZWdhdGl2ZU51bWJlcih4KSB7XG4gIHJldHVybiB4IDwgMDtcbn1cblxuaXNOZWdhdGl2ZU51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gaXNQb3NpdGl2ZU51bWJlcih4KSB7XG4gIHJldHVybiB4ID4gMDtcbn1cblxuaXNQb3NpdGl2ZU51bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gaXNaZXJvTnVtYmVyKHgpIHtcbiAgcmV0dXJuIHggPT09IDA7XG59XG5cbmlzWmVyb051bWJlci5zaWduYXR1cmUgPSBuMTtcblxuZnVuY3Rpb24gaXNOYU5OdW1iZXIoeCkge1xuICByZXR1cm4gTnVtYmVyLmlzTmFOKHgpO1xufVxuXG5pc05hTk51bWJlci5zaWduYXR1cmUgPSBuMTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQmlnTnVtYmVyQ2xhc3MgPSB2b2lkIDA7XG5cbnZhciBfZGVjaW1hbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcImRlY2ltYWwuanNcIikpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgXCJkZWZhdWx0XCI6IG9iaiB9OyB9XG5cbnZhciBuYW1lID0gJ0JpZ051bWJlcic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyc/b24nLCAnY29uZmlnJ107XG52YXIgY3JlYXRlQmlnTnVtYmVyQ2xhc3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgb24gPSBfcmVmLm9uLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWc7XG5cbiAgdmFyIEJpZ051bWJlciA9IF9kZWNpbWFsW1wiZGVmYXVsdFwiXS5jbG9uZSh7XG4gICAgcHJlY2lzaW9uOiBjb25maWcucHJlY2lzaW9uXG4gIH0pO1xuICAvKipcbiAgICogQXR0YWNoIHR5cGUgaW5mb3JtYXRpb25cbiAgICovXG5cblxuICBCaWdOdW1iZXIucHJvdG90eXBlLnR5cGUgPSAnQmlnTnVtYmVyJztcbiAgQmlnTnVtYmVyLnByb3RvdHlwZS5pc0JpZ051bWJlciA9IHRydWU7XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIGEgQmlnTnVtYmVyIGNvbnRhaW5pbmdcbiAgICogdHlwZSBpbmZvcm1hdGlvblxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczpcbiAgICogICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkJpZ051bWJlclwiLCBcInZhbHVlXCI6IFwiMC4yXCJ9YFxuICAgKi9cblxuICBCaWdOdW1iZXIucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnQmlnTnVtYmVyJyxcbiAgICAgIHZhbHVlOiB0aGlzLnRvU3RyaW5nKClcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYSBCaWdOdW1iZXIgZnJvbSBhIEpTT04gb2JqZWN0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBhIEpTT04gb2JqZWN0IHN0cnVjdHVyZWQgYXM6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiQmlnTnVtYmVyXCIsIFwidmFsdWVcIjogXCIwLjJcIn1gXG4gICAqIEByZXR1cm4ge0JpZ051bWJlcn1cbiAgICovXG5cblxuICBCaWdOdW1iZXIuZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKGpzb24udmFsdWUpO1xuICB9O1xuXG4gIGlmIChvbikge1xuICAgIC8vIGxpc3RlbiBmb3IgY2hhbmdlZCBpbiB0aGUgY29uZmlndXJhdGlvbiwgYXV0b21hdGljYWxseSBhcHBseSBjaGFuZ2VkIHByZWNpc2lvblxuICAgIG9uKCdjb25maWcnLCBmdW5jdGlvbiAoY3VyciwgcHJldikge1xuICAgICAgaWYgKGN1cnIucHJlY2lzaW9uICE9PSBwcmV2LnByZWNpc2lvbikge1xuICAgICAgICBCaWdOdW1iZXIuY29uZmlnKHtcbiAgICAgICAgICBwcmVjaXNpb246IGN1cnIucHJlY2lzaW9uXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIEJpZ051bWJlcjtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJpZ051bWJlckNsYXNzID0gY3JlYXRlQmlnTnVtYmVyQ2xhc3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJpZ251bWJlciA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgbmFtZSA9ICdiaWdudW1iZXInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQmlnTnVtYmVyJ107XG52YXIgY3JlYXRlQmlnbnVtYmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIEJpZ051bWJlciA9IF9yZWYuQmlnTnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBCaWdOdW1iZXIsIHdoaWNoIGNhbiBzdG9yZSBudW1iZXJzIHdpdGggYXJiaXRyYXJ5IHByZWNpc2lvbi5cbiAgICogV2hlbiBhIG1hdHJpeCBpcyBwcm92aWRlZCwgYWxsIGVsZW1lbnRzIHdpbGwgYmUgY29udmVydGVkIHRvIEJpZ051bWJlci5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmJpZ251bWJlcih4KVxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgMC4xICsgMC4yICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDAuMzAwMDAwMDAwMDAwMDAwMDRcbiAgICogICAgbWF0aC5iaWdudW1iZXIoMC4xKSArIG1hdGguYmlnbnVtYmVyKDAuMikgIC8vIHJldHVybnMgQmlnTnVtYmVyIDAuM1xuICAgKlxuICAgKlxuICAgKiAgICA3LjJlNTAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBudW1iZXIgSW5maW5pdHlcbiAgICogICAgbWF0aC5iaWdudW1iZXIoJzcuMmU1MDAnKSAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgQmlnTnVtYmVyIDcuMmU1MDBcbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGJvb2xlYW4sIGNvbXBsZXgsIGluZGV4LCBtYXRyaXgsIHN0cmluZywgdW5pdFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IHN0cmluZyB8IEZyYWN0aW9uIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXggfCBib29sZWFuIHwgbnVsbH0gW3ZhbHVlXSAgVmFsdWUgZm9yIHRoZSBiaWcgbnVtYmVyLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIGJ5IGRlZmF1bHQuXG4gICAqIEByZXR1cm5zIHtCaWdOdW1iZXJ9IFRoZSBjcmVhdGVkIGJpZ251bWJlclxuICAgKi9cbiAgdmFyIGJpZ251bWJlciA9IHR5cGVkKCdiaWdudW1iZXInLCB7XG4gICAgJyc6IGZ1bmN0aW9uIF8oKSB7XG4gICAgICByZXR1cm4gbmV3IEJpZ051bWJlcigwKTtcbiAgICB9LFxuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIC8vIGNvbnZlcnQgdG8gc3RyaW5nIHRvIHByZXZlbnQgZXJyb3JzIGluIGNhc2Ugb2YgPjE1IGRpZ2l0c1xuICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeCArICcnKTtcbiAgICB9LFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHtcbiAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKHgpO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgLy8gd2UgYXNzdW1lIGEgQmlnTnVtYmVyIGlzIGltbXV0YWJsZVxuICAgICAgcmV0dXJuIHg7XG4gICAgfSxcbiAgICBGcmFjdGlvbjogZnVuY3Rpb24gRnJhY3Rpb24oeCkge1xuICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoeC5uKS5kaXYoeC5kKS50aW1lcyh4LnMpO1xuICAgIH0sXG4gICAgXCJudWxsXCI6IGZ1bmN0aW9uIF9udWxsKHgpIHtcbiAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKDApO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBiaWdudW1iZXIpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBiaWdudW1iZXI7XG59KTtcbmV4cG9ydHMuY3JlYXRlQmlnbnVtYmVyID0gY3JlYXRlQmlnbnVtYmVyOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVCb29sZWFuID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ2Jvb2xlYW4nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVCb29sZWFuID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgYm9vbGVhbiBvciBjb252ZXJ0IGEgc3RyaW5nIG9yIG51bWJlciB0byBhIGJvb2xlYW4uXG4gICAqIEluIGNhc2Ugb2YgYSBudW1iZXIsIGB0cnVlYCBpcyByZXR1cm5lZCBmb3Igbm9uLXplcm8gbnVtYmVycywgYW5kIGBmYWxzZWAgaW5cbiAgICogY2FzZSBvZiB6ZXJvLlxuICAgKiBTdHJpbmdzIGNhbiBiZSBgJ3RydWUnYCBvciBgJ2ZhbHNlJ2AsIG9yIGNhbiBjb250YWluIGEgbnVtYmVyLlxuICAgKiBXaGVuIHZhbHVlIGlzIGEgbWF0cml4LCBhbGwgZWxlbWVudHMgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gYm9vbGVhbi5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLmJvb2xlYW4oeClcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguYm9vbGVhbigwKSAgICAgLy8gcmV0dXJucyBmYWxzZVxuICAgKiAgICBtYXRoLmJvb2xlYW4oMSkgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmJvb2xlYW4oLTMpICAgICAvLyByZXR1cm5zIHRydWVcbiAgICogICAgbWF0aC5ib29sZWFuKCd0cnVlJykgICAgIC8vIHJldHVybnMgdHJ1ZVxuICAgKiAgICBtYXRoLmJvb2xlYW4oJ2ZhbHNlJykgICAgIC8vIHJldHVybnMgZmFsc2VcbiAgICogICAgbWF0aC5ib29sZWFuKFsxLCAwLCAxLCAxXSkgICAgIC8vIHJldHVybnMgW3RydWUsIGZhbHNlLCB0cnVlLCB0cnVlXVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYmlnbnVtYmVyLCBjb21wbGV4LCBpbmRleCwgbWF0cml4LCBzdHJpbmcsIHVuaXRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuIHwgQXJyYXkgfCBNYXRyaXggfCBudWxsfSB2YWx1ZSAgQSB2YWx1ZSBvZiBhbnkgdHlwZVxuICAgKiBAcmV0dXJuIHtib29sZWFuIHwgQXJyYXkgfCBNYXRyaXh9IFRoZSBib29sZWFuIHZhbHVlXG4gICAqL1xuICB2YXIgYm9vbCA9IHR5cGVkKG5hbWUsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9LFxuICAgIFwiYm9vbGVhblwiOiBmdW5jdGlvbiBib29sZWFuKHgpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH0sXG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgcmV0dXJuICEheDtcbiAgICB9LFxuICAgIFwibnVsbFwiOiBmdW5jdGlvbiBfbnVsbCh4KSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSxcbiAgICBCaWdOdW1iZXI6IGZ1bmN0aW9uIEJpZ051bWJlcih4KSB7XG4gICAgICByZXR1cm4gIXguaXNaZXJvKCk7XG4gICAgfSxcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyh4KSB7XG4gICAgICAvLyB0cnkgY2FzZSBpbnNlbnNpdGl2ZVxuICAgICAgdmFyIGxjYXNlID0geC50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICBpZiAobGNhc2UgPT09ICd0cnVlJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAobGNhc2UgPT09ICdmYWxzZScpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSAvLyB0ZXN0IHdoZXRoZXIgdmFsdWUgaXMgYSB2YWxpZCBudW1iZXJcblxuXG4gICAgICB2YXIgbnVtID0gTnVtYmVyKHgpO1xuXG4gICAgICBpZiAoeCAhPT0gJycgJiYgIWlzTmFOKG51bSkpIHtcbiAgICAgICAgcmV0dXJuICEhbnVtO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IFwiJyArIHggKyAnXCIgdG8gYSBib29sZWFuJyk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGJvb2wpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBib29sO1xufSk7XG5leHBvcnRzLmNyZWF0ZUJvb2xlYW4gPSBjcmVhdGVCb29sZWFuOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDaGFpbkNsYXNzID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX3N0cmluZyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9zdHJpbmdcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ0NoYWluJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJz9vbicsICdtYXRoJ107XG52YXIgY3JlYXRlQ2hhaW5DbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBvbiA9IF9yZWYub24sXG4gICAgICBtYXRoID0gX3JlZi5tYXRoO1xuXG4gIC8qKlxuICAgKiBAY29uc3RydWN0b3IgQ2hhaW5cbiAgICogV3JhcCBhbnkgdmFsdWUgaW4gYSBjaGFpbiwgYWxsb3dpbmcgdG8gcGVyZm9ybSBjaGFpbmVkIG9wZXJhdGlvbnMgb25cbiAgICogdGhlIHZhbHVlLlxuICAgKlxuICAgKiBBbGwgbWV0aG9kcyBhdmFpbGFibGUgaW4gdGhlIG1hdGguanMgbGlicmFyeSBjYW4gYmUgY2FsbGVkIHVwb24gdGhlIGNoYWluLFxuICAgKiBhbmQgdGhlbiB3aWxsIGJlIGV2YWx1YXRlZCB3aXRoIHRoZSB2YWx1ZSBpdHNlbGYgYXMgZmlyc3QgYXJndW1lbnQuXG4gICAqIFRoZSBjaGFpbiBjYW4gYmUgY2xvc2VkIGJ5IGV4ZWN1dGluZyBjaGFpbi5kb25lKCksIHdoaWNoIHdpbGwgcmV0dXJuXG4gICAqIHRoZSBmaW5hbCB2YWx1ZS5cbiAgICpcbiAgICogVGhlIENoYWluIGhhcyBhIG51bWJlciBvZiBzcGVjaWFsIGZ1bmN0aW9uczpcbiAgICogLSBkb25lKCkgICAgICAgICAgICAgRmluYWxpemUgdGhlIGNoYWluZWQgb3BlcmF0aW9uIGFuZCByZXR1cm4gdGhlXG4gICAqICAgICAgICAgICAgICAgICAgICAgIGNoYWluJ3MgdmFsdWUuXG4gICAqIC0gdmFsdWVPZigpICAgICAgICAgIFRoZSBzYW1lIGFzIGRvbmUoKVxuICAgKiAtIHRvU3RyaW5nKCkgICAgICAgICBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjaGFpbidzIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IFt2YWx1ZV1cbiAgICovXG4gIGZ1bmN0aW9uIENoYWluKHZhbHVlKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIENoYWluKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF9pcy5pc0NoYWluKSh2YWx1ZSkpIHtcbiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZS52YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQXR0YWNoIHR5cGUgaW5mb3JtYXRpb25cbiAgICovXG5cblxuICBDaGFpbi5wcm90b3R5cGUudHlwZSA9ICdDaGFpbic7XG4gIENoYWluLnByb3RvdHlwZS5pc0NoYWluID0gdHJ1ZTtcbiAgLyoqXG4gICAqIENsb3NlIHRoZSBjaGFpbi4gUmV0dXJucyB0aGUgZmluYWwgdmFsdWUuXG4gICAqIERvZXMgdGhlIHNhbWUgYXMgbWV0aG9kIHZhbHVlT2YoKVxuICAgKiBAcmV0dXJucyB7Kn0gdmFsdWVcbiAgICovXG5cbiAgQ2hhaW4ucHJvdG90eXBlLmRvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH07XG4gIC8qKlxuICAgKiBDbG9zZSB0aGUgY2hhaW4uIFJldHVybnMgdGhlIGZpbmFsIHZhbHVlLlxuICAgKiBEb2VzIHRoZSBzYW1lIGFzIG1ldGhvZCBkb25lKClcbiAgICogQHJldHVybnMgeyp9IHZhbHVlXG4gICAqL1xuXG5cbiAgQ2hhaW4ucHJvdG90eXBlLnZhbHVlT2YgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWU7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhbHVlIGluIHRoZSBjaGFpblxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuXG4gIENoYWluLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKDAsIF9zdHJpbmcuZm9ybWF0KSh0aGlzLnZhbHVlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIGNoYWluXG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgQ2hhaW4ucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnQ2hhaW4nLFxuICAgICAgdmFsdWU6IHRoaXMudmFsdWVcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYSBDaGFpbiBmcm9tIGl0cyBKU09OIHJlcHJlc2VudGF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiQ2hhaW5cIiwgdmFsdWU6IC4uLn1gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtDaGFpbn1cbiAgICovXG5cblxuICBDaGFpbi5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBDaGFpbihqc29uLnZhbHVlKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIHByb3h5IG1ldGhvZCBmb3IgdGhlIGNoYWluXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuICAgICAgVGhlIGZ1bmN0aW9uIHRvIGJlIHByb3hpZWRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBmbiBpcyBubyBmdW5jdGlvbiwgaXQgaXMgc2lsZW50bHkgaWdub3JlZC5cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBjcmVhdGVQcm94eShuYW1lLCBmbikge1xuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIENoYWluLnByb3RvdHlwZVtuYW1lXSA9IGNoYWluaWZ5KGZuKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHByb3h5IG1ldGhvZCBmb3IgdGhlIGNoYWluXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IHJlc29sdmVyICAgVGhlIGZ1bmN0aW9uIHJlc29sdmluZyB3aXRoIHRoZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIHRvIGJlIHByb3hpZWRcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBjcmVhdGVMYXp5UHJveHkobmFtZSwgcmVzb2x2ZXIpIHtcbiAgICAoMCwgX29iamVjdC5sYXp5KShDaGFpbi5wcm90b3R5cGUsIG5hbWUsIGZ1bmN0aW9uIG91dGVyUmVzb2x2ZXIoKSB7XG4gICAgICB2YXIgZm4gPSByZXNvbHZlcigpO1xuXG4gICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHJldHVybiBjaGFpbmlmeShmbik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7IC8vIGlmIG5vdCBhIGZ1bmN0aW9uLCBpZ25vcmVcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogTWFrZSBhIGZ1bmN0aW9uIGNoYWluYWJsZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmblxuICAgKiBAcmV0dXJuIHtGdW5jdGlvbn0gY2hhaW4gZnVuY3Rpb25cbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBjaGFpbmlmeShmbikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgYXJncyA9IFt0aGlzLnZhbHVlXTsgLy8gYHRoaXNgIHdpbGwgYmUgdGhlIGNvbnRleHQgb2YgYSBDaGFpbiBpbnN0YW5jZVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBhcmdzW2kgKyAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5ldyBDaGFpbihmbi5hcHBseShmbiwgYXJncykpO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHByb3h5IGZvciBhIHNpbmdsZSBtZXRob2QsIG9yIGFuIG9iamVjdCB3aXRoIG11bHRpcGxlIG1ldGhvZHMuXG4gICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAqXG4gICAqICAgQ2hhaW4uY3JlYXRlUHJveHkoJ2FkZCcsIGZ1bmN0aW9uIGFkZCAoeCwgeSkgey4uLn0pXG4gICAqICAgQ2hhaW4uY3JlYXRlUHJveHkoe1xuICAgKiAgICAgYWRkOiAgICAgIGZ1bmN0aW9uIGFkZCAoeCwgeSkgey4uLn0sXG4gICAqICAgICBzdWJ0cmFjdDogZnVuY3Rpb24gc3VidHJhY3QgKHgsIHkpIHsuLi59XG4gICAqICAgfVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZyB8IE9iamVjdH0gYXJnMCAgIEEgbmFtZSAoc3RyaW5nKSwgb3IgYW4gb2JqZWN0IHdpdGhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnNcbiAgICogQHBhcmFtIHsqfSBbYXJnMV0gICAgICAgICAgICAgICBBIGZ1bmN0aW9uLCB3aGVuIGFyZzAgaXMgYSBuYW1lXG4gICAqL1xuXG5cbiAgQ2hhaW4uY3JlYXRlUHJveHkgPSBmdW5jdGlvbiAoYXJnMCwgYXJnMSkge1xuICAgIGlmICh0eXBlb2YgYXJnMCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGNyZWF0ZVByb3h5KG5hbWUsIHZhbHVlKVxuICAgICAgY3JlYXRlUHJveHkoYXJnMCwgYXJnMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKF9uYW1lKSB7XG4gICAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoYXJnMCwgX25hbWUpICYmIGV4Y2x1ZGVkTmFtZXNbX25hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjcmVhdGVMYXp5UHJveHkoX25hbWUsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmcwW19uYW1lXTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgLy8gY3JlYXRlUHJveHkodmFsdWVzKVxuICAgICAgZm9yICh2YXIgX25hbWUgaW4gYXJnMCkge1xuICAgICAgICBfbG9vcChfbmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHZhciBleGNsdWRlZE5hbWVzID0ge1xuICAgIGV4cHJlc3Npb246IHRydWUsXG4gICAgZG9jczogdHJ1ZSxcbiAgICB0eXBlOiB0cnVlLFxuICAgIGNsYXNzZXM6IHRydWUsXG4gICAganNvbjogdHJ1ZSxcbiAgICBlcnJvcjogdHJ1ZSxcbiAgICBpc0NoYWluOiB0cnVlIC8vIGNvbmZsaWN0cyB3aXRoIHRoZSBwcm9wZXJ0eSBpc0NoYWluIG9mIGEgQ2hhaW4gaW5zdGFuY2VcblxuICB9OyAvLyBjcmVhdGUgcHJveHkgZm9yIGV2ZXJ5dGhpbmcgdGhhdCBpcyBpbiBtYXRoLmpzXG5cbiAgQ2hhaW4uY3JlYXRlUHJveHkobWF0aCk7IC8vIHJlZ2lzdGVyIG9uIHRoZSBpbXBvcnQgZXZlbnQsIGF1dG9tYXRpY2FsbHkgYWRkIGEgcHJveHkgZm9yIGV2ZXJ5IGltcG9ydGVkIGZ1bmN0aW9uLlxuXG4gIGlmIChvbikge1xuICAgIG9uKCdpbXBvcnQnLCBmdW5jdGlvbiAobmFtZSwgcmVzb2x2ZXIsIHBhdGgpIHtcbiAgICAgIGlmICghcGF0aCkge1xuICAgICAgICAvLyBhbiBpbXBvcnRlZCBmdW5jdGlvbiAobm90IGEgZGF0YSB0eXBlIG9yIHNvbWV0aGluZyBzcGVjaWFsKVxuICAgICAgICBjcmVhdGVMYXp5UHJveHkobmFtZSwgcmVzb2x2ZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIENoYWluO1xufSwge1xuICBpc0NsYXNzOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQ2hhaW5DbGFzcyA9IGNyZWF0ZUNoYWluQ2xhc3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNoYWluID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnY2hhaW4nO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnQ2hhaW4nXTtcbnZhciBjcmVhdGVDaGFpbiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBDaGFpbiA9IF9yZWYuQ2hhaW47XG5cbiAgLyoqXG4gICAqIFdyYXAgYW55IHZhbHVlIGluIGEgY2hhaW4sIGFsbG93aW5nIHRvIHBlcmZvcm0gY2hhaW5lZCBvcGVyYXRpb25zIG9uXG4gICAqIHRoZSB2YWx1ZS5cbiAgICpcbiAgICogQWxsIG1ldGhvZHMgYXZhaWxhYmxlIGluIHRoZSBtYXRoLmpzIGxpYnJhcnkgY2FuIGJlIGNhbGxlZCB1cG9uIHRoZSBjaGFpbixcbiAgICogYW5kIHRoZW4gd2lsbCBiZSBldmFsdWF0ZWQgd2l0aCB0aGUgdmFsdWUgaXRzZWxmIGFzIGZpcnN0IGFyZ3VtZW50LlxuICAgKiBUaGUgY2hhaW4gY2FuIGJlIGNsb3NlZCBieSBleGVjdXRpbmcgYGNoYWluLmRvbmUoKWAsIHdoaWNoIHJldHVybnNcbiAgICogdGhlIGZpbmFsIHZhbHVlLlxuICAgKlxuICAgKiBUaGUgY2hhaW4gaGFzIGEgbnVtYmVyIG9mIHNwZWNpYWwgZnVuY3Rpb25zOlxuICAgKlxuICAgKiAtIGBkb25lKClgICAgICBGaW5hbGl6ZSB0aGUgY2hhaW4gYW5kIHJldHVybiB0aGUgY2hhaW4ncyB2YWx1ZS5cbiAgICogLSBgdmFsdWVPZigpYCAgVGhlIHNhbWUgYXMgYGRvbmUoKWBcbiAgICogLSBgdG9TdHJpbmcoKWAgRXhlY3V0ZXMgYG1hdGguZm9ybWF0KClgIG9udG8gdGhlIGNoYWluJ3MgdmFsdWUsIHJldHVybmluZ1xuICAgKiAgICAgICAgICAgICAgICBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdmFsdWUuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5jaGFpbih2YWx1ZSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLmNoYWluKDMpXG4gICAqICAgICAgICAgLmFkZCg0KVxuICAgKiAgICAgICAgIC5zdWJ0cmFjdCgyKVxuICAgKiAgICAgICAgIC5kb25lKCkgICAgIC8vIDVcbiAgICpcbiAgICogICAgIG1hdGguY2hhaW4oIFtbMSwgMl0sIFszLCA0XV0gKVxuICAgKiAgICAgICAgIC5zdWJzZXQobWF0aC5pbmRleCgwLCAwKSwgOClcbiAgICogICAgICAgICAubXVsdGlwbHkoMylcbiAgICogICAgICAgICAuZG9uZSgpICAgICAvLyBbWzI0LCA2XSwgWzksIDEyXV1cbiAgICpcbiAgICogQHBhcmFtIHsqfSBbdmFsdWVdICAgQSB2YWx1ZSBvZiBhbnkgdHlwZSBvbiB3aGljaCB0byBzdGFydCBhIGNoYWluZWQgb3BlcmF0aW9uLlxuICAgKiBAcmV0dXJuIHttYXRoLkNoYWlufSBUaGUgY3JlYXRlZCBjaGFpblxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiBuZXcgQ2hhaW4oKTtcbiAgICB9LFxuICAgIGFueTogZnVuY3Rpb24gYW55KHZhbHVlKSB7XG4gICAgICByZXR1cm4gbmV3IENoYWluKHZhbHVlKTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZUNoYWluID0gY3JlYXRlQ2hhaW47IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbXBsZXhDbGFzcyA9IHZvaWQgMDtcblxudmFyIF9jb21wbGV4ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiY29tcGxleC5qc1wiKSk7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbnZhciBuYW1lID0gJ0NvbXBsZXgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFtdO1xudmFyIGNyZWF0ZUNvbXBsZXhDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uXG4gICAqL1xuICBfY29tcGxleFtcImRlZmF1bHRcIl0ucHJvdG90eXBlLnR5cGUgPSAnQ29tcGxleCc7XG4gIF9jb21wbGV4W1wiZGVmYXVsdFwiXS5wcm90b3R5cGUuaXNDb21wbGV4ID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEdldCBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgdGhlIGNvbXBsZXggbnVtYmVyXG4gICAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgYSBKU09OIG9iamVjdCBzdHJ1Y3R1cmVkIGFzOlxuICAgKiAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiQ29tcGxleFwiLCBcInJlXCI6IDIsIFwiaW1cIjogM31gXG4gICAqL1xuXG4gIF9jb21wbGV4W1wiZGVmYXVsdFwiXS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdDb21wbGV4JyxcbiAgICAgIHJlOiB0aGlzLnJlLFxuICAgICAgaW06IHRoaXMuaW1cbiAgICB9O1xuICB9O1xuICAvKlxuICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBjb21wbGV4IG51bWJlciBpbiBwb2xhciBub3RhdGlvblxuICAgKiBUaGUgYW5nbGUgcGhpIHdpbGwgYmUgc2V0IGluIHRoZSBpbnRlcnZhbCBvZiBbLXBpLCBwaV0uXG4gICAqIEByZXR1cm4ge3tyOiBudW1iZXIsIHBoaTogbnVtYmVyfX0gUmV0dXJucyBhbmQgb2JqZWN0IHdpdGggcHJvcGVydGllcyByIGFuZCBwaGkuXG4gICAqL1xuXG5cbiAgX2NvbXBsZXhbXCJkZWZhdWx0XCJdLnByb3RvdHlwZS50b1BvbGFyID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICByOiB0aGlzLmFicygpLFxuICAgICAgcGhpOiB0aGlzLmFyZygpXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tcGxleCBudW1iZXIsXG4gICAqIHdpdGggb3B0aW9uYWwgZm9ybWF0dGluZyBvcHRpb25zLlxuICAgKiBAcGFyYW0ge09iamVjdCB8IG51bWJlciB8IEZ1bmN0aW9ufSBbb3B0aW9uc10gIEZvcm1hdHRpbmcgb3B0aW9ucy4gU2VlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliL3V0aWxzL251bWJlcjpmb3JtYXQgZm9yIGFcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiBvZiB0aGUgYXZhaWxhYmxlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5cbiAgICogQHJldHVybiB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBfY29tcGxleFtcImRlZmF1bHRcIl0ucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgdmFyIHN0ciA9ICcnO1xuICAgIHZhciBpbSA9IHRoaXMuaW07XG4gICAgdmFyIHJlID0gdGhpcy5yZTtcbiAgICB2YXIgc3RyUmUgPSAoMCwgX251bWJlci5mb3JtYXQpKHRoaXMucmUsIG9wdGlvbnMpO1xuICAgIHZhciBzdHJJbSA9ICgwLCBfbnVtYmVyLmZvcm1hdCkodGhpcy5pbSwgb3B0aW9ucyk7IC8vIHJvdW5kIGVpdGhlciByZSBvciBpbSB3aGVuIHNtYWxsZXIgdGhhbiB0aGUgY29uZmlndXJlZCBwcmVjaXNpb25cblxuICAgIHZhciBwcmVjaXNpb24gPSAoMCwgX2lzLmlzTnVtYmVyKShvcHRpb25zKSA/IG9wdGlvbnMgOiBvcHRpb25zID8gb3B0aW9ucy5wcmVjaXNpb24gOiBudWxsO1xuXG4gICAgaWYgKHByZWNpc2lvbiAhPT0gbnVsbCkge1xuICAgICAgdmFyIGVwc2lsb24gPSBNYXRoLnBvdygxMCwgLXByZWNpc2lvbik7XG5cbiAgICAgIGlmIChNYXRoLmFicyhyZSAvIGltKSA8IGVwc2lsb24pIHtcbiAgICAgICAgcmUgPSAwO1xuICAgICAgfVxuXG4gICAgICBpZiAoTWF0aC5hYnMoaW0gLyByZSkgPCBlcHNpbG9uKSB7XG4gICAgICAgIGltID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW0gPT09IDApIHtcbiAgICAgIC8vIHJlYWwgdmFsdWVcbiAgICAgIHN0ciA9IHN0clJlO1xuICAgIH0gZWxzZSBpZiAocmUgPT09IDApIHtcbiAgICAgIC8vIHB1cmVseSBjb21wbGV4IHZhbHVlXG4gICAgICBpZiAoaW0gPT09IDEpIHtcbiAgICAgICAgc3RyID0gJ2knO1xuICAgICAgfSBlbHNlIGlmIChpbSA9PT0gLTEpIHtcbiAgICAgICAgc3RyID0gJy1pJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0ciA9IHN0ckltICsgJ2knO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBjb21wbGV4IHZhbHVlXG4gICAgICBpZiAoaW0gPCAwKSB7XG4gICAgICAgIGlmIChpbSA9PT0gLTEpIHtcbiAgICAgICAgICBzdHIgPSBzdHJSZSArICcgLSBpJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHIgPSBzdHJSZSArICcgLSAnICsgc3RySW0uc3Vic3RyaW5nKDEpICsgJ2knO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaW0gPT09IDEpIHtcbiAgICAgICAgICBzdHIgPSBzdHJSZSArICcgKyBpJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzdHIgPSBzdHJSZSArICcgKyAnICsgc3RySW0gKyAnaSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3RyO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgY29tcGxleCBudW1iZXIgZnJvbSBwb2xhciBjb29yZGluYXRlc1xuICAgKlxuICAgKiBVc2FnZTpcbiAgICpcbiAgICogICAgIENvbXBsZXguZnJvbVBvbGFyKHI6IG51bWJlciwgcGhpOiBudW1iZXIpIDogQ29tcGxleFxuICAgKiAgICAgQ29tcGxleC5mcm9tUG9sYXIoe3I6IG51bWJlciwgcGhpOiBudW1iZXJ9KSA6IENvbXBsZXhcbiAgICpcbiAgICogQHBhcmFtIHsqfSBhcmdzLi4uXG4gICAqIEByZXR1cm4ge0NvbXBsZXh9XG4gICAqL1xuXG5cbiAgX2NvbXBsZXhbXCJkZWZhdWx0XCJdLmZyb21Qb2xhciA9IGZ1bmN0aW9uIChhcmdzKSB7XG4gICAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHtcbiAgICAgICAgICB2YXIgYXJnID0gYXJndW1lbnRzWzBdO1xuXG4gICAgICAgICAgaWYgKF90eXBlb2YoYXJnKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHJldHVybiAoMCwgX2NvbXBsZXhbXCJkZWZhdWx0XCJdKShhcmcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnB1dCBoYXMgdG8gYmUgYW4gb2JqZWN0IHdpdGggciBhbmQgcGhpIGtleXMuJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAge1xuICAgICAgICAgIHZhciByID0gYXJndW1lbnRzWzBdO1xuICAgICAgICAgIHZhciBwaGkgPSBhcmd1bWVudHNbMV07XG5cbiAgICAgICAgICBpZiAoKDAsIF9pcy5pc051bWJlcikocikpIHtcbiAgICAgICAgICAgIGlmICgoMCwgX2lzLmlzVW5pdCkocGhpKSAmJiBwaGkuaGFzQmFzZSgnQU5HTEUnKSkge1xuICAgICAgICAgICAgICAvLyBjb252ZXJ0IHVuaXQgdG8gYSBudW1iZXIgaW4gcmFkaWFuc1xuICAgICAgICAgICAgICBwaGkgPSBwaGkudG9OdW1iZXIoJ3JhZCcpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoKDAsIF9pcy5pc051bWJlcikocGhpKSkge1xuICAgICAgICAgICAgICByZXR1cm4gbmV3IF9jb21wbGV4W1wiZGVmYXVsdFwiXSh7XG4gICAgICAgICAgICAgICAgcjogcixcbiAgICAgICAgICAgICAgICBwaGk6IHBoaVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGhpIGlzIG5vdCBhIG51bWJlciBub3IgYW4gYW5nbGUgdW5pdC4nKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmFkaXVzIHIgaXMgbm90IGEgbnVtYmVyLicpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1dyb25nIG51bWJlciBvZiBhcmd1bWVudHMgaW4gZnVuY3Rpb24gZnJvbVBvbGFyJyk7XG4gICAgfVxuICB9O1xuXG4gIF9jb21wbGV4W1wiZGVmYXVsdFwiXS5wcm90b3R5cGUudmFsdWVPZiA9IF9jb21wbGV4W1wiZGVmYXVsdFwiXS5wcm90b3R5cGUudG9TdHJpbmc7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBDb21wbGV4IG51bWJlciBmcm9tIGEgSlNPTiBvYmplY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IGpzb24gIEEgSlNPTiBPYmplY3Qgc3RydWN0dXJlZCBhc1xuICAgKiAgICAgICAgICAgICAgICAgICAgICAge1wibWF0aGpzXCI6IFwiQ29tcGxleFwiLCBcInJlXCI6IDIsIFwiaW1cIjogM31cbiAgICogICAgICAgICAgICAgICAgICAgICAgIEFsbCBwcm9wZXJ0aWVzIGFyZSBvcHRpb25hbCwgZGVmYXVsdCB2YWx1ZXNcbiAgICogICAgICAgICAgICAgICAgICAgICAgIGZvciBgcmVgIGFuZCBgaW1gIGFyZSAwLlxuICAgKiBAcmV0dXJuIHtDb21wbGV4fSBSZXR1cm5zIGEgbmV3IENvbXBsZXggbnVtYmVyXG4gICAqL1xuXG4gIF9jb21wbGV4W1wiZGVmYXVsdFwiXS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBfY29tcGxleFtcImRlZmF1bHRcIl0oanNvbik7XG4gIH07XG4gIC8qKlxuICAgKiBDb21wYXJlIHR3byBjb21wbGV4IG51bWJlcnMsIGBhYCBhbmQgYGJgOlxuICAgKlxuICAgKiAtIFJldHVybnMgMSB3aGVuIHRoZSByZWFsIHBhcnQgb2YgYGFgIGlzIGxhcmdlciB0aGFuIHRoZSByZWFsIHBhcnQgb2YgYGJgXG4gICAqIC0gUmV0dXJucyAtMSB3aGVuIHRoZSByZWFsIHBhcnQgb2YgYGFgIGlzIHNtYWxsZXIgdGhhbiB0aGUgcmVhbCBwYXJ0IG9mIGBiYFxuICAgKiAtIFJldHVybnMgMSB3aGVuIHRoZSByZWFsIHBhcnRzIGFyZSBlcXVhbFxuICAgKiAgIGFuZCB0aGUgaW1hZ2luYXJ5IHBhcnQgb2YgYGFgIGlzIGxhcmdlciB0aGFuIHRoZSBpbWFnaW5hcnkgcGFydCBvZiBgYmBcbiAgICogLSBSZXR1cm5zIC0xIHdoZW4gdGhlIHJlYWwgcGFydHMgYXJlIGVxdWFsXG4gICAqICAgYW5kIHRoZSBpbWFnaW5hcnkgcGFydCBvZiBgYWAgaXMgc21hbGxlciB0aGFuIHRoZSBpbWFnaW5hcnkgcGFydCBvZiBgYmBcbiAgICogLSBSZXR1cm5zIDAgd2hlbiBib3RoIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0cyBhcmUgZXF1YWwuXG4gICAqXG4gICAqIEBwYXJhbXMge0NvbXBsZXh9IGFcbiAgICogQHBhcmFtcyB7Q29tcGxleH0gYlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfSBSZXR1cm5zIHRoZSBjb21wYXJpc29uIHJlc3VsdDogLTEsIDAsIG9yIDFcbiAgICovXG5cblxuICBfY29tcGxleFtcImRlZmF1bHRcIl0uY29tcGFyZSA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgaWYgKGEucmUgPiBiLnJlKSB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG5cbiAgICBpZiAoYS5yZSA8IGIucmUpIHtcbiAgICAgIHJldHVybiAtMTtcbiAgICB9XG5cbiAgICBpZiAoYS5pbSA+IGIuaW0pIHtcbiAgICAgIHJldHVybiAxO1xuICAgIH1cblxuICAgIGlmIChhLmltIDwgYi5pbSkge1xuICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHJldHVybiAwO1xuICB9O1xuXG4gIHJldHVybiBfY29tcGxleFtcImRlZmF1bHRcIl07XG59LCB7XG4gIGlzQ2xhc3M6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVDb21wbGV4Q2xhc3MgPSBjcmVhdGVDb21wbGV4Q2xhc3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNvbXBsZXggPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAnY29tcGxleCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdDb21wbGV4J107XG52YXIgY3JlYXRlQ29tcGxleCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBDb21wbGV4ID0gX3JlZi5Db21wbGV4O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjb21wbGV4IHZhbHVlIG9yIGNvbnZlcnQgYSB2YWx1ZSB0byBhIGNvbXBsZXggdmFsdWUuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguY29tcGxleCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlcyBhIGNvbXBsZXggdmFsdWUgd2l0aCB6ZXJvXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFzIHJlYWwgYW5kIGltYWdpbmFyeSBwYXJ0LlxuICAgKiAgICAgbWF0aC5jb21wbGV4KHJlIDogbnVtYmVyLCBpbSA6IHN0cmluZykgICAvLyBjcmVhdGVzIGEgY29tcGxleCB2YWx1ZSB3aXRoIHByb3ZpZGVkXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlcyBmb3IgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQuXG4gICAqICAgICBtYXRoLmNvbXBsZXgocmUgOiBudW1iZXIpICAgICAgICAgICAgICAgIC8vIGNyZWF0ZXMgYSBjb21wbGV4IHZhbHVlIHdpdGggcHJvdmlkZWRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVhbCB2YWx1ZSBhbmQgemVybyBpbWFnaW5hcnkgcGFydC5cbiAgICogICAgIG1hdGguY29tcGxleChjb21wbGV4IDogQ29tcGxleCkgICAgICAgICAgLy8gY2xvbmVzIHRoZSBwcm92aWRlZCBjb21wbGV4IHZhbHVlLlxuICAgKiAgICAgbWF0aC5jb21wbGV4KGFyZyA6IHN0cmluZykgICAgICAgICAgICAgICAvLyBwYXJzZXMgYSBzdHJpbmcgaW50byBhIGNvbXBsZXggdmFsdWUuXG4gICAqICAgICBtYXRoLmNvbXBsZXgoYXJyYXkgOiBBcnJheSkgICAgICAgICAgICAgIC8vIGNvbnZlcnRzIHRoZSBlbGVtZW50cyBvZiB0aGUgYXJyYXlcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3IgbWF0cml4IGVsZW1lbnQgd2lzZSBpbnRvIGFcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29tcGxleCB2YWx1ZS5cbiAgICogICAgIG1hdGguY29tcGxleCh7cmU6IG51bWJlciwgaW06IG51bWJlcn0pICAgLy8gY3JlYXRlcyBhIGNvbXBsZXggdmFsdWUgd2l0aCBwcm92aWRlZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZXMgZm9yIHJlYWwgYW4gaW1hZ2luYXJ5IHBhcnQuXG4gICAqICAgICBtYXRoLmNvbXBsZXgoe3I6IG51bWJlciwgcGhpOiBudW1iZXJ9KSAgIC8vIGNyZWF0ZXMgYSBjb21wbGV4IHZhbHVlIHdpdGggcHJvdmlkZWRcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcG9sYXIgY29vcmRpbmF0ZXNcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLmNvbXBsZXgoMywgLTQpICAgICAvLyBhID0gQ29tcGxleCAzIC0gNGlcbiAgICogICAgYS5yZSA9IDUgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgPSBDb21wbGV4IDUgLSA0aVxuICAgKiAgICBjb25zdCBpID0gYS5pbSAgICAgICAgICAgICAgICAgICAgLy8gTnVtYmVyIC00XG4gICAqICAgIGNvbnN0IGIgPSBtYXRoLmNvbXBsZXgoJzIgKyA2aScpICAvLyBDb21wbGV4IDIgKyA2aVxuICAgKiAgICBjb25zdCBjID0gbWF0aC5jb21wbGV4KCkgICAgICAgICAgLy8gQ29tcGxleCAwICsgMGlcbiAgICogICAgY29uc3QgZCA9IG1hdGguYWRkKGEsIGIpICAgICAgICAgIC8vIENvbXBsZXggNSArIDJpXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaWdudW1iZXIsIGJvb2xlYW4sIGluZGV4LCBtYXRyaXgsIG51bWJlciwgc3RyaW5nLCB1bml0XG4gICAqXG4gICAqIEBwYXJhbSB7KiB8IEFycmF5IHwgTWF0cml4fSBbYXJnc11cbiAgICogICAgICAgICAgICBBcmd1bWVudHMgc3BlY2lmeWluZyB0aGUgcmVhbCBhbmQgaW1hZ2luYXJ5IHBhcnQgb2YgdGhlIGNvbXBsZXggbnVtYmVyXG4gICAqIEByZXR1cm4ge0NvbXBsZXggfCBBcnJheSB8IE1hdHJpeH0gUmV0dXJucyBhIGNvbXBsZXggdmFsdWVcbiAgICovXG4gIHZhciBjb21wbGV4ID0gdHlwZWQoJ2NvbXBsZXgnLCB7XG4gICAgJyc6IGZ1bmN0aW9uIF8oKSB7XG4gICAgICByZXR1cm4gQ29tcGxleC5aRVJPO1xuICAgIH0sXG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHgsIDApO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKHJlLCBpbSkge1xuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHJlLCBpbSk7XG4gICAgfSxcbiAgICAvLyBUT0RPOiB0aGlzIHNpZ25hdHVyZSBzaG91bGQgYmUgcmVkdW5kYW50XG4gICAgJ0JpZ051bWJlciwgQmlnTnVtYmVyJzogZnVuY3Rpb24gQmlnTnVtYmVyQmlnTnVtYmVyKHJlLCBpbSkge1xuICAgICAgcmV0dXJuIG5ldyBDb21wbGV4KHJlLnRvTnVtYmVyKCksIGltLnRvTnVtYmVyKCkpO1xuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LnZhbHVlT2YoKSwgMCk7XG4gICAgfSxcbiAgICBDb21wbGV4OiBmdW5jdGlvbiBDb21wbGV4KHgpIHtcbiAgICAgIHJldHVybiB4LmNsb25lKCk7XG4gICAgfSxcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyh4KSB7XG4gICAgICByZXR1cm4gQ29tcGxleCh4KTsgLy8gZm9yIGV4YW1wbGUgJzIgKyAzaSdcbiAgICB9LFxuICAgIFwibnVsbFwiOiBmdW5jdGlvbiBfbnVsbCh4KSB7XG4gICAgICByZXR1cm4gQ29tcGxleCgwKTtcbiAgICB9LFxuICAgIE9iamVjdDogZnVuY3Rpb24gT2JqZWN0KHgpIHtcbiAgICAgIGlmICgncmUnIGluIHggJiYgJ2ltJyBpbiB4KSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4LnJlLCB4LmltKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCdyJyBpbiB4ICYmICdwaGknIGluIHggfHwgJ2FicycgaW4geCAmJiAnYXJnJyBpbiB4KSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tcGxleCh4KTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIChyZSBhbmQgaW0pIG9yIChyIGFuZCBwaGkpIG9yIChhYnMgYW5kIGFyZyknKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgY29tcGxleCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNvbXBsZXg7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ29tcGxleCA9IGNyZWF0ZUNvbXBsZXg7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZyYWN0aW9uQ2xhc3MgPSB2b2lkIDA7XG5cbnZhciBfZnJhY3Rpb24gPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJmcmFjdGlvbi5qc1wiKSk7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBcImRlZmF1bHRcIjogb2JqIH07IH1cblxudmFyIG5hbWUgPSAnRnJhY3Rpb24nO1xudmFyIGRlcGVuZGVuY2llcyA9IFtdO1xudmFyIGNyZWF0ZUZyYWN0aW9uQ2xhc3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoKSB7XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cbiAgX2ZyYWN0aW9uW1wiZGVmYXVsdFwiXS5wcm90b3R5cGUudHlwZSA9ICdGcmFjdGlvbic7XG4gIF9mcmFjdGlvbltcImRlZmF1bHRcIl0ucHJvdG90eXBlLmlzRnJhY3Rpb24gPSB0cnVlO1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiBhIEZyYWN0aW9uIGNvbnRhaW5pbmcgdHlwZSBpbmZvcm1hdGlvblxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczpcbiAgICogICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkZyYWN0aW9uXCIsIFwiblwiOiAzLCBcImRcIjogOH1gXG4gICAqL1xuXG4gIF9mcmFjdGlvbltcImRlZmF1bHRcIl0ucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnRnJhY3Rpb24nLFxuICAgICAgbjogdGhpcy5zICogdGhpcy5uLFxuICAgICAgZDogdGhpcy5kXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEluc3RhbnRpYXRlIGEgRnJhY3Rpb24gZnJvbSBhIEpTT04gb2JqZWN0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBhIEpTT04gb2JqZWN0IHN0cnVjdHVyZWQgYXM6XG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiRnJhY3Rpb25cIiwgXCJuXCI6IDMsIFwiZFwiOiA4fWBcbiAgICogQHJldHVybiB7QmlnTnVtYmVyfVxuICAgKi9cblxuXG4gIF9mcmFjdGlvbltcImRlZmF1bHRcIl0uZnJvbUpTT04gPSBmdW5jdGlvbiAoanNvbikge1xuICAgIHJldHVybiBuZXcgX2ZyYWN0aW9uW1wiZGVmYXVsdFwiXShqc29uKTtcbiAgfTtcblxuICByZXR1cm4gX2ZyYWN0aW9uW1wiZGVmYXVsdFwiXTtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZyYWN0aW9uQ2xhc3MgPSBjcmVhdGVGcmFjdGlvbkNsYXNzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVGcmFjdGlvbiA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgbmFtZSA9ICdmcmFjdGlvbic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdGcmFjdGlvbiddO1xudmFyIGNyZWF0ZUZyYWN0aW9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIEZyYWN0aW9uID0gX3JlZi5GcmFjdGlvbjtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgZnJhY3Rpb24gY29udmVydCBhIHZhbHVlIHRvIGEgZnJhY3Rpb24uXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICogICAgIG1hdGguZnJhY3Rpb24obnVtZXJhdG9yLCBkZW5vbWluYXRvcilcbiAgICogICAgIG1hdGguZnJhY3Rpb24oe246IG51bWVyYXRvciwgZDogZGVub21pbmF0b3J9KVxuICAgKiAgICAgbWF0aC5mcmFjdGlvbihtYXRyaXg6IEFycmF5IHwgTWF0cml4KSAgICAgICAgIFR1cm4gYWxsIG1hdHJpeCBlbnRyaWVzXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50byBmcmFjdGlvbnNcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBtYXRoLmZyYWN0aW9uKDEsIDMpXG4gICAqICAgICBtYXRoLmZyYWN0aW9uKCcyLzMnKVxuICAgKiAgICAgbWF0aC5mcmFjdGlvbih7bjogMiwgZDogM30pXG4gICAqICAgICBtYXRoLmZyYWN0aW9uKFswLjIsIDAuMjUsIDEuMjVdKVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYmlnbnVtYmVyLCBudW1iZXIsIHN0cmluZywgdW5pdFxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlciB8IHN0cmluZyB8IEZyYWN0aW9uIHwgQmlnTnVtYmVyIHwgQXJyYXkgfCBNYXRyaXh9IFthcmdzXVxuICAgKiAgICAgICAgICAgIEFyZ3VtZW50cyBzcGVjaWZ5aW5nIHRoZSBudW1lcmF0b3IgYW5kIGRlbm9taW5hdG9yIG9mXG4gICAqICAgICAgICAgICAgdGhlIGZyYWN0aW9uXG4gICAqIEByZXR1cm4ge0ZyYWN0aW9uIHwgQXJyYXkgfCBNYXRyaXh9IFJldHVybnMgYSBmcmFjdGlvblxuICAgKi9cbiAgdmFyIGZyYWN0aW9uID0gdHlwZWQoJ2ZyYWN0aW9uJywge1xuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIGlmICghaXNGaW5pdGUoeCkgfHwgaXNOYU4oeCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHggKyAnIGNhbm5vdCBiZSByZXByZXNlbnRlZCBhcyBhIGZyYWN0aW9uJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oeCk7XG4gICAgfSxcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyh4KSB7XG4gICAgICByZXR1cm4gbmV3IEZyYWN0aW9uKHgpO1xuICAgIH0sXG4gICAgJ251bWJlciwgbnVtYmVyJzogZnVuY3Rpb24gbnVtYmVyTnVtYmVyKG51bWVyYXRvciwgZGVub21pbmF0b3IpIHtcbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24obnVtZXJhdG9yLCBkZW5vbWluYXRvcik7XG4gICAgfSxcbiAgICBcIm51bGxcIjogZnVuY3Rpb24gX251bGwoeCkge1xuICAgICAgcmV0dXJuIG5ldyBGcmFjdGlvbigwKTtcbiAgICB9LFxuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oeC50b1N0cmluZygpKTtcbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4geDsgLy8gZnJhY3Rpb25zIGFyZSBpbW11dGFibGVcbiAgICB9LFxuICAgIE9iamVjdDogZnVuY3Rpb24gT2JqZWN0KHgpIHtcbiAgICAgIHJldHVybiBuZXcgRnJhY3Rpb24oeCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIGZyYWN0aW9uKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gZnJhY3Rpb247XG59KTtcbmV4cG9ydHMuY3JlYXRlRnJhY3Rpb24gPSBjcmVhdGVGcmFjdGlvbjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRGVuc2VNYXRyaXhDbGFzcyA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9hcnJheSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9hcnJheVwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfb2JqZWN0ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL29iamVjdFwiKTtcblxudmFyIF9EaW1lbnNpb25FcnJvciA9IHJlcXVpcmUoXCIuLi8uLi9lcnJvci9EaW1lbnNpb25FcnJvclwiKTtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ0RlbnNlTWF0cml4JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ01hdHJpeCddO1xudmFyIGNyZWF0ZURlbnNlTWF0cml4Q2xhc3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgTWF0cml4ID0gX3JlZi5NYXRyaXg7XG5cbiAgLyoqXG4gICAqIERlbnNlIE1hdHJpeCBpbXBsZW1lbnRhdGlvbi4gQSByZWd1bGFyLCBkZW5zZSBtYXRyaXgsIHN1cHBvcnRpbmcgbXVsdGktZGltZW5zaW9uYWwgbWF0cmljZXMuIFRoaXMgaXMgdGhlIGRlZmF1bHQgbWF0cml4IHR5cGUuXG4gICAqIEBjbGFzcyBEZW5zZU1hdHJpeFxuICAgKi9cbiAgZnVuY3Rpb24gRGVuc2VNYXRyaXgoZGF0YSwgZGF0YXR5cGUpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRGVuc2VNYXRyaXgpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cblxuICAgIGlmIChkYXRhdHlwZSAmJiAhKDAsIF9pcy5pc1N0cmluZykoZGF0YXR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZGF0YXR5cGU6ICcgKyBkYXRhdHlwZSk7XG4gICAgfVxuXG4gICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKGRhdGEpKSB7XG4gICAgICAvLyBjaGVjayBkYXRhIGlzIGEgRGVuc2VNYXRyaXhcbiAgICAgIGlmIChkYXRhLnR5cGUgPT09ICdEZW5zZU1hdHJpeCcpIHtcbiAgICAgICAgLy8gY2xvbmUgZGF0YSAmIHNpemVcbiAgICAgICAgdGhpcy5fZGF0YSA9ICgwLCBfb2JqZWN0LmNsb25lKShkYXRhLl9kYXRhKTtcbiAgICAgICAgdGhpcy5fc2l6ZSA9ICgwLCBfb2JqZWN0LmNsb25lKShkYXRhLl9zaXplKTtcbiAgICAgICAgdGhpcy5fZGF0YXR5cGUgPSBkYXRhdHlwZSB8fCBkYXRhLl9kYXRhdHlwZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGJ1aWxkIGRhdGEgZnJvbSBleGlzdGluZyBtYXRyaXhcbiAgICAgICAgdGhpcy5fZGF0YSA9IGRhdGEudG9BcnJheSgpO1xuICAgICAgICB0aGlzLl9zaXplID0gZGF0YS5zaXplKCk7XG4gICAgICAgIHRoaXMuX2RhdGF0eXBlID0gZGF0YXR5cGUgfHwgZGF0YS5fZGF0YXR5cGU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkYXRhICYmICgwLCBfaXMuaXNBcnJheSkoZGF0YS5kYXRhKSAmJiAoMCwgX2lzLmlzQXJyYXkpKGRhdGEuc2l6ZSkpIHtcbiAgICAgIC8vIGluaXRpYWxpemUgZmllbGRzIGZyb20gSlNPTiByZXByZXNlbnRhdGlvblxuICAgICAgdGhpcy5fZGF0YSA9IGRhdGEuZGF0YTtcbiAgICAgIHRoaXMuX3NpemUgPSBkYXRhLnNpemU7IC8vIHZlcmlmeSB0aGUgZGltZW5zaW9ucyBvZiB0aGUgYXJyYXlcblxuICAgICAgKDAsIF9hcnJheS52YWxpZGF0ZSkodGhpcy5fZGF0YSwgdGhpcy5fc2l6ZSk7XG4gICAgICB0aGlzLl9kYXRhdHlwZSA9IGRhdGF0eXBlIHx8IGRhdGEuZGF0YXR5cGU7XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzQXJyYXkpKGRhdGEpKSB7XG4gICAgICAvLyByZXBsYWNlIG5lc3RlZCBNYXRyaWNlcyB3aXRoIEFycmF5c1xuICAgICAgdGhpcy5fZGF0YSA9IHByZXByb2Nlc3MoZGF0YSk7IC8vIGdldCB0aGUgZGltZW5zaW9ucyBvZiB0aGUgYXJyYXlcblxuICAgICAgdGhpcy5fc2l6ZSA9ICgwLCBfYXJyYXkuYXJyYXlTaXplKSh0aGlzLl9kYXRhKTsgLy8gdmVyaWZ5IHRoZSBkaW1lbnNpb25zIG9mIHRoZSBhcnJheSwgVE9ETzogY29tcHV0ZSBzaXplIHdoaWxlIHByb2Nlc3NpbmcgYXJyYXlcblxuICAgICAgKDAsIF9hcnJheS52YWxpZGF0ZSkodGhpcy5fZGF0YSwgdGhpcy5fc2l6ZSk7IC8vIGRhdGEgdHlwZSB1bmtub3duXG5cbiAgICAgIHRoaXMuX2RhdGF0eXBlID0gZGF0YXR5cGU7XG4gICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAvLyB1bnN1cHBvcnRlZCB0eXBlXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbnN1cHBvcnRlZCB0eXBlIG9mIGRhdGEgKCcgKyAoMCwgX2lzLnR5cGVPZikoZGF0YSkgKyAnKScpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBub3RoaW5nIHByb3ZpZGVkXG4gICAgICB0aGlzLl9kYXRhID0gW107XG4gICAgICB0aGlzLl9zaXplID0gWzBdO1xuICAgICAgdGhpcy5fZGF0YXR5cGUgPSBkYXRhdHlwZTtcbiAgICB9XG4gIH1cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUgPSBuZXcgTWF0cml4KCk7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgRGVuc2VNYXRyaXhcbiAgICovXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLmNyZWF0ZURlbnNlTWF0cml4ID0gZnVuY3Rpb24gKGRhdGEsIGRhdGF0eXBlKSB7XG4gICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeChkYXRhLCBkYXRhdHlwZSk7XG4gIH07XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIERlbnNlTWF0cml4LnByb3RvdHlwZS50eXBlID0gJ0RlbnNlTWF0cml4JztcbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLmlzRGVuc2VNYXRyaXggPSB0cnVlO1xuICAvKipcbiAgICogR2V0IHRoZSBtYXRyaXggdHlwZVxuICAgKlxuICAgKiBVc2FnZTpcbiAgICogICAgY29uc3QgbWF0cml4VHlwZSA9IG1hdHJpeC5nZXREYXRhVHlwZSgpICAvLyByZXRyaWV2ZXMgdGhlIG1hdHJpeCB0eXBlXG4gICAqXG4gICAqIEBtZW1iZXJPZiBEZW5zZU1hdHJpeFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9ICAgdHlwZSBpbmZvcm1hdGlvbjsgaWYgbXVsdGlwbGUgdHlwZXMgYXJlIGZvdW5kIGZyb20gdGhlIE1hdHJpeCwgaXQgd2lsbCByZXR1cm4gXCJtaXhlZFwiXG4gICAqL1xuXG4gIERlbnNlTWF0cml4LnByb3RvdHlwZS5nZXREYXRhVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKDAsIF9hcnJheS5nZXRBcnJheURhdGFUeXBlKSh0aGlzLl9kYXRhLCBfaXMudHlwZU9mKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgc3RvcmFnZSBmb3JtYXQgdXNlZCBieSB0aGUgbWF0cml4LlxuICAgKlxuICAgKiBVc2FnZTpcbiAgICogICAgIGNvbnN0IGZvcm1hdCA9IG1hdHJpeC5zdG9yYWdlKCkgIC8vIHJldHJpZXZlIHN0b3JhZ2UgZm9ybWF0XG4gICAqXG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICBUaGUgc3RvcmFnZSBmb3JtYXQuXG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLnN0b3JhZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICdkZW5zZSc7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIGRhdGF0eXBlIG9mIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgbWF0cml4LlxuICAgKlxuICAgKiBVc2FnZTpcbiAgICogICAgIGNvbnN0IGZvcm1hdCA9IG1hdHJpeC5kYXRhdHlwZSgpICAgLy8gcmV0cmlldmUgbWF0cml4IGRhdGF0eXBlXG4gICAqXG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICBUaGUgZGF0YXR5cGUuXG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLmRhdGF0eXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhdHlwZTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBEZW5zZU1hdHJpeFxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtBcnJheX0gZGF0YVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2RhdGF0eXBlXVxuICAgKi9cblxuXG4gIERlbnNlTWF0cml4LnByb3RvdHlwZS5jcmVhdGUgPSBmdW5jdGlvbiAoZGF0YSwgZGF0YXR5cGUpIHtcbiAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KGRhdGEsIGRhdGF0eXBlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN1YnNldCBvZiB0aGUgbWF0cml4LCBvciByZXBsYWNlIGEgc3Vic2V0IG9mIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3Qgc3Vic2V0ID0gbWF0cml4LnN1YnNldChpbmRleCkgICAgICAgICAgICAgICAvLyByZXRyaWV2ZSBzdWJzZXRcbiAgICogICAgIGNvbnN0IHZhbHVlID0gbWF0cml4LnN1YnNldChpbmRleCwgcmVwbGFjZW1lbnQpICAgLy8gcmVwbGFjZSBzdWJzZXRcbiAgICpcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7SW5kZXh9IGluZGV4XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXggfCAqfSBbcmVwbGFjZW1lbnRdXG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZT0wXSAgICAgIERlZmF1bHQgdmFsdWUsIGZpbGxlZCBpbiBvbiBuZXcgZW50cmllcyB3aGVuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXRyaXggaXMgcmVzaXplZC4gSWYgbm90IHByb3ZpZGVkLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgbWF0cml4IGVsZW1lbnRzIHdpbGwgYmUgZmlsbGVkIHdpdGggemVyb3MuXG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLnN1YnNldCA9IGZ1bmN0aW9uIChpbmRleCwgcmVwbGFjZW1lbnQsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICByZXR1cm4gX2dldCh0aGlzLCBpbmRleCk7XG4gICAgICAvLyBpbnRlbnRpb25hbCBmYWxsIHRocm91Z2hcblxuICAgICAgY2FzZSAyOlxuICAgICAgY2FzZSAzOlxuICAgICAgICByZXR1cm4gX3NldCh0aGlzLCBpbmRleCwgcmVwbGFjZW1lbnQsIGRlZmF1bHRWYWx1ZSk7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignV3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cycpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHNpbmdsZSBlbGVtZW50IGZyb20gdGhlIG1hdHJpeC5cbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyW119IGluZGV4ICAgWmVyby1iYXNlZCBpbmRleFxuICAgKiBAcmV0dXJuIHsqfSB2YWx1ZVxuICAgKi9cblxuXG4gIERlbnNlTWF0cml4LnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICBpZiAoISgwLCBfaXMuaXNBcnJheSkoaW5kZXgpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBleHBlY3RlZCcpO1xuICAgIH1cblxuICAgIGlmIChpbmRleC5sZW5ndGggIT09IHRoaXMuX3NpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGluZGV4Lmxlbmd0aCwgdGhpcy5fc2l6ZS5sZW5ndGgpO1xuICAgIH0gLy8gY2hlY2sgaW5kZXhcblxuXG4gICAgZm9yICh2YXIgeCA9IDA7IHggPCBpbmRleC5sZW5ndGg7IHgrKykge1xuICAgICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpbmRleFt4XSwgdGhpcy5fc2l6ZVt4XSk7XG4gICAgfVxuXG4gICAgdmFyIGRhdGEgPSB0aGlzLl9kYXRhO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gaW5kZXgubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIGluZGV4SSA9IGluZGV4W2ldO1xuICAgICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpbmRleEksIGRhdGEubGVuZ3RoKTtcbiAgICAgIGRhdGEgPSBkYXRhW2luZGV4SV07XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH07XG4gIC8qKlxuICAgKiBSZXBsYWNlIGEgc2luZ2xlIGVsZW1lbnQgaW4gdGhlIG1hdHJpeC5cbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyW119IGluZGV4ICAgWmVyby1iYXNlZCBpbmRleFxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gICAgICAgIERlZmF1bHQgdmFsdWUsIGZpbGxlZCBpbiBvbiBuZXcgZW50cmllcyB3aGVuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXRyaXggaXMgcmVzaXplZC4gSWYgbm90IHByb3ZpZGVkLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgbWF0cml4IGVsZW1lbnRzIHdpbGwgYmUgbGVmdCB1bmRlZmluZWQuXG4gICAqIEByZXR1cm4ge0RlbnNlTWF0cml4fSBzZWxmXG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChpbmRleCwgdmFsdWUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIGlmICghKDAsIF9pcy5pc0FycmF5KShpbmRleCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKGluZGV4Lmxlbmd0aCA8IHRoaXMuX3NpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGluZGV4Lmxlbmd0aCwgdGhpcy5fc2l6ZS5sZW5ndGgsICc8Jyk7XG4gICAgfVxuXG4gICAgdmFyIGksIGlpLCBpbmRleEk7IC8vIGVubGFyZ2UgbWF0cml4IHdoZW4gbmVlZGVkXG5cbiAgICB2YXIgc2l6ZSA9IGluZGV4Lm1hcChmdW5jdGlvbiAoaSkge1xuICAgICAgcmV0dXJuIGkgKyAxO1xuICAgIH0pO1xuXG4gICAgX2ZpdCh0aGlzLCBzaXplLCBkZWZhdWx0VmFsdWUpOyAvLyB0cmF2ZXJzZSBvdmVyIHRoZSBkaW1lbnNpb25zXG5cblxuICAgIHZhciBkYXRhID0gdGhpcy5fZGF0YTtcblxuICAgIGZvciAoaSA9IDAsIGlpID0gaW5kZXgubGVuZ3RoIC0gMTsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGluZGV4SSA9IGluZGV4W2ldO1xuICAgICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpbmRleEksIGRhdGEubGVuZ3RoKTtcbiAgICAgIGRhdGEgPSBkYXRhW2luZGV4SV07XG4gICAgfSAvLyBzZXQgbmV3IHZhbHVlXG5cblxuICAgIGluZGV4SSA9IGluZGV4W2luZGV4Lmxlbmd0aCAtIDFdO1xuICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkoaW5kZXhJLCBkYXRhLmxlbmd0aCk7XG4gICAgZGF0YVtpbmRleEldID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBzdWJtYXRyaXggb2YgdGhpcyBtYXRyaXhcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7RGVuc2VNYXRyaXh9IG1hdHJpeFxuICAgKiBAcGFyYW0ge0luZGV4fSBpbmRleCAgIFplcm8tYmFzZWQgaW5kZXhcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBmdW5jdGlvbiBfZ2V0KG1hdHJpeCwgaW5kZXgpIHtcbiAgICBpZiAoISgwLCBfaXMuaXNJbmRleCkoaW5kZXgpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGluZGV4Jyk7XG4gICAgfVxuXG4gICAgdmFyIGlzU2NhbGFyID0gaW5kZXguaXNTY2FsYXIoKTtcblxuICAgIGlmIChpc1NjYWxhcikge1xuICAgICAgLy8gcmV0dXJuIGEgc2NhbGFyXG4gICAgICByZXR1cm4gbWF0cml4LmdldChpbmRleC5taW4oKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIHZhbGlkYXRlIGRpbWVuc2lvbnNcbiAgICAgIHZhciBzaXplID0gaW5kZXguc2l6ZSgpO1xuXG4gICAgICBpZiAoc2l6ZS5sZW5ndGggIT09IG1hdHJpeC5fc2l6ZS5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihzaXplLmxlbmd0aCwgbWF0cml4Ll9zaXplLmxlbmd0aCk7XG4gICAgICB9IC8vIHZhbGlkYXRlIGlmIGFueSBvZiB0aGUgcmFuZ2VzIGluIHRoZSBpbmRleCBpcyBvdXQgb2YgcmFuZ2VcblxuXG4gICAgICB2YXIgbWluID0gaW5kZXgubWluKCk7XG4gICAgICB2YXIgbWF4ID0gaW5kZXgubWF4KCk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IG1hdHJpeC5fc2l6ZS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkobWluW2ldLCBtYXRyaXguX3NpemVbaV0pO1xuICAgICAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKG1heFtpXSwgbWF0cml4Ll9zaXplW2ldKTtcbiAgICAgIH0gLy8gcmV0cmlldmUgc3VibWF0cml4XG4gICAgICAvLyBUT0RPOiBtb3JlIGVmZmljaWVudCB3aGVuIGNyZWF0aW5nIGFuIGVtcHR5IG1hdHJpeCBhbmQgc2V0dGluZyBfZGF0YSBhbmQgX3NpemUgbWFudWFsbHlcblxuXG4gICAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KF9nZXRTdWJtYXRyaXgobWF0cml4Ll9kYXRhLCBpbmRleCwgc2l6ZS5sZW5ndGgsIDApLCBtYXRyaXguX2RhdGF0eXBlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlY3Vyc2l2ZWx5IGdldCBhIHN1Ym1hdHJpeCBvZiBhIG11bHRpIGRpbWVuc2lvbmFsIG1hdHJpeC5cbiAgICogSW5kZXggaXMgbm90IGNoZWNrZWQgZm9yIGNvcnJlY3QgbnVtYmVyIG9yIGxlbmd0aCBvZiBkaW1lbnNpb25zLlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtBcnJheX0gZGF0YVxuICAgKiBAcGFyYW0ge0luZGV4fSBpbmRleFxuICAgKiBAcGFyYW0ge251bWJlcn0gZGltcyAgIFRvdGFsIG51bWJlciBvZiBkaW1lbnNpb25zXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkaW0gICAgQ3VycmVudCBkaW1lbnNpb25cbiAgICogQHJldHVybiB7QXJyYXl9IHN1Ym1hdHJpeFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9nZXRTdWJtYXRyaXgoZGF0YSwgaW5kZXgsIGRpbXMsIGRpbSkge1xuICAgIHZhciBsYXN0ID0gZGltID09PSBkaW1zIC0gMTtcbiAgICB2YXIgcmFuZ2UgPSBpbmRleC5kaW1lbnNpb24oZGltKTtcblxuICAgIGlmIChsYXN0KSB7XG4gICAgICByZXR1cm4gcmFuZ2UubWFwKGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkoaSwgZGF0YS5sZW5ndGgpO1xuICAgICAgICByZXR1cm4gZGF0YVtpXTtcbiAgICAgIH0pLnZhbHVlT2YoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJhbmdlLm1hcChmdW5jdGlvbiAoaSkge1xuICAgICAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGksIGRhdGEubGVuZ3RoKTtcbiAgICAgICAgdmFyIGNoaWxkID0gZGF0YVtpXTtcbiAgICAgICAgcmV0dXJuIF9nZXRTdWJtYXRyaXgoY2hpbGQsIGluZGV4LCBkaW1zLCBkaW0gKyAxKTtcbiAgICAgIH0pLnZhbHVlT2YoKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlcGxhY2UgYSBzdWJtYXRyaXggaW4gdGhpcyBtYXRyaXhcbiAgICogSW5kZXhlcyBhcmUgemVyby1iYXNlZC5cbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7RGVuc2VNYXRyaXh9IG1hdHJpeFxuICAgKiBAcGFyYW0ge0luZGV4fSBpbmRleFxuICAgKiBAcGFyYW0ge0RlbnNlTWF0cml4IHwgQXJyYXkgfCAqfSBzdWJtYXRyaXhcbiAgICogQHBhcmFtIHsqfSBkZWZhdWx0VmFsdWUgICAgICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLlxuICAgKiBAcmV0dXJuIHtEZW5zZU1hdHJpeH0gbWF0cml4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX3NldChtYXRyaXgsIGluZGV4LCBzdWJtYXRyaXgsIGRlZmF1bHRWYWx1ZSkge1xuICAgIGlmICghaW5kZXggfHwgaW5kZXguaXNJbmRleCAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBpbmRleCcpO1xuICAgIH0gLy8gZ2V0IGluZGV4IHNpemUgYW5kIGNoZWNrIHdoZXRoZXIgdGhlIGluZGV4IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlXG5cblxuICAgIHZhciBpU2l6ZSA9IGluZGV4LnNpemUoKTtcbiAgICB2YXIgaXNTY2FsYXIgPSBpbmRleC5pc1NjYWxhcigpOyAvLyBjYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIHN1Ym1hdHJpeCwgYW5kIGNvbnZlcnQgaXQgaW50byBhbiBBcnJheSBpZiBuZWVkZWRcblxuICAgIHZhciBzU2l6ZTtcblxuICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KShzdWJtYXRyaXgpKSB7XG4gICAgICBzU2l6ZSA9IHN1Ym1hdHJpeC5zaXplKCk7XG4gICAgICBzdWJtYXRyaXggPSBzdWJtYXRyaXgudmFsdWVPZigpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzU2l6ZSA9ICgwLCBfYXJyYXkuYXJyYXlTaXplKShzdWJtYXRyaXgpO1xuICAgIH1cblxuICAgIGlmIChpc1NjYWxhcikge1xuICAgICAgLy8gc2V0IGEgc2NhbGFyXG4gICAgICAvLyBjaGVjayB3aGV0aGVyIHN1Ym1hdHJpeCBpcyBhIHNjYWxhclxuICAgICAgaWYgKHNTaXplLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTY2FsYXIgZXhwZWN0ZWQnKTtcbiAgICAgIH1cblxuICAgICAgbWF0cml4LnNldChpbmRleC5taW4oKSwgc3VibWF0cml4LCBkZWZhdWx0VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzZXQgYSBzdWJtYXRyaXhcbiAgICAgIC8vIHZhbGlkYXRlIGRpbWVuc2lvbnNcbiAgICAgIGlmIChpU2l6ZS5sZW5ndGggPCBtYXRyaXguX3NpemUubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaVNpemUubGVuZ3RoLCBtYXRyaXguX3NpemUubGVuZ3RoLCAnPCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc1NpemUubGVuZ3RoIDwgaVNpemUubGVuZ3RoKSB7XG4gICAgICAgIC8vIGNhbGN1bGF0ZSBudW1iZXIgb2YgbWlzc2luZyBvdXRlciBkaW1lbnNpb25zXG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgdmFyIG91dGVyID0gMDtcblxuICAgICAgICB3aGlsZSAoaVNpemVbaV0gPT09IDEgJiYgc1NpemVbaV0gPT09IDEpIHtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAoaVNpemVbaV0gPT09IDEpIHtcbiAgICAgICAgICBvdXRlcisrO1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfSAvLyB1bnNxdWVlemUgYm90aCBvdXRlciBhbmQgaW5uZXIgZGltZW5zaW9uc1xuXG5cbiAgICAgICAgc3VibWF0cml4ID0gKDAsIF9hcnJheS51bnNxdWVlemUpKHN1Ym1hdHJpeCwgaVNpemUubGVuZ3RoLCBvdXRlciwgc1NpemUpO1xuICAgICAgfSAvLyBjaGVjayB3aGV0aGVyIHRoZSBzaXplIG9mIHRoZSBzdWJtYXRyaXggbWF0Y2hlcyB0aGUgaW5kZXggc2l6ZVxuXG5cbiAgICAgIGlmICghKDAsIF9vYmplY3QuZGVlcFN0cmljdEVxdWFsKShpU2l6ZSwgc1NpemUpKSB7XG4gICAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaVNpemUsIHNTaXplLCAnPicpO1xuICAgICAgfSAvLyBlbmxhcmdlIG1hdHJpeCB3aGVuIG5lZWRlZFxuXG5cbiAgICAgIHZhciBzaXplID0gaW5kZXgubWF4KCkubWFwKGZ1bmN0aW9uIChpKSB7XG4gICAgICAgIHJldHVybiBpICsgMTtcbiAgICAgIH0pO1xuXG4gICAgICBfZml0KG1hdHJpeCwgc2l6ZSwgZGVmYXVsdFZhbHVlKTsgLy8gaW5zZXJ0IHRoZSBzdWIgbWF0cml4XG5cblxuICAgICAgdmFyIGRpbXMgPSBpU2l6ZS5sZW5ndGg7XG4gICAgICB2YXIgZGltID0gMDtcblxuICAgICAgX3NldFN1Ym1hdHJpeChtYXRyaXguX2RhdGEsIGluZGV4LCBzdWJtYXRyaXgsIGRpbXMsIGRpbSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1hdHJpeDtcbiAgfVxuICAvKipcbiAgICogUmVwbGFjZSBhIHN1Ym1hdHJpeCBvZiBhIG11bHRpIGRpbWVuc2lvbmFsIG1hdHJpeC5cbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7QXJyYXl9IGRhdGFcbiAgICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAgICogQHBhcmFtIHtBcnJheX0gc3VibWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBkaW1zICAgVG90YWwgbnVtYmVyIG9mIGRpbWVuc2lvbnNcbiAgICogQHBhcmFtIHtudW1iZXJ9IGRpbVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9zZXRTdWJtYXRyaXgoZGF0YSwgaW5kZXgsIHN1Ym1hdHJpeCwgZGltcywgZGltKSB7XG4gICAgdmFyIGxhc3QgPSBkaW0gPT09IGRpbXMgLSAxO1xuICAgIHZhciByYW5nZSA9IGluZGV4LmRpbWVuc2lvbihkaW0pO1xuXG4gICAgaWYgKGxhc3QpIHtcbiAgICAgIHJhbmdlLmZvckVhY2goZnVuY3Rpb24gKGRhdGFJbmRleCwgc3ViSW5kZXgpIHtcbiAgICAgICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShkYXRhSW5kZXgpO1xuICAgICAgICBkYXRhW2RhdGFJbmRleF0gPSBzdWJtYXRyaXhbc3ViSW5kZXhbMF1dO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmdlLmZvckVhY2goZnVuY3Rpb24gKGRhdGFJbmRleCwgc3ViSW5kZXgpIHtcbiAgICAgICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShkYXRhSW5kZXgpO1xuXG4gICAgICAgIF9zZXRTdWJtYXRyaXgoZGF0YVtkYXRhSW5kZXhdLCBpbmRleCwgc3VibWF0cml4W3N1YkluZGV4WzBdXSwgZGltcywgZGltICsgMSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJlc2l6ZSB0aGUgbWF0cml4IHRvIHRoZSBnaXZlbiBzaXplLiBSZXR1cm5zIGEgY29weSBvZiB0aGUgbWF0cml4IHdoZW5cbiAgICogYGNvcHk9dHJ1ZWAsIG90aGVyd2lzZSByZXR1cm4gdGhlIG1hdHJpeCBpdHNlbGYgKHJlc2l6ZSBpbiBwbGFjZSkuXG4gICAqXG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlcltdfSBzaXplICAgICAgICAgICBUaGUgbmV3IHNpemUgdGhlIG1hdHJpeCBzaG91bGQgaGF2ZS5cbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlPTBdICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzLlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJZiBub3QgcHJvdmlkZWQsIHRoZSBtYXRyaXggZWxlbWVudHMgd2lsbFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBmaWxsZWQgd2l0aCB6ZXJvcy5cbiAgICogQHBhcmFtIHtib29sZWFufSBbY29weV0gICAgICAgICAgUmV0dXJuIGEgcmVzaXplZCBjb3B5IG9mIHRoZSBtYXRyaXhcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgVGhlIHJlc2l6ZWQgbWF0cml4XG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uIChzaXplLCBkZWZhdWx0VmFsdWUsIGNvcHkpIHtcbiAgICAvLyB2YWxpZGF0ZSBhcmd1bWVudHNcbiAgICBpZiAoISgwLCBfaXMuaXNBcnJheSkoc2l6ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gICAgfSAvLyBtYXRyaXggdG8gcmVzaXplXG5cblxuICAgIHZhciBtID0gY29weSA/IHRoaXMuY2xvbmUoKSA6IHRoaXM7IC8vIHJlc2l6ZSBtYXRyaXhcblxuICAgIHJldHVybiBfcmVzaXplKG0sIHNpemUsIGRlZmF1bHRWYWx1ZSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gX3Jlc2l6ZShtYXRyaXgsIHNpemUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIC8vIGNoZWNrIHNpemVcbiAgICBpZiAoc2l6ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIC8vIGZpcnN0IHZhbHVlIGluIG1hdHJpeFxuICAgICAgdmFyIHYgPSBtYXRyaXguX2RhdGE7IC8vIGdvIGRlZXBcblxuICAgICAgd2hpbGUgKCgwLCBfaXMuaXNBcnJheSkodikpIHtcbiAgICAgICAgdiA9IHZbMF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2O1xuICAgIH0gLy8gcmVzaXplIG1hdHJpeFxuXG5cbiAgICBtYXRyaXguX3NpemUgPSBzaXplLnNsaWNlKDApOyAvLyBjb3B5IHRoZSBhcnJheVxuXG4gICAgbWF0cml4Ll9kYXRhID0gKDAsIF9hcnJheS5yZXNpemUpKG1hdHJpeC5fZGF0YSwgbWF0cml4Ll9zaXplLCBkZWZhdWx0VmFsdWUpOyAvLyByZXR1cm4gbWF0cml4XG5cbiAgICByZXR1cm4gbWF0cml4O1xuICB9XG4gIC8qKlxuICAgKiBSZXNoYXBlIHRoZSBtYXRyaXggdG8gdGhlIGdpdmVuIHNpemUuIFJldHVybnMgYSBjb3B5IG9mIHRoZSBtYXRyaXggd2hlblxuICAgKiBgY29weT10cnVlYCwgb3RoZXJ3aXNlIHJldHVybiB0aGUgbWF0cml4IGl0c2VsZiAocmVzaGFwZSBpbiBwbGFjZSkuXG4gICAqXG4gICAqIE5PVEU6IFRoaXMgbWlnaHQgYmUgYmV0dGVyIHN1aXRlZCB0byBjb3B5IGJ5IGRlZmF1bHQsIGluc3RlYWQgb2YgbW9kaWZ5aW5nXG4gICAqICAgICAgIGluIHBsYWNlLiBGb3Igbm93LCBpdCBvcGVyYXRlcyBpbiBwbGFjZSB0byByZW1haW4gY29uc2lzdGVudCB3aXRoXG4gICAqICAgICAgIHJlc2l6ZSgpLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZSAgICAgICAgICAgVGhlIG5ldyBzaXplIHRoZSBtYXRyaXggc2hvdWxkIGhhdmUuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvcHldICAgICAgICAgIFJldHVybiBhIHJlc2hhcGVkIGNvcHkgb2YgdGhlIG1hdHJpeFxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICBUaGUgcmVzaGFwZWQgbWF0cml4XG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLnJlc2hhcGUgPSBmdW5jdGlvbiAoc2l6ZSwgY29weSkge1xuICAgIHZhciBtID0gY29weSA/IHRoaXMuY2xvbmUoKSA6IHRoaXM7XG4gICAgbS5fZGF0YSA9ICgwLCBfYXJyYXkucmVzaGFwZSkobS5fZGF0YSwgc2l6ZSk7XG4gICAgbS5fc2l6ZSA9IHNpemUuc2xpY2UoMCk7XG4gICAgcmV0dXJuIG07XG4gIH07XG4gIC8qKlxuICAgKiBFbmxhcmdlIHRoZSBtYXRyaXggd2hlbiBpdCBpcyBzbWFsbGVyIHRoYW4gZ2l2ZW4gc2l6ZS5cbiAgICogSWYgdGhlIG1hdHJpeCBpcyBsYXJnZXIgb3IgZXF1YWwgc2l6ZWQsIG5vdGhpbmcgaXMgZG9uZS5cbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7RGVuc2VNYXRyaXh9IG1hdHJpeCAgICAgICAgICAgVGhlIG1hdHJpeCB0byBiZSByZXNpemVkXG4gICAqIEBwYXJhbSB7bnVtYmVyW119IHNpemVcbiAgICogQHBhcmFtIHsqfSBkZWZhdWx0VmFsdWUgICAgICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9maXQobWF0cml4LCBzaXplLCBkZWZhdWx0VmFsdWUpIHtcbiAgICB2YXIgLy8gY29weSB0aGUgYXJyYXlcbiAgICBuZXdTaXplID0gbWF0cml4Ll9zaXplLnNsaWNlKDApO1xuXG4gICAgdmFyIGNoYW5nZWQgPSBmYWxzZTsgLy8gYWRkIGRpbWVuc2lvbnMgd2hlbiBuZWVkZWRcblxuICAgIHdoaWxlIChuZXdTaXplLmxlbmd0aCA8IHNpemUubGVuZ3RoKSB7XG4gICAgICBuZXdTaXplLnB1c2goMCk7XG4gICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICB9IC8vIGVubGFyZ2Ugc2l6ZSB3aGVuIG5lZWRlZFxuXG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSBzaXplLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIGlmIChzaXplW2ldID4gbmV3U2l6ZVtpXSkge1xuICAgICAgICBuZXdTaXplW2ldID0gc2l6ZVtpXTtcbiAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgIC8vIHJlc2l6ZSBvbmx5IHdoZW4gc2l6ZSBpcyBjaGFuZ2VkXG4gICAgICBfcmVzaXplKG1hdHJpeCwgbmV3U2l6ZSwgZGVmYXVsdFZhbHVlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoZSBtYXRyaXhcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEByZXR1cm4ge0RlbnNlTWF0cml4fSBjbG9uZVxuICAgKi9cblxuXG4gIERlbnNlTWF0cml4LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbSA9IG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiAoMCwgX29iamVjdC5jbG9uZSkodGhpcy5fZGF0YSksXG4gICAgICBzaXplOiAoMCwgX29iamVjdC5jbG9uZSkodGhpcy5fc2l6ZSksXG4gICAgICBkYXRhdHlwZTogdGhpcy5fZGF0YXR5cGVcbiAgICB9KTtcbiAgICByZXR1cm4gbTtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSBzaXplIG9mIHRoZSBtYXRyaXguXG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119IHNpemVcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2l6ZS5zbGljZSgwKTsgLy8gcmV0dXJuIGEgY2xvbmUgb2YgX3NpemVcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBtYXRyaXggd2l0aCB0aGUgcmVzdWx0cyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZXhlY3V0ZWQgb25cbiAgICogZWFjaCBlbnRyeSBvZiB0aGUgbWF0cml4LlxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50LCB0aGUgaW5kZXhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZWxlbWVudCwgYW5kIHRoZSBNYXRyaXggYmVpbmcgdHJhdmVyc2VkLlxuICAgKlxuICAgKiBAcmV0dXJuIHtEZW5zZU1hdHJpeH0gbWF0cml4XG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLm1hcCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIC8vIG1hdHJpeCBpbnN0YW5jZVxuICAgIHZhciBtZSA9IHRoaXM7XG5cbiAgICB2YXIgcmVjdXJzZSA9IGZ1bmN0aW9uIHJlY3Vyc2UodmFsdWUsIGluZGV4KSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc0FycmF5KSh2YWx1ZSkpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLm1hcChmdW5jdGlvbiAoY2hpbGQsIGkpIHtcbiAgICAgICAgICByZXR1cm4gcmVjdXJzZShjaGlsZCwgaW5kZXguY29uY2F0KGkpKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sodmFsdWUsIGluZGV4LCBtZSk7XG4gICAgICB9XG4gICAgfTsgLy8gZGV0ZXJtaW5lIHRoZSBuZXcgZGF0YXR5cGUgd2hlbiB0aGUgb3JpZ2luYWwgbWF0cml4IGhhcyBkYXRhdHlwZSBkZWZpbmVkXG4gICAgLy8gVE9ETzogc2hvdWxkIGJlIGRvbmUgaW4gbWF0cml4IGNvbnN0cnVjdG9yIGluc3RlYWRcblxuXG4gICAgdmFyIGRhdGEgPSByZWN1cnNlKHRoaXMuX2RhdGEsIFtdKTtcbiAgICB2YXIgZGF0YXR5cGUgPSB0aGlzLl9kYXRhdHlwZSAhPT0gdW5kZWZpbmVkID8gKDAsIF9hcnJheS5nZXRBcnJheURhdGFUeXBlKShkYXRhLCBfaXMudHlwZU9mKSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KGRhdGEsIGRhdGF0eXBlKTtcbiAgfTtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmdW5jdGlvbiBvbiBlYWNoIGVudHJ5IG9mIHRoZSBtYXRyaXguXG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQsIHRoZSBpbmRleFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBlbGVtZW50LCBhbmQgdGhlIE1hdHJpeCBiZWluZyB0cmF2ZXJzZWQuXG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAvLyBtYXRyaXggaW5zdGFuY2VcbiAgICB2YXIgbWUgPSB0aGlzO1xuXG4gICAgdmFyIHJlY3Vyc2UgPSBmdW5jdGlvbiByZWN1cnNlKHZhbHVlLCBpbmRleCkge1xuICAgICAgaWYgKCgwLCBfaXMuaXNBcnJheSkodmFsdWUpKSB7XG4gICAgICAgIHZhbHVlLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkLCBpKSB7XG4gICAgICAgICAgcmVjdXJzZShjaGlsZCwgaW5kZXguY29uY2F0KGkpKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayh2YWx1ZSwgaW5kZXgsIG1lKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmVjdXJzZSh0aGlzLl9kYXRhLCBbXSk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gQXJyYXkgd2l0aCBhIGNvcHkgb2YgdGhlIGRhdGEgb2YgdGhlIERlbnNlTWF0cml4XG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IGFycmF5XG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLnRvQXJyYXkgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICgwLCBfb2JqZWN0LmNsb25lKSh0aGlzLl9kYXRhKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgcHJpbWl0aXZlIHZhbHVlIG9mIHRoZSBEZW5zZU1hdHJpeDogYSBtdWx0aWRpbWVuc2lvbmFsIGFycmF5XG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IGFycmF5XG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLnZhbHVlT2YgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeCwgd2l0aCBvcHRpb25hbCBmb3JtYXR0aW5nIG9wdGlvbnMuXG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcGFyYW0ge09iamVjdCB8IG51bWJlciB8IEZ1bmN0aW9ufSBbb3B0aW9uc10gIEZvcm1hdHRpbmcgb3B0aW9ucy4gU2VlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliL3V0aWxzL251bWJlcjpmb3JtYXQgZm9yIGFcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiBvZiB0aGUgYXZhaWxhYmxlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5cbiAgICogQHJldHVybnMge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgcmV0dXJuICgwLCBfc3RyaW5nLmZvcm1hdCkodGhpcy5fZGF0YSwgb3B0aW9ucyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeFxuICAgKiBAbWVtYmVyb2YgRGVuc2VNYXRyaXhcbiAgICogQHJldHVybnMge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXgucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiAoMCwgX3N0cmluZy5mb3JtYXQpKHRoaXMuX2RhdGEpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4XG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cblxuXG4gIERlbnNlTWF0cml4LnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ0RlbnNlTWF0cml4JyxcbiAgICAgIGRhdGE6IHRoaXMuX2RhdGEsXG4gICAgICBzaXplOiB0aGlzLl9zaXplLFxuICAgICAgZGF0YXR5cGU6IHRoaXMuX2RhdGF0eXBlXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUga3RoIE1hdHJpeCBkaWFnb25hbC5cbiAgICpcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyfSBbaz0wXSAgICAgVGhlIGt0aCBkaWFnb25hbCB3aGVyZSB0aGUgdmVjdG9yIHdpbGwgcmV0cmlldmVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgIFRoZSBtYXRyaXggd2l0aCB0aGUgZGlhZ29uYWwgdmFsdWVzLlxuICAgKi9cblxuXG4gIERlbnNlTWF0cml4LnByb3RvdHlwZS5kaWFnb25hbCA9IGZ1bmN0aW9uIChrKSB7XG4gICAgLy8gdmFsaWRhdGUgayBpZiBhbnlcbiAgICBpZiAoaykge1xuICAgICAgLy8gY29udmVydCBCaWdOdW1iZXIgdG8gYSBudW1iZXJcbiAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShrKSkge1xuICAgICAgICBrID0gay50b051bWJlcigpO1xuICAgICAgfSAvLyBpcyBtdXN0IGJlIGFuIGludGVnZXJcblxuXG4gICAgICBpZiAoISgwLCBfaXMuaXNOdW1iZXIpKGspIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKGspKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBwYXJhbWV0ZXIgayBtdXN0IGJlIGFuIGludGVnZXIgbnVtYmVyJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRlZmF1bHQgdmFsdWVcbiAgICAgIGsgPSAwO1xuICAgIH1cblxuICAgIHZhciBrU3VwZXIgPSBrID4gMCA/IGsgOiAwO1xuICAgIHZhciBrU3ViID0gayA8IDAgPyAtayA6IDA7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgcm93cyA9IHRoaXMuX3NpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSB0aGlzLl9zaXplWzFdOyAvLyBudW1iZXIgZGlhZ29uYWwgdmFsdWVzXG5cbiAgICB2YXIgbiA9IE1hdGgubWluKHJvd3MgLSBrU3ViLCBjb2x1bW5zIC0ga1N1cGVyKTsgLy8geCBpcyBhIG1hdHJpeCBnZXQgZGlhZ29uYWwgZnJvbSBtYXRyaXhcblxuICAgIHZhciBkYXRhID0gW107IC8vIGxvb3Agcm93c1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIHtcbiAgICAgIGRhdGFbaV0gPSB0aGlzLl9kYXRhW2kgKyBrU3ViXVtpICsga1N1cGVyXTtcbiAgICB9IC8vIGNyZWF0ZSBEZW5zZU1hdHJpeFxuXG5cbiAgICByZXR1cm4gbmV3IERlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6IGRhdGEsXG4gICAgICBzaXplOiBbbl0sXG4gICAgICBkYXRhdHlwZTogdGhpcy5fZGF0YXR5cGVcbiAgICB9KTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGRpYWdvbmFsIG1hdHJpeC5cbiAgICpcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7QXJyYXl9IHNpemUgICAgICAgICAgICAgICAgICAgICBUaGUgbWF0cml4IHNpemUuXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgTWF0cml4IHwgQXJyYXkgfSB2YWx1ZSBUaGUgdmFsdWVzIGZvciB0aGUgZGlhZ29uYWwuXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyfSBbaz0wXSAgICAgICBUaGUga3RoIGRpYWdvbmFsIHdoZXJlIHRoZSB2ZWN0b3Igd2lsbCBiZSBmaWxsZWQgaW4uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZGVmYXVsdFZhbHVlXSAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3Igbm9uLWRpYWdvbmFsXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGF0YXR5cGVdICAgICAgICAgICAgICBUaGUgZGF0YXR5cGUgZm9yIHRoZSBkaWFnb25hbFxuICAgKlxuICAgKiBAcmV0dXJucyB7RGVuc2VNYXRyaXh9XG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXguZGlhZ29uYWwgPSBmdW5jdGlvbiAoc2l6ZSwgdmFsdWUsIGssIGRlZmF1bHRWYWx1ZSkge1xuICAgIGlmICghKDAsIF9pcy5pc0FycmF5KShzaXplKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgZXhwZWN0ZWQsIHNpemUgcGFyYW1ldGVyJyk7XG4gICAgfVxuXG4gICAgaWYgKHNpemUubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgdHdvIGRpbWVuc2lvbnMgbWF0cml4IGFyZSBzdXBwb3J0ZWQnKTtcbiAgICB9IC8vIG1hcCBzaXplICYgdmFsaWRhdGVcblxuXG4gICAgc2l6ZSA9IHNpemUubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgICAvLyBjaGVjayBpdCBpcyBhIGJpZyBudW1iZXJcbiAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShzKSkge1xuICAgICAgICAvLyBjb252ZXJ0IGl0XG4gICAgICAgIHMgPSBzLnRvTnVtYmVyKCk7XG4gICAgICB9IC8vIHZhbGlkYXRlIGFyZ3VtZW50c1xuXG5cbiAgICAgIGlmICghKDAsIF9pcy5pc051bWJlcikocykgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikocykgfHwgcyA8IDEpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdTaXplIHZhbHVlcyBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXJzJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzO1xuICAgIH0pOyAvLyB2YWxpZGF0ZSBrIGlmIGFueVxuXG4gICAgaWYgKGspIHtcbiAgICAgIC8vIGNvbnZlcnQgQmlnTnVtYmVyIHRvIGEgbnVtYmVyXG4gICAgICBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikoaykpIHtcbiAgICAgICAgayA9IGsudG9OdW1iZXIoKTtcbiAgICAgIH0gLy8gaXMgbXVzdCBiZSBhbiBpbnRlZ2VyXG5cblxuICAgICAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKShrKSB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShrKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgcGFyYW1ldGVyIGsgbXVzdCBiZSBhbiBpbnRlZ2VyIG51bWJlcicpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkZWZhdWx0IHZhbHVlXG4gICAgICBrID0gMDtcbiAgICB9XG5cbiAgICB2YXIga1N1cGVyID0gayA+IDAgPyBrIDogMDtcbiAgICB2YXIga1N1YiA9IGsgPCAwID8gLWsgOiAwOyAvLyByb3dzIGFuZCBjb2x1bW5zXG5cbiAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBzaXplWzFdOyAvLyBudW1iZXIgb2Ygbm9uLXplcm8gaXRlbXNcblxuICAgIHZhciBuID0gTWF0aC5taW4ocm93cyAtIGtTdWIsIGNvbHVtbnMgLSBrU3VwZXIpOyAvLyB2YWx1ZSBleHRyYWN0aW9uIGZ1bmN0aW9uXG5cbiAgICB2YXIgX3ZhbHVlOyAvLyBjaGVjayB2YWx1ZVxuXG5cbiAgICBpZiAoKDAsIF9pcy5pc0FycmF5KSh2YWx1ZSkpIHtcbiAgICAgIC8vIHZhbGlkYXRlIGFycmF5XG4gICAgICBpZiAodmFsdWUubGVuZ3RoICE9PSBuKSB7XG4gICAgICAgIC8vIG51bWJlciBvZiB2YWx1ZXMgaW4gYXJyYXkgbXVzdCBiZSBuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB2YWx1ZSBhcnJheSBsZW5ndGgnKTtcbiAgICAgIH0gLy8gZGVmaW5lIGZ1bmN0aW9uXG5cblxuICAgICAgX3ZhbHVlID0gZnVuY3Rpb24gX3ZhbHVlKGkpIHtcbiAgICAgICAgLy8gcmV0dXJuIHZhbHVlIEAgaVxuICAgICAgICByZXR1cm4gdmFsdWVbaV07XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc01hdHJpeCkodmFsdWUpKSB7XG4gICAgICAvLyBtYXRyaXggc2l6ZVxuICAgICAgdmFyIG1zID0gdmFsdWUuc2l6ZSgpOyAvLyB2YWxpZGF0ZSBtYXRyaXhcblxuICAgICAgaWYgKG1zLmxlbmd0aCAhPT0gMSB8fCBtc1swXSAhPT0gbikge1xuICAgICAgICAvLyBudW1iZXIgb2YgdmFsdWVzIGluIGFycmF5IG11c3QgYmUgblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbWF0cml4IGxlbmd0aCcpO1xuICAgICAgfSAvLyBkZWZpbmUgZnVuY3Rpb25cblxuXG4gICAgICBfdmFsdWUgPSBmdW5jdGlvbiBfdmFsdWUoaSkge1xuICAgICAgICAvLyByZXR1cm4gdmFsdWUgQCBpXG4gICAgICAgIHJldHVybiB2YWx1ZS5nZXQoW2ldKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRlZmluZSBmdW5jdGlvblxuICAgICAgX3ZhbHVlID0gZnVuY3Rpb24gX3ZhbHVlKCkge1xuICAgICAgICAvLyByZXR1cm4gdmFsdWVcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfTtcbiAgICB9IC8vIGRpc2NvdmVyIGRlZmF1bHQgdmFsdWUgaWYgbmVlZGVkXG5cblxuICAgIGlmICghZGVmYXVsdFZhbHVlKSB7XG4gICAgICAvLyBjaGVjayBmaXJzdCB2YWx1ZSBpbiBhcnJheVxuICAgICAgZGVmYXVsdFZhbHVlID0gKDAsIF9pcy5pc0JpZ051bWJlcikoX3ZhbHVlKDApKSA/IF92YWx1ZSgwKS5tdWwoMCkgLy8gdHJpY2sgdG8gY3JlYXRlIGEgQmlnTnVtYmVyIHdpdGggdmFsdWUgemVyb1xuICAgICAgOiAwO1xuICAgIH0gLy8gZW1wdHkgYXJyYXlcblxuXG4gICAgdmFyIGRhdGEgPSBbXTsgLy8gY2hlY2sgd2UgbmVlZCB0byByZXNpemUgYXJyYXlcblxuICAgIGlmIChzaXplLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIHJlc2l6ZSBhcnJheVxuICAgICAgZGF0YSA9ICgwLCBfYXJyYXkucmVzaXplKShkYXRhLCBzaXplLCBkZWZhdWx0VmFsdWUpOyAvLyBmaWxsIGRpYWdvbmFsXG5cbiAgICAgIGZvciAodmFyIGQgPSAwOyBkIDwgbjsgZCsrKSB7XG4gICAgICAgIGRhdGFbZCArIGtTdWJdW2QgKyBrU3VwZXJdID0gX3ZhbHVlKGQpO1xuICAgICAgfVxuICAgIH0gLy8gY3JlYXRlIERlbnNlTWF0cml4XG5cblxuICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoe1xuICAgICAgZGF0YTogZGF0YSxcbiAgICAgIHNpemU6IFtyb3dzLCBjb2x1bW5zXVxuICAgIH0pO1xuICB9O1xuICAvKipcbiAgICogR2VuZXJhdGUgYSBtYXRyaXggZnJvbSBhIEpTT04gb2JqZWN0XG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkRlbnNlTWF0cml4XCIsIGRhdGE6IFtdLCBzaXplOiBbXX1gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtEZW5zZU1hdHJpeH1cbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeChqc29uKTtcbiAgfTtcbiAgLyoqXG4gICAqIFN3YXAgcm93cyBpIGFuZCBqIGluIE1hdHJpeC5cbiAgICpcbiAgICogQG1lbWJlcm9mIERlbnNlTWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpICAgICAgIE1hdHJpeCByb3cgaW5kZXggMVxuICAgKiBAcGFyYW0ge251bWJlcn0gaiAgICAgICBNYXRyaXggcm93IGluZGV4IDJcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgVGhlIG1hdHJpeCByZWZlcmVuY2VcbiAgICovXG5cblxuICBEZW5zZU1hdHJpeC5wcm90b3R5cGUuc3dhcFJvd3MgPSBmdW5jdGlvbiAoaSwgaikge1xuICAgIC8vIGNoZWNrIGluZGV4XG4gICAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKShpKSB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShpKSB8fCAhKDAsIF9pcy5pc051bWJlcikoaikgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoaikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUm93IGluZGV4IG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcnMnKTtcbiAgICB9IC8vIGNoZWNrIGRpbWVuc2lvbnNcblxuXG4gICAgaWYgKHRoaXMuX3NpemUubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgdHdvIGRpbWVuc2lvbmFsIG1hdHJpeCBpcyBzdXBwb3J0ZWQnKTtcbiAgICB9IC8vIHZhbGlkYXRlIGluZGV4XG5cblxuICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkoaSwgdGhpcy5fc2l6ZVswXSk7XG4gICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShqLCB0aGlzLl9zaXplWzBdKTsgLy8gc3dhcCByb3dzXG5cbiAgICBEZW5zZU1hdHJpeC5fc3dhcFJvd3MoaSwgaiwgdGhpcy5fZGF0YSk7IC8vIHJldHVybiBjdXJyZW50IGluc3RhbmNlXG5cblxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICAvKipcbiAgICogU3dhcCByb3dzIGkgYW5kIGogaW4gRGVuc2UgTWF0cml4IGRhdGEgc3RydWN0dXJlLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gaSAgICAgICBNYXRyaXggcm93IGluZGV4IDFcbiAgICogQHBhcmFtIHtudW1iZXJ9IGogICAgICAgTWF0cml4IHJvdyBpbmRleCAyXG4gICAqIEBwYXJhbSB7QXJyYXl9IGRhdGEgICAgIE1hdHJpeCBkYXRhXG4gICAqL1xuXG5cbiAgRGVuc2VNYXRyaXguX3N3YXBSb3dzID0gZnVuY3Rpb24gKGksIGosIGRhdGEpIHtcbiAgICAvLyBzd2FwIHZhbHVlcyBpIDwtPiBqXG4gICAgdmFyIHZpID0gZGF0YVtpXTtcbiAgICBkYXRhW2ldID0gZGF0YVtqXTtcbiAgICBkYXRhW2pdID0gdmk7XG4gIH07XG4gIC8qKlxuICAgKiBQcmVwcm9jZXNzIGRhdGEsIHdoaWNoIGNhbiBiZSBhbiBBcnJheSBvciBEZW5zZU1hdHJpeCB3aXRoIG5lc3RlZCBBcnJheXMgYW5kXG4gICAqIE1hdHJpY2VzLiBSZXBsYWNlcyBhbGwgbmVzdGVkIE1hdHJpY2VzIHdpdGggQXJyYXlzXG4gICAqIEBtZW1iZXJvZiBEZW5zZU1hdHJpeFxuICAgKiBAcGFyYW0ge0FycmF5fSBkYXRhXG4gICAqIEByZXR1cm4ge0FycmF5fSBkYXRhXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gcHJlcHJvY2VzcyhkYXRhKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gZGF0YS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICB2YXIgZWxlbSA9IGRhdGFbaV07XG5cbiAgICAgIGlmICgoMCwgX2lzLmlzQXJyYXkpKGVsZW0pKSB7XG4gICAgICAgIGRhdGFbaV0gPSBwcmVwcm9jZXNzKGVsZW0pO1xuICAgICAgfSBlbHNlIGlmIChlbGVtICYmIGVsZW0uaXNNYXRyaXggPT09IHRydWUpIHtcbiAgICAgICAgZGF0YVtpXSA9IHByZXByb2Nlc3MoZWxlbS52YWx1ZU9mKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XG5cbiAgcmV0dXJuIERlbnNlTWF0cml4O1xufSwge1xuICBpc0NsYXNzOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlRGVuc2VNYXRyaXhDbGFzcyA9IGNyZWF0ZURlbnNlTWF0cml4Q2xhc3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZpYm9uYWNjaUhlYXBDbGFzcyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ0ZpYm9uYWNjaUhlYXAnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnc21hbGxlcicsICdsYXJnZXInXTtcbnZhciBjcmVhdGVGaWJvbmFjY2lIZWFwQ2xhc3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgc21hbGxlciA9IF9yZWYuc21hbGxlcixcbiAgICAgIGxhcmdlciA9IF9yZWYubGFyZ2VyO1xuICB2YXIgb25lT3ZlckxvZ1BoaSA9IDEuMCAvIE1hdGgubG9nKCgxLjAgKyBNYXRoLnNxcnQoNS4wKSkgLyAyLjApO1xuICAvKipcbiAgICogRmlib25hY2NpIEhlYXAgaW1wbGVtZW50YXRpb24sIHVzZWQgaW50ZXJhbGx5IGZvciBNYXRyaXggbWF0aC5cbiAgICogQGNsYXNzIEZpYm9uYWNjaUhlYXBcbiAgICogQGNvbnN0cnVjdG9yIEZpYm9uYWNjaUhlYXBcbiAgICovXG5cbiAgZnVuY3Rpb24gRmlib25hY2NpSGVhcCgpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRmlib25hY2NpSGVhcCkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfSAvLyBpbml0aWFsaXplIGZpZWxkc1xuXG5cbiAgICB0aGlzLl9taW5pbXVtID0gbnVsbDtcbiAgICB0aGlzLl9zaXplID0gMDtcbiAgfVxuICAvKipcbiAgICogQXR0YWNoIHR5cGUgaW5mb3JtYXRpb25cbiAgICovXG5cblxuICBGaWJvbmFjY2lIZWFwLnByb3RvdHlwZS50eXBlID0gJ0ZpYm9uYWNjaUhlYXAnO1xuICBGaWJvbmFjY2lIZWFwLnByb3RvdHlwZS5pc0ZpYm9uYWNjaUhlYXAgPSB0cnVlO1xuICAvKipcbiAgICogSW5zZXJ0cyBhIG5ldyBkYXRhIGVsZW1lbnQgaW50byB0aGUgaGVhcC4gTm8gaGVhcCBjb25zb2xpZGF0aW9uIGlzXG4gICAqIHBlcmZvcm1lZCBhdCB0aGlzIHRpbWUsIHRoZSBuZXcgbm9kZSBpcyBzaW1wbHkgaW5zZXJ0ZWQgaW50byB0aGUgcm9vdFxuICAgKiBsaXN0IG9mIHRoaXMgaGVhcC4gUnVubmluZyB0aW1lOiBPKDEpIGFjdHVhbC5cbiAgICogQG1lbWJlcm9mIEZpYm9uYWNjaUhlYXBcbiAgICovXG5cbiAgRmlib25hY2NpSGVhcC5wcm90b3R5cGUuaW5zZXJ0ID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAvLyBjcmVhdGUgbm9kZVxuICAgIHZhciBub2RlID0ge1xuICAgICAga2V5OiBrZXksXG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBkZWdyZWU6IDBcbiAgICB9OyAvLyBjaGVjayB3ZSBoYXZlIGEgbm9kZSBpbiB0aGUgbWluaW11bVxuXG4gICAgaWYgKHRoaXMuX21pbmltdW0pIHtcbiAgICAgIC8vIG1pbmltdW0gbm9kZVxuICAgICAgdmFyIG1pbmltdW0gPSB0aGlzLl9taW5pbXVtOyAvLyB1cGRhdGUgbGVmdCAmIHJpZ2h0IG9mIG5vZGVcblxuICAgICAgbm9kZS5sZWZ0ID0gbWluaW11bTtcbiAgICAgIG5vZGUucmlnaHQgPSBtaW5pbXVtLnJpZ2h0O1xuICAgICAgbWluaW11bS5yaWdodCA9IG5vZGU7XG4gICAgICBub2RlLnJpZ2h0LmxlZnQgPSBub2RlOyAvLyB1cGRhdGUgbWluaW11bSBub2RlIGluIGhlYXAgaWYgbmVlZGVkXG5cbiAgICAgIGlmIChzbWFsbGVyKGtleSwgbWluaW11bS5rZXkpKSB7XG4gICAgICAgIC8vIG5vZGUgaGFzIGEgc21hbGxlciBrZXksIHVzZSBpdCBhcyBtaW5pbXVtXG4gICAgICAgIHRoaXMuX21pbmltdW0gPSBub2RlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBzZXQgbGVmdCAmIHJpZ2h0XG4gICAgICBub2RlLmxlZnQgPSBub2RlO1xuICAgICAgbm9kZS5yaWdodCA9IG5vZGU7IC8vIHRoaXMgaXMgdGhlIGZpcnN0IG5vZGVcblxuICAgICAgdGhpcy5fbWluaW11bSA9IG5vZGU7XG4gICAgfSAvLyBpbmNyZW1lbnQgbnVtYmVyIG9mIG5vZGVzIGluIGhlYXBcblxuXG4gICAgdGhpcy5fc2l6ZSsrOyAvLyByZXR1cm4gbm9kZVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygbm9kZXMgaW4gaGVhcC4gUnVubmluZyB0aW1lOiBPKDEpIGFjdHVhbC5cbiAgICogQG1lbWJlcm9mIEZpYm9uYWNjaUhlYXBcbiAgICovXG5cblxuICBGaWJvbmFjY2lIZWFwLnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9zaXplO1xuICB9O1xuICAvKipcbiAgICogUmVtb3ZlcyBhbGwgZWxlbWVudHMgZnJvbSB0aGlzIGhlYXAuXG4gICAqIEBtZW1iZXJvZiBGaWJvbmFjY2lIZWFwXG4gICAqL1xuXG5cbiAgRmlib25hY2NpSGVhcC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5fbWluaW11bSA9IG51bGw7XG4gICAgdGhpcy5fc2l6ZSA9IDA7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGhlYXAgaXMgZW1wdHksIG90aGVyd2lzZSBmYWxzZS5cbiAgICogQG1lbWJlcm9mIEZpYm9uYWNjaUhlYXBcbiAgICovXG5cblxuICBGaWJvbmFjY2lIZWFwLnByb3RvdHlwZS5pc0VtcHR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9zaXplID09PSAwO1xuICB9O1xuICAvKipcbiAgICogRXh0cmFjdHMgdGhlIG5vZGUgd2l0aCBtaW5pbXVtIGtleSBmcm9tIGhlYXAuIEFtb3J0aXplZCBydW5uaW5nXG4gICAqIHRpbWU6IE8obG9nIG4pLlxuICAgKiBAbWVtYmVyb2YgRmlib25hY2NpSGVhcFxuICAgKi9cblxuXG4gIEZpYm9uYWNjaUhlYXAucHJvdG90eXBlLmV4dHJhY3RNaW5pbXVtID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIG5vZGUgdG8gcmVtb3ZlXG4gICAgdmFyIG5vZGUgPSB0aGlzLl9taW5pbXVtOyAvLyBjaGVjayB3ZSBoYXZlIGEgbWluaW11bVxuXG4gICAgaWYgKG5vZGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBub2RlO1xuICAgIH0gLy8gY3VycmVudCBtaW5pbXVtXG5cblxuICAgIHZhciBtaW5pbXVtID0gdGhpcy5fbWluaW11bTsgLy8gZ2V0IG51bWJlciBvZiBjaGlsZHJlblxuXG4gICAgdmFyIG51bWJlck9mQ2hpbGRyZW4gPSBub2RlLmRlZ3JlZTsgLy8gcG9pbnRlciB0byB0aGUgZmlyc3QgY2hpbGRcblxuICAgIHZhciB4ID0gbm9kZS5jaGlsZDsgLy8gZm9yIGVhY2ggY2hpbGQgb2Ygbm9kZSBkby4uLlxuXG4gICAgd2hpbGUgKG51bWJlck9mQ2hpbGRyZW4gPiAwKSB7XG4gICAgICAvLyBzdG9yZSBub2RlIGluIHJpZ2h0IHNpZGVcbiAgICAgIHZhciB0ZW1wUmlnaHQgPSB4LnJpZ2h0OyAvLyByZW1vdmUgeCBmcm9tIGNoaWxkIGxpc3RcblxuICAgICAgeC5sZWZ0LnJpZ2h0ID0geC5yaWdodDtcbiAgICAgIHgucmlnaHQubGVmdCA9IHgubGVmdDsgLy8gYWRkIHggdG8gcm9vdCBsaXN0IG9mIGhlYXBcblxuICAgICAgeC5sZWZ0ID0gbWluaW11bTtcbiAgICAgIHgucmlnaHQgPSBtaW5pbXVtLnJpZ2h0O1xuICAgICAgbWluaW11bS5yaWdodCA9IHg7XG4gICAgICB4LnJpZ2h0LmxlZnQgPSB4OyAvLyBzZXQgUGFyZW50W3hdIHRvIG51bGxcblxuICAgICAgeC5wYXJlbnQgPSBudWxsO1xuICAgICAgeCA9IHRlbXBSaWdodDtcbiAgICAgIG51bWJlck9mQ2hpbGRyZW4tLTtcbiAgICB9IC8vIHJlbW92ZSBub2RlIGZyb20gcm9vdCBsaXN0IG9mIGhlYXBcblxuXG4gICAgbm9kZS5sZWZ0LnJpZ2h0ID0gbm9kZS5yaWdodDtcbiAgICBub2RlLnJpZ2h0LmxlZnQgPSBub2RlLmxlZnQ7IC8vIHVwZGF0ZSBtaW5pbXVtXG5cbiAgICBpZiAobm9kZSA9PT0gbm9kZS5yaWdodCkge1xuICAgICAgLy8gZW1wdHlcbiAgICAgIG1pbmltdW0gPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB1cGRhdGUgbWluaW11bVxuICAgICAgbWluaW11bSA9IG5vZGUucmlnaHQ7IC8vIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBwb2ludGVyIHRvIHRoZSByb290IHdpdGggbWluaW11bSBrZXlcblxuICAgICAgbWluaW11bSA9IF9maW5kTWluaW11bU5vZGUobWluaW11bSwgdGhpcy5fc2l6ZSk7XG4gICAgfSAvLyBkZWNyZW1lbnQgc2l6ZSBvZiBoZWFwXG5cblxuICAgIHRoaXMuX3NpemUtLTsgLy8gdXBkYXRlIG1pbmltdW1cblxuICAgIHRoaXMuX21pbmltdW0gPSBtaW5pbXVtOyAvLyByZXR1cm4gbm9kZVxuXG4gICAgcmV0dXJuIG5vZGU7XG4gIH07XG4gIC8qKlxuICAgKiBSZW1vdmVzIGEgbm9kZSBmcm9tIHRoZSBoZWFwIGdpdmVuIHRoZSByZWZlcmVuY2UgdG8gdGhlIG5vZGUuIFRoZSB0cmVlc1xuICAgKiBpbiB0aGUgaGVhcCB3aWxsIGJlIGNvbnNvbGlkYXRlZCwgaWYgbmVjZXNzYXJ5LiBUaGlzIG9wZXJhdGlvbiBtYXkgZmFpbFxuICAgKiB0byByZW1vdmUgdGhlIGNvcnJlY3QgZWxlbWVudCBpZiB0aGVyZSBhcmUgbm9kZXMgd2l0aCBrZXkgdmFsdWUgLUluZmluaXR5LlxuICAgKiBSdW5uaW5nIHRpbWU6IE8obG9nIG4pIGFtb3J0aXplZC5cbiAgICogQG1lbWJlcm9mIEZpYm9uYWNjaUhlYXBcbiAgICovXG5cblxuICBGaWJvbmFjY2lIZWFwLnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIC8vIGRlY3JlYXNlIGtleSB2YWx1ZVxuICAgIHRoaXMuX21pbmltdW0gPSBfZGVjcmVhc2VLZXkodGhpcy5fbWluaW11bSwgbm9kZSwgLTEpOyAvLyByZW1vdmUgdGhlIHNtYWxsZXN0XG5cbiAgICB0aGlzLmV4dHJhY3RNaW5pbXVtKCk7XG4gIH07XG4gIC8qKlxuICAgKiBEZWNyZWFzZXMgdGhlIGtleSB2YWx1ZSBmb3IgYSBoZWFwIG5vZGUsIGdpdmVuIHRoZSBuZXcgdmFsdWUgdG8gdGFrZSBvbi5cbiAgICogVGhlIHN0cnVjdHVyZSBvZiB0aGUgaGVhcCBtYXkgYmUgY2hhbmdlZCBhbmQgd2lsbCBub3QgYmUgY29uc29saWRhdGVkLlxuICAgKiBSdW5uaW5nIHRpbWU6IE8oMSkgYW1vcnRpemVkLlxuICAgKiBAbWVtYmVyb2YgRmlib25hY2NpSGVhcFxuICAgKi9cblxuXG4gIGZ1bmN0aW9uIF9kZWNyZWFzZUtleShtaW5pbXVtLCBub2RlLCBrZXkpIHtcbiAgICAvLyBzZXQgbm9kZSBrZXlcbiAgICBub2RlLmtleSA9IGtleTsgLy8gZ2V0IHBhcmVudCBub2RlXG5cbiAgICB2YXIgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XG5cbiAgICBpZiAocGFyZW50ICYmIHNtYWxsZXIobm9kZS5rZXksIHBhcmVudC5rZXkpKSB7XG4gICAgICAvLyByZW1vdmUgbm9kZSBmcm9tIHBhcmVudFxuICAgICAgX2N1dChtaW5pbXVtLCBub2RlLCBwYXJlbnQpOyAvLyByZW1vdmUgYWxsIG5vZGVzIGZyb20gcGFyZW50IHRvIHRoZSByb290IHBhcmVudFxuXG5cbiAgICAgIF9jYXNjYWRpbmdDdXQobWluaW11bSwgcGFyZW50KTtcbiAgICB9IC8vIHVwZGF0ZSBtaW5pbXVtIG5vZGUgaWYgbmVlZGVkXG5cblxuICAgIGlmIChzbWFsbGVyKG5vZGUua2V5LCBtaW5pbXVtLmtleSkpIHtcbiAgICAgIG1pbmltdW0gPSBub2RlO1xuICAgIH0gLy8gcmV0dXJuIG1pbmltdW1cblxuXG4gICAgcmV0dXJuIG1pbmltdW07XG4gIH1cbiAgLyoqXG4gICAqIFRoZSByZXZlcnNlIG9mIHRoZSBsaW5rIG9wZXJhdGlvbjogcmVtb3ZlcyBub2RlIGZyb20gdGhlIGNoaWxkIGxpc3Qgb2YgcGFyZW50LlxuICAgKiBUaGlzIG1ldGhvZCBhc3N1bWVzIHRoYXQgbWluIGlzIG5vbi1udWxsLiBSdW5uaW5nIHRpbWU6IE8oMSkuXG4gICAqIEBtZW1iZXJvZiBGaWJvbmFjY2lIZWFwXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2N1dChtaW5pbXVtLCBub2RlLCBwYXJlbnQpIHtcbiAgICAvLyByZW1vdmUgbm9kZSBmcm9tIHBhcmVudCBjaGlsZHJlbiBhbmQgZGVjcmVtZW50IERlZ3JlZVtwYXJlbnRdXG4gICAgbm9kZS5sZWZ0LnJpZ2h0ID0gbm9kZS5yaWdodDtcbiAgICBub2RlLnJpZ2h0LmxlZnQgPSBub2RlLmxlZnQ7XG4gICAgcGFyZW50LmRlZ3JlZS0tOyAvLyByZXNldCB5LmNoaWxkIGlmIG5lY2Vzc2FyeVxuXG4gICAgaWYgKHBhcmVudC5jaGlsZCA9PT0gbm9kZSkge1xuICAgICAgcGFyZW50LmNoaWxkID0gbm9kZS5yaWdodDtcbiAgICB9IC8vIHJlbW92ZSBjaGlsZCBpZiBkZWdyZWUgaXMgMFxuXG5cbiAgICBpZiAocGFyZW50LmRlZ3JlZSA9PT0gMCkge1xuICAgICAgcGFyZW50LmNoaWxkID0gbnVsbDtcbiAgICB9IC8vIGFkZCBub2RlIHRvIHJvb3QgbGlzdCBvZiBoZWFwXG5cblxuICAgIG5vZGUubGVmdCA9IG1pbmltdW07XG4gICAgbm9kZS5yaWdodCA9IG1pbmltdW0ucmlnaHQ7XG4gICAgbWluaW11bS5yaWdodCA9IG5vZGU7XG4gICAgbm9kZS5yaWdodC5sZWZ0ID0gbm9kZTsgLy8gc2V0IHBhcmVudFtub2RlXSB0byBudWxsXG5cbiAgICBub2RlLnBhcmVudCA9IG51bGw7IC8vIHNldCBtYXJrW25vZGVdIHRvIGZhbHNlXG5cbiAgICBub2RlLm1hcmsgPSBmYWxzZTtcbiAgfVxuICAvKipcbiAgICogUGVyZm9ybXMgYSBjYXNjYWRpbmcgY3V0IG9wZXJhdGlvbi4gVGhpcyBjdXRzIG5vZGUgZnJvbSBpdHMgcGFyZW50IGFuZCB0aGVuXG4gICAqIGRvZXMgdGhlIHNhbWUgZm9yIGl0cyBwYXJlbnQsIGFuZCBzbyBvbiB1cCB0aGUgdHJlZS5cbiAgICogUnVubmluZyB0aW1lOiBPKGxvZyBuKTsgTygxKSBleGNsdWRpbmcgdGhlIHJlY3Vyc2lvbi5cbiAgICogQG1lbWJlcm9mIEZpYm9uYWNjaUhlYXBcbiAgICovXG5cblxuICBmdW5jdGlvbiBfY2FzY2FkaW5nQ3V0KG1pbmltdW0sIG5vZGUpIHtcbiAgICAvLyBzdG9yZSBwYXJlbnQgbm9kZVxuICAgIHZhciBwYXJlbnQgPSBub2RlLnBhcmVudDsgLy8gaWYgdGhlcmUncyBhIHBhcmVudC4uLlxuXG4gICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIGlmIG5vZGUgaXMgdW5tYXJrZWQsIHNldCBpdCBtYXJrZWRcblxuXG4gICAgaWYgKCFub2RlLm1hcmspIHtcbiAgICAgIG5vZGUubWFyayA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGl0J3MgbWFya2VkLCBjdXQgaXQgZnJvbSBwYXJlbnRcbiAgICAgIF9jdXQobWluaW11bSwgbm9kZSwgcGFyZW50KTsgLy8gY3V0IGl0cyBwYXJlbnQgYXMgd2VsbFxuXG5cbiAgICAgIF9jYXNjYWRpbmdDdXQocGFyZW50KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIE1ha2UgdGhlIGZpcnN0IG5vZGUgYSBjaGlsZCBvZiB0aGUgc2Vjb25kIG9uZS4gUnVubmluZyB0aW1lOiBPKDEpIGFjdHVhbC5cbiAgICogQG1lbWJlcm9mIEZpYm9uYWNjaUhlYXBcbiAgICovXG5cblxuICB2YXIgX2xpbmtOb2RlcyA9IGZ1bmN0aW9uIF9saW5rTm9kZXMobm9kZSwgcGFyZW50KSB7XG4gICAgLy8gcmVtb3ZlIG5vZGUgZnJvbSByb290IGxpc3Qgb2YgaGVhcFxuICAgIG5vZGUubGVmdC5yaWdodCA9IG5vZGUucmlnaHQ7XG4gICAgbm9kZS5yaWdodC5sZWZ0ID0gbm9kZS5sZWZ0OyAvLyBtYWtlIG5vZGUgYSBDaGlsZCBvZiBwYXJlbnRcblxuICAgIG5vZGUucGFyZW50ID0gcGFyZW50O1xuXG4gICAgaWYgKCFwYXJlbnQuY2hpbGQpIHtcbiAgICAgIHBhcmVudC5jaGlsZCA9IG5vZGU7XG4gICAgICBub2RlLnJpZ2h0ID0gbm9kZTtcbiAgICAgIG5vZGUubGVmdCA9IG5vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUubGVmdCA9IHBhcmVudC5jaGlsZDtcbiAgICAgIG5vZGUucmlnaHQgPSBwYXJlbnQuY2hpbGQucmlnaHQ7XG4gICAgICBwYXJlbnQuY2hpbGQucmlnaHQgPSBub2RlO1xuICAgICAgbm9kZS5yaWdodC5sZWZ0ID0gbm9kZTtcbiAgICB9IC8vIGluY3JlYXNlIGRlZ3JlZVtwYXJlbnRdXG5cblxuICAgIHBhcmVudC5kZWdyZWUrKzsgLy8gc2V0IG1hcmtbbm9kZV0gZmFsc2VcblxuICAgIG5vZGUubWFyayA9IGZhbHNlO1xuICB9O1xuXG4gIGZ1bmN0aW9uIF9maW5kTWluaW11bU5vZGUobWluaW11bSwgc2l6ZSkge1xuICAgIC8vIHRvIGZpbmQgdHJlZXMgb2YgdGhlIHNhbWUgZGVncmVlIGVmZmljaWVudGx5IHdlIHVzZSBhbiBhcnJheSBvZiBsZW5ndGggTyhsb2cgbikgaW4gd2hpY2ggd2Uga2VlcCBhIHBvaW50ZXIgdG8gb25lIHJvb3Qgb2YgZWFjaCBkZWdyZWVcbiAgICB2YXIgYXJyYXlTaXplID0gTWF0aC5mbG9vcihNYXRoLmxvZyhzaXplKSAqIG9uZU92ZXJMb2dQaGkpICsgMTsgLy8gY3JlYXRlIGxpc3Qgd2l0aCBpbml0aWFsIGNhcGFjaXR5XG5cbiAgICB2YXIgYXJyYXkgPSBuZXcgQXJyYXkoYXJyYXlTaXplKTsgLy8gZmluZCB0aGUgbnVtYmVyIG9mIHJvb3Qgbm9kZXMuXG5cbiAgICB2YXIgbnVtUm9vdHMgPSAwO1xuICAgIHZhciB4ID0gbWluaW11bTtcblxuICAgIGlmICh4KSB7XG4gICAgICBudW1Sb290cysrO1xuICAgICAgeCA9IHgucmlnaHQ7XG5cbiAgICAgIHdoaWxlICh4ICE9PSBtaW5pbXVtKSB7XG4gICAgICAgIG51bVJvb3RzKys7XG4gICAgICAgIHggPSB4LnJpZ2h0O1xuICAgICAgfVxuICAgIH0gLy8gdmFyc1xuXG5cbiAgICB2YXIgeTsgLy8gRm9yIGVhY2ggbm9kZSBpbiByb290IGxpc3QgZG8uLi5cblxuICAgIHdoaWxlIChudW1Sb290cyA+IDApIHtcbiAgICAgIC8vIGFjY2VzcyB0aGlzIG5vZGUncyBkZWdyZWUuLlxuICAgICAgdmFyIGQgPSB4LmRlZ3JlZTsgLy8gZ2V0IG5leHQgbm9kZVxuXG4gICAgICB2YXIgbmV4dCA9IHgucmlnaHQ7IC8vIGNoZWNrIGlmIHRoZXJlIGlzIGEgbm9kZSBhbHJlYWR5IGluIGFycmF5IHdpdGggdGhlIHNhbWUgZGVncmVlXG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIC8vIGdldCBub2RlIHdpdGggdGhlIHNhbWUgZGVncmVlIGlzIGFueVxuICAgICAgICB5ID0gYXJyYXlbZF07XG5cbiAgICAgICAgaWYgKCF5KSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gLy8gbWFrZSBvbmUgbm9kZSB3aXRoIHRoZSBzYW1lIGRlZ3JlZSBhIGNoaWxkIG9mIHRoZSBvdGhlciwgZG8gdGhpcyBiYXNlZCBvbiB0aGUga2V5IHZhbHVlLlxuXG5cbiAgICAgICAgaWYgKGxhcmdlcih4LmtleSwgeS5rZXkpKSB7XG4gICAgICAgICAgdmFyIHRlbXAgPSB5O1xuICAgICAgICAgIHkgPSB4O1xuICAgICAgICAgIHggPSB0ZW1wO1xuICAgICAgICB9IC8vIG1ha2UgeSBhIGNoaWxkIG9mIHhcblxuXG4gICAgICAgIF9saW5rTm9kZXMoeSwgeCk7IC8vIHdlIGhhdmUgaGFuZGxlZCB0aGlzIGRlZ3JlZSwgZ28gdG8gbmV4dCBvbmUuXG5cblxuICAgICAgICBhcnJheVtkXSA9IG51bGw7XG4gICAgICAgIGQrKztcbiAgICAgIH0gLy8gc2F2ZSB0aGlzIG5vZGUgZm9yIGxhdGVyIHdoZW4gd2UgbWlnaHQgZW5jb3VudGVyIGFub3RoZXIgb2YgdGhlIHNhbWUgZGVncmVlLlxuXG5cbiAgICAgIGFycmF5W2RdID0geDsgLy8gbW92ZSBmb3J3YXJkIHRocm91Z2ggbGlzdC5cblxuICAgICAgeCA9IG5leHQ7XG4gICAgICBudW1Sb290cy0tO1xuICAgIH0gLy8gU2V0IG1pbiB0byBudWxsIChlZmZlY3RpdmVseSBsb3NpbmcgdGhlIHJvb3QgbGlzdCkgYW5kIHJlY29uc3RydWN0IHRoZSByb290IGxpc3QgZnJvbSB0aGUgYXJyYXkgZW50cmllcyBpbiBhcnJheVtdLlxuXG5cbiAgICBtaW5pbXVtID0gbnVsbDsgLy8gbG9vcCBub2RlcyBpbiBhcnJheVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheVNpemU7IGkrKykge1xuICAgICAgLy8gZ2V0IGN1cnJlbnQgbm9kZVxuICAgICAgeSA9IGFycmF5W2ldO1xuXG4gICAgICBpZiAoIXkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIGNoZWNrIGlmIHdlIGhhdmUgYSBsaW5rZWQgbGlzdFxuXG5cbiAgICAgIGlmIChtaW5pbXVtKSB7XG4gICAgICAgIC8vIEZpcnN0IHJlbW92ZSBub2RlIGZyb20gcm9vdCBsaXN0LlxuICAgICAgICB5LmxlZnQucmlnaHQgPSB5LnJpZ2h0O1xuICAgICAgICB5LnJpZ2h0LmxlZnQgPSB5LmxlZnQ7IC8vIG5vdyBhZGQgdG8gcm9vdCBsaXN0LCBhZ2Fpbi5cblxuICAgICAgICB5LmxlZnQgPSBtaW5pbXVtO1xuICAgICAgICB5LnJpZ2h0ID0gbWluaW11bS5yaWdodDtcbiAgICAgICAgbWluaW11bS5yaWdodCA9IHk7XG4gICAgICAgIHkucmlnaHQubGVmdCA9IHk7IC8vIGNoZWNrIGlmIHRoaXMgaXMgYSBuZXcgbWluLlxuXG4gICAgICAgIGlmIChzbWFsbGVyKHkua2V5LCBtaW5pbXVtLmtleSkpIHtcbiAgICAgICAgICBtaW5pbXVtID0geTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWluaW11bSA9IHk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1pbmltdW07XG4gIH1cblxuICByZXR1cm4gRmlib25hY2NpSGVhcDtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUZpYm9uYWNjaUhlYXBDbGFzcyA9IGNyZWF0ZUZpYm9uYWNjaUhlYXBDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzcyA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnSW1tdXRhYmxlRGVuc2VNYXRyaXgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnc21hbGxlcicsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZUltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgc21hbGxlciA9IF9yZWYuc21hbGxlcixcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcblxuICBmdW5jdGlvbiBJbW11dGFibGVEZW5zZU1hdHJpeChkYXRhLCBkYXRhdHlwZSkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBJbW11dGFibGVEZW5zZU1hdHJpeCkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGF0eXBlICYmICEoMCwgX2lzLmlzU3RyaW5nKShkYXRhdHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkYXRhdHlwZTogJyArIGRhdGF0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF9pcy5pc01hdHJpeCkoZGF0YSkgfHwgKDAsIF9pcy5pc0FycmF5KShkYXRhKSkge1xuICAgICAgLy8gdXNlIERlbnNlTWF0cml4IGltcGxlbWVudGF0aW9uXG4gICAgICB2YXIgbWF0cml4ID0gbmV3IERlbnNlTWF0cml4KGRhdGEsIGRhdGF0eXBlKTsgLy8gaW50ZXJuYWwgc3RydWN0dXJlc1xuXG4gICAgICB0aGlzLl9kYXRhID0gbWF0cml4Ll9kYXRhO1xuICAgICAgdGhpcy5fc2l6ZSA9IG1hdHJpeC5fc2l6ZTtcbiAgICAgIHRoaXMuX2RhdGF0eXBlID0gbWF0cml4Ll9kYXRhdHlwZTtcbiAgICAgIHRoaXMuX21pbiA9IG51bGw7XG4gICAgICB0aGlzLl9tYXggPSBudWxsO1xuICAgIH0gZWxzZSBpZiAoZGF0YSAmJiAoMCwgX2lzLmlzQXJyYXkpKGRhdGEuZGF0YSkgJiYgKDAsIF9pcy5pc0FycmF5KShkYXRhLnNpemUpKSB7XG4gICAgICAvLyBpbml0aWFsaXplIGZpZWxkcyBmcm9tIEpTT04gcmVwcmVzZW50YXRpb25cbiAgICAgIHRoaXMuX2RhdGEgPSBkYXRhLmRhdGE7XG4gICAgICB0aGlzLl9zaXplID0gZGF0YS5zaXplO1xuICAgICAgdGhpcy5fZGF0YXR5cGUgPSBkYXRhLmRhdGF0eXBlO1xuICAgICAgdGhpcy5fbWluID0gdHlwZW9mIGRhdGEubWluICE9PSAndW5kZWZpbmVkJyA/IGRhdGEubWluIDogbnVsbDtcbiAgICAgIHRoaXMuX21heCA9IHR5cGVvZiBkYXRhLm1heCAhPT0gJ3VuZGVmaW5lZCcgPyBkYXRhLm1heCA6IG51bGw7XG4gICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAvLyB1bnN1cHBvcnRlZCB0eXBlXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbnN1cHBvcnRlZCB0eXBlIG9mIGRhdGEgKCcgKyAoMCwgX2lzLnR5cGVPZikoZGF0YSkgKyAnKScpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBub3RoaW5nIHByb3ZpZGVkXG4gICAgICB0aGlzLl9kYXRhID0gW107XG4gICAgICB0aGlzLl9zaXplID0gWzBdO1xuICAgICAgdGhpcy5fZGF0YXR5cGUgPSBkYXRhdHlwZTtcbiAgICAgIHRoaXMuX21pbiA9IG51bGw7XG4gICAgICB0aGlzLl9tYXggPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIEltbXV0YWJsZURlbnNlTWF0cml4LnByb3RvdHlwZSA9IG5ldyBEZW5zZU1hdHJpeCgpO1xuICAvKipcbiAgICogQXR0YWNoIHR5cGUgaW5mb3JtYXRpb25cbiAgICovXG5cbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXgucHJvdG90eXBlLnR5cGUgPSAnSW1tdXRhYmxlRGVuc2VNYXRyaXgnO1xuICBJbW11dGFibGVEZW5zZU1hdHJpeC5wcm90b3R5cGUuaXNJbW11dGFibGVEZW5zZU1hdHJpeCA9IHRydWU7XG4gIC8qKlxuICAgKiBHZXQgYSBzdWJzZXQgb2YgdGhlIG1hdHJpeCwgb3IgcmVwbGFjZSBhIHN1YnNldCBvZiB0aGUgbWF0cml4LlxuICAgKlxuICAgKiBVc2FnZTpcbiAgICogICAgIGNvbnN0IHN1YnNldCA9IG1hdHJpeC5zdWJzZXQoaW5kZXgpICAgICAgICAgICAgICAgLy8gcmV0cmlldmUgc3Vic2V0XG4gICAqICAgICBjb25zdCB2YWx1ZSA9IG1hdHJpeC5zdWJzZXQoaW5kZXgsIHJlcGxhY2VtZW50KSAgIC8vIHJlcGxhY2Ugc3Vic2V0XG4gICAqXG4gICAqIEBwYXJhbSB7SW5kZXh9IGluZGV4XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBJbW11dGFibGVEZW5zZU1hdHJpeCB8ICp9IFtyZXBsYWNlbWVudF1cbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlPTBdICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLiBJZiBub3QgcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBtYXRyaXggZWxlbWVudHMgd2lsbCBiZSBmaWxsZWQgd2l0aCB6ZXJvcy5cbiAgICovXG5cbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXgucHJvdG90eXBlLnN1YnNldCA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgICAgY2FzZSAxOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gdXNlIGJhc2UgaW1wbGVtZW50YXRpb25cbiAgICAgICAgICB2YXIgbSA9IERlbnNlTWF0cml4LnByb3RvdHlwZS5zdWJzZXQuY2FsbCh0aGlzLCBpbmRleCk7IC8vIGNoZWNrIHJlc3VsdCBpcyBhIG1hdHJpeFxuXG4gICAgICAgICAgaWYgKCgwLCBfaXMuaXNNYXRyaXgpKG0pKSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gaW1tdXRhYmxlIG1hdHJpeFxuICAgICAgICAgICAgcmV0dXJuIG5ldyBJbW11dGFibGVEZW5zZU1hdHJpeCh7XG4gICAgICAgICAgICAgIGRhdGE6IG0uX2RhdGEsXG4gICAgICAgICAgICAgIHNpemU6IG0uX3NpemUsXG4gICAgICAgICAgICAgIGRhdGF0eXBlOiBtLl9kYXRhdHlwZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIG07XG4gICAgICAgIH1cbiAgICAgIC8vIGludGVudGlvbmFsIGZhbGwgdGhyb3VnaFxuXG4gICAgICBjYXNlIDI6XG4gICAgICBjYXNlIDM6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBzZXQgc3Vic2V0IG9uIGFuIEltbXV0YWJsZSBNYXRyaXggaW5zdGFuY2UnKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdXcm9uZyBudW1iZXIgb2YgYXJndW1lbnRzJyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogUmVwbGFjZSBhIHNpbmdsZSBlbGVtZW50IGluIHRoZSBtYXRyaXguXG4gICAqIEBwYXJhbSB7TnVtYmVyW119IGluZGV4ICAgWmVyby1iYXNlZCBpbmRleFxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gICAgICAgIERlZmF1bHQgdmFsdWUsIGZpbGxlZCBpbiBvbiBuZXcgZW50cmllcyB3aGVuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXRyaXggaXMgcmVzaXplZC4gSWYgbm90IHByb3ZpZGVkLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgbWF0cml4IGVsZW1lbnRzIHdpbGwgYmUgbGVmdCB1bmRlZmluZWQuXG4gICAqIEByZXR1cm4ge0ltbXV0YWJsZURlbnNlTWF0cml4fSBzZWxmXG4gICAqL1xuXG5cbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXgucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2Ugc2V0IG9uIGFuIEltbXV0YWJsZSBNYXRyaXggaW5zdGFuY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIFJlc2l6ZSB0aGUgbWF0cml4IHRvIHRoZSBnaXZlbiBzaXplLiBSZXR1cm5zIGEgY29weSBvZiB0aGUgbWF0cml4IHdoZW5cbiAgICogYGNvcHk9dHJ1ZWAsIG90aGVyd2lzZSByZXR1cm4gdGhlIG1hdHJpeCBpdHNlbGYgKHJlc2l6ZSBpbiBwbGFjZSkuXG4gICAqXG4gICAqIEBwYXJhbSB7TnVtYmVyW119IHNpemUgICAgICAgICAgIFRoZSBuZXcgc2l6ZSB0aGUgbWF0cml4IHNob3VsZCBoYXZlLlxuICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWU9MF0gICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vdCBwcm92aWRlZCwgdGhlIG1hdHJpeCBlbGVtZW50cyB3aWxsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIGZpbGxlZCB3aXRoIHplcm9zLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjb3B5XSAgICAgICAgICBSZXR1cm4gYSByZXNpemVkIGNvcHkgb2YgdGhlIG1hdHJpeFxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICBUaGUgcmVzaXplZCBtYXRyaXhcbiAgICovXG5cblxuICBJbW11dGFibGVEZW5zZU1hdHJpeC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSByZXNpemUgb24gYW4gSW1tdXRhYmxlIE1hdHJpeCBpbnN0YW5jZScpO1xuICB9O1xuICAvKipcbiAgICogRGlzYWxsb3dzIHJlc2hhcGluZyBpbiBmYXZvciBvZiBpbW11dGFiaWxpdHkuXG4gICAqXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBPcGVyYXRpb24gbm90IGFsbG93ZWRcbiAgICovXG5cblxuICBJbW11dGFibGVEZW5zZU1hdHJpeC5wcm90b3R5cGUucmVzaGFwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2UgcmVzaGFwZSBvbiBhbiBJbW11dGFibGUgTWF0cml4IGluc3RhbmNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGUgbWF0cml4XG4gICAqIEByZXR1cm4ge0ltbXV0YWJsZURlbnNlTWF0cml4fSBjbG9uZVxuICAgKi9cblxuXG4gIEltbXV0YWJsZURlbnNlTWF0cml4LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IEltbXV0YWJsZURlbnNlTWF0cml4KHtcbiAgICAgIGRhdGE6ICgwLCBfb2JqZWN0LmNsb25lKSh0aGlzLl9kYXRhKSxcbiAgICAgIHNpemU6ICgwLCBfb2JqZWN0LmNsb25lKSh0aGlzLl9zaXplKSxcbiAgICAgIGRhdGF0eXBlOiB0aGlzLl9kYXRhdHlwZVxuICAgIH0pO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4XG4gICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXgucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnSW1tdXRhYmxlRGVuc2VNYXRyaXgnLFxuICAgICAgZGF0YTogdGhpcy5fZGF0YSxcbiAgICAgIHNpemU6IHRoaXMuX3NpemUsXG4gICAgICBkYXRhdHlwZTogdGhpcy5fZGF0YXR5cGVcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogR2VuZXJhdGUgYSBtYXRyaXggZnJvbSBhIEpTT04gb2JqZWN0XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uICBBbiBvYmplY3Qgc3RydWN0dXJlZCBsaWtlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICBge1wibWF0aGpzXCI6IFwiSW1tdXRhYmxlRGVuc2VNYXRyaXhcIiwgZGF0YTogW10sIHNpemU6IFtdfWAsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICB3aGVyZSBtYXRoanMgaXMgb3B0aW9uYWxcbiAgICogQHJldHVybnMge0ltbXV0YWJsZURlbnNlTWF0cml4fVxuICAgKi9cblxuXG4gIEltbXV0YWJsZURlbnNlTWF0cml4LmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IEltbXV0YWJsZURlbnNlTWF0cml4KGpzb24pO1xuICB9O1xuICAvKipcbiAgICogU3dhcCByb3dzIGkgYW5kIGogaW4gTWF0cml4LlxuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0gaSAgICAgICBNYXRyaXggcm93IGluZGV4IDFcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGogICAgICAgTWF0cml4IHJvdyBpbmRleCAyXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgIFRoZSBtYXRyaXggcmVmZXJlbmNlXG4gICAqL1xuXG5cbiAgSW1tdXRhYmxlRGVuc2VNYXRyaXgucHJvdG90eXBlLnN3YXBSb3dzID0gZnVuY3Rpb24gKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBzd2FwUm93cyBvbiBhbiBJbW11dGFibGUgTWF0cml4IGluc3RhbmNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIG1pbmltdW0gdmFsdWUgaW4gdGhlIHNldFxuICAgKiBAcmV0dXJuIHtOdW1iZXIgfCB1bmRlZmluZWR9IG1pblxuICAgKi9cblxuXG4gIEltbXV0YWJsZURlbnNlTWF0cml4LnByb3RvdHlwZS5taW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gY2hlY2sgbWluIGhhcyBiZWVuIGNhbGN1bGF0ZWQgYmVmb3JlXG4gICAgaWYgKHRoaXMuX21pbiA9PT0gbnVsbCkge1xuICAgICAgLy8gbWluaW11bVxuICAgICAgdmFyIG0gPSBudWxsOyAvLyBjb21wdXRlIG1pblxuXG4gICAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgaWYgKG0gPT09IG51bGwgfHwgc21hbGxlcih2LCBtKSkge1xuICAgICAgICAgIG0gPSB2O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX21pbiA9IG0gIT09IG51bGwgPyBtIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9taW47XG4gIH07XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIG1heGltdW0gdmFsdWUgaW4gdGhlIHNldFxuICAgKiBAcmV0dXJuIHtOdW1iZXIgfCB1bmRlZmluZWR9IG1heFxuICAgKi9cblxuXG4gIEltbXV0YWJsZURlbnNlTWF0cml4LnByb3RvdHlwZS5tYXggPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gY2hlY2sgbWF4IGhhcyBiZWVuIGNhbGN1bGF0ZWQgYmVmb3JlXG4gICAgaWYgKHRoaXMuX21heCA9PT0gbnVsbCkge1xuICAgICAgLy8gbWF4aW11bVxuICAgICAgdmFyIG0gPSBudWxsOyAvLyBjb21wdXRlIG1heFxuXG4gICAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKHYpIHtcbiAgICAgICAgaWYgKG0gPT09IG51bGwgfHwgc21hbGxlcihtLCB2KSkge1xuICAgICAgICAgIG0gPSB2O1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX21heCA9IG0gIT09IG51bGwgPyBtIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9tYXg7XG4gIH07XG5cbiAgcmV0dXJuIEltbXV0YWJsZURlbnNlTWF0cml4O1xufSwge1xuICBpc0NsYXNzOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSW1tdXRhYmxlRGVuc2VNYXRyaXhDbGFzcyA9IGNyZWF0ZUltbXV0YWJsZURlbnNlTWF0cml4Q2xhc3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZU1hdHJpeENsYXNzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnTWF0cml4JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbXTtcbnZhciBjcmVhdGVNYXRyaXhDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvciBNYXRyaXhcbiAgICpcbiAgICogQSBNYXRyaXggaXMgYSB3cmFwcGVyIGFyb3VuZCBhbiBBcnJheS4gQSBtYXRyaXggY2FuIGhvbGQgYSBtdWx0aSBkaW1lbnNpb25hbFxuICAgKiBhcnJheS4gQSBtYXRyaXggY2FuIGJlIGNvbnN0cnVjdGVkIGFzOlxuICAgKlxuICAgKiAgICAgbGV0IG1hdHJpeCA9IG1hdGgubWF0cml4KGRhdGEpXG4gICAqXG4gICAqIE1hdHJpeCBjb250YWlucyB0aGUgZnVuY3Rpb25zIHRvIHJlc2l6ZSwgZ2V0IGFuZCBzZXQgdmFsdWVzLCBnZXQgdGhlIHNpemUsXG4gICAqIGNsb25lIHRoZSBtYXRyaXggYW5kIHRvIGNvbnZlcnQgdGhlIG1hdHJpeCB0byBhIHZlY3RvciwgYXJyYXksIG9yIHNjYWxhci5cbiAgICogRnVydGhlcm1vcmUsIG9uZSBjYW4gaXRlcmF0ZSBvdmVyIHRoZSBtYXRyaXggdXNpbmcgbWFwIGFuZCBmb3JFYWNoLlxuICAgKiBUaGUgaW50ZXJuYWwgQXJyYXkgb2YgdGhlIE1hdHJpeCBjYW4gYmUgYWNjZXNzZWQgdXNpbmcgdGhlIGZ1bmN0aW9uIHZhbHVlT2YuXG4gICAqXG4gICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAqXG4gICAqICAgICBsZXQgbWF0cml4ID0gbWF0aC5tYXRyaXgoW1sxLCAyXSwgWzMsIDRdXSlcbiAgICogICAgIG1hdGl4LnNpemUoKSAgICAgICAgICAgICAgLy8gWzIsIDJdXG4gICAqICAgICBtYXRyaXgucmVzaXplKFszLCAyXSwgNSlcbiAgICogICAgIG1hdHJpeC52YWx1ZU9mKCkgICAgICAgICAgLy8gW1sxLCAyXSwgWzMsIDRdLCBbNSwgNV1dXG4gICAqICAgICBtYXRyaXguc3Vic2V0KFsxLDJdKSAgICAgICAvLyAzIChpbmRleGVzIGFyZSB6ZXJvLWJhc2VkKVxuICAgKlxuICAgKi9cbiAgZnVuY3Rpb24gTWF0cml4KCkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBNYXRyaXgpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQXR0YWNoIHR5cGUgaW5mb3JtYXRpb25cbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLnR5cGUgPSAnTWF0cml4JztcbiAgTWF0cml4LnByb3RvdHlwZS5pc01hdHJpeCA9IHRydWU7XG4gIC8qKlxuICAgKiBHZXQgdGhlIE1hdHJpeCBzdG9yYWdlIGNvbnN0cnVjdG9yIGZvciB0aGUgZ2l2ZW4gZm9ybWF0LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm9ybWF0ICAgICAgIFRoZSBNYXRyaXggc3RvcmFnZSBmb3JtYXQuXG4gICAqXG4gICAqIEByZXR1cm4ge0Z1bmN0aW9ufSAgICAgICAgICAgVGhlIE1hdHJpeCBzdG9yYWdlIGNvbnN0cnVjdG9yLlxuICAgKi9cblxuICBNYXRyaXguc3RvcmFnZSA9IGZ1bmN0aW9uIChmb3JtYXQpIHtcbiAgICAvLyBUT0RPOiBkZXByZWNhdGVkIHNpbmNlIHY2LjAuMC4gQ2xlYW4gdXAgc29tZSBkYXlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ01hdHJpeC5zdG9yYWdlIGlzIGRlcHJlY2F0ZWQgc2luY2UgdjYuMC4wLiAnICsgJ1VzZSB0aGUgZmFjdG9yeSBmdW5jdGlvbiBtYXRoLm1hdHJpeCBpbnN0ZWFkLicpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHRoZSBzdG9yYWdlIGZvcm1hdCB1c2VkIGJ5IHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3QgZm9ybWF0ID0gbWF0cml4LnN0b3JhZ2UoKSAgIC8vIHJldHJpZXZlIHN0b3JhZ2UgZm9ybWF0XG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgIFRoZSBzdG9yYWdlIGZvcm1hdC5cbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLnN0b3JhZ2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHN0b3JhZ2Ugb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIGRhdGF0eXBlIG9mIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgbWF0cml4LlxuICAgKlxuICAgKiBVc2FnZTpcbiAgICogICAgIGNvbnN0IGZvcm1hdCA9IG1hdHJpeC5kYXRhdHlwZSgpICAgIC8vIHJldHJpZXZlIG1hdHJpeCBkYXRhdHlwZVxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9ICAgICAgICAgICBUaGUgZGF0YXR5cGUuXG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS5kYXRhdHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE1hdHJpeCBpbXBsZW1lbnRhdGlvbnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2UgZGF0YXR5cGUgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgTWF0cml4IFdpdGggdGhlIHR5cGUgb2YgdGhlIGN1cnJlbnQgbWF0cml4IGluc3RhbmNlXG4gICAqIEBwYXJhbSB7QXJyYXkgfCBPYmplY3R9IGRhdGFcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkYXRhdHlwZV1cbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLmNyZWF0ZSA9IGZ1bmN0aW9uIChkYXRhLCBkYXRhdHlwZSkge1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBjcmVhdGUgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBzdWJzZXQgb2YgdGhlIG1hdHJpeCwgb3IgcmVwbGFjZSBhIHN1YnNldCBvZiB0aGUgbWF0cml4LlxuICAgKlxuICAgKiBVc2FnZTpcbiAgICogICAgIGNvbnN0IHN1YnNldCA9IG1hdHJpeC5zdWJzZXQoaW5kZXgpICAgICAgICAgICAgICAgLy8gcmV0cmlldmUgc3Vic2V0XG4gICAqICAgICBjb25zdCB2YWx1ZSA9IG1hdHJpeC5zdWJzZXQoaW5kZXgsIHJlcGxhY2VtZW50KSAgIC8vIHJlcGxhY2Ugc3Vic2V0XG4gICAqXG4gICAqIEBwYXJhbSB7SW5kZXh9IGluZGV4XG4gICAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXggfCAqfSBbcmVwbGFjZW1lbnRdXG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZT0wXSAgICAgIERlZmF1bHQgdmFsdWUsIGZpbGxlZCBpbiBvbiBuZXcgZW50cmllcyB3aGVuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXRyaXggaXMgcmVzaXplZC4gSWYgbm90IHByb3ZpZGVkLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgbWF0cml4IGVsZW1lbnRzIHdpbGwgYmUgZmlsbGVkIHdpdGggemVyb3MuXG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS5zdWJzZXQgPSBmdW5jdGlvbiAoaW5kZXgsIHJlcGxhY2VtZW50LCBkZWZhdWx0VmFsdWUpIHtcbiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE1hdHJpeCBpbXBsZW1lbnRhdGlvbnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2Ugc3Vic2V0IG9uIGEgTWF0cml4IGludGVyZmFjZScpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgc2luZ2xlIGVsZW1lbnQgZnJvbSB0aGUgbWF0cml4LlxuICAgKiBAcGFyYW0ge251bWJlcltdfSBpbmRleCAgIFplcm8tYmFzZWQgaW5kZXhcbiAgICogQHJldHVybiB7Kn0gdmFsdWVcbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBnZXQgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBSZXBsYWNlIGEgc2luZ2xlIGVsZW1lbnQgaW4gdGhlIG1hdHJpeC5cbiAgICogQHBhcmFtIHtudW1iZXJbXX0gaW5kZXggICBaZXJvLWJhc2VkIGluZGV4XG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXSAgICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLiBJZiBub3QgcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBtYXRyaXggZWxlbWVudHMgd2lsbCBiZSBsZWZ0IHVuZGVmaW5lZC5cbiAgICogQHJldHVybiB7TWF0cml4fSBzZWxmXG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoaW5kZXgsIHZhbHVlLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE1hdHJpeCBpbXBsZW1lbnRhdGlvbnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2Ugc2V0IG9uIGEgTWF0cml4IGludGVyZmFjZScpO1xuICB9O1xuICAvKipcbiAgICogUmVzaXplIHRoZSBtYXRyaXggdG8gdGhlIGdpdmVuIHNpemUuIFJldHVybnMgYSBjb3B5IG9mIHRoZSBtYXRyaXggd2hlblxuICAgKiBgY29weT10cnVlYCwgb3RoZXJ3aXNlIHJldHVybiB0aGUgbWF0cml4IGl0c2VsZiAocmVzaXplIGluIHBsYWNlKS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZSAgICAgICAgICAgVGhlIG5ldyBzaXplIHRoZSBtYXRyaXggc2hvdWxkIGhhdmUuXG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZT0wXSAgICAgIERlZmF1bHQgdmFsdWUsIGZpbGxlZCBpbiBvbiBuZXcgZW50cmllcy5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm90IHByb3ZpZGVkLCB0aGUgbWF0cml4IGVsZW1lbnRzIHdpbGxcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgZmlsbGVkIHdpdGggemVyb3MuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvcHldICAgICAgICAgIFJldHVybiBhIHJlc2l6ZWQgY29weSBvZiB0aGUgbWF0cml4XG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgIFRoZSByZXNpemVkIG1hdHJpeFxuICAgKi9cblxuXG4gIE1hdHJpeC5wcm90b3R5cGUucmVzaXplID0gZnVuY3Rpb24gKHNpemUsIGRlZmF1bHRWYWx1ZSkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSByZXNpemUgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBSZXNoYXBlIHRoZSBtYXRyaXggdG8gdGhlIGdpdmVuIHNpemUuIFJldHVybnMgYSBjb3B5IG9mIHRoZSBtYXRyaXggd2hlblxuICAgKiBgY29weT10cnVlYCwgb3RoZXJ3aXNlIHJldHVybiB0aGUgbWF0cml4IGl0c2VsZiAocmVzaGFwZSBpbiBwbGFjZSkuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyW119IHNpemUgICAgICAgICAgIFRoZSBuZXcgc2l6ZSB0aGUgbWF0cml4IHNob3VsZCBoYXZlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjb3B5XSAgICAgICAgICBSZXR1cm4gYSByZXNoYXBlZCBjb3B5IG9mIHRoZSBtYXRyaXhcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgVGhlIHJlc2hhcGVkIG1hdHJpeFxuICAgKi9cblxuXG4gIE1hdHJpeC5wcm90b3R5cGUucmVzaGFwZSA9IGZ1bmN0aW9uIChzaXplLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE1hdHJpeCBpbXBsZW1lbnRhdGlvbnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2UgcmVzaGFwZSBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGNsb25lIG9mIHRoZSBtYXRyaXhcbiAgICogQHJldHVybiB7TWF0cml4fSBjbG9uZVxuICAgKi9cblxuXG4gIE1hdHJpeC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBlYWNoIG9mIHRoZSBNYXRyaXggaW1wbGVtZW50YXRpb25zXG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIGNsb25lIG9uIGEgTWF0cml4IGludGVyZmFjZScpO1xuICB9O1xuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHNpemUgb2YgdGhlIG1hdHJpeC5cbiAgICogQHJldHVybnMge251bWJlcltdfSBzaXplXG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBzaXplIG9uIGEgTWF0cml4IGludGVyZmFjZScpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG1hdHJpeCB3aXRoIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleGVjdXRlZCBvblxuICAgKiBlYWNoIGVudHJ5IG9mIHRoZSBtYXRyaXguXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCwgdGhlIGluZGV4XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGVsZW1lbnQsIGFuZCB0aGUgTWF0cml4IGJlaW5nIHRyYXZlcnNlZC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbc2tpcFplcm9zXSBJbnZva2UgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIG5vbi16ZXJvIHZhbHVlcyBvbmx5LlxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9IG1hdHJpeFxuICAgKi9cblxuXG4gIE1hdHJpeC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBza2lwWmVyb3MpIHtcbiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE1hdHJpeCBpbXBsZW1lbnRhdGlvbnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2UgbWFwIG9uIGEgTWF0cml4IGludGVyZmFjZScpO1xuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIG9uIGVhY2ggZW50cnkgb2YgdGhlIG1hdHJpeC5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50LCB0aGUgaW5kZXhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZWxlbWVudCwgYW5kIHRoZSBNYXRyaXggYmVpbmcgdHJhdmVyc2VkLlxuICAgKi9cblxuXG4gIE1hdHJpeC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBmb3JFYWNoIG9uIGEgTWF0cml4IGludGVyZmFjZScpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGFuIEFycmF5IHdpdGggYSBjb3B5IG9mIHRoZSBkYXRhIG9mIHRoZSBNYXRyaXhcbiAgICogQHJldHVybnMge0FycmF5fSBhcnJheVxuICAgKi9cblxuXG4gIE1hdHJpeC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IGVhY2ggb2YgdGhlIE1hdHJpeCBpbXBsZW1lbnRhdGlvbnNcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2UgdG9BcnJheSBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUgcHJpbWl0aXZlIHZhbHVlIG9mIHRoZSBNYXRyaXg6IGEgbXVsdGlkaW1lbnNpb25hbCBhcnJheVxuICAgKiBAcmV0dXJucyB7QXJyYXl9IGFycmF5XG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS52YWx1ZU9mID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSB2YWx1ZU9mIG9uIGEgTWF0cml4IGludGVyZmFjZScpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBtYXRyaXgsIHdpdGggb3B0aW9uYWwgZm9ybWF0dGluZyBvcHRpb25zLlxuICAgKiBAcGFyYW0ge09iamVjdCB8IG51bWJlciB8IEZ1bmN0aW9ufSBbb3B0aW9uc10gIEZvcm1hdHRpbmcgb3B0aW9ucy4gU2VlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliL3V0aWxzL251bWJlcjpmb3JtYXQgZm9yIGFcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiBvZiB0aGUgYXZhaWxhYmxlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5cbiAgICogQHJldHVybnMge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgTWF0cml4LnByb3RvdHlwZS5mb3JtYXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBmb3JtYXQgb24gYSBNYXRyaXggaW50ZXJmYWNlJyk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBNYXRyaXgucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIG11c3QgYmUgaW1wbGVtZW50ZWQgYnkgZWFjaCBvZiB0aGUgTWF0cml4IGltcGxlbWVudGF0aW9uc1xuICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSB0b1N0cmluZyBvbiBhIE1hdHJpeCBpbnRlcmZhY2UnKTtcbiAgfTtcblxuICByZXR1cm4gTWF0cml4O1xufSwge1xuICBpc0NsYXNzOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlTWF0cml4Q2xhc3MgPSBjcmVhdGVNYXRyaXhDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlSW5kZXhDbGFzcyA9IHZvaWQgMDtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9pc1wiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvb2JqZWN0XCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdJbmRleCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWydJbW11dGFibGVEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZUluZGV4Q2xhc3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgSW1tdXRhYmxlRGVuc2VNYXRyaXggPSBfcmVmLkltbXV0YWJsZURlbnNlTWF0cml4O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gaW5kZXguIEFuIEluZGV4IGNhbiBzdG9yZSByYW5nZXMgYW5kIHNldHMgZm9yIG11bHRpcGxlIGRpbWVuc2lvbnMuXG4gICAqIE1hdHJpeC5nZXQsIE1hdHJpeC5zZXQsIGFuZCBtYXRoLnN1YnNldCBhY2NlcHQgYW4gSW5kZXggYXMgaW5wdXQuXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3QgaW5kZXggPSBuZXcgSW5kZXgocmFuZ2UxLCByYW5nZTIsIG1hdHJpeDEsIGFycmF5MSwgLi4uKVxuICAgKlxuICAgKiBXaGVyZSBlYWNoIHBhcmFtZXRlciBjYW4gYmUgYW55IG9mOlxuICAgKiAgICAgQSBudW1iZXJcbiAgICogICAgIEEgc3RyaW5nIChjb250YWluaW5nIGEgbmFtZSBvZiBhbiBvYmplY3QgcHJvcGVydHkpXG4gICAqICAgICBBbiBpbnN0YW5jZSBvZiBSYW5nZVxuICAgKiAgICAgQW4gQXJyYXkgd2l0aCB0aGUgU2V0IHZhbHVlc1xuICAgKiAgICAgQSBNYXRyaXggd2l0aCB0aGUgU2V0IHZhbHVlc1xuICAgKlxuICAgKiBUaGUgcGFyYW1ldGVycyBzdGFydCwgZW5kLCBhbmQgc3RlcCBtdXN0IGJlIGludGVnZXIgbnVtYmVycy5cbiAgICpcbiAgICogQGNsYXNzIEluZGV4XG4gICAqIEBDb25zdHJ1Y3RvciBJbmRleFxuICAgKiBAcGFyYW0gey4uLip9IHJhbmdlc1xuICAgKi9cbiAgZnVuY3Rpb24gSW5kZXgocmFuZ2VzKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEluZGV4KSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICB0aGlzLl9kaW1lbnNpb25zID0gW107XG4gICAgdGhpcy5faXNTY2FsYXIgPSB0cnVlO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGlmICgoMCwgX2lzLmlzUmFuZ2UpKGFyZykpIHtcbiAgICAgICAgdGhpcy5fZGltZW5zaW9ucy5wdXNoKGFyZyk7XG5cbiAgICAgICAgdGhpcy5faXNTY2FsYXIgPSBmYWxzZTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhcmcpIHx8ICgwLCBfaXMuaXNNYXRyaXgpKGFyZykpIHtcbiAgICAgICAgLy8gY3JlYXRlIG1hdHJpeFxuICAgICAgICB2YXIgbSA9IF9jcmVhdGVJbW11dGFibGVNYXRyaXgoYXJnLnZhbHVlT2YoKSk7XG5cbiAgICAgICAgdGhpcy5fZGltZW5zaW9ucy5wdXNoKG0pOyAvLyBzaXplXG5cblxuICAgICAgICB2YXIgc2l6ZSA9IG0uc2l6ZSgpOyAvLyBzY2FsYXJcblxuICAgICAgICBpZiAoc2l6ZS5sZW5ndGggIT09IDEgfHwgc2l6ZVswXSAhPT0gMSkge1xuICAgICAgICAgIHRoaXMuX2lzU2NhbGFyID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhpcy5fZGltZW5zaW9ucy5wdXNoKF9jcmVhdGVJbW11dGFibGVNYXRyaXgoW2FyZ10pKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gb2JqZWN0IHByb3BlcnR5IChhcmd1bWVudHMuY291bnQgc2hvdWxkIGJlIDEpXG4gICAgICAgIHRoaXMuX2RpbWVuc2lvbnMucHVzaChhcmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRGltZW5zaW9uIG11c3QgYmUgYW4gQXJyYXksIE1hdHJpeCwgbnVtYmVyLCBzdHJpbmcsIG9yIFJhbmdlJyk7XG4gICAgICB9IC8vIFRPRE86IGltcGxlbWVudCBzdXBwb3J0IGZvciB3aWxkY2FyZCAnKidcblxuICAgIH1cbiAgfVxuICAvKipcbiAgICogQXR0YWNoIHR5cGUgaW5mb3JtYXRpb25cbiAgICovXG5cblxuICBJbmRleC5wcm90b3R5cGUudHlwZSA9ICdJbmRleCc7XG4gIEluZGV4LnByb3RvdHlwZS5pc0luZGV4ID0gdHJ1ZTtcblxuICBmdW5jdGlvbiBfY3JlYXRlSW1tdXRhYmxlTWF0cml4KGFyZykge1xuICAgIC8vIGxvb3AgYXJyYXkgZWxlbWVudHNcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IGFyZy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGlmICh0eXBlb2YgYXJnW2ldICE9PSAnbnVtYmVyJyB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShhcmdbaV0pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0luZGV4IHBhcmFtZXRlcnMgbXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VyIG51bWJlcnMnKTtcbiAgICAgIH1cbiAgICB9IC8vIGNyZWF0ZSBtYXRyaXhcblxuXG4gICAgcmV0dXJuIG5ldyBJbW11dGFibGVEZW5zZU1hdHJpeChhcmcpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBjbG9uZSBvZiB0aGUgaW5kZXhcbiAgICogQG1lbWJlcm9mIEluZGV4XG4gICAqIEByZXR1cm4ge0luZGV4fSBjbG9uZVxuICAgKi9cblxuXG4gIEluZGV4LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaW5kZXggPSBuZXcgSW5kZXgoKTtcbiAgICBpbmRleC5fZGltZW5zaW9ucyA9ICgwLCBfb2JqZWN0LmNsb25lKSh0aGlzLl9kaW1lbnNpb25zKTtcbiAgICBpbmRleC5faXNTY2FsYXIgPSB0aGlzLl9pc1NjYWxhcjtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gaW5kZXggZnJvbSBhbiBhcnJheSB3aXRoIHJhbmdlcy9udW1iZXJzXG4gICAqIEBtZW1iZXJvZiBJbmRleFxuICAgKiBAcGFyYW0ge0FycmF5LjxBcnJheSB8IG51bWJlcj59IHJhbmdlc1xuICAgKiBAcmV0dXJuIHtJbmRleH0gaW5kZXhcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBJbmRleC5jcmVhdGUgPSBmdW5jdGlvbiAocmFuZ2VzKSB7XG4gICAgdmFyIGluZGV4ID0gbmV3IEluZGV4KCk7XG4gICAgSW5kZXguYXBwbHkoaW5kZXgsIHJhbmdlcyk7XG4gICAgcmV0dXJuIGluZGV4O1xuICB9O1xuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHNpemUgb2YgdGhlIGluZGV4LCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGZvciBlYWNoIGRpbWVuc2lvbi5cbiAgICogQG1lbWJlcm9mIEluZGV4XG4gICAqIEByZXR1cm5zIHtudW1iZXJbXX0gc2l6ZVxuICAgKi9cblxuXG4gIEluZGV4LnByb3RvdHlwZS5zaXplID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzaXplID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMCwgaWkgPSB0aGlzLl9kaW1lbnNpb25zLmxlbmd0aDsgaSA8IGlpOyBpKyspIHtcbiAgICAgIHZhciBkID0gdGhpcy5fZGltZW5zaW9uc1tpXTtcbiAgICAgIHNpemVbaV0gPSB0eXBlb2YgZCA9PT0gJ3N0cmluZycgPyAxIDogZC5zaXplKClbMF07XG4gICAgfVxuXG4gICAgcmV0dXJuIHNpemU7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIG1heGltdW0gdmFsdWUgZm9yIGVhY2ggb2YgdGhlIGluZGV4ZXMgcmFuZ2VzLlxuICAgKiBAbWVtYmVyb2YgSW5kZXhcbiAgICogQHJldHVybnMge251bWJlcltdfSBtYXhcbiAgICovXG5cblxuICBJbmRleC5wcm90b3R5cGUubWF4ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHRoaXMuX2RpbWVuc2lvbnMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIHJhbmdlID0gdGhpcy5fZGltZW5zaW9uc1tpXTtcbiAgICAgIHZhbHVlc1tpXSA9IHR5cGVvZiByYW5nZSA9PT0gJ3N0cmluZycgPyByYW5nZSA6IHJhbmdlLm1heCgpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIG1pbmltdW0gdmFsdWUgZm9yIGVhY2ggb2YgdGhlIGluZGV4ZXMgcmFuZ2VzLlxuICAgKiBAbWVtYmVyb2YgSW5kZXhcbiAgICogQHJldHVybnMge251bWJlcltdfSBtaW5cbiAgICovXG5cblxuICBJbmRleC5wcm90b3R5cGUubWluID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciB2YWx1ZXMgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHRoaXMuX2RpbWVuc2lvbnMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIHJhbmdlID0gdGhpcy5fZGltZW5zaW9uc1tpXTtcbiAgICAgIHZhbHVlc1tpXSA9IHR5cGVvZiByYW5nZSA9PT0gJ3N0cmluZycgPyByYW5nZSA6IHJhbmdlLm1pbigpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH07XG4gIC8qKlxuICAgKiBMb29wIG92ZXIgZWFjaCBvZiB0aGUgcmFuZ2VzIG9mIHRoZSBpbmRleFxuICAgKiBAbWVtYmVyb2YgSW5kZXhcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICBDYWxsZWQgZm9yIGVhY2ggcmFuZ2Ugd2l0aCBhIFJhbmdlIGFzIGZpcnN0XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnQsIHRoZSBkaW1lbnNpb24gYXMgc2Vjb25kLCBhbmQgdGhlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXggb2JqZWN0IGFzIHRoaXJkLlxuICAgKi9cblxuXG4gIEluZGV4LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIGlpID0gdGhpcy5fZGltZW5zaW9ucy5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBjYWxsYmFjayh0aGlzLl9kaW1lbnNpb25zW2ldLCBpLCB0aGlzKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgZGltZW5zaW9uIGZvciB0aGUgZ2l2ZW4gaW5kZXhcbiAgICogQG1lbWJlcm9mIEluZGV4XG4gICAqIEBwYXJhbSB7TnVtYmVyfSBkaW0gICAgICAgICAgICAgICAgICBOdW1iZXIgb2YgdGhlIGRpbWVuc2lvblxuICAgKiBAcmV0dXJucyB7UmFuZ2UgfCBudWxsfSByYW5nZVxuICAgKi9cblxuXG4gIEluZGV4LnByb3RvdHlwZS5kaW1lbnNpb24gPSBmdW5jdGlvbiAoZGltKSB7XG4gICAgcmV0dXJuIHRoaXMuX2RpbWVuc2lvbnNbZGltXSB8fCBudWxsO1xuICB9O1xuICAvKipcbiAgICogVGVzdCB3aGV0aGVyIHRoaXMgaW5kZXggY29udGFpbnMgYW4gb2JqZWN0IHByb3BlcnR5XG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdGhlIGluZGV4IGlzIGFuIG9iamVjdCBwcm9wZXJ0eVxuICAgKi9cblxuXG4gIEluZGV4LnByb3RvdHlwZS5pc09iamVjdFByb3BlcnR5ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9kaW1lbnNpb25zLmxlbmd0aCA9PT0gMSAmJiB0eXBlb2YgdGhpcy5fZGltZW5zaW9uc1swXSA9PT0gJ3N0cmluZyc7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBvYmplY3QgcHJvcGVydHkgbmFtZSB3aGVuIHRoZSBJbmRleCBob2xkcyBhIHNpbmdsZSBvYmplY3QgcHJvcGVydHksXG4gICAqIGVsc2UgcmV0dXJucyBudWxsXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCBudWxsfVxuICAgKi9cblxuXG4gIEluZGV4LnByb3RvdHlwZS5nZXRPYmplY3RQcm9wZXJ0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5pc09iamVjdFByb3BlcnR5KCkgPyB0aGlzLl9kaW1lbnNpb25zWzBdIDogbnVsbDtcbiAgfTtcbiAgLyoqXG4gICAqIFRlc3Qgd2hldGhlciB0aGlzIGluZGV4IGNvbnRhaW5zIG9ubHkgYSBzaW5nbGUgdmFsdWUuXG4gICAqXG4gICAqIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiB0aGUgaW5kZXggaXMgY3JlYXRlZCB3aXRoIG9ubHkgc2NhbGFyIHZhbHVlcyBhcyByYW5nZXMsXG4gICAqIG5vdCBmb3IgcmFuZ2VzIHJlc29sdmluZyBpbnRvIGEgc2luZ2xlIHZhbHVlLlxuICAgKiBAbWVtYmVyb2YgSW5kZXhcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gaXNTY2FsYXJcbiAgICovXG5cblxuICBJbmRleC5wcm90b3R5cGUuaXNTY2FsYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU2NhbGFyO1xuICB9O1xuICAvKipcbiAgICogRXhwYW5kIHRoZSBJbmRleCBpbnRvIGFuIGFycmF5LlxuICAgKiBGb3IgZXhhbXBsZSBuZXcgSW5kZXgoWzAsM10sIFsyLDddKSByZXR1cm5zIFtbMCwxLDJdLCBbMiwzLDQsNSw2XV1cbiAgICogQG1lbWJlcm9mIEluZGV4XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXlcbiAgICovXG5cblxuICBJbmRleC5wcm90b3R5cGUudG9BcnJheSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHRoaXMuX2RpbWVuc2lvbnMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIGRpbWVuc2lvbiA9IHRoaXMuX2RpbWVuc2lvbnNbaV07XG4gICAgICBhcnJheS5wdXNoKHR5cGVvZiBkaW1lbnNpb24gPT09ICdzdHJpbmcnID8gZGltZW5zaW9uIDogZGltZW5zaW9uLnRvQXJyYXkoKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xuICB9O1xuICAvKipcbiAgICogR2V0IHRoZSBwcmltaXRpdmUgdmFsdWUgb2YgdGhlIEluZGV4LCBhIHR3byBkaW1lbnNpb25hbCBhcnJheS5cbiAgICogRXF1aXZhbGVudCB0byBJbmRleC50b0FycmF5KCkuXG4gICAqIEBtZW1iZXJvZiBJbmRleFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IGFycmF5XG4gICAqL1xuXG5cbiAgSW5kZXgucHJvdG90eXBlLnZhbHVlT2YgPSBJbmRleC5wcm90b3R5cGUudG9BcnJheTtcbiAgLyoqXG4gICAqIEdldCB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBpbmRleCwgZm9yIGV4YW1wbGUgJ1syOjZdJyBvciAnWzA6MjoxMCwgNDo3LCBbMSwyLDNdXSdcbiAgICogQG1lbWJlcm9mIEluZGV4XG4gICAqIEByZXR1cm5zIHtTdHJpbmd9IHN0clxuICAgKi9cblxuICBJbmRleC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHN0cmluZ3MgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBpaSA9IHRoaXMuX2RpbWVuc2lvbnMubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgdmFyIGRpbWVuc2lvbiA9IHRoaXMuX2RpbWVuc2lvbnNbaV07XG5cbiAgICAgIGlmICh0eXBlb2YgZGltZW5zaW9uID09PSAnc3RyaW5nJykge1xuICAgICAgICBzdHJpbmdzLnB1c2goSlNPTi5zdHJpbmdpZnkoZGltZW5zaW9uKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHJpbmdzLnB1c2goZGltZW5zaW9uLnRvU3RyaW5nKCkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiAnWycgKyBzdHJpbmdzLmpvaW4oJywgJykgKyAnXSc7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBJbmRleFxuICAgKiBAbWVtYmVyb2YgSW5kZXhcbiAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBhIEpTT04gb2JqZWN0IHN0cnVjdHVyZWQgYXM6XG4gICAqICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJJbmRleFwiLCBcInJhbmdlc1wiOiBbe1wibWF0aGpzXCI6IFwiUmFuZ2VcIiwgc3RhcnQ6IDAsIGVuZDogMTAsIHN0ZXA6MX0sIC4uLl19YFxuICAgKi9cblxuXG4gIEluZGV4LnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hdGhqczogJ0luZGV4JyxcbiAgICAgIGRpbWVuc2lvbnM6IHRoaXMuX2RpbWVuc2lvbnNcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYW4gSW5kZXggZnJvbSBhIEpTT04gb2JqZWN0XG4gICAqIEBtZW1iZXJvZiBJbmRleFxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiBBIEpTT04gb2JqZWN0IHN0cnVjdHVyZWQgYXM6XG4gICAqICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIkluZGV4XCIsIFwiZGltZW5zaW9uc1wiOiBbe1wibWF0aGpzXCI6IFwiUmFuZ2VcIiwgc3RhcnQ6IDAsIGVuZDogMTAsIHN0ZXA6MX0sIC4uLl19YFxuICAgKiBAcmV0dXJuIHtJbmRleH1cbiAgICovXG5cblxuICBJbmRleC5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIEluZGV4LmNyZWF0ZShqc29uLmRpbWVuc2lvbnMpO1xuICB9O1xuXG4gIHJldHVybiBJbmRleDtcbn0sIHtcbiAgaXNDbGFzczogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUluZGV4Q2xhc3MgPSBjcmVhdGVJbmRleENsYXNzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSYW5nZUNsYXNzID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdSYW5nZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gW107XG52YXIgY3JlYXRlUmFuZ2VDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uICgpIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIHJhbmdlLiBBIHJhbmdlIGhhcyBhIHN0YXJ0LCBzdGVwLCBhbmQgZW5kLCBhbmQgY29udGFpbnMgZnVuY3Rpb25zXG4gICAqIHRvIGl0ZXJhdGUgb3ZlciB0aGUgcmFuZ2UuXG4gICAqXG4gICAqIEEgcmFuZ2UgY2FuIGJlIGNvbnN0cnVjdGVkIGFzOlxuICAgKlxuICAgKiAgICAgY29uc3QgcmFuZ2UgPSBuZXcgUmFuZ2Uoc3RhcnQsIGVuZClcbiAgICogICAgIGNvbnN0IHJhbmdlID0gbmV3IFJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXApXG4gICAqXG4gICAqIFRvIGdldCB0aGUgcmVzdWx0IG9mIHRoZSByYW5nZTpcbiAgICogICAgIHJhbmdlLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICogICAgICAgICBjb25zb2xlLmxvZyh4KVxuICAgKiAgICAgfSlcbiAgICogICAgIHJhbmdlLm1hcChmdW5jdGlvbiAoeCkge1xuICAgKiAgICAgICAgIHJldHVybiBtYXRoLnNpbih4KVxuICAgKiAgICAgfSlcbiAgICogICAgIHJhbmdlLnRvQXJyYXkoKVxuICAgKlxuICAgKiBFeGFtcGxlIHVzYWdlOlxuICAgKlxuICAgKiAgICAgY29uc3QgYyA9IG5ldyBSYW5nZSgyLCA2KSAgICAgICAvLyAyOjE6NVxuICAgKiAgICAgYy50b0FycmF5KCkgICAgICAgICAgICAgICAgICAgICAvLyBbMiwgMywgNCwgNV1cbiAgICogICAgIGNvbnN0IGQgPSBuZXcgUmFuZ2UoMiwgLTMsIC0xKSAgLy8gMjotMTotMlxuICAgKiAgICAgZC50b0FycmF5KCkgICAgICAgICAgICAgICAgICAgICAvLyBbMiwgMSwgMCwgLTEsIC0yXVxuICAgKlxuICAgKiBAY2xhc3MgUmFuZ2VcbiAgICogQGNvbnN0cnVjdG9yIFJhbmdlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCAgaW5jbHVkZWQgbG93ZXIgYm91bmRcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCAgICBleGNsdWRlZCB1cHBlciBib3VuZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW3N0ZXBdIHN0ZXAgc2l6ZSwgZGVmYXVsdCB2YWx1ZSBpcyAxXG4gICAqL1xuICBmdW5jdGlvbiBSYW5nZShzdGFydCwgZW5kLCBzdGVwKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJhbmdlKSkge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdDb25zdHJ1Y3RvciBtdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSBuZXcgb3BlcmF0b3InKTtcbiAgICB9XG5cbiAgICB2YXIgaGFzU3RhcnQgPSBzdGFydCAhPT0gbnVsbCAmJiBzdGFydCAhPT0gdW5kZWZpbmVkO1xuICAgIHZhciBoYXNFbmQgPSBlbmQgIT09IG51bGwgJiYgZW5kICE9PSB1bmRlZmluZWQ7XG4gICAgdmFyIGhhc1N0ZXAgPSBzdGVwICE9PSBudWxsICYmIHN0ZXAgIT09IHVuZGVmaW5lZDtcblxuICAgIGlmIChoYXNTdGFydCkge1xuICAgICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHN0YXJ0KSkge1xuICAgICAgICBzdGFydCA9IHN0YXJ0LnRvTnVtYmVyKCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdGFydCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGFyYW1ldGVyIHN0YXJ0IG11c3QgYmUgYSBudW1iZXInKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaGFzRW5kKSB7XG4gICAgICBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikoZW5kKSkge1xuICAgICAgICBlbmQgPSBlbmQudG9OdW1iZXIoKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGFyYW1ldGVyIGVuZCBtdXN0IGJlIGEgbnVtYmVyJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGhhc1N0ZXApIHtcbiAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShzdGVwKSkge1xuICAgICAgICBzdGVwID0gc3RlcC50b051bWJlcigpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3RlcCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGFyYW1ldGVyIHN0ZXAgbXVzdCBiZSBhIG51bWJlcicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc3RhcnQgPSBoYXNTdGFydCA/IHBhcnNlRmxvYXQoc3RhcnQpIDogMDtcbiAgICB0aGlzLmVuZCA9IGhhc0VuZCA/IHBhcnNlRmxvYXQoZW5kKSA6IDA7XG4gICAgdGhpcy5zdGVwID0gaGFzU3RlcCA/IHBhcnNlRmxvYXQoc3RlcCkgOiAxO1xuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIFJhbmdlLnByb3RvdHlwZS50eXBlID0gJ1JhbmdlJztcbiAgUmFuZ2UucHJvdG90eXBlLmlzUmFuZ2UgPSB0cnVlO1xuICAvKipcbiAgICogUGFyc2UgYSBzdHJpbmcgaW50byBhIHJhbmdlLFxuICAgKiBUaGUgc3RyaW5nIGNvbnRhaW5zIHRoZSBzdGFydCwgb3B0aW9uYWwgc3RlcCwgYW5kIGVuZCwgc2VwYXJhdGVkIGJ5IGEgY29sb24uXG4gICAqIElmIHRoZSBzdHJpbmcgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIHJhbmdlLCBudWxsIGlzIHJldHVybmVkLlxuICAgKiBGb3IgZXhhbXBsZSBzdHI9JzA6MjoxMScuXG4gICAqIEBtZW1iZXJvZiBSYW5nZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqIEByZXR1cm4ge1JhbmdlIHwgbnVsbH0gcmFuZ2VcbiAgICovXG5cbiAgUmFuZ2UucGFyc2UgPSBmdW5jdGlvbiAoc3RyKSB7XG4gICAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgYXJncyA9IHN0ci5zcGxpdCgnOicpO1xuICAgIHZhciBudW1zID0gYXJncy5tYXAoZnVuY3Rpb24gKGFyZykge1xuICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoYXJnKTtcbiAgICB9KTtcbiAgICB2YXIgaW52YWxpZCA9IG51bXMuc29tZShmdW5jdGlvbiAobnVtKSB7XG4gICAgICByZXR1cm4gaXNOYU4obnVtKTtcbiAgICB9KTtcblxuICAgIGlmIChpbnZhbGlkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKG51bXMubGVuZ3RoKSB7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHJldHVybiBuZXcgUmFuZ2UobnVtc1swXSwgbnVtc1sxXSk7XG5cbiAgICAgIGNhc2UgMzpcbiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZShudW1zWzBdLCBudW1zWzJdLCBudW1zWzFdKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhlIHJhbmdlXG4gICAqIEByZXR1cm4ge1JhbmdlfSBjbG9uZVxuICAgKi9cblxuXG4gIFJhbmdlLnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gbmV3IFJhbmdlKHRoaXMuc3RhcnQsIHRoaXMuZW5kLCB0aGlzLnN0ZXApO1xuICB9O1xuICAvKipcbiAgICogUmV0cmlldmUgdGhlIHNpemUgb2YgdGhlIHJhbmdlLlxuICAgKiBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgb25lIG51bWJlciwgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgcmFuZ2UuXG4gICAqIEBtZW1iZXJvZiBSYW5nZVxuICAgKiBAcmV0dXJucyB7bnVtYmVyW119IHNpemVcbiAgICovXG5cblxuICBSYW5nZS5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGVuID0gMDtcbiAgICB2YXIgc3RhcnQgPSB0aGlzLnN0YXJ0O1xuICAgIHZhciBzdGVwID0gdGhpcy5zdGVwO1xuICAgIHZhciBlbmQgPSB0aGlzLmVuZDtcbiAgICB2YXIgZGlmZiA9IGVuZCAtIHN0YXJ0O1xuXG4gICAgaWYgKCgwLCBfbnVtYmVyLnNpZ24pKHN0ZXApID09PSAoMCwgX251bWJlci5zaWduKShkaWZmKSkge1xuICAgICAgbGVuID0gTWF0aC5jZWlsKGRpZmYgLyBzdGVwKTtcbiAgICB9IGVsc2UgaWYgKGRpZmYgPT09IDApIHtcbiAgICAgIGxlbiA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGlzTmFOKGxlbikpIHtcbiAgICAgIGxlbiA9IDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtsZW5dO1xuICB9O1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBtaW5pbXVtIHZhbHVlIGluIHRoZSByYW5nZVxuICAgKiBAbWVtYmVyb2YgUmFuZ2VcbiAgICogQHJldHVybiB7bnVtYmVyIHwgdW5kZWZpbmVkfSBtaW5cbiAgICovXG5cblxuICBSYW5nZS5wcm90b3R5cGUubWluID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzaXplID0gdGhpcy5zaXplKClbMF07XG5cbiAgICBpZiAoc2l6ZSA+IDApIHtcbiAgICAgIGlmICh0aGlzLnN0ZXAgPiAwKSB7XG4gICAgICAgIC8vIHBvc2l0aXZlIHN0ZXBcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBuZWdhdGl2ZSBzdGVwXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0ICsgKHNpemUgLSAxKSAqIHRoaXMuc3RlcDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIG1heGltdW0gdmFsdWUgaW4gdGhlIHJhbmdlXG4gICAqIEBtZW1iZXJvZiBSYW5nZVxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCB1bmRlZmluZWR9IG1heFxuICAgKi9cblxuXG4gIFJhbmdlLnByb3RvdHlwZS5tYXggPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNpemUgPSB0aGlzLnNpemUoKVswXTtcblxuICAgIGlmIChzaXplID4gMCkge1xuICAgICAgaWYgKHRoaXMuc3RlcCA+IDApIHtcbiAgICAgICAgLy8gcG9zaXRpdmUgc3RlcFxuICAgICAgICByZXR1cm4gdGhpcy5zdGFydCArIChzaXplIC0gMSkgKiB0aGlzLnN0ZXA7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBuZWdhdGl2ZSBzdGVwXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0O1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBjYWxsYmFjayBmdW5jdGlvbiBmb3IgZWFjaCB2YWx1ZSBpbiB0aGUgcmFuZ2UuXG4gICAqIEBtZW1iZXJvZiBSYW5nZVxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayBtZXRob2QgaXMgaW52b2tlZCB3aXRoIHRocmVlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyczogdGhlIHZhbHVlIG9mIHRoZSBlbGVtZW50LCB0aGUgaW5kZXhcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgZWxlbWVudCwgYW5kIHRoZSBSYW5nZSBiZWluZyB0cmF2ZXJzZWQuXG4gICAqL1xuXG5cbiAgUmFuZ2UucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICB2YXIgeCA9IHRoaXMuc3RhcnQ7XG4gICAgdmFyIHN0ZXAgPSB0aGlzLnN0ZXA7XG4gICAgdmFyIGVuZCA9IHRoaXMuZW5kO1xuICAgIHZhciBpID0gMDtcblxuICAgIGlmIChzdGVwID4gMCkge1xuICAgICAgd2hpbGUgKHggPCBlbmQpIHtcbiAgICAgICAgY2FsbGJhY2soeCwgW2ldLCB0aGlzKTtcbiAgICAgICAgeCArPSBzdGVwO1xuICAgICAgICBpKys7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdGVwIDwgMCkge1xuICAgICAgd2hpbGUgKHggPiBlbmQpIHtcbiAgICAgICAgY2FsbGJhY2soeCwgW2ldLCB0aGlzKTtcbiAgICAgICAgeCArPSBzdGVwO1xuICAgICAgICBpKys7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIHZhbHVlIGluIHRoZSBSYW5nZSwgYW5kIHJldHVybiB0aGVcbiAgICogcmVzdWx0cyBhcyBhbiBhcnJheVxuICAgKiBAbWVtYmVyb2YgUmFuZ2VcbiAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgICBUaGUgY2FsbGJhY2sgbWV0aG9kIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCwgdGhlIGluZGV4XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGVsZW1lbnQsIGFuZCB0aGUgTWF0cml4IGJlaW5nIHRyYXZlcnNlZC5cbiAgICogQHJldHVybnMge0FycmF5fSBhcnJheVxuICAgKi9cblxuXG4gIFJhbmdlLnByb3RvdHlwZS5tYXAgPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgb2JqKSB7XG4gICAgICBhcnJheVtpbmRleFswXV0gPSBjYWxsYmFjayh2YWx1ZSwgaW5kZXgsIG9iaik7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFycmF5O1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGFuIEFycmF5IHdpdGggYSBjb3B5IG9mIHRoZSBSYW5nZXMgZGF0YVxuICAgKiBAbWVtYmVyb2YgUmFuZ2VcbiAgICogQHJldHVybnMge0FycmF5fSBhcnJheVxuICAgKi9cblxuXG4gIFJhbmdlLnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4KSB7XG4gICAgICBhcnJheVtpbmRleFswXV0gPSB2YWx1ZTtcbiAgICB9KTtcbiAgICByZXR1cm4gYXJyYXk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIHByaW1pdGl2ZSB2YWx1ZSBvZiB0aGUgUmFuZ2UsIGEgb25lIGRpbWVuc2lvbmFsIGFycmF5XG4gICAqIEBtZW1iZXJvZiBSYW5nZVxuICAgKiBAcmV0dXJucyB7QXJyYXl9IGFycmF5XG4gICAqL1xuXG5cbiAgUmFuZ2UucHJvdG90eXBlLnZhbHVlT2YgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gVE9ETzogaW1wbGVtZW50IGEgY2FjaGluZyBtZWNoYW5pc20gZm9yIHJhbmdlLnZhbHVlT2YoKVxuICAgIHJldHVybiB0aGlzLnRvQXJyYXkoKTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgcmFuZ2UsIHdpdGggb3B0aW9uYWwgZm9ybWF0dGluZyBvcHRpb25zLlxuICAgKiBPdXRwdXQgaXMgZm9ybWF0dGVkIGFzICdzdGFydDpzdGVwOmVuZCcsIGZvciBleGFtcGxlICcyOjYnIG9yICcwOjAuMjoxMSdcbiAgICogQG1lbWJlcm9mIFJhbmdlXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgbnVtYmVyIHwgZnVuY3Rpb259IFtvcHRpb25zXSAgRm9ybWF0dGluZyBvcHRpb25zLiBTZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWIvdXRpbHMvbnVtYmVyOmZvcm1hdCBmb3IgYVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBzdHJcbiAgICovXG5cblxuICBSYW5nZS5wcm90b3R5cGUuZm9ybWF0ID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YXIgc3RyID0gKDAsIF9udW1iZXIuZm9ybWF0KSh0aGlzLnN0YXJ0LCBvcHRpb25zKTtcblxuICAgIGlmICh0aGlzLnN0ZXAgIT09IDEpIHtcbiAgICAgIHN0ciArPSAnOicgKyAoMCwgX251bWJlci5mb3JtYXQpKHRoaXMuc3RlcCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgc3RyICs9ICc6JyArICgwLCBfbnVtYmVyLmZvcm1hdCkodGhpcy5lbmQsIG9wdGlvbnMpO1xuICAgIHJldHVybiBzdHI7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHJhbmdlLlxuICAgKiBAbWVtYmVyb2YgUmFuZ2VcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cblxuICBSYW5nZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0KCk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByYW5nZVxuICAgKiBAbWVtYmVyb2YgUmFuZ2VcbiAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBhIEpTT04gb2JqZWN0IHN0cnVjdHVyZWQgYXM6XG4gICAqICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJSYW5nZVwiLCBcInN0YXJ0XCI6IDIsIFwiZW5kXCI6IDQsIFwic3RlcFwiOiAxfWBcbiAgICovXG5cblxuICBSYW5nZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdSYW5nZScsXG4gICAgICBzdGFydDogdGhpcy5zdGFydCxcbiAgICAgIGVuZDogdGhpcy5lbmQsXG4gICAgICBzdGVwOiB0aGlzLnN0ZXBcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYSBSYW5nZSBmcm9tIGEgSlNPTiBvYmplY3RcbiAgICogQG1lbWJlcm9mIFJhbmdlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBqc29uIEEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczpcbiAgICogICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlJhbmdlXCIsIFwic3RhcnRcIjogMiwgXCJlbmRcIjogNCwgXCJzdGVwXCI6IDF9YFxuICAgKiBAcmV0dXJuIHtSYW5nZX1cbiAgICovXG5cblxuICBSYW5nZS5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIG5ldyBSYW5nZShqc29uLnN0YXJ0LCBqc29uLmVuZCwganNvbi5zdGVwKTtcbiAgfTtcblxuICByZXR1cm4gUmFuZ2U7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSYW5nZUNsYXNzID0gY3JlYXRlUmFuZ2VDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3BhQ2xhc3MgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdTcGEnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsnYWRkU2NhbGFyJywgJ2VxdWFsU2NhbGFyJywgJ0ZpYm9uYWNjaUhlYXAnXTtcbnZhciBjcmVhdGVTcGFDbGFzcyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBhZGRTY2FsYXIgPSBfcmVmLmFkZFNjYWxhcixcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcixcbiAgICAgIEZpYm9uYWNjaUhlYXAgPSBfcmVmLkZpYm9uYWNjaUhlYXA7XG5cbiAgLyoqXG4gICAqIEFuIG9yZGVyZWQgU3BhcnNlIEFjY3VtdWxhdG9yIGlzIGEgcmVwcmVzZW50YXRpb24gZm9yIGEgc3BhcnNlIHZlY3RvciB0aGF0IGluY2x1ZGVzIGEgZGVuc2UgYXJyYXlcbiAgICogb2YgdGhlIHZlY3RvciBlbGVtZW50cyBhbmQgYW4gb3JkZXJlZCBsaXN0IG9mIG5vbi16ZXJvIGVsZW1lbnRzLlxuICAgKi9cbiAgZnVuY3Rpb24gU3BhKCkge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBTcGEpKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0NvbnN0cnVjdG9yIG11c3QgYmUgY2FsbGVkIHdpdGggdGhlIG5ldyBvcGVyYXRvcicpO1xuICAgIH0gLy8gYWxsb2NhdGUgdmVjdG9yLCBUT0RPIHVzZSB0eXBlZCBhcnJheXNcblxuXG4gICAgdGhpcy5fdmFsdWVzID0gW107XG4gICAgdGhpcy5faGVhcCA9IG5ldyBGaWJvbmFjY2lIZWFwKCk7XG4gIH1cbiAgLyoqXG4gICAqIEF0dGFjaCB0eXBlIGluZm9ybWF0aW9uXG4gICAqL1xuXG5cbiAgU3BhLnByb3RvdHlwZS50eXBlID0gJ1NwYSc7XG4gIFNwYS5wcm90b3R5cGUuaXNTcGEgPSB0cnVlO1xuICAvKipcbiAgICogU2V0IHRoZSB2YWx1ZSBmb3IgaW5kZXggaS5cbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IGkgICAgICAgICAgICAgICAgICAgICAgIFRoZSBpbmRleFxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IENvbXBsZXh9ICAgVGhlIHZhbHVlIGF0IGluZGV4IGlcbiAgICovXG5cbiAgU3BhLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAoaSwgdikge1xuICAgIC8vIGNoZWNrIHdlIGhhdmUgYSB2YWx1ZSBAIGlcbiAgICBpZiAoIXRoaXMuX3ZhbHVlc1tpXSkge1xuICAgICAgLy8gaW5zZXJ0IGluIGhlYXBcbiAgICAgIHZhciBub2RlID0gdGhpcy5faGVhcC5pbnNlcnQoaSwgdik7IC8vIHNldCB0aGUgdmFsdWUgQCBpXG5cblxuICAgICAgdGhpcy5fdmFsdWVzW2ldID0gbm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdXBkYXRlIHRoZSB2YWx1ZSBAIGlcbiAgICAgIHRoaXMuX3ZhbHVlc1tpXS52YWx1ZSA9IHY7XG4gICAgfVxuICB9O1xuXG4gIFNwYS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKGkpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMuX3ZhbHVlc1tpXTtcblxuICAgIGlmIChub2RlKSB7XG4gICAgICByZXR1cm4gbm9kZS52YWx1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfTtcblxuICBTcGEucHJvdG90eXBlLmFjY3VtdWxhdGUgPSBmdW5jdGlvbiAoaSwgdikge1xuICAgIC8vIG5vZGUgQCBpXG4gICAgdmFyIG5vZGUgPSB0aGlzLl92YWx1ZXNbaV07XG5cbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIC8vIGluc2VydCBpbiBoZWFwXG4gICAgICBub2RlID0gdGhpcy5faGVhcC5pbnNlcnQoaSwgdik7IC8vIGluaXRpYWxpemUgdmFsdWVcblxuICAgICAgdGhpcy5fdmFsdWVzW2ldID0gbm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gYWNjdW11bGF0ZSB2YWx1ZVxuICAgICAgbm9kZS52YWx1ZSA9IGFkZFNjYWxhcihub2RlLnZhbHVlLCB2KTtcbiAgICB9XG4gIH07XG5cbiAgU3BhLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24gKGZyb20sIHRvLCBjYWxsYmFjaykge1xuICAgIC8vIHJlZmVyZW5jZXNcbiAgICB2YXIgaGVhcCA9IHRoaXMuX2hlYXA7XG4gICAgdmFyIHZhbHVlcyA9IHRoaXMuX3ZhbHVlczsgLy8gbm9kZXNcblxuICAgIHZhciBub2RlcyA9IFtdOyAvLyBub2RlIHdpdGggbWluaW11bSBrZXksIHNhdmUgaXRcblxuICAgIHZhciBub2RlID0gaGVhcC5leHRyYWN0TWluaW11bSgpO1xuXG4gICAgaWYgKG5vZGUpIHtcbiAgICAgIG5vZGVzLnB1c2gobm9kZSk7XG4gICAgfSAvLyBleHRyYWN0IG5vZGVzIGZyb20gaGVhcCAob3JkZXJlZClcblxuXG4gICAgd2hpbGUgKG5vZGUgJiYgbm9kZS5rZXkgPD0gdG8pIHtcbiAgICAgIC8vIGNoZWNrIGl0IGlzIGluIHJhbmdlXG4gICAgICBpZiAobm9kZS5rZXkgPj0gZnJvbSkge1xuICAgICAgICAvLyBjaGVjayB2YWx1ZSBpcyBub3QgemVyb1xuICAgICAgICBpZiAoIWVxdWFsU2NhbGFyKG5vZGUudmFsdWUsIDApKSB7XG4gICAgICAgICAgLy8gaW52b2tlIGNhbGxiYWNrXG4gICAgICAgICAgY2FsbGJhY2sobm9kZS5rZXksIG5vZGUudmFsdWUsIHRoaXMpO1xuICAgICAgICB9XG4gICAgICB9IC8vIGV4dHJhY3QgbmV4dCBub2RlLCBzYXZlIGl0XG5cblxuICAgICAgbm9kZSA9IGhlYXAuZXh0cmFjdE1pbmltdW0oKTtcblxuICAgICAgaWYgKG5vZGUpIHtcbiAgICAgICAgbm9kZXMucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9IC8vIHJlaW5zZXJ0IGFsbCBub2RlcyBpbiBoZWFwXG5cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIGN1cnJlbnQgbm9kZVxuICAgICAgdmFyIG4gPSBub2Rlc1tpXTsgLy8gaW5zZXJ0IG5vZGUgaW4gaGVhcFxuXG4gICAgICBub2RlID0gaGVhcC5pbnNlcnQobi5rZXksIG4udmFsdWUpOyAvLyB1cGRhdGUgdmFsdWVzXG5cbiAgICAgIHZhbHVlc1tub2RlLmtleV0gPSBub2RlO1xuICAgIH1cbiAgfTtcblxuICBTcGEucHJvdG90eXBlLnN3YXAgPSBmdW5jdGlvbiAoaSwgaikge1xuICAgIC8vIG5vZGUgQCBpIGFuZCBqXG4gICAgdmFyIG5vZGVpID0gdGhpcy5fdmFsdWVzW2ldO1xuICAgIHZhciBub2RlaiA9IHRoaXMuX3ZhbHVlc1tqXTsgLy8gY2hlY2sgd2UgbmVlZCB0byBpbnNlcnQgaW5kZWNlc1xuXG4gICAgaWYgKCFub2RlaSAmJiBub2Rlaikge1xuICAgICAgLy8gaW5zZXJ0IGluIGhlYXBcbiAgICAgIG5vZGVpID0gdGhpcy5faGVhcC5pbnNlcnQoaSwgbm9kZWoudmFsdWUpOyAvLyByZW1vdmUgZnJvbSBoZWFwXG5cbiAgICAgIHRoaXMuX2hlYXAucmVtb3ZlKG5vZGVqKTsgLy8gc2V0IHZhbHVlc1xuXG5cbiAgICAgIHRoaXMuX3ZhbHVlc1tpXSA9IG5vZGVpO1xuICAgICAgdGhpcy5fdmFsdWVzW2pdID0gdW5kZWZpbmVkO1xuICAgIH0gZWxzZSBpZiAobm9kZWkgJiYgIW5vZGVqKSB7XG4gICAgICAvLyBpbnNlcnQgaW4gaGVhcFxuICAgICAgbm9kZWogPSB0aGlzLl9oZWFwLmluc2VydChqLCBub2RlaS52YWx1ZSk7IC8vIHJlbW92ZSBmcm9tIGhlYXBcblxuICAgICAgdGhpcy5faGVhcC5yZW1vdmUobm9kZWkpOyAvLyBzZXQgdmFsdWVzXG5cblxuICAgICAgdGhpcy5fdmFsdWVzW2pdID0gbm9kZWo7XG4gICAgICB0aGlzLl92YWx1ZXNbaV0gPSB1bmRlZmluZWQ7XG4gICAgfSBlbHNlIGlmIChub2RlaSAmJiBub2Rlaikge1xuICAgICAgLy8gc3dhcCB2YWx1ZXNcbiAgICAgIHZhciB2ID0gbm9kZWkudmFsdWU7XG4gICAgICBub2RlaS52YWx1ZSA9IG5vZGVqLnZhbHVlO1xuICAgICAgbm9kZWoudmFsdWUgPSB2O1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gU3BhO1xufSwge1xuICBpc0NsYXNzOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3BhQ2xhc3MgPSBjcmVhdGVTcGFDbGFzczsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlU3BhcnNlTWF0cml4Q2xhc3MgPSB2b2lkIDA7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL251bWJlclwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvYXJyYXlcIik7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgbmFtZSA9ICdTcGFyc2VNYXRyaXgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnZXF1YWxTY2FsYXInLCAnTWF0cml4J107XG52YXIgY3JlYXRlU3BhcnNlTWF0cml4Q2xhc3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyLFxuICAgICAgTWF0cml4ID0gX3JlZi5NYXRyaXg7XG5cbiAgLyoqXG4gICAqIFNwYXJzZSBNYXRyaXggaW1wbGVtZW50YXRpb24uIFRoaXMgdHlwZSBpbXBsZW1lbnRzIGEgQ29tcHJlc3NlZCBDb2x1bW4gU3RvcmFnZSBmb3JtYXRcbiAgICogZm9yIHNwYXJzZSBtYXRyaWNlcy5cbiAgICogQGNsYXNzIFNwYXJzZU1hdHJpeFxuICAgKi9cbiAgZnVuY3Rpb24gU3BhcnNlTWF0cml4KGRhdGEsIGRhdGF0eXBlKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFNwYXJzZU1hdHJpeCkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGF0eXBlICYmICEoMCwgX2lzLmlzU3RyaW5nKShkYXRhdHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBkYXRhdHlwZTogJyArIGRhdGF0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAoKDAsIF9pcy5pc01hdHJpeCkoZGF0YSkpIHtcbiAgICAgIC8vIGNyZWF0ZSBmcm9tIG1hdHJpeFxuICAgICAgX2NyZWF0ZUZyb21NYXRyaXgodGhpcywgZGF0YSwgZGF0YXR5cGUpO1xuICAgIH0gZWxzZSBpZiAoZGF0YSAmJiAoMCwgX2lzLmlzQXJyYXkpKGRhdGEuaW5kZXgpICYmICgwLCBfaXMuaXNBcnJheSkoZGF0YS5wdHIpICYmICgwLCBfaXMuaXNBcnJheSkoZGF0YS5zaXplKSkge1xuICAgICAgLy8gaW5pdGlhbGl6ZSBmaWVsZHNcbiAgICAgIHRoaXMuX3ZhbHVlcyA9IGRhdGEudmFsdWVzO1xuICAgICAgdGhpcy5faW5kZXggPSBkYXRhLmluZGV4O1xuICAgICAgdGhpcy5fcHRyID0gZGF0YS5wdHI7XG4gICAgICB0aGlzLl9zaXplID0gZGF0YS5zaXplO1xuICAgICAgdGhpcy5fZGF0YXR5cGUgPSBkYXRhdHlwZSB8fCBkYXRhLmRhdGF0eXBlO1xuICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc0FycmF5KShkYXRhKSkge1xuICAgICAgLy8gY3JlYXRlIGZyb20gYXJyYXlcbiAgICAgIF9jcmVhdGVGcm9tQXJyYXkodGhpcywgZGF0YSwgZGF0YXR5cGUpO1xuICAgIH0gZWxzZSBpZiAoZGF0YSkge1xuICAgICAgLy8gdW5zdXBwb3J0ZWQgdHlwZVxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5zdXBwb3J0ZWQgdHlwZSBvZiBkYXRhICgnICsgKDAsIF9pcy50eXBlT2YpKGRhdGEpICsgJyknKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gbm90aGluZyBwcm92aWRlZFxuICAgICAgdGhpcy5fdmFsdWVzID0gW107XG4gICAgICB0aGlzLl9pbmRleCA9IFtdO1xuICAgICAgdGhpcy5fcHRyID0gWzBdO1xuICAgICAgdGhpcy5fc2l6ZSA9IFswLCAwXTtcbiAgICAgIHRoaXMuX2RhdGF0eXBlID0gZGF0YXR5cGU7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gX2NyZWF0ZUZyb21NYXRyaXgobWF0cml4LCBzb3VyY2UsIGRhdGF0eXBlKSB7XG4gICAgLy8gY2hlY2sgbWF0cml4IHR5cGVcbiAgICBpZiAoc291cmNlLnR5cGUgPT09ICdTcGFyc2VNYXRyaXgnKSB7XG4gICAgICAvLyBjbG9uZSBhcnJheXNcbiAgICAgIG1hdHJpeC5fdmFsdWVzID0gc291cmNlLl92YWx1ZXMgPyAoMCwgX29iamVjdC5jbG9uZSkoc291cmNlLl92YWx1ZXMpIDogdW5kZWZpbmVkO1xuICAgICAgbWF0cml4Ll9pbmRleCA9ICgwLCBfb2JqZWN0LmNsb25lKShzb3VyY2UuX2luZGV4KTtcbiAgICAgIG1hdHJpeC5fcHRyID0gKDAsIF9vYmplY3QuY2xvbmUpKHNvdXJjZS5fcHRyKTtcbiAgICAgIG1hdHJpeC5fc2l6ZSA9ICgwLCBfb2JqZWN0LmNsb25lKShzb3VyY2UuX3NpemUpO1xuICAgICAgbWF0cml4Ll9kYXRhdHlwZSA9IGRhdGF0eXBlIHx8IHNvdXJjZS5fZGF0YXR5cGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGJ1aWxkIGZyb20gbWF0cml4IGRhdGFcbiAgICAgIF9jcmVhdGVGcm9tQXJyYXkobWF0cml4LCBzb3VyY2UudmFsdWVPZigpLCBkYXRhdHlwZSB8fCBzb3VyY2UuX2RhdGF0eXBlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBfY3JlYXRlRnJvbUFycmF5KG1hdHJpeCwgZGF0YSwgZGF0YXR5cGUpIHtcbiAgICAvLyBpbml0aWFsaXplIGZpZWxkc1xuICAgIG1hdHJpeC5fdmFsdWVzID0gW107XG4gICAgbWF0cml4Ll9pbmRleCA9IFtdO1xuICAgIG1hdHJpeC5fcHRyID0gW107XG4gICAgbWF0cml4Ll9kYXRhdHlwZSA9IGRhdGF0eXBlOyAvLyBkaXNjb3ZlciByb3dzICYgY29sdW1ucywgZG8gbm90IHVzZSBtYXRoLnNpemUoKSB0byBhdm9pZCBsb29waW5nIGFycmF5IHR3aWNlXG5cbiAgICB2YXIgcm93cyA9IGRhdGEubGVuZ3RoO1xuICAgIHZhciBjb2x1bW5zID0gMDsgLy8gZXF1YWwgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGVxID0gZXF1YWxTY2FsYXI7IC8vIHplcm8gdmFsdWVcblxuICAgIHZhciB6ZXJvID0gMDtcblxuICAgIGlmICgoMCwgX2lzLmlzU3RyaW5nKShkYXRhdHlwZSkpIHtcbiAgICAgIC8vIGZpbmQgc2lnbmF0dXJlIHRoYXQgbWF0Y2hlcyAoZGF0YXR5cGUsIGRhdGF0eXBlKVxuICAgICAgZXEgPSB0eXBlZC5maW5kKGVxdWFsU2NhbGFyLCBbZGF0YXR5cGUsIGRhdGF0eXBlXSkgfHwgZXF1YWxTY2FsYXI7IC8vIGNvbnZlcnQgMCB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICB6ZXJvID0gdHlwZWQuY29udmVydCgwLCBkYXRhdHlwZSk7XG4gICAgfSAvLyBjaGVjayB3ZSBoYXZlIHJvd3MgKGVtcHR5IGFycmF5KVxuXG5cbiAgICBpZiAocm93cyA+IDApIHtcbiAgICAgIC8vIGNvbHVtbiBpbmRleFxuICAgICAgdmFyIGogPSAwO1xuXG4gICAgICBkbyB7XG4gICAgICAgIC8vIHN0b3JlIHBvaW50ZXIgdG8gdmFsdWVzIGluZGV4XG4gICAgICAgIG1hdHJpeC5fcHRyLnB1c2gobWF0cml4Ll9pbmRleC5sZW5ndGgpOyAvLyBsb29wIHJvd3NcblxuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgICAgLy8gY3VycmVudCByb3dcbiAgICAgICAgICB2YXIgcm93ID0gZGF0YVtpXTsgLy8gY2hlY2sgcm93IGlzIGFuIGFycmF5XG5cbiAgICAgICAgICBpZiAoKDAsIF9pcy5pc0FycmF5KShyb3cpKSB7XG4gICAgICAgICAgICAvLyB1cGRhdGUgY29sdW1ucyBpZiBuZWVkZWQgKG9ubHkgb24gZmlyc3QgY29sdW1uKVxuICAgICAgICAgICAgaWYgKGogPT09IDAgJiYgY29sdW1ucyA8IHJvdy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgY29sdW1ucyA9IHJvdy5sZW5ndGg7XG4gICAgICAgICAgICB9IC8vIGNoZWNrIHJvdyBoYXMgY29sdW1uXG5cblxuICAgICAgICAgICAgaWYgKGogPCByb3cubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIC8vIHZhbHVlXG4gICAgICAgICAgICAgIHZhciB2ID0gcm93W2pdOyAvLyBjaGVjayB2YWx1ZSAhPSAwXG5cbiAgICAgICAgICAgICAgaWYgKCFlcSh2LCB6ZXJvKSkge1xuICAgICAgICAgICAgICAgIC8vIHN0b3JlIHZhbHVlXG4gICAgICAgICAgICAgICAgbWF0cml4Ll92YWx1ZXMucHVzaCh2KTsgLy8gaW5kZXhcblxuXG4gICAgICAgICAgICAgICAgbWF0cml4Ll9pbmRleC5wdXNoKGkpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHVwZGF0ZSBjb2x1bW5zIGlmIG5lZWRlZCAob25seSBvbiBmaXJzdCBjb2x1bW4pXG4gICAgICAgICAgICBpZiAoaiA9PT0gMCAmJiBjb2x1bW5zIDwgMSkge1xuICAgICAgICAgICAgICBjb2x1bW5zID0gMTtcbiAgICAgICAgICAgIH0gLy8gY2hlY2sgdmFsdWUgIT0gMCAocm93IGlzIGEgc2NhbGFyKVxuXG5cbiAgICAgICAgICAgIGlmICghZXEocm93LCB6ZXJvKSkge1xuICAgICAgICAgICAgICAvLyBzdG9yZSB2YWx1ZVxuICAgICAgICAgICAgICBtYXRyaXguX3ZhbHVlcy5wdXNoKHJvdyk7IC8vIGluZGV4XG5cblxuICAgICAgICAgICAgICBtYXRyaXguX2luZGV4LnB1c2goaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIGluY3JlbWVudCBpbmRleFxuXG5cbiAgICAgICAgaisrO1xuICAgICAgfSB3aGlsZSAoaiA8IGNvbHVtbnMpO1xuICAgIH0gLy8gc3RvcmUgbnVtYmVyIG9mIHZhbHVlcyBpbiBwdHJcblxuXG4gICAgbWF0cml4Ll9wdHIucHVzaChtYXRyaXguX2luZGV4Lmxlbmd0aCk7IC8vIHNpemVcblxuXG4gICAgbWF0cml4Ll9zaXplID0gW3Jvd3MsIGNvbHVtbnNdO1xuICB9XG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZSA9IG5ldyBNYXRyaXgoKTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBTcGFyc2VNYXRyaXhcbiAgICovXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5jcmVhdGVTcGFyc2VNYXRyaXggPSBmdW5jdGlvbiAoZGF0YSwgZGF0YXR5cGUpIHtcbiAgICByZXR1cm4gbmV3IFNwYXJzZU1hdHJpeChkYXRhLCBkYXRhdHlwZSk7XG4gIH07XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUudHlwZSA9ICdTcGFyc2VNYXRyaXgnO1xuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmlzU3BhcnNlTWF0cml4ID0gdHJ1ZTtcbiAgLyoqXG4gICAqIEdldCB0aGUgbWF0cml4IHR5cGVcbiAgICpcbiAgICogVXNhZ2U6XG4gICAqICAgIGNvbnN0IG1hdHJpeFR5cGUgPSBtYXRyaXguZ2V0RGF0YVR5cGUoKSAgLy8gcmV0cmlldmVzIHRoZSBtYXRyaXggdHlwZVxuICAgKlxuICAgKiBAbWVtYmVyT2YgU3BhcnNlTWF0cml4XG4gICAqIEByZXR1cm4ge3N0cmluZ30gICB0eXBlIGluZm9ybWF0aW9uOyBpZiBtdWx0aXBsZSB0eXBlcyBhcmUgZm91bmQgZnJvbSB0aGUgTWF0cml4LCBpdCB3aWxsIHJldHVybiBcIm1peGVkXCJcbiAgICovXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5nZXREYXRhVHlwZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gKDAsIF9hcnJheS5nZXRBcnJheURhdGFUeXBlKSh0aGlzLl92YWx1ZXMsIF9pcy50eXBlT2YpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHRoZSBzdG9yYWdlIGZvcm1hdCB1c2VkIGJ5IHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFVzYWdlOlxuICAgKiAgICAgY29uc3QgZm9ybWF0ID0gbWF0cml4LnN0b3JhZ2UoKSAgIC8vIHJldHJpZXZlIHN0b3JhZ2UgZm9ybWF0XG4gICAqXG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHJldHVybiB7c3RyaW5nfSAgICAgICAgICAgVGhlIHN0b3JhZ2UgZm9ybWF0LlxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuc3RvcmFnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gJ3NwYXJzZSc7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIGRhdGF0eXBlIG9mIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgbWF0cml4LlxuICAgKlxuICAgKiBVc2FnZTpcbiAgICogICAgIGNvbnN0IGZvcm1hdCA9IG1hdHJpeC5kYXRhdHlwZSgpICAgIC8vIHJldHJpZXZlIG1hdHJpeCBkYXRhdHlwZVxuICAgKlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgIFRoZSBkYXRhdHlwZS5cbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmRhdGF0eXBlID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLl9kYXRhdHlwZTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBTcGFyc2VNYXRyaXhcbiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeFxuICAgKiBAcGFyYW0ge0FycmF5fSBkYXRhXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGF0YXR5cGVdXG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5jcmVhdGUgPSBmdW5jdGlvbiAoZGF0YSwgZGF0YXR5cGUpIHtcbiAgICByZXR1cm4gbmV3IFNwYXJzZU1hdHJpeChkYXRhLCBkYXRhdHlwZSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgdGhlIG1hdHJpeCBkZW5zaXR5LlxuICAgKlxuICAgKiBVc2FnZTpcbiAgICogICAgIGNvbnN0IGRlbnNpdHkgPSBtYXRyaXguZGVuc2l0eSgpICAgICAgICAgICAgICAgICAgIC8vIHJldHJpZXZlIG1hdHJpeCBkZW5zaXR5XG4gICAqXG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHJldHVybiB7bnVtYmVyfSAgICAgICAgICAgVGhlIG1hdHJpeCBkZW5zaXR5LlxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuZGVuc2l0eSA9IGZ1bmN0aW9uICgpIHtcbiAgICAvLyByb3dzICYgY29sdW1uc1xuICAgIHZhciByb3dzID0gdGhpcy5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IHRoaXMuX3NpemVbMV07IC8vIGNhbGN1bGF0ZSBkZW5zaXR5XG5cbiAgICByZXR1cm4gcm93cyAhPT0gMCAmJiBjb2x1bW5zICE9PSAwID8gdGhpcy5faW5kZXgubGVuZ3RoIC8gKHJvd3MgKiBjb2x1bW5zKSA6IDA7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBzdWJzZXQgb2YgdGhlIG1hdHJpeCwgb3IgcmVwbGFjZSBhIHN1YnNldCBvZiB0aGUgbWF0cml4LlxuICAgKlxuICAgKiBVc2FnZTpcbiAgICogICAgIGNvbnN0IHN1YnNldCA9IG1hdHJpeC5zdWJzZXQoaW5kZXgpICAgICAgICAgICAgICAgLy8gcmV0cmlldmUgc3Vic2V0XG4gICAqICAgICBjb25zdCB2YWx1ZSA9IG1hdHJpeC5zdWJzZXQoaW5kZXgsIHJlcGxhY2VtZW50KSAgIC8vIHJlcGxhY2Ugc3Vic2V0XG4gICAqXG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHBhcmFtIHtJbmRleH0gaW5kZXhcbiAgICogQHBhcmFtIHtBcnJheSB8IE1hdHJpeCB8ICp9IFtyZXBsYWNlbWVudF1cbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlPTBdICAgICAgRGVmYXVsdCB2YWx1ZSwgZmlsbGVkIGluIG9uIG5ldyBlbnRyaWVzIHdoZW5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIG1hdHJpeCBpcyByZXNpemVkLiBJZiBub3QgcHJvdmlkZWQsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBtYXRyaXggZWxlbWVudHMgd2lsbCBiZSBmaWxsZWQgd2l0aCB6ZXJvcy5cbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLnN1YnNldCA9IGZ1bmN0aW9uIChpbmRleCwgcmVwbGFjZW1lbnQsIGRlZmF1bHRWYWx1ZSkge1xuICAgIC8vIGNoZWNrIGl0IGlzIGEgcGF0dGVybiBtYXRyaXhcbiAgICBpZiAoIXRoaXMuX3ZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHN1YnNldCBvbiBhIFBhdHRlcm4gb25seSBtYXRyaXgnKTtcbiAgICB9IC8vIGNoZWNrIGFyZ3VtZW50c1xuXG5cbiAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgcmV0dXJuIF9nZXRzdWJzZXQodGhpcywgaW5kZXgpO1xuICAgICAgLy8gaW50ZW50aW9uYWwgZmFsbCB0aHJvdWdoXG5cbiAgICAgIGNhc2UgMjpcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgcmV0dXJuIF9zZXRzdWJzZXQodGhpcywgaW5kZXgsIHJlcGxhY2VtZW50LCBkZWZhdWx0VmFsdWUpO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1dyb25nIG51bWJlciBvZiBhcmd1bWVudHMnKTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gX2dldHN1YnNldChtYXRyaXgsIGlkeCkge1xuICAgIC8vIGNoZWNrIGlkeFxuICAgIGlmICghKDAsIF9pcy5pc0luZGV4KShpZHgpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGluZGV4Jyk7XG4gICAgfVxuXG4gICAgdmFyIGlzU2NhbGFyID0gaWR4LmlzU2NhbGFyKCk7XG5cbiAgICBpZiAoaXNTY2FsYXIpIHtcbiAgICAgIC8vIHJldHVybiBhIHNjYWxhclxuICAgICAgcmV0dXJuIG1hdHJpeC5nZXQoaWR4Lm1pbigpKTtcbiAgICB9IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnNcblxuXG4gICAgdmFyIHNpemUgPSBpZHguc2l6ZSgpO1xuXG4gICAgaWYgKHNpemUubGVuZ3RoICE9PSBtYXRyaXguX3NpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKHNpemUubGVuZ3RoLCBtYXRyaXguX3NpemUubGVuZ3RoKTtcbiAgICB9IC8vIHZhcnNcblxuXG4gICAgdmFyIGksIGlpLCBrLCBrazsgLy8gdmFsaWRhdGUgaWYgYW55IG9mIHRoZSByYW5nZXMgaW4gdGhlIGluZGV4IGlzIG91dCBvZiByYW5nZVxuXG4gICAgdmFyIG1pbiA9IGlkeC5taW4oKTtcbiAgICB2YXIgbWF4ID0gaWR4Lm1heCgpO1xuXG4gICAgZm9yIChpID0gMCwgaWkgPSBtYXRyaXguX3NpemUubGVuZ3RoOyBpIDwgaWk7IGkrKykge1xuICAgICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShtaW5baV0sIG1hdHJpeC5fc2l6ZVtpXSk7XG4gICAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKG1heFtpXSwgbWF0cml4Ll9zaXplW2ldKTtcbiAgICB9IC8vIG1hdHJpeCBhcnJheXNcblxuXG4gICAgdmFyIG12YWx1ZXMgPSBtYXRyaXguX3ZhbHVlcztcbiAgICB2YXIgbWluZGV4ID0gbWF0cml4Ll9pbmRleDtcbiAgICB2YXIgbXB0ciA9IG1hdHJpeC5fcHRyOyAvLyByb3dzICYgY29sdW1ucyBkaW1lbnNpb25zIGZvciByZXN1bHQgbWF0cml4XG5cbiAgICB2YXIgcm93cyA9IGlkeC5kaW1lbnNpb24oMCk7XG4gICAgdmFyIGNvbHVtbnMgPSBpZHguZGltZW5zaW9uKDEpOyAvLyB3b3Jrc3BhY2UgJiBwZXJtdXRhdGlvbiB2ZWN0b3JcblxuICAgIHZhciB3ID0gW107XG4gICAgdmFyIHB2ID0gW107IC8vIGxvb3Agcm93cyBpbiByZXN1bHRpbmcgbWF0cml4XG5cbiAgICByb3dzLmZvckVhY2goZnVuY3Rpb24gKGksIHIpIHtcbiAgICAgIC8vIHVwZGF0ZSBwZXJtdXRhdGlvbiB2ZWN0b3JcbiAgICAgIHB2W2ldID0gclswXTsgLy8gbWFyayBpIGluIHdvcmtzcGFjZVxuXG4gICAgICB3W2ldID0gdHJ1ZTtcbiAgICB9KTsgLy8gcmVzdWx0IG1hdHJpeCBhcnJheXNcblxuICAgIHZhciB2YWx1ZXMgPSBtdmFsdWVzID8gW10gOiB1bmRlZmluZWQ7XG4gICAgdmFyIGluZGV4ID0gW107XG4gICAgdmFyIHB0ciA9IFtdOyAvLyBsb29wIGNvbHVtbnMgaW4gcmVzdWx0IG1hdHJpeFxuXG4gICAgY29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uIChqKSB7XG4gICAgICAvLyB1cGRhdGUgcHRyXG4gICAgICBwdHIucHVzaChpbmRleC5sZW5ndGgpOyAvLyBsb29wIHZhbHVlcyBpbiBjb2x1bW4galxuXG4gICAgICBmb3IgKGsgPSBtcHRyW2pdLCBrayA9IG1wdHJbaiArIDFdOyBrIDwga2s7IGsrKykge1xuICAgICAgICAvLyByb3dcbiAgICAgICAgaSA9IG1pbmRleFtrXTsgLy8gY2hlY2sgcm93IGlzIGluIHJlc3VsdCBtYXRyaXhcblxuICAgICAgICBpZiAod1tpXSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIC8vIHB1c2ggaW5kZXhcbiAgICAgICAgICBpbmRleC5wdXNoKHB2W2ldKTsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlc1xuXG4gICAgICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICAgICAgdmFsdWVzLnB1c2gobXZhbHVlc1trXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7IC8vIHVwZGF0ZSBwdHJcblxuICAgIHB0ci5wdXNoKGluZGV4Lmxlbmd0aCk7IC8vIHJldHVybiBtYXRyaXhcblxuICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogdmFsdWVzLFxuICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgcHRyOiBwdHIsXG4gICAgICBzaXplOiBzaXplLFxuICAgICAgZGF0YXR5cGU6IG1hdHJpeC5fZGF0YXR5cGVcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9zZXRzdWJzZXQobWF0cml4LCBpbmRleCwgc3VibWF0cml4LCBkZWZhdWx0VmFsdWUpIHtcbiAgICAvLyBjaGVjayBpbmRleFxuICAgIGlmICghaW5kZXggfHwgaW5kZXguaXNJbmRleCAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBpbmRleCcpO1xuICAgIH0gLy8gZ2V0IGluZGV4IHNpemUgYW5kIGNoZWNrIHdoZXRoZXIgdGhlIGluZGV4IGNvbnRhaW5zIGEgc2luZ2xlIHZhbHVlXG5cblxuICAgIHZhciBpU2l6ZSA9IGluZGV4LnNpemUoKTtcbiAgICB2YXIgaXNTY2FsYXIgPSBpbmRleC5pc1NjYWxhcigpOyAvLyBjYWxjdWxhdGUgdGhlIHNpemUgb2YgdGhlIHN1Ym1hdHJpeCwgYW5kIGNvbnZlcnQgaXQgaW50byBhbiBBcnJheSBpZiBuZWVkZWRcblxuICAgIHZhciBzU2l6ZTtcblxuICAgIGlmICgoMCwgX2lzLmlzTWF0cml4KShzdWJtYXRyaXgpKSB7XG4gICAgICAvLyBzdWJtYXRyaXggc2l6ZVxuICAgICAgc1NpemUgPSBzdWJtYXRyaXguc2l6ZSgpOyAvLyB1c2UgYXJyYXkgcmVwcmVzZW50YXRpb25cblxuICAgICAgc3VibWF0cml4ID0gc3VibWF0cml4LnRvQXJyYXkoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZ2V0IHN1Ym1hdHJpeCBzaXplIChhcnJheSwgc2NhbGFyKVxuICAgICAgc1NpemUgPSAoMCwgX2FycmF5LmFycmF5U2l6ZSkoc3VibWF0cml4KTtcbiAgICB9IC8vIGNoZWNrIGluZGV4IGlzIGEgc2NhbGFyXG5cblxuICAgIGlmIChpc1NjYWxhcikge1xuICAgICAgLy8gdmVyaWZ5IHN1Ym1hdHJpeCBpcyBhIHNjYWxhclxuICAgICAgaWYgKHNTaXplLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdTY2FsYXIgZXhwZWN0ZWQnKTtcbiAgICAgIH0gLy8gc2V0IHZhbHVlXG5cblxuICAgICAgbWF0cml4LnNldChpbmRleC5taW4oKSwgc3VibWF0cml4LCBkZWZhdWx0VmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyB2YWxpZGF0ZSBkaW1lbnNpb25zLCBpbmRleCBzaXplIG11c3QgYmUgb25lIG9yIHR3byBkaW1lbnNpb25zXG4gICAgICBpZiAoaVNpemUubGVuZ3RoICE9PSAxICYmIGlTaXplLmxlbmd0aCAhPT0gMikge1xuICAgICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGlTaXplLmxlbmd0aCwgbWF0cml4Ll9zaXplLmxlbmd0aCwgJzwnKTtcbiAgICAgIH0gLy8gY2hlY2sgc3VibWF0cml4IGFuZCBpbmRleCBoYXZlIHRoZSBzYW1lIGRpbWVuc2lvbnNcblxuXG4gICAgICBpZiAoc1NpemUubGVuZ3RoIDwgaVNpemUubGVuZ3RoKSB7XG4gICAgICAgIC8vIGNhbGN1bGF0ZSBudW1iZXIgb2YgbWlzc2luZyBvdXRlciBkaW1lbnNpb25zXG4gICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgdmFyIG91dGVyID0gMDtcblxuICAgICAgICB3aGlsZSAoaVNpemVbaV0gPT09IDEgJiYgc1NpemVbaV0gPT09IDEpIHtcbiAgICAgICAgICBpKys7XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAoaVNpemVbaV0gPT09IDEpIHtcbiAgICAgICAgICBvdXRlcisrO1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfSAvLyB1bnNxdWVlemUgYm90aCBvdXRlciBhbmQgaW5uZXIgZGltZW5zaW9uc1xuXG5cbiAgICAgICAgc3VibWF0cml4ID0gKDAsIF9hcnJheS51bnNxdWVlemUpKHN1Ym1hdHJpeCwgaVNpemUubGVuZ3RoLCBvdXRlciwgc1NpemUpO1xuICAgICAgfSAvLyBjaGVjayB3aGV0aGVyIHRoZSBzaXplIG9mIHRoZSBzdWJtYXRyaXggbWF0Y2hlcyB0aGUgaW5kZXggc2l6ZVxuXG5cbiAgICAgIGlmICghKDAsIF9vYmplY3QuZGVlcFN0cmljdEVxdWFsKShpU2l6ZSwgc1NpemUpKSB7XG4gICAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaVNpemUsIHNTaXplLCAnPicpO1xuICAgICAgfSAvLyBvZmZzZXRzXG5cblxuICAgICAgdmFyIHgwID0gaW5kZXgubWluKClbMF07XG4gICAgICB2YXIgeTAgPSBpbmRleC5taW4oKVsxXTsgLy8gc3VibWF0cml4IHJvd3MgYW5kIGNvbHVtbnNcblxuICAgICAgdmFyIG0gPSBzU2l6ZVswXTtcbiAgICAgIHZhciBuID0gc1NpemVbMV07IC8vIGxvb3Agc3VibWF0cml4XG5cbiAgICAgIGZvciAodmFyIHggPSAwOyB4IDwgbTsgeCsrKSB7XG4gICAgICAgIC8vIGxvb3AgY29sdW1uc1xuICAgICAgICBmb3IgKHZhciB5ID0gMDsgeSA8IG47IHkrKykge1xuICAgICAgICAgIC8vIHZhbHVlIGF0IGksIGpcbiAgICAgICAgICB2YXIgdiA9IHN1Ym1hdHJpeFt4XVt5XTsgLy8gaW52b2tlIHNldCAoemVybyB2YWx1ZSB3aWxsIHJlbW92ZSBlbnRyeSBmcm9tIG1hdHJpeClcblxuICAgICAgICAgIG1hdHJpeC5zZXQoW3ggKyB4MCwgeSArIHkwXSwgdiwgZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRyaXg7XG4gIH1cbiAgLyoqXG4gICAqIEdldCBhIHNpbmdsZSBlbGVtZW50IGZyb20gdGhlIG1hdHJpeC5cbiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlcltdfSBpbmRleCAgIFplcm8tYmFzZWQgaW5kZXhcbiAgICogQHJldHVybiB7Kn0gdmFsdWVcbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgIGlmICghKDAsIF9pcy5pc0FycmF5KShpbmRleCkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKGluZGV4Lmxlbmd0aCAhPT0gdGhpcy5fc2l6ZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoaW5kZXgubGVuZ3RoLCB0aGlzLl9zaXplLmxlbmd0aCk7XG4gICAgfSAvLyBjaGVjayBpdCBpcyBhIHBhdHRlcm4gbWF0cml4XG5cblxuICAgIGlmICghdGhpcy5fdmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBpbnZva2UgZ2V0IG9uIGEgUGF0dGVybiBvbmx5IG1hdHJpeCcpO1xuICAgIH0gLy8gcm93IGFuZCBjb2x1bW5cblxuXG4gICAgdmFyIGkgPSBpbmRleFswXTtcbiAgICB2YXIgaiA9IGluZGV4WzFdOyAvLyBjaGVjayBpLCBqIGFyZSB2YWxpZFxuXG4gICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpLCB0aGlzLl9zaXplWzBdKTtcbiAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGosIHRoaXMuX3NpemVbMV0pOyAvLyBmaW5kIHZhbHVlIGluZGV4XG5cbiAgICB2YXIgayA9IF9nZXRWYWx1ZUluZGV4KGksIHRoaXMuX3B0cltqXSwgdGhpcy5fcHRyW2ogKyAxXSwgdGhpcy5faW5kZXgpOyAvLyBjaGVjayBrIGlzIHByaW9yIHRvIG5leHQgY29sdW1uIGsgYW5kIGl0IGlzIGluIHRoZSBjb3JyZWN0IHJvd1xuXG5cbiAgICBpZiAoayA8IHRoaXMuX3B0cltqICsgMV0gJiYgdGhpcy5faW5kZXhba10gPT09IGkpIHtcbiAgICAgIHJldHVybiB0aGlzLl92YWx1ZXNba107XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH07XG4gIC8qKlxuICAgKiBSZXBsYWNlIGEgc2luZ2xlIGVsZW1lbnQgaW4gdGhlIG1hdHJpeC5cbiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlcltdfSBpbmRleCAgIFplcm8tYmFzZWQgaW5kZXhcbiAgICogQHBhcmFtIHsqfSB2XG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gICAgICAgIERlZmF1bHQgdmFsdWUsIGZpbGxlZCBpbiBvbiBuZXcgZW50cmllcyB3aGVuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBtYXRyaXggaXMgcmVzaXplZC4gSWYgbm90IHByb3ZpZGVkLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgbWF0cml4IGVsZW1lbnRzIHdpbGwgYmUgc2V0IHRvIHplcm8uXG4gICAqIEByZXR1cm4ge1NwYXJzZU1hdHJpeH0gc2VsZlxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24gKGluZGV4LCB2LCBkZWZhdWx0VmFsdWUpIHtcbiAgICBpZiAoISgwLCBfaXMuaXNBcnJheSkoaW5kZXgpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBleHBlY3RlZCcpO1xuICAgIH1cblxuICAgIGlmIChpbmRleC5sZW5ndGggIT09IHRoaXMuX3NpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGluZGV4Lmxlbmd0aCwgdGhpcy5fc2l6ZS5sZW5ndGgpO1xuICAgIH0gLy8gY2hlY2sgaXQgaXMgYSBwYXR0ZXJuIG1hdHJpeFxuXG5cbiAgICBpZiAoIXRoaXMuX3ZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIHNldCBvbiBhIFBhdHRlcm4gb25seSBtYXRyaXgnKTtcbiAgICB9IC8vIHJvdyBhbmQgY29sdW1uXG5cblxuICAgIHZhciBpID0gaW5kZXhbMF07XG4gICAgdmFyIGogPSBpbmRleFsxXTsgLy8gcm93cyAmIGNvbHVtbnNcblxuICAgIHZhciByb3dzID0gdGhpcy5fc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IHRoaXMuX3NpemVbMV07IC8vIGVxdWFsIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7XG5cbiAgICBpZiAoKDAsIF9pcy5pc1N0cmluZykodGhpcy5fZGF0YXR5cGUpKSB7XG4gICAgICAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGRhdGF0eXBlLCBkYXRhdHlwZSlcbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW3RoaXMuX2RhdGF0eXBlLCB0aGlzLl9kYXRhdHlwZV0pIHx8IGVxdWFsU2NhbGFyOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgdGhpcy5fZGF0YXR5cGUpO1xuICAgIH0gLy8gY2hlY2sgd2UgbmVlZCB0byByZXNpemUgbWF0cml4XG5cblxuICAgIGlmIChpID4gcm93cyAtIDEgfHwgaiA+IGNvbHVtbnMgLSAxKSB7XG4gICAgICAvLyByZXNpemUgbWF0cml4XG4gICAgICBfcmVzaXplKHRoaXMsIE1hdGgubWF4KGkgKyAxLCByb3dzKSwgTWF0aC5tYXgoaiArIDEsIGNvbHVtbnMpLCBkZWZhdWx0VmFsdWUpOyAvLyB1cGRhdGUgcm93cyAmIGNvbHVtbnNcblxuXG4gICAgICByb3dzID0gdGhpcy5fc2l6ZVswXTtcbiAgICAgIGNvbHVtbnMgPSB0aGlzLl9zaXplWzFdO1xuICAgIH0gLy8gY2hlY2sgaSwgaiBhcmUgdmFsaWRcblxuXG4gICAgKDAsIF9hcnJheS52YWxpZGF0ZUluZGV4KShpLCByb3dzKTtcbiAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGosIGNvbHVtbnMpOyAvLyBmaW5kIHZhbHVlIGluZGV4XG5cbiAgICB2YXIgayA9IF9nZXRWYWx1ZUluZGV4KGksIHRoaXMuX3B0cltqXSwgdGhpcy5fcHRyW2ogKyAxXSwgdGhpcy5faW5kZXgpOyAvLyBjaGVjayBrIGlzIHByaW9yIHRvIG5leHQgY29sdW1uIGsgYW5kIGl0IGlzIGluIHRoZSBjb3JyZWN0IHJvd1xuXG5cbiAgICBpZiAoayA8IHRoaXMuX3B0cltqICsgMV0gJiYgdGhpcy5faW5kZXhba10gPT09IGkpIHtcbiAgICAgIC8vIGNoZWNrIHZhbHVlICE9IDBcbiAgICAgIGlmICghZXEodiwgemVybykpIHtcbiAgICAgICAgLy8gdXBkYXRlIHZhbHVlXG4gICAgICAgIHRoaXMuX3ZhbHVlc1trXSA9IHY7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyByZW1vdmUgdmFsdWUgZnJvbSBtYXRyaXhcbiAgICAgICAgX3JlbW92ZShrLCBqLCB0aGlzLl92YWx1ZXMsIHRoaXMuX2luZGV4LCB0aGlzLl9wdHIpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBpbnNlcnQgdmFsdWUgQCAoaSwgailcbiAgICAgIF9pbnNlcnQoaywgaSwgaiwgdiwgdGhpcy5fdmFsdWVzLCB0aGlzLl9pbmRleCwgdGhpcy5fcHRyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcblxuICBmdW5jdGlvbiBfZ2V0VmFsdWVJbmRleChpLCB0b3AsIGJvdHRvbSwgaW5kZXgpIHtcbiAgICAvLyBjaGVjayByb3cgaXMgb24gdGhlIGJvdHRvbSBzaWRlXG4gICAgaWYgKGJvdHRvbSAtIHRvcCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGJvdHRvbTtcbiAgICB9IC8vIGxvb3Agcm93cyBbdG9wLCBib3R0b21bXG5cblxuICAgIGZvciAodmFyIHIgPSB0b3A7IHIgPCBib3R0b207IHIrKykge1xuICAgICAgLy8gY2hlY2sgd2UgZm91bmQgdmFsdWUgaW5kZXhcbiAgICAgIGlmIChpbmRleFtyXSA9PT0gaSkge1xuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH1cbiAgICB9IC8vIHdlIGRpZCBub3QgZmluZCByb3dcblxuXG4gICAgcmV0dXJuIHRvcDtcbiAgfVxuXG4gIGZ1bmN0aW9uIF9yZW1vdmUoaywgaiwgdmFsdWVzLCBpbmRleCwgcHRyKSB7XG4gICAgLy8gcmVtb3ZlIHZhbHVlIEAga1xuICAgIHZhbHVlcy5zcGxpY2UoaywgMSk7XG4gICAgaW5kZXguc3BsaWNlKGssIDEpOyAvLyB1cGRhdGUgcG9pbnRlcnNcblxuICAgIGZvciAodmFyIHggPSBqICsgMTsgeCA8IHB0ci5sZW5ndGg7IHgrKykge1xuICAgICAgcHRyW3hdLS07XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gX2luc2VydChrLCBpLCBqLCB2LCB2YWx1ZXMsIGluZGV4LCBwdHIpIHtcbiAgICAvLyBpbnNlcnQgdmFsdWVcbiAgICB2YWx1ZXMuc3BsaWNlKGssIDAsIHYpOyAvLyB1cGRhdGUgcm93IGZvciBrXG5cbiAgICBpbmRleC5zcGxpY2UoaywgMCwgaSk7IC8vIHVwZGF0ZSBjb2x1bW4gcG9pbnRlcnNcblxuICAgIGZvciAodmFyIHggPSBqICsgMTsgeCA8IHB0ci5sZW5ndGg7IHgrKykge1xuICAgICAgcHRyW3hdKys7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBSZXNpemUgdGhlIG1hdHJpeCB0byB0aGUgZ2l2ZW4gc2l6ZS4gUmV0dXJucyBhIGNvcHkgb2YgdGhlIG1hdHJpeCB3aGVuXG4gICAqIGBjb3B5PXRydWVgLCBvdGhlcndpc2UgcmV0dXJuIHRoZSBtYXRyaXggaXRzZWxmIChyZXNpemUgaW4gcGxhY2UpLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyW119IHNpemUgICAgICAgICAgIFRoZSBuZXcgc2l6ZSB0aGUgbWF0cml4IHNob3VsZCBoYXZlLlxuICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWU9MF0gICAgICBEZWZhdWx0IHZhbHVlLCBmaWxsZWQgaW4gb24gbmV3IGVudHJpZXMuXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vdCBwcm92aWRlZCwgdGhlIG1hdHJpeCBlbGVtZW50cyB3aWxsXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIGZpbGxlZCB3aXRoIHplcm9zLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjb3B5XSAgICAgICAgICBSZXR1cm4gYSByZXNpemVkIGNvcHkgb2YgdGhlIG1hdHJpeFxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICBUaGUgcmVzaXplZCBtYXRyaXhcbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLnJlc2l6ZSA9IGZ1bmN0aW9uIChzaXplLCBkZWZhdWx0VmFsdWUsIGNvcHkpIHtcbiAgICAvLyB2YWxpZGF0ZSBhcmd1bWVudHNcbiAgICBpZiAoISgwLCBfaXMuaXNBcnJheSkoc2l6ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5IGV4cGVjdGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKHNpemUubGVuZ3RoICE9PSAyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgdHdvIGRpbWVuc2lvbnMgbWF0cml4IGFyZSBzdXBwb3J0ZWQnKTtcbiAgICB9IC8vIGNoZWNrIHNpemVzXG5cblxuICAgIHNpemUuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICghKDAsIF9pcy5pc051bWJlcikodmFsdWUpIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKHZhbHVlKSB8fCB2YWx1ZSA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBzaXplLCBtdXN0IGNvbnRhaW4gcG9zaXRpdmUgaW50ZWdlcnMgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgICAgfVxuICAgIH0pOyAvLyBtYXRyaXggdG8gcmVzaXplXG5cbiAgICB2YXIgbSA9IGNvcHkgPyB0aGlzLmNsb25lKCkgOiB0aGlzOyAvLyByZXNpemUgbWF0cml4XG5cbiAgICByZXR1cm4gX3Jlc2l6ZShtLCBzaXplWzBdLCBzaXplWzFdLCBkZWZhdWx0VmFsdWUpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIF9yZXNpemUobWF0cml4LCByb3dzLCBjb2x1bW5zLCBkZWZhdWx0VmFsdWUpIHtcbiAgICAvLyB2YWx1ZSB0byBpbnNlcnQgYXQgdGhlIHRpbWUgb2YgZ3Jvd2luZyBtYXRyaXhcbiAgICB2YXIgdmFsdWUgPSBkZWZhdWx0VmFsdWUgfHwgMDsgLy8gZXF1YWwgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGVxID0gZXF1YWxTY2FsYXI7IC8vIHplcm8gdmFsdWVcblxuICAgIHZhciB6ZXJvID0gMDtcblxuICAgIGlmICgoMCwgX2lzLmlzU3RyaW5nKShtYXRyaXguX2RhdGF0eXBlKSkge1xuICAgICAgLy8gZmluZCBzaWduYXR1cmUgdGhhdCBtYXRjaGVzIChkYXRhdHlwZSwgZGF0YXR5cGUpXG4gICAgICBlcSA9IHR5cGVkLmZpbmQoZXF1YWxTY2FsYXIsIFttYXRyaXguX2RhdGF0eXBlLCBtYXRyaXguX2RhdGF0eXBlXSkgfHwgZXF1YWxTY2FsYXI7IC8vIGNvbnZlcnQgMCB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICB6ZXJvID0gdHlwZWQuY29udmVydCgwLCBtYXRyaXguX2RhdGF0eXBlKTsgLy8gY29udmVydCB2YWx1ZSB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICB2YWx1ZSA9IHR5cGVkLmNvbnZlcnQodmFsdWUsIG1hdHJpeC5fZGF0YXR5cGUpO1xuICAgIH0gLy8gc2hvdWxkIHdlIGluc2VydCB0aGUgdmFsdWU/XG5cblxuICAgIHZhciBpbnMgPSAhZXEodmFsdWUsIHplcm8pOyAvLyBvbGQgY29sdW1ucyBhbmQgcm93c1xuXG4gICAgdmFyIHIgPSBtYXRyaXguX3NpemVbMF07XG4gICAgdmFyIGMgPSBtYXRyaXguX3NpemVbMV07XG4gICAgdmFyIGksIGosIGs7IC8vIGNoZWNrIHdlIG5lZWQgdG8gaW5jcmVhc2UgY29sdW1uc1xuXG4gICAgaWYgKGNvbHVtbnMgPiBjKSB7XG4gICAgICAvLyBsb29wIG5ldyBjb2x1bW5zXG4gICAgICBmb3IgKGogPSBjOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAgIC8vIHVwZGF0ZSBtYXRyaXguX3B0ciBmb3IgY3VycmVudCBjb2x1bW5cbiAgICAgICAgbWF0cml4Ll9wdHJbal0gPSBtYXRyaXguX3ZhbHVlcy5sZW5ndGg7IC8vIGNoZWNrIHdlIG5lZWQgdG8gaW5zZXJ0IG1hdHJpeC5fdmFsdWVzXG5cbiAgICAgICAgaWYgKGlucykge1xuICAgICAgICAgIC8vIGxvb3Agcm93c1xuICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCByOyBpKyspIHtcbiAgICAgICAgICAgIC8vIGFkZCBuZXcgbWF0cml4Ll92YWx1ZXNcbiAgICAgICAgICAgIG1hdHJpeC5fdmFsdWVzLnB1c2godmFsdWUpOyAvLyB1cGRhdGUgbWF0cml4Ll9pbmRleFxuXG5cbiAgICAgICAgICAgIG1hdHJpeC5faW5kZXgucHVzaChpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gc3RvcmUgbnVtYmVyIG9mIG1hdHJpeC5fdmFsdWVzIGluIG1hdHJpeC5fcHRyXG5cblxuICAgICAgbWF0cml4Ll9wdHJbY29sdW1uc10gPSBtYXRyaXguX3ZhbHVlcy5sZW5ndGg7XG4gICAgfSBlbHNlIGlmIChjb2x1bW5zIDwgYykge1xuICAgICAgLy8gdHJ1bmNhdGUgbWF0cml4Ll9wdHJcbiAgICAgIG1hdHJpeC5fcHRyLnNwbGljZShjb2x1bW5zICsgMSwgYyAtIGNvbHVtbnMpOyAvLyB0cnVuY2F0ZSBtYXRyaXguX3ZhbHVlcyBhbmQgbWF0cml4Ll9pbmRleFxuXG5cbiAgICAgIG1hdHJpeC5fdmFsdWVzLnNwbGljZShtYXRyaXguX3B0cltjb2x1bW5zXSwgbWF0cml4Ll92YWx1ZXMubGVuZ3RoKTtcblxuICAgICAgbWF0cml4Ll9pbmRleC5zcGxpY2UobWF0cml4Ll9wdHJbY29sdW1uc10sIG1hdHJpeC5faW5kZXgubGVuZ3RoKTtcbiAgICB9IC8vIHVwZGF0ZSBjb2x1bW5zXG5cblxuICAgIGMgPSBjb2x1bW5zOyAvLyBjaGVjayB3ZSBuZWVkIHRvIGluY3JlYXNlIHJvd3NcblxuICAgIGlmIChyb3dzID4gcikge1xuICAgICAgLy8gY2hlY2sgd2UgaGF2ZSB0byBpbnNlcnQgdmFsdWVzXG4gICAgICBpZiAoaW5zKSB7XG4gICAgICAgIC8vIGluc2VydHNcbiAgICAgICAgdmFyIG4gPSAwOyAvLyBsb29wIGNvbHVtbnNcblxuICAgICAgICBmb3IgKGogPSAwOyBqIDwgYzsgaisrKSB7XG4gICAgICAgICAgLy8gdXBkYXRlIG1hdHJpeC5fcHRyIGZvciBjdXJyZW50IGNvbHVtblxuICAgICAgICAgIG1hdHJpeC5fcHRyW2pdID0gbWF0cml4Ll9wdHJbal0gKyBuOyAvLyB3aGVyZSB0byBpbnNlcnQgbWF0cml4Ll92YWx1ZXNcblxuICAgICAgICAgIGsgPSBtYXRyaXguX3B0cltqICsgMV0gKyBuOyAvLyBwb2ludGVyXG5cbiAgICAgICAgICB2YXIgcCA9IDA7IC8vIGxvb3AgbmV3IHJvd3MsIGluaXRpYWxpemUgcG9pbnRlclxuXG4gICAgICAgICAgZm9yIChpID0gcjsgaSA8IHJvd3M7IGkrKywgcCsrKSB7XG4gICAgICAgICAgICAvLyBhZGQgdmFsdWVcbiAgICAgICAgICAgIG1hdHJpeC5fdmFsdWVzLnNwbGljZShrICsgcCwgMCwgdmFsdWUpOyAvLyB1cGRhdGUgbWF0cml4Ll9pbmRleFxuXG5cbiAgICAgICAgICAgIG1hdHJpeC5faW5kZXguc3BsaWNlKGsgKyBwLCAwLCBpKTsgLy8gaW5jcmVtZW50IGluc2VydHNcblxuXG4gICAgICAgICAgICBuKys7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIHN0b3JlIG51bWJlciBvZiBtYXRyaXguX3ZhbHVlcyBpbiBtYXRyaXguX3B0clxuXG5cbiAgICAgICAgbWF0cml4Ll9wdHJbY10gPSBtYXRyaXguX3ZhbHVlcy5sZW5ndGg7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyb3dzIDwgcikge1xuICAgICAgLy8gZGVsZXRlc1xuICAgICAgdmFyIGQgPSAwOyAvLyBsb29wIGNvbHVtbnNcblxuICAgICAgZm9yIChqID0gMDsgaiA8IGM7IGorKykge1xuICAgICAgICAvLyB1cGRhdGUgbWF0cml4Ll9wdHIgZm9yIGN1cnJlbnQgY29sdW1uXG4gICAgICAgIG1hdHJpeC5fcHRyW2pdID0gbWF0cml4Ll9wdHJbal0gLSBkOyAvLyB3aGVyZSBtYXRyaXguX3ZhbHVlcyBzdGFydCBmb3IgbmV4dCBjb2x1bW5cblxuICAgICAgICB2YXIgazAgPSBtYXRyaXguX3B0cltqXTtcbiAgICAgICAgdmFyIGsxID0gbWF0cml4Ll9wdHJbaiArIDFdIC0gZDsgLy8gbG9vcCBtYXRyaXguX2luZGV4XG5cbiAgICAgICAgZm9yIChrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgICAgLy8gcm93XG4gICAgICAgICAgaSA9IG1hdHJpeC5faW5kZXhba107IC8vIGNoZWNrIHdlIG5lZWQgdG8gZGVsZXRlIHZhbHVlIGFuZCBtYXRyaXguX2luZGV4XG5cbiAgICAgICAgICBpZiAoaSA+IHJvd3MgLSAxKSB7XG4gICAgICAgICAgICAvLyByZW1vdmUgdmFsdWVcbiAgICAgICAgICAgIG1hdHJpeC5fdmFsdWVzLnNwbGljZShrLCAxKTsgLy8gcmVtb3ZlIGl0ZW0gZnJvbSBtYXRyaXguX2luZGV4XG5cblxuICAgICAgICAgICAgbWF0cml4Ll9pbmRleC5zcGxpY2UoaywgMSk7IC8vIGluY3JlYXNlIGRlbGV0ZXNcblxuXG4gICAgICAgICAgICBkKys7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIHVwZGF0ZSBtYXRyaXguX3B0ciBmb3IgY3VycmVudCBjb2x1bW5cblxuXG4gICAgICBtYXRyaXguX3B0cltqXSA9IG1hdHJpeC5fdmFsdWVzLmxlbmd0aDtcbiAgICB9IC8vIHVwZGF0ZSBtYXRyaXguX3NpemVcblxuXG4gICAgbWF0cml4Ll9zaXplWzBdID0gcm93cztcbiAgICBtYXRyaXguX3NpemVbMV0gPSBjb2x1bW5zOyAvLyByZXR1cm4gbWF0cml4XG5cbiAgICByZXR1cm4gbWF0cml4O1xuICB9XG4gIC8qKlxuICAgKiBSZXNoYXBlIHRoZSBtYXRyaXggdG8gdGhlIGdpdmVuIHNpemUuIFJldHVybnMgYSBjb3B5IG9mIHRoZSBtYXRyaXggd2hlblxuICAgKiBgY29weT10cnVlYCwgb3RoZXJ3aXNlIHJldHVybiB0aGUgbWF0cml4IGl0c2VsZiAocmVzaGFwZSBpbiBwbGFjZSkuXG4gICAqXG4gICAqIE5PVEU6IFRoaXMgbWlnaHQgYmUgYmV0dGVyIHN1aXRlZCB0byBjb3B5IGJ5IGRlZmF1bHQsIGluc3RlYWQgb2YgbW9kaWZ5aW5nXG4gICAqICAgICAgIGluIHBsYWNlLiBGb3Igbm93LCBpdCBvcGVyYXRlcyBpbiBwbGFjZSB0byByZW1haW4gY29uc2lzdGVudCB3aXRoXG4gICAqICAgICAgIHJlc2l6ZSgpLlxuICAgKlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyW119IHNpemUgICAgICAgICAgIFRoZSBuZXcgc2l6ZSB0aGUgbWF0cml4IHNob3VsZCBoYXZlLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtjb3B5XSAgICAgICAgICBSZXR1cm4gYSByZXNoYXBlZCBjb3B5IG9mIHRoZSBtYXRyaXhcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgVGhlIHJlc2hhcGVkIG1hdHJpeFxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUucmVzaGFwZSA9IGZ1bmN0aW9uIChzaXplLCBjb3B5KSB7XG4gICAgLy8gdmFsaWRhdGUgYXJndW1lbnRzXG4gICAgaWYgKCEoMCwgX2lzLmlzQXJyYXkpKHNpemUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBleHBlY3RlZCcpO1xuICAgIH1cblxuICAgIGlmIChzaXplLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdTcGFyc2UgbWF0cmljZXMgY2FuIG9ubHkgYmUgcmVzaGFwZWQgaW4gdHdvIGRpbWVuc2lvbnMnKTtcbiAgICB9IC8vIGNoZWNrIHNpemVzXG5cblxuICAgIHNpemUuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICghKDAsIF9pcy5pc051bWJlcikodmFsdWUpIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKHZhbHVlKSB8fCB2YWx1ZSA8IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBzaXplLCBtdXN0IGNvbnRhaW4gcG9zaXRpdmUgaW50ZWdlcnMgJyArICcoc2l6ZTogJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoc2l6ZSkgKyAnKScpO1xuICAgICAgfVxuICAgIH0pOyAvLyBtICogbiBtdXN0IG5vdCBjaGFuZ2VcblxuICAgIGlmICh0aGlzLl9zaXplWzBdICogdGhpcy5fc2l6ZVsxXSAhPT0gc2l6ZVswXSAqIHNpemVbMV0pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUmVzaGFwaW5nIHNwYXJzZSBtYXRyaXggd2lsbCByZXN1bHQgaW4gdGhlIHdyb25nIG51bWJlciBvZiBlbGVtZW50cycpO1xuICAgIH0gLy8gbWF0cml4IHRvIHJlc2hhcGVcblxuXG4gICAgdmFyIG0gPSBjb3B5ID8gdGhpcy5jbG9uZSgpIDogdGhpczsgLy8gcmV0dXJuIHVuY2hhbmdlZCBpZiB0aGUgc2FtZSBzaGFwZVxuXG4gICAgaWYgKHRoaXMuX3NpemVbMF0gPT09IHNpemVbMF0gJiYgdGhpcy5fc2l6ZVsxXSA9PT0gc2l6ZVsxXSkge1xuICAgICAgcmV0dXJuIG07XG4gICAgfSAvLyBDb252ZXJ0IHRvIENPTyBmb3JtYXQgKGdlbmVyYXRlIGEgY29sdW1uIGluZGV4KVxuXG5cbiAgICB2YXIgY29sSW5kZXggPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbS5fcHRyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG0uX3B0cltpICsgMV0gLSBtLl9wdHJbaV07IGorKykge1xuICAgICAgICBjb2xJbmRleC5wdXNoKGkpO1xuICAgICAgfVxuICAgIH0gLy8gQ2xvbmUgdGhlIHZhbHVlcyBhcnJheVxuXG5cbiAgICB2YXIgdmFsdWVzID0gbS5fdmFsdWVzLnNsaWNlKCk7IC8vIENsb25lIHRoZSByb3cgaW5kZXggYXJyYXlcblxuXG4gICAgdmFyIHJvd0luZGV4ID0gbS5faW5kZXguc2xpY2UoKTsgLy8gVHJhbnNmb3JtIHRoZSAocm93LCBjb2x1bW4pIGluZGljZXNcblxuXG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IG0uX2luZGV4Lmxlbmd0aDsgX2krKykge1xuICAgICAgdmFyIHIxID0gcm93SW5kZXhbX2ldO1xuICAgICAgdmFyIGMxID0gY29sSW5kZXhbX2ldO1xuICAgICAgdmFyIGZsYXQgPSByMSAqIG0uX3NpemVbMV0gKyBjMTtcbiAgICAgIGNvbEluZGV4W19pXSA9IGZsYXQgJSBzaXplWzFdO1xuICAgICAgcm93SW5kZXhbX2ldID0gTWF0aC5mbG9vcihmbGF0IC8gc2l6ZVsxXSk7XG4gICAgfSAvLyBOb3cgcmVzaGFwaW5nIGlzIHN1cHBvc2VkIHRvIHByZXNlcnZlIHRoZSByb3ctbWFqb3Igb3JkZXIsIEJVVCB0aGVzZSBzcGFyc2UgbWF0cmljZXMgYXJlIHN0b3JlZFxuICAgIC8vIGluIGNvbHVtbi1tYWpvciBvcmRlciwgc28gd2UgaGF2ZSB0byByZW9yZGVyIHRoZSB2YWx1ZSBhcnJheSBub3cuIE9uZSBvcHRpb24gaXMgdG8gdXNlIGEgbXVsdGlzb3J0LFxuICAgIC8vIHNvcnRpbmcgc2V2ZXJhbCBhcnJheXMgYmFzZWQgb24gc29tZSBvdGhlciBhcnJheS5cbiAgICAvLyBPUiwgd2UgY291bGQgZWFzaWx5IGp1c3Q6XG4gICAgLy8gMS4gUmVtb3ZlIGFsbCB2YWx1ZXMgZnJvbSB0aGUgbWF0cml4XG5cblxuICAgIG0uX3ZhbHVlcy5sZW5ndGggPSAwO1xuICAgIG0uX2luZGV4Lmxlbmd0aCA9IDA7XG4gICAgbS5fcHRyLmxlbmd0aCA9IHNpemVbMV0gKyAxO1xuICAgIG0uX3NpemUgPSBzaXplLnNsaWNlKCk7XG5cbiAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBtLl9wdHIubGVuZ3RoOyBfaTIrKykge1xuICAgICAgbS5fcHRyW19pMl0gPSAwO1xuICAgIH0gLy8gMi4gUmUtaW5zZXJ0IGFsbCBlbGVtZW50cyBpbiB0aGUgcHJvcGVyIG9yZGVyIChzaW1wbGlmaWVkIGNvZGUgZnJvbSBTcGFyc2VNYXRyaXgucHJvdG90eXBlLnNldClcbiAgICAvLyBUaGlzIHN0ZXAgaXMgcHJvYmFibHkgdGhlIG1vc3QgdGltZS1jb25zdW1pbmdcblxuXG4gICAgZm9yICh2YXIgaCA9IDA7IGggPCB2YWx1ZXMubGVuZ3RoOyBoKyspIHtcbiAgICAgIHZhciBfaTMgPSByb3dJbmRleFtoXTtcbiAgICAgIHZhciBfaiA9IGNvbEluZGV4W2hdO1xuICAgICAgdmFyIHYgPSB2YWx1ZXNbaF07XG5cbiAgICAgIHZhciBrID0gX2dldFZhbHVlSW5kZXgoX2kzLCBtLl9wdHJbX2pdLCBtLl9wdHJbX2ogKyAxXSwgbS5faW5kZXgpO1xuXG4gICAgICBfaW5zZXJ0KGssIF9pMywgX2osIHYsIG0uX3ZhbHVlcywgbS5faW5kZXgsIG0uX3B0cik7XG4gICAgfSAvLyBUaGUgdmFsdWUgaW5kaWNlcyBhcmUgaW5zZXJ0ZWQgb3V0IG9mIG9yZGVyLCBidXQgYXBwYXJlbnRseSB0aGF0J3MuLi4gc3RpbGwgT0s/XG5cblxuICAgIHJldHVybiBtO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgY2xvbmUgb2YgdGhlIG1hdHJpeFxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEByZXR1cm4ge1NwYXJzZU1hdHJpeH0gY2xvbmVcbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBtID0gbmV3IFNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IHRoaXMuX3ZhbHVlcyA/ICgwLCBfb2JqZWN0LmNsb25lKSh0aGlzLl92YWx1ZXMpIDogdW5kZWZpbmVkLFxuICAgICAgaW5kZXg6ICgwLCBfb2JqZWN0LmNsb25lKSh0aGlzLl9pbmRleCksXG4gICAgICBwdHI6ICgwLCBfb2JqZWN0LmNsb25lKSh0aGlzLl9wdHIpLFxuICAgICAgc2l6ZTogKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMuX3NpemUpLFxuICAgICAgZGF0YXR5cGU6IHRoaXMuX2RhdGF0eXBlXG4gICAgfSk7XG4gICAgcmV0dXJuIG07XG4gIH07XG4gIC8qKlxuICAgKiBSZXRyaWV2ZSB0aGUgc2l6ZSBvZiB0aGUgbWF0cml4LlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEByZXR1cm5zIHtudW1iZXJbXX0gc2l6ZVxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUuc2l6ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2l6ZS5zbGljZSgwKTsgLy8gY29weSB0aGUgQXJyYXlcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIG5ldyBtYXRyaXggd2l0aCB0aGUgcmVzdWx0cyBvZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZXhlY3V0ZWQgb25cbiAgICogZWFjaCBlbnRyeSBvZiB0aGUgbWF0cml4LlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgVGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIGludm9rZWQgd2l0aCB0aHJlZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcnM6IHRoZSB2YWx1ZSBvZiB0aGUgZWxlbWVudCwgdGhlIGluZGV4XG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGVsZW1lbnQsIGFuZCB0aGUgTWF0cml4IGJlaW5nIHRyYXZlcnNlZC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbc2tpcFplcm9zXSBJbnZva2UgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIG5vbi16ZXJvIHZhbHVlcyBvbmx5LlxuICAgKlxuICAgKiBAcmV0dXJuIHtTcGFyc2VNYXRyaXh9IG1hdHJpeFxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUubWFwID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBza2lwWmVyb3MpIHtcbiAgICAvLyBjaGVjayBpdCBpcyBhIHBhdHRlcm4gbWF0cml4XG4gICAgaWYgKCF0aGlzLl92YWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGludm9rZSBtYXAgb24gYSBQYXR0ZXJuIG9ubHkgbWF0cml4Jyk7XG4gICAgfSAvLyBtYXRyaXggaW5zdGFuY2VcblxuXG4gICAgdmFyIG1lID0gdGhpczsgLy8gcm93cyBhbmQgY29sdW1uc1xuXG4gICAgdmFyIHJvd3MgPSB0aGlzLl9zaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gdGhpcy5fc2l6ZVsxXTsgLy8gaW52b2tlIGNhbGxiYWNrXG5cbiAgICB2YXIgaW52b2tlID0gZnVuY3Rpb24gaW52b2tlKHYsIGksIGopIHtcbiAgICAgIC8vIGludm9rZSBjYWxsYmFja1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKHYsIFtpLCBqXSwgbWUpO1xuICAgIH07IC8vIGludm9rZSBfbWFwXG5cblxuICAgIHJldHVybiBfbWFwKHRoaXMsIDAsIHJvd3MgLSAxLCAwLCBjb2x1bW5zIC0gMSwgaW52b2tlLCBza2lwWmVyb3MpO1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IG1hdHJpeCB3aXRoIHRoZSByZXN1bHRzIG9mIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBleGVjdXRlZCBvbiB0aGUgaW50ZXJ2YWxcbiAgICogW21pblJvdy4ubWF4Um93LCBtaW5Db2x1bW4uLm1heENvbHVtbl0uXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX21hcChtYXRyaXgsIG1pblJvdywgbWF4Um93LCBtaW5Db2x1bW4sIG1heENvbHVtbiwgY2FsbGJhY2ssIHNraXBaZXJvcykge1xuICAgIC8vIHJlc3VsdCBhcnJheXNcbiAgICB2YXIgdmFsdWVzID0gW107XG4gICAgdmFyIGluZGV4ID0gW107XG4gICAgdmFyIHB0ciA9IFtdOyAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwO1xuXG4gICAgaWYgKCgwLCBfaXMuaXNTdHJpbmcpKG1hdHJpeC5fZGF0YXR5cGUpKSB7XG4gICAgICAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGRhdGF0eXBlLCBkYXRhdHlwZSlcbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW21hdHJpeC5fZGF0YXR5cGUsIG1hdHJpeC5fZGF0YXR5cGVdKSB8fCBlcXVhbFNjYWxhcjsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIG1hdHJpeC5fZGF0YXR5cGUpO1xuICAgIH0gLy8gaW52b2tlIGNhbGxiYWNrXG5cblxuICAgIHZhciBpbnZva2UgPSBmdW5jdGlvbiBpbnZva2UodiwgeCwgeSkge1xuICAgICAgLy8gaW52b2tlIGNhbGxiYWNrXG4gICAgICB2ID0gY2FsbGJhY2sodiwgeCwgeSk7IC8vIGNoZWNrIHZhbHVlICE9IDBcblxuICAgICAgaWYgKCFlcSh2LCB6ZXJvKSkge1xuICAgICAgICAvLyBzdG9yZSB2YWx1ZVxuICAgICAgICB2YWx1ZXMucHVzaCh2KTsgLy8gaW5kZXhcblxuICAgICAgICBpbmRleC5wdXNoKHgpO1xuICAgICAgfVxuICAgIH07IC8vIGxvb3AgY29sdW1uc1xuXG5cbiAgICBmb3IgKHZhciBqID0gbWluQ29sdW1uOyBqIDw9IG1heENvbHVtbjsgaisrKSB7XG4gICAgICAvLyBzdG9yZSBwb2ludGVyIHRvIHZhbHVlcyBpbmRleFxuICAgICAgcHRyLnB1c2godmFsdWVzLmxlbmd0aCk7IC8vIGswIDw9IGsgPCBrMSB3aGVyZSBrMCA9IF9wdHJbal0gJiYgazEgPSBfcHRyW2orMV1cblxuICAgICAgdmFyIGswID0gbWF0cml4Ll9wdHJbal07XG4gICAgICB2YXIgazEgPSBtYXRyaXguX3B0cltqICsgMV07XG5cbiAgICAgIGlmIChza2lwWmVyb3MpIHtcbiAgICAgICAgLy8gbG9vcCBrIHdpdGhpbiBbazAsIGsxW1xuICAgICAgICBmb3IgKHZhciBrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgICAgLy8gcm93IGluZGV4XG4gICAgICAgICAgdmFyIGkgPSBtYXRyaXguX2luZGV4W2tdOyAvLyBjaGVjayBpIGlzIGluIHJhbmdlXG5cbiAgICAgICAgICBpZiAoaSA+PSBtaW5Sb3cgJiYgaSA8PSBtYXhSb3cpIHtcbiAgICAgICAgICAgIC8vIHZhbHVlIEAga1xuICAgICAgICAgICAgaW52b2tlKG1hdHJpeC5fdmFsdWVzW2tdLCBpIC0gbWluUm93LCBqIC0gbWluQ29sdW1uKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNyZWF0ZSBhIGNhY2hlIGhvbGRpbmcgYWxsIGRlZmluZWQgdmFsdWVzXG4gICAgICAgIHZhciBfdmFsdWVzID0ge307XG5cbiAgICAgICAgZm9yICh2YXIgX2sgPSBrMDsgX2sgPCBrMTsgX2srKykge1xuICAgICAgICAgIHZhciBfaTQgPSBtYXRyaXguX2luZGV4W19rXTtcbiAgICAgICAgICBfdmFsdWVzW19pNF0gPSBtYXRyaXguX3ZhbHVlc1tfa107XG4gICAgICAgIH0gLy8gbG9vcCBvdmVyIGFsbCByb3dzIChpbmRleGVzIGNhbiBiZSB1bm9yZGVyZWQgc28gd2UgY2FuJ3QgdXNlIHRoYXQpLFxuICAgICAgICAvLyBhbmQgZWl0aGVyIHJlYWQgdGhlIHZhbHVlIG9yIHplcm9cblxuXG4gICAgICAgIGZvciAodmFyIF9pNSA9IG1pblJvdzsgX2k1IDw9IG1heFJvdzsgX2k1KyspIHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBfaTUgaW4gX3ZhbHVlcyA/IF92YWx1ZXNbX2k1XSA6IDA7XG4gICAgICAgICAgaW52b2tlKHZhbHVlLCBfaTUgLSBtaW5Sb3csIGogLSBtaW5Db2x1bW4pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBzdG9yZSBudW1iZXIgb2YgdmFsdWVzIGluIHB0clxuXG5cbiAgICBwdHIucHVzaCh2YWx1ZXMubGVuZ3RoKTsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXhcblxuICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogdmFsdWVzLFxuICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgcHRyOiBwdHIsXG4gICAgICBzaXplOiBbbWF4Um93IC0gbWluUm93ICsgMSwgbWF4Q29sdW1uIC0gbWluQ29sdW1uICsgMV1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogRXhlY3V0ZSBhIGNhbGxiYWNrIGZ1bmN0aW9uIG9uIGVhY2ggZW50cnkgb2YgdGhlIG1hdHJpeC5cbiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayBmdW5jdGlvbiBpcyBpbnZva2VkIHdpdGggdGhyZWVcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzOiB0aGUgdmFsdWUgb2YgdGhlIGVsZW1lbnQsIHRoZSBpbmRleFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBlbGVtZW50LCBhbmQgdGhlIE1hdHJpeCBiZWluZyB0cmF2ZXJzZWQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NraXBaZXJvc10gSW52b2tlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBub24temVybyB2YWx1ZXMgb25seS5cbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHNraXBaZXJvcykge1xuICAgIC8vIGNoZWNrIGl0IGlzIGEgcGF0dGVybiBtYXRyaXhcbiAgICBpZiAoIXRoaXMuX3ZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgaW52b2tlIGZvckVhY2ggb24gYSBQYXR0ZXJuIG9ubHkgbWF0cml4Jyk7XG4gICAgfSAvLyBtYXRyaXggaW5zdGFuY2VcblxuXG4gICAgdmFyIG1lID0gdGhpczsgLy8gcm93cyBhbmQgY29sdW1uc1xuXG4gICAgdmFyIHJvd3MgPSB0aGlzLl9zaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gdGhpcy5fc2l6ZVsxXTsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gazAgPD0gayA8IGsxIHdoZXJlIGswID0gX3B0cltqXSAmJiBrMSA9IF9wdHJbaisxXVxuICAgICAgdmFyIGswID0gdGhpcy5fcHRyW2pdO1xuICAgICAgdmFyIGsxID0gdGhpcy5fcHRyW2ogKyAxXTtcblxuICAgICAgaWYgKHNraXBaZXJvcykge1xuICAgICAgICAvLyBsb29wIGsgd2l0aGluIFtrMCwgazFbXG4gICAgICAgIGZvciAodmFyIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgICAvLyByb3cgaW5kZXhcbiAgICAgICAgICB2YXIgaSA9IHRoaXMuX2luZGV4W2tdOyAvLyB2YWx1ZSBAIGtcblxuICAgICAgICAgIGNhbGxiYWNrKHRoaXMuX3ZhbHVlc1trXSwgW2ksIGpdLCBtZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGNyZWF0ZSBhIGNhY2hlIGhvbGRpbmcgYWxsIGRlZmluZWQgdmFsdWVzXG4gICAgICAgIHZhciB2YWx1ZXMgPSB7fTtcblxuICAgICAgICBmb3IgKHZhciBfazIgPSBrMDsgX2syIDwgazE7IF9rMisrKSB7XG4gICAgICAgICAgdmFyIF9pNiA9IHRoaXMuX2luZGV4W19rMl07XG4gICAgICAgICAgdmFsdWVzW19pNl0gPSB0aGlzLl92YWx1ZXNbX2syXTtcbiAgICAgICAgfSAvLyBsb29wIG92ZXIgYWxsIHJvd3MgKGluZGV4ZXMgY2FuIGJlIHVub3JkZXJlZCBzbyB3ZSBjYW4ndCB1c2UgdGhhdCksXG4gICAgICAgIC8vIGFuZCBlaXRoZXIgcmVhZCB0aGUgdmFsdWUgb3IgemVyb1xuXG5cbiAgICAgICAgZm9yICh2YXIgX2k3ID0gMDsgX2k3IDwgcm93czsgX2k3KyspIHtcbiAgICAgICAgICB2YXIgdmFsdWUgPSBfaTcgaW4gdmFsdWVzID8gdmFsdWVzW19pN10gOiAwO1xuICAgICAgICAgIGNhbGxiYWNrKHZhbHVlLCBbX2k3LCBqXSwgbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogQ3JlYXRlIGFuIEFycmF5IHdpdGggYSBjb3B5IG9mIHRoZSBkYXRhIG9mIHRoZSBTcGFyc2VNYXRyaXhcbiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeFxuICAgKiBAcmV0dXJucyB7QXJyYXl9IGFycmF5XG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS50b0FycmF5ID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBfdG9BcnJheSh0aGlzLl92YWx1ZXMsIHRoaXMuX2luZGV4LCB0aGlzLl9wdHIsIHRoaXMuX3NpemUsIHRydWUpO1xuICB9O1xuICAvKipcbiAgICogR2V0IHRoZSBwcmltaXRpdmUgdmFsdWUgb2YgdGhlIFNwYXJzZU1hdHJpeDogYSB0d28gZGltZW5zaW9ucyBhcnJheVxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEByZXR1cm5zIHtBcnJheX0gYXJyYXlcbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLnZhbHVlT2YgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF90b0FycmF5KHRoaXMuX3ZhbHVlcywgdGhpcy5faW5kZXgsIHRoaXMuX3B0ciwgdGhpcy5fc2l6ZSwgZmFsc2UpO1xuICB9O1xuXG4gIGZ1bmN0aW9uIF90b0FycmF5KHZhbHVlcywgaW5kZXgsIHB0ciwgc2l6ZSwgY29weSkge1xuICAgIC8vIHJvd3MgYW5kIGNvbHVtbnNcbiAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBzaXplWzFdOyAvLyByZXN1bHRcblxuICAgIHZhciBhID0gW107IC8vIHZhcnNcblxuICAgIHZhciBpLCBqOyAvLyBpbml0aWFsaXplIGFycmF5XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICBhW2ldID0gW107XG5cbiAgICAgIGZvciAoaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgICAgYVtpXVtqXSA9IDA7XG4gICAgICB9XG4gICAgfSAvLyBsb29wIGNvbHVtbnNcblxuXG4gICAgZm9yIChqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gazAgPD0gayA8IGsxIHdoZXJlIGswID0gX3B0cltqXSAmJiBrMSA9IF9wdHJbaisxXVxuICAgICAgdmFyIGswID0gcHRyW2pdO1xuICAgICAgdmFyIGsxID0gcHRyW2ogKyAxXTsgLy8gbG9vcCBrIHdpdGhpbiBbazAsIGsxW1xuXG4gICAgICBmb3IgKHZhciBrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIHJvdyBpbmRleFxuICAgICAgICBpID0gaW5kZXhba107IC8vIHNldCB2YWx1ZSAodXNlIG9uZSBmb3IgcGF0dGVybiBtYXRyaXgpXG5cbiAgICAgICAgYVtpXVtqXSA9IHZhbHVlcyA/IGNvcHkgPyAoMCwgX29iamVjdC5jbG9uZSkodmFsdWVzW2tdKSA6IHZhbHVlc1trXSA6IDE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGE7XG4gIH1cbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4LCB3aXRoIG9wdGlvbmFsIGZvcm1hdHRpbmcgb3B0aW9ucy5cbiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeFxuICAgKiBAcGFyYW0ge09iamVjdCB8IG51bWJlciB8IEZ1bmN0aW9ufSBbb3B0aW9uc10gIEZvcm1hdHRpbmcgb3B0aW9ucy4gU2VlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliL3V0aWxzL251bWJlcjpmb3JtYXQgZm9yIGFcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiBvZiB0aGUgYXZhaWxhYmxlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5cbiAgICogQHJldHVybnMge3N0cmluZ30gc3RyXG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5mb3JtYXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgIC8vIHJvd3MgYW5kIGNvbHVtbnNcbiAgICB2YXIgcm93cyA9IHRoaXMuX3NpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSB0aGlzLl9zaXplWzFdOyAvLyBkZW5zaXR5XG5cbiAgICB2YXIgZGVuc2l0eSA9IHRoaXMuZGVuc2l0eSgpOyAvLyByb3dzICYgY29sdW1uc1xuXG4gICAgdmFyIHN0ciA9ICdTcGFyc2UgTWF0cml4IFsnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShyb3dzLCBvcHRpb25zKSArICcgeCAnICsgKDAsIF9zdHJpbmcuZm9ybWF0KShjb2x1bW5zLCBvcHRpb25zKSArICddIGRlbnNpdHk6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKGRlbnNpdHksIG9wdGlvbnMpICsgJ1xcbic7IC8vIGxvb3AgY29sdW1uc1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIGswIDw9IGsgPCBrMSB3aGVyZSBrMCA9IF9wdHJbal0gJiYgazEgPSBfcHRyW2orMV1cbiAgICAgIHZhciBrMCA9IHRoaXMuX3B0cltqXTtcbiAgICAgIHZhciBrMSA9IHRoaXMuX3B0cltqICsgMV07IC8vIGxvb3AgayB3aXRoaW4gW2swLCBrMVtcblxuICAgICAgZm9yICh2YXIgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgICAvLyByb3cgaW5kZXhcbiAgICAgICAgdmFyIGkgPSB0aGlzLl9pbmRleFtrXTsgLy8gYXBwZW5kIHZhbHVlXG5cbiAgICAgICAgc3RyICs9ICdcXG4gICAgKCcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKGksIG9wdGlvbnMpICsgJywgJyArICgwLCBfc3RyaW5nLmZvcm1hdCkoaiwgb3B0aW9ucykgKyAnKSA9PT4gJyArICh0aGlzLl92YWx1ZXMgPyAoMCwgX3N0cmluZy5mb3JtYXQpKHRoaXMuX3ZhbHVlc1trXSwgb3B0aW9ucykgOiAnWCcpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdHI7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIG1hdHJpeFxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHN0clxuICAgKi9cblxuXG4gIFNwYXJzZU1hdHJpeC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICgwLCBfc3RyaW5nLmZvcm1hdCkodGhpcy50b0FycmF5KCkpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgbWF0cml4XG4gICAqIEBtZW1iZXJvZiBTcGFyc2VNYXRyaXhcbiAgICogQHJldHVybnMge09iamVjdH1cbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnU3BhcnNlTWF0cml4JyxcbiAgICAgIHZhbHVlczogdGhpcy5fdmFsdWVzLFxuICAgICAgaW5kZXg6IHRoaXMuX2luZGV4LFxuICAgICAgcHRyOiB0aGlzLl9wdHIsXG4gICAgICBzaXplOiB0aGlzLl9zaXplLFxuICAgICAgZGF0YXR5cGU6IHRoaXMuX2RhdGF0eXBlXG4gICAgfTtcbiAgfTtcbiAgLyoqXG4gICAqIEdldCB0aGUga3RoIE1hdHJpeCBkaWFnb25hbC5cbiAgICpcbiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeFxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlcn0gW2s9MF0gICAgIFRoZSBrdGggZGlhZ29uYWwgd2hlcmUgdGhlIHZlY3RvciB3aWxsIHJldHJpZXZlZC5cbiAgICpcbiAgICogQHJldHVybnMge01hdHJpeH0gICAgICAgICAgICAgICAgICAgICBUaGUgbWF0cml4IHZlY3RvciB3aXRoIHRoZSBkaWFnb25hbCB2YWx1ZXMuXG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LnByb3RvdHlwZS5kaWFnb25hbCA9IGZ1bmN0aW9uIChrKSB7XG4gICAgLy8gdmFsaWRhdGUgayBpZiBhbnlcbiAgICBpZiAoaykge1xuICAgICAgLy8gY29udmVydCBCaWdOdW1iZXIgdG8gYSBudW1iZXJcbiAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShrKSkge1xuICAgICAgICBrID0gay50b051bWJlcigpO1xuICAgICAgfSAvLyBpcyBtdXN0IGJlIGFuIGludGVnZXJcblxuXG4gICAgICBpZiAoISgwLCBfaXMuaXNOdW1iZXIpKGspIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKGspKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBwYXJhbWV0ZXIgayBtdXN0IGJlIGFuIGludGVnZXIgbnVtYmVyJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRlZmF1bHQgdmFsdWVcbiAgICAgIGsgPSAwO1xuICAgIH1cblxuICAgIHZhciBrU3VwZXIgPSBrID4gMCA/IGsgOiAwO1xuICAgIHZhciBrU3ViID0gayA8IDAgPyAtayA6IDA7IC8vIHJvd3MgJiBjb2x1bW5zXG5cbiAgICB2YXIgcm93cyA9IHRoaXMuX3NpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSB0aGlzLl9zaXplWzFdOyAvLyBudW1iZXIgZGlhZ29uYWwgdmFsdWVzXG5cbiAgICB2YXIgbiA9IE1hdGgubWluKHJvd3MgLSBrU3ViLCBjb2x1bW5zIC0ga1N1cGVyKTsgLy8gZGlhZ29uYWwgYXJyYXlzXG5cbiAgICB2YXIgdmFsdWVzID0gW107XG4gICAgdmFyIGluZGV4ID0gW107XG4gICAgdmFyIHB0ciA9IFtdOyAvLyBpbml0aWFsIHB0ciB2YWx1ZVxuXG4gICAgcHRyWzBdID0gMDsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqID0ga1N1cGVyOyBqIDwgY29sdW1ucyAmJiB2YWx1ZXMubGVuZ3RoIDwgbjsgaisrKSB7XG4gICAgICAvLyBrMCA8PSBrIDwgazEgd2hlcmUgazAgPSBfcHRyW2pdICYmIGsxID0gX3B0cltqKzFdXG4gICAgICB2YXIgazAgPSB0aGlzLl9wdHJbal07XG4gICAgICB2YXIgazEgPSB0aGlzLl9wdHJbaiArIDFdOyAvLyBsb29wIHggd2l0aGluIFtrMCwgazFbXG5cbiAgICAgIGZvciAodmFyIHggPSBrMDsgeCA8IGsxOyB4KyspIHtcbiAgICAgICAgLy8gcm93IGluZGV4XG4gICAgICAgIHZhciBpID0gdGhpcy5faW5kZXhbeF07IC8vIGNoZWNrIHJvd1xuXG4gICAgICAgIGlmIChpID09PSBqIC0ga1N1cGVyICsga1N1Yikge1xuICAgICAgICAgIC8vIHZhbHVlIG9uIHRoaXMgY29sdW1uXG4gICAgICAgICAgdmFsdWVzLnB1c2godGhpcy5fdmFsdWVzW3hdKTsgLy8gc3RvcmUgcm93XG5cbiAgICAgICAgICBpbmRleFt2YWx1ZXMubGVuZ3RoIC0gMV0gPSBpIC0ga1N1YjsgLy8gZXhpdCBsb29wXG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gY2xvc2UgcHRyXG5cblxuICAgIHB0ci5wdXNoKHZhbHVlcy5sZW5ndGgpOyAvLyByZXR1cm4gbWF0cml4XG5cbiAgICByZXR1cm4gbmV3IFNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IHZhbHVlcyxcbiAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgIHB0cjogcHRyLFxuICAgICAgc2l6ZTogW24sIDFdXG4gICAgfSk7XG4gIH07XG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBhIG1hdHJpeCBmcm9tIGEgSlNPTiBvYmplY3RcbiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeFxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQW4gb2JqZWN0IHN0cnVjdHVyZWQgbGlrZVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlNwYXJzZU1hdHJpeFwiLCBcInZhbHVlc1wiOiBbXSwgXCJpbmRleFwiOiBbXSwgXCJwdHJcIjogW10sIFwic2l6ZVwiOiBbXX1gLFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgbWF0aGpzIGlzIG9wdGlvbmFsXG4gICAqIEByZXR1cm5zIHtTcGFyc2VNYXRyaXh9XG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IFNwYXJzZU1hdHJpeChqc29uKTtcbiAgfTtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIGRpYWdvbmFsIG1hdHJpeC5cbiAgICpcbiAgICogQG1lbWJlcm9mIFNwYXJzZU1hdHJpeFxuICAgKiBAcGFyYW0ge0FycmF5fSBzaXplICAgICAgICAgICAgICAgICAgICAgICBUaGUgbWF0cml4IHNpemUuXG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQXJyYXkgfCBNYXRyaXggfSB2YWx1ZSAgIFRoZSB2YWx1ZXMgZm9yIHRoZSBkaWFnb25hbC5cbiAgICogQHBhcmFtIHtudW1iZXIgfCBCaWdOdW1iZXJ9IFtrPTBdICAgICAgICAgVGhlIGt0aCBkaWFnb25hbCB3aGVyZSB0aGUgdmVjdG9yIHdpbGwgYmUgZmlsbGVkIGluLlxuICAgKiBAcGFyYW0ge251bWJlcn0gW2RlZmF1bHRWYWx1ZV0gICAgICAgICAgICBUaGUgZGVmYXVsdCB2YWx1ZSBmb3Igbm9uLWRpYWdvbmFsXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGF0YXR5cGVdICAgICAgICAgICAgICAgIFRoZSBNYXRyaXggZGF0YXR5cGUsIHZhbHVlcyBtdXN0IGJlIG9mIHRoaXMgZGF0YXR5cGUuXG4gICAqXG4gICAqIEByZXR1cm5zIHtTcGFyc2VNYXRyaXh9XG4gICAqL1xuXG5cbiAgU3BhcnNlTWF0cml4LmRpYWdvbmFsID0gZnVuY3Rpb24gKHNpemUsIHZhbHVlLCBrLCBkZWZhdWx0VmFsdWUsIGRhdGF0eXBlKSB7XG4gICAgaWYgKCEoMCwgX2lzLmlzQXJyYXkpKHNpemUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBleHBlY3RlZCwgc2l6ZSBwYXJhbWV0ZXInKTtcbiAgICB9XG5cbiAgICBpZiAoc2l6ZS5sZW5ndGggIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignT25seSB0d28gZGltZW5zaW9ucyBtYXRyaXggYXJlIHN1cHBvcnRlZCcpO1xuICAgIH0gLy8gbWFwIHNpemUgJiB2YWxpZGF0ZVxuXG5cbiAgICBzaXplID0gc2l6ZS5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICAgIC8vIGNoZWNrIGl0IGlzIGEgYmlnIG51bWJlclxuICAgICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKHMpKSB7XG4gICAgICAgIC8vIGNvbnZlcnQgaXRcbiAgICAgICAgcyA9IHMudG9OdW1iZXIoKTtcbiAgICAgIH0gLy8gdmFsaWRhdGUgYXJndW1lbnRzXG5cblxuICAgICAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKShzKSB8fCAhKDAsIF9udW1iZXIuaXNJbnRlZ2VyKShzKSB8fCBzIDwgMSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1NpemUgdmFsdWVzIG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcnMnKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHM7XG4gICAgfSk7IC8vIHZhbGlkYXRlIGsgaWYgYW55XG5cbiAgICBpZiAoaykge1xuICAgICAgLy8gY29udmVydCBCaWdOdW1iZXIgdG8gYSBudW1iZXJcbiAgICAgIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKShrKSkge1xuICAgICAgICBrID0gay50b051bWJlcigpO1xuICAgICAgfSAvLyBpcyBtdXN0IGJlIGFuIGludGVnZXJcblxuXG4gICAgICBpZiAoISgwLCBfaXMuaXNOdW1iZXIpKGspIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKGspKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBwYXJhbWV0ZXIgayBtdXN0IGJlIGFuIGludGVnZXIgbnVtYmVyJyk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRlZmF1bHQgdmFsdWVcbiAgICAgIGsgPSAwO1xuICAgIH0gLy8gZXF1YWwgc2lnbmF0dXJlIHRvIHVzZVxuXG5cbiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwO1xuXG4gICAgaWYgKCgwLCBfaXMuaXNTdHJpbmcpKGRhdGF0eXBlKSkge1xuICAgICAgLy8gZmluZCBzaWduYXR1cmUgdGhhdCBtYXRjaGVzIChkYXRhdHlwZSwgZGF0YXR5cGUpXG4gICAgICBlcSA9IHR5cGVkLmZpbmQoZXF1YWxTY2FsYXIsIFtkYXRhdHlwZSwgZGF0YXR5cGVdKSB8fCBlcXVhbFNjYWxhcjsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGRhdGF0eXBlKTtcbiAgICB9XG5cbiAgICB2YXIga1N1cGVyID0gayA+IDAgPyBrIDogMDtcbiAgICB2YXIga1N1YiA9IGsgPCAwID8gLWsgOiAwOyAvLyByb3dzIGFuZCBjb2x1bW5zXG5cbiAgICB2YXIgcm93cyA9IHNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBzaXplWzFdOyAvLyBudW1iZXIgb2Ygbm9uLXplcm8gaXRlbXNcblxuICAgIHZhciBuID0gTWF0aC5taW4ocm93cyAtIGtTdWIsIGNvbHVtbnMgLSBrU3VwZXIpOyAvLyB2YWx1ZSBleHRyYWN0aW9uIGZ1bmN0aW9uXG5cbiAgICB2YXIgX3ZhbHVlOyAvLyBjaGVjayB2YWx1ZVxuXG5cbiAgICBpZiAoKDAsIF9pcy5pc0FycmF5KSh2YWx1ZSkpIHtcbiAgICAgIC8vIHZhbGlkYXRlIGFycmF5XG4gICAgICBpZiAodmFsdWUubGVuZ3RoICE9PSBuKSB7XG4gICAgICAgIC8vIG51bWJlciBvZiB2YWx1ZXMgaW4gYXJyYXkgbXVzdCBiZSBuXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB2YWx1ZSBhcnJheSBsZW5ndGgnKTtcbiAgICAgIH0gLy8gZGVmaW5lIGZ1bmN0aW9uXG5cblxuICAgICAgX3ZhbHVlID0gZnVuY3Rpb24gX3ZhbHVlKGkpIHtcbiAgICAgICAgLy8gcmV0dXJuIHZhbHVlIEAgaVxuICAgICAgICByZXR1cm4gdmFsdWVbaV07XG4gICAgICB9O1xuICAgIH0gZWxzZSBpZiAoKDAsIF9pcy5pc01hdHJpeCkodmFsdWUpKSB7XG4gICAgICAvLyBtYXRyaXggc2l6ZVxuICAgICAgdmFyIG1zID0gdmFsdWUuc2l6ZSgpOyAvLyB2YWxpZGF0ZSBtYXRyaXhcblxuICAgICAgaWYgKG1zLmxlbmd0aCAhPT0gMSB8fCBtc1swXSAhPT0gbikge1xuICAgICAgICAvLyBudW1iZXIgb2YgdmFsdWVzIGluIGFycmF5IG11c3QgYmUgblxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbWF0cml4IGxlbmd0aCcpO1xuICAgICAgfSAvLyBkZWZpbmUgZnVuY3Rpb25cblxuXG4gICAgICBfdmFsdWUgPSBmdW5jdGlvbiBfdmFsdWUoaSkge1xuICAgICAgICAvLyByZXR1cm4gdmFsdWUgQCBpXG4gICAgICAgIHJldHVybiB2YWx1ZS5nZXQoW2ldKTtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRlZmluZSBmdW5jdGlvblxuICAgICAgX3ZhbHVlID0gZnVuY3Rpb24gX3ZhbHVlKCkge1xuICAgICAgICAvLyByZXR1cm4gdmFsdWVcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfTtcbiAgICB9IC8vIGNyZWF0ZSBhcnJheXNcblxuXG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuICAgIHZhciBpbmRleCA9IFtdO1xuICAgIHZhciBwdHIgPSBbXTsgLy8gbG9vcCBpdGVtc1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIG51bWJlciBvZiByb3dzIHdpdGggdmFsdWVcbiAgICAgIHB0ci5wdXNoKHZhbHVlcy5sZW5ndGgpOyAvLyBkaWFnb25hbCBpbmRleFxuXG4gICAgICB2YXIgaSA9IGogLSBrU3VwZXI7IC8vIGNoZWNrIHdlIG5lZWQgdG8gc2V0IGRpYWdvbmFsIHZhbHVlXG5cbiAgICAgIGlmIChpID49IDAgJiYgaSA8IG4pIHtcbiAgICAgICAgLy8gZ2V0IHZhbHVlIEAgaVxuICAgICAgICB2YXIgdiA9IF92YWx1ZShpKTsgLy8gY2hlY2sgZm9yIHplcm9cblxuXG4gICAgICAgIGlmICghZXEodiwgemVybykpIHtcbiAgICAgICAgICAvLyBjb2x1bW5cbiAgICAgICAgICBpbmRleC5wdXNoKGkgKyBrU3ViKTsgLy8gYWRkIHZhbHVlXG5cbiAgICAgICAgICB2YWx1ZXMucHVzaCh2KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gbGFzdCB2YWx1ZSBzaG91bGQgYmUgbnVtYmVyIG9mIHZhbHVlc1xuXG5cbiAgICBwdHIucHVzaCh2YWx1ZXMubGVuZ3RoKTsgLy8gY3JlYXRlIFNwYXJzZU1hdHJpeFxuXG4gICAgcmV0dXJuIG5ldyBTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiB2YWx1ZXMsXG4gICAgICBpbmRleDogaW5kZXgsXG4gICAgICBwdHI6IHB0cixcbiAgICAgIHNpemU6IFtyb3dzLCBjb2x1bW5zXVxuICAgIH0pO1xuICB9O1xuICAvKipcbiAgICogU3dhcCByb3dzIGkgYW5kIGogaW4gTWF0cml4LlxuICAgKlxuICAgKiBAbWVtYmVyb2YgU3BhcnNlTWF0cml4XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpICAgICAgIE1hdHJpeCByb3cgaW5kZXggMVxuICAgKiBAcGFyYW0ge251bWJlcn0gaiAgICAgICBNYXRyaXggcm93IGluZGV4IDJcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgVGhlIG1hdHJpeCByZWZlcmVuY2VcbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXgucHJvdG90eXBlLnN3YXBSb3dzID0gZnVuY3Rpb24gKGksIGopIHtcbiAgICAvLyBjaGVjayBpbmRleFxuICAgIGlmICghKDAsIF9pcy5pc051bWJlcikoaSkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoaSkgfHwgISgwLCBfaXMuaXNOdW1iZXIpKGopIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKGopKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1JvdyBpbmRleCBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXJzJyk7XG4gICAgfSAvLyBjaGVjayBkaW1lbnNpb25zXG5cblxuICAgIGlmICh0aGlzLl9zaXplLmxlbmd0aCAhPT0gMikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdPbmx5IHR3byBkaW1lbnNpb25hbCBtYXRyaXggaXMgc3VwcG9ydGVkJyk7XG4gICAgfSAvLyB2YWxpZGF0ZSBpbmRleFxuXG5cbiAgICAoMCwgX2FycmF5LnZhbGlkYXRlSW5kZXgpKGksIHRoaXMuX3NpemVbMF0pO1xuICAgICgwLCBfYXJyYXkudmFsaWRhdGVJbmRleCkoaiwgdGhpcy5fc2l6ZVswXSk7IC8vIHN3YXAgcm93c1xuXG4gICAgU3BhcnNlTWF0cml4Ll9zd2FwUm93cyhpLCBqLCB0aGlzLl9zaXplWzFdLCB0aGlzLl92YWx1ZXMsIHRoaXMuX2luZGV4LCB0aGlzLl9wdHIpOyAvLyByZXR1cm4gY3VycmVudCBpbnN0YW5jZVxuXG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLyoqXG4gICAqIExvb3Agcm93cyB3aXRoIGRhdGEgaW4gY29sdW1uIGouXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBqICAgICAgICAgICAgQ29sdW1uXG4gICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyAgICAgICAgTWF0cml4IHZhbHVlc1xuICAgKiBAcGFyYW0ge0FycmF5fSBpbmRleCAgICAgICAgIE1hdHJpeCByb3cgaW5kZWNlc1xuICAgKiBAcGFyYW0ge0FycmF5fSBwdHIgICAgICAgICAgIE1hdHJpeCBjb2x1bW4gcG9pbnRlcnNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIGZvciBldmVyeSByb3cgaW4gY29sdW1uIGpcbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXguX2ZvckVhY2hSb3cgPSBmdW5jdGlvbiAoaiwgdmFsdWVzLCBpbmRleCwgcHRyLCBjYWxsYmFjaykge1xuICAgIC8vIGluZGVjZXMgZm9yIGNvbHVtbiBqXG4gICAgdmFyIGswID0gcHRyW2pdO1xuICAgIHZhciBrMSA9IHB0cltqICsgMV07IC8vIGxvb3BcblxuICAgIGZvciAodmFyIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgIC8vIGludm9rZSBjYWxsYmFja1xuICAgICAgY2FsbGJhY2soaW5kZXhba10sIHZhbHVlc1trXSk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogU3dhcCByb3dzIHggYW5kIHkgaW4gU3BhcnNlIE1hdHJpeCBkYXRhIHN0cnVjdHVyZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB4ICAgICAgICAgTWF0cml4IHJvdyBpbmRleCAxXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB5ICAgICAgICAgTWF0cml4IHJvdyBpbmRleCAyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb2x1bW5zICAgTnVtYmVyIG9mIGNvbHVtbnMgaW4gbWF0cml4XG4gICAqIEBwYXJhbSB7QXJyYXl9IHZhbHVlcyAgICAgTWF0cml4IHZhbHVlc1xuICAgKiBAcGFyYW0ge0FycmF5fSBpbmRleCAgICAgIE1hdHJpeCByb3cgaW5kZWNlc1xuICAgKiBAcGFyYW0ge0FycmF5fSBwdHIgICAgICAgIE1hdHJpeCBjb2x1bW4gcG9pbnRlcnNcbiAgICovXG5cblxuICBTcGFyc2VNYXRyaXguX3N3YXBSb3dzID0gZnVuY3Rpb24gKHgsIHksIGNvbHVtbnMsIHZhbHVlcywgaW5kZXgsIHB0cikge1xuICAgIC8vIGxvb3AgY29sdW1uc1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBrMCA8PSBrIDwgazEgd2hlcmUgazAgPSBfcHRyW2pdICYmIGsxID0gX3B0cltqKzFdXG4gICAgICB2YXIgazAgPSBwdHJbal07XG4gICAgICB2YXIgazEgPSBwdHJbaiArIDFdOyAvLyBmaW5kIHZhbHVlIGluZGV4IEAgeFxuXG4gICAgICB2YXIga3ggPSBfZ2V0VmFsdWVJbmRleCh4LCBrMCwgazEsIGluZGV4KTsgLy8gZmluZCB2YWx1ZSBpbmRleCBAIHhcblxuXG4gICAgICB2YXIga3kgPSBfZ2V0VmFsdWVJbmRleCh5LCBrMCwgazEsIGluZGV4KTsgLy8gY2hlY2sgYm90aCByb3dzIGV4aXN0IGluIG1hdHJpeFxuXG5cbiAgICAgIGlmIChreCA8IGsxICYmIGt5IDwgazEgJiYgaW5kZXhba3hdID09PSB4ICYmIGluZGV4W2t5XSA9PT0geSkge1xuICAgICAgICAvLyBzd2FwIHZhbHVlcyAoY2hlY2sgZm9yIHBhdHRlcm4gbWF0cml4KVxuICAgICAgICBpZiAodmFsdWVzKSB7XG4gICAgICAgICAgdmFyIHYgPSB2YWx1ZXNba3hdO1xuICAgICAgICAgIHZhbHVlc1treF0gPSB2YWx1ZXNba3ldO1xuICAgICAgICAgIHZhbHVlc1treV0gPSB2O1xuICAgICAgICB9IC8vIG5leHQgY29sdW1uXG5cblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gY2hlY2sgeCByb3cgZXhpc3QgJiBubyB5IHJvd1xuXG5cbiAgICAgIGlmIChreCA8IGsxICYmIGluZGV4W2t4XSA9PT0geCAmJiAoa3kgPj0gazEgfHwgaW5kZXhba3ldICE9PSB5KSkge1xuICAgICAgICAvLyB2YWx1ZSBAIHggKGNoZWNrIGZvciBwYXR0ZXJuIG1hdHJpeClcbiAgICAgICAgdmFyIHZ4ID0gdmFsdWVzID8gdmFsdWVzW2t4XSA6IHVuZGVmaW5lZDsgLy8gaW5zZXJ0IHZhbHVlIEAgeVxuXG4gICAgICAgIGluZGV4LnNwbGljZShreSwgMCwgeSk7XG5cbiAgICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICAgIHZhbHVlcy5zcGxpY2Uoa3ksIDAsIHZ4KTtcbiAgICAgICAgfSAvLyByZW1vdmUgdmFsdWUgQCB4IChhZGp1c3QgYXJyYXkgaW5kZXggaWYgbmVlZGVkKVxuXG5cbiAgICAgICAgaW5kZXguc3BsaWNlKGt5IDw9IGt4ID8ga3ggKyAxIDoga3gsIDEpO1xuXG4gICAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgICB2YWx1ZXMuc3BsaWNlKGt5IDw9IGt4ID8ga3ggKyAxIDoga3gsIDEpO1xuICAgICAgICB9IC8vIG5leHQgY29sdW1uXG5cblxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH0gLy8gY2hlY2sgeSByb3cgZXhpc3QgJiBubyB4IHJvd1xuXG5cbiAgICAgIGlmIChreSA8IGsxICYmIGluZGV4W2t5XSA9PT0geSAmJiAoa3ggPj0gazEgfHwgaW5kZXhba3hdICE9PSB4KSkge1xuICAgICAgICAvLyB2YWx1ZSBAIHkgKGNoZWNrIGZvciBwYXR0ZXJuIG1hdHJpeClcbiAgICAgICAgdmFyIHZ5ID0gdmFsdWVzID8gdmFsdWVzW2t5XSA6IHVuZGVmaW5lZDsgLy8gaW5zZXJ0IHZhbHVlIEAgeFxuXG4gICAgICAgIGluZGV4LnNwbGljZShreCwgMCwgeCk7XG5cbiAgICAgICAgaWYgKHZhbHVlcykge1xuICAgICAgICAgIHZhbHVlcy5zcGxpY2Uoa3gsIDAsIHZ5KTtcbiAgICAgICAgfSAvLyByZW1vdmUgdmFsdWUgQCB5IChhZGp1c3QgYXJyYXkgaW5kZXggaWYgbmVlZGVkKVxuXG5cbiAgICAgICAgaW5kZXguc3BsaWNlKGt4IDw9IGt5ID8ga3kgKyAxIDoga3ksIDEpO1xuXG4gICAgICAgIGlmICh2YWx1ZXMpIHtcbiAgICAgICAgICB2YWx1ZXMuc3BsaWNlKGt4IDw9IGt5ID8ga3kgKyAxIDoga3ksIDEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBTcGFyc2VNYXRyaXg7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVTcGFyc2VNYXRyaXhDbGFzcyA9IGNyZWF0ZVNwYXJzZU1hdHJpeENsYXNzOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVJbmRleCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfaXMgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvaXNcIik7XG5cbnZhciBuYW1lID0gJ2luZGV4JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ0luZGV4J107XG52YXIgY3JlYXRlSW5kZXggPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgSW5kZXggPSBfcmVmLkluZGV4O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gaW5kZXguIEFuIEluZGV4IGNhbiBzdG9yZSByYW5nZXMgaGF2aW5nIHN0YXJ0LCBzdGVwLCBhbmQgZW5kXG4gICAqIGZvciBtdWx0aXBsZSBkaW1lbnNpb25zLlxuICAgKiBNYXRyaXguZ2V0LCBNYXRyaXguc2V0LCBhbmQgbWF0aC5zdWJzZXQgYWNjZXB0IGFuIEluZGV4IGFzIGlucHV0LlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLmluZGV4KHJhbmdlMSwgcmFuZ2UyLCAuLi4pXG4gICAqXG4gICAqIFdoZXJlIGVhY2ggcmFuZ2UgY2FuIGJlIGFueSBvZjpcbiAgICpcbiAgICogLSBBIG51bWJlclxuICAgKiAtIEEgc3RyaW5nIGZvciBnZXR0aW5nL3NldHRpbmcgYW4gb2JqZWN0IHByb3BlcnR5XG4gICAqIC0gQW4gaW5zdGFuY2Ugb2YgYFJhbmdlYFxuICAgKiAtIEEgb25lLWRpbWVuc2lvbmFsIEFycmF5IG9yIGEgTWF0cml4IHdpdGggbnVtYmVyc1xuICAgKlxuICAgKiBJbmRleGVzIG11c3QgYmUgemVyby1iYXNlZCwgaW50ZWdlciBudW1iZXJzLlxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgY29uc3QgYiA9IFsxLCAyLCAzLCA0LCA1XVxuICAgKiAgICBtYXRoLnN1YnNldChiLCBtYXRoLmluZGV4KFsxLCAyLCAzXSkpICAgICAvLyByZXR1cm5zIFsyLCAzLCA0XVxuICAgKlxuICAgKiAgICBjb25zdCBhID0gbWF0aC5tYXRyaXgoW1sxLCAyXSwgWzMsIDRdXSlcbiAgICogICAgYS5zdWJzZXQobWF0aC5pbmRleCgwLCAxKSkgICAgICAgICAgICAgLy8gcmV0dXJucyAyXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICBiaWdudW1iZXIsIGJvb2xlYW4sIGNvbXBsZXgsIG1hdHJpeCwgbnVtYmVyLCBzdHJpbmcsIHVuaXRcbiAgICpcbiAgICogQHBhcmFtIHsuLi4qfSByYW5nZXMgICBaZXJvIG9yIG1vcmUgcmFuZ2VzIG9yIG51bWJlcnMuXG4gICAqIEByZXR1cm4ge0luZGV4fSAgICAgICAgUmV0dXJucyB0aGUgY3JlYXRlZCBpbmRleFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnLi4ubnVtYmVyIHwgc3RyaW5nIHwgQmlnTnVtYmVyIHwgUmFuZ2UgfCBBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIG51bWJlclN0cmluZ0JpZ051bWJlclJhbmdlQXJyYXlNYXRyaXgoYXJncykge1xuICAgICAgdmFyIHJhbmdlcyA9IGFyZ3MubWFwKGZ1bmN0aW9uIChhcmcpIHtcbiAgICAgICAgaWYgKCgwLCBfaXMuaXNCaWdOdW1iZXIpKGFyZykpIHtcbiAgICAgICAgICByZXR1cm4gYXJnLnRvTnVtYmVyKCk7IC8vIGNvbnZlcnQgQmlnTnVtYmVyIHRvIE51bWJlclxuICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSB8fCAoMCwgX2lzLmlzTWF0cml4KShhcmcpKSB7XG4gICAgICAgICAgcmV0dXJuIGFyZy5tYXAoZnVuY3Rpb24gKGVsZW0pIHtcbiAgICAgICAgICAgIC8vIGNvbnZlcnQgQmlnTnVtYmVyIHRvIE51bWJlclxuICAgICAgICAgICAgcmV0dXJuICgwLCBfaXMuaXNCaWdOdW1iZXIpKGVsZW0pID8gZWxlbS50b051bWJlcigpIDogZWxlbTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHZhciByZXMgPSBuZXcgSW5kZXgoKTtcbiAgICAgIEluZGV4LmFwcGx5KHJlcywgcmFuZ2VzKTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICB9KTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVJbmRleCA9IGNyZWF0ZUluZGV4OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVNYXRyaXggPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdtYXRyaXgnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnTWF0cml4JywgJ0RlbnNlTWF0cml4JywgJ1NwYXJzZU1hdHJpeCddO1xudmFyIGNyZWF0ZU1hdHJpeCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBNYXRyaXggPSBfcmVmLk1hdHJpeCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeCxcbiAgICAgIFNwYXJzZU1hdHJpeCA9IF9yZWYuU3BhcnNlTWF0cml4O1xuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBNYXRyaXguIFRoZSBmdW5jdGlvbiBjcmVhdGVzIGEgbmV3IGBtYXRoLk1hdHJpeGAgb2JqZWN0IGZyb21cbiAgICogYW4gYEFycmF5YC4gQSBNYXRyaXggaGFzIHV0aWxpdHkgZnVuY3Rpb25zIHRvIG1hbmlwdWxhdGUgdGhlIGRhdGEgaW4gdGhlXG4gICAqIG1hdHJpeCwgbGlrZSBnZXR0aW5nIHRoZSBzaXplIGFuZCBnZXR0aW5nIG9yIHNldHRpbmcgdmFsdWVzIGluIHRoZSBtYXRyaXguXG4gICAqIFN1cHBvcnRlZCBzdG9yYWdlIGZvcm1hdHMgYXJlICdkZW5zZScgYW5kICdzcGFyc2UnLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgIG1hdGgubWF0cml4KCkgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY3JlYXRlcyBhbiBlbXB0eSBtYXRyaXggdXNpbmcgZGVmYXVsdCBzdG9yYWdlIGZvcm1hdCAoZGVuc2UpLlxuICAgKiAgICBtYXRoLm1hdHJpeChkYXRhKSAgICAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZXMgYSBtYXRyaXggd2l0aCBpbml0aWFsIGRhdGEgdXNpbmcgZGVmYXVsdCBzdG9yYWdlIGZvcm1hdCAoZGVuc2UpLlxuICAgKiAgICBtYXRoLm1hdHJpeCgnZGVuc2UnKSAgICAgICAgICAgICAgICAgIC8vIGNyZWF0ZXMgYW4gZW1wdHkgbWF0cml4IHVzaW5nIHRoZSBnaXZlbiBzdG9yYWdlIGZvcm1hdC5cbiAgICogICAgbWF0aC5tYXRyaXgoZGF0YSwgJ2RlbnNlJykgICAgICAgICAgICAvLyBjcmVhdGVzIGEgbWF0cml4IHdpdGggaW5pdGlhbCBkYXRhIHVzaW5nIHRoZSBnaXZlbiBzdG9yYWdlIGZvcm1hdC5cbiAgICogICAgbWF0aC5tYXRyaXgoZGF0YSwgJ3NwYXJzZScpICAgICAgICAgICAvLyBjcmVhdGVzIGEgc3BhcnNlIG1hdHJpeCB3aXRoIGluaXRpYWwgZGF0YS5cbiAgICogICAgbWF0aC5tYXRyaXgoZGF0YSwgJ3NwYXJzZScsICdudW1iZXInKSAvLyBjcmVhdGVzIGEgc3BhcnNlIG1hdHJpeCB3aXRoIGluaXRpYWwgZGF0YSwgbnVtYmVyIGRhdGEgdHlwZS5cbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIGxldCBtID0gbWF0aC5tYXRyaXgoW1sxLCAyXSwgWzMsIDRdXSlcbiAgICogICAgbS5zaXplKCkgICAgICAgICAgICAgICAgICAgICAgICAvLyBBcnJheSBbMiwgMl1cbiAgICogICAgbS5yZXNpemUoWzMsIDJdLCA1KVxuICAgKiAgICBtLnZhbHVlT2YoKSAgICAgICAgICAgICAgICAgICAgIC8vIEFycmF5IFtbMSwgMl0sIFszLCA0XSwgWzUsIDVdXVxuICAgKiAgICBtLmdldChbMSwgMF0pICAgICAgICAgICAgICAgICAgICAvLyBudW1iZXIgM1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYmlnbnVtYmVyLCBib29sZWFuLCBjb21wbGV4LCBpbmRleCwgbnVtYmVyLCBzdHJpbmcsIHVuaXQsIHNwYXJzZVxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSBbZGF0YV0gICAgQSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Zvcm1hdF0gICAgICAgICAgVGhlIE1hdHJpeCBzdG9yYWdlIGZvcm1hdFxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9IFRoZSBjcmVhdGVkIG1hdHJpeFxuICAgKi9cbiAgcmV0dXJuIHR5cGVkKG5hbWUsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiBfY3JlYXRlKFtdKTtcbiAgICB9LFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKGZvcm1hdCkge1xuICAgICAgcmV0dXJuIF9jcmVhdGUoW10sIGZvcm1hdCk7XG4gICAgfSxcbiAgICAnc3RyaW5nLCBzdHJpbmcnOiBmdW5jdGlvbiBzdHJpbmdTdHJpbmcoZm9ybWF0LCBkYXRhdHlwZSkge1xuICAgICAgcmV0dXJuIF9jcmVhdGUoW10sIGZvcm1hdCwgZGF0YXR5cGUpO1xuICAgIH0sXG4gICAgQXJyYXk6IGZ1bmN0aW9uIEFycmF5KGRhdGEpIHtcbiAgICAgIHJldHVybiBfY3JlYXRlKGRhdGEpO1xuICAgIH0sXG4gICAgTWF0cml4OiBmdW5jdGlvbiBNYXRyaXgoZGF0YSkge1xuICAgICAgcmV0dXJuIF9jcmVhdGUoZGF0YSwgZGF0YS5zdG9yYWdlKCkpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBzdHJpbmcnOiBfY3JlYXRlLFxuICAgICdBcnJheSB8IE1hdHJpeCwgc3RyaW5nLCBzdHJpbmcnOiBfY3JlYXRlXG4gIH0pO1xuICAvKipcbiAgICogQ3JlYXRlIGEgbmV3IE1hdHJpeCB3aXRoIGdpdmVuIHN0b3JhZ2UgZm9ybWF0XG4gICAqIEBwYXJhbSB7QXJyYXl9IGRhdGFcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtmb3JtYXRdXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGF0YXR5cGVdXG4gICAqIEByZXR1cm5zIHtNYXRyaXh9IFJldHVybnMgYSBuZXcgTWF0cml4XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIGZ1bmN0aW9uIF9jcmVhdGUoZGF0YSwgZm9ybWF0LCBkYXRhdHlwZSkge1xuICAgIC8vIGdldCBzdG9yYWdlIGZvcm1hdCBjb25zdHJ1Y3RvclxuICAgIGlmIChmb3JtYXQgPT09ICdkZW5zZScgfHwgZm9ybWF0ID09PSAnZGVmYXVsdCcgfHwgZm9ybWF0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBuZXcgRGVuc2VNYXRyaXgoZGF0YSwgZGF0YXR5cGUpO1xuICAgIH1cblxuICAgIGlmIChmb3JtYXQgPT09ICdzcGFyc2UnKSB7XG4gICAgICByZXR1cm4gbmV3IFNwYXJzZU1hdHJpeChkYXRhLCBkYXRhdHlwZSk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBtYXRyaXggdHlwZSAnICsgSlNPTi5zdHJpbmdpZnkoZm9ybWF0KSArICcuJyk7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVNYXRyaXggPSBjcmVhdGVNYXRyaXg7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNwYXJzZSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3NwYXJzZSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdTcGFyc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVTcGFyc2UgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgU3BhcnNlTWF0cml4ID0gX3JlZi5TcGFyc2VNYXRyaXg7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIFNwYXJzZSBNYXRyaXguIFRoZSBmdW5jdGlvbiBjcmVhdGVzIGEgbmV3IGBtYXRoLk1hdHJpeGAgb2JqZWN0IGZyb21cbiAgICogYW4gYEFycmF5YC4gQSBNYXRyaXggaGFzIHV0aWxpdHkgZnVuY3Rpb25zIHRvIG1hbmlwdWxhdGUgdGhlIGRhdGEgaW4gdGhlXG4gICAqIG1hdHJpeCwgbGlrZSBnZXR0aW5nIHRoZSBzaXplIGFuZCBnZXR0aW5nIG9yIHNldHRpbmcgdmFsdWVzIGluIHRoZSBtYXRyaXguXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5zcGFyc2UoKSAgICAgICAgICAgICAgIC8vIGNyZWF0ZXMgYW4gZW1wdHkgc3BhcnNlIG1hdHJpeC5cbiAgICogICAgbWF0aC5zcGFyc2UoZGF0YSkgICAgICAgICAgIC8vIGNyZWF0ZXMgYSBzcGFyc2UgbWF0cml4IHdpdGggaW5pdGlhbCBkYXRhLlxuICAgKiAgICBtYXRoLnNwYXJzZShkYXRhLCAnbnVtYmVyJykgLy8gY3JlYXRlcyBhIHNwYXJzZSBtYXRyaXggd2l0aCBpbml0aWFsIGRhdGEsIG51bWJlciBkYXRhdHlwZS5cbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIGxldCBtID0gbWF0aC5zcGFyc2UoW1sxLCAyXSwgWzMsIDRdXSlcbiAgICogICAgbS5zaXplKCkgICAgICAgICAgICAgICAgICAgICAgICAvLyBBcnJheSBbMiwgMl1cbiAgICogICAgbS5yZXNpemUoWzMsIDJdLCA1KVxuICAgKiAgICBtLnZhbHVlT2YoKSAgICAgICAgICAgICAgICAgICAgIC8vIEFycmF5IFtbMSwgMl0sIFszLCA0XSwgWzUsIDVdXVxuICAgKiAgICBtLmdldChbMSwgMF0pICAgICAgICAgICAgICAgICAgICAvLyBudW1iZXIgM1xuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYmlnbnVtYmVyLCBib29sZWFuLCBjb21wbGV4LCBpbmRleCwgbnVtYmVyLCBzdHJpbmcsIHVuaXQsIG1hdHJpeFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSBbZGF0YV0gICAgQSB0d28gZGltZW5zaW9uYWwgYXJyYXlcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSBUaGUgY3JlYXRlZCBtYXRyaXhcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgJyc6IGZ1bmN0aW9uIF8oKSB7XG4gICAgICByZXR1cm4gbmV3IFNwYXJzZU1hdHJpeChbXSk7XG4gICAgfSxcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyhkYXRhdHlwZSkge1xuICAgICAgcmV0dXJuIG5ldyBTcGFyc2VNYXRyaXgoW10sIGRhdGF0eXBlKTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KGRhdGEpIHtcbiAgICAgIHJldHVybiBuZXcgU3BhcnNlTWF0cml4KGRhdGEpO1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4LCBzdHJpbmcnOiBmdW5jdGlvbiBBcnJheU1hdHJpeFN0cmluZyhkYXRhLCBkYXRhdHlwZSkge1xuICAgICAgcmV0dXJuIG5ldyBTcGFyc2VNYXRyaXgoZGF0YSwgZGF0YXR5cGUpO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlU3BhcnNlID0gY3JlYXRlU3BhcnNlOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0wMSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBuYW1lID0gJ2FsZ29yaXRobTAxJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQWxnb3JpdGhtMDEgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyBvdmVyIFNwYXJzZU1hdHJpeCBub256ZXJvIGl0ZW1zIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKERpaiwgU2lqKS5cbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBOTlogdGltZXMgKG51bWJlciBvZiBub256ZXJvIGl0ZW1zIGluIFNwYXJzZU1hdHJpeCkuXG4gICAqXG4gICAqXG4gICAqICAgICAgICAgIOKUjCAgZihEaWosIFNpaikgIDsgUyhpLGopICE9PSAwXG4gICAqIEMoaSxqKSA9IOKUpFxuICAgKiAgICAgICAgICDilJQgIERpaiAgICAgICAgICA7IG90aGVyd2lzZVxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBkZW5zZU1hdHJpeCAgICAgICBUaGUgRGVuc2VNYXRyaXggaW5zdGFuY2UgKEQpXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIHNwYXJzZU1hdHJpeCAgICAgIFRoZSBTcGFyc2VNYXRyaXggaW5zdGFuY2UgKFMpXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgICAgIFRoZSBmKERpaixTaWopIG9wZXJhdGlvbiB0byBpbnZva2UsIHdoZXJlIERpaiA9IERlbnNlTWF0cml4KGksaikgYW5kIFNpaiA9IFNwYXJzZU1hdHJpeChpLGopXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gIGludmVyc2UgICAgICAgICAgIEEgdHJ1ZSB2YWx1ZSBpbmRpY2F0ZXMgY2FsbGJhY2sgc2hvdWxkIGJlIGludm9rZWQgZihTaWosRGlqKVxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICAgICBEZW5zZU1hdHJpeCAoQylcbiAgICpcbiAgICogc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NkZWpvbmcvbWF0aGpzL3B1bGwvMzQ2I2lzc3VlY29tbWVudC05NzQ3NzU3MVxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTEoZGVuc2VNYXRyaXgsIHNwYXJzZU1hdHJpeCwgY2FsbGJhY2ssIGludmVyc2UpIHtcbiAgICAvLyBkZW5zZSBtYXRyaXggYXJyYXlzXG4gICAgdmFyIGFkYXRhID0gZGVuc2VNYXRyaXguX2RhdGE7XG4gICAgdmFyIGFzaXplID0gZGVuc2VNYXRyaXguX3NpemU7XG4gICAgdmFyIGFkdCA9IGRlbnNlTWF0cml4Ll9kYXRhdHlwZTsgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcblxuICAgIHZhciBidmFsdWVzID0gc3BhcnNlTWF0cml4Ll92YWx1ZXM7XG4gICAgdmFyIGJpbmRleCA9IHNwYXJzZU1hdHJpeC5faW5kZXg7XG4gICAgdmFyIGJwdHIgPSBzcGFyc2VNYXRyaXguX3B0cjtcbiAgICB2YXIgYnNpemUgPSBzcGFyc2VNYXRyaXguX3NpemU7XG4gICAgdmFyIGJkdCA9IHNwYXJzZU1hdHJpeC5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnNcblxuICAgIGlmIChhc2l6ZS5sZW5ndGggIT09IGJzaXplLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihhc2l6ZS5sZW5ndGgsIGJzaXplLmxlbmd0aCk7XG4gICAgfSAvLyBjaGVjayByb3dzICYgY29sdW1uc1xuXG5cbiAgICBpZiAoYXNpemVbMF0gIT09IGJzaXplWzBdIHx8IGFzaXplWzFdICE9PSBic2l6ZVsxXSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IEEgKCcgKyBhc2l6ZSArICcpIG11c3QgbWF0Y2ggTWF0cml4IEIgKCcgKyBic2l6ZSArICcpJyk7XG4gICAgfSAvLyBzcGFyc2UgbWF0cml4IGNhbm5vdCBiZSBhIFBhdHRlcm4gbWF0cml4XG5cblxuICAgIGlmICghYnZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGVyZm9ybSBvcGVyYXRpb24gb24gRGVuc2UgTWF0cml4IGFuZCBQYXR0ZXJuIFNwYXJzZSBNYXRyaXgnKTtcbiAgICB9IC8vIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIHZhciByb3dzID0gYXNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBhc2l6ZVsxXTsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICB2YXIgZHQgPSB0eXBlb2YgYWR0ID09PSAnc3RyaW5nJyAmJiBhZHQgPT09IGJkdCA/IGFkdCA6IHVuZGVmaW5lZDsgLy8gY2FsbGJhY2sgZnVuY3Rpb25cblxuICAgIHZhciBjZiA9IGR0ID8gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pIDogY2FsbGJhY2s7IC8vIHZhcnNcblxuICAgIHZhciBpLCBqOyAvLyByZXN1bHQgKERlbnNlTWF0cml4KVxuXG4gICAgdmFyIGNkYXRhID0gW107IC8vIGluaXRpYWxpemUgY1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgY2RhdGFbaV0gPSBbXTtcbiAgICB9IC8vIHdvcmtzcGFjZVxuXG5cbiAgICB2YXIgeCA9IFtdOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHdlIGhhdmUgYSB2YWx1ZSBpbiB4IGZvciBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHcgPSBbXTsgLy8gbG9vcCBjb2x1bW5zIGluIGJcblxuICAgIGZvciAoaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIGNvbHVtbiBtYXJrXG4gICAgICB2YXIgbWFyayA9IGogKyAxOyAvLyB2YWx1ZXMgaW4gY29sdW1uIGpcblxuICAgICAgZm9yICh2YXIgazAgPSBicHRyW2pdLCBrMSA9IGJwdHJbaiArIDFdLCBrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICBpID0gYmluZGV4W2tdOyAvLyB1cGRhdGUgd29ya3NwYWNlXG5cbiAgICAgICAgeFtpXSA9IGludmVyc2UgPyBjZihidmFsdWVzW2tdLCBhZGF0YVtpXVtqXSkgOiBjZihhZGF0YVtpXVtqXSwgYnZhbHVlc1trXSk7IC8vIG1hcmsgaSBhcyB1cGRhdGVkXG5cbiAgICAgICAgd1tpXSA9IG1hcms7XG4gICAgICB9IC8vIGxvb3Agcm93c1xuXG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgLy8gY2hlY2sgcm93IGlzIGluIHdvcmtzcGFjZVxuICAgICAgICBpZiAod1tpXSA9PT0gbWFyaykge1xuICAgICAgICAgIC8vIGNbaV1bal0gd2FzIGFscmVhZHkgY2FsY3VsYXRlZFxuICAgICAgICAgIGNkYXRhW2ldW2pdID0geFtpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBpdGVtIGRvZXMgbm90IGV4aXN0IGluIFNcbiAgICAgICAgICBjZGF0YVtpXVtqXSA9IGFkYXRhW2ldW2pdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyByZXR1cm4gZGVuc2UgbWF0cml4XG5cblxuICAgIHJldHVybiBkZW5zZU1hdHJpeC5jcmVhdGVEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiBjZGF0YSxcbiAgICAgIHNpemU6IFtyb3dzLCBjb2x1bW5zXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pO1xuICB9O1xufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTAxID0gY3JlYXRlQWxnb3JpdGhtMDE7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTAyID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9EaW1lbnNpb25FcnJvciA9IHJlcXVpcmUoXCIuLi8uLi8uLi9lcnJvci9EaW1lbnNpb25FcnJvclwiKTtcblxudmFyIG5hbWUgPSAnYWxnb3JpdGhtMDInO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnZXF1YWxTY2FsYXInXTtcbnZhciBjcmVhdGVBbGdvcml0aG0wMiA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXI7XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIG92ZXIgU3BhcnNlTWF0cml4IG5vbnplcm8gaXRlbXMgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoRGlqLCBTaWopLlxuICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIE5OWiB0aW1lcyAobnVtYmVyIG9mIG5vbnplcm8gaXRlbXMgaW4gU3BhcnNlTWF0cml4KS5cbiAgICpcbiAgICpcbiAgICogICAgICAgICAg4pSMICBmKERpaiwgU2lqKSAgOyBTKGksaikgIT09IDBcbiAgICogQyhpLGopID0g4pSkXG4gICAqICAgICAgICAgIOKUlCAgMCAgICAgICAgICAgIDsgb3RoZXJ3aXNlXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGRlbnNlTWF0cml4ICAgICAgIFRoZSBEZW5zZU1hdHJpeCBpbnN0YW5jZSAoRClcbiAgICogQHBhcmFtIHtNYXRyaXh9ICAgc3BhcnNlTWF0cml4ICAgICAgVGhlIFNwYXJzZU1hdHJpeCBpbnN0YW5jZSAoUylcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICAgICAgICAgVGhlIGYoRGlqLFNpaikgb3BlcmF0aW9uIHRvIGludm9rZSwgd2hlcmUgRGlqID0gRGVuc2VNYXRyaXgoaSxqKSBhbmQgU2lqID0gU3BhcnNlTWF0cml4KGksailcbiAgICogQHBhcmFtIHtib29sZWFufSAgaW52ZXJzZSAgICAgICAgICAgQSB0cnVlIHZhbHVlIGluZGljYXRlcyBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZCBmKFNpaixEaWopXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAoQylcbiAgICpcbiAgICogc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NkZWpvbmcvbWF0aGpzL3B1bGwvMzQ2I2lzc3VlY29tbWVudC05NzQ3NzU3MVxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTAyKGRlbnNlTWF0cml4LCBzcGFyc2VNYXRyaXgsIGNhbGxiYWNrLCBpbnZlcnNlKSB7XG4gICAgLy8gZGVuc2UgbWF0cml4IGFycmF5c1xuICAgIHZhciBhZGF0YSA9IGRlbnNlTWF0cml4Ll9kYXRhO1xuICAgIHZhciBhc2l6ZSA9IGRlbnNlTWF0cml4Ll9zaXplO1xuICAgIHZhciBhZHQgPSBkZW5zZU1hdHJpeC5fZGF0YXR5cGU7IC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgYnZhbHVlcyA9IHNwYXJzZU1hdHJpeC5fdmFsdWVzO1xuICAgIHZhciBiaW5kZXggPSBzcGFyc2VNYXRyaXguX2luZGV4O1xuICAgIHZhciBicHRyID0gc3BhcnNlTWF0cml4Ll9wdHI7XG4gICAgdmFyIGJzaXplID0gc3BhcnNlTWF0cml4Ll9zaXplO1xuICAgIHZhciBiZHQgPSBzcGFyc2VNYXRyaXguX2RhdGF0eXBlOyAvLyB2YWxpZGF0ZSBkaW1lbnNpb25zXG5cbiAgICBpZiAoYXNpemUubGVuZ3RoICE9PSBic2l6ZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoYXNpemUubGVuZ3RoLCBic2l6ZS5sZW5ndGgpO1xuICAgIH0gLy8gY2hlY2sgcm93cyAmIGNvbHVtbnNcblxuXG4gICAgaWYgKGFzaXplWzBdICE9PSBic2l6ZVswXSB8fCBhc2l6ZVsxXSAhPT0gYnNpemVbMV0pIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBBICgnICsgYXNpemUgKyAnKSBtdXN0IG1hdGNoIE1hdHJpeCBCICgnICsgYnNpemUgKyAnKScpO1xuICAgIH0gLy8gc3BhcnNlIG1hdHJpeCBjYW5ub3QgYmUgYSBQYXR0ZXJuIG1hdHJpeFxuXG5cbiAgICBpZiAoIWJ2YWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHBlcmZvcm0gb3BlcmF0aW9uIG9uIERlbnNlIE1hdHJpeCBhbmQgUGF0dGVybiBTcGFyc2UgTWF0cml4Jyk7XG4gICAgfSAvLyByb3dzICYgY29sdW1uc1xuXG5cbiAgICB2YXIgcm93cyA9IGFzaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gYXNpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGVxdWFsIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBjZiA9IGNhbGxiYWNrOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmICh0eXBlb2YgYWR0ID09PSAnc3RyaW5nJyAmJiBhZHQgPT09IGJkdCkge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgZXEgPSB0eXBlZC5maW5kKGVxdWFsU2NhbGFyLCBbZHQsIGR0XSk7IC8vIGNvbnZlcnQgMCB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICB6ZXJvID0gdHlwZWQuY29udmVydCgwLCBkdCk7IC8vIGNhbGxiYWNrXG5cbiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0IChTcGFyc2VNYXRyaXgpXG5cblxuICAgIHZhciBjdmFsdWVzID0gW107XG4gICAgdmFyIGNpbmRleCA9IFtdO1xuICAgIHZhciBjcHRyID0gW107IC8vIGxvb3AgY29sdW1ucyBpbiBiXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gdXBkYXRlIGNwdHJcbiAgICAgIGNwdHJbal0gPSBjaW5kZXgubGVuZ3RoOyAvLyB2YWx1ZXMgaW4gY29sdW1uIGpcblxuICAgICAgZm9yICh2YXIgazAgPSBicHRyW2pdLCBrMSA9IGJwdHJbaiArIDFdLCBrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICB2YXIgaSA9IGJpbmRleFtrXTsgLy8gdXBkYXRlIEMoaSxqKVxuXG4gICAgICAgIHZhciBjaWogPSBpbnZlcnNlID8gY2YoYnZhbHVlc1trXSwgYWRhdGFbaV1bal0pIDogY2YoYWRhdGFbaV1bal0sIGJ2YWx1ZXNba10pOyAvLyBjaGVjayBmb3Igbm9uemVyb1xuXG4gICAgICAgIGlmICghZXEoY2lqLCB6ZXJvKSkge1xuICAgICAgICAgIC8vIHB1c2ggaSAmIHZcbiAgICAgICAgICBjaW5kZXgucHVzaChpKTtcbiAgICAgICAgICBjdmFsdWVzLnB1c2goY2lqKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gdXBkYXRlIGNwdHJcblxuXG4gICAgY3B0cltjb2x1bW5zXSA9IGNpbmRleC5sZW5ndGg7IC8vIHJldHVybiBzcGFyc2UgbWF0cml4XG5cbiAgICByZXR1cm4gc3BhcnNlTWF0cml4LmNyZWF0ZVNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IGN2YWx1ZXMsXG4gICAgICBpbmRleDogY2luZGV4LFxuICAgICAgcHRyOiBjcHRyLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDIgPSBjcmVhdGVBbGdvcml0aG0wMjsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDMgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgbmFtZSA9ICdhbGdvcml0aG0wMyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZUFsZ29yaXRobTAzID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBTcGFyc2VNYXRyaXggaXRlbXMgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoRGlqLCBTaWopLlxuICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIE0qTiB0aW1lcy5cbiAgICpcbiAgICpcbiAgICogICAgICAgICAg4pSMICBmKERpaiwgU2lqKSAgOyBTKGksaikgIT09IDBcbiAgICogQyhpLGopID0g4pSkXG4gICAqICAgICAgICAgIOKUlCAgZihEaWosIDApICAgIDsgb3RoZXJ3aXNlXG4gICAqXG4gICAqXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGRlbnNlTWF0cml4ICAgICAgIFRoZSBEZW5zZU1hdHJpeCBpbnN0YW5jZSAoRClcbiAgICogQHBhcmFtIHtNYXRyaXh9ICAgc3BhcnNlTWF0cml4ICAgICAgVGhlIFNwYXJzZU1hdHJpeCBpbnN0YW5jZSAoQylcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICAgICAgICAgVGhlIGYoRGlqLFNpaikgb3BlcmF0aW9uIHRvIGludm9rZSwgd2hlcmUgRGlqID0gRGVuc2VNYXRyaXgoaSxqKSBhbmQgU2lqID0gU3BhcnNlTWF0cml4KGksailcbiAgICogQHBhcmFtIHtib29sZWFufSAgaW52ZXJzZSAgICAgICAgICAgQSB0cnVlIHZhbHVlIGluZGljYXRlcyBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZCBmKFNpaixEaWopXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIERlbnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NDc3NTcxXG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gYWxnb3JpdGhtMDMoZGVuc2VNYXRyaXgsIHNwYXJzZU1hdHJpeCwgY2FsbGJhY2ssIGludmVyc2UpIHtcbiAgICAvLyBkZW5zZSBtYXRyaXggYXJyYXlzXG4gICAgdmFyIGFkYXRhID0gZGVuc2VNYXRyaXguX2RhdGE7XG4gICAgdmFyIGFzaXplID0gZGVuc2VNYXRyaXguX3NpemU7XG4gICAgdmFyIGFkdCA9IGRlbnNlTWF0cml4Ll9kYXRhdHlwZTsgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcblxuICAgIHZhciBidmFsdWVzID0gc3BhcnNlTWF0cml4Ll92YWx1ZXM7XG4gICAgdmFyIGJpbmRleCA9IHNwYXJzZU1hdHJpeC5faW5kZXg7XG4gICAgdmFyIGJwdHIgPSBzcGFyc2VNYXRyaXguX3B0cjtcbiAgICB2YXIgYnNpemUgPSBzcGFyc2VNYXRyaXguX3NpemU7XG4gICAgdmFyIGJkdCA9IHNwYXJzZU1hdHJpeC5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnNcblxuICAgIGlmIChhc2l6ZS5sZW5ndGggIT09IGJzaXplLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihhc2l6ZS5sZW5ndGgsIGJzaXplLmxlbmd0aCk7XG4gICAgfSAvLyBjaGVjayByb3dzICYgY29sdW1uc1xuXG5cbiAgICBpZiAoYXNpemVbMF0gIT09IGJzaXplWzBdIHx8IGFzaXplWzFdICE9PSBic2l6ZVsxXSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IEEgKCcgKyBhc2l6ZSArICcpIG11c3QgbWF0Y2ggTWF0cml4IEIgKCcgKyBic2l6ZSArICcpJyk7XG4gICAgfSAvLyBzcGFyc2UgbWF0cml4IGNhbm5vdCBiZSBhIFBhdHRlcm4gbWF0cml4XG5cblxuICAgIGlmICghYnZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGVyZm9ybSBvcGVyYXRpb24gb24gRGVuc2UgTWF0cml4IGFuZCBQYXR0ZXJuIFNwYXJzZSBNYXRyaXgnKTtcbiAgICB9IC8vIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIHZhciByb3dzID0gYXNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBhc2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwOyAvLyBjYWxsYmFjayBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAodHlwZW9mIGFkdCA9PT0gJ3N0cmluZycgJiYgYWR0ID09PSBiZHQpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTsgLy8gY2FsbGJhY2tcblxuICAgICAgY2YgPSB0eXBlZC5maW5kKGNhbGxiYWNrLCBbZHQsIGR0XSk7XG4gICAgfSAvLyByZXN1bHQgKERlbnNlTWF0cml4KVxuXG5cbiAgICB2YXIgY2RhdGEgPSBbXTsgLy8gaW5pdGlhbGl6ZSBkZW5zZSBtYXRyaXhcblxuICAgIGZvciAodmFyIHogPSAwOyB6IDwgcm93czsgeisrKSB7XG4gICAgICAvLyBpbml0aWFsaXplIHJvd1xuICAgICAgY2RhdGFbel0gPSBbXTtcbiAgICB9IC8vIHdvcmtzcGFjZVxuXG5cbiAgICB2YXIgeCA9IFtdOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHdlIGhhdmUgYSB2YWx1ZSBpbiB4IGZvciBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHcgPSBbXTsgLy8gbG9vcCBjb2x1bW5zIGluIGJcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBjb2x1bW4gbWFya1xuICAgICAgdmFyIG1hcmsgPSBqICsgMTsgLy8gdmFsdWVzIGluIGNvbHVtbiBqXG5cbiAgICAgIGZvciAodmFyIGswID0gYnB0cltqXSwgazEgPSBicHRyW2ogKyAxXSwgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgICAvLyByb3dcbiAgICAgICAgdmFyIGkgPSBiaW5kZXhba107IC8vIHVwZGF0ZSB3b3Jrc3BhY2VcblxuICAgICAgICB4W2ldID0gaW52ZXJzZSA/IGNmKGJ2YWx1ZXNba10sIGFkYXRhW2ldW2pdKSA6IGNmKGFkYXRhW2ldW2pdLCBidmFsdWVzW2tdKTtcbiAgICAgICAgd1tpXSA9IG1hcms7XG4gICAgICB9IC8vIHByb2Nlc3Mgd29ya3NwYWNlXG5cblxuICAgICAgZm9yICh2YXIgeSA9IDA7IHkgPCByb3dzOyB5KyspIHtcbiAgICAgICAgLy8gY2hlY2sgd2UgaGF2ZSBhIGNhbGN1bGF0ZWQgdmFsdWUgZm9yIGN1cnJlbnQgcm93XG4gICAgICAgIGlmICh3W3ldID09PSBtYXJrKSB7XG4gICAgICAgICAgLy8gdXNlIGNhbGN1bGF0ZWQgdmFsdWVcbiAgICAgICAgICBjZGF0YVt5XVtqXSA9IHhbeV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gY2FsY3VsYXRlIHZhbHVlXG4gICAgICAgICAgY2RhdGFbeV1bal0gPSBpbnZlcnNlID8gY2YoemVybywgYWRhdGFbeV1bal0pIDogY2YoYWRhdGFbeV1bal0sIHplcm8pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyByZXR1cm4gZGVuc2UgbWF0cml4XG5cblxuICAgIHJldHVybiBkZW5zZU1hdHJpeC5jcmVhdGVEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiBjZGF0YSxcbiAgICAgIHNpemU6IFtyb3dzLCBjb2x1bW5zXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pO1xuICB9O1xufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTAzID0gY3JlYXRlQWxnb3JpdGhtMDM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTA0ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9EaW1lbnNpb25FcnJvciA9IHJlcXVpcmUoXCIuLi8uLi8uLi9lcnJvci9EaW1lbnNpb25FcnJvclwiKTtcblxudmFyIG5hbWUgPSAnYWxnb3JpdGhtMDQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnZXF1YWxTY2FsYXInXTtcbnZhciBjcmVhdGVBbGdvcml0aG0wNCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXI7XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIG92ZXIgU3BhcnNlTWF0cml4IEEgYW5kIFNwYXJzZU1hdHJpeCBCIG5vbnplcm8gaXRlbXMgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoQWlqLCBCaWopLlxuICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIE1BWChOTlpBLCBOTlpCKSB0aW1lc1xuICAgKlxuICAgKlxuICAgKiAgICAgICAgICDilIwgIGYoQWlqLCBCaWopICA7IEEoaSxqKSAhPT0gMCAmJiBCKGksaikgIT09IDBcbiAgICogQyhpLGopID0g4pSkICBBKGksaikgICAgICAgOyBBKGksaikgIT09IDBcbiAgICogICAgICAgICAg4pSUICBCKGksaikgICAgICAgOyBCKGksaikgIT09IDBcbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9ICAgYSAgICAgICAgICAgICAgICAgVGhlIFNwYXJzZU1hdHJpeCBpbnN0YW5jZSAoQSlcbiAgICogQHBhcmFtIHtNYXRyaXh9ICAgYiAgICAgICAgICAgICAgICAgVGhlIFNwYXJzZU1hdHJpeCBpbnN0YW5jZSAoQilcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICAgICAgICAgVGhlIGYoQWlqLEJpaikgb3BlcmF0aW9uIHRvIGludm9rZVxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICAgICBTcGFyc2VNYXRyaXggKEMpXG4gICAqXG4gICAqIHNlZSBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9wdWxsLzM0NiNpc3N1ZWNvbW1lbnQtOTc2MjAyOTRcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBhbGdvcml0aG0wNChhLCBiLCBjYWxsYmFjaykge1xuICAgIC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG4gICAgdmFyIGF2YWx1ZXMgPSBhLl92YWx1ZXM7XG4gICAgdmFyIGFpbmRleCA9IGEuX2luZGV4O1xuICAgIHZhciBhcHRyID0gYS5fcHRyO1xuICAgIHZhciBhc2l6ZSA9IGEuX3NpemU7XG4gICAgdmFyIGFkdCA9IGEuX2RhdGF0eXBlOyAvLyBzcGFyc2UgbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIGJ2YWx1ZXMgPSBiLl92YWx1ZXM7XG4gICAgdmFyIGJpbmRleCA9IGIuX2luZGV4O1xuICAgIHZhciBicHRyID0gYi5fcHRyO1xuICAgIHZhciBic2l6ZSA9IGIuX3NpemU7XG4gICAgdmFyIGJkdCA9IGIuX2RhdGF0eXBlOyAvLyB2YWxpZGF0ZSBkaW1lbnNpb25zXG5cbiAgICBpZiAoYXNpemUubGVuZ3RoICE9PSBic2l6ZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoYXNpemUubGVuZ3RoLCBic2l6ZS5sZW5ndGgpO1xuICAgIH0gLy8gY2hlY2sgcm93cyAmIGNvbHVtbnNcblxuXG4gICAgaWYgKGFzaXplWzBdICE9PSBic2l6ZVswXSB8fCBhc2l6ZVsxXSAhPT0gYnNpemVbMV0pIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBBICgnICsgYXNpemUgKyAnKSBtdXN0IG1hdGNoIE1hdHJpeCBCICgnICsgYnNpemUgKyAnKScpO1xuICAgIH0gLy8gcm93cyAmIGNvbHVtbnNcblxuXG4gICAgdmFyIHJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IGFzaXplWzFdOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwOyAvLyBjYWxsYmFjayBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAodHlwZW9mIGFkdCA9PT0gJ3N0cmluZycgJiYgYWR0ID09PSBiZHQpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gZmluZCBzaWduYXR1cmUgdGhhdCBtYXRjaGVzIChkdCwgZHQpXG5cbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZHQpOyAvLyBjYWxsYmFja1xuXG4gICAgICBjZiA9IHR5cGVkLmZpbmQoY2FsbGJhY2ssIFtkdCwgZHRdKTtcbiAgICB9IC8vIHJlc3VsdCBhcnJheXNcblxuXG4gICAgdmFyIGN2YWx1ZXMgPSBhdmFsdWVzICYmIGJ2YWx1ZXMgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgY2luZGV4ID0gW107XG4gICAgdmFyIGNwdHIgPSBbXTsgLy8gd29ya3NwYWNlXG5cbiAgICB2YXIgeGEgPSBhdmFsdWVzICYmIGJ2YWx1ZXMgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgeGIgPSBhdmFsdWVzICYmIGJ2YWx1ZXMgPyBbXSA6IHVuZGVmaW5lZDsgLy8gbWFya3MgaW5kaWNhdGluZyB3ZSBoYXZlIGEgdmFsdWUgaW4geCBmb3IgYSBnaXZlbiBjb2x1bW5cblxuICAgIHZhciB3YSA9IFtdO1xuICAgIHZhciB3YiA9IFtdOyAvLyB2YXJzXG5cbiAgICB2YXIgaSwgaiwgaywgazAsIGsxOyAvLyBsb29wIGNvbHVtbnNcblxuICAgIGZvciAoaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIHVwZGF0ZSBjcHRyXG4gICAgICBjcHRyW2pdID0gY2luZGV4Lmxlbmd0aDsgLy8gY29sdW1ucyBtYXJrXG5cbiAgICAgIHZhciBtYXJrID0gaiArIDE7IC8vIGxvb3AgQSg6LGopXG5cbiAgICAgIGZvciAoazAgPSBhcHRyW2pdLCBrMSA9IGFwdHJbaiArIDFdLCBrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICBpID0gYWluZGV4W2tdOyAvLyB1cGRhdGUgY1xuXG4gICAgICAgIGNpbmRleC5wdXNoKGkpOyAvLyB1cGRhdGUgd29ya3NwYWNlXG5cbiAgICAgICAgd2FbaV0gPSBtYXJrOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzXG5cbiAgICAgICAgaWYgKHhhKSB7XG4gICAgICAgICAgeGFbaV0gPSBhdmFsdWVzW2tdO1xuICAgICAgICB9XG4gICAgICB9IC8vIGxvb3AgQig6LGopXG5cblxuICAgICAgZm9yIChrMCA9IGJwdHJbal0sIGsxID0gYnB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIGkgPSBiaW5kZXhba107IC8vIGNoZWNrIHJvdyBleGlzdHMgaW4gQVxuXG4gICAgICAgIGlmICh3YVtpXSA9PT0gbWFyaykge1xuICAgICAgICAgIC8vIHVwZGF0ZSByZWNvcmQgaW4geGEgQCBpXG4gICAgICAgICAgaWYgKHhhKSB7XG4gICAgICAgICAgICAvLyBpbnZva2UgY2FsbGJhY2tcbiAgICAgICAgICAgIHZhciB2ID0gY2YoeGFbaV0sIGJ2YWx1ZXNba10pOyAvLyBjaGVjayBmb3IgemVyb1xuXG4gICAgICAgICAgICBpZiAoIWVxKHYsIHplcm8pKSB7XG4gICAgICAgICAgICAgIC8vIHVwZGF0ZSB3b3Jrc3BhY2VcbiAgICAgICAgICAgICAgeGFbaV0gPSB2O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gcmVtb3ZlIG1hcmsgKGluZGV4IHdpbGwgYmUgcmVtb3ZlZCBsYXRlcilcbiAgICAgICAgICAgICAgd2FbaV0gPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyB1cGRhdGUgY1xuICAgICAgICAgIGNpbmRleC5wdXNoKGkpOyAvLyB1cGRhdGUgd29ya3NwYWNlXG5cbiAgICAgICAgICB3YltpXSA9IG1hcms7IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyB2YWx1ZXNcblxuICAgICAgICAgIGlmICh4Yikge1xuICAgICAgICAgICAgeGJbaV0gPSBidmFsdWVzW2tdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzIChub24gcGF0dGVybiBtYXRyaXgpXG5cblxuICAgICAgaWYgKHhhICYmIHhiKSB7XG4gICAgICAgIC8vIGluaXRpYWxpemUgZmlyc3QgaW5kZXggaW4galxuICAgICAgICBrID0gY3B0cltqXTsgLy8gbG9vcCBpbmRleCBpbiBqXG5cbiAgICAgICAgd2hpbGUgKGsgPCBjaW5kZXgubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gcm93XG4gICAgICAgICAgaSA9IGNpbmRleFtrXTsgLy8gY2hlY2sgd29ya3NwYWNlIGhhcyB2YWx1ZSBAIGlcblxuICAgICAgICAgIGlmICh3YVtpXSA9PT0gbWFyaykge1xuICAgICAgICAgICAgLy8gcHVzaCB2YWx1ZSAoQWlqICE9IDAgfHwgKEFpaiAhPSAwICYmIEJpaiAhPSAwKSlcbiAgICAgICAgICAgIGN2YWx1ZXNba10gPSB4YVtpXTsgLy8gaW5jcmVtZW50IHBvaW50ZXJcblxuICAgICAgICAgICAgaysrO1xuICAgICAgICAgIH0gZWxzZSBpZiAod2JbaV0gPT09IG1hcmspIHtcbiAgICAgICAgICAgIC8vIHB1c2ggdmFsdWUgKGJpaiAhPSAwKVxuICAgICAgICAgICAgY3ZhbHVlc1trXSA9IHhiW2ldOyAvLyBpbmNyZW1lbnQgcG9pbnRlclxuXG4gICAgICAgICAgICBrKys7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHJlbW92ZSBpbmRleCBAIGtcbiAgICAgICAgICAgIGNpbmRleC5zcGxpY2UoaywgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyB1cGRhdGUgY3B0clxuXG5cbiAgICBjcHRyW2NvbHVtbnNdID0gY2luZGV4Lmxlbmd0aDsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXhcblxuICAgIHJldHVybiBhLmNyZWF0ZVNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IGN2YWx1ZXMsXG4gICAgICBpbmRleDogY2luZGV4LFxuICAgICAgcHRyOiBjcHRyLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDQgPSBjcmVhdGVBbGdvcml0aG0wNDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDUgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgbmFtZSA9ICdhbGdvcml0aG0wNSc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdlcXVhbFNjYWxhciddO1xudmFyIGNyZWF0ZUFsZ29yaXRobTA1ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcjtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBTcGFyc2VNYXRyaXggQSBhbmQgU3BhcnNlTWF0cml4IEIgbm9uemVybyBpdGVtcyBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZihBaWosIEJpaikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTUFYKE5OWkEsIE5OWkIpIHRpbWVzXG4gICAqXG4gICAqXG4gICAqICAgICAgICAgIOKUjCAgZihBaWosIEJpaikgIDsgQShpLGopICE9PSAwIHx8IEIoaSxqKSAhPT0gMFxuICAgKiBDKGksaikgPSDilKRcbiAgICogICAgICAgICAg4pSUICAwICAgICAgICAgICAgOyBvdGhlcndpc2VcbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9ICAgYSAgICAgICAgICAgICAgICAgVGhlIFNwYXJzZU1hdHJpeCBpbnN0YW5jZSAoQSlcbiAgICogQHBhcmFtIHtNYXRyaXh9ICAgYiAgICAgICAgICAgICAgICAgVGhlIFNwYXJzZU1hdHJpeCBpbnN0YW5jZSAoQilcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICAgICAgICAgVGhlIGYoQWlqLEJpaikgb3BlcmF0aW9uIHRvIGludm9rZVxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICAgICBTcGFyc2VNYXRyaXggKEMpXG4gICAqXG4gICAqIHNlZSBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9wdWxsLzM0NiNpc3N1ZWNvbW1lbnQtOTc2MjAyOTRcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBhbGdvcml0aG0wNShhLCBiLCBjYWxsYmFjaykge1xuICAgIC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG4gICAgdmFyIGF2YWx1ZXMgPSBhLl92YWx1ZXM7XG4gICAgdmFyIGFpbmRleCA9IGEuX2luZGV4O1xuICAgIHZhciBhcHRyID0gYS5fcHRyO1xuICAgIHZhciBhc2l6ZSA9IGEuX3NpemU7XG4gICAgdmFyIGFkdCA9IGEuX2RhdGF0eXBlOyAvLyBzcGFyc2UgbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIGJ2YWx1ZXMgPSBiLl92YWx1ZXM7XG4gICAgdmFyIGJpbmRleCA9IGIuX2luZGV4O1xuICAgIHZhciBicHRyID0gYi5fcHRyO1xuICAgIHZhciBic2l6ZSA9IGIuX3NpemU7XG4gICAgdmFyIGJkdCA9IGIuX2RhdGF0eXBlOyAvLyB2YWxpZGF0ZSBkaW1lbnNpb25zXG5cbiAgICBpZiAoYXNpemUubGVuZ3RoICE9PSBic2l6ZS5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoYXNpemUubGVuZ3RoLCBic2l6ZS5sZW5ndGgpO1xuICAgIH0gLy8gY2hlY2sgcm93cyAmIGNvbHVtbnNcblxuXG4gICAgaWYgKGFzaXplWzBdICE9PSBic2l6ZVswXSB8fCBhc2l6ZVsxXSAhPT0gYnNpemVbMV0pIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdEaW1lbnNpb24gbWlzbWF0Y2guIE1hdHJpeCBBICgnICsgYXNpemUgKyAnKSBtdXN0IG1hdGNoIE1hdHJpeCBCICgnICsgYnNpemUgKyAnKScpO1xuICAgIH0gLy8gcm93cyAmIGNvbHVtbnNcblxuXG4gICAgdmFyIHJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IGFzaXplWzFdOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwOyAvLyBjYWxsYmFjayBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAodHlwZW9mIGFkdCA9PT0gJ3N0cmluZycgJiYgYWR0ID09PSBiZHQpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gZmluZCBzaWduYXR1cmUgdGhhdCBtYXRjaGVzIChkdCwgZHQpXG5cbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZHQpOyAvLyBjYWxsYmFja1xuXG4gICAgICBjZiA9IHR5cGVkLmZpbmQoY2FsbGJhY2ssIFtkdCwgZHRdKTtcbiAgICB9IC8vIHJlc3VsdCBhcnJheXNcblxuXG4gICAgdmFyIGN2YWx1ZXMgPSBhdmFsdWVzICYmIGJ2YWx1ZXMgPyBbXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgY2luZGV4ID0gW107XG4gICAgdmFyIGNwdHIgPSBbXTsgLy8gd29ya3NwYWNlc1xuXG4gICAgdmFyIHhhID0gY3ZhbHVlcyA/IFtdIDogdW5kZWZpbmVkO1xuICAgIHZhciB4YiA9IGN2YWx1ZXMgPyBbXSA6IHVuZGVmaW5lZDsgLy8gbWFya3MgaW5kaWNhdGluZyB3ZSBoYXZlIGEgdmFsdWUgaW4geCBmb3IgYSBnaXZlbiBjb2x1bW5cblxuICAgIHZhciB3YSA9IFtdO1xuICAgIHZhciB3YiA9IFtdOyAvLyB2YXJzXG5cbiAgICB2YXIgaSwgaiwgaywgazE7IC8vIGxvb3AgY29sdW1uc1xuXG4gICAgZm9yIChqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gdXBkYXRlIGNwdHJcbiAgICAgIGNwdHJbal0gPSBjaW5kZXgubGVuZ3RoOyAvLyBjb2x1bW5zIG1hcmtcblxuICAgICAgdmFyIG1hcmsgPSBqICsgMTsgLy8gbG9vcCB2YWx1ZXMgQSg6LGopXG5cbiAgICAgIGZvciAoayA9IGFwdHJbal0sIGsxID0gYXB0cltqICsgMV07IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICBpID0gYWluZGV4W2tdOyAvLyBwdXNoIGluZGV4XG5cbiAgICAgICAgY2luZGV4LnB1c2goaSk7IC8vIHVwZGF0ZSB3b3Jrc3BhY2VcblxuICAgICAgICB3YVtpXSA9IG1hcms7IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyB2YWx1ZXNcblxuICAgICAgICBpZiAoeGEpIHtcbiAgICAgICAgICB4YVtpXSA9IGF2YWx1ZXNba107XG4gICAgICAgIH1cbiAgICAgIH0gLy8gbG9vcCB2YWx1ZXMgQig6LGopXG5cblxuICAgICAgZm9yIChrID0gYnB0cltqXSwgazEgPSBicHRyW2ogKyAxXTsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIGkgPSBiaW5kZXhba107IC8vIGNoZWNrIHJvdyBleGlzdGVkIGluIEFcblxuICAgICAgICBpZiAod2FbaV0gIT09IG1hcmspIHtcbiAgICAgICAgICAvLyBwdXNoIGluZGV4XG4gICAgICAgICAgY2luZGV4LnB1c2goaSk7XG4gICAgICAgIH0gLy8gdXBkYXRlIHdvcmtzcGFjZVxuXG5cbiAgICAgICAgd2JbaV0gPSBtYXJrOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzXG5cbiAgICAgICAgaWYgKHhiKSB7XG4gICAgICAgICAgeGJbaV0gPSBidmFsdWVzW2tdO1xuICAgICAgICB9XG4gICAgICB9IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyB2YWx1ZXMgKG5vbiBwYXR0ZXJuIG1hdHJpeClcblxuXG4gICAgICBpZiAoY3ZhbHVlcykge1xuICAgICAgICAvLyBpbml0aWFsaXplIGZpcnN0IGluZGV4IGluIGpcbiAgICAgICAgayA9IGNwdHJbal07IC8vIGxvb3AgaW5kZXggaW4galxuXG4gICAgICAgIHdoaWxlIChrIDwgY2luZGV4Lmxlbmd0aCkge1xuICAgICAgICAgIC8vIHJvd1xuICAgICAgICAgIGkgPSBjaW5kZXhba107IC8vIG1hcmtzXG5cbiAgICAgICAgICB2YXIgd2FpID0gd2FbaV07XG4gICAgICAgICAgdmFyIHdiaSA9IHdiW2ldOyAvLyBjaGVjayBBaWogb3IgQmlqIGFyZSBub256ZXJvXG5cbiAgICAgICAgICBpZiAod2FpID09PSBtYXJrIHx8IHdiaSA9PT0gbWFyaykge1xuICAgICAgICAgICAgLy8gbWF0cml4IHZhbHVlcyBAIGksalxuICAgICAgICAgICAgdmFyIHZhID0gd2FpID09PSBtYXJrID8geGFbaV0gOiB6ZXJvO1xuICAgICAgICAgICAgdmFyIHZiID0gd2JpID09PSBtYXJrID8geGJbaV0gOiB6ZXJvOyAvLyBDaWpcblxuICAgICAgICAgICAgdmFyIHZjID0gY2YodmEsIHZiKTsgLy8gY2hlY2sgZm9yIHplcm9cblxuICAgICAgICAgICAgaWYgKCFlcSh2YywgemVybykpIHtcbiAgICAgICAgICAgICAgLy8gcHVzaCB2YWx1ZVxuICAgICAgICAgICAgICBjdmFsdWVzLnB1c2godmMpOyAvLyBpbmNyZW1lbnQgcG9pbnRlclxuXG4gICAgICAgICAgICAgIGsrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIHJlbW92ZSB2YWx1ZSBAIGksIGRvIG5vdCBpbmNyZW1lbnQgcG9pbnRlclxuICAgICAgICAgICAgICBjaW5kZXguc3BsaWNlKGssIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gdXBkYXRlIGNwdHJcblxuXG4gICAgY3B0cltjb2x1bW5zXSA9IGNpbmRleC5sZW5ndGg7IC8vIHJldHVybiBzcGFyc2UgbWF0cml4XG5cbiAgICByZXR1cm4gYS5jcmVhdGVTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiBjdmFsdWVzLFxuICAgICAgaW5kZXg6IGNpbmRleCxcbiAgICAgIHB0cjogY3B0cixcbiAgICAgIHNpemU6IFtyb3dzLCBjb2x1bW5zXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pO1xuICB9O1xufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTA1ID0gY3JlYXRlQWxnb3JpdGhtMDU7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTA2ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9EaW1lbnNpb25FcnJvciA9IHJlcXVpcmUoXCIuLi8uLi8uLi9lcnJvci9EaW1lbnNpb25FcnJvclwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ2FsZ29yaXRobTA2JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2VxdWFsU2NhbGFyJ107XG52YXIgY3JlYXRlQWxnb3JpdGhtMDYgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyO1xuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyBvdmVyIFNwYXJzZU1hdHJpeCBBIGFuZCBTcGFyc2VNYXRyaXggQiBub256ZXJvIGl0ZW1zIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKEFpaiwgQmlqKS5cbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCAoQW56IFUgQm56KSB0aW1lcywgd2hlcmUgQW56IGFuZCBCbnogYXJlIHRoZSBub256ZXJvIGVsZW1lbnRzIGluIGJvdGggbWF0cmljZXMuXG4gICAqXG4gICAqXG4gICAqICAgICAgICAgIOKUjCAgZihBaWosIEJpaikgIDsgQShpLGopICE9PSAwICYmIEIoaSxqKSAhPT0gMFxuICAgKiBDKGksaikgPSDilKRcbiAgICogICAgICAgICAg4pSUICAwICAgICAgICAgICAgOyBvdGhlcndpc2VcbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9ICAgYSAgICAgICAgICAgICAgICAgVGhlIFNwYXJzZU1hdHJpeCBpbnN0YW5jZSAoQSlcbiAgICogQHBhcmFtIHtNYXRyaXh9ICAgYiAgICAgICAgICAgICAgICAgVGhlIFNwYXJzZU1hdHJpeCBpbnN0YW5jZSAoQilcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICAgICAgICAgVGhlIGYoQWlqLEJpaikgb3BlcmF0aW9uIHRvIGludm9rZVxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICAgICBTcGFyc2VNYXRyaXggKEMpXG4gICAqXG4gICAqIHNlZSBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9wdWxsLzM0NiNpc3N1ZWNvbW1lbnQtOTc2MjAyOTRcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBhbGdvcml0aG0wNihhLCBiLCBjYWxsYmFjaykge1xuICAgIC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG4gICAgdmFyIGF2YWx1ZXMgPSBhLl92YWx1ZXM7XG4gICAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgYnZhbHVlcyA9IGIuX3ZhbHVlcztcbiAgICB2YXIgYnNpemUgPSBiLl9zaXplO1xuICAgIHZhciBiZHQgPSBiLl9kYXRhdHlwZTsgLy8gdmFsaWRhdGUgZGltZW5zaW9uc1xuXG4gICAgaWYgKGFzaXplLmxlbmd0aCAhPT0gYnNpemUubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgX0RpbWVuc2lvbkVycm9yLkRpbWVuc2lvbkVycm9yKGFzaXplLmxlbmd0aCwgYnNpemUubGVuZ3RoKTtcbiAgICB9IC8vIGNoZWNrIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIGlmIChhc2l6ZVswXSAhPT0gYnNpemVbMF0gfHwgYXNpemVbMV0gIT09IGJzaXplWzFdKSB7XG4gICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignRGltZW5zaW9uIG1pc21hdGNoLiBNYXRyaXggQSAoJyArIGFzaXplICsgJykgbXVzdCBtYXRjaCBNYXRyaXggQiAoJyArIGJzaXplICsgJyknKTtcbiAgICB9IC8vIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIHZhciByb3dzID0gYXNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBhc2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gZXF1YWwgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGVxID0gZXF1YWxTY2FsYXI7IC8vIHplcm8gdmFsdWVcblxuICAgIHZhciB6ZXJvID0gMDsgLy8gY2FsbGJhY2sgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGNmID0gY2FsbGJhY2s7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnICYmIGFkdCA9PT0gYmR0KSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlIHRoYXQgbWF0Y2hlcyAoZHQsIGR0KVxuXG4gICAgICBlcSA9IHR5cGVkLmZpbmQoZXF1YWxTY2FsYXIsIFtkdCwgZHRdKTsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTsgLy8gY2FsbGJhY2tcblxuICAgICAgY2YgPSB0eXBlZC5maW5kKGNhbGxiYWNrLCBbZHQsIGR0XSk7XG4gICAgfSAvLyByZXN1bHQgYXJyYXlzXG5cblxuICAgIHZhciBjdmFsdWVzID0gYXZhbHVlcyAmJiBidmFsdWVzID8gW10gOiB1bmRlZmluZWQ7XG4gICAgdmFyIGNpbmRleCA9IFtdO1xuICAgIHZhciBjcHRyID0gW107IC8vIHdvcmtzcGFjZXNcblxuICAgIHZhciB4ID0gY3ZhbHVlcyA/IFtdIDogdW5kZWZpbmVkOyAvLyBtYXJrcyBpbmRpY2F0aW5nIHdlIGhhdmUgYSB2YWx1ZSBpbiB4IGZvciBhIGdpdmVuIGNvbHVtblxuXG4gICAgdmFyIHcgPSBbXTsgLy8gbWFya3MgaW5kaWNhdGluZyB2YWx1ZSBpbiBhIGdpdmVuIHJvdyBoYXMgYmVlbiB1cGRhdGVkXG5cbiAgICB2YXIgdSA9IFtdOyAvLyBsb29wIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyB1cGRhdGUgY3B0clxuICAgICAgY3B0cltqXSA9IGNpbmRleC5sZW5ndGg7IC8vIGNvbHVtbnMgbWFya1xuXG4gICAgICB2YXIgbWFyayA9IGogKyAxOyAvLyBzY2F0dGVyIHRoZSB2YWx1ZXMgb2YgQSg6LGopIGludG8gd29ya3NwYWNlXG5cbiAgICAgICgwLCBfY29sbGVjdGlvbi5zY2F0dGVyKShhLCBqLCB3LCB4LCB1LCBtYXJrLCBjaW5kZXgsIGNmKTsgLy8gc2NhdHRlciB0aGUgdmFsdWVzIG9mIEIoOixqKSBpbnRvIHdvcmtzcGFjZVxuXG4gICAgICAoMCwgX2NvbGxlY3Rpb24uc2NhdHRlcikoYiwgaiwgdywgeCwgdSwgbWFyaywgY2luZGV4LCBjZik7IC8vIGNoZWNrIHdlIG5lZWQgdG8gcHJvY2VzcyB2YWx1ZXMgKG5vbiBwYXR0ZXJuIG1hdHJpeClcblxuICAgICAgaWYgKHgpIHtcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBmaXJzdCBpbmRleCBpbiBqXG4gICAgICAgIHZhciBrID0gY3B0cltqXTsgLy8gbG9vcCBpbmRleCBpbiBqXG5cbiAgICAgICAgd2hpbGUgKGsgPCBjaW5kZXgubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gcm93XG4gICAgICAgICAgdmFyIGkgPSBjaW5kZXhba107IC8vIGNoZWNrIGZ1bmN0aW9uIHdhcyBpbnZva2VkIG9uIGN1cnJlbnQgcm93IChBaWogIT0wICYmIEJpaiAhPSAwKVxuXG4gICAgICAgICAgaWYgKHVbaV0gPT09IG1hcmspIHtcbiAgICAgICAgICAgIC8vIHZhbHVlIEAgaVxuICAgICAgICAgICAgdmFyIHYgPSB4W2ldOyAvLyBjaGVjayBmb3IgemVybyB2YWx1ZVxuXG4gICAgICAgICAgICBpZiAoIWVxKHYsIHplcm8pKSB7XG4gICAgICAgICAgICAgIC8vIHB1c2ggdmFsdWVcbiAgICAgICAgICAgICAgY3ZhbHVlcy5wdXNoKHYpOyAvLyBpbmNyZW1lbnQgcG9pbnRlclxuXG4gICAgICAgICAgICAgIGsrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIHJlbW92ZSB2YWx1ZSBAIGksIGRvIG5vdCBpbmNyZW1lbnQgcG9pbnRlclxuICAgICAgICAgICAgICBjaW5kZXguc3BsaWNlKGssIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyByZW1vdmUgdmFsdWUgQCBpLCBkbyBub3QgaW5jcmVtZW50IHBvaW50ZXJcbiAgICAgICAgICAgIGNpbmRleC5zcGxpY2UoaywgMSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpbml0aWFsaXplIGZpcnN0IGluZGV4IGluIGpcbiAgICAgICAgdmFyIHAgPSBjcHRyW2pdOyAvLyBsb29wIGluZGV4IGluIGpcblxuICAgICAgICB3aGlsZSAocCA8IGNpbmRleC5sZW5ndGgpIHtcbiAgICAgICAgICAvLyByb3dcbiAgICAgICAgICB2YXIgciA9IGNpbmRleFtwXTsgLy8gY2hlY2sgZnVuY3Rpb24gd2FzIGludm9rZWQgb24gY3VycmVudCByb3cgKEFpaiAhPTAgJiYgQmlqICE9IDApXG5cbiAgICAgICAgICBpZiAodVtyXSAhPT0gbWFyaykge1xuICAgICAgICAgICAgLy8gcmVtb3ZlIHZhbHVlIEAgaSwgZG8gbm90IGluY3JlbWVudCBwb2ludGVyXG4gICAgICAgICAgICBjaW5kZXguc3BsaWNlKHAsIDEpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBpbmNyZW1lbnQgcG9pbnRlclxuICAgICAgICAgICAgcCsrO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gdXBkYXRlIGNwdHJcblxuXG4gICAgY3B0cltjb2x1bW5zXSA9IGNpbmRleC5sZW5ndGg7IC8vIHJldHVybiBzcGFyc2UgbWF0cml4XG5cbiAgICByZXR1cm4gYS5jcmVhdGVTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiBjdmFsdWVzLFxuICAgICAgaW5kZXg6IGNpbmRleCxcbiAgICAgIHB0cjogY3B0cixcbiAgICAgIHNpemU6IFtyb3dzLCBjb2x1bW5zXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pO1xuICB9O1xufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTA2ID0gY3JlYXRlQWxnb3JpdGhtMDY7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTA3ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9EaW1lbnNpb25FcnJvciA9IHJlcXVpcmUoXCIuLi8uLi8uLi9lcnJvci9EaW1lbnNpb25FcnJvclwiKTtcblxudmFyIG5hbWUgPSAnYWxnb3JpdGhtMDcnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVBbGdvcml0aG0wNyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIG92ZXIgU3BhcnNlTWF0cml4IEEgYW5kIFNwYXJzZU1hdHJpeCBCIGl0ZW1zICh6ZXJvIGFuZCBub256ZXJvKSBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZihBaWosIEJpaikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTXhOIHRpbWVzLlxuICAgKlxuICAgKiBDKGksaikgPSBmKEFpaiwgQmlqKVxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBhICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChBKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBiICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChCKVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWosQmlqKSBvcGVyYXRpb24gdG8gaW52b2tlXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIERlbnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NjIwMjk0XG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gYWxnb3JpdGhtMDcoYSwgYiwgY2FsbGJhY2spIHtcbiAgICAvLyBzcGFyc2UgbWF0cml4IGFycmF5c1xuICAgIHZhciBhc2l6ZSA9IGEuX3NpemU7XG4gICAgdmFyIGFkdCA9IGEuX2RhdGF0eXBlOyAvLyBzcGFyc2UgbWF0cml4IGFycmF5c1xuXG4gICAgdmFyIGJzaXplID0gYi5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnNcblxuICAgIGlmIChhc2l6ZS5sZW5ndGggIT09IGJzaXplLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihhc2l6ZS5sZW5ndGgsIGJzaXplLmxlbmd0aCk7XG4gICAgfSAvLyBjaGVjayByb3dzICYgY29sdW1uc1xuXG5cbiAgICBpZiAoYXNpemVbMF0gIT09IGJzaXplWzBdIHx8IGFzaXplWzFdICE9PSBic2l6ZVsxXSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IEEgKCcgKyBhc2l6ZSArICcpIG11c3QgbWF0Y2ggTWF0cml4IEIgKCcgKyBic2l6ZSArICcpJyk7XG4gICAgfSAvLyByb3dzICYgY29sdW1uc1xuXG5cbiAgICB2YXIgcm93cyA9IGFzaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gYXNpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIHplcm8gdmFsdWVcblxuICAgIHZhciB6ZXJvID0gMDsgLy8gY2FsbGJhY2sgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGNmID0gY2FsbGJhY2s7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnICYmIGFkdCA9PT0gYmR0KSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGNvbnZlcnQgMCB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICB6ZXJvID0gdHlwZWQuY29udmVydCgwLCBkdCk7IC8vIGNhbGxiYWNrXG5cbiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pO1xuICAgIH0gLy8gdmFyc1xuXG5cbiAgICB2YXIgaSwgajsgLy8gcmVzdWx0IGFycmF5c1xuXG4gICAgdmFyIGNkYXRhID0gW107IC8vIGluaXRpYWxpemUgY1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgY2RhdGFbaV0gPSBbXTtcbiAgICB9IC8vIHdvcmtzcGFjZXNcblxuXG4gICAgdmFyIHhhID0gW107XG4gICAgdmFyIHhiID0gW107IC8vIG1hcmtzIGluZGljYXRpbmcgd2UgaGF2ZSBhIHZhbHVlIGluIHggZm9yIGEgZ2l2ZW4gY29sdW1uXG5cbiAgICB2YXIgd2EgPSBbXTtcbiAgICB2YXIgd2IgPSBbXTsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBjb2x1bW5zIG1hcmtcbiAgICAgIHZhciBtYXJrID0gaiArIDE7IC8vIHNjYXR0ZXIgdGhlIHZhbHVlcyBvZiBBKDosaikgaW50byB3b3Jrc3BhY2VcblxuICAgICAgX3NjYXR0ZXIoYSwgaiwgd2EsIHhhLCBtYXJrKTsgLy8gc2NhdHRlciB0aGUgdmFsdWVzIG9mIEIoOixqKSBpbnRvIHdvcmtzcGFjZVxuXG5cbiAgICAgIF9zY2F0dGVyKGIsIGosIHdiLCB4YiwgbWFyayk7IC8vIGxvb3Agcm93c1xuXG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgLy8gbWF0cml4IHZhbHVlcyBAIGksalxuICAgICAgICB2YXIgdmEgPSB3YVtpXSA9PT0gbWFyayA/IHhhW2ldIDogemVybztcbiAgICAgICAgdmFyIHZiID0gd2JbaV0gPT09IG1hcmsgPyB4YltpXSA6IHplcm87IC8vIGludm9rZSBjYWxsYmFja1xuXG4gICAgICAgIGNkYXRhW2ldW2pdID0gY2YodmEsIHZiKTtcbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiBkZW5zZSBtYXRyaXhcblxuXG4gICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiBjZGF0YSxcbiAgICAgIHNpemU6IFtyb3dzLCBjb2x1bW5zXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pO1xuICB9O1xuXG4gIGZ1bmN0aW9uIF9zY2F0dGVyKG0sIGosIHcsIHgsIG1hcmspIHtcbiAgICAvLyBhIGFycmF5c1xuICAgIHZhciB2YWx1ZXMgPSBtLl92YWx1ZXM7XG4gICAgdmFyIGluZGV4ID0gbS5faW5kZXg7XG4gICAgdmFyIHB0ciA9IG0uX3B0cjsgLy8gbG9vcCB2YWx1ZXMgaW4gY29sdW1uIGpcblxuICAgIGZvciAodmFyIGsgPSBwdHJbal0sIGsxID0gcHRyW2ogKyAxXTsgayA8IGsxOyBrKyspIHtcbiAgICAgIC8vIHJvd1xuICAgICAgdmFyIGkgPSBpbmRleFtrXTsgLy8gdXBkYXRlIHdvcmtzcGFjZVxuXG4gICAgICB3W2ldID0gbWFyaztcbiAgICAgIHhbaV0gPSB2YWx1ZXNba107XG4gICAgfVxuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDcgPSBjcmVhdGVBbGdvcml0aG0wNzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMDggPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uLy4uLy4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgbmFtZSA9ICdhbGdvcml0aG0wOCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdlcXVhbFNjYWxhciddO1xudmFyIGNyZWF0ZUFsZ29yaXRobTA4ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIGVxdWFsU2NhbGFyID0gX3JlZi5lcXVhbFNjYWxhcjtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBTcGFyc2VNYXRyaXggQSBhbmQgU3BhcnNlTWF0cml4IEIgbm9uemVybyBpdGVtcyBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZihBaWosIEJpaikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTUFYKE5OWkEsIE5OWkIpIHRpbWVzXG4gICAqXG4gICAqXG4gICAqICAgICAgICAgIOKUjCAgZihBaWosIEJpaikgIDsgQShpLGopICE9PSAwICYmIEIoaSxqKSAhPT0gMFxuICAgKiBDKGksaikgPSDilKQgIEEoaSxqKSAgICAgICA7IEEoaSxqKSAhPT0gMFxuICAgKiAgICAgICAgICDilJQgIDAgICAgICAgICAgICA7IG90aGVyd2lzZVxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBhICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChBKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBiICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChCKVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWosQmlqKSBvcGVyYXRpb24gdG8gaW52b2tlXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAoQylcbiAgICpcbiAgICogc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NkZWpvbmcvbWF0aGpzL3B1bGwvMzQ2I2lzc3VlY29tbWVudC05NzYyMDI5NFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTA4KGEsIGIsIGNhbGxiYWNrKSB7XG4gICAgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgYXZhbHVlcyA9IGEuX3ZhbHVlcztcbiAgICB2YXIgYWluZGV4ID0gYS5faW5kZXg7XG4gICAgdmFyIGFwdHIgPSBhLl9wdHI7XG4gICAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgYnZhbHVlcyA9IGIuX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gYi5faW5kZXg7XG4gICAgdmFyIGJwdHIgPSBiLl9wdHI7XG4gICAgdmFyIGJzaXplID0gYi5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnNcblxuICAgIGlmIChhc2l6ZS5sZW5ndGggIT09IGJzaXplLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihhc2l6ZS5sZW5ndGgsIGJzaXplLmxlbmd0aCk7XG4gICAgfSAvLyBjaGVjayByb3dzICYgY29sdW1uc1xuXG5cbiAgICBpZiAoYXNpemVbMF0gIT09IGJzaXplWzBdIHx8IGFzaXplWzFdICE9PSBic2l6ZVsxXSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IEEgKCcgKyBhc2l6ZSArICcpIG11c3QgbWF0Y2ggTWF0cml4IEIgKCcgKyBic2l6ZSArICcpJyk7XG4gICAgfSAvLyBzcGFyc2UgbWF0cml4IGNhbm5vdCBiZSBhIFBhdHRlcm4gbWF0cml4XG5cblxuICAgIGlmICghYXZhbHVlcyB8fCAhYnZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGVyZm9ybSBvcGVyYXRpb24gb24gUGF0dGVybiBTcGFyc2UgTWF0cmljZXMnKTtcbiAgICB9IC8vIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIHZhciByb3dzID0gYXNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBhc2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gZXF1YWwgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGVxID0gZXF1YWxTY2FsYXI7IC8vIHplcm8gdmFsdWVcblxuICAgIHZhciB6ZXJvID0gMDsgLy8gY2FsbGJhY2sgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGNmID0gY2FsbGJhY2s7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnICYmIGFkdCA9PT0gYmR0KSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGZpbmQgc2lnbmF0dXJlIHRoYXQgbWF0Y2hlcyAoZHQsIGR0KVxuXG4gICAgICBlcSA9IHR5cGVkLmZpbmQoZXF1YWxTY2FsYXIsIFtkdCwgZHRdKTsgLy8gY29udmVydCAwIHRvIHRoZSBzYW1lIGRhdGF0eXBlXG5cbiAgICAgIHplcm8gPSB0eXBlZC5jb252ZXJ0KDAsIGR0KTsgLy8gY2FsbGJhY2tcblxuICAgICAgY2YgPSB0eXBlZC5maW5kKGNhbGxiYWNrLCBbZHQsIGR0XSk7XG4gICAgfSAvLyByZXN1bHQgYXJyYXlzXG5cblxuICAgIHZhciBjdmFsdWVzID0gW107XG4gICAgdmFyIGNpbmRleCA9IFtdO1xuICAgIHZhciBjcHRyID0gW107IC8vIHdvcmtzcGFjZVxuXG4gICAgdmFyIHggPSBbXTsgLy8gbWFya3MgaW5kaWNhdGluZyB3ZSBoYXZlIGEgdmFsdWUgaW4geCBmb3IgYSBnaXZlbiBjb2x1bW5cblxuICAgIHZhciB3ID0gW107IC8vIHZhcnNcblxuICAgIHZhciBrLCBrMCwgazEsIGk7IC8vIGxvb3AgY29sdW1uc1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIHVwZGF0ZSBjcHRyXG4gICAgICBjcHRyW2pdID0gY2luZGV4Lmxlbmd0aDsgLy8gY29sdW1ucyBtYXJrXG5cbiAgICAgIHZhciBtYXJrID0gaiArIDE7IC8vIGxvb3AgdmFsdWVzIGluIGFcblxuICAgICAgZm9yIChrMCA9IGFwdHJbal0sIGsxID0gYXB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIGkgPSBhaW5kZXhba107IC8vIG1hcmsgd29ya3NwYWNlXG5cbiAgICAgICAgd1tpXSA9IG1hcms7IC8vIHNldCB2YWx1ZVxuXG4gICAgICAgIHhbaV0gPSBhdmFsdWVzW2tdOyAvLyBhZGQgaW5kZXhcblxuICAgICAgICBjaW5kZXgucHVzaChpKTtcbiAgICAgIH0gLy8gbG9vcCB2YWx1ZXMgaW4gYlxuXG5cbiAgICAgIGZvciAoazAgPSBicHRyW2pdLCBrMSA9IGJwdHJbaiArIDFdLCBrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICBpID0gYmluZGV4W2tdOyAvLyBjaGVjayB2YWx1ZSBleGlzdHMgaW4gd29ya3NwYWNlXG5cbiAgICAgICAgaWYgKHdbaV0gPT09IG1hcmspIHtcbiAgICAgICAgICAvLyBldmFsdWF0ZSBjYWxsYmFja1xuICAgICAgICAgIHhbaV0gPSBjZih4W2ldLCBidmFsdWVzW2tdKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBpbml0aWFsaXplIGZpcnN0IGluZGV4IGluIGpcblxuXG4gICAgICBrID0gY3B0cltqXTsgLy8gbG9vcCBpbmRleCBpbiBqXG5cbiAgICAgIHdoaWxlIChrIDwgY2luZGV4Lmxlbmd0aCkge1xuICAgICAgICAvLyByb3dcbiAgICAgICAgaSA9IGNpbmRleFtrXTsgLy8gdmFsdWUgQCBpXG5cbiAgICAgICAgdmFyIHYgPSB4W2ldOyAvLyBjaGVjayBmb3IgemVybyB2YWx1ZVxuXG4gICAgICAgIGlmICghZXEodiwgemVybykpIHtcbiAgICAgICAgICAvLyBwdXNoIHZhbHVlXG4gICAgICAgICAgY3ZhbHVlcy5wdXNoKHYpOyAvLyBpbmNyZW1lbnQgcG9pbnRlclxuXG4gICAgICAgICAgaysrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHJlbW92ZSB2YWx1ZSBAIGksIGRvIG5vdCBpbmNyZW1lbnQgcG9pbnRlclxuICAgICAgICAgIGNpbmRleC5zcGxpY2UoaywgMSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHVwZGF0ZSBjcHRyXG5cblxuICAgIGNwdHJbY29sdW1uc10gPSBjaW5kZXgubGVuZ3RoOyAvLyByZXR1cm4gc3BhcnNlIG1hdHJpeFxuXG4gICAgcmV0dXJuIGEuY3JlYXRlU3BhcnNlTWF0cml4KHtcbiAgICAgIHZhbHVlczogY3ZhbHVlcyxcbiAgICAgIGluZGV4OiBjaW5kZXgsXG4gICAgICBwdHI6IGNwdHIsXG4gICAgICBzaXplOiBbcm93cywgY29sdW1uc10sXG4gICAgICBkYXRhdHlwZTogZHRcbiAgICB9KTtcbiAgfTtcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0wOCA9IGNyZWF0ZUFsZ29yaXRobTA4OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0wOSA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfRGltZW5zaW9uRXJyb3IgPSByZXF1aXJlKFwiLi4vLi4vLi4vZXJyb3IvRGltZW5zaW9uRXJyb3JcIik7XG5cbnZhciBuYW1lID0gJ2FsZ29yaXRobTA5JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ2VxdWFsU2NhbGFyJ107XG52YXIgY3JlYXRlQWxnb3JpdGhtMDkgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkLFxuICAgICAgZXF1YWxTY2FsYXIgPSBfcmVmLmVxdWFsU2NhbGFyO1xuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyBvdmVyIFNwYXJzZU1hdHJpeCBBIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKEFpaiwgQmlqKS5cbiAgICogQ2FsbGJhY2sgZnVuY3Rpb24gaW52b2tlZCBOWkEgdGltZXMsIG51bWJlciBvZiBub256ZXJvIGVsZW1lbnRzIGluIEEuXG4gICAqXG4gICAqXG4gICAqICAgICAgICAgIOKUjCAgZihBaWosIEJpaikgIDsgQShpLGopICE9PSAwXG4gICAqIEMoaSxqKSA9IOKUpFxuICAgKiAgICAgICAgICDilJQgIDAgICAgICAgICAgICA7IG90aGVyd2lzZVxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBhICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChBKVxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBiICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChCKVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWosQmlqKSBvcGVyYXRpb24gdG8gaW52b2tlXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAoQylcbiAgICpcbiAgICogc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NkZWpvbmcvbWF0aGpzL3B1bGwvMzQ2I2lzc3VlY29tbWVudC05NzYyMDI5NFxuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTA5KGEsIGIsIGNhbGxiYWNrKSB7XG4gICAgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgYXZhbHVlcyA9IGEuX3ZhbHVlcztcbiAgICB2YXIgYWluZGV4ID0gYS5faW5kZXg7XG4gICAgdmFyIGFwdHIgPSBhLl9wdHI7XG4gICAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG5cbiAgICB2YXIgYnZhbHVlcyA9IGIuX3ZhbHVlcztcbiAgICB2YXIgYmluZGV4ID0gYi5faW5kZXg7XG4gICAgdmFyIGJwdHIgPSBiLl9wdHI7XG4gICAgdmFyIGJzaXplID0gYi5fc2l6ZTtcbiAgICB2YXIgYmR0ID0gYi5fZGF0YXR5cGU7IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnNcblxuICAgIGlmIChhc2l6ZS5sZW5ndGggIT09IGJzaXplLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihhc2l6ZS5sZW5ndGgsIGJzaXplLmxlbmd0aCk7XG4gICAgfSAvLyBjaGVjayByb3dzICYgY29sdW1uc1xuXG5cbiAgICBpZiAoYXNpemVbMF0gIT09IGJzaXplWzBdIHx8IGFzaXplWzFdICE9PSBic2l6ZVsxXSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IEEgKCcgKyBhc2l6ZSArICcpIG11c3QgbWF0Y2ggTWF0cml4IEIgKCcgKyBic2l6ZSArICcpJyk7XG4gICAgfSAvLyByb3dzICYgY29sdW1uc1xuXG5cbiAgICB2YXIgcm93cyA9IGFzaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gYXNpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGVxdWFsIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBlcSA9IGVxdWFsU2NhbGFyOyAvLyB6ZXJvIHZhbHVlXG5cbiAgICB2YXIgemVybyA9IDA7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBjZiA9IGNhbGxiYWNrOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmICh0eXBlb2YgYWR0ID09PSAnc3RyaW5nJyAmJiBhZHQgPT09IGJkdCkge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBmaW5kIHNpZ25hdHVyZSB0aGF0IG1hdGNoZXMgKGR0LCBkdClcblxuICAgICAgZXEgPSB0eXBlZC5maW5kKGVxdWFsU2NhbGFyLCBbZHQsIGR0XSk7IC8vIGNvbnZlcnQgMCB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICB6ZXJvID0gdHlwZWQuY29udmVydCgwLCBkdCk7IC8vIGNhbGxiYWNrXG5cbiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0IGFycmF5c1xuXG5cbiAgICB2YXIgY3ZhbHVlcyA9IGF2YWx1ZXMgJiYgYnZhbHVlcyA/IFtdIDogdW5kZWZpbmVkO1xuICAgIHZhciBjaW5kZXggPSBbXTtcbiAgICB2YXIgY3B0ciA9IFtdOyAvLyB3b3Jrc3BhY2VzXG5cbiAgICB2YXIgeCA9IGN2YWx1ZXMgPyBbXSA6IHVuZGVmaW5lZDsgLy8gbWFya3MgaW5kaWNhdGluZyB3ZSBoYXZlIGEgdmFsdWUgaW4geCBmb3IgYSBnaXZlbiBjb2x1bW5cblxuICAgIHZhciB3ID0gW107IC8vIHZhcnNcblxuICAgIHZhciBpLCBqLCBrLCBrMCwgazE7IC8vIGxvb3AgY29sdW1uc1xuXG4gICAgZm9yIChqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gdXBkYXRlIGNwdHJcbiAgICAgIGNwdHJbal0gPSBjaW5kZXgubGVuZ3RoOyAvLyBjb2x1bW4gbWFya1xuXG4gICAgICB2YXIgbWFyayA9IGogKyAxOyAvLyBjaGVjayB3ZSBuZWVkIHRvIHByb2Nlc3MgdmFsdWVzXG5cbiAgICAgIGlmICh4KSB7XG4gICAgICAgIC8vIGxvb3AgQig6LGopXG4gICAgICAgIGZvciAoazAgPSBicHRyW2pdLCBrMSA9IGJwdHJbaiArIDFdLCBrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgICAgLy8gcm93XG4gICAgICAgICAgaSA9IGJpbmRleFtrXTsgLy8gdXBkYXRlIHdvcmtzcGFjZVxuXG4gICAgICAgICAgd1tpXSA9IG1hcms7XG4gICAgICAgICAgeFtpXSA9IGJ2YWx1ZXNba107XG4gICAgICAgIH1cbiAgICAgIH0gLy8gbG9vcCBBKDosailcblxuXG4gICAgICBmb3IgKGswID0gYXB0cltqXSwgazEgPSBhcHRyW2ogKyAxXSwgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgICAvLyByb3dcbiAgICAgICAgaSA9IGFpbmRleFtrXTsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlc1xuXG4gICAgICAgIGlmICh4KSB7XG4gICAgICAgICAgLy8gYiB2YWx1ZSBAIGksalxuICAgICAgICAgIHZhciB2YiA9IHdbaV0gPT09IG1hcmsgPyB4W2ldIDogemVybzsgLy8gaW52b2tlIGZcblxuICAgICAgICAgIHZhciB2YyA9IGNmKGF2YWx1ZXNba10sIHZiKTsgLy8gY2hlY2sgemVybyB2YWx1ZVxuXG4gICAgICAgICAgaWYgKCFlcSh2YywgemVybykpIHtcbiAgICAgICAgICAgIC8vIHB1c2ggaW5kZXhcbiAgICAgICAgICAgIGNpbmRleC5wdXNoKGkpOyAvLyBwdXNoIHZhbHVlXG5cbiAgICAgICAgICAgIGN2YWx1ZXMucHVzaCh2Yyk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIHB1c2ggaW5kZXhcbiAgICAgICAgICBjaW5kZXgucHVzaChpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gdXBkYXRlIGNwdHJcblxuXG4gICAgY3B0cltjb2x1bW5zXSA9IGNpbmRleC5sZW5ndGg7IC8vIHJldHVybiBzcGFyc2UgbWF0cml4XG5cbiAgICByZXR1cm4gYS5jcmVhdGVTcGFyc2VNYXRyaXgoe1xuICAgICAgdmFsdWVzOiBjdmFsdWVzLFxuICAgICAgaW5kZXg6IGNpbmRleCxcbiAgICAgIHB0cjogY3B0cixcbiAgICAgIHNpemU6IFtyb3dzLCBjb2x1bW5zXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pO1xuICB9O1xufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTA5ID0gY3JlYXRlQWxnb3JpdGhtMDk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTEwID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnYWxnb3JpdGhtMTAnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnRGVuc2VNYXRyaXgnXTtcbnZhciBjcmVhdGVBbGdvcml0aG0xMCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBEZW5zZU1hdHJpeCA9IF9yZWYuRGVuc2VNYXRyaXg7XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIG92ZXIgU3BhcnNlTWF0cml4IFMgbm9uemVybyBpdGVtcyBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZihTaWosIGIpLlxuICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIE5aIHRpbWVzIChudW1iZXIgb2Ygbm9uemVybyBpdGVtcyBpbiBTKS5cbiAgICpcbiAgICpcbiAgICogICAgICAgICAg4pSMICBmKFNpaiwgYikgIDsgUyhpLGopICE9PSAwXG4gICAqIEMoaSxqKSA9IOKUpFxuICAgKiAgICAgICAgICDilJQgIGIgICAgICAgICAgOyBvdGhlcndpc2VcbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9ICAgcyAgICAgICAgICAgICAgICAgVGhlIFNwYXJzZU1hdHJpeCBpbnN0YW5jZSAoUylcbiAgICogQHBhcmFtIHtTY2FsYXJ9ICAgYiAgICAgICAgICAgICAgICAgVGhlIFNjYWxhciB2YWx1ZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWosYikgb3BlcmF0aW9uIHRvIGludm9rZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBpbnZlcnNlICAgICAgICAgICBBIHRydWUgdmFsdWUgaW5kaWNhdGVzIGNhbGxiYWNrIHNob3VsZCBiZSBpbnZva2VkIGYoYixTaWopXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIERlbnNlTWF0cml4IChDKVxuICAgKlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vam9zZGVqb25nL21hdGhqcy9wdWxsLzM0NiNpc3N1ZWNvbW1lbnQtOTc2MjY4MTNcbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiBhbGdvcml0aG0xMChzLCBiLCBjYWxsYmFjaywgaW52ZXJzZSkge1xuICAgIC8vIHNwYXJzZSBtYXRyaXggYXJyYXlzXG4gICAgdmFyIGF2YWx1ZXMgPSBzLl92YWx1ZXM7XG4gICAgdmFyIGFpbmRleCA9IHMuX2luZGV4O1xuICAgIHZhciBhcHRyID0gcy5fcHRyO1xuICAgIHZhciBhc2l6ZSA9IHMuX3NpemU7XG4gICAgdmFyIGFkdCA9IHMuX2RhdGF0eXBlOyAvLyBzcGFyc2UgbWF0cml4IGNhbm5vdCBiZSBhIFBhdHRlcm4gbWF0cml4XG5cbiAgICBpZiAoIWF2YWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IHBlcmZvcm0gb3BlcmF0aW9uIG9uIFBhdHRlcm4gU3BhcnNlIE1hdHJpeCBhbmQgU2NhbGFyIHZhbHVlJyk7XG4gICAgfSAvLyByb3dzICYgY29sdW1uc1xuXG5cbiAgICB2YXIgcm93cyA9IGFzaXplWzBdO1xuICAgIHZhciBjb2x1bW5zID0gYXNpemVbMV07IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBjZiA9IGNhbGxiYWNrOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmICh0eXBlb2YgYWR0ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBjb252ZXJ0IGIgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgYiA9IHR5cGVkLmNvbnZlcnQoYiwgZHQpOyAvLyBjYWxsYmFja1xuXG4gICAgICBjZiA9IHR5cGVkLmZpbmQoY2FsbGJhY2ssIFtkdCwgZHRdKTtcbiAgICB9IC8vIHJlc3VsdCBhcnJheXNcblxuXG4gICAgdmFyIGNkYXRhID0gW107IC8vIHdvcmtzcGFjZXNcblxuICAgIHZhciB4ID0gW107IC8vIG1hcmtzIGluZGljYXRpbmcgd2UgaGF2ZSBhIHZhbHVlIGluIHggZm9yIGEgZ2l2ZW4gY29sdW1uXG5cbiAgICB2YXIgdyA9IFtdOyAvLyBsb29wIGNvbHVtbnNcblxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgY29sdW1uczsgaisrKSB7XG4gICAgICAvLyBjb2x1bW5zIG1hcmtcbiAgICAgIHZhciBtYXJrID0gaiArIDE7IC8vIHZhbHVlcyBpbiBqXG5cbiAgICAgIGZvciAodmFyIGswID0gYXB0cltqXSwgazEgPSBhcHRyW2ogKyAxXSwgayA9IGswOyBrIDwgazE7IGsrKykge1xuICAgICAgICAvLyByb3dcbiAgICAgICAgdmFyIHIgPSBhaW5kZXhba107IC8vIHVwZGF0ZSB3b3Jrc3BhY2VcblxuICAgICAgICB4W3JdID0gYXZhbHVlc1trXTtcbiAgICAgICAgd1tyXSA9IG1hcms7XG4gICAgICB9IC8vIGxvb3Agcm93c1xuXG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICAgIC8vIGluaXRpYWxpemUgQyBvbiBmaXJzdCBjb2x1bW5cbiAgICAgICAgaWYgKGogPT09IDApIHtcbiAgICAgICAgICAvLyBjcmVhdGUgcm93IGFycmF5XG4gICAgICAgICAgY2RhdGFbaV0gPSBbXTtcbiAgICAgICAgfSAvLyBjaGVjayBzcGFyc2UgbWF0cml4IGhhcyBhIHZhbHVlIEAgaSxqXG5cblxuICAgICAgICBpZiAod1tpXSA9PT0gbWFyaykge1xuICAgICAgICAgIC8vIGludm9rZSBjYWxsYmFjaywgdXBkYXRlIENcbiAgICAgICAgICBjZGF0YVtpXVtqXSA9IGludmVyc2UgPyBjZihiLCB4W2ldKSA6IGNmKHhbaV0sIGIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGRlbnNlIG1hdHJpeCB2YWx1ZSBAIGksIGpcbiAgICAgICAgICBjZGF0YVtpXVtqXSA9IGI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiBkZW5zZSBtYXRyaXhcblxuXG4gICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiBjZGF0YSxcbiAgICAgIHNpemU6IFtyb3dzLCBjb2x1bW5zXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pO1xuICB9O1xufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTEwID0gY3JlYXRlQWxnb3JpdGhtMTA7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTExID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIG5hbWUgPSAnYWxnb3JpdGhtMTEnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnZXF1YWxTY2FsYXInXTtcbnZhciBjcmVhdGVBbGdvcml0aG0xMSA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQsXG4gICAgICBlcXVhbFNjYWxhciA9IF9yZWYuZXF1YWxTY2FsYXI7XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIG92ZXIgU3BhcnNlTWF0cml4IFMgbm9uemVybyBpdGVtcyBhbmQgaW52b2tlcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZihTaWosIGIpLlxuICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIE5aIHRpbWVzIChudW1iZXIgb2Ygbm9uemVybyBpdGVtcyBpbiBTKS5cbiAgICpcbiAgICpcbiAgICogICAgICAgICAg4pSMICBmKFNpaiwgYikgIDsgUyhpLGopICE9PSAwXG4gICAqIEMoaSxqKSA9IOKUpFxuICAgKiAgICAgICAgICDilJQgIDAgICAgICAgICAgOyBvdGhlcndpc2VcbiAgICpcbiAgICpcbiAgICogQHBhcmFtIHtNYXRyaXh9ICAgcyAgICAgICAgICAgICAgICAgVGhlIFNwYXJzZU1hdHJpeCBpbnN0YW5jZSAoUylcbiAgICogQHBhcmFtIHtTY2FsYXJ9ICAgYiAgICAgICAgICAgICAgICAgVGhlIFNjYWxhciB2YWx1ZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgICAgICAgICBUaGUgZihBaWosYikgb3BlcmF0aW9uIHRvIGludm9rZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59ICBpbnZlcnNlICAgICAgICAgICBBIHRydWUgdmFsdWUgaW5kaWNhdGVzIGNhbGxiYWNrIHNob3VsZCBiZSBpbnZva2VkIGYoYixTaWopXG4gICAqXG4gICAqIEByZXR1cm4ge01hdHJpeH0gICAgICAgICAgICAgICAgICAgIFNwYXJzZU1hdHJpeCAoQylcbiAgICpcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NjI2ODEzXG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gYWxnb3JpdGhtMTEocywgYiwgY2FsbGJhY2ssIGludmVyc2UpIHtcbiAgICAvLyBzcGFyc2UgbWF0cml4IGFycmF5c1xuICAgIHZhciBhdmFsdWVzID0gcy5fdmFsdWVzO1xuICAgIHZhciBhaW5kZXggPSBzLl9pbmRleDtcbiAgICB2YXIgYXB0ciA9IHMuX3B0cjtcbiAgICB2YXIgYXNpemUgPSBzLl9zaXplO1xuICAgIHZhciBhZHQgPSBzLl9kYXRhdHlwZTsgLy8gc3BhcnNlIG1hdHJpeCBjYW5ub3QgYmUgYSBQYXR0ZXJuIG1hdHJpeFxuXG4gICAgaWYgKCFhdmFsdWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwZXJmb3JtIG9wZXJhdGlvbiBvbiBQYXR0ZXJuIFNwYXJzZSBNYXRyaXggYW5kIFNjYWxhciB2YWx1ZScpO1xuICAgIH0gLy8gcm93cyAmIGNvbHVtbnNcblxuXG4gICAgdmFyIHJvd3MgPSBhc2l6ZVswXTtcbiAgICB2YXIgY29sdW1ucyA9IGFzaXplWzFdOyAvLyBkYXRhdHlwZVxuXG4gICAgdmFyIGR0OyAvLyBlcXVhbCBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgZXEgPSBlcXVhbFNjYWxhcjsgLy8gemVybyB2YWx1ZVxuXG4gICAgdmFyIHplcm8gPSAwOyAvLyBjYWxsYmFjayBzaWduYXR1cmUgdG8gdXNlXG5cbiAgICB2YXIgY2YgPSBjYWxsYmFjazsgLy8gcHJvY2VzcyBkYXRhIHR5cGVzXG5cbiAgICBpZiAodHlwZW9mIGFkdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIGRhdGF0eXBlXG4gICAgICBkdCA9IGFkdDsgLy8gZmluZCBzaWduYXR1cmUgdGhhdCBtYXRjaGVzIChkdCwgZHQpXG5cbiAgICAgIGVxID0gdHlwZWQuZmluZChlcXVhbFNjYWxhciwgW2R0LCBkdF0pOyAvLyBjb252ZXJ0IDAgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgemVybyA9IHR5cGVkLmNvbnZlcnQoMCwgZHQpOyAvLyBjb252ZXJ0IGIgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgYiA9IHR5cGVkLmNvbnZlcnQoYiwgZHQpOyAvLyBjYWxsYmFja1xuXG4gICAgICBjZiA9IHR5cGVkLmZpbmQoY2FsbGJhY2ssIFtkdCwgZHRdKTtcbiAgICB9IC8vIHJlc3VsdCBhcnJheXNcblxuXG4gICAgdmFyIGN2YWx1ZXMgPSBbXTtcbiAgICB2YXIgY2luZGV4ID0gW107XG4gICAgdmFyIGNwdHIgPSBbXTsgLy8gbG9vcCBjb2x1bW5zXG5cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbHVtbnM7IGorKykge1xuICAgICAgLy8gaW5pdGlhbGl6ZSBwdHJcbiAgICAgIGNwdHJbal0gPSBjaW5kZXgubGVuZ3RoOyAvLyB2YWx1ZXMgaW4galxuXG4gICAgICBmb3IgKHZhciBrMCA9IGFwdHJbal0sIGsxID0gYXB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgICAgLy8gcm93XG4gICAgICAgIHZhciBpID0gYWluZGV4W2tdOyAvLyBpbnZva2UgY2FsbGJhY2tcblxuICAgICAgICB2YXIgdiA9IGludmVyc2UgPyBjZihiLCBhdmFsdWVzW2tdKSA6IGNmKGF2YWx1ZXNba10sIGIpOyAvLyBjaGVjayB2YWx1ZSBpcyB6ZXJvXG5cbiAgICAgICAgaWYgKCFlcSh2LCB6ZXJvKSkge1xuICAgICAgICAgIC8vIHB1c2ggaW5kZXggJiB2YWx1ZVxuICAgICAgICAgIGNpbmRleC5wdXNoKGkpO1xuICAgICAgICAgIGN2YWx1ZXMucHVzaCh2KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gdXBkYXRlIHB0clxuXG5cbiAgICBjcHRyW2NvbHVtbnNdID0gY2luZGV4Lmxlbmd0aDsgLy8gcmV0dXJuIHNwYXJzZSBtYXRyaXhcblxuICAgIHJldHVybiBzLmNyZWF0ZVNwYXJzZU1hdHJpeCh7XG4gICAgICB2YWx1ZXM6IGN2YWx1ZXMsXG4gICAgICBpbmRleDogY2luZGV4LFxuICAgICAgcHRyOiBjcHRyLFxuICAgICAgc2l6ZTogW3Jvd3MsIGNvbHVtbnNdLFxuICAgICAgZGF0YXR5cGU6IGR0XG4gICAgfSk7XG4gIH07XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMTEgPSBjcmVhdGVBbGdvcml0aG0xMTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMTIgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdhbGdvcml0aG0xMic7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCcsICdEZW5zZU1hdHJpeCddO1xudmFyIGNyZWF0ZUFsZ29yaXRobTEyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIERlbnNlTWF0cml4ID0gX3JlZi5EZW5zZU1hdHJpeDtcblxuICAvKipcbiAgICogSXRlcmF0ZXMgb3ZlciBTcGFyc2VNYXRyaXggUyBub256ZXJvIGl0ZW1zIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKFNpaiwgYikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTXhOIHRpbWVzLlxuICAgKlxuICAgKlxuICAgKiAgICAgICAgICDilIwgIGYoU2lqLCBiKSAgOyBTKGksaikgIT09IDBcbiAgICogQyhpLGopID0g4pSkXG4gICAqICAgICAgICAgIOKUlCAgZigwLCBiKSAgICA7IG90aGVyd2lzZVxuICAgKlxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBzICAgICAgICAgICAgICAgICBUaGUgU3BhcnNlTWF0cml4IGluc3RhbmNlIChTKVxuICAgKiBAcGFyYW0ge1NjYWxhcn0gICBiICAgICAgICAgICAgICAgICBUaGUgU2NhbGFyIHZhbHVlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrICAgICAgICAgIFRoZSBmKEFpaixiKSBvcGVyYXRpb24gdG8gaW52b2tlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gIGludmVyc2UgICAgICAgICAgIEEgdHJ1ZSB2YWx1ZSBpbmRpY2F0ZXMgY2FsbGJhY2sgc2hvdWxkIGJlIGludm9rZWQgZihiLFNpailcbiAgICpcbiAgICogQHJldHVybiB7TWF0cml4fSAgICAgICAgICAgICAgICAgICAgRGVuc2VNYXRyaXggKEMpXG4gICAqXG4gICAqIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NkZWpvbmcvbWF0aGpzL3B1bGwvMzQ2I2lzc3VlY29tbWVudC05NzYyNjgxM1xuICAgKi9cbiAgcmV0dXJuIGZ1bmN0aW9uIGFsZ29yaXRobTEyKHMsIGIsIGNhbGxiYWNrLCBpbnZlcnNlKSB7XG4gICAgLy8gc3BhcnNlIG1hdHJpeCBhcnJheXNcbiAgICB2YXIgYXZhbHVlcyA9IHMuX3ZhbHVlcztcbiAgICB2YXIgYWluZGV4ID0gcy5faW5kZXg7XG4gICAgdmFyIGFwdHIgPSBzLl9wdHI7XG4gICAgdmFyIGFzaXplID0gcy5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gcy5fZGF0YXR5cGU7IC8vIHNwYXJzZSBtYXRyaXggY2Fubm90IGJlIGEgUGF0dGVybiBtYXRyaXhcblxuICAgIGlmICghYXZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGVyZm9ybSBvcGVyYXRpb24gb24gUGF0dGVybiBTcGFyc2UgTWF0cml4IGFuZCBTY2FsYXIgdmFsdWUnKTtcbiAgICB9IC8vIHJvd3MgJiBjb2x1bW5zXG5cblxuICAgIHZhciByb3dzID0gYXNpemVbMF07XG4gICAgdmFyIGNvbHVtbnMgPSBhc2l6ZVsxXTsgLy8gZGF0YXR5cGVcblxuICAgIHZhciBkdDsgLy8gY2FsbGJhY2sgc2lnbmF0dXJlIHRvIHVzZVxuXG4gICAgdmFyIGNmID0gY2FsbGJhY2s7IC8vIHByb2Nlc3MgZGF0YSB0eXBlc1xuXG4gICAgaWYgKHR5cGVvZiBhZHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBkYXRhdHlwZVxuICAgICAgZHQgPSBhZHQ7IC8vIGNvbnZlcnQgYiB0byB0aGUgc2FtZSBkYXRhdHlwZVxuXG4gICAgICBiID0gdHlwZWQuY29udmVydChiLCBkdCk7IC8vIGNhbGxiYWNrXG5cbiAgICAgIGNmID0gdHlwZWQuZmluZChjYWxsYmFjaywgW2R0LCBkdF0pO1xuICAgIH0gLy8gcmVzdWx0IGFycmF5c1xuXG5cbiAgICB2YXIgY2RhdGEgPSBbXTsgLy8gd29ya3NwYWNlc1xuXG4gICAgdmFyIHggPSBbXTsgLy8gbWFya3MgaW5kaWNhdGluZyB3ZSBoYXZlIGEgdmFsdWUgaW4geCBmb3IgYSBnaXZlbiBjb2x1bW5cblxuICAgIHZhciB3ID0gW107IC8vIGxvb3AgY29sdW1uc1xuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2x1bW5zOyBqKyspIHtcbiAgICAgIC8vIGNvbHVtbnMgbWFya1xuICAgICAgdmFyIG1hcmsgPSBqICsgMTsgLy8gdmFsdWVzIGluIGpcblxuICAgICAgZm9yICh2YXIgazAgPSBhcHRyW2pdLCBrMSA9IGFwdHJbaiArIDFdLCBrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAgIC8vIHJvd1xuICAgICAgICB2YXIgciA9IGFpbmRleFtrXTsgLy8gdXBkYXRlIHdvcmtzcGFjZVxuXG4gICAgICAgIHhbcl0gPSBhdmFsdWVzW2tdO1xuICAgICAgICB3W3JdID0gbWFyaztcbiAgICAgIH0gLy8gbG9vcCByb3dzXG5cblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBDIG9uIGZpcnN0IGNvbHVtblxuICAgICAgICBpZiAoaiA9PT0gMCkge1xuICAgICAgICAgIC8vIGNyZWF0ZSByb3cgYXJyYXlcbiAgICAgICAgICBjZGF0YVtpXSA9IFtdO1xuICAgICAgICB9IC8vIGNoZWNrIHNwYXJzZSBtYXRyaXggaGFzIGEgdmFsdWUgQCBpLGpcblxuXG4gICAgICAgIGlmICh3W2ldID09PSBtYXJrKSB7XG4gICAgICAgICAgLy8gaW52b2tlIGNhbGxiYWNrLCB1cGRhdGUgQ1xuICAgICAgICAgIGNkYXRhW2ldW2pdID0gaW52ZXJzZSA/IGNmKGIsIHhbaV0pIDogY2YoeFtpXSwgYik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZGVuc2UgbWF0cml4IHZhbHVlIEAgaSwgalxuICAgICAgICAgIGNkYXRhW2ldW2pdID0gaW52ZXJzZSA/IGNmKGIsIDApIDogY2YoMCwgYik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIHJldHVybiBkZW5zZSBtYXRyaXhcblxuXG4gICAgcmV0dXJuIG5ldyBEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiBjZGF0YSxcbiAgICAgIHNpemU6IFtyb3dzLCBjb2x1bW5zXSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pO1xuICB9O1xufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTEyID0gY3JlYXRlQWxnb3JpdGhtMTI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUFsZ29yaXRobTEzID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9EaW1lbnNpb25FcnJvciA9IHJlcXVpcmUoXCIuLi8uLi8uLi9lcnJvci9EaW1lbnNpb25FcnJvclwiKTtcblxudmFyIG5hbWUgPSAnYWxnb3JpdGhtMTMnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnXTtcbnZhciBjcmVhdGVBbGdvcml0aG0xMyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGVzIG92ZXIgRGVuc2VNYXRyaXggaXRlbXMgYW5kIGludm9rZXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGYoQWlqLi56LCBCaWouLnopLlxuICAgKiBDYWxsYmFjayBmdW5jdGlvbiBpbnZva2VkIE14TiB0aW1lcy5cbiAgICpcbiAgICogQyhpLGosLi4ueikgPSBmKEFpai4ueiwgQmlqLi56KVxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBhICAgICAgICAgICAgICAgICBUaGUgRGVuc2VNYXRyaXggaW5zdGFuY2UgKEEpXG4gICAqIEBwYXJhbSB7TWF0cml4fSAgIGIgICAgICAgICAgICAgICAgIFRoZSBEZW5zZU1hdHJpeCBpbnN0YW5jZSAoQilcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICAgICAgICAgVGhlIGYoQWlqLi56LEJpai4ueikgb3BlcmF0aW9uIHRvIGludm9rZVxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICAgICBEZW5zZU1hdHJpeCAoQylcbiAgICpcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NjU4NjU4XG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gYWxnb3JpdGhtMTMoYSwgYiwgY2FsbGJhY2spIHtcbiAgICAvLyBhIGFycmF5c1xuICAgIHZhciBhZGF0YSA9IGEuX2RhdGE7XG4gICAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIGIgYXJyYXlzXG5cbiAgICB2YXIgYmRhdGEgPSBiLl9kYXRhO1xuICAgIHZhciBic2l6ZSA9IGIuX3NpemU7XG4gICAgdmFyIGJkdCA9IGIuX2RhdGF0eXBlOyAvLyBjIGFycmF5c1xuXG4gICAgdmFyIGNzaXplID0gW107IC8vIHZhbGlkYXRlIGRpbWVuc2lvbnNcblxuICAgIGlmIChhc2l6ZS5sZW5ndGggIT09IGJzaXplLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihhc2l6ZS5sZW5ndGgsIGJzaXplLmxlbmd0aCk7XG4gICAgfSAvLyB2YWxpZGF0ZSBlYWNoIG9uZSBvZiB0aGUgZGltZW5zaW9uIHNpemVzXG5cblxuICAgIGZvciAodmFyIHMgPSAwOyBzIDwgYXNpemUubGVuZ3RoOyBzKyspIHtcbiAgICAgIC8vIG11c3QgbWF0Y2hcbiAgICAgIGlmIChhc2l6ZVtzXSAhPT0gYnNpemVbc10pIHtcbiAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0RpbWVuc2lvbiBtaXNtYXRjaC4gTWF0cml4IEEgKCcgKyBhc2l6ZSArICcpIG11c3QgbWF0Y2ggTWF0cml4IEIgKCcgKyBic2l6ZSArICcpJyk7XG4gICAgICB9IC8vIHVwZGF0ZSBkaW1lbnNpb24gaW4gY1xuXG5cbiAgICAgIGNzaXplW3NdID0gYXNpemVbc107XG4gICAgfSAvLyBkYXRhdHlwZVxuXG5cbiAgICB2YXIgZHQ7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBjZiA9IGNhbGxiYWNrOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmICh0eXBlb2YgYWR0ID09PSAnc3RyaW5nJyAmJiBhZHQgPT09IGJkdCkge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBjYWxsYmFja1xuXG4gICAgICBjZiA9IHR5cGVkLmZpbmQoY2FsbGJhY2ssIFtkdCwgZHRdKTtcbiAgICB9IC8vIHBvcHVsYXRlIGNkYXRhLCBpdGVyYXRlIHRocm91Z2ggZGltZW5zaW9uc1xuXG5cbiAgICB2YXIgY2RhdGEgPSBjc2l6ZS5sZW5ndGggPiAwID8gX2l0ZXJhdGUoY2YsIDAsIGNzaXplLCBjc2l6ZVswXSwgYWRhdGEsIGJkYXRhKSA6IFtdOyAvLyBjIG1hdHJpeFxuXG4gICAgcmV0dXJuIGEuY3JlYXRlRGVuc2VNYXRyaXgoe1xuICAgICAgZGF0YTogY2RhdGEsXG4gICAgICBzaXplOiBjc2l6ZSxcbiAgICAgIGRhdGF0eXBlOiBkdFxuICAgIH0pO1xuICB9OyAvLyByZWN1cnNpdmUgZnVuY3Rpb25cblxuICBmdW5jdGlvbiBfaXRlcmF0ZShmLCBsZXZlbCwgcywgbiwgYXYsIGJ2KSB7XG4gICAgLy8gaW5pdGlhbGl6ZSBhcnJheSBmb3IgdGhpcyBsZXZlbFxuICAgIHZhciBjdiA9IFtdOyAvLyBjaGVjayB3ZSByZWFjaCB0aGUgbGFzdCBsZXZlbFxuXG4gICAgaWYgKGxldmVsID09PSBzLmxlbmd0aCAtIDEpIHtcbiAgICAgIC8vIGxvb3AgYXJyYXlzIGluIGxhc3QgbGV2ZWxcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgIC8vIGludm9rZSBjYWxsYmFjayBhbmQgc3RvcmUgdmFsdWVcbiAgICAgICAgY3ZbaV0gPSBmKGF2W2ldLCBidltpXSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGl0ZXJhdGUgY3VycmVudCBsZXZlbFxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgLy8gaXRlcmF0ZSBuZXh0IGxldmVsXG4gICAgICAgIGN2W2pdID0gX2l0ZXJhdGUoZiwgbGV2ZWwgKyAxLCBzLCBzW2xldmVsICsgMV0sIGF2W2pdLCBidltqXSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGN2O1xuICB9XG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMTMgPSBjcmVhdGVBbGdvcml0aG0xMzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlQWxnb3JpdGhtMTQgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBuYW1lID0gJ2FsZ29yaXRobTE0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlQWxnb3JpdGhtMTQgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgdHlwZWQgPSBfcmVmLnR5cGVkO1xuXG4gIC8qKlxuICAgKiBJdGVyYXRlcyBvdmVyIERlbnNlTWF0cml4IGl0ZW1zIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmKEFpai4ueiwgYikuXG4gICAqIENhbGxiYWNrIGZ1bmN0aW9uIGludm9rZWQgTXhOIHRpbWVzLlxuICAgKlxuICAgKiBDKGksaiwuLi56KSA9IGYoQWlqLi56LCBiKVxuICAgKlxuICAgKiBAcGFyYW0ge01hdHJpeH0gICBhICAgICAgICAgICAgICAgICBUaGUgRGVuc2VNYXRyaXggaW5zdGFuY2UgKEEpXG4gICAqIEBwYXJhbSB7U2NhbGFyfSAgIGIgICAgICAgICAgICAgICAgIFRoZSBTY2FsYXIgdmFsdWVcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICAgICAgICAgVGhlIGYoQWlqLi56LGIpIG9wZXJhdGlvbiB0byBpbnZva2VcbiAgICogQHBhcmFtIHtib29sZWFufSAgaW52ZXJzZSAgICAgICAgICAgQSB0cnVlIHZhbHVlIGluZGljYXRlcyBjYWxsYmFjayBzaG91bGQgYmUgaW52b2tlZCBmKGIsQWlqLi56KVxuICAgKlxuICAgKiBAcmV0dXJuIHtNYXRyaXh9ICAgICAgICAgICAgICAgICAgICBEZW5zZU1hdHJpeCAoQylcbiAgICpcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2pvc2Rlam9uZy9tYXRoanMvcHVsbC8zNDYjaXNzdWVjb21tZW50LTk3NjU5MDQyXG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gYWxnb3JpdGhtMTQoYSwgYiwgY2FsbGJhY2ssIGludmVyc2UpIHtcbiAgICAvLyBhIGFycmF5c1xuICAgIHZhciBhZGF0YSA9IGEuX2RhdGE7XG4gICAgdmFyIGFzaXplID0gYS5fc2l6ZTtcbiAgICB2YXIgYWR0ID0gYS5fZGF0YXR5cGU7IC8vIGRhdGF0eXBlXG5cbiAgICB2YXIgZHQ7IC8vIGNhbGxiYWNrIHNpZ25hdHVyZSB0byB1c2VcblxuICAgIHZhciBjZiA9IGNhbGxiYWNrOyAvLyBwcm9jZXNzIGRhdGEgdHlwZXNcblxuICAgIGlmICh0eXBlb2YgYWR0ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gZGF0YXR5cGVcbiAgICAgIGR0ID0gYWR0OyAvLyBjb252ZXJ0IGIgdG8gdGhlIHNhbWUgZGF0YXR5cGVcblxuICAgICAgYiA9IHR5cGVkLmNvbnZlcnQoYiwgZHQpOyAvLyBjYWxsYmFja1xuXG4gICAgICBjZiA9IHR5cGVkLmZpbmQoY2FsbGJhY2ssIFtkdCwgZHRdKTtcbiAgICB9IC8vIHBvcHVsYXRlIGNkYXRhLCBpdGVyYXRlIHRocm91Z2ggZGltZW5zaW9uc1xuXG5cbiAgICB2YXIgY2RhdGEgPSBhc2l6ZS5sZW5ndGggPiAwID8gX2l0ZXJhdGUoY2YsIDAsIGFzaXplLCBhc2l6ZVswXSwgYWRhdGEsIGIsIGludmVyc2UpIDogW107IC8vIGMgbWF0cml4XG5cbiAgICByZXR1cm4gYS5jcmVhdGVEZW5zZU1hdHJpeCh7XG4gICAgICBkYXRhOiBjZGF0YSxcbiAgICAgIHNpemU6ICgwLCBfb2JqZWN0LmNsb25lKShhc2l6ZSksXG4gICAgICBkYXRhdHlwZTogZHRcbiAgICB9KTtcbiAgfTsgLy8gcmVjdXJzaXZlIGZ1bmN0aW9uXG5cbiAgZnVuY3Rpb24gX2l0ZXJhdGUoZiwgbGV2ZWwsIHMsIG4sIGF2LCBidiwgaW52ZXJzZSkge1xuICAgIC8vIGluaXRpYWxpemUgYXJyYXkgZm9yIHRoaXMgbGV2ZWxcbiAgICB2YXIgY3YgPSBbXTsgLy8gY2hlY2sgd2UgcmVhY2ggdGhlIGxhc3QgbGV2ZWxcblxuICAgIGlmIChsZXZlbCA9PT0gcy5sZW5ndGggLSAxKSB7XG4gICAgICAvLyBsb29wIGFycmF5cyBpbiBsYXN0IGxldmVsXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICAvLyBpbnZva2UgY2FsbGJhY2sgYW5kIHN0b3JlIHZhbHVlXG4gICAgICAgIGN2W2ldID0gaW52ZXJzZSA/IGYoYnYsIGF2W2ldKSA6IGYoYXZbaV0sIGJ2KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gaXRlcmF0ZSBjdXJyZW50IGxldmVsXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICAvLyBpdGVyYXRlIG5leHQgbGV2ZWxcbiAgICAgICAgY3Zbal0gPSBfaXRlcmF0ZShmLCBsZXZlbCArIDEsIHMsIHNbbGV2ZWwgKyAxXSwgYXZbal0sIGJ2LCBpbnZlcnNlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY3Y7XG4gIH1cbn0pO1xuZXhwb3J0cy5jcmVhdGVBbGdvcml0aG0xNCA9IGNyZWF0ZUFsZ29yaXRobTE0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVOdW1iZXIgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgX2NvbGxlY3Rpb24gPSByZXF1aXJlKFwiLi4vdXRpbHMvY29sbGVjdGlvblwiKTtcblxudmFyIG5hbWUgPSAnbnVtYmVyJztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJ107XG52YXIgY3JlYXRlTnVtYmVyID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZDtcblxuICAvKipcbiAgICogQ3JlYXRlIGEgbnVtYmVyIG9yIGNvbnZlcnQgYSBzdHJpbmcsIGJvb2xlYW4sIG9yIHVuaXQgdG8gYSBudW1iZXIuXG4gICAqIFdoZW4gdmFsdWUgaXMgYSBtYXRyaXgsIGFsbCBlbGVtZW50cyB3aWxsIGJlIGNvbnZlcnRlZCB0byBudW1iZXIuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgbWF0aC5udW1iZXIodmFsdWUpXG4gICAqICAgIG1hdGgubnVtYmVyKHVuaXQsIHZhbHVlbGVzc1VuaXQpXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICBtYXRoLm51bWJlcigyKSAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAyXG4gICAqICAgIG1hdGgubnVtYmVyKCc3LjInKSAgICAgICAgICAgICAgICAgICAgIC8vIHJldHVybnMgbnVtYmVyIDcuMlxuICAgKiAgICBtYXRoLm51bWJlcih0cnVlKSAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIG51bWJlciAxXG4gICAqICAgIG1hdGgubnVtYmVyKFt0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZV0pIC8vIHJldHVybnMgWzEsIDAsIDEsIDFdXG4gICAqICAgIG1hdGgubnVtYmVyKG1hdGgudW5pdCgnNTJjbScpLCAnbScpICAgIC8vIHJldHVybnMgMC41MlxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYmlnbnVtYmVyLCBib29sZWFuLCBjb21wbGV4LCBpbmRleCwgbWF0cml4LCBzdHJpbmcsIHVuaXRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IGJvb2xlYW4gfCBBcnJheSB8IE1hdHJpeCB8IFVuaXQgfCBudWxsfSBbdmFsdWVdICBWYWx1ZSB0byBiZSBjb252ZXJ0ZWRcbiAgICogQHBhcmFtIHtVbml0IHwgc3RyaW5nfSBbdmFsdWVsZXNzVW5pdF0gQSB2YWx1ZWxlc3MgdW5pdCwgdXNlZCB0byBjb252ZXJ0IGEgdW5pdCB0byBhIG51bWJlclxuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBBcnJheSB8IE1hdHJpeH0gVGhlIGNyZWF0ZWQgbnVtYmVyXG4gICAqL1xuICB2YXIgbnVtYmVyID0gdHlwZWQoJ251bWJlcicsIHtcbiAgICAnJzogZnVuY3Rpb24gXygpIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH0sXG4gICAgbnVtYmVyOiBmdW5jdGlvbiBudW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfSxcbiAgICBzdHJpbmc6IGZ1bmN0aW9uIHN0cmluZyh4KSB7XG4gICAgICBpZiAoeCA9PT0gJ05hTicpIHJldHVybiBOYU47XG4gICAgICB2YXIgbnVtID0gTnVtYmVyKHgpO1xuXG4gICAgICBpZiAoaXNOYU4obnVtKSkge1xuICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1N0cmluZyBcIicgKyB4ICsgJ1wiIGlzIG5vIHZhbGlkIG51bWJlcicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVtO1xuICAgIH0sXG4gICAgQmlnTnVtYmVyOiBmdW5jdGlvbiBCaWdOdW1iZXIoeCkge1xuICAgICAgcmV0dXJuIHgudG9OdW1iZXIoKTtcbiAgICB9LFxuICAgIEZyYWN0aW9uOiBmdW5jdGlvbiBGcmFjdGlvbih4KSB7XG4gICAgICByZXR1cm4geC52YWx1ZU9mKCk7XG4gICAgfSxcbiAgICBVbml0OiBmdW5jdGlvbiBVbml0KHgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2Vjb25kIGFyZ3VtZW50IHdpdGggdmFsdWVsZXNzIHVuaXQgZXhwZWN0ZWQnKTtcbiAgICB9LFxuICAgIFwibnVsbFwiOiBmdW5jdGlvbiBfbnVsbCh4KSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9LFxuICAgICdVbml0LCBzdHJpbmcgfCBVbml0JzogZnVuY3Rpb24gVW5pdFN0cmluZ1VuaXQodW5pdCwgdmFsdWVsZXNzVW5pdCkge1xuICAgICAgcmV0dXJuIHVuaXQudG9OdW1iZXIodmFsdWVsZXNzVW5pdCk7XG4gICAgfSxcbiAgICAnQXJyYXkgfCBNYXRyaXgnOiBmdW5jdGlvbiBBcnJheU1hdHJpeCh4KSB7XG4gICAgICByZXR1cm4gKDAsIF9jb2xsZWN0aW9uLmRlZXBNYXApKHgsIG51bWJlcik7XG4gICAgfVxuICB9KTsgLy8gcmV2aXZlciBmdW5jdGlvbiB0byBwYXJzZSBhIEpTT04gb2JqZWN0IGxpa2U6XG4gIC8vXG4gIC8vICAgICB7XCJtYXRoanNcIjpcIm51bWJlclwiLFwidmFsdWVcIjpcIjIuM1wifVxuICAvL1xuICAvLyBpbnRvIGEgbnVtYmVyIDIuM1xuXG4gIG51bWJlci5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQoanNvbi52YWx1ZSk7XG4gIH07XG5cbiAgcmV0dXJuIG51bWJlcjtcbn0pO1xuZXhwb3J0cy5jcmVhdGVOdW1iZXIgPSBjcmVhdGVOdW1iZXI7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVJlc3VsdFNldCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ1Jlc3VsdFNldCc7XG52YXIgZGVwZW5kZW5jaWVzID0gW107XG52YXIgY3JlYXRlUmVzdWx0U2V0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKCkge1xuICAvKipcbiAgICogQSBSZXN1bHRTZXQgY29udGFpbnMgYSBsaXN0IG9yIHJlc3VsdHNcbiAgICogQGNsYXNzIFJlc3VsdFNldFxuICAgKiBAcGFyYW0ge0FycmF5fSBlbnRyaWVzXG4gICAqIEBjb25zdHJ1Y3RvciBSZXN1bHRTZXRcbiAgICovXG4gIGZ1bmN0aW9uIFJlc3VsdFNldChlbnRyaWVzKSB7XG4gICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIFJlc3VsdFNldCkpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfVxuXG4gICAgdGhpcy5lbnRyaWVzID0gZW50cmllcyB8fCBbXTtcbiAgfVxuICAvKipcbiAgICogQXR0YWNoIHR5cGUgaW5mb3JtYXRpb25cbiAgICovXG5cblxuICBSZXN1bHRTZXQucHJvdG90eXBlLnR5cGUgPSAnUmVzdWx0U2V0JztcbiAgUmVzdWx0U2V0LnByb3RvdHlwZS5pc1Jlc3VsdFNldCA9IHRydWU7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcnJheSB3aXRoIHJlc3VsdHMgaG9sZCBieSB0aGlzIFJlc3VsdFNldFxuICAgKiBAbWVtYmVyb2YgUmVzdWx0U2V0XG4gICAqIEByZXR1cm5zIHtBcnJheX0gZW50cmllc1xuICAgKi9cblxuICBSZXN1bHRTZXQucHJvdG90eXBlLnZhbHVlT2YgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXMuZW50cmllcztcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHN0cmluZ2lmaWVkIHJlc3VsdHMgb2YgdGhlIFJlc3VsdFNldFxuICAgKiBAbWVtYmVyb2YgUmVzdWx0U2V0XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9IHN0cmluZ1xuICAgKi9cblxuXG4gIFJlc3VsdFNldC5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICdbJyArIHRoaXMuZW50cmllcy5qb2luKCcsICcpICsgJ10nO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgUmVzdWx0U2V0XG4gICAqIEBtZW1iZXJvZiBSZXN1bHRTZXRcbiAgICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyBhIEpTT04gb2JqZWN0IHN0cnVjdHVyZWQgYXM6XG4gICAqICAgICAgICAgICAgICAgICAgIGB7XCJtYXRoanNcIjogXCJSZXN1bHRTZXRcIiwgXCJlbnRyaWVzXCI6IFsuLi5dfWBcbiAgICovXG5cblxuICBSZXN1bHRTZXQucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbWF0aGpzOiAnUmVzdWx0U2V0JyxcbiAgICAgIGVudHJpZXM6IHRoaXMuZW50cmllc1xuICAgIH07XG4gIH07XG4gIC8qKlxuICAgKiBJbnN0YW50aWF0ZSBhIFJlc3VsdFNldCBmcm9tIGEgSlNPTiBvYmplY3RcbiAgICogQG1lbWJlcm9mIFJlc3VsdFNldFxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQSBKU09OIG9iamVjdCBzdHJ1Y3R1cmVkIGFzOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlJlc3VsdFNldFwiLCBcImVudHJpZXNcIjogWy4uLl19YFxuICAgKiBAcmV0dXJuIHtSZXN1bHRTZXR9XG4gICAqL1xuXG5cbiAgUmVzdWx0U2V0LmZyb21KU09OID0gZnVuY3Rpb24gKGpzb24pIHtcbiAgICByZXR1cm4gbmV3IFJlc3VsdFNldChqc29uLmVudHJpZXMpO1xuICB9O1xuXG4gIHJldHVybiBSZXN1bHRTZXQ7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVSZXN1bHRTZXQgPSBjcmVhdGVSZXN1bHRTZXQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVN0cmluZyA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBfY29sbGVjdGlvbiA9IHJlcXVpcmUoXCIuLi91dGlscy9jb2xsZWN0aW9uXCIpO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuLi91dGlscy9udW1iZXJcIik7XG5cbnZhciBuYW1lID0gJ3N0cmluZyc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZVN0cmluZyA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHN0cmluZyBvciBjb252ZXJ0IGFueSBvYmplY3QgaW50byBhIHN0cmluZy5cbiAgICogRWxlbWVudHMgb2YgQXJyYXlzIGFuZCBNYXRyaWNlcyBhcmUgcHJvY2Vzc2VkIGVsZW1lbnQgd2lzZS5cbiAgICpcbiAgICogU3ludGF4OlxuICAgKlxuICAgKiAgICBtYXRoLnN0cmluZyh2YWx1ZSlcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIG1hdGguc3RyaW5nKDQuMikgICAgICAgICAgICAgICAvLyByZXR1cm5zIHN0cmluZyAnNC4yJ1xuICAgKiAgICBtYXRoLnN0cmluZyhtYXRoLmNvbXBsZXgoMywgMikgLy8gcmV0dXJucyBzdHJpbmcgJzMgKyAyaSdcbiAgICpcbiAgICogICAgY29uc3QgdSA9IG1hdGgudW5pdCg1LCAna20nKVxuICAgKiAgICBtYXRoLnN0cmluZyh1LnRvKCdtJykpICAgICAgICAgLy8gcmV0dXJucyBzdHJpbmcgJzUwMDAgbSdcbiAgICpcbiAgICogICAgbWF0aC5zdHJpbmcoW3RydWUsIGZhbHNlXSkgICAgIC8vIHJldHVybnMgWyd0cnVlJywgJ2ZhbHNlJ11cbiAgICpcbiAgICogU2VlIGFsc286XG4gICAqXG4gICAqICAgIGJpZ251bWJlciwgYm9vbGVhbiwgY29tcGxleCwgaW5kZXgsIG1hdHJpeCwgbnVtYmVyLCB1bml0XG4gICAqXG4gICAqIEBwYXJhbSB7KiB8IEFycmF5IHwgTWF0cml4IHwgbnVsbH0gW3ZhbHVlXSAgQSB2YWx1ZSB0byBjb252ZXJ0IHRvIGEgc3RyaW5nXG4gICAqIEByZXR1cm4ge3N0cmluZyB8IEFycmF5IHwgTWF0cml4fSBUaGUgY3JlYXRlZCBzdHJpbmdcbiAgICovXG4gIHZhciBzdHJpbmcgPSB0eXBlZChuYW1lLCB7XG4gICAgJyc6IGZ1bmN0aW9uIF8oKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfSxcbiAgICBudW1iZXI6IF9udW1iZXIuZm9ybWF0LFxuICAgIFwibnVsbFwiOiBmdW5jdGlvbiBfbnVsbCh4KSB7XG4gICAgICByZXR1cm4gJ251bGwnO1xuICAgIH0sXG4gICAgXCJib29sZWFuXCI6IGZ1bmN0aW9uIGJvb2xlYW4oeCkge1xuICAgICAgcmV0dXJuIHggKyAnJztcbiAgICB9LFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH0sXG4gICAgJ0FycmF5IHwgTWF0cml4JzogZnVuY3Rpb24gQXJyYXlNYXRyaXgoeCkge1xuICAgICAgcmV0dXJuICgwLCBfY29sbGVjdGlvbi5kZWVwTWFwKSh4LCBzdHJpbmcpO1xuICAgIH0sXG4gICAgYW55OiBmdW5jdGlvbiBhbnkoeCkge1xuICAgICAgcmV0dXJuIFN0cmluZyh4KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gc3RyaW5nO1xufSk7XG5leHBvcnRzLmNyZWF0ZVN0cmluZyA9IGNyZWF0ZVN0cmluZzsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVW5pdENsYXNzID0gdm9pZCAwO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2lzXCIpO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9zdHJpbmcgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvc3RyaW5nXCIpO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuLi8uLi91dGlscy9vYmplY3RcIik7XG5cbnZhciBfY29uc3RhbnRzID0gcmVxdWlyZShcIi4uLy4uL3V0aWxzL2JpZ251bWJlci9jb25zdGFudHNcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxudmFyIG5hbWUgPSAnVW5pdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyc/b24nLCAnY29uZmlnJywgJ2FkZFNjYWxhcicsICdzdWJ0cmFjdCcsICdtdWx0aXBseVNjYWxhcicsICdkaXZpZGVTY2FsYXInLCAncG93JywgJ2FicycsICdmaXgnLCAncm91bmQnLCAnZXF1YWwnLCAnaXNOdW1lcmljJywgJ2Zvcm1hdCcsICdudW1iZXInLCAnQ29tcGxleCcsICdCaWdOdW1iZXInLCAnRnJhY3Rpb24nXTtcbnZhciBjcmVhdGVVbml0Q2xhc3MgPSAvKiAjX19QVVJFX18gKi8oMCwgX2ZhY3RvcnkuZmFjdG9yeSkobmFtZSwgZGVwZW5kZW5jaWVzLCBmdW5jdGlvbiAoX3JlZikge1xuICB2YXIgb24gPSBfcmVmLm9uLFxuICAgICAgY29uZmlnID0gX3JlZi5jb25maWcsXG4gICAgICBhZGRTY2FsYXIgPSBfcmVmLmFkZFNjYWxhcixcbiAgICAgIHN1YnRyYWN0ID0gX3JlZi5zdWJ0cmFjdCxcbiAgICAgIG11bHRpcGx5U2NhbGFyID0gX3JlZi5tdWx0aXBseVNjYWxhcixcbiAgICAgIGRpdmlkZVNjYWxhciA9IF9yZWYuZGl2aWRlU2NhbGFyLFxuICAgICAgcG93ID0gX3JlZi5wb3csXG4gICAgICBhYnMgPSBfcmVmLmFicyxcbiAgICAgIGZpeCA9IF9yZWYuZml4LFxuICAgICAgcm91bmQgPSBfcmVmLnJvdW5kLFxuICAgICAgZXF1YWwgPSBfcmVmLmVxdWFsLFxuICAgICAgaXNOdW1lcmljID0gX3JlZi5pc051bWVyaWMsXG4gICAgICBmb3JtYXQgPSBfcmVmLmZvcm1hdCxcbiAgICAgIG51bWJlciA9IF9yZWYubnVtYmVyLFxuICAgICAgQ29tcGxleCA9IF9yZWYuQ29tcGxleCxcbiAgICAgIF9CaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcixcbiAgICAgIF9GcmFjdGlvbiA9IF9yZWYuRnJhY3Rpb247XG4gIHZhciB0b051bWJlciA9IG51bWJlcjtcbiAgLyoqXG4gICAqIEEgdW5pdCBjYW4gYmUgY29uc3RydWN0ZWQgaW4gdGhlIGZvbGxvd2luZyB3YXlzOlxuICAgKlxuICAgKiAgICAgY29uc3QgYSA9IG5ldyBVbml0KHZhbHVlLCBuYW1lKVxuICAgKiAgICAgY29uc3QgYiA9IG5ldyBVbml0KG51bGwsIG5hbWUpXG4gICAqICAgICBjb25zdCBjID0gVW5pdC5wYXJzZShzdHIpXG4gICAqXG4gICAqIEV4YW1wbGUgdXNhZ2U6XG4gICAqXG4gICAqICAgICBjb25zdCBhID0gbmV3IFVuaXQoNSwgJ2NtJykgICAgICAgICAgICAgICAvLyA1MCBtbVxuICAgKiAgICAgY29uc3QgYiA9IFVuaXQucGFyc2UoJzIzIGtnJykgICAgICAgICAgICAgLy8gMjMga2dcbiAgICogICAgIGNvbnN0IGMgPSBtYXRoLmluKGEsIG5ldyBVbml0KG51bGwsICdtJykgIC8vIDAuMDUgbVxuICAgKiAgICAgY29uc3QgZCA9IG5ldyBVbml0KDkuODEsIFwibS9zXjJcIikgICAgICAgICAvLyA5LjgxIG0vc14yXG4gICAqXG4gICAqIEBjbGFzcyBVbml0XG4gICAqIEBjb25zdHJ1Y3RvciBVbml0XG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBDb21wbGV4IHwgYm9vbGVhbn0gW3ZhbHVlXSAgQSB2YWx1ZSBsaWtlIDUuMlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW25hbWVdICAgQSB1bml0IG5hbWUgbGlrZSBcImNtXCIgb3IgXCJpbmNoXCIsIG9yIGEgZGVyaXZlZCB1bml0IG9mIHRoZSBmb3JtOiBcInUxW15leDFdIFt1MlteZXgyXSAuLi5dIFsvIHUzW15leDNdIFt1NFteZXg0XV1dXCIsIHN1Y2ggYXMgXCJrZyBtXjIvc14yXCIsIHdoZXJlIGVhY2ggdW5pdCBhcHBlYXJpbmcgYWZ0ZXIgdGhlIGZvcndhcmQgc2xhc2ggaXMgdGFrZW4gdG8gYmUgaW4gdGhlIGRlbm9taW5hdG9yLiBcImtnIG1eMiBzXi0yXCIgaXMgYSBzeW5vbnltIGFuZCBpcyBhbHNvIGFjY2VwdGFibGUuIEFueSBvZiB0aGUgdW5pdHMgY2FuIGluY2x1ZGUgYSBwcmVmaXguXG4gICAqL1xuXG4gIGZ1bmN0aW9uIFVuaXQodmFsdWUsIG5hbWUpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgVW5pdCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ29uc3RydWN0b3IgbXVzdCBiZSBjYWxsZWQgd2l0aCB0aGUgbmV3IG9wZXJhdG9yJyk7XG4gICAgfVxuXG4gICAgaWYgKCEodmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZCB8fCBpc051bWVyaWModmFsdWUpIHx8ICgwLCBfaXMuaXNDb21wbGV4KSh2YWx1ZSkpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGaXJzdCBwYXJhbWV0ZXIgaW4gVW5pdCBjb25zdHJ1Y3RvciBtdXN0IGJlIG51bWJlciwgQmlnTnVtYmVyLCBGcmFjdGlvbiwgQ29tcGxleCwgb3IgdW5kZWZpbmVkJyk7XG4gICAgfVxuXG4gICAgaWYgKG5hbWUgIT09IHVuZGVmaW5lZCAmJiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IG5hbWUgPT09ICcnKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignU2Vjb25kIHBhcmFtZXRlciBpbiBVbml0IGNvbnN0cnVjdG9yIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICBpZiAobmFtZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgdSA9IFVuaXQucGFyc2UobmFtZSk7XG4gICAgICB0aGlzLnVuaXRzID0gdS51bml0cztcbiAgICAgIHRoaXMuZGltZW5zaW9ucyA9IHUuZGltZW5zaW9ucztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51bml0cyA9IFt7XG4gICAgICAgIHVuaXQ6IFVOSVRfTk9ORSxcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5OT05FLFxuICAgICAgICAvLyBsaW5rIHRvIGEgbGlzdCB3aXRoIHN1cHBvcnRlZCBwcmVmaXhlc1xuICAgICAgICBwb3dlcjogMFxuICAgICAgfV07XG4gICAgICB0aGlzLmRpbWVuc2lvbnMgPSBbXTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBCQVNFX0RJTUVOU0lPTlMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdGhpcy5kaW1lbnNpb25zW2ldID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnZhbHVlID0gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbCA/IHRoaXMuX25vcm1hbGl6ZSh2YWx1ZSkgOiBudWxsO1xuICAgIHRoaXMuZml4UHJlZml4ID0gZmFsc2U7IC8vIGlmIHRydWUsIGZ1bmN0aW9uIGZvcm1hdCB3aWxsIG5vdCBzZWFyY2ggZm9yIHRoZVxuICAgIC8vIGJlc3QgcHJlZml4IGJ1dCBsZWF2ZSBpdCBhcyBpbml0aWFsbHkgcHJvdmlkZWQuXG4gICAgLy8gZml4UHJlZml4IGlzIHNldCB0cnVlIGJ5IHRoZSBtZXRob2QgVW5pdC50b1xuICAgIC8vIFRoZSBqdXN0aWZpY2F0aW9uIGJlaGluZCB0aGlzIGlzIHRoYXQgaWYgdGhlIGNvbnN0cnVjdG9yIGlzIGV4cGxpY2l0bHkgY2FsbGVkLFxuICAgIC8vIHRoZSBjYWxsZXIgd2lzaGVzIHRoZSB1bml0cyB0byBiZSByZXR1cm5lZCBleGFjdGx5IGFzIGhlIHN1cHBsaWVkLlxuXG4gICAgdGhpcy5za2lwQXV0b21hdGljU2ltcGxpZmljYXRpb24gPSB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBBdHRhY2ggdHlwZSBpbmZvcm1hdGlvblxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLnR5cGUgPSAnVW5pdCc7XG4gIFVuaXQucHJvdG90eXBlLmlzVW5pdCA9IHRydWU7IC8vIHByaXZhdGUgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnMgZm9yIHRoZSBVbml0IHBhcnNlclxuXG4gIHZhciB0ZXh0LCBpbmRleCwgYztcblxuICBmdW5jdGlvbiBza2lwV2hpdGVzcGFjZSgpIHtcbiAgICB3aGlsZSAoYyA9PT0gJyAnIHx8IGMgPT09ICdcXHQnKSB7XG4gICAgICBuZXh0KCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaXNEaWdpdERvdChjKSB7XG4gICAgcmV0dXJuIGMgPj0gJzAnICYmIGMgPD0gJzknIHx8IGMgPT09ICcuJztcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzRGlnaXQoYykge1xuICAgIHJldHVybiBjID49ICcwJyAmJiBjIDw9ICc5JztcbiAgfVxuXG4gIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgaW5kZXgrKztcbiAgICBjID0gdGV4dC5jaGFyQXQoaW5kZXgpO1xuICB9XG5cbiAgZnVuY3Rpb24gcmV2ZXJ0KG9sZEluZGV4KSB7XG4gICAgaW5kZXggPSBvbGRJbmRleDtcbiAgICBjID0gdGV4dC5jaGFyQXQoaW5kZXgpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VOdW1iZXIoKSB7XG4gICAgdmFyIG51bWJlciA9ICcnO1xuICAgIHZhciBvbGRJbmRleCA9IGluZGV4O1xuXG4gICAgaWYgKGMgPT09ICcrJykge1xuICAgICAgbmV4dCgpO1xuICAgIH0gZWxzZSBpZiAoYyA9PT0gJy0nKSB7XG4gICAgICBudW1iZXIgKz0gYztcbiAgICAgIG5leHQoKTtcbiAgICB9XG5cbiAgICBpZiAoIWlzRGlnaXREb3QoYykpIHtcbiAgICAgIC8vIGEgKyBvciAtIG11c3QgYmUgZm9sbG93ZWQgYnkgYSBkaWdpdFxuICAgICAgcmV2ZXJ0KG9sZEluZGV4KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gZ2V0IG51bWJlciwgY2FuIGhhdmUgYSBzaW5nbGUgZG90XG5cblxuICAgIGlmIChjID09PSAnLicpIHtcbiAgICAgIG51bWJlciArPSBjO1xuICAgICAgbmV4dCgpO1xuXG4gICAgICBpZiAoIWlzRGlnaXQoYykpIHtcbiAgICAgICAgLy8gdGhpcyBpcyBubyBsZWdhbCBudW1iZXIsIGl0IGlzIGp1c3QgYSBkb3RcbiAgICAgICAgcmV2ZXJ0KG9sZEluZGV4KTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHdoaWxlIChpc0RpZ2l0KGMpKSB7XG4gICAgICAgIG51bWJlciArPSBjO1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjID09PSAnLicpIHtcbiAgICAgICAgbnVtYmVyICs9IGM7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3aGlsZSAoaXNEaWdpdChjKSkge1xuICAgICAgbnVtYmVyICs9IGM7XG4gICAgICBuZXh0KCk7XG4gICAgfSAvLyBjaGVjayBmb3IgZXhwb25lbnRpYWwgbm90YXRpb24gbGlrZSBcIjIuM2UtNFwiIG9yIFwiMS4yM2U1MFwiXG5cblxuICAgIGlmIChjID09PSAnRScgfHwgYyA9PT0gJ2UnKSB7XG4gICAgICAvLyBUaGUgZ3JhbW1hciBicmFuY2hlcyBoZXJlLiBUaGlzIGNvdWxkIGVpdGhlciBiZSBwYXJ0IG9mIGFuIGV4cG9uZW50IG9yIHRoZSBzdGFydCBvZiBhIHVuaXQgdGhhdCBiZWdpbnMgd2l0aCB0aGUgbGV0dGVyIGUsIHN1Y2ggYXMgXCI0ZXhhYnl0ZXNcIlxuICAgICAgdmFyIHRlbnRhdGl2ZU51bWJlciA9ICcnO1xuICAgICAgdmFyIHRlbnRhdGl2ZUluZGV4ID0gaW5kZXg7XG4gICAgICB0ZW50YXRpdmVOdW1iZXIgKz0gYztcbiAgICAgIG5leHQoKTtcblxuICAgICAgaWYgKGMgPT09ICcrJyB8fCBjID09PSAnLScpIHtcbiAgICAgICAgdGVudGF0aXZlTnVtYmVyICs9IGM7XG4gICAgICAgIG5leHQoKTtcbiAgICAgIH0gLy8gU2NpZW50aWZpYyBub3RhdGlvbiBNVVNUIGJlIGZvbGxvd2VkIGJ5IGFuIGV4cG9uZW50IChvdGhlcndpc2Ugd2UgYXNzdW1lIGl0IGlzIG5vdCBzY2llbnRpZmljIG5vdGF0aW9uKVxuXG5cbiAgICAgIGlmICghaXNEaWdpdChjKSkge1xuICAgICAgICAvLyBUaGUgZSBvciBFIG11c3QgYmVsb25nIHRvIHNvbWV0aGluZyBlbHNlLCBzbyByZXR1cm4gdGhlIG51bWJlciB3aXRob3V0IHRoZSBlIG9yIEUuXG4gICAgICAgIHJldmVydCh0ZW50YXRpdmVJbmRleCk7XG4gICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICB9IC8vIFdlIGNhbiBub3cgc2FmZWx5IHNheSB0aGF0IHRoaXMgaXMgc2NpZW50aWZpYyBub3RhdGlvbi5cblxuXG4gICAgICBudW1iZXIgPSBudW1iZXIgKyB0ZW50YXRpdmVOdW1iZXI7XG5cbiAgICAgIHdoaWxlIChpc0RpZ2l0KGMpKSB7XG4gICAgICAgIG51bWJlciArPSBjO1xuICAgICAgICBuZXh0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bWJlcjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlVW5pdCgpIHtcbiAgICB2YXIgdW5pdE5hbWUgPSAnJzsgLy8gQWxwaGFudW1lcmljIGNoYXJhY3RlcnMgb25seTsgbWF0Y2hlcyBbYS16QS1aMC05XVxuXG4gICAgdmFyIGNvZGUgPSB0ZXh0LmNoYXJDb2RlQXQoaW5kZXgpO1xuXG4gICAgd2hpbGUgKGNvZGUgPj0gNDggJiYgY29kZSA8PSA1NyB8fCBjb2RlID49IDY1ICYmIGNvZGUgPD0gOTAgfHwgY29kZSA+PSA5NyAmJiBjb2RlIDw9IDEyMikge1xuICAgICAgdW5pdE5hbWUgKz0gYztcbiAgICAgIG5leHQoKTtcbiAgICAgIGNvZGUgPSB0ZXh0LmNoYXJDb2RlQXQoaW5kZXgpO1xuICAgIH0gLy8gTXVzdCBiZWdpbiB3aXRoIFthLXpBLVpdXG5cblxuICAgIGNvZGUgPSB1bml0TmFtZS5jaGFyQ29kZUF0KDApO1xuXG4gICAgaWYgKGNvZGUgPj0gNjUgJiYgY29kZSA8PSA5MCB8fCBjb2RlID49IDk3ICYmIGNvZGUgPD0gMTIyKSB7XG4gICAgICByZXR1cm4gdW5pdE5hbWUgfHwgbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VDaGFyYWN0ZXIodG9GaW5kKSB7XG4gICAgaWYgKGMgPT09IHRvRmluZCkge1xuICAgICAgbmV4dCgpO1xuICAgICAgcmV0dXJuIHRvRmluZDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBQYXJzZSBhIHN0cmluZyBpbnRvIGEgdW5pdC4gVGhlIHZhbHVlIG9mIHRoZSB1bml0IGlzIHBhcnNlZCBhcyBudW1iZXIsXG4gICAqIEJpZ051bWJlciwgb3IgRnJhY3Rpb24gZGVwZW5kaW5nIG9uIHRoZSBtYXRoLmpzIGNvbmZpZyBzZXR0aW5nIGBudW1iZXJgLlxuICAgKlxuICAgKiBUaHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZSBwcm92aWRlZCBzdHJpbmcgZG9lcyBub3QgY29udGFpbiBhIHZhbGlkIHVuaXQgb3JcbiAgICogY2Fubm90IGJlIHBhcnNlZC5cbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0ciAgICAgICAgQSBzdHJpbmcgbGlrZSBcIjUuMiBpbmNoXCIsIFwiNGUyIGNtL3NeMlwiXG4gICAqIEByZXR1cm4ge1VuaXR9IHVuaXRcbiAgICovXG5cblxuICBVbml0LnBhcnNlID0gZnVuY3Rpb24gKHN0ciwgb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIHRleHQgPSBzdHI7XG4gICAgaW5kZXggPSAtMTtcbiAgICBjID0gJyc7XG5cbiAgICBpZiAodHlwZW9mIHRleHQgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGFyZ3VtZW50IGluIFVuaXQucGFyc2UsIHN0cmluZyBleHBlY3RlZCcpO1xuICAgIH1cblxuICAgIHZhciB1bml0ID0gbmV3IFVuaXQoKTtcbiAgICB1bml0LnVuaXRzID0gW107XG4gICAgdmFyIHBvd2VyTXVsdGlwbGllckN1cnJlbnQgPSAxO1xuICAgIHZhciBleHBlY3RpbmdVbml0ID0gZmFsc2U7IC8vIEEgdW5pdCBzaG91bGQgZm9sbG93IHRoaXMgcGF0dGVybjpcbiAgICAvLyBbbnVtYmVyXSAuLi5bIFsqL10gdW5pdFtebnVtYmVyXSBdXG4gICAgLy8gdW5pdFtebnVtYmVyXSAuLi4gWyBbKi9dIHVuaXRbXm51bWJlcl0gXVxuICAgIC8vIFJ1bGVzOlxuICAgIC8vIG51bWJlciBpcyBhbnkgZmxvYXRpbmcgcG9pbnQgbnVtYmVyLlxuICAgIC8vIHVuaXQgaXMgYW55IGFscGhhbnVtZXJpYyBzdHJpbmcgYmVnaW5uaW5nIHdpdGggYW4gYWxwaGEuIFVuaXRzIHdpdGggbmFtZXMgbGlrZSBlMyBzaG91bGQgYmUgYXZvaWRlZCBiZWNhdXNlIHRoZXkgbG9vayBsaWtlIHRoZSBleHBvbmVudCBvZiBhIGZsb2F0aW5nIHBvaW50IG51bWJlciFcbiAgICAvLyBUaGUgc3RyaW5nIG1heSBvcHRpb25hbGx5IGJlZ2luIHdpdGggYSBudW1iZXIuXG4gICAgLy8gRWFjaCB1bml0IG1heSBvcHRpb25hbGx5IGJlIGZvbGxvd2VkIGJ5IF5udW1iZXIuXG4gICAgLy8gV2hpdGVzcGFjZSBvciBhIGZvcndhcmQgc2xhc2ggaXMgcmVjb21tZW5kZWQgYmV0d2VlbiBjb25zZWN1dGl2ZSB1bml0cywgYWx0aG91Z2ggdGhlIGZvbGxvd2luZyB0ZWNobmljYWxseSBpcyBwYXJzZWFibGU6XG4gICAgLy8gICAybV4ya2cvc14yXG4gICAgLy8gaXQgaXMgbm90IGdvb2QgZm9ybS4gSWYgYSB1bml0IHN0YXJ0cyB3aXRoIGUsIHRoZW4gaXQgY291bGQgYmUgY29uZnVzZWQgYXMgYSBmbG9hdGluZyBwb2ludCBudW1iZXI6XG4gICAgLy8gICA0ZXJnXG5cbiAgICBuZXh0KCk7XG4gICAgc2tpcFdoaXRlc3BhY2UoKTsgLy8gT3B0aW9uYWwgbnVtYmVyIGF0IHRoZSBzdGFydCBvZiB0aGUgc3RyaW5nXG5cbiAgICB2YXIgdmFsdWVTdHIgPSBwYXJzZU51bWJlcigpO1xuICAgIHZhciB2YWx1ZSA9IG51bGw7XG5cbiAgICBpZiAodmFsdWVTdHIpIHtcbiAgICAgIGlmIChjb25maWcubnVtYmVyID09PSAnQmlnTnVtYmVyJykge1xuICAgICAgICB2YWx1ZSA9IG5ldyBfQmlnTnVtYmVyKHZhbHVlU3RyKTtcbiAgICAgIH0gZWxzZSBpZiAoY29uZmlnLm51bWJlciA9PT0gJ0ZyYWN0aW9uJykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIC8vIG5vdCBhbGwgbnVtYmVycyBjYW4gYmUgdHVybmVkIGluIEZyYWN0aW9ucywgZm9yIGV4YW1wbGUgdmVyeSBzbWFsbCBudW1iZXJzIG5vdFxuICAgICAgICAgIHZhbHVlID0gbmV3IF9GcmFjdGlvbih2YWx1ZVN0cik7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh2YWx1ZVN0cik7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG51bWJlclxuICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodmFsdWVTdHIpO1xuICAgICAgfVxuXG4gICAgICBza2lwV2hpdGVzcGFjZSgpOyAvLyBXaGl0ZXNwYWNlIGlzIG5vdCByZXF1aXJlZCBoZXJlXG4gICAgICAvLyBoYW5kbGUgbXVsdGlwbGljYXRpb24gb3IgZGl2aXNpb24gcmlnaHQgYWZ0ZXIgdGhlIHZhbHVlLCBsaWtlICcxL3MnXG5cbiAgICAgIGlmIChwYXJzZUNoYXJhY3RlcignKicpKSB7XG4gICAgICAgIHBvd2VyTXVsdGlwbGllckN1cnJlbnQgPSAxO1xuICAgICAgICBleHBlY3RpbmdVbml0ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAocGFyc2VDaGFyYWN0ZXIoJy8nKSkge1xuICAgICAgICBwb3dlck11bHRpcGxpZXJDdXJyZW50ID0gLTE7XG4gICAgICAgIGV4cGVjdGluZ1VuaXQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gLy8gU3RhY2sgdG8ga2VlcCB0cmFjayBvZiBwb3dlck11bHRpcGxpZXJzIGFwcGxpZWQgdG8gZWFjaCBwYXJlbnRoZXNlcyBncm91cFxuXG5cbiAgICB2YXIgcG93ZXJNdWx0aXBsaWVyU3RhY2sgPSBbXTsgLy8gUnVubmluZyBwcm9kdWN0IG9mIGFsbCBlbGVtZW50cyBpbiBwb3dlck11bHRpcGxpZXJTdGFja1xuXG4gICAgdmFyIHBvd2VyTXVsdGlwbGllclN0YWNrUHJvZHVjdCA9IDE7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgc2tpcFdoaXRlc3BhY2UoKTsgLy8gQ2hlY2sgZm9yIGFuZCBjb25zdW1lIG9wZW5pbmcgcGFyZW50aGVzZXMsIHB1c2hpbmcgcG93ZXJNdWx0aXBsaWVyQ3VycmVudCB0byB0aGUgc3RhY2tcbiAgICAgIC8vIEEgJygnIHdpbGwgYWx3YXlzIGFwcGVhciBkaXJlY3RseSBiZWZvcmUgYSB1bml0LlxuXG4gICAgICB3aGlsZSAoYyA9PT0gJygnKSB7XG4gICAgICAgIHBvd2VyTXVsdGlwbGllclN0YWNrLnB1c2gocG93ZXJNdWx0aXBsaWVyQ3VycmVudCk7XG4gICAgICAgIHBvd2VyTXVsdGlwbGllclN0YWNrUHJvZHVjdCAqPSBwb3dlck11bHRpcGxpZXJDdXJyZW50O1xuICAgICAgICBwb3dlck11bHRpcGxpZXJDdXJyZW50ID0gMTtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgICBza2lwV2hpdGVzcGFjZSgpO1xuICAgICAgfSAvLyBJcyB0aGVyZSBzb21ldGhpbmcgaGVyZT9cblxuXG4gICAgICB2YXIgdVN0ciA9IHZvaWQgMDtcblxuICAgICAgaWYgKGMpIHtcbiAgICAgICAgdmFyIG9sZEMgPSBjO1xuICAgICAgICB1U3RyID0gcGFyc2VVbml0KCk7XG5cbiAgICAgICAgaWYgKHVTdHIgPT09IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1VuZXhwZWN0ZWQgXCInICsgb2xkQyArICdcIiBpbiBcIicgKyB0ZXh0ICsgJ1wiIGF0IGluZGV4ICcgKyBpbmRleC50b1N0cmluZygpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRW5kIG9mIGlucHV0LlxuICAgICAgICBicmVhaztcbiAgICAgIH0gLy8gVmVyaWZ5IHRoZSB1bml0IGV4aXN0cyBhbmQgZ2V0IHRoZSBwcmVmaXggKGlmIGFueSlcblxuXG4gICAgICB2YXIgcmVzID0gX2ZpbmRVbml0KHVTdHIpO1xuXG4gICAgICBpZiAocmVzID09PSBudWxsKSB7XG4gICAgICAgIC8vIFVuaXQgbm90IGZvdW5kLlxuICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1VuaXQgXCInICsgdVN0ciArICdcIiBub3QgZm91bmQuJyk7XG4gICAgICB9XG5cbiAgICAgIHZhciBwb3dlciA9IHBvd2VyTXVsdGlwbGllckN1cnJlbnQgKiBwb3dlck11bHRpcGxpZXJTdGFja1Byb2R1Y3Q7IC8vIElzIHRoZXJlIGEgXCJeIG51bWJlclwiP1xuXG4gICAgICBza2lwV2hpdGVzcGFjZSgpO1xuXG4gICAgICBpZiAocGFyc2VDaGFyYWN0ZXIoJ14nKSkge1xuICAgICAgICBza2lwV2hpdGVzcGFjZSgpO1xuICAgICAgICB2YXIgcCA9IHBhcnNlTnVtYmVyKCk7XG5cbiAgICAgICAgaWYgKHAgPT09IG51bGwpIHtcbiAgICAgICAgICAvLyBObyB2YWxpZCBudW1iZXIgZm91bmQgZm9yIHRoZSBwb3dlciFcbiAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ0luIFwiJyArIHN0ciArICdcIiwgXCJeXCIgbXVzdCBiZSBmb2xsb3dlZCBieSBhIGZsb2F0aW5nLXBvaW50IG51bWJlcicpO1xuICAgICAgICB9XG5cbiAgICAgICAgcG93ZXIgKj0gcDtcbiAgICAgIH0gLy8gQWRkIHRoZSB1bml0IHRvIHRoZSBsaXN0XG5cblxuICAgICAgdW5pdC51bml0cy5wdXNoKHtcbiAgICAgICAgdW5pdDogcmVzLnVuaXQsXG4gICAgICAgIHByZWZpeDogcmVzLnByZWZpeCxcbiAgICAgICAgcG93ZXI6IHBvd2VyXG4gICAgICB9KTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBCQVNFX0RJTUVOU0lPTlMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdW5pdC5kaW1lbnNpb25zW2ldICs9IChyZXMudW5pdC5kaW1lbnNpb25zW2ldIHx8IDApICogcG93ZXI7XG4gICAgICB9IC8vIENoZWNrIGZvciBhbmQgY29uc3VtZSBjbG9zaW5nIHBhcmVudGhlc2VzLCBwb3BwaW5nIGZyb20gdGhlIHN0YWNrLlxuICAgICAgLy8gQSAnKScgd2lsbCBhbHdheXMgZm9sbG93IGEgdW5pdC5cblxuXG4gICAgICBza2lwV2hpdGVzcGFjZSgpO1xuXG4gICAgICB3aGlsZSAoYyA9PT0gJyknKSB7XG4gICAgICAgIGlmIChwb3dlck11bHRpcGxpZXJTdGFjay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1VubWF0Y2hlZCBcIilcIiBpbiBcIicgKyB0ZXh0ICsgJ1wiIGF0IGluZGV4ICcgKyBpbmRleC50b1N0cmluZygpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBvd2VyTXVsdGlwbGllclN0YWNrUHJvZHVjdCAvPSBwb3dlck11bHRpcGxpZXJTdGFjay5wb3AoKTtcbiAgICAgICAgbmV4dCgpO1xuICAgICAgICBza2lwV2hpdGVzcGFjZSgpO1xuICAgICAgfSAvLyBcIipcIiBhbmQgXCIvXCIgc2hvdWxkIG1lYW4gd2UgYXJlIGV4cGVjdGluZyBzb21ldGhpbmcgdG8gY29tZSBuZXh0LlxuICAgICAgLy8gSXMgdGhlcmUgYSBmb3J3YXJkIHNsYXNoPyBJZiBzbywgbmVnYXRlIHBvd2VyTXVsdGlwbGllckN1cnJlbnQuIFRoZSBuZXh0IHVuaXQgb3IgcGFyZW4gZ3JvdXAgaXMgaW4gdGhlIGRlbm9taW5hdG9yLlxuXG5cbiAgICAgIGV4cGVjdGluZ1VuaXQgPSBmYWxzZTtcblxuICAgICAgaWYgKHBhcnNlQ2hhcmFjdGVyKCcqJykpIHtcbiAgICAgICAgLy8gZXhwbGljaXQgbXVsdGlwbGljYXRpb25cbiAgICAgICAgcG93ZXJNdWx0aXBsaWVyQ3VycmVudCA9IDE7XG4gICAgICAgIGV4cGVjdGluZ1VuaXQgPSB0cnVlO1xuICAgICAgfSBlbHNlIGlmIChwYXJzZUNoYXJhY3RlcignLycpKSB7XG4gICAgICAgIC8vIGRpdmlzaW9uXG4gICAgICAgIHBvd2VyTXVsdGlwbGllckN1cnJlbnQgPSAtMTtcbiAgICAgICAgZXhwZWN0aW5nVW5pdCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBpbXBsaWNpdCBtdWx0aXBsaWNhdGlvblxuICAgICAgICBwb3dlck11bHRpcGxpZXJDdXJyZW50ID0gMTtcbiAgICAgIH0gLy8gUmVwbGFjZSB0aGUgdW5pdCBpbnRvIHRoZSBhdXRvIHVuaXQgc3lzdGVtXG5cblxuICAgICAgaWYgKHJlcy51bml0LmJhc2UpIHtcbiAgICAgICAgdmFyIGJhc2VEaW0gPSByZXMudW5pdC5iYXNlLmtleTtcbiAgICAgICAgVU5JVF9TWVNURU1TLmF1dG9bYmFzZURpbV0gPSB7XG4gICAgICAgICAgdW5pdDogcmVzLnVuaXQsXG4gICAgICAgICAgcHJlZml4OiByZXMucHJlZml4XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSAvLyBIYXMgdGhlIHN0cmluZyBiZWVuIGVudGlyZWx5IGNvbnN1bWVkP1xuXG5cbiAgICBza2lwV2hpdGVzcGFjZSgpO1xuXG4gICAgaWYgKGMpIHtcbiAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignQ291bGQgbm90IHBhcnNlOiBcIicgKyBzdHIgKyAnXCInKTtcbiAgICB9IC8vIElzIHRoZXJlIGEgdHJhaWxpbmcgc2xhc2g/XG5cblxuICAgIGlmIChleHBlY3RpbmdVbml0KSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1RyYWlsaW5nIGNoYXJhY3RlcnM6IFwiJyArIHN0ciArICdcIicpO1xuICAgIH0gLy8gSXMgdGhlIHBhcmVudGhlc2VzIHN0YWNrIGVtcHR5P1xuXG5cbiAgICBpZiAocG93ZXJNdWx0aXBsaWVyU3RhY2subGVuZ3RoICE9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1VubWF0Y2hlZCBcIihcIiBpbiBcIicgKyB0ZXh0ICsgJ1wiJyk7XG4gICAgfSAvLyBBcmUgdGhlcmUgYW55IHVuaXRzIGF0IGFsbD9cblxuXG4gICAgaWYgKHVuaXQudW5pdHMubGVuZ3RoID09PSAwICYmICFvcHRpb25zLmFsbG93Tm9Vbml0cykge1xuICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdcIicgKyBzdHIgKyAnXCIgY29udGFpbnMgbm8gdW5pdHMnKTtcbiAgICB9XG5cbiAgICB1bml0LnZhbHVlID0gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHVuaXQuX25vcm1hbGl6ZSh2YWx1ZSkgOiBudWxsO1xuICAgIHJldHVybiB1bml0O1xuICB9O1xuICAvKipcbiAgICogY3JlYXRlIGEgY29weSBvZiB0aGlzIHVuaXRcbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHJldHVybiB7VW5pdH0gUmV0dXJucyBhIGNsb25lZCB2ZXJzaW9uIG9mIHRoZSB1bml0XG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHVuaXQgPSBuZXcgVW5pdCgpO1xuICAgIHVuaXQuZml4UHJlZml4ID0gdGhpcy5maXhQcmVmaXg7XG4gICAgdW5pdC5za2lwQXV0b21hdGljU2ltcGxpZmljYXRpb24gPSB0aGlzLnNraXBBdXRvbWF0aWNTaW1wbGlmaWNhdGlvbjtcbiAgICB1bml0LnZhbHVlID0gKDAsIF9vYmplY3QuY2xvbmUpKHRoaXMudmFsdWUpO1xuICAgIHVuaXQuZGltZW5zaW9ucyA9IHRoaXMuZGltZW5zaW9ucy5zbGljZSgwKTtcbiAgICB1bml0LnVuaXRzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudW5pdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHVuaXQudW5pdHNbaV0gPSB7fTtcblxuICAgICAgZm9yICh2YXIgcCBpbiB0aGlzLnVuaXRzW2ldKSB7XG4gICAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkodGhpcy51bml0c1tpXSwgcCkpIHtcbiAgICAgICAgICB1bml0LnVuaXRzW2ldW3BdID0gdGhpcy51bml0c1tpXVtwXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bml0O1xuICB9O1xuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIHVuaXQgaXMgZGVyaXZlZCAoc3VjaCBhcyBtL3MsIG9yIGNtXjIsIGJ1dCBub3QgTilcbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdW5pdCBpcyBkZXJpdmVkXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUuX2lzRGVyaXZlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy51bml0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy51bml0cy5sZW5ndGggPiAxIHx8IE1hdGguYWJzKHRoaXMudW5pdHNbMF0ucG93ZXIgLSAxLjApID4gMWUtMTU7XG4gIH07XG4gIC8qKlxuICAgKiBOb3JtYWxpemUgYSB2YWx1ZSwgYmFzZWQgb24gaXRzIGN1cnJlbnRseSBzZXQgdW5pdChzKVxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge251bWJlciB8IEJpZ051bWJlciB8IEZyYWN0aW9uIHwgYm9vbGVhbn0gdmFsdWVcbiAgICogQHJldHVybiB7bnVtYmVyIHwgQmlnTnVtYmVyIHwgRnJhY3Rpb24gfCBib29sZWFufSBub3JtYWxpemVkIHZhbHVlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUuX25vcm1hbGl6ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHZhciB1bml0VmFsdWUsIHVuaXRPZmZzZXQsIHVuaXRQb3dlciwgdW5pdFByZWZpeFZhbHVlO1xuICAgIHZhciBjb252ZXJ0O1xuXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdGhpcy51bml0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lzRGVyaXZlZCgpKSB7XG4gICAgICAvLyBUaGlzIGlzIGEgZGVyaXZlZCB1bml0LCBzbyBkbyBub3QgYXBwbHkgb2Zmc2V0cy5cbiAgICAgIC8vIEZvciBleGFtcGxlLCB3aXRoIEoga2deLTEgZGVnQ14tMSB5b3Ugd291bGQgTk9UIHdhbnQgdG8gYXBwbHkgdGhlIG9mZnNldC5cbiAgICAgIHZhciByZXMgPSB2YWx1ZTtcbiAgICAgIGNvbnZlcnQgPSBVbml0Ll9nZXROdW1iZXJDb252ZXJ0ZXIoKDAsIF9pcy50eXBlT2YpKHZhbHVlKSk7IC8vIGNvbnZlcnQgdG8gRnJhY3Rpb24gb3IgQmlnTnVtYmVyIGlmIG5lZWRlZFxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudW5pdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdW5pdFZhbHVlID0gY29udmVydCh0aGlzLnVuaXRzW2ldLnVuaXQudmFsdWUpO1xuICAgICAgICB1bml0UHJlZml4VmFsdWUgPSBjb252ZXJ0KHRoaXMudW5pdHNbaV0ucHJlZml4LnZhbHVlKTtcbiAgICAgICAgdW5pdFBvd2VyID0gY29udmVydCh0aGlzLnVuaXRzW2ldLnBvd2VyKTtcbiAgICAgICAgcmVzID0gbXVsdGlwbHlTY2FsYXIocmVzLCBwb3cobXVsdGlwbHlTY2FsYXIodW5pdFZhbHVlLCB1bml0UHJlZml4VmFsdWUpLCB1bml0UG93ZXIpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHJlcztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gVGhpcyBpcyBhIHNpbmdsZSB1bml0IG9mIHBvd2VyIDEsIGxpa2Uga2cgb3IgZGVnQ1xuICAgICAgY29udmVydCA9IFVuaXQuX2dldE51bWJlckNvbnZlcnRlcigoMCwgX2lzLnR5cGVPZikodmFsdWUpKTsgLy8gY29udmVydCB0byBGcmFjdGlvbiBvciBCaWdOdW1iZXIgaWYgbmVlZGVkXG5cbiAgICAgIHVuaXRWYWx1ZSA9IGNvbnZlcnQodGhpcy51bml0c1swXS51bml0LnZhbHVlKTtcbiAgICAgIHVuaXRPZmZzZXQgPSBjb252ZXJ0KHRoaXMudW5pdHNbMF0udW5pdC5vZmZzZXQpO1xuICAgICAgdW5pdFByZWZpeFZhbHVlID0gY29udmVydCh0aGlzLnVuaXRzWzBdLnByZWZpeC52YWx1ZSk7XG4gICAgICByZXR1cm4gbXVsdGlwbHlTY2FsYXIoYWRkU2NhbGFyKHZhbHVlLCB1bml0T2Zmc2V0KSwgbXVsdGlwbHlTY2FsYXIodW5pdFZhbHVlLCB1bml0UHJlZml4VmFsdWUpKTtcbiAgICB9XG4gIH07XG4gIC8qKlxuICAgKiBEZW5vcm1hbGl6ZSBhIHZhbHVlLCBiYXNlZCBvbiBpdHMgY3VycmVudGx5IHNldCB1bml0KHMpXG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge251bWJlcn0gW3ByZWZpeFZhbHVlXSAgICBPcHRpb25hbCBwcmVmaXggdmFsdWUgdG8gYmUgdXNlZCAoaWdub3JlZCBpZiB0aGlzIGlzIGEgZGVyaXZlZCB1bml0KVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9IGRlbm9ybWFsaXplZCB2YWx1ZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLl9kZW5vcm1hbGl6ZSA9IGZ1bmN0aW9uICh2YWx1ZSwgcHJlZml4VmFsdWUpIHtcbiAgICB2YXIgdW5pdFZhbHVlLCB1bml0T2Zmc2V0LCB1bml0UG93ZXIsIHVuaXRQcmVmaXhWYWx1ZTtcbiAgICB2YXIgY29udmVydDtcblxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHRoaXMudW5pdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9pc0Rlcml2ZWQoKSkge1xuICAgICAgLy8gVGhpcyBpcyBhIGRlcml2ZWQgdW5pdCwgc28gZG8gbm90IGFwcGx5IG9mZnNldHMuXG4gICAgICAvLyBGb3IgZXhhbXBsZSwgd2l0aCBKIGtnXi0xIGRlZ0NeLTEgeW91IHdvdWxkIE5PVCB3YW50IHRvIGFwcGx5IHRoZSBvZmZzZXQuXG4gICAgICAvLyBBbHNvLCBwcmVmaXhWYWx1ZSBpcyBpZ25vcmVkLS1idXQgd2Ugd2lsbCBzdGlsbCB1c2UgdGhlIHByZWZpeCB2YWx1ZSBzdG9yZWQgaW4gZWFjaCB1bml0LCBzaW5jZSBrZyBpcyB1c3VhbGx5IHByZWZlcmFibGUgdG8gZyB1bmxlc3MgdGhlIHVzZXIgZGVjaWRlcyBvdGhlcndpc2UuXG4gICAgICB2YXIgcmVzID0gdmFsdWU7XG4gICAgICBjb252ZXJ0ID0gVW5pdC5fZ2V0TnVtYmVyQ29udmVydGVyKCgwLCBfaXMudHlwZU9mKSh2YWx1ZSkpOyAvLyBjb252ZXJ0IHRvIEZyYWN0aW9uIG9yIEJpZ051bWJlciBpZiBuZWVkZWRcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnVuaXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHVuaXRWYWx1ZSA9IGNvbnZlcnQodGhpcy51bml0c1tpXS51bml0LnZhbHVlKTtcbiAgICAgICAgdW5pdFByZWZpeFZhbHVlID0gY29udmVydCh0aGlzLnVuaXRzW2ldLnByZWZpeC52YWx1ZSk7XG4gICAgICAgIHVuaXRQb3dlciA9IGNvbnZlcnQodGhpcy51bml0c1tpXS5wb3dlcik7XG4gICAgICAgIHJlcyA9IGRpdmlkZVNjYWxhcihyZXMsIHBvdyhtdWx0aXBseVNjYWxhcih1bml0VmFsdWUsIHVuaXRQcmVmaXhWYWx1ZSksIHVuaXRQb3dlcikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIGlzIGEgc2luZ2xlIHVuaXQgb2YgcG93ZXIgMSwgbGlrZSBrZyBvciBkZWdDXG4gICAgICBjb252ZXJ0ID0gVW5pdC5fZ2V0TnVtYmVyQ29udmVydGVyKCgwLCBfaXMudHlwZU9mKSh2YWx1ZSkpOyAvLyBjb252ZXJ0IHRvIEZyYWN0aW9uIG9yIEJpZ051bWJlciBpZiBuZWVkZWRcblxuICAgICAgdW5pdFZhbHVlID0gY29udmVydCh0aGlzLnVuaXRzWzBdLnVuaXQudmFsdWUpO1xuICAgICAgdW5pdFByZWZpeFZhbHVlID0gY29udmVydCh0aGlzLnVuaXRzWzBdLnByZWZpeC52YWx1ZSk7XG4gICAgICB1bml0T2Zmc2V0ID0gY29udmVydCh0aGlzLnVuaXRzWzBdLnVuaXQub2Zmc2V0KTtcblxuICAgICAgaWYgKHByZWZpeFZhbHVlID09PSB1bmRlZmluZWQgfHwgcHJlZml4VmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHN1YnRyYWN0KGRpdmlkZVNjYWxhcihkaXZpZGVTY2FsYXIodmFsdWUsIHVuaXRWYWx1ZSksIHVuaXRQcmVmaXhWYWx1ZSksIHVuaXRPZmZzZXQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHN1YnRyYWN0KGRpdmlkZVNjYWxhcihkaXZpZGVTY2FsYXIodmFsdWUsIHVuaXRWYWx1ZSksIHByZWZpeFZhbHVlKSwgdW5pdE9mZnNldCk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogRmluZCBhIHVuaXQgZnJvbSBhIHN0cmluZ1xuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyICAgICAgICAgICAgICBBIHN0cmluZyBsaWtlICdjbScgb3IgJ2luY2gnXG4gICAqIEByZXR1cm5zIHtPYmplY3QgfCBudWxsfSByZXN1bHQgIFdoZW4gZm91bmQsIGFuIG9iamVjdCB3aXRoIGZpZWxkcyB1bml0IGFuZFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXggaXMgcmV0dXJuZWQuIEVsc2UsIG51bGwgaXMgcmV0dXJuZWQuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gX2ZpbmRVbml0KHN0cikge1xuICAgIC8vIEZpcnN0LCBtYXRjaCB1bml0cyBuYW1lcyBleGFjdGx5LiBGb3IgZXhhbXBsZSwgYSB1c2VyIGNvdWxkIGRlZmluZSAnbW0nIGFzIDEwXi00IG0sIHdoaWNoIGlzIHNpbGx5LCBidXQgdGhlbiB3ZSB3b3VsZCB3YW50ICdtbScgdG8gbWF0Y2ggdGhlIHVzZXItZGVmaW5lZCB1bml0LlxuICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoVU5JVFMsIHN0cikpIHtcbiAgICAgIHZhciB1bml0ID0gVU5JVFNbc3RyXTtcbiAgICAgIHZhciBwcmVmaXggPSB1bml0LnByZWZpeGVzWycnXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHVuaXQ6IHVuaXQsXG4gICAgICAgIHByZWZpeDogcHJlZml4XG4gICAgICB9O1xuICAgIH1cblxuICAgIGZvciAodmFyIF9uYW1lIGluIFVOSVRTKSB7XG4gICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKFVOSVRTLCBfbmFtZSkpIHtcbiAgICAgICAgaWYgKCgwLCBfc3RyaW5nLmVuZHNXaXRoKShzdHIsIF9uYW1lKSkge1xuICAgICAgICAgIHZhciBfdW5pdCA9IFVOSVRTW19uYW1lXTtcbiAgICAgICAgICB2YXIgcHJlZml4TGVuID0gc3RyLmxlbmd0aCAtIF9uYW1lLmxlbmd0aDtcbiAgICAgICAgICB2YXIgcHJlZml4TmFtZSA9IHN0ci5zdWJzdHJpbmcoMCwgcHJlZml4TGVuKTtcblxuICAgICAgICAgIHZhciBfcHJlZml4ID0gKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKF91bml0LnByZWZpeGVzLCBwcmVmaXhOYW1lKSA/IF91bml0LnByZWZpeGVzW3ByZWZpeE5hbWVdIDogdW5kZWZpbmVkO1xuXG4gICAgICAgICAgaWYgKF9wcmVmaXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gc3RvcmUgdW5pdCwgcHJlZml4LCBhbmQgdmFsdWVcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHVuaXQ6IF91bml0LFxuICAgICAgICAgICAgICBwcmVmaXg6IF9wcmVmaXhcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIFRlc3QgaWYgdGhlIGdpdmVuIGV4cHJlc3Npb24gaXMgYSB1bml0LlxuICAgKiBUaGUgdW5pdCBjYW4gaGF2ZSBhIHByZWZpeCBidXQgY2Fubm90IGhhdmUgYSB2YWx1ZS5cbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgICBBIHN0cmluZyB0byBiZSB0ZXN0ZWQgd2hldGhlciBpdCBpcyBhIHZhbHVlIGxlc3MgdW5pdC5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICBUaGUgdW5pdCBjYW4gaGF2ZSBwcmVmaXgsIGxpa2UgXCJjbVwiXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59ICAgICAgdHJ1ZSBpZiB0aGUgZ2l2ZW4gc3RyaW5nIGlzIGEgdW5pdFxuICAgKi9cblxuXG4gIFVuaXQuaXNWYWx1ZWxlc3NVbml0ID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICByZXR1cm4gX2ZpbmRVbml0KG5hbWUpICE9PSBudWxsO1xuICB9O1xuICAvKipcbiAgICogY2hlY2sgaWYgdGhpcyB1bml0IGhhcyBnaXZlbiBiYXNlIHVuaXRcbiAgICogSWYgdGhpcyB1bml0IGlzIGEgZGVyaXZlZCB1bml0LCB0aGlzIHdpbGwgQUxXQVlTIHJldHVybiBmYWxzZSwgc2luY2UgYnkgZGVmaW5pdGlvbiBiYXNlIHVuaXRzIGFyZSBub3QgZGVyaXZlZC5cbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHBhcmFtIHtCQVNFX1VOSVRTIHwgc3RyaW5nIHwgdW5kZWZpbmVkfSBiYXNlXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUuaGFzQmFzZSA9IGZ1bmN0aW9uIChiYXNlKSB7XG4gICAgaWYgKHR5cGVvZiBiYXNlID09PSAnc3RyaW5nJykge1xuICAgICAgYmFzZSA9IEJBU0VfVU5JVFNbYmFzZV07XG4gICAgfVxuXG4gICAgaWYgKCFiYXNlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBBbGwgZGltZW5zaW9ucyBtdXN0IGJlIHRoZSBzYW1lXG5cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgQkFTRV9ESU1FTlNJT05TLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoTWF0aC5hYnMoKHRoaXMuZGltZW5zaW9uc1tpXSB8fCAwKSAtIChiYXNlLmRpbWVuc2lvbnNbaV0gfHwgMCkpID4gMWUtMTIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9O1xuICAvKipcbiAgICogQ2hlY2sgaWYgdGhpcyB1bml0IGhhcyBhIGJhc2Ugb3IgYmFzZXMgZXF1YWwgdG8gYW5vdGhlciBiYXNlIG9yIGJhc2VzXG4gICAqIEZvciBkZXJpdmVkIHVuaXRzLCB0aGUgZXhwb25lbnQgb24gZWFjaCBiYXNlIGFsc28gbXVzdCBtYXRjaFxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge1VuaXR9IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgZXF1YWwgYmFzZVxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLmVxdWFsQmFzZSA9IGZ1bmN0aW9uIChvdGhlcikge1xuICAgIC8vIEFsbCBkaW1lbnNpb25zIG11c3QgYmUgdGhlIHNhbWVcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKE1hdGguYWJzKCh0aGlzLmRpbWVuc2lvbnNbaV0gfHwgMCkgLSAob3RoZXIuZGltZW5zaW9uc1tpXSB8fCAwKSkgPiAxZS0xMikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG4gIC8qKlxuICAgKiBDaGVjayBpZiB0aGlzIHVuaXQgZXF1YWxzIGFub3RoZXIgdW5pdFxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge1VuaXR9IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59IHRydWUgaWYgYm90aCB1bml0cyBhcmUgZXF1YWxcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiAob3RoZXIpIHtcbiAgICByZXR1cm4gdGhpcy5lcXVhbEJhc2Uob3RoZXIpICYmIGVxdWFsKHRoaXMudmFsdWUsIG90aGVyLnZhbHVlKTtcbiAgfTtcbiAgLyoqXG4gICAqIE11bHRpcGx5IHRoaXMgdW5pdCB3aXRoIGFub3RoZXIgb25lXG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7VW5pdH0gb3RoZXJcbiAgICogQHJldHVybiB7VW5pdH0gcHJvZHVjdCBvZiB0aGlzIHVuaXQgYW5kIHRoZSBvdGhlciB1bml0XG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUubXVsdGlwbHkgPSBmdW5jdGlvbiAob3RoZXIpIHtcbiAgICB2YXIgcmVzID0gdGhpcy5jbG9uZSgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBCQVNFX0RJTUVOU0lPTlMubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIERpbWVuc2lvbnMgYXJyYXlzIG1heSBiZSBvZiBkaWZmZXJlbnQgbGVuZ3Rocy4gRGVmYXVsdCB0byAwLlxuICAgICAgcmVzLmRpbWVuc2lvbnNbaV0gPSAodGhpcy5kaW1lbnNpb25zW2ldIHx8IDApICsgKG90aGVyLmRpbWVuc2lvbnNbaV0gfHwgMCk7XG4gICAgfSAvLyBBcHBlbmQgb3RoZXIncyB1bml0cyBsaXN0IG9udG8gcmVzXG5cblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBvdGhlci51bml0cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIC8vIE1ha2UgYSBkZWVwIGNvcHlcbiAgICAgIHZhciBpbnZlcnRlZCA9IHt9O1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gb3RoZXIudW5pdHNbX2ldKSB7XG4gICAgICAgIGludmVydGVkW2tleV0gPSBvdGhlci51bml0c1tfaV1ba2V5XTtcbiAgICAgIH1cblxuICAgICAgcmVzLnVuaXRzLnB1c2goaW52ZXJ0ZWQpO1xuICAgIH0gLy8gSWYgYXQgbGVhc3Qgb25lIG9wZXJhbmQgaGFzIGEgdmFsdWUsIHRoZW4gdGhlIHJlc3VsdCBzaG91bGQgYWxzbyBoYXZlIGEgdmFsdWVcblxuXG4gICAgaWYgKHRoaXMudmFsdWUgIT09IG51bGwgfHwgb3RoZXIudmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHZhciB2YWxUaGlzID0gdGhpcy52YWx1ZSA9PT0gbnVsbCA/IHRoaXMuX25vcm1hbGl6ZSgxKSA6IHRoaXMudmFsdWU7XG4gICAgICB2YXIgdmFsT3RoZXIgPSBvdGhlci52YWx1ZSA9PT0gbnVsbCA/IG90aGVyLl9ub3JtYWxpemUoMSkgOiBvdGhlci52YWx1ZTtcbiAgICAgIHJlcy52YWx1ZSA9IG11bHRpcGx5U2NhbGFyKHZhbFRoaXMsIHZhbE90aGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzLnZhbHVlID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXMuc2tpcEF1dG9tYXRpY1NpbXBsaWZpY2F0aW9uID0gZmFsc2U7XG4gICAgcmV0dXJuIGdldE51bWVyaWNJZlVuaXRsZXNzKHJlcyk7XG4gIH07XG4gIC8qKlxuICAgKiBEaXZpZGUgdGhpcyB1bml0IGJ5IGFub3RoZXIgb25lXG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7VW5pdH0gb3RoZXJcbiAgICogQHJldHVybiB7VW5pdH0gcmVzdWx0IG9mIGRpdmlkaW5nIHRoaXMgdW5pdCBieSB0aGUgb3RoZXIgdW5pdFxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLmRpdmlkZSA9IGZ1bmN0aW9uIChvdGhlcikge1xuICAgIHZhciByZXMgPSB0aGlzLmNsb25lKCk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IGkrKykge1xuICAgICAgLy8gRGltZW5zaW9ucyBhcnJheXMgbWF5IGJlIG9mIGRpZmZlcmVudCBsZW5ndGhzLiBEZWZhdWx0IHRvIDAuXG4gICAgICByZXMuZGltZW5zaW9uc1tpXSA9ICh0aGlzLmRpbWVuc2lvbnNbaV0gfHwgMCkgLSAob3RoZXIuZGltZW5zaW9uc1tpXSB8fCAwKTtcbiAgICB9IC8vIEludmVydCBhbmQgYXBwZW5kIG90aGVyJ3MgdW5pdHMgbGlzdCBvbnRvIHJlc1xuXG5cbiAgICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBvdGhlci51bml0cy5sZW5ndGg7IF9pMisrKSB7XG4gICAgICAvLyBNYWtlIGEgZGVlcCBjb3B5XG4gICAgICB2YXIgaW52ZXJ0ZWQgPSB7fTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIG90aGVyLnVuaXRzW19pMl0pIHtcbiAgICAgICAgaW52ZXJ0ZWRba2V5XSA9IG90aGVyLnVuaXRzW19pMl1ba2V5XTtcbiAgICAgIH1cblxuICAgICAgaW52ZXJ0ZWQucG93ZXIgPSAtaW52ZXJ0ZWQucG93ZXI7XG4gICAgICByZXMudW5pdHMucHVzaChpbnZlcnRlZCk7XG4gICAgfSAvLyBJZiBhdCBsZWFzdCBvbmUgb3BlcmFuZCBoYXMgYSB2YWx1ZSwgdGhlIHJlc3VsdCBzaG91bGQgaGF2ZSBhIHZhbHVlXG5cblxuICAgIGlmICh0aGlzLnZhbHVlICE9PSBudWxsIHx8IG90aGVyLnZhbHVlICE9PSBudWxsKSB7XG4gICAgICB2YXIgdmFsVGhpcyA9IHRoaXMudmFsdWUgPT09IG51bGwgPyB0aGlzLl9ub3JtYWxpemUoMSkgOiB0aGlzLnZhbHVlO1xuICAgICAgdmFyIHZhbE90aGVyID0gb3RoZXIudmFsdWUgPT09IG51bGwgPyBvdGhlci5fbm9ybWFsaXplKDEpIDogb3RoZXIudmFsdWU7XG4gICAgICByZXMudmFsdWUgPSBkaXZpZGVTY2FsYXIodmFsVGhpcywgdmFsT3RoZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMudmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIHJlcy5za2lwQXV0b21hdGljU2ltcGxpZmljYXRpb24gPSBmYWxzZTtcbiAgICByZXR1cm4gZ2V0TnVtZXJpY0lmVW5pdGxlc3MocmVzKTtcbiAgfTtcbiAgLyoqXG4gICAqIENhbGN1bGF0ZSB0aGUgcG93ZXIgb2YgYSB1bml0XG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7bnVtYmVyIHwgRnJhY3Rpb24gfCBCaWdOdW1iZXJ9IHBcbiAgICogQHJldHVybnMge1VuaXR9ICAgICAgVGhlIHJlc3VsdDogdGhpc15wXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUucG93ID0gZnVuY3Rpb24gKHApIHtcbiAgICB2YXIgcmVzID0gdGhpcy5jbG9uZSgpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBCQVNFX0RJTUVOU0lPTlMubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIERpbWVuc2lvbnMgYXJyYXlzIG1heSBiZSBvZiBkaWZmZXJlbnQgbGVuZ3Rocy4gRGVmYXVsdCB0byAwLlxuICAgICAgcmVzLmRpbWVuc2lvbnNbaV0gPSAodGhpcy5kaW1lbnNpb25zW2ldIHx8IDApICogcDtcbiAgICB9IC8vIEFkanVzdCB0aGUgcG93ZXIgb2YgZWFjaCB1bml0IGluIHRoZSBsaXN0XG5cblxuICAgIGZvciAodmFyIF9pMyA9IDA7IF9pMyA8IHJlcy51bml0cy5sZW5ndGg7IF9pMysrKSB7XG4gICAgICByZXMudW5pdHNbX2kzXS5wb3dlciAqPSBwO1xuICAgIH1cblxuICAgIGlmIChyZXMudmFsdWUgIT09IG51bGwpIHtcbiAgICAgIHJlcy52YWx1ZSA9IHBvdyhyZXMudmFsdWUsIHApOyAvLyBvbmx5IGFsbG93IG51bWVyaWMgb3V0cHV0LCB3ZSBkb24ndCB3YW50IHRvIHJldHVybiBhIENvbXBsZXggbnVtYmVyXG4gICAgICAvLyBpZiAoIWlzTnVtZXJpYyhyZXMudmFsdWUpKSB7XG4gICAgICAvLyAgcmVzLnZhbHVlID0gTmFOXG4gICAgICAvLyB9XG4gICAgICAvLyBVcGRhdGU6IENvbXBsZXggc3VwcG9ydGVkIG5vd1xuICAgIH0gZWxzZSB7XG4gICAgICByZXMudmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIHJlcy5za2lwQXV0b21hdGljU2ltcGxpZmljYXRpb24gPSBmYWxzZTtcbiAgICByZXR1cm4gZ2V0TnVtZXJpY0lmVW5pdGxlc3MocmVzKTtcbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbnVtZXJpYyB2YWx1ZSBvZiB0aGlzIHVuaXQgaWYgaXQgaXMgZGltZW5zaW9ubGVzcywgaGFzIGEgdmFsdWUsIGFuZCBjb25maWcucHJlZGljdGFibGUgPT0gZmFsc2U7IG9yIHRoZSBvcmlnaW5hbCB1bml0IG90aGVyd2lzZVxuICAgKiBAcGFyYW0ge1VuaXR9IHVuaXRcbiAgICogQHJldHVybnMge251bWJlciB8IEZyYWN0aW9uIHwgQmlnTnVtYmVyIHwgVW5pdH0gIFRoZSBudW1lcmljIHZhbHVlIG9mIHRoZSB1bml0IGlmIGNvbmRpdGlvbnMgYXJlIG1ldCwgb3IgdGhlIG9yaWdpbmFsIHVuaXQgb3RoZXJ3aXNlXG4gICAqL1xuXG5cbiAgZnVuY3Rpb24gZ2V0TnVtZXJpY0lmVW5pdGxlc3ModW5pdCkge1xuICAgIGlmICh1bml0LmVxdWFsQmFzZShCQVNFX1VOSVRTLk5PTkUpICYmIHVuaXQudmFsdWUgIT09IG51bGwgJiYgIWNvbmZpZy5wcmVkaWN0YWJsZSkge1xuICAgICAgcmV0dXJuIHVuaXQudmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB1bml0O1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiBhIHVuaXRcbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHBhcmFtIHtudW1iZXIgfCBGcmFjdGlvbiB8IEJpZ051bWJlcn0geFxuICAgKiBAcmV0dXJucyB7VW5pdH0gICAgICBUaGUgcmVzdWx0OiB8eHwsIGFic29sdXRlIHZhbHVlIG9mIHhcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5hYnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gVGhpcyBnaXZlcyBjb3JyZWN0LCBidXQgdW5leHBlY3RlZCwgcmVzdWx0cyBmb3IgdW5pdHMgd2l0aCBhbiBvZmZzZXQuXG4gICAgLy8gRm9yIGV4YW1wbGUsIGFicygtMjgzLjE1IGRlZ0MpID0gLTI2My4xNSBkZWdDICEhIVxuICAgIHZhciByZXQgPSB0aGlzLmNsb25lKCk7XG4gICAgcmV0LnZhbHVlID0gcmV0LnZhbHVlICE9PSBudWxsID8gYWJzKHJldC52YWx1ZSkgOiBudWxsO1xuXG4gICAgZm9yICh2YXIgaSBpbiByZXQudW5pdHMpIHtcbiAgICAgIGlmIChyZXQudW5pdHNbaV0udW5pdC5uYW1lID09PSAnVkEnIHx8IHJldC51bml0c1tpXS51bml0Lm5hbWUgPT09ICdWQVInKSB7XG4gICAgICAgIHJldC51bml0c1tpXS51bml0ID0gVU5JVFMuVztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9O1xuICAvKipcbiAgICogQ29udmVydCB0aGUgdW5pdCB0byBhIHNwZWNpZmljIHVuaXQgbmFtZS5cbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVbml0fSB2YWx1ZWxlc3NVbml0ICAgQSB1bml0IHdpdGhvdXQgdmFsdWUuIENhbiBoYXZlIHByZWZpeCwgbGlrZSBcImNtXCJcbiAgICogQHJldHVybnMge1VuaXR9IFJldHVybnMgYSBjbG9uZSBvZiB0aGUgdW5pdCB3aXRoIGEgZml4ZWQgcHJlZml4IGFuZCB1bml0LlxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLnRvID0gZnVuY3Rpb24gKHZhbHVlbGVzc1VuaXQpIHtcbiAgICB2YXIgb3RoZXI7XG4gICAgdmFyIHZhbHVlID0gdGhpcy52YWx1ZSA9PT0gbnVsbCA/IHRoaXMuX25vcm1hbGl6ZSgxKSA6IHRoaXMudmFsdWU7XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlbGVzc1VuaXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBvdGhlciA9IG5ldyBVbml0KG51bGwsIHZhbHVlbGVzc1VuaXQpXG4gICAgICBvdGhlciA9IFVuaXQucGFyc2UodmFsdWVsZXNzVW5pdCk7XG5cbiAgICAgIGlmICghdGhpcy5lcXVhbEJhc2Uob3RoZXIpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlVuaXRzIGRvIG5vdCBtYXRjaCAoJ1wiLmNvbmNhdChvdGhlci50b1N0cmluZygpLCBcIicgIT0gJ1wiKS5jb25jYXQodGhpcy50b1N0cmluZygpLCBcIicpXCIpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG90aGVyLnZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbnZlcnQgdG8gYSB1bml0IHdpdGggYSB2YWx1ZScpO1xuICAgICAgfVxuXG4gICAgICBvdGhlci52YWx1ZSA9ICgwLCBfb2JqZWN0LmNsb25lKSh2YWx1ZSk7XG4gICAgICBvdGhlci5maXhQcmVmaXggPSB0cnVlO1xuICAgICAgb3RoZXIuc2tpcEF1dG9tYXRpY1NpbXBsaWZpY2F0aW9uID0gdHJ1ZTtcbiAgICAgIHJldHVybiBvdGhlcjtcbiAgICB9IGVsc2UgaWYgKCgwLCBfaXMuaXNVbml0KSh2YWx1ZWxlc3NVbml0KSkge1xuICAgICAgaWYgKCF0aGlzLmVxdWFsQmFzZSh2YWx1ZWxlc3NVbml0KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJVbml0cyBkbyBub3QgbWF0Y2ggKCdcIi5jb25jYXQodmFsdWVsZXNzVW5pdC50b1N0cmluZygpLCBcIicgIT0gJ1wiKS5jb25jYXQodGhpcy50b1N0cmluZygpLCBcIicpXCIpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHZhbHVlbGVzc1VuaXQudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29udmVydCB0byBhIHVuaXQgd2l0aCBhIHZhbHVlJyk7XG4gICAgICB9XG5cbiAgICAgIG90aGVyID0gdmFsdWVsZXNzVW5pdC5jbG9uZSgpO1xuICAgICAgb3RoZXIudmFsdWUgPSAoMCwgX29iamVjdC5jbG9uZSkodmFsdWUpO1xuICAgICAgb3RoZXIuZml4UHJlZml4ID0gdHJ1ZTtcbiAgICAgIG90aGVyLnNraXBBdXRvbWF0aWNTaW1wbGlmaWNhdGlvbiA9IHRydWU7XG4gICAgICByZXR1cm4gb3RoZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3RyaW5nIG9yIFVuaXQgZXhwZWN0ZWQgYXMgcGFyYW1ldGVyJyk7XG4gICAgfVxuICB9O1xuICAvKipcbiAgICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgdW5pdCB3aGVuIHJlcHJlc2VudGVkIHdpdGggZ2l2ZW4gdmFsdWVsZXNzIHVuaXRcbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHBhcmFtIHtzdHJpbmcgfCBVbml0fSB2YWx1ZWxlc3NVbml0ICAgIEZvciBleGFtcGxlICdjbScgb3IgJ2luY2gnXG4gICAqIEByZXR1cm4ge251bWJlcn0gUmV0dXJucyB0aGUgdW5pdCB2YWx1ZSBhcyBudW1iZXIuXG4gICAqL1xuICAvLyBUT0RPOiBkZXByZWNhdGUgVW5pdC50b051bWJlcj8gSXQncyBhbHdheXMgYmV0dGVyIHRvIHVzZSB0b051bWVyaWNcblxuXG4gIFVuaXQucHJvdG90eXBlLnRvTnVtYmVyID0gZnVuY3Rpb24gKHZhbHVlbGVzc1VuaXQpIHtcbiAgICByZXR1cm4gdG9OdW1iZXIodGhpcy50b051bWVyaWModmFsdWVsZXNzVW5pdCkpO1xuICB9O1xuICAvKipcbiAgICogUmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgdW5pdCBpbiB0aGUgb3JpZ2luYWwgbnVtZXJpYyB0eXBlXG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEBwYXJhbSB7c3RyaW5nIHwgVW5pdH0gdmFsdWVsZXNzVW5pdCAgICBGb3IgZXhhbXBsZSAnY20nIG9yICdpbmNoJ1xuICAgKiBAcmV0dXJuIHtudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbn0gUmV0dXJucyB0aGUgdW5pdCB2YWx1ZVxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLnRvTnVtZXJpYyA9IGZ1bmN0aW9uICh2YWx1ZWxlc3NVbml0KSB7XG4gICAgdmFyIG90aGVyO1xuXG4gICAgaWYgKHZhbHVlbGVzc1VuaXQpIHtcbiAgICAgIC8vIEFsbG93IGdldHRpbmcgdGhlIG51bWVyaWMgdmFsdWUgd2l0aG91dCBjb252ZXJ0aW5nIHRvIGEgZGlmZmVyZW50IHVuaXRcbiAgICAgIG90aGVyID0gdGhpcy50byh2YWx1ZWxlc3NVbml0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3RoZXIgPSB0aGlzLmNsb25lKCk7XG4gICAgfVxuXG4gICAgaWYgKG90aGVyLl9pc0Rlcml2ZWQoKSB8fCBvdGhlci51bml0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBvdGhlci5fZGVub3JtYWxpemUob3RoZXIudmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb3RoZXIuX2Rlbm9ybWFsaXplKG90aGVyLnZhbHVlLCBvdGhlci51bml0c1swXS5wcmVmaXgudmFsdWUpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIEdldCBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgdW5pdC5cbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm1hdCgpO1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgSlNPTiByZXByZXNlbnRhdGlvbiBvZiB0aGUgdW5pdFxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIGEgSlNPTiBvYmplY3Qgc3RydWN0dXJlZCBhczpcbiAgICogICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlVuaXRcIiwgXCJ2YWx1ZVwiOiAyLCBcInVuaXRcIjogXCJjbVwiLCBcImZpeFByZWZpeFwiOiBmYWxzZX1gXG4gICAqL1xuXG5cbiAgVW5pdC5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBtYXRoanM6ICdVbml0JyxcbiAgICAgIHZhbHVlOiB0aGlzLl9kZW5vcm1hbGl6ZSh0aGlzLnZhbHVlKSxcbiAgICAgIHVuaXQ6IHRoaXMuZm9ybWF0VW5pdHMoKSxcbiAgICAgIGZpeFByZWZpeDogdGhpcy5maXhQcmVmaXhcbiAgICB9O1xuICB9O1xuICAvKipcbiAgICogSW5zdGFudGlhdGUgYSBVbml0IGZyb20gYSBKU09OIG9iamVjdFxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge09iamVjdH0ganNvbiAgQSBKU09OIG9iamVjdCBzdHJ1Y3R1cmVkIGFzOlxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgYHtcIm1hdGhqc1wiOiBcIlVuaXRcIiwgXCJ2YWx1ZVwiOiAyLCBcInVuaXRcIjogXCJjbVwiLCBcImZpeFByZWZpeFwiOiBmYWxzZX1gXG4gICAqIEByZXR1cm4ge1VuaXR9XG4gICAqL1xuXG5cbiAgVW5pdC5mcm9tSlNPTiA9IGZ1bmN0aW9uIChqc29uKSB7XG4gICAgdmFyIHVuaXQgPSBuZXcgVW5pdChqc29uLnZhbHVlLCBqc29uLnVuaXQpO1xuICAgIHVuaXQuZml4UHJlZml4ID0ganNvbi5maXhQcmVmaXggfHwgZmFsc2U7XG4gICAgcmV0dXJuIHVuaXQ7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHVuaXQuXG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS52YWx1ZU9mID0gVW5pdC5wcm90b3R5cGUudG9TdHJpbmc7XG4gIC8qKlxuICAgKiBTaW1wbGlmeSB0aGlzIFVuaXQncyB1bml0IGxpc3QgYW5kIHJldHVybiBhIG5ldyBVbml0IHdpdGggdGhlIHNpbXBsaWZpZWQgbGlzdC5cbiAgICogVGhlIHJldHVybmVkIFVuaXQgd2lsbCBjb250YWluIGEgbGlzdCBvZiB0aGUgXCJiZXN0XCIgdW5pdHMgZm9yIGZvcm1hdHRpbmcuXG4gICAqL1xuXG4gIFVuaXQucHJvdG90eXBlLnNpbXBsaWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXQgPSB0aGlzLmNsb25lKCk7XG4gICAgdmFyIHByb3Bvc2VkVW5pdExpc3QgPSBbXTsgLy8gU2VhcmNoIGZvciBhIG1hdGNoaW5nIGJhc2VcblxuICAgIHZhciBtYXRjaGluZ0Jhc2U7XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gY3VycmVudFVuaXRTeXN0ZW0pIHtcbiAgICAgIGlmIChyZXQuaGFzQmFzZShCQVNFX1VOSVRTW2tleV0pKSB7XG4gICAgICAgIG1hdGNoaW5nQmFzZSA9IGtleTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1hdGNoaW5nQmFzZSA9PT0gJ05PTkUnKSB7XG4gICAgICByZXQudW5pdHMgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG1hdGNoaW5nVW5pdDtcblxuICAgICAgaWYgKG1hdGNoaW5nQmFzZSkge1xuICAgICAgICAvLyBEb2VzIHRoZSB1bml0IHN5c3RlbSBoYXZlIGEgbWF0Y2hpbmcgdW5pdD9cbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShjdXJyZW50VW5pdFN5c3RlbSwgbWF0Y2hpbmdCYXNlKSkge1xuICAgICAgICAgIG1hdGNoaW5nVW5pdCA9IGN1cnJlbnRVbml0U3lzdGVtW21hdGNoaW5nQmFzZV07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKG1hdGNoaW5nVW5pdCkge1xuICAgICAgICByZXQudW5pdHMgPSBbe1xuICAgICAgICAgIHVuaXQ6IG1hdGNoaW5nVW5pdC51bml0LFxuICAgICAgICAgIHByZWZpeDogbWF0Y2hpbmdVbml0LnByZWZpeCxcbiAgICAgICAgICBwb3dlcjogMS4wXG4gICAgICAgIH1dO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gTXVsdGlwbGUgdW5pdHMgb3IgdW5pdHMgd2l0aCBwb3dlcnMgYXJlIGZvcm1hdHRlZCBsaWtlIHRoaXM6XG4gICAgICAgIC8vIDUgKGtnIG1eMikgLyAoc14zIG1vbClcbiAgICAgICAgLy8gQnVpbGQgYW4gcmVwcmVzZW50YXRpb24gZnJvbSB0aGUgYmFzZSB1bml0cyBvZiB0aGUgY3VycmVudCB1bml0IHN5c3RlbVxuICAgICAgICB2YXIgbWlzc2luZ0Jhc2VEaW0gPSBmYWxzZTtcblxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IEJBU0VfRElNRU5TSU9OUy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIHZhciBiYXNlRGltID0gQkFTRV9ESU1FTlNJT05TW2ldO1xuXG4gICAgICAgICAgaWYgKE1hdGguYWJzKHJldC5kaW1lbnNpb25zW2ldIHx8IDApID4gMWUtMTIpIHtcbiAgICAgICAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoY3VycmVudFVuaXRTeXN0ZW0sIGJhc2VEaW0pKSB7XG4gICAgICAgICAgICAgIHByb3Bvc2VkVW5pdExpc3QucHVzaCh7XG4gICAgICAgICAgICAgICAgdW5pdDogY3VycmVudFVuaXRTeXN0ZW1bYmFzZURpbV0udW5pdCxcbiAgICAgICAgICAgICAgICBwcmVmaXg6IGN1cnJlbnRVbml0U3lzdGVtW2Jhc2VEaW1dLnByZWZpeCxcbiAgICAgICAgICAgICAgICBwb3dlcjogcmV0LmRpbWVuc2lvbnNbaV0gfHwgMFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1pc3NpbmdCYXNlRGltID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gLy8gSXMgdGhlIHByb3Bvc2VkIHVuaXQgbGlzdCBcInNpbXBsZXJcIiB0aGFuIHRoZSBleGlzdGluZyBvbmU/XG5cblxuICAgICAgICBpZiAocHJvcG9zZWRVbml0TGlzdC5sZW5ndGggPCByZXQudW5pdHMubGVuZ3RoICYmICFtaXNzaW5nQmFzZURpbSkge1xuICAgICAgICAgIC8vIFJlcGxhY2UgdGhpcyB1bml0IGxpc3Qgd2l0aCB0aGUgcHJvcG9zZWQgbGlzdFxuICAgICAgICAgIHJldC51bml0cyA9IHByb3Bvc2VkVW5pdExpc3Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0O1xuICB9O1xuICAvKipcbiAgICogUmV0dXJucyBhIG5ldyBVbml0IGluIHRoZSBTSSBzeXN0ZW0gd2l0aCB0aGUgc2FtZSB2YWx1ZSBhcyB0aGlzIG9uZVxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLnRvU0kgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHJldCA9IHRoaXMuY2xvbmUoKTtcbiAgICB2YXIgcHJvcG9zZWRVbml0TGlzdCA9IFtdOyAvLyBNdWx0aXBsZSB1bml0cyBvciB1bml0cyB3aXRoIHBvd2VycyBhcmUgZm9ybWF0dGVkIGxpa2UgdGhpczpcbiAgICAvLyA1IChrZyBtXjIpIC8gKHNeMyBtb2wpXG4gICAgLy8gQnVpbGQgYW4gcmVwcmVzZW50YXRpb24gZnJvbSB0aGUgYmFzZSB1bml0cyBvZiB0aGUgU0kgdW5pdCBzeXN0ZW1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgQkFTRV9ESU1FTlNJT05TLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgYmFzZURpbSA9IEJBU0VfRElNRU5TSU9OU1tpXTtcblxuICAgICAgaWYgKE1hdGguYWJzKHJldC5kaW1lbnNpb25zW2ldIHx8IDApID4gMWUtMTIpIHtcbiAgICAgICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShVTklUX1NZU1RFTVMuc2ksIGJhc2VEaW0pKSB7XG4gICAgICAgICAgcHJvcG9zZWRVbml0TGlzdC5wdXNoKHtcbiAgICAgICAgICAgIHVuaXQ6IFVOSVRfU1lTVEVNUy5zaVtiYXNlRGltXS51bml0LFxuICAgICAgICAgICAgcHJlZml4OiBVTklUX1NZU1RFTVMuc2lbYmFzZURpbV0ucHJlZml4LFxuICAgICAgICAgICAgcG93ZXI6IHJldC5kaW1lbnNpb25zW2ldIHx8IDBcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBleHByZXNzIGN1c3RvbSB1bml0ICcgKyBiYXNlRGltICsgJyBpbiBTSSB1bml0cycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBSZXBsYWNlIHRoaXMgdW5pdCBsaXN0IHdpdGggdGhlIHByb3Bvc2VkIGxpc3RcblxuXG4gICAgcmV0LnVuaXRzID0gcHJvcG9zZWRVbml0TGlzdDtcbiAgICByZXQuZml4UHJlZml4ID0gdHJ1ZTtcbiAgICByZXQuc2tpcEF1dG9tYXRpY1NpbXBsaWZpY2F0aW9uID0gdHJ1ZTtcbiAgICByZXR1cm4gcmV0O1xuICB9O1xuICAvKipcbiAgICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB1bml0cyBvZiB0aGlzIFVuaXQsIHdpdGhvdXQgdGhlIHZhbHVlLiBUaGUgdW5pdCBsaXN0IGlzIGZvcm1hdHRlZCBhcy1pcyB3aXRob3V0IGZpcnN0IGJlaW5nIHNpbXBsaWZpZWQuXG4gICAqIEBtZW1iZXJvZiBVbml0XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5mb3JtYXRVbml0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgc3RyTnVtID0gJyc7XG4gICAgdmFyIHN0ckRlbiA9ICcnO1xuICAgIHZhciBuTnVtID0gMDtcbiAgICB2YXIgbkRlbiA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudW5pdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh0aGlzLnVuaXRzW2ldLnBvd2VyID4gMCkge1xuICAgICAgICBuTnVtKys7XG4gICAgICAgIHN0ck51bSArPSAnICcgKyB0aGlzLnVuaXRzW2ldLnByZWZpeC5uYW1lICsgdGhpcy51bml0c1tpXS51bml0Lm5hbWU7XG5cbiAgICAgICAgaWYgKE1hdGguYWJzKHRoaXMudW5pdHNbaV0ucG93ZXIgLSAxLjApID4gMWUtMTUpIHtcbiAgICAgICAgICBzdHJOdW0gKz0gJ14nICsgdGhpcy51bml0c1tpXS5wb3dlcjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnVuaXRzW2ldLnBvd2VyIDwgMCkge1xuICAgICAgICBuRGVuKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5EZW4gPiAwKSB7XG4gICAgICBmb3IgKHZhciBfaTQgPSAwOyBfaTQgPCB0aGlzLnVuaXRzLmxlbmd0aDsgX2k0KyspIHtcbiAgICAgICAgaWYgKHRoaXMudW5pdHNbX2k0XS5wb3dlciA8IDApIHtcbiAgICAgICAgICBpZiAobk51bSA+IDApIHtcbiAgICAgICAgICAgIHN0ckRlbiArPSAnICcgKyB0aGlzLnVuaXRzW19pNF0ucHJlZml4Lm5hbWUgKyB0aGlzLnVuaXRzW19pNF0udW5pdC5uYW1lO1xuXG4gICAgICAgICAgICBpZiAoTWF0aC5hYnModGhpcy51bml0c1tfaTRdLnBvd2VyICsgMS4wKSA+IDFlLTE1KSB7XG4gICAgICAgICAgICAgIHN0ckRlbiArPSAnXicgKyAtdGhpcy51bml0c1tfaTRdLnBvd2VyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdHJEZW4gKz0gJyAnICsgdGhpcy51bml0c1tfaTRdLnByZWZpeC5uYW1lICsgdGhpcy51bml0c1tfaTRdLnVuaXQubmFtZTtcbiAgICAgICAgICAgIHN0ckRlbiArPSAnXicgKyB0aGlzLnVuaXRzW19pNF0ucG93ZXI7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyBSZW1vdmUgbGVhZGluZyBcIiBcIlxuXG5cbiAgICBzdHJOdW0gPSBzdHJOdW0uc3Vic3RyKDEpO1xuICAgIHN0ckRlbiA9IHN0ckRlbi5zdWJzdHIoMSk7IC8vIEFkZCBwYXJhbnMgZm9yIGJldHRlciBjb3B5L3Bhc3RlIGJhY2sgaW50byBldmFsdWF0ZSwgZm9yIGV4YW1wbGUsIG9yIGZvciBiZXR0ZXIgcHJldHR5IHByaW50IGZvcm1hdHRpbmdcblxuICAgIGlmIChuTnVtID4gMSAmJiBuRGVuID4gMCkge1xuICAgICAgc3RyTnVtID0gJygnICsgc3RyTnVtICsgJyknO1xuICAgIH1cblxuICAgIGlmIChuRGVuID4gMSAmJiBuTnVtID4gMCkge1xuICAgICAgc3RyRGVuID0gJygnICsgc3RyRGVuICsgJyknO1xuICAgIH1cblxuICAgIHZhciBzdHIgPSBzdHJOdW07XG5cbiAgICBpZiAobk51bSA+IDAgJiYgbkRlbiA+IDApIHtcbiAgICAgIHN0ciArPSAnIC8gJztcbiAgICB9XG5cbiAgICBzdHIgKz0gc3RyRGVuO1xuICAgIHJldHVybiBzdHI7XG4gIH07XG4gIC8qKlxuICAgKiBHZXQgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIFVuaXQsIHdpdGggb3B0aW9uYWwgZm9ybWF0dGluZyBvcHRpb25zLlxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcGFyYW0ge09iamVjdCB8IG51bWJlciB8IEZ1bmN0aW9ufSBbb3B0aW9uc10gIEZvcm1hdHRpbmcgb3B0aW9ucy4gU2VlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGliL3V0aWxzL251bWJlcjpmb3JtYXQgZm9yIGFcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiBvZiB0aGUgYXZhaWxhYmxlXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIFVuaXQucHJvdG90eXBlLmZvcm1hdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgLy8gU2ltcGxmeSB0aGUgdW5pdCBsaXN0LCB1bmxlc3MgaXQgaXMgdmFsdWVsZXNzIG9yIHdhcyBjcmVhdGVkIGRpcmVjdGx5IGluIHRoZVxuICAgIC8vIGNvbnN0cnVjdG9yIG9yIGFzIHRoZSByZXN1bHQgb2YgdG8gb3IgdG9TSVxuICAgIHZhciBzaW1wID0gdGhpcy5za2lwQXV0b21hdGljU2ltcGxpZmljYXRpb24gfHwgdGhpcy52YWx1ZSA9PT0gbnVsbCA/IHRoaXMuY2xvbmUoKSA6IHRoaXMuc2ltcGxpZnkoKTsgLy8gQXBwbHkgc29tZSBjdXN0b20gbG9naWMgZm9yIGhhbmRsaW5nIFZBIGFuZCBWQVIuIFRoZSBnb2FsIGlzIHRvIGV4cHJlc3MgdGhlIHZhbHVlIG9mIHRoZSB1bml0IGFzIGEgcmVhbCB2YWx1ZSwgaWYgcG9zc2libGUuIE90aGVyd2lzZSwgdXNlIGEgcmVhbC12YWx1ZWQgdW5pdCBpbnN0ZWFkIG9mIGEgY29tcGxleC12YWx1ZWQgb25lLlxuXG4gICAgdmFyIGlzSW1hZ2luYXJ5ID0gZmFsc2U7XG5cbiAgICBpZiAodHlwZW9mIHNpbXAudmFsdWUgIT09ICd1bmRlZmluZWQnICYmIHNpbXAudmFsdWUgIT09IG51bGwgJiYgKDAsIF9pcy5pc0NvbXBsZXgpKHNpbXAudmFsdWUpKSB7XG4gICAgICAvLyBUT0RPOiBNYWtlIHRoaXMgYmV0dGVyLCBmb3IgZXhhbXBsZSwgdXNlIHJlbGF0aXZlIG1hZ25pdHVkZSBvZiByZSBhbmQgaW0gcmF0aGVyIHRoYW4gYWJzb2x1dGVcbiAgICAgIGlzSW1hZ2luYXJ5ID0gTWF0aC5hYnMoc2ltcC52YWx1ZS5yZSkgPCAxZS0xNDtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpIGluIHNpbXAudW5pdHMpIHtcbiAgICAgIGlmIChzaW1wLnVuaXRzW2ldLnVuaXQpIHtcbiAgICAgICAgaWYgKHNpbXAudW5pdHNbaV0udW5pdC5uYW1lID09PSAnVkEnICYmIGlzSW1hZ2luYXJ5KSB7XG4gICAgICAgICAgc2ltcC51bml0c1tpXS51bml0ID0gVU5JVFMuVkFSO1xuICAgICAgICB9IGVsc2UgaWYgKHNpbXAudW5pdHNbaV0udW5pdC5uYW1lID09PSAnVkFSJyAmJiAhaXNJbWFnaW5hcnkpIHtcbiAgICAgICAgICBzaW1wLnVuaXRzW2ldLnVuaXQgPSBVTklUUy5WQTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gLy8gTm93IGFwcGx5IHRoZSBiZXN0IHByZWZpeFxuICAgIC8vIFVuaXRzIG11c3QgaGF2ZSBvbmx5IG9uZSB1bml0IGFuZCBub3QgaGF2ZSB0aGUgZml4UHJlZml4IGZsYWcgc2V0XG5cblxuICAgIGlmIChzaW1wLnVuaXRzLmxlbmd0aCA9PT0gMSAmJiAhc2ltcC5maXhQcmVmaXgpIHtcbiAgICAgIC8vIFVuaXRzIG11c3QgaGF2ZSBpbnRlZ2VyIHBvd2Vycywgb3RoZXJ3aXNlIHRoZSBwcmVmaXggd2lsbCBjaGFuZ2UgdGhlXG4gICAgICAvLyBvdXRwdXR0ZWQgdmFsdWUgYnkgbm90LWFuLWludGVnZXItcG93ZXItb2YtdGVuXG4gICAgICBpZiAoTWF0aC5hYnMoc2ltcC51bml0c1swXS5wb3dlciAtIE1hdGgucm91bmQoc2ltcC51bml0c1swXS5wb3dlcikpIDwgMWUtMTQpIHtcbiAgICAgICAgLy8gQXBwbHkgdGhlIGJlc3QgcHJlZml4XG4gICAgICAgIHNpbXAudW5pdHNbMF0ucHJlZml4ID0gc2ltcC5fYmVzdFByZWZpeCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB2YWx1ZSA9IHNpbXAuX2Rlbm9ybWFsaXplKHNpbXAudmFsdWUpO1xuXG4gICAgdmFyIHN0ciA9IHNpbXAudmFsdWUgIT09IG51bGwgPyBmb3JtYXQodmFsdWUsIG9wdGlvbnMgfHwge30pIDogJyc7XG4gICAgdmFyIHVuaXRTdHIgPSBzaW1wLmZvcm1hdFVuaXRzKCk7XG5cbiAgICBpZiAoc2ltcC52YWx1ZSAmJiAoMCwgX2lzLmlzQ29tcGxleCkoc2ltcC52YWx1ZSkpIHtcbiAgICAgIHN0ciA9ICcoJyArIHN0ciArICcpJzsgLy8gU3Vycm91bmQgY29tcGxleCB2YWx1ZXMgd2l0aCAoICkgdG8gZW5hYmxlIGJldHRlciBwYXJzaW5nXG4gICAgfVxuXG4gICAgaWYgKHVuaXRTdHIubGVuZ3RoID4gMCAmJiBzdHIubGVuZ3RoID4gMCkge1xuICAgICAgc3RyICs9ICcgJztcbiAgICB9XG5cbiAgICBzdHIgKz0gdW5pdFN0cjtcbiAgICByZXR1cm4gc3RyO1xuICB9O1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBiZXN0IHByZWZpeCB1c2luZyBjdXJyZW50IHZhbHVlLlxuICAgKiBAbWVtYmVyb2YgVW5pdFxuICAgKiBAcmV0dXJucyB7T2JqZWN0fSBwcmVmaXhcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5fYmVzdFByZWZpeCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAodGhpcy51bml0cy5sZW5ndGggIT09IDEpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuIG9ubHkgY29tcHV0ZSB0aGUgYmVzdCBwcmVmaXggZm9yIHNpbmdsZSB1bml0cyB3aXRoIGludGVnZXIgcG93ZXJzLCBsaWtlIGtnLCBzXjIsIE5eLTEsIGFuZCBzbyBmb3J0aCEnKTtcbiAgICB9XG5cbiAgICBpZiAoTWF0aC5hYnModGhpcy51bml0c1swXS5wb3dlciAtIE1hdGgucm91bmQodGhpcy51bml0c1swXS5wb3dlcikpID49IDFlLTE0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0NhbiBvbmx5IGNvbXB1dGUgdGhlIGJlc3QgcHJlZml4IGZvciBzaW5nbGUgdW5pdHMgd2l0aCBpbnRlZ2VyIHBvd2VycywgbGlrZSBrZywgc14yLCBOXi0xLCBhbmQgc28gZm9ydGghJyk7XG4gICAgfSAvLyBmaW5kIHRoZSBiZXN0IHByZWZpeCB2YWx1ZSAocmVzdWx0aW5nIGluIHRoZSB2YWx1ZSBvZiB3aGljaFxuICAgIC8vIHRoZSBhYnNvbHV0ZSB2YWx1ZSBvZiB0aGUgbG9nMTAgaXMgY2xvc2VzdCB0byB6ZXJvLFxuICAgIC8vIHRob3VnaCB3aXRoIGEgbGl0dGxlIG9mZnNldCBvZiAxLjIgZm9yIG5pY2VyIHZhbHVlczogeW91IGdldCBhXG4gICAgLy8gc2VxdWVuY2UgMW1tIDEwMG1tIDUwMG1tIDAuNm0gMW0gMTBtIDEwMG0gNTAwbSAwLjZrbSAxa20gLi4uXG4gICAgLy8gTm90ZTogdGhlIHVuaXRzIHZhbHVlIGNhbiBiZSBhbnkgbnVtZXJpYyB0eXBlLCBidXQgdG8gZmluZCB0aGUgYmVzdFxuICAgIC8vIHByZWZpeCBpdCdzIGVub3VnaCB0byB3b3JrIHdpdGggbGltaXRlZCBwcmVjaXNpb24gb2YgYSByZWd1bGFyIG51bWJlclxuICAgIC8vIFVwZGF0ZTogdXNpbmcgbWF0aGpzIGFicyBzaW5jZSB3ZSBhbHNvIGFsbG93IGNvbXBsZXggbnVtYmVyc1xuXG5cbiAgICB2YXIgYWJzVmFsdWUgPSB0aGlzLnZhbHVlICE9PSBudWxsID8gYWJzKHRoaXMudmFsdWUpIDogMDtcbiAgICB2YXIgYWJzVW5pdFZhbHVlID0gYWJzKHRoaXMudW5pdHNbMF0udW5pdC52YWx1ZSk7XG4gICAgdmFyIGJlc3RQcmVmaXggPSB0aGlzLnVuaXRzWzBdLnByZWZpeDtcblxuICAgIGlmIChhYnNWYWx1ZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIGJlc3RQcmVmaXg7XG4gICAgfVxuXG4gICAgdmFyIHBvd2VyID0gdGhpcy51bml0c1swXS5wb3dlcjtcbiAgICB2YXIgYmVzdERpZmYgPSBNYXRoLmxvZyhhYnNWYWx1ZSAvIE1hdGgucG93KGJlc3RQcmVmaXgudmFsdWUgKiBhYnNVbml0VmFsdWUsIHBvd2VyKSkgLyBNYXRoLkxOMTAgLSAxLjI7XG4gICAgaWYgKGJlc3REaWZmID4gLTIuMjAwMDAxICYmIGJlc3REaWZmIDwgMS44MDAwMDEpIHJldHVybiBiZXN0UHJlZml4OyAvLyBBbGxvdyB0aGUgb3JpZ2luYWwgcHJlZml4XG5cbiAgICBiZXN0RGlmZiA9IE1hdGguYWJzKGJlc3REaWZmKTtcbiAgICB2YXIgcHJlZml4ZXMgPSB0aGlzLnVuaXRzWzBdLnVuaXQucHJlZml4ZXM7XG5cbiAgICBmb3IgKHZhciBwIGluIHByZWZpeGVzKSB7XG4gICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKHByZWZpeGVzLCBwKSkge1xuICAgICAgICB2YXIgcHJlZml4ID0gcHJlZml4ZXNbcF07XG5cbiAgICAgICAgaWYgKHByZWZpeC5zY2llbnRpZmljKSB7XG4gICAgICAgICAgdmFyIGRpZmYgPSBNYXRoLmFicyhNYXRoLmxvZyhhYnNWYWx1ZSAvIE1hdGgucG93KHByZWZpeC52YWx1ZSAqIGFic1VuaXRWYWx1ZSwgcG93ZXIpKSAvIE1hdGguTE4xMCAtIDEuMik7XG5cbiAgICAgICAgICBpZiAoZGlmZiA8IGJlc3REaWZmIHx8IGRpZmYgPT09IGJlc3REaWZmICYmIHByZWZpeC5uYW1lLmxlbmd0aCA8IGJlc3RQcmVmaXgubmFtZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIGNob29zZSB0aGUgcHJlZml4IHdpdGggdGhlIHNtYWxsZXN0IGRpZmYsIG9yIGlmIGVxdWFsLCBjaG9vc2UgdGhlIG9uZVxuICAgICAgICAgICAgLy8gd2l0aCB0aGUgc2hvcnRlc3QgbmFtZSAoY2FuIGhhcHBlbiB3aXRoIFNIT1JUTE9ORyBmb3IgZXhhbXBsZSlcbiAgICAgICAgICAgIGJlc3RQcmVmaXggPSBwcmVmaXg7XG4gICAgICAgICAgICBiZXN0RGlmZiA9IGRpZmY7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGJlc3RQcmVmaXg7XG4gIH07XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGFycmF5IG9mIHVuaXRzIHdob3NlIHN1bSBpcyBlcXVhbCB0byB0aGlzIHVuaXRcbiAgICogQG1lbWJlcm9mIFVuaXRcbiAgICogQHBhcmFtIHtBcnJheX0gW3BhcnRzXSBBbiBhcnJheSBvZiBzdHJpbmdzIG9yIHZhbHVlbGVzcyB1bml0cy5cbiAgICpcbiAgICogICBFeGFtcGxlOlxuICAgKlxuICAgKiAgIGNvbnN0IHUgPSBuZXcgVW5pdCgxLCAnbScpXG4gICAqICAgdS5zcGxpdFVuaXQoWydmZWV0JywgJ2luY2gnXSlcbiAgICogICAgIFsgMyBmZWV0LCAzLjM3MDA3ODc0MDE1NzUgaW5jaCBdXG4gICAqXG4gICAqIEByZXR1cm4ge0FycmF5fSBBbiBhcnJheSBvZiB1bml0cy5cbiAgICovXG5cblxuICBVbml0LnByb3RvdHlwZS5zcGxpdFVuaXQgPSBmdW5jdGlvbiAocGFydHMpIHtcbiAgICB2YXIgeCA9IHRoaXMuY2xvbmUoKTtcbiAgICB2YXIgcmV0ID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAvLyBDb252ZXJ0IHggdG8gdGhlIHJlcXVlc3RlZCB1bml0XG4gICAgICB4ID0geC50byhwYXJ0c1tpXSk7XG4gICAgICBpZiAoaSA9PT0gcGFydHMubGVuZ3RoIC0gMSkgYnJlYWs7IC8vIEdldCB0aGUgbnVtZXJpYyB2YWx1ZSBvZiB0aGlzIHVuaXRcblxuICAgICAgdmFyIHhOdW1lcmljID0geC50b051bWVyaWMoKTsgLy8gQ2hlY2sgdG8gc2VlIGlmIHhOdW1lcmljIGlzIG5lYXJseSBlcXVhbCB0byBhbiBpbnRlZ2VyLFxuICAgICAgLy8gc2luY2UgZml4IGNhbiBpbmNvcnJlY3RseSByb3VuZCBkb3duIGlmIHRoZXJlIGlzIHJvdW5kLW9mZiBlcnJvclxuXG4gICAgICB2YXIgeFJvdW5kZWQgPSByb3VuZCh4TnVtZXJpYyk7XG4gICAgICB2YXIgeEZpeGVkID0gdm9pZCAwO1xuICAgICAgdmFyIGlzTmVhcmx5RXF1YWwgPSBlcXVhbCh4Um91bmRlZCwgeE51bWVyaWMpO1xuXG4gICAgICBpZiAoaXNOZWFybHlFcXVhbCkge1xuICAgICAgICB4Rml4ZWQgPSB4Um91bmRlZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHhGaXhlZCA9IGZpeCh4LnRvTnVtZXJpYygpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHkgPSBuZXcgVW5pdCh4Rml4ZWQsIHBhcnRzW2ldLnRvU3RyaW5nKCkpO1xuICAgICAgcmV0LnB1c2goeSk7XG4gICAgICB4ID0gc3VidHJhY3QoeCwgeSk7XG4gICAgfSAvLyBUaGlzIGxpdHRsZSBiaXQgZml4ZXMgYSBidWcgd2hlcmUgdGhlIHJlbWFpbmRlciBzaG91bGQgYmUgMCBidXQgaXMgYSBsaXR0bGUgYml0IG9mZi5cbiAgICAvLyBCdXQgaW5zdGVhZCBvZiBjb21wYXJpbmcgeCwgdGhlIHJlbWFpbmRlciwgd2l0aCB6ZXJvLS13ZSB3aWxsIGNvbXBhcmUgdGhlIHN1bSBvZlxuICAgIC8vIGFsbCB0aGUgcGFydHMgc28gZmFyIHdpdGggdGhlIG9yaWdpbmFsIHZhbHVlLiBJZiB0aGV5IGFyZSBuZWFybHkgZXF1YWwsXG4gICAgLy8gd2Ugc2V0IHRoZSByZW1haW5kZXIgdG8gMC5cblxuXG4gICAgdmFyIHRlc3RTdW0gPSAwO1xuXG4gICAgZm9yICh2YXIgX2k1ID0gMDsgX2k1IDwgcmV0Lmxlbmd0aDsgX2k1KyspIHtcbiAgICAgIHRlc3RTdW0gPSBhZGRTY2FsYXIodGVzdFN1bSwgcmV0W19pNV0udmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChlcXVhbCh0ZXN0U3VtLCB0aGlzLnZhbHVlKSkge1xuICAgICAgeC52YWx1ZSA9IDA7XG4gICAgfVxuXG4gICAgcmV0LnB1c2goeCk7XG4gICAgcmV0dXJuIHJldDtcbiAgfTtcblxuICB2YXIgUFJFRklYRVMgPSB7XG4gICAgTk9ORToge1xuICAgICAgJyc6IHtcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9XG4gICAgfSxcbiAgICBTSE9SVDoge1xuICAgICAgJyc6IHtcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgZGE6IHtcbiAgICAgICAgbmFtZTogJ2RhJyxcbiAgICAgICAgdmFsdWU6IDFlMSxcbiAgICAgICAgc2NpZW50aWZpYzogZmFsc2VcbiAgICAgIH0sXG4gICAgICBoOiB7XG4gICAgICAgIG5hbWU6ICdoJyxcbiAgICAgICAgdmFsdWU6IDFlMixcbiAgICAgICAgc2NpZW50aWZpYzogZmFsc2VcbiAgICAgIH0sXG4gICAgICBrOiB7XG4gICAgICAgIG5hbWU6ICdrJyxcbiAgICAgICAgdmFsdWU6IDFlMyxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIE06IHtcbiAgICAgICAgbmFtZTogJ00nLFxuICAgICAgICB2YWx1ZTogMWU2LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgRzoge1xuICAgICAgICBuYW1lOiAnRycsXG4gICAgICAgIHZhbHVlOiAxZTksXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBUOiB7XG4gICAgICAgIG5hbWU6ICdUJyxcbiAgICAgICAgdmFsdWU6IDFlMTIsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBQOiB7XG4gICAgICAgIG5hbWU6ICdQJyxcbiAgICAgICAgdmFsdWU6IDFlMTUsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBFOiB7XG4gICAgICAgIG5hbWU6ICdFJyxcbiAgICAgICAgdmFsdWU6IDFlMTgsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBaOiB7XG4gICAgICAgIG5hbWU6ICdaJyxcbiAgICAgICAgdmFsdWU6IDFlMjEsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBZOiB7XG4gICAgICAgIG5hbWU6ICdZJyxcbiAgICAgICAgdmFsdWU6IDFlMjQsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBkOiB7XG4gICAgICAgIG5hbWU6ICdkJyxcbiAgICAgICAgdmFsdWU6IDFlLTEsXG4gICAgICAgIHNjaWVudGlmaWM6IGZhbHNlXG4gICAgICB9LFxuICAgICAgYzoge1xuICAgICAgICBuYW1lOiAnYycsXG4gICAgICAgIHZhbHVlOiAxZS0yLFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIG06IHtcbiAgICAgICAgbmFtZTogJ20nLFxuICAgICAgICB2YWx1ZTogMWUtMyxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHU6IHtcbiAgICAgICAgbmFtZTogJ3UnLFxuICAgICAgICB2YWx1ZTogMWUtNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIG46IHtcbiAgICAgICAgbmFtZTogJ24nLFxuICAgICAgICB2YWx1ZTogMWUtOSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHA6IHtcbiAgICAgICAgbmFtZTogJ3AnLFxuICAgICAgICB2YWx1ZTogMWUtMTIsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBmOiB7XG4gICAgICAgIG5hbWU6ICdmJyxcbiAgICAgICAgdmFsdWU6IDFlLTE1LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgYToge1xuICAgICAgICBuYW1lOiAnYScsXG4gICAgICAgIHZhbHVlOiAxZS0xOCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHo6IHtcbiAgICAgICAgbmFtZTogJ3onLFxuICAgICAgICB2YWx1ZTogMWUtMjEsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICB5OiB7XG4gICAgICAgIG5hbWU6ICd5JyxcbiAgICAgICAgdmFsdWU6IDFlLTI0LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9XG4gICAgfSxcbiAgICBMT05HOiB7XG4gICAgICAnJzoge1xuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBkZWNhOiB7XG4gICAgICAgIG5hbWU6ICdkZWNhJyxcbiAgICAgICAgdmFsdWU6IDFlMSxcbiAgICAgICAgc2NpZW50aWZpYzogZmFsc2VcbiAgICAgIH0sXG4gICAgICBoZWN0bzoge1xuICAgICAgICBuYW1lOiAnaGVjdG8nLFxuICAgICAgICB2YWx1ZTogMWUyLFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGtpbG86IHtcbiAgICAgICAgbmFtZTogJ2tpbG8nLFxuICAgICAgICB2YWx1ZTogMWUzLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgbWVnYToge1xuICAgICAgICBuYW1lOiAnbWVnYScsXG4gICAgICAgIHZhbHVlOiAxZTYsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBnaWdhOiB7XG4gICAgICAgIG5hbWU6ICdnaWdhJyxcbiAgICAgICAgdmFsdWU6IDFlOSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHRlcmE6IHtcbiAgICAgICAgbmFtZTogJ3RlcmEnLFxuICAgICAgICB2YWx1ZTogMWUxMixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHBldGE6IHtcbiAgICAgICAgbmFtZTogJ3BldGEnLFxuICAgICAgICB2YWx1ZTogMWUxNSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGV4YToge1xuICAgICAgICBuYW1lOiAnZXhhJyxcbiAgICAgICAgdmFsdWU6IDFlMTgsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICB6ZXR0YToge1xuICAgICAgICBuYW1lOiAnemV0dGEnLFxuICAgICAgICB2YWx1ZTogMWUyMSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHlvdHRhOiB7XG4gICAgICAgIG5hbWU6ICd5b3R0YScsXG4gICAgICAgIHZhbHVlOiAxZTI0LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgZGVjaToge1xuICAgICAgICBuYW1lOiAnZGVjaScsXG4gICAgICAgIHZhbHVlOiAxZS0xLFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGNlbnRpOiB7XG4gICAgICAgIG5hbWU6ICdjZW50aScsXG4gICAgICAgIHZhbHVlOiAxZS0yLFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIG1pbGxpOiB7XG4gICAgICAgIG5hbWU6ICdtaWxsaScsXG4gICAgICAgIHZhbHVlOiAxZS0zLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgbWljcm86IHtcbiAgICAgICAgbmFtZTogJ21pY3JvJyxcbiAgICAgICAgdmFsdWU6IDFlLTYsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBuYW5vOiB7XG4gICAgICAgIG5hbWU6ICduYW5vJyxcbiAgICAgICAgdmFsdWU6IDFlLTksXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBwaWNvOiB7XG4gICAgICAgIG5hbWU6ICdwaWNvJyxcbiAgICAgICAgdmFsdWU6IDFlLTEyLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgZmVtdG86IHtcbiAgICAgICAgbmFtZTogJ2ZlbXRvJyxcbiAgICAgICAgdmFsdWU6IDFlLTE1LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgYXR0bzoge1xuICAgICAgICBuYW1lOiAnYXR0bycsXG4gICAgICAgIHZhbHVlOiAxZS0xOCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHplcHRvOiB7XG4gICAgICAgIG5hbWU6ICd6ZXB0bycsXG4gICAgICAgIHZhbHVlOiAxZS0yMSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHlvY3RvOiB7XG4gICAgICAgIG5hbWU6ICd5b2N0bycsXG4gICAgICAgIHZhbHVlOiAxZS0yNCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfVxuICAgIH0sXG4gICAgU1FVQVJFRDoge1xuICAgICAgJyc6IHtcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgZGE6IHtcbiAgICAgICAgbmFtZTogJ2RhJyxcbiAgICAgICAgdmFsdWU6IDFlMixcbiAgICAgICAgc2NpZW50aWZpYzogZmFsc2VcbiAgICAgIH0sXG4gICAgICBoOiB7XG4gICAgICAgIG5hbWU6ICdoJyxcbiAgICAgICAgdmFsdWU6IDFlNCxcbiAgICAgICAgc2NpZW50aWZpYzogZmFsc2VcbiAgICAgIH0sXG4gICAgICBrOiB7XG4gICAgICAgIG5hbWU6ICdrJyxcbiAgICAgICAgdmFsdWU6IDFlNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIE06IHtcbiAgICAgICAgbmFtZTogJ00nLFxuICAgICAgICB2YWx1ZTogMWUxMixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIEc6IHtcbiAgICAgICAgbmFtZTogJ0cnLFxuICAgICAgICB2YWx1ZTogMWUxOCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFQ6IHtcbiAgICAgICAgbmFtZTogJ1QnLFxuICAgICAgICB2YWx1ZTogMWUyNCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFA6IHtcbiAgICAgICAgbmFtZTogJ1AnLFxuICAgICAgICB2YWx1ZTogMWUzMCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIEU6IHtcbiAgICAgICAgbmFtZTogJ0UnLFxuICAgICAgICB2YWx1ZTogMWUzNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFo6IHtcbiAgICAgICAgbmFtZTogJ1onLFxuICAgICAgICB2YWx1ZTogMWU0MixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFk6IHtcbiAgICAgICAgbmFtZTogJ1knLFxuICAgICAgICB2YWx1ZTogMWU0OCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGQ6IHtcbiAgICAgICAgbmFtZTogJ2QnLFxuICAgICAgICB2YWx1ZTogMWUtMixcbiAgICAgICAgc2NpZW50aWZpYzogZmFsc2VcbiAgICAgIH0sXG4gICAgICBjOiB7XG4gICAgICAgIG5hbWU6ICdjJyxcbiAgICAgICAgdmFsdWU6IDFlLTQsXG4gICAgICAgIHNjaWVudGlmaWM6IGZhbHNlXG4gICAgICB9LFxuICAgICAgbToge1xuICAgICAgICBuYW1lOiAnbScsXG4gICAgICAgIHZhbHVlOiAxZS02LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgdToge1xuICAgICAgICBuYW1lOiAndScsXG4gICAgICAgIHZhbHVlOiAxZS0xMixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIG46IHtcbiAgICAgICAgbmFtZTogJ24nLFxuICAgICAgICB2YWx1ZTogMWUtMTgsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBwOiB7XG4gICAgICAgIG5hbWU6ICdwJyxcbiAgICAgICAgdmFsdWU6IDFlLTI0LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgZjoge1xuICAgICAgICBuYW1lOiAnZicsXG4gICAgICAgIHZhbHVlOiAxZS0zMCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGE6IHtcbiAgICAgICAgbmFtZTogJ2EnLFxuICAgICAgICB2YWx1ZTogMWUtMzYsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICB6OiB7XG4gICAgICAgIG5hbWU6ICd6JyxcbiAgICAgICAgdmFsdWU6IDFlLTQyLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgeToge1xuICAgICAgICBuYW1lOiAneScsXG4gICAgICAgIHZhbHVlOiAxZS00OCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfVxuICAgIH0sXG4gICAgQ1VCSUM6IHtcbiAgICAgICcnOiB7XG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGRhOiB7XG4gICAgICAgIG5hbWU6ICdkYScsXG4gICAgICAgIHZhbHVlOiAxZTMsXG4gICAgICAgIHNjaWVudGlmaWM6IGZhbHNlXG4gICAgICB9LFxuICAgICAgaDoge1xuICAgICAgICBuYW1lOiAnaCcsXG4gICAgICAgIHZhbHVlOiAxZTYsXG4gICAgICAgIHNjaWVudGlmaWM6IGZhbHNlXG4gICAgICB9LFxuICAgICAgazoge1xuICAgICAgICBuYW1lOiAnaycsXG4gICAgICAgIHZhbHVlOiAxZTksXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBNOiB7XG4gICAgICAgIG5hbWU6ICdNJyxcbiAgICAgICAgdmFsdWU6IDFlMTgsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBHOiB7XG4gICAgICAgIG5hbWU6ICdHJyxcbiAgICAgICAgdmFsdWU6IDFlMjcsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBUOiB7XG4gICAgICAgIG5hbWU6ICdUJyxcbiAgICAgICAgdmFsdWU6IDFlMzYsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBQOiB7XG4gICAgICAgIG5hbWU6ICdQJyxcbiAgICAgICAgdmFsdWU6IDFlNDUsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBFOiB7XG4gICAgICAgIG5hbWU6ICdFJyxcbiAgICAgICAgdmFsdWU6IDFlNTQsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBaOiB7XG4gICAgICAgIG5hbWU6ICdaJyxcbiAgICAgICAgdmFsdWU6IDFlNjMsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBZOiB7XG4gICAgICAgIG5hbWU6ICdZJyxcbiAgICAgICAgdmFsdWU6IDFlNzIsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBkOiB7XG4gICAgICAgIG5hbWU6ICdkJyxcbiAgICAgICAgdmFsdWU6IDFlLTMsXG4gICAgICAgIHNjaWVudGlmaWM6IGZhbHNlXG4gICAgICB9LFxuICAgICAgYzoge1xuICAgICAgICBuYW1lOiAnYycsXG4gICAgICAgIHZhbHVlOiAxZS02LFxuICAgICAgICBzY2llbnRpZmljOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIG06IHtcbiAgICAgICAgbmFtZTogJ20nLFxuICAgICAgICB2YWx1ZTogMWUtOSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHU6IHtcbiAgICAgICAgbmFtZTogJ3UnLFxuICAgICAgICB2YWx1ZTogMWUtMTgsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBuOiB7XG4gICAgICAgIG5hbWU6ICduJyxcbiAgICAgICAgdmFsdWU6IDFlLTI3LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgcDoge1xuICAgICAgICBuYW1lOiAncCcsXG4gICAgICAgIHZhbHVlOiAxZS0zNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGY6IHtcbiAgICAgICAgbmFtZTogJ2YnLFxuICAgICAgICB2YWx1ZTogMWUtNDUsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBhOiB7XG4gICAgICAgIG5hbWU6ICdhJyxcbiAgICAgICAgdmFsdWU6IDFlLTU0LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgejoge1xuICAgICAgICBuYW1lOiAneicsXG4gICAgICAgIHZhbHVlOiAxZS02MyxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHk6IHtcbiAgICAgICAgbmFtZTogJ3knLFxuICAgICAgICB2YWx1ZTogMWUtNzIsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH1cbiAgICB9LFxuICAgIEJJTkFSWV9TSE9SVF9TSToge1xuICAgICAgJyc6IHtcbiAgICAgICAgbmFtZTogJycsXG4gICAgICAgIHZhbHVlOiAxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgazoge1xuICAgICAgICBuYW1lOiAnaycsXG4gICAgICAgIHZhbHVlOiAxZTMsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBNOiB7XG4gICAgICAgIG5hbWU6ICdNJyxcbiAgICAgICAgdmFsdWU6IDFlNixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIEc6IHtcbiAgICAgICAgbmFtZTogJ0cnLFxuICAgICAgICB2YWx1ZTogMWU5LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgVDoge1xuICAgICAgICBuYW1lOiAnVCcsXG4gICAgICAgIHZhbHVlOiAxZTEyLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgUDoge1xuICAgICAgICBuYW1lOiAnUCcsXG4gICAgICAgIHZhbHVlOiAxZTE1LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgRToge1xuICAgICAgICBuYW1lOiAnRScsXG4gICAgICAgIHZhbHVlOiAxZTE4LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgWjoge1xuICAgICAgICBuYW1lOiAnWicsXG4gICAgICAgIHZhbHVlOiAxZTIxLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgWToge1xuICAgICAgICBuYW1lOiAnWScsXG4gICAgICAgIHZhbHVlOiAxZTI0LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9XG4gICAgfSxcbiAgICBCSU5BUllfU0hPUlRfSUVDOiB7XG4gICAgICAnJzoge1xuICAgICAgICBuYW1lOiAnJyxcbiAgICAgICAgdmFsdWU6IDEsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBLaToge1xuICAgICAgICBuYW1lOiAnS2knLFxuICAgICAgICB2YWx1ZTogMTAyNCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIE1pOiB7XG4gICAgICAgIG5hbWU6ICdNaScsXG4gICAgICAgIHZhbHVlOiBNYXRoLnBvdygxMDI0LCAyKSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIEdpOiB7XG4gICAgICAgIG5hbWU6ICdHaScsXG4gICAgICAgIHZhbHVlOiBNYXRoLnBvdygxMDI0LCAzKSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFRpOiB7XG4gICAgICAgIG5hbWU6ICdUaScsXG4gICAgICAgIHZhbHVlOiBNYXRoLnBvdygxMDI0LCA0KSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFBpOiB7XG4gICAgICAgIG5hbWU6ICdQaScsXG4gICAgICAgIHZhbHVlOiBNYXRoLnBvdygxMDI0LCA1KSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIEVpOiB7XG4gICAgICAgIG5hbWU6ICdFaScsXG4gICAgICAgIHZhbHVlOiBNYXRoLnBvdygxMDI0LCA2KSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFppOiB7XG4gICAgICAgIG5hbWU6ICdaaScsXG4gICAgICAgIHZhbHVlOiBNYXRoLnBvdygxMDI0LCA3KSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIFlpOiB7XG4gICAgICAgIG5hbWU6ICdZaScsXG4gICAgICAgIHZhbHVlOiBNYXRoLnBvdygxMDI0LCA4KSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfVxuICAgIH0sXG4gICAgQklOQVJZX0xPTkdfU0k6IHtcbiAgICAgICcnOiB7XG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGtpbG86IHtcbiAgICAgICAgbmFtZTogJ2tpbG8nLFxuICAgICAgICB2YWx1ZTogMWUzLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgbWVnYToge1xuICAgICAgICBuYW1lOiAnbWVnYScsXG4gICAgICAgIHZhbHVlOiAxZTYsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBnaWdhOiB7XG4gICAgICAgIG5hbWU6ICdnaWdhJyxcbiAgICAgICAgdmFsdWU6IDFlOSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHRlcmE6IHtcbiAgICAgICAgbmFtZTogJ3RlcmEnLFxuICAgICAgICB2YWx1ZTogMWUxMixcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHBldGE6IHtcbiAgICAgICAgbmFtZTogJ3BldGEnLFxuICAgICAgICB2YWx1ZTogMWUxNSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGV4YToge1xuICAgICAgICBuYW1lOiAnZXhhJyxcbiAgICAgICAgdmFsdWU6IDFlMTgsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICB6ZXR0YToge1xuICAgICAgICBuYW1lOiAnemV0dGEnLFxuICAgICAgICB2YWx1ZTogMWUyMSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHlvdHRhOiB7XG4gICAgICAgIG5hbWU6ICd5b3R0YScsXG4gICAgICAgIHZhbHVlOiAxZTI0LFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9XG4gICAgfSxcbiAgICBCSU5BUllfTE9OR19JRUM6IHtcbiAgICAgICcnOiB7XG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGtpYmk6IHtcbiAgICAgICAgbmFtZTogJ2tpYmknLFxuICAgICAgICB2YWx1ZTogMTAyNCxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIG1lYmk6IHtcbiAgICAgICAgbmFtZTogJ21lYmknLFxuICAgICAgICB2YWx1ZTogTWF0aC5wb3coMTAyNCwgMiksXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBnaWJpOiB7XG4gICAgICAgIG5hbWU6ICdnaWJpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDMpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9LFxuICAgICAgdGViaToge1xuICAgICAgICBuYW1lOiAndGViaScsXG4gICAgICAgIHZhbHVlOiBNYXRoLnBvdygxMDI0LCA0KSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHBlYmk6IHtcbiAgICAgICAgbmFtZTogJ3BlYmknLFxuICAgICAgICB2YWx1ZTogTWF0aC5wb3coMTAyNCwgNSksXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICBleGk6IHtcbiAgICAgICAgbmFtZTogJ2V4aScsXG4gICAgICAgIHZhbHVlOiBNYXRoLnBvdygxMDI0LCA2KSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIHplYmk6IHtcbiAgICAgICAgbmFtZTogJ3plYmknLFxuICAgICAgICB2YWx1ZTogTWF0aC5wb3coMTAyNCwgNyksXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH0sXG4gICAgICB5b2JpOiB7XG4gICAgICAgIG5hbWU6ICd5b2JpJyxcbiAgICAgICAgdmFsdWU6IE1hdGgucG93KDEwMjQsIDgpLFxuICAgICAgICBzY2llbnRpZmljOiB0cnVlXG4gICAgICB9XG4gICAgfSxcbiAgICBCVFU6IHtcbiAgICAgICcnOiB7XG4gICAgICAgIG5hbWU6ICcnLFxuICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgc2NpZW50aWZpYzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIE1NOiB7XG4gICAgICAgIG5hbWU6ICdNTScsXG4gICAgICAgIHZhbHVlOiAxZTYsXG4gICAgICAgIHNjaWVudGlmaWM6IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIFBSRUZJWEVTLlNIT1JUTE9ORyA9IF9leHRlbmRzKHt9LCBQUkVGSVhFUy5TSE9SVCwgUFJFRklYRVMuTE9ORyk7XG4gIFBSRUZJWEVTLkJJTkFSWV9TSE9SVCA9IF9leHRlbmRzKHt9LCBQUkVGSVhFUy5CSU5BUllfU0hPUlRfU0ksIFBSRUZJWEVTLkJJTkFSWV9TSE9SVF9JRUMpO1xuICBQUkVGSVhFUy5CSU5BUllfTE9ORyA9IF9leHRlbmRzKHt9LCBQUkVGSVhFUy5CSU5BUllfTE9OR19TSSwgUFJFRklYRVMuQklOQVJZX0xPTkdfSUVDKTtcbiAgLyogSW50ZXJuYWxseSwgZWFjaCB1bml0IGlzIHJlcHJlc2VudGVkIGJ5IGEgdmFsdWUgYW5kIGEgZGltZW5zaW9uIGFycmF5LiBUaGUgZWxlbWVudHMgb2YgdGhlIGRpbWVuc2lvbnMgYXJyYXkgaGF2ZSB0aGUgZm9sbG93aW5nIG1lYW5pbmc6XG4gICAqIEluZGV4ICBEaW1lbnNpb25cbiAgICogLS0tLS0gIC0tLS0tLS0tLVxuICAgKiAgIDAgICAgTGVuZ3RoXG4gICAqICAgMSAgICBNYXNzXG4gICAqICAgMiAgICBUaW1lXG4gICAqICAgMyAgICBDdXJyZW50XG4gICAqICAgNCAgICBUZW1wZXJhdHVyZVxuICAgKiAgIDUgICAgTHVtaW5vdXMgaW50ZW5zaXR5XG4gICAqICAgNiAgICBBbW91bnQgb2Ygc3Vic3RhbmNlXG4gICAqICAgNyAgICBBbmdsZVxuICAgKiAgIDggICAgQml0IChkaWdpdGFsKVxuICAgKiBGb3IgZXhhbXBsZSwgdGhlIHVuaXQgXCIyOTguMTUgS1wiIGlzIGEgcHVyZSB0ZW1wZXJhdHVyZSBhbmQgd291bGQgaGF2ZSBhIHZhbHVlIG9mIDI5OC4xNSBhbmQgYSBkaW1lbnNpb24gYXJyYXkgb2YgWzAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDBdLiBUaGUgdW5pdCBcIjEgY2FsIC8gKGdtIMKwQylcIiBjYW4gYmUgd3JpdHRlbiBpbiB0ZXJtcyBvZiB0aGUgOSBmdW5kYW1lbnRhbCBkaW1lbnNpb25zIGFzIFtsZW5ndGheMl0gLyAoW3RpbWVeMl0gKiBbdGVtcGVyYXR1cmVdKSwgYW5kIHdvdWxkIGEgdmFsdWUgb2YgKGFmdGVyIGNvbnZlcnNpb24gdG8gU0kpIDQxODQuMCBhbmQgYSBkaW1lbnNpb25zIGFycmF5IG9mIFsyLCAwLCAtMiwgMCwgLTEsIDAsIDAsIDAsIDBdLlxuICAgKlxuICAgKi9cblxuICB2YXIgQkFTRV9ESU1FTlNJT05TID0gWydNQVNTJywgJ0xFTkdUSCcsICdUSU1FJywgJ0NVUlJFTlQnLCAnVEVNUEVSQVRVUkUnLCAnTFVNSU5PVVNfSU5URU5TSVRZJywgJ0FNT1VOVF9PRl9TVUJTVEFOQ0UnLCAnQU5HTEUnLCAnQklUJ107XG4gIHZhciBCQVNFX1VOSVRTID0ge1xuICAgIE5PTkU6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgTUFTUzoge1xuICAgICAgZGltZW5zaW9uczogWzEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBMRU5HVEg6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFswLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgVElNRToge1xuICAgICAgZGltZW5zaW9uczogWzAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBDVVJSRU5UOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIFRFTVBFUkFUVVJFOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIExVTUlOT1VTX0lOVEVOU0lUWToge1xuICAgICAgZGltZW5zaW9uczogWzAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBBTU9VTlRfT0ZfU1VCU1RBTkNFOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMF1cbiAgICB9LFxuICAgIEZPUkNFOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMSwgMSwgLTIsIDAsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBTVVJGQUNFOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMCwgMiwgMCwgMCwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIFZPTFVNRToge1xuICAgICAgZGltZW5zaW9uczogWzAsIDMsIDAsIDAsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBFTkVSR1k6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFsxLCAyLCAtMiwgMCwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIFBPV0VSOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMSwgMiwgLTMsIDAsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBQUkVTU1VSRToge1xuICAgICAgZGltZW5zaW9uczogWzEsIC0xLCAtMiwgMCwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIEVMRUNUUklDX0NIQVJHRToge1xuICAgICAgZGltZW5zaW9uczogWzAsIDAsIDEsIDEsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBFTEVDVFJJQ19DQVBBQ0lUQU5DRToge1xuICAgICAgZGltZW5zaW9uczogWy0xLCAtMiwgNCwgMiwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIEVMRUNUUklDX1BPVEVOVElBTDoge1xuICAgICAgZGltZW5zaW9uczogWzEsIDIsIC0zLCAtMSwgMCwgMCwgMCwgMCwgMF1cbiAgICB9LFxuICAgIEVMRUNUUklDX1JFU0lTVEFOQ0U6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFsxLCAyLCAtMywgLTIsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBFTEVDVFJJQ19JTkRVQ1RBTkNFOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMSwgMiwgLTIsIC0yLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgRUxFQ1RSSUNfQ09ORFVDVEFOQ0U6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFstMSwgLTIsIDMsIDIsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBNQUdORVRJQ19GTFVYOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMSwgMiwgLTIsIC0xLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgTUFHTkVUSUNfRkxVWF9ERU5TSVRZOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMSwgMCwgLTIsIC0xLCAwLCAwLCAwLCAwLCAwXVxuICAgIH0sXG4gICAgRlJFUVVFTkNZOiB7XG4gICAgICBkaW1lbnNpb25zOiBbMCwgMCwgLTEsIDAsIDAsIDAsIDAsIDAsIDBdXG4gICAgfSxcbiAgICBBTkdMRToge1xuICAgICAgZGltZW5zaW9uczogWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDBdXG4gICAgfSxcbiAgICBCSVQ6IHtcbiAgICAgIGRpbWVuc2lvbnM6IFswLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxXVxuICAgIH1cbiAgfTtcblxuICBmb3IgKHZhciBrZXkgaW4gQkFTRV9VTklUUykge1xuICAgIEJBU0VfVU5JVFNba2V5XS5rZXkgPSBrZXk7XG4gIH1cblxuICB2YXIgQkFTRV9VTklUX05PTkUgPSB7fTtcbiAgdmFyIFVOSVRfTk9ORSA9IHtcbiAgICBuYW1lOiAnJyxcbiAgICBiYXNlOiBCQVNFX1VOSVRfTk9ORSxcbiAgICB2YWx1ZTogMSxcbiAgICBvZmZzZXQ6IDAsXG4gICAgZGltZW5zaW9uczogQkFTRV9ESU1FTlNJT05TLm1hcChmdW5jdGlvbiAoeCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSlcbiAgfTtcbiAgdmFyIFVOSVRTID0ge1xuICAgIC8vIGxlbmd0aFxuICAgIG1ldGVyOiB7XG4gICAgICBuYW1lOiAnbWV0ZXInLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBpbmNoOiB7XG4gICAgICBuYW1lOiAnaW5jaCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDI1NCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZm9vdDoge1xuICAgICAgbmFtZTogJ2Zvb3QnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjMwNDgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHlhcmQ6IHtcbiAgICAgIG5hbWU6ICd5YXJkJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC45MTQ0LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBtaWxlOiB7XG4gICAgICBuYW1lOiAnbWlsZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDE2MDkuMzQ0LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBsaW5rOiB7XG4gICAgICBuYW1lOiAnbGluaycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMjAxMTY4LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICByb2Q6IHtcbiAgICAgIG5hbWU6ICdyb2QnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiA1LjAyOTIsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGNoYWluOiB7XG4gICAgICBuYW1lOiAnY2hhaW4nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAyMC4xMTY4LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBhbmdzdHJvbToge1xuICAgICAgbmFtZTogJ2FuZ3N0cm9tJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMWUtMTAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIG06IHtcbiAgICAgIG5hbWU6ICdtJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIFwiaW5cIjoge1xuICAgICAgbmFtZTogJ2luJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMjU0LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBmdDoge1xuICAgICAgbmFtZTogJ2Z0JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4zMDQ4LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICB5ZDoge1xuICAgICAgbmFtZTogJ3lkJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC45MTQ0LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBtaToge1xuICAgICAgbmFtZTogJ21pJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMTYwOS4zNDQsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGxpOiB7XG4gICAgICBuYW1lOiAnbGknLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5MRU5HVEgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjIwMTE2OCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgcmQ6IHtcbiAgICAgIG5hbWU6ICdyZCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkxFTkdUSCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDUuMDI5MjEwLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBjaDoge1xuICAgICAgbmFtZTogJ2NoJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMjAuMTE2OCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgbWlsOiB7XG4gICAgICBuYW1lOiAnbWlsJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTEVOR1RILFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDAwMjU0LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAxLzEwMDAgaW5jaFxuICAgIC8vIFN1cmZhY2VcbiAgICBtMjoge1xuICAgICAgbmFtZTogJ20yJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuU1VSRkFDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TUVVBUkVELFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHNxaW46IHtcbiAgICAgIG5hbWU6ICdzcWluJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuU1VSRkFDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDAwNjQ1MTYsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDY0NS4xNiBtbTJcbiAgICBzcWZ0OiB7XG4gICAgICBuYW1lOiAnc3FmdCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlNVUkZBQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjA5MjkwMzA0LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAwLjA5MjkwMzA0IG0yXG4gICAgc3F5ZDoge1xuICAgICAgbmFtZTogJ3NxeWQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5TVVJGQUNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC44MzYxMjczNixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMC44MzYxMjczNiBtMlxuICAgIHNxbWk6IHtcbiAgICAgIG5hbWU6ICdzcW1pJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuU1VSRkFDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDI1ODk5ODguMTEwMzM2LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAyLjU4OTk4ODExMDMzNiBrbTJcbiAgICBzcXJkOiB7XG4gICAgICBuYW1lOiAnc3FyZCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlNVUkZBQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAyNS4yOTI5NSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMjUuMjkyOTUgbTJcbiAgICBzcWNoOiB7XG4gICAgICBuYW1lOiAnc3FjaCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlNVUkZBQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiA0MDQuNjg3MyxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gNDA0LjY4NzMgbTJcbiAgICBzcW1pbDoge1xuICAgICAgbmFtZTogJ3NxbWlsJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuU1VSRkFDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDYuNDUxNmUtMTAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDYuNDUxNiAqIDEwXi0xMCBtMlxuICAgIGFjcmU6IHtcbiAgICAgIG5hbWU6ICdhY3JlJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuU1VSRkFDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDQwNDYuODYsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDQwNDYuODYgbTJcbiAgICBoZWN0YXJlOiB7XG4gICAgICBuYW1lOiAnaGVjdGFyZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlNVUkZBQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxMDAwMCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMTAwMDAgbTJcbiAgICAvLyBWb2x1bWVcbiAgICBtMzoge1xuICAgICAgbmFtZTogJ20zJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkNVQklDLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIEw6IHtcbiAgICAgIG5hbWU6ICdMJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDAuMDAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBsaXRyZVxuICAgIGw6IHtcbiAgICAgIG5hbWU6ICdsJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDAuMDAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBsaXRyZVxuICAgIGxpdHJlOiB7XG4gICAgICBuYW1lOiAnbGl0cmUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAwLjAwMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgY3Vpbjoge1xuICAgICAgbmFtZTogJ2N1aW4nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxLjYzODcwNjRlLTUsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDEuNjM4NzA2NGUtNSBtM1xuICAgIGN1ZnQ6IHtcbiAgICAgIG5hbWU6ICdjdWZ0JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMjgzMTY4NDY1OTIsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDI4LjMxNiA4NDYgNTkyIExcbiAgICBjdXlkOiB7XG4gICAgICBuYW1lOiAnY3V5ZCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuNzY0NTU0ODU3OTg0LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyA3NjQuNTU0IDg1NyA5ODQgTFxuICAgIHRlYXNwb29uOiB7XG4gICAgICBuYW1lOiAndGVhc3Bvb24nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAwMDAwNSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gNSBtTFxuICAgIHRhYmxlc3Bvb246IHtcbiAgICAgIG5hbWU6ICd0YWJsZXNwb29uJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDAwMTUsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDE1IG1MXG4gICAgLy8ge25hbWU6ICdjdXAnLCBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSwgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsIHZhbHVlOiAwLjAwMDI0MCwgb2Zmc2V0OiAwfSwgLy8gMjQwIG1MICAvLyBub3QgcG9zc2libGUsIHdlIGhhdmUgYWxyZWFkeSBhbm90aGVyIGN1cFxuICAgIGRyb3A6IHtcbiAgICAgIG5hbWU6ICdkcm9wJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNWUtOCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMC4wNSBtTCA9IDVlLTggbTNcbiAgICBndHQ6IHtcbiAgICAgIG5hbWU6ICdndHQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiA1ZS04LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAwLjA1IG1MID0gNWUtOCBtM1xuICAgIC8vIExpcXVpZCB2b2x1bWVcbiAgICBtaW5pbToge1xuICAgICAgbmFtZTogJ21pbmltJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDAwMDAwNjE2MTE1MixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMC4wNjE2MTE1MiBtTFxuICAgIGZsdWlkZHJhbToge1xuICAgICAgbmFtZTogJ2ZsdWlkZHJhbScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDAwMDAzNjk2NjkxMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMy42OTY2OTEgbUxcbiAgICBmbHVpZG91bmNlOiB7XG4gICAgICBuYW1lOiAnZmx1aWRvdW5jZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDAwMDI5NTczNTMsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDI5LjU3MzUzIG1MXG4gICAgZ2lsbDoge1xuICAgICAgbmFtZTogJ2dpbGwnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAwMDExODI5NDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDExOC4yOTQxIG1MXG4gICAgY2M6IHtcbiAgICAgIG5hbWU6ICdjYycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDFlLTYsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDFlLTYgTFxuICAgIGN1cDoge1xuICAgICAgbmFtZTogJ2N1cCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDAwMjM2NTg4MixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMjM2LjU4ODIgbUxcbiAgICBwaW50OiB7XG4gICAgICBuYW1lOiAncGludCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDAwNDczMTc2NSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gNDczLjE3NjUgbUxcbiAgICBxdWFydDoge1xuICAgICAgbmFtZTogJ3F1YXJ0JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDA5NDYzNTI5LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyA5NDYuMzUyOSBtTFxuICAgIGdhbGxvbjoge1xuICAgICAgbmFtZTogJ2dhbGxvbicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDAzNzg1NDEyLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAzLjc4NTQxMiBMXG4gICAgYmVlcmJhcnJlbDoge1xuICAgICAgbmFtZTogJ2JlZXJiYXJyZWwnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjExNzM0NzgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDExNy4zNDc4IExcbiAgICBvaWxiYXJyZWw6IHtcbiAgICAgIG5hbWU6ICdvaWxiYXJyZWwnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjE1ODk4NzMsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDE1OC45ODczIExcbiAgICBob2dzaGVhZDoge1xuICAgICAgbmFtZTogJ2hvZ3NoZWFkJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4yMzg0ODEwLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAyMzguNDgxMCBMXG4gICAgLy8ge25hbWU6ICdtaW4nLCBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSwgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsIHZhbHVlOiAwLjAwMDAwMDA2MTYxMTUyLCBvZmZzZXQ6IDB9LCAvLyAwLjA2MTYxMTUyIG1MIC8vIG1pbiBpcyBhbHJlYWR5IGluIHVzZSBhcyBtaW51dGVcbiAgICBmbGRyOiB7XG4gICAgICBuYW1lOiAnZmxkcicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDAwMDAzNjk2NjkxMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMy42OTY2OTEgbUxcbiAgICBmbG96OiB7XG4gICAgICBuYW1lOiAnZmxveicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDAwMDI5NTczNTMsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDI5LjU3MzUzIG1MXG4gICAgZ2k6IHtcbiAgICAgIG5hbWU6ICdnaScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDAwMTE4Mjk0MSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMTE4LjI5NDEgbUxcbiAgICBjcDoge1xuICAgICAgbmFtZTogJ2NwJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVk9MVU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMC4wMDAyMzY1ODgyLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyAyMzYuNTg4MiBtTFxuICAgIHB0OiB7XG4gICAgICBuYW1lOiAncHQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAwMDQ3MzE3NjUsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIDQ3My4xNzY1IG1MXG4gICAgcXQ6IHtcbiAgICAgIG5hbWU6ICdxdCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMDAwOTQ2MzUyOSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gOTQ2LjM1MjkgbUxcbiAgICBnYWw6IHtcbiAgICAgIG5hbWU6ICdnYWwnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5WT0xVTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAwLjAwMzc4NTQxMixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMy43ODU0MTIgTFxuICAgIGJibDoge1xuICAgICAgbmFtZTogJ2JibCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMTE3MzQ3OCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMTE3LjM0NzggTFxuICAgIG9ibDoge1xuICAgICAgbmFtZTogJ29ibCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDAuMTU4OTg3MyxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gMTU4Ljk4NzMgTFxuICAgIC8vIHtuYW1lOiAnaG9nc2hlYWQnLCBiYXNlOiBCQVNFX1VOSVRTLlZPTFVNRSwgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsIHZhbHVlOiAwLjIzODQ4MTAsIG9mZnNldDogMH0sIC8vIDIzOC40ODEwIEwgLy8gVE9ETzogaGg/XG4gICAgLy8gTWFzc1xuICAgIGc6IHtcbiAgICAgIG5hbWU6ICdnJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUyxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAwLjAwMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZ3JhbToge1xuICAgICAgbmFtZTogJ2dyYW0nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogMC4wMDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHRvbjoge1xuICAgICAgbmFtZTogJ3RvbicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogOTA3LjE4NDc0LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICB0OiB7XG4gICAgICBuYW1lOiAndCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMTAwMCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgdG9ubmU6IHtcbiAgICAgIG5hbWU6ICd0b25uZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxMDAwLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBncmFpbjoge1xuICAgICAgbmFtZTogJ2dyYWluJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUyxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDY0Ljc5ODkxZS02LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBkcmFtOiB7XG4gICAgICBuYW1lOiAnZHJhbScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxLjc3MTg0NTE5NTMxMjVlLTMsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIG91bmNlOiB7XG4gICAgICBuYW1lOiAnb3VuY2UnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMjguMzQ5NTIzMTI1ZS0zLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBwb3VuZG1hc3M6IHtcbiAgICAgIG5hbWU6ICdwb3VuZG1hc3MnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNDUzLjU5MjM3ZS0zLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBodW5kcmVkd2VpZ2h0OiB7XG4gICAgICBuYW1lOiAnaHVuZHJlZHdlaWdodCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BU1MsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiA0NS4zNTkyMzcsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHN0aWNrOiB7XG4gICAgICBuYW1lOiAnc3RpY2snLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMTE1ZS0zLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBzdG9uZToge1xuICAgICAgbmFtZTogJ3N0b25lJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUyxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDYuMzUwMjkzMTgsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGdyOiB7XG4gICAgICBuYW1lOiAnZ3InLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNjQuNzk4OTFlLTYsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGRyOiB7XG4gICAgICBuYW1lOiAnZHInLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQVNTLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMS43NzE4NDUxOTUzMTI1ZS0zLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBvejoge1xuICAgICAgbmFtZTogJ296JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUyxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDI4LjM0OTUyMzEyNWUtMyxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgbGJtOiB7XG4gICAgICBuYW1lOiAnbGJtJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUyxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDQ1My41OTIzN2UtMyxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgY3d0OiB7XG4gICAgICBuYW1lOiAnY3d0JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFTUyxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDQ1LjM1OTIzNyxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gVGltZVxuICAgIHM6IHtcbiAgICAgIG5hbWU6ICdzJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVElNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBtaW46IHtcbiAgICAgIG5hbWU6ICdtaW4nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNjAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGg6IHtcbiAgICAgIG5hbWU6ICdoJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVElNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDM2MDAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHNlY29uZDoge1xuICAgICAgbmFtZTogJ3NlY29uZCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlRJTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBzZWM6IHtcbiAgICAgIG5hbWU6ICdzZWMnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgbWludXRlOiB7XG4gICAgICBuYW1lOiAnbWludXRlJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVElNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDYwLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBob3VyOiB7XG4gICAgICBuYW1lOiAnaG91cicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlRJTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAzNjAwLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBkYXk6IHtcbiAgICAgIG5hbWU6ICdkYXknLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogODY0MDAsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHdlZWs6IHtcbiAgICAgIG5hbWU6ICd3ZWVrJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVElNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDcgKiA4NjQwMCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgbW9udGg6IHtcbiAgICAgIG5hbWU6ICdtb250aCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlRJTUUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAyNjI5ODAwLFxuICAgICAgLy8gMS8xMnRoIG9mIEp1bGlhbiB5ZWFyXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHllYXI6IHtcbiAgICAgIG5hbWU6ICd5ZWFyJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVElNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDMxNTU3NjAwLFxuICAgICAgLy8gSnVsaWFuIHllYXJcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZGVjYWRlOiB7XG4gICAgICBuYW1lOiAnZGVjYWRlJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVElNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDMxNTU3NjAwMCxcbiAgICAgIC8vIEp1bGlhbiBkZWNhZGVcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgY2VudHVyeToge1xuICAgICAgbmFtZTogJ2NlbnR1cnknLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5USU1FLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMzE1NTc2MDAwMCxcbiAgICAgIC8vIEp1bGlhbiBjZW50dXJ5XG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIG1pbGxlbm5pdW06IHtcbiAgICAgIG5hbWU6ICdtaWxsZW5uaXVtJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVElNRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDMxNTU3NjAwMDAwLFxuICAgICAgLy8gSnVsaWFuIG1pbGxlbm5pdW1cbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gRnJlcXVlbmN5XG4gICAgaGVydHo6IHtcbiAgICAgIG5hbWU6ICdIZXJ0eicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkZSRVFVRU5DWSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDAsXG4gICAgICByZWNpcHJvY2FsOiB0cnVlXG4gICAgfSxcbiAgICBIejoge1xuICAgICAgbmFtZTogJ0h6JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRlJFUVVFTkNZLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDAsXG4gICAgICByZWNpcHJvY2FsOiB0cnVlXG4gICAgfSxcbiAgICAvLyBBbmdsZVxuICAgIHJhZDoge1xuICAgICAgbmFtZTogJ3JhZCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkFOR0xFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIHJhZGlhbjoge1xuICAgICAgbmFtZTogJ3JhZGlhbicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkFOR0xFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gZGVnID0gcmFkIC8gKDIqcGkpICogMzYwID0gcmFkIC8gMC4wMTc0NTMyOTI1MTk5NDMyOTU3NjkyMzY5MDc2ODQ4ODhcbiAgICBkZWc6IHtcbiAgICAgIG5hbWU6ICdkZWcnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5BTkdMRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgLy8gd2lsbCBiZSBmaWxsZWQgaW4gYnkgY2FsY3VsYXRlQW5nbGVWYWx1ZXMoKVxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBkZWdyZWU6IHtcbiAgICAgIG5hbWU6ICdkZWdyZWUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5BTkdMRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAvLyB3aWxsIGJlIGZpbGxlZCBpbiBieSBjYWxjdWxhdGVBbmdsZVZhbHVlcygpXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIGdyYWQgPSByYWQgLyAoMipwaSkgKiA0MDAgID0gcmFkIC8gMC4wMTU3MDc5NjMyNjc5NDg5NjYxOTIzMTMyMTY5MTYzOTlcbiAgICBncmFkOiB7XG4gICAgICBuYW1lOiAnZ3JhZCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkFOR0xFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAvLyB3aWxsIGJlIGZpbGxlZCBpbiBieSBjYWxjdWxhdGVBbmdsZVZhbHVlcygpXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGdyYWRpYW46IHtcbiAgICAgIG5hbWU6ICdncmFkaWFuJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQU5HTEUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgLy8gd2lsbCBiZSBmaWxsZWQgaW4gYnkgY2FsY3VsYXRlQW5nbGVWYWx1ZXMoKVxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBjeWNsZSA9IHJhZCAvICgyKnBpKSA9IHJhZCAvIDYuMjgzMTg1MzA3MTc5NTg2NDc2OTI1Mjg2NzY2NTc5M1xuICAgIGN5Y2xlOiB7XG4gICAgICBuYW1lOiAnY3ljbGUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5BTkdMRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAvLyB3aWxsIGJlIGZpbGxlZCBpbiBieSBjYWxjdWxhdGVBbmdsZVZhbHVlcygpXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIGFyY3NlYyA9IHJhZCAvICgzNjAwICogKDM2MCAvIDIgKiBwaSkpID0gcmFkIC8gMC4wMDAwMDQ4NDgxMzY4MTEwOTUzNTk5MzU4OTkxNDEwMjM1Nzk1XG4gICAgYXJjc2VjOiB7XG4gICAgICBuYW1lOiAnYXJjc2VjJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQU5HTEUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgLy8gd2lsbCBiZSBmaWxsZWQgaW4gYnkgY2FsY3VsYXRlQW5nbGVWYWx1ZXMoKVxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBhcmNtaW4gPSByYWQgLyAoNjAgKiAoMzYwIC8gMiAqIHBpKSkgPSByYWQgLyAwLjAwMDI5MDg4ODIwODY2NTcyMTU5NjE1Mzk0ODQ2MTQxNDc3XG4gICAgYXJjbWluOiB7XG4gICAgICBuYW1lOiAnYXJjbWluJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQU5HTEUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgLy8gd2lsbCBiZSBmaWxsZWQgaW4gYnkgY2FsY3VsYXRlQW5nbGVWYWx1ZXMoKVxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBFbGVjdHJpYyBjdXJyZW50XG4gICAgQToge1xuICAgICAgbmFtZTogJ0EnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5DVVJSRU5ULFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGFtcGVyZToge1xuICAgICAgbmFtZTogJ2FtcGVyZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkNVUlJFTlQsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBUZW1wZXJhdHVyZVxuICAgIC8vIEsoQykgPSDCsEMgKyAyNzMuMTVcbiAgICAvLyBLKEYpID0gKMKwRiArIDQ1OS42NykgLyAxLjhcbiAgICAvLyBLKFIpID0gwrBSIC8gMS44XG4gICAgSzoge1xuICAgICAgbmFtZTogJ0snLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5URU1QRVJBVFVSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGRlZ0M6IHtcbiAgICAgIG5hbWU6ICdkZWdDJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVEVNUEVSQVRVUkUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAyNzMuMTVcbiAgICB9LFxuICAgIGRlZ0Y6IHtcbiAgICAgIG5hbWU6ICdkZWdGJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVEVNUEVSQVRVUkUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxIC8gMS44LFxuICAgICAgb2Zmc2V0OiA0NTkuNjdcbiAgICB9LFxuICAgIGRlZ1I6IHtcbiAgICAgIG5hbWU6ICdkZWdSJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVEVNUEVSQVRVUkUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxIC8gMS44LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBrZWx2aW46IHtcbiAgICAgIG5hbWU6ICdrZWx2aW4nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5URU1QRVJBVFVSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGNlbHNpdXM6IHtcbiAgICAgIG5hbWU6ICdjZWxzaXVzJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVEVNUEVSQVRVUkUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAyNzMuMTVcbiAgICB9LFxuICAgIGZhaHJlbmhlaXQ6IHtcbiAgICAgIG5hbWU6ICdmYWhyZW5oZWl0JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVEVNUEVSQVRVUkUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxIC8gMS44LFxuICAgICAgb2Zmc2V0OiA0NTkuNjdcbiAgICB9LFxuICAgIHJhbmtpbmU6IHtcbiAgICAgIG5hbWU6ICdyYW5raW5lJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuVEVNUEVSQVRVUkUsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTk9ORSxcbiAgICAgIHZhbHVlOiAxIC8gMS44LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBhbW91bnQgb2Ygc3Vic3RhbmNlXG4gICAgbW9sOiB7XG4gICAgICBuYW1lOiAnbW9sJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQU1PVU5UX09GX1NVQlNUQU5DRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBtb2xlOiB7XG4gICAgICBuYW1lOiAnbW9sZScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkFNT1VOVF9PRl9TVUJTVEFOQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBsdW1pbm91cyBpbnRlbnNpdHlcbiAgICBjZDoge1xuICAgICAgbmFtZTogJ2NkJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTFVNSU5PVVNfSU5URU5TSVRZLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGNhbmRlbGE6IHtcbiAgICAgIG5hbWU6ICdjYW5kZWxhJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTFVNSU5PVVNfSU5URU5TSVRZLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gVE9ETzogdW5pdHMgU1RFUkFESUFOXG4gICAgLy8ge25hbWU6ICdzcicsIGJhc2U6IEJBU0VfVU5JVFMuU1RFUkFESUFOLCBwcmVmaXhlczogUFJFRklYRVMuTk9ORSwgdmFsdWU6IDEsIG9mZnNldDogMH0sXG4gICAgLy8ge25hbWU6ICdzdGVyYWRpYW4nLCBiYXNlOiBCQVNFX1VOSVRTLlNURVJBRElBTiwgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsIHZhbHVlOiAxLCBvZmZzZXQ6IDB9LFxuICAgIC8vIEZvcmNlXG4gICAgTjoge1xuICAgICAgbmFtZTogJ04nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5GT1JDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBuZXd0b246IHtcbiAgICAgIG5hbWU6ICduZXd0b24nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5GT1JDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGR5bjoge1xuICAgICAgbmFtZTogJ2R5bicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkZPUkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDAuMDAwMDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGR5bmU6IHtcbiAgICAgIG5hbWU6ICdkeW5lJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRk9SQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAwLjAwMDAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBsYmY6IHtcbiAgICAgIG5hbWU6ICdsYmYnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5GT1JDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDQuNDQ4MjIxNjE1MjYwNSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgcG91bmRmb3JjZToge1xuICAgICAgbmFtZTogJ3BvdW5kZm9yY2UnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5GT1JDRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDQuNDQ4MjIxNjE1MjYwNSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAga2lwOiB7XG4gICAgICBuYW1lOiAna2lwJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRk9SQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiA0NDQ4LjIyMTYsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIEVuZXJneVxuICAgIEo6IHtcbiAgICAgIG5hbWU6ICdKJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRU5FUkdZLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGpvdWxlOiB7XG4gICAgICBuYW1lOiAnam91bGUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTkVSR1ksXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgZXJnOiB7XG4gICAgICBuYW1lOiAnZXJnJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRU5FUkdZLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMWUtNyxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgV2g6IHtcbiAgICAgIG5hbWU6ICdXaCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVORVJHWSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAzNjAwLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBCVFU6IHtcbiAgICAgIG5hbWU6ICdCVFUnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTkVSR1ksXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuQlRVLFxuICAgICAgdmFsdWU6IDEwNTUuMDU1ODUyNjIsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGVWOiB7XG4gICAgICBuYW1lOiAnZVYnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTkVSR1ksXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMS42MDIxNzY1NjVlLTE5LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBlbGVjdHJvbnZvbHQ6IHtcbiAgICAgIG5hbWU6ICdlbGVjdHJvbnZvbHQnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTkVSR1ksXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLjYwMjE3NjU2NWUtMTksXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIFBvd2VyXG4gICAgVzoge1xuICAgICAgbmFtZTogJ1cnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5QT1dFUixcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICB3YXR0OiB7XG4gICAgICBuYW1lOiAnd2F0dCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBPV0VSLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgaHA6IHtcbiAgICAgIG5hbWU6ICdocCcsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBPV0VSLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogNzQ1LjY5OTg3MTUzODYsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIEVsZWN0cmljYWwgcG93ZXIgdW5pdHNcbiAgICBWQVI6IHtcbiAgICAgIG5hbWU6ICdWQVInLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5QT1dFUixcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiBDb21wbGV4LkksXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIFZBOiB7XG4gICAgICBuYW1lOiAnVkEnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5QT1dFUixcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICAvLyBQcmVzc3VyZVxuICAgIFBhOiB7XG4gICAgICBuYW1lOiAnUGEnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5QUkVTU1VSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVCxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBwc2k6IHtcbiAgICAgIG5hbWU6ICdwc2knLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5QUkVTU1VSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDY4OTQuNzU3MjkyNzY0NTksXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGF0bToge1xuICAgICAgbmFtZTogJ2F0bScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBSRVNTVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMTAxMzI1LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBiYXI6IHtcbiAgICAgIG5hbWU6ICdiYXInLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5QUkVTU1VSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5TSE9SVExPTkcsXG4gICAgICB2YWx1ZTogMTAwMDAwLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICB0b3JyOiB7XG4gICAgICBuYW1lOiAndG9ycicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLlBSRVNTVVJFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLk5PTkUsXG4gICAgICB2YWx1ZTogMTMzLjMyMixcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgbW1IZzoge1xuICAgICAgbmFtZTogJ21tSGcnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5QUkVTU1VSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDEzMy4zMjIsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIG1tSDJPOiB7XG4gICAgICBuYW1lOiAnbW1IMk8nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5QUkVTU1VSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDkuODA2NjUsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIGNtSDJPOiB7XG4gICAgICBuYW1lOiAnY21IMk8nLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5QUkVTU1VSRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5OT05FLFxuICAgICAgdmFsdWU6IDk4LjA2NjUsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIEVsZWN0cmljIGNoYXJnZVxuICAgIGNvdWxvbWI6IHtcbiAgICAgIG5hbWU6ICdjb3Vsb21iJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRUxFQ1RSSUNfQ0hBUkdFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgQzoge1xuICAgICAgbmFtZTogJ0MnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTEVDVFJJQ19DSEFSR0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gRWxlY3RyaWMgY2FwYWNpdGFuY2VcbiAgICBmYXJhZDoge1xuICAgICAgbmFtZTogJ2ZhcmFkJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRUxFQ1RSSUNfQ0FQQUNJVEFOQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBGOiB7XG4gICAgICBuYW1lOiAnRicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX0NBUEFDSVRBTkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIEVsZWN0cmljIHBvdGVudGlhbFxuICAgIHZvbHQ6IHtcbiAgICAgIG5hbWU6ICd2b2x0JyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRUxFQ1RSSUNfUE9URU5USUFMLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgVjoge1xuICAgICAgbmFtZTogJ1YnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTEVDVFJJQ19QT1RFTlRJQUwsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gRWxlY3RyaWMgcmVzaXN0YW5jZVxuICAgIG9obToge1xuICAgICAgbmFtZTogJ29obScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkVMRUNUUklDX1JFU0lTVEFOQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlRMT05HLFxuICAgICAgLy8gQm90aCBNb2htIGFuZCBtZWdhb2htIGFyZSBhY2NlcHRhYmxlXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG5cbiAgICAvKlxuICAgICAqIFVuaWNvZGUgYnJlYWtzIGluIGJyb3dzZXJzIGlmIGNoYXJzZXQgaXMgbm90IHNwZWNpZmllZFxuICAgIM6pOiB7XG4gICAgICBuYW1lOiAnzqknLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTEVDVFJJQ19SRVNJU1RBTkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgICovXG4gICAgLy8gRWxlY3RyaWMgaW5kdWN0YW5jZVxuICAgIGhlbnJ5OiB7XG4gICAgICBuYW1lOiAnaGVucnknLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTEVDVFJJQ19JTkRVQ1RBTkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgSDoge1xuICAgICAgbmFtZTogJ0gnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTEVDVFJJQ19JTkRVQ1RBTkNFLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIEVsZWN0cmljIGNvbmR1Y3RhbmNlXG4gICAgc2llbWVuczoge1xuICAgICAgbmFtZTogJ3NpZW1lbnMnLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5FTEVDVFJJQ19DT05EVUNUQU5DRSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIFM6IHtcbiAgICAgIG5hbWU6ICdTJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuRUxFQ1RSSUNfQ09ORFVDVEFOQ0UsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gTWFnbmV0aWMgZmx1eFxuICAgIHdlYmVyOiB7XG4gICAgICBuYW1lOiAnd2ViZXInLFxuICAgICAgYmFzZTogQkFTRV9VTklUUy5NQUdORVRJQ19GTFVYLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkxPTkcsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgV2I6IHtcbiAgICAgIG5hbWU6ICdXYicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BR05FVElDX0ZMVVgsXG4gICAgICBwcmVmaXhlczogUFJFRklYRVMuU0hPUlQsXG4gICAgICB2YWx1ZTogMSxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgLy8gTWFnbmV0aWMgZmx1eCBkZW5zaXR5XG4gICAgdGVzbGE6IHtcbiAgICAgIG5hbWU6ICd0ZXNsYScsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLk1BR05FVElDX0ZMVVhfREVOU0lUWSxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5MT05HLFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIFQ6IHtcbiAgICAgIG5hbWU6ICdUJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuTUFHTkVUSUNfRkxVWF9ERU5TSVRZLFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLlNIT1JULFxuICAgICAgdmFsdWU6IDEsXG4gICAgICBvZmZzZXQ6IDBcbiAgICB9LFxuICAgIC8vIEJpbmFyeVxuICAgIGI6IHtcbiAgICAgIG5hbWU6ICdiJyxcbiAgICAgIGJhc2U6IEJBU0VfVU5JVFMuQklULFxuICAgICAgcHJlZml4ZXM6IFBSRUZJWEVTLkJJTkFSWV9TSE9SVCxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBiaXRzOiB7XG4gICAgICBuYW1lOiAnYml0cycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkJJVCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5CSU5BUllfTE9ORyxcbiAgICAgIHZhbHVlOiAxLFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfSxcbiAgICBCOiB7XG4gICAgICBuYW1lOiAnQicsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkJJVCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5CSU5BUllfU0hPUlQsXG4gICAgICB2YWx1ZTogOCxcbiAgICAgIG9mZnNldDogMFxuICAgIH0sXG4gICAgYnl0ZXM6IHtcbiAgICAgIG5hbWU6ICdieXRlcycsXG4gICAgICBiYXNlOiBCQVNFX1VOSVRTLkJJVCxcbiAgICAgIHByZWZpeGVzOiBQUkVGSVhFUy5CSU5BUllfTE9ORyxcbiAgICAgIHZhbHVlOiA4LFxuICAgICAgb2Zmc2V0OiAwXG4gICAgfVxuICB9OyAvLyBhbGlhc2VzIChmb3JtZXJseSBwbHVyYWxzKVxuXG4gIHZhciBBTElBU0VTID0ge1xuICAgIG1ldGVyczogJ21ldGVyJyxcbiAgICBpbmNoZXM6ICdpbmNoJyxcbiAgICBmZWV0OiAnZm9vdCcsXG4gICAgeWFyZHM6ICd5YXJkJyxcbiAgICBtaWxlczogJ21pbGUnLFxuICAgIGxpbmtzOiAnbGluaycsXG4gICAgcm9kczogJ3JvZCcsXG4gICAgY2hhaW5zOiAnY2hhaW4nLFxuICAgIGFuZ3N0cm9tczogJ2FuZ3N0cm9tJyxcbiAgICBsdDogJ2wnLFxuICAgIGxpdHJlczogJ2xpdHJlJyxcbiAgICBsaXRlcjogJ2xpdHJlJyxcbiAgICBsaXRlcnM6ICdsaXRyZScsXG4gICAgdGVhc3Bvb25zOiAndGVhc3Bvb24nLFxuICAgIHRhYmxlc3Bvb25zOiAndGFibGVzcG9vbicsXG4gICAgbWluaW1zOiAnbWluaW0nLFxuICAgIGZsdWlkZHJhbXM6ICdmbHVpZGRyYW0nLFxuICAgIGZsdWlkb3VuY2VzOiAnZmx1aWRvdW5jZScsXG4gICAgZ2lsbHM6ICdnaWxsJyxcbiAgICBjdXBzOiAnY3VwJyxcbiAgICBwaW50czogJ3BpbnQnLFxuICAgIHF1YXJ0czogJ3F1YXJ0JyxcbiAgICBnYWxsb25zOiAnZ2FsbG9uJyxcbiAgICBiZWVyYmFycmVsczogJ2JlZXJiYXJyZWwnLFxuICAgIG9pbGJhcnJlbHM6ICdvaWxiYXJyZWwnLFxuICAgIGhvZ3NoZWFkczogJ2hvZ3NoZWFkJyxcbiAgICBndHRzOiAnZ3R0JyxcbiAgICBncmFtczogJ2dyYW0nLFxuICAgIHRvbnM6ICd0b24nLFxuICAgIHRvbm5lczogJ3Rvbm5lJyxcbiAgICBncmFpbnM6ICdncmFpbicsXG4gICAgZHJhbXM6ICdkcmFtJyxcbiAgICBvdW5jZXM6ICdvdW5jZScsXG4gICAgcG91bmRtYXNzZXM6ICdwb3VuZG1hc3MnLFxuICAgIGh1bmRyZWR3ZWlnaHRzOiAnaHVuZHJlZHdlaWdodCcsXG4gICAgc3RpY2tzOiAnc3RpY2snLFxuICAgIGxiOiAnbGJtJyxcbiAgICBsYnM6ICdsYm0nLFxuICAgIGtpcHM6ICdraXAnLFxuICAgIGFjcmVzOiAnYWNyZScsXG4gICAgaGVjdGFyZXM6ICdoZWN0YXJlJyxcbiAgICBzcWZlZXQ6ICdzcWZ0JyxcbiAgICBzcXlhcmQ6ICdzcXlkJyxcbiAgICBzcW1pbGU6ICdzcW1pJyxcbiAgICBzcW1pbGVzOiAnc3FtaScsXG4gICAgbW1oZzogJ21tSGcnLFxuICAgIG1taDJvOiAnbW1IMk8nLFxuICAgIGNtaDJvOiAnY21IMk8nLFxuICAgIHNlY29uZHM6ICdzZWNvbmQnLFxuICAgIHNlY3M6ICdzZWNvbmQnLFxuICAgIG1pbnV0ZXM6ICdtaW51dGUnLFxuICAgIG1pbnM6ICdtaW51dGUnLFxuICAgIGhvdXJzOiAnaG91cicsXG4gICAgaHI6ICdob3VyJyxcbiAgICBocnM6ICdob3VyJyxcbiAgICBkYXlzOiAnZGF5JyxcbiAgICB3ZWVrczogJ3dlZWsnLFxuICAgIG1vbnRoczogJ21vbnRoJyxcbiAgICB5ZWFyczogJ3llYXInLFxuICAgIGRlY2FkZXM6ICdkZWNhZGUnLFxuICAgIGNlbnR1cmllczogJ2NlbnR1cnknLFxuICAgIG1pbGxlbm5pYTogJ21pbGxlbm5pdW0nLFxuICAgIGhlcnR6OiAnaGVydHonLFxuICAgIHJhZGlhbnM6ICdyYWRpYW4nLFxuICAgIGRlZ3JlZXM6ICdkZWdyZWUnLFxuICAgIGdyYWRpYW5zOiAnZ3JhZGlhbicsXG4gICAgY3ljbGVzOiAnY3ljbGUnLFxuICAgIGFyY3NlY29uZDogJ2FyY3NlYycsXG4gICAgYXJjc2Vjb25kczogJ2FyY3NlYycsXG4gICAgYXJjbWludXRlOiAnYXJjbWluJyxcbiAgICBhcmNtaW51dGVzOiAnYXJjbWluJyxcbiAgICBCVFVzOiAnQlRVJyxcbiAgICB3YXR0czogJ3dhdHQnLFxuICAgIGpvdWxlczogJ2pvdWxlJyxcbiAgICBhbXBlcmVzOiAnYW1wZXJlJyxcbiAgICBjb3Vsb21iczogJ2NvdWxvbWInLFxuICAgIHZvbHRzOiAndm9sdCcsXG4gICAgb2htczogJ29obScsXG4gICAgZmFyYWRzOiAnZmFyYWQnLFxuICAgIHdlYmVyczogJ3dlYmVyJyxcbiAgICB0ZXNsYXM6ICd0ZXNsYScsXG4gICAgZWxlY3Ryb252b2x0czogJ2VsZWN0cm9udm9sdCcsXG4gICAgbW9sZXM6ICdtb2xlJyxcbiAgICBiaXQ6ICdiaXRzJyxcbiAgICBcImJ5dGVcIjogJ2J5dGVzJ1xuICB9O1xuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSB2YWx1ZXMgZm9yIHRoZSBhbmdsZSB1bml0cy5cbiAgICogVmFsdWUgaXMgY2FsY3VsYXRlZCBhcyBudW1iZXIgb3IgQmlnTnVtYmVyIGRlcGVuZGluZyBvbiB0aGUgY29uZmlndXJhdGlvblxuICAgKiBAcGFyYW0ge3tudW1iZXI6ICdudW1iZXInIHwgJ0JpZ051bWJlcid9fSBjb25maWdcbiAgICovXG5cbiAgZnVuY3Rpb24gY2FsY3VsYXRlQW5nbGVWYWx1ZXMoY29uZmlnKSB7XG4gICAgaWYgKGNvbmZpZy5udW1iZXIgPT09ICdCaWdOdW1iZXInKSB7XG4gICAgICB2YXIgcGkgPSAoMCwgX2NvbnN0YW50cy5jcmVhdGVCaWdOdW1iZXJQaSkoX0JpZ051bWJlcik7XG4gICAgICBVTklUUy5yYWQudmFsdWUgPSBuZXcgX0JpZ051bWJlcigxKTtcbiAgICAgIFVOSVRTLmRlZy52YWx1ZSA9IHBpLmRpdigxODApOyAvLyAyICogcGkgLyAzNjBcblxuICAgICAgVU5JVFMuZ3JhZC52YWx1ZSA9IHBpLmRpdigyMDApOyAvLyAyICogcGkgLyA0MDBcblxuICAgICAgVU5JVFMuY3ljbGUudmFsdWUgPSBwaS50aW1lcygyKTsgLy8gMiAqIHBpXG5cbiAgICAgIFVOSVRTLmFyY3NlYy52YWx1ZSA9IHBpLmRpdig2NDgwMDApOyAvLyAyICogcGkgLyAzNjAgLyAzNjAwXG5cbiAgICAgIFVOSVRTLmFyY21pbi52YWx1ZSA9IHBpLmRpdigxMDgwMCk7IC8vIDIgKiBwaSAvIDM2MCAvIDYwXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG51bWJlclxuICAgICAgVU5JVFMucmFkLnZhbHVlID0gMTtcbiAgICAgIFVOSVRTLmRlZy52YWx1ZSA9IE1hdGguUEkgLyAxODA7IC8vIDIgKiBwaSAvIDM2MFxuXG4gICAgICBVTklUUy5ncmFkLnZhbHVlID0gTWF0aC5QSSAvIDIwMDsgLy8gMiAqIHBpIC8gNDAwXG5cbiAgICAgIFVOSVRTLmN5Y2xlLnZhbHVlID0gTWF0aC5QSSAqIDI7IC8vIDIgKiBwaVxuXG4gICAgICBVTklUUy5hcmNzZWMudmFsdWUgPSBNYXRoLlBJIC8gNjQ4MDAwOyAvLyAyICogcGkgLyAzNjAgLyAzNjAwXG5cbiAgICAgIFVOSVRTLmFyY21pbi52YWx1ZSA9IE1hdGguUEkgLyAxMDgwMDsgLy8gMiAqIHBpIC8gMzYwIC8gNjBcbiAgICB9IC8vIGNvcHkgdG8gdGhlIGZ1bGwgbmFtZXMgb2YgdGhlIGFuZ2xlc1xuXG5cbiAgICBVTklUUy5yYWRpYW4udmFsdWUgPSBVTklUUy5yYWQudmFsdWU7XG4gICAgVU5JVFMuZGVncmVlLnZhbHVlID0gVU5JVFMuZGVnLnZhbHVlO1xuICAgIFVOSVRTLmdyYWRpYW4udmFsdWUgPSBVTklUUy5ncmFkLnZhbHVlO1xuICB9IC8vIGFwcGx5IHRoZSBhbmdsZSB2YWx1ZXMgbm93XG5cblxuICBjYWxjdWxhdGVBbmdsZVZhbHVlcyhjb25maWcpO1xuXG4gIGlmIChvbikge1xuICAgIC8vIHJlY2FsY3VsYXRlIHRoZSB2YWx1ZXMgb24gY2hhbmdlIG9mIGNvbmZpZ3VyYXRpb25cbiAgICBvbignY29uZmlnJywgZnVuY3Rpb24gKGN1cnIsIHByZXYpIHtcbiAgICAgIGlmIChjdXJyLm51bWJlciAhPT0gcHJldi5udW1iZXIpIHtcbiAgICAgICAgY2FsY3VsYXRlQW5nbGVWYWx1ZXMoY3Vycik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEEgdW5pdCBzeXN0ZW0gaXMgYSBzZXQgb2YgZGltZW5zaW9uYWxseSBpbmRlcGVuZGVudCBiYXNlIHVuaXRzIHBsdXMgYSBzZXQgb2YgZGVyaXZlZCB1bml0cywgZm9ybWVkIGJ5IG11bHRpcGxpY2F0aW9uIGFuZCBkaXZpc2lvbiBvZiB0aGUgYmFzZSB1bml0cywgdGhhdCBhcmUgYnkgY29udmVudGlvbiB1c2VkIHdpdGggdGhlIHVuaXQgc3lzdGVtLlxuICAgKiBBIHVzZXIgcGVyaGFwcyBjb3VsZCBpc3N1ZSBhIGNvbW1hbmQgdG8gc2VsZWN0IGEgcHJlZmVycmVkIHVuaXQgc3lzdGVtLCBvciB1c2UgdGhlIGRlZmF1bHQgKHNlZSBiZWxvdykuXG4gICAqIEF1dG8gdW5pdCBzeXN0ZW06IFRoZSBkZWZhdWx0IHVuaXQgc3lzdGVtIGlzIHVwZGF0ZWQgb24gdGhlIGZseSBhbnl0aW1lIGEgdW5pdCBpcyBwYXJzZWQuIFRoZSBjb3JyZXNwb25kaW5nIHVuaXQgaW4gdGhlIGRlZmF1bHQgdW5pdCBzeXN0ZW0gaXMgdXBkYXRlZCwgc28gdGhhdCBhbnN3ZXJzIGFyZSBnaXZlbiBpbiB0aGUgc2FtZSB1bml0cyB0aGUgdXNlciBzdXBwbGllcy5cbiAgICovXG5cblxuICB2YXIgVU5JVF9TWVNURU1TID0ge1xuICAgIHNpOiB7XG4gICAgICAvLyBCYXNlIHVuaXRzXG4gICAgICBOT05FOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRfTk9ORSxcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5OT05FWycnXVxuICAgICAgfSxcbiAgICAgIExFTkdUSDoge1xuICAgICAgICB1bml0OiBVTklUUy5tLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIE1BU1M6IHtcbiAgICAgICAgdW5pdDogVU5JVFMuZyxcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVC5rXG4gICAgICB9LFxuICAgICAgVElNRToge1xuICAgICAgICB1bml0OiBVTklUUy5zLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIENVUlJFTlQ6IHtcbiAgICAgICAgdW5pdDogVU5JVFMuQSxcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICBURU1QRVJBVFVSRToge1xuICAgICAgICB1bml0OiBVTklUUy5LLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIExVTUlOT1VTX0lOVEVOU0lUWToge1xuICAgICAgICB1bml0OiBVTklUUy5jZCxcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICBBTU9VTlRfT0ZfU1VCU1RBTkNFOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLm1vbCxcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICBBTkdMRToge1xuICAgICAgICB1bml0OiBVTklUUy5yYWQsXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgQklUOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLmJpdHMsXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgLy8gRGVyaXZlZCB1bml0c1xuICAgICAgRk9SQ0U6IHtcbiAgICAgICAgdW5pdDogVU5JVFMuTixcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICBFTkVSR1k6IHtcbiAgICAgICAgdW5pdDogVU5JVFMuSixcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICBQT1dFUjoge1xuICAgICAgICB1bml0OiBVTklUUy5XLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIFBSRVNTVVJFOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLlBhLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIEVMRUNUUklDX0NIQVJHRToge1xuICAgICAgICB1bml0OiBVTklUUy5DLFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIEVMRUNUUklDX0NBUEFDSVRBTkNFOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLkYsXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgRUxFQ1RSSUNfUE9URU5USUFMOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLlYsXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgRUxFQ1RSSUNfUkVTSVNUQU5DRToge1xuICAgICAgICB1bml0OiBVTklUUy5vaG0sXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgRUxFQ1RSSUNfSU5EVUNUQU5DRToge1xuICAgICAgICB1bml0OiBVTklUUy5ILFxuICAgICAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICAgICAgfSxcbiAgICAgIEVMRUNUUklDX0NPTkRVQ1RBTkNFOiB7XG4gICAgICAgIHVuaXQ6IFVOSVRTLlMsXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9LFxuICAgICAgTUFHTkVUSUNfRkxVWDoge1xuICAgICAgICB1bml0OiBVTklUUy5XYixcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICBNQUdORVRJQ19GTFVYX0RFTlNJVFk6IHtcbiAgICAgICAgdW5pdDogVU5JVFMuVCxcbiAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5TSE9SVFsnJ11cbiAgICAgIH0sXG4gICAgICBGUkVRVUVOQ1k6IHtcbiAgICAgICAgdW5pdDogVU5JVFMuSHosXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlRbJyddXG4gICAgICB9XG4gICAgfVxuICB9OyAvLyBDbG9uZSB0byBjcmVhdGUgdGhlIG90aGVyIHVuaXQgc3lzdGVtc1xuXG4gIFVOSVRfU1lTVEVNUy5jZ3MgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KFVOSVRfU1lTVEVNUy5zaSkpO1xuICBVTklUX1NZU1RFTVMuY2dzLkxFTkdUSCA9IHtcbiAgICB1bml0OiBVTklUUy5tLFxuICAgIHByZWZpeDogUFJFRklYRVMuU0hPUlQuY1xuICB9O1xuICBVTklUX1NZU1RFTVMuY2dzLk1BU1MgPSB7XG4gICAgdW5pdDogVU5JVFMuZyxcbiAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICB9O1xuICBVTklUX1NZU1RFTVMuY2dzLkZPUkNFID0ge1xuICAgIHVuaXQ6IFVOSVRTLmR5bixcbiAgICBwcmVmaXg6IFBSRUZJWEVTLlNIT1JUWycnXVxuICB9O1xuICBVTklUX1NZU1RFTVMuY2dzLkVORVJHWSA9IHtcbiAgICB1bml0OiBVTklUUy5lcmcsXG4gICAgcHJlZml4OiBQUkVGSVhFUy5OT05FWycnXVxuICB9OyAvLyB0aGVyZSBhcmUgd2hvbGx5IDQgdW5pcXVlIGNncyBzeXN0ZW1zIGZvciBlbGVjdHJpY2l0eSBhbmQgbWFnbmV0aXNtLFxuICAvLyBzbyBsZXQncyBub3Qgd29ycnkgYWJvdXQgaXQgdW5sZXNzIHNvbWVib2R5IGNvbXBsYWluc1xuXG4gIFVOSVRfU1lTVEVNUy51cyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoVU5JVF9TWVNURU1TLnNpKSk7XG4gIFVOSVRfU1lTVEVNUy51cy5MRU5HVEggPSB7XG4gICAgdW5pdDogVU5JVFMuZnQsXG4gICAgcHJlZml4OiBQUkVGSVhFUy5OT05FWycnXVxuICB9O1xuICBVTklUX1NZU1RFTVMudXMuTUFTUyA9IHtcbiAgICB1bml0OiBVTklUUy5sYm0sXG4gICAgcHJlZml4OiBQUkVGSVhFUy5OT05FWycnXVxuICB9O1xuICBVTklUX1NZU1RFTVMudXMuVEVNUEVSQVRVUkUgPSB7XG4gICAgdW5pdDogVU5JVFMuZGVnRixcbiAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddXG4gIH07XG4gIFVOSVRfU1lTVEVNUy51cy5GT1JDRSA9IHtcbiAgICB1bml0OiBVTklUUy5sYmYsXG4gICAgcHJlZml4OiBQUkVGSVhFUy5OT05FWycnXVxuICB9O1xuICBVTklUX1NZU1RFTVMudXMuRU5FUkdZID0ge1xuICAgIHVuaXQ6IFVOSVRTLkJUVSxcbiAgICBwcmVmaXg6IFBSRUZJWEVTLkJUVVsnJ11cbiAgfTtcbiAgVU5JVF9TWVNURU1TLnVzLlBPV0VSID0ge1xuICAgIHVuaXQ6IFVOSVRTLmhwLFxuICAgIHByZWZpeDogUFJFRklYRVMuTk9ORVsnJ11cbiAgfTtcbiAgVU5JVF9TWVNURU1TLnVzLlBSRVNTVVJFID0ge1xuICAgIHVuaXQ6IFVOSVRTLnBzaSxcbiAgICBwcmVmaXg6IFBSRUZJWEVTLk5PTkVbJyddXG4gIH07IC8vIEFkZCBhZGRpdGlvbmFsIHVuaXQgc3lzdGVtcyBoZXJlLlxuICAvLyBDaG9vc2UgYSB1bml0IHN5c3RlbSB0byBzZWVkIHRoZSBhdXRvIHVuaXQgc3lzdGVtLlxuXG4gIFVOSVRfU1lTVEVNUy5hdXRvID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShVTklUX1NZU1RFTVMuc2kpKTsgLy8gU2V0IHRoZSBjdXJyZW50IHVuaXQgc3lzdGVtXG5cbiAgdmFyIGN1cnJlbnRVbml0U3lzdGVtID0gVU5JVF9TWVNURU1TLmF1dG87XG4gIC8qKlxuICAgKiBTZXQgYSB1bml0IHN5c3RlbSBmb3IgZm9ybWF0dGluZyBkZXJpdmVkIHVuaXRzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW25hbWVdIFRoZSBuYW1lIG9mIHRoZSB1bml0IHN5c3RlbS5cbiAgICovXG5cbiAgVW5pdC5zZXRVbml0U3lzdGVtID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKFVOSVRfU1lTVEVNUywgbmFtZSkpIHtcbiAgICAgIGN1cnJlbnRVbml0U3lzdGVtID0gVU5JVF9TWVNURU1TW25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuaXQgc3lzdGVtICcgKyBuYW1lICsgJyBkb2VzIG5vdCBleGlzdC4gQ2hvaWNlcyBhcmU6ICcgKyBPYmplY3Qua2V5cyhVTklUX1NZU1RFTVMpLmpvaW4oJywgJykpO1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIFJldHVybiB0aGUgY3VycmVudCB1bml0IHN5c3RlbS5cbiAgICogQHJldHVybiB7c3RyaW5nfSBUaGUgY3VycmVudCB1bml0IHN5c3RlbS5cbiAgICovXG5cblxuICBVbml0LmdldFVuaXRTeXN0ZW0gPSBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgX2tleSBpbiBVTklUX1NZU1RFTVMpIHtcbiAgICAgIGlmIChVTklUX1NZU1RFTVNbX2tleV0gPT09IGN1cnJlbnRVbml0U3lzdGVtKSB7XG4gICAgICAgIHJldHVybiBfa2V5O1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIENvbnZlcnRlcnMgdG8gY29udmVydCBmcm9tIG51bWJlciB0byBhbiBvdGhlciBudW1lcmljIHR5cGUgbGlrZSBCaWdOdW1iZXJcbiAgICogb3IgRnJhY3Rpb25cbiAgICovXG5cblxuICBVbml0LnR5cGVDb252ZXJ0ZXJzID0ge1xuICAgIEJpZ051bWJlcjogZnVuY3Rpb24gQmlnTnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0JpZ051bWJlcih4ICsgJycpOyAvLyBzdHJpbmdpZnkgdG8gcHJldmVudCBjb25zdHJ1Y3RvciBlcnJvclxuICAgIH0sXG4gICAgRnJhY3Rpb246IGZ1bmN0aW9uIEZyYWN0aW9uKHgpIHtcbiAgICAgIHJldHVybiBuZXcgX0ZyYWN0aW9uKHgpO1xuICAgIH0sXG4gICAgQ29tcGxleDogZnVuY3Rpb24gQ29tcGxleCh4KSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9LFxuICAgIG51bWJlcjogZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgICAgIHJldHVybiB4O1xuICAgIH1cbiAgfTtcbiAgLyoqXG4gICAqIFJldHJpZXZlIHRoZSByaWdodCBjb252ZXJ0b3IgZnVuY3Rpb24gY29ycmVzcG9uZGluZyB3aXRoIHRoZSB0eXBlXG4gICAqIG9mIHByb3ZpZGVkIGV4YW1wbGVWYWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgICBBIHN0cmluZyAnbnVtYmVyJywgJ0JpZ051bWJlcicsIG9yICdGcmFjdGlvbidcbiAgICogICAgICAgICAgICAgICAgICAgICAgICBJbiBjYXNlIG9mIGFuIHVua25vd24gdHlwZSxcbiAgICogQHJldHVybiB7RnVuY3Rpb259XG4gICAqL1xuXG4gIFVuaXQuX2dldE51bWJlckNvbnZlcnRlciA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgaWYgKCFVbml0LnR5cGVDb252ZXJ0ZXJzW3R5cGVdKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbnN1cHBvcnRlZCB0eXBlIFwiJyArIHR5cGUgKyAnXCInKTtcbiAgICB9XG5cbiAgICByZXR1cm4gVW5pdC50eXBlQ29udmVydGVyc1t0eXBlXTtcbiAgfTsgLy8gQWRkIGRpbWVuc2lvbnMgdG8gZWFjaCBidWlsdC1pbiB1bml0XG5cblxuICBmb3IgKHZhciBfa2V5MiBpbiBVTklUUykge1xuICAgIHZhciB1bml0ID0gVU5JVFNbX2tleTJdO1xuICAgIHVuaXQuZGltZW5zaW9ucyA9IHVuaXQuYmFzZS5kaW1lbnNpb25zO1xuICB9IC8vIENyZWF0ZSBhbGlhc2VzXG5cblxuICBmb3IgKHZhciBfbmFtZTIgaW4gQUxJQVNFUykge1xuICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoQUxJQVNFUywgX25hbWUyKSkge1xuICAgICAgdmFyIF91bml0MiA9IFVOSVRTW0FMSUFTRVNbX25hbWUyXV07XG4gICAgICB2YXIgYWxpYXMgPSB7fTtcblxuICAgICAgZm9yICh2YXIgX2tleTMgaW4gX3VuaXQyKSB7XG4gICAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoX3VuaXQyLCBfa2V5MykpIHtcbiAgICAgICAgICBhbGlhc1tfa2V5M10gPSBfdW5pdDJbX2tleTNdO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGFsaWFzLm5hbWUgPSBfbmFtZTI7XG4gICAgICBVTklUU1tfbmFtZTJdID0gYWxpYXM7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gYXNzZXJ0VW5pdE5hbWVJc1ZhbGlkKG5hbWUpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBfYyA9IG5hbWUuY2hhckF0KGkpO1xuXG4gICAgICB2YXIgaXNWYWxpZEFscGhhID0gZnVuY3Rpb24gaXNWYWxpZEFscGhhKHApIHtcbiAgICAgICAgcmV0dXJuIC9eW2EtekEtWl0kLy50ZXN0KHApO1xuICAgICAgfTtcblxuICAgICAgdmFyIF9pc0RpZ2l0ID0gZnVuY3Rpb24gX2lzRGlnaXQoYykge1xuICAgICAgICByZXR1cm4gYyA+PSAnMCcgJiYgYyA8PSAnOSc7XG4gICAgICB9O1xuXG4gICAgICBpZiAoaSA9PT0gMCAmJiAhaXNWYWxpZEFscGhhKF9jKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdW5pdCBuYW1lIChtdXN0IGJlZ2luIHdpdGggYWxwaGEgY2hhcmFjdGVyKTogXCInICsgbmFtZSArICdcIicpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaSA+IDAgJiYgIShpc1ZhbGlkQWxwaGEoX2MpIHx8IF9pc0RpZ2l0KF9jKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHVuaXQgbmFtZSAob25seSBhbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhcmUgYWxsb3dlZCk6IFwiJyArIG5hbWUgKyAnXCInKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFdyYXBwZXIgYXJvdW5kIGNyZWF0ZVVuaXRTaW5nbGUuXG4gICAqIEV4YW1wbGU6XG4gICAqICBjcmVhdGVVbml0KHtcbiAgICogICAgZm9vOiB7IH0sXG4gICAqICAgIGJhcjoge1xuICAgKiAgICAgIGRlZmluaXRpb246ICdrZy9mb28nLFxuICAgKiAgICAgIGFsaWFzZXM6IFsnYmEnLCAnYmFycicsICdiYXJzJ10sXG4gICAqICAgICAgb2Zmc2V0OiAyMDBcbiAgICogICAgfSxcbiAgICogICAgYmF6OiAnNCBiYXInXG4gICAqICB9LFxuICAgKiAge1xuICAgKiAgICBvdmVycmlkZTogdHJ1ZVxuICAgKiAgfSlcbiAgICogQHBhcmFtIHtvYmplY3R9IG9iaiAgICAgIE9iamVjdCBtYXAuIEVhY2gga2V5IGJlY29tZXMgYSB1bml0IHdoaWNoIGlzIGRlZmluZWQgYnkgaXRzIHZhbHVlLlxuICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICAgKi9cblxuXG4gIFVuaXQuY3JlYXRlVW5pdCA9IGZ1bmN0aW9uIChvYmosIG9wdGlvbnMpIHtcbiAgICBpZiAoX3R5cGVvZihvYmopICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImNyZWF0ZVVuaXQgZXhwZWN0cyBmaXJzdCBwYXJhbWV0ZXIgdG8gYmUgb2YgdHlwZSAnT2JqZWN0J1wiKTtcbiAgICB9IC8vIFJlbW92ZSBhbGwgdW5pdHMgYW5kIGFsaWFzZXMgd2UgYXJlIG92ZXJyaWRpbmdcblxuXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5vdmVycmlkZSkge1xuICAgICAgZm9yICh2YXIgX2tleTQgaW4gb2JqKSB7XG4gICAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkob2JqLCBfa2V5NCkpIHtcbiAgICAgICAgICBVbml0LmRlbGV0ZVVuaXQoX2tleTQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9ialtfa2V5NF0uYWxpYXNlcykge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqW19rZXk0XS5hbGlhc2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBVbml0LmRlbGV0ZVVuaXQob2JqW19rZXk0XS5hbGlhc2VzW2ldKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIFRPRE86IHRyYXZlcnNlIG11bHRpcGxlIHRpbWVzIHVudGlsIGFsbCB1bml0cyBoYXZlIGJlZW4gYWRkZWRcblxuXG4gICAgdmFyIGxhc3RVbml0O1xuXG4gICAgZm9yICh2YXIgX2tleTUgaW4gb2JqKSB7XG4gICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG9iaiwgX2tleTUpKSB7XG4gICAgICAgIGxhc3RVbml0ID0gVW5pdC5jcmVhdGVVbml0U2luZ2xlKF9rZXk1LCBvYmpbX2tleTVdKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbGFzdFVuaXQ7XG4gIH07XG4gIC8qKlxuICAgKiBDcmVhdGUgYSB1c2VyLWRlZmluZWQgdW5pdCBhbmQgcmVnaXN0ZXIgaXQgd2l0aCB0aGUgVW5pdCB0eXBlLlxuICAgKiBFeGFtcGxlOlxuICAgKiAgY3JlYXRlVW5pdFNpbmdsZSgna25vdCcsICcwLjUxNDQ0NDQ0NCBtL3MnKVxuICAgKiAgY3JlYXRlVW5pdFNpbmdsZSgnYWNyZScsIG5ldyBVbml0KDQzNTYwLCAnZnReMicpKVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgICAgIFRoZSBuYW1lIG9mIHRoZSBuZXcgdW5pdC4gTXVzdCBiZSB1bmlxdWUuIEV4YW1wbGU6ICdrbm90J1xuICAgKiBAcGFyYW0ge3N0cmluZywgVW5pdCwgT2JqZWN0fSBkZWZpbml0aW9uICAgICAgRGVmaW5pdGlvbiBvZiB0aGUgdW5pdCBpbiB0ZXJtc1xuICAgKiBvZiBleGlzdGluZyB1bml0cy4gRm9yIGV4YW1wbGUsICcwLjUxNDQ0NDQ0NCBtIC8gcycuIENhbiBiZSBhIFVuaXQsIGEgc3RyaW5nLFxuICAgKiBvciBhbiBPYmplY3QuIElmIGFuIE9iamVjdCwgbWF5IGhhdmUgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgKiAgIC0gZGVmaW5pdGlvbiB7c3RyaW5nfFVuaXR9IFRoZSBkZWZpbml0aW9uIG9mIHRoaXMgdW5pdC5cbiAgICogICAtIHByZWZpeGVzIHtzdHJpbmd9IFwibm9uZVwiLCBcInNob3J0XCIsIFwibG9uZ1wiLCBcImJpbmFyeV9zaG9ydFwiLCBvciBcImJpbmFyeV9sb25nXCIuXG4gICAqICAgICBUaGUgZGVmYXVsdCBpcyBcIm5vbmVcIi5cbiAgICogICAtIGFsaWFzZXMge0FycmF5fSBBcnJheSBvZiBzdHJpbmdzLiBFeGFtcGxlOiBbJ2tub3RzJywgJ2t0JywgJ2t0cyddXG4gICAqICAgLSBvZmZzZXQge051bWVyaWN9IEFuIG9mZnNldCB0byBhcHBseSB3aGVuIGNvbnZlcnRpbmcgZnJvbSB0aGUgdW5pdC4gRm9yXG4gICAqICAgICBleGFtcGxlLCB0aGUgb2Zmc2V0IGZvciBjZWxzaXVzIGlzIDI3My4xNSBhbmQgdGhlIG9mZnNldCBmb3IgZmFyaGVuaGVpdFxuICAgKiAgICAgaXMgNDU5LjY3LiBEZWZhdWx0IGlzIDAuXG4gICAqICAgLSBiYXNlTmFtZSB7c3RyaW5nfSBJZiB0aGUgdW5pdCdzIGRpbWVuc2lvbiBkb2VzIG5vdCBtYXRjaCB0aGF0IG9mIGFueSBvdGhlclxuICAgKiAgICAgYmFzZSB1bml0LCB0aGUgbmFtZSBvZiB0aGUgbmV3bHkgY3JlYXRlIGJhc2UgdW5pdC4gT3RoZXJ3aXNlLCB0aGlzIHByb3BlcnR5XG4gICAqICAgICBoYXMgbm8gZWZmZWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAgIChvcHRpb25hbCkgQW4gb2JqZWN0IGNvbnRhaW5pbmcgYW55IG9mIHRoZSBmb2xsb3dpbmdcbiAgICogcHJvcGVydGllczpcbiAgICogICAtIG92ZXJyaWRlIHtib29sZWFufSBXaGV0aGVyIHRoaXMgdW5pdCBzaG91bGQgYmUgYWxsb3dlZCB0byBvdmVycmlkZSBleGlzdGluZ1xuICAgKiAgICAgdW5pdHMuXG4gICAqXG4gICAqIEByZXR1cm4ge1VuaXR9XG4gICAqL1xuXG5cbiAgVW5pdC5jcmVhdGVVbml0U2luZ2xlID0gZnVuY3Rpb24gKG5hbWUsIG9iaiwgb3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJyB8fCBvYmogPT09IG51bGwpIHtcbiAgICAgIG9iaiA9IHt9O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJjcmVhdGVVbml0U2luZ2xlIGV4cGVjdHMgZmlyc3QgcGFyYW1ldGVyIHRvIGJlIG9mIHR5cGUgJ3N0cmluZydcIik7XG4gICAgfSAvLyBDaGVjayBjb2xsaXNpb25zIHdpdGggZXhpc3RpbmcgdW5pdHNcblxuXG4gICAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShVTklUUywgbmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNyZWF0ZSB1bml0IFwiJyArIG5hbWUgKyAnXCI6IGEgdW5pdCB3aXRoIHRoYXQgbmFtZSBhbHJlYWR5IGV4aXN0cycpO1xuICAgIH0gLy8gVE9ETzogVmFsaWRhdGUgbmFtZSBmb3IgY29sbGlzaW9ucyB3aXRoIG90aGVyIGJ1aWx0LWluIGZ1bmN0aW9ucyAobGlrZSBhYnMgb3IgY29zLCBmb3IgZXhhbXBsZSksIGFuZCBmb3IgYWNjZXB0YWJsZSB2YXJpYWJsZSBuYW1lcy4gRm9yIGV4YW1wbGUsICc0MicgaXMgcHJvYmFibHkgbm90IGEgdmFsaWQgdW5pdC4gTm9yIGlzICclJywgc2luY2UgaXQgaXMgYWxzbyBhbiBvcGVyYXRvci5cblxuXG4gICAgYXNzZXJ0VW5pdE5hbWVJc1ZhbGlkKG5hbWUpO1xuICAgIHZhciBkZWZVbml0ID0gbnVsbDsgLy8gVGhlIFVuaXQgZnJvbSB3aGljaCB0aGUgbmV3IHVuaXQgd2lsbCBiZSBjcmVhdGVkLlxuXG4gICAgdmFyIGFsaWFzZXMgPSBbXTtcbiAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICB2YXIgZGVmaW5pdGlvbjtcbiAgICB2YXIgcHJlZml4ZXM7XG4gICAgdmFyIGJhc2VOYW1lO1xuXG4gICAgaWYgKG9iaiAmJiBvYmoudHlwZSA9PT0gJ1VuaXQnKSB7XG4gICAgICBkZWZVbml0ID0gb2JqLmNsb25lKCk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKG9iaiAhPT0gJycpIHtcbiAgICAgICAgZGVmaW5pdGlvbiA9IG9iajtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKF90eXBlb2Yob2JqKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGRlZmluaXRpb24gPSBvYmouZGVmaW5pdGlvbjtcbiAgICAgIHByZWZpeGVzID0gb2JqLnByZWZpeGVzO1xuICAgICAgb2Zmc2V0ID0gb2JqLm9mZnNldDtcbiAgICAgIGJhc2VOYW1lID0gb2JqLmJhc2VOYW1lO1xuXG4gICAgICBpZiAob2JqLmFsaWFzZXMpIHtcbiAgICAgICAgYWxpYXNlcyA9IG9iai5hbGlhc2VzLnZhbHVlT2YoKTsgLy8gYWxpYXNlcyBjb3VsZCBiZSBhIE1hdHJpeCwgc28gY29udmVydCB0byBBcnJheVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY3JlYXRlIHVuaXQgXCInICsgbmFtZSArICdcIiBmcm9tIFwiJyArIG9iai50b1N0cmluZygpICsgJ1wiOiBleHBlY3RpbmcgXCJzdHJpbmdcIiBvciBcIlVuaXRcIiBvciBcIk9iamVjdFwiJyk7XG4gICAgfVxuXG4gICAgaWYgKGFsaWFzZXMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxpYXNlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKFVOSVRTLCBhbGlhc2VzW2ldKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQ2Fubm90IGNyZWF0ZSBhbGlhcyBcIicgKyBhbGlhc2VzW2ldICsgJ1wiOiBhIHVuaXQgd2l0aCB0aGF0IG5hbWUgYWxyZWFkeSBleGlzdHMnKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkZWZpbml0aW9uICYmIHR5cGVvZiBkZWZpbml0aW9uID09PSAnc3RyaW5nJyAmJiAhZGVmVW5pdCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZGVmVW5pdCA9IFVuaXQucGFyc2UoZGVmaW5pdGlvbiwge1xuICAgICAgICAgIGFsbG93Tm9Vbml0czogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgIGV4Lm1lc3NhZ2UgPSAnQ291bGQgbm90IGNyZWF0ZSB1bml0IFwiJyArIG5hbWUgKyAnXCIgZnJvbSBcIicgKyBkZWZpbml0aW9uICsgJ1wiOiAnICsgZXgubWVzc2FnZTtcbiAgICAgICAgdGhyb3cgZXg7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChkZWZpbml0aW9uICYmIGRlZmluaXRpb24udHlwZSA9PT0gJ1VuaXQnKSB7XG4gICAgICBkZWZVbml0ID0gZGVmaW5pdGlvbi5jbG9uZSgpO1xuICAgIH1cblxuICAgIGFsaWFzZXMgPSBhbGlhc2VzIHx8IFtdO1xuICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuXG4gICAgaWYgKHByZWZpeGVzICYmIHByZWZpeGVzLnRvVXBwZXJDYXNlKSB7XG4gICAgICBwcmVmaXhlcyA9IFBSRUZJWEVTW3ByZWZpeGVzLnRvVXBwZXJDYXNlKCldIHx8IFBSRUZJWEVTLk5PTkU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByZWZpeGVzID0gUFJFRklYRVMuTk9ORTtcbiAgICB9IC8vIElmIGRlZlVuaXQgaXMgbnVsbCwgaXQgaXMgYmVjYXVzZSB0aGUgdXNlciBkaWQgbm90XG4gICAgLy8gc3BlY2lmeSBhIGRlZmludGlvbi4gU28gY3JlYXRlIGEgbmV3IGJhc2UgZGltZW5zaW9uLlxuXG5cbiAgICB2YXIgbmV3VW5pdCA9IHt9O1xuXG4gICAgaWYgKCFkZWZVbml0KSB7XG4gICAgICAvLyBBZGQgYSBuZXcgYmFzZSBkaW1lbnNpb25cbiAgICAgIGJhc2VOYW1lID0gYmFzZU5hbWUgfHwgbmFtZSArICdfU1RVRkYnOyAvLyBmb28gLS0+IGZvb19TVFVGRiwgb3IgdGhlIGVzc2VuY2Ugb2YgZm9vXG5cbiAgICAgIGlmIChCQVNFX0RJTUVOU0lPTlMuaW5kZXhPZihiYXNlTmFtZSkgPj0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjcmVhdGUgbmV3IGJhc2UgdW5pdCBcIicgKyBuYW1lICsgJ1wiOiBhIGJhc2UgdW5pdCB3aXRoIHRoYXQgbmFtZSBhbHJlYWR5IGV4aXN0cyAoYW5kIGNhbm5vdCBiZSBvdmVycmlkZGVuKScpO1xuICAgICAgfVxuXG4gICAgICBCQVNFX0RJTUVOU0lPTlMucHVzaChiYXNlTmFtZSk7IC8vIFB1c2ggMCBvbnRvIGV4aXN0aW5nIGJhc2UgdW5pdHNcblxuICAgICAgZm9yICh2YXIgYiBpbiBCQVNFX1VOSVRTKSB7XG4gICAgICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoQkFTRV9VTklUUywgYikpIHtcbiAgICAgICAgICBCQVNFX1VOSVRTW2JdLmRpbWVuc2lvbnNbQkFTRV9ESU1FTlNJT05TLmxlbmd0aCAtIDFdID0gMDtcbiAgICAgICAgfVxuICAgICAgfSAvLyBBZGQgdGhlIG5ldyBiYXNlIHVuaXRcblxuXG4gICAgICB2YXIgbmV3QmFzZVVuaXQgPSB7XG4gICAgICAgIGRpbWVuc2lvbnM6IFtdXG4gICAgICB9O1xuXG4gICAgICBmb3IgKHZhciBfaTYgPSAwOyBfaTYgPCBCQVNFX0RJTUVOU0lPTlMubGVuZ3RoOyBfaTYrKykge1xuICAgICAgICBuZXdCYXNlVW5pdC5kaW1lbnNpb25zW19pNl0gPSAwO1xuICAgICAgfVxuXG4gICAgICBuZXdCYXNlVW5pdC5kaW1lbnNpb25zW0JBU0VfRElNRU5TSU9OUy5sZW5ndGggLSAxXSA9IDE7XG4gICAgICBuZXdCYXNlVW5pdC5rZXkgPSBiYXNlTmFtZTtcbiAgICAgIEJBU0VfVU5JVFNbYmFzZU5hbWVdID0gbmV3QmFzZVVuaXQ7XG4gICAgICBuZXdVbml0ID0ge1xuICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICB2YWx1ZTogMSxcbiAgICAgICAgZGltZW5zaW9uczogQkFTRV9VTklUU1tiYXNlTmFtZV0uZGltZW5zaW9ucy5zbGljZSgwKSxcbiAgICAgICAgcHJlZml4ZXM6IHByZWZpeGVzLFxuICAgICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgICAgYmFzZTogQkFTRV9VTklUU1tiYXNlTmFtZV1cbiAgICAgIH07XG4gICAgICBjdXJyZW50VW5pdFN5c3RlbVtiYXNlTmFtZV0gPSB7XG4gICAgICAgIHVuaXQ6IG5ld1VuaXQsXG4gICAgICAgIHByZWZpeDogUFJFRklYRVMuTk9ORVsnJ11cbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1VuaXQgPSB7XG4gICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgIHZhbHVlOiBkZWZVbml0LnZhbHVlLFxuICAgICAgICBkaW1lbnNpb25zOiBkZWZVbml0LmRpbWVuc2lvbnMuc2xpY2UoMCksXG4gICAgICAgIHByZWZpeGVzOiBwcmVmaXhlcyxcbiAgICAgICAgb2Zmc2V0OiBvZmZzZXRcbiAgICAgIH07IC8vIENyZWF0ZSBhIG5ldyBiYXNlIGlmIG5vIG1hdGNoaW5nIGJhc2UgZXhpc3RzXG5cbiAgICAgIHZhciBhbnlNYXRjaCA9IGZhbHNlO1xuXG4gICAgICBmb3IgKHZhciBfaTcgaW4gQkFTRV9VTklUUykge1xuICAgICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKEJBU0VfVU5JVFMsIF9pNykpIHtcbiAgICAgICAgICB2YXIgbWF0Y2ggPSB0cnVlO1xuXG4gICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBCQVNFX0RJTUVOU0lPTlMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChNYXRoLmFicygobmV3VW5pdC5kaW1lbnNpb25zW2pdIHx8IDApIC0gKEJBU0VfVU5JVFNbX2k3XS5kaW1lbnNpb25zW2pdIHx8IDApKSA+IDFlLTEyKSB7XG4gICAgICAgICAgICAgIG1hdGNoID0gZmFsc2U7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgYW55TWF0Y2ggPSB0cnVlO1xuICAgICAgICAgICAgbmV3VW5pdC5iYXNlID0gQkFTRV9VTklUU1tfaTddO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICghYW55TWF0Y2gpIHtcbiAgICAgICAgYmFzZU5hbWUgPSBiYXNlTmFtZSB8fCBuYW1lICsgJ19TVFVGRic7IC8vIGZvbyAtLT4gZm9vX1NUVUZGLCBvciB0aGUgZXNzZW5jZSBvZiBmb29cbiAgICAgICAgLy8gQWRkIHRoZSBuZXcgYmFzZSB1bml0XG5cbiAgICAgICAgdmFyIF9uZXdCYXNlVW5pdCA9IHtcbiAgICAgICAgICBkaW1lbnNpb25zOiBkZWZVbml0LmRpbWVuc2lvbnMuc2xpY2UoMClcbiAgICAgICAgfTtcbiAgICAgICAgX25ld0Jhc2VVbml0LmtleSA9IGJhc2VOYW1lO1xuICAgICAgICBCQVNFX1VOSVRTW2Jhc2VOYW1lXSA9IF9uZXdCYXNlVW5pdDtcbiAgICAgICAgY3VycmVudFVuaXRTeXN0ZW1bYmFzZU5hbWVdID0ge1xuICAgICAgICAgIHVuaXQ6IG5ld1VuaXQsXG4gICAgICAgICAgcHJlZml4OiBQUkVGSVhFUy5OT05FWycnXVxuICAgICAgICB9O1xuICAgICAgICBuZXdVbml0LmJhc2UgPSBCQVNFX1VOSVRTW2Jhc2VOYW1lXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBVbml0LlVOSVRTW25hbWVdID0gbmV3VW5pdDtcblxuICAgIGZvciAodmFyIF9pOCA9IDA7IF9pOCA8IGFsaWFzZXMubGVuZ3RoOyBfaTgrKykge1xuICAgICAgdmFyIGFsaWFzTmFtZSA9IGFsaWFzZXNbX2k4XTtcbiAgICAgIHZhciBfYWxpYXMgPSB7fTtcblxuICAgICAgZm9yICh2YXIgX2tleTYgaW4gbmV3VW5pdCkge1xuICAgICAgICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKG5ld1VuaXQsIF9rZXk2KSkge1xuICAgICAgICAgIF9hbGlhc1tfa2V5Nl0gPSBuZXdVbml0W19rZXk2XTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfYWxpYXMubmFtZSA9IGFsaWFzTmFtZTtcbiAgICAgIFVuaXQuVU5JVFNbYWxpYXNOYW1lXSA9IF9hbGlhcztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFVuaXQobnVsbCwgbmFtZSk7XG4gIH07XG5cbiAgVW5pdC5kZWxldGVVbml0ID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBkZWxldGUgVW5pdC5VTklUU1tuYW1lXTtcbiAgfTsgLy8gZXhwb3NlIGFycmF5cyB3aXRoIHByZWZpeGVzLCBkaW1lbnNpb25zLCB1bml0cywgc3lzdGVtc1xuXG5cbiAgVW5pdC5QUkVGSVhFUyA9IFBSRUZJWEVTO1xuICBVbml0LkJBU0VfRElNRU5TSU9OUyA9IEJBU0VfRElNRU5TSU9OUztcbiAgVW5pdC5CQVNFX1VOSVRTID0gQkFTRV9VTklUUztcbiAgVW5pdC5VTklUX1NZU1RFTVMgPSBVTklUX1NZU1RFTVM7XG4gIFVuaXQuVU5JVFMgPSBVTklUUztcbiAgcmV0dXJuIFVuaXQ7XG59LCB7XG4gIGlzQ2xhc3M6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVVbml0Q2xhc3MgPSBjcmVhdGVVbml0Q2xhc3M7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUNyZWF0ZVVuaXQgPSB2b2lkIDA7XG5cbnZhciBfZmFjdG9yeSA9IHJlcXVpcmUoXCIuLi8uLi8uLi91dGlscy9mYWN0b3J5XCIpO1xuXG52YXIgbmFtZSA9ICdjcmVhdGVVbml0JztcbnZhciBkZXBlbmRlbmNpZXMgPSBbJ3R5cGVkJywgJ1VuaXQnXTtcbnZhciBjcmVhdGVDcmVhdGVVbml0ID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIFVuaXQgPSBfcmVmLlVuaXQ7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHVzZXItZGVmaW5lZCB1bml0IGFuZCByZWdpc3RlciBpdCB3aXRoIHRoZSBVbml0IHR5cGUuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIG1hdGguY3JlYXRlVW5pdCh7XG4gICAqICAgICAgIGJhc2VVbml0MToge1xuICAgKiAgICAgICAgIGFsaWFzZXM6IFtzdHJpbmcsIC4uLl1cbiAgICogICAgICAgICBwcmVmaXhlczogb2JqZWN0XG4gICAqICAgICAgIH0sXG4gICAqICAgICAgIHVuaXQyOiB7XG4gICAqICAgICAgICAgZGVmaW5pdGlvbjogc3RyaW5nLFxuICAgKiAgICAgICAgIGFsaWFzZXM6IFtzdHJpbmcsIC4uLl1cbiAgICogICAgICAgICBwcmVmaXhlczogb2JqZWN0LFxuICAgKiAgICAgICAgIG9mZnNldDogbnVtYmVyXG4gICAqICAgICAgIH0sXG4gICAqICAgICAgIHVuaXQzOiBzdHJpbmcgICAgLy8gU2hvcnRjdXRcbiAgICogICAgIH0pXG4gICAqXG4gICAqICAgICAvLyBBbm90aGVyIHNob3J0Y3V0OlxuICAgKiAgICAgbWF0aC5jcmVhdGVVbml0KHN0cmluZywgdW5pdCA6IHN0cmluZywgW29iamVjdF0pXG4gICAqXG4gICAqIEV4YW1wbGVzOlxuICAgKlxuICAgKiAgICAgbWF0aC5jcmVhdGVVbml0KCdmb28nKVxuICAgKiAgICAgbWF0aC5jcmVhdGVVbml0KCdrbm90Jywge2RlZmluaXRpb246ICcwLjUxNDQ0NDQ0NCBtL3MnLCBhbGlhc2VzOiBbJ2tub3RzJywgJ2t0JywgJ2t0cyddfSlcbiAgICogICAgIG1hdGguY3JlYXRlVW5pdCgnbXBoJywgJzEgbWlsZS9ob3VyJylcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgICAgICBUaGUgbmFtZSBvZiB0aGUgbmV3IHVuaXQuIE11c3QgYmUgdW5pcXVlLiBFeGFtcGxlOiAna25vdCdcbiAgICogQHBhcmFtIHtzdHJpbmcsIFVuaXR9IGRlZmluaXRpb24gICAgICBEZWZpbml0aW9uIG9mIHRoZSB1bml0IGluIHRlcm1zIG9mIGV4aXN0aW5nIHVuaXRzLiBGb3IgZXhhbXBsZSwgJzAuNTE0NDQ0NDQ0IG0gLyBzJy5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgICAob3B0aW9uYWwpIEFuIG9iamVjdCBjb250YWluaW5nIGFueSBvZiB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAqICAgICAtIGBwcmVmaXhlcyB7c3RyaW5nfWAgXCJub25lXCIsIFwic2hvcnRcIiwgXCJsb25nXCIsIFwiYmluYXJ5X3Nob3J0XCIsIG9yIFwiYmluYXJ5X2xvbmdcIi4gVGhlIGRlZmF1bHQgaXMgXCJub25lXCIuXG4gICAqICAgICAtIGBhbGlhc2VzIHtBcnJheX1gIEFycmF5IG9mIHN0cmluZ3MuIEV4YW1wbGU6IFsna25vdHMnLCAna3QnLCAna3RzJ11cbiAgICogICAgIC0gYG9mZnNldCB7TnVtZXJpY31gIEFuIG9mZnNldCB0byBhcHBseSB3aGVuIGNvbnZlcnRpbmcgZnJvbSB0aGUgdW5pdC4gRm9yIGV4YW1wbGUsIHRoZSBvZmZzZXQgZm9yIGNlbHNpdXMgaXMgMjczLjE1LiBEZWZhdWx0IGlzIDAuXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgdW5pdFxuICAgKlxuICAgKiBAcmV0dXJuIHtVbml0fSBUaGUgbmV3IHVuaXRcbiAgICovXG4gIHJldHVybiB0eXBlZChuYW1lLCB7XG4gICAgLy8gR2VuZXJhbCBmdW5jdGlvbiBzaWduYXR1cmUuIEZpcnN0IHBhcmFtZXRlciBpcyBhbiBvYmplY3Qgd2hlcmUgZWFjaCBwcm9wZXJ0eSBpcyB0aGUgZGVmaW5pdGlvbiBvZiBhIG5ldyB1bml0LiBUaGUgb2JqZWN0IGtleXMgYXJlIHRoZSB1bml0IG5hbWVzIGFuZCB0aGUgdmFsdWVzIGFyZSB0aGUgZGVmaW5pdGlvbnMuIFRoZSB2YWx1ZXMgY2FuIGJlIG9iamVjdHMsIHN0cmluZ3MsIG9yIFVuaXRzLiBJZiBhIHByb3BlcnR5IGlzIGFuIGVtcHR5IG9iamVjdCBvciBhbiBlbXB0eSBzdHJpbmcsIGEgbmV3IGJhc2UgdW5pdCBpcyBjcmVhdGVkLiBUaGUgc2Vjb25kIHBhcmFtZXRlciBpcyB0aGUgb3B0aW9ucy5cbiAgICAnT2JqZWN0LCBPYmplY3QnOiBmdW5jdGlvbiBPYmplY3RPYmplY3Qob2JqLCBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gVW5pdC5jcmVhdGVVbml0KG9iaiwgb3B0aW9ucyk7XG4gICAgfSxcbiAgICAvLyBTYW1lIGFzIGFib3ZlIGJ1dCB3aXRob3V0IHRoZSBvcHRpb25zLlxuICAgIE9iamVjdDogZnVuY3Rpb24gT2JqZWN0KG9iaikge1xuICAgICAgcmV0dXJuIFVuaXQuY3JlYXRlVW5pdChvYmosIHt9KTtcbiAgICB9LFxuICAgIC8vIFNob3J0Y3V0IG1ldGhvZCBmb3IgY3JlYXRpbmcgb25lIHVuaXQuXG4gICAgJ3N0cmluZywgVW5pdCB8IHN0cmluZyB8IE9iamVjdCwgT2JqZWN0JzogZnVuY3Rpb24gc3RyaW5nVW5pdFN0cmluZ09iamVjdE9iamVjdChuYW1lLCBkZWYsIG9wdGlvbnMpIHtcbiAgICAgIHZhciBvYmogPSB7fTtcbiAgICAgIG9ialtuYW1lXSA9IGRlZjtcbiAgICAgIHJldHVybiBVbml0LmNyZWF0ZVVuaXQob2JqLCBvcHRpb25zKTtcbiAgICB9LFxuICAgIC8vIFNhbWUgYXMgYWJvdmUgYnV0IHdpdGhvdXQgdGhlIG9wdGlvbnMuXG4gICAgJ3N0cmluZywgVW5pdCB8IHN0cmluZyB8IE9iamVjdCc6IGZ1bmN0aW9uIHN0cmluZ1VuaXRTdHJpbmdPYmplY3QobmFtZSwgZGVmKSB7XG4gICAgICB2YXIgb2JqID0ge307XG4gICAgICBvYmpbbmFtZV0gPSBkZWY7XG4gICAgICByZXR1cm4gVW5pdC5jcmVhdGVVbml0KG9iaiwge30pO1xuICAgIH0sXG4gICAgLy8gV2l0aG91dCBhIGRlZmluaXRpb24sIGNyZWF0ZXMgYSBiYXNlIHVuaXQuXG4gICAgc3RyaW5nOiBmdW5jdGlvbiBzdHJpbmcobmFtZSkge1xuICAgICAgdmFyIG9iaiA9IHt9O1xuICAgICAgb2JqW25hbWVdID0ge307XG4gICAgICByZXR1cm4gVW5pdC5jcmVhdGVVbml0KG9iaiwge30pO1xuICAgIH1cbiAgfSk7XG59KTtcbmV4cG9ydHMuY3JlYXRlQ3JlYXRlVW5pdCA9IGNyZWF0ZUNyZWF0ZVVuaXQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZVNwbGl0VW5pdCA9IHZvaWQgMDtcblxudmFyIF9mYWN0b3J5ID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2ZhY3RvcnlcIik7XG5cbnZhciBuYW1lID0gJ3NwbGl0VW5pdCc7XG52YXIgZGVwZW5kZW5jaWVzID0gWyd0eXBlZCddO1xudmFyIGNyZWF0ZVNwbGl0VW5pdCA9IC8qICNfX1BVUkVfXyAqLygwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciB0eXBlZCA9IF9yZWYudHlwZWQ7XG5cbiAgLyoqXG4gICAqIFNwbGl0IGEgdW5pdCBpbiBhbiBhcnJheSBvZiB1bml0cyB3aG9zZSBzdW0gaXMgZXF1YWwgdG8gdGhlIG9yaWdpbmFsIHVuaXQuXG4gICAqXG4gICAqIFN5bnRheDpcbiAgICpcbiAgICogICAgIHNwbGl0VW5pdCh1bml0OiBVbml0LCBwYXJ0czogQXJyYXkuPFVuaXQ+KVxuICAgKlxuICAgKiBFeGFtcGxlOlxuICAgKlxuICAgKiAgICAgbWF0aC5zcGxpdFVuaXQobmV3IFVuaXQoMSwgJ20nKSwgWydmZWV0JywgJ2luY2gnXSlcbiAgICogICAgIC8vIFsgMyBmZWV0LCAzLjM3MDA3ODc0MDE1NzUgaW5jaCBdXG4gICAqXG4gICAqIFNlZSBhbHNvOlxuICAgKlxuICAgKiAgICAgdW5pdFxuICAgKlxuICAgKiBAcGFyYW0ge0FycmF5fSBbcGFydHNdIEFuIGFycmF5IG9mIHN0cmluZ3Mgb3IgdmFsdWVsZXNzIHVuaXRzLlxuICAgKiBAcmV0dXJuIHtBcnJheX0gQW4gYXJyYXkgb2YgdW5pdHMuXG4gICAqL1xuICByZXR1cm4gdHlwZWQobmFtZSwge1xuICAgICdVbml0LCBBcnJheSc6IGZ1bmN0aW9uIFVuaXRBcnJheSh1bml0LCBwYXJ0cykge1xuICAgICAgcmV0dXJuIHVuaXQuc3BsaXRVbml0KHBhcnRzKTtcbiAgICB9XG4gIH0pO1xufSk7XG5leHBvcnRzLmNyZWF0ZVNwbGl0VW5pdCA9IGNyZWF0ZVNwbGl0VW5pdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY3JlYXRlVW5pdEZ1bmN0aW9uID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxudmFyIF9jb2xsZWN0aW9uID0gcmVxdWlyZShcIi4uLy4uLy4uL3V0aWxzL2NvbGxlY3Rpb25cIik7XG5cbnZhciBuYW1lID0gJ3VuaXQnO1xudmFyIGRlcGVuZGVuY2llcyA9IFsndHlwZWQnLCAnVW5pdCddOyAvLyBUaGlzIGZ1bmN0aW9uIGlzIG5hbWVkIGNyZWF0ZVVuaXRGdW5jdGlvbiB0byBwcmV2ZW50IGEgbmFtaW5nIGNvbmZsaWN0IHdpdGggY3JlYXRlVW5pdFxuXG52YXIgY3JlYXRlVW5pdEZ1bmN0aW9uID0gLyogI19fUFVSRV9fICovKDAsIF9mYWN0b3J5LmZhY3RvcnkpKG5hbWUsIGRlcGVuZGVuY2llcywgZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIHR5cGVkID0gX3JlZi50eXBlZCxcbiAgICAgIFVuaXQgPSBfcmVmLlVuaXQ7XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHVuaXQuIERlcGVuZGluZyBvbiB0aGUgcGFzc2VkIGFyZ3VtZW50cywgdGhlIGZ1bmN0aW9uXG4gICAqIHdpbGwgY3JlYXRlIGFuZCByZXR1cm4gYSBuZXcgbWF0aC5Vbml0IG9iamVjdC5cbiAgICogV2hlbiBhIG1hdHJpeCBpcyBwcm92aWRlZCwgYWxsIGVsZW1lbnRzIHdpbGwgYmUgY29udmVydGVkIHRvIHVuaXRzLlxuICAgKlxuICAgKiBTeW50YXg6XG4gICAqXG4gICAqICAgICBtYXRoLnVuaXQodW5pdCA6IHN0cmluZylcbiAgICogICAgIG1hdGgudW5pdCh2YWx1ZSA6IG51bWJlciwgdW5pdCA6IHN0cmluZylcbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgIGNvbnN0IGEgPSBtYXRoLnVuaXQoNSwgJ2NtJykgICAgLy8gcmV0dXJucyBVbml0IDUwIG1tXG4gICAqICAgIGNvbnN0IGIgPSBtYXRoLnVuaXQoJzIzIGtnJykgICAgLy8gcmV0dXJucyBVbml0IDIzIGtnXG4gICAqICAgIGEudG8oJ20nKSAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBVbml0IDAuMDUgbVxuICAgKlxuICAgKiBTZWUgYWxzbzpcbiAgICpcbiAgICogICAgYmlnbnVtYmVyLCBib29sZWFuLCBjb21wbGV4LCBpbmRleCwgbWF0cml4LCBudW1iZXIsIHN0cmluZywgY3JlYXRlVW5pdFxuICAgKlxuICAgKiBAcGFyYW0geyogfCBBcnJheSB8IE1hdHJpeH0gYXJncyAgIEEgbnVtYmVyIGFuZCB1bml0LlxuICAgKiBAcmV0dXJuIHtVbml0IHwgQXJyYXkgfCBNYXRyaXh9ICAgIFRoZSBjcmVhdGVkIHVuaXRcbiAgICovXG4gIHZhciB1bml0ID0gdHlwZWQobmFtZSwge1xuICAgIFVuaXQ6IGZ1bmN0aW9uIFVuaXQoeCkge1xuICAgICAgcmV0dXJuIHguY2xvbmUoKTtcbiAgICB9LFxuICAgIHN0cmluZzogZnVuY3Rpb24gc3RyaW5nKHgpIHtcbiAgICAgIGlmIChVbml0LmlzVmFsdWVsZXNzVW5pdCh4KSkge1xuICAgICAgICByZXR1cm4gbmV3IFVuaXQobnVsbCwgeCk7IC8vIGEgcHVyZSB1bml0XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBVbml0LnBhcnNlKHgsIHtcbiAgICAgICAgYWxsb3dOb1VuaXRzOiB0cnVlXG4gICAgICB9KTsgLy8gYSB1bml0IHdpdGggdmFsdWUsIGxpa2UgJzVjbSdcbiAgICB9LFxuICAgICdudW1iZXIgfCBCaWdOdW1iZXIgfCBGcmFjdGlvbiB8IENvbXBsZXgsIHN0cmluZyc6IGZ1bmN0aW9uIG51bWJlckJpZ051bWJlckZyYWN0aW9uQ29tcGxleFN0cmluZyh2YWx1ZSwgdW5pdCkge1xuICAgICAgcmV0dXJuIG5ldyBVbml0KHZhbHVlLCB1bml0KTtcbiAgICB9LFxuICAgICdBcnJheSB8IE1hdHJpeCc6IGZ1bmN0aW9uIEFycmF5TWF0cml4KHgpIHtcbiAgICAgIHJldHVybiAoMCwgX2NvbGxlY3Rpb24uZGVlcE1hcCkoeCwgdW5pdCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHVuaXQ7XG59KTtcbmV4cG9ydHMuY3JlYXRlVW5pdEZ1bmN0aW9uID0gY3JlYXRlVW5pdEZ1bmN0aW9uOyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5jcmVhdGVQbGFuY2tUZW1wZXJhdHVyZSA9IGV4cG9ydHMuY3JlYXRlUGxhbmNrQ2hhcmdlID0gZXhwb3J0cy5jcmVhdGVQbGFuY2tUaW1lID0gZXhwb3J0cy5jcmVhdGVQbGFuY2tNYXNzID0gZXhwb3J0cy5jcmVhdGVQbGFuY2tMZW5ndGggPSBleHBvcnRzLmNyZWF0ZUdyYXZpdHkgPSBleHBvcnRzLmNyZWF0ZU1vbGFyTWFzc0MxMiA9IGV4cG9ydHMuY3JlYXRlTW9sYXJNYXNzID0gZXhwb3J0cy5jcmVhdGVXaWVuRGlzcGxhY2VtZW50ID0gZXhwb3J0cy5jcmVhdGVTdGVmYW5Cb2x0em1hbm4gPSBleHBvcnRzLmNyZWF0ZVNlY29uZFJhZGlhdGlvbiA9IGV4cG9ydHMuY3JlYXRlU2Fja3VyVGV0cm9kZSA9IGV4cG9ydHMuY3JlYXRlTW9sYXJWb2x1bWUgPSBleHBvcnRzLmNyZWF0ZU1vbGFyUGxhbmNrQ29uc3RhbnQgPSBleHBvcnRzLmNyZWF0ZUdhc0NvbnN0YW50ID0gZXhwb3J0cy5jcmVhdGVMb3NjaG1pZHQgPSBleHBvcnRzLmNyZWF0ZUZpcnN0UmFkaWF0aW9uID0gZXhwb3J0cy5jcmVhdGVGYXJhZGF5ID0gZXhwb3J0cy5jcmVhdGVCb2x0em1hbm4gPSBleHBvcnRzLmNyZWF0ZUF2b2dhZHJvID0gZXhwb3J0cy5jcmVhdGVBdG9taWNNYXNzID0gZXhwb3J0cy5jcmVhdGVFZmltb3ZGYWN0b3IgPSBleHBvcnRzLmNyZWF0ZVdlYWtNaXhpbmdBbmdsZSA9IGV4cG9ydHMuY3JlYXRlVGhvbXNvbkNyb3NzU2VjdGlvbiA9IGV4cG9ydHMuY3JlYXRlUnlkYmVyZyA9IGV4cG9ydHMuY3JlYXRlUXVhbnR1bU9mQ2lyY3VsYXRpb24gPSBleHBvcnRzLmNyZWF0ZU5ldXRyb25NYXNzID0gZXhwb3J0cy5jcmVhdGVEZXV0ZXJvbk1hc3MgPSBleHBvcnRzLmNyZWF0ZVByb3Rvbk1hc3MgPSBleHBvcnRzLmNyZWF0ZUhhcnRyZWVFbmVyZ3kgPSBleHBvcnRzLmNyZWF0ZUZpbmVTdHJ1Y3R1cmUgPSBleHBvcnRzLmNyZWF0ZUZlcm1pQ291cGxpbmcgPSBleHBvcnRzLmNyZWF0ZUVsZWN0cm9uTWFzcyA9IGV4cG9ydHMuY3JlYXRlQ2xhc3NpY2FsRWxlY3Ryb25SYWRpdXMgPSBleHBvcnRzLmNyZWF0ZUJvaHJSYWRpdXMgPSBleHBvcnRzLmNyZWF0ZUpvc2VwaHNvbiA9IGV4cG9ydHMuY3JlYXRlS2xpdHppbmcgPSBleHBvcnRzLmNyZWF0ZU51Y2xlYXJNYWduZXRvbiA9IGV4cG9ydHMuY3JlYXRlTWFnbmV0aWNGbHV4UXVhbnR1bSA9IGV4cG9ydHMuY3JlYXRlSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bSA9IGV4cG9ydHMuY3JlYXRlQ29uZHVjdGFuY2VRdWFudHVtID0gZXhwb3J0cy5jcmVhdGVCb2hyTWFnbmV0b24gPSBleHBvcnRzLmNyZWF0ZUVsZW1lbnRhcnlDaGFyZ2UgPSBleHBvcnRzLmNyZWF0ZUNvdWxvbWIgPSBleHBvcnRzLmNyZWF0ZVZhY3V1bUltcGVkYW5jZSA9IGV4cG9ydHMuY3JlYXRlRWxlY3RyaWNDb25zdGFudCA9IGV4cG9ydHMuY3JlYXRlTWFnbmV0aWNDb25zdGFudCA9IGV4cG9ydHMuY3JlYXRlUmVkdWNlZFBsYW5ja0NvbnN0YW50ID0gZXhwb3J0cy5jcmVhdGVQbGFuY2tDb25zdGFudCA9IGV4cG9ydHMuY3JlYXRlR3Jhdml0YXRpb25Db25zdGFudCA9IGV4cG9ydHMuY3JlYXRlU3BlZWRPZkxpZ2h0ID0gdm9pZCAwO1xuXG52YXIgX2ZhY3RvcnkgPSByZXF1aXJlKFwiLi4vLi4vdXRpbHMvZmFjdG9yeVwiKTtcblxuLy8gU291cmNlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9QaHlzaWNhbF9jb25zdGFudFxuLy8gVW5pdmVyc2FsIGNvbnN0YW50c1xudmFyIGNyZWF0ZVNwZWVkT2ZMaWdodCA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdzcGVlZE9mTGlnaHQnLCAnMjk5NzkyNDU4JywgJ20gc14tMScpO1xuZXhwb3J0cy5jcmVhdGVTcGVlZE9mTGlnaHQgPSBjcmVhdGVTcGVlZE9mTGlnaHQ7XG52YXIgY3JlYXRlR3Jhdml0YXRpb25Db25zdGFudCA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdncmF2aXRhdGlvbkNvbnN0YW50JywgJzYuNjc0MzBlLTExJywgJ21eMyBrZ14tMSBzXi0yJyk7XG5leHBvcnRzLmNyZWF0ZUdyYXZpdGF0aW9uQ29uc3RhbnQgPSBjcmVhdGVHcmF2aXRhdGlvbkNvbnN0YW50O1xudmFyIGNyZWF0ZVBsYW5ja0NvbnN0YW50ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3BsYW5ja0NvbnN0YW50JywgJzYuNjI2MDcwMTVlLTM0JywgJ0ogcycpO1xuZXhwb3J0cy5jcmVhdGVQbGFuY2tDb25zdGFudCA9IGNyZWF0ZVBsYW5ja0NvbnN0YW50O1xudmFyIGNyZWF0ZVJlZHVjZWRQbGFuY2tDb25zdGFudCA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdyZWR1Y2VkUGxhbmNrQ29uc3RhbnQnLCAnMS4wNTQ1NzE4MTc2NDYxNTY1ZS0zNCcsICdKIHMnKTsgLy8gRWxlY3Ryb21hZ25ldGljIGNvbnN0YW50c1xuXG5leHBvcnRzLmNyZWF0ZVJlZHVjZWRQbGFuY2tDb25zdGFudCA9IGNyZWF0ZVJlZHVjZWRQbGFuY2tDb25zdGFudDtcbnZhciBjcmVhdGVNYWduZXRpY0NvbnN0YW50ID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ21hZ25ldGljQ29uc3RhbnQnLCAnMS4yNTY2MzcwNjIxMmUtNicsICdOIEFeLTInKTtcbmV4cG9ydHMuY3JlYXRlTWFnbmV0aWNDb25zdGFudCA9IGNyZWF0ZU1hZ25ldGljQ29uc3RhbnQ7XG52YXIgY3JlYXRlRWxlY3RyaWNDb25zdGFudCA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdlbGVjdHJpY0NvbnN0YW50JywgJzguODU0MTg3ODEyOGUtMTInLCAnRiBtXi0xJyk7XG5leHBvcnRzLmNyZWF0ZUVsZWN0cmljQ29uc3RhbnQgPSBjcmVhdGVFbGVjdHJpY0NvbnN0YW50O1xudmFyIGNyZWF0ZVZhY3V1bUltcGVkYW5jZSA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCd2YWN1dW1JbXBlZGFuY2UnLCAnMzc2LjczMDMxMzY2NycsICdvaG0nKTtcbmV4cG9ydHMuY3JlYXRlVmFjdXVtSW1wZWRhbmNlID0gY3JlYXRlVmFjdXVtSW1wZWRhbmNlO1xudmFyIGNyZWF0ZUNvdWxvbWIgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnY291bG9tYicsICc4Ljk4NzU1MTc5MjI2MTE3MWU5JywgJ04gbV4yIENeLTInKTtcbmV4cG9ydHMuY3JlYXRlQ291bG9tYiA9IGNyZWF0ZUNvdWxvbWI7XG52YXIgY3JlYXRlRWxlbWVudGFyeUNoYXJnZSA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdlbGVtZW50YXJ5Q2hhcmdlJywgJzEuNjAyMTc2NjM0ZS0xOScsICdDJyk7XG5leHBvcnRzLmNyZWF0ZUVsZW1lbnRhcnlDaGFyZ2UgPSBjcmVhdGVFbGVtZW50YXJ5Q2hhcmdlO1xudmFyIGNyZWF0ZUJvaHJNYWduZXRvbiA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdib2hyTWFnbmV0b24nLCAnOS4yNzQwMTAwNzgzZS0yNCcsICdKIFReLTEnKTtcbmV4cG9ydHMuY3JlYXRlQm9ock1hZ25ldG9uID0gY3JlYXRlQm9ock1hZ25ldG9uO1xudmFyIGNyZWF0ZUNvbmR1Y3RhbmNlUXVhbnR1bSA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdjb25kdWN0YW5jZVF1YW50dW0nLCAnNy43NDgwOTE3Mjk4NjM2NDllLTUnLCAnUycpO1xuZXhwb3J0cy5jcmVhdGVDb25kdWN0YW5jZVF1YW50dW0gPSBjcmVhdGVDb25kdWN0YW5jZVF1YW50dW07XG52YXIgY3JlYXRlSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bSA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdpbnZlcnNlQ29uZHVjdGFuY2VRdWFudHVtJywgJzEyOTA2LjQwMzcyOTY1MjI1NycsICdvaG0nKTtcbmV4cG9ydHMuY3JlYXRlSW52ZXJzZUNvbmR1Y3RhbmNlUXVhbnR1bSA9IGNyZWF0ZUludmVyc2VDb25kdWN0YW5jZVF1YW50dW07XG52YXIgY3JlYXRlTWFnbmV0aWNGbHV4UXVhbnR1bSA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdtYWduZXRpY0ZsdXhRdWFudHVtJywgJzIuMDY3ODMzODQ4NDYxOTI5NWUtMTUnLCAnV2InKTtcbmV4cG9ydHMuY3JlYXRlTWFnbmV0aWNGbHV4UXVhbnR1bSA9IGNyZWF0ZU1hZ25ldGljRmx1eFF1YW50dW07XG52YXIgY3JlYXRlTnVjbGVhck1hZ25ldG9uID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ251Y2xlYXJNYWduZXRvbicsICc1LjA1MDc4Mzc0NjFlLTI3JywgJ0ogVF4tMScpO1xuZXhwb3J0cy5jcmVhdGVOdWNsZWFyTWFnbmV0b24gPSBjcmVhdGVOdWNsZWFyTWFnbmV0b247XG52YXIgY3JlYXRlS2xpdHppbmcgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgna2xpdHppbmcnLCAnMjU4MTIuODA3NDU5MzA0NTEzJywgJ29obScpO1xuZXhwb3J0cy5jcmVhdGVLbGl0emluZyA9IGNyZWF0ZUtsaXR6aW5nO1xudmFyIGNyZWF0ZUpvc2VwaHNvbiA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdqb3NlcGhzb24nLCAnNC44MzU5Nzg0ODQxNjk4MzZlMTQgSHogVicsICdIeiBWXi0xJyk7IC8vIFRPRE86IHN1cHBvcnQgZm9yIEh6IG5lZWRlZFxuLy8gQXRvbWljIGFuZCBudWNsZWFyIGNvbnN0YW50c1xuXG5leHBvcnRzLmNyZWF0ZUpvc2VwaHNvbiA9IGNyZWF0ZUpvc2VwaHNvbjtcbnZhciBjcmVhdGVCb2hyUmFkaXVzID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2JvaHJSYWRpdXMnLCAnNS4yOTE3NzIxMDkwM2UtMTEnLCAnbScpO1xuZXhwb3J0cy5jcmVhdGVCb2hyUmFkaXVzID0gY3JlYXRlQm9oclJhZGl1cztcbnZhciBjcmVhdGVDbGFzc2ljYWxFbGVjdHJvblJhZGl1cyA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdjbGFzc2ljYWxFbGVjdHJvblJhZGl1cycsICcyLjgxNzk0MDMyNjJlLTE1JywgJ20nKTtcbmV4cG9ydHMuY3JlYXRlQ2xhc3NpY2FsRWxlY3Ryb25SYWRpdXMgPSBjcmVhdGVDbGFzc2ljYWxFbGVjdHJvblJhZGl1cztcbnZhciBjcmVhdGVFbGVjdHJvbk1hc3MgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnZWxlY3Ryb25NYXNzJywgJzkuMTA5MzgzNzAxNWUtMzEnLCAna2cnKTtcbmV4cG9ydHMuY3JlYXRlRWxlY3Ryb25NYXNzID0gY3JlYXRlRWxlY3Ryb25NYXNzO1xudmFyIGNyZWF0ZUZlcm1pQ291cGxpbmcgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnZmVybWlDb3VwbGluZycsICcxLjE2NjM3ODdlLTUnLCAnR2VWXi0yJyk7XG5leHBvcnRzLmNyZWF0ZUZlcm1pQ291cGxpbmcgPSBjcmVhdGVGZXJtaUNvdXBsaW5nO1xudmFyIGNyZWF0ZUZpbmVTdHJ1Y3R1cmUgPSBudW1iZXJGYWN0b3J5KCdmaW5lU3RydWN0dXJlJywgNy4yOTczNTI1NjkzZS0zKTtcbmV4cG9ydHMuY3JlYXRlRmluZVN0cnVjdHVyZSA9IGNyZWF0ZUZpbmVTdHJ1Y3R1cmU7XG52YXIgY3JlYXRlSGFydHJlZUVuZXJneSA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdoYXJ0cmVlRW5lcmd5JywgJzQuMzU5NzQ0NzIyMjA3MWUtMTgnLCAnSicpO1xuZXhwb3J0cy5jcmVhdGVIYXJ0cmVlRW5lcmd5ID0gY3JlYXRlSGFydHJlZUVuZXJneTtcbnZhciBjcmVhdGVQcm90b25NYXNzID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3Byb3Rvbk1hc3MnLCAnMS42NzI2MjE5MjM2OWUtMjcnLCAna2cnKTtcbmV4cG9ydHMuY3JlYXRlUHJvdG9uTWFzcyA9IGNyZWF0ZVByb3Rvbk1hc3M7XG52YXIgY3JlYXRlRGV1dGVyb25NYXNzID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2RldXRlcm9uTWFzcycsICczLjM0MzU4MzA5MjZlLTI3JywgJ2tnJyk7XG5leHBvcnRzLmNyZWF0ZURldXRlcm9uTWFzcyA9IGNyZWF0ZURldXRlcm9uTWFzcztcbnZhciBjcmVhdGVOZXV0cm9uTWFzcyA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCduZXV0cm9uTWFzcycsICcxLjY3NDkyNzE2MTNlLTI3JywgJ2tnJyk7XG5leHBvcnRzLmNyZWF0ZU5ldXRyb25NYXNzID0gY3JlYXRlTmV1dHJvbk1hc3M7XG52YXIgY3JlYXRlUXVhbnR1bU9mQ2lyY3VsYXRpb24gPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgncXVhbnR1bU9mQ2lyY3VsYXRpb24nLCAnMy42MzY5NDc1NTE2ZS00JywgJ21eMiBzXi0xJyk7XG5leHBvcnRzLmNyZWF0ZVF1YW50dW1PZkNpcmN1bGF0aW9uID0gY3JlYXRlUXVhbnR1bU9mQ2lyY3VsYXRpb247XG52YXIgY3JlYXRlUnlkYmVyZyA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdyeWRiZXJnJywgJzEwOTczNzMxLjU2ODE2MCcsICdtXi0xJyk7XG5leHBvcnRzLmNyZWF0ZVJ5ZGJlcmcgPSBjcmVhdGVSeWRiZXJnO1xudmFyIGNyZWF0ZVRob21zb25Dcm9zc1NlY3Rpb24gPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgndGhvbXNvbkNyb3NzU2VjdGlvbicsICc2LjY1MjQ1ODczMjFlLTI5JywgJ21eMicpO1xuZXhwb3J0cy5jcmVhdGVUaG9tc29uQ3Jvc3NTZWN0aW9uID0gY3JlYXRlVGhvbXNvbkNyb3NzU2VjdGlvbjtcbnZhciBjcmVhdGVXZWFrTWl4aW5nQW5nbGUgPSBudW1iZXJGYWN0b3J5KCd3ZWFrTWl4aW5nQW5nbGUnLCAwLjIyMjkwKTtcbmV4cG9ydHMuY3JlYXRlV2Vha01peGluZ0FuZ2xlID0gY3JlYXRlV2Vha01peGluZ0FuZ2xlO1xudmFyIGNyZWF0ZUVmaW1vdkZhY3RvciA9IG51bWJlckZhY3RvcnkoJ2VmaW1vdkZhY3RvcicsIDIyLjcpOyAvLyBQaHlzaWNvLWNoZW1pY2FsIGNvbnN0YW50c1xuXG5leHBvcnRzLmNyZWF0ZUVmaW1vdkZhY3RvciA9IGNyZWF0ZUVmaW1vdkZhY3RvcjtcbnZhciBjcmVhdGVBdG9taWNNYXNzID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ2F0b21pY01hc3MnLCAnMS42NjA1MzkwNjY2MGUtMjcnLCAna2cnKTtcbmV4cG9ydHMuY3JlYXRlQXRvbWljTWFzcyA9IGNyZWF0ZUF0b21pY01hc3M7XG52YXIgY3JlYXRlQXZvZ2Fkcm8gPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnYXZvZ2Fkcm8nLCAnNi4wMjIxNDA3NmUyMycsICdtb2xeLTEnKTtcbmV4cG9ydHMuY3JlYXRlQXZvZ2Fkcm8gPSBjcmVhdGVBdm9nYWRybztcbnZhciBjcmVhdGVCb2x0em1hbm4gPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnYm9sdHptYW5uJywgJzEuMzgwNjQ5ZS0yMycsICdKIEteLTEnKTtcbmV4cG9ydHMuY3JlYXRlQm9sdHptYW5uID0gY3JlYXRlQm9sdHptYW5uO1xudmFyIGNyZWF0ZUZhcmFkYXkgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnZmFyYWRheScsICc5NjQ4NS4zMzIxMjMzMTAwMScsICdDIG1vbF4tMScpO1xuZXhwb3J0cy5jcmVhdGVGYXJhZGF5ID0gY3JlYXRlRmFyYWRheTtcbnZhciBjcmVhdGVGaXJzdFJhZGlhdGlvbiA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdmaXJzdFJhZGlhdGlvbicsICczLjc0MTc3MTg1MjE5Mjc1NzNlLTE2JywgJ1cgbV4yJyk7IC8vIGV4cG9ydCBjb25zdCBjcmVhdGVTcGVjdHJhbFJhZGlhbmNlID0gLyogI19fUFVSRV9fICovIHVuaXRGYWN0b3J5KCdzcGVjdHJhbFJhZGlhbmNlJywgJzEuMTkxMDQyOTcyMzk3MTg4MWUtMTYnLCAnVyBtXjIgc3JeLTEnKSAvLyBUT0RPIHNwZWN0cmFsUmFkaWFuY2VcblxuZXhwb3J0cy5jcmVhdGVGaXJzdFJhZGlhdGlvbiA9IGNyZWF0ZUZpcnN0UmFkaWF0aW9uO1xudmFyIGNyZWF0ZUxvc2NobWlkdCA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdsb3NjaG1pZHQnLCAnMi42ODY3ODAxMTE3OTg0NDRlMjUnLCAnbV4tMycpO1xuZXhwb3J0cy5jcmVhdGVMb3NjaG1pZHQgPSBjcmVhdGVMb3NjaG1pZHQ7XG52YXIgY3JlYXRlR2FzQ29uc3RhbnQgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnZ2FzQ29uc3RhbnQnLCAnOC4zMTQ0NjI2MTgxNTMyNCcsICdKIEteLTEgbW9sXi0xJyk7XG5leHBvcnRzLmNyZWF0ZUdhc0NvbnN0YW50ID0gY3JlYXRlR2FzQ29uc3RhbnQ7XG52YXIgY3JlYXRlTW9sYXJQbGFuY2tDb25zdGFudCA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdtb2xhclBsYW5ja0NvbnN0YW50JywgJzMuOTkwMzEyNzEyODkzNDMxZS0xMCcsICdKIHMgbW9sXi0xJyk7XG5leHBvcnRzLmNyZWF0ZU1vbGFyUGxhbmNrQ29uc3RhbnQgPSBjcmVhdGVNb2xhclBsYW5ja0NvbnN0YW50O1xudmFyIGNyZWF0ZU1vbGFyVm9sdW1lID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ21vbGFyVm9sdW1lJywgJzAuMDIyNDEzOTY5NTQ1MDE0MTM3JywgJ21eMyBtb2xeLTEnKTtcbmV4cG9ydHMuY3JlYXRlTW9sYXJWb2x1bWUgPSBjcmVhdGVNb2xhclZvbHVtZTtcbnZhciBjcmVhdGVTYWNrdXJUZXRyb2RlID0gbnVtYmVyRmFjdG9yeSgnc2Fja3VyVGV0cm9kZScsIC0xLjE2NDg3MDUyMzU4KTtcbmV4cG9ydHMuY3JlYXRlU2Fja3VyVGV0cm9kZSA9IGNyZWF0ZVNhY2t1clRldHJvZGU7XG52YXIgY3JlYXRlU2Vjb25kUmFkaWF0aW9uID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3NlY29uZFJhZGlhdGlvbicsICcwLjAxNDM4Nzc2ODc3NTAzOTMzNycsICdtIEsnKTtcbmV4cG9ydHMuY3JlYXRlU2Vjb25kUmFkaWF0aW9uID0gY3JlYXRlU2Vjb25kUmFkaWF0aW9uO1xudmFyIGNyZWF0ZVN0ZWZhbkJvbHR6bWFubiA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdzdGVmYW5Cb2x0em1hbm4nLCAnNS42NzAzNzQ0MTkxODQ0M2UtOCcsICdXIG1eLTIgS14tNCcpO1xuZXhwb3J0cy5jcmVhdGVTdGVmYW5Cb2x0em1hbm4gPSBjcmVhdGVTdGVmYW5Cb2x0em1hbm47XG52YXIgY3JlYXRlV2llbkRpc3BsYWNlbWVudCA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCd3aWVuRGlzcGxhY2VtZW50JywgJzIuODk3NzcxOTU1ZS0zJywgJ20gSycpOyAvLyBBZG9wdGVkIHZhbHVlc1xuXG5leHBvcnRzLmNyZWF0ZVdpZW5EaXNwbGFjZW1lbnQgPSBjcmVhdGVXaWVuRGlzcGxhY2VtZW50O1xudmFyIGNyZWF0ZU1vbGFyTWFzcyA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdtb2xhck1hc3MnLCAnMC45OTk5OTk5OTk2NWUtMycsICdrZyBtb2xeLTEnKTtcbmV4cG9ydHMuY3JlYXRlTW9sYXJNYXNzID0gY3JlYXRlTW9sYXJNYXNzO1xudmFyIGNyZWF0ZU1vbGFyTWFzc0MxMiA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdtb2xhck1hc3NDMTInLCAnMTEuOTk5OTk5OTk1OGUtMycsICdrZyBtb2xeLTEnKTtcbmV4cG9ydHMuY3JlYXRlTW9sYXJNYXNzQzEyID0gY3JlYXRlTW9sYXJNYXNzQzEyO1xudmFyIGNyZWF0ZUdyYXZpdHkgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgnZ3Jhdml0eScsICc5LjgwNjY1JywgJ20gc14tMicpOyAvLyBhdG0gaXMgZGVmaW5lZCBpbiBVbml0LmpzXG4vLyBOYXR1cmFsIHVuaXRzXG5cbmV4cG9ydHMuY3JlYXRlR3Jhdml0eSA9IGNyZWF0ZUdyYXZpdHk7XG52YXIgY3JlYXRlUGxhbmNrTGVuZ3RoID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3BsYW5ja0xlbmd0aCcsICcxLjYxNjI1NWUtMzUnLCAnbScpO1xuZXhwb3J0cy5jcmVhdGVQbGFuY2tMZW5ndGggPSBjcmVhdGVQbGFuY2tMZW5ndGg7XG52YXIgY3JlYXRlUGxhbmNrTWFzcyA9IC8qICNfX1BVUkVfXyAqL3VuaXRGYWN0b3J5KCdwbGFuY2tNYXNzJywgJzIuMTc2NDM1ZS04JywgJ2tnJyk7XG5leHBvcnRzLmNyZWF0ZVBsYW5ja01hc3MgPSBjcmVhdGVQbGFuY2tNYXNzO1xudmFyIGNyZWF0ZVBsYW5ja1RpbWUgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgncGxhbmNrVGltZScsICc1LjM5MTI0NWUtNDQnLCAncycpO1xuZXhwb3J0cy5jcmVhdGVQbGFuY2tUaW1lID0gY3JlYXRlUGxhbmNrVGltZTtcbnZhciBjcmVhdGVQbGFuY2tDaGFyZ2UgPSAvKiAjX19QVVJFX18gKi91bml0RmFjdG9yeSgncGxhbmNrQ2hhcmdlJywgJzEuODc1NTQ2MDM3NzhlLTE4JywgJ0MnKTtcbmV4cG9ydHMuY3JlYXRlUGxhbmNrQ2hhcmdlID0gY3JlYXRlUGxhbmNrQ2hhcmdlO1xudmFyIGNyZWF0ZVBsYW5ja1RlbXBlcmF0dXJlID0gLyogI19fUFVSRV9fICovdW5pdEZhY3RvcnkoJ3BsYW5ja1RlbXBlcmF0dXJlJywgJzEuNDE2Nzg1ZSszMicsICdLJyk7IC8vIGhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBmYWN0b3J5IGZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBwaHlzaWNhbCBjb25zdGFudCxcbi8vIGEgVW5pdCB3aXRoIGVpdGhlciBhIG51bWJlciB2YWx1ZSBvciBhIEJpZ051bWJlciB2YWx1ZSBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb25cblxuZXhwb3J0cy5jcmVhdGVQbGFuY2tUZW1wZXJhdHVyZSA9IGNyZWF0ZVBsYW5ja1RlbXBlcmF0dXJlO1xuXG5mdW5jdGlvbiB1bml0RmFjdG9yeShuYW1lLCB2YWx1ZVN0ciwgdW5pdFN0cikge1xuICB2YXIgZGVwZW5kZW5jaWVzID0gWydjb25maWcnLCAnVW5pdCcsICdCaWdOdW1iZXInXTtcbiAgcmV0dXJuICgwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmKSB7XG4gICAgdmFyIGNvbmZpZyA9IF9yZWYuY29uZmlnLFxuICAgICAgICBVbml0ID0gX3JlZi5Vbml0LFxuICAgICAgICBCaWdOdW1iZXIgPSBfcmVmLkJpZ051bWJlcjtcbiAgICAvLyBOb3RlIHRoYXQgd2UgY2FuIHBhcnNlIGludG8gbnVtYmVyIG9yIEJpZ051bWJlci5cbiAgICAvLyBXZSBkbyBub3QgcGFyc2UgaW50byBGcmFjdGlvbnMgYXMgdGhhdCBkb2Vzbid0IG1ha2Ugc2Vuc2U6IHdlIHdvdWxkIGxvc2UgcHJlY2lzaW9uIG9mIHRoZSB2YWx1ZXNcbiAgICAvLyBUaGVyZWZvcmUgd2UgZG9udCB1c2UgVW5pdC5wYXJzZSgpXG4gICAgdmFyIHZhbHVlID0gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyBuZXcgQmlnTnVtYmVyKHZhbHVlU3RyKSA6IHBhcnNlRmxvYXQodmFsdWVTdHIpO1xuICAgIHZhciB1bml0ID0gbmV3IFVuaXQodmFsdWUsIHVuaXRTdHIpO1xuICAgIHVuaXQuZml4UHJlZml4ID0gdHJ1ZTtcbiAgICByZXR1cm4gdW5pdDtcbiAgfSk7XG59IC8vIGhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBmYWN0b3J5IGZ1bmN0aW9uIHdoaWNoIGNyZWF0ZXMgYSBudW1lcmljIGNvbnN0YW50LFxuLy8gZWl0aGVyIGEgbnVtYmVyIG9yIEJpZ051bWJlciBkZXBlbmRpbmcgb24gdGhlIGNvbmZpZ3VyYXRpb25cblxuXG5mdW5jdGlvbiBudW1iZXJGYWN0b3J5KG5hbWUsIHZhbHVlKSB7XG4gIHZhciBkZXBlbmRlbmNpZXMgPSBbJ2NvbmZpZycsICdCaWdOdW1iZXInXTtcbiAgcmV0dXJuICgwLCBfZmFjdG9yeS5mYWN0b3J5KShuYW1lLCBkZXBlbmRlbmNpZXMsIGZ1bmN0aW9uIChfcmVmMikge1xuICAgIHZhciBjb25maWcgPSBfcmVmMi5jb25maWcsXG4gICAgICAgIEJpZ051bWJlciA9IF9yZWYyLkJpZ051bWJlcjtcbiAgICByZXR1cm4gY29uZmlnLm51bWJlciA9PT0gJ0JpZ051bWJlcicgPyBuZXcgQmlnTnVtYmVyKHZhbHVlKSA6IHZhbHVlO1xuICB9KTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuYXJyYXlTaXplID0gYXJyYXlTaXplO1xuZXhwb3J0cy52YWxpZGF0ZSA9IHZhbGlkYXRlO1xuZXhwb3J0cy52YWxpZGF0ZUluZGV4ID0gdmFsaWRhdGVJbmRleDtcbmV4cG9ydHMucmVzaXplID0gcmVzaXplO1xuZXhwb3J0cy5yZXNoYXBlID0gcmVzaGFwZTtcbmV4cG9ydHMuc3F1ZWV6ZSA9IHNxdWVlemU7XG5leHBvcnRzLnVuc3F1ZWV6ZSA9IHVuc3F1ZWV6ZTtcbmV4cG9ydHMuZmxhdHRlbiA9IGZsYXR0ZW47XG5leHBvcnRzLm1hcCA9IG1hcDtcbmV4cG9ydHMuZm9yRWFjaCA9IGZvckVhY2g7XG5leHBvcnRzLmZpbHRlciA9IGZpbHRlcjtcbmV4cG9ydHMuZmlsdGVyUmVnRXhwID0gZmlsdGVyUmVnRXhwO1xuZXhwb3J0cy5qb2luID0gam9pbjtcbmV4cG9ydHMuaWRlbnRpZnkgPSBpZGVudGlmeTtcbmV4cG9ydHMuZ2VuZXJhbGl6ZSA9IGdlbmVyYWxpemU7XG5leHBvcnRzLmdldEFycmF5RGF0YVR5cGUgPSBnZXRBcnJheURhdGFUeXBlO1xuZXhwb3J0cy5sYXN0ID0gbGFzdDtcbmV4cG9ydHMuaW5pdGlhbCA9IGluaXRpYWw7XG5leHBvcnRzLmNvbnRhaW5zID0gY29udGFpbnM7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4vbnVtYmVyXCIpO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4vaXNcIik7XG5cbnZhciBfc3RyaW5nID0gcmVxdWlyZShcIi4vc3RyaW5nXCIpO1xuXG52YXIgX0RpbWVuc2lvbkVycm9yID0gcmVxdWlyZShcIi4uL2Vycm9yL0RpbWVuc2lvbkVycm9yXCIpO1xuXG52YXIgX0luZGV4RXJyb3IgPSByZXF1aXJlKFwiLi4vZXJyb3IvSW5kZXhFcnJvclwiKTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIHNpemUgb2YgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheS5cbiAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRoZSBzaXplIG9mIHRoZSBmaXJzdCBlbnRyeSwgaXQgZG9lcyBub3QgdmFsaWRhdGVcbiAqIHdoZXRoZXIgYWxsIGRpbWVuc2lvbnMgbWF0Y2guICh1c2UgZnVuY3Rpb24gYHZhbGlkYXRlYCBmb3IgdGhhdClcbiAqIEBwYXJhbSB7QXJyYXl9IHhcbiAqIEBSZXR1cm4ge051bWJlcltdfSBzaXplXG4gKi9cbmZ1bmN0aW9uIGFycmF5U2l6ZSh4KSB7XG4gIHZhciBzID0gW107XG5cbiAgd2hpbGUgKEFycmF5LmlzQXJyYXkoeCkpIHtcbiAgICBzLnB1c2goeC5sZW5ndGgpO1xuICAgIHggPSB4WzBdO1xuICB9XG5cbiAgcmV0dXJuIHM7XG59XG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHZhbGlkYXRlIHdoZXRoZXIgZWFjaCBlbGVtZW50IGluIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXlcbiAqIGhhcyBhIHNpemUgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvdmlkZWQgc2l6ZSBhcnJheS5cbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5ICAgIEFycmF5IHRvIGJlIHZhbGlkYXRlZFxuICogQHBhcmFtIHtudW1iZXJbXX0gc2l6ZSAgQXJyYXkgd2l0aCB0aGUgc2l6ZSBvZiBlYWNoIGRpbWVuc2lvblxuICogQHBhcmFtIHtudW1iZXJ9IGRpbSAgIEN1cnJlbnQgZGltZW5zaW9uXG4gKiBAdGhyb3dzIERpbWVuc2lvbkVycm9yXG4gKiBAcHJpdmF0ZVxuICovXG5cblxuZnVuY3Rpb24gX3ZhbGlkYXRlKGFycmF5LCBzaXplLCBkaW0pIHtcbiAgdmFyIGk7XG4gIHZhciBsZW4gPSBhcnJheS5sZW5ndGg7XG5cbiAgaWYgKGxlbiAhPT0gc2l6ZVtkaW1dKSB7XG4gICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihsZW4sIHNpemVbZGltXSk7XG4gIH1cblxuICBpZiAoZGltIDwgc2l6ZS5sZW5ndGggLSAxKSB7XG4gICAgLy8gcmVjdXJzaXZlbHkgdmFsaWRhdGUgZWFjaCBjaGlsZCBhcnJheVxuICAgIHZhciBkaW1OZXh0ID0gZGltICsgMTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgdmFyIGNoaWxkID0gYXJyYXlbaV07XG5cbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShjaGlsZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihzaXplLmxlbmd0aCAtIDEsIHNpemUubGVuZ3RoLCAnPCcpO1xuICAgICAgfVxuXG4gICAgICBfdmFsaWRhdGUoYXJyYXlbaV0sIHNpemUsIGRpbU5leHQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBsYXN0IGRpbWVuc2lvbi4gbm9uZSBvZiB0aGUgY2hpbGRzIG1heSBiZSBhbiBhcnJheVxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJyYXlbaV0pKSB7XG4gICAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3Ioc2l6ZS5sZW5ndGggKyAxLCBzaXplLmxlbmd0aCwgJz4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbi8qKlxuICogVmFsaWRhdGUgd2hldGhlciBlYWNoIGVsZW1lbnQgaW4gYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheSBoYXNcbiAqIGEgc2l6ZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm92aWRlZCBzaXplIGFycmF5LlxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgICAgQXJyYXkgdG8gYmUgdmFsaWRhdGVkXG4gKiBAcGFyYW0ge251bWJlcltdfSBzaXplICBBcnJheSB3aXRoIHRoZSBzaXplIG9mIGVhY2ggZGltZW5zaW9uXG4gKiBAdGhyb3dzIERpbWVuc2lvbkVycm9yXG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZShhcnJheSwgc2l6ZSkge1xuICB2YXIgaXNTY2FsYXIgPSBzaXplLmxlbmd0aCA9PT0gMDtcblxuICBpZiAoaXNTY2FsYXIpIHtcbiAgICAvLyBzY2FsYXJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhcnJheSkpIHtcbiAgICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoYXJyYXkubGVuZ3RoLCAwKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gYXJyYXlcbiAgICBfdmFsaWRhdGUoYXJyYXksIHNpemUsIDApO1xuICB9XG59XG4vKipcbiAqIFRlc3Qgd2hldGhlciBpbmRleCBpcyBhbiBpbnRlZ2VyIG51bWJlciB3aXRoIGluZGV4ID49IDAgYW5kIGluZGV4IDwgbGVuZ3RoXG4gKiB3aGVuIGxlbmd0aCBpcyBwcm92aWRlZFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4ICAgIFplcm8tYmFzZWQgaW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBbbGVuZ3RoXSBMZW5ndGggb2YgdGhlIGFycmF5XG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZUluZGV4KGluZGV4LCBsZW5ndGgpIHtcbiAgaWYgKCEoMCwgX2lzLmlzTnVtYmVyKShpbmRleCkgfHwgISgwLCBfbnVtYmVyLmlzSW50ZWdlcikoaW5kZXgpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW5kZXggbXVzdCBiZSBhbiBpbnRlZ2VyICh2YWx1ZTogJyArIGluZGV4ICsgJyknKTtcbiAgfVxuXG4gIGlmIChpbmRleCA8IDAgfHwgdHlwZW9mIGxlbmd0aCA9PT0gJ251bWJlcicgJiYgaW5kZXggPj0gbGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IF9JbmRleEVycm9yLkluZGV4RXJyb3IoaW5kZXgsIGxlbmd0aCk7XG4gIH1cbn1cbi8qKlxuICogUmVzaXplIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXkuIFRoZSByZXNpemVkIGFycmF5IGlzIHJldHVybmVkLlxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgICAgICAgICBBcnJheSB0byBiZSByZXNpemVkXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBzaXplIEFycmF5IHdpdGggdGhlIHNpemUgb2YgZWFjaCBkaW1lbnNpb25cbiAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZT0wXSAgVmFsdWUgdG8gYmUgZmlsbGVkIGluIGluIG5ldyBlbnRyaWVzLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZXJvIGJ5IGRlZmF1bHQuIFNwZWNpZnkgZm9yIGV4YW1wbGUgYG51bGxgLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBjbGVhcmx5IHNlZSBlbnRyaWVzIHRoYXQgYXJlIG5vdCBleHBsaWNpdGx5XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldC5cbiAqIEByZXR1cm4ge0FycmF5fSBhcnJheSAgICAgICAgIFRoZSByZXNpemVkIGFycmF5XG4gKi9cblxuXG5mdW5jdGlvbiByZXNpemUoYXJyYXksIHNpemUsIGRlZmF1bHRWYWx1ZSkge1xuICAvLyBUT0RPOiBhZGQgc3VwcG9ydCBmb3Igc2NhbGFycywgaGF2aW5nIHNpemU9W10gP1xuICAvLyBjaGVjayB0aGUgdHlwZSBvZiB0aGUgYXJndW1lbnRzXG4gIGlmICghQXJyYXkuaXNBcnJheShhcnJheSkgfHwgIUFycmF5LmlzQXJyYXkoc2l6ZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBleHBlY3RlZCcpO1xuICB9XG5cbiAgaWYgKHNpemUubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSZXNpemluZyB0byBzY2FsYXIgaXMgbm90IHN1cHBvcnRlZCcpO1xuICB9IC8vIGNoZWNrIHdoZXRoZXIgc2l6ZSBjb250YWlucyBwb3NpdGl2ZSBpbnRlZ2Vyc1xuXG5cbiAgc2l6ZS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGlmICghKDAsIF9pcy5pc051bWJlcikodmFsdWUpIHx8ICEoMCwgX251bWJlci5pc0ludGVnZXIpKHZhbHVlKSB8fCB2YWx1ZSA8IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgc2l6ZSwgbXVzdCBjb250YWluIHBvc2l0aXZlIGludGVnZXJzICcgKyAnKHNpemU6ICcgKyAoMCwgX3N0cmluZy5mb3JtYXQpKHNpemUpICsgJyknKTtcbiAgICB9XG4gIH0pOyAvLyByZWN1cnNpdmVseSByZXNpemUgdGhlIGFycmF5XG5cbiAgdmFyIF9kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCA/IGRlZmF1bHRWYWx1ZSA6IDA7XG5cbiAgX3Jlc2l6ZShhcnJheSwgc2l6ZSwgMCwgX2RlZmF1bHRWYWx1ZSk7XG5cbiAgcmV0dXJuIGFycmF5O1xufVxuLyoqXG4gKiBSZWN1cnNpdmVseSByZXNpemUgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgICAgICAgICBBcnJheSB0byBiZSByZXNpemVkXG4gKiBAcGFyYW0ge251bWJlcltdfSBzaXplICAgICAgIEFycmF5IHdpdGggdGhlIHNpemUgb2YgZWFjaCBkaW1lbnNpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW0gICAgICAgICAgQ3VycmVudCBkaW1lbnNpb25cbiAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV0gICAgVmFsdWUgdG8gYmUgZmlsbGVkIGluIGluIG5ldyBlbnRyaWVzLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRlZmluZWQgYnkgZGVmYXVsdC5cbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBfcmVzaXplKGFycmF5LCBzaXplLCBkaW0sIGRlZmF1bHRWYWx1ZSkge1xuICB2YXIgaTtcbiAgdmFyIGVsZW07XG4gIHZhciBvbGRMZW4gPSBhcnJheS5sZW5ndGg7XG4gIHZhciBuZXdMZW4gPSBzaXplW2RpbV07XG4gIHZhciBtaW5MZW4gPSBNYXRoLm1pbihvbGRMZW4sIG5ld0xlbik7IC8vIGFwcGx5IG5ldyBsZW5ndGhcblxuICBhcnJheS5sZW5ndGggPSBuZXdMZW47XG5cbiAgaWYgKGRpbSA8IHNpemUubGVuZ3RoIC0gMSkge1xuICAgIC8vIG5vbi1sYXN0IGRpbWVuc2lvblxuICAgIHZhciBkaW1OZXh0ID0gZGltICsgMTsgLy8gcmVzaXplIGV4aXN0aW5nIGNoaWxkIGFycmF5c1xuXG4gICAgZm9yIChpID0gMDsgaSA8IG1pbkxlbjsgaSsrKSB7XG4gICAgICAvLyByZXNpemUgY2hpbGQgYXJyYXlcbiAgICAgIGVsZW0gPSBhcnJheVtpXTtcblxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGVsZW0pKSB7XG4gICAgICAgIGVsZW0gPSBbZWxlbV07IC8vIGFkZCBhIGRpbWVuc2lvblxuXG4gICAgICAgIGFycmF5W2ldID0gZWxlbTtcbiAgICAgIH1cblxuICAgICAgX3Jlc2l6ZShlbGVtLCBzaXplLCBkaW1OZXh0LCBkZWZhdWx0VmFsdWUpO1xuICAgIH0gLy8gY3JlYXRlIG5ldyBjaGlsZCBhcnJheXNcblxuXG4gICAgZm9yIChpID0gbWluTGVuOyBpIDwgbmV3TGVuOyBpKyspIHtcbiAgICAgIC8vIGdldCBjaGlsZCBhcnJheVxuICAgICAgZWxlbSA9IFtdO1xuICAgICAgYXJyYXlbaV0gPSBlbGVtOyAvLyByZXNpemUgbmV3IGNoaWxkIGFycmF5XG5cbiAgICAgIF9yZXNpemUoZWxlbSwgc2l6ZSwgZGltTmV4dCwgZGVmYXVsdFZhbHVlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gbGFzdCBkaW1lbnNpb25cbiAgICAvLyByZW1vdmUgZGltZW5zaW9ucyBvZiBleGlzdGluZyB2YWx1ZXNcbiAgICBmb3IgKGkgPSAwOyBpIDwgbWluTGVuOyBpKyspIHtcbiAgICAgIHdoaWxlIChBcnJheS5pc0FycmF5KGFycmF5W2ldKSkge1xuICAgICAgICBhcnJheVtpXSA9IGFycmF5W2ldWzBdO1xuICAgICAgfVxuICAgIH0gLy8gZmlsbCBuZXcgZWxlbWVudHMgd2l0aCB0aGUgZGVmYXVsdCB2YWx1ZVxuXG5cbiAgICBmb3IgKGkgPSBtaW5MZW47IGkgPCBuZXdMZW47IGkrKykge1xuICAgICAgYXJyYXlbaV0gPSBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICB9XG59XG4vKipcbiAqIFJlLXNoYXBlIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXkgdG8gZml0IHRoZSBzcGVjaWZpZWQgZGltZW5zaW9uc1xuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgICAgICAgICAgIEFycmF5IHRvIGJlIHJlc2hhcGVkXG4gKiBAcGFyYW0ge0FycmF5LjxudW1iZXI+fSBzaXplcyAgTGlzdCBvZiBzaXplcyBmb3IgZWFjaCBkaW1lbnNpb25cbiAqIEByZXR1cm5zIHtBcnJheX0gICAgICAgICAgICAgICBBcnJheSB3aG9zZSBkYXRhIGhhcyBiZWVuIGZvcm1hdHRlZCB0byBmaXQgdGhlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkIGRpbWVuc2lvbnNcbiAqXG4gKiBAdGhyb3dzIHtEaW1lbnNpb25FcnJvcn0gICAgICAgSWYgdGhlIHByb2R1Y3Qgb2YgdGhlIG5ldyBkaW1lbnNpb24gc2l6ZXMgZG9lc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBlcXVhbCB0aGF0IG9mIHRoZSBvbGQgb25lc1xuICovXG5cblxuZnVuY3Rpb24gcmVzaGFwZShhcnJheSwgc2l6ZXMpIHtcbiAgdmFyIGZsYXRBcnJheSA9IGZsYXR0ZW4oYXJyYXkpO1xuICB2YXIgbmV3QXJyYXk7XG5cbiAgZnVuY3Rpb24gcHJvZHVjdChhcnIpIHtcbiAgICByZXR1cm4gYXJyLnJlZHVjZShmdW5jdGlvbiAocHJldiwgY3Vycikge1xuICAgICAgcmV0dXJuIHByZXYgKiBjdXJyO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5KSB8fCAhQXJyYXkuaXNBcnJheShzaXplcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBleHBlY3RlZCcpO1xuICB9XG5cbiAgaWYgKHNpemVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBfRGltZW5zaW9uRXJyb3IuRGltZW5zaW9uRXJyb3IoMCwgcHJvZHVjdChhcnJheVNpemUoYXJyYXkpKSwgJyE9Jyk7XG4gIH1cblxuICB2YXIgdG90YWxTaXplID0gMTtcblxuICBmb3IgKHZhciBzaXplSW5kZXggPSAwOyBzaXplSW5kZXggPCBzaXplcy5sZW5ndGg7IHNpemVJbmRleCsrKSB7XG4gICAgdG90YWxTaXplICo9IHNpemVzW3NpemVJbmRleF07XG4gIH1cblxuICBpZiAoZmxhdEFycmF5Lmxlbmd0aCAhPT0gdG90YWxTaXplKSB7XG4gICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihwcm9kdWN0KHNpemVzKSwgcHJvZHVjdChhcnJheVNpemUoYXJyYXkpKSwgJyE9Jyk7XG4gIH1cblxuICB0cnkge1xuICAgIG5ld0FycmF5ID0gX3Jlc2hhcGUoZmxhdEFycmF5LCBzaXplcyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAoZSBpbnN0YW5jZW9mIF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcikge1xuICAgICAgdGhyb3cgbmV3IF9EaW1lbnNpb25FcnJvci5EaW1lbnNpb25FcnJvcihwcm9kdWN0KHNpemVzKSwgcHJvZHVjdChhcnJheVNpemUoYXJyYXkpKSwgJyE9Jyk7XG4gICAgfVxuXG4gICAgdGhyb3cgZTtcbiAgfVxuXG4gIHJldHVybiBuZXdBcnJheTtcbn1cbi8qKlxuICogSXRlcmF0aXZlbHkgcmUtc2hhcGUgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheSB0byBmaXQgdGhlIHNwZWNpZmllZCBkaW1lbnNpb25zXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSAgICAgICAgICAgQXJyYXkgdG8gYmUgcmVzaGFwZWRcbiAqIEBwYXJhbSB7QXJyYXkuPG51bWJlcj59IHNpemVzICBMaXN0IG9mIHNpemVzIGZvciBlYWNoIGRpbWVuc2lvblxuICogQHJldHVybnMge0FycmF5fSAgICAgICAgICAgICAgIEFycmF5IHdob3NlIGRhdGEgaGFzIGJlZW4gZm9ybWF0dGVkIHRvIGZpdCB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgZGltZW5zaW9uc1xuICovXG5cblxuZnVuY3Rpb24gX3Jlc2hhcGUoYXJyYXksIHNpemVzKSB7XG4gIC8vIHRlc3RpbmcgaWYgdGhlcmUgYXJlIGVub3VnaCBlbGVtZW50cyBmb3IgdGhlIHJlcXVlc3RlZCBzaGFwZVxuICB2YXIgdG1wQXJyYXkgPSBhcnJheTtcbiAgdmFyIHRtcEFycmF5MjsgLy8gZm9yIGVhY2ggZGltZW5zaW9ucyBzdGFydGluZyBieSB0aGUgbGFzdCBvbmUgYW5kIGlnbm9yaW5nIHRoZSBmaXJzdCBvbmVcblxuICBmb3IgKHZhciBzaXplSW5kZXggPSBzaXplcy5sZW5ndGggLSAxOyBzaXplSW5kZXggPiAwOyBzaXplSW5kZXgtLSkge1xuICAgIHZhciBzaXplID0gc2l6ZXNbc2l6ZUluZGV4XTtcbiAgICB0bXBBcnJheTIgPSBbXTsgLy8gYWdncmVnYXRlIHRoZSBlbGVtZW50cyBvZiB0aGUgY3VycmVudCB0bXBBcnJheSBpbiBlbGVtZW50cyBvZiB0aGUgcmVxdWVzdGVkIHNpemVcblxuICAgIHZhciBsZW5ndGggPSB0bXBBcnJheS5sZW5ndGggLyBzaXplO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgICAgdG1wQXJyYXkyLnB1c2godG1wQXJyYXkuc2xpY2UoaSAqIHNpemUsIChpICsgMSkgKiBzaXplKSk7XG4gICAgfSAvLyBzZXQgaXQgYXMgdGhlIG5ldyB0bXBBcnJheSBmb3IgdGhlIG5leHQgbG9vcCB0dXJuIG9yIGZvciByZXR1cm5cblxuXG4gICAgdG1wQXJyYXkgPSB0bXBBcnJheTI7XG4gIH1cblxuICByZXR1cm4gdG1wQXJyYXk7XG59XG4vKipcbiAqIFNxdWVlemUgYSBtdWx0aSBkaW1lbnNpb25hbCBhcnJheVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAqIEBwYXJhbSB7QXJyYXl9IFtzaXplXVxuICogQHJldHVybnMge0FycmF5fSByZXR1cm5zIHRoZSBhcnJheSBpdHNlbGZcbiAqL1xuXG5cbmZ1bmN0aW9uIHNxdWVlemUoYXJyYXksIHNpemUpIHtcbiAgdmFyIHMgPSBzaXplIHx8IGFycmF5U2l6ZShhcnJheSk7IC8vIHNxdWVlemUgb3V0ZXIgZGltZW5zaW9uc1xuXG4gIHdoaWxlIChBcnJheS5pc0FycmF5KGFycmF5KSAmJiBhcnJheS5sZW5ndGggPT09IDEpIHtcbiAgICBhcnJheSA9IGFycmF5WzBdO1xuICAgIHMuc2hpZnQoKTtcbiAgfSAvLyBmaW5kIHRoZSBmaXJzdCBkaW1lbnNpb24gdG8gYmUgc3F1ZWV6ZWRcblxuXG4gIHZhciBkaW1zID0gcy5sZW5ndGg7XG5cbiAgd2hpbGUgKHNbZGltcyAtIDFdID09PSAxKSB7XG4gICAgZGltcy0tO1xuICB9IC8vIHNxdWVlemUgaW5uZXIgZGltZW5zaW9uc1xuXG5cbiAgaWYgKGRpbXMgPCBzLmxlbmd0aCkge1xuICAgIGFycmF5ID0gX3NxdWVlemUoYXJyYXksIGRpbXMsIDApO1xuICAgIHMubGVuZ3RoID0gZGltcztcbiAgfVxuXG4gIHJldHVybiBhcnJheTtcbn1cbi8qKlxuICogUmVjdXJzaXZlbHkgc3F1ZWV6ZSBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICogQHBhcmFtIHtudW1iZXJ9IGRpbXMgUmVxdWlyZWQgbnVtYmVyIG9mIGRpbWVuc2lvbnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW0gIEN1cnJlbnQgZGltZW5zaW9uXG4gKiBAcmV0dXJucyB7QXJyYXkgfCAqfSBSZXR1cm5zIHRoZSBzcXVlZXplZCBhcnJheVxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIF9zcXVlZXplKGFycmF5LCBkaW1zLCBkaW0pIHtcbiAgdmFyIGksIGlpO1xuXG4gIGlmIChkaW0gPCBkaW1zKSB7XG4gICAgdmFyIG5leHQgPSBkaW0gKyAxO1xuXG4gICAgZm9yIChpID0gMCwgaWkgPSBhcnJheS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBhcnJheVtpXSA9IF9zcXVlZXplKGFycmF5W2ldLCBkaW1zLCBuZXh0KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgd2hpbGUgKEFycmF5LmlzQXJyYXkoYXJyYXkpKSB7XG4gICAgICBhcnJheSA9IGFycmF5WzBdO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhcnJheTtcbn1cbi8qKlxuICogVW5zcXVlZXplIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXk6IGFkZCBkaW1lbnNpb25zIHdoZW4gbWlzc2luZ1xuICpcbiAqIFBhcmFtdGVyIGBzaXplYCB3aWxsIGJlIG11dGF0ZWQgdG8gbWF0Y2ggdGhlIG5ldywgdW5xdWVlemVkIG1hdHJpeCBzaXplLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge251bWJlcn0gZGltcyAgICAgICBEZXNpcmVkIG51bWJlciBvZiBkaW1lbnNpb25zIG9mIHRoZSBhcnJheVxuICogQHBhcmFtIHtudW1iZXJ9IFtvdXRlcl0gICAgTnVtYmVyIG9mIG91dGVyIGRpbWVuc2lvbnMgdG8gYmUgYWRkZWRcbiAqIEBwYXJhbSB7QXJyYXl9IFtzaXplXSBDdXJyZW50IHNpemUgb2YgYXJyYXkuXG4gKiBAcmV0dXJucyB7QXJyYXl9IHJldHVybnMgdGhlIGFycmF5IGl0c2VsZlxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIHVuc3F1ZWV6ZShhcnJheSwgZGltcywgb3V0ZXIsIHNpemUpIHtcbiAgdmFyIHMgPSBzaXplIHx8IGFycmF5U2l6ZShhcnJheSk7IC8vIHVuc3F1ZWV6ZSBvdXRlciBkaW1lbnNpb25zXG5cbiAgaWYgKG91dGVyKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvdXRlcjsgaSsrKSB7XG4gICAgICBhcnJheSA9IFthcnJheV07XG4gICAgICBzLnVuc2hpZnQoMSk7XG4gICAgfVxuICB9IC8vIHVuc3F1ZWV6ZSBpbm5lciBkaW1lbnNpb25zXG5cblxuICBhcnJheSA9IF91bnNxdWVlemUoYXJyYXksIGRpbXMsIDApO1xuXG4gIHdoaWxlIChzLmxlbmd0aCA8IGRpbXMpIHtcbiAgICBzLnB1c2goMSk7XG4gIH1cblxuICByZXR1cm4gYXJyYXk7XG59XG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHVuc3F1ZWV6ZSBhIG11bHRpIGRpbWVuc2lvbmFsIGFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICogQHBhcmFtIHtudW1iZXJ9IGRpbXMgUmVxdWlyZWQgbnVtYmVyIG9mIGRpbWVuc2lvbnNcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW0gIEN1cnJlbnQgZGltZW5zaW9uXG4gKiBAcmV0dXJucyB7QXJyYXkgfCAqfSBSZXR1cm5zIHRoZSBzcXVlZXplZCBhcnJheVxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIF91bnNxdWVlemUoYXJyYXksIGRpbXMsIGRpbSkge1xuICB2YXIgaSwgaWk7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyYXkpKSB7XG4gICAgdmFyIG5leHQgPSBkaW0gKyAxO1xuXG4gICAgZm9yIChpID0gMCwgaWkgPSBhcnJheS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgICBhcnJheVtpXSA9IF91bnNxdWVlemUoYXJyYXlbaV0sIGRpbXMsIG5leHQpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBkID0gZGltOyBkIDwgZGltczsgZCsrKSB7XG4gICAgICBhcnJheSA9IFthcnJheV07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFycmF5O1xufVxuLyoqXG4gKiBGbGF0dGVuIGEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXksIHB1dCBhbGwgZWxlbWVudHMgaW4gYSBvbmUgZGltZW5zaW9uYWxcbiAqIGFycmF5XG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSAgIEEgbXVsdGkgZGltZW5zaW9uYWwgYXJyYXlcbiAqIEByZXR1cm4ge0FycmF5fSAgICAgICAgVGhlIGZsYXR0ZW5lZCBhcnJheSAoMSBkaW1lbnNpb25hbClcbiAqL1xuXG5cbmZ1bmN0aW9uIGZsYXR0ZW4oYXJyYXkpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5KSkge1xuICAgIC8vIGlmIG5vdCBhbiBhcnJheSwgcmV0dXJuIGFzIGlzXG4gICAgcmV0dXJuIGFycmF5O1xuICB9XG5cbiAgdmFyIGZsYXQgPSBbXTtcbiAgYXJyYXkuZm9yRWFjaChmdW5jdGlvbiBjYWxsYmFjayh2YWx1ZSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgdmFsdWUuZm9yRWFjaChjYWxsYmFjayk7IC8vIHRyYXZlcnNlIHRocm91Z2ggc3ViLWFycmF5cyByZWN1cnNpdmVseVxuICAgIH0gZWxzZSB7XG4gICAgICBmbGF0LnB1c2godmFsdWUpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBmbGF0O1xufVxuLyoqXG4gKiBBIHNhZmUgbWFwXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqL1xuXG5cbmZ1bmN0aW9uIG1hcChhcnJheSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbChhcnJheSwgY2FsbGJhY2spO1xufVxuLyoqXG4gKiBBIHNhZmUgZm9yRWFjaFxuICogQHBhcmFtIHtBcnJheX0gYXJyYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKi9cblxuXG5mdW5jdGlvbiBmb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGFycmF5LCBjYWxsYmFjayk7XG59XG4vKipcbiAqIEEgc2FmZSBmaWx0ZXJcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICovXG5cblxuZnVuY3Rpb24gZmlsdGVyKGFycmF5LCBjYWxsYmFjaykge1xuICBpZiAoYXJyYXlTaXplKGFycmF5KS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgb25lIGRpbWVuc2lvbmFsIG1hdHJpY2VzIHN1cHBvcnRlZCcpO1xuICB9XG5cbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChhcnJheSwgY2FsbGJhY2spO1xufVxuLyoqXG4gKiBGaWx0ZXIgdmFsdWVzIGluIGEgY2FsbGJhY2sgZ2l2ZW4gYSByZWd1bGFyIGV4cHJlc3Npb25cbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge1JlZ0V4cH0gcmVnZXhwXG4gKiBAcmV0dXJuIHtBcnJheX0gUmV0dXJucyB0aGUgZmlsdGVyZWQgYXJyYXlcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBmaWx0ZXJSZWdFeHAoYXJyYXksIHJlZ2V4cCkge1xuICBpZiAoYXJyYXlTaXplKGFycmF5KS5sZW5ndGggIT09IDEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ09ubHkgb25lIGRpbWVuc2lvbmFsIG1hdHJpY2VzIHN1cHBvcnRlZCcpO1xuICB9XG5cbiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbChhcnJheSwgZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgcmV0dXJuIHJlZ2V4cC50ZXN0KGVudHJ5KTtcbiAgfSk7XG59XG4vKipcbiAqIEEgc2FmZSBqb2luXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICogQHBhcmFtIHtzdHJpbmd9IHNlcGFyYXRvclxuICovXG5cblxuZnVuY3Rpb24gam9pbihhcnJheSwgc2VwYXJhdG9yKSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuam9pbi5jYWxsKGFycmF5LCBzZXBhcmF0b3IpO1xufVxuLyoqXG4gKiBBc3NpZ24gYSBudW1lcmljIGlkZW50aWZpZXIgdG8gZXZlcnkgZWxlbWVudCBvZiBhIHNvcnRlZCBhcnJheVxuICogQHBhcmFtIHtBcnJheX0gYSAgQW4gYXJyYXlcbiAqIEByZXR1cm4ge0FycmF5fSBBbiBhcnJheSBvZiBvYmplY3RzIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIHZhbHVlIGFuZCBpdHMgaWRlbnRpZmllclxuICovXG5cblxuZnVuY3Rpb24gaWRlbnRpZnkoYSkge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoYSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcnJheSBpbnB1dCBleHBlY3RlZCcpO1xuICB9XG5cbiAgaWYgKGEubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGE7XG4gIH1cblxuICB2YXIgYiA9IFtdO1xuICB2YXIgY291bnQgPSAwO1xuICBiWzBdID0ge1xuICAgIHZhbHVlOiBhWzBdLFxuICAgIGlkZW50aWZpZXI6IDBcbiAgfTtcblxuICBmb3IgKHZhciBpID0gMTsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYVtpXSA9PT0gYVtpIC0gMV0pIHtcbiAgICAgIGNvdW50Kys7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvdW50ID0gMDtcbiAgICB9XG5cbiAgICBiLnB1c2goe1xuICAgICAgdmFsdWU6IGFbaV0sXG4gICAgICBpZGVudGlmaWVyOiBjb3VudFxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGI7XG59XG4vKipcbiAqIFJlbW92ZSB0aGUgbnVtZXJpYyBpZGVudGlmaWVyIGZyb20gdGhlIGVsZW1lbnRzXG4gKiBAcGFyYW0ge2FycmF5fSBhICBBbiBhcnJheVxuICogQHJldHVybiB7YXJyYXl9IEFuIGFycmF5IG9mIHZhbHVlcyB3aXRob3V0IGlkZW50aWZpZXJzXG4gKi9cblxuXG5mdW5jdGlvbiBnZW5lcmFsaXplKGEpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJyYXkgaW5wdXQgZXhwZWN0ZWQnKTtcbiAgfVxuXG4gIGlmIChhLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBhO1xuICB9XG5cbiAgdmFyIGIgPSBbXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICBiLnB1c2goYVtpXS52YWx1ZSk7XG4gIH1cblxuICByZXR1cm4gYjtcbn1cbi8qKlxuICogQ2hlY2sgdGhlIGRhdGF0eXBlIG9mIGEgZ2l2ZW4gb2JqZWN0XG4gKiBUaGlzIGlzIGEgbG93IGxldmVsIGltcGxlbWVudGF0aW9uIHRoYXQgc2hvdWxkIG9ubHkgYmUgdXNlZCBieVxuICogcGFyZW50IE1hdHJpeCBjbGFzc2VzIHN1Y2ggYXMgU3BhcnNlTWF0cml4IG9yIERlbnNlTWF0cml4XG4gKiBUaGlzIG1ldGhvZCBkb2VzIG5vdCB2YWxpZGF0ZSBBcnJheSBNYXRyaXggc2hhcGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSB0eXBlT2YgICBDYWxsYmFjayBmdW5jdGlvbiB0byB1c2UgdG8gZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIGEgdmFsdWVcbiAqIEByZXR1cm4gc3RyaW5nXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRBcnJheURhdGFUeXBlKGFycmF5LCB0eXBlT2YpIHtcbiAgdmFyIHR5cGU7IC8vIHRvIGhvbGQgdHlwZSBpbmZvXG5cbiAgdmFyIGxlbmd0aCA9IDA7IC8vIHRvIGhvbGQgbGVuZ3RoIHZhbHVlIHRvIGVuc3VyZSBpdCBoYXMgY29uc2lzdGVudCBzaXplc1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaXRlbSA9IGFycmF5W2ldO1xuICAgIHZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShpdGVtKTsgLy8gU2F2aW5nIHRoZSB0YXJnZXQgbWF0cml4IHJvdyBzaXplXG5cbiAgICBpZiAoaSA9PT0gMCAmJiBpc0FycmF5KSB7XG4gICAgICBsZW5ndGggPSBpdGVtLmxlbmd0aDtcbiAgICB9IC8vIElmIHRoZSBjdXJyZW50IGl0ZW0gaXMgYW4gYXJyYXkgYnV0IHRoZSBsZW5ndGggZG9lcyBub3QgZXF1YWwgdGhlIHRhcmdldFZlY3RvclNpemVcblxuXG4gICAgaWYgKGlzQXJyYXkgJiYgaXRlbS5sZW5ndGggIT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB2YXIgaXRlbVR5cGUgPSBpc0FycmF5ID8gZ2V0QXJyYXlEYXRhVHlwZShpdGVtLCB0eXBlT2YpIC8vIHJlY3Vyc2UgaW50byBhIG5lc3RlZCBhcnJheVxuICAgIDogdHlwZU9mKGl0ZW0pO1xuXG4gICAgaWYgKHR5cGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdHlwZSA9IGl0ZW1UeXBlOyAvLyBmaXJzdCBpdGVtXG4gICAgfSBlbHNlIGlmICh0eXBlICE9PSBpdGVtVHlwZSkge1xuICAgICAgcmV0dXJuICdtaXhlZCc7XG4gICAgfSBlbHNlIHsvLyB3ZSdyZSBnb29kLCBldmVyeXRoaW5nIGhhcyB0aGUgc2FtZSB0eXBlIHNvIGZhclxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0eXBlO1xufVxuLyoqXG4gKiBSZXR1cm4gdGhlIGxhc3QgaXRlbSBmcm9tIGFuIGFycmF5XG4gKiBAcGFyYW0gYXJyYXlcbiAqIEByZXR1cm5zIHsqfVxuICovXG5cblxuZnVuY3Rpb24gbGFzdChhcnJheSkge1xuICByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07XG59XG4vKipcbiAqIEdldCBhbGwgYnV0IHRoZSBsYXN0IGVsZW1lbnQgb2YgYXJyYXkuXG4gKi9cblxuXG5mdW5jdGlvbiBpbml0aWFsKGFycmF5KSB7XG4gIHJldHVybiBhcnJheS5zbGljZSgwLCBhcnJheS5sZW5ndGggLSAxKTtcbn1cbi8qKlxuICogVGVzdCB3aGV0aGVyIGFuIGFycmF5IG9yIHN0cmluZyBjb250YWlucyBhbiBpdGVtXG4gKiBAcGFyYW0ge0FycmF5IHwgc3RyaW5nfSBhcnJheVxuICogQHBhcmFtIHsqfSBpdGVtXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5cblxuZnVuY3Rpb24gY29udGFpbnMoYXJyYXksIGl0ZW0pIHtcbiAgcmV0dXJuIGFycmF5LmluZGV4T2YoaXRlbSkgIT09IC0xO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5iaXRBbmRCaWdOdW1iZXIgPSBiaXRBbmRCaWdOdW1iZXI7XG5leHBvcnRzLmJpdE5vdEJpZ051bWJlciA9IGJpdE5vdEJpZ051bWJlcjtcbmV4cG9ydHMuYml0T3JCaWdOdW1iZXIgPSBiaXRPckJpZ051bWJlcjtcbmV4cG9ydHMuYml0d2lzZSA9IGJpdHdpc2U7XG5leHBvcnRzLmJpdFhvciA9IGJpdFhvcjtcbmV4cG9ydHMubGVmdFNoaWZ0QmlnTnVtYmVyID0gbGVmdFNoaWZ0QmlnTnVtYmVyO1xuZXhwb3J0cy5yaWdodEFyaXRoU2hpZnRCaWdOdW1iZXIgPSByaWdodEFyaXRoU2hpZnRCaWdOdW1iZXI7XG5cbi8qKlxuICogQml0d2lzZSBhbmQgZm9yIEJpZ251bWJlcnNcbiAqXG4gKiBTcGVjaWFsIENhc2VzOlxuICogICBOICYgIG4gPSAgTlxuICogICBuICYgIDAgPSAgMFxuICogICBuICYgLTEgPSAgblxuICogICBuICYgIG4gPSAgblxuICogICBJICYgIEkgPSAgSVxuICogIC1JICYgLUkgPSAtSVxuICogICBJICYgLUkgPSAgMFxuICogICBJICYgIG4gPSAgblxuICogICBJICYgLW4gPSAgSVxuICogIC1JICYgIG4gPSAgMFxuICogIC1JICYgLW4gPSAtSVxuICpcbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB4XG4gKiBAcGFyYW0ge0JpZ051bWJlcn0geVxuICogQHJldHVybiB7QmlnTnVtYmVyfSBSZXN1bHQgb2YgYHhgICYgYHlgLCBpcyBmdWxseSBwcmVjaXNlXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBiaXRBbmRCaWdOdW1iZXIoeCwgeSkge1xuICBpZiAoeC5pc0Zpbml0ZSgpICYmICF4LmlzSW50ZWdlcigpIHx8IHkuaXNGaW5pdGUoKSAmJiAheS5pc0ludGVnZXIoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW50ZWdlcnMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gYml0QW5kJyk7XG4gIH1cblxuICB2YXIgQmlnTnVtYmVyID0geC5jb25zdHJ1Y3RvcjtcblxuICBpZiAoeC5pc05hTigpIHx8IHkuaXNOYU4oKSkge1xuICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XG4gIH1cblxuICBpZiAoeC5pc1plcm8oKSB8fCB5LmVxKC0xKSB8fCB4LmVxKHkpKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cblxuICBpZiAoeS5pc1plcm8oKSB8fCB4LmVxKC0xKSkge1xuICAgIHJldHVybiB5O1xuICB9XG5cbiAgaWYgKCF4LmlzRmluaXRlKCkgfHwgIXkuaXNGaW5pdGUoKSkge1xuICAgIGlmICgheC5pc0Zpbml0ZSgpICYmICF5LmlzRmluaXRlKCkpIHtcbiAgICAgIGlmICh4LmlzTmVnYXRpdmUoKSA9PT0geS5pc05lZ2F0aXZlKCkpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKDApO1xuICAgIH1cblxuICAgIGlmICgheC5pc0Zpbml0ZSgpKSB7XG4gICAgICBpZiAoeS5pc05lZ2F0aXZlKCkpIHtcbiAgICAgICAgcmV0dXJuIHg7XG4gICAgICB9XG5cbiAgICAgIGlmICh4LmlzTmVnYXRpdmUoKSkge1xuICAgICAgICByZXR1cm4gbmV3IEJpZ051bWJlcigwKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHk7XG4gICAgfVxuXG4gICAgaWYgKCF5LmlzRmluaXRlKCkpIHtcbiAgICAgIGlmICh4LmlzTmVnYXRpdmUoKSkge1xuICAgICAgICByZXR1cm4geTtcbiAgICAgIH1cblxuICAgICAgaWYgKHkuaXNOZWdhdGl2ZSgpKSB7XG4gICAgICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKDApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4geDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYml0d2lzZSh4LCB5LCBmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBhICYgYjtcbiAgfSk7XG59XG4vKipcbiAqIEJpdHdpc2Ugbm90XG4gKiBAcGFyYW0ge0JpZ051bWJlcn0geFxuICogQHJldHVybiB7QmlnTnVtYmVyfSBSZXN1bHQgb2YgfmB4YCwgZnVsbHkgcHJlY2lzZVxuICpcbiAqL1xuXG5cbmZ1bmN0aW9uIGJpdE5vdEJpZ051bWJlcih4KSB7XG4gIGlmICh4LmlzRmluaXRlKCkgJiYgIXguaXNJbnRlZ2VyKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVnZXIgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gYml0Tm90Jyk7XG4gIH1cblxuICB2YXIgQmlnTnVtYmVyID0geC5jb25zdHJ1Y3RvcjtcbiAgdmFyIHByZXZQcmVjID0gQmlnTnVtYmVyLnByZWNpc2lvbjtcbiAgQmlnTnVtYmVyLmNvbmZpZyh7XG4gICAgcHJlY2lzaW9uOiAxRTlcbiAgfSk7XG4gIHZhciByZXN1bHQgPSB4LnBsdXMobmV3IEJpZ051bWJlcigxKSk7XG4gIHJlc3VsdC5zID0gLXJlc3VsdC5zIHx8IG51bGw7XG4gIEJpZ051bWJlci5jb25maWcoe1xuICAgIHByZWNpc2lvbjogcHJldlByZWNcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIEJpdHdpc2UgT1IgZm9yIEJpZ051bWJlcnNcbiAqXG4gKiBTcGVjaWFsIENhc2VzOlxuICogICBOIHwgIG4gPSAgTlxuICogICBuIHwgIDAgPSAgblxuICogICBuIHwgLTEgPSAtMVxuICogICBuIHwgIG4gPSAgblxuICogICBJIHwgIEkgPSAgSVxuICogIC1JIHwgLUkgPSAtSVxuICogICBJIHwgLW4gPSAtMVxuICogICBJIHwgLUkgPSAtMVxuICogICBJIHwgIG4gPSAgSVxuICogIC1JIHwgIG4gPSAtSVxuICogIC1JIHwgLW4gPSAtblxuICpcbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB4XG4gKiBAcGFyYW0ge0JpZ051bWJlcn0geVxuICogQHJldHVybiB7QmlnTnVtYmVyfSBSZXN1bHQgb2YgYHhgIHwgYHlgLCBmdWxseSBwcmVjaXNlXG4gKi9cblxuXG5mdW5jdGlvbiBiaXRPckJpZ051bWJlcih4LCB5KSB7XG4gIGlmICh4LmlzRmluaXRlKCkgJiYgIXguaXNJbnRlZ2VyKCkgfHwgeS5pc0Zpbml0ZSgpICYmICF5LmlzSW50ZWdlcigpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnRlZ2VycyBleHBlY3RlZCBpbiBmdW5jdGlvbiBiaXRPcicpO1xuICB9XG5cbiAgdmFyIEJpZ051bWJlciA9IHguY29uc3RydWN0b3I7XG5cbiAgaWYgKHguaXNOYU4oKSB8fCB5LmlzTmFOKCkpIHtcbiAgICByZXR1cm4gbmV3IEJpZ051bWJlcihOYU4pO1xuICB9XG5cbiAgdmFyIG5lZ09uZSA9IG5ldyBCaWdOdW1iZXIoLTEpO1xuXG4gIGlmICh4LmlzWmVybygpIHx8IHkuZXEobmVnT25lKSB8fCB4LmVxKHkpKSB7XG4gICAgcmV0dXJuIHk7XG4gIH1cblxuICBpZiAoeS5pc1plcm8oKSB8fCB4LmVxKG5lZ09uZSkpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuXG4gIGlmICgheC5pc0Zpbml0ZSgpIHx8ICF5LmlzRmluaXRlKCkpIHtcbiAgICBpZiAoIXguaXNGaW5pdGUoKSAmJiAheC5pc05lZ2F0aXZlKCkgJiYgeS5pc05lZ2F0aXZlKCkgfHwgeC5pc05lZ2F0aXZlKCkgJiYgIXkuaXNOZWdhdGl2ZSgpICYmICF5LmlzRmluaXRlKCkpIHtcbiAgICAgIHJldHVybiBuZWdPbmU7XG4gICAgfVxuXG4gICAgaWYgKHguaXNOZWdhdGl2ZSgpICYmIHkuaXNOZWdhdGl2ZSgpKSB7XG4gICAgICByZXR1cm4geC5pc0Zpbml0ZSgpID8geCA6IHk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHguaXNGaW5pdGUoKSA/IHkgOiB4O1xuICB9XG5cbiAgcmV0dXJuIGJpdHdpc2UoeCwgeSwgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gYSB8IGI7XG4gIH0pO1xufVxuLyoqXG4gKiBBcHBsaWVzIGJpdHdpc2UgZnVuY3Rpb24gdG8gbnVtYmVyc1xuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHhcbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB5XG4gKiBAcGFyYW0ge2Z1bmN0aW9uIChhLCBiKX0gZnVuY1xuICogQHJldHVybiB7QmlnTnVtYmVyfVxuICovXG5cblxuZnVuY3Rpb24gYml0d2lzZSh4LCB5LCBmdW5jKSB7XG4gIHZhciBCaWdOdW1iZXIgPSB4LmNvbnN0cnVjdG9yO1xuICB2YXIgeEJpdHMsIHlCaXRzO1xuICB2YXIgeFNpZ24gPSArKHgucyA8IDApO1xuICB2YXIgeVNpZ24gPSArKHkucyA8IDApO1xuXG4gIGlmICh4U2lnbikge1xuICAgIHhCaXRzID0gZGVjQ29lZmZpY2llbnRUb0JpbmFyeVN0cmluZyhiaXROb3RCaWdOdW1iZXIoeCkpO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCB4Qml0cy5sZW5ndGg7ICsraSkge1xuICAgICAgeEJpdHNbaV0gXj0gMTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgeEJpdHMgPSBkZWNDb2VmZmljaWVudFRvQmluYXJ5U3RyaW5nKHgpO1xuICB9XG5cbiAgaWYgKHlTaWduKSB7XG4gICAgeUJpdHMgPSBkZWNDb2VmZmljaWVudFRvQmluYXJ5U3RyaW5nKGJpdE5vdEJpZ051bWJlcih5KSk7XG5cbiAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgeUJpdHMubGVuZ3RoOyArK19pKSB7XG4gICAgICB5Qml0c1tfaV0gXj0gMTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgeUJpdHMgPSBkZWNDb2VmZmljaWVudFRvQmluYXJ5U3RyaW5nKHkpO1xuICB9XG5cbiAgdmFyIG1pbkJpdHMsIG1heEJpdHMsIG1pblNpZ247XG5cbiAgaWYgKHhCaXRzLmxlbmd0aCA8PSB5Qml0cy5sZW5ndGgpIHtcbiAgICBtaW5CaXRzID0geEJpdHM7XG4gICAgbWF4Qml0cyA9IHlCaXRzO1xuICAgIG1pblNpZ24gPSB4U2lnbjtcbiAgfSBlbHNlIHtcbiAgICBtaW5CaXRzID0geUJpdHM7XG4gICAgbWF4Qml0cyA9IHhCaXRzO1xuICAgIG1pblNpZ24gPSB5U2lnbjtcbiAgfVxuXG4gIHZhciBzaG9ydExlbiA9IG1pbkJpdHMubGVuZ3RoO1xuICB2YXIgbG9uZ0xlbiA9IG1heEJpdHMubGVuZ3RoO1xuICB2YXIgZXhwRnVuY1ZhbCA9IGZ1bmMoeFNpZ24sIHlTaWduKSBeIDE7XG4gIHZhciBvdXRWYWwgPSBuZXcgQmlnTnVtYmVyKGV4cEZ1bmNWYWwgXiAxKTtcbiAgdmFyIHR3b1Bvd2VyID0gbmV3IEJpZ051bWJlcigxKTtcbiAgdmFyIHR3byA9IG5ldyBCaWdOdW1iZXIoMik7XG4gIHZhciBwcmV2UHJlYyA9IEJpZ051bWJlci5wcmVjaXNpb247XG4gIEJpZ051bWJlci5jb25maWcoe1xuICAgIHByZWNpc2lvbjogMUU5XG4gIH0pO1xuXG4gIHdoaWxlIChzaG9ydExlbiA+IDApIHtcbiAgICBpZiAoZnVuYyhtaW5CaXRzWy0tc2hvcnRMZW5dLCBtYXhCaXRzWy0tbG9uZ0xlbl0pID09PSBleHBGdW5jVmFsKSB7XG4gICAgICBvdXRWYWwgPSBvdXRWYWwucGx1cyh0d29Qb3dlcik7XG4gICAgfVxuXG4gICAgdHdvUG93ZXIgPSB0d29Qb3dlci50aW1lcyh0d28pO1xuICB9XG5cbiAgd2hpbGUgKGxvbmdMZW4gPiAwKSB7XG4gICAgaWYgKGZ1bmMobWluU2lnbiwgbWF4Qml0c1stLWxvbmdMZW5dKSA9PT0gZXhwRnVuY1ZhbCkge1xuICAgICAgb3V0VmFsID0gb3V0VmFsLnBsdXModHdvUG93ZXIpO1xuICAgIH1cblxuICAgIHR3b1Bvd2VyID0gdHdvUG93ZXIudGltZXModHdvKTtcbiAgfVxuXG4gIEJpZ051bWJlci5jb25maWcoe1xuICAgIHByZWNpc2lvbjogcHJldlByZWNcbiAgfSk7XG5cbiAgaWYgKGV4cEZ1bmNWYWwgPT09IDApIHtcbiAgICBvdXRWYWwucyA9IC1vdXRWYWwucztcbiAgfVxuXG4gIHJldHVybiBvdXRWYWw7XG59XG4vKiBFeHRyYWN0ZWQgZnJvbSBkZWNpbWFsLmpzLCBhbmQgZWRpdGVkIHRvIHNwZWNpYWxpemUuICovXG5cblxuZnVuY3Rpb24gZGVjQ29lZmZpY2llbnRUb0JpbmFyeVN0cmluZyh4KSB7XG4gIC8vIENvbnZlcnQgdG8gc3RyaW5nXG4gIHZhciBhID0geC5kOyAvLyBhcnJheSB3aXRoIGRpZ2l0c1xuXG4gIHZhciByID0gYVswXSArICcnO1xuXG4gIGZvciAodmFyIGkgPSAxOyBpIDwgYS5sZW5ndGg7ICsraSkge1xuICAgIHZhciBzID0gYVtpXSArICcnO1xuXG4gICAgZm9yICh2YXIgeiA9IDcgLSBzLmxlbmd0aDsgei0tOykge1xuICAgICAgcyA9ICcwJyArIHM7XG4gICAgfVxuXG4gICAgciArPSBzO1xuICB9XG5cbiAgdmFyIGogPSByLmxlbmd0aDtcblxuICB3aGlsZSAoci5jaGFyQXQoaikgPT09ICcwJykge1xuICAgIGotLTtcbiAgfVxuXG4gIHZhciB4ZSA9IHguZTtcbiAgdmFyIHN0ciA9IHIuc2xpY2UoMCwgaiArIDEgfHwgMSk7XG4gIHZhciBzdHJMID0gc3RyLmxlbmd0aDtcblxuICBpZiAoeGUgPiAwKSB7XG4gICAgaWYgKCsreGUgPiBzdHJMKSB7XG4gICAgICAvLyBBcHBlbmQgemVyb3MuXG4gICAgICB4ZSAtPSBzdHJMO1xuXG4gICAgICB3aGlsZSAoeGUtLSkge1xuICAgICAgICBzdHIgKz0gJzAnO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoeGUgPCBzdHJMKSB7XG4gICAgICBzdHIgPSBzdHIuc2xpY2UoMCwgeGUpICsgJy4nICsgc3RyLnNsaWNlKHhlKTtcbiAgICB9XG4gIH0gLy8gQ29udmVydCBmcm9tIGJhc2UgMTAgKGRlY2ltYWwpIHRvIGJhc2UgMlxuXG5cbiAgdmFyIGFyciA9IFswXTtcblxuICBmb3IgKHZhciBfaTIgPSAwOyBfaTIgPCBzdHIubGVuZ3RoOykge1xuICAgIHZhciBhcnJMID0gYXJyLmxlbmd0aDtcblxuICAgIHdoaWxlIChhcnJMLS0pIHtcbiAgICAgIGFyclthcnJMXSAqPSAxMDtcbiAgICB9XG5cbiAgICBhcnJbMF0gKz0gcGFyc2VJbnQoc3RyLmNoYXJBdChfaTIrKykpOyAvLyBjb252ZXJ0IHRvIGludFxuXG4gICAgZm9yICh2YXIgX2ogPSAwOyBfaiA8IGFyci5sZW5ndGg7ICsrX2opIHtcbiAgICAgIGlmIChhcnJbX2pdID4gMSkge1xuICAgICAgICBpZiAoYXJyW19qICsgMV0gPT09IG51bGwgfHwgYXJyW19qICsgMV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFycltfaiArIDFdID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGFycltfaiArIDFdICs9IGFycltfal0gPj4gMTtcbiAgICAgICAgYXJyW19qXSAmPSAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBhcnIucmV2ZXJzZSgpO1xufVxuLyoqXG4gKiBCaXR3aXNlIFhPUiBmb3IgQmlnTnVtYmVyc1xuICpcbiAqIFNwZWNpYWwgQ2FzZXM6XG4gKiAgIE4gXiAgbiA9ICBOXG4gKiAgIG4gXiAgMCA9ICBuXG4gKiAgIG4gXiAgbiA9ICAwXG4gKiAgIG4gXiAtMSA9IH5uXG4gKiAgIEkgXiAgbiA9ICBJXG4gKiAgIEkgXiAtbiA9IC1JXG4gKiAgIEkgXiAtSSA9IC0xXG4gKiAgLUkgXiAgbiA9IC1JXG4gKiAgLUkgXiAtbiA9ICBJXG4gKlxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHhcbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtCaWdOdW1iZXJ9IFJlc3VsdCBvZiBgeGAgXiBgeWAsIGZ1bGx5IHByZWNpc2VcbiAqXG4gKi9cblxuXG5mdW5jdGlvbiBiaXRYb3IoeCwgeSkge1xuICBpZiAoeC5pc0Zpbml0ZSgpICYmICF4LmlzSW50ZWdlcigpIHx8IHkuaXNGaW5pdGUoKSAmJiAheS5pc0ludGVnZXIoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW50ZWdlcnMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gYml0WG9yJyk7XG4gIH1cblxuICB2YXIgQmlnTnVtYmVyID0geC5jb25zdHJ1Y3RvcjtcblxuICBpZiAoeC5pc05hTigpIHx8IHkuaXNOYU4oKSkge1xuICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XG4gIH1cblxuICBpZiAoeC5pc1plcm8oKSkge1xuICAgIHJldHVybiB5O1xuICB9XG5cbiAgaWYgKHkuaXNaZXJvKCkpIHtcbiAgICByZXR1cm4geDtcbiAgfVxuXG4gIGlmICh4LmVxKHkpKSB7XG4gICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoMCk7XG4gIH1cblxuICB2YXIgbmVnT25lID0gbmV3IEJpZ051bWJlcigtMSk7XG5cbiAgaWYgKHguZXEobmVnT25lKSkge1xuICAgIHJldHVybiBiaXROb3RCaWdOdW1iZXIoeSk7XG4gIH1cblxuICBpZiAoeS5lcShuZWdPbmUpKSB7XG4gICAgcmV0dXJuIGJpdE5vdEJpZ051bWJlcih4KTtcbiAgfVxuXG4gIGlmICgheC5pc0Zpbml0ZSgpIHx8ICF5LmlzRmluaXRlKCkpIHtcbiAgICBpZiAoIXguaXNGaW5pdGUoKSAmJiAheS5pc0Zpbml0ZSgpKSB7XG4gICAgICByZXR1cm4gbmVnT25lO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKHguaXNOZWdhdGl2ZSgpID09PSB5LmlzTmVnYXRpdmUoKSA/IEluZmluaXR5IDogLUluZmluaXR5KTtcbiAgfVxuXG4gIHJldHVybiBiaXR3aXNlKHgsIHksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIGEgXiBiO1xuICB9KTtcbn1cbi8qKlxuICogQml0d2lzZSBsZWZ0IHNoaWZ0XG4gKlxuICogU3BlY2lhbCBDYXNlczpcbiAqICBuIDw8IC1uID0gTlxuICogIG4gPDwgIE4gPSBOXG4gKiAgTiA8PCAgbiA9IE5cbiAqICBuIDw8ICAwID0gblxuICogIDAgPDwgIG4gPSAwXG4gKiAgSSA8PCAgSSA9IE5cbiAqICBJIDw8ICBuID0gSVxuICogIG4gPDwgIEkgPSBJXG4gKlxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHhcbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB5XG4gKiBAcmV0dXJuIHtCaWdOdW1iZXJ9IFJlc3VsdCBvZiBgeGAgPDwgYHlgXG4gKlxuICovXG5cblxuZnVuY3Rpb24gbGVmdFNoaWZ0QmlnTnVtYmVyKHgsIHkpIHtcbiAgaWYgKHguaXNGaW5pdGUoKSAmJiAheC5pc0ludGVnZXIoKSB8fCB5LmlzRmluaXRlKCkgJiYgIXkuaXNJbnRlZ2VyKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludGVnZXJzIGV4cGVjdGVkIGluIGZ1bmN0aW9uIGxlZnRTaGlmdCcpO1xuICB9XG5cbiAgdmFyIEJpZ051bWJlciA9IHguY29uc3RydWN0b3I7XG5cbiAgaWYgKHguaXNOYU4oKSB8fCB5LmlzTmFOKCkgfHwgeS5pc05lZ2F0aXZlKCkgJiYgIXkuaXNaZXJvKCkpIHtcbiAgICByZXR1cm4gbmV3IEJpZ051bWJlcihOYU4pO1xuICB9XG5cbiAgaWYgKHguaXNaZXJvKCkgfHwgeS5pc1plcm8oKSkge1xuICAgIHJldHVybiB4O1xuICB9XG5cbiAgaWYgKCF4LmlzRmluaXRlKCkgJiYgIXkuaXNGaW5pdGUoKSkge1xuICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XG4gIH0gLy8gTWF0aC5wb3coMiwgeSkgaXMgZnVsbHkgcHJlY2lzZSBmb3IgeSA8IDU1LCBhbmQgZmFzdFxuXG5cbiAgaWYgKHkubHQoNTUpKSB7XG4gICAgcmV0dXJuIHgudGltZXMoTWF0aC5wb3coMiwgeS50b051bWJlcigpKSArICcnKTtcbiAgfVxuXG4gIHJldHVybiB4LnRpbWVzKG5ldyBCaWdOdW1iZXIoMikucG93KHkpKTtcbn1cbi8qXG4gKiBTcGVjaWFsIENhc2VzOlxuICogICBuID4+IC1uID0gIE5cbiAqICAgbiA+PiAgTiA9ICBOXG4gKiAgIE4gPj4gIG4gPSAgTlxuICogICBJID4+ICBJID0gIE5cbiAqICAgbiA+PiAgMCA9ICBuXG4gKiAgIEkgPj4gIG4gPSAgSVxuICogIC1JID4+ICBuID0gLUlcbiAqICAtSSA+PiAgSSA9IC1JXG4gKiAgIG4gPj4gIEkgPSAgSVxuICogIC1uID4+ICBJID0gLTFcbiAqICAgMCA+PiAgbiA9ICAwXG4gKlxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge0JpZ051bWJlcn0gdmFsdWVcbiAqIEByZXR1cm4ge0JpZ051bWJlcn0gUmVzdWx0IG9mIGB4YCA+PiBgeWBcbiAqXG4gKi9cblxuXG5mdW5jdGlvbiByaWdodEFyaXRoU2hpZnRCaWdOdW1iZXIoeCwgeSkge1xuICBpZiAoeC5pc0Zpbml0ZSgpICYmICF4LmlzSW50ZWdlcigpIHx8IHkuaXNGaW5pdGUoKSAmJiAheS5pc0ludGVnZXIoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW50ZWdlcnMgZXhwZWN0ZWQgaW4gZnVuY3Rpb24gcmlnaHRBcml0aFNoaWZ0Jyk7XG4gIH1cblxuICB2YXIgQmlnTnVtYmVyID0geC5jb25zdHJ1Y3RvcjtcblxuICBpZiAoeC5pc05hTigpIHx8IHkuaXNOYU4oKSB8fCB5LmlzTmVnYXRpdmUoKSAmJiAheS5pc1plcm8oKSkge1xuICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKE5hTik7XG4gIH1cblxuICBpZiAoeC5pc1plcm8oKSB8fCB5LmlzWmVybygpKSB7XG4gICAgcmV0dXJuIHg7XG4gIH1cblxuICBpZiAoIXkuaXNGaW5pdGUoKSkge1xuICAgIGlmICh4LmlzTmVnYXRpdmUoKSkge1xuICAgICAgcmV0dXJuIG5ldyBCaWdOdW1iZXIoLTEpO1xuICAgIH1cblxuICAgIGlmICgheC5pc0Zpbml0ZSgpKSB7XG4gICAgICByZXR1cm4gbmV3IEJpZ051bWJlcihOYU4pO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgQmlnTnVtYmVyKDApO1xuICB9IC8vIE1hdGgucG93KDIsIHkpIGlzIGZ1bGx5IHByZWNpc2UgZm9yIHkgPCA1NSwgYW5kIGZhc3RcblxuXG4gIGlmICh5Lmx0KDU1KSkge1xuICAgIHJldHVybiB4LmRpdihNYXRoLnBvdygyLCB5LnRvTnVtYmVyKCkpICsgJycpLmZsb29yKCk7XG4gIH1cblxuICByZXR1cm4geC5kaXYobmV3IEJpZ051bWJlcigyKS5wb3coeSkpLmZsb29yKCk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNyZWF0ZUJpZ051bWJlclRhdSA9IGV4cG9ydHMuY3JlYXRlQmlnTnVtYmVyUGkgPSBleHBvcnRzLmNyZWF0ZUJpZ051bWJlclBoaSA9IGV4cG9ydHMuY3JlYXRlQmlnTnVtYmVyRSA9IHZvaWQgMDtcblxudmFyIF9mdW5jdGlvbiA9IHJlcXVpcmUoXCIuLi9mdW5jdGlvblwiKTtcblxuLyoqXG4gKiBDYWxjdWxhdGUgQmlnTnVtYmVyIGVcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IEJpZ051bWJlciAgIEJpZ051bWJlciBjb25zdHJ1Y3RvclxuICogQHJldHVybnMge0JpZ051bWJlcn0gUmV0dXJucyBlXG4gKi9cbnZhciBjcmVhdGVCaWdOdW1iZXJFID0gKDAsIF9mdW5jdGlvbi5tZW1vaXplKShmdW5jdGlvbiAoQmlnTnVtYmVyKSB7XG4gIHJldHVybiBuZXcgQmlnTnVtYmVyKDEpLmV4cCgpO1xufSwgaGFzaGVyKTtcbi8qKlxuICogQ2FsY3VsYXRlIEJpZ051bWJlciBnb2xkZW4gcmF0aW8sIHBoaSA9ICgxK3NxcnQoNSkpLzJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IEJpZ051bWJlciAgIEJpZ051bWJlciBjb25zdHJ1Y3RvclxuICogQHJldHVybnMge0JpZ051bWJlcn0gUmV0dXJucyBwaGlcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZUJpZ051bWJlckUgPSBjcmVhdGVCaWdOdW1iZXJFO1xudmFyIGNyZWF0ZUJpZ051bWJlclBoaSA9ICgwLCBfZnVuY3Rpb24ubWVtb2l6ZSkoZnVuY3Rpb24gKEJpZ051bWJlcikge1xuICByZXR1cm4gbmV3IEJpZ051bWJlcigxKS5wbHVzKG5ldyBCaWdOdW1iZXIoNSkuc3FydCgpKS5kaXYoMik7XG59LCBoYXNoZXIpO1xuLyoqXG4gKiBDYWxjdWxhdGUgQmlnTnVtYmVyIHBpLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gQmlnTnVtYmVyICAgQmlnTnVtYmVyIGNvbnN0cnVjdG9yXG4gKiBAcmV0dXJucyB7QmlnTnVtYmVyfSBSZXR1cm5zIHBpXG4gKi9cblxuZXhwb3J0cy5jcmVhdGVCaWdOdW1iZXJQaGkgPSBjcmVhdGVCaWdOdW1iZXJQaGk7XG52YXIgY3JlYXRlQmlnTnVtYmVyUGkgPSAoMCwgX2Z1bmN0aW9uLm1lbW9pemUpKGZ1bmN0aW9uIChCaWdOdW1iZXIpIHtcbiAgcmV0dXJuIEJpZ051bWJlci5hY29zKC0xKTtcbn0sIGhhc2hlcik7XG4vKipcbiAqIENhbGN1bGF0ZSBCaWdOdW1iZXIgdGF1LCB0YXUgPSAyICogcGlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IEJpZ051bWJlciAgIEJpZ051bWJlciBjb25zdHJ1Y3RvclxuICogQHJldHVybnMge0JpZ051bWJlcn0gUmV0dXJucyB0YXVcbiAqL1xuXG5leHBvcnRzLmNyZWF0ZUJpZ051bWJlclBpID0gY3JlYXRlQmlnTnVtYmVyUGk7XG52YXIgY3JlYXRlQmlnTnVtYmVyVGF1ID0gKDAsIF9mdW5jdGlvbi5tZW1vaXplKShmdW5jdGlvbiAoQmlnTnVtYmVyKSB7XG4gIHJldHVybiBjcmVhdGVCaWdOdW1iZXJQaShCaWdOdW1iZXIpLnRpbWVzKDIpO1xufSwgaGFzaGVyKTtcbi8qKlxuICogQ3JlYXRlIGEgaGFzaCBmb3IgYSBCaWdOdW1iZXIgY29uc3RydWN0b3IgZnVuY3Rpb24uIFRoZSBjcmVhdGVkIGhhcyBpc1xuICogdGhlIGNvbmZpZ3VyZWQgcHJlY2lzaW9uXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzICAgICAgICAgU3VwcG9zZWQgdG8gY29udGFpbiBhIHNpbmdsZSBlbnRyeSB3aXRoXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYSBCaWdOdW1iZXIgY29uc3RydWN0b3JcbiAqIEByZXR1cm4ge251bWJlcn0gcHJlY2lzaW9uXG4gKiBAcHJpdmF0ZVxuICovXG5cbmV4cG9ydHMuY3JlYXRlQmlnTnVtYmVyVGF1ID0gY3JlYXRlQmlnTnVtYmVyVGF1O1xuXG5mdW5jdGlvbiBoYXNoZXIoYXJncykge1xuICByZXR1cm4gYXJnc1swXS5wcmVjaXNpb247XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmZvcm1hdCA9IGZvcm1hdDtcbmV4cG9ydHMudG9FbmdpbmVlcmluZyA9IHRvRW5naW5lZXJpbmc7XG5leHBvcnRzLnRvRXhwb25lbnRpYWwgPSB0b0V4cG9uZW50aWFsO1xuZXhwb3J0cy50b0ZpeGVkID0gdG9GaXhlZDtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi4vb2JqZWN0XCIpO1xuXG4vKipcbiAqIENvbnZlcnQgYSBCaWdOdW1iZXIgdG8gYSBmb3JtYXR0ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uLlxuICpcbiAqIFN5bnRheDpcbiAqXG4gKiAgICBmb3JtYXQodmFsdWUpXG4gKiAgICBmb3JtYXQodmFsdWUsIG9wdGlvbnMpXG4gKiAgICBmb3JtYXQodmFsdWUsIHByZWNpc2lvbilcbiAqICAgIGZvcm1hdCh2YWx1ZSwgZm4pXG4gKlxuICogV2hlcmU6XG4gKlxuICogICAge251bWJlcn0gdmFsdWUgICBUaGUgdmFsdWUgdG8gYmUgZm9ybWF0dGVkXG4gKiAgICB7T2JqZWN0fSBvcHRpb25zIEFuIG9iamVjdCB3aXRoIGZvcm1hdHRpbmcgb3B0aW9ucy4gQXZhaWxhYmxlIG9wdGlvbnM6XG4gKiAgICAgICAgICAgICAgICAgICAgIHtzdHJpbmd9IG5vdGF0aW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIgbm90YXRpb24uIENob29zZSBmcm9tOlxuICogICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpeGVkJyAgICAgICAgICBBbHdheXMgdXNlIHJlZ3VsYXIgbnVtYmVyIG5vdGF0aW9uLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSAnMTIzLjQwJyBhbmQgJzE0MDAwMDAwJ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgJ2V4cG9uZW50aWFsJyAgICBBbHdheXMgdXNlIGV4cG9uZW50aWFsIG5vdGF0aW9uLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3IgZXhhbXBsZSAnMS4yMzRlKzInIGFuZCAnMS40ZSs3J1xuICogICAgICAgICAgICAgICAgICAgICAgICAgJ2F1dG8nIChkZWZhdWx0KSBSZWd1bGFyIG51bWJlciBub3RhdGlvbiBmb3IgbnVtYmVyc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZpbmcgYW4gYWJzb2x1dGUgdmFsdWUgYmV0d2VlblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgbG93ZXJgIGFuZCBgdXBwZXJgIGJvdW5kcywgYW5kIHVzZXNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwb25lbnRpYWwgbm90YXRpb24gZWxzZXdoZXJlLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb3dlciBib3VuZCBpcyBpbmNsdWRlZCwgdXBwZXIgYm91bmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZXhjbHVkZWQuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlICcxMjMuNCcgYW5kICcxLjRlNycuXG4gKiAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IHByZWNpc2lvbiAgIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMTYgdG8gcm91bmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRpZ2l0cyBvZiB0aGUgbnVtYmVyLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiBjYXNlIG9mIG5vdGF0aW9ucyAnZXhwb25lbnRpYWwnLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5naW5lZXJpbmcnLCBhbmQgJ2F1dG8nLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcHJlY2lzaW9uYCBkZWZpbmVzIHRoZSB0b3RhbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIHJldHVybmVkLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiBjYXNlIG9mIG5vdGF0aW9uICdmaXhlZCcsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBwcmVjaXNpb25gIGRlZmluZXMgdGhlIG51bWJlciBvZlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduaWZpY2FudCBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBwcmVjaXNpb25gIGlzIHVuZGVmaW5lZCBieSBkZWZhdWx0LlxuICogICAgICAgICAgICAgICAgICAgICB7bnVtYmVyfSBsb3dlckV4cCAgICBFeHBvbmVudCBkZXRlcm1pbmluZyB0aGUgbG93ZXIgYm91bmRhcnlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZvcm1hdHRpbmcgYSB2YWx1ZSB3aXRoIGFuIGV4cG9uZW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYG5vdGF0aW9uPSdhdXRvYC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCB2YWx1ZSBpcyBgLTNgLlxuICogICAgICAgICAgICAgICAgICAgICB7bnVtYmVyfSB1cHBlckV4cCAgICBFeHBvbmVudCBkZXRlcm1pbmluZyB0aGUgdXBwZXIgYm91bmRhcnlcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGZvcm1hdHRpbmcgYSB2YWx1ZSB3aXRoIGFuIGV4cG9uZW50XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gYG5vdGF0aW9uPSdhdXRvYC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCB2YWx1ZSBpcyBgNWAuXG4gKiAgICB7RnVuY3Rpb259IGZuICAgIEEgY3VzdG9tIGZvcm1hdHRpbmcgZnVuY3Rpb24uIENhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZVxuICogICAgICAgICAgICAgICAgICAgICBidWlsdC1pbiBub3RhdGlvbnMuIEZ1bmN0aW9uIGBmbmAgaXMgY2FsbGVkIHdpdGggYHZhbHVlYCBhc1xuICogICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIgYW5kIG11c3QgcmV0dXJuIGEgc3RyaW5nLiBJcyB1c2VmdWwgZm9yIGV4YW1wbGUgdG9cbiAqICAgICAgICAgICAgICAgICAgICAgZm9ybWF0IGFsbCB2YWx1ZXMgaW5zaWRlIGEgbWF0cml4IGluIGEgcGFydGljdWxhciB3YXkuXG4gKlxuICogRXhhbXBsZXM6XG4gKlxuICogICAgZm9ybWF0KDYuNCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzYuNCdcbiAqICAgIGZvcm1hdCgxMjQwMDAwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICcxLjI0ZTYnXG4gKiAgICBmb3JtYXQoMS8zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnMC4zMzMzMzMzMzMzMzMzMzMzJ1xuICogICAgZm9ybWF0KDEvMywgMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzAuMzMzJ1xuICogICAgZm9ybWF0KDIxMzg1LCAyKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzIxMDAwJ1xuICogICAgZm9ybWF0KDEyZTgsIHtub3RhdGlvbjogJ2ZpeGVkJ30pICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyAnMTIwMDAwMDAwMCdcbiAqICAgIGZvcm1hdCgyLjMsICAgIHtub3RhdGlvbjogJ2ZpeGVkJywgcHJlY2lzaW9uOiA0fSkgIC8vIHJldHVybnMgJzIuMzAwMCdcbiAqICAgIGZvcm1hdCg1Mi44LCAgIHtub3RhdGlvbjogJ2V4cG9uZW50aWFsJ30pICAgICAgICAgIC8vIHJldHVybnMgJzUuMjhlKzEnXG4gKiAgICBmb3JtYXQoMTI0MDAsICB7bm90YXRpb246ICdlbmdpbmVlcmluZyd9KSAgICAgICAgICAvLyByZXR1cm5zICcxMi40MDBlKzMnXG4gKlxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge09iamVjdCB8IEZ1bmN0aW9uIHwgbnVtYmVyfSBbb3B0aW9uc11cbiAqIEByZXR1cm4ge3N0cmluZ30gc3RyIFRoZSBmb3JtYXR0ZWQgdmFsdWVcbiAqL1xuZnVuY3Rpb24gZm9ybWF0KHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIGhhbmRsZSBmb3JtYXQodmFsdWUsIGZuKVxuICAgIHJldHVybiBvcHRpb25zKHZhbHVlKTtcbiAgfSAvLyBoYW5kbGUgc3BlY2lhbCBjYXNlc1xuXG5cbiAgaWYgKCF2YWx1ZS5pc0Zpbml0ZSgpKSB7XG4gICAgcmV0dXJuIHZhbHVlLmlzTmFOKCkgPyAnTmFOJyA6IHZhbHVlLmd0KDApID8gJ0luZmluaXR5JyA6ICctSW5maW5pdHknO1xuICB9IC8vIGRlZmF1bHQgdmFsdWVzIGZvciBvcHRpb25zXG5cblxuICB2YXIgbm90YXRpb24gPSAnYXV0byc7XG4gIHZhciBwcmVjaXNpb247XG5cbiAgaWYgKG9wdGlvbnMgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIGRldGVybWluZSBub3RhdGlvbiBmcm9tIG9wdGlvbnNcbiAgICBpZiAob3B0aW9ucy5ub3RhdGlvbikge1xuICAgICAgbm90YXRpb24gPSBvcHRpb25zLm5vdGF0aW9uO1xuICAgIH0gLy8gZGV0ZXJtaW5lIHByZWNpc2lvbiBmcm9tIG9wdGlvbnNcblxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnbnVtYmVyJykge1xuICAgICAgcHJlY2lzaW9uID0gb3B0aW9ucztcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMucHJlY2lzaW9uKSB7XG4gICAgICBwcmVjaXNpb24gPSBvcHRpb25zLnByZWNpc2lvbjtcbiAgICB9XG4gIH0gLy8gaGFuZGxlIHRoZSB2YXJpb3VzIG5vdGF0aW9uc1xuXG5cbiAgc3dpdGNoIChub3RhdGlvbikge1xuICAgIGNhc2UgJ2ZpeGVkJzpcbiAgICAgIHJldHVybiB0b0ZpeGVkKHZhbHVlLCBwcmVjaXNpb24pO1xuXG4gICAgY2FzZSAnZXhwb25lbnRpYWwnOlxuICAgICAgcmV0dXJuIHRvRXhwb25lbnRpYWwodmFsdWUsIHByZWNpc2lvbik7XG5cbiAgICBjYXNlICdlbmdpbmVlcmluZyc6XG4gICAgICByZXR1cm4gdG9FbmdpbmVlcmluZyh2YWx1ZSwgcHJlY2lzaW9uKTtcblxuICAgIGNhc2UgJ2F1dG8nOlxuICAgICAge1xuICAgICAgICAvLyBUT0RPOiBjbGVhbiB1cCBzb21lIGRheS4gRGVwcmVjYXRlZCBzaW5jZTogMjAxOC0wMS0yNFxuICAgICAgICAvLyBAZGVwcmVjYXRlZCB1cHBlciBhbmQgbG93ZXIgYXJlIHJlcGxhY2VkIHdpdGggdXBwZXJFeHAgYW5kIGxvd2VyRXhwIHNpbmNlIHY0LjAuMFxuICAgICAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmV4cG9uZW50aWFsICYmIChvcHRpb25zLmV4cG9uZW50aWFsLmxvd2VyICE9PSB1bmRlZmluZWQgfHwgb3B0aW9ucy5leHBvbmVudGlhbC51cHBlciAhPT0gdW5kZWZpbmVkKSkge1xuICAgICAgICAgIHZhciBmaXhlZE9wdGlvbnMgPSAoMCwgX29iamVjdC5tYXBPYmplY3QpKG9wdGlvbnMsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBmaXhlZE9wdGlvbnMuZXhwb25lbnRpYWwgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICBpZiAob3B0aW9ucy5leHBvbmVudGlhbC5sb3dlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmaXhlZE9wdGlvbnMubG93ZXJFeHAgPSBNYXRoLnJvdW5kKE1hdGgubG9nKG9wdGlvbnMuZXhwb25lbnRpYWwubG93ZXIpIC8gTWF0aC5MTjEwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAob3B0aW9ucy5leHBvbmVudGlhbC51cHBlciAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBmaXhlZE9wdGlvbnMudXBwZXJFeHAgPSBNYXRoLnJvdW5kKE1hdGgubG9nKG9wdGlvbnMuZXhwb25lbnRpYWwudXBwZXIpIC8gTWF0aC5MTjEwKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0RlcHJlY2F0aW9uIHdhcm5pbmc6IEZvcm1hdHRpbmcgb3B0aW9ucyBleHBvbmVudGlhbC5sb3dlciBhbmQgZXhwb25lbnRpYWwudXBwZXIgJyArICcobWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZSkgJyArICdhcmUgcmVwbGFjZWQgd2l0aCBleHBvbmVudGlhbC5sb3dlckV4cCBhbmQgZXhwb25lbnRpYWwudXBwZXJFeHAgJyArICcobWluaW11bSBhbmQgbWF4aW11bSBleHBvbmVudCkgc2luY2UgdmVyc2lvbiA0LjAuMC4gJyArICdSZXBsYWNlICcgKyBKU09OLnN0cmluZ2lmeShvcHRpb25zKSArICcgd2l0aCAnICsgSlNPTi5zdHJpbmdpZnkoZml4ZWRPcHRpb25zKSk7XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdCh2YWx1ZSwgZml4ZWRPcHRpb25zKTtcbiAgICAgICAgfSAvLyBkZXRlcm1pbmUgbG93ZXIgYW5kIHVwcGVyIGJvdW5kIGZvciBleHBvbmVudGlhbCBub3RhdGlvbi5cbiAgICAgICAgLy8gVE9ETzogaW1wbGVtZW50IHN1cHBvcnQgZm9yIHVwcGVyIGFuZCBsb3dlciB0byBiZSBCaWdOdW1iZXJzIHRoZW1zZWx2ZXNcblxuXG4gICAgICAgIHZhciBsb3dlckV4cCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5sb3dlckV4cCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5sb3dlckV4cCA6IC0zO1xuICAgICAgICB2YXIgdXBwZXJFeHAgPSBvcHRpb25zICYmIG9wdGlvbnMudXBwZXJFeHAgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMudXBwZXJFeHAgOiA1OyAvLyBoYW5kbGUgc3BlY2lhbCBjYXNlIHplcm9cblxuICAgICAgICBpZiAodmFsdWUuaXNaZXJvKCkpIHJldHVybiAnMCc7IC8vIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB0byBvdXRwdXQgZXhwb25lbnRpYWwgbm90YXRpb25cblxuICAgICAgICB2YXIgc3RyO1xuICAgICAgICB2YXIgcm91bmRlZCA9IHZhbHVlLnRvU2lnbmlmaWNhbnREaWdpdHMocHJlY2lzaW9uKTtcbiAgICAgICAgdmFyIGV4cCA9IHJvdW5kZWQuZTtcblxuICAgICAgICBpZiAoZXhwID49IGxvd2VyRXhwICYmIGV4cCA8IHVwcGVyRXhwKSB7XG4gICAgICAgICAgLy8gbm9ybWFsIG51bWJlciBub3RhdGlvblxuICAgICAgICAgIHN0ciA9IHJvdW5kZWQudG9GaXhlZCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGV4cG9uZW50aWFsIG5vdGF0aW9uXG4gICAgICAgICAgc3RyID0gdG9FeHBvbmVudGlhbCh2YWx1ZSwgcHJlY2lzaW9uKTtcbiAgICAgICAgfSAvLyByZW1vdmUgdHJhaWxpbmcgemVyb3MgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnRcblxuXG4gICAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvKChcXC5cXGQqPykoMCspKSgkfGUpLywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHZhciBkaWdpdHMgPSBhcmd1bWVudHNbMl07XG4gICAgICAgICAgdmFyIGUgPSBhcmd1bWVudHNbNF07XG4gICAgICAgICAgcmV0dXJuIGRpZ2l0cyAhPT0gJy4nID8gZGlnaXRzICsgZSA6IGU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBub3RhdGlvbiBcIicgKyBub3RhdGlvbiArICdcIi4gJyArICdDaG9vc2UgXCJhdXRvXCIsIFwiZXhwb25lbnRpYWxcIiwgb3IgXCJmaXhlZFwiLicpO1xuICB9XG59XG4vKipcbiAqIEZvcm1hdCBhIEJpZ051bWJlciBpbiBlbmdpbmVlcmluZyBub3RhdGlvbi4gTGlrZSAnMS4yM2UrNicsICcyLjNlKzAnLCAnMy41MDBlLTMnXG4gKiBAcGFyYW0ge0JpZ051bWJlciB8IHN0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uXSAgICAgICAgT3B0aW9uYWwgbnVtYmVyIG9mIHNpZ25pZmljYW50IGZpZ3VyZXMgdG8gcmV0dXJuLlxuICovXG5cblxuZnVuY3Rpb24gdG9FbmdpbmVlcmluZyh2YWx1ZSwgcHJlY2lzaW9uKSB7XG4gIC8vIGZpbmQgbmVhcmVzdCBsb3dlciBtdWx0aXBsZSBvZiAzIGZvciBleHBvbmVudFxuICB2YXIgZSA9IHZhbHVlLmU7XG4gIHZhciBuZXdFeHAgPSBlICUgMyA9PT0gMCA/IGUgOiBlIDwgMCA/IGUgLSAzIC0gZSAlIDMgOiBlIC0gZSAlIDM7IC8vIGZpbmQgZGlmZmVyZW5jZSBpbiBleHBvbmVudHMsIGFuZCBjYWxjdWxhdGUgdGhlIHZhbHVlIHdpdGhvdXQgZXhwb25lbnRcblxuICB2YXIgdmFsdWVXaXRob3V0RXhwID0gdmFsdWUubXVsKE1hdGgucG93KDEwLCAtbmV3RXhwKSk7XG4gIHZhciB2YWx1ZVN0ciA9IHZhbHVlV2l0aG91dEV4cC50b1ByZWNpc2lvbihwcmVjaXNpb24pO1xuXG4gIGlmICh2YWx1ZVN0ci5pbmRleE9mKCdlJykgIT09IC0xKSB7XG4gICAgdmFsdWVTdHIgPSB2YWx1ZVdpdGhvdXRFeHAudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZVN0ciArICdlJyArIChlID49IDAgPyAnKycgOiAnJykgKyBuZXdFeHAudG9TdHJpbmcoKTtcbn1cbi8qKlxuICogRm9ybWF0IGEgbnVtYmVyIGluIGV4cG9uZW50aWFsIG5vdGF0aW9uLiBMaWtlICcxLjIzZSs1JywgJzIuM2UrMCcsICczLjUwMGUtMydcbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IFtwcmVjaXNpb25dICBOdW1iZXIgb2YgZGlnaXRzIGluIGZvcm1hdHRlZCBvdXRwdXQuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIG5vdCBwcm92aWRlZCwgdGhlIG1heGltdW0gYXZhaWxhYmxlIGRpZ2l0c1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyB1c2VkLlxuICogQHJldHVybnMge3N0cmluZ30gc3RyXG4gKi9cblxuXG5mdW5jdGlvbiB0b0V4cG9uZW50aWFsKHZhbHVlLCBwcmVjaXNpb24pIHtcbiAgaWYgKHByZWNpc2lvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHZhbHVlLnRvRXhwb25lbnRpYWwocHJlY2lzaW9uIC0gMSk7IC8vIE5vdGUgdGhlIG9mZnNldCBvZiBvbmVcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWUudG9FeHBvbmVudGlhbCgpO1xuICB9XG59XG4vKipcbiAqIEZvcm1hdCBhIG51bWJlciB3aXRoIGZpeGVkIG5vdGF0aW9uLlxuICogQHBhcmFtIHtCaWdOdW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj11bmRlZmluZWRdIE9wdGlvbmFsIG51bWJlciBvZiBkZWNpbWFscyBhZnRlciB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjaW1hbCBwb2ludC4gVW5kZWZpbmVkIGJ5IGRlZmF1bHQuXG4gKi9cblxuXG5mdW5jdGlvbiB0b0ZpeGVkKHZhbHVlLCBwcmVjaXNpb24pIHtcbiAgcmV0dXJuIHZhbHVlLnRvRml4ZWQocHJlY2lzaW9uKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubmVhcmx5RXF1YWwgPSBuZWFybHlFcXVhbDtcblxuLyoqXG4gKiBDb21wYXJlcyB0d28gQmlnTnVtYmVycy5cbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB4ICAgICAgIEZpcnN0IHZhbHVlIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSB7QmlnTnVtYmVyfSB5ICAgICAgIFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gKiBAcGFyYW0ge251bWJlcn0gW2Vwc2lsb25dICBUaGUgbWF4aW11bSByZWxhdGl2ZSBkaWZmZXJlbmNlIGJldHdlZW4geCBhbmQgeVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgZXBzaWxvbiBpcyB1bmRlZmluZWQgb3IgbnVsbCwgdGhlIGZ1bmN0aW9uIHdpbGxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Qgd2hldGhlciB4IGFuZCB5IGFyZSBleGFjdGx5IGVxdWFsLlxuICogQHJldHVybiB7Ym9vbGVhbn0gd2hldGhlciB0aGUgdHdvIG51bWJlcnMgYXJlIG5lYXJseSBlcXVhbFxuICovXG5mdW5jdGlvbiBuZWFybHlFcXVhbCh4LCB5LCBlcHNpbG9uKSB7XG4gIC8vIGlmIGVwc2lsb24gaXMgbnVsbCBvciB1bmRlZmluZWQsIHRlc3Qgd2hldGhlciB4IGFuZCB5IGFyZSBleGFjdGx5IGVxdWFsXG4gIGlmIChlcHNpbG9uID09PSBudWxsIHx8IGVwc2lsb24gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB4LmVxKHkpO1xuICB9IC8vIHVzZSBcIj09XCIgb3BlcmF0b3IsIGhhbmRsZXMgaW5maW5pdGllc1xuXG5cbiAgaWYgKHguZXEoeSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBOYU5cblxuXG4gIGlmICh4LmlzTmFOKCkgfHwgeS5pc05hTigpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIGF0IHRoaXMgcG9pbnQgeCBhbmQgeSBzaG91bGQgYmUgZmluaXRlXG5cblxuICBpZiAoeC5pc0Zpbml0ZSgpICYmIHkuaXNGaW5pdGUoKSkge1xuICAgIC8vIGNoZWNrIG51bWJlcnMgYXJlIHZlcnkgY2xvc2UsIG5lZWRlZCB3aGVuIGNvbXBhcmluZyBudW1iZXJzIG5lYXIgemVyb1xuICAgIHZhciBkaWZmID0geC5taW51cyh5KS5hYnMoKTtcblxuICAgIGlmIChkaWZmLmlzWmVybygpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdXNlIHJlbGF0aXZlIGVycm9yXG4gICAgICB2YXIgbWF4ID0geC5jb25zdHJ1Y3Rvci5tYXgoeC5hYnMoKSwgeS5hYnMoKSk7XG4gICAgICByZXR1cm4gZGlmZi5sdGUobWF4LnRpbWVzKGVwc2lsb24pKTtcbiAgICB9XG4gIH0gLy8gSW5maW5pdGUgYW5kIE51bWJlciBvciBuZWdhdGl2ZSBJbmZpbml0ZSBhbmQgcG9zaXRpdmUgSW5maW5pdGUgY2FzZXNcblxuXG4gIHJldHVybiBmYWxzZTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY29udGFpbnNDb2xsZWN0aW9ucyA9IGNvbnRhaW5zQ29sbGVjdGlvbnM7XG5leHBvcnRzLmRlZXBGb3JFYWNoID0gZGVlcEZvckVhY2g7XG5leHBvcnRzLmRlZXBNYXAgPSBkZWVwTWFwO1xuZXhwb3J0cy5yZWR1Y2UgPSByZWR1Y2U7XG5leHBvcnRzLnNjYXR0ZXIgPSBzY2F0dGVyO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4vaXNcIik7XG5cbnZhciBfSW5kZXhFcnJvciA9IHJlcXVpcmUoXCIuLi9lcnJvci9JbmRleEVycm9yXCIpO1xuXG52YXIgX2FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlcIik7XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIGFuIGFycmF5IGNvbnRhaW5zIGNvbGxlY3Rpb25zXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIHRoZSBhcnJheSBjb250YWlucyBvbmUgb3IgbXVsdGlwbGVcbiAqICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW9ucyAoQXJyYXlzIG9yIE1hdHJpY2VzKS4gUmV0dXJucyBmYWxzZSBvdGhlcndpc2UuXG4gKi9cbmZ1bmN0aW9uIGNvbnRhaW5zQ29sbGVjdGlvbnMoYXJyYXkpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xuICAgIGlmICgoMCwgX2lzLmlzQ29sbGVjdGlvbikoYXJyYXlbaV0pKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG4vKipcbiAqIFJlY3Vyc2l2ZWx5IGxvb3Agb3ZlciBhbGwgZWxlbWVudHMgaW4gYSBnaXZlbiBtdWx0aSBkaW1lbnNpb25hbCBhcnJheVxuICogYW5kIGludm9rZSB0aGUgY2FsbGJhY2sgb24gZWFjaCBvZiB0aGUgZWxlbWVudHMuXG4gKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSBhcnJheVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgICAgIFRoZSBjYWxsYmFjayBtZXRob2QgaXMgaW52b2tlZCB3aXRoIG9uZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlcjogdGhlIGN1cnJlbnQgZWxlbWVudCBpbiB0aGUgYXJyYXlcbiAqL1xuXG5cbmZ1bmN0aW9uIGRlZXBGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBpZiAoKDAsIF9pcy5pc01hdHJpeCkoYXJyYXkpKSB7XG4gICAgYXJyYXkgPSBhcnJheS52YWx1ZU9mKCk7XG4gIH1cblxuICBmb3IgKHZhciBpID0gMCwgaWkgPSBhcnJheS5sZW5ndGg7IGkgPCBpaTsgaSsrKSB7XG4gICAgdmFyIHZhbHVlID0gYXJyYXlbaV07XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGRlZXBGb3JFYWNoKHZhbHVlLCBjYWxsYmFjayk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cbi8qKlxuICogRXhlY3V0ZSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZWxlbWVudCB3aXNlIGZvciBlYWNoIGVsZW1lbnQgaW4gYXJyYXkgYW5kIGFueVxuICogbmVzdGVkIGFycmF5XG4gKiBSZXR1cm5zIGFuIGFycmF5IHdpdGggdGhlIHJlc3VsdHNcbiAqIEBwYXJhbSB7QXJyYXkgfCBNYXRyaXh9IGFycmF5XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayAgIFRoZSBjYWxsYmFjayBpcyBjYWxsZWQgd2l0aCB0d28gcGFyYW1ldGVyczpcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUxIGFuZCB2YWx1ZTIsIHdoaWNoIGNvbnRhaW4gdGhlIGN1cnJlbnRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCBvZiBib3RoIGFycmF5cy5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3NraXBaZXJvc10gSW52b2tlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBub24temVybyB2YWx1ZXMgb25seS5cbiAqXG4gKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gcmVzXG4gKi9cblxuXG5mdW5jdGlvbiBkZWVwTWFwKGFycmF5LCBjYWxsYmFjaywgc2tpcFplcm9zKSB7XG4gIGlmIChhcnJheSAmJiB0eXBlb2YgYXJyYXkubWFwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVE9ETzogcmVwbGFjZSBhcnJheS5tYXAgd2l0aCBhIGZvciBsb29wIHRvIGltcHJvdmUgcGVyZm9ybWFuY2VcbiAgICByZXR1cm4gYXJyYXkubWFwKGZ1bmN0aW9uICh4KSB7XG4gICAgICByZXR1cm4gZGVlcE1hcCh4LCBjYWxsYmFjaywgc2tpcFplcm9zKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gY2FsbGJhY2soYXJyYXkpO1xuICB9XG59XG4vKipcbiAqIFJlZHVjZSBhIGdpdmVuIG1hdHJpeCBvciBhcnJheSB0byBhIG5ldyBtYXRyaXggb3JcbiAqIGFycmF5IHdpdGggb25lIGxlc3MgZGltZW5zaW9uLCBhcHBseWluZyB0aGUgZ2l2ZW5cbiAqIGNhbGxiYWNrIGluIHRoZSBzZWxlY3RlZCBkaW1lbnNpb24uXG4gKiBAcGFyYW0ge0FycmF5IHwgTWF0cml4fSBtYXRcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtBcnJheSB8IE1hdHJpeH0gcmVzXG4gKi9cblxuXG5mdW5jdGlvbiByZWR1Y2UobWF0LCBkaW0sIGNhbGxiYWNrKSB7XG4gIHZhciBzaXplID0gQXJyYXkuaXNBcnJheShtYXQpID8gKDAsIF9hcnJheS5hcnJheVNpemUpKG1hdCkgOiBtYXQuc2l6ZSgpO1xuXG4gIGlmIChkaW0gPCAwIHx8IGRpbSA+PSBzaXplLmxlbmd0aCkge1xuICAgIC8vIFRPRE86IHdvdWxkIGJlIG1vcmUgY2xlYXIgd2hlbiB0aHJvd2luZyBhIERpbWVuc2lvbkVycm9yIGhlcmVcbiAgICB0aHJvdyBuZXcgX0luZGV4RXJyb3IuSW5kZXhFcnJvcihkaW0sIHNpemUubGVuZ3RoKTtcbiAgfVxuXG4gIGlmICgoMCwgX2lzLmlzTWF0cml4KShtYXQpKSB7XG4gICAgcmV0dXJuIG1hdC5jcmVhdGUoX3JlZHVjZShtYXQudmFsdWVPZigpLCBkaW0sIGNhbGxiYWNrKSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIF9yZWR1Y2UobWF0LCBkaW0sIGNhbGxiYWNrKTtcbiAgfVxufVxuLyoqXG4gKiBSZWN1cnNpdmVseSByZWR1Y2UgYSBtYXRyaXhcbiAqIEBwYXJhbSB7QXJyYXl9IG1hdFxuICogQHBhcmFtIHtudW1iZXJ9IGRpbVxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm5zIHtBcnJheX0gcmV0XG4gKiBAcHJpdmF0ZVxuICovXG5cblxuZnVuY3Rpb24gX3JlZHVjZShtYXQsIGRpbSwgY2FsbGJhY2spIHtcbiAgdmFyIGksIHJldCwgdmFsLCB0cmFuO1xuXG4gIGlmIChkaW0gPD0gMCkge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShtYXRbMF0pKSB7XG4gICAgICB2YWwgPSBtYXRbMF07XG5cbiAgICAgIGZvciAoaSA9IDE7IGkgPCBtYXQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFsID0gY2FsbGJhY2sodmFsLCBtYXRbaV0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICB0cmFuID0gX3N3aXRjaChtYXQpO1xuICAgICAgcmV0ID0gW107XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0cmFuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHJldFtpXSA9IF9yZWR1Y2UodHJhbltpXSwgZGltIC0gMSwgY2FsbGJhY2spO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmV0O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXQgPSBbXTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBtYXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJldFtpXSA9IF9yZWR1Y2UobWF0W2ldLCBkaW0gLSAxLCBjYWxsYmFjayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxufVxuLyoqXG4gKiBUcmFuc3Bvc2UgYSBtYXRyaXhcbiAqIEBwYXJhbSB7QXJyYXl9IG1hdFxuICogQHJldHVybnMge0FycmF5fSByZXRcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5mdW5jdGlvbiBfc3dpdGNoKG1hdCkge1xuICB2YXIgSSA9IG1hdC5sZW5ndGg7XG4gIHZhciBKID0gbWF0WzBdLmxlbmd0aDtcbiAgdmFyIGksIGo7XG4gIHZhciByZXQgPSBbXTtcblxuICBmb3IgKGogPSAwOyBqIDwgSjsgaisrKSB7XG4gICAgdmFyIHRtcCA9IFtdO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IEk7IGkrKykge1xuICAgICAgdG1wLnB1c2gobWF0W2ldW2pdKTtcbiAgICB9XG5cbiAgICByZXQucHVzaCh0bXApO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn0gLy8gVE9ETzogZG9jdW1lbnQgZnVuY3Rpb24gc2NhdHRlclxuXG5cbmZ1bmN0aW9uIHNjYXR0ZXIoYSwgaiwgdywgeCwgdSwgbWFyaywgY2luZGV4LCBmLCBpbnZlcnNlLCB1cGRhdGUsIHZhbHVlKSB7XG4gIC8vIGEgYXJyYXlzXG4gIHZhciBhdmFsdWVzID0gYS5fdmFsdWVzO1xuICB2YXIgYWluZGV4ID0gYS5faW5kZXg7XG4gIHZhciBhcHRyID0gYS5fcHRyOyAvLyB2YXJzXG5cbiAgdmFyIGssIGswLCBrMSwgaTsgLy8gY2hlY2sgd2UgbmVlZCB0byBwcm9jZXNzIHZhbHVlcyAocGF0dGVybiBtYXRyaXgpXG5cbiAgaWYgKHgpIHtcbiAgICAvLyB2YWx1ZXMgaW4galxuICAgIGZvciAoazAgPSBhcHRyW2pdLCBrMSA9IGFwdHJbaiArIDFdLCBrID0gazA7IGsgPCBrMTsgaysrKSB7XG4gICAgICAvLyByb3dcbiAgICAgIGkgPSBhaW5kZXhba107IC8vIGNoZWNrIHZhbHVlIGV4aXN0cyBpbiBjdXJyZW50IGpcblxuICAgICAgaWYgKHdbaV0gIT09IG1hcmspIHtcbiAgICAgICAgLy8gaSBpcyBuZXcgZW50cnkgaW4galxuICAgICAgICB3W2ldID0gbWFyazsgLy8gYWRkIGkgdG8gcGF0dGVybiBvZiBDXG5cbiAgICAgICAgY2luZGV4LnB1c2goaSk7IC8vIHgoaSkgPSBBLCBjaGVjayB3ZSBuZWVkIHRvIGNhbGwgZnVuY3Rpb24gdGhpcyB0aW1lXG5cbiAgICAgICAgaWYgKHVwZGF0ZSkge1xuICAgICAgICAgIC8vIGNvcHkgdmFsdWUgdG8gd29ya3NwYWNlIGNhbGxpbmcgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICAgICAgICB4W2ldID0gaW52ZXJzZSA/IGYoYXZhbHVlc1trXSwgdmFsdWUpIDogZih2YWx1ZSwgYXZhbHVlc1trXSk7IC8vIGZ1bmN0aW9uIHdhcyBjYWxsZWQgb24gY3VycmVudCByb3dcblxuICAgICAgICAgIHVbaV0gPSBtYXJrO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGNvcHkgdmFsdWUgdG8gd29ya3NwYWNlXG4gICAgICAgICAgeFtpXSA9IGF2YWx1ZXNba107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGkgZXhpc3RzIGluIEMgYWxyZWFkeVxuICAgICAgICB4W2ldID0gaW52ZXJzZSA/IGYoYXZhbHVlc1trXSwgeFtpXSkgOiBmKHhbaV0sIGF2YWx1ZXNba10pOyAvLyBmdW5jdGlvbiB3YXMgY2FsbGVkIG9uIGN1cnJlbnQgcm93XG5cbiAgICAgICAgdVtpXSA9IG1hcms7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIC8vIHZhbHVlcyBpbiBqXG4gICAgZm9yIChrMCA9IGFwdHJbal0sIGsxID0gYXB0cltqICsgMV0sIGsgPSBrMDsgayA8IGsxOyBrKyspIHtcbiAgICAgIC8vIHJvd1xuICAgICAgaSA9IGFpbmRleFtrXTsgLy8gY2hlY2sgdmFsdWUgZXhpc3RzIGluIGN1cnJlbnQgalxuXG4gICAgICBpZiAod1tpXSAhPT0gbWFyaykge1xuICAgICAgICAvLyBpIGlzIG5ldyBlbnRyeSBpbiBqXG4gICAgICAgIHdbaV0gPSBtYXJrOyAvLyBhZGQgaSB0byBwYXR0ZXJuIG9mIENcblxuICAgICAgICBjaW5kZXgucHVzaChpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGluZGljYXRlIGZ1bmN0aW9uIHdhcyBjYWxsZWQgb24gY3VycmVudCByb3dcbiAgICAgICAgdVtpXSA9IG1hcms7XG4gICAgICB9XG4gICAgfVxuICB9XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmNvbXBsZXhFcXVhbHMgPSBjb21wbGV4RXF1YWxzO1xuXG52YXIgX251bWJlciA9IHJlcXVpcmUoXCIuL251bWJlclwiKTtcblxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgdHdvIGNvbXBsZXggdmFsdWVzIGFyZSBlcXVhbCBwcm92aWRlZCBhIGdpdmVuIGVwc2lsb24uXG4gKiBEb2VzIG5vdCB1c2Ugb3IgY2hhbmdlIHRoZSBnbG9iYWwgQ29tcGxleC5FUFNJTE9OIHNldHRpbmdcbiAqIEBwYXJhbSB7Q29tcGxleH0geFxuICogQHBhcmFtIHtDb21wbGV4fSB5XG4gKiBAcGFyYW0ge251bWJlcn0gZXBzaWxvblxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNvbXBsZXhFcXVhbHMoeCwgeSwgZXBzaWxvbikge1xuICByZXR1cm4gKDAsIF9udW1iZXIubmVhcmx5RXF1YWwpKHgucmUsIHkucmUsIGVwc2lsb24pICYmICgwLCBfbnVtYmVyLm5lYXJseUVxdWFsKSh4LmltLCB5LmltLCBlcHNpbG9uKTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZ2V0U2FmZVByb3BlcnR5ID0gZ2V0U2FmZVByb3BlcnR5O1xuZXhwb3J0cy5zZXRTYWZlUHJvcGVydHkgPSBzZXRTYWZlUHJvcGVydHk7XG5leHBvcnRzLmlzU2FmZVByb3BlcnR5ID0gaXNTYWZlUHJvcGVydHk7XG5leHBvcnRzLnZhbGlkYXRlU2FmZU1ldGhvZCA9IHZhbGlkYXRlU2FmZU1ldGhvZDtcbmV4cG9ydHMuaXNTYWZlTWV0aG9kID0gaXNTYWZlTWV0aG9kO1xuZXhwb3J0cy5pc1BsYWluT2JqZWN0ID0gaXNQbGFpbk9iamVjdDtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi9vYmplY3RcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuLyoqXG4gKiBHZXQgYSBwcm9wZXJ0eSBvZiBhIHBsYWluIG9iamVjdFxuICogVGhyb3dzIGFuIGVycm9yIGluIGNhc2UgdGhlIG9iamVjdCBpcyBub3QgYSBwbGFpbiBvYmplY3Qgb3IgdGhlXG4gKiBwcm9wZXJ0eSBpcyBub3QgZGVmaW5lZCBvbiB0aGUgb2JqZWN0IGl0c2VsZlxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BcbiAqIEByZXR1cm4geyp9IFJldHVybnMgdGhlIHByb3BlcnR5IHZhbHVlIHdoZW4gc2FmZVxuICovXG5mdW5jdGlvbiBnZXRTYWZlUHJvcGVydHkob2JqZWN0LCBwcm9wKSB7XG4gIC8vIG9ubHkgYWxsb3cgZ2V0dGluZyBzYWZlIHByb3BlcnRpZXMgb2YgYSBwbGFpbiBvYmplY3RcbiAgaWYgKGlzUGxhaW5PYmplY3Qob2JqZWN0KSAmJiBpc1NhZmVQcm9wZXJ0eShvYmplY3QsIHByb3ApKSB7XG4gICAgcmV0dXJuIG9iamVjdFtwcm9wXTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqZWN0W3Byb3BdID09PSAnZnVuY3Rpb24nICYmIGlzU2FmZU1ldGhvZChvYmplY3QsIHByb3ApKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYWNjZXNzIG1ldGhvZCBcIicgKyBwcm9wICsgJ1wiIGFzIGEgcHJvcGVydHknKTtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcignTm8gYWNjZXNzIHRvIHByb3BlcnR5IFwiJyArIHByb3AgKyAnXCInKTtcbn1cbi8qKlxuICogU2V0IGEgcHJvcGVydHkgb24gYSBwbGFpbiBvYmplY3QuXG4gKiBUaHJvd3MgYW4gZXJyb3IgaW4gY2FzZSB0aGUgb2JqZWN0IGlzIG5vdCBhIHBsYWluIG9iamVjdCBvciB0aGVcbiAqIHByb3BlcnR5IHdvdWxkIG92ZXJyaWRlIGFuIGluaGVyaXRlZCBwcm9wZXJ0eSBsaWtlIC5jb25zdHJ1Y3RvciBvciAudG9TdHJpbmdcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHsqfSBSZXR1cm5zIHRoZSB2YWx1ZVxuICovXG4vLyBUT0RPOiBtZXJnZSB0aGlzIGZ1bmN0aW9uIGludG8gYWNjZXNzLmpzP1xuXG5cbmZ1bmN0aW9uIHNldFNhZmVQcm9wZXJ0eShvYmplY3QsIHByb3AsIHZhbHVlKSB7XG4gIC8vIG9ubHkgYWxsb3cgc2V0dGluZyBzYWZlIHByb3BlcnRpZXMgb2YgYSBwbGFpbiBvYmplY3RcbiAgaWYgKGlzUGxhaW5PYmplY3Qob2JqZWN0KSAmJiBpc1NhZmVQcm9wZXJ0eShvYmplY3QsIHByb3ApKSB7XG4gICAgb2JqZWN0W3Byb3BdID0gdmFsdWU7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdObyBhY2Nlc3MgdG8gcHJvcGVydHkgXCInICsgcHJvcCArICdcIicpO1xufVxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgYSBwcm9wZXJ0eSBpcyBzYWZlIHRvIHVzZSBmb3IgYW4gb2JqZWN0LlxuICogRm9yIGV4YW1wbGUgLnRvU3RyaW5nIGFuZCAuY29uc3RydWN0b3IgYXJlIG5vdCBzYWZlXG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvcFxuICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW4gc2FmZVxuICovXG5cblxuZnVuY3Rpb24gaXNTYWZlUHJvcGVydHkob2JqZWN0LCBwcm9wKSB7XG4gIGlmICghb2JqZWN0IHx8IF90eXBlb2Yob2JqZWN0KSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gU0FGRTogd2hpdGVsaXN0ZWRcbiAgLy8gZS5nIGxlbmd0aFxuXG5cbiAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShzYWZlTmF0aXZlUHJvcGVydGllcywgcHJvcCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBVTlNBRkU6IGluaGVyaXRlZCBmcm9tIE9iamVjdCBwcm90b3R5cGVcbiAgLy8gZS5nIGNvbnN0cnVjdG9yXG5cblxuICBpZiAocHJvcCBpbiBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgLy8gJ2luJyBpcyB1c2VkIGluc3RlYWQgb2YgaGFzT3duUHJvcGVydHkgZm9yIG5vZGVqcyB2MC4xMFxuICAgIC8vIHdoaWNoIGlzIGluY29uc2lzdGVudCBvbiByb290IHByb3RvdHlwZXMuIEl0IGlzIHNhZmVcbiAgICAvLyBoZXJlIGJlY2F1c2UgT2JqZWN0LnByb3RvdHlwZSBpcyBhIHJvb3Qgb2JqZWN0XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIFVOU0FGRTogaW5oZXJpdGVkIGZyb20gRnVuY3Rpb24gcHJvdG90eXBlXG4gIC8vIGUuZyBjYWxsLCBhcHBseVxuXG5cbiAgaWYgKHByb3AgaW4gRnVuY3Rpb24ucHJvdG90eXBlKSB7XG4gICAgLy8gJ2luJyBpcyB1c2VkIGluc3RlYWQgb2YgaGFzT3duUHJvcGVydHkgZm9yIG5vZGVqcyB2MC4xMFxuICAgIC8vIHdoaWNoIGlzIGluY29uc2lzdGVudCBvbiByb290IHByb3RvdHlwZXMuIEl0IGlzIHNhZmVcbiAgICAvLyBoZXJlIGJlY2F1c2UgRnVuY3Rpb24ucHJvdG90eXBlIGlzIGEgcm9vdCBvYmplY3RcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbi8qKlxuICogVmFsaWRhdGUgd2hldGhlciBhIG1ldGhvZCBpcyBzYWZlLlxuICogVGhyb3dzIGFuIGVycm9yIHdoZW4gdGhhdCdzIG5vdCB0aGUgY2FzZS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RcbiAqL1xuLy8gVE9ETzogbWVyZ2UgdGhpcyBmdW5jdGlvbiBpbnRvIGFzc2lnbi5qcz9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZVNhZmVNZXRob2Qob2JqZWN0LCBtZXRob2QpIHtcbiAgaWYgKCFpc1NhZmVNZXRob2Qob2JqZWN0LCBtZXRob2QpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBhY2Nlc3MgdG8gbWV0aG9kIFwiJyArIG1ldGhvZCArICdcIicpO1xuICB9XG59XG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYSBtZXRob2QgaXMgc2FmZS5cbiAqIFRocm93cyBhbiBlcnJvciB3aGVuIHRoYXQncyBub3QgdGhlIGNhc2UgKGZvciBleGFtcGxlIGZvciBgY29uc3RydWN0b3JgKS5cbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RcbiAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuIHNhZmUsIGZhbHNlIG90aGVyd2lzZVxuICovXG5cblxuZnVuY3Rpb24gaXNTYWZlTWV0aG9kKG9iamVjdCwgbWV0aG9kKSB7XG4gIGlmIChvYmplY3QgPT09IG51bGwgfHwgb2JqZWN0ID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIG9iamVjdFttZXRob2RdICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IC8vIFVOU0FGRTogZ2hvc3RlZFxuICAvLyBlLmcgb3ZlcnJpZGRlbiB0b1N0cmluZ1xuICAvLyBOb3RlIHRoYXQgSUUxMCBkb2Vzbid0IHN1cHBvcnQgX19wcm90b19fIGFuZCB3ZSBjYW4ndCBkbyB0aGlzIGNoZWNrIHRoZXJlLlxuXG5cbiAgaWYgKCgwLCBfb2JqZWN0Lmhhc093blByb3BlcnR5KShvYmplY3QsIG1ldGhvZCkgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mICYmIG1ldGhvZCBpbiBPYmplY3QuZ2V0UHJvdG90eXBlT2Yob2JqZWN0KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBTQUZFOiB3aGl0ZWxpc3RlZFxuICAvLyBlLmcgdG9TdHJpbmdcblxuXG4gIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkoc2FmZU5hdGl2ZU1ldGhvZHMsIG1ldGhvZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBVTlNBRkU6IGluaGVyaXRlZCBmcm9tIE9iamVjdCBwcm90b3R5cGVcbiAgLy8gZS5nIGNvbnN0cnVjdG9yXG5cblxuICBpZiAobWV0aG9kIGluIE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICAvLyAnaW4nIGlzIHVzZWQgaW5zdGVhZCBvZiBoYXNPd25Qcm9wZXJ0eSBmb3Igbm9kZWpzIHYwLjEwXG4gICAgLy8gd2hpY2ggaXMgaW5jb25zaXN0ZW50IG9uIHJvb3QgcHJvdG90eXBlcy4gSXQgaXMgc2FmZVxuICAgIC8vIGhlcmUgYmVjYXVzZSBPYmplY3QucHJvdG90eXBlIGlzIGEgcm9vdCBvYmplY3RcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gLy8gVU5TQUZFOiBpbmhlcml0ZWQgZnJvbSBGdW5jdGlvbiBwcm90b3R5cGVcbiAgLy8gZS5nIGNhbGwsIGFwcGx5XG5cblxuICBpZiAobWV0aG9kIGluIEZ1bmN0aW9uLnByb3RvdHlwZSkge1xuICAgIC8vICdpbicgaXMgdXNlZCBpbnN0ZWFkIG9mIGhhc093blByb3BlcnR5IGZvciBub2RlanMgdjAuMTBcbiAgICAvLyB3aGljaCBpcyBpbmNvbnNpc3RlbnQgb24gcm9vdCBwcm90b3R5cGVzLiBJdCBpcyBzYWZlXG4gICAgLy8gaGVyZSBiZWNhdXNlIEZ1bmN0aW9uLnByb3RvdHlwZSBpcyBhIHJvb3Qgb2JqZWN0XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3Qob2JqZWN0KSB7XG4gIHJldHVybiBfdHlwZW9mKG9iamVjdCkgPT09ICdvYmplY3QnICYmIG9iamVjdCAmJiBvYmplY3QuY29uc3RydWN0b3IgPT09IE9iamVjdDtcbn1cblxudmFyIHNhZmVOYXRpdmVQcm9wZXJ0aWVzID0ge1xuICBsZW5ndGg6IHRydWUsXG4gIG5hbWU6IHRydWVcbn07XG52YXIgc2FmZU5hdGl2ZU1ldGhvZHMgPSB7XG4gIHRvU3RyaW5nOiB0cnVlLFxuICB2YWx1ZU9mOiB0cnVlLFxuICB0b0xvY2FsZVN0cmluZzogdHJ1ZVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWl4aW4gPSBtaXhpbjtcblxudmFyIF90aW55RW1pdHRlciA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcInRpbnktZW1pdHRlclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG4vKipcbiAqIEV4dGVuZCBnaXZlbiBvYmplY3Qgd2l0aCBlbWl0dGVyIGZ1bmN0aW9ucyBgb25gLCBgb2ZmYCwgYG9uY2VgLCBgZW1pdGBcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEByZXR1cm4ge09iamVjdH0gb2JqXG4gKi9cbmZ1bmN0aW9uIG1peGluKG9iaikge1xuICAvLyBjcmVhdGUgZXZlbnQgZW1pdHRlclxuICB2YXIgZW1pdHRlciA9IG5ldyBfdGlueUVtaXR0ZXJbXCJkZWZhdWx0XCJdKCk7IC8vIGJpbmQgbWV0aG9kcyB0byBvYmogKHdlIGRvbid0IHdhbnQgdG8gZXhwb3NlIHRoZSBlbWl0dGVyLmUgQXJyYXkuLi4pXG5cbiAgb2JqLm9uID0gZW1pdHRlci5vbi5iaW5kKGVtaXR0ZXIpO1xuICBvYmoub2ZmID0gZW1pdHRlci5vZmYuYmluZChlbWl0dGVyKTtcbiAgb2JqLm9uY2UgPSBlbWl0dGVyLm9uY2UuYmluZChlbWl0dGVyKTtcbiAgb2JqLmVtaXQgPSBlbWl0dGVyLmVtaXQuYmluZChlbWl0dGVyKTtcbiAgcmV0dXJuIG9iajtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZmFjdG9yeSA9IGZhY3Rvcnk7XG5leHBvcnRzLnNvcnRGYWN0b3JpZXMgPSBzb3J0RmFjdG9yaWVzO1xuZXhwb3J0cy5jcmVhdGUgPSBjcmVhdGU7XG5leHBvcnRzLmlzRmFjdG9yeSA9IGlzRmFjdG9yeTtcbmV4cG9ydHMuYXNzZXJ0RGVwZW5kZW5jaWVzID0gYXNzZXJ0RGVwZW5kZW5jaWVzO1xuZXhwb3J0cy5pc09wdGlvbmFsRGVwZW5kZW5jeSA9IGlzT3B0aW9uYWxEZXBlbmRlbmN5O1xuZXhwb3J0cy5zdHJpcE9wdGlvbmFsTm90YXRpb24gPSBzdHJpcE9wdGlvbmFsTm90YXRpb247XG5cbnZhciBfYXJyYXkgPSByZXF1aXJlKFwiLi9hcnJheVwiKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi9vYmplY3RcIik7XG5cbi8qKlxuICogQ3JlYXRlIGEgZmFjdG9yeSBmdW5jdGlvbiwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gaW5qZWN0IGRlcGVuZGVuY2llcy5cbiAqXG4gKiBUaGUgY3JlYXRlZCBmdW5jdGlvbnMgYXJlIG1lbW9pemVkLCBhIGNvbnNlY3V0aXZlIGNhbGwgb2YgdGhlIGZhY3RvcnlcbiAqIHdpdGggdGhlIGV4YWN0IHNhbWUgaW5wdXRzIHdpbGwgcmV0dXJuIHRoZSBzYW1lIGZ1bmN0aW9uIGluc3RhbmNlLlxuICogVGhlIG1lbW9pemVkIGNhY2hlIGlzIGV4cG9zZWQgb24gYGZhY3RvcnkuY2FjaGVgIGFuZCBjYW4gYmUgY2xlYXJlZFxuICogaWYgbmVlZGVkLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogICAgIGNvbnN0IG5hbWUgPSAnbG9nJ1xuICogICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IFsnY29uZmlnJywgJ3R5cGVkJywgJ2RpdmlkZVNjYWxhcicsICdDb21wbGV4J11cbiAqXG4gKiAgICAgZXhwb3J0IGNvbnN0IGNyZWF0ZUxvZyA9IGZhY3RvcnkobmFtZSwgZGVwZW5kZW5jaWVzLCAoeyB0eXBlZCwgY29uZmlnLCBkaXZpZGVTY2FsYXIsIENvbXBsZXggfSkgPT4ge1xuICogICAgICAgLy8gLi4uIGNyZWF0ZSB0aGUgZnVuY3Rpb24gbG9nIGhlcmUgYW5kIHJldHVybiBpdFxuICogICAgIH1cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgICAgICAgICAgTmFtZSBvZiB0aGUgZnVuY3Rpb24gdG8gYmUgY3JlYXRlZFxuICogQHBhcmFtIHtzdHJpbmdbXX0gZGVwZW5kZW5jaWVzIFRoZSBuYW1lcyBvZiBhbGwgcmVxdWlyZWQgZGVwZW5kZW5jaWVzXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjcmVhdGUgICAgICAgQ2FsbGJhY2sgZnVuY3Rpb24gY2FsbGVkIHdpdGggYW4gb2JqZWN0IHdpdGggYWxsIGRlcGVuZGVuY2llc1xuICogQHBhcmFtIHtPYmplY3R9IFttZXRhXSAgICAgICAgIE9wdGlvbmFsIG9iamVjdCB3aXRoIG1ldGEgaW5mb3JtYXRpb24gdGhhdCB3aWxsIGJlIGF0dGFjaGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGNyZWF0ZWQgZmFjdG9yeSBmdW5jdGlvbiBhcyBwcm9wZXJ0eSBgbWV0YWAuXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIGZhY3RvcnkobmFtZSwgZGVwZW5kZW5jaWVzLCBjcmVhdGUsIG1ldGEpIHtcbiAgZnVuY3Rpb24gYXNzZXJ0QW5kQ3JlYXRlKHNjb3BlKSB7XG4gICAgLy8gd2Ugb25seSBwYXNzIHRoZSByZXF1ZXN0ZWQgZGVwZW5kZW5jaWVzIHRvIHRoZSBmYWN0b3J5IGZ1bmN0aW9uXG4gICAgLy8gdG8gcHJldmVudCBmdW5jdGlvbnMgdG8gcmVseSBvbiBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgbm90IGV4cGxpY2l0bHlcbiAgICAvLyByZXF1ZXN0ZWQuXG4gICAgdmFyIGRlcHMgPSAoMCwgX29iamVjdC5waWNrU2hhbGxvdykoc2NvcGUsIGRlcGVuZGVuY2llcy5tYXAoc3RyaXBPcHRpb25hbE5vdGF0aW9uKSk7XG4gICAgYXNzZXJ0RGVwZW5kZW5jaWVzKG5hbWUsIGRlcGVuZGVuY2llcywgc2NvcGUpO1xuICAgIHJldHVybiBjcmVhdGUoZGVwcyk7XG4gIH1cblxuICBhc3NlcnRBbmRDcmVhdGUuaXNGYWN0b3J5ID0gdHJ1ZTtcbiAgYXNzZXJ0QW5kQ3JlYXRlLmZuID0gbmFtZTtcbiAgYXNzZXJ0QW5kQ3JlYXRlLmRlcGVuZGVuY2llcyA9IGRlcGVuZGVuY2llcy5zbGljZSgpLnNvcnQoKTtcblxuICBpZiAobWV0YSkge1xuICAgIGFzc2VydEFuZENyZWF0ZS5tZXRhID0gbWV0YTtcbiAgfVxuXG4gIHJldHVybiBhc3NlcnRBbmRDcmVhdGU7XG59XG4vKipcbiAqIFNvcnQgYWxsIGZhY3RvcmllcyBzdWNoIHRoYXQgd2hlbiBsb2FkaW5nIGluIG9yZGVyLCB0aGUgZGVwZW5kZW5jaWVzIGFyZSByZXNvbHZlZC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBmYWN0b3JpZXNcbiAqIEByZXR1cm5zIHtBcnJheX0gUmV0dXJucyBhIG5ldyBhcnJheSB3aXRoIHRoZSBzb3J0ZWQgZmFjdG9yaWVzLlxuICovXG5cblxuZnVuY3Rpb24gc29ydEZhY3RvcmllcyhmYWN0b3JpZXMpIHtcbiAgdmFyIGZhY3Rvcmllc0J5TmFtZSA9IHt9O1xuICBmYWN0b3JpZXMuZm9yRWFjaChmdW5jdGlvbiAoZmFjdG9yeSkge1xuICAgIGZhY3Rvcmllc0J5TmFtZVtmYWN0b3J5LmZuXSA9IGZhY3Rvcnk7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGNvbnRhaW5zRGVwZW5kZW5jeShmYWN0b3J5LCBkZXBlbmRlbmN5KSB7XG4gICAgLy8gVE9ETzogZGV0ZWN0IGNpcmN1bGFyIHJlZmVyZW5jZXNcbiAgICBpZiAoaXNGYWN0b3J5KGZhY3RvcnkpKSB7XG4gICAgICBpZiAoKDAsIF9hcnJheS5jb250YWlucykoZmFjdG9yeS5kZXBlbmRlbmNpZXMsIGRlcGVuZGVuY3kuZm4gfHwgZGVwZW5kZW5jeS5uYW1lKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZhY3RvcnkuZGVwZW5kZW5jaWVzLnNvbWUoZnVuY3Rpb24gKGQpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRhaW5zRGVwZW5kZW5jeShmYWN0b3JpZXNCeU5hbWVbZF0sIGRlcGVuZGVuY3kpO1xuICAgICAgfSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIHNvcnRlZCA9IFtdO1xuXG4gIGZ1bmN0aW9uIGFkZEZhY3RvcnkoZmFjdG9yeSkge1xuICAgIHZhciBpbmRleCA9IDA7XG5cbiAgICB3aGlsZSAoaW5kZXggPCBzb3J0ZWQubGVuZ3RoICYmICFjb250YWluc0RlcGVuZGVuY3koc29ydGVkW2luZGV4XSwgZmFjdG9yeSkpIHtcbiAgICAgIGluZGV4Kys7XG4gICAgfVxuXG4gICAgc29ydGVkLnNwbGljZShpbmRleCwgMCwgZmFjdG9yeSk7XG4gIH0gLy8gc29ydCByZWd1bGFyIGZhY3RvcnkgZnVuY3Rpb25zXG5cblxuICBmYWN0b3JpZXMuZmlsdGVyKGlzRmFjdG9yeSkuZm9yRWFjaChhZGRGYWN0b3J5KTsgLy8gc29ydCBsZWdhY3kgZmFjdG9yeSBmdW5jdGlvbnMgQUZURVIgdGhlIHJlZ3VsYXIgZmFjdG9yeSBmdW5jdGlvbnNcblxuICBmYWN0b3JpZXMuZmlsdGVyKGZ1bmN0aW9uIChmYWN0b3J5KSB7XG4gICAgcmV0dXJuICFpc0ZhY3RvcnkoZmFjdG9yeSk7XG4gIH0pLmZvckVhY2goYWRkRmFjdG9yeSk7XG4gIHJldHVybiBzb3J0ZWQ7XG59IC8vIFRPRE86IGNvbW1lbnQgb3IgY2xlYW51cCBpZiB1bnVzZWQgaW4gdGhlIGVuZFxuXG5cbmZ1bmN0aW9uIGNyZWF0ZShmYWN0b3JpZXMpIHtcbiAgdmFyIHNjb3BlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiB7fTtcbiAgc29ydEZhY3RvcmllcyhmYWN0b3JpZXMpLmZvckVhY2goZnVuY3Rpb24gKGZhY3RvcnkpIHtcbiAgICByZXR1cm4gZmFjdG9yeShzY29wZSk7XG4gIH0pO1xuICByZXR1cm4gc2NvcGU7XG59XG4vKipcbiAqIFRlc3Qgd2hldGhlciBhbiBvYmplY3QgaXMgYSBmYWN0b3J5LiBUaGlzIGlzIHRoZSBjYXNlIHdoZW4gaXQgaGFzXG4gKiBwcm9wZXJ0aWVzIG5hbWUsIGRlcGVuZGVuY2llcywgYW5kIGEgZnVuY3Rpb24gY3JlYXRlLlxuICogQHBhcmFtIHsqfSBvYmpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5cblxuZnVuY3Rpb24gaXNGYWN0b3J5KG9iaikge1xuICByZXR1cm4gdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygb2JqLmZuID09PSAnc3RyaW5nJyAmJiBBcnJheS5pc0FycmF5KG9iai5kZXBlbmRlbmNpZXMpO1xufVxuLyoqXG4gKiBBc3NlcnQgdGhhdCBhbGwgZGVwZW5kZW5jaWVzIG9mIGEgbGlzdCB3aXRoIGRlcGVuZGVuY2llcyBhcmUgYXZhaWxhYmxlIGluIHRoZSBwcm92aWRlZCBzY29wZS5cbiAqXG4gKiBXaWxsIHRocm93IGFuIGV4Y2VwdGlvbiB3aGVuIHRoZXJlIGFyZSBkZXBlbmRlbmNpZXMgbWlzc2luZy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAgIE5hbWUgZm9yIHRoZSBmdW5jdGlvbiB0byBiZSBjcmVhdGVkLiBVc2VkIHRvIGdlbmVyYXRlIGEgdXNlZnVsIGVycm9yIG1lc3NhZ2VcbiAqIEBwYXJhbSB7c3RyaW5nW119IGRlcGVuZGVuY2llc1xuICogQHBhcmFtIHtPYmplY3R9IHNjb3BlXG4gKi9cblxuXG5mdW5jdGlvbiBhc3NlcnREZXBlbmRlbmNpZXMobmFtZSwgZGVwZW5kZW5jaWVzLCBzY29wZSkge1xuICB2YXIgYWxsRGVmaW5lZCA9IGRlcGVuZGVuY2llcy5maWx0ZXIoZnVuY3Rpb24gKGRlcGVuZGVuY3kpIHtcbiAgICByZXR1cm4gIWlzT3B0aW9uYWxEZXBlbmRlbmN5KGRlcGVuZGVuY3kpO1xuICB9KSAvLyBmaWx0ZXIgb3B0aW9uYWxzXG4gIC5ldmVyeShmdW5jdGlvbiAoZGVwZW5kZW5jeSkge1xuICAgIHJldHVybiBzY29wZVtkZXBlbmRlbmN5XSAhPT0gdW5kZWZpbmVkO1xuICB9KTtcblxuICBpZiAoIWFsbERlZmluZWQpIHtcbiAgICB2YXIgbWlzc2luZ0RlcGVuZGVuY2llcyA9IGRlcGVuZGVuY2llcy5maWx0ZXIoZnVuY3Rpb24gKGRlcGVuZGVuY3kpIHtcbiAgICAgIHJldHVybiBzY29wZVtkZXBlbmRlbmN5XSA9PT0gdW5kZWZpbmVkO1xuICAgIH0pOyAvLyBUT0RPOiBjcmVhdGUgYSBjdXN0b20gZXJyb3IgY2xhc3MgZm9yIHRoaXMsIGEgTWF0aGpzRXJyb3Igb3Igc29tZXRoaW5nIGxpa2UgdGhhdFxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGNyZWF0ZSBmdW5jdGlvbiBcXFwiXCIuY29uY2F0KG5hbWUsIFwiXFxcIiwgXCIpICsgXCJzb21lIGRlcGVuZGVuY2llcyBhcmUgbWlzc2luZzogXCIuY29uY2F0KG1pc3NpbmdEZXBlbmRlbmNpZXMubWFwKGZ1bmN0aW9uIChkKSB7XG4gICAgICByZXR1cm4gXCJcXFwiXCIuY29uY2F0KGQsIFwiXFxcIlwiKTtcbiAgICB9KS5qb2luKCcsICcpLCBcIi5cIikpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzT3B0aW9uYWxEZXBlbmRlbmN5KGRlcGVuZGVuY3kpIHtcbiAgcmV0dXJuIGRlcGVuZGVuY3kgJiYgZGVwZW5kZW5jeVswXSA9PT0gJz8nO1xufVxuXG5mdW5jdGlvbiBzdHJpcE9wdGlvbmFsTm90YXRpb24oZGVwZW5kZW5jeSkge1xuICByZXR1cm4gZGVwZW5kZW5jeSAmJiBkZXBlbmRlbmN5WzBdID09PSAnPycgPyBkZXBlbmRlbmN5LnNsaWNlKDEpIDogZGVwZW5kZW5jeTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubWVtb2l6ZSA9IG1lbW9pemU7XG5leHBvcnRzLm1lbW9pemVDb21wYXJlID0gbWVtb2l6ZUNvbXBhcmU7XG5leHBvcnRzLm1heEFyZ3VtZW50Q291bnQgPSBtYXhBcmd1bWVudENvdW50O1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbi8vIGZ1bmN0aW9uIHV0aWxzXG5cbi8qKlxuICogTWVtb2l6ZSBhIGdpdmVuIGZ1bmN0aW9uIGJ5IGNhY2hpbmcgdGhlIGNvbXB1dGVkIHJlc3VsdC5cbiAqIFRoZSBjYWNoZSBvZiBhIG1lbW9pemVkIGZ1bmN0aW9uIGNhbiBiZSBjbGVhcmVkIGJ5IGRlbGV0aW5nIHRoZSBgY2FjaGVgXG4gKiBwcm9wZXJ0eSBvZiB0aGUgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gZm4gICAgICAgICAgICAgICAgICAgICBUaGUgZnVuY3Rpb24gdG8gYmUgbWVtb2l6ZWQuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE11c3QgYmUgYSBwdXJlIGZ1bmN0aW9uLlxuICogQHBhcmFtIHtmdW5jdGlvbihhcmdzOiBBcnJheSl9IFtoYXNoZXJdICBBIGN1c3RvbSBoYXNoIGJ1aWxkZXIuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElzIEpTT04uc3RyaW5naWZ5IGJ5IGRlZmF1bHQuXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn0gICAgICAgICAgICAgICAgICAgICAgIFJldHVybnMgdGhlIG1lbW9pemVkIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIG1lbW9pemUoZm4sIGhhc2hlcikge1xuICByZXR1cm4gZnVuY3Rpb24gbWVtb2l6ZSgpIHtcbiAgICBpZiAoX3R5cGVvZihtZW1vaXplLmNhY2hlKSAhPT0gJ29iamVjdCcpIHtcbiAgICAgIG1lbW9pemUuY2FjaGUgPSB7fTtcbiAgICB9XG5cbiAgICB2YXIgYXJncyA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGFyZ3NbaV0gPSBhcmd1bWVudHNbaV07XG4gICAgfVxuXG4gICAgdmFyIGhhc2ggPSBoYXNoZXIgPyBoYXNoZXIoYXJncykgOiBKU09OLnN0cmluZ2lmeShhcmdzKTtcblxuICAgIGlmICghKGhhc2ggaW4gbWVtb2l6ZS5jYWNoZSkpIHtcbiAgICAgIG1lbW9pemUuY2FjaGVbaGFzaF0gPSBmbi5hcHBseShmbiwgYXJncyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lbW9pemUuY2FjaGVbaGFzaF07XG4gIH07XG59XG4vKipcbiAqIE1lbW9pemUgYSBnaXZlbiBmdW5jdGlvbiBieSBjYWNoaW5nIGFsbCByZXN1bHRzIGFuZCB0aGUgYXJndW1lbnRzLFxuICogYW5kIGNvbXBhcmluZyBhZ2FpbnN0IHRoZSBhcmd1bWVudHMgb2YgcHJldmlvdXMgcmVzdWx0cyBiZWZvcmVcbiAqIGV4ZWN1dGluZyBhZ2Fpbi5cbiAqIFRoaXMgaXMgbGVzcyBwZXJmb3JtYW50IHRoYW4gYG1lbW9pemVgIHdoaWNoIGNhbGN1bGF0ZXMgYSBoYXNoLFxuICogd2hpY2ggaXMgdmVyeSBmYXN0IHRvIGNvbXBhcmUuIFVzZSBgbWVtb2l6ZUNvbXBhcmVgIG9ubHkgd2hlbiBpdCBpc1xuICogbm90IHBvc3NpYmxlIHRvIGNyZWF0ZSBhIHVuaXF1ZSBzZXJpYWxpemFibGUgaGFzaCBmcm9tIHRoZSBmdW5jdGlvblxuICogYXJndW1lbnRzLlxuICogVGhlIGlzRXF1YWwgZnVuY3Rpb24gbXVzdCBjb21wYXJlIHR3byBzZXRzIG9mIGFyZ3VtZW50c1xuICogYW5kIHJldHVybiB0cnVlIHdoZW4gZXF1YWwgKGNhbiBiZSBhIGRlZXAgZXF1YWxpdHkgY2hlY2sgZm9yIGV4YW1wbGUpLlxuICogQHBhcmFtIHtmdW5jdGlvbn0gZm5cbiAqIEBwYXJhbSB7ZnVuY3Rpb24oYTogKiwgYjogKikgOiBib29sZWFufSBpc0VxdWFsXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cblxuXG5mdW5jdGlvbiBtZW1vaXplQ29tcGFyZShmbiwgaXNFcXVhbCkge1xuICB2YXIgbWVtb2l6ZSA9IGZ1bmN0aW9uIG1lbW9pemUoKSB7XG4gICAgdmFyIGFyZ3MgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBhcmdzW2ldID0gYXJndW1lbnRzW2ldO1xuICAgIH1cblxuICAgIGZvciAodmFyIGMgPSAwOyBjIDwgbWVtb2l6ZS5jYWNoZS5sZW5ndGg7IGMrKykge1xuICAgICAgdmFyIGNhY2hlZCA9IG1lbW9pemUuY2FjaGVbY107XG5cbiAgICAgIGlmIChpc0VxdWFsKGFyZ3MsIGNhY2hlZC5hcmdzKSkge1xuICAgICAgICAvLyBUT0RPOiBtb3ZlIHRoaXMgY2FjaGUgZW50cnkgdG8gdGhlIHRvcCBzbyByZWNlbnRseSB1c2VkIGVudHJpZXMgbW92ZSB1cD9cbiAgICAgICAgcmV0dXJuIGNhY2hlZC5yZXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHJlcyA9IGZuLmFwcGx5KGZuLCBhcmdzKTtcbiAgICBtZW1vaXplLmNhY2hlLnVuc2hpZnQoe1xuICAgICAgYXJnczogYXJncyxcbiAgICAgIHJlczogcmVzXG4gICAgfSk7XG4gICAgcmV0dXJuIHJlcztcbiAgfTtcblxuICBtZW1vaXplLmNhY2hlID0gW107XG4gIHJldHVybiBtZW1vaXplO1xufVxuLyoqXG4gKiBGaW5kIHRoZSBtYXhpbXVtIG51bWJlciBvZiBhcmd1bWVudHMgZXhwZWN0ZWQgYnkgYSB0eXBlZCBmdW5jdGlvbi5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuICAgQSB0eXBlZCBmdW5jdGlvblxuICogQHJldHVybiB7bnVtYmVyfSBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBleHBlY3RlZCBhcmd1bWVudHMuXG4gKiAgICAgICAgICAgICAgICAgIFJldHVybnMgLTEgd2hlbiBubyBzaWduYXR1cmVzIHdoZXJlIGZvdW5kIG9uIHRoZSBmdW5jdGlvbi5cbiAqL1xuXG5cbmZ1bmN0aW9uIG1heEFyZ3VtZW50Q291bnQoZm4pIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGZuLnNpZ25hdHVyZXMgfHwge30pLnJlZHVjZShmdW5jdGlvbiAoYXJncywgc2lnbmF0dXJlKSB7XG4gICAgdmFyIGNvdW50ID0gKHNpZ25hdHVyZS5tYXRjaCgvLC9nKSB8fCBbXSkubGVuZ3RoICsgMTtcbiAgICByZXR1cm4gTWF0aC5tYXgoYXJncywgY291bnQpO1xuICB9LCAtMSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzTnVtYmVyID0gaXNOdW1iZXI7XG5leHBvcnRzLmlzQmlnTnVtYmVyID0gaXNCaWdOdW1iZXI7XG5leHBvcnRzLmlzQ29tcGxleCA9IGlzQ29tcGxleDtcbmV4cG9ydHMuaXNGcmFjdGlvbiA9IGlzRnJhY3Rpb247XG5leHBvcnRzLmlzVW5pdCA9IGlzVW5pdDtcbmV4cG9ydHMuaXNTdHJpbmcgPSBpc1N0cmluZztcbmV4cG9ydHMuaXNNYXRyaXggPSBpc01hdHJpeDtcbmV4cG9ydHMuaXNDb2xsZWN0aW9uID0gaXNDb2xsZWN0aW9uO1xuZXhwb3J0cy5pc0RlbnNlTWF0cml4ID0gaXNEZW5zZU1hdHJpeDtcbmV4cG9ydHMuaXNTcGFyc2VNYXRyaXggPSBpc1NwYXJzZU1hdHJpeDtcbmV4cG9ydHMuaXNSYW5nZSA9IGlzUmFuZ2U7XG5leHBvcnRzLmlzSW5kZXggPSBpc0luZGV4O1xuZXhwb3J0cy5pc0Jvb2xlYW4gPSBpc0Jvb2xlYW47XG5leHBvcnRzLmlzUmVzdWx0U2V0ID0gaXNSZXN1bHRTZXQ7XG5leHBvcnRzLmlzSGVscCA9IGlzSGVscDtcbmV4cG9ydHMuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5leHBvcnRzLmlzRGF0ZSA9IGlzRGF0ZTtcbmV4cG9ydHMuaXNSZWdFeHAgPSBpc1JlZ0V4cDtcbmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDtcbmV4cG9ydHMuaXNOdWxsID0gaXNOdWxsO1xuZXhwb3J0cy5pc1VuZGVmaW5lZCA9IGlzVW5kZWZpbmVkO1xuZXhwb3J0cy5pc0FjY2Vzc29yTm9kZSA9IGlzQWNjZXNzb3JOb2RlO1xuZXhwb3J0cy5pc0FycmF5Tm9kZSA9IGlzQXJyYXlOb2RlO1xuZXhwb3J0cy5pc0Fzc2lnbm1lbnROb2RlID0gaXNBc3NpZ25tZW50Tm9kZTtcbmV4cG9ydHMuaXNCbG9ja05vZGUgPSBpc0Jsb2NrTm9kZTtcbmV4cG9ydHMuaXNDb25kaXRpb25hbE5vZGUgPSBpc0NvbmRpdGlvbmFsTm9kZTtcbmV4cG9ydHMuaXNDb25zdGFudE5vZGUgPSBpc0NvbnN0YW50Tm9kZTtcbmV4cG9ydHMuaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlID0gaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlO1xuZXhwb3J0cy5pc0Z1bmN0aW9uTm9kZSA9IGlzRnVuY3Rpb25Ob2RlO1xuZXhwb3J0cy5pc0luZGV4Tm9kZSA9IGlzSW5kZXhOb2RlO1xuZXhwb3J0cy5pc05vZGUgPSBpc05vZGU7XG5leHBvcnRzLmlzT2JqZWN0Tm9kZSA9IGlzT2JqZWN0Tm9kZTtcbmV4cG9ydHMuaXNPcGVyYXRvck5vZGUgPSBpc09wZXJhdG9yTm9kZTtcbmV4cG9ydHMuaXNQYXJlbnRoZXNpc05vZGUgPSBpc1BhcmVudGhlc2lzTm9kZTtcbmV4cG9ydHMuaXNSYW5nZU5vZGUgPSBpc1JhbmdlTm9kZTtcbmV4cG9ydHMuaXNTeW1ib2xOb2RlID0gaXNTeW1ib2xOb2RlO1xuZXhwb3J0cy5pc0NoYWluID0gaXNDaGFpbjtcbmV4cG9ydHMudHlwZU9mID0gdHlwZU9mO1xuZXhwb3J0cy5pc0FycmF5ID0gdm9pZCAwO1xuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IGlmICh0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gXCJzeW1ib2xcIikgeyBfdHlwZW9mID0gZnVuY3Rpb24gX3R5cGVvZihvYmopIHsgcmV0dXJuIHR5cGVvZiBvYmo7IH07IH0gZWxzZSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTsgfSByZXR1cm4gX3R5cGVvZihvYmopOyB9XG5cbi8vIHR5cGUgY2hlY2tzIGZvciBhbGwga25vd24gdHlwZXNcbi8vXG4vLyBub3RlIHRoYXQ6XG4vL1xuLy8gLSBjaGVjayBieSBkdWNrLXR5cGluZyBvbiBhIHByb3BlcnR5IGxpa2UgYGlzVW5pdGAsIGluc3RlYWQgb2YgY2hlY2tpbmcgaW5zdGFuY2VvZi5cbi8vICAgaW5zdGFuY2VvZiBjYW5ub3QgYmUgdXNlZCBiZWNhdXNlIHRoYXQgd291bGQgbm90IGFsbG93IHRvIHBhc3MgZGF0YSBmcm9tXG4vLyAgIG9uZSBpbnN0YW5jZSBvZiBtYXRoLmpzIHRvIGFub3RoZXIgc2luY2UgZWFjaCBoYXMgaXQncyBvd24gaW5zdGFuY2Ugb2YgVW5pdC5cbi8vIC0gY2hlY2sgdGhlIGBpc1VuaXRgIHByb3BlcnR5IHZpYSB0aGUgY29uc3RydWN0b3IsIHNvIHRoZXJlIHdpbGwgYmUgbm9cbi8vICAgbWF0Y2hlcyBmb3IgXCJmYWtlXCIgaW5zdGFuY2VzIGxpa2UgcGxhaW4gb2JqZWN0cyB3aXRoIGEgcHJvcGVydHkgYGlzVW5pdGAuXG4vLyAgIFRoYXQgaXMgaW1wb3J0YW50IGZvciBzZWN1cml0eSByZWFzb25zLlxuLy8gLSBJdCBtdXN0IG5vdCBiZSBwb3NzaWJsZSB0byBvdmVycmlkZSB0aGUgdHlwZSBjaGVja3MgdXNlZCBpbnRlcm5hbGx5LFxuLy8gICBmb3Igc2VjdXJpdHkgcmVhc29ucywgc28gdGhlc2UgZnVuY3Rpb25zIGFyZSBub3QgZXhwb3NlZCBpbiB0aGUgZXhwcmVzc2lvblxuLy8gICBwYXJzZXIuXG5mdW5jdGlvbiBpc051bWJlcih4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gJ251bWJlcic7XG59XG5cbmZ1bmN0aW9uIGlzQmlnTnVtYmVyKHgpIHtcbiAgcmV0dXJuIHggJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNCaWdOdW1iZXIgPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzQ29tcGxleCh4KSB7XG4gIHJldHVybiB4ICYmIF90eXBlb2YoeCkgPT09ICdvYmplY3QnICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih4KS5pc0NvbXBsZXggPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzRnJhY3Rpb24oeCkge1xuICByZXR1cm4geCAmJiBfdHlwZW9mKHgpID09PSAnb2JqZWN0JyAmJiBPYmplY3QuZ2V0UHJvdG90eXBlT2YoeCkuaXNGcmFjdGlvbiA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNVbml0KHgpIHtcbiAgcmV0dXJuIHggJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNVbml0ID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc1N0cmluZyh4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gJ3N0cmluZyc7XG59XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbmV4cG9ydHMuaXNBcnJheSA9IGlzQXJyYXk7XG5cbmZ1bmN0aW9uIGlzTWF0cml4KHgpIHtcbiAgcmV0dXJuIHggJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNNYXRyaXggPT09IHRydWUgfHwgZmFsc2U7XG59XG4vKipcbiAqIFRlc3Qgd2hldGhlciBhIHZhbHVlIGlzIGEgY29sbGVjdGlvbjogYW4gQXJyYXkgb3IgTWF0cml4XG4gKiBAcGFyYW0geyp9IHhcbiAqIEByZXR1cm5zIHtib29sZWFufSBpc0NvbGxlY3Rpb25cbiAqL1xuXG5cbmZ1bmN0aW9uIGlzQ29sbGVjdGlvbih4KSB7XG4gIHJldHVybiBBcnJheS5pc0FycmF5KHgpIHx8IGlzTWF0cml4KHgpO1xufVxuXG5mdW5jdGlvbiBpc0RlbnNlTWF0cml4KHgpIHtcbiAgcmV0dXJuIHggJiYgeC5pc0RlbnNlTWF0cml4ICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTWF0cml4ID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc1NwYXJzZU1hdHJpeCh4KSB7XG4gIHJldHVybiB4ICYmIHguaXNTcGFyc2VNYXRyaXggJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNNYXRyaXggPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzUmFuZ2UoeCkge1xuICByZXR1cm4geCAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc1JhbmdlID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc0luZGV4KHgpIHtcbiAgcmV0dXJuIHggJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNJbmRleCA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCb29sZWFuKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSAnYm9vbGVhbic7XG59XG5cbmZ1bmN0aW9uIGlzUmVzdWx0U2V0KHgpIHtcbiAgcmV0dXJuIHggJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNSZXN1bHRTZXQgPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzSGVscCh4KSB7XG4gIHJldHVybiB4ICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzSGVscCA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNGdW5jdGlvbih4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZnVuY3Rpb24gaXNEYXRlKHgpIHtcbiAgcmV0dXJuIHggaW5zdGFuY2VvZiBEYXRlO1xufVxuXG5mdW5jdGlvbiBpc1JlZ0V4cCh4KSB7XG4gIHJldHVybiB4IGluc3RhbmNlb2YgUmVnRXhwO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdCh4KSB7XG4gIHJldHVybiAhISh4ICYmIF90eXBlb2YoeCkgPT09ICdvYmplY3QnICYmIHguY29uc3RydWN0b3IgPT09IE9iamVjdCAmJiAhaXNDb21wbGV4KHgpICYmICFpc0ZyYWN0aW9uKHgpKTtcbn1cblxuZnVuY3Rpb24gaXNOdWxsKHgpIHtcbiAgcmV0dXJuIHggPT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkKHgpIHtcbiAgcmV0dXJuIHggPT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gaXNBY2Nlc3Nvck5vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzQWNjZXNzb3JOb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNBcnJheU5vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzQXJyYXlOb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNBc3NpZ25tZW50Tm9kZSh4KSB7XG4gIHJldHVybiB4ICYmIHguaXNBc3NpZ25tZW50Tm9kZSA9PT0gdHJ1ZSAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc05vZGUgPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzQmxvY2tOb2RlKHgpIHtcbiAgcmV0dXJuIHggJiYgeC5pc0Jsb2NrTm9kZSA9PT0gdHJ1ZSAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc05vZGUgPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzQ29uZGl0aW9uYWxOb2RlKHgpIHtcbiAgcmV0dXJuIHggJiYgeC5pc0NvbmRpdGlvbmFsTm9kZSA9PT0gdHJ1ZSAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc05vZGUgPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzQ29uc3RhbnROb2RlKHgpIHtcbiAgcmV0dXJuIHggJiYgeC5pc0NvbnN0YW50Tm9kZSA9PT0gdHJ1ZSAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc05vZGUgPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb25Bc3NpZ25tZW50Tm9kZSh4KSB7XG4gIHJldHVybiB4ICYmIHguaXNGdW5jdGlvbkFzc2lnbm1lbnROb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNGdW5jdGlvbk5vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzRnVuY3Rpb25Ob2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNJbmRleE5vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzSW5kZXhOb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNOb2RlKHgpIHtcbiAgcmV0dXJuIHggJiYgeC5pc05vZGUgPT09IHRydWUgJiYgeC5jb25zdHJ1Y3Rvci5wcm90b3R5cGUuaXNOb2RlID09PSB0cnVlIHx8IGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc09iamVjdE5vZGUoeCkge1xuICByZXR1cm4geCAmJiB4LmlzT2JqZWN0Tm9kZSA9PT0gdHJ1ZSAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc05vZGUgPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzT3BlcmF0b3JOb2RlKHgpIHtcbiAgcmV0dXJuIHggJiYgeC5pc09wZXJhdG9yTm9kZSA9PT0gdHJ1ZSAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc05vZGUgPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzUGFyZW50aGVzaXNOb2RlKHgpIHtcbiAgcmV0dXJuIHggJiYgeC5pc1BhcmVudGhlc2lzTm9kZSA9PT0gdHJ1ZSAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc05vZGUgPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzUmFuZ2VOb2RlKHgpIHtcbiAgcmV0dXJuIHggJiYgeC5pc1JhbmdlTm9kZSA9PT0gdHJ1ZSAmJiB4LmNvbnN0cnVjdG9yLnByb3RvdHlwZS5pc05vZGUgPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzU3ltYm9sTm9kZSh4KSB7XG4gIHJldHVybiB4ICYmIHguaXNTeW1ib2xOb2RlID09PSB0cnVlICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzTm9kZSA9PT0gdHJ1ZSB8fCBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNDaGFpbih4KSB7XG4gIHJldHVybiB4ICYmIHguY29uc3RydWN0b3IucHJvdG90eXBlLmlzQ2hhaW4gPT09IHRydWUgfHwgZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHR5cGVPZih4KSB7XG4gIHZhciB0ID0gX3R5cGVvZih4KTtcblxuICBpZiAodCA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBKYXZhU2NyaXB0IHR5cGVzXG4gICAgaWYgKHggPT09IG51bGwpIHJldHVybiAnbnVsbCc7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoeCkpIHJldHVybiAnQXJyYXknO1xuICAgIGlmICh4IGluc3RhbmNlb2YgRGF0ZSkgcmV0dXJuICdEYXRlJztcbiAgICBpZiAoeCBpbnN0YW5jZW9mIFJlZ0V4cCkgcmV0dXJuICdSZWdFeHAnOyAvLyBtYXRoLmpzIHR5cGVzXG5cbiAgICBpZiAoaXNCaWdOdW1iZXIoeCkpIHJldHVybiAnQmlnTnVtYmVyJztcbiAgICBpZiAoaXNDb21wbGV4KHgpKSByZXR1cm4gJ0NvbXBsZXgnO1xuICAgIGlmIChpc0ZyYWN0aW9uKHgpKSByZXR1cm4gJ0ZyYWN0aW9uJztcbiAgICBpZiAoaXNNYXRyaXgoeCkpIHJldHVybiAnTWF0cml4JztcbiAgICBpZiAoaXNVbml0KHgpKSByZXR1cm4gJ1VuaXQnO1xuICAgIGlmIChpc0luZGV4KHgpKSByZXR1cm4gJ0luZGV4JztcbiAgICBpZiAoaXNSYW5nZSh4KSkgcmV0dXJuICdSYW5nZSc7XG4gICAgaWYgKGlzUmVzdWx0U2V0KHgpKSByZXR1cm4gJ1Jlc3VsdFNldCc7XG4gICAgaWYgKGlzTm9kZSh4KSkgcmV0dXJuIHgudHlwZTtcbiAgICBpZiAoaXNDaGFpbih4KSkgcmV0dXJuICdDaGFpbic7XG4gICAgaWYgKGlzSGVscCh4KSkgcmV0dXJuICdIZWxwJztcbiAgICByZXR1cm4gJ09iamVjdCc7XG4gIH1cblxuICBpZiAodCA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuICdGdW5jdGlvbic7XG4gIHJldHVybiB0OyAvLyBjYW4gYmUgJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbicsIC4uLlxufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lc2NhcGVMYXRleCA9IGVzY2FwZUxhdGV4O1xuZXhwb3J0cy50b1N5bWJvbCA9IHRvU3ltYm9sO1xuZXhwb3J0cy5kZWZhdWx0VGVtcGxhdGUgPSBleHBvcnRzLmxhdGV4RnVuY3Rpb25zID0gZXhwb3J0cy5sYXRleE9wZXJhdG9ycyA9IGV4cG9ydHMubGF0ZXhTeW1ib2xzID0gdm9pZCAwO1xuXG52YXIgX2VzY2FwZUxhdGV4ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiZXNjYXBlLWxhdGV4XCIpKTtcblxudmFyIF9vYmplY3QgPSByZXF1aXJlKFwiLi9vYmplY3RcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IFwiZGVmYXVsdFwiOiBvYmogfTsgfVxuXG4vKiBlc2xpbnQgbm8tdGVtcGxhdGUtY3VybHktaW4tc3RyaW5nOiBcIm9mZlwiICovXG52YXIgbGF0ZXhTeW1ib2xzID0ge1xuICAvLyBHUkVFSyBMRVRURVJTXG4gIEFscGhhOiAnQScsXG4gIGFscGhhOiAnXFxcXGFscGhhJyxcbiAgQmV0YTogJ0InLFxuICBiZXRhOiAnXFxcXGJldGEnLFxuICBHYW1tYTogJ1xcXFxHYW1tYScsXG4gIGdhbW1hOiAnXFxcXGdhbW1hJyxcbiAgRGVsdGE6ICdcXFxcRGVsdGEnLFxuICBkZWx0YTogJ1xcXFxkZWx0YScsXG4gIEVwc2lsb246ICdFJyxcbiAgZXBzaWxvbjogJ1xcXFxlcHNpbG9uJyxcbiAgdmFyZXBzaWxvbjogJ1xcXFx2YXJlcHNpbG9uJyxcbiAgWmV0YTogJ1onLFxuICB6ZXRhOiAnXFxcXHpldGEnLFxuICBFdGE6ICdIJyxcbiAgZXRhOiAnXFxcXGV0YScsXG4gIFRoZXRhOiAnXFxcXFRoZXRhJyxcbiAgdGhldGE6ICdcXFxcdGhldGEnLFxuICB2YXJ0aGV0YTogJ1xcXFx2YXJ0aGV0YScsXG4gIElvdGE6ICdJJyxcbiAgaW90YTogJ1xcXFxpb3RhJyxcbiAgS2FwcGE6ICdLJyxcbiAga2FwcGE6ICdcXFxca2FwcGEnLFxuICB2YXJrYXBwYTogJ1xcXFx2YXJrYXBwYScsXG4gIExhbWJkYTogJ1xcXFxMYW1iZGEnLFxuICBsYW1iZGE6ICdcXFxcbGFtYmRhJyxcbiAgTXU6ICdNJyxcbiAgbXU6ICdcXFxcbXUnLFxuICBOdTogJ04nLFxuICBudTogJ1xcXFxudScsXG4gIFhpOiAnXFxcXFhpJyxcbiAgeGk6ICdcXFxceGknLFxuICBPbWljcm9uOiAnTycsXG4gIG9taWNyb246ICdvJyxcbiAgUGk6ICdcXFxcUGknLFxuICBwaTogJ1xcXFxwaScsXG4gIHZhcnBpOiAnXFxcXHZhcnBpJyxcbiAgUmhvOiAnUCcsXG4gIHJobzogJ1xcXFxyaG8nLFxuICB2YXJyaG86ICdcXFxcdmFycmhvJyxcbiAgU2lnbWE6ICdcXFxcU2lnbWEnLFxuICBzaWdtYTogJ1xcXFxzaWdtYScsXG4gIHZhcnNpZ21hOiAnXFxcXHZhcnNpZ21hJyxcbiAgVGF1OiAnVCcsXG4gIHRhdTogJ1xcXFx0YXUnLFxuICBVcHNpbG9uOiBcIlxcXFxVcHNpbG9uXCIsXG4gIHVwc2lsb246IFwiXFxcXHVwc2lsb25cIixcbiAgUGhpOiAnXFxcXFBoaScsXG4gIHBoaTogJ1xcXFxwaGknLFxuICB2YXJwaGk6ICdcXFxcdmFycGhpJyxcbiAgQ2hpOiAnWCcsXG4gIGNoaTogJ1xcXFxjaGknLFxuICBQc2k6ICdcXFxcUHNpJyxcbiAgcHNpOiAnXFxcXHBzaScsXG4gIE9tZWdhOiAnXFxcXE9tZWdhJyxcbiAgb21lZ2E6ICdcXFxcb21lZ2EnLFxuICAvLyBsb2dpY1xuICBcInRydWVcIjogJ1xcXFxtYXRocm17VHJ1ZX0nLFxuICBcImZhbHNlXCI6ICdcXFxcbWF0aHJte0ZhbHNlfScsXG4gIC8vIG90aGVyXG4gIGk6ICdpJyxcbiAgLy8gVE9ETyB1c2UgXFxpID8/XG4gIGluZjogJ1xcXFxpbmZ0eScsXG4gIEluZjogJ1xcXFxpbmZ0eScsXG4gIGluZmluaXR5OiAnXFxcXGluZnR5JyxcbiAgSW5maW5pdHk6ICdcXFxcaW5mdHknLFxuICBvbzogJ1xcXFxpbmZ0eScsXG4gIGxpbTogJ1xcXFxsaW0nLFxuICB1bmRlZmluZWQ6ICdcXFxcbWF0aGJmez99J1xufTtcbmV4cG9ydHMubGF0ZXhTeW1ib2xzID0gbGF0ZXhTeW1ib2xzO1xudmFyIGxhdGV4T3BlcmF0b3JzID0ge1xuICB0cmFuc3Bvc2U6ICdeXFxcXHRvcCcsXG4gIGN0cmFuc3Bvc2U6ICdeSCcsXG4gIGZhY3RvcmlhbDogJyEnLFxuICBwb3c6ICdeJyxcbiAgZG90UG93OiAnLl5cXFxcd2VkZ2UnLFxuICAvLyBUT0RPIGZpbmQgaWRlYWwgc29sdXRpb25cbiAgdW5hcnlQbHVzOiAnKycsXG4gIHVuYXJ5TWludXM6ICctJyxcbiAgYml0Tm90OiAnXFxcXH4nLFxuICAvLyBUT0RPIGZpbmQgaWRlYWwgc29sdXRpb25cbiAgbm90OiAnXFxcXG5lZycsXG4gIG11bHRpcGx5OiAnXFxcXGNkb3QnLFxuICBkaXZpZGU6ICdcXFxcZnJhYycsXG4gIC8vIFRPRE8gaG93IHRvIGhhbmRsZSB0aGF0IHByb3Blcmx5P1xuICBkb3RNdWx0aXBseTogJy5cXFxcY2RvdCcsXG4gIC8vIFRPRE8gZmluZCBpZGVhbCBzb2x1dGlvblxuICBkb3REaXZpZGU6ICcuOicsXG4gIC8vIFRPRE8gZmluZCBpZGVhbCBzb2x1dGlvblxuICBtb2Q6ICdcXFxcbW9kJyxcbiAgYWRkOiAnKycsXG4gIHN1YnRyYWN0OiAnLScsXG4gIHRvOiAnXFxcXHJpZ2h0YXJyb3cnLFxuICBsZWZ0U2hpZnQ6ICc8PCcsXG4gIHJpZ2h0QXJpdGhTaGlmdDogJz4+JyxcbiAgcmlnaHRMb2dTaGlmdDogJz4+PicsXG4gIGVxdWFsOiAnPScsXG4gIHVuZXF1YWw6ICdcXFxcbmVxJyxcbiAgc21hbGxlcjogJzwnLFxuICBsYXJnZXI6ICc+JyxcbiAgc21hbGxlckVxOiAnXFxcXGxlcScsXG4gIGxhcmdlckVxOiAnXFxcXGdlcScsXG4gIGJpdEFuZDogJ1xcXFwmJyxcbiAgYml0WG9yOiBcIlxcXFx1bmRlcmxpbmV7fH1cIixcbiAgYml0T3I6ICd8JyxcbiAgYW5kOiAnXFxcXHdlZGdlJyxcbiAgeG9yOiAnXFxcXHZlZWJhcicsXG4gIG9yOiAnXFxcXHZlZSdcbn07XG5leHBvcnRzLmxhdGV4T3BlcmF0b3JzID0gbGF0ZXhPcGVyYXRvcnM7XG52YXIgbGF0ZXhGdW5jdGlvbnMgPSB7XG4gIC8vIGFyaXRobWV0aWNcbiAgYWJzOiB7XG4gICAgMTogJ1xcXFxsZWZ0fCR7YXJnc1swXX1cXFxccmlnaHR8J1xuICB9LFxuICBhZGQ6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuYWRkLCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIGNicnQ6IHtcbiAgICAxOiAnXFxcXHNxcnRbM117JHthcmdzWzBdfX0nXG4gIH0sXG4gIGNlaWw6IHtcbiAgICAxOiAnXFxcXGxlZnRcXFxcbGNlaWwke2FyZ3NbMF19XFxcXHJpZ2h0XFxcXHJjZWlsJ1xuICB9LFxuICBjdWJlOiB7XG4gICAgMTogJ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpXjMnXG4gIH0sXG4gIGRpdmlkZToge1xuICAgIDI6ICdcXFxcZnJhY3ske2FyZ3NbMF19fXske2FyZ3NbMV19fSdcbiAgfSxcbiAgZG90RGl2aWRlOiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmRvdERpdmlkZSwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICBkb3RNdWx0aXBseToge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5kb3RNdWx0aXBseSwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICBkb3RQb3c6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuZG90UG93LCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIGV4cDoge1xuICAgIDE6ICdcXFxcZXhwXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGV4cG0xOiBcIlxcXFxsZWZ0KGVcIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMucG93LCBcInske2FyZ3NbMF19fS0xXFxcXHJpZ2h0KVwiKSxcbiAgZml4OiB7XG4gICAgMTogJ1xcXFxtYXRocm17JHtuYW1lfX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgZmxvb3I6IHtcbiAgICAxOiAnXFxcXGxlZnRcXFxcbGZsb29yJHthcmdzWzBdfVxcXFxyaWdodFxcXFxyZmxvb3InXG4gIH0sXG4gIGdjZDogJ1xcXFxnY2RcXFxcbGVmdCgke2FyZ3N9XFxcXHJpZ2h0KScsXG4gIGh5cG90OiAnXFxcXGh5cG90XFxcXGxlZnQoJHthcmdzfVxcXFxyaWdodCknLFxuICBsb2c6IHtcbiAgICAxOiAnXFxcXGxuXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknLFxuICAgIDI6ICdcXFxcbG9nX3ske2FyZ3NbMV19fVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBsb2cxMDoge1xuICAgIDE6ICdcXFxcbG9nX3sxMH1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgbG9nMXA6IHtcbiAgICAxOiAnXFxcXGxuXFxcXGxlZnQoJHthcmdzWzBdfSsxXFxcXHJpZ2h0KScsXG4gICAgMjogJ1xcXFxsb2dfeyR7YXJnc1sxXX19XFxcXGxlZnQoJHthcmdzWzBdfSsxXFxcXHJpZ2h0KSdcbiAgfSxcbiAgbG9nMjogJ1xcXFxsb2dfezJ9XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknLFxuICBtb2Q6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMubW9kLCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIG11bHRpcGx5OiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLm11bHRpcGx5LCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIG5vcm06IHtcbiAgICAxOiAnXFxcXGxlZnRcXFxcfCR7YXJnc1swXX1cXFxccmlnaHRcXFxcfCcsXG4gICAgMjogdW5kZWZpbmVkIC8vIHVzZSBkZWZhdWx0IHRlbXBsYXRlXG5cbiAgfSxcbiAgbnRoUm9vdDoge1xuICAgIDI6ICdcXFxcc3FydFske2FyZ3NbMV19XXske2FyZ3NbMF19fSdcbiAgfSxcbiAgbnRoUm9vdHM6IHtcbiAgICAyOiAnXFxcXHt5IDogJHlee2FyZ3NbMV19ID0geyR7YXJnc1swXX19XFxcXH0nXG4gIH0sXG4gIHBvdzoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodClcIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMucG93LCBcInske2FyZ3NbMV19fVwiKVxuICB9LFxuICByb3VuZDoge1xuICAgIDE6ICdcXFxcbGVmdFxcXFxsZmxvb3Ike2FyZ3NbMF19XFxcXHJpZ2h0XFxcXHJjZWlsJyxcbiAgICAyOiB1bmRlZmluZWQgLy8gdXNlIGRlZmF1bHQgdGVtcGxhdGVcblxuICB9LFxuICBzaWduOiB7XG4gICAgMTogJ1xcXFxtYXRocm17JHtuYW1lfX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgc3FydDoge1xuICAgIDE6ICdcXFxcc3FydHske2FyZ3NbMF19fSdcbiAgfSxcbiAgc3F1YXJlOiB7XG4gICAgMTogJ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpXjInXG4gIH0sXG4gIHN1YnRyYWN0OiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLnN1YnRyYWN0LCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIHVuYXJ5TWludXM6IHtcbiAgICAxOiBcIlwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy51bmFyeU1pbnVzLCBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIHVuYXJ5UGx1czoge1xuICAgIDE6IFwiXCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLnVuYXJ5UGx1cywgXCJcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICAvLyBiaXR3aXNlXG4gIGJpdEFuZDoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5iaXRBbmQsIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgYml0Tm90OiB7XG4gICAgMTogbGF0ZXhPcGVyYXRvcnMuYml0Tm90ICsgJ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBiaXRPcjoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5iaXRPciwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICBiaXRYb3I6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuYml0WG9yLCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIGxlZnRTaGlmdDoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5sZWZ0U2hpZnQsIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgcmlnaHRBcml0aFNoaWZ0OiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLnJpZ2h0QXJpdGhTaGlmdCwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICByaWdodExvZ1NoaWZ0OiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLnJpZ2h0TG9nU2hpZnQsIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgLy8gY29tYmluYXRvcmljc1xuICBiZWxsTnVtYmVyczoge1xuICAgIDE6ICdcXFxcbWF0aHJte0J9X3ske2FyZ3NbMF19fSdcbiAgfSxcbiAgY2F0YWxhbjoge1xuICAgIDE6ICdcXFxcbWF0aHJte0N9X3ske2FyZ3NbMF19fSdcbiAgfSxcbiAgc3RpcmxpbmdTMjoge1xuICAgIDI6ICdcXFxcbWF0aHJte1N9XFxcXGxlZnQoJHthcmdzfVxcXFxyaWdodCknXG4gIH0sXG4gIC8vIGNvbXBsZXhcbiAgYXJnOiB7XG4gICAgMTogJ1xcXFxhcmdcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgY29uajoge1xuICAgIDE6ICdcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KV4qJ1xuICB9LFxuICBpbToge1xuICAgIDE6ICdcXFxcSW1cXFxcbGVmdFxcXFxsYnJhY2Uke2FyZ3NbMF19XFxcXHJpZ2h0XFxcXHJicmFjZSdcbiAgfSxcbiAgcmU6IHtcbiAgICAxOiAnXFxcXFJlXFxcXGxlZnRcXFxcbGJyYWNlJHthcmdzWzBdfVxcXFxyaWdodFxcXFxyYnJhY2UnXG4gIH0sXG4gIC8vIGxvZ2ljYWxcbiAgYW5kOiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmFuZCwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICBub3Q6IHtcbiAgICAxOiBsYXRleE9wZXJhdG9ycy5ub3QgKyAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIG9yOiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLm9yLCBcIiR7YXJnc1sxXX1cXFxccmlnaHQpXCIpXG4gIH0sXG4gIHhvcjoge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy54b3IsIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgLy8gbWF0cml4XG4gIGNyb3NzOiB7XG4gICAgMjogJ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpXFxcXHRpbWVzXFxcXGxlZnQoJHthcmdzWzFdfVxcXFxyaWdodCknXG4gIH0sXG4gIGN0cmFuc3Bvc2U6IHtcbiAgICAxOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpXCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmN0cmFuc3Bvc2UpXG4gIH0sXG4gIGRldDoge1xuICAgIDE6ICdcXFxcZGV0XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGRvdDoge1xuICAgIDI6ICdcXFxcbGVmdCgke2FyZ3NbMF19XFxcXGNkb3Qke2FyZ3NbMV19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgZXhwbToge1xuICAgIDE6ICdcXFxcZXhwXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGludjoge1xuICAgIDE6ICdcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KV57LTF9J1xuICB9LFxuICBzcXJ0bToge1xuICAgIDE6IFwieyR7YXJnc1swXX19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLnBvdywgXCJ7XFxcXGZyYWN7MX17Mn19XCIpXG4gIH0sXG4gIHRyYWNlOiB7XG4gICAgMTogJ1xcXFxtYXRocm17dHJ9XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIHRyYW5zcG9zZToge1xuICAgIDE6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodClcIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMudHJhbnNwb3NlKVxuICB9LFxuICAvLyBwcm9iYWJpbGl0eVxuICBjb21iaW5hdGlvbnM6IHtcbiAgICAyOiAnXFxcXGJpbm9teyR7YXJnc1swXX19eyR7YXJnc1sxXX19J1xuICB9LFxuICBjb21iaW5hdGlvbnNXaXRoUmVwOiB7XG4gICAgMjogJ1xcXFxsZWZ0KFxcXFwhXFxcXCF7XFxcXGJpbm9teyR7YXJnc1swXX19eyR7YXJnc1sxXX19fVxcXFwhXFxcXCFcXFxccmlnaHQpJ1xuICB9LFxuICBmYWN0b3JpYWw6IHtcbiAgICAxOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpXCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmZhY3RvcmlhbClcbiAgfSxcbiAgZ2FtbWE6IHtcbiAgICAxOiAnXFxcXEdhbW1hXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIC8vIHJlbGF0aW9uYWxcbiAgZXF1YWw6IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMuZXF1YWwsIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgbGFyZ2VyOiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLmxhcmdlciwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICBsYXJnZXJFcToge1xuICAgIDI6IFwiXFxcXGxlZnQoJHthcmdzWzBdfVwiLmNvbmNhdChsYXRleE9wZXJhdG9ycy5sYXJnZXJFcSwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICBzbWFsbGVyOiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLnNtYWxsZXIsIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgc21hbGxlckVxOiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLnNtYWxsZXJFcSwgXCIke2FyZ3NbMV19XFxcXHJpZ2h0KVwiKVxuICB9LFxuICB1bmVxdWFsOiB7XG4gICAgMjogXCJcXFxcbGVmdCgke2FyZ3NbMF19XCIuY29uY2F0KGxhdGV4T3BlcmF0b3JzLnVuZXF1YWwsIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgLy8gc3BlY2lhbFxuICBlcmY6IHtcbiAgICAxOiAnZXJmXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIC8vIHN0YXRpc3RpY3NcbiAgbWF4OiAnXFxcXG1heFxcXFxsZWZ0KCR7YXJnc31cXFxccmlnaHQpJyxcbiAgbWluOiAnXFxcXG1pblxcXFxsZWZ0KCR7YXJnc31cXFxccmlnaHQpJyxcbiAgdmFyaWFuY2U6ICdcXFxcbWF0aHJte1Zhcn1cXFxcbGVmdCgke2FyZ3N9XFxcXHJpZ2h0KScsXG4gIC8vIHRyaWdvbm9tZXRyeVxuICBhY29zOiB7XG4gICAgMTogJ1xcXFxjb3Neey0xfVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBhY29zaDoge1xuICAgIDE6ICdcXFxcY29zaF57LTF9XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGFjb3Q6IHtcbiAgICAxOiAnXFxcXGNvdF57LTF9XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGFjb3RoOiB7XG4gICAgMTogJ1xcXFxjb3RoXnstMX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYWNzYzoge1xuICAgIDE6ICdcXFxcY3NjXnstMX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgYWNzY2g6IHtcbiAgICAxOiAnXFxcXG1hdGhybXtjc2NofV57LTF9XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGFzZWM6IHtcbiAgICAxOiAnXFxcXHNlY157LTF9XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGFzZWNoOiB7XG4gICAgMTogJ1xcXFxtYXRocm17c2VjaH1eey0xfVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBhc2luOiB7XG4gICAgMTogJ1xcXFxzaW5eey0xfVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBhc2luaDoge1xuICAgIDE6ICdcXFxcc2luaF57LTF9XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGF0YW46IHtcbiAgICAxOiAnXFxcXHRhbl57LTF9XFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGF0YW4yOiB7XG4gICAgMjogJ1xcXFxtYXRocm17YXRhbjJ9XFxcXGxlZnQoJHthcmdzfVxcXFxyaWdodCknXG4gIH0sXG4gIGF0YW5oOiB7XG4gICAgMTogJ1xcXFx0YW5oXnstMX1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgY29zOiB7XG4gICAgMTogJ1xcXFxjb3NcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgY29zaDoge1xuICAgIDE6ICdcXFxcY29zaFxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBjb3Q6IHtcbiAgICAxOiAnXFxcXGNvdFxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBjb3RoOiB7XG4gICAgMTogJ1xcXFxjb3RoXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGNzYzoge1xuICAgIDE6ICdcXFxcY3NjXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIGNzY2g6IHtcbiAgICAxOiAnXFxcXG1hdGhybXtjc2NofVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBzZWM6IHtcbiAgICAxOiAnXFxcXHNlY1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBzZWNoOiB7XG4gICAgMTogJ1xcXFxtYXRocm17c2VjaH1cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgc2luOiB7XG4gICAgMTogJ1xcXFxzaW5cXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSdcbiAgfSxcbiAgc2luaDoge1xuICAgIDE6ICdcXFxcc2luaFxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICB0YW46IHtcbiAgICAxOiAnXFxcXHRhblxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICB0YW5oOiB7XG4gICAgMTogJ1xcXFx0YW5oXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknXG4gIH0sXG4gIC8vIHVuaXRcbiAgdG86IHtcbiAgICAyOiBcIlxcXFxsZWZ0KCR7YXJnc1swXX1cIi5jb25jYXQobGF0ZXhPcGVyYXRvcnMudG8sIFwiJHthcmdzWzFdfVxcXFxyaWdodClcIilcbiAgfSxcbiAgLy8gdXRpbHNcbiAgbnVtZXJpYzogZnVuY3Rpb24gbnVtZXJpYyhub2RlLCBvcHRpb25zKSB7XG4gICAgLy8gTm90IHN1cmUgaWYgdGhpcyBpcyBzdHJpY3RseSByaWdodCBidXQgc2hvdWxkIHdvcmsgY29ycmVjdGx5IGZvciB0aGUgdmFzdCBtYWpvcml0eSBvZiB1c2UgY2FzZXMuXG4gICAgcmV0dXJuIG5vZGUuYXJnc1swXS50b1RleCgpO1xuICB9LFxuICAvLyB0eXBlXG4gIG51bWJlcjoge1xuICAgIDA6ICcwJyxcbiAgICAxOiAnXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCknLFxuICAgIDI6ICdcXFxcbGVmdChcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KSR7YXJnc1sxXX1cXFxccmlnaHQpJ1xuICB9LFxuICBzdHJpbmc6IHtcbiAgICAwOiAnXFxcXG1hdGh0dHtcIlwifScsXG4gICAgMTogJ1xcXFxtYXRocm17c3RyaW5nfVxcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBiaWdudW1iZXI6IHtcbiAgICAwOiAnMCcsXG4gICAgMTogJ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBjb21wbGV4OiB7XG4gICAgMDogJzAnLFxuICAgIDE6ICdcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KScsXG4gICAgMjogXCJcXFxcbGVmdChcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KStcIi5jb25jYXQobGF0ZXhTeW1ib2xzLmksIFwiXFxcXGNkb3RcXFxcbGVmdCgke2FyZ3NbMV19XFxcXHJpZ2h0KVxcXFxyaWdodClcIilcbiAgfSxcbiAgbWF0cml4OiB7XG4gICAgMDogJ1xcXFxiZWdpbntibWF0cml4fVxcXFxlbmR7Ym1hdHJpeH0nLFxuICAgIDE6ICdcXFxcbGVmdCgke2FyZ3NbMF19XFxcXHJpZ2h0KScsXG4gICAgMjogJ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICBzcGFyc2U6IHtcbiAgICAwOiAnXFxcXGJlZ2lue2JzcGFyc2V9XFxcXGVuZHtic3BhcnNlfScsXG4gICAgMTogJ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJ1xuICB9LFxuICB1bml0OiB7XG4gICAgMTogJ1xcXFxsZWZ0KCR7YXJnc1swXX1cXFxccmlnaHQpJyxcbiAgICAyOiAnXFxcXGxlZnQoXFxcXGxlZnQoJHthcmdzWzBdfVxcXFxyaWdodCkke2FyZ3NbMV19XFxcXHJpZ2h0KSdcbiAgfVxufTtcbmV4cG9ydHMubGF0ZXhGdW5jdGlvbnMgPSBsYXRleEZ1bmN0aW9ucztcbnZhciBkZWZhdWx0VGVtcGxhdGUgPSAnXFxcXG1hdGhybXske25hbWV9fVxcXFxsZWZ0KCR7YXJnc31cXFxccmlnaHQpJztcbmV4cG9ydHMuZGVmYXVsdFRlbXBsYXRlID0gZGVmYXVsdFRlbXBsYXRlO1xudmFyIGxhdGV4VW5pdHMgPSB7XG4gIGRlZzogJ15cXFxcY2lyYydcbn07XG5cbmZ1bmN0aW9uIGVzY2FwZUxhdGV4KHN0cmluZykge1xuICByZXR1cm4gKDAsIF9lc2NhcGVMYXRleFtcImRlZmF1bHRcIl0pKHN0cmluZywge1xuICAgIHByZXNlcnZlRm9ybWF0dGluZzogdHJ1ZVxuICB9KTtcbn0gLy8gQHBhcmFtIHtzdHJpbmd9IG5hbWVcbi8vIEBwYXJhbSB7Ym9vbGVhbn0gaXNVbml0XG5cblxuZnVuY3Rpb24gdG9TeW1ib2wobmFtZSwgaXNVbml0KSB7XG4gIGlzVW5pdCA9IHR5cGVvZiBpc1VuaXQgPT09ICd1bmRlZmluZWQnID8gZmFsc2UgOiBpc1VuaXQ7XG5cbiAgaWYgKGlzVW5pdCkge1xuICAgIGlmICgoMCwgX29iamVjdC5oYXNPd25Qcm9wZXJ0eSkobGF0ZXhVbml0cywgbmFtZSkpIHtcbiAgICAgIHJldHVybiBsYXRleFVuaXRzW25hbWVdO1xuICAgIH1cblxuICAgIHJldHVybiAnXFxcXG1hdGhybXsnICsgZXNjYXBlTGF0ZXgobmFtZSkgKyAnfSc7XG4gIH1cblxuICBpZiAoKDAsIF9vYmplY3QuaGFzT3duUHJvcGVydHkpKGxhdGV4U3ltYm9scywgbmFtZSkpIHtcbiAgICByZXR1cm4gbGF0ZXhTeW1ib2xzW25hbWVdO1xuICB9XG5cbiAgcmV0dXJuIGVzY2FwZUxhdGV4KG5hbWUpO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy53YXJuT25jZSA9IHZvaWQgMDtcblxuLyoqXG4gKiBMb2cgYSBjb25zb2xlLndhcm4gbWVzc2FnZSBvbmx5IG9uY2VcbiAqL1xudmFyIHdhcm5PbmNlID0gZnVuY3Rpb24gKCkge1xuICB2YXIgbWVzc2FnZXMgPSB7fTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdhcm5PbmNlKCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgbWVzc2FnZSA9IGFyZ3Muam9pbignLCAnKTtcblxuICAgIGlmICghbWVzc2FnZXNbbWVzc2FnZV0pIHtcbiAgICAgIHZhciBfY29uc29sZTtcblxuICAgICAgbWVzc2FnZXNbbWVzc2FnZV0gPSB0cnVlO1xuXG4gICAgICAoX2NvbnNvbGUgPSBjb25zb2xlKS53YXJuLmFwcGx5KF9jb25zb2xlLCBbJ1dhcm5pbmc6J10uY29uY2F0KGFyZ3MpKTtcbiAgICB9XG4gIH07XG59KCk7XG5cbmV4cG9ydHMud2Fybk9uY2UgPSB3YXJuT25jZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMubm9CaWdudW1iZXIgPSBub0JpZ251bWJlcjtcbmV4cG9ydHMubm9GcmFjdGlvbiA9IG5vRnJhY3Rpb247XG5leHBvcnRzLm5vTWF0cml4ID0gbm9NYXRyaXg7XG5leHBvcnRzLm5vSW5kZXggPSBub0luZGV4O1xuZXhwb3J0cy5ub1N1YnNldCA9IG5vU3Vic2V0O1xuXG5mdW5jdGlvbiBub0JpZ251bWJlcigpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdObyBcImJpZ251bWJlclwiIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZScpO1xufVxuXG5mdW5jdGlvbiBub0ZyYWN0aW9uKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ05vIFwiZnJhY3Rpb25cIiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUnKTtcbn1cblxuZnVuY3Rpb24gbm9NYXRyaXgoKSB7XG4gIHRocm93IG5ldyBFcnJvcignTm8gXCJtYXRyaXhcIiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUnKTtcbn1cblxuZnVuY3Rpb24gbm9JbmRleCgpIHtcbiAgdGhyb3cgbmV3IEVycm9yKCdObyBcImluZGV4XCIgaW1wbGVtZW50YXRpb24gYXZhaWxhYmxlJyk7XG59XG5cbmZ1bmN0aW9uIG5vU3Vic2V0KCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ05vIFwibWF0cml4XCIgaW1wbGVtZW50YXRpb24gYXZhaWxhYmxlJyk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmlzSW50ZWdlciA9IGlzSW50ZWdlcjtcbmV4cG9ydHMuZm9ybWF0ID0gZm9ybWF0O1xuZXhwb3J0cy5zcGxpdE51bWJlciA9IHNwbGl0TnVtYmVyO1xuZXhwb3J0cy50b0VuZ2luZWVyaW5nID0gdG9FbmdpbmVlcmluZztcbmV4cG9ydHMudG9GaXhlZCA9IHRvRml4ZWQ7XG5leHBvcnRzLnRvRXhwb25lbnRpYWwgPSB0b0V4cG9uZW50aWFsO1xuZXhwb3J0cy50b1ByZWNpc2lvbiA9IHRvUHJlY2lzaW9uO1xuZXhwb3J0cy5yb3VuZERpZ2l0cyA9IHJvdW5kRGlnaXRzO1xuZXhwb3J0cy5kaWdpdHMgPSBkaWdpdHM7XG5leHBvcnRzLm5lYXJseUVxdWFsID0gbmVhcmx5RXF1YWw7XG5leHBvcnRzLnRhbmggPSBleHBvcnRzLnNpbmggPSBleHBvcnRzLmNvc2ggPSBleHBvcnRzLmF0YW5oID0gZXhwb3J0cy5hc2luaCA9IGV4cG9ydHMuYWNvc2ggPSBleHBvcnRzLkRCTF9FUFNJTE9OID0gZXhwb3J0cy5leHBtMSA9IGV4cG9ydHMuY2JydCA9IGV4cG9ydHMubG9nMXAgPSBleHBvcnRzLmxvZzEwID0gZXhwb3J0cy5sb2cyID0gZXhwb3J0cy5zaWduID0gdm9pZCAwO1xuXG52YXIgX29iamVjdCA9IHJlcXVpcmUoXCIuL29iamVjdFwiKTtcblxudmFyIF9pcyA9IHJlcXVpcmUoXCIuL2lzXCIpO1xuXG4vKipcbiAqIEB0eXBlZGVmIHt7c2lnbjogJysnIHwgJy0nIHwgJycsIGNvZWZmaWNpZW50czogbnVtYmVyW10sIGV4cG9uZW50OiBudW1iZXJ9fSBTcGxpdFZhbHVlXG4gKi9cblxuLyoqXG4gKiBDaGVjayBpZiBhIG51bWJlciBpcyBpbnRlZ2VyXG4gKiBAcGFyYW0ge251bWJlciB8IGJvb2xlYW59IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufSBpc0ludGVnZXJcbiAqL1xuZnVuY3Rpb24gaXNJbnRlZ2VyKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGlzRmluaXRlKHZhbHVlKSA/IHZhbHVlID09PSBNYXRoLnJvdW5kKHZhbHVlKSA6IGZhbHNlOyAvLyBOb3RlOiB3ZSB1c2UgPT0sIG5vdCA9PT0sIGFzIHdlIGNhbiBoYXZlIEJvb2xlYW5zIGFzIHdlbGxcbn1cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBzaWduIG9mIGEgbnVtYmVyXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuXG5cbnZhciBzaWduID0gLyogI19fUFVSRV9fICovTWF0aC5zaWduIHx8IGZ1bmN0aW9uICh4KSB7XG4gIGlmICh4ID4gMCkge1xuICAgIHJldHVybiAxO1xuICB9IGVsc2UgaWYgKHggPCAwKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59O1xuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIGJhc2UtMiBsb2dhcml0aG0gb2YgYSBudW1iZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5cblxuZXhwb3J0cy5zaWduID0gc2lnbjtcblxudmFyIGxvZzIgPSAvKiAjX19QVVJFX18gKi9NYXRoLmxvZzIgfHwgZnVuY3Rpb24gbG9nMih4KSB7XG4gIHJldHVybiBNYXRoLmxvZyh4KSAvIE1hdGguTE4yO1xufTtcbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBiYXNlLTEwIGxvZ2FyaXRobSBvZiBhIG51bWJlclxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblxuXG5leHBvcnRzLmxvZzIgPSBsb2cyO1xuXG52YXIgbG9nMTAgPSAvKiAjX19QVVJFX18gKi9NYXRoLmxvZzEwIHx8IGZ1bmN0aW9uIGxvZzEwKHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nKHgpIC8gTWF0aC5MTjEwO1xufTtcbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBuYXR1cmFsIGxvZ2FyaXRobSBvZiBhIG51bWJlciArIDFcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5cblxuZXhwb3J0cy5sb2cxMCA9IGxvZzEwO1xuXG52YXIgbG9nMXAgPSAvKiAjX19QVVJFX18gKi9NYXRoLmxvZzFwIHx8IGZ1bmN0aW9uICh4KSB7XG4gIHJldHVybiBNYXRoLmxvZyh4ICsgMSk7XG59O1xuLyoqXG4gKiBDYWxjdWxhdGUgY3ViaWMgcm9vdCBmb3IgYSBudW1iZXJcbiAqXG4gKiBDb2RlIGZyb20gZXM2LXNoaW0uanM6XG4gKiAgIGh0dHBzOi8vZ2l0aHViLmNvbS9wYXVsbWlsbHIvZXM2LXNoaW0vYmxvYi9tYXN0ZXIvZXM2LXNoaW0uanMjTDE1NjQtTDE1NzdcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0geFxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgY3ViaWMgcm9vdCBvZiB4XG4gKi9cblxuXG5leHBvcnRzLmxvZzFwID0gbG9nMXA7XG5cbnZhciBjYnJ0ID0gLyogI19fUFVSRV9fICovTWF0aC5jYnJ0IHx8IGZ1bmN0aW9uIGNicnQoeCkge1xuICBpZiAoeCA9PT0gMCkge1xuICAgIHJldHVybiB4O1xuICB9XG5cbiAgdmFyIG5lZ2F0ZSA9IHggPCAwO1xuICB2YXIgcmVzdWx0O1xuXG4gIGlmIChuZWdhdGUpIHtcbiAgICB4ID0gLXg7XG4gIH1cblxuICBpZiAoaXNGaW5pdGUoeCkpIHtcbiAgICByZXN1bHQgPSBNYXRoLmV4cChNYXRoLmxvZyh4KSAvIDMpOyAvLyBmcm9tIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0N1YmVfcm9vdCNOdW1lcmljYWxfbWV0aG9kc1xuXG4gICAgcmVzdWx0ID0gKHggLyAocmVzdWx0ICogcmVzdWx0KSArIDIgKiByZXN1bHQpIC8gMztcbiAgfSBlbHNlIHtcbiAgICByZXN1bHQgPSB4O1xuICB9XG5cbiAgcmV0dXJuIG5lZ2F0ZSA/IC1yZXN1bHQgOiByZXN1bHQ7XG59O1xuLyoqXG4gKiBDYWxjdWxhdGVzIGV4cG9uZW50aWF0aW9uIG1pbnVzIDFcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcmV0dXJuIHtudW1iZXJ9IHJlc1xuICovXG5cblxuZXhwb3J0cy5jYnJ0ID0gY2JydDtcblxudmFyIGV4cG0xID0gLyogI19fUFVSRV9fICovTWF0aC5leHBtMSB8fCBmdW5jdGlvbiBleHBtMSh4KSB7XG4gIHJldHVybiB4ID49IDJlLTQgfHwgeCA8PSAtMmUtNCA/IE1hdGguZXhwKHgpIC0gMSA6IHggKyB4ICogeCAvIDIgKyB4ICogeCAqIHggLyA2O1xufTtcbi8qKlxuICogQ29udmVydCBhIG51bWJlciB0byBhIGZvcm1hdHRlZCBzdHJpbmcgcmVwcmVzZW50YXRpb24uXG4gKlxuICogU3ludGF4OlxuICpcbiAqICAgIGZvcm1hdCh2YWx1ZSlcbiAqICAgIGZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAqICAgIGZvcm1hdCh2YWx1ZSwgcHJlY2lzaW9uKVxuICogICAgZm9ybWF0KHZhbHVlLCBmbilcbiAqXG4gKiBXaGVyZTpcbiAqXG4gKiAgICB7bnVtYmVyfSB2YWx1ZSAgIFRoZSB2YWx1ZSB0byBiZSBmb3JtYXR0ZWRcbiAqICAgIHtPYmplY3R9IG9wdGlvbnMgQW4gb2JqZWN0IHdpdGggZm9ybWF0dGluZyBvcHRpb25zLiBBdmFpbGFibGUgb3B0aW9uczpcbiAqICAgICAgICAgICAgICAgICAgICAge3N0cmluZ30gbm90YXRpb25cbiAqICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBub3RhdGlvbi4gQ2hvb3NlIGZyb206XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAnZml4ZWQnICAgICAgICAgIEFsd2F5cyB1c2UgcmVndWxhciBudW1iZXIgbm90YXRpb24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlICcxMjMuNDAnIGFuZCAnMTQwMDAwMDAnXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAnZXhwb25lbnRpYWwnICAgIEFsd2F5cyB1c2UgZXhwb25lbnRpYWwgbm90YXRpb24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlICcxLjIzNGUrMicgYW5kICcxLjRlKzcnXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAnZW5naW5lZXJpbmcnICAgIEFsd2F5cyB1c2UgZW5naW5lZXJpbmcgbm90YXRpb24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlICcxMjMuNGUrMCcgYW5kICcxNC4wZSs2J1xuICogICAgICAgICAgICAgICAgICAgICAgICAgJ2F1dG8nIChkZWZhdWx0KSBSZWd1bGFyIG51bWJlciBub3RhdGlvbiBmb3IgbnVtYmVyc1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZpbmcgYW4gYWJzb2x1dGUgdmFsdWUgYmV0d2VlblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgbG93ZXJFeHBgIGFuZCBgdXBwZXJFeHBgIGJvdW5kcywgYW5kXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXMgZXhwb25lbnRpYWwgbm90YXRpb24gZWxzZXdoZXJlLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb3dlciBib3VuZCBpcyBpbmNsdWRlZCwgdXBwZXIgYm91bmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgZXhjbHVkZWQuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlICcxMjMuNCcgYW5kICcxLjRlNycuXG4gKiAgICAgICAgICAgICAgICAgICAgIHtudW1iZXJ9IHByZWNpc2lvbiAgIEEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMTYgdG8gcm91bmRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGRpZ2l0cyBvZiB0aGUgbnVtYmVyLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiBjYXNlIG9mIG5vdGF0aW9ucyAnZXhwb25lbnRpYWwnLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZW5naW5lZXJpbmcnLCBhbmQgJ2F1dG8nLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcHJlY2lzaW9uYCBkZWZpbmVzIHRoZSB0b3RhbFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIHJldHVybmVkLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbiBjYXNlIG9mIG5vdGF0aW9uICdmaXhlZCcsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBwcmVjaXNpb25gIGRlZmluZXMgdGhlIG51bWJlciBvZlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduaWZpY2FudCBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnQuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBwcmVjaXNpb25gIGlzIHVuZGVmaW5lZCBieSBkZWZhdWx0LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3Qgcm91bmRpbmcgYW55IGRpZ2l0cy5cbiAqICAgICAgICAgICAgICAgICAgICAge251bWJlcn0gbG93ZXJFeHAgICAgRXhwb25lbnQgZGV0ZXJtaW5pbmcgdGhlIGxvd2VyIGJvdW5kYXJ5XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmb3JtYXR0aW5nIGEgdmFsdWUgd2l0aCBhbiBleHBvbmVudFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGBub3RhdGlvbj0nYXV0b2AuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgdmFsdWUgaXMgYC0zYC5cbiAqICAgICAgICAgICAgICAgICAgICAge251bWJlcn0gdXBwZXJFeHAgICAgRXhwb25lbnQgZGV0ZXJtaW5pbmcgdGhlIHVwcGVyIGJvdW5kYXJ5XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmb3JtYXR0aW5nIGEgdmFsdWUgd2l0aCBhbiBleHBvbmVudFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGBub3RhdGlvbj0nYXV0b2AuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgdmFsdWUgaXMgYDVgLlxuICogICAge0Z1bmN0aW9ufSBmbiAgICBBIGN1c3RvbSBmb3JtYXR0aW5nIGZ1bmN0aW9uLiBDYW4gYmUgdXNlZCB0byBvdmVycmlkZSB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgYnVpbHQtaW4gbm90YXRpb25zLiBGdW5jdGlvbiBgZm5gIGlzIGNhbGxlZCB3aXRoIGB2YWx1ZWAgYXNcbiAqICAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVyIGFuZCBtdXN0IHJldHVybiBhIHN0cmluZy4gSXMgdXNlZnVsIGZvciBleGFtcGxlIHRvXG4gKiAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCBhbGwgdmFsdWVzIGluc2lkZSBhIG1hdHJpeCBpbiBhIHBhcnRpY3VsYXIgd2F5LlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgIGZvcm1hdCg2LjQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICc2LjQnXG4gKiAgICBmb3JtYXQoMTI0MDAwMCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAnMS4yNGU2J1xuICogICAgZm9ybWF0KDEvMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gJzAuMzMzMzMzMzMzMzMzMzMzMydcbiAqICAgIGZvcm1hdCgxLzMsIDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICcwLjMzMydcbiAqICAgIGZvcm1hdCgyMTM4NSwgMikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICcyMTAwMCdcbiAqICAgIGZvcm1hdCgxMi4wNzEsIHtub3RhdGlvbjogJ2ZpeGVkJ30pICAgICAgICAgICAgICAgIC8vICcxMidcbiAqICAgIGZvcm1hdCgyLjMsICAgIHtub3RhdGlvbjogJ2ZpeGVkJywgcHJlY2lzaW9uOiAyfSkgIC8vICcyLjMwJ1xuICogICAgZm9ybWF0KDUyLjgsICAge25vdGF0aW9uOiAnZXhwb25lbnRpYWwnfSkgICAgICAgICAgLy8gJzUuMjhlKzEnXG4gKiAgICBmb3JtYXQoMTIzNDU2NzgsIHtub3RhdGlvbjogJ2VuZ2luZWVyaW5nJ30pICAgICAgICAvLyAnMTIuMzQ1Njc4ZSs2J1xuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHBhcmFtIHtPYmplY3QgfCBGdW5jdGlvbiB8IG51bWJlcn0gW29wdGlvbnNdXG4gKiBAcmV0dXJuIHtzdHJpbmd9IHN0ciBUaGUgZm9ybWF0dGVkIHZhbHVlXG4gKi9cblxuXG5leHBvcnRzLmV4cG0xID0gZXhwbTE7XG5cbmZ1bmN0aW9uIGZvcm1hdCh2YWx1ZSwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBoYW5kbGUgZm9ybWF0KHZhbHVlLCBmbilcbiAgICByZXR1cm4gb3B0aW9ucyh2YWx1ZSk7XG4gIH0gLy8gaGFuZGxlIHNwZWNpYWwgY2FzZXNcblxuXG4gIGlmICh2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICByZXR1cm4gJ0luZmluaXR5JztcbiAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gLUluZmluaXR5KSB7XG4gICAgcmV0dXJuICctSW5maW5pdHknO1xuICB9IGVsc2UgaWYgKGlzTmFOKHZhbHVlKSkge1xuICAgIHJldHVybiAnTmFOJztcbiAgfSAvLyBkZWZhdWx0IHZhbHVlcyBmb3Igb3B0aW9uc1xuXG5cbiAgdmFyIG5vdGF0aW9uID0gJ2F1dG8nO1xuICB2YXIgcHJlY2lzaW9uO1xuXG4gIGlmIChvcHRpb25zKSB7XG4gICAgLy8gZGV0ZXJtaW5lIG5vdGF0aW9uIGZyb20gb3B0aW9uc1xuICAgIGlmIChvcHRpb25zLm5vdGF0aW9uKSB7XG4gICAgICBub3RhdGlvbiA9IG9wdGlvbnMubm90YXRpb247XG4gICAgfSAvLyBkZXRlcm1pbmUgcHJlY2lzaW9uIGZyb20gb3B0aW9uc1xuXG5cbiAgICBpZiAoKDAsIF9pcy5pc051bWJlcikob3B0aW9ucykpIHtcbiAgICAgIHByZWNpc2lvbiA9IG9wdGlvbnM7XG4gICAgfSBlbHNlIGlmICgoMCwgX2lzLmlzTnVtYmVyKShvcHRpb25zLnByZWNpc2lvbikpIHtcbiAgICAgIHByZWNpc2lvbiA9IG9wdGlvbnMucHJlY2lzaW9uO1xuICAgIH1cbiAgfSAvLyBoYW5kbGUgdGhlIHZhcmlvdXMgbm90YXRpb25zXG5cblxuICBzd2l0Y2ggKG5vdGF0aW9uKSB7XG4gICAgY2FzZSAnZml4ZWQnOlxuICAgICAgcmV0dXJuIHRvRml4ZWQodmFsdWUsIHByZWNpc2lvbik7XG5cbiAgICBjYXNlICdleHBvbmVudGlhbCc6XG4gICAgICByZXR1cm4gdG9FeHBvbmVudGlhbCh2YWx1ZSwgcHJlY2lzaW9uKTtcblxuICAgIGNhc2UgJ2VuZ2luZWVyaW5nJzpcbiAgICAgIHJldHVybiB0b0VuZ2luZWVyaW5nKHZhbHVlLCBwcmVjaXNpb24pO1xuXG4gICAgY2FzZSAnYXV0byc6XG4gICAgICAvLyBUT0RPOiBjbGVhbiB1cCBzb21lIGRheS4gRGVwcmVjYXRlZCBzaW5jZTogMjAxOC0wMS0yNFxuICAgICAgLy8gQGRlcHJlY2F0ZWQgdXBwZXIgYW5kIGxvd2VyIGFyZSByZXBsYWNlZCB3aXRoIHVwcGVyRXhwIGFuZCBsb3dlckV4cCBzaW5jZSB2NC4wLjBcbiAgICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZXhwb25lbnRpYWwgJiYgKG9wdGlvbnMuZXhwb25lbnRpYWwubG93ZXIgIT09IHVuZGVmaW5lZCB8fCBvcHRpb25zLmV4cG9uZW50aWFsLnVwcGVyICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIHZhciBmaXhlZE9wdGlvbnMgPSAoMCwgX29iamVjdC5tYXBPYmplY3QpKG9wdGlvbnMsIGZ1bmN0aW9uICh4KSB7XG4gICAgICAgICAgcmV0dXJuIHg7XG4gICAgICAgIH0pO1xuICAgICAgICBmaXhlZE9wdGlvbnMuZXhwb25lbnRpYWwgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuZXhwb25lbnRpYWwubG93ZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZpeGVkT3B0aW9ucy5sb3dlckV4cCA9IE1hdGgucm91bmQoTWF0aC5sb2cob3B0aW9ucy5leHBvbmVudGlhbC5sb3dlcikgLyBNYXRoLkxOMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuZXhwb25lbnRpYWwudXBwZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZpeGVkT3B0aW9ucy51cHBlckV4cCA9IE1hdGgucm91bmQoTWF0aC5sb2cob3B0aW9ucy5leHBvbmVudGlhbC51cHBlcikgLyBNYXRoLkxOMTApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc29sZS53YXJuKCdEZXByZWNhdGlvbiB3YXJuaW5nOiBGb3JtYXR0aW5nIG9wdGlvbnMgZXhwb25lbnRpYWwubG93ZXIgYW5kIGV4cG9uZW50aWFsLnVwcGVyICcgKyAnKG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWUpICcgKyAnYXJlIHJlcGxhY2VkIHdpdGggZXhwb25lbnRpYWwubG93ZXJFeHAgYW5kIGV4cG9uZW50aWFsLnVwcGVyRXhwICcgKyAnKG1pbmltdW0gYW5kIG1heGltdW0gZXhwb25lbnQpIHNpbmNlIHZlcnNpb24gNC4wLjAuICcgKyAnUmVwbGFjZSAnICsgSlNPTi5zdHJpbmdpZnkob3B0aW9ucykgKyAnIHdpdGggJyArIEpTT04uc3RyaW5naWZ5KGZpeGVkT3B0aW9ucykpO1xuICAgICAgICByZXR1cm4gdG9QcmVjaXNpb24odmFsdWUsIHByZWNpc2lvbiwgZml4ZWRPcHRpb25zKTtcbiAgICAgIH0gLy8gcmVtb3ZlIHRyYWlsaW5nIHplcm9zIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50XG5cblxuICAgICAgcmV0dXJuIHRvUHJlY2lzaW9uKHZhbHVlLCBwcmVjaXNpb24sIG9wdGlvbnMgJiYgb3B0aW9ucykucmVwbGFjZSgvKChcXC5cXGQqPykoMCspKSgkfGUpLywgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGlnaXRzID0gYXJndW1lbnRzWzJdO1xuICAgICAgICB2YXIgZSA9IGFyZ3VtZW50c1s0XTtcbiAgICAgICAgcmV0dXJuIGRpZ2l0cyAhPT0gJy4nID8gZGlnaXRzICsgZSA6IGU7XG4gICAgICB9KTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbm90YXRpb24gXCInICsgbm90YXRpb24gKyAnXCIuICcgKyAnQ2hvb3NlIFwiYXV0b1wiLCBcImV4cG9uZW50aWFsXCIsIG9yIFwiZml4ZWRcIi4nKTtcbiAgfVxufVxuLyoqXG4gKiBTcGxpdCBhIG51bWJlciBpbnRvIHNpZ24sIGNvZWZmaWNpZW50cywgYW5kIGV4cG9uZW50XG4gKiBAcGFyYW0ge251bWJlciB8IHN0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge1NwbGl0VmFsdWV9XG4gKiAgICAgICAgICAgICAgUmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyBzaWduLCBjb2VmZmljaWVudHMsIGFuZCBleHBvbmVudFxuICovXG5cblxuZnVuY3Rpb24gc3BsaXROdW1iZXIodmFsdWUpIHtcbiAgLy8gcGFyc2UgdGhlIGlucHV0IHZhbHVlXG4gIHZhciBtYXRjaCA9IFN0cmluZyh2YWx1ZSkudG9Mb3dlckNhc2UoKS5tYXRjaCgvXjAqPygtPykoXFxkK1xcLj9cXGQqKShlKFsrLV0/XFxkKykpPyQvKTtcblxuICBpZiAoIW1hdGNoKSB7XG4gICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdJbnZhbGlkIG51bWJlciAnICsgdmFsdWUpO1xuICB9XG5cbiAgdmFyIHNpZ24gPSBtYXRjaFsxXTtcbiAgdmFyIGRpZ2l0cyA9IG1hdGNoWzJdO1xuICB2YXIgZXhwb25lbnQgPSBwYXJzZUZsb2F0KG1hdGNoWzRdIHx8ICcwJyk7XG4gIHZhciBkb3QgPSBkaWdpdHMuaW5kZXhPZignLicpO1xuICBleHBvbmVudCArPSBkb3QgIT09IC0xID8gZG90IC0gMSA6IGRpZ2l0cy5sZW5ndGggLSAxO1xuICB2YXIgY29lZmZpY2llbnRzID0gZGlnaXRzLnJlcGxhY2UoJy4nLCAnJykgLy8gcmVtb3ZlIHRoZSBkb3QgKG11c3QgYmUgcmVtb3ZlZCBiZWZvcmUgcmVtb3ZpbmcgbGVhZGluZyB6ZXJvcylcbiAgLnJlcGxhY2UoL14wKi8sIGZ1bmN0aW9uICh6ZXJvcykge1xuICAgIC8vIHJlbW92ZSBsZWFkaW5nIHplcm9zLCBhZGQgdGhlaXIgY291bnQgdG8gdGhlIGV4cG9uZW50XG4gICAgZXhwb25lbnQgLT0gemVyb3MubGVuZ3RoO1xuICAgIHJldHVybiAnJztcbiAgfSkucmVwbGFjZSgvMCokLywgJycpIC8vIHJlbW92ZSB0cmFpbGluZyB6ZXJvc1xuICAuc3BsaXQoJycpLm1hcChmdW5jdGlvbiAoZCkge1xuICAgIHJldHVybiBwYXJzZUludChkKTtcbiAgfSk7XG5cbiAgaWYgKGNvZWZmaWNpZW50cy5sZW5ndGggPT09IDApIHtcbiAgICBjb2VmZmljaWVudHMucHVzaCgwKTtcbiAgICBleHBvbmVudCsrO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzaWduOiBzaWduLFxuICAgIGNvZWZmaWNpZW50czogY29lZmZpY2llbnRzLFxuICAgIGV4cG9uZW50OiBleHBvbmVudFxuICB9O1xufVxuLyoqXG4gKiBGb3JtYXQgYSBudW1iZXIgaW4gZW5naW5lZXJpbmcgbm90YXRpb24uIExpa2UgJzEuMjNlKzYnLCAnMi4zZSswJywgJzMuNTAwZS0zJ1xuICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbl0gICAgICAgIE9wdGlvbmFsIG51bWJlciBvZiBzaWduaWZpY2FudCBmaWd1cmVzIHRvIHJldHVybi5cbiAqL1xuXG5cbmZ1bmN0aW9uIHRvRW5naW5lZXJpbmcodmFsdWUsIHByZWNpc2lvbikge1xuICBpZiAoaXNOYU4odmFsdWUpIHx8ICFpc0Zpbml0ZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxuXG4gIHZhciBzcGxpdCA9IHNwbGl0TnVtYmVyKHZhbHVlKTtcbiAgdmFyIHJvdW5kZWQgPSByb3VuZERpZ2l0cyhzcGxpdCwgcHJlY2lzaW9uKTtcbiAgdmFyIGUgPSByb3VuZGVkLmV4cG9uZW50O1xuICB2YXIgYyA9IHJvdW5kZWQuY29lZmZpY2llbnRzOyAvLyBmaW5kIG5lYXJlc3QgbG93ZXIgbXVsdGlwbGUgb2YgMyBmb3IgZXhwb25lbnRcblxuICB2YXIgbmV3RXhwID0gZSAlIDMgPT09IDAgPyBlIDogZSA8IDAgPyBlIC0gMyAtIGUgJSAzIDogZSAtIGUgJSAzO1xuXG4gIGlmICgoMCwgX2lzLmlzTnVtYmVyKShwcmVjaXNpb24pKSB7XG4gICAgLy8gYWRkIHplcm9lcyB0byBnaXZlIGNvcnJlY3Qgc2lnIGZpZ3NcbiAgICB3aGlsZSAocHJlY2lzaW9uID4gYy5sZW5ndGggfHwgZSAtIG5ld0V4cCArIDEgPiBjLmxlbmd0aCkge1xuICAgICAgYy5wdXNoKDApO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBjb25jYXRlbmF0ZSBjb2VmZmljaWVudHMgd2l0aCBuZWNlc3NhcnkgemVyb3NcbiAgICAvLyBhZGQgemVyb3MgaWYgbmVjZXNzYXJ5IChmb3IgZXhhbXBsZTogMWUrOCAtPiAxMDBlKzYpXG4gICAgdmFyIG1pc3NpbmdaZXJvcyA9IE1hdGguYWJzKGUgLSBuZXdFeHApIC0gKGMubGVuZ3RoIC0gMSk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1pc3NpbmdaZXJvczsgaSsrKSB7XG4gICAgICBjLnB1c2goMCk7XG4gICAgfVxuICB9IC8vIGZpbmQgZGlmZmVyZW5jZSBpbiBleHBvbmVudHNcblxuXG4gIHZhciBleHBEaWZmID0gTWF0aC5hYnMoZSAtIG5ld0V4cCk7XG4gIHZhciBkZWNpbWFsSWR4ID0gMTsgLy8gcHVzaCBkZWNpbWFsIGluZGV4IG92ZXIgYnkgZXhwRGlmZiB0aW1lc1xuXG4gIHdoaWxlIChleHBEaWZmID4gMCkge1xuICAgIGRlY2ltYWxJZHgrKztcbiAgICBleHBEaWZmLS07XG4gIH0gLy8gaWYgYWxsIGNvZWZmaWNpZW50IHZhbHVlcyBhcmUgemVybyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCBhbmQgcHJlY2lzaW9uIGlzIHVuc2V0LCBkb24ndCBhZGQgYSBkZWNpbWFsIHZhbHVlLlxuICAvLyBvdGhlcndpc2UgY29uY2F0IHdpdGggdGhlIHJlc3Qgb2YgdGhlIGNvZWZmaWNpZW50c1xuXG5cbiAgdmFyIGRlY2ltYWxzID0gYy5zbGljZShkZWNpbWFsSWR4KS5qb2luKCcnKTtcbiAgdmFyIGRlY2ltYWxWYWwgPSAoMCwgX2lzLmlzTnVtYmVyKShwcmVjaXNpb24pICYmIGRlY2ltYWxzLmxlbmd0aCB8fCBkZWNpbWFscy5tYXRjaCgvWzEtOV0vKSA/ICcuJyArIGRlY2ltYWxzIDogJyc7XG4gIHZhciBzdHIgPSBjLnNsaWNlKDAsIGRlY2ltYWxJZHgpLmpvaW4oJycpICsgZGVjaW1hbFZhbCArICdlJyArIChlID49IDAgPyAnKycgOiAnJykgKyBuZXdFeHAudG9TdHJpbmcoKTtcbiAgcmV0dXJuIHJvdW5kZWQuc2lnbiArIHN0cjtcbn1cbi8qKlxuICogRm9ybWF0IGEgbnVtYmVyIHdpdGggZml4ZWQgbm90YXRpb24uXG4gKiBAcGFyYW0ge251bWJlciB8IHN0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBbcHJlY2lzaW9uPXVuZGVmaW5lZF0gIE9wdGlvbmFsIG51bWJlciBvZiBkZWNpbWFscyBhZnRlciB0aGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWwgcG9pbnQuIG51bGwgYnkgZGVmYXVsdC5cbiAqL1xuXG5cbmZ1bmN0aW9uIHRvRml4ZWQodmFsdWUsIHByZWNpc2lvbikge1xuICBpZiAoaXNOYU4odmFsdWUpIHx8ICFpc0Zpbml0ZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxuXG4gIHZhciBzcGxpdFZhbHVlID0gc3BsaXROdW1iZXIodmFsdWUpO1xuICB2YXIgcm91bmRlZCA9IHR5cGVvZiBwcmVjaXNpb24gPT09ICdudW1iZXInID8gcm91bmREaWdpdHMoc3BsaXRWYWx1ZSwgc3BsaXRWYWx1ZS5leHBvbmVudCArIDEgKyBwcmVjaXNpb24pIDogc3BsaXRWYWx1ZTtcbiAgdmFyIGMgPSByb3VuZGVkLmNvZWZmaWNpZW50cztcbiAgdmFyIHAgPSByb3VuZGVkLmV4cG9uZW50ICsgMTsgLy8gZXhwb25lbnQgbWF5IGhhdmUgY2hhbmdlZFxuICAvLyBhcHBlbmQgemVyb3MgaWYgbmVlZGVkXG5cbiAgdmFyIHBwID0gcCArIChwcmVjaXNpb24gfHwgMCk7XG5cbiAgaWYgKGMubGVuZ3RoIDwgcHApIHtcbiAgICBjID0gYy5jb25jYXQoemVyb3MocHAgLSBjLmxlbmd0aCkpO1xuICB9IC8vIHByZXBlbmQgemVyb3MgaWYgbmVlZGVkXG5cblxuICBpZiAocCA8IDApIHtcbiAgICBjID0gemVyb3MoLXAgKyAxKS5jb25jYXQoYyk7XG4gICAgcCA9IDE7XG4gIH0gLy8gaW5zZXJ0IGEgZG90IGlmIG5lZWRlZFxuXG5cbiAgaWYgKHAgPCBjLmxlbmd0aCkge1xuICAgIGMuc3BsaWNlKHAsIDAsIHAgPT09IDAgPyAnMC4nIDogJy4nKTtcbiAgfVxuXG4gIHJldHVybiByb3VuZGVkLnNpZ24gKyBjLmpvaW4oJycpO1xufVxuLyoqXG4gKiBGb3JtYXQgYSBudW1iZXIgaW4gZXhwb25lbnRpYWwgbm90YXRpb24uIExpa2UgJzEuMjNlKzUnLCAnMi4zZSswJywgJzMuNTAwZS0zJ1xuICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbl0gIE51bWJlciBvZiBkaWdpdHMgaW4gZm9ybWF0dGVkIG91dHB1dC5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgbm90IHByb3ZpZGVkLCB0aGUgbWF4aW11bSBhdmFpbGFibGUgZGlnaXRzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHVzZWQuXG4gKi9cblxuXG5mdW5jdGlvbiB0b0V4cG9uZW50aWFsKHZhbHVlLCBwcmVjaXNpb24pIHtcbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCAhaXNGaW5pdGUodmFsdWUpKSB7XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH0gLy8gcm91bmQgaWYgbmVlZGVkLCBlbHNlIGNyZWF0ZSBhIGNsb25lXG5cblxuICB2YXIgc3BsaXQgPSBzcGxpdE51bWJlcih2YWx1ZSk7XG4gIHZhciByb3VuZGVkID0gcHJlY2lzaW9uID8gcm91bmREaWdpdHMoc3BsaXQsIHByZWNpc2lvbikgOiBzcGxpdDtcbiAgdmFyIGMgPSByb3VuZGVkLmNvZWZmaWNpZW50cztcbiAgdmFyIGUgPSByb3VuZGVkLmV4cG9uZW50OyAvLyBhcHBlbmQgemVyb3MgaWYgbmVlZGVkXG5cbiAgaWYgKGMubGVuZ3RoIDwgcHJlY2lzaW9uKSB7XG4gICAgYyA9IGMuY29uY2F0KHplcm9zKHByZWNpc2lvbiAtIGMubGVuZ3RoKSk7XG4gIH0gLy8gZm9ybWF0IGFzIGBDLkNDQ2UrRUVFYCBvciBgQy5DQ0NlLUVFRWBcblxuXG4gIHZhciBmaXJzdCA9IGMuc2hpZnQoKTtcbiAgcmV0dXJuIHJvdW5kZWQuc2lnbiArIGZpcnN0ICsgKGMubGVuZ3RoID4gMCA/ICcuJyArIGMuam9pbignJykgOiAnJykgKyAnZScgKyAoZSA+PSAwID8gJysnIDogJycpICsgZTtcbn1cbi8qKlxuICogRm9ybWF0IGEgbnVtYmVyIHdpdGggYSBjZXJ0YWluIHByZWNpc2lvblxuICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gW3ByZWNpc2lvbj11bmRlZmluZWRdIE9wdGlvbmFsIG51bWJlciBvZiBkaWdpdHMuXG4gKiBAcGFyYW0ge3tsb3dlckV4cDogbnVtYmVyIHwgdW5kZWZpbmVkLCB1cHBlckV4cDogbnVtYmVyIHwgdW5kZWZpbmVkfX0gW29wdGlvbnNdXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5IGRlZmF1bHQ6XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG93ZXJFeHAgPSAtMyAoaW5jbClcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cHBlciA9ICs1IChleGNsKVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gdG9QcmVjaXNpb24odmFsdWUsIHByZWNpc2lvbiwgb3B0aW9ucykge1xuICBpZiAoaXNOYU4odmFsdWUpIHx8ICFpc0Zpbml0ZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfSAvLyBkZXRlcm1pbmUgbG93ZXIgYW5kIHVwcGVyIGJvdW5kIGZvciBleHBvbmVudGlhbCBub3RhdGlvbi5cblxuXG4gIHZhciBsb3dlckV4cCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5sb3dlckV4cCAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5sb3dlckV4cCA6IC0zO1xuICB2YXIgdXBwZXJFeHAgPSBvcHRpb25zICYmIG9wdGlvbnMudXBwZXJFeHAgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMudXBwZXJFeHAgOiA1O1xuICB2YXIgc3BsaXQgPSBzcGxpdE51bWJlcih2YWx1ZSk7XG4gIHZhciByb3VuZGVkID0gcHJlY2lzaW9uID8gcm91bmREaWdpdHMoc3BsaXQsIHByZWNpc2lvbikgOiBzcGxpdDtcblxuICBpZiAocm91bmRlZC5leHBvbmVudCA8IGxvd2VyRXhwIHx8IHJvdW5kZWQuZXhwb25lbnQgPj0gdXBwZXJFeHApIHtcbiAgICAvLyBleHBvbmVudGlhbCBub3RhdGlvblxuICAgIHJldHVybiB0b0V4cG9uZW50aWFsKHZhbHVlLCBwcmVjaXNpb24pO1xuICB9IGVsc2Uge1xuICAgIHZhciBjID0gcm91bmRlZC5jb2VmZmljaWVudHM7XG4gICAgdmFyIGUgPSByb3VuZGVkLmV4cG9uZW50OyAvLyBhcHBlbmQgdHJhaWxpbmcgemVyb3NcblxuICAgIGlmIChjLmxlbmd0aCA8IHByZWNpc2lvbikge1xuICAgICAgYyA9IGMuY29uY2F0KHplcm9zKHByZWNpc2lvbiAtIGMubGVuZ3RoKSk7XG4gICAgfSAvLyBhcHBlbmQgdHJhaWxpbmcgemVyb3NcbiAgICAvLyBUT0RPOiBzaW1wbGlmeSB0aGUgbmV4dCBzdGF0ZW1lbnRcblxuXG4gICAgYyA9IGMuY29uY2F0KHplcm9zKGUgLSBjLmxlbmd0aCArIDEgKyAoYy5sZW5ndGggPCBwcmVjaXNpb24gPyBwcmVjaXNpb24gLSBjLmxlbmd0aCA6IDApKSk7IC8vIHByZXBlbmQgemVyb3NcblxuICAgIGMgPSB6ZXJvcygtZSkuY29uY2F0KGMpO1xuICAgIHZhciBkb3QgPSBlID4gMCA/IGUgOiAwO1xuXG4gICAgaWYgKGRvdCA8IGMubGVuZ3RoIC0gMSkge1xuICAgICAgYy5zcGxpY2UoZG90ICsgMSwgMCwgJy4nKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm91bmRlZC5zaWduICsgYy5qb2luKCcnKTtcbiAgfVxufVxuLyoqXG4gKiBSb3VuZCB0aGUgbnVtYmVyIG9mIGRpZ2l0cyBvZiBhIG51bWJlciAqXG4gKiBAcGFyYW0ge1NwbGl0VmFsdWV9IHNwbGl0ICAgICAgIEEgdmFsdWUgc3BsaXQgd2l0aCAuc3BsaXROdW1iZXIodmFsdWUpXG4gKiBAcGFyYW0ge251bWJlcn0gcHJlY2lzaW9uICBBIHBvc2l0aXZlIGludGVnZXJcbiAqIEByZXR1cm4ge1NwbGl0VmFsdWV9XG4gKiAgICAgICAgICAgICAgUmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyBzaWduLCBjb2VmZmljaWVudHMsIGFuZCBleHBvbmVudFxuICogICAgICAgICAgICAgIHdpdGggcm91bmRlZCBkaWdpdHNcbiAqL1xuXG5cbmZ1bmN0aW9uIHJvdW5kRGlnaXRzKHNwbGl0LCBwcmVjaXNpb24pIHtcbiAgLy8gY3JlYXRlIGEgY2xvbmVcbiAgdmFyIHJvdW5kZWQgPSB7XG4gICAgc2lnbjogc3BsaXQuc2lnbixcbiAgICBjb2VmZmljaWVudHM6IHNwbGl0LmNvZWZmaWNpZW50cyxcbiAgICBleHBvbmVudDogc3BsaXQuZXhwb25lbnRcbiAgfTtcbiAgdmFyIGMgPSByb3VuZGVkLmNvZWZmaWNpZW50czsgLy8gcHJlcGVuZCB6ZXJvcyBpZiBuZWVkZWRcblxuICB3aGlsZSAocHJlY2lzaW9uIDw9IDApIHtcbiAgICBjLnVuc2hpZnQoMCk7XG4gICAgcm91bmRlZC5leHBvbmVudCsrO1xuICAgIHByZWNpc2lvbisrO1xuICB9XG5cbiAgaWYgKGMubGVuZ3RoID4gcHJlY2lzaW9uKSB7XG4gICAgdmFyIHJlbW92ZWQgPSBjLnNwbGljZShwcmVjaXNpb24sIGMubGVuZ3RoIC0gcHJlY2lzaW9uKTtcblxuICAgIGlmIChyZW1vdmVkWzBdID49IDUpIHtcbiAgICAgIHZhciBpID0gcHJlY2lzaW9uIC0gMTtcbiAgICAgIGNbaV0rKztcblxuICAgICAgd2hpbGUgKGNbaV0gPT09IDEwKSB7XG4gICAgICAgIGMucG9wKCk7XG5cbiAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICBjLnVuc2hpZnQoMCk7XG4gICAgICAgICAgcm91bmRlZC5leHBvbmVudCsrO1xuICAgICAgICAgIGkrKztcbiAgICAgICAgfVxuXG4gICAgICAgIGktLTtcbiAgICAgICAgY1tpXSsrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByb3VuZGVkO1xufVxuLyoqXG4gKiBDcmVhdGUgYW4gYXJyYXkgZmlsbGVkIHdpdGggemVyb3MuXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqL1xuXG5cbmZ1bmN0aW9uIHplcm9zKGxlbmd0aCkge1xuICB2YXIgYXJyID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykge1xuICAgIGFyci5wdXNoKDApO1xuICB9XG5cbiAgcmV0dXJuIGFycjtcbn1cbi8qKlxuICogQ291bnQgdGhlIG51bWJlciBvZiBzaWduaWZpY2FudCBkaWdpdHMgb2YgYSBudW1iZXIuXG4gKlxuICogRm9yIGV4YW1wbGU6XG4gKiAgIDIuMzQgcmV0dXJucyAzXG4gKiAgIDAuMDAzNCByZXR1cm5zIDJcbiAqICAgMTIwLjVlKzMwIHJldHVybnMgNFxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHJldHVybiB7bnVtYmVyfSBkaWdpdHMgICBOdW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzXG4gKi9cblxuXG5mdW5jdGlvbiBkaWdpdHModmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLnRvRXhwb25lbnRpYWwoKS5yZXBsYWNlKC9lLiokLywgJycpIC8vIHJlbW92ZSBleHBvbmVudGlhbCBub3RhdGlvblxuICAucmVwbGFjZSgvXjBcXC4/MCp8XFwuLywgJycpIC8vIHJlbW92ZSBkZWNpbWFsIHBvaW50IGFuZCBsZWFkaW5nIHplcm9zXG4gIC5sZW5ndGg7XG59XG4vKipcbiAqIE1pbmltdW0gbnVtYmVyIGFkZGVkIHRvIG9uZSB0aGF0IG1ha2VzIHRoZSByZXN1bHQgZGlmZmVyZW50IHRoYW4gb25lXG4gKi9cblxuXG52YXIgREJMX0VQU0lMT04gPSBOdW1iZXIuRVBTSUxPTiB8fCAyLjIyMDQ0NjA0OTI1MDMxMzA4MDg0NzI2MzMzNjE4MTZFLTE2O1xuLyoqXG4gKiBDb21wYXJlcyB0d28gZmxvYXRpbmcgcG9pbnQgbnVtYmVycy5cbiAqIEBwYXJhbSB7bnVtYmVyfSB4ICAgICAgICAgIEZpcnN0IHZhbHVlIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSB7bnVtYmVyfSB5ICAgICAgICAgIFNlY29uZCB2YWx1ZSB0byBjb21wYXJlXG4gKiBAcGFyYW0ge251bWJlcn0gW2Vwc2lsb25dICBUaGUgbWF4aW11bSByZWxhdGl2ZSBkaWZmZXJlbmNlIGJldHdlZW4geCBhbmQgeVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgZXBzaWxvbiBpcyB1bmRlZmluZWQgb3IgbnVsbCwgdGhlIGZ1bmN0aW9uIHdpbGxcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlc3Qgd2hldGhlciB4IGFuZCB5IGFyZSBleGFjdGx5IGVxdWFsLlxuICogQHJldHVybiB7Ym9vbGVhbn0gd2hldGhlciB0aGUgdHdvIG51bWJlcnMgYXJlIG5lYXJseSBlcXVhbFxuKi9cblxuZXhwb3J0cy5EQkxfRVBTSUxPTiA9IERCTF9FUFNJTE9OO1xuXG5mdW5jdGlvbiBuZWFybHlFcXVhbCh4LCB5LCBlcHNpbG9uKSB7XG4gIC8vIGlmIGVwc2lsb24gaXMgbnVsbCBvciB1bmRlZmluZWQsIHRlc3Qgd2hldGhlciB4IGFuZCB5IGFyZSBleGFjdGx5IGVxdWFsXG4gIGlmIChlcHNpbG9uID09PSBudWxsIHx8IGVwc2lsb24gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB4ID09PSB5O1xuICB9XG5cbiAgaWYgKHggPT09IHkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyBOYU5cblxuXG4gIGlmIChpc05hTih4KSB8fCBpc05hTih5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSAvLyBhdCB0aGlzIHBvaW50IHggYW5kIHkgc2hvdWxkIGJlIGZpbml0ZVxuXG5cbiAgaWYgKGlzRmluaXRlKHgpICYmIGlzRmluaXRlKHkpKSB7XG4gICAgLy8gY2hlY2sgbnVtYmVycyBhcmUgdmVyeSBjbG9zZSwgbmVlZGVkIHdoZW4gY29tcGFyaW5nIG51bWJlcnMgbmVhciB6ZXJvXG4gICAgdmFyIGRpZmYgPSBNYXRoLmFicyh4IC0geSk7XG5cbiAgICBpZiAoZGlmZiA8IERCTF9FUFNJTE9OKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdXNlIHJlbGF0aXZlIGVycm9yXG4gICAgICByZXR1cm4gZGlmZiA8PSBNYXRoLm1heChNYXRoLmFicyh4KSwgTWF0aC5hYnMoeSkpICogZXBzaWxvbjtcbiAgICB9XG4gIH0gLy8gSW5maW5pdGUgYW5kIE51bWJlciBvciBuZWdhdGl2ZSBJbmZpbml0ZSBhbmQgcG9zaXRpdmUgSW5maW5pdGUgY2FzZXNcblxuXG4gIHJldHVybiBmYWxzZTtcbn1cbi8qKlxuICogQ2FsY3VsYXRlIHRoZSBoeXBlcmJvbGljIGFyY2NvcyBvZiBhIG51bWJlclxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuXG5cbnZhciBhY29zaCA9IE1hdGguYWNvc2ggfHwgZnVuY3Rpb24gKHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nKE1hdGguc3FydCh4ICogeCAtIDEpICsgeCk7XG59O1xuXG5leHBvcnRzLmFjb3NoID0gYWNvc2g7XG5cbnZhciBhc2luaCA9IE1hdGguYXNpbmggfHwgZnVuY3Rpb24gKHgpIHtcbiAgcmV0dXJuIE1hdGgubG9nKE1hdGguc3FydCh4ICogeCArIDEpICsgeCk7XG59O1xuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgYXJjdGFuZ2VudCBvZiBhIG51bWJlclxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuXG5cbmV4cG9ydHMuYXNpbmggPSBhc2luaDtcblxudmFyIGF0YW5oID0gTWF0aC5hdGFuaCB8fCBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gTWF0aC5sb2coKDEgKyB4KSAvICgxIC0geCkpIC8gMjtcbn07XG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgaHlwZXJib2xpYyBjb3NpbmUgb2YgYSBudW1iZXJcbiAqIEBwYXJhbSB7bnVtYmVyfSB4XG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5cblxuZXhwb3J0cy5hdGFuaCA9IGF0YW5oO1xuXG52YXIgY29zaCA9IE1hdGguY29zaCB8fCBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gKE1hdGguZXhwKHgpICsgTWF0aC5leHAoLXgpKSAvIDI7XG59O1xuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgc2luZSBvZiBhIG51bWJlclxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblxuXG5leHBvcnRzLmNvc2ggPSBjb3NoO1xuXG52YXIgc2luaCA9IE1hdGguc2luaCB8fCBmdW5jdGlvbiAoeCkge1xuICByZXR1cm4gKE1hdGguZXhwKHgpIC0gTWF0aC5leHAoLXgpKSAvIDI7XG59O1xuLyoqXG4gKiBDYWxjdWxhdGUgdGhlIGh5cGVyYm9saWMgdGFuZ2VudCBvZiBhIG51bWJlclxuICogQHBhcmFtIHtudW1iZXJ9IHhcbiAqIEByZXR1cm5zIHtudW1iZXJ9XG4gKi9cblxuXG5leHBvcnRzLnNpbmggPSBzaW5oO1xuXG52YXIgdGFuaCA9IE1hdGgudGFuaCB8fCBmdW5jdGlvbiAoeCkge1xuICB2YXIgZSA9IE1hdGguZXhwKDIgKiB4KTtcbiAgcmV0dXJuIChlIC0gMSkgLyAoZSArIDEpO1xufTtcblxuZXhwb3J0cy50YW5oID0gdGFuaDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuY2xvbmUgPSBjbG9uZTtcbmV4cG9ydHMubWFwT2JqZWN0ID0gbWFwT2JqZWN0O1xuZXhwb3J0cy5leHRlbmQgPSBleHRlbmQ7XG5leHBvcnRzLmRlZXBFeHRlbmQgPSBkZWVwRXh0ZW5kO1xuZXhwb3J0cy5kZWVwU3RyaWN0RXF1YWwgPSBkZWVwU3RyaWN0RXF1YWw7XG5leHBvcnRzLmRlZXBGbGF0dGVuID0gZGVlcEZsYXR0ZW47XG5leHBvcnRzLmNhbkRlZmluZVByb3BlcnR5ID0gY2FuRGVmaW5lUHJvcGVydHk7XG5leHBvcnRzLmxhenkgPSBsYXp5O1xuZXhwb3J0cy50cmF2ZXJzZSA9IHRyYXZlcnNlO1xuZXhwb3J0cy5oYXNPd25Qcm9wZXJ0eSA9IGhhc093blByb3BlcnR5O1xuZXhwb3J0cy5pc0xlZ2FjeUZhY3RvcnkgPSBpc0xlZ2FjeUZhY3Rvcnk7XG5leHBvcnRzLmdldCA9IGdldDtcbmV4cG9ydHMuc2V0ID0gc2V0O1xuZXhwb3J0cy5waWNrID0gcGljaztcbmV4cG9ydHMucGlja1NoYWxsb3cgPSBwaWNrU2hhbGxvdztcbmV4cG9ydHMudmFsdWVzID0gdmFsdWVzO1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4vaXNcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuLyoqXG4gKiBDbG9uZSBhbiBvYmplY3RcbiAqXG4gKiAgICAgY2xvbmUoeClcbiAqXG4gKiBDYW4gY2xvbmUgYW55IHByaW1pdGl2ZSB0eXBlLCBhcnJheSwgYW5kIG9iamVjdC5cbiAqIElmIHggaGFzIGEgZnVuY3Rpb24gY2xvbmUsIHRoaXMgZnVuY3Rpb24gd2lsbCBiZSBpbnZva2VkIHRvIGNsb25lIHRoZSBvYmplY3QuXG4gKlxuICogQHBhcmFtIHsqfSB4XG4gKiBAcmV0dXJuIHsqfSBjbG9uZVxuICovXG5mdW5jdGlvbiBjbG9uZSh4KSB7XG4gIHZhciB0eXBlID0gX3R5cGVvZih4KTsgLy8gaW1tdXRhYmxlIHByaW1pdGl2ZSB0eXBlc1xuXG5cbiAgaWYgKHR5cGUgPT09ICdudW1iZXInIHx8IHR5cGUgPT09ICdzdHJpbmcnIHx8IHR5cGUgPT09ICdib29sZWFuJyB8fCB4ID09PSBudWxsIHx8IHggPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB4O1xuICB9IC8vIHVzZSBjbG9uZSBmdW5jdGlvbiBvZiB0aGUgb2JqZWN0IHdoZW4gYXZhaWxhYmxlXG5cblxuICBpZiAodHlwZW9mIHguY2xvbmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4geC5jbG9uZSgpO1xuICB9IC8vIGFycmF5XG5cblxuICBpZiAoQXJyYXkuaXNBcnJheSh4KSkge1xuICAgIHJldHVybiB4Lm1hcChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBjbG9uZSh2YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAoeCBpbnN0YW5jZW9mIERhdGUpIHJldHVybiBuZXcgRGF0ZSh4LnZhbHVlT2YoKSk7XG4gIGlmICgoMCwgX2lzLmlzQmlnTnVtYmVyKSh4KSkgcmV0dXJuIHg7IC8vIGJpZ251bWJlcnMgYXJlIGltbXV0YWJsZVxuXG4gIGlmICh4IGluc3RhbmNlb2YgUmVnRXhwKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdDYW5ub3QgY2xvbmUgJyArIHgpOyAvLyBUT0RPOiBjbG9uZSBhIFJlZ0V4cFxuICAvLyBvYmplY3RcblxuICByZXR1cm4gbWFwT2JqZWN0KHgsIGNsb25lKTtcbn1cbi8qKlxuICogQXBwbHkgbWFwIHRvIGFsbCBwcm9wZXJ0aWVzIG9mIGFuIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge09iamVjdH0gUmV0dXJucyBhIGNvcHkgb2YgdGhlIG9iamVjdCB3aXRoIG1hcHBlZCBwcm9wZXJ0aWVzXG4gKi9cblxuXG5mdW5jdGlvbiBtYXBPYmplY3Qob2JqZWN0LCBjYWxsYmFjaykge1xuICB2YXIgY2xvbmUgPSB7fTtcblxuICBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5KG9iamVjdCwga2V5KSkge1xuICAgICAgY2xvbmVba2V5XSA9IGNhbGxiYWNrKG9iamVjdFtrZXldKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2xvbmU7XG59XG4vKipcbiAqIEV4dGVuZCBvYmplY3QgYSB3aXRoIHRoZSBwcm9wZXJ0aWVzIG9mIG9iamVjdCBiXG4gKiBAcGFyYW0ge09iamVjdH0gYVxuICogQHBhcmFtIHtPYmplY3R9IGJcbiAqIEByZXR1cm4ge09iamVjdH0gYVxuICovXG5cblxuZnVuY3Rpb24gZXh0ZW5kKGEsIGIpIHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiKSB7XG4gICAgaWYgKGhhc093blByb3BlcnR5KGIsIHByb3ApKSB7XG4gICAgICBhW3Byb3BdID0gYltwcm9wXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYTtcbn1cbi8qKlxuICogRGVlcCBleHRlbmQgYW4gb2JqZWN0IGEgd2l0aCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYlxuICogQHBhcmFtIHtPYmplY3R9IGFcbiAqIEBwYXJhbSB7T2JqZWN0fSBiXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5cblxuZnVuY3Rpb24gZGVlcEV4dGVuZChhLCBiKSB7XG4gIC8vIFRPRE86IGFkZCBzdXBwb3J0IGZvciBBcnJheXMgdG8gZGVlcEV4dGVuZFxuICBpZiAoQXJyYXkuaXNBcnJheShiKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBieSBkZWVwRXh0ZW5kJyk7XG4gIH1cblxuICBmb3IgKHZhciBwcm9wIGluIGIpIHtcbiAgICBpZiAoaGFzT3duUHJvcGVydHkoYiwgcHJvcCkpIHtcbiAgICAgIGlmIChiW3Byb3BdICYmIGJbcHJvcF0uY29uc3RydWN0b3IgPT09IE9iamVjdCkge1xuICAgICAgICBpZiAoYVtwcm9wXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYVtwcm9wXSA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFbcHJvcF0gJiYgYVtwcm9wXS5jb25zdHJ1Y3RvciA9PT0gT2JqZWN0KSB7XG4gICAgICAgICAgZGVlcEV4dGVuZChhW3Byb3BdLCBiW3Byb3BdKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhW3Byb3BdID0gYltwcm9wXTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGJbcHJvcF0pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FycmF5cyBhcmUgbm90IHN1cHBvcnRlZCBieSBkZWVwRXh0ZW5kJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhW3Byb3BdID0gYltwcm9wXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gYTtcbn1cbi8qKlxuICogRGVlcCB0ZXN0IGVxdWFsaXR5IG9mIGFsbCBmaWVsZHMgaW4gdHdvIHBhaXJzIG9mIGFycmF5cyBvciBvYmplY3RzLlxuICogQ29tcGFyZXMgdmFsdWVzIGFuZCBmdW5jdGlvbnMgc3RyaWN0bHkgKGllLiAyIGlzIG5vdCB0aGUgc2FtZSBhcyAnMicpLlxuICogQHBhcmFtIHtBcnJheSB8IE9iamVjdH0gYVxuICogQHBhcmFtIHtBcnJheSB8IE9iamVjdH0gYlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cblxuXG5mdW5jdGlvbiBkZWVwU3RyaWN0RXF1YWwoYSwgYikge1xuICB2YXIgcHJvcCwgaSwgbGVuO1xuXG4gIGlmIChBcnJheS5pc0FycmF5KGEpKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGZvciAoaSA9IDAsIGxlbiA9IGEubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGlmICghZGVlcFN0cmljdEVxdWFsKGFbaV0sIGJbaV0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgYSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBhID09PSBiO1xuICB9IGVsc2UgaWYgKGEgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShiKSB8fCAhKGIgaW5zdGFuY2VvZiBPYmplY3QpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZm9yIChwcm9wIGluIGEpIHtcbiAgICAgIC8vIG5vaW5zcGVjdGlvbiBKU1VuZmlsdGVyZWRGb3JJbkxvb3BcbiAgICAgIGlmICghKHByb3AgaW4gYikgfHwgIWRlZXBTdHJpY3RFcXVhbChhW3Byb3BdLCBiW3Byb3BdKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChwcm9wIGluIGIpIHtcbiAgICAgIC8vIG5vaW5zcGVjdGlvbiBKU1VuZmlsdGVyZWRGb3JJbkxvb3BcbiAgICAgIGlmICghKHByb3AgaW4gYSkgfHwgIWRlZXBTdHJpY3RFcXVhbChhW3Byb3BdLCBiW3Byb3BdKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGEgPT09IGI7XG4gIH1cbn1cbi8qKlxuICogUmVjdXJzaXZlbHkgZmxhdHRlbiBhIG5lc3RlZCBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdH0gbmVzdGVkT2JqZWN0XG4gKiBAcmV0dXJuIHtPYmplY3R9IFJldHVybnMgdGhlIGZsYXR0ZW5lZCBvYmplY3RcbiAqL1xuXG5cbmZ1bmN0aW9uIGRlZXBGbGF0dGVuKG5lc3RlZE9iamVjdCkge1xuICB2YXIgZmxhdHRlbmVkT2JqZWN0ID0ge307XG5cbiAgX2RlZXBGbGF0dGVuKG5lc3RlZE9iamVjdCwgZmxhdHRlbmVkT2JqZWN0KTtcblxuICByZXR1cm4gZmxhdHRlbmVkT2JqZWN0O1xufSAvLyBoZWxwZXIgZnVuY3Rpb24gdXNlZCBieSBkZWVwRmxhdHRlblxuXG5cbmZ1bmN0aW9uIF9kZWVwRmxhdHRlbihuZXN0ZWRPYmplY3QsIGZsYXR0ZW5lZE9iamVjdCkge1xuICBmb3IgKHZhciBwcm9wIGluIG5lc3RlZE9iamVjdCkge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eShuZXN0ZWRPYmplY3QsIHByb3ApKSB7XG4gICAgICB2YXIgdmFsdWUgPSBuZXN0ZWRPYmplY3RbcHJvcF07XG5cbiAgICAgIGlmIChfdHlwZW9mKHZhbHVlKSA9PT0gJ29iamVjdCcgJiYgdmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgX2RlZXBGbGF0dGVuKHZhbHVlLCBmbGF0dGVuZWRPYmplY3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmxhdHRlbmVkT2JqZWN0W3Byb3BdID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4vKipcbiAqIFRlc3Qgd2hldGhlciB0aGUgY3VycmVudCBKYXZhU2NyaXB0IGVuZ2luZSBzdXBwb3J0cyBPYmplY3QuZGVmaW5lUHJvcGVydHlcbiAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm5zIHRydWUgaWYgc3VwcG9ydGVkXG4gKi9cblxuXG5mdW5jdGlvbiBjYW5EZWZpbmVQcm9wZXJ0eSgpIHtcbiAgLy8gdGVzdCBuZWVkZWQgZm9yIGJyb2tlbiBJRTggaW1wbGVtZW50YXRpb25cbiAgdHJ5IHtcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICd4Jywge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHt9XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge31cblxuICByZXR1cm4gZmFsc2U7XG59XG4vKipcbiAqIEF0dGFjaCBhIGxhenkgbG9hZGluZyBwcm9wZXJ0eSB0byBhIGNvbnN0YW50LlxuICogVGhlIGdpdmVuIGZ1bmN0aW9uIGBmbmAgaXMgY2FsbGVkIG9uY2Ugd2hlbiB0aGUgcHJvcGVydHkgaXMgZmlyc3QgcmVxdWVzdGVkLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QgICAgICAgICBPYmplY3Qgd2hlcmUgdG8gYWRkIHRoZSBwcm9wZXJ0eVxuICogQHBhcmFtIHtzdHJpbmd9IHByb3AgICAgICAgICAgIFByb3BlcnR5IG5hbWVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHZhbHVlUmVzb2x2ZXIgRnVuY3Rpb24gcmV0dXJuaW5nIHRoZSBwcm9wZXJ0eSB2YWx1ZS4gQ2FsbGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aG91dCBhcmd1bWVudHMuXG4gKi9cblxuXG5mdW5jdGlvbiBsYXp5KG9iamVjdCwgcHJvcCwgdmFsdWVSZXNvbHZlcikge1xuICB2YXIgX3VuaW5pdGlhbGl6ZWQgPSB0cnVlO1xuXG4gIHZhciBfdmFsdWU7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iamVjdCwgcHJvcCwge1xuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgaWYgKF91bmluaXRpYWxpemVkKSB7XG4gICAgICAgIF92YWx1ZSA9IHZhbHVlUmVzb2x2ZXIoKTtcbiAgICAgICAgX3VuaW5pdGlhbGl6ZWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF92YWx1ZTtcbiAgICB9LFxuICAgIHNldDogZnVuY3Rpb24gc2V0KHZhbHVlKSB7XG4gICAgICBfdmFsdWUgPSB2YWx1ZTtcbiAgICAgIF91bmluaXRpYWxpemVkID0gZmFsc2U7XG4gICAgfSxcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogdHJ1ZVxuICB9KTtcbn1cbi8qKlxuICogVHJhdmVyc2UgYSBwYXRoIGludG8gYW4gb2JqZWN0LlxuICogV2hlbiBhIG5hbWVzcGFjZSBpcyBtaXNzaW5nLCBpdCB3aWxsIGJlIGNyZWF0ZWRcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW119IHBhdGggICBBIGRvdCBzZXBhcmF0ZWQgc3RyaW5nIGxpa2UgJ25hbWUuc3BhY2UnXG4gKiBAcmV0dXJuIHtPYmplY3R9IFJldHVybnMgdGhlIG9iamVjdCBhdCB0aGUgZW5kIG9mIHRoZSBwYXRoXG4gKi9cblxuXG5mdW5jdGlvbiB0cmF2ZXJzZShvYmplY3QsIHBhdGgpIHtcbiAgaWYgKHBhdGggJiYgdHlwZW9mIHBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHRyYXZlcnNlKG9iamVjdCwgcGF0aC5zcGxpdCgnLicpKTtcbiAgfVxuXG4gIHZhciBvYmogPSBvYmplY3Q7XG5cbiAgaWYgKHBhdGgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBrZXkgPSBwYXRoW2ldO1xuXG4gICAgICBpZiAoIShrZXkgaW4gb2JqKSkge1xuICAgICAgICBvYmpba2V5XSA9IHt9O1xuICAgICAgfVxuXG4gICAgICBvYmogPSBvYmpba2V5XTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqO1xufVxuLyoqXG4gKiBBIHNhZmUgaGFzT3duUHJvcGVydHlcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eVxuICovXG5cblxuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqZWN0LCBwcm9wZXJ0eSkge1xuICByZXR1cm4gb2JqZWN0ICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpO1xufVxuLyoqXG4gKiBUZXN0IHdoZXRoZXIgYW4gb2JqZWN0IGlzIGEgZmFjdG9yeS4gYSBmYWN0b3J5IGhhcyBmaWVsZHM6XG4gKlxuICogLSBmYWN0b3J5OiBmdW5jdGlvbiAodHlwZTogT2JqZWN0LCBjb25maWc6IE9iamVjdCwgbG9hZDogZnVuY3Rpb24sIHR5cGVkOiBmdW5jdGlvbiBbLCBtYXRoOiBPYmplY3RdKSAgIChyZXF1aXJlZClcbiAqIC0gbmFtZTogc3RyaW5nIChvcHRpb25hbClcbiAqIC0gcGF0aDogc3RyaW5nICAgIEEgZG90IHNlcGFyYXRlZCBwYXRoIChvcHRpb25hbClcbiAqIC0gbWF0aDogYm9vbGVhbiAgIElmIHRydWUgKGZhbHNlIGJ5IGRlZmF1bHQpLCB0aGUgbWF0aCBuYW1lc3BhY2UgaXMgcGFzc2VkXG4gKiAgICAgICAgICAgICAgICAgICBhcyBmaWZ0aCBhcmd1bWVudCBvZiB0aGUgZmFjdG9yeSBmdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7Kn0gb2JqZWN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGlzTGVnYWN5RmFjdG9yeShvYmplY3QpIHtcbiAgcmV0dXJuIG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0LmZhY3RvcnkgPT09ICdmdW5jdGlvbic7XG59XG4vKipcbiAqIEdldCBhIG5lc3RlZCBwcm9wZXJ0eSBmcm9tIGFuIG9iamVjdFxuICogQHBhcmFtIHtPYmplY3R9IG9iamVjdFxuICogQHBhcmFtIHtzdHJpbmcgfCBzdHJpbmdbXX0gcGF0aFxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldChvYmplY3QsIHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykge1xuICAgIGlmIChpc1BhdGgocGF0aCkpIHtcbiAgICAgIHJldHVybiBnZXQob2JqZWN0LCBwYXRoLnNwbGl0KCcuJykpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gb2JqZWN0W3BhdGhdO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjaGlsZCA9IG9iamVjdDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0gcGF0aFtpXTtcbiAgICBjaGlsZCA9IGNoaWxkID8gY2hpbGRba2V5XSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBjaGlsZDtcbn1cbi8qKlxuICogU2V0IGEgbmVzdGVkIHByb3BlcnR5IGluIGFuIG9iamVjdFxuICogTXV0YXRlcyB0aGUgb2JqZWN0IGl0c2VsZlxuICogSWYgdGhlIHBhdGggZG9lc24ndCBleGlzdCwgaXQgd2lsbCBiZSBjcmVhdGVkXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZyB8IHN0cmluZ1tdfSBwYXRoXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICovXG5cblxuZnVuY3Rpb24gc2V0KG9iamVjdCwgcGF0aCwgdmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBwYXRoID09PSAnc3RyaW5nJykge1xuICAgIGlmIChpc1BhdGgocGF0aCkpIHtcbiAgICAgIHJldHVybiBzZXQob2JqZWN0LCBwYXRoLnNwbGl0KCcuJyksIHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2JqZWN0W3BhdGhdID0gdmFsdWU7XG4gICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cbiAgfVxuXG4gIHZhciBjaGlsZCA9IG9iamVjdDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBhdGgubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgdmFyIGtleSA9IHBhdGhbaV07XG5cbiAgICBpZiAoY2hpbGRba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjaGlsZFtrZXldID0ge307XG4gICAgfVxuXG4gICAgY2hpbGQgPSBjaGlsZFtrZXldO1xuICB9XG5cbiAgaWYgKHBhdGgubGVuZ3RoID4gMCkge1xuICAgIHZhciBsYXN0S2V5ID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xuICAgIGNoaWxkW2xhc3RLZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gb2JqZWN0O1xufVxuLyoqXG4gKiBDcmVhdGUgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZSBwaWNrZWQgb2JqZWN0IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb3BlcnRpZXNcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IFt0cmFuc2Zvcm1dIE9wdGlvbmFsIHZhbHVlIHRvIHRyYW5zZm9ybSBhIHZhbHVlIHdoZW4gcGlja2luZyBpdFxuICogQHJldHVybiB7T2JqZWN0fVxuICovXG5cblxuZnVuY3Rpb24gcGljayhvYmplY3QsIHByb3BlcnRpZXMsIHRyYW5zZm9ybSkge1xuICB2YXIgY29weSA9IHt9O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcGVydGllcy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBrZXkgPSBwcm9wZXJ0aWVzW2ldO1xuICAgIHZhciB2YWx1ZSA9IGdldChvYmplY3QsIGtleSk7XG5cbiAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2V0KGNvcHksIGtleSwgdHJhbnNmb3JtID8gdHJhbnNmb3JtKHZhbHVlLCBrZXkpIDogdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb3B5O1xufVxuLyoqXG4gKiBTaGFsbG93IHZlcnNpb24gb2YgcGljaywgY3JlYXRpbmcgYW4gb2JqZWN0IGNvbXBvc2VkIG9mIHRoZSBwaWNrZWQgb2JqZWN0IHByb3BlcnRpZXNcbiAqIGJ1dCBub3QgZm9yIG5lc3RlZCBwcm9wZXJ0aWVzXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwcm9wZXJ0aWVzXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKi9cblxuXG5mdW5jdGlvbiBwaWNrU2hhbGxvdyhvYmplY3QsIHByb3BlcnRpZXMpIHtcbiAgdmFyIGNvcHkgPSB7fTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BlcnRpZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0gcHJvcGVydGllc1tpXTtcbiAgICB2YXIgdmFsdWUgPSBvYmplY3Rba2V5XTtcblxuICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb3B5W2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY29weTtcbn1cblxuZnVuY3Rpb24gdmFsdWVzKG9iamVjdCkge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqZWN0KS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBvYmplY3Rba2V5XTtcbiAgfSk7XG59IC8vIGhlbHBlciBmdW5jdGlvbiB0byB0ZXN0IHdoZXRoZXIgYSBzdHJpbmcgY29udGFpbnMgYSBwYXRoIGxpa2UgJ3VzZXIubmFtZSdcblxuXG5mdW5jdGlvbiBpc1BhdGgoc3RyKSB7XG4gIHJldHVybiBzdHIuaW5kZXhPZignLicpICE9PSAtMTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuLy8gVE9ETzogcmVtb3ZlIHRoZXNlIHBvbHlmaWxscyBhcyBzb29uIGFzIHdlIGhhdmUgYSBidWlsZCBwcm9jZXNzIHRoYXQgdHJhbnNwaWxlcyB0aGUgY29kZSB0byBFUzVcbi8vIFBvbHlmaWxsIGZvciBJRSAxMSAoTnVtYmVyLmlzRmluaXRlIGlzIHVzZWQgaW4gYGNvbXBsZXguanNgKVxuLy8gc291cmNlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9OdW1iZXIvaXNGaW5pdGVcbk51bWJlci5pc0Zpbml0ZSA9IE51bWJlci5pc0Zpbml0ZSB8fCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodmFsdWUpO1xufTsgLy8gUG9seWZpbGwgZm9yIElFIDExXG4vLyBzb3VyY2U6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL051bWJlci9pc05hTlxuXG5cbk51bWJlci5pc05hTiA9IE51bWJlci5pc05hTiB8fCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSB2YWx1ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnByb2R1Y3QgPSBwcm9kdWN0O1xuXG4vKiogQHBhcmFtIHtudW1iZXJ9IGlcbiAqICBAcGFyYW0ge251bWJlcn0gblxuICogIEByZXR1cm5zIHtudW1iZXJ9IHByb2R1Y3Qgb2YgaSB0byBuXG4gKi9cbmZ1bmN0aW9uIHByb2R1Y3QoaSwgbikge1xuICBpZiAobiA8IGkpIHtcbiAgICByZXR1cm4gMTtcbiAgfVxuXG4gIGlmIChuID09PSBpKSB7XG4gICAgcmV0dXJuIG47XG4gIH1cblxuICB2YXIgaGFsZiA9IG4gKyBpID4+IDE7IC8vIGRpdmlkZSAobiArIGkpIGJ5IDIgYW5kIHRydW5jYXRlIHRvIGludGVnZXJcblxuICByZXR1cm4gcHJvZHVjdChpLCBoYWxmKSAqIHByb2R1Y3QoaGFsZiArIDEsIG4pO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5lbmRzV2l0aCA9IGVuZHNXaXRoO1xuZXhwb3J0cy5mb3JtYXQgPSBmb3JtYXQ7XG5leHBvcnRzLnN0cmluZ2lmeSA9IHN0cmluZ2lmeTtcbmV4cG9ydHMuZXNjYXBlID0gZXNjYXBlO1xuZXhwb3J0cy5jb21wYXJlVGV4dCA9IGNvbXBhcmVUZXh0O1xuXG52YXIgX2lzID0gcmVxdWlyZShcIi4vaXNcIik7XG5cbnZhciBfbnVtYmVyID0gcmVxdWlyZShcIi4vbnVtYmVyXCIpO1xuXG52YXIgX2Zvcm1hdHRlciA9IHJlcXVpcmUoXCIuL2JpZ251bWJlci9mb3JtYXR0ZXJcIik7XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgaWYgKHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID09PSBcInN5bWJvbFwiKSB7IF90eXBlb2YgPSBmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfTsgfSBlbHNlIHsgX3R5cGVvZiA9IGZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IHJldHVybiBvYmogJiYgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9OyB9IHJldHVybiBfdHlwZW9mKG9iaik7IH1cblxuLyoqXG4gKiBDaGVjayBpZiBhIHRleHQgZW5kcyB3aXRoIGEgY2VydGFpbiBzdHJpbmcuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFxuICovXG5mdW5jdGlvbiBlbmRzV2l0aCh0ZXh0LCBzZWFyY2gpIHtcbiAgdmFyIHN0YXJ0ID0gdGV4dC5sZW5ndGggLSBzZWFyY2gubGVuZ3RoO1xuICB2YXIgZW5kID0gdGV4dC5sZW5ndGg7XG4gIHJldHVybiB0ZXh0LnN1YnN0cmluZyhzdGFydCwgZW5kKSA9PT0gc2VhcmNoO1xufVxuLyoqXG4gKiBGb3JtYXQgYSB2YWx1ZSBvZiBhbnkgdHlwZSBpbnRvIGEgc3RyaW5nLlxuICpcbiAqIFVzYWdlOlxuICogICAgIG1hdGguZm9ybWF0KHZhbHVlKVxuICogICAgIG1hdGguZm9ybWF0KHZhbHVlLCBwcmVjaXNpb24pXG4gKlxuICogV2hlbiB2YWx1ZSBpcyBhIGZ1bmN0aW9uOlxuICpcbiAqIC0gV2hlbiB0aGUgZnVuY3Rpb24gaGFzIGEgcHJvcGVydHkgYHN5bnRheGAsIGl0IHJldHVybnMgdGhpc1xuICogICBzeW50YXggZGVzY3JpcHRpb24uXG4gKiAtIEluIG90aGVyIGNhc2VzLCBhIHN0cmluZyBgJ2Z1bmN0aW9uJ2AgaXMgcmV0dXJuZWQuXG4gKlxuICogV2hlbiBgdmFsdWVgIGlzIGFuIE9iamVjdDpcbiAqXG4gKiAtIFdoZW4gdGhlIG9iamVjdCBjb250YWlucyBhIHByb3BlcnR5IGBmb3JtYXRgIGJlaW5nIGEgZnVuY3Rpb24sIHRoaXNcbiAqICAgZnVuY3Rpb24gaXMgaW52b2tlZCBhcyBgdmFsdWUuZm9ybWF0KG9wdGlvbnMpYCBhbmQgdGhlIHJlc3VsdCBpcyByZXR1cm5lZC5cbiAqIC0gV2hlbiB0aGUgb2JqZWN0IGhhcyBpdHMgb3duIGB0b1N0cmluZ2AgbWV0aG9kLCB0aGlzIG1ldGhvZCBpcyBpbnZva2VkXG4gKiAgIGFuZCB0aGUgcmVzdWx0IGlzIHJldHVybmVkLlxuICogLSBJbiBvdGhlciBjYXNlcyB0aGUgZnVuY3Rpb24gd2lsbCBsb29wIG92ZXIgYWxsIG9iamVjdCBwcm9wZXJ0aWVzIGFuZFxuICogICByZXR1cm4gSlNPTiBvYmplY3Qgbm90YXRpb24gbGlrZSAne1wiYVwiOiAyLCBcImJcIjogM30nLlxuICpcbiAqIEV4YW1wbGUgdXNhZ2U6XG4gKiAgICAgbWF0aC5mb3JtYXQoMi83KSAgICAgICAgICAgICAgICAvLyAnMC4yODU3MTQyODU3MTQyODU3J1xuICogICAgIG1hdGguZm9ybWF0KG1hdGgucGksIDMpICAgICAgICAgLy8gJzMuMTQnXG4gKiAgICAgbWF0aC5mb3JtYXQobmV3IENvbXBsZXgoMiwgMykpICAvLyAnMiArIDNpJ1xuICogICAgIG1hdGguZm9ybWF0KCdoZWxsbycpICAgICAgICAgICAgLy8gJ1wiaGVsbG9cIidcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlICAgICAgICAgICAgIFZhbHVlIHRvIGJlIHN0cmluZ2lmaWVkXG4gKiBAcGFyYW0ge09iamVjdCB8IG51bWJlciB8IEZ1bmN0aW9ufSBbb3B0aW9uc10gIEZvcm1hdHRpbmcgb3B0aW9ucy4gU2VlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYi91dGlscy9udW1iZXI6Zm9ybWF0IGZvciBhXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5cbiAqIEByZXR1cm4ge3N0cmluZ30gc3RyXG4gKi9cblxuXG5mdW5jdGlvbiBmb3JtYXQodmFsdWUsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gKDAsIF9udW1iZXIuZm9ybWF0KSh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cblxuICBpZiAoKDAsIF9pcy5pc0JpZ051bWJlcikodmFsdWUpKSB7XG4gICAgcmV0dXJuICgwLCBfZm9ybWF0dGVyLmZvcm1hdCkodmFsdWUsIG9wdGlvbnMpO1xuICB9IC8vIG5vdGU6IHdlIHVzZSB1bnNhZmUgZHVjay10eXBpbmcgaGVyZSB0byBjaGVjayBmb3IgRnJhY3Rpb25zLCB0aGlzIGlzXG4gIC8vIG9rIGhlcmUgc2luY2Ugd2UncmUgb25seSBpbnZva2luZyB0b1N0cmluZyBvciBjb25jYXRlbmF0aW5nIGl0cyB2YWx1ZXNcblxuXG4gIGlmIChsb29rc0xpa2VGcmFjdGlvbih2YWx1ZSkpIHtcbiAgICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucy5mcmFjdGlvbiAhPT0gJ2RlY2ltYWwnKSB7XG4gICAgICAvLyBvdXRwdXQgYXMgcmF0aW8sIGxpa2UgJzEvMydcbiAgICAgIHJldHVybiB2YWx1ZS5zICogdmFsdWUubiArICcvJyArIHZhbHVlLmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIG91dHB1dCBhcyBkZWNpbWFsLCBsaWtlICcwLigzKSdcbiAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBmb3JtYXRBcnJheSh2YWx1ZSwgb3B0aW9ucyk7XG4gIH1cblxuICBpZiAoKDAsIF9pcy5pc1N0cmluZykodmFsdWUpKSB7XG4gICAgcmV0dXJuICdcIicgKyB2YWx1ZSArICdcIic7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHZhbHVlLnN5bnRheCA/IFN0cmluZyh2YWx1ZS5zeW50YXgpIDogJ2Z1bmN0aW9uJztcbiAgfVxuXG4gIGlmICh2YWx1ZSAmJiBfdHlwZW9mKHZhbHVlKSA9PT0gJ29iamVjdCcpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlLmZvcm1hdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHZhbHVlLmZvcm1hdChvcHRpb25zKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlICYmIHZhbHVlLnRvU3RyaW5nKG9wdGlvbnMpICE9PSB7fS50b1N0cmluZygpKSB7XG4gICAgICAvLyB0aGlzIG9iamVjdCBoYXMgYSBub24tbmF0aXZlIHRvU3RyaW5nIG1ldGhvZCwgdXNlIHRoYXQgb25lXG4gICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcob3B0aW9ucyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBlbnRyaWVzID0gT2JqZWN0LmtleXModmFsdWUpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiAnXCInICsga2V5ICsgJ1wiOiAnICsgZm9ybWF0KHZhbHVlW2tleV0sIG9wdGlvbnMpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gJ3snICsgZW50cmllcy5qb2luKCcsICcpICsgJ30nO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBTdHJpbmcodmFsdWUpO1xufVxuLyoqXG4gKiBTdHJpbmdpZnkgYSB2YWx1ZSBpbnRvIGEgc3RyaW5nIGVuY2xvc2VkIGluIGRvdWJsZSBxdW90ZXMuXG4gKiBVbmVzY2FwZWQgZG91YmxlIHF1b3RlcyBhbmQgYmFja3NsYXNoZXMgaW5zaWRlIHRoZSB2YWx1ZSBhcmUgZXNjYXBlZC5cbiAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuXG5cbmZ1bmN0aW9uIHN0cmluZ2lmeSh2YWx1ZSkge1xuICB2YXIgdGV4dCA9IFN0cmluZyh2YWx1ZSk7XG4gIHZhciBlc2NhcGVkID0gJyc7XG4gIHZhciBpID0gMDtcblxuICB3aGlsZSAoaSA8IHRleHQubGVuZ3RoKSB7XG4gICAgdmFyIGMgPSB0ZXh0LmNoYXJBdChpKTtcblxuICAgIGlmIChjID09PSAnXFxcXCcpIHtcbiAgICAgIGVzY2FwZWQgKz0gYztcbiAgICAgIGkrKztcbiAgICAgIGMgPSB0ZXh0LmNoYXJBdChpKTtcblxuICAgICAgaWYgKGMgPT09ICcnIHx8ICdcIlxcXFwvYmZucnR1Jy5pbmRleE9mKGMpID09PSAtMSkge1xuICAgICAgICBlc2NhcGVkICs9ICdcXFxcJzsgLy8gbm8gdmFsaWQgZXNjYXBlIGNoYXJhY3RlciAtPiBlc2NhcGUgaXRcbiAgICAgIH1cblxuICAgICAgZXNjYXBlZCArPSBjO1xuICAgIH0gZWxzZSBpZiAoYyA9PT0gJ1wiJykge1xuICAgICAgZXNjYXBlZCArPSAnXFxcXFwiJztcbiAgICB9IGVsc2Uge1xuICAgICAgZXNjYXBlZCArPSBjO1xuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiAnXCInICsgZXNjYXBlZCArICdcIic7XG59XG4vKipcbiAqIEVzY2FwZSBzcGVjaWFsIEhUTUwgY2hhcmFjdGVyc1xuICogQHBhcmFtIHsqfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gZXNjYXBlKHZhbHVlKSB7XG4gIHZhciB0ZXh0ID0gU3RyaW5nKHZhbHVlKTtcbiAgdGV4dCA9IHRleHQucmVwbGFjZSgvJi9nLCAnJmFtcDsnKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JykucmVwbGFjZSgvJy9nLCAnJiMzOTsnKS5yZXBsYWNlKC88L2csICcmbHQ7JykucmVwbGFjZSgvPi9nLCAnJmd0OycpO1xuICByZXR1cm4gdGV4dDtcbn1cbi8qKlxuICogUmVjdXJzaXZlbHkgZm9ybWF0IGFuIG4tZGltZW5zaW9uYWwgbWF0cml4XG4gKiBFeGFtcGxlIG91dHB1dDogXCJbWzEsIDJdLCBbMywgNF1dXCJcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5XG4gKiBAcGFyYW0ge09iamVjdCB8IG51bWJlciB8IEZ1bmN0aW9ufSBbb3B0aW9uc10gIEZvcm1hdHRpbmcgb3B0aW9ucy4gU2VlXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYi91dGlscy9udW1iZXI6Zm9ybWF0IGZvciBhXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uIG9mIHRoZSBhdmFpbGFibGVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IHN0clxuICovXG5cblxuZnVuY3Rpb24gZm9ybWF0QXJyYXkoYXJyYXksIG9wdGlvbnMpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoYXJyYXkpKSB7XG4gICAgdmFyIHN0ciA9ICdbJztcbiAgICB2YXIgbGVuID0gYXJyYXkubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgaWYgKGkgIT09IDApIHtcbiAgICAgICAgc3RyICs9ICcsICc7XG4gICAgICB9XG5cbiAgICAgIHN0ciArPSBmb3JtYXRBcnJheShhcnJheVtpXSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgc3RyICs9ICddJztcbiAgICByZXR1cm4gc3RyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmb3JtYXQoYXJyYXksIG9wdGlvbnMpO1xuICB9XG59XG4vKipcbiAqIENoZWNrIHdoZXRoZXIgYSB2YWx1ZSBsb29rcyBsaWtlIGEgRnJhY3Rpb24gKHVuc2FmZSBkdWNrLXR5cGUgY2hlY2spXG4gKiBAcGFyYW0geyp9IHZhbHVlXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5cblxuZnVuY3Rpb24gbG9va3NMaWtlRnJhY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICYmIF90eXBlb2YodmFsdWUpID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFsdWUucyA9PT0gJ251bWJlcicgJiYgdHlwZW9mIHZhbHVlLm4gPT09ICdudW1iZXInICYmIHR5cGVvZiB2YWx1ZS5kID09PSAnbnVtYmVyJyB8fCBmYWxzZTtcbn1cbi8qKlxuICogQ29tcGFyZSB0d28gc3RyaW5nc1xuICogQHBhcmFtIHtzdHJpbmd9IHhcbiAqIEBwYXJhbSB7c3RyaW5nfSB5XG4gKiBAcmV0dXJucyB7bnVtYmVyfVxuICovXG5cblxuZnVuY3Rpb24gY29tcGFyZVRleHQoeCwgeSkge1xuICAvLyB3ZSBkb24ndCB3YW50IHRvIGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmcsIG9ubHkgYWNjZXB0IHN0cmluZyBpbnB1dFxuICBpZiAoISgwLCBfaXMuaXNTdHJpbmcpKHgpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5leHBlY3RlZCB0eXBlIG9mIGFyZ3VtZW50IGluIGZ1bmN0aW9uIGNvbXBhcmVUZXh0ICcgKyAnKGV4cGVjdGVkOiBzdHJpbmcgb3IgQXJyYXkgb3IgTWF0cml4LCBhY3R1YWw6ICcgKyAoMCwgX2lzLnR5cGVPZikoeCkgKyAnLCBpbmRleDogMCknKTtcbiAgfVxuXG4gIGlmICghKDAsIF9pcy5pc1N0cmluZykoeSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmV4cGVjdGVkIHR5cGUgb2YgYXJndW1lbnQgaW4gZnVuY3Rpb24gY29tcGFyZVRleHQgJyArICcoZXhwZWN0ZWQ6IHN0cmluZyBvciBBcnJheSBvciBNYXRyaXgsIGFjdHVhbDogJyArICgwLCBfaXMudHlwZU9mKSh5KSArICcsIGluZGV4OiAxKScpO1xuICB9XG5cbiAgcmV0dXJuIHggPT09IHkgPyAwIDogeCA+IHkgPyAxIDogLTE7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLnZlcnNpb24gPSB2b2lkIDA7XG52YXIgdmVyc2lvbiA9ICc2LjYuNSc7IC8vIE5vdGU6IFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB3aGVuIGJ1aWxkaW5nIG1hdGguanMuXG4vLyBDaGFuZ2VzIG1hZGUgaW4gdGhpcyBmaWxlIHdpbGwgYmUgb3ZlcndyaXR0ZW4uXG5cbmV4cG9ydHMudmVyc2lvbiA9IHZlcnNpb247IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi8uLi9saWIvZW50cnkvbWFpbkFueScpXG4iLCIndXNlIHN0cmljdCc7XHJcblxyXG52YXIgd2lkdGggPSAyNTY7Ly8gZWFjaCBSQzQgb3V0cHV0IGlzIDAgPD0geCA8IDI1NlxyXG52YXIgY2h1bmtzID0gNjsvLyBhdCBsZWFzdCBzaXggUkM0IG91dHB1dHMgZm9yIGVhY2ggZG91YmxlXHJcbnZhciBkaWdpdHMgPSA1MjsvLyB0aGVyZSBhcmUgNTIgc2lnbmlmaWNhbnQgZGlnaXRzIGluIGEgZG91YmxlXHJcbnZhciBwb29sID0gW107Ly8gcG9vbDogZW50cm9weSBwb29sIHN0YXJ0cyBlbXB0eVxyXG52YXIgR0xPQkFMID0gdHlwZW9mIGdsb2JhbCA9PT0gJ3VuZGVmaW5lZCcgPyB3aW5kb3cgOiBnbG9iYWw7XHJcblxyXG4vL1xyXG4vLyBUaGUgZm9sbG93aW5nIGNvbnN0YW50cyBhcmUgcmVsYXRlZCB0byBJRUVFIDc1NCBsaW1pdHMuXHJcbi8vXHJcbnZhciBzdGFydGRlbm9tID0gTWF0aC5wb3cod2lkdGgsIGNodW5rcyksXHJcbiAgICBzaWduaWZpY2FuY2UgPSBNYXRoLnBvdygyLCBkaWdpdHMpLFxyXG4gICAgb3ZlcmZsb3cgPSBzaWduaWZpY2FuY2UgKiAyLFxyXG4gICAgbWFzayA9IHdpZHRoIC0gMTtcclxuXHJcblxyXG52YXIgb2xkUmFuZG9tID0gTWF0aC5yYW5kb207XHJcblxyXG4vL1xyXG4vLyBzZWVkcmFuZG9tKClcclxuLy8gVGhpcyBpcyB0aGUgc2VlZHJhbmRvbSBmdW5jdGlvbiBkZXNjcmliZWQgYWJvdmUuXHJcbi8vXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oc2VlZCwgb3B0aW9ucykge1xyXG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZ2xvYmFsID09PSB0cnVlKSB7XHJcbiAgICBvcHRpb25zLmdsb2JhbCA9IGZhbHNlO1xyXG4gICAgTWF0aC5yYW5kb20gPSBtb2R1bGUuZXhwb3J0cyhzZWVkLCBvcHRpb25zKTtcclxuICAgIG9wdGlvbnMuZ2xvYmFsID0gdHJ1ZTtcclxuICAgIHJldHVybiBNYXRoLnJhbmRvbTtcclxuICB9XHJcbiAgdmFyIHVzZV9lbnRyb3B5ID0gKG9wdGlvbnMgJiYgb3B0aW9ucy5lbnRyb3B5KSB8fCBmYWxzZTtcclxuICB2YXIga2V5ID0gW107XHJcblxyXG4gIC8vIEZsYXR0ZW4gdGhlIHNlZWQgc3RyaW5nIG9yIGJ1aWxkIG9uZSBmcm9tIGxvY2FsIGVudHJvcHkgaWYgbmVlZGVkLlxyXG4gIHZhciBzaG9ydHNlZWQgPSBtaXhrZXkoZmxhdHRlbihcclxuICAgIHVzZV9lbnRyb3B5ID8gW3NlZWQsIHRvc3RyaW5nKHBvb2wpXSA6XHJcbiAgICAwIGluIGFyZ3VtZW50cyA/IHNlZWQgOiBhdXRvc2VlZCgpLCAzKSwga2V5KTtcclxuXHJcbiAgLy8gVXNlIHRoZSBzZWVkIHRvIGluaXRpYWxpemUgYW4gQVJDNCBnZW5lcmF0b3IuXHJcbiAgdmFyIGFyYzQgPSBuZXcgQVJDNChrZXkpO1xyXG5cclxuICAvLyBNaXggdGhlIHJhbmRvbW5lc3MgaW50byBhY2N1bXVsYXRlZCBlbnRyb3B5LlxyXG4gIG1peGtleSh0b3N0cmluZyhhcmM0LlMpLCBwb29sKTtcclxuXHJcbiAgLy8gT3ZlcnJpZGUgTWF0aC5yYW5kb21cclxuXHJcbiAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgcmFuZG9tIGRvdWJsZSBpbiBbMCwgMSkgdGhhdCBjb250YWluc1xyXG4gIC8vIHJhbmRvbW5lc3MgaW4gZXZlcnkgYml0IG9mIHRoZSBtYW50aXNzYSBvZiB0aGUgSUVFRSA3NTQgdmFsdWUuXHJcblxyXG4gIHJldHVybiBmdW5jdGlvbigpIHsgICAgICAgICAvLyBDbG9zdXJlIHRvIHJldHVybiBhIHJhbmRvbSBkb3VibGU6XHJcbiAgICB2YXIgbiA9IGFyYzQuZyhjaHVua3MpLCAgICAgICAgICAgICAvLyBTdGFydCB3aXRoIGEgbnVtZXJhdG9yIG4gPCAyIF4gNDhcclxuICAgICAgICBkID0gc3RhcnRkZW5vbSwgICAgICAgICAgICAgICAgIC8vICAgYW5kIGRlbm9taW5hdG9yIGQgPSAyIF4gNDguXHJcbiAgICAgICAgeCA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGFuZCBubyAnZXh0cmEgbGFzdCBieXRlJy5cclxuICAgIHdoaWxlIChuIDwgc2lnbmlmaWNhbmNlKSB7ICAgICAgICAgIC8vIEZpbGwgdXAgYWxsIHNpZ25pZmljYW50IGRpZ2l0cyBieVxyXG4gICAgICBuID0gKG4gKyB4KSAqIHdpZHRoOyAgICAgICAgICAgICAgLy8gICBzaGlmdGluZyBudW1lcmF0b3IgYW5kXHJcbiAgICAgIGQgKj0gd2lkdGg7ICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGRlbm9taW5hdG9yIGFuZCBnZW5lcmF0aW5nIGFcclxuICAgICAgeCA9IGFyYzQuZygxKTsgICAgICAgICAgICAgICAgICAgIC8vICAgbmV3IGxlYXN0LXNpZ25pZmljYW50LWJ5dGUuXHJcbiAgICB9XHJcbiAgICB3aGlsZSAobiA+PSBvdmVyZmxvdykgeyAgICAgICAgICAgICAvLyBUbyBhdm9pZCByb3VuZGluZyB1cCwgYmVmb3JlIGFkZGluZ1xyXG4gICAgICBuIC89IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBsYXN0IGJ5dGUsIHNoaWZ0IGV2ZXJ5dGhpbmdcclxuICAgICAgZCAvPSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgcmlnaHQgdXNpbmcgaW50ZWdlciBNYXRoIHVudGlsXHJcbiAgICAgIHggPj4+PSAxOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIHdlIGhhdmUgZXhhY3RseSB0aGUgZGVzaXJlZCBiaXRzLlxyXG4gICAgfVxyXG4gICAgcmV0dXJuIChuICsgeCkgLyBkOyAgICAgICAgICAgICAgICAgLy8gRm9ybSB0aGUgbnVtYmVyIHdpdGhpbiBbMCwgMSkuXHJcbiAgfTtcclxufTtcclxuXHJcbm1vZHVsZS5leHBvcnRzLnJlc2V0R2xvYmFsID0gZnVuY3Rpb24gKCkge1xyXG4gIE1hdGgucmFuZG9tID0gb2xkUmFuZG9tO1xyXG59O1xyXG5cclxuLy9cclxuLy8gQVJDNFxyXG4vL1xyXG4vLyBBbiBBUkM0IGltcGxlbWVudGF0aW9uLiAgVGhlIGNvbnN0cnVjdG9yIHRha2VzIGEga2V5IGluIHRoZSBmb3JtIG9mXHJcbi8vIGFuIGFycmF5IG9mIGF0IG1vc3QgKHdpZHRoKSBpbnRlZ2VycyB0aGF0IHNob3VsZCBiZSAwIDw9IHggPCAod2lkdGgpLlxyXG4vL1xyXG4vLyBUaGUgZyhjb3VudCkgbWV0aG9kIHJldHVybnMgYSBwc2V1ZG9yYW5kb20gaW50ZWdlciB0aGF0IGNvbmNhdGVuYXRlc1xyXG4vLyB0aGUgbmV4dCAoY291bnQpIG91dHB1dHMgZnJvbSBBUkM0LiAgSXRzIHJldHVybiB2YWx1ZSBpcyBhIG51bWJlciB4XHJcbi8vIHRoYXQgaXMgaW4gdGhlIHJhbmdlIDAgPD0geCA8ICh3aWR0aCBeIGNvdW50KS5cclxuLy9cclxuLyoqIEBjb25zdHJ1Y3RvciAqL1xyXG5mdW5jdGlvbiBBUkM0KGtleSkge1xyXG4gIHZhciB0LCBrZXlsZW4gPSBrZXkubGVuZ3RoLFxyXG4gICAgICBtZSA9IHRoaXMsIGkgPSAwLCBqID0gbWUuaSA9IG1lLmogPSAwLCBzID0gbWUuUyA9IFtdO1xyXG5cclxuICAvLyBUaGUgZW1wdHkga2V5IFtdIGlzIHRyZWF0ZWQgYXMgWzBdLlxyXG4gIGlmICgha2V5bGVuKSB7IGtleSA9IFtrZXlsZW4rK107IH1cclxuXHJcbiAgLy8gU2V0IHVwIFMgdXNpbmcgdGhlIHN0YW5kYXJkIGtleSBzY2hlZHVsaW5nIGFsZ29yaXRobS5cclxuICB3aGlsZSAoaSA8IHdpZHRoKSB7XHJcbiAgICBzW2ldID0gaSsrO1xyXG4gIH1cclxuICBmb3IgKGkgPSAwOyBpIDwgd2lkdGg7IGkrKykge1xyXG4gICAgc1tpXSA9IHNbaiA9IG1hc2sgJiAoaiArIGtleVtpICUga2V5bGVuXSArICh0ID0gc1tpXSkpXTtcclxuICAgIHNbal0gPSB0O1xyXG4gIH1cclxuXHJcbiAgLy8gVGhlIFwiZ1wiIG1ldGhvZCByZXR1cm5zIHRoZSBuZXh0IChjb3VudCkgb3V0cHV0cyBhcyBvbmUgbnVtYmVyLlxyXG4gIChtZS5nID0gZnVuY3Rpb24oY291bnQpIHtcclxuICAgIC8vIFVzaW5nIGluc3RhbmNlIG1lbWJlcnMgaW5zdGVhZCBvZiBjbG9zdXJlIHN0YXRlIG5lYXJseSBkb3VibGVzIHNwZWVkLlxyXG4gICAgdmFyIHQsIHIgPSAwLFxyXG4gICAgICAgIGkgPSBtZS5pLCBqID0gbWUuaiwgcyA9IG1lLlM7XHJcbiAgICB3aGlsZSAoY291bnQtLSkge1xyXG4gICAgICB0ID0gc1tpID0gbWFzayAmIChpICsgMSldO1xyXG4gICAgICByID0gciAqIHdpZHRoICsgc1ttYXNrICYgKChzW2ldID0gc1tqID0gbWFzayAmIChqICsgdCldKSArIChzW2pdID0gdCkpXTtcclxuICAgIH1cclxuICAgIG1lLmkgPSBpOyBtZS5qID0gajtcclxuICAgIHJldHVybiByO1xyXG4gICAgLy8gRm9yIHJvYnVzdCB1bnByZWRpY3RhYmlsaXR5IGRpc2NhcmQgYW4gaW5pdGlhbCBiYXRjaCBvZiB2YWx1ZXMuXHJcbiAgICAvLyBTZWUgaHR0cDovL3d3dy5yc2EuY29tL3JzYWxhYnMvbm9kZS5hc3A/aWQ9MjAwOVxyXG4gIH0pKHdpZHRoKTtcclxufVxyXG5cclxuLy9cclxuLy8gZmxhdHRlbigpXHJcbi8vIENvbnZlcnRzIGFuIG9iamVjdCB0cmVlIHRvIG5lc3RlZCBhcnJheXMgb2Ygc3RyaW5ncy5cclxuLy9cclxuZnVuY3Rpb24gZmxhdHRlbihvYmosIGRlcHRoKSB7XHJcbiAgdmFyIHJlc3VsdCA9IFtdLCB0eXAgPSAodHlwZW9mIG9iailbMF0sIHByb3A7XHJcbiAgaWYgKGRlcHRoICYmIHR5cCA9PSAnbycpIHtcclxuICAgIGZvciAocHJvcCBpbiBvYmopIHtcclxuICAgICAgdHJ5IHsgcmVzdWx0LnB1c2goZmxhdHRlbihvYmpbcHJvcF0sIGRlcHRoIC0gMSkpOyB9IGNhdGNoIChlKSB7fVxyXG4gICAgfVxyXG4gIH1cclxuICByZXR1cm4gKHJlc3VsdC5sZW5ndGggPyByZXN1bHQgOiB0eXAgPT0gJ3MnID8gb2JqIDogb2JqICsgJ1xcMCcpO1xyXG59XHJcblxyXG4vL1xyXG4vLyBtaXhrZXkoKVxyXG4vLyBNaXhlcyBhIHN0cmluZyBzZWVkIGludG8gYSBrZXkgdGhhdCBpcyBhbiBhcnJheSBvZiBpbnRlZ2VycywgYW5kXHJcbi8vIHJldHVybnMgYSBzaG9ydGVuZWQgc3RyaW5nIHNlZWQgdGhhdCBpcyBlcXVpdmFsZW50IHRvIHRoZSByZXN1bHQga2V5LlxyXG4vL1xyXG5mdW5jdGlvbiBtaXhrZXkoc2VlZCwga2V5KSB7XHJcbiAgdmFyIHN0cmluZ3NlZWQgPSBzZWVkICsgJycsIHNtZWFyLCBqID0gMDtcclxuICB3aGlsZSAoaiA8IHN0cmluZ3NlZWQubGVuZ3RoKSB7XHJcbiAgICBrZXlbbWFzayAmIGpdID1cclxuICAgICAgbWFzayAmICgoc21lYXIgXj0ga2V5W21hc2sgJiBqXSAqIDE5KSArIHN0cmluZ3NlZWQuY2hhckNvZGVBdChqKyspKTtcclxuICB9XHJcbiAgcmV0dXJuIHRvc3RyaW5nKGtleSk7XHJcbn1cclxuXHJcbi8vXHJcbi8vIGF1dG9zZWVkKClcclxuLy8gUmV0dXJucyBhbiBvYmplY3QgZm9yIGF1dG9zZWVkaW5nLCB1c2luZyB3aW5kb3cuY3J5cHRvIGlmIGF2YWlsYWJsZS5cclxuLy9cclxuLyoqIEBwYXJhbSB7VWludDhBcnJheT19IHNlZWQgKi9cclxuZnVuY3Rpb24gYXV0b3NlZWQoc2VlZCkge1xyXG4gIHRyeSB7XHJcbiAgICBHTE9CQUwuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhzZWVkID0gbmV3IFVpbnQ4QXJyYXkod2lkdGgpKTtcclxuICAgIHJldHVybiB0b3N0cmluZyhzZWVkKTtcclxuICB9IGNhdGNoIChlKSB7XHJcbiAgICByZXR1cm4gWytuZXcgRGF0ZSwgR0xPQkFMLCBHTE9CQUwubmF2aWdhdG9yICYmIEdMT0JBTC5uYXZpZ2F0b3IucGx1Z2lucyxcclxuICAgICAgICAgICAgR0xPQkFMLnNjcmVlbiwgdG9zdHJpbmcocG9vbCldO1xyXG4gIH1cclxufVxyXG5cclxuLy9cclxuLy8gdG9zdHJpbmcoKVxyXG4vLyBDb252ZXJ0cyBhbiBhcnJheSBvZiBjaGFyY29kZXMgdG8gYSBzdHJpbmdcclxuLy9cclxuZnVuY3Rpb24gdG9zdHJpbmcoYSkge1xyXG4gIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KDAsIGEpO1xyXG59XHJcblxyXG4vL1xyXG4vLyBXaGVuIHNlZWRyYW5kb20uanMgaXMgbG9hZGVkLCB3ZSBpbW1lZGlhdGVseSBtaXggYSBmZXcgYml0c1xyXG4vLyBmcm9tIHRoZSBidWlsdC1pbiBSTkcgaW50byB0aGUgZW50cm9weSBwb29sLiAgQmVjYXVzZSB3ZSBkb1xyXG4vLyBub3Qgd2FudCB0byBpbnRlZmVyZSB3aXRoIGRldGVybWluc3RpYyBQUk5HIHN0YXRlIGxhdGVyLFxyXG4vLyBzZWVkcmFuZG9tIHdpbGwgbm90IGNhbGwgTWF0aC5yYW5kb20gb24gaXRzIG93biBhZ2FpbiBhZnRlclxyXG4vLyBpbml0aWFsaXphdGlvbi5cclxuLy9cclxubWl4a2V5KE1hdGgucmFuZG9tKCksIHBvb2wpO1xyXG4iLCJmdW5jdGlvbiBFICgpIHtcbiAgLy8gS2VlcCB0aGlzIGVtcHR5IHNvIGl0J3MgZWFzaWVyIHRvIGluaGVyaXQgZnJvbVxuICAvLyAodmlhIGh0dHBzOi8vZ2l0aHViLmNvbS9saXBzbWFjayBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9zY290dGNvcmdhbi90aW55LWVtaXR0ZXIvaXNzdWVzLzMpXG59XG5cbkUucHJvdG90eXBlID0ge1xuICBvbjogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrLCBjdHgpIHtcbiAgICB2YXIgZSA9IHRoaXMuZSB8fCAodGhpcy5lID0ge30pO1xuXG4gICAgKGVbbmFtZV0gfHwgKGVbbmFtZV0gPSBbXSkpLnB1c2goe1xuICAgICAgZm46IGNhbGxiYWNrLFxuICAgICAgY3R4OiBjdHhcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuXG4gIG9uY2U6IGZ1bmN0aW9uIChuYW1lLCBjYWxsYmFjaywgY3R4KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIGZ1bmN0aW9uIGxpc3RlbmVyICgpIHtcbiAgICAgIHNlbGYub2ZmKG5hbWUsIGxpc3RlbmVyKTtcbiAgICAgIGNhbGxiYWNrLmFwcGx5KGN0eCwgYXJndW1lbnRzKTtcbiAgICB9O1xuXG4gICAgbGlzdGVuZXIuXyA9IGNhbGxiYWNrXG4gICAgcmV0dXJuIHRoaXMub24obmFtZSwgbGlzdGVuZXIsIGN0eCk7XG4gIH0sXG5cbiAgZW1pdDogZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgZGF0YSA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcbiAgICB2YXIgZXZ0QXJyID0gKCh0aGlzLmUgfHwgKHRoaXMuZSA9IHt9KSlbbmFtZV0gfHwgW10pLnNsaWNlKCk7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBsZW4gPSBldnRBcnIubGVuZ3RoO1xuXG4gICAgZm9yIChpOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGV2dEFycltpXS5mbi5hcHBseShldnRBcnJbaV0uY3R4LCBkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcblxuICBvZmY6IGZ1bmN0aW9uIChuYW1lLCBjYWxsYmFjaykge1xuICAgIHZhciBlID0gdGhpcy5lIHx8ICh0aGlzLmUgPSB7fSk7XG4gICAgdmFyIGV2dHMgPSBlW25hbWVdO1xuICAgIHZhciBsaXZlRXZlbnRzID0gW107XG5cbiAgICBpZiAoZXZ0cyAmJiBjYWxsYmFjaykge1xuICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGV2dHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgaWYgKGV2dHNbaV0uZm4gIT09IGNhbGxiYWNrICYmIGV2dHNbaV0uZm4uXyAhPT0gY2FsbGJhY2spXG4gICAgICAgICAgbGl2ZUV2ZW50cy5wdXNoKGV2dHNbaV0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJlbW92ZSBldmVudCBmcm9tIHF1ZXVlIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtcbiAgICAvLyBTdWdnZXN0ZWQgYnkgaHR0cHM6Ly9naXRodWIuY29tL2xhemRcbiAgICAvLyBSZWY6IGh0dHBzOi8vZ2l0aHViLmNvbS9zY290dGNvcmdhbi90aW55LWVtaXR0ZXIvY29tbWl0L2M2ZWJmYWE5YmM5NzNiMzNkMTEwYTg0YTMwNzc0MmI3Y2Y5NGM5NTMjY29tbWl0Y29tbWVudC01MDI0OTEwXG5cbiAgICAobGl2ZUV2ZW50cy5sZW5ndGgpXG4gICAgICA/IGVbbmFtZV0gPSBsaXZlRXZlbnRzXG4gICAgICA6IGRlbGV0ZSBlW25hbWVdO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gRTtcbm1vZHVsZS5leHBvcnRzLlRpbnlFbWl0dGVyID0gRTtcbiIsIi8qKlxuICogdHlwZWQtZnVuY3Rpb25cbiAqXG4gKiBUeXBlIGNoZWNraW5nIGZvciBKYXZhU2NyaXB0IGZ1bmN0aW9uc1xuICpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3NkZWpvbmcvdHlwZWQtZnVuY3Rpb25cbiAqL1xuJ3VzZSBzdHJpY3QnO1xuXG4oZnVuY3Rpb24gKHJvb3QsIGZhY3RvcnkpIHtcbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIC8vIEFNRC4gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIG1vZHVsZS5cbiAgICBkZWZpbmUoW10sIGZhY3RvcnkpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgIC8vIE9sZE5vZGUuIERvZXMgbm90IHdvcmsgd2l0aCBzdHJpY3QgQ29tbW9uSlMsIGJ1dFxuICAgIC8vIG9ubHkgQ29tbW9uSlMtbGlrZSBlbnZpcm9ubWVudHMgdGhhdCBzdXBwb3J0IG1vZHVsZS5leHBvcnRzLFxuICAgIC8vIGxpa2UgT2xkTm9kZS5cbiAgICBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBCcm93c2VyIGdsb2JhbHMgKHJvb3QgaXMgd2luZG93KVxuICAgIHJvb3QudHlwZWQgPSBmYWN0b3J5KCk7XG4gIH1cbn0odGhpcywgZnVuY3Rpb24gKCkge1xuXG4gIGZ1bmN0aW9uIG9rICgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vdE9rICgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiB1bmRlZiAoKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiB7e1xuICAgKiAgIHBhcmFtczogUGFyYW1bXSxcbiAgICogICBmbjogZnVuY3Rpb25cbiAgICogfX0gU2lnbmF0dXJlXG4gICAqXG4gICAqIEB0eXBlZGVmIHt7XG4gICAqICAgdHlwZXM6IFR5cGVbXSxcbiAgICogICByZXN0UGFyYW06IGJvb2xlYW5cbiAgICogfX0gUGFyYW1cbiAgICpcbiAgICogQHR5cGVkZWYge3tcbiAgICogICBuYW1lOiBzdHJpbmcsXG4gICAqICAgdHlwZUluZGV4OiBudW1iZXIsXG4gICAqICAgdGVzdDogZnVuY3Rpb24sXG4gICAqICAgY29udmVyc2lvbj86IENvbnZlcnNpb25EZWYsXG4gICAqICAgY29udmVyc2lvbkluZGV4OiBudW1iZXIsXG4gICAqIH19IFR5cGVcbiAgICpcbiAgICogQHR5cGVkZWYge3tcbiAgICogICBmcm9tOiBzdHJpbmcsXG4gICAqICAgdG86IHN0cmluZyxcbiAgICogICBjb252ZXJ0OiBmdW5jdGlvbiAoKikgOiAqXG4gICAqIH19IENvbnZlcnNpb25EZWZcbiAgICpcbiAgICogQHR5cGVkZWYge3tcbiAgICogICBuYW1lOiBzdHJpbmcsXG4gICAqICAgdGVzdDogZnVuY3Rpb24oKikgOiBib29sZWFuXG4gICAqIH19IFR5cGVEZWZcbiAgICovXG5cbiAgLy8gY3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIHR5cGVkLWZ1bmN0aW9uXG4gIGZ1bmN0aW9uIGNyZWF0ZSAoKSB7XG4gICAgLy8gZGF0YSB0eXBlIHRlc3RzXG4gICAgdmFyIF90eXBlcyA9IFtcbiAgICAgIHsgbmFtZTogJ251bWJlcicsICAgIHRlc3Q6IGZ1bmN0aW9uICh4KSB7IHJldHVybiB0eXBlb2YgeCA9PT0gJ251bWJlcicgfSB9LFxuICAgICAgeyBuYW1lOiAnc3RyaW5nJywgICAgdGVzdDogZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHR5cGVvZiB4ID09PSAnc3RyaW5nJyB9IH0sXG4gICAgICB7IG5hbWU6ICdib29sZWFuJywgICB0ZXN0OiBmdW5jdGlvbiAoeCkgeyByZXR1cm4gdHlwZW9mIHggPT09ICdib29sZWFuJyB9IH0sXG4gICAgICB7IG5hbWU6ICdGdW5jdGlvbicsICB0ZXN0OiBmdW5jdGlvbiAoeCkgeyByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbid9IH0sXG4gICAgICB7IG5hbWU6ICdBcnJheScsICAgICB0ZXN0OiBBcnJheS5pc0FycmF5IH0sXG4gICAgICB7IG5hbWU6ICdEYXRlJywgICAgICB0ZXN0OiBmdW5jdGlvbiAoeCkgeyByZXR1cm4geCBpbnN0YW5jZW9mIERhdGUgfSB9LFxuICAgICAgeyBuYW1lOiAnUmVnRXhwJywgICAgdGVzdDogZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHggaW5zdGFuY2VvZiBSZWdFeHAgfSB9LFxuICAgICAgeyBuYW1lOiAnT2JqZWN0JywgICAgdGVzdDogZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiB4ICE9PSBudWxsICYmIHguY29uc3RydWN0b3IgPT09IE9iamVjdFxuICAgICAgfX0sXG4gICAgICB7IG5hbWU6ICdudWxsJywgICAgICB0ZXN0OiBmdW5jdGlvbiAoeCkgeyByZXR1cm4geCA9PT0gbnVsbCB9IH0sXG4gICAgICB7IG5hbWU6ICd1bmRlZmluZWQnLCB0ZXN0OiBmdW5jdGlvbiAoeCkgeyByZXR1cm4geCA9PT0gdW5kZWZpbmVkIH0gfVxuICAgIF07XG5cbiAgICB2YXIgYW55VHlwZSA9IHtcbiAgICAgIG5hbWU6ICdhbnknLFxuICAgICAgdGVzdDogb2tcbiAgICB9XG5cbiAgICAvLyB0eXBlcyB3aGljaCBuZWVkIHRvIGJlIGlnbm9yZWRcbiAgICB2YXIgX2lnbm9yZSA9IFtdO1xuXG4gICAgLy8gdHlwZSBjb252ZXJzaW9uc1xuICAgIHZhciBfY29udmVyc2lvbnMgPSBbXTtcblxuICAgIC8vIFRoaXMgaXMgYSB0ZW1wb3Jhcnkgb2JqZWN0LCB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYSB0eXBlZCBmdW5jdGlvbiBhdCB0aGUgZW5kXG4gICAgdmFyIHR5cGVkID0ge1xuICAgICAgdHlwZXM6IF90eXBlcyxcbiAgICAgIGNvbnZlcnNpb25zOiBfY29udmVyc2lvbnMsXG4gICAgICBpZ25vcmU6IF9pZ25vcmVcbiAgICB9O1xuXG4gICAgLyoqXG4gICAgICogRmluZCB0aGUgdGVzdCBmdW5jdGlvbiBmb3IgYSB0eXBlXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHR5cGVOYW1lXG4gICAgICogQHJldHVybiB7VHlwZURlZn0gUmV0dXJucyB0aGUgdHlwZSBkZWZpbml0aW9uIHdoZW4gZm91bmQsXG4gICAgICogICAgICAgICAgICAgICAgICAgIFRocm93cyBhIFR5cGVFcnJvciBvdGhlcndpc2VcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaW5kVHlwZUJ5TmFtZSAodHlwZU5hbWUpIHtcbiAgICAgIHZhciBlbnRyeSA9IGZpbmRJbkFycmF5KHR5cGVkLnR5cGVzLCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgICAgcmV0dXJuIGVudHJ5Lm5hbWUgPT09IHR5cGVOYW1lO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICByZXR1cm4gZW50cnk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlTmFtZSA9PT0gJ2FueScpIHsgLy8gc3BlY2lhbCBiYWtlZC1pbiBjYXNlICdhbnknXG4gICAgICAgIHJldHVybiBhbnlUeXBlO1xuICAgICAgfVxuXG4gICAgICB2YXIgaGludCA9IGZpbmRJbkFycmF5KHR5cGVkLnR5cGVzLCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgICAgcmV0dXJuIGVudHJ5Lm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gdHlwZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIH0pO1xuXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIHR5cGUgXCInICsgdHlwZU5hbWUgKyAnXCInICtcbiAgICAgICAgICAoaGludCA/ICgnLiBEaWQgeW91IG1lYW4gXCInICsgaGludC5uYW1lICsgJ1wiPycpIDogJycpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kIHRoZSBpbmRleCBvZiBhIHR5cGUgZGVmaW5pdGlvbi4gSGFuZGxlcyBzcGVjaWFsIGNhc2UgJ2FueSdcbiAgICAgKiBAcGFyYW0ge1R5cGVEZWZ9IHR5cGVcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAgICovXG4gICAgZnVuY3Rpb24gZmluZFR5cGVJbmRleCh0eXBlKSB7XG4gICAgICBpZiAodHlwZSA9PT0gYW55VHlwZSkge1xuICAgICAgICByZXR1cm4gOTk5O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHlwZWQudHlwZXMuaW5kZXhPZih0eXBlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kIGEgdHlwZSB0aGF0IG1hdGNoZXMgYSB2YWx1ZS5cbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBmaXJzdCB0eXBlIGZvciB3aGljaFxuICAgICAqICAgICAgICAgICAgICAgICAgdGhlIHR5cGUgdGVzdCBtYXRjaGVzIHRoZSB2YWx1ZS5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaW5kVHlwZU5hbWUodmFsdWUpIHtcbiAgICAgIHZhciBlbnRyeSA9IGZpbmRJbkFycmF5KHR5cGVkLnR5cGVzLCBmdW5jdGlvbiAoZW50cnkpIHtcbiAgICAgICAgcmV0dXJuIGVudHJ5LnRlc3QodmFsdWUpO1xuICAgICAgfSk7XG5cbiAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICByZXR1cm4gZW50cnkubmFtZTtcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWUgaGFzIHVua25vd24gdHlwZS4gVmFsdWU6ICcgKyB2YWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmluZCBhIHNwZWNpZmljIHNpZ25hdHVyZSBmcm9tIGEgKGNvbXBvc2VkKSB0eXBlZCBmdW5jdGlvbiwgZm9yIGV4YW1wbGU6XG4gICAgICpcbiAgICAgKiAgIHR5cGVkLmZpbmQoZm4sIFsnbnVtYmVyJywgJ3N0cmluZyddKVxuICAgICAqICAgdHlwZWQuZmluZChmbiwgJ251bWJlciwgc3RyaW5nJylcbiAgICAgKlxuICAgICAqIEZ1bmN0aW9uIGZpbmQgb25seSBvbmx5IHdvcmtzIGZvciBleGFjdCBtYXRjaGVzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gICAgICAgICAgICAgICAgICAgQSB0eXBlZC1mdW5jdGlvblxuICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgc3RyaW5nW119IHNpZ25hdHVyZSAgIFNpZ25hdHVyZSB0byBiZSBmb3VuZCwgY2FuIGJlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW4gYXJyYXkgb3IgYSBjb21tYSBzZXBhcmF0ZWQgc3RyaW5nLlxuICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufSAgICAgICAgICAgICAgICAgICAgIFJldHVybnMgdGhlIG1hdGNoaW5nIHNpZ25hdHVyZSwgb3JcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvd3MgYW4gZXJyb3Igd2hlbiBubyBzaWduYXR1cmVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcyBmb3VuZC5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaW5kIChmbiwgc2lnbmF0dXJlKSB7XG4gICAgICBpZiAoIWZuLnNpZ25hdHVyZXMpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRnVuY3Rpb24gaXMgbm8gdHlwZWQtZnVuY3Rpb24nKTtcbiAgICAgIH1cblxuICAgICAgLy8gbm9ybWFsaXplIGlucHV0XG4gICAgICB2YXIgYXJyO1xuICAgICAgaWYgKHR5cGVvZiBzaWduYXR1cmUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGFyciA9IHNpZ25hdHVyZS5zcGxpdCgnLCcpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGFycltpXSA9IGFycltpXS50cmltKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoc2lnbmF0dXJlKSkge1xuICAgICAgICBhcnIgPSBzaWduYXR1cmU7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignU3RyaW5nIGFycmF5IG9yIGEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBleHBlY3RlZCcpO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RyID0gYXJyLmpvaW4oJywnKTtcblxuICAgICAgLy8gZmluZCBhbiBleGFjdCBtYXRjaFxuICAgICAgdmFyIG1hdGNoID0gZm4uc2lnbmF0dXJlc1tzdHJdO1xuICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgIH1cblxuICAgICAgLy8gVE9ETzogZXh0ZW5kIGZpbmQgdG8gbWF0Y2ggbm9uLWV4YWN0IHNpZ25hdHVyZXNcblxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignU2lnbmF0dXJlIG5vdCBmb3VuZCAoc2lnbmF0dXJlOiAnICsgKGZuLm5hbWUgfHwgJ3VubmFtZWQnKSArICcoJyArIGFyci5qb2luKCcsICcpICsgJykpJyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udmVydCBhIGdpdmVuIHZhbHVlIHRvIGFub3RoZXIgZGF0YSB0eXBlLlxuICAgICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNvbnZlcnQgKHZhbHVlLCB0eXBlKSB7XG4gICAgICB2YXIgZnJvbSA9IGZpbmRUeXBlTmFtZSh2YWx1ZSk7XG5cbiAgICAgIC8vIGNoZWNrIGNvbnZlcnNpb24gaXMgbmVlZGVkXG4gICAgICBpZiAodHlwZSA9PT0gZnJvbSkge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZWQuY29udmVyc2lvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNvbnZlcnNpb24gPSB0eXBlZC5jb252ZXJzaW9uc1tpXTtcbiAgICAgICAgaWYgKGNvbnZlcnNpb24uZnJvbSA9PT0gZnJvbSAmJiBjb252ZXJzaW9uLnRvID09PSB0eXBlKSB7XG4gICAgICAgICAgcmV0dXJuIGNvbnZlcnNpb24uY29udmVydCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29udmVydCBmcm9tICcgKyBmcm9tICsgJyB0byAnICsgdHlwZSk7XG4gICAgfVxuICAgIFxuICAgIC8qKlxuICAgICAqIFN0cmluZ2lmeSBwYXJhbWV0ZXJzIGluIGEgbm9ybWFsaXplZCB3YXlcbiAgICAgKiBAcGFyYW0ge1BhcmFtW119IHBhcmFtc1xuICAgICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzdHJpbmdpZnlQYXJhbXMgKHBhcmFtcykge1xuICAgICAgcmV0dXJuIHBhcmFtc1xuICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHBhcmFtKSB7XG4gICAgICAgICAgICB2YXIgdHlwZU5hbWVzID0gcGFyYW0udHlwZXMubWFwKGdldFR5cGVOYW1lKTtcblxuICAgICAgICAgICAgcmV0dXJuIChwYXJhbS5yZXN0UGFyYW0gPyAnLi4uJyA6ICcnKSArIHR5cGVOYW1lcy5qb2luKCd8Jyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuam9pbignLCcpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhcnNlIGEgcGFyYW1ldGVyLCBsaWtlIFwiLi4ubnVtYmVyIHwgYm9vbGVhblwiXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHBhcmFtXG4gICAgICogQHBhcmFtIHtDb252ZXJzaW9uRGVmW119IGNvbnZlcnNpb25zXG4gICAgICogQHJldHVybiB7UGFyYW19IHBhcmFtXG4gICAgICovXG4gICAgZnVuY3Rpb24gcGFyc2VQYXJhbSAocGFyYW0sIGNvbnZlcnNpb25zKSB7XG4gICAgICB2YXIgcmVzdFBhcmFtID0gcGFyYW0uaW5kZXhPZignLi4uJykgPT09IDA7XG4gICAgICB2YXIgdHlwZXMgPSAoIXJlc3RQYXJhbSlcbiAgICAgICAgICA/IHBhcmFtXG4gICAgICAgICAgOiAocGFyYW0ubGVuZ3RoID4gMylcbiAgICAgICAgICAgICAgPyBwYXJhbS5zbGljZSgzKVxuICAgICAgICAgICAgICA6ICdhbnknO1xuXG4gICAgICB2YXIgdHlwZU5hbWVzID0gdHlwZXMuc3BsaXQoJ3wnKS5tYXAodHJpbSlcbiAgICAgICAgICAuZmlsdGVyKG5vdEVtcHR5KVxuICAgICAgICAgIC5maWx0ZXIobm90SWdub3JlKTtcblxuICAgICAgdmFyIG1hdGNoaW5nQ29udmVyc2lvbnMgPSBmaWx0ZXJDb252ZXJzaW9ucyhjb252ZXJzaW9ucywgdHlwZU5hbWVzKTtcblxuICAgICAgdmFyIGV4YWN0VHlwZXMgPSB0eXBlTmFtZXMubWFwKGZ1bmN0aW9uICh0eXBlTmFtZSkge1xuICAgICAgICB2YXIgdHlwZSA9IGZpbmRUeXBlQnlOYW1lKHR5cGVOYW1lKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5hbWU6IHR5cGVOYW1lLFxuICAgICAgICAgIHR5cGVJbmRleDogZmluZFR5cGVJbmRleCh0eXBlKSxcbiAgICAgICAgICB0ZXN0OiB0eXBlLnRlc3QsXG4gICAgICAgICAgY29udmVyc2lvbjogbnVsbCxcbiAgICAgICAgICBjb252ZXJzaW9uSW5kZXg6IC0xXG4gICAgICAgIH07XG4gICAgICB9KTtcblxuICAgICAgdmFyIGNvbnZlcnRpYmxlVHlwZXMgPSBtYXRjaGluZ0NvbnZlcnNpb25zLm1hcChmdW5jdGlvbiAoY29udmVyc2lvbikge1xuICAgICAgICB2YXIgdHlwZSA9IGZpbmRUeXBlQnlOYW1lKGNvbnZlcnNpb24uZnJvbSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBuYW1lOiBjb252ZXJzaW9uLmZyb20sXG4gICAgICAgICAgdHlwZUluZGV4OiBmaW5kVHlwZUluZGV4KHR5cGUpLFxuICAgICAgICAgIHRlc3Q6IHR5cGUudGVzdCxcbiAgICAgICAgICBjb252ZXJzaW9uOiBjb252ZXJzaW9uLFxuICAgICAgICAgIGNvbnZlcnNpb25JbmRleDogY29udmVyc2lvbnMuaW5kZXhPZihjb252ZXJzaW9uKVxuICAgICAgICB9O1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGVzOiBleGFjdFR5cGVzLmNvbmNhdChjb252ZXJ0aWJsZVR5cGVzKSxcbiAgICAgICAgcmVzdFBhcmFtOiByZXN0UGFyYW1cbiAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFyc2UgYSBzaWduYXR1cmUgd2l0aCBjb21tYSBzZXBhcmF0ZWQgcGFyYW1ldGVycyxcbiAgICAgKiBsaWtlIFwibnVtYmVyIHwgYm9vbGVhbiwgLi4uc3RyaW5nXCJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc2lnbmF0dXJlXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gZm5cbiAgICAgKiBAcGFyYW0ge0NvbnZlcnNpb25EZWZbXX0gY29udmVyc2lvbnNcbiAgICAgKiBAcmV0dXJuIHtTaWduYXR1cmUgfCBudWxsfSBzaWduYXR1cmVcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwYXJzZVNpZ25hdHVyZSAoc2lnbmF0dXJlLCBmbiwgY29udmVyc2lvbnMpIHtcbiAgICAgIHZhciBwYXJhbXMgPSBbXTtcblxuICAgICAgaWYgKHNpZ25hdHVyZS50cmltKCkgIT09ICcnKSB7XG4gICAgICAgIHBhcmFtcyA9IHNpZ25hdHVyZVxuICAgICAgICAgICAgLnNwbGl0KCcsJylcbiAgICAgICAgICAgIC5tYXAodHJpbSlcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKHBhcmFtLCBpbmRleCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgdmFyIHBhcnNlZFBhcmFtID0gcGFyc2VQYXJhbShwYXJhbSwgY29udmVyc2lvbnMpO1xuXG4gICAgICAgICAgICAgIGlmIChwYXJzZWRQYXJhbS5yZXN0UGFyYW0gJiYgKGluZGV4ICE9PSBhcnJheS5sZW5ndGggLSAxKSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignVW5leHBlY3RlZCByZXN0IHBhcmFtZXRlciBcIicgKyBwYXJhbSArICdcIjogJyArXG4gICAgICAgICAgICAgICAgICAgICdvbmx5IGFsbG93ZWQgZm9yIHRoZSBsYXN0IHBhcmFtZXRlcicpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZFBhcmFtO1xuICAgICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAocGFyYW1zLnNvbWUoaXNJbnZhbGlkUGFyYW0pKSB7XG4gICAgICAgIC8vIGludmFsaWQgc2lnbmF0dXJlOiBhdCBsZWFzdCBvbmUgcGFyYW1ldGVyIGhhcyBubyB0eXBlc1xuICAgICAgICAvLyAodGhleSBtYXkgaGF2ZSBiZWVuIGZpbHRlcmVkKVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICAgIGZuOiBmblxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUZXN0IHdoZXRoZXIgYSBzZXQgb2YgcGFyYW1zIGNvbnRhaW5zIGEgcmVzdFBhcmFtXG4gICAgICogQHBhcmFtIHtQYXJhbVtdfSBwYXJhbXNcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiB0aGUgbGFzdCBwYXJhbWV0ZXIgaXMgYSByZXN0UGFyYW1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBoYXNSZXN0UGFyYW0ocGFyYW1zKSB7XG4gICAgICB2YXIgcGFyYW0gPSBsYXN0KHBhcmFtcylcbiAgICAgIHJldHVybiBwYXJhbSA/IHBhcmFtLnJlc3RQYXJhbSA6IGZhbHNlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRlc3Qgd2hldGhlciBhIHBhcmFtZXRlciBjb250YWlucyBjb252ZXJzaW9uc1xuICAgICAqIEBwYXJhbSB7UGFyYW19IHBhcmFtXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW4gYXQgbGVhc3Qgb25lIG9mIHRoZSBwYXJhbWV0ZXJzXG4gICAgICogICAgICAgICAgICAgICAgICAgY29udGFpbnMgYSBjb252ZXJzaW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc0NvbnZlcnNpb25zKHBhcmFtKSB7XG4gICAgICByZXR1cm4gcGFyYW0udHlwZXMuc29tZShmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICByZXR1cm4gdHlwZS5jb252ZXJzaW9uICE9IG51bGw7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYSB0eXBlIHRlc3QgZm9yIGEgc2luZ2xlIHBhcmFtZXRlciwgd2hpY2ggY2FuIGhhdmUgb25lIG9yIG11bHRpcGxlXG4gICAgICogdHlwZXMuXG4gICAgICogQHBhcmFtIHtQYXJhbX0gcGFyYW1cbiAgICAgKiBAcmV0dXJuIHtmdW5jdGlvbih4OiAqKSA6IGJvb2xlYW59IFJldHVybnMgYSB0ZXN0IGZ1bmN0aW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcGlsZVRlc3QocGFyYW0pIHtcbiAgICAgIGlmICghcGFyYW0gfHwgcGFyYW0udHlwZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIG5vdGhpbmcgdG8gZG9cbiAgICAgICAgcmV0dXJuIG9rO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAocGFyYW0udHlwZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBmaW5kVHlwZUJ5TmFtZShwYXJhbS50eXBlc1swXS5uYW1lKS50ZXN0O1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAocGFyYW0udHlwZXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgIHZhciB0ZXN0MCA9IGZpbmRUeXBlQnlOYW1lKHBhcmFtLnR5cGVzWzBdLm5hbWUpLnRlc3Q7XG4gICAgICAgIHZhciB0ZXN0MSA9IGZpbmRUeXBlQnlOYW1lKHBhcmFtLnR5cGVzWzFdLm5hbWUpLnRlc3Q7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiBvcih4KSB7XG4gICAgICAgICAgcmV0dXJuIHRlc3QwKHgpIHx8IHRlc3QxKHgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHsgLy8gcGFyYW0udHlwZXMubGVuZ3RoID4gMlxuICAgICAgICB2YXIgdGVzdHMgPSBwYXJhbS50eXBlcy5tYXAoZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgICAgICByZXR1cm4gZmluZFR5cGVCeU5hbWUodHlwZS5uYW1lKS50ZXN0O1xuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gb3IoeCkge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0ZXN0c1tpXSh4KSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgdGVzdCBmb3IgYWxsIHBhcmFtZXRlcnMgb2YgYSBzaWduYXR1cmVcbiAgICAgKiBAcGFyYW0ge1BhcmFtW119IHBhcmFtc1xuICAgICAqIEByZXR1cm4ge2Z1bmN0aW9uKGFyZ3M6IEFycmF5PCo+KSA6IGJvb2xlYW59XG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcGlsZVRlc3RzKHBhcmFtcykge1xuICAgICAgdmFyIHRlc3RzLCB0ZXN0MCwgdGVzdDE7XG5cbiAgICAgIGlmIChoYXNSZXN0UGFyYW0ocGFyYW1zKSkge1xuICAgICAgICAvLyB2YXJpYWJsZSBhcmd1bWVudHMgbGlrZSAnLi4ubnVtYmVyJ1xuICAgICAgICB0ZXN0cyA9IGluaXRpYWwocGFyYW1zKS5tYXAoY29tcGlsZVRlc3QpO1xuICAgICAgICB2YXIgdmFySW5kZXggPSB0ZXN0cy5sZW5ndGg7XG4gICAgICAgIHZhciBsYXN0VGVzdCA9IGNvbXBpbGVUZXN0KGxhc3QocGFyYW1zKSk7XG4gICAgICAgIHZhciB0ZXN0UmVzdFBhcmFtID0gZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gdmFySW5kZXg7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoIWxhc3RUZXN0KGFyZ3NbaV0pKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gdGVzdEFyZ3MoYXJncykge1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghdGVzdHNbaV0oYXJnc1tpXSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdGVzdFJlc3RQYXJhbShhcmdzKSAmJiAoYXJncy5sZW5ndGggPj0gdmFySW5kZXggKyAxKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICAvLyBubyB2YXJpYWJsZSBhcmd1bWVudHNcbiAgICAgICAgaWYgKHBhcmFtcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gdGVzdEFyZ3MoYXJncykge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3MubGVuZ3RoID09PSAwO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIHRlc3QwID0gY29tcGlsZVRlc3QocGFyYW1zWzBdKTtcbiAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gdGVzdEFyZ3MoYXJncykge1xuICAgICAgICAgICAgcmV0dXJuIHRlc3QwKGFyZ3NbMF0pICYmIGFyZ3MubGVuZ3RoID09PSAxO1xuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocGFyYW1zLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgIHRlc3QwID0gY29tcGlsZVRlc3QocGFyYW1zWzBdKTtcbiAgICAgICAgICB0ZXN0MSA9IGNvbXBpbGVUZXN0KHBhcmFtc1sxXSk7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRlc3RBcmdzKGFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiB0ZXN0MChhcmdzWzBdKSAmJiB0ZXN0MShhcmdzWzFdKSAmJiBhcmdzLmxlbmd0aCA9PT0gMjtcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgeyAvLyBhcmd1bWVudHMubGVuZ3RoID4gMlxuICAgICAgICAgIHRlc3RzID0gcGFyYW1zLm1hcChjb21waWxlVGVzdCk7XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIHRlc3RBcmdzKGFyZ3MpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgaWYgKCF0ZXN0c1tpXShhcmdzW2ldKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFyZ3MubGVuZ3RoID09PSB0ZXN0cy5sZW5ndGg7XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmQgdGhlIHBhcmFtZXRlciBhdCBhIHNwZWNpZmljIGluZGV4IG9mIGEgc2lnbmF0dXJlLlxuICAgICAqIEhhbmRsZXMgcmVzdCBwYXJhbWV0ZXJzLlxuICAgICAqIEBwYXJhbSB7U2lnbmF0dXJlfSBzaWduYXR1cmVcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAgICAgKiBAcmV0dXJuIHtQYXJhbSB8IG51bGx9IFJldHVybnMgdGhlIG1hdGNoaW5nIHBhcmFtZXRlciB3aGVuIGZvdW5kLFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCBvdGhlcndpc2UuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0UGFyYW1BdEluZGV4KHNpZ25hdHVyZSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiBpbmRleCA8IHNpZ25hdHVyZS5wYXJhbXMubGVuZ3RoXG4gICAgICAgICAgPyBzaWduYXR1cmUucGFyYW1zW2luZGV4XVxuICAgICAgICAgIDogaGFzUmVzdFBhcmFtKHNpZ25hdHVyZS5wYXJhbXMpXG4gICAgICAgICAgICAgID8gbGFzdChzaWduYXR1cmUucGFyYW1zKVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgYWxsIHR5cGUgbmFtZXMgb2YgYSBwYXJhbWV0ZXJcbiAgICAgKiBAcGFyYW0ge1NpZ25hdHVyZX0gc2lnbmF0dXJlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gICAgICogQHBhcmFtIHtib29sZWFufSBleGNsdWRlQ29udmVyc2lvbnNcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gUmV0dXJucyBhbiBhcnJheSB3aXRoIHR5cGUgbmFtZXNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRFeHBlY3RlZFR5cGVOYW1lcyAoc2lnbmF0dXJlLCBpbmRleCwgZXhjbHVkZUNvbnZlcnNpb25zKSB7XG4gICAgICB2YXIgcGFyYW0gPSBnZXRQYXJhbUF0SW5kZXgoc2lnbmF0dXJlLCBpbmRleCk7XG4gICAgICB2YXIgdHlwZXMgPSBwYXJhbVxuICAgICAgICAgID8gZXhjbHVkZUNvbnZlcnNpb25zXG4gICAgICAgICAgICAgICAgICA/IHBhcmFtLnR5cGVzLmZpbHRlcihpc0V4YWN0VHlwZSlcbiAgICAgICAgICAgICAgICAgIDogcGFyYW0udHlwZXNcbiAgICAgICAgICA6IFtdO1xuXG4gICAgICByZXR1cm4gdHlwZXMubWFwKGdldFR5cGVOYW1lKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIGEgdHlwZVxuICAgICAqIEBwYXJhbSB7VHlwZX0gdHlwZVxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gUmV0dXJucyB0aGUgdHlwZSBuYW1lXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0VHlwZU5hbWUodHlwZSkge1xuICAgICAgcmV0dXJuIHR5cGUubmFtZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUZXN0IHdoZXRoZXIgYSB0eXBlIGlzIGFuIGV4YWN0IHR5cGUgb3IgY29udmVyc2lvblxuICAgICAqIEBwYXJhbSB7VHlwZX0gdHlwZVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSB3aGVuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNFeGFjdFR5cGUodHlwZSkge1xuICAgICAgcmV0dXJuIHR5cGUuY29udmVyc2lvbiA9PT0gbnVsbCB8fCB0eXBlLmNvbnZlcnNpb24gPT09IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGNyZWF0aW5nIGVycm9yIG1lc3NhZ2VzOiBjcmVhdGUgYW4gYXJyYXkgd2l0aFxuICAgICAqIGFsbCBhdmFpbGFibGUgdHlwZXMgb24gYSBzcGVjaWZpYyBhcmd1bWVudCBpbmRleC5cbiAgICAgKiBAcGFyYW0ge1NpZ25hdHVyZVtdfSBzaWduYXR1cmVzXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gICAgICogQHJldHVybiB7c3RyaW5nW119IFJldHVybnMgYW4gYXJyYXkgd2l0aCBhdmFpbGFibGUgdHlwZXNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBtZXJnZUV4cGVjdGVkUGFyYW1zKHNpZ25hdHVyZXMsIGluZGV4KSB7XG4gICAgICB2YXIgdHlwZU5hbWVzID0gdW5pcShmbGF0TWFwKHNpZ25hdHVyZXMsIGZ1bmN0aW9uIChzaWduYXR1cmUpIHtcbiAgICAgICAgcmV0dXJuIGdldEV4cGVjdGVkVHlwZU5hbWVzKHNpZ25hdHVyZSwgaW5kZXgsIGZhbHNlKTtcbiAgICAgIH0pKTtcblxuICAgICAgcmV0dXJuICh0eXBlTmFtZXMuaW5kZXhPZignYW55JykgIT09IC0xKSA/IFsnYW55J10gOiB0eXBlTmFtZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgICAgICAgICAgICAgVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uXG4gICAgICogQHBhcmFtIHthcnJheS48Kj59IGFyZ3MgICAgICAgICAgVGhlIGFjdHVhbCBhcmd1bWVudHMgcGFzc2VkIHRvIHRoZSBmdW5jdGlvblxuICAgICAqIEBwYXJhbSB7U2lnbmF0dXJlW119IHNpZ25hdHVyZXMgIEEgbGlzdCB3aXRoIGF2YWlsYWJsZSBzaWduYXR1cmVzXG4gICAgICogQHJldHVybiB7VHlwZUVycm9yfSBSZXR1cm5zIGEgdHlwZSBlcnJvciB3aXRoIGFkZGl0aW9uYWwgZGF0YVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgYXR0YWNoZWQgdG8gaXQgaW4gdGhlIHByb3BlcnR5IGBkYXRhYFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUVycm9yKG5hbWUsIGFyZ3MsIHNpZ25hdHVyZXMpIHtcbiAgICAgIHZhciBlcnIsIGV4cGVjdGVkO1xuICAgICAgdmFyIF9uYW1lID0gbmFtZSB8fCAndW5uYW1lZCc7XG5cbiAgICAgIC8vIHRlc3QgZm9yIHdyb25nIHR5cGUgYXQgc29tZSBpbmRleFxuICAgICAgdmFyIG1hdGNoaW5nU2lnbmF0dXJlcyA9IHNpZ25hdHVyZXM7XG4gICAgICB2YXIgaW5kZXg7XG4gICAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBhcmdzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICB2YXIgbmV4dE1hdGNoaW5nRGVmcyA9IG1hdGNoaW5nU2lnbmF0dXJlcy5maWx0ZXIoZnVuY3Rpb24gKHNpZ25hdHVyZSkge1xuICAgICAgICAgIHZhciB0ZXN0ID0gY29tcGlsZVRlc3QoZ2V0UGFyYW1BdEluZGV4KHNpZ25hdHVyZSwgaW5kZXgpKTtcbiAgICAgICAgICByZXR1cm4gKGluZGV4IDwgc2lnbmF0dXJlLnBhcmFtcy5sZW5ndGggfHwgaGFzUmVzdFBhcmFtKHNpZ25hdHVyZS5wYXJhbXMpKSAmJlxuICAgICAgICAgICAgICB0ZXN0KGFyZ3NbaW5kZXhdKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKG5leHRNYXRjaGluZ0RlZnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgLy8gbm8gbWF0Y2hpbmcgc2lnbmF0dXJlcyBhbnltb3JlLCB0aHJvdyBlcnJvciBcIndyb25nIHR5cGVcIlxuICAgICAgICAgIGV4cGVjdGVkID0gbWVyZ2VFeHBlY3RlZFBhcmFtcyhtYXRjaGluZ1NpZ25hdHVyZXMsIGluZGV4KTtcbiAgICAgICAgICBpZiAoZXhwZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdmFyIGFjdHVhbFR5cGUgPSBmaW5kVHlwZU5hbWUoYXJnc1tpbmRleF0pO1xuXG4gICAgICAgICAgICBlcnIgPSBuZXcgVHlwZUVycm9yKCdVbmV4cGVjdGVkIHR5cGUgb2YgYXJndW1lbnQgaW4gZnVuY3Rpb24gJyArIF9uYW1lICtcbiAgICAgICAgICAgICAgICAnIChleHBlY3RlZDogJyArIGV4cGVjdGVkLmpvaW4oJyBvciAnKSArXG4gICAgICAgICAgICAgICAgJywgYWN0dWFsOiAnICsgYWN0dWFsVHlwZSArICcsIGluZGV4OiAnICsgaW5kZXggKyAnKScpO1xuICAgICAgICAgICAgZXJyLmRhdGEgPSB7XG4gICAgICAgICAgICAgIGNhdGVnb3J5OiAnd3JvbmdUeXBlJyxcbiAgICAgICAgICAgICAgZm46IF9uYW1lLFxuICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICAgIGFjdHVhbDogYWN0dWFsVHlwZSxcbiAgICAgICAgICAgICAgZXhwZWN0ZWQ6IGV4cGVjdGVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBtYXRjaGluZ1NpZ25hdHVyZXMgPSBuZXh0TWF0Y2hpbmdEZWZzO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIHRlc3QgZm9yIHRvbyBmZXcgYXJndW1lbnRzXG4gICAgICB2YXIgbGVuZ3RocyA9IG1hdGNoaW5nU2lnbmF0dXJlcy5tYXAoZnVuY3Rpb24gKHNpZ25hdHVyZSkge1xuICAgICAgICByZXR1cm4gaGFzUmVzdFBhcmFtKHNpZ25hdHVyZS5wYXJhbXMpID8gSW5maW5pdHkgOiBzaWduYXR1cmUucGFyYW1zLmxlbmd0aDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgTWF0aC5taW4uYXBwbHkobnVsbCwgbGVuZ3RocykpIHtcbiAgICAgICAgZXhwZWN0ZWQgPSBtZXJnZUV4cGVjdGVkUGFyYW1zKG1hdGNoaW5nU2lnbmF0dXJlcywgaW5kZXgpO1xuICAgICAgICBlcnIgPSBuZXcgVHlwZUVycm9yKCdUb28gZmV3IGFyZ3VtZW50cyBpbiBmdW5jdGlvbiAnICsgX25hbWUgK1xuICAgICAgICAgICAgJyAoZXhwZWN0ZWQ6ICcgKyBleHBlY3RlZC5qb2luKCcgb3IgJykgK1xuICAgICAgICAgICAgJywgaW5kZXg6ICcgKyBhcmdzLmxlbmd0aCArICcpJyk7XG4gICAgICAgIGVyci5kYXRhID0ge1xuICAgICAgICAgIGNhdGVnb3J5OiAndG9vRmV3QXJncycsXG4gICAgICAgICAgZm46IF9uYW1lLFxuICAgICAgICAgIGluZGV4OiBhcmdzLmxlbmd0aCxcbiAgICAgICAgICBleHBlY3RlZDogZXhwZWN0ZWRcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgfVxuXG4gICAgICAvLyB0ZXN0IGZvciB0b28gbWFueSBhcmd1bWVudHNcbiAgICAgIHZhciBtYXhMZW5ndGggPSBNYXRoLm1heC5hcHBseShudWxsLCBsZW5ndGhzKTtcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA+IG1heExlbmd0aCkge1xuICAgICAgICBlcnIgPSBuZXcgVHlwZUVycm9yKCdUb28gbWFueSBhcmd1bWVudHMgaW4gZnVuY3Rpb24gJyArIF9uYW1lICtcbiAgICAgICAgICAgICcgKGV4cGVjdGVkOiAnICsgbWF4TGVuZ3RoICsgJywgYWN0dWFsOiAnICsgYXJncy5sZW5ndGggKyAnKScpO1xuICAgICAgICBlcnIuZGF0YSA9IHtcbiAgICAgICAgICBjYXRlZ29yeTogJ3Rvb01hbnlBcmdzJyxcbiAgICAgICAgICBmbjogX25hbWUsXG4gICAgICAgICAgaW5kZXg6IGFyZ3MubGVuZ3RoLFxuICAgICAgICAgIGV4cGVjdGVkTGVuZ3RoOiBtYXhMZW5ndGhcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXJyO1xuICAgICAgfVxuXG4gICAgICBlcnIgPSBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgb2YgdHlwZSBcIicgKyBhcmdzLmpvaW4oJywgJykgK1xuICAgICAgICAgICdcIiBkbyBub3QgbWF0Y2ggYW55IG9mIHRoZSBkZWZpbmVkIHNpZ25hdHVyZXMgb2YgZnVuY3Rpb24gJyArIF9uYW1lICsgJy4nKTtcbiAgICAgIGVyci5kYXRhID0ge1xuICAgICAgICBjYXRlZ29yeTogJ21pc21hdGNoJyxcbiAgICAgICAgYWN0dWFsOiBhcmdzLm1hcChmaW5kVHlwZU5hbWUpXG4gICAgICB9XG4gICAgICByZXR1cm4gZXJyO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmQgdGhlIGxvd2VzdCBpbmRleCBvZiBhbGwgZXhhY3QgdHlwZXMgb2YgYSBwYXJhbWV0ZXIgKG5vIGNvbnZlcnNpb25zKVxuICAgICAqIEBwYXJhbSB7UGFyYW19IHBhcmFtXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgbG93ZXN0IHR5cGUgaW4gdHlwZWQudHlwZXNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRMb3dlc3RUeXBlSW5kZXggKHBhcmFtKSB7XG4gICAgICB2YXIgbWluID0gOTk5O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcmFtLnR5cGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpc0V4YWN0VHlwZShwYXJhbS50eXBlc1tpXSkpIHtcbiAgICAgICAgICBtaW4gPSBNYXRoLm1pbihtaW4sIHBhcmFtLnR5cGVzW2ldLnR5cGVJbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG1pbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGaW5kIHRoZSBsb3dlc3QgaW5kZXggb2YgdGhlIGNvbnZlcnNpb24gb2YgYWxsIHR5cGVzIG9mIHRoZSBwYXJhbWV0ZXJcbiAgICAgKiBoYXZpbmcgYSBjb252ZXJzaW9uXG4gICAgICogQHBhcmFtIHtQYXJhbX0gcGFyYW1cbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IFJldHVybnMgdGhlIGxvd2VzdCBpbmRleCBvZiB0aGUgY29udmVyc2lvbnMgb2YgdGhpcyB0eXBlXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0TG93ZXN0Q29udmVyc2lvbkluZGV4IChwYXJhbSkge1xuICAgICAgdmFyIG1pbiA9IDk5OTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwYXJhbS50eXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIWlzRXhhY3RUeXBlKHBhcmFtLnR5cGVzW2ldKSkge1xuICAgICAgICAgIG1pbiA9IE1hdGgubWluKG1pbiwgcGFyYW0udHlwZXNbaV0uY29udmVyc2lvbkluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbWluO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENvbXBhcmUgdHdvIHBhcmFtc1xuICAgICAqIEBwYXJhbSB7UGFyYW19IHBhcmFtMVxuICAgICAqIEBwYXJhbSB7UGFyYW19IHBhcmFtMlxuICAgICAqIEByZXR1cm4ge251bWJlcn0gcmV0dXJucyBhIG5lZ2F0aXZlIG51bWJlciB3aGVuIHBhcmFtMSBtdXN0IGdldCBhIGxvd2VyXG4gICAgICogICAgICAgICAgICAgICAgICBpbmRleCB0aGFuIHBhcmFtMiwgYSBwb3NpdGl2ZSBudW1iZXIgd2hlbiB0aGUgb3Bwb3NpdGUsXG4gICAgICogICAgICAgICAgICAgICAgICBvciB6ZXJvIHdoZW4gYm90aCBhcmUgZXF1YWxcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21wYXJlUGFyYW1zIChwYXJhbTEsIHBhcmFtMikge1xuICAgICAgdmFyIGM7XG5cbiAgICAgIC8vIGNvbXBhcmUgaGF2aW5nIGEgcmVzdCBwYXJhbWV0ZXIgb3Igbm90XG4gICAgICBjID0gcGFyYW0xLnJlc3RQYXJhbSAtIHBhcmFtMi5yZXN0UGFyYW07XG4gICAgICBpZiAoYyAhPT0gMCkge1xuICAgICAgICByZXR1cm4gYztcbiAgICAgIH1cblxuICAgICAgLy8gY29tcGFyZSBoYXZpbmcgY29udmVyc2lvbnMgb3Igbm90XG4gICAgICBjID0gaGFzQ29udmVyc2lvbnMocGFyYW0xKSAtIGhhc0NvbnZlcnNpb25zKHBhcmFtMik7XG4gICAgICBpZiAoYyAhPT0gMCkge1xuICAgICAgICByZXR1cm4gYztcbiAgICAgIH1cblxuICAgICAgLy8gY29tcGFyZSB0aGUgaW5kZXggb2YgdGhlIHR5cGVzXG4gICAgICBjID0gZ2V0TG93ZXN0VHlwZUluZGV4KHBhcmFtMSkgLSBnZXRMb3dlc3RUeXBlSW5kZXgocGFyYW0yKTtcbiAgICAgIGlmIChjICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBjO1xuICAgICAgfVxuXG4gICAgICAvLyBjb21wYXJlIHRoZSBpbmRleCBvZiBhbnkgY29udmVyc2lvblxuICAgICAgcmV0dXJuIGdldExvd2VzdENvbnZlcnNpb25JbmRleChwYXJhbTEpIC0gZ2V0TG93ZXN0Q29udmVyc2lvbkluZGV4KHBhcmFtMik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcGFyZSB0d28gc2lnbmF0dXJlc1xuICAgICAqIEBwYXJhbSB7U2lnbmF0dXJlfSBzaWduYXR1cmUxXG4gICAgICogQHBhcmFtIHtTaWduYXR1cmV9IHNpZ25hdHVyZTJcbiAgICAgKiBAcmV0dXJuIHtudW1iZXJ9IHJldHVybnMgYSBuZWdhdGl2ZSBudW1iZXIgd2hlbiBwYXJhbTEgbXVzdCBnZXQgYSBsb3dlclxuICAgICAqICAgICAgICAgICAgICAgICAgaW5kZXggdGhhbiBwYXJhbTIsIGEgcG9zaXRpdmUgbnVtYmVyIHdoZW4gdGhlIG9wcG9zaXRlLFxuICAgICAqICAgICAgICAgICAgICAgICAgb3IgemVybyB3aGVuIGJvdGggYXJlIGVxdWFsXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcGFyZVNpZ25hdHVyZXMgKHNpZ25hdHVyZTEsIHNpZ25hdHVyZTIpIHtcbiAgICAgIHZhciBsZW4gPSBNYXRoLm1pbihzaWduYXR1cmUxLnBhcmFtcy5sZW5ndGgsIHNpZ25hdHVyZTIucGFyYW1zLmxlbmd0aCk7XG4gICAgICB2YXIgaTtcbiAgICAgIHZhciBjO1xuXG4gICAgICAvLyBjb21wYXJlIHdoZXRoZXIgdGhlIHBhcmFtcyBoYXZlIGNvbnZlcnNpb25zIGF0IGFsbCBvciBub3RcbiAgICAgIGMgPSBzaWduYXR1cmUxLnBhcmFtcy5zb21lKGhhc0NvbnZlcnNpb25zKSAtIHNpZ25hdHVyZTIucGFyYW1zLnNvbWUoaGFzQ29udmVyc2lvbnMpXG4gICAgICBpZiAoYyAhPT0gMCkge1xuICAgICAgICByZXR1cm4gYztcbiAgICAgIH1cblxuICAgICAgLy8gbmV4dCBjb21wYXJlIHdoZXRoZXIgdGhlIHBhcmFtcyBoYXZlIGNvbnZlcnNpb25zIG9uZSBieSBvbmVcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgICBjID0gaGFzQ29udmVyc2lvbnMoc2lnbmF0dXJlMS5wYXJhbXNbaV0pIC0gaGFzQ29udmVyc2lvbnMoc2lnbmF0dXJlMi5wYXJhbXNbaV0pO1xuICAgICAgICBpZiAoYyAhPT0gMCkge1xuICAgICAgICAgIHJldHVybiBjO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbXBhcmUgdGhlIHR5cGVzIG9mIHRoZSBwYXJhbXMgb25lIGJ5IG9uZVxuICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGMgPSBjb21wYXJlUGFyYW1zKHNpZ25hdHVyZTEucGFyYW1zW2ldLCBzaWduYXR1cmUyLnBhcmFtc1tpXSk7XG4gICAgICAgIGlmIChjICE9PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gY29tcGFyZSB0aGUgbnVtYmVyIG9mIHBhcmFtc1xuICAgICAgcmV0dXJuIHNpZ25hdHVyZTEucGFyYW1zLmxlbmd0aCAtIHNpZ25hdHVyZTIucGFyYW1zLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBHZXQgcGFyYW1zIGNvbnRhaW5pbmcgYWxsIHR5cGVzIHRoYXQgY2FuIGJlIGNvbnZlcnRlZCB0byB0aGUgZGVmaW5lZCB0eXBlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Q29udmVyc2lvbkRlZltdfSBjb252ZXJzaW9uc1xuICAgICAqIEBwYXJhbSB7c3RyaW5nW119IHR5cGVOYW1lc1xuICAgICAqIEByZXR1cm4ge0NvbnZlcnNpb25EZWZbXX0gUmV0dXJucyB0aGUgY29udmVyc2lvbnMgdGhhdCBhcmUgYXZhaWxhYmxlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICBmb3IgZXZlcnkgdHlwZSAoaWYgYW55KVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbHRlckNvbnZlcnNpb25zKGNvbnZlcnNpb25zLCB0eXBlTmFtZXMpIHtcbiAgICAgIHZhciBtYXRjaGVzID0ge307XG5cbiAgICAgIGNvbnZlcnNpb25zLmZvckVhY2goZnVuY3Rpb24gKGNvbnZlcnNpb24pIHtcbiAgICAgICAgaWYgKHR5cGVOYW1lcy5pbmRleE9mKGNvbnZlcnNpb24uZnJvbSkgPT09IC0xICYmXG4gICAgICAgICAgICB0eXBlTmFtZXMuaW5kZXhPZihjb252ZXJzaW9uLnRvKSAhPT0gLTEgJiZcbiAgICAgICAgICAgICFtYXRjaGVzW2NvbnZlcnNpb24uZnJvbV0pIHtcbiAgICAgICAgICBtYXRjaGVzW2NvbnZlcnNpb24uZnJvbV0gPSBjb252ZXJzaW9uO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKG1hdGNoZXMpLm1hcChmdW5jdGlvbiAoZnJvbSkge1xuICAgICAgICByZXR1cm4gbWF0Y2hlc1tmcm9tXTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByZXByb2Nlc3MgYXJndW1lbnRzIGJlZm9yZSBjYWxsaW5nIHRoZSBvcmlnaW5hbCBmdW5jdGlvbjpcbiAgICAgKiAtIGlmIG5lZWRlZCBjb252ZXJ0IHRoZSBwYXJhbWV0ZXJzXG4gICAgICogLSBpbiBjYXNlIG9mIHJlc3QgcGFyYW1ldGVycywgbW92ZSB0aGUgcmVzdCBwYXJhbWV0ZXJzIGludG8gYW4gQXJyYXlcbiAgICAgKiBAcGFyYW0ge1BhcmFtW119IHBhcmFtc1xuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IGZuXG4gICAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgYSB3cmFwcGVkIGZ1bmN0aW9uXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29tcGlsZUFyZ3NQcmVwcm9jZXNzaW5nKHBhcmFtcywgZm4pIHtcbiAgICAgIHZhciBmbkNvbnZlcnQgPSBmbjtcblxuICAgICAgLy8gVE9ETzogY2FuIHdlIG1ha2UgdGhpcyB3cmFwcGVyIGZ1bmN0aW9uIHNtYXJ0ZXIvc2ltcGxlcj9cblxuICAgICAgaWYgKHBhcmFtcy5zb21lKGhhc0NvbnZlcnNpb25zKSkge1xuICAgICAgICB2YXIgcmVzdFBhcmFtID0gaGFzUmVzdFBhcmFtKHBhcmFtcyk7XG4gICAgICAgIHZhciBjb21waWxlZENvbnZlcnNpb25zID0gcGFyYW1zLm1hcChjb21waWxlQXJnQ29udmVyc2lvbilcblxuICAgICAgICBmbkNvbnZlcnQgPSBmdW5jdGlvbiBjb252ZXJ0QXJncygpIHtcbiAgICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICAgIHZhciBsYXN0ID0gcmVzdFBhcmFtID8gYXJndW1lbnRzLmxlbmd0aCAtIDEgOiBhcmd1bWVudHMubGVuZ3RoO1xuICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGFzdDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2ldID0gY29tcGlsZWRDb252ZXJzaW9uc1tpXShhcmd1bWVudHNbaV0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocmVzdFBhcmFtKSB7XG4gICAgICAgICAgICBhcmdzW2xhc3RdID0gYXJndW1lbnRzW2xhc3RdLm1hcChjb21waWxlZENvbnZlcnNpb25zW2xhc3RdKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgYXJncyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdmFyIGZuUHJlcHJvY2VzcyA9IGZuQ29udmVydDtcbiAgICAgIGlmIChoYXNSZXN0UGFyYW0ocGFyYW1zKSkge1xuICAgICAgICB2YXIgb2Zmc2V0ID0gcGFyYW1zLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgZm5QcmVwcm9jZXNzID0gZnVuY3Rpb24gcHJlcHJvY2Vzc1Jlc3RQYXJhbXMgKCkge1xuICAgICAgICAgIHJldHVybiBmbkNvbnZlcnQuYXBwbHkobnVsbCxcbiAgICAgICAgICAgICAgc2xpY2UoYXJndW1lbnRzLCAwLCBvZmZzZXQpLmNvbmNhdChbc2xpY2UoYXJndW1lbnRzLCBvZmZzZXQpXSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmblByZXByb2Nlc3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29tcGlsZSBjb252ZXJzaW9uIGZvciBhIHBhcmFtZXRlciB0byB0aGUgcmlnaHQgdHlwZVxuICAgICAqIEBwYXJhbSB7UGFyYW19IHBhcmFtXG4gICAgICogQHJldHVybiB7ZnVuY3Rpb259IFJldHVybnMgdGhlIHdyYXBwZWQgZnVuY3Rpb24gdGhhdCB3aWxsIGNvbnZlcnQgYXJndW1lbnRzXG4gICAgICpcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBjb21waWxlQXJnQ29udmVyc2lvbihwYXJhbSkge1xuICAgICAgdmFyIHRlc3QwLCB0ZXN0MSwgY29udmVyc2lvbjAsIGNvbnZlcnNpb24xO1xuICAgICAgdmFyIHRlc3RzID0gW107XG4gICAgICB2YXIgY29udmVyc2lvbnMgPSBbXTtcblxuICAgICAgcGFyYW0udHlwZXMuZm9yRWFjaChmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICBpZiAodHlwZS5jb252ZXJzaW9uKSB7XG4gICAgICAgICAgdGVzdHMucHVzaChmaW5kVHlwZUJ5TmFtZSh0eXBlLmNvbnZlcnNpb24uZnJvbSkudGVzdCk7XG4gICAgICAgICAgY29udmVyc2lvbnMucHVzaCh0eXBlLmNvbnZlcnNpb24uY29udmVydCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBjcmVhdGUgb3B0aW1pemVkIGNvbnZlcnNpb24gZnVuY3Rpb25zIGRlcGVuZGluZyBvbiB0aGUgbnVtYmVyIG9mIGNvbnZlcnNpb25zXG4gICAgICBzd2l0Y2ggKGNvbnZlcnNpb25zLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbnZlcnRBcmcoYXJnKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgdGVzdDAgPSB0ZXN0c1swXVxuICAgICAgICAgIGNvbnZlcnNpb24wID0gY29udmVyc2lvbnNbMF07XG4gICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIGNvbnZlcnRBcmcoYXJnKSB7XG4gICAgICAgICAgICBpZiAodGVzdDAoYXJnKSkge1xuICAgICAgICAgICAgICByZXR1cm4gY29udmVyc2lvbjAoYXJnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHRlc3QwID0gdGVzdHNbMF1cbiAgICAgICAgICB0ZXN0MSA9IHRlc3RzWzFdXG4gICAgICAgICAgY29udmVyc2lvbjAgPSBjb252ZXJzaW9uc1swXTtcbiAgICAgICAgICBjb252ZXJzaW9uMSA9IGNvbnZlcnNpb25zWzFdO1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBjb252ZXJ0QXJnKGFyZykge1xuICAgICAgICAgICAgaWYgKHRlc3QwKGFyZykpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnNpb24wKGFyZylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0ZXN0MShhcmcpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBjb252ZXJzaW9uMShhcmcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiBjb252ZXJ0QXJnKGFyZykge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb252ZXJzaW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICBpZiAodGVzdHNbaV0oYXJnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb252ZXJzaW9uc1tpXShhcmcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb252ZXJ0IGFuIGFycmF5IHdpdGggc2lnbmF0dXJlcyBpbnRvIGEgbWFwIHdpdGggc2lnbmF0dXJlcyxcbiAgICAgKiB3aGVyZSBzaWduYXR1cmVzIHdpdGggdW5pb24gdHlwZXMgYXJlIHNwbGl0IGludG8gc2VwYXJhdGUgc2lnbmF0dXJlc1xuICAgICAqXG4gICAgICogVGhyb3dzIGFuIGVycm9yIHdoZW4gdGhlcmUgYXJlIGNvbmZsaWN0aW5nIHR5cGVzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1NpZ25hdHVyZVtdfSBzaWduYXR1cmVzXG4gICAgICogQHJldHVybiB7T2JqZWN0LjxzdHJpbmcsIGZ1bmN0aW9uPn0gIFJldHVybnMgYSBtYXAgd2l0aCBzaWduYXR1cmVzXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIGtleSBhbmQgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoaXMgc2lnbmF0dXJlIGFzIHZhbHVlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVNpZ25hdHVyZXNNYXAoc2lnbmF0dXJlcykge1xuICAgICAgdmFyIHNpZ25hdHVyZXNNYXAgPSB7fTtcbiAgICAgIHNpZ25hdHVyZXMuZm9yRWFjaChmdW5jdGlvbiAoc2lnbmF0dXJlKSB7XG4gICAgICAgIGlmICghc2lnbmF0dXJlLnBhcmFtcy5zb21lKGhhc0NvbnZlcnNpb25zKSkge1xuICAgICAgICAgIHNwbGl0UGFyYW1zKHNpZ25hdHVyZS5wYXJhbXMsIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICAgICAgc2lnbmF0dXJlc01hcFtzdHJpbmdpZnlQYXJhbXMocGFyYW1zKV0gPSBzaWduYXR1cmUuZm47XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gc2lnbmF0dXJlc01hcDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTcGxpdCBwYXJhbXMgd2l0aCB1bmlvbiB0eXBlcyBpbiB0byBzZXBhcmF0ZSBwYXJhbXMuXG4gICAgICpcbiAgICAgKiBGb3IgZXhhbXBsZTpcbiAgICAgKlxuICAgICAqICAgICBzcGxpdFBhcmFtcyhbWydBcnJheScsICdPYmplY3QnXSwgWydzdHJpbmcnLCAnUmVnRXhwJ10pXG4gICAgICogICAgIC8vIHJldHVybnM6XG4gICAgICogICAgIC8vIFtcbiAgICAgKiAgICAgLy8gICBbJ0FycmF5JywgJ3N0cmluZyddLFxuICAgICAqICAgICAvLyAgIFsnQXJyYXknLCAnUmVnRXhwJ10sXG4gICAgICogICAgIC8vICAgWydPYmplY3QnLCAnc3RyaW5nJ10sXG4gICAgICogICAgIC8vICAgWydPYmplY3QnLCAnUmVnRXhwJ11cbiAgICAgKiAgICAgLy8gXVxuICAgICAqXG4gICAgICogQHBhcmFtIHtQYXJhbVtdfSBwYXJhbXNcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlnbm9yZUNvbnZlcnNpb25UeXBlc1xuICAgICAqIEByZXR1cm4ge1BhcmFtW119XG4gICAgICovXG4gICAgZnVuY3Rpb24gc3BsaXRQYXJhbXMocGFyYW1zLCBpZ25vcmVDb252ZXJzaW9uVHlwZXMpIHtcbiAgICAgIGZ1bmN0aW9uIF9zcGxpdFBhcmFtcyhwYXJhbXMsIGluZGV4LCB0eXBlcykge1xuICAgICAgICBpZiAoaW5kZXggPCBwYXJhbXMubGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIHBhcmFtID0gcGFyYW1zW2luZGV4XVxuICAgICAgICAgIHZhciBmaWx0ZXJlZFR5cGVzID0gaWdub3JlQ29udmVyc2lvblR5cGVzXG4gICAgICAgICAgICAgID8gcGFyYW0udHlwZXMuZmlsdGVyKGlzRXhhY3RUeXBlKVxuICAgICAgICAgICAgICA6IHBhcmFtLnR5cGVzO1xuICAgICAgICAgIHZhciB0eXBlR3JvdXBzXG5cbiAgICAgICAgICBpZiAocGFyYW0ucmVzdFBhcmFtKSB7XG4gICAgICAgICAgICAvLyBzcGxpdCB0aGUgdHlwZXMgb2YgYSByZXN0IHBhcmFtZXRlciBpbiB0d286XG4gICAgICAgICAgICAvLyBvbmUgd2l0aCBvbmx5IGV4YWN0IHR5cGVzLCBhbmQgb25lIHdpdGggZXhhY3QgdHlwZXMgYW5kIGNvbnZlcnNpb25zXG4gICAgICAgICAgICB2YXIgZXhhY3RUeXBlcyA9IGZpbHRlcmVkVHlwZXMuZmlsdGVyKGlzRXhhY3RUeXBlKVxuICAgICAgICAgICAgdHlwZUdyb3VwcyA9IGV4YWN0VHlwZXMubGVuZ3RoIDwgZmlsdGVyZWRUeXBlcy5sZW5ndGhcbiAgICAgICAgICAgICAgICA/IFtleGFjdFR5cGVzLCBmaWx0ZXJlZFR5cGVzXVxuICAgICAgICAgICAgICAgIDogW2ZpbHRlcmVkVHlwZXNdXG5cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvLyBzcGxpdCBhbGwgdGhlIHR5cGVzIG9mIGEgcmVndWxhciBwYXJhbWV0ZXIgaW50byBvbmUgdHlwZSBwZXIgZ3JvdXBcbiAgICAgICAgICAgIHR5cGVHcm91cHMgPSBmaWx0ZXJlZFR5cGVzLm1hcChmdW5jdGlvbiAodHlwZSkge1xuICAgICAgICAgICAgICByZXR1cm4gW3R5cGVdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIHJlY3Vyc2Ugb3ZlciB0aGUgZ3JvdXBzIHdpdGggdHlwZXNcbiAgICAgICAgICByZXR1cm4gZmxhdE1hcCh0eXBlR3JvdXBzLCBmdW5jdGlvbiAodHlwZUdyb3VwKSB7XG4gICAgICAgICAgICByZXR1cm4gX3NwbGl0UGFyYW1zKHBhcmFtcywgaW5kZXggKyAxLCB0eXBlcy5jb25jYXQoW3R5cGVHcm91cF0pKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIC8vIHdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgcGFyYW1ldGVycy4gTm93IGJ1aWxkIGEgbmV3IFBhcmFtXG4gICAgICAgICAgdmFyIHNwbGl0dGVkUGFyYW1zID0gdHlwZXMubWFwKGZ1bmN0aW9uICh0eXBlLCB0eXBlSW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIHR5cGVzOiB0eXBlLFxuICAgICAgICAgICAgICByZXN0UGFyYW06ICh0eXBlSW5kZXggPT09IHBhcmFtcy5sZW5ndGggLSAxKSAmJiBoYXNSZXN0UGFyYW0ocGFyYW1zKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgcmV0dXJuIFtzcGxpdHRlZFBhcmFtc107XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF9zcGxpdFBhcmFtcyhwYXJhbXMsIDAsIFtdKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUZXN0IHdoZXRoZXIgdHdvIHNpZ25hdHVyZXMgaGF2ZSBhIGNvbmZsaWN0aW5nIHNpZ25hdHVyZVxuICAgICAqIEBwYXJhbSB7U2lnbmF0dXJlfSBzaWduYXR1cmUxXG4gICAgICogQHBhcmFtIHtTaWduYXR1cmV9IHNpZ25hdHVyZTJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBSZXR1cm5zIHRydWUgd2hlbiB0aGUgc2lnbmF0dXJlcyBjb25mbGljdCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGhhc0NvbmZsaWN0aW5nUGFyYW1zKHNpZ25hdHVyZTEsIHNpZ25hdHVyZTIpIHtcbiAgICAgIHZhciBpaSA9IE1hdGgubWF4KHNpZ25hdHVyZTEucGFyYW1zLmxlbmd0aCwgc2lnbmF0dXJlMi5wYXJhbXMubGVuZ3RoKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpaTsgaSsrKSB7XG4gICAgICAgIHZhciB0eXBlc05hbWVzMSA9IGdldEV4cGVjdGVkVHlwZU5hbWVzKHNpZ25hdHVyZTEsIGksIHRydWUpO1xuICAgICAgICB2YXIgdHlwZXNOYW1lczIgPSBnZXRFeHBlY3RlZFR5cGVOYW1lcyhzaWduYXR1cmUyLCBpLCB0cnVlKTtcblxuICAgICAgICBpZiAoIWhhc092ZXJsYXAodHlwZXNOYW1lczEsIHR5cGVzTmFtZXMyKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgbGVuMSA9IHNpZ25hdHVyZTEucGFyYW1zLmxlbmd0aDtcbiAgICAgIHZhciBsZW4yID0gc2lnbmF0dXJlMi5wYXJhbXMubGVuZ3RoO1xuICAgICAgdmFyIHJlc3RQYXJhbTEgPSBoYXNSZXN0UGFyYW0oc2lnbmF0dXJlMS5wYXJhbXMpO1xuICAgICAgdmFyIHJlc3RQYXJhbTIgPSBoYXNSZXN0UGFyYW0oc2lnbmF0dXJlMi5wYXJhbXMpO1xuXG4gICAgICByZXR1cm4gcmVzdFBhcmFtMVxuICAgICAgICAgID8gcmVzdFBhcmFtMiA/IChsZW4xID09PSBsZW4yKSA6IChsZW4yID49IGxlbjEpXG4gICAgICAgICAgOiByZXN0UGFyYW0yID8gKGxlbjEgPj0gbGVuMikgIDogKGxlbjEgPT09IGxlbjIpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgdHlwZWQgZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSAgICAgICAgICAgICAgIFRoZSBuYW1lIGZvciB0aGUgdHlwZWQgZnVuY3Rpb25cbiAgICAgKiBAcGFyYW0ge09iamVjdC48c3RyaW5nLCBmdW5jdGlvbj59IHNpZ25hdHVyZXNNYXBcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuIG9iamVjdCB3aXRoIG9uZSBvclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGUgc2lnbmF0dXJlcyBhcyBrZXksIGFuZCB0aGVcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUgYXMgdmFsdWUuXG4gICAgICogQHJldHVybiB7ZnVuY3Rpb259ICBSZXR1cm5zIHRoZSBjcmVhdGVkIHR5cGVkIGZ1bmN0aW9uLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGNyZWF0ZVR5cGVkRnVuY3Rpb24obmFtZSwgc2lnbmF0dXJlc01hcCkge1xuICAgICAgaWYgKE9iamVjdC5rZXlzKHNpZ25hdHVyZXNNYXApLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ05vIHNpZ25hdHVyZXMgcHJvdmlkZWQnKTtcbiAgICAgIH1cblxuICAgICAgLy8gcGFyc2UgdGhlIHNpZ25hdHVyZXMsIGFuZCBjaGVjayBmb3IgY29uZmxpY3RzXG4gICAgICB2YXIgcGFyc2VkU2lnbmF0dXJlcyA9IFtdO1xuICAgICAgT2JqZWN0LmtleXMoc2lnbmF0dXJlc01hcClcbiAgICAgICAgICAubWFwKGZ1bmN0aW9uIChzaWduYXR1cmUpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZVNpZ25hdHVyZShzaWduYXR1cmUsIHNpZ25hdHVyZXNNYXBbc2lnbmF0dXJlXSwgdHlwZWQuY29udmVyc2lvbnMpO1xuICAgICAgICAgIH0pXG4gICAgICAgICAgLmZpbHRlcihub3ROdWxsKVxuICAgICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uIChwYXJzZWRTaWduYXR1cmUpIHtcbiAgICAgICAgICAgIC8vIGNoZWNrIHdoZXRoZXIgdGhpcyBwYXJhbWV0ZXIgY29uZmxpY3RzIHdpdGggYWxyZWFkeSBwYXJzZWQgc2lnbmF0dXJlc1xuICAgICAgICAgICAgdmFyIGNvbmZsaWN0aW5nU2lnbmF0dXJlID0gZmluZEluQXJyYXkocGFyc2VkU2lnbmF0dXJlcywgZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhc0NvbmZsaWN0aW5nUGFyYW1zKHMsIHBhcnNlZFNpZ25hdHVyZSlcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGNvbmZsaWN0aW5nU2lnbmF0dXJlKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvbmZsaWN0aW5nIHNpZ25hdHVyZXMgXCInICtcbiAgICAgICAgICAgICAgICAgIHN0cmluZ2lmeVBhcmFtcyhjb25mbGljdGluZ1NpZ25hdHVyZS5wYXJhbXMpICsgJ1wiIGFuZCBcIicgK1xuICAgICAgICAgICAgICAgICAgc3RyaW5naWZ5UGFyYW1zKHBhcnNlZFNpZ25hdHVyZS5wYXJhbXMpICsgJ1wiLicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwYXJzZWRTaWduYXR1cmVzLnB1c2gocGFyc2VkU2lnbmF0dXJlKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgLy8gc3BsaXQgYW5kIGZpbHRlciB0aGUgdHlwZXMgb2YgdGhlIHNpZ25hdHVyZXMsIGFuZCB0aGVuIG9yZGVyIHRoZW1cbiAgICAgIHZhciBzaWduYXR1cmVzID0gZmxhdE1hcChwYXJzZWRTaWduYXR1cmVzLCBmdW5jdGlvbiAocGFyc2VkU2lnbmF0dXJlKSB7XG4gICAgICAgIHZhciBwYXJhbXMgPSBwYXJzZWRTaWduYXR1cmUgPyBzcGxpdFBhcmFtcyhwYXJzZWRTaWduYXR1cmUucGFyYW1zLCBmYWxzZSkgOiBbXVxuXG4gICAgICAgIHJldHVybiBwYXJhbXMubWFwKGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICAgICAgICBmbjogcGFyc2VkU2lnbmF0dXJlLmZuXG4gICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICB9KS5maWx0ZXIobm90TnVsbCk7XG5cbiAgICAgIHNpZ25hdHVyZXMuc29ydChjb21wYXJlU2lnbmF0dXJlcyk7XG5cbiAgICAgIC8vIHdlIGNyZWF0ZSBhIGhpZ2hseSBvcHRpbWl6ZWQgY2hlY2tzIGZvciB0aGUgZmlyc3QgY291cGxlIG9mIHNpZ25hdHVyZXMgd2l0aCBtYXggMiBhcmd1bWVudHNcbiAgICAgIHZhciBvazAgPSBzaWduYXR1cmVzWzBdICYmIHNpZ25hdHVyZXNbMF0ucGFyYW1zLmxlbmd0aCA8PSAyICYmICFoYXNSZXN0UGFyYW0oc2lnbmF0dXJlc1swXS5wYXJhbXMpO1xuICAgICAgdmFyIG9rMSA9IHNpZ25hdHVyZXNbMV0gJiYgc2lnbmF0dXJlc1sxXS5wYXJhbXMubGVuZ3RoIDw9IDIgJiYgIWhhc1Jlc3RQYXJhbShzaWduYXR1cmVzWzFdLnBhcmFtcyk7XG4gICAgICB2YXIgb2syID0gc2lnbmF0dXJlc1syXSAmJiBzaWduYXR1cmVzWzJdLnBhcmFtcy5sZW5ndGggPD0gMiAmJiAhaGFzUmVzdFBhcmFtKHNpZ25hdHVyZXNbMl0ucGFyYW1zKTtcbiAgICAgIHZhciBvazMgPSBzaWduYXR1cmVzWzNdICYmIHNpZ25hdHVyZXNbM10ucGFyYW1zLmxlbmd0aCA8PSAyICYmICFoYXNSZXN0UGFyYW0oc2lnbmF0dXJlc1szXS5wYXJhbXMpO1xuICAgICAgdmFyIG9rNCA9IHNpZ25hdHVyZXNbNF0gJiYgc2lnbmF0dXJlc1s0XS5wYXJhbXMubGVuZ3RoIDw9IDIgJiYgIWhhc1Jlc3RQYXJhbShzaWduYXR1cmVzWzRdLnBhcmFtcyk7XG4gICAgICB2YXIgb2s1ID0gc2lnbmF0dXJlc1s1XSAmJiBzaWduYXR1cmVzWzVdLnBhcmFtcy5sZW5ndGggPD0gMiAmJiAhaGFzUmVzdFBhcmFtKHNpZ25hdHVyZXNbNV0ucGFyYW1zKTtcbiAgICAgIHZhciBhbGxPayA9IG9rMCAmJiBvazEgJiYgb2syICYmIG9rMyAmJiBvazQgJiYgb2s1O1xuXG4gICAgICAvLyBjb21waWxlIHRoZSB0ZXN0c1xuICAgICAgdmFyIHRlc3RzID0gc2lnbmF0dXJlcy5tYXAoZnVuY3Rpb24gKHNpZ25hdHVyZSkge1xuICAgICAgICByZXR1cm4gY29tcGlsZVRlc3RzKHNpZ25hdHVyZS5wYXJhbXMpO1xuICAgICAgfSk7XG5cbiAgICAgIHZhciB0ZXN0MDAgPSBvazAgPyBjb21waWxlVGVzdChzaWduYXR1cmVzWzBdLnBhcmFtc1swXSkgOiBub3RPaztcbiAgICAgIHZhciB0ZXN0MTAgPSBvazEgPyBjb21waWxlVGVzdChzaWduYXR1cmVzWzFdLnBhcmFtc1swXSkgOiBub3RPaztcbiAgICAgIHZhciB0ZXN0MjAgPSBvazIgPyBjb21waWxlVGVzdChzaWduYXR1cmVzWzJdLnBhcmFtc1swXSkgOiBub3RPaztcbiAgICAgIHZhciB0ZXN0MzAgPSBvazMgPyBjb21waWxlVGVzdChzaWduYXR1cmVzWzNdLnBhcmFtc1swXSkgOiBub3RPaztcbiAgICAgIHZhciB0ZXN0NDAgPSBvazQgPyBjb21waWxlVGVzdChzaWduYXR1cmVzWzRdLnBhcmFtc1swXSkgOiBub3RPaztcbiAgICAgIHZhciB0ZXN0NTAgPSBvazUgPyBjb21waWxlVGVzdChzaWduYXR1cmVzWzVdLnBhcmFtc1swXSkgOiBub3RPaztcblxuICAgICAgdmFyIHRlc3QwMSA9IG9rMCA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbMF0ucGFyYW1zWzFdKSA6IG5vdE9rO1xuICAgICAgdmFyIHRlc3QxMSA9IG9rMSA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbMV0ucGFyYW1zWzFdKSA6IG5vdE9rO1xuICAgICAgdmFyIHRlc3QyMSA9IG9rMiA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbMl0ucGFyYW1zWzFdKSA6IG5vdE9rO1xuICAgICAgdmFyIHRlc3QzMSA9IG9rMyA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbM10ucGFyYW1zWzFdKSA6IG5vdE9rO1xuICAgICAgdmFyIHRlc3Q0MSA9IG9rNCA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbNF0ucGFyYW1zWzFdKSA6IG5vdE9rO1xuICAgICAgdmFyIHRlc3Q1MSA9IG9rNSA/IGNvbXBpbGVUZXN0KHNpZ25hdHVyZXNbNV0ucGFyYW1zWzFdKSA6IG5vdE9rO1xuXG4gICAgICAvLyBjb21waWxlIHRoZSBmdW5jdGlvbnNcbiAgICAgIHZhciBmbnMgPSBzaWduYXR1cmVzLm1hcChmdW5jdGlvbihzaWduYXR1cmUpIHtcbiAgICAgICAgcmV0dXJuIGNvbXBpbGVBcmdzUHJlcHJvY2Vzc2luZyhzaWduYXR1cmUucGFyYW1zLCBzaWduYXR1cmUuZm4pXG4gICAgICB9KTtcblxuICAgICAgdmFyIGZuMCA9IG9rMCA/IGZuc1swXSA6IHVuZGVmO1xuICAgICAgdmFyIGZuMSA9IG9rMSA/IGZuc1sxXSA6IHVuZGVmO1xuICAgICAgdmFyIGZuMiA9IG9rMiA/IGZuc1syXSA6IHVuZGVmO1xuICAgICAgdmFyIGZuMyA9IG9rMyA/IGZuc1szXSA6IHVuZGVmO1xuICAgICAgdmFyIGZuNCA9IG9rNCA/IGZuc1s0XSA6IHVuZGVmO1xuICAgICAgdmFyIGZuNSA9IG9rNSA/IGZuc1s1XSA6IHVuZGVmO1xuXG4gICAgICB2YXIgbGVuMCA9IG9rMCA/IHNpZ25hdHVyZXNbMF0ucGFyYW1zLmxlbmd0aCA6IC0xO1xuICAgICAgdmFyIGxlbjEgPSBvazEgPyBzaWduYXR1cmVzWzFdLnBhcmFtcy5sZW5ndGggOiAtMTtcbiAgICAgIHZhciBsZW4yID0gb2syID8gc2lnbmF0dXJlc1syXS5wYXJhbXMubGVuZ3RoIDogLTE7XG4gICAgICB2YXIgbGVuMyA9IG9rMyA/IHNpZ25hdHVyZXNbM10ucGFyYW1zLmxlbmd0aCA6IC0xO1xuICAgICAgdmFyIGxlbjQgPSBvazQgPyBzaWduYXR1cmVzWzRdLnBhcmFtcy5sZW5ndGggOiAtMTtcbiAgICAgIHZhciBsZW41ID0gb2s1ID8gc2lnbmF0dXJlc1s1XS5wYXJhbXMubGVuZ3RoIDogLTE7XG5cbiAgICAgIC8vIHNpbXBsZSBhbmQgZ2VuZXJpYywgYnV0IGFsc28gc2xvd1xuICAgICAgdmFyIGlTdGFydCA9IGFsbE9rID8gNiA6IDA7XG4gICAgICB2YXIgaUVuZCA9IHNpZ25hdHVyZXMubGVuZ3RoO1xuICAgICAgdmFyIGdlbmVyaWMgPSBmdW5jdGlvbiBnZW5lcmljKCkge1xuICAgICAgICAndXNlIHN0cmljdCc7XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IGlTdGFydDsgaSA8IGlFbmQ7IGkrKykge1xuICAgICAgICAgIGlmICh0ZXN0c1tpXShhcmd1bWVudHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gZm5zW2ldLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgY3JlYXRlRXJyb3IobmFtZSwgYXJndW1lbnRzLCBzaWduYXR1cmVzKTtcbiAgICAgIH1cblxuICAgICAgLy8gY3JlYXRlIHRoZSB0eXBlZCBmdW5jdGlvblxuICAgICAgLy8gZmFzdCwgc3BlY2lhbGl6ZWQgdmVyc2lvbi4gRmFsbHMgYmFjayB0byB0aGUgc2xvd2VyLCBnZW5lcmljIG9uZSBpZiBuZWVkZWRcbiAgICAgIHZhciBmbiA9IGZ1bmN0aW9uIGZuKGFyZzAsIGFyZzEpIHtcbiAgICAgICAgJ3VzZSBzdHJpY3QnO1xuXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSBsZW4wICYmIHRlc3QwMChhcmcwKSAmJiB0ZXN0MDEoYXJnMSkpIHsgcmV0dXJuIGZuMC5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSBsZW4xICYmIHRlc3QxMChhcmcwKSAmJiB0ZXN0MTEoYXJnMSkpIHsgcmV0dXJuIGZuMS5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSBsZW4yICYmIHRlc3QyMChhcmcwKSAmJiB0ZXN0MjEoYXJnMSkpIHsgcmV0dXJuIGZuMi5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSBsZW4zICYmIHRlc3QzMChhcmcwKSAmJiB0ZXN0MzEoYXJnMSkpIHsgcmV0dXJuIGZuMy5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSBsZW40ICYmIHRlc3Q0MChhcmcwKSAmJiB0ZXN0NDEoYXJnMSkpIHsgcmV0dXJuIGZuNC5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSBsZW41ICYmIHRlc3Q1MChhcmcwKSAmJiB0ZXN0NTEoYXJnMSkpIHsgcmV0dXJuIGZuNS5hcHBseShudWxsLCBhcmd1bWVudHMpOyB9XG5cbiAgICAgICAgcmV0dXJuIGdlbmVyaWMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgLy8gYXR0YWNoIG5hbWUgdGhlIHR5cGVkIGZ1bmN0aW9uXG4gICAgICB0cnkge1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICduYW1lJywge3ZhbHVlOiBuYW1lfSk7XG4gICAgICB9XG4gICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8vIG9sZCBicm93c2VycyBkbyBub3Qgc3VwcG9ydCBPYmplY3QuZGVmaW5lUHJvcGVydHkgYW5kIHNvbWUgZG9uJ3Qgc3VwcG9ydCBzZXR0aW5nIHRoZSBuYW1lIHByb3BlcnR5XG4gICAgICAgIC8vIHRoZSBmdW5jdGlvbiBuYW1lIGlzIG5vdCBlc3NlbnRpYWwgZm9yIHRoZSBmdW5jdGlvbmluZywgaXQncyBtb3N0bHkgdXNlZnVsIGZvciBkZWJ1Z2dpbmcsXG4gICAgICAgIC8vIHNvIGl0J3MgZmluZSB0byBoYXZlIHVubmFtZWQgZnVuY3Rpb25zLlxuICAgICAgfVxuXG4gICAgICAvLyBhdHRhY2ggc2lnbmF0dXJlcyB0byB0aGUgZnVuY3Rpb25cbiAgICAgIGZuLnNpZ25hdHVyZXMgPSBjcmVhdGVTaWduYXR1cmVzTWFwKHNpZ25hdHVyZXMpO1xuXG4gICAgICByZXR1cm4gZm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGVzdCB3aGV0aGVyIGEgdHlwZSBzaG91bGQgYmUgTk9UIGJlIGlnbm9yZWRcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZU5hbWVcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIG5vdElnbm9yZSh0eXBlTmFtZSkge1xuICAgICAgcmV0dXJuIHR5cGVkLmlnbm9yZS5pbmRleE9mKHR5cGVOYW1lKSA9PT0gLTE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogdHJpbSBhIHN0cmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJpbShzdHIpIHtcbiAgICAgIHJldHVybiBzdHIudHJpbSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRlc3Qgd2hldGhlciBhIHN0cmluZyBpcyBub3QgZW1wdHlcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBub3RFbXB0eShzdHIpIHtcbiAgICAgIHJldHVybiAhIXN0cjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiB0ZXN0IHdoZXRoZXIgYSB2YWx1ZSBpcyBub3Qgc3RyaWN0IGVxdWFsIHRvIG51bGxcbiAgICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBub3ROdWxsKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUgIT09IG51bGw7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGVzdCB3aGV0aGVyIGEgcGFyYW1ldGVyIGhhcyBubyB0eXBlcyBkZWZpbmVkXG4gICAgICogQHBhcmFtIHtQYXJhbX0gcGFyYW1cbiAgICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzSW52YWxpZFBhcmFtIChwYXJhbSkge1xuICAgICAgcmV0dXJuIHBhcmFtLnR5cGVzLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYWxsIGJ1dCB0aGUgbGFzdCBpdGVtcyBvZiBhbiBhcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFyclxuICAgICAqIEByZXR1cm4ge0FycmF5fVxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGluaXRpYWwoYXJyKSB7XG4gICAgICByZXR1cm4gYXJyLnNsaWNlKDAsIGFyci5sZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm4gdGhlIGxhc3QgaXRlbSBvZiBhbiBhcnJheVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFyclxuICAgICAqIEByZXR1cm4geyp9XG4gICAgICovXG4gICAgZnVuY3Rpb24gbGFzdChhcnIpIHtcbiAgICAgIHJldHVybiBhcnJbYXJyLmxlbmd0aCAtIDFdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNsaWNlIGFuIGFycmF5IG9yIGZ1bmN0aW9uIEFyZ3VtZW50c1xuICAgICAqIEBwYXJhbSB7QXJyYXkgfCBBcmd1bWVudHMgfCBJQXJndW1lbnRzfSBhcnJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gW2VuZF1cbiAgICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzbGljZShhcnIsIHN0YXJ0LCBlbmQpIHtcbiAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIsIHN0YXJ0LCBlbmQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRlc3Qgd2hldGhlciBhbiBhcnJheSBjb250YWlucyBzb21lIGl0ZW1cbiAgICAgKiBAcGFyYW0ge0FycmF5fSBhcnJheVxuICAgICAqIEBwYXJhbSB7Kn0gaXRlbVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiBhcnJheSBjb250YWlucyBpdGVtLCBmYWxzZSBpZiBub3QuXG4gICAgICovXG4gICAgZnVuY3Rpb24gY29udGFpbnMoYXJyYXksIGl0ZW0pIHtcbiAgICAgIHJldHVybiBhcnJheS5pbmRleE9mKGl0ZW0pICE9PSAtMTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUZXN0IHdoZXRoZXIgdHdvIGFycmF5cyBoYXZlIG92ZXJsYXBwaW5nIGl0ZW1zXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkxXG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyYXkyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIHdoZW4gYXQgbGVhc3Qgb25lIGl0ZW0gZXhpc3RzIGluIGJvdGggYXJyYXlzXG4gICAgICovXG4gICAgZnVuY3Rpb24gaGFzT3ZlcmxhcChhcnJheTEsIGFycmF5Mikge1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnJheTEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGNvbnRhaW5zKGFycmF5MiwgYXJyYXkxW2ldKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm4gdGhlIGZpcnN0IGl0ZW0gZnJvbSBhbiBhcnJheSBmb3Igd2hpY2ggdGVzdChhcnJbaV0pIHJldHVybnMgdHJ1ZVxuICAgICAqIEBwYXJhbSB7QXJyYXl9IGFyclxuICAgICAqIEBwYXJhbSB7ZnVuY3Rpb259IHRlc3RcbiAgICAgKiBAcmV0dXJuIHsqIHwgdW5kZWZpbmVkfSBSZXR1cm5zIHRoZSBmaXJzdCBtYXRjaGluZyBpdGVtXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgb3IgdW5kZWZpbmVkIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmaW5kSW5BcnJheShhcnIsIHRlc3QpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0ZXN0KGFycltpXSkpIHtcbiAgICAgICAgICByZXR1cm4gYXJyW2ldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbHRlciB1bmlxdWUgaXRlbXMgb2YgYW4gYXJyYXkgd2l0aCBzdHJpbmdzXG4gICAgICogQHBhcmFtIHtzdHJpbmdbXX0gYXJyXG4gICAgICogQHJldHVybiB7c3RyaW5nW119XG4gICAgICovXG4gICAgZnVuY3Rpb24gdW5pcShhcnIpIHtcbiAgICAgIHZhciBlbnRyaWVzID0ge31cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGVudHJpZXNbYXJyW2ldXSA9IHRydWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMoZW50cmllcyk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRmxhdCBtYXAgdGhlIHJlc3VsdCBpbnZva2luZyBhIGNhbGxiYWNrIGZvciBldmVyeSBpdGVtIGluIGFuIGFycmF5LlxuICAgICAqIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL3NhbWdpbGVzLzc2MmVlMzM3ZGZmNDg2MjNlNzI5XG4gICAgICogQHBhcmFtIHtBcnJheX0gYXJyXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAgICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBmbGF0TWFwKGFyciwgY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLCBhcnIubWFwKGNhbGxiYWNrKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0cmlldmUgdGhlIGZ1bmN0aW9uIG5hbWUgZnJvbSBhIHNldCBvZiB0eXBlZCBmdW5jdGlvbnMsXG4gICAgICogYW5kIGNoZWNrIHdoZXRoZXIgdGhlIG5hbWUgb2YgYWxsIGZ1bmN0aW9ucyBtYXRjaCAoaWYgZ2l2ZW4pXG4gICAgICogQHBhcmFtIHtmdW5jdGlvbltdfSBmbnNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXROYW1lIChmbnMpIHtcbiAgICAgIHZhciBuYW1lID0gJyc7XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBmbiA9IGZuc1tpXTtcblxuICAgICAgICAvLyBjaGVjayB3aGV0aGVyIHRoZSBuYW1lcyBhcmUgdGhlIHNhbWUgd2hlbiBkZWZpbmVkXG4gICAgICAgIGlmICgodHlwZW9mIGZuLnNpZ25hdHVyZXMgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBmbi5zaWduYXR1cmUgPT09ICdzdHJpbmcnKSAmJiBmbi5uYW1lICE9PSAnJykge1xuICAgICAgICAgIGlmIChuYW1lID09PSAnJykge1xuICAgICAgICAgICAgbmFtZSA9IGZuLm5hbWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKG5hbWUgIT09IGZuLm5hbWUpIHtcbiAgICAgICAgICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoJ0Z1bmN0aW9uIG5hbWVzIGRvIG5vdCBtYXRjaCAoZXhwZWN0ZWQ6ICcgKyBuYW1lICsgJywgYWN0dWFsOiAnICsgZm4ubmFtZSArICcpJyk7XG4gICAgICAgICAgICBlcnIuZGF0YSA9IHtcbiAgICAgICAgICAgICAgYWN0dWFsOiBmbi5uYW1lLFxuICAgICAgICAgICAgICBleHBlY3RlZDogbmFtZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG5hbWU7XG4gICAgfVxuXG4gICAgLy8gZXh0cmFjdCBhbmQgbWVyZ2UgYWxsIHNpZ25hdHVyZXMgb2YgYSBsaXN0IHdpdGggdHlwZWQgZnVuY3Rpb25zXG4gICAgZnVuY3Rpb24gZXh0cmFjdFNpZ25hdHVyZXMoZm5zKSB7XG4gICAgICB2YXIgZXJyO1xuICAgICAgdmFyIHNpZ25hdHVyZXNNYXAgPSB7fTtcblxuICAgICAgZnVuY3Rpb24gdmFsaWRhdGVVbmlxdWUoX3NpZ25hdHVyZSwgX2ZuKSB7XG4gICAgICAgIGlmIChzaWduYXR1cmVzTWFwLmhhc093blByb3BlcnR5KF9zaWduYXR1cmUpICYmIF9mbiAhPT0gc2lnbmF0dXJlc01hcFtfc2lnbmF0dXJlXSkge1xuICAgICAgICAgIGVyciA9IG5ldyBFcnJvcignU2lnbmF0dXJlIFwiJyArIF9zaWduYXR1cmUgKyAnXCIgaXMgZGVmaW5lZCB0d2ljZScpO1xuICAgICAgICAgIGVyci5kYXRhID0ge3NpZ25hdHVyZTogX3NpZ25hdHVyZX07XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgIC8vIGVsc2U6IGJvdGggc2lnbmF0dXJlcyBwb2ludCB0byB0aGUgc2FtZSBmdW5jdGlvbiwgdGhhdCdzIGZpbmVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZucy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZm4gPSBmbnNbaV07XG5cbiAgICAgICAgLy8gdGVzdCB3aGV0aGVyIHRoaXMgaXMgYSB0eXBlZC1mdW5jdGlvblxuICAgICAgICBpZiAodHlwZW9mIGZuLnNpZ25hdHVyZXMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgLy8gbWVyZ2UgdGhlIHNpZ25hdHVyZXNcbiAgICAgICAgICBmb3IgKHZhciBzaWduYXR1cmUgaW4gZm4uc2lnbmF0dXJlcykge1xuICAgICAgICAgICAgaWYgKGZuLnNpZ25hdHVyZXMuaGFzT3duUHJvcGVydHkoc2lnbmF0dXJlKSkge1xuICAgICAgICAgICAgICB2YWxpZGF0ZVVuaXF1ZShzaWduYXR1cmUsIGZuLnNpZ25hdHVyZXNbc2lnbmF0dXJlXSk7XG4gICAgICAgICAgICAgIHNpZ25hdHVyZXNNYXBbc2lnbmF0dXJlXSA9IGZuLnNpZ25hdHVyZXNbc2lnbmF0dXJlXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGZuLnNpZ25hdHVyZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICB2YWxpZGF0ZVVuaXF1ZShmbi5zaWduYXR1cmUsIGZuKTtcbiAgICAgICAgICBzaWduYXR1cmVzTWFwW2ZuLnNpZ25hdHVyZV0gPSBmbjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBlcnIgPSBuZXcgVHlwZUVycm9yKCdGdW5jdGlvbiBpcyBubyB0eXBlZC1mdW5jdGlvbiAoaW5kZXg6ICcgKyBpICsgJyknKTtcbiAgICAgICAgICBlcnIuZGF0YSA9IHtpbmRleDogaX07XG4gICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzaWduYXR1cmVzTWFwO1xuICAgIH1cblxuICAgIHR5cGVkID0gY3JlYXRlVHlwZWRGdW5jdGlvbigndHlwZWQnLCB7XG4gICAgICAnc3RyaW5nLCBPYmplY3QnOiBjcmVhdGVUeXBlZEZ1bmN0aW9uLFxuICAgICAgJ09iamVjdCc6IGZ1bmN0aW9uIChzaWduYXR1cmVzTWFwKSB7XG4gICAgICAgIC8vIGZpbmQgZXhpc3RpbmcgbmFtZVxuICAgICAgICB2YXIgZm5zID0gW107XG4gICAgICAgIGZvciAodmFyIHNpZ25hdHVyZSBpbiBzaWduYXR1cmVzTWFwKSB7XG4gICAgICAgICAgaWYgKHNpZ25hdHVyZXNNYXAuaGFzT3duUHJvcGVydHkoc2lnbmF0dXJlKSkge1xuICAgICAgICAgICAgZm5zLnB1c2goc2lnbmF0dXJlc01hcFtzaWduYXR1cmVdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIG5hbWUgPSBnZXROYW1lKGZucyk7XG4gICAgICAgIHJldHVybiBjcmVhdGVUeXBlZEZ1bmN0aW9uKG5hbWUsIHNpZ25hdHVyZXNNYXApO1xuICAgICAgfSxcbiAgICAgICcuLi5GdW5jdGlvbic6IGZ1bmN0aW9uIChmbnMpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVkRnVuY3Rpb24oZ2V0TmFtZShmbnMpLCBleHRyYWN0U2lnbmF0dXJlcyhmbnMpKTtcbiAgICAgIH0sXG4gICAgICAnc3RyaW5nLCAuLi5GdW5jdGlvbic6IGZ1bmN0aW9uIChuYW1lLCBmbnMpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVR5cGVkRnVuY3Rpb24obmFtZSwgZXh0cmFjdFNpZ25hdHVyZXMoZm5zKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0eXBlZC5jcmVhdGUgPSBjcmVhdGU7XG4gICAgdHlwZWQudHlwZXMgPSBfdHlwZXM7XG4gICAgdHlwZWQuY29udmVyc2lvbnMgPSBfY29udmVyc2lvbnM7XG4gICAgdHlwZWQuaWdub3JlID0gX2lnbm9yZTtcbiAgICB0eXBlZC5jb252ZXJ0ID0gY29udmVydDtcbiAgICB0eXBlZC5maW5kID0gZmluZDtcblxuICAgIC8qKlxuICAgICAqIGFkZCBhIHR5cGVcbiAgICAgKiBAcGFyYW0ge3tuYW1lOiBzdHJpbmcsIHRlc3Q6IGZ1bmN0aW9ufX0gdHlwZVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2JlZm9yZU9iamVjdFRlc3Q9dHJ1ZV1cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgSWYgdHJ1ZSwgdGhlIG5ldyB0ZXN0IHdpbGwgYmUgaW5zZXJ0ZWQgYmVmb3JlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB0ZXN0IHdpdGggbmFtZSAnT2JqZWN0JyAoaWYgYW55KSwgc2luY2VcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdHMgZm9yIE9iamVjdCBtYXRjaCBBcnJheSBhbmQgY2xhc3NlcyB0b28uXG4gICAgICovXG4gICAgdHlwZWQuYWRkVHlwZSA9IGZ1bmN0aW9uICh0eXBlLCBiZWZvcmVPYmplY3RUZXN0KSB7XG4gICAgICBpZiAoIXR5cGUgfHwgdHlwZW9mIHR5cGUubmFtZSAhPT0gJ3N0cmluZycgfHwgdHlwZW9mIHR5cGUudGVzdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIHtuYW1lOiBzdHJpbmcsIHRlc3Q6IGZ1bmN0aW9ufSBleHBlY3RlZCcpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYmVmb3JlT2JqZWN0VGVzdCAhPT0gZmFsc2UpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0eXBlZC50eXBlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGlmICh0eXBlZC50eXBlc1tpXS5uYW1lID09PSAnT2JqZWN0Jykge1xuICAgICAgICAgICAgdHlwZWQudHlwZXMuc3BsaWNlKGksIDAsIHR5cGUpO1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHR5cGVkLnR5cGVzLnB1c2godHlwZSk7XG4gICAgfTtcblxuICAgIC8vIGFkZCBhIGNvbnZlcnNpb25cbiAgICB0eXBlZC5hZGRDb252ZXJzaW9uID0gZnVuY3Rpb24gKGNvbnZlcnNpb24pIHtcbiAgICAgIGlmICghY29udmVyc2lvblxuICAgICAgICAgIHx8IHR5cGVvZiBjb252ZXJzaW9uLmZyb20gIT09ICdzdHJpbmcnXG4gICAgICAgICAgfHwgdHlwZW9mIGNvbnZlcnNpb24udG8gIT09ICdzdHJpbmcnXG4gICAgICAgICAgfHwgdHlwZW9mIGNvbnZlcnNpb24uY29udmVydCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIHtmcm9tOiBzdHJpbmcsIHRvOiBzdHJpbmcsIGNvbnZlcnQ6IGZ1bmN0aW9ufSBleHBlY3RlZCcpO1xuICAgICAgfVxuXG4gICAgICB0eXBlZC5jb252ZXJzaW9ucy5wdXNoKGNvbnZlcnNpb24pO1xuICAgIH07XG5cbiAgICByZXR1cm4gdHlwZWQ7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlKCk7XG59KSk7Il19 diff --git a/dist/quantum-circuit.min.js b/dist/quantum-circuit.min.js index 9fa699a..208b35d 100644 --- a/dist/quantum-circuit.min.js +++ b/dist/quantum-circuit.min.js @@ -1 +1 @@ -!function(f){"object"==typeof exports&&"undefined"!=typeof module?module.exports=f():"function"==typeof define&&define.amd?define([],f):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).QuantumCircuit=f()}(function(){return function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){return o(e[i][1][r]||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i\x03\x02\x02","\x02\xca\xcb\x07g\x02\x02\xcb\xcc\x07z\x02\x02","\xcc\xcd\x07r\x02\x02\xcd@\x03\x02\x02\x02\xce","\xcf\x07n\x02\x02\xcf\xd0\x07p\x02\x02\xd0B\x03","\x02\x02\x02\xd1\xd2\x07u\x02\x02\xd2\xd3\x07","s\x02\x02\xd3\xd4\x07t\x02\x02\xd4\xd5\x07v\x02","\x02\xd5D\x03\x02\x02\x02\xd6\xd7\x07r\x02\x02","\xd7\xd8\x07k\x02\x02\xd8F\x03\x02\x02\x02\xd9","\xda\x05I%\x02\xda\xdb\x05K&\x02\xdb\xe1\x03\x02","\x02\x02\xdc\xdd\x05M'\x02\xdd\xde\x05K&\x02\xde","\xe1\x03\x02\x02\x02\xdf\xe1\x05I%\x02\xe0\xd9","\x03\x02\x02\x02\xe0\xdc\x03\x02\x02\x02\xe0\xdf","\x03\x02\x02\x02\xe1H\x03\x02\x02\x02\xe2\xe3","\x05M'\x02\xe3\xe5\x070\x02\x02\xe4\xe6\t\x02\x02","\x02\xe5\xe4\x03\x02\x02\x02\xe6\xe7\x03\x02\x02","\x02\xe7\xe5\x03\x02\x02\x02\xe7\xe8\x03\x02\x02","\x02\xe8J\x03\x02\x02\x02\xe9\xea\t\x03\x02\x02","\xea\xec\t\x04\x02\x02\xeb\xed\t\x02\x02\x02\xec","\xeb\x03\x02\x02\x02\xed\xee\x03\x02\x02\x02\xee","\xec\x03\x02\x02\x02\xee\xef\x03\x02\x02\x02\xef","L\x03\x02\x02\x02\xf0\xf2\t\x02\x02\x02\xf1\xf0","\x03\x02\x02\x02\xf2\xf3\x03\x02\x02\x02\xf3\xf1","\x03\x02\x02\x02\xf3\xf4\x03\x02\x02\x02\xf4N","\x03\x02\x02\x02\xf5\xf9\t\x05\x02\x02\xf6\xf8","\t\x06\x02\x02\xf7\xf6\x03\x02\x02\x02\xf8\xfb","\x03\x02\x02\x02\xf9\xf7\x03\x02\x02\x02\xf9\xfa","\x03\x02\x02\x02\xfaP\x03\x02\x02\x02\xfb\xf9","\x03\x02\x02\x02\xfc\xfe\t\x07\x02\x02\xfd\xfc","\x03\x02\x02\x02\xfe\xff\x03\x02\x02\x02\xff\xfd","\x03\x02\x02\x02\xff\u0100\x03\x02\x02\x02\u0100\u0101","\x03\x02\x02\x02\u0101\u0102\b)\x02\x02\u0102R\x03\x02","\x02\x02\u0103\u0105\x07$\x02\x02\u0104\u0106\t\b\x02\x02","\u0105\u0104\x03\x02\x02\x02\u0106\u0107\x03\x02\x02\x02","\u0107\u0105\x03\x02\x02\x02\u0107\u0108\x03\x02\x02\x02","\u0108\u0109\x03\x02\x02\x02\u0109\u010a\x07$\x02\x02","\u010aT\x03\x02\x02\x02\u010b\u010c\x071\x02\x02\u010c","\u010d\x07,\x02\x02\u010d\u0111\x03\x02\x02\x02\u010e","\u0110\v\x02\x02\x02\u010f\u010e\x03\x02\x02\x02\u0110","\u0113\x03\x02\x02\x02\u0111\u0112\x03\x02\x02\x02\u0111","\u010f\x03\x02\x02\x02\u0112\u0114\x03\x02\x02\x02\u0113","\u0111\x03\x02\x02\x02\u0114\u0115\x07,\x02\x02\u0115","\u0116\x071\x02\x02\u0116\u0117\x03\x02\x02\x02\u0117","\u0118\b+\x02\x02\u0118V\x03\x02\x02\x02\u0119\u011a\x07","1\x02\x02\u011a\u011b\x071\x02\x02\u011b\u011f\x03\x02","\x02\x02\u011c\u011e\n\t\x02\x02\u011d\u011c\x03\x02\x02","\x02\u011e\u0121\x03\x02\x02\x02\u011f\u011d\x03\x02\x02","\x02\u011f\u0120\x03\x02\x02\x02\u0120\u0122\x03\x02\x02","\x02\u0121\u011f\x03\x02\x02\x02\u0122\u0123\b,\x02\x02","\u0123X\x03\x02\x02\x02\f\x02\xe0\xe7\xee\xf3\xf9","\xff\u0107\u0111\u011f\x03\b\x02\x02"].join(""),atn=(new antlr4.atn.ATNDeserializer).deserialize(serializedATN),decisionsToDFA=atn.decisionToState.map(function(ds,index){return new antlr4.dfa.DFA(ds,index)});function QASMLexer(input){return antlr4.Lexer.call(this,input),this._interp=new antlr4.atn.LexerATNSimulator(this,atn,decisionsToDFA,new antlr4.PredictionContextCache),this}(QASMLexer.prototype=Object.create(antlr4.Lexer.prototype)).constructor=QASMLexer,Object.defineProperty(QASMLexer.prototype,"atn",{get:function(){return atn}}),QASMLexer.EOF=antlr4.Token.EOF,QASMLexer.T__0=1,QASMLexer.T__1=2,QASMLexer.T__2=3,QASMLexer.T__3=4,QASMLexer.T__4=5,QASMLexer.T__5=6,QASMLexer.T__6=7,QASMLexer.T__7=8,QASMLexer.T__8=9,QASMLexer.T__9=10,QASMLexer.T__10=11,QASMLexer.T__11=12,QASMLexer.T__12=13,QASMLexer.T__13=14,QASMLexer.T__14=15,QASMLexer.T__15=16,QASMLexer.T__16=17,QASMLexer.T__17=18,QASMLexer.T__18=19,QASMLexer.T__19=20,QASMLexer.T__20=21,QASMLexer.T__21=22,QASMLexer.T__22=23,QASMLexer.T__23=24,QASMLexer.T__24=25,QASMLexer.T__25=26,QASMLexer.T__26=27,QASMLexer.T__27=28,QASMLexer.T__28=29,QASMLexer.T__29=30,QASMLexer.T__30=31,QASMLexer.T__31=32,QASMLexer.T__32=33,QASMLexer.PI=34,QASMLexer.REAL=35,QASMLexer.SUBREAL=36,QASMLexer.EXPREAL=37,QASMLexer.INT=38,QASMLexer.ID=39,QASMLexer.WS=40,QASMLexer.FILENAME=41,QASMLexer.COMMENT=42,QASMLexer.LINE_COMMENT=43,QASMLexer.prototype.channelNames=["DEFAULT_TOKEN_CHANNEL","HIDDEN"],QASMLexer.prototype.modeNames=["DEFAULT_MODE"],QASMLexer.prototype.literalNames=[null,"'}'","'opaque'","';'","'('","')'","'if'","'=='","'barrier'","'OPENQASM'","'include'","'qreg'","'['","']'","'creg'","'gate'","'{'","'measure'","'->'","'reset'","'U'","'CX'","','","'^'","'*'","'/'","'+'","'-'","'sin'","'cos'","'tan'","'exp'","'ln'","'sqrt'","'pi'"],QASMLexer.prototype.symbolicNames=[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"PI","REAL","SUBREAL","EXPREAL","INT","ID","WS","FILENAME","COMMENT","LINE_COMMENT"],QASMLexer.prototype.ruleNames=["T__0","T__1","T__2","T__3","T__4","T__5","T__6","T__7","T__8","T__9","T__10","T__11","T__12","T__13","T__14","T__15","T__16","T__17","T__18","T__19","T__20","T__21","T__22","T__23","T__24","T__25","T__26","T__27","T__28","T__29","T__30","T__31","T__32","PI","REAL","SUBREAL","EXPREAL","INT","ID","WS","FILENAME","COMMENT","LINE_COMMENT"],QASMLexer.prototype.grammarFileName="QASM.g4",exports.QASMLexer=QASMLexer},{"antlr4/index":47}],3:[function(require,module,exports){var antlr4=require("antlr4/index");function QASMListener(){return antlr4.tree.ParseTreeListener.call(this),this}((QASMListener.prototype=Object.create(antlr4.tree.ParseTreeListener.prototype)).constructor=QASMListener).prototype.enterMainprog=function(ctx){},QASMListener.prototype.exitMainprog=function(ctx){},QASMListener.prototype.enterStatement=function(ctx){},QASMListener.prototype.exitStatement=function(ctx){},QASMListener.prototype.enterVersion=function(ctx){},QASMListener.prototype.exitVersion=function(ctx){},QASMListener.prototype.enterInclude=function(ctx){},QASMListener.prototype.exitInclude=function(ctx){},QASMListener.prototype.enterFilename=function(ctx){},QASMListener.prototype.exitFilename=function(ctx){},QASMListener.prototype.enterDecl=function(ctx){},QASMListener.prototype.exitDecl=function(ctx){},QASMListener.prototype.enterGatedecl=function(ctx){},QASMListener.prototype.exitGatedecl=function(ctx){},QASMListener.prototype.enterGoplist=function(ctx){},QASMListener.prototype.exitGoplist=function(ctx){},QASMListener.prototype.enterQop=function(ctx){},QASMListener.prototype.exitQop=function(ctx){},QASMListener.prototype.enterUop=function(ctx){},QASMListener.prototype.exitUop=function(ctx){},QASMListener.prototype.enterAnylist=function(ctx){},QASMListener.prototype.exitAnylist=function(ctx){},QASMListener.prototype.enterIdlist=function(ctx){},QASMListener.prototype.exitIdlist=function(ctx){},QASMListener.prototype.enterMixedlist=function(ctx){},QASMListener.prototype.exitMixedlist=function(ctx){},QASMListener.prototype.enterArgument=function(ctx){},QASMListener.prototype.exitArgument=function(ctx){},QASMListener.prototype.enterExplist=function(ctx){},QASMListener.prototype.exitExplist=function(ctx){},QASMListener.prototype.enterExp=function(ctx){},QASMListener.prototype.exitExp=function(ctx){},QASMListener.prototype.enterAtom=function(ctx){},QASMListener.prototype.exitAtom=function(ctx){},QASMListener.prototype.enterUnaryop=function(ctx){},QASMListener.prototype.exitUnaryop=function(ctx){},exports.QASMListener=QASMListener},{"antlr4/index":47}],4:[function(require,module,exports){var antlr4=require("antlr4/index"),QASMListener=require("./QASMListener").QASMListener,serializedATN=["\x03\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964","\x03-\u0130\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t","\x04\x04\x05\t\x05\x04\x06\t\x06\x04\x07\t\x07\x04","\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04","\r\t\r\x04\x0e\t\x0e\x04\x0f\t\x0f\x04\x10\t\x10\x04","\x11\t\x11\x04\x12\t\x12\x04\x13\t\x13\x03\x02\x03","\x02\x07\x02)\n\x02\f\x02\x0e\x02,\v\x02\x03\x03","\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03","\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03","\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03","\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03","\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03","\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03","\x03\x03\x03\x03\x03\x03\x03\x03\x05\x03W\n\x03","\x03\x04\x03\x04\x03\x04\x03\x04\x03\x05\x03\x05","\x03\x05\x03\x05\x03\x06\x03\x06\x03\x07\x03\x07","\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07","\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07o\n\x07","\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03","\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03","\b\x03\b\x03\b\x05\b\x85\n\b\x03\t\x03\t\x03\t\x03\t","\x03\t\x06\t\x8c\n\t\r\t\x0e\t\x8d\x03\n\x03\n\x03\n","\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x05","\n\x9b\n\n\x03\v\x03\v\x03\v\x03\v\x03\v","\x03\v\x03\v\x03\v\x03\v\x03\v\x03\v","\x03\v\x03\v\x03\v\x03\v\x03\v\x03\v","\x03\v\x03\v\x03\v\x03\v\x03\v\x03\v","\x03\v\x03\v\x03\v\x03\v\x03\v\x03\v","\x03\v\x05\v\xbb\n\v\x03\f\x03\f\x05\f\xbf","\n\f\x03\r\x03\r\x07\r\xc3\n\r\f\r\x0e\r\xc6\v\r\x03","\r\x03\r\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e","\x07\x0e\xcf\n\x0e\f\x0e\x0e\x0e\xd2\v\x0e\x03","\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x07","\x0e\xda\n\x0e\f\x0e\x0e\x0e\xdd\v\x0e\x03\x0e","\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x07\x0e","\xe5\n\x0e\f\x0e\x0e\x0e\xe8\v\x0e\x03\x0e\x03","\x0e\x07\x0e\xec\n\x0e\f\x0e\x0e\x0e\xef\v\x0e","\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x05\x0e\xf5\n","\x0e\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x05","\x0f\xfc\n\x0f\x03\x10\x03\x10\x03\x10\x07\x10","\u0101\n\x10\f\x10\x0e\x10\u0104\v\x10\x03\x10\x03","\x10\x03\x11\x03\x11\x05\x11\u010a\n\x11\x03\x11","\x03\x11\x03\x11\x03\x11\x03\x11\x05\x11\u0111\n","\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03","\x11\x05\x11\u0119\n\x11\x03\x11\x05\x11\u011c\n\x11","\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11","\x03\x11\x03\x11\x03\x11\x07\x11\u0127\n\x11\f\x11","\x0e\x11\u012a\v\x11\x03\x12\x03\x12\x03\x13\x03","\x13\x03\x13\x02\x03 \x14\x02\x04\x06\b\n\f\x0e",'\x10\x12\x14\x16\x18\x1a\x1c\x1e "$\x02\x06\x03',"\x02\x1c\x1d\x03\x02\x1a\x1b\x04\x02$%()\x03\x02","\x1e#\x02\u0144\x02&\x03\x02\x02\x02\x04V\x03\x02","\x02\x02\x06X\x03\x02\x02\x02\b\\\x03\x02\x02\x02","\n`\x03\x02\x02\x02\fn\x03\x02\x02\x02\x0e\x84\x03","\x02\x02\x02\x10\x8b\x03\x02\x02\x02\x12\x9a\x03","\x02\x02\x02\x14\xba\x03\x02\x02\x02\x16\xbe\x03","\x02\x02\x02\x18\xc4\x03\x02\x02\x02\x1a\xf4\x03","\x02\x02\x02\x1c\xfb\x03\x02\x02\x02\x1e\u0102\x03",'\x02\x02\x02 \u011b\x03\x02\x02\x02"\u012b\x03\x02',"\x02\x02$\u012d\x03\x02\x02\x02&*\x05\x06\x04\x02","')\x05\x04\x03\x02('\x03\x02\x02\x02),\x03\x02","\x02\x02*(\x03\x02\x02\x02*+\x03\x02\x02\x02+\x03","\x03\x02\x02\x02,*\x03\x02\x02\x02-W\x05\f\x07\x02","./\x05\x0e\b\x02/0\x05\x10\t\x0201\x07\x03\x02\x02","1W\x03\x02\x02\x0223\x05\x0e\b\x0234\x07\x03\x02","\x024W\x03\x02\x02\x0256\x07\x04\x02\x0267\x07)","\x02\x0278\x05\x18\r\x0289\x07\x05\x02\x029W\x03","\x02\x02\x02:;\x07\x04\x02\x02;<\x07)\x02\x02<=","\x07\x06\x02\x02=>\x07\x07\x02\x02>?\x05\x18\r\x02","?@\x07\x05\x02\x02@W\x03\x02\x02\x02AB\x07\x04\x02","\x02BC\x07)\x02\x02CD\x07\x06\x02\x02DE\x05\x18","\r\x02EF\x07\x07\x02\x02FG\x05\x18\r\x02GH\x07\x05","\x02\x02HW\x03\x02\x02\x02IW\x05\x12\n\x02JK\x07","\b\x02\x02KL\x07\x06\x02\x02LM\x07)\x02\x02MN\x07","\t\x02\x02NO\x07(\x02\x02OP\x07\x07\x02\x02PW\x05","\x12\n\x02QR\x07\n\x02\x02RS\x05\x16\f\x02ST\x07\x05","\x02\x02TW\x03\x02\x02\x02UW\x05\b\x05\x02V-\x03","\x02\x02\x02V.\x03\x02\x02\x02V2\x03\x02\x02\x02","V5\x03\x02\x02\x02V:\x03\x02\x02\x02VA\x03\x02\x02","\x02VI\x03\x02\x02\x02VJ\x03\x02\x02\x02VQ\x03\x02","\x02\x02VU\x03\x02\x02\x02W\x05\x03\x02\x02\x02","XY\x07\v\x02\x02YZ\x07%\x02\x02Z[\x07\x05\x02","\x02[\x07\x03\x02\x02\x02\\]\x07\f\x02\x02]^\x05","\n\x06\x02^_\x07\x05\x02\x02_\t\x03\x02\x02\x02","`a\x07+\x02\x02a\v\x03\x02\x02\x02bc\x07\r\x02","\x02cd\x07)\x02\x02de\x07\x0e\x02\x02ef\x07(\x02","\x02fg\x07\x0f\x02\x02go\x07\x05\x02\x02hi\x07\x10","\x02\x02ij\x07)\x02\x02jk\x07\x0e\x02\x02kl\x07","(\x02\x02lm\x07\x0f\x02\x02mo\x07\x05\x02\x02nb","\x03\x02\x02\x02nh\x03\x02\x02\x02o\r\x03\x02\x02","\x02pq\x07\x11\x02\x02qr\x07)\x02\x02rs\x05\x18","\r\x02st\x07\x12\x02\x02t\x85\x03\x02\x02\x02uv","\x07\x11\x02\x02vw\x07)\x02\x02wx\x07\x06\x02\x02","xy\x07\x07\x02\x02yz\x05\x18\r\x02z{\x07\x12\x02","\x02{\x85\x03\x02\x02\x02|}\x07\x11\x02\x02}~\x07",")\x02\x02~\x7f\x07\x06\x02\x02\x7f\x80\x05\x18","\r\x02\x80\x81\x07\x07\x02\x02\x81\x82\x05\x18","\r\x02\x82\x83\x07\x12\x02\x02\x83\x85\x03\x02","\x02\x02\x84p\x03\x02\x02\x02\x84u\x03\x02\x02","\x02\x84|\x03\x02\x02\x02\x85\x0f\x03\x02\x02","\x02\x86\x8c\x05\x14\v\x02\x87\x88\x07\n\x02","\x02\x88\x89\x05\x18\r\x02\x89\x8a\x07\x05\x02","\x02\x8a\x8c\x03\x02\x02\x02\x8b\x86\x03\x02\x02","\x02\x8b\x87\x03\x02\x02\x02\x8c\x8d\x03\x02\x02","\x02\x8d\x8b\x03\x02\x02\x02\x8d\x8e\x03\x02\x02","\x02\x8e\x11\x03\x02\x02\x02\x8f\x9b\x05\x14\v","\x02\x90\x91\x07\x13\x02\x02\x91\x92\x05\x1c\x0f","\x02\x92\x93\x07\x14\x02\x02\x93\x94\x05\x1c\x0f","\x02\x94\x95\x07\x05\x02\x02\x95\x9b\x03\x02\x02","\x02\x96\x97\x07\x15\x02\x02\x97\x98\x05\x1c\x0f","\x02\x98\x99\x07\x05\x02\x02\x99\x9b\x03\x02\x02","\x02\x9a\x8f\x03\x02\x02\x02\x9a\x90\x03\x02\x02","\x02\x9a\x96\x03\x02\x02\x02\x9b\x13\x03\x02\x02","\x02\x9c\x9d\x07\x16\x02\x02\x9d\x9e\x07\x06\x02","\x02\x9e\x9f\x05\x1e\x10\x02\x9f\xa0\x07\x07\x02","\x02\xa0\xa1\x05\x1c\x0f\x02\xa1\xa2\x07\x05\x02","\x02\xa2\xbb\x03\x02\x02\x02\xa3\xa4\x07\x17\x02","\x02\xa4\xa5\x05\x1c\x0f\x02\xa5\xa6\x07\x18\x02","\x02\xa6\xa7\x05\x1c\x0f\x02\xa7\xa8\x07\x05\x02","\x02\xa8\xbb\x03\x02\x02\x02\xa9\xaa\x07)\x02","\x02\xaa\xab\x05\x16\f\x02\xab\xac\x07\x05\x02","\x02\xac\xbb\x03\x02\x02\x02\xad\xae\x07)\x02","\x02\xae\xaf\x07\x06\x02\x02\xaf\xb0\x07\x07\x02","\x02\xb0\xb1\x05\x16\f\x02\xb1\xb2\x07\x05\x02","\x02\xb2\xbb\x03\x02\x02\x02\xb3\xb4\x07)\x02","\x02\xb4\xb5\x07\x06\x02\x02\xb5\xb6\x05\x1e\x10","\x02\xb6\xb7\x07\x07\x02\x02\xb7\xb8\x05\x16\f","\x02\xb8\xb9\x07\x05\x02\x02\xb9\xbb\x03\x02\x02","\x02\xba\x9c\x03\x02\x02\x02\xba\xa3\x03\x02\x02","\x02\xba\xa9\x03\x02\x02\x02\xba\xad\x03\x02\x02","\x02\xba\xb3\x03\x02\x02\x02\xbb\x15\x03\x02\x02","\x02\xbc\xbf\x05\x18\r\x02\xbd\xbf\x05\x1a\x0e","\x02\xbe\xbc\x03\x02\x02\x02\xbe\xbd\x03\x02\x02","\x02\xbf\x17\x03\x02\x02\x02\xc0\xc1\x07)\x02","\x02\xc1\xc3\x07\x18\x02\x02\xc2\xc0\x03\x02\x02","\x02\xc3\xc6\x03\x02\x02\x02\xc4\xc2\x03\x02\x02","\x02\xc4\xc5\x03\x02\x02\x02\xc5\xc7\x03\x02\x02","\x02\xc6\xc4\x03\x02\x02\x02\xc7\xc8\x07)\x02","\x02\xc8\x19\x03\x02\x02\x02\xc9\xca\x07)\x02","\x02\xca\xcb\x07\x0e\x02\x02\xcb\xcc\x07(\x02","\x02\xcc\xcd\x07\x0f\x02\x02\xcd\xcf\x07\x18\x02","\x02\xce\xc9\x03\x02\x02\x02\xcf\xd2\x03\x02\x02","\x02\xd0\xce\x03\x02\x02\x02\xd0\xd1\x03\x02\x02","\x02\xd1\xd3\x03\x02\x02\x02\xd2\xd0\x03\x02\x02","\x02\xd3\xf5\x07)\x02\x02\xd4\xd5\x07)\x02\x02","\xd5\xd6\x07\x0e\x02\x02\xd6\xd7\x07(\x02\x02","\xd7\xd8\x07\x0f\x02\x02\xd8\xda\x07\x18\x02\x02","\xd9\xd4\x03\x02\x02\x02\xda\xdd\x03\x02\x02\x02","\xdb\xd9\x03\x02\x02\x02\xdb\xdc\x03\x02\x02\x02","\xdc\xde\x03\x02\x02\x02\xdd\xdb\x03\x02\x02\x02","\xde\xdf\x07)\x02\x02\xdf\xe0\x07\x0e\x02\x02","\xe0\xe1\x07(\x02\x02\xe1\xf5\x07\x0f\x02\x02","\xe2\xe3\x07)\x02\x02\xe3\xe5\x07\x18\x02\x02","\xe4\xe2\x03\x02\x02\x02\xe5\xe8\x03\x02\x02\x02","\xe6\xe4\x03\x02\x02\x02\xe6\xe7\x03\x02\x02\x02","\xe7\xe9\x03\x02\x02\x02\xe8\xe6\x03\x02\x02\x02","\xe9\xea\x07)\x02\x02\xea\xec\x07\x18\x02\x02","\xeb\xe6\x03\x02\x02\x02\xec\xef\x03\x02\x02\x02","\xed\xeb\x03\x02\x02\x02\xed\xee\x03\x02\x02\x02","\xee\xf0\x03\x02\x02\x02\xef\xed\x03\x02\x02\x02","\xf0\xf1\x07)\x02\x02\xf1\xf2\x07\x0e\x02\x02","\xf2\xf3\x07(\x02\x02\xf3\xf5\x07\x0f\x02\x02","\xf4\xd0\x03\x02\x02\x02\xf4\xdb\x03\x02\x02\x02","\xf4\xed\x03\x02\x02\x02\xf5\x1b\x03\x02\x02\x02","\xf6\xfc\x07)\x02\x02\xf7\xf8\x07)\x02\x02\xf8","\xf9\x07\x0e\x02\x02\xf9\xfa\x07(\x02\x02\xfa","\xfc\x07\x0f\x02\x02\xfb\xf6\x03\x02\x02\x02\xfb","\xf7\x03\x02\x02\x02\xfc\x1d\x03\x02\x02\x02\xfd","\xfe\x05 \x11\x02\xfe\xff\x07\x18\x02\x02\xff","\u0101\x03\x02\x02\x02\u0100\xfd\x03\x02\x02\x02\u0101","\u0104\x03\x02\x02\x02\u0102\u0100\x03\x02\x02\x02\u0102","\u0103\x03\x02\x02\x02\u0103\u0105\x03\x02\x02\x02\u0104","\u0102\x03\x02\x02\x02\u0105\u0106\x05 \x11\x02\u0106","\x1f\x03\x02\x02\x02\u0107\u0109\b\x11\x01\x02\u0108","\u010a\t\x02\x02\x02\u0109\u0108\x03\x02\x02\x02\u0109","\u010a\x03\x02\x02\x02\u010a\u010b\x03\x02\x02\x02\u010b","\u010c\x07\x06\x02\x02\u010c\u010d\x05 \x11\x02\u010d","\u010e\x07\x07\x02\x02\u010e\u011c\x03\x02\x02\x02\u010f","\u0111\t\x02\x02\x02\u0110\u010f\x03\x02\x02\x02\u0110","\u0111\x03\x02\x02\x02\u0111\u0112\x03\x02\x02\x02\u0112","\u0113\x05$\x13\x02\u0113\u0114\x07\x06\x02\x02\u0114","\u0115\x05 \x11\x02\u0115\u0116\x07\x07\x02\x02\u0116","\u011c\x03\x02\x02\x02\u0117\u0119\t\x02\x02\x02\u0118","\u0117\x03\x02\x02\x02\u0118\u0119\x03\x02\x02\x02\u0119",'\u011a\x03\x02\x02\x02\u011a\u011c\x05"\x12\x02\u011b',"\u0107\x03\x02\x02\x02\u011b\u0110\x03\x02\x02\x02\u011b","\u0118\x03\x02\x02\x02\u011c\u0128\x03\x02\x02\x02\u011d","\u011e\f\b\x02\x02\u011e\u011f\x07\x19\x02\x02\u011f\u0127","\x05 \x11\t\u0120\u0121\f\x07\x02\x02\u0121\u0122\t\x03","\x02\x02\u0122\u0127\x05 \x11\b\u0123\u0124\f\x06\x02\x02","\u0124\u0125\t\x02\x02\x02\u0125\u0127\x05 \x11\x07\u0126","\u011d\x03\x02\x02\x02\u0126\u0120\x03\x02\x02\x02\u0126","\u0123\x03\x02\x02\x02\u0127\u012a\x03\x02\x02\x02\u0128","\u0126\x03\x02\x02\x02\u0128\u0129\x03\x02\x02\x02\u0129","!\x03\x02\x02\x02\u012a\u0128\x03\x02\x02\x02\u012b","\u012c\t\x04\x02\x02\u012c#\x03\x02\x02\x02\u012d\u012e","\t\x05\x02\x02\u012e%\x03\x02\x02\x02\x19*Vn\x84\x8b","\x8d\x9a\xba\xbe\xc4\xd0\xdb\xe6\xed\xf4\xfb\u0102","\u0109\u0110\u0118\u011b\u0126\u0128"].join(""),atn=(new antlr4.atn.ATNDeserializer).deserialize(serializedATN),decisionsToDFA=atn.decisionToState.map(function(ds,index){return new antlr4.dfa.DFA(ds,index)}),sharedContextCache=new antlr4.PredictionContextCache,literalNames=[null,"'}'","'opaque'","';'","'('","')'","'if'","'=='","'barrier'","'OPENQASM'","'include'","'qreg'","'['","']'","'creg'","'gate'","'{'","'measure'","'->'","'reset'","'U'","'CX'","','","'^'","'*'","'/'","'+'","'-'","'sin'","'cos'","'tan'","'exp'","'ln'","'sqrt'","'pi'"],symbolicNames=[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"PI","REAL","SUBREAL","EXPREAL","INT","ID","WS","FILENAME","COMMENT","LINE_COMMENT"],ruleNames=["mainprog","statement","version","include","filename","decl","gatedecl","goplist","qop","uop","anylist","idlist","mixedlist","argument","explist","exp","atom","unaryop"];function QASMParser(input){return antlr4.Parser.call(this,input),this._interp=new antlr4.atn.ParserATNSimulator(this,atn,decisionsToDFA,sharedContextCache),this.ruleNames=ruleNames,this.literalNames=literalNames,this.symbolicNames=symbolicNames,this}function MainprogContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_mainprog,this}function StatementContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_statement,this}function VersionContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_version,this}function IncludeContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_include,this}function FilenameContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_filename,this}function DeclContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_decl,this}function GatedeclContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_gatedecl,this}function GoplistContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_goplist,this}function QopContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_qop,this}function UopContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_uop,this}function AnylistContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_anylist,this}function IdlistContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_idlist,this}function MixedlistContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_mixedlist,this}function ArgumentContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_argument,this}function ExplistContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_explist,this}function ExpContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_exp,this}function AtomContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_atom,this}function UnaryopContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_unaryop,this}(QASMParser.prototype=Object.create(antlr4.Parser.prototype)).constructor=QASMParser,Object.defineProperty(QASMParser.prototype,"atn",{get:function(){return atn}}),QASMParser.EOF=antlr4.Token.EOF,QASMParser.T__0=1,QASMParser.T__1=2,QASMParser.T__2=3,QASMParser.T__3=4,QASMParser.T__4=5,QASMParser.T__5=6,QASMParser.T__6=7,QASMParser.T__7=8,QASMParser.T__8=9,QASMParser.T__9=10,QASMParser.T__10=11,QASMParser.T__11=12,QASMParser.T__12=13,QASMParser.T__13=14,QASMParser.T__14=15,QASMParser.T__15=16,QASMParser.T__16=17,QASMParser.T__17=18,QASMParser.T__18=19,QASMParser.T__19=20,QASMParser.T__20=21,QASMParser.T__21=22,QASMParser.T__22=23,QASMParser.T__23=24,QASMParser.T__24=25,QASMParser.T__25=26,QASMParser.T__26=27,QASMParser.T__27=28,QASMParser.T__28=29,QASMParser.T__29=30,QASMParser.T__30=31,QASMParser.T__31=32,QASMParser.T__32=33,QASMParser.PI=34,QASMParser.REAL=35,QASMParser.SUBREAL=36,QASMParser.EXPREAL=37,QASMParser.INT=38,QASMParser.ID=39,QASMParser.WS=40,QASMParser.FILENAME=41,QASMParser.COMMENT=42,QASMParser.LINE_COMMENT=43,QASMParser.RULE_mainprog=0,QASMParser.RULE_statement=1,QASMParser.RULE_version=2,QASMParser.RULE_include=3,QASMParser.RULE_filename=4,QASMParser.RULE_decl=5,QASMParser.RULE_gatedecl=6,QASMParser.RULE_goplist=7,QASMParser.RULE_qop=8,QASMParser.RULE_uop=9,QASMParser.RULE_anylist=10,QASMParser.RULE_idlist=11,QASMParser.RULE_mixedlist=12,QASMParser.RULE_argument=13,QASMParser.RULE_explist=14,QASMParser.RULE_exp=15,QASMParser.RULE_atom=16,QASMParser.RULE_unaryop=17,((MainprogContext.prototype=Object.create(antlr4.ParserRuleContext.prototype)).constructor=MainprogContext).prototype.version=function(){return this.getTypedRuleContext(VersionContext,0)},MainprogContext.prototype.statement=function(i){return void 0===i&&(i=null),null===i?this.getTypedRuleContexts(StatementContext):this.getTypedRuleContext(StatementContext,i)},MainprogContext.prototype.enterRule=function(listener){listener instanceof QASMListener&&listener.enterMainprog(this)},MainprogContext.prototype.exitRule=function(listener){listener instanceof QASMListener&&listener.exitMainprog(this)},QASMParser.MainprogContext=MainprogContext,QASMParser.prototype.mainprog=function(){var localctx=new MainprogContext(this,this._ctx,this.state);this.enterRule(localctx,0,QASMParser.RULE_mainprog);var _la=0;try{for(this.enterOuterAlt(localctx,1),this.state=36,this.version(),this.state=40,this._errHandler.sync(this),_la=this._input.LA(1);0==(-32&_la)&&0!=(1<<_la&(1<wire))return!1}return!0},QuantumCircuit.prototype.isEmptyPlace=function(col,wires,usingCregs){var mx,minWire=Math.min.apply(null,wires),maxWire=Math.max.apply(null,wires);!usingCregs||maxWire<(mx=this.numQubits-1)&&(maxWire=mx);for(var allEmpty=!0,wire=minWire;wire<=maxWire;wire++)if(!this.isEmptyCell(col,wire)){allEmpty=!1;break}return allEmpty},QuantumCircuit.prototype.lastNonEmptyPlace=function(wires,usingCregs){var mx,col=this.numCols(),allEmpty=!0,minWire=Math.min.apply(null,wires),maxWire=Math.max.apply(null,wires);for(!usingCregs||maxWire<(mx=this.numQubits-1)&&(maxWire=mx);allEmpty&&col--;)for(var wire=minWire;wire<=maxWire;wire++)if(!this.isEmptyCell(col,wire)){allEmpty=!1;break}return col},QuantumCircuit.prototype.insertColumn=function(colIndex){for(var i=0;ithis.numQubits&&(this.numQubits=wire+1);this.gates.lengththis.numQubits&&(this.numQubits=wire+1);this.gates.lengthextWire&&(newExtWire=extW)}extWire=newExtWire}}extColumn++}}}}for(var circuit=new QuantumCircuit,blockCounter=0,blockIndex=0;blockIndex=command.params.length){errorMessage='Internal error: QUIL definition for gate "'+command.name+" is invalid.";if(errorCallback)return void errorCallback([{msg:errorMessage,line:lineOffset+command.line,col:command.col}]);throw new Error(errorMessage)}params[paramName]=command.params[paramIndex]}}else{if(((gateDef=gateInfo.customGate).params||[]).length!=(command.params||[]).length){errorMessage="Invalid number of params. Expected "+(gateDef.params||[]).length+" got "+(command.params||[]).length+".";if(errorCallback)return void errorCallback([{msg:errorMessage,line:lineOffset+command.line,col:command.col}]);throw new Error(errorMessage)}for(i=0;igate.wires.length||gate.wires[0]>gate.wires[1]?circuit.transformMatrix(maxWire-minWire+1,rawMatrix,targetWires):rawMatrix).map(function(row,rowIndex){0>data.offset}}}(parseInt(inst.mask),parseInt(inst.val)))){var errorMessage="Invalid classical condition.";if(errorCallback)return void errorCallback([{msg:errorMessage}]);throw new Error(errorMessage)}conditions[inst.register]=condition;break;case"measure":for(var qIndex=0;qIndexmemory)return{name:cregName,bit:memory-totalBits};totalBits+=creg.length}return null}(inst.memory[qIndex]);if(!creg){errorMessage="Invalid measurement destination.";if(errorCallback)return void errorCallback([{msg:errorMessage}]);throw new Error(errorMessage)}var options={creg:creg};this.appendGate("measure",qubit,options)}break;case"barrier":break;default:var options={params:{},condition:{}},gateName=inst.name;switch(gateName){case"iden":gateName="id"}var condition,gateDef=this.basicGates[gateName];if(!gateDef){errorMessage='Unknown gate "'+inst.name+'".';if(errorCallback)return void errorCallback([{msg:errorMessage}]);throw new Error(errorMessage)}if(gateDef.params&&gateDef.params.length){if(!inst.params||!inst.params.length||inst.params.length!=gateDef.params.length){errorMessage='Invalid number of params for gate "'+inst.name+'".';if(errorCallback)return void errorCallback([{msg:errorMessage}]);throw new Error(errorMessage)}for(var parIndex=0;parIndex',gateLabel&&(res+=''+gateLabel+""),res}function gateCircleSVG(cellX,cellY,gateName,gateLabel,selected){var centerX=cellX+options.cellWidth/2,centerY=cellY+options.cellHeight/2,gateWidth=.8*options.cellWidth,gateHeight=.8*options.cellHeight,gateX=cellX+(options.cellWidth-gateWidth)/2,gateY=cellY+(options.cellHeight-gateHeight)/2,res="";return res+='',gateLabel&&(res+=''+gateLabel+""),res}function gateNotSVG(cellX,cellY,gateName,selected){var centerX=cellX+options.cellWidth/2,centerY=cellY+options.cellHeight/2,gateWidth=.8*options.cellWidth,gateHeight=.8*options.cellHeight,gateX=cellX+(options.cellWidth-gateWidth)/2,gateY=cellY+(options.cellHeight-gateHeight)/2,res="";return res+='',res+='',res+=''}function gateGaugeSVG(gateX,gateY,gateName,selected){var x,y,radius,startAngle,endAngle,start,end,largeArcFlag,gateWidth=options.cellWidth,gateHeight=options.cellHeight,centerX=gateX+gateWidth/2,centerY=gateY+gateHeight/2,movedown=gateHeight/5,res="";return res+='',res+='',res+=''}function gateXSVG(cellX,cellY,gateName,selected){var gateWidth=.4*options.cellWidth,gateHeight=.4*options.cellHeight,gateX=cellX+(options.cellWidth-gateWidth)/2,gateY=cellY+(options.cellHeight-gateHeight)/2,res="";return res+='',res+=''}function gateDotSVG(cellX,cellY,gateName,selected){var res="";return res+=''}function gateInvertedDotSVG(cellX,cellY,gateName,selected){var res="";return res+=''}function gateSVG(gateX,gateY,gateName,gateLabel,connector,drawBox,selected){var res="";switch("box"!=connector&&drawBox&&(res+=gateBoxSVG(gateX,gateY,0,"",selected)),connector){case"box":res+=gateBoxSVG(gateX,gateY,0,gateLabel,selected);break;case"rect":res+=function(gateX,gateY,gateLabel,selected){var gateWidth=2*options.cellWidth,gateHeight=options.cellHeight,res="";return res+='',gateLabel&&(res+=''+gateLabel+""),res}(gateX,gateY,gateLabel,selected);break;case"circle":res+=gateCircleSVG(gateX,gateY,0,gateLabel,selected);break;case"not":res+=gateNotSVG(gateX,gateY,0,selected);break;case"x":res+=gateXSVG(gateX,gateY,0,selected);break;case"dot":res+=gateDotSVG(gateX,gateY,0,selected);break;case"ndot":res+=gateInvertedDotSVG(gateX,gateY,0,selected);break;case"gauge":res+=gateGaugeSVG(gateX,gateY,0,selected)}return res}function escapeHtml(str){return str.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}if(options.gateGallery||options.gateGalleryRaw||options.customGateGallery){var gateList=[];if(options.gateGallery||options.gateGalleryRaw){var uniq=[];for(var gateName in this.basicGates){var gateLabel,connector,uniqStr,gate=this.basicGates[gateName],dinfo=JSON.parse(JSON.stringify(gate.drawingInfo||{connectors:["box"]}));dinfo.connectors&&(gateLabel=dinfo.label||gateName,connector=dinfo.connectors?dinfo.connectors[dinfo.connectors.length-1]:"box",options.gateGallery&&("x"!=connector&&"dot"!=connector||(connector="box")),uniqStr=gateLabel+"|"+connector,uniq.indexOf(uniqStr)<0&&"ccx"!=gateName&&(uniq.push(uniqStr),svg="",options.embedded||(svg+='',svg+=''),svg+='',svg+=gateSVG(0,0,0,gateLabel,connector,!!options.gateGallery,!1),svg+="",options.gateGallery?gateList.push(svg):gateList.push({name:gateName,svg:svg})))}var dotsvg="";options.embedded||(dotsvg+='',dotsvg+=''),dotsvg+='',dotsvg+=gateSVG(0,0,0,"dot","dot",!!options.gateGallery,!1),dotsvg+="",options.gateGallery?gateList.push(dotsvg):gateList.push({name:"dot",svg:dotsvg});var ndotsvg="";options.embedded||(ndotsvg+='',ndotsvg+=''),ndotsvg+='',ndotsvg+=gateSVG(0,0,0,"ndot","ndot",!!options.gateGallery,!1),ndotsvg+="",options.gateGallery?gateList.push(ndotsvg):gateList.push({name:"dot",svg:ndotsvg})}if(options.customGateGallery)for(var gateName in this.customGates){var svg="";options.embedded||(svg+='',svg+=''),svg+='',svg+=gateSVG(0,0,0,gateName,"rect",!1,!1),svg+="",gateList.push(svg)}return gateList}svg="";if(options.embedded||(svg+='',svg+=''),svg+='',options.placeholders)for(var column=0;column<=numCols;column++)for(var wire=0;wire<=this.numQubits;wire++)svg+=function(colIndex,wire){var svg="",gateWidth=options.cellWidth+options.hSpacing,gateHeight=options.cellHeight+options.vSpacing,gateX=getCellX(colIndex)-options.hSpacing,gateY=getCellY(wire)-options.vSpacing;return wire==numRows&&(gateHeight=options.vSpacing),colIndex==numCols&&(gateWidth=options.hSpacing),svg+=''}(column,wire);for(wire=0;wire|'+initSymbol+"\u27e9",svg+='',svg+='q'+wire+""}for(var cregName in this.cregs){svg+='0',svg+='',svg+=''+cregName+""}for(column=0;column',blackbox&&(gateX=getCellX(colIndex)-options.blackboxPaddingX,gateY=qGateY(topWire)-options.blackboxPaddingY,gateWidth=options.cellWidth+2*options.blackboxPaddingX,cLinkTopY=gateY+(gateHeight=qGateY(bottomWire)+options.cellHeight-gateY+options.blackboxPaddingY),svg+=''+(dinfo.label||gate.name)+"",svg+=''),selected&&(gateX=getCellX(colIndex)-options.selectionPaddingX,gateY=qGateY(topWire)-options.selectionPaddingY,gateWidth=options.cellWidth+2*options.selectionPaddingX,gateHeight=qGateY(bottomWire)+options.cellHeight-gateY+options.selectionPaddingY,cLinkTopY=gateY+gateHeight,svg+=''),topWire==bottomWire||blackbox||(linkX=getCellX(colIndex)+options.cellWidth/2,linkY1=getCellY(topWire)+options.cellHeight/2,linkY2=getCellY(bottomWire)+options.cellHeight/2,svg+='');var linkX,linkY1,linkY2,maxWire=Math.max.apply(null,gate.wires);return gate.wires.map(function(wire,connector){switch(dinfo.connectors[connector]){case"box":var gateX=getCellX(colIndex),gateY=getCellY(wire);svg+=gateBoxSVG(gateX,gateY,gate.name,blackbox?qubitLetter(connector,numRows):dinfo.label||gate.name,selected),blackbox||wire!=bottomWire||(cLinkTopY=gateY+options.cellHeight);break;case"circle":gateX=getCellX(colIndex),gateY=getCellY(wire);svg+=gateCircleSVG(gateX,gateY,gate.name,blackbox?qubitLetter(connector,numRows):dinfo.label||gate.name,selected),blackbox||wire!=bottomWire||(gateHeight=.8*options.cellHeight,cLinkTopY=gateY+gateHeight+(options.cellHeight-gateHeight)/2);break;case"not":var gateHeight,cellX=getCellX(colIndex),cellY=getCellY(wire);svg+=gateNotSVG(cellX,cellY,gate.name,selected),blackbox||wire!=bottomWire||(gateHeight=.8*options.cellHeight,cLinkTopY=cellY+gateHeight+(options.cellHeight-gateHeight)/2);break;case"x":cellX=getCellX(colIndex),cellY=getCellY(wire);svg+=gateXSVG(cellX,cellY,gate.name,selected),blackbox||wire!=bottomWire||(cLinkTopY=qWireY(bottomWire));break;case"dot":cellX=getCellX(colIndex),cellY=getCellY(wire);svg+=gateDotSVG(cellX,cellY,gate.name,selected),blackbox||wire!=bottomWire||(cLinkTopY=qWireY(bottomWire)+options.dotRadius);break;case"ndot":cellX=getCellX(colIndex),cellY=getCellY(wire);svg+=gateInvertedDotSVG(cellX,cellY,gate.name,selected),blackbox||wire!=bottomWire||(cLinkTopY=qWireY(bottomWire)+options.dotRadius);break;case"gauge":gateX=getCellX(colIndex),gateY=getCellY(wire);svg+=gateGaugeSVG(gateX,gateY,gate.name,selected),blackbox||wire!=bottomWire||(cLinkTopY=gateY+options.cellHeight)}if(gate.options&&gate.options.params&&wire==maxWire){var gateX=getCellX(colIndex),gateY=getCellY(wire),centerX=gateX+options.cellWidth/2,paramsStr="",paramsCount=0;for(var paramName in gate.options.params){paramsStr&&(paramsStr+=", ");var paramVal=gate.options.params[paramName];"string"==typeof paramVal&¶mVal.match(/^[\+\-]?\d*\.?\d+(?:[Ee][\+\-]?\d+)?$/)&&(paramVal=parseFloat(paramVal)),"number"==typeof paramVal&&(paramVal=math.round(paramVal,3)),paramsStr+=paramVal,paramsCount++}26'+paramsStr+""}}),"measure"==gate.name&&gate.options&&gate.options.creg&&gate.options.creg.name&&(linkX=getCellX(colIndex)+options.cellWidth/2,linkY1=cLinkTopY,linkY2=cWireY(gate.options.creg.name),svg+='',svg+='',svg+='',svg+=''+gate.options.creg.bit+""),gate.options&&gate.options.condition&&gate.options.condition.creg&&(linkX=getCellX(colIndex)+options.cellWidth/2,linkY1=cLinkTopY,linkY2=cWireY(gate.options.condition.creg),svg+='',svg+='',svg+='== '+gate.options.condition.value+""),svg+=""}(gate,column))}for(column=0;column'}(gate,column,wire))}if(options.drawBlochSpheres){var currentCol=totalCols-1;options.drawHybrid&&(currentCol-=2);for(wire=0;wire',svg+='',svg+='',svg+='
',svg+='',svg+="",svg+="
",svg+="
",svg+=""}(currentCol,wire,"qc-bloch-group","qc-bloch-canvas")}if(options.drawHybrid){var colIndex=currentCol=totalCols-2,gateX=getCellX(colIndex)+options.blackboxPaddingX,gateY=qGateY(0)+options.blackboxPaddingY,gateWidth=options.cellWidth-2*options.blackboxPaddingX,gateHeight=qGateY(numRows+numCregs-1)+options.cellHeight-gateY-options.blackboxPaddingY,centerX=gateX+gateWidth/2,centerY=gateY+gateHeight/2;cLinkTopY=gateY+gateHeight,svg+='',svg+='Cost';var gate2X=getCellX(colIndex+1)+options.blackboxPaddingX,center2X=gate2X+gateWidth/2;svg+='',svg+='',svg+='',svg+='Optimizer',svg+='';var hWireX=0,globalParamsInfo=this.findGlobalParams();if(globalParamsInfo.globalParams.length){hWireX=getCellX(globalParamsInfo.cells[0][0])+options.cellWidth+options.hSpacing/2;for(var i=0;i',svg+=''}svg+=''}else{svg+='',svg+='?'}}return svg+="
"},QuantumCircuit.prototype.exportToQiskit=function(options,exportAsGateName,circuitReplacement,insideSubmodule){var comment=(options=options||{}).comment,decompose=options.decompose,versionStr=options.versionStr,providerName=options.providerName,backendName=options.backendName,asJupyter=options.asJupyter,shots=options.shots,hybrid=options.hybrid,self=this,providerName=providerName||"Aer";(backendName=backendName||"")||"Aer"!=providerName||(backendName="qasm_simulator"),shots=shots||1024;var version=parseFloat(versionStr||"0.7");isNaN(version),void 0===hybrid&&(hybrid=!!this.options&&!!this.options.hybrid);var circuit=new QuantumCircuit;circuit.load(this.save(decompose));var qiskit="";comment&&(comment||"").split("\n").map(function(cline){1<=cline.length&&"#"!=cline[0]&&(qiskit+="# "),qiskit+=cline,qiskit+="\n"});function mathToStringHandler(node,options){if(node.isSymbolNode){if(0<=["pi","sin","cos","tan","asin","acos","atan"].indexOf(node.name))return"np."+node.name;if(0<=self.params.indexOf(node.name)&&hybrid)return"params["+self.params.indexOf(node.name)+"]"}}function adjustIdentation(addStr,ident){var str="",cfLines=addStr.split("\n"),minIdent=-1;cfLines.map(function(cfLine){var tmpIdent=cfLine.search(/\S/);0<=tmpIdent&&(minIdent<0||tmpIdent ",qasm+=gate.options.creg.name+"["+gate.options.creg.bit+"]"),qasm+=";\n"}}}return exportAsGateName&&(qasm+="}\n\n"),qasm},QuantumCircuit.prototype.exportToPyquil=function(options,exportAsGateName){var comment=(options=options||{}).comment,decompose=options.decompose,versionStr=options.versionStr,lattice=options.lattice,asQVM=options.asQVM,asJupyter=options.asJupyter,shots=options.shots,hybrid=options.hybrid,self=this,version=parseFloat(versionStr||"2.12");isNaN(version)&&(version=2.1),shots=shots||1024,void 0===hybrid&&(hybrid=!!this.options&&!!this.options.hybrid);var circuit=new QuantumCircuit;circuit.load(this.save(decompose));function mathToStringHandler(node,options){if(node.isSymbolNode){if(0<=["pi","sin","cos","tan","asin","acos","atan"].indexOf(node.name))return"np."+node.name;if(0<=self.params.indexOf(node.name)&&hybrid)return"params["+self.params.indexOf(node.name)+"]"}}function adjustIdentation(addStr,ident){var str="",cfLines=addStr.split("\n"),minIdent=-1;cfLines.map(function(cfLine){var tmpIdent=cfLine.search(/\S/);0<=tmpIdent&&(minIdent<0||tmpIdent')]\n",aqasm+=indent+" string_state = string_state[::-1]\n",aqasm+=indent+" counts[string_state] += 1\n\n",hybrid?(aqasm+=indent+"# CALCULATE COST HERE\n",(costFunction=this.options&&this.options.hybridOptions&&this.options.hybridOptions.costFunction&&this.options.hybridOptions.costFunction.python||"").trim()||(costFunction="cost = 0"),aqasm+=function(addStr,ident){var str="",cfLines=addStr.split("\n"),minIdent=-1;cfLines.map(function(cfLine){var tmpIdent=cfLine.search(/\S/);0<=tmpIdent&&(minIdent<0||tmpIdentusedWires.length){(combineItem={}).circuit=new QuantumCircuit(bounds.numQubits-usedWires.length),combineItem.wires=[];for(var i=0;i\t"+perc+"%\n"}}return s},QuantumCircuit.prototype.print=function(onlyPossible){console.log(this.stateAsString(onlyPossible))},QuantumCircuit.prototype.gotClassicalControl=function(){for(var column=0;columnsize;)this.cregs[creg].pop()}},QuantumCircuit.prototype.getCreg=function(creg){return this.cregs[creg]},QuantumCircuit.prototype.setCregBit=function(creg,cbit,value){var bit=parseInt(cbit);if(isNaN(bit))throw'Error: invalid "cbit" argument to "setCregBit" method: expected "integer" got "'+typeof cbit+'".';for(this.cregs[creg]||(this.cregs[creg]=[]);bit>=this.cregs[creg].length;)this.cregs[creg].push(0);this.cregs[creg][bit]=value?1:0},QuantumCircuit.prototype.getCregBit=function(creg,cbit){if(!this.cregs[creg])throw'Error: "getCregBit": unknown register "'+creg+'".';var bit=parseInt(cbit);if(isNaN(bit)||bit>=this.cregs[creg].length)throw'Error: "getCregBit": bit "'+cbit+'" not found.';return this.cregs[creg][bit]},QuantumCircuit.prototype.cregBase=function(creg){if(!this.cregs[creg])throw'Error: "getCregBit": unknown register "'+creg+'".';var base=0;for(var regName in this.cregs){if(regName==creg)return base;base+=this.cregs[regName].length}},QuantumCircuit.prototype.cregTotalBits=function(){var bits=0;for(var regName in this.cregs)bits+=this.cregs[regName].length;return bits},QuantumCircuit.prototype.getCregValue=function(creg){if(!this.cregs[creg])throw'Error: "getCregBit": unknown register "'+creg+'".';for(var len=this.cregs[creg].length,value=0,i=0;iMath.PI&&(params[paramName]=Math.PI-params[paramName])}),opt.params=params),"measure"==gateName?opt.creg={name:"c",bit:gateWires[0]}:options.noClassicControl||0!=Math.floor(4*Math.random())||(cregBits=this.cregTotalBits())&&(opt.condition={creg:"c",value:Math.floor(Math.random()*math.pow(2,cregBits))}),this.appendGate(gateName,gateWires,opt),gateCount++}}}},QuantumCircuit.prototype.randomUnitary=function(numQubits){var circ=new QuantumCircuit;return circ.randomCircuit(numQubits||1,8*(numQubits||1),{useGates:["rx","rz","cz"],noMeasure:!0,noReset:!0,noClassicControl:!0}),circ.circuitMatrix()},QuantumCircuit.prototype.eulerAnglesZYZ=function(inputMatrix){var eulerAngles={theta:null,phi:null,lambda:null,phase:null},coeff=math.pow(math.det(inputMatrix),-.5);eulerAngles.phase=-1*math.complex(coeff).toPolar().phi;var su_mat=math.multiply(coeff,inputMatrix);eulerAngles.theta=2*math.atan2(math.abs(su_mat[1][0]),math.abs(su_mat[0][0]));var phiplambda=2*math.complex(su_mat[1][1]).toPolar().phi,phimlamda=2*math.complex(su_mat[1][0]).toPolar().phi;return eulerAngles.phi=(phiplambda+phimlamda)/2,eulerAngles.lambda=(phiplambda-phimlamda)/2,eulerAngles},module.exports=QuantumCircuit},{"./qasm_import/QASMImport.js":1,mathjs:943}],6:[function(require,module,exports){var Token=require("./Token").Token,Lexer=require("./Lexer").Lexer,Interval=require("./IntervalSet").Interval;function TokenStream(){return this}function BufferedTokenStream(tokenSource){return TokenStream.call(this),this.tokenSource=tokenSource,this.tokens=[],this.index=-1,this.fetchedEOF=!1,this}((BufferedTokenStream.prototype=Object.create(TokenStream.prototype)).constructor=BufferedTokenStream).prototype.mark=function(){return 0},BufferedTokenStream.prototype.release=function(marker){},BufferedTokenStream.prototype.reset=function(){this.seek(0)},BufferedTokenStream.prototype.seek=function(index){this.lazyInit(),this.index=this.adjustSeekIndex(index)},BufferedTokenStream.prototype.get=function(index){return this.lazyInit(),this.tokens[index]},BufferedTokenStream.prototype.consume=function(){if(!(0<=this.index&&(this.fetchedEOF?this.index=this.tokens.length&&(stop=this.tokens.length-1);for(var i=start;i=this.tokens.length?this.tokens[this.tokens.length-1]:this.tokens[i]},BufferedTokenStream.prototype.adjustSeekIndex=function(i){return i},BufferedTokenStream.prototype.lazyInit=function(){-1===this.index&&this.setup()},BufferedTokenStream.prototype.setup=function(){this.sync(0),this.index=this.adjustSeekIndex(0)},BufferedTokenStream.prototype.setTokenSource=function(tokenSource){this.tokenSource=tokenSource,this.tokens=[],this.index=-1,this.fetchedEOF=!1},BufferedTokenStream.prototype.nextTokenOnChannel=function(i,channel){if(this.sync(i),i>=this.tokens.length)return-1;for(var token=this.tokens[i];token.channel!==this.channel;){if(token.type===Token.EOF)return-1;i+=1,this.sync(i),token=this.tokens[i]}return i},BufferedTokenStream.prototype.previousTokenOnChannel=function(i,channel){for(;0<=i&&this.tokens[i].channel!==channel;)--i;return i},BufferedTokenStream.prototype.getHiddenTokensToRight=function(tokenIndex,channel){if(void 0===channel&&(channel=-1),this.lazyInit(),tokenIndex<0||tokenIndex>=this.tokens.length)throw tokenIndex+" not in 0.."+this.tokens.length-1;var nextOnChannel=this.nextTokenOnChannel(tokenIndex+1,Lexer.DEFAULT_TOKEN_CHANNEL),from_=tokenIndex+1,to=-1===nextOnChannel?this.tokens.length-1:nextOnChannel;return this.filterForChannel(from_,to,channel)},BufferedTokenStream.prototype.getHiddenTokensToLeft=function(tokenIndex,channel){if(void 0===channel&&(channel=-1),this.lazyInit(),tokenIndex<0||tokenIndex>=this.tokens.length)throw tokenIndex+" not in 0.."+this.tokens.length-1;var prevOnChannel=this.previousTokenOnChannel(tokenIndex-1,Lexer.DEFAULT_TOKEN_CHANNEL);if(prevOnChannel===tokenIndex-1)return null;var from_=prevOnChannel+1,to=tokenIndex-1;return this.filterForChannel(from_,to,channel)},BufferedTokenStream.prototype.filterForChannel=function(left,right,channel){for(var hidden=[],i=left;i=this.tokens.length&&(stop=this.tokens.length-1);for(var s="",i=start;i=this._size)throw"cannot consume EOF";this._index+=1},InputStream.prototype.LA=function(offset){if(0===offset)return 0;offset<0&&(offset+=1);var pos=this._index+offset-1;return pos<0||pos>=this._size?Token.EOF:this.data[pos]},InputStream.prototype.LT=function(offset){return this.LA(offset)},InputStream.prototype.mark=function(){return-1},InputStream.prototype.release=function(marker){},InputStream.prototype.seek=function(_index){_index<=this._index?this._index=_index:this._index=Math.min(_index,this._size)},InputStream.prototype.getText=function(start,stop){if(stop>=this._size&&(stop=this._size-1),start>=this._size)return"";if(this.decodeToUnicodeCodePoints){for(var result="",i=start;i<=stop;i++)result+=String.fromCodePoint(this.data[i]);return result}return this.strdata.slice(start,stop+1)},InputStream.prototype.toString=function(){return this.strdata},exports.InputStream=InputStream},{"./Token":20,"./polyfills/codepointat":48,"./polyfills/fromcodepoint":49}],12:[function(require,module,exports){var Token=require("./Token").Token;function Interval(start,stop){return this.start=start,this.stop=stop,this}function IntervalSet(){this.intervals=null,this.readOnly=!1}Interval.prototype.contains=function(item){return item>=this.start&&item=r.stop?(this.intervals.pop(k+1),this.reduce(k)):l.stop>=r.start&&(this.intervals[k]=new Interval(l.start,r.stop),this.intervals.pop(k+1)))},IntervalSet.prototype.complement=function(start,stop){var result=new IntervalSet;result.addInterval(new Interval(start,stop+1));for(var i=0;ii.start&&v.stop=i.stop?(this.intervals.splice(k,1),--k):v.start"):names.push("'"+String.fromCharCode(v.start)+"'"):names.push("'"+String.fromCharCode(v.start)+"'..'"+String.fromCharCode(v.stop-1)+"'")}return 1"):names.push(v.start.toString()):names.push(v.start.toString()+".."+(v.stop-1).toString())}return 1":a===Token.EPSILON?"":literalNames[a]||symbolicNames[a]},exports.Interval=Interval,exports.IntervalSet=IntervalSet},{"./Token":20}],13:[function(require,module,exports){var Set=require("./Utils").Set,BitSet=require("./Utils").BitSet,Token=require("./Token").Token,ATNConfig=require("./atn/ATNConfig").ATNConfig,IntervalSet=(require("./IntervalSet").Interval,require("./IntervalSet").IntervalSet),RuleStopState=require("./atn/ATNState").RuleStopState,RuleTransition=require("./atn/Transition").RuleTransition,NotSetTransition=require("./atn/Transition").NotSetTransition,WildcardTransition=require("./atn/Transition").WildcardTransition,AbstractPredicateTransition=require("./atn/Transition").AbstractPredicateTransition,pc=require("./PredictionContext"),predictionContextFromRuleContext=pc.predictionContextFromRuleContext,PredictionContext=pc.PredictionContext,SingletonPredictionContext=pc.SingletonPredictionContext;function LL1Analyzer(atn){this.atn=atn}LL1Analyzer.HIT_PRED=Token.INVALID_TYPE,LL1Analyzer.prototype.getDecisionLookahead=function(s){if(null===s)return null;for(var count=s.transitions.length,look=[],alt=0;alt":"\n"===c?"\\n":"\t"===c?"\\t":"\r"===c?"\\r":c},Lexer.prototype.getCharErrorDisplay=function(c){return"'"+this.getErrorDisplayForChar(c)+"'"},Lexer.prototype.recover=function(re){this._input.LA(1)!==Token.EOF&&(re instanceof LexerNoViableAltException?this._interp.consume(this._input):this._input.consume())},exports.Lexer=Lexer},{"./CommonTokenFactory":8,"./Recognizer":18,"./Token":20,"./error/Errors":45}],15:[function(require,module,exports){var Token=require("./Token").Token,ParseTreeListener=require("./tree/Tree").ParseTreeListener,Recognizer=require("./Recognizer").Recognizer,DefaultErrorStrategy=require("./error/ErrorStrategy").DefaultErrorStrategy,ATNDeserializer=require("./atn/ATNDeserializer").ATNDeserializer,ATNDeserializationOptions=require("./atn/ATNDeserializationOptions").ATNDeserializationOptions,TerminalNode=require("./tree/Tree").TerminalNode,ErrorNode=require("./tree/Tree").ErrorNode;function TraceListener(parser){return ParseTreeListener.call(this),this.parser=parser,this}function Parser(input){return Recognizer.call(this),this._input=null,this._errHandler=new DefaultErrorStrategy,this._precedenceStack=[],this._precedenceStack.push(0),this._ctx=null,this.buildParseTrees=!0,this._tracer=null,this._parseListeners=null,this._syntaxErrors=0,this.setInputStream(input),this}((TraceListener.prototype=Object.create(ParseTreeListener.prototype)).constructor=TraceListener).prototype.enterEveryRule=function(ctx){console.log("enter "+this.parser.ruleNames[ctx.ruleIndex]+", LT(1)="+this.parser._input.LT(1).text)},TraceListener.prototype.visitTerminal=function(node){console.log("consume "+node.symbol+" rule "+this.parser.ruleNames[this.parser._ctx.ruleIndex])},TraceListener.prototype.exitEveryRule=function(ctx){console.log("exit "+this.parser.ruleNames[ctx.ruleIndex]+", LT(1)="+this.parser._input.LT(1).text)},((Parser.prototype=Object.create(Recognizer.prototype)).contructor=Parser).bypassAltsAtnCache={},Parser.prototype.reset=function(){null!==this._input&&this._input.seek(0),this._errHandler.reset(this),this._ctx=null,this._syntaxErrors=0,this.setTrace(!1),this._precedenceStack=[],this._precedenceStack.push(0),null!==this._interp&&this._interp.reset()},Parser.prototype.match=function(ttype){var t=this.getCurrentToken();return t.type===ttype?(this._errHandler.reportMatch(this),this.consume()):(t=this._errHandler.recoverInline(this),this.buildParseTrees&&-1===t.tokenIndex&&this._ctx.addErrorNode(t)),t},Parser.prototype.matchWildcard=function(){var t=this.getCurrentToken();return 0=this._precedenceStack[this._precedenceStack.length-1]},Parser.prototype.inContext=function(context){return!1},Parser.prototype.isExpectedToken=function(symbol){var atn=this._interp.atn,ctx=this._ctx,s=atn.states[this.state];if((following=atn.nextTokens(s)).contains(symbol))return!0;if(!following.contains(Token.EPSILON))return!1;for(;null!==ctx&&0<=ctx.invokingState&&following.contains(Token.EPSILON);){var following,rt=atn.states[ctx.invokingState].transitions[0];if((following=atn.nextTokens(rt.followState)).contains(symbol))return!0;ctx=ctx.parentCtx}return!(!following.contains(Token.EPSILON)||symbol!==Token.EOF)},Parser.prototype.getExpectedTokens=function(){return this._interp.atn.getExpectedTokens(this.state,this._ctx)},Parser.prototype.getExpectedTokensWithinCurrentRule=function(){var atn=this._interp.atn,s=atn.states[this.state];return atn.nextTokens(s)},Parser.prototype.getRuleIndex=function(ruleName){var ruleIndex=this.getRuleIndexMap()[ruleName];return null!==ruleIndex?ruleIndex:-1},Parser.prototype.getRuleInvocationStack=function(p){null===(p=p||null)&&(p=this._ctx);for(var stack=[];null!==p;){var ruleIndex=p.ruleIndex;ruleIndex<0?stack.push("n/a"):stack.push(this.ruleNames[ruleIndex]),p=p.parentCtx}return stack},Parser.prototype.getDFAStrings=function(){return this._interp.decisionToDFA.toString()},Parser.prototype.dumpDFA=function(){for(var seenOne=!1,i=0;i=this.children.length)return null;if(null===type)return this.children[i];for(var j=0;j=this.children.length)return null;for(var j=0;jb.returnState&&(payloads[0]=b.returnState,payloads[1]=a.returnState);var apc=new ArrayPredictionContext(parents=[singleParent,singleParent],payloads);return null!==mergeCache&&mergeCache.set(a,b,apc),apc}var payloads=[a.returnState,b.returnState],parents=[a.parentCtx,b.parentCtx];a.returnState>b.returnState&&(payloads[0]=b.returnState,payloads[1]=a.returnState,parents=[b.parentCtx,a.parentCtx]);var a_=new ArrayPredictionContext(parents,payloads);return null!==mergeCache&&mergeCache.set(a,b,a_),a_}}(a,b,rootIsWildcard,mergeCache);if(rootIsWildcard){if(a instanceof EmptyPredictionContext)return a;if(b instanceof EmptyPredictionContext)return b}return a instanceof SingletonPredictionContext&&(a=new ArrayPredictionContext([a.getParent()],[a.returnState])),b instanceof SingletonPredictionContext&&(b=new ArrayPredictionContext([b.getParent()],[b.returnState])),function(a,b,rootIsWildcard,mergeCache){if(null!==mergeCache){var previous=mergeCache.get(a,b);if(null!==previous)return previous;if(null!==(previous=mergeCache.get(b,a)))return previous}var i=0,j=0,k=0,mergedReturnStates=[],mergedParents=[];for(;i";var s=t.text;return null===s&&(s=t.type===Token.EOF?"":"<"+t.type+">"),"'"+(s=s.replace("\n","\\n").replace("\r","\\r").replace("\t","\\t"))+"'"},Recognizer.prototype.getErrorListenerDispatch=function(){return new ProxyErrorListener(this._listeners)},Recognizer.prototype.sempred=function(localctx,ruleIndex,actionIndex){return!0},Recognizer.prototype.precpred=function(localctx,precedence){return!0},Object.defineProperty(Recognizer.prototype,"state",{get:function(){return this._stateNumber},set:function(state){this._stateNumber=state}}),exports.Recognizer=Recognizer},{"./Token":20,"./error/ErrorListener":43}],19:[function(require,module,exports){var RuleNode=require("./tree/Tree").RuleNode,INVALID_INTERVAL=require("./tree/Tree").INVALID_INTERVAL,INVALID_ALT_NUMBER=require("./atn/ATN").INVALID_ALT_NUMBER;function RuleContext(parent,invokingState){return RuleNode.call(this),this.parentCtx=parent||null,this.invokingState=invokingState||-1,this}((RuleContext.prototype=Object.create(RuleNode.prototype)).constructor=RuleContext).prototype.depth=function(){for(var n=0,p=this;null!==p;)p=p.parentCtx,n+=1;return n},RuleContext.prototype.isEmpty=function(){return-1===this.invokingState},RuleContext.prototype.getSourceInterval=function(){return INVALID_INTERVAL},RuleContext.prototype.getRuleContext=function(){return this},RuleContext.prototype.getPayload=function(){return this},RuleContext.prototype.getText=function(){return 0===this.getChildCount()?"":this.children.map(function(child){return child.getText()}).join("")},RuleContext.prototype.getAltNumber=function(){return INVALID_ALT_NUMBER},RuleContext.prototype.setAltNumber=function(altNumber){},RuleContext.prototype.getChild=function(i){return null},RuleContext.prototype.getChildCount=function(){return 0},RuleContext.prototype.accept=function(visitor){return visitor.visitChildren(this)},exports.RuleContext=RuleContext;var Trees=require("./tree/Trees").Trees;RuleContext.prototype.toStringTree=function(ruleNames,recog){return Trees.toStringTree(this,ruleNames,recog)},RuleContext.prototype.toString=function(ruleNames,stop){ruleNames=ruleNames||null,stop=stop||null;for(var ri,p=this,s="[";null!==p&&p!==stop;){null===ruleNames?p.isEmpty()||(s+=p.invokingState):s+=0<=(ri=p.ruleIndex)&&ri"},set:function(text){this._text=text}}),CommonToken.prototype.toString=function(){var txt=null!==(txt=this.text)?txt.replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t"):"";return"[@"+this.tokenIndex+","+this.start+":"+this.stop+"='"+txt+"',<"+this.type+">"+(0>>16)*c1&65535)<<16)&4294967295)<<15|k1>>>17))*c2+(((k1>>>16)*c2&65535)<<16)&4294967295)<<13|h1>>>19))+((5*(h1>>>16)&65535)<<16)&4294967295))+((58964+(h1b>>>16)&65535)<<16);switch(k1=0,remainder){case 3:k1^=(255&key.charCodeAt(i+2))<<16;case 2:k1^=(255&key.charCodeAt(i+1))<<8;case 1:h1^=k1=(65535&(k1=(k1=(65535&(k1^=255&key.charCodeAt(i)))*c1+(((k1>>>16)*c1&65535)<<16)&4294967295)<<15|k1>>>17))*c2+(((k1>>>16)*c2&65535)<<16)&4294967295}return h1^=key.length,h1=2246822507*(65535&(h1^=h1>>>16))+((2246822507*(h1>>>16)&65535)<<16)&4294967295,h1=3266489909*(65535&(h1^=h1>>>13))+((3266489909*(h1>>>16)&65535)<<16)&4294967295,(h1^=h1>>>16)>>>0},Object.defineProperty(Set.prototype,"length",{get:function(){var l=0;for(var key in this.data)0===key.indexOf("hash_")&&(l+=this.data[key].length);return l}}),Set.prototype.add=function(value){var key="hash_"+this.hashFunction(value);if(key in this.data){for(var values=this.data[key],i=0;i>>17,k*=461845907,this.count=this.count+1;var hash=this.hash^k;hash=5*(hash=hash<<13|hash>>>19)+3864292196,this.hash=hash}}},Hash.prototype.finish=function(){var hash=this.hash^4*this.count;return hash^=hash>>>16,hash*=2246822507,hash^=hash>>>13,hash*=3266489909,hash^=hash>>>16},DoubleDict.prototype.get=function(a,b){var d=this[a]||null;return null!==d&&d[b]||null},DoubleDict.prototype.set=function(a,b,o){var d=this[a]||null;null===d&&(d={},this[a]=d),d[b]=o},exports.Hash=Hash,exports.Set=Set,exports.Map=Map,exports.BitSet=BitSet,exports.AltDict=AltDict,exports.DoubleDict=DoubleDict,exports.hashStuff=function(){var hash=new Hash;return hash.update.apply(arguments),hash.finish()},exports.escapeWhitespace=function(s,escapeSpaces){return s=s.replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r"),escapeSpaces&&(s=s.replace(/ /g,"\xb7")),s},exports.arrayToString=arrayToString,exports.titleCase=function(str){return str.replace(/\w\S*/g,function(txt){return txt.charAt(0).toUpperCase()+txt.substr(1)})},exports.equalArrays=function(a,b){if(!Array.isArray(a)||!Array.isArray(b))return!1;if(a==b)return!0;if(a.length!=b.length)return!1;for(var i=0;i=this.states.length)throw"Invalid state number.";var s=this.states[stateNumber];if(!(following=this.nextTokens(s)).contains(Token.EPSILON))return following;var expected=new IntervalSet;for(expected.addSet(following),expected.removeOne(Token.EPSILON);null!==ctx&&0<=ctx.invokingState&&following.contains(Token.EPSILON);){var rt=this.states[ctx.invokingState].transitions[0],following=this.nextTokens(rt.followState);expected.addSet(following),expected.removeOne(Token.EPSILON),ctx=ctx.parentCtx}return following.contains(Token.EPSILON)&&expected.addOne(Token.EOF),expected},ATN.INVALID_ALT_NUMBER=0,exports.ATN=ATN},{"./../IntervalSet":12,"./../LL1Analyzer":13,"./../Token":20}],23:[function(require,module,exports){var DecisionState=require("./ATNState").DecisionState,SemanticContext=require("./SemanticContext").SemanticContext,Hash=require("../Utils").Hash;function checkParams(params,isCfg){if(null===params){var result={state:null,alt:null,context:null,semanticContext:null};return isCfg&&(result.reachesIntoOuterContext=0),result}var props={};return props.state=params.state||null,props.alt=void 0===params.alt?null:params.alt,props.context=params.context||null,props.semanticContext=params.semanticContext||null,isCfg&&(props.reachesIntoOuterContext=params.reachesIntoOuterContext||0,props.precedenceFilterSuppressed=params.precedenceFilterSuppressed||!1),props}function ATNConfig(params,config){return this.checkContext(params,config),params=checkParams(params),config=checkParams(config,!0),this.state=null!==params.state?params.state:config.state,this.alt=null!==params.alt?params.alt:config.alt,this.context=null!==params.context?params.context:config.context,this.semanticContext=null!==params.semanticContext?params.semanticContext:null!==config.semanticContext?config.semanticContext:SemanticContext.NONE,this.reachesIntoOuterContext=config.reachesIntoOuterContext,this.precedenceFilterSuppressed=config.precedenceFilterSuppressed,this}function LexerATNConfig(params,config){ATNConfig.call(this,params,config);var lexerActionExecutor=params.lexerActionExecutor||null;return this.lexerActionExecutor=lexerActionExecutor||(null!==config?config.lexerActionExecutor:null),this.passedThroughNonGreedyDecision=null!==config&&this.checkNonGreedyDecision(config,this.state),this}ATNConfig.prototype.checkContext=function(params,config){null!==params.context&&void 0!==params.context||null!==config&&null!==config.context&&void 0!==config.context||(this.context=null)},ATNConfig.prototype.hashCode=function(){var hash=new Hash;return this.updateHashCode(hash),hash.finish()},ATNConfig.prototype.updateHashCode=function(hash){hash.update(this.state.stateNumber,this.alt,this.context,this.semanticContext)},ATNConfig.prototype.equals=function(other){return this===other||other instanceof ATNConfig&&(this.state.stateNumber===other.state.stateNumber&&this.alt===other.alt&&(null===this.context?null===other.context:this.context.equals(other.context))&&this.semanticContext.equals(other.semanticContext)&&this.precedenceFilterSuppressed===other.precedenceFilterSuppressed)},ATNConfig.prototype.hashCodeForConfigSet=function(){var hash=new Hash;return hash.update(this.state.stateNumber,this.alt,this.semanticContext),hash.finish()},ATNConfig.prototype.equalsForConfigSet=function(other){return this===other||other instanceof ATNConfig&&(this.state.stateNumber===other.state.stateNumber&&this.alt===other.alt&&this.semanticContext.equals(other.semanticContext))},ATNConfig.prototype.toString=function(){return"("+this.state+","+this.alt+(null!==this.context?",["+this.context.toString()+"]":"")+(this.semanticContext!==SemanticContext.NONE?","+this.semanticContext.toString():"")+(0>8&255}return byteToHex[bb[0]]+byteToHex[bb[1]]+byteToHex[bb[2]]+byteToHex[bb[3]]+"-"+byteToHex[bb[4]]+byteToHex[bb[5]]+"-"+byteToHex[bb[6]]+byteToHex[bb[7]]+"-"+byteToHex[bb[8]]+byteToHex[bb[9]]+"-"+byteToHex[bb[10]]+byteToHex[bb[11]]+byteToHex[bb[12]]+byteToHex[bb[13]]+byteToHex[bb[14]]+byteToHex[bb[15]]},ATNDeserializer.prototype.edgeFactory=function(atn,type,src,trg,arg1,arg2,arg3,sets){var target=atn.states[trg];switch(type){case Transition.EPSILON:return new EpsilonTransition(target);case Transition.RANGE:return new RangeTransition(target,0!==arg3?Token.EOF:arg1,arg2);case Transition.RULE:return new RuleTransition(atn.states[arg1],arg2,arg3,target);case Transition.PREDICATE:return new PredicateTransition(target,arg1,arg2,0!==arg3);case Transition.PRECEDENCE:return new PrecedencePredicateTransition(target,arg1);case Transition.ATOM:return new AtomTransition(target,0!==arg3?Token.EOF:arg1);case Transition.ACTION:return new ActionTransition(target,arg1,arg2,0!==arg3);case Transition.SET:return new SetTransition(target,sets[arg1]);case Transition.NOT_SET:return new NotSetTransition(target,sets[arg1]);case Transition.WILDCARD:return new WildcardTransition(target);default:throw"The specified transition type: "+type+" is not valid."}},ATNDeserializer.prototype.stateFactory=function(type,ruleIndex){var sf;if(null===this.stateFactories&&((sf=[])[ATNState.INVALID_TYPE]=null,sf[ATNState.BASIC]=function(){return new BasicState},sf[ATNState.RULE_START]=function(){return new RuleStartState},sf[ATNState.BLOCK_START]=function(){return new BasicBlockStartState},sf[ATNState.PLUS_BLOCK_START]=function(){return new PlusBlockStartState},sf[ATNState.STAR_BLOCK_START]=function(){return new StarBlockStartState},sf[ATNState.TOKEN_START]=function(){return new TokensStartState},sf[ATNState.RULE_STOP]=function(){return new RuleStopState},sf[ATNState.BLOCK_END]=function(){return new BlockEndState},sf[ATNState.STAR_LOOP_BACK]=function(){return new StarLoopbackState},sf[ATNState.STAR_LOOP_ENTRY]=function(){return new StarLoopEntryState},sf[ATNState.PLUS_LOOP_BACK]=function(){return new PlusLoopbackState},sf[ATNState.LOOP_END]=function(){return new LoopEndState},this.stateFactories=sf),type>this.stateFactories.length||null===this.stateFactories[type])throw"The specified state type "+type+" is not valid.";var s=this.stateFactories[type]();if(null!==s)return s.ruleIndex=ruleIndex,s},ATNDeserializer.prototype.lexerActionFactory=function(type,data1,data2){var af;if(null===this.actionFactories&&((af=[])[LexerActionType.CHANNEL]=function(data1,data2){return new LexerChannelAction(data1)},af[LexerActionType.CUSTOM]=function(data1,data2){return new LexerCustomAction(data1,data2)},af[LexerActionType.MODE]=function(data1,data2){return new LexerModeAction(data1)},af[LexerActionType.MORE]=function(data1,data2){return LexerMoreAction.INSTANCE},af[LexerActionType.POP_MODE]=function(data1,data2){return LexerPopModeAction.INSTANCE},af[LexerActionType.PUSH_MODE]=function(data1,data2){return new LexerPushModeAction(data1)},af[LexerActionType.SKIP]=function(data1,data2){return LexerSkipAction.INSTANCE},af[LexerActionType.TYPE]=function(data1,data2){return new LexerTypeAction(data1)},this.actionFactories=af),type>this.actionFactories.length||null===this.actionFactories[type])throw"The specified lexer action type "+type+" is not valid.";return this.actionFactories[type](data1,data2)},exports.ATNDeserializer=ATNDeserializer},{"./../IntervalSet":12,"./../Token":20,"./ATN":22,"./ATNDeserializationOptions":25,"./ATNState":28,"./ATNType":29,"./LexerAction":31,"./Transition":36}],27:[function(require,module,exports){var DFAState=require("./../dfa/DFAState").DFAState,ATNConfigSet=require("./ATNConfigSet").ATNConfigSet,getCachedPredictionContext=require("./../PredictionContext").getCachedPredictionContext;function ATNSimulator(atn,sharedContextCache){return this.atn=atn,this.sharedContextCache=sharedContextCache,this}ATNSimulator.ERROR=new DFAState(2147483647,new ATNConfigSet),ATNSimulator.prototype.getCachedContext=function(context){if(null===this.sharedContextCache)return context;return getCachedPredictionContext(context,this.sharedContextCache,{})},exports.ATNSimulator=ATNSimulator},{"./../PredictionContext":17,"./../dfa/DFAState":40,"./ATNConfigSet":24}],28:[function(require,module,exports){function ATNState(){return this.atn=null,this.stateNumber=ATNState.INVALID_STATE_NUMBER,this.stateType=null,this.ruleIndex=0,this.epsilonOnlyTransitions=!1,this.transitions=[],this.nextTokenWithinRule=null,this}function BasicState(){return ATNState.call(this),this.stateType=ATNState.BASIC,this}function DecisionState(){return ATNState.call(this),this.decision=-1,this.nonGreedy=!1,this}function BlockStartState(){return DecisionState.call(this),this.endState=null,this}function BasicBlockStartState(){return BlockStartState.call(this),this.stateType=ATNState.BLOCK_START,this}function BlockEndState(){return ATNState.call(this),this.stateType=ATNState.BLOCK_END,this.startState=null,this}function RuleStopState(){return ATNState.call(this),this.stateType=ATNState.RULE_STOP,this}function RuleStartState(){return ATNState.call(this),this.stateType=ATNState.RULE_START,this.stopState=null,this.isPrecedenceRule=!1,this}function PlusLoopbackState(){return DecisionState.call(this),this.stateType=ATNState.PLUS_LOOP_BACK,this}function PlusBlockStartState(){return BlockStartState.call(this),this.stateType=ATNState.PLUS_BLOCK_START,this.loopBackState=null,this}function StarBlockStartState(){return BlockStartState.call(this),this.stateType=ATNState.STAR_BLOCK_START,this}function StarLoopbackState(){return ATNState.call(this),this.stateType=ATNState.STAR_LOOP_BACK,this}function StarLoopEntryState(){return DecisionState.call(this),this.stateType=ATNState.STAR_LOOP_ENTRY,this.loopBackState=null,this.isPrecedenceDecision=null,this}function LoopEndState(){return ATNState.call(this),this.stateType=ATNState.LOOP_END,this.loopBackState=null,this}function TokensStartState(){return DecisionState.call(this),this.stateType=ATNState.TOKEN_START,this}ATNState.INVALID_TYPE=0,ATNState.BASIC=1,ATNState.RULE_START=2,ATNState.BLOCK_START=3,ATNState.PLUS_BLOCK_START=4,ATNState.STAR_BLOCK_START=5,ATNState.TOKEN_START=6,ATNState.RULE_STOP=7,ATNState.BLOCK_END=8,ATNState.STAR_LOOP_BACK=9,ATNState.STAR_LOOP_ENTRY=10,ATNState.PLUS_LOOP_BACK=11,ATNState.LOOP_END=12,ATNState.serializationNames=["INVALID","BASIC","RULE_START","BLOCK_START","PLUS_BLOCK_START","STAR_BLOCK_START","TOKEN_START","RULE_STOP","BLOCK_END","STAR_LOOP_BACK","STAR_LOOP_ENTRY","PLUS_LOOP_BACK","LOOP_END"],ATNState.INVALID_STATE_NUMBER=-1,ATNState.prototype.toString=function(){return this.stateNumber},ATNState.prototype.equals=function(other){return other instanceof ATNState&&this.stateNumber===other.stateNumber},ATNState.prototype.isNonGreedyExitState=function(){return!1},ATNState.prototype.addTransition=function(trans,index){void 0===index&&(index=-1),0===this.transitions.length?this.epsilonOnlyTransitions=trans.isEpsilon:this.epsilonOnlyTransitions!==trans.isEpsilon&&(this.epsilonOnlyTransitions=!1),-1===index?this.transitions.push(trans):this.transitions.splice(index,1,trans)},(BasicState.prototype=Object.create(ATNState.prototype)).constructor=BasicState,(DecisionState.prototype=Object.create(ATNState.prototype)).constructor=DecisionState,(BlockStartState.prototype=Object.create(DecisionState.prototype)).constructor=BlockStartState,(BasicBlockStartState.prototype=Object.create(BlockStartState.prototype)).constructor=BasicBlockStartState,(BlockEndState.prototype=Object.create(ATNState.prototype)).constructor=BlockEndState,(RuleStopState.prototype=Object.create(ATNState.prototype)).constructor=RuleStopState,(RuleStartState.prototype=Object.create(ATNState.prototype)).constructor=RuleStartState,(PlusLoopbackState.prototype=Object.create(DecisionState.prototype)).constructor=PlusLoopbackState,(PlusBlockStartState.prototype=Object.create(BlockStartState.prototype)).constructor=PlusBlockStartState,(StarBlockStartState.prototype=Object.create(BlockStartState.prototype)).constructor=StarBlockStartState,(StarLoopbackState.prototype=Object.create(ATNState.prototype)).constructor=StarLoopbackState,(StarLoopEntryState.prototype=Object.create(DecisionState.prototype)).constructor=StarLoopEntryState,(LoopEndState.prototype=Object.create(ATNState.prototype)).constructor=LoopEndState,(TokensStartState.prototype=Object.create(DecisionState.prototype)).constructor=TokensStartState,exports.ATNState=ATNState,exports.BasicState=BasicState,exports.DecisionState=DecisionState,exports.BlockStartState=BlockStartState,exports.BlockEndState=BlockEndState,exports.LoopEndState=LoopEndState,exports.RuleStartState=RuleStartState,exports.RuleStopState=RuleStopState,exports.TokensStartState=TokensStartState,exports.PlusLoopbackState=PlusLoopbackState,exports.StarLoopbackState=StarLoopbackState,exports.StarLoopEntryState=StarLoopEntryState,exports.PlusBlockStartState=PlusBlockStartState,exports.StarBlockStartState=StarBlockStartState,exports.BasicBlockStartState=BasicBlockStartState},{}],29:[function(require,module,exports){function ATNType(){}ATNType.LEXER=0,ATNType.PARSER=1,exports.ATNType=ATNType},{}],30:[function(require,module,exports){var Token=require("./../Token").Token,Lexer=require("./../Lexer").Lexer,ATN=require("./ATN").ATN,ATNSimulator=require("./ATNSimulator").ATNSimulator,DFAState=require("./../dfa/DFAState").DFAState,OrderedATNConfigSet=(require("./ATNConfigSet").ATNConfigSet,require("./ATNConfigSet").OrderedATNConfigSet),PredictionContext=require("./../PredictionContext").PredictionContext,SingletonPredictionContext=require("./../PredictionContext").SingletonPredictionContext,RuleStopState=require("./ATNState").RuleStopState,LexerATNConfig=require("./ATNConfig").LexerATNConfig,Transition=require("./Transition").Transition,LexerActionExecutor=require("./LexerActionExecutor").LexerActionExecutor,LexerNoViableAltException=require("./../error/Errors").LexerNoViableAltException;function resetSimState(sim){sim.index=-1,sim.line=0,sim.column=-1,sim.dfaState=null}function SimState(){return resetSimState(this),this}function LexerATNSimulator(recog,atn,decisionToDFA,sharedContextCache){return ATNSimulator.call(this,atn,sharedContextCache),this.decisionToDFA=decisionToDFA,this.recog=recog,this.startIndex=-1,this.line=1,this.column=0,this.mode=Lexer.DEFAULT_MODE,this.prevAccept=new SimState,this}SimState.prototype.reset=function(){resetSimState(this)},((LexerATNSimulator.prototype=Object.create(ATNSimulator.prototype)).constructor=LexerATNSimulator).debug=!1,LexerATNSimulator.dfa_debug=!1,LexerATNSimulator.MIN_DFA_EDGE=0,LexerATNSimulator.MAX_DFA_EDGE=127,LexerATNSimulator.match_calls=0,LexerATNSimulator.prototype.copyState=function(simulator){this.column=simulator.column,this.line=simulator.line,this.mode=simulator.mode,this.startIndex=simulator.startIndex},LexerATNSimulator.prototype.match=function(input,mode){this.match_calls+=1,this.mode=mode;var mark=input.mark();try{this.startIndex=input.index,this.prevAccept.reset();var dfa=this.decisionToDFA[mode];return null===dfa.s0?this.matchATN(input):this.execATN(input,dfa.s0)}finally{input.release(mark)}},LexerATNSimulator.prototype.reset=function(){this.prevAccept.reset(),this.startIndex=-1,this.line=1,this.column=0,this.mode=Lexer.DEFAULT_MODE},LexerATNSimulator.prototype.matchATN=function(input){var startState=this.atn.modeToStartState[this.mode];LexerATNSimulator.debug&&console.log("matchATN mode "+this.mode+" start: "+startState);var old_mode=this.mode,s0_closure=this.computeStartState(input,startState),suppressEdge=s0_closure.hasSemanticContext;s0_closure.hasSemanticContext=!1;var next=this.addDFAState(s0_closure);suppressEdge||(this.decisionToDFA[this.mode].s0=next);var predict=this.execATN(input,next);return LexerATNSimulator.debug&&console.log("DFA after matchATN: "+this.decisionToDFA[old_mode].toLexerString()),predict},LexerATNSimulator.prototype.execATN=function(input,ds0){LexerATNSimulator.debug&&console.log("start state closure="+ds0.configs),ds0.isAcceptState&&this.captureSimState(this.prevAccept,input,ds0);for(var t=input.LA(1),s=ds0;;){LexerATNSimulator.debug&&console.log("execATN loop starting closure: "+s.configs);var target=this.getExistingTargetState(s,t);if(null===target&&(target=this.computeTargetState(input,s,t)),target===ATNSimulator.ERROR)break;if(t!==Token.EOF&&this.consume(input),target.isAcceptState&&(this.captureSimState(this.prevAccept,input,target),t===Token.EOF))break;t=input.LA(1),s=target}return this.failOrAccept(this.prevAccept,input,s.configs,t)},LexerATNSimulator.prototype.getExistingTargetState=function(s,t){if(null===s.edges||t "+to+" upon "+tk),null===from_.edges&&(from_.edges=[]),from_.edges[tk-LexerATNSimulator.MIN_DFA_EDGE]=to)},LexerATNSimulator.prototype.addDFAState=function(configs){for(var proposed=new DFAState(null,configs),firstConfigWithRuleStopState=null,i=0;i"},ParserATNSimulator.prototype.getEpsilonTarget=function(config,t,collectPredicates,inContext,fullCtx,treatEofAsEpsilon){switch(t.serializationType){case Transition.RULE:return this.ruleTransition(config,t);case Transition.PRECEDENCE:return this.precedenceTransition(config,t,collectPredicates,inContext,fullCtx);case Transition.PREDICATE:return this.predTransition(config,t,collectPredicates,inContext,fullCtx);case Transition.ACTION:return this.actionTransition(config,t);case Transition.EPSILON:return new ATNConfig({state:t.target},config);case Transition.ATOM:case Transition.RANGE:case Transition.SET:return treatEofAsEpsilon&&t.matches(Token.EOF,0,1)?new ATNConfig({state:t.target},config):null;default:return null}},ParserATNSimulator.prototype.actionTransition=function(config,t){var index;return this.debug&&(index=-1==t.actionIndex?65535:t.actionIndex,console.log("ACTION edge "+t.ruleIndex+":"+index)),new ATNConfig({state:t.target},config)},ParserATNSimulator.prototype.precedenceTransition=function(config,pt,collectPredicates,inContext,fullCtx){this.debug&&(console.log("PRED (collectPredicates="+collectPredicates+") "+pt.precedence+">=_p, ctx dependent=true"),null!==this.parser&&console.log("context surrounding pred is "+Utils.arrayToString(this.parser.getRuleInvocationStack())));var currentPosition,predSucceeds,newSemCtx,c=null;return collectPredicates&&inContext?fullCtx?(currentPosition=this._input.index,this._input.seek(this._startIndex),predSucceeds=pt.getPredicate().evaluate(this.parser,this._outerContext),this._input.seek(currentPosition),predSucceeds&&(c=new ATNConfig({state:pt.target},config))):(newSemCtx=SemanticContext.andContext(config.semanticContext,pt.getPredicate()),c=new ATNConfig({state:pt.target,semanticContext:newSemCtx},config)):c=new ATNConfig({state:pt.target},config),this.debug&&console.log("config from pred transition="+c),c},ParserATNSimulator.prototype.predTransition=function(config,pt,collectPredicates,inContext,fullCtx){this.debug&&(console.log("PRED (collectPredicates="+collectPredicates+") "+pt.ruleIndex+":"+pt.predIndex+", ctx dependent="+pt.isCtxDependent),null!==this.parser&&console.log("context surrounding pred is "+Utils.arrayToString(this.parser.getRuleInvocationStack())));var currentPosition,predSucceeds,newSemCtx,c=null;return collectPredicates&&(pt.isCtxDependent&&inContext||!pt.isCtxDependent)?fullCtx?(currentPosition=this._input.index,this._input.seek(this._startIndex),predSucceeds=pt.getPredicate().evaluate(this.parser,this._outerContext),this._input.seek(currentPosition),predSucceeds&&(c=new ATNConfig({state:pt.target},config))):(newSemCtx=SemanticContext.andContext(config.semanticContext,pt.getPredicate()),c=new ATNConfig({state:pt.target,semanticContext:newSemCtx},config)):c=new ATNConfig({state:pt.target},config),this.debug&&console.log("config from pred transition="+c),c},ParserATNSimulator.prototype.ruleTransition=function(config,t){this.debug&&console.log("CALL rule "+this.getRuleName(t.target.ruleIndex)+", ctx="+config.context);var returnState=t.followState,newContext=SingletonPredictionContext.create(config.context,returnState.stateNumber);return new ATNConfig({state:t.target,context:newContext},config)},ParserATNSimulator.prototype.getConflictingAlts=function(configs){var altsets=PredictionMode.getConflictingAltSubsets(configs);return PredictionMode.getAlts(altsets)},ParserATNSimulator.prototype.getConflictingAltsOrUniqueAlt=function(configs){var conflictingAlts=null;return configs.uniqueAlt!==ATN.INVALID_ALT_NUMBER?(conflictingAlts=new BitSet).add(configs.uniqueAlt):conflictingAlts=configs.conflictingAlts,conflictingAlts},ParserATNSimulator.prototype.getTokenName=function(t){if(t===Token.EOF)return"EOF";if(null!==this.parser&&null!==this.parser.literalNames){if(!(t>=this.parser.literalNames.length&&t>=this.parser.symbolicNames.length))return(this.parser.literalNames[t]||this.parser.symbolicNames[t])+"<"+t+">";console.log(t+" ttype out of range: "+this.parser.literalNames),console.log(""+this.parser.getInputStream().getTokens())}return""+t},ParserATNSimulator.prototype.getLookaheadName=function(input){return this.getTokenName(input.LA(1))},ParserATNSimulator.prototype.dumpDeadEndConfigs=function(nvae){console.log("dead end configs: ");for(var decs=nvae.getDeadEndConfigs(),i=0;i "+to+" upon "+this.getTokenName(t)),null===to?null:(to=this.addDFAState(dfa,to),null===from_||t<-1||t>this.atn.maxTokenType||(null===from_.edges&&(from_.edges=[]),from_.edges[t+1]=to,this.debug&&(literalNames=null===this.parser?null:this.parser.literalNames,symbolicNames=null===this.parser?null:this.parser.symbolicNames,console.log("DFA=\n"+dfa.toString(literalNames,symbolicNames)))),to);var literalNames,symbolicNames},ParserATNSimulator.prototype.addDFAState=function(dfa,D){if(D==ATNSimulator.ERROR)return D;var existing=dfa.states.get(D);return null!==existing?existing:(D.stateNumber=dfa.states.length,D.configs.readOnly||(D.configs.optimizeConfigs(this),D.configs.setReadonly(!0)),dfa.states.add(D),this.debug&&console.log("adding new DFA state: "+D),D)},ParserATNSimulator.prototype.reportAttemptingFullContext=function(dfa,conflictingAlts,configs,startIndex,stopIndex){var interval;(this.debug||this.retry_debug)&&(interval=new Interval(startIndex,stopIndex+1),console.log("reportAttemptingFullContext decision="+dfa.decision+":"+configs+", input="+this.parser.getTokenStream().getText(interval))),null!==this.parser&&this.parser.getErrorListenerDispatch().reportAttemptingFullContext(this.parser,dfa,startIndex,stopIndex,conflictingAlts,configs)},ParserATNSimulator.prototype.reportContextSensitivity=function(dfa,prediction,configs,startIndex,stopIndex){var interval;(this.debug||this.retry_debug)&&(interval=new Interval(startIndex,stopIndex+1),console.log("reportContextSensitivity decision="+dfa.decision+":"+configs+", input="+this.parser.getTokenStream().getText(interval))),null!==this.parser&&this.parser.getErrorListenerDispatch().reportContextSensitivity(this.parser,dfa,startIndex,stopIndex,prediction,configs)},ParserATNSimulator.prototype.reportAmbiguity=function(dfa,D,startIndex,stopIndex,exact,ambigAlts,configs){var interval;(this.debug||this.retry_debug)&&(interval=new Interval(startIndex,stopIndex+1),console.log("reportAmbiguity "+ambigAlts+":"+configs+", input="+this.parser.getTokenStream().getText(interval))),null!==this.parser&&this.parser.getErrorListenerDispatch().reportAmbiguity(this.parser,dfa,startIndex,stopIndex,exact,ambigAlts,configs)},exports.ParserATNSimulator=ParserATNSimulator},{"./../IntervalSet":12,"./../ParserRuleContext":16,"./../PredictionContext":17,"./../RuleContext":19,"./../Token":20,"./../Utils":21,"./../dfa/DFAState":40,"./../error/Errors":45,"./ATN":22,"./ATNConfig":23,"./ATNConfigSet":24,"./ATNSimulator":27,"./ATNState":28,"./PredictionMode":34,"./SemanticContext":35,"./Transition":36}],34:[function(require,module,exports){require("./../Utils").Set;var Map=require("./../Utils").Map,BitSet=require("./../Utils").BitSet,AltDict=require("./../Utils").AltDict,ATN=require("./ATN").ATN,RuleStopState=require("./ATNState").RuleStopState,ATNConfigSet=require("./ATNConfigSet").ATNConfigSet,ATNConfig=require("./ATNConfig").ATNConfig,SemanticContext=require("./SemanticContext").SemanticContext,hashStuff=(require("../Utils").Hash,require("./../Utils").hashStuff);require("./../Utils").equalArrays;function PredictionMode(){return this}PredictionMode.SLL=0,PredictionMode.LL=1,PredictionMode.LL_EXACT_AMBIG_DETECTION=2,PredictionMode.hasSLLConflictTerminatingPrediction=function(mode,configs){if(PredictionMode.allConfigsInRuleStopStates(configs))return!0;if(mode===PredictionMode.SLL&&configs.hasSemanticContext){for(var dup=new ATNConfigSet,i=0;i=prec}?"},PrecedencePredicate.filterPrecedencePredicates=function(set){var result=[];return set.values().map(function(context){context instanceof PrecedencePredicate&&result.push(context)}),result},((AND.prototype=Object.create(SemanticContext.prototype)).constructor=AND).prototype.equals=function(other){return this===other||other instanceof AND&&this.opnds===other.opnds},AND.prototype.updateHashCode=function(hash){hash.update(this.opnds,"AND")},AND.prototype.evaluate=function(parser,outerContext){for(var i=0;i=this.start&&symbol<=this.stop},RangeTransition.prototype.toString=function(){return"'"+String.fromCharCode(this.start)+"'..'"+String.fromCharCode(this.stop)+"'"},(AbstractPredicateTransition.prototype=Object.create(Transition.prototype)).constructor=AbstractPredicateTransition,((PredicateTransition.prototype=Object.create(AbstractPredicateTransition.prototype)).constructor=PredicateTransition).prototype.matches=function(symbol,minVocabSymbol,maxVocabSymbol){return!1},PredicateTransition.prototype.getPredicate=function(){return new Predicate(this.ruleIndex,this.predIndex,this.isCtxDependent)},PredicateTransition.prototype.toString=function(){return"pred_"+this.ruleIndex+":"+this.predIndex},((ActionTransition.prototype=Object.create(Transition.prototype)).constructor=ActionTransition).prototype.matches=function(symbol,minVocabSymbol,maxVocabSymbol){return!1},ActionTransition.prototype.toString=function(){return"action_"+this.ruleIndex+":"+this.actionIndex},((SetTransition.prototype=Object.create(Transition.prototype)).constructor=SetTransition).prototype.matches=function(symbol,minVocabSymbol,maxVocabSymbol){return this.label.contains(symbol)},SetTransition.prototype.toString=function(){return this.label.toString()},((NotSetTransition.prototype=Object.create(SetTransition.prototype)).constructor=NotSetTransition).prototype.matches=function(symbol,minVocabSymbol,maxVocabSymbol){return minVocabSymbol<=symbol&&symbol<=maxVocabSymbol&&!SetTransition.prototype.matches.call(this,symbol,minVocabSymbol,maxVocabSymbol)},NotSetTransition.prototype.toString=function(){return"~"+SetTransition.prototype.toString.call(this)},((WildcardTransition.prototype=Object.create(Transition.prototype)).constructor=WildcardTransition).prototype.matches=function(symbol,minVocabSymbol,maxVocabSymbol){return minVocabSymbol<=symbol&&symbol<=maxVocabSymbol},WildcardTransition.prototype.toString=function(){return"."},((PrecedencePredicateTransition.prototype=Object.create(AbstractPredicateTransition.prototype)).constructor=PrecedencePredicateTransition).prototype.matches=function(symbol,minVocabSymbol,maxVocabSymbol){return!1},PrecedencePredicateTransition.prototype.getPredicate=function(){return new PrecedencePredicate(this.precedence)},PrecedencePredicateTransition.prototype.toString=function(){return this.precedence+" >= _p"},exports.Transition=Transition,exports.AtomTransition=AtomTransition,exports.SetTransition=SetTransition,exports.NotSetTransition=NotSetTransition,exports.RuleTransition=RuleTransition,exports.ActionTransition=ActionTransition,exports.EpsilonTransition=EpsilonTransition,exports.RangeTransition=RangeTransition,exports.WildcardTransition=WildcardTransition,exports.PredicateTransition=PredicateTransition,exports.PrecedencePredicateTransition=PrecedencePredicateTransition,exports.AbstractPredicateTransition=AbstractPredicateTransition},{"./../IntervalSet":12,"./../Token":20,"./SemanticContext":35}],37:[function(require,module,exports){exports.ATN=require("./ATN").ATN,exports.ATNDeserializer=require("./ATNDeserializer").ATNDeserializer,exports.LexerATNSimulator=require("./LexerATNSimulator").LexerATNSimulator,exports.ParserATNSimulator=require("./ParserATNSimulator").ParserATNSimulator,exports.PredictionMode=require("./PredictionMode").PredictionMode},{"./ATN":22,"./ATNDeserializer":26,"./LexerATNSimulator":30,"./ParserATNSimulator":33,"./PredictionMode":34}],38:[function(require,module,exports){var Set=require("../Utils").Set,DFAState=require("./DFAState").DFAState,StarLoopEntryState=require("../atn/ATNState").StarLoopEntryState,ATNConfigSet=require("./../atn/ATNConfigSet").ATNConfigSet,DFASerializer=require("./DFASerializer").DFASerializer,LexerDFASerializer=require("./DFASerializer").LexerDFASerializer;function DFA(atnStartState,decision){var precedenceState;return void 0===decision&&(decision=0),this.atnStartState=atnStartState,this.decision=decision,this._states=new Set,this.s0=null,this.precedenceDfa=!1,atnStartState instanceof StarLoopEntryState&&atnStartState.isPrecedenceDecision&&(this.precedenceDfa=!0,(precedenceState=new DFAState(null,new ATNConfigSet)).edges=[],precedenceState.isAcceptState=!1,precedenceState.requiresFullContext=!1,this.s0=precedenceState),this}DFA.prototype.getPrecedenceStartState=function(precedence){if(!this.precedenceDfa)throw"Only precedence DFAs may contain a precedence start state.";return!(precedence<0||precedence>=this.s0.edges.length)&&this.s0.edges[precedence]||null},DFA.prototype.setPrecedenceStartState=function(precedence,startState){if(!this.precedenceDfa)throw"Only precedence DFAs may contain a precedence start state.";precedence<0||(this.s0.edges[precedence]=startState)},DFA.prototype.setPrecedenceDfa=function(precedenceDfa){var precedenceState;this.precedenceDfa!==precedenceDfa&&(this._states=new DFAStatesSet,precedenceDfa?((precedenceState=new DFAState(null,new ATNConfigSet)).edges=[],precedenceState.isAcceptState=!1,precedenceState.requiresFullContext=!1,this.s0=precedenceState):this.s0=null,this.precedenceDfa=precedenceDfa)},Object.defineProperty(DFA.prototype,"states",{get:function(){return this._states}}),DFA.prototype.sortedStates=function(){return this._states.values().sort(function(a,b){return a.stateNumber-b.stateNumber})},DFA.prototype.toString=function(literalNames,symbolicNames){return literalNames=literalNames||null,symbolicNames=symbolicNames||null,null===this.s0?"":new DFASerializer(this,literalNames,symbolicNames).toString()},DFA.prototype.toLexerString=function(){return null===this.s0?"":new LexerDFASerializer(this).toString()},exports.DFA=DFA},{"../Utils":21,"../atn/ATNState":28,"./../atn/ATNConfigSet":24,"./DFASerializer":39,"./DFAState":40}],39:[function(require,module,exports){function DFASerializer(dfa,literalNames,symbolicNames){return this.dfa=dfa,this.literalNames=literalNames||[],this.symbolicNames=symbolicNames||[],this}function LexerDFASerializer(dfa){return DFASerializer.call(this,dfa,null),this}DFASerializer.prototype.toString=function(){if(null===this.dfa.s0)return null;for(var buf="",states=this.dfa.sortedStates(),i=0;i")).concat(this.getStateString(t))).concat("\n"))}}return 0===buf.length?null:buf},DFASerializer.prototype.getEdgeLabel=function(i){return 0===i?"EOF":null!==this.literalNames||null!==this.symbolicNames?this.literalNames[i-1]||this.symbolicNames[i-1]:String.fromCharCode(i-1)},DFASerializer.prototype.getStateString=function(s){var baseStateStr=(s.isAcceptState?":":"")+"s"+s.stateNumber+(s.requiresFullContext?"^":"");return s.isAcceptState?null!==s.predicates?baseStateStr+"=>"+s.predicates.toString():baseStateStr+"=>"+s.prediction.toString():baseStateStr},((LexerDFASerializer.prototype=Object.create(DFASerializer.prototype)).constructor=LexerDFASerializer).prototype.getEdgeLabel=function(i){return"'"+String.fromCharCode(i)+"'"},exports.DFASerializer=DFASerializer,exports.LexerDFASerializer=LexerDFASerializer},{}],40:[function(require,module,exports){var ATNConfigSet=require("./../atn/ATNConfigSet").ATNConfigSet,Utils=require("./../Utils"),Hash=Utils.Hash,Set=Utils.Set;function PredPrediction(pred,alt){return this.alt=alt,this.pred=pred,this}function DFAState(stateNumber,configs){return null===stateNumber&&(stateNumber=-1),null===configs&&(configs=new ATNConfigSet),this.stateNumber=stateNumber,this.configs=configs,this.edges=null,this.isAcceptState=!1,this.prediction=0,this.lexerActionExecutor=null,this.requiresFullContext=!1,this.predicates=null,this}PredPrediction.prototype.toString=function(){return"("+this.pred+", "+this.alt+")"},DFAState.prototype.getAltSet=function(){var alts=new Set;if(null!==this.configs)for(var i=0;i=ruleNames.length)return""+decision;var ruleName=ruleNames[ruleIndex]||null;return null===ruleName||0===ruleName.length?""+decision:decision+" ("+ruleName+")"},DiagnosticErrorListener.prototype.getConflictingAlts=function(reportedAlts,configs){if(null!==reportedAlts)return reportedAlts;for(var result=new BitSet,i=0;i":tokens.getText(new Interval(e.startToken.tokenIndex,e.offendingToken.tokenIndex)):"",msg="no viable alternative at input "+this.escapeWSAndQuote(input);recognizer.notifyErrorListeners(msg,e.offendingToken,e)},DefaultErrorStrategy.prototype.reportInputMismatch=function(recognizer,e){var msg="mismatched input "+this.getTokenErrorDisplay(e.offendingToken)+" expecting "+e.getExpectedTokens().toString(recognizer.literalNames,recognizer.symbolicNames);recognizer.notifyErrorListeners(msg,e.offendingToken,e)},DefaultErrorStrategy.prototype.reportFailedPredicate=function(recognizer,e){var msg="rule "+recognizer.ruleNames[recognizer._ctx.ruleIndex]+" "+e.message;recognizer.notifyErrorListeners(msg,e.offendingToken,e)},DefaultErrorStrategy.prototype.reportUnwantedToken=function(recognizer){var t,msg;this.inErrorRecoveryMode(recognizer)||(this.beginErrorCondition(recognizer),t=recognizer.getCurrentToken(),msg="extraneous input "+this.getTokenErrorDisplay(t)+" expecting "+this.getExpectedTokens(recognizer).toString(recognizer.literalNames,recognizer.symbolicNames),recognizer.notifyErrorListeners(msg,t,null))},DefaultErrorStrategy.prototype.reportMissingToken=function(recognizer){var t,msg;this.inErrorRecoveryMode(recognizer)||(this.beginErrorCondition(recognizer),t=recognizer.getCurrentToken(),msg="missing "+this.getExpectedTokens(recognizer).toString(recognizer.literalNames,recognizer.symbolicNames)+" at "+this.getTokenErrorDisplay(t),recognizer.notifyErrorListeners(msg,t,null))},DefaultErrorStrategy.prototype.recoverInline=function(recognizer){var matchedSymbol=this.singleTokenDeletion(recognizer);if(null!==matchedSymbol)return recognizer.consume(),matchedSymbol;if(this.singleTokenInsertion(recognizer))return this.getMissingSymbol(recognizer);throw new InputMismatchException(recognizer)},DefaultErrorStrategy.prototype.singleTokenInsertion=function(recognizer){var currentSymbolType=recognizer.getTokenStream().LA(1),atn=recognizer._interp.atn,next=atn.states[recognizer.state].transitions[0].target;return!!atn.nextTokens(next,recognizer._ctx).contains(currentSymbolType)&&(this.reportMissingToken(recognizer),!0)},DefaultErrorStrategy.prototype.singleTokenDeletion=function(recognizer){var nextTokenType=recognizer.getTokenStream().LA(2);if(this.getExpectedTokens(recognizer).contains(nextTokenType)){this.reportUnwantedToken(recognizer),recognizer.consume();var matchedSymbol=recognizer.getCurrentToken();return this.reportMatch(recognizer),matchedSymbol}return null},DefaultErrorStrategy.prototype.getMissingSymbol=function(recognizer){var currentSymbol=recognizer.getCurrentToken(),expectedTokenType=this.getExpectedTokens(recognizer).first(),tokenText=expectedTokenType===Token.EOF?"":"",current=currentSymbol,lookback=recognizer.getTokenStream().LT(-1);return current.type===Token.EOF&&null!==lookback&&(current=lookback),recognizer.getTokenFactory().create(current.source,expectedTokenType,tokenText,Token.DEFAULT_CHANNEL,-1,-1,current.line,current.column)},DefaultErrorStrategy.prototype.getExpectedTokens=function(recognizer){return recognizer.getExpectedTokens()},DefaultErrorStrategy.prototype.getTokenErrorDisplay=function(t){if(null===t)return"";var s=t.text;return null===s&&(s=t.type===Token.EOF?"":"<"+t.type+">"),this.escapeWSAndQuote(s)},DefaultErrorStrategy.prototype.escapeWSAndQuote=function(s){return"'"+(s=(s=(s=s.replace(/\n/g,"\\n")).replace(/\r/g,"\\r")).replace(/\t/g,"\\t"))+"'"},DefaultErrorStrategy.prototype.getErrorRecoverySet=function(recognizer){for(var atn=recognizer._interp.atn,ctx=recognizer._ctx,recoverSet=new IntervalSet;null!==ctx&&0<=ctx.invokingState;){var rt=atn.states[ctx.invokingState].transitions[0],follow=atn.nextTokens(rt.followState);recoverSet.addSet(follow),ctx=ctx.parentCtx}return recoverSet.removeOne(Token.EPSILON),recoverSet},DefaultErrorStrategy.prototype.consumeUntil=function(recognizer,set){for(var ttype=recognizer.getTokenStream().LA(1);ttype!==Token.EOF&&!set.contains(ttype);)recognizer.consume(),ttype=recognizer.getTokenStream().LA(1)},((BailErrorStrategy.prototype=Object.create(DefaultErrorStrategy.prototype)).constructor=BailErrorStrategy).prototype.recover=function(recognizer,e){for(var context=recognizer._ctx;null!==context;)context.exception=e,context=context.parentCtx;throw new ParseCancellationException(e)},BailErrorStrategy.prototype.recoverInline=function(recognizer){this.recover(recognizer,new InputMismatchException(recognizer))},BailErrorStrategy.prototype.sync=function(recognizer){},exports.BailErrorStrategy=BailErrorStrategy,exports.DefaultErrorStrategy=DefaultErrorStrategy},{"./../IntervalSet":12,"./../Token":20,"./../atn/ATNState":28,"./Errors":45}],45:[function(require,module,exports){var PredicateTransition=require("./../atn/Transition").PredicateTransition;function RecognitionException(params){return Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,RecognitionException):(new Error).stack,this.message=params.message,this.recognizer=params.recognizer,this.input=params.input,this.ctx=params.ctx,this.offendingToken=null,this.offendingState=-1,null!==this.recognizer&&(this.offendingState=this.recognizer.state),this}function LexerNoViableAltException(lexer,input,startIndex,deadEndConfigs){return RecognitionException.call(this,{message:"",recognizer:lexer,input:input,ctx:null}),this.startIndex=startIndex,this.deadEndConfigs=deadEndConfigs,this}function NoViableAltException(recognizer,input,startToken,offendingToken,deadEndConfigs,ctx){ctx=ctx||recognizer._ctx,offendingToken=offendingToken||recognizer.getCurrentToken(),startToken=startToken||recognizer.getCurrentToken(),input=input||recognizer.getInputStream(),RecognitionException.call(this,{message:"",recognizer:recognizer,input:input,ctx:ctx}),this.deadEndConfigs=deadEndConfigs,this.startToken=startToken,this.offendingToken=offendingToken}function InputMismatchException(recognizer){RecognitionException.call(this,{message:"",recognizer:recognizer,input:recognizer.getInputStream(),ctx:recognizer._ctx}),this.offendingToken=recognizer.getCurrentToken()}function FailedPredicateException(recognizer,predicate,message){RecognitionException.call(this,{message:this.formatMessage(predicate,message||null),recognizer:recognizer,input:recognizer.getInputStream(),ctx:recognizer._ctx});var trans=recognizer._interp.atn.states[recognizer.state].transitions[0];return trans instanceof PredicateTransition?(this.ruleIndex=trans.ruleIndex,this.predicateIndex=trans.predIndex):(this.ruleIndex=0,this.predicateIndex=0),this.predicate=predicate,this.offendingToken=recognizer.getCurrentToken(),this}function ParseCancellationException(){return Error.call(this),Error.captureStackTrace(this,ParseCancellationException),this}((RecognitionException.prototype=Object.create(Error.prototype)).constructor=RecognitionException).prototype.getExpectedTokens=function(){return null!==this.recognizer?this.recognizer.atn.getExpectedTokens(this.offendingState,this.ctx):null},RecognitionException.prototype.toString=function(){return this.message},((LexerNoViableAltException.prototype=Object.create(RecognitionException.prototype)).constructor=LexerNoViableAltException).prototype.toString=function(){var symbol="";return 0<=this.startIndex&&this.startIndex>10),lowSurrogate=codePoint%1024+56320,codeUnits.push(highSurrogate,lowSurrogate)),(index+1==length||16384":this.symbol.text},((ErrorNodeImpl.prototype=Object.create(TerminalNodeImpl.prototype)).constructor=ErrorNodeImpl).prototype.isErrorNode=function(){return!0},ErrorNodeImpl.prototype.accept=function(visitor){return visitor.visitErrorNode(this)},ParseTreeWalker.prototype.walk=function(listener,t){if(t instanceof ErrorNode||void 0!==t.isErrorNode&&t.isErrorNode())listener.visitErrorNode(t);else if(t instanceof TerminalNode)listener.visitTerminal(t);else{this.enterRule(listener,t);for(var i=0;ibaseOut-1&&(void 0===arr[j+1]&&(arr[j+1]=0),arr[j+1]+=arr[j]/baseOut|0,arr[j]%=baseOut)}return arr.reverse()}P.absoluteValue=P.abs=function(){var x=new this.constructor(this);return x.s<0&&(x.s=1),finalise(x)},P.ceil=function(){return finalise(new this.constructor(this),this.e+1,2)},P.comparedTo=P.cmp=function(y){var i,j,xdL,ydL,x=this,xd=x.d,yd=(y=new x.constructor(y)).d,xs=x.s,ys=y.s;if(!xd||!yd)return xs&&ys?xs!==ys?xs:xd===yd?0:!xd^xs<0?1:-1:NaN;if(!xd[0]||!yd[0])return xd[0]?xs:yd[0]?-ys:0;if(xs!==ys)return xs;if(x.e!==y.e)return x.e>y.e^xs<0?1:-1;for(i=0,j=(xdL=xd.length)<(ydL=yd.length)?xdL:ydL;iyd[i]^xs<0?1:-1;return xdL===ydL?0:ydLthis.d.length-2},P.isNaN=function(){return!this.s},P.isNegative=P.isNeg=function(){return this.s<0},P.isPositive=P.isPos=function(){return 0k&&(k=x.e+1)):k=NaN,k},P.round=function(){var x=this,Ctor=x.constructor;return finalise(new Ctor(x),x.e+1,Ctor.rounding)},P.sine=P.sin=function(){var pr,rm,x=this,Ctor=x.constructor;return x.isFinite()?x.isZero()?new Ctor(x):(pr=Ctor.precision,rm=Ctor.rounding,Ctor.precision=pr+Math.max(x.e,x.sd())+LOG_BASE,Ctor.rounding=1,x=function(Ctor,x){var k,len=x.d.length;if(len<3)return taylorSeries(Ctor,2,x,x);k=16<(k=1.4*Math.sqrt(len))?16:0|k,x=x.times(1/tinyPow(5,k)),x=taylorSeries(Ctor,2,x,x);for(var sin2_x,d5=new Ctor(5),d16=new Ctor(16),d20=new Ctor(20);k--;)sin2_x=x.times(x),x=x.times(d5.plus(sin2_x.times(d16.times(sin2_x).minus(d20))));return x}(Ctor,toLessThanHalfPi(Ctor,x)),Ctor.precision=pr,Ctor.rounding=rm,finalise(2=y.d.length-1&&(k=yn<0?-yn:yn)<=9007199254740991)return r=intPow(Ctor,x,k,pr),y.s<0?new Ctor(1).div(r):finalise(r,pr,rm);if((s=x.s)<0){if(eCtor.maxE+1||e=Ctor.toExpPos):(checkInt32(sd,1,MAX_DIGITS),void 0===rm?rm=Ctor.rounding:checkInt32(rm,0,8),finiteToString(x=finalise(new Ctor(x),sd,rm),sd<=x.e||x.e<=Ctor.toExpNeg,sd));return x.isNeg()&&!x.isZero()?"-"+str:str},P.toSignificantDigits=P.toSD=function(sd,rm){var Ctor=this.constructor;return void 0===sd?(sd=Ctor.precision,rm=Ctor.rounding):(checkInt32(sd,1,MAX_DIGITS),void 0===rm?rm=Ctor.rounding:checkInt32(rm,0,8)),finalise(new Ctor(this),sd,rm)},P.toString=function(){var x=this,Ctor=x.constructor,str=finiteToString(x,x.e<=Ctor.toExpNeg||x.e>=Ctor.toExpPos);return x.isNeg()&&!x.isZero()?"-"+str:str},P.truncated=P.trunc=function(){return finalise(new this.constructor(this),this.e+1,1)},P.valueOf=P.toJSON=function(){var x=this,Ctor=x.constructor,str=finiteToString(x,x.e<=Ctor.toExpNeg||x.e>=Ctor.toExpPos);return x.isNeg()?"-"+str:str};var divide=function(x,y,pr,rm,dp,base){var cmp,e,i,k,logBase,more,prod,prodL,q,qd,rem,remL,rem0,sd,t,xi,xL,yd0,yL,yz,Ctor=x.constructor,sign=x.s==y.s?1:-1,xd=x.d,yd=y.d;if(!(xd&&xd[0]&&yd&&yd[0]))return new Ctor(x.s&&y.s&&(xd?!yd||xd[0]!=yd[0]:yd)?xd&&0==xd[0]||!yd?0*sign:sign/0:NaN);for(e=base?(logBase=1,x.e-y.e):(base=BASE,logBase=LOG_BASE,mathfloor(x.e/logBase)-mathfloor(y.e/logBase)),yL=yd.length,xL=xd.length,qd=(q=new Ctor(sign)).d=[],i=0;yd[i]==(xd[i]||0);i++);if(yd[i]>(xd[i]||0)&&e--,null==pr?(sd=pr=Ctor.precision,rm=Ctor.rounding):sd=dp?pr+(x.e-y.e)+1:pr,sd<0)qd.push(1),more=!0;else{if(sd=sd/logBase+2|0,i=0,1==yL){for(yd=yd[k=0],sd++;(i=base/2&&++yd0;k=0,(cmp=compare(yd,rem,yL,remL))<0?(rem0=rem[0],yL!=remL&&(rem0=rem0*base+(rem[1]||0)),1<(k=rem0/yd0|0)?(base<=k&&(k=base-1),1==(cmp=compare(prod=multiplyInteger(yd,k,base),rem,prodL=prod.length,remL=rem.length))&&(k--,subtract(prod,yLb[i]?1:-1;break}return r}function subtract(a,b,aL,base){for(var i=0;aL--;)a[aL]-=i,i=a[aL]Ctor.maxE?(x.d=null,x.e=NaN):x.ex.constructor.maxE?(x.d=null,x.e=NaN):x.ebase-1;)xd[sd]=0,sd||(++e,xd.unshift(1));for(len=xd.length;!xd[len-1];--len);for(i=0,str="";ilen)for(e-=len;e--;)str+="0";else elen&&(arr.length=len,1)}function abs(x){return new this(x).abs()}function acos(x){return new this(x).acos()}function acosh(x){return new this(x).acosh()}function add(x,y){return new this(x).plus(y)}function asin(x){return new this(x).asin()}function asinh(x){return new this(x).asinh()}function atan(x){return new this(x).atan()}function atanh(x){return new this(x).atanh()}function atan2(y,x){y=new this(y),x=new this(x);var r,pr=this.precision,rm=this.rounding,wpr=pr+4;return y.s&&x.s?y.d||x.d?!x.d||y.isZero()?(r=x.s<0?getPi(this,pr,rm):new this(0)).s=y.s:!y.d||x.isZero()?(r=getPi(this,wpr,1).times(.5)).s=y.s:r=x.s<0?(this.precision=wpr,this.rounding=1,r=this.atan(divide(y,x,wpr,1)),x=getPi(this,wpr,1),this.precision=pr,this.rounding=rm,y.s<0?r.minus(x):r.plus(x)):this.atan(divide(y,x,wpr,1)):(r=getPi(this,wpr,1).times(0Decimal.maxE?(x.e=NaN,x.d=null):v.e=key.length&&runningStr.slice(0,key.length)===key&&(result+=escapes[escapeKeys[index]],runningStr=runningStr.slice(key.length,runningStr.length),specialCharFound=!0)}),specialCharFound||(result+=runningStr.slice(0,1),runningStr=runningStr.slice(1,runningStr.length))}();return result}},{}],57:[function(require,module,exports){!function(root){"use strict";var P={s:1,n:0,d:1};function createError(name){function errorConstructor(){var temp=Error.apply(this,arguments);temp.name=this.name=name,this.stack=temp.stack,this.message=temp.message}function IntermediateInheritor(){}return IntermediateInheritor.prototype=Error.prototype,errorConstructor.prototype=new IntermediateInheritor,errorConstructor}var DivisionByZero=Fraction.DivisionByZero=createError("DivisionByZero"),InvalidParameter=Fraction.InvalidParameter=createError("InvalidParameter");function assign(n,s){return isNaN(n=parseInt(n,10))&&throwInvalidParam(),n*s}function throwInvalidParam(){throw new InvalidParameter}var parse=function(p1,p2){var M,n=0,d=1,s=1,v=0,w=0,x=0,y=1,z=1,A=0,B=1,C=1,D=1,N=1e7;if(null!=p1)if(void 0!==p2)s=(n=p1)*(d=p2);else switch(typeof p1){case"object":"d"in p1&&"n"in p1?(n=p1.n,d=p1.d,"s"in p1&&(n*=p1.s)):0 in p1?(n=p1[0],1 in p1&&(d=p1[1])):throwInvalidParam(),s=n*d;break;case"number":if(p1<0&&(p1=-(s=p1)),p1%1==0)n=p1;else if(0>=1)1&e&&(r=r*b%m);return r}(10,len,d),t=0;t<300;t++){if(rem1===rem2)return t;rem1=10*rem1%d,rem2=10*rem2%d}return 0}function gcd(a,b){if(!a)return b;if(!b)return a;for(;;){if(!(a%=b))return b;if(!(b%=a))return a}}function Fraction(a,b){if(!(this instanceof Fraction))return new Fraction(a,b);parse(a,b),a=Fraction.REDUCE?gcd(P.d,P.n):1,this.s=P.s,this.n=P.n/a,this.d=P.d/a}Fraction.REDUCE=1,Fraction.prototype={s:1,n:0,d:1,abs:function(){return new Fraction(this.n,this.d)},neg:function(){return new Fraction(-this.s*this.n,this.d)},add:function(a,b){return parse(a,b),new Fraction(this.s*this.n*P.d+P.s*this.d*P.n,this.d*P.d)},sub:function(a,b){return parse(a,b),new Fraction(this.s*this.n*P.d-P.s*this.d*P.n,this.d*P.d)},mul:function(a,b){return parse(a,b),new Fraction(this.s*P.s*this.n*P.n,this.d*P.d)},div:function(a,b){return parse(a,b),new Fraction(this.s*P.s*this.n*P.d,this.d*P.n)},clone:function(){return new Fraction(this)},mod:function(a,b){return isNaN(this.n)||isNaN(this.d)?new Fraction(NaN):void 0===a?new Fraction(this.s*this.n%this.d,1):(parse(a,b),0===P.n&&0===this.d&&Fraction(0,0),new Fraction(this.s*(P.d*this.n)%(P.n*this.d),P.d*this.d))},gcd:function(a,b){return parse(a,b),new Fraction(gcd(P.n,this.n)*gcd(P.d,this.d),P.d*this.d)},lcm:function(a,b){return parse(a,b),0===P.n&&0===this.n?new Fraction:new Fraction(P.n*this.n,gcd(P.n,this.n)*gcd(P.d,this.d))},ceil:function(places){return places=Math.pow(10,places||0),isNaN(this.n)||isNaN(this.d)?new Fraction(NaN):new Fraction(Math.ceil(places*this.s*this.n/this.d),places)},floor:function(places){return places=Math.pow(10,places||0),isNaN(this.n)||isNaN(this.d)?new Fraction(NaN):new Fraction(Math.floor(places*this.s*this.n/this.d),places)},round:function(places){return places=Math.pow(10,places||0),isNaN(this.n)||isNaN(this.d)?new Fraction(NaN):new Fraction(Math.round(places*this.s*this.n/this.d),places)},inverse:function(){return new Fraction(this.s*this.d,this.n)},pow:function(m){return m<0?new Fraction(Math.pow(this.s*this.d,-m),Math.pow(this.n,-m)):new Fraction(Math.pow(this.s*this.n,m),Math.pow(this.d,m))},equals:function(a,b){return parse(a,b),this.s*this.n*P.d==P.s*P.n*this.d},compare:function(a,b){parse(a,b);var t=this.s*this.n*P.d-P.s*P.n*this.d;return(015 significant digits to BigNumber (value: "+x+"). Use function bignumber(x) to convert to BigNumber.");return new BigNumber(x)}},{from:"number",to:"Complex",convert:function(x){return Complex||throwNoComplex(x),new Complex(x,0)}},{from:"number",to:"string",convert:function(x){return x+""}},{from:"BigNumber",to:"Complex",convert:function(x){return Complex||throwNoComplex(x),new Complex(x.toNumber(),0)}},{from:"Fraction",to:"BigNumber",convert:function(){throw new TypeError("Cannot implicitly convert a Fraction to BigNumber or vice versa. Use function bignumber(x) to convert to BigNumber or fraction(x) to convert to Fraction.")}},{from:"Fraction",to:"Complex",convert:function(x){return Complex||throwNoComplex(x),new Complex(x.valueOf(),0)}},{from:"number",to:"Fraction",convert:function(x){Fraction||throwNoFraction(x);var f=new Fraction(x);if(f.valueOf()!==x)throw new TypeError("Cannot implicitly convert a number to a Fraction when there will be a loss of precision (value: "+x+"). Use function fraction(x) to convert to Fraction.");return f}},{from:"string",to:"number",convert:function(x){var n=Number(x);if(isNaN(n))throw new Error('Cannot convert "'+x+'" to a number');return n}},{from:"string",to:"BigNumber",convert:function(x){BigNumber||throwNoBignumber(x);try{return new BigNumber(x)}catch(err){throw new Error('Cannot convert "'+x+'" to BigNumber')}}},{from:"string",to:"Fraction",convert:function(x){Fraction||throwNoFraction(x);try{return new Fraction(x)}catch(err){throw new Error('Cannot convert "'+x+'" to Fraction')}}},{from:"string",to:"Complex",convert:function(x){Complex||throwNoComplex(x);try{return new Complex(x)}catch(err){throw new Error('Cannot convert "'+x+'" to Complex')}}},{from:"boolean",to:"number",convert:function(x){return+x}},{from:"boolean",to:"BigNumber",convert:function(x){return BigNumber||throwNoBignumber(x),new BigNumber(+x)}},{from:"boolean",to:"Fraction",convert:function(x){return Fraction||throwNoFraction(x),new Fraction(+x)}},{from:"boolean",to:"string",convert:function(x){return String(x)}},{from:"Array",to:"Matrix",convert:function(array){return DenseMatrix||function(){throw new Error("Cannot convert array into a Matrix: no class 'DenseMatrix' provided")}(),new DenseMatrix(array)}},{from:"Matrix",to:"Array",convert:function(matrix){return matrix.valueOf()}}],typed});function throwNoBignumber(x){throw new Error("Cannot convert value ".concat(x," into a BigNumber: no class 'BigNumber' provided"))}function throwNoComplex(x){throw new Error("Cannot convert value ".concat(x," into a Complex number: no class 'Complex' provided"))}function throwNoFraction(x){throw new Error("Cannot convert value ".concat(x," into a Fraction, no class 'Fraction' provided."))}exports.createTyped=createTyped},{"../../utils/factory":931,"../../utils/is":933,"../../utils/number":937,"typed-function":946}],66:[function(require,module,exports){"use strict";function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}Object.defineProperty(exports,"__esModule",{value:!0}),exports.all=void 0;var allFactories=function(obj){if(obj&&obj.__esModule)return obj;if(null===obj||"object"!==_typeof(obj)&&"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache();if(cache&&cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){var desc;Object.prototype.hasOwnProperty.call(obj,key)&&((desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null)&&(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key])}newObj.default=obj,cache&&cache.set(obj,newObj);return newObj}(require("../factoriesAny"));function _getRequireWildcardCache(){if("function"!=typeof WeakMap)return null;var cache=new WeakMap;return _getRequireWildcardCache=function(){return cache},cache}exports.all=allFactories},{"../factoriesAny":658}],67:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.config=void 0;var _config=require("../core/config"),_config2=require("../core/function/config");function _extends(){return(_extends=Object.assign||function(target){for(var i=1;i=this.max?this.message="Index out of range ("+this.index+" > "+(this.max-1)+")":this.message="Index out of range ("+this.index+")",this.stack=(new Error).stack}Object.defineProperty(exports,"__esModule",{value:!0}),((exports.IndexError=IndexError).prototype=new RangeError).constructor=RangeError,IndexError.prototype.name="IndexError",IndexError.prototype.isIndexError=!0},{}],401:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createHelpClass=void 0;var _is=require("../utils/is"),_object=require("../utils/object"),_string=require("../utils/string"),dependencies=["parse"],createHelpClass=(0,require("../utils/factory").factory)("Help",dependencies,function(_ref){var parse=_ref.parse;function Help(doc){if(!(this instanceof Help))throw new SyntaxError("Constructor must be called with the new operator");if(!doc)throw new Error('Argument "doc" missing');this.doc=doc}return Help.prototype.type="Help",Help.prototype.isHelp=!0,Help.prototype.toString=function(){var doc=this.doc||{},desc="\n";if(doc.name&&(desc+="Name: "+doc.name+"\n\n"),doc.category&&(desc+="Category: "+doc.category+"\n\n"),doc.description&&(desc+="Description:\n "+doc.description+"\n\n"),doc.syntax&&(desc+="Syntax:\n "+doc.syntax.join("\n ")+"\n\n"),doc.examples){desc+="Examples:\n";for(var scope={},i=0;i1, -1 when x<0, and 0 when x=0.",examples:["sign(3.5)","sign(-4.2)","sign(0)"],seealso:["abs"]}},{}],474:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sqrtDocs=void 0;exports.sqrtDocs={name:"sqrt",category:"Arithmetic",syntax:["sqrt(x)"],description:"Compute the square root value. If x = y * y, then y is the square root of x.",examples:["sqrt(25)","5 * 5","sqrt(-1)"],seealso:["square","sqrtm","multiply","nthRoot","nthRoots","pow"]}},{}],475:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sqrtmDocs=void 0;exports.sqrtmDocs={name:"sqrtm",category:"Arithmetic",syntax:["sqrtm(x)"],description:"Calculate the principal square root of a square matrix. The principal square root matrix `X` of another matrix `A` is such that `X * X = A`.",examples:["sqrtm([[1, 2], [3, 4]])"],seealso:["sqrt","abs","square","multiply"]}},{}],476:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.squareDocs=void 0;exports.squareDocs={name:"square",category:"Arithmetic",syntax:["square(x)"],description:"Compute the square of a value. The square of x is x * x.",examples:["square(3)","sqrt(9)","3^2","3 * 3"],seealso:["multiply","pow","sqrt","cube"]}},{}],477:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.subtractDocs=void 0;exports.subtractDocs={name:"subtract",category:"Operators",syntax:["x - y","subtract(x, y)"],description:"subtract two values.",examples:["a = 5.3 - 2","a + 2","2/3 - 1/6","2 * 3 - 3","2.1 km - 500m"],seealso:["add"]}},{}],478:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.unaryMinusDocs=void 0;exports.unaryMinusDocs={name:"unaryMinus",category:"Operators",syntax:["-x","unaryMinus(x)"],description:"Inverse the sign of a value. Converts booleans and strings to numbers.",examples:["-4.5","-(-5.6)",'-"22"'],seealso:["add","subtract","unaryPlus"]}},{}],479:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.unaryPlusDocs=void 0;exports.unaryPlusDocs={name:"unaryPlus",category:"Operators",syntax:["+x","unaryPlus(x)"],description:"Converts booleans and strings to numbers.",examples:["+true",'+"2"'],seealso:["add","subtract","unaryMinus"]}},{}],480:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.xgcdDocs=void 0;exports.xgcdDocs={name:"xgcd",category:"Arithmetic",syntax:["xgcd(a, b)"],description:"Calculate the extended greatest common divisor for two values. The result is an array [d, x, y] with 3 entries, where d is the greatest common divisor, and d = x * a + y * b.",examples:["xgcd(8, 12)","gcd(8, 12)","xgcd(36163, 21199)"],seealso:["gcd","lcm"]}},{}],481:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.bitAndDocs=void 0;exports.bitAndDocs={name:"bitAnd",category:"Bitwise",syntax:["x & y","bitAnd(x, y)"],description:"Bitwise AND operation. Performs the logical AND operation on each pair of the corresponding bits of the two given values by multiplying them. If both bits in the compared position are 1, the bit in the resulting binary representation is 1, otherwise, the result is 0",examples:["5 & 3","bitAnd(53, 131)","[1, 12, 31] & 42"],seealso:["bitNot","bitOr","bitXor","leftShift","rightArithShift","rightLogShift"]}},{}],482:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.bitNotDocs=void 0;exports.bitNotDocs={name:"bitNot",category:"Bitwise",syntax:["~x","bitNot(x)"],description:"Bitwise NOT operation. Performs a logical negation on each bit of the given value. Bits that are 0 become 1, and those that are 1 become 0.",examples:["~1","~2","bitNot([2, -3, 4])"],seealso:["bitAnd","bitOr","bitXor","leftShift","rightArithShift","rightLogShift"]}},{}],483:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.bitOrDocs=void 0;exports.bitOrDocs={name:"bitOr",category:"Bitwise",syntax:["x | y","bitOr(x, y)"],description:"Bitwise OR operation. Performs the logical inclusive OR operation on each pair of corresponding bits of the two given values. The result in each position is 1 if the first bit is 1 or the second bit is 1 or both bits are 1, otherwise, the result is 0.",examples:["5 | 3","bitOr([1, 2, 3], 4)"],seealso:["bitAnd","bitNot","bitXor","leftShift","rightArithShift","rightLogShift"]}},{}],484:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.bitXorDocs=void 0;exports.bitXorDocs={name:"bitXor",category:"Bitwise",syntax:["bitXor(x, y)"],description:"Bitwise XOR operation, exclusive OR. Performs the logical exclusive OR operation on each pair of corresponding bits of the two given values. The result in each position is 1 if only the first bit is 1 or only the second bit is 1, but will be 0 if both are 0 or both are 1.",examples:["bitOr(1, 2)","bitXor([2, 3, 4], 4)"],seealso:["bitAnd","bitNot","bitOr","leftShift","rightArithShift","rightLogShift"]}},{}],485:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.leftShiftDocs=void 0;exports.leftShiftDocs={name:"leftShift",category:"Bitwise",syntax:["x << y","leftShift(x, y)"],description:"Bitwise left logical shift of a value x by y number of bits.",examples:["4 << 1","8 >> 1"],seealso:["bitAnd","bitNot","bitOr","bitXor","rightArithShift","rightLogShift"]}},{}],486:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.rightArithShiftDocs=void 0;exports.rightArithShiftDocs={name:"rightArithShift",category:"Bitwise",syntax:["x >> y","rightArithShift(x, y)"],description:"Bitwise right arithmetic shift of a value x by y number of bits.",examples:["8 >> 1","4 << 1","-12 >> 2"],seealso:["bitAnd","bitNot","bitOr","bitXor","leftShift","rightLogShift"]}},{}],487:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.rightLogShiftDocs=void 0;exports.rightLogShiftDocs={name:"rightLogShift",category:"Bitwise",syntax:["x >>> y","rightLogShift(x, y)"],description:"Bitwise right logical shift of a value x by y number of bits.",examples:["8 >>> 1","4 << 1","-12 >>> 2"],seealso:["bitAnd","bitNot","bitOr","bitXor","leftShift","rightArithShift"]}},{}],488:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.bellNumbersDocs=void 0;exports.bellNumbersDocs={name:"bellNumbers",category:"Combinatorics",syntax:["bellNumbers(n)"],description:"The Bell Numbers count the number of partitions of a set. A partition is a pairwise disjoint subset of S whose union is S. `bellNumbers` only takes integer arguments. The following condition must be enforced: n >= 0.",examples:["bellNumbers(3)","bellNumbers(8)"],seealso:["stirlingS2"]}},{}],489:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.catalanDocs=void 0;exports.catalanDocs={name:"catalan",category:"Combinatorics",syntax:["catalan(n)"],description:"The Catalan Numbers enumerate combinatorial structures of many different types. catalan only takes integer arguments. The following condition must be enforced: n >= 0.",examples:["catalan(3)","catalan(8)"],seealso:["bellNumbers"]}},{}],490:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.compositionDocs=void 0;exports.compositionDocs={name:"composition",category:"Combinatorics",syntax:["composition(n, k)"],description:"The composition counts of n into k parts. composition only takes integer arguments. The following condition must be enforced: k <= n.",examples:["composition(5, 3)"],seealso:["combinations"]}},{}],491:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.stirlingS2Docs=void 0;exports.stirlingS2Docs={name:"stirlingS2",category:"Combinatorics",syntax:["stirlingS2(n, k)"],description:"he Stirling numbers of the second kind, counts the number of ways to partition a set of n labelled objects into k nonempty unlabelled subsets. `stirlingS2` only takes integer arguments. The following condition must be enforced: k <= n. If n = k or k = 1, then s(n,k) = 1.",examples:["stirlingS2(5, 3)"],seealso:["bellNumbers"]}},{}],492:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.argDocs=void 0;exports.argDocs={name:"arg",category:"Complex",syntax:["arg(x)"],description:"Compute the argument of a complex value. If x = a+bi, the argument is computed as atan2(b, a).",examples:["arg(2 + 2i)","atan2(3, 2)","arg(2 + 3i)"],seealso:["re","im","conj","abs"]}},{}],493:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.conjDocs=void 0;exports.conjDocs={name:"conj",category:"Complex",syntax:["conj(x)"],description:"Compute the complex conjugate of a complex value. If x = a+bi, the complex conjugate is a-bi.",examples:["conj(2 + 3i)","conj(2 - 3i)","conj(-5.2i)"],seealso:["re","im","abs","arg"]}},{}],494:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.imDocs=void 0;exports.imDocs={name:"im",category:"Complex",syntax:["im(x)"],description:"Get the imaginary part of a complex number.",examples:["im(2 + 3i)","re(2 + 3i)","im(-5.2i)","im(2.4)"],seealso:["re","conj","abs","arg"]}},{}],495:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.reDocs=void 0;exports.reDocs={name:"re",category:"Complex",syntax:["re(x)"],description:"Get the real part of a complex number.",examples:["re(2 + 3i)","im(2 + 3i)","re(-5.2i)","re(2.4)"],seealso:["im","conj","abs","arg"]}},{}],496:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.evaluateDocs=void 0;exports.evaluateDocs={name:"evaluate",category:"Expression",syntax:["evaluate(expression)","evaluate([expr1, expr2, expr3, ...])"],description:"Evaluate an expression or an array with expressions.",examples:['evaluate("2 + 3")','evaluate("sqrt(" + 4 + ")")'],seealso:[]}},{}],497:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.helpDocs=void 0;exports.helpDocs={name:"help",category:"Expression",syntax:["help(object)","help(string)"],description:"Display documentation on a function or data type.",examples:["help(sqrt)",'help("complex")'],seealso:[]}},{}],498:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.distanceDocs=void 0;exports.distanceDocs={name:"distance",category:"Geometry",syntax:["distance([x1, y1], [x2, y2])","distance([[x1, y1], [x2, y2]])"],description:"Calculates the Euclidean distance between two points.",examples:["distance([0,0], [4,4])","distance([[0,0], [4,4]])"],seealso:[]}},{}],499:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.intersectDocs=void 0;exports.intersectDocs={name:"intersect",category:"Geometry",syntax:["intersect(expr1, expr2, expr3, expr4)","intersect(expr1, expr2, expr3)"],description:"Computes the intersection point of lines and/or planes.",examples:["intersect([0, 0], [10, 10], [10, 0], [0, 10])","intersect([1, 0, 1], [4, -2, 2], [1, 1, 1, 6])"],seealso:[]}},{}],500:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.andDocs=void 0;exports.andDocs={name:"and",category:"Logical",syntax:["x and y","and(x, y)"],description:"Logical and. Test whether two values are both defined with a nonzero/nonempty value.",examples:["true and false","true and true","2 and 4"],seealso:["not","or","xor"]}},{}],501:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.notDocs=void 0;exports.notDocs={name:"not",category:"Logical",syntax:["not x","not(x)"],description:"Logical not. Flips the boolean value of given argument.",examples:["not true","not false","not 2","not 0"],seealso:["and","or","xor"]}},{}],502:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.orDocs=void 0;exports.orDocs={name:"or",category:"Logical",syntax:["x or y","or(x, y)"],description:"Logical or. Test if at least one value is defined with a nonzero/nonempty value.",examples:["true or false","false or false","0 or 4"],seealso:["not","and","xor"]}},{}],503:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.xorDocs=void 0;exports.xorDocs={name:"xor",category:"Logical",syntax:["x xor y","xor(x, y)"],description:"Logical exclusive or, xor. Test whether one and only one value is defined with a nonzero/nonempty value.",examples:["true xor false","false xor false","true xor true","0 xor 4"],seealso:["not","and","or"]}},{}],504:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.columnDocs=void 0;exports.columnDocs={name:"column",category:"Matrix",syntax:["column(x, index)"],description:"Return a column from a matrix or array.",examples:["A = [[1, 2], [3, 4]]","column(A, 1)","column(A, 2)"],seealso:["row"]}},{}],505:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.concatDocs=void 0;exports.concatDocs={name:"concat",category:"Matrix",syntax:["concat(A, B, C, ...)","concat(A, B, C, ..., dim)"],description:"Concatenate matrices. By default, the matrices are concatenated by the last dimension. The dimension on which to concatenate can be provided as last argument.",examples:["A = [1, 2; 5, 6]","B = [3, 4; 7, 8]","concat(A, B)","concat(A, B, 1)","concat(A, B, 2)"],seealso:["det","diag","identity","inv","ones","range","size","squeeze","subset","trace","transpose","zeros"]}},{}],506:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.crossDocs=void 0;exports.crossDocs={name:"cross",category:"Matrix",syntax:["cross(A, B)"],description:"Calculate the cross product for two vectors in three dimensional space.",examples:["cross([1, 1, 0], [0, 1, 1])","cross([3, -3, 1], [4, 9, 2])","cross([2, 3, 4], [5, 6, 7])"],seealso:["multiply","dot"]}},{}],507:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ctransposeDocs=void 0;exports.ctransposeDocs={name:"ctranspose",category:"Matrix",syntax:["x'","ctranspose(x)"],description:"Complex Conjugate and Transpose a matrix",examples:["a = [1, 2, 3; 4, 5, 6]","a'","ctranspose(a)"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","subset","trace","zeros"]}},{}],508:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.detDocs=void 0;exports.detDocs={name:"det",category:"Matrix",syntax:["det(x)"],description:"Calculate the determinant of a matrix",examples:["det([1, 2; 3, 4])","det([-2, 2, 3; -1, 1, 3; 2, 0, -1])"],seealso:["concat","diag","identity","inv","ones","range","size","squeeze","subset","trace","transpose","zeros"]}},{}],509:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.diagDocs=void 0;exports.diagDocs={name:"diag",category:"Matrix",syntax:["diag(x)","diag(x, k)"],description:"Create a diagonal matrix or retrieve the diagonal of a matrix. When x is a vector, a matrix with the vector values on the diagonal will be returned. When x is a matrix, a vector with the diagonal values of the matrix is returned. When k is provided, the k-th diagonal will be filled in or retrieved, if k is positive, the values are placed on the super diagonal. When k is negative, the values are placed on the sub diagonal.",examples:["diag(1:3)","diag(1:3, 1)","a = [1, 2, 3; 4, 5, 6; 7, 8, 9]","diag(a)"],seealso:["concat","det","identity","inv","ones","range","size","squeeze","subset","trace","transpose","zeros"]}},{}],510:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.dotDocs=void 0;exports.dotDocs={name:"dot",category:"Matrix",syntax:["dot(A, B)","A * B"],description:"Calculate the dot product of two vectors. The dot product of A = [a1, a2, a3, ..., an] and B = [b1, b2, b3, ..., bn] is defined as dot(A, B) = a1 * b1 + a2 * b2 + a3 * b3 + ... + an * bn",examples:["dot([2, 4, 1], [2, 2, 3])","[2, 4, 1] * [2, 2, 3]"],seealso:["multiply","cross"]}},{}],511:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.eigsDocs=void 0;exports.eigsDocs={name:"eigs",category:"Matrix",syntax:["eigs(x)"],description:"Calculate the eigenvalues and eigenvectors of a real symmetric matrix",examples:["eigs([[5, 2.3], [2.3, 1]])"],seealso:["inv"]}},{}],512:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.filterDocs=void 0;exports.filterDocs={name:"filter",category:"Matrix",syntax:["filter(x, test)"],description:"Filter items in a matrix.",examples:["isPositive(x) = x > 0","filter([6, -2, -1, 4, 3], isPositive)","filter([6, -2, 0, 1, 0], x != 0)"],seealso:["sort","map","forEach"]}},{}],513:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.flattenDocs=void 0;exports.flattenDocs={name:"flatten",category:"Matrix",syntax:["flatten(x)"],description:"Flatten a multi dimensional matrix into a single dimensional matrix.",examples:["a = [1, 2, 3; 4, 5, 6]","size(a)","b = flatten(a)","size(b)"],seealso:["concat","resize","size","squeeze"]}},{}],514:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.forEachDocs=void 0;exports.forEachDocs={name:"forEach",category:"Matrix",syntax:["forEach(x, callback)"],description:"Iterates over all elements of a matrix/array, and executes the given callback function.",examples:["forEach([1, 2, 3], function(val) { console.log(val) })"],seealso:["map","sort","filter"]}},{}],515:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getMatrixDataTypeDocs=void 0;exports.getMatrixDataTypeDocs={name:"getMatrixDataType",category:"Matrix",syntax:["getMatrixDataType(x)"],description:'Find the data type of all elements in a matrix or array, for example "number" if all items are a number and "Complex" if all values are complex numbers. If a matrix contains more than one data type, it will return "mixed".',examples:["getMatrixDataType([1, 2, 3])","getMatrixDataType([[5 cm], [2 inch]])",'getMatrixDataType([1, "text"])',"getMatrixDataType([1, bignumber(4)])"],seealso:["matrix","sparse","typeOf"]}},{}],516:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.identityDocs=void 0;exports.identityDocs={name:"identity",category:"Matrix",syntax:["identity(n)","identity(m, n)","identity([m, n])"],description:"Returns the identity matrix with size m-by-n. The matrix has ones on the diagonal and zeros elsewhere.",examples:["identity(3)","identity(3, 5)","a = [1, 2, 3; 4, 5, 6]","identity(size(a))"],seealso:["concat","det","diag","inv","ones","range","size","squeeze","subset","trace","transpose","zeros"]}},{}],517:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.invDocs=void 0;exports.invDocs={name:"inv",category:"Matrix",syntax:["inv(x)"],description:"Calculate the inverse of a matrix",examples:["inv([1, 2; 3, 4])","inv(4)","1 / 4"],seealso:["concat","det","diag","identity","ones","range","size","squeeze","subset","trace","transpose","zeros"]}},{}],518:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.kronDocs=void 0;exports.kronDocs={name:"kron",category:"Matrix",syntax:["kron(x, y)"],description:"Calculates the kronecker product of 2 matrices or vectors.",examples:["kron([[1, 0], [0, 1]], [[1, 2], [3, 4]])","kron([1,1], [2,3,4])"],seealso:["multiply","dot","cross"]}},{}],519:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.mapDocs=void 0;exports.mapDocs={name:"map",category:"Matrix",syntax:["map(x, callback)"],description:"Create a new matrix or array with the results of the callback function executed on each entry of the matrix/array.",examples:["map([1, 2, 3], square)"],seealso:["filter","forEach"]}},{}],520:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.onesDocs=void 0;exports.onesDocs={name:"ones",category:"Matrix",syntax:["ones(m)","ones(m, n)","ones(m, n, p, ...)","ones([m])","ones([m, n])","ones([m, n, p, ...])"],description:"Create a matrix containing ones.",examples:["ones(3)","ones(3, 5)","ones([2,3]) * 4.5","a = [1, 2, 3; 4, 5, 6]","ones(size(a))"],seealso:["concat","det","diag","identity","inv","range","size","squeeze","subset","trace","transpose","zeros"]}},{}],521:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.partitionSelectDocs=void 0;exports.partitionSelectDocs={name:"partitionSelect",category:"Matrix",syntax:["partitionSelect(x, k)","partitionSelect(x, k, compare)"],description:"Partition-based selection of an array or 1D matrix. Will find the kth smallest value, and mutates the input array. Uses Quickselect.",examples:["partitionSelect([5, 10, 1], 2)",'partitionSelect(["C", "B", "A", "D"], 1)'],seealso:["sort"]}},{}],522:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.rangeDocs=void 0;exports.rangeDocs={name:"range",category:"Type",syntax:["start:end","start:step:end","range(start, end)","range(start, end, step)","range(string)"],description:"Create a range. Lower bound of the range is included, upper bound is excluded.",examples:["1:5","3:-1:-3","range(3, 7)","range(0, 12, 2)",'range("4:10")',"a = [1, 2, 3, 4; 5, 6, 7, 8]","a[1:2, 1:2]"],seealso:["concat","det","diag","identity","inv","ones","size","squeeze","subset","trace","transpose","zeros"]}},{}],523:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.reshapeDocs=void 0;exports.reshapeDocs={name:"reshape",category:"Matrix",syntax:["reshape(x, sizes)"],description:"Reshape a multi dimensional array to fit the specified dimensions.",examples:["reshape([1, 2, 3, 4, 5, 6], [2, 3])","reshape([[1, 2], [3, 4]], [1, 4])","reshape([[1, 2], [3, 4]], [4])"],seealso:["size","squeeze","resize"]}},{}],524:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.resizeDocs=void 0;exports.resizeDocs={name:"resize",category:"Matrix",syntax:["resize(x, size)","resize(x, size, defaultValue)"],description:"Resize a matrix.",examples:["resize([1,2,3,4,5], [3])","resize([1,2,3], [5])","resize([1,2,3], [5], -1)","resize(2, [2, 3])",'resize("hello", [8], "!")'],seealso:["size","subset","squeeze","reshape"]}},{}],525:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.rowDocs=void 0;exports.rowDocs={name:"row",category:"Matrix",syntax:["row(x, index)"],description:"Return a row from a matrix or array.",examples:["A = [[1, 2], [3, 4]]","row(A, 1)","row(A, 2)"],seealso:["column"]}},{}],526:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sizeDocs=void 0;exports.sizeDocs={name:"size",category:"Matrix",syntax:["size(x)"],description:"Calculate the size of a matrix.",examples:["size(2.3)",'size("hello world")',"a = [1, 2; 3, 4; 5, 6]","size(a)","size(1:6)"],seealso:["concat","det","diag","identity","inv","ones","range","squeeze","subset","trace","transpose","zeros"]}},{}],527:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sortDocs=void 0;exports.sortDocs={name:"sort",category:"Matrix",syntax:["sort(x)","sort(x, compare)"],description:'Sort the items in a matrix. Compare can be a string "asc", "desc", "natural", or a custom sort function.',examples:["sort([5, 10, 1])",'sort(["C", "B", "A", "D"])',"sortByLength(a, b) = size(a)[1] - size(b)[1]",'sort(["Langdon", "Tom", "Sara"], sortByLength)','sort(["10", "1", "2"], "natural")'],seealso:["map","filter","forEach"]}},{}],528:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.squeezeDocs=void 0;exports.squeezeDocs={name:"squeeze",category:"Matrix",syntax:["squeeze(x)"],description:"Remove inner and outer singleton dimensions from a matrix.",examples:["a = zeros(3,2,1)","size(squeeze(a))","b = zeros(1,1,3)","size(squeeze(b))"],seealso:["concat","det","diag","identity","inv","ones","range","size","subset","trace","transpose","zeros"]}},{}],529:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.subsetDocs=void 0;exports.subsetDocs={name:"subset",category:"Matrix",syntax:["value(index)","value(index) = replacement","subset(value, [index])","subset(value, [index], replacement)"],description:"Get or set a subset of a matrix or string. Indexes are one-based. Both the ranges lower-bound and upper-bound are included.",examples:["d = [1, 2; 3, 4]","e = []","e[1, 1:2] = [5, 6]","e[2, :] = [7, 8]","f = d * e","f[2, 1]","f[:, 1]"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","trace","transpose","zeros"]}},{}],530:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.traceDocs=void 0;exports.traceDocs={name:"trace",category:"Matrix",syntax:["trace(A)"],description:"Calculate the trace of a matrix: the sum of the elements on the main diagonal of a square matrix.",examples:["A = [1, 2, 3; -1, 2, 3; 2, 0, 3]","trace(A)"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","subset","transpose","zeros"]}},{}],531:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.transposeDocs=void 0;exports.transposeDocs={name:"transpose",category:"Matrix",syntax:["x'","transpose(x)"],description:"Transpose a matrix",examples:["a = [1, 2, 3; 4, 5, 6]","a'","transpose(a)"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","subset","trace","zeros"]}},{}],532:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.zerosDocs=void 0;exports.zerosDocs={name:"zeros",category:"Matrix",syntax:["zeros(m)","zeros(m, n)","zeros(m, n, p, ...)","zeros([m])","zeros([m, n])","zeros([m, n, p, ...])"],description:"Create a matrix containing zeros.",examples:["zeros(3)","zeros(3, 5)","a = [1, 2, 3; 4, 5, 6]","zeros(size(a))"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","subset","trace","transpose"]}},{}],533:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.combinationsDocs=void 0;exports.combinationsDocs={name:"combinations",category:"Probability",syntax:["combinations(n, k)"],description:"Compute the number of combinations of n items taken k at a time",examples:["combinations(7, 5)"],seealso:["combinationsWithRep","permutations","factorial"]}},{}],534:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.combinationsWithRepDocs=void 0;exports.combinationsWithRepDocs={name:"combinationsWithRep",category:"Probability",syntax:["combinationsWithRep(n, k)"],description:"Compute the number of combinations of n items taken k at a time with replacements.",examples:["combinationsWithRep(7, 5)"],seealso:["combinations","permutations","factorial"]}},{}],535:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.factorialDocs=void 0;exports.factorialDocs={name:"factorial",category:"Probability",syntax:["n!","factorial(n)"],description:"Compute the factorial of a value",examples:["5!","5 * 4 * 3 * 2 * 1","3!"],seealso:["combinations","combinationsWithRep","permutations","gamma"]}},{}],536:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.gammaDocs=void 0;exports.gammaDocs={name:"gamma",category:"Probability",syntax:["gamma(n)"],description:"Compute the gamma function. For small values, the Lanczos approximation is used, and for large values the extended Stirling approximation.",examples:["gamma(4)","3!","gamma(1/2)","sqrt(pi)"],seealso:["factorial"]}},{}],537:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.kldivergenceDocs=void 0;exports.kldivergenceDocs={name:"kldivergence",category:"Probability",syntax:["kldivergence(x, y)"],description:"Calculate the Kullback-Leibler (KL) divergence between two distributions.",examples:["kldivergence([0.7,0.5,0.4], [0.2,0.9,0.5])"],seealso:[]}},{}],538:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.multinomialDocs=void 0;exports.multinomialDocs={name:"multinomial",category:"Probability",syntax:["multinomial(A)"],description:"Multinomial Coefficients compute the number of ways of picking a1, a2, ..., ai unordered outcomes from `n` possibilities. multinomial takes one array of integers as an argument. The following condition must be enforced: every ai > 0.",examples:["multinomial([1, 2, 1])"],seealso:["combinations","factorial"]}},{}],539:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.permutationsDocs=void 0;exports.permutationsDocs={name:"permutations",category:"Probability",syntax:["permutations(n)","permutations(n, k)"],description:"Compute the number of permutations of n items taken k at a time",examples:["permutations(5)","permutations(5, 3)"],seealso:["combinations","combinationsWithRep","factorial"]}},{}],540:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.pickRandomDocs=void 0;exports.pickRandomDocs={name:"pickRandom",category:"Probability",syntax:["pickRandom(array)","pickRandom(array, number)","pickRandom(array, weights)","pickRandom(array, number, weights)","pickRandom(array, weights, number)"],description:"Pick a random entry from a given array.",examples:["pickRandom(0:10)","pickRandom([1, 3, 1, 6])","pickRandom([1, 3, 1, 6], 2)","pickRandom([1, 3, 1, 6], [2, 3, 2, 1])","pickRandom([1, 3, 1, 6], 2, [2, 3, 2, 1])","pickRandom([1, 3, 1, 6], [2, 3, 2, 1], 2)"],seealso:["random","randomInt"]}},{}],541:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.randomDocs=void 0;exports.randomDocs={name:"random",category:"Probability",syntax:["random()","random(max)","random(min, max)","random(size)","random(size, max)","random(size, min, max)"],description:"Return a random number.",examples:["random()","random(10, 20)","random([2, 3])"],seealso:["pickRandom","randomInt"]}},{}],542:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.randomIntDocs=void 0;exports.randomIntDocs={name:"randomInt",category:"Probability",syntax:["randomInt(max)","randomInt(min, max)","randomInt(size)","randomInt(size, max)","randomInt(size, min, max)"],description:"Return a random integer number",examples:["randomInt(10, 20)","randomInt([2, 3], 10)"],seealso:["pickRandom","random"]}},{}],543:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.compareDocs=void 0;exports.compareDocs={name:"compare",category:"Relational",syntax:["compare(x, y)"],description:"Compare two values. Returns 1 when x > y, -1 when x < y, and 0 when x == y.",examples:["compare(2, 3)","compare(3, 2)","compare(2, 2)","compare(5cm, 40mm)","compare(2, [1, 2, 3])"],seealso:["equal","unequal","smaller","smallerEq","largerEq","compareNatural","compareText"]}},{}],544:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.compareNaturalDocs=void 0;exports.compareNaturalDocs={name:"compareNatural",category:"Relational",syntax:["compareNatural(x, y)"],description:"Compare two values of any type in a deterministic, natural way. Returns 1 when x > y, -1 when x < y, and 0 when x == y.",examples:["compareNatural(2, 3)","compareNatural(3, 2)","compareNatural(2, 2)","compareNatural(5cm, 40mm)",'compareNatural("2", "10")',"compareNatural(2 + 3i, 2 + 4i)","compareNatural([1, 2, 4], [1, 2, 3])","compareNatural([1, 5], [1, 2, 3])","compareNatural([1, 2], [1, 2])","compareNatural({a: 2}, {a: 4})"],seealso:["equal","unequal","smaller","smallerEq","largerEq","compare","compareText"]}},{}],545:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.compareTextDocs=void 0;exports.compareTextDocs={name:"compareText",category:"Relational",syntax:["compareText(x, y)"],description:"Compare two strings lexically. Comparison is case sensitive. Returns 1 when x > y, -1 when x < y, and 0 when x == y.",examples:['compareText("B", "A")','compareText("A", "B")','compareText("A", "A")','compareText("2", "10")','compare("2", "10")',"compare(2, 10)",'compareNatural("2", "10")','compareText("B", ["A", "B", "C"])'],seealso:["compare","compareNatural"]}},{}],546:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.deepEqualDocs=void 0;exports.deepEqualDocs={name:"deepEqual",category:"Relational",syntax:["deepEqual(x, y)"],description:"Check equality of two matrices element wise. Returns true if the size of both matrices is equal and when and each of the elements are equal.",examples:["deepEqual([1,3,4], [1,3,4])","deepEqual([1,3,4], [1,3])"],seealso:["equal","unequal","smaller","larger","smallerEq","largerEq","compare"]}},{}],547:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.equalDocs=void 0;exports.equalDocs={name:"equal",category:"Relational",syntax:["x == y","equal(x, y)"],description:"Check equality of two values. Returns true if the values are equal, and false if not.",examples:["2+2 == 3","2+2 == 4","a = 3.2","b = 6-2.8","a == b","50cm == 0.5m"],seealso:["unequal","smaller","larger","smallerEq","largerEq","compare","deepEqual","equalText"]}},{}],548:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.equalTextDocs=void 0;exports.equalTextDocs={name:"equalText",category:"Relational",syntax:["equalText(x, y)"],description:"Check equality of two strings. Comparison is case sensitive. Returns true if the values are equal, and false if not.",examples:['equalText("Hello", "Hello")','equalText("a", "A")','equal("2e3", "2000")','equalText("2e3", "2000")','equalText("B", ["A", "B", "C"])'],seealso:["compare","compareNatural","compareText","equal"]}},{}],549:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.largerDocs=void 0;exports.largerDocs={name:"larger",category:"Relational",syntax:["x > y","larger(x, y)"],description:"Check if value x is larger than y. Returns true if x is larger than y, and false if not.",examples:["2 > 3","5 > 2*2","a = 3.3","b = 6-2.8","(a > b)","(b < a)","5 cm > 2 inch"],seealso:["equal","unequal","smaller","smallerEq","largerEq","compare"]}},{}],550:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.largerEqDocs=void 0;exports.largerEqDocs={name:"largerEq",category:"Relational",syntax:["x >= y","largerEq(x, y)"],description:"Check if value x is larger or equal to y. Returns true if x is larger or equal to y, and false if not.",examples:["2 >= 1+1","2 > 1+1","a = 3.2","b = 6-2.8","(a >= b)"],seealso:["equal","unequal","smallerEq","smaller","compare"]}},{}],551:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.smallerDocs=void 0;exports.smallerDocs={name:"smaller",category:"Relational",syntax:["x < y","smaller(x, y)"],description:"Check if value x is smaller than value y. Returns true if x is smaller than y, and false if not.",examples:["2 < 3","5 < 2*2","a = 3.3","b = 6-2.8","(a < b)","5 cm < 2 inch"],seealso:["equal","unequal","larger","smallerEq","largerEq","compare"]}},{}],552:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.smallerEqDocs=void 0;exports.smallerEqDocs={name:"smallerEq",category:"Relational",syntax:["x <= y","smallerEq(x, y)"],description:"Check if value x is smaller or equal to value y. Returns true if x is smaller than y, and false if not.",examples:["2 <= 1+1","2 < 1+1","a = 3.2","b = 6-2.8","(a <= b)"],seealso:["equal","unequal","larger","smaller","largerEq","compare"]}},{}],553:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.unequalDocs=void 0;exports.unequalDocs={name:"unequal",category:"Relational",syntax:["x != y","unequal(x, y)"],description:"Check unequality of two values. Returns true if the values are unequal, and false if they are equal.",examples:["2+2 != 3","2+2 != 4","a = 3.2","b = 6-2.8","a != b","50cm != 0.5m","5 cm != 2 inch"],seealso:["equal","smaller","larger","smallerEq","largerEq","compare","deepEqual"]}},{}],554:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setCartesianDocs=void 0;exports.setCartesianDocs={name:"setCartesian",category:"Set",syntax:["setCartesian(set1, set2)"],description:"Create the cartesian product of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setCartesian([1, 2], [3, 4])"],seealso:["setUnion","setIntersect","setDifference","setPowerset"]}},{}],555:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setDifferenceDocs=void 0;exports.setDifferenceDocs={name:"setDifference",category:"Set",syntax:["setDifference(set1, set2)"],description:"Create the difference of two (multi)sets: every element of set1, that is not the element of set2. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setDifference([1, 2, 3, 4], [3, 4, 5, 6])","setDifference([[1, 2], [3, 4]], [[3, 4], [5, 6]])"],seealso:["setUnion","setIntersect","setSymDifference"]}},{}],556:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setDistinctDocs=void 0;exports.setDistinctDocs={name:"setDistinct",category:"Set",syntax:["setDistinct(set)"],description:"Collect the distinct elements of a multiset. A multi-dimension array will be converted to a single-dimension array before the operation.",examples:["setDistinct([1, 1, 1, 2, 2, 3])"],seealso:["setMultiplicity"]}},{}],557:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setIntersectDocs=void 0;exports.setIntersectDocs={name:"setIntersect",category:"Set",syntax:["setIntersect(set1, set2)"],description:"Create the intersection of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setIntersect([1, 2, 3, 4], [3, 4, 5, 6])","setIntersect([[1, 2], [3, 4]], [[3, 4], [5, 6]])"],seealso:["setUnion","setDifference"]}},{}],558:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setIsSubsetDocs=void 0;exports.setIsSubsetDocs={name:"setIsSubset",category:"Set",syntax:["setIsSubset(set1, set2)"],description:"Check whether a (multi)set is a subset of another (multi)set: every element of set1 is the element of set2. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setIsSubset([1, 2], [3, 4, 5, 6])","setIsSubset([3, 4], [3, 4, 5, 6])"],seealso:["setUnion","setIntersect","setDifference"]}},{}],559:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setMultiplicityDocs=void 0;exports.setMultiplicityDocs={name:"setMultiplicity",category:"Set",syntax:["setMultiplicity(element, set)"],description:"Count the multiplicity of an element in a multiset. A multi-dimension array will be converted to a single-dimension array before the operation.",examples:["setMultiplicity(1, [1, 2, 2, 4])","setMultiplicity(2, [1, 2, 2, 4])"],seealso:["setDistinct","setSize"]}},{}],560:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setPowersetDocs=void 0;exports.setPowersetDocs={name:"setPowerset",category:"Set",syntax:["setPowerset(set)"],description:"Create the powerset of a (multi)set: the powerset contains very possible subsets of a (multi)set. A multi-dimension array will be converted to a single-dimension array before the operation.",examples:["setPowerset([1, 2, 3])"],seealso:["setCartesian"]}},{}],561:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setSizeDocs=void 0;exports.setSizeDocs={name:"setSize",category:"Set",syntax:["setSize(set)","setSize(set, unique)"],description:'Count the number of elements of a (multi)set. When the second parameter "unique" is true, count only the unique values. A multi-dimension array will be converted to a single-dimension array before the operation.',examples:["setSize([1, 2, 2, 4])","setSize([1, 2, 2, 4], true)"],seealso:["setUnion","setIntersect","setDifference"]}},{}],562:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setSymDifferenceDocs=void 0;exports.setSymDifferenceDocs={name:"setSymDifference",category:"Set",syntax:["setSymDifference(set1, set2)"],description:"Create the symmetric difference of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setSymDifference([1, 2, 3, 4], [3, 4, 5, 6])","setSymDifference([[1, 2], [3, 4]], [[3, 4], [5, 6]])"],seealso:["setUnion","setIntersect","setDifference"]}},{}],563:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setUnionDocs=void 0;exports.setUnionDocs={name:"setUnion",category:"Set",syntax:["setUnion(set1, set2)"],description:"Create the union of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setUnion([1, 2, 3, 4], [3, 4, 5, 6])","setUnion([[1, 2], [3, 4]], [[3, 4], [5, 6]])"],seealso:["setIntersect","setDifference"]}},{}],564:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.erfDocs=void 0;exports.erfDocs={name:"erf",category:"Special",syntax:["erf(x)"],description:"Compute the erf function of a value using a rational Chebyshev approximations for different intervals of x",examples:["erf(0.2)","erf(-0.5)","erf(4)"],seealso:[]}},{}],565:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.madDocs=void 0;exports.madDocs={name:"mad",category:"Statistics",syntax:["mad(a, b, c, ...)","mad(A)"],description:"Compute the median absolute deviation of a matrix or a list with values. The median absolute deviation is defined as the median of the absolute deviations from the median.",examples:["mad(10, 20, 30)","mad([1, 2, 3])"],seealso:["mean","median","std","abs"]}},{}],566:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.maxDocs=void 0;exports.maxDocs={name:"max",category:"Statistics",syntax:["max(a, b, c, ...)","max(A)","max(A, dim)"],description:"Compute the maximum value of a list of values.",examples:["max(2, 3, 4, 1)","max([2, 3, 4, 1])","max([2, 5; 4, 3])","max([2, 5; 4, 3], 1)","max([2, 5; 4, 3], 2)","max(2.7, 7.1, -4.5, 2.0, 4.1)","min(2.7, 7.1, -4.5, 2.0, 4.1)"],seealso:["mean","median","min","prod","std","sum","variance"]}},{}],567:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.meanDocs=void 0;exports.meanDocs={name:"mean",category:"Statistics",syntax:["mean(a, b, c, ...)","mean(A)","mean(A, dim)"],description:"Compute the arithmetic mean of a list of values.",examples:["mean(2, 3, 4, 1)","mean([2, 3, 4, 1])","mean([2, 5; 4, 3])","mean([2, 5; 4, 3], 1)","mean([2, 5; 4, 3], 2)","mean([1.0, 2.7, 3.2, 4.0])"],seealso:["max","median","min","prod","std","sum","variance"]}},{}],568:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.medianDocs=void 0;exports.medianDocs={name:"median",category:"Statistics",syntax:["median(a, b, c, ...)","median(A)"],description:"Compute the median of all values. The values are sorted and the middle value is returned. In case of an even number of values, the average of the two middle values is returned.",examples:["median(5, 2, 7)","median([3, -1, 5, 7])"],seealso:["max","mean","min","prod","std","sum","variance","quantileSeq"]}},{}],569:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.minDocs=void 0;exports.minDocs={name:"min",category:"Statistics",syntax:["min(a, b, c, ...)","min(A)","min(A, dim)"],description:"Compute the minimum value of a list of values.",examples:["min(2, 3, 4, 1)","min([2, 3, 4, 1])","min([2, 5; 4, 3])","min([2, 5; 4, 3], 1)","min([2, 5; 4, 3], 2)","min(2.7, 7.1, -4.5, 2.0, 4.1)","max(2.7, 7.1, -4.5, 2.0, 4.1)"],seealso:["max","mean","median","prod","std","sum","variance"]}},{}],570:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.modeDocs=void 0;exports.modeDocs={name:"mode",category:"Statistics",syntax:["mode(a, b, c, ...)","mode(A)","mode(A, a, b, B, c, ...)"],description:"Computes the mode of all values as an array. In case mode being more than one, multiple values are returned in an array.",examples:["mode(2, 1, 4, 3, 1)","mode([1, 2.7, 3.2, 4, 2.7])","mode(1, 4, 6, 1, 6)"],seealso:["max","mean","min","median","prod","std","sum","variance"]}},{}],571:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.prodDocs=void 0;exports.prodDocs={name:"prod",category:"Statistics",syntax:["prod(a, b, c, ...)","prod(A)"],description:"Compute the product of all values.",examples:["prod(2, 3, 4)","prod([2, 3, 4])","prod([2, 5; 4, 3])"],seealso:["max","mean","min","median","min","std","sum","variance"]}},{}],572:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.quantileSeqDocs=void 0;exports.quantileSeqDocs={name:"quantileSeq",category:"Statistics",syntax:["quantileSeq(A, prob[, sorted])","quantileSeq(A, [prob1, prob2, ...][, sorted])","quantileSeq(A, N[, sorted])"],description:"Compute the prob order quantile of a matrix or a list with values. The sequence is sorted and the middle value is returned. Supported types of sequence values are: Number, BigNumber, Unit Supported types of probablity are: Number, BigNumber. \n\nIn case of a (multi dimensional) array or matrix, the prob order quantile of all elements will be calculated.",examples:["quantileSeq([3, -1, 5, 7], 0.5)","quantileSeq([3, -1, 5, 7], [1/3, 2/3])","quantileSeq([3, -1, 5, 7], 2)","quantileSeq([-1, 3, 5, 7], 0.5, true)"],seealso:["mean","median","min","max","prod","std","sum","variance"]}},{}],573:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.stdDocs=void 0;exports.stdDocs={name:"std",category:"Statistics",syntax:["std(a, b, c, ...)","std(A)","std(A, normalization)"],description:'Compute the standard deviation of all values, defined as std(A) = sqrt(variance(A)). Optional parameter normalization can be "unbiased" (default), "uncorrected", or "biased".',examples:["std(2, 4, 6)","std([2, 4, 6, 8])",'std([2, 4, 6, 8], "uncorrected")','std([2, 4, 6, 8], "biased")',"std([1, 2, 3; 4, 5, 6])"],seealso:["max","mean","min","median","prod","sum","variance"]}},{}],574:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sumDocs=void 0;exports.sumDocs={name:"sum",category:"Statistics",syntax:["sum(a, b, c, ...)","sum(A)"],description:"Compute the sum of all values.",examples:["sum(2, 3, 4, 1)","sum([2, 3, 4, 1])","sum([2, 5; 4, 3])"],seealso:["max","mean","median","min","prod","std","sum","variance"]}},{}],575:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.varianceDocs=void 0;exports.varianceDocs={name:"variance",category:"Statistics",syntax:["variance(a, b, c, ...)","variance(A)","variance(A, normalization)"],description:'Compute the variance of all values. Optional parameter normalization can be "unbiased" (default), "uncorrected", or "biased".',examples:["variance(2, 4, 6)","variance([2, 4, 6, 8])",'variance([2, 4, 6, 8], "uncorrected")','variance([2, 4, 6, 8], "biased")',"variance([1, 2, 3; 4, 5, 6])"],seealso:["max","mean","min","median","min","prod","std","sum"]}},{}],576:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.acosDocs=void 0;exports.acosDocs={name:"acos",category:"Trigonometry",syntax:["acos(x)"],description:"Compute the inverse cosine of a value in radians.",examples:["acos(0.5)","acos(cos(2.3))"],seealso:["cos","atan","asin"]}},{}],577:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.acoshDocs=void 0;exports.acoshDocs={name:"acosh",category:"Trigonometry",syntax:["acosh(x)"],description:"Calculate the hyperbolic arccos of a value, defined as `acosh(x) = ln(sqrt(x^2 - 1) + x)`.",examples:["acosh(1.5)"],seealso:["cosh","asinh","atanh"]}},{}],578:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.acotDocs=void 0;exports.acotDocs={name:"acot",category:"Trigonometry",syntax:["acot(x)"],description:"Calculate the inverse cotangent of a value.",examples:["acot(0.5)","acot(cot(0.5))","acot(2)"],seealso:["cot","atan"]}},{}],579:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.acothDocs=void 0;exports.acothDocs={name:"acoth",category:"Trigonometry",syntax:["acoth(x)"],description:"Calculate the hyperbolic arccotangent of a value, defined as `acoth(x) = (ln((x+1)/x) + ln(x/(x-1))) / 2`.",examples:["acoth(2)","acoth(0.5)"],seealso:["acsch","asech"]}},{}],580:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.acscDocs=void 0;exports.acscDocs={name:"acsc",category:"Trigonometry",syntax:["acsc(x)"],description:"Calculate the inverse cotangent of a value.",examples:["acsc(2)","acsc(csc(0.5))","acsc(0.5)"],seealso:["csc","asin","asec"]}},{}],581:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.acschDocs=void 0;exports.acschDocs={name:"acsch",category:"Trigonometry",syntax:["acsch(x)"],description:"Calculate the hyperbolic arccosecant of a value, defined as `acsch(x) = ln(1/x + sqrt(1/x^2 + 1))`.",examples:["acsch(0.5)"],seealso:["asech","acoth"]}},{}],582:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.asecDocs=void 0;exports.asecDocs={name:"asec",category:"Trigonometry",syntax:["asec(x)"],description:"Calculate the inverse secant of a value.",examples:["asec(0.5)","asec(sec(0.5))","asec(2)"],seealso:["acos","acot","acsc"]}},{}],583:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.asechDocs=void 0;exports.asechDocs={name:"asech",category:"Trigonometry",syntax:["asech(x)"],description:"Calculate the inverse secant of a value.",examples:["asech(0.5)"],seealso:["acsch","acoth"]}},{}],584:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.asinDocs=void 0;exports.asinDocs={name:"asin",category:"Trigonometry",syntax:["asin(x)"],description:"Compute the inverse sine of a value in radians.",examples:["asin(0.5)","asin(sin(0.5))"],seealso:["sin","acos","atan"]}},{}],585:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.asinhDocs=void 0;exports.asinhDocs={name:"asinh",category:"Trigonometry",syntax:["asinh(x)"],description:"Calculate the hyperbolic arcsine of a value, defined as `asinh(x) = ln(x + sqrt(x^2 + 1))`.",examples:["asinh(0.5)"],seealso:["acosh","atanh"]}},{}],586:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.atanDocs=void 0;exports.atanDocs={name:"atan",category:"Trigonometry",syntax:["atan(x)"],description:"Compute the inverse tangent of a value in radians.",examples:["atan(0.5)","atan(tan(0.5))"],seealso:["tan","acos","asin"]}},{}],587:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.atan2Docs=void 0;exports.atan2Docs={name:"atan2",category:"Trigonometry",syntax:["atan2(y, x)"],description:"Computes the principal value of the arc tangent of y/x in radians.",examples:["atan2(2, 2) / pi","angle = 60 deg in rad","x = cos(angle)","y = sin(angle)","atan2(y, x)"],seealso:["sin","cos","tan"]}},{}],588:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.atanhDocs=void 0;exports.atanhDocs={name:"atanh",category:"Trigonometry",syntax:["atanh(x)"],description:"Calculate the hyperbolic arctangent of a value, defined as `atanh(x) = ln((1 + x)/(1 - x)) / 2`.",examples:["atanh(0.5)"],seealso:["acosh","asinh"]}},{}],589:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.cosDocs=void 0;exports.cosDocs={name:"cos",category:"Trigonometry",syntax:["cos(x)"],description:"Compute the cosine of x in radians.",examples:["cos(2)","cos(pi / 4) ^ 2","cos(180 deg)","cos(60 deg)","sin(0.2)^2 + cos(0.2)^2"],seealso:["acos","sin","tan"]}},{}],590:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.coshDocs=void 0;exports.coshDocs={name:"cosh",category:"Trigonometry",syntax:["cosh(x)"],description:"Compute the hyperbolic cosine of x in radians.",examples:["cosh(0.5)"],seealso:["sinh","tanh","coth"]}},{}],591:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.cotDocs=void 0;exports.cotDocs={name:"cot",category:"Trigonometry",syntax:["cot(x)"],description:"Compute the cotangent of x in radians. Defined as 1/tan(x)",examples:["cot(2)","1 / tan(2)"],seealso:["sec","csc","tan"]}},{}],592:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.cothDocs=void 0;exports.cothDocs={name:"coth",category:"Trigonometry",syntax:["coth(x)"],description:"Compute the hyperbolic cotangent of x in radians.",examples:["coth(2)","1 / tanh(2)"],seealso:["sech","csch","tanh"]}},{}],593:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.cscDocs=void 0;exports.cscDocs={name:"csc",category:"Trigonometry",syntax:["csc(x)"],description:"Compute the cosecant of x in radians. Defined as 1/sin(x)",examples:["csc(2)","1 / sin(2)"],seealso:["sec","cot","sin"]}},{}],594:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.cschDocs=void 0;exports.cschDocs={name:"csch",category:"Trigonometry",syntax:["csch(x)"],description:"Compute the hyperbolic cosecant of x in radians. Defined as 1/sinh(x)",examples:["csch(2)","1 / sinh(2)"],seealso:["sech","coth","sinh"]}},{}],595:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.secDocs=void 0;exports.secDocs={name:"sec",category:"Trigonometry",syntax:["sec(x)"],description:"Compute the secant of x in radians. Defined as 1/cos(x)",examples:["sec(2)","1 / cos(2)"],seealso:["cot","csc","cos"]}},{}],596:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sechDocs=void 0;exports.sechDocs={name:"sech",category:"Trigonometry",syntax:["sech(x)"],description:"Compute the hyperbolic secant of x in radians. Defined as 1/cosh(x)",examples:["sech(2)","1 / cosh(2)"],seealso:["coth","csch","cosh"]}},{}],597:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sinDocs=void 0;exports.sinDocs={name:"sin",category:"Trigonometry",syntax:["sin(x)"],description:"Compute the sine of x in radians.",examples:["sin(2)","sin(pi / 4) ^ 2","sin(90 deg)","sin(30 deg)","sin(0.2)^2 + cos(0.2)^2"],seealso:["asin","cos","tan"]}},{}],598:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sinhDocs=void 0;exports.sinhDocs={name:"sinh",category:"Trigonometry",syntax:["sinh(x)"],description:"Compute the hyperbolic sine of x in radians.",examples:["sinh(0.5)"],seealso:["cosh","tanh"]}},{}],599:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.tanDocs=void 0;exports.tanDocs={name:"tan",category:"Trigonometry",syntax:["tan(x)"],description:"Compute the tangent of x in radians.",examples:["tan(0.5)","sin(0.5) / cos(0.5)","tan(pi / 4)","tan(45 deg)"],seealso:["atan","sin","cos"]}},{}],600:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.tanhDocs=void 0;exports.tanhDocs={name:"tanh",category:"Trigonometry",syntax:["tanh(x)"],description:"Compute the hyperbolic tangent of x in radians.",examples:["tanh(0.5)","sinh(0.5) / cosh(0.5)"],seealso:["sinh","cosh"]}},{}],601:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.toDocs=void 0;exports.toDocs={name:"to",category:"Units",syntax:["x to unit","to(x, unit)"],description:"Change the unit of a value.",examples:["5 inch to cm","3.2kg to g","16 bytes in bits"],seealso:[]}},{}],602:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.cloneDocs=void 0;exports.cloneDocs={name:"clone",category:"Utils",syntax:["clone(x)"],description:"Clone a variable. Creates a copy of primitive variables,and a deep copy of matrices",examples:["clone(3.5)","clone(2 - 4i)","clone(45 deg)","clone([1, 2; 3, 4])",'clone("hello world")'],seealso:[]}},{}],603:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.formatDocs=void 0;exports.formatDocs={name:"format",category:"Utils",syntax:["format(value)","format(value, precision)"],description:"Format a value of any type as string.",examples:["format(2.3)","format(3 - 4i)","format([])","format(pi, 3)"],seealso:["print"]}},{}],604:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.hasNumericValueDocs=void 0;exports.hasNumericValueDocs={name:"hasNumericValue",category:"Utils",syntax:["hasNumericValue(x)"],description:"Test whether a value is an numeric value. In case of a string, true is returned if the string contains a numeric value.",examples:["hasNumericValue(2)",'hasNumericValue("2")','isNumeric("2")',"hasNumericValue(0)","hasNumericValue(bignumber(500))","hasNumericValue(fraction(0.125))","hasNumericValue(2 + 3i)",'hasNumericValue([2.3, "foo", false])'],seealso:["isInteger","isZero","isNegative","isPositive","isNaN","isNumeric"]}},{}],605:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isIntegerDocs=void 0;exports.isIntegerDocs={name:"isInteger",category:"Utils",syntax:["isInteger(x)"],description:"Test whether a value is an integer number.",examples:["isInteger(2)","isInteger(3.5)","isInteger([3, 0.5, -2])"],seealso:["isNegative","isNumeric","isPositive","isZero"]}},{}],606:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isNaNDocs=void 0;exports.isNaNDocs={name:"isNaN",category:"Utils",syntax:["isNaN(x)"],description:"Test whether a value is NaN (not a number)",examples:["isNaN(2)","isNaN(0 / 0)","isNaN(NaN)","isNaN(Infinity)"],seealso:["isNegative","isNumeric","isPositive","isZero"]}},{}],607:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isNegativeDocs=void 0;exports.isNegativeDocs={name:"isNegative",category:"Utils",syntax:["isNegative(x)"],description:"Test whether a value is negative: smaller than zero.",examples:["isNegative(2)","isNegative(0)","isNegative(-4)","isNegative([3, 0.5, -2])"],seealso:["isInteger","isNumeric","isPositive","isZero"]}},{}],608:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isNumericDocs=void 0;exports.isNumericDocs={name:"isNumeric",category:"Utils",syntax:["isNumeric(x)"],description:"Test whether a value is a numeric value. Returns true when the input is a number, BigNumber, Fraction, or boolean.",examples:["isNumeric(2)",'isNumeric("2")','hasNumericValue("2")',"isNumeric(0)","isNumeric(bignumber(500))","isNumeric(fraction(0.125))","isNumeric(2 + 3i)",'isNumeric([2.3, "foo", false])'],seealso:["isInteger","isZero","isNegative","isPositive","isNaN","hasNumericValue"]}},{}],609:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isPositiveDocs=void 0;exports.isPositiveDocs={name:"isPositive",category:"Utils",syntax:["isPositive(x)"],description:"Test whether a value is positive: larger than zero.",examples:["isPositive(2)","isPositive(0)","isPositive(-4)","isPositive([3, 0.5, -2])"],seealso:["isInteger","isNumeric","isNegative","isZero"]}},{}],610:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isPrimeDocs=void 0;exports.isPrimeDocs={name:"isPrime",category:"Utils",syntax:["isPrime(x)"],description:"Test whether a value is prime: has no divisors other than itself and one.",examples:["isPrime(3)","isPrime(-2)","isPrime([2, 17, 100])"],seealso:["isInteger","isNumeric","isNegative","isZero"]}},{}],611:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isZeroDocs=void 0;exports.isZeroDocs={name:"isZero",category:"Utils",syntax:["isZero(x)"],description:"Test whether a value is zero.",examples:["isZero(2)","isZero(0)","isZero(-4)","isZero([3, 0, -2, 0])"],seealso:["isInteger","isNumeric","isNegative","isPositive"]}},{}],612:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.numericDocs=void 0;exports.numericDocs={name:"numeric",category:"Utils",syntax:["numeric(x)"],description:"Convert a numeric input to a specific numeric type: number, BigNumber, or Fraction.",examples:['numeric("4")','numeric("4", "number")','numeric("4", "BigNumber")','numeric("4", "Fraction)','numeric(4, "Fraction")','numeric(fraction(2, 5), "number)'],seealso:["number","fraction","bignumber","string","format"]}},{}],613:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.typeOfDocs=void 0;exports.typeOfDocs={name:"typeOf",category:"Utils",syntax:["typeOf(x)"],description:"Get the type of a variable.",examples:["typeOf(3.5)","typeOf(2 - 4i)","typeOf(45 deg)",'typeOf("hello world")'],seealso:["getMatrixDataType"]}},{}],614:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createCompile=void 0;var _collection=require("../../utils/collection"),_factory=require("../../utils/factory"),dependencies=["typed","parse"],createCompile=(0,_factory.factory)("compile",dependencies,function(_ref){var typed=_ref.typed,parse=_ref.parse;return typed("compile",{string:function(expr){return parse(expr).compile()},"Array | Matrix":function(expr){return(0,_collection.deepMap)(expr,function(entry){return parse(entry).compile()})}})});exports.createCompile=createCompile},{"../../utils/collection":927,"../../utils/factory":931}],615:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createDeprecatedEval=void 0;var _factory=require("../../utils/factory"),_log=require("../../utils/log"),createDeprecatedEval=(0,_factory.factory)("eval",["evaluate"],function(_ref){var evaluate=_ref.evaluate;return function(){(0,_log.warnOnce)('Function "eval" has been renamed to "evaluate" in v6.0.0, please use the new function instead.');for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return evaluate.apply(evaluate,args)}});exports.createDeprecatedEval=createDeprecatedEval},{"../../utils/factory":931,"../../utils/log":935}],616:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createEvaluate=void 0;var _collection=require("../../utils/collection"),_factory=require("../../utils/factory"),dependencies=["typed","parse"],createEvaluate=(0,_factory.factory)("evaluate",dependencies,function(_ref){var typed=_ref.typed,parse=_ref.parse;return typed("evaluate",{string:function(expr){return parse(expr).compile().evaluate({})},"string, Object":function(expr,scope){return parse(expr).compile().evaluate(scope)},"Array | Matrix":function(expr){var scope={};return(0,_collection.deepMap)(expr,function(entry){return parse(entry).compile().evaluate(scope)})},"Array | Matrix, Object":function(expr,scope){return(0,_collection.deepMap)(expr,function(entry){return parse(entry).compile().evaluate(scope)})}})});exports.createEvaluate=createEvaluate},{"../../utils/collection":927,"../../utils/factory":931}],617:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createHelp=void 0;var _factory=require("../../utils/factory"),_customs=require("../../utils/customs"),_embeddedDocs=require("../embeddedDocs/embeddedDocs"),_object=require("../../utils/object"),dependencies=["typed","mathWithTransform","Help"],createHelp=(0,_factory.factory)("help",dependencies,function(_ref){var typed=_ref.typed,mathWithTransform=_ref.mathWithTransform,Help=_ref.Help;return typed("help",{any:function(search){var prop,searchName=search;if("string"!=typeof search)for(prop in mathWithTransform)if((0,_object.hasOwnProperty)(mathWithTransform,prop)&&search===mathWithTransform[prop]){searchName=prop;break}var doc=(0,_customs.getSafeProperty)(_embeddedDocs.embeddedDocs,searchName);if(doc)return new Help(doc);var searchText="function"==typeof searchName?searchName.name:searchName;throw new Error('No documentation found on "'+searchText+'"')}})});exports.createHelp=createHelp},{"../../utils/customs":929,"../../utils/factory":931,"../../utils/object":938,"../embeddedDocs/embeddedDocs":435}],618:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createParser=void 0;var _factory=require("../../utils/factory"),dependencies=["typed","Parser"],createParser=(0,_factory.factory)("parser",dependencies,function(_ref){var typed=_ref.typed,Parser=_ref.Parser;return typed("parser",{"":function(){return new Parser}})});exports.createParser=createParser},{"../../utils/factory":931}],619:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.keywords=void 0;exports.keywords={end:!0}},{}],620:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createAccessorNode=void 0;var _is=require("../../utils/is"),_customs=require("../../utils/customs"),_factory=require("../../utils/factory"),_access=require("./utils/access"),dependencies=["subset","Node"],createAccessorNode=(0,_factory.factory)("AccessorNode",dependencies,function(_ref){var subset=_ref.subset,Node=_ref.Node,access=(0,_access.accessFactory)({subset:subset});function AccessorNode(object,index){if(!(this instanceof AccessorNode))throw new SyntaxError("Constructor must be called with the new operator");if(!(0,_is.isNode)(object))throw new TypeError('Node expected for parameter "object"');if(!(0,_is.isIndexNode)(index))throw new TypeError('IndexNode expected for parameter "index"');this.object=object||null,this.index=index,Object.defineProperty(this,"name",{get:function(){return this.index?this.index.isObjectProperty()?this.index.getObjectProperty():"":this.object.name||""}.bind(this),set:function(){throw new Error("Cannot assign a new name, name is read-only")}})}function needParenthesis(node){return!((0,_is.isAccessorNode)(node)||(0,_is.isArrayNode)(node)||(0,_is.isConstantNode)(node)||(0,_is.isFunctionNode)(node)||(0,_is.isObjectNode)(node)||(0,_is.isParenthesisNode)(node)||(0,_is.isSymbolNode)(node))}return(AccessorNode.prototype=new Node).type="AccessorNode",AccessorNode.prototype.isAccessorNode=!0,AccessorNode.prototype._compile=function(math,argNames){var evalObject=this.object._compile(math,argNames),evalIndex=this.index._compile(math,argNames);if(this.index.isObjectProperty()){var prop=this.index.getObjectProperty();return function(scope,args,context){return(0,_customs.getSafeProperty)(evalObject(scope,args,context),prop)}}return function(scope,args,context){var object=evalObject(scope,args,context),index=evalIndex(scope,args,object);return access(object,index)}},AccessorNode.prototype.forEach=function(callback){callback(this.object,"object",this),callback(this.index,"index",this)},AccessorNode.prototype.map=function(callback){return new AccessorNode(this._ifNode(callback(this.object,"object",this)),this._ifNode(callback(this.index,"index",this)))},AccessorNode.prototype.clone=function(){return new AccessorNode(this.object,this.index)},AccessorNode.prototype._toString=function(options){var object=this.object.toString(options);return needParenthesis(this.object)&&(object="("+object+")"),object+this.index.toString(options)},AccessorNode.prototype.toHTML=function(options){var object=this.object.toHTML(options);return needParenthesis(this.object)&&(object='('+object+')'),object+this.index.toHTML(options)},AccessorNode.prototype._toTex=function(options){var object=this.object.toTex(options);return needParenthesis(this.object)&&(object="\\left(' + object + '\\right)"),object+this.index.toTex(options)},AccessorNode.prototype.toJSON=function(){return{mathjs:"AccessorNode",object:this.object,index:this.index}},AccessorNode.fromJSON=function(json){return new AccessorNode(json.object,json.index)},AccessorNode},{isClass:!0,isNode:!0});exports.createAccessorNode=createAccessorNode},{"../../utils/customs":929,"../../utils/factory":931,"../../utils/is":933,"./utils/access":636}],621:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createArrayNode=void 0;var _is=require("../../utils/is"),_array=require("../../utils/array"),dependencies=["Node"],createArrayNode=(0,require("../../utils/factory").factory)("ArrayNode",dependencies,function(_ref){var Node=_ref.Node;function ArrayNode(items){if(!(this instanceof ArrayNode))throw new SyntaxError("Constructor must be called with the new operator");if(this.items=items||[],!Array.isArray(this.items)||!this.items.every(_is.isNode))throw new TypeError("Array containing Nodes expected");var deprecated=function(){throw new Error("Property `ArrayNode.nodes` is deprecated, use `ArrayNode.items` instead")};Object.defineProperty(this,"nodes",{get:deprecated,set:deprecated})}return(ArrayNode.prototype=new Node).type="ArrayNode",ArrayNode.prototype.isArrayNode=!0,ArrayNode.prototype._compile=function(math,argNames){var evalItems=(0,_array.map)(this.items,function(item){return item._compile(math,argNames)});if("Array"===math.config.matrix)return function(scope,args,context){return(0,_array.map)(evalItems,function(evalItem){return evalItem(scope,args,context)})};var matrix=math.matrix;return function(scope,args,context){return matrix((0,_array.map)(evalItems,function(evalItem){return evalItem(scope,args,context)}))}},ArrayNode.prototype.forEach=function(callback){for(var i=0;i['+this.items.map(function(node){return node.toHTML(options)}).join(',')+']'},ArrayNode.prototype._toTex=function(options){var s="\\begin{bmatrix}";return this.items.forEach(function(node){node.items?s+=node.items.map(function(childNode){return childNode.toTex(options)}).join("&"):s+=node.toTex(options),s+="\\\\"}),s+="\\end{bmatrix}"},ArrayNode},{isClass:!0,isNode:!0});exports.createArrayNode=createArrayNode},{"../../utils/array":922,"../../utils/factory":931,"../../utils/is":933}],622:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createAssignmentNode=void 0;var _is=require("../../utils/is"),_customs=require("../../utils/customs"),_factory=require("../../utils/factory"),_access=require("./utils/access"),_assign=require("./utils/assign"),_operators=require("../operators"),dependencies=["subset","?matrix","Node"],createAssignmentNode=(0,_factory.factory)("AssignmentNode",dependencies,function(_ref){var subset=_ref.subset,matrix=_ref.matrix,Node=_ref.Node,access=(0,_access.accessFactory)({subset:subset}),assign=(0,_assign.assignFactory)({subset:subset,matrix:matrix});function AssignmentNode(object,index,value){if(!(this instanceof AssignmentNode))throw new SyntaxError("Constructor must be called with the new operator");if(this.object=object,this.index=value?index:null,this.value=value||index,!(0,_is.isSymbolNode)(object)&&!(0,_is.isAccessorNode)(object))throw new TypeError('SymbolNode or AccessorNode expected as "object"');if((0,_is.isSymbolNode)(object)&&"end"===object.name)throw new Error('Cannot assign to symbol "end"');if(this.index&&!(0,_is.isIndexNode)(this.index))throw new TypeError('IndexNode expected as "index"');if(!(0,_is.isNode)(this.value))throw new TypeError('Node expected as "value"');Object.defineProperty(this,"name",{get:function(){return this.index?this.index.isObjectProperty()?this.index.getObjectProperty():"":this.object.name||""}.bind(this),set:function(){throw new Error("Cannot assign a new name, name is read-only")}})}function needParenthesis(node,parenthesis){parenthesis=parenthesis||"keep";var precedence=(0,_operators.getPrecedence)(node,parenthesis),exprPrecedence=(0,_operators.getPrecedence)(node.value,parenthesis);return"all"===parenthesis||null!==exprPrecedence&&exprPrecedence<=precedence}return(AssignmentNode.prototype=new Node).type="AssignmentNode",AssignmentNode.prototype.isAssignmentNode=!0,AssignmentNode.prototype._compile=function(math,argNames){var evalObject=this.object._compile(math,argNames),evalIndex=this.index?this.index._compile(math,argNames):null,evalValue=this.value._compile(math,argNames),name=this.object.name;if(this.index){if(this.index.isObjectProperty()){var prop=this.index.getObjectProperty();return function(scope,args,context){var object=evalObject(scope,args,context),value=evalValue(scope,args,context);return(0,_customs.setSafeProperty)(object,prop,value)}}if((0,_is.isSymbolNode)(this.object))return function(scope,args,context){var childObject=evalObject(scope,args,context),value=evalValue(scope,args,context),index=evalIndex(scope,args,childObject);return(0,_customs.setSafeProperty)(scope,name,assign(childObject,index,value)),value};var evalParentObject=this.object.object._compile(math,argNames);if(this.object.index.isObjectProperty()){var parentProp=this.object.index.getObjectProperty();return function(scope,args,context){var parent=evalParentObject(scope,args,context),childObject=(0,_customs.getSafeProperty)(parent,parentProp),index=evalIndex(scope,args,childObject),value=evalValue(scope,args,context);return(0,_customs.setSafeProperty)(parent,parentProp,assign(childObject,index,value)),value}}var evalParentIndex=this.object.index._compile(math,argNames);return function(scope,args,context){var parent=evalParentObject(scope,args,context),parentIndex=evalParentIndex(scope,args,parent),childObject=access(parent,parentIndex),index=evalIndex(scope,args,childObject),value=evalValue(scope,args,context);return assign(parent,parentIndex,assign(childObject,index,value)),value}}if(!(0,_is.isSymbolNode)(this.object))throw new TypeError("SymbolNode expected as object");return function(scope,args,context){return(0,_customs.setSafeProperty)(scope,name,evalValue(scope,args,context))}},AssignmentNode.prototype.forEach=function(callback){callback(this.object,"object",this),this.index&&callback(this.index,"index",this),callback(this.value,"value",this)},AssignmentNode.prototype.map=function(callback){return new AssignmentNode(this._ifNode(callback(this.object,"object",this)),this.index?this._ifNode(callback(this.index,"index",this)):null,this._ifNode(callback(this.value,"value",this)))},AssignmentNode.prototype.clone=function(){return new AssignmentNode(this.object,this.index,this.value)},AssignmentNode.prototype._toString=function(options){var object=this.object.toString(options),index=this.index?this.index.toString(options):"",value=this.value.toString(options);return needParenthesis(this,options&&options.parenthesis)&&(value="("+value+")"),object+index+" = "+value},AssignmentNode.prototype.toJSON=function(){return{mathjs:"AssignmentNode",object:this.object,index:this.index,value:this.value}},AssignmentNode.fromJSON=function(json){return new AssignmentNode(json.object,json.index,json.value)},AssignmentNode.prototype.toHTML=function(options){var object=this.object.toHTML(options),index=this.index?this.index.toHTML(options):"",value=this.value.toHTML(options);return needParenthesis(this,options&&options.parenthesis)&&(value='('+value+')'),object+index+'='+value},AssignmentNode.prototype._toTex=function(options){var object=this.object.toTex(options),index=this.index?this.index.toTex(options):"",value=this.value.toTex(options);return needParenthesis(this,options&&options.parenthesis)&&(value="\\left(".concat(value,"\\right)")),object+index+":="+value},AssignmentNode},{isClass:!0,isNode:!0});exports.createAssignmentNode=createAssignmentNode},{"../../utils/customs":929,"../../utils/factory":931,"../../utils/is":933,"../operators":638,"./utils/access":636,"./utils/assign":637}],623:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createBlockNode=void 0;var _is=require("../../utils/is"),_array=require("../../utils/array"),dependencies=["ResultSet","Node"],createBlockNode=(0,require("../../utils/factory").factory)("BlockNode",dependencies,function(_ref){var ResultSet=_ref.ResultSet,Node=_ref.Node;function BlockNode(blocks){if(!(this instanceof BlockNode))throw new SyntaxError("Constructor must be called with the new operator");if(!Array.isArray(blocks))throw new Error("Array expected");this.blocks=blocks.map(function(block){var node=block&&block.node,visible=!block||void 0===block.visible||block.visible;if(!(0,_is.isNode)(node))throw new TypeError('Property "node" must be a Node');if("boolean"!=typeof visible)throw new TypeError('Property "visible" must be a boolean');return{node:node,visible:visible}})}return(BlockNode.prototype=new Node).type="BlockNode",BlockNode.prototype.isBlockNode=!0,BlockNode.prototype._compile=function(math,argNames){var evalBlocks=(0,_array.map)(this.blocks,function(block){return{evaluate:block.node._compile(math,argNames),visible:block.visible}});return function(scope,args,context){var results=[];return(0,_array.forEach)(evalBlocks,function(block){var result=block.evaluate(scope,args,context);block.visible&&results.push(result)}),new ResultSet(results)}},BlockNode.prototype.forEach=function(callback){for(var i=0;i;')}).join('
')},BlockNode.prototype._toTex=function(options){return this.blocks.map(function(param){return param.node.toTex(options)+(param.visible?"":";")}).join("\\;\\;\n")},BlockNode},{isClass:!0,isNode:!0});exports.createBlockNode=createBlockNode},{"../../utils/array":922,"../../utils/factory":931,"../../utils/is":933}],624:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createConditionalNode=void 0;var _is=require("../../utils/is"),_factory=require("../../utils/factory"),_operators=require("../operators"),dependencies=["Node"],createConditionalNode=(0,_factory.factory)("ConditionalNode",dependencies,function(_ref){var Node=_ref.Node;function ConditionalNode(condition,trueExpr,falseExpr){if(!(this instanceof ConditionalNode))throw new SyntaxError("Constructor must be called with the new operator");if(!(0,_is.isNode)(condition))throw new TypeError("Parameter condition must be a Node");if(!(0,_is.isNode)(trueExpr))throw new TypeError("Parameter trueExpr must be a Node");if(!(0,_is.isNode)(falseExpr))throw new TypeError("Parameter falseExpr must be a Node");this.condition=condition,this.trueExpr=trueExpr,this.falseExpr=falseExpr}return(ConditionalNode.prototype=new Node).type="ConditionalNode",ConditionalNode.prototype.isConditionalNode=!0,ConditionalNode.prototype._compile=function(math,argNames){var evalCondition=this.condition._compile(math,argNames),evalTrueExpr=this.trueExpr._compile(math,argNames),evalFalseExpr=this.falseExpr._compile(math,argNames);return function(scope,args,context){return(function(condition){if("number"==typeof condition||"boolean"==typeof condition||"string"==typeof condition)return!!condition;if(condition){if((0,_is.isBigNumber)(condition))return!condition.isZero();if((0,_is.isComplex)(condition))return!(!condition.re&&!condition.im);if((0,_is.isUnit)(condition))return!!condition.value}if(null!=condition)throw new TypeError('Unsupported type of condition "'+(0,_is.typeOf)(condition)+'"');return!1}(evalCondition(scope,args,context))?evalTrueExpr:evalFalseExpr)(scope,args,context)}},ConditionalNode.prototype.forEach=function(callback){callback(this.condition,"condition",this),callback(this.trueExpr,"trueExpr",this),callback(this.falseExpr,"falseExpr",this)},ConditionalNode.prototype.map=function(callback){return new ConditionalNode(this._ifNode(callback(this.condition,"condition",this)),this._ifNode(callback(this.trueExpr,"trueExpr",this)),this._ifNode(callback(this.falseExpr,"falseExpr",this)))},ConditionalNode.prototype.clone=function(){return new ConditionalNode(this.condition,this.trueExpr,this.falseExpr)},ConditionalNode.prototype._toString=function(options){var parenthesis=options&&options.parenthesis?options.parenthesis:"keep",precedence=(0,_operators.getPrecedence)(this,parenthesis),condition=this.condition.toString(options),conditionPrecedence=(0,_operators.getPrecedence)(this.condition,parenthesis);("all"===parenthesis||"OperatorNode"===this.condition.type||null!==conditionPrecedence&&conditionPrecedence<=precedence)&&(condition="("+condition+")");var trueExpr=this.trueExpr.toString(options),truePrecedence=(0,_operators.getPrecedence)(this.trueExpr,parenthesis);("all"===parenthesis||"OperatorNode"===this.trueExpr.type||null!==truePrecedence&&truePrecedence<=precedence)&&(trueExpr="("+trueExpr+")");var falseExpr=this.falseExpr.toString(options),falsePrecedence=(0,_operators.getPrecedence)(this.falseExpr,parenthesis);return("all"===parenthesis||"OperatorNode"===this.falseExpr.type||null!==falsePrecedence&&falsePrecedence<=precedence)&&(falseExpr="("+falseExpr+")"),condition+" ? "+trueExpr+" : "+falseExpr},ConditionalNode.prototype.toJSON=function(){return{mathjs:"ConditionalNode",condition:this.condition,trueExpr:this.trueExpr,falseExpr:this.falseExpr}},ConditionalNode.fromJSON=function(json){return new ConditionalNode(json.condition,json.trueExpr,json.falseExpr)},ConditionalNode.prototype.toHTML=function(options){var parenthesis=options&&options.parenthesis?options.parenthesis:"keep",precedence=(0,_operators.getPrecedence)(this,parenthesis),condition=this.condition.toHTML(options),conditionPrecedence=(0,_operators.getPrecedence)(this.condition,parenthesis);("all"===parenthesis||"OperatorNode"===this.condition.type||null!==conditionPrecedence&&conditionPrecedence<=precedence)&&(condition='('+condition+')');var trueExpr=this.trueExpr.toHTML(options),truePrecedence=(0,_operators.getPrecedence)(this.trueExpr,parenthesis);("all"===parenthesis||"OperatorNode"===this.trueExpr.type||null!==truePrecedence&&truePrecedence<=precedence)&&(trueExpr='('+trueExpr+')');var falseExpr=this.falseExpr.toHTML(options),falsePrecedence=(0,_operators.getPrecedence)(this.falseExpr,parenthesis);return("all"===parenthesis||"OperatorNode"===this.falseExpr.type||null!==falsePrecedence&&falsePrecedence<=precedence)&&(falseExpr='('+falseExpr+')'),condition+'?'+trueExpr+':'+falseExpr},ConditionalNode.prototype._toTex=function(options){return"\\begin{cases} {"+this.trueExpr.toTex(options)+"}, &\\quad{\\text{if }\\;"+this.condition.toTex(options)+"}\\\\{"+this.falseExpr.toTex(options)+"}, &\\quad{\\text{otherwise}}\\end{cases}"},ConditionalNode},{isClass:!0,isNode:!0});exports.createConditionalNode=createConditionalNode},{"../../utils/factory":931,"../../utils/is":933,"../operators":638}],625:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createConstantNode=void 0;var _string=require("../../utils/string"),_is=require("../../utils/is"),_latex=require("../../utils/latex"),dependencies=["Node"],createConstantNode=(0,require("../../utils/factory").factory)("ConstantNode",dependencies,function(_ref){var Node=_ref.Node;function ConstantNode(value){if(!(this instanceof ConstantNode))throw new SyntaxError("Constructor must be called with the new operator");if(2===arguments.length)throw new SyntaxError("new ConstantNode(valueStr, valueType) is not supported anymore since math v4.0.0. Use new ConstantNode(value) instead, where value is a non-stringified value.");this.value=value}return(ConstantNode.prototype=new Node).type="ConstantNode",ConstantNode.prototype.isConstantNode=!0,ConstantNode.prototype._compile=function(math,argNames){var value=this.value;return function(){return value}},ConstantNode.prototype.forEach=function(callback){},ConstantNode.prototype.map=function(callback){return this.clone()},ConstantNode.prototype.clone=function(){return new ConstantNode(this.value)},ConstantNode.prototype._toString=function(options){return(0,_string.format)(this.value,options)},ConstantNode.prototype.toHTML=function(options){var value=this._toString(options);switch((0,_is.typeOf)(this.value)){case"number":case"BigNumber":case"Fraction":return''+value+"";case"string":return''+value+"";case"boolean":return''+value+"";case"null":return''+value+"";case"undefined":return''+value+"";default:return''+value+""}},ConstantNode.prototype.toJSON=function(){return{mathjs:"ConstantNode",value:this.value}},ConstantNode.fromJSON=function(json){return new ConstantNode(json.value)},ConstantNode.prototype._toTex=function(options){var value=this._toString(options);switch((0,_is.typeOf)(this.value)){case"string":return"\\mathtt{"+(0,_latex.escapeLatex)(value)+"}";case"number":case"BigNumber":if(!isFinite(this.value))return this.value.valueOf()<0?"-\\infty":"\\infty";var index=value.toLowerCase().indexOf("e");return-1!==index?value.substring(0,index)+"\\cdot10^{"+value.substring(index+1)+"}":value;case"Fraction":return this.value.toLatex();default:return value}},ConstantNode},{isClass:!0,isNode:!0});exports.createConstantNode=createConstantNode},{"../../utils/factory":931,"../../utils/is":933,"../../utils/latex":934,"../../utils/string":941}],626:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createFunctionAssignmentNode=void 0;var _is=require("../../utils/is"),_keywords=require("../keywords"),_string=require("../../utils/string"),_array=require("../../utils/array"),_latex=require("../../utils/latex"),_operators=require("../operators"),_customs=require("../../utils/customs"),dependencies=["typed","Node"],createFunctionAssignmentNode=(0,require("../../utils/factory").factory)("FunctionAssignmentNode",dependencies,function(_ref){var typed=_ref.typed,Node=_ref.Node;function FunctionAssignmentNode(name,params,expr){if(!(this instanceof FunctionAssignmentNode))throw new SyntaxError("Constructor must be called with the new operator");if("string"!=typeof name)throw new TypeError('String expected for parameter "name"');if(!Array.isArray(params))throw new TypeError('Array containing strings or objects expected for parameter "params"');if(!(0,_is.isNode)(expr))throw new TypeError('Node expected for parameter "expr"');if(name in _keywords.keywords)throw new Error('Illegal function name, "'+name+'" is a reserved keyword');this.name=name,this.params=params.map(function(param){return param&¶m.name||param}),this.types=params.map(function(param){return param&¶m.type||"any"}),this.expr=expr}function needParenthesis(node,parenthesis){var precedence=(0,_operators.getPrecedence)(node,parenthesis),exprPrecedence=(0,_operators.getPrecedence)(node.expr,parenthesis);return"all"===parenthesis||null!==exprPrecedence&&exprPrecedence<=precedence}return(FunctionAssignmentNode.prototype=new Node).type="FunctionAssignmentNode",FunctionAssignmentNode.prototype.isFunctionAssignmentNode=!0,FunctionAssignmentNode.prototype._compile=function(math,argNames){var childArgNames=Object.create(argNames);(0,_array.forEach)(this.params,function(param){childArgNames[param]=!0});var evalExpr=this.expr._compile(math,childArgNames),name=this.name,params=this.params,signature=(0,_array.join)(this.types,","),syntax=name+"("+(0,_array.join)(this.params,", ")+")";return function(scope,args,context){var signatures={};signatures[signature]=function(){for(var childArgs=Object.create(args),i=0;i'+(0,_string.escape)(this.params[i])+"");var expr=this.expr.toHTML(options);return needParenthesis(this,parenthesis)&&(expr='('+expr+')'),''+(0,_string.escape)(this.name)+'('+params.join(',')+')='+expr},FunctionAssignmentNode.prototype._toTex=function(options){var parenthesis=options&&options.parenthesis?options.parenthesis:"keep",expr=this.expr.toTex(options);return needParenthesis(this,parenthesis)&&(expr="\\left(".concat(expr,"\\right)")),"\\mathrm{"+this.name+"}\\left("+this.params.map(_latex.toSymbol).join(",")+"\\right):="+expr},FunctionAssignmentNode},{isClass:!0,isNode:!0});exports.createFunctionAssignmentNode=createFunctionAssignmentNode},{"../../utils/array":922,"../../utils/customs":929,"../../utils/factory":931,"../../utils/is":933,"../../utils/latex":934,"../../utils/string":941,"../keywords":619,"../operators":638}],627:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createFunctionNode=void 0;var _is=require("../../utils/is"),_string=require("../../utils/string"),_object=require("../../utils/object"),_array=require("../../utils/array"),_customs=require("../../utils/customs"),_factory=require("../../utils/factory"),_latex=require("../../utils/latex");function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function _extends(){return(_extends=Object.assign||function(target){for(var i=1;i'+(0,_string.escape)(this.fn)+'('+args.join(',')+')'};var nodeToTex=FunctionNode.prototype.toTex;return FunctionNode.prototype.toTex=function(options){var customTex;return options&&"object"===_typeof(options.handler)&&(0,_object.hasOwnProperty)(options.handler,this.name)&&(customTex=options.handler[this.name](this,options)),void 0!==customTex?customTex:nodeToTex.call(this,options)},FunctionNode.prototype._toTex=function(options){var latexConverter,customToTex,args=this.args.map(function(arg){return arg.toTex(options)});switch(_latex.latexFunctions[this.name]&&(latexConverter=_latex.latexFunctions[this.name]),!math[this.name]||"function"!=typeof math[this.name].toTex&&"object"!==_typeof(math[this.name].toTex)&&"string"!=typeof math[this.name].toTex||(latexConverter=math[this.name].toTex),_typeof(latexConverter)){case"function":customToTex=latexConverter(this,options);break;case"string":customToTex=expandTemplate(latexConverter,this,options);break;case"object":switch(_typeof(latexConverter[args.length])){case"function":customToTex=latexConverter[args.length](this,options);break;case"string":customToTex=expandTemplate(latexConverter[args.length],this,options)}}return void 0!==customToTex?customToTex:expandTemplate(_latex.defaultTemplate,this,options)},FunctionNode.prototype.getIdentifier=function(){return this.type+":"+this.name},FunctionNode},{isClass:!0,isNode:!0});exports.createFunctionNode=createFunctionNode},{"../../utils/array":922,"../../utils/customs":929,"../../utils/factory":931,"../../utils/is":933,"../../utils/latex":934,"../../utils/object":938,"../../utils/string":941}],628:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createIndexNode=void 0;var _is=require("../../utils/is"),_array=require("../../utils/array"),_string=require("../../utils/string"),_factory=require("../../utils/factory"),_customs=require("../../utils/customs");function _toConsumableArray(arr){return function(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function(iter){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(iter))return Array.from(iter)}(arr)||function(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i.'+(0,_string.escape)(this.getObjectProperty())+"":'['+dimensions.join(',')+']'},IndexNode.prototype._toTex=function(options){var dimensions=this.dimensions.map(function(range){return range.toTex(options)});return this.dotNotation?"."+this.getObjectProperty():"_{"+dimensions.join(",")+"}"},IndexNode},{isClass:!0,isNode:!0});exports.createIndexNode=createIndexNode},{"../../utils/array":922,"../../utils/customs":929,"../../utils/factory":931,"../../utils/is":933,"../../utils/string":941}],629:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createNode=void 0;var _is=require("../../utils/is"),_keywords=require("../keywords"),_object=require("../../utils/object"),_factory=require("../../utils/factory"),_log=require("../../utils/log");function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}var dependencies=["mathWithTransform"],createNode=(0,_factory.factory)("Node",dependencies,function(_ref){var mathWithTransform=_ref.mathWithTransform;function Node(){if(!(this instanceof Node))throw new SyntaxError("Constructor must be called with the new operator")}return Node.prototype.evaluate=function(scope){return this.compile().evaluate(scope)},Node.prototype.eval=function(scope){return(0,_log.warnOnce)("Method Node.eval is renamed to Node.evaluate. Please use the new method name."),this.evaluate(scope)},Node.prototype.type="Node",Node.prototype.isNode=!0,Node.prototype.comment="",Node.prototype.compile=function(){var expr=this._compile(mathWithTransform,{}),args={},context=null;function evaluate(scope){var s=scope||{};return function(scope){for(var symbol in scope)if((0,_object.hasOwnProperty)(scope,symbol)&&symbol in _keywords.keywords)throw new Error('Scope contains an illegal symbol, "'+symbol+'" is a reserved keyword')}(s),expr(s,args,context)}return{evaluate:evaluate,eval:function(scope){return(0,_log.warnOnce)("Method eval is renamed to evaluate. Please use the new method."),evaluate(scope)}}},Node.prototype._compile=function(math,argNames){throw new Error("Method _compile should be implemented by type "+this.type)},Node.prototype.forEach=function(callback){throw new Error("Cannot run forEach on a Node interface")},Node.prototype.map=function(callback){throw new Error("Cannot run map on a Node interface")},Node.prototype._ifNode=function(node){if(!(0,_is.isNode)(node))throw new TypeError("Callback function must return a Node");return node},Node.prototype.traverse=function(callback){callback(this,null,null),function _traverse(node,callback){node.forEach(function(child,path,parent){callback(child,path,parent),_traverse(child,callback)})}(this,callback)},Node.prototype.transform=function(callback){return function _transform(child,path,parent){var replacement=callback(child,path,parent);return replacement!==child?replacement:child.map(_transform)}(this,null,null)},Node.prototype.filter=function(callback){var nodes=[];return this.traverse(function(node,path,parent){callback(node,path,parent)&&nodes.push(node)}),nodes},Node.prototype.find=function(){throw new Error("Function Node.find is deprecated. Use Node.filter instead.")},Node.prototype.match=function(){throw new Error("Function Node.match is deprecated. See functions Node.filter, Node.transform, Node.traverse.")},Node.prototype.clone=function(){throw new Error("Cannot clone a Node interface")},Node.prototype.cloneDeep=function(){return this.map(function(node){return node.cloneDeep()})},Node.prototype.equals=function(other){return!!other&&(0,_object.deepStrictEqual)(this,other)},Node.prototype.toString=function(options){var customString;if(options&&"object"===_typeof(options))switch(_typeof(options.handler)){case"object":case"undefined":break;case"function":customString=options.handler(this,options);break;default:throw new TypeError("Object or function expected as callback")}return void 0!==customString?customString:this._toString(options)},Node.prototype.toJSON=function(){throw new Error("Cannot serialize object: toJSON not implemented by "+this.type)},Node.prototype.toHTML=function(options){var customString;if(options&&"object"===_typeof(options))switch(_typeof(options.handler)){case"object":case"undefined":break;case"function":customString=options.handler(this,options);break;default:throw new TypeError("Object or function expected as callback")}return void 0!==customString?customString:this.toHTML(options)},Node.prototype._toString=function(){throw new Error("_toString not implemented for "+this.type)},Node.prototype.toTex=function(options){var customTex;if(options&&"object"===_typeof(options))switch(_typeof(options.handler)){case"object":case"undefined":break;case"function":customTex=options.handler(this,options);break;default:throw new TypeError("Object or function expected as callback")}return void 0!==customTex?customTex:this._toTex(options)},Node.prototype._toTex=function(options){throw new Error("_toTex not implemented for "+this.type)},Node.prototype.getIdentifier=function(){return this.type},Node.prototype.getContent=function(){return this},Node},{isClass:!0,isNode:!0});exports.createNode=createNode},{"../../utils/factory":931,"../../utils/is":933,"../../utils/log":935,"../../utils/object":938,"../keywords":619}],630:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createObjectNode=void 0;var _is=require("../../utils/is"),_string=require("../../utils/string"),_customs=require("../../utils/customs"),_object=require("../../utils/object");function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}var dependencies=["Node"],createObjectNode=(0,require("../../utils/factory").factory)("ObjectNode",dependencies,function(_ref){var Node=_ref.Node;function ObjectNode(properties){if(!(this instanceof ObjectNode))throw new SyntaxError("Constructor must be called with the new operator");if(this.properties=properties||{},properties&&("object"!==_typeof(properties)||!Object.keys(properties).every(function(key){return(0,_is.isNode)(properties[key])})))throw new TypeError("Object containing Nodes expected")}return(ObjectNode.prototype=new Node).type="ObjectNode",ObjectNode.prototype.isObjectNode=!0,ObjectNode.prototype._compile=function(math,argNames){var evalEntries={};for(var key in this.properties)if((0,_object.hasOwnProperty)(this.properties,key)){var stringifiedKey=(0,_string.stringify)(key),parsedKey=JSON.parse(stringifiedKey);if(!(0,_customs.isSafeProperty)(this.properties,parsedKey))throw new Error('No access to property "'+parsedKey+'"');evalEntries[parsedKey]=this.properties[key]._compile(math,argNames)}return function(scope,args,context){var obj={};for(var _key in evalEntries)(0,_object.hasOwnProperty)(evalEntries,_key)&&(obj[_key]=evalEntries[_key](scope,args,context));return obj}},ObjectNode.prototype.forEach=function(callback){for(var key in this.properties)(0,_object.hasOwnProperty)(this.properties,key)&&callback(this.properties[key],"properties["+(0,_string.stringify)(key)+"]",this)},ObjectNode.prototype.map=function(callback){var properties={};for(var key in this.properties)(0,_object.hasOwnProperty)(this.properties,key)&&(properties[key]=this._ifNode(callback(this.properties[key],"properties["+(0,_string.stringify)(key)+"]",this)));return new ObjectNode(properties)},ObjectNode.prototype.clone=function(){var properties={};for(var key in this.properties)(0,_object.hasOwnProperty)(this.properties,key)&&(properties[key]=this.properties[key]);return new ObjectNode(properties)},ObjectNode.prototype._toString=function(options){var entries=[];for(var key in this.properties)(0,_object.hasOwnProperty)(this.properties,key)&&entries.push((0,_string.stringify)(key)+": "+this.properties[key].toString(options));return"{"+entries.join(", ")+"}"},ObjectNode.prototype.toJSON=function(){return{mathjs:"ObjectNode",properties:this.properties}},ObjectNode.fromJSON=function(json){return new ObjectNode(json.properties)},ObjectNode.prototype.toHTML=function(options){var entries=[];for(var key in this.properties)(0,_object.hasOwnProperty)(this.properties,key)&&entries.push(''+(0,_string.escape)(key)+':'+this.properties[key].toHTML(options));return'{'+entries.join(',')+'}'},ObjectNode.prototype._toTex=function(options){var entries=[];for(var key in this.properties)(0,_object.hasOwnProperty)(this.properties,key)&&entries.push("\\mathbf{"+key+":} & "+this.properties[key].toTex(options)+"\\\\");return"\\left\\{\\begin{array}{ll}".concat(entries.join("\n"),"\\end{array}\\right\\}")},ObjectNode},{isClass:!0,isNode:!0});exports.createObjectNode=createObjectNode},{"../../utils/customs":929,"../../utils/factory":931,"../../utils/is":933,"../../utils/object":938,"../../utils/string":941}],631:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createOperatorNode=void 0;var _is=require("../../utils/is"),_array=require("../../utils/array"),_string=require("../../utils/string"),_customs=require("../../utils/customs"),_operators=require("../operators"),_latex=require("../../utils/latex"),dependencies=["Node"],createOperatorNode=(0,require("../../utils/factory").factory)("OperatorNode",dependencies,function(_ref){var Node=_ref.Node;function OperatorNode(op,fn,args,implicit){if(!(this instanceof OperatorNode))throw new SyntaxError("Constructor must be called with the new operator");if("string"!=typeof op)throw new TypeError('string expected for parameter "op"');if("string"!=typeof fn)throw new TypeError('string expected for parameter "fn"');if(!Array.isArray(args)||!args.every(_is.isNode))throw new TypeError('Array containing Nodes expected for parameter "args"');this.implicit=!0===implicit,this.op=op,this.fn=fn,this.args=args||[]}function calculateNecessaryParentheses(root,parenthesis,implicit,args,latex){var result,precedence=(0,_operators.getPrecedence)(root,parenthesis),associativity=(0,_operators.getAssociativity)(root,parenthesis);if("all"===parenthesis||2)'),"right"===assoc?''+(0,_string.escape)(this.op)+""+operand:operand+''+(0,_string.escape)(this.op)+""}if(2===args.length){var lhs=args[0].toHTML(options),rhs=args[1].toHTML(options);return parens[0]&&(lhs='('+lhs+')'),parens[1]&&(rhs='('+rhs+')'),this.implicit&&"OperatorNode:multiply"===this.getIdentifier()&&"hide"===implicit?lhs+''+rhs:lhs+''+(0,_string.escape)(this.op)+""+rhs}var stringifiedArgs=args.map(function(arg,index){return arg=arg.toHTML(options),parens[index]&&(arg='('+arg+')'),arg});return 2'):stringifiedArgs.join(''+(0,_string.escape)(this.op)+""):''+(0,_string.escape)(this.fn)+'('+stringifiedArgs.join(',')+')'},OperatorNode.prototype._toTex=function(options){var parenthesis=options&&options.parenthesis?options.parenthesis:"keep",implicit=options&&options.implicit?options.implicit:"hide",args=this.args,parens=calculateNecessaryParentheses(this,parenthesis,implicit,args,!0),op=void 0===(op=_latex.latexOperators[this.fn])?this.op:op;if(1===args.length){var assoc=(0,_operators.getAssociativity)(this,parenthesis),operand=args[0].toTex(options);return parens[0]&&(operand="\\left(".concat(operand,"\\right)")),"right"===assoc?op+operand:operand+op}if(2===args.length){var lhs=args[0],lhsTex=lhs.toTex(options);parens[0]&&(lhsTex="\\left(".concat(lhsTex,"\\right)"));var lhsIdentifier,rhsTex=args[1].toTex(options);switch(parens[1]&&(rhsTex="\\left(".concat(rhsTex,"\\right)")),lhsIdentifier="keep"===parenthesis?lhs.getIdentifier():lhs.getContent().getIdentifier(),this.getIdentifier()){case"OperatorNode:divide":return op+"{"+lhsTex+"}{"+rhsTex+"}";case"OperatorNode:pow":switch(lhsTex="{"+lhsTex+"}",rhsTex="{"+rhsTex+"}",lhsIdentifier){case"ConditionalNode":case"OperatorNode:divide":lhsTex="\\left(".concat(lhsTex,"\\right)")}break;case"OperatorNode:multiply":if(this.implicit&&"hide"===implicit)return lhsTex+"~"+rhsTex}return lhsTex+op+rhsTex}if(2('+this.content.toHTML(options)+')':this.content.toHTML(options)},ParenthesisNode.prototype._toTex=function(options){return!options||options&&!options.parenthesis||options&&"keep"===options.parenthesis?"\\left(".concat(this.content.toTex(options),"\\right)"):this.content.toTex(options)},ParenthesisNode},{isClass:!0,isNode:!0});exports.createParenthesisNode=createParenthesisNode},{"../../utils/factory":931,"../../utils/is":933}],633:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createRangeNode=void 0;var _is=require("../../utils/is"),_factory=require("../../utils/factory"),_operators=require("../operators"),dependencies=["Node"],createRangeNode=(0,_factory.factory)("RangeNode",dependencies,function(_ref){var Node=_ref.Node;function RangeNode(start,end,step){if(!(this instanceof RangeNode))throw new SyntaxError("Constructor must be called with the new operator");if(!(0,_is.isNode)(start))throw new TypeError("Node expected");if(!(0,_is.isNode)(end))throw new TypeError("Node expected");if(step&&!(0,_is.isNode)(step))throw new TypeError("Node expected");if(3('+start+')'),str=start,this.step&&(step=this.step.toHTML(options),parens.step&&(step='('+step+')'),str+=':'+step);var end=this.end.toHTML(options);return parens.end&&(end='('+end+')'),str+=':'+end},RangeNode.prototype._toTex=function(options){var step,parens=calculateNecessaryParentheses(this,options&&options.parenthesis?options.parenthesis:"keep"),str=this.start.toTex(options);parens.start&&(str="\\left(".concat(str,"\\right)")),this.step&&(step=this.step.toTex(options),parens.step&&(step="\\left(".concat(step,"\\right)")),str+=":"+step);var end=this.end.toTex(options);return parens.end&&(end="\\left(".concat(end,"\\right)")),str+=":"+end},RangeNode},{isClass:!0,isNode:!0});exports.createRangeNode=createRangeNode},{"../../utils/factory":931,"../../utils/is":933,"../operators":638}],634:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createRelationalNode=void 0;var _operators=require("../operators"),_string=require("../../utils/string"),_customs=require("../../utils/customs"),_latex=require("../../utils/latex"),dependencies=["Node"],createRelationalNode=(0,require("../../utils/factory").factory)("RelationalNode",dependencies,function(_ref){var Node=_ref.Node;function RelationalNode(conditionals,params){if(!(this instanceof RelationalNode))throw new SyntaxError("Constructor must be called with the new operator");if(!Array.isArray(conditionals))throw new TypeError("Parameter conditionals must be an array");if(!Array.isArray(params))throw new TypeError("Parameter params must be an array");if(conditionals.length!==params.length-1)throw new TypeError("Parameter params must contain exactly one more element than parameter conditionals");this.conditionals=conditionals,this.params=params}return(RelationalNode.prototype=new Node).type="RelationalNode",RelationalNode.prototype.isRelationalNode=!0,RelationalNode.prototype._compile=function(math,argNames){var self=this,compiled=this.params.map(function(p){return p._compile(math,argNames)});return function(scope,args,context){for(var evalRhs=compiled[0](scope,args,context),i=0;i",smallerEq:"<=",largerEq:">="},ret=paramStrings[0],i=0;i('+p.toHTML(options)+')':p.toHTML(options)}),operatorMap={equal:"==",unequal:"!=",smaller:"<",larger:">",smallerEq:"<=",largerEq:">="},ret=paramStrings[0],i=0;i'+(0,_string.escape)(operatorMap[this.conditionals[i]])+""+paramStrings[i+1];return ret},RelationalNode.prototype._toTex=function(options){for(var parenthesis=options&&options.parenthesis?options.parenthesis:"keep",precedence=(0,_operators.getPrecedence)(this,parenthesis),paramStrings=this.params.map(function(p,index){var paramPrecedence=(0,_operators.getPrecedence)(p,parenthesis);return"all"===parenthesis||null!==paramPrecedence&¶mPrecedence<=precedence?"\\left("+p.toTex(options)+"\right)":p.toTex(options)}),ret=paramStrings[0],i=0;i'+name+"":"i"===name?''+name+"":"Infinity"===name?''+name+"":"NaN"===name?''+name+"":"null"===name?''+name+"":"undefined"===name?''+name+"":''+name+""},SymbolNode.prototype.toJSON=function(){return{mathjs:"SymbolNode",name:this.name}},SymbolNode.fromJSON=function(json){return new SymbolNode(json.name)},SymbolNode.prototype._toTex=function(options){var isUnit=!1;void 0===math[this.name]&&isValuelessUnit(this.name)&&(isUnit=!0);var symbol=(0,_latex.toSymbol)(this.name,isUnit);return"\\"===symbol[0]?symbol:" "+symbol},SymbolNode},{isClass:!0,isNode:!0});exports.createSymbolNode=createSymbolNode},{"../../utils/customs":929,"../../utils/factory":931,"../../utils/latex":934,"../../utils/string":941}],636:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.accessFactory=function(_ref){var subset=_ref.subset;return function(object,index){try{if(Array.isArray(object))return subset(object,index);if(object&&"function"==typeof object.subset)return object.subset(index);if("string"==typeof object)return subset(object,index);if("object"!==_typeof(object))throw new TypeError("Cannot apply index: unsupported type of object");if(!index.isObjectProperty())throw new TypeError("Cannot apply a numeric index as object property");return(0,_customs.getSafeProperty)(object,index.getObjectProperty())}catch(err){throw(0,_errorTransform.errorTransform)(err)}}};var _errorTransform=require("../../transform/utils/errorTransform"),_customs=require("../../../utils/customs");function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}},{"../../../utils/customs":929,"../../transform/utils/errorTransform":656}],637:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.assignFactory=function(_ref){var subset=_ref.subset,matrix=_ref.matrix;return function(object,index,value){try{if(Array.isArray(object))return matrix(object).subset(index,value).valueOf();if(object&&"function"==typeof object.subset)return object.subset(index,value);if("string"==typeof object)return subset(object,index,value);if("object"!==_typeof(object))throw new TypeError("Cannot apply index: unsupported type of object");if(!index.isObjectProperty())throw TypeError("Cannot apply a numeric index as object property");return(0,_customs.setSafeProperty)(object,index.getObjectProperty(),value),object}catch(err){throw(0,_errorTransform.errorTransform)(err)}}};var _errorTransform=require("../../transform/utils/errorTransform"),_customs=require("../../../utils/customs");function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}},{"../../../utils/customs":929,"../../transform/utils/errorTransform":656}],638:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getPrecedence=getPrecedence,exports.getAssociativity=function(_node,parenthesis){var node=_node;"keep"!==parenthesis&&(node=_node.getContent());var identifier=node.getIdentifier(),index=getPrecedence(node,parenthesis);if(null===index)return null;var property=properties[index][identifier];if((0,_object.hasOwnProperty)(property,"associativity")){if("left"===property.associativity)return"left";if("right"===property.associativity)return"right";throw Error("'"+identifier+"' has the invalid associativity '"+property.associativity+"'.")}return null},exports.isAssociativeWith=function(nodeA,nodeB,parenthesis){var a="keep"!==parenthesis?nodeA.getContent():nodeA,b="keep"!==parenthesis?nodeA.getContent():nodeB,identifierA=a.getIdentifier(),identifierB=b.getIdentifier(),index=getPrecedence(a,parenthesis);if(null===index)return null;var property=properties[index][identifierA];if((0,_object.hasOwnProperty)(property,"associativeWith")&&property.associativeWith instanceof Array){for(var i=0;i":!0,"<=":!0,">=":!0,"<<":!0,">>":!0,">>>":!0},NAMED_DELIMITERS={mod:!0,to:!0,in:!0,and:!0,xor:!0,or:!0,not:!0},CONSTANTS={true:!0,false:!1,null:null,undefined:void 0},NUMERIC_CONSTANTS=["NaN","Infinity"];function currentString(state,length){return state.expression.substr(state.index,length)}function currentCharacter(state){return currentString(state,1)}function next(state){state.index++}function prevCharacter(state){return state.expression.charAt(state.index-1)}function nextCharacter(state){return state.expression.charAt(state.index+1)}function getToken(state){for(state.tokenType=TOKENTYPE.NULL,state.token="",state.comment="";parse.isWhitespace(currentCharacter(state),state.nestingLevel);)next(state);if("#"===currentCharacter(state))for(;"\n"!==currentCharacter(state)&&""!==currentCharacter(state);)state.comment+=currentCharacter(state),next(state);if(""!==currentCharacter(state)){if("\n"===currentCharacter(state)&&!state.nestingLevel)return state.tokenType=TOKENTYPE.DELIMITER,state.token=currentCharacter(state),void next(state);var c1=currentCharacter(state),c2=currentString(state,2),c3=currentString(state,3);if(3===c3.length&&DELIMITERS[c3])return state.tokenType=TOKENTYPE.DELIMITER,state.token=c3,next(state),next(state),void next(state);if(2===c2.length&&DELIMITERS[c2])return state.tokenType=TOKENTYPE.DELIMITER,state.token=c2,next(state),void next(state);if(DELIMITERS[c1])return state.tokenType=TOKENTYPE.DELIMITER,state.token=c1,void next(state);if(parse.isDigitDot(c1)){if(state.tokenType=TOKENTYPE.NUMBER,"."===currentCharacter(state))state.token+=currentCharacter(state),next(state),parse.isDigit(currentCharacter(state))||(state.tokenType=TOKENTYPE.DELIMITER);else{for(;parse.isDigit(currentCharacter(state));)state.token+=currentCharacter(state),next(state);parse.isDecimalMark(currentCharacter(state),nextCharacter(state))&&(state.token+=currentCharacter(state),next(state))}for(;parse.isDigit(currentCharacter(state));)state.token+=currentCharacter(state),next(state);if("E"===currentCharacter(state)||"e"===currentCharacter(state))if(parse.isDigit(nextCharacter(state))||"-"===nextCharacter(state)||"+"===nextCharacter(state)){if(state.token+=currentCharacter(state),next(state),"+"!==currentCharacter(state)&&"-"!==currentCharacter(state)||(state.token+=currentCharacter(state),next(state)),!parse.isDigit(currentCharacter(state)))throw createSyntaxError(state,'Digit expected, got "'+currentCharacter(state)+'"');for(;parse.isDigit(currentCharacter(state));)state.token+=currentCharacter(state),next(state);if(parse.isDecimalMark(currentCharacter(state),nextCharacter(state)))throw createSyntaxError(state,'Digit expected, got "'+currentCharacter(state)+'"')}else if("."===nextCharacter(state))throw next(state),createSyntaxError(state,'Digit expected, got "'+currentCharacter(state)+'"')}else{if(!parse.isAlpha(currentCharacter(state),prevCharacter(state),nextCharacter(state))){for(state.tokenType=TOKENTYPE.UNKNOWN;""!==currentCharacter(state);)state.token+=currentCharacter(state),next(state);throw createSyntaxError(state,'Syntax error in part "'+state.token+'"')}for(;parse.isAlpha(currentCharacter(state),prevCharacter(state),nextCharacter(state))||parse.isDigit(currentCharacter(state));)state.token+=currentCharacter(state),next(state);(0,_object.hasOwnProperty)(NAMED_DELIMITERS,state.token)?state.tokenType=TOKENTYPE.DELIMITER:state.tokenType=TOKENTYPE.SYMBOL}}else state.tokenType=TOKENTYPE.DELIMITER}function getTokenSkipNewline(state){for(;getToken(state),"\n"===state.token;);}function openParams(state){state.nestingLevel++}function closeParams(state){state.nestingLevel--}function parseStart(expression,extraNodes){var state={extraNodes:{},expression:"",comment:"",index:0,token:"",tokenType:TOKENTYPE.NULL,nestingLevel:0,conditionalLevel:null};_extends(state,{expression:expression,extraNodes:extraNodes}),getToken(state);var node=function(state){var node,visible,blocks=[];""!==state.token&&"\n"!==state.token&&";"!==state.token&&((node=parseAssignment(state)).comment=state.comment);for(;"\n"===state.token||";"===state.token;)0===blocks.length&&node&&(visible=";"!==state.token,blocks.push({node:node,visible:visible})),getToken(state),"\n"!==state.token&&";"!==state.token&&""!==state.token&&((node=parseAssignment(state)).comment=state.comment,visible=";"!==state.token,blocks.push({node:node,visible:visible}));return 0":"larger","<=":"smallerEq",">=":"largerEq"};(0,_object.hasOwnProperty)(operators,state.token);){var cond={name:state.token,fn:operators[state.token]};conditionals.push(cond),getTokenSkipNewline(state),params.push(parseShift(state))}return 1===params.length?params[0]:2===params.length?new OperatorNode(conditionals[0].name,conditionals[0].fn,params):new RelationalNode(conditionals.map(function(c){return c.fn}),params)}function parseShift(state){for(var name,fn,params,node=parseConversion(state),operators={"<<":"leftShift",">>":"rightArithShift",">>>":"rightLogShift"};(0,_object.hasOwnProperty)(operators,state.token);)fn=operators[name=state.token],getTokenSkipNewline(state),params=[node,parseConversion(state)],node=new OperatorNode(name,fn,params);return node}function parseConversion(state){for(var name,fn,params,node=parseRange(state),operators={to:"to",in:"to"};(0,_object.hasOwnProperty)(operators,state.token);)fn=operators[name=state.token],getTokenSkipNewline(state),node="in"===name&&""===state.token?new OperatorNode("*","multiply",[node,new SymbolNode("in")],!0):(params=[node,parseRange(state)],new OperatorNode(name,fn,params));return node}function parseRange(state){var params=[],node=":"===state.token?new ConstantNode(1):parseAddSubtract(state);if(":"===state.token&&state.conditionalLevel!==state.nestingLevel){for(params.push(node);":"===state.token&¶ms.length<3;)getTokenSkipNewline(state),")"===state.token||"]"===state.token||","===state.token||""===state.token?params.push(new SymbolNode("end")):params.push(parseAddSubtract(state));node=3===params.length?new RangeNode(params[0],params[2],params[1]):new RangeNode(params[0],params[1])}return node}function parseAddSubtract(state){for(var name,fn,params,node=parseMultiplyDivide(state),operators={"+":"add","-":"subtract"};(0,_object.hasOwnProperty)(operators,state.token);)fn=operators[name=state.token],getTokenSkipNewline(state),params=[node,parseMultiplyDivide(state)],node=new OperatorNode(name,fn,params);return node}function parseMultiplyDivide(state){for(var name,fn,last,node=parseImplicitMultiplication(state),operators={"*":"multiply",".*":"dotMultiply","/":"divide","./":"dotDivide","%":"mod",mod:"mod"};(0,_object.hasOwnProperty)(operators,state.token);)fn=operators[name=state.token],getTokenSkipNewline(state),last=parseImplicitMultiplication(state),node=new OperatorNode(name,fn,[node,last]);return node}function parseImplicitMultiplication(state){for(var node=parseRule2(state),last=node;state.tokenType===TOKENTYPE.SYMBOL||"in"===state.token&&(0,_is.isConstantNode)(node)||!(state.tokenType!==TOKENTYPE.NUMBER||(0,_is.isConstantNode)(last)||(0,_is.isOperatorNode)(last)&&"!"!==last.op)||"("===state.token;)last=parseRule2(state),node=new OperatorNode("*","multiply",[node,last],!0);return node}function parseRule2(state){for(var node=parseUnary(state),last=node,tokenStates=[];"/"===state.token&&(0,_is.isConstantNode)(last);){if(tokenStates.push(_extends({},state)),getTokenSkipNewline(state),state.tokenType!==TOKENTYPE.NUMBER){_extends(state,tokenStates.pop());break}if(tokenStates.push(_extends({},state)),getTokenSkipNewline(state),state.tokenType!==TOKENTYPE.SYMBOL&&"("!==state.token){tokenStates.pop(),_extends(state,tokenStates.pop());break}_extends(state,tokenStates.pop()),tokenStates.pop(),last=parseUnary(state),node=new OperatorNode("/","divide",[node,last])}return node}function parseUnary(state){var name,params,fn,operators={"-":"unaryMinus","+":"unaryPlus","~":"bitNot",not:"not"};return(0,_object.hasOwnProperty)(operators,state.token)?(fn=operators[state.token],name=state.token,getTokenSkipNewline(state),params=[parseUnary(state)],new OperatorNode(name,fn,params)):function(state){var node,name,fn,params;node=function(state){var node,name,fn;node=function(state){var params=[];if(state.tokenType===TOKENTYPE.SYMBOL&&(0,_object.hasOwnProperty)(state.extraNodes,state.token)){var CustomNode=state.extraNodes[state.token];if(getToken(state),"("===state.token){if(params=[],openParams(state),getToken(state),")"!==state.token)for(params.push(parseAssignment(state));","===state.token;)getToken(state),params.push(parseAssignment(state));if(")"!==state.token)throw createSyntaxError(state,"Parenthesis ) expected");closeParams(state),getToken(state)}return new CustomNode(params)}return function(state){var node,name;if(state.tokenType===TOKENTYPE.SYMBOL||state.tokenType===TOKENTYPE.DELIMITER&&state.token in NAMED_DELIMITERS)return name=state.token,getToken(state),node=(0,_object.hasOwnProperty)(CONSTANTS,name)?new ConstantNode(CONSTANTS[name]):-1!==NUMERIC_CONSTANTS.indexOf(name)?new ConstantNode(numeric(name,"number")):new SymbolNode(name),node=parseAccessors(state,node);return function(state){var node,str;return'"'!==state.token?function(state){var node,str;return"'"!==state.token?function(state){var array,params,rows,cols;if("["!==state.token)return function(state){if("{"!==state.token)return function(state){var numberStr;return state.tokenType!==TOKENTYPE.NUMBER?function(state){var node;if("("!==state.token)return function(state){throw""===state.token?createSyntaxError(state,"Unexpected end of expression"):createSyntaxError(state,"Value expected")}(state);if(openParams(state),getToken(state),node=parseAssignment(state),")"===state.token)return closeParams(state),getToken(state),node=new ParenthesisNode(node),node=parseAccessors(state,node);throw createSyntaxError(state,"Parenthesis ) expected")}(state):(numberStr=state.token,getToken(state),new ConstantNode(numeric(numberStr,config.number)))}(state);var key;openParams(state);var properties={};do{if(getToken(state),"}"!==state.token){if('"'===state.token)key=parseDoubleQuotesStringToken(state);else if("'"===state.token)key=parseSingleQuotesStringToken(state);else{if(!(state.tokenType===TOKENTYPE.SYMBOL||state.tokenType===TOKENTYPE.DELIMITER&&state.token in NAMED_DELIMITERS))throw createSyntaxError(state,"Symbol or string expected as object key");key=state.token,getToken(state)}if(":"!==state.token)throw createSyntaxError(state,"Colon : expected after object key");getToken(state),properties[key]=parseAssignment(state)}}while(","===state.token);if("}"!==state.token)throw createSyntaxError(state,"Comma , or bracket } expected after object value");closeParams(state),getToken(state);var node=new ObjectNode(properties);return node=parseAccessors(state,node)}(state);if(openParams(state),getToken(state),"]"!==state.token){var row=parseRow(state);if(";"===state.token){for(rows=1,params=[row];";"===state.token;)getToken(state),params[rows]=parseRow(state),rows++;if("]"!==state.token)throw createSyntaxError(state,"End of matrix ] expected");closeParams(state),getToken(state),cols=params[0].items.length;for(var r=1;r");if(2!==lr.length)throw SyntaxError("Could not parse rule: "+rule);rule={l:lr[0],r:lr[1]};case"object":newRule={l:removeParens(parse(rule.l)),r:removeParens(parse(rule.r))},rule.context&&(newRule.evaluate=rule.context),rule.evaluate&&(newRule.evaluate=parse(rule.evaluate)),isAssociative(newRule.l)&&(makeNode=createMakeNodeFunction(newRule.l),expandsym=new SymbolNode("_p"+_lastsym++),newRule.expanded={},newRule.expanded.l=makeNode([newRule.l.clone(),expandsym]),flatten(newRule.expanded.l),unflattenr(newRule.expanded.l),newRule.expanded.r=makeNode([newRule.r,expandsym]));break;case"function":newRule=rule;break;default:throw TypeError("Unsupported type of rule: "+ruleType)}ruleSet.push(newRule)}return ruleSet}(rules);for(var res=resolve(expr,scope),visited={},str=(res=removeParens(res)).toString({parenthesis:"all"});!visited[str];){visited[str]=!0;for(var i=_lastsym=0;idense))for(var p1=tptr[j+1];p=mark?W[w+e]-=nvi:0!==W[w+e]&&(W[w+e]=W[degree+e]+wnvi);for(pk=pk1;pk>=1,px=multiply(px,px);return res}function _powMatrix(x,y){return matrix(_powArray(x.valueOf(),y))}});exports.createPow=createPow},{"../../plain/number":874,"../../utils/array":922,"../../utils/factory":931,"../../utils/number":937}],720:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createRoundNumber=exports.createRound=void 0;var _factory=require("../../utils/factory"),_collection=require("../../utils/collection"),_number=require("../../utils/number"),_algorithm=require("../../type/matrix/utils/algorithm11"),_algorithm2=require("../../type/matrix/utils/algorithm12"),_algorithm3=require("../../type/matrix/utils/algorithm14"),_number2=require("../../plain/number");function ownKeys(object,enumerableOnly){var symbols,keys=Object.keys(object);return Object.getOwnPropertySymbols&&(symbols=Object.getOwnPropertySymbols(object),enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})),keys.push.apply(keys,symbols)),keys}function _objectSpread(target){for(var i=1;i=size.length)throw new _IndexError.IndexError(dim,size.length);return(0,_is.isMatrix)(mat)?mat.create(_apply(mat.valueOf(),dim,callback)):_apply(mat,dim,callback)}})});function _apply(mat,dim,callback){var i,ret,tran;if(dim<=0){if(Array.isArray(mat[0])){for(tran=function(mat){var i,j,I=mat.length,J=mat[0].length,ret=[];for(j=0;j=abs(e0);){var _i3=Vab[0][0],j=Vab[0][1];psi=function(aii,ajj,aij){var denom=subtract(ajj,aii);return abs(denom)<=config.epsilon?bignumber(-1).acos().div(4):multiplyScalar(.5,atan(multiply(2,aij,inv(denom))))}(x[_i3][_i3],x[j][j],x[_i3][j]),x=function(Hij,theta,i,j){for(var N=Hij.length,c=bignumber(cos(theta)),s=bignumber(sin(theta)),c2=multiplyScalar(c,c),s2=multiplyScalar(s,s),Aki=createArray(N,bignumber(0)),Akj=createArray(N,bignumber(0)),csHij=multiply(bignumber(2),c,s,Hij[i][j]),Aii=addScalar(subtract(multiplyScalar(c2,Hij[i][i]),csHij),multiplyScalar(s2,Hij[j][j])),Ajj=add(multiplyScalar(s2,Hij[i][i]),csHij,multiplyScalar(c2,Hij[j][j])),k=0;k=Math.abs(e0);){var _i=Vab[0][0],j=Vab[0][1];aii=x[_i][_i],ajj=x[j][j],aij=x[_i][j],denom=void 0,denom=ajj-aii,x=function(Hij,theta,i,j){for(var N=Hij.length,c=Math.cos(theta),s=Math.sin(theta),c2=c*c,s2=s*s,Aki=createArray(N,0),Akj=createArray(N,0),Aii=c2*Hij[i][i]-2*c*s*Hij[i][j]+s2*Hij[j][j],Ajj=s2*Hij[i][i]+2*c*s*Hij[i][j]+c2*Hij[j][j],k=0;kABig&&(ABig=abs(A[r][c]),rBig=r),r++;if(0===ABig)throw Error("Cannot calculate inverse, determinant is zero");(r=rBig)!==c&&(temp=A[c],A[c]=A[r],A[r]=temp,temp=B[c],B[c]=B[r],B[r]=temp);var Ac=A[c],Bc=B[c];for(r=0;r=arr.length)throw new Error("k out of bounds");for(var i=0;ilen)return str.substring(0,len);if(str.length_maxIterations)throw new Error("computing square root of matrix: iterative method could not converge")}while(_tolerancestrLen)for(var _i=strLen-1,_len=chars.length;_i<_len;_i++)chars[_i]||(chars[_i]=defaultValue);return chars.join("")}function _getObjectProperty(object,index){if(1!==index.size().length)throw new _DimensionError.DimensionError(index.size(),1);var key=index.dimension(0);if("string"!=typeof key)throw new TypeError("String expected as index to retrieve an object property");return(0,_customs.getSafeProperty)(object,key)}function _setObjectProperty(object,index,replacement){if(1!==index.size().length)throw new _DimensionError.DimensionError(index.size(),1);var key=index.dimension(0);if("string"!=typeof key)throw new TypeError("String expected as index to retrieve an object property");var updated=(0,_object.clone)(object);return(0,_customs.setSafeProperty)(updated,key,replacement),updated}exports.createSubset=createSubset},{"../../error/DimensionError":399,"../../utils/array":922,"../../utils/customs":929,"../../utils/factory":931,"../../utils/is":933,"../../utils/object":938}],779:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createTrace=void 0;var _object=require("../../utils/object"),_string=require("../../utils/string"),dependencies=["typed","matrix","add"],createTrace=(0,require("../../utils/factory").factory)("trace",dependencies,function(_ref){var typed=_ref.typed,matrix=_ref.matrix,add=_ref.add;return typed("trace",{Array:function(x){return _denseTrace(matrix(x))},SparseMatrix:function(m){var values=m._values,index=m._index,ptr=m._ptr,size=m._size,rows=size[0],columns=size[1];if(rows!==columns)throw new RangeError("Matrix must be square (size: "+(0,_string.format)(size)+")");var sum=0;if(0y.re)return 1;if(x.rey.im)return 1;if(x.imy.length?1:x.lengtharray[j+1].length&&(temp=array[j],array[j]=array[j+1],array[j+1]=temp);return array}(result)}})});exports.createSetPowerset=createSetPowerset},{"../../utils/array":922,"../../utils/factory":931}],813:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createSetSize=void 0;var _array=require("../../utils/array"),_factory=require("../../utils/factory"),dependencies=["typed","compareNatural"],createSetSize=(0,_factory.factory)("setSize",dependencies,function(_ref){var typed=_ref.typed,compareNatural=_ref.compareNatural;return typed("setSize",{"Array | Matrix":function(a){return Array.isArray(a)?(0,_array.flatten)(a).length:(0,_array.flatten)(a.toArray()).length},"Array | Matrix, boolean":function(a,unique){if(!1===unique||0===a.length)return Array.isArray(a)?(0,_array.flatten)(a).length:(0,_array.flatten)(a.toArray()).length;for(var b=(0,_array.flatten)(Array.isArray(a)?a:a.toArray()).sort(compareNatural),count=1,i=1;imax&&(max=count[value],mode=[value])}return mode}});exports.createMode=createMode},{"../../utils/array":922,"../../utils/factory":931}],823:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createProd=void 0;var _collection=require("../../utils/collection"),_factory=require("../../utils/factory"),_improveErrorMessage=require("./utils/improveErrorMessage"),dependencies=["typed","multiply"],createProd=(0,_factory.factory)("prod",dependencies,function(_ref){var typed=_ref.typed,multiply=_ref.multiply;return typed("prod",{"Array | Matrix":_prod,"Array | Matrix, number | BigNumber":function(){throw new Error("prod(A, dim) is not yet supported")},"...":_prod});function _prod(array){var prod;if((0,_collection.deepForEach)(array,function(value){try{prod=void 0===prod?value:multiply(prod,value)}catch(err){throw(0,_improveErrorMessage.improveErrorMessage)(err,"prod",value)}}),void 0===prod)throw new Error("Cannot calculate prod of an empty array");return prod}});exports.createProd=createProd},{"../../utils/collection":927,"../../utils/factory":931,"./utils/improveErrorMessage":827}],824:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createQuantileSeq=void 0;var _is=require("../../utils/is"),_number=require("../../utils/number"),_array=require("../../utils/array"),dependencies=["typed","add","multiply","partitionSelect","compare"],createQuantileSeq=(0,require("../../utils/factory").factory)("quantileSeq",dependencies,function(_ref){var typed=_ref.typed,add=_ref.add,multiply=_ref.multiply,partitionSelect=_ref.partitionSelect,compare=_ref.compare;function _quantileSeq(array,prob,sorted){var flat=(0,_array.flatten)(array),len=flat.length;if(0===len)throw new Error("Cannot calculate quantile of an empty sequence");if((0,_is.isNumber)(prob)){var _index=prob*(len-1),_fracPart=_index%1;if(0==_fracPart){var value=sorted?flat[_index]:partitionSelect(flat,_index);return validate(value),value}var _left,_right,_integerPart=Math.floor(_index);if(sorted)_left=flat[_integerPart],_right=flat[_integerPart+1];else{_right=partitionSelect(flat,_integerPart+1),_left=flat[_integerPart];for(var i=0;i<_integerPart;++i)0>y}function rightLogShiftNumber(x,y){if(!(0,_number.isInteger)(x)||!(0,_number.isInteger)(y))throw new Error("Integers expected in function rightLogShift");return x>>>y}bitAndNumber.signature=n2,bitNotNumber.signature="number",rightLogShiftNumber.signature=rightArithShiftNumber.signature=leftShiftNumber.signature=bitXorNumber.signature=bitOrNumber.signature=n2},{"../../utils/number":937}],872:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.combinationsNumber=combinationsNumber;var _number=require("../../utils/number"),_product=require("../../utils/product");function combinationsNumber(n,k){if(!(0,_number.isInteger)(n)||n<0)throw new TypeError("Positive integer value expected in function combinations");if(!(0,_number.isInteger)(k)||k<0)throw new TypeError("Positive integer value expected in function combinations");if(nb.re?1:a.reb.im?1:a.imnewSize[i]&&(newSize[i]=size[i],changed=!0);changed&&_resize(matrix,newSize,defaultValue)}return(DenseMatrix.prototype=new Matrix).createDenseMatrix=function(data,datatype){return new DenseMatrix(data,datatype)},DenseMatrix.prototype.type="DenseMatrix",DenseMatrix.prototype.isDenseMatrix=!0,DenseMatrix.prototype.getDataType=function(){return(0,_array.getArrayDataType)(this._data,_is.typeOf)},DenseMatrix.prototype.storage=function(){return"dense"},DenseMatrix.prototype.datatype=function(){return this._datatype},DenseMatrix.prototype.create=function(data,datatype){return new DenseMatrix(data,datatype)},DenseMatrix.prototype.subset=function(index,replacement,defaultValue){switch(arguments.length){case 1:return function(matrix,index){if(!(0,_is.isIndex)(index))throw new TypeError("Invalid index");{if(index.isScalar())return matrix.get(index.min());var size=index.size();if(size.length!==matrix._size.length)throw new _DimensionError.DimensionError(size.length,matrix._size.length);for(var min=index.min(),max=index.max(),i=0,ii=matrix._size.length;i");var size=index.max().map(function(i){return i+1});_fit(matrix,size,defaultValue);var dims=iSize.length;!function _setSubmatrix(data,index,submatrix,dims,dim){var last=dim===dims-1;var range=index.dimension(dim);last?range.forEach(function(dataIndex,subIndex){(0,_array.validateIndex)(dataIndex),data[dataIndex]=submatrix[subIndex[0]]}):range.forEach(function(dataIndex,subIndex){(0,_array.validateIndex)(dataIndex),_setSubmatrix(data[dataIndex],index,submatrix[subIndex[0]],dims,dim+1)})}(matrix._data,index,submatrix,dims,0)}return matrix}(this,index,replacement,defaultValue);default:throw new SyntaxError("Wrong number of arguments")}},DenseMatrix.prototype.get=function(index){if(!(0,_is.isArray)(index))throw new TypeError("Array expected");if(index.length!==this._size.length)throw new _DimensionError.DimensionError(index.length,this._size.length);for(var x=0;x=from&&(equalScalar(node.value,0)||callback(node.key,node.value,this)),(node=heap.extractMinimum())&&nodes.push(node);for(var i=0;i");for(var x0=index.min()[0],y0=index.min()[1],m=sSize[0],n=sSize[1],x=0;x "+(this._values?(0,_string.format)(this._values[k],options):"X")}return str},SparseMatrix.prototype.toString=function(){return(0,_string.format)(this.toArray())},SparseMatrix.prototype.toJSON=function(){return{mathjs:"SparseMatrix",values:this._values,index:this._index,ptr:this._ptr,size:this._size,datatype:this._datatype}},SparseMatrix.prototype.diagonal=function(k){if(k){if((0,_is.isBigNumber)(k)&&(k=k.toNumber()),!(0,_is.isNumber)(k)||!(0,_number.isInteger)(k))throw new TypeError("The parameter k must be an integer number")}else k=0;var kSuper=0")}(array,size,0)},exports.validateIndex=function(index,length){if(!(0,_is.isNumber)(index)||!(0,_number.isInteger)(index))throw new TypeError("Index must be an integer (value: "+index+")");if(index<0||"number"==typeof length&&length<=index)throw new _IndexError.IndexError(index,length)},exports.resize=function(array,size,defaultValue){if(!Array.isArray(array)||!Array.isArray(size))throw new TypeError("Array expected");if(0===size.length)throw new Error("Resizing to scalar is not supported");size.forEach(function(value){if(!(0,_is.isNumber)(value)||!(0,_number.isInteger)(value)||value<0)throw new TypeError("Invalid size, must contain positive integers (size: "+(0,_string.format)(size)+")")});var _defaultValue=void 0!==defaultValue?defaultValue:0;return function _resize(array,size,dim,defaultValue){var i;var elem;var oldLen=array.length;var newLen=size[dim];var minLen=Math.min(oldLen,newLen);array.length=newLen;if(dimstrL)for(xe-=strL;xe--;)str+="0";else xe>1,arr[_j]&=1)}return arr.reverse()}Object.defineProperty(exports,"__esModule",{value:!0}),exports.bitAndBigNumber=function(x,y){if(x.isFinite()&&!x.isInteger()||y.isFinite()&&!y.isInteger())throw new Error("Integers expected in function bitAnd");var BigNumber=x.constructor;if(x.isNaN()||y.isNaN())return new BigNumber(NaN);if(x.isZero()||y.eq(-1)||x.eq(y))return x;if(y.isZero()||x.eq(-1))return y;if(!x.isFinite()||!y.isFinite()){if(!x.isFinite()&&!y.isFinite())return x.isNegative()===y.isNegative()?x:new BigNumber(0);if(!x.isFinite())return y.isNegative()?x:x.isNegative()?new BigNumber(0):y;if(!y.isFinite())return x.isNegative()?y:y.isNegative()?new BigNumber(0):x}return bitwise(x,y,function(a,b){return a&b})},exports.bitNotBigNumber=bitNotBigNumber,exports.bitOrBigNumber=function(x,y){if(x.isFinite()&&!x.isInteger()||y.isFinite()&&!y.isInteger())throw new Error("Integers expected in function bitOr");var BigNumber=x.constructor;if(x.isNaN()||y.isNaN())return new BigNumber(NaN);var negOne=new BigNumber(-1);if(x.isZero()||y.eq(negOne)||x.eq(y))return y;if(y.isZero()||x.eq(negOne))return x;if(x.isFinite()&&y.isFinite())return bitwise(x,y,function(a,b){return a|b});if(!x.isFinite()&&!x.isNegative()&&y.isNegative()||x.isNegative()&&!y.isNegative()&&!y.isFinite())return negOne;if(x.isNegative()&&y.isNegative())return x.isFinite()?x:y;return x.isFinite()?y:x},exports.bitwise=bitwise,exports.bitXor=function(x,y){if(x.isFinite()&&!x.isInteger()||y.isFinite()&&!y.isInteger())throw new Error("Integers expected in function bitXor");var BigNumber=x.constructor;if(x.isNaN()||y.isNaN())return new BigNumber(NaN);if(x.isZero())return y;if(y.isZero())return x;if(x.eq(y))return new BigNumber(0);var negOne=new BigNumber(-1);if(x.eq(negOne))return bitNotBigNumber(y);if(y.eq(negOne))return bitNotBigNumber(x);return x.isFinite()&&y.isFinite()?bitwise(x,y,function(a,b){return a^b}):x.isFinite()||y.isFinite()?new BigNumber(x.isNegative()===y.isNegative()?1/0:-1/0):negOne},exports.leftShiftBigNumber=function(x,y){if(x.isFinite()&&!x.isInteger()||y.isFinite()&&!y.isInteger())throw new Error("Integers expected in function leftShift");var BigNumber=x.constructor;if(x.isNaN()||y.isNaN()||y.isNegative()&&!y.isZero())return new BigNumber(NaN);if(x.isZero()||y.isZero())return x;if(!x.isFinite()&&!y.isFinite())return new BigNumber(NaN);if(y.lt(55))return x.times(Math.pow(2,y.toNumber())+"");return x.times(new BigNumber(2).pow(y))},exports.rightArithShiftBigNumber=function(x,y){if(x.isFinite()&&!x.isInteger()||y.isFinite()&&!y.isInteger())throw new Error("Integers expected in function rightArithShift");var BigNumber=x.constructor;if(x.isNaN()||y.isNaN()||y.isNegative()&&!y.isZero())return new BigNumber(NaN);if(x.isZero()||y.isZero())return x;if(!y.isFinite())return x.isNegative()?new BigNumber(-1):x.isFinite()?new BigNumber(0):new BigNumber(NaN);if(y.lt(55))return x.div(Math.pow(2,y.toNumber())+"").floor();return x.div(new BigNumber(2).pow(y)).floor()}},{}],924:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createBigNumberTau=exports.createBigNumberPi=exports.createBigNumberPhi=exports.createBigNumberE=void 0;var _function=require("../function"),createBigNumberE=(0,_function.memoize)(function(BigNumber){return new BigNumber(1).exp()},hasher);exports.createBigNumberE=createBigNumberE;var createBigNumberPhi=(0,_function.memoize)(function(BigNumber){return new BigNumber(1).plus(new BigNumber(5).sqrt()).div(2)},hasher);exports.createBigNumberPhi=createBigNumberPhi;var createBigNumberPi=(0,_function.memoize)(function(BigNumber){return BigNumber.acos(-1)},hasher);exports.createBigNumberPi=createBigNumberPi;var createBigNumberTau=(0,_function.memoize)(function(BigNumber){return createBigNumberPi(BigNumber).times(2)},hasher);function hasher(args){return args[0].precision}exports.createBigNumberTau=createBigNumberTau},{"../function":932}],925:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.format=function format(value,options){if("function"==typeof options)return options(value);if(!value.isFinite())return value.isNaN()?"NaN":value.gt(0)?"Infinity":"-Infinity";var notation="auto";var precision;void 0!==options&&(options.notation&&(notation=options.notation),"number"==typeof options?precision=options:options.precision&&(precision=options.precision));switch(notation){case"fixed":return toFixed(value,precision);case"exponential":return toExponential(value,precision);case"engineering":return toEngineering(value,precision);case"auto":if(options&&options.exponential&&(void 0!==options.exponential.lower||void 0!==options.exponential.upper)){var fixedOptions=(0,_object.mapObject)(options,function(x){return x});return(fixedOptions.exponential=void 0)!==options.exponential.lower&&(fixedOptions.lowerExp=Math.round(Math.log(options.exponential.lower)/Math.LN10)),void 0!==options.exponential.upper&&(fixedOptions.upperExp=Math.round(Math.log(options.exponential.upper)/Math.LN10)),console.warn("Deprecation warning: Formatting options exponential.lower and exponential.upper (minimum and maximum value) are replaced with exponential.lowerExp and exponential.upperExp (minimum and maximum exponent) since version 4.0.0. Replace "+JSON.stringify(options)+" with "+JSON.stringify(fixedOptions)),format(value,fixedOptions)}var lowerExp=options&&void 0!==options.lowerExp?options.lowerExp:-3,upperExp=options&&void 0!==options.upperExp?options.upperExp:5;if(value.isZero())return"0";var rounded=value.toSignificantDigits(precision),exp=rounded.e;return(lowerExp<=exp&&exp=size.length)throw new _IndexError.IndexError(dim,size.length);return(0,_is.isMatrix)(mat)?mat.create(_reduce(mat.valueOf(),dim,callback)):_reduce(mat,dim,callback)},exports.scatter=function(a,j,w,x,u,mark,cindex,f,inverse,update,value){var k,k0,k1,i,avalues=a._values,aindex=a._index,aptr=a._ptr;if(x)for(k0=aptr[j],k1=aptr[j+1],k=k0;k>",rightLogShift:">>>",equal:"=",unequal:"\\neq",smaller:"<",larger:">",smallerEq:"\\leq",largerEq:"\\geq",bitAnd:"\\&",bitXor:"\\underline{|}",bitOr:"|",and:"\\wedge",xor:"\\veebar",or:"\\vee"};exports.latexOperators=latexOperators;var latexFunctions={abs:{1:"\\left|${args[0]}\\right|"},add:{2:"\\left(${args[0]}".concat(latexOperators.add,"${args[1]}\\right)")},cbrt:{1:"\\sqrt[3]{${args[0]}}"},ceil:{1:"\\left\\lceil${args[0]}\\right\\rceil"},cube:{1:"\\left(${args[0]}\\right)^3"},divide:{2:"\\frac{${args[0]}}{${args[1]}}"},dotDivide:{2:"\\left(${args[0]}".concat(latexOperators.dotDivide,"${args[1]}\\right)")},dotMultiply:{2:"\\left(${args[0]}".concat(latexOperators.dotMultiply,"${args[1]}\\right)")},dotPow:{2:"\\left(${args[0]}".concat(latexOperators.dotPow,"${args[1]}\\right)")},exp:{1:"\\exp\\left(${args[0]}\\right)"},expm1:"\\left(e".concat(latexOperators.pow,"{${args[0]}}-1\\right)"),fix:{1:"\\mathrm{${name}}\\left(${args[0]}\\right)"},floor:{1:"\\left\\lfloor${args[0]}\\right\\rfloor"},gcd:"\\gcd\\left(${args}\\right)",hypot:"\\hypot\\left(${args}\\right)",log:{1:"\\ln\\left(${args[0]}\\right)",2:"\\log_{${args[1]}}\\left(${args[0]}\\right)"},log10:{1:"\\log_{10}\\left(${args[0]}\\right)"},log1p:{1:"\\ln\\left(${args[0]}+1\\right)",2:"\\log_{${args[1]}}\\left(${args[0]}+1\\right)"},log2:"\\log_{2}\\left(${args[0]}\\right)",mod:{2:"\\left(${args[0]}".concat(latexOperators.mod,"${args[1]}\\right)")},multiply:{2:"\\left(${args[0]}".concat(latexOperators.multiply,"${args[1]}\\right)")},norm:{1:"\\left\\|${args[0]}\\right\\|",2:void 0},nthRoot:{2:"\\sqrt[${args[1]}]{${args[0]}}"},nthRoots:{2:"\\{y : $y^{args[1]} = {${args[0]}}\\}"},pow:{2:"\\left(${args[0]}\\right)".concat(latexOperators.pow,"{${args[1]}}")},round:{1:"\\left\\lfloor${args[0]}\\right\\rceil",2:void 0},sign:{1:"\\mathrm{${name}}\\left(${args[0]}\\right)"},sqrt:{1:"\\sqrt{${args[0]}}"},square:{1:"\\left(${args[0]}\\right)^2"},subtract:{2:"\\left(${args[0]}".concat(latexOperators.subtract,"${args[1]}\\right)")},unaryMinus:{1:"".concat(latexOperators.unaryMinus,"\\left(${args[0]}\\right)")},unaryPlus:{1:"".concat(latexOperators.unaryPlus,"\\left(${args[0]}\\right)")},bitAnd:{2:"\\left(${args[0]}".concat(latexOperators.bitAnd,"${args[1]}\\right)")},bitNot:{1:latexOperators.bitNot+"\\left(${args[0]}\\right)"},bitOr:{2:"\\left(${args[0]}".concat(latexOperators.bitOr,"${args[1]}\\right)")},bitXor:{2:"\\left(${args[0]}".concat(latexOperators.bitXor,"${args[1]}\\right)")},leftShift:{2:"\\left(${args[0]}".concat(latexOperators.leftShift,"${args[1]}\\right)")},rightArithShift:{2:"\\left(${args[0]}".concat(latexOperators.rightArithShift,"${args[1]}\\right)")},rightLogShift:{2:"\\left(${args[0]}".concat(latexOperators.rightLogShift,"${args[1]}\\right)")},bellNumbers:{1:"\\mathrm{B}_{${args[0]}}"},catalan:{1:"\\mathrm{C}_{${args[0]}}"},stirlingS2:{2:"\\mathrm{S}\\left(${args}\\right)"},arg:{1:"\\arg\\left(${args[0]}\\right)"},conj:{1:"\\left(${args[0]}\\right)^*"},im:{1:"\\Im\\left\\lbrace${args[0]}\\right\\rbrace"},re:{1:"\\Re\\left\\lbrace${args[0]}\\right\\rbrace"},and:{2:"\\left(${args[0]}".concat(latexOperators.and,"${args[1]}\\right)")},not:{1:latexOperators.not+"\\left(${args[0]}\\right)"},or:{2:"\\left(${args[0]}".concat(latexOperators.or,"${args[1]}\\right)")},xor:{2:"\\left(${args[0]}".concat(latexOperators.xor,"${args[1]}\\right)")},cross:{2:"\\left(${args[0]}\\right)\\times\\left(${args[1]}\\right)"},ctranspose:{1:"\\left(${args[0]}\\right)".concat(latexOperators.ctranspose)},det:{1:"\\det\\left(${args[0]}\\right)"},dot:{2:"\\left(${args[0]}\\cdot${args[1]}\\right)"},expm:{1:"\\exp\\left(${args[0]}\\right)"},inv:{1:"\\left(${args[0]}\\right)^{-1}"},sqrtm:{1:"{${args[0]}}".concat(latexOperators.pow,"{\\frac{1}{2}}")},trace:{1:"\\mathrm{tr}\\left(${args[0]}\\right)"},transpose:{1:"\\left(${args[0]}\\right)".concat(latexOperators.transpose)},combinations:{2:"\\binom{${args[0]}}{${args[1]}}"},combinationsWithRep:{2:"\\left(\\!\\!{\\binom{${args[0]}}{${args[1]}}}\\!\\!\\right)"},factorial:{1:"\\left(${args[0]}\\right)".concat(latexOperators.factorial)},gamma:{1:"\\Gamma\\left(${args[0]}\\right)"},equal:{2:"\\left(${args[0]}".concat(latexOperators.equal,"${args[1]}\\right)")},larger:{2:"\\left(${args[0]}".concat(latexOperators.larger,"${args[1]}\\right)")},largerEq:{2:"\\left(${args[0]}".concat(latexOperators.largerEq,"${args[1]}\\right)")},smaller:{2:"\\left(${args[0]}".concat(latexOperators.smaller,"${args[1]}\\right)")},smallerEq:{2:"\\left(${args[0]}".concat(latexOperators.smallerEq,"${args[1]}\\right)")},unequal:{2:"\\left(${args[0]}".concat(latexOperators.unequal,"${args[1]}\\right)")},erf:{1:"erf\\left(${args[0]}\\right)"},max:"\\max\\left(${args}\\right)",min:"\\min\\left(${args}\\right)",variance:"\\mathrm{Var}\\left(${args}\\right)",acos:{1:"\\cos^{-1}\\left(${args[0]}\\right)"},acosh:{1:"\\cosh^{-1}\\left(${args[0]}\\right)"},acot:{1:"\\cot^{-1}\\left(${args[0]}\\right)"},acoth:{1:"\\coth^{-1}\\left(${args[0]}\\right)"},acsc:{1:"\\csc^{-1}\\left(${args[0]}\\right)"},acsch:{1:"\\mathrm{csch}^{-1}\\left(${args[0]}\\right)"},asec:{1:"\\sec^{-1}\\left(${args[0]}\\right)"},asech:{1:"\\mathrm{sech}^{-1}\\left(${args[0]}\\right)"},asin:{1:"\\sin^{-1}\\left(${args[0]}\\right)"},asinh:{1:"\\sinh^{-1}\\left(${args[0]}\\right)"},atan:{1:"\\tan^{-1}\\left(${args[0]}\\right)"},atan2:{2:"\\mathrm{atan2}\\left(${args}\\right)"},atanh:{1:"\\tanh^{-1}\\left(${args[0]}\\right)"},cos:{1:"\\cos\\left(${args[0]}\\right)"},cosh:{1:"\\cosh\\left(${args[0]}\\right)"},cot:{1:"\\cot\\left(${args[0]}\\right)"},coth:{1:"\\coth\\left(${args[0]}\\right)"},csc:{1:"\\csc\\left(${args[0]}\\right)"},csch:{1:"\\mathrm{csch}\\left(${args[0]}\\right)"},sec:{1:"\\sec\\left(${args[0]}\\right)"},sech:{1:"\\mathrm{sech}\\left(${args[0]}\\right)"},sin:{1:"\\sin\\left(${args[0]}\\right)"},sinh:{1:"\\sinh\\left(${args[0]}\\right)"},tan:{1:"\\tan\\left(${args[0]}\\right)"},tanh:{1:"\\tanh\\left(${args[0]}\\right)"},to:{2:"\\left(${args[0]}".concat(latexOperators.to,"${args[1]}\\right)")},numeric:function(node){return node.args[0].toTex()},number:{0:"0",1:"\\left(${args[0]}\\right)",2:"\\left(\\left(${args[0]}\\right)${args[1]}\\right)"},string:{0:'\\mathtt{""}',1:"\\mathrm{string}\\left(${args[0]}\\right)"},bignumber:{0:"0",1:"\\left(${args[0]}\\right)"},complex:{0:"0",1:"\\left(${args[0]}\\right)",2:"\\left(\\left(${args[0]}\\right)+".concat(latexSymbols.i,"\\cdot\\left(${args[1]}\\right)\\right)")},matrix:{0:"\\begin{bmatrix}\\end{bmatrix}",1:"\\left(${args[0]}\\right)",2:"\\left(${args[0]}\\right)"},sparse:{0:"\\begin{bsparse}\\end{bsparse}",1:"\\left(${args[0]}\\right)"},unit:{1:"\\left(${args[0]}\\right)",2:"\\left(\\left(${args[0]}\\right)${args[1]}\\right)"}};exports.latexFunctions=latexFunctions;exports.defaultTemplate="\\mathrm{${name}}\\left(${args}\\right)";var latexUnits={deg:"^\\circ"};function escapeLatex(string){return(0,_escapeLatex.default)(string,{preserveFormatting:!0})}},{"./object":938,"escape-latex":56}],935:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.warnOnce=void 0;var messages,warnOnce=(messages={},function(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];var _console,message=args.join(", ");messages[message]||(messages[message]=!0,(_console=console).warn.apply(_console,["Warning:"].concat(args)))});exports.warnOnce=warnOnce},{}],936:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.noBignumber=function(){throw new Error('No "bignumber" implementation available')},exports.noFraction=function(){throw new Error('No "fraction" implementation available')},exports.noMatrix=function(){throw new Error('No "matrix" implementation available')},exports.noIndex=function(){throw new Error('No "index" implementation available')},exports.noSubset=function(){throw new Error('No "matrix" implementation available')}},{}],937:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isInteger=function(value){return"boolean"==typeof value||!!isFinite(value)&&value===Math.round(value)},exports.format=function(value,options){if("function"==typeof options)return options(value);{if(value===1/0)return"Infinity";if(value===-1/0)return"-Infinity";if(isNaN(value))return"NaN"}var precision,notation="auto";options&&(options.notation&&(notation=options.notation),(0,_is.isNumber)(options)?precision=options:(0,_is.isNumber)(options.precision)&&(precision=options.precision));switch(notation){case"fixed":return toFixed(value,precision);case"exponential":return toExponential(value,precision);case"engineering":return toEngineering(value,precision);case"auto":if(!options||!options.exponential||void 0===options.exponential.lower&&void 0===options.exponential.upper)return toPrecision(value,precision,options&&options).replace(/((\.\d*?)(0+))($|e)/,function(){var digits=arguments[2],e=arguments[4];return"."!==digits?digits+e:e});var fixedOptions=(0,_object.mapObject)(options,function(x){return x});return(fixedOptions.exponential=void 0)!==options.exponential.lower&&(fixedOptions.lowerExp=Math.round(Math.log(options.exponential.lower)/Math.LN10)),void 0!==options.exponential.upper&&(fixedOptions.upperExp=Math.round(Math.log(options.exponential.upper)/Math.LN10)),console.warn("Deprecation warning: Formatting options exponential.lower and exponential.upper (minimum and maximum value) are replaced with exponential.lowerExp and exponential.upperExp (minimum and maximum exponent) since version 4.0.0. Replace "+JSON.stringify(options)+" with "+JSON.stringify(fixedOptions)),toPrecision(value,precision,fixedOptions);default:throw new Error('Unknown notation "'+notation+'". Choose "auto", "exponential", or "fixed".')}},exports.splitNumber=splitNumber,exports.toEngineering=toEngineering,exports.toFixed=toFixed,exports.toExponential=toExponential,exports.toPrecision=toPrecision,exports.roundDigits=roundDigits,exports.digits=function(value){return value.toExponential().replace(/e.*$/,"").replace(/^0\.?0*|\./,"").length},exports.nearlyEqual=function(x,y,epsilon){if(null==epsilon)return x===y;if(x===y)return!0;if(isNaN(x)||isNaN(y))return!1;if(isFinite(x)&&isFinite(y)){var diff=Math.abs(x-y);return diffc.length||e-newExp+1>c.length;)c.push(0);else for(var missingZeros=Math.abs(e-newExp)-(c.length-1),i=0;i=upperExp)return toExponential(value,precision);var c=rounded.coefficients,e=rounded.exponent;c.lengthprecision&&5<=c.splice(precision,c.length-precision)[0]){var i=precision-1;for(c[i]++;10===c[i];)c.pop(),0===i&&(c.unshift(0),rounded.exponent++,i++),c[--i]++}return rounded}function zeros(length){for(var arr=[],i=0;i>1;return product(i,half)*product(1+half,n)}},{}],941:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.endsWith=function(text,search){var start=text.length-search.length,end=text.length;return text.substring(start,end)===search},exports.format=format,exports.stringify=function(value){var text=String(value),escaped="",i=0;for(;i/g,">")},exports.compareText=function(x,y){if(!(0,_is.isString)(x))throw new TypeError("Unexpected type of argument in function compareText (expected: string or Array or Matrix, actual: "+(0,_is.typeOf)(x)+", index: 0)");if((0,_is.isString)(y))return x===y?0:y>>=1;return(n+x)/d}},module.exports.resetGlobal=function(){Math.random=oldRandom},mixkey(Math.random(),pool)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],945:[function(require,module,exports){function E(){}E.prototype={on:function(name,callback,ctx){var e=this.e||(this.e={});return(e[name]||(e[name]=[])).push({fn:callback,ctx:ctx}),this},once:function(name,callback,ctx){var self=this;function listener(){self.off(name,listener),callback.apply(ctx,arguments)}return listener._=callback,this.on(name,listener,ctx)},emit:function(name){for(var data=[].slice.call(arguments,1),evtArr=((this.e||(this.e={}))[name]||[]).slice(),i=0,len=evtArr.length;i=varIndex+1}}return 0===params.length?function(args){return 0===args.length}:1===params.length?(test0=compileTest(params[0]),function(args){return test0(args[0])&&1===args.length}):2===params.length?(test0=compileTest(params[0]),test1=compileTest(params[1]),function(args){return test0(args[0])&&test1(args[1])&&2===args.length}):(tests=params.map(compileTest),function(args){for(var i=0;imaxLength?(err=new TypeError("Too many arguments in function "+_name+" (expected: "+maxLength+", actual: "+args.length+")")).data={category:"tooManyArgs",fn:_name,index:args.length,expectedLength:maxLength}:(err=new TypeError('Arguments of type "'+args.join(", ")+'" do not match any of the defined signatures of function '+_name+".")).data={category:"mismatch",actual:args.map(findTypeName)},err}(name,arguments,signatures)},fn=function(arg0,arg1){return arguments.length===len0&&test00(arg0)&&test01(arg1)?fn0.apply(null,arguments):arguments.length===len1&&test10(arg0)&&test11(arg1)?fn1.apply(null,arguments):arguments.length===len2&&test20(arg0)&&test21(arg1)?fn2.apply(null,arguments):arguments.length===len3&&test30(arg0)&&test31(arg1)?fn3.apply(null,arguments):arguments.length===len4&&test40(arg0)&&test41(arg1)?fn4.apply(null,arguments):arguments.length===len5&&test50(arg0)&&test51(arg1)?fn5.apply(null,arguments):generic.apply(null,arguments)};try{Object.defineProperty(fn,"name",{value:name})}catch(err){}return fn.signatures=function(signatures){var signaturesMap={};return signatures.forEach(function(signature){signature.params.some(hasConversions)||splitParams(signature.params,!0).forEach(function(params){signaturesMap[stringifyParams(params)]=signature.fn})}),signaturesMap}(signatures),fn}function notIgnore(typeName){return-1===typed.ignore.indexOf(typeName)}function trim(str){return str.trim()}function notEmpty(str){return!!str}function notNull(value){return null!==value}function isInvalidParam(param){return 0===param.types.length}function last(arr){return arr[arr.length-1]}function slice(arr,start,end){return Array.prototype.slice.call(arr,start,end)}function findInArray(arr,test){for(var i=0;i\x03\x02\x02","\x02\xca\xcb\x07g\x02\x02\xcb\xcc\x07z\x02\x02","\xcc\xcd\x07r\x02\x02\xcd@\x03\x02\x02\x02\xce","\xcf\x07n\x02\x02\xcf\xd0\x07p\x02\x02\xd0B\x03","\x02\x02\x02\xd1\xd2\x07u\x02\x02\xd2\xd3\x07","s\x02\x02\xd3\xd4\x07t\x02\x02\xd4\xd5\x07v\x02","\x02\xd5D\x03\x02\x02\x02\xd6\xd7\x07r\x02\x02","\xd7\xd8\x07k\x02\x02\xd8F\x03\x02\x02\x02\xd9","\xda\x05I%\x02\xda\xdb\x05K&\x02\xdb\xe1\x03\x02","\x02\x02\xdc\xdd\x05M'\x02\xdd\xde\x05K&\x02\xde","\xe1\x03\x02\x02\x02\xdf\xe1\x05I%\x02\xe0\xd9","\x03\x02\x02\x02\xe0\xdc\x03\x02\x02\x02\xe0\xdf","\x03\x02\x02\x02\xe1H\x03\x02\x02\x02\xe2\xe3","\x05M'\x02\xe3\xe5\x070\x02\x02\xe4\xe6\t\x02\x02","\x02\xe5\xe4\x03\x02\x02\x02\xe6\xe7\x03\x02\x02","\x02\xe7\xe5\x03\x02\x02\x02\xe7\xe8\x03\x02\x02","\x02\xe8J\x03\x02\x02\x02\xe9\xea\t\x03\x02\x02","\xea\xec\t\x04\x02\x02\xeb\xed\t\x02\x02\x02\xec","\xeb\x03\x02\x02\x02\xed\xee\x03\x02\x02\x02\xee","\xec\x03\x02\x02\x02\xee\xef\x03\x02\x02\x02\xef","L\x03\x02\x02\x02\xf0\xf2\t\x02\x02\x02\xf1\xf0","\x03\x02\x02\x02\xf2\xf3\x03\x02\x02\x02\xf3\xf1","\x03\x02\x02\x02\xf3\xf4\x03\x02\x02\x02\xf4N","\x03\x02\x02\x02\xf5\xf9\t\x05\x02\x02\xf6\xf8","\t\x06\x02\x02\xf7\xf6\x03\x02\x02\x02\xf8\xfb","\x03\x02\x02\x02\xf9\xf7\x03\x02\x02\x02\xf9\xfa","\x03\x02\x02\x02\xfaP\x03\x02\x02\x02\xfb\xf9","\x03\x02\x02\x02\xfc\xfe\t\x07\x02\x02\xfd\xfc","\x03\x02\x02\x02\xfe\xff\x03\x02\x02\x02\xff\xfd","\x03\x02\x02\x02\xff\u0100\x03\x02\x02\x02\u0100\u0101","\x03\x02\x02\x02\u0101\u0102\b)\x02\x02\u0102R\x03\x02","\x02\x02\u0103\u0105\x07$\x02\x02\u0104\u0106\t\b\x02\x02","\u0105\u0104\x03\x02\x02\x02\u0106\u0107\x03\x02\x02\x02","\u0107\u0105\x03\x02\x02\x02\u0107\u0108\x03\x02\x02\x02","\u0108\u0109\x03\x02\x02\x02\u0109\u010a\x07$\x02\x02","\u010aT\x03\x02\x02\x02\u010b\u010c\x071\x02\x02\u010c","\u010d\x07,\x02\x02\u010d\u0111\x03\x02\x02\x02\u010e","\u0110\v\x02\x02\x02\u010f\u010e\x03\x02\x02\x02\u0110","\u0113\x03\x02\x02\x02\u0111\u0112\x03\x02\x02\x02\u0111","\u010f\x03\x02\x02\x02\u0112\u0114\x03\x02\x02\x02\u0113","\u0111\x03\x02\x02\x02\u0114\u0115\x07,\x02\x02\u0115","\u0116\x071\x02\x02\u0116\u0117\x03\x02\x02\x02\u0117","\u0118\b+\x02\x02\u0118V\x03\x02\x02\x02\u0119\u011a\x07","1\x02\x02\u011a\u011b\x071\x02\x02\u011b\u011f\x03\x02","\x02\x02\u011c\u011e\n\t\x02\x02\u011d\u011c\x03\x02\x02","\x02\u011e\u0121\x03\x02\x02\x02\u011f\u011d\x03\x02\x02","\x02\u011f\u0120\x03\x02\x02\x02\u0120\u0122\x03\x02\x02","\x02\u0121\u011f\x03\x02\x02\x02\u0122\u0123\b,\x02\x02","\u0123X\x03\x02\x02\x02\f\x02\xe0\xe7\xee\xf3\xf9","\xff\u0107\u0111\u011f\x03\b\x02\x02"].join(""),atn=(new antlr4.atn.ATNDeserializer).deserialize(serializedATN),decisionsToDFA=atn.decisionToState.map(function(ds,index){return new antlr4.dfa.DFA(ds,index)});function QASMLexer(input){return antlr4.Lexer.call(this,input),this._interp=new antlr4.atn.LexerATNSimulator(this,atn,decisionsToDFA,new antlr4.PredictionContextCache),this}(QASMLexer.prototype=Object.create(antlr4.Lexer.prototype)).constructor=QASMLexer,Object.defineProperty(QASMLexer.prototype,"atn",{get:function(){return atn}}),QASMLexer.EOF=antlr4.Token.EOF,QASMLexer.T__0=1,QASMLexer.T__1=2,QASMLexer.T__2=3,QASMLexer.T__3=4,QASMLexer.T__4=5,QASMLexer.T__5=6,QASMLexer.T__6=7,QASMLexer.T__7=8,QASMLexer.T__8=9,QASMLexer.T__9=10,QASMLexer.T__10=11,QASMLexer.T__11=12,QASMLexer.T__12=13,QASMLexer.T__13=14,QASMLexer.T__14=15,QASMLexer.T__15=16,QASMLexer.T__16=17,QASMLexer.T__17=18,QASMLexer.T__18=19,QASMLexer.T__19=20,QASMLexer.T__20=21,QASMLexer.T__21=22,QASMLexer.T__22=23,QASMLexer.T__23=24,QASMLexer.T__24=25,QASMLexer.T__25=26,QASMLexer.T__26=27,QASMLexer.T__27=28,QASMLexer.T__28=29,QASMLexer.T__29=30,QASMLexer.T__30=31,QASMLexer.T__31=32,QASMLexer.T__32=33,QASMLexer.PI=34,QASMLexer.REAL=35,QASMLexer.SUBREAL=36,QASMLexer.EXPREAL=37,QASMLexer.INT=38,QASMLexer.ID=39,QASMLexer.WS=40,QASMLexer.FILENAME=41,QASMLexer.COMMENT=42,QASMLexer.LINE_COMMENT=43,QASMLexer.prototype.channelNames=["DEFAULT_TOKEN_CHANNEL","HIDDEN"],QASMLexer.prototype.modeNames=["DEFAULT_MODE"],QASMLexer.prototype.literalNames=[null,"'}'","'opaque'","';'","'('","')'","'if'","'=='","'barrier'","'OPENQASM'","'include'","'qreg'","'['","']'","'creg'","'gate'","'{'","'measure'","'->'","'reset'","'U'","'CX'","','","'^'","'*'","'/'","'+'","'-'","'sin'","'cos'","'tan'","'exp'","'ln'","'sqrt'","'pi'"],QASMLexer.prototype.symbolicNames=[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"PI","REAL","SUBREAL","EXPREAL","INT","ID","WS","FILENAME","COMMENT","LINE_COMMENT"],QASMLexer.prototype.ruleNames=["T__0","T__1","T__2","T__3","T__4","T__5","T__6","T__7","T__8","T__9","T__10","T__11","T__12","T__13","T__14","T__15","T__16","T__17","T__18","T__19","T__20","T__21","T__22","T__23","T__24","T__25","T__26","T__27","T__28","T__29","T__30","T__31","T__32","PI","REAL","SUBREAL","EXPREAL","INT","ID","WS","FILENAME","COMMENT","LINE_COMMENT"],QASMLexer.prototype.grammarFileName="QASM.g4",exports.QASMLexer=QASMLexer},{"antlr4/index":47}],3:[function(require,module,exports){var antlr4=require("antlr4/index");function QASMListener(){return antlr4.tree.ParseTreeListener.call(this),this}((QASMListener.prototype=Object.create(antlr4.tree.ParseTreeListener.prototype)).constructor=QASMListener).prototype.enterMainprog=function(ctx){},QASMListener.prototype.exitMainprog=function(ctx){},QASMListener.prototype.enterStatement=function(ctx){},QASMListener.prototype.exitStatement=function(ctx){},QASMListener.prototype.enterVersion=function(ctx){},QASMListener.prototype.exitVersion=function(ctx){},QASMListener.prototype.enterInclude=function(ctx){},QASMListener.prototype.exitInclude=function(ctx){},QASMListener.prototype.enterFilename=function(ctx){},QASMListener.prototype.exitFilename=function(ctx){},QASMListener.prototype.enterDecl=function(ctx){},QASMListener.prototype.exitDecl=function(ctx){},QASMListener.prototype.enterGatedecl=function(ctx){},QASMListener.prototype.exitGatedecl=function(ctx){},QASMListener.prototype.enterGoplist=function(ctx){},QASMListener.prototype.exitGoplist=function(ctx){},QASMListener.prototype.enterQop=function(ctx){},QASMListener.prototype.exitQop=function(ctx){},QASMListener.prototype.enterUop=function(ctx){},QASMListener.prototype.exitUop=function(ctx){},QASMListener.prototype.enterAnylist=function(ctx){},QASMListener.prototype.exitAnylist=function(ctx){},QASMListener.prototype.enterIdlist=function(ctx){},QASMListener.prototype.exitIdlist=function(ctx){},QASMListener.prototype.enterMixedlist=function(ctx){},QASMListener.prototype.exitMixedlist=function(ctx){},QASMListener.prototype.enterArgument=function(ctx){},QASMListener.prototype.exitArgument=function(ctx){},QASMListener.prototype.enterExplist=function(ctx){},QASMListener.prototype.exitExplist=function(ctx){},QASMListener.prototype.enterExp=function(ctx){},QASMListener.prototype.exitExp=function(ctx){},QASMListener.prototype.enterAtom=function(ctx){},QASMListener.prototype.exitAtom=function(ctx){},QASMListener.prototype.enterUnaryop=function(ctx){},QASMListener.prototype.exitUnaryop=function(ctx){},exports.QASMListener=QASMListener},{"antlr4/index":47}],4:[function(require,module,exports){var antlr4=require("antlr4/index"),QASMListener=require("./QASMListener").QASMListener,serializedATN=["\x03\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964","\x03-\u0130\x04\x02\t\x02\x04\x03\t\x03\x04\x04\t","\x04\x04\x05\t\x05\x04\x06\t\x06\x04\x07\t\x07\x04","\b\t\b\x04\t\t\t\x04\n\t\n\x04\v\t\v\x04\f\t\f\x04","\r\t\r\x04\x0e\t\x0e\x04\x0f\t\x0f\x04\x10\t\x10\x04","\x11\t\x11\x04\x12\t\x12\x04\x13\t\x13\x03\x02\x03","\x02\x07\x02)\n\x02\f\x02\x0e\x02,\v\x02\x03\x03","\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03","\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03","\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03","\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03","\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03","\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03\x03","\x03\x03\x03\x03\x03\x03\x03\x03\x05\x03W\n\x03","\x03\x04\x03\x04\x03\x04\x03\x04\x03\x05\x03\x05","\x03\x05\x03\x05\x03\x06\x03\x06\x03\x07\x03\x07","\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07\x03\x07","\x03\x07\x03\x07\x03\x07\x03\x07\x05\x07o\n\x07","\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03","\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03\b\x03","\b\x03\b\x03\b\x05\b\x85\n\b\x03\t\x03\t\x03\t\x03\t","\x03\t\x06\t\x8c\n\t\r\t\x0e\t\x8d\x03\n\x03\n\x03\n","\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x03\n\x05","\n\x9b\n\n\x03\v\x03\v\x03\v\x03\v\x03\v","\x03\v\x03\v\x03\v\x03\v\x03\v\x03\v","\x03\v\x03\v\x03\v\x03\v\x03\v\x03\v","\x03\v\x03\v\x03\v\x03\v\x03\v\x03\v","\x03\v\x03\v\x03\v\x03\v\x03\v\x03\v","\x03\v\x05\v\xbb\n\v\x03\f\x03\f\x05\f\xbf","\n\f\x03\r\x03\r\x07\r\xc3\n\r\f\r\x0e\r\xc6\v\r\x03","\r\x03\r\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e","\x07\x0e\xcf\n\x0e\f\x0e\x0e\x0e\xd2\v\x0e\x03","\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x07","\x0e\xda\n\x0e\f\x0e\x0e\x0e\xdd\v\x0e\x03\x0e","\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x07\x0e","\xe5\n\x0e\f\x0e\x0e\x0e\xe8\v\x0e\x03\x0e\x03","\x0e\x07\x0e\xec\n\x0e\f\x0e\x0e\x0e\xef\v\x0e","\x03\x0e\x03\x0e\x03\x0e\x03\x0e\x05\x0e\xf5\n","\x0e\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x03\x0f\x05","\x0f\xfc\n\x0f\x03\x10\x03\x10\x03\x10\x07\x10","\u0101\n\x10\f\x10\x0e\x10\u0104\v\x10\x03\x10\x03","\x10\x03\x11\x03\x11\x05\x11\u010a\n\x11\x03\x11","\x03\x11\x03\x11\x03\x11\x03\x11\x05\x11\u0111\n","\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03","\x11\x05\x11\u0119\n\x11\x03\x11\x05\x11\u011c\n\x11","\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11\x03\x11","\x03\x11\x03\x11\x03\x11\x07\x11\u0127\n\x11\f\x11","\x0e\x11\u012a\v\x11\x03\x12\x03\x12\x03\x13\x03","\x13\x03\x13\x02\x03 \x14\x02\x04\x06\b\n\f\x0e",'\x10\x12\x14\x16\x18\x1a\x1c\x1e "$\x02\x06\x03',"\x02\x1c\x1d\x03\x02\x1a\x1b\x04\x02$%()\x03\x02","\x1e#\x02\u0144\x02&\x03\x02\x02\x02\x04V\x03\x02","\x02\x02\x06X\x03\x02\x02\x02\b\\\x03\x02\x02\x02","\n`\x03\x02\x02\x02\fn\x03\x02\x02\x02\x0e\x84\x03","\x02\x02\x02\x10\x8b\x03\x02\x02\x02\x12\x9a\x03","\x02\x02\x02\x14\xba\x03\x02\x02\x02\x16\xbe\x03","\x02\x02\x02\x18\xc4\x03\x02\x02\x02\x1a\xf4\x03","\x02\x02\x02\x1c\xfb\x03\x02\x02\x02\x1e\u0102\x03",'\x02\x02\x02 \u011b\x03\x02\x02\x02"\u012b\x03\x02',"\x02\x02$\u012d\x03\x02\x02\x02&*\x05\x06\x04\x02","')\x05\x04\x03\x02('\x03\x02\x02\x02),\x03\x02","\x02\x02*(\x03\x02\x02\x02*+\x03\x02\x02\x02+\x03","\x03\x02\x02\x02,*\x03\x02\x02\x02-W\x05\f\x07\x02","./\x05\x0e\b\x02/0\x05\x10\t\x0201\x07\x03\x02\x02","1W\x03\x02\x02\x0223\x05\x0e\b\x0234\x07\x03\x02","\x024W\x03\x02\x02\x0256\x07\x04\x02\x0267\x07)","\x02\x0278\x05\x18\r\x0289\x07\x05\x02\x029W\x03","\x02\x02\x02:;\x07\x04\x02\x02;<\x07)\x02\x02<=","\x07\x06\x02\x02=>\x07\x07\x02\x02>?\x05\x18\r\x02","?@\x07\x05\x02\x02@W\x03\x02\x02\x02AB\x07\x04\x02","\x02BC\x07)\x02\x02CD\x07\x06\x02\x02DE\x05\x18","\r\x02EF\x07\x07\x02\x02FG\x05\x18\r\x02GH\x07\x05","\x02\x02HW\x03\x02\x02\x02IW\x05\x12\n\x02JK\x07","\b\x02\x02KL\x07\x06\x02\x02LM\x07)\x02\x02MN\x07","\t\x02\x02NO\x07(\x02\x02OP\x07\x07\x02\x02PW\x05","\x12\n\x02QR\x07\n\x02\x02RS\x05\x16\f\x02ST\x07\x05","\x02\x02TW\x03\x02\x02\x02UW\x05\b\x05\x02V-\x03","\x02\x02\x02V.\x03\x02\x02\x02V2\x03\x02\x02\x02","V5\x03\x02\x02\x02V:\x03\x02\x02\x02VA\x03\x02\x02","\x02VI\x03\x02\x02\x02VJ\x03\x02\x02\x02VQ\x03\x02","\x02\x02VU\x03\x02\x02\x02W\x05\x03\x02\x02\x02","XY\x07\v\x02\x02YZ\x07%\x02\x02Z[\x07\x05\x02","\x02[\x07\x03\x02\x02\x02\\]\x07\f\x02\x02]^\x05","\n\x06\x02^_\x07\x05\x02\x02_\t\x03\x02\x02\x02","`a\x07+\x02\x02a\v\x03\x02\x02\x02bc\x07\r\x02","\x02cd\x07)\x02\x02de\x07\x0e\x02\x02ef\x07(\x02","\x02fg\x07\x0f\x02\x02go\x07\x05\x02\x02hi\x07\x10","\x02\x02ij\x07)\x02\x02jk\x07\x0e\x02\x02kl\x07","(\x02\x02lm\x07\x0f\x02\x02mo\x07\x05\x02\x02nb","\x03\x02\x02\x02nh\x03\x02\x02\x02o\r\x03\x02\x02","\x02pq\x07\x11\x02\x02qr\x07)\x02\x02rs\x05\x18","\r\x02st\x07\x12\x02\x02t\x85\x03\x02\x02\x02uv","\x07\x11\x02\x02vw\x07)\x02\x02wx\x07\x06\x02\x02","xy\x07\x07\x02\x02yz\x05\x18\r\x02z{\x07\x12\x02","\x02{\x85\x03\x02\x02\x02|}\x07\x11\x02\x02}~\x07",")\x02\x02~\x7f\x07\x06\x02\x02\x7f\x80\x05\x18","\r\x02\x80\x81\x07\x07\x02\x02\x81\x82\x05\x18","\r\x02\x82\x83\x07\x12\x02\x02\x83\x85\x03\x02","\x02\x02\x84p\x03\x02\x02\x02\x84u\x03\x02\x02","\x02\x84|\x03\x02\x02\x02\x85\x0f\x03\x02\x02","\x02\x86\x8c\x05\x14\v\x02\x87\x88\x07\n\x02","\x02\x88\x89\x05\x18\r\x02\x89\x8a\x07\x05\x02","\x02\x8a\x8c\x03\x02\x02\x02\x8b\x86\x03\x02\x02","\x02\x8b\x87\x03\x02\x02\x02\x8c\x8d\x03\x02\x02","\x02\x8d\x8b\x03\x02\x02\x02\x8d\x8e\x03\x02\x02","\x02\x8e\x11\x03\x02\x02\x02\x8f\x9b\x05\x14\v","\x02\x90\x91\x07\x13\x02\x02\x91\x92\x05\x1c\x0f","\x02\x92\x93\x07\x14\x02\x02\x93\x94\x05\x1c\x0f","\x02\x94\x95\x07\x05\x02\x02\x95\x9b\x03\x02\x02","\x02\x96\x97\x07\x15\x02\x02\x97\x98\x05\x1c\x0f","\x02\x98\x99\x07\x05\x02\x02\x99\x9b\x03\x02\x02","\x02\x9a\x8f\x03\x02\x02\x02\x9a\x90\x03\x02\x02","\x02\x9a\x96\x03\x02\x02\x02\x9b\x13\x03\x02\x02","\x02\x9c\x9d\x07\x16\x02\x02\x9d\x9e\x07\x06\x02","\x02\x9e\x9f\x05\x1e\x10\x02\x9f\xa0\x07\x07\x02","\x02\xa0\xa1\x05\x1c\x0f\x02\xa1\xa2\x07\x05\x02","\x02\xa2\xbb\x03\x02\x02\x02\xa3\xa4\x07\x17\x02","\x02\xa4\xa5\x05\x1c\x0f\x02\xa5\xa6\x07\x18\x02","\x02\xa6\xa7\x05\x1c\x0f\x02\xa7\xa8\x07\x05\x02","\x02\xa8\xbb\x03\x02\x02\x02\xa9\xaa\x07)\x02","\x02\xaa\xab\x05\x16\f\x02\xab\xac\x07\x05\x02","\x02\xac\xbb\x03\x02\x02\x02\xad\xae\x07)\x02","\x02\xae\xaf\x07\x06\x02\x02\xaf\xb0\x07\x07\x02","\x02\xb0\xb1\x05\x16\f\x02\xb1\xb2\x07\x05\x02","\x02\xb2\xbb\x03\x02\x02\x02\xb3\xb4\x07)\x02","\x02\xb4\xb5\x07\x06\x02\x02\xb5\xb6\x05\x1e\x10","\x02\xb6\xb7\x07\x07\x02\x02\xb7\xb8\x05\x16\f","\x02\xb8\xb9\x07\x05\x02\x02\xb9\xbb\x03\x02\x02","\x02\xba\x9c\x03\x02\x02\x02\xba\xa3\x03\x02\x02","\x02\xba\xa9\x03\x02\x02\x02\xba\xad\x03\x02\x02","\x02\xba\xb3\x03\x02\x02\x02\xbb\x15\x03\x02\x02","\x02\xbc\xbf\x05\x18\r\x02\xbd\xbf\x05\x1a\x0e","\x02\xbe\xbc\x03\x02\x02\x02\xbe\xbd\x03\x02\x02","\x02\xbf\x17\x03\x02\x02\x02\xc0\xc1\x07)\x02","\x02\xc1\xc3\x07\x18\x02\x02\xc2\xc0\x03\x02\x02","\x02\xc3\xc6\x03\x02\x02\x02\xc4\xc2\x03\x02\x02","\x02\xc4\xc5\x03\x02\x02\x02\xc5\xc7\x03\x02\x02","\x02\xc6\xc4\x03\x02\x02\x02\xc7\xc8\x07)\x02","\x02\xc8\x19\x03\x02\x02\x02\xc9\xca\x07)\x02","\x02\xca\xcb\x07\x0e\x02\x02\xcb\xcc\x07(\x02","\x02\xcc\xcd\x07\x0f\x02\x02\xcd\xcf\x07\x18\x02","\x02\xce\xc9\x03\x02\x02\x02\xcf\xd2\x03\x02\x02","\x02\xd0\xce\x03\x02\x02\x02\xd0\xd1\x03\x02\x02","\x02\xd1\xd3\x03\x02\x02\x02\xd2\xd0\x03\x02\x02","\x02\xd3\xf5\x07)\x02\x02\xd4\xd5\x07)\x02\x02","\xd5\xd6\x07\x0e\x02\x02\xd6\xd7\x07(\x02\x02","\xd7\xd8\x07\x0f\x02\x02\xd8\xda\x07\x18\x02\x02","\xd9\xd4\x03\x02\x02\x02\xda\xdd\x03\x02\x02\x02","\xdb\xd9\x03\x02\x02\x02\xdb\xdc\x03\x02\x02\x02","\xdc\xde\x03\x02\x02\x02\xdd\xdb\x03\x02\x02\x02","\xde\xdf\x07)\x02\x02\xdf\xe0\x07\x0e\x02\x02","\xe0\xe1\x07(\x02\x02\xe1\xf5\x07\x0f\x02\x02","\xe2\xe3\x07)\x02\x02\xe3\xe5\x07\x18\x02\x02","\xe4\xe2\x03\x02\x02\x02\xe5\xe8\x03\x02\x02\x02","\xe6\xe4\x03\x02\x02\x02\xe6\xe7\x03\x02\x02\x02","\xe7\xe9\x03\x02\x02\x02\xe8\xe6\x03\x02\x02\x02","\xe9\xea\x07)\x02\x02\xea\xec\x07\x18\x02\x02","\xeb\xe6\x03\x02\x02\x02\xec\xef\x03\x02\x02\x02","\xed\xeb\x03\x02\x02\x02\xed\xee\x03\x02\x02\x02","\xee\xf0\x03\x02\x02\x02\xef\xed\x03\x02\x02\x02","\xf0\xf1\x07)\x02\x02\xf1\xf2\x07\x0e\x02\x02","\xf2\xf3\x07(\x02\x02\xf3\xf5\x07\x0f\x02\x02","\xf4\xd0\x03\x02\x02\x02\xf4\xdb\x03\x02\x02\x02","\xf4\xed\x03\x02\x02\x02\xf5\x1b\x03\x02\x02\x02","\xf6\xfc\x07)\x02\x02\xf7\xf8\x07)\x02\x02\xf8","\xf9\x07\x0e\x02\x02\xf9\xfa\x07(\x02\x02\xfa","\xfc\x07\x0f\x02\x02\xfb\xf6\x03\x02\x02\x02\xfb","\xf7\x03\x02\x02\x02\xfc\x1d\x03\x02\x02\x02\xfd","\xfe\x05 \x11\x02\xfe\xff\x07\x18\x02\x02\xff","\u0101\x03\x02\x02\x02\u0100\xfd\x03\x02\x02\x02\u0101","\u0104\x03\x02\x02\x02\u0102\u0100\x03\x02\x02\x02\u0102","\u0103\x03\x02\x02\x02\u0103\u0105\x03\x02\x02\x02\u0104","\u0102\x03\x02\x02\x02\u0105\u0106\x05 \x11\x02\u0106","\x1f\x03\x02\x02\x02\u0107\u0109\b\x11\x01\x02\u0108","\u010a\t\x02\x02\x02\u0109\u0108\x03\x02\x02\x02\u0109","\u010a\x03\x02\x02\x02\u010a\u010b\x03\x02\x02\x02\u010b","\u010c\x07\x06\x02\x02\u010c\u010d\x05 \x11\x02\u010d","\u010e\x07\x07\x02\x02\u010e\u011c\x03\x02\x02\x02\u010f","\u0111\t\x02\x02\x02\u0110\u010f\x03\x02\x02\x02\u0110","\u0111\x03\x02\x02\x02\u0111\u0112\x03\x02\x02\x02\u0112","\u0113\x05$\x13\x02\u0113\u0114\x07\x06\x02\x02\u0114","\u0115\x05 \x11\x02\u0115\u0116\x07\x07\x02\x02\u0116","\u011c\x03\x02\x02\x02\u0117\u0119\t\x02\x02\x02\u0118","\u0117\x03\x02\x02\x02\u0118\u0119\x03\x02\x02\x02\u0119",'\u011a\x03\x02\x02\x02\u011a\u011c\x05"\x12\x02\u011b',"\u0107\x03\x02\x02\x02\u011b\u0110\x03\x02\x02\x02\u011b","\u0118\x03\x02\x02\x02\u011c\u0128\x03\x02\x02\x02\u011d","\u011e\f\b\x02\x02\u011e\u011f\x07\x19\x02\x02\u011f\u0127","\x05 \x11\t\u0120\u0121\f\x07\x02\x02\u0121\u0122\t\x03","\x02\x02\u0122\u0127\x05 \x11\b\u0123\u0124\f\x06\x02\x02","\u0124\u0125\t\x02\x02\x02\u0125\u0127\x05 \x11\x07\u0126","\u011d\x03\x02\x02\x02\u0126\u0120\x03\x02\x02\x02\u0126","\u0123\x03\x02\x02\x02\u0127\u012a\x03\x02\x02\x02\u0128","\u0126\x03\x02\x02\x02\u0128\u0129\x03\x02\x02\x02\u0129","!\x03\x02\x02\x02\u012a\u0128\x03\x02\x02\x02\u012b","\u012c\t\x04\x02\x02\u012c#\x03\x02\x02\x02\u012d\u012e","\t\x05\x02\x02\u012e%\x03\x02\x02\x02\x19*Vn\x84\x8b","\x8d\x9a\xba\xbe\xc4\xd0\xdb\xe6\xed\xf4\xfb\u0102","\u0109\u0110\u0118\u011b\u0126\u0128"].join(""),atn=(new antlr4.atn.ATNDeserializer).deserialize(serializedATN),decisionsToDFA=atn.decisionToState.map(function(ds,index){return new antlr4.dfa.DFA(ds,index)}),sharedContextCache=new antlr4.PredictionContextCache,literalNames=[null,"'}'","'opaque'","';'","'('","')'","'if'","'=='","'barrier'","'OPENQASM'","'include'","'qreg'","'['","']'","'creg'","'gate'","'{'","'measure'","'->'","'reset'","'U'","'CX'","','","'^'","'*'","'/'","'+'","'-'","'sin'","'cos'","'tan'","'exp'","'ln'","'sqrt'","'pi'"],symbolicNames=[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,"PI","REAL","SUBREAL","EXPREAL","INT","ID","WS","FILENAME","COMMENT","LINE_COMMENT"],ruleNames=["mainprog","statement","version","include","filename","decl","gatedecl","goplist","qop","uop","anylist","idlist","mixedlist","argument","explist","exp","atom","unaryop"];function QASMParser(input){return antlr4.Parser.call(this,input),this._interp=new antlr4.atn.ParserATNSimulator(this,atn,decisionsToDFA,sharedContextCache),this.ruleNames=ruleNames,this.literalNames=literalNames,this.symbolicNames=symbolicNames,this}function MainprogContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_mainprog,this}function StatementContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_statement,this}function VersionContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_version,this}function IncludeContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_include,this}function FilenameContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_filename,this}function DeclContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_decl,this}function GatedeclContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_gatedecl,this}function GoplistContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_goplist,this}function QopContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_qop,this}function UopContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_uop,this}function AnylistContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_anylist,this}function IdlistContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_idlist,this}function MixedlistContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_mixedlist,this}function ArgumentContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_argument,this}function ExplistContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_explist,this}function ExpContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_exp,this}function AtomContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_atom,this}function UnaryopContext(parser,parent,invokingState){return void 0===parent&&(parent=null),null==invokingState&&(invokingState=-1),antlr4.ParserRuleContext.call(this,parent,invokingState),this.parser=parser,this.ruleIndex=QASMParser.RULE_unaryop,this}(QASMParser.prototype=Object.create(antlr4.Parser.prototype)).constructor=QASMParser,Object.defineProperty(QASMParser.prototype,"atn",{get:function(){return atn}}),QASMParser.EOF=antlr4.Token.EOF,QASMParser.T__0=1,QASMParser.T__1=2,QASMParser.T__2=3,QASMParser.T__3=4,QASMParser.T__4=5,QASMParser.T__5=6,QASMParser.T__6=7,QASMParser.T__7=8,QASMParser.T__8=9,QASMParser.T__9=10,QASMParser.T__10=11,QASMParser.T__11=12,QASMParser.T__12=13,QASMParser.T__13=14,QASMParser.T__14=15,QASMParser.T__15=16,QASMParser.T__16=17,QASMParser.T__17=18,QASMParser.T__18=19,QASMParser.T__19=20,QASMParser.T__20=21,QASMParser.T__21=22,QASMParser.T__22=23,QASMParser.T__23=24,QASMParser.T__24=25,QASMParser.T__25=26,QASMParser.T__26=27,QASMParser.T__27=28,QASMParser.T__28=29,QASMParser.T__29=30,QASMParser.T__30=31,QASMParser.T__31=32,QASMParser.T__32=33,QASMParser.PI=34,QASMParser.REAL=35,QASMParser.SUBREAL=36,QASMParser.EXPREAL=37,QASMParser.INT=38,QASMParser.ID=39,QASMParser.WS=40,QASMParser.FILENAME=41,QASMParser.COMMENT=42,QASMParser.LINE_COMMENT=43,QASMParser.RULE_mainprog=0,QASMParser.RULE_statement=1,QASMParser.RULE_version=2,QASMParser.RULE_include=3,QASMParser.RULE_filename=4,QASMParser.RULE_decl=5,QASMParser.RULE_gatedecl=6,QASMParser.RULE_goplist=7,QASMParser.RULE_qop=8,QASMParser.RULE_uop=9,QASMParser.RULE_anylist=10,QASMParser.RULE_idlist=11,QASMParser.RULE_mixedlist=12,QASMParser.RULE_argument=13,QASMParser.RULE_explist=14,QASMParser.RULE_exp=15,QASMParser.RULE_atom=16,QASMParser.RULE_unaryop=17,((MainprogContext.prototype=Object.create(antlr4.ParserRuleContext.prototype)).constructor=MainprogContext).prototype.version=function(){return this.getTypedRuleContext(VersionContext,0)},MainprogContext.prototype.statement=function(i){return void 0===i&&(i=null),null===i?this.getTypedRuleContexts(StatementContext):this.getTypedRuleContext(StatementContext,i)},MainprogContext.prototype.enterRule=function(listener){listener instanceof QASMListener&&listener.enterMainprog(this)},MainprogContext.prototype.exitRule=function(listener){listener instanceof QASMListener&&listener.exitMainprog(this)},QASMParser.MainprogContext=MainprogContext,QASMParser.prototype.mainprog=function(){var localctx=new MainprogContext(this,this._ctx,this.state);this.enterRule(localctx,0,QASMParser.RULE_mainprog);var _la=0;try{for(this.enterOuterAlt(localctx,1),this.state=36,this.version(),this.state=40,this._errHandler.sync(this),_la=this._input.LA(1);0==(-32&_la)&&0!=(1<<_la&(1<wire))return!1}return!0},QuantumCircuit.prototype.isEmptyPlace=function(col,wires,usingCregs){var mx,minWire=Math.min.apply(null,wires),maxWire=Math.max.apply(null,wires);!usingCregs||maxWire<(mx=this.numQubits-1)&&(maxWire=mx);for(var allEmpty=!0,wire=minWire;wire<=maxWire;wire++)if(!this.isEmptyCell(col,wire)){allEmpty=!1;break}return allEmpty},QuantumCircuit.prototype.lastNonEmptyPlace=function(wires,usingCregs){var mx,col=this.numCols(),allEmpty=!0,minWire=Math.min.apply(null,wires),maxWire=Math.max.apply(null,wires);for(!usingCregs||maxWire<(mx=this.numQubits-1)&&(maxWire=mx);allEmpty&&col--;)for(var wire=minWire;wire<=maxWire;wire++)if(!this.isEmptyCell(col,wire)){allEmpty=!1;break}return col},QuantumCircuit.prototype.insertColumn=function(colIndex){for(var i=0;ithis.numQubits&&(this.numQubits=wire+1);this.gates.lengththis.numQubits&&(this.numQubits=wire+1);this.gates.lengthextWire&&(newExtWire=extW)}extWire=newExtWire}}extColumn++}}}}for(var circuit=new QuantumCircuit,blockCounter=0,blockIndex=0;blockIndex=command.params.length){errorMessage='Internal error: QUIL definition for gate "'+command.name+" is invalid.";if(errorCallback)return void errorCallback([{msg:errorMessage,line:lineOffset+command.line,col:command.col}]);throw new Error(errorMessage)}params[paramName]=command.params[paramIndex]}}else{if(((gateDef=gateInfo.customGate).params||[]).length!=(command.params||[]).length){errorMessage="Invalid number of params. Expected "+(gateDef.params||[]).length+" got "+(command.params||[]).length+".";if(errorCallback)return void errorCallback([{msg:errorMessage,line:lineOffset+command.line,col:command.col}]);throw new Error(errorMessage)}for(i=0;igate.wires.length||gate.wires[0]>gate.wires[1]?circuit.transformMatrix(maxWire-minWire+1,rawMatrix,targetWires):rawMatrix).map(function(row,rowIndex){0>data.offset}}}(parseInt(inst.mask),parseInt(inst.val)))){var errorMessage="Invalid classical condition.";if(errorCallback)return void errorCallback([{msg:errorMessage}]);throw new Error(errorMessage)}conditions[inst.register]=condition;break;case"measure":for(var qIndex=0;qIndexmemory)return{name:cregName,bit:memory-totalBits};totalBits+=creg.length}return null}(inst.memory[qIndex]);if(!creg){errorMessage="Invalid measurement destination.";if(errorCallback)return void errorCallback([{msg:errorMessage}]);throw new Error(errorMessage)}var options={creg:creg};this.appendGate("measure",qubit,options)}break;case"barrier":break;default:var options={params:{},condition:{}},gateName=inst.name;switch(gateName){case"iden":gateName="id"}var condition,gateDef=this.basicGates[gateName];if(!gateDef){errorMessage='Unknown gate "'+inst.name+'".';if(errorCallback)return void errorCallback([{msg:errorMessage}]);throw new Error(errorMessage)}if(gateDef.params&&gateDef.params.length){if(!inst.params||!inst.params.length||inst.params.length!=gateDef.params.length){errorMessage='Invalid number of params for gate "'+inst.name+'".';if(errorCallback)return void errorCallback([{msg:errorMessage}]);throw new Error(errorMessage)}for(var parIndex=0;parIndex',gateLabel&&(res+=''+gateLabel+""),res}function gateCircleSVG(cellX,cellY,gateName,gateLabel,selected){var centerX=cellX+options.cellWidth/2,centerY=cellY+options.cellHeight/2,gateWidth=.8*options.cellWidth,gateHeight=.8*options.cellHeight,gateX=cellX+(options.cellWidth-gateWidth)/2,gateY=cellY+(options.cellHeight-gateHeight)/2,res="";return res+='',gateLabel&&(res+=''+gateLabel+""),res}function gateNotSVG(cellX,cellY,gateName,selected){var centerX=cellX+options.cellWidth/2,centerY=cellY+options.cellHeight/2,gateWidth=.8*options.cellWidth,gateHeight=.8*options.cellHeight,gateX=cellX+(options.cellWidth-gateWidth)/2,gateY=cellY+(options.cellHeight-gateHeight)/2,res="";return res+='',res+='',res+=''}function gateGaugeSVG(gateX,gateY,gateName,selected){var x,y,radius,startAngle,endAngle,start,end,largeArcFlag,gateWidth=options.cellWidth,gateHeight=options.cellHeight,centerX=gateX+gateWidth/2,centerY=gateY+gateHeight/2,movedown=gateHeight/5,res="";return res+='',res+='',res+=''}function gateXSVG(cellX,cellY,gateName,selected){var gateWidth=.4*options.cellWidth,gateHeight=.4*options.cellHeight,gateX=cellX+(options.cellWidth-gateWidth)/2,gateY=cellY+(options.cellHeight-gateHeight)/2,res="";return res+='',res+=''}function gateDotSVG(cellX,cellY,gateName,selected){var res="";return res+=''}function gateInvertedDotSVG(cellX,cellY,gateName,selected){var res="";return res+=''}function gateSVG(gateX,gateY,gateName,gateLabel,connector,drawBox,selected){var res="";switch("box"!=connector&&drawBox&&(res+=gateBoxSVG(gateX,gateY,0,"",selected)),connector){case"box":res+=gateBoxSVG(gateX,gateY,0,gateLabel,selected);break;case"rect":res+=function(gateX,gateY,gateLabel,selected){var gateWidth=2*options.cellWidth,gateHeight=options.cellHeight,res="";return res+='',gateLabel&&(res+=''+gateLabel+""),res}(gateX,gateY,gateLabel,selected);break;case"circle":res+=gateCircleSVG(gateX,gateY,0,gateLabel,selected);break;case"not":res+=gateNotSVG(gateX,gateY,0,selected);break;case"x":res+=gateXSVG(gateX,gateY,0,selected);break;case"dot":res+=gateDotSVG(gateX,gateY,0,selected);break;case"ndot":res+=gateInvertedDotSVG(gateX,gateY,0,selected);break;case"gauge":res+=gateGaugeSVG(gateX,gateY,0,selected)}return res}function escapeHtml(str){return str.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")}if(options.gateGallery||options.gateGalleryRaw||options.customGateGallery){var gateList=[];if(options.gateGallery||options.gateGalleryRaw){var uniq=[];for(var gateName in this.basicGates){var gateLabel,connector,uniqStr,gate=this.basicGates[gateName],dinfo=JSON.parse(JSON.stringify(gate.drawingInfo||{connectors:["box"]}));dinfo.connectors&&(gateLabel=dinfo.label||gateName,connector=dinfo.connectors?dinfo.connectors[dinfo.connectors.length-1]:"box",options.gateGallery&&("x"!=connector&&"dot"!=connector||(connector="box")),uniqStr=gateLabel+"|"+connector,uniq.indexOf(uniqStr)<0&&"ccx"!=gateName&&(uniq.push(uniqStr),svg="",options.embedded||(svg+='',svg+=''),svg+='',svg+=gateSVG(0,0,0,gateLabel,connector,!!options.gateGallery,!1),svg+="",options.gateGallery?gateList.push(svg):gateList.push({name:gateName,svg:svg})))}var dotsvg="";options.embedded||(dotsvg+='',dotsvg+=''),dotsvg+='',dotsvg+=gateSVG(0,0,0,"dot","dot",!!options.gateGallery,!1),dotsvg+="",options.gateGallery?gateList.push(dotsvg):gateList.push({name:"dot",svg:dotsvg});var ndotsvg="";options.embedded||(ndotsvg+='',ndotsvg+=''),ndotsvg+='',ndotsvg+=gateSVG(0,0,0,"ndot","ndot",!!options.gateGallery,!1),ndotsvg+="",options.gateGallery?gateList.push(ndotsvg):gateList.push({name:"dot",svg:ndotsvg})}if(options.customGateGallery)for(var gateName in this.customGates){var svg="";options.embedded||(svg+='',svg+=''),svg+='',svg+=gateSVG(0,0,0,gateName,"rect",!1,!1),svg+="",gateList.push(svg)}return gateList}svg="";if(options.embedded||(svg+='',svg+=''),svg+='',options.placeholders)for(var column=0;column<=numCols;column++)for(var wire=0;wire<=this.numQubits;wire++)svg+=function(colIndex,wire){var svg="",gateWidth=options.cellWidth+options.hSpacing,gateHeight=options.cellHeight+options.vSpacing,gateX=getCellX(colIndex)-options.hSpacing,gateY=getCellY(wire)-options.vSpacing;return wire==numRows&&(gateHeight=options.vSpacing),colIndex==numCols&&(gateWidth=options.hSpacing),svg+=''}(column,wire);for(wire=0;wire|'+initSymbol+"⟩",svg+='',svg+='q'+wire+""}for(var cregName in this.cregs){svg+='0',svg+='',svg+=''+cregName+""}for(column=0;column',blackbox&&(gateX=getCellX(colIndex)-options.blackboxPaddingX,gateY=qGateY(topWire)-options.blackboxPaddingY,gateWidth=options.cellWidth+2*options.blackboxPaddingX,cLinkTopY=gateY+(gateHeight=qGateY(bottomWire)+options.cellHeight-gateY+options.blackboxPaddingY),svg+=''+(dinfo.label||gate.name)+"",svg+=''),selected&&(gateX=getCellX(colIndex)-options.selectionPaddingX,gateY=qGateY(topWire)-options.selectionPaddingY,gateWidth=options.cellWidth+2*options.selectionPaddingX,gateHeight=qGateY(bottomWire)+options.cellHeight-gateY+options.selectionPaddingY,cLinkTopY=gateY+gateHeight,svg+=''),topWire==bottomWire||blackbox||(linkX=getCellX(colIndex)+options.cellWidth/2,linkY1=getCellY(topWire)+options.cellHeight/2,linkY2=getCellY(bottomWire)+options.cellHeight/2,svg+='');var linkX,linkY1,linkY2,maxWire=Math.max.apply(null,gate.wires);return gate.wires.map(function(wire,connector){switch(dinfo.connectors[connector]){case"box":var gateX=getCellX(colIndex),gateY=getCellY(wire);svg+=gateBoxSVG(gateX,gateY,gate.name,blackbox?qubitLetter(connector,numRows):dinfo.label||gate.name,selected),blackbox||wire!=bottomWire||(cLinkTopY=gateY+options.cellHeight);break;case"circle":gateX=getCellX(colIndex),gateY=getCellY(wire);svg+=gateCircleSVG(gateX,gateY,gate.name,blackbox?qubitLetter(connector,numRows):dinfo.label||gate.name,selected),blackbox||wire!=bottomWire||(gateHeight=.8*options.cellHeight,cLinkTopY=gateY+gateHeight+(options.cellHeight-gateHeight)/2);break;case"not":var gateHeight,cellX=getCellX(colIndex),cellY=getCellY(wire);svg+=gateNotSVG(cellX,cellY,gate.name,selected),blackbox||wire!=bottomWire||(gateHeight=.8*options.cellHeight,cLinkTopY=cellY+gateHeight+(options.cellHeight-gateHeight)/2);break;case"x":cellX=getCellX(colIndex),cellY=getCellY(wire);svg+=gateXSVG(cellX,cellY,gate.name,selected),blackbox||wire!=bottomWire||(cLinkTopY=qWireY(bottomWire));break;case"dot":cellX=getCellX(colIndex),cellY=getCellY(wire);svg+=gateDotSVG(cellX,cellY,gate.name,selected),blackbox||wire!=bottomWire||(cLinkTopY=qWireY(bottomWire)+options.dotRadius);break;case"ndot":cellX=getCellX(colIndex),cellY=getCellY(wire);svg+=gateInvertedDotSVG(cellX,cellY,gate.name,selected),blackbox||wire!=bottomWire||(cLinkTopY=qWireY(bottomWire)+options.dotRadius);break;case"gauge":gateX=getCellX(colIndex),gateY=getCellY(wire);svg+=gateGaugeSVG(gateX,gateY,gate.name,selected),blackbox||wire!=bottomWire||(cLinkTopY=gateY+options.cellHeight)}if(gate.options&&gate.options.params&&wire==maxWire){var gateX=getCellX(colIndex),gateY=getCellY(wire),centerX=gateX+options.cellWidth/2,paramsStr="",paramsCount=0;for(var paramName in gate.options.params){paramsStr&&(paramsStr+=", ");var paramVal=gate.options.params[paramName];"string"==typeof paramVal&¶mVal.match(/^[\+\-]?\d*\.?\d+(?:[Ee][\+\-]?\d+)?$/)&&(paramVal=parseFloat(paramVal)),"number"==typeof paramVal&&(paramVal=math.round(paramVal,3)),paramsStr+=paramVal,paramsCount++}26'+paramsStr+""}}),"measure"==gate.name&&gate.options&&gate.options.creg&&gate.options.creg.name&&(linkX=getCellX(colIndex)+options.cellWidth/2,linkY1=cLinkTopY,linkY2=cWireY(gate.options.creg.name),svg+='',svg+='',svg+='',svg+=''+gate.options.creg.bit+""),gate.options&&gate.options.condition&&gate.options.condition.creg&&(linkX=getCellX(colIndex)+options.cellWidth/2,linkY1=cLinkTopY,linkY2=cWireY(gate.options.condition.creg),svg+='',svg+='',svg+='== '+gate.options.condition.value+""),svg+=""}(gate,column))}for(column=0;column'}(gate,column,wire))}if(options.drawBlochSpheres){var currentCol=totalCols-1;options.drawHybrid&&(currentCol-=2);for(wire=0;wire',svg+='',svg+='',svg+='
',svg+='',svg+="",svg+="
",svg+="
",svg+=""}(currentCol,wire,"qc-bloch-group","qc-bloch-canvas")}if(options.drawHybrid){var colIndex=currentCol=totalCols-2,gateX=getCellX(colIndex)+options.blackboxPaddingX,gateY=qGateY(0)+options.blackboxPaddingY,gateWidth=options.cellWidth-2*options.blackboxPaddingX,gateHeight=qGateY(numRows+numCregs-1)+options.cellHeight-gateY-options.blackboxPaddingY,centerX=gateX+gateWidth/2,centerY=gateY+gateHeight/2;cLinkTopY=gateY+gateHeight,svg+='',svg+='Cost';var gate2X=getCellX(colIndex+1)+options.blackboxPaddingX,center2X=gate2X+gateWidth/2;svg+='',svg+='',svg+='',svg+='Optimizer',svg+='';var hWireX=0,globalParamsInfo=this.findGlobalParams();if(globalParamsInfo.globalParams.length){hWireX=getCellX(globalParamsInfo.cells[0][0])+options.cellWidth+options.hSpacing/2;for(var i=0;i',svg+=''}svg+=''}else{svg+='',svg+='?'}}return svg+="
"},QuantumCircuit.prototype.exportToQiskit=function(options,exportAsGateName,circuitReplacement,insideSubmodule){var comment=(options=options||{}).comment,decompose=options.decompose,versionStr=options.versionStr,providerName=options.providerName,backendName=options.backendName,asJupyter=options.asJupyter,shots=options.shots,hybrid=options.hybrid,self=this,providerName=providerName||"Aer";(backendName=backendName||"")||"Aer"!=providerName||(backendName="qasm_simulator"),shots=shots||1024;var version=parseFloat(versionStr||"0.7");isNaN(version),void 0===hybrid&&(hybrid=!!this.options&&!!this.options.hybrid);var circuit=new QuantumCircuit;circuit.load(this.save(decompose));var qiskit="";comment&&(comment||"").split("\n").map(function(cline){1<=cline.length&&"#"!=cline[0]&&(qiskit+="# "),qiskit+=cline,qiskit+="\n"});function mathToStringHandler(node,options){if(node.isSymbolNode){if(0<=["pi","sin","cos","tan","asin","acos","atan"].indexOf(node.name))return"np."+node.name;if(0<=self.params.indexOf(node.name)&&hybrid)return"params["+self.params.indexOf(node.name)+"]"}}function adjustIdentation(addStr,ident){var str="",cfLines=addStr.split("\n"),minIdent=-1;cfLines.map(function(cfLine){var tmpIdent=cfLine.search(/\S/);0<=tmpIdent&&(minIdent<0||tmpIdent ",qasm+=gate.options.creg.name+"["+gate.options.creg.bit+"]"),qasm+=";\n"}}}return exportAsGateName&&(qasm+="}\n\n"),qasm},QuantumCircuit.prototype.exportToPyquil=function(options,exportAsGateName){var comment=(options=options||{}).comment,decompose=options.decompose,versionStr=options.versionStr,lattice=options.lattice,asQVM=options.asQVM,asJupyter=options.asJupyter,shots=options.shots,hybrid=options.hybrid,self=this,version=parseFloat(versionStr||"2.12");isNaN(version)&&(version=2.1),shots=shots||1024,void 0===hybrid&&(hybrid=!!this.options&&!!this.options.hybrid);var circuit=new QuantumCircuit;circuit.load(this.save(decompose));function mathToStringHandler(node,options){if(node.isSymbolNode){if(0<=["pi","sin","cos","tan","asin","acos","atan"].indexOf(node.name))return"np."+node.name;if(0<=self.params.indexOf(node.name)&&hybrid)return"params["+self.params.indexOf(node.name)+"]"}}function adjustIdentation(addStr,ident){var str="",cfLines=addStr.split("\n"),minIdent=-1;cfLines.map(function(cfLine){var tmpIdent=cfLine.search(/\S/);0<=tmpIdent&&(minIdent<0||tmpIdent')]\n",aqasm+=indent+" string_state = string_state[::-1]\n",aqasm+=indent+" counts[string_state] += 1\n\n",hybrid?(aqasm+=indent+"# CALCULATE COST HERE\n",(costFunction=this.options&&this.options.hybridOptions&&this.options.hybridOptions.costFunction&&this.options.hybridOptions.costFunction.python||"").trim()||(costFunction="cost = 0"),aqasm+=function(addStr,ident){var str="",cfLines=addStr.split("\n"),minIdent=-1;cfLines.map(function(cfLine){var tmpIdent=cfLine.search(/\S/);0<=tmpIdent&&(minIdent<0||tmpIdentusedWires.length){(combineItem={}).circuit=new QuantumCircuit(bounds.numQubits-usedWires.length),combineItem.wires=[];for(var i=0;i\t"+perc+"%\n"}}return s},QuantumCircuit.prototype.print=function(onlyPossible){console.log(this.stateAsString(onlyPossible))},QuantumCircuit.prototype.gotClassicalControl=function(){for(var column=0;columnsize;)this.cregs[creg].pop()}},QuantumCircuit.prototype.getCreg=function(creg){return this.cregs[creg]},QuantumCircuit.prototype.setCregBit=function(creg,cbit,value){var bit=parseInt(cbit);if(isNaN(bit))throw'Error: invalid "cbit" argument to "setCregBit" method: expected "integer" got "'+typeof cbit+'".';for(this.cregs[creg]||(this.cregs[creg]=[]);bit>=this.cregs[creg].length;)this.cregs[creg].push(0);this.cregs[creg][bit]=value?1:0},QuantumCircuit.prototype.getCregBit=function(creg,cbit){if(!this.cregs[creg])throw'Error: "getCregBit": unknown register "'+creg+'".';var bit=parseInt(cbit);if(isNaN(bit)||bit>=this.cregs[creg].length)throw'Error: "getCregBit": bit "'+cbit+'" not found.';return this.cregs[creg][bit]},QuantumCircuit.prototype.cregBase=function(creg){if(!this.cregs[creg])throw'Error: "getCregBit": unknown register "'+creg+'".';var base=0;for(var regName in this.cregs){if(regName==creg)return base;base+=this.cregs[regName].length}},QuantumCircuit.prototype.cregTotalBits=function(){var bits=0;for(var regName in this.cregs)bits+=this.cregs[regName].length;return bits},QuantumCircuit.prototype.getCregValue=function(creg){if(!this.cregs[creg])throw'Error: "getCregBit": unknown register "'+creg+'".';for(var len=this.cregs[creg].length,value=0,i=0;iMath.PI&&(params[paramName]=Math.PI-params[paramName])}),opt.params=params),"measure"==gateName?opt.creg={name:"c",bit:gateWires[0]}:options.noClassicControl||0!=Math.floor(4*Math.random())||(cregBits=this.cregTotalBits())&&(opt.condition={creg:"c",value:Math.floor(Math.random()*math.pow(2,cregBits))}),this.appendGate(gateName,gateWires,opt),gateCount++}}}},QuantumCircuit.prototype.randomUnitary=function(numQubits){var circ=new QuantumCircuit;return circ.randomCircuit(numQubits||1,8*(numQubits||1),{useGates:["rx","rz","cz"],noMeasure:!0,noReset:!0,noClassicControl:!0}),circ.circuitMatrix()},QuantumCircuit.prototype.eulerAnglesZYZ=function(inputMatrix){var eulerAngles={theta:null,phi:null,lambda:null,phase:null},coeff=math.pow(math.det(inputMatrix),-.5);eulerAngles.phase=-1*math.complex(coeff).toPolar().phi;var su_mat=math.multiply(coeff,inputMatrix);eulerAngles.theta=2*math.atan2(math.abs(su_mat[1][0]),math.abs(su_mat[0][0]));var phiplambda=2*math.complex(su_mat[1][1]).toPolar().phi,phimlamda=2*math.complex(su_mat[1][0]).toPolar().phi;return eulerAngles.phi=(phiplambda+phimlamda)/2,eulerAngles.lambda=(phiplambda-phimlamda)/2,eulerAngles},module.exports=QuantumCircuit},{"./qasm_import/QASMImport.js":1,mathjs:943}],6:[function(require,module,exports){var Token=require("./Token").Token,Lexer=require("./Lexer").Lexer,Interval=require("./IntervalSet").Interval;function TokenStream(){return this}function BufferedTokenStream(tokenSource){return TokenStream.call(this),this.tokenSource=tokenSource,this.tokens=[],this.index=-1,this.fetchedEOF=!1,this}((BufferedTokenStream.prototype=Object.create(TokenStream.prototype)).constructor=BufferedTokenStream).prototype.mark=function(){return 0},BufferedTokenStream.prototype.release=function(marker){},BufferedTokenStream.prototype.reset=function(){this.seek(0)},BufferedTokenStream.prototype.seek=function(index){this.lazyInit(),this.index=this.adjustSeekIndex(index)},BufferedTokenStream.prototype.get=function(index){return this.lazyInit(),this.tokens[index]},BufferedTokenStream.prototype.consume=function(){if(!(0<=this.index&&(this.fetchedEOF?this.index=this.tokens.length&&(stop=this.tokens.length-1);for(var i=start;i=this.tokens.length?this.tokens[this.tokens.length-1]:this.tokens[i]},BufferedTokenStream.prototype.adjustSeekIndex=function(i){return i},BufferedTokenStream.prototype.lazyInit=function(){-1===this.index&&this.setup()},BufferedTokenStream.prototype.setup=function(){this.sync(0),this.index=this.adjustSeekIndex(0)},BufferedTokenStream.prototype.setTokenSource=function(tokenSource){this.tokenSource=tokenSource,this.tokens=[],this.index=-1,this.fetchedEOF=!1},BufferedTokenStream.prototype.nextTokenOnChannel=function(i,channel){if(this.sync(i),i>=this.tokens.length)return-1;for(var token=this.tokens[i];token.channel!==this.channel;){if(token.type===Token.EOF)return-1;i+=1,this.sync(i),token=this.tokens[i]}return i},BufferedTokenStream.prototype.previousTokenOnChannel=function(i,channel){for(;0<=i&&this.tokens[i].channel!==channel;)--i;return i},BufferedTokenStream.prototype.getHiddenTokensToRight=function(tokenIndex,channel){if(void 0===channel&&(channel=-1),this.lazyInit(),tokenIndex<0||tokenIndex>=this.tokens.length)throw tokenIndex+" not in 0.."+this.tokens.length-1;var nextOnChannel=this.nextTokenOnChannel(tokenIndex+1,Lexer.DEFAULT_TOKEN_CHANNEL),from_=tokenIndex+1,to=-1===nextOnChannel?this.tokens.length-1:nextOnChannel;return this.filterForChannel(from_,to,channel)},BufferedTokenStream.prototype.getHiddenTokensToLeft=function(tokenIndex,channel){if(void 0===channel&&(channel=-1),this.lazyInit(),tokenIndex<0||tokenIndex>=this.tokens.length)throw tokenIndex+" not in 0.."+this.tokens.length-1;var prevOnChannel=this.previousTokenOnChannel(tokenIndex-1,Lexer.DEFAULT_TOKEN_CHANNEL);if(prevOnChannel===tokenIndex-1)return null;var from_=prevOnChannel+1,to=tokenIndex-1;return this.filterForChannel(from_,to,channel)},BufferedTokenStream.prototype.filterForChannel=function(left,right,channel){for(var hidden=[],i=left;i=this.tokens.length&&(stop=this.tokens.length-1);for(var s="",i=start;i=this._size)throw"cannot consume EOF";this._index+=1},InputStream.prototype.LA=function(offset){if(0===offset)return 0;offset<0&&(offset+=1);var pos=this._index+offset-1;return pos<0||pos>=this._size?Token.EOF:this.data[pos]},InputStream.prototype.LT=function(offset){return this.LA(offset)},InputStream.prototype.mark=function(){return-1},InputStream.prototype.release=function(marker){},InputStream.prototype.seek=function(_index){_index<=this._index?this._index=_index:this._index=Math.min(_index,this._size)},InputStream.prototype.getText=function(start,stop){if(stop>=this._size&&(stop=this._size-1),start>=this._size)return"";if(this.decodeToUnicodeCodePoints){for(var result="",i=start;i<=stop;i++)result+=String.fromCodePoint(this.data[i]);return result}return this.strdata.slice(start,stop+1)},InputStream.prototype.toString=function(){return this.strdata},exports.InputStream=InputStream},{"./Token":20,"./polyfills/codepointat":48,"./polyfills/fromcodepoint":49}],12:[function(require,module,exports){var Token=require("./Token").Token;function Interval(start,stop){return this.start=start,this.stop=stop,this}function IntervalSet(){this.intervals=null,this.readOnly=!1}Interval.prototype.contains=function(item){return item>=this.start&&item=r.stop?(this.intervals.pop(k+1),this.reduce(k)):l.stop>=r.start&&(this.intervals[k]=new Interval(l.start,r.stop),this.intervals.pop(k+1)))},IntervalSet.prototype.complement=function(start,stop){var result=new IntervalSet;result.addInterval(new Interval(start,stop+1));for(var i=0;ii.start&&v.stop=i.stop?(this.intervals.splice(k,1),--k):v.start"):names.push("'"+String.fromCharCode(v.start)+"'"):names.push("'"+String.fromCharCode(v.start)+"'..'"+String.fromCharCode(v.stop-1)+"'")}return 1"):names.push(v.start.toString()):names.push(v.start.toString()+".."+(v.stop-1).toString())}return 1":a===Token.EPSILON?"":literalNames[a]||symbolicNames[a]},exports.Interval=Interval,exports.IntervalSet=IntervalSet},{"./Token":20}],13:[function(require,module,exports){var Set=require("./Utils").Set,BitSet=require("./Utils").BitSet,Token=require("./Token").Token,ATNConfig=require("./atn/ATNConfig").ATNConfig,IntervalSet=(require("./IntervalSet").Interval,require("./IntervalSet").IntervalSet),RuleStopState=require("./atn/ATNState").RuleStopState,RuleTransition=require("./atn/Transition").RuleTransition,NotSetTransition=require("./atn/Transition").NotSetTransition,WildcardTransition=require("./atn/Transition").WildcardTransition,AbstractPredicateTransition=require("./atn/Transition").AbstractPredicateTransition,pc=require("./PredictionContext"),predictionContextFromRuleContext=pc.predictionContextFromRuleContext,PredictionContext=pc.PredictionContext,SingletonPredictionContext=pc.SingletonPredictionContext;function LL1Analyzer(atn){this.atn=atn}LL1Analyzer.HIT_PRED=Token.INVALID_TYPE,LL1Analyzer.prototype.getDecisionLookahead=function(s){if(null===s)return null;for(var count=s.transitions.length,look=[],alt=0;alt":"\n"===c?"\\n":"\t"===c?"\\t":"\r"===c?"\\r":c},Lexer.prototype.getCharErrorDisplay=function(c){return"'"+this.getErrorDisplayForChar(c)+"'"},Lexer.prototype.recover=function(re){this._input.LA(1)!==Token.EOF&&(re instanceof LexerNoViableAltException?this._interp.consume(this._input):this._input.consume())},exports.Lexer=Lexer},{"./CommonTokenFactory":8,"./Recognizer":18,"./Token":20,"./error/Errors":45}],15:[function(require,module,exports){var Token=require("./Token").Token,ParseTreeListener=require("./tree/Tree").ParseTreeListener,Recognizer=require("./Recognizer").Recognizer,DefaultErrorStrategy=require("./error/ErrorStrategy").DefaultErrorStrategy,ATNDeserializer=require("./atn/ATNDeserializer").ATNDeserializer,ATNDeserializationOptions=require("./atn/ATNDeserializationOptions").ATNDeserializationOptions,TerminalNode=require("./tree/Tree").TerminalNode,ErrorNode=require("./tree/Tree").ErrorNode;function TraceListener(parser){return ParseTreeListener.call(this),this.parser=parser,this}function Parser(input){return Recognizer.call(this),this._input=null,this._errHandler=new DefaultErrorStrategy,this._precedenceStack=[],this._precedenceStack.push(0),this._ctx=null,this.buildParseTrees=!0,this._tracer=null,this._parseListeners=null,this._syntaxErrors=0,this.setInputStream(input),this}((TraceListener.prototype=Object.create(ParseTreeListener.prototype)).constructor=TraceListener).prototype.enterEveryRule=function(ctx){console.log("enter "+this.parser.ruleNames[ctx.ruleIndex]+", LT(1)="+this.parser._input.LT(1).text)},TraceListener.prototype.visitTerminal=function(node){console.log("consume "+node.symbol+" rule "+this.parser.ruleNames[this.parser._ctx.ruleIndex])},TraceListener.prototype.exitEveryRule=function(ctx){console.log("exit "+this.parser.ruleNames[ctx.ruleIndex]+", LT(1)="+this.parser._input.LT(1).text)},((Parser.prototype=Object.create(Recognizer.prototype)).contructor=Parser).bypassAltsAtnCache={},Parser.prototype.reset=function(){null!==this._input&&this._input.seek(0),this._errHandler.reset(this),this._ctx=null,this._syntaxErrors=0,this.setTrace(!1),this._precedenceStack=[],this._precedenceStack.push(0),null!==this._interp&&this._interp.reset()},Parser.prototype.match=function(ttype){var t=this.getCurrentToken();return t.type===ttype?(this._errHandler.reportMatch(this),this.consume()):(t=this._errHandler.recoverInline(this),this.buildParseTrees&&-1===t.tokenIndex&&this._ctx.addErrorNode(t)),t},Parser.prototype.matchWildcard=function(){var t=this.getCurrentToken();return 0=this._precedenceStack[this._precedenceStack.length-1]},Parser.prototype.inContext=function(context){return!1},Parser.prototype.isExpectedToken=function(symbol){var atn=this._interp.atn,ctx=this._ctx,s=atn.states[this.state];if((following=atn.nextTokens(s)).contains(symbol))return!0;if(!following.contains(Token.EPSILON))return!1;for(;null!==ctx&&0<=ctx.invokingState&&following.contains(Token.EPSILON);){var following,rt=atn.states[ctx.invokingState].transitions[0];if((following=atn.nextTokens(rt.followState)).contains(symbol))return!0;ctx=ctx.parentCtx}return!(!following.contains(Token.EPSILON)||symbol!==Token.EOF)},Parser.prototype.getExpectedTokens=function(){return this._interp.atn.getExpectedTokens(this.state,this._ctx)},Parser.prototype.getExpectedTokensWithinCurrentRule=function(){var atn=this._interp.atn,s=atn.states[this.state];return atn.nextTokens(s)},Parser.prototype.getRuleIndex=function(ruleName){var ruleIndex=this.getRuleIndexMap()[ruleName];return null!==ruleIndex?ruleIndex:-1},Parser.prototype.getRuleInvocationStack=function(p){null===(p=p||null)&&(p=this._ctx);for(var stack=[];null!==p;){var ruleIndex=p.ruleIndex;ruleIndex<0?stack.push("n/a"):stack.push(this.ruleNames[ruleIndex]),p=p.parentCtx}return stack},Parser.prototype.getDFAStrings=function(){return this._interp.decisionToDFA.toString()},Parser.prototype.dumpDFA=function(){for(var seenOne=!1,i=0;i=this.children.length)return null;if(null===type)return this.children[i];for(var j=0;j=this.children.length)return null;for(var j=0;jb.returnState&&(payloads[0]=b.returnState,payloads[1]=a.returnState);var apc=new ArrayPredictionContext(parents=[singleParent,singleParent],payloads);return null!==mergeCache&&mergeCache.set(a,b,apc),apc}var payloads=[a.returnState,b.returnState],parents=[a.parentCtx,b.parentCtx];a.returnState>b.returnState&&(payloads[0]=b.returnState,payloads[1]=a.returnState,parents=[b.parentCtx,a.parentCtx]);var a_=new ArrayPredictionContext(parents,payloads);return null!==mergeCache&&mergeCache.set(a,b,a_),a_}}(a,b,rootIsWildcard,mergeCache);if(rootIsWildcard){if(a instanceof EmptyPredictionContext)return a;if(b instanceof EmptyPredictionContext)return b}return a instanceof SingletonPredictionContext&&(a=new ArrayPredictionContext([a.getParent()],[a.returnState])),b instanceof SingletonPredictionContext&&(b=new ArrayPredictionContext([b.getParent()],[b.returnState])),function(a,b,rootIsWildcard,mergeCache){if(null!==mergeCache){var previous=mergeCache.get(a,b);if(null!==previous)return previous;if(null!==(previous=mergeCache.get(b,a)))return previous}var i=0,j=0,k=0,mergedReturnStates=[],mergedParents=[];for(;i";var s=t.text;return null===s&&(s=t.type===Token.EOF?"":"<"+t.type+">"),"'"+(s=s.replace("\n","\\n").replace("\r","\\r").replace("\t","\\t"))+"'"},Recognizer.prototype.getErrorListenerDispatch=function(){return new ProxyErrorListener(this._listeners)},Recognizer.prototype.sempred=function(localctx,ruleIndex,actionIndex){return!0},Recognizer.prototype.precpred=function(localctx,precedence){return!0},Object.defineProperty(Recognizer.prototype,"state",{get:function(){return this._stateNumber},set:function(state){this._stateNumber=state}}),exports.Recognizer=Recognizer},{"./Token":20,"./error/ErrorListener":43}],19:[function(require,module,exports){var RuleNode=require("./tree/Tree").RuleNode,INVALID_INTERVAL=require("./tree/Tree").INVALID_INTERVAL,INVALID_ALT_NUMBER=require("./atn/ATN").INVALID_ALT_NUMBER;function RuleContext(parent,invokingState){return RuleNode.call(this),this.parentCtx=parent||null,this.invokingState=invokingState||-1,this}((RuleContext.prototype=Object.create(RuleNode.prototype)).constructor=RuleContext).prototype.depth=function(){for(var n=0,p=this;null!==p;)p=p.parentCtx,n+=1;return n},RuleContext.prototype.isEmpty=function(){return-1===this.invokingState},RuleContext.prototype.getSourceInterval=function(){return INVALID_INTERVAL},RuleContext.prototype.getRuleContext=function(){return this},RuleContext.prototype.getPayload=function(){return this},RuleContext.prototype.getText=function(){return 0===this.getChildCount()?"":this.children.map(function(child){return child.getText()}).join("")},RuleContext.prototype.getAltNumber=function(){return INVALID_ALT_NUMBER},RuleContext.prototype.setAltNumber=function(altNumber){},RuleContext.prototype.getChild=function(i){return null},RuleContext.prototype.getChildCount=function(){return 0},RuleContext.prototype.accept=function(visitor){return visitor.visitChildren(this)},exports.RuleContext=RuleContext;var Trees=require("./tree/Trees").Trees;RuleContext.prototype.toStringTree=function(ruleNames,recog){return Trees.toStringTree(this,ruleNames,recog)},RuleContext.prototype.toString=function(ruleNames,stop){ruleNames=ruleNames||null,stop=stop||null;for(var ri,p=this,s="[";null!==p&&p!==stop;){null===ruleNames?p.isEmpty()||(s+=p.invokingState):s+=0<=(ri=p.ruleIndex)&&ri"},set:function(text){this._text=text}}),CommonToken.prototype.toString=function(){var txt=null!==(txt=this.text)?txt.replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\t/g,"\\t"):"";return"[@"+this.tokenIndex+","+this.start+":"+this.stop+"='"+txt+"',<"+this.type+">"+(0>>16)*c1&65535)<<16)&4294967295)<<15|k1>>>17))*c2+(((k1>>>16)*c2&65535)<<16)&4294967295)<<13|h1>>>19))+((5*(h1>>>16)&65535)<<16)&4294967295))+((58964+(h1b>>>16)&65535)<<16);switch(k1=0,remainder){case 3:k1^=(255&key.charCodeAt(i+2))<<16;case 2:k1^=(255&key.charCodeAt(i+1))<<8;case 1:h1^=k1=(65535&(k1=(k1=(65535&(k1^=255&key.charCodeAt(i)))*c1+(((k1>>>16)*c1&65535)<<16)&4294967295)<<15|k1>>>17))*c2+(((k1>>>16)*c2&65535)<<16)&4294967295}return h1^=key.length,h1=2246822507*(65535&(h1^=h1>>>16))+((2246822507*(h1>>>16)&65535)<<16)&4294967295,h1=3266489909*(65535&(h1^=h1>>>13))+((3266489909*(h1>>>16)&65535)<<16)&4294967295,(h1^=h1>>>16)>>>0},Object.defineProperty(Set.prototype,"length",{get:function(){var l=0;for(var key in this.data)0===key.indexOf("hash_")&&(l+=this.data[key].length);return l}}),Set.prototype.add=function(value){var key="hash_"+this.hashFunction(value);if(key in this.data){for(var values=this.data[key],i=0;i>>17,k*=461845907,this.count=this.count+1;var hash=this.hash^k;hash=5*(hash=hash<<13|hash>>>19)+3864292196,this.hash=hash}}},Hash.prototype.finish=function(){var hash=this.hash^4*this.count;return hash^=hash>>>16,hash*=2246822507,hash^=hash>>>13,hash*=3266489909,hash^=hash>>>16},DoubleDict.prototype.get=function(a,b){var d=this[a]||null;return null!==d&&d[b]||null},DoubleDict.prototype.set=function(a,b,o){var d=this[a]||null;null===d&&(d={},this[a]=d),d[b]=o},exports.Hash=Hash,exports.Set=Set,exports.Map=Map,exports.BitSet=BitSet,exports.AltDict=AltDict,exports.DoubleDict=DoubleDict,exports.hashStuff=function(){var hash=new Hash;return hash.update.apply(arguments),hash.finish()},exports.escapeWhitespace=function(s,escapeSpaces){return s=s.replace(/\t/g,"\\t").replace(/\n/g,"\\n").replace(/\r/g,"\\r"),escapeSpaces&&(s=s.replace(/ /g,"\xb7")),s},exports.arrayToString=arrayToString,exports.titleCase=function(str){return str.replace(/\w\S*/g,function(txt){return txt.charAt(0).toUpperCase()+txt.substr(1)})},exports.equalArrays=function(a,b){if(!Array.isArray(a)||!Array.isArray(b))return!1;if(a==b)return!0;if(a.length!=b.length)return!1;for(var i=0;i=this.states.length)throw"Invalid state number.";var s=this.states[stateNumber];if(!(following=this.nextTokens(s)).contains(Token.EPSILON))return following;var expected=new IntervalSet;for(expected.addSet(following),expected.removeOne(Token.EPSILON);null!==ctx&&0<=ctx.invokingState&&following.contains(Token.EPSILON);){var rt=this.states[ctx.invokingState].transitions[0],following=this.nextTokens(rt.followState);expected.addSet(following),expected.removeOne(Token.EPSILON),ctx=ctx.parentCtx}return following.contains(Token.EPSILON)&&expected.addOne(Token.EOF),expected},ATN.INVALID_ALT_NUMBER=0,exports.ATN=ATN},{"./../IntervalSet":12,"./../LL1Analyzer":13,"./../Token":20}],23:[function(require,module,exports){var DecisionState=require("./ATNState").DecisionState,SemanticContext=require("./SemanticContext").SemanticContext,Hash=require("../Utils").Hash;function checkParams(params,isCfg){if(null===params){var result={state:null,alt:null,context:null,semanticContext:null};return isCfg&&(result.reachesIntoOuterContext=0),result}var props={};return props.state=params.state||null,props.alt=void 0===params.alt?null:params.alt,props.context=params.context||null,props.semanticContext=params.semanticContext||null,isCfg&&(props.reachesIntoOuterContext=params.reachesIntoOuterContext||0,props.precedenceFilterSuppressed=params.precedenceFilterSuppressed||!1),props}function ATNConfig(params,config){return this.checkContext(params,config),params=checkParams(params),config=checkParams(config,!0),this.state=null!==params.state?params.state:config.state,this.alt=null!==params.alt?params.alt:config.alt,this.context=null!==params.context?params.context:config.context,this.semanticContext=null!==params.semanticContext?params.semanticContext:null!==config.semanticContext?config.semanticContext:SemanticContext.NONE,this.reachesIntoOuterContext=config.reachesIntoOuterContext,this.precedenceFilterSuppressed=config.precedenceFilterSuppressed,this}function LexerATNConfig(params,config){ATNConfig.call(this,params,config);var lexerActionExecutor=params.lexerActionExecutor||null;return this.lexerActionExecutor=lexerActionExecutor||(null!==config?config.lexerActionExecutor:null),this.passedThroughNonGreedyDecision=null!==config&&this.checkNonGreedyDecision(config,this.state),this}ATNConfig.prototype.checkContext=function(params,config){null!==params.context&&void 0!==params.context||null!==config&&null!==config.context&&void 0!==config.context||(this.context=null)},ATNConfig.prototype.hashCode=function(){var hash=new Hash;return this.updateHashCode(hash),hash.finish()},ATNConfig.prototype.updateHashCode=function(hash){hash.update(this.state.stateNumber,this.alt,this.context,this.semanticContext)},ATNConfig.prototype.equals=function(other){return this===other||other instanceof ATNConfig&&(this.state.stateNumber===other.state.stateNumber&&this.alt===other.alt&&(null===this.context?null===other.context:this.context.equals(other.context))&&this.semanticContext.equals(other.semanticContext)&&this.precedenceFilterSuppressed===other.precedenceFilterSuppressed)},ATNConfig.prototype.hashCodeForConfigSet=function(){var hash=new Hash;return hash.update(this.state.stateNumber,this.alt,this.semanticContext),hash.finish()},ATNConfig.prototype.equalsForConfigSet=function(other){return this===other||other instanceof ATNConfig&&(this.state.stateNumber===other.state.stateNumber&&this.alt===other.alt&&this.semanticContext.equals(other.semanticContext))},ATNConfig.prototype.toString=function(){return"("+this.state+","+this.alt+(null!==this.context?",["+this.context.toString()+"]":"")+(this.semanticContext!==SemanticContext.NONE?","+this.semanticContext.toString():"")+(0>8&255}return byteToHex[bb[0]]+byteToHex[bb[1]]+byteToHex[bb[2]]+byteToHex[bb[3]]+"-"+byteToHex[bb[4]]+byteToHex[bb[5]]+"-"+byteToHex[bb[6]]+byteToHex[bb[7]]+"-"+byteToHex[bb[8]]+byteToHex[bb[9]]+"-"+byteToHex[bb[10]]+byteToHex[bb[11]]+byteToHex[bb[12]]+byteToHex[bb[13]]+byteToHex[bb[14]]+byteToHex[bb[15]]},ATNDeserializer.prototype.edgeFactory=function(atn,type,src,trg,arg1,arg2,arg3,sets){var target=atn.states[trg];switch(type){case Transition.EPSILON:return new EpsilonTransition(target);case Transition.RANGE:return new RangeTransition(target,0!==arg3?Token.EOF:arg1,arg2);case Transition.RULE:return new RuleTransition(atn.states[arg1],arg2,arg3,target);case Transition.PREDICATE:return new PredicateTransition(target,arg1,arg2,0!==arg3);case Transition.PRECEDENCE:return new PrecedencePredicateTransition(target,arg1);case Transition.ATOM:return new AtomTransition(target,0!==arg3?Token.EOF:arg1);case Transition.ACTION:return new ActionTransition(target,arg1,arg2,0!==arg3);case Transition.SET:return new SetTransition(target,sets[arg1]);case Transition.NOT_SET:return new NotSetTransition(target,sets[arg1]);case Transition.WILDCARD:return new WildcardTransition(target);default:throw"The specified transition type: "+type+" is not valid."}},ATNDeserializer.prototype.stateFactory=function(type,ruleIndex){var sf;if(null===this.stateFactories&&((sf=[])[ATNState.INVALID_TYPE]=null,sf[ATNState.BASIC]=function(){return new BasicState},sf[ATNState.RULE_START]=function(){return new RuleStartState},sf[ATNState.BLOCK_START]=function(){return new BasicBlockStartState},sf[ATNState.PLUS_BLOCK_START]=function(){return new PlusBlockStartState},sf[ATNState.STAR_BLOCK_START]=function(){return new StarBlockStartState},sf[ATNState.TOKEN_START]=function(){return new TokensStartState},sf[ATNState.RULE_STOP]=function(){return new RuleStopState},sf[ATNState.BLOCK_END]=function(){return new BlockEndState},sf[ATNState.STAR_LOOP_BACK]=function(){return new StarLoopbackState},sf[ATNState.STAR_LOOP_ENTRY]=function(){return new StarLoopEntryState},sf[ATNState.PLUS_LOOP_BACK]=function(){return new PlusLoopbackState},sf[ATNState.LOOP_END]=function(){return new LoopEndState},this.stateFactories=sf),type>this.stateFactories.length||null===this.stateFactories[type])throw"The specified state type "+type+" is not valid.";var s=this.stateFactories[type]();if(null!==s)return s.ruleIndex=ruleIndex,s},ATNDeserializer.prototype.lexerActionFactory=function(type,data1,data2){var af;if(null===this.actionFactories&&((af=[])[LexerActionType.CHANNEL]=function(data1,data2){return new LexerChannelAction(data1)},af[LexerActionType.CUSTOM]=function(data1,data2){return new LexerCustomAction(data1,data2)},af[LexerActionType.MODE]=function(data1,data2){return new LexerModeAction(data1)},af[LexerActionType.MORE]=function(data1,data2){return LexerMoreAction.INSTANCE},af[LexerActionType.POP_MODE]=function(data1,data2){return LexerPopModeAction.INSTANCE},af[LexerActionType.PUSH_MODE]=function(data1,data2){return new LexerPushModeAction(data1)},af[LexerActionType.SKIP]=function(data1,data2){return LexerSkipAction.INSTANCE},af[LexerActionType.TYPE]=function(data1,data2){return new LexerTypeAction(data1)},this.actionFactories=af),type>this.actionFactories.length||null===this.actionFactories[type])throw"The specified lexer action type "+type+" is not valid.";return this.actionFactories[type](data1,data2)},exports.ATNDeserializer=ATNDeserializer},{"./../IntervalSet":12,"./../Token":20,"./ATN":22,"./ATNDeserializationOptions":25,"./ATNState":28,"./ATNType":29,"./LexerAction":31,"./Transition":36}],27:[function(require,module,exports){var DFAState=require("./../dfa/DFAState").DFAState,ATNConfigSet=require("./ATNConfigSet").ATNConfigSet,getCachedPredictionContext=require("./../PredictionContext").getCachedPredictionContext;function ATNSimulator(atn,sharedContextCache){return this.atn=atn,this.sharedContextCache=sharedContextCache,this}ATNSimulator.ERROR=new DFAState(2147483647,new ATNConfigSet),ATNSimulator.prototype.getCachedContext=function(context){if(null===this.sharedContextCache)return context;return getCachedPredictionContext(context,this.sharedContextCache,{})},exports.ATNSimulator=ATNSimulator},{"./../PredictionContext":17,"./../dfa/DFAState":40,"./ATNConfigSet":24}],28:[function(require,module,exports){function ATNState(){return this.atn=null,this.stateNumber=ATNState.INVALID_STATE_NUMBER,this.stateType=null,this.ruleIndex=0,this.epsilonOnlyTransitions=!1,this.transitions=[],this.nextTokenWithinRule=null,this}function BasicState(){return ATNState.call(this),this.stateType=ATNState.BASIC,this}function DecisionState(){return ATNState.call(this),this.decision=-1,this.nonGreedy=!1,this}function BlockStartState(){return DecisionState.call(this),this.endState=null,this}function BasicBlockStartState(){return BlockStartState.call(this),this.stateType=ATNState.BLOCK_START,this}function BlockEndState(){return ATNState.call(this),this.stateType=ATNState.BLOCK_END,this.startState=null,this}function RuleStopState(){return ATNState.call(this),this.stateType=ATNState.RULE_STOP,this}function RuleStartState(){return ATNState.call(this),this.stateType=ATNState.RULE_START,this.stopState=null,this.isPrecedenceRule=!1,this}function PlusLoopbackState(){return DecisionState.call(this),this.stateType=ATNState.PLUS_LOOP_BACK,this}function PlusBlockStartState(){return BlockStartState.call(this),this.stateType=ATNState.PLUS_BLOCK_START,this.loopBackState=null,this}function StarBlockStartState(){return BlockStartState.call(this),this.stateType=ATNState.STAR_BLOCK_START,this}function StarLoopbackState(){return ATNState.call(this),this.stateType=ATNState.STAR_LOOP_BACK,this}function StarLoopEntryState(){return DecisionState.call(this),this.stateType=ATNState.STAR_LOOP_ENTRY,this.loopBackState=null,this.isPrecedenceDecision=null,this}function LoopEndState(){return ATNState.call(this),this.stateType=ATNState.LOOP_END,this.loopBackState=null,this}function TokensStartState(){return DecisionState.call(this),this.stateType=ATNState.TOKEN_START,this}ATNState.INVALID_TYPE=0,ATNState.BASIC=1,ATNState.RULE_START=2,ATNState.BLOCK_START=3,ATNState.PLUS_BLOCK_START=4,ATNState.STAR_BLOCK_START=5,ATNState.TOKEN_START=6,ATNState.RULE_STOP=7,ATNState.BLOCK_END=8,ATNState.STAR_LOOP_BACK=9,ATNState.STAR_LOOP_ENTRY=10,ATNState.PLUS_LOOP_BACK=11,ATNState.LOOP_END=12,ATNState.serializationNames=["INVALID","BASIC","RULE_START","BLOCK_START","PLUS_BLOCK_START","STAR_BLOCK_START","TOKEN_START","RULE_STOP","BLOCK_END","STAR_LOOP_BACK","STAR_LOOP_ENTRY","PLUS_LOOP_BACK","LOOP_END"],ATNState.INVALID_STATE_NUMBER=-1,ATNState.prototype.toString=function(){return this.stateNumber},ATNState.prototype.equals=function(other){return other instanceof ATNState&&this.stateNumber===other.stateNumber},ATNState.prototype.isNonGreedyExitState=function(){return!1},ATNState.prototype.addTransition=function(trans,index){void 0===index&&(index=-1),0===this.transitions.length?this.epsilonOnlyTransitions=trans.isEpsilon:this.epsilonOnlyTransitions!==trans.isEpsilon&&(this.epsilonOnlyTransitions=!1),-1===index?this.transitions.push(trans):this.transitions.splice(index,1,trans)},(BasicState.prototype=Object.create(ATNState.prototype)).constructor=BasicState,(DecisionState.prototype=Object.create(ATNState.prototype)).constructor=DecisionState,(BlockStartState.prototype=Object.create(DecisionState.prototype)).constructor=BlockStartState,(BasicBlockStartState.prototype=Object.create(BlockStartState.prototype)).constructor=BasicBlockStartState,(BlockEndState.prototype=Object.create(ATNState.prototype)).constructor=BlockEndState,(RuleStopState.prototype=Object.create(ATNState.prototype)).constructor=RuleStopState,(RuleStartState.prototype=Object.create(ATNState.prototype)).constructor=RuleStartState,(PlusLoopbackState.prototype=Object.create(DecisionState.prototype)).constructor=PlusLoopbackState,(PlusBlockStartState.prototype=Object.create(BlockStartState.prototype)).constructor=PlusBlockStartState,(StarBlockStartState.prototype=Object.create(BlockStartState.prototype)).constructor=StarBlockStartState,(StarLoopbackState.prototype=Object.create(ATNState.prototype)).constructor=StarLoopbackState,(StarLoopEntryState.prototype=Object.create(DecisionState.prototype)).constructor=StarLoopEntryState,(LoopEndState.prototype=Object.create(ATNState.prototype)).constructor=LoopEndState,(TokensStartState.prototype=Object.create(DecisionState.prototype)).constructor=TokensStartState,exports.ATNState=ATNState,exports.BasicState=BasicState,exports.DecisionState=DecisionState,exports.BlockStartState=BlockStartState,exports.BlockEndState=BlockEndState,exports.LoopEndState=LoopEndState,exports.RuleStartState=RuleStartState,exports.RuleStopState=RuleStopState,exports.TokensStartState=TokensStartState,exports.PlusLoopbackState=PlusLoopbackState,exports.StarLoopbackState=StarLoopbackState,exports.StarLoopEntryState=StarLoopEntryState,exports.PlusBlockStartState=PlusBlockStartState,exports.StarBlockStartState=StarBlockStartState,exports.BasicBlockStartState=BasicBlockStartState},{}],29:[function(require,module,exports){function ATNType(){}ATNType.LEXER=0,ATNType.PARSER=1,exports.ATNType=ATNType},{}],30:[function(require,module,exports){var Token=require("./../Token").Token,Lexer=require("./../Lexer").Lexer,ATN=require("./ATN").ATN,ATNSimulator=require("./ATNSimulator").ATNSimulator,DFAState=require("./../dfa/DFAState").DFAState,OrderedATNConfigSet=(require("./ATNConfigSet").ATNConfigSet,require("./ATNConfigSet").OrderedATNConfigSet),PredictionContext=require("./../PredictionContext").PredictionContext,SingletonPredictionContext=require("./../PredictionContext").SingletonPredictionContext,RuleStopState=require("./ATNState").RuleStopState,LexerATNConfig=require("./ATNConfig").LexerATNConfig,Transition=require("./Transition").Transition,LexerActionExecutor=require("./LexerActionExecutor").LexerActionExecutor,LexerNoViableAltException=require("./../error/Errors").LexerNoViableAltException;function resetSimState(sim){sim.index=-1,sim.line=0,sim.column=-1,sim.dfaState=null}function SimState(){return resetSimState(this),this}function LexerATNSimulator(recog,atn,decisionToDFA,sharedContextCache){return ATNSimulator.call(this,atn,sharedContextCache),this.decisionToDFA=decisionToDFA,this.recog=recog,this.startIndex=-1,this.line=1,this.column=0,this.mode=Lexer.DEFAULT_MODE,this.prevAccept=new SimState,this}SimState.prototype.reset=function(){resetSimState(this)},((LexerATNSimulator.prototype=Object.create(ATNSimulator.prototype)).constructor=LexerATNSimulator).debug=!1,LexerATNSimulator.dfa_debug=!1,LexerATNSimulator.MIN_DFA_EDGE=0,LexerATNSimulator.MAX_DFA_EDGE=127,LexerATNSimulator.match_calls=0,LexerATNSimulator.prototype.copyState=function(simulator){this.column=simulator.column,this.line=simulator.line,this.mode=simulator.mode,this.startIndex=simulator.startIndex},LexerATNSimulator.prototype.match=function(input,mode){this.match_calls+=1,this.mode=mode;var mark=input.mark();try{this.startIndex=input.index,this.prevAccept.reset();var dfa=this.decisionToDFA[mode];return null===dfa.s0?this.matchATN(input):this.execATN(input,dfa.s0)}finally{input.release(mark)}},LexerATNSimulator.prototype.reset=function(){this.prevAccept.reset(),this.startIndex=-1,this.line=1,this.column=0,this.mode=Lexer.DEFAULT_MODE},LexerATNSimulator.prototype.matchATN=function(input){var startState=this.atn.modeToStartState[this.mode];LexerATNSimulator.debug&&console.log("matchATN mode "+this.mode+" start: "+startState);var old_mode=this.mode,s0_closure=this.computeStartState(input,startState),suppressEdge=s0_closure.hasSemanticContext;s0_closure.hasSemanticContext=!1;var next=this.addDFAState(s0_closure);suppressEdge||(this.decisionToDFA[this.mode].s0=next);var predict=this.execATN(input,next);return LexerATNSimulator.debug&&console.log("DFA after matchATN: "+this.decisionToDFA[old_mode].toLexerString()),predict},LexerATNSimulator.prototype.execATN=function(input,ds0){LexerATNSimulator.debug&&console.log("start state closure="+ds0.configs),ds0.isAcceptState&&this.captureSimState(this.prevAccept,input,ds0);for(var t=input.LA(1),s=ds0;;){LexerATNSimulator.debug&&console.log("execATN loop starting closure: "+s.configs);var target=this.getExistingTargetState(s,t);if(null===target&&(target=this.computeTargetState(input,s,t)),target===ATNSimulator.ERROR)break;if(t!==Token.EOF&&this.consume(input),target.isAcceptState&&(this.captureSimState(this.prevAccept,input,target),t===Token.EOF))break;t=input.LA(1),s=target}return this.failOrAccept(this.prevAccept,input,s.configs,t)},LexerATNSimulator.prototype.getExistingTargetState=function(s,t){if(null===s.edges||t "+to+" upon "+tk),null===from_.edges&&(from_.edges=[]),from_.edges[tk-LexerATNSimulator.MIN_DFA_EDGE]=to)},LexerATNSimulator.prototype.addDFAState=function(configs){for(var proposed=new DFAState(null,configs),firstConfigWithRuleStopState=null,i=0;i"},ParserATNSimulator.prototype.getEpsilonTarget=function(config,t,collectPredicates,inContext,fullCtx,treatEofAsEpsilon){switch(t.serializationType){case Transition.RULE:return this.ruleTransition(config,t);case Transition.PRECEDENCE:return this.precedenceTransition(config,t,collectPredicates,inContext,fullCtx);case Transition.PREDICATE:return this.predTransition(config,t,collectPredicates,inContext,fullCtx);case Transition.ACTION:return this.actionTransition(config,t);case Transition.EPSILON:return new ATNConfig({state:t.target},config);case Transition.ATOM:case Transition.RANGE:case Transition.SET:return treatEofAsEpsilon&&t.matches(Token.EOF,0,1)?new ATNConfig({state:t.target},config):null;default:return null}},ParserATNSimulator.prototype.actionTransition=function(config,t){var index;return this.debug&&(index=-1==t.actionIndex?65535:t.actionIndex,console.log("ACTION edge "+t.ruleIndex+":"+index)),new ATNConfig({state:t.target},config)},ParserATNSimulator.prototype.precedenceTransition=function(config,pt,collectPredicates,inContext,fullCtx){this.debug&&(console.log("PRED (collectPredicates="+collectPredicates+") "+pt.precedence+">=_p, ctx dependent=true"),null!==this.parser&&console.log("context surrounding pred is "+Utils.arrayToString(this.parser.getRuleInvocationStack())));var currentPosition,predSucceeds,newSemCtx,c=null;return collectPredicates&&inContext?fullCtx?(currentPosition=this._input.index,this._input.seek(this._startIndex),predSucceeds=pt.getPredicate().evaluate(this.parser,this._outerContext),this._input.seek(currentPosition),predSucceeds&&(c=new ATNConfig({state:pt.target},config))):(newSemCtx=SemanticContext.andContext(config.semanticContext,pt.getPredicate()),c=new ATNConfig({state:pt.target,semanticContext:newSemCtx},config)):c=new ATNConfig({state:pt.target},config),this.debug&&console.log("config from pred transition="+c),c},ParserATNSimulator.prototype.predTransition=function(config,pt,collectPredicates,inContext,fullCtx){this.debug&&(console.log("PRED (collectPredicates="+collectPredicates+") "+pt.ruleIndex+":"+pt.predIndex+", ctx dependent="+pt.isCtxDependent),null!==this.parser&&console.log("context surrounding pred is "+Utils.arrayToString(this.parser.getRuleInvocationStack())));var currentPosition,predSucceeds,newSemCtx,c=null;return collectPredicates&&(pt.isCtxDependent&&inContext||!pt.isCtxDependent)?fullCtx?(currentPosition=this._input.index,this._input.seek(this._startIndex),predSucceeds=pt.getPredicate().evaluate(this.parser,this._outerContext),this._input.seek(currentPosition),predSucceeds&&(c=new ATNConfig({state:pt.target},config))):(newSemCtx=SemanticContext.andContext(config.semanticContext,pt.getPredicate()),c=new ATNConfig({state:pt.target,semanticContext:newSemCtx},config)):c=new ATNConfig({state:pt.target},config),this.debug&&console.log("config from pred transition="+c),c},ParserATNSimulator.prototype.ruleTransition=function(config,t){this.debug&&console.log("CALL rule "+this.getRuleName(t.target.ruleIndex)+", ctx="+config.context);var returnState=t.followState,newContext=SingletonPredictionContext.create(config.context,returnState.stateNumber);return new ATNConfig({state:t.target,context:newContext},config)},ParserATNSimulator.prototype.getConflictingAlts=function(configs){var altsets=PredictionMode.getConflictingAltSubsets(configs);return PredictionMode.getAlts(altsets)},ParserATNSimulator.prototype.getConflictingAltsOrUniqueAlt=function(configs){var conflictingAlts=null;return configs.uniqueAlt!==ATN.INVALID_ALT_NUMBER?(conflictingAlts=new BitSet).add(configs.uniqueAlt):conflictingAlts=configs.conflictingAlts,conflictingAlts},ParserATNSimulator.prototype.getTokenName=function(t){if(t===Token.EOF)return"EOF";if(null!==this.parser&&null!==this.parser.literalNames){if(!(t>=this.parser.literalNames.length&&t>=this.parser.symbolicNames.length))return(this.parser.literalNames[t]||this.parser.symbolicNames[t])+"<"+t+">";console.log(t+" ttype out of range: "+this.parser.literalNames),console.log(""+this.parser.getInputStream().getTokens())}return""+t},ParserATNSimulator.prototype.getLookaheadName=function(input){return this.getTokenName(input.LA(1))},ParserATNSimulator.prototype.dumpDeadEndConfigs=function(nvae){console.log("dead end configs: ");for(var decs=nvae.getDeadEndConfigs(),i=0;i "+to+" upon "+this.getTokenName(t)),null===to?null:(to=this.addDFAState(dfa,to),null===from_||t<-1||t>this.atn.maxTokenType||(null===from_.edges&&(from_.edges=[]),from_.edges[t+1]=to,this.debug&&(literalNames=null===this.parser?null:this.parser.literalNames,symbolicNames=null===this.parser?null:this.parser.symbolicNames,console.log("DFA=\n"+dfa.toString(literalNames,symbolicNames)))),to);var literalNames,symbolicNames},ParserATNSimulator.prototype.addDFAState=function(dfa,D){if(D==ATNSimulator.ERROR)return D;var existing=dfa.states.get(D);return null!==existing?existing:(D.stateNumber=dfa.states.length,D.configs.readOnly||(D.configs.optimizeConfigs(this),D.configs.setReadonly(!0)),dfa.states.add(D),this.debug&&console.log("adding new DFA state: "+D),D)},ParserATNSimulator.prototype.reportAttemptingFullContext=function(dfa,conflictingAlts,configs,startIndex,stopIndex){var interval;(this.debug||this.retry_debug)&&(interval=new Interval(startIndex,stopIndex+1),console.log("reportAttemptingFullContext decision="+dfa.decision+":"+configs+", input="+this.parser.getTokenStream().getText(interval))),null!==this.parser&&this.parser.getErrorListenerDispatch().reportAttemptingFullContext(this.parser,dfa,startIndex,stopIndex,conflictingAlts,configs)},ParserATNSimulator.prototype.reportContextSensitivity=function(dfa,prediction,configs,startIndex,stopIndex){var interval;(this.debug||this.retry_debug)&&(interval=new Interval(startIndex,stopIndex+1),console.log("reportContextSensitivity decision="+dfa.decision+":"+configs+", input="+this.parser.getTokenStream().getText(interval))),null!==this.parser&&this.parser.getErrorListenerDispatch().reportContextSensitivity(this.parser,dfa,startIndex,stopIndex,prediction,configs)},ParserATNSimulator.prototype.reportAmbiguity=function(dfa,D,startIndex,stopIndex,exact,ambigAlts,configs){var interval;(this.debug||this.retry_debug)&&(interval=new Interval(startIndex,stopIndex+1),console.log("reportAmbiguity "+ambigAlts+":"+configs+", input="+this.parser.getTokenStream().getText(interval))),null!==this.parser&&this.parser.getErrorListenerDispatch().reportAmbiguity(this.parser,dfa,startIndex,stopIndex,exact,ambigAlts,configs)},exports.ParserATNSimulator=ParserATNSimulator},{"./../IntervalSet":12,"./../ParserRuleContext":16,"./../PredictionContext":17,"./../RuleContext":19,"./../Token":20,"./../Utils":21,"./../dfa/DFAState":40,"./../error/Errors":45,"./ATN":22,"./ATNConfig":23,"./ATNConfigSet":24,"./ATNSimulator":27,"./ATNState":28,"./PredictionMode":34,"./SemanticContext":35,"./Transition":36}],34:[function(require,module,exports){require("./../Utils").Set;var Map=require("./../Utils").Map,BitSet=require("./../Utils").BitSet,AltDict=require("./../Utils").AltDict,ATN=require("./ATN").ATN,RuleStopState=require("./ATNState").RuleStopState,ATNConfigSet=require("./ATNConfigSet").ATNConfigSet,ATNConfig=require("./ATNConfig").ATNConfig,SemanticContext=require("./SemanticContext").SemanticContext,hashStuff=(require("../Utils").Hash,require("./../Utils").hashStuff);require("./../Utils").equalArrays;function PredictionMode(){return this}PredictionMode.SLL=0,PredictionMode.LL=1,PredictionMode.LL_EXACT_AMBIG_DETECTION=2,PredictionMode.hasSLLConflictTerminatingPrediction=function(mode,configs){if(PredictionMode.allConfigsInRuleStopStates(configs))return!0;if(mode===PredictionMode.SLL&&configs.hasSemanticContext){for(var dup=new ATNConfigSet,i=0;i=prec}?"},PrecedencePredicate.filterPrecedencePredicates=function(set){var result=[];return set.values().map(function(context){context instanceof PrecedencePredicate&&result.push(context)}),result},((AND.prototype=Object.create(SemanticContext.prototype)).constructor=AND).prototype.equals=function(other){return this===other||other instanceof AND&&this.opnds===other.opnds},AND.prototype.updateHashCode=function(hash){hash.update(this.opnds,"AND")},AND.prototype.evaluate=function(parser,outerContext){for(var i=0;i=this.start&&symbol<=this.stop},RangeTransition.prototype.toString=function(){return"'"+String.fromCharCode(this.start)+"'..'"+String.fromCharCode(this.stop)+"'"},(AbstractPredicateTransition.prototype=Object.create(Transition.prototype)).constructor=AbstractPredicateTransition,((PredicateTransition.prototype=Object.create(AbstractPredicateTransition.prototype)).constructor=PredicateTransition).prototype.matches=function(symbol,minVocabSymbol,maxVocabSymbol){return!1},PredicateTransition.prototype.getPredicate=function(){return new Predicate(this.ruleIndex,this.predIndex,this.isCtxDependent)},PredicateTransition.prototype.toString=function(){return"pred_"+this.ruleIndex+":"+this.predIndex},((ActionTransition.prototype=Object.create(Transition.prototype)).constructor=ActionTransition).prototype.matches=function(symbol,minVocabSymbol,maxVocabSymbol){return!1},ActionTransition.prototype.toString=function(){return"action_"+this.ruleIndex+":"+this.actionIndex},((SetTransition.prototype=Object.create(Transition.prototype)).constructor=SetTransition).prototype.matches=function(symbol,minVocabSymbol,maxVocabSymbol){return this.label.contains(symbol)},SetTransition.prototype.toString=function(){return this.label.toString()},((NotSetTransition.prototype=Object.create(SetTransition.prototype)).constructor=NotSetTransition).prototype.matches=function(symbol,minVocabSymbol,maxVocabSymbol){return minVocabSymbol<=symbol&&symbol<=maxVocabSymbol&&!SetTransition.prototype.matches.call(this,symbol,minVocabSymbol,maxVocabSymbol)},NotSetTransition.prototype.toString=function(){return"~"+SetTransition.prototype.toString.call(this)},((WildcardTransition.prototype=Object.create(Transition.prototype)).constructor=WildcardTransition).prototype.matches=function(symbol,minVocabSymbol,maxVocabSymbol){return minVocabSymbol<=symbol&&symbol<=maxVocabSymbol},WildcardTransition.prototype.toString=function(){return"."},((PrecedencePredicateTransition.prototype=Object.create(AbstractPredicateTransition.prototype)).constructor=PrecedencePredicateTransition).prototype.matches=function(symbol,minVocabSymbol,maxVocabSymbol){return!1},PrecedencePredicateTransition.prototype.getPredicate=function(){return new PrecedencePredicate(this.precedence)},PrecedencePredicateTransition.prototype.toString=function(){return this.precedence+" >= _p"},exports.Transition=Transition,exports.AtomTransition=AtomTransition,exports.SetTransition=SetTransition,exports.NotSetTransition=NotSetTransition,exports.RuleTransition=RuleTransition,exports.ActionTransition=ActionTransition,exports.EpsilonTransition=EpsilonTransition,exports.RangeTransition=RangeTransition,exports.WildcardTransition=WildcardTransition,exports.PredicateTransition=PredicateTransition,exports.PrecedencePredicateTransition=PrecedencePredicateTransition,exports.AbstractPredicateTransition=AbstractPredicateTransition},{"./../IntervalSet":12,"./../Token":20,"./SemanticContext":35}],37:[function(require,module,exports){exports.ATN=require("./ATN").ATN,exports.ATNDeserializer=require("./ATNDeserializer").ATNDeserializer,exports.LexerATNSimulator=require("./LexerATNSimulator").LexerATNSimulator,exports.ParserATNSimulator=require("./ParserATNSimulator").ParserATNSimulator,exports.PredictionMode=require("./PredictionMode").PredictionMode},{"./ATN":22,"./ATNDeserializer":26,"./LexerATNSimulator":30,"./ParserATNSimulator":33,"./PredictionMode":34}],38:[function(require,module,exports){var Set=require("../Utils").Set,DFAState=require("./DFAState").DFAState,StarLoopEntryState=require("../atn/ATNState").StarLoopEntryState,ATNConfigSet=require("./../atn/ATNConfigSet").ATNConfigSet,DFASerializer=require("./DFASerializer").DFASerializer,LexerDFASerializer=require("./DFASerializer").LexerDFASerializer;function DFA(atnStartState,decision){var precedenceState;return void 0===decision&&(decision=0),this.atnStartState=atnStartState,this.decision=decision,this._states=new Set,this.s0=null,this.precedenceDfa=!1,atnStartState instanceof StarLoopEntryState&&atnStartState.isPrecedenceDecision&&(this.precedenceDfa=!0,(precedenceState=new DFAState(null,new ATNConfigSet)).edges=[],precedenceState.isAcceptState=!1,precedenceState.requiresFullContext=!1,this.s0=precedenceState),this}DFA.prototype.getPrecedenceStartState=function(precedence){if(!this.precedenceDfa)throw"Only precedence DFAs may contain a precedence start state.";return!(precedence<0||precedence>=this.s0.edges.length)&&this.s0.edges[precedence]||null},DFA.prototype.setPrecedenceStartState=function(precedence,startState){if(!this.precedenceDfa)throw"Only precedence DFAs may contain a precedence start state.";precedence<0||(this.s0.edges[precedence]=startState)},DFA.prototype.setPrecedenceDfa=function(precedenceDfa){var precedenceState;this.precedenceDfa!==precedenceDfa&&(this._states=new DFAStatesSet,precedenceDfa?((precedenceState=new DFAState(null,new ATNConfigSet)).edges=[],precedenceState.isAcceptState=!1,precedenceState.requiresFullContext=!1,this.s0=precedenceState):this.s0=null,this.precedenceDfa=precedenceDfa)},Object.defineProperty(DFA.prototype,"states",{get:function(){return this._states}}),DFA.prototype.sortedStates=function(){return this._states.values().sort(function(a,b){return a.stateNumber-b.stateNumber})},DFA.prototype.toString=function(literalNames,symbolicNames){return literalNames=literalNames||null,symbolicNames=symbolicNames||null,null===this.s0?"":new DFASerializer(this,literalNames,symbolicNames).toString()},DFA.prototype.toLexerString=function(){return null===this.s0?"":new LexerDFASerializer(this).toString()},exports.DFA=DFA},{"../Utils":21,"../atn/ATNState":28,"./../atn/ATNConfigSet":24,"./DFASerializer":39,"./DFAState":40}],39:[function(require,module,exports){function DFASerializer(dfa,literalNames,symbolicNames){return this.dfa=dfa,this.literalNames=literalNames||[],this.symbolicNames=symbolicNames||[],this}function LexerDFASerializer(dfa){return DFASerializer.call(this,dfa,null),this}DFASerializer.prototype.toString=function(){if(null===this.dfa.s0)return null;for(var buf="",states=this.dfa.sortedStates(),i=0;i")).concat(this.getStateString(t))).concat("\n"))}}return 0===buf.length?null:buf},DFASerializer.prototype.getEdgeLabel=function(i){return 0===i?"EOF":null!==this.literalNames||null!==this.symbolicNames?this.literalNames[i-1]||this.symbolicNames[i-1]:String.fromCharCode(i-1)},DFASerializer.prototype.getStateString=function(s){var baseStateStr=(s.isAcceptState?":":"")+"s"+s.stateNumber+(s.requiresFullContext?"^":"");return s.isAcceptState?null!==s.predicates?baseStateStr+"=>"+s.predicates.toString():baseStateStr+"=>"+s.prediction.toString():baseStateStr},((LexerDFASerializer.prototype=Object.create(DFASerializer.prototype)).constructor=LexerDFASerializer).prototype.getEdgeLabel=function(i){return"'"+String.fromCharCode(i)+"'"},exports.DFASerializer=DFASerializer,exports.LexerDFASerializer=LexerDFASerializer},{}],40:[function(require,module,exports){var ATNConfigSet=require("./../atn/ATNConfigSet").ATNConfigSet,Utils=require("./../Utils"),Hash=Utils.Hash,Set=Utils.Set;function PredPrediction(pred,alt){return this.alt=alt,this.pred=pred,this}function DFAState(stateNumber,configs){return null===stateNumber&&(stateNumber=-1),null===configs&&(configs=new ATNConfigSet),this.stateNumber=stateNumber,this.configs=configs,this.edges=null,this.isAcceptState=!1,this.prediction=0,this.lexerActionExecutor=null,this.requiresFullContext=!1,this.predicates=null,this}PredPrediction.prototype.toString=function(){return"("+this.pred+", "+this.alt+")"},DFAState.prototype.getAltSet=function(){var alts=new Set;if(null!==this.configs)for(var i=0;i=ruleNames.length)return""+decision;var ruleName=ruleNames[ruleIndex]||null;return null===ruleName||0===ruleName.length?""+decision:decision+" ("+ruleName+")"},DiagnosticErrorListener.prototype.getConflictingAlts=function(reportedAlts,configs){if(null!==reportedAlts)return reportedAlts;for(var result=new BitSet,i=0;i":tokens.getText(new Interval(e.startToken.tokenIndex,e.offendingToken.tokenIndex)):"",msg="no viable alternative at input "+this.escapeWSAndQuote(input);recognizer.notifyErrorListeners(msg,e.offendingToken,e)},DefaultErrorStrategy.prototype.reportInputMismatch=function(recognizer,e){var msg="mismatched input "+this.getTokenErrorDisplay(e.offendingToken)+" expecting "+e.getExpectedTokens().toString(recognizer.literalNames,recognizer.symbolicNames);recognizer.notifyErrorListeners(msg,e.offendingToken,e)},DefaultErrorStrategy.prototype.reportFailedPredicate=function(recognizer,e){var msg="rule "+recognizer.ruleNames[recognizer._ctx.ruleIndex]+" "+e.message;recognizer.notifyErrorListeners(msg,e.offendingToken,e)},DefaultErrorStrategy.prototype.reportUnwantedToken=function(recognizer){var t,msg;this.inErrorRecoveryMode(recognizer)||(this.beginErrorCondition(recognizer),t=recognizer.getCurrentToken(),msg="extraneous input "+this.getTokenErrorDisplay(t)+" expecting "+this.getExpectedTokens(recognizer).toString(recognizer.literalNames,recognizer.symbolicNames),recognizer.notifyErrorListeners(msg,t,null))},DefaultErrorStrategy.prototype.reportMissingToken=function(recognizer){var t,msg;this.inErrorRecoveryMode(recognizer)||(this.beginErrorCondition(recognizer),t=recognizer.getCurrentToken(),msg="missing "+this.getExpectedTokens(recognizer).toString(recognizer.literalNames,recognizer.symbolicNames)+" at "+this.getTokenErrorDisplay(t),recognizer.notifyErrorListeners(msg,t,null))},DefaultErrorStrategy.prototype.recoverInline=function(recognizer){var matchedSymbol=this.singleTokenDeletion(recognizer);if(null!==matchedSymbol)return recognizer.consume(),matchedSymbol;if(this.singleTokenInsertion(recognizer))return this.getMissingSymbol(recognizer);throw new InputMismatchException(recognizer)},DefaultErrorStrategy.prototype.singleTokenInsertion=function(recognizer){var currentSymbolType=recognizer.getTokenStream().LA(1),atn=recognizer._interp.atn,next=atn.states[recognizer.state].transitions[0].target;return!!atn.nextTokens(next,recognizer._ctx).contains(currentSymbolType)&&(this.reportMissingToken(recognizer),!0)},DefaultErrorStrategy.prototype.singleTokenDeletion=function(recognizer){var nextTokenType=recognizer.getTokenStream().LA(2);if(this.getExpectedTokens(recognizer).contains(nextTokenType)){this.reportUnwantedToken(recognizer),recognizer.consume();var matchedSymbol=recognizer.getCurrentToken();return this.reportMatch(recognizer),matchedSymbol}return null},DefaultErrorStrategy.prototype.getMissingSymbol=function(recognizer){var currentSymbol=recognizer.getCurrentToken(),expectedTokenType=this.getExpectedTokens(recognizer).first(),tokenText=expectedTokenType===Token.EOF?"":"",current=currentSymbol,lookback=recognizer.getTokenStream().LT(-1);return current.type===Token.EOF&&null!==lookback&&(current=lookback),recognizer.getTokenFactory().create(current.source,expectedTokenType,tokenText,Token.DEFAULT_CHANNEL,-1,-1,current.line,current.column)},DefaultErrorStrategy.prototype.getExpectedTokens=function(recognizer){return recognizer.getExpectedTokens()},DefaultErrorStrategy.prototype.getTokenErrorDisplay=function(t){if(null===t)return"";var s=t.text;return null===s&&(s=t.type===Token.EOF?"":"<"+t.type+">"),this.escapeWSAndQuote(s)},DefaultErrorStrategy.prototype.escapeWSAndQuote=function(s){return"'"+(s=(s=(s=s.replace(/\n/g,"\\n")).replace(/\r/g,"\\r")).replace(/\t/g,"\\t"))+"'"},DefaultErrorStrategy.prototype.getErrorRecoverySet=function(recognizer){for(var atn=recognizer._interp.atn,ctx=recognizer._ctx,recoverSet=new IntervalSet;null!==ctx&&0<=ctx.invokingState;){var rt=atn.states[ctx.invokingState].transitions[0],follow=atn.nextTokens(rt.followState);recoverSet.addSet(follow),ctx=ctx.parentCtx}return recoverSet.removeOne(Token.EPSILON),recoverSet},DefaultErrorStrategy.prototype.consumeUntil=function(recognizer,set){for(var ttype=recognizer.getTokenStream().LA(1);ttype!==Token.EOF&&!set.contains(ttype);)recognizer.consume(),ttype=recognizer.getTokenStream().LA(1)},((BailErrorStrategy.prototype=Object.create(DefaultErrorStrategy.prototype)).constructor=BailErrorStrategy).prototype.recover=function(recognizer,e){for(var context=recognizer._ctx;null!==context;)context.exception=e,context=context.parentCtx;throw new ParseCancellationException(e)},BailErrorStrategy.prototype.recoverInline=function(recognizer){this.recover(recognizer,new InputMismatchException(recognizer))},BailErrorStrategy.prototype.sync=function(recognizer){},exports.BailErrorStrategy=BailErrorStrategy,exports.DefaultErrorStrategy=DefaultErrorStrategy},{"./../IntervalSet":12,"./../Token":20,"./../atn/ATNState":28,"./Errors":45}],45:[function(require,module,exports){var PredicateTransition=require("./../atn/Transition").PredicateTransition;function RecognitionException(params){return Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,RecognitionException):(new Error).stack,this.message=params.message,this.recognizer=params.recognizer,this.input=params.input,this.ctx=params.ctx,this.offendingToken=null,this.offendingState=-1,null!==this.recognizer&&(this.offendingState=this.recognizer.state),this}function LexerNoViableAltException(lexer,input,startIndex,deadEndConfigs){return RecognitionException.call(this,{message:"",recognizer:lexer,input:input,ctx:null}),this.startIndex=startIndex,this.deadEndConfigs=deadEndConfigs,this}function NoViableAltException(recognizer,input,startToken,offendingToken,deadEndConfigs,ctx){ctx=ctx||recognizer._ctx,offendingToken=offendingToken||recognizer.getCurrentToken(),startToken=startToken||recognizer.getCurrentToken(),input=input||recognizer.getInputStream(),RecognitionException.call(this,{message:"",recognizer:recognizer,input:input,ctx:ctx}),this.deadEndConfigs=deadEndConfigs,this.startToken=startToken,this.offendingToken=offendingToken}function InputMismatchException(recognizer){RecognitionException.call(this,{message:"",recognizer:recognizer,input:recognizer.getInputStream(),ctx:recognizer._ctx}),this.offendingToken=recognizer.getCurrentToken()}function FailedPredicateException(recognizer,predicate,message){RecognitionException.call(this,{message:this.formatMessage(predicate,message||null),recognizer:recognizer,input:recognizer.getInputStream(),ctx:recognizer._ctx});var trans=recognizer._interp.atn.states[recognizer.state].transitions[0];return trans instanceof PredicateTransition?(this.ruleIndex=trans.ruleIndex,this.predicateIndex=trans.predIndex):(this.ruleIndex=0,this.predicateIndex=0),this.predicate=predicate,this.offendingToken=recognizer.getCurrentToken(),this}function ParseCancellationException(){return Error.call(this),Error.captureStackTrace(this,ParseCancellationException),this}((RecognitionException.prototype=Object.create(Error.prototype)).constructor=RecognitionException).prototype.getExpectedTokens=function(){return null!==this.recognizer?this.recognizer.atn.getExpectedTokens(this.offendingState,this.ctx):null},RecognitionException.prototype.toString=function(){return this.message},((LexerNoViableAltException.prototype=Object.create(RecognitionException.prototype)).constructor=LexerNoViableAltException).prototype.toString=function(){var symbol="";return 0<=this.startIndex&&this.startIndex>10),lowSurrogate=codePoint%1024+56320,codeUnits.push(highSurrogate,lowSurrogate)),(index+1==length||16384":this.symbol.text},((ErrorNodeImpl.prototype=Object.create(TerminalNodeImpl.prototype)).constructor=ErrorNodeImpl).prototype.isErrorNode=function(){return!0},ErrorNodeImpl.prototype.accept=function(visitor){return visitor.visitErrorNode(this)},ParseTreeWalker.prototype.walk=function(listener,t){if(t instanceof ErrorNode||void 0!==t.isErrorNode&&t.isErrorNode())listener.visitErrorNode(t);else if(t instanceof TerminalNode)listener.visitTerminal(t);else{this.enterRule(listener,t);for(var i=0;ibaseOut-1&&(void 0===arr[j+1]&&(arr[j+1]=0),arr[j+1]+=arr[j]/baseOut|0,arr[j]%=baseOut)}return arr.reverse()}P.absoluteValue=P.abs=function(){var x=new this.constructor(this);return x.s<0&&(x.s=1),finalise(x)},P.ceil=function(){return finalise(new this.constructor(this),this.e+1,2)},P.comparedTo=P.cmp=function(y){var i,j,xdL,ydL,x=this,xd=x.d,yd=(y=new x.constructor(y)).d,xs=x.s,ys=y.s;if(!xd||!yd)return xs&&ys?xs!==ys?xs:xd===yd?0:!xd^xs<0?1:-1:NaN;if(!xd[0]||!yd[0])return xd[0]?xs:yd[0]?-ys:0;if(xs!==ys)return xs;if(x.e!==y.e)return x.e>y.e^xs<0?1:-1;for(i=0,j=(xdL=xd.length)<(ydL=yd.length)?xdL:ydL;iyd[i]^xs<0?1:-1;return xdL===ydL?0:ydLthis.d.length-2},P.isNaN=function(){return!this.s},P.isNegative=P.isNeg=function(){return this.s<0},P.isPositive=P.isPos=function(){return 0k&&(k=x.e+1)):k=NaN,k},P.round=function(){var x=this,Ctor=x.constructor;return finalise(new Ctor(x),x.e+1,Ctor.rounding)},P.sine=P.sin=function(){var pr,rm,x=this,Ctor=x.constructor;return x.isFinite()?x.isZero()?new Ctor(x):(pr=Ctor.precision,rm=Ctor.rounding,Ctor.precision=pr+Math.max(x.e,x.sd())+LOG_BASE,Ctor.rounding=1,x=function(Ctor,x){var k,len=x.d.length;if(len<3)return taylorSeries(Ctor,2,x,x);k=16<(k=1.4*Math.sqrt(len))?16:0|k,x=x.times(1/tinyPow(5,k)),x=taylorSeries(Ctor,2,x,x);for(var sin2_x,d5=new Ctor(5),d16=new Ctor(16),d20=new Ctor(20);k--;)sin2_x=x.times(x),x=x.times(d5.plus(sin2_x.times(d16.times(sin2_x).minus(d20))));return x}(Ctor,toLessThanHalfPi(Ctor,x)),Ctor.precision=pr,Ctor.rounding=rm,finalise(2=y.d.length-1&&(k=yn<0?-yn:yn)<=9007199254740991)return r=intPow(Ctor,x,k,pr),y.s<0?new Ctor(1).div(r):finalise(r,pr,rm);if((s=x.s)<0){if(eCtor.maxE+1||e=Ctor.toExpPos):(checkInt32(sd,1,MAX_DIGITS),void 0===rm?rm=Ctor.rounding:checkInt32(rm,0,8),finiteToString(x=finalise(new Ctor(x),sd,rm),sd<=x.e||x.e<=Ctor.toExpNeg,sd));return x.isNeg()&&!x.isZero()?"-"+str:str},P.toSignificantDigits=P.toSD=function(sd,rm){var Ctor=this.constructor;return void 0===sd?(sd=Ctor.precision,rm=Ctor.rounding):(checkInt32(sd,1,MAX_DIGITS),void 0===rm?rm=Ctor.rounding:checkInt32(rm,0,8)),finalise(new Ctor(this),sd,rm)},P.toString=function(){var x=this,Ctor=x.constructor,str=finiteToString(x,x.e<=Ctor.toExpNeg||x.e>=Ctor.toExpPos);return x.isNeg()&&!x.isZero()?"-"+str:str},P.truncated=P.trunc=function(){return finalise(new this.constructor(this),this.e+1,1)},P.valueOf=P.toJSON=function(){var x=this,Ctor=x.constructor,str=finiteToString(x,x.e<=Ctor.toExpNeg||x.e>=Ctor.toExpPos);return x.isNeg()?"-"+str:str};var divide=function(x,y,pr,rm,dp,base){var cmp,e,i,k,logBase,more,prod,prodL,q,qd,rem,remL,rem0,sd,t,xi,xL,yd0,yL,yz,Ctor=x.constructor,sign=x.s==y.s?1:-1,xd=x.d,yd=y.d;if(!(xd&&xd[0]&&yd&&yd[0]))return new Ctor(x.s&&y.s&&(xd?!yd||xd[0]!=yd[0]:yd)?xd&&0==xd[0]||!yd?0*sign:sign/0:NaN);for(e=base?(logBase=1,x.e-y.e):(base=BASE,logBase=LOG_BASE,mathfloor(x.e/logBase)-mathfloor(y.e/logBase)),yL=yd.length,xL=xd.length,qd=(q=new Ctor(sign)).d=[],i=0;yd[i]==(xd[i]||0);i++);if(yd[i]>(xd[i]||0)&&e--,null==pr?(sd=pr=Ctor.precision,rm=Ctor.rounding):sd=dp?pr+(x.e-y.e)+1:pr,sd<0)qd.push(1),more=!0;else{if(sd=sd/logBase+2|0,i=0,1==yL){for(yd=yd[k=0],sd++;(i=base/2&&++yd0;k=0,(cmp=compare(yd,rem,yL,remL))<0?(rem0=rem[0],yL!=remL&&(rem0=rem0*base+(rem[1]||0)),1<(k=rem0/yd0|0)?(base<=k&&(k=base-1),1==(cmp=compare(prod=multiplyInteger(yd,k,base),rem,prodL=prod.length,remL=rem.length))&&(k--,subtract(prod,yLb[i]?1:-1;break}return r}function subtract(a,b,aL,base){for(var i=0;aL--;)a[aL]-=i,i=a[aL]Ctor.maxE?(x.d=null,x.e=NaN):x.ex.constructor.maxE?(x.d=null,x.e=NaN):x.ebase-1;)xd[sd]=0,sd||(++e,xd.unshift(1));for(len=xd.length;!xd[len-1];--len);for(i=0,str="";ilen)for(e-=len;e--;)str+="0";else elen&&(arr.length=len,1)}function abs(x){return new this(x).abs()}function acos(x){return new this(x).acos()}function acosh(x){return new this(x).acosh()}function add(x,y){return new this(x).plus(y)}function asin(x){return new this(x).asin()}function asinh(x){return new this(x).asinh()}function atan(x){return new this(x).atan()}function atanh(x){return new this(x).atanh()}function atan2(y,x){y=new this(y),x=new this(x);var r,pr=this.precision,rm=this.rounding,wpr=pr+4;return y.s&&x.s?y.d||x.d?!x.d||y.isZero()?(r=x.s<0?getPi(this,pr,rm):new this(0)).s=y.s:!y.d||x.isZero()?(r=getPi(this,wpr,1).times(.5)).s=y.s:r=x.s<0?(this.precision=wpr,this.rounding=1,r=this.atan(divide(y,x,wpr,1)),x=getPi(this,wpr,1),this.precision=pr,this.rounding=rm,y.s<0?r.minus(x):r.plus(x)):this.atan(divide(y,x,wpr,1)):(r=getPi(this,wpr,1).times(0Decimal.maxE?(x.e=NaN,x.d=null):v.e=key.length&&runningStr.slice(0,key.length)===key&&(result+=escapes[escapeKeys[index]],runningStr=runningStr.slice(key.length,runningStr.length),specialCharFound=!0)}),specialCharFound||(result+=runningStr.slice(0,1),runningStr=runningStr.slice(1,runningStr.length))}();return result}},{}],57:[function(require,module,exports){!function(root){"use strict";var P={s:1,n:0,d:1};function createError(name){function errorConstructor(){var temp=Error.apply(this,arguments);temp.name=this.name=name,this.stack=temp.stack,this.message=temp.message}function IntermediateInheritor(){}return IntermediateInheritor.prototype=Error.prototype,errorConstructor.prototype=new IntermediateInheritor,errorConstructor}var DivisionByZero=Fraction.DivisionByZero=createError("DivisionByZero"),InvalidParameter=Fraction.InvalidParameter=createError("InvalidParameter");function assign(n,s){return isNaN(n=parseInt(n,10))&&throwInvalidParam(),n*s}function throwInvalidParam(){throw new InvalidParameter}var parse=function(p1,p2){var M,n=0,d=1,s=1,v=0,w=0,x=0,y=1,z=1,A=0,B=1,C=1,D=1,N=1e7;if(null!=p1)if(void 0!==p2)s=(n=p1)*(d=p2);else switch(typeof p1){case"object":"d"in p1&&"n"in p1?(n=p1.n,d=p1.d,"s"in p1&&(n*=p1.s)):0 in p1?(n=p1[0],1 in p1&&(d=p1[1])):throwInvalidParam(),s=n*d;break;case"number":if(p1<0&&(p1=-(s=p1)),p1%1==0)n=p1;else if(0>=1)1&e&&(r=r*b%m);return r}(10,len,d),t=0;t<300;t++){if(rem1===rem2)return t;rem1=10*rem1%d,rem2=10*rem2%d}return 0}function gcd(a,b){if(!a)return b;if(!b)return a;for(;;){if(!(a%=b))return b;if(!(b%=a))return a}}function Fraction(a,b){if(!(this instanceof Fraction))return new Fraction(a,b);parse(a,b),a=Fraction.REDUCE?gcd(P.d,P.n):1,this.s=P.s,this.n=P.n/a,this.d=P.d/a}Fraction.REDUCE=1,Fraction.prototype={s:1,n:0,d:1,abs:function(){return new Fraction(this.n,this.d)},neg:function(){return new Fraction(-this.s*this.n,this.d)},add:function(a,b){return parse(a,b),new Fraction(this.s*this.n*P.d+P.s*this.d*P.n,this.d*P.d)},sub:function(a,b){return parse(a,b),new Fraction(this.s*this.n*P.d-P.s*this.d*P.n,this.d*P.d)},mul:function(a,b){return parse(a,b),new Fraction(this.s*P.s*this.n*P.n,this.d*P.d)},div:function(a,b){return parse(a,b),new Fraction(this.s*P.s*this.n*P.d,this.d*P.n)},clone:function(){return new Fraction(this)},mod:function(a,b){return isNaN(this.n)||isNaN(this.d)?new Fraction(NaN):void 0===a?new Fraction(this.s*this.n%this.d,1):(parse(a,b),0===P.n&&0===this.d&&Fraction(0,0),new Fraction(this.s*(P.d*this.n)%(P.n*this.d),P.d*this.d))},gcd:function(a,b){return parse(a,b),new Fraction(gcd(P.n,this.n)*gcd(P.d,this.d),P.d*this.d)},lcm:function(a,b){return parse(a,b),0===P.n&&0===this.n?new Fraction:new Fraction(P.n*this.n,gcd(P.n,this.n)*gcd(P.d,this.d))},ceil:function(places){return places=Math.pow(10,places||0),isNaN(this.n)||isNaN(this.d)?new Fraction(NaN):new Fraction(Math.ceil(places*this.s*this.n/this.d),places)},floor:function(places){return places=Math.pow(10,places||0),isNaN(this.n)||isNaN(this.d)?new Fraction(NaN):new Fraction(Math.floor(places*this.s*this.n/this.d),places)},round:function(places){return places=Math.pow(10,places||0),isNaN(this.n)||isNaN(this.d)?new Fraction(NaN):new Fraction(Math.round(places*this.s*this.n/this.d),places)},inverse:function(){return new Fraction(this.s*this.d,this.n)},pow:function(m){return m<0?new Fraction(Math.pow(this.s*this.d,-m),Math.pow(this.n,-m)):new Fraction(Math.pow(this.s*this.n,m),Math.pow(this.d,m))},equals:function(a,b){return parse(a,b),this.s*this.n*P.d==P.s*P.n*this.d},compare:function(a,b){parse(a,b);var t=this.s*this.n*P.d-P.s*P.n*this.d;return(015 significant digits to BigNumber (value: "+x+"). Use function bignumber(x) to convert to BigNumber.");return new BigNumber(x)}},{from:"number",to:"Complex",convert:function(x){return Complex||throwNoComplex(x),new Complex(x,0)}},{from:"number",to:"string",convert:function(x){return x+""}},{from:"BigNumber",to:"Complex",convert:function(x){return Complex||throwNoComplex(x),new Complex(x.toNumber(),0)}},{from:"Fraction",to:"BigNumber",convert:function(){throw new TypeError("Cannot implicitly convert a Fraction to BigNumber or vice versa. Use function bignumber(x) to convert to BigNumber or fraction(x) to convert to Fraction.")}},{from:"Fraction",to:"Complex",convert:function(x){return Complex||throwNoComplex(x),new Complex(x.valueOf(),0)}},{from:"number",to:"Fraction",convert:function(x){Fraction||throwNoFraction(x);var f=new Fraction(x);if(f.valueOf()!==x)throw new TypeError("Cannot implicitly convert a number to a Fraction when there will be a loss of precision (value: "+x+"). Use function fraction(x) to convert to Fraction.");return f}},{from:"string",to:"number",convert:function(x){var n=Number(x);if(isNaN(n))throw new Error('Cannot convert "'+x+'" to a number');return n}},{from:"string",to:"BigNumber",convert:function(x){BigNumber||throwNoBignumber(x);try{return new BigNumber(x)}catch(err){throw new Error('Cannot convert "'+x+'" to BigNumber')}}},{from:"string",to:"Fraction",convert:function(x){Fraction||throwNoFraction(x);try{return new Fraction(x)}catch(err){throw new Error('Cannot convert "'+x+'" to Fraction')}}},{from:"string",to:"Complex",convert:function(x){Complex||throwNoComplex(x);try{return new Complex(x)}catch(err){throw new Error('Cannot convert "'+x+'" to Complex')}}},{from:"boolean",to:"number",convert:function(x){return+x}},{from:"boolean",to:"BigNumber",convert:function(x){return BigNumber||throwNoBignumber(x),new BigNumber(+x)}},{from:"boolean",to:"Fraction",convert:function(x){return Fraction||throwNoFraction(x),new Fraction(+x)}},{from:"boolean",to:"string",convert:function(x){return String(x)}},{from:"Array",to:"Matrix",convert:function(array){return DenseMatrix||function(){throw new Error("Cannot convert array into a Matrix: no class 'DenseMatrix' provided")}(),new DenseMatrix(array)}},{from:"Matrix",to:"Array",convert:function(matrix){return matrix.valueOf()}}],typed});function throwNoBignumber(x){throw new Error("Cannot convert value ".concat(x," into a BigNumber: no class 'BigNumber' provided"))}function throwNoComplex(x){throw new Error("Cannot convert value ".concat(x," into a Complex number: no class 'Complex' provided"))}function throwNoFraction(x){throw new Error("Cannot convert value ".concat(x," into a Fraction, no class 'Fraction' provided."))}exports.createTyped=createTyped},{"../../utils/factory":931,"../../utils/is":933,"../../utils/number":937,"typed-function":946}],66:[function(require,module,exports){"use strict";function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}Object.defineProperty(exports,"__esModule",{value:!0}),exports.all=void 0;var allFactories=function(obj){if(obj&&obj.__esModule)return obj;if(null===obj||"object"!==_typeof(obj)&&"function"!=typeof obj)return{default:obj};var cache=_getRequireWildcardCache();if(cache&&cache.has(obj))return cache.get(obj);var newObj={},hasPropertyDescriptor=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var key in obj){var desc;Object.prototype.hasOwnProperty.call(obj,key)&&((desc=hasPropertyDescriptor?Object.getOwnPropertyDescriptor(obj,key):null)&&(desc.get||desc.set)?Object.defineProperty(newObj,key,desc):newObj[key]=obj[key])}newObj.default=obj,cache&&cache.set(obj,newObj);return newObj}(require("../factoriesAny"));function _getRequireWildcardCache(){if("function"!=typeof WeakMap)return null;var cache=new WeakMap;return _getRequireWildcardCache=function(){return cache},cache}exports.all=allFactories},{"../factoriesAny":658}],67:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.config=void 0;var _config=require("../core/config"),_config2=require("../core/function/config");function _extends(){return(_extends=Object.assign||function(target){for(var i=1;i=this.max?this.message="Index out of range ("+this.index+" > "+(this.max-1)+")":this.message="Index out of range ("+this.index+")",this.stack=(new Error).stack}Object.defineProperty(exports,"__esModule",{value:!0}),((exports.IndexError=IndexError).prototype=new RangeError).constructor=RangeError,IndexError.prototype.name="IndexError",IndexError.prototype.isIndexError=!0},{}],401:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createHelpClass=void 0;var _is=require("../utils/is"),_object=require("../utils/object"),_string=require("../utils/string"),dependencies=["parse"],createHelpClass=(0,require("../utils/factory").factory)("Help",dependencies,function(_ref){var parse=_ref.parse;function Help(doc){if(!(this instanceof Help))throw new SyntaxError("Constructor must be called with the new operator");if(!doc)throw new Error('Argument "doc" missing');this.doc=doc}return Help.prototype.type="Help",Help.prototype.isHelp=!0,Help.prototype.toString=function(){var doc=this.doc||{},desc="\n";if(doc.name&&(desc+="Name: "+doc.name+"\n\n"),doc.category&&(desc+="Category: "+doc.category+"\n\n"),doc.description&&(desc+="Description:\n "+doc.description+"\n\n"),doc.syntax&&(desc+="Syntax:\n "+doc.syntax.join("\n ")+"\n\n"),doc.examples){desc+="Examples:\n";for(var scope={},i=0;i1, -1 when x<0, and 0 when x=0.",examples:["sign(3.5)","sign(-4.2)","sign(0)"],seealso:["abs"]}},{}],474:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sqrtDocs=void 0;exports.sqrtDocs={name:"sqrt",category:"Arithmetic",syntax:["sqrt(x)"],description:"Compute the square root value. If x = y * y, then y is the square root of x.",examples:["sqrt(25)","5 * 5","sqrt(-1)"],seealso:["square","sqrtm","multiply","nthRoot","nthRoots","pow"]}},{}],475:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sqrtmDocs=void 0;exports.sqrtmDocs={name:"sqrtm",category:"Arithmetic",syntax:["sqrtm(x)"],description:"Calculate the principal square root of a square matrix. The principal square root matrix `X` of another matrix `A` is such that `X * X = A`.",examples:["sqrtm([[1, 2], [3, 4]])"],seealso:["sqrt","abs","square","multiply"]}},{}],476:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.squareDocs=void 0;exports.squareDocs={name:"square",category:"Arithmetic",syntax:["square(x)"],description:"Compute the square of a value. The square of x is x * x.",examples:["square(3)","sqrt(9)","3^2","3 * 3"],seealso:["multiply","pow","sqrt","cube"]}},{}],477:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.subtractDocs=void 0;exports.subtractDocs={name:"subtract",category:"Operators",syntax:["x - y","subtract(x, y)"],description:"subtract two values.",examples:["a = 5.3 - 2","a + 2","2/3 - 1/6","2 * 3 - 3","2.1 km - 500m"],seealso:["add"]}},{}],478:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.unaryMinusDocs=void 0;exports.unaryMinusDocs={name:"unaryMinus",category:"Operators",syntax:["-x","unaryMinus(x)"],description:"Inverse the sign of a value. Converts booleans and strings to numbers.",examples:["-4.5","-(-5.6)",'-"22"'],seealso:["add","subtract","unaryPlus"]}},{}],479:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.unaryPlusDocs=void 0;exports.unaryPlusDocs={name:"unaryPlus",category:"Operators",syntax:["+x","unaryPlus(x)"],description:"Converts booleans and strings to numbers.",examples:["+true",'+"2"'],seealso:["add","subtract","unaryMinus"]}},{}],480:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.xgcdDocs=void 0;exports.xgcdDocs={name:"xgcd",category:"Arithmetic",syntax:["xgcd(a, b)"],description:"Calculate the extended greatest common divisor for two values. The result is an array [d, x, y] with 3 entries, where d is the greatest common divisor, and d = x * a + y * b.",examples:["xgcd(8, 12)","gcd(8, 12)","xgcd(36163, 21199)"],seealso:["gcd","lcm"]}},{}],481:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.bitAndDocs=void 0;exports.bitAndDocs={name:"bitAnd",category:"Bitwise",syntax:["x & y","bitAnd(x, y)"],description:"Bitwise AND operation. Performs the logical AND operation on each pair of the corresponding bits of the two given values by multiplying them. If both bits in the compared position are 1, the bit in the resulting binary representation is 1, otherwise, the result is 0",examples:["5 & 3","bitAnd(53, 131)","[1, 12, 31] & 42"],seealso:["bitNot","bitOr","bitXor","leftShift","rightArithShift","rightLogShift"]}},{}],482:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.bitNotDocs=void 0;exports.bitNotDocs={name:"bitNot",category:"Bitwise",syntax:["~x","bitNot(x)"],description:"Bitwise NOT operation. Performs a logical negation on each bit of the given value. Bits that are 0 become 1, and those that are 1 become 0.",examples:["~1","~2","bitNot([2, -3, 4])"],seealso:["bitAnd","bitOr","bitXor","leftShift","rightArithShift","rightLogShift"]}},{}],483:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.bitOrDocs=void 0;exports.bitOrDocs={name:"bitOr",category:"Bitwise",syntax:["x | y","bitOr(x, y)"],description:"Bitwise OR operation. Performs the logical inclusive OR operation on each pair of corresponding bits of the two given values. The result in each position is 1 if the first bit is 1 or the second bit is 1 or both bits are 1, otherwise, the result is 0.",examples:["5 | 3","bitOr([1, 2, 3], 4)"],seealso:["bitAnd","bitNot","bitXor","leftShift","rightArithShift","rightLogShift"]}},{}],484:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.bitXorDocs=void 0;exports.bitXorDocs={name:"bitXor",category:"Bitwise",syntax:["bitXor(x, y)"],description:"Bitwise XOR operation, exclusive OR. Performs the logical exclusive OR operation on each pair of corresponding bits of the two given values. The result in each position is 1 if only the first bit is 1 or only the second bit is 1, but will be 0 if both are 0 or both are 1.",examples:["bitOr(1, 2)","bitXor([2, 3, 4], 4)"],seealso:["bitAnd","bitNot","bitOr","leftShift","rightArithShift","rightLogShift"]}},{}],485:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.leftShiftDocs=void 0;exports.leftShiftDocs={name:"leftShift",category:"Bitwise",syntax:["x << y","leftShift(x, y)"],description:"Bitwise left logical shift of a value x by y number of bits.",examples:["4 << 1","8 >> 1"],seealso:["bitAnd","bitNot","bitOr","bitXor","rightArithShift","rightLogShift"]}},{}],486:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.rightArithShiftDocs=void 0;exports.rightArithShiftDocs={name:"rightArithShift",category:"Bitwise",syntax:["x >> y","rightArithShift(x, y)"],description:"Bitwise right arithmetic shift of a value x by y number of bits.",examples:["8 >> 1","4 << 1","-12 >> 2"],seealso:["bitAnd","bitNot","bitOr","bitXor","leftShift","rightLogShift"]}},{}],487:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.rightLogShiftDocs=void 0;exports.rightLogShiftDocs={name:"rightLogShift",category:"Bitwise",syntax:["x >>> y","rightLogShift(x, y)"],description:"Bitwise right logical shift of a value x by y number of bits.",examples:["8 >>> 1","4 << 1","-12 >>> 2"],seealso:["bitAnd","bitNot","bitOr","bitXor","leftShift","rightArithShift"]}},{}],488:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.bellNumbersDocs=void 0;exports.bellNumbersDocs={name:"bellNumbers",category:"Combinatorics",syntax:["bellNumbers(n)"],description:"The Bell Numbers count the number of partitions of a set. A partition is a pairwise disjoint subset of S whose union is S. `bellNumbers` only takes integer arguments. The following condition must be enforced: n >= 0.",examples:["bellNumbers(3)","bellNumbers(8)"],seealso:["stirlingS2"]}},{}],489:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.catalanDocs=void 0;exports.catalanDocs={name:"catalan",category:"Combinatorics",syntax:["catalan(n)"],description:"The Catalan Numbers enumerate combinatorial structures of many different types. catalan only takes integer arguments. The following condition must be enforced: n >= 0.",examples:["catalan(3)","catalan(8)"],seealso:["bellNumbers"]}},{}],490:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.compositionDocs=void 0;exports.compositionDocs={name:"composition",category:"Combinatorics",syntax:["composition(n, k)"],description:"The composition counts of n into k parts. composition only takes integer arguments. The following condition must be enforced: k <= n.",examples:["composition(5, 3)"],seealso:["combinations"]}},{}],491:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.stirlingS2Docs=void 0;exports.stirlingS2Docs={name:"stirlingS2",category:"Combinatorics",syntax:["stirlingS2(n, k)"],description:"he Stirling numbers of the second kind, counts the number of ways to partition a set of n labelled objects into k nonempty unlabelled subsets. `stirlingS2` only takes integer arguments. The following condition must be enforced: k <= n. If n = k or k = 1, then s(n,k) = 1.",examples:["stirlingS2(5, 3)"],seealso:["bellNumbers"]}},{}],492:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.argDocs=void 0;exports.argDocs={name:"arg",category:"Complex",syntax:["arg(x)"],description:"Compute the argument of a complex value. If x = a+bi, the argument is computed as atan2(b, a).",examples:["arg(2 + 2i)","atan2(3, 2)","arg(2 + 3i)"],seealso:["re","im","conj","abs"]}},{}],493:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.conjDocs=void 0;exports.conjDocs={name:"conj",category:"Complex",syntax:["conj(x)"],description:"Compute the complex conjugate of a complex value. If x = a+bi, the complex conjugate is a-bi.",examples:["conj(2 + 3i)","conj(2 - 3i)","conj(-5.2i)"],seealso:["re","im","abs","arg"]}},{}],494:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.imDocs=void 0;exports.imDocs={name:"im",category:"Complex",syntax:["im(x)"],description:"Get the imaginary part of a complex number.",examples:["im(2 + 3i)","re(2 + 3i)","im(-5.2i)","im(2.4)"],seealso:["re","conj","abs","arg"]}},{}],495:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.reDocs=void 0;exports.reDocs={name:"re",category:"Complex",syntax:["re(x)"],description:"Get the real part of a complex number.",examples:["re(2 + 3i)","im(2 + 3i)","re(-5.2i)","re(2.4)"],seealso:["im","conj","abs","arg"]}},{}],496:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.evaluateDocs=void 0;exports.evaluateDocs={name:"evaluate",category:"Expression",syntax:["evaluate(expression)","evaluate([expr1, expr2, expr3, ...])"],description:"Evaluate an expression or an array with expressions.",examples:['evaluate("2 + 3")','evaluate("sqrt(" + 4 + ")")'],seealso:[]}},{}],497:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.helpDocs=void 0;exports.helpDocs={name:"help",category:"Expression",syntax:["help(object)","help(string)"],description:"Display documentation on a function or data type.",examples:["help(sqrt)",'help("complex")'],seealso:[]}},{}],498:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.distanceDocs=void 0;exports.distanceDocs={name:"distance",category:"Geometry",syntax:["distance([x1, y1], [x2, y2])","distance([[x1, y1], [x2, y2]])"],description:"Calculates the Euclidean distance between two points.",examples:["distance([0,0], [4,4])","distance([[0,0], [4,4]])"],seealso:[]}},{}],499:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.intersectDocs=void 0;exports.intersectDocs={name:"intersect",category:"Geometry",syntax:["intersect(expr1, expr2, expr3, expr4)","intersect(expr1, expr2, expr3)"],description:"Computes the intersection point of lines and/or planes.",examples:["intersect([0, 0], [10, 10], [10, 0], [0, 10])","intersect([1, 0, 1], [4, -2, 2], [1, 1, 1, 6])"],seealso:[]}},{}],500:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.andDocs=void 0;exports.andDocs={name:"and",category:"Logical",syntax:["x and y","and(x, y)"],description:"Logical and. Test whether two values are both defined with a nonzero/nonempty value.",examples:["true and false","true and true","2 and 4"],seealso:["not","or","xor"]}},{}],501:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.notDocs=void 0;exports.notDocs={name:"not",category:"Logical",syntax:["not x","not(x)"],description:"Logical not. Flips the boolean value of given argument.",examples:["not true","not false","not 2","not 0"],seealso:["and","or","xor"]}},{}],502:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.orDocs=void 0;exports.orDocs={name:"or",category:"Logical",syntax:["x or y","or(x, y)"],description:"Logical or. Test if at least one value is defined with a nonzero/nonempty value.",examples:["true or false","false or false","0 or 4"],seealso:["not","and","xor"]}},{}],503:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.xorDocs=void 0;exports.xorDocs={name:"xor",category:"Logical",syntax:["x xor y","xor(x, y)"],description:"Logical exclusive or, xor. Test whether one and only one value is defined with a nonzero/nonempty value.",examples:["true xor false","false xor false","true xor true","0 xor 4"],seealso:["not","and","or"]}},{}],504:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.columnDocs=void 0;exports.columnDocs={name:"column",category:"Matrix",syntax:["column(x, index)"],description:"Return a column from a matrix or array.",examples:["A = [[1, 2], [3, 4]]","column(A, 1)","column(A, 2)"],seealso:["row"]}},{}],505:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.concatDocs=void 0;exports.concatDocs={name:"concat",category:"Matrix",syntax:["concat(A, B, C, ...)","concat(A, B, C, ..., dim)"],description:"Concatenate matrices. By default, the matrices are concatenated by the last dimension. The dimension on which to concatenate can be provided as last argument.",examples:["A = [1, 2; 5, 6]","B = [3, 4; 7, 8]","concat(A, B)","concat(A, B, 1)","concat(A, B, 2)"],seealso:["det","diag","identity","inv","ones","range","size","squeeze","subset","trace","transpose","zeros"]}},{}],506:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.crossDocs=void 0;exports.crossDocs={name:"cross",category:"Matrix",syntax:["cross(A, B)"],description:"Calculate the cross product for two vectors in three dimensional space.",examples:["cross([1, 1, 0], [0, 1, 1])","cross([3, -3, 1], [4, 9, 2])","cross([2, 3, 4], [5, 6, 7])"],seealso:["multiply","dot"]}},{}],507:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.ctransposeDocs=void 0;exports.ctransposeDocs={name:"ctranspose",category:"Matrix",syntax:["x'","ctranspose(x)"],description:"Complex Conjugate and Transpose a matrix",examples:["a = [1, 2, 3; 4, 5, 6]","a'","ctranspose(a)"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","subset","trace","zeros"]}},{}],508:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.detDocs=void 0;exports.detDocs={name:"det",category:"Matrix",syntax:["det(x)"],description:"Calculate the determinant of a matrix",examples:["det([1, 2; 3, 4])","det([-2, 2, 3; -1, 1, 3; 2, 0, -1])"],seealso:["concat","diag","identity","inv","ones","range","size","squeeze","subset","trace","transpose","zeros"]}},{}],509:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.diagDocs=void 0;exports.diagDocs={name:"diag",category:"Matrix",syntax:["diag(x)","diag(x, k)"],description:"Create a diagonal matrix or retrieve the diagonal of a matrix. When x is a vector, a matrix with the vector values on the diagonal will be returned. When x is a matrix, a vector with the diagonal values of the matrix is returned. When k is provided, the k-th diagonal will be filled in or retrieved, if k is positive, the values are placed on the super diagonal. When k is negative, the values are placed on the sub diagonal.",examples:["diag(1:3)","diag(1:3, 1)","a = [1, 2, 3; 4, 5, 6; 7, 8, 9]","diag(a)"],seealso:["concat","det","identity","inv","ones","range","size","squeeze","subset","trace","transpose","zeros"]}},{}],510:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.dotDocs=void 0;exports.dotDocs={name:"dot",category:"Matrix",syntax:["dot(A, B)","A * B"],description:"Calculate the dot product of two vectors. The dot product of A = [a1, a2, a3, ..., an] and B = [b1, b2, b3, ..., bn] is defined as dot(A, B) = a1 * b1 + a2 * b2 + a3 * b3 + ... + an * bn",examples:["dot([2, 4, 1], [2, 2, 3])","[2, 4, 1] * [2, 2, 3]"],seealso:["multiply","cross"]}},{}],511:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.eigsDocs=void 0;exports.eigsDocs={name:"eigs",category:"Matrix",syntax:["eigs(x)"],description:"Calculate the eigenvalues and eigenvectors of a real symmetric matrix",examples:["eigs([[5, 2.3], [2.3, 1]])"],seealso:["inv"]}},{}],512:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.filterDocs=void 0;exports.filterDocs={name:"filter",category:"Matrix",syntax:["filter(x, test)"],description:"Filter items in a matrix.",examples:["isPositive(x) = x > 0","filter([6, -2, -1, 4, 3], isPositive)","filter([6, -2, 0, 1, 0], x != 0)"],seealso:["sort","map","forEach"]}},{}],513:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.flattenDocs=void 0;exports.flattenDocs={name:"flatten",category:"Matrix",syntax:["flatten(x)"],description:"Flatten a multi dimensional matrix into a single dimensional matrix.",examples:["a = [1, 2, 3; 4, 5, 6]","size(a)","b = flatten(a)","size(b)"],seealso:["concat","resize","size","squeeze"]}},{}],514:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.forEachDocs=void 0;exports.forEachDocs={name:"forEach",category:"Matrix",syntax:["forEach(x, callback)"],description:"Iterates over all elements of a matrix/array, and executes the given callback function.",examples:["forEach([1, 2, 3], function(val) { console.log(val) })"],seealso:["map","sort","filter"]}},{}],515:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getMatrixDataTypeDocs=void 0;exports.getMatrixDataTypeDocs={name:"getMatrixDataType",category:"Matrix",syntax:["getMatrixDataType(x)"],description:'Find the data type of all elements in a matrix or array, for example "number" if all items are a number and "Complex" if all values are complex numbers. If a matrix contains more than one data type, it will return "mixed".',examples:["getMatrixDataType([1, 2, 3])","getMatrixDataType([[5 cm], [2 inch]])",'getMatrixDataType([1, "text"])',"getMatrixDataType([1, bignumber(4)])"],seealso:["matrix","sparse","typeOf"]}},{}],516:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.identityDocs=void 0;exports.identityDocs={name:"identity",category:"Matrix",syntax:["identity(n)","identity(m, n)","identity([m, n])"],description:"Returns the identity matrix with size m-by-n. The matrix has ones on the diagonal and zeros elsewhere.",examples:["identity(3)","identity(3, 5)","a = [1, 2, 3; 4, 5, 6]","identity(size(a))"],seealso:["concat","det","diag","inv","ones","range","size","squeeze","subset","trace","transpose","zeros"]}},{}],517:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.invDocs=void 0;exports.invDocs={name:"inv",category:"Matrix",syntax:["inv(x)"],description:"Calculate the inverse of a matrix",examples:["inv([1, 2; 3, 4])","inv(4)","1 / 4"],seealso:["concat","det","diag","identity","ones","range","size","squeeze","subset","trace","transpose","zeros"]}},{}],518:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.kronDocs=void 0;exports.kronDocs={name:"kron",category:"Matrix",syntax:["kron(x, y)"],description:"Calculates the kronecker product of 2 matrices or vectors.",examples:["kron([[1, 0], [0, 1]], [[1, 2], [3, 4]])","kron([1,1], [2,3,4])"],seealso:["multiply","dot","cross"]}},{}],519:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.mapDocs=void 0;exports.mapDocs={name:"map",category:"Matrix",syntax:["map(x, callback)"],description:"Create a new matrix or array with the results of the callback function executed on each entry of the matrix/array.",examples:["map([1, 2, 3], square)"],seealso:["filter","forEach"]}},{}],520:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.onesDocs=void 0;exports.onesDocs={name:"ones",category:"Matrix",syntax:["ones(m)","ones(m, n)","ones(m, n, p, ...)","ones([m])","ones([m, n])","ones([m, n, p, ...])"],description:"Create a matrix containing ones.",examples:["ones(3)","ones(3, 5)","ones([2,3]) * 4.5","a = [1, 2, 3; 4, 5, 6]","ones(size(a))"],seealso:["concat","det","diag","identity","inv","range","size","squeeze","subset","trace","transpose","zeros"]}},{}],521:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.partitionSelectDocs=void 0;exports.partitionSelectDocs={name:"partitionSelect",category:"Matrix",syntax:["partitionSelect(x, k)","partitionSelect(x, k, compare)"],description:"Partition-based selection of an array or 1D matrix. Will find the kth smallest value, and mutates the input array. Uses Quickselect.",examples:["partitionSelect([5, 10, 1], 2)",'partitionSelect(["C", "B", "A", "D"], 1)'],seealso:["sort"]}},{}],522:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.rangeDocs=void 0;exports.rangeDocs={name:"range",category:"Type",syntax:["start:end","start:step:end","range(start, end)","range(start, end, step)","range(string)"],description:"Create a range. Lower bound of the range is included, upper bound is excluded.",examples:["1:5","3:-1:-3","range(3, 7)","range(0, 12, 2)",'range("4:10")',"a = [1, 2, 3, 4; 5, 6, 7, 8]","a[1:2, 1:2]"],seealso:["concat","det","diag","identity","inv","ones","size","squeeze","subset","trace","transpose","zeros"]}},{}],523:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.reshapeDocs=void 0;exports.reshapeDocs={name:"reshape",category:"Matrix",syntax:["reshape(x, sizes)"],description:"Reshape a multi dimensional array to fit the specified dimensions.",examples:["reshape([1, 2, 3, 4, 5, 6], [2, 3])","reshape([[1, 2], [3, 4]], [1, 4])","reshape([[1, 2], [3, 4]], [4])"],seealso:["size","squeeze","resize"]}},{}],524:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.resizeDocs=void 0;exports.resizeDocs={name:"resize",category:"Matrix",syntax:["resize(x, size)","resize(x, size, defaultValue)"],description:"Resize a matrix.",examples:["resize([1,2,3,4,5], [3])","resize([1,2,3], [5])","resize([1,2,3], [5], -1)","resize(2, [2, 3])",'resize("hello", [8], "!")'],seealso:["size","subset","squeeze","reshape"]}},{}],525:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.rowDocs=void 0;exports.rowDocs={name:"row",category:"Matrix",syntax:["row(x, index)"],description:"Return a row from a matrix or array.",examples:["A = [[1, 2], [3, 4]]","row(A, 1)","row(A, 2)"],seealso:["column"]}},{}],526:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sizeDocs=void 0;exports.sizeDocs={name:"size",category:"Matrix",syntax:["size(x)"],description:"Calculate the size of a matrix.",examples:["size(2.3)",'size("hello world")',"a = [1, 2; 3, 4; 5, 6]","size(a)","size(1:6)"],seealso:["concat","det","diag","identity","inv","ones","range","squeeze","subset","trace","transpose","zeros"]}},{}],527:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sortDocs=void 0;exports.sortDocs={name:"sort",category:"Matrix",syntax:["sort(x)","sort(x, compare)"],description:'Sort the items in a matrix. Compare can be a string "asc", "desc", "natural", or a custom sort function.',examples:["sort([5, 10, 1])",'sort(["C", "B", "A", "D"])',"sortByLength(a, b) = size(a)[1] - size(b)[1]",'sort(["Langdon", "Tom", "Sara"], sortByLength)','sort(["10", "1", "2"], "natural")'],seealso:["map","filter","forEach"]}},{}],528:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.squeezeDocs=void 0;exports.squeezeDocs={name:"squeeze",category:"Matrix",syntax:["squeeze(x)"],description:"Remove inner and outer singleton dimensions from a matrix.",examples:["a = zeros(3,2,1)","size(squeeze(a))","b = zeros(1,1,3)","size(squeeze(b))"],seealso:["concat","det","diag","identity","inv","ones","range","size","subset","trace","transpose","zeros"]}},{}],529:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.subsetDocs=void 0;exports.subsetDocs={name:"subset",category:"Matrix",syntax:["value(index)","value(index) = replacement","subset(value, [index])","subset(value, [index], replacement)"],description:"Get or set a subset of a matrix or string. Indexes are one-based. Both the ranges lower-bound and upper-bound are included.",examples:["d = [1, 2; 3, 4]","e = []","e[1, 1:2] = [5, 6]","e[2, :] = [7, 8]","f = d * e","f[2, 1]","f[:, 1]"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","trace","transpose","zeros"]}},{}],530:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.traceDocs=void 0;exports.traceDocs={name:"trace",category:"Matrix",syntax:["trace(A)"],description:"Calculate the trace of a matrix: the sum of the elements on the main diagonal of a square matrix.",examples:["A = [1, 2, 3; -1, 2, 3; 2, 0, 3]","trace(A)"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","subset","transpose","zeros"]}},{}],531:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.transposeDocs=void 0;exports.transposeDocs={name:"transpose",category:"Matrix",syntax:["x'","transpose(x)"],description:"Transpose a matrix",examples:["a = [1, 2, 3; 4, 5, 6]","a'","transpose(a)"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","subset","trace","zeros"]}},{}],532:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.zerosDocs=void 0;exports.zerosDocs={name:"zeros",category:"Matrix",syntax:["zeros(m)","zeros(m, n)","zeros(m, n, p, ...)","zeros([m])","zeros([m, n])","zeros([m, n, p, ...])"],description:"Create a matrix containing zeros.",examples:["zeros(3)","zeros(3, 5)","a = [1, 2, 3; 4, 5, 6]","zeros(size(a))"],seealso:["concat","det","diag","identity","inv","ones","range","size","squeeze","subset","trace","transpose"]}},{}],533:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.combinationsDocs=void 0;exports.combinationsDocs={name:"combinations",category:"Probability",syntax:["combinations(n, k)"],description:"Compute the number of combinations of n items taken k at a time",examples:["combinations(7, 5)"],seealso:["combinationsWithRep","permutations","factorial"]}},{}],534:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.combinationsWithRepDocs=void 0;exports.combinationsWithRepDocs={name:"combinationsWithRep",category:"Probability",syntax:["combinationsWithRep(n, k)"],description:"Compute the number of combinations of n items taken k at a time with replacements.",examples:["combinationsWithRep(7, 5)"],seealso:["combinations","permutations","factorial"]}},{}],535:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.factorialDocs=void 0;exports.factorialDocs={name:"factorial",category:"Probability",syntax:["n!","factorial(n)"],description:"Compute the factorial of a value",examples:["5!","5 * 4 * 3 * 2 * 1","3!"],seealso:["combinations","combinationsWithRep","permutations","gamma"]}},{}],536:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.gammaDocs=void 0;exports.gammaDocs={name:"gamma",category:"Probability",syntax:["gamma(n)"],description:"Compute the gamma function. For small values, the Lanczos approximation is used, and for large values the extended Stirling approximation.",examples:["gamma(4)","3!","gamma(1/2)","sqrt(pi)"],seealso:["factorial"]}},{}],537:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.kldivergenceDocs=void 0;exports.kldivergenceDocs={name:"kldivergence",category:"Probability",syntax:["kldivergence(x, y)"],description:"Calculate the Kullback-Leibler (KL) divergence between two distributions.",examples:["kldivergence([0.7,0.5,0.4], [0.2,0.9,0.5])"],seealso:[]}},{}],538:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.multinomialDocs=void 0;exports.multinomialDocs={name:"multinomial",category:"Probability",syntax:["multinomial(A)"],description:"Multinomial Coefficients compute the number of ways of picking a1, a2, ..., ai unordered outcomes from `n` possibilities. multinomial takes one array of integers as an argument. The following condition must be enforced: every ai > 0.",examples:["multinomial([1, 2, 1])"],seealso:["combinations","factorial"]}},{}],539:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.permutationsDocs=void 0;exports.permutationsDocs={name:"permutations",category:"Probability",syntax:["permutations(n)","permutations(n, k)"],description:"Compute the number of permutations of n items taken k at a time",examples:["permutations(5)","permutations(5, 3)"],seealso:["combinations","combinationsWithRep","factorial"]}},{}],540:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.pickRandomDocs=void 0;exports.pickRandomDocs={name:"pickRandom",category:"Probability",syntax:["pickRandom(array)","pickRandom(array, number)","pickRandom(array, weights)","pickRandom(array, number, weights)","pickRandom(array, weights, number)"],description:"Pick a random entry from a given array.",examples:["pickRandom(0:10)","pickRandom([1, 3, 1, 6])","pickRandom([1, 3, 1, 6], 2)","pickRandom([1, 3, 1, 6], [2, 3, 2, 1])","pickRandom([1, 3, 1, 6], 2, [2, 3, 2, 1])","pickRandom([1, 3, 1, 6], [2, 3, 2, 1], 2)"],seealso:["random","randomInt"]}},{}],541:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.randomDocs=void 0;exports.randomDocs={name:"random",category:"Probability",syntax:["random()","random(max)","random(min, max)","random(size)","random(size, max)","random(size, min, max)"],description:"Return a random number.",examples:["random()","random(10, 20)","random([2, 3])"],seealso:["pickRandom","randomInt"]}},{}],542:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.randomIntDocs=void 0;exports.randomIntDocs={name:"randomInt",category:"Probability",syntax:["randomInt(max)","randomInt(min, max)","randomInt(size)","randomInt(size, max)","randomInt(size, min, max)"],description:"Return a random integer number",examples:["randomInt(10, 20)","randomInt([2, 3], 10)"],seealso:["pickRandom","random"]}},{}],543:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.compareDocs=void 0;exports.compareDocs={name:"compare",category:"Relational",syntax:["compare(x, y)"],description:"Compare two values. Returns 1 when x > y, -1 when x < y, and 0 when x == y.",examples:["compare(2, 3)","compare(3, 2)","compare(2, 2)","compare(5cm, 40mm)","compare(2, [1, 2, 3])"],seealso:["equal","unequal","smaller","smallerEq","largerEq","compareNatural","compareText"]}},{}],544:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.compareNaturalDocs=void 0;exports.compareNaturalDocs={name:"compareNatural",category:"Relational",syntax:["compareNatural(x, y)"],description:"Compare two values of any type in a deterministic, natural way. Returns 1 when x > y, -1 when x < y, and 0 when x == y.",examples:["compareNatural(2, 3)","compareNatural(3, 2)","compareNatural(2, 2)","compareNatural(5cm, 40mm)",'compareNatural("2", "10")',"compareNatural(2 + 3i, 2 + 4i)","compareNatural([1, 2, 4], [1, 2, 3])","compareNatural([1, 5], [1, 2, 3])","compareNatural([1, 2], [1, 2])","compareNatural({a: 2}, {a: 4})"],seealso:["equal","unequal","smaller","smallerEq","largerEq","compare","compareText"]}},{}],545:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.compareTextDocs=void 0;exports.compareTextDocs={name:"compareText",category:"Relational",syntax:["compareText(x, y)"],description:"Compare two strings lexically. Comparison is case sensitive. Returns 1 when x > y, -1 when x < y, and 0 when x == y.",examples:['compareText("B", "A")','compareText("A", "B")','compareText("A", "A")','compareText("2", "10")','compare("2", "10")',"compare(2, 10)",'compareNatural("2", "10")','compareText("B", ["A", "B", "C"])'],seealso:["compare","compareNatural"]}},{}],546:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.deepEqualDocs=void 0;exports.deepEqualDocs={name:"deepEqual",category:"Relational",syntax:["deepEqual(x, y)"],description:"Check equality of two matrices element wise. Returns true if the size of both matrices is equal and when and each of the elements are equal.",examples:["deepEqual([1,3,4], [1,3,4])","deepEqual([1,3,4], [1,3])"],seealso:["equal","unequal","smaller","larger","smallerEq","largerEq","compare"]}},{}],547:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.equalDocs=void 0;exports.equalDocs={name:"equal",category:"Relational",syntax:["x == y","equal(x, y)"],description:"Check equality of two values. Returns true if the values are equal, and false if not.",examples:["2+2 == 3","2+2 == 4","a = 3.2","b = 6-2.8","a == b","50cm == 0.5m"],seealso:["unequal","smaller","larger","smallerEq","largerEq","compare","deepEqual","equalText"]}},{}],548:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.equalTextDocs=void 0;exports.equalTextDocs={name:"equalText",category:"Relational",syntax:["equalText(x, y)"],description:"Check equality of two strings. Comparison is case sensitive. Returns true if the values are equal, and false if not.",examples:['equalText("Hello", "Hello")','equalText("a", "A")','equal("2e3", "2000")','equalText("2e3", "2000")','equalText("B", ["A", "B", "C"])'],seealso:["compare","compareNatural","compareText","equal"]}},{}],549:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.largerDocs=void 0;exports.largerDocs={name:"larger",category:"Relational",syntax:["x > y","larger(x, y)"],description:"Check if value x is larger than y. Returns true if x is larger than y, and false if not.",examples:["2 > 3","5 > 2*2","a = 3.3","b = 6-2.8","(a > b)","(b < a)","5 cm > 2 inch"],seealso:["equal","unequal","smaller","smallerEq","largerEq","compare"]}},{}],550:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.largerEqDocs=void 0;exports.largerEqDocs={name:"largerEq",category:"Relational",syntax:["x >= y","largerEq(x, y)"],description:"Check if value x is larger or equal to y. Returns true if x is larger or equal to y, and false if not.",examples:["2 >= 1+1","2 > 1+1","a = 3.2","b = 6-2.8","(a >= b)"],seealso:["equal","unequal","smallerEq","smaller","compare"]}},{}],551:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.smallerDocs=void 0;exports.smallerDocs={name:"smaller",category:"Relational",syntax:["x < y","smaller(x, y)"],description:"Check if value x is smaller than value y. Returns true if x is smaller than y, and false if not.",examples:["2 < 3","5 < 2*2","a = 3.3","b = 6-2.8","(a < b)","5 cm < 2 inch"],seealso:["equal","unequal","larger","smallerEq","largerEq","compare"]}},{}],552:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.smallerEqDocs=void 0;exports.smallerEqDocs={name:"smallerEq",category:"Relational",syntax:["x <= y","smallerEq(x, y)"],description:"Check if value x is smaller or equal to value y. Returns true if x is smaller than y, and false if not.",examples:["2 <= 1+1","2 < 1+1","a = 3.2","b = 6-2.8","(a <= b)"],seealso:["equal","unequal","larger","smaller","largerEq","compare"]}},{}],553:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.unequalDocs=void 0;exports.unequalDocs={name:"unequal",category:"Relational",syntax:["x != y","unequal(x, y)"],description:"Check unequality of two values. Returns true if the values are unequal, and false if they are equal.",examples:["2+2 != 3","2+2 != 4","a = 3.2","b = 6-2.8","a != b","50cm != 0.5m","5 cm != 2 inch"],seealso:["equal","smaller","larger","smallerEq","largerEq","compare","deepEqual"]}},{}],554:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setCartesianDocs=void 0;exports.setCartesianDocs={name:"setCartesian",category:"Set",syntax:["setCartesian(set1, set2)"],description:"Create the cartesian product of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setCartesian([1, 2], [3, 4])"],seealso:["setUnion","setIntersect","setDifference","setPowerset"]}},{}],555:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setDifferenceDocs=void 0;exports.setDifferenceDocs={name:"setDifference",category:"Set",syntax:["setDifference(set1, set2)"],description:"Create the difference of two (multi)sets: every element of set1, that is not the element of set2. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setDifference([1, 2, 3, 4], [3, 4, 5, 6])","setDifference([[1, 2], [3, 4]], [[3, 4], [5, 6]])"],seealso:["setUnion","setIntersect","setSymDifference"]}},{}],556:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setDistinctDocs=void 0;exports.setDistinctDocs={name:"setDistinct",category:"Set",syntax:["setDistinct(set)"],description:"Collect the distinct elements of a multiset. A multi-dimension array will be converted to a single-dimension array before the operation.",examples:["setDistinct([1, 1, 1, 2, 2, 3])"],seealso:["setMultiplicity"]}},{}],557:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setIntersectDocs=void 0;exports.setIntersectDocs={name:"setIntersect",category:"Set",syntax:["setIntersect(set1, set2)"],description:"Create the intersection of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setIntersect([1, 2, 3, 4], [3, 4, 5, 6])","setIntersect([[1, 2], [3, 4]], [[3, 4], [5, 6]])"],seealso:["setUnion","setDifference"]}},{}],558:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setIsSubsetDocs=void 0;exports.setIsSubsetDocs={name:"setIsSubset",category:"Set",syntax:["setIsSubset(set1, set2)"],description:"Check whether a (multi)set is a subset of another (multi)set: every element of set1 is the element of set2. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setIsSubset([1, 2], [3, 4, 5, 6])","setIsSubset([3, 4], [3, 4, 5, 6])"],seealso:["setUnion","setIntersect","setDifference"]}},{}],559:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setMultiplicityDocs=void 0;exports.setMultiplicityDocs={name:"setMultiplicity",category:"Set",syntax:["setMultiplicity(element, set)"],description:"Count the multiplicity of an element in a multiset. A multi-dimension array will be converted to a single-dimension array before the operation.",examples:["setMultiplicity(1, [1, 2, 2, 4])","setMultiplicity(2, [1, 2, 2, 4])"],seealso:["setDistinct","setSize"]}},{}],560:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setPowersetDocs=void 0;exports.setPowersetDocs={name:"setPowerset",category:"Set",syntax:["setPowerset(set)"],description:"Create the powerset of a (multi)set: the powerset contains very possible subsets of a (multi)set. A multi-dimension array will be converted to a single-dimension array before the operation.",examples:["setPowerset([1, 2, 3])"],seealso:["setCartesian"]}},{}],561:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setSizeDocs=void 0;exports.setSizeDocs={name:"setSize",category:"Set",syntax:["setSize(set)","setSize(set, unique)"],description:'Count the number of elements of a (multi)set. When the second parameter "unique" is true, count only the unique values. A multi-dimension array will be converted to a single-dimension array before the operation.',examples:["setSize([1, 2, 2, 4])","setSize([1, 2, 2, 4], true)"],seealso:["setUnion","setIntersect","setDifference"]}},{}],562:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setSymDifferenceDocs=void 0;exports.setSymDifferenceDocs={name:"setSymDifference",category:"Set",syntax:["setSymDifference(set1, set2)"],description:"Create the symmetric difference of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setSymDifference([1, 2, 3, 4], [3, 4, 5, 6])","setSymDifference([[1, 2], [3, 4]], [[3, 4], [5, 6]])"],seealso:["setUnion","setIntersect","setDifference"]}},{}],563:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.setUnionDocs=void 0;exports.setUnionDocs={name:"setUnion",category:"Set",syntax:["setUnion(set1, set2)"],description:"Create the union of two (multi)sets. Multi-dimension arrays will be converted to single-dimension arrays before the operation.",examples:["setUnion([1, 2, 3, 4], [3, 4, 5, 6])","setUnion([[1, 2], [3, 4]], [[3, 4], [5, 6]])"],seealso:["setIntersect","setDifference"]}},{}],564:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.erfDocs=void 0;exports.erfDocs={name:"erf",category:"Special",syntax:["erf(x)"],description:"Compute the erf function of a value using a rational Chebyshev approximations for different intervals of x",examples:["erf(0.2)","erf(-0.5)","erf(4)"],seealso:[]}},{}],565:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.madDocs=void 0;exports.madDocs={name:"mad",category:"Statistics",syntax:["mad(a, b, c, ...)","mad(A)"],description:"Compute the median absolute deviation of a matrix or a list with values. The median absolute deviation is defined as the median of the absolute deviations from the median.",examples:["mad(10, 20, 30)","mad([1, 2, 3])"],seealso:["mean","median","std","abs"]}},{}],566:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.maxDocs=void 0;exports.maxDocs={name:"max",category:"Statistics",syntax:["max(a, b, c, ...)","max(A)","max(A, dim)"],description:"Compute the maximum value of a list of values.",examples:["max(2, 3, 4, 1)","max([2, 3, 4, 1])","max([2, 5; 4, 3])","max([2, 5; 4, 3], 1)","max([2, 5; 4, 3], 2)","max(2.7, 7.1, -4.5, 2.0, 4.1)","min(2.7, 7.1, -4.5, 2.0, 4.1)"],seealso:["mean","median","min","prod","std","sum","variance"]}},{}],567:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.meanDocs=void 0;exports.meanDocs={name:"mean",category:"Statistics",syntax:["mean(a, b, c, ...)","mean(A)","mean(A, dim)"],description:"Compute the arithmetic mean of a list of values.",examples:["mean(2, 3, 4, 1)","mean([2, 3, 4, 1])","mean([2, 5; 4, 3])","mean([2, 5; 4, 3], 1)","mean([2, 5; 4, 3], 2)","mean([1.0, 2.7, 3.2, 4.0])"],seealso:["max","median","min","prod","std","sum","variance"]}},{}],568:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.medianDocs=void 0;exports.medianDocs={name:"median",category:"Statistics",syntax:["median(a, b, c, ...)","median(A)"],description:"Compute the median of all values. The values are sorted and the middle value is returned. In case of an even number of values, the average of the two middle values is returned.",examples:["median(5, 2, 7)","median([3, -1, 5, 7])"],seealso:["max","mean","min","prod","std","sum","variance","quantileSeq"]}},{}],569:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.minDocs=void 0;exports.minDocs={name:"min",category:"Statistics",syntax:["min(a, b, c, ...)","min(A)","min(A, dim)"],description:"Compute the minimum value of a list of values.",examples:["min(2, 3, 4, 1)","min([2, 3, 4, 1])","min([2, 5; 4, 3])","min([2, 5; 4, 3], 1)","min([2, 5; 4, 3], 2)","min(2.7, 7.1, -4.5, 2.0, 4.1)","max(2.7, 7.1, -4.5, 2.0, 4.1)"],seealso:["max","mean","median","prod","std","sum","variance"]}},{}],570:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.modeDocs=void 0;exports.modeDocs={name:"mode",category:"Statistics",syntax:["mode(a, b, c, ...)","mode(A)","mode(A, a, b, B, c, ...)"],description:"Computes the mode of all values as an array. In case mode being more than one, multiple values are returned in an array.",examples:["mode(2, 1, 4, 3, 1)","mode([1, 2.7, 3.2, 4, 2.7])","mode(1, 4, 6, 1, 6)"],seealso:["max","mean","min","median","prod","std","sum","variance"]}},{}],571:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.prodDocs=void 0;exports.prodDocs={name:"prod",category:"Statistics",syntax:["prod(a, b, c, ...)","prod(A)"],description:"Compute the product of all values.",examples:["prod(2, 3, 4)","prod([2, 3, 4])","prod([2, 5; 4, 3])"],seealso:["max","mean","min","median","min","std","sum","variance"]}},{}],572:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.quantileSeqDocs=void 0;exports.quantileSeqDocs={name:"quantileSeq",category:"Statistics",syntax:["quantileSeq(A, prob[, sorted])","quantileSeq(A, [prob1, prob2, ...][, sorted])","quantileSeq(A, N[, sorted])"],description:"Compute the prob order quantile of a matrix or a list with values. The sequence is sorted and the middle value is returned. Supported types of sequence values are: Number, BigNumber, Unit Supported types of probablity are: Number, BigNumber. \n\nIn case of a (multi dimensional) array or matrix, the prob order quantile of all elements will be calculated.",examples:["quantileSeq([3, -1, 5, 7], 0.5)","quantileSeq([3, -1, 5, 7], [1/3, 2/3])","quantileSeq([3, -1, 5, 7], 2)","quantileSeq([-1, 3, 5, 7], 0.5, true)"],seealso:["mean","median","min","max","prod","std","sum","variance"]}},{}],573:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.stdDocs=void 0;exports.stdDocs={name:"std",category:"Statistics",syntax:["std(a, b, c, ...)","std(A)","std(A, normalization)"],description:'Compute the standard deviation of all values, defined as std(A) = sqrt(variance(A)). Optional parameter normalization can be "unbiased" (default), "uncorrected", or "biased".',examples:["std(2, 4, 6)","std([2, 4, 6, 8])",'std([2, 4, 6, 8], "uncorrected")','std([2, 4, 6, 8], "biased")',"std([1, 2, 3; 4, 5, 6])"],seealso:["max","mean","min","median","prod","sum","variance"]}},{}],574:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sumDocs=void 0;exports.sumDocs={name:"sum",category:"Statistics",syntax:["sum(a, b, c, ...)","sum(A)"],description:"Compute the sum of all values.",examples:["sum(2, 3, 4, 1)","sum([2, 3, 4, 1])","sum([2, 5; 4, 3])"],seealso:["max","mean","median","min","prod","std","sum","variance"]}},{}],575:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.varianceDocs=void 0;exports.varianceDocs={name:"variance",category:"Statistics",syntax:["variance(a, b, c, ...)","variance(A)","variance(A, normalization)"],description:'Compute the variance of all values. Optional parameter normalization can be "unbiased" (default), "uncorrected", or "biased".',examples:["variance(2, 4, 6)","variance([2, 4, 6, 8])",'variance([2, 4, 6, 8], "uncorrected")','variance([2, 4, 6, 8], "biased")',"variance([1, 2, 3; 4, 5, 6])"],seealso:["max","mean","min","median","min","prod","std","sum"]}},{}],576:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.acosDocs=void 0;exports.acosDocs={name:"acos",category:"Trigonometry",syntax:["acos(x)"],description:"Compute the inverse cosine of a value in radians.",examples:["acos(0.5)","acos(cos(2.3))"],seealso:["cos","atan","asin"]}},{}],577:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.acoshDocs=void 0;exports.acoshDocs={name:"acosh",category:"Trigonometry",syntax:["acosh(x)"],description:"Calculate the hyperbolic arccos of a value, defined as `acosh(x) = ln(sqrt(x^2 - 1) + x)`.",examples:["acosh(1.5)"],seealso:["cosh","asinh","atanh"]}},{}],578:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.acotDocs=void 0;exports.acotDocs={name:"acot",category:"Trigonometry",syntax:["acot(x)"],description:"Calculate the inverse cotangent of a value.",examples:["acot(0.5)","acot(cot(0.5))","acot(2)"],seealso:["cot","atan"]}},{}],579:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.acothDocs=void 0;exports.acothDocs={name:"acoth",category:"Trigonometry",syntax:["acoth(x)"],description:"Calculate the hyperbolic arccotangent of a value, defined as `acoth(x) = (ln((x+1)/x) + ln(x/(x-1))) / 2`.",examples:["acoth(2)","acoth(0.5)"],seealso:["acsch","asech"]}},{}],580:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.acscDocs=void 0;exports.acscDocs={name:"acsc",category:"Trigonometry",syntax:["acsc(x)"],description:"Calculate the inverse cotangent of a value.",examples:["acsc(2)","acsc(csc(0.5))","acsc(0.5)"],seealso:["csc","asin","asec"]}},{}],581:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.acschDocs=void 0;exports.acschDocs={name:"acsch",category:"Trigonometry",syntax:["acsch(x)"],description:"Calculate the hyperbolic arccosecant of a value, defined as `acsch(x) = ln(1/x + sqrt(1/x^2 + 1))`.",examples:["acsch(0.5)"],seealso:["asech","acoth"]}},{}],582:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.asecDocs=void 0;exports.asecDocs={name:"asec",category:"Trigonometry",syntax:["asec(x)"],description:"Calculate the inverse secant of a value.",examples:["asec(0.5)","asec(sec(0.5))","asec(2)"],seealso:["acos","acot","acsc"]}},{}],583:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.asechDocs=void 0;exports.asechDocs={name:"asech",category:"Trigonometry",syntax:["asech(x)"],description:"Calculate the inverse secant of a value.",examples:["asech(0.5)"],seealso:["acsch","acoth"]}},{}],584:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.asinDocs=void 0;exports.asinDocs={name:"asin",category:"Trigonometry",syntax:["asin(x)"],description:"Compute the inverse sine of a value in radians.",examples:["asin(0.5)","asin(sin(0.5))"],seealso:["sin","acos","atan"]}},{}],585:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.asinhDocs=void 0;exports.asinhDocs={name:"asinh",category:"Trigonometry",syntax:["asinh(x)"],description:"Calculate the hyperbolic arcsine of a value, defined as `asinh(x) = ln(x + sqrt(x^2 + 1))`.",examples:["asinh(0.5)"],seealso:["acosh","atanh"]}},{}],586:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.atanDocs=void 0;exports.atanDocs={name:"atan",category:"Trigonometry",syntax:["atan(x)"],description:"Compute the inverse tangent of a value in radians.",examples:["atan(0.5)","atan(tan(0.5))"],seealso:["tan","acos","asin"]}},{}],587:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.atan2Docs=void 0;exports.atan2Docs={name:"atan2",category:"Trigonometry",syntax:["atan2(y, x)"],description:"Computes the principal value of the arc tangent of y/x in radians.",examples:["atan2(2, 2) / pi","angle = 60 deg in rad","x = cos(angle)","y = sin(angle)","atan2(y, x)"],seealso:["sin","cos","tan"]}},{}],588:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.atanhDocs=void 0;exports.atanhDocs={name:"atanh",category:"Trigonometry",syntax:["atanh(x)"],description:"Calculate the hyperbolic arctangent of a value, defined as `atanh(x) = ln((1 + x)/(1 - x)) / 2`.",examples:["atanh(0.5)"],seealso:["acosh","asinh"]}},{}],589:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.cosDocs=void 0;exports.cosDocs={name:"cos",category:"Trigonometry",syntax:["cos(x)"],description:"Compute the cosine of x in radians.",examples:["cos(2)","cos(pi / 4) ^ 2","cos(180 deg)","cos(60 deg)","sin(0.2)^2 + cos(0.2)^2"],seealso:["acos","sin","tan"]}},{}],590:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.coshDocs=void 0;exports.coshDocs={name:"cosh",category:"Trigonometry",syntax:["cosh(x)"],description:"Compute the hyperbolic cosine of x in radians.",examples:["cosh(0.5)"],seealso:["sinh","tanh","coth"]}},{}],591:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.cotDocs=void 0;exports.cotDocs={name:"cot",category:"Trigonometry",syntax:["cot(x)"],description:"Compute the cotangent of x in radians. Defined as 1/tan(x)",examples:["cot(2)","1 / tan(2)"],seealso:["sec","csc","tan"]}},{}],592:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.cothDocs=void 0;exports.cothDocs={name:"coth",category:"Trigonometry",syntax:["coth(x)"],description:"Compute the hyperbolic cotangent of x in radians.",examples:["coth(2)","1 / tanh(2)"],seealso:["sech","csch","tanh"]}},{}],593:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.cscDocs=void 0;exports.cscDocs={name:"csc",category:"Trigonometry",syntax:["csc(x)"],description:"Compute the cosecant of x in radians. Defined as 1/sin(x)",examples:["csc(2)","1 / sin(2)"],seealso:["sec","cot","sin"]}},{}],594:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.cschDocs=void 0;exports.cschDocs={name:"csch",category:"Trigonometry",syntax:["csch(x)"],description:"Compute the hyperbolic cosecant of x in radians. Defined as 1/sinh(x)",examples:["csch(2)","1 / sinh(2)"],seealso:["sech","coth","sinh"]}},{}],595:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.secDocs=void 0;exports.secDocs={name:"sec",category:"Trigonometry",syntax:["sec(x)"],description:"Compute the secant of x in radians. Defined as 1/cos(x)",examples:["sec(2)","1 / cos(2)"],seealso:["cot","csc","cos"]}},{}],596:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sechDocs=void 0;exports.sechDocs={name:"sech",category:"Trigonometry",syntax:["sech(x)"],description:"Compute the hyperbolic secant of x in radians. Defined as 1/cosh(x)",examples:["sech(2)","1 / cosh(2)"],seealso:["coth","csch","cosh"]}},{}],597:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sinDocs=void 0;exports.sinDocs={name:"sin",category:"Trigonometry",syntax:["sin(x)"],description:"Compute the sine of x in radians.",examples:["sin(2)","sin(pi / 4) ^ 2","sin(90 deg)","sin(30 deg)","sin(0.2)^2 + cos(0.2)^2"],seealso:["asin","cos","tan"]}},{}],598:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.sinhDocs=void 0;exports.sinhDocs={name:"sinh",category:"Trigonometry",syntax:["sinh(x)"],description:"Compute the hyperbolic sine of x in radians.",examples:["sinh(0.5)"],seealso:["cosh","tanh"]}},{}],599:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.tanDocs=void 0;exports.tanDocs={name:"tan",category:"Trigonometry",syntax:["tan(x)"],description:"Compute the tangent of x in radians.",examples:["tan(0.5)","sin(0.5) / cos(0.5)","tan(pi / 4)","tan(45 deg)"],seealso:["atan","sin","cos"]}},{}],600:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.tanhDocs=void 0;exports.tanhDocs={name:"tanh",category:"Trigonometry",syntax:["tanh(x)"],description:"Compute the hyperbolic tangent of x in radians.",examples:["tanh(0.5)","sinh(0.5) / cosh(0.5)"],seealso:["sinh","cosh"]}},{}],601:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.toDocs=void 0;exports.toDocs={name:"to",category:"Units",syntax:["x to unit","to(x, unit)"],description:"Change the unit of a value.",examples:["5 inch to cm","3.2kg to g","16 bytes in bits"],seealso:[]}},{}],602:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.cloneDocs=void 0;exports.cloneDocs={name:"clone",category:"Utils",syntax:["clone(x)"],description:"Clone a variable. Creates a copy of primitive variables,and a deep copy of matrices",examples:["clone(3.5)","clone(2 - 4i)","clone(45 deg)","clone([1, 2; 3, 4])",'clone("hello world")'],seealso:[]}},{}],603:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.formatDocs=void 0;exports.formatDocs={name:"format",category:"Utils",syntax:["format(value)","format(value, precision)"],description:"Format a value of any type as string.",examples:["format(2.3)","format(3 - 4i)","format([])","format(pi, 3)"],seealso:["print"]}},{}],604:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.hasNumericValueDocs=void 0;exports.hasNumericValueDocs={name:"hasNumericValue",category:"Utils",syntax:["hasNumericValue(x)"],description:"Test whether a value is an numeric value. In case of a string, true is returned if the string contains a numeric value.",examples:["hasNumericValue(2)",'hasNumericValue("2")','isNumeric("2")',"hasNumericValue(0)","hasNumericValue(bignumber(500))","hasNumericValue(fraction(0.125))","hasNumericValue(2 + 3i)",'hasNumericValue([2.3, "foo", false])'],seealso:["isInteger","isZero","isNegative","isPositive","isNaN","isNumeric"]}},{}],605:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isIntegerDocs=void 0;exports.isIntegerDocs={name:"isInteger",category:"Utils",syntax:["isInteger(x)"],description:"Test whether a value is an integer number.",examples:["isInteger(2)","isInteger(3.5)","isInteger([3, 0.5, -2])"],seealso:["isNegative","isNumeric","isPositive","isZero"]}},{}],606:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isNaNDocs=void 0;exports.isNaNDocs={name:"isNaN",category:"Utils",syntax:["isNaN(x)"],description:"Test whether a value is NaN (not a number)",examples:["isNaN(2)","isNaN(0 / 0)","isNaN(NaN)","isNaN(Infinity)"],seealso:["isNegative","isNumeric","isPositive","isZero"]}},{}],607:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isNegativeDocs=void 0;exports.isNegativeDocs={name:"isNegative",category:"Utils",syntax:["isNegative(x)"],description:"Test whether a value is negative: smaller than zero.",examples:["isNegative(2)","isNegative(0)","isNegative(-4)","isNegative([3, 0.5, -2])"],seealso:["isInteger","isNumeric","isPositive","isZero"]}},{}],608:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isNumericDocs=void 0;exports.isNumericDocs={name:"isNumeric",category:"Utils",syntax:["isNumeric(x)"],description:"Test whether a value is a numeric value. Returns true when the input is a number, BigNumber, Fraction, or boolean.",examples:["isNumeric(2)",'isNumeric("2")','hasNumericValue("2")',"isNumeric(0)","isNumeric(bignumber(500))","isNumeric(fraction(0.125))","isNumeric(2 + 3i)",'isNumeric([2.3, "foo", false])'],seealso:["isInteger","isZero","isNegative","isPositive","isNaN","hasNumericValue"]}},{}],609:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isPositiveDocs=void 0;exports.isPositiveDocs={name:"isPositive",category:"Utils",syntax:["isPositive(x)"],description:"Test whether a value is positive: larger than zero.",examples:["isPositive(2)","isPositive(0)","isPositive(-4)","isPositive([3, 0.5, -2])"],seealso:["isInteger","isNumeric","isNegative","isZero"]}},{}],610:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isPrimeDocs=void 0;exports.isPrimeDocs={name:"isPrime",category:"Utils",syntax:["isPrime(x)"],description:"Test whether a value is prime: has no divisors other than itself and one.",examples:["isPrime(3)","isPrime(-2)","isPrime([2, 17, 100])"],seealso:["isInteger","isNumeric","isNegative","isZero"]}},{}],611:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isZeroDocs=void 0;exports.isZeroDocs={name:"isZero",category:"Utils",syntax:["isZero(x)"],description:"Test whether a value is zero.",examples:["isZero(2)","isZero(0)","isZero(-4)","isZero([3, 0, -2, 0])"],seealso:["isInteger","isNumeric","isNegative","isPositive"]}},{}],612:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.numericDocs=void 0;exports.numericDocs={name:"numeric",category:"Utils",syntax:["numeric(x)"],description:"Convert a numeric input to a specific numeric type: number, BigNumber, or Fraction.",examples:['numeric("4")','numeric("4", "number")','numeric("4", "BigNumber")','numeric("4", "Fraction)','numeric(4, "Fraction")','numeric(fraction(2, 5), "number)'],seealso:["number","fraction","bignumber","string","format"]}},{}],613:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.typeOfDocs=void 0;exports.typeOfDocs={name:"typeOf",category:"Utils",syntax:["typeOf(x)"],description:"Get the type of a variable.",examples:["typeOf(3.5)","typeOf(2 - 4i)","typeOf(45 deg)",'typeOf("hello world")'],seealso:["getMatrixDataType"]}},{}],614:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createCompile=void 0;var _collection=require("../../utils/collection"),_factory=require("../../utils/factory"),dependencies=["typed","parse"],createCompile=(0,_factory.factory)("compile",dependencies,function(_ref){var typed=_ref.typed,parse=_ref.parse;return typed("compile",{string:function(expr){return parse(expr).compile()},"Array | Matrix":function(expr){return(0,_collection.deepMap)(expr,function(entry){return parse(entry).compile()})}})});exports.createCompile=createCompile},{"../../utils/collection":927,"../../utils/factory":931}],615:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createDeprecatedEval=void 0;var _factory=require("../../utils/factory"),_log=require("../../utils/log"),createDeprecatedEval=(0,_factory.factory)("eval",["evaluate"],function(_ref){var evaluate=_ref.evaluate;return function(){(0,_log.warnOnce)('Function "eval" has been renamed to "evaluate" in v6.0.0, please use the new function instead.');for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];return evaluate.apply(evaluate,args)}});exports.createDeprecatedEval=createDeprecatedEval},{"../../utils/factory":931,"../../utils/log":935}],616:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createEvaluate=void 0;var _collection=require("../../utils/collection"),_factory=require("../../utils/factory"),dependencies=["typed","parse"],createEvaluate=(0,_factory.factory)("evaluate",dependencies,function(_ref){var typed=_ref.typed,parse=_ref.parse;return typed("evaluate",{string:function(expr){return parse(expr).compile().evaluate({})},"string, Object":function(expr,scope){return parse(expr).compile().evaluate(scope)},"Array | Matrix":function(expr){var scope={};return(0,_collection.deepMap)(expr,function(entry){return parse(entry).compile().evaluate(scope)})},"Array | Matrix, Object":function(expr,scope){return(0,_collection.deepMap)(expr,function(entry){return parse(entry).compile().evaluate(scope)})}})});exports.createEvaluate=createEvaluate},{"../../utils/collection":927,"../../utils/factory":931}],617:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createHelp=void 0;var _factory=require("../../utils/factory"),_customs=require("../../utils/customs"),_embeddedDocs=require("../embeddedDocs/embeddedDocs"),_object=require("../../utils/object"),dependencies=["typed","mathWithTransform","Help"],createHelp=(0,_factory.factory)("help",dependencies,function(_ref){var typed=_ref.typed,mathWithTransform=_ref.mathWithTransform,Help=_ref.Help;return typed("help",{any:function(search){var prop,searchName=search;if("string"!=typeof search)for(prop in mathWithTransform)if((0,_object.hasOwnProperty)(mathWithTransform,prop)&&search===mathWithTransform[prop]){searchName=prop;break}var doc=(0,_customs.getSafeProperty)(_embeddedDocs.embeddedDocs,searchName);if(doc)return new Help(doc);var searchText="function"==typeof searchName?searchName.name:searchName;throw new Error('No documentation found on "'+searchText+'"')}})});exports.createHelp=createHelp},{"../../utils/customs":929,"../../utils/factory":931,"../../utils/object":938,"../embeddedDocs/embeddedDocs":435}],618:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createParser=void 0;var _factory=require("../../utils/factory"),dependencies=["typed","Parser"],createParser=(0,_factory.factory)("parser",dependencies,function(_ref){var typed=_ref.typed,Parser=_ref.Parser;return typed("parser",{"":function(){return new Parser}})});exports.createParser=createParser},{"../../utils/factory":931}],619:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.keywords=void 0;exports.keywords={end:!0}},{}],620:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createAccessorNode=void 0;var _is=require("../../utils/is"),_customs=require("../../utils/customs"),_factory=require("../../utils/factory"),_access=require("./utils/access"),dependencies=["subset","Node"],createAccessorNode=(0,_factory.factory)("AccessorNode",dependencies,function(_ref){var subset=_ref.subset,Node=_ref.Node,access=(0,_access.accessFactory)({subset:subset});function AccessorNode(object,index){if(!(this instanceof AccessorNode))throw new SyntaxError("Constructor must be called with the new operator");if(!(0,_is.isNode)(object))throw new TypeError('Node expected for parameter "object"');if(!(0,_is.isIndexNode)(index))throw new TypeError('IndexNode expected for parameter "index"');this.object=object||null,this.index=index,Object.defineProperty(this,"name",{get:function(){return this.index?this.index.isObjectProperty()?this.index.getObjectProperty():"":this.object.name||""}.bind(this),set:function(){throw new Error("Cannot assign a new name, name is read-only")}})}function needParenthesis(node){return!((0,_is.isAccessorNode)(node)||(0,_is.isArrayNode)(node)||(0,_is.isConstantNode)(node)||(0,_is.isFunctionNode)(node)||(0,_is.isObjectNode)(node)||(0,_is.isParenthesisNode)(node)||(0,_is.isSymbolNode)(node))}return(AccessorNode.prototype=new Node).type="AccessorNode",AccessorNode.prototype.isAccessorNode=!0,AccessorNode.prototype._compile=function(math,argNames){var evalObject=this.object._compile(math,argNames),evalIndex=this.index._compile(math,argNames);if(this.index.isObjectProperty()){var prop=this.index.getObjectProperty();return function(scope,args,context){return(0,_customs.getSafeProperty)(evalObject(scope,args,context),prop)}}return function(scope,args,context){var object=evalObject(scope,args,context),index=evalIndex(scope,args,object);return access(object,index)}},AccessorNode.prototype.forEach=function(callback){callback(this.object,"object",this),callback(this.index,"index",this)},AccessorNode.prototype.map=function(callback){return new AccessorNode(this._ifNode(callback(this.object,"object",this)),this._ifNode(callback(this.index,"index",this)))},AccessorNode.prototype.clone=function(){return new AccessorNode(this.object,this.index)},AccessorNode.prototype._toString=function(options){var object=this.object.toString(options);return needParenthesis(this.object)&&(object="("+object+")"),object+this.index.toString(options)},AccessorNode.prototype.toHTML=function(options){var object=this.object.toHTML(options);return needParenthesis(this.object)&&(object='('+object+')'),object+this.index.toHTML(options)},AccessorNode.prototype._toTex=function(options){var object=this.object.toTex(options);return needParenthesis(this.object)&&(object="\\left(' + object + '\\right)"),object+this.index.toTex(options)},AccessorNode.prototype.toJSON=function(){return{mathjs:"AccessorNode",object:this.object,index:this.index}},AccessorNode.fromJSON=function(json){return new AccessorNode(json.object,json.index)},AccessorNode},{isClass:!0,isNode:!0});exports.createAccessorNode=createAccessorNode},{"../../utils/customs":929,"../../utils/factory":931,"../../utils/is":933,"./utils/access":636}],621:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createArrayNode=void 0;var _is=require("../../utils/is"),_array=require("../../utils/array"),dependencies=["Node"],createArrayNode=(0,require("../../utils/factory").factory)("ArrayNode",dependencies,function(_ref){var Node=_ref.Node;function ArrayNode(items){if(!(this instanceof ArrayNode))throw new SyntaxError("Constructor must be called with the new operator");if(this.items=items||[],!Array.isArray(this.items)||!this.items.every(_is.isNode))throw new TypeError("Array containing Nodes expected");var deprecated=function(){throw new Error("Property `ArrayNode.nodes` is deprecated, use `ArrayNode.items` instead")};Object.defineProperty(this,"nodes",{get:deprecated,set:deprecated})}return(ArrayNode.prototype=new Node).type="ArrayNode",ArrayNode.prototype.isArrayNode=!0,ArrayNode.prototype._compile=function(math,argNames){var evalItems=(0,_array.map)(this.items,function(item){return item._compile(math,argNames)});if("Array"===math.config.matrix)return function(scope,args,context){return(0,_array.map)(evalItems,function(evalItem){return evalItem(scope,args,context)})};var matrix=math.matrix;return function(scope,args,context){return matrix((0,_array.map)(evalItems,function(evalItem){return evalItem(scope,args,context)}))}},ArrayNode.prototype.forEach=function(callback){for(var i=0;i['+this.items.map(function(node){return node.toHTML(options)}).join(',')+']'},ArrayNode.prototype._toTex=function(options){var s="\\begin{bmatrix}";return this.items.forEach(function(node){node.items?s+=node.items.map(function(childNode){return childNode.toTex(options)}).join("&"):s+=node.toTex(options),s+="\\\\"}),s+="\\end{bmatrix}"},ArrayNode},{isClass:!0,isNode:!0});exports.createArrayNode=createArrayNode},{"../../utils/array":922,"../../utils/factory":931,"../../utils/is":933}],622:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createAssignmentNode=void 0;var _is=require("../../utils/is"),_customs=require("../../utils/customs"),_factory=require("../../utils/factory"),_access=require("./utils/access"),_assign=require("./utils/assign"),_operators=require("../operators"),dependencies=["subset","?matrix","Node"],createAssignmentNode=(0,_factory.factory)("AssignmentNode",dependencies,function(_ref){var subset=_ref.subset,matrix=_ref.matrix,Node=_ref.Node,access=(0,_access.accessFactory)({subset:subset}),assign=(0,_assign.assignFactory)({subset:subset,matrix:matrix});function AssignmentNode(object,index,value){if(!(this instanceof AssignmentNode))throw new SyntaxError("Constructor must be called with the new operator");if(this.object=object,this.index=value?index:null,this.value=value||index,!(0,_is.isSymbolNode)(object)&&!(0,_is.isAccessorNode)(object))throw new TypeError('SymbolNode or AccessorNode expected as "object"');if((0,_is.isSymbolNode)(object)&&"end"===object.name)throw new Error('Cannot assign to symbol "end"');if(this.index&&!(0,_is.isIndexNode)(this.index))throw new TypeError('IndexNode expected as "index"');if(!(0,_is.isNode)(this.value))throw new TypeError('Node expected as "value"');Object.defineProperty(this,"name",{get:function(){return this.index?this.index.isObjectProperty()?this.index.getObjectProperty():"":this.object.name||""}.bind(this),set:function(){throw new Error("Cannot assign a new name, name is read-only")}})}function needParenthesis(node,parenthesis){parenthesis=parenthesis||"keep";var precedence=(0,_operators.getPrecedence)(node,parenthesis),exprPrecedence=(0,_operators.getPrecedence)(node.value,parenthesis);return"all"===parenthesis||null!==exprPrecedence&&exprPrecedence<=precedence}return(AssignmentNode.prototype=new Node).type="AssignmentNode",AssignmentNode.prototype.isAssignmentNode=!0,AssignmentNode.prototype._compile=function(math,argNames){var evalObject=this.object._compile(math,argNames),evalIndex=this.index?this.index._compile(math,argNames):null,evalValue=this.value._compile(math,argNames),name=this.object.name;if(this.index){if(this.index.isObjectProperty()){var prop=this.index.getObjectProperty();return function(scope,args,context){var object=evalObject(scope,args,context),value=evalValue(scope,args,context);return(0,_customs.setSafeProperty)(object,prop,value)}}if((0,_is.isSymbolNode)(this.object))return function(scope,args,context){var childObject=evalObject(scope,args,context),value=evalValue(scope,args,context),index=evalIndex(scope,args,childObject);return(0,_customs.setSafeProperty)(scope,name,assign(childObject,index,value)),value};var evalParentObject=this.object.object._compile(math,argNames);if(this.object.index.isObjectProperty()){var parentProp=this.object.index.getObjectProperty();return function(scope,args,context){var parent=evalParentObject(scope,args,context),childObject=(0,_customs.getSafeProperty)(parent,parentProp),index=evalIndex(scope,args,childObject),value=evalValue(scope,args,context);return(0,_customs.setSafeProperty)(parent,parentProp,assign(childObject,index,value)),value}}var evalParentIndex=this.object.index._compile(math,argNames);return function(scope,args,context){var parent=evalParentObject(scope,args,context),parentIndex=evalParentIndex(scope,args,parent),childObject=access(parent,parentIndex),index=evalIndex(scope,args,childObject),value=evalValue(scope,args,context);return assign(parent,parentIndex,assign(childObject,index,value)),value}}if(!(0,_is.isSymbolNode)(this.object))throw new TypeError("SymbolNode expected as object");return function(scope,args,context){return(0,_customs.setSafeProperty)(scope,name,evalValue(scope,args,context))}},AssignmentNode.prototype.forEach=function(callback){callback(this.object,"object",this),this.index&&callback(this.index,"index",this),callback(this.value,"value",this)},AssignmentNode.prototype.map=function(callback){return new AssignmentNode(this._ifNode(callback(this.object,"object",this)),this.index?this._ifNode(callback(this.index,"index",this)):null,this._ifNode(callback(this.value,"value",this)))},AssignmentNode.prototype.clone=function(){return new AssignmentNode(this.object,this.index,this.value)},AssignmentNode.prototype._toString=function(options){var object=this.object.toString(options),index=this.index?this.index.toString(options):"",value=this.value.toString(options);return needParenthesis(this,options&&options.parenthesis)&&(value="("+value+")"),object+index+" = "+value},AssignmentNode.prototype.toJSON=function(){return{mathjs:"AssignmentNode",object:this.object,index:this.index,value:this.value}},AssignmentNode.fromJSON=function(json){return new AssignmentNode(json.object,json.index,json.value)},AssignmentNode.prototype.toHTML=function(options){var object=this.object.toHTML(options),index=this.index?this.index.toHTML(options):"",value=this.value.toHTML(options);return needParenthesis(this,options&&options.parenthesis)&&(value='('+value+')'),object+index+'='+value},AssignmentNode.prototype._toTex=function(options){var object=this.object.toTex(options),index=this.index?this.index.toTex(options):"",value=this.value.toTex(options);return needParenthesis(this,options&&options.parenthesis)&&(value="\\left(".concat(value,"\\right)")),object+index+":="+value},AssignmentNode},{isClass:!0,isNode:!0});exports.createAssignmentNode=createAssignmentNode},{"../../utils/customs":929,"../../utils/factory":931,"../../utils/is":933,"../operators":638,"./utils/access":636,"./utils/assign":637}],623:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createBlockNode=void 0;var _is=require("../../utils/is"),_array=require("../../utils/array"),dependencies=["ResultSet","Node"],createBlockNode=(0,require("../../utils/factory").factory)("BlockNode",dependencies,function(_ref){var ResultSet=_ref.ResultSet,Node=_ref.Node;function BlockNode(blocks){if(!(this instanceof BlockNode))throw new SyntaxError("Constructor must be called with the new operator");if(!Array.isArray(blocks))throw new Error("Array expected");this.blocks=blocks.map(function(block){var node=block&&block.node,visible=!block||void 0===block.visible||block.visible;if(!(0,_is.isNode)(node))throw new TypeError('Property "node" must be a Node');if("boolean"!=typeof visible)throw new TypeError('Property "visible" must be a boolean');return{node:node,visible:visible}})}return(BlockNode.prototype=new Node).type="BlockNode",BlockNode.prototype.isBlockNode=!0,BlockNode.prototype._compile=function(math,argNames){var evalBlocks=(0,_array.map)(this.blocks,function(block){return{evaluate:block.node._compile(math,argNames),visible:block.visible}});return function(scope,args,context){var results=[];return(0,_array.forEach)(evalBlocks,function(block){var result=block.evaluate(scope,args,context);block.visible&&results.push(result)}),new ResultSet(results)}},BlockNode.prototype.forEach=function(callback){for(var i=0;i;')}).join('
')},BlockNode.prototype._toTex=function(options){return this.blocks.map(function(param){return param.node.toTex(options)+(param.visible?"":";")}).join("\\;\\;\n")},BlockNode},{isClass:!0,isNode:!0});exports.createBlockNode=createBlockNode},{"../../utils/array":922,"../../utils/factory":931,"../../utils/is":933}],624:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createConditionalNode=void 0;var _is=require("../../utils/is"),_factory=require("../../utils/factory"),_operators=require("../operators"),dependencies=["Node"],createConditionalNode=(0,_factory.factory)("ConditionalNode",dependencies,function(_ref){var Node=_ref.Node;function ConditionalNode(condition,trueExpr,falseExpr){if(!(this instanceof ConditionalNode))throw new SyntaxError("Constructor must be called with the new operator");if(!(0,_is.isNode)(condition))throw new TypeError("Parameter condition must be a Node");if(!(0,_is.isNode)(trueExpr))throw new TypeError("Parameter trueExpr must be a Node");if(!(0,_is.isNode)(falseExpr))throw new TypeError("Parameter falseExpr must be a Node");this.condition=condition,this.trueExpr=trueExpr,this.falseExpr=falseExpr}return(ConditionalNode.prototype=new Node).type="ConditionalNode",ConditionalNode.prototype.isConditionalNode=!0,ConditionalNode.prototype._compile=function(math,argNames){var evalCondition=this.condition._compile(math,argNames),evalTrueExpr=this.trueExpr._compile(math,argNames),evalFalseExpr=this.falseExpr._compile(math,argNames);return function(scope,args,context){return(function(condition){if("number"==typeof condition||"boolean"==typeof condition||"string"==typeof condition)return!!condition;if(condition){if((0,_is.isBigNumber)(condition))return!condition.isZero();if((0,_is.isComplex)(condition))return!(!condition.re&&!condition.im);if((0,_is.isUnit)(condition))return!!condition.value}if(null!=condition)throw new TypeError('Unsupported type of condition "'+(0,_is.typeOf)(condition)+'"');return!1}(evalCondition(scope,args,context))?evalTrueExpr:evalFalseExpr)(scope,args,context)}},ConditionalNode.prototype.forEach=function(callback){callback(this.condition,"condition",this),callback(this.trueExpr,"trueExpr",this),callback(this.falseExpr,"falseExpr",this)},ConditionalNode.prototype.map=function(callback){return new ConditionalNode(this._ifNode(callback(this.condition,"condition",this)),this._ifNode(callback(this.trueExpr,"trueExpr",this)),this._ifNode(callback(this.falseExpr,"falseExpr",this)))},ConditionalNode.prototype.clone=function(){return new ConditionalNode(this.condition,this.trueExpr,this.falseExpr)},ConditionalNode.prototype._toString=function(options){var parenthesis=options&&options.parenthesis?options.parenthesis:"keep",precedence=(0,_operators.getPrecedence)(this,parenthesis),condition=this.condition.toString(options),conditionPrecedence=(0,_operators.getPrecedence)(this.condition,parenthesis);("all"===parenthesis||"OperatorNode"===this.condition.type||null!==conditionPrecedence&&conditionPrecedence<=precedence)&&(condition="("+condition+")");var trueExpr=this.trueExpr.toString(options),truePrecedence=(0,_operators.getPrecedence)(this.trueExpr,parenthesis);("all"===parenthesis||"OperatorNode"===this.trueExpr.type||null!==truePrecedence&&truePrecedence<=precedence)&&(trueExpr="("+trueExpr+")");var falseExpr=this.falseExpr.toString(options),falsePrecedence=(0,_operators.getPrecedence)(this.falseExpr,parenthesis);return("all"===parenthesis||"OperatorNode"===this.falseExpr.type||null!==falsePrecedence&&falsePrecedence<=precedence)&&(falseExpr="("+falseExpr+")"),condition+" ? "+trueExpr+" : "+falseExpr},ConditionalNode.prototype.toJSON=function(){return{mathjs:"ConditionalNode",condition:this.condition,trueExpr:this.trueExpr,falseExpr:this.falseExpr}},ConditionalNode.fromJSON=function(json){return new ConditionalNode(json.condition,json.trueExpr,json.falseExpr)},ConditionalNode.prototype.toHTML=function(options){var parenthesis=options&&options.parenthesis?options.parenthesis:"keep",precedence=(0,_operators.getPrecedence)(this,parenthesis),condition=this.condition.toHTML(options),conditionPrecedence=(0,_operators.getPrecedence)(this.condition,parenthesis);("all"===parenthesis||"OperatorNode"===this.condition.type||null!==conditionPrecedence&&conditionPrecedence<=precedence)&&(condition='('+condition+')');var trueExpr=this.trueExpr.toHTML(options),truePrecedence=(0,_operators.getPrecedence)(this.trueExpr,parenthesis);("all"===parenthesis||"OperatorNode"===this.trueExpr.type||null!==truePrecedence&&truePrecedence<=precedence)&&(trueExpr='('+trueExpr+')');var falseExpr=this.falseExpr.toHTML(options),falsePrecedence=(0,_operators.getPrecedence)(this.falseExpr,parenthesis);return("all"===parenthesis||"OperatorNode"===this.falseExpr.type||null!==falsePrecedence&&falsePrecedence<=precedence)&&(falseExpr='('+falseExpr+')'),condition+'?'+trueExpr+':'+falseExpr},ConditionalNode.prototype._toTex=function(options){return"\\begin{cases} {"+this.trueExpr.toTex(options)+"}, &\\quad{\\text{if }\\;"+this.condition.toTex(options)+"}\\\\{"+this.falseExpr.toTex(options)+"}, &\\quad{\\text{otherwise}}\\end{cases}"},ConditionalNode},{isClass:!0,isNode:!0});exports.createConditionalNode=createConditionalNode},{"../../utils/factory":931,"../../utils/is":933,"../operators":638}],625:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createConstantNode=void 0;var _string=require("../../utils/string"),_is=require("../../utils/is"),_latex=require("../../utils/latex"),dependencies=["Node"],createConstantNode=(0,require("../../utils/factory").factory)("ConstantNode",dependencies,function(_ref){var Node=_ref.Node;function ConstantNode(value){if(!(this instanceof ConstantNode))throw new SyntaxError("Constructor must be called with the new operator");if(2===arguments.length)throw new SyntaxError("new ConstantNode(valueStr, valueType) is not supported anymore since math v4.0.0. Use new ConstantNode(value) instead, where value is a non-stringified value.");this.value=value}return(ConstantNode.prototype=new Node).type="ConstantNode",ConstantNode.prototype.isConstantNode=!0,ConstantNode.prototype._compile=function(math,argNames){var value=this.value;return function(){return value}},ConstantNode.prototype.forEach=function(callback){},ConstantNode.prototype.map=function(callback){return this.clone()},ConstantNode.prototype.clone=function(){return new ConstantNode(this.value)},ConstantNode.prototype._toString=function(options){return(0,_string.format)(this.value,options)},ConstantNode.prototype.toHTML=function(options){var value=this._toString(options);switch((0,_is.typeOf)(this.value)){case"number":case"BigNumber":case"Fraction":return''+value+"";case"string":return''+value+"";case"boolean":return''+value+"";case"null":return''+value+"";case"undefined":return''+value+"";default:return''+value+""}},ConstantNode.prototype.toJSON=function(){return{mathjs:"ConstantNode",value:this.value}},ConstantNode.fromJSON=function(json){return new ConstantNode(json.value)},ConstantNode.prototype._toTex=function(options){var value=this._toString(options);switch((0,_is.typeOf)(this.value)){case"string":return"\\mathtt{"+(0,_latex.escapeLatex)(value)+"}";case"number":case"BigNumber":if(!isFinite(this.value))return this.value.valueOf()<0?"-\\infty":"\\infty";var index=value.toLowerCase().indexOf("e");return-1!==index?value.substring(0,index)+"\\cdot10^{"+value.substring(index+1)+"}":value;case"Fraction":return this.value.toLatex();default:return value}},ConstantNode},{isClass:!0,isNode:!0});exports.createConstantNode=createConstantNode},{"../../utils/factory":931,"../../utils/is":933,"../../utils/latex":934,"../../utils/string":941}],626:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createFunctionAssignmentNode=void 0;var _is=require("../../utils/is"),_keywords=require("../keywords"),_string=require("../../utils/string"),_array=require("../../utils/array"),_latex=require("../../utils/latex"),_operators=require("../operators"),_customs=require("../../utils/customs"),dependencies=["typed","Node"],createFunctionAssignmentNode=(0,require("../../utils/factory").factory)("FunctionAssignmentNode",dependencies,function(_ref){var typed=_ref.typed,Node=_ref.Node;function FunctionAssignmentNode(name,params,expr){if(!(this instanceof FunctionAssignmentNode))throw new SyntaxError("Constructor must be called with the new operator");if("string"!=typeof name)throw new TypeError('String expected for parameter "name"');if(!Array.isArray(params))throw new TypeError('Array containing strings or objects expected for parameter "params"');if(!(0,_is.isNode)(expr))throw new TypeError('Node expected for parameter "expr"');if(name in _keywords.keywords)throw new Error('Illegal function name, "'+name+'" is a reserved keyword');this.name=name,this.params=params.map(function(param){return param&¶m.name||param}),this.types=params.map(function(param){return param&¶m.type||"any"}),this.expr=expr}function needParenthesis(node,parenthesis){var precedence=(0,_operators.getPrecedence)(node,parenthesis),exprPrecedence=(0,_operators.getPrecedence)(node.expr,parenthesis);return"all"===parenthesis||null!==exprPrecedence&&exprPrecedence<=precedence}return(FunctionAssignmentNode.prototype=new Node).type="FunctionAssignmentNode",FunctionAssignmentNode.prototype.isFunctionAssignmentNode=!0,FunctionAssignmentNode.prototype._compile=function(math,argNames){var childArgNames=Object.create(argNames);(0,_array.forEach)(this.params,function(param){childArgNames[param]=!0});var evalExpr=this.expr._compile(math,childArgNames),name=this.name,params=this.params,signature=(0,_array.join)(this.types,","),syntax=name+"("+(0,_array.join)(this.params,", ")+")";return function(scope,args,context){var signatures={};signatures[signature]=function(){for(var childArgs=Object.create(args),i=0;i'+(0,_string.escape)(this.params[i])+"");var expr=this.expr.toHTML(options);return needParenthesis(this,parenthesis)&&(expr='('+expr+')'),''+(0,_string.escape)(this.name)+'('+params.join(',')+')='+expr},FunctionAssignmentNode.prototype._toTex=function(options){var parenthesis=options&&options.parenthesis?options.parenthesis:"keep",expr=this.expr.toTex(options);return needParenthesis(this,parenthesis)&&(expr="\\left(".concat(expr,"\\right)")),"\\mathrm{"+this.name+"}\\left("+this.params.map(_latex.toSymbol).join(",")+"\\right):="+expr},FunctionAssignmentNode},{isClass:!0,isNode:!0});exports.createFunctionAssignmentNode=createFunctionAssignmentNode},{"../../utils/array":922,"../../utils/customs":929,"../../utils/factory":931,"../../utils/is":933,"../../utils/latex":934,"../../utils/string":941,"../keywords":619,"../operators":638}],627:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createFunctionNode=void 0;var _is=require("../../utils/is"),_string=require("../../utils/string"),_object=require("../../utils/object"),_array=require("../../utils/array"),_customs=require("../../utils/customs"),_factory=require("../../utils/factory"),_latex=require("../../utils/latex");function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}function _extends(){return(_extends=Object.assign||function(target){for(var i=1;i'+(0,_string.escape)(this.fn)+'('+args.join(',')+')'};var nodeToTex=FunctionNode.prototype.toTex;return FunctionNode.prototype.toTex=function(options){var customTex;return options&&"object"===_typeof(options.handler)&&(0,_object.hasOwnProperty)(options.handler,this.name)&&(customTex=options.handler[this.name](this,options)),void 0!==customTex?customTex:nodeToTex.call(this,options)},FunctionNode.prototype._toTex=function(options){var latexConverter,customToTex,args=this.args.map(function(arg){return arg.toTex(options)});switch(_latex.latexFunctions[this.name]&&(latexConverter=_latex.latexFunctions[this.name]),!math[this.name]||"function"!=typeof math[this.name].toTex&&"object"!==_typeof(math[this.name].toTex)&&"string"!=typeof math[this.name].toTex||(latexConverter=math[this.name].toTex),_typeof(latexConverter)){case"function":customToTex=latexConverter(this,options);break;case"string":customToTex=expandTemplate(latexConverter,this,options);break;case"object":switch(_typeof(latexConverter[args.length])){case"function":customToTex=latexConverter[args.length](this,options);break;case"string":customToTex=expandTemplate(latexConverter[args.length],this,options)}}return void 0!==customToTex?customToTex:expandTemplate(_latex.defaultTemplate,this,options)},FunctionNode.prototype.getIdentifier=function(){return this.type+":"+this.name},FunctionNode},{isClass:!0,isNode:!0});exports.createFunctionNode=createFunctionNode},{"../../utils/array":922,"../../utils/customs":929,"../../utils/factory":931,"../../utils/is":933,"../../utils/latex":934,"../../utils/object":938,"../../utils/string":941}],628:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createIndexNode=void 0;var _is=require("../../utils/is"),_array=require("../../utils/array"),_string=require("../../utils/string"),_factory=require("../../utils/factory"),_customs=require("../../utils/customs");function _toConsumableArray(arr){return function(arr){if(Array.isArray(arr))return _arrayLikeToArray(arr)}(arr)||function(iter){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(iter))return Array.from(iter)}(arr)||function(o,minLen){if(!o)return;if("string"==typeof o)return _arrayLikeToArray(o,minLen);var n=Object.prototype.toString.call(o).slice(8,-1);"Object"===n&&o.constructor&&(n=o.constructor.name);if("Map"===n||"Set"===n)return Array.from(o);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return _arrayLikeToArray(o,minLen)}(arr)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function _arrayLikeToArray(arr,len){(null==len||len>arr.length)&&(len=arr.length);for(var i=0,arr2=new Array(len);i.'+(0,_string.escape)(this.getObjectProperty())+"":'['+dimensions.join(',')+']'},IndexNode.prototype._toTex=function(options){var dimensions=this.dimensions.map(function(range){return range.toTex(options)});return this.dotNotation?"."+this.getObjectProperty():"_{"+dimensions.join(",")+"}"},IndexNode},{isClass:!0,isNode:!0});exports.createIndexNode=createIndexNode},{"../../utils/array":922,"../../utils/customs":929,"../../utils/factory":931,"../../utils/is":933,"../../utils/string":941}],629:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createNode=void 0;var _is=require("../../utils/is"),_keywords=require("../keywords"),_object=require("../../utils/object"),_factory=require("../../utils/factory"),_log=require("../../utils/log");function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}var dependencies=["mathWithTransform"],createNode=(0,_factory.factory)("Node",dependencies,function(_ref){var mathWithTransform=_ref.mathWithTransform;function Node(){if(!(this instanceof Node))throw new SyntaxError("Constructor must be called with the new operator")}return Node.prototype.evaluate=function(scope){return this.compile().evaluate(scope)},Node.prototype.eval=function(scope){return(0,_log.warnOnce)("Method Node.eval is renamed to Node.evaluate. Please use the new method name."),this.evaluate(scope)},Node.prototype.type="Node",Node.prototype.isNode=!0,Node.prototype.comment="",Node.prototype.compile=function(){var expr=this._compile(mathWithTransform,{}),args={},context=null;function evaluate(scope){var s=scope||{};return function(scope){for(var symbol in scope)if((0,_object.hasOwnProperty)(scope,symbol)&&symbol in _keywords.keywords)throw new Error('Scope contains an illegal symbol, "'+symbol+'" is a reserved keyword')}(s),expr(s,args,context)}return{evaluate:evaluate,eval:function(scope){return(0,_log.warnOnce)("Method eval is renamed to evaluate. Please use the new method."),evaluate(scope)}}},Node.prototype._compile=function(math,argNames){throw new Error("Method _compile should be implemented by type "+this.type)},Node.prototype.forEach=function(callback){throw new Error("Cannot run forEach on a Node interface")},Node.prototype.map=function(callback){throw new Error("Cannot run map on a Node interface")},Node.prototype._ifNode=function(node){if(!(0,_is.isNode)(node))throw new TypeError("Callback function must return a Node");return node},Node.prototype.traverse=function(callback){callback(this,null,null),function _traverse(node,callback){node.forEach(function(child,path,parent){callback(child,path,parent),_traverse(child,callback)})}(this,callback)},Node.prototype.transform=function(callback){return function _transform(child,path,parent){var replacement=callback(child,path,parent);return replacement!==child?replacement:child.map(_transform)}(this,null,null)},Node.prototype.filter=function(callback){var nodes=[];return this.traverse(function(node,path,parent){callback(node,path,parent)&&nodes.push(node)}),nodes},Node.prototype.find=function(){throw new Error("Function Node.find is deprecated. Use Node.filter instead.")},Node.prototype.match=function(){throw new Error("Function Node.match is deprecated. See functions Node.filter, Node.transform, Node.traverse.")},Node.prototype.clone=function(){throw new Error("Cannot clone a Node interface")},Node.prototype.cloneDeep=function(){return this.map(function(node){return node.cloneDeep()})},Node.prototype.equals=function(other){return!!other&&(0,_object.deepStrictEqual)(this,other)},Node.prototype.toString=function(options){var customString;if(options&&"object"===_typeof(options))switch(_typeof(options.handler)){case"object":case"undefined":break;case"function":customString=options.handler(this,options);break;default:throw new TypeError("Object or function expected as callback")}return void 0!==customString?customString:this._toString(options)},Node.prototype.toJSON=function(){throw new Error("Cannot serialize object: toJSON not implemented by "+this.type)},Node.prototype.toHTML=function(options){var customString;if(options&&"object"===_typeof(options))switch(_typeof(options.handler)){case"object":case"undefined":break;case"function":customString=options.handler(this,options);break;default:throw new TypeError("Object or function expected as callback")}return void 0!==customString?customString:this.toHTML(options)},Node.prototype._toString=function(){throw new Error("_toString not implemented for "+this.type)},Node.prototype.toTex=function(options){var customTex;if(options&&"object"===_typeof(options))switch(_typeof(options.handler)){case"object":case"undefined":break;case"function":customTex=options.handler(this,options);break;default:throw new TypeError("Object or function expected as callback")}return void 0!==customTex?customTex:this._toTex(options)},Node.prototype._toTex=function(options){throw new Error("_toTex not implemented for "+this.type)},Node.prototype.getIdentifier=function(){return this.type},Node.prototype.getContent=function(){return this},Node},{isClass:!0,isNode:!0});exports.createNode=createNode},{"../../utils/factory":931,"../../utils/is":933,"../../utils/log":935,"../../utils/object":938,"../keywords":619}],630:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createObjectNode=void 0;var _is=require("../../utils/is"),_string=require("../../utils/string"),_customs=require("../../utils/customs"),_object=require("../../utils/object");function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}var dependencies=["Node"],createObjectNode=(0,require("../../utils/factory").factory)("ObjectNode",dependencies,function(_ref){var Node=_ref.Node;function ObjectNode(properties){if(!(this instanceof ObjectNode))throw new SyntaxError("Constructor must be called with the new operator");if(this.properties=properties||{},properties&&("object"!==_typeof(properties)||!Object.keys(properties).every(function(key){return(0,_is.isNode)(properties[key])})))throw new TypeError("Object containing Nodes expected")}return(ObjectNode.prototype=new Node).type="ObjectNode",ObjectNode.prototype.isObjectNode=!0,ObjectNode.prototype._compile=function(math,argNames){var evalEntries={};for(var key in this.properties)if((0,_object.hasOwnProperty)(this.properties,key)){var stringifiedKey=(0,_string.stringify)(key),parsedKey=JSON.parse(stringifiedKey);if(!(0,_customs.isSafeProperty)(this.properties,parsedKey))throw new Error('No access to property "'+parsedKey+'"');evalEntries[parsedKey]=this.properties[key]._compile(math,argNames)}return function(scope,args,context){var obj={};for(var _key in evalEntries)(0,_object.hasOwnProperty)(evalEntries,_key)&&(obj[_key]=evalEntries[_key](scope,args,context));return obj}},ObjectNode.prototype.forEach=function(callback){for(var key in this.properties)(0,_object.hasOwnProperty)(this.properties,key)&&callback(this.properties[key],"properties["+(0,_string.stringify)(key)+"]",this)},ObjectNode.prototype.map=function(callback){var properties={};for(var key in this.properties)(0,_object.hasOwnProperty)(this.properties,key)&&(properties[key]=this._ifNode(callback(this.properties[key],"properties["+(0,_string.stringify)(key)+"]",this)));return new ObjectNode(properties)},ObjectNode.prototype.clone=function(){var properties={};for(var key in this.properties)(0,_object.hasOwnProperty)(this.properties,key)&&(properties[key]=this.properties[key]);return new ObjectNode(properties)},ObjectNode.prototype._toString=function(options){var entries=[];for(var key in this.properties)(0,_object.hasOwnProperty)(this.properties,key)&&entries.push((0,_string.stringify)(key)+": "+this.properties[key].toString(options));return"{"+entries.join(", ")+"}"},ObjectNode.prototype.toJSON=function(){return{mathjs:"ObjectNode",properties:this.properties}},ObjectNode.fromJSON=function(json){return new ObjectNode(json.properties)},ObjectNode.prototype.toHTML=function(options){var entries=[];for(var key in this.properties)(0,_object.hasOwnProperty)(this.properties,key)&&entries.push(''+(0,_string.escape)(key)+':'+this.properties[key].toHTML(options));return'{'+entries.join(',')+'}'},ObjectNode.prototype._toTex=function(options){var entries=[];for(var key in this.properties)(0,_object.hasOwnProperty)(this.properties,key)&&entries.push("\\mathbf{"+key+":} & "+this.properties[key].toTex(options)+"\\\\");return"\\left\\{\\begin{array}{ll}".concat(entries.join("\n"),"\\end{array}\\right\\}")},ObjectNode},{isClass:!0,isNode:!0});exports.createObjectNode=createObjectNode},{"../../utils/customs":929,"../../utils/factory":931,"../../utils/is":933,"../../utils/object":938,"../../utils/string":941}],631:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createOperatorNode=void 0;var _is=require("../../utils/is"),_array=require("../../utils/array"),_string=require("../../utils/string"),_customs=require("../../utils/customs"),_operators=require("../operators"),_latex=require("../../utils/latex"),dependencies=["Node"],createOperatorNode=(0,require("../../utils/factory").factory)("OperatorNode",dependencies,function(_ref){var Node=_ref.Node;function OperatorNode(op,fn,args,implicit){if(!(this instanceof OperatorNode))throw new SyntaxError("Constructor must be called with the new operator");if("string"!=typeof op)throw new TypeError('string expected for parameter "op"');if("string"!=typeof fn)throw new TypeError('string expected for parameter "fn"');if(!Array.isArray(args)||!args.every(_is.isNode))throw new TypeError('Array containing Nodes expected for parameter "args"');this.implicit=!0===implicit,this.op=op,this.fn=fn,this.args=args||[]}function calculateNecessaryParentheses(root,parenthesis,implicit,args,latex){var result,precedence=(0,_operators.getPrecedence)(root,parenthesis),associativity=(0,_operators.getAssociativity)(root,parenthesis);if("all"===parenthesis||2)'),"right"===assoc?''+(0,_string.escape)(this.op)+""+operand:operand+''+(0,_string.escape)(this.op)+""}if(2===args.length){var lhs=args[0].toHTML(options),rhs=args[1].toHTML(options);return parens[0]&&(lhs='('+lhs+')'),parens[1]&&(rhs='('+rhs+')'),this.implicit&&"OperatorNode:multiply"===this.getIdentifier()&&"hide"===implicit?lhs+''+rhs:lhs+''+(0,_string.escape)(this.op)+""+rhs}var stringifiedArgs=args.map(function(arg,index){return arg=arg.toHTML(options),parens[index]&&(arg='('+arg+')'),arg});return 2'):stringifiedArgs.join(''+(0,_string.escape)(this.op)+""):''+(0,_string.escape)(this.fn)+'('+stringifiedArgs.join(',')+')'},OperatorNode.prototype._toTex=function(options){var parenthesis=options&&options.parenthesis?options.parenthesis:"keep",implicit=options&&options.implicit?options.implicit:"hide",args=this.args,parens=calculateNecessaryParentheses(this,parenthesis,implicit,args,!0),op=void 0===(op=_latex.latexOperators[this.fn])?this.op:op;if(1===args.length){var assoc=(0,_operators.getAssociativity)(this,parenthesis),operand=args[0].toTex(options);return parens[0]&&(operand="\\left(".concat(operand,"\\right)")),"right"===assoc?op+operand:operand+op}if(2===args.length){var lhs=args[0],lhsTex=lhs.toTex(options);parens[0]&&(lhsTex="\\left(".concat(lhsTex,"\\right)"));var lhsIdentifier,rhsTex=args[1].toTex(options);switch(parens[1]&&(rhsTex="\\left(".concat(rhsTex,"\\right)")),lhsIdentifier="keep"===parenthesis?lhs.getIdentifier():lhs.getContent().getIdentifier(),this.getIdentifier()){case"OperatorNode:divide":return op+"{"+lhsTex+"}{"+rhsTex+"}";case"OperatorNode:pow":switch(lhsTex="{"+lhsTex+"}",rhsTex="{"+rhsTex+"}",lhsIdentifier){case"ConditionalNode":case"OperatorNode:divide":lhsTex="\\left(".concat(lhsTex,"\\right)")}break;case"OperatorNode:multiply":if(this.implicit&&"hide"===implicit)return lhsTex+"~"+rhsTex}return lhsTex+op+rhsTex}if(2('+this.content.toHTML(options)+')':this.content.toHTML(options)},ParenthesisNode.prototype._toTex=function(options){return!options||options&&!options.parenthesis||options&&"keep"===options.parenthesis?"\\left(".concat(this.content.toTex(options),"\\right)"):this.content.toTex(options)},ParenthesisNode},{isClass:!0,isNode:!0});exports.createParenthesisNode=createParenthesisNode},{"../../utils/factory":931,"../../utils/is":933}],633:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createRangeNode=void 0;var _is=require("../../utils/is"),_factory=require("../../utils/factory"),_operators=require("../operators"),dependencies=["Node"],createRangeNode=(0,_factory.factory)("RangeNode",dependencies,function(_ref){var Node=_ref.Node;function RangeNode(start,end,step){if(!(this instanceof RangeNode))throw new SyntaxError("Constructor must be called with the new operator");if(!(0,_is.isNode)(start))throw new TypeError("Node expected");if(!(0,_is.isNode)(end))throw new TypeError("Node expected");if(step&&!(0,_is.isNode)(step))throw new TypeError("Node expected");if(3('+start+')'),str=start,this.step&&(step=this.step.toHTML(options),parens.step&&(step='('+step+')'),str+=':'+step);var end=this.end.toHTML(options);return parens.end&&(end='('+end+')'),str+=':'+end},RangeNode.prototype._toTex=function(options){var step,parens=calculateNecessaryParentheses(this,options&&options.parenthesis?options.parenthesis:"keep"),str=this.start.toTex(options);parens.start&&(str="\\left(".concat(str,"\\right)")),this.step&&(step=this.step.toTex(options),parens.step&&(step="\\left(".concat(step,"\\right)")),str+=":"+step);var end=this.end.toTex(options);return parens.end&&(end="\\left(".concat(end,"\\right)")),str+=":"+end},RangeNode},{isClass:!0,isNode:!0});exports.createRangeNode=createRangeNode},{"../../utils/factory":931,"../../utils/is":933,"../operators":638}],634:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createRelationalNode=void 0;var _operators=require("../operators"),_string=require("../../utils/string"),_customs=require("../../utils/customs"),_latex=require("../../utils/latex"),dependencies=["Node"],createRelationalNode=(0,require("../../utils/factory").factory)("RelationalNode",dependencies,function(_ref){var Node=_ref.Node;function RelationalNode(conditionals,params){if(!(this instanceof RelationalNode))throw new SyntaxError("Constructor must be called with the new operator");if(!Array.isArray(conditionals))throw new TypeError("Parameter conditionals must be an array");if(!Array.isArray(params))throw new TypeError("Parameter params must be an array");if(conditionals.length!==params.length-1)throw new TypeError("Parameter params must contain exactly one more element than parameter conditionals");this.conditionals=conditionals,this.params=params}return(RelationalNode.prototype=new Node).type="RelationalNode",RelationalNode.prototype.isRelationalNode=!0,RelationalNode.prototype._compile=function(math,argNames){var self=this,compiled=this.params.map(function(p){return p._compile(math,argNames)});return function(scope,args,context){for(var evalRhs=compiled[0](scope,args,context),i=0;i",smallerEq:"<=",largerEq:">="},ret=paramStrings[0],i=0;i('+p.toHTML(options)+')':p.toHTML(options)}),operatorMap={equal:"==",unequal:"!=",smaller:"<",larger:">",smallerEq:"<=",largerEq:">="},ret=paramStrings[0],i=0;i'+(0,_string.escape)(operatorMap[this.conditionals[i]])+""+paramStrings[i+1];return ret},RelationalNode.prototype._toTex=function(options){for(var parenthesis=options&&options.parenthesis?options.parenthesis:"keep",precedence=(0,_operators.getPrecedence)(this,parenthesis),paramStrings=this.params.map(function(p,index){var paramPrecedence=(0,_operators.getPrecedence)(p,parenthesis);return"all"===parenthesis||null!==paramPrecedence&¶mPrecedence<=precedence?"\\left("+p.toTex(options)+"\right)":p.toTex(options)}),ret=paramStrings[0],i=0;i'+name+"":"i"===name?''+name+"":"Infinity"===name?''+name+"":"NaN"===name?''+name+"":"null"===name?''+name+"":"undefined"===name?''+name+"":''+name+""},SymbolNode.prototype.toJSON=function(){return{mathjs:"SymbolNode",name:this.name}},SymbolNode.fromJSON=function(json){return new SymbolNode(json.name)},SymbolNode.prototype._toTex=function(options){var isUnit=!1;void 0===math[this.name]&&isValuelessUnit(this.name)&&(isUnit=!0);var symbol=(0,_latex.toSymbol)(this.name,isUnit);return"\\"===symbol[0]?symbol:" "+symbol},SymbolNode},{isClass:!0,isNode:!0});exports.createSymbolNode=createSymbolNode},{"../../utils/customs":929,"../../utils/factory":931,"../../utils/latex":934,"../../utils/string":941}],636:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.accessFactory=function(_ref){var subset=_ref.subset;return function(object,index){try{if(Array.isArray(object))return subset(object,index);if(object&&"function"==typeof object.subset)return object.subset(index);if("string"==typeof object)return subset(object,index);if("object"!==_typeof(object))throw new TypeError("Cannot apply index: unsupported type of object");if(!index.isObjectProperty())throw new TypeError("Cannot apply a numeric index as object property");return(0,_customs.getSafeProperty)(object,index.getObjectProperty())}catch(err){throw(0,_errorTransform.errorTransform)(err)}}};var _errorTransform=require("../../transform/utils/errorTransform"),_customs=require("../../../utils/customs");function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}},{"../../../utils/customs":929,"../../transform/utils/errorTransform":656}],637:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.assignFactory=function(_ref){var subset=_ref.subset,matrix=_ref.matrix;return function(object,index,value){try{if(Array.isArray(object))return matrix(object).subset(index,value).valueOf();if(object&&"function"==typeof object.subset)return object.subset(index,value);if("string"==typeof object)return subset(object,index,value);if("object"!==_typeof(object))throw new TypeError("Cannot apply index: unsupported type of object");if(!index.isObjectProperty())throw TypeError("Cannot apply a numeric index as object property");return(0,_customs.setSafeProperty)(object,index.getObjectProperty(),value),object}catch(err){throw(0,_errorTransform.errorTransform)(err)}}};var _errorTransform=require("../../transform/utils/errorTransform"),_customs=require("../../../utils/customs");function _typeof(obj){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj})(obj)}},{"../../../utils/customs":929,"../../transform/utils/errorTransform":656}],638:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.getPrecedence=getPrecedence,exports.getAssociativity=function(_node,parenthesis){var node=_node;"keep"!==parenthesis&&(node=_node.getContent());var identifier=node.getIdentifier(),index=getPrecedence(node,parenthesis);if(null===index)return null;var property=properties[index][identifier];if((0,_object.hasOwnProperty)(property,"associativity")){if("left"===property.associativity)return"left";if("right"===property.associativity)return"right";throw Error("'"+identifier+"' has the invalid associativity '"+property.associativity+"'.")}return null},exports.isAssociativeWith=function(nodeA,nodeB,parenthesis){var a="keep"!==parenthesis?nodeA.getContent():nodeA,b="keep"!==parenthesis?nodeA.getContent():nodeB,identifierA=a.getIdentifier(),identifierB=b.getIdentifier(),index=getPrecedence(a,parenthesis);if(null===index)return null;var property=properties[index][identifierA];if((0,_object.hasOwnProperty)(property,"associativeWith")&&property.associativeWith instanceof Array){for(var i=0;i":!0,"<=":!0,">=":!0,"<<":!0,">>":!0,">>>":!0},NAMED_DELIMITERS={mod:!0,to:!0,in:!0,and:!0,xor:!0,or:!0,not:!0},CONSTANTS={true:!0,false:!1,null:null,undefined:void 0},NUMERIC_CONSTANTS=["NaN","Infinity"];function currentString(state,length){return state.expression.substr(state.index,length)}function currentCharacter(state){return currentString(state,1)}function next(state){state.index++}function prevCharacter(state){return state.expression.charAt(state.index-1)}function nextCharacter(state){return state.expression.charAt(state.index+1)}function getToken(state){for(state.tokenType=TOKENTYPE.NULL,state.token="",state.comment="";parse.isWhitespace(currentCharacter(state),state.nestingLevel);)next(state);if("#"===currentCharacter(state))for(;"\n"!==currentCharacter(state)&&""!==currentCharacter(state);)state.comment+=currentCharacter(state),next(state);if(""!==currentCharacter(state)){if("\n"===currentCharacter(state)&&!state.nestingLevel)return state.tokenType=TOKENTYPE.DELIMITER,state.token=currentCharacter(state),void next(state);var c1=currentCharacter(state),c2=currentString(state,2),c3=currentString(state,3);if(3===c3.length&&DELIMITERS[c3])return state.tokenType=TOKENTYPE.DELIMITER,state.token=c3,next(state),next(state),void next(state);if(2===c2.length&&DELIMITERS[c2])return state.tokenType=TOKENTYPE.DELIMITER,state.token=c2,next(state),void next(state);if(DELIMITERS[c1])return state.tokenType=TOKENTYPE.DELIMITER,state.token=c1,void next(state);if(parse.isDigitDot(c1)){if(state.tokenType=TOKENTYPE.NUMBER,"."===currentCharacter(state))state.token+=currentCharacter(state),next(state),parse.isDigit(currentCharacter(state))||(state.tokenType=TOKENTYPE.DELIMITER);else{for(;parse.isDigit(currentCharacter(state));)state.token+=currentCharacter(state),next(state);parse.isDecimalMark(currentCharacter(state),nextCharacter(state))&&(state.token+=currentCharacter(state),next(state))}for(;parse.isDigit(currentCharacter(state));)state.token+=currentCharacter(state),next(state);if("E"===currentCharacter(state)||"e"===currentCharacter(state))if(parse.isDigit(nextCharacter(state))||"-"===nextCharacter(state)||"+"===nextCharacter(state)){if(state.token+=currentCharacter(state),next(state),"+"!==currentCharacter(state)&&"-"!==currentCharacter(state)||(state.token+=currentCharacter(state),next(state)),!parse.isDigit(currentCharacter(state)))throw createSyntaxError(state,'Digit expected, got "'+currentCharacter(state)+'"');for(;parse.isDigit(currentCharacter(state));)state.token+=currentCharacter(state),next(state);if(parse.isDecimalMark(currentCharacter(state),nextCharacter(state)))throw createSyntaxError(state,'Digit expected, got "'+currentCharacter(state)+'"')}else if("."===nextCharacter(state))throw next(state),createSyntaxError(state,'Digit expected, got "'+currentCharacter(state)+'"')}else{if(!parse.isAlpha(currentCharacter(state),prevCharacter(state),nextCharacter(state))){for(state.tokenType=TOKENTYPE.UNKNOWN;""!==currentCharacter(state);)state.token+=currentCharacter(state),next(state);throw createSyntaxError(state,'Syntax error in part "'+state.token+'"')}for(;parse.isAlpha(currentCharacter(state),prevCharacter(state),nextCharacter(state))||parse.isDigit(currentCharacter(state));)state.token+=currentCharacter(state),next(state);(0,_object.hasOwnProperty)(NAMED_DELIMITERS,state.token)?state.tokenType=TOKENTYPE.DELIMITER:state.tokenType=TOKENTYPE.SYMBOL}}else state.tokenType=TOKENTYPE.DELIMITER}function getTokenSkipNewline(state){for(;getToken(state),"\n"===state.token;);}function openParams(state){state.nestingLevel++}function closeParams(state){state.nestingLevel--}function parseStart(expression,extraNodes){var state={extraNodes:{},expression:"",comment:"",index:0,token:"",tokenType:TOKENTYPE.NULL,nestingLevel:0,conditionalLevel:null};_extends(state,{expression:expression,extraNodes:extraNodes}),getToken(state);var node=function(state){var node,visible,blocks=[];""!==state.token&&"\n"!==state.token&&";"!==state.token&&((node=parseAssignment(state)).comment=state.comment);for(;"\n"===state.token||";"===state.token;)0===blocks.length&&node&&(visible=";"!==state.token,blocks.push({node:node,visible:visible})),getToken(state),"\n"!==state.token&&";"!==state.token&&""!==state.token&&((node=parseAssignment(state)).comment=state.comment,visible=";"!==state.token,blocks.push({node:node,visible:visible}));return 0":"larger","<=":"smallerEq",">=":"largerEq"};(0,_object.hasOwnProperty)(operators,state.token);){var cond={name:state.token,fn:operators[state.token]};conditionals.push(cond),getTokenSkipNewline(state),params.push(parseShift(state))}return 1===params.length?params[0]:2===params.length?new OperatorNode(conditionals[0].name,conditionals[0].fn,params):new RelationalNode(conditionals.map(function(c){return c.fn}),params)}function parseShift(state){for(var name,fn,params,node=parseConversion(state),operators={"<<":"leftShift",">>":"rightArithShift",">>>":"rightLogShift"};(0,_object.hasOwnProperty)(operators,state.token);)fn=operators[name=state.token],getTokenSkipNewline(state),params=[node,parseConversion(state)],node=new OperatorNode(name,fn,params);return node}function parseConversion(state){for(var name,fn,params,node=parseRange(state),operators={to:"to",in:"to"};(0,_object.hasOwnProperty)(operators,state.token);)fn=operators[name=state.token],getTokenSkipNewline(state),node="in"===name&&""===state.token?new OperatorNode("*","multiply",[node,new SymbolNode("in")],!0):(params=[node,parseRange(state)],new OperatorNode(name,fn,params));return node}function parseRange(state){var params=[],node=":"===state.token?new ConstantNode(1):parseAddSubtract(state);if(":"===state.token&&state.conditionalLevel!==state.nestingLevel){for(params.push(node);":"===state.token&¶ms.length<3;)getTokenSkipNewline(state),")"===state.token||"]"===state.token||","===state.token||""===state.token?params.push(new SymbolNode("end")):params.push(parseAddSubtract(state));node=3===params.length?new RangeNode(params[0],params[2],params[1]):new RangeNode(params[0],params[1])}return node}function parseAddSubtract(state){for(var name,fn,params,node=parseMultiplyDivide(state),operators={"+":"add","-":"subtract"};(0,_object.hasOwnProperty)(operators,state.token);)fn=operators[name=state.token],getTokenSkipNewline(state),params=[node,parseMultiplyDivide(state)],node=new OperatorNode(name,fn,params);return node}function parseMultiplyDivide(state){for(var name,fn,last,node=parseImplicitMultiplication(state),operators={"*":"multiply",".*":"dotMultiply","/":"divide","./":"dotDivide","%":"mod",mod:"mod"};(0,_object.hasOwnProperty)(operators,state.token);)fn=operators[name=state.token],getTokenSkipNewline(state),last=parseImplicitMultiplication(state),node=new OperatorNode(name,fn,[node,last]);return node}function parseImplicitMultiplication(state){for(var node=parseRule2(state),last=node;state.tokenType===TOKENTYPE.SYMBOL||"in"===state.token&&(0,_is.isConstantNode)(node)||!(state.tokenType!==TOKENTYPE.NUMBER||(0,_is.isConstantNode)(last)||(0,_is.isOperatorNode)(last)&&"!"!==last.op)||"("===state.token;)last=parseRule2(state),node=new OperatorNode("*","multiply",[node,last],!0);return node}function parseRule2(state){for(var node=parseUnary(state),last=node,tokenStates=[];"/"===state.token&&(0,_is.isConstantNode)(last);){if(tokenStates.push(_extends({},state)),getTokenSkipNewline(state),state.tokenType!==TOKENTYPE.NUMBER){_extends(state,tokenStates.pop());break}if(tokenStates.push(_extends({},state)),getTokenSkipNewline(state),state.tokenType!==TOKENTYPE.SYMBOL&&"("!==state.token){tokenStates.pop(),_extends(state,tokenStates.pop());break}_extends(state,tokenStates.pop()),tokenStates.pop(),last=parseUnary(state),node=new OperatorNode("/","divide",[node,last])}return node}function parseUnary(state){var name,params,fn,operators={"-":"unaryMinus","+":"unaryPlus","~":"bitNot",not:"not"};return(0,_object.hasOwnProperty)(operators,state.token)?(fn=operators[state.token],name=state.token,getTokenSkipNewline(state),params=[parseUnary(state)],new OperatorNode(name,fn,params)):function(state){var node,name,fn,params;node=function(state){var node,name,fn;node=function(state){var params=[];if(state.tokenType===TOKENTYPE.SYMBOL&&(0,_object.hasOwnProperty)(state.extraNodes,state.token)){var CustomNode=state.extraNodes[state.token];if(getToken(state),"("===state.token){if(params=[],openParams(state),getToken(state),")"!==state.token)for(params.push(parseAssignment(state));","===state.token;)getToken(state),params.push(parseAssignment(state));if(")"!==state.token)throw createSyntaxError(state,"Parenthesis ) expected");closeParams(state),getToken(state)}return new CustomNode(params)}return function(state){var node,name;if(state.tokenType===TOKENTYPE.SYMBOL||state.tokenType===TOKENTYPE.DELIMITER&&state.token in NAMED_DELIMITERS)return name=state.token,getToken(state),node=(0,_object.hasOwnProperty)(CONSTANTS,name)?new ConstantNode(CONSTANTS[name]):-1!==NUMERIC_CONSTANTS.indexOf(name)?new ConstantNode(numeric(name,"number")):new SymbolNode(name),node=parseAccessors(state,node);return function(state){var node,str;return'"'!==state.token?function(state){var node,str;return"'"!==state.token?function(state){var array,params,rows,cols;if("["!==state.token)return function(state){if("{"!==state.token)return function(state){var numberStr;return state.tokenType!==TOKENTYPE.NUMBER?function(state){var node;if("("!==state.token)return function(state){throw""===state.token?createSyntaxError(state,"Unexpected end of expression"):createSyntaxError(state,"Value expected")}(state);if(openParams(state),getToken(state),node=parseAssignment(state),")"===state.token)return closeParams(state),getToken(state),node=new ParenthesisNode(node),node=parseAccessors(state,node);throw createSyntaxError(state,"Parenthesis ) expected")}(state):(numberStr=state.token,getToken(state),new ConstantNode(numeric(numberStr,config.number)))}(state);var key;openParams(state);var properties={};do{if(getToken(state),"}"!==state.token){if('"'===state.token)key=parseDoubleQuotesStringToken(state);else if("'"===state.token)key=parseSingleQuotesStringToken(state);else{if(!(state.tokenType===TOKENTYPE.SYMBOL||state.tokenType===TOKENTYPE.DELIMITER&&state.token in NAMED_DELIMITERS))throw createSyntaxError(state,"Symbol or string expected as object key");key=state.token,getToken(state)}if(":"!==state.token)throw createSyntaxError(state,"Colon : expected after object key");getToken(state),properties[key]=parseAssignment(state)}}while(","===state.token);if("}"!==state.token)throw createSyntaxError(state,"Comma , or bracket } expected after object value");closeParams(state),getToken(state);var node=new ObjectNode(properties);return node=parseAccessors(state,node)}(state);if(openParams(state),getToken(state),"]"!==state.token){var row=parseRow(state);if(";"===state.token){for(rows=1,params=[row];";"===state.token;)getToken(state),params[rows]=parseRow(state),rows++;if("]"!==state.token)throw createSyntaxError(state,"End of matrix ] expected");closeParams(state),getToken(state),cols=params[0].items.length;for(var r=1;r");if(2!==lr.length)throw SyntaxError("Could not parse rule: "+rule);rule={l:lr[0],r:lr[1]};case"object":newRule={l:removeParens(parse(rule.l)),r:removeParens(parse(rule.r))},rule.context&&(newRule.evaluate=rule.context),rule.evaluate&&(newRule.evaluate=parse(rule.evaluate)),isAssociative(newRule.l)&&(makeNode=createMakeNodeFunction(newRule.l),expandsym=new SymbolNode("_p"+_lastsym++),newRule.expanded={},newRule.expanded.l=makeNode([newRule.l.clone(),expandsym]),flatten(newRule.expanded.l),unflattenr(newRule.expanded.l),newRule.expanded.r=makeNode([newRule.r,expandsym]));break;case"function":newRule=rule;break;default:throw TypeError("Unsupported type of rule: "+ruleType)}ruleSet.push(newRule)}return ruleSet}(rules);for(var res=resolve(expr,scope),visited={},str=(res=removeParens(res)).toString({parenthesis:"all"});!visited[str];){visited[str]=!0;for(var i=_lastsym=0;idense))for(var p1=tptr[j+1];p=mark?W[w+e]-=nvi:0!==W[w+e]&&(W[w+e]=W[degree+e]+wnvi);for(pk=pk1;pk>=1,px=multiply(px,px);return res}function _powMatrix(x,y){return matrix(_powArray(x.valueOf(),y))}});exports.createPow=createPow},{"../../plain/number":874,"../../utils/array":922,"../../utils/factory":931,"../../utils/number":937}],720:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createRoundNumber=exports.createRound=void 0;var _factory=require("../../utils/factory"),_collection=require("../../utils/collection"),_number=require("../../utils/number"),_algorithm=require("../../type/matrix/utils/algorithm11"),_algorithm2=require("../../type/matrix/utils/algorithm12"),_algorithm3=require("../../type/matrix/utils/algorithm14"),_number2=require("../../plain/number");function ownKeys(object,enumerableOnly){var symbols,keys=Object.keys(object);return Object.getOwnPropertySymbols&&(symbols=Object.getOwnPropertySymbols(object),enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable})),keys.push.apply(keys,symbols)),keys}function _objectSpread(target){for(var i=1;i=size.length)throw new _IndexError.IndexError(dim,size.length);return(0,_is.isMatrix)(mat)?mat.create(_apply(mat.valueOf(),dim,callback)):_apply(mat,dim,callback)}})});function _apply(mat,dim,callback){var i,ret,tran;if(dim<=0){if(Array.isArray(mat[0])){for(tran=function(mat){var i,j,I=mat.length,J=mat[0].length,ret=[];for(j=0;j=abs(e0);){var _i3=Vab[0][0],j=Vab[0][1];psi=function(aii,ajj,aij){var denom=subtract(ajj,aii);return abs(denom)<=config.epsilon?bignumber(-1).acos().div(4):multiplyScalar(.5,atan(multiply(2,aij,inv(denom))))}(x[_i3][_i3],x[j][j],x[_i3][j]),x=function(Hij,theta,i,j){for(var N=Hij.length,c=bignumber(cos(theta)),s=bignumber(sin(theta)),c2=multiplyScalar(c,c),s2=multiplyScalar(s,s),Aki=createArray(N,bignumber(0)),Akj=createArray(N,bignumber(0)),csHij=multiply(bignumber(2),c,s,Hij[i][j]),Aii=addScalar(subtract(multiplyScalar(c2,Hij[i][i]),csHij),multiplyScalar(s2,Hij[j][j])),Ajj=add(multiplyScalar(s2,Hij[i][i]),csHij,multiplyScalar(c2,Hij[j][j])),k=0;k=Math.abs(e0);){var _i=Vab[0][0],j=Vab[0][1];aii=x[_i][_i],ajj=x[j][j],aij=x[_i][j],denom=void 0,denom=ajj-aii,x=function(Hij,theta,i,j){for(var N=Hij.length,c=Math.cos(theta),s=Math.sin(theta),c2=c*c,s2=s*s,Aki=createArray(N,0),Akj=createArray(N,0),Aii=c2*Hij[i][i]-2*c*s*Hij[i][j]+s2*Hij[j][j],Ajj=s2*Hij[i][i]+2*c*s*Hij[i][j]+c2*Hij[j][j],k=0;kABig&&(ABig=abs(A[r][c]),rBig=r),r++;if(0===ABig)throw Error("Cannot calculate inverse, determinant is zero");(r=rBig)!==c&&(temp=A[c],A[c]=A[r],A[r]=temp,temp=B[c],B[c]=B[r],B[r]=temp);var Ac=A[c],Bc=B[c];for(r=0;r=arr.length)throw new Error("k out of bounds");for(var i=0;ilen)return str.substring(0,len);if(str.length_maxIterations)throw new Error("computing square root of matrix: iterative method could not converge")}while(_tolerancestrLen)for(var _i=strLen-1,_len=chars.length;_i<_len;_i++)chars[_i]||(chars[_i]=defaultValue);return chars.join("")}function _getObjectProperty(object,index){if(1!==index.size().length)throw new _DimensionError.DimensionError(index.size(),1);var key=index.dimension(0);if("string"!=typeof key)throw new TypeError("String expected as index to retrieve an object property");return(0,_customs.getSafeProperty)(object,key)}function _setObjectProperty(object,index,replacement){if(1!==index.size().length)throw new _DimensionError.DimensionError(index.size(),1);var key=index.dimension(0);if("string"!=typeof key)throw new TypeError("String expected as index to retrieve an object property");var updated=(0,_object.clone)(object);return(0,_customs.setSafeProperty)(updated,key,replacement),updated}exports.createSubset=createSubset},{"../../error/DimensionError":399,"../../utils/array":922,"../../utils/customs":929,"../../utils/factory":931,"../../utils/is":933,"../../utils/object":938}],779:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createTrace=void 0;var _object=require("../../utils/object"),_string=require("../../utils/string"),dependencies=["typed","matrix","add"],createTrace=(0,require("../../utils/factory").factory)("trace",dependencies,function(_ref){var typed=_ref.typed,matrix=_ref.matrix,add=_ref.add;return typed("trace",{Array:function(x){return _denseTrace(matrix(x))},SparseMatrix:function(m){var values=m._values,index=m._index,ptr=m._ptr,size=m._size,rows=size[0],columns=size[1];if(rows!==columns)throw new RangeError("Matrix must be square (size: "+(0,_string.format)(size)+")");var sum=0;if(0y.re)return 1;if(x.rey.im)return 1;if(x.imy.length?1:x.lengtharray[j+1].length&&(temp=array[j],array[j]=array[j+1],array[j+1]=temp);return array}(result)}})});exports.createSetPowerset=createSetPowerset},{"../../utils/array":922,"../../utils/factory":931}],813:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createSetSize=void 0;var _array=require("../../utils/array"),_factory=require("../../utils/factory"),dependencies=["typed","compareNatural"],createSetSize=(0,_factory.factory)("setSize",dependencies,function(_ref){var typed=_ref.typed,compareNatural=_ref.compareNatural;return typed("setSize",{"Array | Matrix":function(a){return Array.isArray(a)?(0,_array.flatten)(a).length:(0,_array.flatten)(a.toArray()).length},"Array | Matrix, boolean":function(a,unique){if(!1===unique||0===a.length)return Array.isArray(a)?(0,_array.flatten)(a).length:(0,_array.flatten)(a.toArray()).length;for(var b=(0,_array.flatten)(Array.isArray(a)?a:a.toArray()).sort(compareNatural),count=1,i=1;imax&&(max=count[value],mode=[value])}return mode}});exports.createMode=createMode},{"../../utils/array":922,"../../utils/factory":931}],823:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createProd=void 0;var _collection=require("../../utils/collection"),_factory=require("../../utils/factory"),_improveErrorMessage=require("./utils/improveErrorMessage"),dependencies=["typed","multiply"],createProd=(0,_factory.factory)("prod",dependencies,function(_ref){var typed=_ref.typed,multiply=_ref.multiply;return typed("prod",{"Array | Matrix":_prod,"Array | Matrix, number | BigNumber":function(){throw new Error("prod(A, dim) is not yet supported")},"...":_prod});function _prod(array){var prod;if((0,_collection.deepForEach)(array,function(value){try{prod=void 0===prod?value:multiply(prod,value)}catch(err){throw(0,_improveErrorMessage.improveErrorMessage)(err,"prod",value)}}),void 0===prod)throw new Error("Cannot calculate prod of an empty array");return prod}});exports.createProd=createProd},{"../../utils/collection":927,"../../utils/factory":931,"./utils/improveErrorMessage":827}],824:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createQuantileSeq=void 0;var _is=require("../../utils/is"),_number=require("../../utils/number"),_array=require("../../utils/array"),dependencies=["typed","add","multiply","partitionSelect","compare"],createQuantileSeq=(0,require("../../utils/factory").factory)("quantileSeq",dependencies,function(_ref){var typed=_ref.typed,add=_ref.add,multiply=_ref.multiply,partitionSelect=_ref.partitionSelect,compare=_ref.compare;function _quantileSeq(array,prob,sorted){var flat=(0,_array.flatten)(array),len=flat.length;if(0===len)throw new Error("Cannot calculate quantile of an empty sequence");if((0,_is.isNumber)(prob)){var _index=prob*(len-1),_fracPart=_index%1;if(0==_fracPart){var value=sorted?flat[_index]:partitionSelect(flat,_index);return validate(value),value}var _left,_right,_integerPart=Math.floor(_index);if(sorted)_left=flat[_integerPart],_right=flat[_integerPart+1];else{_right=partitionSelect(flat,_integerPart+1),_left=flat[_integerPart];for(var i=0;i<_integerPart;++i)0>y}function rightLogShiftNumber(x,y){if(!(0,_number.isInteger)(x)||!(0,_number.isInteger)(y))throw new Error("Integers expected in function rightLogShift");return x>>>y}bitAndNumber.signature=n2,bitNotNumber.signature="number",rightLogShiftNumber.signature=rightArithShiftNumber.signature=leftShiftNumber.signature=bitXorNumber.signature=bitOrNumber.signature=n2},{"../../utils/number":937}],872:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.combinationsNumber=combinationsNumber;var _number=require("../../utils/number"),_product=require("../../utils/product");function combinationsNumber(n,k){if(!(0,_number.isInteger)(n)||n<0)throw new TypeError("Positive integer value expected in function combinations");if(!(0,_number.isInteger)(k)||k<0)throw new TypeError("Positive integer value expected in function combinations");if(nb.re?1:a.reb.im?1:a.imnewSize[i]&&(newSize[i]=size[i],changed=!0);changed&&_resize(matrix,newSize,defaultValue)}return(DenseMatrix.prototype=new Matrix).createDenseMatrix=function(data,datatype){return new DenseMatrix(data,datatype)},DenseMatrix.prototype.type="DenseMatrix",DenseMatrix.prototype.isDenseMatrix=!0,DenseMatrix.prototype.getDataType=function(){return(0,_array.getArrayDataType)(this._data,_is.typeOf)},DenseMatrix.prototype.storage=function(){return"dense"},DenseMatrix.prototype.datatype=function(){return this._datatype},DenseMatrix.prototype.create=function(data,datatype){return new DenseMatrix(data,datatype)},DenseMatrix.prototype.subset=function(index,replacement,defaultValue){switch(arguments.length){case 1:return function(matrix,index){if(!(0,_is.isIndex)(index))throw new TypeError("Invalid index");{if(index.isScalar())return matrix.get(index.min());var size=index.size();if(size.length!==matrix._size.length)throw new _DimensionError.DimensionError(size.length,matrix._size.length);for(var min=index.min(),max=index.max(),i=0,ii=matrix._size.length;i");var size=index.max().map(function(i){return i+1});_fit(matrix,size,defaultValue);var dims=iSize.length;!function _setSubmatrix(data,index,submatrix,dims,dim){var last=dim===dims-1;var range=index.dimension(dim);last?range.forEach(function(dataIndex,subIndex){(0,_array.validateIndex)(dataIndex),data[dataIndex]=submatrix[subIndex[0]]}):range.forEach(function(dataIndex,subIndex){(0,_array.validateIndex)(dataIndex),_setSubmatrix(data[dataIndex],index,submatrix[subIndex[0]],dims,dim+1)})}(matrix._data,index,submatrix,dims,0)}return matrix}(this,index,replacement,defaultValue);default:throw new SyntaxError("Wrong number of arguments")}},DenseMatrix.prototype.get=function(index){if(!(0,_is.isArray)(index))throw new TypeError("Array expected");if(index.length!==this._size.length)throw new _DimensionError.DimensionError(index.length,this._size.length);for(var x=0;x=from&&(equalScalar(node.value,0)||callback(node.key,node.value,this)),(node=heap.extractMinimum())&&nodes.push(node);for(var i=0;i");for(var x0=index.min()[0],y0=index.min()[1],m=sSize[0],n=sSize[1],x=0;x "+(this._values?(0,_string.format)(this._values[k],options):"X")}return str},SparseMatrix.prototype.toString=function(){return(0,_string.format)(this.toArray())},SparseMatrix.prototype.toJSON=function(){return{mathjs:"SparseMatrix",values:this._values,index:this._index,ptr:this._ptr,size:this._size,datatype:this._datatype}},SparseMatrix.prototype.diagonal=function(k){if(k){if((0,_is.isBigNumber)(k)&&(k=k.toNumber()),!(0,_is.isNumber)(k)||!(0,_number.isInteger)(k))throw new TypeError("The parameter k must be an integer number")}else k=0;var kSuper=0")}(array,size,0)},exports.validateIndex=function(index,length){if(!(0,_is.isNumber)(index)||!(0,_number.isInteger)(index))throw new TypeError("Index must be an integer (value: "+index+")");if(index<0||"number"==typeof length&&length<=index)throw new _IndexError.IndexError(index,length)},exports.resize=function(array,size,defaultValue){if(!Array.isArray(array)||!Array.isArray(size))throw new TypeError("Array expected");if(0===size.length)throw new Error("Resizing to scalar is not supported");size.forEach(function(value){if(!(0,_is.isNumber)(value)||!(0,_number.isInteger)(value)||value<0)throw new TypeError("Invalid size, must contain positive integers (size: "+(0,_string.format)(size)+")")});var _defaultValue=void 0!==defaultValue?defaultValue:0;return function _resize(array,size,dim,defaultValue){var i;var elem;var oldLen=array.length;var newLen=size[dim];var minLen=Math.min(oldLen,newLen);array.length=newLen;if(dimstrL)for(xe-=strL;xe--;)str+="0";else xe>1,arr[_j]&=1)}return arr.reverse()}Object.defineProperty(exports,"__esModule",{value:!0}),exports.bitAndBigNumber=function(x,y){if(x.isFinite()&&!x.isInteger()||y.isFinite()&&!y.isInteger())throw new Error("Integers expected in function bitAnd");var BigNumber=x.constructor;if(x.isNaN()||y.isNaN())return new BigNumber(NaN);if(x.isZero()||y.eq(-1)||x.eq(y))return x;if(y.isZero()||x.eq(-1))return y;if(!x.isFinite()||!y.isFinite()){if(!x.isFinite()&&!y.isFinite())return x.isNegative()===y.isNegative()?x:new BigNumber(0);if(!x.isFinite())return y.isNegative()?x:x.isNegative()?new BigNumber(0):y;if(!y.isFinite())return x.isNegative()?y:y.isNegative()?new BigNumber(0):x}return bitwise(x,y,function(a,b){return a&b})},exports.bitNotBigNumber=bitNotBigNumber,exports.bitOrBigNumber=function(x,y){if(x.isFinite()&&!x.isInteger()||y.isFinite()&&!y.isInteger())throw new Error("Integers expected in function bitOr");var BigNumber=x.constructor;if(x.isNaN()||y.isNaN())return new BigNumber(NaN);var negOne=new BigNumber(-1);if(x.isZero()||y.eq(negOne)||x.eq(y))return y;if(y.isZero()||x.eq(negOne))return x;if(x.isFinite()&&y.isFinite())return bitwise(x,y,function(a,b){return a|b});if(!x.isFinite()&&!x.isNegative()&&y.isNegative()||x.isNegative()&&!y.isNegative()&&!y.isFinite())return negOne;if(x.isNegative()&&y.isNegative())return x.isFinite()?x:y;return x.isFinite()?y:x},exports.bitwise=bitwise,exports.bitXor=function(x,y){if(x.isFinite()&&!x.isInteger()||y.isFinite()&&!y.isInteger())throw new Error("Integers expected in function bitXor");var BigNumber=x.constructor;if(x.isNaN()||y.isNaN())return new BigNumber(NaN);if(x.isZero())return y;if(y.isZero())return x;if(x.eq(y))return new BigNumber(0);var negOne=new BigNumber(-1);if(x.eq(negOne))return bitNotBigNumber(y);if(y.eq(negOne))return bitNotBigNumber(x);return x.isFinite()&&y.isFinite()?bitwise(x,y,function(a,b){return a^b}):x.isFinite()||y.isFinite()?new BigNumber(x.isNegative()===y.isNegative()?1/0:-1/0):negOne},exports.leftShiftBigNumber=function(x,y){if(x.isFinite()&&!x.isInteger()||y.isFinite()&&!y.isInteger())throw new Error("Integers expected in function leftShift");var BigNumber=x.constructor;if(x.isNaN()||y.isNaN()||y.isNegative()&&!y.isZero())return new BigNumber(NaN);if(x.isZero()||y.isZero())return x;if(!x.isFinite()&&!y.isFinite())return new BigNumber(NaN);if(y.lt(55))return x.times(Math.pow(2,y.toNumber())+"");return x.times(new BigNumber(2).pow(y))},exports.rightArithShiftBigNumber=function(x,y){if(x.isFinite()&&!x.isInteger()||y.isFinite()&&!y.isInteger())throw new Error("Integers expected in function rightArithShift");var BigNumber=x.constructor;if(x.isNaN()||y.isNaN()||y.isNegative()&&!y.isZero())return new BigNumber(NaN);if(x.isZero()||y.isZero())return x;if(!y.isFinite())return x.isNegative()?new BigNumber(-1):x.isFinite()?new BigNumber(0):new BigNumber(NaN);if(y.lt(55))return x.div(Math.pow(2,y.toNumber())+"").floor();return x.div(new BigNumber(2).pow(y)).floor()}},{}],924:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.createBigNumberTau=exports.createBigNumberPi=exports.createBigNumberPhi=exports.createBigNumberE=void 0;var _function=require("../function"),createBigNumberE=(0,_function.memoize)(function(BigNumber){return new BigNumber(1).exp()},hasher);exports.createBigNumberE=createBigNumberE;var createBigNumberPhi=(0,_function.memoize)(function(BigNumber){return new BigNumber(1).plus(new BigNumber(5).sqrt()).div(2)},hasher);exports.createBigNumberPhi=createBigNumberPhi;var createBigNumberPi=(0,_function.memoize)(function(BigNumber){return BigNumber.acos(-1)},hasher);exports.createBigNumberPi=createBigNumberPi;var createBigNumberTau=(0,_function.memoize)(function(BigNumber){return createBigNumberPi(BigNumber).times(2)},hasher);function hasher(args){return args[0].precision}exports.createBigNumberTau=createBigNumberTau},{"../function":932}],925:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.format=function format(value,options){if("function"==typeof options)return options(value);if(!value.isFinite())return value.isNaN()?"NaN":value.gt(0)?"Infinity":"-Infinity";var notation="auto";var precision;void 0!==options&&(options.notation&&(notation=options.notation),"number"==typeof options?precision=options:options.precision&&(precision=options.precision));switch(notation){case"fixed":return toFixed(value,precision);case"exponential":return toExponential(value,precision);case"engineering":return toEngineering(value,precision);case"auto":if(options&&options.exponential&&(void 0!==options.exponential.lower||void 0!==options.exponential.upper)){var fixedOptions=(0,_object.mapObject)(options,function(x){return x});return(fixedOptions.exponential=void 0)!==options.exponential.lower&&(fixedOptions.lowerExp=Math.round(Math.log(options.exponential.lower)/Math.LN10)),void 0!==options.exponential.upper&&(fixedOptions.upperExp=Math.round(Math.log(options.exponential.upper)/Math.LN10)),console.warn("Deprecation warning: Formatting options exponential.lower and exponential.upper (minimum and maximum value) are replaced with exponential.lowerExp and exponential.upperExp (minimum and maximum exponent) since version 4.0.0. Replace "+JSON.stringify(options)+" with "+JSON.stringify(fixedOptions)),format(value,fixedOptions)}var lowerExp=options&&void 0!==options.lowerExp?options.lowerExp:-3,upperExp=options&&void 0!==options.upperExp?options.upperExp:5;if(value.isZero())return"0";var rounded=value.toSignificantDigits(precision),exp=rounded.e;return(lowerExp<=exp&&exp=size.length)throw new _IndexError.IndexError(dim,size.length);return(0,_is.isMatrix)(mat)?mat.create(_reduce(mat.valueOf(),dim,callback)):_reduce(mat,dim,callback)},exports.scatter=function(a,j,w,x,u,mark,cindex,f,inverse,update,value){var k,k0,k1,i,avalues=a._values,aindex=a._index,aptr=a._ptr;if(x)for(k0=aptr[j],k1=aptr[j+1],k=k0;k>",rightLogShift:">>>",equal:"=",unequal:"\\neq",smaller:"<",larger:">",smallerEq:"\\leq",largerEq:"\\geq",bitAnd:"\\&",bitXor:"\\underline{|}",bitOr:"|",and:"\\wedge",xor:"\\veebar",or:"\\vee"};exports.latexOperators=latexOperators;var latexFunctions={abs:{1:"\\left|${args[0]}\\right|"},add:{2:"\\left(${args[0]}".concat(latexOperators.add,"${args[1]}\\right)")},cbrt:{1:"\\sqrt[3]{${args[0]}}"},ceil:{1:"\\left\\lceil${args[0]}\\right\\rceil"},cube:{1:"\\left(${args[0]}\\right)^3"},divide:{2:"\\frac{${args[0]}}{${args[1]}}"},dotDivide:{2:"\\left(${args[0]}".concat(latexOperators.dotDivide,"${args[1]}\\right)")},dotMultiply:{2:"\\left(${args[0]}".concat(latexOperators.dotMultiply,"${args[1]}\\right)")},dotPow:{2:"\\left(${args[0]}".concat(latexOperators.dotPow,"${args[1]}\\right)")},exp:{1:"\\exp\\left(${args[0]}\\right)"},expm1:"\\left(e".concat(latexOperators.pow,"{${args[0]}}-1\\right)"),fix:{1:"\\mathrm{${name}}\\left(${args[0]}\\right)"},floor:{1:"\\left\\lfloor${args[0]}\\right\\rfloor"},gcd:"\\gcd\\left(${args}\\right)",hypot:"\\hypot\\left(${args}\\right)",log:{1:"\\ln\\left(${args[0]}\\right)",2:"\\log_{${args[1]}}\\left(${args[0]}\\right)"},log10:{1:"\\log_{10}\\left(${args[0]}\\right)"},log1p:{1:"\\ln\\left(${args[0]}+1\\right)",2:"\\log_{${args[1]}}\\left(${args[0]}+1\\right)"},log2:"\\log_{2}\\left(${args[0]}\\right)",mod:{2:"\\left(${args[0]}".concat(latexOperators.mod,"${args[1]}\\right)")},multiply:{2:"\\left(${args[0]}".concat(latexOperators.multiply,"${args[1]}\\right)")},norm:{1:"\\left\\|${args[0]}\\right\\|",2:void 0},nthRoot:{2:"\\sqrt[${args[1]}]{${args[0]}}"},nthRoots:{2:"\\{y : $y^{args[1]} = {${args[0]}}\\}"},pow:{2:"\\left(${args[0]}\\right)".concat(latexOperators.pow,"{${args[1]}}")},round:{1:"\\left\\lfloor${args[0]}\\right\\rceil",2:void 0},sign:{1:"\\mathrm{${name}}\\left(${args[0]}\\right)"},sqrt:{1:"\\sqrt{${args[0]}}"},square:{1:"\\left(${args[0]}\\right)^2"},subtract:{2:"\\left(${args[0]}".concat(latexOperators.subtract,"${args[1]}\\right)")},unaryMinus:{1:"".concat(latexOperators.unaryMinus,"\\left(${args[0]}\\right)")},unaryPlus:{1:"".concat(latexOperators.unaryPlus,"\\left(${args[0]}\\right)")},bitAnd:{2:"\\left(${args[0]}".concat(latexOperators.bitAnd,"${args[1]}\\right)")},bitNot:{1:latexOperators.bitNot+"\\left(${args[0]}\\right)"},bitOr:{2:"\\left(${args[0]}".concat(latexOperators.bitOr,"${args[1]}\\right)")},bitXor:{2:"\\left(${args[0]}".concat(latexOperators.bitXor,"${args[1]}\\right)")},leftShift:{2:"\\left(${args[0]}".concat(latexOperators.leftShift,"${args[1]}\\right)")},rightArithShift:{2:"\\left(${args[0]}".concat(latexOperators.rightArithShift,"${args[1]}\\right)")},rightLogShift:{2:"\\left(${args[0]}".concat(latexOperators.rightLogShift,"${args[1]}\\right)")},bellNumbers:{1:"\\mathrm{B}_{${args[0]}}"},catalan:{1:"\\mathrm{C}_{${args[0]}}"},stirlingS2:{2:"\\mathrm{S}\\left(${args}\\right)"},arg:{1:"\\arg\\left(${args[0]}\\right)"},conj:{1:"\\left(${args[0]}\\right)^*"},im:{1:"\\Im\\left\\lbrace${args[0]}\\right\\rbrace"},re:{1:"\\Re\\left\\lbrace${args[0]}\\right\\rbrace"},and:{2:"\\left(${args[0]}".concat(latexOperators.and,"${args[1]}\\right)")},not:{1:latexOperators.not+"\\left(${args[0]}\\right)"},or:{2:"\\left(${args[0]}".concat(latexOperators.or,"${args[1]}\\right)")},xor:{2:"\\left(${args[0]}".concat(latexOperators.xor,"${args[1]}\\right)")},cross:{2:"\\left(${args[0]}\\right)\\times\\left(${args[1]}\\right)"},ctranspose:{1:"\\left(${args[0]}\\right)".concat(latexOperators.ctranspose)},det:{1:"\\det\\left(${args[0]}\\right)"},dot:{2:"\\left(${args[0]}\\cdot${args[1]}\\right)"},expm:{1:"\\exp\\left(${args[0]}\\right)"},inv:{1:"\\left(${args[0]}\\right)^{-1}"},sqrtm:{1:"{${args[0]}}".concat(latexOperators.pow,"{\\frac{1}{2}}")},trace:{1:"\\mathrm{tr}\\left(${args[0]}\\right)"},transpose:{1:"\\left(${args[0]}\\right)".concat(latexOperators.transpose)},combinations:{2:"\\binom{${args[0]}}{${args[1]}}"},combinationsWithRep:{2:"\\left(\\!\\!{\\binom{${args[0]}}{${args[1]}}}\\!\\!\\right)"},factorial:{1:"\\left(${args[0]}\\right)".concat(latexOperators.factorial)},gamma:{1:"\\Gamma\\left(${args[0]}\\right)"},equal:{2:"\\left(${args[0]}".concat(latexOperators.equal,"${args[1]}\\right)")},larger:{2:"\\left(${args[0]}".concat(latexOperators.larger,"${args[1]}\\right)")},largerEq:{2:"\\left(${args[0]}".concat(latexOperators.largerEq,"${args[1]}\\right)")},smaller:{2:"\\left(${args[0]}".concat(latexOperators.smaller,"${args[1]}\\right)")},smallerEq:{2:"\\left(${args[0]}".concat(latexOperators.smallerEq,"${args[1]}\\right)")},unequal:{2:"\\left(${args[0]}".concat(latexOperators.unequal,"${args[1]}\\right)")},erf:{1:"erf\\left(${args[0]}\\right)"},max:"\\max\\left(${args}\\right)",min:"\\min\\left(${args}\\right)",variance:"\\mathrm{Var}\\left(${args}\\right)",acos:{1:"\\cos^{-1}\\left(${args[0]}\\right)"},acosh:{1:"\\cosh^{-1}\\left(${args[0]}\\right)"},acot:{1:"\\cot^{-1}\\left(${args[0]}\\right)"},acoth:{1:"\\coth^{-1}\\left(${args[0]}\\right)"},acsc:{1:"\\csc^{-1}\\left(${args[0]}\\right)"},acsch:{1:"\\mathrm{csch}^{-1}\\left(${args[0]}\\right)"},asec:{1:"\\sec^{-1}\\left(${args[0]}\\right)"},asech:{1:"\\mathrm{sech}^{-1}\\left(${args[0]}\\right)"},asin:{1:"\\sin^{-1}\\left(${args[0]}\\right)"},asinh:{1:"\\sinh^{-1}\\left(${args[0]}\\right)"},atan:{1:"\\tan^{-1}\\left(${args[0]}\\right)"},atan2:{2:"\\mathrm{atan2}\\left(${args}\\right)"},atanh:{1:"\\tanh^{-1}\\left(${args[0]}\\right)"},cos:{1:"\\cos\\left(${args[0]}\\right)"},cosh:{1:"\\cosh\\left(${args[0]}\\right)"},cot:{1:"\\cot\\left(${args[0]}\\right)"},coth:{1:"\\coth\\left(${args[0]}\\right)"},csc:{1:"\\csc\\left(${args[0]}\\right)"},csch:{1:"\\mathrm{csch}\\left(${args[0]}\\right)"},sec:{1:"\\sec\\left(${args[0]}\\right)"},sech:{1:"\\mathrm{sech}\\left(${args[0]}\\right)"},sin:{1:"\\sin\\left(${args[0]}\\right)"},sinh:{1:"\\sinh\\left(${args[0]}\\right)"},tan:{1:"\\tan\\left(${args[0]}\\right)"},tanh:{1:"\\tanh\\left(${args[0]}\\right)"},to:{2:"\\left(${args[0]}".concat(latexOperators.to,"${args[1]}\\right)")},numeric:function(node){return node.args[0].toTex()},number:{0:"0",1:"\\left(${args[0]}\\right)",2:"\\left(\\left(${args[0]}\\right)${args[1]}\\right)"},string:{0:'\\mathtt{""}',1:"\\mathrm{string}\\left(${args[0]}\\right)"},bignumber:{0:"0",1:"\\left(${args[0]}\\right)"},complex:{0:"0",1:"\\left(${args[0]}\\right)",2:"\\left(\\left(${args[0]}\\right)+".concat(latexSymbols.i,"\\cdot\\left(${args[1]}\\right)\\right)")},matrix:{0:"\\begin{bmatrix}\\end{bmatrix}",1:"\\left(${args[0]}\\right)",2:"\\left(${args[0]}\\right)"},sparse:{0:"\\begin{bsparse}\\end{bsparse}",1:"\\left(${args[0]}\\right)"},unit:{1:"\\left(${args[0]}\\right)",2:"\\left(\\left(${args[0]}\\right)${args[1]}\\right)"}};exports.latexFunctions=latexFunctions;exports.defaultTemplate="\\mathrm{${name}}\\left(${args}\\right)";var latexUnits={deg:"^\\circ"};function escapeLatex(string){return(0,_escapeLatex.default)(string,{preserveFormatting:!0})}},{"./object":938,"escape-latex":56}],935:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.warnOnce=void 0;var messages,warnOnce=(messages={},function(){for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++)args[_key]=arguments[_key];var _console,message=args.join(", ");messages[message]||(messages[message]=!0,(_console=console).warn.apply(_console,["Warning:"].concat(args)))});exports.warnOnce=warnOnce},{}],936:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.noBignumber=function(){throw new Error('No "bignumber" implementation available')},exports.noFraction=function(){throw new Error('No "fraction" implementation available')},exports.noMatrix=function(){throw new Error('No "matrix" implementation available')},exports.noIndex=function(){throw new Error('No "index" implementation available')},exports.noSubset=function(){throw new Error('No "matrix" implementation available')}},{}],937:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.isInteger=function(value){return"boolean"==typeof value||!!isFinite(value)&&value===Math.round(value)},exports.format=function(value,options){if("function"==typeof options)return options(value);{if(value===1/0)return"Infinity";if(value===-1/0)return"-Infinity";if(isNaN(value))return"NaN"}var precision,notation="auto";options&&(options.notation&&(notation=options.notation),(0,_is.isNumber)(options)?precision=options:(0,_is.isNumber)(options.precision)&&(precision=options.precision));switch(notation){case"fixed":return toFixed(value,precision);case"exponential":return toExponential(value,precision);case"engineering":return toEngineering(value,precision);case"auto":if(!options||!options.exponential||void 0===options.exponential.lower&&void 0===options.exponential.upper)return toPrecision(value,precision,options&&options).replace(/((\.\d*?)(0+))($|e)/,function(){var digits=arguments[2],e=arguments[4];return"."!==digits?digits+e:e});var fixedOptions=(0,_object.mapObject)(options,function(x){return x});return(fixedOptions.exponential=void 0)!==options.exponential.lower&&(fixedOptions.lowerExp=Math.round(Math.log(options.exponential.lower)/Math.LN10)),void 0!==options.exponential.upper&&(fixedOptions.upperExp=Math.round(Math.log(options.exponential.upper)/Math.LN10)),console.warn("Deprecation warning: Formatting options exponential.lower and exponential.upper (minimum and maximum value) are replaced with exponential.lowerExp and exponential.upperExp (minimum and maximum exponent) since version 4.0.0. Replace "+JSON.stringify(options)+" with "+JSON.stringify(fixedOptions)),toPrecision(value,precision,fixedOptions);default:throw new Error('Unknown notation "'+notation+'". Choose "auto", "exponential", or "fixed".')}},exports.splitNumber=splitNumber,exports.toEngineering=toEngineering,exports.toFixed=toFixed,exports.toExponential=toExponential,exports.toPrecision=toPrecision,exports.roundDigits=roundDigits,exports.digits=function(value){return value.toExponential().replace(/e.*$/,"").replace(/^0\.?0*|\./,"").length},exports.nearlyEqual=function(x,y,epsilon){if(null==epsilon)return x===y;if(x===y)return!0;if(isNaN(x)||isNaN(y))return!1;if(isFinite(x)&&isFinite(y)){var diff=Math.abs(x-y);return diffc.length||e-newExp+1>c.length;)c.push(0);else for(var missingZeros=Math.abs(e-newExp)-(c.length-1),i=0;i=upperExp)return toExponential(value,precision);var c=rounded.coefficients,e=rounded.exponent;c.lengthprecision&&5<=c.splice(precision,c.length-precision)[0]){var i=precision-1;for(c[i]++;10===c[i];)c.pop(),0===i&&(c.unshift(0),rounded.exponent++,i++),c[--i]++}return rounded}function zeros(length){for(var arr=[],i=0;i>1;return product(i,half)*product(1+half,n)}},{}],941:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.endsWith=function(text,search){var start=text.length-search.length,end=text.length;return text.substring(start,end)===search},exports.format=format,exports.stringify=function(value){var text=String(value),escaped="",i=0;for(;i/g,">")},exports.compareText=function(x,y){if(!(0,_is.isString)(x))throw new TypeError("Unexpected type of argument in function compareText (expected: string or Array or Matrix, actual: "+(0,_is.typeOf)(x)+", index: 0)");if((0,_is.isString)(y))return x===y?0:y>>=1;return(n+x)/d}},module.exports.resetGlobal=function(){Math.random=oldRandom},mixkey(Math.random(),pool)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],945:[function(require,module,exports){function E(){}E.prototype={on:function(name,callback,ctx){var e=this.e||(this.e={});return(e[name]||(e[name]=[])).push({fn:callback,ctx:ctx}),this},once:function(name,callback,ctx){var self=this;function listener(){self.off(name,listener),callback.apply(ctx,arguments)}return listener._=callback,this.on(name,listener,ctx)},emit:function(name){for(var data=[].slice.call(arguments,1),evtArr=((this.e||(this.e={}))[name]||[]).slice(),i=0,len=evtArr.length;i=varIndex+1}}return 0===params.length?function(args){return 0===args.length}:1===params.length?(test0=compileTest(params[0]),function(args){return test0(args[0])&&1===args.length}):2===params.length?(test0=compileTest(params[0]),test1=compileTest(params[1]),function(args){return test0(args[0])&&test1(args[1])&&2===args.length}):(tests=params.map(compileTest),function(args){for(var i=0;imaxLength?(err=new TypeError("Too many arguments in function "+_name+" (expected: "+maxLength+", actual: "+args.length+")")).data={category:"tooManyArgs",fn:_name,index:args.length,expectedLength:maxLength}:(err=new TypeError('Arguments of type "'+args.join(", ")+'" do not match any of the defined signatures of function '+_name+".")).data={category:"mismatch",actual:args.map(findTypeName)},err}(name,arguments,signatures)},fn=function(arg0,arg1){return arguments.length===len0&&test00(arg0)&&test01(arg1)?fn0.apply(null,arguments):arguments.length===len1&&test10(arg0)&&test11(arg1)?fn1.apply(null,arguments):arguments.length===len2&&test20(arg0)&&test21(arg1)?fn2.apply(null,arguments):arguments.length===len3&&test30(arg0)&&test31(arg1)?fn3.apply(null,arguments):arguments.length===len4&&test40(arg0)&&test41(arg1)?fn4.apply(null,arguments):arguments.length===len5&&test50(arg0)&&test51(arg1)?fn5.apply(null,arguments):generic.apply(null,arguments)};try{Object.defineProperty(fn,"name",{value:name})}catch(err){}return fn.signatures=function(signatures){var signaturesMap={};return signatures.forEach(function(signature){signature.params.some(hasConversions)||splitParams(signature.params,!0).forEach(function(params){signaturesMap[stringifyParams(params)]=signature.fn})}),signaturesMap}(signatures),fn}function notIgnore(typeName){return-1===typed.ignore.indexOf(typeName)}function trim(str){return str.trim()}function notEmpty(str){return!!str}function notNull(value){return null!==value}function isInvalidParam(param){return 0===param.types.length}function last(arr){return arr[arr.length-1]}function slice(arr,start,end){return Array.prototype.slice.call(arr,start,end)}function findInArray(arr,test){for(var i=0;i","<=",">=","<<",">>",">>>","NAMED_DELIMITERS","in","CONSTANTS","NUMERIC_CONSTANTS","currentString","currentCharacter","prevCharacter","nextCharacter","isWhitespace","nestingLevel","c3","isDigitDot","isDigit","isDecimalMark","createSyntaxError","isAlpha","getTokenSkipNewline","openParams","closeParams","conditionalLevel","parseAssignment","parseBlock","valid","parseLogicalXor","parseLogicalOr","parseConditional","parseLogicalAnd","parseBitwiseOr","parseBitwiseXor","parseBitwiseAnd","parseRelational","parseShift","operators","cond","parseConversion","parseRange","parseAddSubtract","parseMultiplyDivide","parseImplicitMultiplication","parseRule2","parseUnary","tokenStates","CustomNode","parseAccessors","rows","numberStr","parseEnd","parseParentheses","parseNumber","parseDoubleQuotesStringToken","parseSingleQuotesStringToken","parseObject","parseRow","parseSingleQuotesString","parseDoubleQuotesString","parseSymbol","parseCustomNodes","parseLeftHandOperators","parsePow","cPrev","cNext","isValidLatinOrGreek","isValidMathSymbol","high","low","../utils/collection","640","_apply","...any","dim","../../function/matrix/apply","./utils/errorTransform","641","lastIndex","../../function/matrix/column","642","../../function/matrix/concat","643","_function","_compileInlineExpression","filterTransform","compileInlineExpression","Array, function","Matrix, function","Array, RegExp","filterRegExp","Matrix, RegExp","maxArgumentCount","../../utils/function","./utils/compileInlineExpression","644","forEachTransform","Array | Matrix, function","recurse","645","ii","isSet","646","mapTransform","orig","argsCount","647","../../function/statistics/max","648","../../function/statistics/mean","649","../../function/statistics/min","650","../../function/matrix/range","651","../../function/matrix/row","652","../../function/statistics/std","653","../../function/matrix/subset","654","../../function/statistics/sum","655","subScope","../../../utils/is","656","../../../error/IndexError","657","../../function/statistics/variance","658","_ResultSet","_BigNumber","_Complex","_Fraction","_Range","_Matrix","_DenseMatrix","_equalScalar","_SparseMatrix","_addScalar","_multiplyScalar","_eye","_print","_divideScalar","_ImmutableDenseMatrix","_MatrixIndex","_FibonacciHeap","_Spa","_Unit","_Node","_AccessorNode","_ArrayNode","_AssignmentNode","_BlockNode","_ConditionalNode","_ConstantNode","_FunctionAssignmentNode","_IndexNode","_ObjectNode","_OperatorNode","_ParenthesisNode","_RangeNode","_RelationalNode","_SymbolNode","_FunctionNode","_parse","_Parser","_parser","_Help","_Chain","_chain","_reviver","_replacer","_physicalConstants","_apply2","_column2","_filter2","_forEach2","_map2","_max2","_mean2","_min2","_range2","_row2","_subset2","_concat2","_std2","_sum2","_variance2","./constants","./core/function/typed","./expression/Help","./expression/Parser","./expression/function/compile","./expression/function/eval","./expression/function/evaluate","./expression/function/help","./expression/function/parser","./expression/node/AccessorNode","./expression/node/ArrayNode","./expression/node/AssignmentNode","./expression/node/BlockNode","./expression/node/ConditionalNode","./expression/node/ConstantNode","./expression/node/FunctionAssignmentNode","./expression/node/FunctionNode","./expression/node/IndexNode","./expression/node/Node","./expression/node/ObjectNode","./expression/node/OperatorNode","./expression/node/ParenthesisNode","./expression/node/RangeNode","./expression/node/RelationalNode","./expression/node/SymbolNode","./expression/parse","./expression/transform/apply.transform","./expression/transform/column.transform","./expression/transform/concat.transform","./expression/transform/filter.transform","./expression/transform/forEach.transform","./expression/transform/index.transform","./expression/transform/map.transform","./expression/transform/max.transform","./expression/transform/mean.transform","./expression/transform/min.transform","./expression/transform/range.transform","./expression/transform/row.transform","./expression/transform/std.transform","./expression/transform/subset.transform","./expression/transform/sum.transform","./expression/transform/variance.transform","./function/algebra/decomposition/lup","./function/algebra/decomposition/qr","./function/algebra/decomposition/slu","./function/algebra/solver/lsolve","./function/algebra/solver/lusolve","./function/algebra/solver/usolve","./function/arithmetic/addScalar","./function/arithmetic/divideScalar","./function/arithmetic/multiplyScalar","./function/matrix/apply","./function/matrix/expm","./function/matrix/eye","./function/matrix/sqrtm","./function/relational/equalScalar","./function/string/format","./function/string/print","./function/unit/to","./json/replacer","./json/reviver","./type/bignumber/BigNumber","./type/bignumber/function/bignumber","./type/boolean","./type/chain/Chain","./type/chain/function/chain","./type/complex/Complex","./type/complex/function/complex","./type/fraction/Fraction","./type/fraction/function/fraction","./type/matrix/DenseMatrix","./type/matrix/FibonacciHeap","./type/matrix/ImmutableDenseMatrix","./type/matrix/Matrix","./type/matrix/MatrixIndex","./type/matrix/Range","./type/matrix/Spa","./type/matrix/SparseMatrix","./type/matrix/function","./type/matrix/function/matrix","./type/matrix/function/sparse","./type/number","./type/resultset/ResultSet","./type/string","./type/unit/Unit","./type/unit/function/createUnit","./type/unit/function/splitUnit","./type/unit/function/unit","./type/unit/physicalConstants","659","_denseLUP","_sparseLUP","L","columns","_data","ldata","lsize","udata","usize","pabsv","vjj","absv","_swapRows","vij","pv","_values","ptr","_ptr","lvalues","lindex","lptr","uvalues","uindex","uptr","pvCo","pvOc","spa","k0","vkj","_forEachRow","vik","accumulate","kx","ky","../../../utils/factory","../../../utils/object","660","_denseQR","Q","R","_denseQRimpl","Qdata","Rdata","pivot","sgn","conjSgn","alphaSquared","zero","661","_csSqr","_csLu","csSqr","createCsSqr","csLu","createCsLu","SparseMatrix, number, number","order","threshold","pinv","../../../utils/number","../sparse/csLu","../sparse/csSqr","662","Node, SymbolNode, Object","variable","constNodes","constTag","Node, SymbolNode","string, SymbolNode","string, SymbolNode, Object","string, string","string, string, Object","Node, string","Node, string, Object","deriv","_derivTex","Node, ConstantNode","Node, SymbolNode, ConstantNode","string, string, number","Object, ConstantNode, string","Object, SymbolNode, string","Object, ParenthesisNode, string","Object, FunctionAssignmentNode, string","Object, FunctionNode | OperatorNode, string","isConst","ConstantNode, Object","SymbolNode, Object","ParenthesisNode, Object","FunctionAssignmentNode, Object","FunctionNode, Object","funcArgsCheck","funcDerivative","arg0","negative","chainDerivative","OperatorNode, Object","constantTerms","nonConstantTerms","nonConstantNode","newArgs","argOuter","argInner","_arg2","powMinusOne","valueType","663","_simplifyConstant","_simplifyCore","simplifyConstant","createSimplifyConstant","simplifyCore","createSimplifyCore","string, boolean","detailed","string, Object, boolean","Node, boolean","Node, Object","Node, Object, boolean","sBefore","setRules","oldRules","rulesFirst","rulesSucDiv","firstRules","distrDivRules","sucDivRules","firstRulesAgain","finalRules","rulesRationalize","polyRet","extended","exactFractions","oper","recPoly","tp","retFunc","polynomial","nVars","expandPower","indParent","internal","does","nEsqTopo","nDirTopo","eDistrDiv","redoInic","coefficients","retRationalize","polyToCanonical","cte","fire","maxExpo","varname","recurPol","noPai","noFil","valor","_i2","no","n2","./simplify/simplifyConstant","./simplify/simplifyCore","664","_util","_resolve","resolve","createResolve","_createUtil","createUtil","isCommutative","isAssociative","unflattenr","unflattenl","createMakeNodeFunction","string, Object, Object","string, Array","string, Array, Object","string, Array, Object, Object","Node, Object, Object","Node, Array","Node, Array, Object","Node, Array, Object, Object","ruleSet","makeNode","expandsym","newRule","ruleType","lr","removeParens","_lastsym","expanded","_buildRules","applyRule","SUPPORTED_CONSTANTS","commutative","repl","_ruleMatch","mergeMatch","match1","match2","_exactMatch","combineChildMatches","list1","list2","isSplit","splits","rightArgs","getSplits","splitMatches","matchSet","childMatches","childMatch","uniqueSets","unique","mergeChildMatches","./simplify/resolve","./simplify/util","665","_args","666","_noop","allChildren","fnname","_toNumber","ignore","_toNode","vn","unaryMinusNode","_exactFraction","noBignumber","noFraction","Fraction, Object","BigNumber, Object","number, Object","Complex, Object","foldOp","ignoreandcontinue","foldFraction","operatorFunctions","some","ignoreandcontine","consts","../../../utils/noop","./util","667","node0","node1","a0","a00","a00a1","a01","668","associative","findChildren","curnode","669","_solveValidation","solveValidation","createSolveValidation","SparseMatrix, Array | Matrix","bdata","bj","jvalues","jindex","xj","DenseMatrix, Array | Matrix","_denseForwardSubstitution","Array, Array | Matrix","./utils/solveValidation","670","_csIpvec","SparseMatrix, Array | Matrix, number, number","Object, Array | Matrix","_toMatrix","csIpvec","../sparse/csIpvec","671","_denseBackwardSubstitution","672","msize","datatype","_datatype","asize","arraySize","../../../../utils/array","../../../../utils/is","../../../../utils/string","673","createCsAmd","_csFkeep","_csFlip","_csTdfs","lemax","dense","cm","at","tindex","tptr","_createTargetMatrix","csFkeep","k2","pj","nvi","pk","eln","pn","cindex","cptr","cnz","W","nv","head","elen","degree","hhead","_wclear","_initializeQuotientGraph","nel","csFlip","_initializeDegreeLists","mindeg","elenk","nvk","dk","dext","pk1","pk2","wnvi","p3","p4","nvj","jlast","ok","csTdfs","./csFkeep","./csFlip","./csTdfs","674","createCsCounts","_csLeaf","post","ata","J","p0","maxfirst","prevleaf","colcount","csLeaf","jleaf","./csLeaf","675","csDfs","jnew","_csMarked","csMarked","_csMark","csMark","_csUnflip","csUnflip","done","./csMark","./csMarked","./csUnflip","676","csEtree","inext","aptr","677","avalues","nz","678","679","680","ancestor","sparent","jprev","681","_csSpsolve","csSpsolve","createCsSpsolve","tol","lnz","unz","xabs","ipiv","./csSpsolve","682","683","684","csPermute","adt","cvalues","t0","createSparseMatrix","685","csPost","686","csReach","gptr","gsize","bindex","bptr","_csDfs","./csDfs","687","_csReach","lo","gvalues","gindex","bvalues","./csReach","688","_csPermute","_csPost","_csEtree","_csAmd","_csCounts","csAmd","csCounts","cp","leftmost","tail","nque","pa","_vcount","./csAmd","./csCounts","./csEtree","./csPermute","./csPost","689","690","691","absNumber","../../plain/number","692","_algorithm","_algorithm2","_algorithm3","_algorithm4","_algorithm5","algorithm01","createAlgorithm01","algorithm04","createAlgorithm04","algorithm10","createAlgorithm10","algorithm13","createAlgorithm13","algorithm14","createAlgorithm14","DenseMatrix, DenseMatrix","DenseMatrix, SparseMatrix","SparseMatrix, DenseMatrix","SparseMatrix, SparseMatrix","Array, Array","Array, Matrix","Matrix, Array","DenseMatrix, any","SparseMatrix, any","any, DenseMatrix","any, SparseMatrix","Array, any","any, Array","any, any","any, any, ...any","rest","../../type/matrix/utils/algorithm01","../../type/matrix/utils/algorithm04","../../type/matrix/utils/algorithm10","../../type/matrix/utils/algorithm13","../../type/matrix/utils/algorithm14","693","number, number","addNumber","Complex, Complex","BigNumber, BigNumber","Fraction, Fraction","Unit, Unit","equalBase","fixPrefix","694","cbrtNumber","_cbrtComplex","Complex, boolean","third","negate","_result","allRoots","principal","695","_nearlyEqual","_number2","nearlyEqual","ceilNumber","../../utils/bignumber/nearlyEqual","696","cubeNumber","697","algorithm11","createAlgorithm11","Array | Matrix, Array | Matrix","any, Array | Matrix","../../type/matrix/utils/algorithm11","698","Unit, number | Fraction | BigNumber","_normalize","number | Fraction | BigNumber, Unit","699","_algorithm6","_algorithm7","algorithm02","createAlgorithm02","algorithm03","createAlgorithm03","algorithm07","createAlgorithm07","algorithm12","createAlgorithm12","../../type/matrix/utils/algorithm02","../../type/matrix/utils/algorithm03","../../type/matrix/utils/algorithm07","../../type/matrix/utils/algorithm12","700","algorithm09","createAlgorithm09","../../type/matrix/utils/algorithm09","701","702","expNumber","703","expm1Number","704","705","706","gcdNumber","SparseMatrix, number | BigNumber","DenseMatrix, number | BigNumber","number | BigNumber, SparseMatrix","number | BigNumber, DenseMatrix","Array, number | BigNumber","number | BigNumber, Array","Array | Matrix | number | BigNumber, Array | Matrix | number | BigNumber, ...Array | Matrix | number | BigNumber","707","... number | BigNumber","largest","708","algorithm06","createAlgorithm06","lcmNumber","../../type/matrix/utils/algorithm06","709","logNumber","710","log10Number","711","_log1pComplex","xRe1p","712","log2Number","_log2Complex","newX","713","algorithm05","createAlgorithm05","modNumber","../../type/matrix/utils/algorithm05","714","_validateMatrixDimensions","Matrix, Matrix","xsize","ysize","dt","adata","bdt","mf","_multiplyVectorVector","storage","bsize","alength","bcolumns","createDenseMatrix","_multiplyVectorDenseMatrix","_multiplyVectorMatrix","_multiplyMatrixVector","_multiplyMatrixMatrix","size1","size2","arows","acolumns","brows","ib","vbi","ka0","ka1","ka","ia","ic","jb","kb0","kb1","cij","kb","vbij","715","multiplyNumber","number | Fraction | BigNumber | Complex, Unit","Unit, number | Fraction | BigNumber | Complex","716","number | Complex | BigNumber | boolean, number | BigNumber | string","Array, number | BigNumber | string","Matrix, number | BigNumber | string","ninf","sizeX","POSITIVE_INFINITY","pinf","NEGATIVE_INFINITY","maxc","cj","maxr","fro","717","createNthRootNumber","complexErr","nthRootNumber","_bigNthRoot","Complex, number","Big","718","_nthComplexRoots","_calculateExactResult","aIsNumeric","roots","halfPiFactor","719","Array, number","_powArray","Array, BigNumber","Matrix, number","_powMatrix","Matrix, BigNumber","Unit, number | BigNumber","yFrac","yNum","ex","powNumber","720","createRoundNumber","ownKeys","enumerableOnly","symbols","getOwnPropertySymbols","_objectSpread","getOwnPropertyDescriptors","defineProperties","NO_INT","roundNumberSignatures","Complex, BigNumber","_n","number, BigNumber","Fraction, number","number | Complex | BigNumber, SparseMatrix","number | Complex | BigNumber, DenseMatrix","number | Complex | BigNumber, Array","roundNumber","721","signNumber","722","_sqrtNumber","723","squareNumber","724","checkEqualDimensions","../../error/DimensionError","725","unaryMinusNumber","726","unaryPlusNumber","boolean | string","727","xgcdNumber","lastx","lasty","728","_bitwise","bitAndNumber","bitAndBigNumber","../../utils/bignumber/bitwise","729","bitNotNumber","bitNotBigNumber","730","bitOrNumber","bitOrBigNumber","731","bitXorNumber","732","algorithm08","createAlgorithm08","leftShiftNumber","leftShiftBigNumber","../../type/matrix/utils/algorithm08","733","rightArithShiftNumber","rightArithShiftBigNumber","734","rightLogShiftNumber","735","number | BigNumber","736","737","number | BigNumber, number | BigNumber","738","kFactorial","negativeOne","kChooseI","iPower","739","740","741","742","743","Array, Array, Array","_2d","xCoeff","yCoeff","constant","_distancePointLine2D","Object, Object, Object","lineTwoPtY","lineTwoPtX","lineOnePtY","lineOnePtX","pointX","pointY","_3d","_parametricLine","_distancePointLine3D","_containsOnlyNumbers","_euclideanDistance","Object, Object","xCoeffLine","yCoeffLine","pointZ","x0","y0","z0","pointOneX","pointOneY","pointTwoX","pointTwoY","pointOneZ","pointTwoZ","_isNumber","aI","_pairwise","pointA","pointB","_distancePairwise","_objectToArray","den","diff","vectorSize","744","plane","_4d","y1","z1","y2","z2","x1x","x2x","y1y","y2y","z1z","z2z","py","pz","_intersectLinePlane","Array, Array, Array, Array","p1a","p1b","p2a","p2b","o1","o2","d20o11","d21o10","d20o21","d21o20","_intersect2d","x3","y3","z3","x4","y4","z4","d1343","_intersect3dHelper","d4321","d1321","d4343","d2121","ta","tb","pax","pay","paz","pbx","pby","pbz","Matrix, Matrix, Matrix","Matrix, Matrix, Matrix, Matrix","add1","add2","add3","745","andNumber","746","notNumber","747","orNumber","748","xorNumber","749","Array | Matrix, number | BigNumber, function","mat","tran","_switch","../../error/IndexError","750","validateIndex","rowRange","751","...Array | Matrix | number | BigNumber","prevDim","asMatrix","matrices","concatDim","...string","752","highestDimension","xSize","ySize","product","753","754","decomp","evenCycles","755","Array, string","Array, number, string","Array, BigNumber, string","Matrix, string","Matrix, number, string","Matrix, BigNumber, string","kSuper","kSub","diagonal","_createDiagonalMatrix","dm","vector","_getDiagonal","756","757","checkAndSubmit","getDataType","isSymmetric","psi","e0","Sij","createArray","Vab","getAijBig","_i3","aii","ajj","aij","denom","getThetaBig","Hij","Aki","Akj","csHij","Aii","Ajj","_k3","x1Big","Ski","Skj","_k2","Sij1Big","Ei","_i4","sorting","diagBig","xArr","getAij","_k4","_k","Sij1","Mij","maxMij","maxIJ","S","Ef","Sf","minID","_k5","ans","vectors","758","infNorm","qfac","twoqfac","twoqp1fac","errorEstimate","findParams","rowSum","infinityNorm","Apos","factor","AposToI","alternate","759","760","_filterCallback","761","flat","762","763","getArrayDataType","764","number | BigNumber, string","number | BigNumber, number | BigNumber, string","_identityVector","defaultValue","minimum","765","ABig","rBig","Ac","Bc","Ar","Br","766","767","768","...number | BigNumber | string","Array | Matrix, string","hasBigNumbers","_validate","769","asc","Array | Matrix, number","Array | Matrix, number, string","Array | Matrix, number, function","quickSelect","770","_strRange","_out","_rangeEx","number, number, number","number, number, boolean","includeEnd","_rangeInc","number, number, number, boolean","_bigRangeEx","BigNumber, BigNumber, BigNumber","BigNumber, BigNumber, boolean","_bigRangeInc","BigNumber, BigNumber, BigNumber, boolean","noMatrix","nums","../../utils/noop","771","sizes","772","defaultChar","_resizeString","773","columnRange","774","number | Complex | BigNumber | Unit | boolean | null","775","compareAsc","compareDesc","_arrayIsVector","_matrixIsVector","_comparator","776","_denmanBeavers","_maxIterations","_tolerance","iterations","Y","Z","Yk","777","778","Array, Index","isScalar","Matrix, Index","Object, Index","_getObjectProperty","string, Index","_getSubstring","Array, Index, any","Array, Index, any, any","Matrix, Index, any","Matrix, Index, any, any","string, Index, string","_setSubstring","string, Index, string, string","Object, Index, any","_setObjectProperty","strLen","dimension","779","_denseTrace","780","transposedRow","transposed","_denseTranspose","_sparseTranspose","781","782","combinationsNumber","nMinusk","isPositiveInteger","../../plain/number/combinations","783","_product","nMinusOne","../../utils/product","784","785","gammaNumber","gammaP","real","gammaG","twoPiSqrt","bigFactorial","786","_kldiv","plength","qlength","qnorm","pnorm","787","deepForEach","ai","788","789","_seededRNG","rng","createRng","possibles","Array | Matrix, Array","weights","Array | Matrix, Array | Matrix, number","Array | Matrix, number, Array | Matrix","single","totalWeights","pick","randKey","./util/seededRNG","790","createRandomNumber","_randomMatrix2","_randomMatrix","Array | Matrix, number, number","randomMatrix","./util/randomMatrix","791","_randomIntMatrix","792","_length","793","singletonRandom","_seedRandom","setSeed","seed-random","794","createCompareNumber","boolean, boolean","795","_javascriptNaturalSort","compareBooleans","typeX","typeY","compareMatricesAndArrays","compareArrays","compareComplexNumbers","formatUnits","keysX","keysY","compareObjects","javascript-natural-sort","796","createCompareTextNumber","797","798","createEqualNumber","799","createEqualScalarNumber","complexEquals","../../utils/complex","800","801","createLargerNumber","802","createLargerEqNumber","803","createSmallerNumber","804","createSmallerEqNumber","805","createUnequalNumber","806","b1","b2","807","inb2","identify","generalize","808","809","810","811","number | BigNumber | Fraction | Complex, Array | Matrix","812","bitarray","813","Array | Matrix, boolean","814","815","816","MAX_NUM","THRESH","ysq","xnum","xden","erf1","del","erfc2","SQRPI","erfc3","817","_improveErrorMessage","...","med","improveErrorMessage","./utils/improveErrorMessage","818","Array | Matrix, number | BigNumber","_largest","containsCollections","819","820","mid","middle2","middle","number | BigNumber | Complex | Unit","number | BigNumber | Complex | Unit, number | BigNumber | Complex | Unit","821","_smallest","822","823","824","sorted","_fracPart","validate","_left","_right","_integerPart","_value","integerPart","fracPart","integerPartNumber","number | BigNumber | Unit","probOrN","dataArr","nPlusOne","probArr","intN","_nPlusOne","currProb","825","Array | Matrix, number | BigNumber, string","normalization","826","827","fnName","details","828","_var","_varDim","829","any, Object | function | number","830","string, Object | Array","string, Object | Array, number | Object","original","831","832","acoshNumber","833","acotNumber","834","acothNumber","835","acscNumber","836","acschNumber","837","asecNumber","838","xInv","asechNumber","839","840","asinhNumber","841","842","843","atanhNumber","844","hasBase","BASE_UNITS","ANGLE","845","846","cotNumber","847","cothNumber","848","cscNumber","849","cschNumber","850","secNumber","851","sechNumber","852","853","sinhNumber","854","855","856","Unit, Unit | string","Matrix, any","any, Matrix","857","858","859","860","isNaNNumber","861","isNegativeNumber","862","number | BigNumber | Fraction | boolean","Complex | Unit | string | null | undefined | Node","863","isPositiveNumber","864","865","isZeroNumber","866","validInputTypes","validOutputTypes","outputType","inputType","867","868","869","870","subtractNumber","divideNumber","fixNumber","floorNumber","log1pNumber","sqrtNumber","normNumber","decimals","871","872","873","874","_arithmetic","_logical","_relational","_probability","_trigonometry","_utils","./arithmetic","./bitwise","./combinations","./logical","./probability","./relational","./trigonometry","./utils","875","876","twoN","threeN","fourN","fiveN","877","878","acosNumber","asinNumber","atanNumber","atan2Number","cosNumber","coshNumber","sinNumber","tanNumber","tanhNumber","879","isIntegerNumber","880","_decimal","decimal.js","881","../../../utils/collection","882","bool","lcase","883","createLazyProxy","chainify","excludedNames","884","885","strRe","strIm","fromPolar","complex.js","886","887","fraction.js","888","889","preprocess","_fit","newSize","_getSubmatrix","dims","_get","submatrix","sSize","iSize","outer","unsqueeze","_setSubmatrix","dataIndex","subIndex","_set","indexI","me","swapRows","vi","890","oneOverLogPhi","_minimum","_cut","isFibonacciHeap","insert","extractMinimum","numberOfChildren","tempRight","numRoots","_linkNodes","_findMinimumNode","_cascadingCut","_decreaseKey","891","isImmutableDenseMatrix","892","skipZeros","893","ranges","_dimensions","_isScalar","_createImmutableMatrix","strings","894","hasStart","hasEnd","hasStep","895","_heap","isSpa","heap","nodei","nodej","896","_createFromArray","_createFromMatrix","_getValueIndex","_insert","ins","_toArray","kk","mvalues","mindex","mptr","_getsubset","_setsubset","_remove","r1","_j","minRow","maxRow","minColumn","maxColumn","invoke","_i5","_i7","vx","vy","897","...number | string | BigNumber | Range | Array | Matrix","898","Array | Matrix, string, string","899","900","denseMatrix","sparseMatrix","cf","cdata","../../../error/DimensionError","901","902","903","xa","xb","wa","wb","904","vc","wai","wbi","905","scatter","906","_scatter","va","vb","907","908","909","910","911","912","csize","_iterate","level","av","bv","cv","913","914","Unit, string | Unit","valuelessUnit","915","916","../utils/number","917","units","UNIT_NONE","prefix","PREFIXES","power","BASE_DIMENSIONS","skipAutomaticSimplification","skipWhitespace","revert","oldIndex","tentativeNumber","tentativeIndex","parseCharacter","toFind","_findUnit","UNITS","prefixes","endsWith","prefixLen","prefixName","_prefix","getNumericIfUnitless","powerMultiplierCurrent","expectingUnit","valueStr","powerMultiplierStack","powerMultiplierStackProduct","uStr","oldC","unitName","parseUnit","baseDim","UNIT_SYSTEMS","auto","allowNoUnits","_isDerived","unitValue","unitOffset","unitPower","unitPrefixValue","_getNumberConverter","_denormalize","prefixValue","valThis","valOther","inverted","toNumeric","matchingBase","matchingUnit","proposedUnitList","currentUnitSystem","missingBaseDim","toSI","si","strNum","strDen","nNum","nDen","simp","isImaginary","VAR","VA","_bestPrefix","unitStr","absValue","absUnitValue","bestPrefix","bestDiff","scientific","SHORT","da","xNumeric","xRounded","testSum","G","LONG","deca","hecto","kilo","mega","giga","tera","peta","exa","zetta","yotta","deci","centi","milli","micro","nano","pico","femto","atto","zepto","yocto","SQUARED","CUBIC","BINARY_SHORT_SI","BINARY_SHORT_IEC","Ki","Mi","Gi","Ti","Pi","Zi","Yi","BINARY_LONG_SI","BINARY_LONG_IEC","kibi","mebi","gibi","tebi","pebi","exi","zebi","yobi","BTU","MM","SHORTLONG","BINARY_SHORT","BINARY_LONG","MASS","LENGTH","TIME","CURRENT","TEMPERATURE","LUMINOUS_INTENSITY","AMOUNT_OF_SUBSTANCE","FORCE","SURFACE","VOLUME","ENERGY","POWER","PRESSURE","ELECTRIC_CHARGE","ELECTRIC_CAPACITANCE","ELECTRIC_POTENTIAL","ELECTRIC_RESISTANCE","ELECTRIC_INDUCTANCE","ELECTRIC_CONDUCTANCE","MAGNETIC_FLUX","MAGNETIC_FLUX_DENSITY","FREQUENCY","BIT","meter","inch","foot","yard","mile","link","rod","angstrom","ft","mi","li","mil","sqin","sqft","sqyd","sqmi","sqrd","sqch","sqmil","acre","hectare","m3","litre","cuin","cuft","cuyd","teaspoon","tablespoon","drop","gtt","minim","fluiddram","fluidounce","gill","cup","pint","quart","gallon","beerbarrel","oilbarrel","hogshead","fldr","floz","gi","qt","gal","bbl","obl","gram","ton","tonne","grain","dram","ounce","poundmass","hundredweight","stick","stone","gr","dr","oz","lbm","cwt","minute","hour","day","week","month","year","decade","century","millennium","hertz","reciprocal","Hz","rad","radian","deg","grad","gradian","cycle","arcsec","arcmin","ampere","K","degC","degF","degR","kelvin","celsius","fahrenheit","rankine","mol","mole","cd","candela","newton","dyn","dyne","lbf","poundforce","kip","joule","erg","Wh","eV","electronvolt","watt","hp","Pa","atm","bar","torr","mmHg","mmH2O","cmH2O","farad","F","volt","V","ohm","henry","siemens","weber","Wb","tesla","ALIASES","meters","inches","feet","yards","miles","rods","chains","angstroms","litres","liter","liters","teaspoons","tablespoons","minims","fluiddrams","fluidounces","gills","cups","pints","quarts","gallons","beerbarrels","oilbarrels","hogsheads","gtts","grams","tons","tonnes","grains","drams","ounces","poundmasses","hundredweights","sticks","lbs","kips","acres","hectares","sqfeet","sqyard","sqmile","sqmiles","mmhg","mmh2o","cmh2o","seconds","secs","minutes","mins","hours","hr","hrs","days","weeks","months","years","decades","centuries","millennia","radians","degrees","gradians","cycles","arcsecond","arcseconds","arcminute","arcminutes","BTUs","watts","joules","amperes","coulombs","volts","ohms","farads","webers","teslas","electronvolts","moles","byte","calculateAngleValues","cgs","us","_key2","setUnitSystem","getUnitSystem","typeConverters","_name2","_unit2","alias","_key3","_key4","deleteUnit","aliases","lastUnit","_key5","createUnitSingle","_c","isValidAlpha","assertUnitNameIsValid","definition","defUnit","newUnit","_newBaseUnit","anyMatch","newBaseUnit","_i6","_i8","aliasName","_alias","_key6","../../utils/bignumber/constants","918","string, Unit | string | Object, Object","def","string, Unit | string | Object","919","Unit, Array","920","number | BigNumber | Fraction | Complex, string","921","createJosephson","unitFactory","numberFactory","922","dimNext","_defaultValue","oldLen","newLen","newArray","flatArray","totalSize","sizeIndex","tmpArray2","tmpArray","_unsqueeze","regexp","separator","itemType","./is","./number","./string","923","prevPrec","bitwise","xBits","yBits","minBits","maxBits","minSign","xSign","ySign","decCoefficientToBinaryString","shortLen","longLen","expFuncVal","outVal","twoPower","two","negOne","924","memoize","hasher","../function","925","notation","toEngineering","exponential","lower","upper","fixedOptions","lowerExp","upperExp","rounded","newExp","valueWithoutExp","../object","926","927","_reduce","./array","928","929","isPlainObject","method","safeNativeProperties","Function","safeNativeMethods","toLocaleString","./object","930","_tinyEmitter","off","once","tiny-emitter","931","assertAndCreate","deps","pickShallow","assertDependencies","sortFactories","isOptionalDependency","factoriesByName","addFactory","containsDependency","missingDependencies","932","memoizeCompare","isEqual","cached","933","934","latexUnits","latexSymbols","_escapeLatex","Alpha","Beta","Gamma","Delta","delta","Epsilon","varepsilon","Zeta","zeta","Eta","eta","Theta","vartheta","Iota","iota","Kappa","kappa","varkappa","Lambda","Mu","mu","Nu","nu","Xi","Omicron","omicron","varpi","Rho","rho","varrho","Sigma","sigma","varsigma","Tau","Upsilon","upsilon","Phi","varphi","Chi","chi","Psi","Omega","omega","Inf","infinity","oo","lim","0","escape-latex","935","messages","_console","936","noIndex","noSubset","937","splitNumber","roundDigits","DBL_EPSILON","missingZeros","expDiff","decimalIdx","decimalVal","splitValue","pp","938","nestedObject","flattenedObject","_deepFlatten","canDefineProperty","valueResolver","_uninitialized","isPath","939","940","half","941","escaped","_formatter","looksLikeFraction","formatArray","./bignumber/formatter","942","943","../../lib/entry/mainAny","944","pool","GLOBAL","startdenom","significance","overflow","oldRandom","ARC4","keylen","width","mixkey","smear","stringseed","tostring","arc4","typ","entropy","Uint8Array","navigator","plugins","screen","autoseed","resetGlobal","945","evtArr","evts","liveEvents","TinyEmitter","946","notOk","_types","anyType","_ignore","_conversions","findTypeByName","typeName","findInArray","hint","findTypeIndex","findTypeName","stringifyParams","typeNames","getTypeName","restParam","parseParam","notEmpty","notIgnore","matchingConversions","conversion","filterConversions","exactTypes","typeIndex","conversionIndex","convertibleTypes","hasRestParam","hasConversions","compileTest","test0","test1","tests","compileTests","lastTest","testRestParam","getParamAtIndex","getExpectedTypeNames","excludeConversions","isExactType","mergeExpectedParams","flatMap","getLowestTypeIndex","getLowestConversionIndex","compareSignatures","signature1","signature2","param1","param2","compareParams","compileArgConversion","conversion0","conversion1","splitParams","ignoreConversionTypes","_splitParams","filteredTypes","typeGroup","hasConflictingParams","array1","array2","hasOverlap","len1","len2","restParam1","restParam2","createTypedFunction","signaturesMap","parsedSignatures","parsedParam","isInvalidParam","parseSignature","notNull","parsedSignature","conflictingSignature","ok0","ok1","ok2","ok3","ok4","ok5","allOk","test00","test10","test20","test30","test40","test50","test01","test11","test21","test31","test41","test51","fns","compiledConversions","fnConvert","fnPreprocess","compileArgsPreprocessing","fn0","fn1","fn2","fn3","fn4","fn5","len0","len3","len4","len5","iStart","iEnd","generic","matchingSignatures","nextMatchingDefs","actualType","lengths","maxLength","expectedLength","createSignaturesMap","getName","extractSignatures","validateUnique","_signature","_fn","...Function","string, ...Function","addType","beforeObjectTest","addConversion"],"mappings":"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CG,OAAU,IAAI7H,OAAO8H,kBAAkBF,OACvCG,OAAS,IAAI5H,WAAWA,WAAW0H,QACvCE,OAAOC,iBAAkB,EAEzBD,OAAOE,uBACP,IAAIlI,OAAS,GACTmI,cAAgB,IAAIpI,cAAcC,QACtCgI,OAAOI,iBAAiBD,eAExB,IAAIE,KAAOL,OAAOM,WACdC,KAAO,IAAItH,eAAeC,QAASC,mBACvClB,OAAOoI,KAAKG,gBAAgBC,QAAQC,KAAKH,KAAMF,MAC5CX,eACFA,cAAc1H,UA6gBd,CAAC2I,cAAc,EAAEC,iBAAiB,EAAEC,eAAe,EAAEC,eAAe,KAAKC,EAAE,CAAC,SAASzJ,QAAQf,OAAOD,SAGtG,IAAI2B,OAASX,QAAQ,gBAGjB0J,cAAgB,CAAC,uDACjB,oDACA,mDACA,mDACA,uDACA,mDACA,qDACA,mDACA,qDACA,oDACA,0DACA,uDACA,mDACA,mDACA,qDACA,yDACA,mDACA,uCACA,qDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,gDACA,iDACA,oDACA,uDACA,oDACA,mDACA,kDACA,wDACA,sDACA,oDACA,2DACA,iDACA,mDACA,oDACA,6DACA,oDACA,mDACA,wDACA,mDACA,+CACA,iDACA,mDACA,mDACA,mDACA,mDACA,iDACA,iDACA,iDACA,iDACA,kDACA,iDACA,iDACA,iDACA,iDACA,kDACA,iDACA,iDACA,iDACA,iDACA,kDACA,mDACA,iDACA,mDACA,mDACA,gDACA,iDACA,iDACA,iDACA,iDACA,iDACA,kDACA,iDACA,iDACA,iDACA,iDACA,kDACA,qDACA,oDACA,mDACA,qDACA,kDACA,oDACA,kDACA,qDACA,kDACA,oDACA,sDACA,kDACA,oDACA,qDACA,iDACA,iDACA,iDACA,iDACA,gDACA,kDACA,gDACA,gDACA,gDACA,iDACA,gDACA,iDACA,kDACA,iDACA,iDACA,iDACA,iDACA,iDACA,kDACA,iDACA,iDACA,iDACA,iDACA,kDACA,iDACA,iDACA,iDACA,iDACA,iDACA,kDACA,iDACA,iDACA,kDA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SrF,OAI/CzB,aAAaC,UAAU8G,YAAc,SAAStF,OAK9CzB,aAAaC,UAAU+G,SAAW,SAASvF,OAI3CzB,aAAaC,UAAUgH,QAAU,SAASxF,OAK1CzB,aAAaC,UAAUkN,UAAY,SAAS1L,OAI5CzB,aAAaC,UAAUmN,SAAW,SAAS3L,OAK3CzB,aAAaC,UAAUiH,aAAe,SAASzF,OAI/CzB,aAAaC,UAAUkH,YAAc,SAAS1F,OAK9CxD,QAAQ+B,aAAeA,cACrB,CAACyI,eAAe,KAAK4E,EAAE,CAAC,SAASpO,QAAQf,OAAOD,SAGlD,IAAI2B,OAASX,QAAQ,gBACjBe,aAAef,QAAQ,kBAAkBe,aAGzC2I,cAAgB,CAAC,uDACjB,oDACA,qDACA,qDACA,uDACA,qDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,kDACA,mDACA,mDACA,mDACA,kDACA,uDACA,yDACA,uDACA,uDACA,uDACA,2CACA,uCACA,uCACA,uCACA,uCACA,6CACA,uDACA,mDACA,iDACA,mDACA,iDACA,mDACA,iDACA,iDACA,iDACA,mDACA,iDACA,qDACA,mDACA,mDACA,mDACA,uDACA,mDACA,qDACA,mDACA,kDACA,kDACA,mDACA,oDACA,oDACA,qDACA,mDACA,mDACA,mDACA,qDACA,qDACA,oDACA,iDACA,oDACA,qDACA,qDACA,mDACA,kDACA,mDACA,kDACA,qDACA,qDACA,kDACA,qDACA,mDACA,oDACA,oDACA,uDACA,mDACA,mDACA,qDACA,qDACA,kDACA,gDACA,mDACA,kDACA,iDACA,mDACA,qDACA,kDACA,kDACA,oDACA,kDACA,kDACA,oDACA,mDACA,oDACA,iDACA,iDACA,iDACA,iDACA,gDACA,+CACA,iDACA,mDACA,mDACA,mDACA,iDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,gDACA,iDACA,gDACA,mDACA,iDACA,gDACA,mDACA,iDACA,mDACA,mDACA,mDACA,mDACA,iDACA,mDACA,gDACA,mDACA,mDACA,mDA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ACE69C,EAAG,MACH79C,EAAG,OAEL,CACE69C,EAAG,YACH79C,EAAG,WAEL,CACE69C,EAAG,WACH79C,EAAG,YAEL,CACE69C,EAAG,YACH79C,EAAG,WAEL,CACE69C,EAAG,WACH79C,EAAG,YAEL,CACE69C,EAAG,aACH79C,EAAG,gBAEL,CACE69C,EAAG,YACH79C,EAAG,WAEL,CACE69C,EAAG,WACH79C,EAAG,aAgBDy2M,YAAc,CAAC,CACjB54J,EAAG,eACH79C,EAAG,gBAEL,CACE69C,EAAG,aACH79C,EAAG,iBAEDs2M,SAAW,GA8Ff,OA1FAA,SAASI,WAAaH,SAASlqL,OAAOmqL,WAAYC,aAElDH,SAASK,cA3BW,CAAC,CACnB94J,EAAG,kBACH79C,EAAG,6BAEL,CACE69C,EAAG,eACH79C,EAAG,qBAEL,CACE69C,EAAG,eACH79C,EAAG,sBAmBLs2M,SAASM,YAAcH,YAEvBH,SAASO,gBAAkBN,SAASlqL,OAAOmqL,YAK3CF,SAASQ,WAAa,CAACjB,aACvB,CACEh4J,EAAG,OACH79C,EAAG,QAEL,CACE69C,EAAG,MACH79C,EAAG,OAEL21M,iBACA,CACE93J,EAAG,UACH79C,EAAG,aAEL,CACE69C,EAAG,SACH79C,EAAG,YAEL,CACE69C,EAAG,aACH79C,EAAG,cAEL,CACE69C,EAAG,YACH79C,EAAG,aAEL,CACE69C,EAAG,UACH79C,EAAG,aAEL,CACE69C,EAAG,SACH79C,EAAG,YAEL,CACE69C,EAAG,UACH79C,EAAG,aAEL,CACE69C,EAAG,SACH79C,EAAG,YAEL,CACE69C,EAAG,UACH79C,EAAG,aAEL,CACE69C,EAAG,SACH79C,EAAG,YAEL,CACE69C,EAAG,aACH79C,EAAG,aAEL,CACE69C,EAAG,YACH79C,EAAG,aAEL,CACE69C,EAAG,cACH79C,EAAG,YAEL,CACE69C,EAAG,SACH79C,EAAG,QAEL,CACE69C,EAAG,SACH79C,EAAG,SAEL,CACE69C,EAAG,MACH79C,EAAG,OAEL,CACE69C,EAAG,aACH79C,EAAG,iBAGEs2M,SAzaUS,GAE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AAG,iBAEL,CACE69C,EAAG,MACH79C,EAAG,OACF,CACD69C,EAAG,WACH79C,EAAG,YACF,CACD69C,EAAG,cACH79C,EAAG,aAEL,CACE69C,EAAG,MACH79C,EAAG,OACF,CACD69C,EAAG,OACH79C,EAAG,KACF,CACD69C,EAAG,aACH79C,EAAG,aACF,CACD69C,EAAG,gBACH79C,EAAG,cAEL,CACE69C,EAAG,sBACH79C,EAAG,0BACF21M,iBAAkB,CACnB93J,EAAG,UACH79C,EAAG,WAGL,CACE69C,EAAG,MACH79C,EAAG,MACHwgD,QAAS,CACP7iC,IAAK,CACHs9L,aAAa,KAGhB,CACDp9J,EAAG,MACH79C,EAAG,MACHwgD,QAAS,CACP5iC,SAAU,CACRq9L,aAAa,KAKnB,CACEp9J,EAAG,QACH79C,EAAG,QAEL,CACE69C,EAAG,YACH79C,EAAG,QAEL,CACE69C,EAAG,WACH79C,EAAG,WACF,CACD69C,EAAG,QACH79C,EAAG,QACF,CACD69C,EAAG,YACH79C,EAAG,aAEL,CACE69C,EAAG,YACH79C,EAAG,WAIL,CACE69C,EAAG,MACH79C,EAAG,KAEL,CACE69C,EAAG,aACH79C,EAAG,eA4FL,IAAI46M,SAAW,EAaf,IAAIG,UAAY7lH,MAAM,YAAa,CACjCihH,eAAgB,SAAoB72L,KAAM6U,MAGxC,IAAIve,IAAM0J,KAIV,GAAI1J,eAAeyzI,cAAgBzzI,eAAeszI,cAChD,GAAItzI,IAAIzS,KACN,IAAK,IAAI9C,EAAI,EAAGA,EAAIuV,IAAIzS,KAAKrC,OAAQT,IACnCuV,IAAIzS,KAAK9C,GAAK06M,UAAUnlM,IAAIzS,KAAK9C,GAAI8zB,WAGhCve,eAAe0zI,iBACpB1zI,IAAIqhL,UACNrhL,IAAIqhL,QAAU8jB,UAAUnlM,IAAIqhL,QAAS9iK,OAKzC,IAeMygK,SAfFsmB,KAAO/mL,KAAKn0B,EAEZujE,QAAU43I,WAAWhnL,KAAK0pB,EAAGjoC,KAAK,GA+BtC,OA3BK2tD,SAAWpvC,KAAK0mL,WACnBK,KAAO/mL,KAAK0mL,SAAS76M,EACrBujE,QAA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"} \ No newline at end of file +{"version":3,"sources":["0"],"names":["f","exports","module","define","amd","window","global","self","this","QuantumCircuit","r","e","n","t","o","i","c","require","u","a","Error","code","p","call","length","1","ErrorListener","errors","antlr4","error","QASMLexer","QASMParser","QASMListener","prototype","Object","create","constructor","syntaxError","rec","sym","line","col","msg","push","QCQASMListener","circuit","compatibilityMode","qregMap","condition","numQbit","num","reg","qregBase","qreg","base","qregLen","enterMainprog","ctx","exitMainprog","enterStatement","gatedecl","args","params","ccount","customGate","customGateName","customGateRegs","getChildCount","getChild","getText","creg","ID","value","parseInt","INT","getPrototypeOf","map","par","parName","goplist","uop","gateName","idlist","anylist","explist","mixedlist","basicGates","customGates","tmpName","tmpDef","exportInfo","qasm","name","qiskit","paramList","paramDef","gateDef","exp","paramItem","paramIndex","paramValue","paramName","options","wires","count","indexOf","external","registerGate","JSON","parse","stringify","addGate","save","exitStatement","enterVersion","exitVersion","enterDecl","createCreg","exitDecl","enterGatedecl","exitGatedecl","enterGoplist","exitGoplist","enterQop","qbit","argument","arg","numBits","x","cbit","bit","exitQop","enterUop","exitUop","enterAnylist","exitAnylist","enterIdlist","exitIdlist","enterMixedlist","exitMixedlist","enterArgument","exitArgument","enterExplist","exitExplist","enterExp","exitExp","enterUnaryop","exitUnaryop","input","errorCallback","chars","InputStream","lexer","tokens","CommonTokenStream","parser","buildParseTrees","removeErrorListeners","errorListener","addErrorListener","tree","mainprog","QASM","ParseTreeWalker","DEFAULT","walk","./QASMLexer","./QASMListener","./QASMParser","antlr4/index","2","serializedATN","join","atn","ATNDeserializer","deserialize","decisionsToDFA","decisionToState","ds","index","dfa","DFA","Lexer","_interp","LexerATNSimulator","PredictionContextCache","defineProperty","get","EOF","Token","T__0","T__1","T__2","T__3","T__4","T__5","T__6","T__7","T__8","T__9","T__10","T__11","T__12","T__13","T__14","T__15","T__16","T__17","T__18","T__19","T__20","T__21","T__22","T__23","T__24","T__25","T__26","T__27","T__28","T__29","T__30","T__31","T__32","PI","REAL","SUBREAL","EXPREAL","WS","FILENAME","COMMENT","LINE_COMMENT","channelNames","modeNames","literalNames","symbolicNames","ruleNames","grammarFileName","3","ParseTreeListener","enterInclude","exitInclude","enterFilename","exitFilename","enterAtom","exitAtom","4","sharedContextCache","Parser","ParserATNSimulator","MainprogContext","parent","invokingState","undefined","ParserRuleContext","ruleIndex","RULE_mainprog","StatementContext","RULE_statement","VersionContext","RULE_version","IncludeContext","RULE_include","FilenameContext","RULE_filename","DeclContext","RULE_decl","GatedeclContext","RULE_gatedecl","GoplistContext","RULE_goplist","QopContext","RULE_qop","UopContext","RULE_uop","AnylistContext","RULE_anylist","IdlistContext","RULE_idlist","MixedlistContext","RULE_mixedlist","ArgumentContext","RULE_argument","ExplistContext","RULE_explist","ExpContext","RULE_exp","AtomContext","RULE_atom","UnaryopContext","RULE_unaryop","version","getTypedRuleContext","statement","getTypedRuleContexts","enterRule","listener","exitRule","localctx","_ctx","state","_la","enterOuterAlt","_errHandler","sync","_input","LA","re","RecognitionException","exception","reportError","recover","decl","getToken","qop","include","adaptivePredict","match","filename","NoViableAltException","getTokens","_alt","ATN","INVALID_ALT_NUMBER","unaryop","atom","_p","_parentctx","_parentState","enterRecursionRule","la_","recoverInline","reportMatch","consume","stop","LT","_parseListeners","triggerExitRuleEvent","pushNewRecursionContext","precpred","FailedPredicateException","unrollRecursionContexts","sempred","predIndex","exp_sempred","5","formatComplex2","im","sre","formatFloat","opt","plusChar","iotaChar","qubitLetter","max","maxN","maxLen","toString","nStr","res","charCodeAt","String","fromCharCode","numQubits","id","description","matrix","drawingInfo","connectors","label","quil","cirq","notTfqSupported","quest","alpha","beta","qsharp","braket","aqasm","quirk","y","z","h","srn","defgate","pyquil","array","srndg","r2","replacement","r4","r8","lambda","theta","rx","ry","rz","u1","u2","phi","u3","s","sdg","dagger","tdg","gpi","func","gpi2","vz","cx","root","controlled","cy","type","cz","ch","csrn","swap","srswap","equivalent","iswap","xx","yy","zz","xy","ms","cr2","cr4","cr8","crx","cry","crz","cu1","cu2","cu3","cs","ct","csdg","ctdg","ccx","cswap","csrswap","reset","measure","init","math","QASMImport","decimalPlaces","round","fixedWidth","toFixed","binStr","len","bin","reverseBitwise","split","reverse","defaultHybridOptions","optimizer","tolerance","costFunction","python","javascript","gates","partitionMap","partitionCount","partitionInfo","hybrid","hybridOptions","keepCustomGates","cregs","collapsed","prob","measureResetsQubit","reverseBitOrder","clear","clearGates","initState","resetState","stateBits","partitionCache","stats","duration","complex","formatComplex","multiplySquareMatrices","m1","m2","d","k","add","multiply","isIdentityMatrix","m","precision","j","isUnitaryMatrix","U","ctranspose","isHermitianMatrix","H","matrixDiff","pow","matrix1","matrix2","total","row1","row2","item1","item2","i1","i2","abs","subtract","parseMathString","str","variables","node","replace","expression","handler","isSymbolNode","evalMathString","vars","parsed","evaluate","Matrix","toArray","parseMatrix","M","A","row","rowIndex","Array","isArray","val","colIndex","matrixHasComplexElement","cell","Complex","mathjs","stringifyMatrix","forceComplex","minify","el","elIndex","matrixRe","newRow","matrixIm","matrixAbs","matrixArg","setCombinedState","combineList","newState","newStateBits","totalQubits","itemIndex","item","dest","bitMaps","cmap","source","and","or","n3","a3","s3","a1","s1","numCols","keys","_setCombinedState","c1","c2","q1","q2","wireMap","q3","c1map","c2map","unused","a2","s2","appendQubits","numAmplitudes","onlyPossible","possibleCount","is","numGates","decompose","load","column","wire","gate","getGateAt","connector","isEmptyCell","w","Math","min","apply","isEmptyPlace","usingCregs","mx","minWire","maxWire","allEmpty","lastNonEmptyPlace","insertColumn","splice","randomString","text","charset","charAt","floor","random","wireList","numConnectors","cregBit","existingCreg","currentValue","isNaN","setCregBit","appendGate","insertGate","insertSpace","removeGateAt","numWires","removeGate","gateId","gatePos","getGatePosById","addMeasure","appendCircuit","pack","colOffset","removeTrailingColumns","isEmptyCol","pop","removeLeadingColumns","emptyCount","shift","removeTrailingRows","isEmptyRow","removeQubit","flipVertically","lastQubit","tmp","flipHorizontally","lastCol","applyTransform","qubits","slice","unusedSpace","getElMask","qubit","ZERO","elrow","rowmask","elcol","colmask","uval","counter","countermask","incmask","getIncMask","notmask","getNotMask","toothless","transformMatrix","targetQubits","endianness","T","zeros","circuitMatrix","decomposed","gotClassicalControl","rawGate","getRawGate","eigenvalues2x2","eigen","divide","sqrt","getBipartiteState","b","bipartiteState","ampCount","chanceMap","sour","reducedState","circ","radius","angles","concurence","entangled","concurencePercent","resetQubit","applyGate","console","log","doReset","g","gateOptions","globalOptions","globalParams","globalParamName","rawGateRow","ev","varName","varIndex","findGlobalParams","cells","cellAdded","gateParamName","gateParamValue","globals","isFunctionNode","extractVariables","getGlobalParams","gotGlobalParams","updateGlobalParams","obj","injectArray","pos","concat","custom","cc","ww","gg","destParam","transformed","transform","path","hasOwnProperty","tmpq","empty","decomposeGateAt","destCol","getGatesAtColumn","convertToCustomGate","addToCircuit","validCustomGateName","baseName","customGateNames","validName","splitIntoBlocks","blockSize","blocks","prevCondition","prevIsUnitary","currentBlock","addedToBlock","currentCondition","currentIsUnitary","newWires","verticalOnly","extColumn","extWires","sort","extWire","extGate","extGateDef","extCondition","gateValid","validExtWires","extW","newExtWire","blockCounter","blockIndex","block","isBlock","flexibleBlockSize","customGateOptions","usedGates","used","skipGate","basicGate","unitariesOnly","noCustomGates","countOps","shallow","ops","subOps","subName","getCouplingMap","couplingMap","wiresStr","getGateDef","importRaw","data","errorMessage","program","basicGateQubits","log2","exportRaw","sequence","gt","rawMatrix","rawRow","toLowerCase","exportToGenerator","exportQASM","output","problem","settings","allowed_gates","coupling_map","fromMatrix","unitary","noVectors","stateCircuit","numSamples","set","initialVector","randomCircuit","useGates","noClassicControl","noMeasure","noReset","run","stateAsArray","amplitude","initialState","lightweight","generateGrayCode","result","gray","dec","grayCodeChain","numCtrlQubits","qControls","qTarget","grayCode","lastPattern","rules","pattern","lmPos","comp","compareStrings","indices","indicesOfChar","idx","countChar","inverseOptions","key","MCU1Circuit","ctrlQubits","invertControls","addX","qc","rule","MCXCircuit","mcu1","mcu1name","mcu1wires","isMultiControlledGate","mcInfo","decodeMultiControlledGateName","rootGate","rootName","ctrlQubit","registerMCXGate","multiControlledGateName","registerMCU1Gate","registerMultiControlledGate","getOrRegisterMultiControlledEquivalent","inverseControl","unshift","gn","tmpGateDef","removeUnusedMultiControlledGates","splitted","substring","namePrefix","isControllableGate","getGateById","getGateBefore","getControllableGatesAtColumn","controllableGates","exportJavaScript","comment","exportAsGateName","asJupyter","js","cline","customGatesAdded","indent","circuitVar","usedGateName","customCircuit","cregCount","cregName","skip","optKey","notebook","metadata","kernelspec","display_name","language","language_info","file_extension","mimetype","nbformat","nbformat_minor","cell_type","outputs","execution_count","exportQiskit","versionStr","providerName","backendName","shots","circuitReplacement","insideSubmodule","exportToQiskit","exportQuEST","definedFunc","newOptions","exportToQuEST","exportToQASM","importQASM","exportPyquil","lattice","asQVM","exportToPyquil","exportQuil","exportToQuil","importQuil","qubitNames","renamedGates","lineOffset","lines","commands","multiline","lineIndex","clines","codelines","trim","codeline","body","lastToken","paramEnd","paramStart","ndx","tok","tk","qindex","token","commandCount","commandIndex","newName","command","toUpperCase","subQuil","subQubitNames","subCircuit","gateInfo","gname","gdef","quilDef","getGateInfo","qubitCount","cregStart","cregEnd","argInt","exportQuirk","tempCircuit","cols","customGateCircuit","gateInformation","gateKeys","gateNumber","gateKey","isDecomposeCustomCircuit","info","gateToAdd","gateInCustomCircuit","previousColumn","previousGate","quirkColumn","wireRange","isBasicGate","gateWires","arr","range","quirkName","param","angle","targetWiresSorted","targetWires","tWire","find","gatePresentInCol","columnElement","wireOffset","customGateWires","gateWire","isWireInRange","exportCirq","exportTfq","exportToCirq","exportQSharp","circuitName","indentDepth","exportToQSharp","exportQobj","experimentName","numShots","exportToQobj","importQobj","qobj","experiments","experiment","header","n_qubits","cregData","creg_sizes","totalBits","cregLen","cregMask","cregDef","mask","offset","instructions","conditions","instIndex","inst","conditionFromMaskAndValue","register","qIndex","memory","memoryToCreg","parIndex","conditional","exportTFQ","exportToTFQ","exportBraket","exportToBraket","exportSVG","embedded","exportToSVG","cellWidth","cellHeight","hSpacing","vSpacing","blackboxPaddingX","blackboxPaddingY","blackboxLineColor","blackboxSelectedLineColor","wireColor","gateLineColor","gateSelectedLineColor","cWireColor","cWireSelectedColor","cArrowSize","hWireColor","wireWidth","wireTextHeight","wireTextDown","wireMargin","wireLabelWidth","dotRadius","paramTextHeight","selectionPaddingX","selectionPaddingY","selectionLineColor","drawBlochSpheres","drawHybrid","getCellX","getCellY","numRows","numCregs","totalCols","totalWireCols","totalWidth","totalWireWidth","totalHeight","hybridWireY","polarToCartesian","centerX","centerY","angleInDegrees","angleInRadians","cos","sin","qWireY","qGateY","cWireY","cregIndex","getCregIndex","gateBoxSVG","gateX","gateY","gateLabel","selected","gateWidth","gateHeight","gateCircleSVG","cellX","cellY","gateNotSVG","gateGaugeSVG","startAngle","endAngle","start","end","largeArcFlag","movedown","gateXSVG","gateDotSVG","gateInvertedDotSVG","gateSVG","drawBox","gateRectSVG","escapeHtml","gateGallery","gateGalleryRaw","customGateGallery","gateList","uniq","uniqStr","dinfo","svg","dotsvg","ndotsvg","placeholders","drawGatePlaceholder","wireY","initSymbol","blackbox","selection","topWire","bottomWire","cLinkTopY","linkX","linkY1","linkY2","paramsStr","paramsCount","paramVal","parseFloat","drawGate","drawGateHandle","currentCol","className","canvasId","drawGateCanvas","gate2X","center2X","hWireX","globalParamsInfo","link2X","link2Y2","link2Y1","cellBottomRightX","cellBottomRightY","mathToStringHandler","adjustIdentation","addStr","ident","cfLines","minIdent","cfLine","tmpIdent","search","addIdent","pc","globalParamValue","identation","globalParamList","qiskitReplacement","qiskitEquivalent","qiskitCondition","replacementParams","replacementCircuit","equivalentCircuit","eqParams","gateParams","eqParamName","argCount","paramCount","globalParamIndex","functions","questName","includes","customQuEST","questParams","qasmReplacement","qasmEquivalent","qasmName","replacementCondition","eqCondition","importGates","defParams","defGates","defRun","defArrays","gotMeasurement","defGateNames","defCircNames","quilInfo","importName","bg","paramText","gotConditions","importsForDefgate","defParamItem","defIndex","cregTotalBits","latticeName","isDefGate","insideControl","testBit","conditionValue","cregBase","cregSize","bitIndex","firstSet","bitStr","bitCount","singleBitIndex","bitValue","bitVal","gotOpenBrace","targetBit","labelCounter","exportToAQASM","isExportPyAQASM","getIndent","depth","gatesToBeAdded","customDecomposedCircuit","decomposedColumn","decomposedWire","circuitGate","gateToRemove","unsupportedGateDefinition","submoduleCount","unsupportedAqasmInfo","gateUnitary","arity","cregLength","aqasmInfo","aqasmInfoName","row_element","evaluated_expression","matrix_element","matrix_element_real","matrix_element_im","exportAQASM","exportToPyAQASM","exportPyAQASM","platform","cirqInfo","isReplaced","defName","gateCounter","multishotKeys","noTfqSupport","isControlledGate","addBraces","tmpParamCount","paramString","tfqReplacement","tfq","parameterJson","pi","isConstantNode","Number","isInteger","operationName","cregList","qreg_name","qsharpInfo","wireIdx","unsupportedBraketInfo","braketInfo","isUnitary","parentQobj","qobj_id","schema_version","config","memory_slots","qreg_sizes","qubit_labels","clbit_labels","cregNames","registerSlots","qobjInstruction","qobjReplacement","qobjEquivalent","booleanInstruction","relation","numberOfBitsShift","maskValue","indexOfRegister","exponent","prevRegisterLength","clearPartitions","createPartitions","wirePartitions","partitionCounter","prevPartitions","prevPartition","wr","partition","oldPartition","partitionBounds","printPartitions","part","partitionIndex","bounds","top","bottom","left","right","parents","found","partitionWire","parentPartition","links","parentBounds","pwire","partitionCircuit","usedWires","combineItem","initialValues","strictMode","continue","valIndex","aindex","Date","partitioning","executeGate","pcirc","pcolumn","pgate","getCregValue","onGate","onColumn","lastPartitions","startTime","lastPartition","lastBounds","skipItems","reverseBits","ampIndex","indexBinStr","amplitudeStr","magnitude","chance","chanceStr","phase","phaseStr","stateAsSimpleArray","stateAsString","perc","print","getCregs","cregsAsString","removeCreg","removeGates","renameCreg","oldName","minCregSize","largestBit","lb","resizeCreg","size","getCreg","getCregBit","regName","bits","measureAll","force","randomWeight","q","measureAllMultishot","counts","randomWeights","shotCount","sh","probabilities","probability","densityMatrix","density","rowVal","colVal","conj","partialTrace","insertBit","posBit","out","trace","unusedCount","unusedLen","qpos","acos","csc","thetaDeg","phiDeg","gateCount","gateQubits","cregBits","randomUnitary","eulerAnglesZYZ","inputMatrix","eulerAngles","coeff","det","toPolar","su_mat","atan2","phiplambda","phimlamda","./qasm_import/QASMImport.js","6","Interval","TokenStream","BufferedTokenStream","tokenSource","fetchedEOF","mark","release","marker","seek","lazyInit","adjustSeekIndex","fetch","nextToken","tokenIndex","types","subset","contains","LB","setup","setTokenSource","nextTokenOnChannel","channel","previousTokenOnChannel","getHiddenTokensToRight","nextOnChannel","DEFAULT_TOKEN_CHANNEL","from_","to","filterForChannel","getHiddenTokensToLeft","prevOnChannel","hidden","getSourceName","interval","fill","./IntervalSet","./Lexer","./Token","7","fs","importScripts","CharStreams","fromString","fromBlob","blob","encoding","onLoad","onError","reader","FileReader","onload","target","onerror","readAsText","fromBuffer","buffer","fromPath","callback","readFile","err","fromPathSync","readFileSync","./InputStream","8","CommonToken","TokenFactory","CommonTokenFactory","copyText","createThin","9","DEFAULT_CHANNEL","getNumberOfOnChannelTokens","./BufferedTokenStream","10","FileStream","fileName","decodeToUnicodeCodePoints","11","strdata","stream","_index","codePoint","codePointAt","codeUnit","_size","_loadString","fromCodePoint","./polyfills/codepointat","./polyfills/fromcodepoint","12","IntervalSet","intervals","readOnly","first","v","INVALID_TYPE","addOne","addInterval","addRange","l","reduce","addSet","other","intervalslength","complement","removeRange","removeOne","elemsAreChar","toTokenString","toCharString","toIndexString","names","elementName","EPSILON","13","Set","BitSet","ATNConfig","RuleStopState","RuleTransition","NotSetTransition","WildcardTransition","AbstractPredicateTransition","predictionContextFromRuleContext","PredictionContext","SingletonPredictionContext","LL1Analyzer","HIT_PRED","getDecisionLookahead","transitions","look","alt","lookBusy","_LOOK","transition","EMPTY","LOOK","stopState","lookContext","calledRuleStack","seeThruPreds","addEOF","context","isEmpty","returnState","states","getReturnState","removed","remove","getParent","newContext","followState","stateNumber","isEpsilon","MIN_USER_TOKEN_TYPE","maxTokenType","./PredictionContext","./Utils","./atn/ATNConfig","./atn/ATNState","./atn/Transition","14","Recognizer","LexerNoViableAltException","_factory","_tokenFactorySourcePair","_token","_tokenStartCharIndex","_tokenStartLine","_tokenStartColumn","_hitEOF","_channel","_type","_modeStack","_mode","DEFAULT_MODE","_text","MORE","SKIP","HIDDEN","HIDDEN_CHANNEL","MIN_CHAR_VALUE","MAX_CHAR_VALUE","tokenStartMarker","emitEOF","continueOuter","ttype","stack","notifyListeners","emit","more","mode","pushMode","debug","popMode","sourceName","emitToken","getCharIndex","cpos","lpos","eof","getAllTokens","getErrorDisplay","getErrorListenerDispatch","getErrorDisplayForChar","getCharErrorDisplay","./CommonTokenFactory","./Recognizer","./error/Errors","15","DefaultErrorStrategy","ATNDeserializationOptions","TerminalNode","ErrorNode","TraceListener","_precedenceStack","_tracer","_syntaxErrors","setInputStream","enterEveryRule","visitTerminal","symbol","exitEveryRule","contructor","bypassAltsAtnCache","setTrace","getCurrentToken","addErrorNode","matchWildcard","_buildParseTrees","getParseListeners","addParseListener","removeParseListener","removeParseListeners","triggerEnterRuleEvent","getTokenFactory","setTokenFactory","factory","getATNWithBypassAlts","serializedAtn","getSerializedATN","deserializationOptions","generateRuleBypassTransitions","compileParseTreePattern","patternRuleIndex","getTokenStream","ParseTreePatternMatcher","compile","getInputStream","setTokenStream","notifyErrorListeners","offendingToken","hasListener","inErrorRecoveryMode","addTokenNode","isErrorNode","visitErrorNode","addContextToParseTree","parentCtx","addChild","altNum","setAltNumber","removeLastChild","getPrecedence","precedence","previous","retCtx","getInvokingContext","inContext","isExpectedToken","following","nextTokens","rt","getExpectedTokens","getExpectedTokensWithinCurrentRule","getRuleIndex","ruleName","getRuleIndexMap","getRuleInvocationStack","getDFAStrings","decisionToDFA","dumpDFA","seenOne","printer","println","decision","./atn/ATNDeserializationOptions","./atn/ATNDeserializer","./error/ErrorStrategy","./tree/Tree","16","RuleContext","Tree","INVALID_INTERVAL","TerminalNodeImpl","ErrorNodeImpl","invokingStateNumber","children","InterpreterRuleContext","copyFrom","child","badToken","ctxType","contexts","getSourceInterval","./RuleContext","17","Hash","cachedHashCode","cache","hash","hashCode","update","finish","EmptyPredictionContext","EMPTY_RETURN_STATE","ArrayPredictionContext","returnStates","merge","rootIsWildcard","mergeCache","rootMerge","payloads","mergeRoot","spc","singleParent","apc","a_","mergeSingletons","mergedReturnStates","mergedParents","payload","ax_ax","mergedParent","a_parent","b_parent","uniqueParents","combineCommonParents","mergeArrays","globalNodeCount","hasEmptyPath","updateHashCode","existing","equals","up","outerContext","getCachedPredictionContext","contextCache","visited","changed","updated","18","ConsoleErrorListener","ProxyErrorListener","_listeners","INSTANCE","_stateNumber","tokenTypeMapCache","ruleIndexMapCache","checkVersion","toolVersion","getTokenTypeMap","tokenNames","getTokenNames","getTokenType","tokenName","getErrorHeader","getOffendingToken","getTokenErrorDisplay","actionIndex","./error/ErrorListener","19","RuleNode","getRuleContext","getPayload","getAltNumber","altNumber","accept","visitor","visitChildren","Trees","toStringTree","recog","ri","./atn/ATN","./tree/Trees","20","EMPTY_SOURCE","getTokenSource","clone","txt","21","arrayToString","standardEqualsFunction","standardHashCodeFunction","hashFunction","equalsFunction","Map","AltDict","DoubleDict","seed","h1b","k1","remainder","bytes","h1","values","minValue","hashKey","put","entries","entry","oldValue","containsKey","getKeys","getValues","arguments","hashStuff","escapeWhitespace","escapeSpaces","titleCase","substr","equalArrays","22","grammarType","ruleToStartState","ruleToStopState","modeNameToStartState","ruleToTokenType","lexerActions","modeToStartState","nextTokensInContext","nextTokensNoContext","nextTokenWithinRule","addState","removeState","defineDecisionState","getDecisionState","expected","./../IntervalSet","./../LL1Analyzer","./../Token","23","DecisionState","SemanticContext","checkParams","isCfg","semanticContext","reachesIntoOuterContext","props","precedenceFilterSuppressed","checkContext","NONE","LexerATNConfig","lexerActionExecutor","passedThroughNonGreedyDecision","checkNonGreedyDecision","hashCodeForConfigSet","equalsForConfigSet","nonGreedy","../Utils","./ATNState","./SemanticContext","24","Utils","hashATNConfig","equalATNConfigs","ATNConfigSet","fullCtx","configLookup","configs","uniqueAlt","conflictingAlts","hasSemanticContext","dipsIntoOuterContext","OrderedATNConfigSet","merged","getStates","getPredicates","preds","optimizeConfigs","interpreter","getCachedContext","addAll","coll","containsFast","setReadonly","./../PredictionContext","./../Utils","./ATN","25","verifyATN","defaultOptions","26","ATNType","ATNStates","ATNState","BasicState","BlockStartState","BlockEndState","LoopEndState","RuleStartState","TokensStartState","PlusLoopbackState","StarLoopbackState","StarLoopEntryState","PlusBlockStartState","StarBlockStartState","BasicBlockStartState","Transitions","Transition","AtomTransition","SetTransition","RangeTransition","ActionTransition","EpsilonTransition","PredicateTransition","PrecedencePredicateTransition","LexerActions","LexerActionType","LexerSkipAction","LexerChannelAction","LexerCustomAction","LexerMoreAction","LexerTypeAction","LexerPushModeAction","LexerPopModeAction","LexerModeAction","ADDED_UNICODE_SMP","SUPPORTED_UUIDS","initArray","stateFactories","actionFactories","isFeatureSupported","feature","actualUuid","idx1","checkUUID","readATN","readStates","readRules","readModes","sets","readSets","readInt","bind","uuid","readInt32","readEdges","readDecisions","readLexerActions","markPrecedenceDecisions","PARSER","temp","readUUID","pair","loopBackStateNumbers","endStateNumbers","nstates","loopBackStateNumber","endStateNumber","stype","stateFactory","LOOP_END","loopBackState","endState","numNonGreedyStates","numPrecedenceStates","isPrecedenceRule","nrules","LEXER","tokenType","startState","nmodes","readUnicode","iset","nedges","src","trg","arg1","arg2","arg3","trans","edgeFactory","addTransition","outermostPrecedenceReturn","ndecisions","decState","actionType","data1","data2","lexerAction","lexerActionFactory","generateRuleBypassTransition","bypassStart","bypassStop","excludeTransition","stateIsEndStateFor","matchState","maybeLoopEndState","epsilonOnlyTransitions","isPrecedenceDecision","checkCondition","message","readLong","byteToHex","bth","createByteToHex","bb","int","RANGE","RULE","PREDICATE","PRECEDENCE","ATOM","ACTION","SET","NOT_SET","WILDCARD","sf","BASIC","RULE_START","BLOCK_START","PLUS_BLOCK_START","STAR_BLOCK_START","TOKEN_START","RULE_STOP","BLOCK_END","STAR_LOOP_BACK","STAR_LOOP_ENTRY","PLUS_LOOP_BACK","af","CHANNEL","CUSTOM","MODE","POP_MODE","PUSH_MODE","TYPE","./ATNDeserializationOptions","./ATNType","./LexerAction","./Transition","27","DFAState","ATNSimulator","ERROR","./../dfa/DFAState","./ATNConfigSet","28","INVALID_STATE_NUMBER","stateType","serializationNames","isNonGreedyExitState","29","30","LexerActionExecutor","resetSimState","sim","dfaState","SimState","startIndex","prevAccept","dfa_debug","MIN_DFA_EDGE","MAX_DFA_EDGE","match_calls","copyState","simulator","s0","matchATN","execATN","old_mode","s0_closure","computeStartState","suppressEdge","next","addDFAState","predict","toLexerString","ds0","isAcceptState","captureSimState","getExistingTargetState","computeTargetState","failOrAccept","edges","reach","getReachableConfigSet","items","addDFAEdge","prediction","closure","skipAlt","cfg","currentAltReachedAcceptState","getTokenName","treatEofAsEpsilon","getReachableTarget","fixOffsetBeforeMatch","charPos","execute","matches","initialContext","speculative","getEpsilonTarget","serializationType","evaluatePredicate","append","savedcolumn","savedLine","cfgs","proposed","firstConfigWithRuleStopState","getDFA","tt","./../Lexer","./../error/Errors","./ATNConfig","./ATNSimulator","./LexerActionExecutor","31","LexerAction","action","isPositionDependent","LexerIndexedCustomAction","32","updatedLexerActions","requiresSeek","stopIndex","numActions","33","PredPrediction","PredictionMode","predictionMode","LL","_startIndex","_outerContext","_dfa","debug_closure","debug_add","debug_list_atn_decisions","retry_debug","getLookaheadName","precedenceDfa","getPrecedenceStartState","atnStartState","applyPrecedenceFilter","setPrecedenceStartState","previousD","D","noViableAlt","getSynValidOrSemInvalidAltThatFinishedDecisionEntryRule","requiresFullContext","SLL","predicates","conflictIndex","evalSemanticContext","reportAttemptingFullContext","execATNWithFullContext","alts","reportAmbiguity","computeReachSet","altSubSets","predictedAlt","getUniqueAlt","getConflictingAltSubsets","allSubsetsConflict","getConflictingAlts","hasSLLConflictTerminatingPrediction","predicateDFAState","decisionState","nalts","altsToCollectPredsFrom","getConflictingAltsOrUniqueAlt","altToPred","getPredsForAmbigAlts","getPredicatePredictions","foundExactAmbig","resolvesToJustOneViableAlt","LL_EXACT_AMBIG_DETECTION","allSubsetsEqual","getSingleViableAlt","reportContextSensitivity","intermediate","skippedStopStates","closureBusy","removeAllConfigsNotInRuleStopState","hasConfigInRuleStopState","lookToEndOfRule","allConfigsInRuleStopStates","endOfRuleState","updatedContext","statesFromAlt1","configSet","evalPrecedence","ambigAlts","orContext","nPredAlts","pred","pairs","containsPredicate","splitAccordingToSemanticValidity","semValidConfigs","semInvalidConfigs","getAltThatFinishedDecisionEntryRule","succeeded","failed","predPredictions","complete","predictions","predicateEvaluationResult","collectPredicates","closureCheckingStopState","parms","getRuleName","closure_","canDropLoopEntryEdgeInLeftRecursiveRule","continueCollecting","newDepth","numCtxs","blockEndStateNum","blockEndState","returnStateNumber","returnStateTarget","ruleTransition","precedenceTransition","predTransition","actionTransition","pt","currentPosition","predSucceeds","newSemCtx","getPredicate","andContext","isCtxDependent","altsets","getAlts","dumpDeadEndConfigs","nvae","decs","getDeadEndConfigs","exact","./../ParserRuleContext","./../RuleContext","./PredictionMode","34","dup","hasConflictingAltSet","hasStateAssociatedWithOneAlt","hasNonConflictingAltSet","all","configToAlts","getStateToAltMap","minAlt","35","Predicate","PrecedencePredicate","AND","operands","opnds","reduced","precedencePredicates","filterPrecedencePredicates","OR","compareTo","differs","evaluated","36","label_","makeLabel","ruleStart","serializationTypes","minVocabSymbol","maxVocabSymbol","37","./ATNDeserializer","./LexerATNSimulator","./ParserATNSimulator","38","DFASerializer","LexerDFASerializer","precedenceState","_states","setPrecedenceDfa","DFAStatesSet","sortedStates","../atn/ATNState","./../atn/ATNConfigSet","./DFASerializer","./DFAState","39","buf","getStateString","getEdgeLabel","baseStateStr","40","getAltSet","41","./DFA","42","DiagnosticErrorListener","exactOnly","recognizer","getDecisionDescription","reportedAlts","./ErrorListener","43","delegates","offendingSymbol","44","Errors","InputMismatchException","ParseCancellationException","ErrorStrategy","errorRecoveryMode","lastErrorIndex","lastErrorStates","BailErrorStrategy","endErrorCondition","beginErrorCondition","reportNoViableAlternative","reportInputMismatch","reportFailedPredicate","getMessage","followSet","getErrorRecoverySet","consumeUntil","la","singleTokenDeletion","reportUnwantedToken","expecting","whatFollowsLoopIterationOrRule","startToken","escapeWSAndQuote","reportMissingToken","matchedSymbol","singleTokenInsertion","getMissingSymbol","currentSymbolType","nextTokenType","currentSymbol","expectedTokenType","tokenText","current","lookback","recoverSet","follow","./../atn/ATNState","./Errors","45","captureStackTrace","offendingState","deadEndConfigs","predicate","formatMessage","predicateIndex","./../atn/Transition","46","./DiagnosticErrorListener","./ErrorStrategy","47","codepointat","fromcodepoint","./CharStreams","./CommonTokenStream","./FileStream","./Parser","./ParserRuleContext","./atn/index","./dfa/index","./error/index","./tree/index","48","position","TypeError","string","second","object","$defineProperty","configurable","writable","49","_","highSurrogate","lowSurrogate","codeUnits","isFinite","RangeError","stringFromCharCode","50","SyntaxTree","ParseTree","ParseTreeVisitor","visit","getSymbol","../Utils.js","51","getNodeText","getChildren","list","getAncestors","ancestors","findAllTokenNodes","findAllNodes","findAllRuleNodes","findTokens","nodes","_findAllNodes","descendants","./../atn/ATN","./Tree","52","./Trees","53","54","cosh","sinh","parser_exit","SyntaxError","logHypot","_a","_b","plus","minus","sign","sub","mul","div","loh","expm1","limit","cosm1","tan","cot","sec","asin","t1","t2","atan","Infinity","acot","asec","acsc","tanh","coth","csch","sech","asinh","acosh","atanh","noIM","oneMinus","onePlus","acoth","acsch","asech","inverse","conjugate","neg","ceil","places","ret","toVector","valueOf","isZero","isInfinite","E","NaN","55","globalScope","Decimal","inexact","noConflict","quadrant","EXP_LIMIT","MAX_DIGITS","NUMERALS","LN10","DEFAULTS","rounding","modulo","toExpNeg","toExpPos","minE","maxE","crypto","decimalError","invalidArgument","precisionLimitExceeded","cryptoUnavailable","mathfloor","mathpow","isBinary","isHex","isOctal","isDecimal","BASE","LOG_BASE","LN10_PRECISION","PI_PRECISION","P","digitsToString","ws","indexOfLastWord","getZeroString","checkInt32","checkRoundingDigits","rm","repeating","di","rd","convertBase","baseIn","baseOut","arrL","strL","absoluteValue","finalise","comparedTo","cmp","xdL","ydL","xd","yd","xs","ys","cosine","pr","Ctor","sd","tinyPow","taylorSeries","times","cos2x","toLessThanHalfPi","cubeRoot","cbrt","rep","t3","t3plusx","toExponential","eq","dp","dividedBy","dividedToIntegerBy","divToInt","greaterThan","greaterThanOrEqualTo","gte","hyperbolicCosine","one","cosh2_x","d8","hyperbolicSine","sinh2_x","d5","d16","d20","hyperbolicTangent","inverseCosine","halfPi","isNeg","getPi","inverseHyperbolicCosine","lte","ln","inverseHyperbolicSine","inverseHyperbolicTangent","wpr","xsd","inverseSine","inverseTangent","px","x2","isInt","isNegative","isPositive","isPos","lessThan","lt","lessThanOrEqualTo","logarithm","isBase10","denominator","inf","naturalLogarithm","getLn10","xe","xLTy","getBase10Exponent","mod","naturalExponential","negated","carry","getPrecision","sine","sin2_x","squareRoot","tangent","rL","toBinary","toStringBinary","toDecimalPlaces","toDP","finiteToString","toFraction","maxD","d0","d1","d2","n0","n1","toHexadecimal","toHex","toNearest","toNumber","toOctal","toPower","yn","intPow","toPrecision","toSignificantDigits","toSD","truncated","trunc","toJSON","logBase","prod","prodL","qd","rem","remL","rem0","xi","xL","yd0","yL","yz","multiplyInteger","compare","aL","bL","isTruncated","digits","roundUp","xdi","isExp","nonFiniteToString","zs","truncate","isOdd","maxOrMin","ltgt","guard","sum","c0","numerator","x1","parseDecimal","parseOther","divisor","isFloat","test","isHyperbolic","useDefaults","defaults","ps","getRandomValues","randomBytes","hypot","isDecimalInstance","log10","Uint32Array","copy","ROUND_UP","ROUND_DOWN","ROUND_CEIL","ROUND_FLOOR","ROUND_HALF_UP","ROUND_HALF_DOWN","ROUND_HALF_EVEN","ROUND_HALF_CEIL","ROUND_HALF_FLOOR","EUCLID","Symbol","iterator","for","toStringTag","56","_extends","assign","defaultEscapes","{","}","\\","#","$","%","&","^","~","formatEscapes","–","—"," ","\t","\r\n","\n","defaultEscapeMapFn","_ref","_ref$preserveFormatti","preserveFormatting","_ref$escapeMapFn","escapeMapFn","runningStr","escapes","escapeKeys","specialCharFound","forEach","_loop","57","createError","errorConstructor","IntermediateInheritor","DivisionByZero","Fraction","InvalidParameter","throwInvalidParam","p1","p2","B","C","N","cycleStart","rem1","rem2","modpow","gcd","lcm","simplify","eps","cont","divisible","excludeWhole","whole","toLatex","toContinued","cycLen","cycleLen","cycOff","58","naturalSort","insensitive","oFxNcL","oFyNcL","dre","hre","ore","xN","yN","xD","yD","cLoc","numS","59","createVersion","createUppercaseE","createUppercasePi","createI","createSQRT2","createSQRT1_2","createLOG10E","createLOG2E","createLN10","createLN2","createPhi","createE","createTau","createPi","createNaN","createInfinity","createNull","createFalse","createTrue","_version","_constants","_number","recreateFactory","BigNumber","number","_ref2","_ref3","createBigNumberPi","_ref4","createBigNumberTau","tau","_ref5","createBigNumberE","_ref6","createBigNumberPhi","_ref7","LN2","_ref8","_ref9","LOG2E","_ref10","LOG10E","_ref11","SQRT1_2","_ref12","SQRT2","_ref13","I","_ref14","_ref15","dependencies","recreateOnConfigChange","./plain/number","./utils/bignumber/constants","./utils/factory","./version","60","DEFAULT_CONFIG","epsilon","predictable","randomSeed","61","_typeof","_object","emitter","__esModule","default","_getRequireWildcardCache","has","newObj","hasPropertyDescriptor","getOwnPropertyDescriptor","desc","_interopRequireWildcard","_import","_config","_is","_array","_log","_ArgumentsError","_DimensionError","_IndexError","_config2","WeakMap","factories","configInternal","mixin","isNumber","isComplex","isBigNumber","isFraction","isUnit","isString","isMatrix","isCollection","isDenseMatrix","isSparseMatrix","isRange","isIndex","isBoolean","isResultSet","isHelp","isFunction","isDate","isRegExp","isObject","isNull","isUndefined","isAccessorNode","isArrayNode","isAssignmentNode","isBlockNode","isConditionalNode","isFunctionAssignmentNode","isIndexNode","isNode","isObjectNode","isOperatorNode","isParenthesisNode","isRangeNode","isChain","configFactory","mathWithTransform","legacyFactories","legacyInstances","importedFactories","internalImport","importFactory","_len","_key","typed","isFactory","firstProperty","isLegacyFactory","warn","instance","on","meta","override","deepFlatten","fullName","parts","initial","last","traverse","lazy","warnOnce","ArgumentsError","DimensionError","IndexError","../error/ArgumentsError","../error/DimensionError","../error/IndexError","../utils/array","../utils/factory","../utils/is","../utils/log","./../utils/emitter","./../utils/object","./../utils/polyfills","./config","./function/config","./function/import","62","prev","mapObject","validateOption","MATRIX_OPTIONS","NUMBER_OPTIONS","deepExtend","curr","changes","enumerable","findIndex","../../utils/object","../config","63","createDeprecatedImport","64","_importTransform","allowedInExpressions","_deleteTransform","isTypedFunction","fn","signatures","unsafe","legacyFactoryAllowedInExpressions","factoryAllowedInExpressions","isClass","isTransformFunctionFactory","isTransformFunction","docs","json","chain","flatValues","flattenImports","existingTransform","namespace","resolver","silent","_importLegacyFactory","_name","flatName","stripOptionalNotation","dependency","classes","_importFactory","wrap","wrapper","_wrap","signature","hasTypedFunctionSignature","_defineProperty","../../error/ArgumentsError","../../utils/array","../../utils/factory","../../utils/is","../../utils/log","65","createTyped","_typedFunction","_createTyped2","DenseMatrix","conversions","from","convert","throwNoBignumber","throwNoComplex","throwNoFraction","throwNoMatrix","../../utils/number","typed-function","66","allFactories","../factoriesAny","67","freeze","../core/config","../core/function/config","68","_dependenciesTyped","typedDependencies","_dependenciesResultSet","ResultSetDependencies","_dependenciesBigNumberClass","BigNumberDependencies","_dependenciesComplexClass","ComplexDependencies","_dependenciesFractionClass","FractionDependencies","_dependenciesRangeClass","RangeDependencies","_dependenciesMatrixClass","MatrixDependencies","_dependenciesDenseMatrixClass","DenseMatrixDependencies","_dependenciesClone","cloneDependencies","_dependenciesIsInteger","isIntegerDependencies","_dependenciesIsNegative","isNegativeDependencies","_dependenciesIsNumeric","isNumericDependencies","_dependenciesHasNumericValue","hasNumericValueDependencies","_dependenciesIsPositive","isPositiveDependencies","_dependenciesIsZero","isZeroDependencies","_dependenciesIsNaN","isNaNDependencies","_dependenciesTypeOf","typeOfDependencies","_dependenciesDeprecatedTypeof","typeofDependencies","_dependenciesEqualScalar","equalScalarDependencies","_dependenciesSparseMatrixClass","SparseMatrixDependencies","_dependenciesNumber","numberDependencies","_dependenciesString","stringDependencies","_dependenciesBoolean","booleanDependencies","_dependenciesBignumber","bignumberDependencies","_dependenciesComplex","complexDependencies","_dependenciesFraction","fractionDependencies","_dependenciesMatrix","matrixDependencies","_dependenciesSplitUnit","splitUnitDependencies","_dependenciesUnaryMinus","unaryMinusDependencies","_dependenciesUnaryPlus","unaryPlusDependencies","_dependenciesAbs","absDependencies","_dependenciesApply","applyDependencies","_dependenciesAddScalar","addScalarDependencies","_dependenciesCbrt","cbrtDependencies","_dependenciesCeil","ceilDependencies","_dependenciesCube","cubeDependencies","_dependenciesExp","expDependencies","_dependenciesExpm","expm1Dependencies","_dependenciesFix","fixDependencies","_dependenciesFloor","floorDependencies","_dependenciesGcd","gcdDependencies","_dependenciesLcm","lcmDependencies","_dependenciesLog","log10Dependencies","_dependenciesLog2","log2Dependencies","_dependenciesMod","modDependencies","_dependenciesMultiplyScalar","multiplyScalarDependencies","_dependenciesMultiply","multiplyDependencies","_dependenciesNthRoot","nthRootDependencies","_dependenciesSign","signDependencies","_dependenciesSqrt","sqrtDependencies","_dependenciesSquare","squareDependencies","_dependenciesSubtract","subtractDependencies","_dependenciesXgcd","xgcdDependencies","_dependenciesDotMultiply","dotMultiplyDependencies","_dependenciesBitAnd","bitAndDependencies","_dependenciesBitNot","bitNotDependencies","_dependenciesBitOr","bitOrDependencies","_dependenciesBitXor","bitXorDependencies","_dependenciesArg","argDependencies","_dependenciesConj","conjDependencies","_dependenciesIm","imDependencies","_dependenciesRe","reDependencies","_dependenciesNot","notDependencies","_dependenciesOr","orDependencies","_dependenciesXor","xorDependencies","_dependenciesConcat","concatDependencies","_dependenciesColumn","columnDependencies","_dependenciesCross","crossDependencies","_dependenciesDiag","diagDependencies","_dependenciesEye","eyeDependencies","_dependenciesFilter","filterDependencies","_dependenciesFlatten","flattenDependencies","_dependenciesForEach","forEachDependencies","_dependenciesGetMatrixDataType","getMatrixDataTypeDependencies","_dependenciesIdentity","identityDependencies","_dependenciesKron","kronDependencies","_dependenciesMap","mapDependencies","_dependenciesOnes","onesDependencies","_dependenciesRange","rangeDependencies","_dependenciesReshape","reshapeDependencies","_dependenciesResize","resizeDependencies","_dependenciesRow","rowDependencies","_dependenciesSize","sizeDependencies","_dependenciesSqueeze","squeezeDependencies","_dependenciesSubset","subsetDependencies","_dependenciesTranspose","transposeDependencies","_dependenciesCtranspose","ctransposeDependencies","_dependenciesZeros","zerosDependencies","_dependenciesErf","erfDependencies","_dependenciesMode","modeDependencies","_dependenciesProd","prodDependencies","_dependenciesFormat","formatDependencies","_dependenciesPrint","printDependencies","_dependenciesTo","toDependencies","_dependenciesIsPrime","isPrimeDependencies","_dependenciesNumeric","numericDependencies","_dependenciesDivideScalar","divideScalarDependencies","_dependenciesPow","powDependencies","_dependenciesRound","roundDependencies","_dependenciesLog3","logDependencies","_dependenciesLog1p","log1pDependencies","_dependenciesNthRoots","nthRootsDependencies","_dependenciesDotPow","dotPowDependencies","_dependenciesDotDivide","dotDivideDependencies","_dependenciesLsolve","lsolveDependencies","_dependenciesUsolve","usolveDependencies","_dependenciesLeftShift","leftShiftDependencies","_dependenciesRightArithShift","rightArithShiftDependencies","_dependenciesRightLogShift","rightLogShiftDependencies","_dependenciesAnd","andDependencies","_dependenciesCompare","compareDependencies","_dependenciesCompareNatural","compareNaturalDependencies","_dependenciesCompareText","compareTextDependencies","_dependenciesEqual","equalDependencies","_dependenciesEqualText","equalTextDependencies","_dependenciesSmaller","smallerDependencies","_dependenciesSmallerEq","smallerEqDependencies","_dependenciesLarger","largerDependencies","_dependenciesLargerEq","largerEqDependencies","_dependenciesDeepEqual","deepEqualDependencies","_dependenciesUnequal","unequalDependencies","_dependenciesPartitionSelect","partitionSelectDependencies","_dependenciesSort","sortDependencies","_dependenciesMax","maxDependencies","_dependenciesMin","minDependencies","_dependenciesImmutableDenseMatrixClass","ImmutableDenseMatrixDependencies","_dependenciesIndexClass","IndexDependencies","_dependenciesFibonacciHeapClass","FibonacciHeapDependencies","_dependenciesSpaClass","SpaDependencies","_dependenciesUnitClass","UnitDependencies","_dependenciesUnitFunction","unitDependencies","_dependenciesSparse","sparseDependencies","_dependenciesCreateUnit","createUnitDependencies","_dependenciesAcos","acosDependencies","_dependenciesAcosh","acoshDependencies","_dependenciesAcot","acotDependencies","_dependenciesAcoth","acothDependencies","_dependenciesAcsc","acscDependencies","_dependenciesAcsch","acschDependencies","_dependenciesAsec","asecDependencies","_dependenciesAsech","asechDependencies","_dependenciesAsin","asinDependencies","_dependenciesAsinh","asinhDependencies","_dependenciesAtan","atanDependencies","_dependenciesAtan2","atan2Dependencies","_dependenciesAtanh","atanhDependencies","_dependenciesCos","cosDependencies","_dependenciesCosh","coshDependencies","_dependenciesCot","cotDependencies","_dependenciesCoth","cothDependencies","_dependenciesCsc","cscDependencies","_dependenciesCsch","cschDependencies","_dependenciesSec","secDependencies","_dependenciesSech","sechDependencies","_dependenciesSin","sinDependencies","_dependenciesSinh","sinhDependencies","_dependenciesTan","tanDependencies","_dependenciesTanh","tanhDependencies","_dependenciesSetCartesian","setCartesianDependencies","_dependenciesSetDifference","setDifferenceDependencies","_dependenciesSetDistinct","setDistinctDependencies","_dependenciesSetIntersect","setIntersectDependencies","_dependenciesSetIsSubset","setIsSubsetDependencies","_dependenciesSetMultiplicity","setMultiplicityDependencies","_dependenciesSetPowerset","setPowersetDependencies","_dependenciesSetSize","setSizeDependencies","_dependenciesSetSymDifference","setSymDifferenceDependencies","_dependenciesSetUnion","setUnionDependencies","_dependenciesAdd","addDependencies","_dependenciesHypot","hypotDependencies","_dependenciesNorm","normDependencies","_dependenciesDot","dotDependencies","_dependenciesTrace","traceDependencies","_dependenciesIndex","indexDependencies","_dependenciesNode","NodeDependencies","_dependenciesAccessorNode","AccessorNodeDependencies","_dependenciesArrayNode","ArrayNodeDependencies","_dependenciesAssignmentNode","AssignmentNodeDependencies","_dependenciesBlockNode","BlockNodeDependencies","_dependenciesConditionalNode","ConditionalNodeDependencies","_dependenciesConstantNode","ConstantNodeDependencies","_dependenciesFunctionAssignmentNode","FunctionAssignmentNodeDependencies","_dependenciesIndexNode","IndexNodeDependencies","_dependenciesObjectNode","ObjectNodeDependencies","_dependenciesOperatorNode","OperatorNodeDependencies","_dependenciesParenthesisNode","ParenthesisNodeDependencies","_dependenciesRangeNode","RangeNodeDependencies","_dependenciesRelationalNode","RelationalNodeDependencies","_dependenciesSymbolNode","SymbolNodeDependencies","_dependenciesFunctionNode","FunctionNodeDependencies","_dependenciesParse","parseDependencies","_dependenciesCompile","compileDependencies","_dependenciesEvaluate","evaluateDependencies","_dependenciesDeprecatedEval","evalDependencies","_dependenciesParserClass","ParserDependencies","_dependenciesParser","parserDependencies","_dependenciesLup","lupDependencies","_dependenciesQr","qrDependencies","_dependenciesSlu","sluDependencies","_dependenciesLusolve","lusolveDependencies","_dependenciesHelpClass","HelpDependencies","_dependenciesChainClass","ChainDependencies","_dependenciesHelp","helpDependencies","_dependenciesChain","chainDependencies","_dependenciesDet","detDependencies","_dependenciesInv","invDependencies","_dependenciesEigs","eigsDependencies","_dependenciesExpm2","expmDependencies","_dependenciesSqrtm","sqrtmDependencies","_dependenciesDivide","divideDependencies","_dependenciesDistance","distanceDependencies","_dependenciesIntersect","intersectDependencies","_dependenciesSum","sumDependencies","_dependenciesMean","meanDependencies","_dependenciesMedian","medianDependencies","_dependenciesMad","madDependencies","_dependenciesVariance","varianceDependencies","_dependenciesDeprecatedVar","varDependencies","_dependenciesQuantileSeq","quantileSeqDependencies","_dependenciesStd","stdDependencies","_dependenciesCombinations","combinationsDependencies","_dependenciesCombinationsWithRep","combinationsWithRepDependencies","_dependenciesGamma","gammaDependencies","_dependenciesFactorial","factorialDependencies","_dependenciesKldivergence","kldivergenceDependencies","_dependenciesMultinomial","multinomialDependencies","_dependenciesPermutations","permutationsDependencies","_dependenciesPickRandom","pickRandomDependencies","_dependenciesRandom","randomDependencies","_dependenciesRandomInt","randomIntDependencies","_dependenciesStirlingS","stirlingS2Dependencies","_dependenciesBellNumbers","bellNumbersDependencies","_dependenciesCatalan","catalanDependencies","_dependenciesComposition","compositionDependencies","_dependenciesSimplify","simplifyDependencies","_dependenciesDerivative","derivativeDependencies","_dependenciesRationalize","rationalizeDependencies","_dependenciesReviver","reviverDependencies","_dependenciesReplacer","replacerDependencies","_dependenciesE","eDependencies","_dependenciesUppercaseE","EDependencies","_dependenciesFalse","falseDependencies","_dependenciesI","iDependencies","_dependenciesInfinity","InfinityDependencies","_dependenciesLN","LN10Dependencies","_dependenciesLN2","LN2Dependencies","_dependenciesLOG10E","LOG10EDependencies","_dependenciesLOG2E","LOG2EDependencies","_dependenciesNaN","NaNDependencies","_dependenciesNull","nullDependencies","_dependenciesPhi","phiDependencies","_dependenciesPi","piDependencies","_dependenciesUppercasePi","PIDependencies","_dependenciesSQRT1_","SQRT1_2Dependencies","_dependenciesSQRT","SQRT2Dependencies","_dependenciesTau","tauDependencies","_dependenciesTrue","trueDependencies","_dependenciesVersion","versionDependencies","_dependenciesAtomicMass","atomicMassDependencies","_dependenciesAvogadro","avogadroDependencies","_dependenciesBohrMagneton","bohrMagnetonDependencies","_dependenciesBohrRadius","bohrRadiusDependencies","_dependenciesBoltzmann","boltzmannDependencies","_dependenciesClassicalElectronRadius","classicalElectronRadiusDependencies","_dependenciesConductanceQuantum","conductanceQuantumDependencies","_dependenciesCoulomb","coulombDependencies","_dependenciesDeuteronMass","deuteronMassDependencies","_dependenciesEfimovFactor","efimovFactorDependencies","_dependenciesElectricConstant","electricConstantDependencies","_dependenciesElectronMass","electronMassDependencies","_dependenciesElementaryCharge","elementaryChargeDependencies","_dependenciesFaraday","faradayDependencies","_dependenciesFermiCoupling","fermiCouplingDependencies","_dependenciesFineStructure","fineStructureDependencies","_dependenciesFirstRadiation","firstRadiationDependencies","_dependenciesGasConstant","gasConstantDependencies","_dependenciesGravitationConstant","gravitationConstantDependencies","_dependenciesGravity","gravityDependencies","_dependenciesHartreeEnergy","hartreeEnergyDependencies","_dependenciesInverseConductanceQuantum","inverseConductanceQuantumDependencies","_dependenciesKlitzing","klitzingDependencies","_dependenciesLoschmidt","loschmidtDependencies","_dependenciesMagneticConstant","magneticConstantDependencies","_dependenciesMagneticFluxQuantum","magneticFluxQuantumDependencies","_dependenciesMolarMass","molarMassDependencies","_dependenciesMolarMassC","molarMassC12Dependencies","_dependenciesMolarPlanckConstant","molarPlanckConstantDependencies","_dependenciesMolarVolume","molarVolumeDependencies","_dependenciesNeutronMass","neutronMassDependencies","_dependenciesNuclearMagneton","nuclearMagnetonDependencies","_dependenciesPlanckCharge","planckChargeDependencies","_dependenciesPlanckConstant","planckConstantDependencies","_dependenciesPlanckLength","planckLengthDependencies","_dependenciesPlanckMass","planckMassDependencies","_dependenciesPlanckTemperature","planckTemperatureDependencies","_dependenciesPlanckTime","planckTimeDependencies","_dependenciesProtonMass","protonMassDependencies","_dependenciesQuantumOfCirculation","quantumOfCirculationDependencies","_dependenciesReducedPlanckConstant","reducedPlanckConstantDependencies","_dependenciesRydberg","rydbergDependencies","_dependenciesSackurTetrode","sackurTetrodeDependencies","_dependenciesSecondRadiation","secondRadiationDependencies","_dependenciesSpeedOfLight","speedOfLightDependencies","_dependenciesStefanBoltzmann","stefanBoltzmannDependencies","_dependenciesThomsonCrossSection","thomsonCrossSectionDependencies","_dependenciesVacuumImpedance","vacuumImpedanceDependencies","_dependenciesWeakMixingAngle","weakMixingAngleDependencies","_dependenciesWienDisplacement","wienDisplacementDependencies","_dependenciesApplyTransform","applyTransformDependencies","_dependenciesColumnTransform","columnTransformDependencies","_dependenciesFilterTransform","filterTransformDependencies","_dependenciesForEachTransform","forEachTransformDependencies","_dependenciesIndexTransform","indexTransformDependencies","_dependenciesMapTransform","mapTransformDependencies","_dependenciesMaxTransform","maxTransformDependencies","_dependenciesMeanTransform","meanTransformDependencies","_dependenciesMinTransform","minTransformDependencies","_dependenciesRangeTransform","rangeTransformDependencies","_dependenciesRowTransform","rowTransformDependencies","_dependenciesSubsetTransform","subsetTransformDependencies","_dependenciesConcatTransform","concatTransformDependencies","_dependenciesStdTransform","stdTransformDependencies","_dependenciesSumTransform","sumTransformDependencies","_dependenciesVarianceTransform","varianceTransformDependencies","_allFactoriesAny","./allFactoriesAny.js","./dependenciesAny/dependenciesAbs.generated","./dependenciesAny/dependenciesAccessorNode.generated","./dependenciesAny/dependenciesAcos.generated","./dependenciesAny/dependenciesAcosh.generated","./dependenciesAny/dependenciesAcot.generated","./dependenciesAny/dependenciesAcoth.generated","./dependenciesAny/dependenciesAcsc.generated","./dependenciesAny/dependenciesAcsch.generated","./dependenciesAny/dependenciesAdd.generated","./dependenciesAny/dependenciesAddScalar.generated","./dependenciesAny/dependenciesAnd.generated","./dependenciesAny/dependenciesApply.generated","./dependenciesAny/dependenciesApplyTransform.generated","./dependenciesAny/dependenciesArg.generated","./dependenciesAny/dependenciesArrayNode.generated","./dependenciesAny/dependenciesAsec.generated","./dependenciesAny/dependenciesAsech.generated","./dependenciesAny/dependenciesAsin.generated","./dependenciesAny/dependenciesAsinh.generated","./dependenciesAny/dependenciesAssignmentNode.generated","./dependenciesAny/dependenciesAtan.generated","./dependenciesAny/dependenciesAtan2.generated","./dependenciesAny/dependenciesAtanh.generated","./dependenciesAny/dependenciesAtomicMass.generated","./dependenciesAny/dependenciesAvogadro.generated","./dependenciesAny/dependenciesBellNumbers.generated","./dependenciesAny/dependenciesBigNumberClass.generated","./dependenciesAny/dependenciesBignumber.generated","./dependenciesAny/dependenciesBitAnd.generated","./dependenciesAny/dependenciesBitNot.generated","./dependenciesAny/dependenciesBitOr.generated","./dependenciesAny/dependenciesBitXor.generated","./dependenciesAny/dependenciesBlockNode.generated","./dependenciesAny/dependenciesBohrMagneton.generated","./dependenciesAny/dependenciesBohrRadius.generated","./dependenciesAny/dependenciesBoltzmann.generated","./dependenciesAny/dependenciesBoolean.generated","./dependenciesAny/dependenciesCatalan.generated","./dependenciesAny/dependenciesCbrt.generated","./dependenciesAny/dependenciesCeil.generated","./dependenciesAny/dependenciesChain.generated","./dependenciesAny/dependenciesChainClass.generated","./dependenciesAny/dependenciesClassicalElectronRadius.generated","./dependenciesAny/dependenciesClone.generated","./dependenciesAny/dependenciesColumn.generated","./dependenciesAny/dependenciesColumnTransform.generated","./dependenciesAny/dependenciesCombinations.generated","./dependenciesAny/dependenciesCombinationsWithRep.generated","./dependenciesAny/dependenciesCompare.generated","./dependenciesAny/dependenciesCompareNatural.generated","./dependenciesAny/dependenciesCompareText.generated","./dependenciesAny/dependenciesCompile.generated","./dependenciesAny/dependenciesComplex.generated","./dependenciesAny/dependenciesComplexClass.generated","./dependenciesAny/dependenciesComposition.generated","./dependenciesAny/dependenciesConcat.generated","./dependenciesAny/dependenciesConcatTransform.generated","./dependenciesAny/dependenciesConditionalNode.generated","./dependenciesAny/dependenciesConductanceQuantum.generated","./dependenciesAny/dependenciesConj.generated","./dependenciesAny/dependenciesConstantNode.generated","./dependenciesAny/dependenciesCos.generated","./dependenciesAny/dependenciesCosh.generated","./dependenciesAny/dependenciesCot.generated","./dependenciesAny/dependenciesCoth.generated","./dependenciesAny/dependenciesCoulomb.generated","./dependenciesAny/dependenciesCreateUnit.generated","./dependenciesAny/dependenciesCross.generated","./dependenciesAny/dependenciesCsc.generated","./dependenciesAny/dependenciesCsch.generated","./dependenciesAny/dependenciesCtranspose.generated","./dependenciesAny/dependenciesCube.generated","./dependenciesAny/dependenciesDeepEqual.generated","./dependenciesAny/dependenciesDenseMatrixClass.generated","./dependenciesAny/dependenciesDeprecatedEval.generated","./dependenciesAny/dependenciesDeprecatedTypeof.generated","./dependenciesAny/dependenciesDeprecatedVar.generated","./dependenciesAny/dependenciesDerivative.generated","./dependenciesAny/dependenciesDet.generated","./dependenciesAny/dependenciesDeuteronMass.generated","./dependenciesAny/dependenciesDiag.generated","./dependenciesAny/dependenciesDistance.generated","./dependenciesAny/dependenciesDivide.generated","./dependenciesAny/dependenciesDivideScalar.generated","./dependenciesAny/dependenciesDot.generated","./dependenciesAny/dependenciesDotDivide.generated","./dependenciesAny/dependenciesDotMultiply.generated","./dependenciesAny/dependenciesDotPow.generated","./dependenciesAny/dependenciesE.generated","./dependenciesAny/dependenciesEfimovFactor.generated","./dependenciesAny/dependenciesEigs.generated","./dependenciesAny/dependenciesElectricConstant.generated","./dependenciesAny/dependenciesElectronMass.generated","./dependenciesAny/dependenciesElementaryCharge.generated","./dependenciesAny/dependenciesEqual.generated","./dependenciesAny/dependenciesEqualScalar.generated","./dependenciesAny/dependenciesEqualText.generated","./dependenciesAny/dependenciesErf.generated","./dependenciesAny/dependenciesEvaluate.generated","./dependenciesAny/dependenciesExp.generated","./dependenciesAny/dependenciesExpm.generated","./dependenciesAny/dependenciesExpm1.generated","./dependenciesAny/dependenciesEye.generated","./dependenciesAny/dependenciesFactorial.generated","./dependenciesAny/dependenciesFalse.generated","./dependenciesAny/dependenciesFaraday.generated","./dependenciesAny/dependenciesFermiCoupling.generated","./dependenciesAny/dependenciesFibonacciHeapClass.generated","./dependenciesAny/dependenciesFilter.generated","./dependenciesAny/dependenciesFilterTransform.generated","./dependenciesAny/dependenciesFineStructure.generated","./dependenciesAny/dependenciesFirstRadiation.generated","./dependenciesAny/dependenciesFix.generated","./dependenciesAny/dependenciesFlatten.generated","./dependenciesAny/dependenciesFloor.generated","./dependenciesAny/dependenciesForEach.generated","./dependenciesAny/dependenciesForEachTransform.generated","./dependenciesAny/dependenciesFormat.generated","./dependenciesAny/dependenciesFraction.generated","./dependenciesAny/dependenciesFractionClass.generated","./dependenciesAny/dependenciesFunctionAssignmentNode.generated","./dependenciesAny/dependenciesFunctionNode.generated","./dependenciesAny/dependenciesGamma.generated","./dependenciesAny/dependenciesGasConstant.generated","./dependenciesAny/dependenciesGcd.generated","./dependenciesAny/dependenciesGetMatrixDataType.generated","./dependenciesAny/dependenciesGravitationConstant.generated","./dependenciesAny/dependenciesGravity.generated","./dependenciesAny/dependenciesHartreeEnergy.generated","./dependenciesAny/dependenciesHasNumericValue.generated","./dependenciesAny/dependenciesHelp.generated","./dependenciesAny/dependenciesHelpClass.generated","./dependenciesAny/dependenciesHypot.generated","./dependenciesAny/dependenciesI.generated","./dependenciesAny/dependenciesIdentity.generated","./dependenciesAny/dependenciesIm.generated","./dependenciesAny/dependenciesImmutableDenseMatrixClass.generated","./dependenciesAny/dependenciesIndex.generated","./dependenciesAny/dependenciesIndexClass.generated","./dependenciesAny/dependenciesIndexNode.generated","./dependenciesAny/dependenciesIndexTransform.generated","./dependenciesAny/dependenciesInfinity.generated","./dependenciesAny/dependenciesIntersect.generated","./dependenciesAny/dependenciesInv.generated","./dependenciesAny/dependenciesInverseConductanceQuantum.generated","./dependenciesAny/dependenciesIsInteger.generated","./dependenciesAny/dependenciesIsNaN.generated","./dependenciesAny/dependenciesIsNegative.generated","./dependenciesAny/dependenciesIsNumeric.generated","./dependenciesAny/dependenciesIsPositive.generated","./dependenciesAny/dependenciesIsPrime.generated","./dependenciesAny/dependenciesIsZero.generated","./dependenciesAny/dependenciesKldivergence.generated","./dependenciesAny/dependenciesKlitzing.generated","./dependenciesAny/dependenciesKron.generated","./dependenciesAny/dependenciesLN10.generated","./dependenciesAny/dependenciesLN2.generated","./dependenciesAny/dependenciesLOG10E.generated","./dependenciesAny/dependenciesLOG2E.generated","./dependenciesAny/dependenciesLarger.generated","./dependenciesAny/dependenciesLargerEq.generated","./dependenciesAny/dependenciesLcm.generated","./dependenciesAny/dependenciesLeftShift.generated","./dependenciesAny/dependenciesLog.generated","./dependenciesAny/dependenciesLog10.generated","./dependenciesAny/dependenciesLog1p.generated","./dependenciesAny/dependenciesLog2.generated","./dependenciesAny/dependenciesLoschmidt.generated","./dependenciesAny/dependenciesLsolve.generated","./dependenciesAny/dependenciesLup.generated","./dependenciesAny/dependenciesLusolve.generated","./dependenciesAny/dependenciesMad.generated","./dependenciesAny/dependenciesMagneticConstant.generated","./dependenciesAny/dependenciesMagneticFluxQuantum.generated","./dependenciesAny/dependenciesMap.generated","./dependenciesAny/dependenciesMapTransform.generated","./dependenciesAny/dependenciesMatrix.generated","./dependenciesAny/dependenciesMatrixClass.generated","./dependenciesAny/dependenciesMax.generated","./dependenciesAny/dependenciesMaxTransform.generated","./dependenciesAny/dependenciesMean.generated","./dependenciesAny/dependenciesMeanTransform.generated","./dependenciesAny/dependenciesMedian.generated","./dependenciesAny/dependenciesMin.generated","./dependenciesAny/dependenciesMinTransform.generated","./dependenciesAny/dependenciesMod.generated","./dependenciesAny/dependenciesMode.generated","./dependenciesAny/dependenciesMolarMass.generated","./dependenciesAny/dependenciesMolarMassC12.generated","./dependenciesAny/dependenciesMolarPlanckConstant.generated","./dependenciesAny/dependenciesMolarVolume.generated","./dependenciesAny/dependenciesMultinomial.generated","./dependenciesAny/dependenciesMultiply.generated","./dependenciesAny/dependenciesMultiplyScalar.generated","./dependenciesAny/dependenciesNaN.generated","./dependenciesAny/dependenciesNeutronMass.generated","./dependenciesAny/dependenciesNode.generated","./dependenciesAny/dependenciesNorm.generated","./dependenciesAny/dependenciesNot.generated","./dependenciesAny/dependenciesNthRoot.generated","./dependenciesAny/dependenciesNthRoots.generated","./dependenciesAny/dependenciesNuclearMagneton.generated","./dependenciesAny/dependenciesNull.generated","./dependenciesAny/dependenciesNumber.generated","./dependenciesAny/dependenciesNumeric.generated","./dependenciesAny/dependenciesObjectNode.generated","./dependenciesAny/dependenciesOnes.generated","./dependenciesAny/dependenciesOperatorNode.generated","./dependenciesAny/dependenciesOr.generated","./dependenciesAny/dependenciesParenthesisNode.generated","./dependenciesAny/dependenciesParse.generated","./dependenciesAny/dependenciesParser.generated","./dependenciesAny/dependenciesParserClass.generated","./dependenciesAny/dependenciesPartitionSelect.generated","./dependenciesAny/dependenciesPermutations.generated","./dependenciesAny/dependenciesPhi.generated","./dependenciesAny/dependenciesPi.generated","./dependenciesAny/dependenciesPickRandom.generated","./dependenciesAny/dependenciesPlanckCharge.generated","./dependenciesAny/dependenciesPlanckConstant.generated","./dependenciesAny/dependenciesPlanckLength.generated","./dependenciesAny/dependenciesPlanckMass.generated","./dependenciesAny/dependenciesPlanckTemperature.generated","./dependenciesAny/dependenciesPlanckTime.generated","./dependenciesAny/dependenciesPow.generated","./dependenciesAny/dependenciesPrint.generated","./dependenciesAny/dependenciesProd.generated","./dependenciesAny/dependenciesProtonMass.generated","./dependenciesAny/dependenciesQr.generated","./dependenciesAny/dependenciesQuantileSeq.generated","./dependenciesAny/dependenciesQuantumOfCirculation.generated","./dependenciesAny/dependenciesRandom.generated","./dependenciesAny/dependenciesRandomInt.generated","./dependenciesAny/dependenciesRange.generated","./dependenciesAny/dependenciesRangeClass.generated","./dependenciesAny/dependenciesRangeNode.generated","./dependenciesAny/dependenciesRangeTransform.generated","./dependenciesAny/dependenciesRationalize.generated","./dependenciesAny/dependenciesRe.generated","./dependenciesAny/dependenciesReducedPlanckConstant.generated","./dependenciesAny/dependenciesRelationalNode.generated","./dependenciesAny/dependenciesReplacer.generated","./dependenciesAny/dependenciesReshape.generated","./dependenciesAny/dependenciesResize.generated","./dependenciesAny/dependenciesResultSet.generated","./dependenciesAny/dependenciesReviver.generated","./dependenciesAny/dependenciesRightArithShift.generated","./dependenciesAny/dependenciesRightLogShift.generated","./dependenciesAny/dependenciesRound.generated","./dependenciesAny/dependenciesRow.generated","./dependenciesAny/dependenciesRowTransform.generated","./dependenciesAny/dependenciesRydberg.generated","./dependenciesAny/dependenciesSQRT1_2.generated","./dependenciesAny/dependenciesSQRT2.generated","./dependenciesAny/dependenciesSackurTetrode.generated","./dependenciesAny/dependenciesSec.generated","./dependenciesAny/dependenciesSech.generated","./dependenciesAny/dependenciesSecondRadiation.generated","./dependenciesAny/dependenciesSetCartesian.generated","./dependenciesAny/dependenciesSetDifference.generated","./dependenciesAny/dependenciesSetDistinct.generated","./dependenciesAny/dependenciesSetIntersect.generated","./dependenciesAny/dependenciesSetIsSubset.generated","./dependenciesAny/dependenciesSetMultiplicity.generated","./dependenciesAny/dependenciesSetPowerset.generated","./dependenciesAny/dependenciesSetSize.generated","./dependenciesAny/dependenciesSetSymDifference.generated","./dependenciesAny/dependenciesSetUnion.generated","./dependenciesAny/dependenciesSign.generated","./dependenciesAny/dependenciesSimplify.generated","./dependenciesAny/dependenciesSin.generated","./dependenciesAny/dependenciesSinh.generated","./dependenciesAny/dependenciesSize.generated","./dependenciesAny/dependenciesSlu.generated","./dependenciesAny/dependenciesSmaller.generated","./dependenciesAny/dependenciesSmallerEq.generated","./dependenciesAny/dependenciesSort.generated","./dependenciesAny/dependenciesSpaClass.generated","./dependenciesAny/dependenciesSparse.generated","./dependenciesAny/dependenciesSparseMatrixClass.generated","./dependenciesAny/dependenciesSpeedOfLight.generated","./dependenciesAny/dependenciesSplitUnit.generated","./dependenciesAny/dependenciesSqrt.generated","./dependenciesAny/dependenciesSqrtm.generated","./dependenciesAny/dependenciesSquare.generated","./dependenciesAny/dependenciesSqueeze.generated","./dependenciesAny/dependenciesStd.generated","./dependenciesAny/dependenciesStdTransform.generated","./dependenciesAny/dependenciesStefanBoltzmann.generated","./dependenciesAny/dependenciesStirlingS2.generated","./dependenciesAny/dependenciesString.generated","./dependenciesAny/dependenciesSubset.generated","./dependenciesAny/dependenciesSubsetTransform.generated","./dependenciesAny/dependenciesSubtract.generated","./dependenciesAny/dependenciesSum.generated","./dependenciesAny/dependenciesSumTransform.generated","./dependenciesAny/dependenciesSymbolNode.generated","./dependenciesAny/dependenciesTan.generated","./dependenciesAny/dependenciesTanh.generated","./dependenciesAny/dependenciesTau.generated","./dependenciesAny/dependenciesThomsonCrossSection.generated","./dependenciesAny/dependenciesTo.generated","./dependenciesAny/dependenciesTrace.generated","./dependenciesAny/dependenciesTranspose.generated","./dependenciesAny/dependenciesTrue.generated","./dependenciesAny/dependenciesTypeOf.generated","./dependenciesAny/dependenciesTyped.generated","./dependenciesAny/dependenciesUnaryMinus.generated","./dependenciesAny/dependenciesUnaryPlus.generated","./dependenciesAny/dependenciesUnequal.generated","./dependenciesAny/dependenciesUnitClass.generated","./dependenciesAny/dependenciesUnitFunction.generated","./dependenciesAny/dependenciesUppercaseE.generated","./dependenciesAny/dependenciesUppercasePi.generated","./dependenciesAny/dependenciesUsolve.generated","./dependenciesAny/dependenciesVacuumImpedance.generated","./dependenciesAny/dependenciesVariance.generated","./dependenciesAny/dependenciesVarianceTransform.generated","./dependenciesAny/dependenciesVersion.generated","./dependenciesAny/dependenciesWeakMixingAngle.generated","./dependenciesAny/dependenciesWienDisplacement.generated","./dependenciesAny/dependenciesXgcd.generated","./dependenciesAny/dependenciesXor.generated","./dependenciesAny/dependenciesZeros.generated","69","_factoriesAny","createAbs","../../factoriesAny.js","./dependenciesTyped.generated","70","createAccessorNode","./dependenciesNode.generated","./dependenciesSubset.generated","71","createAcos","./dependenciesComplexClass.generated","72","createAcosh","73","createAcot","./dependenciesBigNumberClass.generated","74","createAcoth","75","createAcsc","76","createAcsch","77","createAdd","./dependenciesAddScalar.generated","./dependenciesDenseMatrixClass.generated","./dependenciesEqualScalar.generated","./dependenciesMatrix.generated","./dependenciesSparseMatrixClass.generated","78","createAddScalar","79","createAnd","./dependenciesNot.generated","./dependenciesZeros.generated","80","createApply","./dependenciesIsInteger.generated","81","createApplyTransform","82","createArg","83","createArrayNode","84","createAsec","85","createAsech","86","createAsin","87","createAsinh","88","createAssignmentNode","89","createAtan","90","createAtan2","91","createAtanh","92","createAtomicMass","./dependenciesUnitClass.generated","93","createAvogadro","94","createBellNumbers","./dependenciesIsNegative.generated","./dependenciesStirlingS2.generated","95","createBigNumberClass","96","createBignumber","97","createBitAnd","98","createBitNot","99","createBitOr","100","createBitXor","101","createBlockNode","./dependenciesResultSet.generated","102","createBohrMagneton","103","createBohrRadius","104","createBoltzmann","105","createBoolean","106","createCatalan","./dependenciesCombinations.generated","./dependenciesDivideScalar.generated","./dependenciesMultiplyScalar.generated","107","createCbrt","./dependenciesFractionClass.generated","./dependenciesUnaryMinus.generated","108","createCeil","./dependenciesRound.generated","109","createChain","./dependenciesChainClass.generated","110","createChainClass","111","createClassicalElectronRadius","112","createClone","113","createColumn","./dependenciesIndexClass.generated","./dependenciesRange.generated","114","createColumnTransform","115","createCombinations","116","createCombinationsWithRep","117","createCompare","118","createCompareNatural","./dependenciesCompare.generated","119","createCompareText","120","createCompile","./dependenciesParse.generated","121","createComplex","122","createComplexClass","123","createComposition","./dependenciesIsPositive.generated","./dependenciesLarger.generated","124","createConcat","125","createConcatTransform","126","createConditionalNode","127","createConductanceQuantum","128","createConj","129","createConstantNode","130","createCos","131","createCosh","132","createCot","133","createCoth","134","createCoulomb","135","createCreateUnit","136","createCross","./dependenciesMultiply.generated","./dependenciesSubtract.generated","137","createCsc","138","createCsch","139","createCtranspose","./dependenciesConj.generated","./dependenciesTranspose.generated","140","createCube","141","createDeepEqual","./dependenciesEqual.generated","142","createDenseMatrixClass","./dependenciesMatrixClass.generated","143","createDeprecatedEval","./dependenciesEvaluate.generated","144","createDeprecatedTypeof","145","createDeprecatedVar","./dependenciesVariance.generated","146","createDerivative","./dependenciesConstantNode.generated","./dependenciesFunctionNode.generated","./dependenciesIsZero.generated","./dependenciesNumeric.generated","./dependenciesOperatorNode.generated","./dependenciesParenthesisNode.generated","./dependenciesSimplify.generated","./dependenciesSymbolNode.generated","147","createDet","./dependenciesLup.generated","148","createDeuteronMass","149","createDiag","150","createDistance","./dependenciesAbs.generated","./dependenciesSqrt.generated","151","createDivide","./dependenciesInv.generated","152","createDivideScalar","153","createDot","./dependenciesAdd.generated","154","createDotDivide","155","createDotMultiply","156","createDotPow","./dependenciesPow.generated","157","158","createEfimovFactor","159","createEigs","./dependenciesAtan.generated","./dependenciesBignumber.generated","./dependenciesCos.generated","./dependenciesSin.generated","160","createElectricConstant","161","createElectronMass","162","createElementaryCharge","163","createEqual","164","createEqualScalar","165","createEqualText","./dependenciesCompareText.generated","166","createErf","167","createEvaluate","168","createExp","169","createExpm","./dependenciesIdentity.generated","170","createExpm1","171","createEye","172","createFactorial","./dependenciesGamma.generated","173","174","createFaraday","175","createFermiCoupling","176","createFibonacciHeapClass","./dependenciesSmaller.generated","177","createFilter","178","createFilterTransform","179","createFineStructure","180","createFirstRadiation","181","createFix","./dependenciesCeil.generated","./dependenciesFloor.generated","182","createFlatten","183","createFloor","184","createForEach","185","createForEachTransform","186","createFormat","187","createFraction","188","createFractionClass","189","createFunctionAssignmentNode","190","createFunctionNode","191","createGamma","192","createGasConstant","193","createGcd","194","createGetMatrixDataType","195","createGravitationConstant","196","createGravity","197","createHartreeEnergy","198","createHasNumericValue","./dependenciesIsNumeric.generated","199","createHelp","./dependenciesHelpClass.generated","200","createHelpClass","201","createHypot","202","203","createIdentity","204","createIm","205","createImmutableDenseMatrixClass","206","createIndex","207","createIndexClass","./dependenciesImmutableDenseMatrixClass.generated","208","createIndexNode","./dependenciesRangeClass.generated","./dependenciesSize.generated","209","createIndexTransform","210","211","createIntersect","212","createInv","./dependenciesDet.generated","213","createInverseConductanceQuantum","214","createIsInteger","215","createIsNaN","216","createIsNegative","217","createIsNumeric","218","createIsPositive","219","createIsPrime","220","createIsZero","221","createKldivergence","./dependenciesDivide.generated","./dependenciesDotDivide.generated","./dependenciesLog.generated","./dependenciesSum.generated","222","createKlitzing","223","createKron","224","225","226","227","228","createLarger","229","createLargerEq","230","createLcm","231","createLeftShift","232","createLog","233","createLog10","234","createLog1p","235","createLog2","236","createLoschmidt","237","createLsolve","238","createLup","./dependenciesSpaClass.generated","239","createLusolve","./dependenciesLsolve.generated","./dependenciesSlu.generated","./dependenciesUsolve.generated","240","createMad","./dependenciesMap.generated","./dependenciesMedian.generated","241","createMagneticConstant","242","createMagneticFluxQuantum","243","createMap","244","createMapTransform","245","createMatrix","246","createMatrixClass","247","createMax","248","createMaxTransform","249","createMean","250","createMeanTransform","251","createMedian","./dependenciesPartitionSelect.generated","252","createMin","253","createMinTransform","254","createMod","255","createMode","./dependenciesIsNaN.generated","256","createMolarMass","257","createMolarMassC12","258","createMolarPlanckConstant","259","createMolarVolume","260","createMultinomial","./dependenciesFactorial.generated","261","createMultiply","262","createMultiplyScalar","263","264","createNeutronMass","265","createNode","266","createNorm","267","createNot","268","createNthRoot","269","createNthRoots","270","createNuclearMagneton","271","272","createNumber","273","createNumeric","./dependenciesFraction.generated","./dependenciesNumber.generated","274","createObjectNode","275","createOnes","276","createOperatorNode","277","createOr","278","createParenthesisNode","279","createParse","./dependenciesAccessorNode.generated","./dependenciesArrayNode.generated","./dependenciesAssignmentNode.generated","./dependenciesBlockNode.generated","./dependenciesConditionalNode.generated","./dependenciesFunctionAssignmentNode.generated","./dependenciesIndexNode.generated","./dependenciesObjectNode.generated","./dependenciesRangeNode.generated","./dependenciesRelationalNode.generated","280","createParser","./dependenciesParserClass.generated","281","createParserClass","282","createPartitionSelect","283","createPermutations","284","285","286","createPickRandom","287","createPlanckCharge","288","createPlanckConstant","289","createPlanckLength","290","createPlanckMass","291","createPlanckTemperature","292","createPlanckTime","293","createPow","294","createPrint","295","createProd","296","createProtonMass","297","createQr","./dependenciesComplex.generated","./dependenciesSign.generated","298","createQuantileSeq","299","createQuantumOfCirculation","300","createRandom","301","createRandomInt","302","createRange","./dependenciesLargerEq.generated","./dependenciesSmallerEq.generated","303","createRangeClass","304","createRangeNode","305","createRangeTransform","306","createRationalize","307","createRe","308","createReducedPlanckConstant","309","createRelationalNode","310","createReplacer","311","createReshape","312","createResize","313","createResultSet","314","createReviver","315","createRightArithShift","316","createRightLogShift","317","createRound","318","createRow","319","createRowTransform","320","createRydberg","321","322","323","createSackurTetrode","324","createSec","325","createSech","326","createSecondRadiation","327","createSetCartesian","./dependenciesCompareNatural.generated","328","createSetDifference","329","createSetDistinct","330","createSetIntersect","331","createSetIsSubset","332","createSetMultiplicity","333","createSetPowerset","334","createSetSize","335","createSetSymDifference","./dependenciesConcat.generated","./dependenciesSetDifference.generated","336","createSetUnion","./dependenciesSetIntersect.generated","./dependenciesSetSymDifference.generated","337","createSign","338","createSimplify","339","createSin","340","createSinh","341","createSize","342","createSlu","343","createSmaller","344","createSmallerEq","345","createSort","346","createSpaClass","./dependenciesFibonacciHeapClass.generated","347","createSparse","348","createSparseMatrixClass","349","createSpeedOfLight","350","createSplitUnit","351","createSqrt","352","createSqrtm","./dependenciesMax.generated","353","createSquare","354","createSqueeze","355","createStd","356","createStdTransform","357","createStefanBoltzmann","358","createStirlingS2","359","createString","360","createSubset","361","createSubsetTransform","362","createSubtract","363","createSum","364","createSumTransform","365","createSymbolNode","366","createTan","367","createTanh","368","369","createThomsonCrossSection","370","createTo","371","createTrace","372","createTranspose","373","374","createTypeOf","375","376","createUnaryMinus","377","createUnaryPlus","378","createUnequal","379","createUnitClass","./dependenciesFix.generated","./dependenciesFormat.generated","380","createUnitFunction","381","./dependenciesE.generated","382","./dependenciesPi.generated","383","createUsolve","384","createVacuumImpedance","385","createVariance","./dependenciesApply.generated","386","createVarianceTransform","387","388","createWeakMixingAngle","389","createWienDisplacement","390","createXgcd","391","createXor","392","createZeros","393","deprecatedTypeof","deprecatedVar","deprecatedImport","deprecatedEval","_eval","_deprecatedImport","_variance","_typeOf","_pureFunctionsAny","_impureFunctionsAny","variance","typeOf","createDeprecatedProperties","Chain","SparseMatrix","Spa","FibonacciHeap","ImmutableDenseMatrix","Index","Range","ResultSet","Unit","Help","AccessorNode","ArrayNode","AssignmentNode","BlockNode","ConditionalNode","ConstantNode","IndexNode","FunctionAssignmentNode","FunctionNode","Node","ObjectNode","OperatorNode","ParenthesisNode","RangeNode","RelationalNode","SymbolNode","reviver","../core/function/deprecatedImport","../expression/function/eval","../function/statistics/variance","../function/utils/typeOf","../utils/object","./impureFunctionsAny.generated","./pureFunctionsAny.generated","394","_embeddedDocs","embeddedDocs","derivative","help","rationalize","_configReadonly","numeric","bignumber","fraction","equal","typeof","eye","false","_false","null","_null","true","_true","replacer","_NaN","efimovFactor","fineStructure","sackurTetrode","weakMixingAngle","_Infinity","isNumeric","equalScalar","boolean","splitUnit","unaryPlus","cube","multiplyScalar","square","bitNot","not","filter","erf","format","isPrime","combinations","pickRandom","randomInt","hasNumericValue","unaryMinus","addScalar","getMatrixDataType","combinationsWithRep","nthRoot","xgcd","bitAnd","bitXor","diag","identity","ones","reshape","leftShift","rightLogShift","compareText","smaller","larger","unequal","sparse","composition","dotMultiply","flatten","resize","squeeze","dotPow","rightArithShift","compareNatural","equalText","largerEq","partitionSelect","setSize","norm","quantileSeq","gamma","bitOr","kron","transpose","smallerEq","dot","factorial","permutations","cross","setCartesian","setDistinct","setIsSubset","setPowerset","fix","divideScalar","nthRoots","lsolve","deepEqual","setDifference","setMultiplicity","lup","slu","distance","stirlingS2","catalan","xor","dotDivide","createUnit","setSymDifference","qr","inv","expm","mean","std","multinomial","atomicMass","bohrMagneton","boltzmann","conductanceQuantum","deuteronMass","electronMass","faraday","firstRadiation","gravitationConstant","hartreeEnergy","klitzing","magneticConstant","molarMass","molarPlanckConstant","neutronMass","planckCharge","planckLength","planckTemperature","protonMass","reducedPlanckConstant","secondRadiation","stefanBoltzmann","vacuumImpedance","usolve","setIntersect","lusolve","eigs","intersect","var","bellNumbers","avogadro","classicalElectronRadius","electricConstant","fermiCoupling","gravity","loschmidt","molarMassC12","nuclearMagneton","planckMass","quantumOfCirculation","speedOfLight","wienDisplacement","unit","sqrtm","kldivergence","bohrRadius","elementaryCharge","inverseConductanceQuantum","molarVolume","planckTime","thomsonCrossSection","log1p","median","gasConstant","planckConstant","setUnion","magneticFluxQuantum","eval","coulomb","mad","rydberg","createProxy","../expression/embeddedDocs/embeddedDocs","./configReadonly","395","_exportNames","_create","_typeChecks","_dependenciesAny","_deprecatedAny","../core/create","./dependenciesAny.generated","./deprecatedAny","./typeChecks","396","_boolean","397","398","isArgumentsError","399","actual","isDimensionError","400","isIndexError","401","_string","doc","category","syntax","examples","scope","expr","seealso","fromJSON","prop","../utils/string","402","_customs","isParser","getSafeProperty","getAll","extend","setSafeProperty","../utils/customs","403","InfinityDocs","404","LN10Docs","405","LN2Docs","406","LOG10EDocs","407","LOG2EDocs","408","NaNDocs","409","SQRT12Docs","410","SQRT2Docs","411","eDocs","412","falseDocs","413","iDocs","414","nullDocs","415","phiDocs","416","piDocs","417","tauDocs","418","trueDocs","419","versionDocs","420","bignumberDocs","421","booleanDocs","422","complexDocs","423","createUnitDocs","424","fractionDocs","425","indexDocs","426","matrixDocs","427","numberDocs","428","sparseDocs","429","splitUnitDocs","430","stringDocs","431","unitDocs","432","configDocs","433","importDocs","434","typedDocs","435","_bignumber","_isZero","_isPrime","_isPositive","_isNumeric","_hasNumericValue","_isNegative","_isInteger","_isNaN","_format","_clone","_to","_tanh","_tan","_sinh","_sech","_sec","_csch","_csc","_coth","_cot","_cosh","_cos","_atan","_atanh","_atan2","_asinh","_asin","_asech","_asec","_acsch","_acsc","_acoth","_acot","_acosh","_acos","_sum","_std","_quantileSeq","_prod","_min","_median","_mean","_max","_mad","_erf","_setUnion","_setSymDifference","_setSize","_setPowerset","_setMultiplicity","_setIsSubset","_setIntersect","_setDistinct","_setDifference","_setCartesian","_unequal","_smallerEq","_smaller","_largerEq","_larger","_equalText","_equal","_deepEqual","_compareText","_compareNatural","_compare","_randomInt","_random","_pickRandom","_permutations","_multinomial","_kldivergence","_gamma","_factorial","_combinations","_combinationsWithRep","_zeros","_transpose","_trace","_subset","_squeeze","_sort","_reshape","_resize","_range","_partitionSelect","_ones","_map","_kron","_inv","_forEach","_flatten","_filter","_identity","_getMatrixDataType","_dot","_diag","_det","_ctranspose","_cross","_concat","_xor","_or","_not","_and","_intersect","_distance","_help","_evaluate","_im","_re","_conj","_arg","_typed","_stirlingS","_composition","_catalan","_bellNumbers","_rightLogShift","_rightArithShift","_leftShift","_bitXor","_bitOr","_bitNot","_bitAnd","_xgcd","_unaryPlus","_unaryMinus","_square","_sqrtm","_sqrt","_sign","_round","_pow","_nthRoots","_nthRoot","_norm","_multiply","_mod","_log1p","_log2","_log3","_lcm","_hypot","_gcd","_floor","_fix","_expm","_expm2","_eigs","_exp","_dotMultiply","_dotDivide","_divide","_cube","_ceil","_cbrt","_add","_abs","_qr","_usolve","_slu","_rationalize","_simplify","_lup","_lsolve","_derivative","_tau","_SQRT","_SQRT1_","_phi","_pi","_LOG10E","_LOG2E","_LN","_LN2","_i","_e","_unit","_splitUnit","_sparse","_matrix","_construction","_fraction","_createUnit","_complex","_dotPow","_lusolve","_subtract","_sin","_numeric","_column","_row","derivativeDocs","lsolveDocs","lupDocs","lusolveDocs","simplifyDocs","rationalizeDocs","sluDocs","usolveDocs","qrDocs","absDocs","addDocs","cbrtDocs","ceilDocs","cubeDocs","divideDocs","dotDivideDocs","dotMultiplyDocs","dotPowDocs","expDocs","expmDocs","expm1Docs","fixDocs","floorDocs","gcdDocs","hypotDocs","lcmDocs","logDocs","log2Docs","log1pDocs","log10Docs","modDocs","multiplyDocs","normDocs","nthRootDocs","nthRootsDocs","powDocs","roundDocs","signDocs","sqrtDocs","sqrtmDocs","squareDocs","subtractDocs","unaryMinusDocs","unaryPlusDocs","xgcdDocs","bitAndDocs","bitNotDocs","bitOrDocs","bitXorDocs","leftShiftDocs","rightArithShiftDocs","rightLogShiftDocs","bellNumbersDocs","catalanDocs","compositionDocs","stirlingS2Docs","import","argDocs","conjDocs","reDocs","imDocs","evaluateDocs","helpDocs","distanceDocs","intersectDocs","andDocs","notDocs","orDocs","xorDocs","concatDocs","crossDocs","columnDocs","ctransposeDocs","detDocs","diagDocs","dotDocs","getMatrixDataTypeDocs","identityDocs","filterDocs","flattenDocs","forEachDocs","invDocs","eigsDocs","kronDocs","mapDocs","onesDocs","partitionSelectDocs","rangeDocs","resizeDocs","reshapeDocs","rowDocs","sizeDocs","sortDocs","squeezeDocs","subsetDocs","traceDocs","transposeDocs","zerosDocs","combinationsDocs","combinationsWithRepDocs","factorialDocs","gammaDocs","kldivergenceDocs","multinomialDocs","permutationsDocs","pickRandomDocs","randomDocs","randomIntDocs","compareDocs","compareNaturalDocs","compareTextDocs","deepEqualDocs","equalDocs","equalTextDocs","largerDocs","largerEqDocs","smallerDocs","smallerEqDocs","unequalDocs","setCartesianDocs","setDifferenceDocs","setDistinctDocs","setIntersectDocs","setIsSubsetDocs","setMultiplicityDocs","setPowersetDocs","setSizeDocs","setSymDifferenceDocs","setUnionDocs","erfDocs","madDocs","maxDocs","meanDocs","medianDocs","minDocs","modeDocs","prodDocs","quantileSeqDocs","stdDocs","sumDocs","varianceDocs","acosDocs","acoshDocs","acotDocs","acothDocs","acscDocs","acschDocs","asecDocs","asechDocs","asinDocs","asinhDocs","atanDocs","atanhDocs","atan2Docs","cosDocs","coshDocs","cotDocs","cothDocs","cscDocs","cschDocs","secDocs","sechDocs","sinDocs","sinhDocs","tanDocs","tanhDocs","toDocs","cloneDocs","formatDocs","isNaNDocs","isIntegerDocs","isNegativeDocs","isNumericDocs","hasNumericValueDocs","isPositiveDocs","isPrimeDocs","isZeroDocs","typeOfDocs","numericDocs","./constants/Infinity","./constants/LN10","./constants/LN2","./constants/LOG10E","./constants/LOG2E","./constants/NaN","./constants/SQRT1_2","./constants/SQRT2","./constants/e","./constants/false","./constants/i","./constants/null","./constants/phi","./constants/pi","./constants/tau","./constants/true","./constants/version","./construction","./construction/bignumber","./construction/boolean","./construction/complex","./construction/createUnit","./construction/fraction","./construction/matrix","./construction/number","./construction/sparse","./construction/splitUnit","./construction/string","./construction/unit","./core/config","./core/import","./core/typed","./function/algebra/derivative","./function/algebra/lsolve","./function/algebra/lup","./function/algebra/lusolve","./function/algebra/qr","./function/algebra/rationalize","./function/algebra/simplify","./function/algebra/slu","./function/algebra/usolve","./function/arithmetic/abs","./function/arithmetic/add","./function/arithmetic/cbrt","./function/arithmetic/ceil","./function/arithmetic/cube","./function/arithmetic/divide","./function/arithmetic/dotDivide","./function/arithmetic/dotMultiply","./function/arithmetic/dotPow","./function/arithmetic/exp","./function/arithmetic/expm","./function/arithmetic/expm1","./function/arithmetic/fix","./function/arithmetic/floor","./function/arithmetic/gcd","./function/arithmetic/hypot","./function/arithmetic/lcm","./function/arithmetic/log","./function/arithmetic/log10","./function/arithmetic/log1p","./function/arithmetic/log2","./function/arithmetic/mod","./function/arithmetic/multiply","./function/arithmetic/norm","./function/arithmetic/nthRoot","./function/arithmetic/nthRoots","./function/arithmetic/pow","./function/arithmetic/round","./function/arithmetic/sign","./function/arithmetic/sqrt","./function/arithmetic/sqrtm","./function/arithmetic/square","./function/arithmetic/subtract","./function/arithmetic/unaryMinus","./function/arithmetic/unaryPlus","./function/arithmetic/xgcd","./function/bitwise/bitAnd","./function/bitwise/bitNot","./function/bitwise/bitOr","./function/bitwise/bitXor","./function/bitwise/leftShift","./function/bitwise/rightArithShift","./function/bitwise/rightLogShift","./function/combinatorics/bellNumbers","./function/combinatorics/catalan","./function/combinatorics/composition","./function/combinatorics/stirlingS2","./function/complex/arg","./function/complex/conj","./function/complex/im","./function/complex/re","./function/expression/evaluate","./function/expression/help","./function/geometry/distance","./function/geometry/intersect","./function/logical/and","./function/logical/not","./function/logical/or","./function/logical/xor","./function/matrix/column","./function/matrix/concat","./function/matrix/cross","./function/matrix/ctranspose","./function/matrix/det","./function/matrix/diag","./function/matrix/dot","./function/matrix/eigs","./function/matrix/filter","./function/matrix/flatten","./function/matrix/forEach","./function/matrix/getMatrixDataType","./function/matrix/identity","./function/matrix/inv","./function/matrix/kron","./function/matrix/map","./function/matrix/ones","./function/matrix/partitionSelect","./function/matrix/range","./function/matrix/reshape","./function/matrix/resize","./function/matrix/row","./function/matrix/size","./function/matrix/sort","./function/matrix/squeeze","./function/matrix/subset","./function/matrix/trace","./function/matrix/transpose","./function/matrix/zeros","./function/probability/combinations","./function/probability/combinationsWithRep","./function/probability/factorial","./function/probability/gamma","./function/probability/kldivergence","./function/probability/multinomial","./function/probability/permutations","./function/probability/pickRandom","./function/probability/random","./function/probability/randomInt","./function/relational/compare","./function/relational/compareNatural","./function/relational/compareText","./function/relational/deepEqual","./function/relational/equal","./function/relational/equalText","./function/relational/larger","./function/relational/largerEq","./function/relational/smaller","./function/relational/smallerEq","./function/relational/unequal","./function/set/setCartesian","./function/set/setDifference","./function/set/setDistinct","./function/set/setIntersect","./function/set/setIsSubset","./function/set/setMultiplicity","./function/set/setPowerset","./function/set/setSize","./function/set/setSymDifference","./function/set/setUnion","./function/special/erf","./function/statistics/mad","./function/statistics/max","./function/statistics/mean","./function/statistics/median","./function/statistics/min","./function/statistics/mode","./function/statistics/prod","./function/statistics/quantileSeq","./function/statistics/std","./function/statistics/sum","./function/statistics/variance","./function/trigonometry/acos","./function/trigonometry/acosh","./function/trigonometry/acot","./function/trigonometry/acoth","./function/trigonometry/acsc","./function/trigonometry/acsch","./function/trigonometry/asec","./function/trigonometry/asech","./function/trigonometry/asin","./function/trigonometry/asinh","./function/trigonometry/atan","./function/trigonometry/atan2","./function/trigonometry/atanh","./function/trigonometry/cos","./function/trigonometry/cosh","./function/trigonometry/cot","./function/trigonometry/coth","./function/trigonometry/csc","./function/trigonometry/csch","./function/trigonometry/sec","./function/trigonometry/sech","./function/trigonometry/sin","./function/trigonometry/sinh","./function/trigonometry/tan","./function/trigonometry/tanh","./function/units/to","./function/utils/clone","./function/utils/format","./function/utils/hasNumericValue","./function/utils/isInteger","./function/utils/isNaN","./function/utils/isNegative","./function/utils/isNumeric","./function/utils/isPositive","./function/utils/isPrime","./function/utils/isZero","./function/utils/numeric","./function/utils/typeOf","436","437","438","439","440","441","442","443","444","445","446","447","448","449","450","451","452","453","454","455","456","457","458","459","460","461","462","463","464","465","466","467","468","469","470","471","472","473","474","475","476","477","478","479","480","481","482","483","484","485","486","487","488","489","490","491","492","493","494","495","496","497","498","499","500","501","502","503","504","505","506","507","508","509","510","511","512","513","514","515","516","517","518","519","520","521","522","523","524","525","526","527","528","529","530","531","532","533","534","535","536","537","538","539","540","541","542","543","544","545","546","547","548","549","550","551","552","553","554","555","556","557","558","559","560","561","562","563","564","565","566","567","568","569","570","571","572","573","574","575","576","577","578","579","580","581","582","583","584","585","586","587","588","589","590","591","592","593","594","595","596","597","598","599","600","601","602","603","604","605","606","607","608","609","610","611","612","613","614","_collection","Array | Matrix","deepMap","../../utils/collection","615","616","string, Object","Array | Matrix, Object","617","any","searchName","searchText","../../utils/customs","../embeddedDocs/embeddedDocs","618","","619","keywords","620","_access","access","accessFactory","isObjectProperty","getObjectProperty","needParenthesis","_compile","argNames","evalObject","evalIndex","_ifNode","_toString","toHTML","_toTex","toTex","./utils/access","621","every","deprecated","evalItems","evalItem","childNode","622","_assign","_operators","assignFactory","parenthesis","exprPrecedence","evalValue","childObject","evalParentObject","parentProp","evalParentIndex","parentIndex","../operators","./utils/assign","623","visible","evalBlocks","results","624","trueExpr","falseExpr","evalCondition","evalTrueExpr","evalFalseExpr","testCondition","conditionPrecedence","truePrecedence","falsePrecedence","625","_latex","escapeLatex","../../utils/latex","../../utils/string","626","_keywords","childArgNames","evalExpr","childArgs","escape","toSymbol","../keywords","627","evalArgs","rawArgs","evalArg0","evalArg","_evalArg","evalArg1","_rawArgs","validateSafeMethod","evalFn","_rawArgs2","nodeToString","expandTemplate","template","latex","regex","RegExp","inputPos","exec","property","ReferenceError","customString","nodeToTex","customTex","latexConverter","customToTex","latexFunctions","defaultTemplate","getIdentifier","628","_toConsumableArray","_arrayLikeToArray","_arrayWithoutHoles","iter","_iterableToArray","minLen","_unsupportedIterableToArray","_nonIterableSpread","arr2","dimensions","dotNotation","step","evalDimensions","needsEnd","evalStart","evalEnd","evalStep","_evalStart","_evalEnd","_evalStep","_childArgNames","evalRange","_evalRange","evalDimension","629","_validateScope","_traverse","_transform","cloneDeep","deepStrictEqual","getContent","630","properties","evalEntries","stringifiedKey","parsedKey","isSafeProperty","631","op","implicit","calculateNecessaryParentheses","associativity","getAssociativity","operandPrecedence","operandIdentifier","rootIdentifier","latexLeftParens","latexParens","_rootIdentifier","lhsIdentifier","rhsIdentifier","lhsPrecedence","assocWithLhs","isAssociativeWith","lhsParens","rhsPrecedence","assocWithRhs","rhsParens","latexRightParens","argPrecedence","assocWithArg","argAssociativity","isSafeMethod","isUnary","parens","assoc","operand","opIsNamed","lhs","rhs","stringifiedArgs","latexOperators","lhsTex","rhsTex","texifiedArgs","632","content","633","stepPrecedence","startPrecedence","endPrecedence","634","conditionals","isRelationalNode","compiled","evalRhs","evalLhs","condFn","_this","_this2","paramStrings","paramPrecedence","operatorMap","635","isValuelessUnit","undef","636","_errorTransform","errorTransform","../../../utils/customs","../../transform/utils/errorTransform","637","638","_node","identifier","nodeA","nodeB","identifierA","identifierB","associativeWith","OperatorNode:or","OperatorNode:xor","OperatorNode:and","OperatorNode:bitOr","OperatorNode:bitXor","OperatorNode:bitAnd","OperatorNode:equal","OperatorNode:unequal","OperatorNode:smaller","OperatorNode:larger","OperatorNode:smallerEq","OperatorNode:largerEq","OperatorNode:leftShift","OperatorNode:rightArithShift","OperatorNode:rightLogShift","OperatorNode:to","OperatorNode:add","OperatorNode:subtract","OperatorNode:multiply","OperatorNode:divide","OperatorNode:dotMultiply","OperatorNode:dotDivide","OperatorNode:mod","OperatorNode:unaryPlus","OperatorNode:unaryMinus","OperatorNode:bitNot","OperatorNode:not","OperatorNode:pow","OperatorNode:dotPow","OperatorNode:factorial","OperatorNode:transpose","639","parseStart","expressions","parseMultiple","extraNodes","elem","TOKENTYPE","NULL","DELIMITER","NUMBER","SYMBOL","UNKNOWN","DELIMITERS",",","(",")","[","]","\"","'",";","+","-","*",".*","/","./",".^","!","|","^|","=",":","?","==","!=","<",">","<=",">=","<<",">>",">>>","NAMED_DELIMITERS","in","CONSTANTS","NUMERIC_CONSTANTS","currentString","currentCharacter","prevCharacter","nextCharacter","isWhitespace","nestingLevel","c3","isDigitDot","isDigit","isDecimalMark","createSyntaxError","isAlpha","getTokenSkipNewline","openParams","closeParams","conditionalLevel","parseAssignment","parseBlock","valid","parseLogicalXor","parseLogicalOr","parseConditional","parseLogicalAnd","parseBitwiseOr","parseBitwiseXor","parseBitwiseAnd","parseRelational","parseShift","operators","cond","parseConversion","parseRange","parseAddSubtract","parseMultiplyDivide","parseImplicitMultiplication","parseRule2","parseUnary","tokenStates","CustomNode","parseAccessors","rows","numberStr","parseEnd","parseParentheses","parseNumber","parseDoubleQuotesStringToken","parseSingleQuotesStringToken","parseObject","parseRow","parseSingleQuotesString","parseDoubleQuotesString","parseSymbol","parseCustomNodes","parseLeftHandOperators","parsePow","cPrev","cNext","isValidLatinOrGreek","isValidMathSymbol","high","low","../utils/collection","640","_apply","...any","dim","../../function/matrix/apply","./utils/errorTransform","641","lastIndex","../../function/matrix/column","642","../../function/matrix/concat","643","_function","_compileInlineExpression","filterTransform","compileInlineExpression","Array, function","Matrix, function","Array, RegExp","filterRegExp","Matrix, RegExp","maxArgumentCount","../../utils/function","./utils/compileInlineExpression","644","forEachTransform","Array | Matrix, function","recurse","645","ii","isSet","646","mapTransform","orig","argsCount","647","../../function/statistics/max","648","../../function/statistics/mean","649","../../function/statistics/min","650","../../function/matrix/range","651","../../function/matrix/row","652","../../function/statistics/std","653","../../function/matrix/subset","654","../../function/statistics/sum","655","subScope","../../../utils/is","656","../../../error/IndexError","657","../../function/statistics/variance","658","_ResultSet","_BigNumber","_Complex","_Fraction","_Range","_Matrix","_DenseMatrix","_equalScalar","_SparseMatrix","_addScalar","_multiplyScalar","_eye","_print","_divideScalar","_ImmutableDenseMatrix","_MatrixIndex","_FibonacciHeap","_Spa","_Unit","_Node","_AccessorNode","_ArrayNode","_AssignmentNode","_BlockNode","_ConditionalNode","_ConstantNode","_FunctionAssignmentNode","_IndexNode","_ObjectNode","_OperatorNode","_ParenthesisNode","_RangeNode","_RelationalNode","_SymbolNode","_FunctionNode","_parse","_Parser","_parser","_Help","_Chain","_chain","_reviver","_replacer","_physicalConstants","_apply2","_column2","_filter2","_forEach2","_map2","_max2","_mean2","_min2","_range2","_row2","_subset2","_concat2","_std2","_sum2","_variance2","./constants","./core/function/typed","./expression/Help","./expression/Parser","./expression/function/compile","./expression/function/eval","./expression/function/evaluate","./expression/function/help","./expression/function/parser","./expression/node/AccessorNode","./expression/node/ArrayNode","./expression/node/AssignmentNode","./expression/node/BlockNode","./expression/node/ConditionalNode","./expression/node/ConstantNode","./expression/node/FunctionAssignmentNode","./expression/node/FunctionNode","./expression/node/IndexNode","./expression/node/Node","./expression/node/ObjectNode","./expression/node/OperatorNode","./expression/node/ParenthesisNode","./expression/node/RangeNode","./expression/node/RelationalNode","./expression/node/SymbolNode","./expression/parse","./expression/transform/apply.transform","./expression/transform/column.transform","./expression/transform/concat.transform","./expression/transform/filter.transform","./expression/transform/forEach.transform","./expression/transform/index.transform","./expression/transform/map.transform","./expression/transform/max.transform","./expression/transform/mean.transform","./expression/transform/min.transform","./expression/transform/range.transform","./expression/transform/row.transform","./expression/transform/std.transform","./expression/transform/subset.transform","./expression/transform/sum.transform","./expression/transform/variance.transform","./function/algebra/decomposition/lup","./function/algebra/decomposition/qr","./function/algebra/decomposition/slu","./function/algebra/solver/lsolve","./function/algebra/solver/lusolve","./function/algebra/solver/usolve","./function/arithmetic/addScalar","./function/arithmetic/divideScalar","./function/arithmetic/multiplyScalar","./function/matrix/apply","./function/matrix/expm","./function/matrix/eye","./function/matrix/sqrtm","./function/relational/equalScalar","./function/string/format","./function/string/print","./function/unit/to","./json/replacer","./json/reviver","./type/bignumber/BigNumber","./type/bignumber/function/bignumber","./type/boolean","./type/chain/Chain","./type/chain/function/chain","./type/complex/Complex","./type/complex/function/complex","./type/fraction/Fraction","./type/fraction/function/fraction","./type/matrix/DenseMatrix","./type/matrix/FibonacciHeap","./type/matrix/ImmutableDenseMatrix","./type/matrix/Matrix","./type/matrix/MatrixIndex","./type/matrix/Range","./type/matrix/Spa","./type/matrix/SparseMatrix","./type/matrix/function","./type/matrix/function/matrix","./type/matrix/function/sparse","./type/number","./type/resultset/ResultSet","./type/string","./type/unit/Unit","./type/unit/function/createUnit","./type/unit/function/splitUnit","./type/unit/function/unit","./type/unit/physicalConstants","659","_denseLUP","_sparseLUP","L","columns","_data","ldata","lsize","udata","usize","pabsv","vjj","absv","_swapRows","vij","pv","_values","ptr","_ptr","lvalues","lindex","lptr","uvalues","uindex","uptr","pvCo","pvOc","spa","k0","vkj","_forEachRow","vik","accumulate","kx","ky","../../../utils/factory","../../../utils/object","660","_denseQR","Q","R","_denseQRimpl","Qdata","Rdata","pivot","sgn","conjSgn","alphaSquared","zero","661","_csSqr","_csLu","csSqr","createCsSqr","csLu","createCsLu","SparseMatrix, number, number","order","threshold","pinv","../../../utils/number","../sparse/csLu","../sparse/csSqr","662","Node, SymbolNode, Object","variable","constNodes","constTag","Node, SymbolNode","string, SymbolNode","string, SymbolNode, Object","string, string","string, string, Object","Node, string","Node, string, Object","deriv","_derivTex","Node, ConstantNode","Node, SymbolNode, ConstantNode","string, string, number","Object, ConstantNode, string","Object, SymbolNode, string","Object, ParenthesisNode, string","Object, FunctionAssignmentNode, string","Object, FunctionNode | OperatorNode, string","isConst","ConstantNode, Object","SymbolNode, Object","ParenthesisNode, Object","FunctionAssignmentNode, Object","FunctionNode, Object","funcArgsCheck","funcDerivative","arg0","negative","chainDerivative","OperatorNode, Object","constantTerms","nonConstantTerms","nonConstantNode","newArgs","argOuter","argInner","_arg2","powMinusOne","valueType","663","_simplifyConstant","_simplifyCore","simplifyConstant","createSimplifyConstant","simplifyCore","createSimplifyCore","string, boolean","detailed","string, Object, boolean","Node, boolean","Node, Object","Node, Object, boolean","sBefore","setRules","oldRules","rulesFirst","rulesSucDiv","firstRules","distrDivRules","sucDivRules","firstRulesAgain","finalRules","rulesRationalize","polyRet","extended","exactFractions","oper","recPoly","tp","retFunc","polynomial","nVars","expandPower","indParent","internal","does","nEsqTopo","nDirTopo","eDistrDiv","redoInic","coefficients","retRationalize","polyToCanonical","cte","fire","maxExpo","varname","recurPol","noPai","noFil","valor","_i2","no","n2","./simplify/simplifyConstant","./simplify/simplifyCore","664","_util","_resolve","resolve","createResolve","_createUtil","createUtil","isCommutative","isAssociative","unflattenr","unflattenl","createMakeNodeFunction","string, Object, Object","string, Array","string, Array, Object","string, Array, Object, Object","Node, Object, Object","Node, Array","Node, Array, Object","Node, Array, Object, Object","ruleSet","makeNode","expandsym","newRule","ruleType","lr","removeParens","_lastsym","expanded","_buildRules","applyRule","SUPPORTED_CONSTANTS","commutative","repl","_ruleMatch","mergeMatch","match1","match2","_exactMatch","combineChildMatches","list1","list2","isSplit","splits","rightArgs","getSplits","splitMatches","matchSet","childMatches","childMatch","uniqueSets","unique","mergeChildMatches","./simplify/resolve","./simplify/util","665","_args","666","_noop","allChildren","fnname","_toNumber","ignore","_toNode","vn","unaryMinusNode","_exactFraction","noBignumber","noFraction","Fraction, Object","BigNumber, Object","number, Object","Complex, Object","foldOp","ignoreandcontinue","foldFraction","operatorFunctions","some","ignoreandcontine","consts","../../../utils/noop","./util","667","node0","node1","a0","a00","a00a1","a01","668","associative","findChildren","curnode","669","_solveValidation","solveValidation","createSolveValidation","SparseMatrix, Array | Matrix","bdata","bj","jvalues","jindex","xj","DenseMatrix, Array | Matrix","_denseForwardSubstitution","Array, Array | Matrix","./utils/solveValidation","670","_csIpvec","SparseMatrix, Array | Matrix, number, number","Object, Array | Matrix","_toMatrix","csIpvec","../sparse/csIpvec","671","_denseBackwardSubstitution","672","msize","datatype","_datatype","asize","arraySize","../../../../utils/array","../../../../utils/is","../../../../utils/string","673","createCsAmd","_csFkeep","_csFlip","_csTdfs","lemax","dense","cm","at","tindex","tptr","_createTargetMatrix","csFkeep","k2","pj","nvi","pk","eln","pn","cindex","cptr","cnz","W","nv","head","elen","degree","hhead","_wclear","_initializeQuotientGraph","nel","csFlip","_initializeDegreeLists","mindeg","elenk","nvk","dk","dext","pk1","pk2","wnvi","p3","p4","nvj","jlast","ok","csTdfs","./csFkeep","./csFlip","./csTdfs","674","createCsCounts","_csLeaf","post","ata","J","p0","maxfirst","prevleaf","colcount","csLeaf","jleaf","./csLeaf","675","csDfs","jnew","_csMarked","csMarked","_csMark","csMark","_csUnflip","csUnflip","done","./csMark","./csMarked","./csUnflip","676","csEtree","inext","aptr","677","avalues","nz","678","679","680","ancestor","sparent","jprev","681","_csSpsolve","csSpsolve","createCsSpsolve","tol","lnz","unz","xabs","ipiv","./csSpsolve","682","683","684","csPermute","adt","cvalues","t0","createSparseMatrix","685","csPost","686","csReach","gptr","gsize","bindex","bptr","_csDfs","./csDfs","687","_csReach","lo","gvalues","gindex","bvalues","./csReach","688","_csPermute","_csPost","_csEtree","_csAmd","_csCounts","csAmd","csCounts","cp","leftmost","tail","nque","pa","_vcount","./csAmd","./csCounts","./csEtree","./csPermute","./csPost","689","690","691","absNumber","../../plain/number","692","_algorithm","_algorithm2","_algorithm3","_algorithm4","_algorithm5","algorithm01","createAlgorithm01","algorithm04","createAlgorithm04","algorithm10","createAlgorithm10","algorithm13","createAlgorithm13","algorithm14","createAlgorithm14","DenseMatrix, DenseMatrix","DenseMatrix, SparseMatrix","SparseMatrix, DenseMatrix","SparseMatrix, SparseMatrix","Array, Array","Array, Matrix","Matrix, Array","DenseMatrix, any","SparseMatrix, any","any, DenseMatrix","any, SparseMatrix","Array, any","any, Array","any, any","any, any, ...any","rest","../../type/matrix/utils/algorithm01","../../type/matrix/utils/algorithm04","../../type/matrix/utils/algorithm10","../../type/matrix/utils/algorithm13","../../type/matrix/utils/algorithm14","693","number, number","addNumber","Complex, Complex","BigNumber, BigNumber","Fraction, Fraction","Unit, Unit","equalBase","fixPrefix","694","cbrtNumber","_cbrtComplex","Complex, boolean","third","negate","_result","allRoots","principal","695","_nearlyEqual","_number2","nearlyEqual","ceilNumber","../../utils/bignumber/nearlyEqual","696","cubeNumber","697","algorithm11","createAlgorithm11","Array | Matrix, Array | Matrix","any, Array | Matrix","../../type/matrix/utils/algorithm11","698","Unit, number | Fraction | BigNumber","_normalize","number | Fraction | BigNumber, Unit","699","_algorithm6","_algorithm7","algorithm02","createAlgorithm02","algorithm03","createAlgorithm03","algorithm07","createAlgorithm07","algorithm12","createAlgorithm12","../../type/matrix/utils/algorithm02","../../type/matrix/utils/algorithm03","../../type/matrix/utils/algorithm07","../../type/matrix/utils/algorithm12","700","algorithm09","createAlgorithm09","../../type/matrix/utils/algorithm09","701","702","expNumber","703","expm1Number","704","705","706","gcdNumber","SparseMatrix, number | BigNumber","DenseMatrix, number | BigNumber","number | BigNumber, SparseMatrix","number | BigNumber, DenseMatrix","Array, number | BigNumber","number | BigNumber, Array","Array | Matrix | number | BigNumber, Array | Matrix | number | BigNumber, ...Array | Matrix | number | BigNumber","707","... number | BigNumber","largest","708","algorithm06","createAlgorithm06","lcmNumber","../../type/matrix/utils/algorithm06","709","logNumber","710","log10Number","711","_log1pComplex","xRe1p","712","log2Number","_log2Complex","newX","713","algorithm05","createAlgorithm05","modNumber","../../type/matrix/utils/algorithm05","714","_validateMatrixDimensions","Matrix, Matrix","xsize","ysize","dt","adata","bdt","mf","_multiplyVectorVector","storage","bsize","alength","bcolumns","createDenseMatrix","_multiplyVectorDenseMatrix","_multiplyVectorMatrix","_multiplyMatrixVector","_multiplyMatrixMatrix","size1","size2","arows","acolumns","brows","ib","vbi","ka0","ka1","ka","ia","ic","jb","kb0","kb1","cij","kb","vbij","715","multiplyNumber","number | Fraction | BigNumber | Complex, Unit","Unit, number | Fraction | BigNumber | Complex","716","number | Complex | BigNumber | boolean, number | BigNumber | string","Array, number | BigNumber | string","Matrix, number | BigNumber | string","ninf","sizeX","POSITIVE_INFINITY","pinf","NEGATIVE_INFINITY","maxc","cj","maxr","fro","717","createNthRootNumber","complexErr","nthRootNumber","_bigNthRoot","Complex, number","Big","718","_nthComplexRoots","_calculateExactResult","aIsNumeric","roots","halfPiFactor","719","Array, number","_powArray","Array, BigNumber","Matrix, number","_powMatrix","Matrix, BigNumber","Unit, number | BigNumber","yFrac","yNum","ex","powNumber","720","createRoundNumber","ownKeys","enumerableOnly","symbols","getOwnPropertySymbols","_objectSpread","getOwnPropertyDescriptors","defineProperties","NO_INT","roundNumberSignatures","Complex, BigNumber","_n","number, BigNumber","Fraction, number","number | Complex | BigNumber, SparseMatrix","number | Complex | BigNumber, DenseMatrix","number | Complex | BigNumber, Array","roundNumber","721","signNumber","722","_sqrtNumber","723","squareNumber","724","checkEqualDimensions","../../error/DimensionError","725","unaryMinusNumber","726","unaryPlusNumber","boolean | string","727","xgcdNumber","lastx","lasty","728","_bitwise","bitAndNumber","bitAndBigNumber","../../utils/bignumber/bitwise","729","bitNotNumber","bitNotBigNumber","730","bitOrNumber","bitOrBigNumber","731","bitXorNumber","732","algorithm08","createAlgorithm08","leftShiftNumber","leftShiftBigNumber","../../type/matrix/utils/algorithm08","733","rightArithShiftNumber","rightArithShiftBigNumber","734","rightLogShiftNumber","735","number | BigNumber","736","737","number | BigNumber, number | BigNumber","738","kFactorial","negativeOne","kChooseI","iPower","739","740","741","742","743","Array, Array, Array","_2d","xCoeff","yCoeff","constant","_distancePointLine2D","Object, Object, Object","lineTwoPtY","lineTwoPtX","lineOnePtY","lineOnePtX","pointX","pointY","_3d","_parametricLine","_distancePointLine3D","_containsOnlyNumbers","_euclideanDistance","Object, Object","xCoeffLine","yCoeffLine","pointZ","x0","y0","z0","pointOneX","pointOneY","pointTwoX","pointTwoY","pointOneZ","pointTwoZ","_isNumber","aI","_pairwise","pointA","pointB","_distancePairwise","_objectToArray","den","diff","vectorSize","744","plane","_4d","y1","z1","y2","z2","x1x","x2x","y1y","y2y","z1z","z2z","py","pz","_intersectLinePlane","Array, Array, Array, Array","p1a","p1b","p2a","p2b","o1","o2","d20o11","d21o10","d20o21","d21o20","_intersect2d","x3","y3","z3","x4","y4","z4","d1343","_intersect3dHelper","d4321","d1321","d4343","d2121","ta","tb","pax","pay","paz","pbx","pby","pbz","Matrix, Matrix, Matrix","Matrix, Matrix, Matrix, Matrix","add1","add2","add3","745","andNumber","746","notNumber","747","orNumber","748","xorNumber","749","Array | Matrix, number | BigNumber, function","mat","tran","_switch","../../error/IndexError","750","validateIndex","rowRange","751","...Array | Matrix | number | BigNumber","prevDim","asMatrix","matrices","concatDim","...string","752","highestDimension","xSize","ySize","product","753","754","decomp","evenCycles","755","Array, string","Array, number, string","Array, BigNumber, string","Matrix, string","Matrix, number, string","Matrix, BigNumber, string","kSuper","kSub","diagonal","_createDiagonalMatrix","dm","vector","_getDiagonal","756","757","checkAndSubmit","getDataType","isSymmetric","psi","e0","Sij","createArray","Vab","getAijBig","_i3","aii","ajj","aij","denom","getThetaBig","Hij","Aki","Akj","csHij","Aii","Ajj","_k3","x1Big","Ski","Skj","_k2","Sij1Big","Ei","_i4","sorting","diagBig","xArr","getAij","_k4","_k","Sij1","Mij","maxMij","maxIJ","S","Ef","Sf","minID","_k5","ans","vectors","758","infNorm","qfac","twoqfac","twoqp1fac","errorEstimate","findParams","rowSum","infinityNorm","Apos","factor","AposToI","alternate","759","760","_filterCallback","761","flat","762","763","getArrayDataType","764","number | BigNumber, string","number | BigNumber, number | BigNumber, string","_identityVector","defaultValue","minimum","765","ABig","rBig","Ac","Bc","Ar","Br","766","767","768","...number | BigNumber | string","Array | Matrix, string","hasBigNumbers","_validate","769","asc","Array | Matrix, number","Array | Matrix, number, string","Array | Matrix, number, function","quickSelect","770","_strRange","_out","_rangeEx","number, number, number","number, number, boolean","includeEnd","_rangeInc","number, number, number, boolean","_bigRangeEx","BigNumber, BigNumber, BigNumber","BigNumber, BigNumber, boolean","_bigRangeInc","BigNumber, BigNumber, BigNumber, boolean","noMatrix","nums","../../utils/noop","771","sizes","772","defaultChar","_resizeString","773","columnRange","774","number | Complex | BigNumber | Unit | boolean | null","775","compareAsc","compareDesc","_arrayIsVector","_matrixIsVector","_comparator","776","_denmanBeavers","_maxIterations","_tolerance","iterations","Y","Z","Yk","777","778","Array, Index","isScalar","Matrix, Index","Object, Index","_getObjectProperty","string, Index","_getSubstring","Array, Index, any","Array, Index, any, any","Matrix, Index, any","Matrix, Index, any, any","string, Index, string","_setSubstring","string, Index, string, string","Object, Index, any","_setObjectProperty","strLen","dimension","779","_denseTrace","780","transposedRow","transposed","_denseTranspose","_sparseTranspose","781","782","combinationsNumber","nMinusk","isPositiveInteger","../../plain/number/combinations","783","_product","nMinusOne","../../utils/product","784","785","gammaNumber","gammaP","real","gammaG","twoPiSqrt","bigFactorial","786","_kldiv","plength","qlength","qnorm","pnorm","787","deepForEach","ai","788","789","_seededRNG","rng","createRng","possibles","Array | Matrix, Array","weights","Array | Matrix, Array | Matrix, number","Array | Matrix, number, Array | Matrix","single","totalWeights","pick","randKey","./util/seededRNG","790","createRandomNumber","_randomMatrix2","_randomMatrix","Array | Matrix, number, number","randomMatrix","./util/randomMatrix","791","_randomIntMatrix","792","_length","793","singletonRandom","_seedRandom","setSeed","seed-random","794","createCompareNumber","boolean, boolean","795","_javascriptNaturalSort","compareBooleans","typeX","typeY","compareMatricesAndArrays","compareArrays","compareComplexNumbers","formatUnits","keysX","keysY","compareObjects","javascript-natural-sort","796","createCompareTextNumber","797","798","createEqualNumber","799","createEqualScalarNumber","complexEquals","../../utils/complex","800","801","createLargerNumber","802","createLargerEqNumber","803","createSmallerNumber","804","createSmallerEqNumber","805","createUnequalNumber","806","b1","b2","807","inb2","identify","generalize","808","809","810","811","number | BigNumber | Fraction | Complex, Array | Matrix","812","bitarray","813","Array | Matrix, boolean","814","815","816","MAX_NUM","THRESH","ysq","xnum","xden","erf1","del","erfc2","SQRPI","erfc3","817","_improveErrorMessage","...","med","improveErrorMessage","./utils/improveErrorMessage","818","Array | Matrix, number | BigNumber","_largest","containsCollections","819","820","mid","middle2","middle","number | BigNumber | Complex | Unit","number | BigNumber | Complex | Unit, number | BigNumber | Complex | Unit","821","_smallest","822","823","824","sorted","_fracPart","validate","_left","_right","_integerPart","_value","integerPart","fracPart","integerPartNumber","number | BigNumber | Unit","probOrN","dataArr","nPlusOne","probArr","intN","_nPlusOne","currProb","825","Array | Matrix, number | BigNumber, string","normalization","826","827","fnName","details","828","_var","_varDim","829","any, Object | function | number","830","string, Object | Array","string, Object | Array, number | Object","original","831","832","acoshNumber","833","acotNumber","834","acothNumber","835","acscNumber","836","acschNumber","837","asecNumber","838","xInv","asechNumber","839","840","asinhNumber","841","842","843","atanhNumber","844","hasBase","BASE_UNITS","ANGLE","845","846","cotNumber","847","cothNumber","848","cscNumber","849","cschNumber","850","secNumber","851","sechNumber","852","853","sinhNumber","854","855","856","Unit, Unit | string","Matrix, any","any, Matrix","857","858","859","860","isNaNNumber","861","isNegativeNumber","862","number | BigNumber | Fraction | boolean","Complex | Unit | string | null | undefined | Node","863","isPositiveNumber","864","865","isZeroNumber","866","validInputTypes","validOutputTypes","outputType","inputType","867","868","869","870","subtractNumber","divideNumber","fixNumber","floorNumber","log1pNumber","sqrtNumber","normNumber","decimals","871","872","873","874","_arithmetic","_logical","_relational","_probability","_trigonometry","_utils","./arithmetic","./bitwise","./combinations","./logical","./probability","./relational","./trigonometry","./utils","875","876","twoN","threeN","fourN","fiveN","877","878","acosNumber","asinNumber","atanNumber","atan2Number","cosNumber","coshNumber","sinNumber","tanNumber","tanhNumber","879","isIntegerNumber","880","_decimal","decimal.js","881","../../../utils/collection","882","bool","lcase","883","createLazyProxy","chainify","excludedNames","884","885","strRe","strIm","fromPolar","complex.js","886","887","fraction.js","888","889","preprocess","_fit","newSize","_getSubmatrix","dims","_get","submatrix","sSize","iSize","outer","unsqueeze","_setSubmatrix","dataIndex","subIndex","_set","indexI","me","swapRows","vi","890","oneOverLogPhi","_minimum","_cut","isFibonacciHeap","insert","extractMinimum","numberOfChildren","tempRight","numRoots","_linkNodes","_findMinimumNode","_cascadingCut","_decreaseKey","891","isImmutableDenseMatrix","892","skipZeros","893","ranges","_dimensions","_isScalar","_createImmutableMatrix","strings","894","hasStart","hasEnd","hasStep","895","_heap","isSpa","heap","nodei","nodej","896","_createFromArray","_createFromMatrix","_getValueIndex","_insert","ins","_toArray","kk","mvalues","mindex","mptr","_getsubset","_setsubset","_remove","r1","_j","minRow","maxRow","minColumn","maxColumn","invoke","_i5","_i7","vx","vy","897","...number | string | BigNumber | Range | Array | Matrix","898","Array | Matrix, string, string","899","900","denseMatrix","sparseMatrix","cf","cdata","../../../error/DimensionError","901","902","903","xa","xb","wa","wb","904","vc","wai","wbi","905","scatter","906","_scatter","va","vb","907","908","909","910","911","912","csize","_iterate","level","av","bv","cv","913","914","Unit, string | Unit","valuelessUnit","915","916","../utils/number","917","units","UNIT_NONE","prefix","PREFIXES","power","BASE_DIMENSIONS","skipAutomaticSimplification","skipWhitespace","revert","oldIndex","tentativeNumber","tentativeIndex","parseCharacter","toFind","_findUnit","UNITS","prefixes","endsWith","prefixLen","prefixName","_prefix","getNumericIfUnitless","powerMultiplierCurrent","expectingUnit","valueStr","powerMultiplierStack","powerMultiplierStackProduct","uStr","oldC","unitName","parseUnit","baseDim","UNIT_SYSTEMS","auto","allowNoUnits","_isDerived","unitValue","unitOffset","unitPower","unitPrefixValue","_getNumberConverter","_denormalize","prefixValue","valThis","valOther","inverted","toNumeric","matchingBase","matchingUnit","proposedUnitList","currentUnitSystem","missingBaseDim","toSI","si","strNum","strDen","nNum","nDen","simp","isImaginary","VAR","VA","_bestPrefix","unitStr","absValue","absUnitValue","bestPrefix","bestDiff","scientific","SHORT","da","xNumeric","xRounded","testSum","G","LONG","deca","hecto","kilo","mega","giga","tera","peta","exa","zetta","yotta","deci","centi","milli","micro","nano","pico","femto","atto","zepto","yocto","SQUARED","CUBIC","BINARY_SHORT_SI","BINARY_SHORT_IEC","Ki","Mi","Gi","Ti","Pi","Zi","Yi","BINARY_LONG_SI","BINARY_LONG_IEC","kibi","mebi","gibi","tebi","pebi","exi","zebi","yobi","BTU","MM","SHORTLONG","BINARY_SHORT","BINARY_LONG","MASS","LENGTH","TIME","CURRENT","TEMPERATURE","LUMINOUS_INTENSITY","AMOUNT_OF_SUBSTANCE","FORCE","SURFACE","VOLUME","ENERGY","POWER","PRESSURE","ELECTRIC_CHARGE","ELECTRIC_CAPACITANCE","ELECTRIC_POTENTIAL","ELECTRIC_RESISTANCE","ELECTRIC_INDUCTANCE","ELECTRIC_CONDUCTANCE","MAGNETIC_FLUX","MAGNETIC_FLUX_DENSITY","FREQUENCY","BIT","meter","inch","foot","yard","mile","link","rod","angstrom","ft","mi","li","mil","sqin","sqft","sqyd","sqmi","sqrd","sqch","sqmil","acre","hectare","m3","litre","cuin","cuft","cuyd","teaspoon","tablespoon","drop","gtt","minim","fluiddram","fluidounce","gill","cup","pint","quart","gallon","beerbarrel","oilbarrel","hogshead","fldr","floz","gi","qt","gal","bbl","obl","gram","ton","tonne","grain","dram","ounce","poundmass","hundredweight","stick","stone","gr","dr","oz","lbm","cwt","minute","hour","day","week","month","year","decade","century","millennium","hertz","reciprocal","Hz","rad","radian","deg","grad","gradian","cycle","arcsec","arcmin","ampere","K","degC","degF","degR","kelvin","celsius","fahrenheit","rankine","mol","mole","cd","candela","newton","dyn","dyne","lbf","poundforce","kip","joule","erg","Wh","eV","electronvolt","watt","hp","Pa","atm","bar","torr","mmHg","mmH2O","cmH2O","farad","F","volt","V","ohm","henry","siemens","weber","Wb","tesla","ALIASES","meters","inches","feet","yards","miles","rods","chains","angstroms","litres","liter","liters","teaspoons","tablespoons","minims","fluiddrams","fluidounces","gills","cups","pints","quarts","gallons","beerbarrels","oilbarrels","hogsheads","gtts","grams","tons","tonnes","grains","drams","ounces","poundmasses","hundredweights","sticks","lbs","kips","acres","hectares","sqfeet","sqyard","sqmile","sqmiles","mmhg","mmh2o","cmh2o","seconds","secs","minutes","mins","hours","hr","hrs","days","weeks","months","years","decades","centuries","millennia","radians","degrees","gradians","cycles","arcsecond","arcseconds","arcminute","arcminutes","BTUs","watts","joules","amperes","coulombs","volts","ohms","farads","webers","teslas","electronvolts","moles","byte","calculateAngleValues","cgs","us","_key2","setUnitSystem","getUnitSystem","typeConverters","_name2","_unit2","alias","_key3","_key4","deleteUnit","aliases","lastUnit","_key5","createUnitSingle","_c","isValidAlpha","assertUnitNameIsValid","definition","defUnit","newUnit","_newBaseUnit","anyMatch","newBaseUnit","_i6","_i8","aliasName","_alias","_key6","../../utils/bignumber/constants","918","string, Unit | string | Object, Object","def","string, Unit | string | Object","919","Unit, Array","920","number | BigNumber | Fraction | Complex, string","921","createJosephson","unitFactory","numberFactory","922","dimNext","_defaultValue","oldLen","newLen","newArray","flatArray","totalSize","sizeIndex","tmpArray2","tmpArray","_unsqueeze","regexp","separator","itemType","./is","./number","./string","923","prevPrec","bitwise","xBits","yBits","minBits","maxBits","minSign","xSign","ySign","decCoefficientToBinaryString","shortLen","longLen","expFuncVal","outVal","twoPower","two","negOne","924","memoize","hasher","../function","925","notation","toEngineering","exponential","lower","upper","fixedOptions","lowerExp","upperExp","rounded","newExp","valueWithoutExp","../object","926","927","_reduce","./array","928","929","isPlainObject","method","safeNativeProperties","Function","safeNativeMethods","toLocaleString","./object","930","_tinyEmitter","off","once","tiny-emitter","931","assertAndCreate","deps","pickShallow","assertDependencies","sortFactories","isOptionalDependency","factoriesByName","addFactory","containsDependency","missingDependencies","932","memoizeCompare","isEqual","cached","933","934","latexUnits","latexSymbols","_escapeLatex","Alpha","Beta","Gamma","Delta","delta","Epsilon","varepsilon","Zeta","zeta","Eta","eta","Theta","vartheta","Iota","iota","Kappa","kappa","varkappa","Lambda","Mu","mu","Nu","nu","Xi","Omicron","omicron","varpi","Rho","rho","varrho","Sigma","sigma","varsigma","Tau","Upsilon","upsilon","Phi","varphi","Chi","chi","Psi","Omega","omega","Inf","infinity","oo","lim","0","escape-latex","935","messages","_console","936","noIndex","noSubset","937","splitNumber","roundDigits","DBL_EPSILON","missingZeros","expDiff","decimalIdx","decimalVal","splitValue","pp","938","nestedObject","flattenedObject","_deepFlatten","canDefineProperty","valueResolver","_uninitialized","isPath","939","940","half","941","escaped","_formatter","looksLikeFraction","formatArray","./bignumber/formatter","942","943","../../lib/entry/mainAny","944","pool","GLOBAL","startdenom","significance","overflow","oldRandom","ARC4","keylen","width","mixkey","smear","stringseed","tostring","arc4","typ","entropy","Uint8Array","navigator","plugins","screen","autoseed","resetGlobal","945","evtArr","evts","liveEvents","TinyEmitter","946","notOk","_types","anyType","_ignore","_conversions","findTypeByName","typeName","findInArray","hint","findTypeIndex","findTypeName","stringifyParams","typeNames","getTypeName","restParam","parseParam","notEmpty","notIgnore","matchingConversions","conversion","filterConversions","exactTypes","typeIndex","conversionIndex","convertibleTypes","hasRestParam","hasConversions","compileTest","test0","test1","tests","compileTests","lastTest","testRestParam","getParamAtIndex","getExpectedTypeNames","excludeConversions","isExactType","mergeExpectedParams","flatMap","getLowestTypeIndex","getLowestConversionIndex","compareSignatures","signature1","signature2","param1","param2","compareParams","compileArgConversion","conversion0","conversion1","splitParams","ignoreConversionTypes","_splitParams","filteredTypes","typeGroup","hasConflictingParams","array1","array2","hasOverlap","len1","len2","restParam1","restParam2","createTypedFunction","signaturesMap","parsedSignatures","parsedParam","isInvalidParam","parseSignature","notNull","parsedSignature","conflictingSignature","ok0","ok1","ok2","ok3","ok4","ok5","allOk","test00","test10","test20","test30","test40","test50","test01","test11","test21","test31","test41","test51","fns","compiledConversions","fnConvert","fnPreprocess","compileArgsPreprocessing","fn0","fn1","fn2","fn3","fn4","fn5","len0","len3","len4","len5","iStart","iEnd","generic","matchingSignatures","nextMatchingDefs","actualType","lengths","maxLength","expectedLength","createSignaturesMap","getName","extractSignatures","validateUnique","_signature","_fn","...Function","string, ...Function","addType","beforeObjectTest","addConversion"],"mappings":"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CG,OAAU,IAAI7H,OAAO8H,kBAAkBF,OACvCG,OAAS,IAAI5H,WAAWA,WAAW0H,QACvCE,OAAOC,iBAAkB,EAEzBD,OAAOE,uBACP,IAAIlI,OAAS,GACTmI,cAAgB,IAAIpI,cAAcC,QACtCgI,OAAOI,iBAAiBD,eAExB,IAAIE,KAAOL,OAAOM,WACdC,KAAO,IAAItH,eAAeC,QAASC,mBACvClB,OAAOoI,KAAKG,gBAAgBC,QAAQC,KAAKH,KAAMF,MAC5CX,eACFA,cAAc1H,UA6gBd,CAAC2I,cAAc,EAAEC,iBAAiB,EAAEC,eAAe,EAAEC,eAAe,KAAKC,EAAE,CAAC,SAASzJ,QAAQf,OAAOD,SAGtG,IAAI2B,OAASX,QAAQ,gBAGjB0J,cAAgB,CAAC,uDACjB,oDACA,mDACA,mDACA,uDACA,mDACA,qDACA,mDACA,qDACA,oDACA,0DACA,uDACA,mDACA,mDACA,qDACA,yDACA,mDACA,uCACA,qDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,gDACA,iDACA,oDACA,uDACA,oDACA,mDACA,kDACA,wDACA,sDACA,oDACA,2DACA,iDACA,mDACA,oDACA,6DACA,oDACA,mDACA,wDACA,mDACA,+CACA,iDACA,mDACA,mDACA,mDACA,mDACA,iDACA,iDACA,iDACA,iDACA,kDACA,iDACA,iDACA,iDACA,iDACA,kDACA,iDACA,iDACA,iDACA,iDACA,kDACA,mDACA,iDACA,mDACA,mDACA,gDACA,iDACA,iDACA,iDACA,iDACA,iDACA,kDACA,iDACA,iDACA,iDACA,iDACA,kDACA,qDACA,oDACA,mDACA,qDACA,kDACA,oDACA,kDACA,qDACA,kDACA,oDACA,sDACA,kDACA,oDACA,qDACA,iDACA,iDACA,iDACA,iDACA,gDACA,kDACA,gDACA,gDACA,gDACA,iDACA,gDACA,iDACA,kDACA,iDACA,iDACA,iDACA,iDACA,iDACA,kDACA,iDACA,iDACA,iDACA,iDACA,kDACA,iDACA,iDACA,iDACA,iDACA,iDACA,kDACA,iDACA,iDACA,kDA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SrF,OAI/CzB,aAAaC,UAAU8G,YAAc,SAAStF,OAK9CzB,aAAaC,UAAU+G,SAAW,SAASvF,OAI3CzB,aAAaC,UAAUgH,QAAU,SAASxF,OAK1CzB,aAAaC,UAAUkN,UAAY,SAAS1L,OAI5CzB,aAAaC,UAAUmN,SAAW,SAAS3L,OAK3CzB,aAAaC,UAAUiH,aAAe,SAASzF,OAI/CzB,aAAaC,UAAUkH,YAAc,SAAS1F,OAK9CxD,QAAQ+B,aAAeA,cACrB,CAACyI,eAAe,KAAK4E,EAAE,CAAC,SAASpO,QAAQf,OAAOD,SAGlD,IAAI2B,OAASX,QAAQ,gBACjBe,aAAef,QAAQ,kBAAkBe,aAGzC2I,cAAgB,CAAC,uDACjB,oDACA,qDACA,qDACA,uDACA,qDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,kDACA,mDACA,mDACA,mDACA,kDACA,uDACA,yDACA,uDACA,uDACA,uDACA,2CACA,uCACA,uCACA,uCACA,uCACA,6CACA,uDACA,mDACA,iDACA,mDACA,iDACA,mDACA,iDACA,iDACA,iDACA,mDACA,iDACA,qDACA,mDACA,mDACA,mDACA,uDACA,mDACA,qDACA,mDACA,kDACA,kDACA,mDACA,oDACA,oDACA,qDACA,mDACA,mDACA,mDACA,qDACA,qDACA,oDACA,iDACA,oDACA,qDACA,qDACA,mDACA,kDACA,mDACA,kDACA,qDACA,qDACA,kDACA,qDACA,mDACA,oDACA,oDACA,uDACA,mDACA,mDACA,qDACA,qDACA,kDACA,gDACA,mDACA,kDACA,iDACA,mDACA,qDACA,kDACA,kDACA,oDACA,kDACA,kDACA,oDACA,mDACA,oDACA,iDACA,iDACA,iDACA,iDACA,gDACA,+CACA,iDACA,mDACA,mDACA,mDACA,iDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,mDACA,gDACA,iDACA,gDACA,mDACA,iDACA,gDACA,mDACA,iDACA,mDACA,mDACA,mDACA,mDACA,iDACA,mDACA,gDACA,mDACA,mDACA,mDA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"} \ No newline at end of file diff --git a/lib/quantum-circuit.js b/lib/quantum-circuit.js index 640963b..a50e9b9 100644 --- a/lib/quantum-circuit.js +++ b/lib/quantum-circuit.js @@ -984,262 +984,150 @@ var QuantumCircuit = function(numQubits) { } }, - swap: { - description: "Swaps the state of two qubits.", + gpi: { + description: "GPi gate", matrix: [ - [1,0,0,0], - [0,0,1,0], - [0,1,0,0], - [0,0,0,1] + [0, "exp(-i*phi)"], + ["exp(i*phi)", 0] ], - params: [], + params: ["phi"], drawingInfo: { - connectors: ["x","x"], - label: "SWP" + connectors: ["box"], + label: "GPi" }, + exportInfo: { quil: { - name: "SWAP" + name: "gpi", + params: ["phi"], + defgate: "DEFGATE gpi(%phi):\n 0, EXP(-i * %phi)\n EXP(i * %phi), 0" + }, + pyquil: { + name: "gpi", + params: ["phi"], + array: "[ [ 0, quil_exp(-1j*p_phi) ], [ quil_exp(1j*p_phi), 0 ] ]" }, cirq: { - name: "SWAP" + name: "gpi" }, quest: { - name: "swap", - func: "void swap(Qureg qubits, const int q1, const int q2) {\n"+ - " controlledNot(qubits, q1, q2);\n" + - " controlledNot(qubits, q2, q1);\n" + - " controlledNot(qubits, q1, q2);\n}" + name: "gpi", + //@TODO add function + func: "TODO" }, - qsharp: { - name: "SWAP" + qasm: { + name: "gpi" }, - quirk: { - name: "Swap" + qiskit: { + name: "gpi" }, braket: { - name: "swap" + name: "unitary", + params: ["phi"], + array: "[ [ 0, np.exp(-1j*p_phi) ], [ np.exp(1j*p_phi), 0 ] ]" }, aqasm: { - name: "SWAP" + matrix: [ [ 0, "exp(-i*phi)" ], [ "exp(i*phi)", 0] ], + array: "[ [ 0, np.exp(-1j*p_phi) ], [ np.exp(1j*p_phi), 0 ] ]", + params: ["phi"] } } }, - srswap: { - description: "Square root of swap", + gpi2: { + description: "GPi2 gate", matrix: [ - [1,0,0,0], - [0,"0.5 * (1 + i)","0.5 * (1 - i)",0], - [0,"0.5 * (1 - i)","0.5 * (1 + i)",0], - [0,0,0,1] + ["1/sqrt(2)", "(-i*exp(-i*phi))/sqrt(2)"], + ["(-i*exp(i*phi))/sqrt(2)", "1/sqrt(2)"] ], - params: [], + params: ["phi"], drawingInfo: { - connectors: ["box","box"], - label: "√SWP" + connectors: ["box"], + label: "GPi2" }, exportInfo: { quil: { - name: "srswap", - defgate: "DEFGATE srswap:\n 1, 0, 0, 0\n 0, 0.5+0.5i, 0.5-0.5i, 0\n 0, 0.5-0.5i, 0.5+0.5i, 0\n 0, 0, 0, 1" - }, - cirq: { - name: "SWAP**(1/2)" + name: "gpi2", + params: ["phi"], + defgate: "DEFGATE gpi2(%phi):\n 1/SQRT(2), (-i*EXP(-i * %phi)) / SQRT(2)\n (-i*EXP(i * %phi)) / SQRT(2), 1/SQRT(2)" }, pyquil: { - name: "srswap", - array: "[[1,0,0,0],[0,0.5 * (1 + 1j),0.5 * (1 - 1j),0],[0,0.5 * (1 - 1j),0.5 * (1 + 1j),0],[0,0,0,1]]" + name: "gpi2", + params: ["phi"], + array: "[ [ 1/quil_sqrt(2), (-1j*quil_exp(-1j*p_phi))/quil_sqrt(2) ], [ (-1j*quil_exp(1j*p_phi))/quil_sqrt(2), 1/quil_sqrt(2) ] ]" + }, + cirq: { + name: "gpi2" }, quest: { - name: "srswap", - func: "void srswap(Qureg qubits, const int q1, const int q2) {\n" + - " controlledNot(qubits, q2, q1);\n"+ - " rotateY(qubits, q2, M_PI/2);\n"+ - " rotateZ(qubits, q2, M_PI/16);\n"+ - " controlledNot(qubits, q1, q2);\n"+ - " rotateZ(qubits, q1, M_PI/8);\n"+ - " rotateZ(qubits, q2, -M_PI/8);\n"+ - " controlledNot(qubits, q1, q2);\n"+ - " rotateZ(qubits, q2, M_PI/16);\n"+ - " rotateY(qubits, q2, -M_PI/2);\n"+ - " controlledNot(qubits, q2, q1);\n}" + name: "gpi2", + //@TODO add function + func: "TODO" }, qasm: { - equivalent: [ - { name: "u3", params: { theta: "pi/2", phi: "pi/2", lambda: "-1*pi" }, wires: [0]}, - { name: "u3", params: { theta: "pi/2", phi: "-1*pi/2", lambda: "pi" }, wires: [1]}, - { name: "cx", wires: [0, 1]}, - { name: "u3", params: { theta: "pi/4", phi: "-1*pi/2", lambda: "-1*pi/2" }, wires: [0]}, - { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "7*pi/4" }, wires: [1]}, - { name: "cx", wires: [0, 1]}, - { name: "u3", params: { theta: "pi/4", phi: "-1*pi", lambda: "-1*pi/2" }, wires: [0]}, - { name: "u3", params: { theta: "pi/2", phi: "pi", lambda: "pi/2" }, wires: [1]}, - { name: "cx", wires: [0, 1]}, - { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "-3*pi/2" }, wires: [0]}, - { name: "u3", params: { theta: "pi/2", phi: "pi/2", lambda: "0" }, wires: [1]}, - ] + name: "gpi2" }, qiskit: { - equivalent: [ - { name: "u3", params: { theta: "pi/2", phi: "pi/2", lambda: "-1*pi" }, wires: [0]}, - { name: "u3", params: { theta: "pi/2", phi: "-1*pi/2", lambda: "pi" }, wires: [1]}, - { name: "cx", wires: [0, 1]}, - { name: "u3", params: { theta: "pi/4", phi: "-1*pi/2", lambda: "-1*pi/2" }, wires: [0]}, - { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "7*pi/4" }, wires: [1]}, - { name: "cx", wires: [0, 1]}, - { name: "u3", params: { theta: "pi/4", phi: "-1*pi", lambda: "-1*pi/2" }, wires: [0]}, - { name: "u3", params: { theta: "pi/2", phi: "pi", lambda: "pi/2" }, wires: [1]}, - { name: "cx", wires: [0, 1]}, - { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "-3*pi/2" }, wires: [0]}, - { name: "u3", params: { theta: "pi/2", phi: "pi/2", lambda: "0" }, wires: [1]}, - ] + name: "gpi2" }, braket: { name: "unitary", - array: "[[1,0,0,0],[0,0.5 * (1 + 1j),0.5 * (1 - 1j),0],[0,0.5 * (1 - 1j),0.5 * (1 + 1j),0],[0,0,0,1]]" + params: ["phi"], + array: "[ [ 1/np.sqrt(2), (-1j*np.exp(-1j*p_phi))/np.sqrt(2) ], [ (-1j*np.exp(1j*p_phi))/np.sqrt(2), 1/np.sqrt(2) ] ]" }, aqasm: { - name: "SQRTSWAP" + matrix: [ [ "1/sqrt(2)", "(-i*exp(-i*phi))/sqrt(2)" ], [ "(-i*exp(i*phi))/sqrt(2)", "1/sqrt(2)" ] ], + array: "[ [ 1/np.sqrt(2), (-1j*np.exp(-1j*p_phi))/np.sqrt(2) ], [ (-1j*np.exp(1j*p_phi))/np.sqrt(2), 1/np.sqrt(2) ] ]", + params: ["phi"] } } }, - iswap: { - description: "Swaps the state of two qubits, applying a -i phase to q1 when it is in the 1 state and a -i phase to q2 when it is in the 0 state", + vz: { + description: "VirtualZ gate", matrix: [ - [1,0,0,0], - [0,0,"0+i",0], - [0,"0+i",0,0], - [0,0,0,1] + ["exp(-i*theta/2)", 0], + [0, "exp(i*theta/2)"] ], - params: [], + params: ["theta"], drawingInfo: { - connectors: ["box","box"], - label: "iSWP" + connectors: ["box"], + label: "VrtZ" }, exportInfo: { quil: { - name: "ISWAP" - }, - cirq: { - name: "ISWAP" - }, - qasm: { - equivalent: [ - { name: "u3", params: { theta: "pi/2", phi: "-1*pi/2", lambda: "-1*pi" }, wires: [0]}, - { name: "u3", params: { theta: "pi/2", phi: "-1*pi/2", lambda: "pi" }, wires: [1]}, - { name: "cx", wires: [0, 1]}, - { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "3*pi/2" }, wires: [0]}, - { name: "u3", params: { theta: "pi/2", phi: "3*pi/2", lambda: "0" }, wires: [1]}, - { name: "cx", wires: [0, 1]}, - { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "0" }, wires: [0]}, - { name: "u3", params: { theta: "pi", phi: "pi/4", lambda: "-1*pi/4" }, wires: [1]} - ] + name: "vz", + params: ["theta"], + defgate: "DEFGATE vz(%theta):\n EXP(-i * %theta/2), 0\n 0, EXP(-i * %theta/2)" }, - qiskit: { - equivalent: [ - { name: "u3", params: { theta: "pi/2", phi: "-1*pi/2", lambda: "-1*pi" }, wires: [0]}, - { name: "u3", params: { theta: "pi/2", phi: "-1*pi/2", lambda: "pi" }, wires: [1]}, - { name: "cx", wires: [0, 1]}, - { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "3*pi/2" }, wires: [0]}, - { name: "u3", params: { theta: "pi/2", phi: "3*pi/2", lambda: "0" }, wires: [1]}, - { name: "cx", wires: [0, 1]}, - { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "0" }, wires: [0]}, - { name: "u3", params: { theta: "pi", phi: "pi/4", lambda: "-1*pi/4" }, wires: [1]} - ] + pyquil: { + name: "vz", + params: ["theta"], + array: "[ [ quil_exp(-1j*p_theta/2), 0 ], [ 0, quil_exp(1j*p_theta/2) ] ]" }, - braket: { - name: "iswap" + cirq: { + name: "vz" }, - aqasm: { - name: "ISWAP" - } - } - }, - - xy: { - description: "XY gate", - matrix: [ - [1, 0, 0, 0], - [0, "cos(phi / 2)", "i * sin(phi / 2)", 0], - [0, "i * sin(phi / 2)", "cos(phi / 2)", 0], - [0, 0, 0, 1] - ], - params: ["phi"], - drawingInfo: { - connectors: ["box","box"], - label: "XY" - }, - exportInfo: { - quil: { - name: "XY", - "params": [ - "phi" - ] + quest: { + name: "vz", + //@TODO add function + func: "TODO" }, qasm: { - equivalent: [ - { name: "rz", params: { phi: "3*pi/4"}, wires: [0] }, - { name: "rx", params: { theta: "pi/2"}, wires: [0] }, - { name: "rz", params: { phi: "-3*pi/4"}, wires: [1] }, - { name: "rx", params: { theta: "pi/2"}, wires: [1] }, - { name: "cz", wires: [1, 0] }, - { name: "rz", params: { phi: "-1*pi/2"}, wires: [0] }, - { name: "rx", params: { theta: "pi/2"}, wires: [0] }, - { name: "rz", params: { phi: "phi/2"}, wires: [0] }, - { name: "rx", params: { theta: "-1*pi/2"}, wires: [0] }, - { name: "rz", params: { phi: "pi/2"}, wires: [1] }, - { name: "rx", params: { theta: "pi/2"}, wires: [1] }, - { name: "rz", params: { phi: "phi/2"}, wires: [1] }, - { name: "rx", params: { theta: "-1*pi/2"}, wires: [1] }, - { name: "cz", wires: [1, 0] }, - { name: "rz", params: { phi: "-1*pi/2"}, wires: [0] }, - { name: "rx", params: { theta: "pi/2"}, wires: [0] }, - { name: "rz", params: { phi: "pi/4"}, wires: [0] }, - { name: "rz", params: { phi: "-1*pi/2"}, wires: [1] }, - { name: "rx", params: { theta: "-1*pi/2"}, wires: [1] }, - { name: "rz", params: { phi: "3*pi/4"}, wires: [1] }, - ] + name: "vz" }, qiskit: { - equivalent: [ - { name: "rz", params: { phi: "3*pi/4"}, wires: [0] }, - { name: "rx", params: { theta: "pi/2"}, wires: [0] }, - { name: "rz", params: { phi: "-3*pi/4"}, wires: [1] }, - { name: "rx", params: { theta: "pi/2"}, wires: [1] }, - { name: "cz", wires: [1, 0] }, - { name: "rz", params: { phi: "-1*pi/2"}, wires: [0] }, - { name: "rx", params: { theta: "pi/2"}, wires: [0] }, - { name: "rz", params: { phi: "phi/2"}, wires: [0] }, - { name: "rx", params: { theta: "-1*pi/2"}, wires: [0] }, - { name: "rz", params: { phi: "pi/2"}, wires: [1] }, - { name: "rx", params: { theta: "pi/2"}, wires: [1] }, - { name: "rz", params: { phi: "phi/2"}, wires: [1] }, - { name: "rx", params: { theta: "-1*pi/2"}, wires: [1] }, - { name: "cz", wires: [1, 0] }, - { name: "rz", params: { phi: "-1*pi/2"}, wires: [0] }, - { name: "rx", params: { theta: "pi/2"}, wires: [0] }, - { name: "rz", params: { phi: "pi/4"}, wires: [0] }, - { name: "rz", params: { phi: "-1*pi/2"}, wires: [1] }, - { name: "rx", params: { theta: "-1*pi/2"}, wires: [1] }, - { name: "rz", params: { phi: "3*pi/4"}, wires: [1] }, - ] - }, - cirq: { - name: "xy", - params: ["phi"], - array: "[[1, 0, 0, 0], [0, np.cos(p_phi/2), 1j*np.sin(p_phi/2), 0], [0, 1j*np.sin(p_phi/2), np.cos(p_phi/2), 0], [0, 0, 0, 1]]", - notTfqSupported: true + name: "vz" }, braket: { - name: "xy", - params: ["phi"] + name: "unitary", + params: ["theta"], + array: "[ [ np.exp(-1j*p_theta/2), 0 ], [ 0, np.exp(1j*p_theta/2) ] ]" }, aqasm: { - matrix: [[1, 0, 0, 0],[0, "cos(phi / 2)", "i * sin(phi / 2)", 0],[0, "i * sin(phi / 2)", "cos(phi / 2)", 0],[0, 0, 0, 1]], - array: "[[1, 0, 0, 0], [0, np.cos(p_phi/2), 1j*np.sin(p_phi/2), 0], [0, 1j*np.sin(p_phi/2), np.cos(p_phi/2), 0], [0, 0, 0, 1]]", - params: ["phi"] + matrix: [ [ "exp(-i*theta/2)", 0 ], [ 0, "exp(i*theta/2)"] ], + array: "[ [ np.exp(-1j*p_theta/2), 0 ], [ 0, np.exp(1j*p_theta/2) ] ]", + params: ["theta"] } } }, @@ -1480,38 +1368,212 @@ var QuantumCircuit = function(numQubits) { } }, - ms: { - description: "Mølmer-Sørensen gate", + swap: { + description: "Swaps the state of two qubits.", matrix: [ - ["cos(theta)", 0, 0, "-i*sin(theta)"], - - [0, "cos(theta)", "-i*sin(theta)", 0], - - [0, "-i*sin(theta)", "cos(theta)", 0], - - ["-i*sin(theta)", 0, 0, "cos(theta)"] + [1,0,0,0], + [0,0,1,0], + [0,1,0,0], + [0,0,0,1] ], - params: ["theta"], + params: [], drawingInfo: { - connectors: ["circle","circle"], - label: "XX" + connectors: ["x","x"], + label: "SWP" }, exportInfo: { quil: { - name: "ms", - params: ["theta"], - defgate: "DEFGATE ms(%theta):\n COS(%theta), 0, 0, -i*SIN(%theta)\n 0, COS(%theta), -i*SIN(%theta), 0\n 0, -i*SIN(%theta), COS(%theta), 0\n -i*SIN(%theta), 0, 0, COS(%theta)" + name: "SWAP" }, - pyquil: { - name: "ms", + cirq: { + name: "SWAP" + }, + quest: { + name: "swap", + func: "void swap(Qureg qubits, const int q1, const int q2) {\n"+ + " controlledNot(qubits, q1, q2);\n" + + " controlledNot(qubits, q2, q1);\n" + + " controlledNot(qubits, q1, q2);\n}" + }, + qsharp: { + name: "SWAP" + }, + quirk: { + name: "Swap" + }, + braket: { + name: "swap" + }, + aqasm: { + name: "SWAP" + } + } + }, + + srswap: { + description: "Square root of swap", + matrix: [ + [1,0,0,0], + [0,"0.5 * (1 + i)","0.5 * (1 - i)",0], + [0,"0.5 * (1 - i)","0.5 * (1 + i)",0], + [0,0,0,1] + ], + params: [], + drawingInfo: { + connectors: ["box","box"], + label: "√SWP" + }, + exportInfo: { + quil: { + name: "srswap", + defgate: "DEFGATE srswap:\n 1, 0, 0, 0\n 0, 0.5+0.5i, 0.5-0.5i, 0\n 0, 0.5-0.5i, 0.5+0.5i, 0\n 0, 0, 0, 1" + }, + cirq: { + name: "SWAP**(1/2)" + }, + pyquil: { + name: "srswap", + array: "[[1,0,0,0],[0,0.5 * (1 + 1j),0.5 * (1 - 1j),0],[0,0.5 * (1 - 1j),0.5 * (1 + 1j),0],[0,0,0,1]]" + }, + quest: { + name: "srswap", + func: "void srswap(Qureg qubits, const int q1, const int q2) {\n" + + " controlledNot(qubits, q2, q1);\n"+ + " rotateY(qubits, q2, M_PI/2);\n"+ + " rotateZ(qubits, q2, M_PI/16);\n"+ + " controlledNot(qubits, q1, q2);\n"+ + " rotateZ(qubits, q1, M_PI/8);\n"+ + " rotateZ(qubits, q2, -M_PI/8);\n"+ + " controlledNot(qubits, q1, q2);\n"+ + " rotateZ(qubits, q2, M_PI/16);\n"+ + " rotateY(qubits, q2, -M_PI/2);\n"+ + " controlledNot(qubits, q2, q1);\n}" + }, + qasm: { + equivalent: [ + { name: "u3", params: { theta: "pi/2", phi: "pi/2", lambda: "-1*pi" }, wires: [0]}, + { name: "u3", params: { theta: "pi/2", phi: "-1*pi/2", lambda: "pi" }, wires: [1]}, + { name: "cx", wires: [0, 1]}, + { name: "u3", params: { theta: "pi/4", phi: "-1*pi/2", lambda: "-1*pi/2" }, wires: [0]}, + { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "7*pi/4" }, wires: [1]}, + { name: "cx", wires: [0, 1]}, + { name: "u3", params: { theta: "pi/4", phi: "-1*pi", lambda: "-1*pi/2" }, wires: [0]}, + { name: "u3", params: { theta: "pi/2", phi: "pi", lambda: "pi/2" }, wires: [1]}, + { name: "cx", wires: [0, 1]}, + { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "-3*pi/2" }, wires: [0]}, + { name: "u3", params: { theta: "pi/2", phi: "pi/2", lambda: "0" }, wires: [1]}, + ] + }, + qiskit: { + equivalent: [ + { name: "u3", params: { theta: "pi/2", phi: "pi/2", lambda: "-1*pi" }, wires: [0]}, + { name: "u3", params: { theta: "pi/2", phi: "-1*pi/2", lambda: "pi" }, wires: [1]}, + { name: "cx", wires: [0, 1]}, + { name: "u3", params: { theta: "pi/4", phi: "-1*pi/2", lambda: "-1*pi/2" }, wires: [0]}, + { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "7*pi/4" }, wires: [1]}, + { name: "cx", wires: [0, 1]}, + { name: "u3", params: { theta: "pi/4", phi: "-1*pi", lambda: "-1*pi/2" }, wires: [0]}, + { name: "u3", params: { theta: "pi/2", phi: "pi", lambda: "pi/2" }, wires: [1]}, + { name: "cx", wires: [0, 1]}, + { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "-3*pi/2" }, wires: [0]}, + { name: "u3", params: { theta: "pi/2", phi: "pi/2", lambda: "0" }, wires: [1]}, + ] + }, + braket: { + name: "unitary", + array: "[[1,0,0,0],[0,0.5 * (1 + 1j),0.5 * (1 - 1j),0],[0,0.5 * (1 - 1j),0.5 * (1 + 1j),0],[0,0,0,1]]" + }, + aqasm: { + name: "SQRTSWAP" + } + } + }, + + iswap: { + description: "Swaps the state of two qubits, applying a -i phase to q1 when it is in the 1 state and a -i phase to q2 when it is in the 0 state", + matrix: [ + [1,0,0,0], + [0,0,"0+i",0], + [0,"0+i",0,0], + [0,0,0,1] + ], + params: [], + drawingInfo: { + connectors: ["box","box"], + label: "iSWP" + }, + exportInfo: { + quil: { + name: "ISWAP" + }, + cirq: { + name: "ISWAP" + }, + qasm: { + equivalent: [ + { name: "u3", params: { theta: "pi/2", phi: "-1*pi/2", lambda: "-1*pi" }, wires: [0]}, + { name: "u3", params: { theta: "pi/2", phi: "-1*pi/2", lambda: "pi" }, wires: [1]}, + { name: "cx", wires: [0, 1]}, + { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "3*pi/2" }, wires: [0]}, + { name: "u3", params: { theta: "pi/2", phi: "3*pi/2", lambda: "0" }, wires: [1]}, + { name: "cx", wires: [0, 1]}, + { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "0" }, wires: [0]}, + { name: "u3", params: { theta: "pi", phi: "pi/4", lambda: "-1*pi/4" }, wires: [1]} + ] + }, + qiskit: { + equivalent: [ + { name: "u3", params: { theta: "pi/2", phi: "-1*pi/2", lambda: "-1*pi" }, wires: [0]}, + { name: "u3", params: { theta: "pi/2", phi: "-1*pi/2", lambda: "pi" }, wires: [1]}, + { name: "cx", wires: [0, 1]}, + { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "3*pi/2" }, wires: [0]}, + { name: "u3", params: { theta: "pi/2", phi: "3*pi/2", lambda: "0" }, wires: [1]}, + { name: "cx", wires: [0, 1]}, + { name: "u3", params: { theta: "pi/2", phi: "0", lambda: "0" }, wires: [0]}, + { name: "u3", params: { theta: "pi", phi: "pi/4", lambda: "-1*pi/4" }, wires: [1]} + ] + }, + braket: { + name: "iswap" + }, + aqasm: { + name: "ISWAP" + } + } + }, + + xx: { + description: "XX gate", + matrix: [ + ["cos(theta)", 0, 0, "-i*sin(theta)"], + + [0, "cos(theta)", "-i*sin(theta)", 0], + + [0, "-i*sin(theta)", "cos(theta)", 0], + + ["-i*sin(theta)", 0, 0, "cos(theta)"] + ], + params: ["theta"], + drawingInfo: { + connectors: ["box","box"], + label: "XX" + }, + exportInfo: { + quil: { + name: "xx", + params: ["theta"], + defgate: "DEFGATE xx(%theta):\n COS(%theta), 0, 0, -i*SIN(%theta)\n 0, COS(%theta), -i*SIN(%theta), 0\n 0, -i*SIN(%theta), COS(%theta), 0\n -i*SIN(%theta), 0, 0, COS(%theta)" + }, + pyquil: { + name: "xx", params: ["theta"], array: "[ [quil_cos(p_theta), 0, 0, -1j*quil_sin(p_theta)], [0, quil_cos(p_theta), -1j*quil_sin(p_theta), 0], [0, -1j*quil_sin(p_theta), quil_cos(p_theta), 0], [-1j*quil_sin(p_theta), 0, 0, quil_cos(p_theta)] ]" }, cirq: { - name: "ms" + name: "xx" }, quest: { - name: "ms", + name: "xx", //@TODO add function func: "TODO" }, @@ -1547,7 +1609,7 @@ var QuantumCircuit = function(numQubits) { ], params: ["theta"], drawingInfo: { - connectors: ["circle","circle"], + connectors: ["box","box"], label: "YY" }, exportInfo: { @@ -1597,7 +1659,7 @@ var QuantumCircuit = function(numQubits) { ], params: ["theta"], drawingInfo: { - connectors: ["circle","circle"], + connectors: ["box","box"], label: "ZZ" }, exportInfo: { @@ -1620,6 +1682,146 @@ var QuantumCircuit = function(numQubits) { } }, + xy: { + description: "XY gate", + matrix: [ + [1, 0, 0, 0], + [0, "cos(phi / 2)", "i * sin(phi / 2)", 0], + [0, "i * sin(phi / 2)", "cos(phi / 2)", 0], + [0, 0, 0, 1] + ], + params: ["phi"], + drawingInfo: { + connectors: ["box","box"], + label: "XY" + }, + exportInfo: { + quil: { + name: "XY", + "params": [ + "phi" + ] + }, + qasm: { + equivalent: [ + { name: "rz", params: { phi: "3*pi/4"}, wires: [0] }, + { name: "rx", params: { theta: "pi/2"}, wires: [0] }, + { name: "rz", params: { phi: "-3*pi/4"}, wires: [1] }, + { name: "rx", params: { theta: "pi/2"}, wires: [1] }, + { name: "cz", wires: [1, 0] }, + { name: "rz", params: { phi: "-1*pi/2"}, wires: [0] }, + { name: "rx", params: { theta: "pi/2"}, wires: [0] }, + { name: "rz", params: { phi: "phi/2"}, wires: [0] }, + { name: "rx", params: { theta: "-1*pi/2"}, wires: [0] }, + { name: "rz", params: { phi: "pi/2"}, wires: [1] }, + { name: "rx", params: { theta: "pi/2"}, wires: [1] }, + { name: "rz", params: { phi: "phi/2"}, wires: [1] }, + { name: "rx", params: { theta: "-1*pi/2"}, wires: [1] }, + { name: "cz", wires: [1, 0] }, + { name: "rz", params: { phi: "-1*pi/2"}, wires: [0] }, + { name: "rx", params: { theta: "pi/2"}, wires: [0] }, + { name: "rz", params: { phi: "pi/4"}, wires: [0] }, + { name: "rz", params: { phi: "-1*pi/2"}, wires: [1] }, + { name: "rx", params: { theta: "-1*pi/2"}, wires: [1] }, + { name: "rz", params: { phi: "3*pi/4"}, wires: [1] }, + ] + }, + qiskit: { + equivalent: [ + { name: "rz", params: { phi: "3*pi/4"}, wires: [0] }, + { name: "rx", params: { theta: "pi/2"}, wires: [0] }, + { name: "rz", params: { phi: "-3*pi/4"}, wires: [1] }, + { name: "rx", params: { theta: "pi/2"}, wires: [1] }, + { name: "cz", wires: [1, 0] }, + { name: "rz", params: { phi: "-1*pi/2"}, wires: [0] }, + { name: "rx", params: { theta: "pi/2"}, wires: [0] }, + { name: "rz", params: { phi: "phi/2"}, wires: [0] }, + { name: "rx", params: { theta: "-1*pi/2"}, wires: [0] }, + { name: "rz", params: { phi: "pi/2"}, wires: [1] }, + { name: "rx", params: { theta: "pi/2"}, wires: [1] }, + { name: "rz", params: { phi: "phi/2"}, wires: [1] }, + { name: "rx", params: { theta: "-1*pi/2"}, wires: [1] }, + { name: "cz", wires: [1, 0] }, + { name: "rz", params: { phi: "-1*pi/2"}, wires: [0] }, + { name: "rx", params: { theta: "pi/2"}, wires: [0] }, + { name: "rz", params: { phi: "pi/4"}, wires: [0] }, + { name: "rz", params: { phi: "-1*pi/2"}, wires: [1] }, + { name: "rx", params: { theta: "-1*pi/2"}, wires: [1] }, + { name: "rz", params: { phi: "3*pi/4"}, wires: [1] }, + ] + }, + cirq: { + name: "xy", + params: ["phi"], + array: "[[1, 0, 0, 0], [0, np.cos(p_phi/2), 1j*np.sin(p_phi/2), 0], [0, 1j*np.sin(p_phi/2), np.cos(p_phi/2), 0], [0, 0, 0, 1]]", + notTfqSupported: true + }, + braket: { + name: "xy", + params: ["phi"] + }, + aqasm: { + matrix: [[1, 0, 0, 0],[0, "cos(phi / 2)", "i * sin(phi / 2)", 0],[0, "i * sin(phi / 2)", "cos(phi / 2)", 0],[0, 0, 0, 1]], + array: "[[1, 0, 0, 0], [0, np.cos(p_phi/2), 1j*np.sin(p_phi/2), 0], [0, 1j*np.sin(p_phi/2), np.cos(p_phi/2), 0], [0, 0, 0, 1]]", + params: ["phi"] + } + } + }, + + ms: { + description: "Mølmer-Sørensen gate", + matrix: [ + ["1/sqrt(2)", 0, 0, "(-i*exp(-i*(phi0+phi1)))/sqrt(2)"], + + [0, "1/sqrt(2)", "(-i*exp(-i*(phi0-phi1)))/sqrt(2)", 0], + + [0, "(-i*exp(i*(phi0-phi1)))/sqrt(2)", "1/sqrt(2)", 0], + + ["(-i*exp(i*(phi0+phi1)))/sqrt(2)", 0, 0, "1/sqrt(2)"] + ], + params: ["phi0", "phi1"], + drawingInfo: { + connectors: ["box","box"], + label: "MS" + }, + exportInfo: { + quil: { + name: "ms", + params: ["phi0", "phi1"], + defgate: "DEFGATE ms(%phi0, %phi1):\n 1/SQRT(2), 0, 0, (-i*EXP(-i*(%phi0+%phi1)))/SQRT(2)\n 0, 1/SQRT(2), (-i*EXP(-i*(%phi0-%phi1)))/SQRT(2), 0\n 0, (-i*EXP(i*(%phi0-%phi1)))/SQRT(2), 1/SQRT(2), 0\n (-i*EXP(i*(%phi0+%phi1)))/SQRT(2), 0, 0, 1/SQRT(2)" + }, + pyquil: { + name: "ms", + params: ["phi0", "phi1"], + array: "[ [ 1/quil_sqrt(2), 0, 0, (-1j*quil_exp(-1j*(p_phi0+p_phi1)))/quil_sqrt(2) ], [ 0, 1/quil_sqrt(2), (-1j*quil_exp(-1j*(p_phi0-p_phi1)))/quil_sqrt(2), 0 ], [ 0, (-1j*quil_exp(1j*(p_phi0-p_phi1)))/quil_sqrt(2), 1/quil_sqrt(2), 0 ], [ (-1j*quil_exp(1j*(p_phi0+p_phi1)))/quil_sqrt(2), 0, 0, 1/quil_sqrt(2) ] ]" + }, + cirq: { + name: "ms" + }, + quest: { + name: "ms", + //@TODO add function + func: "TODO" + }, + qasm: { + name: "ms" + }, + qiskit: { + name: "ms" + }, + braket: { + name: "unitary", + params: ["phi0", "phi1"], + array: "[ [ 1/np.sqrt(2), 0, 0, (-1j*np.exp(-1j*(p_phi0+p_phi1)))/np.sqrt(2) ], [ 0, 1/np.sqrt(2), (-1j*np.exp(-1j*(p_phi0-p_phi1)))/np.sqrt(2), 0 ], [ 0, (-1j*np.exp(1j*(p_phi0-p_phi1)))/np.sqrt(2), 1/np.sqrt(2), 0 ], [ (-1j*np.exp(1j*(p_phi0+p_phi1)))/np.sqrt(2), 0, 0, 1/np.sqrt(2) ] ]" + }, + aqasm: { + matrix: [["cos(theta)", 0, 0, "-i*sin(theta)"],[0, "cos(theta)", "-i*sin(theta)", 0],[0, "-i*sin(theta)", "cos(theta)", 0],["-i*sin(theta)", 0, 0, "cos(theta)"]], + array: "[ [ 1/np.sqrt(2), 0, 0, (-1j*np.exp(-1j*(p_phi0+p_phi1)))/np.sqrt(2) ], [ 0, 1/np.sqrt(2), (-1j*np.exp(-1j*(p_phi0-p_phi1)))/np.sqrt(2), 0 ], [ 0, (-1j*np.exp(1j*(p_phi0-p_phi1)))/np.sqrt(2), 1/np.sqrt(2), 0 ], [ (-1j*np.exp(1j*(p_phi0+p_phi1)))/np.sqrt(2), 0, 0, 1/np.sqrt(2) ] ]", + params: ["phi0", "phi1"] + } + } + }, + cr2: { description: "Controlled PI/2 rotation over Z-axis", matrix: [ @@ -7709,7 +7911,7 @@ QuantumCircuit.prototype.exportToSVG = function(options) { if(options.customGate) { initSymbol = qubitLetter(wire, numRows); } - svg += "|" + initSymbol + "⟩"; + svg += "|" + initSymbol + "⟩"; svg += ""; svg += "q" + wire + ""; } diff --git a/package-lock.json b/package-lock.json index 5e6fd8d..1d4d591 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,19 +1,2381 @@ { "name": "quantum-circuit", - "version": "0.9.198", - "lockfileVersion": 1, + "version": "0.9.199", + "lockfileVersion": 2, "requires": true, - "dependencies": { - "JSONStream": { + "packages": { + "": { + "name": "quantum-circuit", + "version": "0.9.199", + "license": "MIT", + "dependencies": { + "antlr4": "4.7.2", + "mathjs": "^6.0.3" + }, + "devDependencies": { + "browserify": "^16.5.1", + "mocha": "^6.2.3", + "uglify-js": "^3.10.0", + "url": "^0.11.0" + } + }, + "node_modules/acorn": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", + "integrity": "sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-walk": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.1.1.tgz", + "integrity": "sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/antlr4": { + "version": "4.7.2", + "resolved": "https://registry.npmjs.org/antlr4/-/antlr4-4.7.2.tgz", + "integrity": "sha512-vZA1xYufXLe3LX+ja9rIVxjRmILb1x3k7KYZHltRbfJtXjJ1DlFIqt+CbPYmghx0EuzY9DajiDw+MdyEt1qAsQ==" + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.1", + "util": "0.10.3" + } + }, + "node_modules/assert/node_modules/inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "dependencies": { + "inherits": "2.0.1" + } + }, + "node_modules/balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", + "dev": true + }, + "node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "node_modules/browser-pack": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", + "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", + "dev": true, + "dependencies": { + "combine-source-map": "~0.8.0", + "defined": "^1.0.0", + "JSONStream": "^1.0.3", + "safe-buffer": "^5.1.1", + "through2": "^2.0.0", + "umd": "^3.0.0" + }, + "bin": { + "browser-pack": "bin/cmd.js" + } + }, + "node_modules/browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "dependencies": { + "resolve": "1.1.7" + } + }, + "node_modules/browser-resolve/node_modules/resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, + "node_modules/browserify": { + "version": "16.5.1", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.5.1.tgz", + "integrity": "sha512-EQX0h59Pp+0GtSRb5rL6OTfrttlzv+uyaUVlK6GX3w11SQ0jKPKyjC/54RhPR2ib2KmfcELM06e8FxcI5XNU2A==", + "dev": true, + "dependencies": { + "assert": "^1.4.0", + "browser-pack": "^6.0.1", + "browser-resolve": "^1.11.0", + "browserify-zlib": "~0.2.0", + "buffer": "~5.2.1", + "cached-path-relative": "^1.0.0", + "concat-stream": "^1.6.0", + "console-browserify": "^1.1.0", + "constants-browserify": "~1.0.0", + "crypto-browserify": "^3.0.0", + "defined": "^1.0.0", + "deps-sort": "^2.0.0", + "domain-browser": "^1.2.0", + "duplexer2": "~0.1.2", + "events": "^2.0.0", + "glob": "^7.1.0", + "has": "^1.0.0", + "htmlescape": "^1.1.0", + "https-browserify": "^1.0.0", + "inherits": "~2.0.1", + "insert-module-globals": "^7.0.0", + "JSONStream": "^1.0.3", + "labeled-stream-splicer": "^2.0.0", + "mkdirp-classic": "^0.5.2", + "module-deps": "^6.0.0", + "os-browserify": "~0.3.0", + "parents": "^1.0.1", + "path-browserify": "~0.0.0", + "process": "~0.11.0", + "punycode": "^1.3.2", + "querystring-es3": "~0.2.0", + "read-only-stream": "^2.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.1.4", + "shasum": "^1.0.0", + "shell-quote": "^1.6.1", + "stream-browserify": "^2.0.0", + "stream-http": "^3.0.0", + "string_decoder": "^1.1.1", + "subarg": "^1.0.0", + "syntax-error": "^1.1.1", + "through2": "^2.0.0", + "timers-browserify": "^1.0.1", + "tty-browserify": "0.0.1", + "url": "~0.11.0", + "util": "~0.10.1", + "vm-browserify": "^1.0.0", + "xtend": "^4.0.0" + }, + "bin": { + "browserify": "bin/cmd.js" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "dependencies": { + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" + } + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", + "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", + "dev": true, + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "node_modules/cached-path-relative": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz", + "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==", + "dev": true + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/combine-source-map": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", + "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", + "dev": true, + "dependencies": { + "convert-source-map": "~1.1.0", + "inline-source-map": "~0.6.0", + "lodash.memoize": "~3.0.3", + "source-map": "~0.5.3" + } + }, + "node_modules/complex.js": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.0.11.tgz", + "integrity": "sha512-6IArJLApNtdg1P1dFtn3dnyzoZBEF0MwMnrfF1exSBRpZYoy4yieMkpZhQDC0uwctw48vii0CFVyHfpgZ/DfGw==", + "engines": { + "node": "*" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "node_modules/convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "node_modules/create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/dash-ast": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", + "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", + "dev": true + }, + "node_modules/debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.2.0.tgz", + "integrity": "sha512-vDPw+rDgn3bZe1+F/pyEwb1oMG2XTlRVgAa6B4KccTEpYgF8w6eQllVbQcfIJnZyvzFtFpxnpGtx8dd7DJp/Rw==" + }, + "node_modules/define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "dependencies": { + "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "node_modules/deps-sort": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", + "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", + "dev": true, + "dependencies": { + "JSONStream": "^1.0.3", + "shasum-object": "^1.0.0", + "subarg": "^1.0.0", + "through2": "^2.0.0" + }, + "bin": { + "deps-sort": "bin/cmd.js" + } + }, + "node_modules/des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/detective": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "dev": true, + "dependencies": { + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true, + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/es-abstract": { + "version": "1.17.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", + "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", + "dev": true, + "dependencies": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.2.0", + "is-regex": "^1.1.0", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimend": "^1.0.1", + "string.prototype.trimstart": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escape-latex": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", + "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/events": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", + "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/fast-safe-stringify": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", + "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==", + "dev": true + }, + "node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/flat": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "dev": true, + "dependencies": { + "is-buffer": "~2.0.3" + }, + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat/node_modules/is-buffer": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", + "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/fraction.js": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.0.12.tgz", + "integrity": "sha512-8Z1K0VTG4hzYY7kA/1sj4/r1/RWLBD3xwReT/RCrUCbzPszjNQCCsy3ktkU/eaEqX3MYa4pY37a52eiBlPMlhA==", + "engines": { + "node": "*" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/get-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", + "dev": true + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/growl": { + "version": "1.10.5", + "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", + "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", + "dev": true, + "engines": { + "node": ">=4.x" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/htmlescape": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/inline-source-map": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", + "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", + "dev": true, + "dependencies": { + "source-map": "~0.5.3" + } + }, + "node_modules/insert-module-globals": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.0.tgz", + "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==", + "dev": true, + "dependencies": { + "acorn-node": "^1.5.2", + "combine-source-map": "^0.8.0", + "concat-stream": "^1.6.1", + "is-buffer": "^1.1.0", + "JSONStream": "^1.0.3", + "path-is-absolute": "^1.0.1", + "process": "~0.11.0", + "through2": "^2.0.0", + "undeclared-identifiers": "^1.1.2", + "xtend": "^4.0.0" + }, + "bin": { + "insert-module-globals": "bin/cmd.js" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-callable": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", + "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz", + "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", + "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/javascript-natural-sort": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", + "integrity": "sha1-+eIwPUUH9tdDVac2ZNFED7Wg71k=" + }, + "node_modules/js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-stable-stringify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", + "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", + "dev": true, + "dependencies": { + "jsonify": "~0.0.0" + } + }, + "node_modules/jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/JSONStream": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, - "requires": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/labeled-stream-splicer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", + "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "stream-splicer": "^2.0.0" + } + }, + "node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", + "dev": true + }, + "node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mathjs": { + "version": "6.6.5", + "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-6.6.5.tgz", + "integrity": "sha512-jvRqk7eoEHBcx/lskmy05m+8M7xDHAJcJzRJoqIsqExtlTHPDQO0Zv85g5F0rasDAXF+DLog/70hcqCJijSzPQ==", + "dependencies": { + "complex.js": "^2.0.11", + "decimal.js": "^10.2.0", + "escape-latex": "^1.2.0", + "fraction.js": "^4.0.12", + "javascript-natural-sort": "^0.7.1", + "seed-random": "^2.2.0", + "tiny-emitter": "^2.1.0", + "typed-function": "^1.1.1" + }, + "bin": { + "mathjs": "bin/cli.js" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.4.tgz", + "integrity": "sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw==", + "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", + "dev": true, + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.2.tgz", + "integrity": "sha512-ejdnDQcR75gwknmMw/tx02AuRs8jCtqFoFqDZMjiNxsu85sRIJVXDKHuLYvUUPRBUtV2FpSZa9bL1BUa3BdR2g==", + "dev": true + }, + "node_modules/mocha": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.3.tgz", + "integrity": "sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg==", + "dev": true, + "dependencies": { + "ansi-colors": "3.2.3", + "browser-stdout": "1.3.1", + "debug": "3.2.6", + "diff": "3.5.0", + "escape-string-regexp": "1.0.5", + "find-up": "3.0.0", + "glob": "7.1.3", + "growl": "1.10.5", + "he": "1.2.0", + "js-yaml": "3.13.1", + "log-symbols": "2.2.0", + "minimatch": "3.0.4", + "mkdirp": "0.5.4", + "ms": "2.1.1", + "node-environment-flags": "1.0.5", + "object.assign": "4.1.0", + "strip-json-comments": "2.0.1", + "supports-color": "6.0.0", + "which": "1.3.1", + "wide-align": "1.1.3", + "yargs": "13.3.2", + "yargs-parser": "13.1.2", + "yargs-unparser": "1.6.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/module-deps": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.2.tgz", + "integrity": "sha512-a9y6yDv5u5I4A+IPHTnqFxcaKr4p50/zxTjcQJaX2ws9tN/W6J6YXnEKhqRyPhl494dkcxx951onSKVezmI+3w==", + "dev": true, + "dependencies": { + "browser-resolve": "^1.7.0", + "cached-path-relative": "^1.0.2", + "concat-stream": "~1.6.0", + "defined": "^1.0.0", + "detective": "^5.2.0", + "duplexer2": "^0.1.2", + "inherits": "^2.0.1", + "JSONStream": "^1.0.3", + "parents": "^1.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.4.0", + "stream-combiner2": "^1.1.1", + "subarg": "^1.0.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" + }, + "bin": { + "module-deps": "bin/cmd.js" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + }, + "node_modules/node-environment-flags": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz", + "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==", + "dev": true, + "dependencies": { + "object.getownpropertydescriptors": "^2.0.3", + "semver": "^5.7.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", + "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/parents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", + "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", + "dev": true, + "dependencies": { + "path-platform": "~0.11.15" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.5.tgz", + "integrity": "sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ==", + "dev": true, + "dependencies": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-platform": { + "version": "0.11.15", + "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", + "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/pbkdf2": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz", + "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", + "dev": true, + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true, + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/read-only-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", + "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/readable-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz", + "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==", + "dev": true, + "dependencies": { + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "dev": true + }, + "node_modules/seed-random": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz", + "integrity": "sha1-KpsZ4lCoFwmSMaW5mk2vgLf77VQ=" + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shasum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", + "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", + "dev": true, + "dependencies": { + "json-stable-stringify": "~0.0.0", + "sha.js": "~2.4.4" + } + }, + "node_modules/shasum-object": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", + "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", + "dev": true, + "dependencies": { + "fast-safe-stringify": "^2.0.7" + } + }, + "node_modules/shell-quote": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz", + "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-concat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", + "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=", + "dev": true + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "dev": true, + "dependencies": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-http": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.1.0.tgz", + "integrity": "sha512-cuB6RgO7BqC4FBYzmnvhob5Do3wIdIsXAgGycHJnW+981gHqoYcYz9lqjJrk8WXRddbwPuqPYRl+bag6mYv4lw==", + "dev": true, + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^3.0.6", + "xtend": "^4.0.0" + } + }, + "node_modules/stream-http/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/stream-splicer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", + "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", + "dev": true, + "dependencies": { + "minimist": "^1.1.0" + } + }, + "node_modules/supports-color": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", + "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/syntax-error": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", + "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", + "dev": true, + "dependencies": { + "acorn-node": "^1.2.0" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/timers-browserify": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", + "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "dev": true, + "dependencies": { + "process": "~0.11.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + }, + "node_modules/tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", + "dev": true + }, + "node_modules/typed-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-1.1.1.tgz", + "integrity": "sha512-RbN7MaTQBZLJYzDENHPA0nUmWT0Ex80KHItprrgbTPufYhIlTePvCXZxyQK7wgn19FW5bnuaBIKcBb5mRWjB1Q==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "node_modules/uglify-js": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.10.0.tgz", + "integrity": "sha512-Esj5HG5WAyrLIdYU74Z3JdG2PxdIusvj6IWHMtlyESxc7kcDz7zYlYjpnSokn1UbpV0d/QX9fan7gkCNd/9BQA==", + "dev": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/umd": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", + "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", + "dev": true, + "bin": { + "umd": "bin/cli.js" + } + }, + "node_modules/undeclared-identifiers": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", + "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", + "dev": true, + "dependencies": { + "acorn-node": "^1.3.0", + "dash-ast": "^1.0.0", + "get-assigned-identifiers": "^1.2.0", + "simple-concat": "^1.0.0", + "xtend": "^4.0.1" + }, + "bin": { + "undeclared-identifiers": "bin.js" + } + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + }, + "node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", + "dev": true + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "node_modules/wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2" + } + }, + "node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "dependencies": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" } }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + } + }, + "dependencies": { "acorn": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.1.tgz", @@ -44,9 +2406,9 @@ "dev": true }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true }, "ansi-styles": { @@ -123,9 +2485,9 @@ "dev": true }, "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, "brace-expansion": { @@ -150,9 +2512,9 @@ "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", "dev": true, "requires": { - "JSONStream": "^1.0.3", "combine-source-map": "~0.8.0", "defined": "^1.0.0", + "JSONStream": "^1.0.3", "safe-buffer": "^5.1.1", "through2": "^2.0.0", "umd": "^3.0.0" @@ -187,7 +2549,6 @@ "integrity": "sha512-EQX0h59Pp+0GtSRb5rL6OTfrttlzv+uyaUVlK6GX3w11SQ0jKPKyjC/54RhPR2ib2KmfcELM06e8FxcI5XNU2A==", "dev": true, "requires": { - "JSONStream": "^1.0.3", "assert": "^1.4.0", "browser-pack": "^6.0.1", "browser-resolve": "^1.11.0", @@ -209,6 +2570,7 @@ "https-browserify": "^1.0.0", "inherits": "~2.0.1", "insert-module-globals": "^7.0.0", + "JSONStream": "^1.0.3", "labeled-stream-splicer": "^2.0.0", "mkdirp-classic": "^0.5.2", "module-deps": "^6.0.0", @@ -337,9 +2699,9 @@ "dev": true }, "cached-path-relative": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", - "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.1.0.tgz", + "integrity": "sha512-WF0LihfemtesFcJgO7xfOoOcnWzY/QHR4qeDqV44jPU3HTI54+LnfXK3SA27AVVGCdZFgjjFFaqUA9Jx7dMJZA==", "dev": true }, "camelcase": { @@ -392,9 +2754,9 @@ }, "dependencies": { "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true }, "string-width": { @@ -656,18 +3018,18 @@ } }, "elliptic": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz", - "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==", + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", "dev": true, "requires": { - "bn.js": "^4.4.0", - "brorand": "^1.0.1", + "bn.js": "^4.11.9", + "brorand": "^1.1.0", "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.0" + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" } }, "emoji-regex": { @@ -755,9 +3117,9 @@ } }, "flat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", - "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", "dev": true, "requires": { "is-buffer": "~2.0.3" @@ -927,11 +3289,11 @@ "integrity": "sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw==", "dev": true, "requires": { - "JSONStream": "^1.0.3", "acorn-node": "^1.5.2", "combine-source-map": "^0.8.0", "concat-stream": "^1.6.1", "is-buffer": "^1.1.0", + "JSONStream": "^1.0.3", "path-is-absolute": "^1.0.1", "process": "~0.11.0", "through2": "^2.0.0", @@ -1029,6 +3391,16 @@ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, "labeled-stream-splicer": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", @@ -1050,9 +3422,9 @@ } }, "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "lodash.memoize": { @@ -1128,9 +3500,9 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true }, "mkdirp": { @@ -1191,6 +3563,17 @@ "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } } } } @@ -1201,7 +3584,6 @@ "integrity": "sha512-a9y6yDv5u5I4A+IPHTnqFxcaKr4p50/zxTjcQJaX2ws9tN/W6J6YXnEKhqRyPhl494dkcxx951onSKVezmI+3w==", "dev": true, "requires": { - "JSONStream": "^1.0.3", "browser-resolve": "^1.7.0", "cached-path-relative": "^1.0.2", "concat-stream": "~1.6.0", @@ -1209,6 +3591,7 @@ "detective": "^5.2.0", "duplexer2": "^0.1.2", "inherits": "^2.0.1", + "JSONStream": "^1.0.3", "parents": "^1.0.0", "readable-stream": "^2.0.2", "resolve": "^1.4.0", @@ -1361,9 +3744,9 @@ "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-platform": { @@ -1573,9 +3956,9 @@ } }, "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.0.tgz", + "integrity": "sha512-QHsz8GgQIGKlRi24yFc6a6lN69Idnx634w49ay6+jA5yFh7a1UY+4Rp6HPx/L/1zcEDPEij8cIsiqR6bQsE5VQ==", "dev": true }, "simple-concat": { @@ -1651,6 +4034,15 @@ "readable-stream": "^2.0.2" } }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -1681,15 +4073,6 @@ "es-abstract": "^1.17.5" } }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -1887,9 +4270,9 @@ }, "dependencies": { "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true }, "string-width": { @@ -1927,9 +4310,9 @@ "dev": true }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yargs": { @@ -1951,9 +4334,9 @@ }, "dependencies": { "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true }, "string-width": { diff --git a/package.json b/package.json index 05f5852..ba16cd7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "quantum-circuit", - "version": "0.9.199", + "version": "0.9.200", "description": "Quantum Circuit Simulator", "main": "lib/quantum-circuit.js", "unpkg": "dist/quantum-circuit.min.js",